Mark ab/7061308 as merged in stage.

Bug: 180401296
Merged-In: Ie69d764e0df81b05020454e4f1389a457267469d
Change-Id: If0d3a300657259c4745bd16b66dba7e4ee947dca
diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml
index 50dc50a..3feb85a 100644
--- a/.azure-pipelines/ci.yml
+++ b/.azure-pipelines/ci.yml
@@ -1,18 +1,14 @@
 variables:
-  manylinux: false
   coverage: false
 
-resources:
-  containers:
-  - container: manylinux1
-    image: pyca/cryptography-manylinux1:x86_64
+trigger: ['master', '3.9', '3.8', '3.7']
 
 jobs:
 - job: Prebuild
   displayName: Pre-build checks
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   steps:
   - template: ./prebuild-checks.yml
@@ -24,7 +20,7 @@
   condition: and(succeeded(), eq(dependencies.Prebuild.outputs['docs.run'], 'true'))
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   steps:
   - template: ./docs-steps.yml
@@ -56,7 +52,7 @@
   condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   variables:
     testRunTitle: '$(build.sourceBranchName)-linux'
@@ -69,37 +65,6 @@
       dependencies: apt
 
 
-- job: ManyLinux1_CI_Tests
-  displayName: ManyLinux1 CI Tests
-  dependsOn: Prebuild
-  condition: |
-    and(
-        and(
-            succeeded(),
-            eq(variables['manylinux'], 'true')
-        ),
-        eq(dependencies.Prebuild.outputs['tests.run'], 'true')
-    )
-
-  pool:
-    vmImage: ubuntu-16.04
-
-  container: manylinux1
-
-  variables:
-    testRunTitle: '$(build.sourceBranchName)-manylinux1'
-    testRunPlatform: manylinux1
-    openssl_version: ''
-
-  steps:
-  - template: ./posix-steps.yml
-    parameters:
-      dependencies: yum
-      sudo_dependencies: ''
-      xvfb: false
-      patchcheck: false
-
-
 - job: Ubuntu_Coverage_CI_Tests
   displayName: Ubuntu CI Tests (coverage)
   dependsOn: Prebuild
@@ -113,7 +78,7 @@
     )
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   variables:
     testRunTitle: '$(Build.SourceBranchName)-linux-coverage'
@@ -139,7 +104,7 @@
     matrix:
       win32:
         arch: win32
-        buildOpt:
+        buildOpt: '-p Win32'
         testRunTitle: '$(Build.SourceBranchName)-win32'
         testRunPlatform: win32
       win64:
diff --git a/.azure-pipelines/docs-steps.yml b/.azure-pipelines/docs-steps.yml
index 492e4e3..eaf4ad0 100644
--- a/.azure-pipelines/docs-steps.yml
+++ b/.azure-pipelines/docs-steps.yml
@@ -12,7 +12,7 @@
   inputs:
     versionSpec: '>=3.6'
 
-- script: python -m pip install sphinx==1.8.2 blurb python-docs-theme
+- script: python -m pip install sphinx==2.2.0 blurb python-docs-theme
   displayName: 'Install build dependencies'
 
 - ${{ if ne(parameters.latex, 'true') }}:
@@ -21,7 +21,7 @@
     displayName: 'Build documentation'
 
 - ${{ if eq(parameters.latex, 'true') }}:
-  - script: sudo apt-get update && sudo apt-get install -qy --force-yes texlive-full 
+  - script: sudo apt-get update && sudo apt-get install -qy --force-yes texlive-full
     displayName: 'Install LaTeX'
 
   - script: make dist PYTHON=python SPHINXBUILD='python -m sphinx' BLURB='python -m blurb'
diff --git a/.azure-pipelines/posix-deps-apt.sh b/.azure-pipelines/posix-deps-apt.sh
index 4f48990..e0f4ca5 100755
--- a/.azure-pipelines/posix-deps-apt.sh
+++ b/.azure-pipelines/posix-deps-apt.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
 apt-get update
 
 apt-get -yq install \
diff --git a/.azure-pipelines/posix-steps.yml b/.azure-pipelines/posix-steps.yml
index a63659f..b6dde59 100644
--- a/.azure-pipelines/posix-steps.yml
+++ b/.azure-pipelines/posix-steps.yml
@@ -49,7 +49,7 @@
   - script: ./venv/bin/python -m coverage xml
     displayName: 'Generate coverage.xml'
 
-  - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash)
+  - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
     displayName: 'Publish code coverage results'
 
 
diff --git a/.azure-pipelines/pr.yml b/.azure-pipelines/pr.yml
index 228f9db..2e94af3 100644
--- a/.azure-pipelines/pr.yml
+++ b/.azure-pipelines/pr.yml
@@ -1,18 +1,14 @@
 variables:
-  manylinux: false
   coverage: false
 
-resources:
-  containers:
-  - container: manylinux1
-    image: pyca/cryptography-manylinux1:x86_64
+pr: ['master', '3.9', '3.8', '3.7']
 
 jobs:
 - job: Prebuild
   displayName: Pre-build checks
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   steps:
   - template: ./prebuild-checks.yml
@@ -24,7 +20,7 @@
   condition: and(succeeded(), eq(dependencies.Prebuild.outputs['docs.run'], 'true'))
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   steps:
   - template: ./docs-steps.yml
@@ -56,7 +52,7 @@
   condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   variables:
     testRunTitle: '$(system.pullRequest.TargetBranch)-linux'
@@ -69,37 +65,6 @@
       dependencies: apt
 
 
-- job: ManyLinux1_PR_Tests
-  displayName: ManyLinux1 PR Tests
-  dependsOn: Prebuild
-  condition: |
-    and(
-        and(
-            succeeded(),
-            eq(variables['manylinux'], 'true')
-        ),
-        eq(dependencies.Prebuild.outputs['tests.run'], 'true')
-    )
-
-  pool:
-    vmImage: ubuntu-16.04
-
-  container: manylinux1
-
-  variables:
-    testRunTitle: '$(system.pullRequest.TargetBranch)-manylinux1'
-    testRunPlatform: manylinux1
-    openssl_version: ''
-
-  steps:
-  - template: ./posix-steps.yml
-    parameters:
-      dependencies: yum
-      sudo_dependencies: ''
-      xvfb: false
-      patchcheck: false
-
-
 - job: Ubuntu_Coverage_PR_Tests
   displayName: Ubuntu PR Tests (coverage)
   dependsOn: Prebuild
@@ -113,7 +78,7 @@
     )
 
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: ubuntu-18.04
 
   variables:
     testRunTitle: '$(Build.SourceBranchName)-linux-coverage'
@@ -139,7 +104,7 @@
     matrix:
       win32:
         arch: win32
-        buildOpt:
+        buildOpt: '-p Win32'
         testRunTitle: '$(System.PullRequest.TargetBranch)-win32'
         testRunPlatform: win32
       win64:
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
index a460eb1..307510a 100644
--- a/.azure-pipelines/windows-release/msi-steps.yml
+++ b/.azure-pipelines/windows-release/msi-steps.yml
@@ -1,6 +1,12 @@
 steps:
   - template: ./checkout.yml
 
+  - powershell: |
+      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
+    displayName: 'Update signing description'
+    condition: and(succeeded(), not(variables['SigningDescription']))
+
   - task: DownloadPipelineArtifact@1
     displayName: 'Download artifact: doc'
     inputs:
diff --git a/.azure-pipelines/windows-release/stage-pack-msix.yml b/.azure-pipelines/windows-release/stage-pack-msix.yml
index 07e343a..f967cfd 100644
--- a/.azure-pipelines/windows-release/stage-pack-msix.yml
+++ b/.azure-pipelines/windows-release/stage-pack-msix.yml
@@ -105,19 +105,26 @@
     clean: all
 
   steps:
-  - checkout: none
+  - template: ./checkout.yml
   - template: ./find-sdk.yml
 
+  - powershell: |
+      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
+    displayName: 'Update signing description'
+    condition: and(succeeded(), not(variables['SigningDescription']))
+
   - task: DownloadBuildArtifacts@0
     displayName: 'Download Artifact: unsigned_msix'
     inputs:
       artifactName: unsigned_msix
       downloadPath: $(Build.BinariesDirectory)
 
+  # MSIX must be signed and timestamped simultaneously
   - powershell: |
       $failed = $true
       foreach ($retry in 1..3) {
-          signtool sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "$(SigningDescription)" (gi *.msix)
+          signtool sign /a /n "$(SigningCertificate)" /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d "$(SigningDescription)" (gi *.msix)
           if ($?) {
               $failed = $false
               break
diff --git a/.azure-pipelines/windows-release/stage-pack-nuget.yml b/.azure-pipelines/windows-release/stage-pack-nuget.yml
index b100364..8dfea38 100644
--- a/.azure-pipelines/windows-release/stage-pack-nuget.yml
+++ b/.azure-pipelines/windows-release/stage-pack-nuget.yml
@@ -4,7 +4,7 @@
   condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
 
   pool:
-    vmImage: windows-2019
+    name: 'Windows Release'
 
   workspace:
     clean: all
@@ -36,6 +36,14 @@
       nuget pack "$(Build.BinariesDirectory)\layout\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
     displayName: 'Create nuget package'
 
+  - powershell: |
+      gci *.nupkg | %{
+        nuget sign "$_" -CertificateSubjectName "$(SigningCertificate)" -Timestamper http://timestamp.digicert.com/ -Overwrite
+      }
+    displayName: 'Sign nuget package'
+    workingDirectory: $(Build.ArtifactStagingDirectory)
+    condition: and(succeeded(), variables['SigningCertificate'])
+
   - task: PublishBuildArtifacts@1
     displayName: 'Publish Artifact: nuget'
     inputs:
diff --git a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
index b4710d8..4b88bde 100644
--- a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
+++ b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
@@ -39,11 +39,6 @@
       artifactName: embed
       downloadPath: $(Build.BinariesDirectory)
 
-  - powershell: 'gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del'
-    displayName: 'Prevent publishing ARM/ARM64 packages'
-    workingDirectory: '$(Build.BinariesDirectory)\embed'
-    condition: and(succeeded(), not(variables['PublishArmPackages']))
-
   - task: DownloadPipelineArtifact@1
     displayName: 'Download artifact from $(BuildToPublish): Doc'
     condition: and(succeeded(), variables['BuildToPublish'])
@@ -80,6 +75,11 @@
       buildVersionToDownload: specific
       buildId: $(BuildToPublish)
 
+  - powershell: 'gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del'
+    displayName: 'Prevent publishing ARM/ARM64 packages'
+    workingDirectory: '$(Build.BinariesDirectory)\embed'
+    condition: and(succeeded(), not(variables['PublishArmPackages']))
+
 
   - template: ./gpg-sign.yml
     parameters:
diff --git a/.azure-pipelines/windows-release/stage-sign.yml b/.azure-pipelines/windows-release/stage-sign.yml
index 4d757ae..c21e1c9 100644
--- a/.azure-pipelines/windows-release/stage-sign.yml
+++ b/.azure-pipelines/windows-release/stage-sign.yml
@@ -27,6 +27,12 @@
   - template: ./find-sdk.yml
 
   - powershell: |
+      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
+    displayName: 'Update signing description'
+    condition: and(succeeded(), not(variables['SigningDescription']))
+
+  - powershell: |
       Write-Host "##vso[build.addbuildtag]signed"
     displayName: 'Add build tags'
 
@@ -51,7 +57,7 @@
       $files = (gi ${{ parameters.Include }} -Exclude ${{ parameters.Exclude }})
       $failed = $true
       foreach ($retry in 1..10) {
-          signtool timestamp /t http://timestamp.verisign.com/scripts/timestamp.dll $files
+          signtool timestamp /tr http://timestamp.digicert.com/ /td sha256 $files
           if ($?) {
               $failed = $false
               break
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 963ab4d..eb6fc2c 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -11,6 +11,7 @@
 **/*context*                  @1st1
 **/*genobject*                @1st1
 **/*hamt*                     @1st1
+Objects/set*                  @rhettinger
 Objects/dict*                 @methane
 
 # Hashing
@@ -22,6 +23,14 @@
 /Modules/_blake2/**           @python/crypto-team @tiran
 /Modules/_sha3/**             @python/crypto-team @tiran
 
+# logging
+**/*logging*                  @vsajip
+
+# venv
+**/*venv*                     @vsajip
+
+# Launcher
+/PC/launcher.c                @vsajip
 
 # HTML
 /Lib/html/                    @ezio-melotti
@@ -43,6 +52,15 @@
 # CSPRNG
 Python/bootstrap_hash.c       @python/crypto-team @tiran
 
+# Dates and times
+**/*datetime*                 @pganssle @abalkin
+**/*str*time*                 @pganssle @abalkin
+Doc/library/time.rst          @pganssle @abalkin
+Lib/test/test_time.py         @pganssle @abalkin
+Modules/timemodule.c          @pganssle @abalkin
+Python/pytime.c               @pganssle @abalkin
+Include/pytime.h              @pganssle @abalkin
+
 # Email and related
 **/*mail*                     @python/email-team
 **/*smtp*                     @python/email-team
@@ -50,14 +68,23 @@
 **/*imap*                     @python/email-team
 **/*poplib*                   @python/email-team
 
+# Garbage collector
+/Modules/gcmodule.c           @pablogsal
+/Doc/library/gc.rst           @pablogsal
+
 # Parser/Pgen
 /Parser/pgen/                 @pablogsal
+/Parser/pegen/                @pablogsal @lysnikolaou
+/Tools/peg_generator/         @pablogsal @lysnikolaou
+/Lib/test/test_peg_generator/ @pablogsal @lysnikolaou
 
 # SQLite 3
 **/*sqlite*                   @berkerpeksag
 
 # subprocess
-**/*subprocess*               @gpshead
+/Lib/subprocess.py            @gpshead
+/Lib/test/test_subprocess.py  @gpshead
+/Modules/*subprocess*         @gpshead
 
 # Windows
 /PC/                          @python/windows-team
@@ -70,6 +97,7 @@
 /Tools/msi/                   @python/windows-team
 /Tools/nuget/                 @python/windows-team
 
+# Misc
 **/*itertools*                @rhettinger
 **/*collections*              @rhettinger
 **/*random*                   @rhettinger
@@ -85,6 +113,15 @@
 
 **/*typing*                   @gvanrossum @ilevkivskyi
 
+**/*asyncore                  @giampaolo
+**/*asynchat                  @giampaolo
+**/*ftplib                    @giampaolo
+**/*shutil                    @giampaolo
+
+**/*enum*                     @ethanfurman
+**/*cgi*                      @ethanfurman
+**/*tarfile*                  @ethanfurman
+
 # macOS
 /Mac/                         @python/macos-team
 **/*osx_support*              @python/macos-team
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..36c4e27
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+custom: https://www.python.org/psf/donations/python-dev/
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index cf86505..3d7c990 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -4,9 +4,16 @@
 # it prevents to mark a job as mandatory. A PR cannot be merged if a job is
 # mandatory but not scheduled because of "paths-ignore".
 on:
+  push:
+    branches:
+    - master
+    - 3.9
+    - 3.8
+    - 3.7
   pull_request:
     branches:
     - master
+    - 3.9
     - 3.8
     - 3.7
 
@@ -25,8 +32,49 @@
             echo '::set-output name=run_tests::true'
           else
             git fetch origin $GITHUB_BASE_REF --depth=1
-            git diff --name-only origin/$GITHUB_BASE_REF... | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true
+            # git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more
+            # reliable than git diff "origin/$GITHUB_BASE_REF.." (2 dots),
+            # but it requires to download more commits (this job uses
+            # "git fetch --depth=1").
+            #
+            # git diff "origin/$GITHUB_BASE_REF..." (3 dots) works with Git
+            # 2.26, but Git 2.28 is stricter and fails with "no merge base".
+            #
+            # git diff "origin/$GITHUB_BASE_REF.." (2 dots) should be enough on
+            # GitHub, since GitHub starts by merging origin/$GITHUB_BASE_REF
+            # into the PR branch anyway.
+            #
+            # https://github.com/python/core-workflow/issues/373
+            git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true
           fi
+
+  check_generated_files:
+    name: 'Check if generated files are up to date'
+    runs-on: ubuntu-latest
+    needs: check_source
+    if: needs.check_source.outputs.run_tests == 'true'
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions/setup-python@v2
+      - name: Install Dependencies
+        run: sudo ./.github/workflows/posix-deps-apt.sh
+      - name: Build CPython
+        run: |
+          ./configure --with-pydebug
+          make -j4 regen-all
+      - name: Check for changes
+        run: |
+          changes=$(git status --porcelain)
+          # Check for changes in regenerated files
+          if ! test -z "$changes"
+          then
+            echo "Generated files not up to date. Perhaps you forgot to run make regen-all ;)"
+            echo "$changes"
+            exit 1
+          fi
+      - name: Check exported libpython symbols
+        run: make smelly
+
   build_win32:
     name: 'Windows (x86)'
     runs-on: windows-latest
@@ -39,7 +87,7 @@
     - name: Display build info
       run: .\python.bat -m test.pythoninfo
     - name: Tests
-      run: .\PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
+      run: .\PCbuild\rt.bat -p Win32 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
 
   build_win_amd64:
     name: 'Windows (x64)'
@@ -53,7 +101,7 @@
     - name: Display build info
       run: .\python.bat -m test.pythoninfo
     - name: Tests
-      run: .\PCbuild\rt.bat -x64 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
+      run: .\PCbuild\rt.bat -p x64 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
 
   build_macos:
     name: 'macOS'
@@ -84,7 +132,7 @@
       run: sudo ./.github/workflows/posix-deps-apt.sh
     - name: 'Restore OpenSSL build'
       id: cache-openssl
-      uses: actions/cache@v1
+      uses: actions/cache@v2.1.3
       with:
         path: ./multissl/openssl/${{ env.OPENSSL_VER }}
         key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml
index 769b3d0..3664ccb 100644
--- a/.github/workflows/build_msi.yml
+++ b/.github/workflows/build_msi.yml
@@ -4,17 +4,21 @@
   push:
     branches:
     - master
+    - 3.9
     - 3.8
     - 3.7
     paths:
     - 'Tools/msi/**'
+    - 'Lib/ensurepip/**'
   pull_request:
     branches:
     - master
+    - 3.9
     - 3.8
     - 3.7
     paths:
     - 'Tools/msi/**'
+    - 'Lib/ensurepip/**'
 
 jobs:
   build_win32:
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index b5668f8..6092f41 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -4,6 +4,7 @@
   push:
     branches:
     - master
+    - 3.9
     - 3.8
     - 3.7
     paths-ignore:
@@ -12,6 +13,7 @@
   #pull_request:
   #  branches:
   #  - master
+  #  - 3.9
   #  - 3.8
   #  - 3.7
   #  paths-ignore:
@@ -30,7 +32,7 @@
       run: sudo ./.github/workflows/posix-deps-apt.sh
     - name: 'Restore OpenSSL build'
       id: cache-openssl
-      uses: actions/cache@v1
+      uses: actions/cache@v2.1.3
       with:
         path: ./multissl/openssl/${{ env.OPENSSL_VER }}
         key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
@@ -48,6 +50,7 @@
         ./python -m venv .venv
         source ./.venv/bin/activate
         python -m pip install -U coverage
+        python -m pip install -r Misc/requirements-test.txt
         python -m test.pythoninfo
     - name: 'Tests with coverage'
       run: >
@@ -65,7 +68,7 @@
     - name: 'Publish code coverage results'
       run: |
         source ./.venv/bin/activate
-        bash <(curl -s https://codecov.io/bash)
+        bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
       env:
         CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
 
@@ -84,6 +87,6 @@
       if: always()
       run: |
         make pythoninfo
-        bash <(curl -s https://codecov.io/bash)
+        bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
       env:
         CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index e7d9958..02e7c86 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -4,6 +4,7 @@
   #push:
   #  branches:
   #  - master
+  #  - 3.9
   #  - 3.8
   #  - 3.7
   #  paths:
@@ -11,6 +12,7 @@
   pull_request:
     branches:
     - master
+    - 3.9
     - 3.8
     - 3.7
     paths:
@@ -34,7 +36,7 @@
     - name: 'Build documentation'
       run: xvfb-run make -C Doc/ PYTHON=../python SPHINXOPTS="-q -W -j4" doctest suspicious html
     - name: 'Upload'
-      uses: actions/upload-artifact@v1
+      uses: actions/upload-artifact@v2.2.1
       with:
         name: doc-html
         path: Doc/build/html
diff --git a/.github/workflows/posix-deps-apt.sh b/.github/workflows/posix-deps-apt.sh
index 2b879d3..5c7b998 100755
--- a/.github/workflows/posix-deps-apt.sh
+++ b/.github/workflows/posix-deps-apt.sh
@@ -3,19 +3,19 @@
 
 apt-get -yq install \
     build-essential \
-    zlib1g-dev \
+    gdb \
+    lcov \
     libbz2-dev \
+    libffi-dev \
+    libgdbm-dev \
     liblzma-dev \
     libncurses5-dev \
     libreadline6-dev \
     libsqlite3-dev \
     libssl-dev \
-    libgdbm-dev \
-    tk-dev \
     lzma \
     lzma-dev \
-    liblzma-dev \
-    libffi-dev \
+    tk-dev \
     uuid-dev \
     xvfb \
-    lcov
+    zlib1g-dev
diff --git a/.gitignore b/.gitignore
index b662374..80dcf34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,8 @@
 *.iml
 *.o
 *.a
-*.so*
+*.so
+*.so.*
 *.dylib
 *.dll
 *.orig
@@ -33,6 +34,7 @@
 gmon.out
 .coverage
 .mypy_cache/
+.pytest_cache/
 
 *.exe
 !Lib/distutils/command/*.exe
@@ -69,6 +71,7 @@
 Programs/_testembed
 PC/python_nt*.h
 PC/pythonnt_rc*.h
+Modules/python.exp
 PC/*/*.exp
 PC/*/*.lib
 PC/*/*.bsc
@@ -92,6 +95,7 @@
 PCbuild/arm64/
 PCbuild/obj/
 PCbuild/win32/
+Tools/unicode/data/
 /autom4te.cache
 /build/
 /config.cache
@@ -99,6 +103,8 @@
 /config.status
 /config.status.lineno
 /platform
+/profile-clean-stamp
+/profile-run-stamp
 /pybuilddir.txt
 /pyconfig.h
 /python-config
diff --git a/.travis.yml b/.travis.yml
index 2b6fed6..5d9f420 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
 language: c
-dist: xenial
+dist: bionic
 
 # To cache doc-building dependencies and C compiler output.
 cache:
@@ -22,7 +22,7 @@
 branches:
   only:
     - master
-    - /^\d\.\d$/
+    - /^\d\.\d+$/
     - buildbot-custom
 
 matrix:
@@ -51,10 +51,7 @@
       env: TESTING=docs
       before_script:
         - cd Doc
-        # Sphinx is pinned so that new versions that introduce new warnings won't suddenly cause build failures.
-        # (Updating the version is fine as long as no warnings are raised by doing so.)
-        # The theme used by the docs is stored separately, so we need to install that as well.
-        - python -m pip install sphinx==1.8.2 blurb python-docs-theme
+        - make venv PYTHON=python
       script:
         - make check suspicious html SPHINXOPTS="-q -W -j4"
     - name: "Documentation tests"
@@ -93,6 +90,7 @@
         # Need a venv that can parse covered code.
         - ./python -m venv venv
         - ./venv/bin/python -m pip install -U coverage
+        - ./venv/bin/python -m pip install -r Misc/requirements-test.txt
         - ./venv/bin/python -m test.pythoninfo
       script:
         # Skip tests that re-run the entire test suite.
@@ -100,7 +98,7 @@
       after_script:  # Probably should be after_success once test suite updated to run under coverage.py.
         # Make the `coverage` command available to Codecov w/ a version of Python that can parse all source files.
         - source ./venv/bin/activate
-        - bash <(curl -s https://codecov.io/bash)
+        - bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
     - name: "Test code coverage (C)"
       os: linux
       language: c
@@ -123,7 +121,7 @@
         - xvfb-run make -j4 coverage-report
       after_script:  # Probably should be after_success once test suite updated to run under coverage.py.
         - make pythoninfo
-        - bash <(curl -s https://codecov.io/bash)
+        - bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
 
 
 before_install:
@@ -169,7 +167,9 @@
 before_script:
   # -Og is much faster than -O0
   - CFLAGS="${CFLAGS} -Og" ./configure --with-pydebug
-  - make -j4 regen-all
+  - eval "$(pyenv init -)"
+  - pyenv global 3.8
+  - PYTHON_FOR_REGEN=python3.8 make -j4 regen-all
   - changes=`git status --porcelain`
   - |
       # Check for changes in regenerated files
diff --git a/Android-bionic.bp b/Android-bionic.bp
index 0c2b579..3068173 100644
--- a/Android-bionic.bp
+++ b/Android-bionic.bp
@@ -34,7 +34,6 @@
         "Modules/fcntlmodule.c",
         "Modules/_functoolsmodule.c",
         "Modules/grpmodule.c",
-        "Modules/hashtable.c",
         "Modules/_heapqmodule.c",
         "Modules/_io/bufferedio.c",
         "Modules/_io/bytesio.c",
@@ -56,6 +55,7 @@
         "Modules/_opcode.c",
         "Modules/_operator.c",
         "Modules/parsermodule.c",
+        "Modules/_peg_parser.c",
         "Modules/_pickle.c",
         "Modules/posixmodule.c",
         "Modules/_posixsubprocess.c",
@@ -87,5 +87,6 @@
         "Modules/_xxsubinterpretersmodule.c",
         "Modules/xxsubtype.c",
         "Modules/zlibmodule.c",
+        "Modules/_zoneinfo.c",
     ],
 }
diff --git a/Android-darwin_x86_64.bp b/Android-darwin_x86_64.bp
index 25ff8cb..ec05518 100644
--- a/Android-darwin_x86_64.bp
+++ b/Android-darwin_x86_64.bp
@@ -19,6 +19,7 @@
         "Modules/_ctypes/stgdict.c",
         "Modules/_datetimemodule.c",
         "Modules/_functoolsmodule.c",
+        "Modules/_hashopenssl.c",
         "Modules/_heapqmodule.c",
         "Modules/_io/_iomodule.c",
         "Modules/_io/bufferedio.c",
@@ -36,6 +37,7 @@
         "Modules/_multiprocessing/semaphore.c",
         "Modules/_opcode.c",
         "Modules/_operator.c",
+        "Modules/_peg_parser.c",
         "Modules/_pickle.c",
         "Modules/_posixsubprocess.c",
         "Modules/_queuemodule.c",
@@ -43,6 +45,7 @@
         "Modules/_scproxy.c",
         "Modules/_sha3/sha3module.c",
         "Modules/_sre.c",
+        "Modules/_ssl.c",
         "Modules/_stat.c",
         "Modules/_statisticsmodule.c",
         "Modules/_struct.c",
@@ -50,6 +53,7 @@
         "Modules/_tracemalloc.c",
         "Modules/_weakref.c",
         "Modules/_xxsubinterpretersmodule.c",
+        "Modules/_zoneinfo.c",
         "Modules/arraymodule.c",
         "Modules/atexitmodule.c",
         "Modules/binascii.c",
@@ -65,7 +69,6 @@
         "Modules/faulthandler.c",
         "Modules/fcntlmodule.c",
         "Modules/grpmodule.c",
-        "Modules/hashtable.c",
         "Modules/itertoolsmodule.c",
         "Modules/mathmodule.c",
         "Modules/md5module.c",
diff --git a/Android-linux_x86_64.bp b/Android-linux_x86_64.bp
index a91941c..55ed076 100644
--- a/Android-linux_x86_64.bp
+++ b/Android-linux_x86_64.bp
@@ -34,7 +34,7 @@
         "Modules/fcntlmodule.c",
         "Modules/_functoolsmodule.c",
         "Modules/grpmodule.c",
-        "Modules/hashtable.c",
+        "Modules/_hashopenssl.c",
         "Modules/_heapqmodule.c",
         "Modules/_io/bufferedio.c",
         "Modules/_io/bytesio.c",
@@ -57,6 +57,7 @@
         "Modules/_opcode.c",
         "Modules/_operator.c",
         "Modules/parsermodule.c",
+        "Modules/_peg_parser.c",
         "Modules/_pickle.c",
         "Modules/posixmodule.c",
         "Modules/_posixsubprocess.c",
@@ -74,6 +75,7 @@
         "Modules/signalmodule.c",
         "Modules/socketmodule.c",
         "Modules/_sre.c",
+        "Modules/_ssl.c",
         "Modules/_stat.c",
         "Modules/_statisticsmodule.c",
         "Modules/_struct.c",
@@ -88,5 +90,6 @@
         "Modules/_xxsubinterpretersmodule.c",
         "Modules/xxsubtype.c",
         "Modules/zlibmodule.c",
+        "Modules/_zoneinfo.c",
     ],
 }
diff --git a/Android.bp b/Android.bp
index 13ff9c8..a2bb2b3 100644
--- a/Android.bp
+++ b/Android.bp
@@ -18,8 +18,46 @@
     "Android-darwin_x86_64.bp",
 ]
 
+soong_config_module_type {
+    name: "cpython3_cc_defaults",
+    module_type: "cc_defaults",
+    config_namespace: "cpython3",
+    bool_variables: ["force_build_host"],
+    properties: ["defaults"],
+}
+
+// By default, disable the source and use the prebuilts for host linux_glibc
+// and darwin. Overridden by cpython3-interp-force_build_host when
+// force_build_host is true (set on aosp-build-tools).
 cc_defaults {
+    name: "cpython3-interp-host-prebuilts",
+    defaults_visibility: ["//visibility:private"],
+    target: {
+        linux_glibc: {
+            enabled: false,
+        },
+        darwin: {
+            enabled: false,
+        },
+    },
+}
+
+cc_defaults {
+    name: "cpython3-interp-force_build_host",
+    defaults_visibility: ["//visibility:private"],
+    target: {
+        linux_glibc: {
+            enabled: true,
+        },
+        darwin: {
+            enabled: true,
+        },
+    },
+}
+
+cpython3_cc_defaults {
     name: "py3-interp-defaults",
+    defaults_visibility: ["//visibility:private"],
     cflags: [
         "-fwrapv",
         "-O3",
@@ -50,16 +88,16 @@
             local_include_dirs: ["android/bionic/pyconfig"],
         },
         android_arm: {
-            cflags: ["-DSOABI=\"cpython-38android-arm-android-bionic\""],
+            cflags: ["-DSOABI=\"cpython-39android-arm-android-bionic\""],
         },
         android_arm64: {
-            cflags: ["-DSOABI=\"cpython-38android-arm64-android-bionic\""],
+            cflags: ["-DSOABI=\"cpython-39android-arm64-android-bionic\""],
         },
         android_x86: {
-            cflags: ["-DSOABI=\"cpython-38android-x86-android-bionic\""],
+            cflags: ["-DSOABI=\"cpython-39android-x86-android-bionic\""],
         },
         android_x86_64: {
-            cflags: ["-DSOABI=\"cpython-38android-x86_64-android-bionic\""],
+            cflags: ["-DSOABI=\"cpython-39android-x86_64-android-bionic\""],
         },
         host: {
             // Host builds are moving to prebuilts, which has a higher risk of
@@ -72,21 +110,21 @@
             cflags: [
                 "-Wno-deprecated-declarations",
                 "-Wno-pointer-arith",
-                "-DSOABI=\"cpython-38android-x86_64-darwin\"",
+                "-DSOABI=\"cpython-39android-x86_64-darwin\"",
             ],
         },
         linux_bionic: {
             // NB linux_bionic is a 'host' architecture but it uses the bionic libc like 'android'
             // targets so use the android pyconfig.
             local_include_dirs: ["android/bionic/pyconfig"],
-            cflags: ["-DSOABI=\"cpython-38android-x86_64-linux-bionic\""],
+            cflags: ["-DSOABI=\"cpython-39android-x86_64-linux-bionic\""],
         },
         linux_glibc_x86: {
             enabled: false,
         },
         linux_glibc_x86_64: {
             local_include_dirs: ["android/linux_x86_64/pyconfig"],
-            cflags: ["-DSOABI=\"cpython-38android-x86_64-linux-gnu\""],
+            cflags: ["-DSOABI=\"cpython-39android-x86_64-linux-gnu\""],
         },
         windows: {
             enabled: false,
@@ -102,13 +140,24 @@
             suffix: "64",
         },
     },
+    soong_config_variables: {
+        force_build_host: {
+            defaults: ["cpython3-interp-force_build_host"],
+        },
+    },
 }
 
 cc_library_static {
     name: "py3-interp",
-    defaults: ["py3-interp-defaults"],
-    cflags: ["-DPy_BUILD_CORE"],
+    defaults: ["py3-interp-defaults", "cpython3-interp-host-prebuilts"],
+    cflags: ["-DPy_BUILD_CORE", "-DPLATLIBDIR=\"lib\""],
     srcs: [
+        // Makefile.pre.in PEGEN_OBJS
+        "Parser/pegen/pegen.c",
+        "Parser/pegen/parse.c",
+        "Parser/pegen/parse_string.c",
+        "Parser/pegen/peg_api.c",
+
         // Makefile.pre.in PARSER_OBJS
         "Parser/acceler.c",
         "Parser/grammar1.c",
@@ -136,6 +185,7 @@
         "Objects/descrobject.c",
         "Objects/enumobject.c",
         "Objects/exceptions.c",
+        "Objects/genericaliasobject.c",
         "Objects/genobject.c",
         "Objects/fileobject.c",
         "Objects/floatobject.c",
@@ -188,6 +238,7 @@
         "Python/getversion.c",
         "Python/graminit.c",
         "Python/hamt.c",
+        "Python/hashtable.c",
         "Python/import.c",
         "Python/importdl.c",
         "Python/initconfig.c",
@@ -241,7 +292,7 @@
 
 cc_defaults {
     name: "py3-launcher-defaults",
-    defaults: ["py3-interp-defaults"],
+    defaults: ["py3-interp-defaults", "cpython3-interp-host-prebuilts"],
     cflags: [
         "-DVERSION=\"3.8\"",
         "-DVPATH=\"\"",
@@ -262,6 +313,10 @@
     target: {
         linux_glibc_x86_64: {
             host_ldlibs: ["-lutil"],
+            static_libs: [
+                "libopenssl_ssl",
+                "libopenssl_crypto",
+            ],
         },
         linux: {
             // Due to test infra limitations, Python native symbols are linked
@@ -275,6 +330,10 @@
                 "-framework SystemConfiguration",
                 "-framework CoreFoundation",
             ],
+            static_libs: [
+                "libopenssl_ssl",
+                "libopenssl_crypto",
+            ],
         },
         host: {
             static_libs: [
@@ -356,7 +415,7 @@
 
 cc_library_static {
     name: "py3-c-modules",
-    defaults: ["py3-interp-defaults"],
+    defaults: ["py3-interp-defaults", "cpython3-interp-host-prebuilts"],
     cflags: [
         "-DPy_BUILD_CORE_BUILTIN",
         "-DUSE_PYEXPAT_CAPI",
@@ -374,9 +433,17 @@
         },
         linux_glibc_x86_64: {
             srcs: [":py3-c-modules-linux_x86_64"],
+            static_libs: [
+                "libopenssl_ssl",
+                "libopenssl_crypto",
+            ],
         },
         darwin: {
             srcs: [":py3-c-modules-darwin_x86_64"],
+            static_libs: [
+                "libopenssl_ssl",
+                "libopenssl_crypto",
+            ],
         },
     },
 }
diff --git a/Doc/Makefile b/Doc/Makefile
index b8ca1ed..f653d70 100644
--- a/Doc/Makefile
+++ b/Doc/Makefile
@@ -143,7 +143,7 @@
 venv:
 	$(PYTHON) -m venv $(VENVDIR)
 	$(VENVDIR)/bin/python3 -m pip install -U pip setuptools
-	$(VENVDIR)/bin/python3 -m pip install -U Sphinx==2.3.1 blurb python-docs-theme
+	$(VENVDIR)/bin/python3 -m pip install -r requirements.txt
 	@echo "The venv has been created in the $(VENVDIR) directory"
 
 dist:
diff --git a/Doc/c-api/abstract.rst b/Doc/c-api/abstract.rst
index 0edd1d5..1823f9d 100644
--- a/Doc/c-api/abstract.rst
+++ b/Doc/c-api/abstract.rst
@@ -18,6 +18,7 @@
 .. toctree::
 
    object.rst
+   call.rst
    number.rst
    sequence.rst
    mapping.rst
diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst
index b7baad5..a187a8f 100644
--- a/Doc/c-api/arg.rst
+++ b/Doc/c-api/arg.rst
@@ -131,12 +131,12 @@
 ``S`` (:class:`bytes`) [PyBytesObject \*]
    Requires that the Python object is a :class:`bytes` object, without
    attempting any conversion.  Raises :exc:`TypeError` if the object is not
-   a bytes object.  The C variable may also be declared as :c:type:`PyObject\*`.
+   a bytes object.  The C variable may also be declared as :c:type:`PyObject*`.
 
 ``Y`` (:class:`bytearray`) [PyByteArrayObject \*]
    Requires that the Python object is a :class:`bytearray` object, without
    attempting any conversion.  Raises :exc:`TypeError` if the object is not
-   a :class:`bytearray` object. The C variable may also be declared as :c:type:`PyObject\*`.
+   a :class:`bytearray` object. The C variable may also be declared as :c:type:`PyObject*`.
 
 ``u`` (:class:`str`) [const Py_UNICODE \*]
    Convert a Python Unicode object to a C pointer to a NUL-terminated buffer of
@@ -183,7 +183,7 @@
 ``U`` (:class:`str`) [PyObject \*]
    Requires that the Python object is a Unicode object, without attempting
    any conversion.  Raises :exc:`TypeError` if the object is not a Unicode
-   object.  The C variable may also be declared as :c:type:`PyObject\*`.
+   object.  The C variable may also be declared as :c:type:`PyObject*`.
 
 ``w*`` (read-write :term:`bytes-like object`) [Py_buffer]
    This format accepts any object which implements the read-write buffer
@@ -196,10 +196,10 @@
    It only works for encoded data without embedded NUL bytes.
 
    This format requires two arguments.  The first is only used as input, and
-   must be a :c:type:`const char\*` which points to the name of an encoding as a
+   must be a :c:type:`const char*` which points to the name of an encoding as a
    NUL-terminated string, or ``NULL``, in which case ``'utf-8'`` encoding is used.
    An exception is raised if the named encoding is not known to Python.  The
-   second argument must be a :c:type:`char\*\*`; the value of the pointer it
+   second argument must be a :c:type:`char**`; the value of the pointer it
    references will be set to a buffer with the contents of the argument text.
    The text will be encoded in the encoding specified by the first argument.
 
@@ -219,10 +219,10 @@
    characters.
 
    It requires three arguments.  The first is only used as input, and must be a
-   :c:type:`const char\*` which points to the name of an encoding as a
+   :c:type:`const char*` which points to the name of an encoding as a
    NUL-terminated string, or ``NULL``, in which case ``'utf-8'`` encoding is used.
    An exception is raised if the named encoding is not known to Python.  The
-   second argument must be a :c:type:`char\*\*`; the value of the pointer it
+   second argument must be a :c:type:`char**`; the value of the pointer it
    references will be set to a buffer with the contents of the argument text.
    The text will be encoded in the encoding specified by the first argument.
    The third argument must be a pointer to an integer; the referenced integer
@@ -322,7 +322,7 @@
 ``O!`` (object) [*typeobject*, PyObject \*]
    Store a Python object in a C object pointer.  This is similar to ``O``, but
    takes two C arguments: the first is the address of a Python type object, the
-   second is the address of the C variable (of type :c:type:`PyObject\*`) into which
+   second is the address of the C variable (of type :c:type:`PyObject*`) into which
    the object pointer is stored.  If the Python object does not have the required
    type, :exc:`TypeError` is raised.
 
@@ -331,13 +331,13 @@
 ``O&`` (object) [*converter*, *anything*]
    Convert a Python object to a C variable through a *converter* function.  This
    takes two arguments: the first is a function, the second is the address of a C
-   variable (of arbitrary type), converted to :c:type:`void \*`.  The *converter*
+   variable (of arbitrary type), converted to :c:type:`void *`.  The *converter*
    function in turn is called as follows::
 
       status = converter(object, address);
 
    where *object* is the Python object to be converted and *address* is the
-   :c:type:`void\*` argument that was passed to the :c:func:`PyArg_Parse\*` function.
+   :c:type:`void*` argument that was passed to the :c:func:`PyArg_Parse\*` function.
    The returned *status* should be ``1`` for a successful conversion and ``0`` if
    the conversion has failed.  When the conversion fails, the *converter* function
    should raise an exception and leave the content of *address* unmodified.
@@ -483,7 +483,7 @@
    *args*; it must actually be a tuple.  The length of the tuple must be at least
    *min* and no more than *max*; *min* and *max* may be equal.  Additional
    arguments must be passed to the function, each of which should be a pointer to a
-   :c:type:`PyObject\*` variable; these will be filled in with the values from
+   :c:type:`PyObject*` variable; these will be filled in with the values from
    *args*; they will contain borrowed references.  The variables which correspond
    to optional parameters not given by *args* will not be filled in; these should
    be initialized by the caller. This function returns true on success and false if
@@ -652,8 +652,8 @@
 
    ``O&`` (object) [*converter*, *anything*]
       Convert *anything* to a Python object through a *converter* function.  The
-      function is called with *anything* (which should be compatible with :c:type:`void
-      \*`) as its argument and should return a "new" Python object, or ``NULL`` if an
+      function is called with *anything* (which should be compatible with :c:type:`void*`)
+      as its argument and should return a "new" Python object, or ``NULL`` if an
       error occurred.
 
    ``(items)`` (:class:`tuple`) [*matching-items*]
diff --git a/Doc/c-api/buffer.rst b/Doc/c-api/buffer.rst
index 4e6fa0b..e327193 100644
--- a/Doc/c-api/buffer.rst
+++ b/Doc/c-api/buffer.rst
@@ -89,7 +89,7 @@
 
 .. c:type:: Py_buffer
 
-   .. c:member:: void \*buf
+   .. c:member:: void *buf
 
       A pointer to the start of the logical structure described by the buffer
       fields. This can be any location within the underlying physical memory
@@ -99,7 +99,7 @@
       For :term:`contiguous` arrays, the value points to the beginning of
       the memory block.
 
-   .. c:member:: void \*obj
+   .. c:member:: void *obj
 
       A new reference to the exporting object. The reference is owned by
       the consumer and automatically decremented and set to ``NULL`` by
@@ -145,7 +145,7 @@
       or a :c:macro:`PyBUF_WRITABLE` request, the consumer must disregard
       :c:member:`~Py_buffer.itemsize` and assume ``itemsize == 1``.
 
-   .. c:member:: const char \*format
+   .. c:member:: const char *format
 
       A *NUL* terminated string in :mod:`struct` module style syntax describing
       the contents of a single item. If this is ``NULL``, ``"B"`` (unsigned bytes)
@@ -164,7 +164,7 @@
       to 64. Exporters MUST respect this limit, consumers of multi-dimensional
       buffers SHOULD be able to handle up to :c:macro:`PyBUF_MAX_NDIM` dimensions.
 
-   .. c:member:: Py_ssize_t \*shape
+   .. c:member:: Py_ssize_t *shape
 
       An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
       indicating the shape of the memory as an n-dimensional array. Note that
@@ -177,7 +177,7 @@
 
       The shape array is read-only for the consumer.
 
-   .. c:member:: Py_ssize_t \*strides
+   .. c:member:: Py_ssize_t *strides
 
       An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
       giving the number of bytes to skip to get to a new element in each
@@ -189,7 +189,7 @@
 
       The strides array is read-only for the consumer.
 
-   .. c:member:: Py_ssize_t \*suboffsets
+   .. c:member:: Py_ssize_t *suboffsets
 
       An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`.
       If ``suboffsets[n] >= 0``, the values stored along the nth dimension are
@@ -207,7 +207,7 @@
 
       The suboffsets array is read-only for the consumer.
 
-   .. c:member:: void \*internal
+   .. c:member:: void *internal
 
       This is for use internally by the exporting object. For example, this
       might be re-cast as an integer by the exporter and used to store flags
@@ -301,7 +301,7 @@
 +-----------------------------------+-------+---------+------------+--------+
 | .. c:macro:: PyBUF_ANY_CONTIGUOUS |  yes  |   yes   |    NULL    | C or F |
 +-----------------------------------+-------+---------+------------+--------+
-| .. c:macro:: PyBUF_ND             |  yes  |   NULL  |    NULL    |   C    |
+| :c:macro:`PyBUF_ND`               |  yes  |   NULL  |    NULL    |   C    |
 +-----------------------------------+-------+---------+------------+--------+
 
 
@@ -438,12 +438,12 @@
 
    Send a request to *exporter* to fill in *view* as specified by  *flags*.
    If the exporter cannot provide a buffer of the exact type, it MUST raise
-   :c:data:`PyExc_BufferError`, set :c:member:`view->obj` to ``NULL`` and
+   :c:data:`PyExc_BufferError`, set ``view->obj`` to ``NULL`` and
    return ``-1``.
 
-   On success, fill in *view*, set :c:member:`view->obj` to a new reference
+   On success, fill in *view*, set ``view->obj`` to a new reference
    to *exporter* and return 0. In the case of chained buffer providers
-   that redirect requests to a single object, :c:member:`view->obj` MAY
+   that redirect requests to a single object, ``view->obj`` MAY
    refer to this object instead of *exporter* (See :ref:`Buffer Object Structures <buffer-structs>`).
 
    Successful calls to :c:func:`PyObject_GetBuffer` must be paired with calls
@@ -455,17 +455,19 @@
 .. c:function:: void PyBuffer_Release(Py_buffer *view)
 
    Release the buffer *view* and decrement the reference count for
-   :c:member:`view->obj`. This function MUST be called when the buffer
+   ``view->obj``. This function MUST be called when the buffer
    is no longer being used, otherwise reference leaks may occur.
 
    It is an error to call this function on a buffer that was not obtained via
    :c:func:`PyObject_GetBuffer`.
 
 
-.. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *)
+.. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *format)
 
    Return the implied :c:data:`~Py_buffer.itemsize` from :c:data:`~Py_buffer.format`.
-   This function is not yet implemented.
+   On error, raise an exception and return -1.
+
+   .. versionadded:: 3.9
 
 
 .. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order)
@@ -514,9 +516,9 @@
    *view* as specified by flags, unless *buf* has been designated as read-only
    and :c:macro:`PyBUF_WRITABLE` is set in *flags*.
 
-   On success, set :c:member:`view->obj` to a new reference to *exporter* and
+   On success, set ``view->obj`` to a new reference to *exporter* and
    return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set
-   :c:member:`view->obj` to ``NULL`` and return ``-1``;
+   ``view->obj`` to ``NULL`` and return ``-1``;
 
    If this function is used as part of a :ref:`getbufferproc <buffer-structs>`,
    *exporter* MUST be set to the exporting object and *flags* must be passed
diff --git a/Doc/c-api/call.rst b/Doc/c-api/call.rst
new file mode 100644
index 0000000..31dc9c8
--- /dev/null
+++ b/Doc/c-api/call.rst
@@ -0,0 +1,424 @@
+.. highlight:: c
+
+.. _call:
+
+Call Protocol
+=============
+
+CPython supports two different calling protocols:
+*tp_call* and vectorcall.
+
+The *tp_call* Protocol
+----------------------
+
+Instances of classes that set :c:member:`~PyTypeObject.tp_call` are callable.
+The signature of the slot is::
+
+    PyObject *tp_call(PyObject *callable, PyObject *args, PyObject *kwargs);
+
+A call is made using a tuple for the positional arguments
+and a dict for the keyword arguments, similarly to
+``callable(*args, **kwargs)`` in Python code.
+*args* must be non-NULL (use an empty tuple if there are no arguments)
+but *kwargs* may be *NULL* if there are no keyword arguments.
+
+This convention is not only used by *tp_call*:
+:c:member:`~PyTypeObject.tp_new` and :c:member:`~PyTypeObject.tp_init`
+also pass arguments this way.
+
+To call an object, use :c:func:`PyObject_Call` or other
+:ref:`call API <capi-call>`.
+
+
+.. _vectorcall:
+
+The Vectorcall Protocol
+-----------------------
+
+.. versionadded:: 3.9
+
+The vectorcall protocol was introduced in :pep:`590` as an additional protocol
+for making calls more efficient.
+
+As rule of thumb, CPython will prefer the vectorcall for internal calls
+if the callable supports it. However, this is not a hard rule.
+Additionally, some third-party extensions use *tp_call* directly
+(rather than using :c:func:`PyObject_Call`).
+Therefore, a class supporting vectorcall must also implement
+:c:member:`~PyTypeObject.tp_call`.
+Moreover, the callable must behave the same
+regardless of which protocol is used.
+The recommended way to achieve this is by setting
+:c:member:`~PyTypeObject.tp_call` to :c:func:`PyVectorcall_Call`.
+This bears repeating:
+
+.. warning::
+
+   A class supporting vectorcall **must** also implement
+   :c:member:`~PyTypeObject.tp_call` with the same semantics.
+
+A class should not implement vectorcall if that would be slower
+than *tp_call*. For example, if the callee needs to convert
+the arguments to an args tuple and kwargs dict anyway, then there is no point
+in implementing vectorcall.
+
+Classes can implement the vectorcall protocol by enabling the
+:const:`Py_TPFLAGS_HAVE_VECTORCALL` flag and setting
+:c:member:`~PyTypeObject.tp_vectorcall_offset` to the offset inside the
+object structure where a *vectorcallfunc* appears.
+This is a pointer to a function with the following signature:
+
+.. c:type:: PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)
+
+- *callable* is the object being called.
+- *args* is a C array consisting of the positional arguments followed by the
+   values of the keyword arguments.
+   This can be *NULL* if there are no arguments.
+- *nargsf* is the number of positional arguments plus possibly the
+   :const:`PY_VECTORCALL_ARGUMENTS_OFFSET` flag.
+   To get the actual number of positional arguments from *nargsf*,
+   use :c:func:`PyVectorcall_NARGS`.
+- *kwnames* is a tuple containing the names of the keyword arguments;
+   in other words, the keys of the kwargs dict.
+   These names must be strings (instances of ``str`` or a subclass)
+   and they must be unique.
+   If there are no keyword arguments, then *kwnames* can instead be *NULL*.
+
+.. c:macro:: PY_VECTORCALL_ARGUMENTS_OFFSET
+
+   If this flag is set in a vectorcall *nargsf* argument, the callee is allowed
+   to temporarily change ``args[-1]``. In other words, *args* points to
+   argument 1 (not 0) in the allocated vector.
+   The callee must restore the value of ``args[-1]`` before returning.
+
+   For :c:func:`PyObject_VectorcallMethod`, this flag means instead that
+   ``args[0]`` may be changed.
+
+   Whenever they can do so cheaply (without additional allocation), callers
+   are encouraged to use :const:`PY_VECTORCALL_ARGUMENTS_OFFSET`.
+   Doing so will allow callables such as bound methods to make their onward
+   calls (which include a prepended *self* argument) very efficiently.
+
+To call an object that implements vectorcall, use a :ref:`call API <capi-call>`
+function as with any other callable.
+:c:func:`PyObject_Vectorcall` will usually be most efficient.
+
+
+.. note::
+
+   In CPython 3.8, the vectorcall API and related functions were available
+   provisionally under names with a leading underscore:
+   ``_PyObject_Vectorcall``, ``_Py_TPFLAGS_HAVE_VECTORCALL``,
+   ``_PyObject_VectorcallMethod``, ``_PyVectorcall_Function``,
+   ``_PyObject_CallOneArg``, ``_PyObject_CallMethodNoArgs``,
+   ``_PyObject_CallMethodOneArg``.
+   Additionally, ``PyObject_VectorcallDict`` was available as
+   ``_PyObject_FastCallDict``.
+   The old names are still defined as aliases of the new, non-underscored names.
+
+
+Recursion Control
+.................
+
+When using *tp_call*, callees do not need to worry about
+:ref:`recursion <recursion>`: CPython uses
+:c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall`
+for calls made using *tp_call*.
+
+For efficiency, this is not the case for calls done using vectorcall:
+the callee should use *Py_EnterRecursiveCall* and *Py_LeaveRecursiveCall*
+if needed.
+
+
+Vectorcall Support API
+......................
+
+.. c:function:: Py_ssize_t PyVectorcall_NARGS(size_t nargsf)
+
+   Given a vectorcall *nargsf* argument, return the actual number of
+   arguments.
+   Currently equivalent to::
+
+      (Py_ssize_t)(nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET)
+
+   However, the function ``PyVectorcall_NARGS`` should be used to allow
+   for future extensions.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.8
+
+.. c:function:: vectorcallfunc PyVectorcall_Function(PyObject *op)
+
+   If *op* does not support the vectorcall protocol (either because the type
+   does not or because the specific instance does not), return *NULL*.
+   Otherwise, return the vectorcall function pointer stored in *op*.
+   This function never raises an exception.
+
+   This is mostly useful to check whether or not *op* supports vectorcall,
+   which can be done by checking ``PyVectorcall_Function(op) != NULL``.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.8
+
+.. c:function:: PyObject* PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict)
+
+   Call *callable*'s :c:type:`vectorcallfunc` with positional and keyword
+   arguments given in a tuple and dict, respectively.
+
+   This is a specialized function, intended to be put in the
+   :c:member:`~PyTypeObject.tp_call` slot or be used in an implementation of ``tp_call``.
+   It does not check the :const:`Py_TPFLAGS_HAVE_VECTORCALL` flag
+   and it does not fall back to ``tp_call``.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.8
+
+
+.. _capi-call:
+
+Object Calling API
+------------------
+
+Various functions are available for calling a Python object.
+Each converts its arguments to a convention supported by the called object –
+either *tp_call* or vectorcall.
+In order to do as litle conversion as possible, pick one that best fits
+the format of data you have available.
+
+The following table summarizes the available functions;
+please see individual documentation for details.
+
++------------------------------------------+------------------+--------------------+---------------+
+| Function                                 | callable         | args               | kwargs        |
++==========================================+==================+====================+===============+
+| :c:func:`PyObject_Call`                  | ``PyObject *``   | tuple              | dict/``NULL`` |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallNoArgs`            | ``PyObject *``   | ---                | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallOneArg`            | ``PyObject *``   | 1 object           | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallObject`            | ``PyObject *``   | tuple/``NULL``     | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallFunction`          | ``PyObject *``   | format             | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallMethod`            | obj + ``char*``  | format             | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallFunctionObjArgs`   | ``PyObject *``   | variadic           | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallMethodObjArgs`     | obj + name       | variadic           | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallMethodNoArgs`      | obj + name       | ---                | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_CallMethodOneArg`      | obj + name       | 1 object           | ---           |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_Vectorcall`            | ``PyObject *``   | vectorcall         | vectorcall    |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_VectorcallDict`        | ``PyObject *``   | vectorcall         | dict/``NULL`` |
++------------------------------------------+------------------+--------------------+---------------+
+| :c:func:`PyObject_VectorcallMethod`      | arg + name       | vectorcall         | vectorcall    |
++------------------------------------------+------------------+--------------------+---------------+
+
+
+.. c:function:: PyObject* PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
+
+   Call a callable Python object *callable*, with arguments given by the
+   tuple *args*, and named arguments given by the dictionary *kwargs*.
+
+   *args* must not be *NULL*; use an empty tuple if no arguments are needed.
+   If no named arguments are needed, *kwargs* can be *NULL*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This is the equivalent of the Python expression:
+   ``callable(*args, **kwargs)``.
+
+
+.. c:function:: PyObject* PyObject_CallNoArgs(PyObject *callable)
+
+   Call a callable Python object *callable* without any arguments. It is the
+   most efficient way to call a callable Python object without any argument.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: PyObject* PyObject_CallOneArg(PyObject *callable, PyObject *arg)
+
+   Call a callable Python object *callable* with exactly 1 positional argument
+   *arg* and no keyword arguments.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: PyObject* PyObject_CallObject(PyObject *callable, PyObject *args)
+
+   Call a callable Python object *callable*, with arguments given by the
+   tuple *args*.  If no arguments are needed, then *args* can be *NULL*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This is the equivalent of the Python expression: ``callable(*args)``.
+
+
+.. c:function:: PyObject* PyObject_CallFunction(PyObject *callable, const char *format, ...)
+
+   Call a callable Python object *callable*, with a variable number of C arguments.
+   The C arguments are described using a :c:func:`Py_BuildValue` style format
+   string.  The format can be *NULL*, indicating that no arguments are provided.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This is the equivalent of the Python expression: ``callable(*args)``.
+
+   Note that if you only pass :c:type:`PyObject *` args,
+   :c:func:`PyObject_CallFunctionObjArgs` is a faster alternative.
+
+   .. versionchanged:: 3.4
+      The type of *format* was changed from ``char *``.
+
+
+.. c:function:: PyObject* PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)
+
+   Call the method named *name* of object *obj* with a variable number of C
+   arguments.  The C arguments are described by a :c:func:`Py_BuildValue` format
+   string that should produce a tuple.
+
+   The format can be *NULL*, indicating that no arguments are provided.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This is the equivalent of the Python expression:
+   ``obj.name(arg1, arg2, ...)``.
+
+   Note that if you only pass :c:type:`PyObject *` args,
+   :c:func:`PyObject_CallMethodObjArgs` is a faster alternative.
+
+   .. versionchanged:: 3.4
+      The types of *name* and *format* were changed from ``char *``.
+
+
+.. c:function:: PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ...)
+
+   Call a callable Python object *callable*, with a variable number of
+   :c:type:`PyObject *` arguments.  The arguments are provided as a variable number
+   of parameters followed by *NULL*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This is the equivalent of the Python expression:
+   ``callable(arg1, arg2, ...)``.
+
+
+.. c:function:: PyObject* PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)
+
+   Call a method of the Python object *obj*, where the name of the method is given as a
+   Python string object in *name*.  It is called with a variable number of
+   :c:type:`PyObject *` arguments.  The arguments are provided as a variable number
+   of parameters followed by *NULL*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+
+.. c:function:: PyObject* PyObject_CallMethodNoArgs(PyObject *obj, PyObject *name)
+
+   Call a method of the Python object *obj* without arguments,
+   where the name of the method is given as a Python string object in *name*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: PyObject* PyObject_CallMethodOneArg(PyObject *obj, PyObject *name, PyObject *arg)
+
+   Call a method of the Python object *obj* with a single positional argument
+   *arg*, where the name of the method is given as a Python string object in
+   *name*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: PyObject* PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)
+
+   Call a callable Python object *callable*.
+   The arguments are the same as for :c:type:`vectorcallfunc`.
+   If *callable* supports vectorcall_, this directly calls
+   the vectorcall function stored in *callable*.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.9
+
+.. c:function:: PyObject* PyObject_VectorcallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)
+
+   Call *callable* with positional arguments passed exactly as in the vectorcall_ protocol,
+   but with keyword arguments passed as a dictionary *kwdict*.
+   The *args* array contains only the positional arguments.
+
+   Regardless of which protocol is used internally,
+   a conversion of arguments needs to be done.
+   Therefore, this function should only be used if the caller
+   already has a dictionary ready to use for the keyword arguments,
+   but not a tuple for the positional arguments.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.9
+
+.. c:function:: PyObject* PyObject_VectorcallMethod(PyObject *name, PyObject *const *args, size_t nargsf, PyObject *kwnames)
+
+   Call a method using the vectorcall calling convention. The name of the method
+   is given as a Python string *name*. The object whose method is called is
+   *args[0]*, and the *args* array starting at *args[1]* represents the arguments
+   of the call. There must be at least one positional argument.
+   *nargsf* is the number of positional arguments including *args[0]*,
+   plus :const:`PY_VECTORCALL_ARGUMENTS_OFFSET` if the value of ``args[0]`` may
+   temporarily be changed. Keyword arguments can be passed just like in
+   :c:func:`PyObject_Vectorcall`.
+
+   If the object has the :const:`Py_TPFLAGS_METHOD_DESCRIPTOR` feature,
+   this will call the unbound method object with the full
+   *args* vector as arguments.
+
+   Return the result of the call on success, or raise an exception and return
+   *NULL* on failure.
+
+   This function is not part of the :ref:`limited API <stable>`.
+
+   .. versionadded:: 3.9
+
+
+Call Support API
+----------------
+
+.. c:function:: int PyCallable_Check(PyObject *o)
+
+   Determine if the object *o* is callable.  Return ``1`` if the object is callable
+   and ``0`` otherwise.  This function always succeeds.
diff --git a/Doc/c-api/capsule.rst b/Doc/c-api/capsule.rst
index 78e2114..5eb313c 100644
--- a/Doc/c-api/capsule.rst
+++ b/Doc/c-api/capsule.rst
@@ -15,7 +15,7 @@
 .. c:type:: PyCapsule
 
    This subtype of :c:type:`PyObject` represents an opaque value, useful for C
-   extension modules who need to pass an opaque value (as a :c:type:`void\*`
+   extension modules who need to pass an opaque value (as a :c:type:`void*`
    pointer) through Python code to other C code.  It is often used to make a C
    function pointer defined in one module available to other modules, so the
    regular import mechanism can be used to access C APIs defined in dynamically
diff --git a/Doc/c-api/contextvars.rst b/Doc/c-api/contextvars.rst
index 38256a3..9c08881 100644
--- a/Doc/c-api/contextvars.rst
+++ b/Doc/c-api/contextvars.rst
@@ -101,11 +101,6 @@
    current context for the current thread.  Returns ``0`` on success,
    and ``-1`` on error.
 
-.. c:function:: int PyContext_ClearFreeList()
-
-   Clear the context variable free list. Return the total number of
-   freed items.  This function always succeeds.
-
 
 Context variable functions:
 
diff --git a/Doc/c-api/dict.rst b/Doc/c-api/dict.rst
index e48c11d..8c626c7 100644
--- a/Doc/c-api/dict.rst
+++ b/Doc/c-api/dict.rst
@@ -73,7 +73,7 @@
    .. index:: single: PyUnicode_FromString()
 
    Insert *val* into the dictionary *p* using *key* as a key. *key* should
-   be a :c:type:`const char\*`.  The key object is created using
+   be a :c:type:`const char*`.  The key object is created using
    ``PyUnicode_FromString(key)``.  Return ``0`` on success or ``-1`` on
    failure.  This function *does not* steal a reference to *val*.
 
@@ -81,14 +81,16 @@
 .. c:function:: int PyDict_DelItem(PyObject *p, PyObject *key)
 
    Remove the entry in dictionary *p* with key *key*. *key* must be hashable;
-   if it isn't, :exc:`TypeError` is raised.  Return ``0`` on success or ``-1``
-   on failure.
+   if it isn't, :exc:`TypeError` is raised.
+   If *key* is not in the dictionary, :exc:`KeyError` is raised.
+   Return ``0`` on success or ``-1`` on failure.
 
 
 .. c:function:: int PyDict_DelItemString(PyObject *p, const char *key)
 
-   Remove the entry in dictionary *p* which has a key specified by the string
-   *key*.  Return ``0`` on success or ``-1`` on failure.
+   Remove the entry in dictionary *p* which has a key specified by the string *key*.
+   If *key* is not in the dictionary, :exc:`KeyError` is raised.
+   Return ``0`` on success or ``-1`` on failure.
 
 
 .. c:function:: PyObject* PyDict_GetItem(PyObject *p, PyObject *key)
@@ -112,7 +114,7 @@
 .. c:function:: PyObject* PyDict_GetItemString(PyObject *p, const char *key)
 
    This is the same as :c:func:`PyDict_GetItem`, but *key* is specified as a
-   :c:type:`const char\*`, rather than a :c:type:`PyObject\*`.
+   :c:type:`const char*`, rather than a :c:type:`PyObject*`.
 
    Note that exceptions which occur while calling :meth:`__hash__` and
    :meth:`__eq__` methods and creating a temporary string object
@@ -161,7 +163,7 @@
    prior to the first call to this function to start the iteration; the
    function returns true for each pair in the dictionary, and false once all
    pairs have been reported.  The parameters *pkey* and *pvalue* should either
-   point to :c:type:`PyObject\*` variables that will be filled in with each key
+   point to :c:type:`PyObject*` variables that will be filled in with each key
    and value, respectively, or may be ``NULL``.  Any references returned through
    them are borrowed.  *ppos* should not be altered during iteration. Its
    value represents offsets within the internal dictionary structure, and
@@ -232,10 +234,3 @@
           for key, value in seq2:
               if override or key not in a:
                   a[key] = value
-
-
-.. c:function:: int PyDict_ClearFreeList()
-
-   Clear the free list. Return the total number of freed items.
-
-   .. versionadded:: 3.3
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
index 85a3d94..247b6d6 100644
--- a/Doc/c-api/exceptions.rst
+++ b/Doc/c-api/exceptions.rst
@@ -374,6 +374,8 @@
    own a reference to the return value, so you do not need to :c:func:`Py_DECREF`
    it.
 
+   The caller must hold the GIL.
+
    .. note::
 
       Do not compare the return value to a specific exception; use
@@ -635,11 +637,21 @@
    *object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are
    UTF-8 encoded strings.
 
+   .. deprecated:: 3.3 3.11
+
+      ``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to
+      ``PyObject_CallFunction(PyExc_UnicodeEncodeError, "sOnns", ...)``.
+
 .. c:function:: PyObject* PyUnicodeTranslateError_Create(const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason)
 
    Create a :class:`UnicodeTranslateError` object with the attributes *object*,
    *length*, *start*, *end* and *reason*. *reason* is a UTF-8 encoded string.
 
+   .. deprecated:: 3.3 3.11
+
+      ``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to
+      ``PyObject_CallFunction(PyExc_UnicodeTranslateError, "Onns", ...)``.
+
 .. c:function:: PyObject* PyUnicodeDecodeError_GetEncoding(PyObject *exc)
                 PyObject* PyUnicodeEncodeError_GetEncoding(PyObject *exc)
 
@@ -695,6 +707,8 @@
    ``0`` on success, ``-1`` on failure.
 
 
+.. _recursion:
+
 Recursion Control
 =================
 
@@ -702,6 +716,8 @@
 level, both in the core and in extension modules.  They are needed if the
 recursive code does not necessarily invoke Python code (which tracks its
 recursion depth automatically).
+They are also not needed for *tp_call* implementations
+because the :ref:`call protocol <call>` takes care of recursion handling.
 
 .. c:function:: int Py_EnterRecursiveCall(const char *where)
 
@@ -715,15 +731,21 @@
    case, a :exc:`RecursionError` is set and a nonzero value is returned.
    Otherwise, zero is returned.
 
-   *where* should be a string such as ``" in instance check"`` to be
-   concatenated to the :exc:`RecursionError` message caused by the recursion
+   *where* should be a UTF-8 encoded string such as ``" in instance check"`` to
+   be concatenated to the :exc:`RecursionError` message caused by the recursion
    depth limit.
 
-.. c:function:: void Py_LeaveRecursiveCall()
+   .. versionchanged:: 3.9
+      This function is now also available in the limited API.
+
+.. c:function:: void Py_LeaveRecursiveCall(void)
 
    Ends a :c:func:`Py_EnterRecursiveCall`.  Must be called once for each
    *successful* invocation of :c:func:`Py_EnterRecursiveCall`.
 
+   .. versionchanged:: 3.9
+      This function is now also available in the limited API.
+
 Properly implementing :c:member:`~PyTypeObject.tp_repr` for container types requires
 special recursion handling.  In addition to protecting the stack,
 :c:member:`~PyTypeObject.tp_repr` also needs to track objects to prevent cycles.  The
@@ -761,7 +783,7 @@
 
 All standard Python exceptions are available as global variables whose names are
 ``PyExc_`` followed by the Python exception name.  These have the type
-:c:type:`PyObject\*`; they are all class objects.  For completeness, here are all
+:c:type:`PyObject*`; they are all class objects.  For completeness, here are all
 the variables:
 
 .. index::
@@ -981,7 +1003,7 @@
 
 All standard Python warning categories are available as global variables whose
 names are ``PyExc_`` followed by the Python exception name. These have the type
-:c:type:`PyObject\*`; they are all class objects. For completeness, here are all
+:c:type:`PyObject*`; they are all class objects. For completeness, here are all
 the variables:
 
 .. index::
diff --git a/Doc/c-api/file.rst b/Doc/c-api/file.rst
index 5370c4e..ed3735a 100644
--- a/Doc/c-api/file.rst
+++ b/Doc/c-api/file.rst
@@ -8,7 +8,7 @@
 .. index:: object: file
 
 These APIs are a minimal emulation of the Python 2 C API for built-in file
-objects, which used to rely on the buffered I/O (:c:type:`FILE\*`) support
+objects, which used to rely on the buffered I/O (:c:type:`FILE*`) support
 from the C standard library.  In Python 3, files and streams use the new
 :mod:`io` module, which defines several layers over the low-level unbuffered
 I/O of the operating system.  The functions described below are
@@ -17,7 +17,7 @@
 the :mod:`io` APIs instead.
 
 
-.. c:function:: PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)
+.. c:function:: PyObject* PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)
 
    Create a Python file object from the file descriptor of an already
    opened file *fd*.  The arguments *name*, *encoding*, *errors* and *newline*
@@ -82,6 +82,8 @@
 
    This function is safe to call before :c:func:`Py_Initialize`.
 
+   .. audit-event:: setopencodehook "" c.PyFile_SetOpenCodeHook
+
    .. versionadded:: 3.8
 
 
diff --git a/Doc/c-api/float.rst b/Doc/c-api/float.rst
index bfc28a7..b29937d 100644
--- a/Doc/c-api/float.rst
+++ b/Doc/c-api/float.rst
@@ -76,8 +76,3 @@
 .. c:function:: double PyFloat_GetMin()
 
    Return the minimum normalized positive float *DBL_MIN* as C :c:type:`double`.
-
-.. c:function:: int PyFloat_ClearFreeList()
-
-   Clear the float free list. Return the number of items that could not
-   be freed.
diff --git a/Doc/c-api/gcsupport.rst b/Doc/c-api/gcsupport.rst
index 924a7fd..eee114c 100644
--- a/Doc/c-api/gcsupport.rst
+++ b/Doc/c-api/gcsupport.rst
@@ -61,6 +61,33 @@
    end of the constructor.
 
 
+.. c:function:: int PyObject_IS_GC(PyObject *obj)
+
+   Returns non-zero if the object implements the garbage collector protocol,
+   otherwise returns 0.
+
+   The object cannot be tracked by the garbage collector if this function returns 0.
+
+
+.. c:function:: int PyObject_GC_IsTracked(PyObject *op)
+
+   Returns 1 if the object type of *op* implements the GC protocol and *op* is being
+   currently tracked by the garbage collector and 0 otherwise.
+
+   This is analogous to the Python function :func:`gc.is_tracked`.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: int PyObject_GC_IsFinalized(PyObject *op)
+
+   Returns 1 if the object type of *op* implements the GC protocol and *op* has been
+   already finalized by the garbage collector and 0 otherwise.
+
+   This is analogous to the Python function :func:`gc.is_finalized`.
+
+   .. versionadded:: 3.9
+
 Similarly, the deallocator for the object must conform to a similar pair of
 rules:
 
diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst
index 78f935a..c6fc330 100644
--- a/Doc/c-api/import.rst
+++ b/Doc/c-api/import.rst
@@ -223,21 +223,6 @@
    Return a new reference to the finder object.
 
 
-.. c:function:: void _PyImport_Init()
-
-   Initialize the import mechanism.  For internal use only.
-
-
-.. c:function:: void PyImport_Cleanup()
-
-   Empty the module table.  For internal use only.
-
-
-.. c:function:: void _PyImport_Fini()
-
-   Finalize the import mechanism.  For internal use only.
-
-
 .. c:function:: int PyImport_ImportFrozenModuleObject(PyObject *name)
 
    Load a frozen module named *name*.  Return ``1`` for success, ``0`` if the
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index 68d892d..7f06648 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -81,7 +81,7 @@
 that the option was set. For example, ``-b`` sets :c:data:`Py_BytesWarningFlag`
 to 1 and ``-bb`` sets :c:data:`Py_BytesWarningFlag` to 2.
 
-.. c:var:: Py_BytesWarningFlag
+.. c:var:: int Py_BytesWarningFlag
 
    Issue a warning when comparing :class:`bytes` or :class:`bytearray` with
    :class:`str` or :class:`bytes` with :class:`int`.  Issue an error if greater
@@ -89,7 +89,7 @@
 
    Set by the :option:`-b` option.
 
-.. c:var:: Py_DebugFlag
+.. c:var:: int Py_DebugFlag
 
    Turn on parser debugging output (for expert only, depending on compilation
    options).
@@ -97,7 +97,7 @@
    Set by the :option:`-d` option and the :envvar:`PYTHONDEBUG` environment
    variable.
 
-.. c:var:: Py_DontWriteBytecodeFlag
+.. c:var:: int Py_DontWriteBytecodeFlag
 
    If set to non-zero, Python won't try to write ``.pyc`` files on the
    import of source modules.
@@ -105,14 +105,14 @@
    Set by the :option:`-B` option and the :envvar:`PYTHONDONTWRITEBYTECODE`
    environment variable.
 
-.. c:var:: Py_FrozenFlag
+.. c:var:: int Py_FrozenFlag
 
    Suppress error messages when calculating the module search path in
    :c:func:`Py_GetPath`.
 
    Private flag used by ``_freeze_importlib`` and ``frozenmain`` programs.
 
-.. c:var:: Py_HashRandomizationFlag
+.. c:var:: int Py_HashRandomizationFlag
 
    Set to ``1`` if the :envvar:`PYTHONHASHSEED` environment variable is set to
    a non-empty string.
@@ -120,14 +120,14 @@
    If the flag is non-zero, read the :envvar:`PYTHONHASHSEED` environment
    variable to initialize the secret hash seed.
 
-.. c:var:: Py_IgnoreEnvironmentFlag
+.. c:var:: int Py_IgnoreEnvironmentFlag
 
    Ignore all :envvar:`PYTHON*` environment variables, e.g.
    :envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set.
 
    Set by the :option:`-E` and :option:`-I` options.
 
-.. c:var:: Py_InspectFlag
+.. c:var:: int Py_InspectFlag
 
    When a script is passed as first argument or the :option:`-c` option is used,
    enter interactive mode after executing the script or the command, even when
@@ -136,11 +136,11 @@
    Set by the :option:`-i` option and the :envvar:`PYTHONINSPECT` environment
    variable.
 
-.. c:var:: Py_InteractiveFlag
+.. c:var:: int Py_InteractiveFlag
 
    Set by the :option:`-i` option.
 
-.. c:var:: Py_IsolatedFlag
+.. c:var:: int Py_IsolatedFlag
 
    Run Python in isolated mode. In isolated mode :data:`sys.path` contains
    neither the script's directory nor the user's site-packages directory.
@@ -149,7 +149,7 @@
 
    .. versionadded:: 3.4
 
-.. c:var:: Py_LegacyWindowsFSEncodingFlag
+.. c:var:: int Py_LegacyWindowsFSEncodingFlag
 
    If the flag is non-zero, use the ``mbcs`` encoding instead of the UTF-8
    encoding for the filesystem encoding.
@@ -161,7 +161,7 @@
 
    .. availability:: Windows.
 
-.. c:var:: Py_LegacyWindowsStdioFlag
+.. c:var:: int Py_LegacyWindowsStdioFlag
 
    If the flag is non-zero, use :class:`io.FileIO` instead of
    :class:`WindowsConsoleIO` for :mod:`sys` standard streams.
@@ -173,7 +173,7 @@
 
    .. availability:: Windows.
 
-.. c:var:: Py_NoSiteFlag
+.. c:var:: int Py_NoSiteFlag
 
    Disable the import of the module :mod:`site` and the site-dependent
    manipulations of :data:`sys.path` that it entails.  Also disable these
@@ -182,7 +182,7 @@
 
    Set by the :option:`-S` option.
 
-.. c:var:: Py_NoUserSiteDirectory
+.. c:var:: int Py_NoUserSiteDirectory
 
    Don't add the :data:`user site-packages directory <site.USER_SITE>` to
    :data:`sys.path`.
@@ -190,12 +190,12 @@
    Set by the :option:`-s` and :option:`-I` options, and the
    :envvar:`PYTHONNOUSERSITE` environment variable.
 
-.. c:var:: Py_OptimizeFlag
+.. c:var:: int Py_OptimizeFlag
 
    Set by the :option:`-O` option and the :envvar:`PYTHONOPTIMIZE` environment
    variable.
 
-.. c:var:: Py_QuietFlag
+.. c:var:: int Py_QuietFlag
 
    Don't display the copyright and version messages even in interactive mode.
 
@@ -203,14 +203,14 @@
 
    .. versionadded:: 3.2
 
-.. c:var:: Py_UnbufferedStdioFlag
+.. c:var:: int Py_UnbufferedStdioFlag
 
    Force the stdout and stderr streams to be unbuffered.
 
    Set by the :option:`-u` option and the :envvar:`PYTHONUNBUFFERED`
    environment variable.
 
-.. c:var:: Py_VerboseFlag
+.. c:var:: int Py_VerboseFlag
 
    Print a message each time a module is initialized, showing the place
    (filename or built-in module) from which it is loaded.  If greater or equal
@@ -830,7 +830,7 @@
 .. c:type:: PyThreadState
 
    This data structure represents the state of a single thread.  The only public
-   data member is :c:type:`PyInterpreterState \*`:attr:`interp`, which points to
+   data member is :attr:`interp` (:c:type:`PyInterpreterState *`), which points to
    this thread's interpreter state.
 
 
@@ -842,12 +842,12 @@
       single: PyEval_SaveThread()
       single: PyEval_RestoreThread()
 
-   Initialize and acquire the global interpreter lock.  It should be called in the
-   main thread before creating a second thread or engaging in any other thread
-   operations such as ``PyEval_ReleaseThread(tstate)``. It is not needed before
-   calling :c:func:`PyEval_SaveThread` or :c:func:`PyEval_RestoreThread`.
+   Deprecated function which does nothing.
 
-   This is a no-op when called for a second time.
+   In Python 3.6 and older, this function created the GIL if it didn't exist.
+
+   .. versionchanged:: 3.9
+      The function now does nothing.
 
    .. versionchanged:: 3.7
       This function is now called by :c:func:`Py_Initialize()`, so you don't
@@ -856,6 +856,8 @@
    .. versionchanged:: 3.2
       This function cannot be called before :c:func:`Py_Initialize()` anymore.
 
+   .. deprecated-removed:: 3.9 3.11
+
    .. index:: module: _thread
 
 
@@ -868,6 +870,8 @@
    .. versionchanged:: 3.7
       The :term:`GIL` is now initialized by :c:func:`Py_Initialize()`.
 
+   .. deprecated-removed:: 3.9 3.11
+
 
 .. c:function:: PyThreadState* PyEval_SaveThread()
 
@@ -1048,6 +1052,10 @@
    Reset all information in a thread state object.  The global interpreter lock
    must be held.
 
+   .. versionchanged:: 3.9
+      This function now calls the :c:member:`PyThreadState.on_delete` callback.
+      Previously, that happened in :c:func:`PyThreadState_Delete`.
+
 
 .. c:function:: void PyThreadState_Delete(PyThreadState *tstate)
 
@@ -1056,11 +1064,65 @@
    :c:func:`PyThreadState_Clear`.
 
 
-.. c:function:: PY_INT64_T PyInterpreterState_GetID(PyInterpreterState *interp)
+.. c:function:: void PyThreadState_DeleteCurrent(void)
+
+   Destroy the current thread state and release the global interpreter lock.
+   Like :c:func:`PyThreadState_Delete`, the global interpreter lock need not
+   be held. The thread state must have been reset with a previous call
+   to :c:func:`PyThreadState_Clear`.
+
+
+.. c:function:: PyFrameObject* PyThreadState_GetFrame(PyThreadState *tstate)
+
+   Get the current frame of the Python thread state *tstate*.
+
+   Return a strong reference. Return ``NULL`` if no frame is currently
+   executing.
+
+   See also :c:func:`PyEval_GetFrame`.
+
+   *tstate* must not be ``NULL``.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: uint64_t PyThreadState_GetID(PyThreadState *tstate)
+
+   Get the unique thread state identifier of the Python thread state *tstate*.
+
+   *tstate* must not be ``NULL``.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: PyInterpreterState* PyThreadState_GetInterpreter(PyThreadState *tstate)
+
+   Get the interpreter of the Python thread state *tstate*.
+
+   *tstate* must not be ``NULL``.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: PyInterpreterState* PyInterpreterState_Get(void)
+
+   Get the current interpreter.
+
+   Issue a fatal error if there no current Python thread state or no current
+   interpreter. It cannot return NULL.
+
+   The caller must hold the GIL.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: int64_t PyInterpreterState_GetID(PyInterpreterState *interp)
 
    Return the interpreter's unique ID.  If there was any error in doing
    so then ``-1`` is returned and an error is set.
 
+   The caller must hold the GIL.
+
    .. versionadded:: 3.7
 
 
@@ -1075,6 +1137,32 @@
 
    .. versionadded:: 3.8
 
+.. c:type:: PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, PyFrameObject *frame, int throwflag)
+
+   Type of a frame evaluation function.
+
+   The *throwflag* parameter is used by the ``throw()`` method of generators:
+   if non-zero, handle the current exception.
+
+   .. versionchanged:: 3.9
+      The function now takes a *tstate* parameter.
+
+.. c:function:: _PyFrameEvalFunction _PyInterpreterState_GetEvalFrameFunc(PyInterpreterState *interp)
+
+   Get the frame evaluation function.
+
+   See the :pep:`523` "Adding a frame evaluation API to CPython".
+
+   .. versionadded:: 3.9
+
+.. c:function:: void _PyInterpreterState_SetEvalFrameFunc(PyInterpreterState *interp, _PyFrameEvalFunction eval_frame);
+
+   Set the frame evaluation function.
+
+   See the :pep:`523` "Adding a frame evaluation API to CPython".
+
+   .. versionadded:: 3.9
+
 
 .. c:function:: PyObject* PyThreadState_GetDict()
 
@@ -1102,7 +1190,7 @@
 .. c:function:: void PyEval_AcquireThread(PyThreadState *tstate)
 
    Acquire the global interpreter lock and set the current thread state to
-   *tstate*, which should not be ``NULL``.  The lock must have been created earlier.
+   *tstate*, which must not be ``NULL``.  The lock must have been created earlier.
    If this thread already has the lock, deadlock ensues.
 
    .. note::
@@ -1326,6 +1414,10 @@
    This function doesn't need a current thread state to run, and it doesn't
    need the global interpreter lock.
 
+   To call this function in a subinterpreter, the caller must hold the GIL.
+   Otherwise, the function *func* can be scheduled to be called from the wrong
+   interpreter.
+
    .. warning::
       This is a low-level function, only useful for very special cases.
       There is no guarantee that *func* will be called as quick as
@@ -1334,6 +1426,12 @@
       function is generally **not** suitable for calling Python code from
       arbitrary C threads.  Instead, use the :ref:`PyGILState API<gilstate>`.
 
+   .. versionchanged:: 3.9
+      If this function is called in a subinterpreter, the function *func* is
+      now scheduled to be called from the subinterpreter, rather than being
+      called from the main interpreter. Each subinterpreter now has its own
+      list of scheduled calls.
+
    .. versionadded:: 3.1
 
 .. _profiling:
@@ -1456,6 +1554,8 @@
    profile function is called for all monitored events except :const:`PyTrace_LINE`
    :const:`PyTrace_OPCODE` and :const:`PyTrace_EXCEPTION`.
 
+   The caller must hold the :term:`GIL`.
+
 
 .. c:function:: void PyEval_SetTrace(Py_tracefunc func, PyObject *obj)
 
@@ -1466,6 +1566,9 @@
    will not receive :const:`PyTrace_C_CALL`, :const:`PyTrace_C_EXCEPTION` or
    :const:`PyTrace_C_RETURN` as a value for the *what* parameter.
 
+   The caller must hold the :term:`GIL`.
+
+
 .. _advanced-debugging:
 
 Advanced Debugger Support
@@ -1516,7 +1619,7 @@
 (TLS) which wraps the underlying native TLS implementation to support the
 Python-level thread local storage API (:class:`threading.local`).  The
 CPython C level APIs are similar to those offered by pthreads and Windows:
-use a thread key and functions to associate a :c:type:`void\*` value per
+use a thread key and functions to associate a :c:type:`void*` value per
 thread.
 
 The GIL does *not* need to be held when calling these functions; they supply
@@ -1527,8 +1630,8 @@
 
 .. note::
    None of these API functions handle memory management on behalf of the
-   :c:type:`void\*` values.  You need to allocate and deallocate them yourself.
-   If the :c:type:`void\*` values happen to be :c:type:`PyObject\*`, these
+   :c:type:`void*` values.  You need to allocate and deallocate them yourself.
+   If the :c:type:`void*` values happen to be :c:type:`PyObject*`, these
    functions don't do refcount operations on them either.
 
 .. _thread-specific-storage-api:
@@ -1624,14 +1727,14 @@
 
 .. c:function:: int PyThread_tss_set(Py_tss_t *key, void *value)
 
-   Return a zero value to indicate successfully associating a :c:type:`void\*`
+   Return a zero value to indicate successfully associating a :c:type:`void*`
    value with a TSS key in the current thread.  Each thread has a distinct
-   mapping of the key to a :c:type:`void\*` value.
+   mapping of the key to a :c:type:`void*` value.
 
 
 .. c:function:: void* PyThread_tss_get(Py_tss_t *key)
 
-   Return the :c:type:`void\*` value associated with a TSS key in the current
+   Return the :c:type:`void*` value associated with a TSS key in the current
    thread.  This returns ``NULL`` if no value is associated with the key in the
    current thread.
 
diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst
index ff4ccb8..f2b82a0 100644
--- a/Doc/c-api/init_config.rst
+++ b/Doc/c-api/init_config.rst
@@ -43,6 +43,7 @@
 * :c:func:`Py_PreInitializeFromArgs`
 * :c:func:`Py_PreInitializeFromBytesArgs`
 * :c:func:`Py_RunMain`
+* :c:func:`Py_GetArgcArgv`
 
 The preconfiguration (``PyPreConfig`` type) is stored in
 ``_PyRuntime.preconfig`` and the configuration (``PyConfig`` type) is stored in
@@ -436,6 +437,14 @@
 
       :data:`sys.base_prefix`.
 
+   .. c:member:: wchar_t* platlibdir
+
+      :data:`sys.platlibdir`: platform library directory name, set at configure time
+      by ``--with-platlibdir``, overrideable by the ``PYTHONPLATLIBDIR``
+      environment variable.
+
+      .. versionadded:: 3.9
+
    .. c:member:: int buffered_stdio
 
       If equals to 0, enable unbuffered mode, making the stdout and stderr
@@ -466,13 +475,13 @@
 
    .. c:member:: int dev_mode
 
-      Development mode: see :option:`-X dev <-X>`.
+      If non-zero, enable the :ref:`Python Development Mode <devmode>`.
 
    .. c:member:: int dump_refs
 
       If non-zero, dump all objects which are still alive at exit.
 
-      Require a debug build of Python (``Py_REF_DEBUG`` macro must be defined).
+      ``Py_TRACE_REFS`` macro must be defined in build.
 
    .. c:member:: wchar_t* exec_prefix
 
@@ -627,14 +636,6 @@
 
       ``python3 -m MODULE`` argument. Used by :c:func:`Py_RunMain`.
 
-   .. c:member:: int show_alloc_count
-
-      Show allocation counts at exit?
-
-      Set to 1 by :option:`-X showalloccount <-X>` command line option.
-
-      Need a special Python build with ``COUNT_ALLOCS`` macro defined.
-
    .. c:member:: int show_ref_count
 
       Show total reference count at exit?
@@ -694,6 +695,16 @@
 
       :data:`sys._xoptions`.
 
+   .. c:member:: int _use_peg_parser
+
+      Enable PEG parser? Default: 1.
+
+      Set to 0 by :option:`-X oldparser <-X>` and :envvar:`PYTHONOLDPARSER`.
+
+      See also :pep:`617`.
+
+      .. deprecated-removed:: 3.9 3.10
+
 If ``parse_argv`` is non-zero, ``argv`` arguments are parsed the same
 way the regular Python parses command line arguments, and Python
 arguments are stripped from ``argv``: see :ref:`Command Line Arguments
@@ -702,6 +713,10 @@
 The ``xoptions`` options are parsed to set other options: see :option:`-X`
 option.
 
+.. versionchanged:: 3.9
+
+   The ``show_alloc_count`` field has been removed.
+
 
 Initialization with PyConfig
 ----------------------------
@@ -878,6 +893,7 @@
 * Path configuration inputs:
 
   * :c:member:`PyConfig.home`
+  * :c:member:`PyConfig.platlibdir`
   * :c:member:`PyConfig.pathconfig_warnings`
   * :c:member:`PyConfig.program_name`
   * :c:member:`PyConfig.pythonpath_env`
@@ -969,6 +985,14 @@
 :c:func:`Py_RunMain`.
 
 
+Py_GetArgcArgv()
+----------------
+
+.. c:function:: void Py_GetArgcArgv(int *argc, wchar_t ***argv)
+
+   Get the original command line arguments, before Python modified them.
+
+
 Multi-Phase Initialization Private Provisional API
 --------------------------------------------------
 
@@ -998,6 +1022,8 @@
 
 * :c:member:`PyConfig._init_main`: if set to 0,
   :c:func:`Py_InitializeFromConfig` stops at the "Core" initialization phase.
+* :c:member:`PyConfig._isolated_interpreter`: if non-zero,
+  disallow threads, subprocesses and fork.
 
 .. c:function:: PyStatus _Py_InitializeMain(void)
 
diff --git a/Doc/c-api/intro.rst b/Doc/c-api/intro.rst
index 718f40e..7ca8693 100644
--- a/Doc/c-api/intro.rst
+++ b/Doc/c-api/intro.rst
@@ -107,11 +107,24 @@
 
 .. c:macro:: Py_UNREACHABLE()
 
-   Use this when you have a code path that you do not expect to be reached.
+   Use this when you have a code path that cannot be reached by design.
    For example, in the ``default:`` clause in a ``switch`` statement for which
    all possible values are covered in ``case`` statements.  Use this in places
    where you might be tempted to put an ``assert(0)`` or ``abort()`` call.
 
+   In release mode, the macro helps the compiler to optimize the code, and
+   avoids a warning about unreachable code.  For example, the macro is
+   implemented with ``__builtin_unreachable()`` on GCC in release mode.
+
+   A use for ``Py_UNREACHABLE()`` is following a call a function that
+   never returns but that is not declared :c:macro:`_Py_NO_RETURN`.
+
+   If a code path is very unlikely code but can be reached under exceptional
+   case, this macro must not be used.  For example, under low memory condition
+   or if a system call returns a value out of the expected range.  In this
+   case, it's better to report the error to the caller.  If the error cannot
+   be reported to caller, :c:func:`Py_FatalError` can be used.
+
    .. versionadded:: 3.7
 
 .. c:macro:: Py_ABS(x)
@@ -216,13 +229,13 @@
 .. index:: object: type
 
 Most Python/C API functions have one or more arguments as well as a return value
-of type :c:type:`PyObject\*`.  This type is a pointer to an opaque data type
+of type :c:type:`PyObject*`.  This type is a pointer to an opaque data type
 representing an arbitrary Python object.  Since all Python object types are
 treated the same way by the Python language in most situations (e.g.,
 assignments, scope rules, and argument passing), it is only fitting that they
 should be represented by a single C type.  Almost all Python objects live on the
 heap: you never declare an automatic or static variable of type
-:c:type:`PyObject`, only pointer variables of type :c:type:`PyObject\*` can  be
+:c:type:`PyObject`, only pointer variables of type :c:type:`PyObject*` can  be
 declared.  The sole exception are the type objects; since these must never be
 deallocated, they are typically static :c:type:`PyTypeObject` objects.
 
@@ -483,7 +496,7 @@
 
 There are few other data types that play a significant role in  the Python/C
 API; most are simple C types such as :c:type:`int`,  :c:type:`long`,
-:c:type:`double` and :c:type:`char\*`.  A few structure types  are used to
+:c:type:`double` and :c:type:`char*`.  A few structure types  are used to
 describe static tables used to list the functions exported  by a module or the
 data attributes of a new object type, and another is used to describe the value
 of a complex number.  These will  be discussed together with the functions that
diff --git a/Doc/c-api/list.rst b/Doc/c-api/list.rst
index b247cdf..0bc0785 100644
--- a/Doc/c-api/list.rst
+++ b/Doc/c-api/list.rst
@@ -142,10 +142,3 @@
 
    Return a new tuple object containing the contents of *list*; equivalent to
    ``tuple(list)``.
-
-
-.. c:function:: int PyList_ClearFreeList()
-
-   Clear the free list. Return the total number of freed items.
-
-   .. versionadded:: 3.3
diff --git a/Doc/c-api/long.rst b/Doc/c-api/long.rst
index 3bada41..22e59ce 100644
--- a/Doc/c-api/long.rst
+++ b/Doc/c-api/long.rst
@@ -42,9 +42,7 @@
 
    The current implementation keeps an array of integer objects for all integers
    between ``-5`` and ``256``, when you create an int in that range you actually
-   just get back a reference to the existing object. So it should be possible to
-   change the value of ``1``.  I suspect the behaviour of Python in this case is
-   undefined. :-)
+   just get back a reference to the existing object.
 
 
 .. c:function:: PyObject* PyLong_FromUnsignedLong(unsigned long v)
@@ -193,8 +191,8 @@
    :meth:`__int__` method (if present) to convert it to a
    :c:type:`PyLongObject`.
 
-   If the value of *obj* is greater than :const:`PY_LLONG_MAX` or less than
-   :const:`PY_LLONG_MIN`, set *\*overflow* to ``1`` or ``-1``, respectively,
+   If the value of *obj* is greater than :const:`LLONG_MAX` or less than
+   :const:`LLONG_MIN`, set *\*overflow* to ``1`` or ``-1``, respectively,
    and return ``-1``; otherwise, set *\*overflow* to ``0``.  If any other
    exception occurs set *\*overflow* to ``0`` and return ``-1`` as usual.
 
@@ -302,7 +300,7 @@
    it to a :c:type:`PyLongObject`.
 
    If the value of *obj* is out of range for an :c:type:`unsigned long long`,
-   return the reduction of that value modulo ``PY_ULLONG_MAX + 1``.
+   return the reduction of that value modulo ``ULLONG_MAX + 1``.
 
    Returns ``(unsigned long long)-1`` on error.  Use :c:func:`PyErr_Occurred`
    to disambiguate.
diff --git a/Doc/c-api/marshal.rst b/Doc/c-api/marshal.rst
index 7b179e2..7bb0dad 100644
--- a/Doc/c-api/marshal.rst
+++ b/Doc/c-api/marshal.rst
@@ -43,7 +43,7 @@
 
 .. c:function:: long PyMarshal_ReadLongFromFile(FILE *file)
 
-   Return a C :c:type:`long` from the data stream in a :c:type:`FILE\*` opened
+   Return a C :c:type:`long` from the data stream in a :c:type:`FILE*` opened
    for reading.  Only a 32-bit value can be read in using this function,
    regardless of the native size of :c:type:`long`.
 
@@ -53,7 +53,7 @@
 
 .. c:function:: int PyMarshal_ReadShortFromFile(FILE *file)
 
-   Return a C :c:type:`short` from the data stream in a :c:type:`FILE\*` opened
+   Return a C :c:type:`short` from the data stream in a :c:type:`FILE*` opened
    for reading.  Only a 16-bit value can be read in using this function,
    regardless of the native size of :c:type:`short`.
 
@@ -63,7 +63,7 @@
 
 .. c:function:: PyObject* PyMarshal_ReadObjectFromFile(FILE *file)
 
-   Return a Python object from the data stream in a :c:type:`FILE\*` opened for
+   Return a Python object from the data stream in a :c:type:`FILE*` opened for
    reading.
 
    On error, sets the appropriate exception (:exc:`EOFError`, :exc:`ValueError`
@@ -72,7 +72,7 @@
 
 .. c:function:: PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file)
 
-   Return a Python object from the data stream in a :c:type:`FILE\*` opened for
+   Return a Python object from the data stream in a :c:type:`FILE*` opened for
    reading.  Unlike :c:func:`PyMarshal_ReadObjectFromFile`, this function
    assumes that no further objects will be read from the file, allowing it to
    aggressively load file data into memory so that the de-serialization can
diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst
index 8a8542f..87425bc 100644
--- a/Doc/c-api/memory.rst
+++ b/Doc/c-api/memory.rst
@@ -109,7 +109,7 @@
 
 .. c:function:: void* PyMem_RawMalloc(size_t n)
 
-   Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
+   Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the
    allocated memory, or ``NULL`` if the request fails.
 
    Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, as
@@ -120,7 +120,7 @@
 .. c:function:: void* PyMem_RawCalloc(size_t nelem, size_t elsize)
 
    Allocates *nelem* elements each whose size in bytes is *elsize* and returns
-   a pointer of type :c:type:`void\*` to the allocated memory, or ``NULL`` if the
+   a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if the
    request fails. The memory is initialized to zeros.
 
    Requesting zero elements or elements of size zero bytes returns a distinct
@@ -180,7 +180,7 @@
 
 .. c:function:: void* PyMem_Malloc(size_t n)
 
-   Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
+   Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the
    allocated memory, or ``NULL`` if the request fails.
 
    Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, as
@@ -191,7 +191,7 @@
 .. c:function:: void* PyMem_Calloc(size_t nelem, size_t elsize)
 
    Allocates *nelem* elements each whose size in bytes is *elsize* and returns
-   a pointer of type :c:type:`void\*` to the allocated memory, or ``NULL`` if the
+   a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if the
    request fails. The memory is initialized to zeros.
 
    Requesting zero elements or elements of size zero bytes returns a distinct
@@ -233,14 +233,14 @@
 .. c:function:: TYPE* PyMem_New(TYPE, size_t n)
 
    Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes of
-   memory.  Returns a pointer cast to :c:type:`TYPE\*`.  The memory will not have
+   memory.  Returns a pointer cast to :c:type:`TYPE*`.  The memory will not have
    been initialized in any way.
 
 
 .. c:function:: TYPE* PyMem_Resize(void *p, TYPE, size_t n)
 
    Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n *
-   sizeof(TYPE))`` bytes.  Returns a pointer cast to :c:type:`TYPE\*`. On return,
+   sizeof(TYPE))`` bytes.  Returns a pointer cast to :c:type:`TYPE*`. On return,
    *p* will be a pointer to the new memory area, or ``NULL`` in the event of
    failure.
 
@@ -282,7 +282,7 @@
 
 .. c:function:: void* PyObject_Malloc(size_t n)
 
-   Allocates *n* bytes and returns a pointer of type :c:type:`void\*` to the
+   Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the
    allocated memory, or ``NULL`` if the request fails.
 
    Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, as
@@ -293,7 +293,7 @@
 .. c:function:: void* PyObject_Calloc(size_t nelem, size_t elsize)
 
    Allocates *nelem* elements each whose size in bytes is *elsize* and returns
-   a pointer of type :c:type:`void\*` to the allocated memory, or ``NULL`` if the
+   a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if the
    request fails. The memory is initialized to zeros.
 
    Requesting zero elements or elements of size zero bytes returns a distinct
@@ -388,7 +388,7 @@
 
    Enum used to identify an allocator domain. Domains:
 
-   .. c:var:: PYMEM_DOMAIN_RAW
+   .. c:macro:: PYMEM_DOMAIN_RAW
 
       Functions:
 
@@ -397,7 +397,7 @@
       * :c:func:`PyMem_RawCalloc`
       * :c:func:`PyMem_RawFree`
 
-   .. c:var:: PYMEM_DOMAIN_MEM
+   .. c:macro:: PYMEM_DOMAIN_MEM
 
       Functions:
 
@@ -406,7 +406,7 @@
       * :c:func:`PyMem_Calloc`
       * :c:func:`PyMem_Free`
 
-   .. c:var:: PYMEM_DOMAIN_OBJ
+   .. c:macro:: PYMEM_DOMAIN_OBJ
 
       Functions:
 
@@ -519,11 +519,11 @@
    | ``void free(void *ctx, size_t size, void *ptr)`` | free an arena                         |
    +--------------------------------------------------+---------------------------------------+
 
-.. c:function:: PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator)
+.. c:function:: void PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator)
 
    Get the arena allocator.
 
-.. c:function:: PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator)
+.. c:function:: void PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator)
 
    Set the arena allocator.
 
diff --git a/Doc/c-api/method.rst b/Doc/c-api/method.rst
index b1862d7..0a5341c 100644
--- a/Doc/c-api/method.rst
+++ b/Doc/c-api/method.rst
@@ -92,9 +92,3 @@
 .. c:function:: PyObject* PyMethod_GET_SELF(PyObject *meth)
 
    Macro version of :c:func:`PyMethod_Self` which avoids error checking.
-
-
-.. c:function:: int PyMethod_ClearFreeList()
-
-   Clear the free list. Return the total number of freed items.
-
diff --git a/Doc/c-api/module.rst b/Doc/c-api/module.rst
index d2b8f4c..6e9474b 100644
--- a/Doc/c-api/module.rst
+++ b/Doc/c-api/module.rst
@@ -196,23 +196,47 @@
    .. c:member:: traverseproc m_traverse
 
       A traversal function to call during GC traversal of the module object, or
-      ``NULL`` if not needed. This function may be called before module state
-      is allocated (:c:func:`PyModule_GetState()` may return `NULL`),
-      and before the :c:member:`Py_mod_exec` function is executed.
+      ``NULL`` if not needed.
+
+      This function is not called if the module state was requested but is not
+      allocated yet. This is the case immediately after the module is created
+      and before the module is executed (:c:data:`Py_mod_exec` function). More
+      precisely, this function is not called if :c:member:`m_size` is greater
+      than 0 and the module state (as returned by :c:func:`PyModule_GetState`)
+      is ``NULL``.
+
+      .. versionchanged:: 3.9
+         No longer called before the module state is allocated.
 
    .. c:member:: inquiry m_clear
 
       A clear function to call during GC clearing of the module object, or
-      ``NULL`` if not needed. This function may be called before module state
-      is allocated (:c:func:`PyModule_GetState()` may return `NULL`),
-      and before the :c:member:`Py_mod_exec` function is executed.
+      ``NULL`` if not needed.
+
+      This function is not called if the module state was requested but is not
+      allocated yet. This is the case immediately after the module is created
+      and before the module is executed (:c:data:`Py_mod_exec` function). More
+      precisely, this function is not called if :c:member:`m_size` is greater
+      than 0 and the module state (as returned by :c:func:`PyModule_GetState`)
+      is ``NULL``.
+
+      .. versionchanged:: 3.9
+         No longer called before the module state is allocated.
 
    .. c:member:: freefunc m_free
 
-      A function to call during deallocation of the module object, or ``NULL`` if
-      not needed. This function may be called before module state
-      is allocated (:c:func:`PyModule_GetState()` may return `NULL`),
-      and before the :c:member:`Py_mod_exec` function is executed.
+      A function to call during deallocation of the module object, or ``NULL``
+      if not needed.
+
+      This function is not called if the module state was requested but is not
+      allocated yet. This is the case immediately after the module is created
+      and before the module is executed (:c:data:`Py_mod_exec` function). More
+      precisely, this function is not called if :c:member:`m_size` is greater
+      than 0 and the module state (as returned by :c:func:`PyModule_GetState`)
+      is ``NULL``.
+
+      .. versionchanged:: 3.9
+         No longer called before the module state is allocated.
 
 Single-phase initialization
 ...........................
@@ -301,7 +325,7 @@
 
 The available slot types are:
 
-.. c:var:: Py_mod_create
+.. c:macro:: Py_mod_create
 
    Specifies a function that is called to create the module object itself.
    The *value* pointer of this slot must point to a function of the signature:
@@ -333,7 +357,7 @@
    ``PyModuleDef`` has non-``NULL`` ``m_traverse``, ``m_clear``,
    ``m_free``; non-zero ``m_size``; or slots other than ``Py_mod_create``.
 
-.. c:var:: Py_mod_exec
+.. c:macro:: Py_mod_exec
 
    Specifies a function that is called to *execute* the module.
    This is equivalent to executing the code of a Python module: typically,
@@ -417,7 +441,7 @@
 
    Add an object to *module* as *name*.  This is a convenience function which can
    be used from the module's initialization function.  This steals a reference to
-   *value* on success.  Return ``-1`` on error, ``0`` on success.
+   *value* on success. Return ``-1`` on error, ``0`` on success.
 
    .. note::
 
@@ -460,6 +484,16 @@
 
    Add a string constant to *module*.
 
+.. c:function:: int PyModule_AddType(PyObject *module, PyTypeObject *type)
+
+   Add a type object to *module*.
+   The type object is finalized by calling internally :c:func:`PyType_Ready`.
+   The name of the type object is taken from the last component of
+   :c:member:`~PyTypeObject.tp_name` after dot.
+   Return ``-1`` on error, ``0`` on success.
+
+   .. versionadded:: 3.9
+
 
 Module lookup
 ^^^^^^^^^^^^^
@@ -493,6 +527,8 @@
    mechanisms (either by calling it directly, or by referring to its
    implementation for details of the required state updates).
 
+   The caller must hold the GIL.
+
    Return 0 on success or -1 on failure.
 
    .. versionadded:: 3.3
@@ -502,4 +538,6 @@
    Removes the module object created from *def* from the interpreter state.
    Return 0 on success or -1 on failure.
 
+   The caller must hold the GIL.
+
    .. versionadded:: 3.3
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index 3bdc0f5..a387b4a 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -196,6 +196,7 @@
       This function now includes a debug assertion to help ensure that it
       does not silently discard an active exception.
 
+
 .. c:function:: PyObject* PyObject_Bytes(PyObject *o)
 
    .. index:: builtin: bytes
@@ -247,179 +248,6 @@
    of base classes).
 
 
-.. c:function:: int PyCallable_Check(PyObject *o)
-
-   Determine if the object *o* is callable.  Return ``1`` if the object is callable
-   and ``0`` otherwise.  This function always succeeds.
-
-
-.. c:function:: PyObject* PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
-
-   Call a callable Python object *callable*, with arguments given by the
-   tuple *args*, and named arguments given by the dictionary *kwargs*.
-
-   *args* must not be ``NULL``, use an empty tuple if no arguments are needed.
-   If no named arguments are needed, *kwargs* can be ``NULL``.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-   This is the equivalent of the Python expression:
-   ``callable(*args, **kwargs)``.
-
-
-.. c:function:: PyObject* PyObject_CallObject(PyObject *callable, PyObject *args)
-
-   Call a callable Python object *callable*, with arguments given by the
-   tuple *args*.  If no arguments are needed, then *args* can be ``NULL``.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-   This is the equivalent of the Python expression: ``callable(*args)``.
-
-
-.. c:function:: PyObject* PyObject_CallFunction(PyObject *callable, const char *format, ...)
-
-   Call a callable Python object *callable*, with a variable number of C arguments.
-   The C arguments are described using a :c:func:`Py_BuildValue` style format
-   string.  The format can be ``NULL``, indicating that no arguments are provided.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-   This is the equivalent of the Python expression: ``callable(*args)``.
-
-   Note that if you only pass :c:type:`PyObject \*` args,
-   :c:func:`PyObject_CallFunctionObjArgs` is a faster alternative.
-
-   .. versionchanged:: 3.4
-      The type of *format* was changed from ``char *``.
-
-
-.. c:function:: PyObject* PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)
-
-   Call the method named *name* of object *obj* with a variable number of C
-   arguments.  The C arguments are described by a :c:func:`Py_BuildValue` format
-   string that should  produce a tuple.
-
-   The format can be ``NULL``, indicating that no arguments are provided.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-   This is the equivalent of the Python expression:
-   ``obj.name(arg1, arg2, ...)``.
-
-   Note that if you only pass :c:type:`PyObject \*` args,
-   :c:func:`PyObject_CallMethodObjArgs` is a faster alternative.
-
-   .. versionchanged:: 3.4
-      The types of *name* and *format* were changed from ``char *``.
-
-
-.. c:function:: PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)
-
-   Call a callable Python object *callable*, with a variable number of
-   :c:type:`PyObject\*` arguments.  The arguments are provided as a variable number
-   of parameters followed by ``NULL``.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-   This is the equivalent of the Python expression:
-   ``callable(arg1, arg2, ...)``.
-
-
-.. c:function:: PyObject* PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ..., NULL)
-
-   Calls a method of the Python object *obj*, where the name of the method is given as a
-   Python string object in *name*.  It is called with a variable number of
-   :c:type:`PyObject\*` arguments.  The arguments are provided as a variable number
-   of parameters followed by ``NULL``.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-
-.. c:function:: PyObject* _PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)
-
-   Call a callable Python object *callable*, using
-   :c:data:`vectorcall <PyTypeObject.tp_vectorcall_offset>` if possible.
-
-   *args* is a C array with the positional arguments.
-
-   *nargsf* is the number of positional arguments plus optionally the flag
-   :const:`PY_VECTORCALL_ARGUMENTS_OFFSET` (see below).
-   To get actual number of arguments, use
-   :c:func:`PyVectorcall_NARGS(nargsf) <PyVectorcall_NARGS>`.
-
-   *kwnames* can be either ``NULL`` (no keyword arguments) or a tuple of keyword
-   names. In the latter case, the values of the keyword arguments are stored
-   in *args* after the positional arguments.
-   The number of keyword arguments does not influence *nargsf*.
-
-   *kwnames* must contain only objects of type ``str`` (not a subclass),
-   and all keys must be unique.
-
-   Return the result of the call on success, or raise an exception and return
-   ``NULL`` on failure.
-
-   This uses the vectorcall protocol if the callable supports it;
-   otherwise, the arguments are converted to use
-   :c:member:`~PyTypeObject.tp_call`.
-
-   .. note::
-
-      This function is provisional and expected to become public in Python 3.9,
-      with a different name and, possibly, changed semantics.
-      If you use the function, plan for updating your code for Python 3.9.
-
-   .. versionadded:: 3.8
-
-.. c:var:: PY_VECTORCALL_ARGUMENTS_OFFSET
-
-   If set in a vectorcall *nargsf* argument, the callee is allowed to
-   temporarily change ``args[-1]``. In other words, *args* points to
-   argument 1 (not 0) in the allocated vector.
-   The callee must restore the value of ``args[-1]`` before returning.
-
-   Whenever they can do so cheaply (without additional allocation), callers
-   are encouraged to use :const:`PY_VECTORCALL_ARGUMENTS_OFFSET`.
-   Doing so will allow callables such as bound methods to make their onward
-   calls (which include a prepended *self* argument) cheaply.
-
-   .. versionadded:: 3.8
-
-.. c:function:: Py_ssize_t PyVectorcall_NARGS(size_t nargsf)
-
-   Given a vectorcall *nargsf* argument, return the actual number of
-   arguments.
-   Currently equivalent to ``nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET``.
-
-   .. versionadded:: 3.8
-
-.. c:function:: PyObject* _PyObject_FastCallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)
-
-   Same as :c:func:`_PyObject_Vectorcall` except that the keyword arguments
-   are passed as a dictionary in *kwdict*. This may be ``NULL`` if there
-   are no keyword arguments.
-
-   For callables supporting :c:data:`vectorcall <PyTypeObject.tp_vectorcall_offset>`,
-   the arguments are internally converted to the vectorcall convention.
-   Therefore, this function adds some overhead compared to
-   :c:func:`_PyObject_Vectorcall`.
-   It should only be used if the caller already has a dictionary ready to use.
-
-   .. note::
-
-      This function is provisional and expected to become public in Python 3.9,
-      with a different name and, possibly, changed semantics.
-      If you use the function, plan for updating your code for Python 3.9.
-
-   .. versionadded:: 3.8
-
-
 .. c:function:: Py_hash_t PyObject_Hash(PyObject *o)
 
    .. index:: builtin: hash
@@ -463,7 +291,7 @@
    is equivalent to the Python expression ``type(o)``. This function increments the
    reference count of the return value. There's really no reason to use this
    function instead of the common expression ``o->ob_type``, which returns a
-   pointer of type :c:type:`PyTypeObject\*`, except when the incremented reference
+   pointer of type :c:type:`PyTypeObject*`, except when the incremented reference
    count is needed.
 
 
diff --git a/Doc/c-api/reflection.rst b/Doc/c-api/reflection.rst
index 1d86de6..9207d86 100644
--- a/Doc/c-api/reflection.rst
+++ b/Doc/c-api/reflection.rst
@@ -5,34 +5,60 @@
 Reflection
 ==========
 
-.. c:function:: PyObject* PyEval_GetBuiltins()
+.. c:function:: PyObject* PyEval_GetBuiltins(void)
 
    Return a dictionary of the builtins in the current execution frame,
    or the interpreter of the thread state if no frame is currently executing.
 
 
-.. c:function:: PyObject* PyEval_GetLocals()
+.. c:function:: PyObject* PyEval_GetLocals(void)
 
    Return a dictionary of the local variables in the current execution frame,
    or ``NULL`` if no frame is currently executing.
 
 
-.. c:function:: PyObject* PyEval_GetGlobals()
+.. c:function:: PyObject* PyEval_GetGlobals(void)
 
    Return a dictionary of the global variables in the current execution frame,
    or ``NULL`` if no frame is currently executing.
 
 
-.. c:function:: PyFrameObject* PyEval_GetFrame()
+.. c:function:: PyFrameObject* PyEval_GetFrame(void)
 
    Return the current thread state's frame, which is ``NULL`` if no frame is
    currently executing.
 
+   See also :c:func:`PyThreadState_GetFrame`.
+
+
+.. c:function:: int PyFrame_GetBack(PyFrameObject *frame)
+
+   Get the *frame* next outer frame.
+
+   Return a strong reference, or ``NULL`` if *frame* has no outer frame.
+
+   *frame* must not be ``NULL``.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: int PyFrame_GetCode(PyFrameObject *frame)
+
+   Get the *frame* code.
+
+   Return a strong reference.
+
+   *frame* must not be ``NULL``. The result (frame code) cannot be ``NULL``.
+
+   .. versionadded:: 3.9
+
 
 .. c:function:: int PyFrame_GetLineNumber(PyFrameObject *frame)
 
    Return the line number that *frame* is currently executing.
 
+   *frame* must not be ``NULL``.
+
 
 .. c:function:: const char* PyEval_GetFuncName(PyObject *func)
 
diff --git a/Doc/c-api/set.rst b/Doc/c-api/set.rst
index 54819e8f..879f394 100644
--- a/Doc/c-api/set.rst
+++ b/Doc/c-api/set.rst
@@ -157,10 +157,3 @@
 .. c:function:: int PySet_Clear(PyObject *set)
 
    Empty an existing set of all elements.
-
-
-.. c:function:: int PySet_ClearFreeList()
-
-   Clear the free list. Return the total number of freed items.
-
-   .. versionadded:: 3.3
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index 2dc0762..0a0e03f 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -9,6 +9,10 @@
 object types for Python.  This section describes these structures and how they
 are used.
 
+
+Base object types and macros
+----------------------------
+
 All Python objects ultimately share a small number of fields at the beginning
 of the object's representation in memory.  These are represented by the
 :c:type:`PyObject` and :c:type:`PyVarObject` types, which are defined, in turn,
@@ -66,6 +70,21 @@
       (((PyObject*)(o))->ob_type)
 
 
+.. c:function:: int Py_IS_TYPE(PyObject *o, PyTypeObject *type)
+
+   Return non-zero if the object *o* type is *type*. Return zero otherwise.
+   Equivalent to: ``Py_TYPE(o) == type``.
+
+   .. versionadded:: 3.9
+
+
+.. c:function:: void Py_SET_TYPE(PyObject *o, PyTypeObject *type)
+
+   Set the object *o* type to *type*.
+
+   .. versionadded:: 3.9
+
+
 .. c:macro:: Py_REFCNT(o)
 
    This macro is used to access the :attr:`ob_refcnt` member of a Python
@@ -75,6 +94,13 @@
       (((PyObject*)(o))->ob_refcnt)
 
 
+.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
+
+   Set the object *o* reference counter to *refcnt*.
+
+   .. versionadded:: 3.9
+
+
 .. c:macro:: Py_SIZE(o)
 
    This macro is used to access the :attr:`ob_size` member of a Python object.
@@ -83,6 +109,13 @@
       (((PyVarObject*)(o))->ob_size)
 
 
+.. c:function:: void Py_SET_SIZE(PyVarObject *o, Py_ssize_t size)
+
+   Set the object *o* size to *size*.
+
+   .. versionadded:: 3.9
+
+
 .. c:macro:: PyObject_HEAD_INIT(type)
 
    This is a macro which expands to initialization values for a new
@@ -102,32 +135,68 @@
       1, type, size,
 
 
+Implementing functions and methods
+----------------------------------
+
 .. c:type:: PyCFunction
 
    Type of the functions used to implement most Python callables in C.
-   Functions of this type take two :c:type:`PyObject\*` parameters and return
+   Functions of this type take two :c:type:`PyObject*` parameters and return
    one such value.  If the return value is ``NULL``, an exception shall have
    been set.  If not ``NULL``, the return value is interpreted as the return
    value of the function as exposed in Python.  The function must return a new
    reference.
 
+   The function signature is::
+
+      PyObject *PyCFunction(PyObject *self,
+                            PyObject *args);
 
 .. c:type:: PyCFunctionWithKeywords
 
    Type of the functions used to implement Python callables in C
    with signature :const:`METH_VARARGS | METH_KEYWORDS`.
+   The function signature is::
+
+      PyObject *PyCFunctionWithKeywords(PyObject *self,
+                                        PyObject *args,
+                                        PyObject *kwargs);
 
 
 .. c:type:: _PyCFunctionFast
 
    Type of the functions used to implement Python callables in C
    with signature :const:`METH_FASTCALL`.
+   The function signature is::
 
+      PyObject *_PyCFunctionFast(PyObject *self,
+                                 PyObject *const *args,
+                                 Py_ssize_t nargs);
 
 .. c:type:: _PyCFunctionFastWithKeywords
 
    Type of the functions used to implement Python callables in C
    with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
+   The function signature is::
+
+      PyObject *_PyCFunctionFastWithKeywords(PyObject *self,
+                                             PyObject *const *args,
+                                             Py_ssize_t nargs,
+                                             PyObject *kwnames);
+
+.. c:type:: PyCMethod
+
+   Type of the functions used to implement Python callables in C
+   with signature :const:`METH_METHOD | METH_FASTCALL | METH_KEYWORDS`.
+   The function signature is::
+
+      PyObject *PyCMethod(PyObject *self,
+                          PyTypeObject *defining_class,
+                          PyObject *const *args,
+                          Py_ssize_t nargs,
+                          PyObject *kwnames)
+
+   .. versionadded:: 3.9
 
 
 .. c:type:: PyMethodDef
@@ -151,24 +220,22 @@
    +------------------+---------------+-------------------------------+
 
 The :attr:`ml_meth` is a C function pointer.  The functions may be of different
-types, but they always return :c:type:`PyObject\*`.  If the function is not of
+types, but they always return :c:type:`PyObject*`.  If the function is not of
 the :c:type:`PyCFunction`, the compiler will require a cast in the method table.
 Even though :c:type:`PyCFunction` defines the first parameter as
-:c:type:`PyObject\*`, it is common that the method implementation uses the
+:c:type:`PyObject*`, it is common that the method implementation uses the
 specific C type of the *self* object.
 
 The :attr:`ml_flags` field is a bitfield which can include the following flags.
 The individual flags indicate either a calling convention or a binding
 convention.
 
-There are four basic calling conventions for positional arguments
-and two of them can be combined with :const:`METH_KEYWORDS` to support
-also keyword arguments.  So there are a total of 6 calling conventions:
+There are these calling conventions:
 
 .. data:: METH_VARARGS
 
    This is the typical calling convention, where the methods have the type
-   :c:type:`PyCFunction`. The function expects two :c:type:`PyObject\*` values.
+   :c:type:`PyCFunction`. The function expects two :c:type:`PyObject*` values.
    The first one is the *self* object for methods; for module functions, it is
    the module object.  The second parameter (often called *args*) is a tuple
    object representing all arguments. This parameter is typically processed
@@ -189,7 +256,7 @@
    Fast calling convention supporting only positional arguments.
    The methods have the type :c:type:`_PyCFunctionFast`.
    The first parameter is *self*, the second parameter is a C array
-   of :c:type:`PyObject\*` values indicating the arguments and the third
+   of :c:type:`PyObject*` values indicating the arguments and the third
    parameter is the number of arguments (the length of the array).
 
    This is not part of the :ref:`limited API <stable>`.
@@ -201,9 +268,11 @@
 
    Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
    with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
-   Keyword arguments are passed the same way as in the vectorcall protocol:
-   there is an additional fourth :c:type:`PyObject\*` parameter
+   Keyword arguments are passed the same way as in the
+   :ref:`vectorcall protocol <vectorcall>`:
+   there is an additional fourth :c:type:`PyObject*` parameter
    which is a tuple representing the names of the keyword arguments
+   (which are guaranteed to be strings)
    or possibly ``NULL`` if there are no keywords.  The values of the keyword
    arguments are stored in the *args* array, after the positional arguments.
 
@@ -212,6 +281,19 @@
    .. versionadded:: 3.7
 
 
+.. data:: METH_METHOD | METH_FASTCALL | METH_KEYWORDS
+
+   Extension of :const:`METH_FASTCALL | METH_KEYWORDS` supporting the *defining
+   class*, that is, the class that contains the method in question.
+   The defining class might be a superclass of ``Py_TYPE(self)``.
+
+   The method needs to be of type :c:type:`PyCMethod`, the same as for
+   ``METH_FASTCALL | METH_KEYWORDS`` with ``defining_class`` argument added after
+   ``self``.
+
+   .. versionadded:: 3.9
+
+
 .. data:: METH_NOARGS
 
    Methods without parameters don't need to check whether arguments are given if
@@ -226,7 +308,7 @@
    Methods with a single object argument can be listed with the :const:`METH_O`
    flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``"O"`` argument.
    They have the type :c:type:`PyCFunction`, with the *self* parameter, and a
-   :c:type:`PyObject\*` parameter representing the single argument.
+   :c:type:`PyObject*` parameter representing the single argument.
 
 
 These two constants are not used to indicate the calling convention but the
@@ -270,6 +352,9 @@
    than wrapper object calls.
 
 
+Accessing attributes of extension types
+---------------------------------------
+
 .. c:type:: PyMemberDef
 
    Structure which describes an attribute of a type which corresponds to a C
@@ -335,6 +420,21 @@
    Only :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX`
    members can be deleted.  (They are set to ``NULL``).
 
+   .. _pymemberdef-offsets:
+
+   Heap allocated types (created using :c:func:`PyType_FromSpec` or similar),
+   ``PyMemberDef`` may contain definitions for the special members
+   ``__dictoffset__``, ``__weaklistoffset__`` and ``__vectorcalloffset__``,
+   corresponding to
+   :c:member:`~PyTypeObject.tp_dictoffset`,
+   :c:member:`~PyTypeObject.tp_weaklistoffset` and
+   :c:member:`~PyTypeObject.tp_vectorcall_offset` in type objects.
+   These must be defined with ``T_PYSSIZET`` and ``READONLY``, for example::
+
+      static PyMemberDef spam_type_members[] = {
+          {"__dictoffset__", T_PYSSIZET, offsetof(Spam_object, dict), READONLY},
+          {NULL}  /* Sentinel */
+      };
 
 .. c:type:: PyGetSetDef
 
@@ -359,7 +459,7 @@
    |             |                  | getter and setter                 |
    +-------------+------------------+-----------------------------------+
 
-   The ``get`` function takes one :c:type:`PyObject\*` parameter (the
+   The ``get`` function takes one :c:type:`PyObject*` parameter (the
    instance) and a function pointer (the associated ``closure``)::
 
       typedef PyObject *(*getter)(PyObject *, void *);
@@ -367,7 +467,7 @@
    It should return a new reference on success or ``NULL`` with a set exception
    on failure.
 
-   ``set`` functions take two :c:type:`PyObject\*` parameters (the instance and
+   ``set`` functions take two :c:type:`PyObject*` parameters (the instance and
    the value to be set) and a function pointer (the associated ``closure``)::
 
       typedef int (*setter)(PyObject *, PyObject *, void *);
diff --git a/Doc/c-api/sys.rst b/Doc/c-api/sys.rst
index c851ff6..9ac9179 100644
--- a/Doc/c-api/sys.rst
+++ b/Doc/c-api/sys.rst
@@ -388,6 +388,13 @@
    function :c:func:`abort` is called which will attempt to produce a :file:`core`
    file.
 
+   The ``Py_FatalError()`` function is replaced with a macro which logs
+   automatically the name of the current function, unless the
+   ``Py_LIMITED_API`` macro is defined.
+
+   .. versionchanged:: 3.9
+      Log the function name automatically.
+
 
 .. c:function:: void Py_Exit(int status)
 
diff --git a/Doc/c-api/tuple.rst b/Doc/c-api/tuple.rst
index 25df397..bf751e44 100644
--- a/Doc/c-api/tuple.rst
+++ b/Doc/c-api/tuple.rst
@@ -111,11 +111,6 @@
    raises :exc:`MemoryError` or :exc:`SystemError`.
 
 
-.. c:function:: int PyTuple_ClearFreeList()
-
-   Clear the free list. Return the total number of freed items.
-
-
 Struct Sequence Objects
 -----------------------
 
@@ -166,7 +161,7 @@
 .. c:type:: PyStructSequence_Field
 
    Describes a field of a struct sequence. As a struct sequence is modeled as a
-   tuple, all fields are typed as :c:type:`PyObject\*`.  The index in the
+   tuple, all fields are typed as :c:type:`PyObject*`.  The index in the
    :attr:`fields` array of the :c:type:`PyStructSequence_Desc` determines which
    field of the struct sequence is described.
 
@@ -182,10 +177,13 @@
    +-----------+------------------+-----------------------------------------+
 
 
-.. c:var:: char* PyStructSequence_UnnamedField
+.. c:var:: const char * const PyStructSequence_UnnamedField
 
    Special value for a field name to leave it unnamed.
 
+   .. versionchanged:: 3.9
+      The type was changed from ``char *``.
+
 
 .. c:function:: PyObject* PyStructSequence_New(PyTypeObject *type)
 
diff --git a/Doc/c-api/type.rst b/Doc/c-api/type.rst
index dcdec53..822360e 100644
--- a/Doc/c-api/type.rst
+++ b/Doc/c-api/type.rst
@@ -21,14 +21,14 @@
 
 .. c:function:: int PyType_Check(PyObject *o)
 
-   Return true if the object *o* is a type object, including instances of types
-   derived from the standard type object.  Return false in all other cases.
+   Return non-zero if the object *o* is a type object, including instances of
+   types derived from the standard type object.  Return 0 in all other cases.
 
 
 .. c:function:: int PyType_CheckExact(PyObject *o)
 
-   Return true if the object *o* is a type object, but not a subtype of the
-   standard type object.  Return false in all other cases.
+   Return non-zero if the object *o* is a type object, but not a subtype of the
+   standard type object.  Return 0 in all other cases.
 
 
 .. c:function:: unsigned int PyType_ClearCache()
@@ -57,8 +57,8 @@
 
 .. c:function:: int PyType_HasFeature(PyTypeObject *o, int feature)
 
-   Return true if the type object *o* sets the feature *feature*.  Type features
-   are denoted by single bit flags.
+   Return non-zero if the type object *o* sets the feature *feature*.
+   Type features are denoted by single bit flags.
 
 
 .. c:function:: int PyType_IS_GC(PyTypeObject *o)
@@ -109,6 +109,37 @@
 
    .. versionadded:: 3.4
 
+.. c:function:: PyObject* PyType_GetModule(PyTypeObject *type)
+
+   Return the module object associated with the given type when the type was
+   created using :c:func:`PyType_FromModuleAndSpec`.
+
+   If no module is associated with the given type, sets :py:class:`TypeError`
+   and returns ``NULL``.
+
+   This function is usually used to get the module in which a method is defined.
+   Note that in such a method, ``PyType_GetModule(Py_TYPE(self))``
+   may not return the intended result.
+   ``Py_TYPE(self)`` may be a *subclass* of the intended class, and subclasses
+   are not necessarily defined in the same module as their superclass.
+   See :c:type:`PyCMethod` to get the class that defines the method.
+
+   .. versionadded:: 3.9
+
+.. c:function:: void* PyType_GetModuleState(PyTypeObject *type)
+
+   Return the state of the module object associated with the given type.
+   This is a shortcut for calling :c:func:`PyModule_GetState()` on the result
+   of :c:func:`PyType_GetModule`.
+
+   If no module is associated with the given type, sets :py:class:`TypeError`
+   and returns ``NULL``.
+
+   If the *type* has an associated module but its state is ``NULL``,
+   returns ``NULL`` without setting an exception.
+
+   .. versionadded:: 3.9
+
 
 Creating Heap-Allocated Types
 .............................
@@ -116,7 +147,7 @@
 The following functions and structs are used to create
 :ref:`heap types <heap-types>`.
 
-.. c:function:: PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
+.. c:function:: PyObject* PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)
 
    Creates and returns a heap type object from the *spec*
    (:const:`Py_TPFLAGS_HEAPTYPE`).
@@ -124,11 +155,25 @@
    If *bases* is a tuple, the created heap type contains all types contained
    in it as base types.
 
-   If *bases* is ``NULL``, the *Py_tp_base* slot is used instead.
+   If *bases* is ``NULL``, the *Py_tp_bases* slot is used instead.
+   If that also is ``NULL``, the *Py_tp_base* slot is used instead.
    If that also is ``NULL``, the new type derives from :class:`object`.
 
+   The *module* argument can be used to record the module in which the new
+   class is defined. It must be a module object or ``NULL``.
+   If not ``NULL``, the module is associated with the new type and can later be
+   retreived with :c:func:`PyType_GetModule`.
+   The associated module is not inherited by subclasses; it must be specified
+   for each class individually.
+
    This function calls :c:func:`PyType_Ready` on the new type.
 
+   .. versionadded:: 3.9
+
+.. c:function:: PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
+
+   Equivalent to ``PyType_FromModuleAndSpec(NULL, spec, bases)``.
+
    .. versionadded:: 3.3
 
 .. c:function:: PyObject* PyType_FromSpec(PyType_Spec *spec)
@@ -181,23 +226,37 @@
       * ``Py_nb_add`` to set :c:member:`PyNumberMethods.nb_add`
       * ``Py_sq_length`` to set :c:member:`PySequenceMethods.sq_length`
 
-      The following fields cannot be set using :c:type:`PyType_Spec` and :c:type:`PyType_Slot`:
+      The following fields cannot be set at all using :c:type:`PyType_Spec` and
+      :c:type:`PyType_Slot`:
 
       * :c:member:`~PyTypeObject.tp_dict`
       * :c:member:`~PyTypeObject.tp_mro`
       * :c:member:`~PyTypeObject.tp_cache`
       * :c:member:`~PyTypeObject.tp_subclasses`
       * :c:member:`~PyTypeObject.tp_weaklist`
-      * :c:member:`~PyTypeObject.tp_print`
+      * :c:member:`~PyTypeObject.tp_vectorcall`
       * :c:member:`~PyTypeObject.tp_weaklistoffset`
+        (see :ref:`PyMemberDef <pymemberdef-offsets>`)
       * :c:member:`~PyTypeObject.tp_dictoffset`
+        (see :ref:`PyMemberDef <pymemberdef-offsets>`)
+      * :c:member:`~PyTypeObject.tp_vectorcall_offset`
+        (see :ref:`PyMemberDef <pymemberdef-offsets>`)
+
+      The following fields cannot be set using :c:type:`PyType_Spec` and
+      :c:type:`PyType_Slot` under the limited API:
+
       * :c:member:`~PyBufferProcs.bf_getbuffer`
       * :c:member:`~PyBufferProcs.bf_releasebuffer`
 
-      Setting :c:data:`Py_tp_bases` may be problematic on some platforms.
+      Setting :c:data:`Py_tp_bases` or :c:data:`Py_tp_base` may be
+      problematic on some platforms.
       To avoid issues, use the *bases* argument of
       :py:func:`PyType_FromSpecWithBases` instead.
 
+     .. versionchanged:: 3.9
+
+        Slots in :c:type:`PyBufferProcs` in may be set in the unlimited API.
+
    .. c:member:: void *PyType_Slot.pfunc
 
       The desired value of the slot. In most cases, this is a pointer
diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
index 163f599..ddcb8ae 100644
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -49,7 +49,7 @@
    +------------------------------------------------+-----------------------------------+-------------------+---+---+---+---+
    | :c:member:`~PyTypeObject.tp_dealloc`           | :c:type:`destructor`              |                   | X | X |   | X |
    +------------------------------------------------+-----------------------------------+-------------------+---+---+---+---+
-   | :c:member:`~PyTypeObject.tp_vectorcall_offset` | Py_ssize_t                        |                   |   |   |   | ? |
+   | :c:member:`~PyTypeObject.tp_vectorcall_offset` | Py_ssize_t                        |                   |   | X |   | X |
    +------------------------------------------------+-----------------------------------+-------------------+---+---+---+---+
    | (:c:member:`~PyTypeObject.tp_getattr`)         | :c:type:`getattrfunc`             | __getattribute__, |   |   |   | G |
    |                                                |                                   | __getattr__       |   |   |   |   |
@@ -145,15 +145,8 @@
    +------------------------------------------------+-----------------------------------+-------------------+---+---+---+---+
    | :c:member:`~PyTypeObject.tp_finalize`          | :c:type:`destructor`              | __del__           |   |   |   | X |
    +------------------------------------------------+-----------------------------------+-------------------+---+---+---+---+
-
-If :const:`COUNT_ALLOCS` is defined then the following (internal-only)
-fields exist as well:
-
-* :c:member:`~PyTypeObject.tp_allocs`
-* :c:member:`~PyTypeObject.tp_frees`
-* :c:member:`~PyTypeObject.tp_maxalloc`
-* :c:member:`~PyTypeObject.tp_prev`
-* :c:member:`~PyTypeObject.tp_next`
+   | :c:member:`~PyTypeObject.tp_vectorcall`        | :c:type:`vectorcallfunc`          |                   |   |   |   |   |
+   +------------------------------------------------+-----------------------------------+-------------------+---+---+---+---+
 
 .. [#slots]
    A slot name in parentheses indicates it is (effectively) deprecated.
@@ -180,7 +173,7 @@
 
    .. code-block:: none
 
-      X - type slot is inherited via PyType_Ready if defined with a NULL value
+      X - type slot is inherited via *PyType_Ready* if defined with a *NULL* value
       % - the slots of the sub-struct are inherited individually
       G - inherited, but only in combination with other slots; see the slot's description
       ? - it's complicated; see the slot's description
@@ -687,42 +680,29 @@
 .. c:member:: Py_ssize_t PyTypeObject.tp_vectorcall_offset
 
    An optional offset to a per-instance function that implements calling
-   the object using the *vectorcall* protocol, a more efficient alternative
+   the object using the :ref:`vectorcall protocol <vectorcall>`,
+   a more efficient alternative
    of the simpler :c:member:`~PyTypeObject.tp_call`.
 
-   This field is only used if the flag :const:`_Py_TPFLAGS_HAVE_VECTORCALL`
+   This field is only used if the flag :const:`Py_TPFLAGS_HAVE_VECTORCALL`
    is set. If so, this must be a positive integer containing the offset in the
    instance of a :c:type:`vectorcallfunc` pointer.
-   The signature is the same as for :c:func:`_PyObject_Vectorcall`::
 
-        PyObject *vectorcallfunc(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)
-
-   The *vectorcallfunc* pointer may be zero, in which case the instance behaves
-   as if :const:`_Py_TPFLAGS_HAVE_VECTORCALL` was not set: calling the instance
+   The *vectorcallfunc* pointer may be ``NULL``, in which case the instance behaves
+   as if :const:`Py_TPFLAGS_HAVE_VECTORCALL` was not set: calling the instance
    falls back to :c:member:`~PyTypeObject.tp_call`.
 
-   Any class that sets ``_Py_TPFLAGS_HAVE_VECTORCALL`` must also set
+   Any class that sets ``Py_TPFLAGS_HAVE_VECTORCALL`` must also set
    :c:member:`~PyTypeObject.tp_call` and make sure its behaviour is consistent
    with the *vectorcallfunc* function.
-   This can be done by setting *tp_call* to ``PyVectorcall_Call``:
+   This can be done by setting *tp_call* to :c:func:`PyVectorcall_Call`.
 
-   .. c:function:: PyObject *PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict)
-
-      Call *callable*'s *vectorcallfunc* with positional and keyword
-      arguments given in a tuple and dict, respectively.
-
-      This function is intended to be used in the ``tp_call`` slot.
-      It does not fall back to ``tp_call`` and it currently does not check the
-      ``_Py_TPFLAGS_HAVE_VECTORCALL`` flag.
-      To call an object, use one of the :c:func:`PyObject_Call <PyObject_Call>`
-      functions instead.
-
-   .. note::
+   .. warning::
 
       It is not recommended for :ref:`heap types <heap-types>` to implement
       the vectorcall protocol.
-      When a user sets ``__call__`` in Python code, only ``tp_call`` is updated,
-      possibly making it inconsistent with the vectorcall function.
+      When a user sets :attr:`__call__` in Python code, only *tp_call* is updated,
+      likely making it inconsistent with the vectorcall function.
 
    .. note::
 
@@ -732,18 +712,19 @@
 
    .. versionchanged:: 3.8
 
-      This slot was used for print formatting in Python 2.x.
-      In Python 3.0 to 3.7, it was reserved and named ``tp_print``.
+      Before version 3.8, this slot was named ``tp_print``.
+      In Python 2.x, it was used for printing to a file.
+      In Python 3.0 to 3.7, it was unused.
 
    **Inheritance:**
 
-   This field is inherited by subtypes together with
-   :c:member:`~PyTypeObject.tp_call`: a subtype inherits
-   :c:member:`~PyTypeObject.tp_vectorcall_offset` from its base type when
-   the subtype’s :c:member:`~PyTypeObject.tp_call` is ``NULL``.
-
-   Note that `heap types`_ (including subclasses defined in Python) do not
-   inherit the :const:`_Py_TPFLAGS_HAVE_VECTORCALL` flag.
+   This field is always inherited.
+   However, the :const:`Py_TPFLAGS_HAVE_VECTORCALL` flag is not
+   always inherited. If it's not, then the subclass won't use
+   :ref:`vectorcall <vectorcall>`, except when
+   :c:func:`PyVectorcall_Call` is explicitly called.
+   This is in particular the case for `heap types`_
+   (including subclasses defined in Python).
 
 
 .. c:member:: getattrfunc PyTypeObject.tp_getattr
@@ -965,7 +946,7 @@
 
    The signature is the same as for :c:func:`PyObject_SetAttr`::
 
-      PyObject *tp_setattro(PyObject *self, PyObject *attr, PyObject *value);
+      int tp_setattro(PyObject *self, PyObject *attr, PyObject *value);
 
    In addition, setting *value* to ``NULL`` to delete an attribute must be
    supported.  It is usually convenient to set this field to
@@ -1171,27 +1152,20 @@
          :c:member:`~PyTypeObject.tp_finalize` slot is always present in the
          type structure.
 
-   .. data:: _Py_TPFLAGS_HAVE_VECTORCALL
 
-      This bit is set when the class implements the vectorcall protocol.
+   .. data:: Py_TPFLAGS_HAVE_VECTORCALL
+
+      This bit is set when the class implements
+      the :ref:`vectorcall protocol <vectorcall>`.
       See :c:member:`~PyTypeObject.tp_vectorcall_offset` for details.
 
       **Inheritance:**
 
-      This bit is set on *static* subtypes if ``tp_flags`` is not overridden:
-      a subtype inherits ``_Py_TPFLAGS_HAVE_VECTORCALL`` from its base type
-      when the subtype’s :c:member:`~PyTypeObject.tp_call` is ``NULL``
-      and the subtype's ``Py_TPFLAGS_HEAPTYPE`` is not set.
+      This bit is inherited for *static* subtypes if
+      :c:member:`~PyTypeObject.tp_call` is also inherited.
+      `Heap types`_ do not inherit ``Py_TPFLAGS_HAVE_VECTORCALL``.
 
-      `Heap types`_ do not inherit ``_Py_TPFLAGS_HAVE_VECTORCALL``.
-
-      .. note::
-
-         This flag is provisional and expected to become public in Python 3.9,
-         with a different name and, possibly, changed semantics.
-         If you use vectorcall, plan for updating your code for Python 3.9.
-
-      .. versionadded:: 3.8
+      .. versionadded:: 3.9
 
 
 .. c:member:: const char* PyTypeObject.tp_doc
@@ -1249,11 +1223,25 @@
        but the instance has no strong reference to the elements inside it, as they
        are allowed to be removed even if the instance is still alive).
 
-
    Note that :c:func:`Py_VISIT` requires the *visit* and *arg* parameters to
    :c:func:`local_traverse` to have these specific names; don't name them just
    anything.
 
+   Heap-allocated types (:const:`Py_TPFLAGS_HEAPTYPE`, such as those created
+   with :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their
+   type. Their traversal function must therefore either visit
+   :c:func:`Py_TYPE(self) <Py_TYPE>`, or delegate this responsibility by
+   calling ``tp_traverse`` of another heap-allocated type (such as a
+   heap-allocated superclass).
+   If they do not, the type object may not be garbage-collected.
+
+   .. versionchanged:: 3.9
+
+      Heap-allocated types are expected to visit ``Py_TYPE(self)`` in
+      ``tp_traverse``.  In earlier versions of Python, due to
+      `bug 40217 <https://bugs.python.org/issue40217>`_, doing this
+      may lead to crashes in subclasses.
+
    **Inheritance:**
 
    Group: :const:`Py_TPFLAGS_HAVE_GC`, :attr:`tp_traverse`, :attr:`tp_clear`
@@ -1360,7 +1348,7 @@
 
    The following macro is defined to ease writing rich comparison functions:
 
-   .. c:function:: PyObject \*Py_RETURN_RICHCOMPARE(VAL_A, VAL_B, int op)
+   .. c:macro:: Py_RETURN_RICHCOMPARE(VAL_A, VAL_B, op)
 
       Return ``Py_True`` or ``Py_False`` from the function, depending on the
       result of a comparison.
@@ -1398,7 +1386,7 @@
    than zero and contains the offset in the instance structure of the weak
    reference list head (ignoring the GC header, if present); this offset is used by
    :c:func:`PyObject_ClearWeakRefs` and the :c:func:`PyWeakref_\*` functions.  The
-   instance structure needs to include a field of type :c:type:`PyObject\*` which is
+   instance structure needs to include a field of type :c:type:`PyObject*` which is
    initialized to ``NULL``.
 
    Do not confuse this field with :c:member:`~PyTypeObject.tp_weaklist`; that is the list head for
@@ -1727,9 +1715,9 @@
 
       PyObject *tp_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds);
 
-   The subtype argument is the type of the object being created; the *args* and
+   The *subtype* argument is the type of the object being created; the *args* and
    *kwds* arguments represent positional and keyword arguments of the call to the
-   type.  Note that subtype doesn't have to equal the type whose :c:member:`~PyTypeObject.tp_new`
+   type.  Note that *subtype* doesn't have to equal the type whose :c:member:`~PyTypeObject.tp_new`
    function is called; it may be a subtype of that type (but not an unrelated
    type).
 
@@ -1912,30 +1900,20 @@
    .. seealso:: "Safe object finalization" (:pep:`442`)
 
 
-The remaining fields are only defined if the feature test macro
-:const:`COUNT_ALLOCS` is defined, and are for internal use only. They are
-documented here for completeness.  None of these fields are inherited by
-subtypes.
+.. c:member:: vectorcallfunc PyTypeObject.tp_vectorcall
 
-.. c:member:: Py_ssize_t PyTypeObject.tp_allocs
+   Vectorcall function to use for calls of this type object.
+   In other words, it is used to implement
+   :ref:`vectorcall <vectorcall>` for ``type.__call__``.
+   If ``tp_vectorcall`` is ``NULL``, the default call implementation
+   using :attr:`__new__` and :attr:`__init__` is used.
 
-   Number of allocations.
+   **Inheritance:**
 
-.. c:member:: Py_ssize_t PyTypeObject.tp_frees
+   This field is never inherited.
 
-   Number of frees.
+   .. versionadded:: 3.9 (the field exists since 3.8 but it's only used since 3.9)
 
-.. c:member:: Py_ssize_t PyTypeObject.tp_maxalloc
-
-   Maximum simultaneously allocated objects.
-
-.. c:member:: PyTypeObject* PyTypeObject.tp_prev
-
-   Pointer to the previous type object with a non-zero :c:member:`~PyTypeObject.tp_allocs` field.
-
-.. c:member:: PyTypeObject* PyTypeObject.tp_next
-
-   Pointer to the next type object with a non-zero :c:member:`~PyTypeObject.tp_allocs` field.
 
 Also, note that, in a garbage collected Python, :c:member:`~PyTypeObject.tp_dealloc` may be called from
 any Python thread, not just the thread which created the object (if the object
@@ -2381,14 +2359,6 @@
 
 .. c:type:: void (*destructor)(PyObject *)
 
-.. c:type:: PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)
-
-   See :c:member:`~PyTypeObject.tp_vectorcall_offset`.
-
-   Arguments to ``vectorcallfunc`` are the same as for :c:func:`_PyObject_Vectorcall`.
-
-   .. versionadded:: 3.8
-
 .. c:type:: void (*freefunc)(void *)
 
    See :c:member:`~PyTypeObject.tp_free`.
diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst
index b261efe..8a312ae 100644
--- a/Doc/c-api/unicode.rst
+++ b/Doc/c-api/unicode.rst
@@ -34,6 +34,11 @@
   :c:type:`Py_UNICODE*` representation; you will have to call
   :c:func:`PyUnicode_READY` on them before calling any other API.
 
+.. note::
+   The "legacy" Unicode object will be removed in Python 3.12 with deprecated
+   APIs. All Unicode objects will be "canonical" since then. See :pep:`623`
+   for more information.
+
 
 Unicode Type
 """"""""""""
@@ -107,6 +112,9 @@
 
    .. versionadded:: 3.3
 
+   .. deprecated-removed:: 3.10 3.12
+      This API will be removed with :c:func:`PyUnicode_FromUnicode`.
+
 
 .. c:function:: Py_ssize_t PyUnicode_GET_LENGTH(PyObject *o)
 
@@ -138,6 +146,9 @@
 
    .. versionadded:: 3.3
 
+   .. deprecated-removed:: 3.10 3.12
+      ``PyUnicode_WCHAR_KIND`` is deprecated.
+
 
 .. c:function:: int PyUnicode_KIND(PyObject *o)
 
@@ -188,7 +199,7 @@
    .. versionadded:: 3.3
 
 
-.. c:function:: PyUnicode_MAX_CHAR_VALUE(PyObject *o)
+.. c:macro:: PyUnicode_MAX_CHAR_VALUE(o)
 
    Return the maximum code point that is suitable for creating another string
    based on *o*, which must be in the "canonical" representation.  This is
@@ -197,18 +208,13 @@
    .. versionadded:: 3.3
 
 
-.. c:function:: int PyUnicode_ClearFreeList()
-
-   Clear the free list. Return the total number of freed items.
-
-
 .. c:function:: Py_ssize_t PyUnicode_GET_SIZE(PyObject *o)
 
    Return the size of the deprecated :c:type:`Py_UNICODE` representation, in
    code units (this includes surrogate pairs as 2 units).  *o* has to be a
    Unicode object (not checked).
 
-   .. deprecated-removed:: 3.3 4.0
+   .. deprecated-removed:: 3.3 3.12
       Part of the old-style Unicode API, please migrate to using
       :c:func:`PyUnicode_GET_LENGTH`.
 
@@ -218,7 +224,7 @@
    Return the size of the deprecated :c:type:`Py_UNICODE` representation in
    bytes.  *o* has to be a Unicode object (not checked).
 
-   .. deprecated-removed:: 3.3 4.0
+   .. deprecated-removed:: 3.3 3.12
       Part of the old-style Unicode API, please migrate to using
       :c:func:`PyUnicode_GET_LENGTH`.
 
@@ -240,11 +246,21 @@
       code to use the new :c:func:`PyUnicode_nBYTE_DATA` macros or use
       :c:func:`PyUnicode_WRITE` or :c:func:`PyUnicode_READ`.
 
-   .. deprecated-removed:: 3.3 4.0
+   .. deprecated-removed:: 3.3 3.12
       Part of the old-style Unicode API, please migrate to using the
       :c:func:`PyUnicode_nBYTE_DATA` family of macros.
 
 
+.. c:function:: int PyUnicode_IsIdentifier(PyObject *o)
+
+   Return ``1`` if the string is a valid identifier according to the language
+   definition, section :ref:`identifiers`. Return ``0`` otherwise.
+
+   .. versionchanged:: 3.9
+      The function does not call :c:func:`Py_FatalError` anymore if the string
+      is not ready.
+
+
 Unicode Character Properties
 """"""""""""""""""""""""""""
 
@@ -682,8 +698,10 @@
    string content has been filled before using any of the access macros such as
    :c:func:`PyUnicode_KIND`.
 
-   Please migrate to using :c:func:`PyUnicode_FromKindAndData`,
-   :c:func:`PyUnicode_FromWideChar` or :c:func:`PyUnicode_New`.
+   .. deprecated-removed:: 3.3 3.12
+      Part of the old-style Unicode API, please migrate to using
+      :c:func:`PyUnicode_FromKindAndData`, :c:func:`PyUnicode_FromWideChar`, or
+      :c:func:`PyUnicode_New`.
 
 
 .. c:function:: Py_UNICODE* PyUnicode_AsUnicode(PyObject *unicode)
@@ -696,9 +714,10 @@
    embedded null code points, which would cause the string to be truncated when
    used in most C functions.
 
-   Please migrate to using :c:func:`PyUnicode_AsUCS4`,
-   :c:func:`PyUnicode_AsWideChar`, :c:func:`PyUnicode_ReadChar` or similar new
-   APIs.
+   .. deprecated-removed:: 3.3 3.12
+      Part of the old-style Unicode API, please migrate to using
+      :c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsWideChar`,
+      :c:func:`PyUnicode_ReadChar` or similar new APIs.
 
    .. deprecated-removed:: 3.3 3.10
 
@@ -720,6 +739,11 @@
 
    .. versionadded:: 3.3
 
+   .. deprecated-removed:: 3.3 3.12
+      Part of the old-style Unicode API, please migrate to using
+      :c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsWideChar`,
+      :c:func:`PyUnicode_ReadChar` or similar new APIs.
+
 
 .. c:function:: Py_UNICODE* PyUnicode_AsUnicodeCopy(PyObject *unicode)
 
@@ -740,7 +764,9 @@
    Return the size of the deprecated :c:type:`Py_UNICODE` representation, in
    code units (this includes surrogate pairs as 2 units).
 
-   Please migrate to using :c:func:`PyUnicode_GetLength`.
+   .. deprecated-removed:: 3.3 3.12
+      Part of the old-style Unicode API, please migrate to using
+      :c:func:`PyUnicode_GET_LENGTH`.
 
 
 .. c:function:: PyObject* PyUnicode_FromObject(PyObject *obj)
@@ -985,7 +1011,7 @@
 constructor.
 
 Setting encoding to ``NULL`` causes the default encoding to be used
-which is ASCII.  The file system calls should use
+which is UTF-8.  The file system calls should use
 :c:func:`PyUnicode_FSConverter` for encoding file names. This uses the
 variable :c:data:`Py_FileSystemDefaultEncoding` internally. This
 variable should be treated as read-only: on some systems, it will be a
@@ -1477,17 +1503,21 @@
 
 The following codec API is special in that maps Unicode to Unicode.
 
-.. c:function:: PyObject* PyUnicode_Translate(PyObject *unicode, \
-                              PyObject *mapping, const char *errors)
+.. c:function:: PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)
 
-   Translate a Unicode object using the given *mapping* object and return the
-   resulting Unicode object.  Return ``NULL`` if an exception was raised by the
+   Translate a string by applying a character mapping table to it and return the
+   resulting Unicode object. Return ``NULL`` if an exception was raised by the
    codec.
 
-   The *mapping* object must map Unicode ordinal integers to Unicode strings,
-   integers (which are then interpreted as Unicode ordinals) or ``None``
-   (causing deletion of the character).  Unmapped character ordinals (ones
-   which cause a :exc:`LookupError`) are left untouched and are copied as-is.
+   The mapping table must map Unicode ordinal integers to Unicode ordinal integers
+   or ``None`` (causing deletion of the character).
+
+   Mapping tables need only provide the :meth:`__getitem__` interface; dictionaries
+   and sequences work well.  Unmapped character ordinals (ones which cause a
+   :exc:`LookupError`) are left untouched and are copied as-is.
+
+   *errors* has the usual meaning for codecs. It may be ``NULL`` which indicates to
+   use the default error handling.
 
 
 .. c:function:: PyObject* PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, \
@@ -1590,23 +1620,6 @@
    characters are not included in the resulting strings.
 
 
-.. c:function:: PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, \
-                              const char *errors)
-
-   Translate a string by applying a character mapping table to it and return the
-   resulting Unicode object.
-
-   The mapping table must map Unicode ordinal integers to Unicode ordinal integers
-   or ``None`` (causing deletion of the character).
-
-   Mapping tables need only provide the :meth:`__getitem__` interface; dictionaries
-   and sequences work well.  Unmapped character ordinals (ones which cause a
-   :exc:`LookupError`) are left untouched and are copied as-is.
-
-   *errors* has the usual meaning for codecs. It may be ``NULL`` which indicates to
-   use the default error handling.
-
-
 .. c:function:: PyObject* PyUnicode_Join(PyObject *separator, PyObject *seq)
 
    Join a sequence of strings using the given *separator* and return the resulting
diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst
index 98cea52..551846e 100644
--- a/Doc/c-api/veryhigh.rst
+++ b/Doc/c-api/veryhigh.rst
@@ -16,11 +16,11 @@
 :const:`Py_file_input`, and :const:`Py_single_input`.  These are described
 following the functions which accept them as parameters.
 
-Note also that several of these functions take :c:type:`FILE\*` parameters.  One
+Note also that several of these functions take :c:type:`FILE*` parameters.  One
 particular issue which needs to be handled carefully is that the :c:type:`FILE`
 structure for different C libraries can be different and incompatible.  Under
 Windows (at least), it is possible for dynamically linked extensions to actually
-use different libraries, so care should be taken that :c:type:`FILE\*` parameters
+use different libraries, so care should be taken that :c:type:`FILE*` parameters
 are only passed to these functions if it is certain that they were created by
 the same library that the Python runtime is using.
 
@@ -117,7 +117,7 @@
    closed before PyRun_SimpleFileExFlags returns.
 
    .. note::
-      On Windows, *fp* should be opened as binary mode (e.g. ``fopen(filename, "rb")``.
+      On Windows, *fp* should be opened as binary mode (e.g. ``fopen(filename, "rb")``).
       Otherwise, Python may not handle script file with LF line ending correctly.
 
 
@@ -193,6 +193,8 @@
    :c:func:`PyParser_SimpleParseStringFlagsFilename` below, leaving  *filename* set
    to ``NULL`` and *flags* set to ``0``.
 
+   .. deprecated-removed:: 3.9 3.10
+
 
 .. c:function:: struct _node* PyParser_SimpleParseStringFlags( const char *str, int start, int flags)
 
@@ -200,6 +202,8 @@
    :c:func:`PyParser_SimpleParseStringFlagsFilename` below, leaving  *filename* set
    to ``NULL``.
 
+   .. deprecated-removed:: 3.9 3.10
+
 
 .. c:function:: struct _node* PyParser_SimpleParseStringFlagsFilename( const char *str, const char *filename, int start, int flags)
 
@@ -209,18 +213,24 @@
    many times. *filename* is decoded from the filesystem encoding
    (:func:`sys.getfilesystemencoding`).
 
+   .. deprecated-removed:: 3.9 3.10
+
 
 .. c:function:: struct _node* PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
 
    This is a simplified interface to :c:func:`PyParser_SimpleParseFileFlags` below,
    leaving *flags* set to ``0``.
 
+   .. deprecated-removed:: 3.9 3.10
+
 
 .. c:function:: struct _node* PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
 
    Similar to :c:func:`PyParser_SimpleParseStringFlagsFilename`, but the Python
    source code is read from *fp* instead of an in-memory string.
 
+   .. deprecated-removed:: 3.9 3.10
+
 
 .. c:function:: PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
 
diff --git a/Doc/conf.py b/Doc/conf.py
index abaa760..079d177 100644
--- a/Doc/conf.py
+++ b/Doc/conf.py
@@ -14,7 +14,8 @@
 # ---------------------
 
 extensions = ['sphinx.ext.coverage', 'sphinx.ext.doctest',
-              'pyspecific', 'c_annotations', 'escape4chm']
+              'pyspecific', 'c_annotations', 'escape4chm',
+              'asdl_highlight', 'peg_highlight']
 
 
 doctest_global_setup = '''
@@ -127,6 +128,7 @@
 }
 \let\Verbatim=\OriginalVerbatim
 \let\endVerbatim=\endOriginalVerbatim
+\setcounter{tocdepth}{2}
 '''
 
 # The paper size ('letter' or 'a4').
@@ -226,3 +228,13 @@
 
 # Relative filename of the reference count data file.
 refcount_file = 'data/refcounts.dat'
+
+# Sphinx 2 and Sphinx 3 compatibility
+# -----------------------------------
+
+# bpo-40204: Allow Sphinx 2 syntax in the C domain
+c_allow_pre_v3 = True
+
+# bpo-40204: Disable warnings on Sphinx 2 syntax of the C domain since the
+# documentation is built with -W (warnings treated as errors).
+c_warn_on_allowed_pre_v3 = False
diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat
index 3ccc20b..aac1351 100644
--- a/Doc/data/refcounts.dat
+++ b/Doc/data/refcounts.dat
@@ -2306,6 +2306,11 @@
 PyType_FromSpec:PyObject*::+1:
 PyType_FromSpec:PyType_Spec*:spec::
 
+PyType_FromModuleAndSpec:PyObject*::+1:
+PyType_FromModuleAndSpec:PyObject*:module:+1:
+PyType_FromModuleAndSpec:PyType_Spec*:spec::
+PyType_FromModuleAndSpec:PyObject*:bases:0:
+
 PyType_FromSpecWithBases:PyObject*::+1:
 PyType_FromSpecWithBases:PyType_Spec*:spec::
 PyType_FromSpecWithBases:PyObject*:bases:0:
@@ -3046,8 +3051,6 @@
 
 _PyImport_Fini:void:::
 
-_PyImport_Init:void:::
-
 _PyObject_New:PyObject*::+1:
 _PyObject_New:PyTypeObject*:type:0:
 
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index 80136b8..b14197c 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -1142,6 +1142,24 @@
 
    * ``macosx-10.6-intel``
 
+   For AIX, Python 3.9 and later return a string starting with "aix", followed
+   by additional fields (separated by ``'-'``) that represent the combined
+   values of AIX Version, Release and Technology Level (first field), Build Date
+   (second field), and bit-size (third field). Python 3.8 and earlier returned
+   only a single additional field with the AIX Version and Release.
+
+   Examples of returned values on AIX:
+
+   * ``aix-5307-0747-32`` # 32-bit build on AIX ``oslevel -s``: 5300-07-00-0000
+
+   * ``aix-7105-1731-64`` # 64-bit build on AIX ``oslevel -s``: 7100-05-01-1731
+
+   * ``aix-7.2``          # Legacy form reported in Python 3.8 and earlier
+
+   .. versionchanged:: 3.9
+      The AIX platform string format now also includes the technology level,
+      build date, and ABI bit-size.
+
 
 .. function:: convert_path(pathname)
 
@@ -1837,6 +1855,9 @@
 
 .. class:: bdist_msi
 
+.. deprecated:: 3.9
+   Use bdist_wheel (wheel packages) instead.
+
    Builds a `Windows Installer`_ (.msi) binary package.
 
    .. _Windows Installer: https://msdn.microsoft.com/en-us/library/cc185688(VS.85).aspx
diff --git a/Doc/distutils/builtdist.rst b/Doc/distutils/builtdist.rst
index b814f2e..e032c03 100644
--- a/Doc/distutils/builtdist.rst
+++ b/Doc/distutils/builtdist.rst
@@ -149,6 +149,9 @@
 .. note::
    bdist_wininst is deprecated since Python 3.8.
 
+.. note::
+   bdist_msi is deprecated since Python 3.9.
+
 The following sections give details on the individual :command:`bdist_\*`
 commands.
 
@@ -304,6 +307,9 @@
 .. warning::
    bdist_wininst is deprecated since Python 3.8.
 
+.. warning::
+   bdist_msi is deprecated since Python 3.9.
+
 Executable installers are the natural format for binary distributions on
 Windows.  They display a nice graphical user interface, display some information
 about the module distribution to be installed taken from the metadata in the
@@ -468,3 +474,6 @@
 
 .. note::
    bdist_wininst is deprecated since Python 3.8.
+
+.. note::
+   bdist_msi is deprecated since Python 3.9.
diff --git a/Doc/distutils/examples.rst b/Doc/distutils/examples.rst
index 44f7083..e492b7f 100644
--- a/Doc/distutils/examples.rst
+++ b/Doc/distutils/examples.rst
@@ -255,7 +255,7 @@
     running check
     warning: check: missing required meta-data: version, url
     warning: check: missing meta-data: either (author and author_email) or
-             (maintainer and maintainer_email) must be supplied
+             (maintainer and maintainer_email) should be supplied
 
 
 If you use the reStructuredText syntax in the ``long_description`` field and
diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst
index 19c5e51..d902370 100644
--- a/Doc/extending/newtypes.rst
+++ b/Doc/extending/newtypes.rst
@@ -104,7 +104,7 @@
            /* This saves the current exception state */
            PyErr_Fetch(&err_type, &err_value, &err_traceback);
 
-           cbresult = PyObject_CallObject(self->my_callback, NULL);
+           cbresult = PyObject_CallNoArgs(self->my_callback);
            if (cbresult == NULL)
                PyErr_WriteUnraisable(self->my_callback);
            else
diff --git a/Doc/extending/newtypes_tutorial.rst b/Doc/extending/newtypes_tutorial.rst
index 0eb6ffd..4da77e7 100644
--- a/Doc/extending/newtypes_tutorial.rst
+++ b/Doc/extending/newtypes_tutorial.rst
@@ -416,7 +416,7 @@
 ``first`` member, so it could be any kind of object.  It could have a
 destructor that causes code to be executed that tries to access the
 ``first`` member; or that destructor could release the
-:term:`Global interpreter Lock` and let arbitrary code run in other
+:term:`Global interpreter Lock <GIL>` and let arbitrary code run in other
 threads that accesses and modifies our object.
 
 To be paranoid and protect ourselves against this possibility, we almost
diff --git a/Doc/faq/design.rst b/Doc/faq/design.rst
index e7921ba..8cf271c 100644
--- a/Doc/faq/design.rst
+++ b/Doc/faq/design.rst
@@ -24,14 +24,16 @@
    z++;
 
 Only the ``x++`` statement is executed if the condition is true, but the
-indentation leads you to believe otherwise.  Even experienced C programmers will
-sometimes stare at it a long time wondering why ``y`` is being decremented even
+indentation leads many to believe otherwise.  Even experienced C programmers will
+sometimes stare at it a long time wondering as to why ``y`` is being decremented even
 for ``x > y``.
 
 Because there are no begin/end brackets, Python is much less prone to
 coding-style conflicts.  In C there are many different ways to place the braces.
-If you're used to reading and writing code that uses one style, you will feel at
-least slightly uneasy when reading (or being required to write) another style.
+After becoming used to reading and writing code using a particular style,
+it is normal to feel somewhat uneasy when reading (or being required to write)
+in a different one.
+
 
 Many coding styles place begin/end brackets on a line by themselves.  This makes
 programs considerably longer and wastes valuable screen space, making it harder
@@ -571,8 +573,7 @@
 :class:`~collections.abc.MutableMapping`.
 
 For Python, many of the advantages of interface specifications can be obtained
-by an appropriate test discipline for components.  There is also a tool,
-PyChecker, which can be used to find problems due to subclassing.
+by an appropriate test discipline for components.
 
 A good test suite for a module can both provide a regression test and serve as a
 module interface specification and a set of examples.  Many Python modules can
@@ -590,11 +591,11 @@
 your :meth:`append` implementation will actually do this correctly, but it's
 trivial to check this property in a test suite.
 
-Writing test suites is very helpful, and you might want to design your code with
-an eye to making it easily tested.  One increasingly popular technique,
-test-directed development, calls for writing parts of the test suite first,
-before you write any of the actual code.  Of course Python allows you to be
-sloppy and not write test cases at all.
+Writing test suites is very helpful, and you might want to design your code to
+make it easily tested. One increasingly popular technique, test-driven
+development, calls for writing parts of the test suite first, before you write
+any of the actual code.  Of course Python allows you to be sloppy and not write
+test cases at all.
 
 
 Why is there no goto?
@@ -649,7 +650,7 @@
 ---------------------------------------------------------------------
 
 Python has a 'with' statement that wraps the execution of a block, calling code
-on the entrance and exit from the block.  Some language have a construct that
+on the entrance and exit from the block.  Some languages have a construct that
 looks like this::
 
    with obj:
diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst
index eee3c3c..cf70f16 100644
--- a/Doc/faq/general.rst
+++ b/Doc/faq/general.rst
@@ -142,9 +142,9 @@
 Alpha, beta and release candidate versions have an additional suffix.  The
 suffix for an alpha version is "aN" for some small number N, the suffix for a
 beta version is "bN" for some small number N, and the suffix for a release
-candidate version is "cN" for some small number N.  In other words, all versions
+candidate version is "rcN" for some small number N.  In other words, all versions
 labeled 2.0aN precede the versions labeled 2.0bN, which precede versions labeled
-2.0cN, and *those* precede 2.0.
+2.0rcN, and *those* precede 2.0.
 
 You may also find version numbers with a "+" suffix, e.g. "2.2+".  These are
 unreleased versions, built directly from the CPython development repository.  In
@@ -309,8 +309,8 @@
 The latest stable releases can always be found on the `Python download page
 <https://www.python.org/downloads/>`_.  There are two production-ready versions
 of Python: 2.x and 3.x. The recommended version is 3.x, which is supported by
-most widely used libraries.  Although 2.x is still widely used, `it will not
-be maintained after January 1, 2020 <https://www.python.org/dev/peps/pep-0373/>`_.
+most widely used libraries.  Although 2.x is still widely used, `it is not
+maintained anymore <https://www.python.org/dev/peps/pep-0373/>`_.
 
 How many people are using Python?
 ---------------------------------
diff --git a/Doc/faq/library.rst b/Doc/faq/library.rst
index ab92a87..97058b5 100644
--- a/Doc/faq/library.rst
+++ b/Doc/faq/library.rst
@@ -125,7 +125,7 @@
 
    handler(signum, frame)
 
-so it should be declared with two arguments::
+so it should be declared with two parameters::
 
    def handler(signum, frame):
        ...
@@ -159,9 +159,9 @@
 
 at the bottom of the main module of your program.
 
-Once your program is organized as a tractable collection of functions and class
-behaviours you should write test functions that exercise the behaviours.  A test
-suite that automates a sequence of tests can be associated with each module.
+Once your program is organized as a tractable collection of function and class
+behaviours, you should write test functions that exercise the behaviours.  A
+test suite that automates a sequence of tests can be associated with each module.
 This sounds like a lot of work, but since Python is so terse and flexible it's
 surprisingly easy.  You can make coding much more pleasant and fun by writing
 your test functions in parallel with the "production code", since this makes it
@@ -295,7 +295,7 @@
 How do I parcel out work among a bunch of worker threads?
 ---------------------------------------------------------
 
-The easiest way is to use the new :mod:`concurrent.futures` module,
+The easiest way is to use the :mod:`concurrent.futures` module,
 especially the :mod:`~concurrent.futures.ThreadPoolExecutor` class.
 
 Or, if you want fine control over the dispatching algorithm, you can write
@@ -679,7 +679,7 @@
 I would like to retrieve web pages that are the result of POSTing a form. Is
 there existing code that would let me do this easily?
 
-Yes. Here's a simple example that uses urllib.request::
+Yes. Here's a simple example that uses :mod:`urllib.request`::
 
    #!/usr/local/bin/python
 
@@ -765,20 +765,21 @@
 sockets.
 
 To prevent the TCP connect from blocking, you can set the socket to non-blocking
-mode.  Then when you do the ``connect()``, you will either connect immediately
+mode.  Then when you do the :meth:`socket.connect`, you will either connect immediately
 (unlikely) or get an exception that contains the error number as ``.errno``.
 ``errno.EINPROGRESS`` indicates that the connection is in progress, but hasn't
 finished yet.  Different OSes will return different values, so you're going to
 have to check what's returned on your system.
 
-You can use the ``connect_ex()`` method to avoid creating an exception.  It will
-just return the errno value.  To poll, you can call ``connect_ex()`` again later
+You can use the :meth:`socket.connect_ex` method to avoid creating an exception.  It will
+just return the errno value.  To poll, you can call :meth:`socket.connect_ex` again later
 -- ``0`` or ``errno.EISCONN`` indicate that you're connected -- or you can pass this
-socket to select to check if it's writable.
+socket to :meth:`select.select` to check if it's writable.
 
 .. note::
-   The :mod:`asyncore` module presents a framework-like approach to the problem
-   of writing non-blocking networking code.
+   The :mod:`asyncio` module provides a general purpose single-threaded and
+   concurrent asynchronous library, which can be used for writing non-blocking
+   network code.
    The third-party `Twisted <https://twistedmatrix.com/trac/>`_ library is
    a popular and feature-rich alternative.
 
@@ -832,8 +833,8 @@
 
 Some higher-level functions operate on sequences directly, such as:
 
-* ``choice(S)`` chooses random element from a given sequence
-* ``shuffle(L)`` shuffles a list in-place, i.e. permutes it randomly
+* ``choice(S)`` chooses a random element from a given sequence.
+* ``shuffle(L)`` shuffles a list in-place, i.e. permutes it randomly.
 
 There's also a ``Random`` class you can instantiate to create independent
 multiple random number generators.
diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst
index 6cc1b52..8df62c5 100644
--- a/Doc/faq/programming.rst
+++ b/Doc/faq/programming.rst
@@ -35,12 +35,6 @@
 as a part of the ActivePython distribution (see
 https://www.activestate.com/activepython\ ).
 
-`Boa Constructor <http://boa-constructor.sourceforge.net/>`_ is an IDE and GUI
-builder that uses wxWidgets.  It offers visual frame creation and manipulation,
-an object inspector, many views on the source like object browsers, inheritance
-hierarchies, doc string generated html documentation, an advanced debugger,
-integrated help, and Zope support.
-
 `Eric <http://eric-ide.python-projects.org/>`_ is an IDE built on PyQt
 and the Scintilla editing component.
 
@@ -57,22 +51,14 @@
 * PyCharm (https://www.jetbrains.com/pycharm/)
 
 
-Is there a tool to help find bugs or perform static analysis?
+Are there tools to help find bugs or perform static analysis?
 -------------------------------------------------------------
 
 Yes.
 
-PyChecker is a static analysis tool that finds bugs in Python source code and
-warns about code complexity and style.  You can get PyChecker from
-http://pychecker.sourceforge.net/.
-
-`Pylint <https://www.pylint.org/>`_ is another tool that checks
-if a module satisfies a coding standard, and also makes it possible to write
-plug-ins to add a custom feature.  In addition to the bug checking that
-PyChecker performs, Pylint offers some additional features such as checking line
-length, whether variable names are well-formed according to your coding
-standard, whether declared interfaces are fully implemented, and more.
-https://docs.pylint.org/ provides a full list of Pylint's features.
+`Pylint <https://www.pylint.org/>`_ and
+`Pyflakes <https://github.com/PyCQA/pyflakes>`_ do basic checking that will
+help you catch bugs sooner.
 
 Static type checkers such as `Mypy <http://mypy-lang.org/>`_,
 `Pyre <https://pyre-check.org/>`_, and
@@ -518,14 +504,14 @@
 
 1) By returning a tuple of the results::
 
-      def func2(a, b):
-          a = 'new-value'        # a and b are local names
-          b = b + 1              # assigned to new objects
-          return a, b            # return new values
-
-      x, y = 'old-value', 99
-      x, y = func2(x, y)
-      print(x, y)                # output: new-value 100
+      >>> def func1(a, b):
+      ...     a = 'new-value'        # a and b are local names
+      ...     b = b + 1              # assigned to new objects
+      ...     return a, b            # return new values
+      ...
+      >>> x, y = 'old-value', 99
+      >>> func1(x, y)
+      ('new-value', 100)
 
    This is almost always the clearest solution.
 
@@ -533,38 +519,41 @@
 
 3) By passing a mutable (changeable in-place) object::
 
-      def func1(a):
-          a[0] = 'new-value'     # 'a' references a mutable list
-          a[1] = a[1] + 1        # changes a shared object
-
-      args = ['old-value', 99]
-      func1(args)
-      print(args[0], args[1])    # output: new-value 100
+      >>> def func2(a):
+      ...     a[0] = 'new-value'     # 'a' references a mutable list
+      ...     a[1] = a[1] + 1        # changes a shared object
+      ...
+      >>> args = ['old-value', 99]
+      >>> func2(args)
+      >>> args
+      ['new-value', 100]
 
 4) By passing in a dictionary that gets mutated::
 
-      def func3(args):
-          args['a'] = 'new-value'     # args is a mutable dictionary
-          args['b'] = args['b'] + 1   # change it in-place
-
-      args = {'a': 'old-value', 'b': 99}
-      func3(args)
-      print(args['a'], args['b'])
+      >>> def func3(args):
+      ...     args['a'] = 'new-value'     # args is a mutable dictionary
+      ...     args['b'] = args['b'] + 1   # change it in-place
+      ...
+      >>> args = {'a': 'old-value', 'b': 99}
+      >>> func3(args)
+      >>> args
+      {'a': 'new-value', 'b': 100}
 
 5) Or bundle up values in a class instance::
 
-      class callByRef:
-          def __init__(self, /, **args):
-              for key, value in args.items():
-                  setattr(self, key, value)
-
-      def func4(args):
-          args.a = 'new-value'        # args is a mutable callByRef
-          args.b = args.b + 1         # change object in-place
-
-      args = callByRef(a='old-value', b=99)
-      func4(args)
-      print(args.a, args.b)
+      >>> class Namespace:
+      ...     def __init__(self, /, **args):
+      ...         for key, value in args.items():
+      ...             setattr(self, key, value)
+      ...
+      >>> def func4(args):
+      ...     args.a = 'new-value'        # args is a mutable Namespace
+      ...     args.b = args.b + 1         # change object in-place
+      ...
+      >>> args = Namespace(a='old-value', b=99)
+      >>> func4(args)
+      >>> vars(args)
+      {'a': 'new-value', 'b': 100}
 
 
    There's almost never a good reason to get this complicated.
@@ -851,10 +840,11 @@
 e.g. ``float('144') == 144.0``.
 
 By default, these interpret the number as decimal, so that ``int('0144') ==
-144`` and ``int('0x144')`` raises :exc:`ValueError`. ``int(string, base)`` takes
-the base to convert from as a second optional argument, so ``int('0x144', 16) ==
-324``.  If the base is specified as 0, the number is interpreted using Python's
-rules: a leading '0o' indicates octal, and '0x' indicates a hex number.
+144`` holds true, and ``int('0x144')`` raises :exc:`ValueError`. ``int(string,
+base)`` takes the base to convert from as a second optional argument, so ``int(
+'0x144', 16) == 324``.  If the base is specified as 0, the number is interpreted
+using Python's rules: a leading '0o' indicates octal, and '0x' indicates a hex
+number.
 
 Do not use the built-in function :func:`eval` if all you need is to convert
 strings to numbers.  :func:`eval` will be significantly slower and it presents a
@@ -952,7 +942,7 @@
      f()
 
 
-* Use :func:`locals` or :func:`eval` to resolve the function name::
+* Use :func:`locals` to resolve the function name::
 
      def myFunc():
          print("hello")
@@ -962,12 +952,6 @@
      f = locals()[fname]
      f()
 
-     f = eval(fname)
-     f()
-
-  Note: Using :func:`eval` is slow and dangerous.  If you don't have absolute
-  control over the contents of the string, someone could pass a string that
-  resulted in an arbitrary function being executed.
 
 Is there an equivalent to Perl's chomp() for removing trailing newlines from strings?
 -------------------------------------------------------------------------------------
@@ -1132,7 +1116,7 @@
 How do I iterate over a sequence in reverse order?
 --------------------------------------------------
 
-Use the :func:`reversed` built-in function, which is new in Python 2.4::
+Use the :func:`reversed` built-in function::
 
    for x in reversed(sequence):
        ...  # do something with x ...
@@ -1140,11 +1124,6 @@
 This won't touch your original sequence, but build a new copy with reversed
 order to iterate over.
 
-With Python 2.3, you can use an extended slice syntax::
-
-   for x in sequence[::-1]:
-       ...  # do something with x ...
-
 
 How do you remove duplicates from a list?
 -----------------------------------------
@@ -1174,6 +1153,21 @@
 into a list.
 
 
+How do you remove multiple items from a list
+--------------------------------------------
+
+As with removing duplicates, explicitly iterating in reverse with a
+delete condition is one possibility.  However, it is easier and faster
+to use slice replacement with an implicit or explicit forward iteration.
+Here are three variations.::
+
+   mylist[:] = filter(keep_function, mylist)
+   mylist[:] = (x for x in mylist if keep_condition)
+   mylist[:] = [x for x in mylist if keep_condition]
+
+The list comprehension may be fastest.
+
+
 How do you make an array in Python?
 -----------------------------------
 
@@ -1376,20 +1370,6 @@
    ['else', 'sort', 'to', 'something']
 
 
-An alternative for the last step is::
-
-   >>> result = []
-   >>> for p in pairs: result.append(p[1])
-
-If you find this more legible, you might prefer to use this instead of the final
-list comprehension.  However, it is almost twice as slow for long lists.  Why?
-First, the ``append()`` operation has to reallocate memory, and while it uses
-some tricks to avoid doing that each time, it still has to do it occasionally,
-and that costs quite a bit.  Second, the expression "result.append" requires an
-extra attribute lookup, and third, there's a speed reduction from having to make
-all those function calls.
-
-
 Objects
 =======
 
@@ -1533,18 +1513,18 @@
 How can I organize my code to make it easier to change the base class?
 ----------------------------------------------------------------------
 
-You could define an alias for the base class, assign the real base class to it
-before your class definition, and use the alias throughout your class.  Then all
+You could assign the base class to an alias and derive from the alias.  Then all
 you have to change is the value assigned to the alias.  Incidentally, this trick
 is also handy if you want to decide dynamically (e.g. depending on availability
 of resources) which base class to use.  Example::
 
-   BaseAlias = <real base class>
+   class Base:
+       ...
+
+   BaseAlias = Base
 
    class Derived(BaseAlias):
-       def meth(self):
-           BaseAlias.meth(self)
-           ...
+       ...
 
 
 How do I create static class data and static class methods?
diff --git a/Doc/faq/windows.rst b/Doc/faq/windows.rst
index a181086..c8e9c5f 100644
--- a/Doc/faq/windows.rst
+++ b/Doc/faq/windows.rst
@@ -140,7 +140,7 @@
 How do I make an executable from a Python script?
 -------------------------------------------------
 
-See `cx_Freeze <https://anthony-tuininga.github.io/cx_Freeze/>`_ for a distutils extension
+See `cx_Freeze <https://cx-freeze.readthedocs.io/en/latest/>`_ for a distutils extension
 that allows you to create console and GUI executables from Python code.
 `py2exe <http://www.py2exe.org/>`_, the most popular extension for building
 Python 2.x-based executables, does not yet support Python 3 but a version that
@@ -279,7 +279,7 @@
 How do I check for a keypress without blocking?
 -----------------------------------------------
 
-Use the msvcrt module.  This is a standard Windows-specific extension module.
+Use the :mod:`msvcrt` module.  This is a standard Windows-specific extension module.
 It defines a function ``kbhit()`` which checks whether a keyboard hit is
 present, and ``getch()`` which gets one character without echoing it.
 
diff --git a/Doc/glossary.rst b/Doc/glossary.rst
index e997d36..4fd01e0 100644
--- a/Doc/glossary.rst
+++ b/Doc/glossary.rst
@@ -301,13 +301,20 @@
       including functions, methods, properties, class methods, static methods,
       and reference to super classes.
 
-      For more information about descriptors' methods, see :ref:`descriptors`.
+      For more information about descriptors' methods, see :ref:`descriptors`
+      or the :ref:`Descriptor How To Guide <descriptorhowto>`.
 
    dictionary
       An associative array, where arbitrary keys are mapped to values.  The
       keys can be any object with :meth:`__hash__` and :meth:`__eq__` methods.
       Called a hash in Perl.
 
+   dictionary comprehension
+      A compact way to process all or part of the elements in an iterable and
+      return a dictionary with the results. ``results = {n: n ** 2 for n in
+      range(10)}`` generates a dictionary containing key ``n`` mapped to
+      value ``n ** 2``. See :ref:`comprehensions`.
+
    dictionary view
       The objects returned from :meth:`dict.keys`, :meth:`dict.values`, and
       :meth:`dict.items` are called dictionary views. They provide a dynamic
@@ -476,6 +483,13 @@
       See also the :term:`single dispatch` glossary entry, the
       :func:`functools.singledispatch` decorator, and :pep:`443`.
 
+   generic type
+      A :term:`type` that can be parameterized; typically a container like
+      :class:`list`. Used for :term:`type hints <type hint>` and
+      :term:`annotations <annotation>`.
+
+      See :pep:`483` for more details, and :mod:`typing` or
+      :ref:`generic alias type <types-genericalias>` for its uses.
 
    GIL
       See :term:`global interpreter lock`.
@@ -587,7 +601,7 @@
       and :class:`tuple`) and some non-sequence types like :class:`dict`,
       :term:`file objects <file object>`, and objects of any classes you define
       with an :meth:`__iter__` method or with a :meth:`__getitem__` method
-      that implements :term:`Sequence` semantics.
+      that implements :term:`Sequence <sequence>` semantics.
 
       Iterables can be
       used in a :keyword:`for` loop and in many other places where a sequence is
@@ -1024,7 +1038,13 @@
       :meth:`index`, :meth:`__contains__`, and
       :meth:`__reversed__`. Types that implement this expanded
       interface can be registered explicitly using
-      :func:`~abc.register`.
+      :func:`~abc.ABCMeta.register`.
+
+   set comprehension
+      A compact way to process all or part of the elements in an iterable and
+      return a set with the results. ``results = {c for c in 'abracadabra' if
+      c not in 'abc'}`` generates the set of strings ``{'r', 'd'}``.  See
+      :ref:`comprehensions`.
 
    single dispatch
       A form of :term:`generic function` dispatch where the implementation is
@@ -1084,19 +1104,15 @@
       Type aliases are useful for simplifying :term:`type hints <type hint>`.
       For example::
 
-         from typing import List, Tuple
-
          def remove_gray_shades(
-                 colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]:
+                 colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
              pass
 
       could be made more readable like this::
 
-         from typing import List, Tuple
+         Color = tuple[int, int, int]
 
-         Color = Tuple[int, int, int]
-
-         def remove_gray_shades(colors: List[Color]) -> List[Color]:
+         def remove_gray_shades(colors: list[Color]) -> list[Color]:
              pass
 
       See :mod:`typing` and :pep:`484`, which describe this functionality.
diff --git a/Doc/howto/descriptor.rst b/Doc/howto/descriptor.rst
index 9856e6c..ab5a573 100644
--- a/Doc/howto/descriptor.rst
+++ b/Doc/howto/descriptor.rst
@@ -1,3 +1,5 @@
+.. _descriptorhowto:
+
 ======================
 Descriptor HowTo Guide
 ======================
@@ -7,45 +9,514 @@
 
 .. Contents::
 
+
+:term:`Descriptors <descriptor>` let objects customize attribute lookup,
+storage, and deletion.
+
+This guide has four major sections:
+
+1) The "primer" gives a basic overview, moving gently from simple examples,
+   adding one feature at a time.  Start here if you're new to descriptors.
+
+2) The second section shows a complete, practical descriptor example.  If you
+   already know the basics, start there.
+
+3) The third section provides a more technical tutorial that goes into the
+   detailed mechanics of how descriptors work.  Most people don't need this
+   level of detail.
+
+4) The last section has pure Python equivalents for built-in descriptors that
+   are written in C.  Read this if you're curious about how functions turn
+   into bound methods or about the implementation of common tools like
+   :func:`classmethod`, :func:`staticmethod`, :func:`property`, and
+   :term:`__slots__`.
+
+
+Primer
+^^^^^^
+
+In this primer, we start with the most basic possible example and then we'll
+add new capabilities one by one.
+
+
+Simple example: A descriptor that returns a constant
+----------------------------------------------------
+
+The :class:`Ten` class is a descriptor that always returns the constant ``10``
+from its :meth:`__get__` method:
+
+.. testcode::
+
+    class Ten:
+        def __get__(self, obj, objtype=None):
+            return 10
+
+To use the descriptor, it must be stored as a class variable in another class:
+
+.. testcode::
+
+    class A:
+        x = 5                       # Regular class attribute
+        y = Ten()                   # Descriptor instance
+
+An interactive session shows the difference between normal attribute lookup
+and descriptor lookup:
+
+.. doctest::
+
+    >>> a = A()                     # Make an instance of class A
+    >>> a.x                         # Normal attribute lookup
+    5
+    >>> a.y                         # Descriptor lookup
+    10
+
+In the ``a.x`` attribute lookup, the dot operator finds the key ``x`` and the
+value ``5`` in the class dictionary.  In the ``a.y`` lookup, the dot operator
+finds a descriptor instance, recognized by its ``__get__`` method, and calls
+that method which returns ``10``.
+
+Note that the value ``10`` is not stored in either the class dictionary or the
+instance dictionary.  Instead, the value ``10`` is computed on demand.
+
+This example shows how a simple descriptor works, but it isn't very useful.
+For retrieving constants, normal attribute lookup would be better.
+
+In the next section, we'll create something more useful, a dynamic lookup.
+
+
+Dynamic lookups
+---------------
+
+Interesting descriptors typically run computations instead of returning
+constants:
+
+.. testcode::
+
+    import os
+
+    class DirectorySize:
+
+        def __get__(self, obj, objtype=None):
+            return len(os.listdir(obj.dirname))
+
+    class Directory:
+
+        size = DirectorySize()              # Descriptor instance
+
+        def __init__(self, dirname):
+            self.dirname = dirname          # Regular instance attribute
+
+An interactive session shows that the lookup is dynamic — it computes
+different, updated answers each time::
+
+    >>> s = Directory('songs')
+    >>> g = Directory('games')
+    >>> s.size                              # The songs directory has twenty files
+    20
+    >>> g.size                              # The games directory has three files
+    3
+    >>> open('games/newfile').close()       # Add a fourth file to the directory
+    >>> g.size                              # File count is automatically updated
+    4
+
+Besides showing how descriptors can run computations, this example also
+reveals the purpose of the parameters to :meth:`__get__`.  The *self*
+parameter is *size*, an instance of *DirectorySize*.  The *obj* parameter is
+either *g* or *s*, an instance of *Directory*.  It is the *obj* parameter that
+lets the :meth:`__get__` method learn the target directory.  The *objtype*
+parameter is the class *Directory*.
+
+
+Managed attributes
+------------------
+
+A popular use for descriptors is managing access to instance data.  The
+descriptor is assigned to a public attribute in the class dictionary while the
+actual data is stored as a private attribute in the instance dictionary.  The
+descriptor's :meth:`__get__` and :meth:`__set__` methods are triggered when
+the public attribute is accessed.
+
+In the following example, *age* is the public attribute and *_age* is the
+private attribute.  When the public attribute is accessed, the descriptor logs
+the lookup or update:
+
+.. testcode::
+
+    import logging
+
+    logging.basicConfig(level=logging.INFO)
+
+    class LoggedAgeAccess:
+
+        def __get__(self, obj, objtype=None):
+            value = obj._age
+            logging.info('Accessing %r giving %r', 'age', value)
+            return value
+
+        def __set__(self, obj, value):
+            logging.info('Updating %r to %r', 'age', value)
+            obj._age = value
+
+    class Person:
+
+        age = LoggedAgeAccess()             # Descriptor instance
+
+        def __init__(self, name, age):
+            self.name = name                # Regular instance attribute
+            self.age = age                  # Calls __set__()
+
+        def birthday(self):
+            self.age += 1                   # Calls both __get__() and __set__()
+
+
+An interactive session shows that all access to the managed attribute *age* is
+logged, but that the regular attribute *name* is not logged:
+
+.. testcode::
+    :hide:
+
+    import logging, sys
+    logging.basicConfig(level=logging.INFO, stream=sys.stdout, force=True)
+
+.. doctest::
+
+    >>> mary = Person('Mary M', 30)         # The initial age update is logged
+    INFO:root:Updating 'age' to 30
+    >>> dave = Person('David D', 40)
+    INFO:root:Updating 'age' to 40
+
+    >>> vars(mary)                          # The actual data is in a private attribute
+    {'name': 'Mary M', '_age': 30}
+    >>> vars(dave)
+    {'name': 'David D', '_age': 40}
+
+    >>> mary.age                            # Access the data and log the lookup
+    INFO:root:Accessing 'age' giving 30
+    30
+    >>> mary.birthday()                     # Updates are logged as well
+    INFO:root:Accessing 'age' giving 30
+    INFO:root:Updating 'age' to 31
+
+    >>> dave.name                           # Regular attribute lookup isn't logged
+    'David D'
+    >>> dave.age                            # Only the managed attribute is logged
+    INFO:root:Accessing 'age' giving 40
+    40
+
+One major issue with this example is that the private name *_age* is hardwired in
+the *LoggedAgeAccess* class.  That means that each instance can only have one
+logged attribute and that its name is unchangeable.  In the next example,
+we'll fix that problem.
+
+
+Customized names
+----------------
+
+When a class uses descriptors, it can inform each descriptor about which
+variable name was used.
+
+In this example, the :class:`Person` class has two descriptor instances,
+*name* and *age*.  When the :class:`Person` class is defined, it makes a
+callback to :meth:`__set_name__` in *LoggedAccess* so that the field names can
+be recorded, giving each descriptor its own *public_name* and *private_name*:
+
+.. testcode::
+
+    import logging
+
+    logging.basicConfig(level=logging.INFO)
+
+    class LoggedAccess:
+
+        def __set_name__(self, owner, name):
+            self.public_name = name
+            self.private_name = '_' + name
+
+        def __get__(self, obj, objtype=None):
+            value = getattr(obj, self.private_name)
+            logging.info('Accessing %r giving %r', self.public_name, value)
+            return value
+
+        def __set__(self, obj, value):
+            logging.info('Updating %r to %r', self.public_name, value)
+            setattr(obj, self.private_name, value)
+
+    class Person:
+
+        name = LoggedAccess()                # First descriptor instance
+        age = LoggedAccess()                 # Second descriptor instance
+
+        def __init__(self, name, age):
+            self.name = name                 # Calls the first descriptor
+            self.age = age                   # Calls the second descriptor
+
+        def birthday(self):
+            self.age += 1
+
+An interactive session shows that the :class:`Person` class has called
+:meth:`__set_name__` so that the field names would be recorded.  Here
+we call :func:`vars` to look up the descriptor without triggering it:
+
+.. doctest::
+
+    >>> vars(vars(Person)['name'])
+    {'public_name': 'name', 'private_name': '_name'}
+    >>> vars(vars(Person)['age'])
+    {'public_name': 'age', 'private_name': '_age'}
+
+The new class now logs access to both *name* and *age*:
+
+.. testcode::
+    :hide:
+
+    import logging, sys
+    logging.basicConfig(level=logging.INFO, stream=sys.stdout, force=True)
+
+.. doctest::
+
+    >>> pete = Person('Peter P', 10)
+    INFO:root:Updating 'name' to 'Peter P'
+    INFO:root:Updating 'age' to 10
+    >>> kate = Person('Catherine C', 20)
+    INFO:root:Updating 'name' to 'Catherine C'
+    INFO:root:Updating 'age' to 20
+
+The two *Person* instances contain only the private names::
+
+    >>> vars(pete)
+    {'_name': 'Peter P', '_age': 10}
+    >>> vars(kate)
+    {'_name': 'Catherine C', '_age': 20}
+
+
+Closing thoughts
+----------------
+
+A :term:`descriptor` is what we call any object that defines :meth:`__get__`,
+:meth:`__set__`, or :meth:`__delete__`.
+
+Optionally, descriptors can have a :meth:`__set_name__` method.  This is only
+used in cases where a descriptor needs to know either the class where it was
+created or the name of class variable it was assigned to.  (This method, if
+present, is called even if the class is not a descriptor.)
+
+Descriptors get invoked by the dot "operator" during attribute lookup.  If a
+descriptor is accessed indirectly with ``vars(some_class)[descriptor_name]``,
+the descriptor instance is returned without invoking it.
+
+Descriptors only work when used as class variables.  When put in instances,
+they have no effect.
+
+The main motivation for descriptors is to provide a hook allowing objects
+stored in class variables to control what happens during attribute lookup.
+
+Traditionally, the calling class controls what happens during lookup.
+Descriptors invert that relationship and allow the data being looked-up to
+have a say in the matter.
+
+Descriptors are used throughout the language.  It is how functions turn into
+bound methods.  Common tools like :func:`classmethod`, :func:`staticmethod`,
+:func:`property`, and :func:`functools.cached_property` are all implemented as
+descriptors.
+
+
+Complete Practical Example
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In this example, we create a practical and powerful tool for locating
+notoriously hard to find data corruption bugs.
+
+
+Validator class
+---------------
+
+A validator is a descriptor for managed attribute access.  Prior to storing
+any data, it verifies that the new value meets various type and range
+restrictions.  If those restrictions aren't met, it raises an exception to
+prevent data corruption at its source.
+
+This :class:`Validator` class is both an :term:`abstract base class` and a
+managed attribute descriptor:
+
+.. testcode::
+
+    from abc import ABC, abstractmethod
+
+    class Validator(ABC):
+
+        def __set_name__(self, owner, name):
+            self.private_name = '_' + name
+
+        def __get__(self, obj, objtype=None):
+            return getattr(obj, self.private_name)
+
+        def __set__(self, obj, value):
+            self.validate(value)
+            setattr(obj, self.private_name, value)
+
+        @abstractmethod
+        def validate(self, value):
+            pass
+
+Custom validators need to inherit from :class:`Validator` and must supply a
+:meth:`validate` method to test various restrictions as needed.
+
+
+Custom validators
+-----------------
+
+Here are three practical data validation utilities:
+
+1) :class:`OneOf` verifies that a value is one of a restricted set of options.
+
+2) :class:`Number` verifies that a value is either an :class:`int` or
+   :class:`float`.  Optionally, it verifies that a value is between a given
+   minimum or maximum.
+
+3) :class:`String` verifies that a value is a :class:`str`.  Optionally, it
+   validates a given minimum or maximum length.  It can validate a
+   user-defined `predicate
+   <https://en.wikipedia.org/wiki/Predicate_(mathematical_logic)>`_ as well.
+
+.. testcode::
+
+    class OneOf(Validator):
+
+        def __init__(self, *options):
+            self.options = set(options)
+
+        def validate(self, value):
+            if value not in self.options:
+                raise ValueError(f'Expected {value!r} to be one of {self.options!r}')
+
+    class Number(Validator):
+
+        def __init__(self, minvalue=None, maxvalue=None):
+            self.minvalue = minvalue
+            self.maxvalue = maxvalue
+
+        def validate(self, value):
+            if not isinstance(value, (int, float)):
+                raise TypeError(f'Expected {value!r} to be an int or float')
+            if self.minvalue is not None and value < self.minvalue:
+                raise ValueError(
+                    f'Expected {value!r} to be at least {self.minvalue!r}'
+                )
+            if self.maxvalue is not None and value > self.maxvalue:
+                raise ValueError(
+                    f'Expected {value!r} to be no more than {self.maxvalue!r}'
+                )
+
+    class String(Validator):
+
+        def __init__(self, minsize=None, maxsize=None, predicate=None):
+            self.minsize = minsize
+            self.maxsize = maxsize
+            self.predicate = predicate
+
+        def validate(self, value):
+            if not isinstance(value, str):
+                raise TypeError(f'Expected {value!r} to be an str')
+            if self.minsize is not None and len(value) < self.minsize:
+                raise ValueError(
+                    f'Expected {value!r} to be no smaller than {self.minsize!r}'
+                )
+            if self.maxsize is not None and len(value) > self.maxsize:
+                raise ValueError(
+                    f'Expected {value!r} to be no bigger than {self.maxsize!r}'
+                )
+            if self.predicate is not None and not self.predicate(value):
+                raise ValueError(
+                    f'Expected {self.predicate} to be true for {value!r}'
+                )
+
+
+Practical application
+---------------------
+
+Here's how the data validators can be used in a real class:
+
+.. testcode::
+
+    class Component:
+
+        name = String(minsize=3, maxsize=10, predicate=str.isupper)
+        kind = OneOf('wood', 'metal', 'plastic')
+        quantity = Number(minvalue=0)
+
+        def __init__(self, name, kind, quantity):
+            self.name = name
+            self.kind = kind
+            self.quantity = quantity
+
+The descriptors prevent invalid instances from being created:
+
+.. doctest::
+
+    >>> Component('Widget', 'metal', 5)      # Blocked: 'Widget' is not all uppercase
+    Traceback (most recent call last):
+        ...
+    ValueError: Expected <method 'isupper' of 'str' objects> to be true for 'Widget'
+
+    >>> Component('WIDGET', 'metle', 5)      # Blocked: 'metle' is misspelled
+    Traceback (most recent call last):
+        ...
+    ValueError: Expected 'metle' to be one of {'metal', 'plastic', 'wood'}
+
+    >>> Component('WIDGET', 'metal', -5)     # Blocked: -5 is negative
+    Traceback (most recent call last):
+        ...
+    ValueError: Expected -5 to be at least 0
+    >>> Component('WIDGET', 'metal', 'V')    # Blocked: 'V' isn't a number
+    Traceback (most recent call last):
+        ...
+    TypeError: Expected 'V' to be an int or float
+
+    >>> c = Component('WIDGET', 'metal', 5)  # Allowed:  The inputs are valid
+
+
+Technical Tutorial
+^^^^^^^^^^^^^^^^^^
+
+What follows is a more technical tutorial for the mechanics and details of how
+descriptors work.
+
+
 Abstract
 --------
 
 Defines descriptors, summarizes the protocol, and shows how descriptors are
-called.  Examines a custom descriptor and several built-in Python descriptors
-including functions, properties, static methods, and class methods.  Shows how
-each works by giving a pure Python equivalent and a sample application.
+called.  Provides an example showing how object relational mappings work.
 
 Learning about descriptors not only provides access to a larger toolset, it
-creates a deeper understanding of how Python works and an appreciation for the
-elegance of its design.
+creates a deeper understanding of how Python works.
 
 
-Definition and Introduction
+Definition and introduction
 ---------------------------
 
-In general, a descriptor is an object attribute with "binding behavior", one
-whose attribute access has been overridden by methods in the descriptor
-protocol.  Those methods are :meth:`__get__`, :meth:`__set__`, and
-:meth:`__delete__`.  If any of those methods are defined for an object, it is
-said to be a descriptor.
+In general, a descriptor is an attribute value that has one of the methods in
+the descriptor protocol.  Those methods are :meth:`__get__`, :meth:`__set__`,
+and :meth:`__delete__`.  If any of those methods are defined for an the
+attribute, it is said to be a :term:`descriptor`.
 
 The default behavior for attribute access is to get, set, or delete the
 attribute from an object's dictionary.  For instance, ``a.x`` has a lookup chain
 starting with ``a.__dict__['x']``, then ``type(a).__dict__['x']``, and
-continuing through the base classes of ``type(a)`` excluding metaclasses. If the
+continuing through the method resolution order of ``type(a)``. If the
 looked-up value is an object defining one of the descriptor methods, then Python
 may override the default behavior and invoke the descriptor method instead.
 Where this occurs in the precedence chain depends on which descriptor methods
 were defined.
 
 Descriptors are a powerful, general purpose protocol.  They are the mechanism
-behind properties, methods, static methods, class methods, and :func:`super()`.
-They are used throughout Python itself to implement the new style classes
-introduced in version 2.2.  Descriptors simplify the underlying C-code and offer
-a flexible set of new tools for everyday Python programs.
+behind properties, methods, static methods, class methods, and
+:func:`super()`.  They are used throughout Python itself.  Descriptors
+simplify the underlying C code and offer a flexible set of new tools for
+everyday Python programs.
 
 
-Descriptor Protocol
+Descriptor protocol
 -------------------
 
 ``descr.__get__(self, obj, type=None) -> value``
@@ -60,7 +531,7 @@
 
 If an object defines :meth:`__set__` or :meth:`__delete__`, it is considered
 a data descriptor.  Descriptors that only define :meth:`__get__` are called
-non-data descriptors (they are typically used for methods but other uses are
+non-data descriptors (they are often used for methods but other uses are
 possible).
 
 Data and non-data descriptors differ in how overrides are calculated with
@@ -75,135 +546,385 @@
 placeholder is enough to make it a data descriptor.
 
 
-Invoking Descriptors
---------------------
+Overview of descriptor invocation
+---------------------------------
 
-A descriptor can be called directly by its method name.  For example,
-``d.__get__(obj)``.
+A descriptor can be called directly with ``desc.__get__(obj)`` or
+``desc.__get__(None, cls)``.
 
-Alternatively, it is more common for a descriptor to be invoked automatically
-upon attribute access.  For example, ``obj.d`` looks up ``d`` in the dictionary
-of ``obj``.  If ``d`` defines the method :meth:`__get__`, then ``d.__get__(obj)``
-is invoked according to the precedence rules listed below.
+But it is more common for a descriptor to be invoked automatically from
+attribute access.
 
-The details of invocation depend on whether ``obj`` is an object or a class.
+The expression ``obj.x`` looks up the attribute ``x`` in the chain of
+namespaces for ``obj``.  If the search finds a descriptor outside of the
+instance ``__dict__``, its :meth:`__get__` method is invoked according to the
+precedence rules listed below.
 
-For objects, the machinery is in :meth:`object.__getattribute__` which
-transforms ``b.x`` into ``type(b).__dict__['x'].__get__(b, type(b))``.  The
-implementation works through a precedence chain that gives data descriptors
-priority over instance variables, instance variables priority over non-data
-descriptors, and assigns lowest priority to :meth:`__getattr__` if provided.
-The full C implementation can be found in :c:func:`PyObject_GenericGetAttr()` in
-:source:`Objects/object.c`.
+The details of invocation depend on whether ``obj`` is an object, class, or
+instance of super.
 
-For classes, the machinery is in :meth:`type.__getattribute__` which transforms
-``B.x`` into ``B.__dict__['x'].__get__(None, B)``.  In pure Python, it looks
-like::
 
-    def __getattribute__(self, key):
-        "Emulate type_getattro() in Objects/typeobject.c"
-        v = object.__getattribute__(self, key)
-        if hasattr(v, '__get__'):
-            return v.__get__(None, self)
-        return v
+Invocation from an instance
+---------------------------
+
+Instance lookup scans through a chain of namespaces giving data descriptors
+the highest priority, followed by instance variables, then non-data
+descriptors, then class variables, and lastly :meth:`__getattr__` if it is
+provided.
+
+If a descriptor is found for ``a.x``, then it is invoked with:
+``desc.__get__(a, type(a))``.
+
+The logic for a dotted lookup is in :meth:`object.__getattribute__`.  Here is
+a pure Python equivalent:
+
+.. testcode::
+
+    def object_getattribute(obj, name):
+        "Emulate PyObject_GenericGetAttr() in Objects/object.c"
+        null = object()
+        objtype = type(obj)
+        cls_var = getattr(objtype, name, null)
+        descr_get = getattr(type(cls_var), '__get__', null)
+        if descr_get is not null:
+            if (hasattr(type(cls_var), '__set__')
+                or hasattr(type(cls_var), '__delete__')):
+                return descr_get(cls_var, obj, objtype)     # data descriptor
+        if hasattr(obj, '__dict__') and name in vars(obj):
+            return vars(obj)[name]                          # instance variable
+        if descr_get is not null:
+            return descr_get(cls_var, obj, objtype)         # non-data descriptor
+        if cls_var is not null:
+            return cls_var                                  # class variable
+        raise AttributeError(name)
+
+
+.. testcode::
+    :hide:
+
+    # Test the fidelity of object_getattribute() by comparing it with the
+    # normal object.__getattribute__().  The former will be accessed by
+    # square brackets and the latter by the dot operator.
+
+    class Object:
+
+        def __getitem__(obj, name):
+            try:
+                return object_getattribute(obj, name)
+            except AttributeError:
+                if not hasattr(type(obj), '__getattr__'):
+                    raise
+            return type(obj).__getattr__(obj, name)             # __getattr__
+
+    class DualOperator(Object):
+
+        x = 10
+
+        def __init__(self, z):
+            self.z = z
+
+        @property
+        def p2(self):
+            return 2 * self.x
+
+        @property
+        def p3(self):
+            return 3 * self.x
+
+        def m5(self, y):
+            return 5 * y
+
+        def m7(self, y):
+            return 7 * y
+
+        def __getattr__(self, name):
+            return ('getattr_hook', self, name)
+
+    class DualOperatorWithSlots:
+
+        __getitem__ = Object.__getitem__
+
+        __slots__ = ['z']
+
+        x = 15
+
+        def __init__(self, z):
+            self.z = z
+
+        @property
+        def p2(self):
+            return 2 * self.x
+
+        def m5(self, y):
+            return 5 * y
+
+        def __getattr__(self, name):
+            return ('getattr_hook', self, name)
+
+
+.. doctest::
+    :hide:
+
+    >>> a = DualOperator(11)
+    >>> vars(a).update(p3 = '_p3', m7 = '_m7')
+    >>> a.x == a['x'] == 10
+    True
+    >>> a.z == a['z'] == 11
+    True
+    >>> a.p2 == a['p2'] == 20
+    True
+    >>> a.p3 == a['p3'] == 30
+    True
+    >>> a.m5(100) == a.m5(100) == 500
+    True
+    >>> a.m7 == a['m7'] == '_m7'
+    True
+    >>> a.g == a['g'] == ('getattr_hook', a, 'g')
+    True
+
+    >>> b = DualOperatorWithSlots(22)
+    >>> b.x == b['x'] == 15
+    True
+    >>> b.z == b['z'] == 22
+    True
+    >>> b.p2 == b['p2'] == 30
+    True
+    >>> b.m5(200) == b['m5'](200) == 1000
+    True
+    >>> b.g == b['g'] == ('getattr_hook', b, 'g')
+    True
+
+
+Interestingly, attribute lookup doesn't call :meth:`object.__getattribute__`
+directly.  Instead, both the dot operator and the :func:`getattr` function
+perform attribute lookup by way of a helper function:
+
+.. testcode::
+
+    def getattr_hook(obj, name):
+        "Emulate slot_tp_getattr_hook() in Objects/typeobject.c"
+        try:
+            return obj.__getattribute__(name)
+        except AttributeError:
+            if not hasattr(type(obj), '__getattr__'):
+                raise
+        return type(obj).__getattr__(obj, name)             # __getattr__
+
+So if :meth:`__getattr__` exists, it is called whenever :meth:`__getattribute__`
+raises :exc:`AttributeError` (either directly or in one of the descriptor calls).
+
+Also, if a user calls :meth:`object.__getattribute__` directly, the
+:meth:`__getattr__` hook is bypassed entirely.
+
+
+Invocation from a class
+-----------------------
+
+The logic for a dotted lookup such as ``A.x`` is in
+:meth:`type.__getattribute__`.  The steps are similar to those for
+:meth:`object.__getattribute__` but the instance dictionary lookup is replaced
+by a search through the class's :term:`method resolution order`.
+
+If a descriptor is found, it is invoked with ``desc.__get__(None, A)``.
+
+The full C implementation can be found in :c:func:`type_getattro()` and
+:c:func:`_PyType_Lookup()` in :source:`Objects/typeobject.c`.
+
+
+Invocation from super
+---------------------
+
+The logic for super's dotted lookup is in the :meth:`__getattribute__` method for
+object returned by :class:`super()`.
+
+A dotted lookup such as ``super(A, obj).m`` searches ``obj.__class__.__mro__``
+for the base class ``B`` immediately following ``A`` and then returns
+``B.__dict__['m'].__get__(obj, A)``.  If not a descriptor, ``m`` is returned
+unchanged.
+
+The full C implementation can be found in :c:func:`super_getattro()` in
+:source:`Objects/typeobject.c`.  A pure Python equivalent can be found in
+`Guido's Tutorial
+<https://www.python.org/download/releases/2.2.3/descrintro/#cooperation>`_.
+
+
+Summary of invocation logic
+---------------------------
+
+The mechanism for descriptors is embedded in the :meth:`__getattribute__()`
+methods for :class:`object`, :class:`type`, and :func:`super`.
 
 The important points to remember are:
 
-* descriptors are invoked by the :meth:`__getattribute__` method
-* overriding :meth:`__getattribute__` prevents automatic descriptor calls
+* Descriptors are invoked by the :meth:`__getattribute__` method.
+
+* Classes inherit this machinery from :class:`object`, :class:`type`, or
+  :func:`super`.
+
+* Overriding :meth:`__getattribute__` prevents automatic descriptor calls
+  because all the descriptor logic is in that method.
+
 * :meth:`object.__getattribute__` and :meth:`type.__getattribute__` make
-  different calls to :meth:`__get__`.
-* data descriptors always override instance dictionaries.
-* non-data descriptors may be overridden by instance dictionaries.
+  different calls to :meth:`__get__`.  The first includes the instance and may
+  include the class.  The second puts in ``None`` for the instance and always
+  includes the class.
 
-The object returned by ``super()`` also has a custom :meth:`__getattribute__`
-method for invoking descriptors.  The attribute lookup ``super(B, obj).m`` searches
-``obj.__class__.__mro__`` for the base class ``A`` immediately following ``B``
-and then returns ``A.__dict__['m'].__get__(obj, B)``.  If not a descriptor,
-``m`` is returned unchanged.  If not in the dictionary, ``m`` reverts to a
-search using :meth:`object.__getattribute__`.
+* Data descriptors always override instance dictionaries.
 
-The implementation details are in :c:func:`super_getattro()` in
-:source:`Objects/typeobject.c`.  and a pure Python equivalent can be found in
-`Guido's Tutorial`_.
-
-.. _`Guido's Tutorial`: https://www.python.org/download/releases/2.2.3/descrintro/#cooperation
-
-The details above show that the mechanism for descriptors is embedded in the
-:meth:`__getattribute__()` methods for :class:`object`, :class:`type`, and
-:func:`super`.  Classes inherit this machinery when they derive from
-:class:`object` or if they have a meta-class providing similar functionality.
-Likewise, classes can turn-off descriptor invocation by overriding
-:meth:`__getattribute__()`.
+* Non-data descriptors may be overridden by instance dictionaries.
 
 
-Descriptor Example
-------------------
+Automatic name notification
+---------------------------
 
-The following code creates a class whose objects are data descriptors which
-print a message for each get or set.  Overriding :meth:`__getattribute__` is
-alternate approach that could do this for every attribute.  However, this
-descriptor is useful for monitoring just a few chosen attributes::
+Sometimes it is desirable for a descriptor to know what class variable name it
+was assigned to.  When a new class is created, the :class:`type` metaclass
+scans the dictionary of the new class.  If any of the entries are descriptors
+and if they define :meth:`__set_name__`, that method is called with two
+arguments.  The *owner* is the class where the descriptor is used, and the
+*name* is the class variable the descriptor was assigned to.
 
-    class RevealAccess(object):
-        """A data descriptor that sets and returns values
-           normally and prints a message logging their access.
-        """
+The implementation details are in :c:func:`type_new()` and
+:c:func:`set_names()` in :source:`Objects/typeobject.c`.
 
-        def __init__(self, initval=None, name='var'):
-            self.val = initval
-            self.name = name
+Since the update logic is in :meth:`type.__new__`, notifications only take
+place at the time of class creation.  If descriptors are added to the class
+afterwards, :meth:`__set_name__` will need to be called manually.
 
-        def __get__(self, obj, objtype):
-            print('Retrieving', self.name)
-            return self.val
 
-        def __set__(self, obj, val):
-            print('Updating', self.name)
-            self.val = val
+ORM example
+-----------
 
-    >>> class MyClass(object):
-    ...     x = RevealAccess(10, 'var "x"')
-    ...     y = 5
-    ...
-    >>> m = MyClass()
-    >>> m.x
-    Retrieving var "x"
-    10
-    >>> m.x = 20
-    Updating var "x"
-    >>> m.x
-    Retrieving var "x"
-    20
-    >>> m.y
-    5
+The following code is simplified skeleton showing how data descriptors could
+be used to implement an `object relational mapping
+<https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping>`_.
 
-The protocol is simple and offers exciting possibilities.  Several use cases are
-so common that they have been packaged into individual function calls.
-Properties, bound methods, static methods, and class methods are all
-based on the descriptor protocol.
+The essential idea is that the data is stored in an external database.  The
+Python instances only hold keys to the database's tables.  Descriptors take
+care of lookups or updates:
+
+.. testcode::
+
+    class Field:
+
+        def __set_name__(self, owner, name):
+            self.fetch = f'SELECT {name} FROM {owner.table} WHERE {owner.key}=?;'
+            self.store = f'UPDATE {owner.table} SET {name}=? WHERE {owner.key}=?;'
+
+        def __get__(self, obj, objtype=None):
+            return conn.execute(self.fetch, [obj.key]).fetchone()[0]
+
+        def __set__(self, obj, value):
+            conn.execute(self.store, [value, obj.key])
+            conn.commit()
+
+We can use the :class:`Field` class to define `models
+<https://en.wikipedia.org/wiki/Database_model>`_ that describe the schema for
+each table in a database:
+
+.. testcode::
+
+    class Movie:
+        table = 'Movies'                    # Table name
+        key = 'title'                       # Primary key
+        director = Field()
+        year = Field()
+
+        def __init__(self, key):
+            self.key = key
+
+    class Song:
+        table = 'Music'
+        key = 'title'
+        artist = Field()
+        year = Field()
+        genre = Field()
+
+        def __init__(self, key):
+            self.key = key
+
+To use the models, first connect to the database::
+
+    >>> import sqlite3
+    >>> conn = sqlite3.connect('entertainment.db')
+
+An interactive session shows how data is retrieved from the database and how
+it can be updated:
+
+.. testsetup::
+
+    song_data = [
+        ('Country Roads', 'John Denver', 1972),
+        ('Me and Bobby McGee', 'Janice Joplin', 1971),
+        ('Coal Miners Daughter', 'Loretta Lynn', 1970),
+    ]
+
+    movie_data = [
+        ('Star Wars', 'George Lucas', 1977),
+        ('Jaws', 'Steven Spielberg', 1975),
+        ('Aliens', 'James Cameron', 1986),
+    ]
+
+    import sqlite3
+
+    conn = sqlite3.connect(':memory:')
+    conn.execute('CREATE TABLE Music (title text, artist text, year integer);')
+    conn.execute('CREATE INDEX MusicNdx ON Music (title);')
+    conn.executemany('INSERT INTO Music VALUES (?, ?, ?);', song_data)
+    conn.execute('CREATE TABLE Movies (title text, director text, year integer);')
+    conn.execute('CREATE INDEX MovieNdx ON Music (title);')
+    conn.executemany('INSERT INTO Movies VALUES (?, ?, ?);', movie_data)
+    conn.commit()
+
+.. doctest::
+
+    >>> Movie('Star Wars').director
+    'George Lucas'
+    >>> jaws = Movie('Jaws')
+    >>> f'Released in {jaws.year} by {jaws.director}'
+    'Released in 1975 by Steven Spielberg'
+
+    >>> Song('Country Roads').artist
+    'John Denver'
+
+    >>> Movie('Star Wars').director = 'J.J. Abrams'
+    >>> Movie('Star Wars').director
+    'J.J. Abrams'
+
+
+Pure Python Equivalents
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The descriptor protocol is simple and offers exciting possibilities.  Several
+use cases are so common that they have been prepackaged into built-in tools.
+Properties, bound methods, static methods, class methods, and \_\_slots\_\_ are
+all based on the descriptor protocol.
 
 
 Properties
 ----------
 
 Calling :func:`property` is a succinct way of building a data descriptor that
-triggers function calls upon access to an attribute.  Its signature is::
+triggers a function call upon access to an attribute.  Its signature is::
 
-    property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
+    property(fget=None, fset=None, fdel=None, doc=None) -> property
 
-The documentation shows a typical use to define a managed attribute ``x``::
+The documentation shows a typical use to define a managed attribute ``x``:
 
-    class C(object):
+.. testcode::
+
+    class C:
         def getx(self): return self.__x
         def setx(self, value): self.__x = value
         def delx(self): del self.__x
         x = property(getx, setx, delx, "I'm the 'x' property.")
 
 To see how :func:`property` is implemented in terms of the descriptor protocol,
-here is a pure Python equivalent::
+here is a pure Python equivalent:
 
-    class Property(object):
+.. testcode::
+
+    class Property:
         "Emulate PyProperty_Type() in Objects/descrobject.c"
 
         def __init__(self, fget=None, fset=None, fdel=None, doc=None):
@@ -240,6 +961,57 @@
         def deleter(self, fdel):
             return type(self)(self.fget, self.fset, fdel, self.__doc__)
 
+.. testcode::
+    :hide:
+
+    # Verify the Property() emulation
+
+    class CC:
+        def getx(self):
+            return self.__x
+        def setx(self, value):
+            self.__x = value
+        def delx(self):
+            del self.__x
+        x = Property(getx, setx, delx, "I'm the 'x' property.")
+
+    # Now do it again but use the decorator style
+
+    class CCC:
+        @Property
+        def x(self):
+            return self.__x
+        @x.setter
+        def x(self, value):
+            self.__x = value
+        @x.deleter
+        def x(self):
+            del self.__x
+
+
+.. doctest::
+    :hide:
+
+    >>> cc = CC()
+    >>> hasattr(cc, 'x')
+    False
+    >>> cc.x = 33
+    >>> cc.x
+    33
+    >>> del cc.x
+    >>> hasattr(cc, 'x')
+    False
+
+    >>> ccc = CCC()
+    >>> hasattr(ccc, 'x')
+    False
+    >>> ccc.x = 333
+    >>> ccc.x == 333
+    True
+    >>> del ccc.x
+    >>> hasattr(ccc, 'x')
+    False
+
 The :func:`property` builtin helps whenever a user interface has granted
 attribute access and then subsequent changes require the intervention of a
 method.
@@ -248,102 +1020,137 @@
 ``Cell('b10').value``. Subsequent improvements to the program require the cell
 to be recalculated on every access; however, the programmer does not want to
 affect existing client code accessing the attribute directly.  The solution is
-to wrap access to the value attribute in a property data descriptor::
+to wrap access to the value attribute in a property data descriptor:
 
-    class Cell(object):
-        . . .
-        def getvalue(self):
+.. testcode::
+
+    class Cell:
+        ...
+
+        @property
+        def value(self):
             "Recalculate the cell before returning value"
             self.recalc()
             return self._value
-        value = property(getvalue)
+
+Either the built-in :func:`property` or our :func:`Property` equivalent would
+work in this example.
 
 
-Functions and Methods
+Functions and methods
 ---------------------
 
 Python's object oriented features are built upon a function based environment.
 Using non-data descriptors, the two are merged seamlessly.
 
-Class dictionaries store methods as functions.  In a class definition, methods
-are written using :keyword:`def` or :keyword:`lambda`, the usual tools for
-creating functions.  Methods only differ from regular functions in that the
-first argument is reserved for the object instance.  By Python convention, the
-instance reference is called *self* but may be called *this* or any other
-variable name.
+Functions stored in class dictionaries get turned into methods when invoked.
+Methods only differ from regular functions in that the object instance is
+prepended to the other arguments.  By convention, the instance is called
+*self* but could be called *this* or any other variable name.
 
-To support method calls, functions include the :meth:`__get__` method for
-binding methods during attribute access.  This means that all functions are
-non-data descriptors which return bound methods when they are invoked from an
-object.  In pure Python, it works like this::
+Methods can be created manually with :class:`types.MethodType` which is
+roughly equivalent to:
 
-    class Function(object):
-        . . .
+.. testcode::
+
+    class MethodType:
+        "Emulate Py_MethodType in Objects/classobject.c"
+
+        def __init__(self, func, obj):
+            self.__func__ = func
+            self.__self__ = obj
+
+        def __call__(self, *args, **kwargs):
+            func = self.__func__
+            obj = self.__self__
+            return func(obj, *args, **kwargs)
+
+To support automatic creation of methods, functions include the
+:meth:`__get__` method for binding methods during attribute access.  This
+means that functions are non-data descriptors that return bound methods
+during dotted lookup from an instance.  Here's how it works:
+
+.. testcode::
+
+    class Function:
+        ...
+
         def __get__(self, obj, objtype=None):
             "Simulate func_descr_get() in Objects/funcobject.c"
             if obj is None:
                 return self
-            return types.MethodType(self, obj)
+            return MethodType(self, obj)
 
-Running the interpreter shows how the function descriptor works in practice::
+Running the following class in the interpreter shows how the function
+descriptor works in practice:
 
-    >>> class D(object):
-    ...     def f(self, x):
-    ...         return x
-    ...
-    >>> d = D()
+.. testcode::
 
-    # Access through the class dictionary does not invoke __get__.
-    # It just returns the underlying function object.
-    >>> D.__dict__['f']
-    <function D.f at 0x00C45070>
+    class D:
+        def f(self, x):
+             return x
 
-    # Dotted access from a class calls __get__() which just returns
-    # the underlying function unchanged.
-    >>> D.f
-    <function D.f at 0x00C45070>
+The function has a :term:`qualified name` attribute to support introspection:
 
-    # The function has a __qualname__ attribute to support introspection
+.. doctest::
+
     >>> D.f.__qualname__
     'D.f'
 
-    # Dotted access from an instance calls __get__() which returns the
-    # function wrapped in a bound method object
+Accessing the function through the class dictionary does not invoke
+:meth:`__get__`.  Instead, it just returns the underlying function object::
+
+    >>> D.__dict__['f']
+    <function D.f at 0x00C45070>
+
+Dotted access from a class calls :meth:`__get__` which just returns the
+underlying function unchanged::
+
+    >>> D.f
+    <function D.f at 0x00C45070>
+
+The interesting behavior occurs during dotted access from an instance.  The
+dotted lookup calls :meth:`__get__` which returns a bound method object::
+
+    >>> d = D()
     >>> d.f
     <bound method D.f of <__main__.D object at 0x00B18C90>>
 
-    # Internally, the bound method stores the underlying function,
-    # the bound instance, and the class of the bound instance.
+Internally, the bound method stores the underlying function and the bound
+instance::
+
     >>> d.f.__func__
-    <function D.f at 0x1012e5ae8>
+    <function D.f at 0x00C45070>
+
     >>> d.f.__self__
     <__main__.D object at 0x1012e1f98>
-    >>> d.f.__class__
-    <class 'method'>
+
+If you have ever wondered where *self* comes from in regular methods or where
+*cls* comes from in class methods, this is it!
 
 
-Static Methods and Class Methods
---------------------------------
+Static methods
+--------------
 
 Non-data descriptors provide a simple mechanism for variations on the usual
 patterns of binding functions into methods.
 
 To recap, functions have a :meth:`__get__` method so that they can be converted
 to a method when accessed as attributes.  The non-data descriptor transforms an
-``obj.f(*args)`` call into ``f(obj, *args)``.  Calling ``klass.f(*args)``
+``obj.f(*args)`` call into ``f(obj, *args)``.  Calling ``cls.f(*args)``
 becomes ``f(*args)``.
 
 This chart summarizes the binding and its two most useful variants:
 
       +-----------------+----------------------+------------------+
       | Transformation  | Called from an       | Called from a    |
-      |                 | Object               | Class            |
+      |                 | object               | class            |
       +=================+======================+==================+
       | function        | f(obj, \*args)       | f(\*args)        |
       +-----------------+----------------------+------------------+
       | staticmethod    | f(\*args)            | f(\*args)        |
       +-----------------+----------------------+------------------+
-      | classmethod     | f(type(obj), \*args) | f(klass, \*args) |
+      | classmethod     | f(type(obj), \*args) | f(cls, \*args)   |
       +-----------------+----------------------+------------------+
 
 Static methods return the underlying function without changes.  Calling either
@@ -364,23 +1171,29 @@
 It can be called either from an object or the class:  ``s.erf(1.5) --> .9332`` or
 ``Sample.erf(1.5) --> .9332``.
 
-Since staticmethods return the underlying function with no changes, the example
-calls are unexciting::
+Since static methods return the underlying function with no changes, the
+example calls are unexciting:
 
-    >>> class E(object):
-    ...     def f(x):
-    ...         print(x)
-    ...     f = staticmethod(f)
-    ...
+.. testcode::
+
+    class E:
+        @staticmethod
+        def f(x):
+            print(x)
+
+.. doctest::
+
     >>> E.f(3)
     3
     >>> E().f(3)
     3
 
 Using the non-data descriptor protocol, a pure Python version of
-:func:`staticmethod` would look like this::
+:func:`staticmethod` would look like this:
 
-    class StaticMethod(object):
+.. doctest::
+
+    class StaticMethod:
         "Emulate PyStaticMethod_Type() in Objects/funcobject.c"
 
         def __init__(self, f):
@@ -389,55 +1202,361 @@
         def __get__(self, obj, objtype=None):
             return self.f
 
+
+Class methods
+-------------
+
 Unlike static methods, class methods prepend the class reference to the
 argument list before calling the function.  This format is the same
-for whether the caller is an object or a class::
+for whether the caller is an object or a class:
 
-    >>> class E(object):
-    ...     def f(klass, x):
-    ...         return klass.__name__, x
-    ...     f = classmethod(f)
-    ...
-    >>> print(E.f(3))
-    ('E', 3)
-    >>> print(E().f(3))
-    ('E', 3)
+.. testcode::
 
+    class F:
+        @classmethod
+        def f(cls, x):
+            return cls.__name__, x
 
-This behavior is useful whenever the function only needs to have a class
-reference and does not care about any underlying data.  One use for classmethods
-is to create alternate class constructors.  In Python 2.3, the classmethod
-:func:`dict.fromkeys` creates a new dictionary from a list of keys.  The pure
-Python equivalent is::
+.. doctest::
 
-    class Dict(object):
-        . . .
-        def fromkeys(klass, iterable, value=None):
+    >>> F.f(3)
+    ('F', 3)
+    >>> F().f(3)
+    ('F', 3)
+
+This behavior is useful whenever the method only needs to have a class
+reference and does not rely on data stored in a specific instance.  One use for
+class methods is to create alternate class constructors.  For example, the
+classmethod :func:`dict.fromkeys` creates a new dictionary from a list of
+keys.  The pure Python equivalent is:
+
+.. testcode::
+
+    class Dict(dict):
+        @classmethod
+        def fromkeys(cls, iterable, value=None):
             "Emulate dict_fromkeys() in Objects/dictobject.c"
-            d = klass()
+            d = cls()
             for key in iterable:
                 d[key] = value
             return d
-        fromkeys = classmethod(fromkeys)
 
-Now a new dictionary of unique keys can be constructed like this::
+Now a new dictionary of unique keys can be constructed like this:
 
-    >>> Dict.fromkeys('abracadabra')
-    {'a': None, 'r': None, 'b': None, 'c': None, 'd': None}
+.. doctest::
+
+    >>> d = Dict.fromkeys('abracadabra')
+    >>> type(d) is Dict
+    True
+    >>> d
+    {'a': None, 'b': None, 'r': None, 'c': None, 'd': None}
 
 Using the non-data descriptor protocol, a pure Python version of
-:func:`classmethod` would look like this::
+:func:`classmethod` would look like this:
 
-    class ClassMethod(object):
+.. testcode::
+
+    class ClassMethod:
         "Emulate PyClassMethod_Type() in Objects/funcobject.c"
 
         def __init__(self, f):
             self.f = f
 
-        def __get__(self, obj, klass=None):
-            if klass is None:
-                klass = type(obj)
-            def newfunc(*args):
-                return self.f(klass, *args)
-            return newfunc
+        def __get__(self, obj, cls=None):
+            if cls is None:
+                cls = type(obj)
+            if hasattr(obj, '__get__'):
+                return self.f.__get__(cls)
+            return MethodType(self.f, cls)
 
+.. testcode::
+    :hide:
+
+    # Verify the emulation works
+    class T:
+        @ClassMethod
+        def cm(cls, x, y):
+            return (cls, x, y)
+
+.. doctest::
+    :hide:
+
+    >>> T.cm(11, 22)
+    (<class 'T'>, 11, 22)
+
+    # Also call it from an instance
+    >>> t = T()
+    >>> t.cm(11, 22)
+    (<class 'T'>, 11, 22)
+
+The code path for ``hasattr(obj, '__get__')`` was added in Python 3.9 and
+makes it possible for :func:`classmethod` to support chained decorators.
+For example, a classmethod and property could be chained together:
+
+.. testcode::
+
+    class G:
+        @classmethod
+        @property
+        def __doc__(cls):
+            return f'A doc for {cls.__name__!r}'
+
+.. doctest::
+
+    >>> G.__doc__
+    "A doc for 'G'"
+
+
+Member objects and __slots__
+----------------------------
+
+When a class defines ``__slots__``, it replaces instance dictionaries with a
+fixed-length array of slot values.  From a user point of view that has
+several effects:
+
+1. Provides immediate detection of bugs due to misspelled attribute
+assignments.  Only attribute names specified in ``__slots__`` are allowed:
+
+.. testcode::
+
+        class Vehicle:
+            __slots__ = ('id_number', 'make', 'model')
+
+.. doctest::
+
+        >>> auto = Vehicle()
+        >>> auto.id_nubmer = 'VYE483814LQEX'
+        Traceback (most recent call last):
+            ...
+        AttributeError: 'Vehicle' object has no attribute 'id_nubmer'
+
+2. Helps create immutable objects where descriptors manage access to private
+attributes stored in ``__slots__``:
+
+.. testcode::
+
+    class Immutable:
+
+        __slots__ = ('_dept', '_name')          # Replace the instance dictionary
+
+        def __init__(self, dept, name):
+            self._dept = dept                   # Store to private attribute
+            self._name = name                   # Store to private attribute
+
+        @property                               # Read-only descriptor
+        def dept(self):
+            return self._dept
+
+        @property
+        def name(self):                         # Read-only descriptor
+            return self._name
+
+.. doctest::
+
+    >>> mark = Immutable('Botany', 'Mark Watney')
+    >>> mark.dept
+    'Botany'
+    >>> mark.dept = 'Space Pirate'
+    Traceback (most recent call last):
+        ...
+    AttributeError: can't set attribute
+    >>> mark.location = 'Mars'
+    Traceback (most recent call last):
+        ...
+    AttributeError: 'Immutable' object has no attribute 'location'
+
+3. Saves memory.  On a 64-bit Linux build, an instance with two attributes
+takes 48 bytes with ``__slots__`` and 152 bytes without.  This `flyweight
+design pattern <https://en.wikipedia.org/wiki/Flyweight_pattern>`_ likely only
+matters when a large number of instances are going to be created.
+
+4. Blocks tools like :func:`functools.cached_property` which require an
+instance dictionary to function correctly:
+
+.. testcode::
+
+    from functools import cached_property
+
+    class CP:
+        __slots__ = ()                          # Eliminates the instance dict
+
+        @cached_property                        # Requires an instance dict
+        def pi(self):
+            return 4 * sum((-1.0)**n / (2.0*n + 1.0)
+                           for n in reversed(range(100_000)))
+
+.. doctest::
+
+    >>> CP().pi
+    Traceback (most recent call last):
+      ...
+    TypeError: No '__dict__' attribute on 'CP' instance to cache 'pi' property.
+
+It is not possible to create an exact drop-in pure Python version of
+``__slots__`` because it requires direct access to C structures and control
+over object memory allocation.  However, we can build a mostly faithful
+simulation where the actual C structure for slots is emulated by a private
+``_slotvalues`` list.  Reads and writes to that private structure are managed
+by member descriptors:
+
+.. testcode::
+
+    null = object()
+
+    class Member:
+
+        def __init__(self, name, clsname, offset):
+            'Emulate PyMemberDef in Include/structmember.h'
+            # Also see descr_new() in Objects/descrobject.c
+            self.name = name
+            self.clsname = clsname
+            self.offset = offset
+
+        def __get__(self, obj, objtype=None):
+            'Emulate member_get() in Objects/descrobject.c'
+            # Also see PyMember_GetOne() in Python/structmember.c
+            value = obj._slotvalues[self.offset]
+            if value is null:
+                raise AttributeError(self.name)
+            return value
+
+        def __set__(self, obj, value):
+            'Emulate member_set() in Objects/descrobject.c'
+            obj._slotvalues[self.offset] = value
+
+        def __delete__(self, obj):
+            'Emulate member_delete() in Objects/descrobject.c'
+            value = obj._slotvalues[self.offset]
+            if value is null:
+                raise AttributeError(self.name)
+            obj._slotvalues[self.offset] = null
+
+        def __repr__(self):
+            'Emulate member_repr() in Objects/descrobject.c'
+            return f'<Member {self.name!r} of {self.clsname!r}>'
+
+The :meth:`type.__new__` method takes care of adding member objects to class
+variables:
+
+.. testcode::
+
+    class Type(type):
+        'Simulate how the type metaclass adds member objects for slots'
+
+        def __new__(mcls, clsname, bases, mapping):
+            'Emuluate type_new() in Objects/typeobject.c'
+            # type_new() calls PyTypeReady() which calls add_methods()
+            slot_names = mapping.get('slot_names', [])
+            for offset, name in enumerate(slot_names):
+                mapping[name] = Member(name, clsname, offset)
+            return type.__new__(mcls, clsname, bases, mapping)
+
+The :meth:`object.__new__` method takes care of creating instances that have
+slots instead of an instance dictionary.  Here is a rough simulation in pure
+Python:
+
+.. testcode::
+
+    class Object:
+        'Simulate how object.__new__() allocates memory for __slots__'
+
+        def __new__(cls, *args):
+            'Emulate object_new() in Objects/typeobject.c'
+            inst = super().__new__(cls)
+            if hasattr(cls, 'slot_names'):
+                empty_slots = [null] * len(cls.slot_names)
+                object.__setattr__(inst, '_slotvalues', empty_slots)
+            return inst
+
+        def __setattr__(self, name, value):
+            'Emulate _PyObject_GenericSetAttrWithDict() Objects/object.c'
+            cls = type(self)
+            if hasattr(cls, 'slot_names') and name not in cls.slot_names:
+                raise AttributeError(
+                    f'{type(self).__name__!r} object has no attribute {name!r}'
+                )
+            super().__setattr__(name, value)
+
+        def __delattr__(self, name):
+            'Emulate _PyObject_GenericSetAttrWithDict() Objects/object.c'
+            cls = type(self)
+            if hasattr(cls, 'slot_names') and name not in cls.slot_names:
+                raise AttributeError(
+                    f'{type(self).__name__!r} object has no attribute {name!r}'
+                )
+            super().__delattr__(name)
+
+To use the simulation in a real class, just inherit from :class:`Object` and
+set the :term:`metaclass` to :class:`Type`:
+
+.. testcode::
+
+    class H(Object, metaclass=Type):
+        'Instance variables stored in slots'
+
+        slot_names = ['x', 'y']
+
+        def __init__(self, x, y):
+            self.x = x
+            self.y = y
+
+At this point, the metaclass has loaded member objects for *x* and *y*::
+
+    >>> from pprint import pp
+    >>> pp(dict(vars(H)))
+    {'__module__': '__main__',
+     '__doc__': 'Instance variables stored in slots',
+     'slot_names': ['x', 'y'],
+     '__init__': <function H.__init__ at 0x7fb5d302f9d0>,
+     'x': <Member 'x' of 'H'>,
+     'y': <Member 'y' of 'H'>}
+
+.. doctest::
+    :hide:
+
+    # We test this separately because the preceding section is not
+    # doctestable due to the hex memory address for the __init__ function
+    >>> isinstance(vars(H)['x'], Member)
+    True
+    >>> isinstance(vars(H)['y'], Member)
+    True
+
+When instances are created, they have a ``slot_values`` list where the
+attributes are stored:
+
+.. doctest::
+
+    >>> h = H(10, 20)
+    >>> vars(h)
+    {'_slotvalues': [10, 20]}
+    >>> h.x = 55
+    >>> vars(h)
+    {'_slotvalues': [55, 20]}
+
+Misspelled or unassigned attributes will raise an exception:
+
+.. doctest::
+
+    >>> h.xz
+    Traceback (most recent call last):
+        ...
+    AttributeError: 'H' object has no attribute 'xz'
+
+.. doctest::
+   :hide:
+
+    # Examples for deleted attributes are not shown because this section
+    # is already a bit lengthy.  We still test that code here.
+    >>> del h.x
+    >>> hasattr(h, 'x')
+    False
+
+    # Also test the code for uninitialized slots
+    >>> class HU(Object, metaclass=Type):
+    ...     slot_names = ['x', 'y']
+    ...
+    >>> hu = HU()
+    >>> hasattr(hu, 'x')
+    False
+    >>> hasattr(hu, 'y')
+    False
diff --git a/Doc/howto/instrumentation.rst b/Doc/howto/instrumentation.rst
index 909deb5..f0081e4 100644
--- a/Doc/howto/instrumentation.rst
+++ b/Doc/howto/instrumentation.rst
@@ -272,9 +272,7 @@
 Available static markers
 ------------------------
 
-.. I'm reusing the "c:function" type for markers
-
-.. c:function:: function__entry(str filename, str funcname, int lineno)
+.. object:: function__entry(str filename, str funcname, int lineno)
 
    This marker indicates that execution of a Python function has begun.
    It is only triggered for pure-Python (bytecode) functions.
@@ -290,7 +288,7 @@
 
        * ``$arg3`` : ``int`` line number
 
-.. c:function:: function__return(str filename, str funcname, int lineno)
+.. object:: function__return(str filename, str funcname, int lineno)
 
    This marker is the converse of :c:func:`function__entry`, and indicates that
    execution of a Python function has ended (either via ``return``, or via an
@@ -298,7 +296,7 @@
 
    The arguments are the same as for :c:func:`function__entry`
 
-.. c:function:: line(str filename, str funcname, int lineno)
+.. object:: line(str filename, str funcname, int lineno)
 
    This marker indicates a Python line is about to be executed.  It is
    the equivalent of line-by-line tracing with a Python profiler.  It is
@@ -306,24 +304,24 @@
 
    The arguments are the same as for :c:func:`function__entry`.
 
-.. c:function:: gc__start(int generation)
+.. object:: gc__start(int generation)
 
    Fires when the Python interpreter starts a garbage collection cycle.
    ``arg0`` is the generation to scan, like :func:`gc.collect()`.
 
-.. c:function:: gc__done(long collected)
+.. object:: gc__done(long collected)
 
    Fires when the Python interpreter finishes a garbage collection
    cycle. ``arg0`` is the number of collected objects.
 
-.. c:function:: import__find__load__start(str modulename)
+.. object:: import__find__load__start(str modulename)
 
    Fires before :mod:`importlib` attempts to find and load the module.
    ``arg0`` is the module name.
 
    .. versionadded:: 3.7
 
-.. c:function:: import__find__load__done(str modulename, int found)
+.. object:: import__find__load__done(str modulename, int found)
 
    Fires after :mod:`importlib`'s find_and_load function is called.
    ``arg0`` is the module name, ``arg1`` indicates if module was
@@ -332,7 +330,7 @@
    .. versionadded:: 3.7
 
 
-.. c:function:: audit(str event, void *tuple)
+.. object:: audit(str event, void *tuple)
 
    Fires when :func:`sys.audit` or :c:func:`PySys_Audit` is called.
    ``arg0`` is the event name as C string, ``arg1`` is a :c:type:`PyObject`
@@ -375,14 +373,14 @@
 ``/usr/share/systemtap/tapset``), then these additional probepoints become
 available:
 
-.. c:function:: python.function.entry(str filename, str funcname, int lineno, frameptr)
+.. object:: python.function.entry(str filename, str funcname, int lineno, frameptr)
 
    This probe point indicates that execution of a Python function has begun.
    It is only triggered for pure-Python (bytecode) functions.
 
-.. c:function:: python.function.return(str filename, str funcname, int lineno, frameptr)
+.. object:: python.function.return(str filename, str funcname, int lineno, frameptr)
 
-   This probe point is the converse of :c:func:`python.function.return`, and
+   This probe point is the converse of ``python.function.return``, and
    indicates that execution of a Python function has ended (either via
    ``return``, or via an exception).  It is only triggered for pure-Python
    (bytecode) functions.
diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst
index 17f4ff6..de0f834 100644
--- a/Doc/howto/logging-cookbook.rst
+++ b/Doc/howto/logging-cookbook.rst
@@ -1368,7 +1368,7 @@
 -----------------------------------------
 
 Below is an example of a logging configuration dictionary - it's taken from
-the `documentation on the Django project <https://docs.djangoproject.com/en/1.9/topics/logging/#configuring-logging>`_.
+the `documentation on the Django project <https://docs.djangoproject.com/en/stable/topics/logging/#configuring-logging>`_.
 This dictionary is passed to :func:`~config.dictConfig` to put the configuration into effect::
 
     LOGGING = {
@@ -1424,7 +1424,7 @@
     }
 
 For more information about this configuration, you can see the `relevant
-section <https://docs.djangoproject.com/en/1.9/topics/logging/#configuring-logging>`_
+section <https://docs.djangoproject.com/en/stable/topics/logging/#configuring-logging>`_
 of the Django documentation.
 
 .. _cookbook-rotator-namer:
diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst
index 7a68ca8..6316e08 100644
--- a/Doc/howto/logging.rst
+++ b/Doc/howto/logging.rst
@@ -128,10 +128,18 @@
 interpreter, and don't just continue from the session described above::
 
    import logging
-   logging.basicConfig(filename='example.log',level=logging.DEBUG)
+   logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this, too')
+   logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
+
+.. versionchanged:: 3.9
+   The *encoding* argument was added. In earlier Python versions, or if not
+   specified, the encoding used is the default value used by :func:`open`. While
+   not shown in the above example, an *errors* argument can also now be passed,
+   which determines how encoding errors are handled. For available values and
+   the default, see the documentation for :func:`open`.
 
 And now if we open the file and look at what we have, we should find the log
 messages:
@@ -141,6 +149,7 @@
    DEBUG:root:This message should go to the log file
    INFO:root:So should this
    WARNING:root:And this, too
+   ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
 
 This example also shows how you can set the logging level which acts as the
 threshold for tracking. In this case, because we set the threshold to
@@ -1077,8 +1086,7 @@
 |                                               | :func:`sys._getframe`, which may help  |
 |                                               | to speed up your code in environments  |
 |                                               | like PyPy (which can't speed up code   |
-|                                               | that uses :func:`sys._getframe`), if   |
-|                                               | and when PyPy supports Python 3.x.     |
+|                                               | that uses :func:`sys._getframe`).      |
 +-----------------------------------------------+----------------------------------------+
 | Threading information.                        | Set ``logging.logThreads`` to ``0``.   |
 +-----------------------------------------------+----------------------------------------+
diff --git a/Doc/howto/pyporting.rst b/Doc/howto/pyporting.rst
index 8608162..1543823 100644
--- a/Doc/howto/pyporting.rst
+++ b/Doc/howto/pyporting.rst
@@ -31,20 +31,26 @@
 
 #. Only worry about supporting Python 2.7
 #. Make sure you have good test coverage (coverage.py_ can help;
-   ``pip install coverage``)
+   ``python -m pip install coverage``)
 #. Learn the differences between Python 2 & 3
-#. Use Futurize_ (or Modernize_) to update your code (e.g. ``pip install future``)
+#. Use Futurize_ (or Modernize_) to update your code (e.g. ``python -m pip install future``)
 #. Use Pylint_ to help make sure you don't regress on your Python 3 support
-   (``pip install pylint``)
+   (``python -m pip install pylint``)
 #. Use caniusepython3_ to find out which of your dependencies are blocking your
-   use of Python 3 (``pip install caniusepython3``)
+   use of Python 3 (``python -m pip install caniusepython3``)
 #. Once your dependencies are no longer blocking you, use continuous integration
    to make sure you stay compatible with Python 2 & 3 (tox_ can help test
-   against multiple versions of Python; ``pip install tox``)
+   against multiple versions of Python; ``python -m pip install tox``)
 #. Consider using optional static type checking to make sure your type usage
    works in both Python 2 & 3 (e.g. use mypy_ to check your typing under both
-   Python 2 & Python 3).
+   Python 2 & Python 3; ``python -m pip install mypy``).
 
+.. note::
+
+   Note: Using ``python -m pip install`` guarantees that the ``pip`` you invoke
+   is the one installed for the Python currently in use, whether it be
+   a system-wide ``pip`` or one installed within a
+   :ref:`virtual environment <tut-venv>`.
 
 Details
 =======
@@ -71,7 +77,7 @@
 While you can make Python 2.5 work with Python 3, it is **much** easier if you
 only have to work with Python 2.7. If dropping Python 2.5 is not an
 option then the six_ project can help you support Python 2.5 & 3 simultaneously
-(``pip install six``). Do realize, though, that nearly all the projects listed
+(``python -m pip install six``). Do realize, though, that nearly all the projects listed
 in this HOWTO will not be available to you.
 
 If you are able to skip Python 2.5 and older, then the required changes
diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst
index b5c2152..d6ed128 100644
--- a/Doc/howto/sockets.rst
+++ b/Doc/howto/sockets.rst
@@ -317,7 +317,7 @@
 much the same ways. It's just that, if you do it right, your app will be almost
 inside-out.
 
-In Python, you use ``socket.setblocking(0)`` to make it non-blocking. In C, it's
+In Python, you use ``socket.setblocking(False)`` to make it non-blocking. In C, it's
 more complex, (for one thing, you'll need to choose between the BSD flavor
 ``O_NONBLOCK`` and the almost indistinguishable POSIX flavor ``O_NDELAY``, which
 is completely different from ``TCP_NODELAY``), but it's the exact same idea. You
diff --git a/Doc/howto/sorting.rst b/Doc/howto/sorting.rst
index 1d6d5c4..a8efe65 100644
--- a/Doc/howto/sorting.rst
+++ b/Doc/howto/sorting.rst
@@ -43,16 +43,18 @@
 =============
 
 Both :meth:`list.sort` and :func:`sorted` have a *key* parameter to specify a
-function to be called on each list element prior to making comparisons.
+function (or other callable) to be called on each list element prior to making
+comparisons.
 
 For example, here's a case-insensitive string comparison:
 
     >>> sorted("This is a test string from Andrew".split(), key=str.lower)
     ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
 
-The value of the *key* parameter should be a function that takes a single argument
-and returns a key to use for sorting purposes. This technique is fast because
-the key function is called exactly once for each input record.
+The value of the *key* parameter should be a function (or other callable) that
+takes a single argument and returns a key to use for sorting purposes. This
+technique is fast because the key function is called exactly once for each
+input record.
 
 A common pattern is to sort complex objects using some of the object's indices
 as keys. For example:
diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst
index 51bd64b..e948c1e 100644
--- a/Doc/howto/unicode.rst
+++ b/Doc/howto/unicode.rst
@@ -41,8 +41,9 @@
 
 The Unicode standard describes how characters are represented by
 **code points**.  A code point value is an integer in the range 0 to
-0x10FFFF (about 1.1 million values, with some 110 thousand assigned so
-far).  In the standard and in this document, a code point is written
+0x10FFFF (about 1.1 million values, the
+`actual number assigned <https://www.unicode.org/versions/latest/#Summary>`_
+is less than that). In the standard and in this document, a code point is written
 using the notation ``U+265E`` to mean the character with value
 ``0x265e`` (9,822 in decimal).
 
@@ -156,9 +157,9 @@
 References
 ----------
 
-The `Unicode Consortium site <http://www.unicode.org>`_ has character charts, a
+The `Unicode Consortium site <https://www.unicode.org>`_ has character charts, a
 glossary, and PDF versions of the Unicode specification.  Be prepared for some
-difficult reading.  `A chronology <http://www.unicode.org/history/>`_ of the
+difficult reading.  `A chronology <https://www.unicode.org/history/>`_ of the
 origin and development of Unicode is also available on the site.
 
 On the Computerphile Youtube channel, Tom Scott briefly
@@ -393,7 +394,7 @@
 from the above output, ``'Ll'`` means 'Letter, lowercase', ``'No'`` means
 "Number, other", ``'Mn'`` is "Mark, nonspacing", and ``'So'`` is "Symbol,
 other".  See
-`the General Category Values section of the Unicode Character Database documentation <http://www.unicode.org/reports/tr44/#General_Category_Values>`_ for a
+`the General Category Values section of the Unicode Character Database documentation <https://www.unicode.org/reports/tr44/#General_Category_Values>`_ for a
 list of category codes.
 
 
diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst
index c3ff3e60..1d7bd26 100644
--- a/Doc/library/2to3.rst
+++ b/Doc/library/2to3.rst
@@ -9,9 +9,7 @@
 of *fixers* to transform it into valid Python 3.x code.  The standard library
 contains a rich set of fixers that will handle almost all code.  2to3 supporting
 library :mod:`lib2to3` is, however, a flexible and generic library, so it is
-possible to write your own fixers for 2to3.  :mod:`lib2to3` could also be
-adapted to custom applications in which Python code needs to be edited
-automatically.
+possible to write your own fixers for 2to3.
 
 
 .. _2to3-using:
@@ -102,7 +100,7 @@
 modifies its internal grammar to interpret :func:`print` as a function.  This
 change can also be enabled manually with the :option:`!-p` flag.  Use
 :option:`!-p` to run fixers on code that already has had its print statements
-converted.
+converted. Also :option:`!-e` can be used to make :func:`exec` a function.
 
 The :option:`!-o` or :option:`!--output-dir` option allows specification of an
 alternate directory for processed output files to be written to.  The
@@ -466,9 +464,17 @@
 
 --------------
 
+.. deprecated:: 3.10
+   Python 3.9 will switch to a PEG parser (see :pep:`617`), and Python 3.10 may
+   include new language syntax that is not parsable by lib2to3's LL(1) parser.
+   The ``lib2to3`` module may be removed from the standard library in a future
+   Python version. Consider third-party alternatives such as `LibCST`_ or
+   `parso`_.
+
 .. note::
 
    The :mod:`lib2to3` API should be considered unstable and may change
    drastically in the future.
 
-.. XXX What is the public interface anyway?
+.. _LibCST: https://libcst.readthedocs.io/
+.. _parso: https://parso.readthedocs.io/
diff --git a/Doc/library/__future__.rst b/Doc/library/__future__.rst
index e3d749e..4139994 100644
--- a/Doc/library/__future__.rst
+++ b/Doc/library/__future__.rst
@@ -90,7 +90,7 @@
 | generator_stop   | 3.5.0b1     | 3.7          | :pep:`479`:                                 |
 |                  |             |              | *StopIteration handling inside generators*  |
 +------------------+-------------+--------------+---------------------------------------------+
-| annotations      | 3.7.0b1     | 4.0          | :pep:`563`:                                 |
+| annotations      | 3.7.0b1     | 3.10         | :pep:`563`:                                 |
 |                  |             |              | *Postponed evaluation of annotations*       |
 +------------------+-------------+--------------+---------------------------------------------+
 
diff --git a/Doc/library/_dummy_thread.rst b/Doc/library/_dummy_thread.rst
deleted file mode 100644
index 7dccbc5..0000000
--- a/Doc/library/_dummy_thread.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-:mod:`_dummy_thread` --- Drop-in replacement for the :mod:`_thread` module
-==========================================================================
-
-.. module:: _dummy_thread
-   :synopsis: Drop-in replacement for the _thread module.
-
-**Source code:** :source:`Lib/_dummy_thread.py`
-
-.. deprecated:: 3.7
-   Python now always has threading enabled.  Please use :mod:`_thread`
-   (or, better, :mod:`threading`) instead.
-
---------------
-
-This module provides a duplicate interface to the :mod:`_thread` module.
-It was meant to be imported when the :mod:`_thread` module was not provided
-on a platform.
-
-Be careful to not use this module where deadlock might occur from a thread being
-created that blocks waiting for another thread to be created.  This often occurs
-with blocking I/O.
-
diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst
index 7328907..2e917cf 100644
--- a/Doc/library/aifc.rst
+++ b/Doc/library/aifc.rst
@@ -208,6 +208,7 @@
 
 
 .. method:: aifc.tell()
+   :noindex:
 
    Return the current write position in the output file.  Useful in combination
    with :meth:`setmark`.
@@ -232,6 +233,7 @@
 
 
 .. method:: aifc.close()
+   :noindex:
 
    Close the AIFF file.  The header of the file is updated to reflect the actual
    size of the audio data. After calling this method, the object can no longer be
diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index e1b28e3..02cd70f 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -142,7 +142,7 @@
                           formatter_class=argparse.HelpFormatter, \
                           prefix_chars='-', fromfile_prefix_chars=None, \
                           argument_default=None, conflict_handler='error', \
-                          add_help=True, allow_abbrev=True)
+                          add_help=True, allow_abbrev=True, exit_on_error=True)
 
    Create a new :class:`ArgumentParser` object. All parameters should be passed
    as keyword arguments. Each parameter has its own more detailed description
@@ -179,6 +179,9 @@
    * allow_abbrev_ - Allows long options to be abbreviated if the
      abbreviation is unambiguous. (default: ``True``)
 
+   * exit_on_error_ - Determines whether or not ArgumentParser exits with
+     error info when an error occurs. (default: ``True``)
+
    .. versionchanged:: 3.5
       *allow_abbrev* parameter was added.
 
@@ -186,6 +189,9 @@
       In previous versions, *allow_abbrev* also disabled grouping of short
       flags such as ``-vv`` to mean ``-v -v``.
 
+   .. versionchanged:: 3.9
+      *exit_on_error* parameter was added.
+
 The following sections describe how each of these are used.
 
 
@@ -443,7 +449,7 @@
    >>> parser.add_argument('--foo', type=int, default=42, help='FOO!')
    >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')
    >>> parser.print_help()
-   usage: PROG [-h] [--foo FOO] [bar [bar ...]]
+   usage: PROG [-h] [--foo FOO] [bar ...]
 
    positional arguments:
     bar         BAR! (default: [1, 2, 3])
@@ -647,6 +653,28 @@
      +h, ++help  show this help message and exit
 
 
+exit_on_error
+^^^^^^^^^^^^^
+
+Normally, when you pass an invalid argument list to the :meth:`~ArgumentParser.parse_args`
+method of an :class:`ArgumentParser`, it will exit with error info.
+
+If the user would like catch errors manually, the feature can be enable by setting
+``exit_on_error`` to ``False``::
+
+   >>> parser = argparse.ArgumentParser(exit_on_error=False)
+   >>> parser.add_argument('--integers', type=int)
+   _StoreAction(option_strings=['--integers'], dest='integers', nargs=None, const=None, default=None, type=<class 'int'>, choices=None, help=None, metavar=None)
+   >>> try:
+   ...     parser.parse_args('--integers a'.split())
+   ... except argparse.ArgumentError:
+   ...     print('Catching an argumentError')
+   ...
+   Catching an argumentError
+
+.. versionadded:: 3.9
+
+
 The add_argument() method
 -------------------------
 
@@ -668,7 +696,7 @@
    * const_ - A constant value required by some action_ and nargs_ selections.
 
    * default_ - The value produced if the argument is absent from the
-     command line.
+     command line and if it is absent from the namespace object.
 
    * type_ - The type to which the command-line argument should be converted.
 
@@ -815,9 +843,19 @@
   .. versionadded:: 3.8
 
 You may also specify an arbitrary action by passing an Action subclass or
-other object that implements the same interface.  The recommended way to do
-this is to extend :class:`Action`, overriding the ``__call__`` method
-and optionally the ``__init__`` method.
+other object that implements the same interface. The ``BooleanOptionalAction``
+is available in ``argparse`` and adds support for boolean actions such as
+``--foo`` and ``--no-foo``::
+
+    >>> import argparse
+    >>> parser = argparse.ArgumentParser()
+    >>> parser.add_argument('--foo', action=argparse.BooleanOptionalAction)
+    >>> parser.parse_args(['--no-foo'])
+    Namespace(foo=False)
+
+The recommended way to create a custom action is to extend :class:`Action`,
+overriding the ``__call__`` method and optionally the ``__init__`` and
+``format_usage`` methods.
 
 An example of a custom action::
 
@@ -923,19 +961,6 @@
      usage: PROG [-h] foo [foo ...]
      PROG: error: the following arguments are required: foo
 
-.. _`argparse.REMAINDER`:
-
-* ``argparse.REMAINDER``.  All the remaining command-line arguments are gathered
-  into a list.  This is commonly useful for command line utilities that dispatch
-  to other command line utilities::
-
-     >>> parser = argparse.ArgumentParser(prog='PROG')
-     >>> parser.add_argument('--foo')
-     >>> parser.add_argument('command')
-     >>> parser.add_argument('args', nargs=argparse.REMAINDER)
-     >>> print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))
-     Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')
-
 If the ``nargs`` keyword argument is not provided, the number of arguments consumed
 is determined by the action_.  Generally this means a single command-line argument
 will be consumed and a single item (not a list) will be produced.
@@ -981,6 +1006,14 @@
    >>> parser.parse_args([])
    Namespace(foo=42)
 
+If the target namespace already has an attribute set, the action *default*
+will not over write it::
+
+   >>> parser = argparse.ArgumentParser()
+   >>> parser.add_argument('--foo', default=42)
+   >>> parser.parse_args([], namespace=argparse.Namespace(foo=101))
+   Namespace(foo=101)
+
 If the ``default`` value is a string, the parser parses the value as if it
 were a command-line argument.  In particular, the parser applies any type_
 conversion argument, if provided, before setting the attribute on the
@@ -1109,6 +1142,9 @@
 Any container can be passed as the *choices* value, so :class:`list` objects,
 :class:`set` objects, and custom containers are all supported.
 
+Use of :class:`enum.Enum` is not recommended because it is difficult to
+control its appearance in usage, help, and error messages.
+
 
 required
 ^^^^^^^^
@@ -1123,8 +1159,8 @@
    >>> parser.parse_args(['--foo', 'BAR'])
    Namespace(foo='BAR')
    >>> parser.parse_args([])
-   usage: argparse.py [-h] [--foo FOO]
-   argparse.py: error: option --foo is required
+   usage: [-h] --foo FOO
+   : error: the following arguments are required: --foo
 
 As the example shows, if an option is marked as ``required``,
 :meth:`~ArgumentParser.parse_args` will report an error if that option is not
@@ -1337,6 +1373,9 @@
 The ``__call__`` method may perform arbitrary actions, but will typically set
 attributes on the ``namespace`` based on ``dest`` and ``values``.
 
+Action subclasses can define a ``format_usage`` method that takes no argument
+and return a string which will be used when printing the usage of the program.
+If such method is not provided, a sensible default will be used.
 
 The parse_args() method
 -----------------------
diff --git a/Doc/library/array.rst b/Doc/library/array.rst
index 6809c51..7802073 100644
--- a/Doc/library/array.rst
+++ b/Doc/library/array.rst
@@ -22,7 +22,7 @@
 +-----------+--------------------+-------------------+-----------------------+-------+
 | ``'B'``   | unsigned char      | int               | 1                     |       |
 +-----------+--------------------+-------------------+-----------------------+-------+
-| ``'u'``   | Py_UNICODE         | Unicode character | 2                     | \(1)  |
+| ``'u'``   | wchar_t            | Unicode character | 2                     | \(1)  |
 +-----------+--------------------+-------------------+-----------------------+-------+
 | ``'h'``   | signed short       | int               | 2                     |       |
 +-----------+--------------------+-------------------+-----------------------+-------+
@@ -48,15 +48,16 @@
 Notes:
 
 (1)
-   The ``'u'`` type code corresponds to Python's obsolete unicode character
-   (:c:type:`Py_UNICODE` which is :c:type:`wchar_t`). Depending on the
-   platform, it can be 16 bits or 32 bits.
+   It can be 16 bits or 32 bits depending on the platform.
 
-   ``'u'`` will be removed together with the rest of the :c:type:`Py_UNICODE`
-   API.
+   .. versionchanged:: 3.9
+      ``array('u')`` now uses ``wchar_t`` as C type instead of deprecated
+      ``Py_UNICODE``. This change doesn't affect to its behavior because
+      ``Py_UNICODE`` is alias of ``wchar_t`` since Python 3.3.
 
    .. deprecated-removed:: 3.3 4.0
 
+
 The actual representation of values is determined by the machine architecture
 (strictly speaking, by the C implementation).  The actual size can be accessed
 through the :attr:`itemsize` attribute.
@@ -169,13 +170,6 @@
    a.append(x)`` except that if there is a type error, the array is unchanged.
 
 
-.. method:: array.fromstring()
-
-   Deprecated alias for :meth:`frombytes`.
-
-   .. deprecated-removed:: 3.2 3.9
-
-
 .. method:: array.fromunicode(s)
 
    Extends this array with data from the given unicode string.  The array must
@@ -233,13 +227,6 @@
    Convert the array to an ordinary list with the same items.
 
 
-.. method:: array.tostring()
-
-   Deprecated alias for :meth:`tobytes`.
-
-   .. deprecated-removed:: 3.2 3.9
-
-
 .. method:: array.tounicode()
 
    Convert the array to a unicode string.  The array must be a type ``'u'`` array;
diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst
index 6ca2760..95cb017 100644
--- a/Doc/library/ast.rst
+++ b/Doc/library/ast.rst
@@ -7,6 +7,10 @@
 .. sectionauthor:: Martin v. Löwis <martin@v.loewis.de>
 .. sectionauthor:: Georg Brandl <georg@python.org>
 
+.. testsetup::
+
+    import ast
+
 **Source code:** :source:`Lib/ast.py`
 
 --------------
@@ -23,6 +27,17 @@
 compiled into a Python code object using the built-in :func:`compile` function.
 
 
+.. _abstract-grammar:
+
+Abstract Grammar
+----------------
+
+The abstract grammar is currently defined as follows:
+
+.. literalinclude:: ../../Parser/Python.asdl
+   :language: asdl
+
+
 Node classes
 ------------
 
@@ -105,23 +120,1395 @@
 
    Class :class:`ast.Constant` is now used for all constants.
 
+.. versionchanged:: 3.9
+
+   Simple indices are represented by their value, extended slices are
+   represented as tuples.
+
 .. deprecated:: 3.8
 
    Old classes :class:`ast.Num`, :class:`ast.Str`, :class:`ast.Bytes`,
    :class:`ast.NameConstant` and :class:`ast.Ellipsis` are still available,
-   but they will be removed in future Python releases.  In the meanwhile,
+   but they will be removed in future Python releases.  In the meantime,
    instantiating them will return an instance of a different class.
 
+.. deprecated:: 3.9
 
-.. _abstract-grammar:
+   Old classes :class:`ast.Index` and :class:`ast.ExtSlice` are still
+   available, but they will be removed in future Python releases.
+   In the meantime, instantiating them will return an instance of
+   a different class.
 
-Abstract Grammar
-----------------
 
-The abstract grammar is currently defined as follows:
+Literals
+^^^^^^^^
 
-.. literalinclude:: ../../Parser/Python.asdl
-   :language: none
+.. class:: Constant(value)
+
+   A constant value. The ``value`` attribute of the ``Constant`` literal contains the
+   Python object it represents. The values represented can be simple types
+   such as a number, string or ``None``, but also immutable container types
+   (tuples and frozensets) if all of their elements are constant.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('123', mode='eval'), indent=4))
+        Expression(
+            body=Constant(value=123))
+
+
+.. class:: FormattedValue(value, conversion, format_spec)
+
+   Node representing a single formatting field in an f-string. If the string
+   contains a single formatting field and nothing else the node can be
+   isolated otherwise it appears in :class:`JoinedStr`.
+
+   * ``value`` is any expression node (such as a literal, a variable, or a
+     function call).
+   * ``conversion`` is an integer:
+
+     * -1: no formatting
+     * 115: ``!s`` string formatting
+     * 114: ``!r`` repr formatting
+     * 97: ``!a`` ascii formatting
+
+   * ``format_spec`` is a :class:`JoinedStr` node representing the formatting
+     of the value, or ``None`` if no format was specified. Both
+     ``conversion`` and ``format_spec`` can be set at the same time.
+
+
+.. class:: JoinedStr(values)
+
+   An f-string, comprising a series of :class:`FormattedValue` and :class:`Constant`
+   nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('f"sin({a}) is {sin(a):.3}"', mode='eval'), indent=4))
+        Expression(
+            body=JoinedStr(
+                values=[
+                    Constant(value='sin('),
+                    FormattedValue(
+                        value=Name(id='a', ctx=Load()),
+                        conversion=-1),
+                    Constant(value=') is '),
+                    FormattedValue(
+                        value=Call(
+                            func=Name(id='sin', ctx=Load()),
+                            args=[
+                                Name(id='a', ctx=Load())],
+                            keywords=[]),
+                        conversion=-1,
+                        format_spec=JoinedStr(
+                            values=[
+                                Constant(value='.3')]))]))
+
+
+.. class:: List(elts, ctx)
+           Tuple(elts, ctx)
+
+   A list or tuple. ``elts`` holds a list of nodes representing the elements.
+   ``ctx`` is :class:`Store` if the container is an assignment target (i.e.
+   ``(x,y)=something``), and :class:`Load` otherwise.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('[1, 2, 3]', mode='eval'), indent=4))
+        Expression(
+            body=List(
+                elts=[
+                    Constant(value=1),
+                    Constant(value=2),
+                    Constant(value=3)],
+                ctx=Load()))
+        >>> print(ast.dump(ast.parse('(1, 2, 3)', mode='eval'), indent=4))
+        Expression(
+            body=Tuple(
+                elts=[
+                    Constant(value=1),
+                    Constant(value=2),
+                    Constant(value=3)],
+                ctx=Load()))
+
+
+.. class:: Set(elts)
+
+   A set. ``elts`` holds a list of nodes representing the set's elements.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('{1, 2, 3}', mode='eval'), indent=4))
+        Expression(
+            body=Set(
+                elts=[
+                    Constant(value=1),
+                    Constant(value=2),
+                    Constant(value=3)]))
+
+
+.. class:: Dict(keys, values)
+
+   A dictionary. ``keys`` and ``values`` hold lists of nodes representing the
+   keys and the values respectively, in matching order (what would be returned
+   when calling :code:`dictionary.keys()` and :code:`dictionary.values()`).
+
+   When doing dictionary unpacking using dictionary literals the expression to be
+   expanded goes in the ``values`` list, with a ``None`` at the corresponding
+   position in ``keys``.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('{"a":1, **d}', mode='eval'), indent=4))
+        Expression(
+            body=Dict(
+                keys=[
+                    Constant(value='a'),
+                    None],
+                values=[
+                    Constant(value=1),
+                    Name(id='d', ctx=Load())]))
+
+
+Variables
+^^^^^^^^^
+
+.. class:: Name(id, ctx)
+
+   A variable name. ``id`` holds the name as a string, and ``ctx`` is one of
+   the following types.
+
+
+.. class:: Load()
+           Store()
+           Del()
+
+   Variable references can be used to load the value of a variable, to assign
+   a new value to it, or to delete it. Variable references are given a context
+   to distinguish these cases.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('a'), indent=4))
+        Module(
+            body=[
+                Expr(
+                    value=Name(id='a', ctx=Load()))],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('a = 1'), indent=4))
+        Module(
+            body=[
+                Assign(
+                    targets=[
+                        Name(id='a', ctx=Store())],
+                    value=Constant(value=1))],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('del a'), indent=4))
+        Module(
+            body=[
+                Delete(
+                    targets=[
+                        Name(id='a', ctx=Del())])],
+            type_ignores=[])
+
+
+.. class:: Starred(value, ctx)
+
+   A ``*var`` variable reference. ``value`` holds the variable, typically a
+   :class:`Name` node. This type must be used when building a :class:`Call`
+   node with ``*args``.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('a, *b = it'), indent=4))
+        Module(
+            body=[
+                Assign(
+                    targets=[
+                        Tuple(
+                            elts=[
+                                Name(id='a', ctx=Store()),
+                                Starred(
+                                    value=Name(id='b', ctx=Store()),
+                                    ctx=Store())],
+                            ctx=Store())],
+                    value=Name(id='it', ctx=Load()))],
+            type_ignores=[])
+
+
+Expressions
+^^^^^^^^^^^
+
+.. class:: Expr(value)
+
+   When an expression, such as a function call, appears as a statement by itself
+   with its return value not used or stored, it is wrapped in this container.
+   ``value`` holds one of the other nodes in this section, a :class:`Constant`, a
+   :class:`Name`, a :class:`Lambda`, a :class:`Yield` or :class:`YieldFrom` node.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('-a'), indent=4))
+        Module(
+            body=[
+                Expr(
+                    value=UnaryOp(
+                        op=USub(),
+                        operand=Name(id='a', ctx=Load())))],
+            type_ignores=[])
+
+
+.. class:: UnaryOp(op, operand)
+
+   A unary operation. ``op`` is the operator, and ``operand`` any expression
+   node.
+
+
+.. class:: UAdd
+           USub
+           Not
+           Invert
+
+   Unary operator tokens. :class:`Not` is the ``not`` keyword, :class:`Invert`
+   is the ``~`` operator.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('not x', mode='eval'), indent=4))
+        Expression(
+            body=UnaryOp(
+                op=Not(),
+                operand=Name(id='x', ctx=Load())))
+
+
+.. class:: BinOp(left, op, right)
+
+   A binary operation (like addition or division). ``op`` is the operator, and
+   ``left`` and ``right`` are any expression nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('x + y', mode='eval'), indent=4))
+        Expression(
+            body=BinOp(
+                left=Name(id='x', ctx=Load()),
+                op=Add(),
+                right=Name(id='y', ctx=Load())))
+
+
+.. class:: Add
+           Sub
+           Mult
+           Div
+           FloorDiv
+           Mod
+           Pow
+           LShift
+           RShift
+           BitOr
+           BitXor
+           BitAnd
+           MatMult
+
+   Binary operator tokens.
+
+
+.. class:: BoolOp(op, values)
+
+   A boolean operation, 'or' or 'and'. ``op`` is :class:`Or` or :class:`And`.
+   ``values`` are the values involved. Consecutive operations with the same
+   operator, such as ``a or b or c``, are collapsed into one node with several
+   values.
+
+   This doesn't include ``not``, which is a :class:`UnaryOp`.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('x or y', mode='eval'), indent=4))
+        Expression(
+            body=BoolOp(
+                op=Or(),
+                values=[
+                    Name(id='x', ctx=Load()),
+                    Name(id='y', ctx=Load())]))
+
+
+.. class:: And
+           Or
+
+   Boolean operator tokens.
+
+
+.. class:: Compare(left, ops, comparators)
+
+   A comparison of two or more values. ``left`` is the first value in the
+   comparison, ``ops`` the list of operators, and ``comparators`` the list
+   of values after the first element in the comparison.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('1 <= a < 10', mode='eval'), indent=4))
+        Expression(
+            body=Compare(
+                left=Constant(value=1),
+                ops=[
+                    LtE(),
+                    Lt()],
+                comparators=[
+                    Name(id='a', ctx=Load()),
+                    Constant(value=10)]))
+
+
+.. class:: Eq
+           NotEq
+           Lt
+           LtE
+           Gt
+           GtE
+           Is
+           IsNot
+           In
+           NotIn
+
+   Comparison operator tokens.
+
+
+.. class:: Call(func, args, keywords, starargs, kwargs)
+
+   A function call. ``func`` is the function, which will often be a
+   :class:`Name` or :class:`Attribute` object. Of the arguments:
+
+   * ``args`` holds a list of the arguments passed by position.
+   * ``keywords`` holds a list of :class:`keyword` objects representing
+     arguments passed by keyword.
+
+   When creating a ``Call`` node, ``args`` and ``keywords`` are required, but
+   they can be empty lists. ``starargs`` and ``kwargs`` are optional.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('func(a, b=c, *d, **e)', mode='eval'), indent=4))
+        Expression(
+            body=Call(
+                func=Name(id='func', ctx=Load()),
+                args=[
+                    Name(id='a', ctx=Load()),
+                    Starred(
+                        value=Name(id='d', ctx=Load()),
+                        ctx=Load())],
+                keywords=[
+                    keyword(
+                        arg='b',
+                        value=Name(id='c', ctx=Load())),
+                    keyword(
+                        value=Name(id='e', ctx=Load()))]))
+
+
+.. class:: keyword(arg, value)
+
+   A keyword argument to a function call or class definition. ``arg`` is a raw
+   string of the parameter name, ``value`` is a node to pass in.
+
+
+.. class:: IfExp(test, body, orelse)
+
+   An expression such as ``a if b else c``. Each field holds a single node, so
+   in the following example, all three are :class:`Name` nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('a if b else c', mode='eval'), indent=4))
+        Expression(
+            body=IfExp(
+                test=Name(id='b', ctx=Load()),
+                body=Name(id='a', ctx=Load()),
+                orelse=Name(id='c', ctx=Load())))
+
+
+.. class:: Attribute(value, attr, ctx)
+
+   Attribute access, e.g. ``d.keys``. ``value`` is a node, typically a
+   :class:`Name`. ``attr`` is a bare string giving the name of the attribute,
+   and ``ctx`` is :class:`Load`, :class:`Store` or :class:`Del` according to how
+   the attribute is acted on.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('snake.colour', mode='eval'), indent=4))
+        Expression(
+            body=Attribute(
+                value=Name(id='snake', ctx=Load()),
+                attr='colour',
+                ctx=Load()))
+
+
+.. class:: NamedExpr(target, value)
+
+    A named expression. This AST node is produced by the assignment expressions
+    operator (also known as the walrus operator). As opposed to the :class:`Assign`
+    node in which the first argument can be multiple nodes, in this case both
+    ``target`` and ``value`` must be single nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('(x := 4)', mode='eval'), indent=4))
+        Expression(
+            body=NamedExpr(
+                target=Name(id='x', ctx=Store()),
+                value=Constant(value=4)))
+
+
+Subscripting
+~~~~~~~~~~~~
+
+.. class:: Subscript(value, slice, ctx)
+
+   A subscript, such as ``l[1]``. ``value`` is the subscripted object
+   (usually sequence or mapping). ``slice`` is an index, slice or key.
+   It can be a :class:`Tuple` and contain a :class:`Slice`.
+   ``ctx`` is :class:`Load`, :class:`Store` or :class:`Del`
+   according to the action performed with the subscript.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('l[1:2, 3]', mode='eval'), indent=4))
+        Expression(
+            body=Subscript(
+                value=Name(id='l', ctx=Load()),
+                slice=Tuple(
+                    elts=[
+                        Slice(
+                            lower=Constant(value=1),
+                            upper=Constant(value=2)),
+                        Constant(value=3)],
+                    ctx=Load()),
+                ctx=Load()))
+
+
+.. class:: Slice(lower, upper, step)
+
+   Regular slicing (on the form ``lower:upper`` or ``lower:upper:step``).
+   Can occur only inside the *slice* field of :class:`Subscript`, either
+   directly or as an element of :class:`Tuple`.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('l[1:2]', mode='eval'), indent=4))
+        Expression(
+            body=Subscript(
+                value=Name(id='l', ctx=Load()),
+                slice=Slice(
+                    lower=Constant(value=1),
+                    upper=Constant(value=2)),
+                ctx=Load()))
+
+
+Comprehensions
+~~~~~~~~~~~~~~
+
+.. class:: ListComp(elt, generators)
+           SetComp(elt, generators)
+           GeneratorExp(elt, generators)
+           DictComp(key, value, generators)
+
+   List and set comprehensions, generator expressions, and dictionary
+   comprehensions. ``elt`` (or ``key`` and ``value``) is a single node
+   representing the part that will be evaluated for each item.
+
+   ``generators`` is a list of :class:`comprehension` nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('[x for x in numbers]', mode='eval'), indent=4))
+        Expression(
+            body=ListComp(
+                elt=Name(id='x', ctx=Load()),
+                generators=[
+                    comprehension(
+                        target=Name(id='x', ctx=Store()),
+                        iter=Name(id='numbers', ctx=Load()),
+                        ifs=[],
+                        is_async=0)]))
+        >>> print(ast.dump(ast.parse('{x: x**2 for x in numbers}', mode='eval'), indent=4))
+        Expression(
+            body=DictComp(
+                key=Name(id='x', ctx=Load()),
+                value=BinOp(
+                    left=Name(id='x', ctx=Load()),
+                    op=Pow(),
+                    right=Constant(value=2)),
+                generators=[
+                    comprehension(
+                        target=Name(id='x', ctx=Store()),
+                        iter=Name(id='numbers', ctx=Load()),
+                        ifs=[],
+                        is_async=0)]))
+        >>> print(ast.dump(ast.parse('{x for x in numbers}', mode='eval'), indent=4))
+        Expression(
+            body=SetComp(
+                elt=Name(id='x', ctx=Load()),
+                generators=[
+                    comprehension(
+                        target=Name(id='x', ctx=Store()),
+                        iter=Name(id='numbers', ctx=Load()),
+                        ifs=[],
+                        is_async=0)]))
+
+
+.. class:: comprehension(target, iter, ifs, is_async)
+
+   One ``for`` clause in a comprehension. ``target`` is the reference to use for
+   each element - typically a :class:`Name` or :class:`Tuple` node. ``iter``
+   is the object to iterate over. ``ifs`` is a list of test expressions: each
+   ``for`` clause can have multiple ``ifs``.
+
+   ``is_async`` indicates a comprehension is asynchronous (using an
+   ``async for`` instead of ``for``). The value is an integer (0 or 1).
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('[ord(c) for line in file for c in line]', mode='eval'),
+        ...                indent=4)) # Multiple comprehensions in one.
+        Expression(
+            body=ListComp(
+                elt=Call(
+                    func=Name(id='ord', ctx=Load()),
+                    args=[
+                        Name(id='c', ctx=Load())],
+                    keywords=[]),
+                generators=[
+                    comprehension(
+                        target=Name(id='line', ctx=Store()),
+                        iter=Name(id='file', ctx=Load()),
+                        ifs=[],
+                        is_async=0),
+                    comprehension(
+                        target=Name(id='c', ctx=Store()),
+                        iter=Name(id='line', ctx=Load()),
+                        ifs=[],
+                        is_async=0)]))
+
+        >>> print(ast.dump(ast.parse('(n**2 for n in it if n>5 if n<10)', mode='eval'),
+        ...                indent=4)) # generator comprehension
+        Expression(
+            body=GeneratorExp(
+                elt=BinOp(
+                    left=Name(id='n', ctx=Load()),
+                    op=Pow(),
+                    right=Constant(value=2)),
+                generators=[
+                    comprehension(
+                        target=Name(id='n', ctx=Store()),
+                        iter=Name(id='it', ctx=Load()),
+                        ifs=[
+                            Compare(
+                                left=Name(id='n', ctx=Load()),
+                                ops=[
+                                    Gt()],
+                                comparators=[
+                                    Constant(value=5)]),
+                            Compare(
+                                left=Name(id='n', ctx=Load()),
+                                ops=[
+                                    Lt()],
+                                comparators=[
+                                    Constant(value=10)])],
+                        is_async=0)]))
+
+        >>> print(ast.dump(ast.parse('[i async for i in soc]', mode='eval'),
+        ...                indent=4)) # Async comprehension
+        Expression(
+            body=ListComp(
+                elt=Name(id='i', ctx=Load()),
+                generators=[
+                    comprehension(
+                        target=Name(id='i', ctx=Store()),
+                        iter=Name(id='soc', ctx=Load()),
+                        ifs=[],
+                        is_async=1)]))
+
+Statements
+^^^^^^^^^^
+
+.. class:: Assign(targets, value, type_comment)
+
+   An assignment. ``targets`` is a list of nodes, and ``value`` is a single node.
+
+   Multiple nodes in ``targets`` represents assigning the same value to each.
+   Unpacking is represented by putting a :class:`Tuple` or :class:`List`
+   within ``targets``.
+
+   .. attribute:: type_comment
+
+       ``type_comment`` is an optional string with the type annotation as a comment.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('a = b = 1'), indent=4)) # Multiple assignment
+        Module(
+            body=[
+                Assign(
+                    targets=[
+                        Name(id='a', ctx=Store()),
+                        Name(id='b', ctx=Store())],
+                    value=Constant(value=1))],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('a,b = c'), indent=4)) # Unpacking
+        Module(
+            body=[
+                Assign(
+                    targets=[
+                        Tuple(
+                            elts=[
+                                Name(id='a', ctx=Store()),
+                                Name(id='b', ctx=Store())],
+                            ctx=Store())],
+                    value=Name(id='c', ctx=Load()))],
+            type_ignores=[])
+
+
+.. class:: AnnAssign(target, annotation, value, simple)
+
+   An assignment with a type annotation. ``target`` is a single node and can
+   be a :class:`Name`, a :class:`Attribute` or a :class:`Subscript`.
+   ``annotation`` is the annotation, such as a :class:`Constant` or :class:`Name`
+   node. ``value`` is a single optional node. ``simple`` is a boolean integer
+   set to True for a :class:`Name` node in ``target`` that do not appear in
+   between parenthesis and are hence pure names and not expressions.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('c: int'), indent=4))
+        Module(
+            body=[
+                AnnAssign(
+                    target=Name(id='c', ctx=Store()),
+                    annotation=Name(id='int', ctx=Load()),
+                    simple=1)],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('(a): int = 1'), indent=4)) # Annotation with parenthesis
+        Module(
+            body=[
+                AnnAssign(
+                    target=Name(id='a', ctx=Store()),
+                    annotation=Name(id='int', ctx=Load()),
+                    value=Constant(value=1),
+                    simple=0)],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('a.b: int'), indent=4)) # Attribute annotation
+        Module(
+            body=[
+                AnnAssign(
+                    target=Attribute(
+                        value=Name(id='a', ctx=Load()),
+                        attr='b',
+                        ctx=Store()),
+                    annotation=Name(id='int', ctx=Load()),
+                    simple=0)],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('a[1]: int'), indent=4)) # Subscript annotation
+        Module(
+            body=[
+                AnnAssign(
+                    target=Subscript(
+                        value=Name(id='a', ctx=Load()),
+                        slice=Constant(value=1),
+                        ctx=Store()),
+                    annotation=Name(id='int', ctx=Load()),
+                    simple=0)],
+            type_ignores=[])
+
+
+.. class:: AugAssign(target, op, value)
+
+   Augmented assignment, such as ``a += 1``. In the following example,
+   ``target`` is a :class:`Name` node for ``x`` (with the :class:`Store`
+   context), ``op`` is :class:`Add`, and ``value`` is a :class:`Constant` with
+   value for 1.
+
+   The ``target`` attribute connot be of class :class:`Tuple` or :class:`List`,
+   unlike the targets of :class:`Assign`.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('x += 2'), indent=4))
+        Module(
+            body=[
+                AugAssign(
+                    target=Name(id='x', ctx=Store()),
+                    op=Add(),
+                    value=Constant(value=2))],
+            type_ignores=[])
+
+
+.. class:: Raise(exc, cause)
+
+   A ``raise`` statement. ``exc`` is the exception object to be raised, normally a
+   :class:`Call` or :class:`Name`, or ``None`` for a standalone ``raise``.
+   ``cause`` is the optional part for ``y`` in ``raise x from y``.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('raise x from y'), indent=4))
+        Module(
+            body=[
+                Raise(
+                    exc=Name(id='x', ctx=Load()),
+                    cause=Name(id='y', ctx=Load()))],
+            type_ignores=[])
+
+
+.. class:: Assert(test, msg)
+
+   An assertion. ``test`` holds the condition, such as a :class:`Compare` node.
+   ``msg`` holds the failure message.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('assert x,y'), indent=4))
+        Module(
+            body=[
+                Assert(
+                    test=Name(id='x', ctx=Load()),
+                    msg=Name(id='y', ctx=Load()))],
+            type_ignores=[])
+
+
+.. class:: Delete(targets)
+
+   Represents a ``del`` statement. ``targets`` is a list of nodes, such as
+   :class:`Name`, :class:`Attribute` or :class:`Subscript` nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('del x,y,z'), indent=4))
+        Module(
+            body=[
+                Delete(
+                    targets=[
+                        Name(id='x', ctx=Del()),
+                        Name(id='y', ctx=Del()),
+                        Name(id='z', ctx=Del())])],
+            type_ignores=[])
+
+
+.. class:: Pass()
+
+   A ``pass`` statement.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('pass'), indent=4))
+        Module(
+            body=[
+                Pass()],
+            type_ignores=[])
+
+
+Other statements which are only applicable inside functions or loops are
+described in other sections.
+
+Imports
+~~~~~~~
+
+.. class:: Import(names)
+
+   An import statement. ``names`` is a list of :class:`alias` nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('import x,y,z'), indent=4))
+        Module(
+            body=[
+                Import(
+                    names=[
+                        alias(name='x'),
+                        alias(name='y'),
+                        alias(name='z')])],
+            type_ignores=[])
+
+
+.. class:: ImportFrom(module, names, level)
+
+   Represents ``from x import y``. ``module`` is a raw string of the 'from' name,
+   without any leading dots, or ``None`` for statements such as ``from . import foo``.
+   ``level`` is an integer holding the level of the relative import (0 means
+   absolute import).
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('from y import x,y,z'), indent=4))
+        Module(
+            body=[
+                ImportFrom(
+                    module='y',
+                    names=[
+                        alias(name='x'),
+                        alias(name='y'),
+                        alias(name='z')],
+                    level=0)],
+            type_ignores=[])
+
+
+.. class:: alias(name, asname)
+
+   Both parameters are raw strings of the names. ``asname`` can be ``None`` if
+   the regular name is to be used.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('from ..foo.bar import a as b, c'), indent=4))
+        Module(
+            body=[
+                ImportFrom(
+                    module='foo.bar',
+                    names=[
+                        alias(name='a', asname='b'),
+                        alias(name='c')],
+                    level=2)],
+            type_ignores=[])
+
+Control flow
+^^^^^^^^^^^^
+
+.. note::
+   Optional clauses such as ``else`` are stored as an empty list if they're
+   not present.
+
+.. class:: If(test, body, orelse)
+
+   An ``if`` statement. ``test`` holds a single node, such as a :class:`Compare`
+   node. ``body`` and ``orelse`` each hold a list of nodes.
+
+   ``elif`` clauses don't have a special representation in the AST, but rather
+   appear as extra :class:`If` nodes within the ``orelse`` section of the
+   previous one.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""
+        ... if x:
+        ...    ...
+        ... elif y:
+        ...    ...
+        ... else:
+        ...    ...
+        ... """), indent=4))
+        Module(
+            body=[
+                If(
+                    test=Name(id='x', ctx=Load()),
+                    body=[
+                        Expr(
+                            value=Constant(value=Ellipsis))],
+                    orelse=[
+                        If(
+                            test=Name(id='y', ctx=Load()),
+                            body=[
+                                Expr(
+                                    value=Constant(value=Ellipsis))],
+                            orelse=[
+                                Expr(
+                                    value=Constant(value=Ellipsis))])])],
+            type_ignores=[])
+
+
+.. class:: For(target, iter, body, orelse, type_comment)
+
+   A ``for`` loop. ``target`` holds the variable(s) the loop assigns to, as a
+   single :class:`Name`, :class:`Tuple` or :class:`List` node. ``iter`` holds
+   the item to be looped over, again as a single node. ``body`` and ``orelse``
+   contain lists of nodes to execute. Those in ``orelse`` are executed if the
+   loop finishes normally, rather than via a ``break`` statement.
+
+   .. attribute:: type_comment
+
+       ``type_comment`` is an optional string with the type annotation as a comment.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""
+        ... for x in y:
+        ...     ...
+        ... else:
+        ...     ...
+        ... """), indent=4))
+        Module(
+            body=[
+                For(
+                    target=Name(id='x', ctx=Store()),
+                    iter=Name(id='y', ctx=Load()),
+                    body=[
+                        Expr(
+                            value=Constant(value=Ellipsis))],
+                    orelse=[
+                        Expr(
+                            value=Constant(value=Ellipsis))])],
+            type_ignores=[])
+
+
+.. class:: While(test, body, orelse)
+
+   A ``while`` loop. ``test`` holds the condition, such as a :class:`Compare`
+   node.
+
+   .. doctest::
+
+        >> print(ast.dump(ast.parse("""
+        ... while x:
+        ...    ...
+        ... else:
+        ...    ...
+        ... """), indent=4))
+        Module(
+            body=[
+                While(
+                    test=Name(id='x', ctx=Load()),
+                    body=[
+                        Expr(
+                            value=Constant(value=Ellipsis))],
+                    orelse=[
+                        Expr(
+                            value=Constant(value=Ellipsis))])],
+            type_ignores=[])
+
+
+.. class:: Break
+           Continue
+
+   The ``break`` and ``continue`` statements.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""\
+        ... for a in b:
+        ...     if a > 5:
+        ...         break
+        ...     else:
+        ...         continue
+        ...
+        ... """), indent=4))
+        Module(
+            body=[
+                For(
+                    target=Name(id='a', ctx=Store()),
+                    iter=Name(id='b', ctx=Load()),
+                    body=[
+                        If(
+                            test=Compare(
+                                left=Name(id='a', ctx=Load()),
+                                ops=[
+                                    Gt()],
+                                comparators=[
+                                    Constant(value=5)]),
+                            body=[
+                                Break()],
+                            orelse=[
+                                Continue()])],
+                    orelse=[])],
+            type_ignores=[])
+
+
+.. class:: Try(body, handlers, orelse, finalbody)
+
+   ``try`` blocks. All attributes are list of nodes to execute, except for
+   ``handlers``, which is a list of :class:`ExceptHandler` nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""
+        ... try:
+        ...    ...
+        ... except Exception:
+        ...    ...
+        ... except OtherException as e:
+        ...    ...
+        ... else:
+        ...    ...
+        ... finally:
+        ...    ...
+        ... """), indent=4))
+        Module(
+            body=[
+                Try(
+                    body=[
+                        Expr(
+                            value=Constant(value=Ellipsis))],
+                    handlers=[
+                        ExceptHandler(
+                            type=Name(id='Exception', ctx=Load()),
+                            body=[
+                                Expr(
+                                    value=Constant(value=Ellipsis))]),
+                        ExceptHandler(
+                            type=Name(id='OtherException', ctx=Load()),
+                            name='e',
+                            body=[
+                                Expr(
+                                    value=Constant(value=Ellipsis))])],
+                    orelse=[
+                        Expr(
+                            value=Constant(value=Ellipsis))],
+                    finalbody=[
+                        Expr(
+                            value=Constant(value=Ellipsis))])],
+            type_ignores=[])
+
+
+.. class:: ExceptHandler(type, name, body)
+
+   A single ``except`` clause. ``type`` is the exception type it will match,
+   typically a :class:`Name` node (or ``None`` for a catch-all ``except:`` clause).
+   ``name`` is a raw string for the name to hold the exception, or ``None`` if
+   the clause doesn't have ``as foo``. ``body`` is a list of nodes.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""\
+        ... try:
+        ...     a + 1
+        ... except TypeError:
+        ...     pass
+        ... """), indent=4))
+        Module(
+            body=[
+                Try(
+                    body=[
+                        Expr(
+                            value=BinOp(
+                                left=Name(id='a', ctx=Load()),
+                                op=Add(),
+                                right=Constant(value=1)))],
+                    handlers=[
+                        ExceptHandler(
+                            type=Name(id='TypeError', ctx=Load()),
+                            body=[
+                                Pass()])],
+                    orelse=[],
+                    finalbody=[])],
+            type_ignores=[])
+
+
+.. class:: With(items, body, type_comment)
+
+   A ``with`` block. ``items`` is a list of :class:`withitem` nodes representing
+   the context managers, and ``body`` is the indented block inside the context.
+
+   .. attribute:: type_comment
+
+       ``type_comment`` is an optional string with the type annotation as a comment.
+
+
+.. class:: withitem(context_expr, optional_vars)
+
+   A single context manager in a ``with`` block. ``context_expr`` is the context
+   manager, often a :class:`Call` node. ``optional_vars`` is a :class:`Name`,
+   :class:`Tuple` or :class:`List` for the ``as foo`` part, or ``None`` if that
+   isn't used.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""\
+        ... with a as b, c as d:
+        ...    something(b, d)
+        ... """), indent=4))
+        Module(
+            body=[
+                With(
+                    items=[
+                        withitem(
+                            context_expr=Name(id='a', ctx=Load()),
+                            optional_vars=Name(id='b', ctx=Store())),
+                        withitem(
+                            context_expr=Name(id='c', ctx=Load()),
+                            optional_vars=Name(id='d', ctx=Store()))],
+                    body=[
+                        Expr(
+                            value=Call(
+                                func=Name(id='something', ctx=Load()),
+                                args=[
+                                    Name(id='b', ctx=Load()),
+                                    Name(id='d', ctx=Load())],
+                                keywords=[]))])],
+            type_ignores=[])
+
+
+Function and class definitions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. class:: FunctionDef(name, args, body, decorator_list, returns, type_comment)
+
+   A function definition.
+
+   * ``name`` is a raw string of the function name.
+   * ``args`` is a :class:`arguments` node.
+   * ``body`` is the list of nodes inside the function.
+   * ``decorator_list`` is the list of decorators to be applied, stored outermost
+     first (i.e. the first in the list will be applied last).
+   * ``returns`` is the return annotation.
+
+   .. attribute:: type_comment
+
+       ``type_comment`` is an optional string with the type annotation as a comment.
+
+
+.. class:: Lambda(args, body)
+
+   ``lambda`` is a minimal function definition that can be used inside an
+   expression. Unlike :class:`FunctionDef`, ``body`` holds a single node.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('lambda x,y: ...'), indent=4))
+        Module(
+            body=[
+                Expr(
+                    value=Lambda(
+                        args=arguments(
+                            posonlyargs=[],
+                            args=[
+                                arg(arg='x'),
+                                arg(arg='y')],
+                            kwonlyargs=[],
+                            kw_defaults=[],
+                            defaults=[]),
+                        body=Constant(value=Ellipsis)))],
+            type_ignores=[])
+
+
+.. class:: arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, kwarg, defaults)
+
+   The arguments for a function.
+
+   * ``posonlyargs``, ``args`` and ``kwonlyargs`` are lists of :class:`arg` nodes.
+   * ``vararg`` and ``kwarg`` are single :class:`arg` nodes, referring to the
+     ``*args, **kwargs`` parameters.
+   * ``kw_defaults`` is a list of default values for keyword-only arguments. If
+     one is ``None``, the corresponding argument is required.
+   * ``defaults`` is a list of default values for arguments that can be passed
+     positionally. If there are fewer defaults, they correspond to the last n
+     arguments.
+
+
+.. class:: arg(arg, annotation, type_comment)
+
+   A single argument in a list. ``arg`` is a raw string of the argument
+   name, ``annotation`` is its annotation, such as a :class:`Str` or
+   :class:`Name` node.
+
+   .. attribute:: type_comment
+
+       ``type_comment`` is an optional string with the type annotation as a comment
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""\
+        ... @decorator1
+        ... @decorator2
+        ... def f(a: 'annotation', b=1, c=2, *d, e, f=3, **g) -> 'return annotation':
+        ...     pass
+        ... """), indent=4))
+        Module(
+            body=[
+                FunctionDef(
+                    name='f',
+                    args=arguments(
+                        posonlyargs=[],
+                        args=[
+                            arg(
+                                arg='a',
+                                annotation=Constant(value='annotation')),
+                            arg(arg='b'),
+                            arg(arg='c')],
+                        vararg=arg(arg='d'),
+                        kwonlyargs=[
+                            arg(arg='e'),
+                            arg(arg='f')],
+                        kw_defaults=[
+                            None,
+                            Constant(value=3)],
+                        kwarg=arg(arg='g'),
+                        defaults=[
+                            Constant(value=1),
+                            Constant(value=2)]),
+                    body=[
+                        Pass()],
+                    decorator_list=[
+                        Name(id='decorator1', ctx=Load()),
+                        Name(id='decorator2', ctx=Load())],
+                    returns=Constant(value='return annotation'))],
+            type_ignores=[])
+
+
+.. class:: Return(value)
+
+   A ``return`` statement.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('return 4'), indent=4))
+        Module(
+            body=[
+                Return(
+                    value=Constant(value=4))],
+            type_ignores=[])
+
+
+.. class:: Yield(value)
+           YieldFrom(value)
+
+   A ``yield`` or ``yield from`` expression. Because these are expressions, they
+   must be wrapped in a :class:`Expr` node if the value sent back is not used.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('yield x'), indent=4))
+        Module(
+            body=[
+                Expr(
+                    value=Yield(
+                        value=Name(id='x', ctx=Load())))],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('yield from x'), indent=4))
+        Module(
+            body=[
+                Expr(
+                    value=YieldFrom(
+                        value=Name(id='x', ctx=Load())))],
+            type_ignores=[])
+
+
+.. class:: Global(names)
+           Nonlocal(names)
+
+   ``global`` and ``nonlocal`` statements. ``names`` is a list of raw strings.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse('global x,y,z'), indent=4))
+        Module(
+            body=[
+                Global(
+                    names=[
+                        'x',
+                        'y',
+                        'z'])],
+            type_ignores=[])
+
+        >>> print(ast.dump(ast.parse('nonlocal x,y,z'), indent=4))
+        Module(
+            body=[
+                Nonlocal(
+                    names=[
+                        'x',
+                        'y',
+                        'z'])],
+            type_ignores=[])
+
+
+.. class:: ClassDef(name, bases, keywords, starargs, kwargs, body, decorator_list)
+
+   A class definition.
+
+   * ``name`` is a raw string for the class name
+   * ``bases`` is a list of nodes for explicitly specified base classes.
+   * ``keywords`` is a list of :class:`keyword` nodes, principally for 'metaclass'.
+     Other keywords will be passed to the metaclass, as per `PEP-3115
+     <http://www.python.org/dev/peps/pep-3115/>`_.
+   * ``starargs`` and ``kwargs`` are each a single node, as in a function call.
+     starargs will be expanded to join the list of base classes, and kwargs will
+     be passed to the metaclass.
+   * ``body`` is a list of nodes representing the code within the class
+     definition.
+   * ``decorator_list`` is a list of nodes, as in :class:`FunctionDef`.
+
+   .. doctest::
+
+        >>> print(ast.dump(ast.parse("""\
+        ... @decorator1
+        ... @decorator2
+        ... class Foo(base1, base2, metaclass=meta):
+        ...     pass
+        ... """), indent=4))
+        Module(
+            body=[
+                ClassDef(
+                    name='Foo',
+                    bases=[
+                        Name(id='base1', ctx=Load()),
+                        Name(id='base2', ctx=Load())],
+                    keywords=[
+                        keyword(
+                            arg='metaclass',
+                            value=Name(id='meta', ctx=Load()))],
+                    body=[
+                        Pass()],
+                    decorator_list=[
+                        Name(id='decorator1', ctx=Load()),
+                        Name(id='decorator2', ctx=Load())])],
+            type_ignores=[])
+
+Async and await
+^^^^^^^^^^^^^^^
+
+.. class:: AsyncFunctionDef(name, args, body, decorator_list, returns, type_comment)
+
+   An ``async def`` function definition. Has the same fields as
+   :class:`FunctionDef`.
+
+
+.. class:: Await(value)
+
+   An ``await`` expression. ``value`` is what it waits for.
+   Only valid in the body of an :class:`AsyncFunctionDef`.
+
+.. doctest::
+
+    >>> print(ast.dump(ast.parse("""\
+    ... async def f():
+    ...     await other_func()
+    ... """), indent=4))
+    Module(
+        body=[
+            AsyncFunctionDef(
+                name='f',
+                args=arguments(
+                    posonlyargs=[],
+                    args=[],
+                    kwonlyargs=[],
+                    kw_defaults=[],
+                    defaults=[]),
+                body=[
+                    Expr(
+                        value=Await(
+                            value=Call(
+                                func=Name(id='other_func', ctx=Load()),
+                                args=[],
+                                keywords=[])))],
+                decorator_list=[])],
+        type_ignores=[])
+
+
+.. class:: AsyncFor(target, iter, body, orelse, type_comment)
+           AsyncWith(items, body, type_comment)
+
+   ``async for`` loops and ``async with`` context managers. They have the same
+   fields as :class:`For` and :class:`With`, respectively. Only valid in the
+   body of an :class:`AsyncFunctionDef`.
+
+.. note::
+   When a string is parsed by :func:`ast.parse`, operator nodes (subclasses
+   of :class:`ast.operator`, :class:`ast.unaryop`, :class:`ast.cmpop`,
+   :class:`ast.boolop` and :class:`ast.expr_context`) on the returned tree
+   will be singletons. Changes to one will be reflected in all other
+   occurrences of the same value (e.g. :class:`ast.Add`).
 
 
 :mod:`ast` Helpers
@@ -165,6 +1552,24 @@
       Added ``type_comments``, ``mode='func_type'`` and ``feature_version``.
 
 
+.. function:: unparse(ast_obj)
+
+   Unparse an :class:`ast.AST` object and generate a string with code
+   that would produce an equivalent :class:`ast.AST` object if parsed
+   back with :func:`ast.parse`.
+
+   .. warning::
+      The produced code string will not necessarily be equal to the original
+      code that generated the :class:`ast.AST` object (without any compiler
+      optimizations, such as constant tuples/frozensets).
+
+   .. warning::
+      Trying to unparse a highly complex expression would result with
+      :exc:`RecursionError`.
+
+   .. versionadded:: 3.9
+
+
 .. function:: literal_eval(node_or_string)
 
    Safely evaluate an expression node or a string containing a Python literal or
@@ -185,6 +1590,9 @@
    .. versionchanged:: 3.2
       Now allows bytes and set literals.
 
+   .. versionchanged:: 3.9
+      Now supports creating empty sets with ``'set()'``.
+
 
 .. function:: get_docstring(node, clean=True)
 
@@ -306,7 +1714,7 @@
           def visit_Name(self, node):
               return Subscript(
                   value=Name(id='data', ctx=Load()),
-                  slice=Index(value=Constant(value=node.id)),
+                  slice=Constant(value=node.id),
                   ctx=node.ctx
               )
 
@@ -331,7 +1739,7 @@
       node = YourTransformer().visit(node)
 
 
-.. function:: dump(node, annotate_fields=True, include_attributes=False)
+.. function:: dump(node, annotate_fields=True, include_attributes=False, *, indent=None)
 
    Return a formatted dump of the tree in *node*.  This is mainly useful for
    debugging purposes.  If *annotate_fields* is true (by default),
@@ -341,7 +1749,110 @@
    numbers and column offsets are not dumped by default.  If this is wanted,
    *include_attributes* can be set to true.
 
+   If *indent* is a non-negative integer or string, then the tree will be
+   pretty-printed with that indent level.  An indent level
+   of 0, negative, or ``""`` will only insert newlines.  ``None`` (the default)
+   selects the single line representation. Using a positive integer indent
+   indents that many spaces per level.  If *indent* is a string (such as ``"\t"``),
+   that string is used to indent each level.
+
+   .. versionchanged:: 3.9
+      Added the *indent* option.
+
+
+.. _ast-compiler-flags:
+
+Compiler Flags
+--------------
+
+The following flags may be passed to :func:`compile` in order to change
+effects on the compilation of a program:
+
+.. data:: PyCF_ALLOW_TOP_LEVEL_AWAIT
+
+   Enables support for top-level ``await``, ``async for``, ``async with``
+   and async comprehensions.
+
+   .. versionadded:: 3.8
+
+.. data:: PyCF_ONLY_AST
+
+   Generates and returns an abstract syntax tree instead of returning a
+   compiled code object.
+
+.. data:: PyCF_TYPE_COMMENTS
+
+   Enables support for :pep:`484` and :pep:`526` style type comments
+   (``# type: <type>``, ``# type: ignore <stuff>``).
+
+   .. versionadded:: 3.8
+
+
+.. _ast-cli:
+
+Command-Line Usage
+------------------
+
+.. versionadded:: 3.9
+
+The :mod:`ast` module can be executed as a script from the command line.
+It is as simple as:
+
+.. code-block:: sh
+
+   python -m ast [-m <mode>] [-a] [infile]
+
+The following options are accepted:
+
+.. program:: ast
+
+.. cmdoption:: -h, --help
+
+   Show the help message and exit.
+
+.. cmdoption:: -m <mode>
+               --mode <mode>
+
+   Specify what kind of code must be compiled, like the *mode* argument
+   in :func:`parse`.
+
+.. cmdoption:: --no-type-comments
+
+   Don't parse type comments.
+
+.. cmdoption:: -a, --include-attributes
+
+   Include attributes such as line numbers and column offsets.
+
+.. cmdoption:: -i <indent>
+               --indent <indent>
+
+   Indentation of nodes in AST (number of spaces).
+
+If :file:`infile` is specified its contents are parsed to AST and dumped
+to stdout.  Otherwise, the content is read from stdin.
+
+
 .. seealso::
 
-    `Green Tree Snakes <https://greentreesnakes.readthedocs.io/>`_, an external documentation resource, has good
-    details on working with Python ASTs.
+    `Green Tree Snakes <https://greentreesnakes.readthedocs.io/>`_, an external
+    documentation resource, has good details on working with Python ASTs.
+
+    `ASTTokens <https://asttokens.readthedocs.io/en/latest/user-guide.html>`_
+    annotates Python ASTs with the positions of tokens and text in the source
+    code that generated them. This is helpful for tools that make source code
+    transformations.
+
+    `leoAst.py <http://leoeditor.com/appendices.html#leoast-py>`_ unifies the
+    token-based and parse-tree-based views of python programs by inserting
+    two-way links between tokens and ast nodes.
+
+    `LibCST <https://libcst.readthedocs.io/>`_ parses code as a Concrete Syntax
+    Tree that looks like an ast tree and keeps all formatting details. It's
+    useful for building automated refactoring (codemod) applications and
+    linters.
+
+    `Parso <https://parso.readthedocs.io>`_ is a Python parser that supports
+    error recovery and round-trip parsing for different Python versions (in
+    multiple Python versions). Parso is also able to list multiple syntax errors
+    in your python file.
\ No newline at end of file
diff --git a/Doc/library/asyncio-api-index.rst b/Doc/library/asyncio-api-index.rst
index d5b5659..047e5bb 100644
--- a/Doc/library/asyncio-api-index.rst
+++ b/Doc/library/asyncio-api-index.rst
@@ -48,6 +48,9 @@
     * - :class:`Task`
       - Task object.
 
+    * - :func:`to_thread`
+      - Asychronously run a function in a separate OS thread.
+
     * - :func:`run_coroutine_threadsafe`
       - Schedule a coroutine from another OS thread.
 
diff --git a/Doc/library/asyncio-dev.rst b/Doc/library/asyncio-dev.rst
index 0d302ea..02a0003 100644
--- a/Doc/library/asyncio-dev.rst
+++ b/Doc/library/asyncio-dev.rst
@@ -25,7 +25,7 @@
 
 * Setting the :envvar:`PYTHONASYNCIODEBUG` environment variable to ``1``.
 
-* Using the :option:`-X` ``dev`` Python command line option.
+* Using the :ref:`Python Development Mode <devmode>`.
 
 * Passing ``debug=True`` to :func:`asyncio.run`.
 
@@ -107,6 +107,16 @@
 blocking code in a different OS thread without blocking the OS thread
 that the event loop runs in.
 
+There is currently no way to schedule coroutines or callbacks directly
+from a different process (such as one started with
+:mod:`multiprocessing`). The :ref:`Event Loop Methods <asyncio-event-loop>`
+section lists APIs that can read from pipes and watch file descriptors
+without blocking the event loop. In addition, asyncio's
+:ref:`Subprocess <asyncio-subprocess>` APIs provide a way to start a
+process and communicate with it from the event loop. Lastly, the
+aforementioned :meth:`loop.run_in_executor` method can also be used
+with a :class:`concurrent.futures.ProcessPoolExecutor` to execute
+code in a different process.
 
 .. _asyncio-handle-blocking:
 
diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst
index 32bc219..b1e7318 100644
--- a/Doc/library/asyncio-eventloop.rst
+++ b/Doc/library/asyncio-eventloop.rst
@@ -173,6 +173,18 @@
 
    .. versionadded:: 3.6
 
+.. coroutinemethod:: loop.shutdown_default_executor()
+
+   Schedule the closure of the default executor and wait for it to join all of
+   the threads in the :class:`ThreadPoolExecutor`. After calling this method, a
+   :exc:`RuntimeError` will be raised if :meth:`loop.run_in_executor` is called
+   while using the default executor.
+
+   Note that there is no need to call this function when
+   :func:`asyncio.run` is used.
+
+   .. versionadded:: 3.9
+
 
 Scheduling callbacks
 ^^^^^^^^^^^^^^^^^^^^
@@ -1200,7 +1212,7 @@
 
    .. versionchanged:: 3.7
 
-      The new ``-X dev`` command line option can now also be used
+      The new :ref:`Python Development Mode <devmode>` can now also be used
       to enable the debug mode.
 
 .. seealso::
diff --git a/Doc/library/asyncio-future.rst b/Doc/library/asyncio-future.rst
index 832d581..e1ac18e 100644
--- a/Doc/library/asyncio-future.rst
+++ b/Doc/library/asyncio-future.rst
@@ -170,7 +170,7 @@
       Returns the number of callbacks removed, which is typically 1,
       unless a callback was added more than once.
 
-   .. method:: cancel()
+   .. method:: cancel(msg=None)
 
       Cancel the Future and schedule callbacks.
 
@@ -178,6 +178,9 @@
       Otherwise, change the Future's state to *cancelled*,
       schedule the callbacks, and return ``True``.
 
+      .. versionchanged:: 3.9
+         Added the ``msg`` parameter.
+
    .. method:: exception()
 
       Return the exception that was set on this Future.
@@ -255,3 +258,6 @@
    - asyncio Future is not compatible with the
      :func:`concurrent.futures.wait` and
      :func:`concurrent.futures.as_completed` functions.
+
+   - :meth:`asyncio.Future.cancel` accepts an optional ``msg`` argument,
+     but :func:`concurrent.futures.cancel` does not.
diff --git a/Doc/library/asyncio-policy.rst b/Doc/library/asyncio-policy.rst
index aa8f8f1..5e69525 100644
--- a/Doc/library/asyncio-policy.rst
+++ b/Doc/library/asyncio-policy.rst
@@ -209,7 +209,7 @@
    It works reliably even when the asyncio event loop is run in a non-main OS thread.
 
    There is no noticeable overhead when handling a big number of children (*O(1)* each
-   time a child terminates), but stating a thread per process requires extra memory.
+   time a child terminates), but starting a thread per process requires extra memory.
 
    This watcher is used by default.
 
@@ -219,7 +219,7 @@
 
    This implementation registers a :py:data:`SIGCHLD` signal handler on
    instantiation. That can break third-party code that installs a custom handler for
-   `SIGCHLD`.  signal).
+   :py:data:`SIGCHLD` signal.
 
    The watcher avoids disrupting other code spawning processes
    by polling every process explicitly on a :py:data:`SIGCHLD` signal.
@@ -257,6 +257,18 @@
    This solution requires a running event loop in the main thread to work, as
    :class:`SafeChildWatcher`.
 
+.. class:: PidfdChildWatcher
+
+   This implementation polls process file descriptors (pidfds) to await child
+   process termination. In some respects, :class:`PidfdChildWatcher` is a
+   "Goldilocks" child watcher implementation. It doesn't require signals or
+   threads, doesn't interfere with any processes launched outside the event
+   loop, and scales linearly with the number of subprocesses launched by the
+   event loop. The main disadvantage is that pidfds are specific to Linux, and
+   only work on recent (5.3+) kernels.
+
+   .. versionadded:: 3.9
+
 
 Custom Policies
 ===============
diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst
index 816ddcd..9dbd3ab 100644
--- a/Doc/library/asyncio-protocol.rst
+++ b/Doc/library/asyncio-protocol.rst
@@ -588,9 +588,6 @@
 ----------------------------
 
 .. versionadded:: 3.7
-   **Important:** this has been added to asyncio in Python 3.7
-   *on a provisional basis*!  This is as an experimental API that
-   might be changed or removed completely in Python 3.8.
 
 Buffered Protocols can be used with any event loop method
 that supports `Streaming Protocols`_.
diff --git a/Doc/library/asyncio-subprocess.rst b/Doc/library/asyncio-subprocess.rst
index eb1312a..b033034 100644
--- a/Doc/library/asyncio-subprocess.rst
+++ b/Doc/library/asyncio-subprocess.rst
@@ -110,10 +110,8 @@
 
 .. note::
 
-   The default asyncio event loop implementation on **Windows** does not
-   support subprocesses. Subprocesses are available for Windows if a
-   :class:`ProactorEventLoop` is used.
-   See :ref:`Subprocess Support on Windows <asyncio-windows-subprocess>`
+   Subprocesses are available for Windows if a :class:`ProactorEventLoop` is
+   used. See :ref:`Subprocess Support on Windows <asyncio-windows-subprocess>`
    for details.
 
 .. seealso::
diff --git a/Doc/library/asyncio-sync.rst b/Doc/library/asyncio-sync.rst
index f080b03..84a52cb 100644
--- a/Doc/library/asyncio-sync.rst
+++ b/Doc/library/asyncio-sync.rst
@@ -347,8 +347,8 @@
 ---------
 
 
-.. deprecated:: 3.7
+.. versionchanged:: 3.9
 
    Acquiring a lock using ``await lock`` or ``yield from lock`` and/or
    :keyword:`with` statement (``with await lock``, ``with (yield from
-   lock)``) is deprecated.  Use ``async with lock`` instead.
+   lock)``) was removed.  Use ``async with lock`` instead.
diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst
index c96dde2..c638f12 100644
--- a/Doc/library/asyncio-task.rst
+++ b/Doc/library/asyncio-task.rst
@@ -215,8 +215,8 @@
     Execute the :term:`coroutine` *coro* and return the result.
 
     This function runs the passed coroutine, taking care of
-    managing the asyncio event loop and *finalizing asynchronous
-    generators*.
+    managing the asyncio event loop, *finalizing asynchronous
+    generators*, and closing the threadpool.
 
     This function cannot be called when another asyncio event loop is
     running in the same thread.
@@ -237,6 +237,8 @@
 
     .. versionadded:: 3.7
 
+    .. versionchanged:: 3.9
+       Updated to use :meth:`loop.shutdown_default_executor`.
 
     .. note::
        The source code for ``asyncio.run()`` can be found in
@@ -459,7 +461,8 @@
    wrap it in :func:`shield`.
 
    The function will wait until the future is actually cancelled,
-   so the total wait time may exceed the *timeout*.
+   so the total wait time may exceed the *timeout*. If an exception
+   happens during cancellation, it is propagated.
 
    If the wait is cancelled, the future *aw* is also cancelled.
 
@@ -501,9 +504,11 @@
                             return_when=ALL_COMPLETED)
 
    Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
-   set concurrently and block until the condition specified
+   iterable concurrently and block until the condition specified
    by *return_when*.
 
+   The *aws* iterable must not be empty.
+
    Returns two sets of Tasks/Futures: ``(done, pending)``.
 
    Usage::
@@ -579,7 +584,7 @@
           if task in done:
               # Everything will work as expected now.
 
-   .. deprecated:: 3.8
+   .. deprecated-removed:: 3.8 3.11
 
       Passing coroutine objects to ``wait()`` directly is
       deprecated.
@@ -588,9 +593,9 @@
 .. function:: as_completed(aws, \*, loop=None, timeout=None)
 
    Run :ref:`awaitable objects <asyncio-awaitables>` in the *aws*
-   set concurrently.  Return an iterator of coroutines.
+   iterable concurrently.  Return an iterator of coroutines.
    Each coroutine returned can be awaited to get the earliest next
-   result from the set of the remaining awaitables.
+   result from the iterable of the remaining awaitables.
 
    Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
    all Futures are done.
@@ -605,6 +610,65 @@
            # ...
 
 
+Running in Threads
+==================
+
+.. coroutinefunction:: to_thread(func, /, \*args, \*\*kwargs)
+
+   Asynchronously run function *func* in a separate thread.
+
+   Any \*args and \*\*kwargs supplied for this function are directly passed
+   to *func*. Also, the current :class:`contextvars.Context` is propagated,
+   allowing context variables from the event loop thread to be accessed in the
+   separate thread.
+
+   Return a coroutine that can be awaited to get the eventual result of *func*.
+
+   This coroutine function is primarily intended to be used for executing
+   IO-bound functions/methods that would otherwise block the event loop if
+   they were ran in the main thread. For example::
+
+       def blocking_io():
+           print(f"start blocking_io at {time.strftime('%X')}")
+           # Note that time.sleep() can be replaced with any blocking
+           # IO-bound operation, such as file operations.
+           time.sleep(1)
+           print(f"blocking_io complete at {time.strftime('%X')}")
+
+       async def main():
+           print(f"started main at {time.strftime('%X')}")
+
+           await asyncio.gather(
+               asyncio.to_thread(blocking_io),
+               asyncio.sleep(1))
+
+           print(f"finished main at {time.strftime('%X')}")
+
+
+       asyncio.run(main())
+
+       # Expected output:
+       #
+       # started main at 19:50:53
+       # start blocking_io at 19:50:53
+       # blocking_io complete at 19:50:54
+       # finished main at 19:50:54
+
+   Directly calling `blocking_io()` in any coroutine would block the event loop
+   for its duration, resulting in an additional 1 second of run time. Instead,
+   by using `asyncio.to_thread()`, we can run it in a separate thread without
+   blocking the event loop.
+
+   .. note::
+
+      Due to the :term:`GIL`, `asyncio.to_thread()` can typically only be used
+      to make IO-bound functions non-blocking. However, for extension modules
+      that release the GIL or alternative Python implementations that don't
+      have one, `asyncio.to_thread()` can also be used for CPU-bound functions.
+
+   .. versionadded:: 3.9
+
+
 Scheduling From Other Threads
 =============================
 
@@ -727,7 +791,7 @@
    .. deprecated-removed:: 3.8 3.10
       The *loop* parameter.
 
-   .. method:: cancel()
+   .. method:: cancel(msg=None)
 
       Request the Task to be cancelled.
 
@@ -742,6 +806,9 @@
       suppressing cancellation completely is not common and is actively
       discouraged.
 
+      .. versionchanged:: 3.9
+         Added the ``msg`` parameter.
+
       .. _asyncio_example_task_cancel:
 
       The following example illustrates how coroutines can intercept
@@ -903,31 +970,6 @@
 
       .. versionadded:: 3.8
 
-   .. classmethod:: all_tasks(loop=None)
-
-      Return a set of all tasks for an event loop.
-
-      By default all tasks for the current event loop are returned.
-      If *loop* is ``None``, the :func:`get_event_loop` function
-      is used to get the current loop.
-
-      .. deprecated-removed:: 3.7 3.9
-
-         Do not call this as a task method. Use the :func:`asyncio.all_tasks`
-         function instead.
-
-   .. classmethod:: current_task(loop=None)
-
-      Return the currently running task or ``None``.
-
-      If *loop* is ``None``, the :func:`get_event_loop` function
-      is used to get the current loop.
-
-      .. deprecated-removed:: 3.7 3.9
-
-         Do not call this as a task method.  Use the
-         :func:`asyncio.current_task` function instead.
-
 
 .. _asyncio_generator_based_coro:
 
diff --git a/Doc/library/audit_events.rst b/Doc/library/audit_events.rst
index 3c68a15..367d56e 100644
--- a/Doc/library/audit_events.rst
+++ b/Doc/library/audit_events.rst
@@ -19,3 +19,29 @@
    specific documentation for actual events raised.
 
 .. audit-event-table::
+
+The following events are raised internally and do not correspond to any
+public API of CPython:
+
++--------------------------+-------------------------------------------+
+| Audit event              | Arguments                                 |
++==========================+===========================================+
+| _winapi.CreateFile       | ``file_name``, ``desired_access``,        |
+|                          | ``share_mode``, ``creation_disposition``, |
+|                          | ``flags_and_attributes``                  |
++--------------------------+-------------------------------------------+
+| _winapi.CreateJunction   | ``src_path``, ``dst_path``                |
++--------------------------+-------------------------------------------+
+| _winapi.CreateNamedPipe  | ``name``, ``open_mode``, ``pipe_mode``    |
++--------------------------+-------------------------------------------+
+| _winapi.CreatePipe       |                                           |
++--------------------------+-------------------------------------------+
+| _winapi.CreateProcess    | ``application_name``, ``command_line``,   |
+|                          | ``current_directory``                     |
++--------------------------+-------------------------------------------+
+| _winapi.OpenProcess      | ``process_id``, ``desired_access``        |
++--------------------------+-------------------------------------------+
+| _winapi.TerminateProcess | ``handle``, ``exit_code``                 |
++--------------------------+-------------------------------------------+
+| ctypes.PyObj_FromPtr     | ``obj``                                   |
++--------------------------+-------------------------------------------+
diff --git a/Doc/library/base64.rst b/Doc/library/base64.rst
index ad9f5f5..1ff22a0 100644
--- a/Doc/library/base64.rst
+++ b/Doc/library/base64.rst
@@ -235,12 +235,6 @@
 
    .. versionadded:: 3.1
 
-.. function:: decodestring(s)
-
-   Deprecated alias of :func:`decodebytes`.
-
-   .. deprecated:: 3.1
-
 
 .. function:: encode(input, output)
 
@@ -261,12 +255,6 @@
 
    .. versionadded:: 3.1
 
-.. function:: encodestring(s)
-
-   Deprecated alias of :func:`encodebytes`.
-
-   .. deprecated:: 3.1
-
 
 An example usage of the module:
 
diff --git a/Doc/library/bdb.rst b/Doc/library/bdb.rst
index 116ffcf..7e4066c 100644
--- a/Doc/library/bdb.rst
+++ b/Doc/library/bdb.rst
@@ -343,7 +343,7 @@
 
       For backwards compatibility.  Calls the :meth:`run` method.
 
-   .. method:: runcall(func, *args, **kwds)
+   .. method:: runcall(func, /, *args, **kwds)
 
       Debug a single function call, and return its result.
 
diff --git a/Doc/library/binascii.rst b/Doc/library/binascii.rst
index 98d8679..2c0c1bc 100644
--- a/Doc/library/binascii.rst
+++ b/Doc/library/binascii.rst
@@ -92,6 +92,8 @@
    The string should contain a complete number of binary bytes, or (in case of the
    last portion of the binhex4 data) have the remaining bits zero.
 
+   .. deprecated:: 3.9
+
 
 .. function:: rledecode_hqx(data)
 
@@ -104,11 +106,15 @@
    .. versionchanged:: 3.2
       Accept only bytestring or bytearray objects as input.
 
+   .. deprecated:: 3.9
+
 
 .. function:: rlecode_hqx(data)
 
    Perform binhex4 style RLE-compression on *data* and return the result.
 
+   .. deprecated:: 3.9
+
 
 .. function:: b2a_hqx(data)
 
@@ -116,6 +122,8 @@
    argument should already be RLE-coded, and have a length divisible by 3 (except
    possibly the last fragment).
 
+   .. deprecated:: 3.9
+
 
 .. function:: crc_hqx(data, value)
 
diff --git a/Doc/library/binhex.rst b/Doc/library/binhex.rst
index 2966e0d..7de6a66 100644
--- a/Doc/library/binhex.rst
+++ b/Doc/library/binhex.rst
@@ -6,6 +6,8 @@
 
 **Source code:** :source:`Lib/binhex.py`
 
+.. deprecated:: 3.9
+
 --------------
 
 This module encodes and decodes files in binhex4 format, a format allowing
diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst
index 277de60..637baf4 100644
--- a/Doc/library/bz2.rst
+++ b/Doc/library/bz2.rst
@@ -31,7 +31,7 @@
 (De)compression of files
 ------------------------
 
-.. function:: open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)
+.. function:: open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)
 
    Open a bzip2-compressed file in binary or text mode, returning a :term:`file
    object`.
@@ -65,7 +65,7 @@
       Accepts a :term:`path-like object`.
 
 
-.. class:: BZ2File(filename, mode='r', buffering=None, compresslevel=9)
+.. class:: BZ2File(filename, mode='r', *, compresslevel=9)
 
    Open a bzip2-compressed file in binary mode.
 
@@ -81,8 +81,6 @@
    If *filename* is a file object (rather than an actual file name), a mode of
    ``'w'`` does not truncate the file, and is instead equivalent to ``'a'``.
 
-   The *buffering* argument is ignored. Its use is deprecated since Python 3.0.
-
    If *mode* is ``'w'`` or ``'a'``, *compresslevel* can be an integer between
    ``1`` and ``9`` specifying the level of compression: ``1`` produces the
    least compression, and ``9`` (default) produces the most compression.
@@ -110,9 +108,6 @@
       .. versionadded:: 3.3
 
 
-   .. deprecated:: 3.0
-      The keyword argument *buffering* was deprecated and is now ignored.
-
    .. versionchanged:: 3.1
       Support for the :keyword:`with` statement was added.
 
@@ -138,6 +133,13 @@
    .. versionchanged:: 3.6
       Accepts a :term:`path-like object`.
 
+   .. versionchanged:: 3.9
+      The *buffering* parameter has been removed. It was ignored and deprecated
+      since Python 3.0. Pass an open file object to control how the file is
+      opened.
+
+      The *compresslevel* parameter became keyword-only.
+
 
 Incremental (de)compression
 ---------------------------
@@ -264,7 +266,6 @@
 Using :func:`compress` and :func:`decompress` to demonstrate round-trip compression:
 
     >>> import bz2
-
     >>> data = b"""\
     ... Donec rhoncus quis sapien sit amet molestie. Fusce scelerisque vel augue
     ... nec ullamcorper. Nam rutrum pretium placerat. Aliquam vel tristique lorem,
@@ -273,11 +274,9 @@
     ... Aliquam pharetra lacus non risus vehicula rutrum. Maecenas aliquam leo
     ... felis. Pellentesque semper nunc sit amet nibh ullamcorper, ac elementum
     ... dolor luctus. Curabitur lacinia mi ornare consectetur vestibulum."""
-
     >>> c = bz2.compress(data)
     >>> len(data) / len(c)  # Data compression ratio
     1.513595166163142
-
     >>> d = bz2.decompress(c)
     >>> data == d  # Check equality to original object after round-trip
     True
@@ -285,7 +284,6 @@
 Using :class:`BZ2Compressor` for incremental compression:
 
     >>> import bz2
-
     >>> def gen_data(chunks=10, chunksize=1000):
     ...     """Yield incremental blocks of chunksize bytes."""
     ...     for _ in range(chunks):
@@ -308,7 +306,6 @@
 Writing and reading a bzip2-compressed file in binary mode:
 
     >>> import bz2
-
     >>> data = b"""\
     ... Donec rhoncus quis sapien sit amet molestie. Fusce scelerisque vel augue
     ... nec ullamcorper. Nam rutrum pretium placerat. Aliquam vel tristique lorem,
@@ -317,14 +314,11 @@
     ... Aliquam pharetra lacus non risus vehicula rutrum. Maecenas aliquam leo
     ... felis. Pellentesque semper nunc sit amet nibh ullamcorper, ac elementum
     ... dolor luctus. Curabitur lacinia mi ornare consectetur vestibulum."""
-
     >>> with bz2.open("myfile.bz2", "wb") as f:
     ...     # Write compressed data to file
     ...     unused = f.write(data)
-
     >>> with bz2.open("myfile.bz2", "rb") as f:
     ...     # Decompress data from file
     ...     content = f.read()
-
     >>> content == data  # Check equality to original object after round-trip
     True
diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst
index 992672e..f071057 100644
--- a/Doc/library/codecs.rst
+++ b/Doc/library/codecs.rst
@@ -1198,7 +1198,8 @@
 +-----------------+--------------------------------+--------------------------------+
 | mac_iceland     | maciceland                     | Icelandic                      |
 +-----------------+--------------------------------+--------------------------------+
-| mac_latin2      | maclatin2, maccentraleurope    | Central and Eastern Europe     |
+| mac_latin2      | maclatin2, maccentraleurope,   | Central and Eastern Europe     |
+|                 | mac_centeuro                   |                                |
 +-----------------+--------------------------------+--------------------------------+
 | mac_roman       | macroman, macintosh            | Western Europe                 |
 +-----------------+--------------------------------+--------------------------------+
diff --git a/Doc/library/collections.abc.rst b/Doc/library/collections.abc.rst
index 2a3fb14..2345e78 100644
--- a/Doc/library/collections.abc.rst
+++ b/Doc/library/collections.abc.rst
@@ -98,12 +98,20 @@
 
 
 .. class:: Container
-           Hashable
-           Sized
-           Callable
 
-   ABCs for classes that provide respectively the methods :meth:`__contains__`,
-   :meth:`__hash__`, :meth:`__len__`, and :meth:`__call__`.
+   ABC for classes that provide the :meth:`__contains__` method.
+
+.. class:: Hashable
+
+   ABC for classes that provide the :meth:`__hash__` method.
+
+.. class:: Sized
+
+   ABC for classes that provide the :meth:`__len__` method.
+
+.. class:: Callable
+
+   ABC for classes that provide the :meth:`__call__` method.
 
 .. class:: Iterable
 
@@ -185,7 +193,7 @@
    expressions.  Custom implementations must provide the :meth:`__await__`
    method.
 
-   :term:`Coroutine` objects and instances of the
+   :term:`Coroutine <coroutine>` objects and instances of the
    :class:`~collections.abc.Coroutine` ABC are all instances of this ABC.
 
    .. note::
@@ -283,7 +291,7 @@
    :meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set.
    If the :class:`Set` mixin is being used in a class with a different
    constructor signature, you will need to override :meth:`_from_iterable`
-   with a classmethod that can construct new instances from
+   with a classmethod or regular method that can construct new instances from
    an iterable argument.
 
 (2)
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index d429716..2ffdb49 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -116,6 +116,9 @@
         >>> list(combined)
         ['music', 'art', 'opera']
 
+    .. versionchanged:: 3.9
+       Added support for ``|`` and ``|=`` operators, specified in :pep:`584`.
+
 .. seealso::
 
     * The `MultiContext class
@@ -729,6 +732,10 @@
         initialized from the first argument to the constructor, if present, or to
         ``None``, if absent.
 
+    .. versionchanged:: 3.9
+       Added merge (``|``) and update (``|=``) operators, specified in
+       :pep:`584`.
+
 
 :class:`defaultdict` Examples
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -842,6 +849,9 @@
     Named tuple instances do not have per-instance dictionaries, so they are
     lightweight and require no more memory than regular tuples.
 
+    To support pickling, the named tuple class should be assigned to a variable
+    that matches *typename*.
+
     .. versionchanged:: 3.1
        Added support for *rename*.
 
@@ -1119,6 +1129,10 @@
    passed to the :class:`OrderedDict` constructor and its :meth:`update`
    method.
 
+.. versionchanged:: 3.9
+    Added merge (``|``) and update (``|=``) operators, specified in :pep:`584`.
+
+
 :class:`OrderedDict` Examples and Recipes
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/Doc/library/colorsys.rst b/Doc/library/colorsys.rst
index 1360c7c..b672a05 100644
--- a/Doc/library/colorsys.rst
+++ b/Doc/library/colorsys.rst
@@ -21,7 +21,7 @@
 .. seealso::
 
    More information about color spaces can be found at
-   http://poynton.ca/ColorFAQ.html and
+   https://poynton.ca/ColorFAQ.html and
    https://www.cambridgeincolour.com/tutorials/color-spaces.htm.
 
 The :mod:`colorsys` module defines the following functions:
diff --git a/Doc/library/compileall.rst b/Doc/library/compileall.rst
index 9ce5ca8..9b914b1 100644
--- a/Doc/library/compileall.rst
+++ b/Doc/library/compileall.rst
@@ -52,6 +52,13 @@
    cases where the source file does not exist at the time the byte-code file is
    executed.
 
+.. cmdoption:: -s strip_prefix
+.. cmdoption:: -p prepend_prefix
+
+   Remove (``-s``) or append (``-p``) the given prefix of paths
+   recorded in the ``.pyc`` files.
+   Cannot be combined with ``-d``.
+
 .. cmdoption:: -x regex
 
    regex is used to search the full path to each file considered for
@@ -96,6 +103,21 @@
    variable is not set, and ``checked-hash`` if the ``SOURCE_DATE_EPOCH``
    environment variable is set.
 
+.. cmdoption:: -o level
+
+   Compile with the given optimization level. May be used multiple times
+   to compile for multiple levels at a time (for example,
+   ``compileall -o 1 -o 2``).
+
+.. cmdoption:: -e dir
+
+   Ignore symlinks pointing outside the given directory.
+
+.. cmdoption:: --hardlink-dupes
+
+   If two ``.pyc`` files with different optimization level have
+   the same content, use hard links to consolidate duplicate files.
+
 .. versionchanged:: 3.2
    Added the ``-i``, ``-b`` and ``-h`` options.
 
@@ -107,6 +129,12 @@
 .. versionchanged:: 3.7
    Added the ``--invalidation-mode`` option.
 
+.. versionchanged:: 3.9
+   Added the ``-s``, ``-p``, ``-e`` and ``--hardlink-dupes`` options.
+   Raised the default recursion limit from 10 to
+   :py:func:`sys.getrecursionlimit()`.
+   Added the possibility to specify the ``-o`` option multiple times.
+
 
 There is no command-line option to control the optimization level used by the
 :func:`compile` function, because the Python interpreter itself already
@@ -120,14 +148,14 @@
 Public functions
 ----------------
 
-.. function:: compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None)
+.. function:: compile_dir(dir, maxlevels=sys.getrecursionlimit(), ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None, \*, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)
 
    Recursively descend the directory tree named by *dir*, compiling all :file:`.py`
    files along the way. Return a true value if all the files compiled successfully,
    and a false value otherwise.
 
    The *maxlevels* parameter is used to limit the depth of the recursion; it
-   defaults to ``10``.
+   defaults to ``sys.getrecursionlimit()``.
 
    If *ddir* is given, it is prepended to the path to each file being compiled
    for use in compilation time tracebacks, and is also compiled in to the
@@ -153,7 +181,8 @@
    coexist.
 
    *optimize* specifies the optimization level for the compiler.  It is passed to
-   the built-in :func:`compile` function.
+   the built-in :func:`compile` function. Accepts also a sequence of optimization
+   levels which lead to multiple compilations of one :file:`.py` file in one call.
 
    The argument *workers* specifies how many workers are used to
    compile files in parallel. The default is to not use multiple workers.
@@ -166,6 +195,13 @@
    :class:`py_compile.PycInvalidationMode` enum and controls how the generated
    pycs are invalidated at runtime.
 
+   The *stripdir*, *prependdir* and *limit_sl_dest* arguments correspond to
+   the ``-s``, ``-p`` and ``-e`` options described above.
+   They may be specified as ``str``, ``bytes`` or :py:class:`os.PathLike`.
+
+   If *hardlink_dupes* is true and two ``.pyc`` files with different optimization
+   level have the same content, use hard links to consolidate duplicate files.
+
    .. versionchanged:: 3.2
       Added the *legacy* and *optimize* parameter.
 
@@ -191,7 +227,11 @@
    .. versionchanged:: 3.8
       Setting *workers* to 0 now chooses the optimal number of cores.
 
-.. function:: compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)
+   .. versionchanged:: 3.9
+      Added *stripdir*, *prependdir*, *limit_sl_dest* and *hardlink_dupes* arguments.
+      Default value of *maxlevels* was changed from ``10`` to ``sys.getrecursionlimit()``
+
+.. function:: compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None, \*, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)
 
    Compile the file with path *fullname*. Return a true value if the file
    compiled successfully, and a false value otherwise.
@@ -217,12 +257,20 @@
    coexist.
 
    *optimize* specifies the optimization level for the compiler.  It is passed to
-   the built-in :func:`compile` function.
+   the built-in :func:`compile` function. Accepts also a sequence of optimization
+   levels which lead to multiple compilations of one :file:`.py` file in one call.
 
    *invalidation_mode* should be a member of the
    :class:`py_compile.PycInvalidationMode` enum and controls how the generated
    pycs are invalidated at runtime.
 
+   The *stripdir*, *prependdir* and *limit_sl_dest* arguments correspond to
+   the ``-s``, ``-p`` and ``-e`` options described above.
+   They may be specified as ``str``, ``bytes`` or :py:class:`os.PathLike`.
+
+   If *hardlink_dupes* is true and two ``.pyc`` files with different optimization
+   level have the same content, use hard links to consolidate duplicate files.
+
    .. versionadded:: 3.2
 
    .. versionchanged:: 3.5
@@ -238,6 +286,9 @@
    .. versionchanged:: 3.7.2
       The *invalidation_mode* parameter's default value is updated to None.
 
+   .. versionchanged:: 3.9
+      Added *stripdir*, *prependdir*, *limit_sl_dest* and *hardlink_dupes* arguments.
+
 .. function:: compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)
 
    Byte-compile all the :file:`.py` files found along ``sys.path``. Return a
diff --git a/Doc/library/concurrency.rst b/Doc/library/concurrency.rst
index 39cd9ff..b150990 100644
--- a/Doc/library/concurrency.rst
+++ b/Doc/library/concurrency.rst
@@ -28,5 +28,3 @@
 .. toctree::
 
    _thread.rst
-   _dummy_thread.rst
-   dummy_threading.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index 41d47c7..61d6c114 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -28,7 +28,7 @@
    An abstract class that provides methods to execute calls asynchronously.  It
    should not be used directly, but through its concrete subclasses.
 
-    .. method:: submit(fn, *args, **kwargs)
+    .. method:: submit(fn, /, *args, **kwargs)
 
        Schedules the callable, *fn*, to be executed as ``fn(*args **kwargs)``
        and returns a :class:`Future` object representing the execution of the
@@ -67,7 +67,7 @@
        .. versionchanged:: 3.5
           Added the *chunksize* argument.
 
-    .. method:: shutdown(wait=True)
+    .. method:: shutdown(wait=True, \*, cancel_futures=False)
 
        Signal the executor that it should free any resources that it is using
        when the currently pending futures are done executing.  Calls to
@@ -82,6 +82,15 @@
        value of *wait*, the entire Python program will not exit until all
        pending futures are done executing.
 
+       If *cancel_futures* is ``True``, this method will cancel all pending
+       futures that the executor has not started running. Any futures that
+       are completed or running won't be cancelled, regardless of the value
+       of *cancel_futures*.
+
+       If both *cancel_futures* and *wait* are ``True``, all futures that the
+       executor has started running will be completed prior to this method
+       returning. The remaining futures are cancelled.
+
        You can avoid having to call this method explicitly if you use the
        :keyword:`with` statement, which will shutdown the :class:`Executor`
        (waiting as if :meth:`Executor.shutdown` were called with *wait* set to
@@ -94,6 +103,9 @@
               e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
               e.submit(shutil.copy, 'src4.txt', 'dest4.txt')
 
+       .. versionchanged:: 3.9
+          Added *cancel_futures*.
+
 
 ThreadPoolExecutor
 ------------------
@@ -209,7 +221,8 @@
 The :class:`ProcessPoolExecutor` class is an :class:`Executor` subclass that
 uses a pool of processes to execute calls asynchronously.
 :class:`ProcessPoolExecutor` uses the :mod:`multiprocessing` module, which
-allows it to side-step the :term:`Global Interpreter Lock` but also means that
+allows it to side-step the :term:`Global Interpreter Lock
+<global interpreter lock>` but also means that
 only picklable objects can be executed and returned.
 
 The ``__main__`` module must be importable by worker subprocesses. This means
@@ -223,9 +236,9 @@
    An :class:`Executor` subclass that executes calls asynchronously using a pool
    of at most *max_workers* processes.  If *max_workers* is ``None`` or not
    given, it will default to the number of processors on the machine.
-   If *max_workers* is lower or equal to ``0``, then a :exc:`ValueError`
+   If *max_workers* is less than or equal to ``0``, then a :exc:`ValueError`
    will be raised.
-   On Windows, *max_workers* must be equal or lower than ``61``. If it is not
+   On Windows, *max_workers* must be less than or equal to ``61``. If it is not
    then :exc:`ValueError` will be raised. If *max_workers* is ``None``, then
    the default chosen will be at most ``61``, even if more processors are
    available.
@@ -237,7 +250,7 @@
    each worker process; *initargs* is a tuple of arguments passed to the
    initializer.  Should *initializer* raise an exception, all currently
    pending jobs will raise a :exc:`~concurrent.futures.process.BrokenProcessPool`,
-   as well any attempt to submit more jobs to the pool.
+   as well as any attempt to submit more jobs to the pool.
 
    .. versionchanged:: 3.3
       When one of the worker processes terminates abruptly, a
diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst
index 739477f..2e22a54 100644
--- a/Doc/library/configparser.rst
+++ b/Doc/library/configparser.rst
@@ -674,97 +674,98 @@
 
 .. attribute:: ConfigParser.BOOLEAN_STATES
 
-  By default when using :meth:`~ConfigParser.getboolean`, config parsers
-  consider the following values ``True``: ``'1'``, ``'yes'``, ``'true'``,
-  ``'on'`` and the following values ``False``: ``'0'``, ``'no'``, ``'false'``,
-  ``'off'``.  You can override this by specifying a custom dictionary of strings
-  and their Boolean outcomes. For example:
+   By default when using :meth:`~ConfigParser.getboolean`, config parsers
+   consider the following values ``True``: ``'1'``, ``'yes'``, ``'true'``,
+   ``'on'`` and the following values ``False``: ``'0'``, ``'no'``, ``'false'``,
+   ``'off'``.  You can override this by specifying a custom dictionary of strings
+   and their Boolean outcomes. For example:
 
-  .. doctest::
+   .. doctest::
 
-     >>> custom = configparser.ConfigParser()
-     >>> custom['section1'] = {'funky': 'nope'}
-     >>> custom['section1'].getboolean('funky')
-     Traceback (most recent call last):
-     ...
-     ValueError: Not a boolean: nope
-     >>> custom.BOOLEAN_STATES = {'sure': True, 'nope': False}
-     >>> custom['section1'].getboolean('funky')
-     False
+      >>> custom = configparser.ConfigParser()
+      >>> custom['section1'] = {'funky': 'nope'}
+      >>> custom['section1'].getboolean('funky')
+      Traceback (most recent call last):
+      ...
+      ValueError: Not a boolean: nope
+      >>> custom.BOOLEAN_STATES = {'sure': True, 'nope': False}
+      >>> custom['section1'].getboolean('funky')
+      False
 
-  Other typical Boolean pairs include ``accept``/``reject`` or
-  ``enabled``/``disabled``.
+   Other typical Boolean pairs include ``accept``/``reject`` or
+   ``enabled``/``disabled``.
 
 .. method:: ConfigParser.optionxform(option)
+   :noindex:
 
-  This method transforms option names on every read, get, or set
-  operation.  The default converts the name to lowercase.  This also
-  means that when a configuration file gets written, all keys will be
-  lowercase.  Override this method if that's unsuitable.
-  For example:
+   This method transforms option names on every read, get, or set
+   operation.  The default converts the name to lowercase.  This also
+   means that when a configuration file gets written, all keys will be
+   lowercase.  Override this method if that's unsuitable.
+   For example:
 
-  .. doctest::
+   .. doctest::
 
-     >>> config = """
-     ... [Section1]
-     ... Key = Value
-     ...
-     ... [Section2]
-     ... AnotherKey = Value
-     ... """
-     >>> typical = configparser.ConfigParser()
-     >>> typical.read_string(config)
-     >>> list(typical['Section1'].keys())
-     ['key']
-     >>> list(typical['Section2'].keys())
-     ['anotherkey']
-     >>> custom = configparser.RawConfigParser()
-     >>> custom.optionxform = lambda option: option
-     >>> custom.read_string(config)
-     >>> list(custom['Section1'].keys())
-     ['Key']
-     >>> list(custom['Section2'].keys())
-     ['AnotherKey']
+      >>> config = """
+      ... [Section1]
+      ... Key = Value
+      ...
+      ... [Section2]
+      ... AnotherKey = Value
+      ... """
+      >>> typical = configparser.ConfigParser()
+      >>> typical.read_string(config)
+      >>> list(typical['Section1'].keys())
+      ['key']
+      >>> list(typical['Section2'].keys())
+      ['anotherkey']
+      >>> custom = configparser.RawConfigParser()
+      >>> custom.optionxform = lambda option: option
+      >>> custom.read_string(config)
+      >>> list(custom['Section1'].keys())
+      ['Key']
+      >>> list(custom['Section2'].keys())
+      ['AnotherKey']
 
-  .. note::
-     The optionxform function transforms option names to a canonical form.
-     This should be an idempotent function: if the name is already in
-     canonical form, it should be returned unchanged.
+   .. note::
+      The optionxform function transforms option names to a canonical form.
+      This should be an idempotent function: if the name is already in
+      canonical form, it should be returned unchanged.
 
 
 .. attribute:: ConfigParser.SECTCRE
 
-  A compiled regular expression used to parse section headers.  The default
-  matches ``[section]`` to the name ``"section"``.  Whitespace is considered
-  part of the section name, thus ``[  larch  ]`` will be read as a section of
-  name ``"  larch  "``.  Override this attribute if that's unsuitable.  For
-  example:
+   A compiled regular expression used to parse section headers.  The default
+   matches ``[section]`` to the name ``"section"``.  Whitespace is considered
+   part of the section name, thus ``[  larch  ]`` will be read as a section of
+   name ``"  larch  "``.  Override this attribute if that's unsuitable.  For
+   example:
 
-  .. doctest::
+   .. doctest::
 
-     >>> import re
-     >>> config = """
-     ... [Section 1]
-     ... option = value
-     ...
-     ... [  Section 2  ]
-     ... another = val
-     ... """
-     >>> typical = configparser.ConfigParser()
-     >>> typical.read_string(config)
-     >>> typical.sections()
-     ['Section 1', '  Section 2  ']
-     >>> custom = configparser.ConfigParser()
-     >>> custom.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")
-     >>> custom.read_string(config)
-     >>> custom.sections()
-     ['Section 1', 'Section 2']
+      >>> import re
+      >>> config = """
+      ... [Section 1]
+      ... option = value
+      ...
+      ... [  Section 2  ]
+      ... another = val
+      ... """
+      >>> typical = configparser.ConfigParser()
+      >>> typical.read_string(config)
+      >>> typical.sections()
+      ['Section 1', '  Section 2  ']
+      >>> custom = configparser.ConfigParser()
+      >>> custom.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")
+      >>> custom.read_string(config)
+      >>> custom.sections()
+      ['Section 1', 'Section 2']
 
-  .. note::
+   .. note::
 
-     While ConfigParser objects also use an ``OPTCRE`` attribute for recognizing
-     option lines, it's not recommended to override it because that would
-     interfere with constructor options *allow_no_value* and *delimiters*.
+      While ConfigParser objects also use an ``OPTCRE`` attribute for recognizing
+      option lines, it's not recommended to override it because that would
+      interfere with constructor options *allow_no_value* and *delimiters*.
 
 
 Legacy API Examples
diff --git a/Doc/library/constants.rst b/Doc/library/constants.rst
index 5017159..f17e1a3 100644
--- a/Doc/library/constants.rst
+++ b/Doc/library/constants.rst
@@ -31,7 +31,7 @@
    etc.) to indicate that the operation is not implemented with respect to
    the other type; may be returned by the in-place binary special methods
    (e.g. :meth:`__imul__`, :meth:`__iand__`, etc.) for the same purpose.
-   Its truth value is true.
+   It should not be evaluated in a boolean context.
 
    .. note::
 
@@ -50,6 +50,11 @@
       even though they have similar names and purposes.
       See :exc:`NotImplementedError` for details on when to use it.
 
+   .. versionchanged:: 3.9
+      Evaluating ``NotImplemented`` in a boolean context is deprecated. While
+      it currently evaluates as true, it will emit a :exc:`DeprecationWarning`.
+      It will raise a :exc:`TypeError` in a future version of Python.
+
 
 .. index:: single: ...; ellipsis literal
 .. data:: Ellipsis
diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst
index 73b24e5..0aa4ad7 100644
--- a/Doc/library/contextlib.rst
+++ b/Doc/library/contextlib.rst
@@ -416,7 +416,7 @@
       The passed in object is returned from the function, allowing this
       method to be used as a function decorator.
 
-   .. method:: callback(callback, *args, **kwds)
+   .. method:: callback(callback, /, *args, **kwds)
 
       Accepts an arbitrary callback function and arguments and adds it to
       the callback stack.
@@ -473,7 +473,7 @@
       Similar to :meth:`push` but expects either an asynchronous context manager
       or a coroutine function.
 
-   .. method:: push_async_callback(callback, *args, **kwds)
+   .. method:: push_async_callback(callback, /, *args, **kwds)
 
       Similar to :meth:`callback` but expects a coroutine function.
 
diff --git a/Doc/library/copyreg.rst b/Doc/library/copyreg.rst
index 40fca56..4392021 100644
--- a/Doc/library/copyreg.rst
+++ b/Doc/library/copyreg.rst
@@ -49,7 +49,7 @@
 it will be used:
 
    >>> import copyreg, copy, pickle
-   >>> class C(object):
+   >>> class C:
    ...     def __init__(self, a):
    ...         self.a = a
    ...
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index 2d6c6d0..bf32d3e 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1326,6 +1326,21 @@
    libraries use the standard C calling convention, and are assumed to return
    :c:type:`int`.
 
+   On Windows creating a :class:`CDLL` instance may fail even if the DLL name
+   exists. When a dependent DLL of the loaded DLL is not found, a
+   :exc:`OSError` error is raised with the message *"[WinError 126] The
+   specified module could not be found".* This error message does not contain
+   the name of the missing DLL because the Windows API does not return this
+   information making this error hard to diagnose. To resolve this error and
+   determine which DLL is not found, you need to find the list of dependent
+   DLLs and determine which one is not found using Windows debugging and
+   tracing tools.
+
+.. seealso::
+
+    `Microsoft DUMPBIN tool <https://docs.microsoft.com/cpp/build/reference/dependents>`_
+    -- A tool to find DLL dependents.
+
 
 .. class:: OleDLL(name, mode=DEFAULT_MODE, handle=None, use_errno=False, use_last_error=False, winmode=0)
 
@@ -1618,7 +1633,7 @@
    ``ctypes.seh_exception`` with argument ``code`` will be raised, allowing an
    audit hook to replace the exception with its own.
 
-.. audit-event:: ctypes.call_function func_pointer,arguments ctype-foreign-functions
+.. audit-event:: ctypes.call_function func_pointer,arguments foreign-functions
 
    Some ways to invoke foreign function calls may raise an auditing event
    ``ctypes.call_function`` with arguments ``function pointer`` and ``arguments``.
@@ -2545,4 +2560,3 @@
 
         Returns the object to which to pointer points.  Assigning to this
         attribute changes the pointer to point to the assigned object.
-
diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
index cbd6883..7a13295 100644
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -214,7 +214,7 @@
 .. function:: getmouse()
 
    After :meth:`~window.getch` returns :const:`KEY_MOUSE` to signal a mouse event, this
-   method should be call to retrieve the queued mouse event, represented as a
+   method should be called to retrieve the queued mouse event, represented as a
    5-tuple ``(id, x, y, z, bstate)``. *id* is an ID value used to distinguish
    multiple devices, and *x*, *y*, *z* are the event's coordinates.  (*z* is
    currently unused.)  *bstate* is an integer value whose bits will be set to
@@ -511,6 +511,32 @@
    Save the current state of the terminal modes in a buffer, usable by
    :func:`resetty`.
 
+.. function:: get_escdelay()
+
+   Retrieves the value set by :func:`set_escdelay`.
+
+   .. versionadded:: 3.9
+
+.. function:: set_escdelay(ms)
+
+   Sets the number of milliseconds to wait after reading an escape character,
+   to distinguish between an individual escape character entered on the
+   keyboard from escape sequences sent by cursor and function keys.
+
+   .. versionadded:: 3.9
+
+.. function:: get_tabsize()
+
+   Retrieves the value set by :func:`set_tabsize`.
+
+   .. versionadded:: 3.9
+
+.. function:: set_tabsize(size)
+
+   Sets the number of columns used by the curses library when converting a tab
+   character to spaces as it adds the tab to a window.
+
+   .. versionadded:: 3.9
 
 .. function:: setsyx(y, x)
 
@@ -656,7 +682,7 @@
    foreground color on the default background.
 
 
-.. function:: wrapper(func, ...)
+.. function:: wrapper(func, /, *args, **kwargs)
 
    Initialize curses and call another callable object, *func*, which should be the
    rest of your curses-using application.  If the application raises an exception,
@@ -682,7 +708,7 @@
             window.addch(y, x, ch[, attr])
 
    Paint character *ch* at ``(y, x)`` with attributes *attr*, overwriting any
-   character previously painter at that location.  By default, the character
+   character previously painted at that location.  By default, the character
    position and attributes are the current settings for the window object.
 
    .. note::
diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst
index a7fbaaa..e706f7f 100644
--- a/Doc/library/dataclasses.rst
+++ b/Doc/library/dataclasses.rst
@@ -188,7 +188,7 @@
 
      @dataclass
      class C:
-         mylist: List[int] = field(default_factory=list)
+         mylist: list[int] = field(default_factory=list)
 
      c = C()
      c.mylist += [1, 2, 3]
@@ -301,7 +301,7 @@
 
      @dataclass
      class C:
-          mylist: List[Point]
+          mylist: list[Point]
 
      p = Point(10, 20)
      assert asdict(p) == {'x': 10, 'y': 20}
@@ -359,7 +359,7 @@
          def add_one(self):
              return self.x + 1
 
-.. function:: replace(instance, **changes)
+.. function:: replace(instance, /, **changes)
 
    Creates a new object of the same type of ``instance``, replacing
    fields with values from ``changes``.  If ``instance`` is not a Data
diff --git a/Doc/library/datatypes.rst b/Doc/library/datatypes.rst
index 94010c0..ff51b27 100644
--- a/Doc/library/datatypes.rst
+++ b/Doc/library/datatypes.rst
@@ -20,6 +20,7 @@
 .. toctree::
 
    datetime.rst
+   zoneinfo.rst
    calendar.rst
    collections.rst
    collections.abc.rst
@@ -32,3 +33,4 @@
    pprint.rst
    reprlib.rst
    enum.rst
+   graphlib.rst
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index b733c44..508bc88 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -671,7 +671,8 @@
 
 .. method:: date.isocalendar()
 
-   Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
+   Return a :term:`named tuple` object with three components: ``year``,
+   ``week`` and ``weekday``.
 
    The ISO calendar is a widely used variant of the Gregorian calendar. [#]_
 
@@ -683,11 +684,14 @@
    For example, 2004 begins on a Thursday, so the first week of ISO year 2004
    begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004::
 
-       >>> from datetime import date
-       >>> date(2003, 12, 29).isocalendar()
-       (2004, 1, 1)
-       >>> date(2004, 1, 4).isocalendar()
-       (2004, 1, 7)
+        >>> from datetime import date
+        >>> date(2003, 12, 29).isocalendar()
+        datetime.IsoCalendarDate(year=2004, week=1, weekday=1)
+        >>> date(2004, 1, 4).isocalendar()
+        datetime.IsoCalendarDate(year=2004, week=1, weekday=7)
+
+   .. versionchanged:: 3.9
+      Result changed from a tuple to a :term:`named tuple`.
 
 .. method:: date.isoformat()
 
@@ -1398,8 +1402,8 @@
 
 .. method:: datetime.isocalendar()
 
-   Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
-   ``self.date().isocalendar()``.
+   Return a :term:`named tuple` with three components: ``year``, ``week``
+   and ``weekday``. The same as ``self.date().isocalendar()``.
 
 
 .. method:: datetime.isoformat(sep='T', timespec='auto')
@@ -2361,7 +2365,7 @@
 |           | string if the object is        | +063415,               |       |
 |           | naive).                        | -030712.345216         |       |
 +-----------+--------------------------------+------------------------+-------+
-| ``%Z``    | Time zone name (empty string   | (empty), UTC, EST, CST |       |
+| ``%Z``    | Time zone name (empty string   | (empty), UTC, GMT      | \(6)  |
 |           | if the object is naive).       |                        |       |
 +-----------+--------------------------------+------------------------+-------+
 | ``%j``    | Day of the year as a           | 001, 002, ..., 366     | \(9)  |
@@ -2532,9 +2536,18 @@
       In addition, providing ``'Z'`` is identical to ``'+00:00'``.
 
    ``%Z``
-      If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
-      string. Otherwise ``%Z`` is replaced by the returned value, which must
-      be a string.
+      In :meth:`strftime`, ``%Z`` is replaced by an empty string if
+      :meth:`tzname` returns ``None``; otherwise ``%Z`` is replaced by the
+      returned value, which must be a string.
+
+      :meth:`strptime` only accepts certain values for ``%Z``:
+
+      1. any value in ``time.tzname`` for your machine's locale
+      2. the hard-coded values ``UTC`` and ``GMT``
+
+      So someone living in Japan may have ``JST``, ``UTC``, and ``GMT`` as
+      valid values, but probably not ``EST``. It will raise ``ValueError`` for
+      invalid values.
 
    .. versionchanged:: 3.2
       When the ``%z`` directive is provided to the :meth:`strptime` method, an
diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst
index 38173f1..e194649 100644
--- a/Doc/library/decimal.rst
+++ b/Doc/library/decimal.rst
@@ -1488,7 +1488,7 @@
    the C version uses a thread-local rather than a coroutine-local context and the value
    is ``False``.  This is slightly faster in some nested context scenarios.
 
-.. versionadded:: 3.9 backported to 3.7 and 3.8
+.. versionadded:: 3.9 backported to 3.7 and 3.8.
 
 
 Rounding modes
@@ -2133,17 +2133,66 @@
 A. Yes.  In the CPython and PyPy3 implementations, the C/CFFI versions of
 the decimal module integrate the high speed `libmpdec
 <https://www.bytereef.org/mpdecimal/doc/libmpdec/index.html>`_ library for
-arbitrary precision correctly-rounded decimal floating point arithmetic.
+arbitrary precision correctly-rounded decimal floating point arithmetic [#]_.
 ``libmpdec`` uses `Karatsuba multiplication
 <https://en.wikipedia.org/wiki/Karatsuba_algorithm>`_
 for medium-sized numbers and the `Number Theoretic Transform
 <https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general)#Number-theoretic_transform>`_
-for very large numbers.  However, to realize this performance gain, the
-context needs to be set for unrounded calculations.
+for very large numbers.
 
-    >>> c = getcontext()
-    >>> c.prec = MAX_PREC
-    >>> c.Emax = MAX_EMAX
-    >>> c.Emin = MIN_EMIN
+The context must be adapted for exact arbitrary precision arithmetic. :attr:`Emin`
+and :attr:`Emax` should always be set to the maximum values, :attr:`clamp`
+should always be 0 (the default).  Setting :attr:`prec` requires some care.
 
-.. versionadded:: 3.3
\ No newline at end of file
+The easiest approach for trying out bignum arithmetic is to use the maximum
+value for :attr:`prec` as well [#]_::
+
+    >>> setcontext(Context(prec=MAX_PREC, Emax=MAX_EMAX, Emin=MIN_EMIN))
+    >>> x = Decimal(2) ** 256
+    >>> x / 128
+    Decimal('904625697166532776746648320380374280103671755200316906558262375061821325312')
+
+
+For inexact results, :attr:`MAX_PREC` is far too large on 64-bit platforms and
+the available memory will be insufficient::
+
+   >>> Decimal(1) / 3
+   Traceback (most recent call last):
+     File "<stdin>", line 1, in <module>
+   MemoryError
+
+On systems with overallocation (e.g. Linux), a more sophisticated approach is to
+adjust :attr:`prec` to the amount of available RAM.  Suppose that you have 8GB of
+RAM and expect 10 simultaneous operands using a maximum of 500MB each::
+
+   >>> import sys
+   >>>
+   >>> # Maximum number of digits for a single operand using 500MB in 8-byte words
+   >>> # with 19 digits per word (4-byte and 9 digits for the 32-bit build):
+   >>> maxdigits = 19 * ((500 * 1024**2) // 8)
+   >>>
+   >>> # Check that this works:
+   >>> c = Context(prec=maxdigits, Emax=MAX_EMAX, Emin=MIN_EMIN)
+   >>> c.traps[Inexact] = True
+   >>> setcontext(c)
+   >>>
+   >>> # Fill the available precision with nines:
+   >>> x = Decimal(0).logical_invert() * 9
+   >>> sys.getsizeof(x)
+   524288112
+   >>> x + 2
+   Traceback (most recent call last):
+     File "<stdin>", line 1, in <module>
+     decimal.Inexact: [<class 'decimal.Inexact'>]
+
+In general (and especially on systems without overallocation), it is recommended
+to estimate even tighter bounds and set the :attr:`Inexact` trap if all calculations
+are expected to be exact.
+
+
+.. [#]
+    .. versionadded:: 3.3
+
+.. [#]
+    .. versionchanged:: 3.9
+       This approach now works for all exact results except for non-integer powers.
diff --git a/Doc/library/development.rst b/Doc/library/development.rst
index ab34e1f..9edce75 100644
--- a/Doc/library/development.rst
+++ b/Doc/library/development.rst
@@ -18,12 +18,10 @@
 
    typing.rst
    pydoc.rst
+   devmode.rst
    doctest.rst
    unittest.rst
    unittest.mock.rst
    unittest.mock-examples.rst
    2to3.rst
    test.rst
-
-See also the Python development mode: the :option:`-X` ``dev`` option and
-:envvar:`PYTHONDEVMODE` environment variable.
diff --git a/Doc/library/devmode.rst b/Doc/library/devmode.rst
new file mode 100644
index 0000000..d5a40cd
--- /dev/null
+++ b/Doc/library/devmode.rst
@@ -0,0 +1,214 @@
+.. _devmode:
+
+Python Development Mode
+=======================
+
+.. versionadded:: 3.7
+
+The Python Development Mode introduces additional runtime checks that are too
+expensive to be enabled by default. It should not be more verbose than the
+default if the code is correct; new warnings are only emitted when an issue is
+detected.
+
+It can be enabled using the :option:`-X dev <-X>` command line option or by
+setting the :envvar:`PYTHONDEVMODE` environment variable to ``1``.
+
+Effects of the Python Development Mode
+======================================
+
+Enabling the Python Development Mode is similar to the following command, but
+with additional effects described below::
+
+    PYTHONMALLOC=debug PYTHONASYNCIODEBUG=1 python3 -W default -X faulthandler
+
+Effects of the Python Development Mode:
+
+* Add ``default`` :ref:`warning filter <describing-warning-filters>`. The
+  following warnings are shown:
+
+  * :exc:`DeprecationWarning`
+  * :exc:`ImportWarning`
+  * :exc:`PendingDeprecationWarning`
+  * :exc:`ResourceWarning`
+
+  Normally, the above warnings are filtered by the default :ref:`warning
+  filters <describing-warning-filters>`.
+
+  It behaves as if the :option:`-W default <-W>` command line option is used.
+
+  Use the :option:`-W error <-W>` command line option or set the
+  :envvar:`PYTHONWARNINGS` environment variable to ``error`` to treat warnings
+  as errors.
+
+* Install debug hooks on memory allocators to check for:
+
+  * Buffer underflow
+  * Buffer overflow
+  * Memory allocator API violation
+  * Unsafe usage of the GIL
+
+  See the :c:func:`PyMem_SetupDebugHooks` C function.
+
+  It behaves as if the :envvar:`PYTHONMALLOC` environment variable is set to
+  ``debug``.
+
+  To enable the Python Development Mode without installing debug hooks on
+  memory allocators, set the :envvar:`PYTHONMALLOC` environment variable to
+  ``default``.
+
+* Call :func:`faulthandler.enable` at Python startup to install handlers for
+  the :const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and
+  :const:`SIGILL` signals to dump the Python traceback on a crash.
+
+  It behaves as if the :option:`-X faulthandler <-X>` command line option is
+  used or if the :envvar:`PYTHONFAULTHANDLER` environment variable is set to
+  ``1``.
+
+* Enable :ref:`asyncio debug mode <asyncio-debug-mode>`. For example,
+  :mod:`asyncio` checks for coroutines that were not awaited and logs them.
+
+  It behaves as if the :envvar:`PYTHONASYNCIODEBUG` environment variable is set
+  to ``1``.
+
+* Check the *encoding* and *errors* arguments for string encoding and decoding
+  operations. Examples: :func:`open`, :meth:`str.encode` and
+  :meth:`bytes.decode`.
+
+  By default, for best performance, the *errors* argument is only checked at
+  the first encoding/decoding error and the *encoding* argument is sometimes
+  ignored for empty strings.
+
+* The :class:`io.IOBase` destructor logs ``close()`` exceptions.
+* Set the :attr:`~sys.flags.dev_mode` attribute of :attr:`sys.flags` to
+  ``True``.
+
+The Python Development Mode does not enable the :mod:`tracemalloc` module by
+default, because the overhead cost (to performance and memory) would be too
+large. Enabling the :mod:`tracemalloc` module provides additional information
+on the origin of some errors. For example, :exc:`ResourceWarning` logs the
+traceback where the resource was allocated, and a buffer overflow error logs
+the traceback where the memory block was allocated.
+
+The Python Development Mode does not prevent the :option:`-O` command line
+option from removing :keyword:`assert` statements nor from setting
+:const:`__debug__` to ``False``.
+
+.. versionchanged:: 3.8
+   The :class:`io.IOBase` destructor now logs ``close()`` exceptions.
+
+.. versionchanged:: 3.9
+   The *encoding* and *errors* arguments are now checked for string encoding
+   and decoding operations.
+
+
+ResourceWarning Example
+=======================
+
+Example of a script counting the number of lines of the text file specified in
+the command line::
+
+    import sys
+
+    def main():
+        fp = open(sys.argv[1])
+        nlines = len(fp.readlines())
+        print(nlines)
+        # The file is closed implicitly
+
+    if __name__ == "__main__":
+        main()
+
+The script does not close the file explicitly. By default, Python does not emit
+any warning. Example using README.txt, which has 269 lines:
+
+.. code-block:: shell-session
+
+    $ python3 script.py README.txt
+    269
+
+Enabling the Python Development Mode displays a :exc:`ResourceWarning` warning:
+
+.. code-block:: shell-session
+
+    $ python3 -X dev script.py README.txt
+    269
+    script.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='README.rst' mode='r' encoding='UTF-8'>
+      main()
+    ResourceWarning: Enable tracemalloc to get the object allocation traceback
+
+In addition, enabling :mod:`tracemalloc` shows the line where the file was
+opened:
+
+.. code-block:: shell-session
+
+    $ python3 -X dev -X tracemalloc=5 script.py README.rst
+    269
+    script.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='README.rst' mode='r' encoding='UTF-8'>
+      main()
+    Object allocated at (most recent call last):
+      File "script.py", lineno 10
+        main()
+      File "script.py", lineno 4
+        fp = open(sys.argv[1])
+
+The fix is to close explicitly the file. Example using a context manager::
+
+    def main():
+        # Close the file explicitly when exiting the with block
+        with open(sys.argv[1]) as fp:
+            nlines = len(fp.readlines())
+        print(nlines)
+
+Not closing a resource explicitly can leave a resource open for way longer than
+expected; it can cause severe issues upon exiting Python. It is bad in
+CPython, but it is even worse in PyPy. Closing resources explicitly makes an
+application more deterministic and more reliable.
+
+
+Bad file descriptor error example
+=================================
+
+Script displaying the first line of itself::
+
+    import os
+
+    def main():
+        fp = open(__file__)
+        firstline = fp.readline()
+        print(firstline.rstrip())
+        os.close(fp.fileno())
+        # The file is closed implicitly
+
+    main()
+
+By default, Python does not emit any warning:
+
+.. code-block:: shell-session
+
+    $ python3 script.py
+    import os
+
+The Python Development Mode shows a :exc:`ResourceWarning` and logs a "Bad file
+descriptor" error when finalizing the file object:
+
+.. code-block:: shell-session
+
+    $ python3 script.py
+    import os
+    script.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='script.py' mode='r' encoding='UTF-8'>
+      main()
+    ResourceWarning: Enable tracemalloc to get the object allocation traceback
+    Exception ignored in: <_io.TextIOWrapper name='script.py' mode='r' encoding='UTF-8'>
+    Traceback (most recent call last):
+      File "script.py", line 10, in <module>
+        main()
+    OSError: [Errno 9] Bad file descriptor
+
+``os.close(fp.fileno())`` closes the file descriptor. When the file object
+finalizer tries to close the file descriptor again, it fails with the ``Bad
+file descriptor`` error. A file descriptor must be closed only once. In the
+worst case scenario, closing it twice can lead to a crash (see :issue:`18748`
+for an example).
+
+The fix is to remove the ``os.close(fp.fileno())`` line, or open the file with
+``closefd=False``.
diff --git a/Doc/library/dialog.rst b/Doc/library/dialog.rst
new file mode 100644
index 0000000..dc82a97
--- /dev/null
+++ b/Doc/library/dialog.rst
@@ -0,0 +1,230 @@
+Tkinter Dialogs
+===============
+
+:mod:`tkinter.simpledialog` --- Standard Tkinter input dialogs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. module:: tkinter.simpledialog
+   :platform: Tk
+   :synopsis: Simple dialog windows
+
+**Source code:** :source:`Lib/tkinter/simpledialog.py`
+
+--------------
+
+The :mod:`tkinter.simpledialog` module contains convenience classes and
+functions for creating simple modal dialogs to get a value from the user.
+
+
+.. function:: askfloat(title, prompt, **kw)
+              askinteger(title, prompt, **kw)
+              askstring(title, prompt, **kw)
+
+   The above three functions provide dialogs that prompt the user to enter a value
+   of the desired type.
+
+.. class:: Dialog(parent, title=None)
+
+   The base class for custom dialogs.
+
+    .. method:: body(master)
+
+       Override to construct the dialog's interface and return the widget that
+       should have initial focus.
+
+    .. method:: buttonbox()
+
+       Default behaviour adds OK and Cancel buttons. Override for custom button
+       layouts.
+
+
+
+:mod:`tkinter.filedialog` --- File selection dialogs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. module:: tkinter.filedialog
+   :platform: Tk
+   :synopsis: Dialog classes for file selection
+
+**Source code:** :source:`Lib/tkinter/filedialog.py`
+
+--------------
+
+The :mod:`tkinter.filedialog` module provides classes and factory functions for
+creating file/directory selection windows.
+
+Native Load/Save Dialogs
+------------------------
+
+The following classes and functions provide file dialog windows that combine a
+native look-and-feel with configuration options to customize behaviour.
+The following keyword arguments are applicable to the classes and functions
+listed below:
+
+ | *parent* - the window to place the dialog on top of
+
+ | *title* - the title of the window
+
+ | *initialdir* - the directory that the dialog starts in
+
+ | *initialfile* - the file selected upon opening of the dialog
+
+ | *filetypes* - a sequence of (label, pattern) tuples, '*' wildcard is allowed
+
+ | *defaultextension* - default extension to append to file (save dialogs)
+
+ | *multiple* - when true, selection of multiple items is allowed
+
+
+**Static factory functions**
+
+The below functions when called create a modal, native look-and-feel dialog,
+wait for the user's selection, then return the selected value(s) or ``None`` to the
+caller.
+
+.. function:: askopenfile(mode="r", **options)
+              askopenfiles(mode="r", **options)
+
+   The above two functions create an :class:`Open` dialog and return the opened
+   file object(s) in read-only mode.
+
+.. function:: asksaveasfile(mode="w", **options)
+
+   Create a :class:`SaveAs` dialog and return a file object opened in write-only mode.
+
+.. function:: askopenfilename(**options)
+              askopenfilenames(**options)
+
+   The above two functions create an :class:`Open` dialog and return the
+   selected filename(s) that correspond to existing file(s).
+
+.. function:: asksaveasfilename(**options)
+
+   Create a :class:`SaveAs` dialog and return the selected filename.
+
+.. function:: askdirectory(**options)
+
+ | Prompt user to select a directory.
+ | Additional keyword option:
+ |  *mustexist* - determines if selection must be an existing directory.
+
+.. class:: Open(master=None, **options)
+           SaveAs(master=None, **options)
+
+   The above two classes provide native dialog windows for saving and loading
+   files.
+
+**Convenience classes**
+
+The below classes are used for creating file/directory windows from scratch.
+These do not emulate the native look-and-feel of the platform.
+
+.. class:: Directory(master=None, **options)
+
+   Create a dialog prompting the user to select a directory.
+
+.. note::  The *FileDialog* class should be subclassed for custom event
+   handling and behaviour.
+
+.. class:: FileDialog(master, title=None)
+
+   Create a basic file selection dialog.
+
+   .. method:: cancel_command(event=None)
+
+      Trigger the termination of the dialog window.
+
+   .. method:: dirs_double_event(event)
+
+      Event handler for double-click event on directory.
+
+   .. method:: dirs_select_event(event)
+
+      Event handler for click event on directory.
+
+   .. method:: files_double_event(event)
+
+      Event handler for double-click event on file.
+
+   .. method:: files_select_event(event)
+
+      Event handler for single-click event on file.
+
+   .. method:: filter_command(event=None)
+
+      Filter the files by directory.
+
+   .. method:: get_filter()
+
+      Retrieve the file filter currently in use.
+
+   .. method:: get_selection()
+
+      Retrieve the currently selected item.
+
+   .. method:: go(dir_or_file=os.curdir, pattern="*", default="", key=None)
+
+      Render dialog and start event loop.
+
+   .. method:: ok_event(event)
+
+      Exit dialog returning current selection.
+
+   .. method:: quit(how=None)
+
+      Exit dialog returning filename, if any.
+
+   .. method:: set_filter(dir, pat)
+
+      Set the file filter.
+
+   .. method:: set_selection(file)
+
+      Update the current file selection to *file*.
+
+
+.. class:: LoadFileDialog(master, title=None)
+
+   A subclass of FileDialog that creates a dialog window for selecting an
+   existing file.
+
+   .. method:: ok_command()
+
+      Test that a file is provided and that the selection indicates an
+      already existing file.
+
+.. class:: SaveFileDialog(master, title=None)
+
+   A subclass of FileDialog that creates a dialog window for selecting a
+   destination file.
+
+    .. method:: ok_command()
+
+      Test whether or not the selection points to a valid file that is not a
+      directory. Confirmation is required if an already existing file is
+      selected.
+
+:mod:`tkinter.commondialog` --- Dialog window templates
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. module:: tkinter.commondialog
+   :platform: Tk
+   :synopsis: Tkinter base class for dialogs
+
+**Source code:** :source:`Lib/tkinter/commondialog.py`
+
+--------------
+
+The :mod:`tkinter.commondialog` module provides the :class:`Dialog` class that
+is the base class for dialogs defined in other supporting modules.
+
+.. class:: Dialog(master=None, **options)
+
+   .. method:: show(color=None, **options)
+
+      Render the Dialog window.
+
+
+.. seealso::
+
+   Modules :mod:`tkinter.messagebox`, :ref:`tut-files`
diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst
index ada311b..aa08988 100644
--- a/Doc/library/difflib.rst
+++ b/Doc/library/difflib.rst
@@ -18,12 +18,13 @@
 --------------
 
 This module provides classes and functions for comparing sequences. It
-can be used for example, for comparing files, and can produce difference
-information in various formats, including HTML and context and unified
+can be used for example, for comparing files, and can produce information
+about file differences in various formats, including HTML and context and unified
 diffs. For comparing directories and files, see also, the :mod:`filecmp` module.
 
 
 .. class:: SequenceMatcher
+   :noindex:
 
    This is a flexible class for comparing pairs of sequences of any type, so long
    as the sequence elements are :term:`hashable`.  The basic algorithm predates, and is a
@@ -421,7 +422,7 @@
       is not changed.
 
 
-   .. method:: find_longest_match(alo, ahi, blo, bhi)
+   .. method:: find_longest_match(alo=0, ahi=None, blo=0, bhi=None)
 
       Find longest matching block in ``a[alo:ahi]`` and ``b[blo:bhi]``.
 
@@ -458,6 +459,9 @@
 
       This method returns a :term:`named tuple` ``Match(a, b, size)``.
 
+      .. versionchanged:: 3.9
+         Added default arguments.
+
 
    .. method:: get_matching_blocks()
 
@@ -648,6 +652,7 @@
 
 
 .. class:: Differ(linejunk=None, charjunk=None)
+   :noindex:
 
    Optional keyword parameters *linejunk* and *charjunk* are for filter functions
    (or ``None``):
diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
index 5b34e68..c1e72d1 100644
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -640,7 +640,7 @@
 
 .. opcode:: LIST_APPEND (i)
 
-   Calls ``list.append(TOS[-i], TOS)``.  Used to implement list comprehensions.
+   Calls ``list.append(TOS1[-i], TOS)``.  Used to implement list comprehensions.
 
 
 .. opcode:: MAP_ADD (i)
@@ -706,50 +706,29 @@
    popped values are used to restore the exception state.
 
 
-.. opcode:: POP_FINALLY (preserve_tos)
+.. opcode:: RERAISE
 
-   Cleans up the value stack and the block stack.  If *preserve_tos* is not
-   ``0`` TOS first is popped from the stack and pushed on the stack after
-   performing other stack operations:
+    Re-raises the exception currently on top of the stack.
 
-   * If TOS is ``NULL`` or an integer (pushed by :opcode:`BEGIN_FINALLY`
-     or :opcode:`CALL_FINALLY`) it is popped from the stack.
-   * If TOS is an exception type (pushed when an exception has been raised)
-     6 values are popped from the stack, the last three popped values are
-     used to restore the exception state.  An exception handler block is
-     removed from the block stack.
-
-   It is similar to :opcode:`END_FINALLY`, but doesn't change the bytecode
-   counter nor raise an exception.  Used for implementing :keyword:`break`,
-   :keyword:`continue` and :keyword:`return` in the :keyword:`finally` block.
-
-   .. versionadded:: 3.8
+    .. versionadded:: 3.9
 
 
-.. opcode:: BEGIN_FINALLY
+.. opcode:: WITH_EXCEPT_START
 
-   Pushes ``NULL`` onto the stack for using it in :opcode:`END_FINALLY`,
-   :opcode:`POP_FINALLY`, :opcode:`WITH_CLEANUP_START` and
-   :opcode:`WITH_CLEANUP_FINISH`.  Starts the :keyword:`finally` block.
+    Calls the function in position 7 on the stack with the top three
+    items on the stack as arguments.
+    Used to implement the call ``context_manager.__exit__(*exc_info())`` when an exception
+    has occurred in a :keyword:`with` statement.
 
-   .. versionadded:: 3.8
+    .. versionadded:: 3.9
 
 
-.. opcode:: END_FINALLY
+.. opcode:: LOAD_ASSERTION_ERROR
 
-   Terminates a :keyword:`finally` clause.  The interpreter recalls whether the
-   exception has to be re-raised or execution has to be continued depending on
-   the value of TOS.
+   Pushes :exc:`AssertionError` onto the stack.  Used by the :keyword:`assert`
+   statement.
 
-   * If TOS is ``NULL`` (pushed by :opcode:`BEGIN_FINALLY`) continue from
-     the next instruction. TOS is popped.
-   * If TOS is an integer (pushed by :opcode:`CALL_FINALLY`), sets the
-     bytecode counter to TOS.  TOS is popped.
-   * If TOS is an exception type (pushed when an exception has been raised)
-     6 values are popped from the stack, the first three popped values are
-     used to re-raise the exception and the last three popped values are used
-     to restore the exception state.  An exception handler block is removed
-     from the block stack.
+   .. versionadded:: 3.9
 
 
 .. opcode:: LOAD_BUILD_CLASS
@@ -772,35 +751,6 @@
    .. versionadded:: 3.2
 
 
-.. opcode:: WITH_CLEANUP_START
-
-   Starts cleaning up the stack when a :keyword:`with` statement block exits.
-
-   At the top of the stack are either ``NULL`` (pushed by
-   :opcode:`BEGIN_FINALLY`) or 6 values pushed if an exception has been
-   raised in the with block.  Below is the context manager's
-   :meth:`~object.__exit__` or :meth:`~object.__aexit__` bound method.
-
-   If TOS is ``NULL``, calls ``SECOND(None, None, None)``,
-   removes the function from the stack, leaving TOS, and pushes ``None``
-   to the stack.  Otherwise calls ``SEVENTH(TOP, SECOND, THIRD)``,
-   shifts the bottom 3 values of the stack down, replaces the empty spot
-   with ``NULL`` and pushes TOS.  Finally pushes the result of the call.
-
-
-.. opcode:: WITH_CLEANUP_FINISH
-
-   Finishes cleaning up the stack when a :keyword:`with` statement block exits.
-
-   TOS is result of ``__exit__()`` or ``__aexit__()`` function call pushed
-   by :opcode:`WITH_CLEANUP_START`.  SECOND is ``None`` or an exception type
-   (pushed when an exception has been raised).
-
-   Pops two values from the stack.  If SECOND is not None and TOS is true
-   unwinds the EXCEPT_HANDLER block which was created when the exception
-   was caught and pushes ``NULL`` to the stack.
-
-
 All of the following opcodes use their arguments.
 
 .. opcode:: STORE_NAME (namei)
@@ -909,61 +859,39 @@
    .. versionadded:: 3.6
 
 
-.. opcode:: BUILD_TUPLE_UNPACK (count)
+.. opcode:: LIST_TO_TUPLE
 
-   Pops *count* iterables from the stack, joins them in a single tuple,
-   and pushes the result.  Implements iterable unpacking in tuple
-   displays ``(*x, *y, *z)``.
+   Pops a list from the stack and pushes a tuple containing the same values.
 
-   .. versionadded:: 3.5
+   .. versionadded:: 3.9
 
 
-.. opcode:: BUILD_TUPLE_UNPACK_WITH_CALL (count)
+.. opcode:: LIST_EXTEND (i)
 
-   This is similar to :opcode:`BUILD_TUPLE_UNPACK`,
-   but is used for ``f(*x, *y, *z)`` call syntax. The stack item at position
-   ``count + 1`` should be the corresponding callable ``f``.
+   Calls ``list.extend(TOS1[-i], TOS)``.  Used to build lists.
 
-   .. versionadded:: 3.6
+   .. versionadded:: 3.9
 
 
-.. opcode:: BUILD_LIST_UNPACK (count)
+.. opcode:: SET_UPDATE (i)
 
-   This is similar to :opcode:`BUILD_TUPLE_UNPACK`, but pushes a list
-   instead of tuple.  Implements iterable unpacking in list
-   displays ``[*x, *y, *z]``.
+   Calls ``set.update(TOS1[-i], TOS)``.  Used to build sets.
 
-   .. versionadded:: 3.5
+   .. versionadded:: 3.9
 
 
-.. opcode:: BUILD_SET_UNPACK (count)
+.. opcode:: DICT_UPDATE (i)
 
-   This is similar to :opcode:`BUILD_TUPLE_UNPACK`, but pushes a set
-   instead of tuple.  Implements iterable unpacking in set
-   displays ``{*x, *y, *z}``.
+   Calls ``dict.update(TOS1[-i], TOS)``.  Used to build dicts.
 
-   .. versionadded:: 3.5
+   .. versionadded:: 3.9
 
 
-.. opcode:: BUILD_MAP_UNPACK (count)
+.. opcode:: DICT_MERGE
 
-   Pops *count* mappings from the stack, merges them into a single dictionary,
-   and pushes the result.  Implements dictionary unpacking in dictionary
-   displays ``{**x, **y, **z}``.
+   Like :opcode:`DICT_UPDATE` but raises an exception for duplicate keys.
 
-   .. versionadded:: 3.5
-
-
-.. opcode:: BUILD_MAP_UNPACK_WITH_CALL (count)
-
-   This is similar to :opcode:`BUILD_MAP_UNPACK`,
-   but is used for ``f(**x, **y, **z)`` call syntax.  The stack item at
-   position ``count + 2`` should be the corresponding callable ``f``.
-
-   .. versionadded:: 3.5
-   .. versionchanged:: 3.6
-      The position of the callable is determined by adding 2 to the opcode
-      argument instead of encoding it in the second byte of the argument.
+   .. versionadded:: 3.9
 
 
 .. opcode:: LOAD_ATTR (namei)
@@ -977,6 +905,20 @@
    ``cmp_op[opname]``.
 
 
+.. opcode:: IS_OP (invert)
+
+   Performs ``is`` comparison, or ``is not`` if ``invert`` is 1.
+
+   .. versionadded:: 3.9
+
+
+.. opcode:: CONTAINS_OP (invert)
+
+   Performs ``in`` comparison, or ``not in`` if ``invert`` is 1.
+
+   .. versionadded:: 3.9
+
+
 .. opcode:: IMPORT_NAME (namei)
 
    Imports the module ``co_names[namei]``.  TOS and TOS1 are popped and provide
@@ -1011,6 +953,13 @@
 
    .. versionadded:: 3.1
 
+.. opcode:: JUMP_IF_NOT_EXC_MATCH (target)
+
+   Tests whether the second value on the stack is an exception matching TOS,
+   and jumps if it is not. Pops two values from the stack.
+
+   .. versionadded:: 3.9
+
 
 .. opcode:: JUMP_IF_TRUE_OR_POP (target)
 
@@ -1037,7 +986,7 @@
 
    TOS is an :term:`iterator`.  Call its :meth:`~iterator.__next__` method.  If
    this yields a new value, push it on the stack (leaving the iterator below
-   it).  If the iterator indicates it is exhausted TOS is popped, and the byte
+   it).  If the iterator indicates it is exhausted, TOS is popped, and the byte
    code counter is incremented by *delta*.
 
 
@@ -1052,15 +1001,6 @@
    stack.  *delta* points to the finally block or the first except block.
 
 
-.. opcode:: CALL_FINALLY (delta)
-
-   Pushes the address of the next instruction onto the stack and increments
-   bytecode counter by *delta*.  Used for calling the finally block as a
-   "subroutine".
-
-   .. versionadded:: 3.8
-
-
 .. opcode:: LOAD_FAST (var_num)
 
    Pushes a reference to the local ``co_varnames[var_num]`` onto the stack.
@@ -1142,8 +1082,10 @@
 
    Calls a callable object with positional (if any) and keyword arguments.
    *argc* indicates the total number of positional and keyword arguments.
-   The top element on the stack contains a tuple of keyword argument names.
-   Below that are keyword arguments in the order corresponding to the tuple.
+   The top element on the stack contains a tuple with the names of the
+   keyword arguments, which must be strings.
+   Below that are the values for the keyword arguments,
+   in the order corresponding to the tuple.
    Below that are positional arguments, with the right-most parameter on
    top.  Below the arguments is a callable object to call.
    ``CALL_FUNCTION_KW`` pops all arguments and the callable object off the stack,
@@ -1160,10 +1102,6 @@
    Calls a callable object with variable set of positional and keyword
    arguments.  If the lowest bit of *flags* is set, the top of the stack
    contains a mapping object containing additional keyword arguments.
-   Below that is an iterable object containing positional arguments and
-   a callable object to call.  :opcode:`BUILD_MAP_UNPACK_WITH_CALL` and
-   :opcode:`BUILD_TUPLE_UNPACK_WITH_CALL` can be used for merging multiple
-   mapping objects and iterables containing arguments.
    Before the callable is called, the mapping object and iterable object
    are each "unpacked" and their contents passed in as keyword and
    positional arguments respectively.
diff --git a/Doc/library/dummy_threading.rst b/Doc/library/dummy_threading.rst
deleted file mode 100644
index dfc3289..0000000
--- a/Doc/library/dummy_threading.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-:mod:`dummy_threading` --- Drop-in replacement for the :mod:`threading` module
-==============================================================================
-
-.. module:: dummy_threading
-   :synopsis: Drop-in replacement for the threading module.
-
-**Source code:** :source:`Lib/dummy_threading.py`
-
-.. deprecated:: 3.7
-   Python now always has threading enabled.  Please use :mod:`threading` instead.
-
---------------
-
-This module provides a duplicate interface to the :mod:`threading` module.
-It was meant to be imported when the :mod:`_thread` module was not provided
-on a platform.
-
-Be careful to not use this module where deadlock might occur from a thread being
-created that blocks waiting for another thread to be created.  This often occurs
-with blocking I/O.
diff --git a/Doc/library/email.encoders.rst b/Doc/library/email.encoders.rst
index e4752a5..5d68b10 100644
--- a/Doc/library/email.encoders.rst
+++ b/Doc/library/email.encoders.rst
@@ -15,7 +15,7 @@
 This module is deprecated in Python 3.  The functions provided here
 should not be called explicitly since the :class:`~email.mime.text.MIMEText`
 class sets the content type and CTE header using the *_subtype* and *_charset*
-values passed during the instaniation of that class.
+values passed during the instantiation of that class.
 
 The remaining text in this section is the original documentation of the module.
 
diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index 2649b7d..a3c5165 100644
--- a/Doc/library/enum.rst
+++ b/Doc/library/enum.rst
@@ -19,6 +19,12 @@
 constant values.  Within an enumeration, the members can be compared
 by identity, and the enumeration itself can be iterated over.
 
+.. note:: Case of Enum Members
+
+    Because Enums are used to represent constants we recommend using
+    UPPER_CASE names for enum members, and will be using that style
+    in our examples.
+
 
 Module Contents
 ---------------
@@ -50,12 +56,13 @@
     the bitwise operations without losing their :class:`Flag` membership.
 
 .. function:: unique
+   :noindex:
 
     Enum class decorator that ensures only one name is bound to any one value.
 
 .. class:: auto
 
-    Instances are replaced with an appropriate value for Enum members. Initial value starts at 1.
+    Instances are replaced with an appropriate value for Enum members.  By default, the initial value starts at 1.
 
 .. versionadded:: 3.6  ``Flag``, ``IntFlag``, ``auto``
 
@@ -387,8 +394,8 @@
 variable names listed in :attr:`_ignore_`.
 
 Note:  if your enumeration defines :meth:`__new__` and/or :meth:`__init__` then
-whatever value(s) were given to the enum member will be passed into those
-methods.  See `Planet`_ for an example.
+any value(s) given to the enum member will be passed into those methods.
+See `Planet`_ for an example.
 
 
 Restricted Enum subclassing
@@ -734,8 +741,7 @@
 2. While :class:`Enum` can have members of any type, once you mix in an
    additional type, all the members must have values of that type, e.g.
    :class:`int` above.  This restriction does not apply to mix-ins which only
-   add methods and don't specify another data type such as :class:`int` or
-   :class:`str`.
+   add methods and don't specify another type.
 3. When another data type is mixed in, the :attr:`value` attribute is *not the
    same* as the enum member itself, although it is equivalent and will compare
    equal.
@@ -743,9 +749,11 @@
    :meth:`__str__` and :meth:`__repr__` respectively; other codes (such as
    `%i` or `%h` for IntEnum) treat the enum member as its mixed-in type.
 5. :ref:`Formatted string literals <f-strings>`, :meth:`str.format`,
-   and :func:`format` will use the mixed-in
-   type's :meth:`__format__`.  If the :class:`Enum` class's :func:`str` or
-   :func:`repr` is desired, use the `!s` or `!r` format codes.
+   and :func:`format` will use the mixed-in type's :meth:`__format__`
+   unless :meth:`__str__` or :meth:`__format__` is overridden in the subclass,
+   in which case the overridden methods or :class:`Enum` methods will be used.
+   Use the !s and !r format codes to force usage of the :class:`Enum` class's
+   :meth:`__str__` and :meth:`__repr__` methods.
 
 When to use :meth:`__new__` vs. :meth:`__init__`
 ------------------------------------------------
@@ -879,6 +887,32 @@
     >>> Color.GREEN.value
     2
 
+To make a more general purpose ``AutoNumber``, add ``*args`` to the signature::
+
+    >>> class AutoNumber(NoValue):
+    ...     def __new__(cls, *args):      # this is the only change from above
+    ...         value = len(cls.__members__) + 1
+    ...         obj = object.__new__(cls)
+    ...         obj._value_ = value
+    ...         return obj
+    ...
+
+Then when you inherit from ``AutoNumber`` you can write your own ``__init__``
+to handle any extra arguments::
+
+    >>> class Swatch(AutoNumber):
+    ...     def __init__(self, pantone='unknown'):
+    ...         self.pantone = pantone
+    ...     AUBURN = '3497'
+    ...     SEA_GREEN = '1246'
+    ...     BLEACHED_CORAL = () # New color, no Pantone code yet!
+    ...
+    >>> Swatch.SEA_GREEN
+    <Swatch.SEA_GREEN: 2>
+    >>> Swatch.SEA_GREEN.pantone
+    '1246'
+    >>> Swatch.BLEACHED_CORAL.pantone
+    'unknown'
 
 .. note::
 
@@ -1056,7 +1090,7 @@
 
 - ``_missing_`` -- a lookup function used when a value is not found; may be
   overridden
-- ``_ignore_`` -- a list of names, either as a :func:`list` or a :func:`str`,
+- ``_ignore_`` -- a list of names, either as a :class:`list` or a :class:`str`,
   that will not be transformed into members, and will be removed from the final
   class
 - ``_order_`` -- used in Python 2/3 code to ensure member order is consistent
diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst
index 52a505e..df2cda9 100644
--- a/Doc/library/exceptions.rst
+++ b/Doc/library/exceptions.rst
@@ -688,6 +688,10 @@
    Base class for warnings about deprecated features when those warnings are
    intended for other Python developers.
 
+   Ignored by the default warning filters, except in the ``__main__`` module
+   (:pep:`565`). Enabling the :ref:`Python Development Mode <devmode>` shows
+   this warning.
+
 
 .. exception:: PendingDeprecationWarning
 
@@ -699,6 +703,9 @@
    upcoming deprecation is unusual, and :exc:`DeprecationWarning`
    is preferred for already active deprecations.
 
+   Ignored by the default warning filters. Enabling the :ref:`Python
+   Development Mode <devmode>` shows this warning.
+
 
 .. exception:: SyntaxWarning
 
@@ -720,6 +727,9 @@
 
    Base class for warnings about probable mistakes in module imports.
 
+   Ignored by the default warning filters. Enabling the :ref:`Python
+   Development Mode <devmode>` shows this warning.
+
 
 .. exception:: UnicodeWarning
 
@@ -733,8 +743,10 @@
 
 .. exception:: ResourceWarning
 
-   Base class for warnings related to resource usage. Ignored by the default
-   warning filters.
+   Base class for warnings related to resource usage.
+
+   Ignored by the default warning filters. Enabling the :ref:`Python
+   Development Mode <devmode>` shows this warning.
 
    .. versionadded:: 3.2
 
diff --git a/Doc/library/faulthandler.rst b/Doc/library/faulthandler.rst
index b588dfa..59274c1 100644
--- a/Doc/library/faulthandler.rst
+++ b/Doc/library/faulthandler.rst
@@ -40,6 +40,9 @@
 The module is implemented in C, so tracebacks can be dumped on a crash or when
 Python is deadlocked.
 
+The :ref:`Python Development Mode <devmode>` calls :func:`faulthandler.enable`
+at Python startup.
+
 
 Dumping the traceback
 ---------------------
diff --git a/Doc/library/fcntl.rst b/Doc/library/fcntl.rst
index 69484b6..07a15d2 100644
--- a/Doc/library/fcntl.rst
+++ b/Doc/library/fcntl.rst
@@ -33,6 +33,12 @@
    ``F_SEAL_*`` constants for sealing of :func:`os.memfd_create` file
    descriptors.
 
+.. versionchanged:: 3.9
+   On macOS, the fcntl module exposes the ``F_GETPATH`` constant, which obtains
+   the path of a file from a file descriptor.
+   On Linux(>=3.15), the fcntl module exposes the ``F_OFD_GETLK``, ``F_OFD_SETLK``
+   and ``F_OFD_SETLKW`` constants, which working with open file description locks.
+
 The module defines the following functions:
 
 
diff --git a/Doc/library/fractions.rst b/Doc/library/fractions.rst
index 58e7126..a4d006e 100644
--- a/Doc/library/fractions.rst
+++ b/Doc/library/fractions.rst
@@ -84,6 +84,10 @@
       The :class:`Fraction` constructor now accepts :class:`float` and
       :class:`decimal.Decimal` instances.
 
+   .. versionchanged:: 3.9
+      The :func:`math.gcd` function is now used to normalize the *numerator*
+      and *denominator*. :func:`math.gcd` always return a :class:`int` type.
+      Previously, the GCD type depended on *numerator* and *denominator*.
 
    .. attribute:: numerator
 
@@ -172,18 +176,6 @@
       method can also be accessed through the :func:`round` function.
 
 
-.. function:: gcd(a, b)
-
-   Return the greatest common divisor of the integers *a* and *b*.  If either
-   *a* or *b* is nonzero, then the absolute value of ``gcd(a, b)`` is the
-   largest integer that divides both *a* and *b*.  ``gcd(a,b)`` has the same
-   sign as *b* if *b* is nonzero; otherwise it takes the sign of *a*.  ``gcd(0,
-   0)`` returns ``0``.
-
-   .. deprecated:: 3.5
-      Use :func:`math.gcd` instead.
-
-
 .. seealso::
 
    Module :mod:`numbers`
diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst
index db02123..f4d4cdf 100644
--- a/Doc/library/ftplib.rst
+++ b/Doc/library/ftplib.rst
@@ -19,10 +19,12 @@
 :mod:`urllib.request` to handle URLs that use FTP.  For more information on FTP
 (File Transfer Protocol), see Internet :rfc:`959`.
 
+The default encoding is UTF-8, following :rfc:`2640`.
+
 Here's a sample session using the :mod:`ftplib` module::
 
    >>> from ftplib import FTP
-   >>> ftp = FTP('ftp.debian.org')     # connect to host, default port
+   >>> ftp = FTP('ftp.us.debian.org')  # connect to host, default port
    >>> ftp.login()                     # user anonymous, passwd anonymous@
    '230 Login successful.'
    >>> ftp.cwd('debian')               # change into "debian" directory
@@ -41,7 +43,7 @@
 
 The module defines the following items:
 
-.. class:: FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None)
+.. class:: FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None, *, encoding='utf-8')
 
    Return a new instance of the :class:`FTP` class.  When *host* is given, the
    method call ``connect(host)`` is made.  When *user* is given, additionally
@@ -50,7 +52,8 @@
    parameter specifies a timeout in seconds for blocking operations like the
    connection attempt (if is not specified, the global default timeout setting
    will be used). *source_address* is a 2-tuple ``(host, port)`` for the socket
-   to bind to as its source address before connecting.
+   to bind to as its source address before connecting. The *encoding* parameter
+   specifies the encoding for directories and filenames.
 
    The :class:`FTP` class supports the :keyword:`with` statement, e.g.:
 
@@ -72,8 +75,13 @@
    .. versionchanged:: 3.3
       *source_address* parameter was added.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket.
+      The *encoding* parameter was added, and the default was changed from
+      Latin-1 to UTF-8 to follow :rfc:`2640`.
 
-.. class:: FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)
+.. class:: FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None, *, encoding='utf-8')
 
    A :class:`FTP` subclass which adds TLS support to FTP as described in
    :rfc:`4217`.
@@ -105,6 +113,12 @@
        :func:`ssl.create_default_context` select the system's trusted CA
        certificates for you.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket.
+      The *encoding* parameter was added, and the default was changed from
+      Latin-1 to UTF-8 to follow :rfc:`2640`.
+
    Here's a sample session using the :class:`FTP_TLS` class::
 
       >>> ftps = FTP_TLS('ftp.pureftpd.org')
@@ -252,9 +266,10 @@
 
 .. method:: FTP.retrlines(cmd, callback=None)
 
-   Retrieve a file or directory listing in ASCII transfer mode.  *cmd* should be
-   an appropriate ``RETR`` command (see :meth:`retrbinary`) or a command such as
-   ``LIST`` or ``NLST`` (usually just the string ``'LIST'``).
+   Retrieve a file or directory listing in the encoding specified by the
+   *encoding* parameter at initialization.
+   *cmd* should be an appropriate ``RETR`` command (see :meth:`retrbinary`) or
+   a command such as ``LIST`` or ``NLST`` (usually just the string ``'LIST'``).
    ``LIST`` retrieves a list of files and information about those files.
    ``NLST`` retrieves a list of file names.
    The *callback* function is called for each line with a string argument
@@ -284,7 +299,7 @@
 
 .. method:: FTP.storlines(cmd, fp, callback=None)
 
-   Store a file in ASCII transfer mode.  *cmd* should be an appropriate
+   Store a file in line mode.  *cmd* should be an appropriate
    ``STOR`` command (see :meth:`storbinary`).  Lines are read until EOF from the
    :term:`file object` *fp* (opened in binary mode) using its :meth:`~io.IOBase.readline`
    method to provide the data to be stored.  *callback* is an optional single
@@ -302,10 +317,9 @@
    If optional *rest* is given, a ``REST`` command is sent to the server, passing
    *rest* as an argument.  *rest* is usually a byte offset into the requested file,
    telling the server to restart sending the file's bytes at the requested offset,
-   skipping over the initial bytes.  Note however that :rfc:`959` requires only that
-   *rest* be a string containing characters in the printable range from ASCII code
-   33 to ASCII code 126.  The :meth:`transfercmd` method, therefore, converts
-   *rest* to a string, but no check is performed on the string's contents.  If the
+   skipping over the initial bytes.  Note however that the :meth:`transfercmd`
+   method converts *rest* to a string with the *encoding* parameter specified
+   at initialization, but no check is performed on the string's contents.  If the
    server does not recognize the ``REST`` command, an :exc:`error_reply` exception
    will be raised.  If this happens, simply call :meth:`transfercmd` without a
    *rest* argument.
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 0f7df0e..9c12b6c 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -43,9 +43,8 @@
 .. function:: abs(x)
 
    Return the absolute value of a number.  The argument may be an
-   integer or a floating point number.  If the argument is a complex number, its
-   magnitude is returned. If *x* defines :meth:`__abs__`,
-   ``abs(x)`` returns ``x.__abs__()``.
+   integer, a floating point number, or an object implementing :meth:`__abs__`.
+   If the argument is a complex number, its magnitude is returned.
 
 
 .. function:: all(iterable)
@@ -151,8 +150,8 @@
    * If it is an *integer*, the array will have that size and will be
      initialized with null bytes.
 
-   * If it is an object conforming to the *buffer* interface, a read-only buffer
-     of the object will be used to initialize the bytes array.
+   * If it is an object conforming to the :ref:`buffer interface <bufferobjects>`,
+     a read-only buffer of the object will be used to initialize the bytes array.
 
    * If it is an *iterable*, it must be an iterable of integers in the range
      ``0 <= x < 256``, which are used as the initial contents of the array.
@@ -222,10 +221,12 @@
    implied first argument.
 
    Class methods are different than C++ or Java static methods. If you want those,
-   see :func:`staticmethod`.
-
+   see :func:`staticmethod` in this section.
    For more information on class methods, see :ref:`types`.
 
+   .. versionchanged:: 3.9
+      Class methods can now wrap other :term:`descriptors <descriptor>` such as
+      :func:`property`.
 
 .. function:: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
 
@@ -244,26 +245,24 @@
    interactive statement (in the latter case, expression statements that
    evaluate to something other than ``None`` will be printed).
 
-   The optional arguments *flags* and *dont_inherit* control which :ref:`future
-   statements <future>` affect the compilation of *source*.  If neither
-   is present (or both are zero) the code is compiled with those future
-   statements that are in effect in the code that is calling :func:`compile`.  If the
-   *flags* argument is given and *dont_inherit* is not (or is zero) then the
-   future statements specified by the *flags* argument are used in addition to
-   those that would be used anyway. If *dont_inherit* is a non-zero integer then
-   the *flags* argument is it -- the future statements in effect around the call
-   to compile are ignored.
+   The optional arguments *flags* and *dont_inherit* control which
+   :ref:`compiler options <ast-compiler-flags>` should be activated
+   and which :ref:`future features <future>` should be allowed. If neither
+   is present (or both are zero) the code is compiled with the same flags that
+   affect the code that is calling :func:`compile`. If the *flags*
+   argument is given and *dont_inherit* is not (or is zero) then the compiler
+   options and the future statements specified by the *flags* argument are used
+   in addition to those that would be used anyway. If *dont_inherit* is a
+   non-zero integer then the *flags* argument is it -- the flags (future
+   features and compiler options) in the surrounding code are ignored.
 
-   Future statements are specified by bits which can be bitwise ORed together to
-   specify multiple statements.  The bitfield required to specify a given feature
-   can be found as the :attr:`~__future__._Feature.compiler_flag` attribute on
-   the :class:`~__future__._Feature` instance in the :mod:`__future__` module.
-
-   The optional argument *flags* also controls whether the compiled source is
-   allowed to contain top-level ``await``, ``async for`` and ``async with``.
-   When the bit ``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` is set, the return code
-   object has ``CO_COROUTINE`` set in ``co_code``, and can be interactively
-   executed via ``await eval(code_object)``.
+   Compiler options and future statements are specified by bits which can be
+   bitwise ORed together to specify multiple options. The bitfield required to
+   specify a given future feature can be found as the
+   :attr:`~__future__._Feature.compiler_flag` attribute on the
+   :class:`~__future__._Feature` instance in the :mod:`__future__` module.
+   :ref:`Compiler flags <ast-compiler-flags>` can be found in :mod:`ast`
+   module, with ``PyCF_`` prefix.
 
    The argument *optimize* specifies the optimization level of the compiler; the
    default value of ``-1`` selects the optimization level of the interpreter as
@@ -581,7 +580,7 @@
    input must conform to the following grammar after leading and trailing
    whitespace characters are removed:
 
-   .. productionlist::
+   .. productionlist:: float
       sign: "+" | "-"
       infinity: "Infinity" | "inf"
       nan: "nan"
@@ -767,6 +766,8 @@
 
    .. impl-detail:: This is the address of the object in memory.
 
+   .. audit-event:: builtins.id id id
+
 
 .. function:: input([prompt])
 
@@ -890,6 +891,11 @@
    sequence (such as a string, bytes, tuple, list, or range) or a collection
    (such as a dictionary, set, or frozen set).
 
+   .. impl-detail::
+
+      ``len`` raises :exc:`OverflowError` on lengths larger than
+      :data:`sys.maxsize`, such as :class:`range(2 ** 100) <range>`.
+
 
 .. _func-list:
 .. class:: list([iterable])
@@ -1035,7 +1041,8 @@
 .. function:: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
 
    Open *file* and return a corresponding :term:`file object`.  If the file
-   cannot be opened, an :exc:`OSError` is raised.
+   cannot be opened, an :exc:`OSError` is raised. See
+   :ref:`tut-files` for more examples of how to use this function.
 
    *file* is a :term:`path-like object` giving the pathname (absolute or
    relative to the current working directory) of the file to be opened or an
@@ -1245,7 +1252,7 @@
 
          * The file is now non-inheritable.
 
-   .. deprecated-removed:: 3.4 3.9
+   .. deprecated-removed:: 3.4 3.10
 
       The ``'U'`` mode.
 
@@ -1713,6 +1720,9 @@
    locals dictionary is only useful for reads since updates to the locals
    dictionary are ignored.
 
+   A :exc:`TypeError` exception is raised if an object is specified but
+   it doesn't have a :attr:`~object.__dict__` attribute (for example, if
+   its class defines the :attr:`~object.__slots__` attribute).
 
 .. function:: zip(*iterables)
 
@@ -1828,6 +1838,9 @@
       Negative values for *level* are no longer supported (which also changes
       the default value to 0).
 
+   .. versionchanged:: 3.9
+      When the command line options :option:`-E` or :option:`-I` are being used,
+      the environment variable :envvar:`PYTHONCASEOK` is now ignored.
 
 .. rubric:: Footnotes
 
diff --git a/Doc/library/functools.rst b/Doc/library/functools.rst
index 0fb8d90..4869b67 100644
--- a/Doc/library/functools.rst
+++ b/Doc/library/functools.rst
@@ -8,10 +8,16 @@
 .. moduleauthor:: Raymond Hettinger <python@rcn.com>
 .. moduleauthor:: Nick Coghlan <ncoghlan@gmail.com>
 .. moduleauthor:: Łukasz Langa <lukasz@langa.pl>
+.. moduleauthor:: Pablo Galindo <pablogsal@gmail.com>
 .. sectionauthor:: Peter Harris <scav@blueyonder.co.uk>
 
 **Source code:** :source:`Lib/functools.py`
 
+.. testsetup:: default
+
+   import functools
+   from functools import *
+
 --------------
 
 The :mod:`functools` module is for higher-order functions: functions that act on
@@ -20,6 +26,32 @@
 
 The :mod:`functools` module defines the following functions:
 
+.. decorator:: cache(user_function)
+
+   Simple lightweight unbounded function cache.  Sometimes called
+   `"memoize" <https://en.wikipedia.org/wiki/Memoization>`_.
+
+   Returns the same as ``lru_cache(maxsize=None)``, creating a thin
+   wrapper around a dictionary lookup for the function arguments.  Because it
+   never needs to evict old values, this is smaller and faster than
+   :func:`lru_cache()` with a size limit.
+
+   For example::
+
+        @cache
+        def factorial(n):
+            return n * factorial(n-1) if n else 1
+
+        >>> factorial(10)      # no previously cached result, makes 11 recursive calls
+        3628800
+        >>> factorial(5)       # just looks up cached value result
+        120
+        >>> factorial(12)      # makes two new recursive calls, the other 10 are cached
+        479001600
+
+   .. versionadded:: 3.9
+
+
 .. decorator:: cached_property(func)
 
    Transform a method of a class into a property whose value is computed once
@@ -41,17 +73,32 @@
            def variance(self):
                return statistics.variance(self._data)
 
+   Note, this decorator interferes with the operation of :pep:`412`
+   key-sharing dictionaries.  This means that instance dictionaries
+   can take more space than usual.
+
+   Also, this decorator requires that the ``__dict__`` attribute on each instance
+   be a mutable mapping. This means it will not work with some types, such as
+   metaclasses (since the ``__dict__`` attributes on type instances are
+   read-only proxies for the class namespace), and those that specify
+   ``__slots__`` without including ``__dict__`` as one of the defined slots
+   (as such classes don't provide a ``__dict__`` attribute at all).
+
+   If a mutable mapping is not available or if space-efficient key sharing
+   is desired, an effect similar to :func:`cached_property` can be achieved
+   by a stacking :func:`property` on top of :func:`cache`::
+
+       class DataSet:
+           def __init__(self, sequence_of_numbers):
+               self._data = sequence_of_numbers
+
+           @property
+           @cache
+           def stdev(self):
+               return statistics.stdev(self._data)
+
    .. versionadded:: 3.8
 
-   .. note::
-
-      This decorator requires that the ``__dict__`` attribute on each instance
-      be a mutable mapping. This means it will not work with some types, such as
-      metaclasses (since the ``__dict__`` attributes on type instances are
-      read-only proxies for the class namespace), and those that specify
-      ``__slots__`` without including ``__dict__`` as one of the defined slots
-      (as such classes don't provide a ``__dict__`` attribute at all).
-
 
 .. function:: cmp_to_key(func)
 
@@ -107,6 +154,11 @@
    cached separately.  For example, ``f(3)`` and ``f(3.0)`` will be treated
    as distinct calls with distinct results.
 
+   The wrapped function is instrumented with a :func:`cache_parameters`
+   function that returns a new :class:`dict` showing the values for *maxsize*
+   and *typed*.  This is for information purposes only.  Mutating the values
+   has no effect.
+
    To help measure the effectiveness of the cache and tune the *maxsize*
    parameter, the wrapped function is instrumented with a :func:`cache_info`
    function that returns a :term:`named tuple` showing *hits*, *misses*,
@@ -121,11 +173,11 @@
    bypassing the cache, or for rewrapping the function with a different cache.
 
    An `LRU (least recently used) cache
-   <https://en.wikipedia.org/wiki/Cache_algorithms#Examples>`_ works
-   best when the most recent calls are the best predictors of upcoming calls (for
-   example, the most popular articles on a news server tend to change each day).
-   The cache's size limit assures that the cache does not grow without bound on
-   long-running processes such as web servers.
+   <https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)>`_
+   works best when the most recent calls are the best predictors of upcoming
+   calls (for example, the most popular articles on a news server tend to
+   change each day).  The cache's size limit assures that the cache does not
+   grow without bound on long-running processes such as web servers.
 
    In general, the LRU cache should only be used when you want to reuse
    previously computed values.  Accordingly, it doesn't make sense to cache
@@ -177,6 +229,9 @@
    .. versionchanged:: 3.8
       Added the *user_function* option.
 
+   .. versionadded:: 3.9
+      Added the function :func:`cache_parameters`
+
 .. decorator:: total_ordering
 
    Given a class defining one or more rich comparison ordering methods, this
@@ -274,7 +329,7 @@
 
    Example::
 
-      >>> class Cell(object):
+      >>> class Cell:
       ...     def __init__(self):
       ...         self._alive = False
       ...     @property
@@ -414,6 +469,20 @@
    for the base ``object`` type, which means it is used if no better
    implementation is found.
 
+   If an implementation registered to :term:`abstract base class`, virtual
+   subclasses will be dispatched to that implementation::
+
+     >>> from collections.abc import Mapping
+     >>> @fun.register
+     ... def _(arg: Mapping, verbose=False):
+     ...     if verbose:
+     ...         print("Keys & Values")
+     ...     for key, value in arg.items():
+     ...         print(key, "=>", value)
+     ...
+     >>> fun({"a": "b"})
+     a => b
+
    To check which implementation will the generic function choose for
    a given type, use the ``dispatch()`` attribute::
 
diff --git a/Doc/library/gc.rst b/Doc/library/gc.rst
index 13eda91..2d85cd3 100644
--- a/Doc/library/gc.rst
+++ b/Doc/library/gc.rst
@@ -106,9 +106,9 @@
    allocations minus the number of deallocations exceeds *threshold0*, collection
    starts.  Initially only generation ``0`` is examined.  If generation ``0`` has
    been examined more than *threshold1* times since generation ``1`` has been
-   examined, then generation ``1`` is examined as well.  Similarly, *threshold2*
-   controls the number of collections of generation ``1`` before collecting
-   generation ``2``.
+   examined, then generation ``1`` is examined as well.
+   With the third generation, things are a bit more complicated,
+   see `Collecting the oldest generation <https://devguide.python.org/garbage_collector/#collecting-the-oldest-generation>`_ for more information.
 
 
 .. function:: get_count()
@@ -177,6 +177,27 @@
    .. versionadded:: 3.1
 
 
+.. function:: is_finalized(obj)
+
+   Returns ``True`` if the given object has been finalized by the
+   garbage collector, ``False`` otherwise. ::
+
+      >>> x = None
+      >>> class Lazarus:
+      ...     def __del__(self):
+      ...         global x
+      ...         x = self
+      ...
+      >>> lazarus = Lazarus()
+      >>> gc.is_finalized(lazarus)
+      False
+      >>> del lazarus
+      >>> gc.is_finalized(x)
+      True
+
+   .. versionadded:: 3.9
+
+
 .. function:: freeze()
 
    Freeze all the objects tracked by gc - move them to a permanent generation
diff --git a/Doc/library/glob.rst b/Doc/library/glob.rst
index 92a8c4d..3c468eb 100644
--- a/Doc/library/glob.rst
+++ b/Doc/library/glob.rst
@@ -43,7 +43,9 @@
    (like :file:`/usr/src/Python-1.5/Makefile`) or relative (like
    :file:`../../Tools/\*/\*.gif`), and can contain shell-style wildcards. Broken
    symlinks are included in the results (as in the shell). Whether or not the
-   results are sorted depends on the file system.
+   results are sorted depends on the file system.  If a file that satisfies
+   conditions is removed or added during the call of this function, whether
+   a path name for that file be included is unspecified.
 
    .. index::
       single: **; in glob-style wildcards
diff --git a/Doc/library/graphlib.rst b/Doc/library/graphlib.rst
new file mode 100644
index 0000000..0faca21
--- /dev/null
+++ b/Doc/library/graphlib.rst
@@ -0,0 +1,209 @@
+:mod:`graphlib` --- Functionality to operate with graph-like structures
+=========================================================================
+
+.. module:: graphlib
+   :synopsis: Functionality to operate with graph-like structures
+
+
+**Source code:** :source:`Lib/graphlib.py`
+
+.. testsetup:: default
+
+   import graphlib
+   from graphlib import *
+
+--------------
+
+
+.. class:: TopologicalSorter(graph=None)
+
+   Provides functionality to topologically sort a graph of hashable nodes.
+
+   A topological order is a linear ordering of the vertices in a graph such that
+   for every directed edge u -> v from vertex u to vertex v, vertex u comes
+   before vertex v in the ordering. For instance, the vertices of the graph may
+   represent tasks to be performed, and the edges may represent constraints that
+   one task must be performed before another; in this example, a topological
+   ordering is just a valid sequence for the tasks. A complete topological
+   ordering is possible if and only if the graph has no directed cycles, that
+   is, if it is a directed acyclic graph.
+
+   If the optional *graph* argument is provided it must be a dictionary
+   representing a directed acyclic graph where the keys are nodes and the values
+   are iterables of all predecessors of that node in the graph (the nodes that
+   have edges that point to the value in the key). Additional nodes can be added
+   to the graph using the :meth:`~TopologicalSorter.add` method.
+
+   In the general case, the steps required to perform the sorting of a given
+   graph are as follows:
+
+         * Create an instance of the :class:`TopologicalSorter` with an optional
+           initial graph.
+         * Add additional nodes to the graph.
+         * Call :meth:`~TopologicalSorter.prepare` on the graph.
+         * While :meth:`~TopologicalSorter.is_active` is ``True``, iterate over
+           the nodes returned by :meth:`~TopologicalSorter.get_ready` and
+           process them. Call :meth:`~TopologicalSorter.done` on each node as it
+           finishes processing.
+
+   In case just an immediate sorting of the nodes in the graph is required and
+   no parallelism is involved, the convenience method
+   :meth:`TopologicalSorter.static_order` can be used directly:
+
+   .. doctest::
+
+       >>> graph = {"D": {"B", "C"}, "C": {"A"}, "B": {"A"}}
+       >>> ts = TopologicalSorter(graph)
+       >>> tuple(ts.static_order())
+       ('A', 'C', 'B', 'D')
+
+   The class is designed to easily support parallel processing of the nodes as
+   they become ready. For instance::
+
+       topological_sorter = TopologicalSorter()
+
+       # Add nodes to 'topological_sorter'...
+
+       topological_sorter.prepare()
+       while topological_sorter.is_active():
+           for node in topological_sorter.get_ready():
+               # Worker threads or processes take nodes to work on off the
+               # 'task_queue' queue.
+               task_queue.put(node)
+
+           # When the work for a node is done, workers put the node in
+           # 'finalized_tasks_queue' so we can get more nodes to work on.
+           # The definition of 'is_active()' guarantees that, at this point, at
+           # least one node has been placed on 'task_queue' that hasn't yet
+           # been passed to 'done()', so this blocking 'get()' must (eventually)
+           # succeed.  After calling 'done()', we loop back to call 'get_ready()'
+           # again, so put newly freed nodes on 'task_queue' as soon as
+           # logically possible.
+           node = finalized_tasks_queue.get()
+           topological_sorter.done(node)
+
+   .. method:: add(node, *predecessors)
+
+      Add a new node and its predecessors to the graph. Both the *node* and all
+      elements in *predecessors* must be hashable.
+
+      If called multiple times with the same node argument, the set of
+      dependencies will be the union of all dependencies passed in.
+
+      It is possible to add a node with no dependencies (*predecessors* is not
+      provided) or to provide a dependency twice. If a node that has not been
+      provided before is included among *predecessors* it will be automatically
+      added to the graph with no predecessors of its own.
+
+      Raises :exc:`ValueError` if called after :meth:`~TopologicalSorter.prepare`.
+
+   .. method:: prepare()
+
+      Mark the graph as finished and check for cycles in the graph. If any cycle
+      is detected, :exc:`CycleError` will be raised, but
+      :meth:`~TopologicalSorter.get_ready` can still be used to obtain as many
+      nodes as possible until cycles block more progress. After a call to this
+      function, the graph cannot be modified, and therefore no more nodes can be
+      added using :meth:`~TopologicalSorter.add`.
+
+   .. method:: is_active()
+
+      Returns ``True`` if more progress can be made and ``False`` otherwise.
+      Progress can be made if cycles do not block the resolution and either
+      there are still nodes ready that haven't yet been returned by
+      :meth:`TopologicalSorter.get_ready` or the number of nodes marked
+      :meth:`TopologicalSorter.done` is less than the number that have been
+      returned by :meth:`TopologicalSorter.get_ready`.
+
+      The :meth:`~TopologicalSorter.__bool__` method of this class defers to
+      this function, so instead of::
+
+          if ts.is_active():
+              ...
+
+      it is possible to simply do::
+
+          if ts:
+              ...
+
+      Raises :exc:`ValueError` if called without calling
+      :meth:`~TopologicalSorter.prepare` previously.
+
+   .. method:: done(*nodes)
+
+      Marks a set of nodes returned by :meth:`TopologicalSorter.get_ready` as
+      processed, unblocking any successor of each node in *nodes* for being
+      returned in the future by a call to :meth:`TopologicalSorter.get_ready`.
+
+      Raises :exc:`ValueError` if any node in *nodes* has already been marked as
+      processed by a previous call to this method or if a node was not added to
+      the graph by using :meth:`TopologicalSorter.add`, if called without
+      calling :meth:`~TopologicalSorter.prepare` or if node has not yet been
+      returned by :meth:`~TopologicalSorter.get_ready`.
+
+   .. method:: get_ready()
+
+      Returns a ``tuple`` with all the nodes that are ready. Initially it
+      returns all nodes with no predecessors, and once those are marked as
+      processed by calling :meth:`TopologicalSorter.done`, further calls will
+      return all new nodes that have all their predecessors already processed.
+      Once no more progress can be made, empty tuples are returned.
+
+      Raises :exc:`ValueError` if called without calling
+      :meth:`~TopologicalSorter.prepare` previously.
+
+   .. method:: static_order()
+
+      Returns an iterable of nodes in a topological order. Using this method
+      does not require to call :meth:`TopologicalSorter.prepare` or
+      :meth:`TopologicalSorter.done`. This method is equivalent to::
+
+          def static_order(self):
+              self.prepare()
+              while self.is_active():
+                  node_group = self.get_ready()
+                  yield from node_group
+                  self.done(*node_group)
+
+      The particular order that is returned may depend on the specific order in
+      which the items were inserted in the graph. For example:
+
+      .. doctest::
+
+          >>> ts = TopologicalSorter()
+          >>> ts.add(3, 2, 1)
+          >>> ts.add(1, 0)
+          >>> print([*ts.static_order()])
+          [2, 0, 1, 3]
+
+          >>> ts2 = TopologicalSorter()
+          >>> ts2.add(1, 0)
+          >>> ts2.add(3, 2, 1)
+          >>> print([*ts2.static_order()])
+          [0, 2, 1, 3]
+
+      This is due to the fact that "0" and "2" are in the same level in the
+      graph (they would have been returned in the same call to
+      :meth:`~TopologicalSorter.get_ready`) and the order between them is
+      determined by the order of insertion.
+
+
+      If any cycle is detected, :exc:`CycleError` will be raised.
+
+   .. versionadded:: 3.9
+
+
+Exceptions
+----------
+The :mod:`graphlib` module defines the following exception classes:
+
+.. exception:: CycleError
+
+   Subclass of :exc:`ValueError` raised by :meth:`TopologicalSorter.prepare` if cycles exist
+   in the working graph. If multiple cycles exist, only one undefined choice among them will
+   be reported and included in the exception.
+
+   The detected cycle can be accessed via the second element in the :attr:`~CycleError.args`
+   attribute of the exception instance and consists in a list of nodes, such that each node is,
+   in the graph, an immediate predecessor of the next node in the list. In the reported list,
+   the first and the last node will be the same, to make it clear that it is cyclic.
\ No newline at end of file
diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index 3349a94..33c4067 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -88,7 +88,8 @@
    The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``,
    ``'wb'``, ``'x'``, or ``'xb'``, depending on whether the file will be read or
    written.  The default is the mode of *fileobj* if discernible; otherwise, the
-   default is ``'rb'``.
+   default is ``'rb'``.  In future Python releases the mode of *fileobj* will
+   not be used.  It is better to always specify *mode* for writing.
 
    Note that the file is always opened in binary mode. To open a compressed file
    in text mode, use :func:`.open` (or wrap your :class:`GzipFile` with an
@@ -164,6 +165,10 @@
    .. versionchanged:: 3.6
       Accepts a :term:`path-like object`.
 
+   .. deprecated:: 3.9
+      Opening :class:`GzipFile` for writing without specifying the *mode*
+      argument is deprecated.
+
 
 .. function:: compress(data, compresslevel=9, *, mtime=None)
 
diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst
index a16c7cd..d644974 100644
--- a/Doc/library/hashlib.rst
+++ b/Doc/library/hashlib.rst
@@ -67,7 +67,7 @@
 :func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`,
 :func:`sha512`, :func:`blake2b`, and :func:`blake2s`.
 :func:`md5` is normally available as well, though it
-may be missing if you are using a rare "FIPS compliant" build of Python.
+may be missing or blocked if you are using a rare "FIPS compliant" build of Python.
 Additional algorithms may also be available depending upon the OpenSSL
 library that Python uses on your platform. On most platforms the
 :func:`sha3_224`, :func:`sha3_256`, :func:`sha3_384`, :func:`sha3_512`,
@@ -80,6 +80,15 @@
 .. versionadded:: 3.6
    :func:`blake2b` and :func:`blake2s` were added.
 
+.. versionchanged:: 3.9
+   All hashlib constructors take a keyword-only argument *usedforsecurity*
+   with default value ``True``. A false value allows the use of insecure and
+   blocked hashing algorithms in restricted environments. ``False`` indicates
+   that the hashing algorithm is not used in a security context, e.g. as a
+   non-cryptographic one-way compression function.
+
+   Hashlib now uses SHA3 and SHAKE from OpenSSL 1.1.1 and newer.
+
 For example, to obtain the digest of the byte string ``b'Nobody inspects the
 spammish repetition'``::
 
@@ -99,7 +108,7 @@
    >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
    'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
 
-.. function:: new(name[, data])
+.. function:: new(name[, data], *, usedforsecurity=True)
 
    Is a generic constructor that takes the string *name* of the desired
    algorithm as its first parameter.  It also exists to allow access to the
@@ -308,11 +317,13 @@
 
 .. function:: blake2b(data=b'', *, digest_size=64, key=b'', salt=b'', \
                 person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0,  \
-                node_depth=0, inner_size=0, last_node=False)
+                node_depth=0, inner_size=0, last_node=False, \
+                usedforsecurity=True)
 
 .. function:: blake2s(data=b'', *, digest_size=32, key=b'', salt=b'', \
                 person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0,  \
-                node_depth=0, inner_size=0, last_node=False)
+                node_depth=0, inner_size=0, last_node=False, \
+                usedforsecurity=True)
 
 
 These functions return the corresponding hash objects for calculating
diff --git a/Doc/library/hmac.rst b/Doc/library/hmac.rst
index 57ac8bb..897edc2 100644
--- a/Doc/library/hmac.rst
+++ b/Doc/library/hmac.rst
@@ -114,6 +114,12 @@
    .. versionadded:: 3.4
 
 
+.. deprecated:: 3.9
+
+   The undocumented attributes ``HMAC.digest_cons``, ``HMAC.inner``, and
+   ``HMAC.outer`` are internal implementation details and will be removed in
+   Python 3.10.
+
 This module also provides the following helper function:
 
 .. function:: compare_digest(a, b)
@@ -132,6 +138,11 @@
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.9
+
+      The function uses OpenSSL's ``CRYPTO_memcmp()`` internally when
+      available.
+
 
 .. seealso::
 
diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst
index be31c3c..35997db 100644
--- a/Doc/library/http.client.rst
+++ b/Doc/library/http.client.rst
@@ -484,6 +484,14 @@
 
    HTTP protocol version used by server.  10 for HTTP/1.0, 11 for HTTP/1.1.
 
+.. attribute:: HTTPResponse.url
+
+   URL of the resource retrieved, commonly used to determine if a redirect was followed.
+
+.. attribute:: HTTPResponse.headers
+
+   Headers of the response in the form of an :class:`email.message.EmailMessage` instance.
+
 .. attribute:: HTTPResponse.status
 
    Status code returned by server.
@@ -501,6 +509,21 @@
 
    Is ``True`` if the stream is closed.
 
+.. method:: HTTPResponse.geturl()
+
+   .. deprecated:: 3.9
+      Deprecated in favor of :attr:`~HTTPResponse.url`.
+
+.. method:: HTTPResponse.info()
+
+   .. deprecated:: 3.9
+      Deprecated in favor of :attr:`~HTTPResponse.headers`.
+
+.. method:: HTTPResponse.getstatus()
+
+   .. deprecated:: 3.9
+      Deprecated in favor of :attr:`~HTTPResponse.status`.
+
 Examples
 --------
 
diff --git a/Doc/library/http.rst b/Doc/library/http.rst
index 0e3441c..14ee733 100644
--- a/Doc/library/http.rst
+++ b/Doc/library/http.rst
@@ -62,6 +62,7 @@
 ``100`` ``CONTINUE``                        HTTP/1.1 :rfc:`7231`, Section 6.2.1
 ``101`` ``SWITCHING_PROTOCOLS``             HTTP/1.1 :rfc:`7231`, Section 6.2.2
 ``102`` ``PROCESSING``                      WebDAV :rfc:`2518`, Section 10.1
+``103`` ``EARLY_HINTS``                     An HTTP Status Code for Indicating Hints :rfc:`8297`
 ``200`` ``OK``                              HTTP/1.1 :rfc:`7231`, Section 6.3.1
 ``201`` ``CREATED``                         HTTP/1.1 :rfc:`7231`, Section 6.3.2
 ``202`` ``ACCEPTED``                        HTTP/1.1 :rfc:`7231`, Section 6.3.3
@@ -98,10 +99,12 @@
 ``415`` ``UNSUPPORTED_MEDIA_TYPE``          HTTP/1.1 :rfc:`7231`, Section 6.5.13
 ``416`` ``REQUESTED_RANGE_NOT_SATISFIABLE`` HTTP/1.1 Range Requests :rfc:`7233`, Section 4.4
 ``417`` ``EXPECTATION_FAILED``              HTTP/1.1 :rfc:`7231`, Section 6.5.14
+``418`` ``IM_A_TEAPOT``                     HTCPCP/1.0 :rfc:`2324`, Section 2.3.2
 ``421`` ``MISDIRECTED_REQUEST``             HTTP/2 :rfc:`7540`, Section 9.1.2
 ``422`` ``UNPROCESSABLE_ENTITY``            WebDAV :rfc:`4918`, Section 11.2
 ``423`` ``LOCKED``                          WebDAV :rfc:`4918`, Section 11.3
 ``424`` ``FAILED_DEPENDENCY``               WebDAV :rfc:`4918`, Section 11.4
+``425`` ``TOO_EARLY``                       Using Early Data in HTTP :rfc:`8470`
 ``426`` ``UPGRADE_REQUIRED``                HTTP/1.1 :rfc:`7231`, Section 6.5.15
 ``428`` ``PRECONDITION_REQUIRED``           Additional HTTP Status Codes :rfc:`6585`
 ``429`` ``TOO_MANY_REQUESTS``               Additional HTTP Status Codes :rfc:`6585`
@@ -130,3 +133,6 @@
 
 .. versionadded:: 3.8
    Added ``451 UNAVAILABLE_FOR_LEGAL_REASONS`` status code.
+
+.. versionadded:: 3.9
+   Added ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` status codes.
diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst
index a367e37..478a5b3 100644
--- a/Doc/library/http.server.rst
+++ b/Doc/library/http.server.rst
@@ -335,15 +335,21 @@
 
    .. attribute:: extensions_map
 
-      A dictionary mapping suffixes into MIME types. The default is
-      signified by an empty string, and is considered to be
-      ``application/octet-stream``. The mapping is used case-insensitively,
+      A dictionary mapping suffixes into MIME types, contains custom overrides
+      for the default system mappings. The mapping is used case-insensitively,
       and so should contain only lower-cased keys.
 
+      .. versionchanged:: 3.9
+         This dictionary is no longer filled with the default system mappings,
+         but only contains overrides.
+
    .. attribute:: directory
 
       If not specified, the directory to serve is the current working directory.
 
+      .. versionchanged:: 3.9
+         Accepts a :term:`path-like object`.
+
    The :class:`SimpleHTTPRequestHandler` class defines the following methods:
 
    .. method:: do_HEAD()
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index 75b6fa3..a59a5d3 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -491,7 +491,7 @@
 large number of milliseconds, such as 100000000.) For imported module
 names or class or function attributes, type '.'.
 For filenames in the root directory, type :data:`os.sep` or
-data:`os.altsep` immediately after an opening quote.  (On Windows,
+:data:`os.altsep` immediately after an opening quote.  (On Windows,
 one can specify a drive first.)  Move into subdirectories by typing a
 directory name and a separator.
 
@@ -527,30 +527,33 @@
 Calltips
 ^^^^^^^^
 
-A calltip is shown when one types :kbd:`(` after the name of an *accessible*
-function.  A name expression may include dots and subscripts.  A calltip
-remains until it is clicked, the cursor is moved out of the argument area,
-or :kbd:`)` is typed.  When the cursor is in the argument part of a definition,
-the menu or shortcut display a calltip.
+A calltip is shown automatically when one types :kbd:`(` after the name
+of an *accessible* function.  A function name expression may include
+dots and subscripts.  A calltip remains until it is clicked, the cursor
+is moved out of the argument area, or :kbd:`)` is typed.  Whenever the
+cursor is in the argument part of a definition, select Edit and "Show
+Call Tip" on the menu or enter its shortcut to display a calltip.
 
-A calltip consists of the function signature and the first line of the
-docstring.  For builtins without an accessible signature, the calltip
-consists of all lines up the fifth line or the first blank line.  These
-details may change.
+The calltip consists of the function's signature and docstring up to
+the latter's first blank line or the fifth non-blank line.  (Some builtin
+functions lack an accessible signature.)  A '/' or '*' in the signature
+indicates that the preceding or following arguments are passed by
+position or name (keyword) only.  Details are subject to change.
 
-The set of *accessible* functions depends on what modules have been imported
-into the user process, including those imported by Idle itself,
-and what definitions have been run, all since the last restart.
+In Shell, the accessible functions depends on what modules have been
+imported into the user process, including those imported by Idle itself,
+and which definitions have been run, all since the last restart.
 
 For example, restart the Shell and enter ``itertools.count(``.  A calltip
-appears because Idle imports itertools into the user process for its own use.
-(This could change.)  Enter ``turtle.write(`` and nothing appears.  Idle does
-not import turtle.  The menu or shortcut do nothing either.  Enter
-``import turtle`` and then ``turtle.write(`` will work.
+appears because Idle imports itertools into the user process for its own
+use.  (This could change.)  Enter ``turtle.write(`` and nothing appears.
+Idle does not itself import turtle.  The menu entry and shortcut also do
+nothing.  Enter ``import turtle``.  Thereafter, ``turtle.write(``
+will display a calltip.
 
-In an editor, import statements have no effect until one runs the file.  One
-might want to run a file after writing the import statements at the top,
-or immediately run an existing file before editing.
+In an editor, import statements have no effect until one runs the file.
+One might want to run a file after writing import statements, after
+adding function definitions, or after opening an existing file.
 
 .. _code-context:
 
diff --git a/Doc/library/imaplib.rst b/Doc/library/imaplib.rst
index df63d82..65681ec 100644
--- a/Doc/library/imaplib.rst
+++ b/Doc/library/imaplib.rst
@@ -30,12 +30,14 @@
 base class:
 
 
-.. class:: IMAP4(host='', port=IMAP4_PORT)
+.. class:: IMAP4(host='', port=IMAP4_PORT, timeout=None)
 
    This class implements the actual IMAP4 protocol.  The connection is created and
    protocol version (IMAP4 or IMAP4rev1) is determined when the instance is
    initialized. If *host* is not specified, ``''`` (the local host) is used. If
-   *port* is omitted, the standard IMAP4 port (143) is used.
+   *port* is omitted, the standard IMAP4 port (143) is used. The optional *timeout*
+   parameter specifies a timeout in seconds for the connection attempt.
+   If timeout is not given or is None, the global default socket timeout is used.
 
    The :class:`IMAP4` class supports the :keyword:`with` statement.  When used
    like this, the IMAP4 ``LOGOUT`` command is issued automatically when the
@@ -50,6 +52,9 @@
    .. versionchanged:: 3.5
       Support for the :keyword:`with` statement was added.
 
+   .. versionchanged:: 3.9
+      The optional *timeout* parameter was added.
+
 Three exceptions are defined as attributes of the :class:`IMAP4` class:
 
 
@@ -78,7 +83,7 @@
 
 
 .. class:: IMAP4_SSL(host='', port=IMAP4_SSL_PORT, keyfile=None, \
-                     certfile=None, ssl_context=None)
+                     certfile=None, ssl_context=None, timeout=None)
 
    This is a subclass derived from :class:`IMAP4` that connects over an SSL
    encrypted socket (to use this class you need a socket module that was compiled
@@ -95,8 +100,12 @@
    mutually exclusive with *ssl_context*, a :class:`ValueError` is raised
    if *keyfile*/*certfile* is provided along with *ssl_context*.
 
+   The optional *timeout* parameter specifies a timeout in seconds for the
+   connection attempt. If timeout is not given or is None, the global default
+   socket timeout is used.
+
    .. versionchanged:: 3.3
-      *ssl_context* parameter added.
+      *ssl_context* parameter was added.
 
    .. versionchanged:: 3.4
       The class now supports hostname check with
@@ -110,6 +119,8 @@
        :func:`ssl.create_default_context` select the system's trusted CA
        certificates for you.
 
+   .. versionchanged:: 3.9
+      The optional *timeout* parameter was added.
 
 The second subclass allows for connections created by a child process:
 
@@ -132,7 +143,7 @@
 
 .. function:: Int2AP(num)
 
-   Converts an integer into a string representation using characters from the set
+   Converts an integer into a bytes representation using characters from the set
    [``A`` .. ``P``].
 
 
@@ -163,9 +174,9 @@
 
 .. seealso::
 
-   Documents describing the protocol, and sources and binaries  for servers
-   implementing it, can all be found at the University of Washington's *IMAP
-   Information Center* (https://www.washington.edu/imap/).
+   Documents describing the protocol, sources for servers
+   implementing it, by the University of Washington's IMAP Information Center
+   can all be found at (**Source Code**) https://github.com/uw-imap/imap (**Not Maintained**).
 
 
 .. _imap4-objects:
@@ -186,7 +197,7 @@
 
 Each command returns a tuple: ``(type, [data, ...])`` where *type* is usually
 ``'OK'`` or ``'NO'``, and *data* is either the text from the command response,
-or mandated results from the command. Each *data* is either a string, or a
+or mandated results from the command. Each *data* is either a ``bytes``, or a
 tuple. If a tuple, then the first part is the header of the response, and the
 second part contains the data (ie: 'literal' value).
 
@@ -353,16 +364,22 @@
    Send ``NOOP`` to server.
 
 
-.. method:: IMAP4.open(host, port)
+.. method:: IMAP4.open(host, port, timeout=None)
 
-   Opens socket to *port* at *host*.  This method is implicitly called by
-   the :class:`IMAP4` constructor.  The connection objects established by this
-   method will be used in the :meth:`IMAP4.read`, :meth:`IMAP4.readline`,
-   :meth:`IMAP4.send`, and :meth:`IMAP4.shutdown` methods.  You may override
-   this method.
+   Opens socket to *port* at *host*. The optional *timeout* parameter
+   specifies a timeout in seconds for the connection attempt.
+   If timeout is not given or is None, the global default socket timeout
+   is used. Also note that if the *timeout* parameter is set to be zero,
+   it will raise a :class:`ValueError` to reject creating a non-blocking socket.
+   This method is implicitly called by the :class:`IMAP4` constructor.
+   The connection objects established by this method will be used in
+   the :meth:`IMAP4.read`, :meth:`IMAP4.readline`, :meth:`IMAP4.send`,
+   and :meth:`IMAP4.shutdown` methods. You may override this method.
 
    .. audit-event:: imaplib.open self,host,port imaplib.IMAP4.open
 
+   .. versionchanged:: 3.9
+      The *timeout* parameter was added.
 
 .. method:: IMAP4.partial(message_num, message_part, start, length)
 
@@ -565,6 +582,15 @@
 
    Unsubscribe from old mailbox.
 
+.. method:: IMAP4.unselect()
+
+   :meth:`imaplib.IMAP4.unselect` frees server's resources associated with the
+   selected mailbox and returns the server to the authenticated
+   state. This command performs the same actions as :meth:`imaplib.IMAP4.close`, except
+   that no messages are permanently removed from the currently
+   selected mailbox.
+
+   .. versionadded:: 3.9
 
 .. method:: IMAP4.xatom(name[, ...])
 
diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst
index dc6b66c..21da143 100644
--- a/Doc/library/importlib.metadata.rst
+++ b/Doc/library/importlib.metadata.rst
@@ -1,8 +1,8 @@
 .. _using:
 
-==========================
- Using importlib.metadata
-==========================
+=================================
+ Using :mod:`!importlib.metadata`
+=================================
 
 .. note::
    This functionality is provisional and may deviate from the usual
@@ -12,8 +12,8 @@
 package metadata.  Built in part on Python's import system, this library
 intends to replace similar functionality in the `entry point
 API`_ and `metadata API`_ of ``pkg_resources``.  Along with
-``importlib.resources`` in `Python 3.7
-and newer`_ (backported as `importlib_resources`_ for older versions of
+:mod:`importlib.resources` in Python 3.7
+and newer (backported as `importlib_resources`_ for older versions of
 Python), this can eliminate the need to use the older and less efficient
 ``pkg_resources`` package.
 
@@ -21,9 +21,9 @@
 Python's ``site-packages`` directory via tools such as `pip
 <https://pypi.org/project/pip/>`_.  Specifically,
 it means a package with either a discoverable ``dist-info`` or ``egg-info``
-directory, and metadata defined by `PEP 566`_ or its older specifications.
+directory, and metadata defined by :pep:`566` or its older specifications.
 By default, package metadata can live on the file system or in zip archives on
-``sys.path``.  Through an extension mechanism, the metadata can live almost
+:data:`sys.path`.  Through an extension mechanism, the metadata can live almost
 anywhere.
 
 
@@ -77,7 +77,9 @@
 The ``entry_points()`` function returns a dictionary of all entry points,
 keyed by group.  Entry points are represented by ``EntryPoint`` instances;
 each ``EntryPoint`` has a ``.name``, ``.group``, and ``.value`` attributes and
-a ``.load()`` method to resolve the value.
+a ``.load()`` method to resolve the value.  There are also ``.module``,
+``.attr``, and ``.extras`` attributes for getting the components of the
+``.value`` attribute::
 
     >>> eps = entry_points()  # doctest: +SKIP
     >>> list(eps)  # doctest: +SKIP
@@ -86,6 +88,12 @@
     >>> wheel = [ep for ep in scripts if ep.name == 'wheel'][0]  # doctest: +SKIP
     >>> wheel  # doctest: +SKIP
     EntryPoint(name='wheel', value='wheel.cli:main', group='console_scripts')
+    >>> wheel.module  # doctest: +SKIP
+    'wheel.cli'
+    >>> wheel.attr  # doctest: +SKIP
+    'main'
+    >>> wheel.extras  # doctest: +SKIP
+    []
     >>> main = wheel.load()  # doctest: +SKIP
     >>> main  # doctest: +SKIP
     <function main at 0x103528488>
@@ -94,7 +102,7 @@
 and usually a client will wish to resolve all entry points for a particular
 group.  Read `the setuptools docs
 <https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins>`_
-for more information on entrypoints, their definition, and usage.
+for more information on entry points, their definition, and usage.
 
 
 .. _metadata:
@@ -134,7 +142,7 @@
 You can also get the full set of files contained within a distribution.  The
 ``files()`` function takes a distribution package name and returns all of the
 files installed by this distribution.  Each file object returned is a
-``PackagePath``, a `pathlib.Path`_ derived object with additional ``dist``,
+``PackagePath``, a :class:`pathlib.Path` derived object with additional ``dist``,
 ``size``, and ``hash`` properties as indicated by the metadata.  For example::
 
     >>> util = [p for p in files('wheel') if 'util.py' in str(p)][0]  # doctest: +SKIP
@@ -203,18 +211,18 @@
     >>> d.metadata['License']  # doctest: +SKIP
     'MIT'
 
-The full set of available metadata is not described here.  See `PEP 566
-<https://www.python.org/dev/peps/pep-0566/>`_ for additional details.
+The full set of available metadata is not described here.  See :pep:`566`
+for additional details.
 
 
 Extending the search algorithm
 ==============================
 
-Because package metadata is not available through ``sys.path`` searches, or
+Because package metadata is not available through :data:`sys.path` searches, or
 package loaders directly, the metadata for a package is found through import
-system `finders`_.  To find a distribution package's metadata,
-``importlib.metadata`` queries the list of `meta path finders`_ on
-`sys.meta_path`_.
+system :ref:`finders <finders-and-loaders>`.  To find a distribution package's metadata,
+``importlib.metadata`` queries the list of :term:`meta path finders <meta path finder>` on
+:data:`sys.meta_path`.
 
 The default ``PathFinder`` for Python includes a hook that calls into
 ``importlib.metadata.MetadataPathFinder`` for finding distributions
@@ -224,7 +232,7 @@
 interface expected of finders by Python's import system.
 ``importlib.metadata`` extends this protocol by looking for an optional
 ``find_distributions`` callable on the finders from
-``sys.meta_path`` and presents this extended interface as the
+:data:`sys.meta_path` and presents this extended interface as the
 ``DistributionFinder`` abstract base class, which defines this abstract
 method::
 
@@ -235,7 +243,7 @@
         """
 
 The ``DistributionFinder.Context`` object provides ``.path`` and ``.name``
-properties indicating the path to search and names to match and may
+properties indicating the path to search and name to match and may
 supply other relevant context.
 
 What this means in practice is that to support finding distribution package
@@ -247,20 +255,13 @@
 
 .. _`entry point API`: https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points
 .. _`metadata API`: https://setuptools.readthedocs.io/en/latest/pkg_resources.html#metadata-api
-.. _`Python 3.7 and newer`: https://docs.python.org/3/library/importlib.html#module-importlib.resources
 .. _`importlib_resources`: https://importlib-resources.readthedocs.io/en/latest/index.html
-.. _`PEP 566`: https://www.python.org/dev/peps/pep-0566/
-.. _`finders`: https://docs.python.org/3/reference/import.html#finders-and-loaders
-.. _`meta path finders`: https://docs.python.org/3/glossary.html#term-meta-path-finder
-.. _`sys.meta_path`: https://docs.python.org/3/library/sys.html#sys.meta_path
-.. _`pathlib.Path`: https://docs.python.org/3/library/pathlib.html#pathlib.Path
 
 
 .. rubric:: Footnotes
 
 .. [#f1] Technically, the returned distribution metadata object is an
-         `email.message.Message
-         <https://docs.python.org/3/library/email.message.html#email.message.EmailMessage>`_
+         :class:`email.message.EmailMessage`
          instance, but this is an implementation detail, and not part of the
          stable API.  You should only use dictionary-like methods and syntax
          to access the metadata contents.
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index 2de1043..9027ba5 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -438,8 +438,9 @@
             package. This attribute is not set on modules.
 
         - :attr:`__package__`
-            The parent package for the module/package. If the module is
-            top-level then it has a value of the empty string. The
+            The fully-qualified name of the package under which the module was
+            loaded as a submodule (or the empty string for top-level modules).
+            For packages, it is the same as :attr:`__name__`.  The
             :func:`importlib.util.module_for_loader` decorator can handle the
             details for :attr:`__package__`.
 
@@ -480,6 +481,8 @@
 
 .. class:: ResourceReader
 
+    *Superseded by TraversableReader*
+
     An :term:`abstract base class` to provide the ability to read
     *resources*.
 
@@ -795,6 +798,25 @@
         itself does not end in ``__init__``.
 
 
+.. class:: Traversable
+
+    An object with a subset of pathlib.Path methods suitable for
+    traversing directories and opening files.
+
+    .. versionadded:: 3.9
+
+
+.. class:: TraversableReader
+
+    An abstract base class for resource readers capable of serving
+    the ``files`` interface. Subclasses ResourceReader and provides
+    concrete implementations of the ResourceReader's abstract
+    methods. Therefore, any loader supplying TraversableReader
+    also supplies ResourceReader.
+
+    .. versionadded:: 3.9
+
+
 :mod:`importlib.resources` -- Resources
 ---------------------------------------
 
@@ -853,6 +875,19 @@
 
 The following functions are available.
 
+
+.. function:: files(package)
+
+    Returns an :class:`importlib.resources.abc.Traversable` object
+    representing the resource container for the package (think directory)
+    and its resources (think files). A Traversable may contain other
+    containers (think subdirectories).
+
+    *package* is either a name or a module object which conforms to the
+    ``Package`` requirements.
+
+    .. versionadded:: 3.9
+
 .. function:: open_binary(package, resource)
 
     Open for binary reading the *resource* within *package*.
@@ -1036,7 +1071,7 @@
 
 .. class:: WindowsRegistryFinder
 
-   :term:`Finder` for modules declared in the Windows registry.  This class
+   :term:`Finder <finder>` for modules declared in the Windows registry.  This class
    implements the :class:`importlib.abc.MetaPathFinder` ABC.
 
    Only class methods are defined by this class to alleviate the need for
@@ -1051,7 +1086,7 @@
 
 .. class:: PathFinder
 
-   A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
+   A :term:`Finder <finder>` for :data:`sys.path` and package ``__path__`` attributes.
    This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
 
    Only class methods are defined by this class to alleviate the need for
@@ -1310,8 +1345,8 @@
 
    (``__loader__``)
 
-   The loader to use for loading.  For namespace packages this should be
-   set to ``None``.
+   The :term:`Loader <loader>` that should be used when loading
+   the module.  :term:`Finders <finder>` should always set this.
 
    .. attribute:: origin
 
@@ -1344,8 +1379,9 @@
 
    (``__package__``)
 
-   (Read-only) Fully-qualified name of the package to which the module
-   belongs as a submodule (or ``None``).
+   (Read-only) The fully-qualified name of the package under which the module
+   should be loaded as a submodule (or the empty string for top-level modules).
+   For packages, it is the same as :attr:`__name__`.
 
    .. attribute:: has_location
 
@@ -1440,13 +1476,18 @@
    ``importlib.util.resolve_name('sys', __package__)`` without doing a
    check to see if the **package** argument is needed.
 
-   :exc:`ValueError` is raised if **name** is a relative module name but
-   package is a false value (e.g. ``None`` or the empty string).
-   :exc:`ValueError` is also raised a relative name would escape its containing
+   :exc:`ImportError` is raised if **name** is a relative module name but
+   **package** is a false value (e.g. ``None`` or the empty string).
+   :exc:`ImportError` is also raised a relative name would escape its containing
    package (e.g. requesting ``..bacon`` from within the ``spam`` package).
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.9
+      To improve consistency with import statements, raise
+      :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
+      import attempts.
+
 .. function:: find_spec(name, package=None)
 
    Find the :term:`spec <module spec>` for a module, optionally relative to
diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst
index bab2c41..d00a30f 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -821,10 +821,9 @@
 
    .. attribute:: BoundArguments.arguments
 
-      An ordered, mutable mapping (:class:`collections.OrderedDict`) of
-      parameters' names to arguments' values.  Contains only explicitly bound
-      arguments.  Changes in :attr:`arguments` will reflect in :attr:`args` and
-      :attr:`kwargs`.
+      A mutable mapping of parameters' names to arguments' values.
+      Contains only explicitly bound arguments.  Changes in :attr:`arguments`
+      will reflect in :attr:`args` and :attr:`kwargs`.
 
       Should be used in conjunction with :attr:`Signature.parameters` for any
       argument processing purposes.
@@ -836,6 +835,10 @@
          However, if needed, use :meth:`BoundArguments.apply_defaults` to add
          them.
 
+      .. versionchanged:: 3.9
+         :attr:`arguments` is now of type :class:`dict`. Formerly, it was of
+         type :class:`collections.OrderedDict`.
+
    .. attribute:: BoundArguments.args
 
       A tuple of positional arguments values.  Dynamically computed from the
@@ -866,7 +869,7 @@
         >>> ba = inspect.signature(foo).bind('spam')
         >>> ba.apply_defaults()
         >>> ba.arguments
-        OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])
+        {'a': 'spam', 'b': 'ham', 'args': ()}
 
       .. versionadded:: 3.5
 
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
index 32151a0..aecbec5 100644
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -196,18 +196,18 @@
 and writing of bytes to a stream.  :class:`FileIO` subclasses :class:`RawIOBase`
 to provide an interface to files in the machine's file system.
 
-The :class:`BufferedIOBase` ABC deals with buffering on a raw byte stream
-(:class:`RawIOBase`).  Its subclasses, :class:`BufferedWriter`,
-:class:`BufferedReader`, and :class:`BufferedRWPair` buffer streams that are
-readable, writable, and both readable and writable.  :class:`BufferedRandom`
-provides a buffered interface to random access streams.  Another
-:class:`BufferedIOBase` subclass, :class:`BytesIO`, is a stream of in-memory
-bytes.
+The :class:`BufferedIOBase` ABC extends :class:`IOBase`.  It deals with
+buffering on a raw binary stream (:class:`RawIOBase`).  Its subclasses,
+:class:`BufferedWriter`, :class:`BufferedReader`, and :class:`BufferedRWPair`
+buffer raw binary streams that are readable, writable, and both readable and writable,
+respectively. :class:`BufferedRandom` provides a buffered interface to seekable streams.
+Another :class:`BufferedIOBase` subclass, :class:`BytesIO`, is a stream of
+in-memory bytes.
 
-The :class:`TextIOBase` ABC, another subclass of :class:`IOBase`, deals with
+The :class:`TextIOBase` ABC extends :class:`IOBase`.  It deals with
 streams whose bytes represent text, and handles encoding and decoding to and
-from strings. :class:`TextIOWrapper`, which extends it, is a buffered text
-interface to a buffered raw stream (:class:`BufferedIOBase`). Finally,
+from strings.  :class:`TextIOWrapper`, which extends :class:`TextIOBase`, is a buffered text
+interface to a buffered raw stream (:class:`BufferedIOBase`).  Finally,
 :class:`StringIO` is an in-memory stream for text.
 
 Argument names are not part of the specification, and only the arguments of
@@ -392,15 +392,16 @@
 
 .. class:: RawIOBase
 
-   Base class for raw binary I/O.  It inherits :class:`IOBase`.  There is no
+   Base class for raw binary streams.  It inherits :class:`IOBase`.  There is no
    public constructor.
 
-   Raw binary I/O typically provides low-level access to an underlying OS
-   device or API, and does not try to encapsulate it in high-level primitives
-   (this is left to Buffered I/O and Text I/O, described later in this page).
+   Raw binary streams typically provide low-level access to an underlying OS
+   device or API, and do not try to encapsulate it in high-level primitives
+   (this functionality is done at a higher-level in buffered binary streams and text streams, described later
+   in this page).
 
-   In addition to the attributes and methods from :class:`IOBase`,
-   :class:`RawIOBase` provides the following methods:
+   :class:`RawIOBase` provides these methods in addition to those from
+   :class:`IOBase`:
 
    .. method:: read(size=-1)
 
@@ -464,8 +465,8 @@
    :class:`RawIOBase` implementation, but wrap one, like
    :class:`BufferedWriter` and :class:`BufferedReader` do.
 
-   :class:`BufferedIOBase` provides or overrides these methods and attribute in
-   addition to those from :class:`IOBase`:
+   :class:`BufferedIOBase` provides or overrides these data attributes and
+   methods in addition to those from :class:`IOBase`:
 
    .. attribute:: raw
 
@@ -558,9 +559,8 @@
 
 .. class:: FileIO(name, mode='r', closefd=True, opener=None)
 
-   :class:`FileIO` represents an OS-level file containing bytes data.
-   It implements the :class:`RawIOBase` interface (and therefore the
-   :class:`IOBase` interface, too).
+   A raw binary stream representing an OS-level file containing bytes data.  It
+   inherits :class:`RawIOBase`.
 
    The *name* can be one of two things:
 
@@ -601,9 +601,8 @@
    .. versionchanged:: 3.4
       The file is now non-inheritable.
 
-   In addition to the attributes and methods from :class:`IOBase` and
-   :class:`RawIOBase`, :class:`FileIO` provides the following data
-   attributes:
+   :class:`FileIO` provides these data attributes in addition to those from
+   :class:`RawIOBase` and :class:`IOBase`:
 
    .. attribute:: mode
 
@@ -623,7 +622,7 @@
 
 .. class:: BytesIO([initial_bytes])
 
-   A stream implementation using an in-memory bytes buffer.  It inherits
+   A binary stream using an in-memory bytes buffer.  It inherits
    :class:`BufferedIOBase`.  The buffer is discarded when the
    :meth:`~IOBase.close` method is called.
 
@@ -671,8 +670,10 @@
 
 .. class:: BufferedReader(raw, buffer_size=DEFAULT_BUFFER_SIZE)
 
-   A buffer providing higher-level access to a readable, sequential
-   :class:`RawIOBase` object.  It inherits :class:`BufferedIOBase`.
+   A buffered binary stream providing higher-level access to a readable, non
+   seekable :class:`RawIOBase` raw binary stream.  It inherits
+   :class:`BufferedIOBase`.
+
    When reading data from this object, a larger amount of data may be
    requested from the underlying raw stream, and kept in an internal buffer.
    The buffered data can then be returned directly on subsequent reads.
@@ -707,8 +708,10 @@
 
 .. class:: BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE)
 
-   A buffer providing higher-level access to a writeable, sequential
-   :class:`RawIOBase` object.  It inherits :class:`BufferedIOBase`.
+   A buffered binary stream providing higher-level access to a writeable, non
+   seekable :class:`RawIOBase` raw binary stream.  It inherits
+   :class:`BufferedIOBase`.
+
    When writing to this object, data is normally placed into an internal
    buffer.  The buffer will be written out to the underlying :class:`RawIOBase`
    object under various conditions, including:
@@ -740,8 +743,9 @@
 
 .. class:: BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)
 
-   A buffered interface to random access streams.  It inherits
-   :class:`BufferedReader` and :class:`BufferedWriter`.
+   A buffered binary stream providing higher-level access to a seekable
+   :class:`RawIOBase` raw binary stream.  It inherits :class:`BufferedReader`
+   and :class:`BufferedWriter`.
 
    The constructor creates a reader and writer for a seekable raw stream, given
    in the first argument.  If the *buffer_size* is omitted it defaults to
@@ -754,9 +758,9 @@
 
 .. class:: BufferedRWPair(reader, writer, buffer_size=DEFAULT_BUFFER_SIZE)
 
-   A buffered I/O object combining two unidirectional :class:`RawIOBase`
-   objects -- one readable, the other writeable -- into a single bidirectional
-   endpoint.  It inherits :class:`BufferedIOBase`.
+   A buffered binary stream providing higher-level access to two non seekable
+   :class:`RawIOBase` raw binary streams---one readable, the other writeable.
+   It inherits :class:`BufferedIOBase`.
 
    *reader* and *writer* are :class:`RawIOBase` objects that are readable and
    writeable respectively.  If the *buffer_size* is omitted it defaults to
@@ -779,8 +783,8 @@
 .. class:: TextIOBase
 
    Base class for text streams.  This class provides a character and line based
-   interface to stream I/O.  It inherits :class:`IOBase`.
-   There is no public constructor.
+   interface to stream I/O.  It inherits :class:`IOBase`.  There is no public
+   constructor.
 
    :class:`TextIOBase` provides or overrides these data attributes and
    methods in addition to those from :class:`IOBase`:
@@ -868,8 +872,9 @@
 .. class:: TextIOWrapper(buffer, encoding=None, errors=None, newline=None, \
                          line_buffering=False, write_through=False)
 
-   A buffered text stream over a :class:`BufferedIOBase` binary stream.
-   It inherits :class:`TextIOBase`.
+   A buffered text stream providing higher-level access to a
+   :class:`BufferedIOBase` buffered binary stream.  It inherits
+   :class:`TextIOBase`.
 
    *encoding* gives the name of the encoding that the stream will be decoded or
    encoded with.  It defaults to
@@ -897,11 +902,11 @@
    * When reading input from the stream, if *newline* is ``None``,
      :term:`universal newlines` mode is enabled.  Lines in the input can end in
      ``'\n'``, ``'\r'``, or ``'\r\n'``, and these are translated into ``'\n'``
-     before being returned to the caller.  If it is ``''``, universal newlines
-     mode is enabled, but line endings are returned to the caller untranslated.
-     If it has any of the other legal values, input lines are only terminated
-     by the given string, and the line ending is returned to the caller
-     untranslated.
+     before being returned to the caller.  If *newline* is ``''``, universal
+     newlines mode is enabled, but line endings are returned to the caller
+     untranslated.  If *newline* has any of the other legal values, input lines
+     are only terminated by the given string, and the line ending is returned to
+     the caller untranslated.
 
    * When writing output to the stream, if *newline* is ``None``, any ``'\n'``
      characters written are translated to the system default line separator,
@@ -925,8 +930,8 @@
       locale encoding using :func:`locale.setlocale`, use the current locale
       encoding instead of the user preferred encoding.
 
-   :class:`TextIOWrapper` provides these members in addition to those of
-   :class:`TextIOBase` and its parents:
+   :class:`TextIOWrapper` provides these data attributes and methods in
+   addition to those from :class:`TextIOBase` and :class:`IOBase`:
 
    .. attribute:: line_buffering
 
@@ -961,22 +966,23 @@
 
 .. class:: StringIO(initial_value='', newline='\\n')
 
-   An in-memory stream for text I/O.  The text buffer is discarded when the
-   :meth:`~IOBase.close` method is called.
+   A text stream using an in-memory text buffer.  It inherits
+   :class:`TextIOBase`.
+
+   The text buffer is discarded when the :meth:`~IOBase.close` method is
+   called.
 
    The initial value of the buffer can be set by providing *initial_value*.
    If newline translation is enabled, newlines will be encoded as if by
    :meth:`~TextIOBase.write`.  The stream is positioned at the start of
    the buffer.
 
-   The *newline* argument works like that of :class:`TextIOWrapper`.
-   The default is to consider only ``\n`` characters as ends of lines and
-   to do no newline translation.  If *newline* is set to ``None``,
-   newlines are written as ``\n`` on all platforms, but universal
-   newline decoding is still performed when reading.
+   The *newline* argument works like that of :class:`TextIOWrapper`,
+   except that when writing output to the stream, if *newline* is ``None``,
+   newlines are written as ``\n`` on all platforms.
 
    :class:`StringIO` provides this method in addition to those from
-   :class:`TextIOBase` and its parents:
+   :class:`TextIOBase` and :class:`IOBase`:
 
    .. method:: getvalue()
 
@@ -1067,5 +1073,5 @@
 
 The above implicitly extends to text files, since the :func:`open()` function
 will wrap a buffered object inside a :class:`TextIOWrapper`.  This includes
-standard streams and therefore affects the built-in function :func:`print()` as
+standard streams and therefore affects the built-in :func:`print()` function as
 well.
diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst
index 140401d..d6d1f1e 100644
--- a/Doc/library/ipaddress.rst
+++ b/Doc/library/ipaddress.rst
@@ -202,6 +202,32 @@
 .. _iana-ipv4-special-registry: https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
 .. _iana-ipv6-special-registry: https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml
 
+.. method:: IPv4Address.__format__(fmt)
+
+   Returns a string representation of the IP address, controlled by
+   an explicit format string.
+   *fmt* can be one of the following: ``'s'``, the default option,
+   equivalent to :func:`str`, ``'b'`` for a zero-padded binary string,
+   ``'X'`` or ``'x'`` for an uppercase or lowercase hexadecimal
+   representation, or ``'n'``, which is equivalent to ``'b'`` for IPv4
+   addresses and ``'x'`` for IPv6. For binary and hexadecimal
+   representations, the form specifier ``'#'`` and the grouping option
+   ``'_'`` are available. ``__format__`` is used by ``format``, ``str.format``
+   and f-strings.
+
+      >>> format(ipaddress.IPv4Address('192.168.0.1'))
+      '192.168.0.1'
+      >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
+      '0b11000000101010000000000000000001'
+      >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
+      '2001:db8::1000'
+      >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
+      '2001_0DB8_0000_0000_0000_0000_0000_1000'
+      >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
+      '0x2001_0db8_0000_0000_0000_0000_0000_1000'
+
+   .. versionadded:: 3.9
+
 
 .. class:: IPv6Address(address)
 
@@ -217,11 +243,20 @@
       :RFC:`4291` for details.  For example,
       ``"0000:0000:0000:0000:0000:0abc:0007:0def"`` can be compressed to
       ``"::abc:7:def"``.
+
+      Optionally, the string may also have a scope zone ID, expressed
+      with a suffix ``%scope_id``. If present, the scope ID must be non-empty,
+      and may not contain ``%``.
+      See :RFC:`4007` for details.
+      For example, ``fe80::1234%1`` might identify address ``fe80::1234`` on the first link of the node.
    2. An integer that fits into 128 bits.
    3. An integer packed into a :class:`bytes` object of length 16, big-endian.
 
+
    >>> ipaddress.IPv6Address('2001:db8::1000')
    IPv6Address('2001:db8::1000')
+   >>> ipaddress.IPv6Address('ff02::5678%1')
+   IPv6Address('ff02::5678%1')
 
    .. attribute:: compressed
 
@@ -237,8 +272,8 @@
    groups consisting entirely of zeroes included.
 
 
-   For the following attributes, see the corresponding documentation of the
-   :class:`IPv4Address` class:
+   For the following attributes and methods, see the corresponding
+   documentation of the :class:`IPv4Address` class:
 
    .. attribute:: packed
    .. attribute:: reverse_pointer
@@ -268,6 +303,12 @@
       ``::FFFF/96``), this property will report the embedded IPv4 address.
       For any other address, this property will be ``None``.
 
+   .. attribute:: scope_id
+
+      For scoped addresses as defined by :RFC:`4007`, this property identifies
+      the particular zone of the address's scope that the address belongs to,
+      as a string. When no scope zone is specified, this property will be ``None``.
+
    .. attribute:: sixtofour
 
       For addresses that appear to be 6to4 addresses  (starting with
@@ -282,6 +323,12 @@
       the embedded ``(server, client)`` IP address pair.  For any other
       address, this property will be ``None``.
 
+.. method:: IPv6Address.__format__(fmt)
+
+   Refer to the corresponding method documentation in
+   :class:`IPv4Address`.
+
+   .. versionadded:: 3.9
 
 Conversion to Strings and Integers
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -299,6 +346,8 @@
    >>> int(ipaddress.IPv6Address('::1'))
    1
 
+Note that IPv6 scoped addresses are converted to integers without scope zone ID.
+
 
 Operators
 ^^^^^^^^^
@@ -311,8 +360,9 @@
 Comparison operators
 """"""""""""""""""""
 
-Address objects can be compared with the usual set of comparison operators.  Some
-examples::
+Address objects can be compared with the usual set of comparison operators.
+Same IPv6 addresses with different scope zone IDs are not equal.
+Some examples::
 
    >>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
    True
@@ -320,6 +370,10 @@
    False
    >>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
    True
+   >>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
+   False
+   >>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
+   True
 
 
 Arithmetic operators
@@ -487,7 +541,8 @@
       hosts are all the IP addresses that belong to the network, except the
       network address itself and the network broadcast address.  For networks
       with a mask length of 31, the network address and network broadcast
-      address are also included in the result.
+      address are also included in the result. Networks with a mask of 32
+      will return a list containing the single host address.
 
          >>> list(ip_network('192.0.2.0/29').hosts())  #doctest: +NORMALIZE_WHITESPACE
          [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),
@@ -495,6 +550,8 @@
           IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
          >>> list(ip_network('192.0.2.0/31').hosts())
          [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
+         >>> list(ip_network('192.0.2.1/32').hosts())
+         [IPv4Address('192.0.2.1')]
 
    .. method:: overlaps(other)
 
@@ -656,6 +713,8 @@
       hosts are all the IP addresses that belong to the network, except the
       Subnet-Router anycast address.  For networks with a mask length of 127,
       the Subnet-Router anycast address is also included in the result.
+      Networks with a mask of 128 will return a list containing the
+      single host address.
 
    .. method:: overlaps(other)
    .. method:: address_exclude(network)
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst
index 134afbe..3de66c9 100644
--- a/Doc/library/itertools.rst
+++ b/Doc/library/itertools.rst
@@ -563,6 +563,9 @@
            for prod in result:
                yield tuple(prod)
 
+   Before :func:`product` runs, it completely consumes the input iterables,
+   keeping pools of values in memory to generate the products.  Accordingly,
+   it only useful with finite inputs.
 
 .. function:: repeat(object[, times])
 
@@ -752,7 +755,7 @@
        "Count how many times the predicate is true"
        return sum(map(pred, iterable))
 
-   def padnone(iterable):
+   def pad_none(iterable):
        """Returns the sequence elements and then returns None indefinitely.
 
        Useful for emulating the behavior of the built-in map() function.
@@ -806,7 +809,7 @@
                nexts = cycle(islice(nexts, num_active))
 
    def partition(pred, iterable):
-       'Use a predicate to partition entries into false entries and true entries'
+       "Use a predicate to partition entries into false entries and true entries"
        # partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
        t1, t2 = tee(iterable)
        return filterfalse(pred, t1), filter(pred, t2)
@@ -878,7 +881,7 @@
    def random_product(*args, repeat=1):
        "Random selection from itertools.product(*args, **kwds)"
        pools = [tuple(pool) for pool in args] * repeat
-       return tuple(random.choice(pool) for pool in pools)
+       return tuple(map(random.choice, pools))
 
    def random_permutation(iterable, r=None):
        "Random selection from itertools.permutations(iterable, r)"
@@ -897,11 +900,11 @@
        "Random selection from itertools.combinations_with_replacement(iterable, r)"
        pool = tuple(iterable)
        n = len(pool)
-       indices = sorted(random.randrange(n) for i in range(r))
+       indices = sorted(random.choices(range(n), k=r))
        return tuple(pool[i] for i in indices)
 
    def nth_combination(iterable, r, index):
-       'Equivalent to list(combinations(iterable, r))[index]'
+       "Equivalent to list(combinations(iterable, r))[index]"
        pool = tuple(iterable)
        n = len(pool)
        if r < 0 or r > n:
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
index 23e39e9..e1a246a 100644
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -283,19 +283,18 @@
    instance containing a JSON document) to a Python object using this
    :ref:`conversion table <json-to-py-table>`.
 
-   The other arguments have the same meaning as in :func:`load`, except
-   *encoding* which is ignored and deprecated since Python 3.1.
+   The other arguments have the same meaning as in :func:`load`.
 
    If the data being deserialized is not a valid JSON document, a
    :exc:`JSONDecodeError` will be raised.
 
-   .. deprecated-removed:: 3.1 3.9
-      *encoding* keyword argument.
-
    .. versionchanged:: 3.6
       *s* can now be of type :class:`bytes` or :class:`bytearray`. The
       input encoding should be UTF-8, UTF-16 or UTF-32.
 
+   .. versionchanged:: 3.9
+      The keyword argument *encoding* has been removed.
+
 
 Encoders and Decoders
 ---------------------
@@ -732,12 +731,24 @@
 
    .. versionadded:: 3.5
 
+.. cmdoption:: --no-ensure-ascii
+
+   Disable escaping of non-ascii characters, see :func:`json.dumps` for more information.
+
+   .. versionadded:: 3.9
+
 .. cmdoption:: --json-lines
 
    Parse every input line as separate JSON object.
 
    .. versionadded:: 3.8
 
+.. cmdoption:: --indent, --tab, --no-indent, --compact
+
+   Mutually exclusive options for whitespace control.
+
+   .. versionadded:: 3.9
+
 .. cmdoption:: -h, --help
 
    Show the help message.
diff --git a/Doc/library/keyword.rst b/Doc/library/keyword.rst
index acec45c..5cae79f 100644
--- a/Doc/library/keyword.rst
+++ b/Doc/library/keyword.rst
@@ -22,3 +22,19 @@
    Sequence containing all the :ref:`keywords <keywords>` defined for the
    interpreter.  If any keywords are defined to only be active when particular
    :mod:`__future__` statements are in effect, these will be included as well.
+
+
+.. function:: issoftkeyword(s)
+
+   Return ``True`` if *s* is a Python soft :ref:`keyword <keywords>`.
+
+   .. versionadded:: 3.9
+
+
+.. data:: softkwlist
+
+   Sequence containing all the soft :ref:`keywords <keywords>` defined for the
+   interpreter.  If any soft keywords are defined to only be active when particular
+   :mod:`__future__` statements are in effect, these will be included as well.
+
+   .. versionadded:: 3.9
diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst
index fa0424d..059ab3d 100644
--- a/Doc/library/logging.handlers.rst
+++ b/Doc/library/logging.handlers.rst
@@ -48,7 +48,7 @@
    .. method:: emit(record)
 
       If a formatter is specified, it is used to format the record. The record
-      is then written to the stream with a terminator. If exception information
+      is then written to the stream followed by :attr:`terminator`. If exception information
       is present, it is formatted using :func:`traceback.print_exception` and
       appended to the stream.
 
@@ -68,15 +68,19 @@
 
       :return: the old stream, if the stream was changed, or *None* if it wasn't.
 
-   .. versionadded:: 3.7
+      .. versionadded:: 3.7
 
+   .. attribute:: terminator
 
-.. versionchanged:: 3.2
-   The ``StreamHandler`` class now has a ``terminator`` attribute, default
-   value ``'\n'``, which is used as the terminator when writing a formatted
-   record to a stream. If you don't want this newline termination, you can
-   set the handler instance's ``terminator`` attribute to the empty string.
-   In earlier versions, the terminator was hardcoded as ``'\n'``.
+      String used as the terminator when writing a formatted record to a stream.
+      Default value is ``'\n'``.
+
+      If you don't want a newline termination, you can set the handler instance's
+      ``terminator`` attribute to the empty string.
+
+      In earlier versions, the terminator was hardcoded as ``'\n'``.
+
+      .. versionadded:: 3.2
 
 
 .. _file-handler:
@@ -89,23 +93,26 @@
 :class:`StreamHandler`.
 
 
-.. class:: FileHandler(filename, mode='a', encoding=None, delay=False)
+.. class:: FileHandler(filename, mode='a', encoding=None, delay=False, errors=None)
 
    Returns a new instance of the :class:`FileHandler` class. The specified file is
    opened and used as the stream for logging. If *mode* is not specified,
    :const:`'a'` is used.  If *encoding* is not ``None``, it is used to open the file
    with that encoding.  If *delay* is true, then file opening is deferred until the
-   first call to :meth:`emit`. By default, the file grows indefinitely.
+   first call to :meth:`emit`. By default, the file grows indefinitely. If
+   *errors* is specified, it's used to determine how encoding errors are handled.
 
    .. versionchanged:: 3.6
       As well as string values, :class:`~pathlib.Path` objects are also accepted
       for the *filename* argument.
 
+   .. versionchanged:: 3.9
+      The *errors* parameter was added.
+
    .. method:: close()
 
       Closes the file.
 
-
    .. method:: emit(record)
 
       Outputs the record to the file.
@@ -168,18 +175,22 @@
 for this value.
 
 
-.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
+.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False, errors=None)
 
    Returns a new instance of the :class:`WatchedFileHandler` class. The specified
    file is opened and used as the stream for logging. If *mode* is not specified,
    :const:`'a'` is used.  If *encoding* is not ``None``, it is used to open the file
    with that encoding.  If *delay* is true, then file opening is deferred until the
-   first call to :meth:`emit`.  By default, the file grows indefinitely.
+   first call to :meth:`emit`.  By default, the file grows indefinitely. If
+   *errors* is provided, it determines how encoding errors are handled.
 
    .. versionchanged:: 3.6
       As well as string values, :class:`~pathlib.Path` objects are also accepted
       for the *filename* argument.
 
+   .. versionchanged:: 3.9
+      The *errors* parameter was added.
+
    .. method:: reopenIfNeeded()
 
       Checks to see if the file has changed.  If it has, the existing stream is
@@ -205,7 +216,7 @@
 not need to instantiate this class, but it has attributes and methods you may
 need to override.
 
-.. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False)
+.. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False, errors=None)
 
    The parameters are as for :class:`FileHandler`. The attributes are:
 
@@ -284,13 +295,14 @@
 module, supports rotation of disk log files.
 
 
-.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
+.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False, errors=None)
 
    Returns a new instance of the :class:`RotatingFileHandler` class. The specified
    file is opened and used as the stream for logging. If *mode* is not specified,
    ``'a'`` is used.  If *encoding* is not ``None``, it is used to open the file
    with that encoding.  If *delay* is true, then file opening is deferred until the
-   first call to :meth:`emit`.  By default, the file grows indefinitely.
+   first call to :meth:`emit`.  By default, the file grows indefinitely. If
+   *errors* is provided, it determines how encoding errors are handled.
 
    You can use the *maxBytes* and *backupCount* values to allow the file to
    :dfn:`rollover` at a predetermined size. When the size is about to be exceeded,
@@ -311,6 +323,9 @@
       As well as string values, :class:`~pathlib.Path` objects are also accepted
       for the *filename* argument.
 
+   .. versionchanged:: 3.9
+      The *errors* parameter was added.
+
    .. method:: doRollover()
 
       Does a rollover, as described above.
@@ -331,7 +346,7 @@
 timed intervals.
 
 
-.. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
+.. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None, errors=None)
 
    Returns a new instance of the :class:`TimedRotatingFileHandler` class. The
    specified file is opened and used as the stream for logging. On rotating it also
@@ -391,6 +406,9 @@
    rollover, and subsequent rollovers would be calculated via the normal
    interval calculation.
 
+   If *errors* is specified, it's used to determine how encoding errors are
+   handled.
+
    .. note:: Calculation of the initial rollover time is done when the handler
       is initialised. Calculation of subsequent rollover times is done only
       when rollover occurs, and rollover occurs only when emitting output. If
@@ -411,6 +429,9 @@
       As well as string values, :class:`~pathlib.Path` objects are also accepted
       for the *filename* argument.
 
+   .. versionchanged:: 3.9
+      The *errors* parameter was added.
+
    .. method:: doRollover()
 
       Does a rollover, as described above.
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index 14e7190..7267f81 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -529,7 +529,7 @@
 :ref:`logrecord-attributes`.
 
 
-.. class:: Formatter(fmt=None, datefmt=None, style='%')
+.. class:: Formatter(fmt=None, datefmt=None, style='%', validate=True)
 
    Returns a new instance of the :class:`Formatter` class.  The instance is
    initialized with a format string for the message as a whole, as well as a
@@ -539,8 +539,11 @@
 
    The *style* parameter can be one of '%', '{' or '$' and determines how
    the format string will be merged with its data: using one of %-formatting,
-   :meth:`str.format` or :class:`string.Template`. See :ref:`formatting-styles`
-   for more information on using {- and $-formatting for log messages.
+   :meth:`str.format` or :class:`string.Template`. This only applies to the
+   format string *fmt* (e.g. ``'%(message)s'`` or ``{message}``), not to the
+   actual log messages passed to ``Logger.debug`` etc; see
+   :ref:`formatting-styles` for more information on using {- and $-formatting
+   for log messages.
 
    .. versionchanged:: 3.2
       The *style* parameter was added.
@@ -605,6 +608,9 @@
          attributes are ``default_time_format`` (for the strptime format string)
          and ``default_msec_format`` (for appending the millisecond value).
 
+      .. versionchanged:: 3.9
+         The ``default_msec_format`` can be ``None``.
+
    .. method:: formatException(exc_info)
 
       Formats the specified exception information (a standard exception tuple as
@@ -1197,6 +1203,21 @@
    |              | carrying out the configuration as specified |
    |              | by the other arguments.                     |
    +--------------+---------------------------------------------+
+   | *encoding*   | If this keyword argument is specified along |
+   |              | with *filename*, its value is used when the |
+   |              | FileHandler is created, and thus used when  |
+   |              | opening the output file.                    |
+   +--------------+---------------------------------------------+
+   | *errors*     | If this keyword argument is specified along |
+   |              | with *filename*, its value is used when the |
+   |              | FileHandler is created, and thus used when  |
+   |              | opening the output file. If not specified,  |
+   |              | the value 'backslashreplace' is used. Note  |
+   |              | that if ``None`` is specified, it will be   |
+   |              | passed as such to func:`open`, which means  |
+   |              | that it will be treated the same as passing |
+   |              | 'errors'.                                   |
+   +--------------+---------------------------------------------+
 
    .. versionchanged:: 3.2
       The *style* argument was added.
@@ -1210,6 +1231,9 @@
    .. versionchanged:: 3.8
       The *force* argument was added.
 
+   .. versionchanged:: 3.9
+      The *encoding* and *errors* arguments were added.
+
 .. function:: shutdown()
 
    Informs the logging system to perform an orderly shutdown by flushing and
diff --git a/Doc/library/mailbox.rst b/Doc/library/mailbox.rst
index f82a3b2..94d95d1 100644
--- a/Doc/library/mailbox.rst
+++ b/Doc/library/mailbox.rst
@@ -426,17 +426,14 @@
 
 .. seealso::
 
-   `maildir man page from qmail <http://www.qmail.org/man/man5/maildir.html>`_
-      The original specification of the format.
+   `maildir man page from Courier <http://www.courier-mta.org/maildir.html>`_
+      A specification of the format. Describes a common extension for
+      supporting folders.
 
    `Using maildir format <https://cr.yp.to/proto/maildir.html>`_
       Notes on Maildir by its inventor. Includes an updated name-creation scheme and
       details on "info" semantics.
 
-   `maildir man page from Courier <http://www.courier-mta.org/maildir.html>`_
-      Another specification of the format. Describes a common extension for supporting
-      folders.
-
 
 .. _mailbox-mbox:
 
@@ -485,11 +482,8 @@
 
 .. seealso::
 
-   `mbox man page from qmail <http://www.qmail.org/man/man5/mbox.html>`_
-      A specification of the format and its variations.
-
    `mbox man page from tin <http://www.tin.org/bin/man.cgi?section=5&topic=mbox>`_
-      Another specification of the format, with details on locking.
+      A specification of the format, with details on locking.
 
    `Configuring Netscape Mail on Unix: Why The Content-Length Format is Bad <https://www.jwz.org/doc/content-length.html>`_
       An argument for using the original mbox format rather than a variation.
diff --git a/Doc/library/math.rst b/Doc/library/math.rst
index 776768d..b20e557 100644
--- a/Doc/library/math.rst
+++ b/Doc/library/math.rst
@@ -71,6 +71,9 @@
    Return *x* factorial as an integer.  Raises :exc:`ValueError` if *x* is not integral or
    is negative.
 
+   .. deprecated:: 3.9
+      Accepting floats with integral values (like ``5.0``) is deprecated.
+
 
 .. function:: floor(x)
 
@@ -123,15 +126,20 @@
    <https://code.activestate.com/recipes/393090/>`_\.
 
 
-.. function:: gcd(a, b)
+.. function:: gcd(*integers)
 
-   Return the greatest common divisor of the integers *a* and *b*.  If either
-   *a* or *b* is nonzero, then the value of ``gcd(a, b)`` is the largest
-   positive integer that divides both *a* and *b*.  ``gcd(0, 0)`` returns
-   ``0``.
+   Return the greatest common divisor of the specified integer arguments.
+   If any of the arguments is nonzero, then the returned value is the largest
+   positive integer that is a divisor of all arguments.  If all arguments
+   are zero, then the returned value is ``0``.  ``gcd()`` without arguments
+   returns ``0``.
 
    .. versionadded:: 3.5
 
+   .. versionchanged:: 3.9
+      Added support for an arbitrary number of arguments. Formerly, only two
+      arguments were supported.
+
 
 .. function:: isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
 
@@ -198,6 +206,17 @@
    .. versionadded:: 3.8
 
 
+.. function:: lcm(*integers)
+
+   Return the least common multiple of the specified integer arguments.
+   If all arguments are nonzero, then the returned value is the smallest
+   positive integer that is a multiple of all arguments.  If any of the arguments
+   is zero, then the returned value is ``0``.  ``lcm()`` without arguments
+   returns ``1``.
+
+   .. versionadded:: 3.9
+
+
 .. function:: ldexp(x, i)
 
    Return ``x * (2**i)``.  This is essentially the inverse of function
@@ -210,6 +229,23 @@
    of *x* and are floats.
 
 
+.. function:: nextafter(x, y)
+
+   Return the next floating-point value after *x* towards *y*.
+
+   If *x* is equal to *y*, return *y*.
+
+   Examples:
+
+   * ``math.nextafter(x, math.inf)`` goes up: towards positive infinity.
+   * ``math.nextafter(x, -math.inf)`` goes down: towards minus infinity.
+   * ``math.nextafter(x, 0.0)`` goes towards zero.
+   * ``math.nextafter(x, math.copysign(math.inf, x))`` goes away from zero.
+
+   See also :func:`math.ulp`.
+
+   .. versionadded:: 3.9
+
 .. function:: perm(n, k=None)
 
    Return the number of ways to choose *k* items from *n* items
@@ -266,6 +302,30 @@
    :class:`~numbers.Integral` (usually an integer). Delegates to
    :meth:`x.__trunc__() <object.__trunc__>`.
 
+.. function:: ulp(x)
+
+   Return the value of the least significant bit of the float *x*:
+
+   * If *x* is a NaN (not a number), return *x*.
+   * If *x* is negative, return ``ulp(-x)``.
+   * If *x* is a positive infinity, return *x*.
+   * If *x* is equal to zero, return the smallest positive
+     *denormalized* representable float (smaller than the minimum positive
+     *normalized* float, :data:`sys.float_info.min <sys.float_info>`).
+   * If *x* is equal to the largest positive representable float,
+     return the value of the least significant bit of *x*, such that the first
+     float smaller than *x* is ``x - ulp(x)``.
+   * Otherwise (*x* is a positive finite number), return the value of the least
+     significant bit of *x*, such that the first float bigger than *x*
+     is ``x + ulp(x)``.
+
+   ULP stands for "Unit in the Last Place".
+
+   See also :func:`math.nextafter` and :data:`sys.float_info.epsilon
+   <sys.float_info>`.
+
+   .. versionadded:: 3.9
+
 
 Note that :func:`frexp` and :func:`modf` have a different call/return pattern
 than their C equivalents: they take a single argument and return a pair of
@@ -363,17 +423,20 @@
 
 .. function:: acos(x)
 
-   Return the arc cosine of *x*, in radians.
+   Return the arc cosine of *x*, in radians. The result is between ``0`` and
+   ``pi``.
 
 
 .. function:: asin(x)
 
-   Return the arc sine of *x*, in radians.
+   Return the arc sine of *x*, in radians. The result is between ``-pi/2`` and
+   ``pi/2``.
 
 
 .. function:: atan(x)
 
-   Return the arc tangent of *x*, in radians.
+   Return the arc tangent of *x*, in radians. The result is between ``-pi/2`` and
+   ``pi/2``.
 
 
 .. function:: atan2(y, x)
diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst
index 12b14d6..1f3fbc3 100644
--- a/Doc/library/mmap.rst
+++ b/Doc/library/mmap.rst
@@ -244,7 +244,8 @@
    .. method:: readline()
 
       Returns a single line, starting at the current file position and up to the
-      next newline.
+      next newline. The file position is updated to point after the bytes that were
+      returned.
 
 
    .. method:: resize(newsize)
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index bb3ee87..ab84d39 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -14,7 +14,8 @@
 :mod:`multiprocessing` is a package that supports spawning processes using an
 API similar to the :mod:`threading` module.  The :mod:`multiprocessing` package
 offers both local and remote concurrency, effectively side-stepping the
-:term:`Global Interpreter Lock` by using subprocesses instead of threads.  Due
+:term:`Global Interpreter Lock <global interpreter lock>` by using
+subprocesses instead of threads.  Due
 to this, the :mod:`multiprocessing` module allows the programmer to fully
 leverage multiple processors on a given machine.  It runs on both Unix and
 Windows.
@@ -97,7 +98,7 @@
   *spawn*
     The parent process starts a fresh python interpreter process.  The
     child process will only inherit those resources necessary to run
-    the process objects :meth:`~Process.run` method.  In particular,
+    the process object's :meth:`~Process.run` method.  In particular,
     unnecessary file descriptors and handles from the parent process
     will not be inherited.  Starting a process using this method is
     rather slow compared to using *fork* or *forkserver*.
@@ -878,6 +879,16 @@
 
    It is a simplified :class:`Queue` type, very close to a locked :class:`Pipe`.
 
+   .. method:: close()
+
+      Close the queue: release internal resources.
+
+      A queue must not be used anymore after it is closed. For example,
+      :meth:`get`, :meth:`put` and :meth:`empty` methods must no longer be
+      called.
+
+      .. versionadded:: 3.9
+
    .. method:: empty()
 
       Return ``True`` if the queue is empty, ``False`` otherwise.
@@ -2558,9 +2569,9 @@
   filesystem.
 
 * An ``'AF_PIPE'`` address is a string of the form
-   :samp:`r'\\\\.\\pipe\\{PipeName}'`.  To use :func:`Client` to connect to a named
-   pipe on a remote computer called *ServerName* one should use an address of the
-   form :samp:`r'\\\\{ServerName}\\pipe\\{PipeName}'` instead.
+  :samp:`r'\\\\.\\pipe\\{PipeName}'`.  To use :func:`Client` to connect to a named
+  pipe on a remote computer called *ServerName* one should use an address of the
+  form :samp:`r'\\\\{ServerName}\\pipe\\{PipeName}'` instead.
 
 Note that any string beginning with two backslashes is assumed by default to be
 an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address.
diff --git a/Doc/library/nntplib.rst b/Doc/library/nntplib.rst
index e8480b5..e7ec904 100644
--- a/Doc/library/nntplib.rst
+++ b/Doc/library/nntplib.rst
@@ -93,6 +93,10 @@
    .. versionchanged:: 3.3
       Support for the :keyword:`with` statement was added.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket.
+
 .. class:: NNTP_SSL(host, port=563, user=None, password=None, ssl_context=None, readermode=None, usenetrc=False, [timeout])
 
    Return a new :class:`NNTP_SSL` object, representing an encrypted
@@ -122,6 +126,10 @@
       :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see
       :data:`ssl.HAS_SNI`).
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket.
+
 .. exception:: NNTPError
 
    Derived from the standard exception :exc:`Exception`, this is the base
@@ -534,33 +542,6 @@
    if available.
 
 
-.. method:: NNTP.xpath(id)
-
-   Return a pair ``(resp, path)``, where *path* is the directory path to the
-   article with message ID *id*.  Most of the time, this extension is not
-   enabled by NNTP server administrators.
-
-   .. deprecated:: 3.3
-      The XPATH extension is not actively used.
-
-
-.. XXX deprecated:
-
-   .. method:: NNTP.xgtitle(name, *, file=None)
-
-      Process an ``XGTITLE`` command, returning a pair ``(response, list)``, where
-      *list* is a list of tuples containing ``(name, title)``. If the *file* parameter
-      is supplied, then the output of the  ``XGTITLE`` command is stored in a file.
-      If *file* is a string,  then the method will open a file with that name, write
-      to it  then close it.  If *file* is a :term:`file object`, then it will start
-      calling :meth:`write` on it to store the lines of the command output. If *file*
-      is supplied, then the returned *list* is an empty list. This is an optional NNTP
-      extension, and may not be supported by all servers.
-
-      :rfc:`2980` says "It is suggested that this extension be deprecated".  Use
-      :meth:`descriptions` or :meth:`description` instead.
-
-
 Utility functions
 -----------------
 
diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst
index c1a18e0..b109419 100644
--- a/Doc/library/optparse.rst
+++ b/Doc/library/optparse.rst
@@ -55,7 +55,7 @@
    <yourscript> -q -foutfile
    <yourscript> -qfoutfile
 
-Additionally, users can run one of  ::
+Additionally, users can run one of the following ::
 
    <yourscript> -h
    <yourscript> --help
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 77bbf99..6e287ab 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -111,9 +111,9 @@
    to the environment made after this time are not reflected in ``os.environ``,
    except for changes made by modifying ``os.environ`` directly.
 
-   If the platform supports the :func:`putenv` function, this mapping may be used
-   to modify the environment as well as query the environment.  :func:`putenv` will
-   be called automatically when the mapping is modified.
+   This mapping may be used to modify the environment as well as query the
+   environment.  :func:`putenv` will be called automatically when the mapping
+   is modified.
 
    On Unix, keys and values use :func:`sys.getfilesystemencoding` and
    ``'surrogateescape'`` error handler. Use :data:`environb` if you would like
@@ -130,14 +130,13 @@
       cause memory leaks.  Refer to the system documentation for
       :c:func:`putenv`.
 
-   If :func:`putenv` is not provided, a modified copy of this mapping  may be
-   passed to the appropriate process-creation functions to cause  child processes
-   to use a modified environment.
+   You can delete items in this mapping to unset environment variables.
+   :func:`unsetenv` will be called automatically when an item is deleted from
+   ``os.environ``, and when one of the :meth:`pop` or :meth:`clear` methods is
+   called.
 
-   If the platform supports the :func:`unsetenv` function, you can delete items in
-   this mapping to unset environment variables. :func:`unsetenv` will be called
-   automatically when an item is deleted from ``os.environ``, and when
-   one of the :meth:`pop` or :meth:`clear` methods is called.
+   .. versionchanged:: 3.9
+      Updated to support :pep:`584`'s merge (``|``) and update (``|=``) operators.
 
 
 .. data:: environb
@@ -152,6 +151,9 @@
 
    .. versionadded:: 3.2
 
+   .. versionchanged:: 3.9
+      Updated to support :pep:`584`'s merge (``|``) and update (``|=``) operators.
+
 
 .. function:: chdir(path)
               fchdir(fd)
@@ -439,20 +441,21 @@
    changes to the environment affect subprocesses started with :func:`os.system`,
    :func:`popen` or :func:`fork` and :func:`execv`.
 
-   .. availability:: most flavors of Unix, Windows.
+   Assignments to items in ``os.environ`` are automatically translated into
+   corresponding calls to :func:`putenv`; however, calls to :func:`putenv`
+   don't update ``os.environ``, so it is actually preferable to assign to items
+   of ``os.environ``.
 
    .. note::
 
       On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may
-      cause memory leaks. Refer to the system documentation for putenv.
-
-   When :func:`putenv` is supported, assignments to items in ``os.environ`` are
-   automatically translated into corresponding calls to :func:`putenv`; however,
-   calls to :func:`putenv` don't update ``os.environ``, so it is actually
-   preferable to assign to items of ``os.environ``.
+      cause memory leaks. Refer to the system documentation for :c:func:`putenv`.
 
    .. audit-event:: os.putenv key,value os.putenv
 
+   .. versionchanged:: 3.9
+      The function is now always available.
+
 
 .. function:: setegid(egid)
 
@@ -640,14 +643,15 @@
    environment affect subprocesses started with :func:`os.system`, :func:`popen` or
    :func:`fork` and :func:`execv`.
 
-   When :func:`unsetenv` is supported, deletion of items in ``os.environ`` is
-   automatically translated into a corresponding call to :func:`unsetenv`; however,
-   calls to :func:`unsetenv` don't update ``os.environ``, so it is actually
-   preferable to delete items of ``os.environ``.
+   Deletion of items in ``os.environ`` is automatically translated into a
+   corresponding call to :func:`unsetenv`; however, calls to :func:`unsetenv`
+   don't update ``os.environ``, so it is actually preferable to delete items of
+   ``os.environ``.
 
    .. audit-event:: os.unsetenv key os.unsetenv
 
-   .. availability:: most flavors of Unix.
+   .. versionchanged:: 3.9
+      The function is now always available and is also available on Windows.
 
 
 .. _os-newstreams:
@@ -1147,7 +1151,8 @@
    Combine the functionality of :func:`os.readv` and :func:`os.pread`.
 
    .. availability:: Linux 2.6.30 and newer, FreeBSD 6.0 and newer,
-      OpenBSD 2.7 and newer. Using flags requires Linux 4.6 or newer.
+      OpenBSD 2.7 and newer, AIX 7.1 and newer. Using flags requires
+      Linux 4.6 or newer.
 
    .. versionadded:: 3.7
 
@@ -1215,7 +1220,8 @@
    Combine the functionality of :func:`os.writev` and :func:`os.pwrite`.
 
    .. availability:: Linux 2.6.30 and newer, FreeBSD 6.0 and newer,
-      OpenBSD 2.7 and newer. Using flags requires Linux 4.7 or newer.
+      OpenBSD 2.7 and newer, AIX 7.1 and newer. Using flags requires
+      Linux 4.7 or newer.
 
    .. versionadded:: 3.7
 
@@ -1261,27 +1267,27 @@
       :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 
 
-.. function:: sendfile(out, in, offset, count)
-              sendfile(out, in, offset, count, [headers], [trailers], flags=0)
+.. function:: sendfile(out_fd, in_fd, offset, count)
+              sendfile(out_fd, in_fd, offset, count, headers=(), trailers=(), flags=0)
 
-   Copy *count* bytes from file descriptor *in* to file descriptor *out*
+   Copy *count* bytes from file descriptor *in_fd* to file descriptor *out_fd*
    starting at *offset*.
-   Return the number of bytes sent. When EOF is reached return 0.
+   Return the number of bytes sent. When EOF is reached return ``0``.
 
    The first function notation is supported by all platforms that define
    :func:`sendfile`.
 
    On Linux, if *offset* is given as ``None``, the bytes are read from the
-   current position of *in* and the position of *in* is updated.
+   current position of *in_fd* and the position of *in_fd* is updated.
 
    The second case may be used on Mac OS X and FreeBSD where *headers* and
    *trailers* are arbitrary sequences of buffers that are written before and
-   after the data from *in* is written. It returns the same as the first case.
+   after the data from *in_fd* is written. It returns the same as the first case.
 
-   On Mac OS X and FreeBSD, a value of 0 for *count* specifies to send until
-   the end of *in* is reached.
+   On Mac OS X and FreeBSD, a value of ``0`` for *count* specifies to send until
+   the end of *in_fd* is reached.
 
-   All platforms support sockets as *out* file descriptor, and some platforms
+   All platforms support sockets as *out_fd* file descriptor, and some platforms
    allow other types (e.g. regular file, pipe) as well.
 
    Cross-platform applications should not use *headers*, *trailers* and *flags*
@@ -1296,6 +1302,9 @@
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.9
+      Parameters *out* and *in* was renamed to *out_fd* and *in_fd*.
+
 
 .. function:: set_blocking(fd, blocking)
 
@@ -1828,6 +1837,8 @@
    Return a list containing the names of the entries in the directory given by
    *path*.  The list is in arbitrary order, and does not include the special
    entries ``'.'`` and ``'..'`` even if they are present in the directory.
+   If a file is removed from or added to the directory during the call of
+   this function, whether a name for that file be included is unspecified.
 
    *path* may be a :term:`path-like object`.  If *path* is of type ``bytes``
    (directly or indirectly through the :class:`PathLike` interface),
@@ -2233,7 +2244,9 @@
    Return an iterator of :class:`os.DirEntry` objects corresponding to the
    entries in the directory given by *path*. The entries are yielded in
    arbitrary order, and the special entries ``'.'`` and ``'..'`` are not
-   included.
+   included.  If a file is removed from or added to the directory after
+   creating the iterator, whether an entry for that file be included is
+   unspecified.
 
    Using :func:`scandir` instead of :func:`listdir` can significantly
    increase the performance of code that also needs file type or file
@@ -2983,7 +2996,10 @@
    *filenames* is a list of the names of the non-directory files in *dirpath*.
    Note that the names in the lists contain no path components.  To get a full path
    (which begins with *top*) to a file or directory in *dirpath*, do
-   ``os.path.join(dirpath, name)``.
+   ``os.path.join(dirpath, name)``.  Whether or not the lists are sorted
+   depends on the file system.  If a file is removed from or added to the
+   *dirpath* directory during generating the lists, whether a name for that
+   file be included is unspecified.
 
    If optional argument *topdown* is ``True`` or not specified, the triple for a
    directory is generated before the triples for any of its subdirectories
@@ -3052,6 +3068,8 @@
           for name in dirs:
               os.rmdir(os.path.join(root, name))
 
+   .. audit-event:: os.walk top,topdown,onerror,followlinks os.walk
+
    .. versionchanged:: 3.5
       This function now calls :func:`os.scandir` instead of :func:`os.listdir`,
       making it faster by reducing the number of calls to :func:`os.stat`.
@@ -3111,6 +3129,8 @@
           for name in dirs:
               os.rmdir(name, dir_fd=rootfd)
 
+   .. audit-event:: os.fwalk top,topdown,onerror,follow_symlinks,dir_fd os.fwalk
+
    .. availability:: Unix.
 
    .. versionadded:: 3.3
@@ -3614,6 +3634,19 @@
    .. availability:: Unix.
 
 
+.. function:: pidfd_open(pid, flags=0)
+
+   Return a file descriptor referring to the process *pid*.  This descriptor can
+   be used to perform process management without races and signals.  The *flags*
+   argument is provided for future extensions; no flag values are currently
+   defined.
+
+   See the :manpage:`pidfd_open(2)` man page for more details.
+
+   .. availability:: Linux 5.3+
+   .. versionadded:: 3.9
+
+
 .. function:: plock(op)
 
    Lock program segments into memory.  The value of *op* (defined in
@@ -3641,6 +3674,11 @@
    subprocess was killed.)  On Windows systems, the return value
    contains the signed integer return code from the child process.
 
+   On Unix, :func:`waitstatus_to_exitcode` can be used to convert the ``close``
+   method result (exit status) into an exit code if it is not ``None``. On
+   Windows, the ``close`` method result is directly the exit code
+   (or ``None``).
+
    This is implemented using :class:`subprocess.Popen`; see that class's
    documentation for more powerful ways to manage and communicate with
    subprocesses.
@@ -3657,8 +3695,8 @@
    The positional-only arguments *path*, *args*, and *env* are similar to
    :func:`execve`.
 
-   The *path* parameter is the path to the executable file.The *path* should
-   contain a directory.Use :func:`posix_spawnp` to pass an executable file
+   The *path* parameter is the path to the executable file.  The *path* should
+   contain a directory.  Use :func:`posix_spawnp` to pass an executable file
    without directory.
 
    The *file_actions* argument may be a sequence of tuples describing actions
@@ -3944,6 +3982,10 @@
    to using this function.  See the :ref:`subprocess-replacements` section in
    the :mod:`subprocess` documentation for some helpful recipes.
 
+   On Unix, :func:`waitstatus_to_exitcode` can be used to convert the result
+   (exit status) into an exit code. On Windows, the result is directly the exit
+   code.
+
    .. audit-event:: os.system command os.system
 
    .. availability:: Unix, Windows.
@@ -3984,12 +4026,21 @@
    number is zero); the high bit of the low byte is set if a core file was
    produced.
 
+   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
+   exit code.
+
    .. availability:: Unix.
 
+   .. seealso::
+
+      :func:`waitpid` can be used to wait for the completion of a specific
+      child process and has more options.
+
 .. function:: waitid(idtype, id, options)
 
    Wait for the completion of one or more child processes.
-   *idtype* can be :data:`P_PID`, :data:`P_PGID` or :data:`P_ALL`.
+   *idtype* can be :data:`P_PID`, :data:`P_PGID`, :data:`P_ALL`, or
+   :data:`P_PIDFD` on Linux.
    *id* specifies the pid to wait on.
    *options* is constructed from the ORing of one or more of :data:`WEXITED`,
    :data:`WSTOPPED` or :data:`WCONTINUED` and additionally may be ORed with
@@ -4014,6 +4065,15 @@
 
    .. versionadded:: 3.3
 
+.. data:: P_PIDFD
+
+   This is a Linux-specific *idtype* that indicates that *id* is a file
+   descriptor that refers to a process.
+
+   .. availability:: Linux 5.4+
+
+   .. versionadded:: 3.9
+
 .. data:: WEXITED
           WSTOPPED
           WNOWAIT
@@ -4027,8 +4087,10 @@
 
 
 .. data:: CLD_EXITED
+          CLD_KILLED
           CLD_DUMPED
           CLD_TRAPPED
+          CLD_STOPPED
           CLD_CONTINUED
 
    These are the possible values for :attr:`si_code` in the result returned by
@@ -4038,6 +4100,9 @@
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.9
+      Added :data:`CLD_KILLED` and :data:`CLD_STOPPED` values.
+
 
 .. function:: waitpid(pid, options)
 
@@ -4066,6 +4131,9 @@
    id is known, not necessarily a child process. The :func:`spawn\* <spawnl>`
    functions called with :const:`P_NOWAIT` return suitable process handles.
 
+   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
+   exit code.
+
    .. versionchanged:: 3.5
       If the system call is interrupted and the signal handler does not raise an
       exception, the function now retries the system call instead of raising an
@@ -4081,6 +4149,9 @@
    information.  The option argument is the same as that provided to
    :func:`waitpid` and :func:`wait4`.
 
+   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
+   exitcode.
+
    .. availability:: Unix.
 
 
@@ -4092,9 +4163,42 @@
    resource usage information.  The arguments to :func:`wait4` are the same
    as those provided to :func:`waitpid`.
 
+   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
+   exitcode.
+
    .. availability:: Unix.
 
 
+.. function:: waitstatus_to_exitcode(status)
+
+   Convert a wait status to an exit code.
+
+   On Unix:
+
+   * If the process exited normally (if ``WIFEXITED(status)`` is true),
+     return the process exit status (return ``WEXITSTATUS(status)``):
+     result greater than or equal to 0.
+   * If the process was terminated by a signal (if ``WIFSIGNALED(status)`` is
+     true), return ``-signum`` where *signum* is the number of the signal that
+     caused the process to terminate (return ``-WTERMSIG(status)``):
+     result less than 0.
+   * Otherwise, raise a :exc:`ValueError`.
+
+   On Windows, return *status* shifted right by 8 bits.
+
+   On Unix, if the process is being traced or if :func:`waitpid` was called
+   with :data:`WUNTRACED` option, the caller must first check if
+   ``WIFSTOPPED(status)`` is true. This function must not be called if
+   ``WIFSTOPPED(status)`` is true.
+
+   .. seealso::
+
+      :func:`WIFEXITED`, :func:`WEXITSTATUS`, :func:`WIFSIGNALED`,
+      :func:`WTERMSIG`, :func:`WIFSTOPPED`, :func:`WSTOPSIG` functions.
+
+   .. versionadded:: 3.9
+
+
 .. data:: WNOHANG
 
    The option for :func:`waitpid` to return immediately if no child process status
diff --git a/Doc/library/parser.rst b/Doc/library/parser.rst
index 7b380c3..79fc10d 100644
--- a/Doc/library/parser.rst
+++ b/Doc/library/parser.rst
@@ -25,11 +25,11 @@
 code fragment as a string because parsing is performed in a manner identical to
 the code forming the application.  It is also faster.
 
-.. note::
+.. warning::
 
-   From Python 2.5 onward, it's much more convenient to cut in at the Abstract
-   Syntax Tree (AST) generation and compilation stage, using the :mod:`ast`
-   module.
+   The parser module is deprecated and will be removed in future versions of
+   Python. For the majority of use cases you can leverage the Abstract Syntax
+   Tree (AST) generation and compilation stage, using the :mod:`ast` module.
 
 There are a few things to note about this module which are important to making
 use of the data structures created.  This is not a tutorial on editing the parse
diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst
index b900d09..9526a03 100644
--- a/Doc/library/pathlib.rst
+++ b/Doc/library/pathlib.rst
@@ -273,7 +273,7 @@
 
 .. testsetup::
 
-   from pathlib import PurePosixPath, PureWindowsPath
+   from pathlib import PurePath, PurePosixPath, PureWindowsPath
 
 Pure paths provide the following methods and properties:
 
@@ -462,6 +462,19 @@
       True
 
 
+.. method:: PurePath.is_relative_to(*other)
+
+   Return whether or not this path is relative to the *other* path.
+
+      >>> p = PurePath('/etc/passwd')
+      >>> p.is_relative_to('/etc')
+      True
+      >>> p.is_relative_to('/usr')
+      False
+
+   .. versionadded:: 3.9
+
+
 .. method:: PurePath.is_reserved()
 
    With :class:`PureWindowsPath`, return ``True`` if the path is considered
@@ -538,7 +551,9 @@
         File "<stdin>", line 1, in <module>
         File "pathlib.py", line 694, in relative_to
           .format(str(self), str(formatted)))
-      ValueError: '/etc/passwd' does not start with '/usr'
+      ValueError: '/etc/passwd' is not in the subpath of '/usr' OR one path is relative and the other absolute.
+
+   NOTE: This function is part of :class:`PurePath` and works with strings. It does not check or access the underlying file structure.
 
 
 .. method:: PurePath.with_name(name)
@@ -558,6 +573,30 @@
       ValueError: PureWindowsPath('c:/') has an empty name
 
 
+.. method:: PurePath.with_stem(stem)
+
+   Return a new path with the :attr:`stem` changed.  If the original path
+   doesn't have a name, ValueError is raised::
+
+      >>> p = PureWindowsPath('c:/Downloads/draft.txt')
+      >>> p.with_stem('final')
+      PureWindowsPath('c:/Downloads/final.txt')
+      >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
+      >>> p.with_stem('lib')
+      PureWindowsPath('c:/Downloads/lib.gz')
+      >>> p = PureWindowsPath('c:/')
+      >>> p.with_stem('')
+      Traceback (most recent call last):
+        File "<stdin>", line 1, in <module>
+        File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem
+          return self.with_name(stem + self.suffix)
+        File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name
+          raise ValueError("%r has an empty name" % (self,))
+      ValueError: PureWindowsPath('c:/') has an empty name
+
+   .. versionadded:: 3.9
+
+
 .. method:: PurePath.with_suffix(suffix)
 
    Return a new path with the :attr:`suffix` changed.  If the original path
@@ -752,6 +791,8 @@
       Using the "``**``" pattern in large directory trees may consume
       an inordinate amount of time.
 
+   .. audit-event:: pathlib.Path.glob self,pattern pathlib.Path.glob
+
 
 .. method:: Path.group()
 
@@ -849,6 +890,11 @@
       PosixPath('docs/_static')
       PosixPath('docs/Makefile')
 
+   The children are yielded in arbitrary order, and the special entries
+   ``'.'`` and ``'..'`` are not included.  If a file is removed from or added
+   to the directory after creating the iterator, whether an path object for
+   that file be included is unspecified.
+
 .. method:: Path.lchmod(mode)
 
    Like :meth:`Path.chmod` but, if the path points to a symbolic link, the
@@ -933,6 +979,19 @@
    .. versionadded:: 3.5
 
 
+.. method:: Path.readlink()
+
+   Return the path to which the symbolic link points (as returned by
+   :func:`os.readlink`)::
+
+      >>> p = Path('mylink')
+      >>> p.symlink_to('setup.py')
+      >>> p.readlink()
+      PosixPath('setup.py')
+
+   .. versionadded:: 3.9
+
+
 .. method:: Path.rename(target)
 
    Rename this file or directory to the given *target*, and return a new Path
@@ -949,6 +1008,10 @@
       >>> target.open().read()
       'some text'
 
+   The target path may be absolute or relative. Relative paths are interpreted
+   relative to the current working directory, *not* the directory of the Path
+   object.
+
    .. versionchanged:: 3.8
       Added return value, return the new Path instance.
 
@@ -959,6 +1022,10 @@
    instance pointing to *target*.  If *target* points to an existing file or
    directory, it will be unconditionally replaced.
 
+   The target path may be absolute or relative. Relative paths are interpreted
+   relative to the current working directory, *not* the directory of the Path
+   object.
+
    .. versionchanged:: 3.8
       Added return value, return the new Path instance.
 
@@ -1001,6 +1068,8 @@
        PosixPath('setup.py'),
        PosixPath('test_pathlib.py')]
 
+   .. audit-event:: pathlib.Path.rglob self,pattern pathlib.Path.rglob
+
 
 .. method:: Path.rmdir()
 
@@ -1078,7 +1147,7 @@
 
    Create a hard link pointing to a path named *target*.
 
-   .. versionchanged:: 3.8
+   .. versionadded:: 3.8
 
 
 .. method:: Path.write_bytes(data)
@@ -1131,6 +1200,7 @@
 :func:`os.path.abspath`                :meth:`Path.resolve`
 :func:`os.chmod`                       :meth:`Path.chmod`
 :func:`os.mkdir`                       :meth:`Path.mkdir`
+:func:`os.makedirs`                    :meth:`Path.mkdir`
 :func:`os.rename`                      :meth:`Path.rename`
 :func:`os.replace`                     :meth:`Path.replace`
 :func:`os.rmdir`                       :meth:`Path.rmdir`
@@ -1139,9 +1209,13 @@
 :func:`os.path.exists`                 :meth:`Path.exists`
 :func:`os.path.expanduser`             :meth:`Path.expanduser` and
                                        :meth:`Path.home`
+:func:`os.listdir`                     :meth:`Path.iterdir`
 :func:`os.path.isdir`                  :meth:`Path.is_dir`
 :func:`os.path.isfile`                 :meth:`Path.is_file`
 :func:`os.path.islink`                 :meth:`Path.is_symlink`
+:func:`os.link`                        :meth:`Path.link_to`
+:func:`os.symlink`                     :meth:`Path.symlink_to`
+:func:`os.readlink`                    :meth:`Path.readlink`
 :func:`os.stat`                        :meth:`Path.stat`,
                                        :meth:`Path.owner`,
                                        :meth:`Path.group`
diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst
index ca0a507..ed1e971 100644
--- a/Doc/library/pdb.rst
+++ b/Doc/library/pdb.rst
@@ -296,20 +296,20 @@
    Temporary breakpoint, which is removed automatically when it is first hit.
    The arguments are the same as for :pdbcmd:`break`.
 
-.. pdbcommand:: cl(ear) [filename:lineno | bpnumber [bpnumber ...]]
+.. pdbcommand:: cl(ear) [filename:lineno | bpnumber ...]
 
    With a *filename:lineno* argument, clear all the breakpoints at this line.
    With a space separated list of breakpoint numbers, clear those breakpoints.
    Without argument, clear all breaks (but first ask confirmation).
 
-.. pdbcommand:: disable [bpnumber [bpnumber ...]]
+.. pdbcommand:: disable [bpnumber ...]
 
    Disable the breakpoints given as a space separated list of breakpoint
    numbers.  Disabling a breakpoint means it cannot cause the program to stop
    execution, but unlike clearing a breakpoint, it remains in the list of
    breakpoints and can be (re-)enabled.
 
-.. pdbcommand:: enable [bpnumber [bpnumber ...]]
+.. pdbcommand:: enable [bpnumber ...]
 
    Enable the breakpoints specified.
 
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index d92e947..b7c3452 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -252,7 +252,7 @@
    .. versionchanged:: 3.8
       The *buffers* argument was added.
 
-.. function:: loads(data, \*, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)
+.. function:: loads(data, /, \*, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)
 
    Return the reconstituted object hierarchy of the pickled representation
    *data* of an object. *data* must be a :term:`bytes-like object`.
diff --git a/Doc/library/pkgutil.rst b/Doc/library/pkgutil.rst
index 78a5157..3b17b9a 100644
--- a/Doc/library/pkgutil.rst
+++ b/Doc/library/pkgutil.rst
@@ -68,7 +68,7 @@
 
 .. class:: ImpLoader(fullname, file, filename, etc)
 
-   :term:`Loader` that wraps Python's "classic" import algorithm.
+   :term:`Loader <loader>` that wraps Python's "classic" import algorithm.
 
    .. deprecated:: 3.3
       This emulation is no longer needed, as the standard import mechanism
@@ -227,3 +227,44 @@
    then ``None`` is returned.  In particular, the :term:`loader` for
    :term:`namespace packages <namespace package>` does not support
    :meth:`get_data <importlib.abc.ResourceLoader.get_data>`.
+
+
+.. function:: resolve_name(name)
+
+   Resolve a name to an object.
+
+   This functionality is used in numerous places in the standard library (see
+   :issue:`12915`) - and equivalent functionality is also in widely used
+   third-party packages such as setuptools, Django and Pyramid.
+
+   It is expected that *name* will be a string in one of the following
+   formats, where W is shorthand for a valid Python identifier and dot stands
+   for a literal period in these pseudo-regexes:
+
+   * ``W(.W)*``
+   * ``W(.W)*:(W(.W)*)?``
+
+   The first form is intended for backward compatibility only. It assumes that
+   some part of the dotted name is a package, and the rest is an object
+   somewhere within that package, possibly nested inside other objects.
+   Because the place where the package stops and the object hierarchy starts
+   can't be inferred by inspection, repeated attempts to import must be done
+   with this form.
+
+   In the second form, the caller makes the division point clear through the
+   provision of a single colon: the dotted name to the left of the colon is a
+   package to be imported, and the dotted name to the right is the object
+   hierarchy within that package. Only one import is needed in this form. If
+   it ends with the colon, then a module object is returned.
+
+   The function will return an object (which might be a module), or raise one
+   of the following exceptions:
+
+   :exc:`ValueError` -- if *name* isn't in a recognised format.
+
+   :exc:`ImportError` -- if an import failed when it shouldn't have.
+
+   :exc:`AttributeError` -- If a failure occurred when traversing the object
+   hierarchy within the imported package to get to the desired object.
+
+   .. versionadded:: 3.9
diff --git a/Doc/library/platform.rst b/Doc/library/platform.rst
index 8e8e377..b293adf 100644
--- a/Doc/library/platform.rst
+++ b/Doc/library/platform.rst
@@ -209,13 +209,6 @@
    which means the OS version uses debugging code, i.e. code that checks arguments,
    ranges, etc.
 
-   .. note::
-
-      This function works best with Mark Hammond's
-      :mod:`win32all` package installed, but also on Python 2.3 and
-      later (support for this was added in Python 2.6). It obviously
-      only runs on Win32 compatible platforms.
-
 .. function:: win32_edition()
 
    Returns a string representing the current Windows edition.  Possible
diff --git a/Doc/library/plistlib.rst b/Doc/library/plistlib.rst
index 9dfe3c8..6def72b 100644
--- a/Doc/library/plistlib.rst
+++ b/Doc/library/plistlib.rst
@@ -1,8 +1,8 @@
-:mod:`plistlib` --- Generate and parse Mac OS X ``.plist`` files
-================================================================
+:mod:`plistlib` --- Generate and parse Apple ``.plist`` files
+=============================================================
 
 .. module:: plistlib
-   :synopsis: Generate and parse Mac OS X plist files.
+   :synopsis: Generate and parse Apple plist files.
 
 .. moduleauthor:: Jack Jansen
 .. sectionauthor:: Georg Brandl <georg@python.org>
@@ -17,7 +17,8 @@
 --------------
 
 This module provides an interface for reading and writing the "property list"
-files used mainly by Mac OS X and supports both binary and XML plist files.
+files used by Apple, primarily on macOS and iOS. This module supports both binary
+and XML plist files.
 
 The property list (``.plist``) file format is a simple serialization supporting
 basic object types, like dictionaries, lists, numbers and strings.  Usually the
@@ -30,7 +31,7 @@
 and :func:`loads`.
 
 Values can be strings, integers, floats, booleans, tuples, lists, dictionaries
-(but only with string keys), :class:`Data`, :class:`bytes`, :class:`bytesarray`
+(but only with string keys), :class:`bytes`, :class:`bytearray`
 or :class:`datetime.datetime` objects.
 
 .. versionchanged:: 3.4
@@ -40,6 +41,9 @@
    Support added for reading and writing :class:`UID` tokens in binary plists as used
    by NSKeyedArchiver and NSKeyedUnarchiver.
 
+.. versionchanged:: 3.9
+   Old API removed.
+
 .. seealso::
 
    `PList manual page <https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/PropertyLists/>`_
@@ -48,7 +52,7 @@
 
 This module defines the following functions:
 
-.. function:: load(fp, \*, fmt=None, use_builtin_types=True, dict_type=dict)
+.. function:: load(fp, \*, fmt=None, dict_type=dict)
 
    Read a plist file. *fp* should be a readable and binary file object.
    Return the unpacked root object (which usually is a
@@ -62,10 +66,6 @@
 
    * :data:`FMT_BINARY`: Binary plist format
 
-   If *use_builtin_types* is true (the default) binary data will be returned
-   as instances of :class:`bytes`, otherwise it is returned as instances of
-   :class:`Data`.
-
    The *dict_type* is the type used for dictionaries that are read from the
    plist file.
 
@@ -80,7 +80,7 @@
    .. versionadded:: 3.4
 
 
-.. function:: loads(data, \*, fmt=None, use_builtin_types=True, dict_type=dict)
+.. function:: loads(data, \*, fmt=None, dict_type=dict)
 
    Load a plist from a bytes object. See :func:`load` for an explanation of
    the keyword arguments.
@@ -124,65 +124,9 @@
 
    .. versionadded:: 3.4
 
-The following functions are deprecated:
-
-.. function:: readPlist(pathOrFile)
-
-   Read a plist file. *pathOrFile* may be either a file name or a (readable
-   and binary) file object. Returns the unpacked root object (which usually
-   is a dictionary).
-
-   This function calls :func:`load` to do the actual work, see the documentation
-   of :func:`that function <load>` for an explanation of the keyword arguments.
-
-   .. deprecated:: 3.4 Use :func:`load` instead.
-
-   .. versionchanged:: 3.7
-      Dict values in the result are now normal dicts.  You no longer can use
-      attribute access to access items of these dictionaries.
-
-
-.. function:: writePlist(rootObject, pathOrFile)
-
-   Write *rootObject* to an XML plist file. *pathOrFile* may be either a file name
-   or a (writable and binary) file object
-
-   .. deprecated:: 3.4 Use :func:`dump` instead.
-
-
-.. function:: readPlistFromBytes(data)
-
-   Read a plist data from a bytes object.  Return the root object.
-
-   See :func:`load` for a description of the keyword arguments.
-
-   .. deprecated:: 3.4 Use :func:`loads` instead.
-
-   .. versionchanged:: 3.7
-      Dict values in the result are now normal dicts.  You no longer can use
-      attribute access to access items of these dictionaries.
-
-
-.. function:: writePlistToBytes(rootObject)
-
-   Return *rootObject* as an XML plist-formatted bytes object.
-
-   .. deprecated:: 3.4 Use :func:`dumps` instead.
-
 
 The following classes are available:
 
-.. class:: Data(data)
-
-   Return a "data" wrapper object around the bytes object *data*.  This is used
-   in functions converting from/to plists to represent the ``<data>`` type
-   available in plists.
-
-   It has one attribute, :attr:`data`, that can be used to retrieve the Python
-   bytes object stored in it.
-
-   .. deprecated:: 3.4 Use a :class:`bytes` object instead.
-
 .. class:: UID(data)
 
    Wraps an :class:`int`.  This is used when reading or writing NSKeyedArchiver
diff --git a/Doc/library/poplib.rst b/Doc/library/poplib.rst
index 28b42fa..9bf9212 100644
--- a/Doc/library/poplib.rst
+++ b/Doc/library/poplib.rst
@@ -47,6 +47,9 @@
       ``poplib.putline`` with arguments ``self`` and ``line``,
       where ``line`` is the bytes about to be sent to the remote host.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket.
 
 .. class:: POP3_SSL(host, port=POP3_SSL_PORT, keyfile=None, certfile=None, timeout=None, context=None)
 
@@ -64,7 +67,7 @@
 
    .. audit-event:: poplib.connect self,host,port poplib.POP3_SSL
 
-   .. audit-event:: poplib.putline self,line popplib.POP3_SSL
+   .. audit-event:: poplib.putline self,line poplib.POP3_SSL
 
       All commands will raise an :ref:`auditing event <auditing>`
       ``poplib.putline`` with arguments ``self`` and ``line``,
@@ -85,6 +88,10 @@
        :func:`ssl.create_default_context` select the system's trusted CA
        certificates for you.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket.
+
 One exception is defined as an attribute of the :mod:`poplib` module:
 
 
@@ -268,4 +275,3 @@
 
 At the end of the module, there is a test section that contains a more extensive
 example of usage.
-
diff --git a/Doc/library/pprint.rst b/Doc/library/pprint.rst
index b8b7f42..16256c5 100644
--- a/Doc/library/pprint.rst
+++ b/Doc/library/pprint.rst
@@ -25,6 +25,9 @@
 
 Dictionaries are sorted by key before the display is computed.
 
+.. versionchanged:: 3.9
+   Added support for pretty-printing :class:`types.SimpleNamespace`.
+
 The :mod:`pprint` module defines one class:
 
 .. First the implementation class:
diff --git a/Doc/library/profile.rst b/Doc/library/profile.rst
index d8039fd..34525a9 100644
--- a/Doc/library/profile.rst
+++ b/Doc/library/profile.rst
@@ -309,7 +309,7 @@
       Profile the cmd via :func:`exec` with the specified global and
       local environment.
 
-   .. method:: runcall(func, *args, **kwargs)
+   .. method:: runcall(func, /, *args, **kwargs)
 
       Profile ``func(*args, **kwargs)``
 
@@ -525,6 +525,17 @@
       ordering are identical to the :meth:`~pstats.Stats.print_callers` method.
 
 
+    .. method:: get_stats_profile()
+
+      This method returns an instance of StatsProfile, which contains a mapping
+      of function names to instances of FunctionProfile. Each FunctionProfile
+      instance holds information related to the function's profile such as how
+      long the function took to run, how many times it was called, etc...
+
+       .. versionadded:: 3.9
+          Added the following dataclasses: StatsProfile, FunctionProfile.
+          Added the following function: get_stats_profile.
+
 .. _deterministic-profiling:
 
 What Is Deterministic Profiling?
diff --git a/Doc/library/pty.rst b/Doc/library/pty.rst
index e85d2e2..73d4f10 100644
--- a/Doc/library/pty.rst
+++ b/Doc/library/pty.rst
@@ -69,6 +69,11 @@
    *select* throws an error on your platform when passed three empty lists. This
    is a bug, documented in `issue 26228 <https://bugs.python.org/issue26228>`_.
 
+   Return the exit status value from :func:`os.waitpid` on the child process.
+
+   :func:`waitstatus_to_exitcode` can be used to convert the exit status into
+   an exit code.
+
    .. audit-event:: pty.spawn argv pty.spawn
 
    .. versionchanged:: 3.4
diff --git a/Doc/library/py_compile.rst b/Doc/library/py_compile.rst
index a12a5bb..cac6dcb 100644
--- a/Doc/library/py_compile.rst
+++ b/Doc/library/py_compile.rst
@@ -35,7 +35,7 @@
    in ``.pyc``.
    For example, if *file* is ``/foo/bar/baz.py`` *cfile* will default to
    ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2.  If *dfile* is
-   specified, it is used as the name of the source file in error messages when
+   specified, it is used as the name of the source file in error messages
    instead of *file*.  If *doraise* is true, a :exc:`PyCompileError` is raised
    when an error is encountered while compiling *file*. If *doraise* is false
    (the default), an error string is written to ``sys.stderr``, but no exception
diff --git a/Doc/library/random.rst b/Doc/library/random.rst
index 2149e80..8154dfc 100644
--- a/Doc/library/random.rst
+++ b/Doc/library/random.rst
@@ -86,6 +86,11 @@
    .. versionchanged:: 3.2
       Moved to the version 2 scheme which uses all of the bits in a string seed.
 
+   .. deprecated:: 3.9
+      In the future, the *seed* must be one of the following types:
+      *NoneType*, :class:`int`, :class:`float`, :class:`str`,
+      :class:`bytes`, or :class:`bytearray`.
+
 .. function:: getstate()
 
    Return an object capturing the current internal state of the generator.  This
@@ -99,12 +104,17 @@
    the time :func:`getstate` was called.
 
 
-.. function:: getrandbits(k)
+Functions for bytes
+-------------------
 
-   Returns a Python integer with *k* random bits. This method is supplied with
-   the Mersenne Twister generator and some other generators may also provide it
-   as an optional part of the API. When available, :meth:`getrandbits` enables
-   :meth:`randrange` to handle arbitrarily large ranges.
+.. function:: randbytes(n)
+
+   Generate *n* random bytes.
+
+   This method should not be used for generating security tokens.
+   Use :func:`secrets.token_bytes` instead.
+
+   .. versionadded:: 3.9
 
 
 Functions for integers
@@ -130,6 +140,16 @@
    Return a random integer *N* such that ``a <= N <= b``.  Alias for
    ``randrange(a, b+1)``.
 
+.. function:: getrandbits(k)
+
+   Returns a Python integer with *k* random bits. This method is supplied with
+   the MersenneTwister generator and some other generators may also provide it
+   as an optional part of the API. When available, :meth:`getrandbits` enables
+   :meth:`randrange` to handle arbitrarily large ranges.
+
+   .. versionchanged:: 3.9
+      This method now accepts zero for *k*.
+
 
 Functions for sequences
 -----------------------
@@ -160,8 +180,9 @@
 
    The *weights* or *cum_weights* can use any numeric type that interoperates
    with the :class:`float` values returned by :func:`random` (that includes
-   integers, floats, and fractions but excludes decimals).  Weights are
-   assumed to be non-negative.
+   integers, floats, and fractions but excludes decimals).  Behavior is
+   undefined if any weight is negative.  A :exc:`ValueError` is raised if all
+   weights are zero.
 
    For a given seed, the :func:`choices` function with equal weighting
    typically produces a different sequence than repeated calls to
@@ -172,6 +193,9 @@
 
    .. versionadded:: 3.6
 
+   .. versionchanged:: 3.9
+      Raises a :exc:`ValueError` if all weights are zero.
+
 
 .. function:: shuffle(x[, random])
 
@@ -189,8 +213,11 @@
    generated.  For example, a sequence of length 2080 is the largest that
    can fit within the period of the Mersenne Twister random number generator.
 
+   .. deprecated-removed:: 3.9 3.11
+      The optional parameter *random*.
 
-.. function:: sample(population, k)
+
+.. function:: sample(population, k, *, counts=None)
 
    Return a *k* length list of unique elements chosen from the population sequence
    or set. Used for random sampling without replacement.
@@ -204,6 +231,11 @@
    Members of the population need not be :term:`hashable` or unique.  If the population
    contains repeats, then each occurrence is a possible selection in the sample.
 
+   Repeated elements can be specified one at a time or with the optional
+   keyword-only *counts* parameter.  For example, ``sample(['red', 'blue'],
+   counts=[4, 2], k=5)`` is equivalent to ``sample(['red', 'red', 'red', 'red',
+   'blue', 'blue'], k=5)``.
+
    To choose a sample from a range of integers, use a :func:`range` object as an
    argument.  This is especially fast and space efficient for sampling from a large
    population:  ``sample(range(10000000), k=60)``.
@@ -211,6 +243,18 @@
    If the sample size is larger than the population size, a :exc:`ValueError`
    is raised.
 
+   .. versionchanged:: 3.9
+      Added the *counts* parameter.
+
+   .. deprecated:: 3.9
+      In the future, the *population* must be a sequence.  Instances of
+      :class:`set` are no longer supported.  The set must first be converted
+      to a :class:`list` or :class:`tuple`, preferably in a deterministic
+      order so that the sample is reproducible.
+
+
+.. _real-valued-distributions:
+
 Real-valued distributions
 -------------------------
 
@@ -275,6 +319,13 @@
    deviation.  This is slightly faster than the :func:`normalvariate` function
    defined below.
 
+   Multithreading note:  When two threads call this function
+   simultaneously, it is possible that they will receive the
+   same return value.  This can be avoided in three ways.
+   1) Have each thread use a different instance of the random
+   number generator. 2) Put locks around all calls. 3) Use the
+   slower, but thread-safe :func:`normalvariate` function instead.
+
 
 .. function:: lognormvariate(mu, sigma)
 
@@ -316,6 +367,11 @@
    Class that implements the default pseudo-random number generator used by the
    :mod:`random` module.
 
+   .. deprecated:: 3.9
+      In the future, the *seed* must be one of the following types:
+      :class:`NoneType`, :class:`int`, :class:`float`, :class:`str`,
+      :class:`bytes`, or :class:`bytearray`.
+
 .. class:: SystemRandom([seed])
 
    Class that uses the :func:`os.urandom` function for generating random numbers
@@ -329,8 +385,8 @@
 Notes on Reproducibility
 ------------------------
 
-Sometimes it is useful to be able to reproduce the sequences given by a pseudo
-random number generator.  By re-using a seed value, the same sequence should be
+Sometimes it is useful to be able to reproduce the sequences given by a
+pseudo-random number generator.  By re-using a seed value, the same sequence should be
 reproducible from run to run as long as multiple threads are not running.
 
 Most of the random module's algorithms and seeding functions are subject to
@@ -344,8 +400,8 @@
 
 .. _random-examples:
 
-Examples and Recipes
---------------------
+Examples
+--------
 
 Basic examples::
 
@@ -381,12 +437,11 @@
    >>> choices(['red', 'black', 'green'], [18, 18, 2], k=6)
    ['red', 'green', 'black', 'black', 'red', 'black']
 
-   >>> # Deal 20 cards without replacement from a deck of 52 playing cards
-   >>> # and determine the proportion of cards with a ten-value
-   >>> # (a ten, jack, queen, or king).
-   >>> deck = collections.Counter(tens=16, low_cards=36)
-   >>> seen = sample(list(deck.elements()), k=20)
-   >>> seen.count('tens') / 20
+   >>> # Deal 20 cards without replacement from a deck
+   >>> # of 52 playing cards, and determine the proportion of cards
+   >>> # with a ten-value:  ten, jack, queen, or king.
+   >>> dealt = sample(['tens', 'low cards'], counts=[16, 36], k=20)
+   >>> dealt.count('tens') / 20
    0.15
 
    >>> # Estimate the probability of getting 5 or more heads from 7 spins
@@ -490,3 +545,58 @@
    a tutorial by `Peter Norvig <http://norvig.com/bio.html>`_ covering
    the basics of probability theory, how to write simulations, and
    how to perform data analysis using Python.
+
+
+Recipes
+-------
+
+The default :func:`.random` returns multiples of 2⁻⁵³ in the range
+*0.0 ≤ x < 1.0*.  All such numbers are evenly spaced and are exactly
+representable as Python floats.  However, many other representable
+floats in that interval are not possible selections.  For example,
+``0.05954861408025609`` isn't an integer multiple of 2⁻⁵³.
+
+The following recipe takes a different approach.  All floats in the
+interval are possible selections.  The mantissa comes from a uniform
+distribution of integers in the range *2⁵² ≤ mantissa < 2⁵³*.  The
+exponent comes from a geometric distribution where exponents smaller
+than *-53* occur half as often as the next larger exponent.
+
+::
+
+    from random import Random
+    from math import ldexp
+
+    class FullRandom(Random):
+
+        def random(self):
+            mantissa = 0x10_0000_0000_0000 | self.getrandbits(52)
+            exponent = -53
+            x = 0
+            while not x:
+                x = self.getrandbits(32)
+                exponent += x.bit_length() - 32
+            return ldexp(mantissa, exponent)
+
+All :ref:`real valued distributions <real-valued-distributions>`
+in the class will use the new method::
+
+    >>> fr = FullRandom()
+    >>> fr.random()
+    0.05954861408025609
+    >>> fr.expovariate(0.25)
+    8.87925541791544
+
+The recipe is conceptually equivalent to an algorithm that chooses from
+all the multiples of 2⁻¹⁰⁷⁴ in the range *0.0 ≤ x < 1.0*.  All such
+numbers are evenly spaced, but most have to be rounded down to the
+nearest representable Python float.  (The value 2⁻¹⁰⁷⁴ is the smallest
+positive unnormalized float and is equal to ``math.ulp(0.0)``.)
+
+
+.. seealso::
+
+   `Generating Pseudo-random Floating-Point Values
+   <https://allendowney.com/research/rand/downey07randfloat.pdf>`_ a
+   paper by Allen B. Downey describing ways to generate more
+   fine-grained floats than normally generated by :func:`.random`.
diff --git a/Doc/library/secrets.rst b/Doc/library/secrets.rst
index bc4766d..afa8e2d 100644
--- a/Doc/library/secrets.rst
+++ b/Doc/library/secrets.rst
@@ -21,7 +21,7 @@
 random numbers suitable for managing data such as passwords, account
 authentication, security tokens, and related secrets.
 
-In particularly, :mod:`secrets` should be used in preference to the
+In particular, :mod:`secrets` should be used in preference to the
 default pseudo-random number generator in the :mod:`random` module, which
 is designed for modelling and simulation, not security or cryptography.
 
diff --git a/Doc/library/select.rst b/Doc/library/select.rst
index 39622aa..a354187 100644
--- a/Doc/library/select.rst
+++ b/Doc/library/select.rst
@@ -355,6 +355,9 @@
 
    Remove a registered file descriptor from the epoll object.
 
+   .. versionchanged:: 3.9
+      The method no longer ignores the :data:`~errno.EBADF` error.
+
 
 .. method:: epoll.poll(timeout=None, maxevents=-1)
 
diff --git a/Doc/library/shlex.rst b/Doc/library/shlex.rst
index adc23da..7f7f0c7 100644
--- a/Doc/library/shlex.rst
+++ b/Doc/library/shlex.rst
@@ -36,6 +36,9 @@
       instance, passing ``None`` for *s* will read the string to split from
       standard input.
 
+   .. deprecated:: 3.9
+      Passing ``None`` for *s* will raise an exception in future Python
+      versions.
 
 .. function:: join(split_command)
 
diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst
index 25b749e..3f51227 100644
--- a/Doc/library/shutil.rst
+++ b/Doc/library/shutil.rst
@@ -158,9 +158,9 @@
 .. function:: copy(src, dst, *, follow_symlinks=True)
 
    Copies the file *src* to the file or directory *dst*.  *src* and *dst*
-   should be strings.  If *dst* specifies a directory, the file will be
-   copied into *dst* using the base filename from *src*.  Returns the
-   path to the newly created file.
+   should be :term:`path-like objects <path-like object>` or strings.  If
+   *dst* specifies a directory, the file will be copied into *dst* using the
+   base filename from *src*.  Returns the path to the newly created file.
 
    If *follow_symlinks* is false, and *src* is a symbolic link,
    *dst* will be created as a symbolic link.  If *follow_symlinks*
@@ -349,7 +349,7 @@
    will be created in or as *dst* and *src* will be removed.
 
    If *copy_function* is given, it must be a callable that takes two arguments
-   *src* and *dst*, and will be used to copy *src* to *dest* if
+   *src* and *dst*, and will be used to copy *src* to *dst* if
    :func:`os.rename` cannot be used.  If the source is a directory,
    :func:`copytree` is called, passing it the :func:`copy_function`. The
    default *copy_function* is :func:`copy2`.  Using :func:`~shutil.copy` as the
@@ -371,6 +371,9 @@
       copy the file more efficiently. See
       :ref:`shutil-platform-dependent-efficient-copy-operations` section.
 
+   .. versionchanged:: 3.9
+      Accepts a :term:`path-like object` for both *src* and *dst*.
+
 .. function:: disk_usage(path)
 
    Return disk usage statistics about the given path as a :term:`named tuple`
diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst
index 5488f4a..e1daeff 100644
--- a/Doc/library/signal.rst
+++ b/Doc/library/signal.rst
@@ -53,12 +53,12 @@
 Signals and threads
 ^^^^^^^^^^^^^^^^^^^
 
-Python signal handlers are always executed in the main Python thread,
+Python signal handlers are always executed in the main Python thread of the main interpreter,
 even if the signal was received in another thread.  This means that signals
 can't be used as a means of inter-thread communication.  You can use
 the synchronization primitives from the :mod:`threading` module instead.
 
-Besides, only the main thread is allowed to set a new signal handler.
+Besides, only the main thread of the main interpreter is allowed to set a new signal handler.
 
 
 Module contents
@@ -117,7 +117,7 @@
 
    Child process stopped or terminated.
 
-   .. availability:: Windows.
+   .. availability:: Unix.
 
 .. data:: SIGCLD
 
@@ -351,13 +351,26 @@
    .. versionadded:: 3.8
 
 
+.. function:: pidfd_send_signal(pidfd, sig, siginfo=None, flags=0)
+
+   Send signal *sig* to the process referred to by file descriptor *pidfd*.
+   Python does not currently support the *siginfo* parameter; it must be
+   ``None``.  The *flags* argument is provided for future extensions; no flag
+   values are currently defined.
+
+   See the :manpage:`pidfd_send_signal(2)` man page for more information.
+
+   .. availability:: Linux 5.1+
+   .. versionadded:: 3.9
+
+
 .. function:: pthread_kill(thread_id, signalnum)
 
    Send the signal *signalnum* to the thread *thread_id*, another thread in the
    same process as the caller.  The target thread can be executing any code
    (Python or not).  However, if the target thread is executing the Python
    interpreter, the Python signal handlers will be :ref:`executed by the main
-   thread <signals-and-threads>`.  Therefore, the only point of sending a
+   thread of the main interpreter <signals-and-threads>`.  Therefore, the only point of sending a
    signal to a particular Python thread would be to force a running system call
    to fail with :exc:`InterruptedError`.
 
@@ -453,7 +466,8 @@
    If not -1, *fd* must be non-blocking.  It is up to the library to remove
    any bytes from *fd* before calling poll or select again.
 
-   When threads are enabled, this function can only be called from the main thread;
+   When threads are enabled, this function can only be called
+   from :ref:`the main thread of the main interpreter <signals-and-threads>`;
    attempting to call it from other threads will cause a :exc:`ValueError`
    exception to be raised.
 
@@ -506,7 +520,8 @@
    signal handler will be returned (see the description of :func:`getsignal`
    above).  (See the Unix man page :manpage:`signal(2)` for further information.)
 
-   When threads are enabled, this function can only be called from the main thread;
+   When threads are enabled, this function can only be called
+   from :ref:`the main thread of the main interpreter <signals-and-threads>`;
    attempting to call it from other threads will cause a :exc:`ValueError`
    exception to be raised.
 
diff --git a/Doc/library/site.rst b/Doc/library/site.rst
index b424e1b..2e3646f 100644
--- a/Doc/library/site.rst
+++ b/Doc/library/site.rst
@@ -231,7 +231,9 @@
 
    Return the path of the user-specific site-packages directory,
    :data:`USER_SITE`.  If it is not initialized yet, this function will also set
-   it, respecting :envvar:`PYTHONNOUSERSITE` and :data:`USER_BASE`.
+   it, respecting :data:`USER_BASE`.  To determine if the user-specific
+   site-packages was added to ``sys.path`` :data:`ENABLE_USER_SITE` should be
+   used.
 
    .. versionadded:: 3.2
 
diff --git a/Doc/library/smtpd.rst b/Doc/library/smtpd.rst
index 85ee8a7..d84e74a 100644
--- a/Doc/library/smtpd.rst
+++ b/Doc/library/smtpd.rst
@@ -148,6 +148,12 @@
 
 .. class:: MailmanProxy(localaddr, remoteaddr)
 
+   .. deprecated-removed:: 3.9 3.11
+
+      :class:`MailmanProxy` is deprecated, it depends on a ``Mailman``
+      module which no longer exists and therefore is already broken.
+
+
    Create a new pure proxy server. Arguments are as per :class:`SMTPServer`.
    Everything will be relayed to *remoteaddr*, unless local mailman configurations
    knows about an address, in which case it will be handled via mailman.  Note that
diff --git a/Doc/library/smtplib.rst b/Doc/library/smtplib.rst
index 6176c35..c1a20fe 100644
--- a/Doc/library/smtplib.rst
+++ b/Doc/library/smtplib.rst
@@ -70,6 +70,9 @@
    .. versionadded:: 3.5
       The SMTPUTF8 extension (:rfc:`6531`) is now supported.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket
 
 .. class:: SMTP_SSL(host='', port=0, local_hostname=None, keyfile=None, \
                     certfile=None [, timeout], context=None, \
@@ -108,8 +111,12 @@
        :func:`ssl.create_default_context` select the system's trusted CA
        certificates for you.
 
+   .. versionchanged:: 3.9
+      If the *timeout* parameter is set to be zero, it will raise a
+      :class:`ValueError` to prevent the creation of a non-blocking socket
 
-.. class:: LMTP(host='', port=LMTP_PORT, local_hostname=None, source_address=None)
+.. class:: LMTP(host='', port=LMTP_PORT, local_hostname=None, \
+                source_address=None[, timeout])
 
    The LMTP protocol, which is very similar to ESMTP, is heavily based on the
    standard SMTP client. It's common to use Unix sockets for LMTP, so our
@@ -122,6 +129,9 @@
    Unix socket, LMTP generally don't support or require any authentication, but
    your mileage might vary.
 
+   .. versionchanged:: 3.9
+      The optional *timeout* parameter was added.
+
 
 A nice selection of exceptions is defined as well:
 
diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
old mode 100644
new mode 100755
index c72f22b..faf8a76
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -78,15 +78,15 @@
     Python programs.
 
 - For :const:`AF_INET6` address family, a four-tuple ``(host, port, flowinfo,
-  scopeid)`` is used, where *flowinfo* and *scopeid* represent the ``sin6_flowinfo``
+  scope_id)`` is used, where *flowinfo* and *scope_id* represent the ``sin6_flowinfo``
   and ``sin6_scope_id`` members in :const:`struct sockaddr_in6` in C.  For
-  :mod:`socket` module methods, *flowinfo* and *scopeid* can be omitted just for
-  backward compatibility.  Note, however, omission of *scopeid* can cause problems
+  :mod:`socket` module methods, *flowinfo* and *scope_id* can be omitted just for
+  backward compatibility.  Note, however, omission of *scope_id* can cause problems
   in manipulating scoped IPv6 addresses.
 
   .. versionchanged:: 3.7
-     For multicast addresses (with *scopeid* meaningful) *address* may not contain
-     ``%scope`` (or ``zone id``) part. This information is superfluous and may
+     For multicast addresses (with *scope_id* meaningful) *address* may not contain
+     ``%scope_id`` (or ``zone id``) part. This information is superfluous and may
      be safely omitted (recommended).
 
 - :const:`AF_NETLINK` sockets are represented as pairs ``(pid, groups)``.
@@ -118,6 +118,10 @@
   - :const:`CAN_ISOTP` protocol require a tuple ``(interface, rx_addr, tx_addr)``
     where both additional parameters are unsigned long integer that represent a
     CAN identifier (standard or extended).
+  - :const:`CAN_J1939` protocol require a tuple ``(interface, name, pgn, addr)``
+    where additional parameters are 64-bit unsigned integer representing the
+    ECU name, a 32-bit unsigned integer representing the Parameter Group Number
+    (PGN), and an 8-bit integer representing the address.
 
 - A string or a tuple ``(id, unit)`` is used for the :const:`SYSPROTO_CONTROL`
   protocol of the :const:`PF_SYSTEM` family. The string is the name of a
@@ -200,6 +204,23 @@
 
   .. versionadded:: 3.8
 
+- :const:`IPPROTO_UDPLITE` is a variant of UDP which allows you to specify
+  what portion of a packet is covered with the checksum. It adds two socket
+  options that you can change.
+  ``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length)`` will
+  change what portion of outgoing packets are covered by the checksum and
+  ``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length)`` will
+  filter out packets which cover too little of their data. In both cases
+  ``length`` should be in ``range(8, 2**16, 8)``.
+
+  Such a socket should be constructed with
+  ``socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE)`` for IPv4 or
+  ``socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE)`` for IPv6.
+
+  .. availability:: Linux >= 2.6.20, FreeBSD >= 10.1-RELEASE
+
+  .. versionadded:: 3.9
+
 If you use a hostname in the *host* portion of IPv4/v6 socket address, the
 program may show a nondeterministic behavior, as Python uses the first address
 returned from the DNS resolution.  The socket address will be resolved
@@ -391,6 +412,17 @@
 
    .. versionadded:: 3.5
 
+.. data:: CAN_RAW_JOIN_FILTERS
+
+   Joins the applied CAN filters such that only CAN frames that match all
+   given CAN filters are passed to user space.
+
+   This constant is documented in the Linux documentation.
+
+   .. availability:: Linux >= 4.1.
+
+   .. versionadded:: 3.9
+
 .. data:: CAN_ISOTP
 
    CAN_ISOTP, in the CAN protocol family, is the ISO-TP (ISO 15765-2) protocol.
@@ -400,6 +432,15 @@
 
    .. versionadded:: 3.7
 
+.. data:: CAN_J1939
+
+   CAN_J1939, in the CAN protocol family, is the SAE J1939 protocol.
+   J1939 constants, documented in the Linux documentation.
+
+   .. availability:: Linux >= 5.4.
+
+   .. versionadded:: 3.9
+
 
 .. data:: AF_PACKET
           PF_PACKET
@@ -516,7 +557,8 @@
    default), :const:`SOCK_DGRAM`, :const:`SOCK_RAW` or perhaps one of the other
    ``SOCK_`` constants. The protocol number is usually zero and may be omitted
    or in the case where the address family is :const:`AF_CAN` the protocol
-   should be one of :const:`CAN_RAW`, :const:`CAN_BCM` or :const:`CAN_ISOTP`.
+   should be one of :const:`CAN_RAW`, :const:`CAN_BCM`, :const:`CAN_ISOTP` or
+   :const:`CAN_J1939`.
 
    If *fileno* is specified, the values for *family*, *type*, and *proto* are
    auto-detected from the specified file descriptor.  Auto-detection can be
@@ -560,6 +602,9 @@
       ``SOCK_NONBLOCK``, but ``sock.type`` will be set to
       ``socket.SOCK_STREAM``.
 
+   .. versionchanged:: 3.9
+       The CAN_J1939 protocol was added.
+
 .. function:: socketpair([family[, type[, proto]]])
 
    Build a pair of connected socket objects using the given address family, socket
@@ -721,7 +766,7 @@
    :const:`AI_CANONNAME` is part of the *flags* argument; else *canonname*
    will be empty.  *sockaddr* is a tuple describing a socket address, whose
    format depends on the returned *family* (a ``(address, port)`` 2-tuple for
-   :const:`AF_INET`, a ``(address, port, flow info, scope id)`` 4-tuple for
+   :const:`AF_INET`, a ``(address, port, flowinfo, scope_id)`` 4-tuple for
    :const:`AF_INET6`), and is meant to be passed to the :meth:`socket.connect`
    method.
 
@@ -742,7 +787,7 @@
 
    .. versionchanged:: 3.7
       for IPv6 multicast addresses, string representing an address will not
-      contain ``%scope`` part.
+      contain ``%scope_id`` part.
 
 .. function:: getfqdn([name])
 
@@ -810,8 +855,8 @@
    or numeric address representation in *host*.  Similarly, *port* can contain a
    string port name or a numeric port number.
 
-   For IPv6 addresses, ``%scope`` is appended to the host part if *sockaddr*
-   contains meaningful *scopeid*. Usually this happens for multicast addresses.
+   For IPv6 addresses, ``%scope_id`` is appended to the host part if *sockaddr*
+   contains meaningful *scope_id*. Usually this happens for multicast addresses.
 
    For more information about *flags* you can consult :manpage:`getnameinfo(3)`.
 
@@ -1046,6 +1091,19 @@
    .. versionchanged:: 3.8
       Windows support was added.
 
+   .. note::
+
+      On Windows network interfaces have different names in different contexts
+      (all names are examples):
+
+      * UUID: ``{FB605B73-AAC2-49A6-9A2F-25416AEA0573}``
+      * name: ``ethernet_32770``
+      * friendly name: ``vEthernet (nat)``
+      * description: ``Hyper-V Virtual Ethernet Adapter``
+
+      This function returns names of the second form from the list, ``ethernet_32770``
+      in this example case.
+
 
 .. function:: if_nametoindex(if_name)
 
@@ -1060,6 +1118,9 @@
    .. versionchanged:: 3.8
       Windows support was added.
 
+   .. seealso::
+      "Interface name" is a name as documented in :func:`if_nameindex`.
+
 
 .. function:: if_indextoname(if_index)
 
@@ -1074,6 +1135,9 @@
    .. versionchanged:: 3.8
       Windows support was added.
 
+   .. seealso::
+      "Interface name" is a name as documented in :func:`if_nameindex`.
+
 
 .. _socket-objects:
 
@@ -1337,7 +1401,7 @@
 
    .. versionchanged:: 3.7
       For multicast IPv6 address, first item of *address* does not contain
-      ``%scope`` part anymore. In order to get full IPv6 address use
+      ``%scope_id`` part anymore. In order to get full IPv6 address use
       :func:`getnameinfo`.
 
 .. method:: socket.recvmsg(bufsize[, ancbufsize[, flags]])
@@ -1569,6 +1633,29 @@
 
    .. versionadded:: 3.6
 
+.. method:: socket.send_fds(sock, buffers, fds[, flags[, address]])
+
+   Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket.
+   The *fds* parameter is a sequence of file descriptors.
+   Consult :meth:`sendmsg` for the documentation of these parameters.
+
+   .. availability:: Unix supporting :meth:`~socket.sendmsg` and :const:`SCM_RIGHTS` mechanism.
+
+   .. versionadded:: 3.9
+
+.. method:: socket.recv_fds(sock, bufsize, maxfds[, flags])
+
+   Receive up to *maxfds* file descriptors. Return ``(msg, list(fds), flags, addr)``. Consult
+   :meth:`recvmsg` for the documentation of these parameters.
+
+   .. availability:: Unix supporting :meth:`~socket.recvmsg` and :const:`SCM_RIGHTS` mechanism.
+
+   .. versionadded:: 3.9
+
+   .. note::
+
+      Any truncated integers at the end of the list of file descriptors.
+
 .. method:: socket.sendfile(file, offset=0, count=None)
 
    Send a file until EOF is reached by using high-performance
@@ -1627,7 +1714,9 @@
 
 .. method:: socket.setsockopt(level, optname, value: int)
 .. method:: socket.setsockopt(level, optname, value: buffer)
+   :noindex:
 .. method:: socket.setsockopt(level, optname, None, optlen: int)
+   :noindex:
 
    .. index:: module: struct
 
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index 314d3a5..ccb8227 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -928,7 +928,7 @@
            self.x, self.y = x, y
 
 Now you want to store the point in a single SQLite column.  First you'll have to
-choose one of the supported types first to be used for representing the point.
+choose one of the supported types to be used for representing the point.
 Let's just use str and separate the coordinates using a semicolon. Then you need
 to give your class a method ``__conform__(self, protocol)`` which must return
 the converted value. The parameter *protocol* will be :class:`PrepareProtocol`.
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index ea0f13c..852091c 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -293,7 +293,7 @@
    Read the Wikipedia article, `Cryptographically secure pseudorandom number
    generator (CSPRNG)
    <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
-   to get the requirements of a cryptographically generator.
+   to get the requirements of a cryptographically strong generator.
 
    .. versionadded:: 3.3
 
@@ -615,7 +615,7 @@
    Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
    peer cert is checked but none of the intermediate CA certificates. The mode
    requires a valid CRL that is signed by the peer cert's issuer (its direct
-   ancestor CA). If no proper CRL has has been loaded with
+   ancestor CA). If no proper CRL has been loaded with
    :attr:`SSLContext.load_verify_locations`, validation will fail.
 
    .. versionadded:: 3.4
@@ -1256,7 +1256,7 @@
       The returned dictionary includes additional X509v3 extension items
         such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
 
-   .. versionchanged:: 3.8.1
+   .. versionchanged:: 3.9
       IPv6 address strings no longer have a trailing new line.
 
 .. method:: SSLSocket.cipher()
diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst
index 026f4aa..38a499a 100644
--- a/Doc/library/statistics.rst
+++ b/Doc/library/statistics.rst
@@ -696,6 +696,16 @@
         Set *n* to 100 for percentiles which gives the 99 cuts points that
         separate the normal distribution into 100 equal sized groups.
 
+    .. method:: NormalDist.zscore(x)
+
+        Compute the
+        `Standard Score <https://www.statisticshowto.com/probability-and-statistics/z-score/>`_
+        describing *x* in terms of the number of standard deviations
+        above or below the mean of the normal distribution:
+        ``(x - mean) / stdev``.
+
+        .. versionadded:: 3.9
+
     Instances of :class:`NormalDist` support addition, subtraction,
     multiplication and division by a constant.  These operations
     are used for translation and scaling.  For example:
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index ccd2f99..a48cfa1 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -352,7 +352,7 @@
    The numeric literals accepted include the digits ``0`` to ``9`` or any
    Unicode equivalent (code points with the ``Nd`` property).
 
-   See http://www.unicode.org/Public/12.1.0/ucd/extracted/DerivedNumericType.txt
+   See https://www.unicode.org/Public/13.0.0/ucd/extracted/DerivedNumericType.txt
    for a complete list of code points with the ``Nd`` property.
 
 
@@ -1558,9 +1558,16 @@
    :func:`codecs.register_error`, see section :ref:`error-handlers`. For a
    list of possible encodings, see section :ref:`standard-encodings`.
 
+   By default, the *errors* argument is not checked for best performances, but
+   only used at the first encoding error. Enable the :ref:`Python Development
+   Mode <devmode>`, or use a debug build to check *errors*.
+
    .. versionchanged:: 3.1
       Support for keyword arguments added.
 
+   .. versionchanged:: 3.9
+      The *errors* is now checked in development mode and in debug mode.
+
 
 .. method:: str.endswith(suffix[, start[, end]])
 
@@ -1775,6 +1782,16 @@
    Return ``True`` if all cased characters [4]_ in the string are uppercase and
    there is at least one cased character, ``False`` otherwise.
 
+      >>> 'BANANA'.isupper()
+      True
+      >>> 'banana'.isupper()
+      False
+      >>> 'baNana'.isupper()
+      False
+      >>> ' '.isupper()
+      False
+
+
 
 .. method:: str.join(iterable)
 
@@ -1812,6 +1829,14 @@
       >>> 'www.example.com'.lstrip('cmowz.')
       'example.com'
 
+   See :meth:`str.removeprefix` for a method that will remove a single prefix
+   string rather than all of a set of characters.  For example::
+
+      >>> 'Arthur: three!'.lstrip('Arthur: ')
+      'ee!'
+      >>> 'Arthur: three!'.removeprefix('Arthur: ')
+      'three!'
+
 
 .. staticmethod:: str.maketrans(x[, y[, z]])
 
@@ -1836,6 +1861,34 @@
    the string itself, followed by two empty strings.
 
 
+.. method:: str.removeprefix(prefix, /)
+
+   If the string starts with the *prefix* string, return
+   ``string[len(prefix):]``. Otherwise, return a copy of the original
+   string::
+
+      >>> 'TestHook'.removeprefix('Test')
+      'Hook'
+      >>> 'BaseTestCase'.removeprefix('Test')
+      'BaseTestCase'
+
+   .. versionadded:: 3.9
+
+
+.. method:: str.removesuffix(suffix, /)
+
+   If the string ends with the *suffix* string and that *suffix* is not empty,
+   return ``string[:-len(suffix)]``. Otherwise, return a copy of the
+   original string::
+
+      >>> 'MiscTests'.removesuffix('Tests')
+      'Misc'
+      >>> 'TmpDirMixin'.removesuffix('Tests')
+      'TmpDirMixin'
+
+   .. versionadded:: 3.9
+
+
 .. method:: str.replace(old, new[, count])
 
    Return a copy of the string with all occurrences of substring *old* replaced by
@@ -1892,6 +1945,13 @@
       >>> 'mississippi'.rstrip('ipz')
       'mississ'
 
+   See :meth:`str.removesuffix` for a method that will remove a single suffix
+   string rather than all of a set of characters.  For example::
+
+      >>> 'Monty Python'.rstrip(' Python')
+      'M'
+      >>> 'Monty Python'.removesuffix(' Python')
+      'Monty'
 
 .. method:: str.split(sep=None, maxsplit=-1)
 
@@ -2572,6 +2632,50 @@
       Also accept an integer in the range 0 to 255 as the subsequence.
 
 
+.. method:: bytes.removeprefix(prefix, /)
+            bytearray.removeprefix(prefix, /)
+
+   If the binary data starts with the *prefix* string, return
+   ``bytes[len(prefix):]``. Otherwise, return a copy of the original
+   binary data::
+
+      >>> b'TestHook'.removeprefix(b'Test')
+      b'Hook'
+      >>> b'BaseTestCase'.removeprefix(b'Test')
+      b'BaseTestCase'
+
+   The *prefix* may be any :term:`bytes-like object`.
+
+   .. note::
+
+      The bytearray version of this method does *not* operate in place -
+      it always produces a new object, even if no changes were made.
+
+   .. versionadded:: 3.9
+
+
+.. method:: bytes.removesuffix(suffix, /)
+            bytearray.removesuffix(suffix, /)
+
+   If the binary data ends with the *suffix* string and that *suffix* is
+   not empty, return ``bytes[:-len(suffix)]``.  Otherwise, return a copy of
+   the original binary data::
+
+      >>> b'MiscTests'.removesuffix(b'Tests')
+      b'Misc'
+      >>> b'TmpDirMixin'.removesuffix(b'Tests')
+      b'TmpDirMixin'
+
+   The *suffix* may be any :term:`bytes-like object`.
+
+   .. note::
+
+      The bytearray version of this method does *not* operate in place -
+      it always produces a new object, even if no changes were made.
+
+   .. versionadded:: 3.9
+
+
 .. method:: bytes.decode(encoding="utf-8", errors="strict")
             bytearray.decode(encoding="utf-8", errors="strict")
 
@@ -2583,6 +2687,10 @@
    :func:`codecs.register_error`, see section :ref:`error-handlers`. For a
    list of possible encodings, see section :ref:`standard-encodings`.
 
+   By default, the *errors* argument is not checked for best performances, but
+   only used at the first decoding error. Enable the :ref:`Python Development
+   Mode <devmode>`, or use a debug build to check *errors*.
+
    .. note::
 
       Passing the *encoding* argument to :class:`str` allows decoding any
@@ -2592,6 +2700,9 @@
    .. versionchanged:: 3.1
       Added support for keyword arguments.
 
+   .. versionchanged:: 3.9
+      The *errors* is now checked in development mode and in debug mode.
+
 
 .. method:: bytes.endswith(suffix[, start[, end]])
             bytearray.endswith(suffix[, start[, end]])
@@ -2815,7 +2926,14 @@
       b'example.com'
 
    The binary sequence of byte values to remove may be any
-   :term:`bytes-like object`.
+   :term:`bytes-like object`. See :meth:`~bytes.removeprefix` for a method
+   that will remove a single prefix string rather than all of a set of
+   characters.  For example::
+
+      >>> b'Arthur: three!'.lstrip(b'Arthur: ')
+      b'ee!'
+      >>> b'Arthur: three!'.removeprefix(b'Arthur: ')
+      b'three!'
 
    .. note::
 
@@ -2864,7 +2982,14 @@
       b'mississ'
 
    The binary sequence of byte values to remove may be any
-   :term:`bytes-like object`.
+   :term:`bytes-like object`. See :meth:`~bytes.removesuffix` for a method
+   that will remove a single suffix string rather than all of a set of
+   characters.  For example::
+
+      >>> b'Monty Python'.rstrip(b' Python')
+      b'M'
+      >>> b'Monty Python'.removesuffix(b' Python')
+      b'Monty'
 
    .. note::
 
@@ -3994,6 +4119,12 @@
    objects.  If *iterable* is not specified, a new empty set is
    returned.
 
+   Sets can be created by several means:
+
+   * Use a comma-separated list of elements within braces: ``{'jack', 'sjoerd'}``
+   * Use a set comprehension: ``{c for c in 'abracadabra' if c not in 'abc'}``
+   * Use the type constructor: ``set()``, ``set('foobar')``, ``set(['a', 'b', 'foo'])``
+
    Instances of :class:`set` and :class:`frozenset` provide the following
    operations:
 
@@ -4186,6 +4317,14 @@
    Return a new dictionary initialized from an optional positional argument
    and a possibly empty set of keyword arguments.
 
+   Dictionaries can be created by several means:
+
+   * Use a comma-separated list of ``key: value`` pairs within braces:
+     ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098: 'jack', 4127: 'sjoerd'}``
+   * Use a dict comprehension: ``{}``, ``{x: x ** 2 for x in range(10)}``
+   * Use the type constructor: ``dict()``,
+     ``dict([('foo', 100), ('bar', 200)])``, ``dict(foo=100, bar=200)``
+
    If no positional argument is given, an empty dictionary is created.
    If a positional argument is given and it is a mapping object, a dictionary
    is created with the same key-value pairs as the mapping object.  Otherwise,
@@ -4209,7 +4348,8 @@
       >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
       >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
       >>> e = dict({'three': 3, 'one': 1, 'two': 2})
-      >>> a == b == c == d == e
+      >>> f = dict({'one': 1, 'three': 3}, two=2)
+      >>> a == b == c == d == e == f
       True
 
    Providing keyword arguments as in the first example only works for keys that
@@ -4367,6 +4507,22 @@
          >>> d.values() == d.values()
          False
 
+   .. describe:: d | other
+
+      Create a new dictionary with the merged keys and values of *d* and
+      *other*, which must both be dictionaries. The values of *other* take
+      priority when *d* and *other* share keys.
+
+      .. versionadded:: 3.9
+
+   .. describe:: d |= other
+
+      Update the dictionary *d* with keys and values from *other*, which may be
+      either a :term:`mapping` or an :term:`iterable` of key/value pairs. The
+      values of *other* take priority when *d* and *other* share keys.
+
+      .. versionadded:: 3.9
+
    Dictionaries compare equal if and only if they have the same ``(key,
    value)`` pairs (regardless of ordering). Order comparisons ('<', '<=', '>=', '>') raise
    :exc:`TypeError`.
@@ -4575,6 +4731,200 @@
 single class dictionary lookup is negligible.
 
 
+.. _types-genericalias:
+
+Generic Alias Type
+==================
+
+.. index::
+   object: GenericAlias
+   pair: Generic; Alias
+
+``GenericAlias`` objects are created by subscripting a class (usually a
+container), such as ``list[int]``.  They are intended primarily for
+:term:`type annotations <annotation>`.
+
+Usually, the :ref:`subscription <subscriptions>` of container objects calls the
+method :meth:`__getitem__` of the object.  However, the subscription of some
+containers' classes may call the classmethod :meth:`__class_getitem__` of the
+class instead. The classmethod :meth:`__class_getitem__` should return a
+``GenericAlias`` object.
+
+.. note::
+   If the :meth:`__getitem__` of the class' metaclass is present, it will take
+   precedence over the :meth:`__class_getitem__` defined in the class (see
+   :pep:`560` for more details).
+
+The ``GenericAlias`` object acts as a proxy for :term:`generic types
+<generic type>`, implementing *parameterized generics* - a specific instance
+of a generic which provides the types for container elements.
+
+The user-exposed type for the ``GenericAlias`` object can be accessed from
+:class:`types.GenericAlias` and used for :func:`isinstance` checks.  It can
+also be used to create ``GenericAlias`` objects directly.
+
+.. describe:: T[X, Y, ...]
+
+   Creates a ``GenericAlias`` representing a type ``T`` containing elements
+   of types *X*, *Y*, and more depending on the ``T`` used.
+   For example, a function expecting a :class:`list` containing
+   :class:`float` elements::
+
+      def average(values: list[float]) -> float:
+          return sum(values) / len(values)
+
+   Another example for :term:`mapping` objects, using a :class:`dict`, which
+   is a generic type expecting two type parameters representing the key type
+   and the value type.  In this example, the function expects a ``dict`` with
+   keys of type :class:`str` and values of type :class:`int`::
+
+      def send_post_request(url: str, body: dict[str, int]) -> None:
+          ...
+
+The builtin functions :func:`isinstance` and :func:`issubclass` do not accept
+``GenericAlias`` types for their second argument::
+
+   >>> isinstance([1, 2], list[str])
+   Traceback (most recent call last):
+     File "<stdin>", line 1, in <module>
+   TypeError: isinstance() argument 2 cannot be a parameterized generic
+
+The Python runtime does not enforce :term:`type annotations <annotation>`.
+This extends to generic types and their type parameters. When creating
+an object from a ``GenericAlias``, container elements are not checked
+against their type. For example, the following code is discouraged, but will
+run without errors::
+
+   >>> t = list[str]
+   >>> t([1, 2, 3])
+   [1, 2, 3]
+
+Furthermore, parameterized generics erase type parameters during object
+creation::
+
+   >>> t = list[str]
+   >>> type(t)
+   <class 'types.GenericAlias'>
+
+   >>> l = t()
+   >>> type(l)
+   <class 'list'>
+
+Calling :func:`repr` or :func:`str` on a generic shows the parameterized type::
+
+   >>> repr(list[int])
+   'list[int]'
+
+   >>> str(list[int])
+   'list[int]'
+
+The :meth:`__getitem__` method of generics will raise an exception to disallow
+mistakes like ``dict[str][str]``::
+
+   >>> dict[str][str]
+   Traceback (most recent call last):
+     File "<stdin>", line 1, in <module>
+   TypeError: There are no type variables left in dict[str]
+
+However, such expressions are valid when :ref:`type variables <generics>` are
+used.  The index must have as many elements as there are type variable items
+in the ``GenericAlias`` object's :attr:`__args__ <genericalias.__args__>`. ::
+
+   >>> from typing import TypeVar
+   >>> Y = TypeVar('Y')
+   >>> dict[str, Y][int]
+   dict[str, int]
+
+
+Standard Generic Collections
+----------------------------
+
+These standard library collections support parameterized generics.
+
+* :class:`tuple`
+* :class:`list`
+* :class:`dict`
+* :class:`set`
+* :class:`frozenset`
+* :class:`type`
+* :class:`collections.deque`
+* :class:`collections.defaultdict`
+* :class:`collections.OrderedDict`
+* :class:`collections.Counter`
+* :class:`collections.ChainMap`
+* :class:`collections.abc.Awaitable`
+* :class:`collections.abc.Coroutine`
+* :class:`collections.abc.AsyncIterable`
+* :class:`collections.abc.AsyncIterator`
+* :class:`collections.abc.AsyncGenerator`
+* :class:`collections.abc.Iterable`
+* :class:`collections.abc.Iterator`
+* :class:`collections.abc.Generator`
+* :class:`collections.abc.Reversible`
+* :class:`collections.abc.Container`
+* :class:`collections.abc.Collection`
+* :class:`collections.abc.Callable`
+* :class:`collections.abc.Set`
+* :class:`collections.abc.MutableSet`
+* :class:`collections.abc.Mapping`
+* :class:`collections.abc.MutableMapping`
+* :class:`collections.abc.Sequence`
+* :class:`collections.abc.MutableSequence`
+* :class:`collections.abc.ByteString`
+* :class:`collections.abc.MappingView`
+* :class:`collections.abc.KeysView`
+* :class:`collections.abc.ItemsView`
+* :class:`collections.abc.ValuesView`
+* :class:`contextlib.AbstractContextManager`
+* :class:`contextlib.AbstractAsyncContextManager`
+* :ref:`re.Pattern <re-objects>`
+* :ref:`re.Match <match-objects>`
+
+
+Special Attributes of Generic Alias
+-----------------------------------
+
+All parameterized generics implement special read-only attributes.
+
+.. attribute:: genericalias.__origin__
+
+   This attribute points at the non-parameterized generic class::
+
+      >>> list[int].__origin__
+      <class 'list'>
+
+
+.. attribute:: genericalias.__args__
+
+   This attribute is a :class:`tuple` (possibly of length 1) of generic
+   types passed to the original :meth:`__class_getitem__`
+   of the generic container::
+
+      >>> dict[str, list[int]].__args__
+      (<class 'str'>, list[int])
+
+
+.. attribute:: genericalias.__parameters__
+
+   This attribute is a lazily computed tuple (possibly empty) of unique type
+   variables found in ``__args__``::
+
+      >>> from typing import TypeVar
+
+      >>> T = TypeVar('T')
+      >>> list[T].__parameters__
+      (~T,)
+
+
+.. seealso::
+
+   * :pep:`585` -- "Type Hinting Generics In Standard Collections"
+   * :meth:`__class_getitem__` -- Used to implement parameterized generics.
+   * :ref:`generics` -- Generics in the :mod:`typing` module.
+
+.. versionadded:: 3.9
+
+
 .. _typesother:
 
 Other Built-in Types
diff --git a/Doc/library/string.rst b/Doc/library/string.rst
index fa906f7..5542e9b 100644
--- a/Doc/library/string.rst
+++ b/Doc/library/string.rst
@@ -205,7 +205,7 @@
 
 The grammar for a replacement field is as follows:
 
-   .. productionlist:: sf
+   .. productionlist:: format-string
       replacement_field: "{" [`field_name`] ["!" `conversion`] [":" `format_spec`] "}"
       field_name: arg_name ("." `attribute_name` | "[" `element_index` "]")*
       arg_name: [`identifier` | `digit`+]
@@ -308,7 +308,7 @@
 
 The general form of a *standard format specifier* is:
 
-.. productionlist:: sf
+.. productionlist:: format-spec
    format_spec: [[`fill`]`align`][`sign`][#][0][`width`][`grouping_option`][.`precision`][`type`]
    fill: <any character>
    align: "<" | ">" | "=" | "^"
@@ -384,10 +384,10 @@
 
 The ``'#'`` option causes the "alternate form" to be used for the
 conversion.  The alternate form is defined differently for different
-types.  This option is only valid for integer, float, complex and
-Decimal types. For integers, when binary, octal, or hexadecimal output
+types.  This option is only valid for integer, float and complex
+types. For integers, when binary, octal, or hexadecimal output
 is used, this option adds the prefix respective ``'0b'``, ``'0o'``, or
-``'0x'`` to the output value. For floats, complex and Decimal the
+``'0x'`` to the output value. For float and complex the
 alternate form causes the result of the conversion to always contain a
 decimal-point character, even if no digits follow it. Normally, a
 decimal-point character appears in the result of these conversions
@@ -476,20 +476,36 @@
 ``'n'`` and ``None``). When doing so, :func:`float` is used to convert the
 integer to a floating point number before formatting.
 
-The available presentation types for floating point and decimal values are:
+The available presentation types for :class:`float` and
+:class:`~decimal.Decimal` values are:
 
    +---------+----------------------------------------------------------+
    | Type    | Meaning                                                  |
    +=========+==========================================================+
-   | ``'e'`` | Exponent notation. Prints the number in scientific       |
-   |         | notation using the letter 'e' to indicate the exponent.  |
-   |         | The default precision is ``6``.                          |
+   | ``'e'`` | Scientific notation. For a given precision ``p``,        |
+   |         | formats the number in scientific notation with the       |
+   |         | letter 'e' separating the coefficient from the exponent. |
+   |         | The coefficient has one digit before and ``p`` digits    |
+   |         | after the decimal point, for a total of ``p + 1``        |
+   |         | significant digits. With no precision given, uses a      |
+   |         | precision of ``6`` digits after the decimal point for    |
+   |         | :class:`float`, and shows all coefficient digits         |
+   |         | for :class:`~decimal.Decimal`. If no digits follow the   |
+   |         | decimal point, the decimal point is also removed unless  |
+   |         | the ``#`` option is used.                                |
    +---------+----------------------------------------------------------+
-   | ``'E'`` | Exponent notation. Same as ``'e'`` except it uses an     |
-   |         | upper case 'E' as the separator character.               |
+   | ``'E'`` | Scientific notation. Same as ``'e'`` except it uses      |
+   |         | an upper case 'E' as the separator character.            |
    +---------+----------------------------------------------------------+
-   | ``'f'`` | Fixed-point notation. Displays the number as a           |
-   |         | fixed-point number.  The default precision is ``6``.     |
+   | ``'f'`` | Fixed-point notation. For a given precision ``p``,       |
+   |         | formats the number as a decimal number with exactly      |
+   |         | ``p`` digits following the decimal point. With no        |
+   |         | precision given, uses a precision of ``6`` digits after  |
+   |         | the decimal point for :class:`float`, and uses a         |
+   |         | precision large enough to show all coefficient digits    |
+   |         | for :class:`~decimal.Decimal`. If no digits follow the   |
+   |         | decimal point, the decimal point is also removed unless  |
+   |         | the ``#`` option is used.                                |
    +---------+----------------------------------------------------------+
    | ``'F'`` | Fixed-point notation. Same as ``'f'``, but converts      |
    |         | ``nan`` to  ``NAN`` and ``inf`` to ``INF``.              |
@@ -518,7 +534,10 @@
    |         | the precision.                                           |
    |         |                                                          |
    |         | A precision of ``0`` is treated as equivalent to a       |
-   |         | precision of ``1``.  The default precision is ``6``.     |
+   |         | precision of ``1``. With no precision given, uses a      |
+   |         | precision of ``6`` significant digits for                |
+   |         | :class:`float`, and shows all coefficient digits         |
+   |         | for :class:`~decimal.Decimal`.                           |
    +---------+----------------------------------------------------------+
    | ``'G'`` | General format. Same as ``'g'`` except switches to       |
    |         | ``'E'`` if the number gets too large. The                |
diff --git a/Doc/library/struct.rst b/Doc/library/struct.rst
index 56b0a36..eccba20 100644
--- a/Doc/library/struct.rst
+++ b/Doc/library/struct.rst
@@ -70,7 +70,7 @@
    size required by the format, as reflected by :func:`calcsize`.
 
 
-.. function:: unpack_from(format, buffer, offset=0)
+.. function:: unpack_from(format, /, buffer, offset=0)
 
    Unpack from *buffer* starting at position *offset*, according to the format
    string *format*.  The result is a tuple even if it contains exactly one
@@ -159,8 +159,8 @@
 Note the difference between ``'@'`` and ``'='``: both use native byte order, but
 the size and alignment of the latter is standardized.
 
-The form ``'!'`` is available for those poor souls who claim they can't remember
-whether network byte order is big-endian or little-endian.
+The form ``'!'`` represents the network byte order which is always big-endian
+as defined in `IETF RFC 1700 <IETF RFC 1700_>`_.
 
 There is no way to indicate non-native byte order (force byte-swapping); use the
 appropriate choice of ``'<'`` or ``'>'``.
@@ -259,7 +259,7 @@
    called to convert the argument to an integer before packing.
 
    .. versionchanged:: 3.2
-      Use of the :meth:`__index__` method for non-integers is new in 3.2.
+      Added use of the :meth:`__index__` method for non-integers.
 
 (3)
    The ``'n'`` and ``'N'`` conversion codes are only available for the native
@@ -312,7 +312,7 @@
 then :exc:`struct.error` is raised.
 
 .. versionchanged:: 3.1
-   In 3.0, some of the integer formats wrapped out-of-range values and
+   Previously, some of the integer formats wrapped out-of-range values and
    raised :exc:`DeprecationWarning` instead of :exc:`struct.error`.
 
 The ``'p'`` format character encodes a "Pascal string", meaning a short
@@ -467,3 +467,5 @@
 .. _half precision format: https://en.wikipedia.org/wiki/Half-precision_floating-point_format
 
 .. _ieee 754 standard: https://en.wikipedia.org/wiki/IEEE_floating_point#IEEE_754-2008
+
+.. _IETF RFC 1700: https://tools.ietf.org/html/rfc1700
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst
index a93a6c1..e37cc98 100644
--- a/Doc/library/subprocess.rst
+++ b/Doc/library/subprocess.rst
@@ -339,7 +339,8 @@
                  stderr=None, preexec_fn=None, close_fds=True, shell=False, \
                  cwd=None, env=None, universal_newlines=None, \
                  startupinfo=None, creationflags=0, restore_signals=True, \
-                 start_new_session=False, pass_fds=(), *, \
+                 start_new_session=False, pass_fds=(), \*, group=None, \
+                 extra_groups=None, user=None, umask=-1, \
                  encoding=None, errors=None, text=None)
 
    Execute a child program in a new process.  On POSIX, the class uses
@@ -550,6 +551,39 @@
    .. versionchanged:: 3.2
       *start_new_session* was added.
 
+   If *group* is not ``None``, the setregid() system call will be made in the
+   child process prior to the execution of the subprocess. If the provided
+   value is a string, it will be looked up via :func:`grp.getgrnam()` and
+   the value in ``gr_gid`` will be used. If the value is an integer, it
+   will be passed verbatim. (POSIX only)
+
+   .. availability:: POSIX
+   .. versionadded:: 3.9
+
+   If *extra_groups* is not ``None``, the setgroups() system call will be
+   made in the child process prior to the execution of the subprocess.
+   Strings provided in *extra_groups* will be looked up via
+   :func:`grp.getgrnam()` and the values in ``gr_gid`` will be used.
+   Integer values will be passed verbatim. (POSIX only)
+
+   .. availability:: POSIX
+   .. versionadded:: 3.9
+
+   If *user* is not ``None``, the setreuid() system call will be made in the
+   child process prior to the execution of the subprocess. If the provided
+   value is a string, it will be looked up via :func:`pwd.getpwnam()` and
+   the value in ``pw_uid`` will be used. If the value is an integer, it will
+   be passed verbatim. (POSIX only)
+
+   .. availability:: POSIX
+   .. versionadded:: 3.9
+
+   If *umask* is not negative, the umask() system call will be made in the
+   child process prior to the execution of the subprocess.
+
+   .. availability:: POSIX
+   .. versionadded:: 3.9
+
    If *env* is not ``None``, it must be a mapping that defines the environment
    variables for the new process; these are used instead of the default
    behavior of inheriting the current process' environment.
@@ -747,6 +781,8 @@
 
    Sends the signal *signal* to the child.
 
+   Do nothing if the process completed.
+
    .. note::
 
       On Windows, SIGTERM is an alias for :meth:`terminate`. CTRL_C_EVENT and
diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst
index 2064fd7..aad6f93 100644
--- a/Doc/library/sunau.rst
+++ b/Doc/library/sunau.rst
@@ -59,13 +59,6 @@
    or ``'wb'`` returns an :class:`AU_write` object.
 
 
-.. function:: openfp(file, mode)
-
-   A synonym for :func:`.open`, maintained for backwards compatibility.
-
-   .. deprecated-removed:: 3.7 3.9
-
-
 The :mod:`sunau` module defines the following exception:
 
 .. exception:: Error
diff --git a/Doc/library/symbol.rst b/Doc/library/symbol.rst
index 4499693..d56600a 100644
--- a/Doc/library/symbol.rst
+++ b/Doc/library/symbol.rst
@@ -17,6 +17,11 @@
 specific numeric values which the names map to may change between Python
 versions.
 
+.. warning::
+
+   The symbol module is deprecated and will be removed in future versions of
+   Python.
+
 This module also provides one additional data object:
 
 
diff --git a/Doc/library/symtable.rst b/Doc/library/symtable.rst
index 7c6ac4d..3efdecb 100644
--- a/Doc/library/symtable.rst
+++ b/Doc/library/symtable.rst
@@ -67,10 +67,6 @@
       Return ``True`` if the block has nested namespaces within it.  These can
       be obtained with :meth:`get_children`.
 
-   .. method:: has_exec()
-
-      Return ``True`` if the block uses ``exec``.
-
    .. method:: get_identifiers()
 
       Return a list of names of symbols in this table.
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index d3473de..3df529f 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -31,16 +31,22 @@
    When an auditing event is raised through the :func:`sys.audit` function, each
    hook will be called in the order it was added with the event name and the
    tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are
-   called first, followed by hooks added in the current interpreter.
+   called first, followed by hooks added in the current interpreter.  Hooks
+   can then log the event, raise an exception to abort the operation,
+   or terminate the process entirely.
 
    .. audit-event:: sys.addaudithook "" sys.addaudithook
 
-      Raise an auditing event ``sys.addaudithook`` with no arguments. If any
+      Calling :func:`sys.addaudithook` will itself raise an auditing event
+      named ``sys.addaudithook`` with no arguments. If any
       existing hooks raise an exception derived from :class:`RuntimeError`, the
       new hook will not be added and the exception suppressed. As a result,
       callers cannot assume that their hook has been added unless they control
       all existing hooks.
 
+   See the :ref:`audit events table <audit-events>` for all events raised by
+   CPython, and :pep:`578` for the original design discussion.
+
    .. versionadded:: 3.8
 
    .. versionchanged:: 3.8.1
@@ -79,14 +85,23 @@
 
    .. index:: single: auditing
 
-   Raise an auditing event with any active hooks. The event name is a string
-   identifying the event and its associated schema, which is the number and
-   types of arguments. The schema for a given event is considered public and
-   stable API and should not be modified between releases.
+   Raise an auditing event and trigger any active auditing hooks.
+   *event* is a string identifying the event, and *args* may contain
+   optional arguments with more information about the event.  The
+   number and types of arguments for a given event are considered a
+   public and stable API and should not be modified between releases.
 
-   This function will raise the first exception raised by any hook. In general,
-   these errors should not be handled and should terminate the process as
-   quickly as possible.
+   For example, one auditing event is named ``os.chdir``. This event has
+   one argument called *path* that will contain the requested new
+   working directory.
+
+   :func:`sys.audit` will call the existing auditing hooks, passing
+   the event name and arguments, and will re-raise the first exception
+   from any hook. In general, if an exception is raised, it should not
+   be handled and the process should be terminated as quickly as
+   possible. This allows hook implementations to decide how to respond
+   to particular events: they can merely log the event or abort the
+   operation by raising an exception.
 
    Hooks are added using the :func:`sys.addaudithook` or
    :c:func:`PySys_AddAuditHook` functions.
@@ -430,9 +445,9 @@
    The :term:`named tuple` *flags* exposes the status of command line
    flags. The attributes are read only.
 
-   ============================= =============================
+   ============================= ================================================================
    attribute                     flag
-   ============================= =============================
+   ============================= ================================================================
    :const:`debug`                :option:`-d`
    :const:`inspect`              :option:`-i`
    :const:`interactive`          :option:`-i`
@@ -446,9 +461,9 @@
    :const:`bytes_warning`        :option:`-b`
    :const:`quiet`                :option:`-q`
    :const:`hash_randomization`   :option:`-R`
-   :const:`dev_mode`             :option:`-X` ``dev``
-   :const:`utf8_mode`            :option:`-X` ``utf8``
-   ============================= =============================
+   :const:`dev_mode`             :option:`-X dev <-X>` (:ref:`Python Development Mode <devmode>`)
+   :const:`utf8_mode`            :option:`-X utf8 <-X>`
+   ============================= ================================================================
 
    .. versionchanged:: 3.2
       Added ``quiet`` attribute for the new :option:`-q` flag.
@@ -463,8 +478,9 @@
       Added ``isolated`` attribute for :option:`-I` ``isolated`` flag.
 
    .. versionchanged:: 3.7
-      Added ``dev_mode`` attribute for the new :option:`-X` ``dev`` flag
-      and ``utf8_mode`` attribute for the new  :option:`-X` ``utf8`` flag.
+      Added the ``dev_mode`` attribute for the new :ref:`Python Development
+      Mode <devmode>` and the ``utf8_mode`` attribute for the new  :option:`-X`
+      ``utf8`` flag.
 
 
 .. data:: float_info
@@ -483,6 +499,8 @@
    +=====================+================+==================================================+
    | :const:`epsilon`    | DBL_EPSILON    | difference between 1.0 and the least value       |
    |                     |                | greater than 1.0 that is representable as a float|
+   |                     |                |                                                  |
+   |                     |                | See also :func:`math.ulp`.                       |
    +---------------------+----------------+--------------------------------------------------+
    | :const:`dig`        | DBL_DIG        | maximum number of decimal digits that can be     |
    |                     |                | faithfully represented in a float;  see below    |
@@ -499,6 +517,10 @@
    |                     |                | range of representable finite floats             |
    +---------------------+----------------+--------------------------------------------------+
    | :const:`min`        | DBL_MIN        | minimum representable positive *normalized* float|
+   |                     |                |                                                  |
+   |                     |                | Use :func:`math.ulp(0.0) <math.ulp>` to get the  |
+   |                     |                | smallest positive *denormalized* representable   |
+   |                     |                | float.                                           |
    +---------------------+----------------+--------------------------------------------------+
    | :const:`min_exp`    | DBL_MIN_EXP    | minimum integer *e* such that ``radix**(e-1)`` is|
    |                     |                | a normalized float                               |
@@ -573,14 +595,6 @@
    .. versionadded:: 3.7
 
 
-.. function:: getcheckinterval()
-
-   Return the interpreter's "check interval"; see :func:`setcheckinterval`.
-
-   .. deprecated:: 3.2
-      Use :func:`getswitchinterval` instead.
-
-
 .. function:: getdefaultencoding()
 
    Return the name of the current default string encoding used by the Unicode
@@ -1139,6 +1153,28 @@
       system's identity.
 
 
+.. data:: platlibdir
+
+   Name of the platform-specific library directory. It is used to build the
+   path of standard library and the paths of installed extension modules.
+
+   It is equal to ``"lib"`` on most platforms. On Fedora and SuSE, it is equal
+   to ``"lib64"`` on 64-bit platforms which gives the following ``sys.path``
+   paths (where ``X.Y`` is the Python ``major.minor`` version):
+
+   * ``/usr/lib64/pythonX.Y/``:
+     Standard library (like ``os.py`` of the :mod:`os` module)
+   * ``/usr/lib64/pythonX.Y/lib-dynload/``:
+     C extension modules of the standard library (like the :mod:`errno` module,
+     the exact filename is platform specific)
+   * ``/usr/lib/pythonX.Y/site-packages/`` (always use ``lib``, not
+     :data:`sys.platlibdir`): Third-party modules
+   * ``/usr/lib64/pythonX.Y/site-packages/``:
+     C extension modules of third-party packages
+
+   .. versionadded:: 3.9
+
+
 .. data:: prefix
 
    A string giving the site-specific directory prefix where the platform
@@ -1173,21 +1209,6 @@
    implement a dynamic prompt.
 
 
-.. function:: setcheckinterval(interval)
-
-   Set the interpreter's "check interval".  This integer value determines how often
-   the interpreter checks for periodic things such as thread switches and signal
-   handlers.  The default is ``100``, meaning the check is performed every 100
-   Python virtual instructions. Setting it to a larger value may increase
-   performance for programs using threads.  Setting it to a value ``<=`` 0 checks
-   every virtual instruction, maximizing responsiveness as well as overhead.
-
-   .. deprecated:: 3.2
-      This function doesn't have an effect anymore, as the internal logic for
-      thread switching and asynchronous tasks has been rewritten.  Use
-      :func:`setswitchinterval` instead.
-
-
 .. function:: setdlopenflags(n)
 
    Set the flags used by the interpreter for :c:func:`dlopen` calls, such as when
@@ -1471,9 +1492,15 @@
      for the Windows console, this only applies when
      :envvar:`PYTHONLEGACYWINDOWSSTDIO` is also set.
 
-   * When interactive, ``stdout`` and ``stderr`` streams are line-buffered.
-     Otherwise, they are block-buffered like regular text files.  You can
-     override this value with the :option:`-u` command-line option.
+   * When interactive, the ``stdout`` stream is line-buffered. Otherwise,
+     it is block-buffered like regular text files.  The ``stderr`` stream
+     is line-buffered in both cases.  You can make both streams unbuffered
+     by passing the :option:`-u` command-line option or setting the
+     :envvar:`PYTHONUNBUFFERED` environment variable.
+
+   .. versionchanged:: 3.9
+      Non-interactive ``stderr`` is now line-buffered instead of fully
+      buffered.
 
    .. note::
 
diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index d60f1c8..7a114fd 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -151,6 +151,7 @@
 
 
 .. class:: TarFile
+   :noindex:
 
    Class for reading and writing tar archives. Do not use this class directly:
    use :func:`tarfile.open` instead. See :ref:`tarfile-objects`.
@@ -159,7 +160,10 @@
 .. function:: is_tarfile(name)
 
    Return :const:`True` if *name* is a tar archive file, that the :mod:`tarfile`
-   module can read.
+   module can read. *name* may be a :class:`str`, file, or file-like object.
+
+   .. versionchanged:: 3.9
+      Support for file and file-like objects.
 
 
 The :mod:`tarfile` module defines the following exceptions:
@@ -441,10 +445,11 @@
 
 .. method:: TarFile.extractfile(member)
 
-   Extract a member from the archive as a file object. *member* may be a filename
-   or a :class:`TarInfo` object. If *member* is a regular file or a link, an
-   :class:`io.BufferedReader` object is returned. Otherwise, :const:`None` is
-   returned.
+   Extract a member from the archive as a file object. *member* may be
+   a filename or a :class:`TarInfo` object. If *member* is a regular file or
+   a link, an :class:`io.BufferedReader` object is returned. For all other
+   existing members, :const:`None` is returned. If *member* does not appear
+   in the archive, :exc:`KeyError` is raised.
 
    .. versionchanged:: 3.3
       Return an :class:`io.BufferedReader` object.
diff --git a/Doc/library/tempfile.rst b/Doc/library/tempfile.rst
index a59817c..f9421da 100644
--- a/Doc/library/tempfile.rst
+++ b/Doc/library/tempfile.rst
@@ -31,7 +31,7 @@
 
 The module defines the following user-callable items:
 
-.. function:: TemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)
+.. function:: TemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)
 
    Return a :term:`file-like object` that can be used as a temporary storage area.
    The file is created securely, using the same rules as :func:`mkstemp`. It will be destroyed as soon
@@ -72,7 +72,7 @@
       Added *errors* parameter.
 
 
-.. function:: NamedTemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True, *, errors=None)
+.. function:: NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True, *, errors=None)
 
    This function operates exactly as :func:`TemporaryFile` does, except that
    the file is guaranteed to have a visible name in the file system (on
@@ -93,7 +93,7 @@
       Added *errors* parameter.
 
 
-.. function:: SpooledTemporaryFile(max_size=0, mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)
+.. function:: SpooledTemporaryFile(max_size=0, mode='w+b', buffering=-1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)
 
    This function operates exactly as :func:`TemporaryFile` does, except that
    data is spooled in memory until the file size exceeds *max_size*, or
@@ -175,9 +175,8 @@
    If you want to force a bytes return value with otherwise default behavior,
    pass ``suffix=b''``.
 
-   If *text* is specified, it indicates whether to open the file in binary
-   mode (the default) or text mode.  On some platforms, this makes no
-   difference.
+   If *text* is specified and true, the file is opened in text mode.
+   Otherwise, (the default) the file is opened in binary mode.
 
    :func:`mkstemp` returns a tuple containing an OS-level handle to an open
    file (as would be returned by :func:`os.open`) and the absolute pathname
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index da6a85d..e24f69c 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -287,9 +287,65 @@
    Set to a filename containing the :data:`FS_NONASCII` character.
 
 
-.. data:: IPV6_ENABLED
+.. data:: LOOPBACK_TIMEOUT
 
-    Set to ``True`` if IPV6 is enabled on this host, ``False`` otherwise.
+   Timeout in seconds for tests using a network server listening on the network
+   local loopback interface like ``127.0.0.1``.
+
+   The timeout is long enough to prevent test failure: it takes into account
+   that the client and the server can run in different threads or even
+   different processes.
+
+   The timeout should be long enough for :meth:`~socket.socket.connect`,
+   :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` methods of
+   :class:`socket.socket`.
+
+   Its default value is 5 seconds.
+
+   See also :data:`INTERNET_TIMEOUT`.
+
+
+.. data:: INTERNET_TIMEOUT
+
+   Timeout in seconds for network requests going to the Internet.
+
+   The timeout is short enough to prevent a test to wait for too long if the
+   Internet request is blocked for whatever reason.
+
+   Usually, a timeout using :data:`INTERNET_TIMEOUT` should not mark a test as
+   failed, but skip the test instead: see
+   :func:`~test.support.socket_helper.transient_internet`.
+
+   Its default value is 1 minute.
+
+   See also :data:`LOOPBACK_TIMEOUT`.
+
+
+.. data:: SHORT_TIMEOUT
+
+   Timeout in seconds to mark a test as failed if the test takes "too long".
+
+   The timeout value depends on the regrtest ``--timeout`` command line option.
+
+   If a test using :data:`SHORT_TIMEOUT` starts to fail randomly on slow
+   buildbots, use :data:`LONG_TIMEOUT` instead.
+
+   Its default value is 30 seconds.
+
+
+.. data:: LONG_TIMEOUT
+
+   Timeout in seconds to detect when a test hangs.
+
+   It is long enough to reduce the risk of test failure on the slowest Python
+   buildbots. It should not be used to mark a test as failed if the test takes
+   "too long".  The timeout value depends on the regrtest ``--timeout`` command
+   line option.
+
+   Its default value is 5 minutes.
+
+   See also :data:`LOOPBACK_TIMEOUT`, :data:`INTERNET_TIMEOUT` and
+   :data:`SHORT_TIMEOUT`.
 
 
 .. data:: SAVEDCWD
@@ -367,6 +423,12 @@
    Object that is equal to anything.  Used to test mixed type comparison.
 
 
+.. data:: NEVER_EQ
+
+   Object that is not equal to anything (even to :data:`ALWAYS_EQ`).
+   Used to test mixed type comparison.
+
+
 .. data:: LARGEST
 
    Object that is greater than anything (except itself).
@@ -619,13 +681,6 @@
    ``sys.stdout`` if it's not set.
 
 
-.. function:: strip_python_strerr(stderr)
-
-   Strip the *stderr* of a Python process from potential debug output
-   emitted by the interpreter.  This will typically be run on the result of
-   :meth:`subprocess.Popen.communicate`.
-
-
 .. function:: args_from_interpreter_flags()
 
    Return a list of command line arguments reproducing the current settings
@@ -704,12 +759,6 @@
    A context manager that temporarily sets the process umask.
 
 
-.. function:: transient_internet(resource_name, *, timeout=30.0, errnos=())
-
-   A context manager that raises :exc:`ResourceDenied` when various issues
-   with the internet connection manifest themselves as exceptions.
-
-
 .. function:: disable_faulthandler()
 
    A context manager that replaces ``sys.stderr`` with ``sys.__stderr__``.
@@ -765,6 +814,30 @@
    target of the "as" clause, if there is one.
 
 
+.. function:: print_warning(msg)
+
+   Print a warning into :data:`sys.__stderr__`. Format the message as:
+   ``f"Warning -- {msg}"``. If *msg* is made of multiple lines, add
+   ``"Warning -- "`` prefix to each line.
+
+   .. versionadded:: 3.9
+
+
+.. function:: wait_process(pid, *, exitcode, timeout=None)
+
+   Wait until process *pid* completes and check that the process exit code is
+   *exitcode*.
+
+   Raise an :exc:`AssertionError` if the process exit code is not equal to
+   *exitcode*.
+
+   If the process runs longer than *timeout* seconds (:data:`SHORT_TIMEOUT` by
+   default), kill the process and raise an :exc:`AssertionError`. The timeout
+   feature is not available on Windows.
+
+   .. versionadded:: 3.9
+
+
 .. function:: wait_threads_exit(timeout=60.0)
 
    Context manager to wait until all threads created in the ``with`` statement
@@ -817,12 +890,6 @@
    A decorator for running tests that require support for xattr.
 
 
-.. decorator:: skip_unless_bind_unix_socket
-
-   A decorator for running tests that require a functional bind() for Unix
-   sockets.
-
-
 .. decorator:: anticipate_failure(condition)
 
    A decorator to conditionally mark tests with
@@ -1073,31 +1140,6 @@
    is raised.
 
 
-.. function:: bind_port(sock, host=HOST)
-
-   Bind the socket to a free port and return the port number.  Relies on
-   ephemeral ports in order to ensure we are using an unbound port.  This is
-   important as many tests may be running simultaneously, especially in a
-   buildbot environment.  This method raises an exception if the
-   ``sock.family`` is :const:`~socket.AF_INET` and ``sock.type`` is
-   :const:`~socket.SOCK_STREAM`, and the socket has
-   :const:`~socket.SO_REUSEADDR` or :const:`~socket.SO_REUSEPORT` set on it.
-   Tests should never set these socket options for TCP/IP sockets.
-   The only case for setting these options is testing multicasting via
-   multiple UDP sockets.
-
-   Additionally, if the :const:`~socket.SO_EXCLUSIVEADDRUSE` socket option is
-   available (i.e. on Windows), it will be set on the socket.  This will
-   prevent anyone else from binding to our host/port for the duration of the
-   test.
-
-
-.. function:: bind_unix_socket(sock, addr)
-
-   Bind a unix socket, raising :exc:`unittest.SkipTest` if
-   :exc:`PermissionError` is raised.
-
-
 .. function:: catch_threading_exception()
 
    Context manager catching :class:`threading.Thread` exception using
@@ -1159,29 +1201,6 @@
    .. versionadded:: 3.8
 
 
-.. function:: find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)
-
-   Returns an unused port that should be suitable for binding.  This is
-   achieved by creating a temporary socket with the same family and type as
-   the ``sock`` parameter (default is :const:`~socket.AF_INET`,
-   :const:`~socket.SOCK_STREAM`),
-   and binding it to the specified host address (defaults to ``0.0.0.0``)
-   with the port set to 0, eliciting an unused ephemeral port from the OS.
-   The temporary socket is then closed and deleted, and the ephemeral port is
-   returned.
-
-   Either this method or :func:`bind_port` should be used for any tests
-   where a server socket needs to be bound to a particular port for the
-   duration of the test.
-   Which one to use depends on whether the calling code is creating a Python
-   socket, or if an unused port needs to be provided in a constructor
-   or passed to an external program (i.e. the ``-accept`` argument to
-   openssl's s_server mode).  Always prefer :func:`bind_port` over
-   :func:`find_unused_port` where possible.  Using a hard coded port is
-   discouraged since it can make multiple instances of the test impossible to
-   run simultaneously, which is a problem for buildbots.
-
-
 .. function:: load_package_tests(pkg_dir, loader, standard_tests, pattern)
 
    Generic implementation of the :mod:`unittest` ``load_tests`` protocol for
@@ -1385,11 +1404,6 @@
       Run *test* and return the result.
 
 
-.. class:: TestHandler(logging.handlers.BufferingHandler)
-
-   Class for logging support.
-
-
 .. class:: FakePath(path)
 
    Simple :term:`path-like object`.  It implements the :meth:`__fspath__`
@@ -1397,6 +1411,84 @@
    it will be raised in :meth:`!__fspath__`.
 
 
+:mod:`test.support.socket_helper` --- Utilities for socket tests
+================================================================
+
+.. module:: test.support.socket_helper
+   :synopsis: Support for socket tests.
+
+
+The :mod:`test.support.socket_helper` module provides support for socket tests.
+
+.. versionadded:: 3.9
+
+
+.. data:: IPV6_ENABLED
+
+    Set to ``True`` if IPv6 is enabled on this host, ``False`` otherwise.
+
+
+.. function:: find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)
+
+   Returns an unused port that should be suitable for binding.  This is
+   achieved by creating a temporary socket with the same family and type as
+   the ``sock`` parameter (default is :const:`~socket.AF_INET`,
+   :const:`~socket.SOCK_STREAM`),
+   and binding it to the specified host address (defaults to ``0.0.0.0``)
+   with the port set to 0, eliciting an unused ephemeral port from the OS.
+   The temporary socket is then closed and deleted, and the ephemeral port is
+   returned.
+
+   Either this method or :func:`bind_port` should be used for any tests
+   where a server socket needs to be bound to a particular port for the
+   duration of the test.
+   Which one to use depends on whether the calling code is creating a Python
+   socket, or if an unused port needs to be provided in a constructor
+   or passed to an external program (i.e. the ``-accept`` argument to
+   openssl's s_server mode).  Always prefer :func:`bind_port` over
+   :func:`find_unused_port` where possible.  Using a hard coded port is
+   discouraged since it can make multiple instances of the test impossible to
+   run simultaneously, which is a problem for buildbots.
+
+
+.. function:: bind_port(sock, host=HOST)
+
+   Bind the socket to a free port and return the port number.  Relies on
+   ephemeral ports in order to ensure we are using an unbound port.  This is
+   important as many tests may be running simultaneously, especially in a
+   buildbot environment.  This method raises an exception if the
+   ``sock.family`` is :const:`~socket.AF_INET` and ``sock.type`` is
+   :const:`~socket.SOCK_STREAM`, and the socket has
+   :const:`~socket.SO_REUSEADDR` or :const:`~socket.SO_REUSEPORT` set on it.
+   Tests should never set these socket options for TCP/IP sockets.
+   The only case for setting these options is testing multicasting via
+   multiple UDP sockets.
+
+   Additionally, if the :const:`~socket.SO_EXCLUSIVEADDRUSE` socket option is
+   available (i.e. on Windows), it will be set on the socket.  This will
+   prevent anyone else from binding to our host/port for the duration of the
+   test.
+
+
+.. function:: bind_unix_socket(sock, addr)
+
+   Bind a unix socket, raising :exc:`unittest.SkipTest` if
+   :exc:`PermissionError` is raised.
+
+
+.. decorator:: skip_unless_bind_unix_socket
+
+   A decorator for running tests that require a functional ``bind()`` for Unix
+   sockets.
+
+
+.. function:: transient_internet(resource_name, *, timeout=30.0, errnos=())
+
+   A context manager that raises :exc:`~test.support.ResourceDenied` when
+   various issues with the internet connection manifest themselves as
+   exceptions.
+
+
 :mod:`test.support.script_helper` --- Utilities for the Python execution tests
 ==============================================================================
 
@@ -1432,6 +1524,9 @@
    in a subprocess.  The values can include ``__isolated``, ``__cleanenv``,
    ``__cwd``, and ``TERM``.
 
+   .. versionchanged:: 3.9
+      The function no longer strips whitespaces from *stderr*.
+
 
 .. function:: assert_python_ok(*args, **env_vars)
 
@@ -1445,6 +1540,9 @@
    Python is started in isolated mode (command line option ``-I``),
    except if the ``__isolated`` keyword is set to ``False``.
 
+   .. versionchanged:: 3.9
+      The function no longer strips whitespaces from *stderr*.
+
 
 .. function:: assert_python_failure(*args, **env_vars)
 
@@ -1454,6 +1552,9 @@
 
    See :func:`assert_python_ok` for more options.
 
+   .. versionchanged:: 3.9
+      The function no longer strips whitespaces from *stderr*.
+
 
 .. function:: spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)
 
@@ -1497,3 +1598,35 @@
    containing the *source*.  If *compiled* is ``True``, both source files will
    be compiled and added to the zip package.  Return a tuple of the full zip
    path and the archive name for the zip file.
+
+
+:mod:`test.support.bytecode_helper` --- Support tools for testing correct bytecode generation
+=============================================================================================
+
+.. module:: test.support.bytecode_helper
+   :synopsis: Support tools for testing correct bytecode generation.
+
+The :mod:`test.support.bytecode_helper` module provides support for testing
+and inspecting bytecode generation.
+
+.. versionadded:: 3.9
+
+The module defines the following class:
+
+.. class:: BytecodeTestCase(unittest.TestCase)
+
+   This class has custom assertion methods for inspecting bytecode.
+
+.. method:: BytecodeTestCase.get_disassembly_as_string(co)
+
+   Return the disassembly of *co* as string.
+
+
+.. method:: BytecodeTestCase.assertInBytecode(x, opname, argval=_UNSPECIFIED)
+
+   Return instr if *opname* is found, otherwise throws :exc:`AssertionError`.
+
+
+.. method:: BytecodeTestCase.assertNotInBytecode(x, opname, argval=_UNSPECIFIED)
+
+   Throws :exc:`AssertionError` if *opname* is found.
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index f4b58d3..f4de3c4 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -395,7 +395,8 @@
 
 .. impl-detail::
 
-   In CPython, due to the :term:`Global Interpreter Lock`, only one thread
+   In CPython, due to the :term:`Global Interpreter Lock
+   <global interpreter lock>`, only one thread
    can execute Python code at once (even though certain performance-oriented
    libraries might overcome this limitation).
    If you want your application to make better use of the computational
@@ -799,11 +800,14 @@
       .. versionchanged:: 3.2
          The *timeout* parameter is new.
 
-   .. method:: release()
+   .. method:: release(n=1)
 
-      Release a semaphore, incrementing the internal counter by one.  When it
-      was zero on entry and another thread is waiting for it to become larger
-      than zero again, wake up that thread.
+      Release a semaphore, incrementing the internal counter by *n*.  When it
+      was zero on entry and other threads are waiting for it to become larger
+      than zero again, wake up *n* of those threads.
+
+      .. versionchanged:: 3.9
+         Added the *n* parameter to release multiple waiting threads at once.
 
 
 .. class:: BoundedSemaphore(value=1)
diff --git a/Doc/library/time.rst b/Doc/library/time.rst
index 6842e90..cff6320 100644
--- a/Doc/library/time.rst
+++ b/Doc/library/time.rst
@@ -774,6 +774,16 @@
 
    .. versionadded:: 3.7
 
+.. data:: CLOCK_TAI
+
+   `International Atomic Time <https://www.nist.gov/pml/time-and-frequency-division/nist-time-frequently-asked-questions-faq#tai>`_
+
+   The system must have a current leap second table in order for this to give
+   the correct answer.  PTP or NTP software can maintain a leap second table.
+
+   .. availability:: Linux.
+
+   .. versionadded:: 3.9
 
 .. data:: CLOCK_THREAD_CPUTIME_ID
 
@@ -805,7 +815,6 @@
 
    .. versionadded:: 3.8
 
-
 The following constant is the only parameter that can be sent to
 :func:`clock_settime`.
 
diff --git a/Doc/library/timeit.rst b/Doc/library/timeit.rst
index 46fa62c..668fcb8 100644
--- a/Doc/library/timeit.rst
+++ b/Doc/library/timeit.rst
@@ -233,7 +233,7 @@
 
 .. cmdoption:: -u, --unit=U
 
-    specify a time unit for timer output; can select nsec, usec, msec, or sec
+   specify a time unit for timer output; can select nsec, usec, msec, or sec
 
    .. versionadded:: 3.5
 
diff --git a/Doc/library/tk.rst b/Doc/library/tk.rst
index 95cd1c7..c6c73f0 100644
--- a/Doc/library/tk.rst
+++ b/Doc/library/tk.rst
@@ -33,14 +33,17 @@
 .. toctree::
 
    tkinter.rst
+   tkinter.colorchooser.rst
+   tkinter.font.rst
+   dialog.rst
+   tkinter.messagebox.rst
+   tkinter.scrolledtext.rst
+   tkinter.dnd.rst
    tkinter.ttk.rst
    tkinter.tix.rst
-   tkinter.scrolledtext.rst
    idle.rst
    othergui.rst
 
 .. Other sections I have in mind are
    Tkinter internals
-   Freezing Tkinter applications
-
-
+   Freezing Tkinter applications
\ No newline at end of file
diff --git a/Doc/library/tk_msg.png b/Doc/library/tk_msg.png
new file mode 100644
index 0000000..c122d8f
--- /dev/null
+++ b/Doc/library/tk_msg.png
Binary files differ
diff --git a/Doc/library/tkinter.colorchooser.rst b/Doc/library/tkinter.colorchooser.rst
new file mode 100644
index 0000000..60f4d70
--- /dev/null
+++ b/Doc/library/tkinter.colorchooser.rst
@@ -0,0 +1,29 @@
+:mod:`tkinter.colorchooser` --- Color choosing dialog
+=====================================================
+
+.. module:: tkinter.colorchooser
+   :platform: Tk
+   :synopsis: Color choosing dialog
+
+**Source code:** :source:`Lib/tkinter/colorchooser.py`
+
+--------------
+
+The :mod:`tkinter.colorchooser` module provides the :class:`Chooser` class
+as an interface to the native color picker dialog. ``Chooser`` implements
+a modal color choosing dialog window. The ``Chooser`` class inherits from
+the :class:`~tkinter.commondialog.Dialog` class.
+
+.. class:: Chooser(master=None, **options)
+
+.. function:: askcolor(color=None, **options)
+
+   Create a color choosing dialog. A call to this method will show the window,
+   wait for the user to make a selection, and return the selected color (or
+   ``None``) to the caller.
+
+
+.. seealso::
+
+   Module :mod:`tkinter.commondialog`
+      Tkinter standard dialog module
\ No newline at end of file
diff --git a/Doc/library/tkinter.dnd.rst b/Doc/library/tkinter.dnd.rst
new file mode 100644
index 0000000..6c11c73
--- /dev/null
+++ b/Doc/library/tkinter.dnd.rst
@@ -0,0 +1,64 @@
+:mod:`tkinter.dnd` --- Drag and drop support
+============================================
+
+.. module:: tkinter.dnd
+   :platform: Tk
+   :synopsis: Tkinter drag-and-drop interface
+
+**Source code:** :source:`Lib/tkinter/dnd.py`
+
+--------------
+
+.. note:: This is experimental and due to be deprecated when it is replaced
+   with the Tk DND.
+
+The :mod:`tkinter.dnd` module provides drag-and-drop support for objects within
+a single application, within the same window or between windows. To enable an
+object to be dragged, you must create an event binding for it that starts the
+drag-and-drop process. Typically, you bind a ButtonPress event to a callback
+function that you write (see :ref:`Bindings-and-Events`). The function should
+call :func:`dnd_start`, where 'source' is the object to be dragged, and 'event'
+is the event that invoked the call (the argument to your callback function).
+
+Selection of a target object occurs as follows:
+
+#. Top-down search of area under mouse for target widget
+
+ * Target widget should have a callable *dnd_accept* attribute
+ * If *dnd_accept* is not present or returns None, search moves to parent widget
+ * If no target widget is found, then the target object is None
+
+2. Call to *<old_target>.dnd_leave(source, event)*
+#. Call to *<new_target>.dnd_enter(source, event)*
+#. Call to *<target>.dnd_commit(source, event)* to notify of drop
+#. Call to *<source>.dnd_end(target, event)* to signal end of drag-and-drop
+
+
+.. class:: DndHandler(source, event)
+
+   The *DndHandler* class handles drag-and-drop events tracking Motion and
+   ButtonRelease events on the root of the event widget.
+
+   .. method:: cancel(event=None)
+
+      Cancel the drag-and-drop process.
+
+   .. method:: finish(event, commit=0)
+
+      Execute end of drag-and-drop functions.
+
+   .. method:: on_motion(event)
+
+      Inspect area below mouse for target objects while drag is performed.
+
+   .. method:: on_release(event)
+
+      Signal end of drag when the release pattern is triggered.
+
+.. function:: dnd_start(source, event)
+
+   Factory function for drag-and-drop process.
+
+.. seealso::
+
+   :ref:`Bindings-and-Events`
\ No newline at end of file
diff --git a/Doc/library/tkinter.font.rst b/Doc/library/tkinter.font.rst
new file mode 100644
index 0000000..b0f4505
--- /dev/null
+++ b/Doc/library/tkinter.font.rst
@@ -0,0 +1,96 @@
+:mod:`tkinter.font` --- Tkinter font wrapper
+============================================
+
+.. module:: tkinter.font
+   :platform: Tk
+   :synopsis: Tkinter font-wrapping class
+
+**Source code:** :source:`Lib/tkinter/font.py`
+
+--------------
+
+The :mod:`tkinter.font` module provides the :class:`Font` class for creating
+and using named fonts.
+
+The different font weights and slants are:
+
+.. data:: NORMAL
+          BOLD
+          ITALIC
+          ROMAN
+
+.. class:: Font(root=None, font=None, name=None, exists=False, **options)
+
+   The :class:`Font` class represents a named font. *Font* instances are given
+   unique names and can be specified by their family, size, and style
+   configuration. Named fonts are Tk's method of creating and identifying
+   fonts as a single object, rather than specifying a font by its attributes
+   with each occurrence.
+
+    arguments:
+
+       | *font* - font specifier tuple (family, size, options)
+       | *name* - unique font name
+       | *exists* - self points to existing named font if true
+
+    additional keyword options (ignored if *font* is specified):
+
+       | *family* - font family i.e. Courier, Times
+       | *size* - font size
+       |     If *size* is positive it is interpreted as size in points.
+       |     If *size* is a negative number its absolute value is treated
+       |     as size in pixels.
+       | *weight* - font emphasis (NORMAL, BOLD)
+       | *slant* - ROMAN, ITALIC
+       | *underline* - font underlining (0 - none, 1 - underline)
+       | *overstrike* - font strikeout (0 - none, 1 - strikeout)
+
+   .. method:: actual(option=None, displayof=None)
+
+      Return the attributes of the font.
+
+   .. method:: cget(option)
+
+      Retrieve an attribute of the font.
+
+   .. method:: config(**options)
+
+      Modify attributes of the font.
+
+   .. method:: copy()
+
+      Return new instance of the current font.
+
+   .. method:: measure(text, displayof=None)
+
+      Return amount of space the text would occupy on the specified display
+      when formatted in the current font. If no display is specified then the
+      main application window is assumed.
+
+   .. method:: metrics(*options, **kw)
+
+      Return font-specific data.
+      Options include:
+
+      *ascent* - distance between baseline and highest point that a
+         character of the font can occupy
+
+      *descent* - distance between baseline and lowest point that a
+         character of the font can occupy
+
+      *linespace* - minimum vertical separation necessary between any two
+         characters of the font that ensures no vertical overlap between lines.
+
+      *fixed* - 1 if font is fixed-width else 0
+
+.. function:: families(root=None, displayof=None)
+
+   Return the different font families.
+
+.. function:: names(root=None)
+
+   Return the names of defined fonts.
+
+.. function:: nametofont(name)
+
+   Return a :class:`Font` representation of a tk named font.
\ No newline at end of file
diff --git a/Doc/library/tkinter.messagebox.rst b/Doc/library/tkinter.messagebox.rst
new file mode 100644
index 0000000..872e72f
--- /dev/null
+++ b/Doc/library/tkinter.messagebox.rst
@@ -0,0 +1,39 @@
+:mod:`tkinter.messagebox` --- Tkinter message prompts
+=====================================================
+
+.. module:: tkinter.messagebox
+   :platform: Tk
+   :synopsis: Various types of alert dialogs
+
+**Source code:** :source:`Lib/tkinter/messagebox.py`
+
+--------------
+
+The :mod:`tkinter.messagebox` module provides a template base class as well as
+a variety of convenience methods for commonly used configurations. The message
+boxes are modal and will return a subset of (True, False, OK, None, Yes, No) based on
+the user's selection. Common message box styles and layouts include but are not
+limited to:
+
+.. figure:: tk_msg.png
+
+.. class:: Message(master=None, **options)
+
+   Create a default information message box.
+
+**Information message box**
+
+.. method:: showinfo(title=None, message=None, **options)
+
+**Warning message boxes**
+
+.. method:: showwarning(title=None, message=None, **options)
+            showerror(title=None, message=None, **options)
+
+**Question message boxes**
+
+.. method:: askquestion(title=None, message=None, **options)
+            askokcancel(title=None, message=None, **options)
+            askretrycancel(title=None, message=None, **options)
+            askyesno(title=None, message=None, **options)
+            askyesnocancel(title=None, message=None, **options)
\ No newline at end of file
diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst
index e1fc051..7739f2f 100644
--- a/Doc/library/tkinter.rst
+++ b/Doc/library/tkinter.rst
@@ -31,7 +31,7 @@
    `TKDocs <http://www.tkdocs.com/>`_
       Extensive tutorial plus friendlier widget pages for some of the widgets.
 
-   `Tkinter 8.5 reference: a GUI for Python <https://web.archive.org/web/20190524140835/https://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html>`_
+   `Tkinter 8.5 reference: a GUI for Python <https://www.tkdocs.com/shipman/>`_
       On-line reference material.
 
    `Tkinter docs from effbot <http://effbot.org/tkinterbook/>`_
@@ -109,9 +109,6 @@
 
 Other modules that provide Tk support include:
 
-:mod:`tkinter.scrolledtext`
-   Text widget with a vertical scroll bar built in.
-
 :mod:`tkinter.colorchooser`
    Dialog to let the user choose a color.
 
@@ -127,6 +124,9 @@
 :mod:`tkinter.messagebox`
    Access to standard Tk dialog boxes.
 
+:mod:`tkinter.scrolledtext`
+   Text widget with a vertical scroll bar built in.
+
 :mod:`tkinter.simpledialog`
    Basic dialogs and convenience functions.
 
@@ -464,12 +464,11 @@
 .. index:: single: packing (widgets)
 
 The packer is one of Tk's geometry-management mechanisms.    Geometry managers
-are used to specify the relative positioning of the positioning of widgets
-within their container - their mutual *master*.  In contrast to the more
-cumbersome *placer* (which is used less commonly, and we do not cover here), the
-packer takes qualitative relationship specification - *above*, *to the left of*,
-*filling*, etc - and works everything out to determine the exact placement
-coordinates for you.
+are used to specify the relative positioning of widgets within their container -
+their mutual *master*.  In contrast to the more cumbersome *placer* (which is
+used less commonly, and we do not cover here), the packer takes qualitative
+relationship specification - *above*, *to the left of*, *filling*, etc - and
+works everything out to determine the exact placement coordinates for you.
 
 The size of any *master* widget is determined by the size of the "slave widgets"
 inside.  The packer is used to control where slave widgets appear inside the
@@ -542,31 +541,35 @@
 
 For example::
 
-   class App(Frame):
-       def __init__(self, master=None):
+   import tkinter as tk
+
+   class App(tk.Frame):
+       def __init__(self, master):
            super().__init__(master)
            self.pack()
 
-           self.entrythingy = Entry()
+           self.entrythingy = tk.Entry()
            self.entrythingy.pack()
 
-           # here is the application variable
-           self.contents = StringVar()
-           # set it to some value
+           # Create the application variable.
+           self.contents = tk.StringVar()
+           # Set it to some value.
            self.contents.set("this is a variable")
-           # tell the entry widget to watch this variable
+           # Tell the entry widget to watch this variable.
            self.entrythingy["textvariable"] = self.contents
 
-           # and here we get a callback when the user hits return.
-           # we will have the program print out the value of the
-           # application variable when the user hits return
+           # Define a callback for when the user hits return.
+           # It prints the current value of the variable.
            self.entrythingy.bind('<Key-Return>',
-                                 self.print_contents)
+                                self.print_contents)
 
        def print_contents(self, event):
-           print("hi. contents of entry is now ---->",
+           print("Hi. The current entry content is:",
                  self.contents.get())
 
+   root = tk.Tk()
+   myapp = App(root)
+   myapp.mainloop()
 
 The Window Manager
 ^^^^^^^^^^^^^^^^^^
@@ -680,9 +683,10 @@
    This is almost always the :meth:`!set` method of some scrollbar widget, but can
    be any widget method that takes a single argument.
 
-wrap:
+wrap
    Must be one of: ``"none"``, ``"char"``, or ``"word"``.
 
+.. _Bindings-and-Events:
 
 Bindings and Events
 ^^^^^^^^^^^^^^^^^^^
diff --git a/Doc/library/tkinter.scrolledtext.rst b/Doc/library/tkinter.scrolledtext.rst
index 138720e..d20365b 100644
--- a/Doc/library/tkinter.scrolledtext.rst
+++ b/Doc/library/tkinter.scrolledtext.rst
@@ -14,8 +14,7 @@
 The :mod:`tkinter.scrolledtext` module provides a class of the same name which
 implements a basic text widget which has a vertical scroll bar configured to do
 the "right thing."  Using the :class:`ScrolledText` class is a lot easier than
-setting up a text widget and scroll bar directly.  The constructor is the same
-as that of the :class:`tkinter.Text` class.
+setting up a text widget and scroll bar directly.
 
 The text widget and scrollbar are packed together in a :class:`Frame`, and the
 methods of the :class:`Grid` and :class:`Pack` geometry managers are acquired
@@ -25,12 +24,14 @@
 Should more specific control be necessary, the following attributes are
 available:
 
-
-.. attribute:: ScrolledText.frame
-
-   The frame which surrounds the text and scroll bar widgets.
+.. class:: ScrolledText(master=None, **kw)
 
 
-.. attribute:: ScrolledText.vbar
+   .. attribute:: frame
 
-   The scroll bar widget.
+      The frame which surrounds the text and scroll bar widgets.
+
+
+   .. attribute:: vbar
+
+      The scroll bar widget.
diff --git a/Doc/library/token.rst b/Doc/library/token.rst
index dab8f0f..7f598cd 100644
--- a/Doc/library/token.rst
+++ b/Doc/library/token.rst
@@ -70,6 +70,7 @@
 
 
 .. data:: TYPE_COMMENT
+   :noindex:
 
    Token value indicating that a type comment was recognized.  Such
    tokens are only produced when :func:`ast.parse()` is invoked with
diff --git a/Doc/library/trace.rst b/Doc/library/trace.rst
index 85fec68..c2732d9 100644
--- a/Doc/library/trace.rst
+++ b/Doc/library/trace.rst
@@ -166,7 +166,7 @@
        environments.  If not defined, *globals* and *locals* default to empty
        dictionaries.
 
-    .. method:: runfunc(func, *args, **kwds)
+    .. method:: runfunc(func, /, *args, **kwds)
 
        Call *func* with the given arguments under control of the :class:`Trace`
        object with the current tracing parameters.
diff --git a/Doc/library/tracemalloc.rst b/Doc/library/tracemalloc.rst
index 000c0ee..20f668c 100644
--- a/Doc/library/tracemalloc.rst
+++ b/Doc/library/tracemalloc.rst
@@ -249,6 +249,47 @@
 
 See :meth:`Snapshot.statistics` for more options.
 
+Record the current and peak size of all traced memory blocks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following code computes two sums like ``0 + 1 + 2 + ...`` inefficiently, by
+creating a list of those numbers. This list consumes a lot of memory
+temporarily. We can use :func:`get_traced_memory` and :func:`reset_peak` to
+observe the small memory usage after the sum is computed as well as the peak
+memory usage during the computations::
+
+  import tracemalloc
+
+  tracemalloc.start()
+
+  # Example code: compute a sum with a large temporary list
+  large_sum = sum(list(range(100000)))
+
+  first_size, first_peak = tracemalloc.get_traced_memory()
+
+  tracemalloc.reset_peak()
+
+  # Example code: compute a sum with a small temporary list
+  small_sum = sum(list(range(1000)))
+
+  second_size, second_peak = tracemalloc.get_traced_memory()
+
+  print(f"{first_size=}, {first_peak=}")
+  print(f"{second_size=}, {second_peak=}")
+
+Output::
+
+  first_size=664, first_peak=3592984
+  second_size=804, second_peak=29704
+
+Using :func:`reset_peak` ensured we could accurately record the peak during the
+computation of ``small_sum``, even though it is much smaller than the overall
+peak size of memory blocks since the :func:`start` call. Without the call to
+:func:`reset_peak`, ``second_peak`` would still be the peak from the
+computation ``large_sum`` (that is, equal to ``first_peak``). In this case,
+both peaks are much higher than the final memory usage, and which suggests we
+could optimise (by removing the unnecessary call to :class:`list`, and writing
+``sum(range(...))``).
 
 API
 ---
@@ -289,6 +330,24 @@
    :mod:`tracemalloc` module as a tuple: ``(current: int, peak: int)``.
 
 
+.. function:: reset_peak()
+
+   Set the peak size of memory blocks traced by the :mod:`tracemalloc` module
+   to the current size.
+
+   Do nothing if the :mod:`tracemalloc` module is not tracing memory
+   allocations.
+
+   This function only modifies the recorded peak size, and does not modify or
+   clear any traces, unlike :func:`clear_traces`. Snapshots taken with
+   :func:`take_snapshot` before a call to :func:`reset_peak` can be
+   meaningfully compared to snapshots taken after the call.
+
+   See also :func:`get_traced_memory`.
+
+   .. versionadded:: 3.9
+
+
 .. function:: get_tracemalloc_memory()
 
    Get the memory usage in bytes of the :mod:`tracemalloc` module used to store
@@ -311,6 +370,9 @@
    frames. By default, a trace of a memory block only stores the most recent
    frame: the limit is ``1``. *nframe* must be greater or equal to ``1``.
 
+   You can still read the original number of total frames that composed the
+   traceback by looking at the :attr:`Traceback.total_nframe` attribute.
+
    Storing more than ``1`` frame is only useful to compute statistics grouped
    by ``'traceback'`` or to compute cumulative statistics: see the
    :meth:`Snapshot.compare_to` and :meth:`Snapshot.statistics` methods.
@@ -657,6 +719,9 @@
 
    When a snapshot is taken, tracebacks of traces are limited to
    :func:`get_traceback_limit` frames. See the :func:`take_snapshot` function.
+   The original number of frames of the traceback is stored in the
+   :attr:`Traceback.total_nframe` attribute. That allows to know if a traceback
+   has been truncated by the traceback limit.
 
    The :attr:`Trace.traceback` attribute is an instance of :class:`Traceback`
    instance.
@@ -664,6 +729,15 @@
    .. versionchanged:: 3.7
       Frames are now sorted from the oldest to the most recent, instead of most recent to oldest.
 
+   .. attribute:: total_nframe
+
+      Total number of frames that composed the traceback before truncation.
+      This attribute can be set to ``None`` if the information is not
+      available.
+
+   .. versionchanged:: 3.9
+      The :attr:`Traceback.total_nframe` attribute was added.
+
    .. method:: format(limit=None, most_recent_first=False)
 
       Format the traceback as a list of lines with newlines. Use the
diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst
index fed8504..d348753 100644
--- a/Doc/library/turtle.rst
+++ b/Doc/library/turtle.rst
@@ -1069,6 +1069,7 @@
 ~~~~~~~~~~~~~~~~~~~~
 
 .. function:: reset()
+   :noindex:
 
    Delete the turtle's drawings from the screen, re-center the turtle and set
    variables to the default values.
@@ -1090,6 +1091,7 @@
 
 
 .. function:: clear()
+   :noindex:
 
    Delete the turtle's drawings from the screen.  Do not move turtle.  State and
    position of the turtle as well as drawings of other turtles are not affected.
@@ -1362,6 +1364,7 @@
 ------------
 
 .. function:: onclick(fun, btn=1, add=None)
+   :noindex:
 
    :param fun: a function with two arguments which will be called with the
                coordinates of the clicked point on the canvas
diff --git a/Doc/library/types.rst b/Doc/library/types.rst
index 3529c2b..0fe3822 100644
--- a/Doc/library/types.rst
+++ b/Doc/library/types.rst
@@ -109,6 +109,11 @@
    The type of user-defined functions and functions created by
    :keyword:`lambda`  expressions.
 
+   .. audit-event:: function.__new__ code types.FunctionType
+
+   The audit event only occurs for direct instantiation of function objects,
+   and is not raised for normal compilation.
+
 
 .. data:: GeneratorType
 
@@ -138,10 +143,11 @@
 
    The type for code objects such as returned by :func:`compile`.
 
-   .. audit-event:: code.__new__ code,filename,name,argcount,posonlyargcount,kwonlyargcount,nlocals,stacksize,flags CodeType
+   .. audit-event:: code.__new__ code,filename,name,argcount,posonlyargcount,kwonlyargcount,nlocals,stacksize,flags types.CodeType
 
    Note that the audited arguments may not match the names or positions
-   required by the initializer.
+   required by the initializer.  The audit event only occurs for direct
+   instantiation of code objects, and is not raised for normal compilation.
 
    .. method:: CodeType.replace(**kwargs)
 
@@ -236,6 +242,25 @@
          Defaults to ``None``. Previously the attribute was optional.
 
 
+.. class:: GenericAlias(t_origin, t_args)
+
+   The type of :ref:`parameterized generics <types-genericalias>` such as
+   ``list[int]``.
+
+   ``t_origin`` should be a non-parameterized generic class, such as ``list``,
+   ``tuple`` or ``dict``.  ``t_args`` should be a :class:`tuple` (possibly of
+   length 1) of types which parameterize ``t_origin``::
+
+      >>> from types import GenericAlias
+
+      >>> list[int] == GenericAlias(list, (int,))
+      True
+      >>> dict[str, int] == GenericAlias(dict, (str, int))
+      True
+
+   .. versionadded:: 3.9
+
+
 .. class:: TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
 
    The type of traceback objects such as found in ``sys.exc_info()[2]``.
@@ -282,6 +307,11 @@
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.9
+
+      Updated to support the new union (``|``) operator from :pep:`584`, which
+      simply delegates to the underlying mapping.
+
    .. describe:: key in proxy
 
       Return ``True`` if the underlying mapping has a key *key*, else
@@ -324,6 +354,12 @@
 
       Return a new view of the underlying mapping's values.
 
+   .. describe:: reversed(proxy)
+
+      Return a reverse iterator over the keys of the underlying mapping.
+
+      .. versionadded:: 3.9
+
 
 Additional Utility Classes and Functions
 ----------------------------------------
@@ -344,12 +380,13 @@
                self.__dict__.update(kwargs)
 
            def __repr__(self):
-               keys = sorted(self.__dict__)
-               items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
+               items = (f"{k}={v!r}" for k, v in self.__dict__.items())
                return "{}({})".format(type(self).__name__, ", ".join(items))
 
            def __eq__(self, other):
-               return self.__dict__ == other.__dict__
+               if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace):
+                  return self.__dict__ == other.__dict__
+               return NotImplemented
 
    ``SimpleNamespace`` may be useful as a replacement for ``class NS: pass``.
    However, for a structured record type use :func:`~collections.namedtuple`
@@ -357,6 +394,9 @@
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.9
+      Attribute order in the repr changed from alphabetical to insertion (like
+      ``dict``).
 
 .. function:: DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)
 
@@ -368,7 +408,7 @@
    class's __getattr__ method; this is done by raising AttributeError.
 
    This allows one to have properties active on an instance, and have virtual
-   attributes on the class with the same name (see Enum for an example).
+   attributes on the class with the same name (see :class:`enum.Enum` for an example).
 
    .. versionadded:: 3.4
 
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index 1467276..af2cafb 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -1,3 +1,4 @@
+========================================
 :mod:`typing` --- Support for type hints
 ========================================
 
@@ -34,13 +35,12 @@
 arguments.
 
 Type aliases
-------------
+============
 
 A type alias is defined by assigning the type to the alias. In this example,
-``Vector`` and ``List[float]`` will be treated as interchangeable synonyms::
+``Vector`` and ``list[float]`` will be treated as interchangeable synonyms::
 
-   from typing import List
-   Vector = List[float]
+   Vector = list[float]
 
    def scale(scalar: float, vector: Vector) -> Vector:
        return [scalar * num for num in vector]
@@ -50,11 +50,11 @@
 
 Type aliases are useful for simplifying complex type signatures. For example::
 
-   from typing import Dict, Tuple, Sequence
+   from collections.abc import Sequence
 
-   ConnectionOptions = Dict[str, str]
-   Address = Tuple[str, int]
-   Server = Tuple[Address, ConnectionOptions]
+   ConnectionOptions = dict[str, str]
+   Address = tuple[str, int]
+   Server = tuple[Address, ConnectionOptions]
 
    def broadcast_message(message: str, servers: Sequence[Server]) -> None:
        ...
@@ -63,7 +63,7 @@
    # being exactly equivalent to this one.
    def broadcast_message(
            message: str,
-           servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> None:
+           servers: Sequence[tuple[tuple[str, int], dict[str, str]]]) -> None:
        ...
 
 Note that ``None`` as a type hint is a special case and is replaced by
@@ -72,7 +72,7 @@
 .. _distinct:
 
 NewType
--------
+=======
 
 Use the :func:`NewType` helper function to create distinct types::
 
@@ -149,14 +149,14 @@
 .. versionadded:: 3.5.2
 
 Callable
---------
+========
 
 Frameworks expecting callback functions of specific signatures might be
 type hinted using ``Callable[[Arg1Type, Arg2Type], ReturnType]``.
 
 For example::
 
-   from typing import Callable
+   from collections.abc import Callable
 
    def feeder(get_next_item: Callable[[], str]) -> None:
        # Body
@@ -172,7 +172,7 @@
 .. _generics:
 
 Generics
---------
+========
 
 Since type information about objects kept in containers cannot be statically
 inferred in a generic way, abstract base classes have been extended to support
@@ -180,7 +180,7 @@
 
 ::
 
-   from typing import Mapping, Sequence
+   from collections.abc import Mapping, Sequence
 
    def notify_by_email(employees: Sequence[Employee],
                        overrides: Mapping[str, str]) -> None: ...
@@ -190,7 +190,8 @@
 
 ::
 
-   from typing import Sequence, TypeVar
+   from collections.abc import Sequence
+   from typing import TypeVar
 
    T = TypeVar('T')      # Declare type variable
 
@@ -199,7 +200,7 @@
 
 
 User-defined generic types
---------------------------
+==========================
 
 A user-defined class can be defined as a generic class.
 
@@ -234,7 +235,7 @@
 The :class:`Generic` base class defines :meth:`__class_getitem__` so that
 ``LoggedVar[t]`` is valid as a type::
 
-   from typing import Iterable
+   from collections.abc import Iterable
 
    def zero_all_vars(vars: Iterable[LoggedVar[int]]) -> None:
        for var in vars:
@@ -265,7 +266,8 @@
 
 You can use multiple inheritance with :class:`Generic`::
 
-   from typing import TypeVar, Generic, Sized
+   from collections.abc import Sized
+   from typing import TypeVar, Generic
 
    T = TypeVar('T')
 
@@ -274,7 +276,8 @@
 
 When inheriting from generic classes, some type variables could be fixed::
 
-    from typing import TypeVar, Mapping
+    from collections.abc import Mapping
+    from typing import TypeVar
 
     T = TypeVar('T')
 
@@ -287,13 +290,14 @@
 :data:`Any` for each position. In the following example, ``MyIterable`` is
 not generic but implicitly inherits from ``Iterable[Any]``::
 
-   from typing import Iterable
+   from collections.abc import Iterable
 
    class MyIterable(Iterable): # Same as Iterable[Any]
 
 User defined generic type aliases are also supported. Examples::
 
-   from typing import TypeVar, Iterable, Tuple, Union
+   from collections.abc import Iterable
+   from typing import TypeVar, Union
    S = TypeVar('S')
    Response = Union[Iterable[S], int]
 
@@ -302,9 +306,9 @@
        ...
 
    T = TypeVar('T', int, float, complex)
-   Vec = Iterable[Tuple[T, T]]
+   Vec = Iterable[tuple[T, T]]
 
-   def inproduct(v: Vec[T]) -> T: # Same as Iterable[Tuple[T, T]]
+   def inproduct(v: Vec[T]) -> T: # Same as Iterable[tuple[T, T]]
        return sum(x*y for x, y in v)
 
 .. versionchanged:: 3.7
@@ -317,14 +321,14 @@
 
 
 The :data:`Any` type
---------------------
+====================
 
 A special kind of type is :data:`Any`. A static type checker will treat
 every type as being compatible with :data:`Any` and :data:`Any` as being
 compatible with every type.
 
 This means that it is possible to perform any operation or method call on a
-value of type on :data:`Any` and assign it to any variable::
+value of type :data:`Any` and assign it to any variable::
 
    from typing import Any
 
@@ -395,19 +399,19 @@
 
 
 Nominal vs structural subtyping
--------------------------------
+===============================
 
 Initially :pep:`484` defined Python static type system as using
 *nominal subtyping*. This means that a class ``A`` is allowed where
 a class ``B`` is expected if and only if ``A`` is a subclass of ``B``.
 
 This requirement previously also applied to abstract base classes, such as
-:class:`Iterable`. The problem with this approach is that a class had
+:class:`~collections.abc.Iterable`. The problem with this approach is that a class had
 to be explicitly marked to support them, which is unpythonic and unlike
 what one would normally do in idiomatic dynamically typed Python code.
-For example, this conforms to the :pep:`484`::
+For example, this conforms to :pep:`484`::
 
-   from typing import Sized, Iterable, Iterator
+   from collections.abc import Sized, Iterable, Iterator
 
    class Bucket(Sized, Iterable[int]):
        ...
@@ -420,7 +424,7 @@
 and ``Iterable[int]`` by static type checkers. This is known as
 *structural subtyping* (or static duck-typing)::
 
-   from typing import Iterator, Iterable
+   from collections.abc import Iterator, Iterable
 
    class Bucket:  # Note: no base classes
        ...
@@ -434,106 +438,154 @@
 can define new custom protocols to fully enjoy structural subtyping
 (see examples below).
 
+Module contents
+===============
 
-Classes, functions, and decorators
-----------------------------------
+The module defines the following classes, functions and decorators.
 
-The module defines the following classes, functions and decorators:
+.. note::
 
-.. class:: TypeVar
+   This module defines several types that are subclasses of pre-existing
+   standard library classes which also extend :class:`Generic`
+   to support type variables inside ``[]``.
+   These types became redundant in Python 3.9 when the
+   corresponding pre-existing classes were enhanced to support ``[]``.
 
-    Type variable.
+   The redundant types are deprecated as of Python 3.9 but no
+   deprecation warnings will be issued by the interpreter.
+   It is expected that type checkers will flag the deprecated types
+   when the checked program targets Python 3.9 or newer.
 
-    Usage::
+   The deprecated types will be removed from the :mod:`typing` module
+   in the first Python version released 5 years after the release of Python 3.9.0.
+   See details in :pep:`585`—*Type Hinting Generics In Standard Collections*.
 
-      T = TypeVar('T')  # Can be anything
-      A = TypeVar('A', str, bytes)  # Must be str or bytes
 
-    Type variables exist primarily for the benefit of static type
-    checkers.  They serve as the parameters for generic types as well
-    as for generic function definitions.  See class Generic for more
-    information on generic types.  Generic functions work as follows::
+Special typing primitives
+-------------------------
 
-       def repeat(x: T, n: int) -> Sequence[T]:
-           """Return a list containing n references to x."""
-           return [x]*n
+Special types
+"""""""""""""
 
-       def longest(x: A, y: A) -> A:
-           """Return the longest of two strings."""
-           return x if len(x) >= len(y) else y
+These can be used as types in annotations and do not support ``[]``.
 
-    The latter example's signature is essentially the overloading
-    of ``(str, str) -> str`` and ``(bytes, bytes) -> bytes``.  Also note
-    that if the arguments are instances of some subclass of :class:`str`,
-    the return type is still plain :class:`str`.
+.. data:: Any
 
-    At runtime, ``isinstance(x, T)`` will raise :exc:`TypeError`.  In general,
-    :func:`isinstance` and :func:`issubclass` should not be used with types.
+   Special type indicating an unconstrained type.
 
-    Type variables may be marked covariant or contravariant by passing
-    ``covariant=True`` or ``contravariant=True``.  See :pep:`484` for more
-    details.  By default type variables are invariant.  Alternatively,
-    a type variable may specify an upper bound using ``bound=<type>``.
-    This means that an actual type substituted (explicitly or implicitly)
-    for the type variable must be a subclass of the boundary type,
-    see :pep:`484`.
+   * Every type is compatible with :data:`Any`.
+   * :data:`Any` is compatible with every type.
 
-.. class:: Generic
+.. data:: NoReturn
 
-   Abstract base class for generic types.
+   Special type indicating that a function never returns.
+   For example::
 
-   A generic type is typically declared by inheriting from an
-   instantiation of this class with one or more type variables.
-   For example, a generic mapping type might be defined as::
+      from typing import NoReturn
 
-      class Mapping(Generic[KT, VT]):
-          def __getitem__(self, key: KT) -> VT:
-              ...
-              # Etc.
+      def stop() -> NoReturn:
+          raise RuntimeError('no way')
 
-   This class can then be used as follows::
+   .. versionadded:: 3.5.4
+   .. versionadded:: 3.6.2
 
-      X = TypeVar('X')
-      Y = TypeVar('Y')
+Special forms
+"""""""""""""
 
-      def lookup_name(mapping: Mapping[X, Y], key: X, default: Y) -> Y:
-          try:
-              return mapping[key]
-          except KeyError:
-              return default
+These can be used as types in annotations using ``[]``, each having a unique syntax.
 
-.. class:: Protocol(Generic)
+.. data:: Tuple
 
-   Base class for protocol classes. Protocol classes are defined like this::
+   Tuple type; ``Tuple[X, Y]`` is the type of a tuple of two items
+   with the first item of type X and the second of type Y. The type of
+   the empty tuple can be written as ``Tuple[()]``.
 
-      class Proto(Protocol):
-          def meth(self) -> int:
-              ...
+   Example: ``Tuple[T1, T2]`` is a tuple of two elements corresponding
+   to type variables T1 and T2.  ``Tuple[int, float, str]`` is a tuple
+   of an int, a float and a string.
 
-   Such classes are primarily used with static type checkers that recognize
-   structural subtyping (static duck-typing), for example::
+   To specify a variable-length tuple of homogeneous type,
+   use literal ellipsis, e.g. ``Tuple[int, ...]``. A plain :data:`Tuple`
+   is equivalent to ``Tuple[Any, ...]``, and in turn to :class:`tuple`.
 
-      class C:
-          def meth(self) -> int:
-              return 0
+   .. deprecated:: 3.9
+      :class:`builtins.tuple <tuple>` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
 
-      def func(x: Proto) -> int:
-          return x.meth()
+.. data:: Union
 
-      func(C())  # Passes static type check
+   Union type; ``Union[X, Y]`` means either X or Y.
 
-   See :pep:`544` for details. Protocol classes decorated with
-   :func:`runtime_checkable` (described later) act as simple-minded runtime
-   protocols that check only the presence of given attributes, ignoring their
-   type signatures.
+   To define a union, use e.g. ``Union[int, str]``.  Details:
 
-   Protocol classes can be generic, for example::
+   * The arguments must be types and there must be at least one.
 
-      class GenProto(Protocol[T]):
-          def meth(self) -> T:
-              ...
+   * Unions of unions are flattened, e.g.::
 
-   .. versionadded:: 3.8
+       Union[Union[int, str], float] == Union[int, str, float]
+
+   * Unions of a single argument vanish, e.g.::
+
+       Union[int] == int  # The constructor actually returns int
+
+   * Redundant arguments are skipped, e.g.::
+
+       Union[int, str, int] == Union[int, str]
+
+   * When comparing unions, the argument order is ignored, e.g.::
+
+       Union[int, str] == Union[str, int]
+
+   * You cannot subclass or instantiate a union.
+
+   * You cannot write ``Union[X][Y]``.
+
+   * You can use ``Optional[X]`` as a shorthand for ``Union[X, None]``.
+
+   .. versionchanged:: 3.7
+      Don't remove explicit subclasses from unions at runtime.
+
+.. data:: Optional
+
+   Optional type.
+
+   ``Optional[X]`` is equivalent to ``Union[X, None]``.
+
+   Note that this is not the same concept as an optional argument,
+   which is one that has a default.  An optional argument with a
+   default does not require the ``Optional`` qualifier on its type
+   annotation just because it is optional. For example::
+
+      def foo(arg: int = 0) -> None:
+          ...
+
+   On the other hand, if an explicit value of ``None`` is allowed, the
+   use of ``Optional`` is appropriate, whether the argument is optional
+   or not. For example::
+
+      def foo(arg: Optional[int] = None) -> None:
+          ...
+
+.. data:: Callable
+
+   Callable type; ``Callable[[int], str]`` is a function of (int) -> str.
+
+   The subscription syntax must always be used with exactly two
+   values: the argument list and the return type.  The argument list
+   must be a list of types or an ellipsis; the return type must be
+   a single type.
+
+   There is no syntax to indicate optional or keyword arguments;
+   such function types are rarely used as callback types.
+   ``Callable[..., ReturnType]`` (literal ellipsis) can be used to
+   type hint a callable taking any number of arguments and returning
+   ``ReturnType``.  A plain :data:`Callable` is equivalent to
+   ``Callable[..., Any]``, and in turn to
+   :class:`collections.abc.Callable`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Callable` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
 
 .. class:: Type(Generic[CT_co])
 
@@ -570,343 +622,318 @@
    :ref:`type variables <generics>`, and unions of any of these types.
    For example::
 
-      def new_non_team_user(user_class: Type[Union[BaseUser, ProUser]]): ...
+      def new_non_team_user(user_class: Type[Union[BasicUser, ProUser]]): ...
 
    ``Type[Any]`` is equivalent to ``Type`` which in turn is equivalent
    to ``type``, which is the root of Python's metaclass hierarchy.
 
    .. versionadded:: 3.5.2
 
-.. class:: Iterable(Generic[T_co])
+   .. deprecated:: 3.9
+      :class:`builtins.type <type>` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
 
-    A generic version of :class:`collections.abc.Iterable`.
+.. data:: Literal
 
-.. class:: Iterator(Iterable[T_co])
+   A type that can be used to indicate to type checkers that the
+   corresponding variable or function parameter has a value equivalent to
+   the provided literal (or one of several literals). For example::
 
-    A generic version of :class:`collections.abc.Iterator`.
+      def validate_simple(data: Any) -> Literal[True]:  # always returns True
+          ...
 
-.. class:: Reversible(Iterable[T_co])
+      MODE = Literal['r', 'rb', 'w', 'wb']
+      def open_helper(file: str, mode: MODE) -> str:
+          ...
 
-    A generic version of :class:`collections.abc.Reversible`.
+      open_helper('/some/path', 'r')  # Passes type check
+      open_helper('/other/path', 'typo')  # Error in type checker
 
-.. class:: SupportsInt
+   ``Literal[...]`` cannot be subclassed. At runtime, an arbitrary value
+   is allowed as type argument to ``Literal[...]``, but type checkers may
+   impose restrictions. See :pep:`586` for more details about literal types.
 
-    An ABC with one abstract method ``__int__``.
+   .. versionadded:: 3.8
 
-.. class:: SupportsFloat
+   .. versionchanged:: 3.9.1
+      ``Literal`` now de-duplicates parameters.  Equality comparison of
+      ``Literal`` objects are no longer order dependent. ``Literal`` objects
+      will now raise a :exc:`TypeError` exception during equality comparisons
+      if one of their parameters are not :term:`immutable`.
 
-    An ABC with one abstract method ``__float__``.
+.. data:: ClassVar
 
-.. class:: SupportsComplex
+   Special type construct to mark class variables.
 
-    An ABC with one abstract method ``__complex__``.
+   As introduced in :pep:`526`, a variable annotation wrapped in ClassVar
+   indicates that a given attribute is intended to be used as a class variable
+   and should not be set on instances of that class. Usage::
 
-.. class:: SupportsBytes
+      class Starship:
+          stats: ClassVar[dict[str, int]] = {} # class variable
+          damage: int = 10                     # instance variable
 
-    An ABC with one abstract method ``__bytes__``.
+   :data:`ClassVar` accepts only types and cannot be further subscribed.
 
-.. class:: SupportsIndex
+   :data:`ClassVar` is not a class itself, and should not
+   be used with :func:`isinstance` or :func:`issubclass`.
+   :data:`ClassVar` does not change Python runtime behavior, but
+   it can be used by third-party type checkers. For example, a type checker
+   might flag the following code as an error::
 
-    An ABC with one abstract method ``__index__``.
-
-    .. versionadded:: 3.8
-
-.. class:: SupportsAbs
-
-    An ABC with one abstract method ``__abs__`` that is covariant
-    in its return type.
-
-.. class:: SupportsRound
-
-    An ABC with one abstract method ``__round__``
-    that is covariant in its return type.
-
-.. class:: Container(Generic[T_co])
-
-    A generic version of :class:`collections.abc.Container`.
-
-.. class:: Hashable
-
-   An alias to :class:`collections.abc.Hashable`
-
-.. class:: Sized
-
-   An alias to :class:`collections.abc.Sized`
-
-.. class:: Collection(Sized, Iterable[T_co], Container[T_co])
-
-   A generic version of :class:`collections.abc.Collection`
-
-   .. versionadded:: 3.6.0
-
-.. class:: AbstractSet(Sized, Collection[T_co])
-
-    A generic version of :class:`collections.abc.Set`.
-
-.. class:: MutableSet(AbstractSet[T])
-
-    A generic version of :class:`collections.abc.MutableSet`.
-
-.. class:: Mapping(Sized, Collection[KT], Generic[VT_co])
-
-    A generic version of :class:`collections.abc.Mapping`.
-    This type can be used as follows::
-
-      def get_position_in_index(word_list: Mapping[str, int], word: str) -> int:
-          return word_list[word]
-
-.. class:: MutableMapping(Mapping[KT, VT])
-
-    A generic version of :class:`collections.abc.MutableMapping`.
-
-.. class:: Sequence(Reversible[T_co], Collection[T_co])
-
-    A generic version of :class:`collections.abc.Sequence`.
-
-.. class:: MutableSequence(Sequence[T])
-
-   A generic version of :class:`collections.abc.MutableSequence`.
-
-.. class:: ByteString(Sequence[int])
-
-   A generic version of :class:`collections.abc.ByteString`.
-
-   This type represents the types :class:`bytes`, :class:`bytearray`,
-   and :class:`memoryview` of byte sequences.
-
-   As a shorthand for this type, :class:`bytes` can be used to
-   annotate arguments of any of the types mentioned above.
-
-.. class:: Deque(deque, MutableSequence[T])
-
-   A generic version of :class:`collections.deque`.
-
-   .. versionadded:: 3.5.4
-   .. versionadded:: 3.6.1
-
-.. class:: List(list, MutableSequence[T])
-
-   Generic version of :class:`list`.
-   Useful for annotating return types. To annotate arguments it is preferred
-   to use an abstract collection type such as :class:`Sequence` or
-   :class:`Iterable`.
-
-   This type may be used as follows::
-
-      T = TypeVar('T', int, float)
-
-      def vec2(x: T, y: T) -> List[T]:
-          return [x, y]
-
-      def keep_positives(vector: Sequence[T]) -> List[T]:
-          return [item for item in vector if item > 0]
-
-.. class:: Set(set, MutableSet[T])
-
-   A generic version of :class:`builtins.set <set>`.
-   Useful for annotating return types. To annotate arguments it is preferred
-   to use an abstract collection type such as :class:`AbstractSet`.
-
-.. class:: FrozenSet(frozenset, AbstractSet[T_co])
-
-   A generic version of :class:`builtins.frozenset <frozenset>`.
-
-.. class:: MappingView(Sized, Iterable[T_co])
-
-   A generic version of :class:`collections.abc.MappingView`.
-
-.. class:: KeysView(MappingView[KT_co], AbstractSet[KT_co])
-
-   A generic version of :class:`collections.abc.KeysView`.
-
-.. class:: ItemsView(MappingView, Generic[KT_co, VT_co])
-
-   A generic version of :class:`collections.abc.ItemsView`.
-
-.. class:: ValuesView(MappingView[VT_co])
-
-   A generic version of :class:`collections.abc.ValuesView`.
-
-.. class:: Awaitable(Generic[T_co])
-
-   A generic version of :class:`collections.abc.Awaitable`.
-
-   .. versionadded:: 3.5.2
-
-.. class:: Coroutine(Awaitable[V_co], Generic[T_co T_contra, V_co])
-
-   A generic version of :class:`collections.abc.Coroutine`.
-   The variance and order of type variables
-   correspond to those of :class:`Generator`, for example::
-
-      from typing import List, Coroutine
-      c = None # type: Coroutine[List[str], str, int]
-      ...
-      x = c.send('hi') # type: List[str]
-      async def bar() -> None:
-          x = await c # type: int
+      enterprise_d = Starship(3000)
+      enterprise_d.stats = {} # Error, setting class variable on instance
+      Starship.stats = {}     # This is OK
 
    .. versionadded:: 3.5.3
 
-.. class:: AsyncIterable(Generic[T_co])
+.. data:: Final
 
-   A generic version of :class:`collections.abc.AsyncIterable`.
+   A special typing construct to indicate to type checkers that a name
+   cannot be re-assigned or overridden in a subclass. For example::
 
-   .. versionadded:: 3.5.2
+      MAX_SIZE: Final = 9000
+      MAX_SIZE += 1  # Error reported by type checker
 
-.. class:: AsyncIterator(AsyncIterable[T_co])
+      class Connection:
+          TIMEOUT: Final[int] = 10
 
-   A generic version of :class:`collections.abc.AsyncIterator`.
+      class FastConnector(Connection):
+          TIMEOUT = 1  # Error reported by type checker
 
-   .. versionadded:: 3.5.2
+   There is no runtime checking of these properties. See :pep:`591` for
+   more details.
 
-.. class:: ContextManager(Generic[T_co])
+   .. versionadded:: 3.8
 
-   A generic version of :class:`contextlib.AbstractContextManager`.
+.. data:: Annotated
 
-   .. versionadded:: 3.5.4
-   .. versionadded:: 3.6.0
+   A type, introduced in :pep:`593` (``Flexible function and variable
+   annotations``), to decorate existing types with context-specific metadata
+   (possibly multiple pieces of it, as ``Annotated`` is variadic).
+   Specifically, a type ``T`` can be annotated with metadata ``x`` via the
+   typehint ``Annotated[T, x]``. This metadata can be used for either static
+   analysis or at runtime. If a library (or tool) encounters a typehint
+   ``Annotated[T, x]`` and has no special logic for metadata ``x``, it
+   should ignore it and simply treat the type as ``T``. Unlike the
+   ``no_type_check`` functionality that currently exists in the ``typing``
+   module which completely disables typechecking annotations on a function
+   or a class, the ``Annotated`` type allows for both static typechecking
+   of ``T`` (e.g., via mypy or Pyre, which can safely ignore ``x``)
+   together with runtime access to ``x`` within a specific application.
 
-.. class:: AsyncContextManager(Generic[T_co])
+   Ultimately, the responsibility of how to interpret the annotations (if
+   at all) is the responsibility of the tool or library encountering the
+   ``Annotated`` type. A tool or library encountering an ``Annotated`` type
+   can scan through the annotations to determine if they are of interest
+   (e.g., using ``isinstance()``).
 
-   A generic version of :class:`contextlib.AbstractAsyncContextManager`.
+   When a tool or a library does not support annotations or encounters an
+   unknown annotation it should just ignore it and treat annotated type as
+   the underlying type.
 
-   .. versionadded:: 3.5.4
-   .. versionadded:: 3.6.2
+   It's up to the tool consuming the annotations to decide whether the
+   client is allowed to have several annotations on one type and how to
+   merge those annotations.
 
-.. class:: Dict(dict, MutableMapping[KT, VT])
+   Since the ``Annotated`` type allows you to put several annotations of
+   the same (or different) type(s) on any node, the tools or libraries
+   consuming those annotations are in charge of dealing with potential
+   duplicates. For example, if you are doing value range analysis you might
+   allow this::
 
-   A generic version of :class:`dict`.
-   Useful for annotating return types. To annotate arguments it is preferred
-   to use an abstract collection type such as :class:`Mapping`.
+       T1 = Annotated[int, ValueRange(-10, 5)]
+       T2 = Annotated[T1, ValueRange(-20, 3)]
 
-   This type can be used as follows::
+   Passing ``include_extras=True`` to :func:`get_type_hints` lets one
+   access the extra annotations at runtime.
 
-      def count_words(text: str) -> Dict[str, int]:
-          ...
+   The details of the syntax:
 
-.. class:: DefaultDict(collections.defaultdict, MutableMapping[KT, VT])
+   * The first argument to ``Annotated`` must be a valid type
 
-   A generic version of :class:`collections.defaultdict`.
+   * Multiple type annotations are supported (``Annotated`` supports variadic
+     arguments)::
 
-   .. versionadded:: 3.5.2
+       Annotated[int, ValueRange(3, 10), ctype("char")]
 
-.. class:: OrderedDict(collections.OrderedDict, MutableMapping[KT, VT])
+   * ``Annotated`` must be called with at least two arguments (
+     ``Annotated[int]`` is not valid)
 
-   A generic version of :class:`collections.OrderedDict`.
+   * The order of the annotations is preserved and matters for equality
+     checks::
 
-   .. versionadded:: 3.7.2
+       Annotated[int, ValueRange(3, 10), ctype("char")] != Annotated[
+           int, ctype("char"), ValueRange(3, 10)
+       ]
 
-.. class:: Counter(collections.Counter, Dict[T, int])
+   * Nested ``Annotated`` types are flattened, with metadata ordered
+     starting with the innermost annotation::
 
-   A generic version of :class:`collections.Counter`.
+       Annotated[Annotated[int, ValueRange(3, 10)], ctype("char")] == Annotated[
+           int, ValueRange(3, 10), ctype("char")
+       ]
 
-   .. versionadded:: 3.5.4
-   .. versionadded:: 3.6.1
+   * Duplicated annotations are not removed::
 
-.. class:: ChainMap(collections.ChainMap, MutableMapping[KT, VT])
+       Annotated[int, ValueRange(3, 10)] != Annotated[
+           int, ValueRange(3, 10), ValueRange(3, 10)
+       ]
 
-   A generic version of :class:`collections.ChainMap`.
+   * ``Annotated`` can be used with nested and generic aliases::
 
-   .. versionadded:: 3.5.4
-   .. versionadded:: 3.6.1
+       T = TypeVar('T')
+       Vec = Annotated[list[tuple[T, T]], MaxLen(10)]
+       V = Vec[int]
 
-.. class:: Generator(Iterator[T_co], Generic[T_co, T_contra, V_co])
+       V == Annotated[list[tuple[int, int]], MaxLen(10)]
 
-   A generator can be annotated by the generic type
-   ``Generator[YieldType, SendType, ReturnType]``. For example::
+   .. versionadded:: 3.9
 
-      def echo_round() -> Generator[int, float, str]:
-          sent = yield 0
-          while sent >= 0:
-              sent = yield round(sent)
-          return 'Done'
+Building generic types
+""""""""""""""""""""""
 
-   Note that unlike many other generics in the typing module, the ``SendType``
-   of :class:`Generator` behaves contravariantly, not covariantly or
-   invariantly.
+These are not used in annotations. They are building blocks for creating generic types.
 
-   If your generator will only yield values, set the ``SendType`` and
-   ``ReturnType`` to ``None``::
+.. class:: Generic
 
-      def infinite_stream(start: int) -> Generator[int, None, None]:
-          while True:
-              yield start
-              start += 1
+   Abstract base class for generic types.
 
-   Alternatively, annotate your generator as having a return type of
-   either ``Iterable[YieldType]`` or ``Iterator[YieldType]``::
+   A generic type is typically declared by inheriting from an
+   instantiation of this class with one or more type variables.
+   For example, a generic mapping type might be defined as::
 
-      def infinite_stream(start: int) -> Iterator[int]:
-          while True:
-              yield start
-              start += 1
+      class Mapping(Generic[KT, VT]):
+          def __getitem__(self, key: KT) -> VT:
+              ...
+              # Etc.
 
-.. class:: AsyncGenerator(AsyncIterator[T_co], Generic[T_co, T_contra])
+   This class can then be used as follows::
 
-   An async generator can be annotated by the generic type
-   ``AsyncGenerator[YieldType, SendType]``. For example::
+      X = TypeVar('X')
+      Y = TypeVar('Y')
 
-      async def echo_round() -> AsyncGenerator[int, float]:
-          sent = yield 0
-          while sent >= 0.0:
-              rounded = await round(sent)
-              sent = yield rounded
+      def lookup_name(mapping: Mapping[X, Y], key: X, default: Y) -> Y:
+          try:
+              return mapping[key]
+          except KeyError:
+              return default
 
-   Unlike normal generators, async generators cannot return a value, so there
-   is no ``ReturnType`` type parameter. As with :class:`Generator`, the
-   ``SendType`` behaves contravariantly.
+.. class:: TypeVar
 
-   If your generator will only yield values, set the ``SendType`` to
-   ``None``::
+    Type variable.
 
-      async def infinite_stream(start: int) -> AsyncGenerator[int, None]:
-          while True:
-              yield start
-              start = await increment(start)
+    Usage::
 
-   Alternatively, annotate your generator as having a return type of
-   either ``AsyncIterable[YieldType]`` or ``AsyncIterator[YieldType]``::
+      T = TypeVar('T')  # Can be anything
+      A = TypeVar('A', str, bytes)  # Must be str or bytes
 
-      async def infinite_stream(start: int) -> AsyncIterator[int]:
-          while True:
-              yield start
-              start = await increment(start)
+    Type variables exist primarily for the benefit of static type
+    checkers.  They serve as the parameters for generic types as well
+    as for generic function definitions.  See :class:`Generic` for more
+    information on generic types.  Generic functions work as follows::
 
-   .. versionadded:: 3.6.1
+       def repeat(x: T, n: int) -> Sequence[T]:
+           """Return a list containing n references to x."""
+           return [x]*n
 
-.. class:: Text
+       def longest(x: A, y: A) -> A:
+           """Return the longest of two strings."""
+           return x if len(x) >= len(y) else y
 
-   ``Text`` is an alias for ``str``. It is provided to supply a forward
-   compatible path for Python 2 code: in Python 2, ``Text`` is an alias for
-   ``unicode``.
+    The latter example's signature is essentially the overloading
+    of ``(str, str) -> str`` and ``(bytes, bytes) -> bytes``.  Also note
+    that if the arguments are instances of some subclass of :class:`str`,
+    the return type is still plain :class:`str`.
 
-   Use ``Text`` to indicate that a value must contain a unicode string in
-   a manner that is compatible with both Python 2 and Python 3::
+    At runtime, ``isinstance(x, T)`` will raise :exc:`TypeError`.  In general,
+    :func:`isinstance` and :func:`issubclass` should not be used with types.
 
-       def add_unicode_checkmark(text: Text) -> Text:
-           return text + u' \u2713'
+    Type variables may be marked covariant or contravariant by passing
+    ``covariant=True`` or ``contravariant=True``.  See :pep:`484` for more
+    details.  By default type variables are invariant.  Alternatively,
+    a type variable may specify an upper bound using ``bound=<type>``.
+    This means that an actual type substituted (explicitly or implicitly)
+    for the type variable must be a subclass of the boundary type,
+    see :pep:`484`.
 
-   .. versionadded:: 3.5.2
+.. data:: AnyStr
 
-.. class:: IO
-           TextIO
-           BinaryIO
+   ``AnyStr`` is a type variable defined as
+   ``AnyStr = TypeVar('AnyStr', str, bytes)``.
 
-   Generic type ``IO[AnyStr]`` and its subclasses ``TextIO(IO[str])``
-   and ``BinaryIO(IO[bytes])``
-   represent the types of I/O streams such as returned by
-   :func:`open`.
+   It is meant to be used for functions that may accept any kind of string
+   without allowing different kinds of strings to mix. For example::
 
-.. class:: Pattern
-           Match
+      def concat(a: AnyStr, b: AnyStr) -> AnyStr:
+          return a + b
 
-   These type aliases
-   correspond to the return types from :func:`re.compile` and
-   :func:`re.match`.  These types (and the corresponding functions)
-   are generic in ``AnyStr`` and can be made specific by writing
-   ``Pattern[str]``, ``Pattern[bytes]``, ``Match[str]``, or
-   ``Match[bytes]``.
+      concat(u"foo", u"bar")  # Ok, output has type 'unicode'
+      concat(b"foo", b"bar")  # Ok, output has type 'bytes'
+      concat(u"foo", b"bar")  # Error, cannot mix unicode and bytes
+
+.. class:: Protocol(Generic)
+
+   Base class for protocol classes. Protocol classes are defined like this::
+
+      class Proto(Protocol):
+          def meth(self) -> int:
+              ...
+
+   Such classes are primarily used with static type checkers that recognize
+   structural subtyping (static duck-typing), for example::
+
+      class C:
+          def meth(self) -> int:
+              return 0
+
+      def func(x: Proto) -> int:
+          return x.meth()
+
+      func(C())  # Passes static type check
+
+   See :pep:`544` for details. Protocol classes decorated with
+   :func:`runtime_checkable` (described later) act as simple-minded runtime
+   protocols that check only the presence of given attributes, ignoring their
+   type signatures.
+
+   Protocol classes can be generic, for example::
+
+      class GenProto(Protocol[T]):
+          def meth(self) -> T:
+              ...
+
+   .. versionadded:: 3.8
+
+.. decorator:: runtime_checkable
+
+   Mark a protocol class as a runtime protocol.
+
+   Such a protocol can be used with :func:`isinstance` and :func:`issubclass`.
+   This raises :exc:`TypeError` when applied to a non-protocol class.  This
+   allows a simple-minded structural check, very similar to "one trick ponies"
+   in :mod:`collections.abc` such as :class:`~collections.abc.Iterable`.  For example::
+
+      @runtime_checkable
+      class Closable(Protocol):
+          def close(self): ...
+
+      assert isinstance(open('/some/file'), Closable)
+
+   .. note::
+
+        :func:`runtime_checkable` will check only the presence of the required methods,
+        not their type signatures! For example, :class:`builtins.complex <complex>`
+        implements :func:`__float__`, therefore it passes an :func:`issubclass` check
+        against :class:`SupportsFloat`. However, the ``complex.__float__`` method
+        exists only to raise a :class:`TypeError` with a more informative message.
+
+   .. versionadded:: 3.8
+
+Other special directives
+""""""""""""""""""""""""
+
+These are not used in annotations. They are building blocks for declaring types.
 
 .. class:: NamedTuple
 
@@ -959,20 +986,31 @@
    .. versionchanged:: 3.6.1
       Added support for default values, methods, and docstrings.
 
-   .. deprecated-removed:: 3.8 3.9
-      Deprecated the ``_field_types`` attribute in favor of the more
-      standard ``__annotations__`` attribute which has the same information.
-
    .. versionchanged:: 3.8
       The ``_field_types`` and ``__annotations__`` attributes are
       now regular dictionaries instead of instances of ``OrderedDict``.
 
+   .. versionchanged:: 3.9
+      Removed the ``_field_types`` attribute in favor of the more
+      standard ``__annotations__`` attribute which has the same information.
+
+.. function:: NewType(name, tp)
+
+   A helper function to indicate a distinct type to a typechecker,
+   see :ref:`distinct`. At runtime it returns a function that returns
+   its argument. Usage::
+
+      UserId = NewType('UserId', int)
+      first_user = UserId(1)
+
+   .. versionadded:: 3.5.2
+
 .. class:: TypedDict(dict)
 
-   A simple typed namespace. At runtime it is equivalent to
-   a plain :class:`dict`.
+   Special construct to add type hints to a dictionary.
+   At runtime it is a plain :class:`dict`.
 
-   ``TypedDict`` creates a dictionary type that expects all of its
+   ``TypedDict`` declares a dictionary type that expects all of its
    instances to have a certain set of keys, where each key is
    associated with a value of a consistent type. This expectation
    is not checked at runtime but is only enforced by type checkers.
@@ -1013,24 +1051,511 @@
 
    .. versionadded:: 3.8
 
-.. class:: ForwardRef
+Generic concrete collections
+----------------------------
 
-   A class used for internal typing representation of string forward references.
-   For example, ``List["SomeClass"]`` is implicitly transformed into
-   ``List[ForwardRef("SomeClass")]``.  This class should not be instantiated by
-   a user, but may be used by introspection tools.
+Corresponding to built-in types
+"""""""""""""""""""""""""""""""
 
-.. function:: NewType(name, tp)
+.. class:: Dict(dict, MutableMapping[KT, VT])
 
-   A helper function to indicate a distinct type to a typechecker,
-   see :ref:`distinct`. At runtime it returns a function that returns
-   its argument. Usage::
+   A generic version of :class:`dict`.
+   Useful for annotating return types. To annotate arguments it is preferred
+   to use an abstract collection type such as :class:`Mapping`.
 
-      UserId = NewType('UserId', int)
-      first_user = UserId(1)
+   This type can be used as follows::
+
+      def count_words(text: str) -> Dict[str, int]:
+          ...
+
+   .. deprecated:: 3.9
+      :class:`builtins.dict <dict>` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: List(list, MutableSequence[T])
+
+   Generic version of :class:`list`.
+   Useful for annotating return types. To annotate arguments it is preferred
+   to use an abstract collection type such as :class:`Sequence` or
+   :class:`Iterable`.
+
+   This type may be used as follows::
+
+      T = TypeVar('T', int, float)
+
+      def vec2(x: T, y: T) -> List[T]:
+          return [x, y]
+
+      def keep_positives(vector: Sequence[T]) -> List[T]:
+          return [item for item in vector if item > 0]
+
+   .. deprecated:: 3.9
+      :class:`builtins.list <list>` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: Set(set, MutableSet[T])
+
+   A generic version of :class:`builtins.set <set>`.
+   Useful for annotating return types. To annotate arguments it is preferred
+   to use an abstract collection type such as :class:`AbstractSet`.
+
+   .. deprecated:: 3.9
+      :class:`builtins.set <set>` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: FrozenSet(frozenset, AbstractSet[T_co])
+
+   A generic version of :class:`builtins.frozenset <frozenset>`.
+
+   .. deprecated:: 3.9
+      :class:`builtins.frozenset <frozenset>` now supports ``[]``. See
+      :pep:`585` and :ref:`types-genericalias`.
+
+.. note:: :data:`Tuple` is a special form.
+
+Corresponding to types in :mod:`collections`
+""""""""""""""""""""""""""""""""""""""""""""
+
+.. class:: DefaultDict(collections.defaultdict, MutableMapping[KT, VT])
+
+   A generic version of :class:`collections.defaultdict`.
 
    .. versionadded:: 3.5.2
 
+   .. deprecated:: 3.9
+      :class:`collections.defaultdict` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: OrderedDict(collections.OrderedDict, MutableMapping[KT, VT])
+
+   A generic version of :class:`collections.OrderedDict`.
+
+   .. versionadded:: 3.7.2
+
+   .. deprecated:: 3.9
+      :class:`collections.OrderedDict` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: ChainMap(collections.ChainMap, MutableMapping[KT, VT])
+
+   A generic version of :class:`collections.ChainMap`.
+
+   .. versionadded:: 3.5.4
+   .. versionadded:: 3.6.1
+
+   .. deprecated:: 3.9
+      :class:`collections.ChainMap` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: Counter(collections.Counter, Dict[T, int])
+
+   A generic version of :class:`collections.Counter`.
+
+   .. versionadded:: 3.5.4
+   .. versionadded:: 3.6.1
+
+   .. deprecated:: 3.9
+      :class:`collections.Counter` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: Deque(deque, MutableSequence[T])
+
+   A generic version of :class:`collections.deque`.
+
+   .. versionadded:: 3.5.4
+   .. versionadded:: 3.6.1
+
+   .. deprecated:: 3.9
+      :class:`collections.deque` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+Other concrete types
+""""""""""""""""""""
+
+.. class:: IO
+           TextIO
+           BinaryIO
+
+   Generic type ``IO[AnyStr]`` and its subclasses ``TextIO(IO[str])``
+   and ``BinaryIO(IO[bytes])``
+   represent the types of I/O streams such as returned by
+   :func:`open`. These types are also in the ``typing.io`` namespace.
+
+.. class:: Pattern
+           Match
+
+   These type aliases
+   correspond to the return types from :func:`re.compile` and
+   :func:`re.match`.  These types (and the corresponding functions)
+   are generic in ``AnyStr`` and can be made specific by writing
+   ``Pattern[str]``, ``Pattern[bytes]``, ``Match[str]``, or
+   ``Match[bytes]``. These types are also in the ``typing.re`` namespace.
+
+   .. deprecated:: 3.9
+      Classes ``Pattern`` and ``Match`` from :mod:`re` now support ``[]``.
+      See :pep:`585` and :ref:`types-genericalias`.
+
+.. class:: Text
+
+   ``Text`` is an alias for ``str``. It is provided to supply a forward
+   compatible path for Python 2 code: in Python 2, ``Text`` is an alias for
+   ``unicode``.
+
+   Use ``Text`` to indicate that a value must contain a unicode string in
+   a manner that is compatible with both Python 2 and Python 3::
+
+       def add_unicode_checkmark(text: Text) -> Text:
+           return text + u' \u2713'
+
+   .. versionadded:: 3.5.2
+
+Abstract Base Classes
+---------------------
+
+Corresponding to collections in :mod:`collections.abc`
+""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+.. class:: AbstractSet(Sized, Collection[T_co])
+
+   A generic version of :class:`collections.abc.Set`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Set` now supports ``[]``. See :pep:`585` and
+      :ref:`types-genericalias`.
+
+.. class:: ByteString(Sequence[int])
+
+   A generic version of :class:`collections.abc.ByteString`.
+
+   This type represents the types :class:`bytes`, :class:`bytearray`,
+   and :class:`memoryview` of byte sequences.
+
+   As a shorthand for this type, :class:`bytes` can be used to
+   annotate arguments of any of the types mentioned above.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.ByteString` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Collection(Sized, Iterable[T_co], Container[T_co])
+
+   A generic version of :class:`collections.abc.Collection`
+
+   .. versionadded:: 3.6.0
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Collection` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Container(Generic[T_co])
+
+   A generic version of :class:`collections.abc.Container`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Container` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: ItemsView(MappingView, Generic[KT_co, VT_co])
+
+   A generic version of :class:`collections.abc.ItemsView`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.ItemsView` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: KeysView(MappingView[KT_co], AbstractSet[KT_co])
+
+   A generic version of :class:`collections.abc.KeysView`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.KeysView` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Mapping(Sized, Collection[KT], Generic[VT_co])
+
+   A generic version of :class:`collections.abc.Mapping`.
+   This type can be used as follows::
+
+     def get_position_in_index(word_list: Mapping[str, int], word: str) -> int:
+         return word_list[word]
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Mapping` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: MappingView(Sized, Iterable[T_co])
+
+   A generic version of :class:`collections.abc.MappingView`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.MappingView` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: MutableMapping(Mapping[KT, VT])
+
+   A generic version of :class:`collections.abc.MutableMapping`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.MutableMapping` now supports ``[]``. See
+      :pep:`585` and :ref:`types-genericalias`.
+
+.. class:: MutableSequence(Sequence[T])
+
+   A generic version of :class:`collections.abc.MutableSequence`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.MutableSequence` now supports ``[]``. See
+      :pep:`585` and :ref:`types-genericalias`.
+
+.. class:: MutableSet(AbstractSet[T])
+
+   A generic version of :class:`collections.abc.MutableSet`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.MutableSet` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Sequence(Reversible[T_co], Collection[T_co])
+
+   A generic version of :class:`collections.abc.Sequence`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Sequence` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: ValuesView(MappingView[VT_co])
+
+   A generic version of :class:`collections.abc.ValuesView`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.ValuesView` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+Corresponding to other types in :mod:`collections.abc`
+""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+.. class:: Iterable(Generic[T_co])
+
+   A generic version of :class:`collections.abc.Iterable`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Iterable` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Iterator(Iterable[T_co])
+
+   A generic version of :class:`collections.abc.Iterator`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Iterator` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Generator(Iterator[T_co], Generic[T_co, T_contra, V_co])
+
+   A generator can be annotated by the generic type
+   ``Generator[YieldType, SendType, ReturnType]``. For example::
+
+      def echo_round() -> Generator[int, float, str]:
+          sent = yield 0
+          while sent >= 0:
+              sent = yield round(sent)
+          return 'Done'
+
+   Note that unlike many other generics in the typing module, the ``SendType``
+   of :class:`Generator` behaves contravariantly, not covariantly or
+   invariantly.
+
+   If your generator will only yield values, set the ``SendType`` and
+   ``ReturnType`` to ``None``::
+
+      def infinite_stream(start: int) -> Generator[int, None, None]:
+          while True:
+              yield start
+              start += 1
+
+   Alternatively, annotate your generator as having a return type of
+   either ``Iterable[YieldType]`` or ``Iterator[YieldType]``::
+
+      def infinite_stream(start: int) -> Iterator[int]:
+          while True:
+              yield start
+              start += 1
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Generator` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Hashable
+
+   An alias to :class:`collections.abc.Hashable`
+
+.. class:: Reversible(Iterable[T_co])
+
+   A generic version of :class:`collections.abc.Reversible`.
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Reversible` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Sized
+
+   An alias to :class:`collections.abc.Sized`
+
+Asynchronous programming
+""""""""""""""""""""""""
+
+.. class:: Coroutine(Awaitable[V_co], Generic[T_co, T_contra, V_co])
+
+   A generic version of :class:`collections.abc.Coroutine`.
+   The variance and order of type variables
+   correspond to those of :class:`Generator`, for example::
+
+      from collections.abc import Coroutine
+      c = None # type: Coroutine[list[str], str, int]
+      ...
+      x = c.send('hi') # type: list[str]
+      async def bar() -> None:
+          x = await c # type: int
+
+   .. versionadded:: 3.5.3
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Coroutine` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: AsyncGenerator(AsyncIterator[T_co], Generic[T_co, T_contra])
+
+   An async generator can be annotated by the generic type
+   ``AsyncGenerator[YieldType, SendType]``. For example::
+
+      async def echo_round() -> AsyncGenerator[int, float]:
+          sent = yield 0
+          while sent >= 0.0:
+              rounded = await round(sent)
+              sent = yield rounded
+
+   Unlike normal generators, async generators cannot return a value, so there
+   is no ``ReturnType`` type parameter. As with :class:`Generator`, the
+   ``SendType`` behaves contravariantly.
+
+   If your generator will only yield values, set the ``SendType`` to
+   ``None``::
+
+      async def infinite_stream(start: int) -> AsyncGenerator[int, None]:
+          while True:
+              yield start
+              start = await increment(start)
+
+   Alternatively, annotate your generator as having a return type of
+   either ``AsyncIterable[YieldType]`` or ``AsyncIterator[YieldType]``::
+
+      async def infinite_stream(start: int) -> AsyncIterator[int]:
+          while True:
+              yield start
+              start = await increment(start)
+
+   .. versionadded:: 3.6.1
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.AsyncGenerator` now supports ``[]``. See
+      :pep:`585` and :ref:`types-genericalias`.
+
+.. class:: AsyncIterable(Generic[T_co])
+
+   A generic version of :class:`collections.abc.AsyncIterable`.
+
+   .. versionadded:: 3.5.2
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.AsyncIterable` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: AsyncIterator(AsyncIterable[T_co])
+
+   A generic version of :class:`collections.abc.AsyncIterator`.
+
+   .. versionadded:: 3.5.2
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.AsyncIterator` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+.. class:: Awaitable(Generic[T_co])
+
+   A generic version of :class:`collections.abc.Awaitable`.
+
+   .. versionadded:: 3.5.2
+
+   .. deprecated:: 3.9
+      :class:`collections.abc.Awaitable` now supports ``[]``. See :pep:`585`
+      and :ref:`types-genericalias`.
+
+
+Context manager types
+"""""""""""""""""""""
+
+.. class:: ContextManager(Generic[T_co])
+
+   A generic version of :class:`contextlib.AbstractContextManager`.
+
+   .. versionadded:: 3.5.4
+   .. versionadded:: 3.6.0
+
+   .. deprecated:: 3.9
+      :class:`contextlib.AbstractContextManager` now supports ``[]``. See
+      :pep:`585` and :ref:`types-genericalias`.
+
+.. class:: AsyncContextManager(Generic[T_co])
+
+   A generic version of :class:`contextlib.AbstractAsyncContextManager`.
+
+   .. versionadded:: 3.5.4
+   .. versionadded:: 3.6.2
+
+   .. deprecated:: 3.9
+      :class:`contextlib.AbstractAsyncContextManager` now supports ``[]``. See
+      :pep:`585` and :ref:`types-genericalias`.
+
+Protocols
+---------
+
+These protocols are decorated with :func:`runtime_checkable`.
+
+.. class:: SupportsAbs
+
+    An ABC with one abstract method ``__abs__`` that is covariant
+    in its return type.
+
+.. class:: SupportsBytes
+
+    An ABC with one abstract method ``__bytes__``.
+
+.. class:: SupportsComplex
+
+    An ABC with one abstract method ``__complex__``.
+
+.. class:: SupportsFloat
+
+    An ABC with one abstract method ``__float__``.
+
+.. class:: SupportsIndex
+
+    An ABC with one abstract method ``__index__``.
+
+    .. versionadded:: 3.8
+
+.. class:: SupportsInt
+
+    An ABC with one abstract method ``__int__``.
+
+.. class:: SupportsRound
+
+    An ABC with one abstract method ``__round__``
+    that is covariant in its return type.
+
+Functions and decorators
+------------------------
+
 .. function:: cast(typ, val)
 
    Cast a value to a type.
@@ -1040,38 +1565,6 @@
    runtime we intentionally don't check anything (we want this
    to be as fast as possible).
 
-.. function:: get_type_hints(obj[, globals[, locals]])
-
-   Return a dictionary containing type hints for a function, method, module
-   or class object.
-
-   This is often the same as ``obj.__annotations__``. In addition,
-   forward references encoded as string literals are handled by evaluating
-   them in ``globals`` and ``locals`` namespaces. If necessary,
-   ``Optional[t]`` is added for function and method annotations if a default
-   value equal to ``None`` is set. For a class ``C``, return
-   a dictionary constructed by merging all the ``__annotations__`` along
-   ``C.__mro__`` in reverse order.
-
-.. function:: get_origin(tp)
-.. function:: get_args(tp)
-
-   Provide basic introspection for generic types and special typing forms.
-
-   For a typing object of the form ``X[Y, Z, ...]`` these functions return
-   ``X`` and ``(Y, Z, ...)``. If ``X`` is a generic alias for a builtin or
-   :mod:`collections` class, it gets normalized to the original class.
-   For unsupported objects return ``None`` and ``()`` correspondingly.
-   Examples::
-
-      assert get_origin(Dict[str, int]) is dict
-      assert get_args(Dict[int, str]) == (int, str)
-
-      assert get_origin(Union[int, str]) is Union
-      assert get_args(Union[int, str]) == (int, str)
-
-   .. versionadded:: 3.8
-
 .. decorator:: overload
 
    The ``@overload`` decorator allows describing functions and methods
@@ -1090,7 +1583,7 @@
       def process(response: None) -> None:
           ...
       @overload
-      def process(response: int) -> Tuple[int, str]:
+      def process(response: int) -> tuple[int, str]:
           ...
       @overload
       def process(response: bytes) -> str:
@@ -1160,212 +1653,69 @@
    Note that returning instances of private classes is not recommended.
    It is usually preferable to make such classes public.
 
-.. decorator:: runtime_checkable
+Introspection helpers
+---------------------
 
-   Mark a protocol class as a runtime protocol.
+.. function:: get_type_hints(obj, globalns=None, localns=None, include_extras=False)
 
-   Such a protocol can be used with :func:`isinstance` and :func:`issubclass`.
-   This raises :exc:`TypeError` when applied to a non-protocol class.  This
-   allows a simple-minded structural check, very similar to "one trick ponies"
-   in :mod:`collections.abc` such as :class:`Iterable`.  For example::
+   Return a dictionary containing type hints for a function, method, module
+   or class object.
 
-      @runtime_checkable
-      class Closable(Protocol):
-          def close(self): ...
+   This is often the same as ``obj.__annotations__``. In addition,
+   forward references encoded as string literals are handled by evaluating
+   them in ``globals`` and ``locals`` namespaces. If necessary,
+   ``Optional[t]`` is added for function and method annotations if a default
+   value equal to ``None`` is set. For a class ``C``, return
+   a dictionary constructed by merging all the ``__annotations__`` along
+   ``C.__mro__`` in reverse order.
 
-      assert isinstance(open('/some/file'), Closable)
+   The function recursively replaces all ``Annotated[T, ...]`` with ``T``,
+   unless ``include_extras`` is set to ``True`` (see :class:`Annotated` for
+   more information). For example::
 
-   **Warning:** this will check only the presence of the required methods,
-   not their type signatures!
+       class Student(NamedTuple):
+           name: Annotated[str, 'some marker']
+
+       get_type_hints(Student) == {'name': str}
+       get_type_hints(Student, include_extras=False) == {'name': str}
+       get_type_hints(Student, include_extras=True) == {
+           'name': Annotated[str, 'some marker']
+       }
+
+   .. versionchanged:: 3.9
+      Added ``include_extras`` parameter as part of :pep:`593`.
+
+.. function:: get_args(tp)
+.. function:: get_origin(tp)
+
+   Provide basic introspection for generic types and special typing forms.
+
+   For a typing object of the form ``X[Y, Z, ...]`` these functions return
+   ``X`` and ``(Y, Z, ...)``. If ``X`` is a generic alias for a builtin or
+   :mod:`collections` class, it gets normalized to the original class.
+   If ``X`` is a :class:`Union` or :class:`Literal` contained in another
+   generic type, the order of ``(Y, Z, ...)`` may be different from the order
+   of the original arguments ``[Y, Z, ...]`` due to type caching.
+   For unsupported objects return ``None`` and ``()`` correspondingly.
+   Examples::
+
+      assert get_origin(Dict[str, int]) is dict
+      assert get_args(Dict[int, str]) == (int, str)
+
+      assert get_origin(Union[int, str]) is Union
+      assert get_args(Union[int, str]) == (int, str)
 
    .. versionadded:: 3.8
 
-.. data:: Any
+.. class:: ForwardRef
 
-   Special type indicating an unconstrained type.
+   A class used for internal typing representation of string forward references.
+   For example, ``list["SomeClass"]`` is implicitly transformed into
+   ``list[ForwardRef("SomeClass")]``.  This class should not be instantiated by
+   a user, but may be used by introspection tools.
 
-   * Every type is compatible with :data:`Any`.
-   * :data:`Any` is compatible with every type.
-
-.. data:: NoReturn
-
-   Special type indicating that a function never returns.
-   For example::
-
-      from typing import NoReturn
-
-      def stop() -> NoReturn:
-          raise RuntimeError('no way')
-
-   .. versionadded:: 3.5.4
-   .. versionadded:: 3.6.2
-
-.. data:: Union
-
-   Union type; ``Union[X, Y]`` means either X or Y.
-
-   To define a union, use e.g. ``Union[int, str]``.  Details:
-
-   * The arguments must be types and there must be at least one.
-
-   * Unions of unions are flattened, e.g.::
-
-       Union[Union[int, str], float] == Union[int, str, float]
-
-   * Unions of a single argument vanish, e.g.::
-
-       Union[int] == int  # The constructor actually returns int
-
-   * Redundant arguments are skipped, e.g.::
-
-       Union[int, str, int] == Union[int, str]
-
-   * When comparing unions, the argument order is ignored, e.g.::
-
-       Union[int, str] == Union[str, int]
-
-   * You cannot subclass or instantiate a union.
-
-   * You cannot write ``Union[X][Y]``.
-
-   * You can use ``Optional[X]`` as a shorthand for ``Union[X, None]``.
-
-   .. versionchanged:: 3.7
-      Don't remove explicit subclasses from unions at runtime.
-
-.. data:: Optional
-
-   Optional type.
-
-   ``Optional[X]`` is equivalent to ``Union[X, None]``.
-
-   Note that this is not the same concept as an optional argument,
-   which is one that has a default.  An optional argument with a
-   default does not require the ``Optional`` qualifier on its type
-   annotation just because it is optional. For example::
-
-      def foo(arg: int = 0) -> None:
-          ...
-
-   On the other hand, if an explicit value of ``None`` is allowed, the
-   use of ``Optional`` is appropriate, whether the argument is optional
-   or not. For example::
-
-      def foo(arg: Optional[int] = None) -> None:
-          ...
-
-.. data:: Tuple
-
-   Tuple type; ``Tuple[X, Y]`` is the type of a tuple of two items
-   with the first item of type X and the second of type Y. The type of
-   the empty tuple can be written as ``Tuple[()]``.
-
-   Example: ``Tuple[T1, T2]`` is a tuple of two elements corresponding
-   to type variables T1 and T2.  ``Tuple[int, float, str]`` is a tuple
-   of an int, a float and a string.
-
-   To specify a variable-length tuple of homogeneous type,
-   use literal ellipsis, e.g. ``Tuple[int, ...]``. A plain :data:`Tuple`
-   is equivalent to ``Tuple[Any, ...]``, and in turn to :class:`tuple`.
-
-.. data:: Callable
-
-   Callable type; ``Callable[[int], str]`` is a function of (int) -> str.
-
-   The subscription syntax must always be used with exactly two
-   values: the argument list and the return type.  The argument list
-   must be a list of types or an ellipsis; the return type must be
-   a single type.
-
-   There is no syntax to indicate optional or keyword arguments;
-   such function types are rarely used as callback types.
-   ``Callable[..., ReturnType]`` (literal ellipsis) can be used to
-   type hint a callable taking any number of arguments and returning
-   ``ReturnType``.  A plain :data:`Callable` is equivalent to
-   ``Callable[..., Any]``, and in turn to
-   :class:`collections.abc.Callable`.
-
-.. data:: Literal
-
-   A type that can be used to indicate to type checkers that the
-   corresponding variable or function parameter has a value equivalent to
-   the provided literal (or one of several literals). For example::
-
-      def validate_simple(data: Any) -> Literal[True]:  # always returns True
-          ...
-
-      MODE = Literal['r', 'rb', 'w', 'wb']
-      def open_helper(file: str, mode: MODE) -> str:
-          ...
-
-      open_helper('/some/path', 'r')  # Passes type check
-      open_helper('/other/path', 'typo')  # Error in type checker
-
-   ``Literal[...]`` cannot be subclassed. At runtime, an arbitrary value
-   is allowed as type argument to ``Literal[...]``, but type checkers may
-   impose restrictions. See :pep:`586` for more details about literal types.
-
-   .. versionadded:: 3.8
-
-.. data:: ClassVar
-
-   Special type construct to mark class variables.
-
-   As introduced in :pep:`526`, a variable annotation wrapped in ClassVar
-   indicates that a given attribute is intended to be used as a class variable
-   and should not be set on instances of that class. Usage::
-
-      class Starship:
-          stats: ClassVar[Dict[str, int]] = {} # class variable
-          damage: int = 10                     # instance variable
-
-   :data:`ClassVar` accepts only types and cannot be further subscribed.
-
-   :data:`ClassVar` is not a class itself, and should not
-   be used with :func:`isinstance` or :func:`issubclass`.
-   :data:`ClassVar` does not change Python runtime behavior, but
-   it can be used by third-party type checkers. For example, a type checker
-   might flag the following code as an error::
-
-      enterprise_d = Starship(3000)
-      enterprise_d.stats = {} # Error, setting class variable on instance
-      Starship.stats = {}     # This is OK
-
-   .. versionadded:: 3.5.3
-
-.. data:: Final
-
-   A special typing construct to indicate to type checkers that a name
-   cannot be re-assigned or overridden in a subclass. For example::
-
-      MAX_SIZE: Final = 9000
-      MAX_SIZE += 1  # Error reported by type checker
-
-      class Connection:
-          TIMEOUT: Final[int] = 10
-
-      class FastConnector(Connection):
-          TIMEOUT = 1  # Error reported by type checker
-
-   There is no runtime checking of these properties. See :pep:`591` for
-   more details.
-
-   .. versionadded:: 3.8
-
-.. data:: AnyStr
-
-   ``AnyStr`` is a type variable defined as
-   ``AnyStr = TypeVar('AnyStr', str, bytes)``.
-
-   It is meant to be used for functions that may accept any kind of string
-   without allowing different kinds of strings to mix. For example::
-
-      def concat(a: AnyStr, b: AnyStr) -> AnyStr:
-          return a + b
-
-      concat(u"foo", u"bar")  # Ok, output has type 'unicode'
-      concat(b"foo", b"bar")  # Ok, output has type 'bytes'
-      concat(u"foo", b"bar")  # Error, cannot mix unicode and bytes
+Constant
+--------
 
 .. data:: TYPE_CHECKING
 
@@ -1378,9 +1728,18 @@
       def fun(arg: 'expensive_mod.SomeType') -> None:
           local_var: expensive_mod.AnotherType = other_fun()
 
-   Note that the first type annotation must be enclosed in quotes, making it a
+   The first type annotation must be enclosed in quotes, making it a
    "forward reference", to hide the ``expensive_mod`` reference from the
    interpreter runtime.  Type annotations for local variables are not
    evaluated, so the second annotation does not need to be enclosed in quotes.
 
+   .. note::
+
+      If ``from __future__ import annotations`` is used in Python 3.7 or later,
+      annotations are not evaluated at function definition time.
+      Instead, they are stored as strings in ``__annotations__``,
+      This makes it unnecessary to use quotes around the annotation.
+      (see :pep:`563`).
+
    .. versionadded:: 3.5.2
+
diff --git a/Doc/library/unicodedata.rst b/Doc/library/unicodedata.rst
index 225384c..dade3f2 100644
--- a/Doc/library/unicodedata.rst
+++ b/Doc/library/unicodedata.rst
@@ -17,8 +17,8 @@
 
 This module provides access to the Unicode Character Database (UCD) which
 defines character properties for all Unicode characters. The data contained in
-this database is compiled from the `UCD version 12.1.0
-<http://www.unicode.org/Public/12.1.0/ucd>`_.
+this database is compiled from the `UCD version 13.0.0
+<https://www.unicode.org/Public/13.0.0/ucd>`_.
 
 The module uses the same names and symbols as defined by Unicode
 Standard Annex #44, `"Unicode Character Database"
@@ -175,6 +175,6 @@
 
 .. rubric:: Footnotes
 
-.. [#] http://www.unicode.org/Public/12.1.0/ucd/NameAliases.txt
+.. [#] https://www.unicode.org/Public/13.0.0/ucd/NameAliases.txt
 
-.. [#] http://www.unicode.org/Public/12.1.0/ucd/NamedSequences.txt
+.. [#] https://www.unicode.org/Public/13.0.0/ucd/NamedSequences.txt
diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst
index 34966b3..c5360f9 100644
--- a/Doc/library/unittest.mock.rst
+++ b/Doc/library/unittest.mock.rst
@@ -857,7 +857,7 @@
 
 .. class:: AsyncMock(spec=None, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, unsafe=False, **kwargs)
 
-  An asynchronous version of :class:`Mock`. The :class:`AsyncMock` object will
+  An asynchronous version of :class:`MagicMock`. The :class:`AsyncMock` object will
   behave so the object is recognized as an async function, and the result of a
   call is an awaitable.
 
@@ -1330,8 +1330,7 @@
 
 .. note::
 
-    :func:`patch` is straightforward to use. The key is to do the patching in the
-    right namespace. See the section `where to patch`_.
+    The key is to do the patching in the right namespace. See the section `where to patch`_.
 
 .. function:: patch(target, new=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)
 
@@ -1404,7 +1403,8 @@
     "as"; very useful if :func:`patch` is creating a mock object for you.
 
     :func:`patch` takes arbitrary keyword arguments. These will be passed to
-    the :class:`Mock` (or *new_callable*) on construction.
+    :class:`AsyncMock` if the patched object is asynchronous, to
+    :class:`MagicMock` otherwise or to *new_callable* if specified.
 
     ``patch.dict(...)``, ``patch.multiple(...)`` and ``patch.object(...)`` are
     available for alternate use-cases.
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index d9f080a..9fc6620 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -73,7 +73,7 @@
    for those new to unit testing.  For production environments it is
    recommended that tests be driven by a continuous integration system such as
    `Buildbot <https://buildbot.net/>`_, `Jenkins <https://jenkins.io/>`_
-   or  `Hudson <http://hudson-ci.org/>`_.
+   or `Travis-CI <https://travis-ci.com>`_, or `AppVeyor <https://www.appveyor.com/>`_.
 
 
 .. _unittest-minimal-example:
@@ -593,8 +593,9 @@
 
 .. decorator:: expectedFailure
 
-   Mark the test as an expected failure.  If the test fails it will be
-   considered a success.  If the test passes, it will be considered a failure.
+   Mark the test as an expected failure or error.  If the test fails or errors
+   it will be considered a success.  If the test passes, it will be considered
+   a failure.
 
 .. exception:: SkipTest(reason)
 
@@ -896,8 +897,7 @@
    .. method:: assertIs(first, second, msg=None)
                assertIsNot(first, second, msg=None)
 
-      Test that *first* and *second* evaluate (or don't evaluate) to the
-      same object.
+      Test that *first* and *second* are (or are not) the same object.
 
       .. versionadded:: 3.1
 
@@ -1088,7 +1088,8 @@
 
       If given, *logger* should be a :class:`logging.Logger` object or a
       :class:`str` giving the name of a logger.  The default is the root
-      logger, which will catch all messages.
+      logger, which will catch all messages that were not blocked by a
+      non-propagating descendent logger.
 
       If given, *level* should be either a numeric logging level or
       its string equivalent (for example either ``"ERROR"`` or
@@ -1427,7 +1428,7 @@
          :class:`TextTestResult` in Python 3.2.
 
 
-   .. method:: addCleanup(function, *args, **kwargs)
+   .. method:: addCleanup(function, /, *args, **kwargs)
 
       Add a function to be called after :meth:`tearDown` to cleanup resources
       used during the test. Functions will be called in reverse order to the
@@ -1945,7 +1946,7 @@
 
       A list containing 2-tuples of :class:`TestCase` instances and strings
       holding formatted tracebacks.  Each tuple represents an expected failure
-      of the test case.
+      or error of the test case.
 
    .. attribute:: unexpectedSuccesses
 
@@ -2071,8 +2072,8 @@
 
    .. method:: addExpectedFailure(test, err)
 
-      Called when the test case *test* fails, but was marked with the
-      :func:`expectedFailure` decorator.
+      Called when the test case *test* fails or errors, but was marked with
+      the :func:`expectedFailure` decorator.
 
       The default implementation appends a tuple ``(test, formatted_err)`` to
       the instance's :attr:`expectedFailures` attribute, where *formatted_err*
diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst
index 25e5cc1..536cf95 100644
--- a/Doc/library/urllib.parse.rst
+++ b/Doc/library/urllib.parse.rst
@@ -42,8 +42,8 @@
    Parse a URL into six components, returning a 6-item :term:`named tuple`.  This
    corresponds to the general structure of a URL:
    ``scheme://netloc/path;parameters?query#fragment``.
-   Each tuple item is a string, possibly empty. The components are not broken up in
-   smaller parts (for example, the network location is a single string), and %
+   Each tuple item is a string, possibly empty. The components are not broken up
+   into smaller parts (for example, the network location is a single string), and %
    escapes are not expanded. The delimiters as shown above are not part of the
    result, except for a leading slash in the *path* component, which is retained if
    present.  For example:
@@ -328,22 +328,22 @@
 
    .. note::
 
-      If *url* is an absolute URL (that is, starting with ``//`` or ``scheme://``),
-      the *url*'s host name and/or scheme will be present in the result.  For example:
+      If *url* is an absolute URL (that is, it starts with ``//`` or ``scheme://``),
+      the *url*'s hostname and/or scheme will be present in the result.  For example:
 
-   .. doctest::
+      .. doctest::
 
-      >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
-      ...         '//www.python.org/%7Eguido')
-      'http://www.python.org/%7Eguido'
+         >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
+         ...         '//www.python.org/%7Eguido')
+         'http://www.python.org/%7Eguido'
 
-   If you do not want that behavior, preprocess the *url* with :func:`urlsplit` and
-   :func:`urlunsplit`, removing possible *scheme* and *netloc* parts.
+      If you do not want that behavior, preprocess the *url* with :func:`urlsplit` and
+      :func:`urlunsplit`, removing possible *scheme* and *netloc* parts.
 
 
    .. versionchanged:: 3.5
 
-      Behaviour updated to match the semantics defined in :rfc:`3986`.
+      Behavior updated to match the semantics defined in :rfc:`3986`.
 
 
 .. function:: urldefrag(url)
@@ -521,11 +521,11 @@
 
    Replace special characters in *string* using the ``%xx`` escape. Letters,
    digits, and the characters ``'_.-~'`` are never quoted. By default, this
-   function is intended for quoting the path section of URL. The optional *safe*
-   parameter specifies additional ASCII characters that should not be quoted
-   --- its default value is ``'/'``.
+   function is intended for quoting the path section of a URL. The optional
+   *safe* parameter specifies additional ASCII characters that should not be
+   quoted --- its default value is ``'/'``.
 
-   *string* may be either a :class:`str` or a :class:`bytes`.
+   *string* may be either a :class:`str` or a :class:`bytes` object.
 
    .. versionchanged:: 3.7
       Moved from :rfc:`2396` to :rfc:`3986` for quoting URL strings. "~" is now
@@ -547,7 +547,7 @@
 
 .. function:: quote_plus(string, safe='', encoding=None, errors=None)
 
-   Like :func:`quote`, but also replace spaces by plus signs, as required for
+   Like :func:`quote`, but also replace spaces with plus signs, as required for
    quoting HTML form values when building up a query string to go into a URL.
    Plus signs in the original string are escaped unless they are included in
    *safe*.  It also does not have *safe* default to ``'/'``.
@@ -566,12 +566,12 @@
 
 .. function:: unquote(string, encoding='utf-8', errors='replace')
 
-   Replace ``%xx`` escapes by their single-character equivalent.
+   Replace ``%xx`` escapes with their single-character equivalent.
    The optional *encoding* and *errors* parameters specify how to decode
    percent-encoded sequences into Unicode characters, as accepted by the
    :meth:`bytes.decode` method.
 
-   *string* must be a :class:`str`.
+   *string* may be either a :class:`str` or a :class:`bytes` object.
 
    *encoding* defaults to ``'utf-8'``.
    *errors* defaults to ``'replace'``, meaning invalid sequences are replaced
@@ -579,11 +579,16 @@
 
    Example: ``unquote('/El%20Ni%C3%B1o/')`` yields ``'/El Niño/'``.
 
+   .. versionchanged:: 3.9
+      *string* parameter supports bytes and str objects (previously only str).
+
+
+
 
 .. function:: unquote_plus(string, encoding='utf-8', errors='replace')
 
-   Like :func:`unquote`, but also replace plus signs by spaces, as required for
-   unquoting HTML form values.
+   Like :func:`unquote`, but also replace plus signs with spaces, as required
+   for unquoting HTML form values.
 
    *string* must be a :class:`str`.
 
@@ -592,10 +597,10 @@
 
 .. function:: unquote_to_bytes(string)
 
-   Replace ``%xx`` escapes by their single-octet equivalent, and return a
+   Replace ``%xx`` escapes with their single-octet equivalent, and return a
    :class:`bytes` object.
 
-   *string* may be either a :class:`str` or a :class:`bytes`.
+   *string* may be either a :class:`str` or a :class:`bytes` object.
 
    If it is a :class:`str`, unescaped non-ASCII characters in *string*
    are encoded into UTF-8 bytes.
@@ -626,7 +631,7 @@
    When a sequence of two-element tuples is used as the *query*
    argument, the first element of each tuple is a key and the second is a
    value. The value element in itself can be a sequence and in that case, if
-   the optional parameter *doseq* is evaluates to ``True``, individual
+   the optional parameter *doseq* evaluates to ``True``, individual
    ``key=value`` pairs separated by ``'&'`` are generated for each element of
    the value sequence for the key.  The order of parameters in the encoded
    string will match the order of parameter tuples in the sequence.
@@ -638,11 +643,12 @@
    To reverse this encoding process, :func:`parse_qs` and :func:`parse_qsl` are
    provided in this module to parse query strings into Python data structures.
 
-   Refer to :ref:`urllib examples <urllib-examples>` to find out how urlencode
-   method can be used for generating query string for a URL or data for POST.
+   Refer to :ref:`urllib examples <urllib-examples>` to find out how the
+   :func:`urllib.parse.urlencode` method can be used for generating the query
+   string of a URL or data for a POST request.
 
    .. versionchanged:: 3.2
-      Query parameter supports bytes and string objects.
+      *query* supports bytes and string objects.
 
    .. versionadded:: 3.5
       *quote_via* parameter.
diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst
index adc0593..785ecf8 100644
--- a/Doc/library/urllib.request.rst
+++ b/Doc/library/urllib.request.rst
@@ -55,16 +55,8 @@
    The *cadefault* parameter is ignored.
 
    This function always returns an object which can work as a
-   :term:`context manager` and has methods such as
-
-   * :meth:`~urllib.response.addinfourl.geturl` --- return the URL of the resource retrieved,
-     commonly used to determine if a redirect was followed
-
-   * :meth:`~urllib.response.addinfourl.info` --- return the meta-information of the page, such as headers,
-     in the form of an :func:`email.message_from_string` instance (see
-     `Quick Reference to HTTP Headers <http://jkorpela.fi/http.html>`_)
-
-   * :meth:`~urllib.response.addinfourl.getcode` -- return the HTTP status code of the response.
+   :term:`context manager` and has the properties *url*, *headers*, and *status*.
+   See :class:`urllib.response.addinfourl` for more detail on these properties.
 
    For HTTP and HTTPS URLs, this function returns a
    :class:`http.client.HTTPResponse` object slightly modified. In addition
@@ -954,7 +946,7 @@
    If *is_authenticated* is specified as ``True``, *realm* is ignored.
 
 
-.. method:: HTTPPasswordMgr.find_user_password(realm, authuri)
+.. method:: HTTPPasswordMgrWithPriorAuth.find_user_password(realm, authuri)
 
    Same as for :class:`HTTPPasswordMgrWithDefaultRealm` objects
 
@@ -1585,9 +1577,42 @@
    :synopsis: Response classes used by urllib.
 
 The :mod:`urllib.response` module defines functions and classes which define a
-minimal file like interface, including ``read()`` and ``readline()``. The
-typical response object is an addinfourl instance, which defines an ``info()``
-method and that returns headers and a ``geturl()`` method that returns the url.
-Functions defined by this module are used internally by the
-:mod:`urllib.request` module.
+minimal file-like interface, including ``read()`` and ``readline()``.
+Functions defined by this module are used internally by the :mod:`urllib.request` module.
+The typical response object is a :class:`urllib.response.addinfourl` instance:
 
+.. class:: addinfourl
+
+   .. attribute:: url
+
+      URL of the resource retrieved, commonly used to determine if a redirect was followed.
+
+   .. attribute:: headers
+
+      Returns the headers of the response in the form of an :class:`~email.message.EmailMessage` instance.
+
+   .. attribute:: status
+
+      .. versionadded:: 3.9
+
+      Status code returned by server.
+
+   .. method:: geturl()
+
+      .. deprecated:: 3.9
+         Deprecated in favor of :attr:`~addinfourl.url`.
+
+   .. method:: info()
+
+      .. deprecated:: 3.9
+         Deprecated in favor of :attr:`~addinfourl.headers`.
+
+   .. attribute:: code
+
+      .. deprecated:: 3.9
+         Deprecated in favor of :attr:`~addinfourl.status`.
+
+   .. method:: getstatus()
+
+      .. deprecated:: 3.9
+         Deprecated in favor of :attr:`~addinfourl.status`.
diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst
index 59b2518..8abadc4 100644
--- a/Doc/library/venv.rst
+++ b/Doc/library/venv.rst
@@ -98,7 +98,7 @@
 
 .. class:: EnvBuilder(system_site_packages=False, clear=False, \
                       symlinks=False, upgrade=False, with_pip=False, \
-                      prompt=None)
+                      prompt=None, upgrade_deps=False)
 
     The :class:`EnvBuilder` class accepts the following keyword arguments on
     instantiation:
@@ -122,7 +122,10 @@
 
     * ``prompt`` -- a String to be used after virtual environment is activated
       (defaults to ``None`` which means directory name of the environment would
-      be used).
+      be used). If the special string ``"."`` is provided, the basename of the
+      current directory is used as the prompt.
+
+    * ``upgrade_deps`` -- Update the base venv modules to the latest on PyPI
 
     .. versionchanged:: 3.4
        Added the ``with_pip`` parameter
@@ -130,6 +133,9 @@
     .. versionadded:: 3.6
        Added the ``prompt`` parameter
 
+    .. versionadded:: 3.9
+       Added the ``upgrade_deps`` parameter
+
     Creators of third-party virtual environment tools will be free to use the
     provided :class:`EnvBuilder` class as a base class.
 
@@ -186,6 +192,14 @@
         Installs activation scripts appropriate to the platform into the virtual
         environment.
 
+    .. method:: upgrade_dependencies(context)
+
+       Upgrades the core venv dependency packages (currently ``pip`` and
+       ``setuptools``) in the environment. This is done by shelling out to the
+       ``pip`` executable in the environment.
+
+       .. versionadded:: 3.9
+
     .. method:: post_setup(context)
 
         A placeholder method which can be overridden in third party
diff --git a/Doc/library/wave.rst b/Doc/library/wave.rst
index 60d19a8..f63e0d3 100644
--- a/Doc/library/wave.rst
+++ b/Doc/library/wave.rst
@@ -47,13 +47,6 @@
    .. versionchanged:: 3.4
       Added support for unseekable files.
 
-.. function:: openfp(file, mode)
-
-   A synonym for :func:`.open`, maintained for backwards compatibility.
-
-   .. deprecated-removed:: 3.7 3.9
-
-
 .. exception:: Error
 
    An error raised when something is impossible because it violates the WAV
diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst
index 0d9f21d..d3c3a07 100644
--- a/Doc/library/weakref.rst
+++ b/Doc/library/weakref.rst
@@ -163,6 +163,8 @@
    application without adding attributes to those objects.  This can be especially
    useful with objects that override attribute accesses.
 
+   .. versionchanged:: 3.9
+      Added support for ``|`` and ``|=`` operators, specified in :pep:`584`.
 
 :class:`WeakKeyDictionary` objects have an additional method that
 exposes the internal references directly.  The references are not guaranteed to
@@ -182,6 +184,8 @@
    Mapping class that references values weakly.  Entries in the dictionary will be
    discarded when no strong reference to the value exists any more.
 
+   .. versionchanged:: 3.9
+      Added support for ``|`` and ``|=`` operators, as specified in :pep:`584`.
 
 :class:`WeakValueDictionary` objects have an additional method that has the
 same issues as the :meth:`keyrefs` method of :class:`WeakKeyDictionary`
@@ -227,7 +231,7 @@
 
    .. versionadded:: 3.4
 
-.. class:: finalize(obj, func, *args, **kwargs)
+.. class:: finalize(obj, func, /, *args, **kwargs)
 
    Return a callable finalizer object which will be called when *obj*
    is garbage collected. Unlike an ordinary weak reference, a finalizer
diff --git a/Doc/library/wsgiref.rst b/Doc/library/wsgiref.rst
index 1e30aa4..e92a689 100644
--- a/Doc/library/wsgiref.rst
+++ b/Doc/library/wsgiref.rst
@@ -480,8 +480,8 @@
    rarely used and is not guaranteed by WSGI. On IIS<7, though, the
    setting can only be made on a vhost level, affecting all other script
    mappings, many of which break when exposed to the ``PATH_TRANSLATED`` bug.
-   For this reason IIS<7 is almost never deployed with the fix. (Even IIS7
-   rarely uses it because there is still no UI for it.)
+   For this reason IIS<7 is almost never deployed with the fix (Even IIS7
+   rarely uses it because there is still no UI for it.).
 
    There is no way for CGI code to tell whether the option was set, so a
    separate handler class is provided.  It is used in the same way as
diff --git a/Doc/library/xml.dom.minidom.rst b/Doc/library/xml.dom.minidom.rst
index 8711242..bf72c46 100644
--- a/Doc/library/xml.dom.minidom.rst
+++ b/Doc/library/xml.dom.minidom.rst
@@ -132,7 +132,8 @@
           ... # Work with dom.
 
 
-.. method:: Node.writexml(writer, indent="", addindent="", newl="")
+.. method:: Node.writexml(writer, indent="", addindent="", newl="", \
+                          encoding=None, standalone=None)
 
    Write XML to the writer object.  The writer receives texts but not bytes as input,
    it should have a :meth:`write` method which matches that of the file object
@@ -144,11 +145,18 @@
    For the :class:`Document` node, an additional keyword argument *encoding* can
    be used to specify the encoding field of the XML header.
 
+   Silimarly, explicitly stating the *standalone* argument causes the
+   standalone document declarations to be added to the prologue of the XML
+   document.
+   If the value is set to `True`, `standalone="yes"` is added,
+   otherwise it is set to `"no"`.
+   Not stating the argument will omit the declaration from the document.
+
    .. versionchanged:: 3.8
       The :meth:`writexml` method now preserves the attribute order specified
       by the user.
 
-.. method:: Node.toxml(encoding=None)
+.. method:: Node.toxml(encoding=None, standalone=None)
 
    Return a string or byte string containing the XML represented by
    the DOM node.
@@ -160,11 +168,14 @@
    encoding. Encoding this string in an encoding other than UTF-8 is
    likely incorrect, since UTF-8 is the default encoding of XML.
 
+   The *standalone* argument behaves exactly as in :meth:`writexml`.
+
    .. versionchanged:: 3.8
       The :meth:`toxml` method now preserves the attribute order specified
       by the user.
 
-.. method:: Node.toprettyxml(indent="\\t", newl="\\n", encoding=None)
+.. method:: Node.toprettyxml(indent="\\t", newl="\\n", encoding=None, \
+                             standalone=None)
 
    Return a pretty-printed version of the document. *indent* specifies the
    indentation string and defaults to a tabulator; *newl* specifies the string
@@ -173,6 +184,8 @@
    The *encoding* argument behaves like the corresponding argument of
    :meth:`toxml`.
 
+   The *standalone* argument behaves exactly as in :meth:`writexml`.
+
    .. versionchanged:: 3.8
       The :meth:`toprettyxml` method now preserves the attribute order specified
       by the user.
diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst
index 44ac52a..f4bccf6 100644
--- a/Doc/library/xml.etree.elementtree.rst
+++ b/Doc/library/xml.etree.elementtree.rst
@@ -15,6 +15,8 @@
 
 .. versionchanged:: 3.3
    This module will use a fast implementation whenever available.
+
+.. deprecated:: 3.3
    The :mod:`xml.etree.cElementTree` module is deprecated.
 
 
@@ -249,12 +251,18 @@
 remove all countries with a rank higher than 50::
 
    >>> for country in root.findall('country'):
+   ...     # using root.findall() to avoid removal during traversal
    ...     rank = int(country.find('rank').text)
    ...     if rank > 50:
    ...         root.remove(country)
    ...
    >>> tree.write('output.xml')
 
+Note that concurrent modification while iterating can lead to problems,
+just like when iterating and modifying Python lists or dicts.
+Therefore, the example first collects all matching elements with
+``root.findall()``, and only then iterates over the list of matches.
+
 Our XML now looks like this:
 
 .. code-block:: xml
@@ -572,6 +580,18 @@
    .. versionadded:: 3.2
 
 
+.. function:: indent(tree, space="  ", level=0)
+
+   Appends whitespace to the subtree to indent the tree visually.
+   This can be used to generate pretty-printed XML output.
+   *tree* can be an Element or ElementTree.  *space* is the whitespace
+   string that will be inserted for each indentation level, two space
+   characters by default.  For indenting partial subtrees inside of an
+   already indented tree, pass the initial indentation level as *level*.
+
+   .. versionadded:: 3.9
+
+
 .. function:: iselement(element)
 
    Check if an object appears to be a valid element object.  *element* is an
@@ -804,16 +824,25 @@
    loader fails, it can return None or raise an exception.
 
 
-.. function:: xml.etree.ElementInclude.include( elem, loader=None)
+.. function:: xml.etree.ElementInclude.include( elem, loader=None, base_url=None, \
+                                                max_depth=6)
 
    This function expands XInclude directives.  *elem* is the root element.  *loader* is
    an optional resource loader.  If omitted, it defaults to :func:`default_loader`.
    If given, it should be a callable that implements the same interface as
-   :func:`default_loader`.  Returns the expanded resource.  If the parse mode is
+   :func:`default_loader`.  *base_url* is base URL of the original file, to resolve
+   relative include file references.  *max_depth* is the maximum number of recursive
+   inclusions.  Limited to reduce the risk of malicious content explosion. Pass a
+   negative value to disable the limitation.
+
+   Returns the expanded resource.  If the parse mode is
    ``"xml"``, this is an ElementTree instance.  If the parse mode is "text",
    this is a Unicode string.  If the loader fails, it can return None or
    raise an exception.
 
+   .. versionadded:: 3.9
+      The *base_url* and *max_depth* parameters.
+
 
 .. _elementtree-element-objects:
 
@@ -950,18 +979,6 @@
       in the expression into the given namespace.
 
 
-   .. method:: getchildren()
-
-      .. deprecated-removed:: 3.2 3.9
-         Use ``list(elem)`` or iteration.
-
-
-   .. method:: getiterator(tag=None)
-
-      .. deprecated-removed:: 3.2 3.9
-         Use method :meth:`Element.iter` instead.
-
-
    .. method:: insert(index, subelement)
 
       Inserts *subelement* at the given position in this element.  Raises
@@ -1096,12 +1113,6 @@
       Same as :meth:`Element.findtext`, starting at the root of the tree.
 
 
-   .. method:: getiterator(tag=None)
-
-      .. deprecated-removed:: 3.2 3.9
-         Use method :meth:`ElementTree.iter` instead.
-
-
    .. method:: getroot()
 
       Returns the root element for this tree.
diff --git a/Doc/library/xml.rst b/Doc/library/xml.rst
index fb86b6f..1981cab 100644
--- a/Doc/library/xml.rst
+++ b/Doc/library/xml.rst
@@ -20,7 +20,7 @@
    The XML modules are not secure against erroneous or maliciously
    constructed data.  If you need to parse untrusted or
    unauthenticated data see the :ref:`xml-vulnerabilities` and
-   :ref:`defused-packages` sections.
+   :ref:`defusedxml-package` sections.
 
 It is important to note that modules in the :mod:`xml` package require that
 there be at least one SAX-compliant XML parser available. The Expat parser is
@@ -113,9 +113,9 @@
 The documentation for `defusedxml`_ on PyPI has further information about
 all known attack vectors with examples and references.
 
-.. _defused-packages:
+.. _defusedxml-package:
 
-The :mod:`defusedxml` and :mod:`defusedexpat` Packages
+The :mod:`defusedxml` Package
 ------------------------------------------------------
 
 `defusedxml`_ is a pure Python package with modified subclasses of all stdlib
@@ -124,16 +124,8 @@
 package also ships with example exploits and extended documentation on more
 XML exploits such as XPath injection.
 
-`defusedexpat`_ provides a modified libexpat and a patched
-:mod:`pyexpat` module that have countermeasures against entity expansion
-DoS attacks. The :mod:`defusedexpat` module still allows a sane and configurable amount of entity
-expansions. The modifications may be included in some future release of Python,
-but will not be included in any bugfix releases of
-Python because they break backward compatibility.
-
 
 .. _defusedxml: https://pypi.org/project/defusedxml/
-.. _defusedexpat: https://pypi.org/project/defusedexpat/
 .. _Billion Laughs: https://en.wikipedia.org/wiki/Billion_laughs
 .. _ZIP bomb: https://en.wikipedia.org/wiki/Zip_bomb
 .. _DTD: https://en.wikipedia.org/wiki/Document_type_definition
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index 97da6ca..7126d8b 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -489,16 +489,20 @@
 
    The final path component.
 
-.. method:: Path.open(*, **)
+.. method:: Path.open(mode='r', *, pwd, **)
 
-   Invoke :meth:`ZipFile.open` on the current path. Accepts
-   the same arguments as :meth:`ZipFile.open`.
+   Invoke :meth:`ZipFile.open` on the current path.
+   Allows opening for read or write, text or binary
+   through supported modes: 'r', 'w', 'rb', 'wb'.
+   Positional and keyword arguments are passed through to
+   :class:`io.TextIOWrapper` when opened as text and
+   ignored otherwise.
+   ``pwd`` is the ``pwd`` parameter to
+   :meth:`ZipFile.open`.
 
-   .. caution::
-
-      The signature on this function changes in an incompatible way
-      in Python 3.9. For a future-compatible version, consider using
-      the third-party zipp.Path package (3.0 or later).
+   .. versionchanged:: 3.9
+      Added support for text and binary modes for open. Default
+      mode is now text.
 
 .. method:: Path.iterdir()
 
diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index aa61278..ec60ea2 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -9,9 +9,9 @@
 
 For applications that require data compression, the functions in this module
 allow compression and decompression, using the zlib library. The zlib library
-has its own home page at http://www.zlib.net.   There are known
+has its own home page at https://www.zlib.net.   There are known
 incompatibilities between the Python module and versions of the zlib library
-earlier than 1.1.3; 1.1.3 has a security vulnerability, so we recommend using
+earlier than 1.1.3; 1.1.3 has a `security vulnerability <https://zlib.net/zlib_faq.html#faq33>`_, so we recommend using
 1.1.4 or later.
 
 zlib's functions have many options and often need to be used in a particular
@@ -47,7 +47,7 @@
       platforms, use ``adler32(data) & 0xffffffff``.
 
 
-.. function:: compress(data, level=-1)
+.. function:: compress(data, /, level=-1)
 
    Compresses the bytes in *data*, returning a bytes object containing compressed data.
    *level* is an integer from ``0`` to ``9`` or ``-1`` controlling the level of compression;
@@ -132,7 +132,7 @@
       platforms, use ``crc32(data) & 0xffffffff``.
 
 
-.. function:: decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)
+.. function:: decompress(data, /, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)
 
    Decompresses the bytes in *data*, returning a bytes object containing the
    uncompressed data.  The *wbits* parameter depends on
@@ -337,4 +337,3 @@
    http://www.zlib.net/manual.html
       The zlib manual explains  the semantics and usage of the library's many
       functions.
-
diff --git a/Doc/library/zoneinfo.rst b/Doc/library/zoneinfo.rst
new file mode 100644
index 0000000..3a4c12a
--- /dev/null
+++ b/Doc/library/zoneinfo.rst
@@ -0,0 +1,413 @@
+:mod:`zoneinfo` --- IANA time zone support
+==========================================
+
+.. module:: zoneinfo
+    :synopsis: IANA time zone support
+
+.. versionadded:: 3.9
+
+.. moduleauthor:: Paul Ganssle <paul@ganssle.io>
+.. sectionauthor:: Paul Ganssle <paul@ganssle.io>
+
+--------------
+
+The :mod:`zoneinfo` module provides a concrete time zone implementation to
+support the IANA time zone database as originally specified in :pep:`615`. By
+default, :mod:`zoneinfo` uses the system's time zone data if available; if no
+system time zone data is available, the library will fall back to using the
+first-party `tzdata`_ package available on PyPI.
+
+.. seealso::
+
+    Module: :mod:`datetime`
+        Provides the :class:`~datetime.time` and :class:`~datetime.datetime`
+        types with which the :class:`ZoneInfo` class is designed to be used.
+
+    Package `tzdata`_
+        First-party package maintained by the CPython core developers to supply
+        time zone data via PyPI.
+
+
+Using ``ZoneInfo``
+------------------
+
+:class:`ZoneInfo` is a concrete implementation of the :class:`datetime.tzinfo`
+abstract base class, and is intended to be attached to ``tzinfo``, either via
+the constructor, the :meth:`datetime.replace <datetime.datetime.replace>`
+method or :meth:`datetime.astimezone <datetime.datetime.astimezone>`::
+
+    >>> from zoneinfo import ZoneInfo
+    >>> from datetime import datetime, timedelta
+
+    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
+    >>> print(dt)
+    2020-10-31 12:00:00-07:00
+
+    >>> dt.tzname()
+    'PDT'
+
+Datetimes constructed in this way are compatible with datetime arithmetic and
+handle daylight saving time transitions with no further intervention::
+
+    >>> dt_add = dt + timedelta(days=1)
+
+    >>> print(dt_add)
+    2020-11-01 12:00:00-08:00
+
+    >>> dt_add.tzname()
+    'PST'
+
+These time zones also support the :attr:`~datetime.datetime.fold` attribute
+introduced in :pep:`495`.  During offset transitions which induce ambiguous
+times (such as a daylight saving time to standard time transition), the offset
+from *before* the transition is used when ``fold=0``, and the offset *after*
+the transition is used when ``fold=1``, for example::
+
+    >>> dt = datetime(2020, 11, 1, 1, tzinfo=ZoneInfo("America/Los_Angeles"))
+    >>> print(dt)
+    2020-11-01 01:00:00-07:00
+
+    >>> print(dt.replace(fold=1))
+    2020-11-01 01:00:00-08:00
+
+When converting from another time zone, the fold will be set to the correct
+value::
+
+    >>> from datetime import timezone
+    >>> LOS_ANGELES = ZoneInfo("America/Los_Angeles")
+    >>> dt_utc = datetime(2020, 11, 1, 8, tzinfo=timezone.utc)
+
+    >>> # Before the PDT -> PST transition
+    >>> print(dt_utc.astimezone(LOS_ANGELES))
+    2020-11-01 01:00:00-07:00
+
+    >>> # After the PDT -> PST transition
+    >>> print((dt_utc + timedelta(hours=1)).astimezone(LOS_ANGELES))
+    2020-11-01 01:00:00-08:00
+
+Data sources
+------------
+
+The ``zoneinfo`` module does not directly provide time zone data, and instead
+pulls time zone information from the system time zone database or the
+first-party PyPI package `tzdata`_, if available. Some systems, including
+notably Windows systems, do not have an IANA database available, and so for
+projects targeting cross-platform compatibility that require time zone data, it
+is recommended to declare a dependency on tzdata. If neither system data nor
+tzdata are available, all calls to :class:`ZoneInfo` will raise
+:exc:`ZoneInfoNotFoundError`.
+
+.. _zoneinfo_data_configuration:
+
+Configuring the data sources
+****************************
+
+When ``ZoneInfo(key)`` is called, the constructor first searches the
+directories specified in :data:`TZPATH` for a file matching ``key``, and on
+failure looks for a match in the tzdata package. This behavior can be
+configured in three ways:
+
+1. The default :data:`TZPATH` when not otherwise specified can be configured at
+   :ref:`compile time <zoneinfo_data_compile_time_config>`.
+2. :data:`TZPATH` can be configured using :ref:`an environment variable
+   <zoneinfo_data_environment_var>`.
+3. At :ref:`runtime <zoneinfo_data_runtime_config>`, the search path can be
+   manipulated using the :func:`reset_tzpath` function.
+
+.. _zoneinfo_data_compile_time_config:
+
+Compile-time configuration
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The default :data:`TZPATH` includes several common deployment locations for the
+time zone database (except on Windows, where there are no "well-known"
+locations for time zone data). On POSIX systems, downstream distributors and
+those building Python from source who know where their system
+time zone data is deployed may change the default time zone path by specifying
+the compile-time option ``TZPATH`` (or, more likely, the ``configure`` flag
+``--with-tzpath``), which should be a string delimited by :data:`os.pathsep`.
+
+On all platforms, the configured value is available as the ``TZPATH`` key in
+:func:`sysconfig.get_config_var`.
+
+.. _zoneinfo_data_environment_var:
+
+Environment configuration
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When initializing :data:`TZPATH` (either at import time or whenever
+:func:`reset_tzpath` is called with no arguments), the ``zoneinfo`` module will
+use the environment variable ``PYTHONTZPATH``, if it exists, to set the search
+path.
+
+.. envvar:: PYTHONTZPATH
+
+    This is an :data:`os.pathsep`-separated string containing the time zone
+    search path to use. It must consist of only absolute rather than relative
+    paths. Relative components specified in ``PYTHONTZPATH`` will not be used,
+    but otherwise the behavior when a relative path is specified is
+    implementation-defined; CPython will raise :exc:`InvalidTZPathWarning`, but
+    other implementations are free to silently ignore the erroneous component
+    or raise an exception.
+
+To set the system to ignore the system data and use the tzdata package
+instead, set ``PYTHONTZPATH=""``.
+
+.. _zoneinfo_data_runtime_config:
+
+Runtime configuration
+^^^^^^^^^^^^^^^^^^^^^
+
+The TZ search path can also be configured at runtime using the
+:func:`reset_tzpath` function. This is generally not an advisable operation,
+though it is reasonable to use it in test functions that require the use of a
+specific time zone path (or require disabling access to the system time zones).
+
+
+The ``ZoneInfo`` class
+----------------------
+
+.. class:: ZoneInfo(key)
+
+    A concrete :class:`datetime.tzinfo` subclass that represents an IANA time
+    zone specified by the string ``key``. Calls to the primary constructor will
+    always return objects that compare identically; put another way, barring
+    cache invalidation via :meth:`ZoneInfo.clear_cache`, for all values of
+    ``key``, the following assertion will always be true:
+
+    .. code-block:: python
+
+        a = ZoneInfo(key)
+        b = ZoneInfo(key)
+        assert a is b
+
+    ``key`` must be in the form of a relative, normalized POSIX path, with no
+    up-level references. The constructor will raise :exc:`ValueError` if a
+    non-conforming key is passed.
+
+    If no file matching ``key`` is found, the constructor will raise
+    :exc:`ZoneInfoNotFoundError`.
+
+
+The ``ZoneInfo`` class has two alternate constructors:
+
+.. classmethod:: ZoneInfo.from_file(fobj, /, key=None)
+
+    Constructs a ``ZoneInfo`` object from a file-like object returning bytes
+    (e.g. a file opened in binary mode or an :class:`io.BytesIO` object).
+    Unlike the primary constructor, this always constructs a new object.
+
+    The ``key`` parameter sets the name of the zone for the purposes of
+    :py:meth:`~object.__str__` and :py:meth:`~object.__repr__`.
+
+    Objects created via this constructor cannot be pickled (see `pickling`_).
+
+.. classmethod:: ZoneInfo.no_cache(key)
+
+    An alternate constructor that bypasses the constructor's cache. It is
+    identical to the primary constructor, but returns a new object on each
+    call. This is most likely to be useful for testing or demonstration
+    purposes, but it can also be used to create a system with a different cache
+    invalidation strategy.
+
+    Objects created via this constructor will also bypass the cache of a
+    deserializing process when unpickled.
+
+    .. TODO: Add "See `cache_behavior`_" reference when that section is ready.
+
+    .. caution::
+
+        Using this constructor may change the semantics of your datetimes in
+        surprising ways, only use it if you know that you need to.
+
+The following class methods are also available:
+
+.. classmethod:: ZoneInfo.clear_cache(*, only_keys=None)
+
+    A method for invalidating the cache on the ``ZoneInfo`` class. If no
+    arguments are passed, all caches are invalidated and the next call to
+    the primary constructor for each key will return a new instance.
+
+    If an iterable of key names is passed to the ``only_keys`` parameter, only
+    the specified keys will be removed from the cache. Keys passed to
+    ``only_keys`` but not found in the cache are ignored.
+
+    .. TODO: Add "See `cache_behavior`_" reference when that section is ready.
+
+    .. warning::
+
+        Invoking this function may change the semantics of datetimes using
+        ``ZoneInfo`` in surprising ways; this modifies process-wide global state
+        and thus may have wide-ranging effects. Only use it if you know that you
+        need to.
+
+The class has one attribute:
+
+.. attribute:: ZoneInfo.key
+
+    This is a read-only :term:`attribute` that returns the value of ``key``
+    passed to the constructor, which should be a lookup key in the IANA time
+    zone database (e.g. ``America/New_York``, ``Europe/Paris`` or
+    ``Asia/Tokyo``).
+
+    For zones constructed from file without specifying a ``key`` parameter,
+    this will be set to ``None``.
+
+    .. note::
+
+        Although it is a somewhat common practice to expose these to end users,
+        these values are designed to be primary keys for representing the
+        relevant zones and not necessarily user-facing elements.  Projects like
+        CLDR (the Unicode Common Locale Data Repository) can be used to get
+        more user-friendly strings from these keys.
+
+String representations
+**********************
+
+The string representation returned when calling :py:class:`str` on a
+:class:`ZoneInfo` object defaults to using the :attr:`ZoneInfo.key` attribute (see
+the note on usage in the attribute documentation)::
+
+    >>> zone = ZoneInfo("Pacific/Kwajalein")
+    >>> str(zone)
+    'Pacific/Kwajalein'
+
+    >>> dt = datetime(2020, 4, 1, 3, 15, tzinfo=zone)
+    >>> f"{dt.isoformat()} [{dt.tzinfo}]"
+    '2020-04-01T03:15:00+12:00 [Pacific/Kwajalein]'
+
+For objects constructed from a file without specifying a ``key`` parameter,
+``str`` falls back to calling :func:`repr`. ``ZoneInfo``'s ``repr`` is
+implementation-defined and not necessarily stable between versions, but it is
+guaranteed not to be a valid ``ZoneInfo`` key.
+
+.. _pickling:
+
+Pickle serialization
+********************
+
+Rather than serializing all transition data, ``ZoneInfo`` objects are
+serialized by key, and ``ZoneInfo`` objects constructed from files (even those
+with a value for ``key`` specified) cannot be pickled.
+
+The behavior of a ``ZoneInfo`` file depends on how it was constructed:
+
+1. ``ZoneInfo(key)``: When constructed with the primary constructor, a
+   ``ZoneInfo`` object is serialized by key, and when deserialized, the
+   deserializing process uses the primary and thus it is expected that these
+   are expected to be the same object as other references to the same time
+   zone.  For example, if ``europe_berlin_pkl`` is a string containing a pickle
+   constructed from ``ZoneInfo("Europe/Berlin")``, one would expect the
+   following behavior:
+
+   .. code-block:: pycon
+
+       >>> a = ZoneInfo("Europe/Berlin")
+       >>> b = pickle.loads(europe_berlin_pkl)
+       >>> a is b
+       True
+
+2. ``ZoneInfo.no_cache(key)``: When constructed from the cache-bypassing
+   constructor, the ``ZoneInfo`` object is also serialized by key, but when
+   deserialized, the deserializing process uses the cache bypassing
+   constructor. If ``europe_berlin_pkl_nc`` is a string containing a pickle
+   constructed from ``ZoneInfo.no_cache("Europe/Berlin")``, one would expect
+   the following behavior:
+
+   .. code-block:: pycon
+
+       >>> a = ZoneInfo("Europe/Berlin")
+       >>> b = pickle.loads(europe_berlin_pkl_nc)
+       >>> a is b
+       False
+
+3. ``ZoneInfo.from_file(fobj, /, key=None)``: When constructed from a file, the
+   ``ZoneInfo`` object raises an exception on pickling. If an end user wants to
+   pickle a ``ZoneInfo`` constructed from a file, it is recommended that they
+   use a wrapper type or a custom serialization function: either serializing by
+   key or storing the contents of the file object and serializing that.
+
+This method of serialization requires that the time zone data for the required
+key be available on both the serializing and deserializing side, similar to the
+way that references to classes and functions are expected to exist in both the
+serializing and deserializing environments. It also means that no guarantees
+are made about the consistency of results when unpickling a ``ZoneInfo``
+pickled in an environment with a different version of the time zone data.
+
+Functions
+---------
+
+.. function:: available_timezones()
+
+    Get a set containing all the valid keys for IANA time zones available
+    anywhere on the time zone path. This is recalculated on every call to the
+    function.
+
+    This function only includes canonical zone names and does not include
+    "special" zones such as those under the ``posix/`` and ``right/``
+    directories, or the ``posixrules`` zone.
+
+    .. caution::
+
+        This function may open a large number of files, as the best way to
+        determine if a file on the time zone path is a valid time zone is to
+        read the "magic string" at the beginning.
+
+    .. note::
+
+        These values are not designed to be exposed to end-users; for user
+        facing elements, applications should use something like CLDR (the
+        Unicode Common Locale Data Repository) to get more user-friendly
+        strings. See also the cautionary note on :attr:`ZoneInfo.key`.
+
+.. function:: reset_tzpath(to=None)
+
+    Sets or resets the time zone search path (:data:`TZPATH`) for the module.
+    When called with no arguments, :data:`TZPATH` is set to the default value.
+
+    Calling ``reset_tzpath`` will not invalidate the :class:`ZoneInfo` cache,
+    and so calls to the primary ``ZoneInfo`` constructor will only use the new
+    ``TZPATH`` in the case of a cache miss.
+
+    The ``to`` parameter must be a :term:`sequence` of strings or
+    :class:`os.PathLike` and not a string, all of which must be absolute paths.
+    :exc:`ValueError` will be raised if something other than an absolute path
+    is passed.
+
+Globals
+-------
+
+.. data:: TZPATH
+
+    A read-only sequence representing the time zone search path -- when
+    constructing a ``ZoneInfo`` from a key, the key is joined to each entry in
+    the ``TZPATH``, and the first file found is used.
+
+    ``TZPATH`` may contain only absolute paths, never relative paths,
+    regardless of how it is configured.
+
+    The object that ``zoneinfo.TZPATH`` points to may change in response to a
+    call to :func:`reset_tzpath`, so it is recommended to use
+    ``zoneinfo.TZPATH`` rather than importing ``TZPATH`` from ``zoneinfo`` or
+    assigning a long-lived variable to ``zoneinfo.TZPATH``.
+
+    For more information on configuring the time zone search path, see
+    :ref:`zoneinfo_data_configuration`.
+
+Exceptions and warnings
+-----------------------
+
+.. exception:: ZoneInfoNotFoundError
+
+    Raised when construction of a :class:`ZoneInfo` object fails because the
+    specified key could not be found on the system. This is a subclass of
+    :exc:`KeyError`.
+
+.. exception:: InvalidTZPathWarning
+
+    Raised when :envvar:`PYTHONTZPATH` contains an invalid component that will
+    be filtered out, such as a relative path.
+
+.. Links and references:
+
+.. _tzdata: https://pypi.org/project/tzdata/
diff --git a/Doc/license.rst b/Doc/license.rst
index 472a5cf..4030825 100644
--- a/Doc/license.rst
+++ b/Doc/license.rst
@@ -72,6 +72,19 @@
 Terms and conditions for accessing or otherwise using Python
 ============================================================
 
+Python software and documentation are licensed under the
+:ref:`PSF License Agreement <PSF-license>`.
+
+Starting with Python 3.8.6, examples, recipes, and other code in
+the documentation are dual licensed under the PSF License Agreement
+and the :ref:`Zero-Clause BSD license <BSD0>`.
+
+Some software incorporated into Python is under different licenses.
+The licenses are listed with code falling under that license.
+See :ref:`OtherLicenses` for an incomplete list of these licenses.
+
+
+.. _PSF-license:
 
 PSF LICENSE AGREEMENT FOR PYTHON |release|
 ------------------------------------------
@@ -258,6 +271,27 @@
    SOFTWARE.
 
 
+.. _BSD0:
+
+ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON |release| DOCUMENTATION
+----------------------------------------------------------------------
+
+.. parsed-literal::
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+
+
+.. _OtherLicenses:
+
 Licenses and Acknowledgements for Incorporated Software
 =======================================================
 
@@ -889,7 +923,7 @@
 The :mod:`_decimal` module is built using an included copy of the libmpdec
 library unless the build is configured ``--with-system-libmpdec``::
 
-   Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+   Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index feaf310..b4e06e5 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -44,7 +44,8 @@
 
 Summarizing:
 
-.. productionlist::
+
+.. productionlist:: python-grammar
    compound_stmt: `if_stmt`
                 : | `while_stmt`
                 : | `for_stmt`
@@ -89,7 +90,7 @@
 
 The :keyword:`if` statement is used for conditional execution:
 
-.. productionlist::
+.. productionlist:: python-grammar
    if_stmt: "if" `assignment_expression` ":" `suite`
           : ("elif" `assignment_expression` ":" `suite`)*
           : ["else" ":" `suite`]
@@ -115,7 +116,7 @@
 The :keyword:`while` statement is used for repeated execution as long as an
 expression is true:
 
-.. productionlist::
+.. productionlist:: python-grammar
    while_stmt: "while" `assignment_expression` ":" `suite`
              : ["else" ":" `suite`]
 
@@ -151,7 +152,7 @@
 The :keyword:`for` statement is used to iterate over the elements of a sequence
 (such as a string, tuple or list) or other iterable object:
 
-.. productionlist::
+.. productionlist:: python-grammar
    for_stmt: "for" `target_list` "in" `expression_list` ":" `suite`
            : ["else" ":" `suite`]
 
@@ -234,7 +235,7 @@
 The :keyword:`try` statement specifies exception handlers and/or cleanup code
 for a group of statements:
 
-.. productionlist::
+.. productionlist:: python-grammar
    try_stmt: `try1_stmt` | `try2_stmt`
    try1_stmt: "try" ":" `suite`
             : ("except" [`expression` ["as" `identifier`]] ":" `suite`)+
@@ -390,7 +391,7 @@
 This allows common :keyword:`try`...\ :keyword:`except`...\ :keyword:`finally`
 usage patterns to be encapsulated for convenient reuse.
 
-.. productionlist::
+.. productionlist:: python-grammar
    with_stmt: "with" `with_item` ("," `with_item`)* ":" `suite`
    with_item: `expression` ["as" `target`]
 
@@ -503,11 +504,11 @@
 A function definition defines a user-defined function object (see section
 :ref:`types`):
 
-.. productionlist::
+.. productionlist:: python-grammar
    funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")"
           : ["->" `expression`] ":" `suite`
    decorators: `decorator`+
-   decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE
+   decorator: "@" `assignment_expression` NEWLINE
    dotted_name: `identifier` ("." `identifier`)*
    parameter_list: `defparameter` ("," `defparameter`)* "," "/" ["," [`parameter_list_no_posonly`]]
                  :   | `parameter_list_no_posonly`
@@ -550,6 +551,11 @@
 
 except that the original function is not temporarily bound to the name ``func``.
 
+.. versionchanged:: 3.9
+   Functions may be decorated with any valid :token:`assignment_expression`.
+   Previously, the grammar was much more restrictive; see :pep:`614` for
+   details.
+
 .. index::
    triple: default; parameter; value
    single: argument; function definition
@@ -665,7 +671,7 @@
 
 A class definition defines a class object (see section :ref:`types`):
 
-.. productionlist::
+.. productionlist:: python-grammar
    classdef: [`decorators`] "class" `classname` [`inheritance`] ":" `suite`
    inheritance: "(" [`argument_list`] ")"
    classname: `identifier`
@@ -717,6 +723,11 @@
 The evaluation rules for the decorator expressions are the same as for function
 decorators.  The result is then bound to the class name.
 
+.. versionchanged:: 3.9
+   Classes may be decorated with any valid :token:`assignment_expression`.
+   Previously, the grammar was much more restrictive; see :pep:`614` for
+   details.
+
 **Programmer's note:** Variables defined in the class definition are class
 attributes; they are shared by instances.  Instance attributes can be set in a
 method with ``self.name = value``.  Both class and instance attributes are
@@ -752,7 +763,7 @@
 Coroutine function definition
 -----------------------------
 
-.. productionlist::
+.. productionlist:: python-grammar
    async_funcdef: [`decorators`] "async" "def" `funcname` "(" [`parameter_list`] ")"
                 : ["->" `expression`] ":" `suite`
 
@@ -785,7 +796,7 @@
 The :keyword:`!async for` statement
 -----------------------------------
 
-.. productionlist::
+.. productionlist:: python-grammar
    async_for_stmt: "async" `for_stmt`
 
 An :term:`asynchronous iterable` is able to call asynchronous code in its
@@ -830,7 +841,7 @@
 The :keyword:`!async with` statement
 ------------------------------------
 
-.. productionlist::
+.. productionlist:: python-grammar
    async_with_stmt: "async" `with_stmt`
 
 An :term:`asynchronous context manager` is a :term:`context manager` that is
@@ -844,8 +855,8 @@
 is semantically equivalent to::
 
     manager = (EXPRESSION)
-    aexit = type(manager).__aexit__
     aenter = type(manager).__aenter__
+    aexit = type(manager).__aexit__
     value = await aenter(manager)
     hit_except = False
 
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index d364e61..8906387 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -156,13 +156,18 @@
    object is accessed through the built-in name ``NotImplemented``. Numeric methods
    and rich comparison methods should return this value if they do not implement the
    operation for the operands provided.  (The interpreter will then try the
-   reflected operation, or some other fallback, depending on the operator.)  Its
-   truth value is true.
+   reflected operation, or some other fallback, depending on the operator.)  It
+   should not be evaluated in a boolean context.
 
    See
    :ref:`implementing-the-arithmetic-operations`
    for more details.
 
+   .. versionchanged:: 3.9
+      Evaluating ``NotImplemented`` in a boolean context is deprecated. While
+      it currently evaluates as true, it will emit a :exc:`DeprecationWarning`.
+      It will raise a :exc:`TypeError` in a future version of Python.
+
 
 Ellipsis
    .. index::
@@ -182,6 +187,24 @@
    related to mathematical numbers, but subject to the limitations of numerical
    representation in computers.
 
+   The string representations of the numeric classes, computed by
+   :meth:`__repr__` and :meth:`__str__`, have the following
+   properties:
+
+   * They are valid numeric literals which, when passed to their
+     class constructor, produce an object having the value of the
+     original numeric.
+
+   * The representation is in base 10, when possible.
+
+   * Leading zeros, possibly excepting a single zero before a
+     decimal point, are not shown.
+
+   * Trailing zeros, possibly excepting a single zero after a
+     decimal point, are not shown.
+
+   * A sign is shown only when the number is negative.
+
    Python distinguishes between integers, floating point numbers, and complex
    numbers:
 
@@ -1345,7 +1368,7 @@
 
    .. versionchanged:: 3.7
       ``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather
-      than ``format(str(self), '')``.
+      than ``format(str(x), '')``.
 
 
 .. _richcmpfuncs:
@@ -1372,12 +1395,14 @@
    context (e.g., in the condition of an ``if`` statement), Python will call
    :func:`bool` on the value to determine if the result is true or false.
 
-   By default, :meth:`__ne__` delegates to :meth:`__eq__` and
-   inverts the result unless it is ``NotImplemented``.  There are no other
-   implied relationships among the comparison operators, for example,
-   the truth of ``(x<y or x==y)`` does not imply ``x<=y``.
-   To automatically generate ordering operations from a single root operation,
-   see :func:`functools.total_ordering`.
+   By default, ``object`` implements :meth:`__eq__` by using ``is``, returning
+   ``NotImplemented`` in the case of a false comparison:
+   ``True if x is y else NotImplemented``. For :meth:`__ne__`, by default it
+   delegates to :meth:`__eq__` and inverts the result unless it is
+   ``NotImplemented``.  There are no other implied relationships among the
+   comparison operators or default implementations; for example, the truth of
+   ``(x<y or x==y)`` does not imply ``x<=y``. To automatically generate ordering
+   operations from a single root operation, see :func:`functools.total_ordering`.
 
    See the paragraph on :meth:`__hash__` for
    some important notes on creating :term:`hashable` objects which support
@@ -1535,6 +1560,12 @@
       result of implicit invocation via language syntax or built-in functions.
       See :ref:`special-lookup`.
 
+   .. audit-event:: object.__getattr__ obj,name object.__getattribute__
+
+      For certain sensitive attribute accesses, raises an
+      :ref:`auditing event <auditing>` ``object.__getattr__`` with arguments
+      ``obj`` and ``name``.
+
 
 .. method:: object.__setattr__(self, name, value)
 
@@ -1546,12 +1577,24 @@
    call the base class method with the same name, for example,
    ``object.__setattr__(self, name, value)``.
 
+   .. audit-event:: object.__setattr__ obj,name,value object.__setattr__
+
+      For certain sensitive attribute assignments, raises an
+      :ref:`auditing event <auditing>` ``object.__setattr__`` with arguments
+      ``obj``, ``name``, ``value``.
+
 
 .. method:: object.__delattr__(self, name)
 
    Like :meth:`__setattr__` but for attribute deletion instead of assignment.  This
    should only be implemented if ``del obj.name`` is meaningful for the object.
 
+   .. audit-event:: object.__delattr__ obj,name object.__delattr__
+
+      For certain sensitive attribute deletions, raises an
+      :ref:`auditing event <auditing>` ``object.__delattr__`` with arguments
+      ``obj`` and ``name``.
+
 
 .. method:: object.__dir__(self)
 
@@ -1740,7 +1783,7 @@
 descriptor; if it defines neither, it is a non-data descriptor.  Normally, data
 descriptors define both :meth:`__get__` and :meth:`__set__`, while non-data
 descriptors have just the :meth:`__get__` method.  Data descriptors with
-:meth:`__set__` and :meth:`__get__` defined always override a redefinition in an
+:meth:`__get__` and :meth:`__set__` (and/or :meth:`__delete__`) defined always override a redefinition in an
 instance dictionary.  In contrast, non-data descriptors can be overridden by
 instances.
 
@@ -2125,7 +2168,7 @@
    .. index:: pair: call; instance
 
    Called when the instance is "called" as a function; if this method is defined,
-   ``x(arg1, arg2, ...)`` is a shorthand for ``x.__call__(arg1, arg2, ...)``.
+   ``x(arg1, arg2, ...)`` roughly translates to ``type(x).__call__(x, arg1, ...)``.
 
 
 .. _sequence-types:
@@ -2371,10 +2414,11 @@
 
    .. note::
 
-      If the right operand's type is a subclass of the left operand's type and that
-      subclass provides the reflected method for the operation, this method will be
-      called before the left operand's non-reflected method.  This behavior allows
-      subclasses to override their ancestors' operations.
+      If the right operand's type is a subclass of the left operand's type and
+      that subclass provides a different implementation of the reflected method
+      for the operation, this method will be called before the left operand's
+      non-reflected method. This behavior allows subclasses to override their
+      ancestors' operations.
 
 
 .. method:: object.__iadd__(self, other)
@@ -2404,6 +2448,13 @@
    :ref:`faq-augmented-assignment-tuple-error`), but this behavior is in fact
    part of the data model.
 
+   .. note::
+
+      Due to a bug in the dispatching mechanism for ``**=``, a class that
+      defines :meth:`__ipow__` but returns ``NotImplemented`` would fail to
+      fall back to ``x.__pow__(y)`` and ``y.__rpow__(x)``. This bug is fixed
+      in Python 3.10.
+
 
 .. method:: object.__neg__(self)
             object.__pos__(self)
@@ -2596,7 +2647,7 @@
 -----------------
 
 An :term:`awaitable` object generally implements an :meth:`__await__` method.
-:term:`Coroutine` objects returned from :keyword:`async def` functions
+:term:`Coroutine objects <coroutine>` returned from :keyword:`async def` functions
 are awaitable.
 
 .. note::
@@ -2621,7 +2672,7 @@
 Coroutine Objects
 -----------------
 
-:term:`Coroutine` objects are :term:`awaitable` objects.
+:term:`Coroutine objects <coroutine>` are :term:`awaitable` objects.
 A coroutine's execution can be controlled by calling :meth:`__await__` and
 iterating over the result.  When the coroutine has finished executing and
 returns, the iterator raises :exc:`StopIteration`, and the exception's
@@ -2766,6 +2817,6 @@
    method—that will instead have the opposite effect of explicitly
    *blocking* such fallback.
 
-.. [#] For operands of the same type, it is assumed that if the non-reflected method
-   (such as :meth:`__add__`) fails the operation is not supported, which is why the
-   reflected method is not called.
+.. [#] For operands of the same type, it is assumed that if the non-reflected
+   method -- such as :meth:`__add__` -- fails then the overall operation is not
+   supported, which is why the reflected method is not called.
diff --git a/Doc/reference/executionmodel.rst b/Doc/reference/executionmodel.rst
index 49cb86b..55ac01b 100644
--- a/Doc/reference/executionmodel.rst
+++ b/Doc/reference/executionmodel.rst
@@ -22,7 +22,9 @@
 Each command typed interactively is a block.  A script file (a file given as
 standard input to the interpreter or specified as a command line argument to the
 interpreter) is a code block.  A script command (a command specified on the
-interpreter command line with the :option:`-c` option) is a code block.  The string
+interpreter command line with the :option:`-c` option) is a code block.
+A module run as a top level script (as module ``__main__``) from the command
+line using a :option:`-m` argument is also a code block. The string
 argument passed to the built-in functions :func:`eval` and :func:`exec` is a
 code block.
 
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index 8036a49..512aa5a 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -13,7 +13,7 @@
 be used to describe syntax, not lexical analysis.  When (one alternative of) a
 syntax rule has the form
 
-.. productionlist:: *
+.. productionlist:: python-grammar
    name: `othername`
 
 and no semantics are given, the semantics of this form of ``name`` are the same
@@ -54,7 +54,7 @@
 identifiers or literals.  Forms enclosed in parentheses, brackets or braces are
 also categorized syntactically as atoms.  The syntax for atoms is:
 
-.. productionlist::
+.. productionlist:: python-grammar
    atom: `identifier` | `literal` | `enclosure`
    enclosure: `parenth_form` | `list_display` | `dict_display` | `set_display`
             : | `generator_expression` | `yield_atom`
@@ -103,7 +103,7 @@
 
 Python supports string and bytes literals and various numeric literals:
 
-.. productionlist::
+.. productionlist:: python-grammar
    literal: `stringliteral` | `bytesliteral`
           : | `integer` | `floatnumber` | `imagnumber`
 
@@ -134,7 +134,7 @@
 
 A parenthesized form is an optional expression list enclosed in parentheses:
 
-.. productionlist::
+.. productionlist:: python-grammar
    parenth_form: "(" [`starred_expression`] ")"
 
 A parenthesized expression list yields whatever that expression list yields: if
@@ -162,6 +162,8 @@
 Displays for lists, sets and dictionaries
 -----------------------------------------
 
+.. index:: single: comprehensions
+
 For constructing a list, a set or a dictionary Python provides special syntax
 called "displays", each of them in two flavors:
 
@@ -177,7 +179,7 @@
 
 Common syntax elements for comprehensions are:
 
-.. productionlist::
+.. productionlist:: python-grammar
    comprehension: `assignment_expression` `comp_for`
    comp_for: ["async"] "for" `target_list` "in" `or_test` [`comp_iter`]
    comp_iter: `comp_for` | `comp_if`
@@ -243,7 +245,7 @@
 A list display is a possibly empty series of expressions enclosed in square
 brackets:
 
-.. productionlist::
+.. productionlist:: python-grammar
    list_display: "[" [`starred_list` | `comprehension`] "]"
 
 A list display yields a new list object, the contents being specified by either
@@ -260,6 +262,7 @@
 
 .. index::
    pair: set; display
+   pair: set; comprehensions
    object: set
    single: {} (curly brackets); set expression
    single: , (comma); expression list
@@ -267,7 +270,7 @@
 A set display is denoted by curly braces and distinguishable from dictionary
 displays by the lack of colons separating keys and values:
 
-.. productionlist::
+.. productionlist:: python-grammar
    set_display: "{" (`starred_list` | `comprehension`) "}"
 
 A set display yields a new mutable set object, the contents being specified by
@@ -287,6 +290,7 @@
 
 .. index::
    pair: dictionary; display
+   pair: dictionary; comprehensions
    key, datum, key/datum pair
    object: dictionary
    single: {} (curly brackets); dictionary expression
@@ -296,7 +300,7 @@
 A dictionary display is a possibly empty series of key/datum pairs enclosed in
 curly braces:
 
-.. productionlist::
+.. productionlist:: python-grammar
    dict_display: "{" [`key_datum_list` | `dict_comprehension`] "}"
    key_datum_list: `key_datum` ("," `key_datum`)* [","]
    key_datum: `expression` ":" `expression` | "**" `or_expr`
@@ -355,7 +359,7 @@
 
 A generator expression is a compact generator notation in parentheses:
 
-.. productionlist::
+.. productionlist:: python-grammar
    generator_expression: "(" `expression` `comp_for` ")"
 
 A generator expression yields a new generator object.  Its syntax is the same as
@@ -409,7 +413,7 @@
    pair: yield; expression
    pair: generator; function
 
-.. productionlist::
+.. productionlist:: python-grammar
    yield_atom: "(" `yield_expression` ")"
    yield_expression: "yield" [`expression_list` | "from" `expression`]
 
@@ -746,7 +750,7 @@
 Primaries represent the most tightly bound operations of the language. Their
 syntax is:
 
-.. productionlist::
+.. productionlist:: python-grammar
    primary: `atom` | `attributeref` | `subscription` | `slicing` | `call`
 
 
@@ -761,7 +765,7 @@
 
 An attribute reference is a primary followed by a period and a name:
 
-.. productionlist::
+.. productionlist:: python-grammar
    attributeref: `primary` "." `identifier`
 
 .. index::
@@ -796,10 +800,10 @@
    object: dictionary
    pair: sequence; item
 
-A subscription selects an item of a sequence (string, tuple or list) or mapping
-(dictionary) object:
+Subscription of a sequence (string, tuple or list) or mapping (dictionary)
+object usually selects an item from the collection:
 
-.. productionlist::
+.. productionlist:: python-grammar
    subscription: `primary` "[" `expression_list` "]"
 
 The primary must evaluate to an object that supports subscription (lists or
@@ -833,6 +837,11 @@
 A string's items are characters.  A character is not a separate data type but a
 string of exactly one character.
 
+Subscription of certain :term:`classes <class>` or :term:`types <type>`
+creates a :ref:`generic alias <types-genericalias>`.
+In this case, user-defined classes can support subscription by providing a
+:meth:`__class_getitem__` classmethod.
+
 
 .. _slicings:
 
@@ -855,7 +864,7 @@
 or list).  Slicings may be used as expressions or as targets in assignment or
 :keyword:`del` statements.  The syntax for a slicing:
 
-.. productionlist::
+.. productionlist:: python-grammar
    slicing: `primary` "[" `slice_list` "]"
    slice_list: `slice_item` ("," `slice_item`)* [","]
    slice_item: `expression` | `proper_slice`
@@ -905,7 +914,7 @@
 A call calls a callable object (e.g., a :term:`function`) with a possibly empty
 series of :term:`arguments <argument>`:
 
-.. productionlist::
+.. productionlist:: python-grammar
    call: `primary` "(" [`argument_list` [","] | `comprehension`] ")"
    argument_list: `positional_arguments` ["," `starred_and_keywords`]
                 :   ["," `keywords_arguments`]
@@ -1088,7 +1097,7 @@
 Suspend the execution of :term:`coroutine` on an :term:`awaitable` object.
 Can only be used inside a :term:`coroutine function`.
 
-.. productionlist::
+.. productionlist:: python-grammar
    await_expr: "await" `primary`
 
 .. versionadded:: 3.5
@@ -1106,7 +1115,7 @@
 The power operator binds more tightly than unary operators on its left; it binds
 less tightly than unary operators on its right.  The syntax is:
 
-.. productionlist::
+.. productionlist:: python-grammar
    power: (`await_expr` | `primary`) ["**" `u_expr`]
 
 Thus, in an unparenthesized sequence of power and unary operators, the operators
@@ -1139,7 +1148,7 @@
 
 All unary arithmetic and bitwise operations have the same priority:
 
-.. productionlist::
+.. productionlist:: python-grammar
    u_expr: `power` | "-" `u_expr` | "+" `u_expr` | "~" `u_expr`
 
 .. index::
@@ -1183,7 +1192,7 @@
 from the power operator, there are only two levels, one for multiplicative
 operators and one for additive operators:
 
-.. productionlist::
+.. productionlist:: python-grammar
    m_expr: `u_expr` | `m_expr` "*" `u_expr` | `m_expr` "@" `m_expr` |
          : `m_expr` "//" `u_expr` | `m_expr` "/" `u_expr` |
          : `m_expr` "%" `u_expr`
@@ -1279,7 +1288,7 @@
 
 The shifting operations have lower priority than the arithmetic operations:
 
-.. productionlist::
+.. productionlist:: python-grammar
    shift_expr: `a_expr` | `shift_expr` ("<<" | ">>") `a_expr`
 
 These operators accept integers as arguments.  They shift the first argument to
@@ -1300,7 +1309,7 @@
 
 Each of the three bitwise operations has a different priority level:
 
-.. productionlist::
+.. productionlist:: python-grammar
    and_expr: `shift_expr` | `and_expr` "&" `shift_expr`
    xor_expr: `and_expr` | `xor_expr` "^" `and_expr`
    or_expr: `xor_expr` | `or_expr` "|" `xor_expr`
@@ -1349,7 +1358,7 @@
 C, expressions like ``a < b < c`` have the interpretation that is conventional
 in mathematics:
 
-.. productionlist::
+.. productionlist:: python-grammar
    comparison: `or_expr` (`comp_operator` `or_expr`)*
    comp_operator: "<" | ">" | "==" | ">=" | "<=" | "!="
                 : | "is" ["not"] | ["not"] "in"
@@ -1608,7 +1617,7 @@
    pair: Conditional; expression
    pair: Boolean; operation
 
-.. productionlist::
+.. productionlist:: python-grammar
    or_test: `and_test` | `or_test` "or" `and_test`
    and_test: `not_test` | `and_test` "and" `not_test`
    not_test: `comparison` | "not" `not_test`
@@ -1647,12 +1656,29 @@
 Assignment expressions
 ======================
 
-.. productionlist::
+.. productionlist:: python-grammar
    assignment_expression: [`identifier` ":="] `expression`
 
-.. TODO: BPO-39868
+An assignment expression (sometimes also called a "named expression" or
+"walrus") assigns an :token:`expression` to an :token:`identifier`, while also
+returning the value of the :token:`expression`.
 
-See :pep:`572` for more details about assignment expressions.
+One common use case is when handling matched regular expressions:
+
+.. code-block:: python
+
+   if matching := pattern.search(data):
+       do_something(matching)
+
+Or, when processing a file stream in chunks:
+
+.. code-block:: python
+
+   while chunk := file.read(9000):
+       process(chunk)
+
+.. versionadded:: 3.8
+   See :pep:`572` for more details about assignment expressions.
 
 
 .. _if_expr:
@@ -1666,7 +1692,7 @@
    single: if; conditional expression
    single: else; conditional expression
 
-.. productionlist::
+.. productionlist:: python-grammar
    conditional_expression: `or_test` ["if" `or_test` "else" `expression`]
    expression: `conditional_expression` | `lambda_expr`
    expression_nocond: `or_test` | `lambda_expr_nocond`
@@ -1693,7 +1719,7 @@
    pair: anonymous; function
    single: : (colon); lambda expression
 
-.. productionlist::
+.. productionlist:: python-grammar
    lambda_expr: "lambda" [`parameter_list`] ":" `expression`
    lambda_expr_nocond: "lambda" [`parameter_list`] ":" `expression_nocond`
 
@@ -1720,7 +1746,7 @@
    pair: expression; list
    single: , (comma); expression list
 
-.. productionlist::
+.. productionlist:: python-grammar
    expression_list: `expression` ("," `expression`)* [","]
    starred_list: `starred_item` ("," `starred_item`)* [","]
    starred_expression: `expression` | (`starred_item` ",")* [`starred_item`]
diff --git a/Doc/reference/grammar.rst b/Doc/reference/grammar.rst
index 83d0f85..acf8376 100644
--- a/Doc/reference/grammar.rst
+++ b/Doc/reference/grammar.rst
@@ -1,7 +1,19 @@
 Full Grammar specification
 ==========================
 
-This is the full Python grammar, as it is read by the parser generator and used
-to parse Python source files:
+This is the full Python grammar, derived directly from the grammar
+used to generate the CPython parser (see :source:`Grammar/python.gram`).
+The version here omits details related to code generation and
+error recovery.
 
-.. literalinclude:: ../../Grammar/Grammar
+The notation is a mixture of `EBNF
+<https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form>`_
+and `PEG <https://en.wikipedia.org/wiki/Parsing_expression_grammar>`_.
+In particular, ``&`` followed by a symbol, token or parenthesized
+group indicates a positive lookahead (i.e., is required to match but
+not consumed), while ``!`` indicates a negative lookahead (i.e., is
+required _not_ to match).  We use the ``|`` separator to mean PEG's
+"ordered choice" (written as ``/`` in traditional PEG grammars).
+
+.. literalinclude:: ../../Grammar/python.gram
+  :language: peg
diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst
index 1c98aab..c595242 100644
--- a/Doc/reference/import.rst
+++ b/Doc/reference/import.rst
@@ -83,7 +83,7 @@
 considered a package.
 
 All modules have a name.  Subpackage names are separated from their parent
-package name by dots, akin to Python's standard attribute access syntax.  Thus
+package name by a dot, akin to Python's standard attribute access syntax.  Thus
 you might have a module called :mod:`sys` and a package called :mod:`email`,
 which in turn has a subpackage called :mod:`email.mime` and a module within
 that subpackage called :mod:`email.mime.text`.
@@ -202,6 +202,8 @@
 reinitialise the module contents by rerunning the module's code.
 
 
+.. _finders-and-loaders:
+
 Finders and loaders
 -------------------
 
@@ -678,7 +680,7 @@
 Cached bytecode invalidation
 ----------------------------
 
-Before Python loads cached bytecode from ``.pyc`` file, it checks whether the
+Before Python loads cached bytecode from a ``.pyc`` file, it checks whether the
 cache is up-to-date with the source ``.py`` file. By default, Python does this
 by storing the source's last-modified timestamp and size in the cache file when
 writing it. At runtime, the import system then validates the cache file by
@@ -855,9 +857,8 @@
 This spec will always have "loader" set (with one exception).
 
 To indicate to the import machinery that the spec represents a namespace
-:term:`portion`, the path entry finder sets "loader" on the spec to
-``None`` and "submodule_search_locations" to a list containing the
-portion.
+:term:`portion`, the path entry finder sets "submodule_search_locations" to
+a list containing the portion.
 
 .. versionchanged:: 3.4
    :meth:`~importlib.abc.PathEntryFinder.find_spec` replaced
@@ -873,18 +874,7 @@
    :meth:`~importlib.abc.PathEntryFinder.find_loader` takes one argument, the
    fully qualified name of the module being imported.  ``find_loader()``
    returns a 2-tuple where the first item is the loader and the second item
-   is a namespace :term:`portion`.  When the first item (i.e. the loader) is
-   ``None``, this means that while the path entry finder does not have a
-   loader for the named module, it knows that the path entry contributes to
-   a namespace portion for the named module.  This will almost always be the
-   case where Python is asked to import a namespace package that has no
-   physical presence on the file system.  When a path entry finder returns
-   ``None`` for the loader, the second item of the 2-tuple return value must
-   be a sequence, although it can be empty.
-
-   If ``find_loader()`` returns a non-``None`` loader value, the portion is
-   ignored and the loader is returned from the path based finder, terminating
-   the search through the path entries.
+   is a namespace :term:`portion`.
 
    For backwards compatibility with other implementations of the import
    protocol, many path entry finders also support the same,
diff --git a/Doc/reference/introduction.rst b/Doc/reference/introduction.rst
index bb7e390..72e874e 100644
--- a/Doc/reference/introduction.rst
+++ b/Doc/reference/introduction.rst
@@ -93,7 +93,7 @@
 The descriptions of lexical analysis and syntax use a modified BNF grammar
 notation.  This uses the following style of definition:
 
-.. productionlist:: *
+.. productionlist:: notation
    name: `lc_letter` (`lc_letter` | "_")*
    lc_letter: "a"..."z"
 
diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst
index d0e7fde0..77e0578 100644
--- a/Doc/reference/lexical_analysis.rst
+++ b/Doc/reference/lexical_analysis.rst
@@ -296,7 +296,7 @@
 
 Identifiers are unlimited in length.  Case is significant.
 
-.. productionlist::
+.. productionlist:: python-grammar
    identifier: `xid_start` `xid_continue`*
    id_start: <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
    id_continue: <all characters in `id_start`, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
@@ -316,7 +316,7 @@
 * *Nd* - decimal numbers
 * *Pc* - connector punctuations
 * *Other_ID_Start* - explicit list of characters in `PropList.txt
-  <http://www.unicode.org/Public/12.1.0/ucd/PropList.txt>`_ to support backwards
+  <https://www.unicode.org/Public/13.0.0/ucd/PropList.txt>`_ to support backwards
   compatibility
 * *Other_ID_Continue* - likewise
 
@@ -412,7 +412,7 @@
 
 String literals are described by the following lexical definitions:
 
-.. productionlist::
+.. productionlist:: python-grammar
    stringliteral: [`stringprefix`](`shortstring` | `longstring`)
    stringprefix: "r" | "u" | "R" | "U" | "f" | "F"
                : | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
@@ -424,7 +424,7 @@
    longstringchar: <any source character except "\">
    stringescapeseq: "\" <any source character>
 
-.. productionlist::
+.. productionlist:: python-grammar
    bytesliteral: `bytesprefix`(`shortbytes` | `longbytes`)
    bytesprefix: "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
    shortbytes: "'" `shortbytesitem`* "'" | '"' `shortbytesitem`* '"'
@@ -637,9 +637,11 @@
    single: string; formatted literal
    single: string; interpolated literal
    single: f-string
+   single: fstring
    single: {} (curly brackets); in formatted string literal
    single: ! (exclamation); in formatted string literal
    single: : (colon); in formatted string literal
+   single: = (equals); for help in debugging using string literals
 .. _f-strings:
 
 Formatted string literals
@@ -657,9 +659,9 @@
 a literal is also marked as a raw string).  After decoding, the grammar
 for the contents of the string is:
 
-.. productionlist::
+.. productionlist:: python-grammar
    f_string: (`literal_char` | "{{" | "}}" | `replacement_field`)*
-   replacement_field: "{" `f_expression` ["!" `conversion`] [":" `format_spec`] "}"
+   replacement_field: "{" `f_expression` ["="] ["!" `conversion`] [":" `format_spec`] "}"
    f_expression: (`conditional_expression` | "*" `or_expr`)
                :   ("," `conditional_expression` | "," "*" `or_expr`)* [","]
                : | `yield_expression`
@@ -671,10 +673,11 @@
 except that any doubled curly braces ``'{{'`` or ``'}}'`` are replaced
 with the corresponding single curly brace.  A single opening curly
 bracket ``'{'`` marks a replacement field, which starts with a
-Python expression.  After the expression, there may be a conversion field,
-introduced by an exclamation point ``'!'``.  A format specifier may also
-be appended, introduced by a colon ``':'``.  A replacement field ends
-with a closing curly bracket ``'}'``.
+Python expression. To display both the expression text and its value after
+evaluation, (useful in debugging), an equal sign ``'='`` may be added after the
+expression. A conversion field, introduced by an exclamation point ``'!'`` may
+follow.  A format specifier may also be appended, introduced by a colon ``':'``.
+A replacement field ends with a closing curly bracket ``'}'``.
 
 Expressions in formatted string literals are treated like regular
 Python expressions surrounded by parentheses, with a few exceptions.
@@ -690,6 +693,17 @@
    containing an :keyword:`async for` clause were illegal in the expressions
    in formatted string literals due to a problem with the implementation.
 
+When the equal sign ``'='`` is provided, the output will have the expression
+text, the ``'='`` and the evaluated value. Spaces after the opening brace
+``'{'``, within the expression and after the ``'='`` are all retained in the
+output. By default, the ``'='`` causes the :func:`repr` of the expression to be
+provided, unless there is a format specified. When a format is specified it
+defaults to the :func:`str` of the expression unless a conversion ``'!r'`` is
+declared.
+
+.. versionadded:: 3.8
+   The equal sign ``'='``.
+
 If a conversion is specified, the result of evaluating the expression
 is converted before formatting.  Conversion ``'!s'`` calls :func:`str` on
 the result, ``'!r'`` calls :func:`repr`, and ``'!a'`` calls :func:`ascii`.
@@ -704,7 +718,7 @@
 fields may include their own conversion fields and :ref:`format specifiers
 <formatspec>`, but may not include more deeply-nested replacement fields. The
 :ref:`format specifier mini-language <formatspec>` is the same as that used by
-the string .format() method.
+the :meth:`str.format` method.
 
 Formatted string literals may be concatenated, but replacement fields
 cannot be split across literals.
@@ -724,9 +738,22 @@
    >>> today = datetime(year=2017, month=1, day=27)
    >>> f"{today:%B %d, %Y}"  # using date format specifier
    'January 27, 2017'
+   >>> f"{today=:%B %d, %Y}" # using date format specifier and debugging
+   'today=January 27, 2017'
    >>> number = 1024
    >>> f"{number:#0x}"  # using integer format specifier
    '0x400'
+   >>> foo = "bar"
+   >>> f"{ foo = }" # preserves whitespace
+   " foo = 'bar'"
+   >>> line = "The mill's closed"
+   >>> f"{line = }"
+   'line = "The mill\'s closed"'
+   >>> f"{line = :20}"
+   "line = The mill's closed   "
+   >>> f"{line = !r:20}"
+   'line = "The mill\'s closed" '
+
 
 A consequence of sharing the same syntax as regular string literals is
 that characters in the replacement fields must not conflict with the
@@ -793,7 +820,7 @@
 
 Integer literals are described by the following lexical definitions:
 
-.. productionlist::
+.. productionlist:: python-grammar
    integer: `decinteger` | `bininteger` | `octinteger` | `hexinteger`
    decinteger: `nonzerodigit` (["_"] `digit`)* | "0"+ (["_"] "0")*
    bininteger: "0" ("b" | "B") (["_"] `bindigit`)+
@@ -837,7 +864,7 @@
 
 Floating point literals are described by the following lexical definitions:
 
-.. productionlist::
+.. productionlist:: python-grammar
    floatnumber: `pointfloat` | `exponentfloat`
    pointfloat: [`digitpart`] `fraction` | `digitpart` "."
    exponentfloat: (`digitpart` | `pointfloat`) `exponent`
@@ -867,7 +894,7 @@
 
 Imaginary literals are described by the following lexical definitions:
 
-.. productionlist::
+.. productionlist:: python-grammar
    imagnumber: (`floatnumber` | `digitpart`) ("j" | "J")
 
 An imaginary literal yields a complex number with a real part of 0.0.  Complex
@@ -934,4 +961,4 @@
 
 .. rubric:: Footnotes
 
-.. [#] http://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt
+.. [#] https://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt
diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst
index a8ec0fb..f8ab2e9 100644
--- a/Doc/reference/simple_stmts.rst
+++ b/Doc/reference/simple_stmts.rst
@@ -11,7 +11,7 @@
 statements may occur on a single line separated by semicolons.  The syntax for
 simple statements is:
 
-.. productionlist::
+.. productionlist:: python-grammar
    simple_stmt: `expression_stmt`
               : | `assert_stmt`
               : | `assignment_stmt`
@@ -46,7 +46,7 @@
 expression statements are allowed and occasionally useful.  The syntax for an
 expression statement is:
 
-.. productionlist::
+.. productionlist:: python-grammar
    expression_stmt: `starred_expression`
 
 An expression statement evaluates the expression list (which may be a single
@@ -82,7 +82,7 @@
 Assignment statements are used to (re)bind names to values and to modify
 attributes or items of mutable objects:
 
-.. productionlist::
+.. productionlist:: python-grammar
    assignment_stmt: (`target_list` "=")+ (`starred_expression` | `yield_expression`)
    target_list: `target` ("," `target`)* [","]
    target: `identifier`
@@ -280,7 +280,7 @@
 Augmented assignment is the combination, in a single statement, of a binary
 operation and an assignment statement:
 
-.. productionlist::
+.. productionlist:: python-grammar
    augmented_assignment_stmt: `augtarget` `augop` (`expression_list` | `yield_expression`)
    augtarget: `identifier` | `attributeref` | `subscription` | `slicing`
    augop: "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="
@@ -328,7 +328,7 @@
 :term:`Annotation <variable annotation>` assignment is the combination, in a single
 statement, of a variable or attribute annotation and an optional assignment statement:
 
-.. productionlist::
+.. productionlist:: python-grammar
    annotated_assignment_stmt: `augtarget` ":" `expression`
                             : ["=" (`starred_expression` | `yield_expression`)]
 
@@ -385,7 +385,7 @@
 Assert statements are a convenient way to insert debugging assertions into a
 program:
 
-.. productionlist::
+.. productionlist:: python-grammar
    assert_stmt: "assert" `expression` ["," `expression`]
 
 The simple form, ``assert expression``, is equivalent to ::
@@ -425,7 +425,7 @@
    pair: null; operation
            pair: null; operation
 
-.. productionlist::
+.. productionlist:: python-grammar
    pass_stmt: "pass"
 
 :keyword:`pass` is a null operation --- when it is executed, nothing happens.
@@ -447,7 +447,7 @@
    pair: deletion; target
    triple: deletion; target; list
 
-.. productionlist::
+.. productionlist:: python-grammar
    del_stmt: "del" `target_list`
 
 Deletion is recursively defined very similar to the way assignment is defined.
@@ -486,7 +486,7 @@
    pair: function; definition
    pair: class; definition
 
-.. productionlist::
+.. productionlist:: python-grammar
    return_stmt: "return" [`expression_list`]
 
 :keyword:`return` may only occur syntactically nested in a function definition,
@@ -525,7 +525,7 @@
    single: function; generator
    exception: StopIteration
 
-.. productionlist::
+.. productionlist:: python-grammar
    yield_stmt: `yield_expression`
 
 A :keyword:`yield` statement is semantically equivalent to a :ref:`yield
@@ -560,7 +560,7 @@
    pair: raising; exception
    single: __traceback__ (exception attribute)
 
-.. productionlist::
+.. productionlist:: python-grammar
    raise_stmt: "raise" [`expression` ["from" `expression`]]
 
 If no expressions are present, :keyword:`raise` re-raises the last exception
@@ -663,7 +663,7 @@
    statement: while
    pair: loop; statement
 
-.. productionlist::
+.. productionlist:: python-grammar
    break_stmt: "break"
 
 :keyword:`break` may only occur syntactically nested in a :keyword:`for` or
@@ -698,7 +698,7 @@
    pair: loop; statement
    keyword: finally
 
-.. productionlist::
+.. productionlist:: python-grammar
    continue_stmt: "continue"
 
 :keyword:`continue` may only occur syntactically nested in a :keyword:`for` or
@@ -725,7 +725,7 @@
    exception: ImportError
    single: , (comma); import statement
 
-.. productionlist::
+.. productionlist:: python-grammar
    import_stmt: "import" `module` ["as" `identifier`] ("," `module` ["as" `identifier`])*
               : | "from" `relative_module` "import" `identifier` ["as" `identifier`]
               : ("," `identifier` ["as" `identifier`])*
@@ -859,7 +859,7 @@
 features on a per-module basis before the release in which the feature becomes
 standard.
 
-.. productionlist:: *
+.. productionlist:: python-grammar
    future_stmt: "from" "__future__" "import" `feature` ["as" `identifier`]
               : ("," `feature` ["as" `identifier`])*
               : | "from" "__future__" "import" "(" `feature` ["as" `identifier`]
@@ -874,8 +874,8 @@
 * blank lines, and
 * other future statements.
 
-The only feature in Python 3.7 that requires using the future statement is
-``annotations``.
+The only feature that requires using the future statement is
+``annotations`` (see :pep:`563`).
 
 All historical features enabled by the future statement are still recognized
 by Python 3.  The list includes ``absolute_import``, ``division``,
@@ -937,7 +937,7 @@
    triple: global; name; binding
    single: , (comma); identifier list
 
-.. productionlist::
+.. productionlist:: python-grammar
    global_stmt: "global" `identifier` ("," `identifier`)*
 
 The :keyword:`global` statement is a declaration which holds for the entire
@@ -982,7 +982,7 @@
 .. index:: statement: nonlocal
    single: , (comma); identifier list
 
-.. productionlist::
+.. productionlist:: python-grammar
    nonlocal_stmt: "nonlocal" `identifier` ("," `identifier`)*
 
 .. XXX add when implemented
diff --git a/Doc/reference/toplevel_components.rst b/Doc/reference/toplevel_components.rst
index d5ffb37..319c9de 100644
--- a/Doc/reference/toplevel_components.rst
+++ b/Doc/reference/toplevel_components.rst
@@ -66,7 +66,7 @@
 
 All input read from non-interactive files has the same form:
 
-.. productionlist::
+.. productionlist:: python-grammar
    file_input: (NEWLINE | `statement`)*
 
 This syntax is used in the following situations:
@@ -85,7 +85,7 @@
 
 Input in interactive mode is parsed using the following grammar:
 
-.. productionlist::
+.. productionlist:: python-grammar
    interactive_input: [`stmt_list`] NEWLINE | `compound_stmt` NEWLINE
 
 Note that a (top-level) compound statement must be followed by a blank line in
@@ -103,5 +103,5 @@
 :func:`eval` is used for expression input.  It ignores leading whitespace. The
 string argument to :func:`eval` must have the following form:
 
-.. productionlist::
+.. productionlist:: python-grammar
    eval_input: `expression_list` NEWLINE*
diff --git a/Doc/requirements.txt b/Doc/requirements.txt
new file mode 100644
index 0000000..47b78ee
--- /dev/null
+++ b/Doc/requirements.txt
@@ -0,0 +1,12 @@
+# Requirements to build the Python documentation
+
+# Sphinx version is pinned so that new versions that introduce new warnings
+# won't suddenly cause build failures. Updating the version is fine as long
+# as no warnings are raised by doing so.
+sphinx==2.4.4
+
+blurb
+
+# The theme used by the documentation is stored separately, so we need
+# to install that as well.
+python-docs-theme
diff --git a/Doc/runtime.txt b/Doc/runtime.txt
new file mode 100644
index 0000000..548d713
--- /dev/null
+++ b/Doc/runtime.txt
@@ -0,0 +1 @@
+3.7
\ No newline at end of file
diff --git a/Doc/tools/extensions/asdl_highlight.py b/Doc/tools/extensions/asdl_highlight.py
new file mode 100644
index 0000000..b1989e5
--- /dev/null
+++ b/Doc/tools/extensions/asdl_highlight.py
@@ -0,0 +1,54 @@
+import os
+import sys
+from pathlib import Path
+
+CPYTHON_ROOT = Path(__file__).resolve().parent.parent.parent.parent
+sys.path.append(str(CPYTHON_ROOT / "Parser"))
+
+from pygments.lexer import RegexLexer, bygroups, include, words
+from pygments.token import (Comment, Generic, Keyword, Name, Operator,
+                            Punctuation, Text)
+
+from asdl import builtin_types
+from sphinx.highlighting import lexers
+
+class ASDLLexer(RegexLexer):
+    name = "ASDL"
+    aliases = ["asdl"]
+    filenames = ["*.asdl"]
+    _name = r"([^\W\d]\w*)"
+    _text_ws = r"(\s*)"
+
+    tokens = {
+        "ws": [
+            (r"\n", Text),
+            (r"\s+", Text),
+            (r"--.*?$", Comment.Singleline),
+        ],
+        "root": [
+            include("ws"),
+            (
+                r"(module)" + _text_ws + _name,
+                bygroups(Keyword, Text, Name.Tag),
+            ),
+            (
+                r"(\w+)(\*\s|\?\s|\s)(\w+)",
+                bygroups(Name.Builtin.Pseudo, Operator, Name),
+            ),
+            (words(builtin_types), Name.Builtin),
+            (r"attributes", Name.Builtin),
+            (
+                _name + _text_ws + "(=)",
+                bygroups(Name, Text, Operator),
+            ),
+            (_name, Name.Class),
+            (r"\|", Operator),
+            (r"{|}|\(|\)", Punctuation),
+            (r".", Text),
+        ],
+    }
+
+
+def setup(app):
+    lexers["asdl"] = ASDLLexer()
+    return {'version': '1.0', 'parallel_read_safe': True}
diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py
index fa8244a..76c9d92 100644
--- a/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py
@@ -79,9 +79,9 @@
                                               classes=['stableabi']))
             if par['objtype'] != 'function':
                 continue
-            if not par[0].has_key('names') or not par[0]['names']:
+            if not par[0].has_key('ids') or not par[0]['ids']:
                 continue
-            name = par[0]['names'][0]
+            name = par[0]['ids'][0]
             if name.startswith("c."):
                 name = name[2:]
             entry = self.get(name)
diff --git a/Doc/tools/extensions/peg_highlight.py b/Doc/tools/extensions/peg_highlight.py
new file mode 100644
index 0000000..8bc2467
--- /dev/null
+++ b/Doc/tools/extensions/peg_highlight.py
@@ -0,0 +1,75 @@
+from pygments.lexer import RegexLexer, bygroups, include
+from pygments.token import Comment, Generic, Keyword, Name, Operator, Punctuation, Text
+
+from sphinx.highlighting import lexers
+
+
+class PEGLexer(RegexLexer):
+    """Pygments Lexer for PEG grammar (.gram) files
+
+    This lexer strips the following elements from the grammar:
+
+        - Meta-tags
+        - Variable assignments
+        - Actions
+        - Lookaheads
+        - Rule types
+        - Rule options
+        - Rules named `invalid_*` or `incorrect_*`
+    """
+
+    name = "PEG"
+    aliases = ["peg"]
+    filenames = ["*.gram"]
+    _name = r"([^\W\d]\w*)"
+    _text_ws = r"(\s*)"
+
+    tokens = {
+        "ws": [(r"\n", Text), (r"\s+", Text), (r"#.*$", Comment.Singleline),],
+        "lookaheads": [
+            (r"(?<=\|\s)(&\w+\s?)", bygroups(None)),
+            (r"(?<=\|\s)(&'.+'\s?)", bygroups(None)),
+            (r'(?<=\|\s)(&".+"\s?)', bygroups(None)),
+            (r"(?<=\|\s)(&\(.+\)\s?)", bygroups(None)),
+        ],
+        "metas": [
+            (r"(@\w+ '''(.|\n)+?''')", bygroups(None)),
+            (r"^(@.*)$", bygroups(None)),
+        ],
+        "actions": [(r"{(.|\n)+?}", bygroups(None)),],
+        "strings": [
+            (r"'\w+?'", Keyword),
+            (r'"\w+?"', Keyword),
+            (r"'\W+?'", Text),
+            (r'"\W+?"', Text),
+        ],
+        "variables": [(_name + _text_ws + "(=)", bygroups(None, None, None),),],
+        "invalids": [
+            (r"^(\s+\|\s+invalid_\w+\s*\n)", bygroups(None)),
+            (r"^(\s+\|\s+incorrect_\w+\s*\n)", bygroups(None)),
+            (r"^(#.*invalid syntax.*(?:.|\n)*)", bygroups(None),),
+        ],
+        "root": [
+            include("invalids"),
+            include("ws"),
+            include("lookaheads"),
+            include("metas"),
+            include("actions"),
+            include("strings"),
+            include("variables"),
+            (r"\b(?!(NULL|EXTRA))([A-Z_]+)\b\s*(?!\()", Text,),
+            (
+                r"^\s*" + _name + r"\s*" + r"(\[.*\])?" + r"\s*" + r"(\(.+\))?" + r"\s*(:)",
+                bygroups(Name.Function, None, None, Punctuation),
+            ),
+            (_name, Name.Function),
+            (r"[\||\.|\+|\*|\?]", Operator),
+            (r"{|}|\(|\)|\[|\]", Punctuation),
+            (r".", Text),
+        ],
+    }
+
+
+def setup(app):
+    lexers["peg"] = PEGLexer()
+    return {"version": "1.0", "parallel_read_safe": True}
diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py
index a128c70..2fad9ec 100644
--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -31,7 +31,12 @@
 from sphinx.util.nodes import split_explicit_title
 from sphinx.writers.text import TextWriter, TextTranslator
 from sphinx.writers.latex import LaTeXTranslator
-from sphinx.domains.python import PyModulelevel, PyClassmember
+
+try:
+    from sphinx.domains.python import PyFunction, PyMethod
+except ImportError:
+    from sphinx.domains.python import PyClassmember as PyMethod
+    from sphinx.domains.python import PyModulelevel as PyFunction
 
 # Support for checking for suspicious markup
 
@@ -39,7 +44,7 @@
 
 
 ISSUE_URI = 'https://bugs.python.org/issue%s'
-SOURCE_URI = 'https://github.com/python/cpython/tree/3.8/%s'
+SOURCE_URI = 'https://github.com/python/cpython/tree/3.9/%s'
 
 # monkey-patch reST parser to disable alphabetic and roman enumerated lists
 from docutils.parsers.rst.states import Body
@@ -238,17 +243,18 @@
         return False
 
 
-class PyDecoratorFunction(PyDecoratorMixin, PyModulelevel):
+class PyDecoratorFunction(PyDecoratorMixin, PyFunction):
     def run(self):
         # a decorator function is a function after all
         self.name = 'py:function'
-        return PyModulelevel.run(self)
+        return PyFunction.run(self)
 
 
-class PyDecoratorMethod(PyDecoratorMixin, PyClassmember):
+# TODO: Use sphinx.domains.python.PyDecoratorMethod when possible
+class PyDecoratorMethod(PyDecoratorMixin, PyMethod):
     def run(self):
         self.name = 'py:method'
-        return PyClassmember.run(self)
+        return PyMethod.run(self)
 
 
 class PyCoroutineMixin(object):
@@ -265,31 +271,31 @@
         return ret
 
 
-class PyCoroutineFunction(PyCoroutineMixin, PyModulelevel):
+class PyCoroutineFunction(PyCoroutineMixin, PyFunction):
     def run(self):
         self.name = 'py:function'
-        return PyModulelevel.run(self)
+        return PyFunction.run(self)
 
 
-class PyCoroutineMethod(PyCoroutineMixin, PyClassmember):
+class PyCoroutineMethod(PyCoroutineMixin, PyMethod):
     def run(self):
         self.name = 'py:method'
-        return PyClassmember.run(self)
+        return PyMethod.run(self)
 
 
-class PyAwaitableFunction(PyAwaitableMixin, PyClassmember):
+class PyAwaitableFunction(PyAwaitableMixin, PyFunction):
     def run(self):
         self.name = 'py:function'
-        return PyClassmember.run(self)
+        return PyFunction.run(self)
 
 
-class PyAwaitableMethod(PyAwaitableMixin, PyClassmember):
+class PyAwaitableMethod(PyAwaitableMixin, PyMethod):
     def run(self):
         self.name = 'py:method'
-        return PyClassmember.run(self)
+        return PyMethod.run(self)
 
 
-class PyAbstractMethod(PyClassmember):
+class PyAbstractMethod(PyMethod):
 
     def handle_signature(self, sig, signode):
         ret = super(PyAbstractMethod, self).handle_signature(sig, signode)
@@ -299,7 +305,7 @@
 
     def run(self):
         self.name = 'py:method'
-        return PyClassmember.run(self)
+        return PyMethod.run(self)
 
 
 # Support for documenting version of removal in deprecations
diff --git a/Doc/tools/static/switchers.js b/Doc/tools/static/switchers.js
index c51f178..1a1c7d0 100644
--- a/Doc/tools/static/switchers.js
+++ b/Doc/tools/static/switchers.js
@@ -15,7 +15,6 @@
     '3.8': '3.8',
     '3.7': '3.7',
     '3.6': '3.6',
-    '3.5': '3.5',
     '2.7': '2.7',
   };
 
diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv
index 33fbaf6..c9777c6 100644
--- a/Doc/tools/susp-ignored.csv
+++ b/Doc/tools/susp-ignored.csv
@@ -5,14 +5,13 @@
 c-api/tuple,,:high,p[low:high]
 c-api/unicode,,:end,str[start:end]
 c-api/unicode,,:start,unicode[start:start+length]
-distutils/examples,267,`,This is the description of the ``foobar`` package.
+distutils/examples,,`,This is the description of the ``foobar`` package.
 distutils/setupscript,,::,
 extending/embedding,,:numargs,"if(!PyArg_ParseTuple(args, "":numargs""))"
 extending/extending,,:myfunction,"PyArg_ParseTuple(args, ""D:myfunction"", &c);"
 extending/extending,,:set,"if (PyArg_ParseTuple(args, ""O:set_callback"", &temp)) {"
 extending/newtypes,,:call,"if (!PyArg_ParseTuple(args, ""sss:call"", &arg1, &arg2, &arg3)) {"
 faq/programming,,:chr,">=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr("
-faq/programming,,::,for x in sequence[::-1]:
 faq/programming,,:reduce,"print((lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,"
 faq/programming,,:reduce,"Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,"
 faq/windows,,:d48eceb,"Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32"
@@ -24,6 +23,9 @@
 howto/curses,,:magenta,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
 howto/curses,,:cyan,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
 howto/curses,,:white,"2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan, and 7:white.  The"
+howto/descriptor,,:root,"INFO:root"
+howto/descriptor,,:Updating,"root:Updating"
+howto/descriptor,,:Accessing,"root:Accessing"
 howto/instrumentation,,::,python$target:::function-entry
 howto/instrumentation,,:function,python$target:::function-entry
 howto/instrumentation,,::,python$target:::function-return
@@ -82,6 +84,7 @@
 howto/ipaddress,,:ffff,IPv6Address('2001:db8::ffff:ffff')
 howto/logging,,:And,"WARNING:And this, too"
 howto/logging,,:And,"WARNING:root:And this, too"
+howto/logging,,:And,"ERROR:root:And non-ASCII stuff, too, like "
 howto/logging,,:Doing,INFO:root:Doing something
 howto/logging,,:Finished,INFO:root:Finished
 howto/logging,,:logger,severity:logger name:message
@@ -91,6 +94,7 @@
 howto/logging,,:root,INFO:root:Doing something
 howto/logging,,:root,INFO:root:Finished
 howto/logging,,:root,INFO:root:So should this
+howto/logging,,:root,"ERROR:root:And non-ASCII stuff, too, like "
 howto/logging,,:root,INFO:root:Started
 howto/logging,,:root,"WARNING:root:And this, too"
 howto/logging,,:root,WARNING:root:Look before you leap!
@@ -106,6 +110,8 @@
 howto/regex,,::,
 howto/regex,,:foo,(?:foo)
 howto/urllib2,,:password,"""joe:password@example.com"""
+library/ast,,:upper,lower:upper
+library/ast,,:step,lower:upper:step
 library/audioop,,:ipos,"# factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)],"
 library/bisect,32,:hi,all(val >= x for val in a[i:hi])
 library/bisect,42,:hi,all(val > x for val in a[i:hi])
@@ -143,8 +149,12 @@
 library/ipaddress,,::,IPv6Address('2001:db8::')
 library/ipaddress,,:db8,>>> ipaddress.IPv6Address('2001:db8::1000')
 library/ipaddress,,::,>>> ipaddress.IPv6Address('2001:db8::1000')
-library/ipaddress,,:db8,IPv6Address('2001:db8::1000')
-library/ipaddress,,::,IPv6Address('2001:db8::1000')
+library/ipaddress,,:db8,'2001:db8::1000'
+library/ipaddress,,::,'2001:db8::1000'
+library/ipaddress,231,:db8,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'"
+library/ipaddress,231,::,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'"
+library/ipaddress,,::,IPv6Address('ff02::5678%1')
+library/ipaddress,,::,fe80::1234
 library/ipaddress,,:db8,">>> ipaddress.ip_address(""2001:db8::1"").reverse_pointer"
 library/ipaddress,,::,">>> ipaddress.ip_address(""2001:db8::1"").reverse_pointer"
 library/ipaddress,,::,"""::abc:7:def"""
diff --git a/Doc/tools/templates/customsourcelink.html b/Doc/tools/templates/customsourcelink.html
index 21af621..fca44e9 100644
--- a/Doc/tools/templates/customsourcelink.html
+++ b/Doc/tools/templates/customsourcelink.html
@@ -4,7 +4,7 @@
     <ul class="this-page-menu">
       <li><a href="{{ pathto('bugs') }}">{% trans %}Report a Bug{% endtrans %}</a></li>
       <li>
-        <a href="https://github.com/python/cpython/blob/{{ version }}/Doc/{{ sourcename|replace('.rst.txt', '.rst') }}"
+        <a href="https://github.com/python/cpython/blob/master/Doc/{{ sourcename|replace('.rst.txt', '.rst') }}"
             rel="nofollow">{{ _('Show Source') }}
         </a>
       </li>
diff --git a/Doc/tools/templates/indexsidebar.html b/Doc/tools/templates/indexsidebar.html
index 7a40be7..1c1cb54 100644
--- a/Doc/tools/templates/indexsidebar.html
+++ b/Doc/tools/templates/indexsidebar.html
@@ -7,7 +7,6 @@
   <li><a href="https://docs.python.org/3.8/">{% trans %}Python 3.8 (stable){% endtrans %}</a></li>
   <li><a href="https://docs.python.org/3.7/">{% trans %}Python 3.7 (stable){% endtrans %}</a></li>
   <li><a href="https://docs.python.org/3.6/">{% trans %}Python 3.6 (security-fixes){% endtrans %}</a></li>
-  <li><a href="https://docs.python.org/3.5/">{% trans %}Python 3.5 (security-fixes){% endtrans %}</a></li>
   <li><a href="https://docs.python.org/2.7/">{% trans %}Python 2.7 (EOL){% endtrans %}</a></li>
   <li><a href="https://www.python.org/doc/versions/">{% trans %}All versions{% endtrans %}</a></li>
 </ul>
diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst
index 685552f..0d780e3 100644
--- a/Doc/tutorial/classes.rst
+++ b/Doc/tutorial/classes.rst
@@ -849,7 +849,7 @@
 Generators
 ==========
 
-:term:`Generator`\s are a simple and powerful tool for creating iterators.  They
+:term:`Generators <generator>` are a simple and powerful tool for creating iterators.  They
 are written like regular functions but use the :keyword:`yield` statement
 whenever they want to return data.  Each time :func:`next` is called on it, the
 generator resumes where it left off (it remembers all the data values and which
diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst
index de2c73a..3af288a 100644
--- a/Doc/tutorial/controlflow.rst
+++ b/Doc/tutorial/controlflow.rst
@@ -207,15 +207,15 @@
     ...     if num % 2 == 0:
     ...         print("Found an even number", num)
     ...         continue
-    ...     print("Found a number", num)
+    ...     print("Found an odd number", num)
     Found an even number 2
-    Found a number 3
+    Found an odd number 3
     Found an even number 4
-    Found a number 5
+    Found an odd number 5
     Found an even number 6
-    Found a number 7
+    Found an odd number 7
     Found an even number 8
-    Found a number 9
+    Found an odd number 9
 
 .. _tut-pass:
 
@@ -658,7 +658,7 @@
         return 'name' in kwds
 
 There is no possible call that will make it return ``True`` as the keyword ``'name'``
-will always to bind to the first parameter. For example::
+will always bind to the first parameter. For example::
 
     >>> foo(1, **{'name': 2})
     Traceback (most recent call last):
diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst
index 0edb73a..5c6b65f 100644
--- a/Doc/tutorial/datastructures.rst
+++ b/Doc/tutorial/datastructures.rst
@@ -78,7 +78,7 @@
    Return the number of times *x* appears in the list.
 
 
-.. method:: list.sort(key=None, reverse=False)
+.. method:: list.sort(*, key=None, reverse=False)
    :noindex:
 
    Sort the items of the list in place (the arguments can be used for sort
@@ -614,6 +614,21 @@
 returns a new sorted list while leaving the source unaltered. ::
 
    >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
+   >>> for i in sorted(basket):
+   ...     print(i)
+   ...
+   apple
+   apple
+   banana
+   orange
+   orange
+   pear
+
+Using :func:`set` on a sequence eliminates duplicate elements. The use of
+:func:`sorted` in combination with :func:`set` over a sequence is an idiomatic
+way to loop over unique elements of the sequence in sorted order. ::
+
+   >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
    >>> for f in sorted(set(basket)):
    ...     print(f)
    ...
diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst
index 27c67c6..efe44da 100644
--- a/Doc/tutorial/errors.rst
+++ b/Doc/tutorial/errors.rst
@@ -67,7 +67,7 @@
 caused it.
 
 The preceding part of the error message shows the context where the exception
-happened, in the form of a stack traceback. In general it contains a stack
+occurred, in the form of a stack traceback. In general it contains a stack
 traceback listing source lines; however, it will not display lines read from
 standard input.
 
@@ -267,6 +267,54 @@
    NameError: HiThere
 
 
+.. _tut-exception-chaining:
+
+Exception Chaining
+==================
+
+The :keyword:`raise` statement allows an optional :keyword:`from` which enables
+chaining exceptions. For example::
+
+    # exc must be exception instance or None.
+    raise RuntimeError from exc
+
+This can be useful when you are transforming exceptions. For example::
+
+    >>> def func():
+    ...     raise IOError
+    ...
+    >>> try:
+    ...     func()
+    ... except IOError as exc:
+    ...     raise RuntimeError('Failed to open database') from exc
+    ...
+    Traceback (most recent call last):
+      File "<stdin>", line 2, in <module>
+      File "<stdin>", line 2, in func
+    OSError
+    <BLANKLINE>
+    The above exception was the direct cause of the following exception:
+    <BLANKLINE>
+    Traceback (most recent call last):
+      File "<stdin>", line 4, in <module>
+    RuntimeError: Failed to open database
+
+Exception chaining happens automatically when an exception is raised inside an
+:keyword:`except` or :keyword:`finally` section. Exception chaining can be
+disabled by using ``from None`` idiom:
+
+    >>> try:
+    ...     open('database.sqlite')
+    ... except IOError:
+    ...     raise RuntimeError from None
+    ...
+    Traceback (most recent call last):
+      File "<stdin>", line 4, in <module>
+    RuntimeError
+
+For more information about chaining mechanics, see :ref:`bltin-exceptions`.
+
+
 .. _tut-userexceptions:
 
 User-defined Exceptions
diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst
index 366a532..4e27cff 100644
--- a/Doc/tutorial/inputoutput.rst
+++ b/Doc/tutorial/inputoutput.rst
@@ -329,11 +329,16 @@
 
 If you're not using the :keyword:`with` keyword, then you should call
 ``f.close()`` to close the file and immediately free up any system
-resources used by it. If you don't explicitly close a file, Python's
-garbage collector will eventually destroy the object and close the
-open file for you, but the file may stay open for a while.  Another
-risk is that different Python implementations will do this clean-up at
-different times.
+resources used by it.
+
+.. warning::
+   Calling ``f.write()`` without using the :keyword:`!with` keyword or calling
+   ``f.close()`` **might** result in the arguments
+   of ``f.write()`` not being completely written to the disk, even if the
+   program exits successfully.
+
+..
+   See also https://bugs.python.org/issue17852
 
 After a file object is closed, either by a :keyword:`with` statement
 or by calling ``f.close()``, attempts to use the file object will
diff --git a/Doc/tutorial/interpreter.rst b/Doc/tutorial/interpreter.rst
index 501fb6a..b78d296 100644
--- a/Doc/tutorial/interpreter.rst
+++ b/Doc/tutorial/interpreter.rst
@@ -10,13 +10,13 @@
 Invoking the Interpreter
 ========================
 
-The Python interpreter is usually installed as :file:`/usr/local/bin/python3.8`
+The Python interpreter is usually installed as :file:`/usr/local/bin/python3.9`
 on those machines where it is available; putting :file:`/usr/local/bin` in your
 Unix shell's search path makes it possible to start it by typing the command:
 
 .. code-block:: text
 
-   python3.8
+   python3.9
 
 to the shell. [#]_ Since the choice of the directory where the interpreter lives
 is an installation option, other places are possible; check with your local
@@ -24,7 +24,7 @@
 popular alternative location.)
 
 On Windows machines where you have installed Python from the :ref:`Microsoft Store
-<windows-store>`, the :file:`python3.8` command will be available. If you have
+<windows-store>`, the :file:`python3.9` command will be available. If you have
 the :ref:`py.exe launcher <launcher>` installed, you can use the :file:`py`
 command. See :ref:`setting-envvars` for other ways to launch Python.
 
@@ -97,8 +97,8 @@
 
 .. code-block:: shell-session
 
-   $ python3.8
-   Python 3.8 (default, Sep 16 2015, 09:25:04)
+   $ python3.9
+   Python 3.9 (default, June 4 2019, 09:25:04)
    [GCC 4.8.2] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst
index d0a68fa..af595e5 100644
--- a/Doc/tutorial/modules.rst
+++ b/Doc/tutorial/modules.rst
@@ -306,23 +306,27 @@
    >>> dir(fibo)
    ['__name__', 'fib', 'fib2']
    >>> dir(sys)  # doctest: +NORMALIZE_WHITESPACE
-   ['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
-    '__package__', '__stderr__', '__stdin__', '__stdout__',
-    '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
-    '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
-    'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
-    'call_tracing', 'callstats', 'copyright', 'displayhook',
-    'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
-    'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
-    'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
-    'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
-    'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
+   ['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__',
+    '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__',
+    '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__',
+    '_clear_type_cache', '_current_frames', '_debugmallocstats', '_framework',
+    '_getframe', '_git', '_home', '_xoptions', 'abiflags', 'addaudithook',
+    'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix',
+    'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing',
+    'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info',
+    'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info',
+    'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth',
+    'getallocatedblocks', 'getdefaultencoding', 'getdlopenflags',
+    'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile',
+    'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval',
     'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
-    'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
-    'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
-    'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
-    'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
-    'thread_info', 'version', 'version_info', 'warnoptions']
+    'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value',
+    'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks',
+    'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'pycache_prefix',
+    'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setdlopenflags',
+    'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr',
+    'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info',
+    'warnoptions']
 
 Without arguments, :func:`dir` lists the names you have defined currently::
 
diff --git a/Doc/tutorial/stdlib.rst b/Doc/tutorial/stdlib.rst
index 1b89056..a52653b 100644
--- a/Doc/tutorial/stdlib.rst
+++ b/Doc/tutorial/stdlib.rst
@@ -15,7 +15,7 @@
 
    >>> import os
    >>> os.getcwd()      # Return the current working directory
-   'C:\\Python38'
+   'C:\\Python39'
    >>> os.chdir('/server/accesslogs')   # Change current working directory
    >>> os.system('mkdir today')   # Run the command mkdir in the system shell
    0
diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst
index d2ac57b..2994828 100644
--- a/Doc/tutorial/stdlib2.rst
+++ b/Doc/tutorial/stdlib2.rst
@@ -278,7 +278,7 @@
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
        d['primary']                # entry was automatically removed
-     File "C:/python38/lib/weakref.py", line 46, in __getitem__
+     File "C:/python39/lib/weakref.py", line 46, in __getitem__
        o = self.data[key]()
    KeyError: 'primary'
 
diff --git a/Doc/tutorial/venv.rst b/Doc/tutorial/venv.rst
index 558076d..f422146 100644
--- a/Doc/tutorial/venv.rst
+++ b/Doc/tutorial/venv.rst
@@ -116,7 +116,7 @@
 
 .. code-block:: bash
 
-  (tutorial-env) $ pip install novas
+  (tutorial-env) $ python -m pip install novas
   Collecting novas
     Downloading novas-3.1.1.3.tar.gz (136kB)
   Installing collected packages: novas
@@ -128,7 +128,7 @@
 
 .. code-block:: bash
 
-  (tutorial-env) $ pip install requests==2.6.0
+  (tutorial-env) $ python -m pip install requests==2.6.0
   Collecting requests==2.6.0
     Using cached requests-2.6.0-py2.py3-none-any.whl
   Installing collected packages: requests
@@ -141,7 +141,7 @@
 
 .. code-block:: bash
 
-  (tutorial-env) $ pip install --upgrade requests
+  (tutorial-env) $ python -m pip install --upgrade requests
   Collecting requests
   Installing collected packages: requests
     Found existing installation: requests 2.6.0
@@ -199,7 +199,7 @@
 
 .. code-block:: bash
 
-  (tutorial-env) $ pip install -r requirements.txt
+  (tutorial-env) $ python -m pip install -r requirements.txt
   Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
     ...
   Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index d3f0400..95342f3 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -426,6 +426,8 @@
    defines the following possible values:
 
    * ``-X faulthandler`` to enable :mod:`faulthandler`;
+   * ``-X oldparser``: enable the traditional LL(1) parser.  See also
+     :envvar:`PYTHONOLDPARSER` and :pep:`617`.
    * ``-X showrefcount`` to output the total reference count and number of used
      memory blocks when the program finishes or after each statement in the
      interactive interpreter. This only works on debug builds.
@@ -434,29 +436,14 @@
      stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start
      tracing with a traceback limit of *NFRAME* frames. See the
      :func:`tracemalloc.start` for more information.
-   * ``-X showalloccount`` to output the total count of allocated objects for
-     each type when the program finishes. This only works when Python was built with
-     ``COUNT_ALLOCS`` defined.
    * ``-X importtime`` to show how long each import takes. It shows module
      name, cumulative time (including nested imports) and self time (excluding
      nested imports).  Note that its output may be broken in multi-threaded
      application.  Typical usage is ``python3 -X importtime -c 'import
      asyncio'``.  See also :envvar:`PYTHONPROFILEIMPORTTIME`.
-   * ``-X dev``: enable CPython's "development mode", introducing additional
-     runtime checks which are too expensive to be enabled by default. It should
-     not be more verbose than the default if the code is correct: new warnings
-     are only emitted when an issue is detected. Effect of the developer mode:
-
-     * Add ``default`` warning filter, as :option:`-W` ``default``.
-     * Install debug hooks on memory allocators: see the
-       :c:func:`PyMem_SetupDebugHooks` C function.
-     * Enable the :mod:`faulthandler` module to dump the Python traceback
-       on a crash.
-     * Enable :ref:`asyncio debug mode <asyncio-debug-mode>`.
-     * Set the :attr:`~sys.flags.dev_mode` attribute of :attr:`sys.flags` to
-       ``True``.
-     * :class:`io.IOBase` destructor logs ``close()`` exceptions.
-
+   * ``-X dev``: enable :ref:`Python Development Mode <devmode>`, introducing
+     additional runtime checks that are too expensive to be enabled by
+     default.
    * ``-X utf8`` enables UTF-8 mode for operating system interfaces, overriding
      the default locale-aware mode. ``-X utf8=0`` explicitly disables UTF-8
      mode (even when it would otherwise activate automatically).
@@ -487,6 +474,15 @@
       The ``-X pycache_prefix`` option. The ``-X dev`` option now logs
       ``close()`` exceptions in :class:`io.IOBase` destructor.
 
+   .. versionchanged:: 3.9
+      Using ``-X dev`` option, check *encoding* and *errors* arguments on
+      string encoding and decoding operations.
+
+      The ``-X showalloccount`` option has been removed.
+
+   .. deprecated-removed:: 3.9 3.10
+      The ``-X oldparser`` option.
+
 
 Options you shouldn't use
 ~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -542,6 +538,14 @@
    within a Python program as the variable :data:`sys.path`.
 
 
+.. envvar:: PYTHONPLATLIBDIR
+
+   If this is set to a non-empty string, it overrides the :data:`sys.platlibdir`
+   value.
+
+   .. versionadded:: 3.9
+
+
 .. envvar:: PYTHONSTARTUP
 
    If this is the name of a readable file, the Python commands in that file are
@@ -551,7 +555,7 @@
    the interactive session.  You can also change the prompts :data:`sys.ps1` and
    :data:`sys.ps2` and the hook :data:`sys.__interactivehook__` in this file.
 
-   .. audit-event:: cpython.run_startup filename PYTHONSTARTUP
+   .. audit-event:: cpython.run_startup filename envvar-PYTHONSTARTUP
 
       Raises an :ref:`auditing event <auditing>` ``cpython.run_startup`` with
       the filename as the argument when called on startup.
@@ -583,6 +587,15 @@
    :option:`-d` multiple times.
 
 
+.. envvar:: PYTHONOLDPARSER
+
+   If this is set to a non-empty string, enable the traditional LL(1) parser.
+
+   See also the :option:`-X` ``oldparser`` option and :pep:`617`.
+
+   .. deprecated-removed:: 3.9 3.10
+
+
 .. envvar:: PYTHONINSPECT
 
    If this is set to a non-empty string it is equivalent to specifying the
@@ -883,8 +896,9 @@
 
 .. envvar:: PYTHONDEVMODE
 
-   If this environment variable is set to a non-empty string, enable the
-   CPython "development mode". See the :option:`-X` ``dev`` option.
+   If this environment variable is set to a non-empty string, enable
+   :ref:`Python Development Mode <devmode>`, introducing additional runtime
+   checks that are too expensive to be enabled by default.
 
    .. versionadded:: 3.7
 
diff --git a/Doc/using/mac.rst b/Doc/using/mac.rst
index 0253625..ead71e1 100644
--- a/Doc/using/mac.rst
+++ b/Doc/using/mac.rst
@@ -25,7 +25,7 @@
 
 What you get after installing is a number of things:
 
-* A :file:`Python 3.8` folder in your :file:`Applications` folder. In here
+* A :file:`Python 3.9` folder in your :file:`Applications` folder. In here
   you find IDLE, the development environment that is a standard part of official
   Python distributions; and PythonLauncher, which handles double-clicking Python
   scripts from the Finder.
@@ -92,7 +92,7 @@
 anything that has a GUI) need to be run in a special way. Use :program:`pythonw`
 instead of :program:`python` to start such scripts.
 
-With Python 3.8, you can use either :program:`python` or :program:`pythonw`.
+With Python 3.9, you can use either :program:`python` or :program:`pythonw`.
 
 
 Configuration
diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc
index c81aaf1..5e724cd 100644
--- a/Doc/using/venv-create.inc
+++ b/Doc/using/venv-create.inc
@@ -36,7 +36,7 @@
 The command, if run with ``-h``, will show the available options::
 
     usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
-                [--upgrade] [--without-pip] [--prompt PROMPT]
+                [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps]
                 ENV_DIR [ENV_DIR ...]
 
     Creates virtual Python environments in one or more target directories.
@@ -61,10 +61,15 @@
                             environment (pip is bootstrapped by default)
       --prompt PROMPT       Provides an alternative prompt prefix for this
                             environment.
+      --upgrade-deps        Upgrade core dependencies: pip setuptools to the
+                            latest version in PyPI
 
     Once an environment has been created, you may wish to activate it, e.g. by
     sourcing an activate script in its bin directory.
 
+.. versionchanged:: 3.9
+   Add ``--upgrade-deps`` option to upgrade pip + setuptools to the latest on PyPI
+
 .. versionchanged:: 3.4
    Installs pip by default, added the ``--without-pip``  and ``--copies``
    options
@@ -110,7 +115,7 @@
 +=============+=================+=========================================+
 | POSIX       | bash/zsh        | $ source <venv>/bin/activate            |
 +-------------+-----------------+-----------------------------------------+
-|             | fish            | $ . <venv>/bin/activate.fish            |
+|             | fish            | $ source <venv>/bin/activate.fish       |
 +-------------+-----------------+-----------------------------------------+
 |             | csh/tcsh        | $ source <venv>/bin/activate.csh        |
 +-------------+-----------------+-----------------------------------------+
diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst
index 5114a26..d0c342e 100644
--- a/Doc/using/windows.rst
+++ b/Doc/using/windows.rst
@@ -23,8 +23,8 @@
 
 As specified in :pep:`11`, a Python release only supports a Windows platform
 while Microsoft considers the platform under extended support. This means that
-Python |version| supports Windows Vista and newer. If you require Windows XP
-support then please install Python 3.4.
+Python |version| supports Windows 8.1 and newer. If you require Windows 7
+support, please install Python 3.8.
 
 There are a number of different installers available for Windows, each with
 certain benefits and downsides.
@@ -103,9 +103,9 @@
 
 In the latest versions of Windows, this limitation can be expanded to
 approximately 32,000 characters. Your administrator will need to activate the
-"Enable Win32 long paths" group policy, or set the registry value
-``HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled``
-to ``1``.
+"Enable Win32 long paths" group policy, or set ``LongPathsEnabled`` to ``1``
+in the registry key
+``HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem``.
 
 This allows the :func:`open` function, the :mod:`os` module and most other
 path functionality to accept and return paths longer than 260 characters.
@@ -212,13 +212,13 @@
 For example, to silently install a default, system-wide Python installation,
 you could use the following command (from an elevated command prompt)::
 
-    python-3.8.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
+    python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
 
 To allow users to easily install a personal copy of Python without the test
 suite, you could provide a shortcut with the following command. This will
 display a simplified initial page and disallow customization::
 
-    python-3.8.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
+    python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
         SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
 
 (Note that omitting the launcher also omits file associations, and is only
@@ -255,13 +255,13 @@
 useful to have a locally cached copy.
 
 Execute the following command from Command Prompt to download all possible
-required files.  Remember to substitute ``python-3.8.0.exe`` for the actual
+required files.  Remember to substitute ``python-3.9.0.exe`` for the actual
 name of your installer, and to create layouts in their own directories to
 avoid collisions between files with the same name.
 
 ::
 
-    python-3.8.0.exe /layout [optional target directory]
+    python-3.9.0.exe /layout [optional target directory]
 
 You may also specify the ``/quiet`` option to hide the progress display.
 
@@ -525,7 +525,7 @@
 
 .. code-block:: doscon
 
-    C:\>set PATH=C:\Program Files\Python 3.8;%PATH%
+    C:\>set PATH=C:\Program Files\Python 3.9;%PATH%
     C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
     C:\>python
 
@@ -598,7 +598,7 @@
 example variable could look like this (assuming the first two entries already
 existed)::
 
-    C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.8
+    C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9
 
 .. _win-utf8-mode:
 
diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst
index ca3eda0..06bee99 100644
--- a/Doc/whatsnew/3.2.rst
+++ b/Doc/whatsnew/3.2.rst
@@ -2311,7 +2311,7 @@
 ===============
 
 * The mechanism for serializing execution of concurrently running Python threads
-  (generally known as the :term:`GIL` or :term:`Global Interpreter Lock`) has
+  (generally known as the :term:`GIL` or Global Interpreter Lock) has
   been rewritten.  Among the objectives were more predictable switching
   intervals and reduced overhead due to lock contention and the number of
   ensuing system calls.  The notion of a "check interval" to allow thread
diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst
index f1a033c..361e6db 100644
--- a/Doc/whatsnew/3.3.rst
+++ b/Doc/whatsnew/3.3.rst
@@ -2309,9 +2309,9 @@
   :c:func:`PyUnicode_AsUTF8String`
 * :c:func:`PyUnicode_EncodeUTF32`
 * :c:func:`PyUnicode_EncodeUTF16`
-* :c:func:`PyUnicode_EncodeUnicodeEscape:` use
+* :c:func:`PyUnicode_EncodeUnicodeEscape` use
   :c:func:`PyUnicode_AsUnicodeEscapeString`
-* :c:func:`PyUnicode_EncodeRawUnicodeEscape:` use
+* :c:func:`PyUnicode_EncodeRawUnicodeEscape` use
   :c:func:`PyUnicode_AsRawUnicodeEscapeString`
 * :c:func:`PyUnicode_EncodeLatin1`: use :c:func:`PyUnicode_AsLatin1String`
 * :c:func:`PyUnicode_EncodeASCII`: use :c:func:`PyUnicode_AsASCIIString`
diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst
index b4540ac..1defee4 100644
--- a/Doc/whatsnew/3.5.rst
+++ b/Doc/whatsnew/3.5.rst
@@ -412,7 +412,7 @@
 became evident that it would be beneficial for Python users, if the
 standard library included the base definitions and tools for type annotations.
 
-:pep:`484` introduces a :term:`provisional module <provisional api>` to
+:pep:`484` introduces a :term:`provisional module <provisional API>` to
 provide these standard definitions and tools, along with some conventions
 for situations where annotations are not available.
 
@@ -726,7 +726,7 @@
 typing
 ------
 
-The new :mod:`typing` :term:`provisional <provisional api>` module
+The new :mod:`typing` :term:`provisional <provisional API>` module
 provides standard definitions and tools for function type annotations.
 See :ref:`Type Hints <whatsnew-pep-484>` for more information.
 
@@ -772,7 +772,7 @@
 asyncio
 -------
 
-Since the :mod:`asyncio` module is :term:`provisional <provisional api>`,
+Since the :mod:`asyncio` module is :term:`provisional <provisional API>`,
 all changes introduced in Python 3.5 have also been backported to Python 3.4.x.
 
 Notable changes in the :mod:`asyncio` module since Python 3.4.0:
@@ -1867,7 +1867,7 @@
 hook that will be called whenever a :term:`coroutine object <coroutine>`
 is created by an :keyword:`async def` function.  A corresponding
 :func:`~sys.get_coroutine_wrapper` can be used to obtain a currently set
-wrapper.  Both functions are :term:`provisional <provisional api>`,
+wrapper.  Both functions are :term:`provisional <provisional API>`,
 and are intended for debugging purposes only.  (Contributed by Yury Selivanov
 in :issue:`24017`.)
 
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
index 04c1f7e..85a6657 100644
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -1597,7 +1597,7 @@
 typing
 ------
 
-Since the :mod:`typing` module is :term:`provisional <provisional api>`,
+Since the :mod:`typing` module is :term:`provisional <provisional API>`,
 all changes introduced in Python 3.6 have also been
 backported to Python 3.5.x.
 
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
index b9b5021..25b1e1e 100644
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -102,7 +102,7 @@
   * :ref:`PEP 538 <whatsnew37-pep538>`, legacy C locale coercion
   * :ref:`PEP 540 <whatsnew37-pep540>`, forced UTF-8 runtime mode
 * :ref:`PEP 552 <whatsnew37-pep552>`, deterministic .pycs
-* :ref:`the new development runtime mode <whatsnew37-devmode>`
+* :ref:`New Python Development Mode <whatsnew37-devmode>`
 * :ref:`PEP 565 <whatsnew37-pep565>`, improved :exc:`DeprecationWarning`
   handling
 
@@ -171,7 +171,7 @@
 
     from __future__ import annotations
 
-It will become the default in Python 4.0.
+It will become the default in Python 3.10.
 
 .. seealso::
 
@@ -479,15 +479,15 @@
 
 .. _whatsnew37-devmode:
 
-Development Runtime Mode: -X dev
+Python Development Mode (-X dev)
 --------------------------------
 
 The new :option:`-X` ``dev`` command line option or the new
 :envvar:`PYTHONDEVMODE` environment variable can be used to enable
-CPython's *development mode*.  When in development mode, CPython performs
+:ref:`Python Development Mode <devmode>`.  When in development mode, Python performs
 additional runtime checks that are too expensive to be enabled by default.
-See :option:`-X` ``dev`` documentation for the full description of the effects
-of this mode.
+See :ref:`Python Development Mode <devmode>` documentation for the full
+description.
 
 
 Other Language Changes
@@ -636,7 +636,7 @@
 :ref:`performance improvements <whatsnew37-asyncio-perf>`.  Notable changes
 include:
 
-* The new :term:`provisional <provisional api>` :func:`asyncio.run` function can
+* The new :term:`provisional <provisional API>` :func:`asyncio.run` function can
   be used to run a coroutine from synchronous code by automatically creating and
   destroying the event loop.
   (Contributed by Yury Selivanov in :issue:`32314`.)
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 475e3ab..0b4820f 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -47,8 +47,6 @@
 This article explains the new features in Python 3.8, compared to 3.7.
 For full details, see the :ref:`changelog <changelog>`.
 
-Python 3.8 was released on October 14th, 2019.
-
 .. testsetup::
 
    from datetime import date
@@ -348,20 +346,20 @@
 (Contributed by Victor Stinner in :issue:`36763`.)
 
 
-Vectorcall: a fast calling protocol for CPython
------------------------------------------------
+PEP 590: Vectorcall: a fast calling protocol for CPython
+--------------------------------------------------------
 
-The "vectorcall" protocol is added to the Python/C API.
+:ref:`vectorcall` is added to the Python/C API.
 It is meant to formalize existing optimizations which were already done
 for various classes.
-Any extension type implementing a callable can use this protocol.
+Any static type implementing a callable can use this protocol.
 
 This is currently provisional.
 The aim is to make it fully public in Python 3.9.
 
 See :pep:`590` for a full description.
 
-(Contributed by Jeroen Demeyer and Mark Shannon in :issue:`36974`.)
+(Contributed by Jeroen Demeyer, Mark Shannon and Petr Viktorin in :issue:`36974`.)
 
 
 Pickle protocol 5 with out-of-band data buffers
@@ -430,8 +428,8 @@
             lastname, *members = family.split()
             return lastname.upper(), *members
 
-    >>> parse('simpsons homer marge bart lisa sally')
-    ('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'sally')
+    >>> parse('simpsons homer marge bart lisa maggie')
+    ('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'maggie')
 
   (Contributed by David Cuthbert and Jordan Chapman in :issue:`32117`.)
 
@@ -872,8 +870,18 @@
 (Many people worked on this for eight years but the problem was finally
 solved by Serhiy Storchaka in :issue:`13153`.)
 
+New in 3.8.1:
+
+Add option to toggle cursor blink off.  (Contributed by Zackery Spytz
+in :issue:`4603`.)
+
+Escape key now closes IDLE completion windows.  (Contributed by Johnny
+Najera in :issue:`38944`.)
+
 The changes above have been backported to 3.7 maintenance releases.
 
+Add keywords to module name completion list.  (Contributed by Terry J.
+Reedy in :issue:`37765`.)
 
 inspect
 -------
@@ -1695,7 +1703,7 @@
   :meth:`~gettext.NullTranslations.set_output_charset`, and the *codeset*
   parameter of functions :func:`~gettext.translation` and
   :func:`~gettext.install` are also deprecated, since they are only used for
-  for the ``l*gettext()`` functions.
+  the ``l*gettext()`` functions.
   (Contributed by Serhiy Storchaka in :issue:`33710`.)
 
 * The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread`
@@ -2105,9 +2113,6 @@
 
   (Contributed by Antoine Pitrou in :issue:`32388`.)
 
-* The :c:func:`PyCode_New` has a new parameter in the second position (*posonlyargcount*)
-  to support :pep:`570`, indicating the number of positional-only arguments.
-
 * The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept
   two additional ``int`` arguments *end_lineno* and *end_col_offset*.
 
@@ -2229,18 +2234,3 @@
 details, see the documentation for ``loop.create_datagram_endpoint()``.
 (Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
 :issue:`37228`.)
-
-Notable changes in Python 3.8.2
-===============================
-
-Fixed a regression with the ``ignore`` callback of :func:`shutil.copytree`.
-The argument types are now str and List[str] again.
-(Contributed by Manuel Barkhau and Giampaolo Rodola in :issue:`39390`.)
-
-Notable changes in Python 3.8.3
-===============================
-
-The constant values of future flags in the :mod:`__future__` module
-are updated in order to prevent collision with compiler flags. Previously
-``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``.
-(Contributed by Batuhan Taskaya in :issue:`39562`)
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
new file mode 100644
index 0000000..f8f421b
--- /dev/null
+++ b/Doc/whatsnew/3.9.rst
@@ -0,0 +1,1499 @@
+****************************
+  What's New In Python 3.9
+****************************
+
+:Release: |release|
+:Date: |today|
+:Editor: Łukasz Langa
+
+.. Rules for maintenance:
+
+   * Anyone can add text to this document.  Your text might get
+   rewritten to some degree.
+
+   * The maintainer will go through Misc/NEWS periodically and add
+   changes; it's therefore more important to add your changes to
+   Misc/NEWS than to this file.
+
+   * This is not a complete list of every single change; completeness
+   is the purpose of Misc/NEWS.  Some changes will be too small
+   or esoteric to include.  If such a change is added to the text,
+   it might get removed during final editing.
+
+   * If you want to draw your new text to the attention of the
+   maintainer, add 'XXX' to the beginning of the paragraph or
+   section.
+
+   * It's OK to just add a fragmentary note about a change.  For
+   example: "XXX Describe the transmogrify() function added to the
+   socket module."  The maintainer will research the change and
+   write the necessary text.
+
+   * You can comment out your additions if you like, but it's not
+   necessary (especially when a final release is some months away).
+
+   * Credit the author of a patch or bugfix.   Just the name is
+   sufficient; the e-mail address isn't necessary.
+
+   * It's helpful to add the bug/patch number as a comment:
+
+   XXX Describe the transmogrify() function added to the socket
+   module.
+   (Contributed by P.Y. Developer in :issue:`12345`.)
+
+   This saves the maintainer the effort of going through the Mercurial log
+   when researching a change.
+
+This article explains the new features in Python 3.9, compared to 3.8.
+Python 3.9 was released on October 5th, 2020.
+
+For full details, see the :ref:`changelog <changelog>`.
+
+.. seealso::
+
+    :pep:`596` - Python 3.9 Release Schedule
+
+
+Summary -- Release highlights
+=============================
+
+.. This section singles out the most important changes in Python 3.9.
+   Brevity is key.
+
+New syntax features:
+
+* :pep:`584`, union operators added to ``dict``;
+* :pep:`585`, type hinting generics in standard collections;
+* :pep:`614`, relaxed grammar restrictions on decorators.
+
+New built-in features:
+
+* :pep:`616`, string methods to remove prefixes and suffixes.
+
+New features in the standard library:
+
+* :pep:`593`, flexible function and variable annotations;
+* :func:`os.pidfd_open` added that allows process management without races
+  and signals.
+
+Interpreter improvements:
+
+* :pep:`573`, fast access to module state from methods of C extension
+  types;
+* :pep:`617`, CPython now uses a new parser based on PEG;
+* a number of Python builtins (range, tuple, set, frozenset, list, dict) are
+  now sped up using :pep:`590` vectorcall;
+* garbage collection does not block on resurrected objects;
+* a number of Python modules (:mod:`_abc`, :mod:`audioop`, :mod:`_bz2`,
+  :mod:`_codecs`, :mod:`_contextvars`, :mod:`_crypt`, :mod:`_functools`,
+  :mod:`_json`, :mod:`_locale`, :mod:`math`, :mod:`operator`, :mod:`resource`,
+  :mod:`time`, :mod:`_weakref`) now use multiphase initialization as defined
+  by PEP 489;
+* a number of standard library modules (:mod:`audioop`, :mod:`ast`, :mod:`grp`,
+  :mod:`_hashlib`, :mod:`pwd`, :mod:`_posixsubprocess`, :mod:`random`,
+  :mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) are now using
+  the stable ABI defined by PEP 384.
+
+New library modules:
+
+* :pep:`615`, the IANA Time Zone Database is now present in the standard
+  library in the :mod:`zoneinfo` module;
+* an implementation of a topological sort of a graph is now provided in
+  the new :mod:`graphlib` module.
+
+Release process changes:
+
+* :pep:`602`, CPython adopts an annual release cycle.
+
+
+You should check for DeprecationWarning in your code
+====================================================
+
+When Python 2.7 was still supported, a lot of functionality in Python 3
+was kept for backward compatibility with Python 2.7. With the end of Python
+2 support, these backward compatibility layers have been removed, or will
+be removed soon. Most of them emitted a :exc:`DeprecationWarning` warning for
+several years. For example, using ``collections.Mapping`` instead of
+``collections.abc.Mapping`` emits a :exc:`DeprecationWarning` since Python
+3.3, released in 2012.
+
+Test your application with the :option:`-W` ``default`` command-line option to see
+:exc:`DeprecationWarning` and :exc:`PendingDeprecationWarning`, or even with
+:option:`-W` ``error`` to treat them as errors. :ref:`Warnings Filter
+<warning-filter>` can be used to ignore warnings from third-party code.
+
+Python 3.9 is the last version providing those Python 2 backward compatibility
+layers, to give more time to Python projects maintainers to organize the
+removal of the Python 2 support and add support for Python 3.9.
+
+Aliases to :ref:`Abstract Base Classes <collections-abstract-base-classes>` in
+the :mod:`collections` module, like ``collections.Mapping`` alias to
+:class:`collections.abc.Mapping`, are kept for one last release for backward
+compatibility. They will be removed from Python 3.10.
+
+More generally, try to run your tests in the :ref:`Python Development Mode
+<devmode>` which helps to prepare your code to make it compatible with the
+next Python version.
+
+Note: a number of pre-existing deprecations were removed in this version of
+Python as well. Consult the :ref:`removed-in-python-39` section.
+
+
+New Features
+============
+
+Dictionary Merge & Update Operators
+-----------------------------------
+
+Merge (``|``) and update (``|=``) operators have been added to the built-in
+:class:`dict` class. Those complement the existing ``dict.update`` and
+``{**d1, **d2}`` methods of merging dictionaries.
+
+Example::
+
+  >>> x = {"key1": "value1 from x", "key2": "value2 from x"}
+  >>> y = {"key2": "value2 from y", "key3": "value3 from y"}
+  >>> x | y
+  {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
+  >>> y | x
+  {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
+
+See :pep:`584` for a full description.
+(Contributed by Brandt Bucher in :issue:`36144`.)
+
+New String Methods to Remove Prefixes and Suffixes
+--------------------------------------------------
+
+:meth:`str.removeprefix(prefix)<str.removeprefix>` and
+:meth:`str.removesuffix(suffix)<str.removesuffix>` have been added
+to easily remove an unneeded prefix or a suffix from a string. Corresponding
+``bytes``, ``bytearray``, and ``collections.UserString`` methods have also been
+added. See :pep:`616` for a full description. (Contributed by Dennis Sweeney in
+:issue:`39939`.)
+
+Type Hinting Generics in Standard Collections
+---------------------------------------------
+
+In type annotations you can now use built-in collection types such as
+``list`` and ``dict`` as generic types instead of importing the
+corresponding capitalized types (e.g. ``List`` or ``Dict``) from
+``typing``.  Some other types in the standard library are also now generic,
+for example ``queue.Queue``.
+
+Example:
+
+.. code-block:: python
+
+   def greet_all(names: list[str]) -> None:
+       for name in names:
+           print("Hello", name)
+
+See :pep:`585` for more details.  (Contributed by Guido van Rossum,
+Ethan Smith, and Batuhan Taşkaya in :issue:`39481`.)
+
+New Parser
+----------
+
+Python 3.9 uses a new parser, based on `PEG
+<https://en.wikipedia.org/wiki/Parsing_expression_grammar>`_ instead
+of `LL(1) <https://en.wikipedia.org/wiki/LL_parser>`_.  The new
+parser's performance is roughly comparable to that of the old parser,
+but the PEG formalism is more flexible than LL(1) when it comes to
+designing new language features.  We'll start using this flexibility
+in Python 3.10 and later.
+
+The :mod:`ast` module uses the new parser and produces the same AST as
+the old parser.
+
+In Python 3.10, the old parser will be deleted and so will all
+functionality that depends on it (primarily the :mod:`parser` module,
+which has long been deprecated).  In Python 3.9 *only*, you can switch
+back to the LL(1) parser using a command line switch (``-X
+oldparser``) or an environment variable (``PYTHONOLDPARSER=1``).
+
+See :pep:`617` for more details.  (Contributed by Guido van Rossum,
+Pablo Galindo and Lysandros Nikolaou in :issue:`40334`.)
+
+
+Other Language Changes
+======================
+
+* :func:`__import__` now raises :exc:`ImportError` instead of
+  :exc:`ValueError`, which used to occur when a relative import went past
+  its top-level package.
+  (Contributed by Ngalim Siregar in :issue:`37444`.)
+
+* Python now gets the absolute path of the script filename specified on
+  the command line (ex: ``python3 script.py``): the ``__file__`` attribute of
+  the :mod:`__main__` module became an absolute path, rather than a relative
+  path. These paths now remain valid after the current directory is changed
+  by :func:`os.chdir`. As a side effect, the traceback also displays the
+  absolute path for :mod:`__main__` module frames in this case.
+  (Contributed by Victor Stinner in :issue:`20443`.)
+
+* In the :ref:`Python Development Mode <devmode>` and in debug build, the
+  *encoding* and *errors* arguments are now checked for string encoding and
+  decoding operations. Examples: :func:`open`, :meth:`str.encode` and
+  :meth:`bytes.decode`.
+
+  By default, for best performance, the *errors* argument is only checked at
+  the first encoding/decoding error and the *encoding* argument is sometimes
+  ignored for empty strings.
+  (Contributed by Victor Stinner in :issue:`37388`.)
+
+* ``"".replace("", s, n)`` now returns ``s`` instead of an empty string for
+  all non-zero ``n``.  It is now consistent with ``"".replace("", s)``.
+  There are similar changes for :class:`bytes` and :class:`bytearray` objects.
+  (Contributed by Serhiy Storchaka in :issue:`28029`.)
+
+* Any valid expression can now be used as a :term:`decorator`.  Previously, the
+  grammar was much more restrictive.  See :pep:`614` for details.
+  (Contributed by Brandt Bucher in :issue:`39702`.)
+
+* Improved help for the :mod:`typing` module. Docstrings are now shown for
+  all special forms and special generic aliases (like ``Union`` and ``List``).
+  Using :func:`help` with generic alias like ``List[int]`` will show the help
+  for the correspondent concrete type (``list`` in this case).
+  (Contributed by Serhiy Storchaka in :issue:`40257`.)
+
+* Parallel running of :meth:`~agen.aclose` / :meth:`~agen.asend` /
+  :meth:`~agen.athrow` is now prohibited, and ``ag_running`` now reflects
+  the actual running status of the async generator.
+  (Contributed by Yury Selivanov in :issue:`30773`.)
+
+* Unexpected errors in calling the ``__iter__`` method are no longer masked by
+  ``TypeError`` in the :keyword:`in` operator and functions
+  :func:`~operator.contains`, :func:`~operator.indexOf` and
+  :func:`~operator.countOf` of the :mod:`operator` module.
+  (Contributed by Serhiy Storchaka in :issue:`40824`.)
+
+
+New Modules
+===========
+
+zoneinfo
+--------
+
+The :mod:`zoneinfo` module brings support for the IANA time zone database to
+the standard library. It adds :class:`zoneinfo.ZoneInfo`, a concrete
+:class:`datetime.tzinfo` implementation backed by the system's time zone data.
+
+Example::
+
+    >>> from zoneinfo import ZoneInfo
+    >>> from datetime import datetime, timedelta
+
+    >>> # Daylight saving time
+    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
+    >>> print(dt)
+    2020-10-31 12:00:00-07:00
+    >>> dt.tzname()
+    'PDT'
+
+    >>> # Standard time
+    >>> dt += timedelta(days=7)
+    >>> print(dt)
+    2020-11-07 12:00:00-08:00
+    >>> print(dt.tzname())
+    PST
+
+
+As a fall-back source of data for platforms that don't ship the IANA database,
+the |tzdata|_ module was released as a first-party package -- distributed via
+PyPI and maintained by the CPython core team.
+
+.. |tzdata| replace:: ``tzdata``
+.. _tzdata: https://pypi.org/project/tzdata/
+
+.. seealso::
+
+    :pep:`615` -- Support for the IANA Time Zone Database in the Standard Library
+        PEP written and implemented by Paul Ganssle
+
+
+graphlib
+---------
+
+A new module, :mod:`graphlib`, was added that contains the
+:class:`graphlib.TopologicalSorter` class to offer functionality to perform
+topological sorting of graphs. (Contributed by Pablo Galindo, Tim Peters and
+Larry Hastings in :issue:`17005`.)
+
+
+Improved Modules
+================
+
+ast
+---
+
+Added the *indent* option to :func:`~ast.dump` which allows it to produce a
+multiline indented output.
+(Contributed by Serhiy Storchaka in :issue:`37995`.)
+
+Added :func:`ast.unparse` as a function in the :mod:`ast` module that can
+be used to unparse an :class:`ast.AST` object and produce a string with code
+that would produce an equivalent :class:`ast.AST` object when parsed.
+(Contributed by Pablo Galindo and Batuhan Taskaya in :issue:`38870`.)
+
+Added docstrings to AST nodes that contains the ASDL signature used to
+construct that node. (Contributed by Batuhan Taskaya in :issue:`39638`.)
+
+asyncio
+-------
+
+Due to significant security concerns, the *reuse_address* parameter of
+:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This is
+because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For more
+details, see the documentation for ``loop.create_datagram_endpoint()``.
+(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
+:issue:`37228`.)
+
+Added a new :term:`coroutine` :meth:`~asyncio.loop.shutdown_default_executor`
+that schedules a shutdown for the default executor that waits on the
+:class:`~concurrent.futures.ThreadPoolExecutor` to finish closing. Also,
+:func:`asyncio.run` has been updated to use the new :term:`coroutine`.
+(Contributed by Kyle Stanley in :issue:`34037`.)
+
+Added :class:`asyncio.PidfdChildWatcher`, a Linux-specific child watcher
+implementation that polls process file descriptors. (:issue:`38692`)
+
+Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is mainly used for
+running IO-bound functions in a separate thread to avoid blocking the event
+loop, and essentially works as a high-level version of
+:meth:`~asyncio.loop.run_in_executor` that can directly take keyword arguments.
+(Contributed by Kyle Stanley and Yury Selivanov in :issue:`32309`.)
+
+When cancelling the task due to a timeout, :meth:`asyncio.wait_for` will now
+wait until the cancellation is complete also in the case when *timeout* is
+<= 0, like it does with positive timeouts.
+(Contributed by Elvis Pranskevichus in :issue:`32751`.)
+
+:mod:`asyncio` now raises :exc:`TyperError` when calling incompatible
+methods with an :class:`ssl.SSLSocket` socket.
+(Contributed by Ido Michael in :issue:`37404`.)
+
+compileall
+----------
+
+Added new possibility to use hardlinks for duplicated ``.pyc`` files: *hardlink_dupes* parameter and --hardlink-dupes command line option.
+(Contributed by  Lumír 'Frenzy' Balhar in :issue:`40495`.)
+
+Added new options for path manipulation in resulting ``.pyc`` files: *stripdir*, *prependdir*, *limit_sl_dest* parameters and -s, -p, -e command line options.
+Added the possibility to specify the option for an optimization level multiple times.
+(Contributed by Lumír 'Frenzy' Balhar in :issue:`38112`.)
+
+concurrent.futures
+------------------
+
+Added a new *cancel_futures* parameter to
+:meth:`concurrent.futures.Executor.shutdown` that cancels all pending futures
+which have not started running, instead of waiting for them to complete before
+shutting down the executor.
+(Contributed by Kyle Stanley in :issue:`39349`.)
+
+Removed daemon threads from :class:`~concurrent.futures.ThreadPoolExecutor`
+and :class:`~concurrent.futures.ProcessPoolExecutor`. This improves
+compatibility with subinterpreters and predictability in their shutdown
+processes. (Contributed by Kyle Stanley in :issue:`39812`.)
+
+Workers in :class:`~concurrent.futures.ProcessPoolExecutor` are now spawned on
+demand, only when there are no available idle workers to reuse. This optimizes
+startup overhead and reduces the amount of lost CPU time to idle workers.
+(Contributed by Kyle Stanley in :issue:`39207`.)
+
+curses
+------
+
+Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`,
+:func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions.
+(Contributed by Anthony Sottile in :issue:`38312`.)
+
+datetime
+--------
+The :meth:`~datetime.date.isocalendar()` of :class:`datetime.date`
+and :meth:`~datetime.datetime.isocalendar()` of :class:`datetime.datetime`
+methods now returns a :func:`~collections.namedtuple` instead of a :class:`tuple`.
+(Contributed by Dong-hee Na in :issue:`24416`.)
+
+distutils
+---------
+
+The :command:`upload` command now creates SHA2-256 and Blake2b-256 hash
+digests. It skips MD5 on platforms that block MD5 digest.
+(Contributed by Christian Heimes in :issue:`40698`.)
+
+fcntl
+-----
+
+Added constants :data:`~fcntl.F_OFD_GETLK`, :data:`~fcntl.F_OFD_SETLK`
+and :data:`~fcntl.F_OFD_SETLKW`.
+(Contributed by Dong-hee Na in :issue:`38602`.)
+
+ftplib
+-------
+
+:class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise a :class:`ValueError`
+if the given timeout for their constructor is zero to prevent the creation of
+a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
+
+gc
+--
+
+When the garbage collector makes a collection in which some objects resurrect
+(they are reachable from outside the isolated cycles after the finalizers have
+been executed), do not block the collection of all objects that are still
+unreachable. (Contributed by Pablo Galindo and Tim Peters in :issue:`38379`.)
+
+Added a new function :func:`gc.is_finalized` to check if an object has been
+finalized by the garbage collector. (Contributed by Pablo Galindo in
+:issue:`39322`.)
+
+hashlib
+-------
+
+The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF from OpenSSL
+when available.
+(Contributed by Christian Heimes in :issue:`37630`.)
+
+Builtin hash modules can now be disabled with
+``./configure --without-builtin-hashlib-hashes`` or selectively enabled with
+e.g. ``./configure --with-builtin-hashlib-hashes=sha3,blake2`` to force use
+of OpenSSL based implementation.
+(Contributed by Christian Heimes in :issue:`40479`)
+
+
+http
+----
+
+HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` are added to
+:class:`http.HTTPStatus`. (Contributed by Dong-hee Na in :issue:`39509` and Ross Rhodes in :issue:`39507`.)
+
+IDLE and idlelib
+----------------
+
+Added option to toggle cursor blink off.  (Contributed by Zackery Spytz
+in :issue:`4603`.)
+
+Escape key now closes IDLE completion windows.  (Contributed by Johnny
+Najera in :issue:`38944`.)
+
+Added keywords to module name completion list.  (Contributed by Terry J.
+Reedy in :issue:`37765`.)
+
+The changes above have been backported to 3.8 maintenance releases.
+
+imaplib
+-------
+
+:class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have
+an optional *timeout* parameter for their constructors.
+Also, the :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter
+with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and
+:class:`~imaplib.IMAP4_stream` were applied to this change.
+(Contributed by Dong-hee Na in :issue:`38615`.)
+
+:meth:`imaplib.IMAP4.unselect` is added.
+:meth:`imaplib.IMAP4.unselect` frees server's resources associated with the
+selected mailbox and returns the server to the authenticated
+state. This command performs the same actions as :meth:`imaplib.IMAP4.close`, except
+that no messages are permanently removed from the currently
+selected mailbox. (Contributed by Dong-hee Na in :issue:`40375`.)
+
+importlib
+---------
+
+To improve consistency with import statements, :func:`importlib.util.resolve_name`
+now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
+import attempts.
+(Contributed by Ngalim Siregar in :issue:`37444`.)
+
+Import loaders which publish immutable module objects can now publish
+immutable packages in addition to individual modules.
+(Contributed by Dino Viehland in :issue:`39336`.)
+
+Added :func:`importlib.resources.files` function with support for
+subdirectories in package data, matching backport in ``importlib_resources``
+version 1.5.
+(Contributed by Jason R. Coombs in :issue:`39791`.)
+
+Refreshed ``importlib.metadata`` from ``importlib_metadata`` version 1.6.1.
+
+inspect
+-------
+
+:attr:`inspect.BoundArguments.arguments` is changed from ``OrderedDict`` to regular
+dict.  (Contributed by Inada Naoki in :issue:`36350` and :issue:`39775`.)
+
+ipaddress
+---------
+
+:mod:`ipaddress` now supports IPv6 Scoped Addresses (IPv6 address with suffix ``%<scope_id>``).
+
+Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`.
+If present, scope zone ID is available through the :attr:`~ipaddress.IPv6Address.scope_id` attribute.
+(Contributed by Oleksandr Pavliuk in :issue:`34788`.)
+
+math
+----
+
+Expanded the :func:`math.gcd` function to handle multiple arguments.
+Formerly, it only supported two arguments.
+(Contributed by Serhiy Storchaka in :issue:`39648`.)
+
+Added :func:`math.lcm`: return the least common multiple of specified arguments.
+(Contributed by Mark Dickinson, Ananthakrishnan and Serhiy Storchaka in
+:issue:`39479` and :issue:`39648`.)
+
+Added :func:`math.nextafter`: return the next floating-point value after *x*
+towards *y*.
+(Contributed by Victor Stinner in :issue:`39288`.)
+
+Added :func:`math.ulp`: return the value of the least significant bit
+of a float.
+(Contributed by Victor Stinner in :issue:`39310`.)
+
+multiprocessing
+---------------
+
+The :class:`multiprocessing.SimpleQueue` class has a new
+:meth:`~multiprocessing.SimpleQueue.close` method to explicitly close the
+queue.
+(Contributed by Victor Stinner in :issue:`30966`.)
+
+nntplib
+-------
+
+:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a :class:`ValueError`
+if the given timeout for their constructor is zero to prevent the creation of
+a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
+
+os
+--
+
+Added :data:`~os.CLD_KILLED` and :data:`~os.CLD_STOPPED` for :attr:`si_code`.
+(Contributed by Dong-hee Na in :issue:`38493`.)
+
+Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) and
+:data:`os.P_PIDFD` (:issue:`38713`) for process management with file
+descriptors.
+
+The :func:`os.unsetenv` function is now also available on Windows.
+(Contributed by Victor Stinner in :issue:`39413`.)
+
+The :func:`os.putenv` and :func:`os.unsetenv` functions are now always
+available.
+(Contributed by Victor Stinner in :issue:`39395`.)
+
+Added :func:`os.waitstatus_to_exitcode` function:
+convert a wait status to an exit code.
+(Contributed by Victor Stinner in :issue:`40094`.)
+
+pathlib
+-------
+
+Added :meth:`pathlib.Path.readlink()` which acts similarly to
+:func:`os.readlink`.
+(Contributed by Girts Folkmanis in :issue:`30618`)
+
+pdb
+---
+
+On Windows now :class:`~pdb.Pdb` supports ``~/.pdbrc``.
+(Contributed by Tim Hopper and Dan Lidral-Porter in :issue:`20523`.)
+
+poplib
+------
+
+:class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a :class:`ValueError`
+if the given timeout for their constructor is zero to prevent the creation of
+a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
+
+pprint
+------
+
+:mod:`pprint` can now pretty-print :class:`types.SimpleNamespace`.
+(Contributed by Carl Bordum Hansen in :issue:`37376`.)
+
+pydoc
+-----
+
+The documentation string is now shown not only for class, function,
+method etc, but for any object that has its own ``__doc__`` attribute.
+(Contributed by Serhiy Storchaka in :issue:`40257`.)
+
+random
+------
+
+Added a new :attr:`random.Random.randbytes` method: generate random bytes.
+(Contributed by Victor Stinner in :issue:`40286`.)
+
+signal
+------
+
+Exposed the Linux-specific :func:`signal.pidfd_send_signal` for sending to
+signals to a process using a file descriptor instead of a pid. (:issue:`38712`)
+
+smtplib
+-------
+
+:class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a :class:`ValueError`
+if the given timeout for their constructor is zero to prevent the creation of
+a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
+
+:class:`~smtplib.LMTP` constructor  now has an optional *timeout* parameter.
+(Contributed by Dong-hee Na in :issue:`39329`.)
+
+socket
+------
+
+The :mod:`socket` module now exports the :data:`~socket.CAN_RAW_JOIN_FILTERS`
+constant on Linux 4.1 and greater.
+(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.)
+
+The socket module now supports the :data:`~socket.CAN_J1939` protocol on
+platforms that support it.  (Contributed by Karl Ding in :issue:`40291`.)
+
+The socket module now has the :func:`socket.send_fds` and
+:func:`socket.recv.fds` methods. (Contributed by Joannah Nanjekye, Shinya
+Okano and Victor Stinner in :issue:`28724`.)
+
+
+time
+----
+
+On AIX, :func:`~time.thread_time` is now implemented with ``thread_cputime()``
+which has nanosecond resolution, rather than
+``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms.
+(Contributed by Batuhan Taskaya in :issue:`40192`)
+
+sys
+---
+
+Added a new :attr:`sys.platlibdir` attribute: name of the platform-specific
+library directory. It is used to build the path of standard library and the
+paths of installed extension modules. It is equal to ``"lib"`` on most
+platforms.  On Fedora and SuSE, it is equal to ``"lib64"`` on 64-bit platforms.
+(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner in :issue:`1294959`.)
+
+Previously, :attr:`sys.stderr` was block-buffered when non-interactive. Now
+``stderr`` defaults to always being line-buffered.
+(Contributed by Jendrik Seipp in :issue:`13601`.)
+
+tracemalloc
+-----------
+
+Added :func:`tracemalloc.reset_peak` to set the peak size of traced memory
+blocks to the current size, to measure the peak of specific pieces of code.
+(Contributed by Huon Wilson in :issue:`40630`.)
+
+typing
+------
+
+:pep:`593` introduced an :data:`typing.Annotated` type to decorate existing
+types with context-specific metadata and new ``include_extras`` parameter to
+:func:`typing.get_type_hints` to access the metadata at runtime. (Contributed
+by Till Varoquaux and Konstantin Kashin.)
+
+unicodedata
+-----------
+
+The Unicode database has been updated to version 13.0.0. (:issue:`39926`).
+
+venv
+----
+
+The activation scripts provided by :mod:`venv` now all specify their prompt
+customization consistently by always using the value specified by
+``__VENV_PROMPT__``. Previously some scripts unconditionally used
+``__VENV_PROMPT__``, others only if it happened to be set (which was the default
+case), and one used ``__VENV_NAME__`` instead.
+(Contributed by Brett Cannon in :issue:`37663`.)
+
+xml
+---
+
+White space characters within attributes are now preserved when serializing
+:mod:`xml.etree.ElementTree` to XML file. EOLNs are no longer normalized
+to "\n". This is the result of discussion about how to interpret
+section 2.11 of XML spec.
+(Contributed by Mefistotelis in :issue:`39011`.)
+
+
+Optimizations
+=============
+
+* Optimized the idiom for assignment a temporary variable in comprehensions.
+  Now ``for y in [expr]`` in comprehensions is as fast as a simple assignment
+  ``y = expr``.  For example:
+
+     sums = [s for s in [0] for x in data for s in [s + x]]
+
+  Unlike the ``:=`` operator this idiom does not leak a variable to the
+  outer scope.
+
+  (Contributed by Serhiy Storchaka in :issue:`32856`.)
+
+* Optimized signal handling in multithreaded applications. If a thread different
+  than the main thread gets a signal, the bytecode evaluation loop is no longer
+  interrupted at each bytecode instruction to check for pending signals which
+  cannot be handled. Only the main thread of the main interpreter can handle
+  signals.
+
+  Previously, the bytecode evaluation loop was interrupted at each instruction
+  until the main thread handles signals.
+  (Contributed by Victor Stinner in :issue:`40010`.)
+
+* Optimized the :mod:`subprocess` module on FreeBSD using ``closefrom()``.
+  (Contributed by Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak and Victor
+  Stinner in :issue:`38061`.)
+
+* :c:func:`PyLong_FromDouble` is now up to 1.87x faster for values that
+  fit into :c:type:`long`.
+  (Contributed by Sergey Fedoseev in :issue:`37986`.)
+
+* A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`,
+  :class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using
+  :pep:`590` vectorcall protocol.
+  (Contributed by Dong-hee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.)
+
+* Optimized :func:`~set.difference_update` for the case when the other set
+  is much larger than the base set.
+  (Suggested by Evgeny Kapun with code contributed by Michele Orrù in :issue:`8425`.)
+
+* Python's small object allocator (``obmalloc.c``) now allows (no more than)
+  one empty arena to remain available for immediate reuse, without returning
+  it to the OS.  This prevents thrashing in simple loops where an arena could
+  be created and destroyed anew on each iteration.
+  (Contributed by Tim Peters in :issue:`37257`.)
+
+* :term:`floor division` of float operation now has a better performance. Also
+  the message of :exc:`ZeroDivisionError` for this operation is updated.
+  (Contributed by Dong-hee Na in :issue:`39434`.)
+
+* Decoding short ASCII strings with UTF-8 and ascii codecs is now about
+  15% faster.  (Contributed by Inada Naoki in :issue:`37348`.)
+
+Here's a summary of performance improvements from Python 3.4 through Python 3.9:
+
+.. code-block:: none
+
+    Python version                       3.4     3.5     3.6     3.7     3.8    3.9
+    --------------                       ---     ---     ---     ---     ---    ---
+
+    Variable and attribute read access:
+        read_local                       7.1     7.1     5.4     5.1     3.9    3.9
+        read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.5
+        read_global                     15.5    19.0    14.3    13.6     7.6    7.8
+        read_builtin                    21.1    21.6    18.5    19.0     7.5    7.8
+        read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   17.9
+        read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   16.9
+        read_instancevar                32.4    33.1    28.0    26.3    25.4   25.3
+        read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   20.5
+        read_namedtuple                 73.8    57.5    45.0    46.8    18.4   18.7
+        read_boundmethod                37.6    37.9    29.6    26.9    27.7   41.1
+
+    Variable and attribute write access:
+        write_local                      8.7     9.3     5.5     5.3     4.3    4.3
+        write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.8
+        write_global                    19.7    21.2    18.0    18.0    15.8   16.7
+        write_classvar                  92.9    96.0   104.6   102.1    39.2   39.8
+        write_instancevar               44.6    45.8    40.0    38.9    35.5   37.4
+        write_instancevar_slots         35.6    36.1    27.3    26.6    25.7   25.8
+
+    Data structure read access:
+        read_list                       24.2    24.5    20.8    20.8    19.0   19.5
+        read_deque                      24.7    25.5    20.2    20.6    19.8   20.2
+        read_dict                       24.3    25.7    22.3    23.0    21.0   22.4
+        read_strdict                    22.6    24.3    19.5    21.2    18.9   21.5
+
+    Data structure write access:
+        write_list                      27.1    28.5    22.5    21.6    20.0   20.0
+        write_deque                     28.7    30.1    22.7    21.8    23.5   21.7
+        write_dict                      31.4    33.3    29.3    29.2    24.7   25.4
+        write_strdict                   28.4    29.9    27.5    25.2    23.1   24.5
+
+    Stack (or queue) operations:
+        list_append_pop                 93.4   112.7    75.4    74.2    50.8   50.6
+        deque_append_pop                43.5    57.0    49.4    49.2    42.5   44.2
+        deque_append_popleft            43.7    57.3    49.7    49.7    42.8   46.4
+
+    Timing loop:
+        loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3
+
+These results were generated from the variable access benchmark script at:
+``Tools/scripts/var_access_benchmark.py``. The benchmark script displays timings
+in nanoseconds.  The benchmarks were measured on an
+`Intel® Core™ i7-4960HQ processor
+<https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html>`_
+running the macOS 64-bit builds found at
+`python.org <https://www.python.org/downloads/mac-osx/>`_.
+
+
+Deprecated
+==========
+
+* The distutils ``bdist_msi`` command is now deprecated, use
+  ``bdist_wheel`` (wheel packages) instead.
+  (Contributed by Hugo van Kemenade in :issue:`39586`.)
+
+* Currently :func:`math.factorial` accepts :class:`float` instances with
+  non-negative integer values (like ``5.0``).  It raises a :exc:`ValueError`
+  for non-integral and negative floats.  It is now deprecated.  In future
+  Python versions it will raise a :exc:`TypeError` for all floats.
+  (Contributed by Serhiy Storchaka in :issue:`37315`.)
+
+* The :mod:`parser` and :mod:`symbol` modules are deprecated and will be
+  removed in future versions of Python. For the majority of use cases,
+  users can leverage the Abstract Syntax Tree (AST) generation and compilation
+  stage, using the :mod:`ast` module.
+
+* The Public C API functions :c:func:`PyParser_SimpleParseStringFlags`,
+  :c:func:`PyParser_SimpleParseStringFlagsFilename`,
+  :c:func:`PyParser_SimpleParseFileFlags` and :c:func:`PyNode_Compile`
+  are deprecated and will be removed in Python 3.10 together with the old parser.
+
+* Using :data:`NotImplemented` in a boolean context has been deprecated,
+  as it is almost exclusively the result of incorrect rich comparator
+  implementations. It will be made a :exc:`TypeError` in a future version
+  of Python.
+  (Contributed by Josh Rosenberg in :issue:`35712`.)
+
+* The :mod:`random` module currently accepts any hashable type as a
+  possible seed value.  Unfortunately, some of those types are not
+  guaranteed to have a deterministic hash value.  After Python 3.9,
+  the module will restrict its seeds to :const:`None`, :class:`int`,
+  :class:`float`, :class:`str`, :class:`bytes`, and :class:`bytearray`.
+
+* Opening the :class:`~gzip.GzipFile` file for writing without specifying
+  the *mode* argument is deprecated.  In future Python versions it will always
+  be opened for reading by default.  Specify the *mode* argument for opening
+  it for writing and silencing a warning.
+  (Contributed by Serhiy Storchaka in :issue:`28286`.)
+
+* Deprecated the ``split()`` method of :class:`_tkinter.TkappType` in
+  favour of the ``splitlist()`` method which has more consistent and
+  predicable behavior.
+  (Contributed by Serhiy Storchaka in :issue:`38371`.)
+
+* The explicit passing of coroutine objects to :func:`asyncio.wait` has been
+  deprecated and will be removed in version 3.11.
+  (Contributed by Yury Selivanov and Kyle Stanley in :issue:`34790`.)
+
+* binhex4 and hexbin4 standards are now deprecated. The :mod:`binhex` module
+  and the following :mod:`binascii` functions are now deprecated:
+
+  * :func:`~binascii.b2a_hqx`, :func:`~binascii.a2b_hqx`
+  * :func:`~binascii.rlecode_hqx`, :func:`~binascii.rledecode_hqx`
+
+  (Contributed by Victor Stinner in :issue:`39353`.)
+
+* :mod:`ast` classes ``slice``, ``Index`` and ``ExtSlice`` are considered deprecated
+  and will be removed in future Python versions.  ``value`` itself should be
+  used instead of ``Index(value)``.  ``Tuple(slices, Load())`` should be
+  used instead of ``ExtSlice(slices)``.
+  (Contributed by Serhiy Storchaka in :issue:`34822`.)
+
+* :mod:`ast` classes ``Suite``, ``Param``, ``AugLoad`` and ``AugStore``
+  are considered deprecated and will be removed in future Python versions.
+  They were not generated by the parser and not accepted by the code
+  generator in Python 3.
+  (Contributed by Batuhan Taskaya in :issue:`39639` and :issue:`39969`
+  and Serhiy Storchaka in :issue:`39988`.)
+
+* The :c:func:`PyEval_InitThreads` and :c:func:`PyEval_ThreadsInitialized`
+  functions are now deprecated and will be removed in Python 3.11. Calling
+  :c:func:`PyEval_InitThreads` now does nothing. The :term:`GIL` is initialized
+  by :c:func:`Py_Initialize()` since Python 3.7.
+  (Contributed by Victor Stinner in :issue:`39877`.)
+
+* Passing ``None`` as the first argument to the :func:`shlex.split` function
+  has been deprecated.  (Contributed by Zackery Spytz in :issue:`33262`.)
+
+* :func:`smtpd.MailmanProxy` is now deprecated as it is unusable without
+  an external module, ``mailman``.  (Contributed by Samuel Colvin in :issue:`35800`.)
+
+* The :mod:`lib2to3` module now emits a :exc:`PendingDeprecationWarning`.
+  Python 3.9 switched to a PEG parser (see :pep:`617`), and Python 3.10 may
+  include new language syntax that is not parsable by lib2to3's LL(1) parser.
+  The ``lib2to3`` module may be removed from the standard library in a future
+  Python version. Consider third-party alternatives such as `LibCST`_ or
+  `parso`_.
+  (Contributed by Carl Meyer in :issue:`40360`.)
+
+* The *random* parameter of :func:`random.shuffle` has been deprecated.
+  (Contributed by Raymond Hettinger in :issue:`40465`)
+
+.. _LibCST: https://libcst.readthedocs.io/
+.. _parso: https://parso.readthedocs.io/
+
+.. _removed-in-python-39:
+
+Removed
+=======
+
+* The erroneous version at :data:`unittest.mock.__version__` has been removed.
+
+* :class:`nntplib.NNTP`: ``xpath()`` and ``xgtitle()`` methods have been removed.
+  These methods are deprecated since Python 3.3. Generally, these extensions
+  are not supported or not enabled by NNTP server administrators.
+  For ``xgtitle()``, please use :meth:`nntplib.NNTP.descriptions` or
+  :meth:`nntplib.NNTP.description` instead.
+  (Contributed by Dong-hee Na in :issue:`39366`.)
+
+* :class:`array.array`: ``tostring()`` and ``fromstring()`` methods have been
+  removed. They were aliases to ``tobytes()`` and ``frombytes()``, deprecated
+  since Python 3.2.
+  (Contributed by Victor Stinner in :issue:`38916`.)
+
+* The undocumented ``sys.callstats()`` function has been removed. Since Python
+  3.7, it was deprecated and always returned :const:`None`. It required a special
+  build option ``CALL_PROFILE`` which was already removed in Python 3.7.
+  (Contributed by Victor Stinner in :issue:`37414`.)
+
+* The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have
+  been removed. They were deprecated since Python 3.2. Use
+  :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead.
+  (Contributed by Victor Stinner in :issue:`37392`.)
+
+* The C function ``PyImport_Cleanup()`` has been removed. It was documented as:
+  "Empty the module table.  For internal use only."
+  (Contributed by Victor Stinner in :issue:`36710`.)
+
+* ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
+  modules were deprecated since Python 3.7 which requires threading support.
+  (Contributed by Victor Stinner in :issue:`37312`.)
+
+* ``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to
+  ``sunau.open()``, and ``wave.openfp()`` alias to :func:`wave.open()` have been
+  removed. They were deprecated since Python 3.7.
+  (Contributed by Victor Stinner in :issue:`37320`.)
+
+* The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread`
+  has been removed. It was deprecated since Python 3.8.
+  Use :meth:`~threading.Thread.is_alive()` instead.
+  (Contributed by Dong-hee Na in :issue:`37804`.)
+
+* Methods ``getchildren()`` and ``getiterator()`` of classes
+  :class:`~xml.etree.ElementTree.ElementTree` and
+  :class:`~xml.etree.ElementTree.Element` in the :mod:`~xml.etree.ElementTree`
+  module have been removed.  They were deprecated in Python 3.2.
+  Use ``iter(x)`` or ``list(x)`` instead of ``x.getchildren()`` and
+  ``x.iter()`` or ``list(x.iter())`` instead of ``x.getiterator()``.
+  (Contributed by Serhiy Storchaka in :issue:`36543`.)
+
+* The old :mod:`plistlib` API has been removed, it was deprecated since Python
+  3.4. Use the :func:`~plistlib.load`, :func:`~plistlib.loads`, :func:`~plistlib.dump`, and
+  :func:`~plistlib.dumps` functions. Additionally, the *use_builtin_types* parameter was
+  removed, standard :class:`bytes` objects are always used instead.
+  (Contributed by Jon Janzen in :issue:`36409`.)
+
+* The C function ``PyGen_NeedsFinalizing`` has been removed. It was not
+  documented, tested, or used anywhere within CPython after the implementation
+  of :pep:`442`. Patch by Joannah Nanjekye.
+  (Contributed by Joannah Nanjekye in :issue:`15088`)
+
+* ``base64.encodestring()`` and ``base64.decodestring()``, aliases deprecated
+  since Python 3.1, have been removed: use :func:`base64.encodebytes` and
+  :func:`base64.decodebytes` instead.
+  (Contributed by Victor Stinner in :issue:`39351`.)
+
+* ``fractions.gcd()`` function has been removed, it was deprecated since Python
+  3.5 (:issue:`22486`): use :func:`math.gcd` instead.
+  (Contributed by Victor Stinner in :issue:`39350`.)
+
+* The *buffering* parameter of :class:`bz2.BZ2File` has been removed. Since
+  Python 3.0, it was ignored and using it emitted a :exc:`DeprecationWarning`.
+  Pass an open file object to control how the file is opened.
+  (Contributed by Victor Stinner in :issue:`39357`.)
+
+* The *encoding* parameter of :func:`json.loads` has been removed.
+  As of Python 3.1, it was deprecated and ignored; using it has emitted a
+  :exc:`DeprecationWarning` since Python 3.8.
+  (Contributed by Inada Naoki in :issue:`39377`)
+
+* ``with (await asyncio.lock):`` and ``with (yield from asyncio.lock):`` statements are
+  not longer supported, use ``async with lock`` instead.  The same is correct for
+  ``asyncio.Condition`` and ``asyncio.Semaphore``.
+  (Contributed by Andrew Svetlov in :issue:`34793`.)
+
+* The :func:`sys.getcounts` function, the ``-X showalloccount`` command line
+  option and the ``show_alloc_count`` field of the C structure
+  :c:type:`PyConfig` have been removed. They required a special Python build by
+  defining ``COUNT_ALLOCS`` macro.
+  (Contributed by Victor Stinner in :issue:`39489`.)
+
+* The ``_field_types`` attribute of the :class:`typing.NamedTuple` class
+  has been removed.  It was deprecated since Python 3.8.  Use
+  the ``__annotations__`` attribute instead.
+  (Contributed by Serhiy Storchaka in :issue:`40182`.)
+
+* The :meth:`symtable.SymbolTable.has_exec` method has been removed. It was
+  deprecated since 2006, and only returning ``False`` when it's called.
+  (Contributed by Batuhan Taskaya in :issue:`40208`)
+
+* The :meth:`asyncio.Task.current_task` and :meth:`asyncio.Task.all_tasks`
+  have been removed. They were deprecated since Python 3.7 and you can use
+  :func:`asyncio.current_task` and :func:`asyncio.all_tasks` instead.
+  (Contributed by Rémi Lapeyre in :issue:`40967`)
+
+* The ``unescape()`` method in the :class:`html.parser.HTMLParser` class
+  has been removed (it was deprecated since Python 3.4).  :func:`html.unescape`
+  should be used for converting character references to the corresponding
+  unicode characters.
+
+
+Porting to Python 3.9
+=====================
+
+This section lists previously described changes and other bugfixes
+that may require changes to your code.
+
+
+Changes in the Python API
+-------------------------
+
+* :func:`__import__` and :func:`importlib.util.resolve_name` now raise
+  :exc:`ImportError` where it previously raised :exc:`ValueError`. Callers
+  catching the specific exception type and supporting both Python 3.9 and
+  earlier versions will need to catch both using ``except (ImportError, ValueError):``.
+
+* The :mod:`venv` activation scripts no longer special-case when
+  ``__VENV_PROMPT__`` is set to ``""``.
+
+* The :meth:`select.epoll.unregister` method no longer ignores the
+  :data:`~errno.EBADF` error.
+  (Contributed by Victor Stinner in :issue:`39239`.)
+
+* The *compresslevel* parameter of :class:`bz2.BZ2File` became keyword-only,
+  since the *buffering* parameter has been removed.
+  (Contributed by Victor Stinner in :issue:`39357`.)
+
+* Simplified AST for subscription. Simple indices will be represented by
+  their value, extended slices will be represented as tuples.
+  ``Index(value)`` will return a ``value`` itself, ``ExtSlice(slices)``
+  will return ``Tuple(slices, Load())``.
+  (Contributed by Serhiy Storchaka in :issue:`34822`.)
+
+* The :mod:`importlib` module now ignores the :envvar:`PYTHONCASEOK`
+  environment variable when the :option:`-E` or :option:`-I` command line
+  options are being used.
+
+* The *encoding* parameter has been added to the classes :class:`ftplib.FTP` and
+  :class:`ftplib.FTP_TLS` as a keyword-only parameter, and the default encoding
+  is changed from Latin-1 to UTF-8 to follow :rfc:`2640`.
+
+* :meth:`asyncio.loop.shutdown_default_executor` has been added to
+  :class:`~asyncio.AbstractEventLoop`, meaning alternative event loops that
+  inherit from it should have this method defined.
+  (Contributed by Kyle Stanley in :issue:`34037`.)
+
+* The constant values of future flags in the :mod:`__future__` module
+  is updated in order to prevent collision with compiler flags. Previously
+  ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``.
+  (Contributed by Batuhan Taskaya in :issue:`39562`)
+
+* ``array('u')`` now uses ``wchar_t`` as C type instead of ``Py_UNICODE``.
+  This change doesn't affect to its behavior because ``Py_UNICODE`` is alias
+  of ``wchar_t`` since Python 3.3.
+  (Contributed by Inada Naoki in :issue:`34538`.)
+
+* The :func:`logging.getLogger` API now returns the root logger when passed
+  the name ``'root'``, whereas previously it returned a non-root logger named
+  ``'root'``. This could affect cases where user code explicitly wants a
+  non-root logger named ``'root'``, or instantiates a logger using
+  ``logging.getLogger(__name__)`` in some top-level module called ``'root.py'``.
+  (Contributed by Vinay Sajip in :issue:`37742`.)
+
+* Division handling of :class:`~pathlib.PurePath` now returns ``NotImplemented``
+  instead of raising a :exc:`TypeError` when passed something other than an
+  instance of ``str`` or :class:`~pathlib.PurePath`.  This allows creating
+  compatible classes that don't inherit from those mentioned types.
+  (Contributed by Roger Aiudi in :issue:`34775`).
+
+
+Changes in the C API
+--------------------
+
+* Instances of heap-allocated types (such as those created with
+  :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their type
+  object since Python 3.8. As indicated in the "Changes in the C API" of Python
+  3.8, for the vast majority of cases, there should be no side effect but for
+  types that have a custom :c:member:`~PyTypeObject.tp_traverse` function,
+  ensure that all custom ``tp_traverse`` functions of heap-allocated types
+  visit the object's type.
+
+    Example:
+
+    .. code-block:: c
+
+        int
+        foo_traverse(foo_struct *self, visitproc visit, void *arg) {
+        // Rest of the traverse function
+        #if PY_VERSION_HEX >= 0x03090000
+            // This was not needed before Python 3.9 (Python issue 35810 and 40217)
+            Py_VISIT(Py_TYPE(self));
+        #endif
+        }
+
+  If your traverse function delegates to ``tp_traverse`` of its base class
+  (or another type), ensure that ``Py_TYPE(self)`` is visited only once.
+  Note that only heap types are expected to visit the type in ``tp_traverse``.
+
+    For example, if your ``tp_traverse`` function includes:
+
+    .. code-block:: c
+
+        base->tp_traverse(self, visit, arg)
+
+    then add:
+
+    .. code-block:: c
+
+        #if PY_VERSION_HEX >= 0x03090000
+            // This was not needed before Python 3.9 (Python issue 35810 and 40217)
+            if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) {
+                // a heap type's tp_traverse already visited Py_TYPE(self)
+            } else {
+                Py_VISIT(Py_TYPE(self));
+            }
+        #else
+
+  (See :issue:`35810` and :issue:`40217` for more information.)
+
+* The functions ``PyEval_CallObject``, ``PyEval_CallFunction``,
+  ``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated.
+  Use :c:func:`PyObject_Call` and its variants instead.
+  (See more details in :issue:`29548`.)
+
+CPython bytecode changes
+------------------------
+
+* The :opcode:`LOAD_ASSERTION_ERROR` opcode was added for handling the
+  :keyword:`assert` statement. Previously, the assert statement would not work
+  correctly if the :exc:`AssertionError` exception was being shadowed.
+  (Contributed by Zackery Spytz in :issue:`34880`.)
+
+* The :opcode:`COMPARE_OP` opcode was split into four distinct instructions:
+
+  * ``COMPARE_OP`` for rich comparisons
+  * ``IS_OP`` for 'is' and 'is not' tests
+  * ``CONTAINS_OP`` for 'in' and 'not in' tests
+  * ``JUMP_IF_NOT_EXC_MATCH`` for checking exceptions in 'try-except'
+    statements.
+
+  (Contributed by Mark Shannon in :issue:`39156`.)
+
+
+Build Changes
+=============
+
+* Added ``--with-platlibdir`` option to the ``configure`` script: name of the
+  platform-specific library directory, stored in the new :attr:`sys.platlibdir`
+  attribute. See :attr:`sys.platlibdir` attribute for more information.
+  (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis
+  and Victor Stinner in :issue:`1294959`.)
+
+* The ``COUNT_ALLOCS`` special build macro has been removed.
+  (Contributed by Victor Stinner in :issue:`39489`.)
+
+* On non-Windows platforms, the :c:func:`setenv` and :c:func:`unsetenv`
+  functions are now required to build Python.
+  (Contributed by Victor Stinner in :issue:`39395`.)
+
+* On non-Windows platforms, creating ``bdist_wininst`` installers is now
+  officially unsupported.  (See :issue:`10945` for more details.)
+
+* When building Python on macOS from source, ``_tkinter`` now links with
+  non-system Tcl and Tk frameworks if they are installed in
+  ``/Library/Frameworks``, as had been the case on older releases
+  of macOS. If a macOS SDK is explicitly configured, by using
+  ``--enable-universalsdk=`` or ``-isysroot``, only the SDK itself is
+  searched. The default behavior can still be overridden with
+  ``--with-tcltk-includes`` and ``--with-tcltk-libs``.
+  (Contributed by Ned Deily in :issue:`34956`.)
+
+* Python can now be built for Windows 10 ARM64.
+  (Contributed by Steve Dower in :issue:`33125`.)
+
+* Some individual tests are now skipped when ``--pgo`` is used.  The tests
+  in question increased the PGO task time significantly and likely
+  didn't help improve optimization of the final executable. This
+  speeds up the task by a factor of about 15x.  Running the full unit test
+  suite is slow.  This change may result in a slightly less optimized build
+  since not as many code branches will be executed.  If you are willing to
+  wait for the much slower build, the old behavior can be restored using
+  ``./configure [..] PROFILE_TASK="-m test --pgo-extended"``.  We make no
+  guarantees as to which PGO task set produces a faster build.  Users who care
+  should run their own relevant benchmarks as results can depend on the
+  environment, workload, and compiler tool chain.
+  (See :issue:`36044` and :issue:`37707` for more details.)
+
+
+C API Changes
+=============
+
+New Features
+------------
+
+* :pep:`573`: Added :c:func:`PyType_FromModuleAndSpec` to associate
+  a module with a class; :c:func:`PyType_GetModule` and
+  :c:func:`PyType_GetModuleState` to retrieve the module and its state; and
+  :c:data:`PyCMethod` and :c:data:`METH_METHOD` to allow a method to
+  access the class it was defined in.
+  (Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.)
+
+* Added :c:func:`PyFrame_GetCode` function: get a frame code.
+  Added :c:func:`PyFrame_GetBack` function: get the frame next outer frame.
+  (Contributed by Victor Stinner in :issue:`40421`.)
+
+* Added :c:func:`PyFrame_GetLineNumber` to the limited C API.
+  (Contributed by Victor Stinner in :issue:`40421`.)
+
+* Added :c:func:`PyThreadState_GetInterpreter` and
+  :c:func:`PyInterpreterState_Get` functions to get the interpreter.
+  Added :c:func:`PyThreadState_GetFrame` function to get the current frame of a
+  Python thread state.
+  Added :c:func:`PyThreadState_GetID` function: get the unique identifier of a
+  Python thread state.
+  (Contributed by Victor Stinner in :issue:`39947`.)
+
+* Added a new public :c:func:`PyObject_CallNoArgs` function to the C API, which
+  calls a callable Python object without any arguments. It is the most efficient
+  way to call a callable Python object without any argument.
+  (Contributed by Victor Stinner in :issue:`37194`.)
+
+* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
+
+  * Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall`
+    as regular functions for the limited API. Previously, there were defined as
+    macros, but these macros didn't compile with the limited C API which cannot
+    access ``PyThreadState.recursion_depth`` field (the structure is opaque in
+    the limited C API).
+
+  * ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` become regular "opaque"
+    function to hide implementation details.
+
+  (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
+
+* The :c:func:`PyModule_AddType` function is added to help adding a type
+  to a module.
+  (Contributed by Dong-hee Na in :issue:`40024`.)
+
+* Added the functions :c:func:`PyObject_GC_IsTracked` and
+  :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if
+  Python objects are being currently tracked or have been already finalized by
+  the garbage collector respectively.
+  (Contributed by Pablo Galindo Salgado in :issue:`40241`.)
+
+* Added :c:func:`_PyObject_FunctionStr` to get a user-friendly string
+  representation of a function-like object.
+  (Patch by Jeroen Demeyer in :issue:`37645`.)
+
+* Added :c:func:`PyObject_CallOneArg` for calling an object with one
+  positional argument
+  (Patch by Jeroen Demeyer in :issue:`37483`.)
+
+
+Porting to Python 3.9
+---------------------
+
+* ``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory
+  *tstate* parameter (``PyThreadState*``).
+  (Contributed by Victor Stinner in :issue:`38500`.)
+
+* Extension modules: :c:member:`~PyModuleDef.m_traverse`,
+  :c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free`
+  functions of :c:type:`PyModuleDef` are no longer called if the module state
+  was requested but is not allocated yet. This is the case immediately after
+  the module is created and before the module is executed
+  (:c:data:`Py_mod_exec` function). More precisely, these functions are not called
+  if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module state (as
+  returned by :c:func:`PyModule_GetState`) is ``NULL``.
+
+  Extension modules without module state (``m_size <= 0``) are not affected.
+
+* If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function is
+  now scheduled to be called from the subinterpreter, rather than being called
+  from the main interpreter. Each subinterpreter now has its own list of
+  scheduled calls.
+  (Contributed by Victor Stinner in :issue:`39984`.)
+
+* The Windows registry is no longer used to initialize :data:`sys.path` when
+  the ``-E`` option is used (if :c:member:`PyConfig.use_environment` is set to
+  ``0``). This is significant when embedding Python on Windows.
+  (Contributed by Zackery Spytz in :issue:`8901`.)
+
+* The global variable :c:data:`PyStructSequence_UnnamedField` is now a constant
+  and refers to a constant string.
+  (Contributed by Serhiy Storchaka in :issue:`38650`.)
+
+* The :c:type:`PyGC_Head` structure is now opaque. It is only defined in the
+  internal C API (``pycore_gc.h``).
+  (Contributed by Victor Stinner in :issue:`40241`.)
+
+* The ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``,
+  :c:func:`PyUnicode_FromUnicode`, :c:func:`PyUnicode_AsUnicode`,
+  ``_PyUnicode_AsUnicode``, and :c:func:`PyUnicode_AsUnicodeAndSize` are
+  marked as deprecated in C.  They have been deprecated by :pep:`393` since
+  Python 3.3.
+  (Contributed by Inada Naoki in :issue:`36346`.)
+
+* The :c:func:`Py_FatalError` function is replaced with a macro which logs
+  automatically the name of the current function, unless the
+  ``Py_LIMITED_API`` macro is defined.
+  (Contributed by Victor Stinner in :issue:`39882`.)
+
+* The vectorcall protocol now requires that the caller passes only strings as
+  keyword names. (See :issue:`37540` for more information.)
+
+* Implementation details of a number of macros and functions are now hidden:
+
+  * :c:func:`PyObject_IS_GC` macro was converted to a function.
+
+  * The :c:func:`PyObject_NEW` macro becomes an alias to the
+    :c:func:`PyObject_New` macro, and the :c:func:`PyObject_NEW_VAR` macro
+    becomes an alias to the :c:func:`PyObject_NewVar` macro. They no longer
+    access directly the :c:member:`PyTypeObject.tp_basicsize` member.
+
+  * :c:func:`PyType_HasFeature` now always calls :c:func:`PyType_GetFlags`.
+    Previously, it accessed directly the :c:member:`PyTypeObject.tp_flags`
+    member when the limited C API was not used.
+
+  * :c:func:`PyObject_GET_WEAKREFS_LISTPTR` macro was converted to a function:
+    the macro accessed directly the :c:member:`PyTypeObject.tp_weaklistoffset`
+    member.
+
+  * :c:func:`PyObject_CheckBuffer` macro was converted to a function: the macro
+    accessed directly the :c:member:`PyTypeObject.tp_as_buffer` member.
+
+  * :c:func:`PyIndex_Check` is now always declared as an opaque function to hide
+    implementation details: removed the ``PyIndex_Check()`` macro. The macro accessed
+    directly the :c:member:`PyTypeObject.tp_as_number` member.
+
+  (See :issue:`40170` for more details.)
+
+Removed
+-------
+
+* Excluded ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of
+  ``pyfpe.h`` from the limited C API.
+  (Contributed by Victor Stinner in :issue:`38835`.)
+
+* The ``tp_print`` slot of :ref:`PyTypeObject <type-structs>` has been removed.
+  It was used for printing objects to files in Python 2.7 and before. Since
+  Python 3.0, it has been ignored and unused.
+  (Contributed by Jeroen Demeyer in :issue:`36974`.)
+
+* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
+
+  * Excluded the following functions from the limited C API:
+
+    * ``PyThreadState_DeleteCurrent()``
+      (Contributed by Joannah Nanjekye in :issue:`37878`.)
+    * ``_Py_CheckRecursionLimit``
+    * ``_Py_NewReference()``
+    * ``_Py_ForgetReference()``
+    * ``_PyTraceMalloc_NewReference()``
+    * ``_Py_GetRefTotal()``
+    * The trashcan mechanism which never worked in the limited C API.
+    * ``PyTrash_UNWIND_LEVEL``
+    * ``Py_TRASHCAN_BEGIN_CONDITION``
+    * ``Py_TRASHCAN_BEGIN``
+    * ``Py_TRASHCAN_END``
+    * ``Py_TRASHCAN_SAFE_BEGIN``
+    * ``Py_TRASHCAN_SAFE_END``
+
+  * Moved following functions and definitions to the internal C API:
+
+    * ``_PyDebug_PrintTotalRefs()``
+    * ``_Py_PrintReferences()``
+    * ``_Py_PrintReferenceAddresses()``
+    * ``_Py_tracemalloc_config``
+    * ``_Py_AddToAllObjects()`` (specific to ``Py_TRACE_REFS`` build)
+
+  (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
+
+* Removed ``_PyRuntime.getframe`` hook and removed ``_PyThreadState_GetFrame``
+  macro which was an alias to ``_PyRuntime.getframe``. They were only exposed
+  by the internal C API. Removed also ``PyThreadFrameGetter`` type.
+  (Contributed by Victor Stinner in :issue:`39946`.)
+
+* Removed the following functions from the C API. Call :c:func:`PyGC_Collect`
+  explicitly to clear all free lists.
+  (Contributed by Inada Naoki and Victor Stinner in :issue:`37340`,
+  :issue:`38896` and :issue:`40428`.)
+
+  * ``PyAsyncGen_ClearFreeLists()``
+  * ``PyContext_ClearFreeList()``
+  * ``PyDict_ClearFreeList()``
+  * ``PyFloat_ClearFreeList()``
+  * ``PyFrame_ClearFreeList()``
+  * ``PyList_ClearFreeList()``
+  * ``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``:
+    the free lists of bound method objects have been removed.
+  * ``PySet_ClearFreeList()``: the set free list has been removed
+    in Python 3.4.
+  * ``PyTuple_ClearFreeList()``
+  * ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in
+    Python 3.3.
+
+* Removed ``_PyUnicode_ClearStaticStrings()`` function.
+  (Contributed by Victor Stinner in :issue:`39465`.)
+
+* Removed ``Py_UNICODE_MATCH``. It has been deprecated by :pep:`393`, and
+  broken since Python 3.3. The :c:func:`PyUnicode_Tailmatch` function can be
+  used instead.
+  (Contributed by Inada Naoki in :issue:`36346`.)
+
+* Cleaned header files of interfaces defined but with no implementation.
+  The public API symbols being removed are:
+  ``_PyBytes_InsertThousandsGroupingLocale``,
+  ``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``,
+  ``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``,
+  ``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``,
+  ``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``,
+  ``PyNoArgsFunction``.
+  (Contributed by Pablo Galindo Salgado in :issue:`39372`.)
+
+Notable changes in Python 3.9.1
+===============================
+
+typing
+------
+
+The behavior of :class:`typing.Literal` was changed to conform with :pep:`586`
+and to match the behavior of static type checkers specified in the PEP.
+
+1. ``Literal`` now de-duplicates parameters.
+2. Equality comparisons between ``Literal`` objects are now order independent.
+3. ``Literal`` comparisons now respect types.  For example,
+   ``Literal[0] == Literal[False]`` previously evaluated to ``True``.  It is
+   now ``False``.  To support this change, the internally used type cache now
+   supports differentiating types.
+4. ``Literal`` objects will now raise a :exc:`TypeError` exception during
+   equality comparisons if one of their parameters are not :term:`immutable`.
+   Note that declaring ``Literal`` with mutable parameters will not throw
+   an error::
+
+      >>> from typing import Literal
+      >>> Literal[{0}]
+      >>> Literal[{0}] == Literal[{False}]
+      Traceback (most recent call last):
+        File "<stdin>", line 1, in <module>
+      TypeError: unhashable type: 'set'
+
+(Contributed by Yurii Karabas in :issue:`42345`.)
+
+macOS 11.0 (Big Sur) and Apple Silicon Mac support
+--------------------------------------------------
+
+As of 3.9.1, Python now fully supports building and running on macOS 11.0
+(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture).
+A new universal build variant, ``universal2``, is now available to natively
+support both ``ARM64`` and ``Intel 64`` in one set of executables. Binaries
+can also now be built on current versions of macOS to be deployed on a range
+of older macOS versions (tested to 10.9) while making some newer OS
+functions and options conditionally available based on the operating system
+version in use at runtime ("weaklinking").
+
+(Contributed by Ronald Oussoren and Lawrence D'Anna in :issue:`41100`.)
diff --git a/Doc/whatsnew/index.rst b/Doc/whatsnew/index.rst
index b1160c0..954e38b 100644
--- a/Doc/whatsnew/index.rst
+++ b/Doc/whatsnew/index.rst
@@ -11,6 +11,7 @@
 .. toctree::
    :maxdepth: 2
 
+   3.9.rst
    3.8.rst
    3.7.rst
    3.6.rst
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 21f7e1a..170518a 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -14,7 +14,7 @@
 file_input: (NEWLINE | stmt)* ENDMARKER
 eval_input: testlist NEWLINE* ENDMARKER
 
-decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
+decorator: '@' namedexpr_test NEWLINE
 decorators: decorator+
 decorated: decorators (classdef | funcdef | async_funcdef)
 
diff --git a/Grammar/python.gram b/Grammar/python.gram
new file mode 100644
index 0000000..ce78397
--- /dev/null
+++ b/Grammar/python.gram
@@ -0,0 +1,702 @@
+# PEG grammar for Python
+
+@trailer '''
+void *
+_PyPegen_parse(Parser *p)
+{
+    // Initialize keywords
+    p->keywords = reserved_keywords;
+    p->n_keyword_lists = n_keyword_lists;
+
+    // Run parser
+    void *result = NULL;
+    if (p->start_rule == Py_file_input) {
+        result = file_rule(p);
+    } else if (p->start_rule == Py_single_input) {
+        result = interactive_rule(p);
+    } else if (p->start_rule == Py_eval_input) {
+        result = eval_rule(p);
+    } else if (p->start_rule == Py_func_type_input) {
+        result = func_type_rule(p);
+    } else if (p->start_rule == Py_fstring_input) {
+        result = fstring_rule(p);
+    }
+
+    return result;
+}
+
+// The end
+'''
+file[mod_ty]: a=[statements] ENDMARKER { _PyPegen_make_module(p, a) }
+interactive[mod_ty]: a=statement_newline { Interactive(a, p->arena) }
+eval[mod_ty]: a=expressions NEWLINE* ENDMARKER { Expression(a, p->arena) }
+func_type[mod_ty]: '(' a=[type_expressions] ')' '->' b=expression NEWLINE* ENDMARKER { FunctionType(a, b, p->arena) }
+fstring[expr_ty]: star_expressions
+
+# type_expressions allow */** but ignore them
+type_expressions[asdl_seq*]:
+    | a=','.expression+ ',' '*' b=expression ',' '**' c=expression {
+        _PyPegen_seq_append_to_end(p, CHECK(_PyPegen_seq_append_to_end(p, a, b)), c) }
+    | a=','.expression+ ',' '*' b=expression { _PyPegen_seq_append_to_end(p, a, b) }
+    | a=','.expression+ ',' '**' b=expression { _PyPegen_seq_append_to_end(p, a, b) }
+    | '*' a=expression ',' '**' b=expression {
+        _PyPegen_seq_append_to_end(p, CHECK(_PyPegen_singleton_seq(p, a)), b) }
+    | '*' a=expression { _PyPegen_singleton_seq(p, a) }
+    | '**' a=expression { _PyPegen_singleton_seq(p, a) }
+    | ','.expression+
+
+statements[asdl_seq*]: a=statement+ { _PyPegen_seq_flatten(p, a) }
+statement[asdl_seq*]: a=compound_stmt { _PyPegen_singleton_seq(p, a) } | simple_stmt
+statement_newline[asdl_seq*]:
+    | a=compound_stmt NEWLINE { _PyPegen_singleton_seq(p, a) }
+    | simple_stmt
+    | NEWLINE { _PyPegen_singleton_seq(p, CHECK(_Py_Pass(EXTRA))) }
+    | ENDMARKER { _PyPegen_interactive_exit(p) }
+simple_stmt[asdl_seq*]:
+    | a=small_stmt !';' NEWLINE { _PyPegen_singleton_seq(p, a) } # Not needed, there for speedup
+    | a=';'.small_stmt+ [';'] NEWLINE { a }
+# NOTE: assignment MUST precede expression, else parsing a simple assignment
+# will throw a SyntaxError.
+small_stmt[stmt_ty] (memo):
+    | assignment
+    | e=star_expressions { _Py_Expr(e, EXTRA) }
+    | &'return' return_stmt
+    | &('import' | 'from') import_stmt
+    | &'raise' raise_stmt
+    | 'pass' { _Py_Pass(EXTRA) }
+    | &'del' del_stmt
+    | &'yield' yield_stmt
+    | &'assert' assert_stmt
+    | 'break' { _Py_Break(EXTRA) }
+    | 'continue' { _Py_Continue(EXTRA) }
+    | &'global' global_stmt
+    | &'nonlocal' nonlocal_stmt
+compound_stmt[stmt_ty]:
+    | &('def' | '@' | ASYNC) function_def
+    | &'if' if_stmt
+    | &('class' | '@') class_def
+    | &('with' | ASYNC) with_stmt
+    | &('for' | ASYNC) for_stmt
+    | &'try' try_stmt
+    | &'while' while_stmt
+
+# NOTE: annotated_rhs may start with 'yield'; yield_expr must start with 'yield'
+assignment[stmt_ty]:
+    | a=NAME ':' b=expression c=['=' d=annotated_rhs { d }] {
+        CHECK_VERSION(
+            6,
+            "Variable annotation syntax is",
+            _Py_AnnAssign(CHECK(_PyPegen_set_expr_context(p, a, Store)), b, c, 1, EXTRA)
+        ) }
+    | a=('(' b=single_target ')' { b }
+         | single_subscript_attribute_target) ':' b=expression c=['=' d=annotated_rhs { d }] {
+        CHECK_VERSION(6, "Variable annotations syntax is", _Py_AnnAssign(a, b, c, 0, EXTRA)) }
+    | a=(z=star_targets '=' { z })+ b=(yield_expr | star_expressions) !'=' tc=[TYPE_COMMENT] {
+         _Py_Assign(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
+    | a=single_target b=augassign ~ c=(yield_expr | star_expressions) {
+         _Py_AugAssign(a, b->kind, c, EXTRA) }
+    | invalid_assignment
+
+augassign[AugOperator*]:
+    | '+=' { _PyPegen_augoperator(p, Add) }
+    | '-=' { _PyPegen_augoperator(p, Sub) }
+    | '*=' { _PyPegen_augoperator(p, Mult) }
+    | '@=' { CHECK_VERSION(5, "The '@' operator is", _PyPegen_augoperator(p, MatMult)) }
+    | '/=' { _PyPegen_augoperator(p, Div) }
+    | '%=' { _PyPegen_augoperator(p, Mod) }
+    | '&=' { _PyPegen_augoperator(p, BitAnd) }
+    | '|=' { _PyPegen_augoperator(p, BitOr) }
+    | '^=' { _PyPegen_augoperator(p, BitXor) }
+    | '<<=' { _PyPegen_augoperator(p, LShift) }
+    | '>>=' { _PyPegen_augoperator(p, RShift) }
+    | '**=' { _PyPegen_augoperator(p, Pow) }
+    | '//=' { _PyPegen_augoperator(p, FloorDiv) }
+
+global_stmt[stmt_ty]: 'global' a=','.NAME+ {
+    _Py_Global(CHECK(_PyPegen_map_names_to_ids(p, a)), EXTRA) }
+nonlocal_stmt[stmt_ty]: 'nonlocal' a=','.NAME+ {
+    _Py_Nonlocal(CHECK(_PyPegen_map_names_to_ids(p, a)), EXTRA) }
+
+yield_stmt[stmt_ty]: y=yield_expr { _Py_Expr(y, EXTRA) }
+
+assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _Py_Assert(a, b, EXTRA) }
+
+del_stmt[stmt_ty]:
+    | 'del' a=del_targets &(';' | NEWLINE) { _Py_Delete(a, EXTRA) }
+    | invalid_del_stmt
+
+import_stmt[stmt_ty]: import_name | import_from
+import_name[stmt_ty]: 'import' a=dotted_as_names { _Py_Import(a, EXTRA) }
+# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS
+import_from[stmt_ty]:
+    | 'from' a=('.' | '...')* b=dotted_name 'import' c=import_from_targets {
+        _Py_ImportFrom(b->v.Name.id, c, _PyPegen_seq_count_dots(a), EXTRA) }
+    | 'from' a=('.' | '...')+ 'import' b=import_from_targets {
+        _Py_ImportFrom(NULL, b, _PyPegen_seq_count_dots(a), EXTRA) }
+import_from_targets[asdl_seq*]:
+    | '(' a=import_from_as_names [','] ')' { a }
+    | import_from_as_names !','
+    | '*' { _PyPegen_singleton_seq(p, CHECK(_PyPegen_alias_for_star(p))) }
+    | invalid_import_from_targets
+import_from_as_names[asdl_seq*]:
+    | a=','.import_from_as_name+ { a }
+import_from_as_name[alias_ty]:
+    | a=NAME b=['as' z=NAME { z }] { _Py_alias(a->v.Name.id,
+                                               (b) ? ((expr_ty) b)->v.Name.id : NULL,
+                                               p->arena) }
+dotted_as_names[asdl_seq*]:
+    | a=','.dotted_as_name+ { a }
+dotted_as_name[alias_ty]:
+    | a=dotted_name b=['as' z=NAME { z }] { _Py_alias(a->v.Name.id,
+                                                      (b) ? ((expr_ty) b)->v.Name.id : NULL,
+                                                      p->arena) }
+dotted_name[expr_ty]:
+    | a=dotted_name '.' b=NAME { _PyPegen_join_names_with_dot(p, a, b) }
+    | NAME
+
+if_stmt[stmt_ty]:
+    | 'if' a=named_expression ':' b=block c=elif_stmt { _Py_If(a, b, CHECK(_PyPegen_singleton_seq(p, c)), EXTRA) }
+    | 'if' a=named_expression ':' b=block c=[else_block] { _Py_If(a, b, c, EXTRA) }
+elif_stmt[stmt_ty]:
+    | 'elif' a=named_expression ':' b=block c=elif_stmt { _Py_If(a, b, CHECK(_PyPegen_singleton_seq(p, c)), EXTRA) }
+    | 'elif' a=named_expression ':' b=block c=[else_block] { _Py_If(a, b, c, EXTRA) }
+else_block[asdl_seq*]: 'else' ':' b=block { b }
+
+while_stmt[stmt_ty]:
+    | 'while' a=named_expression ':' b=block c=[else_block] { _Py_While(a, b, c, EXTRA) }
+
+for_stmt[stmt_ty]:
+    | 'for' t=star_targets 'in' ~ ex=star_expressions ':' tc=[TYPE_COMMENT] b=block el=[else_block] {
+        _Py_For(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA) }
+    | ASYNC 'for' t=star_targets 'in' ~ ex=star_expressions ':' tc=[TYPE_COMMENT] b=block el=[else_block] {
+        CHECK_VERSION(5, "Async for loops are", _Py_AsyncFor(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA)) }
+    | invalid_for_target
+
+with_stmt[stmt_ty]:
+    | 'with' '(' a=','.with_item+ ','? ')' ':' b=block {
+        _Py_With(a, b, NULL, EXTRA) }
+    | 'with' a=','.with_item+ ':' tc=[TYPE_COMMENT] b=block {
+        _Py_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
+    | ASYNC 'with' '(' a=','.with_item+ ','? ')' ':' b=block {
+       CHECK_VERSION(5, "Async with statements are", _Py_AsyncWith(a, b, NULL, EXTRA)) }
+    | ASYNC 'with' a=','.with_item+ ':' tc=[TYPE_COMMENT] b=block {
+       CHECK_VERSION(5, "Async with statements are", _Py_AsyncWith(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA)) }
+with_item[withitem_ty]:
+    | e=expression 'as' t=star_target &(',' | ')' | ':') { _Py_withitem(e, t, p->arena) }
+    | invalid_with_item
+    | e=expression { _Py_withitem(e, NULL, p->arena) }
+
+try_stmt[stmt_ty]:
+    | 'try' ':' b=block f=finally_block { _Py_Try(b, NULL, NULL, f, EXTRA) }
+    | 'try' ':' b=block ex=except_block+ el=[else_block] f=[finally_block] { _Py_Try(b, ex, el, f, EXTRA) }
+except_block[excepthandler_ty]:
+    | 'except' e=expression t=['as' z=NAME { z }] ':' b=block {
+        _Py_ExceptHandler(e, (t) ? ((expr_ty) t)->v.Name.id : NULL, b, EXTRA) }
+    | 'except' ':' b=block { _Py_ExceptHandler(NULL, NULL, b, EXTRA) }
+finally_block[asdl_seq*]: 'finally' ':' a=block { a }
+
+return_stmt[stmt_ty]:
+    | 'return' a=[star_expressions] { _Py_Return(a, EXTRA) }
+
+raise_stmt[stmt_ty]:
+    | 'raise' a=expression b=['from' z=expression { z }] { _Py_Raise(a, b, EXTRA) }
+    | 'raise' { _Py_Raise(NULL, NULL, EXTRA) }
+
+function_def[stmt_ty]:
+    | d=decorators f=function_def_raw { _PyPegen_function_def_decorators(p, d, f) }
+    | function_def_raw
+
+function_def_raw[stmt_ty]:
+    | 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] ':' tc=[func_type_comment] b=block {
+        _Py_FunctionDef(n->v.Name.id,
+                        (params) ? params : CHECK(_PyPegen_empty_arguments(p)),
+                        b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) }
+    | ASYNC 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] ':' tc=[func_type_comment] b=block {
+        CHECK_VERSION(
+            5,
+            "Async functions are",
+            _Py_AsyncFunctionDef(n->v.Name.id,
+                            (params) ? params : CHECK(_PyPegen_empty_arguments(p)),
+                            b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA)
+        ) }
+func_type_comment[Token*]:
+    | NEWLINE t=TYPE_COMMENT &(NEWLINE INDENT) { t }  # Must be followed by indented block
+    | invalid_double_type_comments
+    | TYPE_COMMENT
+
+params[arguments_ty]:
+    | invalid_parameters
+    | parameters
+
+parameters[arguments_ty]:
+    | a=slash_no_default b=param_no_default* c=param_with_default* d=[star_etc] {
+        _PyPegen_make_arguments(p, a, NULL, b, c, d) }
+    | a=slash_with_default b=param_with_default* c=[star_etc] {
+        _PyPegen_make_arguments(p, NULL, a, NULL, b, c) }
+    | a=param_no_default+ b=param_with_default* c=[star_etc] {
+        _PyPegen_make_arguments(p, NULL, NULL, a, b, c) }
+    | a=param_with_default+ b=[star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)}
+    | a=star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) }
+
+# Some duplication here because we can't write (',' | &')'),
+# which is because we don't support empty alternatives (yet).
+#
+slash_no_default[asdl_seq*]:
+    | a=param_no_default+ '/' ',' { a }
+    | a=param_no_default+ '/' &')' { a }
+slash_with_default[SlashWithDefault*]:
+    | a=param_no_default* b=param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, a, b) }
+    | a=param_no_default* b=param_with_default+ '/' &')' { _PyPegen_slash_with_default(p, a, b) }
+
+star_etc[StarEtc*]:
+    | '*' a=param_no_default b=param_maybe_default* c=[kwds] {
+        _PyPegen_star_etc(p, a, b, c) }
+    | '*' ',' b=param_maybe_default+ c=[kwds] {
+        _PyPegen_star_etc(p, NULL, b, c) }
+    | a=kwds { _PyPegen_star_etc(p, NULL, NULL, a) }
+    | invalid_star_etc
+
+kwds[arg_ty]: '**' a=param_no_default { a }
+
+# One parameter.  This *includes* a following comma and type comment.
+#
+# There are three styles:
+# - No default
+# - With default
+# - Maybe with default
+#
+# There are two alternative forms of each, to deal with type comments:
+# - Ends in a comma followed by an optional type comment
+# - No comma, optional type comment, must be followed by close paren
+# The latter form is for a final parameter without trailing comma.
+#
+param_no_default[arg_ty]:
+    | a=param ',' tc=TYPE_COMMENT? { _PyPegen_add_type_comment_to_arg(p, a, tc) }
+    | a=param tc=TYPE_COMMENT? &')' { _PyPegen_add_type_comment_to_arg(p, a, tc) }
+param_with_default[NameDefaultPair*]:
+    | a=param c=default ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) }
+    | a=param c=default tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) }
+param_maybe_default[NameDefaultPair*]:
+    | a=param c=default? ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) }
+    | a=param c=default? tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) }
+param[arg_ty]: a=NAME b=annotation? { _Py_arg(a->v.Name.id, b, NULL, EXTRA) }
+
+annotation[expr_ty]: ':' a=expression { a }
+default[expr_ty]: '=' a=expression { a }
+
+decorators[asdl_seq*]: a=('@' f=named_expression NEWLINE { f })+ { a }
+
+class_def[stmt_ty]:
+    | a=decorators b=class_def_raw { _PyPegen_class_def_decorators(p, a, b) }
+    | class_def_raw
+class_def_raw[stmt_ty]:
+    | 'class' a=NAME b=['(' z=[arguments] ')' { z }] ':' c=block {
+        _Py_ClassDef(a->v.Name.id,
+                     (b) ? ((expr_ty) b)->v.Call.args : NULL,
+                     (b) ? ((expr_ty) b)->v.Call.keywords : NULL,
+                     c, NULL, EXTRA) }
+
+block[asdl_seq*] (memo):
+    | NEWLINE INDENT a=statements DEDENT { a }
+    | simple_stmt
+    | invalid_block
+
+star_expressions[expr_ty]:
+    | a=star_expression b=(',' c=star_expression { c })+ [','] {
+        _Py_Tuple(CHECK(_PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) }
+    | a=star_expression ',' { _Py_Tuple(CHECK(_PyPegen_singleton_seq(p, a)), Load, EXTRA) }
+    | star_expression
+star_expression[expr_ty] (memo):
+    | '*' a=bitwise_or { _Py_Starred(a, Load, EXTRA) }
+    | expression
+
+star_named_expressions[asdl_seq*]: a=','.star_named_expression+ [','] { a }
+star_named_expression[expr_ty]:
+    | '*' a=bitwise_or { _Py_Starred(a, Load, EXTRA) }
+    | named_expression
+named_expression[expr_ty]:
+    | a=NAME ':=' ~ b=expression { _Py_NamedExpr(CHECK(_PyPegen_set_expr_context(p, a, Store)), b, EXTRA) }
+    | expression !':='
+    | invalid_named_expression
+
+annotated_rhs[expr_ty]: yield_expr | star_expressions
+
+expressions[expr_ty]:
+    | a=expression b=(',' c=expression { c })+ [','] {
+        _Py_Tuple(CHECK(_PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) }
+    | a=expression ',' { _Py_Tuple(CHECK(_PyPegen_singleton_seq(p, a)), Load, EXTRA) }
+    | expression
+expression[expr_ty] (memo):
+    | a=disjunction 'if' b=disjunction 'else' c=expression { _Py_IfExp(b, a, c, EXTRA) }
+    | disjunction
+    | lambdef
+
+lambdef[expr_ty]:
+    | 'lambda' a=[lambda_params] ':' b=expression { _Py_Lambda((a) ? a : CHECK(_PyPegen_empty_arguments(p)), b, EXTRA) }
+
+lambda_params[arguments_ty]:
+    | invalid_lambda_parameters
+    | lambda_parameters
+
+# lambda_parameters etc. duplicates parameters but without annotations
+# or type comments, and if there's no comma after a parameter, we expect
+# a colon, not a close parenthesis.  (For more, see parameters above.)
+#
+lambda_parameters[arguments_ty]:
+    | a=lambda_slash_no_default b=lambda_param_no_default* c=lambda_param_with_default* d=[lambda_star_etc] {
+        _PyPegen_make_arguments(p, a, NULL, b, c, d) }
+    | a=lambda_slash_with_default b=lambda_param_with_default* c=[lambda_star_etc] {
+        _PyPegen_make_arguments(p, NULL, a, NULL, b, c) }
+    | a=lambda_param_no_default+ b=lambda_param_with_default* c=[lambda_star_etc] {
+        _PyPegen_make_arguments(p, NULL, NULL, a, b, c) }
+    | a=lambda_param_with_default+ b=[lambda_star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)}
+    | a=lambda_star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) }
+
+lambda_slash_no_default[asdl_seq*]:
+    | a=lambda_param_no_default+ '/' ',' { a }
+    | a=lambda_param_no_default+ '/' &':' { a }
+lambda_slash_with_default[SlashWithDefault*]:
+    | a=lambda_param_no_default* b=lambda_param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, a, b) }
+    | a=lambda_param_no_default* b=lambda_param_with_default+ '/' &':' { _PyPegen_slash_with_default(p, a, b) }
+
+lambda_star_etc[StarEtc*]:
+    | '*' a=lambda_param_no_default b=lambda_param_maybe_default* c=[lambda_kwds] {
+        _PyPegen_star_etc(p, a, b, c) }
+    | '*' ',' b=lambda_param_maybe_default+ c=[lambda_kwds] {
+        _PyPegen_star_etc(p, NULL, b, c) }
+    | a=lambda_kwds { _PyPegen_star_etc(p, NULL, NULL, a) }
+    | invalid_lambda_star_etc
+
+lambda_kwds[arg_ty]: '**' a=lambda_param_no_default { a }
+
+lambda_param_no_default[arg_ty]:
+    | a=lambda_param ',' { a }
+    | a=lambda_param &':' { a }
+lambda_param_with_default[NameDefaultPair*]:
+    | a=lambda_param c=default ',' { _PyPegen_name_default_pair(p, a, c, NULL) }
+    | a=lambda_param c=default &':' { _PyPegen_name_default_pair(p, a, c, NULL) }
+lambda_param_maybe_default[NameDefaultPair*]:
+    | a=lambda_param c=default? ',' { _PyPegen_name_default_pair(p, a, c, NULL) }
+    | a=lambda_param c=default? &':' { _PyPegen_name_default_pair(p, a, c, NULL) }
+lambda_param[arg_ty]: a=NAME { _Py_arg(a->v.Name.id, NULL, NULL, EXTRA) }
+
+disjunction[expr_ty] (memo):
+    | a=conjunction b=('or' c=conjunction { c })+ { _Py_BoolOp(
+        Or,
+        CHECK(_PyPegen_seq_insert_in_front(p, a, b)),
+        EXTRA) }
+    | conjunction
+conjunction[expr_ty] (memo):
+    | a=inversion b=('and' c=inversion { c })+ { _Py_BoolOp(
+        And,
+        CHECK(_PyPegen_seq_insert_in_front(p, a, b)),
+        EXTRA) }
+    | inversion
+inversion[expr_ty] (memo):
+    | 'not' a=inversion { _Py_UnaryOp(Not, a, EXTRA) }
+    | comparison
+comparison[expr_ty]:
+    | a=bitwise_or b=compare_op_bitwise_or_pair+ {
+        _Py_Compare(a, CHECK(_PyPegen_get_cmpops(p, b)), CHECK(_PyPegen_get_exprs(p, b)), EXTRA) }
+    | bitwise_or
+compare_op_bitwise_or_pair[CmpopExprPair*]:
+    | eq_bitwise_or
+    | noteq_bitwise_or
+    | lte_bitwise_or
+    | lt_bitwise_or
+    | gte_bitwise_or
+    | gt_bitwise_or
+    | notin_bitwise_or
+    | in_bitwise_or
+    | isnot_bitwise_or
+    | is_bitwise_or
+eq_bitwise_or[CmpopExprPair*]: '==' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Eq, a) }
+noteq_bitwise_or[CmpopExprPair*]:
+    | (tok='!=' { _PyPegen_check_barry_as_flufl(p, tok) ? NULL : tok}) a=bitwise_or {_PyPegen_cmpop_expr_pair(p, NotEq, a) }
+lte_bitwise_or[CmpopExprPair*]: '<=' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, LtE, a) }
+lt_bitwise_or[CmpopExprPair*]: '<' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Lt, a) }
+gte_bitwise_or[CmpopExprPair*]: '>=' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, GtE, a) }
+gt_bitwise_or[CmpopExprPair*]: '>' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Gt, a) }
+notin_bitwise_or[CmpopExprPair*]: 'not' 'in' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, NotIn, a) }
+in_bitwise_or[CmpopExprPair*]: 'in' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, In, a) }
+isnot_bitwise_or[CmpopExprPair*]: 'is' 'not' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, IsNot, a) }
+is_bitwise_or[CmpopExprPair*]: 'is' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Is, a) }
+
+bitwise_or[expr_ty]:
+    | a=bitwise_or '|' b=bitwise_xor { _Py_BinOp(a, BitOr, b, EXTRA) }
+    | bitwise_xor
+bitwise_xor[expr_ty]:
+    | a=bitwise_xor '^' b=bitwise_and { _Py_BinOp(a, BitXor, b, EXTRA) }
+    | bitwise_and
+bitwise_and[expr_ty]:
+    | a=bitwise_and '&' b=shift_expr { _Py_BinOp(a, BitAnd, b, EXTRA) }
+    | shift_expr
+shift_expr[expr_ty]:
+    | a=shift_expr '<<' b=sum { _Py_BinOp(a, LShift, b, EXTRA) }
+    | a=shift_expr '>>' b=sum { _Py_BinOp(a, RShift, b, EXTRA) }
+    | sum
+
+sum[expr_ty]:
+    | a=sum '+' b=term { _Py_BinOp(a, Add, b, EXTRA) }
+    | a=sum '-' b=term { _Py_BinOp(a, Sub, b, EXTRA) }
+    | term
+term[expr_ty]:
+    | a=term '*' b=factor { _Py_BinOp(a, Mult, b, EXTRA) }
+    | a=term '/' b=factor { _Py_BinOp(a, Div, b, EXTRA) }
+    | a=term '//' b=factor { _Py_BinOp(a, FloorDiv, b, EXTRA) }
+    | a=term '%' b=factor { _Py_BinOp(a, Mod, b, EXTRA) }
+    | a=term '@' b=factor { CHECK_VERSION(5, "The '@' operator is", _Py_BinOp(a, MatMult, b, EXTRA)) }
+    | factor
+factor[expr_ty] (memo):
+    | '+' a=factor { _Py_UnaryOp(UAdd, a, EXTRA) }
+    | '-' a=factor { _Py_UnaryOp(USub, a, EXTRA) }
+    | '~' a=factor { _Py_UnaryOp(Invert, a, EXTRA) }
+    | power
+power[expr_ty]:
+    | a=await_primary '**' b=factor { _Py_BinOp(a, Pow, b, EXTRA) }
+    | await_primary
+await_primary[expr_ty] (memo):
+    | AWAIT a=primary { CHECK_VERSION(5, "Await expressions are", _Py_Await(a, EXTRA)) }
+    | primary
+primary[expr_ty]:
+    | invalid_primary  # must be before 'primay genexp' because of invalid_genexp
+    | a=primary '.' b=NAME { _Py_Attribute(a, b->v.Name.id, Load, EXTRA) }
+    | a=primary b=genexp { _Py_Call(a, CHECK(_PyPegen_singleton_seq(p, b)), NULL, EXTRA) }
+    | a=primary '(' b=[arguments] ')' {
+        _Py_Call(a,
+                 (b) ? ((expr_ty) b)->v.Call.args : NULL,
+                 (b) ? ((expr_ty) b)->v.Call.keywords : NULL,
+                 EXTRA) }
+    | a=primary '[' b=slices ']' { _Py_Subscript(a, b, Load, EXTRA) }
+    | atom
+
+slices[expr_ty]:
+    | a=slice !',' { a }
+    | a=','.slice+ [','] { _Py_Tuple(a, Load, EXTRA) }
+slice[expr_ty]:
+    | a=[expression] ':' b=[expression] c=[':' d=[expression] { d }] { _Py_Slice(a, b, c, EXTRA) }
+    | a=expression { a }
+atom[expr_ty]:
+    | NAME
+    | 'True' { _Py_Constant(Py_True, NULL, EXTRA) }
+    | 'False' { _Py_Constant(Py_False, NULL, EXTRA) }
+    | 'None' { _Py_Constant(Py_None, NULL, EXTRA) }
+    | '__peg_parser__' { RAISE_SYNTAX_ERROR("You found it!") }
+    | &STRING strings
+    | NUMBER
+    | &'(' (tuple | group | genexp)
+    | &'[' (list | listcomp)
+    | &'{' (dict | set | dictcomp | setcomp)
+    | '...' { _Py_Constant(Py_Ellipsis, NULL, EXTRA) }
+
+strings[expr_ty] (memo): a=STRING+ { _PyPegen_concatenate_strings(p, a) }
+list[expr_ty]:
+    | '[' a=[star_named_expressions] ']' { _Py_List(a, Load, EXTRA) }
+listcomp[expr_ty]:
+    | '[' a=named_expression ~ b=for_if_clauses ']' { _Py_ListComp(a, b, EXTRA) }
+    | invalid_comprehension
+tuple[expr_ty]:
+    | '(' a=[y=star_named_expression ',' z=[star_named_expressions] { _PyPegen_seq_insert_in_front(p, y, z) } ] ')' {
+        _Py_Tuple(a, Load, EXTRA) }
+group[expr_ty]:
+    | '(' a=(yield_expr | named_expression) ')' { a }
+    | invalid_group
+genexp[expr_ty]:
+    | '(' a=named_expression ~ b=for_if_clauses ')' { _Py_GeneratorExp(a, b, EXTRA) }
+    | invalid_comprehension
+set[expr_ty]: '{' a=star_named_expressions '}' { _Py_Set(a, EXTRA) }
+setcomp[expr_ty]:
+    | '{' a=named_expression ~ b=for_if_clauses '}' { _Py_SetComp(a, b, EXTRA) }
+    | invalid_comprehension
+dict[expr_ty]:
+    | '{' a=[double_starred_kvpairs] '}' {
+        _Py_Dict(CHECK(_PyPegen_get_keys(p, a)), CHECK(_PyPegen_get_values(p, a)), EXTRA) }
+dictcomp[expr_ty]:
+    | '{' a=kvpair b=for_if_clauses '}' { _Py_DictComp(a->key, a->value, b, EXTRA) }
+    | invalid_dict_comprehension
+double_starred_kvpairs[asdl_seq*]: a=','.double_starred_kvpair+ [','] { a }
+double_starred_kvpair[KeyValuePair*]:
+    | '**' a=bitwise_or { _PyPegen_key_value_pair(p, NULL, a) }
+    | kvpair
+kvpair[KeyValuePair*]: a=expression ':' b=expression { _PyPegen_key_value_pair(p, a, b) }
+for_if_clauses[asdl_seq*]:
+    | for_if_clause+
+for_if_clause[comprehension_ty]:
+    | ASYNC 'for' a=star_targets 'in' ~ b=disjunction c=('if' z=disjunction { z })* {
+        CHECK_VERSION(6, "Async comprehensions are", _Py_comprehension(a, b, c, 1, p->arena)) }
+    | 'for' a=star_targets 'in' ~ b=disjunction c=('if' z=disjunction { z })* {
+        _Py_comprehension(a, b, c, 0, p->arena) }
+    | invalid_for_target
+
+yield_expr[expr_ty]:
+    | 'yield' 'from' a=expression { _Py_YieldFrom(a, EXTRA) }
+    | 'yield' a=[star_expressions] { _Py_Yield(a, EXTRA) }
+
+arguments[expr_ty] (memo):
+    | a=args [','] &')' { a }
+    | invalid_arguments
+args[expr_ty]:
+    | a=','.(starred_expression | named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) }
+    | a=kwargs { _Py_Call(_PyPegen_dummy_name(p),
+                          CHECK_NULL_ALLOWED(_PyPegen_seq_extract_starred_exprs(p, a)),
+                          CHECK_NULL_ALLOWED(_PyPegen_seq_delete_starred_exprs(p, a)),
+                          EXTRA) }
+kwargs[asdl_seq*]:
+    | a=','.kwarg_or_starred+ ',' b=','.kwarg_or_double_starred+ { _PyPegen_join_sequences(p, a, b) }
+    | ','.kwarg_or_starred+
+    | ','.kwarg_or_double_starred+
+starred_expression[expr_ty]:
+    | '*' a=expression { _Py_Starred(a, Load, EXTRA) }
+kwarg_or_starred[KeywordOrStarred*]:
+    | a=NAME '=' b=expression {
+        _PyPegen_keyword_or_starred(p, CHECK(_Py_keyword(a->v.Name.id, b, EXTRA)), 1) }
+    | a=starred_expression { _PyPegen_keyword_or_starred(p, a, 0) }
+    | invalid_kwarg
+kwarg_or_double_starred[KeywordOrStarred*]:
+    | a=NAME '=' b=expression {
+        _PyPegen_keyword_or_starred(p, CHECK(_Py_keyword(a->v.Name.id, b, EXTRA)), 1) }
+    | '**' a=expression { _PyPegen_keyword_or_starred(p, CHECK(_Py_keyword(NULL, a, EXTRA)), 1) }
+    | invalid_kwarg
+
+# NOTE: star_targets may contain *bitwise_or, targets may not.
+star_targets[expr_ty]:
+    | a=star_target !',' { a }
+    | a=star_target b=(',' c=star_target { c })* [','] {
+        _Py_Tuple(CHECK(_PyPegen_seq_insert_in_front(p, a, b)), Store, EXTRA) }
+star_targets_seq[asdl_seq*]: a=','.star_target+ [','] { a }
+star_target[expr_ty] (memo):
+    | '*' a=(!'*' star_target) {
+        _Py_Starred(CHECK(_PyPegen_set_expr_context(p, a, Store)), Store, EXTRA) }
+    | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Store, EXTRA) }
+    | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Store, EXTRA) }
+    | star_atom
+star_atom[expr_ty]:
+    | a=NAME { _PyPegen_set_expr_context(p, a, Store) }
+    | '(' a=star_target ')' { _PyPegen_set_expr_context(p, a, Store) }
+    | '(' a=[star_targets_seq] ')' { _Py_Tuple(a, Store, EXTRA) }
+    | '[' a=[star_targets_seq] ']' { _Py_List(a, Store, EXTRA) }
+
+single_target[expr_ty]:
+    | single_subscript_attribute_target
+    | a=NAME { _PyPegen_set_expr_context(p, a, Store) }
+    | '(' a=single_target ')' { a }
+single_subscript_attribute_target[expr_ty]:
+    | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Store, EXTRA) }
+    | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Store, EXTRA) }
+
+del_targets[asdl_seq*]: a=','.del_target+ [','] { a }
+del_target[expr_ty] (memo):
+    | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Del, EXTRA) }
+    | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Del, EXTRA) }
+    | del_t_atom
+del_t_atom[expr_ty]:
+    | a=NAME { _PyPegen_set_expr_context(p, a, Del) }
+    | '(' a=del_target ')' { _PyPegen_set_expr_context(p, a, Del) }
+    | '(' a=[del_targets] ')' { _Py_Tuple(a, Del, EXTRA) }
+    | '[' a=[del_targets] ']' { _Py_List(a, Del, EXTRA) }
+
+targets[asdl_seq*]: a=','.target+ [','] { a }
+target[expr_ty] (memo):
+    | a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Store, EXTRA) }
+    | a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Store, EXTRA) }
+    | t_atom
+t_primary[expr_ty]:
+    | a=t_primary '.' b=NAME &t_lookahead { _Py_Attribute(a, b->v.Name.id, Load, EXTRA) }
+    | a=t_primary '[' b=slices ']' &t_lookahead { _Py_Subscript(a, b, Load, EXTRA) }
+    | a=t_primary b=genexp &t_lookahead { _Py_Call(a, CHECK(_PyPegen_singleton_seq(p, b)), NULL, EXTRA) }
+    | a=t_primary '(' b=[arguments] ')' &t_lookahead {
+        _Py_Call(a,
+                 (b) ? ((expr_ty) b)->v.Call.args : NULL,
+                 (b) ? ((expr_ty) b)->v.Call.keywords : NULL,
+                 EXTRA) }
+    | a=atom &t_lookahead { a }
+t_lookahead: '(' | '[' | '.'
+t_atom[expr_ty]:
+    | a=NAME { _PyPegen_set_expr_context(p, a, Store) }
+    | '(' a=target ')' { _PyPegen_set_expr_context(p, a, Store) }
+    | '(' b=[targets] ')' { _Py_Tuple(b, Store, EXTRA) }
+    | '[' b=[targets] ']' { _Py_List(b, Store, EXTRA) }
+
+
+# From here on, there are rules for invalid syntax with specialised error messages
+invalid_arguments:
+    | args ',' '*' { RAISE_SYNTAX_ERROR("iterable argument unpacking follows keyword argument unpacking") }
+    | a=expression for_if_clauses ',' [args | expression for_if_clauses] {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "Generator expression must be parenthesized") }
+    | a=args for_if_clauses { _PyPegen_nonparen_genexp_in_call(p, a) }
+    | args ',' a=expression for_if_clauses {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "Generator expression must be parenthesized") }
+    | a=args ',' args { _PyPegen_arguments_parsing_error(p, a) }
+invalid_kwarg:
+    | a=expression '=' {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
+            a, "expression cannot contain assignment, perhaps you meant \"==\"?") }
+invalid_named_expression:
+    | a=expression ':=' expression {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
+            a, "cannot use assignment expressions with %s", _PyPegen_get_expr_name(a)) }
+invalid_assignment:
+    | a=invalid_ann_assign_target ':' expression {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
+            a,
+            "only single target (not %s) can be annotated",
+            _PyPegen_get_expr_name(a)
+        )}
+    | a=star_named_expression ',' star_named_expressions* ':' expression {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "only single target (not tuple) can be annotated") }
+    | a=expression ':' expression {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "illegal target for annotation") }
+    | (star_targets '=')* a=star_expressions '=' {
+        RAISE_SYNTAX_ERROR_INVALID_TARGET(STAR_TARGETS, a) }
+    | (star_targets '=')* a=yield_expr '=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "assignment to yield expression not possible") }
+    | a=star_expressions augassign (yield_expr | star_expressions) {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION( 
+            a,
+            "'%s' is an illegal expression for augmented assignment",
+            _PyPegen_get_expr_name(a)
+        )}
+invalid_ann_assign_target[expr_ty]:
+    | list
+    | tuple
+    | '(' a=invalid_ann_assign_target ')' { a }
+invalid_del_stmt:
+    | 'del' a=star_expressions {
+        RAISE_SYNTAX_ERROR_INVALID_TARGET(DEL_TARGETS, a) }
+invalid_block:
+    | NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block") }
+invalid_primary:
+    | primary a='{' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "invalid syntax") }
+invalid_comprehension:
+    | ('[' | '(' | '{') a=starred_expression for_if_clauses {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "iterable unpacking cannot be used in comprehension") }
+invalid_dict_comprehension:
+    | '{' a='**' bitwise_or for_if_clauses '}' {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "dict unpacking cannot be used in dict comprehension") }
+invalid_parameters:
+    | param_no_default* (slash_with_default | param_with_default+) param_no_default {
+        RAISE_SYNTAX_ERROR("non-default argument follows default argument") }
+invalid_lambda_parameters:
+    | lambda_param_no_default* (lambda_slash_with_default | lambda_param_with_default+) lambda_param_no_default {
+        RAISE_SYNTAX_ERROR("non-default argument follows default argument") }
+invalid_star_etc:
+    | '*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") }
+    | '*' ',' TYPE_COMMENT { RAISE_SYNTAX_ERROR("bare * has associated type comment") }
+invalid_lambda_star_etc:
+    | '*' (':' | ',' (':' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") }
+invalid_double_type_comments:
+    | TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT {
+        RAISE_SYNTAX_ERROR("Cannot have two type comments on def") }
+invalid_with_item:
+    | expression 'as' a=expression {
+        RAISE_SYNTAX_ERROR_INVALID_TARGET(STAR_TARGETS, a) }
+
+invalid_for_target:
+    | ASYNC? 'for' a=star_expressions {
+        RAISE_SYNTAX_ERROR_INVALID_TARGET(FOR_TARGETS, a) }
+
+invalid_group:
+    | '(' a=starred_expression ')' {
+        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "can't use starred expression here") }
+invalid_import_from_targets:
+    | import_from_as_names ',' {
+        RAISE_SYNTAX_ERROR("trailing comma not allowed without surrounding parentheses") }
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 5fe4f2b..e7afa1e 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -6,6 +6,7 @@
 extern "C" {
 #endif
 
+#ifndef Py_LIMITED_API
 #include "asdl.h"
 
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
@@ -16,10 +17,7 @@
 
 typedef struct _expr *expr_ty;
 
-typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
-                             Param=6 } expr_context_ty;
-
-typedef struct _slice *slice_ty;
+typedef enum _expr_context { Load=1, Store=2, Del=3 } expr_context_ty;
 
 typedef enum _boolop { And=1, Or=2 } boolop_ty;
 
@@ -50,7 +48,7 @@
 
 
 enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
-                 FunctionType_kind=4, Suite_kind=5};
+                 FunctionType_kind=4};
 struct _mod {
     enum _mod_kind kind;
     union {
@@ -72,10 +70,6 @@
             expr_ty returns;
         } FunctionType;
 
-        struct {
-            asdl_seq *body;
-        } Suite;
-
     } v;
 };
 
@@ -236,7 +230,7 @@
                   YieldFrom_kind=15, Compare_kind=16, Call_kind=17,
                   FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20,
                   Attribute_kind=21, Subscript_kind=22, Starred_kind=23,
-                  Name_kind=24, List_kind=25, Tuple_kind=26};
+                  Name_kind=24, List_kind=25, Tuple_kind=26, Slice_kind=27};
 struct _expr {
     enum _expr_kind kind;
     union {
@@ -349,7 +343,7 @@
 
         struct {
             expr_ty value;
-            slice_ty slice;
+            expr_ty slice;
             expr_context_ty ctx;
         } Subscript;
 
@@ -373,32 +367,17 @@
             expr_context_ty ctx;
         } Tuple;
 
-    } v;
-    int lineno;
-    int col_offset;
-    int end_lineno;
-    int end_col_offset;
-};
-
-enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3};
-struct _slice {
-    enum _slice_kind kind;
-    union {
         struct {
             expr_ty lower;
             expr_ty upper;
             expr_ty step;
         } Slice;
 
-        struct {
-            asdl_seq *dims;
-        } ExtSlice;
-
-        struct {
-            expr_ty value;
-        } Index;
-
     } v;
+    int lineno;
+    int col_offset;
+    int end_lineno;
+    int end_col_offset;
 };
 
 struct _comprehension {
@@ -448,6 +427,10 @@
 struct _keyword {
     identifier arg;
     expr_ty value;
+    int lineno;
+    int col_offset;
+    int end_lineno;
+    int end_col_offset;
 };
 
 struct _alias {
@@ -482,8 +465,6 @@
 mod_ty _Py_Expression(expr_ty body, PyArena *arena);
 #define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2)
 mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena);
-#define Suite(a0, a1) _Py_Suite(a0, a1)
-mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
 #define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
 stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
                         asdl_seq * decorator_list, expr_ty returns, string
@@ -653,7 +634,7 @@
                       lineno, int col_offset, int end_lineno, int
                       end_col_offset, PyArena *arena);
 #define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7)
-expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int
+expr_ty _Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int
                       lineno, int col_offset, int end_lineno, int
                       end_col_offset, PyArena *arena);
 #define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6)
@@ -672,12 +653,10 @@
 expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int
                   col_offset, int end_lineno, int end_col_offset, PyArena
                   *arena);
-#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3)
-slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena);
-#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1)
-slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena);
-#define Index(a0, a1) _Py_Index(a0, a1)
-slice_ty _Py_Index(expr_ty value, PyArena *arena);
+#define Slice(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Slice(a0, a1, a2, a3, a4, a5, a6, a7)
+expr_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int
+                  col_offset, int end_lineno, int end_col_offset, PyArena
+                  *arena);
 #define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4)
 comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq *
                                    ifs, int is_async, PyArena *arena);
@@ -695,8 +674,10 @@
 arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int
                lineno, int col_offset, int end_lineno, int end_col_offset,
                PyArena *arena);
-#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2)
-keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena);
+#define keyword(a0, a1, a2, a3, a4, a5, a6) _Py_keyword(a0, a1, a2, a3, a4, a5, a6)
+keyword_ty _Py_keyword(identifier arg, expr_ty value, int lineno, int
+                       col_offset, int end_lineno, int end_col_offset, PyArena
+                       *arena);
 #define alias(a0, a1, a2) _Py_alias(a0, a1, a2)
 alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena);
 #define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2)
@@ -708,6 +689,7 @@
 PyObject* PyAST_mod2obj(mod_ty t);
 mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
 int PyAST_Check(PyObject* obj);
+#endif /* !Py_LIMITED_API */
 
 #ifdef __cplusplus
 }
diff --git a/Include/Python.h b/Include/Python.h
index d6e5b13..dcd0a57 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -114,12 +114,15 @@
 #include "classobject.h"
 #include "fileobject.h"
 #include "pycapsule.h"
+#include "code.h"
+#include "pyframe.h"
 #include "traceback.h"
 #include "sliceobject.h"
 #include "cellobject.h"
 #include "iterobject.h"
 #include "genobject.h"
 #include "descrobject.h"
+#include "genericaliasobject.h"
 #include "warnings.h"
 #include "weakrefobject.h"
 #include "structseq.h"
@@ -130,6 +133,7 @@
 #include "pyerrors.h"
 
 #include "cpython/initconfig.h"
+#include "pythread.h"
 #include "pystate.h"
 #include "context.h"
 
@@ -152,7 +156,6 @@
 #include "pyctype.h"
 #include "pystrtod.h"
 #include "pystrcmp.h"
-#include "dtoa.h"
 #include "fileutils.h"
 #include "pyfpe.h"
 #include "tracemalloc.h"
diff --git a/Include/abstract.h b/Include/abstract.h
index 777fd70..bb51c66 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -141,6 +141,12 @@
 #endif
 
 
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* Call a callable Python object without any arguments */
+PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func);
+#endif
+
+
 /* Call a callable Python object 'callable' with arguments given by the
    tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
 
@@ -696,7 +702,7 @@
      (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
 
 /* Return a pointer to the underlying item array for
-   an object retured by PySequence_Fast */
+   an object returned by PySequence_Fast */
 #define PySequence_Fast_ITEMS(sf) \
     (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
                       : ((PyTupleObject *)(sf))->ob_item)
diff --git a/Include/asdl.h b/Include/asdl.h
index fc6d223..e962560 100644
--- a/Include/asdl.h
+++ b/Include/asdl.h
@@ -1,11 +1,10 @@
+#ifndef Py_LIMITED_API
 #ifndef Py_ASDL_H
 #define Py_ASDL_H
 
 typedef PyObject * identifier;
 typedef PyObject * string;
-typedef PyObject * bytes;
 typedef PyObject * object;
-typedef PyObject * singleton;
 typedef PyObject * constant;
 
 /* It would be nice if the code generated by asdl_c.py was completely
@@ -44,3 +43,4 @@
 #endif
 
 #endif /* !Py_ASDL_H */
+#endif /* Py_LIMITED_API */
diff --git a/Include/ast.h b/Include/ast.h
index f1d7348..a8c52af 100644
--- a/Include/ast.h
+++ b/Include/ast.h
@@ -1,3 +1,4 @@
+#ifndef Py_LIMITED_API
 #ifndef Py_AST_H
 #define Py_AST_H
 #ifdef __cplusplus
@@ -19,19 +20,16 @@
     PyObject *filename,
     PyArena *arena);
 
-#ifndef Py_LIMITED_API
-
 /* _PyAST_ExprAsUnicode is defined in ast_unparse.c */
 PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty);
 
 /* Return the borrowed reference to the first literal string in the
-   sequence of statemnts or NULL if it doesn't start from a literal string.
+   sequence of statements or NULL if it doesn't start from a literal string.
    Doesn't set exception. */
 PyAPI_FUNC(PyObject *) _PyAST_GetDocString(asdl_seq *);
 
-#endif /* !Py_LIMITED_API */
-
 #ifdef __cplusplus
 }
 #endif
 #endif /* !Py_AST_H */
+#endif /* !Py_LIMITED_API */
diff --git a/Include/boolobject.h b/Include/boolobject.h
index 7cc2f1f..bb8044a 100644
--- a/Include/boolobject.h
+++ b/Include/boolobject.h
@@ -9,7 +9,7 @@
 
 PyAPI_DATA(PyTypeObject) PyBool_Type;
 
-#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type)
+#define PyBool_Check(x) Py_IS_TYPE(x, &PyBool_Type)
 
 /* Py_False and Py_True are the only two bools in existence.
 Don't forget to apply Py_INCREF() when returning either!!! */
diff --git a/Include/bytearrayobject.h b/Include/bytearrayobject.h
index a757b88..9e95433 100644
--- a/Include/bytearrayobject.h
+++ b/Include/bytearrayobject.h
@@ -18,25 +18,13 @@
  * to contain a char pointer, not an unsigned char pointer.
  */
 
-/* Object layout */
-#ifndef Py_LIMITED_API
-typedef struct {
-    PyObject_VAR_HEAD
-    Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
-    char *ob_bytes;      /* Physical backing buffer */
-    char *ob_start;      /* Logical start inside ob_bytes */
-    /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
-    int ob_exports;      /* How many buffer exports */
-} PyByteArrayObject;
-#endif
-
 /* Type object */
 PyAPI_DATA(PyTypeObject) PyByteArray_Type;
 PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;
 
 /* Type check macros */
 #define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
-#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type)
+#define PyByteArray_CheckExact(self) Py_IS_TYPE(self, &PyByteArray_Type)
 
 /* Direct API functions */
 PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
@@ -46,14 +34,10 @@
 PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *);
 PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t);
 
-/* Macros, trading safety for speed */
 #ifndef Py_LIMITED_API
-#define PyByteArray_AS_STRING(self) \
-    (assert(PyByteArray_Check(self)), \
-     Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
-#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
-
-PyAPI_DATA(char) _PyByteArray_empty_string[];
+#  define Py_CPYTHON_BYTEARRAYOBJECT_H
+#  include  "cpython/bytearrayobject.h"
+#  undef Py_CPYTHON_BYTEARRAYOBJECT_H
 #endif
 
 #ifdef __cplusplus
diff --git a/Include/bytesobject.h b/Include/bytesobject.h
index 3fde4a2..5062d8d 100644
--- a/Include/bytesobject.h
+++ b/Include/bytesobject.h
@@ -27,26 +27,12 @@
 /* Caching the hash (ob_shash) saves recalculation of a string's hash value.
    This significantly speeds up dict lookups. */
 
-#ifndef Py_LIMITED_API
-typedef struct {
-    PyObject_VAR_HEAD
-    Py_hash_t ob_shash;
-    char ob_sval[1];
-
-    /* Invariants:
-     *     ob_sval contains space for 'ob_size+1' elements.
-     *     ob_sval[ob_size] == 0.
-     *     ob_shash is the hash of the string or -1 if not computed yet.
-     */
-} PyBytesObject;
-#endif
-
 PyAPI_DATA(PyTypeObject) PyBytes_Type;
 PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
 
 #define PyBytes_Check(op) \
                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
-#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)
+#define PyBytes_CheckExact(op) Py_IS_TYPE(op, &PyBytes_Type)
 
 PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
 PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
@@ -60,40 +46,9 @@
 PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
 PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
 PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
-PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
-    const char *format,
-    Py_ssize_t format_len,
-    PyObject *args,
-    int use_bytearray);
-PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
-    PyObject *string,
-    int use_bytearray);
-#endif
 PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
                                             const char *, Py_ssize_t,
                                             const char *);
-#ifndef Py_LIMITED_API
-/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
-PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
-                                             const char *, Py_ssize_t,
-                                             const char *,
-                                             const char **);
-#endif
-
-/* Macro, trading safety for speed */
-#ifndef Py_LIMITED_API
-#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
-                                (((PyBytesObject *)(op))->ob_sval))
-#define PyBytes_GET_SIZE(op)  (assert(PyBytes_Check(op)),Py_SIZE(op))
-#endif
-
-/* _PyBytes_Join(sep, x) is like sep.join(x).  sep must be PyBytesObject*,
-   x must be an iterable object. */
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
-#endif
 
 /* Provides access to the internal data buffer and size of a string
    object or the default encoded version of a Unicode object. Passing
@@ -108,28 +63,6 @@
                            strings) */
     );
 
-/* Using the current locale, insert the thousands grouping
-   into the string pointed to by buffer.  For the argument descriptions,
-   see Objects/stringlib/localeutil.h */
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
-                                                   Py_ssize_t n_buffer,
-                                                   char *digits,
-                                                   Py_ssize_t n_digits,
-                                                   Py_ssize_t min_width);
-
-/* Using explicit passed-in values, insert the thousands grouping
-   into the string pointed to by buffer.  For the argument descriptions,
-   see Objects/stringlib/localeutil.h */
-PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
-                                                   Py_ssize_t n_buffer,
-                                                   char *digits,
-                                                   Py_ssize_t n_digits,
-                                                   Py_ssize_t min_width,
-                                                   const char *grouping,
-                                                   const char *thousands_sep);
-#endif
-
 /* Flags used by string formatting */
 #define F_LJUST (1<<0)
 #define F_SIGN  (1<<1)
@@ -138,85 +71,10 @@
 #define F_ZERO  (1<<4)
 
 #ifndef Py_LIMITED_API
-/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
-   A _PyBytesWriter variable must be declared at the end of variables in a
-   function to optimize the memory allocation on the stack. */
-typedef struct {
-    /* bytes, bytearray or NULL (when the small buffer is used) */
-    PyObject *buffer;
-
-    /* Number of allocated size. */
-    Py_ssize_t allocated;
-
-    /* Minimum number of allocated bytes,
-       incremented by _PyBytesWriter_Prepare() */
-    Py_ssize_t min_size;
-
-    /* If non-zero, use a bytearray instead of a bytes object for buffer. */
-    int use_bytearray;
-
-    /* If non-zero, overallocate the buffer (default: 0).
-       This flag must be zero if use_bytearray is non-zero. */
-    int overallocate;
-
-    /* Stack buffer */
-    int use_small_buffer;
-    char small_buffer[512];
-} _PyBytesWriter;
-
-/* Initialize a bytes writer
-
-   By default, the overallocation is disabled. Set the overallocate attribute
-   to control the allocation of the buffer. */
-PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
-
-/* Get the buffer content and reset the writer.
-   Return a bytes object, or a bytearray object if use_bytearray is non-zero.
-   Raise an exception and return NULL on error. */
-PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
-    void *str);
-
-/* Deallocate memory of a writer (clear its internal buffer). */
-PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
-
-/* Allocate the buffer to write size bytes.
-   Return the pointer to the beginning of buffer data.
-   Raise an exception and return NULL on error. */
-PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
-    Py_ssize_t size);
-
-/* Ensure that the buffer is large enough to write *size* bytes.
-   Add size to the writer minimum size (min_size attribute).
-
-   str is the current pointer inside the buffer.
-   Return the updated current pointer inside the buffer.
-   Raise an exception and return NULL on error. */
-PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
-    void *str,
-    Py_ssize_t size);
-
-/* Resize the buffer to make it larger.
-   The new buffer may be larger than size bytes because of overallocation.
-   Return the updated current pointer inside the buffer.
-   Raise an exception and return NULL on error.
-
-   Note: size must be greater than the number of allocated bytes in the writer.
-
-   This function doesn't use the writer minimum size (min_size attribute).
-
-   See also _PyBytesWriter_Prepare().
-   */
-PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
-    void *str,
-    Py_ssize_t size);
-
-/* Write bytes.
-   Raise an exception and return NULL on error. */
-PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
-    void *str,
-    const void *bytes,
-    Py_ssize_t size);
-#endif   /* Py_LIMITED_API */
+#  define Py_CPYTHON_BYTESOBJECT_H
+#  include  "cpython/bytesobject.h"
+#  undef Py_CPYTHON_BYTESOBJECT_H
+#endif
 
 #ifdef __cplusplus
 }
diff --git a/Include/cellobject.h b/Include/cellobject.h
index 2f9b5b7..f12aa90 100644
--- a/Include/cellobject.h
+++ b/Include/cellobject.h
@@ -13,7 +13,7 @@
 
 PyAPI_DATA(PyTypeObject) PyCell_Type;
 
-#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type)
+#define PyCell_Check(op) Py_IS_TYPE(op, &PyCell_Type)
 
 PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
 PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
diff --git a/Include/ceval.h b/Include/ceval.h
index 36fd014..0f372e2 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -8,52 +8,30 @@
 /* Interface to random parts in ceval.c */
 
 /* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction
- * and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(),
- * PyObject_CallFunction() and PyObject_CallMethod() are recommended to call
- * a callable object.
+ * and PyEval_CallMethod are deprecated. Since they are officially part of the
+ * stable ABI (PEP 384), they must be kept for backward compatibility.
+ * PyObject_Call(), PyObject_CallFunction() and PyObject_CallMethod() are
+ * recommended to call a callable object.
  */
 
-PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
     PyObject *callable,
     PyObject *args,
     PyObject *kwargs);
 
-/* Inline this */
+/* Deprecated since PyEval_CallObjectWithKeywords is deprecated */
 #define PyEval_CallObject(callable, arg) \
     PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL)
 
-PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable,
-                                           const char *format, ...);
-PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
-                                         const char *name,
-                                         const char *format, ...);
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
-PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
-PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth);
-PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
-PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
-PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
-PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
-PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
-#endif
-
-struct _frame; /* Avoid including frameobject.h */
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallFunction(
+    PyObject *callable, const char *format, ...);
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallMethod(
+    PyObject *obj, const char *name, const char *format, ...);
 
 PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
 PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
 PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
-PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
-
-#ifndef Py_LIMITED_API
-/* Helper to look up a builtin object */
-PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
-/* Look at the current frame's (if any) code's co_flags, and turn on
-   the corresponding compiler flags in cf->cf_flags.  Return 1 if any
-   flag was set, else return 0. */
-PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
-#endif
+PyAPI_FUNC(PyFrameObject *) PyEval_GetFrame(void);
 
 PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
 PyAPI_FUNC(int) Py_MakePendingCalls(void);
@@ -86,41 +64,8 @@
 PyAPI_FUNC(void) Py_SetRecursionLimit(int);
 PyAPI_FUNC(int) Py_GetRecursionLimit(void);
 
-#define Py_EnterRecursiveCall(where)  \
-            (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) &&  \
-             _Py_CheckRecursiveCall(where))
-#define Py_LeaveRecursiveCall()                         \
-    do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth))  \
-      PyThreadState_GET()->overflowed = 0;  \
-    } while(0)
-PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where);
-
-/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in
-   the stable ABI.  It should be removed therefrom when possible.
-*/
-PyAPI_DATA(int) _Py_CheckRecursionLimit;
-
-#ifdef USE_STACKCHECK
-/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall()
-   on every 64th call to Py_EnterRecursiveCall.
-*/
-#  define _Py_MakeRecCheck(x)  \
-    (++(x) > _Py_CheckRecursionLimit || \
-     ++(PyThreadState_GET()->stackcheck_counter) > 64)
-#else
-#  define _Py_MakeRecCheck(x)  (++(x) > _Py_CheckRecursionLimit)
-#endif
-
-/* Compute the "lower-water mark" for a recursion limit. When
- * Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
- * the overflowed flag is reset to 0. */
-#define _Py_RecursionLimitLowerWaterMark(limit) \
-    (((limit) > 200) \
-        ? ((limit) - 50) \
-        : (3 * ((limit) >> 2)))
-
-#define _Py_MakeEndRecCheck(x) \
-    (--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit))
+PyAPI_FUNC(int) Py_EnterRecursiveCall(const char *where);
+PyAPI_FUNC(void) Py_LeaveRecursiveCall(void);
 
 #define Py_ALLOW_RECURSION \
   do { unsigned char _old = PyThreadState_GET()->recursion_critical;\
@@ -133,11 +78,8 @@
 PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
 PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);
 
-PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
-PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
-#endif
+PyAPI_FUNC(PyObject *) PyEval_EvalFrame(PyFrameObject *);
+PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(PyFrameObject *f, int exc);
 
 /* Interface for threads.
 
@@ -177,9 +119,6 @@
    WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
    Py_END_ALLOW_THREADS!!!
 
-   The function PyEval_InitThreads() should be called only from
-   init_thread() in "_threadmodule.c".
-
    Note that not yet all candidates have been converted to use this
    mechanism!
 */
@@ -187,22 +126,17 @@
 PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
 PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);
 
-PyAPI_FUNC(int)  PyEval_ThreadsInitialized(void);
-PyAPI_FUNC(void) PyEval_InitThreads(void);
+Py_DEPRECATED(3.9) PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
+Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
+/* PyEval_AcquireLock() and PyEval_ReleaseLock() are part of stable ABI.
+ * They will be removed from this header file in the future version.
+ * But they will be remained in ABI until Python 4.0.
+ */
 Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_AcquireLock(void);
-/* Py_DEPRECATED(3.2) */ PyAPI_FUNC(void) PyEval_ReleaseLock(void);
+Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_ReleaseLock(void);
 PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
 PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
 
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
-PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
-#endif
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
-#endif
-
 #define Py_BEGIN_ALLOW_THREADS { \
                         PyThreadState *_save; \
                         _save = PyEval_SaveThread();
@@ -211,11 +145,6 @@
 #define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
                  }
 
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
-PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
-#endif
-
 /* Masks and values used by FORMAT_VALUE opcode. */
 #define FVC_MASK      0x3
 #define FVC_NONE      0x0
@@ -225,6 +154,12 @@
 #define FVS_MASK      0x4
 #define FVS_HAVE_SPEC 0x4
 
+#ifndef Py_LIMITED_API
+#  define Py_CPYTHON_CEVAL_H
+#  include  "cpython/ceval.h"
+#  undef Py_CPYTHON_CEVAL_H
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/classobject.h b/Include/classobject.h
index c83303c..1952f67 100644
--- a/Include/classobject.h
+++ b/Include/classobject.h
@@ -19,7 +19,7 @@
 
 PyAPI_DATA(PyTypeObject) PyMethod_Type;
 
-#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
+#define PyMethod_Check(op) Py_IS_TYPE(op, &PyMethod_Type)
 
 PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);
 
@@ -33,8 +33,6 @@
 #define PyMethod_GET_SELF(meth) \
         (((PyMethodObject *)meth) -> im_self)
 
-PyAPI_FUNC(int) PyMethod_ClearFreeList(void);
-
 typedef struct {
     PyObject_HEAD
     PyObject *func;
@@ -42,7 +40,7 @@
 
 PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;
 
-#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type)
+#define PyInstanceMethod_Check(op) Py_IS_TYPE(op, &PyInstanceMethod_Type)
 
 PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
 PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
diff --git a/Include/code.h b/Include/code.h
index a1cd58f..b9e23eb 100644
--- a/Include/code.h
+++ b/Include/code.h
@@ -1,180 +1,20 @@
 /* Definitions for bytecode */
 
-#ifndef Py_LIMITED_API
 #ifndef Py_CODE_H
 #define Py_CODE_H
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-typedef uint16_t _Py_CODEUNIT;
-
-#ifdef WORDS_BIGENDIAN
-#  define _Py_OPCODE(word) ((word) >> 8)
-#  define _Py_OPARG(word) ((word) & 255)
-#else
-#  define _Py_OPCODE(word) ((word) & 255)
-#  define _Py_OPARG(word) ((word) >> 8)
-#endif
-
-typedef struct _PyOpcache _PyOpcache;
-
-/* Bytecode object */
-typedef struct {
-    PyObject_HEAD
-    int co_argcount;            /* #arguments, except *args */
-    int co_posonlyargcount;     /* #positional only arguments */
-    int co_kwonlyargcount;      /* #keyword only arguments */
-    int co_nlocals;             /* #local variables */
-    int co_stacksize;           /* #entries needed for evaluation stack */
-    int co_flags;               /* CO_..., see below */
-    int co_firstlineno;         /* first source line number */
-    PyObject *co_code;          /* instruction opcodes */
-    PyObject *co_consts;        /* list (constants used) */
-    PyObject *co_names;         /* list of strings (names used) */
-    PyObject *co_varnames;      /* tuple of strings (local variable names) */
-    PyObject *co_freevars;      /* tuple of strings (free variable names) */
-    PyObject *co_cellvars;      /* tuple of strings (cell variable names) */
-    /* The rest aren't used in either hash or comparisons, except for co_name,
-       used in both. This is done to preserve the name and line number
-       for tracebacks and debuggers; otherwise, constant de-duplication
-       would collapse identical functions/lambdas defined on different lines.
-    */
-    Py_ssize_t *co_cell2arg;    /* Maps cell vars which are arguments. */
-    PyObject *co_filename;      /* unicode (where it was loaded from) */
-    PyObject *co_name;          /* unicode (name, for reference) */
-    PyObject *co_lnotab;        /* string (encoding addr<->lineno mapping) See
-                                   Objects/lnotab_notes.txt for details. */
-    void *co_zombieframe;       /* for optimization only (see frameobject.c) */
-    PyObject *co_weakreflist;   /* to support weakrefs to code objects */
-    /* Scratch space for extra data relating to the code object.
-       Type is a void* to keep the format private in codeobject.c to force
-       people to go through the proper APIs. */
-    void *co_extra;
-
-    /* Per opcodes just-in-time cache
-     *
-     * To reduce cache size, we use indirect mapping from opcode index to
-     * cache object:
-     *   cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1]
-     */
-
-    // co_opcache_map is indexed by (next_instr - first_instr).
-    //  * 0 means there is no cache for this opcode.
-    //  * n > 0 means there is cache in co_opcache[n-1].
-    unsigned char *co_opcache_map;
-    _PyOpcache *co_opcache;
-    int co_opcache_flag;  // used to determine when create a cache.
-    unsigned char co_opcache_size;  // length of co_opcache.
-} PyCodeObject;
-
-/* Masks for co_flags above */
-#define CO_OPTIMIZED    0x0001
-#define CO_NEWLOCALS    0x0002
-#define CO_VARARGS      0x0004
-#define CO_VARKEYWORDS  0x0008
-#define CO_NESTED       0x0010
-#define CO_GENERATOR    0x0020
-/* The CO_NOFREE flag is set if there are no free or cell variables.
-   This information is redundant, but it allows a single flag test
-   to determine whether there is any extra work to be done when the
-   call frame it setup.
-*/
-#define CO_NOFREE       0x0040
-
-/* The CO_COROUTINE flag is set for coroutine functions (defined with
-   ``async def`` keywords) */
-#define CO_COROUTINE            0x0080
-#define CO_ITERABLE_COROUTINE   0x0100
-#define CO_ASYNC_GENERATOR      0x0200
-
-/* bpo-39562: These constant values are changed in Python 3.9
-   to prevent collision with compiler flags. CO_FUTURE_ and PyCF_
-   constants must be kept unique. PyCF_ constants can use bits from
-   0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */
-#define CO_FUTURE_DIVISION      0x20000
-#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */
-#define CO_FUTURE_WITH_STATEMENT  0x80000
-#define CO_FUTURE_PRINT_FUNCTION  0x100000
-#define CO_FUTURE_UNICODE_LITERALS 0x200000
-
-#define CO_FUTURE_BARRY_AS_BDFL  0x400000
-#define CO_FUTURE_GENERATOR_STOP  0x800000
-#define CO_FUTURE_ANNOTATIONS    0x1000000
-
-/* This value is found in the co_cell2arg array when the associated cell
-   variable does not correspond to an argument. */
-#define CO_CELL_NOT_AN_ARG (-1)
-
-/* This should be defined if a future statement modifies the syntax.
-   For example, when a keyword is added.
-*/
-#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
-
-#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
-
-PyAPI_DATA(PyTypeObject) PyCode_Type;
-
-#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
-#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
-
-/* Public interface */
-PyAPI_FUNC(PyCodeObject *) PyCode_New(
-        int, int, int, int, int, PyObject *, PyObject *,
-        PyObject *, PyObject *, PyObject *, PyObject *,
-        PyObject *, PyObject *, int, PyObject *);
-
-PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
-        int, int, int, int, int, int, PyObject *, PyObject *,
-        PyObject *, PyObject *, PyObject *, PyObject *,
-        PyObject *, PyObject *, int, PyObject *);
-        /* same as struct above */
-
-/* Creates a new empty code object with the specified source location. */
-PyAPI_FUNC(PyCodeObject *)
-PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
-
-/* Return the line number associated with the specified bytecode index
-   in this code object.  If you just need the line number of a frame,
-   use PyFrame_GetLineNumber() instead. */
-PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
-
-/* for internal use only */
-typedef struct _addr_pair {
-        int ap_lower;
-        int ap_upper;
-} PyAddrPair;
+typedef struct PyCodeObject PyCodeObject;
 
 #ifndef Py_LIMITED_API
-/* Update *bounds to describe the first and one-past-the-last instructions in the
-   same line as lasti.  Return the number of that line.
-*/
-PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
-                                        int lasti, PyAddrPair *bounds);
-
-/* Create a comparable key used to compare constants taking in account the
- * object type. It is used to make sure types are not coerced (e.g., float and
- * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
- *
- * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
- * depending on the type and the value. The type is the first item to not
- * compare bytes and str which can raise a BytesWarning exception. */
-PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
-#endif
-
-PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
-                                      PyObject *names, PyObject *lnotab);
-
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
-                                 void **extra);
-PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
-                                 void *extra);
+#  define Py_CPYTHON_CODE_H
+#  include  "cpython/code.h"
+#  undef Py_CPYTHON_CODE_H
 #endif
 
 #ifdef __cplusplus
 }
 #endif
 #endif /* !Py_CODE_H */
-#endif /* Py_LIMITED_API */
diff --git a/Include/compile.h b/Include/compile.h
index 015584d..98adee3 100644
--- a/Include/compile.h
+++ b/Include/compile.h
@@ -2,7 +2,6 @@
 #define Py_COMPILE_H
 
 #ifndef Py_LIMITED_API
-#include "code.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -10,6 +9,9 @@
 
 /* Public interface */
 struct _node; /* Declare the existence of this type */
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
 PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
 /* XXX (ncoghlan): Unprefixed type name in a public API! */
 
@@ -89,7 +91,12 @@
 PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
 PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);
 
-PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);
+typedef struct {
+    int optimize;
+    int ff_features;
+} _PyASTOptimizeState;
+
+PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeState *state);
 
 #ifdef __cplusplus
 }
@@ -103,4 +110,7 @@
 #define Py_eval_input 258
 #define Py_func_type_input 345
 
+/* This doesn't need to match anything */
+#define Py_fstring_input 800
+
 #endif /* !Py_COMPILE_H */
diff --git a/Include/complexobject.h b/Include/complexobject.h
index cb8c52c..9221f9c 100644
--- a/Include/complexobject.h
+++ b/Include/complexobject.h
@@ -39,7 +39,7 @@
 PyAPI_DATA(PyTypeObject) PyComplex_Type;
 
 #define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
-#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type)
+#define PyComplex_CheckExact(op) Py_IS_TYPE(op, &PyComplex_Type)
 
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex);
diff --git a/Include/context.h b/Include/context.h
index 9581285..4e50070 100644
--- a/Include/context.h
+++ b/Include/context.h
@@ -17,9 +17,9 @@
 typedef struct _pycontexttokenobject PyContextToken;
 
 
-#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type)
-#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type)
-#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type)
+#define PyContext_CheckExact(o) Py_IS_TYPE(o, &PyContext_Type)
+#define PyContextVar_CheckExact(o) Py_IS_TYPE(o, &PyContextVar_Type)
+#define PyContextToken_CheckExact(o) Py_IS_TYPE(o, &PyContextToken_Type)
 
 
 PyAPI_FUNC(PyObject *) PyContext_New(void);
@@ -73,9 +73,6 @@
 PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void);
 
 
-PyAPI_FUNC(int) PyContext_ClearFreeList(void);
-
-
 #endif /* !Py_LIMITED_API */
 
 #ifdef __cplusplus
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 2ea3209..7bc8083 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -26,28 +26,10 @@
     PyObject *const *values,
     PyObject *kwnames);
 
-/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
-
-   Return 0 on success, raise an exception and return -1 on error.
-
-   Write the new stack into *p_stack. If *p_stack is differen than args, it
-   must be released by PyMem_Free().
-
-   The stack uses borrowed references.
-
-   The type of keyword keys is not checked, these checks should be done
-   later (ex: _PyArg_ParseStackAndKeywords). */
-PyAPI_FUNC(int) _PyStack_UnpackDict(
-    PyObject *const *args,
-    Py_ssize_t nargs,
-    PyObject *kwargs,
-    PyObject *const **p_stack,
-    PyObject **p_kwnames);
-
 /* Suggested size (number of positional arguments) for arrays of PyObject*
    allocated on a C stack to avoid allocating memory on the heap memory. Such
    array is used to pass positional arguments to call functions of the
-   _PyObject_Vectorcall() family.
+   PyObject_Vectorcall() family.
 
    The size is chosen to not abuse the C stack and so limit the risk of stack
    overflow. The size is also chosen to allow using the small stack for most
@@ -55,16 +37,19 @@
    40 bytes on the stack. */
 #define _PY_FASTCALL_SMALL_STACK 5
 
-PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
-                                               PyObject *result,
-                                               const char *where);
+PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(
+    PyThreadState *tstate,
+    PyObject *callable,
+    PyObject *result,
+    const char *where);
 
 /* === Vectorcall protocol (PEP 590) ============================= */
 
-/* Call callable using tp_call. Arguments are like _PyObject_Vectorcall()
-   or _PyObject_FastCallDict() (both forms are supported),
+/* Call callable using tp_call. Arguments are like PyObject_Vectorcall()
+   or PyObject_FastCallDict() (both forms are supported),
    except that nargs is plainly the number of arguments without flags. */
 PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall(
+    PyThreadState *tstate,
     PyObject *callable,
     PyObject *const *args, Py_ssize_t nargs,
     PyObject *keywords);
@@ -78,17 +63,21 @@
 }
 
 static inline vectorcallfunc
-_PyVectorcall_Function(PyObject *callable)
+PyVectorcall_Function(PyObject *callable)
 {
-    PyTypeObject *tp = Py_TYPE(callable);
-    Py_ssize_t offset = tp->tp_vectorcall_offset;
+    PyTypeObject *tp;
+    Py_ssize_t offset;
     vectorcallfunc *ptr;
-    if (!PyType_HasFeature(tp, _Py_TPFLAGS_HAVE_VECTORCALL)) {
+
+    assert(callable != NULL);
+    tp = Py_TYPE(callable);
+    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
         return NULL;
     }
     assert(PyCallable_Check(callable));
+    offset = tp->tp_vectorcall_offset;
     assert(offset > 0);
-    ptr = (vectorcallfunc*)(((char *)callable) + offset);
+    ptr = (vectorcallfunc *)(((char *)callable) + offset);
     return *ptr;
 }
 
@@ -106,31 +95,51 @@
    of keyword arguments does not change nargsf). kwnames can also be NULL if
    there are no keyword arguments.
 
-   keywords must only contains str strings (no subclass), and all keys must
-   be unique.
+   keywords must only contain strings and all keys must be unique.
 
    Return the result on success. Raise an exception and return NULL on
    error. */
 static inline PyObject *
-_PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
-                     size_t nargsf, PyObject *kwnames)
+_PyObject_VectorcallTstate(PyThreadState *tstate, PyObject *callable,
+                           PyObject *const *args, size_t nargsf,
+                           PyObject *kwnames)
 {
-    PyObject *res;
     vectorcallfunc func;
+    PyObject *res;
+
     assert(kwnames == NULL || PyTuple_Check(kwnames));
     assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
-    func = _PyVectorcall_Function(callable);
+
+    func = PyVectorcall_Function(callable);
     if (func == NULL) {
         Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
-        return _PyObject_MakeTpCall(callable, args, nargs, kwnames);
+        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
     }
     res = func(callable, args, nargsf, kwnames);
-    return _Py_CheckFunctionResult(callable, res, NULL);
+    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
 }
 
-/* Same as _PyObject_Vectorcall except that keyword arguments are passed as
+static inline PyObject *
+PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
+                     size_t nargsf, PyObject *kwnames)
+{
+    PyThreadState *tstate = PyThreadState_GET();
+    return _PyObject_VectorcallTstate(tstate, callable,
+                                      args, nargsf, kwnames);
+}
+
+// Backwards compatibility aliases for API that was provisional in Python 3.8
+#define _PyObject_Vectorcall PyObject_Vectorcall
+#define _PyObject_VectorcallMethod PyObject_VectorcallMethod
+#define _PyObject_FastCallDict PyObject_VectorcallDict
+#define _PyVectorcall_Function PyVectorcall_Function
+#define _PyObject_CallOneArg PyObject_CallOneArg
+#define _PyObject_CallMethodNoArgs PyObject_CallMethodNoArgs
+#define _PyObject_CallMethodOneArg PyObject_CallMethodOneArg
+
+/* Same as PyObject_Vectorcall except that keyword arguments are passed as
    dict, which may be NULL if there are no keyword arguments. */
-PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
+PyAPI_FUNC(PyObject *) PyObject_VectorcallDict(
     PyObject *callable,
     PyObject *const *args,
     size_t nargsf,
@@ -140,30 +149,65 @@
    "tuple" and keyword arguments "dict". "dict" may also be NULL */
 PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict);
 
-/* Same as _PyObject_Vectorcall except without keyword arguments */
+static inline PyObject *
+_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func, PyObject *const *args, Py_ssize_t nargs)
+{
+    return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL);
+}
+
+/* Same as PyObject_Vectorcall except without keyword arguments */
 static inline PyObject *
 _PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
 {
-    return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL);
+    PyThreadState *tstate = PyThreadState_GET();
+    return _PyObject_FastCallTstate(tstate, func, args, nargs);
 }
 
-/* Call a callable without any arguments */
+/* Call a callable without any arguments
+   Private static inline function variant of public function
+   PyObject_CallNoArgs(). */
 static inline PyObject *
 _PyObject_CallNoArg(PyObject *func) {
-    return _PyObject_Vectorcall(func, NULL, 0, NULL);
+    PyThreadState *tstate = PyThreadState_GET();
+    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
 }
 
-PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
-    PyObject *callable,
-    PyObject *obj,
-    PyObject *args,
-    PyObject *kwargs);
+static inline PyObject *
+PyObject_CallOneArg(PyObject *func, PyObject *arg)
+{
+    PyObject *_args[2];
+    PyObject **args;
+    PyThreadState *tstate;
+    size_t nargsf;
 
-PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend(
-    PyObject *callable,
-    PyObject *obj,
-    PyObject *const *args,
-    Py_ssize_t nargs);
+    assert(arg != NULL);
+    args = _args + 1;  // For PY_VECTORCALL_ARGUMENTS_OFFSET
+    args[0] = arg;
+    tstate = PyThreadState_GET();
+    nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
+    return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL);
+}
+
+PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod(
+    PyObject *name, PyObject *const *args,
+    size_t nargsf, PyObject *kwnames);
+
+static inline PyObject *
+PyObject_CallMethodNoArgs(PyObject *self, PyObject *name)
+{
+    return PyObject_VectorcallMethod(name, &self,
+           1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
+
+static inline PyObject *
+PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg)
+{
+    PyObject *args[2] = {self, arg};
+
+    assert(arg != NULL);
+    return PyObject_VectorcallMethod(name, args,
+           2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
 
 /* Like PyObject_CallMethod(), but expect a _Py_Identifier*
    as the method name. */
@@ -181,6 +225,35 @@
     struct _Py_Identifier *name,
     ...);
 
+static inline PyObject *
+_PyObject_VectorcallMethodId(
+    _Py_Identifier *name, PyObject *const *args,
+    size_t nargsf, PyObject *kwnames)
+{
+    PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
+    if (!oname) {
+        return NULL;
+    }
+    return PyObject_VectorcallMethod(oname, args, nargsf, kwnames);
+}
+
+static inline PyObject *
+_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name)
+{
+    return _PyObject_VectorcallMethodId(name, &self,
+           1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
+
+static inline PyObject *
+_PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg)
+{
+    PyObject *args[2] = {self, arg};
+
+    assert(arg != NULL);
+    return _PyObject_VectorcallMethodId(name, args,
+           2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
+
 PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
 
 /* Guess the size of object 'o' using len(o) or o.__length_hint__().
@@ -191,9 +264,7 @@
 /* === New Buffer API ============================================ */
 
 /* Return 1 if the getbuffer function is available, otherwise return 0. */
-#define PyObject_CheckBuffer(obj) \
-    (((obj)->ob_type->tp_as_buffer != NULL) &&  \
-     ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
+PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *obj);
 
 /* This is a C-API version of the getbuffer function call.  It checks
    to make sure object has the required function pointer and issues the
@@ -209,7 +280,7 @@
 
 /* Return the implied itemsize of the data-format area from a
    struct-style description. */
-PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
+PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format);
 
 /* Implementation in memoryobject.c */
 PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
@@ -261,14 +332,8 @@
 /* ==== Iterators ================================================ */
 
 #define PyIter_Check(obj) \
-    ((obj)->ob_type->tp_iternext != NULL && \
-     (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
-
-/* === Number Protocol ================================================== */
-
-#define PyIndex_Check(obj)                              \
-    ((obj)->ob_type->tp_as_number != NULL &&            \
-     (obj)->ob_type->tp_as_number->nb_index != NULL)
+    (Py_TYPE(obj)->tp_iternext != NULL && \
+     Py_TYPE(obj)->tp_iternext != &_PyObject_NextNotImplemented)
 
 /* === Sequence protocol ================================================ */
 
diff --git a/Include/cpython/bytearrayobject.h b/Include/cpython/bytearrayobject.h
new file mode 100644
index 0000000..569b0cd
--- /dev/null
+++ b/Include/cpython/bytearrayobject.h
@@ -0,0 +1,20 @@
+#ifndef Py_CPYTHON_BYTEARRAYOBJECT_H
+#  error "this header file must not be included directly"
+#endif
+
+/* Object layout */
+typedef struct {
+    PyObject_VAR_HEAD
+    Py_ssize_t ob_alloc;   /* How many bytes allocated in ob_bytes */
+    char *ob_bytes;        /* Physical backing buffer */
+    char *ob_start;        /* Logical start inside ob_bytes */
+    Py_ssize_t ob_exports; /* How many buffer exports */
+} PyByteArrayObject;
+
+/* Macros, trading safety for speed */
+#define PyByteArray_AS_STRING(self) \
+    (assert(PyByteArray_Check(self)), \
+     Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
+#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
+
+PyAPI_DATA(char) _PyByteArray_empty_string[];
diff --git a/Include/cpython/bytesobject.h b/Include/cpython/bytesobject.h
new file mode 100644
index 0000000..f284c58
--- /dev/null
+++ b/Include/cpython/bytesobject.h
@@ -0,0 +1,118 @@
+#ifndef Py_CPYTHON_BYTESOBJECT_H
+#  error "this header file must not be included directly"
+#endif
+
+typedef struct {
+    PyObject_VAR_HEAD
+    Py_hash_t ob_shash;
+    char ob_sval[1];
+
+    /* Invariants:
+     *     ob_sval contains space for 'ob_size+1' elements.
+     *     ob_sval[ob_size] == 0.
+     *     ob_shash is the hash of the string or -1 if not computed yet.
+     */
+} PyBytesObject;
+
+PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
+PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
+    const char *format,
+    Py_ssize_t format_len,
+    PyObject *args,
+    int use_bytearray);
+PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
+    PyObject *string,
+    int use_bytearray);
+
+/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
+PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
+                                             const char *, const char **);
+
+/* Macro, trading safety for speed */
+#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
+                                (((PyBytesObject *)(op))->ob_sval))
+#define PyBytes_GET_SIZE(op)  (assert(PyBytes_Check(op)),Py_SIZE(op))
+
+/* _PyBytes_Join(sep, x) is like sep.join(x).  sep must be PyBytesObject*,
+   x must be an iterable object. */
+PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
+
+
+/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
+   A _PyBytesWriter variable must be declared at the end of variables in a
+   function to optimize the memory allocation on the stack. */
+typedef struct {
+    /* bytes, bytearray or NULL (when the small buffer is used) */
+    PyObject *buffer;
+
+    /* Number of allocated size. */
+    Py_ssize_t allocated;
+
+    /* Minimum number of allocated bytes,
+       incremented by _PyBytesWriter_Prepare() */
+    Py_ssize_t min_size;
+
+    /* If non-zero, use a bytearray instead of a bytes object for buffer. */
+    int use_bytearray;
+
+    /* If non-zero, overallocate the buffer (default: 0).
+       This flag must be zero if use_bytearray is non-zero. */
+    int overallocate;
+
+    /* Stack buffer */
+    int use_small_buffer;
+    char small_buffer[512];
+} _PyBytesWriter;
+
+/* Initialize a bytes writer
+
+   By default, the overallocation is disabled. Set the overallocate attribute
+   to control the allocation of the buffer. */
+PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
+
+/* Get the buffer content and reset the writer.
+   Return a bytes object, or a bytearray object if use_bytearray is non-zero.
+   Raise an exception and return NULL on error. */
+PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
+    void *str);
+
+/* Deallocate memory of a writer (clear its internal buffer). */
+PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
+
+/* Allocate the buffer to write size bytes.
+   Return the pointer to the beginning of buffer data.
+   Raise an exception and return NULL on error. */
+PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
+    Py_ssize_t size);
+
+/* Ensure that the buffer is large enough to write *size* bytes.
+   Add size to the writer minimum size (min_size attribute).
+
+   str is the current pointer inside the buffer.
+   Return the updated current pointer inside the buffer.
+   Raise an exception and return NULL on error. */
+PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
+    void *str,
+    Py_ssize_t size);
+
+/* Resize the buffer to make it larger.
+   The new buffer may be larger than size bytes because of overallocation.
+   Return the updated current pointer inside the buffer.
+   Raise an exception and return NULL on error.
+
+   Note: size must be greater than the number of allocated bytes in the writer.
+
+   This function doesn't use the writer minimum size (min_size attribute).
+
+   See also _PyBytesWriter_Prepare().
+   */
+PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
+    void *str,
+    Py_ssize_t size);
+
+/* Write bytes.
+   Raise an exception and return NULL on error. */
+PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
+    void *str,
+    const void *bytes,
+    Py_ssize_t size);
diff --git a/Include/cpython/ceval.h b/Include/cpython/ceval.h
new file mode 100644
index 0000000..e1922a6
--- /dev/null
+++ b/Include/cpython/ceval.h
@@ -0,0 +1,38 @@
+#ifndef Py_CPYTHON_CEVAL_H
+#  error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
+PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
+PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
+PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
+PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
+PyAPI_FUNC(int) _PyEval_SetAsyncGenFirstiter(PyObject *);
+PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
+PyAPI_FUNC(int) _PyEval_SetAsyncGenFinalizer(PyObject *);
+PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
+
+/* Helper to look up a builtin object */
+PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
+/* Look at the current frame's (if any) code's co_flags, and turn on
+   the corresponding compiler flags in cf->cf_flags.  Return 1 if any
+   flag was set, else return 0. */
+PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
+
+PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int exc);
+
+PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
+PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
+
+PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
+
+PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
+PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Include/cpython/code.h b/Include/cpython/code.h
new file mode 100644
index 0000000..cda28ac
--- /dev/null
+++ b/Include/cpython/code.h
@@ -0,0 +1,165 @@
+#ifndef Py_CPYTHON_CODE_H
+#  error "this header file must not be included directly"
+#endif
+
+typedef uint16_t _Py_CODEUNIT;
+
+#ifdef WORDS_BIGENDIAN
+#  define _Py_OPCODE(word) ((word) >> 8)
+#  define _Py_OPARG(word) ((word) & 255)
+#else
+#  define _Py_OPCODE(word) ((word) & 255)
+#  define _Py_OPARG(word) ((word) >> 8)
+#endif
+
+typedef struct _PyOpcache _PyOpcache;
+
+/* Bytecode object */
+struct PyCodeObject {
+    PyObject_HEAD
+    int co_argcount;            /* #arguments, except *args */
+    int co_posonlyargcount;     /* #positional only arguments */
+    int co_kwonlyargcount;      /* #keyword only arguments */
+    int co_nlocals;             /* #local variables */
+    int co_stacksize;           /* #entries needed for evaluation stack */
+    int co_flags;               /* CO_..., see below */
+    int co_firstlineno;         /* first source line number */
+    PyObject *co_code;          /* instruction opcodes */
+    PyObject *co_consts;        /* list (constants used) */
+    PyObject *co_names;         /* list of strings (names used) */
+    PyObject *co_varnames;      /* tuple of strings (local variable names) */
+    PyObject *co_freevars;      /* tuple of strings (free variable names) */
+    PyObject *co_cellvars;      /* tuple of strings (cell variable names) */
+    /* The rest aren't used in either hash or comparisons, except for co_name,
+       used in both. This is done to preserve the name and line number
+       for tracebacks and debuggers; otherwise, constant de-duplication
+       would collapse identical functions/lambdas defined on different lines.
+    */
+    Py_ssize_t *co_cell2arg;    /* Maps cell vars which are arguments. */
+    PyObject *co_filename;      /* unicode (where it was loaded from) */
+    PyObject *co_name;          /* unicode (name, for reference) */
+    PyObject *co_lnotab;        /* string (encoding addr<->lineno mapping) See
+                                   Objects/lnotab_notes.txt for details. */
+    void *co_zombieframe;       /* for optimization only (see frameobject.c) */
+    PyObject *co_weakreflist;   /* to support weakrefs to code objects */
+    /* Scratch space for extra data relating to the code object.
+       Type is a void* to keep the format private in codeobject.c to force
+       people to go through the proper APIs. */
+    void *co_extra;
+
+    /* Per opcodes just-in-time cache
+     *
+     * To reduce cache size, we use indirect mapping from opcode index to
+     * cache object:
+     *   cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1]
+     */
+
+    // co_opcache_map is indexed by (next_instr - first_instr).
+    //  * 0 means there is no cache for this opcode.
+    //  * n > 0 means there is cache in co_opcache[n-1].
+    unsigned char *co_opcache_map;
+    _PyOpcache *co_opcache;
+    int co_opcache_flag;  // used to determine when create a cache.
+    unsigned char co_opcache_size;  // length of co_opcache.
+};
+
+/* Masks for co_flags above */
+#define CO_OPTIMIZED    0x0001
+#define CO_NEWLOCALS    0x0002
+#define CO_VARARGS      0x0004
+#define CO_VARKEYWORDS  0x0008
+#define CO_NESTED       0x0010
+#define CO_GENERATOR    0x0020
+/* The CO_NOFREE flag is set if there are no free or cell variables.
+   This information is redundant, but it allows a single flag test
+   to determine whether there is any extra work to be done when the
+   call frame it setup.
+*/
+#define CO_NOFREE       0x0040
+
+/* The CO_COROUTINE flag is set for coroutine functions (defined with
+   ``async def`` keywords) */
+#define CO_COROUTINE            0x0080
+#define CO_ITERABLE_COROUTINE   0x0100
+#define CO_ASYNC_GENERATOR      0x0200
+
+/* bpo-39562: These constant values are changed in Python 3.9
+   to prevent collision with compiler flags. CO_FUTURE_ and PyCF_
+   constants must be kept unique. PyCF_ constants can use bits from
+   0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */
+#define CO_FUTURE_DIVISION      0x20000
+#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */
+#define CO_FUTURE_WITH_STATEMENT  0x80000
+#define CO_FUTURE_PRINT_FUNCTION  0x100000
+#define CO_FUTURE_UNICODE_LITERALS 0x200000
+
+#define CO_FUTURE_BARRY_AS_BDFL  0x400000
+#define CO_FUTURE_GENERATOR_STOP  0x800000
+#define CO_FUTURE_ANNOTATIONS    0x1000000
+
+/* This value is found in the co_cell2arg array when the associated cell
+   variable does not correspond to an argument. */
+#define CO_CELL_NOT_AN_ARG (-1)
+
+/* This should be defined if a future statement modifies the syntax.
+   For example, when a keyword is added.
+*/
+#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
+
+#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
+
+PyAPI_DATA(PyTypeObject) PyCode_Type;
+
+#define PyCode_Check(op) Py_IS_TYPE(op, &PyCode_Type)
+#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
+
+/* Public interface */
+PyAPI_FUNC(PyCodeObject *) PyCode_New(
+        int, int, int, int, int, PyObject *, PyObject *,
+        PyObject *, PyObject *, PyObject *, PyObject *,
+        PyObject *, PyObject *, int, PyObject *);
+
+PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
+        int, int, int, int, int, int, PyObject *, PyObject *,
+        PyObject *, PyObject *, PyObject *, PyObject *,
+        PyObject *, PyObject *, int, PyObject *);
+        /* same as struct above */
+
+/* Creates a new empty code object with the specified source location. */
+PyAPI_FUNC(PyCodeObject *)
+PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
+
+/* Return the line number associated with the specified bytecode index
+   in this code object.  If you just need the line number of a frame,
+   use PyFrame_GetLineNumber() instead. */
+PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
+
+/* for internal use only */
+typedef struct _addr_pair {
+        int ap_lower;
+        int ap_upper;
+} PyAddrPair;
+
+/* Update *bounds to describe the first and one-past-the-last instructions in the
+   same line as lasti.  Return the number of that line.
+*/
+PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
+                                        int lasti, PyAddrPair *bounds);
+
+/* Create a comparable key used to compare constants taking in account the
+ * object type. It is used to make sure types are not coerced (e.g., float and
+ * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
+ *
+ * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
+ * depending on the type and the value. The type is the first item to not
+ * compare bytes and str which can raise a BytesWarning exception. */
+PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
+
+PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
+                                      PyObject *names, PyObject *lnotab);
+
+
+PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
+                                 void **extra);
+PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
+                                 void *extra);
diff --git a/Include/cpython/dictobject.h b/Include/cpython/dictobject.h
index 64c012a..e33a0d1 100644
--- a/Include/cpython/dictobject.h
+++ b/Include/cpython/dictobject.h
@@ -62,8 +62,6 @@
 PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
 #define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
 
-PyAPI_FUNC(int) PyDict_ClearFreeList(void);
-
 /* Like PyDict_Merge, but override can be 0, 1 or 2.  If override is 0,
    the first occurrence of a key wins, if override is 1, the last occurrence
    of a key wins, if override is 2, a KeyError with conflicting key as
diff --git a/Include/cpython/fileobject.h b/Include/cpython/fileobject.h
index 57eac13..3005ce1 100644
--- a/Include/cpython/fileobject.h
+++ b/Include/cpython/fileobject.h
@@ -8,14 +8,6 @@
 
 PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
 
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
-PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
-#endif
-
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
-PyAPI_DATA(int) Py_UTF8Mode;
-#endif
-
 /* The std printer acts as a preliminary sys.stderr until the new io
    infrastructure is in place. */
 PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int);
diff --git a/Include/cpython/fileutils.h b/Include/cpython/fileutils.h
new file mode 100644
index 0000000..e79d03e
--- /dev/null
+++ b/Include/cpython/fileutils.h
@@ -0,0 +1,165 @@
+#ifndef Py_CPYTHON_FILEUTILS_H
+#  error "this header file must not be included directly"
+#endif
+
+typedef enum {
+    _Py_ERROR_UNKNOWN=0,
+    _Py_ERROR_STRICT,
+    _Py_ERROR_SURROGATEESCAPE,
+    _Py_ERROR_REPLACE,
+    _Py_ERROR_IGNORE,
+    _Py_ERROR_BACKSLASHREPLACE,
+    _Py_ERROR_SURROGATEPASS,
+    _Py_ERROR_XMLCHARREFREPLACE,
+    _Py_ERROR_OTHER
+} _Py_error_handler;
+
+PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
+
+PyAPI_FUNC(int) _Py_DecodeLocaleEx(
+    const char *arg,
+    wchar_t **wstr,
+    size_t *wlen,
+    const char **reason,
+    int current_locale,
+    _Py_error_handler errors);
+
+PyAPI_FUNC(int) _Py_EncodeLocaleEx(
+    const wchar_t *text,
+    char **str,
+    size_t *error_pos,
+    const char **reason,
+    int current_locale,
+    _Py_error_handler errors);
+
+
+PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
+
+#if defined(MS_WINDOWS) || defined(__APPLE__)
+    /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
+       On macOS 10.13, read() and write() with more than INT_MAX bytes
+       fail with EINVAL (bpo-24658). */
+#   define _PY_READ_MAX  INT_MAX
+#   define _PY_WRITE_MAX INT_MAX
+#else
+    /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
+       but it's safer to do it ourself to have a portable behaviour */
+#   define _PY_READ_MAX  PY_SSIZE_T_MAX
+#   define _PY_WRITE_MAX PY_SSIZE_T_MAX
+#endif
+
+#ifdef MS_WINDOWS
+struct _Py_stat_struct {
+    unsigned long st_dev;
+    uint64_t st_ino;
+    unsigned short st_mode;
+    int st_nlink;
+    int st_uid;
+    int st_gid;
+    unsigned long st_rdev;
+    __int64 st_size;
+    time_t st_atime;
+    int st_atime_nsec;
+    time_t st_mtime;
+    int st_mtime_nsec;
+    time_t st_ctime;
+    int st_ctime_nsec;
+    unsigned long st_file_attributes;
+    unsigned long st_reparse_tag;
+};
+#else
+#  define _Py_stat_struct stat
+#endif
+
+PyAPI_FUNC(int) _Py_fstat(
+    int fd,
+    struct _Py_stat_struct *status);
+
+PyAPI_FUNC(int) _Py_fstat_noraise(
+    int fd,
+    struct _Py_stat_struct *status);
+
+PyAPI_FUNC(int) _Py_stat(
+    PyObject *path,
+    struct stat *status);
+
+PyAPI_FUNC(int) _Py_open(
+    const char *pathname,
+    int flags);
+
+PyAPI_FUNC(int) _Py_open_noraise(
+    const char *pathname,
+    int flags);
+
+PyAPI_FUNC(FILE *) _Py_wfopen(
+    const wchar_t *path,
+    const wchar_t *mode);
+
+PyAPI_FUNC(FILE*) _Py_fopen(
+    const char *pathname,
+    const char *mode);
+
+PyAPI_FUNC(FILE*) _Py_fopen_obj(
+    PyObject *path,
+    const char *mode);
+
+PyAPI_FUNC(Py_ssize_t) _Py_read(
+    int fd,
+    void *buf,
+    size_t count);
+
+PyAPI_FUNC(Py_ssize_t) _Py_write(
+    int fd,
+    const void *buf,
+    size_t count);
+
+PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
+    int fd,
+    const void *buf,
+    size_t count);
+
+#ifdef HAVE_READLINK
+PyAPI_FUNC(int) _Py_wreadlink(
+    const wchar_t *path,
+    wchar_t *buf,
+    /* Number of characters of 'buf' buffer
+       including the trailing NUL character */
+    size_t buflen);
+#endif
+
+#ifdef HAVE_REALPATH
+PyAPI_FUNC(wchar_t*) _Py_wrealpath(
+    const wchar_t *path,
+    wchar_t *resolved_path,
+    /* Number of characters of 'resolved_path' buffer
+       including the trailing NUL character */
+    size_t resolved_path_len);
+#endif
+
+#ifndef MS_WINDOWS
+PyAPI_FUNC(int) _Py_isabs(const wchar_t *path);
+#endif
+
+PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p);
+
+PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
+    wchar_t *buf,
+    /* Number of characters of 'buf' buffer
+       including the trailing NUL character */
+    size_t buflen);
+
+PyAPI_FUNC(int) _Py_get_inheritable(int fd);
+
+PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
+                                    int *atomic_flag_works);
+
+PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
+                                               int *atomic_flag_works);
+
+PyAPI_FUNC(int) _Py_dup(int fd);
+
+#ifndef MS_WINDOWS
+PyAPI_FUNC(int) _Py_get_blocking(int fd);
+
+PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
+#endif   /* !MS_WINDOWS */
diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h
new file mode 100644
index 0000000..36a51ba
--- /dev/null
+++ b/Include/cpython/frameobject.h
@@ -0,0 +1,84 @@
+/* Frame object interface */
+
+#ifndef Py_CPYTHON_FRAMEOBJECT_H
+#  error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+    int b_type;                 /* what kind of block this is */
+    int b_handler;              /* where to jump to find handler */
+    int b_level;                /* value stack level to pop to */
+} PyTryBlock;
+
+struct _frame {
+    PyObject_VAR_HEAD
+    struct _frame *f_back;      /* previous frame, or NULL */
+    PyCodeObject *f_code;       /* code segment */
+    PyObject *f_builtins;       /* builtin symbol table (PyDictObject) */
+    PyObject *f_globals;        /* global symbol table (PyDictObject) */
+    PyObject *f_locals;         /* local symbol table (any mapping) */
+    PyObject **f_valuestack;    /* points after the last local */
+    /* Next free slot in f_valuestack.  Frame creation sets to f_valuestack.
+       Frame evaluation usually NULLs it, but a frame that yields sets it
+       to the current stack top. */
+    PyObject **f_stacktop;
+    PyObject *f_trace;          /* Trace function */
+    char f_trace_lines;         /* Emit per-line trace events? */
+    char f_trace_opcodes;       /* Emit per-opcode trace events? */
+
+    /* Borrowed reference to a generator, or NULL */
+    PyObject *f_gen;
+
+    int f_lasti;                /* Last instruction if called */
+    /* Call PyFrame_GetLineNumber() instead of reading this field
+       directly.  As of 2.3 f_lineno is only valid when tracing is
+       active (i.e. when f_trace is set).  At other times we use
+       PyCode_Addr2Line to calculate the line from the current
+       bytecode index. */
+    int f_lineno;               /* Current line number */
+    int f_iblock;               /* index in f_blockstack */
+    char f_executing;           /* whether the frame is still executing */
+    PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
+    PyObject *f_localsplus[1];  /* locals+stack, dynamically sized */
+};
+
+
+/* Standard object interface */
+
+PyAPI_DATA(PyTypeObject) PyFrame_Type;
+
+#define PyFrame_Check(op) Py_IS_TYPE(op, &PyFrame_Type)
+
+PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
+                                        PyObject *, PyObject *);
+
+/* only internal use */
+PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *,
+                                    PyObject *, PyObject *);
+
+
+/* The rest of the interface is specific for frame objects */
+
+/* Block management functions */
+
+PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int);
+PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *);
+
+/* Conversions between "fast locals" and locals in dictionary */
+
+PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
+
+PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
+PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
+
+PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out);
+
+PyAPI_FUNC(PyFrameObject *) PyFrame_GetBack(PyFrameObject *frame);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Include/cpython/import.h b/Include/cpython/import.h
new file mode 100644
index 0000000..c1b4712
--- /dev/null
+++ b/Include/cpython/import.h
@@ -0,0 +1,50 @@
+#ifndef Py_CPYTHON_IMPORT_H
+#  error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyMODINIT_FUNC PyInit__imp(void);
+
+PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
+
+PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
+PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
+PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
+
+PyAPI_FUNC(void) _PyImport_AcquireLock(void);
+PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
+
+PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
+
+PyAPI_FUNC(int) _PyImport_FixupBuiltin(
+    PyObject *mod,
+    const char *name,            /* UTF-8 encoded string */
+    PyObject *modules
+    );
+PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
+                                               PyObject *, PyObject *);
+
+struct _inittab {
+    const char *name;           /* ASCII encoded string */
+    PyObject* (*initfunc)(void);
+};
+PyAPI_DATA(struct _inittab *) PyImport_Inittab;
+PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
+
+struct _frozen {
+    const char *name;                 /* ASCII encoded string */
+    const unsigned char *code;
+    int size;
+};
+
+/* Embedding apps may change this pointer to point to their favorite
+   collection of frozen modules: */
+
+PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Include/cpython/initconfig.h b/Include/cpython/initconfig.h
index 4b5ceaf..0a256d4 100644
--- a/Include/cpython/initconfig.h
+++ b/Include/cpython/initconfig.h
@@ -113,7 +113,11 @@
        "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */
     int utf8_mode;
 
-    int dev_mode;           /* Development mode. PYTHONDEVMODE, -X dev */
+    /* If non-zero, enable the Python Development Mode.
+
+       Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE
+       environment variable. */
+    int dev_mode;
 
     /* Memory allocator: PYTHONMALLOC env var.
        See PyMemAllocatorName for valid values. */
@@ -131,7 +135,7 @@
 
     int isolated;         /* Isolated mode? see PyPreConfig.isolated */
     int use_environment;  /* Use environment variables? see PyPreConfig.use_environment */
-    int dev_mode;         /* Development mode? See PyPreConfig.dev_mode */
+    int dev_mode;         /* Python Development Mode? See PyPreConfig.dev_mode */
 
     /* Install signal handlers? Yes by default. */
     int install_signal_handlers;
@@ -143,13 +147,16 @@
        Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */
     int faulthandler;
 
+    /* Enable PEG parser?
+       1 by default, set to 0 by -X oldparser and PYTHONOLDPARSER */
+    int _use_peg_parser;
+
     /* Enable tracemalloc?
        Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */
     int tracemalloc;
 
     int import_time;        /* PYTHONPROFILEIMPORTTIME, -X importtime */
     int show_ref_count;     /* -X showrefcount */
-    int show_alloc_count;   /* -X showalloccount */
     int dump_refs;          /* PYTHONDUMPREFS */
     int malloc_stats;       /* PYTHONMALLOCSTATS */
 
@@ -381,6 +388,7 @@
     wchar_t *base_prefix;       /* sys.base_prefix */
     wchar_t *exec_prefix;       /* sys.exec_prefix */
     wchar_t *base_exec_prefix;  /* sys.base_exec_prefix */
+    wchar_t *platlibdir;        /* sys.platlibdir */
 
     /* --- Parameter only used by Py_Main() ---------- */
 
@@ -402,6 +410,18 @@
 
     /* If equal to 0, stop Python initialization before the "main" phase */
     int _init_main;
+
+    /* If non-zero, disallow threads, subprocesses, and fork.
+       Default: 0. */
+    int _isolated_interpreter;
+
+    /* Original command line arguments. If _orig_argv is empty and _argv is
+       not equal to [''], PyConfig_Read() copies the configuration 'argv' list
+       into '_orig_argv' list before modifying 'argv' list (if parse_argv
+       is non-zero).
+
+       _PyConfig_Write() initializes Py_GetArgcArgv() to this list. */
+    PyWideStringList _orig_argv;
 } PyConfig;
 
 PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config);
@@ -427,6 +447,14 @@
     PyWideStringList *list,
     Py_ssize_t length, wchar_t **items);
 
+
+/* --- Helper functions --------------------------------------- */
+
+/* Get the original command line arguments, before Python modified them.
+
+   See also PyConfig._orig_argv. */
+PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/cpython/listobject.h b/Include/cpython/listobject.h
new file mode 100644
index 0000000..74fe330
--- /dev/null
+++ b/Include/cpython/listobject.h
@@ -0,0 +1,43 @@
+#ifndef Py_CPYTHON_LISTOBJECT_H
+#  error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+    PyObject_VAR_HEAD
+    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
+    PyObject **ob_item;
+
+    /* ob_item contains space for 'allocated' elements.  The number
+     * currently in use is ob_size.
+     * Invariants:
+     *     0 <= ob_size <= allocated
+     *     len(list) == ob_size
+     *     ob_item == NULL implies ob_size == allocated == 0
+     * list.sort() temporarily sets allocated to -1 to detect mutations.
+     *
+     * Items must normally not be NULL, except during construction when
+     * the list is not yet visible outside the function that builds it.
+     */
+    Py_ssize_t allocated;
+} PyListObject;
+
+PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);
+PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
+
+/* Macro, trading safety for speed */
+
+/* Cast argument to PyTupleObject* type. */
+#define _PyList_CAST(op) (assert(PyList_Check(op)), (PyListObject *)(op))
+
+#define PyList_GET_ITEM(op, i) (_PyList_CAST(op)->ob_item[i])
+#define PyList_SET_ITEM(op, i, v) (_PyList_CAST(op)->ob_item[i] = (v))
+#define PyList_GET_SIZE(op)    Py_SIZE(_PyList_CAST(op))
+#define _PyList_ITEMS(op)      (_PyList_CAST(op)->ob_item)
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Include/cpython/methodobject.h b/Include/cpython/methodobject.h
new file mode 100644
index 0000000..7ecbfe3
--- /dev/null
+++ b/Include/cpython/methodobject.h
@@ -0,0 +1,35 @@
+#ifndef Py_CPYTHON_METHODOBJECT_H
+#  error "this header file must not be included directly"
+#endif
+
+PyAPI_DATA(PyTypeObject) PyCMethod_Type;
+
+#define PyCMethod_CheckExact(op) Py_IS_TYPE(op, &PyCMethod_Type)
+#define PyCMethod_Check(op) PyObject_TypeCheck(op, &PyCMethod_Type)
+
+/* Macros for direct access to these values. Type checks are *not*
+   done, so use with care. */
+#define PyCFunction_GET_FUNCTION(func) \
+        (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
+#define PyCFunction_GET_SELF(func) \
+        (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \
+         NULL : ((PyCFunctionObject *)func) -> m_self)
+#define PyCFunction_GET_FLAGS(func) \
+        (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
+#define PyCFunction_GET_CLASS(func) \
+    (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_METHOD ? \
+         ((PyCMethodObject *)func) -> mm_class : NULL)
+
+typedef struct {
+    PyObject_HEAD
+    PyMethodDef *m_ml; /* Description of the C function to call */
+    PyObject    *m_self; /* Passed as 'self' arg to the C func, can be NULL */
+    PyObject    *m_module; /* The __module__ attribute, can be anything */
+    PyObject    *m_weakreflist; /* List of weak references */
+    vectorcallfunc vectorcall;
+} PyCFunctionObject;
+
+typedef struct {
+    PyCFunctionObject func;
+    PyTypeObject *mm_class; /* Class that defines this method */
+} PyCMethodObject;
diff --git a/Include/cpython/object.h b/Include/cpython/object.h
index 5a0ac4a..444f832 100644
--- a/Include/cpython/object.h
+++ b/Include/cpython/object.h
@@ -6,6 +6,22 @@
 extern "C" {
 #endif
 
+PyAPI_FUNC(void) _Py_NewReference(PyObject *op);
+
+#ifdef Py_TRACE_REFS
+/* Py_TRACE_REFS is such major surgery that we call external routines. */
+PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
+#endif
+
+/* Update the Python traceback of an object. This function must be called
+   when a memory block is reused from a free list. */
+PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op);
+
+#ifdef Py_REF_DEBUG
+PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
+#endif
+
+
 /********************* String Literals ****************************************/
 /* This structure helps managing static strings. The basic usage goes like this:
    Instead of doing
@@ -20,7 +36,7 @@
 
    PyId_foo is a static variable, either on block level or file level. On first
    usage, the string "foo" is interned, and the structures are linked. On interpreter
-   shutdown, all strings are released (through _PyUnicode_ClearStaticStrings).
+   shutdown, all strings are released.
 
    Alternatively, _Py_static_string allows choosing the variable name.
    _PyUnicode_FromId returns a borrowed reference to the interned string.
@@ -174,7 +190,7 @@
  * backwards-compatibility */
 typedef Py_ssize_t printfunc;
 
-typedef struct _typeobject {
+struct _typeobject {
     PyObject_VAR_HEAD
     const char *tp_name; /* For printing, in format "<module>.<name>" */
     Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
@@ -255,19 +271,7 @@
 
     destructor tp_finalize;
     vectorcallfunc tp_vectorcall;
-
-    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
-    Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
-
-#ifdef COUNT_ALLOCS
-    /* these must be last and never explicitly initialized */
-    Py_ssize_t tp_allocs;
-    Py_ssize_t tp_frees;
-    Py_ssize_t tp_maxalloc;
-    struct _typeobject *tp_prev;
-    struct _typeobject *tp_next;
-#endif
-} PyTypeObject;
+};
 
 /* The *real* layout of a type object when allocated on the heap */
 typedef struct _heaptypeobject {
@@ -285,6 +289,7 @@
     PyBufferProcs as_buffer;
     PyObject *ht_name, *ht_slots, *ht_qualname;
     struct _dictkeysobject *ht_cached_keys;
+    PyObject *ht_module;
     /* here are optional user slots, followed by the members. */
 } PyHeapTypeObject;
 
@@ -321,6 +326,9 @@
 */
 PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **);
 PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, struct _Py_Identifier *, PyObject **);
+
+PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
+
 PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
 PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *);
 PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *);
@@ -334,20 +342,7 @@
 _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *,
                                  PyObject *, PyObject *);
 
-#define PyType_HasFeature(t,f)  (((t)->tp_flags & (f)) != 0)
-
-static inline void _Py_Dealloc_inline(PyObject *op)
-{
-    destructor dealloc = Py_TYPE(op)->tp_dealloc;
-#ifdef Py_TRACE_REFS
-    _Py_ForgetReference(op);
-#else
-    _Py_INC_TPFREES(op);
-#endif
-    (*dealloc)(op);
-}
-#define _Py_Dealloc(op) _Py_Dealloc_inline(op)
-
+PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *);
 
 /* Safely decref `op` and set `op` to `op2`.
  *
@@ -391,11 +386,6 @@
  */
 PyAPI_DATA(int) _Py_SwappedOp[];
 
-/* This is the old private API, invoked by the macros before 3.2.4.
-   Kept for binary compatibility of extensions using the stable ABI. */
-PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*);
-PyAPI_FUNC(void) _PyTrash_destroy_chain(void);
-
 PyAPI_FUNC(void)
 _PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks,
                        size_t sizeof_block);
@@ -442,7 +432,7 @@
    NDEBUG against a Python built with NDEBUG defined.
 
    msg, expr and function can be NULL. */
-PyAPI_FUNC(void) _PyObject_AssertFailed(
+PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed(
     PyObject *obj,
     const char *expr,
     const char *msg,
@@ -465,6 +455,100 @@
     PyObject *op,
     int check_content);
 
+
+/* Trashcan mechanism, thanks to Christian Tismer.
+
+When deallocating a container object, it's possible to trigger an unbounded
+chain of deallocations, as each Py_DECREF in turn drops the refcount on "the
+next" object in the chain to 0.  This can easily lead to stack overflows,
+especially in threads (which typically have less stack space to work with).
+
+A container object can avoid this by bracketing the body of its tp_dealloc
+function with a pair of macros:
+
+static void
+mytype_dealloc(mytype *p)
+{
+    ... declarations go here ...
+
+    PyObject_GC_UnTrack(p);        // must untrack first
+    Py_TRASHCAN_BEGIN(p, mytype_dealloc)
+    ... The body of the deallocator goes here, including all calls ...
+    ... to Py_DECREF on contained objects.                         ...
+    Py_TRASHCAN_END                // there should be no code after this
+}
+
+CAUTION:  Never return from the middle of the body!  If the body needs to
+"get out early", put a label immediately before the Py_TRASHCAN_END
+call, and goto it.  Else the call-depth counter (see below) will stay
+above 0 forever, and the trashcan will never get emptied.
+
+How it works:  The BEGIN macro increments a call-depth counter.  So long
+as this counter is small, the body of the deallocator is run directly without
+further ado.  But if the counter gets large, it instead adds p to a list of
+objects to be deallocated later, skips the body of the deallocator, and
+resumes execution after the END macro.  The tp_dealloc routine then returns
+without deallocating anything (and so unbounded call-stack depth is avoided).
+
+When the call stack finishes unwinding again, code generated by the END macro
+notices this, and calls another routine to deallocate all the objects that
+may have been added to the list of deferred deallocations.  In effect, a
+chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces,
+with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL.
+
+Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base
+class, we need to ensure that the trashcan is only triggered on the tp_dealloc
+of the actual class being deallocated. Otherwise we might end up with a
+partially-deallocated object. To check this, the tp_dealloc function must be
+passed as second argument to Py_TRASHCAN_BEGIN().
+*/
+
+/* This is the old private API, invoked by the macros before 3.2.4.
+   Kept for binary compatibility of extensions using the stable ABI. */
+PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*);
+PyAPI_FUNC(void) _PyTrash_destroy_chain(void);
+
+/* This is the old private API, invoked by the macros before 3.9.
+   Kept for binary compatibility of extensions using the stable ABI. */
+PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*);
+PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void);
+
+/* Forward declarations for PyThreadState */
+struct _ts;
+
+/* Python 3.9 private API, invoked by the macros below. */
+PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op);
+PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate);
+
+#define PyTrash_UNWIND_LEVEL 50
+
+#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \
+    do { \
+        PyThreadState *_tstate = NULL; \
+        /* If "cond" is false, then _tstate remains NULL and the deallocator \
+         * is run normally without involving the trashcan */ \
+        if (cond) { \
+            _tstate = PyThreadState_GET(); \
+            if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \
+                break; \
+            } \
+        }
+        /* The body of the deallocator is here. */
+#define Py_TRASHCAN_END \
+        if (_tstate) { \
+            _PyTrash_end(_tstate); \
+        } \
+    } while (0);
+
+#define Py_TRASHCAN_BEGIN(op, dealloc) \
+    Py_TRASHCAN_BEGIN_CONDITION(op, \
+        Py_TYPE(op)->tp_dealloc == (destructor)(dealloc))
+
+/* For backwards compatibility, these macros enable the trashcan
+ * unconditionally */
+#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1)
+#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/cpython/objimpl.h b/Include/cpython/objimpl.h
index f121922..b835936 100644
--- a/Include/cpython/objimpl.h
+++ b/Include/cpython/objimpl.h
@@ -6,6 +6,89 @@
 extern "C" {
 #endif
 
+#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )
+
+/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
+   vrbl-size object with nitems items, exclusive of gc overhead (if any).  The
+   value is rounded up to the closest multiple of sizeof(void *), in order to
+   ensure that pointer fields at the end of the object are correctly aligned
+   for the platform (this is of special importance for subclasses of, e.g.,
+   str or int, so that pointers can be stored after the embedded data).
+
+   Note that there's no memory wastage in doing this, as malloc has to
+   return (at worst) pointer-aligned memory anyway.
+*/
+#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
+#   error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
+#endif
+
+#define _PyObject_VAR_SIZE(typeobj, nitems)     \
+    _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
+        (nitems)*(typeobj)->tp_itemsize,        \
+        SIZEOF_VOID_P)
+
+
+/* This example code implements an object constructor with a custom
+   allocator, where PyObject_New is inlined, and shows the important
+   distinction between two steps (at least):
+       1) the actual allocation of the object storage;
+       2) the initialization of the Python specific fields
+      in this storage with PyObject_{Init, InitVar}.
+
+   PyObject *
+   YourObject_New(...)
+   {
+       PyObject *op;
+
+       op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
+       if (op == NULL)
+       return PyErr_NoMemory();
+
+       PyObject_Init(op, &YourTypeStruct);
+
+       op->ob_field = value;
+       ...
+       return op;
+   }
+
+   Note that in C++, the use of the new operator usually implies that
+   the 1st step is performed automatically for you, so in a C++ class
+   constructor you would start directly with PyObject_Init/InitVar. */
+
+
+/* Inline functions trading binary compatibility for speed:
+   PyObject_INIT() is the fast version of PyObject_Init(), and
+   PyObject_INIT_VAR() is the fast version of PyObject_InitVar().
+
+   These inline functions must not be called with op=NULL. */
+static inline PyObject*
+_PyObject_INIT(PyObject *op, PyTypeObject *typeobj)
+{
+    assert(op != NULL);
+    Py_SET_TYPE(op, typeobj);
+    if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) {
+        Py_INCREF(typeobj);
+    }
+    _Py_NewReference(op);
+    return op;
+}
+
+#define PyObject_INIT(op, typeobj) \
+    _PyObject_INIT(_PyObject_CAST(op), (typeobj))
+
+static inline PyVarObject*
+_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size)
+{
+    assert(op != NULL);
+    Py_SET_SIZE(op, size);
+    PyObject_INIT((PyObject *)op, typeobj);
+    return op;
+}
+
+#define PyObject_INIT_VAR(op, typeobj, size) \
+    _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size))
+
+
 /* This function returns the number of allocated memory blocks, regardless of size */
 PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void);
 
@@ -37,66 +120,16 @@
 PyAPI_FUNC(Py_ssize_t) _PyGC_CollectIfEnabled(void);
 
 
-/* Test if an object has a GC head */
-#define PyObject_IS_GC(o) \
-    (PyType_IS_GC(Py_TYPE(o)) \
-     && (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o)))
-
-/* GC information is stored BEFORE the object structure. */
-typedef struct {
-    // Pointer to next object in the list.
-    // 0 means the object is not tracked
-    uintptr_t _gc_next;
-
-    // Pointer to previous object in the list.
-    // Lowest two bits are used for flags documented later.
-    uintptr_t _gc_prev;
-} PyGC_Head;
-
-#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1)
-
-/* True if the object is currently tracked by the GC. */
-#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0)
-
-/* True if the object may be tracked by the GC in the future, or already is.
-   This can be useful to implement some optimizations. */
-#define _PyObject_GC_MAY_BE_TRACKED(obj) \
-    (PyObject_IS_GC(obj) && \
-        (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
+/* Test if an object implements the garbage collector protocol */
+PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj);
 
 
-/* Bit flags for _gc_prev */
-/* Bit 0 is set when tp_finalize is called */
-#define _PyGC_PREV_MASK_FINALIZED  (1)
-/* Bit 1 is set when the object is in generation which is GCed currently. */
-#define _PyGC_PREV_MASK_COLLECTING (2)
-/* The (N-2) most significant bits contain the real address. */
-#define _PyGC_PREV_SHIFT           (2)
-#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
-
-// Lowest bit of _gc_next is used for flags only in GC.
-// But it is always 0 for normal code.
-#define _PyGCHead_NEXT(g)        ((PyGC_Head*)(g)->_gc_next)
-#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p))
-
-// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags.
-#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK))
-#define _PyGCHead_SET_PREV(g, p) do { \
-    assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \
-    (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \
-        | ((uintptr_t)(p)); \
-    } while (0)
-
-#define _PyGCHead_FINALIZED(g) \
-    (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0)
-#define _PyGCHead_SET_FINALIZED(g) \
-    ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED)
-
-#define _PyGC_FINALIZED(o) \
-    _PyGCHead_FINALIZED(_Py_AS_GC(o))
-#define _PyGC_SET_FINALIZED(o) \
-    _PyGCHead_SET_FINALIZED(_Py_AS_GC(o))
-
+/* Code built with Py_BUILD_CORE must include pycore_gc.h instead which
+   defines a different _PyGC_FINALIZED() macro. */
+#ifndef Py_BUILD_CORE
+   // Kept for backward compatibility with Python 3.8
+#  define _PyGC_FINALIZED(o) PyObject_GC_IsFinalized(o)
+#endif
 
 PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t size);
 PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size);
@@ -105,8 +138,7 @@
 /* Test if a type supports weak references */
 #define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0)
 
-#define PyObject_GET_WEAKREFS_LISTPTR(o) \
-    ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset))
+PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op);
 
 #ifdef __cplusplus
 }
diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h
index e3098b3..9c87b53 100644
--- a/Include/cpython/pyerrors.h
+++ b/Include/cpython/pyerrors.h
@@ -75,7 +75,8 @@
 /* Error handling definitions */
 
 PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
-_PyErr_StackItem *_PyErr_GetTopmostException(PyThreadState *tstate);
+PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate);
+PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **);
 
 /* Context manipulation (PEP 3134) */
 
@@ -148,7 +149,10 @@
     PyObject *filename,
     int lineno);
 
-/* Create a UnicodeEncodeError object */
+/* Create a UnicodeEncodeError object.
+ *
+ * TODO: This API will be removed in Python 3.11.
+ */
 Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
     const char *encoding,       /* UTF-8 encoded string */
     const Py_UNICODE *object,
@@ -158,7 +162,10 @@
     const char *reason          /* UTF-8 encoded string */
     );
 
-/* Create a UnicodeTranslateError object */
+/* Create a UnicodeTranslateError object.
+ *
+ * TODO: This API will be removed in Python 3.11.
+ */
 Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
     const Py_UNICODE *object,
     Py_ssize_t length,
@@ -177,6 +184,17 @@
     const char *err_msg,
     PyObject *obj);
 
+PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc(
+    const char *func,
+    const char *message);
+
+PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat(
+    const char *func,
+    const char *format,
+    ...);
+
+#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message)
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/cpython/pylifecycle.h b/Include/cpython/pylifecycle.h
index 2f3a0db..eb523b8 100644
--- a/Include/cpython/pylifecycle.h
+++ b/Include/cpython/pylifecycle.h
@@ -32,14 +32,6 @@
 
 PyAPI_FUNC(PyStatus) Py_InitializeFromConfig(
     const PyConfig *config);
-PyAPI_FUNC(PyStatus) _Py_InitializeFromArgs(
-    const PyConfig *config,
-    Py_ssize_t argc,
-    char * const *argv);
-PyAPI_FUNC(PyStatus) _Py_InitializeFromWideArgs(
-    const PyConfig *config,
-    Py_ssize_t argc,
-    wchar_t * const *argv);
 PyAPI_FUNC(PyStatus) _Py_InitializeMain(void);
 
 PyAPI_FUNC(int) Py_RunMain(void);
@@ -73,6 +65,8 @@
 PyAPI_FUNC(int) _Py_LegacyLocaleDetected(int warn);
 PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category);
 
+PyAPI_FUNC(PyThreadState *) _Py_NewInterpreter(int isolated_subinterpreter);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h
index e22b053..f292da1 100644
--- a/Include/cpython/pystate.h
+++ b/Include/cpython/pystate.h
@@ -16,7 +16,7 @@
 /* State unique per thread */
 
 /* Py_tracefunc return -1 when raising an exception, or 0 for success. */
-typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *);
+typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *);
 
 /* The following values are used for 'what' for tracefunc functions
  *
@@ -56,7 +56,7 @@
     PyInterpreterState *interp;
 
     /* Borrowed reference to the current frame (it can be NULL) */
-    struct _frame *frame;
+    PyFrameObject *frame;
     int recursion_depth;
     char overflowed; /* The stack has overflowed. Allow 50 more calls
                         to handle the runtime error. */
@@ -140,22 +140,17 @@
 
 };
 
-/* Get the current interpreter state.
+// Alias for backward compatibility with Python 3.8
+#define _PyInterpreterState_Get PyInterpreterState_Get
 
-   Issue a fatal error if there no current Python thread state or no current
-   interpreter. It cannot return NULL.
-
-   The caller must hold the GIL.*/
-PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_Get(void);
-
-PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*);
-PyAPI_FUNC(void) _PyState_ClearModules(void);
 PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *);
 
 /* Similar to PyThreadState_Get(), but don't issue a fatal error
  * if it is NULL. */
 PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void);
 
+PyAPI_FUNC(PyObject *) _PyThreadState_GetDict(PyThreadState *tstate);
+
 /* PyGILState */
 
 /* Helper/diagnostic function - return 1 if the current thread
@@ -170,7 +165,7 @@
    This function doesn't check for error. Return NULL before _PyGILState_Init()
    is called and after _PyGILState_Fini() is called.
 
-   See also _PyInterpreterState_Get() and _PyInterpreterState_GET_UNSAFE(). */
+   See also _PyInterpreterState_Get() and _PyInterpreterState_GET(). */
 PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void);
 
 /* The implementation of sys._current_frames()  Returns a dict mapping
@@ -185,8 +180,24 @@
 PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *);
 PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
 PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
+PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
 
-typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
+/* Frame evaluation API */
+
+typedef PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, PyFrameObject *, int);
+
+PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc(
+    PyInterpreterState *interp);
+PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc(
+    PyInterpreterState *interp,
+    _PyFrameEvalFunction eval_frame);
+
+PyAPI_FUNC(const PyConfig*) _PyInterpreterState_GetConfig(PyInterpreterState *interp);
+
+// Get the configuration of the currrent interpreter.
+// The caller must hold the GIL.
+PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void);
+
 
 /* cross-interpreter data */
 
diff --git a/Include/cpython/sysmodule.h b/Include/cpython/sysmodule.h
index 72d8ffe..1802b5b 100644
--- a/Include/cpython/sysmodule.h
+++ b/Include/cpython/sysmodule.h
@@ -13,7 +13,10 @@
 
 typedef int(*Py_AuditHookFunction)(const char *, PyObject *, void *);
 
-PyAPI_FUNC(int) PySys_Audit(const char*, const char *, ...);
+PyAPI_FUNC(int) PySys_Audit(
+    const char *event,
+    const char *argFormat,
+    ...);
 PyAPI_FUNC(int) PySys_AddAuditHook(Py_AuditHookFunction, void*);
 
 #ifdef __cplusplus
diff --git a/Include/cpython/traceback.h b/Include/cpython/traceback.h
index 746097d..837470c 100644
--- a/Include/cpython/traceback.h
+++ b/Include/cpython/traceback.h
@@ -9,7 +9,7 @@
 typedef struct _traceback {
     PyObject_HEAD
     struct _traceback *tb_next;
-    struct _frame *tb_frame;
+    PyFrameObject *tb_frame;
     int tb_lasti;
     int tb_lineno;
 } PyTracebackObject;
diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h
index 54a13e3..1fc732a 100644
--- a/Include/cpython/unicodeobject.h
+++ b/Include/cpython/unicodeobject.h
@@ -50,13 +50,18 @@
     Py_UNICODE_ISDIGIT(ch) || \
     Py_UNICODE_ISNUMERIC(ch))
 
-#define Py_UNICODE_COPY(target, source, length) \
-    memcpy((target), (source), (length)*sizeof(Py_UNICODE))
+Py_DEPRECATED(3.3) static inline void
+Py_UNICODE_COPY(Py_UNICODE *target, const Py_UNICODE *source, Py_ssize_t length) {
+    memcpy(target, source, (size_t)(length) * sizeof(Py_UNICODE));
+}
 
-#define Py_UNICODE_FILL(target, value, length) \
-    do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\
-        for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\
-    } while (0)
+Py_DEPRECATED(3.3) static inline void
+Py_UNICODE_FILL(Py_UNICODE *target, Py_UNICODE value, Py_ssize_t length) {
+    Py_ssize_t i;
+    for (i = 0; i < length; i++) {
+        target[i] = value;
+    }
+}
 
 /* macros to work with surrogates */
 #define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
@@ -71,14 +76,6 @@
 /* low surrogate = bottom 10 bits added to DC00 */
 #define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF))
 
-/* Check if substring matches at given offset.  The offset must be
-   valid, and the substring must not be empty. */
-
-#define Py_UNICODE_MATCH(string, offset, substring) \
-    ((*((string)->wstr + (offset)) == *((substring)->wstr)) && \
-     ((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \
-     !memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE)))
-
 /* --- Unicode Type ------------------------------------------------------- */
 
 /* ASCII-only strings created through PyUnicode_New use the PyASCIIObject
@@ -251,10 +248,6 @@
     int check_content);
 
 /* Fast access macros */
-#define PyUnicode_WSTR_LENGTH(op) \
-    (PyUnicode_IS_COMPACT_ASCII(op) ?                  \
-     ((PyASCIIObject*)op)->length :                    \
-     ((PyCompactUnicodeObject*)op)->wstr_length)
 
 /* Returns the deprecated Py_UNICODE representation's size in code units
    (this includes surrogate pairs as 2 units).
@@ -449,6 +442,14 @@
         (0xffffU) :                                                     \
         (0x10ffffU)))))
 
+Py_DEPRECATED(3.3)
+static inline Py_ssize_t _PyUnicode_get_wstr_length(PyObject *op) {
+    return PyUnicode_IS_COMPACT_ASCII(op) ?
+            ((PyASCIIObject*)op)->length :
+            ((PyCompactUnicodeObject*)op)->wstr_length;
+}
+#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)
+
 /* === Public API ========================================================= */
 
 /* --- Plain Py_UNICODE --------------------------------------------------- */
@@ -547,7 +548,7 @@
    only allowed if u was set to NULL.
 
    The buffer is copied into the new object. */
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
+Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
     const Py_UNICODE *u,        /* Unicode buffer */
     Py_ssize_t size             /* size of buffer */
     );
@@ -576,13 +577,13 @@
    Py_UNICODE buffer.
    If the wchar_t/Py_UNICODE representation is not yet available, this
    function will calculate it. */
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
+Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
     PyObject *unicode           /* Unicode object */
     );
 
 /* Similar to PyUnicode_AsUnicode(), but raises a ValueError if the string
    contains null characters. */
-PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode(
+Py_DEPRECATED(3.3) PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode(
     PyObject *unicode           /* Unicode object */
     );
 
@@ -591,7 +592,7 @@
    If the wchar_t/Py_UNICODE representation is not yet available, this
    function will calculate it. */
 
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
+Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
     PyObject *unicode,          /* Unicode object */
     Py_ssize_t *size            /* location where to save the length */
     );
@@ -726,12 +727,6 @@
     Py_ssize_t start,
     Py_ssize_t end);
 
-/* --- wchar_t support for platforms which support it --------------------- */
-
-#ifdef HAVE_WCHAR_H
-PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind);
-#endif
-
 /* --- Manage the default encoding ---------------------------------------- */
 
 /* Returns a pointer to the default encoding (UTF-8) of the
@@ -746,12 +741,6 @@
 
    _PyUnicode_AsStringAndSize is a #define for PyUnicode_AsUTF8AndSize to
    support the previous internal function with the same behaviour.
-
-   *** This API is for interpreter INTERNAL USE ONLY and will likely
-   *** be removed or changed in the future.
-
-   *** If you need to access the Unicode object as UTF-8 bytes string,
-   *** please use PyUnicode_AsUTF8String() instead.
 */
 
 PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize(
@@ -990,7 +979,7 @@
 
 */
 
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
+Py_DEPRECATED(3.3) PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
     Py_UNICODE *s,              /* Unicode buffer */
     Py_ssize_t length,          /* Number of Py_UNICODE chars to encode */
     char *output,               /* Output buffer; must have size >= length */
@@ -1003,7 +992,7 @@
    Returns a new Unicode string on success, NULL on failure.
 */
 
-/* Py_DEPRECATED(3.3) */
+Py_DEPRECATED(3.3)
 PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII(
     Py_UNICODE *s,              /* Unicode buffer */
     Py_ssize_t length           /* Number of Py_UNICODE chars to transform */
@@ -1227,13 +1216,13 @@
 
 /* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/
 PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*);
-/* Clear all static strings. */
-PyAPI_FUNC(void) _PyUnicode_ClearStaticStrings(void);
 
 /* Fast equality check when the inputs are known to be exact unicode types
    and where the hash values are equal (i.e. a very probable match) */
 PyAPI_FUNC(int) _PyUnicode_EQ(PyObject *, PyObject *);
 
+PyAPI_FUNC(Py_ssize_t) _PyUnicode_ScanIdentifier(PyObject *);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/datetime.h b/Include/datetime.h
index 00507cb..5d9f255 100644
--- a/Include/datetime.h
+++ b/Include/datetime.h
@@ -196,19 +196,19 @@
 
 /* Macros for type checking when not building the Python core. */
 #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType)
-#define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType)
+#define PyDate_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateType)
 
 #define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType)
-#define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType)
+#define PyDateTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateTimeType)
 
 #define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType)
-#define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType)
+#define PyTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TimeType)
 
 #define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType)
-#define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType)
+#define PyDelta_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DeltaType)
 
 #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType)
-#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType)
+#define PyTZInfo_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TZInfoType)
 
 
 /* Macros for accessing constructors in a simplified fashion. */
diff --git a/Include/dictobject.h b/Include/dictobject.h
index b37573a..c88b0aa 100644
--- a/Include/dictobject.h
+++ b/Include/dictobject.h
@@ -16,7 +16,7 @@
 
 #define PyDict_Check(op) \
                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
-#define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
+#define PyDict_CheckExact(op) Py_IS_TYPE(op, &PyDict_Type)
 
 PyAPI_FUNC(PyObject *) PyDict_New(void);
 PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key);
diff --git a/Include/errcode.h b/Include/errcode.h
index b37cd26..790518b 100644
--- a/Include/errcode.h
+++ b/Include/errcode.h
@@ -29,7 +29,6 @@
 #define E_EOFS          23      /* EOF in triple-quoted string */
 #define E_EOLS          24      /* EOL in single-quoted string */
 #define E_LINECONT      25      /* Unexpected characters after a line continuation */
-#define E_IDENTIFIER    26      /* Invalid characters in identifier */
 #define E_BADSINGLE     27      /* Ill-formed single statement input */
 
 #ifdef __cplusplus
diff --git a/Include/exports.h b/Include/exports.h
new file mode 100644
index 0000000..fc1a5c5
--- /dev/null
+++ b/Include/exports.h
@@ -0,0 +1,30 @@
+#ifndef Py_EXPORTS_H
+#define Py_EXPORTS_H
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+    #define Py_IMPORTED_SYMBOL __declspec(dllimport)
+    #define Py_EXPORTED_SYMBOL __declspec(dllexport)
+    #define Py_LOCAL_SYMBOL
+#else
+/*
+ * If we only ever used gcc >= 5, we could use __has_attribute(visibility)
+ * as a cross-platform way to determine if visibility is supported. However,
+ * we may still need to support gcc >= 4, as some Ubuntu LTS and Centos versions
+ * have 4 < gcc < 5.
+ */
+    #ifndef __has_attribute
+      #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
+    #endif
+    #if (defined(__GNUC__) && (__GNUC__ >= 4)) ||\
+        (defined(__clang__) && __has_attribute(visibility))
+        #define Py_IMPORTED_SYMBOL __attribute__ ((visibility ("default")))
+        #define Py_EXPORTED_SYMBOL __attribute__ ((visibility ("default")))
+        #define Py_LOCAL_SYMBOL  __attribute__ ((visibility ("hidden")))
+    #else
+        #define Py_IMPORTED_SYMBOL
+        #define Py_EXPORTED_SYMBOL
+        #define Py_LOCAL_SYMBOL
+    #endif
+#endif
+
+#endif /* Py_EXPORTS_H */
diff --git a/Include/fileobject.h b/Include/fileobject.h
index 456887e..6ec2994 100644
--- a/Include/fileobject.h
+++ b/Include/fileobject.h
@@ -20,8 +20,15 @@
    If non-NULL, this is different than the default encoding for strings
 */
 PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
+PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
+#endif
 PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
 
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
+PyAPI_DATA(int) Py_UTF8Mode;
+#endif
+
 /* A routine to check if a file descriptor can be select()-ed. */
 #ifdef _MSC_VER
     /* On Windows, any socket fd can be select()-ed, no matter how high */
diff --git a/Include/fileutils.h b/Include/fileutils.h
index 359dd0a..12bd071 100644
--- a/Include/fileutils.h
+++ b/Include/fileutils.h
@@ -18,167 +18,12 @@
     size_t *error_pos);
 #endif
 
-
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
-typedef enum {
-    _Py_ERROR_UNKNOWN=0,
-    _Py_ERROR_STRICT,
-    _Py_ERROR_SURROGATEESCAPE,
-    _Py_ERROR_REPLACE,
-    _Py_ERROR_IGNORE,
-    _Py_ERROR_BACKSLASHREPLACE,
-    _Py_ERROR_SURROGATEPASS,
-    _Py_ERROR_XMLCHARREFREPLACE,
-    _Py_ERROR_OTHER
-} _Py_error_handler;
-
-PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
-
-PyAPI_FUNC(int) _Py_DecodeLocaleEx(
-    const char *arg,
-    wchar_t **wstr,
-    size_t *wlen,
-    const char **reason,
-    int current_locale,
-    _Py_error_handler errors);
-
-PyAPI_FUNC(int) _Py_EncodeLocaleEx(
-    const wchar_t *text,
-    char **str,
-    size_t *error_pos,
-    const char **reason,
-    int current_locale,
-    _Py_error_handler errors);
-#endif
-
 #ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
-
-#if defined(MS_WINDOWS) || defined(__APPLE__)
-    /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
-       On macOS 10.13, read() and write() with more than INT_MAX bytes
-       fail with EINVAL (bpo-24658). */
-#   define _PY_READ_MAX  INT_MAX
-#   define _PY_WRITE_MAX INT_MAX
-#else
-    /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
-       but it's safer to do it ourself to have a portable behaviour */
-#   define _PY_READ_MAX  PY_SSIZE_T_MAX
-#   define _PY_WRITE_MAX PY_SSIZE_T_MAX
+#  define Py_CPYTHON_FILEUTILS_H
+#  include  "cpython/fileutils.h"
+#  undef Py_CPYTHON_FILEUTILS_H
 #endif
 
-#ifdef MS_WINDOWS
-struct _Py_stat_struct {
-    unsigned long st_dev;
-    uint64_t st_ino;
-    unsigned short st_mode;
-    int st_nlink;
-    int st_uid;
-    int st_gid;
-    unsigned long st_rdev;
-    __int64 st_size;
-    time_t st_atime;
-    int st_atime_nsec;
-    time_t st_mtime;
-    int st_mtime_nsec;
-    time_t st_ctime;
-    int st_ctime_nsec;
-    unsigned long st_file_attributes;
-    unsigned long st_reparse_tag;
-};
-#else
-#  define _Py_stat_struct stat
-#endif
-
-PyAPI_FUNC(int) _Py_fstat(
-    int fd,
-    struct _Py_stat_struct *status);
-
-PyAPI_FUNC(int) _Py_fstat_noraise(
-    int fd,
-    struct _Py_stat_struct *status);
-
-PyAPI_FUNC(int) _Py_stat(
-    PyObject *path,
-    struct stat *status);
-
-PyAPI_FUNC(int) _Py_open(
-    const char *pathname,
-    int flags);
-
-PyAPI_FUNC(int) _Py_open_noraise(
-    const char *pathname,
-    int flags);
-
-PyAPI_FUNC(FILE *) _Py_wfopen(
-    const wchar_t *path,
-    const wchar_t *mode);
-
-PyAPI_FUNC(FILE*) _Py_fopen(
-    const char *pathname,
-    const char *mode);
-
-PyAPI_FUNC(FILE*) _Py_fopen_obj(
-    PyObject *path,
-    const char *mode);
-
-PyAPI_FUNC(Py_ssize_t) _Py_read(
-    int fd,
-    void *buf,
-    size_t count);
-
-PyAPI_FUNC(Py_ssize_t) _Py_write(
-    int fd,
-    const void *buf,
-    size_t count);
-
-PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
-    int fd,
-    const void *buf,
-    size_t count);
-
-#ifdef HAVE_READLINK
-PyAPI_FUNC(int) _Py_wreadlink(
-    const wchar_t *path,
-    wchar_t *buf,
-    /* Number of characters of 'buf' buffer
-       including the trailing NUL character */
-    size_t buflen);
-#endif
-
-#ifdef HAVE_REALPATH
-PyAPI_FUNC(wchar_t*) _Py_wrealpath(
-    const wchar_t *path,
-    wchar_t *resolved_path,
-    /* Number of characters of 'resolved_path' buffer
-       including the trailing NUL character */
-    size_t resolved_path_len);
-#endif
-
-PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
-    wchar_t *buf,
-    /* Number of characters of 'buf' buffer
-       including the trailing NUL character */
-    size_t buflen);
-
-PyAPI_FUNC(int) _Py_get_inheritable(int fd);
-
-PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
-                                    int *atomic_flag_works);
-
-PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
-                                               int *atomic_flag_works);
-
-PyAPI_FUNC(int) _Py_dup(int fd);
-
-#ifndef MS_WINDOWS
-PyAPI_FUNC(int) _Py_get_blocking(int fd);
-
-PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
-#endif   /* !MS_WINDOWS */
-
-#endif   /* Py_LIMITED_API */
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/floatobject.h b/Include/floatobject.h
index f1044d6..e994aa8 100644
--- a/Include/floatobject.h
+++ b/Include/floatobject.h
@@ -21,7 +21,7 @@
 PyAPI_DATA(PyTypeObject) PyFloat_Type;
 
 #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
-#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)
+#define PyFloat_CheckExact(op) Py_IS_TYPE(op, &PyFloat_Type)
 
 #ifdef Py_NAN
 #define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN)
@@ -88,15 +88,6 @@
 PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
 PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
 
-/* Needed for the old way for marshal to store a floating point number.
-   Returns the string length copied into p, -1 on error.
- */
-PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len);
-
-/* Used to get the important decimal digits of a double */
-PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum);
-PyAPI_FUNC(void) _PyFloat_DigitsInit(void);
-
 /* The unpack routines read 2, 4 or 8 bytes, starting at p.  le is a bool
  * argument, true if the string is in little-endian format (exponent
  * last, at p+1, p+3 or p+7), false if big-endian (exponent first, at p).
@@ -109,9 +100,6 @@
 PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
 PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);
 
-/* free list api */
-PyAPI_FUNC(int) PyFloat_ClearFreeList(void);
-
 PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out);
 
 /* Format the object based on the format_spec, as defined in PEP 3101
diff --git a/Include/frameobject.h b/Include/frameobject.h
index 3bad86a..c118af1 100644
--- a/Include/frameobject.h
+++ b/Include/frameobject.h
@@ -1,92 +1,20 @@
 /* Frame object interface */
 
-#ifndef Py_LIMITED_API
 #ifndef Py_FRAMEOBJECT_H
 #define Py_FRAMEOBJECT_H
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-typedef struct {
-    int b_type;                 /* what kind of block this is */
-    int b_handler;              /* where to jump to find handler */
-    int b_level;                /* value stack level to pop to */
-} PyTryBlock;
+#include "pyframe.h"
 
-typedef struct _frame {
-    PyObject_VAR_HEAD
-    struct _frame *f_back;      /* previous frame, or NULL */
-    PyCodeObject *f_code;       /* code segment */
-    PyObject *f_builtins;       /* builtin symbol table (PyDictObject) */
-    PyObject *f_globals;        /* global symbol table (PyDictObject) */
-    PyObject *f_locals;         /* local symbol table (any mapping) */
-    PyObject **f_valuestack;    /* points after the last local */
-    /* Next free slot in f_valuestack.  Frame creation sets to f_valuestack.
-       Frame evaluation usually NULLs it, but a frame that yields sets it
-       to the current stack top. */
-    PyObject **f_stacktop;
-    PyObject *f_trace;          /* Trace function */
-    char f_trace_lines;         /* Emit per-line trace events? */
-    char f_trace_opcodes;       /* Emit per-opcode trace events? */
-
-    /* Borrowed reference to a generator, or NULL */
-    PyObject *f_gen;
-
-    int f_lasti;                /* Last instruction if called */
-    /* Call PyFrame_GetLineNumber() instead of reading this field
-       directly.  As of 2.3 f_lineno is only valid when tracing is
-       active (i.e. when f_trace is set).  At other times we use
-       PyCode_Addr2Line to calculate the line from the current
-       bytecode index. */
-    int f_lineno;               /* Current line number */
-    int f_iblock;               /* index in f_blockstack */
-    char f_executing;           /* whether the frame is still executing */
-    PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
-    PyObject *f_localsplus[1];  /* locals+stack, dynamically sized */
-} PyFrameObject;
-
-
-/* Standard object interface */
-
-PyAPI_DATA(PyTypeObject) PyFrame_Type;
-
-#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type)
-
-PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
-                                        PyObject *, PyObject *);
-
-/* only internal use */
-PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *,
-                                    PyObject *, PyObject *);
-
-
-/* The rest of the interface is specific for frame objects */
-
-/* Block management functions */
-
-PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int);
-PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *);
-
-/* Extend the value stack */
-
-PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int);
-
-/* Conversions between "fast locals" and locals in dictionary */
-
-PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
-
-PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
-PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
-
-PyAPI_FUNC(int) PyFrame_ClearFreeList(void);
-
-PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out);
-
-/* Return the line of code the frame is currently executing. */
-PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
+#ifndef Py_LIMITED_API
+#  define Py_CPYTHON_FRAMEOBJECT_H
+#  include  "cpython/frameobject.h"
+#  undef Py_CPYTHON_FRAMEOBJECT_H
+#endif
 
 #ifdef __cplusplus
 }
 #endif
 #endif /* !Py_FRAMEOBJECT_H */
-#endif /* Py_LIMITED_API */
diff --git a/Include/funcobject.h b/Include/funcobject.h
index e563a74..c5cc9d2 100644
--- a/Include/funcobject.h
+++ b/Include/funcobject.h
@@ -43,7 +43,7 @@
 
 PyAPI_DATA(PyTypeObject) PyFunction_Type;
 
-#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
+#define PyFunction_Check(op) Py_IS_TYPE(op, &PyFunction_Type)
 
 PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
@@ -60,12 +60,6 @@
 PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
 
 #ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
-    PyObject *func,
-    PyObject *const *args,
-    Py_ssize_t nargs,
-    PyObject *kwargs);
-
 PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall(
     PyObject *func,
     PyObject *const *stack,
diff --git a/Include/genericaliasobject.h b/Include/genericaliasobject.h
new file mode 100644
index 0000000..cf00297
--- /dev/null
+++ b/Include/genericaliasobject.h
@@ -0,0 +1,14 @@
+// Implementation of PEP 585: support list[int] etc.
+#ifndef Py_GENERICALIASOBJECT_H
+#define Py_GENERICALIASOBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyAPI_FUNC(PyObject *) Py_GenericAlias(PyObject *, PyObject *);
+PyAPI_DATA(PyTypeObject) Py_GenericAliasType;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_GENERICALIASOBJECT_H */
diff --git a/Include/genobject.h b/Include/genobject.h
index 59ede28..8ffd156 100644
--- a/Include/genobject.h
+++ b/Include/genobject.h
@@ -10,14 +10,12 @@
 
 #include "pystate.h"   /* _PyErr_StackItem */
 
-struct _frame; /* Avoid including frameobject.h */
-
 /* _PyGenObject_HEAD defines the initial segment of generator
    and coroutine objects. */
 #define _PyGenObject_HEAD(prefix)                                           \
     PyObject_HEAD                                                           \
     /* Note: gi_frame can be NULL if the generator is "finished" */         \
-    struct _frame *prefix##_frame;                                          \
+    PyFrameObject *prefix##_frame;                                          \
     /* True if generator is being executed. */                              \
     char prefix##_running;                                                  \
     /* The code object backing the generator */                             \
@@ -38,12 +36,11 @@
 PyAPI_DATA(PyTypeObject) PyGen_Type;
 
 #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
-#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type)
+#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type)
 
-PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
-PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *,
+PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *);
+PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *,
     PyObject *name, PyObject *qualname);
-PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
 PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
 PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
 PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *);
@@ -59,11 +56,9 @@
 PyAPI_DATA(PyTypeObject) PyCoro_Type;
 PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type;
 
-PyAPI_DATA(PyTypeObject) _PyAIterWrapper_Type;
-
-#define PyCoro_CheckExact(op) (Py_TYPE(op) == &PyCoro_Type)
+#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type)
 PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
-PyAPI_FUNC(PyObject *) PyCoro_New(struct _frame *,
+PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *,
     PyObject *name, PyObject *qualname);
 
 /* Asynchronous Generators */
@@ -89,15 +84,13 @@
 PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type;
 PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type;
 
-PyAPI_FUNC(PyObject *) PyAsyncGen_New(struct _frame *,
+PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *,
     PyObject *name, PyObject *qualname);
 
-#define PyAsyncGen_CheckExact(op) (Py_TYPE(op) == &PyAsyncGen_Type)
+#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type)
 
 PyObject *_PyAsyncGenValueWrapperNew(PyObject *);
 
-int PyAsyncGen_ClearFreeLists(void);
-
 #endif
 
 #undef _PyGenObject_HEAD
diff --git a/Include/import.h b/Include/import.h
index 13c6149..aeef3ef 100644
--- a/Include/import.h
+++ b/Include/import.h
@@ -1,4 +1,3 @@
-
 /* Module definition and import interface */
 
 #ifndef Py_IMPORT_H
@@ -7,9 +6,6 @@
 extern "C" {
 #endif
 
-#ifndef Py_LIMITED_API
-PyMODINIT_FUNC PyInit__imp(void);
-#endif /* !Py_LIMITED_API */
 PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
 PyAPI_FUNC(const char *) PyImport_GetMagicTag(void);
 PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(
@@ -39,14 +35,6 @@
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
 PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name);
 #endif
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
-PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
-PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
-                                                 PyObject *modules);
-PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
-PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
-#endif
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
 PyAPI_FUNC(PyObject *) PyImport_AddModuleObject(
     PyObject *name
@@ -84,7 +72,6 @@
 PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
 PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
 PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
-PyAPI_FUNC(void) PyImport_Cleanup(void);
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
 PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject(
     PyObject *name
@@ -94,53 +81,15 @@
     const char *name            /* UTF-8 encoded string */
     );
 
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyImport_AcquireLock(void);
-PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
-
-PyAPI_FUNC(void) _PyImport_ReInitLock(void);
-
-PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
-    const char *name,            /* UTF-8 encoded string */
-    PyObject *modules
-    );
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
-                                                       PyObject *);
-PyAPI_FUNC(int) _PyImport_FixupBuiltin(
-    PyObject *mod,
-    const char *name,            /* UTF-8 encoded string */
-    PyObject *modules
-    );
-PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
-                                               PyObject *, PyObject *);
-
-struct _inittab {
-    const char *name;           /* ASCII encoded string */
-    PyObject* (*initfunc)(void);
-};
-PyAPI_DATA(struct _inittab *) PyImport_Inittab;
-PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
-#endif /* Py_LIMITED_API */
-
-PyAPI_DATA(PyTypeObject) PyNullImporter_Type;
-
 PyAPI_FUNC(int) PyImport_AppendInittab(
     const char *name,           /* ASCII encoded string */
     PyObject* (*initfunc)(void)
     );
 
 #ifndef Py_LIMITED_API
-struct _frozen {
-    const char *name;                 /* ASCII encoded string */
-    const unsigned char *code;
-    int size;
-};
-
-/* Embedding apps may change this pointer to point to their favorite
-   collection of frozen modules: */
-
-PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
+#  define Py_CPYTHON_IMPORT_H
+#  include  "cpython/import.h"
+#  undef Py_CPYTHON_IMPORT_H
 #endif
 
 #ifdef __cplusplus
diff --git a/Include/internal/pegen_interface.h b/Include/internal/pegen_interface.h
new file mode 100644
index 0000000..ee4c77e
--- /dev/null
+++ b/Include/internal/pegen_interface.h
@@ -0,0 +1,46 @@
+#ifndef Py_PEGENINTERFACE
+#define Py_PEGENINTERFACE
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "Python.h"
+#include "Python-ast.h"
+
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromString(
+    const char *str,
+    const char *filename,
+    int mode,
+    PyCompilerFlags *flags,
+    PyArena *arena);
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromStringObject(
+    const char *str,
+    PyObject* filename,
+    int mode,
+    PyCompilerFlags *flags,
+    PyArena *arena);
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromFileObject(
+    FILE *fp,
+    PyObject *filename_ob,
+    int mode,
+    const char *enc,
+    const char *ps1,
+    const char *ps2,
+    PyCompilerFlags *flags,
+    int *errcode,
+    PyArena *arena);
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromFilename(
+    const char *filename,
+    int mode,
+    PyCompilerFlags *flags,
+    PyArena *arena);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_PEGENINTERFACE*/
diff --git a/Include/internal/pycore_abstract.h b/Include/internal/pycore_abstract.h
new file mode 100644
index 0000000..b791bf2
--- /dev/null
+++ b/Include/internal/pycore_abstract.h
@@ -0,0 +1,22 @@
+#ifndef Py_INTERNAL_ABSTRACT_H
+#define Py_INTERNAL_ABSTRACT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+// Fast inlined version of PyIndex_Check()
+static inline int
+_PyIndex_Check(PyObject *obj)
+{
+    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
+    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_ABSTRACT_H */
diff --git a/Include/internal/pycore_atomic.h b/Include/internal/pycore_atomic.h
index 336bc3f..1d5c562 100644
--- a/Include/internal/pycore_atomic.h
+++ b/Include/internal/pycore_atomic.h
@@ -8,8 +8,7 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "dynamic_annotations.h"
-
+#include "dynamic_annotations.h"   /* _Py_ANNOTATE_MEMORY_ORDER */
 #include "pyconfig.h"
 
 #if defined(HAVE_STD_ATOMIC)
diff --git a/Include/bytes_methods.h b/Include/internal/pycore_bytes_methods.h
similarity index 97%
rename from Include/bytes_methods.h
rename to Include/internal/pycore_bytes_methods.h
index 8434a50..11e8ab2 100644
--- a/Include/bytes_methods.h
+++ b/Include/internal/pycore_bytes_methods.h
@@ -2,6 +2,10 @@
 #ifndef Py_BYTES_CTYPE_H
 #define Py_BYTES_CTYPE_H
 
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
 /*
  * The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray)
  * methods of the given names, they operate on ASCII byte strings.
diff --git a/Include/internal/pycore_byteswap.h b/Include/internal/pycore_byteswap.h
new file mode 100644
index 0000000..2b20fc6
--- /dev/null
+++ b/Include/internal/pycore_byteswap.h
@@ -0,0 +1,88 @@
+/* Bytes swap functions, reverse order of bytes:
+
+   - _Py_bswap16(uint16_t)
+   - _Py_bswap32(uint32_t)
+   - _Py_bswap64(uint64_t)
+*/
+
+#ifndef Py_INTERNAL_BSWAP_H
+#define Py_INTERNAL_BSWAP_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+#if defined(__GNUC__) \
+      && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8))
+   /* __builtin_bswap16() is available since GCC 4.8,
+      __builtin_bswap32() is available since GCC 4.3,
+      __builtin_bswap64() is available since GCC 4.3. */
+#  define _PY_HAVE_BUILTIN_BSWAP
+#endif
+
+#ifdef _MSC_VER
+   /* Get _byteswap_ushort(), _byteswap_ulong(), _byteswap_uint64() */
+#  include <intrin.h>
+#endif
+
+static inline uint16_t
+_Py_bswap16(uint16_t word)
+{
+#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap16)
+    return __builtin_bswap16(word);
+#elif defined(_MSC_VER)
+    Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned short));
+    return _byteswap_ushort(word);
+#else
+    // Portable implementation which doesn't rely on circular bit shift
+    return ( ((word & UINT16_C(0x00FF)) << 8)
+           | ((word & UINT16_C(0xFF00)) >> 8));
+#endif
+}
+
+static inline uint32_t
+_Py_bswap32(uint32_t word)
+{
+#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap32)
+    return __builtin_bswap32(word);
+#elif defined(_MSC_VER)
+    Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned long));
+    return _byteswap_ulong(word);
+#else
+    // Portable implementation which doesn't rely on circular bit shift
+    return ( ((word & UINT32_C(0x000000FF)) << 24)
+           | ((word & UINT32_C(0x0000FF00)) <<  8)
+           | ((word & UINT32_C(0x00FF0000)) >>  8)
+           | ((word & UINT32_C(0xFF000000)) >> 24));
+#endif
+}
+
+static inline uint64_t
+_Py_bswap64(uint64_t word)
+{
+#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap64)
+    return __builtin_bswap64(word);
+#elif defined(_MSC_VER)
+    return _byteswap_uint64(word);
+#else
+    // Portable implementation which doesn't rely on circular bit shift
+    return ( ((word & UINT64_C(0x00000000000000FF)) << 56)
+           | ((word & UINT64_C(0x000000000000FF00)) << 40)
+           | ((word & UINT64_C(0x0000000000FF0000)) << 24)
+           | ((word & UINT64_C(0x00000000FF000000)) <<  8)
+           | ((word & UINT64_C(0x000000FF00000000)) >>  8)
+           | ((word & UINT64_C(0x0000FF0000000000)) >> 24)
+           | ((word & UINT64_C(0x00FF000000000000)) >> 40)
+           | ((word & UINT64_C(0xFF00000000000000)) >> 56));
+#endif
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_BSWAP_H */
+
diff --git a/Include/internal/pycore_call.h b/Include/internal/pycore_call.h
new file mode 100644
index 0000000..f7d856a
--- /dev/null
+++ b/Include/internal/pycore_call.h
@@ -0,0 +1,39 @@
+#ifndef Py_INTERNAL_CALL_H
+#define Py_INTERNAL_CALL_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
+    PyThreadState *tstate,
+    PyObject *callable,
+    PyObject *obj,
+    PyObject *args,
+    PyObject *kwargs);
+
+PyAPI_FUNC(PyObject *) _PyObject_FastCallDictTstate(
+    PyThreadState *tstate,
+    PyObject *callable,
+    PyObject *const *args,
+    size_t nargsf,
+    PyObject *kwargs);
+
+PyAPI_FUNC(PyObject *) _PyObject_Call(
+    PyThreadState *tstate,
+    PyObject *callable,
+    PyObject *args,
+    PyObject *kwargs);
+
+static inline PyObject *
+_PyObject_CallNoArgTstate(PyThreadState *tstate, PyObject *func) {
+    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_CALL_H */
diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h
index 4c1c0e2..18c8f02 100644
--- a/Include/internal/pycore_ceval.h
+++ b/Include/internal/pycore_ceval.h
@@ -8,29 +8,116 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_atomic.h"
-#include "pycore_pystate.h"
-#include "pythread.h"
+/* Forward declarations */
+struct pyruntimestate;
+struct _ceval_runtime_state;
 
-PyAPI_FUNC(void) _Py_FinishPendingCalls(_PyRuntimeState *runtime);
-PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *);
-PyAPI_FUNC(void) _PyEval_FiniThreads(
-    struct _ceval_runtime_state *ceval);
-PyAPI_FUNC(void) _PyEval_SignalReceived(
-    struct _ceval_runtime_state *ceval);
+#include "pycore_interp.h"   /* PyInterpreterState.eval_frame */
+
+extern void _Py_FinishPendingCalls(PyThreadState *tstate);
+extern void _PyEval_InitRuntimeState(struct _ceval_runtime_state *);
+extern int _PyEval_InitState(struct _ceval_state *ceval);
+extern void _PyEval_FiniState(struct _ceval_state *ceval);
+PyAPI_FUNC(void) _PyEval_SignalReceived(PyInterpreterState *interp);
 PyAPI_FUNC(int) _PyEval_AddPendingCall(
-    PyThreadState *tstate,
-    struct _ceval_runtime_state *ceval,
+    PyInterpreterState *interp,
     int (*func)(void *),
     void *arg);
-PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
-    struct _ceval_runtime_state *ceval);
-PyAPI_FUNC(void) _PyEval_ReInitThreads(
-    _PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyThreadState *tstate);
+#ifdef HAVE_FORK
+extern void _PyEval_ReInitThreads(struct pyruntimestate *runtime);
+#endif
+PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(
+    PyThreadState *tstate,
+    int new_depth);
 
 /* Private function */
 void _PyEval_Fini(void);
 
+static inline PyObject*
+_PyEval_EvalFrame(PyThreadState *tstate, PyFrameObject *f, int throwflag)
+{
+    return tstate->interp->eval_frame(tstate, f, throwflag);
+}
+
+extern PyObject *_PyEval_EvalCode(
+    PyThreadState *tstate,
+    PyObject *_co, PyObject *globals, PyObject *locals,
+    PyObject *const *args, Py_ssize_t argcount,
+    PyObject *const *kwnames, PyObject *const *kwargs,
+    Py_ssize_t kwcount, int kwstep,
+    PyObject *const *defs, Py_ssize_t defcount,
+    PyObject *kwdefs, PyObject *closure,
+    PyObject *name, PyObject *qualname);
+
+extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime);
+extern PyStatus _PyEval_InitGIL(PyThreadState *tstate);
+extern void _PyEval_FiniGIL(PyThreadState *tstate);
+
+extern void _PyEval_ReleaseLock(PyThreadState *tstate);
+
+
+/* --- _Py_EnterRecursiveCall() ----------------------------------------- */
+
+PyAPI_DATA(int) _Py_CheckRecursionLimit;
+
+#ifdef USE_STACKCHECK
+/* With USE_STACKCHECK macro defined, trigger stack checks in
+   _Py_CheckRecursiveCall() on every 64th call to Py_EnterRecursiveCall. */
+static inline int _Py_MakeRecCheck(PyThreadState *tstate)  {
+    return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit
+            || ++tstate->stackcheck_counter > 64);
+}
+#else
+static inline int _Py_MakeRecCheck(PyThreadState *tstate) {
+    return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit);
+}
+#endif
+
+PyAPI_FUNC(int) _Py_CheckRecursiveCall(
+    PyThreadState *tstate,
+    const char *where);
+
+static inline int _Py_EnterRecursiveCall(PyThreadState *tstate,
+                                         const char *where) {
+    return (_Py_MakeRecCheck(tstate) && _Py_CheckRecursiveCall(tstate, where));
+}
+
+static inline int _Py_EnterRecursiveCall_inline(const char *where) {
+    PyThreadState *tstate = PyThreadState_GET();
+    return _Py_EnterRecursiveCall(tstate, where);
+}
+
+#define Py_EnterRecursiveCall(where) _Py_EnterRecursiveCall_inline(where)
+
+/* Compute the "lower-water mark" for a recursion limit. When
+ * Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
+ * the overflowed flag is reset to 0. */
+static inline int _Py_RecursionLimitLowerWaterMark(int limit) {
+    if (limit > 200) {
+        return (limit - 50);
+    }
+    else {
+        return (3 * (limit >> 2));
+    }
+}
+
+static inline void _Py_LeaveRecursiveCall(PyThreadState *tstate)  {
+    tstate->recursion_depth--;
+    int limit = tstate->interp->ceval.recursion_limit;
+    if (tstate->recursion_depth < _Py_RecursionLimitLowerWaterMark(limit)) {
+        tstate->overflowed = 0;
+    }
+}
+
+static inline void _Py_LeaveRecursiveCall_inline(void)  {
+    PyThreadState *tstate = PyThreadState_GET();
+    _Py_LeaveRecursiveCall(tstate);
+}
+
+#define Py_LeaveRecursiveCall() _Py_LeaveRecursiveCall_inline()
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/internal/pycore_context.h b/Include/internal/pycore_context.h
index 5e1ba0d..f665ad5 100644
--- a/Include/internal/pycore_context.h
+++ b/Include/internal/pycore_context.h
@@ -5,7 +5,7 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_hamt.h"
+#include "pycore_hamt.h"   /* PyHamtObject */
 
 struct _pycontextobject {
     PyObject_HEAD
diff --git a/Include/dtoa.h b/Include/internal/pycore_dtoa.h
similarity index 65%
rename from Include/dtoa.h
rename to Include/internal/pycore_dtoa.h
index 9bfb625..3faf8cf 100644
--- a/Include/dtoa.h
+++ b/Include/internal/pycore_dtoa.h
@@ -1,9 +1,15 @@
-#ifndef Py_LIMITED_API
 #ifndef PY_NO_SHORT_FLOAT_REPR
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* These functions are used by modules compiled as C extension like math:
+   they must be exported. */
+
 PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr);
 PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits,
                         int *decpt, int *sign, char **rve);
@@ -11,9 +17,7 @@
 PyAPI_FUNC(double) _Py_dg_stdnan(int sign);
 PyAPI_FUNC(double) _Py_dg_infinity(int sign);
 
-
 #ifdef __cplusplus
 }
 #endif
-#endif
-#endif
+#endif   /* !PY_NO_SHORT_FLOAT_REPR */
diff --git a/Include/internal/pycore_gc.h b/Include/internal/pycore_gc.h
new file mode 100644
index 0000000..0511eea
--- /dev/null
+++ b/Include/internal/pycore_gc.h
@@ -0,0 +1,179 @@
+#ifndef Py_INTERNAL_GC_H
+#define Py_INTERNAL_GC_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* GC information is stored BEFORE the object structure. */
+typedef struct {
+    // Pointer to next object in the list.
+    // 0 means the object is not tracked
+    uintptr_t _gc_next;
+
+    // Pointer to previous object in the list.
+    // Lowest two bits are used for flags documented later.
+    uintptr_t _gc_prev;
+} PyGC_Head;
+
+#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1)
+
+/* True if the object is currently tracked by the GC. */
+#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0)
+
+/* True if the object may be tracked by the GC in the future, or already is.
+   This can be useful to implement some optimizations. */
+#define _PyObject_GC_MAY_BE_TRACKED(obj) \
+    (PyObject_IS_GC(obj) && \
+        (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
+
+
+/* Bit flags for _gc_prev */
+/* Bit 0 is set when tp_finalize is called */
+#define _PyGC_PREV_MASK_FINALIZED  (1)
+/* Bit 1 is set when the object is in generation which is GCed currently. */
+#define _PyGC_PREV_MASK_COLLECTING (2)
+/* The (N-2) most significant bits contain the real address. */
+#define _PyGC_PREV_SHIFT           (2)
+#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
+
+// Lowest bit of _gc_next is used for flags only in GC.
+// But it is always 0 for normal code.
+#define _PyGCHead_NEXT(g)        ((PyGC_Head*)(g)->_gc_next)
+#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p))
+
+// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags.
+#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK))
+#define _PyGCHead_SET_PREV(g, p) do { \
+    assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \
+    (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \
+        | ((uintptr_t)(p)); \
+    } while (0)
+
+#define _PyGCHead_FINALIZED(g) \
+    (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0)
+#define _PyGCHead_SET_FINALIZED(g) \
+    ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED)
+
+#define _PyGC_FINALIZED(o) \
+    _PyGCHead_FINALIZED(_Py_AS_GC(o))
+#define _PyGC_SET_FINALIZED(o) \
+    _PyGCHead_SET_FINALIZED(_Py_AS_GC(o))
+
+
+/* GC runtime state */
+
+/* If we change this, we need to change the default value in the
+   signature of gc.collect. */
+#define NUM_GENERATIONS 3
+/*
+   NOTE: about untracking of mutable objects.
+
+   Certain types of container cannot participate in a reference cycle, and
+   so do not need to be tracked by the garbage collector. Untracking these
+   objects reduces the cost of garbage collections. However, determining
+   which objects may be untracked is not free, and the costs must be
+   weighed against the benefits for garbage collection.
+
+   There are two possible strategies for when to untrack a container:
+
+   i) When the container is created.
+   ii) When the container is examined by the garbage collector.
+
+   Tuples containing only immutable objects (integers, strings etc, and
+   recursively, tuples of immutable objects) do not need to be tracked.
+   The interpreter creates a large number of tuples, many of which will
+   not survive until garbage collection. It is therefore not worthwhile
+   to untrack eligible tuples at creation time.
+
+   Instead, all tuples except the empty tuple are tracked when created.
+   During garbage collection it is determined whether any surviving tuples
+   can be untracked. A tuple can be untracked if all of its contents are
+   already not tracked. Tuples are examined for untracking in all garbage
+   collection cycles. It may take more than one cycle to untrack a tuple.
+
+   Dictionaries containing only immutable objects also do not need to be
+   tracked. Dictionaries are untracked when created. If a tracked item is
+   inserted into a dictionary (either as a key or value), the dictionary
+   becomes tracked. During a full garbage collection (all generations),
+   the collector will untrack any dictionaries whose contents are not
+   tracked.
+
+   The module provides the python function is_tracked(obj), which returns
+   the CURRENT tracking status of the object. Subsequent garbage
+   collections may change the tracking status of the object.
+
+   Untracking of certain containers was introduced in issue #4688, and
+   the algorithm was refined in response to issue #14775.
+*/
+
+struct gc_generation {
+    PyGC_Head head;
+    int threshold; /* collection threshold */
+    int count; /* count of allocations or collections of younger
+                  generations */
+};
+
+/* Running stats per generation */
+struct gc_generation_stats {
+    /* total number of collections */
+    Py_ssize_t collections;
+    /* total number of collected objects */
+    Py_ssize_t collected;
+    /* total number of uncollectable objects (put into gc.garbage) */
+    Py_ssize_t uncollectable;
+};
+
+struct _gc_runtime_state {
+    /* List of objects that still need to be cleaned up, singly linked
+     * via their gc headers' gc_prev pointers.  */
+    PyObject *trash_delete_later;
+    /* Current call-stack depth of tp_dealloc calls. */
+    int trash_delete_nesting;
+
+    int enabled;
+    int debug;
+    /* linked lists of container objects */
+    struct gc_generation generations[NUM_GENERATIONS];
+    PyGC_Head *generation0;
+    /* a permanent generation which won't be collected */
+    struct gc_generation permanent_generation;
+    struct gc_generation_stats generation_stats[NUM_GENERATIONS];
+    /* true if we are currently running the collector */
+    int collecting;
+    /* list of uncollectable objects */
+    PyObject *garbage;
+    /* a list of callbacks to be invoked when collection is performed */
+    PyObject *callbacks;
+    /* This is the number of objects that survived the last full
+       collection. It approximates the number of long lived objects
+       tracked by the GC.
+
+       (by "full collection", we mean a collection of the oldest
+       generation). */
+    Py_ssize_t long_lived_total;
+    /* This is the number of objects that survived all "non-full"
+       collections, and are awaiting to undergo a full collection for
+       the first time. */
+    Py_ssize_t long_lived_pending;
+};
+
+PyAPI_FUNC(void) _PyGC_InitState(struct _gc_runtime_state *);
+
+
+// Functions to clear types free lists
+extern void _PyFrame_ClearFreeList(void);
+extern void _PyTuple_ClearFreeList(void);
+extern void _PyFloat_ClearFreeList(void);
+extern void _PyList_ClearFreeList(void);
+extern void _PyDict_ClearFreeList(void);
+extern void _PyAsyncGen_ClearFreeLists(void);
+extern void _PyContext_ClearFreeList(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_GC_H */
diff --git a/Include/internal/pycore_gil.h b/Include/internal/pycore_gil.h
index 7de3163..8ebad37 100644
--- a/Include/internal/pycore_gil.h
+++ b/Include/internal/pycore_gil.h
@@ -8,8 +8,8 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_condvar.h"
-#include "pycore_atomic.h"
+#include "pycore_atomic.h"    /* _Py_atomic_address */
+#include "pycore_condvar.h"   /* PyCOND_T */
 
 #ifndef Py_HAVE_CONDVAR
 #  error You need either a POSIX-compatible or a Windows system!
diff --git a/Include/internal/pycore_hamt.h b/Include/internal/pycore_hamt.h
index e65aef5..aaf6559 100644
--- a/Include/internal/pycore_hamt.h
+++ b/Include/internal/pycore_hamt.h
@@ -8,7 +8,7 @@
 #define _Py_HAMT_MAX_TREE_DEPTH 7
 
 
-#define PyHamt_Check(o) (Py_TYPE(o) == &_PyHamt_Type)
+#define PyHamt_Check(o) Py_IS_TYPE(o, &_PyHamt_Type)
 
 
 /* Abstract tree node. */
diff --git a/Include/internal/pycore_hashtable.h b/Include/internal/pycore_hashtable.h
new file mode 100644
index 0000000..18757ab
--- /dev/null
+++ b/Include/internal/pycore_hashtable.h
@@ -0,0 +1,148 @@
+#ifndef Py_INTERNAL_HASHTABLE_H
+#define Py_INTERNAL_HASHTABLE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* Single linked list */
+
+typedef struct _Py_slist_item_s {
+    struct _Py_slist_item_s *next;
+} _Py_slist_item_t;
+
+typedef struct {
+    _Py_slist_item_t *head;
+} _Py_slist_t;
+
+#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)ITEM)->next)
+
+#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head)
+
+
+/* _Py_hashtable: table entry */
+
+typedef struct {
+    /* used by _Py_hashtable_t.buckets to link entries */
+    _Py_slist_item_t _Py_slist_item;
+
+    Py_uhash_t key_hash;
+    void *key;
+    void *value;
+} _Py_hashtable_entry_t;
+
+
+/* _Py_hashtable: prototypes */
+
+/* Forward declaration */
+struct _Py_hashtable_t;
+typedef struct _Py_hashtable_t _Py_hashtable_t;
+
+typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key);
+typedef int (*_Py_hashtable_compare_func) (const void *key1, const void *key2);
+typedef void (*_Py_hashtable_destroy_func) (void *key);
+typedef _Py_hashtable_entry_t* (*_Py_hashtable_get_entry_func)(_Py_hashtable_t *ht,
+                                                               const void *key);
+
+typedef struct {
+    // Allocate a memory block
+    void* (*malloc) (size_t size);
+
+    // Release a memory block
+    void (*free) (void *ptr);
+} _Py_hashtable_allocator_t;
+
+
+/* _Py_hashtable: table */
+struct _Py_hashtable_t {
+    size_t nentries; // Total number of entries in the table
+    size_t nbuckets;
+    _Py_slist_t *buckets;
+
+    _Py_hashtable_get_entry_func get_entry_func;
+    _Py_hashtable_hash_func hash_func;
+    _Py_hashtable_compare_func compare_func;
+    _Py_hashtable_destroy_func key_destroy_func;
+    _Py_hashtable_destroy_func value_destroy_func;
+    _Py_hashtable_allocator_t alloc;
+};
+
+/* Hash a pointer (void*) */
+PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key);
+
+/* Comparison using memcmp() */
+PyAPI_FUNC(int) _Py_hashtable_compare_direct(
+    const void *key1,
+    const void *key2);
+
+PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new(
+    _Py_hashtable_hash_func hash_func,
+    _Py_hashtable_compare_func compare_func);
+
+PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full(
+    _Py_hashtable_hash_func hash_func,
+    _Py_hashtable_compare_func compare_func,
+    _Py_hashtable_destroy_func key_destroy_func,
+    _Py_hashtable_destroy_func value_destroy_func,
+    _Py_hashtable_allocator_t *allocator);
+
+PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht);
+
+PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht);
+
+typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht,
+                                           const void *key, const void *value,
+                                           void *user_data);
+
+/* Call func() on each entry of the hashtable.
+   Iteration stops if func() result is non-zero, in this case it's the result
+   of the call. Otherwise, the function returns 0. */
+PyAPI_FUNC(int) _Py_hashtable_foreach(
+    _Py_hashtable_t *ht,
+    _Py_hashtable_foreach_func func,
+    void *user_data);
+
+PyAPI_FUNC(size_t) _Py_hashtable_size(const _Py_hashtable_t *ht);
+
+/* Add a new entry to the hash. The key must not be present in the hash table.
+   Return 0 on success, -1 on memory error. */
+PyAPI_FUNC(int) _Py_hashtable_set(
+    _Py_hashtable_t *ht,
+    const void *key,
+    void *value);
+
+
+/* Get an entry.
+   Return NULL if the key does not exist. */
+static inline _Py_hashtable_entry_t *
+_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key)
+{
+    return ht->get_entry_func(ht, key);
+}
+
+
+/* Get value from an entry.
+   Return NULL if the entry is not found.
+
+   Use _Py_hashtable_get_entry() to distinguish entry value equal to NULL
+   and entry not found. */
+PyAPI_FUNC(void*) _Py_hashtable_get(_Py_hashtable_t *ht, const void *key);
+
+
+/* Remove a key and its associated value without calling key and value destroy
+   functions.
+
+   Return the removed value if the key was found.
+   Return NULL if the key was not found. */
+PyAPI_FUNC(void*) _Py_hashtable_steal(
+    _Py_hashtable_t *ht,
+    const void *key);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif   /* !Py_INTERNAL_HASHTABLE_H */
diff --git a/Include/internal/pycore_import.h b/Include/internal/pycore_import.h
new file mode 100644
index 0000000..b011ea4
--- /dev/null
+++ b/Include/internal/pycore_import.h
@@ -0,0 +1,22 @@
+#ifndef Py_LIMITED_API
+#ifndef Py_INTERNAL_IMPORT_H
+#define Py_INTERNAL_IMPORT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
+    PyThreadState *tstate,
+    const char *name             /* UTF-8 encoded string */
+    );
+
+#ifdef HAVE_FORK
+extern void _PyImport_ReInitLock(void);
+#endif
+extern void _PyImport_Cleanup(PyThreadState *tstate);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_IMPORT_H */
+#endif /* !Py_LIMITED_API */
diff --git a/Include/internal/pycore_initconfig.h b/Include/internal/pycore_initconfig.h
index 40831c4..457a005 100644
--- a/Include/internal/pycore_initconfig.h
+++ b/Include/internal/pycore_initconfig.h
@@ -8,7 +8,8 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_pystate.h"   /* _PyRuntimeState */
+/* Forward declaration */
+struct pyruntimestate;
 
 /* --- PyStatus ----------------------------------------------- */
 
@@ -60,7 +61,7 @@
 
 /* --- _PyArgv ---------------------------------------------------- */
 
-typedef struct {
+typedef struct _PyArgv {
     Py_ssize_t argc;
     int use_bytes_argv;
     char * const *bytes_argv;
@@ -149,8 +150,8 @@
     PyConfig *config,
     const PyConfig *config2);
 extern PyStatus _PyConfig_InitPathConfig(PyConfig *config);
-extern void _PyConfig_Write(const PyConfig *config,
-    _PyRuntimeState *runtime);
+extern PyStatus _PyConfig_Write(const PyConfig *config,
+    struct pyruntimestate *runtime);
 extern PyStatus _PyConfig_SetPyArgv(
     PyConfig *config,
     const _PyArgv *args);
diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h
new file mode 100644
index 0000000..551ad83
--- /dev/null
+++ b/Include/internal/pycore_interp.h
@@ -0,0 +1,192 @@
+#ifndef Py_INTERNAL_INTERP_H
+#define Py_INTERNAL_INTERP_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_atomic.h"    /* _Py_atomic_address */
+#include "pycore_gil.h"       /* struct _gil_runtime_state  */
+#include "pycore_gc.h"        /* struct _gc_runtime_state */
+#include "pycore_warnings.h"  /* struct _warnings_runtime_state */
+
+/* ceval state */
+
+struct _pending_calls {
+    PyThread_type_lock lock;
+    /* Request for running pending calls. */
+    _Py_atomic_int calls_to_do;
+    /* Request for looking at the `async_exc` field of the current
+       thread state.
+       Guarded by the GIL. */
+    int async_exc;
+#define NPENDINGCALLS 32
+    struct {
+        int (*func)(void *);
+        void *arg;
+    } calls[NPENDINGCALLS];
+    int first;
+    int last;
+};
+
+struct _ceval_state {
+    int recursion_limit;
+    /* Records whether tracing is on for any thread.  Counts the number
+       of threads for which tstate->c_tracefunc is non-NULL, so if the
+       value is 0, we know we don't have to check this thread's
+       c_tracefunc.  This speeds up the if statement in
+       _PyEval_EvalFrameDefault() after fast_next_opcode. */
+    int tracing_possible;
+    /* This single variable consolidates all requests to break out of
+       the fast path in the eval loop. */
+    _Py_atomic_int eval_breaker;
+    /* Request for dropping the GIL */
+    _Py_atomic_int gil_drop_request;
+    struct _pending_calls pending;
+};
+
+/* fs_codec.encoding is initialized to NULL.
+   Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */
+struct _Py_unicode_fs_codec {
+    char *encoding;   // Filesystem encoding (encoded to UTF-8)
+    int utf8;         // encoding=="utf-8"?
+    char *errors;     // Filesystem errors (encoded to UTF-8)
+    _Py_error_handler error_handler;
+};
+
+struct _Py_unicode_state {
+    struct _Py_unicode_fs_codec fs_codec;
+};
+
+
+/* interpreter state */
+
+#define _PY_NSMALLPOSINTS           257
+#define _PY_NSMALLNEGINTS           5
+
+// The PyInterpreterState typedef is in Include/pystate.h.
+struct _is {
+
+    struct _is *next;
+    struct _ts *tstate_head;
+
+    /* Reference to the _PyRuntime global variable. This field exists
+       to not have to pass runtime in addition to tstate to a function.
+       Get runtime from tstate: tstate->interp->runtime. */
+    struct pyruntimestate *runtime;
+
+    int64_t id;
+    int64_t id_refcount;
+    int requires_idref;
+    PyThread_type_lock id_mutex;
+
+    int finalizing;
+
+    struct _ceval_state ceval;
+    struct _gc_runtime_state gc;
+
+    PyObject *modules;
+    PyObject *modules_by_index;
+    PyObject *sysdict;
+    PyObject *builtins;
+    PyObject *importlib;
+
+    /* Used in Modules/_threadmodule.c. */
+    long num_threads;
+    /* Support for runtime thread stack size tuning.
+       A value of 0 means using the platform's default stack size
+       or the size specified by the THREAD_STACK_SIZE macro. */
+    /* Used in Python/thread.c. */
+    size_t pythread_stacksize;
+
+    PyObject *codec_search_path;
+    PyObject *codec_search_cache;
+    PyObject *codec_error_registry;
+    int codecs_initialized;
+
+    struct _Py_unicode_state unicode;
+
+    PyConfig config;
+#ifdef HAVE_DLOPEN
+    int dlopenflags;
+#endif
+
+    PyObject *dict;  /* Stores per-interpreter state */
+
+    PyObject *builtins_copy;
+    PyObject *import_func;
+    /* Initialized to PyEval_EvalFrameDefault(). */
+    _PyFrameEvalFunction eval_frame;
+
+    Py_ssize_t co_extra_user_count;
+    freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS];
+
+#ifdef HAVE_FORK
+    PyObject *before_forkers;
+    PyObject *after_forkers_parent;
+    PyObject *after_forkers_child;
+#endif
+    /* AtExit module */
+    void (*pyexitfunc)(PyObject *);
+    PyObject *pyexitmodule;
+
+    uint64_t tstate_next_unique_id;
+
+    struct _warnings_runtime_state warnings;
+
+    PyObject *audit_hooks;
+
+    struct {
+        struct {
+            int level;
+            int atbol;
+        } listnode;
+    } parser;
+
+#if _PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS > 0
+    /* Small integers are preallocated in this array so that they
+       can be shared.
+       The integers that are preallocated are those in the range
+       -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (not inclusive).
+    */
+    PyLongObject* small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS];
+#endif
+};
+
+/* Used by _PyImport_Cleanup() */
+extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp);
+
+extern PyStatus _PyInterpreterState_SetConfig(
+    PyInterpreterState *interp,
+    const PyConfig *config);
+
+
+
+/* cross-interpreter data registry */
+
+/* For now we use a global registry of shareable classes.  An
+   alternative would be to add a tp_* slot for a class's
+   crossinterpdatafunc. It would be simpler and more efficient. */
+
+struct _xidregitem;
+
+struct _xidregitem {
+    PyTypeObject *cls;
+    crossinterpdatafunc getdata;
+    struct _xidregitem *next;
+};
+
+PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(int64_t);
+
+PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *);
+PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *);
+PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_INTERP_H */
+
diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h
index 7418c69..32e86d0 100644
--- a/Include/internal/pycore_object.h
+++ b/Include/internal/pycore_object.h
@@ -8,7 +8,9 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_pystate.h"   /* _PyRuntime */
+#include "pycore_gc.h"         // _PyObject_GC_IS_TRACKED()
+#include "pycore_interp.h"     // PyInterpreterState.gc
+#include "pycore_pystate.h"    // _PyThreadState_GET()
 
 PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type);
 PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content);
@@ -18,7 +20,7 @@
  * NB: While the object is tracked by the collector, it must be safe to call the
  * ob_traverse method.
  *
- * Internal note: _PyRuntime.gc.generation0->_gc_prev doesn't have any bit flags
+ * Internal note: interp->gc.generation0->_gc_prev doesn't have any bit flags
  * because it's not object header.  So we don't use _PyGCHead_PREV() and
  * _PyGCHead_SET_PREV() for it to avoid unnecessary bitwise operations.
  *
@@ -37,11 +39,13 @@
                           "object is in generation which is garbage collected",
                           filename, lineno, "_PyObject_GC_TRACK");
 
-    PyGC_Head *last = (PyGC_Head*)(_PyRuntime.gc.generation0->_gc_prev);
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyGC_Head *generation0 = tstate->interp->gc.generation0;
+    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
     _PyGCHead_SET_NEXT(last, gc);
     _PyGCHead_SET_PREV(gc, last);
-    _PyGCHead_SET_NEXT(gc, _PyRuntime.gc.generation0);
-    _PyRuntime.gc.generation0->_gc_prev = (uintptr_t)gc;
+    _PyGCHead_SET_NEXT(gc, generation0);
+    generation0->_gc_prev = (uintptr_t)gc;
 }
 
 #define _PyObject_GC_TRACK(op) \
@@ -75,6 +79,41 @@
 #define _PyObject_GC_UNTRACK(op) \
     _PyObject_GC_UNTRACK_impl(__FILE__, __LINE__, _PyObject_CAST(op))
 
+#ifdef Py_REF_DEBUG
+extern void _PyDebug_PrintTotalRefs(void);
+#endif
+
+#ifdef Py_TRACE_REFS
+extern void _Py_AddToAllObjects(PyObject *op, int force);
+extern void _Py_PrintReferences(FILE *);
+extern void _Py_PrintReferenceAddresses(FILE *);
+#endif
+
+static inline PyObject **
+_PyObject_GET_WEAKREFS_LISTPTR(PyObject *op)
+{
+    Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset;
+    return (PyObject **)((char *)op + offset);
+}
+
+// Fast inlined version of PyType_HasFeature()
+static inline int
+_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
+    return ((type->tp_flags & feature) != 0);
+}
+
+// Fast inlined version of PyObject_IS_GC()
+static inline int
+_PyObject_IS_GC(PyObject *obj)
+{
+    return (PyType_IS_GC(Py_TYPE(obj))
+            && (Py_TYPE(obj)->tp_is_gc == NULL
+                || Py_TYPE(obj)->tp_is_gc(obj)));
+}
+
+// Fast inlined version of PyType_IS_GC()
+#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/internal/pycore_pathconfig.h b/Include/internal/pycore_pathconfig.h
index ce75cce..42d61b1 100644
--- a/Include/internal/pycore_pathconfig.h
+++ b/Include/internal/pycore_pathconfig.h
@@ -47,8 +47,6 @@
 #endif
 
 extern void _PyPathConfig_ClearGlobal(void);
-extern PyStatus _PyPathConfig_SetGlobal(
-    const struct _PyPathConfig *pathconfig);
 
 extern PyStatus _PyPathConfig_Calculate(
     _PyPathConfig *pathconfig,
@@ -56,11 +54,10 @@
 extern int _PyPathConfig_ComputeSysPath0(
     const PyWideStringList *argv,
     PyObject **path0);
-extern int _Py_FindEnvConfigValue(
+extern PyStatus _Py_FindEnvConfigValue(
     FILE *env_file,
     const wchar_t *key,
-    wchar_t *value,
-    size_t value_size);
+    wchar_t **value_p);
 
 #ifdef MS_WINDOWS
 extern wchar_t* _Py_GetDLLPath(void);
diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h
index 23327ef..2cf1160 100644
--- a/Include/internal/pycore_pyerrors.h
+++ b/Include/internal/pycore_pyerrors.h
@@ -10,7 +10,22 @@
 
 static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
 {
-    return tstate == NULL ? NULL : tstate->curexc_type;
+    assert(tstate != NULL);
+    return tstate->curexc_type;
+}
+
+static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state)
+{
+    PyObject *t, *v, *tb;
+    t = exc_state->exc_type;
+    v = exc_state->exc_value;
+    tb = exc_state->exc_traceback;
+    exc_state->exc_type = NULL;
+    exc_state->exc_value = NULL;
+    exc_state->exc_traceback = NULL;
+    Py_XDECREF(t);
+    Py_XDECREF(v);
+    Py_XDECREF(tb);
 }
 
 
@@ -35,10 +50,15 @@
     PyObject *type,
     PyObject *value);
 
+PyAPI_FUNC(void) _PyErr_ChainStackItem(
+    _PyErr_StackItem *exc_info);
+
 PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
 
 PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception);
 
+PyAPI_FUNC(PyObject *) _PyErr_NoMemory(PyThreadState *tstate);
+
 PyAPI_FUNC(void) _PyErr_SetString(
     PyThreadState *tstate,
     PyObject *exception,
@@ -56,6 +76,14 @@
     PyObject **val,
     PyObject **tb);
 
+PyAPI_FUNC(PyObject *) _PyErr_FormatFromCauseTstate(
+    PyThreadState *tstate,
+    PyObject *exception,
+    const char *format,
+    ...);
+
+PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h
index d4f0ae2..50ab645 100644
--- a/Include/internal/pycore_pylifecycle.h
+++ b/Include/internal/pycore_pylifecycle.h
@@ -8,8 +8,9 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_initconfig.h"   /* _PyArgv */
-#include "pycore_pystate.h"      /* _PyRuntimeState */
+/* Forward declarations */
+struct _PyArgv;
+struct pyruntimestate;
 
 /* True if the main interpreter thread exited due to an unhandled
  * KeyboardInterrupt exception, suggesting the user pressed ^C. */
@@ -32,74 +33,69 @@
 
 extern PyStatus _PyUnicode_Init(void);
 extern int _PyStructSequence_Init(void);
-extern int _PyLong_Init(void);
+extern int _PyLong_Init(PyThreadState *tstate);
 extern PyStatus _PyFaulthandler_Init(int enable);
 extern int _PyTraceMalloc_Init(int enable);
-extern PyObject * _PyBuiltin_Init(void);
+extern PyObject * _PyBuiltin_Init(PyThreadState *tstate);
 extern PyStatus _PySys_Create(
-    _PyRuntimeState *runtime,
-    PyInterpreterState *interp,
+    PyThreadState *tstate,
     PyObject **sysmod_p);
-extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict);
 extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options);
 extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config);
-extern int _PySys_InitMain(
-    _PyRuntimeState *runtime,
-    PyInterpreterState *interp);
-extern PyStatus _PyImport_Init(PyInterpreterState *interp);
+extern int _PySys_InitMain(PyThreadState *tstate);
 extern PyStatus _PyExc_Init(void);
 extern PyStatus _PyErr_Init(void);
 extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod);
-extern PyStatus _PyImportHooks_Init(void);
+extern PyStatus _PyImportHooks_Init(PyThreadState *tstate);
 extern int _PyFloat_Init(void);
 extern PyStatus _Py_HashRandomization_Init(const PyConfig *);
 
 extern PyStatus _PyTypes_Init(void);
-extern PyStatus _PyImportZip_Init(PyInterpreterState *interp);
+extern PyStatus _PyTypes_InitSlotDefs(void);
+extern PyStatus _PyImportZip_Init(PyThreadState *tstate);
+extern PyStatus _PyGC_Init(PyThreadState *tstate);
 
 
 /* Various internal finalizers */
 
-extern void PyMethod_Fini(void);
-extern void PyFrame_Fini(void);
-extern void PyCFunction_Fini(void);
-extern void PyDict_Fini(void);
-extern void PyTuple_Fini(void);
-extern void PyList_Fini(void);
-extern void PySet_Fini(void);
-extern void PyBytes_Fini(void);
-extern void PyFloat_Fini(void);
+extern void _PyFrame_Fini(void);
+extern void _PyDict_Fini(void);
+extern void _PyTuple_Fini(void);
+extern void _PyList_Fini(void);
+extern void _PySet_Fini(void);
+extern void _PyBytes_Fini(void);
+extern void _PyFloat_Fini(void);
+extern void _PySlice_Fini(void);
+extern void _PyAsyncGen_Fini(void);
+
+extern int _PySignal_Init(int install_signal_handlers);
 extern void PyOS_FiniInterrupts(void);
-extern void PySlice_Fini(void);
-extern void PyAsyncGen_Fini(void);
 
 extern void _PyExc_Fini(void);
 extern void _PyImport_Fini(void);
 extern void _PyImport_Fini2(void);
-extern void _PyGC_Fini(_PyRuntimeState *runtime);
+extern void _PyGC_Fini(PyThreadState *tstate);
 extern void _PyType_Fini(void);
 extern void _Py_HashRandomization_Fini(void);
-extern void _PyUnicode_Fini(void);
-extern void PyLong_Fini(void);
+extern void _PyUnicode_Fini(PyThreadState *tstate);
+extern void _PyLong_Fini(PyThreadState *tstate);
 extern void _PyFaulthandler_Fini(void);
 extern void _PyHash_Fini(void);
 extern void _PyTraceMalloc_Fini(void);
 extern void _PyWarnings_Fini(PyInterpreterState *interp);
+extern void _PyAST_Fini(void);
 
-extern void _PyGILState_Init(
-    _PyRuntimeState *runtime,
-    PyInterpreterState *interp,
-    PyThreadState *tstate);
-extern void _PyGILState_Fini(_PyRuntimeState *runtime);
+extern PyStatus _PyGILState_Init(PyThreadState *tstate);
+extern void _PyGILState_Fini(PyThreadState *tstate);
 
-PyAPI_FUNC(void) _PyGC_DumpShutdownStats(_PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyGC_DumpShutdownStats(PyThreadState *tstate);
 
 PyAPI_FUNC(PyStatus) _Py_PreInitializeFromPyArgv(
     const PyPreConfig *src_config,
-    const _PyArgv *args);
+    const struct _PyArgv *args);
 PyAPI_FUNC(PyStatus) _Py_PreInitializeFromConfig(
     const PyConfig *config,
-    const _PyArgv *args);
+    const struct _PyArgv *args);
 
 
 PyAPI_FUNC(int) _Py_HandleSystemExit(int *exitcode_p);
@@ -110,6 +106,8 @@
 PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception,
                                 PyObject *value, PyObject *tb);
 
+PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/internal/pycore_pymem.h b/Include/internal/pycore_pymem.h
index 47d092f..3d925e2 100644
--- a/Include/internal/pycore_pymem.h
+++ b/Include/internal/pycore_pymem.h
@@ -8,144 +8,7 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "objimpl.h"
-#include "pymem.h"
-
-
-/* GC runtime state */
-
-/* If we change this, we need to change the default value in the
-   signature of gc.collect. */
-#define NUM_GENERATIONS 3
-
-/*
-   NOTE: about the counting of long-lived objects.
-
-   To limit the cost of garbage collection, there are two strategies;
-     - make each collection faster, e.g. by scanning fewer objects
-     - do less collections
-   This heuristic is about the latter strategy.
-
-   In addition to the various configurable thresholds, we only trigger a
-   full collection if the ratio
-    long_lived_pending / long_lived_total
-   is above a given value (hardwired to 25%).
-
-   The reason is that, while "non-full" collections (i.e., collections of
-   the young and middle generations) will always examine roughly the same
-   number of objects -- determined by the aforementioned thresholds --,
-   the cost of a full collection is proportional to the total number of
-   long-lived objects, which is virtually unbounded.
-
-   Indeed, it has been remarked that doing a full collection every
-   <constant number> of object creations entails a dramatic performance
-   degradation in workloads which consist in creating and storing lots of
-   long-lived objects (e.g. building a large list of GC-tracked objects would
-   show quadratic performance, instead of linear as expected: see issue #4074).
-
-   Using the above ratio, instead, yields amortized linear performance in
-   the total number of objects (the effect of which can be summarized
-   thusly: "each full garbage collection is more and more costly as the
-   number of objects grows, but we do fewer and fewer of them").
-
-   This heuristic was suggested by Martin von Löwis on python-dev in
-   June 2008. His original analysis and proposal can be found at:
-    http://mail.python.org/pipermail/python-dev/2008-June/080579.html
-*/
-
-/*
-   NOTE: about untracking of mutable objects.
-
-   Certain types of container cannot participate in a reference cycle, and
-   so do not need to be tracked by the garbage collector. Untracking these
-   objects reduces the cost of garbage collections. However, determining
-   which objects may be untracked is not free, and the costs must be
-   weighed against the benefits for garbage collection.
-
-   There are two possible strategies for when to untrack a container:
-
-   i) When the container is created.
-   ii) When the container is examined by the garbage collector.
-
-   Tuples containing only immutable objects (integers, strings etc, and
-   recursively, tuples of immutable objects) do not need to be tracked.
-   The interpreter creates a large number of tuples, many of which will
-   not survive until garbage collection. It is therefore not worthwhile
-   to untrack eligible tuples at creation time.
-
-   Instead, all tuples except the empty tuple are tracked when created.
-   During garbage collection it is determined whether any surviving tuples
-   can be untracked. A tuple can be untracked if all of its contents are
-   already not tracked. Tuples are examined for untracking in all garbage
-   collection cycles. It may take more than one cycle to untrack a tuple.
-
-   Dictionaries containing only immutable objects also do not need to be
-   tracked. Dictionaries are untracked when created. If a tracked item is
-   inserted into a dictionary (either as a key or value), the dictionary
-   becomes tracked. During a full garbage collection (all generations),
-   the collector will untrack any dictionaries whose contents are not
-   tracked.
-
-   The module provides the python function is_tracked(obj), which returns
-   the CURRENT tracking status of the object. Subsequent garbage
-   collections may change the tracking status of the object.
-
-   Untracking of certain containers was introduced in issue #4688, and
-   the algorithm was refined in response to issue #14775.
-*/
-
-struct gc_generation {
-    PyGC_Head head;
-    int threshold; /* collection threshold */
-    int count; /* count of allocations or collections of younger
-                  generations */
-};
-
-/* Running stats per generation */
-struct gc_generation_stats {
-    /* total number of collections */
-    Py_ssize_t collections;
-    /* total number of collected objects */
-    Py_ssize_t collected;
-    /* total number of uncollectable objects (put into gc.garbage) */
-    Py_ssize_t uncollectable;
-};
-
-struct _gc_runtime_state {
-    /* List of objects that still need to be cleaned up, singly linked
-     * via their gc headers' gc_prev pointers.  */
-    PyObject *trash_delete_later;
-    /* Current call-stack depth of tp_dealloc calls. */
-    int trash_delete_nesting;
-
-    int enabled;
-    int debug;
-    /* linked lists of container objects */
-    struct gc_generation generations[NUM_GENERATIONS];
-    PyGC_Head *generation0;
-    /* a permanent generation which won't be collected */
-    struct gc_generation permanent_generation;
-    struct gc_generation_stats generation_stats[NUM_GENERATIONS];
-    /* true if we are currently running the collector */
-    int collecting;
-    /* list of uncollectable objects */
-    PyObject *garbage;
-    /* a list of callbacks to be invoked when collection is performed */
-    PyObject *callbacks;
-    /* This is the number of objects that survived the last full
-       collection. It approximates the number of long lived objects
-       tracked by the GC.
-
-       (by "full collection", we mean a collection of the oldest
-       generation). */
-    Py_ssize_t long_lived_total;
-    /* This is the number of objects that survived all "non-full"
-       collections, and are awaiting to undergo a full collection for
-       the first time. */
-    Py_ssize_t long_lived_pending;
-};
-
-PyAPI_FUNC(void) _PyGC_Initialize(struct _gc_runtime_state *);
+#include "pymem.h"      // PyMemAllocatorName
 
 
 /* Set the memory allocator of the specified domain to the default.
@@ -206,6 +69,35 @@
    PYMEM_ALLOCATOR_NOT_SET does nothing. */
 PyAPI_FUNC(int) _PyMem_SetupAllocators(PyMemAllocatorName allocator);
 
+/* bpo-35053: Expose _Py_tracemalloc_config for _Py_NewReference()
+   which access directly _Py_tracemalloc_config.tracing for best
+   performances. */
+struct _PyTraceMalloc_Config {
+    /* Module initialized?
+       Variable protected by the GIL */
+    enum {
+        TRACEMALLOC_NOT_INITIALIZED,
+        TRACEMALLOC_INITIALIZED,
+        TRACEMALLOC_FINALIZED
+    } initialized;
+
+    /* Is tracemalloc tracing memory allocations?
+       Variable protected by the GIL */
+    int tracing;
+
+    /* limit of the number of frames in a traceback, 1 by default.
+       Variable protected by the GIL. */
+    int max_nframe;
+};
+
+#define _PyTraceMalloc_Config_INIT \
+    {.initialized = TRACEMALLOC_NOT_INITIALIZED, \
+     .tracing = 0, \
+     .max_nframe = 1}
+
+PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config;
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h
index 96d5e31..835d6e0 100644
--- a/Include/internal/pycore_pystate.h
+++ b/Include/internal/pycore_pystate.h
@@ -8,270 +8,52 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "cpython/initconfig.h"
-#include "fileobject.h"
-#include "pystate.h"
-#include "pythread.h"
-#include "sysmodule.h"
-
-#include "pycore_gil.h"   /* _gil_runtime_state  */
-#include "pycore_pathconfig.h"
-#include "pycore_pymem.h"
-#include "pycore_warnings.h"
+#include "pycore_runtime.h"   /* PyRuntimeState */
 
 
-/* ceval state */
-
-struct _pending_calls {
-    int finishing;
-    PyThread_type_lock lock;
-    /* Request for running pending calls. */
-    _Py_atomic_int calls_to_do;
-    /* Request for looking at the `async_exc` field of the current
-       thread state.
-       Guarded by the GIL. */
-    int async_exc;
-#define NPENDINGCALLS 32
-    struct {
-        int (*func)(void *);
-        void *arg;
-    } calls[NPENDINGCALLS];
-    int first;
-    int last;
-};
-
-struct _ceval_runtime_state {
-    int recursion_limit;
-    /* Records whether tracing is on for any thread.  Counts the number
-       of threads for which tstate->c_tracefunc is non-NULL, so if the
-       value is 0, we know we don't have to check this thread's
-       c_tracefunc.  This speeds up the if statement in
-       PyEval_EvalFrameEx() after fast_next_opcode. */
-    int tracing_possible;
-    /* This single variable consolidates all requests to break out of
-       the fast path in the eval loop. */
-    _Py_atomic_int eval_breaker;
-    /* Request for dropping the GIL */
-    _Py_atomic_int gil_drop_request;
-    struct _pending_calls pending;
-    /* Request for checking signals. */
-    _Py_atomic_int signals_pending;
-    struct _gil_runtime_state gil;
-};
-
-/* interpreter state */
-
-typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
-
-// The PyInterpreterState typedef is in Include/pystate.h.
-struct _is {
-
-    struct _is *next;
-    struct _ts *tstate_head;
-
-    int64_t id;
-    int64_t id_refcount;
-    int requires_idref;
-    PyThread_type_lock id_mutex;
-
-    int finalizing;
-
-    PyObject *modules;
-    PyObject *modules_by_index;
-    PyObject *sysdict;
-    PyObject *builtins;
-    PyObject *importlib;
-
-    /* Used in Python/sysmodule.c. */
-    int check_interval;
-
-    /* Used in Modules/_threadmodule.c. */
-    long num_threads;
-    /* Support for runtime thread stack size tuning.
-       A value of 0 means using the platform's default stack size
-       or the size specified by the THREAD_STACK_SIZE macro. */
-    /* Used in Python/thread.c. */
-    size_t pythread_stacksize;
-
-    PyObject *codec_search_path;
-    PyObject *codec_search_cache;
-    PyObject *codec_error_registry;
-    int codecs_initialized;
-
-    /* fs_codec.encoding is initialized to NULL.
-       Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */
-    struct {
-        char *encoding;   /* Filesystem encoding (encoded to UTF-8) */
-        char *errors;     /* Filesystem errors (encoded to UTF-8) */
-        _Py_error_handler error_handler;
-    } fs_codec;
-
-    PyConfig config;
-#ifdef HAVE_DLOPEN
-    int dlopenflags;
-#endif
-
-    PyObject *dict;  /* Stores per-interpreter state */
-
-    PyObject *builtins_copy;
-    PyObject *import_func;
-    /* Initialized to PyEval_EvalFrameDefault(). */
-    _PyFrameEvalFunction eval_frame;
-
-    Py_ssize_t co_extra_user_count;
-    freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS];
-
-#ifdef HAVE_FORK
-    PyObject *before_forkers;
-    PyObject *after_forkers_parent;
-    PyObject *after_forkers_child;
-#endif
-    /* AtExit module */
-    void (*pyexitfunc)(PyObject *);
-    PyObject *pyexitmodule;
-
-    uint64_t tstate_next_unique_id;
-
-    struct _warnings_runtime_state warnings;
-
-    PyObject *audit_hooks;
-};
-
-PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T);
-
-PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *);
-PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *);
-PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *);
+/* Check if the current thread is the main thread.
+   Use _Py_IsMainInterpreter() to check if it's the main interpreter. */
+static inline int
+_Py_IsMainThread(void)
+{
+    unsigned long thread = PyThread_get_thread_ident();
+    return (thread == _PyRuntime.main_thread);
+}
 
 
-/* cross-interpreter data registry */
-
-/* For now we use a global registry of shareable classes.  An
-   alternative would be to add a tp_* slot for a class's
-   crossinterpdatafunc. It would be simpler and more efficient. */
-
-struct _xidregitem;
-
-struct _xidregitem {
-    PyTypeObject *cls;
-    crossinterpdatafunc getdata;
-    struct _xidregitem *next;
-};
-
-/* runtime audit hook state */
-
-typedef struct _Py_AuditHookEntry {
-    struct _Py_AuditHookEntry *next;
-    Py_AuditHookFunction hookCFunction;
-    void *userData;
-} _Py_AuditHookEntry;
-
-/* GIL state */
-
-struct _gilstate_runtime_state {
-    int check_enabled;
-    /* Assuming the current thread holds the GIL, this is the
-       PyThreadState for the current thread. */
-    _Py_atomic_address tstate_current;
-    PyThreadFrameGetter getframe;
-    /* The single PyInterpreterState used by this process'
-       GILState implementation
-    */
-    /* TODO: Given interp_main, it may be possible to kill this ref */
-    PyInterpreterState *autoInterpreterState;
-    Py_tss_t autoTSSkey;
-};
-
-/* hook for PyEval_GetFrame(), requested for Psyco */
-#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe
-
-/* Issue #26558: Flag to disable PyGILState_Check().
-   If set to non-zero, PyGILState_Check() always return 1. */
-#define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled
+static inline int
+_Py_IsMainInterpreter(PyThreadState* tstate)
+{
+    /* Use directly _PyRuntime rather than tstate->interp->runtime, since
+       this function is used in performance critical code path (ceval) */
+    return (tstate->interp == _PyRuntime.interpreters.main);
+}
 
 
-/* Full Python runtime state */
+/* Only handle signals on the main thread of the main interpreter. */
+static inline int
+_Py_ThreadCanHandleSignals(PyInterpreterState *interp)
+{
+    return (_Py_IsMainThread() && interp == _PyRuntime.interpreters.main);
+}
 
-typedef struct pyruntimestate {
-    /* Is running Py_PreInitialize()? */
-    int preinitializing;
 
-    /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */
-    int preinitialized;
-
-    /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */
-    int core_initialized;
-
-    /* Is Python fully initialized? Set to 1 by Py_Initialize() */
-    int initialized;
-
-    /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize()
-       is called again. */
-    PyThreadState *finalizing;
-
-    struct pyinterpreters {
-        PyThread_type_lock mutex;
-        PyInterpreterState *head;
-        PyInterpreterState *main;
-        /* _next_interp_id is an auto-numbered sequence of small
-           integers.  It gets initialized in _PyInterpreterState_Init(),
-           which is called in Py_Initialize(), and used in
-           PyInterpreterState_New().  A negative interpreter ID
-           indicates an error occurred.  The main interpreter will
-           always have an ID of 0.  Overflow results in a RuntimeError.
-           If that becomes a problem later then we can adjust, e.g. by
-           using a Python int. */
-        int64_t next_id;
-    } interpreters;
-    // XXX Remove this field once we have a tp_* slot.
-    struct _xidregistry {
-        PyThread_type_lock mutex;
-        struct _xidregitem *head;
-    } xidregistry;
-
-    unsigned long main_thread;
-
-#define NEXITFUNCS 32
-    void (*exitfuncs[NEXITFUNCS])(void);
-    int nexitfuncs;
-
-    struct _gc_runtime_state gc;
-    struct _ceval_runtime_state ceval;
-    struct _gilstate_runtime_state gilstate;
-
-    PyPreConfig preconfig;
-
-    Py_OpenCodeHookFunction open_code_hook;
-    void *open_code_userdata;
-    _Py_AuditHookEntry *audit_hook_head;
-
-    // XXX Consolidate globals found via the check-c-globals script.
-} _PyRuntimeState;
-
-#define _PyRuntimeState_INIT \
-    {.preinitialized = 0, .core_initialized = 0, .initialized = 0}
-/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */
-
-PyAPI_DATA(_PyRuntimeState) _PyRuntime;
-PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime);
-PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime);
-PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime);
-
-/* Initialize _PyRuntimeState.
-   Return NULL on success, or return an error message on failure. */
-PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void);
-
-PyAPI_FUNC(void) _PyRuntime_Finalize(void);
-
-#define _Py_CURRENTLY_FINALIZING(runtime, tstate) \
-    (runtime->finalizing == tstate)
+/* Only execute pending calls on the main thread. */
+static inline int
+_Py_ThreadCanHandlePendingCalls(void)
+{
+    return _Py_IsMainThread();
+}
 
 
 /* Variable and macro for in-line access to current thread
    and interpreter state */
 
-#define _PyRuntimeState_GetThreadState(runtime) \
-    ((PyThreadState*)_Py_atomic_load_relaxed(&(runtime)->gilstate.tstate_current))
+static inline PyThreadState*
+_PyRuntimeState_GetThreadState(_PyRuntimeState *runtime)
+{
+    return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current);
+}
 
 /* Get the current Python thread state.
 
@@ -282,12 +64,31 @@
    The caller must hold the GIL.
 
    See also PyThreadState_Get() and PyThreadState_GET(). */
-#define _PyThreadState_GET() _PyRuntimeState_GetThreadState(&_PyRuntime)
+static inline PyThreadState*
+_PyThreadState_GET(void)
+{
+    return _PyRuntimeState_GetThreadState(&_PyRuntime);
+}
 
 /* Redefine PyThreadState_GET() as an alias to _PyThreadState_GET() */
 #undef PyThreadState_GET
 #define PyThreadState_GET() _PyThreadState_GET()
 
+PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalError_TstateNULL(const char *func);
+
+static inline void
+_Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate)
+{
+    if (tstate == NULL) {
+        _Py_FatalError_TstateNULL(func);
+    }
+}
+
+// Call Py_FatalError() if tstate is NULL
+#define _Py_EnsureTstateNotNULL(tstate) \
+    _Py_EnsureFuncTstateNotNULL(__func__, tstate)
+
+
 /* Get the current interpreter state.
 
    The macro is unsafe: it does not check for error and it can return NULL.
@@ -296,13 +97,18 @@
 
    See also _PyInterpreterState_Get()
    and _PyGILState_GetInterpreterStateUnsafe(). */
-#define _PyInterpreterState_GET_UNSAFE() (_PyThreadState_GET()->interp)
+static inline PyInterpreterState* _PyInterpreterState_GET(void) {
+    PyThreadState *tstate = _PyThreadState_GET();
+#ifdef Py_DEBUG
+    _Py_EnsureTstateNotNULL(tstate);
+#endif
+    return tstate->interp;
+}
 
 
 /* Other */
 
 PyAPI_FUNC(void) _PyThreadState_Init(
-    _PyRuntimeState *runtime,
     PyThreadState *tstate);
 PyAPI_FUNC(void) _PyThreadState_DeleteExcept(
     _PyRuntimeState *runtime,
@@ -318,6 +124,12 @@
 PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime);
 
 
+PyAPI_FUNC(int) _PyState_AddModule(
+    PyThreadState *tstate,
+    PyObject* module,
+    struct PyModuleDef* def);
+
+
 PyAPI_FUNC(int) _PyOS_InterruptOccurred(PyThreadState *tstate);
 
 #ifdef __cplusplus
diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h
new file mode 100644
index 0000000..34eb492
--- /dev/null
+++ b/Include/internal/pycore_runtime.h
@@ -0,0 +1,144 @@
+#ifndef Py_INTERNAL_RUNTIME_H
+#define Py_INTERNAL_RUNTIME_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_atomic.h"    /* _Py_atomic_address */
+#include "pycore_gil.h"       // struct _gil_runtime_state
+
+/* ceval state */
+
+struct _ceval_runtime_state {
+    /* Request for checking signals. It is shared by all interpreters (see
+       bpo-40513). Any thread of any interpreter can receive a signal, but only
+       the main thread of the main interpreter can handle signals: see
+       _Py_ThreadCanHandleSignals(). */
+    _Py_atomic_int signals_pending;
+    struct _gil_runtime_state gil;
+};
+
+/* GIL state */
+
+struct _gilstate_runtime_state {
+    /* bpo-26558: Flag to disable PyGILState_Check().
+       If set to non-zero, PyGILState_Check() always return 1. */
+    int check_enabled;
+    /* Assuming the current thread holds the GIL, this is the
+       PyThreadState for the current thread. */
+    _Py_atomic_address tstate_current;
+    /* The single PyInterpreterState used by this process'
+       GILState implementation
+    */
+    /* TODO: Given interp_main, it may be possible to kill this ref */
+    PyInterpreterState *autoInterpreterState;
+    Py_tss_t autoTSSkey;
+};
+
+/* Runtime audit hook state */
+
+typedef struct _Py_AuditHookEntry {
+    struct _Py_AuditHookEntry *next;
+    Py_AuditHookFunction hookCFunction;
+    void *userData;
+} _Py_AuditHookEntry;
+
+/* Full Python runtime state */
+
+typedef struct pyruntimestate {
+    /* Is running Py_PreInitialize()? */
+    int preinitializing;
+
+    /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */
+    int preinitialized;
+
+    /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */
+    int core_initialized;
+
+    /* Is Python fully initialized? Set to 1 by Py_Initialize() */
+    int initialized;
+
+    /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize()
+       is called again.
+
+       Use _PyRuntimeState_GetFinalizing() and _PyRuntimeState_SetFinalizing()
+       to access it, don't access it directly. */
+    _Py_atomic_address _finalizing;
+
+    struct pyinterpreters {
+        PyThread_type_lock mutex;
+        PyInterpreterState *head;
+        PyInterpreterState *main;
+        /* _next_interp_id is an auto-numbered sequence of small
+           integers.  It gets initialized in _PyInterpreterState_Init(),
+           which is called in Py_Initialize(), and used in
+           PyInterpreterState_New().  A negative interpreter ID
+           indicates an error occurred.  The main interpreter will
+           always have an ID of 0.  Overflow results in a RuntimeError.
+           If that becomes a problem later then we can adjust, e.g. by
+           using a Python int. */
+        int64_t next_id;
+    } interpreters;
+    // XXX Remove this field once we have a tp_* slot.
+    struct _xidregistry {
+        PyThread_type_lock mutex;
+        struct _xidregitem *head;
+    } xidregistry;
+
+    unsigned long main_thread;
+
+#define NEXITFUNCS 32
+    void (*exitfuncs[NEXITFUNCS])(void);
+    int nexitfuncs;
+
+    struct _ceval_runtime_state ceval;
+    struct _gilstate_runtime_state gilstate;
+
+    PyPreConfig preconfig;
+
+    Py_OpenCodeHookFunction open_code_hook;
+    void *open_code_userdata;
+    _Py_AuditHookEntry *audit_hook_head;
+
+    // XXX Consolidate globals found via the check-c-globals script.
+} _PyRuntimeState;
+
+#define _PyRuntimeState_INIT \
+    {.preinitialized = 0, .core_initialized = 0, .initialized = 0}
+/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */
+
+
+PyAPI_DATA(_PyRuntimeState) _PyRuntime;
+
+PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime);
+
+#ifdef HAVE_FORK
+PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime);
+#endif
+
+/* Initialize _PyRuntimeState.
+   Return NULL on success, or return an error message on failure. */
+PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void);
+
+PyAPI_FUNC(void) _PyRuntime_Finalize(void);
+
+
+static inline PyThreadState*
+_PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) {
+    return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->_finalizing);
+}
+
+static inline void
+_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) {
+    _Py_atomic_store_relaxed(&runtime->_finalizing, (uintptr_t)tstate);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_RUNTIME_H */
diff --git a/Include/internal/pycore_sysmodule.h b/Include/internal/pycore_sysmodule.h
new file mode 100644
index 0000000..738a774
--- /dev/null
+++ b/Include/internal/pycore_sysmodule.h
@@ -0,0 +1,24 @@
+#ifndef Py_INTERNAL_SYSMODULE_H
+#define Py_INTERNAL_SYSMODULE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+#  error "this header requires Py_BUILD_CORE define"
+#endif
+
+PyAPI_FUNC(int) _PySys_Audit(
+    PyThreadState *tstate,
+    const char *event,
+    const char *argFormat,
+    ...);
+
+/* We want minimal exposure of this function, so use extern rather than
+   PyAPI_FUNC() to not export the symbol. */
+extern void _PySys_ClearAuditHooks(PyThreadState *tstate);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_SYSMODULE_H */
diff --git a/Include/internal/pycore_traceback.h b/Include/internal/pycore_traceback.h
index bf4d7fe..1f09241 100644
--- a/Include/internal/pycore_traceback.h
+++ b/Include/internal/pycore_traceback.h
@@ -8,7 +8,8 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pystate.h"   /* PyInterpreterState */
+/* Forward declaration */
+struct _is;
 
 /* Write the Python traceback into the file 'fd'. For example:
 
@@ -56,7 +57,7 @@
 
 PyAPI_FUNC(const char*) _Py_DumpTracebackThreads(
     int fd,
-    PyInterpreterState *interp,
+    struct _is *interp,
     PyThreadState *current_tstate);
 
 /* Write a Unicode object into the file descriptor fd. Encode the string to
@@ -88,7 +89,7 @@
 
 PyAPI_FUNC(PyObject*) _PyTraceBack_FromFrame(
     PyObject *tb_next,
-    struct _frame *frame);
+    PyFrameObject *frame);
 
 #ifdef __cplusplus
 }
diff --git a/Include/internal/pycore_tupleobject.h b/Include/internal/pycore_tupleobject.h
index 9fcfc5c..f95f16c 100644
--- a/Include/internal/pycore_tupleobject.h
+++ b/Include/internal/pycore_tupleobject.h
@@ -8,7 +8,7 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "tupleobject.h"
+#include "tupleobject.h"   /* _PyTuple_CAST() */
 
 #define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item)
 PyAPI_FUNC(PyObject *) _PyTuple_FromArray(PyObject *const *, Py_ssize_t);
diff --git a/Include/internal/pycore_warnings.h b/Include/internal/pycore_warnings.h
index 73e5350..cafe305 100644
--- a/Include/internal/pycore_warnings.h
+++ b/Include/internal/pycore_warnings.h
@@ -8,8 +8,6 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "object.h"
-
 struct _warnings_runtime_state {
     /* Both 'filters' and 'onceregistry' can be set in warnings.py;
        get_warnings_attr() will reset these variables accordingly. */
@@ -19,6 +17,8 @@
     long filters_version;
 };
 
+extern PyStatus _PyWarnings_InitState(PyThreadState *tstate);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/iterobject.h b/Include/iterobject.h
index f61726f..51139bf 100644
--- a/Include/iterobject.h
+++ b/Include/iterobject.h
@@ -7,14 +7,13 @@
 
 PyAPI_DATA(PyTypeObject) PySeqIter_Type;
 PyAPI_DATA(PyTypeObject) PyCallIter_Type;
-PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type;
 
-#define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type)
+#define PySeqIter_Check(op) Py_IS_TYPE(op, &PySeqIter_Type)
 
 PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *);
 
 
-#define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type)
+#define PyCallIter_Check(op) Py_IS_TYPE(op, &PyCallIter_Type)
 
 PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *);
 
diff --git a/Include/listobject.h b/Include/listobject.h
index 6057279..2a8a255 100644
--- a/Include/listobject.h
+++ b/Include/listobject.h
@@ -1,16 +1,14 @@
+/* List object interface
 
-/* List object interface */
+   Another generally useful object type is a list of object pointers.
+   This is a mutable type: the list items can be changed, and items can be
+   added or removed. Out-of-range indices or non-list objects are ignored.
 
-/*
-Another generally useful object type is a list of object pointers.
-This is a mutable type: the list items can be changed, and items can be
-added or removed.  Out-of-range indices or non-list objects are ignored.
-
-*** WARNING *** PyList_SetItem does not increment the new item's reference
-count, but does decrement the reference count of the item it replaces,
-if not nil.  It does *decrement* the reference count if it is *not*
-inserted in the list.  Similarly, PyList_GetItem does not increment the
-returned item's reference count.
+   WARNING: PyList_SetItem does not increment the new item's reference count,
+   but does decrement the reference count of the item it replaces, if not nil.
+   It does *decrement* the reference count if it is *not* inserted in the list.
+   Similarly, PyList_GetItem does not increment the returned item's reference
+   count.
 */
 
 #ifndef Py_LISTOBJECT_H
@@ -19,60 +17,33 @@
 extern "C" {
 #endif
 
-#ifndef Py_LIMITED_API
-typedef struct {
-    PyObject_VAR_HEAD
-    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
-    PyObject **ob_item;
-
-    /* ob_item contains space for 'allocated' elements.  The number
-     * currently in use is ob_size.
-     * Invariants:
-     *     0 <= ob_size <= allocated
-     *     len(list) == ob_size
-     *     ob_item == NULL implies ob_size == allocated == 0
-     * list.sort() temporarily sets allocated to -1 to detect mutations.
-     *
-     * Items must normally not be NULL, except during construction when
-     * the list is not yet visible outside the function that builds it.
-     */
-    Py_ssize_t allocated;
-} PyListObject;
-#endif
-
 PyAPI_DATA(PyTypeObject) PyList_Type;
 PyAPI_DATA(PyTypeObject) PyListIter_Type;
 PyAPI_DATA(PyTypeObject) PyListRevIter_Type;
-PyAPI_DATA(PyTypeObject) PySortWrapper_Type;
 
 #define PyList_Check(op) \
     PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
-#define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type)
+#define PyList_CheckExact(op) Py_IS_TYPE(op, &PyList_Type)
 
 PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size);
 PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *);
+
 PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t);
 PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *);
 PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *);
 PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *);
+
 PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
 PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
+
 PyAPI_FUNC(int) PyList_Sort(PyObject *);
 PyAPI_FUNC(int) PyList_Reverse(PyObject *);
 PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);
 
-PyAPI_FUNC(int) PyList_ClearFreeList(void);
-PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
-#endif
-
-/* Macro, trading safety for speed */
 #ifndef Py_LIMITED_API
-#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i])
-#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v))
-#define PyList_GET_SIZE(op)    (assert(PyList_Check(op)),Py_SIZE(op))
-#define _PyList_ITEMS(op)      (((PyListObject *)(op))->ob_item)
+#  define Py_CPYTHON_LISTOBJECT_H
+#  include  "cpython/listobject.h"
+#  undef Py_CPYTHON_LISTOBJECT_H
 #endif
 
 #ifdef __cplusplus
diff --git a/Include/longobject.h b/Include/longobject.h
index 1e7a58d..1b28809 100644
--- a/Include/longobject.h
+++ b/Include/longobject.h
@@ -13,7 +13,7 @@
 
 #define PyLong_Check(op) \
         PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
-#define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type)
+#define PyLong_CheckExact(op) Py_IS_TYPE(op, &PyLong_Type)
 
 PyAPI_FUNC(PyObject *) PyLong_FromLong(long);
 PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long);
@@ -74,7 +74,7 @@
 #endif
 
 /* Used by Python/mystrtoul.c, _PyBytes_FromHex(),
-   _PyBytes_DecodeEscapeRecode(), etc. */
+   _PyBytes_DecodeEscape(), etc. */
 #ifndef Py_LIMITED_API
 PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];
 #endif
diff --git a/Include/memoryobject.h b/Include/memoryobject.h
index 990a716..306028f 100644
--- a/Include/memoryobject.h
+++ b/Include/memoryobject.h
@@ -11,7 +11,7 @@
 #endif
 PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
 
-#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
+#define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type)
 
 #ifndef Py_LIMITED_API
 /* Get a pointer to the memoryview's private copy of the exporter's buffer. */
diff --git a/Include/methodobject.h b/Include/methodobject.h
index ba3b887..12e049b 100644
--- a/Include/methodobject.h
+++ b/Include/methodobject.h
@@ -13,7 +13,8 @@
 
 PyAPI_DATA(PyTypeObject) PyCFunction_Type;
 
-#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type)
+#define PyCFunction_CheckExact(op) Py_IS_TYPE(op, &PyCFunction_Type)
+#define PyCFunction_Check(op) PyObject_TypeCheck(op, &PyCFunction_Type)
 
 typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
 typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t);
@@ -22,31 +23,14 @@
 typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *,
                                                    PyObject *const *, Py_ssize_t,
                                                    PyObject *);
-typedef PyObject *(*PyNoArgsFunction)(PyObject *);
+typedef PyObject *(*PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *,
+                               size_t, PyObject *);
 
 PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *);
 PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *);
 PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *);
 
-/* Macros for direct access to these values. Type checks are *not*
-   done, so use with care. */
-#ifndef Py_LIMITED_API
-#define PyCFunction_GET_FUNCTION(func) \
-        (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
-#define PyCFunction_GET_SELF(func) \
-        (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \
-         NULL : ((PyCFunctionObject *)func) -> m_self)
-#define PyCFunction_GET_FLAGS(func) \
-        (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
-#endif
-PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyCFunction_FastCallDict(PyObject *func,
-    PyObject *const *args,
-    Py_ssize_t nargs,
-    PyObject *kwargs);
-#endif
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
 
 struct PyMethodDef {
     const char  *ml_name;   /* The name of the built-in function/method */
@@ -61,6 +45,13 @@
 PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
                                          PyObject *);
 
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
+PyAPI_FUNC(PyObject *) PyCMethod_New(PyMethodDef *, PyObject *,
+                                     PyObject *, PyTypeObject *);
+#endif
+
+
 /* Flag passed to newmethodobject */
 /* #define METH_OLDARGS  0x0000   -- unsupported now */
 #define METH_VARARGS  0x0001
@@ -93,36 +84,24 @@
 #define METH_STACKLESS 0x0000
 #endif
 
-#ifndef Py_LIMITED_API
-typedef struct {
-    PyObject_HEAD
-    PyMethodDef *m_ml; /* Description of the C function to call */
-    PyObject    *m_self; /* Passed as 'self' arg to the C func, can be NULL */
-    PyObject    *m_module; /* The __module__ attribute, can be anything */
-    PyObject    *m_weakreflist; /* List of weak references */
-    vectorcallfunc vectorcall;
-} PyCFunctionObject;
+/* METH_METHOD means the function stores an
+ * additional reference to the class that defines it;
+ * both self and class are passed to it.
+ * It uses PyCMethodObject instead of PyCFunctionObject.
+ * May not be combined with METH_NOARGS, METH_O, METH_CLASS or METH_STATIC.
+ */
 
-PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallDict(
-    PyMethodDef *method,
-    PyObject *self,
-    PyObject *const *args,
-    Py_ssize_t nargs,
-    PyObject *kwargs);
-
-PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallKeywords(
-    PyMethodDef *method,
-    PyObject *self,
-    PyObject *const *args,
-    Py_ssize_t nargs,
-    PyObject *kwnames);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+#define METH_METHOD 0x0200
 #endif
 
-PyAPI_FUNC(int) PyCFunction_ClearFreeList(void);
 
 #ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out);
-PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out);
+
+#define Py_CPYTHON_METHODOBJECT_H
+#include  "cpython/methodobject.h"
+#undef Py_CPYTHON_METHODOBJECT_H
+
 #endif
 
 #ifdef __cplusplus
diff --git a/Include/modsupport.h b/Include/modsupport.h
index f90ede4..4c4aab6 100644
--- a/Include/modsupport.h
+++ b/Include/modsupport.h
@@ -60,9 +60,12 @@
     ...);
 
 PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs);
+PyAPI_FUNC(int) _PyArg_NoKwnames(const char *funcname, PyObject *kwnames);
 PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args);
 #define _PyArg_NoKeywords(funcname, kwargs) \
     ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
+#define _PyArg_NoKwnames(funcname, kwnames) \
+    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
 #define _PyArg_NoPositional(funcname, args) \
     ((args) == NULL || _PyArg_NoPositional((funcname), (args)))
 
@@ -136,6 +139,10 @@
 PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *);
 PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
 PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* New in 3.9 */
+PyAPI_FUNC(int) PyModule_AddType(PyObject *module, PyTypeObject *type);
+#endif /* Py_LIMITED_API */
 #define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c)
 #define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c)
 
diff --git a/Include/moduleobject.h b/Include/moduleobject.h
index e246fd2..cf9ad40 100644
--- a/Include/moduleobject.h
+++ b/Include/moduleobject.h
@@ -10,7 +10,7 @@
 PyAPI_DATA(PyTypeObject) PyModule_Type;
 
 #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
-#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type)
+#define PyModule_CheckExact(op) Py_IS_TYPE(op, &PyModule_Type)
 
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
 PyAPI_FUNC(PyObject *) PyModule_NewObject(
diff --git a/Include/node.h b/Include/node.h
index 2b39074..ca24f28 100644
--- a/Include/node.h
+++ b/Include/node.h
@@ -31,7 +31,6 @@
 #define NCH(n)          ((n)->n_nchildren)
 
 #define CHILD(n, i)     (&(n)->n_child[i])
-#define RCHILD(n, i)    (CHILD(n, NCH(n) + i))
 #define TYPE(n)         ((n)->n_type)
 #define STR(n)          ((n)->n_str)
 #define LINENO(n)       ((n)->n_lineno)
diff --git a/Include/object.h b/Include/object.h
index 5558f65..9c1a7f4 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -1,8 +1,6 @@
 #ifndef Py_OBJECT_H
 #define Py_OBJECT_H
 
-#include "pymem.h"   /* _Py_tracemalloc_config */
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -63,6 +61,9 @@
 #error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG
 #endif
 
+/* PyTypeObject structure is defined in cpython/object.h.
+   In Py_LIMITED_API, PyTypeObject is an opaque structure. */
+typedef struct _typeobject PyTypeObject;
 
 #ifdef Py_TRACE_REFS
 /* Define pointers to support a doubly-linked list of all live heap objects. */
@@ -104,11 +105,12 @@
 typedef struct _object {
     _PyObject_HEAD_EXTRA
     Py_ssize_t ob_refcnt;
-    struct _typeobject *ob_type;
+    PyTypeObject *ob_type;
 } PyObject;
 
 /* Cast argument to PyObject* type. */
 #define _PyObject_CAST(op) ((PyObject*)(op))
+#define _PyObject_CAST_CONST(op) ((const PyObject*)(op))
 
 typedef struct {
     PyObject ob_base;
@@ -122,6 +124,27 @@
 #define Py_TYPE(ob)             (_PyObject_CAST(ob)->ob_type)
 #define Py_SIZE(ob)             (_PyVarObject_CAST(ob)->ob_size)
 
+static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) {
+    return ob->ob_type == type;
+}
+#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type)
+
+static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
+    ob->ob_refcnt = refcnt;
+}
+#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt)
+
+static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) {
+    ob->ob_type = type;
+}
+#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type)
+
+static inline void _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) {
+    ob->ob_size = size;
+}
+#define Py_SET_SIZE(ob, size) _Py_SET_SIZE(_PyVarObject_CAST(ob), size)
+
+
 /*
 Type objects contain a string containing the type name (to help somewhat
 in debugging), the allocation parameters (see PyObject_New() and
@@ -167,15 +190,8 @@
 typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
 typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
 typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
-typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
-typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
-
-#ifdef Py_LIMITED_API
-/* In Py_LIMITED_API, PyTypeObject is an opaque structure. */
-typedef struct _typeobject PyTypeObject;
-#else
-/* PyTypeObject is defined in cpython/object.h */
-#endif
+typedef PyObject *(*newfunc)(PyTypeObject *, PyObject *, PyObject *);
+typedef PyObject *(*allocfunc)(PyTypeObject *, Py_ssize_t);
 
 typedef struct{
     int slot;    /* slot id, see below */
@@ -195,30 +211,31 @@
 PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*);
 #endif
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
-PyAPI_FUNC(void*) PyType_GetSlot(struct _typeobject*, int);
+PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int);
+#endif
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+PyAPI_FUNC(PyObject*) PyType_FromModuleAndSpec(PyObject *, PyType_Spec *, PyObject *);
+PyAPI_FUNC(PyObject *) PyType_GetModule(struct _typeobject *);
+PyAPI_FUNC(void *) PyType_GetModuleState(struct _typeobject *);
 #endif
 
 /* Generic type check */
-PyAPI_FUNC(int) PyType_IsSubtype(struct _typeobject *, struct _typeobject *);
+PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
 #define PyObject_TypeCheck(ob, tp) \
-    (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
+    (Py_IS_TYPE(ob, tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
 
-PyAPI_DATA(struct _typeobject) PyType_Type; /* built-in 'type' */
-PyAPI_DATA(struct _typeobject) PyBaseObject_Type; /* built-in 'object' */
-PyAPI_DATA(struct _typeobject) PySuper_Type; /* built-in 'super' */
+PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */
+PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */
+PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */
 
-PyAPI_FUNC(unsigned long) PyType_GetFlags(struct _typeobject*);
+PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*);
 
-#define PyType_Check(op) \
-    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS)
-#define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type)
-
-PyAPI_FUNC(int) PyType_Ready(struct _typeobject *);
-PyAPI_FUNC(PyObject *) PyType_GenericAlloc(struct _typeobject *, Py_ssize_t);
-PyAPI_FUNC(PyObject *) PyType_GenericNew(struct _typeobject *,
+PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
+PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
+PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
                                                PyObject *, PyObject *);
 PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
-PyAPI_FUNC(void) PyType_Modified(struct _typeobject *);
+PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
 
 /* Generic operations on objects */
 PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *);
@@ -235,8 +252,7 @@
 PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *);
 PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *);
-PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *,
-                                              PyObject *, PyObject *);
+PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *);
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
 PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *);
 #endif
@@ -290,7 +306,9 @@
 
 /* Set if the type implements the vectorcall protocol (PEP 590) */
 #ifndef Py_LIMITED_API
-#define _Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
+#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
+// Backwards compatibility alias for API that was provisional in Python 3.8
+#define _Py_TPFLAGS_HAVE_VECTORCALL Py_TPFLAGS_HAVE_VECTORCALL
 #endif
 
 /* Set if the type is 'ready' -- fully initialized */
@@ -337,19 +355,14 @@
 /* NOTE: The following flags reuse lower bits (removed as part of the
  * Python 3.0 transition). */
 
-/* The following flag is kept for compatibility.  Starting with 3.8,
- * binary compatibility of C extensions accross feature releases of
+/* The following flag is kept for compatibility. Starting with 3.8,
+ * binary compatibility of C extensions across feature releases of
  * Python is not supported anymore, except when using the stable ABI.
  */
 
 /* Type structure has tp_finalize member (3.4) */
 #define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0)
 
-#ifdef Py_LIMITED_API
-#  define PyType_HasFeature(t,f)  ((PyType_GetFlags(t) & (f)) != 0)
-#endif
-#define PyType_FastSubclass(t,f)  PyType_HasFeature(t,f)
-
 
 /*
 The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
@@ -379,94 +392,33 @@
 you can count such references to the type object.)
 */
 
-/* First define a pile of simple helper macros, one set per special
- * build symbol.  These either expand to the obvious things, or to
- * nothing at all when the special mode isn't in effect.  The main
- * macros can later be defined just once then, yet expand to different
- * things depending on which special build options are and aren't in effect.
- * Trust me <wink>:  while painful, this is 20x easier to understand than,
- * e.g, defining _Py_NewReference five different times in a maze of nested
- * #ifdefs (we used to do that -- it was impenetrable).
- */
 #ifdef Py_REF_DEBUG
 PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
 PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
                                       PyObject *op);
-PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
-#define _Py_INC_REFTOTAL        _Py_RefTotal++
-#define _Py_DEC_REFTOTAL        _Py_RefTotal--
-
-/* Py_REF_DEBUG also controls the display of refcounts and memory block
- * allocations at the interactive prompt and at interpreter shutdown
- */
-PyAPI_FUNC(void) _PyDebug_PrintTotalRefs(void);
-#else
-#define _Py_INC_REFTOTAL
-#define _Py_DEC_REFTOTAL
 #endif /* Py_REF_DEBUG */
 
-#ifdef COUNT_ALLOCS
-PyAPI_FUNC(void) _Py_inc_count(struct _typeobject *);
-PyAPI_FUNC(void) _Py_dec_count(struct _typeobject *);
-#define _Py_INC_TPALLOCS(OP)    _Py_inc_count(Py_TYPE(OP))
-#define _Py_INC_TPFREES(OP)     _Py_dec_count(Py_TYPE(OP))
-#define _Py_DEC_TPFREES(OP)     Py_TYPE(OP)->tp_frees--
-#define _Py_COUNT_ALLOCS_COMMA  ,
-#else
-#define _Py_INC_TPALLOCS(OP)
-#define _Py_INC_TPFREES(OP)
-#define _Py_DEC_TPFREES(OP)
-#define _Py_COUNT_ALLOCS_COMMA
-#endif /* COUNT_ALLOCS */
-
-/* Update the Python traceback of an object. This function must be called
-   when a memory block is reused from a free list. */
-PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op);
-
-#ifdef Py_TRACE_REFS
-/* Py_TRACE_REFS is such major surgery that we call external routines. */
-PyAPI_FUNC(void) _Py_NewReference(PyObject *);
-PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
-PyAPI_FUNC(void) _Py_PrintReferences(FILE *);
-PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *);
-PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force);
-#else
-/* Without Py_TRACE_REFS, there's little enough to do that we expand code
-   inline. */
-static inline void _Py_NewReference(PyObject *op)
-{
-    if (_Py_tracemalloc_config.tracing) {
-        _PyTraceMalloc_NewReference(op);
-    }
-    _Py_INC_TPALLOCS(op);
-    _Py_INC_REFTOTAL;
-    Py_REFCNT(op) = 1;
-}
-
-static inline void _Py_ForgetReference(PyObject *op)
-{
-    (void)op; /* may be unused, shut up -Wunused-parameter */
-    _Py_INC_TPFREES(op);
-}
-#endif /* !Py_TRACE_REFS */
-
-
 PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
 
 static inline void _Py_INCREF(PyObject *op)
 {
-    _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal++;
+#endif
     op->ob_refcnt++;
 }
 
 #define Py_INCREF(op) _Py_INCREF(_PyObject_CAST(op))
 
-static inline void _Py_DECREF(const char *filename, int lineno,
-                              PyObject *op)
+static inline void _Py_DECREF(
+#ifdef Py_REF_DEBUG
+    const char *filename, int lineno,
+#endif
+    PyObject *op)
 {
-    (void)filename; /* may be unused, shut up -Wunused-parameter */
-    (void)lineno; /* may be unused, shut up -Wunused-parameter */
-    _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
+#endif
     if (--op->ob_refcnt != 0) {
 #ifdef Py_REF_DEBUG
         if (op->ob_refcnt < 0) {
@@ -479,7 +431,11 @@
     }
 }
 
-#define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
+#ifdef Py_REF_DEBUG
+#  define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
+#else
+#  define Py_DECREF(op) _Py_DECREF(_PyObject_CAST(op))
+#endif
 
 
 /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
@@ -654,99 +610,38 @@
 times.
 */
 
-
-/* Trashcan mechanism, thanks to Christian Tismer.
-
-When deallocating a container object, it's possible to trigger an unbounded
-chain of deallocations, as each Py_DECREF in turn drops the refcount on "the
-next" object in the chain to 0.  This can easily lead to stack overflows,
-especially in threads (which typically have less stack space to work with).
-
-A container object can avoid this by bracketing the body of its tp_dealloc
-function with a pair of macros:
-
-static void
-mytype_dealloc(mytype *p)
-{
-    ... declarations go here ...
-
-    PyObject_GC_UnTrack(p);        // must untrack first
-    Py_TRASHCAN_BEGIN(p, mytype_dealloc)
-    ... The body of the deallocator goes here, including all calls ...
-    ... to Py_DECREF on contained objects.                         ...
-    Py_TRASHCAN_END                // there should be no code after this
-}
-
-CAUTION:  Never return from the middle of the body!  If the body needs to
-"get out early", put a label immediately before the Py_TRASHCAN_END
-call, and goto it.  Else the call-depth counter (see below) will stay
-above 0 forever, and the trashcan will never get emptied.
-
-How it works:  The BEGIN macro increments a call-depth counter.  So long
-as this counter is small, the body of the deallocator is run directly without
-further ado.  But if the counter gets large, it instead adds p to a list of
-objects to be deallocated later, skips the body of the deallocator, and
-resumes execution after the END macro.  The tp_dealloc routine then returns
-without deallocating anything (and so unbounded call-stack depth is avoided).
-
-When the call stack finishes unwinding again, code generated by the END macro
-notices this, and calls another routine to deallocate all the objects that
-may have been added to the list of deferred deallocations.  In effect, a
-chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces,
-with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL.
-
-Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base
-class, we need to ensure that the trashcan is only triggered on the tp_dealloc
-of the actual class being deallocated. Otherwise we might end up with a
-partially-deallocated object. To check this, the tp_dealloc function must be
-passed as second argument to Py_TRASHCAN_BEGIN().
-*/
-
-/* The new thread-safe private API, invoked by the macros below. */
-PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*);
-PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void);
-
-#define PyTrash_UNWIND_LEVEL 50
-
-#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \
-    do { \
-        PyThreadState *_tstate = NULL; \
-        /* If "cond" is false, then _tstate remains NULL and the deallocator \
-         * is run normally without involving the trashcan */ \
-        if (cond) { \
-            _tstate = PyThreadState_GET(); \
-            if (_tstate->trash_delete_nesting >= PyTrash_UNWIND_LEVEL) { \
-                /* Store the object (to be deallocated later) and jump past \
-                 * Py_TRASHCAN_END, skipping the body of the deallocator */ \
-                _PyTrash_thread_deposit_object(_PyObject_CAST(op)); \
-                break; \
-            } \
-            ++_tstate->trash_delete_nesting; \
-        }
-        /* The body of the deallocator is here. */
-#define Py_TRASHCAN_END \
-        if (_tstate) { \
-            --_tstate->trash_delete_nesting; \
-            if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \
-                _PyTrash_thread_destroy_chain(); \
-        } \
-    } while (0);
-
-#define Py_TRASHCAN_BEGIN(op, dealloc) Py_TRASHCAN_BEGIN_CONDITION(op, \
-        Py_TYPE(op)->tp_dealloc == (destructor)(dealloc))
-
-/* For backwards compatibility, these macros enable the trashcan
- * unconditionally */
-#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1)
-#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END
-
-
 #ifndef Py_LIMITED_API
 #  define Py_CPYTHON_OBJECT_H
 #  include  "cpython/object.h"
 #  undef Py_CPYTHON_OBJECT_H
 #endif
 
+
+static inline int
+PyType_HasFeature(PyTypeObject *type, unsigned long feature)
+{
+    unsigned long flags;
+#ifdef Py_LIMITED_API
+    // PyTypeObject is opaque in the limited C API
+    flags = PyType_GetFlags(type);
+#else
+    flags = type->tp_flags;
+#endif
+    return ((flags & feature) != 0);
+}
+
+#define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag)
+
+static inline int _PyType_Check(PyObject *op) {
+    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
+}
+#define PyType_Check(op) _PyType_Check(_PyObject_CAST(op))
+
+static inline int _PyType_CheckExact(PyObject *op) {
+    return Py_IS_TYPE(op, &PyType_Type);
+}
+#define PyType_CheckExact(op) _PyType_CheckExact(_PyObject_CAST(op))
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/objimpl.h b/Include/objimpl.h
index 2337d8a..030d7ee 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -122,103 +122,32 @@
 PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *);
 PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
 
-#define PyObject_New(type, typeobj) \
-                ( (type *) _PyObject_New(typeobj) )
+#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
+
+// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly
+// PyObject_MALLOC() with _PyObject_SIZE().
+#define PyObject_NEW(type, typeobj) PyObject_New(type, typeobj)
+
 #define PyObject_NewVar(type, typeobj, n) \
                 ( (type *) _PyObject_NewVar((typeobj), (n)) )
 
-/* Inline functions trading binary compatibility for speed:
-   PyObject_INIT() is the fast version of PyObject_Init(), and
-   PyObject_INIT_VAR() is the fast version of PyObject_InitVar.
-   See also pymem.h.
+// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly
+// PyObject_MALLOC() with _PyObject_VAR_SIZE().
+#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, typeobj, n)
 
-   These inline functions expect non-NULL object pointers. */
-static inline PyObject*
-_PyObject_INIT(PyObject *op, PyTypeObject *typeobj)
-{
-    assert(op != NULL);
-    Py_TYPE(op) = typeobj;
-    if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) {
-        Py_INCREF(typeobj);
-    }
-    _Py_NewReference(op);
-    return op;
-}
 
-#define PyObject_INIT(op, typeobj) \
-    _PyObject_INIT(_PyObject_CAST(op), (typeobj))
-
-static inline PyVarObject*
-_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size)
-{
-    assert(op != NULL);
-    Py_SIZE(op) = size;
-    PyObject_INIT((PyObject *)op, typeobj);
-    return op;
-}
-
-#define PyObject_INIT_VAR(op, typeobj, size) \
-    _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size))
-
-#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )
-
-/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
-   vrbl-size object with nitems items, exclusive of gc overhead (if any).  The
-   value is rounded up to the closest multiple of sizeof(void *), in order to
-   ensure that pointer fields at the end of the object are correctly aligned
-   for the platform (this is of special importance for subclasses of, e.g.,
-   str or int, so that pointers can be stored after the embedded data).
-
-   Note that there's no memory wastage in doing this, as malloc has to
-   return (at worst) pointer-aligned memory anyway.
-*/
-#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
-#   error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
+#ifdef Py_LIMITED_API
+/* Define PyObject_INIT() and PyObject_INIT_VAR() as aliases to PyObject_Init()
+   and PyObject_InitVar() in the limited C API for compatibility with the
+   CPython C API. */
+#  define PyObject_INIT(op, typeobj) \
+        PyObject_Init(_PyObject_CAST(op), (typeobj))
+#  define PyObject_INIT_VAR(op, typeobj, size) \
+        PyObject_InitVar(_PyVarObject_CAST(op), (typeobj), (size))
+#else
+/* PyObject_INIT() and PyObject_INIT_VAR() are defined in cpython/objimpl.h */
 #endif
 
-#define _PyObject_VAR_SIZE(typeobj, nitems)     \
-    _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
-        (nitems)*(typeobj)->tp_itemsize,        \
-        SIZEOF_VOID_P)
-
-#define PyObject_NEW(type, typeobj) \
-( (type *) PyObject_Init( \
-    (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) )
-
-#define PyObject_NEW_VAR(type, typeobj, n) \
-( (type *) PyObject_InitVar( \
-      (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\
-      (typeobj), (n)) )
-
-/* This example code implements an object constructor with a custom
-   allocator, where PyObject_New is inlined, and shows the important
-   distinction between two steps (at least):
-       1) the actual allocation of the object storage;
-       2) the initialization of the Python specific fields
-      in this storage with PyObject_{Init, InitVar}.
-
-   PyObject *
-   YourObject_New(...)
-   {
-       PyObject *op;
-
-       op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
-       if (op == NULL)
-       return PyErr_NoMemory();
-
-       PyObject_Init(op, &YourTypeStruct);
-
-       op->ob_field = value;
-       ...
-       return op;
-   }
-
-   Note that in C++, the use of the new operator usually implies that
-   the 1st step is performed automatically for you, so in a C++ class
-   constructor you would start directly with PyObject_Init/InitVar
-*/
-
-
 
 /*
  * Garbage Collection Support
@@ -257,6 +186,8 @@
 #define PyObject_GC_NewVar(type, typeobj, n) \
                 ( (type *) _PyObject_GC_NewVar((typeobj), (n)) )
 
+PyAPI_FUNC(int) PyObject_GC_IsTracked(PyObject *);
+PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *);
 
 /* Utility macro to help write tp_traverse functions.
  * To use this macro, the tp_traverse function must name its arguments
diff --git a/Include/odictobject.h b/Include/odictobject.h
index 35aff8a..e070413 100644
--- a/Include/odictobject.h
+++ b/Include/odictobject.h
@@ -19,7 +19,7 @@
 PyAPI_DATA(PyTypeObject) PyODictValues_Type;
 
 #define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type)
-#define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type)
+#define PyODict_CheckExact(op) Py_IS_TYPE(op, &PyODict_Type)
 #define PyODict_SIZE(op) PyDict_GET_SIZE((op))
 
 PyAPI_FUNC(PyObject *) PyODict_New(void);
diff --git a/Include/opcode.h b/Include/opcode.h
index 2a29e97..19944fa 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -30,10 +30,11 @@
 #define BINARY_TRUE_DIVIDE       27
 #define INPLACE_FLOOR_DIVIDE     28
 #define INPLACE_TRUE_DIVIDE      29
+#define RERAISE                  48
+#define WITH_EXCEPT_START        49
 #define GET_AITER                50
 #define GET_ANEXT                51
 #define BEFORE_ASYNC_WITH        52
-#define BEGIN_FINALLY            53
 #define END_ASYNC_FOR            54
 #define INPLACE_ADD              55
 #define INPLACE_SUBTRACT         56
@@ -53,19 +54,18 @@
 #define LOAD_BUILD_CLASS         71
 #define YIELD_FROM               72
 #define GET_AWAITABLE            73
+#define LOAD_ASSERTION_ERROR     74
 #define INPLACE_LSHIFT           75
 #define INPLACE_RSHIFT           76
 #define INPLACE_AND              77
 #define INPLACE_XOR              78
 #define INPLACE_OR               79
-#define WITH_CLEANUP_START       81
-#define WITH_CLEANUP_FINISH      82
+#define LIST_TO_TUPLE            82
 #define RETURN_VALUE             83
 #define IMPORT_STAR              84
 #define SETUP_ANNOTATIONS        85
 #define YIELD_VALUE              86
 #define POP_BLOCK                87
-#define END_FINALLY              88
 #define POP_EXCEPT               89
 #define HAVE_ARGUMENT            90
 #define STORE_NAME               90
@@ -94,6 +94,9 @@
 #define POP_JUMP_IF_FALSE       114
 #define POP_JUMP_IF_TRUE        115
 #define LOAD_GLOBAL             116
+#define IS_OP                   117
+#define CONTAINS_OP             118
+#define JUMP_IF_NOT_EXC_MATCH   121
 #define SETUP_FINALLY           122
 #define LOAD_FAST               124
 #define STORE_FAST              125
@@ -114,20 +117,16 @@
 #define SET_ADD                 146
 #define MAP_ADD                 147
 #define LOAD_CLASSDEREF         148
-#define BUILD_LIST_UNPACK       149
-#define BUILD_MAP_UNPACK        150
-#define BUILD_MAP_UNPACK_WITH_CALL 151
-#define BUILD_TUPLE_UNPACK      152
-#define BUILD_SET_UNPACK        153
 #define SETUP_ASYNC_WITH        154
 #define FORMAT_VALUE            155
 #define BUILD_CONST_KEY_MAP     156
 #define BUILD_STRING            157
-#define BUILD_TUPLE_UNPACK_WITH_CALL 158
 #define LOAD_METHOD             160
 #define CALL_METHOD             161
-#define CALL_FINALLY            162
-#define POP_FINALLY             163
+#define LIST_EXTEND             162
+#define SET_UPDATE              163
+#define DICT_MERGE              164
+#define DICT_UPDATE             165
 
 /* EXCEPT_HANDLER is a special, implicit block type which is created when
    entering an except handler. It is not an opcode but we define it here
@@ -135,11 +134,6 @@
    remaining private.*/
 #define EXCEPT_HANDLER 257
 
-
-enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE,
-                PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN,
-                PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
-
 #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
 
 #ifdef __cplusplus
diff --git a/Include/patchlevel.h b/Include/patchlevel.h
index 25fc2d3..0b5d280 100644
--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
@@ -17,13 +17,13 @@
 /* Version parsed out into numeric values */
 /*--start constants--*/
 #define PY_MAJOR_VERSION        3
-#define PY_MINOR_VERSION        8
-#define PY_MICRO_VERSION        5
+#define PY_MINOR_VERSION        9
+#define PY_MICRO_VERSION        1
 #define PY_RELEASE_LEVEL        PY_RELEASE_LEVEL_FINAL
 #define PY_RELEASE_SERIAL       0
 
 /* Version as a string */
-#define PY_VERSION              "3.8.5"
+#define PY_VERSION              "3.9.1"
 /*--end constants--*/
 
 /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/Include/picklebufobject.h b/Include/picklebufobject.h
index f07e900..0df2561 100644
--- a/Include/picklebufobject.h
+++ b/Include/picklebufobject.h
@@ -12,7 +12,7 @@
 
 PyAPI_DATA(PyTypeObject) PyPickleBuffer_Type;
 
-#define PyPickleBuffer_Check(op) (Py_TYPE(op) == &PyPickleBuffer_Type)
+#define PyPickleBuffer_Check(op) Py_IS_TYPE(op, &PyPickleBuffer_Type)
 
 /* Create a PickleBuffer redirecting to the given buffer-enabled object */
 PyAPI_FUNC(PyObject *) PyPickleBuffer_FromObject(PyObject *);
diff --git a/Include/py_curses.h b/Include/py_curses.h
index 2702b37..b70252d 100644
--- a/Include/py_curses.h
+++ b/Include/py_curses.h
@@ -64,7 +64,7 @@
     char *encoding;
 } PyCursesWindowObject;
 
-#define PyCursesWindow_Check(v)  (Py_TYPE(v) == &PyCursesWindow_Type)
+#define PyCursesWindow_Check(v) Py_IS_TYPE(v, &PyCursesWindow_Type)
 
 #define PyCurses_CAPSULE_NAME "_curses._C_API"
 
@@ -97,4 +97,3 @@
 
 #endif /* !defined(Py_CURSES_H) */
 
-
diff --git a/Include/pycapsule.h b/Include/pycapsule.h
index d9ecda7..fb5d503 100644
--- a/Include/pycapsule.h
+++ b/Include/pycapsule.h
@@ -22,7 +22,7 @@
 
 typedef void (*PyCapsule_Destructor)(PyObject *);
 
-#define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type)
+#define PyCapsule_CheckExact(op) Py_IS_TYPE(op, &PyCapsule_Type)
 
 
 PyAPI_FUNC(PyObject *) PyCapsule_New(
diff --git a/Include/pydebug.h b/Include/pydebug.h
index bd4aafe..78bcb11 100644
--- a/Include/pydebug.h
+++ b/Include/pydebug.h
@@ -5,8 +5,6 @@
 extern "C" {
 #endif
 
-/* These global variable are defined in pylifecycle.c */
-/* XXX (ncoghlan): move these declarations to pylifecycle.h? */
 PyAPI_DATA(int) Py_DebugFlag;
 PyAPI_DATA(int) Py_VerboseFlag;
 PyAPI_DATA(int) Py_QuietFlag;
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index 5125a51..979a26b 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <stdarg.h>               // va_list
+
 /* Error handling definitions */
 
 PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
@@ -21,7 +23,11 @@
 PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *);
 #endif
 
-/* Defined in Python/pylifecycle.c */
+/* Defined in Python/pylifecycle.c
+
+   The Py_FatalError() function is replaced with a macro which logs
+   automatically the name of the current function, unless the Py_LIMITED_API
+   macro is defined. */
 PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message);
 
 #if defined(Py_DEBUG) || defined(Py_LIMITED_API)
@@ -54,11 +60,11 @@
      PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
 
 #define PyExceptionInstance_Check(x)                    \
-    PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS)
+    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
 
 PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *);
 
-#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type))
+#define PyExceptionInstance_Class(x) ((PyObject*)Py_TYPE(x))
 
 
 /* Predefined exceptions */
@@ -303,21 +309,6 @@
     const char *reason          /* UTF-8 encoded string */
     );
 
-/* These APIs aren't really part of the error implementation, but
-   often needed to format error messages; the native C lib APIs are
-   not available on all platforms, which is why we provide emulations
-   for those platforms in Python/mysnprintf.c,
-   WARNING:  The return value of snprintf varies across platforms; do
-   not rely on any particular behavior; eventually the C99 defn may
-   be reliable.
-*/
-#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF)
-# define HAVE_SNPRINTF
-# define snprintf _snprintf
-# define vsnprintf _vsnprintf
-#endif
-
-#include <stdarg.h>
 PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char  *format, ...)
                         Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
 PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char  *format, va_list va)
diff --git a/Include/pyfpe.h b/Include/pyfpe.h
index 5a99e39..cc2def6 100644
--- a/Include/pyfpe.h
+++ b/Include/pyfpe.h
@@ -1,5 +1,7 @@
 #ifndef Py_PYFPE_H
 #define Py_PYFPE_H
+/* Header excluded from the stable API */
+#ifndef Py_LIMITED_API
 
 /* These macros used to do something when Python was built with --with-fpectl,
  * but support for that was dropped in 3.7. We continue to define them though,
@@ -9,4 +11,5 @@
 #define PyFPE_START_PROTECT(err_string, leave_stmt)
 #define PyFPE_END_PROTECT(v)
 
+#endif /* !defined(Py_LIMITED_API) */
 #endif /* !Py_PYFPE_H */
diff --git a/Include/pyframe.h b/Include/pyframe.h
new file mode 100644
index 0000000..3816224
--- /dev/null
+++ b/Include/pyframe.h
@@ -0,0 +1,22 @@
+/* Limited C API of PyFrame API
+ *
+ * Include "frameobject.h" to get the PyFrameObject structure.
+ */
+
+#ifndef Py_PYFRAME_H
+#define Py_PYFRAME_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _frame PyFrameObject;
+
+/* Return the line of code the frame is currently executing. */
+PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
+
+PyAPI_FUNC(PyCodeObject *) PyFrame_GetCode(PyFrameObject *frame);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_PYFRAME_H */
diff --git a/Include/pyhash.h b/Include/pyhash.h
index dbcc974..4437b87 100644
--- a/Include/pyhash.h
+++ b/Include/pyhash.h
@@ -8,7 +8,9 @@
 /* Helpers for hash functions */
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double);
-PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*);
+PyAPI_FUNC(Py_hash_t) _Py_HashPointer(const void*);
+// Similar to _Py_HashPointer(), but don't replace -1 with -2
+PyAPI_FUNC(Py_hash_t) _Py_HashPointerRaw(const void*);
 PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t);
 #endif
 
diff --git a/Include/pymacro.h b/Include/pymacro.h
index 495c2c2..202b936 100644
--- a/Include/pymacro.h
+++ b/Include/pymacro.h
@@ -100,7 +100,33 @@
 #  define Py_UNUSED(name) _unused_ ## name
 #endif
 
-#define Py_UNREACHABLE() \
+#if defined(RANDALL_WAS_HERE)
+#  define Py_UNREACHABLE() \
+    Py_FatalError( \
+        "If you're seeing this, the code is in what I thought was\n" \
+        "an unreachable state.\n\n" \
+        "I could give you advice for what to do, but honestly, why\n" \
+        "should you trust me?  I clearly screwed this up.  I'm writing\n" \
+        "a message that should never appear, yet I know it will\n" \
+        "probably appear someday.\n\n" \
+        "On a deep level, I know I'm not up to this task.\n" \
+        "I'm so sorry.\n" \
+        "https://xkcd.com/2200")
+#elif defined(Py_DEBUG)
+#  define Py_UNREACHABLE() \
+    Py_FatalError( \
+        "We've reached an unreachable state. Anything is possible.\n" \
+        "The limits were in our heads all along. Follow your dreams.\n" \
+        "https://xkcd.com/2200")
+#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#  define Py_UNREACHABLE() __builtin_unreachable()
+#elif defined(__clang__) || defined(__INTEL_COMPILER)
+#  define Py_UNREACHABLE() __builtin_unreachable()
+#elif defined(_MSC_VER)
+#  define Py_UNREACHABLE() __assume(0)
+#else
+#  define Py_UNREACHABLE() \
     Py_FatalError("Unreachable C code path reached")
+#endif
 
 #endif /* Py_PYMACRO_H */
diff --git a/Include/pymath.h b/Include/pymath.h
index 6cf69f9..63ca972 100644
--- a/Include/pymath.h
+++ b/Include/pymath.h
@@ -125,7 +125,7 @@
 
 /* Py_IS_FINITE(X)
  * Return 1 if float or double arg is neither infinite nor NAN, else 0.
- * Some compilers (e.g. VisualStudio) have intrisics for this, so a special
+ * Some compilers (e.g. VisualStudio) have intrinsics for this, so a special
  * macro for this particular test is useful
  * Note: PC/pyconfig.h defines Py_IS_FINITE as _finite
  */
@@ -227,4 +227,12 @@
  * behavior. */
 #define _Py_InIntegralTypeRange(type, v) (_Py_IntegralTypeMin(type) <= v && v <= _Py_IntegralTypeMax(type))
 
+/* Return the smallest integer k such that n < 2**k, or 0 if n == 0.
+ * Equivalent to floor(log2(x))+1.  Also equivalent to: bitwidth_of_type -
+ * count_leading_zero_bits(x)
+ */
+#ifndef Py_LIMITED_API
+PyAPI_FUNC(unsigned int) _Py_bit_length(unsigned long d);
+#endif
+
 #endif /* Py_PYMATH_H */
diff --git a/Include/pymem.h b/Include/pymem.h
index 07b380a..607feb9 100644
--- a/Include/pymem.h
+++ b/Include/pymem.h
@@ -101,41 +101,6 @@
 #define PyMem_Del               PyMem_Free
 #define PyMem_DEL               PyMem_FREE
 
-/* bpo-35053: expose _Py_tracemalloc_config for performance:
-   _Py_NewReference() needs an efficient check to test if tracemalloc is
-   tracing.
-
-   It has to be defined in pymem.h, before object.h is included. */
-struct _PyTraceMalloc_Config {
-    /* Module initialized?
-       Variable protected by the GIL */
-    enum {
-        TRACEMALLOC_NOT_INITIALIZED,
-        TRACEMALLOC_INITIALIZED,
-        TRACEMALLOC_FINALIZED
-    } initialized;
-
-    /* Is tracemalloc tracing memory allocations?
-       Variable protected by the GIL */
-    int tracing;
-
-    /* limit of the number of frames in a traceback, 1 by default.
-       Variable protected by the GIL. */
-    int max_nframe;
-
-    /* use domain in trace key?
-       Variable protected by the GIL. */
-    int use_domain;
-};
-
-PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config;
-
-#define _PyTraceMalloc_Config_INIT \
-    {.initialized = TRACEMALLOC_NOT_INITIALIZED, \
-     .tracing = 0, \
-     .max_nframe = 1, \
-     .use_domain = 0}
-
 
 #ifndef Py_LIMITED_API
 #  define Py_CPYTHON_PYMEM_H
diff --git a/Include/pyport.h b/Include/pyport.h
index 71f5794..4bd4eb4 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -133,8 +133,9 @@
 
 /* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
  * format to convert an argument with the width of a size_t or Py_ssize_t.
- * C99 introduced "z" for this purpose, but not all platforms support that;
- * e.g., MS compilers use "I" instead.
+ * C99 introduced "z" for this purpose, but old MSVCs had not supported it.
+ * Since MSVC supports "z" since (at least) 2015, we can just use "z"
+ * for new code.
  *
  * These "high level" Python format functions interpret "z" correctly on
  * all platforms (Python interprets the format string itself, and does whatever
@@ -152,19 +153,11 @@
  *     Py_ssize_t index;
  *     fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index);
  *
- * That will expand to %ld, or %Id, or to something else correct for a
- * Py_ssize_t on the platform.
+ * That will expand to %zd or to something else correct for a Py_ssize_t on
+ * the platform.
  */
 #ifndef PY_FORMAT_SIZE_T
-#   if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
-#       define PY_FORMAT_SIZE_T ""
-#   elif SIZEOF_SIZE_T == SIZEOF_LONG
-#       define PY_FORMAT_SIZE_T "l"
-#   elif defined(MS_WINDOWS)
-#       define PY_FORMAT_SIZE_T "I"
-#   else
-#       error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T"
-#   endif
+#   define PY_FORMAT_SIZE_T "z"
 #endif
 
 /* Py_LOCAL can be used instead of static to get the fastest possible calling
@@ -520,6 +513,26 @@
 #define Py_DEPRECATED(VERSION_UNUSED)
 #endif
 
+#if defined(__clang__)
+#define _Py_COMP_DIAG_PUSH _Pragma("clang diagnostic push")
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \
+    _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
+#define _Py_COMP_DIAG_POP _Pragma("clang diagnostic pop")
+#elif defined(__GNUC__) \
+    && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
+#define _Py_COMP_DIAG_PUSH _Pragma("GCC diagnostic push")
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \
+    _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+#define _Py_COMP_DIAG_POP _Pragma("GCC diagnostic pop")
+#elif defined(_MSC_VER)
+#define _Py_COMP_DIAG_PUSH __pragma(warning(push))
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS __pragma(warning(disable: 4996))
+#define _Py_COMP_DIAG_POP __pragma(warning(pop))
+#else
+#define _Py_COMP_DIAG_PUSH
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS
+#define _Py_COMP_DIAG_POP
+#endif
 
 /* _Py_HOT_FUNCTION
  * The hot attribute on a function is used to inform the compiler that the
@@ -645,16 +658,18 @@
 #       define HAVE_DECLSPEC_DLL
 #endif
 
+#include "exports.h"
+
 /* only get special linkage if built as shared or platform is Cygwin */
 #if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__)
 #       if defined(HAVE_DECLSPEC_DLL)
 #               if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
-#                       define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE
-#                       define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE
+#                       define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE
+#                       define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE
         /* module init functions inside the core need no external linkage */
         /* except for Cygwin to handle embedding */
 #                       if defined(__CYGWIN__)
-#                               define PyMODINIT_FUNC __declspec(dllexport) PyObject*
+#                               define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
 #                       else /* __CYGWIN__ */
 #                               define PyMODINIT_FUNC PyObject*
 #                       endif /* __CYGWIN__ */
@@ -665,14 +680,14 @@
         /* failures similar to those described at the bottom of 4.1: */
         /* http://docs.python.org/extending/windows.html#a-cookbook-approach */
 #                       if !defined(__CYGWIN__)
-#                               define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
+#                               define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE
 #                       endif /* !__CYGWIN__ */
-#                       define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE
+#                       define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE
         /* module init functions outside the core must be exported */
 #                       if defined(__cplusplus)
-#                               define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject*
+#                               define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject*
 #                       else /* __cplusplus */
-#                               define PyMODINIT_FUNC __declspec(dllexport) PyObject*
+#                               define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
 #                       endif /* __cplusplus */
 #               endif /* Py_BUILD_CORE */
 #       endif /* HAVE_DECLSPEC_DLL */
@@ -680,16 +695,16 @@
 
 /* If no external linkage macros defined by now, create defaults */
 #ifndef PyAPI_FUNC
-#       define PyAPI_FUNC(RTYPE) RTYPE
+#       define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE
 #endif
 #ifndef PyAPI_DATA
-#       define PyAPI_DATA(RTYPE) extern RTYPE
+#       define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE
 #endif
 #ifndef PyMODINIT_FUNC
 #       if defined(__cplusplus)
-#               define PyMODINIT_FUNC extern "C" PyObject*
+#               define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject*
 #       else /* __cplusplus */
-#               define PyMODINIT_FUNC PyObject*
+#               define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
 #       endif /* __cplusplus */
 #endif
 
@@ -773,11 +788,11 @@
  */
 
 #ifdef WORDS_BIGENDIAN
-#define PY_BIG_ENDIAN 1
-#define PY_LITTLE_ENDIAN 0
+#  define PY_BIG_ENDIAN 1
+#  define PY_LITTLE_ENDIAN 0
 #else
-#define PY_BIG_ENDIAN 0
-#define PY_LITTLE_ENDIAN 1
+#  define PY_BIG_ENDIAN 0
+#  define PY_LITTLE_ENDIAN 1
 #endif
 
 #ifdef Py_BUILD_CORE
@@ -834,8 +849,9 @@
 #endif
 
 /* Mark a function which cannot return. Example:
+   PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void);
 
-   PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); */
+   XLC support is intentionally omitted due to bpo-40244 */
 #if defined(__clang__) || \
     (defined(__GNUC__) && \
      ((__GNUC__ >= 3) || \
@@ -847,4 +863,16 @@
 #  define _Py_NO_RETURN
 #endif
 
+
+// Preprocessor check for a builtin preprocessor function. Always return 0
+// if __has_builtin() macro is not defined.
+//
+// __has_builtin() is available on clang and GCC 10.
+#ifdef __has_builtin
+#  define _Py__has_builtin(x) __has_builtin(x)
+#else
+#  define _Py__has_builtin(x) 0
+#endif
+
+
 #endif /* Py_PYPORT_H */
diff --git a/Include/pystate.h b/Include/pystate.h
index 4c25e3f..bae4407 100644
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -7,27 +7,35 @@
 extern "C" {
 #endif
 
-#include "pythread.h"
-
 /* This limitation is for performance and simplicity. If needed it can be
 removed (with effort). */
 #define MAX_CO_EXTRA_USERS 255
 
 /* Forward declarations for PyFrameObject, PyThreadState
    and PyInterpreterState */
-struct _frame;
 struct _ts;
 struct _is;
 
 /* struct _ts is defined in cpython/pystate.h */
 typedef struct _ts PyThreadState;
-/* struct _is is defined in internal/pycore_pystate.h */
+/* struct _is is defined in internal/pycore_interp.h */
 typedef struct _is PyInterpreterState;
 
 PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void);
 PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *);
 PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *);
 
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* New in 3.9 */
+/* Get the current interpreter state.
+
+   Issue a fatal error if there no current Python thread state or no current
+   interpreter. It cannot return NULL.
+
+   The caller must hold the GIL. */
+PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Get(void);
+#endif
+
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
 /* New in 3.8 */
 PyAPI_FUNC(PyObject *) PyInterpreterState_GetDict(PyInterpreterState *);
@@ -50,7 +58,6 @@
 PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *);
 PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *);
 PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *);
-PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
 
 /* Get the current thread state.
 
@@ -77,6 +84,13 @@
 PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void);
 PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *);
 
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* New in 3.9 */
+PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate);
+PyAPI_FUNC(PyFrameObject*) PyThreadState_GetFrame(PyThreadState *tstate);
+PyAPI_FUNC(uint64_t) PyThreadState_GetID(PyThreadState *tstate);
+#endif
+
 typedef
     enum {PyGILState_LOCKED, PyGILState_UNLOCKED}
         PyGILState_STATE;
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 46091e0..5752907 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -72,16 +72,23 @@
 #define PyParser_SimpleParseFile(FP, S, B) \
     PyParser_SimpleParseFileFlags(FP, S, B, 0)
 #endif
-PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int,
-                                                           int);
+
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
+PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, int);
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
 PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlagsFilename(const char *,
                                                                    const char *,
                                                                    int, int);
 #endif
-PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *,
-                                                         int, int);
-
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
+PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, int, int);
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *,
                                          PyObject *, PyCompilerFlags *);
diff --git a/Include/pythread.h b/Include/pythread.h
index f22e8c4..bb9d864 100644
--- a/Include/pythread.h
+++ b/Include/pythread.h
@@ -3,7 +3,6 @@
 #define Py_PYTHREAD_H
 
 typedef void *PyThread_type_lock;
-typedef void *PyThread_type_sema;
 
 #ifdef __cplusplus
 extern "C" {
@@ -37,6 +36,15 @@
 #define WAIT_LOCK       1
 #define NOWAIT_LOCK     0
 
+#ifndef Py_LIMITED_API
+#ifdef HAVE_FORK
+/* Private function to reinitialize a lock at fork in the child process.
+   Reset the lock to the unlocked state.
+   Return 0 on success, return -1 on error. */
+PyAPI_FUNC(int) _PyThread_at_fork_reinit(PyThread_type_lock *lock);
+#endif  /* HAVE_FORK */
+#endif  /* !Py_LIMITED_API */
+
 /* PY_TIMEOUT_T is the integral type used to specify timeouts when waiting
    on a lock (see PyThread_acquire_lock_timed() below).
    PY_TIMEOUT_MAX is the highest usable value (in microseconds) of that
@@ -51,16 +59,16 @@
 #if defined(_POSIX_THREADS)
    /* PyThread_acquire_lock_timed() uses _PyTime_FromNanoseconds(us * 1000),
       convert microseconds to nanoseconds. */
-#  define PY_TIMEOUT_MAX (PY_LLONG_MAX / 1000)
+#  define PY_TIMEOUT_MAX (LLONG_MAX / 1000)
 #elif defined (NT_THREADS)
    /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */
-#  if 0xFFFFFFFFLL * 1000 < PY_LLONG_MAX
+#  if 0xFFFFFFFFLL * 1000 < LLONG_MAX
 #    define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000)
 #  else
-#    define PY_TIMEOUT_MAX PY_LLONG_MAX
+#    define PY_TIMEOUT_MAX LLONG_MAX
 #  endif
 #else
-#  define PY_TIMEOUT_MAX PY_LLONG_MAX
+#  define PY_TIMEOUT_MAX LLONG_MAX
 #endif
 
 
diff --git a/Include/rangeobject.h b/Include/rangeobject.h
index 7e4dc28..d6af847 100644
--- a/Include/rangeobject.h
+++ b/Include/rangeobject.h
@@ -19,7 +19,7 @@
 PyAPI_DATA(PyTypeObject) PyRangeIter_Type;
 PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type;
 
-#define PyRange_Check(op) (Py_TYPE(op) == &PyRange_Type)
+#define PyRange_Check(op) Py_IS_TYPE(op, &PyRange_Type)
 
 #ifdef __cplusplus
 }
diff --git a/Include/setobject.h b/Include/setobject.h
index fc0ea83..119619e 100644
--- a/Include/setobject.h
+++ b/Include/setobject.h
@@ -70,7 +70,6 @@
 
 PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash);
 PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable);
-PyAPI_FUNC(int) PySet_ClearFreeList(void);
 
 #endif /* Section excluded by Py_LIMITED_API */
 
@@ -88,18 +87,18 @@
 PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set);
 PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset);
 
-#define PyFrozenSet_CheckExact(ob) (Py_TYPE(ob) == &PyFrozenSet_Type)
+#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE(ob, &PyFrozenSet_Type)
 #define PyAnySet_CheckExact(ob) \
-    (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type)
+    (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type))
 #define PyAnySet_Check(ob) \
-    (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type || \
+    (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type) || \
       PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
       PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
 #define PySet_Check(ob) \
-    (Py_TYPE(ob) == &PySet_Type || \
+    (Py_IS_TYPE(ob, &PySet_Type) || \
     PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
 #define   PyFrozenSet_Check(ob) \
-    (Py_TYPE(ob) == &PyFrozenSet_Type || \
+    (Py_IS_TYPE(ob, &PyFrozenSet_Type) || \
       PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
 
 #ifdef __cplusplus
diff --git a/Include/sliceobject.h b/Include/sliceobject.h
index aae6f3c..2c88950 100644
--- a/Include/sliceobject.h
+++ b/Include/sliceobject.h
@@ -28,7 +28,7 @@
 PyAPI_DATA(PyTypeObject) PySlice_Type;
 PyAPI_DATA(PyTypeObject) PyEllipsis_Type;
 
-#define PySlice_Check(op) (Py_TYPE(op) == &PySlice_Type)
+#define PySlice_Check(op) Py_IS_TYPE(op, &PySlice_Type)
 
 PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
                                   PyObject* step);
diff --git a/Include/structseq.h b/Include/structseq.h
index e5e5d5c..8f51c89 100644
--- a/Include/structseq.h
+++ b/Include/structseq.h
@@ -19,7 +19,7 @@
     int n_in_sequence;
 } PyStructSequence_Desc;
 
-extern char* PyStructSequence_UnnamedField;
+extern const char * const PyStructSequence_UnnamedField;
 
 #ifndef Py_LIMITED_API
 PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type,
diff --git a/Include/symtable.h b/Include/symtable.h
index 5dcfa7e..abd19a7 100644
--- a/Include/symtable.h
+++ b/Include/symtable.h
@@ -69,7 +69,7 @@
 
 PyAPI_DATA(PyTypeObject) PySTEntry_Type;
 
-#define PySTEntry_Check(op) (Py_TYPE(op) == &PySTEntry_Type)
+#define PySTEntry_Check(op) Py_IS_TYPE(op, &PySTEntry_Type)
 
 PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *);
 
diff --git a/Include/token.h b/Include/token.h
index e08708b..9b8a3aa 100644
--- a/Include/token.h
+++ b/Include/token.h
@@ -78,6 +78,10 @@
 #define ISTERMINAL(x)           ((x) < NT_OFFSET)
 #define ISNONTERMINAL(x)        ((x) >= NT_OFFSET)
 #define ISEOF(x)                ((x) == ENDMARKER)
+#define ISWHITESPACE(x)         ((x) == ENDMARKER || \
+                                 (x) == NEWLINE   || \
+                                 (x) == INDENT    || \
+                                 (x) == DEDENT)
 
 
 PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */
diff --git a/Include/traceback.h b/Include/traceback.h
index b451927..781e5a6 100644
--- a/Include/traceback.h
+++ b/Include/traceback.h
@@ -4,16 +4,14 @@
 extern "C" {
 #endif
 
-struct _frame;
-
 /* Traceback interface */
 
-PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *);
+PyAPI_FUNC(int) PyTraceBack_Here(PyFrameObject *);
 PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);
 
 /* Reveal traceback type so we can typecheck traceback objects */
 PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
-#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type)
+#define PyTraceBack_Check(v) Py_IS_TYPE(v, &PyTraceBack_Type)
 
 
 #ifndef Py_LIMITED_API
diff --git a/Include/tupleobject.h b/Include/tupleobject.h
index 590902d..e796a32 100644
--- a/Include/tupleobject.h
+++ b/Include/tupleobject.h
@@ -25,7 +25,7 @@
 
 #define PyTuple_Check(op) \
                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
-#define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type)
+#define PyTuple_CheckExact(op) Py_IS_TYPE(op, &PyTuple_Type)
 
 PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size);
 PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
@@ -34,8 +34,6 @@
 PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
 PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
 
-PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
-
 #ifndef Py_LIMITED_API
 #  define Py_CPYTHON_TUPLEOBJECT_H
 #  include  "cpython/tupleobject.h"
diff --git a/Include/typeslots.h b/Include/typeslots.h
index 0ce6a37..64f6fff 100644
--- a/Include/typeslots.h
+++ b/Include/typeslots.h
@@ -1,7 +1,12 @@
 /* Do not renumber the file; these numbers are part of the stable ABI. */
+#if defined(Py_LIMITED_API)
 /* Disabled, see #10181 */
 #undef Py_bf_getbuffer
 #undef Py_bf_releasebuffer
+#else
+#define Py_bf_getbuffer 1
+#define Py_bf_releasebuffer 2
+#endif
 #define Py_mp_ass_subscript 3
 #define Py_mp_length 4
 #define Py_mp_subscript 5
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 97d8cd1..500ce24 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -113,7 +113,7 @@
 
 #define PyUnicode_Check(op) \
                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
-#define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type)
+#define PyUnicode_CheckExact(op) Py_IS_TYPE(op, &PyUnicode_Type)
 
 /* --- Constants ---------------------------------------------------------- */
 
@@ -328,17 +328,6 @@
 
 PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal);
 
-/* --- Free-list management ----------------------------------------------- */
-
-/* Clear the free list used by the Unicode implementation.
-
-   This can be used to release memory used for objects on the free
-   list back to the Python memory allocator.
-
-*/
-
-PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
-
 /* === Builtin Codecs =====================================================
 
    Many of these APIs take two arguments encoding and errors. These
diff --git a/Include/weakrefobject.h b/Include/weakrefobject.h
index 1705156..ac4b482 100644
--- a/Include/weakrefobject.h
+++ b/Include/weakrefobject.h
@@ -46,10 +46,10 @@
 
 #define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType)
 #define PyWeakref_CheckRefExact(op) \
-        (Py_TYPE(op) == &_PyWeakref_RefType)
+        Py_IS_TYPE(op, &_PyWeakref_RefType)
 #define PyWeakref_CheckProxy(op) \
-        ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \
-         (Py_TYPE(op) == &_PyWeakref_CallableProxyType))
+        (Py_IS_TYPE(op, &_PyWeakref_ProxyType) || \
+         Py_IS_TYPE(op, &_PyWeakref_CallableProxyType))
 
 #define PyWeakref_Check(op) \
         (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
diff --git a/LICENSE b/LICENSE
index 66a3ac8..f42f8ad 100644
--- a/LICENSE
+++ b/LICENSE
@@ -59,6 +59,17 @@
 B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
 ===============================================================
 
+Python software and documentation are licensed under the
+Python Software Foundation License Version 2.
+
+Starting with Python 3.8.6, examples, recipes, and other code in
+the documentation are dual licensed under the PSF License Version 2
+and the Zero-Clause BSD license.
+
+Some software incorporated into Python is under different licenses.
+The licenses are listed with code falling under that license.
+
+
 PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
 --------------------------------------------
 
@@ -252,3 +263,17 @@
 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
+----------------------------------------------------------------------
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/Lib/Android.bp b/Lib/Android.bp
index ecc8b29..2db3018 100644
--- a/Lib/Android.bp
+++ b/Lib/Android.bp
@@ -14,6 +14,7 @@
 
 filegroup {
     name: "py3-stdlib-srcs",
+    visibility: ["//visibility:private"],
     srcs: [
         "*.py",
         "asyncio/**/*.py",
@@ -42,18 +43,60 @@
     ],
 }
 
-python_library {
+soong_config_module_type {
+    name: "cpython3_python_stdlib",
+    module_type: "python_library",
+    config_namespace: "cpython3",
+    bool_variables: ["force_build_host"],
+    properties: ["defaults"],
+}
+
+python_defaults {
+    name: "py3-stdlib-force-build",
+    defaults_visibility: ["//visibility:private"],
+    target: {
+        linux_glibc: {
+            exclude_srcs: [":py3-stdlib-prebuilt-srcs"],
+            srcs: [":py3-stdlib-srcs"],
+        },
+        darwin: {
+            exclude_srcs: [":py3-stdlib-prebuilt-srcs"],
+            srcs: [":py3-stdlib-srcs"],
+        },
+    },
+}
+
+cpython3_python_stdlib {
     name: "py3-stdlib",
     is_internal: true,
     pkg_path: "stdlib",
-    srcs: [":py3-stdlib-srcs"],
     host_supported: true,
+    target: {
+        android: {
+            srcs: [":py3-stdlib-srcs"],
+        },
+        linux_bionic: {
+            srcs: [":py3-stdlib-srcs"],
+        },
+        linux_glibc: {
+            srcs: [":py3-stdlib-prebuilt-srcs"],
+        },
+        darwin: {
+            srcs: [":py3-stdlib-prebuilt-srcs"],
+        },
+    },
+    soong_config_variables: {
+        force_build_host: {
+            defaults: ["py3-stdlib-force-build"],
+        },
+    },
 }
 
 // Used by prebuilts/build-tools/build-prebuilts.sh to update
 // prebuilts/build-tools/common/py3-stdlib
 genrule {
     name: "py3-stdlib-zip",
+    visibility: ["//visibility:private"],
     tools: ["soong_zip"],
     cmd: "echo $(in) >$(genDir)/list && " +
         "$(location soong_zip) -o $(out) -C external/python/cpython3/Lib -l $(genDir)/list",
diff --git a/Lib/__future__.py b/Lib/__future__.py
index d7cb8ac..0e7b555 100644
--- a/Lib/__future__.py
+++ b/Lib/__future__.py
@@ -66,18 +66,20 @@
 # code.h and used by compile.h, so that an editor search will find them here.
 # However, they're not exported in __all__, because they don't really belong to
 # this module.
-CO_NESTED            = 0x0010   # nested_scopes
-CO_GENERATOR_ALLOWED = 0        # generators (obsolete, was 0x1000)
-CO_FUTURE_DIVISION   = 0x20000   # division
-CO_FUTURE_ABSOLUTE_IMPORT = 0x40000 # perform absolute imports by default
-CO_FUTURE_WITH_STATEMENT  = 0x80000   # with statement
-CO_FUTURE_PRINT_FUNCTION  = 0x100000   # print function
-CO_FUTURE_UNICODE_LITERALS = 0x200000 # unicode string literals
+CO_NESTED = 0x0010                      # nested_scopes
+CO_GENERATOR_ALLOWED = 0                # generators (obsolete, was 0x1000)
+CO_FUTURE_DIVISION = 0x20000            # division
+CO_FUTURE_ABSOLUTE_IMPORT = 0x40000     # perform absolute imports by default
+CO_FUTURE_WITH_STATEMENT = 0x80000      # with statement
+CO_FUTURE_PRINT_FUNCTION = 0x100000     # print function
+CO_FUTURE_UNICODE_LITERALS = 0x200000   # unicode string literals
 CO_FUTURE_BARRY_AS_BDFL = 0x400000
-CO_FUTURE_GENERATOR_STOP  = 0x800000 # StopIteration becomes RuntimeError in generators
-CO_FUTURE_ANNOTATIONS     = 0x1000000  # annotations become strings at runtime
+CO_FUTURE_GENERATOR_STOP = 0x800000     # StopIteration becomes RuntimeError in generators
+CO_FUTURE_ANNOTATIONS = 0x1000000       # annotations become strings at runtime
+
 
 class _Feature:
+
     def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
         self.optional = optionalRelease
         self.mandatory = mandatoryRelease
@@ -88,7 +90,6 @@
 
         This is a 5-tuple, of the same form as sys.version_info.
         """
-
         return self.optional
 
     def getMandatoryRelease(self):
@@ -97,7 +98,6 @@
         This is a 5-tuple, of the same form as sys.version_info, or, if
         the feature was dropped, is None.
         """
-
         return self.mandatory
 
     def __repr__(self):
@@ -105,6 +105,7 @@
                                   self.mandatory,
                                   self.compiler_flag))
 
+
 nested_scopes = _Feature((2, 1, 0, "beta",  1),
                          (2, 2, 0, "alpha", 0),
                          CO_NESTED)
@@ -142,5 +143,5 @@
                           CO_FUTURE_GENERATOR_STOP)
 
 annotations = _Feature((3, 7, 0, "beta", 1),
-                       (4, 0, 0, "alpha", 0),
+                       (3, 10, 0, "alpha", 0),
                        CO_FUTURE_ANNOTATIONS)
diff --git a/Lib/_aix_support.py b/Lib/_aix_support.py
new file mode 100644
index 0000000..4550493
--- /dev/null
+++ b/Lib/_aix_support.py
@@ -0,0 +1,89 @@
+"""Shared AIX support functions."""
+
+import sys
+import sysconfig
+
+try:
+    import subprocess
+except ImportError:  # pragma: no cover
+    # _aix_support is used in distutils by setup.py to build C extensions,
+    # before subprocess dependencies like _posixsubprocess are available.
+    import _bootsubprocess as subprocess
+
+
+def _aix_tag(vrtl, bd):
+    # type: (List[int], int) -> str
+    # Infer the ABI bitwidth from maxsize (assuming 64 bit as the default)
+    _sz = 32 if sys.maxsize == (2**31-1) else 64
+    # vrtl[version, release, technology_level]
+    return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], bd, _sz)
+
+
+# extract version, release and technology level from a VRMF string
+def _aix_vrtl(vrmf):
+    # type: (str) -> List[int]
+    v, r, tl = vrmf.split(".")[:3]
+    return [int(v[-1]), int(r), int(tl)]
+
+
+def _aix_bosmp64():
+    # type: () -> Tuple[str, int]
+    """
+    Return a Tuple[str, int] e.g., ['7.1.4.34', 1806]
+    The fileset bos.mp64 is the AIX kernel. It's VRMF and builddate
+    reflect the current ABI levels of the runtime environment.
+    """
+    # We expect all AIX systems to have lslpp installed in this location
+    out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.mp64"])
+    out = out.decode("utf-8")
+    out = out.strip().split(":")  # type: ignore
+    # Use str() and int() to help mypy see types
+    return (str(out[2]), int(out[-1]))
+
+
+def aix_platform():
+    # type: () -> str
+    """
+    AIX filesets are identified by four decimal values: V.R.M.F.
+    V (version) and R (release) can be retreived using ``uname``
+    Since 2007, starting with AIX 5.3 TL7, the M value has been
+    included with the fileset bos.mp64 and represents the Technology
+    Level (TL) of AIX. The F (Fix) value also increases, but is not
+    relevant for comparing releases and binary compatibility.
+    For binary compatibility the so-called builddate is needed.
+    Again, the builddate of an AIX release is associated with bos.mp64.
+    AIX ABI compatibility is described  as guaranteed at: https://www.ibm.com/\
+    support/knowledgecenter/en/ssw_aix_72/install/binary_compatability.html
+
+    For pep425 purposes the AIX platform tag becomes:
+    "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(v, r, tl, builddate, bitsize)
+    e.g., "aix-6107-1415-32" for AIX 6.1 TL7 bd 1415, 32-bit
+    and, "aix-6107-1415-64" for AIX 6.1 TL7 bd 1415, 64-bit
+    """
+    vrmf, bd = _aix_bosmp64()
+    return _aix_tag(_aix_vrtl(vrmf), bd)
+
+
+# extract vrtl from the BUILD_GNU_TYPE as an int
+def _aix_bgt():
+    # type: () -> List[int]
+    gnu_type = sysconfig.get_config_var("BUILD_GNU_TYPE")
+    if not gnu_type:
+        raise ValueError("BUILD_GNU_TYPE is not defined")
+    return _aix_vrtl(vrmf=gnu_type)
+
+
+def aix_buildtag():
+    # type: () -> str
+    """
+    Return the platform_tag of the system Python was built on.
+    """
+    # AIX_BUILDDATE is defined by configure with:
+    # lslpp -Lcq bos.mp64 | awk -F:  '{ print $NF }'
+    build_date = sysconfig.get_config_var("AIX_BUILDDATE")
+    try:
+        build_date = int(build_date)
+    except (ValueError, TypeError):
+        raise ValueError(f"AIX_BUILDDATE is not defined or invalid: "
+                         f"{build_date!r}")
+    return _aix_tag(_aix_bgt(), build_date)
diff --git a/Lib/_bootsubprocess.py b/Lib/_bootsubprocess.py
new file mode 100644
index 0000000..014782f
--- /dev/null
+++ b/Lib/_bootsubprocess.py
@@ -0,0 +1,97 @@
+"""
+Basic subprocess implementation for POSIX which only uses os functions. Only
+implement features required by setup.py to build C extension modules when
+subprocess is unavailable. setup.py is not used on Windows.
+"""
+import os
+
+
+# distutils.spawn used by distutils.command.build_ext
+# calls subprocess.Popen().wait()
+class Popen:
+    def __init__(self, cmd, env=None):
+        self._cmd = cmd
+        self._env = env
+        self.returncode = None
+
+    def wait(self):
+        pid = os.fork()
+        if pid == 0:
+            # Child process
+            try:
+                if self._env is not None:
+                    os.execve(self._cmd[0], self._cmd, self._env)
+                else:
+                    os.execv(self._cmd[0], self._cmd)
+            finally:
+                os._exit(1)
+        else:
+            # Parent process
+            _, status = os.waitpid(pid, 0)
+            self.returncode = os.waitstatus_to_exitcode(status)
+
+        return self.returncode
+
+
+def _check_cmd(cmd):
+    # Use regex [a-zA-Z0-9./-]+: reject empty string, space, etc.
+    safe_chars = []
+    for first, last in (("a", "z"), ("A", "Z"), ("0", "9")):
+        for ch in range(ord(first), ord(last) + 1):
+            safe_chars.append(chr(ch))
+    safe_chars.append("./-")
+    safe_chars = ''.join(safe_chars)
+
+    if isinstance(cmd, (tuple, list)):
+        check_strs = cmd
+    elif isinstance(cmd, str):
+        check_strs = [cmd]
+    else:
+        return False
+
+    for arg in check_strs:
+        if not isinstance(arg, str):
+            return False
+        if not arg:
+            # reject empty string
+            return False
+        for ch in arg:
+            if ch not in safe_chars:
+                return False
+
+    return True
+
+
+# _aix_support used by distutil.util calls subprocess.check_output()
+def check_output(cmd, **kwargs):
+    if kwargs:
+        raise NotImplementedError(repr(kwargs))
+
+    if not _check_cmd(cmd):
+        raise ValueError(f"unsupported command: {cmd!r}")
+
+    tmp_filename = "check_output.tmp"
+    if not isinstance(cmd, str):
+        cmd = " ".join(cmd)
+    cmd = f"{cmd} >{tmp_filename}"
+
+    try:
+        # system() spawns a shell
+        status = os.system(cmd)
+        exitcode = os.waitstatus_to_exitcode(status)
+        if exitcode:
+            raise ValueError(f"Command {cmd!r} returned non-zero "
+                             f"exit status {exitcode!r}")
+
+        try:
+            with open(tmp_filename, "rb") as fp:
+                stdout = fp.read()
+        except FileNotFoundError:
+            stdout = b''
+    finally:
+        try:
+            os.unlink(tmp_filename)
+        except OSError:
+            pass
+
+    return stdout
diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py
index 2b2ddba..36cd993 100644
--- a/Lib/_collections_abc.py
+++ b/Lib/_collections_abc.py
@@ -9,6 +9,8 @@
 from abc import ABCMeta, abstractmethod
 import sys
 
+GenericAlias = type(list[int])
+
 __all__ = ["Awaitable", "Coroutine",
            "AsyncIterable", "AsyncIterator", "AsyncGenerator",
            "Hashable", "Iterable", "Iterator", "Generator", "Reversible",
@@ -110,6 +112,8 @@
             return _check_methods(C, "__await__")
         return NotImplemented
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class Coroutine(Awaitable):
 
@@ -169,6 +173,8 @@
             return _check_methods(C, "__aiter__")
         return NotImplemented
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class AsyncIterator(AsyncIterable):
 
@@ -255,6 +261,8 @@
             return _check_methods(C, "__iter__")
         return NotImplemented
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class Iterator(Iterable):
 
@@ -274,6 +282,7 @@
             return _check_methods(C, '__iter__', '__next__')
         return NotImplemented
 
+
 Iterator.register(bytes_iterator)
 Iterator.register(bytearray_iterator)
 #Iterator.register(callable_iterator)
@@ -353,6 +362,7 @@
                                   'send', 'throw', 'close')
         return NotImplemented
 
+
 Generator.register(generator)
 
 
@@ -385,6 +395,9 @@
             return _check_methods(C, "__contains__")
         return NotImplemented
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 class Collection(Sized, Iterable, Container):
 
     __slots__ = ()
@@ -395,6 +408,7 @@
             return _check_methods(C,  "__len__", "__iter__", "__contains__")
         return NotImplemented
 
+
 class Callable(metaclass=ABCMeta):
 
     __slots__ = ()
@@ -409,6 +423,8 @@
             return _check_methods(C, "__call__")
         return NotImplemented
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 ### SETS ###
 
@@ -550,6 +566,7 @@
             h = 590923713
         return h
 
+
 Set.register(frozenset)
 
 
@@ -632,6 +649,7 @@
                 self.discard(value)
         return self
 
+
 MutableSet.register(set)
 
 
@@ -688,6 +706,7 @@
 
     __reversed__ = None
 
+
 Mapping.register(mappingproxy)
 
 
@@ -704,6 +723,8 @@
     def __repr__(self):
         return '{0.__class__.__name__}({0._mapping!r})'.format(self)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class KeysView(MappingView, Set):
 
@@ -719,6 +740,7 @@
     def __iter__(self):
         yield from self._mapping
 
+
 KeysView.register(dict_keys)
 
 
@@ -743,6 +765,7 @@
         for key in self._mapping:
             yield (key, self._mapping[key])
 
+
 ItemsView.register(dict_items)
 
 
@@ -761,6 +784,7 @@
         for key in self._mapping:
             yield self._mapping[key]
 
+
 ValuesView.register(dict_values)
 
 
@@ -847,6 +871,7 @@
             self[key] = default
         return default
 
+
 MutableMapping.register(dict)
 
 
@@ -914,6 +939,7 @@
         'S.count(value) -> integer -- return number of occurrences of value'
         return sum(1 for v in self if v is value or v == value)
 
+
 Sequence.register(tuple)
 Sequence.register(str)
 Sequence.register(range)
@@ -1000,5 +1026,6 @@
         self.extend(values)
         return self
 
+
 MutableSequence.register(list)
 MutableSequence.register(bytearray)  # Multiply inheriting, see ByteString
diff --git a/Lib/_dummy_thread.py b/Lib/_dummy_thread.py
deleted file mode 100644
index 2e46a07..0000000
--- a/Lib/_dummy_thread.py
+++ /dev/null
@@ -1,193 +0,0 @@
-"""Drop-in replacement for the thread module.
-
-Meant to be used as a brain-dead substitute so that threaded code does
-not need to be rewritten for when the thread module is not present.
-
-Suggested usage is::
-
-    try:
-        import _thread
-    except ImportError:
-        import _dummy_thread as _thread
-
-"""
-# Exports only things specified by thread documentation;
-# skipping obsolete synonyms allocate(), start_new(), exit_thread().
-__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock',
-           'interrupt_main', 'LockType', 'RLock']
-
-# A dummy value
-TIMEOUT_MAX = 2**31
-
-# NOTE: this module can be imported early in the extension building process,
-# and so top level imports of other modules should be avoided.  Instead, all
-# imports are done when needed on a function-by-function basis.  Since threads
-# are disabled, the import lock should not be an issue anyway (??).
-
-error = RuntimeError
-
-def start_new_thread(function, args, kwargs={}):
-    """Dummy implementation of _thread.start_new_thread().
-
-    Compatibility is maintained by making sure that ``args`` is a
-    tuple and ``kwargs`` is a dictionary.  If an exception is raised
-    and it is SystemExit (which can be done by _thread.exit()) it is
-    caught and nothing is done; all other exceptions are printed out
-    by using traceback.print_exc().
-
-    If the executed function calls interrupt_main the KeyboardInterrupt will be
-    raised when the function returns.
-
-    """
-    if type(args) != type(tuple()):
-        raise TypeError("2nd arg must be a tuple")
-    if type(kwargs) != type(dict()):
-        raise TypeError("3rd arg must be a dict")
-    global _main
-    _main = False
-    try:
-        function(*args, **kwargs)
-    except SystemExit:
-        pass
-    except:
-        import traceback
-        traceback.print_exc()
-    _main = True
-    global _interrupt
-    if _interrupt:
-        _interrupt = False
-        raise KeyboardInterrupt
-
-def exit():
-    """Dummy implementation of _thread.exit()."""
-    raise SystemExit
-
-def get_ident():
-    """Dummy implementation of _thread.get_ident().
-
-    Since this module should only be used when _threadmodule is not
-    available, it is safe to assume that the current process is the
-    only thread.  Thus a constant can be safely returned.
-    """
-    return 1
-
-def allocate_lock():
-    """Dummy implementation of _thread.allocate_lock()."""
-    return LockType()
-
-def stack_size(size=None):
-    """Dummy implementation of _thread.stack_size()."""
-    if size is not None:
-        raise error("setting thread stack size not supported")
-    return 0
-
-def _set_sentinel():
-    """Dummy implementation of _thread._set_sentinel()."""
-    return LockType()
-
-class LockType(object):
-    """Class implementing dummy implementation of _thread.LockType.
-
-    Compatibility is maintained by maintaining self.locked_status
-    which is a boolean that stores the state of the lock.  Pickling of
-    the lock, though, should not be done since if the _thread module is
-    then used with an unpickled ``lock()`` from here problems could
-    occur from this class not having atomic methods.
-
-    """
-
-    def __init__(self):
-        self.locked_status = False
-
-    def acquire(self, waitflag=None, timeout=-1):
-        """Dummy implementation of acquire().
-
-        For blocking calls, self.locked_status is automatically set to
-        True and returned appropriately based on value of
-        ``waitflag``.  If it is non-blocking, then the value is
-        actually checked and not set if it is already acquired.  This
-        is all done so that threading.Condition's assert statements
-        aren't triggered and throw a little fit.
-
-        """
-        if waitflag is None or waitflag:
-            self.locked_status = True
-            return True
-        else:
-            if not self.locked_status:
-                self.locked_status = True
-                return True
-            else:
-                if timeout > 0:
-                    import time
-                    time.sleep(timeout)
-                return False
-
-    __enter__ = acquire
-
-    def __exit__(self, typ, val, tb):
-        self.release()
-
-    def release(self):
-        """Release the dummy lock."""
-        # XXX Perhaps shouldn't actually bother to test?  Could lead
-        #     to problems for complex, threaded code.
-        if not self.locked_status:
-            raise error
-        self.locked_status = False
-        return True
-
-    def locked(self):
-        return self.locked_status
-
-    def __repr__(self):
-        return "<%s %s.%s object at %s>" % (
-            "locked" if self.locked_status else "unlocked",
-            self.__class__.__module__,
-            self.__class__.__qualname__,
-            hex(id(self))
-        )
-
-
-class RLock(LockType):
-    """Dummy implementation of threading._RLock.
-
-    Re-entrant lock can be aquired multiple times and needs to be released
-    just as many times. This dummy implemention does not check wheter the
-    current thread actually owns the lock, but does accounting on the call
-    counts.
-    """
-    def __init__(self):
-        super().__init__()
-        self._levels = 0
-
-    def acquire(self, waitflag=None, timeout=-1):
-        """Aquire the lock, can be called multiple times in succession.
-        """
-        locked = super().acquire(waitflag, timeout)
-        if locked:
-            self._levels += 1
-        return locked
-
-    def release(self):
-        """Release needs to be called once for every call to acquire().
-        """
-        if self._levels == 0:
-            raise error
-        if self._levels == 1:
-            super().release()
-        self._levels -= 1
-
-# Used to signal that interrupt_main was called in a "thread"
-_interrupt = False
-# True when not executing in a "thread"
-_main = True
-
-def interrupt_main():
-    """Set _interrupt flag to True to have start_new_thread raise
-    KeyboardInterrupt upon exiting."""
-    if _main:
-        raise KeyboardInterrupt
-    else:
-        global _interrupt
-        _interrupt = True
diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py
index e9efce7..37975fe 100644
--- a/Lib/_osx_support.py
+++ b/Lib/_osx_support.py
@@ -52,7 +52,7 @@
         return executable
 
 
-def _read_output(commandstring):
+def _read_output(commandstring, capture_stderr=False):
     """Output from successful command execution or None"""
     # Similar to os.popen(commandstring, "r").read(),
     # but without actually using os.popen because that
@@ -67,7 +67,10 @@
             os.getpid(),), "w+b")
 
     with contextlib.closing(fp) as fp:
-        cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name)
+        if capture_stderr:
+            cmd = "%s >'%s' 2>&1" % (commandstring, fp.name)
+        else:
+            cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name)
         return fp.read().decode('utf-8').strip() if not os.system(cmd) else None
 
 
@@ -110,6 +113,26 @@
 
     return _SYSTEM_VERSION
 
+_SYSTEM_VERSION_TUPLE = None
+def _get_system_version_tuple():
+    """
+    Return the macOS system version as a tuple
+
+    The return value is safe to use to compare
+    two version numbers.
+    """
+    global _SYSTEM_VERSION_TUPLE
+    if _SYSTEM_VERSION_TUPLE is None:
+        osx_version = _get_system_version()
+        if osx_version:
+            try:
+                _SYSTEM_VERSION_TUPLE = tuple(int(i) for i in osx_version.split('.'))
+            except ValueError:
+                _SYSTEM_VERSION_TUPLE = ()
+
+    return _SYSTEM_VERSION_TUPLE
+
+
 def _remove_original_values(_config_vars):
     """Remove original unmodified values for testing"""
     # This is needed for higher-level cross-platform tests of get_platform.
@@ -125,6 +148,33 @@
         _config_vars[_INITPRE + cv] = oldvalue
     _config_vars[cv] = newvalue
 
+
+_cache_default_sysroot = None
+def _default_sysroot(cc):
+    """ Returns the root of the default SDK for this system, or '/' """
+    global _cache_default_sysroot
+
+    if _cache_default_sysroot is not None:
+        return _cache_default_sysroot
+   
+    contents = _read_output('%s -c -E -v - </dev/null' % (cc,), True)
+    in_incdirs = False   
+    for line in contents.splitlines():
+        if line.startswith("#include <...>"):
+            in_incdirs = True
+        elif line.startswith("End of search list"):
+            in_incdirs = False
+        elif in_incdirs:
+            line = line.strip()
+            if line == '/usr/include':
+                _cache_default_sysroot = '/'
+            elif line.endswith(".sdk/usr/include"):
+                _cache_default_sysroot = line[:-12]
+    if _cache_default_sysroot is None:
+        _cache_default_sysroot = '/'
+
+    return _cache_default_sysroot
+
 def _supports_universal_builds():
     """Returns True if universal builds are supported on this system"""
     # As an approximation, we assume that if we are running on 10.4 or above,
@@ -132,14 +182,18 @@
     # builds, in particular -isysroot and -arch arguments to the compiler. This
     # is in support of allowing 10.4 universal builds to run on 10.3.x systems.
 
-    osx_version = _get_system_version()
-    if osx_version:
-        try:
-            osx_version = tuple(int(i) for i in osx_version.split('.'))
-        except ValueError:
-            osx_version = ''
+    osx_version = _get_system_version_tuple()
     return bool(osx_version >= (10, 4)) if osx_version else False
 
+def _supports_arm64_builds():
+    """Returns True if arm64 builds are supported on this system"""
+    # There are two sets of systems supporting macOS/arm64 builds:
+    # 1. macOS 11 and later, unconditionally
+    # 2. macOS 10.15 with Xcode 12.2 or later
+    # For now the second category is ignored.
+    osx_version = _get_system_version_tuple()
+    return osx_version >= (11, 0) if osx_version else False
+
 
 def _find_appropriate_compiler(_config_vars):
     """Find appropriate C compiler for extension module builds"""
@@ -331,6 +385,12 @@
             except ValueError:
                 break
 
+    elif not _supports_arm64_builds():
+        # Look for "-arch arm64" and drop that
+        for idx in reversed(range(len(compiler_so))):
+            if compiler_so[idx] == '-arch' and compiler_so[idx+1] == "arm64":
+                del compiler_so[idx:idx+2]
+
     if 'ARCHFLAGS' in os.environ and not stripArch:
         # User specified different -arch flags in the environ,
         # see also distutils.sysconfig
@@ -481,6 +541,8 @@
 
             if len(archs) == 1:
                 machine = archs[0]
+            elif archs == ('arm64', 'x86_64'):
+                machine = 'universal2'
             elif archs == ('i386', 'ppc'):
                 machine = 'fat'
             elif archs == ('i386', 'x86_64'):
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index fd31b8c..4804ed2 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -36,6 +36,8 @@
 # Does io.IOBase finalizer log the exception if the close() method fails?
 # The exception is ignored silently by default in release build.
 _IOBASE_EMITS_UNRAISABLE = (hasattr(sys, "gettotalrefcount") or sys.flags.dev_mode)
+# Does open() check its 'errors' argument?
+_CHECK_ERRORS = _IOBASE_EMITS_UNRAISABLE
 
 
 def open(file, mode="r", buffering=-1, encoding=None, errors=None,
@@ -802,6 +804,9 @@
         return pos
 
     def truncate(self, pos=None):
+        self._checkClosed()
+        self._checkWritable()
+
         # Flush the stream.  We're mixing buffered I/O with lower-level I/O,
         # and a flush may be necessary to synch both views of the current
         # file state.
@@ -1571,7 +1576,7 @@
                     raise IsADirectoryError(errno.EISDIR,
                                             os.strerror(errno.EISDIR), file)
             except AttributeError:
-                # Ignore the AttribueError if stat.S_ISDIR or errno.EISDIR
+                # Ignore the AttributeError if stat.S_ISDIR or errno.EISDIR
                 # don't exist.
                 pass
             self._blksize = getattr(fdfstat, 'st_blksize', 0)
@@ -2026,6 +2031,8 @@
         else:
             if not isinstance(errors, str):
                 raise ValueError("invalid errors: %r" % errors)
+            if _CHECK_ERRORS:
+                codecs.lookup_error(errors)
 
         self._buffer = buffer
         self._decoded_chars = ''  # buffer for text returned from decoder
@@ -2295,7 +2302,7 @@
         return not eof
 
     def _pack_cookie(self, position, dec_flags=0,
-                           bytes_to_feed=0, need_eof=0, chars_to_skip=0):
+                           bytes_to_feed=0, need_eof=False, chars_to_skip=0):
         # The meaning of a tell() cookie is: seek to position, set the
         # decoder flags to dec_flags, read bytes_to_feed bytes, feed them
         # into the decoder with need_eof as the EOF flag, then skip
@@ -2309,7 +2316,7 @@
         rest, dec_flags = divmod(rest, 1<<64)
         rest, bytes_to_feed = divmod(rest, 1<<64)
         need_eof, chars_to_skip = divmod(rest, 1<<64)
-        return position, dec_flags, bytes_to_feed, need_eof, chars_to_skip
+        return position, dec_flags, bytes_to_feed, bool(need_eof), chars_to_skip
 
     def tell(self):
         if not self._seekable:
@@ -2383,7 +2390,7 @@
             # (a point where the decoder has nothing buffered, so seek()
             # can safely start from there and advance to this location).
             bytes_fed = 0
-            need_eof = 0
+            need_eof = False
             # Chars decoded since `start_pos`
             chars_decoded = 0
             for i in range(skip_bytes, len(next_input)):
@@ -2400,7 +2407,7 @@
             else:
                 # We didn't get enough decoded data; signal EOF to get more.
                 chars_decoded += len(decoder.decode(b'', final=True))
-                need_eof = 1
+                need_eof = True
                 if chars_decoded < chars_to_skip:
                     raise OSError("can't reconstruct logical file position")
 
diff --git a/Lib/_strptime.py b/Lib/_strptime.py
index f4f3c0b..5df37f5 100644
--- a/Lib/_strptime.py
+++ b/Lib/_strptime.py
@@ -182,7 +182,7 @@
             self.locale_time = LocaleTime()
         base = super()
         base.__init__({
-            # The " \d" part of the regex is to make %c from ANSI C work
+            # The " [1-9]" part of the regex is to make %c from ANSI C work
             'd': r"(?P<d>3[0-1]|[1-2]\d|0[1-9]|[1-9]| [1-9])",
             'f': r"(?P<f>[0-9]{1,6})",
             'H': r"(?P<H>2[0-3]|[0-1]\d|\d)",
diff --git a/Lib/_weakrefset.py b/Lib/_weakrefset.py
index 7a84823..b267780 100644
--- a/Lib/_weakrefset.py
+++ b/Lib/_weakrefset.py
@@ -3,6 +3,7 @@
 # by abc.py to load everything else at startup.
 
 from _weakref import ref
+from types import GenericAlias
 
 __all__ = ['WeakSet']
 
@@ -197,3 +198,5 @@
 
     def __repr__(self):
         return repr(self.data)
+
+    __class_getitem__ = classmethod(GenericAlias)
diff --git a/Lib/aifc.py b/Lib/aifc.py
index 1916e7e..ed5da7d 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -138,7 +138,7 @@
 import builtins
 import warnings
 
-__all__ = ["Error", "open", "openfp"]
+__all__ = ["Error", "open"]
 
 class Error(Exception):
     pass
@@ -920,10 +920,6 @@
     else:
         raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
 
-def openfp(f, mode=None):
-    warnings.warn("aifc.openfp is deprecated since Python 3.7. "
-                  "Use aifc.open instead.", DeprecationWarning, stacklevel=2)
-    return open(f, mode=mode)
 
 if __name__ == '__main__':
     import sys
diff --git a/Lib/antigravity.py b/Lib/antigravity.py
index c6f174c..6dc5207 100644
--- a/Lib/antigravity.py
+++ b/Lib/antigravity.py
@@ -12,6 +12,6 @@
 
     '''
     # https://xkcd.com/426/
-    h = hashlib.md5(datedow).hexdigest()
+    h = hashlib.md5(datedow, usedforsecurity=False).hexdigest()
     p, q = [('%f' % float.fromhex('0.' + x)) for x in (h[:16], h[16:32])]
     print('%d%s %d%s' % (latitude, p[1:], longitude, q[1:]))
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 2dad5f1..2fb1da5 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -67,6 +67,7 @@
     'ArgumentParser',
     'ArgumentError',
     'ArgumentTypeError',
+    'BooleanOptionalAction',
     'FileType',
     'HelpFormatter',
     'ArgumentDefaultsHelpFormatter',
@@ -86,7 +87,6 @@
 
 import os as _os
 import re as _re
-import shutil as _shutil
 import sys as _sys
 
 from gettext import gettext as _, ngettext
@@ -129,7 +129,7 @@
         return '%s(%s)' % (type_name, ', '.join(arg_strings))
 
     def _get_kwargs(self):
-        return sorted(self.__dict__.items())
+        return list(self.__dict__.items())
 
     def _get_args(self):
         return []
@@ -166,7 +166,8 @@
 
         # default setting for width
         if width is None:
-            width = _shutil.get_terminal_size().columns
+            import shutil
+            width = shutil.get_terminal_size().columns
             width -= 2
 
         self._prog = prog
@@ -263,7 +264,7 @@
                 invocations.append(get_invocation(subaction))
 
             # update the maximum item length
-            invocation_length = max([len(s) for s in invocations])
+            invocation_length = max(map(len, invocations))
             action_length = invocation_length + self._current_indent
             self._action_max_length = max(self._action_max_length,
                                           action_length)
@@ -454,7 +455,7 @@
                 # if the Optional doesn't take a value, format is:
                 #    -s or --long
                 if action.nargs == 0:
-                    part = '%s' % option_string
+                    part = action.format_usage()
 
                 # if the Optional takes a value, format is:
                 #    -s ARGS or --long ARGS
@@ -590,7 +591,11 @@
         elif action.nargs == OPTIONAL:
             result = '[%s]' % get_metavar(1)
         elif action.nargs == ZERO_OR_MORE:
-            result = '[%s [%s ...]]' % get_metavar(2)
+            metavar = get_metavar(1)
+            if len(metavar) == 2:
+                result = '[%s [%s ...]]' % metavar
+            else:
+                result = '[%s ...]' % metavar
         elif action.nargs == ONE_OR_MORE:
             result = '%s [%s ...]' % get_metavar(2)
         elif action.nargs == REMAINDER:
@@ -842,9 +847,52 @@
         ]
         return [(name, getattr(self, name)) for name in names]
 
+    def format_usage(self):
+        return self.option_strings[0]
+
     def __call__(self, parser, namespace, values, option_string=None):
         raise NotImplementedError(_('.__call__() not defined'))
 
+class BooleanOptionalAction(Action):
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 default=None,
+                 type=None,
+                 choices=None,
+                 required=False,
+                 help=None,
+                 metavar=None):
+
+        _option_strings = []
+        for option_string in option_strings:
+            _option_strings.append(option_string)
+
+            if option_string.startswith('--'):
+                option_string = '--no-' + option_string[2:]
+                _option_strings.append(option_string)
+
+        if help is not None and default is not None:
+            help += f" (default: {default})"
+
+        super().__init__(
+            option_strings=_option_strings,
+            dest=dest,
+            nargs=0,
+            default=default,
+            type=type,
+            choices=choices,
+            required=required,
+            help=help,
+            metavar=metavar)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        if option_string in self.option_strings:
+            setattr(namespace, self.dest, not option_string.startswith('--no-'))
+
+    def format_usage(self):
+        return ' | '.join(self.option_strings)
+
 
 class _StoreAction(Action):
 
@@ -1490,10 +1538,8 @@
 
             # strings starting with two prefix characters are long options
             option_strings.append(option_string)
-            if option_string[0] in self.prefix_chars:
-                if len(option_string) > 1:
-                    if option_string[1] in self.prefix_chars:
-                        long_option_strings.append(option_string)
+            if len(option_string) > 1 and option_string[1] in self.prefix_chars:
+                long_option_strings.append(option_string)
 
         # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x'
         dest = kwargs.pop('dest', None)
@@ -1633,6 +1679,8 @@
         - conflict_handler -- String indicating how to handle conflicts
         - add_help -- Add a -h/-help option
         - allow_abbrev -- Allow long options to be abbreviated unambiguously
+        - exit_on_error -- Determines whether or not ArgumentParser exits with
+            error info when an error occurs
     """
 
     def __init__(self,
@@ -1647,7 +1695,8 @@
                  argument_default=None,
                  conflict_handler='error',
                  add_help=True,
-                 allow_abbrev=True):
+                 allow_abbrev=True,
+                 exit_on_error=True):
 
         superinit = super(ArgumentParser, self).__init__
         superinit(description=description,
@@ -1666,6 +1715,7 @@
         self.fromfile_prefix_chars = fromfile_prefix_chars
         self.add_help = add_help
         self.allow_abbrev = allow_abbrev
+        self.exit_on_error = exit_on_error
 
         add_group = self.add_argument_group
         self._positionals = add_group(_('positional arguments'))
@@ -1796,15 +1846,19 @@
                 setattr(namespace, dest, self._defaults[dest])
 
         # parse the arguments and exit if there are any errors
-        try:
+        if self.exit_on_error:
+            try:
+                namespace, args = self._parse_known_args(args, namespace)
+            except ArgumentError:
+                err = _sys.exc_info()[1]
+                self.error(str(err))
+        else:
             namespace, args = self._parse_known_args(args, namespace)
-            if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
-                args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
-                delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
-            return namespace, args
-        except ArgumentError:
-            err = _sys.exc_info()[1]
-            self.error(str(err))
+
+        if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
+            args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
+            delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
+        return namespace, args
 
     def _parse_known_args(self, arg_strings, namespace):
         # replace arg strings that are file references
diff --git a/Lib/ast.py b/Lib/ast.py
index 99a1148..ecd4895 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -24,7 +24,10 @@
     :copyright: Copyright 2008 by Armin Ronacher.
     :license: Python License.
 """
+import sys
 from _ast import *
+from contextlib import contextmanager, nullcontext
+from enum import IntEnum, auto
 
 
 def parse(source, filename='<unknown>', mode='exec', *,
@@ -82,6 +85,9 @@
             return list(map(_convert, node.elts))
         elif isinstance(node, Set):
             return set(map(_convert, node.elts))
+        elif (isinstance(node, Call) and isinstance(node.func, Name) and
+              node.func.id == 'set' and node.args == node.keywords == []):
+            return set()
         elif isinstance(node, Dict):
             if len(node.keys) != len(node.values):
                 _raise_malformed_node(node)
@@ -99,7 +105,7 @@
     return _convert(node_or_string)
 
 
-def dump(node, annotate_fields=True, include_attributes=False):
+def dump(node, annotate_fields=True, include_attributes=False, *, indent=None):
     """
     Return a formatted dump of the tree in node.  This is mainly useful for
     debugging purposes.  If annotate_fields is true (by default),
@@ -107,35 +113,63 @@
     If annotate_fields is false, the result string will be more compact by
     omitting unambiguous field names.  Attributes such as line
     numbers and column offsets are not dumped by default.  If this is wanted,
-    include_attributes can be set to true.
+    include_attributes can be set to true.  If indent is a non-negative
+    integer or string, then the tree will be pretty-printed with that indent
+    level. None (the default) selects the single line representation.
     """
-    def _format(node):
+    def _format(node, level=0):
+        if indent is not None:
+            level += 1
+            prefix = '\n' + indent * level
+            sep = ',\n' + indent * level
+        else:
+            prefix = ''
+            sep = ', '
         if isinstance(node, AST):
+            cls = type(node)
             args = []
+            allsimple = True
             keywords = annotate_fields
-            for field in node._fields:
+            for name in node._fields:
                 try:
-                    value = getattr(node, field)
+                    value = getattr(node, name)
                 except AttributeError:
                     keywords = True
+                    continue
+                if value is None and getattr(cls, name, ...) is None:
+                    keywords = True
+                    continue
+                value, simple = _format(value, level)
+                allsimple = allsimple and simple
+                if keywords:
+                    args.append('%s=%s' % (name, value))
                 else:
-                    if keywords:
-                        args.append('%s=%s' % (field, _format(value)))
-                    else:
-                        args.append(_format(value))
+                    args.append(value)
             if include_attributes and node._attributes:
-                for a in node._attributes:
+                for name in node._attributes:
                     try:
-                        args.append('%s=%s' % (a, _format(getattr(node, a))))
+                        value = getattr(node, name)
                     except AttributeError:
-                        pass
-            return '%s(%s)' % (node.__class__.__name__, ', '.join(args))
+                        continue
+                    if value is None and getattr(cls, name, ...) is None:
+                        continue
+                    value, simple = _format(value, level)
+                    allsimple = allsimple and simple
+                    args.append('%s=%s' % (name, value))
+            if allsimple and len(args) <= 3:
+                return '%s(%s)' % (node.__class__.__name__, ', '.join(args)), not args
+            return '%s(%s%s)' % (node.__class__.__name__, prefix, sep.join(args)), False
         elif isinstance(node, list):
-            return '[%s]' % ', '.join(_format(x) for x in node)
-        return repr(node)
+            if not node:
+                return '[]', True
+            return '[%s%s]' % (prefix, sep.join(_format(x, level)[0] for x in node)), False
+        return repr(node), True
+
     if not isinstance(node, AST):
         raise TypeError('expected AST, got %r' % node.__class__.__name__)
-    return _format(node)
+    if indent is not None and not isinstance(indent, str):
+        indent = ' ' * indent
+    return _format(node)[0]
 
 
 def copy_location(new_node, old_node):
@@ -144,9 +178,14 @@
     attributes) from *old_node* to *new_node* if possible, and return *new_node*.
     """
     for attr in 'lineno', 'col_offset', 'end_lineno', 'end_col_offset':
-        if attr in old_node._attributes and attr in new_node._attributes \
-           and hasattr(old_node, attr):
-            setattr(new_node, attr, getattr(old_node, attr))
+        if attr in old_node._attributes and attr in new_node._attributes:
+            value = getattr(old_node, attr, None)
+            # end_lineno and end_col_offset are optional attributes, and they
+            # should be copied whether the value is None or not.
+            if value is not None or (
+                hasattr(old_node, attr) and attr.startswith("end_")
+            ):
+                setattr(new_node, attr, value)
     return new_node
 
 
@@ -165,7 +204,7 @@
             else:
                 lineno = node.lineno
         if 'end_lineno' in node._attributes:
-            if not hasattr(node, 'end_lineno'):
+            if getattr(node, 'end_lineno', None) is None:
                 node.end_lineno = end_lineno
             else:
                 end_lineno = node.end_lineno
@@ -175,7 +214,7 @@
             else:
                 col_offset = node.col_offset
         if 'end_col_offset' in node._attributes:
-            if not hasattr(node, 'end_col_offset'):
+            if getattr(node, 'end_col_offset', None) is None:
                 node.end_col_offset = end_col_offset
             else:
                 end_col_offset = node.end_col_offset
@@ -194,8 +233,11 @@
     for child in walk(node):
         if 'lineno' in child._attributes:
             child.lineno = getattr(child, 'lineno', 0) + n
-        if 'end_lineno' in child._attributes:
-            child.end_lineno = getattr(child, 'end_lineno', 0) + n
+        if (
+            "end_lineno" in child._attributes
+            and (end_lineno := getattr(child, "end_lineno", 0)) is not None
+        ):
+            child.end_lineno = end_lineno + n
     return node
 
 
@@ -277,7 +319,7 @@
 
 
 def _pad_whitespace(source):
-    """Replace all chars except '\f\t' in a line with spaces."""
+    r"""Replace all chars except '\f\t' in a line with spaces."""
     result = ''
     for c in source:
         if c in '\f\t':
@@ -297,6 +339,8 @@
     be padded with spaces to match its original position.
     """
     try:
+        if node.end_lineno is None or node.end_col_offset is None:
+            return None
         lineno = node.lineno - 1
         end_lineno = node.end_lineno - 1
         col_offset = node.col_offset
@@ -389,7 +433,7 @@
             else:
                 import warnings
                 warnings.warn(f"{method} is deprecated; add visit_Constant",
-                              PendingDeprecationWarning, 2)
+                              DeprecationWarning, 2)
                 return visitor(node)
         return self.generic_visit(node)
 
@@ -413,7 +457,7 @@
            def visit_Name(self, node):
                return Subscript(
                    value=Name(id='data', ctx=Load()),
-                   slice=Index(value=Str(s=node.id)),
+                   slice=Constant(value=node.id),
                    ctx=node.ctx
                )
 
@@ -453,20 +497,26 @@
         return node
 
 
-# The following code is for backward compatibility.
-# It will be removed in future.
+# If the ast module is loaded more than once, only add deprecated methods once
+if not hasattr(Constant, 'n'):
+    # The following code is for backward compatibility.
+    # It will be removed in future.
 
-def _getter(self):
-    return self.value
+    def _getter(self):
+        """Deprecated. Use value instead."""
+        return self.value
 
-def _setter(self, value):
-    self.value = value
+    def _setter(self, value):
+        self.value = value
 
-Constant.n = property(_getter, _setter)
-Constant.s = property(_getter, _setter)
+    Constant.n = property(_getter, _setter)
+    Constant.s = property(_getter, _setter)
 
 class _ABC(type):
 
+    def __init__(cls, *args):
+        cls.__doc__ = """Deprecated AST node class. Use ast.Constant instead"""
+
     def __instancecheck__(cls, inst):
         if not isinstance(inst, Constant):
             return False
@@ -527,6 +577,7 @@
 _const_types_not = {
     Num: (bool,),
 }
+
 _const_node_type_names = {
     bool: 'NameConstant',  # should be before int
     type(None): 'NameConstant',
@@ -537,3 +588,1005 @@
     bytes: 'Bytes',
     type(...): 'Ellipsis',
 }
+
+class slice(AST):
+    """Deprecated AST node class."""
+
+class Index(slice):
+    """Deprecated AST node class. Use the index value directly instead."""
+    def __new__(cls, value, **kwargs):
+        return value
+
+class ExtSlice(slice):
+    """Deprecated AST node class. Use ast.Tuple instead."""
+    def __new__(cls, dims=(), **kwargs):
+        return Tuple(list(dims), Load(), **kwargs)
+
+# If the ast module is loaded more than once, only add deprecated methods once
+if not hasattr(Tuple, 'dims'):
+    # The following code is for backward compatibility.
+    # It will be removed in future.
+
+    def _dims_getter(self):
+        """Deprecated. Use elts instead."""
+        return self.elts
+
+    def _dims_setter(self, value):
+        self.elts = value
+
+    Tuple.dims = property(_dims_getter, _dims_setter)
+
+class Suite(mod):
+    """Deprecated AST node class.  Unused in Python 3."""
+
+class AugLoad(expr_context):
+    """Deprecated AST node class.  Unused in Python 3."""
+
+class AugStore(expr_context):
+    """Deprecated AST node class.  Unused in Python 3."""
+
+class Param(expr_context):
+    """Deprecated AST node class.  Unused in Python 3."""
+
+
+# Large float and imaginary literals get turned into infinities in the AST.
+# We unparse those infinities to INFSTR.
+_INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
+
+class _Precedence(IntEnum):
+    """Precedence table that originated from python grammar."""
+
+    TUPLE = auto()
+    YIELD = auto()           # 'yield', 'yield from'
+    TEST = auto()            # 'if'-'else', 'lambda'
+    OR = auto()              # 'or'
+    AND = auto()             # 'and'
+    NOT = auto()             # 'not'
+    CMP = auto()             # '<', '>', '==', '>=', '<=', '!=',
+                             # 'in', 'not in', 'is', 'is not'
+    EXPR = auto()
+    BOR = EXPR               # '|'
+    BXOR = auto()            # '^'
+    BAND = auto()            # '&'
+    SHIFT = auto()           # '<<', '>>'
+    ARITH = auto()           # '+', '-'
+    TERM = auto()            # '*', '@', '/', '%', '//'
+    FACTOR = auto()          # unary '+', '-', '~'
+    POWER = auto()           # '**'
+    AWAIT = auto()           # 'await'
+    ATOM = auto()
+
+    def next(self):
+        try:
+            return self.__class__(self + 1)
+        except ValueError:
+            return self
+
+
+_SINGLE_QUOTES = ("'", '"')
+_MULTI_QUOTES = ('"""', "'''")
+_ALL_QUOTES = (*_SINGLE_QUOTES, *_MULTI_QUOTES)
+
+class _Unparser(NodeVisitor):
+    """Methods in this class recursively traverse an AST and
+    output source code for the abstract syntax; original formatting
+    is disregarded."""
+
+    def __init__(self, *, _avoid_backslashes=False):
+        self._source = []
+        self._buffer = []
+        self._precedences = {}
+        self._type_ignores = {}
+        self._indent = 0
+        self._avoid_backslashes = _avoid_backslashes
+
+    def interleave(self, inter, f, seq):
+        """Call f on each item in seq, calling inter() in between."""
+        seq = iter(seq)
+        try:
+            f(next(seq))
+        except StopIteration:
+            pass
+        else:
+            for x in seq:
+                inter()
+                f(x)
+
+    def items_view(self, traverser, items):
+        """Traverse and separate the given *items* with a comma and append it to
+        the buffer. If *items* is a single item sequence, a trailing comma
+        will be added."""
+        if len(items) == 1:
+            traverser(items[0])
+            self.write(",")
+        else:
+            self.interleave(lambda: self.write(", "), traverser, items)
+
+    def maybe_newline(self):
+        """Adds a newline if it isn't the start of generated source"""
+        if self._source:
+            self.write("\n")
+
+    def fill(self, text=""):
+        """Indent a piece of text and append it, according to the current
+        indentation level"""
+        self.maybe_newline()
+        self.write("    " * self._indent + text)
+
+    def write(self, text):
+        """Append a piece of text"""
+        self._source.append(text)
+
+    def buffer_writer(self, text):
+        self._buffer.append(text)
+
+    @property
+    def buffer(self):
+        value = "".join(self._buffer)
+        self._buffer.clear()
+        return value
+
+    @contextmanager
+    def block(self, *, extra = None):
+        """A context manager for preparing the source for blocks. It adds
+        the character':', increases the indentation on enter and decreases
+        the indentation on exit. If *extra* is given, it will be directly
+        appended after the colon character.
+        """
+        self.write(":")
+        if extra:
+            self.write(extra)
+        self._indent += 1
+        yield
+        self._indent -= 1
+
+    @contextmanager
+    def delimit(self, start, end):
+        """A context manager for preparing the source for expressions. It adds
+        *start* to the buffer and enters, after exit it adds *end*."""
+
+        self.write(start)
+        yield
+        self.write(end)
+
+    def delimit_if(self, start, end, condition):
+        if condition:
+            return self.delimit(start, end)
+        else:
+            return nullcontext()
+
+    def require_parens(self, precedence, node):
+        """Shortcut to adding precedence related parens"""
+        return self.delimit_if("(", ")", self.get_precedence(node) > precedence)
+
+    def get_precedence(self, node):
+        return self._precedences.get(node, _Precedence.TEST)
+
+    def set_precedence(self, precedence, *nodes):
+        for node in nodes:
+            self._precedences[node] = precedence
+
+    def get_raw_docstring(self, node):
+        """If a docstring node is found in the body of the *node* parameter,
+        return that docstring node, None otherwise.
+
+        Logic mirrored from ``_PyAST_GetDocString``."""
+        if not isinstance(
+            node, (AsyncFunctionDef, FunctionDef, ClassDef, Module)
+        ) or len(node.body) < 1:
+            return None
+        node = node.body[0]
+        if not isinstance(node, Expr):
+            return None
+        node = node.value
+        if isinstance(node, Constant) and isinstance(node.value, str):
+            return node
+
+    def get_type_comment(self, node):
+        comment = self._type_ignores.get(node.lineno) or node.type_comment
+        if comment is not None:
+            return f" # type: {comment}"
+
+    def traverse(self, node):
+        if isinstance(node, list):
+            for item in node:
+                self.traverse(item)
+        else:
+            super().visit(node)
+
+    def visit(self, node):
+        """Outputs a source code string that, if converted back to an ast
+        (using ast.parse) will generate an AST equivalent to *node*"""
+        self._source = []
+        self.traverse(node)
+        return "".join(self._source)
+
+    def _write_docstring_and_traverse_body(self, node):
+        if (docstring := self.get_raw_docstring(node)):
+            self._write_docstring(docstring)
+            self.traverse(node.body[1:])
+        else:
+            self.traverse(node.body)
+
+    def visit_Module(self, node):
+        self._type_ignores = {
+            ignore.lineno: f"ignore{ignore.tag}"
+            for ignore in node.type_ignores
+        }
+        self._write_docstring_and_traverse_body(node)
+        self._type_ignores.clear()
+
+    def visit_FunctionType(self, node):
+        with self.delimit("(", ")"):
+            self.interleave(
+                lambda: self.write(", "), self.traverse, node.argtypes
+            )
+
+        self.write(" -> ")
+        self.traverse(node.returns)
+
+    def visit_Expr(self, node):
+        self.fill()
+        self.set_precedence(_Precedence.YIELD, node.value)
+        self.traverse(node.value)
+
+    def visit_NamedExpr(self, node):
+        with self.require_parens(_Precedence.TUPLE, node):
+            self.set_precedence(_Precedence.ATOM, node.target, node.value)
+            self.traverse(node.target)
+            self.write(" := ")
+            self.traverse(node.value)
+
+    def visit_Import(self, node):
+        self.fill("import ")
+        self.interleave(lambda: self.write(", "), self.traverse, node.names)
+
+    def visit_ImportFrom(self, node):
+        self.fill("from ")
+        self.write("." * node.level)
+        if node.module:
+            self.write(node.module)
+        self.write(" import ")
+        self.interleave(lambda: self.write(", "), self.traverse, node.names)
+
+    def visit_Assign(self, node):
+        self.fill()
+        for target in node.targets:
+            self.traverse(target)
+            self.write(" = ")
+        self.traverse(node.value)
+        if type_comment := self.get_type_comment(node):
+            self.write(type_comment)
+
+    def visit_AugAssign(self, node):
+        self.fill()
+        self.traverse(node.target)
+        self.write(" " + self.binop[node.op.__class__.__name__] + "= ")
+        self.traverse(node.value)
+
+    def visit_AnnAssign(self, node):
+        self.fill()
+        with self.delimit_if("(", ")", not node.simple and isinstance(node.target, Name)):
+            self.traverse(node.target)
+        self.write(": ")
+        self.traverse(node.annotation)
+        if node.value:
+            self.write(" = ")
+            self.traverse(node.value)
+
+    def visit_Return(self, node):
+        self.fill("return")
+        if node.value:
+            self.write(" ")
+            self.traverse(node.value)
+
+    def visit_Pass(self, node):
+        self.fill("pass")
+
+    def visit_Break(self, node):
+        self.fill("break")
+
+    def visit_Continue(self, node):
+        self.fill("continue")
+
+    def visit_Delete(self, node):
+        self.fill("del ")
+        self.interleave(lambda: self.write(", "), self.traverse, node.targets)
+
+    def visit_Assert(self, node):
+        self.fill("assert ")
+        self.traverse(node.test)
+        if node.msg:
+            self.write(", ")
+            self.traverse(node.msg)
+
+    def visit_Global(self, node):
+        self.fill("global ")
+        self.interleave(lambda: self.write(", "), self.write, node.names)
+
+    def visit_Nonlocal(self, node):
+        self.fill("nonlocal ")
+        self.interleave(lambda: self.write(", "), self.write, node.names)
+
+    def visit_Await(self, node):
+        with self.require_parens(_Precedence.AWAIT, node):
+            self.write("await")
+            if node.value:
+                self.write(" ")
+                self.set_precedence(_Precedence.ATOM, node.value)
+                self.traverse(node.value)
+
+    def visit_Yield(self, node):
+        with self.require_parens(_Precedence.YIELD, node):
+            self.write("yield")
+            if node.value:
+                self.write(" ")
+                self.set_precedence(_Precedence.ATOM, node.value)
+                self.traverse(node.value)
+
+    def visit_YieldFrom(self, node):
+        with self.require_parens(_Precedence.YIELD, node):
+            self.write("yield from ")
+            if not node.value:
+                raise ValueError("Node can't be used without a value attribute.")
+            self.set_precedence(_Precedence.ATOM, node.value)
+            self.traverse(node.value)
+
+    def visit_Raise(self, node):
+        self.fill("raise")
+        if not node.exc:
+            if node.cause:
+                raise ValueError(f"Node can't use cause without an exception.")
+            return
+        self.write(" ")
+        self.traverse(node.exc)
+        if node.cause:
+            self.write(" from ")
+            self.traverse(node.cause)
+
+    def visit_Try(self, node):
+        self.fill("try")
+        with self.block():
+            self.traverse(node.body)
+        for ex in node.handlers:
+            self.traverse(ex)
+        if node.orelse:
+            self.fill("else")
+            with self.block():
+                self.traverse(node.orelse)
+        if node.finalbody:
+            self.fill("finally")
+            with self.block():
+                self.traverse(node.finalbody)
+
+    def visit_ExceptHandler(self, node):
+        self.fill("except")
+        if node.type:
+            self.write(" ")
+            self.traverse(node.type)
+        if node.name:
+            self.write(" as ")
+            self.write(node.name)
+        with self.block():
+            self.traverse(node.body)
+
+    def visit_ClassDef(self, node):
+        self.maybe_newline()
+        for deco in node.decorator_list:
+            self.fill("@")
+            self.traverse(deco)
+        self.fill("class " + node.name)
+        with self.delimit_if("(", ")", condition = node.bases or node.keywords):
+            comma = False
+            for e in node.bases:
+                if comma:
+                    self.write(", ")
+                else:
+                    comma = True
+                self.traverse(e)
+            for e in node.keywords:
+                if comma:
+                    self.write(", ")
+                else:
+                    comma = True
+                self.traverse(e)
+
+        with self.block():
+            self._write_docstring_and_traverse_body(node)
+
+    def visit_FunctionDef(self, node):
+        self._function_helper(node, "def")
+
+    def visit_AsyncFunctionDef(self, node):
+        self._function_helper(node, "async def")
+
+    def _function_helper(self, node, fill_suffix):
+        self.maybe_newline()
+        for deco in node.decorator_list:
+            self.fill("@")
+            self.traverse(deco)
+        def_str = fill_suffix + " " + node.name
+        self.fill(def_str)
+        with self.delimit("(", ")"):
+            self.traverse(node.args)
+        if node.returns:
+            self.write(" -> ")
+            self.traverse(node.returns)
+        with self.block(extra=self.get_type_comment(node)):
+            self._write_docstring_and_traverse_body(node)
+
+    def visit_For(self, node):
+        self._for_helper("for ", node)
+
+    def visit_AsyncFor(self, node):
+        self._for_helper("async for ", node)
+
+    def _for_helper(self, fill, node):
+        self.fill(fill)
+        self.traverse(node.target)
+        self.write(" in ")
+        self.traverse(node.iter)
+        with self.block(extra=self.get_type_comment(node)):
+            self.traverse(node.body)
+        if node.orelse:
+            self.fill("else")
+            with self.block():
+                self.traverse(node.orelse)
+
+    def visit_If(self, node):
+        self.fill("if ")
+        self.traverse(node.test)
+        with self.block():
+            self.traverse(node.body)
+        # collapse nested ifs into equivalent elifs.
+        while node.orelse and len(node.orelse) == 1 and isinstance(node.orelse[0], If):
+            node = node.orelse[0]
+            self.fill("elif ")
+            self.traverse(node.test)
+            with self.block():
+                self.traverse(node.body)
+        # final else
+        if node.orelse:
+            self.fill("else")
+            with self.block():
+                self.traverse(node.orelse)
+
+    def visit_While(self, node):
+        self.fill("while ")
+        self.traverse(node.test)
+        with self.block():
+            self.traverse(node.body)
+        if node.orelse:
+            self.fill("else")
+            with self.block():
+                self.traverse(node.orelse)
+
+    def visit_With(self, node):
+        self.fill("with ")
+        self.interleave(lambda: self.write(", "), self.traverse, node.items)
+        with self.block(extra=self.get_type_comment(node)):
+            self.traverse(node.body)
+
+    def visit_AsyncWith(self, node):
+        self.fill("async with ")
+        self.interleave(lambda: self.write(", "), self.traverse, node.items)
+        with self.block(extra=self.get_type_comment(node)):
+            self.traverse(node.body)
+
+    def _str_literal_helper(
+        self, string, *, quote_types=_ALL_QUOTES, escape_special_whitespace=False
+    ):
+        """Helper for writing string literals, minimizing escapes.
+        Returns the tuple (string literal to write, possible quote types).
+        """
+        def escape_char(c):
+            # \n and \t are non-printable, but we only escape them if
+            # escape_special_whitespace is True
+            if not escape_special_whitespace and c in "\n\t":
+                return c
+            # Always escape backslashes and other non-printable characters
+            if c == "\\" or not c.isprintable():
+                return c.encode("unicode_escape").decode("ascii")
+            return c
+
+        escaped_string = "".join(map(escape_char, string))
+        possible_quotes = quote_types
+        if "\n" in escaped_string:
+            possible_quotes = [q for q in possible_quotes if q in _MULTI_QUOTES]
+        possible_quotes = [q for q in possible_quotes if q not in escaped_string]
+        if not possible_quotes:
+            # If there aren't any possible_quotes, fallback to using repr
+            # on the original string. Try to use a quote from quote_types,
+            # e.g., so that we use triple quotes for docstrings.
+            string = repr(string)
+            quote = next((q for q in quote_types if string[0] in q), string[0])
+            return string[1:-1], [quote]
+        if escaped_string:
+            # Sort so that we prefer '''"''' over """\""""
+            possible_quotes.sort(key=lambda q: q[0] == escaped_string[-1])
+            # If we're using triple quotes and we'd need to escape a final
+            # quote, escape it
+            if possible_quotes[0][0] == escaped_string[-1]:
+                assert len(possible_quotes[0]) == 3
+                escaped_string = escaped_string[:-1] + "\\" + escaped_string[-1]
+        return escaped_string, possible_quotes
+
+    def _write_str_avoiding_backslashes(self, string, *, quote_types=_ALL_QUOTES):
+        """Write string literal value with a best effort attempt to avoid backslashes."""
+        string, quote_types = self._str_literal_helper(string, quote_types=quote_types)
+        quote_type = quote_types[0]
+        self.write(f"{quote_type}{string}{quote_type}")
+
+    def visit_JoinedStr(self, node):
+        self.write("f")
+        if self._avoid_backslashes:
+            self._fstring_JoinedStr(node, self.buffer_writer)
+            self._write_str_avoiding_backslashes(self.buffer)
+            return
+
+        # If we don't need to avoid backslashes globally (i.e., we only need
+        # to avoid them inside FormattedValues), it's cosmetically preferred
+        # to use escaped whitespace. That is, it's preferred to use backslashes
+        # for cases like: f"{x}\n". To accomplish this, we keep track of what
+        # in our buffer corresponds to FormattedValues and what corresponds to
+        # Constant parts of the f-string, and allow escapes accordingly.
+        buffer = []
+        for value in node.values:
+            meth = getattr(self, "_fstring_" + type(value).__name__)
+            meth(value, self.buffer_writer)
+            buffer.append((self.buffer, isinstance(value, Constant)))
+        new_buffer = []
+        quote_types = _ALL_QUOTES
+        for value, is_constant in buffer:
+            # Repeatedly narrow down the list of possible quote_types
+            value, quote_types = self._str_literal_helper(
+                value, quote_types=quote_types,
+                escape_special_whitespace=is_constant
+            )
+            new_buffer.append(value)
+        value = "".join(new_buffer)
+        quote_type = quote_types[0]
+        self.write(f"{quote_type}{value}{quote_type}")
+
+    def visit_FormattedValue(self, node):
+        self.write("f")
+        self._fstring_FormattedValue(node, self.buffer_writer)
+        self._write_str_avoiding_backslashes(self.buffer)
+
+    def _fstring_JoinedStr(self, node, write):
+        for value in node.values:
+            meth = getattr(self, "_fstring_" + type(value).__name__)
+            meth(value, write)
+
+    def _fstring_Constant(self, node, write):
+        if not isinstance(node.value, str):
+            raise ValueError("Constants inside JoinedStr should be a string.")
+        value = node.value.replace("{", "{{").replace("}", "}}")
+        write(value)
+
+    def _fstring_FormattedValue(self, node, write):
+        write("{")
+        unparser = type(self)(_avoid_backslashes=True)
+        unparser.set_precedence(_Precedence.TEST.next(), node.value)
+        expr = unparser.visit(node.value)
+        if expr.startswith("{"):
+            write(" ")  # Separate pair of opening brackets as "{ {"
+        if "\\" in expr:
+            raise ValueError("Unable to avoid backslash in f-string expression part")
+        write(expr)
+        if node.conversion != -1:
+            conversion = chr(node.conversion)
+            if conversion not in "sra":
+                raise ValueError("Unknown f-string conversion.")
+            write(f"!{conversion}")
+        if node.format_spec:
+            write(":")
+            meth = getattr(self, "_fstring_" + type(node.format_spec).__name__)
+            meth(node.format_spec, write)
+        write("}")
+
+    def visit_Name(self, node):
+        self.write(node.id)
+
+    def _write_docstring(self, node):
+        self.fill()
+        if node.kind == "u":
+            self.write("u")
+        self._write_str_avoiding_backslashes(node.value, quote_types=_MULTI_QUOTES)
+
+    def _write_constant(self, value):
+        if isinstance(value, (float, complex)):
+            # Substitute overflowing decimal literal for AST infinities.
+            self.write(repr(value).replace("inf", _INFSTR))
+        elif self._avoid_backslashes and isinstance(value, str):
+            self._write_str_avoiding_backslashes(value)
+        else:
+            self.write(repr(value))
+
+    def visit_Constant(self, node):
+        value = node.value
+        if isinstance(value, tuple):
+            with self.delimit("(", ")"):
+                self.items_view(self._write_constant, value)
+        elif value is ...:
+            self.write("...")
+        else:
+            if node.kind == "u":
+                self.write("u")
+            self._write_constant(node.value)
+
+    def visit_List(self, node):
+        with self.delimit("[", "]"):
+            self.interleave(lambda: self.write(", "), self.traverse, node.elts)
+
+    def visit_ListComp(self, node):
+        with self.delimit("[", "]"):
+            self.traverse(node.elt)
+            for gen in node.generators:
+                self.traverse(gen)
+
+    def visit_GeneratorExp(self, node):
+        with self.delimit("(", ")"):
+            self.traverse(node.elt)
+            for gen in node.generators:
+                self.traverse(gen)
+
+    def visit_SetComp(self, node):
+        with self.delimit("{", "}"):
+            self.traverse(node.elt)
+            for gen in node.generators:
+                self.traverse(gen)
+
+    def visit_DictComp(self, node):
+        with self.delimit("{", "}"):
+            self.traverse(node.key)
+            self.write(": ")
+            self.traverse(node.value)
+            for gen in node.generators:
+                self.traverse(gen)
+
+    def visit_comprehension(self, node):
+        if node.is_async:
+            self.write(" async for ")
+        else:
+            self.write(" for ")
+        self.set_precedence(_Precedence.TUPLE, node.target)
+        self.traverse(node.target)
+        self.write(" in ")
+        self.set_precedence(_Precedence.TEST.next(), node.iter, *node.ifs)
+        self.traverse(node.iter)
+        for if_clause in node.ifs:
+            self.write(" if ")
+            self.traverse(if_clause)
+
+    def visit_IfExp(self, node):
+        with self.require_parens(_Precedence.TEST, node):
+            self.set_precedence(_Precedence.TEST.next(), node.body, node.test)
+            self.traverse(node.body)
+            self.write(" if ")
+            self.traverse(node.test)
+            self.write(" else ")
+            self.set_precedence(_Precedence.TEST, node.orelse)
+            self.traverse(node.orelse)
+
+    def visit_Set(self, node):
+        if not node.elts:
+            raise ValueError("Set node should have at least one item")
+        with self.delimit("{", "}"):
+            self.interleave(lambda: self.write(", "), self.traverse, node.elts)
+
+    def visit_Dict(self, node):
+        def write_key_value_pair(k, v):
+            self.traverse(k)
+            self.write(": ")
+            self.traverse(v)
+
+        def write_item(item):
+            k, v = item
+            if k is None:
+                # for dictionary unpacking operator in dicts {**{'y': 2}}
+                # see PEP 448 for details
+                self.write("**")
+                self.set_precedence(_Precedence.EXPR, v)
+                self.traverse(v)
+            else:
+                write_key_value_pair(k, v)
+
+        with self.delimit("{", "}"):
+            self.interleave(
+                lambda: self.write(", "), write_item, zip(node.keys, node.values)
+            )
+
+    def visit_Tuple(self, node):
+        with self.delimit("(", ")"):
+            self.items_view(self.traverse, node.elts)
+
+    unop = {"Invert": "~", "Not": "not", "UAdd": "+", "USub": "-"}
+    unop_precedence = {
+        "not": _Precedence.NOT,
+        "~": _Precedence.FACTOR,
+        "+": _Precedence.FACTOR,
+        "-": _Precedence.FACTOR,
+    }
+
+    def visit_UnaryOp(self, node):
+        operator = self.unop[node.op.__class__.__name__]
+        operator_precedence = self.unop_precedence[operator]
+        with self.require_parens(operator_precedence, node):
+            self.write(operator)
+            # factor prefixes (+, -, ~) shouldn't be seperated
+            # from the value they belong, (e.g: +1 instead of + 1)
+            if operator_precedence is not _Precedence.FACTOR:
+                self.write(" ")
+            self.set_precedence(operator_precedence, node.operand)
+            self.traverse(node.operand)
+
+    binop = {
+        "Add": "+",
+        "Sub": "-",
+        "Mult": "*",
+        "MatMult": "@",
+        "Div": "/",
+        "Mod": "%",
+        "LShift": "<<",
+        "RShift": ">>",
+        "BitOr": "|",
+        "BitXor": "^",
+        "BitAnd": "&",
+        "FloorDiv": "//",
+        "Pow": "**",
+    }
+
+    binop_precedence = {
+        "+": _Precedence.ARITH,
+        "-": _Precedence.ARITH,
+        "*": _Precedence.TERM,
+        "@": _Precedence.TERM,
+        "/": _Precedence.TERM,
+        "%": _Precedence.TERM,
+        "<<": _Precedence.SHIFT,
+        ">>": _Precedence.SHIFT,
+        "|": _Precedence.BOR,
+        "^": _Precedence.BXOR,
+        "&": _Precedence.BAND,
+        "//": _Precedence.TERM,
+        "**": _Precedence.POWER,
+    }
+
+    binop_rassoc = frozenset(("**",))
+    def visit_BinOp(self, node):
+        operator = self.binop[node.op.__class__.__name__]
+        operator_precedence = self.binop_precedence[operator]
+        with self.require_parens(operator_precedence, node):
+            if operator in self.binop_rassoc:
+                left_precedence = operator_precedence.next()
+                right_precedence = operator_precedence
+            else:
+                left_precedence = operator_precedence
+                right_precedence = operator_precedence.next()
+
+            self.set_precedence(left_precedence, node.left)
+            self.traverse(node.left)
+            self.write(f" {operator} ")
+            self.set_precedence(right_precedence, node.right)
+            self.traverse(node.right)
+
+    cmpops = {
+        "Eq": "==",
+        "NotEq": "!=",
+        "Lt": "<",
+        "LtE": "<=",
+        "Gt": ">",
+        "GtE": ">=",
+        "Is": "is",
+        "IsNot": "is not",
+        "In": "in",
+        "NotIn": "not in",
+    }
+
+    def visit_Compare(self, node):
+        with self.require_parens(_Precedence.CMP, node):
+            self.set_precedence(_Precedence.CMP.next(), node.left, *node.comparators)
+            self.traverse(node.left)
+            for o, e in zip(node.ops, node.comparators):
+                self.write(" " + self.cmpops[o.__class__.__name__] + " ")
+                self.traverse(e)
+
+    boolops = {"And": "and", "Or": "or"}
+    boolop_precedence = {"and": _Precedence.AND, "or": _Precedence.OR}
+
+    def visit_BoolOp(self, node):
+        operator = self.boolops[node.op.__class__.__name__]
+        operator_precedence = self.boolop_precedence[operator]
+
+        def increasing_level_traverse(node):
+            nonlocal operator_precedence
+            operator_precedence = operator_precedence.next()
+            self.set_precedence(operator_precedence, node)
+            self.traverse(node)
+
+        with self.require_parens(operator_precedence, node):
+            s = f" {operator} "
+            self.interleave(lambda: self.write(s), increasing_level_traverse, node.values)
+
+    def visit_Attribute(self, node):
+        self.set_precedence(_Precedence.ATOM, node.value)
+        self.traverse(node.value)
+        # Special case: 3.__abs__() is a syntax error, so if node.value
+        # is an integer literal then we need to either parenthesize
+        # it or add an extra space to get 3 .__abs__().
+        if isinstance(node.value, Constant) and isinstance(node.value.value, int):
+            self.write(" ")
+        self.write(".")
+        self.write(node.attr)
+
+    def visit_Call(self, node):
+        self.set_precedence(_Precedence.ATOM, node.func)
+        self.traverse(node.func)
+        with self.delimit("(", ")"):
+            comma = False
+            for e in node.args:
+                if comma:
+                    self.write(", ")
+                else:
+                    comma = True
+                self.traverse(e)
+            for e in node.keywords:
+                if comma:
+                    self.write(", ")
+                else:
+                    comma = True
+                self.traverse(e)
+
+    def visit_Subscript(self, node):
+        def is_simple_tuple(slice_value):
+            # when unparsing a non-empty tuple, the parantheses can be safely
+            # omitted if there aren't any elements that explicitly requires
+            # parantheses (such as starred expressions).
+            return (
+                isinstance(slice_value, Tuple)
+                and slice_value.elts
+                and not any(isinstance(elt, Starred) for elt in slice_value.elts)
+            )
+
+        self.set_precedence(_Precedence.ATOM, node.value)
+        self.traverse(node.value)
+        with self.delimit("[", "]"):
+            if is_simple_tuple(node.slice):
+                self.items_view(self.traverse, node.slice.elts)
+            else:
+                self.traverse(node.slice)
+
+    def visit_Starred(self, node):
+        self.write("*")
+        self.set_precedence(_Precedence.EXPR, node.value)
+        self.traverse(node.value)
+
+    def visit_Ellipsis(self, node):
+        self.write("...")
+
+    def visit_Slice(self, node):
+        if node.lower:
+            self.traverse(node.lower)
+        self.write(":")
+        if node.upper:
+            self.traverse(node.upper)
+        if node.step:
+            self.write(":")
+            self.traverse(node.step)
+
+    def visit_arg(self, node):
+        self.write(node.arg)
+        if node.annotation:
+            self.write(": ")
+            self.traverse(node.annotation)
+
+    def visit_arguments(self, node):
+        first = True
+        # normal arguments
+        all_args = node.posonlyargs + node.args
+        defaults = [None] * (len(all_args) - len(node.defaults)) + node.defaults
+        for index, elements in enumerate(zip(all_args, defaults), 1):
+            a, d = elements
+            if first:
+                first = False
+            else:
+                self.write(", ")
+            self.traverse(a)
+            if d:
+                self.write("=")
+                self.traverse(d)
+            if index == len(node.posonlyargs):
+                self.write(", /")
+
+        # varargs, or bare '*' if no varargs but keyword-only arguments present
+        if node.vararg or node.kwonlyargs:
+            if first:
+                first = False
+            else:
+                self.write(", ")
+            self.write("*")
+            if node.vararg:
+                self.write(node.vararg.arg)
+                if node.vararg.annotation:
+                    self.write(": ")
+                    self.traverse(node.vararg.annotation)
+
+        # keyword-only arguments
+        if node.kwonlyargs:
+            for a, d in zip(node.kwonlyargs, node.kw_defaults):
+                self.write(", ")
+                self.traverse(a)
+                if d:
+                    self.write("=")
+                    self.traverse(d)
+
+        # kwargs
+        if node.kwarg:
+            if first:
+                first = False
+            else:
+                self.write(", ")
+            self.write("**" + node.kwarg.arg)
+            if node.kwarg.annotation:
+                self.write(": ")
+                self.traverse(node.kwarg.annotation)
+
+    def visit_keyword(self, node):
+        if node.arg is None:
+            self.write("**")
+        else:
+            self.write(node.arg)
+            self.write("=")
+        self.traverse(node.value)
+
+    def visit_Lambda(self, node):
+        with self.require_parens(_Precedence.TEST, node):
+            self.write("lambda ")
+            self.traverse(node.args)
+            self.write(": ")
+            self.set_precedence(_Precedence.TEST, node.body)
+            self.traverse(node.body)
+
+    def visit_alias(self, node):
+        self.write(node.name)
+        if node.asname:
+            self.write(" as " + node.asname)
+
+    def visit_withitem(self, node):
+        self.traverse(node.context_expr)
+        if node.optional_vars:
+            self.write(" as ")
+            self.traverse(node.optional_vars)
+
+def unparse(ast_obj):
+    unparser = _Unparser()
+    return unparser.visit(ast_obj)
+
+
+def main():
+    import argparse
+
+    parser = argparse.ArgumentParser(prog='python -m ast')
+    parser.add_argument('infile', type=argparse.FileType(mode='rb'), nargs='?',
+                        default='-',
+                        help='the file to parse; defaults to stdin')
+    parser.add_argument('-m', '--mode', default='exec',
+                        choices=('exec', 'single', 'eval', 'func_type'),
+                        help='specify what kind of code must be parsed')
+    parser.add_argument('--no-type-comments', default=True, action='store_false',
+                        help="don't add information about type comments")
+    parser.add_argument('-a', '--include-attributes', action='store_true',
+                        help='include attributes such as line numbers and '
+                             'column offsets')
+    parser.add_argument('-i', '--indent', type=int, default=3,
+                        help='indentation of nodes (number of spaces)')
+    args = parser.parse_args()
+
+    with args.infile as infile:
+        source = infile.read()
+    tree = parse(source, args.infile.name, args.mode, type_comments=args.no_type_comments)
+    print(dump(tree, include_attributes=args.include_attributes, indent=args.indent))
+
+if __name__ == '__main__':
+    main()
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index fc1146a..f4ba361 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -117,7 +117,7 @@
             data = self.recv(self.ac_in_buffer_size)
         except BlockingIOError:
             return
-        except OSError as why:
+        except OSError:
             self.handle_error()
             return
 
diff --git a/Lib/asyncio/__init__.py b/Lib/asyncio/__init__.py
index 28c2e2c..eb84bfb 100644
--- a/Lib/asyncio/__init__.py
+++ b/Lib/asyncio/__init__.py
@@ -17,6 +17,7 @@
 from .streams import *
 from .subprocess import *
 from .tasks import *
+from .threads import *
 from .transports import *
 
 # Exposed for _asynciomodule.c to implement now deprecated
@@ -35,6 +36,7 @@
            streams.__all__ +
            subprocess.__all__ +
            tasks.__all__ +
+           threads.__all__ +
            transports.__all__)
 
 if sys.platform == 'win32':  # pragma: no cover
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 799013d..b2d446a 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -410,6 +410,8 @@
         self._asyncgens = weakref.WeakSet()
         # Set to True when `loop.shutdown_asyncgens` is called.
         self._asyncgens_shutdown_called = False
+        # Set to True when `loop.shutdown_default_executor` is called.
+        self._executor_shutdown_called = False
 
     def __repr__(self):
         return (
@@ -507,6 +509,10 @@
         if self._closed:
             raise RuntimeError('Event loop is closed')
 
+    def _check_default_executor(self):
+        if self._executor_shutdown_called:
+            raise RuntimeError('Executor shutdown has been called')
+
     def _asyncgen_finalizer_hook(self, agen):
         self._asyncgens.discard(agen)
         if not self.is_closed():
@@ -547,6 +553,26 @@
                     'asyncgen': agen
                 })
 
+    async def shutdown_default_executor(self):
+        """Schedule the shutdown of the default executor."""
+        self._executor_shutdown_called = True
+        if self._default_executor is None:
+            return
+        future = self.create_future()
+        thread = threading.Thread(target=self._do_shutdown, args=(future,))
+        thread.start()
+        try:
+            await future
+        finally:
+            thread.join()
+
+    def _do_shutdown(self, future):
+        try:
+            self._default_executor.shutdown(wait=True)
+            self.call_soon_threadsafe(future.set_result, None)
+        except Exception as ex:
+            self.call_soon_threadsafe(future.set_exception, ex)
+
     def _check_running(self):
         if self.is_running():
             raise RuntimeError('This event loop is already running')
@@ -640,6 +666,7 @@
         self._closed = True
         self._ready.clear()
         self._scheduled.clear()
+        self._executor_shutdown_called = True
         executor = self._default_executor
         if executor is not None:
             self._default_executor = None
@@ -776,8 +803,12 @@
             self._check_callback(func, 'run_in_executor')
         if executor is None:
             executor = self._default_executor
+            # Only check when the default executor is being used
+            self._check_default_executor()
             if executor is None:
-                executor = concurrent.futures.ThreadPoolExecutor()
+                executor = concurrent.futures.ThreadPoolExecutor(
+                    thread_name_prefix='asyncio'
+                )
                 self._default_executor = executor
         return futures.wrap_future(
             executor.submit(func, *args), loop=self)
diff --git a/Lib/asyncio/base_futures.py b/Lib/asyncio/base_futures.py
index 22f2980..2c01ac9 100644
--- a/Lib/asyncio/base_futures.py
+++ b/Lib/asyncio/base_futures.py
@@ -1,6 +1,7 @@
 __all__ = ()
 
 import reprlib
+from _thread import get_ident
 
 from . import format_helpers
 
@@ -41,6 +42,16 @@
     return f'cb=[{cb}]'
 
 
+# bpo-42183: _repr_running is needed for repr protection
+# when a Future or Task result contains itself directly or indirectly.
+# The logic is borrowed from @reprlib.recursive_repr decorator.
+# Unfortunately, the direct decorator usage is impossible because of
+# AttributeError: '_asyncio.Task' object has no attribute '__module__' error.
+#
+# After fixing this thing we can return to the decorator based approach.
+_repr_running = set()
+
+
 def _future_repr_info(future):
     # (Future) -> str
     """helper function for Future.__repr__"""
@@ -49,9 +60,17 @@
         if future._exception is not None:
             info.append(f'exception={future._exception!r}')
         else:
-            # use reprlib to limit the length of the output, especially
-            # for very long strings
-            result = reprlib.repr(future._result)
+            key = id(future), get_ident()
+            if key in _repr_running:
+                result = '...'
+            else:
+                _repr_running.add(key)
+                try:
+                    # use reprlib to limit the length of the output, especially
+                    # for very long strings
+                    result = reprlib.repr(future._result)
+                finally:
+                    _repr_running.discard(key)
             info.append(f'result={result}')
     if future._callbacks:
         info.append(_format_callbacks(future._callbacks))
diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py
index ca08663..0dce87b 100644
--- a/Lib/asyncio/events.py
+++ b/Lib/asyncio/events.py
@@ -19,7 +19,6 @@
 import threading
 
 from . import format_helpers
-from . import exceptions
 
 
 class Handle:
@@ -119,20 +118,24 @@
         return hash(self._when)
 
     def __lt__(self, other):
-        return self._when < other._when
+        if isinstance(other, TimerHandle):
+            return self._when < other._when
+        return NotImplemented
 
     def __le__(self, other):
-        if self._when < other._when:
-            return True
-        return self.__eq__(other)
+        if isinstance(other, TimerHandle):
+            return self._when < other._when or self.__eq__(other)
+        return NotImplemented
 
     def __gt__(self, other):
-        return self._when > other._when
+        if isinstance(other, TimerHandle):
+            return self._when > other._when
+        return NotImplemented
 
     def __ge__(self, other):
-        if self._when > other._when:
-            return True
-        return self.__eq__(other)
+        if isinstance(other, TimerHandle):
+            return self._when > other._when or self.__eq__(other)
+        return NotImplemented
 
     def __eq__(self, other):
         if isinstance(other, TimerHandle):
@@ -142,10 +145,6 @@
                     self._cancelled == other._cancelled)
         return NotImplemented
 
-    def __ne__(self, other):
-        equal = self.__eq__(other)
-        return NotImplemented if equal is NotImplemented else not equal
-
     def cancel(self):
         if not self._cancelled:
             self._loop._timer_handle_cancelled(self)
@@ -249,6 +248,10 @@
         """Shutdown all active asynchronous generators."""
         raise NotImplementedError
 
+    async def shutdown_default_executor(self):
+        """Schedule the shutdown of the default executor."""
+        raise NotImplementedError
+
     # Methods scheduling callbacks.  All these return Handles.
 
     def _timer_handle_cancelled(self, handle):
@@ -280,7 +283,7 @@
     def call_soon_threadsafe(self, callback, *args):
         raise NotImplementedError
 
-    async def run_in_executor(self, executor, func, *args):
+    def run_in_executor(self, executor, func, *args):
         raise NotImplementedError
 
     def set_default_executor(self, executor):
@@ -393,7 +396,7 @@
         The return value is a Server object, which can be used to stop
         the service.
 
-        path is a str, representing a file systsem path to bind the
+        path is a str, representing a file system path to bind the
         server socket to.
 
         sock can optionally be specified in order to use a preexisting
@@ -632,7 +635,7 @@
         """
         if (self._local._loop is None and
                 not self._local._set_called and
-                isinstance(threading.current_thread(), threading._MainThread)):
+                threading.current_thread() is threading.main_thread()):
             self.set_event_loop(self.new_event_loop())
 
         if self._local._loop is None:
diff --git a/Lib/asyncio/exceptions.py b/Lib/asyncio/exceptions.py
index e03602e..f07e448 100644
--- a/Lib/asyncio/exceptions.py
+++ b/Lib/asyncio/exceptions.py
@@ -34,8 +34,9 @@
     - expected: total number of expected bytes (or None if unknown)
     """
     def __init__(self, partial, expected):
+        r_expected = 'undefined' if expected is None else repr(expected)
         super().__init__(f'{len(partial)} bytes read on a total of '
-                         f'{expected!r} expected bytes')
+                         f'{r_expected} expected bytes')
         self.partial = partial
         self.expected = expected
 
diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py
index 9afda22..bed4da5 100644
--- a/Lib/asyncio/futures.py
+++ b/Lib/asyncio/futures.py
@@ -51,6 +51,9 @@
     _exception = None
     _loop = None
     _source_traceback = None
+    _cancel_message = None
+    # A saved CancelledError for later chaining as an exception context.
+    _cancelled_exc = None
 
     # This field is used for a dual purpose:
     # - Its presence is a marker to declare that a class implements
@@ -103,6 +106,9 @@
             context['source_traceback'] = self._source_traceback
         self._loop.call_exception_handler(context)
 
+    def __class_getitem__(cls, type):
+        return cls
+
     @property
     def _log_traceback(self):
         return self.__log_traceback
@@ -120,7 +126,22 @@
             raise RuntimeError("Future object is not initialized.")
         return loop
 
-    def cancel(self):
+    def _make_cancelled_error(self):
+        """Create the CancelledError to raise if the Future is cancelled.
+
+        This should only be called once when handling a cancellation since
+        it erases the saved context exception value.
+        """
+        if self._cancel_message is None:
+            exc = exceptions.CancelledError()
+        else:
+            exc = exceptions.CancelledError(self._cancel_message)
+        exc.__context__ = self._cancelled_exc
+        # Remove the reference since we don't need this anymore.
+        self._cancelled_exc = None
+        return exc
+
+    def cancel(self, msg=None):
         """Cancel the future and schedule callbacks.
 
         If the future is already done or cancelled, return False.  Otherwise,
@@ -131,6 +152,7 @@
         if self._state != _PENDING:
             return False
         self._state = _CANCELLED
+        self._cancel_message = msg
         self.__schedule_callbacks()
         return True
 
@@ -170,7 +192,8 @@
         the future is done and has an exception set, this exception is raised.
         """
         if self._state == _CANCELLED:
-            raise exceptions.CancelledError
+            exc = self._make_cancelled_error()
+            raise exc
         if self._state != _FINISHED:
             raise exceptions.InvalidStateError('Result is not ready.')
         self.__log_traceback = False
@@ -187,7 +210,8 @@
         InvalidStateError.
         """
         if self._state == _CANCELLED:
-            raise exceptions.CancelledError
+            exc = self._make_cancelled_error()
+            raise exc
         if self._state != _FINISHED:
             raise exceptions.InvalidStateError('Exception is not set.')
         self.__log_traceback = False
diff --git a/Lib/asyncio/locks.py b/Lib/asyncio/locks.py
index d94daeb..f1ce732 100644
--- a/Lib/asyncio/locks.py
+++ b/Lib/asyncio/locks.py
@@ -3,96 +3,13 @@
 __all__ = ('Lock', 'Event', 'Condition', 'Semaphore', 'BoundedSemaphore')
 
 import collections
-import types
 import warnings
 
 from . import events
-from . import futures
 from . import exceptions
-from .import coroutines
-
-
-class _ContextManager:
-    """Context manager.
-
-    This enables the following idiom for acquiring and releasing a
-    lock around a block:
-
-        with (yield from lock):
-            <block>
-
-    while failing loudly when accidentally using:
-
-        with lock:
-            <block>
-
-    Deprecated, use 'async with' statement:
-        async with lock:
-            <block>
-    """
-
-    def __init__(self, lock):
-        self._lock = lock
-
-    def __enter__(self):
-        # We have no use for the "as ..."  clause in the with
-        # statement for locks.
-        return None
-
-    def __exit__(self, *args):
-        try:
-            self._lock.release()
-        finally:
-            self._lock = None  # Crudely prevent reuse.
 
 
 class _ContextManagerMixin:
-    def __enter__(self):
-        raise RuntimeError(
-            '"yield from" should be used as context manager expression')
-
-    def __exit__(self, *args):
-        # This must exist because __enter__ exists, even though that
-        # always raises; that's how the with-statement works.
-        pass
-
-    @types.coroutine
-    def __iter__(self):
-        # This is not a coroutine.  It is meant to enable the idiom:
-        #
-        #     with (yield from lock):
-        #         <block>
-        #
-        # as an alternative to:
-        #
-        #     yield from lock.acquire()
-        #     try:
-        #         <block>
-        #     finally:
-        #         lock.release()
-        # Deprecated, use 'async with' statement:
-        #     async with lock:
-        #         <block>
-        warnings.warn("'with (yield from lock)' is deprecated "
-                      "use 'async with lock' instead",
-                      DeprecationWarning, stacklevel=2)
-        yield from self.acquire()
-        return _ContextManager(self)
-
-    # The flag is needed for legacy asyncio.iscoroutine()
-    __iter__._is_coroutine = coroutines._is_coroutine
-
-    async def __acquire_ctx(self):
-        await self.acquire()
-        return _ContextManager(self)
-
-    def __await__(self):
-        warnings.warn("'with await lock' is deprecated "
-                      "use 'async with lock' instead",
-                      DeprecationWarning, stacklevel=2)
-        # To make "with await lock" work.
-        return self.__acquire_ctx().__await__()
-
     async def __aenter__(self):
         await self.acquire()
         # We have no use for the "as ..."  clause in the with
diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py
index 830d8ed..b4cd414 100644
--- a/Lib/asyncio/proactor_events.py
+++ b/Lib/asyncio/proactor_events.py
@@ -711,7 +711,7 @@
             raise exceptions.SendfileNotAvailableError("not a regular file")
         try:
             fsize = os.fstat(fileno).st_size
-        except OSError as err:
+        except OSError:
             raise exceptions.SendfileNotAvailableError("not a regular file")
         blocksize = count if count else fsize
         if not blocksize:
@@ -766,6 +766,14 @@
         try:
             if f is not None:
                 f.result()  # may raise
+            if self._self_reading_future is not f:
+                # When we scheduled this Future, we assigned it to
+                # _self_reading_future. If it's not there now, something has
+                # tried to cancel the loop while this callback was still in the
+                # queue (see windows_events.ProactorEventLoop.run_forever). In
+                # that case stop here instead of continuing to schedule a new
+                # iteration.
+                return
             f = self._proactor.recv(self._ssock, 4096)
         except exceptions.CancelledError:
             # _close_self_pipe() has been called, stop waiting for data
@@ -783,8 +791,17 @@
             f.add_done_callback(self._loop_self_reading)
 
     def _write_to_self(self):
+        # This may be called from a different thread, possibly after
+        # _close_self_pipe() has been called or even while it is
+        # running.  Guard for self._csock being None or closed.  When
+        # a socket is closed, send() raises OSError (with errno set to
+        # EBADF, but let's not rely on the exact error code).
+        csock = self._csock
+        if csock is None:
+            return
+
         try:
-            self._csock.send(b'\0')
+            csock.send(b'\0')
         except OSError:
             if self._debug:
                 logger.debug("Fail to write a null byte into the "
diff --git a/Lib/asyncio/queues.py b/Lib/asyncio/queues.py
index 390ae9a..cd3f7c6 100644
--- a/Lib/asyncio/queues.py
+++ b/Lib/asyncio/queues.py
@@ -76,6 +76,9 @@
     def __str__(self):
         return f'<{type(self).__name__} {self._format()}>'
 
+    def __class_getitem__(cls, type):
+        return cls
+
     def _format(self):
         result = f'maxsize={self._maxsize!r}'
         if getattr(self, '_queue', None):
diff --git a/Lib/asyncio/runners.py b/Lib/asyncio/runners.py
index 2e37e18..268635d 100644
--- a/Lib/asyncio/runners.py
+++ b/Lib/asyncio/runners.py
@@ -5,7 +5,7 @@
 from . import tasks
 
 
-def run(main, *, debug=False):
+def run(main, *, debug=None):
     """Execute the coroutine and return the result.
 
     This function runs the passed coroutine, taking care of
@@ -39,12 +39,14 @@
     loop = events.new_event_loop()
     try:
         events.set_event_loop(loop)
-        loop.set_debug(debug)
+        if debug is not None:
+            loop.set_debug(debug)
         return loop.run_until_complete(main)
     finally:
         try:
             _cancel_all_tasks(loop)
             loop.run_until_complete(loop.shutdown_asyncgens())
+            loop.run_until_complete(loop.shutdown_default_executor())
         finally:
             events.set_event_loop(None)
             loop.close()
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
index a05cbb6..59cb6b1 100644
--- a/Lib/asyncio/selector_events.py
+++ b/Lib/asyncio/selector_events.py
@@ -133,14 +133,16 @@
         # a socket is closed, send() raises OSError (with errno set to
         # EBADF, but let's not rely on the exact error code).
         csock = self._csock
-        if csock is not None:
-            try:
-                csock.send(b'\0')
-            except OSError:
-                if self._debug:
-                    logger.debug("Fail to write a null byte into the "
-                                 "self-pipe socket",
-                                 exc_info=True)
+        if csock is None:
+            return
+
+        try:
+            csock.send(b'\0')
+        except OSError:
+            if self._debug:
+                logger.debug("Fail to write a null byte into the "
+                             "self-pipe socket",
+                             exc_info=True)
 
     def _start_serving(self, protocol_factory, sock,
                        sslcontext=None, server=None, backlog=100,
@@ -266,6 +268,7 @@
                                   (handle, writer))
             if reader is not None:
                 reader.cancel()
+        return handle
 
     def _remove_reader(self, fd):
         if self.is_closed():
@@ -302,6 +305,7 @@
                                   (reader, handle))
             if writer is not None:
                 writer.cancel()
+        return handle
 
     def _remove_writer(self, fd):
         """Remove a writer callback."""
@@ -329,7 +333,7 @@
     def add_reader(self, fd, callback, *args):
         """Add a reader callback."""
         self._ensure_fd_no_transport(fd)
-        return self._add_reader(fd, callback, *args)
+        self._add_reader(fd, callback, *args)
 
     def remove_reader(self, fd):
         """Remove a reader callback."""
@@ -339,7 +343,7 @@
     def add_writer(self, fd, callback, *args):
         """Add a writer callback.."""
         self._ensure_fd_no_transport(fd)
-        return self._add_writer(fd, callback, *args)
+        self._add_writer(fd, callback, *args)
 
     def remove_writer(self, fd):
         """Remove a writer callback."""
@@ -362,13 +366,15 @@
             pass
         fut = self.create_future()
         fd = sock.fileno()
-        self.add_reader(fd, self._sock_recv, fut, sock, n)
+        self._ensure_fd_no_transport(fd)
+        handle = self._add_reader(fd, self._sock_recv, fut, sock, n)
         fut.add_done_callback(
-            functools.partial(self._sock_read_done, fd))
+            functools.partial(self._sock_read_done, fd, handle=handle))
         return await fut
 
-    def _sock_read_done(self, fd, fut):
-        self.remove_reader(fd)
+    def _sock_read_done(self, fd, fut, handle=None):
+        if handle is None or not handle.cancelled():
+            self.remove_reader(fd)
 
     def _sock_recv(self, fut, sock, n):
         # _sock_recv() can add itself as an I/O callback if the operation can't
@@ -401,9 +407,10 @@
             pass
         fut = self.create_future()
         fd = sock.fileno()
-        self.add_reader(fd, self._sock_recv_into, fut, sock, buf)
+        self._ensure_fd_no_transport(fd)
+        handle = self._add_reader(fd, self._sock_recv_into, fut, sock, buf)
         fut.add_done_callback(
-            functools.partial(self._sock_read_done, fd))
+            functools.partial(self._sock_read_done, fd, handle=handle))
         return await fut
 
     def _sock_recv_into(self, fut, sock, buf):
@@ -446,11 +453,12 @@
 
         fut = self.create_future()
         fd = sock.fileno()
-        fut.add_done_callback(
-            functools.partial(self._sock_write_done, fd))
+        self._ensure_fd_no_transport(fd)
         # use a trick with a list in closure to store a mutable state
-        self.add_writer(fd, self._sock_sendall, fut, sock,
-                        memoryview(data), [n])
+        handle = self._add_writer(fd, self._sock_sendall, fut, sock,
+                                  memoryview(data), [n])
+        fut.add_done_callback(
+            functools.partial(self._sock_write_done, fd, handle=handle))
         return await fut
 
     def _sock_sendall(self, fut, sock, view, pos):
@@ -502,9 +510,11 @@
             # connection runs in background. We have to wait until the socket
             # becomes writable to be notified when the connection succeed or
             # fails.
+            self._ensure_fd_no_transport(fd)
+            handle = self._add_writer(
+                fd, self._sock_connect_cb, fut, sock, address)
             fut.add_done_callback(
-                functools.partial(self._sock_write_done, fd))
-            self.add_writer(fd, self._sock_connect_cb, fut, sock, address)
+                functools.partial(self._sock_write_done, fd, handle=handle))
         except (SystemExit, KeyboardInterrupt):
             raise
         except BaseException as exc:
@@ -512,8 +522,9 @@
         else:
             fut.set_result(None)
 
-    def _sock_write_done(self, fd, fut):
-        self.remove_writer(fd)
+    def _sock_write_done(self, fd, fut, handle=None):
+        if handle is None or not handle.cancelled():
+            self.remove_writer(fd)
 
     def _sock_connect_cb(self, fut, sock, address):
         if fut.done():
@@ -546,20 +557,19 @@
         if self._debug and sock.gettimeout() != 0:
             raise ValueError("the socket must be non-blocking")
         fut = self.create_future()
-        self._sock_accept(fut, False, sock)
+        self._sock_accept(fut, sock)
         return await fut
 
-    def _sock_accept(self, fut, registered, sock):
+    def _sock_accept(self, fut, sock):
         fd = sock.fileno()
-        if registered:
-            self.remove_reader(fd)
-        if fut.done():
-            return
         try:
             conn, address = sock.accept()
             conn.setblocking(False)
         except (BlockingIOError, InterruptedError):
-            self.add_reader(fd, self._sock_accept, fut, True, sock)
+            self._ensure_fd_no_transport(fd)
+            handle = self._add_reader(fd, self._sock_accept, fut, sock)
+            fut.add_done_callback(
+                functools.partial(self._sock_read_done, fd, handle=handle))
         except (SystemExit, KeyboardInterrupt):
             raise
         except BaseException as exc:
diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py
index 3eca6b4..cad25b2 100644
--- a/Lib/asyncio/sslproto.py
+++ b/Lib/asyncio/sslproto.py
@@ -5,7 +5,6 @@
 except ImportError:  # pragma: no cover
     ssl = None
 
-from . import base_events
 from . import constants
 from . import protocols
 from . import transports
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index 66e81f9..f486b67 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -113,34 +113,6 @@
     # status is still pending
     _log_destroy_pending = True
 
-    @classmethod
-    def current_task(cls, loop=None):
-        """Return the currently running task in an event loop or None.
-
-        By default the current task for the current event loop is returned.
-
-        None is returned when called not in the context of a Task.
-        """
-        warnings.warn("Task.current_task() is deprecated since Python 3.7, "
-                      "use asyncio.current_task() instead",
-                      DeprecationWarning,
-                      stacklevel=2)
-        if loop is None:
-            loop = events.get_event_loop()
-        return current_task(loop)
-
-    @classmethod
-    def all_tasks(cls, loop=None):
-        """Return a set of all tasks for an event loop.
-
-        By default all tasks for the current event loop are returned.
-        """
-        warnings.warn("Task.all_tasks() is deprecated since Python 3.7, "
-                      "use asyncio.all_tasks() instead",
-                      DeprecationWarning,
-                      stacklevel=2)
-        return _all_tasks_compat(loop)
-
     def __init__(self, coro, *, loop=None, name=None):
         super().__init__(loop=loop)
         if self._source_traceback:
@@ -175,6 +147,9 @@
             self._loop.call_exception_handler(context)
         super().__del__()
 
+    def __class_getitem__(cls, type):
+        return cls
+
     def _repr_info(self):
         return base_tasks._task_repr_info(self)
 
@@ -227,7 +202,7 @@
         """
         return base_tasks._task_print_stack(self, limit, file)
 
-    def cancel(self):
+    def cancel(self, msg=None):
         """Request that this task cancel itself.
 
         This arranges for a CancelledError to be thrown into the
@@ -251,13 +226,14 @@
         if self.done():
             return False
         if self._fut_waiter is not None:
-            if self._fut_waiter.cancel():
+            if self._fut_waiter.cancel(msg=msg):
                 # Leave self._fut_waiter; it may be a Task that
                 # catches and ignores the cancellation so we may have
                 # to cancel it again later.
                 return True
         # It must be the case that self.__step is already scheduled.
         self._must_cancel = True
+        self._cancel_message = msg
         return True
 
     def __step(self, exc=None):
@@ -266,7 +242,7 @@
                 f'_step(): already done: {self!r}, {exc!r}')
         if self._must_cancel:
             if not isinstance(exc, exceptions.CancelledError):
-                exc = exceptions.CancelledError()
+                exc = self._make_cancelled_error()
             self._must_cancel = False
         coro = self._coro
         self._fut_waiter = None
@@ -284,10 +260,12 @@
             if self._must_cancel:
                 # Task is cancelled right before coro stops.
                 self._must_cancel = False
-                super().cancel()
+                super().cancel(msg=self._cancel_message)
             else:
                 super().set_result(exc.value)
-        except exceptions.CancelledError:
+        except exceptions.CancelledError as exc:
+            # Save the original exception so we can chain it later.
+            self._cancelled_exc = exc
             super().cancel()  # I.e., Future.cancel(self).
         except (KeyboardInterrupt, SystemExit) as exc:
             super().set_exception(exc)
@@ -316,7 +294,8 @@
                             self.__wakeup, context=self._context)
                         self._fut_waiter = result
                         if self._must_cancel:
-                            if self._fut_waiter.cancel():
+                            if self._fut_waiter.cancel(
+                                    msg=self._cancel_message):
                                 self._must_cancel = False
                 else:
                     new_exc = RuntimeError(
@@ -394,7 +373,7 @@
 async def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
     """Wait for the Futures and coroutines given by fs to complete.
 
-    The sequence futures must not be empty.
+    The fs iterable must not be empty.
 
     Coroutines will be wrapped in Tasks.
 
@@ -421,7 +400,15 @@
                       "and scheduled for removal in Python 3.10.",
                       DeprecationWarning, stacklevel=2)
 
-    fs = {ensure_future(f, loop=loop) for f in set(fs)}
+    fs = set(fs)
+
+    if any(coroutines.iscoroutine(f) for f in fs):
+        warnings.warn("The explicit passing of coroutine objects to "
+                      "asyncio.wait() is deprecated since Python 3.8, and "
+                      "scheduled for removal in Python 3.11.",
+                      DeprecationWarning, stacklevel=2)
+
+    fs = {ensure_future(f, loop=loop) for f in fs}
 
     return await _wait(fs, timeout, return_when, loop)
 
@@ -460,8 +447,13 @@
         if fut.done():
             return fut.result()
 
-        fut.cancel()
-        raise exceptions.TimeoutError()
+        await _cancel_and_wait(fut, loop=loop)
+        try:
+            fut.result()
+        except exceptions.CancelledError as exc:
+            raise exceptions.TimeoutError() from exc
+        else:
+            raise exceptions.TimeoutError()
 
     waiter = loop.create_future()
     timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
@@ -475,9 +467,12 @@
         try:
             await waiter
         except exceptions.CancelledError:
-            fut.remove_done_callback(cb)
-            fut.cancel()
-            raise
+            if fut.done():
+                return fut.result()
+            else:
+                fut.remove_done_callback(cb)
+                fut.cancel()
+                raise
 
         if fut.done():
             return fut.result()
@@ -487,7 +482,15 @@
             # after wait_for() returns.
             # See https://bugs.python.org/issue32751
             await _cancel_and_wait(fut, loop=loop)
-            raise exceptions.TimeoutError()
+            # In case task cancellation failed with some
+            # exception, we should re-raise it
+            # See https://bugs.python.org/issue40607
+            try:
+                fut.result()
+            except exceptions.CancelledError as exc:
+                raise exceptions.TimeoutError() from exc
+            else:
+                raise exceptions.TimeoutError()
     finally:
         timeout_handle.cancel()
 
@@ -572,7 +575,7 @@
     Note: The futures 'f' are not necessarily members of fs.
     """
     if futures.isfuture(fs) or coroutines.iscoroutine(fs):
-        raise TypeError(f"expect a list of futures, not {type(fs).__name__}")
+        raise TypeError(f"expect an iterable of futures, not {type(fs).__name__}")
 
     from .queues import Queue  # Import here to avoid circular import problem.
     done = Queue(loop=loop)
@@ -699,12 +702,12 @@
         self._children = children
         self._cancel_requested = False
 
-    def cancel(self):
+    def cancel(self, msg=None):
         if self.done():
             return False
         ret = False
         for child in self._children:
-            if child.cancel():
+            if child.cancel(msg=msg):
                 ret = True
         if ret:
             # If any child tasks were actually cancelled, we should
@@ -770,7 +773,7 @@
                 # Check if 'fut' is cancelled first, as
                 # 'fut.exception()' will *raise* a CancelledError
                 # instead of returning it.
-                exc = exceptions.CancelledError()
+                exc = fut._make_cancelled_error()
                 outer.set_exception(exc)
                 return
             else:
@@ -786,10 +789,15 @@
 
             for fut in children:
                 if fut.cancelled():
-                    # Check if 'fut' is cancelled first, as
-                    # 'fut.exception()' will *raise* a CancelledError
-                    # instead of returning it.
-                    res = exceptions.CancelledError()
+                    # Check if 'fut' is cancelled first, as 'fut.exception()'
+                    # will *raise* a CancelledError instead of returning it.
+                    # Also, since we're adding the exception return value
+                    # to 'results' instead of raising it, don't bother
+                    # setting __context__.  This also lets us preserve
+                    # calling '_make_cancelled_error()' at most once.
+                    res = exceptions.CancelledError(
+                        '' if fut._cancel_message is None else
+                        fut._cancel_message)
                 else:
                     res = fut.exception()
                     if res is None:
@@ -800,7 +808,8 @@
                 # If gather is being cancelled we must propagate the
                 # cancellation regardless of *return_exceptions* argument.
                 # See issue 32684.
-                outer.set_exception(exceptions.CancelledError())
+                exc = fut._make_cancelled_error()
+                outer.set_exception(exc)
             else:
                 outer.set_result(results)
 
diff --git a/Lib/asyncio/threads.py b/Lib/asyncio/threads.py
new file mode 100644
index 0000000..34b7513
--- /dev/null
+++ b/Lib/asyncio/threads.py
@@ -0,0 +1,25 @@
+"""High-level support for working with threads in asyncio"""
+
+import functools
+import contextvars
+
+from . import events
+
+
+__all__ = "to_thread",
+
+
+async def to_thread(func, /, *args, **kwargs):
+    """Asynchronously run function *func* in a separate thread.
+
+    Any *args and **kwargs supplied for this function are directly passed
+    to *func*. Also, the current :class:`contextvars.Context` is propogated,
+    allowing context variables from the main thread to be accessed in the
+    separate thread.
+
+    Return a coroutine that can be awaited to get the eventual result of *func*.
+    """
+    loop = events.get_running_loop()
+    ctx = contextvars.copy_context()
+    func_call = functools.partial(ctx.run, func, *args, **kwargs)
+    return await loop.run_in_executor(None, func_call)
diff --git a/Lib/asyncio/transports.py b/Lib/asyncio/transports.py
index 513b1c0..45e155c 100644
--- a/Lib/asyncio/transports.py
+++ b/Lib/asyncio/transports.py
@@ -29,8 +29,8 @@
 
         Buffered data will be flushed asynchronously.  No more data
         will be received.  After all buffered data is flushed, the
-        protocol's connection_lost() method will (eventually) called
-        with None as its argument.
+        protocol's connection_lost() method will (eventually) be
+        called with None as its argument.
         """
         raise NotImplementedError
 
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
index 1ff8c42..f34a5b4 100644
--- a/Lib/asyncio/unix_events.py
+++ b/Lib/asyncio/unix_events.py
@@ -29,7 +29,7 @@
 __all__ = (
     'SelectorEventLoop',
     'AbstractChildWatcher', 'SafeChildWatcher',
-    'FastChildWatcher',
+    'FastChildWatcher', 'PidfdChildWatcher',
     'MultiLoopChildWatcher', 'ThreadedChildWatcher',
     'DefaultEventLoopPolicy',
 )
@@ -330,7 +330,7 @@
     async def _sock_sendfile_native(self, sock, file, offset, count):
         try:
             os.sendfile
-        except AttributeError as exc:
+        except AttributeError:
             raise exceptions.SendfileNotAvailableError(
                 "os.sendfile() is not available")
         try:
@@ -339,7 +339,7 @@
             raise exceptions.SendfileNotAvailableError("not a regular file")
         try:
             fsize = os.fstat(fileno).st_size
-        except OSError as err:
+        except OSError:
             raise exceptions.SendfileNotAvailableError("not a regular file")
         blocksize = count if count else fsize
         if not blocksize:
@@ -878,6 +878,84 @@
         raise NotImplementedError()
 
 
+class PidfdChildWatcher(AbstractChildWatcher):
+    """Child watcher implementation using Linux's pid file descriptors.
+
+    This child watcher polls process file descriptors (pidfds) to await child
+    process termination. In some respects, PidfdChildWatcher is a "Goldilocks"
+    child watcher implementation. It doesn't require signals or threads, doesn't
+    interfere with any processes launched outside the event loop, and scales
+    linearly with the number of subprocesses launched by the event loop. The
+    main disadvantage is that pidfds are specific to Linux, and only work on
+    recent (5.3+) kernels.
+    """
+
+    def __init__(self):
+        self._loop = None
+        self._callbacks = {}
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_value, exc_traceback):
+        pass
+
+    def is_active(self):
+        return self._loop is not None and self._loop.is_running()
+
+    def close(self):
+        self.attach_loop(None)
+
+    def attach_loop(self, loop):
+        if self._loop is not None and loop is None and self._callbacks:
+            warnings.warn(
+                'A loop is being detached '
+                'from a child watcher with pending handlers',
+                RuntimeWarning)
+        for pidfd, _, _ in self._callbacks.values():
+            self._loop._remove_reader(pidfd)
+            os.close(pidfd)
+        self._callbacks.clear()
+        self._loop = loop
+
+    def add_child_handler(self, pid, callback, *args):
+        existing = self._callbacks.get(pid)
+        if existing is not None:
+            self._callbacks[pid] = existing[0], callback, args
+        else:
+            pidfd = os.pidfd_open(pid)
+            self._loop._add_reader(pidfd, self._do_wait, pid)
+            self._callbacks[pid] = pidfd, callback, args
+
+    def _do_wait(self, pid):
+        pidfd, callback, args = self._callbacks.pop(pid)
+        self._loop._remove_reader(pidfd)
+        try:
+            _, status = os.waitpid(pid, 0)
+        except ChildProcessError:
+            # The child process is already reaped
+            # (may happen if waitpid() is called elsewhere).
+            returncode = 255
+            logger.warning(
+                "child process pid %d exit status already read: "
+                " will report returncode 255",
+                pid)
+        else:
+            returncode = _compute_returncode(status)
+
+        os.close(pidfd)
+        callback(pid, returncode, *args)
+
+    def remove_child_handler(self, pid):
+        try:
+            pidfd, _, _ = self._callbacks.pop(pid)
+        except KeyError:
+            return False
+        self._loop._remove_reader(pidfd)
+        os.close(pidfd)
+        return True
+
+
 def _compute_returncode(status):
     if os.WIFSIGNALED(status):
         # The child process died because of a signal.
@@ -1346,8 +1424,7 @@
         with events._lock:
             if self._watcher is None:  # pragma: no branch
                 self._watcher = ThreadedChildWatcher()
-                if isinstance(threading.current_thread(),
-                              threading._MainThread):
+                if threading.current_thread() is threading.main_thread():
                     self._watcher.attach_loop(self._local._loop)
 
     def set_event_loop(self, loop):
@@ -1361,7 +1438,7 @@
         super().set_event_loop(loop)
 
         if (self._watcher is not None and
-                isinstance(threading.current_thread(), threading._MainThread)):
+                threading.current_thread() is threading.main_thread()):
             self._watcher.attach_loop(loop)
 
     def get_child_watcher(self):
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py
index ac51109..5e7cd79 100644
--- a/Lib/asyncio/windows_events.py
+++ b/Lib/asyncio/windows_events.py
@@ -75,9 +75,9 @@
             self._loop.call_exception_handler(context)
         self._ov = None
 
-    def cancel(self):
+    def cancel(self, msg=None):
         self._cancel_overlapped()
-        return super().cancel()
+        return super().cancel(msg=msg)
 
     def set_exception(self, exception):
         super().set_exception(exception)
@@ -149,9 +149,9 @@
 
         self._unregister_wait_cb(None)
 
-    def cancel(self):
+    def cancel(self, msg=None):
         self._unregister_wait()
-        return super().cancel()
+        return super().cancel(msg=msg)
 
     def set_exception(self, exception):
         self._unregister_wait()
@@ -318,8 +318,12 @@
             if self._self_reading_future is not None:
                 ov = self._self_reading_future._ov
                 self._self_reading_future.cancel()
-                # self_reading_future was just cancelled so it will never be signalled
-                # Unregister it otherwise IocpProactor.close will wait for it forever
+                # self_reading_future was just cancelled so if it hasn't been
+                # finished yet, it never will be (it's possible that it has
+                # already finished and its callback is waiting in the queue,
+                # where it could still happen if the event loop is restarted).
+                # Unregister it otherwise IocpProactor.close will wait for it
+                # forever
                 if ov is not None:
                     self._proactor._unregister(ov)
                 self._self_reading_future = None
@@ -469,7 +473,7 @@
             else:
                 ov.ReadFileInto(conn.fileno(), buf)
         except BrokenPipeError:
-            return self._result(b'')
+            return self._result(0)
 
         def finish_recv(trans, key, ov):
             try:
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index 0e92be3..ce16f11 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -228,7 +228,7 @@
         if sock:
             # Set to nonblocking just to make sure for cases where we
             # get a socket from a blocking source.
-            sock.setblocking(0)
+            sock.setblocking(False)
             self.set_socket(sock, map)
             self.connected = True
             # The constructor no longer requires that the socket
@@ -280,7 +280,7 @@
     def create_socket(self, family=socket.AF_INET, type=socket.SOCK_STREAM):
         self.family_and_type = family, type
         sock = socket.socket(family, type)
-        sock.setblocking(0)
+        sock.setblocking(False)
         self.set_socket(sock)
 
     def set_socket(self, sock, map=None):
diff --git a/Lib/base64.py b/Lib/base64.py
index 2e70223..a28109f 100755
--- a/Lib/base64.py
+++ b/Lib/base64.py
@@ -531,28 +531,12 @@
         pieces.append(binascii.b2a_base64(chunk))
     return b"".join(pieces)
 
-def encodestring(s):
-    """Legacy alias of encodebytes()."""
-    import warnings
-    warnings.warn("encodestring() is a deprecated alias since 3.1, "
-                  "use encodebytes()",
-                  DeprecationWarning, 2)
-    return encodebytes(s)
-
 
 def decodebytes(s):
     """Decode a bytestring of base-64 data into a bytes object."""
     _input_type_check(s)
     return binascii.a2b_base64(s)
 
-def decodestring(s):
-    """Legacy alias of decodebytes()."""
-    import warnings
-    warnings.warn("decodestring() is a deprecated alias since Python 3.1, "
-                  "use decodebytes()",
-                  DeprecationWarning, 2)
-    return decodebytes(s)
-
 
 # Usable as a script...
 def main():
diff --git a/Lib/bdb.py b/Lib/bdb.py
index 18491da..b18a061 100644
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -611,26 +611,11 @@
 
     # This method is more useful to debug a single function call.
 
-    def runcall(*args, **kwds):
+    def runcall(self, func, /, *args, **kwds):
         """Debug a single function call.
 
         Return the result of the function call.
         """
-        if len(args) >= 2:
-            self, func, *args = args
-        elif not args:
-            raise TypeError("descriptor 'runcall' of 'Bdb' object "
-                            "needs an argument")
-        elif 'func' in kwds:
-            func = kwds.pop('func')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'func' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('runcall expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
         self.reset()
         sys.settrace(self.trace_dispatch)
         res = None
@@ -642,7 +627,6 @@
             self.quitting = True
             sys.settrace(None)
         return res
-    runcall.__text_signature__ = '($self, func, /, *args, **kwds)'
 
 
 def set_trace():
diff --git a/Lib/binhex.py b/Lib/binhex.py
index 56b5f85..ace5217 100644
--- a/Lib/binhex.py
+++ b/Lib/binhex.py
@@ -21,10 +21,16 @@
 # input. The resulting code (xx 90 90) would appear to be interpreted as an
 # escaped *value* of 0x90. All coders I've seen appear to ignore this nicety...
 #
+import binascii
+import contextlib
 import io
 import os
 import struct
-import binascii
+import warnings
+
+warnings.warn('the binhex module is deprecated', DeprecationWarning,
+              stacklevel=2)
+
 
 __all__ = ["binhex","hexbin","Error"]
 
@@ -76,6 +82,16 @@
     def close(self):
         pass
 
+
+# DeprecationWarning is already emitted on "import binhex". There is no need
+# to repeat the warning at each call to deprecated binascii functions.
+@contextlib.contextmanager
+def _ignore_deprecation_warning():
+    with warnings.catch_warnings():
+        warnings.filterwarnings('ignore', '', DeprecationWarning)
+        yield
+
+
 class _Hqxcoderengine:
     """Write data to the coder in 3-byte chunks"""
 
@@ -93,23 +109,25 @@
         self.data = self.data[todo:]
         if not data:
             return
-        self.hqxdata = self.hqxdata + binascii.b2a_hqx(data)
+        with _ignore_deprecation_warning():
+            self.hqxdata = self.hqxdata + binascii.b2a_hqx(data)
         self._flush(0)
 
     def _flush(self, force):
         first = 0
         while first <= len(self.hqxdata) - self.linelen:
             last = first + self.linelen
-            self.ofp.write(self.hqxdata[first:last] + b'\n')
+            self.ofp.write(self.hqxdata[first:last] + b'\r')
             self.linelen = LINELEN
             first = last
         self.hqxdata = self.hqxdata[first:]
         if force:
-            self.ofp.write(self.hqxdata + b':\n')
+            self.ofp.write(self.hqxdata + b':\r')
 
     def close(self):
         if self.data:
-            self.hqxdata = self.hqxdata + binascii.b2a_hqx(self.data)
+            with _ignore_deprecation_warning():
+                self.hqxdata = self.hqxdata + binascii.b2a_hqx(self.data)
         self._flush(1)
         self.ofp.close()
         del self.ofp
@@ -125,13 +143,15 @@
         self.data = self.data + data
         if len(self.data) < REASONABLY_LARGE:
             return
-        rledata = binascii.rlecode_hqx(self.data)
+        with _ignore_deprecation_warning():
+            rledata = binascii.rlecode_hqx(self.data)
         self.ofp.write(rledata)
         self.data = b''
 
     def close(self):
         if self.data:
-            rledata = binascii.rlecode_hqx(self.data)
+            with _ignore_deprecation_warning():
+                rledata = binascii.rlecode_hqx(self.data)
             self.ofp.write(rledata)
         self.ofp.close()
         del self.ofp
@@ -276,7 +296,8 @@
             #
             while True:
                 try:
-                    decdatacur, self.eof = binascii.a2b_hqx(data)
+                    with _ignore_deprecation_warning():
+                        decdatacur, self.eof = binascii.a2b_hqx(data)
                     break
                 except binascii.Incomplete:
                     pass
@@ -312,8 +333,9 @@
     def _fill(self, wtd):
         self.pre_buffer = self.pre_buffer + self.ifp.read(wtd + 4)
         if self.ifp.eof:
-            self.post_buffer = self.post_buffer + \
-                binascii.rledecode_hqx(self.pre_buffer)
+            with _ignore_deprecation_warning():
+                self.post_buffer = self.post_buffer + \
+                    binascii.rledecode_hqx(self.pre_buffer)
             self.pre_buffer = b''
             return
 
@@ -340,8 +362,9 @@
         else:
             mark = mark - 1
 
-        self.post_buffer = self.post_buffer + \
-            binascii.rledecode_hqx(self.pre_buffer[:mark])
+        with _ignore_deprecation_warning():
+            self.post_buffer = self.post_buffer + \
+                binascii.rledecode_hqx(self.pre_buffer[:mark])
         self.pre_buffer = self.pre_buffer[mark:]
 
     def close(self):
diff --git a/Lib/bisect.py b/Lib/bisect.py
index 9786fc9..8f3f6a3 100644
--- a/Lib/bisect.py
+++ b/Lib/bisect.py
@@ -29,6 +29,7 @@
         hi = len(a)
     while lo < hi:
         mid = (lo+hi)//2
+        # Use __lt__ to match the logic in list.sort() and in heapq
         if x < a[mid]: hi = mid
         else: lo = mid+1
     return lo
@@ -63,6 +64,7 @@
         hi = len(a)
     while lo < hi:
         mid = (lo+hi)//2
+        # Use __lt__ to match the logic in list.sort() and in heapq
         if a[mid] < x: lo = mid+1
         else: hi = mid
     return lo
diff --git a/Lib/bz2.py b/Lib/bz2.py
index 21e8ff4..ce07ebe 100644
--- a/Lib/bz2.py
+++ b/Lib/bz2.py
@@ -12,7 +12,6 @@
 from builtins import open as _builtin_open
 import io
 import os
-import warnings
 import _compression
 from threading import RLock
 
@@ -24,8 +23,6 @@
 # Value 2 no longer used
 _MODE_WRITE    = 3
 
-_sentinel = object()
-
 
 class BZ2File(_compression.BaseStream):
 
@@ -38,7 +35,7 @@
     returned as bytes, and data to be written should be given as bytes.
     """
 
-    def __init__(self, filename, mode="r", buffering=_sentinel, compresslevel=9):
+    def __init__(self, filename, mode="r", *, compresslevel=9):
         """Open a bzip2-compressed file.
 
         If filename is a str, bytes, or PathLike object, it gives the
@@ -49,8 +46,6 @@
         'x' for creating exclusively, or 'a' for appending. These can
         equivalently be given as 'rb', 'wb', 'xb', and 'ab'.
 
-        buffering is ignored since Python 3.0. Its use is deprecated.
-
         If mode is 'w', 'x' or 'a', compresslevel can be a number between 1
         and 9 specifying the level of compression: 1 produces the least
         compression, and 9 (default) produces the most compression.
@@ -65,12 +60,6 @@
         self._closefp = False
         self._mode = _MODE_CLOSED
 
-        if buffering is not _sentinel:
-            warnings.warn("Use of 'buffering' argument is deprecated and ignored "
-                          "since Python 3.0.",
-                          DeprecationWarning,
-                          stacklevel=2)
-
         if not (1 <= compresslevel <= 9):
             raise ValueError("compresslevel must be between 1 and 9")
 
diff --git a/Lib/cProfile.py b/Lib/cProfile.py
index 369d02e..59b4699 100755
--- a/Lib/cProfile.py
+++ b/Lib/cProfile.py
@@ -103,28 +103,12 @@
         return self
 
     # This method is more useful to profile a single function call.
-    def runcall(*args, **kw):
-        if len(args) >= 2:
-            self, func, *args = args
-        elif not args:
-            raise TypeError("descriptor 'runcall' of 'Profile' object "
-                            "needs an argument")
-        elif 'func' in kw:
-            func = kw.pop('func')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'func' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('runcall expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
+    def runcall(self, func, /, *args, **kw):
         self.enable()
         try:
             return func(*args, **kw)
         finally:
             self.disable()
-    runcall.__text_signature__ = '($self, func, /, *args, **kw)'
 
     def __enter__(self):
         self.enable()
@@ -168,6 +152,11 @@
     (options, args) = parser.parse_args()
     sys.argv[:] = args
 
+    # The script that we're profiling may chdir, so capture the absolute path
+    # to the output file at startup.
+    if options.outfile is not None:
+        options.outfile = os.path.abspath(options.outfile)
+
     if len(args) > 0:
         if options.module:
             code = "run_module(modname, run_name='__main__')"
diff --git a/Lib/codeop.py b/Lib/codeop.py
index 3c2bb60..4c10470 100644
--- a/Lib/codeop.py
+++ b/Lib/codeop.py
@@ -81,12 +81,14 @@
 
     try:
         code = compiler(source, filename, symbol)
-    except SyntaxError as err:
+    except SyntaxError:
         pass
 
-    # Suppress warnings after the first compile to avoid duplication.
+    # Catch syntax warnings after the first compile
+    # to emit warnings (SyntaxWarning, DeprecationWarning) at most once.
     with warnings.catch_warnings():
-        warnings.simplefilter("ignore")
+        warnings.simplefilter("error")
+
         try:
             code1 = compiler(source + "\n", filename, symbol)
         except SyntaxError as e:
@@ -138,7 +140,7 @@
         self.flags = PyCF_DONT_IMPLY_DEDENT
 
     def __call__(self, source, filename, symbol):
-        codeob = compile(source, filename, symbol, self.flags, 1)
+        codeob = compile(source, filename, symbol, self.flags, True)
         for feature in _features:
             if codeob.co_flags & feature.compiler_flag:
                 self.flags |= feature.compiler_flag
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index a78a47c..bc69a67 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -14,17 +14,30 @@
 
 '''
 
-__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList',
-            'UserString', 'Counter', 'OrderedDict', 'ChainMap']
+__all__ = [
+    'ChainMap',
+    'Counter',
+    'OrderedDict',
+    'UserDict',
+    'UserList',
+    'UserString',
+    'defaultdict',
+    'deque',
+    'namedtuple',
+]
 
 import _collections_abc
-from operator import itemgetter as _itemgetter, eq as _eq
-from keyword import iskeyword as _iskeyword
-import sys as _sys
 import heapq as _heapq
-from _weakref import proxy as _proxy
-from itertools import repeat as _repeat, chain as _chain, starmap as _starmap
+import sys as _sys
+
+from itertools import chain as _chain
+from itertools import repeat as _repeat
+from itertools import starmap as _starmap
+from keyword import iskeyword as _iskeyword
+from operator import eq as _eq
+from operator import itemgetter as _itemgetter
 from reprlib import recursive_repr as _recursive_repr
+from _weakref import proxy as _proxy
 
 try:
     from _collections import deque
@@ -48,12 +61,13 @@
         import warnings
         warnings.warn("Using or importing the ABCs from 'collections' instead "
                       "of from 'collections.abc' is deprecated since Python 3.3, "
-                      "and in 3.9 it will stop working",
+                      "and in 3.10 it will stop working",
                       DeprecationWarning, stacklevel=2)
         globals()[name] = obj
         return obj
     raise AttributeError(f'module {__name__!r} has no attribute {name!r}')
 
+
 ################################################################################
 ### OrderedDict
 ################################################################################
@@ -293,6 +307,24 @@
             return dict.__eq__(self, other) and all(map(_eq, self, other))
         return dict.__eq__(self, other)
 
+    def __ior__(self, other):
+        self.update(other)
+        return self
+
+    def __or__(self, other):
+        if not isinstance(other, dict):
+            return NotImplemented
+        new = self.__class__(self)
+        new.update(other)
+        return new
+
+    def __ror__(self, other):
+        if not isinstance(other, dict):
+            return NotImplemented
+        new = self.__class__(other)
+        new.update(self)
+        return new
+
 
 try:
     from _collections import OrderedDict
@@ -381,18 +413,23 @@
     # Variables used in the methods and docstrings
     field_names = tuple(map(_sys.intern, field_names))
     num_fields = len(field_names)
-    arg_list = repr(field_names).replace("'", "")[1:-1]
+    arg_list = ', '.join(field_names)
+    if num_fields == 1:
+        arg_list += ','
     repr_fmt = '(' + ', '.join(f'{name}=%r' for name in field_names) + ')'
     tuple_new = tuple.__new__
     _dict, _tuple, _len, _map, _zip = dict, tuple, len, map, zip
 
     # Create all the named tuple methods to be added to the class namespace
 
-    s = f'def __new__(_cls, {arg_list}): return _tuple_new(_cls, ({arg_list}))'
-    namespace = {'_tuple_new': tuple_new, '__name__': f'namedtuple_{typename}'}
-    # Note: exec() has the side-effect of interning the field names
-    exec(s, namespace)
-    __new__ = namespace['__new__']
+    namespace = {
+        '_tuple_new': tuple_new,
+        '__builtins__': None,
+        '__name__': f'namedtuple_{typename}',
+    }
+    code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))'
+    __new__ = eval(code, namespace)
+    __new__.__name__ = '__new__'
     __new__.__doc__ = f'Create new instance of {typename}({arg_list})'
     if defaults is not None:
         __new__.__defaults__ = defaults
@@ -429,8 +466,14 @@
         return _tuple(self)
 
     # Modify function metadata to help with introspection and debugging
-    for method in (__new__, _make.__func__, _replace,
-                   __repr__, _asdict, __getnewargs__):
+    for method in (
+        __new__,
+        _make.__func__,
+        _replace,
+        __repr__,
+        _asdict,
+        __getnewargs__,
+    ):
         method.__qualname__ = f'{typename}.{method.__name__}'
 
     # Build-up the class namespace dictionary
@@ -440,8 +483,6 @@
         '__slots__': (),
         '_fields': field_names,
         '_field_defaults': field_defaults,
-        # alternate spelling for backward compatibility
-        '_fields_defaults': field_defaults,
         '__new__': __new__,
         '_make': _make,
         '_replace': _replace,
@@ -548,7 +589,7 @@
         >>> c = Counter(a=4, b=2)                   # a new counter from keyword args
 
         '''
-        super(Counter, self).__init__()
+        super().__init__()
         self.update(iterable, **kwds)
 
     def __missing__(self, key):
@@ -632,7 +673,8 @@
                     for elem, count in iterable.items():
                         self[elem] = count + self_get(elem, 0)
                 else:
-                    super(Counter, self).update(iterable) # fast path when counter is empty
+                    # fast path when counter is empty
+                    super().update(iterable)
             else:
                 _count_elements(self, iterable)
         if kwds:
@@ -679,13 +721,14 @@
 
     def __repr__(self):
         if not self:
-            return '%s()' % self.__class__.__name__
+            return f'{self.__class__.__name__}()'
         try:
-            items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
-            return '%s({%s})' % (self.__class__.__name__, items)
+            # dict() preserves the ordering returned by most_common()
+            d = dict(self.most_common())
         except TypeError:
             # handle case where values are not orderable
-            return '{0}({1!r})'.format(self.__class__.__name__, dict(self))
+            d = dict(self)
+        return f'{self.__class__.__name__}({d!r})'
 
     # Multiset-style mathematical operations discussed in:
     #       Knuth TAOCP Volume II section 4.6.3 exercise 19
@@ -906,7 +949,7 @@
     def __iter__(self):
         d = {}
         for mapping in reversed(self.maps):
-            d.update(mapping)                   # reuses stored hash values if possible
+            d.update(dict.fromkeys(mapping))    # reuses stored hash values if possible
         return iter(d)
 
     def __contains__(self, key):
@@ -950,7 +993,7 @@
         try:
             del self.maps[0][key]
         except KeyError:
-            raise KeyError('Key not found in the first mapping: {!r}'.format(key))
+            raise KeyError(f'Key not found in the first mapping: {key!r}')
 
     def popitem(self):
         'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.'
@@ -964,12 +1007,31 @@
         try:
             return self.maps[0].pop(key, *args)
         except KeyError:
-            raise KeyError('Key not found in the first mapping: {!r}'.format(key))
+            raise KeyError(f'Key not found in the first mapping: {key!r}')
 
     def clear(self):
         'Clear maps[0], leaving maps[1:] intact.'
         self.maps[0].clear()
 
+    def __ior__(self, other):
+        self.maps[0].update(other)
+        return self
+
+    def __or__(self, other):
+        if not isinstance(other, _collections_abc.Mapping):
+            return NotImplemented
+        m = self.copy()
+        m.maps[0].update(other)
+        return m
+
+    def __ror__(self, other):
+        if not isinstance(other, _collections_abc.Mapping):
+            return NotImplemented
+        m = dict(other)
+        for child in reversed(self.maps):
+            m.update(child)
+        return self.__class__(m)
+
 
 ################################################################################
 ### UserDict
@@ -978,38 +1040,29 @@
 class UserDict(_collections_abc.MutableMapping):
 
     # Start by filling-out the abstract methods
-    def __init__(*args, **kwargs):
-        if not args:
-            raise TypeError("descriptor '__init__' of 'UserDict' object "
-                            "needs an argument")
-        self, *args = args
-        if len(args) > 1:
-            raise TypeError('expected at most 1 arguments, got %d' % len(args))
-        if args:
-            dict = args[0]
-        elif 'dict' in kwargs:
-            dict = kwargs.pop('dict')
-            import warnings
-            warnings.warn("Passing 'dict' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            dict = None
+    def __init__(self, dict=None, /, **kwargs):
         self.data = {}
         if dict is not None:
             self.update(dict)
         if kwargs:
             self.update(kwargs)
-    __init__.__text_signature__ = '($self, dict=None, /, **kwargs)'
 
-    def __len__(self): return len(self.data)
+    def __len__(self):
+        return len(self.data)
+
     def __getitem__(self, key):
         if key in self.data:
             return self.data[key]
         if hasattr(self.__class__, "__missing__"):
             return self.__class__.__missing__(self, key)
         raise KeyError(key)
-    def __setitem__(self, key, item): self.data[key] = item
-    def __delitem__(self, key): del self.data[key]
+
+    def __setitem__(self, key, item):
+        self.data[key] = item
+
+    def __delitem__(self, key):
+        del self.data[key]
+
     def __iter__(self):
         return iter(self.data)
 
@@ -1018,7 +1071,30 @@
         return key in self.data
 
     # Now, add the methods in dicts but not in MutableMapping
-    def __repr__(self): return repr(self.data)
+    def __repr__(self):
+        return repr(self.data)
+
+    def __or__(self, other):
+        if isinstance(other, UserDict):
+            return self.__class__(self.data | other.data)
+        if isinstance(other, dict):
+            return self.__class__(self.data | other)
+        return NotImplemented
+
+    def __ror__(self, other):
+        if isinstance(other, UserDict):
+            return self.__class__(other.data | self.data)
+        if isinstance(other, dict):
+            return self.__class__(other | self.data)
+        return NotImplemented
+
+    def __ior__(self, other):
+        if isinstance(other, UserDict):
+            self.data |= other.data
+        else:
+            self.data |= other
+        return self
+
     def __copy__(self):
         inst = self.__class__.__new__(self.__class__)
         inst.__dict__.update(self.__dict__)
@@ -1047,13 +1123,13 @@
         return d
 
 
-
 ################################################################################
 ### UserList
 ################################################################################
 
 class UserList(_collections_abc.MutableSequence):
     """A more or less complete user-defined wrapper around list objects."""
+
     def __init__(self, initlist=None):
         self.data = []
         if initlist is not None:
@@ -1064,35 +1140,60 @@
                 self.data[:] = initlist.data[:]
             else:
                 self.data = list(initlist)
-    def __repr__(self): return repr(self.data)
-    def __lt__(self, other): return self.data <  self.__cast(other)
-    def __le__(self, other): return self.data <= self.__cast(other)
-    def __eq__(self, other): return self.data == self.__cast(other)
-    def __gt__(self, other): return self.data >  self.__cast(other)
-    def __ge__(self, other): return self.data >= self.__cast(other)
+
+    def __repr__(self):
+        return repr(self.data)
+
+    def __lt__(self, other):
+        return self.data < self.__cast(other)
+
+    def __le__(self, other):
+        return self.data <= self.__cast(other)
+
+    def __eq__(self, other):
+        return self.data == self.__cast(other)
+
+    def __gt__(self, other):
+        return self.data > self.__cast(other)
+
+    def __ge__(self, other):
+        return self.data >= self.__cast(other)
+
     def __cast(self, other):
         return other.data if isinstance(other, UserList) else other
-    def __contains__(self, item): return item in self.data
-    def __len__(self): return len(self.data)
+
+    def __contains__(self, item):
+        return item in self.data
+
+    def __len__(self):
+        return len(self.data)
+
     def __getitem__(self, i):
         if isinstance(i, slice):
             return self.__class__(self.data[i])
         else:
             return self.data[i]
-    def __setitem__(self, i, item): self.data[i] = item
-    def __delitem__(self, i): del self.data[i]
+
+    def __setitem__(self, i, item):
+        self.data[i] = item
+
+    def __delitem__(self, i):
+        del self.data[i]
+
     def __add__(self, other):
         if isinstance(other, UserList):
             return self.__class__(self.data + other.data)
         elif isinstance(other, type(self.data)):
             return self.__class__(self.data + other)
         return self.__class__(self.data + list(other))
+
     def __radd__(self, other):
         if isinstance(other, UserList):
             return self.__class__(other.data + self.data)
         elif isinstance(other, type(self.data)):
             return self.__class__(other + self.data)
         return self.__class__(list(other) + self.data)
+
     def __iadd__(self, other):
         if isinstance(other, UserList):
             self.data += other.data
@@ -1101,28 +1202,53 @@
         else:
             self.data += list(other)
         return self
+
     def __mul__(self, n):
-        return self.__class__(self.data*n)
+        return self.__class__(self.data * n)
+
     __rmul__ = __mul__
+
     def __imul__(self, n):
         self.data *= n
         return self
+
     def __copy__(self):
         inst = self.__class__.__new__(self.__class__)
         inst.__dict__.update(self.__dict__)
         # Create a copy and avoid triggering descriptors
         inst.__dict__["data"] = self.__dict__["data"][:]
         return inst
-    def append(self, item): self.data.append(item)
-    def insert(self, i, item): self.data.insert(i, item)
-    def pop(self, i=-1): return self.data.pop(i)
-    def remove(self, item): self.data.remove(item)
-    def clear(self): self.data.clear()
-    def copy(self): return self.__class__(self)
-    def count(self, item): return self.data.count(item)
-    def index(self, item, *args): return self.data.index(item, *args)
-    def reverse(self): self.data.reverse()
-    def sort(self, /, *args, **kwds): self.data.sort(*args, **kwds)
+
+    def append(self, item):
+        self.data.append(item)
+
+    def insert(self, i, item):
+        self.data.insert(i, item)
+
+    def pop(self, i=-1):
+        return self.data.pop(i)
+
+    def remove(self, item):
+        self.data.remove(item)
+
+    def clear(self):
+        self.data.clear()
+
+    def copy(self):
+        return self.__class__(self)
+
+    def count(self, item):
+        return self.data.count(item)
+
+    def index(self, item, *args):
+        return self.data.index(item, *args)
+
+    def reverse(self):
+        self.data.reverse()
+
+    def sort(self, /, *args, **kwds):
+        self.data.sort(*args, **kwds)
+
     def extend(self, other):
         if isinstance(other, UserList):
             self.data.extend(other.data)
@@ -1130,12 +1256,12 @@
             self.data.extend(other)
 
 
-
 ################################################################################
 ### UserString
 ################################################################################
 
 class UserString(_collections_abc.Sequence):
+
     def __init__(self, seq):
         if isinstance(seq, str):
             self.data = seq
@@ -1143,12 +1269,25 @@
             self.data = seq.data[:]
         else:
             self.data = str(seq)
-    def __str__(self): return str(self.data)
-    def __repr__(self): return repr(self.data)
-    def __int__(self): return int(self.data)
-    def __float__(self): return float(self.data)
-    def __complex__(self): return complex(self.data)
-    def __hash__(self): return hash(self.data)
+
+    def __str__(self):
+        return str(self.data)
+
+    def __repr__(self):
+        return repr(self.data)
+
+    def __int__(self):
+        return int(self.data)
+
+    def __float__(self):
+        return float(self.data)
+
+    def __complex__(self):
+        return complex(self.data)
+
+    def __hash__(self):
+        return hash(self.data)
+
     def __getnewargs__(self):
         return (self.data[:],)
 
@@ -1156,18 +1295,22 @@
         if isinstance(string, UserString):
             return self.data == string.data
         return self.data == string
+
     def __lt__(self, string):
         if isinstance(string, UserString):
             return self.data < string.data
         return self.data < string
+
     def __le__(self, string):
         if isinstance(string, UserString):
             return self.data <= string.data
         return self.data <= string
+
     def __gt__(self, string):
         if isinstance(string, UserString):
             return self.data > string.data
         return self.data > string
+
     def __ge__(self, string):
         if isinstance(string, UserString):
             return self.data >= string.data
@@ -1178,102 +1321,188 @@
             char = char.data
         return char in self.data
 
-    def __len__(self): return len(self.data)
-    def __getitem__(self, index): return self.__class__(self.data[index])
+    def __len__(self):
+        return len(self.data)
+
+    def __getitem__(self, index):
+        return self.__class__(self.data[index])
+
     def __add__(self, other):
         if isinstance(other, UserString):
             return self.__class__(self.data + other.data)
         elif isinstance(other, str):
             return self.__class__(self.data + other)
         return self.__class__(self.data + str(other))
+
     def __radd__(self, other):
         if isinstance(other, str):
             return self.__class__(other + self.data)
         return self.__class__(str(other) + self.data)
+
     def __mul__(self, n):
-        return self.__class__(self.data*n)
+        return self.__class__(self.data * n)
+
     __rmul__ = __mul__
+
     def __mod__(self, args):
         return self.__class__(self.data % args)
+
     def __rmod__(self, template):
         return self.__class__(str(template) % self)
+
     # the following methods are defined in alphabetical order:
-    def capitalize(self): return self.__class__(self.data.capitalize())
+    def capitalize(self):
+        return self.__class__(self.data.capitalize())
+
     def casefold(self):
         return self.__class__(self.data.casefold())
+
     def center(self, width, *args):
         return self.__class__(self.data.center(width, *args))
+
     def count(self, sub, start=0, end=_sys.maxsize):
         if isinstance(sub, UserString):
             sub = sub.data
         return self.data.count(sub, start, end)
+
+    def removeprefix(self, prefix, /):
+        if isinstance(prefix, UserString):
+            prefix = prefix.data
+        return self.__class__(self.data.removeprefix(prefix))
+
+    def removesuffix(self, suffix, /):
+        if isinstance(suffix, UserString):
+            suffix = suffix.data
+        return self.__class__(self.data.removesuffix(suffix))
+
     def encode(self, encoding='utf-8', errors='strict'):
         encoding = 'utf-8' if encoding is None else encoding
         errors = 'strict' if errors is None else errors
         return self.data.encode(encoding, errors)
+
     def endswith(self, suffix, start=0, end=_sys.maxsize):
         return self.data.endswith(suffix, start, end)
+
     def expandtabs(self, tabsize=8):
         return self.__class__(self.data.expandtabs(tabsize))
+
     def find(self, sub, start=0, end=_sys.maxsize):
         if isinstance(sub, UserString):
             sub = sub.data
         return self.data.find(sub, start, end)
+
     def format(self, /, *args, **kwds):
         return self.data.format(*args, **kwds)
+
     def format_map(self, mapping):
         return self.data.format_map(mapping)
+
     def index(self, sub, start=0, end=_sys.maxsize):
         return self.data.index(sub, start, end)
-    def isalpha(self): return self.data.isalpha()
-    def isalnum(self): return self.data.isalnum()
-    def isascii(self): return self.data.isascii()
-    def isdecimal(self): return self.data.isdecimal()
-    def isdigit(self): return self.data.isdigit()
-    def isidentifier(self): return self.data.isidentifier()
-    def islower(self): return self.data.islower()
-    def isnumeric(self): return self.data.isnumeric()
-    def isprintable(self): return self.data.isprintable()
-    def isspace(self): return self.data.isspace()
-    def istitle(self): return self.data.istitle()
-    def isupper(self): return self.data.isupper()
-    def join(self, seq): return self.data.join(seq)
+
+    def isalpha(self):
+        return self.data.isalpha()
+
+    def isalnum(self):
+        return self.data.isalnum()
+
+    def isascii(self):
+        return self.data.isascii()
+
+    def isdecimal(self):
+        return self.data.isdecimal()
+
+    def isdigit(self):
+        return self.data.isdigit()
+
+    def isidentifier(self):
+        return self.data.isidentifier()
+
+    def islower(self):
+        return self.data.islower()
+
+    def isnumeric(self):
+        return self.data.isnumeric()
+
+    def isprintable(self):
+        return self.data.isprintable()
+
+    def isspace(self):
+        return self.data.isspace()
+
+    def istitle(self):
+        return self.data.istitle()
+
+    def isupper(self):
+        return self.data.isupper()
+
+    def join(self, seq):
+        return self.data.join(seq)
+
     def ljust(self, width, *args):
         return self.__class__(self.data.ljust(width, *args))
-    def lower(self): return self.__class__(self.data.lower())
-    def lstrip(self, chars=None): return self.__class__(self.data.lstrip(chars))
+
+    def lower(self):
+        return self.__class__(self.data.lower())
+
+    def lstrip(self, chars=None):
+        return self.__class__(self.data.lstrip(chars))
+
     maketrans = str.maketrans
+
     def partition(self, sep):
         return self.data.partition(sep)
+
     def replace(self, old, new, maxsplit=-1):
         if isinstance(old, UserString):
             old = old.data
         if isinstance(new, UserString):
             new = new.data
         return self.__class__(self.data.replace(old, new, maxsplit))
+
     def rfind(self, sub, start=0, end=_sys.maxsize):
         if isinstance(sub, UserString):
             sub = sub.data
         return self.data.rfind(sub, start, end)
+
     def rindex(self, sub, start=0, end=_sys.maxsize):
         return self.data.rindex(sub, start, end)
+
     def rjust(self, width, *args):
         return self.__class__(self.data.rjust(width, *args))
+
     def rpartition(self, sep):
         return self.data.rpartition(sep)
+
     def rstrip(self, chars=None):
         return self.__class__(self.data.rstrip(chars))
+
     def split(self, sep=None, maxsplit=-1):
         return self.data.split(sep, maxsplit)
+
     def rsplit(self, sep=None, maxsplit=-1):
         return self.data.rsplit(sep, maxsplit)
-    def splitlines(self, keepends=False): return self.data.splitlines(keepends)
+
+    def splitlines(self, keepends=False):
+        return self.data.splitlines(keepends)
+
     def startswith(self, prefix, start=0, end=_sys.maxsize):
         return self.data.startswith(prefix, start, end)
-    def strip(self, chars=None): return self.__class__(self.data.strip(chars))
-    def swapcase(self): return self.__class__(self.data.swapcase())
-    def title(self): return self.__class__(self.data.title())
+
+    def strip(self, chars=None):
+        return self.__class__(self.data.strip(chars))
+
+    def swapcase(self):
+        return self.__class__(self.data.swapcase())
+
+    def title(self):
+        return self.__class__(self.data.title())
+
     def translate(self, *args):
         return self.__class__(self.data.translate(*args))
-    def upper(self): return self.__class__(self.data.upper())
-    def zfill(self, width): return self.__class__(self.data.zfill(width))
+
+    def upper(self):
+        return self.__class__(self.data.upper())
+
+    def zfill(self, width):
+        return self.__class__(self.data.zfill(width))
diff --git a/Lib/compileall.py b/Lib/compileall.py
index bfac8ef..fe7f450 100644
--- a/Lib/compileall.py
+++ b/Lib/compileall.py
@@ -15,12 +15,14 @@
 import importlib.util
 import py_compile
 import struct
+import filecmp
 
 from functools import partial
+from pathlib import Path
 
 __all__ = ["compile_dir","compile_file","compile_path"]
 
-def _walk_dir(dir, ddir=None, maxlevels=10, quiet=0):
+def _walk_dir(dir, maxlevels, quiet=0):
     if quiet < 2 and isinstance(dir, os.PathLike):
         dir = os.fspath(dir)
     if not quiet:
@@ -36,37 +38,49 @@
         if name == '__pycache__':
             continue
         fullname = os.path.join(dir, name)
-        if ddir is not None:
-            dfile = os.path.join(ddir, name)
-        else:
-            dfile = None
         if not os.path.isdir(fullname):
-            yield fullname, ddir
+            yield fullname
         elif (maxlevels > 0 and name != os.curdir and name != os.pardir and
               os.path.isdir(fullname) and not os.path.islink(fullname)):
-            yield from _walk_dir(fullname, ddir=dfile,
-                                 maxlevels=maxlevels - 1, quiet=quiet)
+            yield from _walk_dir(fullname, maxlevels=maxlevels - 1,
+                                 quiet=quiet)
 
-def compile_dir(dir, maxlevels=10, ddir=None, force=False, rx=None,
-                quiet=0, legacy=False, optimize=-1, workers=1,
-                invalidation_mode=None):
+def compile_dir(dir, maxlevels=None, ddir=None, force=False,
+                rx=None, quiet=0, legacy=False, optimize=-1, workers=1,
+                invalidation_mode=None, *, stripdir=None,
+                prependdir=None, limit_sl_dest=None, hardlink_dupes=False):
     """Byte-compile all modules in the given directory tree.
 
     Arguments (only dir is required):
 
     dir:       the directory to byte-compile
-    maxlevels: maximum recursion level (default 10)
+    maxlevels: maximum recursion level (default `sys.getrecursionlimit()`)
     ddir:      the directory that will be prepended to the path to the
                file as it is compiled into each byte-code file.
     force:     if True, force compilation, even if timestamps are up-to-date
     quiet:     full output with False or 0, errors only with 1,
                no output with 2
     legacy:    if True, produce legacy pyc paths instead of PEP 3147 paths
-    optimize:  optimization level or -1 for level of the interpreter
+    optimize:  int or list of optimization levels or -1 for level of
+               the interpreter. Multiple levels leads to multiple compiled
+               files each with one optimization level.
     workers:   maximum number of parallel workers
     invalidation_mode: how the up-to-dateness of the pyc will be checked
+    stripdir:  part of path to left-strip from source file path
+    prependdir: path to prepend to beginning of original file path, applied
+               after stripdir
+    limit_sl_dest: ignore symlinks if they are pointing outside of
+                   the defined path
+    hardlink_dupes: hardlink duplicated pyc files
     """
     ProcessPoolExecutor = None
+    if ddir is not None and (stripdir is not None or prependdir is not None):
+        raise ValueError(("Destination dir (ddir) cannot be used "
+                          "in combination with stripdir or prependdir"))
+    if ddir is not None:
+        stripdir = dir
+        prependdir = ddir
+        ddir = None
     if workers < 0:
         raise ValueError('workers must be greater or equal to 0')
     if workers != 1:
@@ -76,36 +90,40 @@
             from concurrent.futures import ProcessPoolExecutor
         except ImportError:
             workers = 1
-    files_and_ddirs = _walk_dir(dir, quiet=quiet, maxlevels=maxlevels,
-                                ddir=ddir)
+    if maxlevels is None:
+        maxlevels = sys.getrecursionlimit()
+    files = _walk_dir(dir, quiet=quiet, maxlevels=maxlevels)
     success = True
     if workers != 1 and ProcessPoolExecutor is not None:
         # If workers == 0, let ProcessPoolExecutor choose
         workers = workers or None
         with ProcessPoolExecutor(max_workers=workers) as executor:
-            results = executor.map(
-                    partial(_compile_file_tuple,
-                            force=force, rx=rx, quiet=quiet,
-                            legacy=legacy, optimize=optimize,
-                            invalidation_mode=invalidation_mode,
-                        ),
-                    files_and_ddirs)
+            results = executor.map(partial(compile_file,
+                                           ddir=ddir, force=force,
+                                           rx=rx, quiet=quiet,
+                                           legacy=legacy,
+                                           optimize=optimize,
+                                           invalidation_mode=invalidation_mode,
+                                           stripdir=stripdir,
+                                           prependdir=prependdir,
+                                           limit_sl_dest=limit_sl_dest,
+                                           hardlink_dupes=hardlink_dupes),
+                                   files)
             success = min(results, default=True)
     else:
-        for file, dfile in files_and_ddirs:
-            if not compile_file(file, dfile, force, rx, quiet,
-                                legacy, optimize, invalidation_mode):
+        for file in files:
+            if not compile_file(file, ddir, force, rx, quiet,
+                                legacy, optimize, invalidation_mode,
+                                stripdir=stripdir, prependdir=prependdir,
+                                limit_sl_dest=limit_sl_dest,
+                                hardlink_dupes=hardlink_dupes):
                 success = False
     return success
 
-def _compile_file_tuple(file_and_dfile, **kwargs):
-    """Needs to be toplevel for ProcessPoolExecutor."""
-    file, dfile = file_and_dfile
-    return compile_file(file, dfile, **kwargs)
-
 def compile_file(fullname, ddir=None, force=False, rx=None, quiet=0,
                  legacy=False, optimize=-1,
-                 invalidation_mode=None):
+                 invalidation_mode=None, *, stripdir=None, prependdir=None,
+                 limit_sl_dest=None, hardlink_dupes=False):
     """Byte-compile one file.
 
     Arguments (only fullname is required):
@@ -117,32 +135,85 @@
     quiet:     full output with False or 0, errors only with 1,
                no output with 2
     legacy:    if True, produce legacy pyc paths instead of PEP 3147 paths
-    optimize:  optimization level or -1 for level of the interpreter
+    optimize:  int or list of optimization levels or -1 for level of
+               the interpreter. Multiple levels leads to multiple compiled
+               files each with one optimization level.
     invalidation_mode: how the up-to-dateness of the pyc will be checked
+    stripdir:  part of path to left-strip from source file path
+    prependdir: path to prepend to beginning of original file path, applied
+               after stripdir
+    limit_sl_dest: ignore symlinks if they are pointing outside of
+                   the defined path.
+    hardlink_dupes: hardlink duplicated pyc files
     """
+
+    if ddir is not None and (stripdir is not None or prependdir is not None):
+        raise ValueError(("Destination dir (ddir) cannot be used "
+                          "in combination with stripdir or prependdir"))
+
     success = True
     if quiet < 2 and isinstance(fullname, os.PathLike):
         fullname = os.fspath(fullname)
     name = os.path.basename(fullname)
+
+    dfile = None
+
     if ddir is not None:
         dfile = os.path.join(ddir, name)
-    else:
-        dfile = None
+
+    if stripdir is not None:
+        fullname_parts = fullname.split(os.path.sep)
+        stripdir_parts = stripdir.split(os.path.sep)
+        ddir_parts = list(fullname_parts)
+
+        for spart, opart in zip(stripdir_parts, fullname_parts):
+            if spart == opart:
+                ddir_parts.remove(spart)
+
+        dfile = os.path.join(*ddir_parts)
+
+    if prependdir is not None:
+        if dfile is None:
+            dfile = os.path.join(prependdir, fullname)
+        else:
+            dfile = os.path.join(prependdir, dfile)
+
+    if isinstance(optimize, int):
+        optimize = [optimize]
+
+    # Use set() to remove duplicates.
+    # Use sorted() to create pyc files in a deterministic order.
+    optimize = sorted(set(optimize))
+
+    if hardlink_dupes and len(optimize) < 2:
+        raise ValueError("Hardlinking of duplicated bytecode makes sense "
+                          "only for more than one optimization level")
+
     if rx is not None:
         mo = rx.search(fullname)
         if mo:
             return success
+
+    if limit_sl_dest is not None and os.path.islink(fullname):
+        if Path(limit_sl_dest).resolve() not in Path(fullname).resolve().parents:
+            return success
+
+    opt_cfiles = {}
+
     if os.path.isfile(fullname):
-        if legacy:
-            cfile = fullname + 'c'
-        else:
-            if optimize >= 0:
-                opt = optimize if optimize >= 1 else ''
-                cfile = importlib.util.cache_from_source(
-                                fullname, optimization=opt)
+        for opt_level in optimize:
+            if legacy:
+                opt_cfiles[opt_level] = fullname + 'c'
             else:
-                cfile = importlib.util.cache_from_source(fullname)
-            cache_dir = os.path.dirname(cfile)
+                if opt_level >= 0:
+                    opt = opt_level if opt_level >= 1 else ''
+                    cfile = (importlib.util.cache_from_source(
+                             fullname, optimization=opt))
+                    opt_cfiles[opt_level] = cfile
+                else:
+                    cfile = importlib.util.cache_from_source(fullname)
+                    opt_cfiles[opt_level] = cfile
+
         head, tail = name[:-3], name[-3:]
         if tail == '.py':
             if not force:
@@ -150,18 +221,28 @@
                     mtime = int(os.stat(fullname).st_mtime)
                     expect = struct.pack('<4sll', importlib.util.MAGIC_NUMBER,
                                          0, mtime)
-                    with open(cfile, 'rb') as chandle:
-                        actual = chandle.read(12)
-                    if expect == actual:
+                    for cfile in opt_cfiles.values():
+                        with open(cfile, 'rb') as chandle:
+                            actual = chandle.read(12)
+                        if expect != actual:
+                            break
+                    else:
                         return success
                 except OSError:
                     pass
             if not quiet:
                 print('Compiling {!r}...'.format(fullname))
             try:
-                ok = py_compile.compile(fullname, cfile, dfile, True,
-                                        optimize=optimize,
-                                        invalidation_mode=invalidation_mode)
+                for index, opt_level in enumerate(optimize):
+                    cfile = opt_cfiles[opt_level]
+                    ok = py_compile.compile(fullname, cfile, dfile, True,
+                                            optimize=opt_level,
+                                            invalidation_mode=invalidation_mode)
+                    if index > 0 and hardlink_dupes:
+                        previous_cfile = opt_cfiles[optimize[index - 1]]
+                        if filecmp.cmp(cfile, previous_cfile, shallow=False):
+                            os.unlink(cfile)
+                            os.link(previous_cfile, cfile)
             except py_compile.PyCompileError as err:
                 success = False
                 if quiet >= 2:
@@ -230,7 +311,7 @@
     parser = argparse.ArgumentParser(
         description='Utilities to support installing Python libraries.')
     parser.add_argument('-l', action='store_const', const=0,
-                        default=10, dest='maxlevels',
+                        default=None, dest='maxlevels',
                         help="don't recurse into subdirectories")
     parser.add_argument('-r', type=int, dest='recursion',
                         help=('control the maximum recursion level. '
@@ -248,6 +329,20 @@
                               'compile-time tracebacks and in runtime '
                               'tracebacks in cases where the source file is '
                               'unavailable'))
+    parser.add_argument('-s', metavar='STRIPDIR',  dest='stripdir',
+                        default=None,
+                        help=('part of path to left-strip from path '
+                              'to source file - for example buildroot. '
+                              '`-d` and `-s` options cannot be '
+                              'specified together.'))
+    parser.add_argument('-p', metavar='PREPENDDIR',  dest='prependdir',
+                        default=None,
+                        help=('path to add as prefix to path '
+                              'to source file - for example / to make '
+                              'it absolute when some part is removed '
+                              'by `-s` option. '
+                              '`-d` and `-p` options cannot be '
+                              'specified together.'))
     parser.add_argument('-x', metavar='REGEXP', dest='rx', default=None,
                         help=('skip files matching the regular expression; '
                               'the regexp is searched for in the full path '
@@ -270,6 +365,15 @@
                               '"checked-hash" if the SOURCE_DATE_EPOCH '
                               'environment variable is set, and '
                               '"timestamp" otherwise.'))
+    parser.add_argument('-o', action='append', type=int, dest='opt_levels',
+                        help=('Optimization levels to run compilation with.'
+                              'Default is -1 which uses optimization level of'
+                              'Python interpreter itself (specified by -O).'))
+    parser.add_argument('-e', metavar='DIR', dest='limit_sl_dest',
+                        help='Ignore symlinks pointing outsite of the DIR')
+    parser.add_argument('--hardlink-dupes', action='store_true',
+                        dest='hardlink_dupes',
+                        help='Hardlink duplicated pyc files')
 
     args = parser.parse_args()
     compile_dests = args.compile_dest
@@ -278,12 +382,26 @@
         import re
         args.rx = re.compile(args.rx)
 
+    if args.limit_sl_dest == "":
+        args.limit_sl_dest = None
 
     if args.recursion is not None:
         maxlevels = args.recursion
     else:
         maxlevels = args.maxlevels
 
+    if args.opt_levels is None:
+        args.opt_levels = [-1]
+
+    if len(args.opt_levels) == 1 and args.hardlink_dupes:
+        parser.error(("Hardlinking of duplicated bytecode makes sense "
+                      "only for more than one optimization level."))
+
+    if args.ddir is not None and (
+        args.stripdir is not None or args.prependdir is not None
+    ):
+        parser.error("-d cannot be used in combination with -s or -p")
+
     # if flist is provided then load it
     if args.flist:
         try:
@@ -308,13 +426,23 @@
                 if os.path.isfile(dest):
                     if not compile_file(dest, args.ddir, args.force, args.rx,
                                         args.quiet, args.legacy,
-                                        invalidation_mode=invalidation_mode):
+                                        invalidation_mode=invalidation_mode,
+                                        stripdir=args.stripdir,
+                                        prependdir=args.prependdir,
+                                        optimize=args.opt_levels,
+                                        limit_sl_dest=args.limit_sl_dest,
+                                        hardlink_dupes=args.hardlink_dupes):
                         success = False
                 else:
                     if not compile_dir(dest, maxlevels, args.ddir,
                                        args.force, args.rx, args.quiet,
                                        args.legacy, workers=args.workers,
-                                       invalidation_mode=invalidation_mode):
+                                       invalidation_mode=invalidation_mode,
+                                       stripdir=args.stripdir,
+                                       prependdir=args.prependdir,
+                                       optimize=args.opt_levels,
+                                       limit_sl_dest=args.limit_sl_dest,
+                                       hardlink_dupes=args.hardlink_dupes):
                         success = False
             return success
         else:
diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py
index 6001e3b..00eb548 100644
--- a/Lib/concurrent/futures/_base.py
+++ b/Lib/concurrent/futures/_base.py
@@ -7,6 +7,7 @@
 import logging
 import threading
 import time
+import types
 
 FIRST_COMPLETED = 'FIRST_COMPLETED'
 FIRST_EXCEPTION = 'FIRST_EXCEPTION'
@@ -544,10 +545,12 @@
             self._condition.notify_all()
         self._invoke_callbacks()
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 class Executor(object):
     """This is an abstract base class for concrete asynchronous executors."""
 
-    def submit(*args, **kwargs):
+    def submit(self, fn, /, *args, **kwargs):
         """Submits a callable to be executed with the given arguments.
 
         Schedules the callable to be executed as fn(*args, **kwargs) and returns
@@ -556,21 +559,7 @@
         Returns:
             A Future representing the given call.
         """
-        if len(args) >= 2:
-            pass
-        elif not args:
-            raise TypeError("descriptor 'submit' of 'Executor' object "
-                            "needs an argument")
-        elif 'fn' in kwargs:
-            import warnings
-            warnings.warn("Passing 'fn' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('submit expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
         raise NotImplementedError()
-    submit.__text_signature__ = '($self, fn, /, *args, **kwargs)'
 
     def map(self, fn, *iterables, timeout=None, chunksize=1):
         """Returns an iterator equivalent to map(fn, iter).
@@ -616,7 +605,7 @@
                     future.cancel()
         return result_iterator()
 
-    def shutdown(self, wait=True):
+    def shutdown(self, wait=True, *, cancel_futures=False):
         """Clean-up the resources associated with the Executor.
 
         It is safe to call this method several times. Otherwise, no other
@@ -626,6 +615,9 @@
             wait: If True then shutdown will not return until all running
                 futures have finished executing and the resources used by the
                 executor have been reclaimed.
+            cancel_futures: If True then shutdown will cancel all pending
+                futures. Futures that are completed or running will not be
+                cancelled.
         """
         pass
 
diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py
index 2b2b78e..90bc98b 100644
--- a/Lib/concurrent/futures/process.py
+++ b/Lib/concurrent/futures/process.py
@@ -45,11 +45,9 @@
 
 __author__ = 'Brian Quinlan (brian@sweetapp.com)'
 
-import atexit
 import os
 from concurrent.futures import _base
 import queue
-from queue import Full
 import multiprocessing as mp
 import multiprocessing.connection
 from multiprocessing.queues import Queue
@@ -60,19 +58,6 @@
 import sys
 import traceback
 
-# Workers are created as daemon threads and processes. This is done to allow the
-# interpreter to exit when there are still idle processes in a
-# ProcessPoolExecutor's process pool (i.e. shutdown() was not called). However,
-# allowing workers to die with the interpreter has two undesirable properties:
-#   - The workers would still be running during interpreter shutdown,
-#     meaning that they would fail in unpredictable ways.
-#   - The workers could be killed while evaluating a work item, which could
-#     be bad if the callable being evaluated has external side-effects e.g.
-#     writing to a file.
-#
-# To work around this problem, an exit handler is installed which tells the
-# workers to exit when their work queues are empty and then waits until the
-# threads/processes finish.
 
 _threads_wakeups = weakref.WeakKeyDictionary()
 _global_shutdown = False
@@ -80,18 +65,23 @@
 
 class _ThreadWakeup:
     def __init__(self):
+        self._closed = False
         self._reader, self._writer = mp.Pipe(duplex=False)
 
     def close(self):
-        self._writer.close()
-        self._reader.close()
+        if not self._closed:
+            self._closed = True
+            self._writer.close()
+            self._reader.close()
 
     def wakeup(self):
-        self._writer.send_bytes(b"")
+        if not self._closed:
+            self._writer.send_bytes(b"")
 
     def clear(self):
-        while self._reader.poll():
-            self._reader.recv_bytes()
+        if not self._closed:
+            while self._reader.poll():
+                self._reader.recv_bytes()
 
 
 def _python_exit():
@@ -99,10 +89,17 @@
     _global_shutdown = True
     items = list(_threads_wakeups.items())
     for _, thread_wakeup in items:
+        # call not protected by ProcessPoolExecutor._shutdown_lock
         thread_wakeup.wakeup()
     for t, _ in items:
         t.join()
 
+# Register for `_python_exit()` to be called just before joining all
+# non-daemon threads. This is used instead of `atexit.register()` for
+# compatibility with subinterpreters, which no longer support daemon threads.
+# See bpo-39812 for context.
+threading._register_atexit(_python_exit)
+
 # Controls how many more calls than processes will be queued in the call queue.
 # A smaller number will mean that processes spend more time idle waiting for
 # work while a larger number will make Future.cancel() succeed less frequently
@@ -160,8 +157,11 @@
 
 class _SafeQueue(Queue):
     """Safe Queue set exception to the future object linked to a job"""
-    def __init__(self, max_size=0, *, ctx, pending_work_items):
+    def __init__(self, max_size=0, *, ctx, pending_work_items, shutdown_lock,
+                 thread_wakeup):
         self.pending_work_items = pending_work_items
+        self.shutdown_lock = shutdown_lock
+        self.thread_wakeup = thread_wakeup
         super().__init__(max_size, ctx=ctx)
 
     def _on_queue_feeder_error(self, e, obj):
@@ -169,8 +169,11 @@
             tb = traceback.format_exception(type(e), e, e.__traceback__)
             e.__cause__ = _RemoteTraceback('\n"""\n{}"""'.format(''.join(tb)))
             work_item = self.pending_work_items.pop(obj.work_id, None)
-            # work_item can be None if another process terminated. In this case,
-            # the queue_manager_thread fails all work_items with BrokenProcessPool
+            with self.shutdown_lock:
+                self.thread_wakeup.wakeup()
+            # work_item can be None if another process terminated. In this
+            # case, the executor_manager_thread fails all work_items
+            # with BrokenProcessPool
             if work_item is not None:
                 work_item.future.set_exception(e)
         else:
@@ -186,6 +189,7 @@
             return
         yield chunk
 
+
 def _process_chunk(fn, chunk):
     """ Processes a chunk of an iterable passed to map.
 
@@ -249,120 +253,132 @@
         del call_item
 
 
-def _add_call_item_to_queue(pending_work_items,
-                            work_ids,
-                            call_queue):
-    """Fills call_queue with _WorkItems from pending_work_items.
-
-    This function never blocks.
-
-    Args:
-        pending_work_items: A dict mapping work ids to _WorkItems e.g.
-            {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
-        work_ids: A queue.Queue of work ids e.g. Queue([5, 6, ...]). Work ids
-            are consumed and the corresponding _WorkItems from
-            pending_work_items are transformed into _CallItems and put in
-            call_queue.
-        call_queue: A multiprocessing.Queue that will be filled with _CallItems
-            derived from _WorkItems.
-    """
-    while True:
-        if call_queue.full():
-            return
-        try:
-            work_id = work_ids.get(block=False)
-        except queue.Empty:
-            return
-        else:
-            work_item = pending_work_items[work_id]
-
-            if work_item.future.set_running_or_notify_cancel():
-                call_queue.put(_CallItem(work_id,
-                                         work_item.fn,
-                                         work_item.args,
-                                         work_item.kwargs),
-                               block=True)
-            else:
-                del pending_work_items[work_id]
-                continue
-
-
-def _queue_management_worker(executor_reference,
-                             processes,
-                             pending_work_items,
-                             work_ids_queue,
-                             call_queue,
-                             result_queue,
-                             thread_wakeup):
+class _ExecutorManagerThread(threading.Thread):
     """Manages the communication between this process and the worker processes.
 
-    This function is run in a local thread.
+    The manager is run in a local thread.
 
     Args:
-        executor_reference: A weakref.ref to the ProcessPoolExecutor that owns
-            this thread. Used to determine if the ProcessPoolExecutor has been
-            garbage collected and that this function can exit.
-        process: A list of the ctx.Process instances used as
-            workers.
-        pending_work_items: A dict mapping work ids to _WorkItems e.g.
-            {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
-        work_ids_queue: A queue.Queue of work ids e.g. Queue([5, 6, ...]).
-        call_queue: A ctx.Queue that will be filled with _CallItems
-            derived from _WorkItems for processing by the process workers.
-        result_queue: A ctx.SimpleQueue of _ResultItems generated by the
-            process workers.
-        thread_wakeup: A _ThreadWakeup to allow waking up the
-            queue_manager_thread from the main Thread and avoid deadlocks
-            caused by permanently locked queues.
+        executor: A reference to the ProcessPoolExecutor that owns
+            this thread. A weakref will be own by the manager as well as
+            references to internal objects used to introspect the state of
+            the executor.
     """
-    executor = None
 
-    def shutting_down():
-        return (_global_shutdown or executor is None
-                or executor._shutdown_thread)
+    def __init__(self, executor):
+        # Store references to necessary internals of the executor.
 
-    def shutdown_worker():
-        # This is an upper bound on the number of children alive.
-        n_children_alive = sum(p.is_alive() for p in processes.values())
-        n_children_to_stop = n_children_alive
-        n_sentinels_sent = 0
-        # Send the right number of sentinels, to make sure all children are
-        # properly terminated.
-        while n_sentinels_sent < n_children_to_stop and n_children_alive > 0:
-            for i in range(n_children_to_stop - n_sentinels_sent):
-                try:
-                    call_queue.put_nowait(None)
-                    n_sentinels_sent += 1
-                except Full:
-                    break
-            n_children_alive = sum(p.is_alive() for p in processes.values())
+        # A _ThreadWakeup to allow waking up the queue_manager_thread from the
+        # main Thread and avoid deadlocks caused by permanently locked queues.
+        self.thread_wakeup = executor._executor_manager_thread_wakeup
+        self.shutdown_lock = executor._shutdown_lock
 
-        # Release the queue's resources as soon as possible.
-        call_queue.close()
-        # If .join() is not called on the created processes then
-        # some ctx.Queue methods may deadlock on Mac OS X.
-        for p in processes.values():
-            p.join()
+        # A weakref.ref to the ProcessPoolExecutor that owns this thread. Used
+        # to determine if the ProcessPoolExecutor has been garbage collected
+        # and that the manager can exit.
+        # When the executor gets garbage collected, the weakref callback
+        # will wake up the queue management thread so that it can terminate
+        # if there is no pending work item.
+        def weakref_cb(_,
+                       thread_wakeup=self.thread_wakeup,
+                       shutdown_lock=self.shutdown_lock):
+            mp.util.debug('Executor collected: triggering callback for'
+                          ' QueueManager wakeup')
+            with shutdown_lock:
+                thread_wakeup.wakeup()
 
-    result_reader = result_queue._reader
-    wakeup_reader = thread_wakeup._reader
-    readers = [result_reader, wakeup_reader]
+        self.executor_reference = weakref.ref(executor, weakref_cb)
 
-    while True:
-        _add_call_item_to_queue(pending_work_items,
-                                work_ids_queue,
-                                call_queue)
+        # A list of the ctx.Process instances used as workers.
+        self.processes = executor._processes
 
+        # A ctx.Queue that will be filled with _CallItems derived from
+        # _WorkItems for processing by the process workers.
+        self.call_queue = executor._call_queue
+
+        # A ctx.SimpleQueue of _ResultItems generated by the process workers.
+        self.result_queue = executor._result_queue
+
+        # A queue.Queue of work ids e.g. Queue([5, 6, ...]).
+        self.work_ids_queue = executor._work_ids
+
+        # A dict mapping work ids to _WorkItems e.g.
+        #     {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
+        self.pending_work_items = executor._pending_work_items
+
+        super().__init__()
+
+    def run(self):
+        # Main loop for the executor manager thread.
+
+        while True:
+            self.add_call_item_to_queue()
+
+            result_item, is_broken, cause = self.wait_result_broken_or_wakeup()
+
+            if is_broken:
+                self.terminate_broken(cause)
+                return
+            if result_item is not None:
+                self.process_result_item(result_item)
+                # Delete reference to result_item to avoid keeping references
+                # while waiting on new results.
+                del result_item
+
+                # attempt to increment idle process count
+                executor = self.executor_reference()
+                if executor is not None:
+                    executor._idle_worker_semaphore.release()
+                del executor
+
+            if self.is_shutting_down():
+                self.flag_executor_shutting_down()
+
+                # Since no new work items can be added, it is safe to shutdown
+                # this thread if there are no pending work items.
+                if not self.pending_work_items:
+                    self.join_executor_internals()
+                    return
+
+    def add_call_item_to_queue(self):
+        # Fills call_queue with _WorkItems from pending_work_items.
+        # This function never blocks.
+        while True:
+            if self.call_queue.full():
+                return
+            try:
+                work_id = self.work_ids_queue.get(block=False)
+            except queue.Empty:
+                return
+            else:
+                work_item = self.pending_work_items[work_id]
+
+                if work_item.future.set_running_or_notify_cancel():
+                    self.call_queue.put(_CallItem(work_id,
+                                                  work_item.fn,
+                                                  work_item.args,
+                                                  work_item.kwargs),
+                                        block=True)
+                else:
+                    del self.pending_work_items[work_id]
+                    continue
+
+    def wait_result_broken_or_wakeup(self):
         # Wait for a result to be ready in the result_queue while checking
         # that all worker processes are still running, or for a wake up
         # signal send. The wake up signals come either from new tasks being
         # submitted, from the executor being shutdown/gc-ed, or from the
         # shutdown of the python interpreter.
-        worker_sentinels = [p.sentinel for p in processes.values()]
+        result_reader = self.result_queue._reader
+        assert not self.thread_wakeup._closed
+        wakeup_reader = self.thread_wakeup._reader
+        readers = [result_reader, wakeup_reader]
+        worker_sentinels = [p.sentinel for p in self.processes.values()]
         ready = mp.connection.wait(readers + worker_sentinels)
 
         cause = None
         is_broken = True
+        result_item = None
         if result_reader in ready:
             try:
                 result_item = result_reader.recv()
@@ -372,79 +388,138 @@
 
         elif wakeup_reader in ready:
             is_broken = False
-            result_item = None
-        thread_wakeup.clear()
-        if is_broken:
-            # Mark the process pool broken so that submits fail right now.
-            executor = executor_reference()
-            if executor is not None:
-                executor._broken = ('A child process terminated '
-                                    'abruptly, the process pool is not '
-                                    'usable anymore')
-                executor._shutdown_thread = True
-                executor = None
-            bpe = BrokenProcessPool("A process in the process pool was "
-                                    "terminated abruptly while the future was "
-                                    "running or pending.")
-            if cause is not None:
-                bpe.__cause__ = _RemoteTraceback(
-                    f"\n'''\n{''.join(cause)}'''")
-            # All futures in flight must be marked failed
-            for work_id, work_item in pending_work_items.items():
-                work_item.future.set_exception(bpe)
-                # Delete references to object. See issue16284
-                del work_item
-            pending_work_items.clear()
-            # Terminate remaining workers forcibly: the queues or their
-            # locks may be in a dirty state and block forever.
-            for p in processes.values():
-                p.terminate()
-            shutdown_worker()
-            return
+
+        with self.shutdown_lock:
+            self.thread_wakeup.clear()
+
+        return result_item, is_broken, cause
+
+    def process_result_item(self, result_item):
+        # Process the received a result_item. This can be either the PID of a
+        # worker that exited gracefully or a _ResultItem
+
         if isinstance(result_item, int):
             # Clean shutdown of a worker using its PID
             # (avoids marking the executor broken)
-            assert shutting_down()
-            p = processes.pop(result_item)
+            assert self.is_shutting_down()
+            p = self.processes.pop(result_item)
             p.join()
-            if not processes:
-                shutdown_worker()
+            if not self.processes:
+                self.join_executor_internals()
                 return
-        elif result_item is not None:
-            work_item = pending_work_items.pop(result_item.work_id, None)
+        else:
+            # Received a _ResultItem so mark the future as completed.
+            work_item = self.pending_work_items.pop(result_item.work_id, None)
             # work_item can be None if another process terminated (see above)
             if work_item is not None:
                 if result_item.exception:
                     work_item.future.set_exception(result_item.exception)
                 else:
                     work_item.future.set_result(result_item.result)
-                # Delete references to object. See issue16284
-                del work_item
-            # Delete reference to result_item
-            del result_item
 
-        # Check whether we should start shutting down.
-        executor = executor_reference()
+    def is_shutting_down(self):
+        # Check whether we should start shutting down the executor.
+        executor = self.executor_reference()
         # No more work items can be added if:
         #   - The interpreter is shutting down OR
         #   - The executor that owns this worker has been collected OR
         #   - The executor that owns this worker has been shutdown.
-        if shutting_down():
-            try:
-                # Flag the executor as shutting down as early as possible if it
-                # is not gc-ed yet.
-                if executor is not None:
-                    executor._shutdown_thread = True
-                # Since no new work items can be added, it is safe to shutdown
-                # this thread if there are no pending work items.
-                if not pending_work_items:
-                    shutdown_worker()
-                    return
-            except Full:
-                # This is not a problem: we will eventually be woken up (in
-                # result_queue.get()) and be able to send a sentinel again.
-                pass
-        executor = None
+        return (_global_shutdown or executor is None
+                or executor._shutdown_thread)
+
+    def terminate_broken(self, cause):
+        # Terminate the executor because it is in a broken state. The cause
+        # argument can be used to display more information on the error that
+        # lead the executor into becoming broken.
+
+        # Mark the process pool broken so that submits fail right now.
+        executor = self.executor_reference()
+        if executor is not None:
+            executor._broken = ('A child process terminated '
+                                'abruptly, the process pool is not '
+                                'usable anymore')
+            executor._shutdown_thread = True
+            executor = None
+
+        # All pending tasks are to be marked failed with the following
+        # BrokenProcessPool error
+        bpe = BrokenProcessPool("A process in the process pool was "
+                                "terminated abruptly while the future was "
+                                "running or pending.")
+        if cause is not None:
+            bpe.__cause__ = _RemoteTraceback(
+                f"\n'''\n{''.join(cause)}'''")
+
+        # Mark pending tasks as failed.
+        for work_id, work_item in self.pending_work_items.items():
+            work_item.future.set_exception(bpe)
+            # Delete references to object. See issue16284
+            del work_item
+        self.pending_work_items.clear()
+
+        # Terminate remaining workers forcibly: the queues or their
+        # locks may be in a dirty state and block forever.
+        for p in self.processes.values():
+            p.terminate()
+
+        # clean up resources
+        self.join_executor_internals()
+
+    def flag_executor_shutting_down(self):
+        # Flag the executor as shutting down and cancel remaining tasks if
+        # requested as early as possible if it is not gc-ed yet.
+        executor = self.executor_reference()
+        if executor is not None:
+            executor._shutdown_thread = True
+            # Cancel pending work items if requested.
+            if executor._cancel_pending_futures:
+                # Cancel all pending futures and update pending_work_items
+                # to only have futures that are currently running.
+                new_pending_work_items = {}
+                for work_id, work_item in self.pending_work_items.items():
+                    if not work_item.future.cancel():
+                        new_pending_work_items[work_id] = work_item
+                self.pending_work_items = new_pending_work_items
+                # Drain work_ids_queue since we no longer need to
+                # add items to the call queue.
+                while True:
+                    try:
+                        self.work_ids_queue.get_nowait()
+                    except queue.Empty:
+                        break
+                # Make sure we do this only once to not waste time looping
+                # on running processes over and over.
+                executor._cancel_pending_futures = False
+
+    def shutdown_workers(self):
+        n_children_to_stop = self.get_n_children_alive()
+        n_sentinels_sent = 0
+        # Send the right number of sentinels, to make sure all children are
+        # properly terminated.
+        while (n_sentinels_sent < n_children_to_stop
+                and self.get_n_children_alive() > 0):
+            for i in range(n_children_to_stop - n_sentinels_sent):
+                try:
+                    self.call_queue.put_nowait(None)
+                    n_sentinels_sent += 1
+                except queue.Full:
+                    break
+
+    def join_executor_internals(self):
+        self.shutdown_workers()
+        # Release the queue's resources as soon as possible.
+        self.call_queue.close()
+        self.call_queue.join_thread()
+        with self.shutdown_lock:
+            self.thread_wakeup.close()
+        # If .join() is not called on the created processes then
+        # some ctx.Queue methods may deadlock on Mac OS X.
+        for p in self.processes.values():
+            p.join()
+
+    def get_n_children_alive(self):
+        # This is an upper bound on the number of children alive.
+        return sum(p.is_alive() for p in self.processes.values())
 
 
 _system_limits_checked = False
@@ -535,7 +610,7 @@
         self._initargs = initargs
 
         # Management thread
-        self._queue_management_thread = None
+        self._executor_manager_thread = None
 
         # Map of pids to processes
         self._processes = {}
@@ -543,9 +618,21 @@
         # Shutdown is a two-step process.
         self._shutdown_thread = False
         self._shutdown_lock = threading.Lock()
+        self._idle_worker_semaphore = threading.Semaphore(0)
         self._broken = False
         self._queue_count = 0
         self._pending_work_items = {}
+        self._cancel_pending_futures = False
+
+        # _ThreadWakeup is a communication channel used to interrupt the wait
+        # of the main loop of executor_manager_thread from another thread (e.g.
+        # when calling executor.submit or executor.shutdown). We do not use the
+        # _result_queue to send wakeup signals to the executor_manager_thread
+        # as it could result in a deadlock if a worker process dies with the
+        # _result_queue write lock still acquired.
+        #
+        # _shutdown_lock must be locked to access _ThreadWakeup.
+        self._executor_manager_thread_wakeup = _ThreadWakeup()
 
         # Create communication channels for the executor
         # Make the call queue slightly larger than the number of processes to
@@ -554,7 +641,9 @@
         queue_size = self._max_workers + EXTRA_QUEUED_CALLS
         self._call_queue = _SafeQueue(
             max_size=queue_size, ctx=self._mp_context,
-            pending_work_items=self._pending_work_items)
+            pending_work_items=self._pending_work_items,
+            shutdown_lock=self._shutdown_lock,
+            thread_wakeup=self._executor_manager_thread_wakeup)
         # Killed worker processes can produce spurious "broken pipe"
         # tracebacks in the queue's own worker thread. But we detect killed
         # processes anyway, so silence the tracebacks.
@@ -562,43 +651,21 @@
         self._result_queue = mp_context.SimpleQueue()
         self._work_ids = queue.Queue()
 
-        # _ThreadWakeup is a communication channel used to interrupt the wait
-        # of the main loop of queue_manager_thread from another thread (e.g.
-        # when calling executor.submit or executor.shutdown). We do not use the
-        # _result_queue to send the wakeup signal to the queue_manager_thread
-        # as it could result in a deadlock if a worker process dies with the
-        # _result_queue write lock still acquired.
-        self._queue_management_thread_wakeup = _ThreadWakeup()
-
-    def _start_queue_management_thread(self):
-        if self._queue_management_thread is None:
-            # When the executor gets garbarge collected, the weakref callback
-            # will wake up the queue management thread so that it can terminate
-            # if there is no pending work item.
-            def weakref_cb(_,
-                           thread_wakeup=self._queue_management_thread_wakeup):
-                mp.util.debug('Executor collected: triggering callback for'
-                              ' QueueManager wakeup')
-                thread_wakeup.wakeup()
+    def _start_executor_manager_thread(self):
+        if self._executor_manager_thread is None:
             # Start the processes so that their sentinels are known.
-            self._adjust_process_count()
-            self._queue_management_thread = threading.Thread(
-                target=_queue_management_worker,
-                args=(weakref.ref(self, weakref_cb),
-                      self._processes,
-                      self._pending_work_items,
-                      self._work_ids,
-                      self._call_queue,
-                      self._result_queue,
-                      self._queue_management_thread_wakeup),
-                name="QueueManagerThread")
-            self._queue_management_thread.daemon = True
-            self._queue_management_thread.start()
-            _threads_wakeups[self._queue_management_thread] = \
-                self._queue_management_thread_wakeup
+            self._executor_manager_thread = _ExecutorManagerThread(self)
+            self._executor_manager_thread.start()
+            _threads_wakeups[self._executor_manager_thread] = \
+                self._executor_manager_thread_wakeup
 
     def _adjust_process_count(self):
-        for _ in range(len(self._processes), self._max_workers):
+        # if there's an idle process, we don't need to spawn a new one.
+        if self._idle_worker_semaphore.acquire(blocking=False):
+            return
+
+        process_count = len(self._processes)
+        if process_count < self._max_workers:
             p = self._mp_context.Process(
                 target=_process_worker,
                 args=(self._call_queue,
@@ -608,22 +675,7 @@
             p.start()
             self._processes[p.pid] = p
 
-    def submit(*args, **kwargs):
-        if len(args) >= 2:
-            self, fn, *args = args
-        elif not args:
-            raise TypeError("descriptor 'submit' of 'ProcessPoolExecutor' object "
-                            "needs an argument")
-        elif 'fn' in kwargs:
-            fn = kwargs.pop('fn')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'fn' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('submit expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
+    def submit(self, fn, /, *args, **kwargs):
         with self._shutdown_lock:
             if self._broken:
                 raise BrokenProcessPool(self._broken)
@@ -640,11 +692,11 @@
             self._work_ids.put(self._queue_count)
             self._queue_count += 1
             # Wake up queue management thread
-            self._queue_management_thread_wakeup.wakeup()
+            self._executor_manager_thread_wakeup.wakeup()
 
-            self._start_queue_management_thread()
+            self._adjust_process_count()
+            self._start_executor_manager_thread()
             return f
-    submit.__text_signature__ = _base.Executor.submit.__text_signature__
     submit.__doc__ = _base.Executor.submit.__doc__
 
     def map(self, fn, *iterables, timeout=None, chunksize=1):
@@ -676,29 +728,24 @@
                               timeout=timeout)
         return _chain_from_iterable_of_lists(results)
 
-    def shutdown(self, wait=True):
+    def shutdown(self, wait=True, *, cancel_futures=False):
         with self._shutdown_lock:
+            self._cancel_pending_futures = cancel_futures
             self._shutdown_thread = True
-        if self._queue_management_thread:
-            # Wake up queue management thread
-            self._queue_management_thread_wakeup.wakeup()
-            if wait:
-                self._queue_management_thread.join()
+            if self._executor_manager_thread_wakeup is not None:
+                # Wake up queue management thread
+                self._executor_manager_thread_wakeup.wakeup()
+
+        if self._executor_manager_thread is not None and wait:
+            self._executor_manager_thread.join()
         # To reduce the risk of opening too many files, remove references to
         # objects that use file descriptors.
-        self._queue_management_thread = None
-        if self._call_queue is not None:
-            self._call_queue.close()
-            if wait:
-                self._call_queue.join_thread()
-            self._call_queue = None
+        self._executor_manager_thread = None
+        self._call_queue = None
+        if self._result_queue is not None and wait:
+            self._result_queue.close()
         self._result_queue = None
         self._processes = None
-
-        if self._queue_management_thread_wakeup:
-            self._queue_management_thread_wakeup.close()
-            self._queue_management_thread_wakeup = None
+        self._executor_manager_thread_wakeup = None
 
     shutdown.__doc__ = _base.Executor.shutdown.__doc__
-
-atexit.register(_python_exit)
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index 9e669b2..b7a2cac 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -5,41 +5,36 @@
 
 __author__ = 'Brian Quinlan (brian@sweetapp.com)'
 
-import atexit
 from concurrent.futures import _base
 import itertools
 import queue
 import threading
+import types
 import weakref
 import os
 
-# Workers are created as daemon threads. This is done to allow the interpreter
-# to exit when there are still idle threads in a ThreadPoolExecutor's thread
-# pool (i.e. shutdown() was not called). However, allowing workers to die with
-# the interpreter has two undesirable properties:
-#   - The workers would still be running during interpreter shutdown,
-#     meaning that they would fail in unpredictable ways.
-#   - The workers could be killed while evaluating a work item, which could
-#     be bad if the callable being evaluated has external side-effects e.g.
-#     writing to a file.
-#
-# To work around this problem, an exit handler is installed which tells the
-# workers to exit when their work queues are empty and then waits until the
-# threads finish.
 
 _threads_queues = weakref.WeakKeyDictionary()
 _shutdown = False
+# Lock that ensures that new workers are not created while the interpreter is
+# shutting down. Must be held while mutating _threads_queues and _shutdown.
+_global_shutdown_lock = threading.Lock()
 
 def _python_exit():
     global _shutdown
-    _shutdown = True
+    with _global_shutdown_lock:
+        _shutdown = True
     items = list(_threads_queues.items())
     for t, q in items:
         q.put(None)
     for t, q in items:
         t.join()
 
-atexit.register(_python_exit)
+# Register for `_python_exit()` to be called just before joining all
+# non-daemon threads. This is used instead of `atexit.register()` for
+# compatibility with subinterpreters, which no longer support daemon threads.
+# See bpo-39812 for context.
+threading._register_atexit(_python_exit)
 
 
 class _WorkItem(object):
@@ -62,6 +57,8 @@
         else:
             self.future.set_result(result)
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 def _worker(executor_reference, work_queue, initializer, initargs):
     if initializer is not None:
@@ -155,23 +152,8 @@
         self._initializer = initializer
         self._initargs = initargs
 
-    def submit(*args, **kwargs):
-        if len(args) >= 2:
-            self, fn, *args = args
-        elif not args:
-            raise TypeError("descriptor 'submit' of 'ThreadPoolExecutor' object "
-                            "needs an argument")
-        elif 'fn' in kwargs:
-            fn = kwargs.pop('fn')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'fn' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('submit expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
-        with self._shutdown_lock:
+    def submit(self, fn, /, *args, **kwargs):
+        with self._shutdown_lock, _global_shutdown_lock:
             if self._broken:
                 raise BrokenThreadPool(self._broken)
 
@@ -187,7 +169,6 @@
             self._work_queue.put(w)
             self._adjust_thread_count()
             return f
-    submit.__text_signature__ = _base.Executor.submit.__text_signature__
     submit.__doc__ = _base.Executor.submit.__doc__
 
     def _adjust_thread_count(self):
@@ -209,7 +190,6 @@
                                        self._work_queue,
                                        self._initializer,
                                        self._initargs))
-            t.daemon = True
             t.start()
             self._threads.add(t)
             _threads_queues[t] = self._work_queue
@@ -227,9 +207,22 @@
                 if work_item is not None:
                     work_item.future.set_exception(BrokenThreadPool(self._broken))
 
-    def shutdown(self, wait=True):
+    def shutdown(self, wait=True, *, cancel_futures=False):
         with self._shutdown_lock:
             self._shutdown = True
+            if cancel_futures:
+                # Drain all work items from the queue, and then cancel their
+                # associated futures.
+                while True:
+                    try:
+                        work_item = self._work_queue.get_nowait()
+                    except queue.Empty:
+                        break
+                    if work_item is not None:
+                        work_item.future.cancel()
+
+            # Send a wake-up to prevent threads calling
+            # _work_queue.get(block=True) from permanently blocking.
             self._work_queue.put(None)
         if wait:
             for t in self._threads:
diff --git a/Lib/contextlib.py b/Lib/contextlib.py
index 94dc2bf..ff92d9f 100644
--- a/Lib/contextlib.py
+++ b/Lib/contextlib.py
@@ -4,7 +4,7 @@
 import _collections_abc
 from collections import deque
 from functools import wraps
-from types import MethodType
+from types import MethodType, GenericAlias
 
 __all__ = ["asynccontextmanager", "contextmanager", "closing", "nullcontext",
            "AbstractContextManager", "AbstractAsyncContextManager",
@@ -16,6 +16,8 @@
 
     """An abstract base class for context managers."""
 
+    __class_getitem__ = classmethod(GenericAlias)
+
     def __enter__(self):
         """Return `self` upon entering the runtime context."""
         return self
@@ -36,6 +38,8 @@
 
     """An abstract base class for asynchronous context managers."""
 
+    __class_getitem__ = classmethod(GenericAlias)
+
     async def __aenter__(self):
         """Return `self` upon entering the runtime context."""
         return self
@@ -426,26 +430,11 @@
         self._push_cm_exit(cm, _exit)
         return result
 
-    def callback(*args, **kwds):
+    def callback(self, callback, /, *args, **kwds):
         """Registers an arbitrary callback and arguments.
 
         Cannot suppress exceptions.
         """
-        if len(args) >= 2:
-            self, callback, *args = args
-        elif not args:
-            raise TypeError("descriptor 'callback' of '_BaseExitStack' object "
-                            "needs an argument")
-        elif 'callback' in kwds:
-            callback = kwds.pop('callback')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'callback' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('callback expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
         _exit_wrapper = self._create_cb_wrapper(callback, *args, **kwds)
 
         # We changed the signature, so using @wraps is not appropriate, but
@@ -453,7 +442,6 @@
         _exit_wrapper.__wrapped__ = callback
         self._push_exit_callback(_exit_wrapper)
         return callback  # Allow use as a decorator
-    callback.__text_signature__ = '($self, callback, /, *args, **kwds)'
 
     def _push_cm_exit(self, cm, cm_exit):
         """Helper to correctly register callbacks to __exit__ methods."""
@@ -587,26 +575,11 @@
             self._push_async_cm_exit(exit, exit_method)
         return exit  # Allow use as a decorator
 
-    def push_async_callback(*args, **kwds):
+    def push_async_callback(self, callback, /, *args, **kwds):
         """Registers an arbitrary coroutine function and arguments.
 
         Cannot suppress exceptions.
         """
-        if len(args) >= 2:
-            self, callback, *args = args
-        elif not args:
-            raise TypeError("descriptor 'push_async_callback' of "
-                            "'AsyncExitStack' object needs an argument")
-        elif 'callback' in kwds:
-            callback = kwds.pop('callback')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'callback' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('push_async_callback expected at least 1 '
-                            'positional argument, got %d' % (len(args)-1))
-
         _exit_wrapper = self._create_async_cb_wrapper(callback, *args, **kwds)
 
         # We changed the signature, so using @wraps is not appropriate, but
@@ -614,7 +587,6 @@
         _exit_wrapper.__wrapped__ = callback
         self._push_exit_callback(_exit_wrapper, False)
         return callback  # Allow use as a decorator
-    push_async_callback.__text_signature__ = '($self, callback, /, *args, **kwds)'
 
     async def aclose(self):
         """Immediately unwind the context stack."""
diff --git a/Lib/copyreg.py b/Lib/copyreg.py
index dfc463c..7ab8c12 100644
--- a/Lib/copyreg.py
+++ b/Lib/copyreg.py
@@ -48,6 +48,7 @@
     return obj
 
 _HEAPTYPE = 1<<9
+_new_type = type(int.__new__)
 
 # Python code for object.__reduce_ex__ for protocols 0 and 1
 
@@ -57,6 +58,9 @@
     for base in cls.__mro__:
         if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE:
             break
+        new = base.__new__
+        if isinstance(new, _new_type) and new.__self__ is base:
+            break
     else:
         base = object # not really reachable
     if base is object:
diff --git a/Lib/crypt.py b/Lib/crypt.py
index 8846602..33dbc46 100644
--- a/Lib/crypt.py
+++ b/Lib/crypt.py
@@ -10,6 +10,7 @@
     else:
         raise ImportError("The required _crypt module was not built as part of CPython")
 
+import errno
 import string as _string
 from random import SystemRandom as _SystemRandom
 from collections import namedtuple as _namedtuple
@@ -88,7 +89,14 @@
     method = _Method(name, *args)
     globals()['METHOD_' + name] = method
     salt = mksalt(method, rounds=rounds)
-    result = crypt('', salt)
+    result = None
+    try:
+        result = crypt('', salt)
+    except OSError as e:
+        # Not all libc libraries support all encryption methods.
+        if e.errno == errno.EINVAL:
+            return False
+        raise
     if result and len(result) == method.total_size:
         methods.append(method)
         return True
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index 8f09911..4afa4eb 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -1,6 +1,7 @@
 """create and manipulate C data types in Python"""
 
 import os as _os, sys as _sys
+import types as _types
 
 __version__ = "1.1.0"
 
@@ -450,6 +451,8 @@
     def LoadLibrary(self, name):
         return self._dlltype(name)
 
+    __class_getitem__ = classmethod(_types.GenericAlias)
+
 cdll = LibraryLoader(CDLL)
 pydll = LibraryLoader(PyDLL)
 
diff --git a/Lib/ctypes/macholib/dyld.py b/Lib/ctypes/macholib/dyld.py
index 9d86b05..1c3f8fd 100644
--- a/Lib/ctypes/macholib/dyld.py
+++ b/Lib/ctypes/macholib/dyld.py
@@ -6,6 +6,11 @@
 from ctypes.macholib.framework import framework_info
 from ctypes.macholib.dylib import dylib_info
 from itertools import *
+try:
+    from _ctypes import _dyld_shared_cache_contains_path
+except ImportError:
+    def _dyld_shared_cache_contains_path(*args):
+        raise NotImplementedError
 
 __all__ = [
     'dyld_find', 'framework_find',
@@ -122,8 +127,15 @@
                 dyld_executable_path_search(name, executable_path),
                 dyld_default_search(name, env),
             ), env):
+
         if os.path.isfile(path):
             return path
+        try:
+            if _dyld_shared_cache_contains_path(path):
+                return path
+        except NotImplementedError:
+            pass
+
     raise ValueError("dylib %s could not be found" % (name,))
 
 def framework_find(fn, executable_path=None, env=None):
diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
index b99fdcb..92ac184 100644
--- a/Lib/ctypes/test/test_find.py
+++ b/Lib/ctypes/test/test_find.py
@@ -1,4 +1,5 @@
 import unittest
+import unittest.mock
 import os.path
 import sys
 import test.support
@@ -72,7 +73,7 @@
 
 @unittest.skipUnless(sys.platform.startswith('linux'),
                      'Test only valid for Linux')
-class LibPathFindTest(unittest.TestCase):
+class FindLibraryLinux(unittest.TestCase):
     def test_find_on_libpath(self):
         import subprocess
         import tempfile
@@ -111,6 +112,15 @@
                 # LD_LIBRARY_PATH)
                 self.assertEqual(find_library(libname), 'lib%s.so' % libname)
 
+    def test_find_library_with_gcc(self):
+        with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None):
+            self.assertNotEqual(find_library('c'), None)
+
+    def test_find_library_with_ld(self):
+        with unittest.mock.patch("ctypes.util._findSoname_ldconfig", lambda *args: None), \
+             unittest.mock.patch("ctypes.util._findLib_gcc", lambda *args: None):
+            self.assertNotEqual(find_library('c'), None)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/ctypes/test/test_loading.py b/Lib/ctypes/test/test_loading.py
index 5c48b0d..ba655bc 100644
--- a/Lib/ctypes/test/test_loading.py
+++ b/Lib/ctypes/test/test_loading.py
@@ -3,7 +3,6 @@
 import shutil
 import subprocess
 import sys
-import sysconfig
 import unittest
 import test.support
 from ctypes.util import find_library
diff --git a/Lib/ctypes/test/test_macholib.py b/Lib/ctypes/test/test_macholib.py
index 6b35269..a1bac26 100644
--- a/Lib/ctypes/test/test_macholib.py
+++ b/Lib/ctypes/test/test_macholib.py
@@ -45,19 +45,22 @@
 class MachOTest(unittest.TestCase):
     @unittest.skipUnless(sys.platform == "darwin", 'OSX-specific test')
     def test_find(self):
-
-        self.assertEqual(find_lib('pthread'),
-                             '/usr/lib/libSystem.B.dylib')
+        # On Mac OS 11, system dylibs are only present in the shared cache,
+        # so symlinks like libpthread.dylib -> libSystem.B.dylib will not
+        # be resolved by dyld_find
+        self.assertIn(find_lib('pthread'),
+                              ('/usr/lib/libSystem.B.dylib', '/usr/lib/libpthread.dylib'))
 
         result = find_lib('z')
         # Issue #21093: dyld default search path includes $HOME/lib and
         # /usr/local/lib before /usr/lib, which caused test failures if
         # a local copy of libz exists in one of them. Now ignore the head
         # of the path.
-        self.assertRegex(result, r".*/lib/libz\..*.*\.dylib")
+        self.assertRegex(result, r".*/lib/libz.*\.dylib")
 
-        self.assertEqual(find_lib('IOKit'),
-                             '/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit')
+        self.assertIn(find_lib('IOKit'),
+                              ('/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit',
+                              '/System/Library/Frameworks/IOKit.framework/IOKit'))
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/ctypes/test/test_stringptr.py b/Lib/ctypes/test/test_stringptr.py
index 95cd161..c20951f 100644
--- a/Lib/ctypes/test/test_stringptr.py
+++ b/Lib/ctypes/test/test_stringptr.py
@@ -70,8 +70,8 @@
         x = r[0], r[1], r[2], r[3], r[4]
         self.assertEqual(x, (b"c", b"d", b"e", b"f", b"\000"))
         del buf
-        # x1 will NOT be the same as x, usually:
-        x1 = r[0], r[1], r[2], r[3], r[4]
+        # Because r is a pointer to memory that is freed after deleting buf,
+        # the pointer is hanging and using it would reference freed memory.
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
index cdbaa7f..245cd94 100644
--- a/Lib/ctypes/test/test_structures.py
+++ b/Lib/ctypes/test/test_structures.py
@@ -7,6 +7,11 @@
 import _ctypes_test
 from test import support
 
+# The following definition is meant to be used from time to time to assist
+# temporarily disabling tests on specific architectures while investigations
+# are in progress, to keep buildbots happy.
+MACHINE = platform.machine()
+
 class SubclassesTest(unittest.TestCase):
     def test_subclass(self):
         class X(Structure):
diff --git a/Lib/ctypes/test/test_wintypes.py b/Lib/ctypes/test/test_wintypes.py
index 71442df..243d596 100644
--- a/Lib/ctypes/test/test_wintypes.py
+++ b/Lib/ctypes/test/test_wintypes.py
@@ -1,12 +1,13 @@
-import sys
 import unittest
 
-from ctypes import *
+# also work on POSIX
 
-@unittest.skipUnless(sys.platform.startswith('win'), 'Windows-only test')
+from ctypes import *
+from ctypes import wintypes
+
+
 class WinTypesTest(unittest.TestCase):
     def test_variant_bool(self):
-        from ctypes import wintypes
         # reads 16-bits from memory, anything non-zero is True
         for true_value in (1, 32767, 32768, 65535, 65537):
             true = POINTER(c_int16)(c_int16(true_value))
@@ -37,5 +38,6 @@
         vb.value = []
         self.assertIs(vb.value, False)
 
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index 97973bc..0c2510e 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -93,6 +93,12 @@
     # Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
     import re, tempfile
 
+    def _is_elf(filename):
+        "Return True if the given file is an ELF file"
+        elf_header = b'\x7fELF'
+        with open(filename, 'br') as thefile:
+            return thefile.read(4) == elf_header
+
     def _findLib_gcc(name):
         # Run GCC's linker with the -t (aka --trace) option and examine the
         # library name it prints out. The GCC command will fail because we
@@ -130,10 +136,17 @@
                 # Raised if the file was already removed, which is the normal
                 # behaviour of GCC if linking fails
                 pass
-        res = re.search(expr, trace)
+        res = re.findall(expr, trace)
         if not res:
             return None
-        return os.fsdecode(res.group(0))
+
+        for file in res:
+            # Check if the given file is an elf file: gcc can report
+            # some files that are linker scripts and not actual
+            # shared objects. See bpo-41976 for more details
+            if not _is_elf(file):
+                continue
+            return os.fsdecode(file)
 
 
     if sys.platform == "sunos5":
@@ -299,17 +312,22 @@
                                      stderr=subprocess.PIPE,
                                      universal_newlines=True)
                 out, _ = p.communicate()
-                res = re.search(expr, os.fsdecode(out))
-                if res:
-                    result = res.group(0)
-            except Exception as e:
+                res = re.findall(expr, os.fsdecode(out))
+                for file in res:
+                    # Check if the given file is an elf file: gcc can report
+                    # some files that are linker scripts and not actual
+                    # shared objects. See bpo-41976 for more details
+                    if not _is_elf(file):
+                        continue
+                    return os.fsdecode(file)
+            except Exception:
                 pass  # result will be None
             return result
 
         def find_library(name):
             # See issue #9998
             return _findSoname_ldconfig(name) or \
-                   _get_soname(_findLib_gcc(name) or _findLib_ld(name))
+                   _get_soname(_findLib_gcc(name)) or _get_soname(_findLib_ld(name))
 
 ################################################################
 # test code
diff --git a/Lib/curses/__init__.py b/Lib/curses/__init__.py
index 24ff3ca..69270bf 100644
--- a/Lib/curses/__init__.py
+++ b/Lib/curses/__init__.py
@@ -60,7 +60,7 @@
 # raises an exception, wrapper() will restore the terminal to a sane state so
 # you can read the resulting traceback.
 
-def wrapper(*args, **kwds):
+def wrapper(func, /, *args, **kwds):
     """Wrapper function that initializes curses and calls another function,
     restoring normal keyboard/screen behavior on error.
     The callable object 'func' is then passed the main window 'stdscr'
@@ -68,17 +68,6 @@
     wrapper().
     """
 
-    if args:
-        func, *args = args
-    elif 'func' in kwds:
-        func = kwds.pop('func')
-        import warnings
-        warnings.warn("Passing 'func' as keyword argument is deprecated",
-                      DeprecationWarning, stacklevel=2)
-    else:
-        raise TypeError('wrapper expected at least 1 positional argument, '
-                        'got %d' % len(args))
-
     try:
         # Initialize curses
         stdscr = initscr()
@@ -110,4 +99,3 @@
             echo()
             nocbreak()
             endwin()
-wrapper.__text_signature__ = '(func, /, *args, **kwds)'
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index 10bb33e..530d3e9 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -7,6 +7,7 @@
 import builtins
 import functools
 import _thread
+from types import GenericAlias
 
 
 __all__ = ['dataclass',
@@ -199,11 +200,7 @@
 # https://bugs.python.org/issue33453 for details.
 _MODULE_IDENTIFIER_RE = re.compile(r'^(?:\s*(\w+)\s*\.)?\s*(\w+)')
 
-class _InitVarMeta(type):
-    def __getitem__(self, params):
-        return InitVar(params)
-
-class InitVar(metaclass=_InitVarMeta):
+class InitVar:
     __slots__ = ('type', )
 
     def __init__(self, type):
@@ -217,6 +214,9 @@
             type_name = repr(self.type)
         return f'dataclasses.InitVar[{type_name}]'
 
+    def __class_getitem__(cls, type):
+        return InitVar(type)
+
 
 # Instances of Field are only ever created from within this module,
 # and only from the field() function, although Field instances are
@@ -285,6 +285,8 @@
             # it.
             func(self.default, owner, name)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class _DataclassParams:
     __slots__ = ('init',
@@ -1231,7 +1233,7 @@
                      unsafe_hash=unsafe_hash, frozen=frozen)
 
 
-def replace(*args, **changes):
+def replace(obj, /, **changes):
     """Return a new object replacing specified fields with new values.
 
     This is especially useful for frozen classes.  Example usage:
@@ -1245,17 +1247,6 @@
       c1 = replace(c, x=3)
       assert c1.x == 3 and c1.y == 2
       """
-    if len(args) > 1:
-        raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')
-    if args:
-        obj, = args
-    elif 'obj' in changes:
-        obj = changes.pop('obj')
-        import warnings
-        warnings.warn("Passing 'obj' as keyword argument is deprecated",
-                      DeprecationWarning, stacklevel=2)
-    else:
-        raise TypeError("replace() missing 1 required positional argument: 'obj'")
 
     # We're going to mutate 'changes', but that's okay because it's a
     # new dict, even if called with 'replace(obj, **my_changes)'.
@@ -1291,4 +1282,3 @@
     # changes that aren't fields, this will correctly raise a
     # TypeError.
     return obj.__class__(**changes)
-replace.__text_signature__ = '(obj, /, **kwargs)'
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 0adf1dd..e508d99 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -4,6 +4,10 @@
 time zone and DST data sources.
 """
 
+__all__ = ("date", "datetime", "time", "timedelta", "timezone", "tzinfo",
+           "MINYEAR", "MAXYEAR")
+
+
 import time as _time
 import math as _math
 import sys
@@ -1091,7 +1095,7 @@
         return self.toordinal() % 7 or 7
 
     def isocalendar(self):
-        """Return a 3-tuple containing ISO year, week number, and weekday.
+        """Return a named tuple containing ISO year, week number, and weekday.
 
         The first ISO week of the year is the (Mon-Sun) week
         containing the year's first Thursday; everything else derives
@@ -1116,7 +1120,7 @@
             if today >= _isoweek1monday(year+1):
                 year += 1
                 week = 0
-        return year, week+1, day+1
+        return _IsoCalendarDate(year, week+1, day+1)
 
     # Pickle support.
 
@@ -1206,6 +1210,36 @@
         else:
             return (self.__class__, args, state)
 
+
+class IsoCalendarDate(tuple):
+
+    def __new__(cls, year, week, weekday, /):
+        return super().__new__(cls, (year, week, weekday))
+
+    @property
+    def year(self):
+        return self[0]
+
+    @property
+    def week(self):
+        return self[1]
+
+    @property
+    def weekday(self):
+        return self[2]
+
+    def __reduce__(self):
+        # This code is intended to pickle the object without making the
+        # class public. See https://bugs.python.org/msg352381
+        return (tuple, (tuple(self),))
+
+    def __repr__(self):
+        return (f'{self.__class__.__name__}'
+                f'(year={self[0]}, week={self[1]}, weekday={self[2]})')
+
+
+_IsoCalendarDate = IsoCalendarDate
+del IsoCalendarDate
 _tzinfo_class = tzinfo
 
 class time:
@@ -1418,7 +1452,8 @@
         part is omitted if self.microsecond == 0.
 
         The optional argument timespec specifies the number of additional
-        terms of the time to include.
+        terms of the time to include. Valid options are 'auto', 'hours',
+        'minutes', 'seconds', 'milliseconds' and 'microseconds'.
         """
         s = _format_time(self._hour, self._minute, self._second,
                           self._microsecond, timespec)
@@ -1544,7 +1579,7 @@
         self._tzinfo = tzinfo
 
     def __reduce_ex__(self, protocol):
-        return (time, self._getstate(protocol))
+        return (self.__class__, self._getstate(protocol))
 
     def __reduce__(self):
         return self.__reduce_ex__(2)
@@ -1555,6 +1590,7 @@
 time.max = time(23, 59, 59, 999999)
 time.resolution = timedelta(microseconds=1)
 
+
 class datetime(date):
     """datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
 
@@ -1902,7 +1938,8 @@
         time, default 'T'.
 
         The optional argument timespec specifies the number of additional
-        terms of the time to include.
+        terms of the time to include. Valid options are 'auto', 'hours',
+        'minutes', 'seconds', 'milliseconds' and 'microseconds'.
         """
         s = ("%04d-%02d-%02d%c" % (self._year, self._month, self._day, sep) +
              _format_time(self._hour, self._minute, self._second,
@@ -2510,7 +2547,7 @@
          _format_time, _format_offset, _is_leap, _isoweek1monday, _math,
          _ord2ymd, _time, _time_class, _tzinfo_class, _wrap_strftime, _ymd2ord,
          _divide_and_round, _parse_isoformat_date, _parse_isoformat_time,
-         _parse_hh_mm_ss_ff)
+         _parse_hh_mm_ss_ff, _IsoCalendarDate)
     # XXX Since import * above excludes names that start with _,
     # docstring does not get overwritten. In the future, it may be
     # appropriate to maintain a single module level docstring and
diff --git a/Lib/difflib.py b/Lib/difflib.py
index 5d75643..0dda80d 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -32,6 +32,7 @@
 
 from heapq import nlargest as _nlargest
 from collections import namedtuple as _namedtuple
+from types import GenericAlias
 
 Match = _namedtuple('Match', 'a b size')
 
@@ -129,7 +130,7 @@
     set_seq2(b)
         Set the second sequence to be compared.
 
-    find_longest_match(alo, ahi, blo, bhi)
+    find_longest_match(alo=0, ahi=None, blo=0, bhi=None)
         Find longest matching block in a[alo:ahi] and b[blo:bhi].
 
     get_matching_blocks()
@@ -333,9 +334,11 @@
             for elt in popular: # ditto; as fast for 1% deletion
                 del b2j[elt]
 
-    def find_longest_match(self, alo, ahi, blo, bhi):
+    def find_longest_match(self, alo=0, ahi=None, blo=0, bhi=None):
         """Find longest matching block in a[alo:ahi] and b[blo:bhi].
 
+        By default it will find the longest match in the entirety of a and b.
+
         If isjunk is not defined:
 
         Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where
@@ -390,6 +393,10 @@
         # the unique 'b's and then matching the first two 'a's.
 
         a, b, b2j, isbjunk = self.a, self.b, self.b2j, self.bjunk.__contains__
+        if ahi is None:
+            ahi = len(a)
+        if bhi is None:
+            bhi = len(b)
         besti, bestj, bestsize = alo, blo, 0
         # find longest junk-free match
         # during an iteration of the loop, j2len[j] = length of longest
@@ -685,6 +692,9 @@
         # shorter sequence
         return _calculate_ratio(min(la, lb), la + lb)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 def get_close_matches(word, possibilities, n=3, cutoff=0.6):
     """Use SequenceMatcher to return list of the best "good enough" matches.
 
diff --git a/Lib/dis.py b/Lib/dis.py
index 10e5f7f..e289e17 100644
--- a/Lib/dis.py
+++ b/Lib/dis.py
@@ -542,7 +542,7 @@
     import argparse
 
     parser = argparse.ArgumentParser()
-    parser.add_argument('infile', type=argparse.FileType(), nargs='?', default='-')
+    parser.add_argument('infile', type=argparse.FileType('rb'), nargs='?', default='-')
     args = parser.parse_args()
     with args.infile as infile:
         source = infile.read()
diff --git a/Lib/distutils/_msvccompiler.py b/Lib/distutils/_msvccompiler.py
index 03a5986..af8099a 100644
--- a/Lib/distutils/_msvccompiler.py
+++ b/Lib/distutils/_msvccompiler.py
@@ -14,8 +14,6 @@
 # ported to VS 2015 by Steve Dower
 
 import os
-import shutil
-import stat
 import subprocess
 import winreg
 
@@ -65,8 +63,6 @@
     If vswhere.exe is not available, by definition, VS 2017 is not
     installed.
     """
-    import json
-
     root = os.environ.get("ProgramFiles(x86)") or os.environ.get("ProgramFiles")
     if not root:
         return None, None
diff --git a/Lib/distutils/bcppcompiler.py b/Lib/distutils/bcppcompiler.py
index 9f4c432..071fea5 100644
--- a/Lib/distutils/bcppcompiler.py
+++ b/Lib/distutils/bcppcompiler.py
@@ -14,10 +14,10 @@
 
 import os
 from distutils.errors import \
-     DistutilsExecError, DistutilsPlatformError, \
+     DistutilsExecError, \
      CompileError, LibError, LinkError, UnknownFileError
 from distutils.ccompiler import \
-     CCompiler, gen_preprocess_options, gen_lib_options
+     CCompiler, gen_preprocess_options
 from distutils.file_util import write_file
 from distutils.dep_util import newer
 from distutils import log
diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py
index 4cfc6c7..b5ef143 100644
--- a/Lib/distutils/ccompiler.py
+++ b/Lib/distutils/ccompiler.py
@@ -8,7 +8,7 @@
 from distutils.spawn import spawn
 from distutils.file_util import move_file
 from distutils.dir_util import mkpath
-from distutils.dep_util import newer_pairwise, newer_group
+from distutils.dep_util import newer_group
 from distutils.util import split_quoted, execute
 from distutils import log
 
diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py
index f335a34..0863a18 100644
--- a/Lib/distutils/command/bdist_msi.py
+++ b/Lib/distutils/command/bdist_msi.py
@@ -6,7 +6,9 @@
 Implements the bdist_msi command.
 """
 
-import sys, os
+import os
+import sys
+import warnings
 from distutils.core import Command
 from distutils.dir_util import remove_tree
 from distutils.sysconfig import get_python_version
@@ -122,6 +124,12 @@
                     '3.5', '3.6', '3.7', '3.8', '3.9']
     other_version = 'X'
 
+    def __init__(self, *args, **kw):
+        super().__init__(*args, **kw)
+        warnings.warn("bdist_msi command is deprecated since Python 3.9, "
+                      "use bdist_wheel (wheel packages) instead",
+                      DeprecationWarning, 2)
+
     def initialize_options(self):
         self.bdist_dir = None
         self.plat_name = None
diff --git a/Lib/distutils/command/bdist_rpm.py b/Lib/distutils/command/bdist_rpm.py
index 74381cc..550cbfa 100644
--- a/Lib/distutils/command/bdist_rpm.py
+++ b/Lib/distutils/command/bdist_rpm.py
@@ -6,7 +6,6 @@
 import subprocess, sys, os
 from distutils.core import Command
 from distutils.debug import DEBUG
-from distutils.util import get_platform
 from distutils.file_util import write_file
 from distutils.errors import *
 from distutils.sysconfig import get_python_version
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
index b5ed6f0..0e9ddaa 100644
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -8,7 +8,7 @@
 import warnings
 from distutils.core import Command
 from distutils.util import get_platform
-from distutils.dir_util import create_tree, remove_tree
+from distutils.dir_util import remove_tree
 from distutils.errors import *
 from distutils.sysconfig import get_python_version
 from distutils import log
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index dbcd9d1..1a9bd12 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -490,7 +490,8 @@
                   "in 'ext_modules' option (extension '%s'), "
                   "'sources' must be present and must be "
                   "a list of source filenames" % ext.name)
-        sources = list(sources)
+        # sort to make the resulting .so file build reproducible
+        sources = sorted(sources)
 
         ext_path = self.get_ext_fullpath(ext.name)
         depends = sources + ext.depends
diff --git a/Lib/distutils/command/check.py b/Lib/distutils/command/check.py
index 04c2f96..ada2500 100644
--- a/Lib/distutils/command/check.py
+++ b/Lib/distutils/command/check.py
@@ -11,7 +11,6 @@
     from docutils.parsers.rst import Parser
     from docutils import frontend
     from docutils import nodes
-    from io import StringIO
 
     class SilentReporter(Reporter):
 
@@ -80,8 +79,11 @@
     def check_metadata(self):
         """Ensures that all required elements of meta-data are supplied.
 
-        name, version, URL, (author and author_email) or
-        (maintainer and maintainer_email)).
+        Required fields:
+            name, version, URL
+
+        Recommended fields:
+            (author and author_email) or (maintainer and maintainer_email))
 
         Warns if any are missing.
         """
@@ -97,15 +99,15 @@
         if metadata.author:
             if not metadata.author_email:
                 self.warn("missing meta-data: if 'author' supplied, " +
-                          "'author_email' must be supplied too")
+                          "'author_email' should be supplied too")
         elif metadata.maintainer:
             if not metadata.maintainer_email:
                 self.warn("missing meta-data: if 'maintainer' supplied, " +
-                          "'maintainer_email' must be supplied too")
+                          "'maintainer_email' should be supplied too")
         else:
             self.warn("missing meta-data: either (author and author_email) " +
                       "or (maintainer and maintainer_email) " +
-                      "must be supplied")
+                      "should be supplied")
 
     def check_restructuredtext(self):
         """Checks if the long string fields are reST-compliant."""
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index c625c95..aaa300e 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -30,14 +30,14 @@
 INSTALL_SCHEMES = {
     'unix_prefix': {
         'purelib': '$base/lib/python$py_version_short/site-packages',
-        'platlib': '$platbase/lib/python$py_version_short/site-packages',
+        'platlib': '$platbase/$platlibdir/python$py_version_short/site-packages',
         'headers': '$base/include/python$py_version_short$abiflags/$dist_name',
         'scripts': '$base/bin',
         'data'   : '$base',
         },
     'unix_home': {
         'purelib': '$base/lib/python',
-        'platlib': '$base/lib/python',
+        'platlib': '$base/$platlibdir/python',
         'headers': '$base/include/python/$dist_name',
         'scripts': '$base/bin',
         'data'   : '$base',
@@ -298,6 +298,7 @@
                             'sys_exec_prefix': exec_prefix,
                             'exec_prefix': exec_prefix,
                             'abiflags': abiflags,
+                            'platlibdir': sys.platlibdir,
                            }
 
         if HAS_USER_SITE:
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index 11afa24..95e9fda 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -7,7 +7,6 @@
 
 import os
 import io
-import platform
 import hashlib
 from base64 import standard_b64encode
 from urllib.request import urlopen, Request, HTTPError
@@ -17,6 +16,16 @@
 from distutils.spawn import spawn
 from distutils import log
 
+
+# PyPI Warehouse supports MD5, SHA256, and Blake2 (blake2-256)
+# https://bugs.python.org/issue40698
+_FILE_CONTENT_DIGESTS = {
+    "md5_digest": getattr(hashlib, "md5", None),
+    "sha256_digest": getattr(hashlib, "sha256", None),
+    "blake2_256_digest": getattr(hashlib, "blake2b", None),
+}
+
+
 class upload(PyPIRCCommand):
 
     description = "upload binary package to PyPI"
@@ -88,6 +97,7 @@
             content = f.read()
         finally:
             f.close()
+
         meta = self.distribution.metadata
         data = {
             # action
@@ -102,7 +112,6 @@
             'content': (os.path.basename(filename),content),
             'filetype': command,
             'pyversion': pyversion,
-            'md5_digest': hashlib.md5(content).hexdigest(),
 
             # additional meta-data
             'metadata_version': '1.0',
@@ -124,6 +133,16 @@
 
         data['comment'] = ''
 
+        # file content digests
+        for digest_name, digest_cons in _FILE_CONTENT_DIGESTS.items():
+            if digest_cons is None:
+                continue
+            try:
+                data[digest_name] = digest_cons(content).hexdigest()
+            except ValueError:
+                # hash digest not available or blocked by security policy
+                pass
+
         if self.sign:
             with open(filename + ".asc", "rb") as f:
                 data['gpg_signature'] = (os.path.basename(filename) + ".asc",
diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py
index 6c5d777..66c12dd 100644
--- a/Lib/distutils/cygwinccompiler.py
+++ b/Lib/distutils/cygwinccompiler.py
@@ -51,12 +51,10 @@
 from subprocess import Popen, PIPE, check_output
 import re
 
-from distutils.ccompiler import gen_preprocess_options, gen_lib_options
 from distutils.unixccompiler import UnixCCompiler
 from distutils.file_util import write_file
 from distutils.errors import (DistutilsExecError, CCompilerError,
         CompileError, UnknownFileError)
-from distutils import log
 from distutils.version import LooseVersion
 from distutils.spawn import find_executable
 
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 4c0036a..6934e96 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -19,8 +19,7 @@
 
 from distutils.errors import DistutilsExecError, DistutilsPlatformError, \
                              CompileError, LibError, LinkError
-from distutils.ccompiler import CCompiler, gen_preprocess_options, \
-                                gen_lib_options
+from distutils.ccompiler import CCompiler, gen_lib_options
 from distutils import log
 from distutils.util import get_platform
 
diff --git a/Lib/distutils/msvccompiler.py b/Lib/distutils/msvccompiler.py
index d1de2fb..d5857cb 100644
--- a/Lib/distutils/msvccompiler.py
+++ b/Lib/distutils/msvccompiler.py
@@ -13,7 +13,7 @@
      DistutilsExecError, DistutilsPlatformError, \
      CompileError, LibError, LinkError
 from distutils.ccompiler import \
-     CCompiler, gen_preprocess_options, gen_lib_options
+     CCompiler, gen_lib_options
 from distutils import log
 
 _can_read_reg = False
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index ceb9494..f50edd2 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -8,11 +8,18 @@
 
 import sys
 import os
+import subprocess
 
 from distutils.errors import DistutilsPlatformError, DistutilsExecError
 from distutils.debug import DEBUG
 from distutils import log
 
+
+if sys.platform == 'darwin':
+    _cfg_target = None
+    _cfg_target_split = None
+
+
 def spawn(cmd, search_path=1, verbose=0, dry_run=0):
     """Run another program, specified as a command list 'cmd', in a new process.
 
@@ -32,71 +39,23 @@
     # cmd is documented as a list, but just in case some code passes a tuple
     # in, protect our %-formatting code against horrible death
     cmd = list(cmd)
-    if os.name == 'posix':
-        _spawn_posix(cmd, search_path, dry_run=dry_run)
-    elif os.name == 'nt':
-        _spawn_nt(cmd, search_path, dry_run=dry_run)
-    else:
-        raise DistutilsPlatformError(
-              "don't know how to spawn programs on platform '%s'" % os.name)
 
-def _nt_quote_args(args):
-    """Quote command-line arguments for DOS/Windows conventions.
-
-    Just wraps every argument which contains blanks in double quotes, and
-    returns a new argument list.
-    """
-    # XXX this doesn't seem very robust to me -- but if the Windows guys
-    # say it'll work, I guess I'll have to accept it.  (What if an arg
-    # contains quotes?  What other magic characters, other than spaces,
-    # have to be escaped?  Is there an escaping mechanism other than
-    # quoting?)
-    for i, arg in enumerate(args):
-        if ' ' in arg:
-            args[i] = '"%s"' % arg
-    return args
-
-def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0):
-    executable = cmd[0]
-    cmd = _nt_quote_args(cmd)
-    if search_path:
-        # either we find one or it stays the same
-        executable = find_executable(executable) or executable
-    log.info(' '.join([executable] + cmd[1:]))
-    if not dry_run:
-        # spawn for NT requires a full path to the .exe
-        try:
-            rc = os.spawnv(os.P_WAIT, executable, cmd)
-        except OSError as exc:
-            # this seems to happen when the command isn't found
-            if not DEBUG:
-                cmd = executable
-            raise DistutilsExecError(
-                  "command %r failed: %s" % (cmd, exc.args[-1]))
-        if rc != 0:
-            # and this reflects the command running but failing
-            if not DEBUG:
-                cmd = executable
-            raise DistutilsExecError(
-                  "command %r failed with exit status %d" % (cmd, rc))
-
-if sys.platform == 'darwin':
-    _cfg_target = None
-    _cfg_target_split = None
-
-def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0):
     log.info(' '.join(cmd))
     if dry_run:
         return
-    executable = cmd[0]
-    exec_fn = search_path and os.execvp or os.execv
+
+    if search_path:
+        executable = find_executable(cmd[0])
+        if executable is not None:
+            cmd[0] = executable
+
     env = None
     if sys.platform == 'darwin':
         global _cfg_target, _cfg_target_split
         if _cfg_target is None:
             from distutils import sysconfig
-            _cfg_target = sysconfig.get_config_var(
-                                  'MACOSX_DEPLOYMENT_TARGET') or ''
+            _cfg_target = str(sysconfig.get_config_var(
+                                  'MACOSX_DEPLOYMENT_TARGET') or '')
             if _cfg_target:
                 _cfg_target_split = [int(x) for x in _cfg_target.split('.')]
         if _cfg_target:
@@ -111,60 +70,23 @@
                 raise DistutilsPlatformError(my_msg)
             env = dict(os.environ,
                        MACOSX_DEPLOYMENT_TARGET=cur_target)
-            exec_fn = search_path and os.execvpe or os.execve
-    pid = os.fork()
-    if pid == 0: # in the child
-        try:
-            if env is None:
-                exec_fn(executable, cmd)
-            else:
-                exec_fn(executable, cmd, env)
-        except OSError as e:
-            if not DEBUG:
-                cmd = executable
-            sys.stderr.write("unable to execute %r: %s\n"
-                             % (cmd, e.strerror))
-            os._exit(1)
 
+    try:
+        proc = subprocess.Popen(cmd, env=env)
+        proc.wait()
+        exitcode = proc.returncode
+    except OSError as exc:
         if not DEBUG:
-            cmd = executable
-        sys.stderr.write("unable to execute %r for unknown reasons" % cmd)
-        os._exit(1)
-    else: # in the parent
-        # Loop until the child either exits or is terminated by a signal
-        # (ie. keep waiting if it's merely stopped)
-        while True:
-            try:
-                pid, status = os.waitpid(pid, 0)
-            except OSError as exc:
-                if not DEBUG:
-                    cmd = executable
-                raise DistutilsExecError(
-                      "command %r failed: %s" % (cmd, exc.args[-1]))
-            if os.WIFSIGNALED(status):
-                if not DEBUG:
-                    cmd = executable
-                raise DistutilsExecError(
-                      "command %r terminated by signal %d"
-                      % (cmd, os.WTERMSIG(status)))
-            elif os.WIFEXITED(status):
-                exit_status = os.WEXITSTATUS(status)
-                if exit_status == 0:
-                    return   # hey, it succeeded!
-                else:
-                    if not DEBUG:
-                        cmd = executable
-                    raise DistutilsExecError(
-                          "command %r failed with exit status %d"
-                          % (cmd, exit_status))
-            elif os.WIFSTOPPED(status):
-                continue
-            else:
-                if not DEBUG:
-                    cmd = executable
-                raise DistutilsExecError(
-                      "unknown error executing %r: termination status %d"
-                      % (cmd, status))
+            cmd = cmd[0]
+        raise DistutilsExecError(
+            "command %r failed: %s" % (cmd, exc.args[-1])) from exc
+
+    if exitcode:
+        if not DEBUG:
+            cmd = cmd[0]
+        raise DistutilsExecError(
+              "command %r failed with exit code %s" % (cmd, exitcode))
+
 
 def find_executable(executable, path=None):
     """Tries to find 'executable' in the directories listed in 'path'.
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index b51629e..37feae5 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -15,7 +15,6 @@
 import sys
 
 from .errors import DistutilsPlatformError
-from .util import get_platform, get_host_platform
 
 # These are needed in a couple of spots, so just compute them once.
 PREFIX = os.path.normpath(sys.prefix)
@@ -146,8 +145,15 @@
             prefix = plat_specific and EXEC_PREFIX or PREFIX
 
     if os.name == "posix":
-        libpython = os.path.join(prefix,
-                                 "lib", "python" + get_python_version())
+        if plat_specific or standard_lib:
+            # Platform-specific modules (any module from a non-pure-Python
+            # module distribution) or standard Python library modules.
+            libdir = sys.platlibdir
+        else:
+            # Pure Python
+            libdir = "lib"
+        libpython = os.path.join(prefix, libdir,
+                                 "python" + get_python_version())
         if standard_lib:
             return libpython
         else:
diff --git a/Lib/distutils/tests/support.py b/Lib/distutils/tests/support.py
index 0413098..259af88 100644
--- a/Lib/distutils/tests/support.py
+++ b/Lib/distutils/tests/support.py
@@ -39,8 +39,6 @@
         self.logs.append((level, msg, args))
 
     def get_logs(self, *levels):
-        def _format(msg, args):
-            return msg % args
         return [msg % args for level, msg, args
                 in self.logs if level in levels]
 
diff --git a/Lib/distutils/tests/test_bdist_msi.py b/Lib/distutils/tests/test_bdist_msi.py
index 15d8bdf..418e60e 100644
--- a/Lib/distutils/tests/test_bdist_msi.py
+++ b/Lib/distutils/tests/test_bdist_msi.py
@@ -1,7 +1,7 @@
 """Tests for distutils.command.bdist_msi."""
 import sys
 import unittest
-from test.support import run_unittest
+from test.support import run_unittest, check_warnings
 from distutils.tests import support
 
 
@@ -14,7 +14,8 @@
         # minimal test XXX need more tests
         from distutils.command.bdist_msi import bdist_msi
         project_dir, dist = self.create_dist()
-        cmd = bdist_msi(dist)
+        with check_warnings(("", DeprecationWarning)):
+            cmd = bdist_msi(dist)
         cmd.ensure_finalized()
 
 
diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py
index 85d0990..abd8313 100644
--- a/Lib/distutils/tests/test_build_clib.py
+++ b/Lib/distutils/tests/test_build_clib.py
@@ -8,7 +8,6 @@
 from distutils.command.build_clib import build_clib
 from distutils.errors import DistutilsSetupError
 from distutils.tests import support
-from distutils.spawn import find_executable
 
 class BuildCLibTestCase(support.TempdirManager,
                         support.LoggingSilencer,
diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py
index 5e47e07..1b034c9 100644
--- a/Lib/distutils/tests/test_build_ext.py
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -455,7 +455,7 @@
         deptarget = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
         if deptarget:
             # increment the minor version number (i.e. 10.6 -> 10.7)
-            deptarget = [int(x) for x in deptarget.split('.')]
+            deptarget = [int(x) for x in str(deptarget).split('.')]
             deptarget[-1] += 1
             deptarget = '.'.join(str(i) for i in deptarget)
             self._try_compile_deployment_target('<', deptarget)
@@ -488,16 +488,20 @@
 
         # get the deployment target that the interpreter was built with
         target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
-        target = tuple(map(int, target.split('.')[0:2]))
+        target = tuple(map(int, str(target).split('.')[0:2]))
         # format the target value as defined in the Apple
         # Availability Macros.  We can't use the macro names since
         # at least one value we test with will not exist yet.
-        if target[1] < 10:
+        if target[:2] < (10, 10):
             # for 10.1 through 10.9.x -> "10n0"
             target = '%02d%01d0' % target
         else:
             # for 10.10 and beyond -> "10nn00"
-            target = '%02d%02d00' % target
+            if len(target) >= 2:
+                target = '%02d%02d00' % target
+            else:
+                # 11 and later can have no minor version (11 instead of 11.0)
+                target = '%02d0000' % target
         deptarget_ext = Extension(
             'deptarget',
             [deptarget_c],
diff --git a/Lib/distutils/tests/test_config_cmd.py b/Lib/distutils/tests/test_config_cmd.py
index 8bd2c94..9aeab07 100644
--- a/Lib/distutils/tests/test_config_cmd.py
+++ b/Lib/distutils/tests/test_config_cmd.py
@@ -39,7 +39,6 @@
 
     @unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
     def test_search_cpp(self):
-        import shutil
         cmd = missing_compiler_executable(['preprocessor'])
         if cmd is not None:
             self.skipTest('The %r command is not found' % cmd)
diff --git a/Lib/distutils/tests/test_dist.py b/Lib/distutils/tests/test_dist.py
index cc34725..60956da 100644
--- a/Lib/distutils/tests/test_dist.py
+++ b/Lib/distutils/tests/test_dist.py
@@ -8,7 +8,7 @@
 
 from unittest import mock
 
-from distutils.dist import Distribution, fix_help_options, DistributionMetadata
+from distutils.dist import Distribution, fix_help_options
 from distutils.cmd import Command
 
 from test.support import (
diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py
index 287ab19..51c80e0 100644
--- a/Lib/distutils/tests/test_install.py
+++ b/Lib/distutils/tests/test_install.py
@@ -58,7 +58,8 @@
 
         libdir = os.path.join(destination, "lib", "python")
         check_path(cmd.install_lib, libdir)
-        check_path(cmd.install_platlib, libdir)
+        platlibdir = os.path.join(destination, sys.platlibdir, "python")
+        check_path(cmd.install_platlib, platlibdir)
         check_path(cmd.install_purelib, libdir)
         check_path(cmd.install_headers,
                    os.path.join(destination, "include", "python", "foopkg"))
diff --git a/Lib/distutils/tests/test_spawn.py b/Lib/distutils/tests/test_spawn.py
index f9ae69e..ad50381 100644
--- a/Lib/distutils/tests/test_spawn.py
+++ b/Lib/distutils/tests/test_spawn.py
@@ -2,13 +2,11 @@
 import os
 import stat
 import sys
-import unittest
-from unittest import mock
+import unittest.mock
 from test.support import run_unittest, unix_shell
 from test import support as test_support
 
 from distutils.spawn import find_executable
-from distutils.spawn import _nt_quote_args
 from distutils.spawn import spawn
 from distutils.errors import DistutilsExecError
 from distutils.tests import support
@@ -17,16 +15,6 @@
                     support.LoggingSilencer,
                     unittest.TestCase):
 
-    def test_nt_quote_args(self):
-
-        for (args, wanted) in ((['with space', 'nospace'],
-                                ['"with space"', 'nospace']),
-                               (['nochange', 'nospace'],
-                                ['nochange', 'nospace'])):
-            res = _nt_quote_args(args)
-            self.assertEqual(res, wanted)
-
-
     @unittest.skipUnless(os.name in ('nt', 'posix'),
                          'Runs only under posix or nt')
     def test_spawn(self):
@@ -136,6 +124,11 @@
                     rv = find_executable(program)
                     self.assertEqual(rv, filename)
 
+    def test_spawn_missing_exe(self):
+        with self.assertRaises(DistutilsExecError) as ctx:
+            spawn(['does-not-exist'])
+        self.assertIn("command 'does-not-exist' failed", str(ctx.exception))
+
 
 def test_suite():
     return unittest.makeSuite(SpawnTestCase)
diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py
index c17d8e7..bca5516 100644
--- a/Lib/distutils/tests/test_upload.py
+++ b/Lib/distutils/tests/test_upload.py
@@ -130,14 +130,30 @@
 
         # what did we send ?
         headers = dict(self.last_open.req.headers)
-        self.assertEqual(headers['Content-length'], '2162')
+        self.assertGreaterEqual(int(headers['Content-length']), 2162)
         content_type = headers['Content-type']
         self.assertTrue(content_type.startswith('multipart/form-data'))
         self.assertEqual(self.last_open.req.get_method(), 'POST')
         expected_url = 'https://upload.pypi.org/legacy/'
         self.assertEqual(self.last_open.req.get_full_url(), expected_url)
-        self.assertTrue(b'xxx' in self.last_open.req.data)
-        self.assertIn(b'protocol_version', self.last_open.req.data)
+        data = self.last_open.req.data
+        self.assertIn(b'xxx',data)
+        self.assertIn(b'protocol_version', data)
+        self.assertIn(b'sha256_digest', data)
+        self.assertIn(
+            b'cd2eb0837c9b4c962c22d2ff8b5441b7b45805887f051d39bf133b583baf'
+            b'6860',
+            data
+        )
+        if b'md5_digest' in data:
+            self.assertIn(b'f561aaf6ef0bf14d4208bb46a4ccb3ad', data)
+        if b'blake2_256_digest' in data:
+            self.assertIn(
+                b'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be'
+                b'6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadcc'
+                b'ce443f1534330a',
+                data
+            )
 
         # The PyPI response body was echoed
         results = self.get_logs(INFO)
@@ -166,7 +182,7 @@
         cmd.run()
 
         headers = dict(self.last_open.req.headers)
-        self.assertEqual(headers['Content-length'], '2172')
+        self.assertGreaterEqual(int(headers['Content-length']), 2172)
         self.assertIn(b'long description\r', self.last_open.req.data)
 
     def test_upload_fails(self):
diff --git a/Lib/distutils/tests/test_version.py b/Lib/distutils/tests/test_version.py
index 15f14c7..8671cd2 100644
--- a/Lib/distutils/tests/test_version.py
+++ b/Lib/distutils/tests/test_version.py
@@ -45,6 +45,14 @@
             self.assertEqual(res, wanted,
                              'cmp(%s, %s) should be %s, got %s' %
                              (v1, v2, wanted, res))
+            res = StrictVersion(v1)._cmp(v2)
+            self.assertEqual(res, wanted,
+                             'cmp(%s, %s) should be %s, got %s' %
+                             (v1, v2, wanted, res))
+            res = StrictVersion(v1)._cmp(object())
+            self.assertIs(res, NotImplemented,
+                          'cmp(%s, %s) should be NotImplemented, got %s' %
+                          (v1, v2, res))
 
 
     def test_cmp(self):
@@ -63,6 +71,14 @@
             self.assertEqual(res, wanted,
                              'cmp(%s, %s) should be %s, got %s' %
                              (v1, v2, wanted, res))
+            res = LooseVersion(v1)._cmp(v2)
+            self.assertEqual(res, wanted,
+                             'cmp(%s, %s) should be %s, got %s' %
+                             (v1, v2, wanted, res))
+            res = LooseVersion(v1)._cmp(object())
+            self.assertIs(res, NotImplemented,
+                          'cmp(%s, %s) should be NotImplemented, got %s' %
+                          (v1, v2, res))
 
 def test_suite():
     return unittest.makeSuite(VersionTestCase)
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py
index 4d7a6de..f0792de 100644
--- a/Lib/distutils/unixccompiler.py
+++ b/Lib/distutils/unixccompiler.py
@@ -290,7 +290,7 @@
             cflags = sysconfig.get_config_var('CFLAGS')
             m = re.search(r'-isysroot\s*(\S+)', cflags)
             if m is None:
-                sysroot = '/'
+                sysroot = _osx_support._default_sysroot(sysconfig.get_config_var('CC'))
             else:
                 sysroot = m.group(1)
 
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index 17a94bc..4b002ec 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -79,7 +79,8 @@
             machine += ".%s" % bitness[sys.maxsize]
         # fall through to standard osname-release-machine representation
     elif osname[:3] == "aix":
-        return "%s-%s.%s" % (osname, version, release)
+        from _aix_support import aix_platform
+        return aix_platform()
     elif osname[:6] == "cygwin":
         osname = "cygwin"
         rel_re = re.compile (r'[\d.]+', re.ASCII)
diff --git a/Lib/distutils/version.py b/Lib/distutils/version.py
index af14cc1..c33beba 100644
--- a/Lib/distutils/version.py
+++ b/Lib/distutils/version.py
@@ -166,6 +166,8 @@
     def _cmp (self, other):
         if isinstance(other, str):
             other = StrictVersion(other)
+        elif not isinstance(other, StrictVersion):
+            return NotImplemented
 
         if self.version != other.version:
             # numeric versions don't match
@@ -331,6 +333,8 @@
     def _cmp (self, other):
         if isinstance(other, str):
             other = LooseVersion(other)
+        elif not isinstance(other, LooseVersion):
+            return NotImplemented
 
         if self.version == other.version:
             return 0
diff --git a/Lib/doctest.py b/Lib/doctest.py
index ee71984..baa503c 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1334,7 +1334,7 @@
             try:
                 # Don't blink!  This is where the user's code gets run.
                 exec(compile(example.source, filename, "single",
-                             compileflags, 1), test.globs)
+                             compileflags, True), test.globs)
                 self.debugger.set_continue() # ==== Example Finished ====
                 exception = None
             except KeyboardInterrupt:
diff --git a/Lib/dummy_threading.py b/Lib/dummy_threading.py
deleted file mode 100644
index 1bb7eee..0000000
--- a/Lib/dummy_threading.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""Faux ``threading`` version using ``dummy_thread`` instead of ``thread``.
-
-The module ``_dummy_threading`` is added to ``sys.modules`` in order
-to not have ``threading`` considered imported.  Had ``threading`` been
-directly imported it would have made all subsequent imports succeed
-regardless of whether ``_thread`` was available which is not desired.
-
-"""
-from sys import modules as sys_modules
-
-import _dummy_thread
-
-# Declaring now so as to not have to nest ``try``s to get proper clean-up.
-holding_thread = False
-holding_threading = False
-holding__threading_local = False
-
-try:
-    # Could have checked if ``_thread`` was not in sys.modules and gone
-    # a different route, but decided to mirror technique used with
-    # ``threading`` below.
-    if '_thread' in sys_modules:
-        held_thread = sys_modules['_thread']
-        holding_thread = True
-    # Must have some module named ``_thread`` that implements its API
-    # in order to initially import ``threading``.
-    sys_modules['_thread'] = sys_modules['_dummy_thread']
-
-    if 'threading' in sys_modules:
-        # If ``threading`` is already imported, might as well prevent
-        # trying to import it more than needed by saving it if it is
-        # already imported before deleting it.
-        held_threading = sys_modules['threading']
-        holding_threading = True
-        del sys_modules['threading']
-
-    if '_threading_local' in sys_modules:
-        # If ``_threading_local`` is already imported, might as well prevent
-        # trying to import it more than needed by saving it if it is
-        # already imported before deleting it.
-        held__threading_local = sys_modules['_threading_local']
-        holding__threading_local = True
-        del sys_modules['_threading_local']
-
-    import threading
-    # Need a copy of the code kept somewhere...
-    sys_modules['_dummy_threading'] = sys_modules['threading']
-    del sys_modules['threading']
-    sys_modules['_dummy__threading_local'] = sys_modules['_threading_local']
-    del sys_modules['_threading_local']
-    from _dummy_threading import *
-    from _dummy_threading import __all__
-
-finally:
-    # Put back ``threading`` if we overwrote earlier
-
-    if holding_threading:
-        sys_modules['threading'] = held_threading
-        del held_threading
-    del holding_threading
-
-    # Put back ``_threading_local`` if we overwrote earlier
-
-    if holding__threading_local:
-        sys_modules['_threading_local'] = held__threading_local
-        del held__threading_local
-    del holding__threading_local
-
-    # Put back ``thread`` if we overwrote, else del the entry we made
-    if holding_thread:
-        sys_modules['_thread'] = held_thread
-        del held_thread
-    else:
-        del sys_modules['_thread']
-    del holding_thread
-
-    del _dummy_thread
-    del sys_modules
diff --git a/Lib/email/generator.py b/Lib/email/generator.py
index ae670c2..c9b1216 100644
--- a/Lib/email/generator.py
+++ b/Lib/email/generator.py
@@ -186,7 +186,11 @@
         # If we munged the cte, copy the message again and re-fix the CTE.
         if munge_cte:
             msg = deepcopy(msg)
-            msg.replace_header('content-transfer-encoding', munge_cte[0])
+            # Preserve the header order if the CTE header already exists.
+            if msg.get('content-transfer-encoding') is None:
+                msg['Content-Transfer-Encoding'] = munge_cte[0]
+            else:
+                msg.replace_header('content-transfer-encoding', munge_cte[0])
             msg.replace_header('content-type', munge_cte[1])
         # Write the headers.  First we see if the message object wants to
         # handle that itself.  If not, we'll do it generically.
diff --git a/Lib/email/headerregistry.py b/Lib/email/headerregistry.py
index d0914fd..5d84fc0 100644
--- a/Lib/email/headerregistry.py
+++ b/Lib/email/headerregistry.py
@@ -74,11 +74,9 @@
         """The addr_spec (username@domain) portion of the address, quoted
         according to RFC 5322 rules, but with no Content Transfer Encoding.
         """
-        nameset = set(self.username)
-        if len(nameset) > len(nameset-parser.DOT_ATOM_ENDS):
-            lp = parser.quote_string(self.username)
-        else:
-            lp = self.username
+        lp = self.username
+        if not parser.DOT_ATOM_ENDS.isdisjoint(lp):
+            lp = parser.quote_string(lp)
         if self.domain:
             return lp + '@' + self.domain
         if not lp:
@@ -91,19 +89,17 @@
                         self.display_name, self.username, self.domain)
 
     def __str__(self):
-        nameset = set(self.display_name)
-        if len(nameset) > len(nameset-parser.SPECIALS):
-            disp = parser.quote_string(self.display_name)
-        else:
-            disp = self.display_name
+        disp = self.display_name
+        if not parser.SPECIALS.isdisjoint(disp):
+            disp = parser.quote_string(disp)
         if disp:
             addr_spec = '' if self.addr_spec=='<>' else self.addr_spec
             return "{} <{}>".format(disp, addr_spec)
         return self.addr_spec
 
     def __eq__(self, other):
-        if type(other) != type(self):
-            return False
+        if not isinstance(other, Address):
+            return NotImplemented
         return (self.display_name == other.display_name and
                 self.username == other.username and
                 self.domain == other.domain)
@@ -146,17 +142,15 @@
         if self.display_name is None and len(self.addresses)==1:
             return str(self.addresses[0])
         disp = self.display_name
-        if disp is not None:
-            nameset = set(disp)
-            if len(nameset) > len(nameset-parser.SPECIALS):
-                disp = parser.quote_string(disp)
+        if disp is not None and not parser.SPECIALS.isdisjoint(disp):
+            disp = parser.quote_string(disp)
         adrstr = ", ".join(str(x) for x in self.addresses)
         adrstr = ' ' + adrstr if adrstr else adrstr
         return "{}:{};".format(disp, adrstr)
 
     def __eq__(self, other):
-        if type(other) != type(self):
-            return False
+        if not isinstance(other, Group):
+            return NotImplemented
         return (self.display_name == other.display_name and
                 self.addresses == other.addresses)
 
diff --git a/Lib/email/message.py b/Lib/email/message.py
index 1262602..3701b30 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -141,7 +141,7 @@
         header.  For backward compatibility reasons, if maxheaderlen is
         not specified it defaults to 0, so you must override it explicitly
         if you want a different maxheaderlen.  'policy' is passed to the
-        Generator instance used to serialize the mesasge; if it is not
+        Generator instance used to serialize the message; if it is not
         specified the policy associated with the message instance is used.
 
         If the message object contains binary data that is not encoded
@@ -958,7 +958,7 @@
         header.  maxheaderlen is retained for backward compatibility with the
         base Message class, but defaults to None, meaning that the policy value
         for max_line_length controls the header maximum length.  'policy' is
-        passed to the Generator instance used to serialize the mesasge; if it
+        passed to the Generator instance used to serialize the message; if it
         is not specified the policy associated with the message instance is
         used.
         """
diff --git a/Lib/email/utils.py b/Lib/email/utils.py
index 07dd029..1a7719d 100644
--- a/Lib/email/utils.py
+++ b/Lib/email/utils.py
@@ -259,21 +259,13 @@
 
     params is a sequence of 2-tuples containing (param name, string value).
     """
-    # Copy params so we don't mess with the original
-    params = params[:]
-    new_params = []
+    new_params = [params[0]]
     # Map parameter's name to a list of continuations.  The values are a
     # 3-tuple of the continuation number, the string value, and a flag
     # specifying whether a particular segment is %-encoded.
     rfc2231_params = {}
-    name, value = params.pop(0)
-    new_params.append((name, value))
-    while params:
-        name, value = params.pop(0)
-        if name.endswith('*'):
-            encoded = True
-        else:
-            encoded = False
+    for name, value in params[1:]:
+        encoded = name.endswith('*')
         value = unquote(value)
         mo = rfc2231_continuation.match(name)
         if mo:
diff --git a/Lib/encodings/aliases.py b/Lib/encodings/aliases.py
index 2444f9f..d85afd6 100644
--- a/Lib/encodings/aliases.py
+++ b/Lib/encodings/aliases.py
@@ -450,6 +450,7 @@
 
     # mac_latin2 codec
     'maccentraleurope'   : 'mac_latin2',
+    'mac_centeuro'       : 'mac_latin2',
     'maclatin2'          : 'mac_latin2',
 
     # mac_roman codec
@@ -493,9 +494,6 @@
     'sjisx0213'          : 'shift_jisx0213',
     's_jisx0213'         : 'shift_jisx0213',
 
-    # tactis codec
-    'tis260'             : 'tactis',
-
     # tis_620 codec
     'tis620'             : 'tis_620',
     'tis_620_0'          : 'tis_620',
diff --git a/Lib/encodings/mac_centeuro.py b/Lib/encodings/mac_centeuro.py
deleted file mode 100644
index 5785a0e..0000000
--- a/Lib/encodings/mac_centeuro.py
+++ /dev/null
@@ -1,307 +0,0 @@
-""" Python Character Mapping Codec mac_centeuro generated from 'MAPPINGS/VENDORS/APPLE/CENTEURO.TXT' with gencodec.py.
-
-"""#"
-
-import codecs
-
-### Codec APIs
-
-class Codec(codecs.Codec):
-
-    def encode(self,input,errors='strict'):
-        return codecs.charmap_encode(input,errors,encoding_table)
-
-    def decode(self,input,errors='strict'):
-        return codecs.charmap_decode(input,errors,decoding_table)
-
-class IncrementalEncoder(codecs.IncrementalEncoder):
-    def encode(self, input, final=False):
-        return codecs.charmap_encode(input,self.errors,encoding_table)[0]
-
-class IncrementalDecoder(codecs.IncrementalDecoder):
-    def decode(self, input, final=False):
-        return codecs.charmap_decode(input,self.errors,decoding_table)[0]
-
-class StreamWriter(Codec,codecs.StreamWriter):
-    pass
-
-class StreamReader(Codec,codecs.StreamReader):
-    pass
-
-### encodings module API
-
-def getregentry():
-    return codecs.CodecInfo(
-        name='mac-centeuro',
-        encode=Codec().encode,
-        decode=Codec().decode,
-        incrementalencoder=IncrementalEncoder,
-        incrementaldecoder=IncrementalDecoder,
-        streamreader=StreamReader,
-        streamwriter=StreamWriter,
-    )
-
-
-### Decoding Table
-
-decoding_table = (
-    '\x00'     #  0x00 -> CONTROL CHARACTER
-    '\x01'     #  0x01 -> CONTROL CHARACTER
-    '\x02'     #  0x02 -> CONTROL CHARACTER
-    '\x03'     #  0x03 -> CONTROL CHARACTER
-    '\x04'     #  0x04 -> CONTROL CHARACTER
-    '\x05'     #  0x05 -> CONTROL CHARACTER
-    '\x06'     #  0x06 -> CONTROL CHARACTER
-    '\x07'     #  0x07 -> CONTROL CHARACTER
-    '\x08'     #  0x08 -> CONTROL CHARACTER
-    '\t'       #  0x09 -> CONTROL CHARACTER
-    '\n'       #  0x0A -> CONTROL CHARACTER
-    '\x0b'     #  0x0B -> CONTROL CHARACTER
-    '\x0c'     #  0x0C -> CONTROL CHARACTER
-    '\r'       #  0x0D -> CONTROL CHARACTER
-    '\x0e'     #  0x0E -> CONTROL CHARACTER
-    '\x0f'     #  0x0F -> CONTROL CHARACTER
-    '\x10'     #  0x10 -> CONTROL CHARACTER
-    '\x11'     #  0x11 -> CONTROL CHARACTER
-    '\x12'     #  0x12 -> CONTROL CHARACTER
-    '\x13'     #  0x13 -> CONTROL CHARACTER
-    '\x14'     #  0x14 -> CONTROL CHARACTER
-    '\x15'     #  0x15 -> CONTROL CHARACTER
-    '\x16'     #  0x16 -> CONTROL CHARACTER
-    '\x17'     #  0x17 -> CONTROL CHARACTER
-    '\x18'     #  0x18 -> CONTROL CHARACTER
-    '\x19'     #  0x19 -> CONTROL CHARACTER
-    '\x1a'     #  0x1A -> CONTROL CHARACTER
-    '\x1b'     #  0x1B -> CONTROL CHARACTER
-    '\x1c'     #  0x1C -> CONTROL CHARACTER
-    '\x1d'     #  0x1D -> CONTROL CHARACTER
-    '\x1e'     #  0x1E -> CONTROL CHARACTER
-    '\x1f'     #  0x1F -> CONTROL CHARACTER
-    ' '        #  0x20 -> SPACE
-    '!'        #  0x21 -> EXCLAMATION MARK
-    '"'        #  0x22 -> QUOTATION MARK
-    '#'        #  0x23 -> NUMBER SIGN
-    '$'        #  0x24 -> DOLLAR SIGN
-    '%'        #  0x25 -> PERCENT SIGN
-    '&'        #  0x26 -> AMPERSAND
-    "'"        #  0x27 -> APOSTROPHE
-    '('        #  0x28 -> LEFT PARENTHESIS
-    ')'        #  0x29 -> RIGHT PARENTHESIS
-    '*'        #  0x2A -> ASTERISK
-    '+'        #  0x2B -> PLUS SIGN
-    ','        #  0x2C -> COMMA
-    '-'        #  0x2D -> HYPHEN-MINUS
-    '.'        #  0x2E -> FULL STOP
-    '/'        #  0x2F -> SOLIDUS
-    '0'        #  0x30 -> DIGIT ZERO
-    '1'        #  0x31 -> DIGIT ONE
-    '2'        #  0x32 -> DIGIT TWO
-    '3'        #  0x33 -> DIGIT THREE
-    '4'        #  0x34 -> DIGIT FOUR
-    '5'        #  0x35 -> DIGIT FIVE
-    '6'        #  0x36 -> DIGIT SIX
-    '7'        #  0x37 -> DIGIT SEVEN
-    '8'        #  0x38 -> DIGIT EIGHT
-    '9'        #  0x39 -> DIGIT NINE
-    ':'        #  0x3A -> COLON
-    ';'        #  0x3B -> SEMICOLON
-    '<'        #  0x3C -> LESS-THAN SIGN
-    '='        #  0x3D -> EQUALS SIGN
-    '>'        #  0x3E -> GREATER-THAN SIGN
-    '?'        #  0x3F -> QUESTION MARK
-    '@'        #  0x40 -> COMMERCIAL AT
-    'A'        #  0x41 -> LATIN CAPITAL LETTER A
-    'B'        #  0x42 -> LATIN CAPITAL LETTER B
-    'C'        #  0x43 -> LATIN CAPITAL LETTER C
-    'D'        #  0x44 -> LATIN CAPITAL LETTER D
-    'E'        #  0x45 -> LATIN CAPITAL LETTER E
-    'F'        #  0x46 -> LATIN CAPITAL LETTER F
-    'G'        #  0x47 -> LATIN CAPITAL LETTER G
-    'H'        #  0x48 -> LATIN CAPITAL LETTER H
-    'I'        #  0x49 -> LATIN CAPITAL LETTER I
-    'J'        #  0x4A -> LATIN CAPITAL LETTER J
-    'K'        #  0x4B -> LATIN CAPITAL LETTER K
-    'L'        #  0x4C -> LATIN CAPITAL LETTER L
-    'M'        #  0x4D -> LATIN CAPITAL LETTER M
-    'N'        #  0x4E -> LATIN CAPITAL LETTER N
-    'O'        #  0x4F -> LATIN CAPITAL LETTER O
-    'P'        #  0x50 -> LATIN CAPITAL LETTER P
-    'Q'        #  0x51 -> LATIN CAPITAL LETTER Q
-    'R'        #  0x52 -> LATIN CAPITAL LETTER R
-    'S'        #  0x53 -> LATIN CAPITAL LETTER S
-    'T'        #  0x54 -> LATIN CAPITAL LETTER T
-    'U'        #  0x55 -> LATIN CAPITAL LETTER U
-    'V'        #  0x56 -> LATIN CAPITAL LETTER V
-    'W'        #  0x57 -> LATIN CAPITAL LETTER W
-    'X'        #  0x58 -> LATIN CAPITAL LETTER X
-    'Y'        #  0x59 -> LATIN CAPITAL LETTER Y
-    'Z'        #  0x5A -> LATIN CAPITAL LETTER Z
-    '['        #  0x5B -> LEFT SQUARE BRACKET
-    '\\'       #  0x5C -> REVERSE SOLIDUS
-    ']'        #  0x5D -> RIGHT SQUARE BRACKET
-    '^'        #  0x5E -> CIRCUMFLEX ACCENT
-    '_'        #  0x5F -> LOW LINE
-    '`'        #  0x60 -> GRAVE ACCENT
-    'a'        #  0x61 -> LATIN SMALL LETTER A
-    'b'        #  0x62 -> LATIN SMALL LETTER B
-    'c'        #  0x63 -> LATIN SMALL LETTER C
-    'd'        #  0x64 -> LATIN SMALL LETTER D
-    'e'        #  0x65 -> LATIN SMALL LETTER E
-    'f'        #  0x66 -> LATIN SMALL LETTER F
-    'g'        #  0x67 -> LATIN SMALL LETTER G
-    'h'        #  0x68 -> LATIN SMALL LETTER H
-    'i'        #  0x69 -> LATIN SMALL LETTER I
-    'j'        #  0x6A -> LATIN SMALL LETTER J
-    'k'        #  0x6B -> LATIN SMALL LETTER K
-    'l'        #  0x6C -> LATIN SMALL LETTER L
-    'm'        #  0x6D -> LATIN SMALL LETTER M
-    'n'        #  0x6E -> LATIN SMALL LETTER N
-    'o'        #  0x6F -> LATIN SMALL LETTER O
-    'p'        #  0x70 -> LATIN SMALL LETTER P
-    'q'        #  0x71 -> LATIN SMALL LETTER Q
-    'r'        #  0x72 -> LATIN SMALL LETTER R
-    's'        #  0x73 -> LATIN SMALL LETTER S
-    't'        #  0x74 -> LATIN SMALL LETTER T
-    'u'        #  0x75 -> LATIN SMALL LETTER U
-    'v'        #  0x76 -> LATIN SMALL LETTER V
-    'w'        #  0x77 -> LATIN SMALL LETTER W
-    'x'        #  0x78 -> LATIN SMALL LETTER X
-    'y'        #  0x79 -> LATIN SMALL LETTER Y
-    'z'        #  0x7A -> LATIN SMALL LETTER Z
-    '{'        #  0x7B -> LEFT CURLY BRACKET
-    '|'        #  0x7C -> VERTICAL LINE
-    '}'        #  0x7D -> RIGHT CURLY BRACKET
-    '~'        #  0x7E -> TILDE
-    '\x7f'     #  0x7F -> CONTROL CHARACTER
-    '\xc4'     #  0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS
-    '\u0100'   #  0x81 -> LATIN CAPITAL LETTER A WITH MACRON
-    '\u0101'   #  0x82 -> LATIN SMALL LETTER A WITH MACRON
-    '\xc9'     #  0x83 -> LATIN CAPITAL LETTER E WITH ACUTE
-    '\u0104'   #  0x84 -> LATIN CAPITAL LETTER A WITH OGONEK
-    '\xd6'     #  0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS
-    '\xdc'     #  0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS
-    '\xe1'     #  0x87 -> LATIN SMALL LETTER A WITH ACUTE
-    '\u0105'   #  0x88 -> LATIN SMALL LETTER A WITH OGONEK
-    '\u010c'   #  0x89 -> LATIN CAPITAL LETTER C WITH CARON
-    '\xe4'     #  0x8A -> LATIN SMALL LETTER A WITH DIAERESIS
-    '\u010d'   #  0x8B -> LATIN SMALL LETTER C WITH CARON
-    '\u0106'   #  0x8C -> LATIN CAPITAL LETTER C WITH ACUTE
-    '\u0107'   #  0x8D -> LATIN SMALL LETTER C WITH ACUTE
-    '\xe9'     #  0x8E -> LATIN SMALL LETTER E WITH ACUTE
-    '\u0179'   #  0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE
-    '\u017a'   #  0x90 -> LATIN SMALL LETTER Z WITH ACUTE
-    '\u010e'   #  0x91 -> LATIN CAPITAL LETTER D WITH CARON
-    '\xed'     #  0x92 -> LATIN SMALL LETTER I WITH ACUTE
-    '\u010f'   #  0x93 -> LATIN SMALL LETTER D WITH CARON
-    '\u0112'   #  0x94 -> LATIN CAPITAL LETTER E WITH MACRON
-    '\u0113'   #  0x95 -> LATIN SMALL LETTER E WITH MACRON
-    '\u0116'   #  0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE
-    '\xf3'     #  0x97 -> LATIN SMALL LETTER O WITH ACUTE
-    '\u0117'   #  0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE
-    '\xf4'     #  0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
-    '\xf6'     #  0x9A -> LATIN SMALL LETTER O WITH DIAERESIS
-    '\xf5'     #  0x9B -> LATIN SMALL LETTER O WITH TILDE
-    '\xfa'     #  0x9C -> LATIN SMALL LETTER U WITH ACUTE
-    '\u011a'   #  0x9D -> LATIN CAPITAL LETTER E WITH CARON
-    '\u011b'   #  0x9E -> LATIN SMALL LETTER E WITH CARON
-    '\xfc'     #  0x9F -> LATIN SMALL LETTER U WITH DIAERESIS
-    '\u2020'   #  0xA0 -> DAGGER
-    '\xb0'     #  0xA1 -> DEGREE SIGN
-    '\u0118'   #  0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK
-    '\xa3'     #  0xA3 -> POUND SIGN
-    '\xa7'     #  0xA4 -> SECTION SIGN
-    '\u2022'   #  0xA5 -> BULLET
-    '\xb6'     #  0xA6 -> PILCROW SIGN
-    '\xdf'     #  0xA7 -> LATIN SMALL LETTER SHARP S
-    '\xae'     #  0xA8 -> REGISTERED SIGN
-    '\xa9'     #  0xA9 -> COPYRIGHT SIGN
-    '\u2122'   #  0xAA -> TRADE MARK SIGN
-    '\u0119'   #  0xAB -> LATIN SMALL LETTER E WITH OGONEK
-    '\xa8'     #  0xAC -> DIAERESIS
-    '\u2260'   #  0xAD -> NOT EQUAL TO
-    '\u0123'   #  0xAE -> LATIN SMALL LETTER G WITH CEDILLA
-    '\u012e'   #  0xAF -> LATIN CAPITAL LETTER I WITH OGONEK
-    '\u012f'   #  0xB0 -> LATIN SMALL LETTER I WITH OGONEK
-    '\u012a'   #  0xB1 -> LATIN CAPITAL LETTER I WITH MACRON
-    '\u2264'   #  0xB2 -> LESS-THAN OR EQUAL TO
-    '\u2265'   #  0xB3 -> GREATER-THAN OR EQUAL TO
-    '\u012b'   #  0xB4 -> LATIN SMALL LETTER I WITH MACRON
-    '\u0136'   #  0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA
-    '\u2202'   #  0xB6 -> PARTIAL DIFFERENTIAL
-    '\u2211'   #  0xB7 -> N-ARY SUMMATION
-    '\u0142'   #  0xB8 -> LATIN SMALL LETTER L WITH STROKE
-    '\u013b'   #  0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA
-    '\u013c'   #  0xBA -> LATIN SMALL LETTER L WITH CEDILLA
-    '\u013d'   #  0xBB -> LATIN CAPITAL LETTER L WITH CARON
-    '\u013e'   #  0xBC -> LATIN SMALL LETTER L WITH CARON
-    '\u0139'   #  0xBD -> LATIN CAPITAL LETTER L WITH ACUTE
-    '\u013a'   #  0xBE -> LATIN SMALL LETTER L WITH ACUTE
-    '\u0145'   #  0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA
-    '\u0146'   #  0xC0 -> LATIN SMALL LETTER N WITH CEDILLA
-    '\u0143'   #  0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE
-    '\xac'     #  0xC2 -> NOT SIGN
-    '\u221a'   #  0xC3 -> SQUARE ROOT
-    '\u0144'   #  0xC4 -> LATIN SMALL LETTER N WITH ACUTE
-    '\u0147'   #  0xC5 -> LATIN CAPITAL LETTER N WITH CARON
-    '\u2206'   #  0xC6 -> INCREMENT
-    '\xab'     #  0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-    '\xbb'     #  0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-    '\u2026'   #  0xC9 -> HORIZONTAL ELLIPSIS
-    '\xa0'     #  0xCA -> NO-BREAK SPACE
-    '\u0148'   #  0xCB -> LATIN SMALL LETTER N WITH CARON
-    '\u0150'   #  0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-    '\xd5'     #  0xCD -> LATIN CAPITAL LETTER O WITH TILDE
-    '\u0151'   #  0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE
-    '\u014c'   #  0xCF -> LATIN CAPITAL LETTER O WITH MACRON
-    '\u2013'   #  0xD0 -> EN DASH
-    '\u2014'   #  0xD1 -> EM DASH
-    '\u201c'   #  0xD2 -> LEFT DOUBLE QUOTATION MARK
-    '\u201d'   #  0xD3 -> RIGHT DOUBLE QUOTATION MARK
-    '\u2018'   #  0xD4 -> LEFT SINGLE QUOTATION MARK
-    '\u2019'   #  0xD5 -> RIGHT SINGLE QUOTATION MARK
-    '\xf7'     #  0xD6 -> DIVISION SIGN
-    '\u25ca'   #  0xD7 -> LOZENGE
-    '\u014d'   #  0xD8 -> LATIN SMALL LETTER O WITH MACRON
-    '\u0154'   #  0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE
-    '\u0155'   #  0xDA -> LATIN SMALL LETTER R WITH ACUTE
-    '\u0158'   #  0xDB -> LATIN CAPITAL LETTER R WITH CARON
-    '\u2039'   #  0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-    '\u203a'   #  0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-    '\u0159'   #  0xDE -> LATIN SMALL LETTER R WITH CARON
-    '\u0156'   #  0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA
-    '\u0157'   #  0xE0 -> LATIN SMALL LETTER R WITH CEDILLA
-    '\u0160'   #  0xE1 -> LATIN CAPITAL LETTER S WITH CARON
-    '\u201a'   #  0xE2 -> SINGLE LOW-9 QUOTATION MARK
-    '\u201e'   #  0xE3 -> DOUBLE LOW-9 QUOTATION MARK
-    '\u0161'   #  0xE4 -> LATIN SMALL LETTER S WITH CARON
-    '\u015a'   #  0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE
-    '\u015b'   #  0xE6 -> LATIN SMALL LETTER S WITH ACUTE
-    '\xc1'     #  0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE
-    '\u0164'   #  0xE8 -> LATIN CAPITAL LETTER T WITH CARON
-    '\u0165'   #  0xE9 -> LATIN SMALL LETTER T WITH CARON
-    '\xcd'     #  0xEA -> LATIN CAPITAL LETTER I WITH ACUTE
-    '\u017d'   #  0xEB -> LATIN CAPITAL LETTER Z WITH CARON
-    '\u017e'   #  0xEC -> LATIN SMALL LETTER Z WITH CARON
-    '\u016a'   #  0xED -> LATIN CAPITAL LETTER U WITH MACRON
-    '\xd3'     #  0xEE -> LATIN CAPITAL LETTER O WITH ACUTE
-    '\xd4'     #  0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-    '\u016b'   #  0xF0 -> LATIN SMALL LETTER U WITH MACRON
-    '\u016e'   #  0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE
-    '\xda'     #  0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE
-    '\u016f'   #  0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE
-    '\u0170'   #  0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-    '\u0171'   #  0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE
-    '\u0172'   #  0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK
-    '\u0173'   #  0xF7 -> LATIN SMALL LETTER U WITH OGONEK
-    '\xdd'     #  0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE
-    '\xfd'     #  0xF9 -> LATIN SMALL LETTER Y WITH ACUTE
-    '\u0137'   #  0xFA -> LATIN SMALL LETTER K WITH CEDILLA
-    '\u017b'   #  0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE
-    '\u0141'   #  0xFC -> LATIN CAPITAL LETTER L WITH STROKE
-    '\u017c'   #  0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE
-    '\u0122'   #  0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA
-    '\u02c7'   #  0xFF -> CARON
-)
-
-### Encoding table
-encoding_table=codecs.charmap_build(decoding_table)
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index f3152a5..97dfa7e 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -1,17 +1,21 @@
 import os
 import os.path
-import pkgutil
 import sys
 import runpy
 import tempfile
+import subprocess
+from importlib import resources
+
+from . import _bundled
+
 
 
 __all__ = ["version", "bootstrap"]
 
 
-_SETUPTOOLS_VERSION = "47.1.0"
+_SETUPTOOLS_VERSION = "49.2.1"
 
-_PIP_VERSION = "20.1.1"
+_PIP_VERSION = "20.2.3"
 
 _PROJECTS = [
     ("setuptools", _SETUPTOOLS_VERSION, "py3"),
@@ -20,22 +24,18 @@
 
 
 def _run_pip(args, additional_paths=None):
-    # Add our bundled software to the sys.path so we can import it
-    if additional_paths is not None:
-        sys.path = additional_paths + sys.path
-
-    # Invoke pip as if it's the main module, and catch the exit.
-    backup_argv = sys.argv[:]
-    sys.argv[1:] = args
-    try:
-        # run_module() alters sys.modules and sys.argv, but restores them at exit
-        runpy.run_module("pip", run_name="__main__", alter_sys=True)
-    except SystemExit as exc:
-        return exc.code
-    finally:
-        sys.argv[:] = backup_argv
-
-    raise SystemError("pip did not exit, this should never happen")
+    # Run the bootstraping in a subprocess to avoid leaking any state that happens
+    # after pip has executed. Particulary, this avoids the case when pip holds onto
+    # the files in *additional_paths*, preventing us to remove them at the end of the
+    # invocation.
+    code = f"""
+import runpy
+import sys
+sys.path = {additional_paths or []} + sys.path
+sys.argv[1:] = {args}
+runpy.run_module("pip", run_name="__main__", alter_sys=True)
+"""
+    return subprocess.run([sys.executable, "-c", code], check=True).returncode
 
 
 def version():
@@ -106,9 +106,9 @@
         additional_paths = []
         for project, version, py_tag in _PROJECTS:
             wheel_name = "{}-{}-{}-none-any.whl".format(project, version, py_tag)
-            whl = pkgutil.get_data(
-                "ensurepip",
-                "_bundled/{}".format(wheel_name),
+            whl = resources.read_binary(
+                _bundled,
+                wheel_name,
             )
             with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
                 fp.write(whl)
diff --git a/Lib/ensurepip/_bundled/__init__.py b/Lib/ensurepip/_bundled/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Lib/ensurepip/_bundled/__init__.py
diff --git a/Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl
deleted file mode 100644
index ea1d0f7..0000000
--- a/Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl
+++ /dev/null
Binary files differ
diff --git a/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl
new file mode 100644
index 0000000..7ebdc0f
--- /dev/null
+++ b/Lib/ensurepip/_bundled/pip-20.2.3-py2.py3-none-any.whl
Binary files differ
diff --git a/Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl
deleted file mode 100644
index f87867f..0000000
--- a/Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl
+++ /dev/null
Binary files differ
diff --git a/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
new file mode 100644
index 0000000..308e2f2
--- /dev/null
+++ b/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
Binary files differ
diff --git a/Lib/enum.py b/Lib/enum.py
index 14cc00e..ebadd9f 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -104,9 +104,9 @@
                 # enum overwriting a descriptor?
                 raise TypeError('%r already defined as: %r' % (key, self[key]))
             if isinstance(value, auto):
-                self._auto_called = True
                 if value.value == _auto_null:
                     value.value = self._generate_next_value(key, 1, len(self._member_names), self._last_values[:])
+                    self._auto_called = True
                 value = value.value
             self._member_names.append(key)
             self._last_values.append(value)
@@ -123,10 +123,12 @@
     """Metaclass for Enum"""
     @classmethod
     def __prepare__(metacls, cls, bases):
+        # check that previous enum members do not exist
+        metacls._check_for_existing_members(cls, bases)
         # create the namespace dict
         enum_dict = _EnumDict()
         # inherit previous flags and _generate_next_value_ function
-        member_type, first_enum = metacls._get_mixins_(bases)
+        member_type, first_enum = metacls._get_mixins_(cls, bases)
         if first_enum is not None:
             enum_dict['_generate_next_value_'] = getattr(first_enum, '_generate_next_value_', None)
         return enum_dict
@@ -142,7 +144,7 @@
         ignore = classdict['_ignore_']
         for key in ignore:
             classdict.pop(key, None)
-        member_type, first_enum = metacls._get_mixins_(bases)
+        member_type, first_enum = metacls._get_mixins_(cls, bases)
         __new__, save_new, use_args = metacls._find_new_(classdict, member_type,
                                                         first_enum)
 
@@ -249,7 +251,11 @@
 
         # double check that repr and friends are not the mixin's or various
         # things break (such as pickle)
+        # however, if the method is defined in the Enum itself, don't replace
+        # it
         for name in ('__repr__', '__str__', '__format__', '__reduce_ex__'):
+            if name in classdict:
+                continue
             class_method = getattr(enum_class, name)
             obj_method = getattr(member_type, name, None)
             enum_method = getattr(first_enum, name, None)
@@ -397,7 +403,7 @@
         """
         metacls = cls.__class__
         bases = (cls, ) if type is None else (type, cls)
-        _, first_enum = cls._get_mixins_(bases)
+        _, first_enum = cls._get_mixins_(cls, bases)
         classdict = metacls.__prepare__(class_name, bases)
 
         # special processing needed for names?
@@ -425,7 +431,7 @@
         if module is None:
             try:
                 module = sys._getframe(2).f_globals['__name__']
-            except (AttributeError, ValueError, KeyError) as exc:
+            except (AttributeError, ValueError, KeyError):
                 pass
         if module is None:
             _make_class_unpicklable(enum_class)
@@ -469,14 +475,15 @@
         module_globals[name] = cls
         return cls
 
-    def _convert(cls, *args, **kwargs):
-        import warnings
-        warnings.warn("_convert is deprecated and will be removed in 3.9, use "
-                      "_convert_ instead.", DeprecationWarning, stacklevel=2)
-        return cls._convert_(*args, **kwargs)
+    @staticmethod
+    def _check_for_existing_members(class_name, bases):
+        for chain in bases:
+            for base in chain.__mro__:
+                if issubclass(base, Enum) and base._member_names_:
+                    raise TypeError("%s: cannot extend enumeration %r" % (class_name, base.__name__))
 
     @staticmethod
-    def _get_mixins_(bases):
+    def _get_mixins_(class_name, bases):
         """Returns the type for creating enum members, and the first inherited
         enum class.
 
@@ -487,14 +494,25 @@
             return object, Enum
 
         def _find_data_type(bases):
+            data_types = []
             for chain in bases:
+                candidate = None
                 for base in chain.__mro__:
                     if base is object:
                         continue
                     elif '__new__' in base.__dict__:
                         if issubclass(base, Enum):
                             continue
-                        return base
+                        data_types.append(candidate or base)
+                        break
+                    elif not issubclass(base, Enum):
+                        candidate = base
+            if len(data_types) > 1:
+                raise TypeError('%r: too many data types: %r' % (class_name, data_types))
+            elif data_types:
+                return data_types[0]
+            else:
+                return None
 
         # ensure final parent class is an Enum derivative, find any concrete
         # data type, and check that Enum has no members
@@ -588,7 +606,7 @@
         if isinstance(result, cls):
             return result
         else:
-            ve_exc = ValueError("%r is not a valid %s" % (value, cls.__name__))
+            ve_exc = ValueError("%r is not a valid %s" % (value, cls.__qualname__))
             if result is None and exc is None:
                 raise ve_exc
             elif exc is None:
@@ -610,7 +628,7 @@
 
     @classmethod
     def _missing_(cls, value):
-        raise ValueError("%r is not a valid %s" % (value, cls.__name__))
+        return None
 
     def __repr__(self):
         return "<%s.%s: %r>" % (
@@ -633,8 +651,9 @@
         # we can get strange results with the Enum name showing up instead of
         # the value
 
-        # pure Enum branch
-        if self._member_type_ is object:
+        # pure Enum branch, or branch with __str__ explicitly overridden
+        str_overridden = type(self).__str__ != Enum.__str__
+        if self._member_type_ is object or str_overridden:
             cls = str
             val = str(self)
         # mix-in branch
@@ -716,7 +735,7 @@
             # verify all bits are accounted for
             _, extra_flags = _decompose(cls, value)
             if extra_flags:
-                raise ValueError("%r is not a valid %s" % (value, cls.__name__))
+                raise ValueError("%r is not a valid %s" % (value, cls.__qualname__))
             # construct a singleton enum pseudo-member
             pseudo_member = object.__new__(cls)
             pseudo_member._name_ = None
@@ -790,7 +809,7 @@
     @classmethod
     def _missing_(cls, value):
         if not isinstance(value, int):
-            raise ValueError("%r is not a valid %s" % (value, cls.__name__))
+            raise ValueError("%r is not a valid %s" % (value, cls.__qualname__))
         new_member = cls._create_pseudo_member_(value)
         return new_member
 
@@ -871,28 +890,20 @@
     # _decompose is only called if the value is not named
     not_covered = value
     negative = value < 0
-    # issue29167: wrap accesses to _value2member_map_ in a list to avoid race
-    #             conditions between iterating over it and having more pseudo-
-    #             members added to it
-    if negative:
-        # only check for named flags
-        flags_to_check = [
-                (m, v)
-                for v, m in list(flag._value2member_map_.items())
-                if m.name is not None
-                ]
-    else:
-        # check for named flags and powers-of-two flags
-        flags_to_check = [
-                (m, v)
-                for v, m in list(flag._value2member_map_.items())
-                if m.name is not None or _power_of_two(v)
-                ]
     members = []
-    for member, member_value in flags_to_check:
+    for member in flag:
+        member_value = member.value
         if member_value and member_value & value == member_value:
             members.append(member)
             not_covered &= ~member_value
+    if not negative:
+        tmp = not_covered
+        while tmp:
+            flag_value = 2 ** _high_bit(tmp)
+            if flag_value in flag._value2member_map_:
+                members.append(flag._value2member_map_[flag_value])
+                not_covered &= ~flag_value
+            tmp &= ~flag_value
     if not members and value in flag._value2member_map_:
         members.append(flag._value2member_map_[value])
     members.sort(key=lambda m: m._value_, reverse=True)
@@ -900,8 +911,3 @@
         # we have the breakdown, don't need the value member itself
         members.pop(0)
     return members, not_covered
-
-def _power_of_two(value):
-    if value < 1:
-        return False
-    return value == 2 ** _high_bit(value)
diff --git a/Lib/filecmp.py b/Lib/filecmp.py
index e5ad839..7a4da6b 100644
--- a/Lib/filecmp.py
+++ b/Lib/filecmp.py
@@ -13,6 +13,7 @@
 import os
 import stat
 from itertools import filterfalse
+from types import GenericAlias
 
 __all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES']
 
@@ -156,12 +157,12 @@
             ok = 1
             try:
                 a_stat = os.stat(a_path)
-            except OSError as why:
+            except OSError:
                 # print('Can\'t stat', a_path, ':', why.args[1])
                 ok = 0
             try:
                 b_stat = os.stat(b_path)
-            except OSError as why:
+            except OSError:
                 # print('Can\'t stat', b_path, ':', why.args[1])
                 ok = 0
 
@@ -247,6 +248,9 @@
         self.methodmap[attr](self)
         return getattr(self, attr)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 def cmpfiles(a, b, common, shallow=True):
     """Compare common files in two directories.
 
diff --git a/Lib/fileinput.py b/Lib/fileinput.py
index c1b0ec9..0c31f93 100644
--- a/Lib/fileinput.py
+++ b/Lib/fileinput.py
@@ -73,6 +73,7 @@
 """
 
 import sys, os
+from types import GenericAlias
 
 __all__ = ["input", "close", "nextfile", "filename", "lineno", "filelineno",
            "fileno", "isfirstline", "isstdin", "FileInput", "hook_compressed",
@@ -391,6 +392,8 @@
     def isstdin(self):
         return self._isstdin
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 def hook_compressed(filename, mode):
     ext = os.path.splitext(filename)[1]
diff --git a/Lib/fnmatch.py b/Lib/fnmatch.py
index b98e641..0eb1802 100644
--- a/Lib/fnmatch.py
+++ b/Lib/fnmatch.py
@@ -16,6 +16,12 @@
 
 __all__ = ["filter", "fnmatch", "fnmatchcase", "translate"]
 
+# Build a thread-safe incrementing counter to help create unique regexp group
+# names across calls.
+from itertools import count
+_nextgroupnum = count().__next__
+del count
+
 def fnmatch(name, pat):
     """Test whether FILENAME matches PATTERN.
 
@@ -77,15 +83,19 @@
     There is no way to quote meta-characters.
     """
 
+    STAR = object()
+    res = []
+    add = res.append
     i, n = 0, len(pat)
-    res = ''
     while i < n:
         c = pat[i]
         i = i+1
         if c == '*':
-            res = res + '.*'
+            # compress consecutive `*` into one
+            if (not res) or res[-1] is not STAR:
+                add(STAR)
         elif c == '?':
-            res = res + '.'
+            add('.')
         elif c == '[':
             j = i
             if j < n and pat[j] == '!':
@@ -95,7 +105,7 @@
             while j < n and pat[j] != ']':
                 j = j+1
             if j >= n:
-                res = res + '\\['
+                add('\\[')
             else:
                 stuff = pat[i:j]
                 if '--' not in stuff:
@@ -122,7 +132,52 @@
                     stuff = '^' + stuff[1:]
                 elif stuff[0] in ('^', '['):
                     stuff = '\\' + stuff
-                res = '%s[%s]' % (res, stuff)
+                add(f'[{stuff}]')
         else:
-            res = res + re.escape(c)
-    return r'(?s:%s)\Z' % res
+            add(re.escape(c))
+    assert i == n
+
+    # Deal with STARs.
+    inp = res
+    res = []
+    add = res.append
+    i, n = 0, len(inp)
+    # Fixed pieces at the start?
+    while i < n and inp[i] is not STAR:
+        add(inp[i])
+        i += 1
+    # Now deal with STAR fixed STAR fixed ...
+    # For an interior `STAR fixed` pairing, we want to do a minimal
+    # .*? match followed by `fixed`, with no possibility of backtracking.
+    # We can't spell that directly, but can trick it into working by matching
+    #    .*?fixed
+    # in a lookahead assertion, save the matched part in a group, then
+    # consume that group via a backreference. If the overall match fails,
+    # the lookahead assertion won't try alternatives. So the translation is:
+    #     (?=(?P<name>.*?fixed))(?P=name)
+    # Group names are created as needed: g0, g1, g2, ...
+    # The numbers are obtained from _nextgroupnum() to ensure they're unique
+    # across calls and across threads. This is because people rely on the
+    # undocumented ability to join multiple translate() results together via
+    # "|" to build large regexps matching "one of many" shell patterns.
+    while i < n:
+        assert inp[i] is STAR
+        i += 1
+        if i == n:
+            add(".*")
+            break
+        assert inp[i] is not STAR
+        fixed = []
+        while i < n and inp[i] is not STAR:
+            fixed.append(inp[i])
+            i += 1
+        fixed = "".join(fixed)
+        if i == n:
+            add(".*")
+            add(fixed)
+        else:
+            groupnum = _nextgroupnum()
+            add(f"(?=(?P<g{groupnum}>.*?{fixed}))(?P=g{groupnum})")
+    assert i == n
+    res = "".join(res)
+    return fr'(?s:{res})\Z'
diff --git a/Lib/fractions.py b/Lib/fractions.py
index e4fcc89..de3e23b 100644
--- a/Lib/fractions.py
+++ b/Lib/fractions.py
@@ -10,31 +10,9 @@
 import re
 import sys
 
-__all__ = ['Fraction', 'gcd']
+__all__ = ['Fraction']
 
 
-
-def gcd(a, b):
-    """Calculate the Greatest Common Divisor of a and b.
-
-    Unless b==0, the result will have the same sign as b (so that when
-    b is divided by it, the result comes out positive).
-    """
-    import warnings
-    warnings.warn('fractions.gcd() is deprecated. Use math.gcd() instead.',
-                  DeprecationWarning, 2)
-    if type(a) is int is type(b):
-        if (b or a) < 0:
-            return -math.gcd(a, b)
-        return math.gcd(a, b)
-    return _gcd(a, b)
-
-def _gcd(a, b):
-    # Supports non-integers for backward compatibility.
-    while b:
-        a, b = b, a%b
-    return a
-
 # Constants related to the hash implementation;  hash(x) is based
 # on the reduction of x modulo the prime _PyHASH_MODULUS.
 _PyHASH_MODULUS = sys.hash_info.modulus
@@ -177,13 +155,9 @@
         if denominator == 0:
             raise ZeroDivisionError('Fraction(%s, 0)' % numerator)
         if _normalize:
-            if type(numerator) is int is type(denominator):
-                # *very* normal case
-                g = math.gcd(numerator, denominator)
-                if denominator < 0:
-                    g = -g
-            else:
-                g = _gcd(numerator, denominator)
+            g = math.gcd(numerator, denominator)
+            if denominator < 0:
+                g = -g
             numerator //= g
             denominator //= g
         self._numerator = numerator
@@ -556,23 +530,34 @@
     def __hash__(self):
         """hash(self)"""
 
-        # XXX since this method is expensive, consider caching the result
+        # To make sure that the hash of a Fraction agrees with the hash
+        # of a numerically equal integer, float or Decimal instance, we
+        # follow the rules for numeric hashes outlined in the
+        # documentation.  (See library docs, 'Built-in Types').
 
-        # In order to make sure that the hash of a Fraction agrees
-        # with the hash of a numerically equal integer, float or
-        # Decimal instance, we follow the rules for numeric hashes
-        # outlined in the documentation.  (See library docs, 'Built-in
-        # Types').
-
-        # dinv is the inverse of self._denominator modulo the prime
-        # _PyHASH_MODULUS, or 0 if self._denominator is divisible by
-        # _PyHASH_MODULUS.
-        dinv = pow(self._denominator, _PyHASH_MODULUS - 2, _PyHASH_MODULUS)
-        if not dinv:
+        try:
+            dinv = pow(self._denominator, -1, _PyHASH_MODULUS)
+        except ValueError:
+            # ValueError means there is no modular inverse.
             hash_ = _PyHASH_INF
         else:
-            hash_ = abs(self._numerator) * dinv % _PyHASH_MODULUS
-        result = hash_ if self >= 0 else -hash_
+            # The general algorithm now specifies that the absolute value of
+            # the hash is
+            #    (|N| * dinv) % P
+            # where N is self._numerator and P is _PyHASH_MODULUS.  That's
+            # optimized here in two ways:  first, for a non-negative int i,
+            # hash(i) == i % P, but the int hash implementation doesn't need
+            # to divide, and is faster than doing % P explicitly.  So we do
+            #    hash(|N| * dinv)
+            # instead.  Second, N is unbounded, so its product with dinv may
+            # be arbitrarily expensive to compute.  The final answer is the
+            # same if we use the bounded |N| % P instead, which can again
+            # be done with an int hash() call.  If 0 <= i < P, hash(i) == i,
+            # so this nested hash() call wastes a bit of time making a
+            # redundant copy when |N| < P, but can save an arbitrarily large
+            # amount of computation for large |N|.
+            hash_ = hash(hash(abs(self._numerator)) * dinv)
+        result = hash_ if self._numerator >= 0 else -hash_
         return -2 if result == -1 else result
 
     def __eq__(a, b):
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index 58a46bc..1f760ed 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -72,17 +72,17 @@
 
 # The class itself
 class FTP:
-
     '''An FTP client class.
 
     To create a connection, call the class using these arguments:
-            host, user, passwd, acct, timeout
+            host, user, passwd, acct, timeout, source_address, encoding
 
     The first four arguments are all strings, and have default value ''.
-    timeout must be numeric and defaults to None if not passed,
-    meaning that no timeout will be set on any ftp socket(s)
+    The parameter ´timeout´ must be numeric and defaults to None if not
+    passed, meaning that no timeout will be set on any ftp socket(s).
     If a timeout is passed, then this is now the default timeout for all ftp
     socket operations for this instance.
+    The last parameter is the encoding of filenames, which defaults to utf-8.
 
     Then use self.connect() with optional host and port argument.
 
@@ -103,14 +103,16 @@
     file = None
     welcome = None
     passiveserver = 1
-    encoding = "latin-1"
 
-    # Initialization method (called by class instantiation).
-    # Initialize host to localhost, port to standard ftp port
-    # Optional arguments are host (for connect()),
-    # and user, passwd, acct (for login())
     def __init__(self, host='', user='', passwd='', acct='',
-                 timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None):
+                 timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None, *,
+                 encoding='utf-8'):
+        """Initialization method (called by class instantiation).
+        Initialize host to localhost, port to standard ftp port.
+        Optional arguments are host (for connect()),
+        and user, passwd, acct (for login()).
+        """
+        self.encoding = encoding
         self.source_address = source_address
         self.timeout = timeout
         if host:
@@ -146,6 +148,8 @@
             self.port = port
         if timeout != -999:
             self.timeout = timeout
+        if self.timeout is not None and not self.timeout:
+            raise ValueError('Non-blocking socket (timeout=0) is not supported')
         if source_address is not None:
             self.source_address = source_address
         sys.audit("ftplib.connect", self, self.host, self.port)
@@ -704,9 +708,10 @@
         '''
         ssl_version = ssl.PROTOCOL_TLS_CLIENT
 
-        def __init__(self, host='', user='', passwd='', acct='', keyfile=None,
-                     certfile=None, context=None,
-                     timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None):
+        def __init__(self, host='', user='', passwd='', acct='',
+                     keyfile=None, certfile=None, context=None,
+                     timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None, *,
+                     encoding='utf-8'):
             if context is not None and keyfile is not None:
                 raise ValueError("context and keyfile arguments are mutually "
                                  "exclusive")
@@ -725,12 +730,13 @@
                                                      keyfile=keyfile)
             self.context = context
             self._prot_p = False
-            FTP.__init__(self, host, user, passwd, acct, timeout, source_address)
+            super().__init__(host, user, passwd, acct,
+                             timeout, source_address, encoding=encoding)
 
         def login(self, user='', passwd='', acct='', secure=True):
             if secure and not isinstance(self.sock, ssl.SSLSocket):
                 self.auth()
-            return FTP.login(self, user, passwd, acct)
+            return super().login(user, passwd, acct)
 
         def auth(self):
             '''Set up secure control connection by using TLS/SSL.'''
@@ -740,8 +746,7 @@
                 resp = self.voidcmd('AUTH TLS')
             else:
                 resp = self.voidcmd('AUTH SSL')
-            self.sock = self.context.wrap_socket(self.sock,
-                                                 server_hostname=self.host)
+            self.sock = self.context.wrap_socket(self.sock, server_hostname=self.host)
             self.file = self.sock.makefile(mode='r', encoding=self.encoding)
             return resp
 
@@ -778,7 +783,7 @@
         # --- Overridden FTP methods
 
         def ntransfercmd(self, cmd, rest=None):
-            conn, size = FTP.ntransfercmd(self, cmd, rest)
+            conn, size = super().ntransfercmd(cmd, rest)
             if self._prot_p:
                 conn = self.context.wrap_socket(conn,
                                                 server_hostname=self.host)
@@ -823,7 +828,6 @@
     '''Parse the '227' response for a PASV request.
     Raises error_proto if it does not contain '(h1,h2,h3,h4,p1,p2)'
     Return ('host.addr.as.numbers', port#) tuple.'''
-
     if resp[:3] != '227':
         raise error_reply(resp)
     global _227_re
@@ -843,7 +847,6 @@
     '''Parse the '229' response for an EPSV request.
     Raises error_proto if it does not contain '(|||port|)'
     Return ('host.addr.as.numbers', port#) tuple.'''
-
     if resp[:3] != '229':
         raise error_reply(resp)
     left = resp.find('(')
@@ -865,7 +868,6 @@
     '''Parse the '257' response for a MKD or PWD request.
     This is a response to a MKD or PWD request: a directory name.
     Returns the directoryname in the 257 reply.'''
-
     if resp[:3] != '257':
         raise error_reply(resp)
     if resp[3:5] != ' "':
diff --git a/Lib/functools.py b/Lib/functools.py
index 4cde5f5..5cab497 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -10,15 +10,16 @@
 # See C source code for _functools credits/copyright
 
 __all__ = ['update_wrapper', 'wraps', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES',
-           'total_ordering', 'cmp_to_key', 'lru_cache', 'reduce', 'partial',
-           'partialmethod', 'singledispatch', 'singledispatchmethod',
-           "cached_property"]
+           'total_ordering', 'cache', 'cmp_to_key', 'lru_cache', 'reduce',
+           'partial', 'partialmethod', 'singledispatch', 'singledispatchmethod',
+           'cached_property']
 
 from abc import get_cache_token
 from collections import namedtuple
 # import types, weakref  # Deferred to single_dispatch()
 from reprlib import recursive_repr
 from _thread import RLock
+from types import GenericAlias
 
 
 ################################################################################
@@ -95,6 +96,8 @@
 def _le_from_lt(self, other, NotImplemented=NotImplemented):
     'Return a <= b.  Computed by @total_ordering from (a < b) or (a == b).'
     op_result = self.__lt__(other)
+    if op_result is NotImplemented:
+        return op_result
     return op_result or self == other
 
 def _ge_from_lt(self, other, NotImplemented=NotImplemented):
@@ -135,6 +138,8 @@
 def _ge_from_gt(self, other, NotImplemented=NotImplemented):
     'Return a >= b.  Computed by @total_ordering from (a > b) or (a == b).'
     op_result = self.__gt__(other)
+    if op_result is NotImplemented:
+        return op_result
     return op_result or self == other
 
 def _le_from_gt(self, other, NotImplemented=NotImplemented):
@@ -346,23 +351,7 @@
     callables as instance methods.
     """
 
-    def __init__(*args, **keywords):
-        if len(args) >= 2:
-            self, func, *args = args
-        elif not args:
-            raise TypeError("descriptor '__init__' of partialmethod "
-                            "needs an argument")
-        elif 'func' in keywords:
-            func = keywords.pop('func')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'func' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError("type 'partialmethod' takes at least one argument, "
-                            "got %d" % (len(args)-1))
-        args = tuple(args)
-
+    def __init__(self, func, /, *args, **keywords):
         if not callable(func) and not hasattr(func, "__get__"):
             raise TypeError("{!r} is not callable or a descriptor"
                                  .format(func))
@@ -380,7 +369,6 @@
             self.func = func
             self.args = args
             self.keywords = keywords
-    __init__.__text_signature__ = '($self, func, /, *args, **keywords)'
 
     def __repr__(self):
         args = ", ".join(map(repr, self.args))
@@ -424,6 +412,9 @@
     def __isabstractmethod__(self):
         return getattr(self.func, "__isabstractmethod__", False)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 # Helper functions
 
 def _unwrap_partial(func):
@@ -517,6 +508,7 @@
         # The user_function was passed in directly via the maxsize argument
         user_function, maxsize = maxsize, 128
         wrapper = _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo)
+        wrapper.cache_parameters = lambda : {'maxsize': maxsize, 'typed': typed}
         return update_wrapper(wrapper, user_function)
     elif maxsize is not None:
         raise TypeError(
@@ -524,6 +516,7 @@
 
     def decorating_function(user_function):
         wrapper = _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo)
+        wrapper.cache_parameters = lambda : {'maxsize': maxsize, 'typed': typed}
         return update_wrapper(wrapper, user_function)
 
     return decorating_function
@@ -651,6 +644,15 @@
 
 
 ################################################################################
+### cache -- simplified access to the infinity cache
+################################################################################
+
+def cache(user_function, /):
+    'Simple lightweight unbounded cache.  Sometimes called "memoize".'
+    return lru_cache(maxsize=None)(user_function)
+
+
+################################################################################
 ### singledispatch() - single-dispatch generic function decorator
 ################################################################################
 
@@ -974,3 +976,5 @@
                         )
                         raise TypeError(msg) from None
         return val
+
+    __class_getitem__ = classmethod(GenericAlias)
diff --git a/Lib/getpass.py b/Lib/getpass.py
index 36e17e4..6911f41 100644
--- a/Lib/getpass.py
+++ b/Lib/getpass.py
@@ -52,7 +52,7 @@
             stack.enter_context(input)
             if not stream:
                 stream = input
-        except OSError as e:
+        except OSError:
             # If that fails, see if stdin can be controlled.
             stack.close()
             try:
diff --git a/Lib/gettext.py b/Lib/gettext.py
index b98f501..77b67ae 100644
--- a/Lib/gettext.py
+++ b/Lib/gettext.py
@@ -46,7 +46,6 @@
 #   find this format documented anywhere.
 
 
-import locale
 import os
 import re
 import sys
@@ -210,6 +209,7 @@
 
 
 def _expand_lang(loc):
+    import locale
     loc = locale.normalize(loc)
     COMPONENT_CODESET   = 1 << 0
     COMPONENT_TERRITORY = 1 << 1
@@ -278,6 +278,7 @@
         import warnings
         warnings.warn('lgettext() is deprecated, use gettext() instead',
                       DeprecationWarning, 2)
+        import locale
         if self._fallback:
             with warnings.catch_warnings():
                 warnings.filterwarnings('ignore', r'.*\blgettext\b.*',
@@ -299,6 +300,7 @@
         import warnings
         warnings.warn('lngettext() is deprecated, use ngettext() instead',
                       DeprecationWarning, 2)
+        import locale
         if self._fallback:
             with warnings.catch_warnings():
                 warnings.filterwarnings('ignore', r'.*\blngettext\b.*',
@@ -462,6 +464,7 @@
         import warnings
         warnings.warn('lgettext() is deprecated, use gettext() instead',
                       DeprecationWarning, 2)
+        import locale
         missing = object()
         tmsg = self._catalog.get(message, missing)
         if tmsg is missing:
@@ -476,6 +479,7 @@
         import warnings
         warnings.warn('lngettext() is deprecated, use ngettext() instead',
                       DeprecationWarning, 2)
+        import locale
         try:
             tmsg = self._catalog[(msgid1, self.plural(n))]
         except KeyError:
@@ -668,6 +672,7 @@
     import warnings
     warnings.warn('ldgettext() is deprecated, use dgettext() instead',
                   DeprecationWarning, 2)
+    import locale
     codeset = _localecodesets.get(domain)
     try:
         with warnings.catch_warnings():
@@ -695,6 +700,7 @@
     import warnings
     warnings.warn('ldngettext() is deprecated, use dngettext() instead',
                   DeprecationWarning, 2)
+    import locale
     codeset = _localecodesets.get(domain)
     try:
         with warnings.catch_warnings():
diff --git a/Lib/graphlib.py b/Lib/graphlib.py
new file mode 100644
index 0000000..d0e7a48
--- /dev/null
+++ b/Lib/graphlib.py
@@ -0,0 +1,246 @@
+__all__ = ["TopologicalSorter", "CycleError"]
+
+_NODE_OUT = -1
+_NODE_DONE = -2
+
+
+class _NodeInfo:
+    __slots__ = "node", "npredecessors", "successors"
+
+    def __init__(self, node):
+        # The node this class is augmenting.
+        self.node = node
+
+        # Number of predecessors, generally >= 0. When this value falls to 0,
+        # and is returned by get_ready(), this is set to _NODE_OUT and when the
+        # node is marked done by a call to done(), set to _NODE_DONE.
+        self.npredecessors = 0
+
+        # List of successor nodes. The list can contain duplicated elements as
+        # long as they're all reflected in the successor's npredecessors attribute).
+        self.successors = []
+
+
+class CycleError(ValueError):
+    """Subclass of ValueError raised by TopologicalSorter.prepare if cycles
+    exist in the working graph.
+
+    If multiple cycles exist, only one undefined choice among them will be reported
+    and included in the exception. The detected cycle can be accessed via the second
+    element in the *args* attribute of the exception instance and consists in a list
+    of nodes, such that each node is, in the graph, an immediate predecessor of the
+    next node in the list. In the reported list, the first and the last node will be
+    the same, to make it clear that it is cyclic.
+    """
+
+    pass
+
+
+class TopologicalSorter:
+    """Provides functionality to topologically sort a graph of hashable nodes"""
+
+    def __init__(self, graph=None):
+        self._node2info = {}
+        self._ready_nodes = None
+        self._npassedout = 0
+        self._nfinished = 0
+
+        if graph is not None:
+            for node, predecessors in graph.items():
+                self.add(node, *predecessors)
+
+    def _get_nodeinfo(self, node):
+        if (result := self._node2info.get(node)) is None:
+            self._node2info[node] = result = _NodeInfo(node)
+        return result
+
+    def add(self, node, *predecessors):
+        """Add a new node and its predecessors to the graph.
+
+        Both the *node* and all elements in *predecessors* must be hashable.
+
+        If called multiple times with the same node argument, the set of dependencies
+        will be the union of all dependencies passed in.
+
+        It is possible to add a node with no dependencies (*predecessors* is not provided)
+        as well as provide a dependency twice. If a node that has not been provided before
+        is included among *predecessors* it will be automatically added to the graph with
+        no predecessors of its own.
+
+        Raises ValueError if called after "prepare".
+        """
+        if self._ready_nodes is not None:
+            raise ValueError("Nodes cannot be added after a call to prepare()")
+
+        # Create the node -> predecessor edges
+        nodeinfo = self._get_nodeinfo(node)
+        nodeinfo.npredecessors += len(predecessors)
+
+        # Create the predecessor -> node edges
+        for pred in predecessors:
+            pred_info = self._get_nodeinfo(pred)
+            pred_info.successors.append(node)
+
+    def prepare(self):
+        """Mark the graph as finished and check for cycles in the graph.
+
+        If any cycle is detected, "CycleError" will be raised, but "get_ready" can
+        still be used to obtain as many nodes as possible until cycles block more
+        progress. After a call to this function, the graph cannot be modified and
+        therefore no more nodes can be added using "add".
+        """
+        if self._ready_nodes is not None:
+            raise ValueError("cannot prepare() more than once")
+
+        self._ready_nodes = [
+            i.node for i in self._node2info.values() if i.npredecessors == 0
+        ]
+        # ready_nodes is set before we look for cycles on purpose:
+        # if the user wants to catch the CycleError, that's fine,
+        # they can continue using the instance to grab as many
+        # nodes as possible before cycles block more progress
+        cycle = self._find_cycle()
+        if cycle:
+            raise CycleError(f"nodes are in a cycle", cycle)
+
+    def get_ready(self):
+        """Return a tuple of all the nodes that are ready.
+
+        Initially it returns all nodes with no predecessors; once those are marked
+        as processed by calling "done", further calls will return all new nodes that
+        have all their predecessors already processed. Once no more progress can be made,
+        empty tuples are returned.
+
+        Raises ValueError if called without calling "prepare" previously.
+        """
+        if self._ready_nodes is None:
+            raise ValueError("prepare() must be called first")
+
+        # Get the nodes that are ready and mark them
+        result = tuple(self._ready_nodes)
+        n2i = self._node2info
+        for node in result:
+            n2i[node].npredecessors = _NODE_OUT
+
+        # Clean the list of nodes that are ready and update
+        # the counter of nodes that we have returned.
+        self._ready_nodes.clear()
+        self._npassedout += len(result)
+
+        return result
+
+    def is_active(self):
+        """Return ``True`` if more progress can be made and ``False`` otherwise.
+
+        Progress can be made if cycles do not block the resolution and either there
+        are still nodes ready that haven't yet been returned by "get_ready" or the
+        number of nodes marked "done" is less than the number that have been returned
+        by "get_ready".
+
+        Raises ValueError if called without calling "prepare" previously.
+        """
+        if self._ready_nodes is None:
+            raise ValueError("prepare() must be called first")
+        return self._nfinished < self._npassedout or bool(self._ready_nodes)
+
+    def __bool__(self):
+        return self.is_active()
+
+    def done(self, *nodes):
+        """Marks a set of nodes returned by "get_ready" as processed.
+
+        This method unblocks any successor of each node in *nodes* for being returned
+        in the future by a call to "get_ready".
+
+        Raises :exec:`ValueError` if any node in *nodes* has already been marked as
+        processed by a previous call to this method, if a node was not added to the
+        graph by using "add" or if called without calling "prepare" previously or if
+        node has not yet been returned by "get_ready".
+        """
+
+        if self._ready_nodes is None:
+            raise ValueError("prepare() must be called first")
+
+        n2i = self._node2info
+
+        for node in nodes:
+
+            # Check if we know about this node (it was added previously using add()
+            if (nodeinfo := n2i.get(node)) is None:
+                raise ValueError(f"node {node!r} was not added using add()")
+
+            # If the node has not being returned (marked as ready) previously, inform the user.
+            stat = nodeinfo.npredecessors
+            if stat != _NODE_OUT:
+                if stat >= 0:
+                    raise ValueError(
+                        f"node {node!r} was not passed out (still not ready)"
+                    )
+                elif stat == _NODE_DONE:
+                    raise ValueError(f"node {node!r} was already marked done")
+                else:
+                    assert False, f"node {node!r}: unknown status {stat}"
+
+            # Mark the node as processed
+            nodeinfo.npredecessors = _NODE_DONE
+
+            # Go to all the successors and reduce the number of predecessors, collecting all the ones
+            # that are ready to be returned in the next get_ready() call.
+            for successor in nodeinfo.successors:
+                successor_info = n2i[successor]
+                successor_info.npredecessors -= 1
+                if successor_info.npredecessors == 0:
+                    self._ready_nodes.append(successor)
+            self._nfinished += 1
+
+    def _find_cycle(self):
+        n2i = self._node2info
+        stack = []
+        itstack = []
+        seen = set()
+        node2stacki = {}
+
+        for node in n2i:
+            if node in seen:
+                continue
+
+            while True:
+                if node in seen:
+                    # If we have seen already the node and is in the
+                    # current stack we have found a cycle.
+                    if node in node2stacki:
+                        return stack[node2stacki[node] :] + [node]
+                    # else go on to get next successor
+                else:
+                    seen.add(node)
+                    itstack.append(iter(n2i[node].successors).__next__)
+                    node2stacki[node] = len(stack)
+                    stack.append(node)
+
+                # Backtrack to the topmost stack entry with
+                # at least another successor.
+                while stack:
+                    try:
+                        node = itstack[-1]()
+                        break
+                    except StopIteration:
+                        del node2stacki[stack.pop()]
+                        itstack.pop()
+                else:
+                    break
+        return None
+
+    def static_order(self):
+        """Returns an iterable of nodes in a topological order.
+
+        The particular order that is returned may depend on the specific
+        order in which the items were inserted in the graph.
+
+        Using this method does not require to call "prepare" or "done". If any
+        cycle is detected, :exc:`CycleError` will be raised.
+        """
+        self.prepare()
+        while self.is_active():
+            node_group = self.get_ready()
+            yield from node_group
+            self.done(*node_group)
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 87b553d..e422773 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -177,6 +177,7 @@
                 filename = ''
         else:
             filename = os.fspath(filename)
+        origmode = mode
         if mode is None:
             mode = getattr(fileobj, 'mode', 'rb')
 
@@ -187,6 +188,13 @@
             self.name = filename
 
         elif mode.startswith(('w', 'a', 'x')):
+            if origmode is None:
+                import warnings
+                warnings.warn(
+                    "GzipFile was opened for writing, but this will "
+                    "change in future Python releases.  "
+                    "Specify the mode argument for opening it for writing.",
+                    FutureWarning, 2)
             self.mode = WRITE
             self._init_write(filename)
             self.compress = zlib.compressobj(compresslevel,
diff --git a/Lib/hashlib.py b/Lib/hashlib.py
index 56873b7..58c340d 100644
--- a/Lib/hashlib.py
+++ b/Lib/hashlib.py
@@ -70,9 +70,12 @@
 
 __builtin_constructor_cache = {}
 
+# Prefer our blake2 implementation
+# OpenSSL 1.1.0 comes with a limited implementation of blake2b/s. The OpenSSL
+# implementations neither support keyed blake2 (blake2 MAC) nor advanced
+# features like salt, personalization, or tree hashing. OpenSSL hash-only
+# variants are available as 'blake2b512' and 'blake2s256', though.
 __block_openssl_constructor = {
-    'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',
-    'shake_128', 'shake_256',
     'blake2b', 'blake2s',
 }
 
@@ -122,13 +125,16 @@
 
 def __get_openssl_constructor(name):
     if name in __block_openssl_constructor:
-        # Prefer our blake2 and sha3 implementation.
+        # Prefer our builtin blake2 implementation.
         return __get_builtin_constructor(name)
     try:
+        # MD5, SHA1, and SHA2 are in all supported OpenSSL versions
+        # SHA3/shake are available in OpenSSL 1.1.1+
         f = getattr(_hashlib, 'openssl_' + name)
         # Allow the C module to raise ValueError.  The function will be
-        # defined but the hash not actually available thanks to OpenSSL.
-        f()
+        # defined but the hash not actually available.  Don't fall back to
+        # builtin if the current security policy blocks a digest, bpo#40695.
+        f(usedforsecurity=False)
         # Use the C function directly (very fast)
         return f
     except (AttributeError, ValueError):
@@ -148,13 +154,10 @@
     optionally initialized with data (which must be a bytes-like object).
     """
     if name in __block_openssl_constructor:
-        # Prefer our blake2 and sha3 implementation
-        # OpenSSL 1.1.0 comes with a limited implementation of blake2b/s.
-        # It does neither support keyed blake2 nor advanced features like
-        # salt, personal, tree hashing or SSE.
+        # Prefer our builtin blake2 implementation.
         return __get_builtin_constructor(name)(data, **kwargs)
     try:
-        return _hashlib.new(name, data)
+        return _hashlib.new(name, data, **kwargs)
     except ValueError:
         # If the _hashlib module (OpenSSL) doesn't support the named
         # hash, try using our builtin implementations.
diff --git a/Lib/hmac.py b/Lib/hmac.py
index b769876..180bc37 100644
--- a/Lib/hmac.py
+++ b/Lib/hmac.py
@@ -4,14 +4,15 @@
 """
 
 import warnings as _warnings
-from _operator import _compare_digest as compare_digest
 try:
     import _hashlib as _hashopenssl
 except ImportError:
     _hashopenssl = None
     _openssl_md_meths = None
+    from _operator import _compare_digest as compare_digest
 else:
     _openssl_md_meths = frozenset(_hashopenssl.openssl_md_meth_names)
+    compare_digest = _hashopenssl.compare_digest
 import hashlib as _hashlib
 
 trans_5C = bytes((x ^ 0x5C) for x in range(256))
@@ -30,6 +31,10 @@
     """
     blocksize = 64  # 512-bit HMAC; can be changed in subclasses.
 
+    __slots__ = (
+        "_digest_cons", "_inner", "_outer", "block_size", "digest_size"
+    )
+
     def __init__(self, key, msg=None, digestmod=''):
         """Create a new HMAC object.
 
@@ -51,18 +56,18 @@
             raise TypeError("Missing required parameter 'digestmod'.")
 
         if callable(digestmod):
-            self.digest_cons = digestmod
+            self._digest_cons = digestmod
         elif isinstance(digestmod, str):
-            self.digest_cons = lambda d=b'': _hashlib.new(digestmod, d)
+            self._digest_cons = lambda d=b'': _hashlib.new(digestmod, d)
         else:
-            self.digest_cons = lambda d=b'': digestmod.new(d)
+            self._digest_cons = lambda d=b'': digestmod.new(d)
 
-        self.outer = self.digest_cons()
-        self.inner = self.digest_cons()
-        self.digest_size = self.inner.digest_size
+        self._outer = self._digest_cons()
+        self._inner = self._digest_cons()
+        self.digest_size = self._inner.digest_size
 
-        if hasattr(self.inner, 'block_size'):
-            blocksize = self.inner.block_size
+        if hasattr(self._inner, 'block_size'):
+            blocksize = self._inner.block_size
             if blocksize < 16:
                 _warnings.warn('block_size of %d seems too small; using our '
                                'default of %d.' % (blocksize, self.blocksize),
@@ -79,21 +84,33 @@
         self.block_size = blocksize
 
         if len(key) > blocksize:
-            key = self.digest_cons(key).digest()
+            key = self._digest_cons(key).digest()
 
         key = key.ljust(blocksize, b'\0')
-        self.outer.update(key.translate(trans_5C))
-        self.inner.update(key.translate(trans_36))
+        self._outer.update(key.translate(trans_5C))
+        self._inner.update(key.translate(trans_36))
         if msg is not None:
             self.update(msg)
 
     @property
     def name(self):
-        return "hmac-" + self.inner.name
+        return "hmac-" + self._inner.name
+
+    @property
+    def digest_cons(self):
+        return self._digest_cons
+
+    @property
+    def inner(self):
+        return self._inner
+
+    @property
+    def outer(self):
+        return self._outer
 
     def update(self, msg):
         """Feed data from msg into this hashing object."""
-        self.inner.update(msg)
+        self._inner.update(msg)
 
     def copy(self):
         """Return a separate copy of this hashing object.
@@ -102,10 +119,10 @@
         """
         # Call __new__ directly to avoid the expensive __init__.
         other = self.__class__.__new__(self.__class__)
-        other.digest_cons = self.digest_cons
+        other._digest_cons = self._digest_cons
         other.digest_size = self.digest_size
-        other.inner = self.inner.copy()
-        other.outer = self.outer.copy()
+        other._inner = self._inner.copy()
+        other._outer = self._outer.copy()
         return other
 
     def _current(self):
@@ -113,8 +130,8 @@
 
         To be used only internally with digest() and hexdigest().
         """
-        h = self.outer.copy()
-        h.update(self.inner.digest())
+        h = self._outer.copy()
+        h.update(self._inner.digest())
         return h
 
     def digest(self):
diff --git a/Lib/html/parser.py b/Lib/html/parser.py
index de81879..6083077 100644
--- a/Lib/html/parser.py
+++ b/Lib/html/parser.py
@@ -9,7 +9,6 @@
 
 
 import re
-import warnings
 import _markupbase
 
 from html import unescape
@@ -461,10 +460,3 @@
 
     def unknown_decl(self, data):
         pass
-
-    # Internal -- helper to remove special character quoting
-    def unescape(self, s):
-        warnings.warn('The unescape method is deprecated and will be removed '
-                      'in 3.5, use html.unescape() instead.',
-                      DeprecationWarning, stacklevel=2)
-        return unescape(s)
diff --git a/Lib/http/__init__.py b/Lib/http/__init__.py
index 350afe7..37be765 100644
--- a/Lib/http/__init__.py
+++ b/Lib/http/__init__.py
@@ -17,6 +17,9 @@
         * RFC 2774: An HTTP Extension Framework
         * RFC 7725: An HTTP Status Code to Report Legal Obstacles
         * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2)
+        * RFC 2324: Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)
+        * RFC 8297: An HTTP Status Code for Indicating Hints
+        * RFC 8470: Using Early Data in HTTP
     """
     def __new__(cls, value, phrase, description=''):
         obj = int.__new__(cls, value)
@@ -31,6 +34,7 @@
     SWITCHING_PROTOCOLS = (101, 'Switching Protocols',
             'Switching to new protocol; obey Upgrade header')
     PROCESSING = 102, 'Processing'
+    EARLY_HINTS = 103, 'Early Hints'
 
     # success
     OK = 200, 'OK', 'Request fulfilled, document follows'
@@ -100,11 +104,14 @@
         'Cannot satisfy request range')
     EXPECTATION_FAILED = (417, 'Expectation Failed',
         'Expect condition could not be satisfied')
+    IM_A_TEAPOT = (418, 'I\'m a Teapot',
+        'Server refuses to brew coffee because it is a teapot.')
     MISDIRECTED_REQUEST = (421, 'Misdirected Request',
         'Server is not able to produce a response')
     UNPROCESSABLE_ENTITY = 422, 'Unprocessable Entity'
     LOCKED = 423, 'Locked'
     FAILED_DEPENDENCY = 424, 'Failed Dependency'
+    TOO_EARLY = 425, 'Too Early'
     UPGRADE_REQUIRED = 426, 'Upgrade Required'
     PRECONDITION_REQUIRED = (428, 'Precondition Required',
         'The origin server requires the request to be conditional')
diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py
index 6694f54..35ac2dc 100644
--- a/Lib/http/cookies.py
+++ b/Lib/http/cookies.py
@@ -131,6 +131,7 @@
 #
 import re
 import string
+import types
 
 __all__ = ["CookieError", "BaseCookie", "SimpleCookie"]
 
@@ -419,6 +420,8 @@
         # Return the result
         return _semispacejoin(result)
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 #
 # Pattern for finding cookie
diff --git a/Lib/http/server.py b/Lib/http/server.py
index 38f7acc..def05f4 100644
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -639,11 +639,17 @@
     """
 
     server_version = "SimpleHTTP/" + __version__
+    extensions_map = _encodings_map_default = {
+        '.gz': 'application/gzip',
+        '.Z': 'application/octet-stream',
+        '.bz2': 'application/x-bzip2',
+        '.xz': 'application/x-xz',
+    }
 
     def __init__(self, *args, directory=None, **kwargs):
         if directory is None:
             directory = os.getcwd()
-        self.directory = directory
+        self.directory = os.fspath(directory)
         super().__init__(*args, **kwargs)
 
     def do_GET(self):
@@ -866,25 +872,16 @@
         slow) to look inside the data to make a better guess.
 
         """
-
         base, ext = posixpath.splitext(path)
         if ext in self.extensions_map:
             return self.extensions_map[ext]
         ext = ext.lower()
         if ext in self.extensions_map:
             return self.extensions_map[ext]
-        else:
-            return self.extensions_map['']
-
-    if not mimetypes.inited:
-        mimetypes.init() # try to read system mime.types
-    extensions_map = mimetypes.types_map.copy()
-    extensions_map.update({
-        '': 'application/octet-stream', # Default
-        '.py': 'text/plain',
-        '.c': 'text/plain',
-        '.h': 'text/plain',
-        })
+        guess, _ = mimetypes.guess_type(path)
+        if guess:
+            return guess
+        return 'application/octet-stream'
 
 
 # Utilities for CGIHTTPRequestHandler
@@ -1015,8 +1012,10 @@
         """
         collapsed_path = _url_collapse_path(self.path)
         dir_sep = collapsed_path.find('/', 1)
-        head, tail = collapsed_path[:dir_sep], collapsed_path[dir_sep+1:]
-        if head in self.cgi_directories:
+        while dir_sep > 0 and not collapsed_path[:dir_sep] in self.cgi_directories:
+            dir_sep = collapsed_path.find('/', dir_sep+1)
+        if dir_sep > 0:
+            head, tail = collapsed_path[:dir_sep], collapsed_path[dir_sep+1:]
             self.cgi_info = head, tail
             return True
         return False
@@ -1124,12 +1123,7 @@
         referer = self.headers.get('referer')
         if referer:
             env['HTTP_REFERER'] = referer
-        accept = []
-        for line in self.headers.getallmatchingheaders('accept'):
-            if line[:1] in "\t\n\r ":
-                accept.append(line.strip())
-            else:
-                accept = accept + line[7:].split(',')
+        accept = self.headers.get_all('accept', ())
         env['HTTP_ACCEPT'] = ','.join(accept)
         ua = self.headers.get('user-agent')
         if ua:
@@ -1165,8 +1159,9 @@
                 while select.select([self.rfile], [], [], 0)[0]:
                     if not self.rfile.read(1):
                         break
-                if sts:
-                    self.log_error("CGI script exit status %#x", sts)
+                exitcode = os.waitstatus_to_exitcode(sts)
+                if exitcode:
+                    self.log_error(f"CGI script exit code {exitcode}")
                 return
             # Child
             try:
diff --git a/Lib/idlelib/Icons/README.txt b/Lib/idlelib/Icons/README.txt
index 8b47162..d91c4d5 100644
--- a/Lib/idlelib/Icons/README.txt
+++ b/Lib/idlelib/Icons/README.txt
@@ -7,3 +7,7 @@
 
 Various different formats and sizes are available at this GitHub Pull Request:
 https://github.com/python/cpython/pull/17473
+
+The idle.ico file was created with ImageMagick:
+
+    $ convert idle_16.png idle_32.png idle_48.png idle_256.png idle.ico
diff --git a/Lib/idlelib/Icons/idle.ico b/Lib/idlelib/Icons/idle.ico
index 3357aef..2aa9a83 100644
--- a/Lib/idlelib/Icons/idle.ico
+++ b/Lib/idlelib/Icons/idle.ico
Binary files differ
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index ddc1e22..869be0a 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -1,15 +1,42 @@
-What's New in IDLE 3.8.5
-Released on 2020-07-20
+What's New in IDLE 3.9.1
+Released on 2020-12-07?
 ======================================
 
 
+bpo-42508: Keep IDLE running on macOS.  Remove obsolete workaround
+that prevented running files with shortcuts when using new universal2
+installers built on macOS 11.
+
+bpo-42426: Fix reporting offset of the RE error in searchengine.
+
+bpo-42416: Get docstrings for IDLE calltips more often
+by using inspect.getdoc.
+
+bpo-33987: Mostly finish using ttk widgets, mainly for editor,
+settings, and searches.  Some patches by Mark Roseman.
+
+bpo-41775: Make 'IDLE Shell' the shell title.
+
+bpo-35764: Rewrite the Calltips doc section.
+
+bpo-40181: In calltips, stop reminding that '/' marks the end of
+positional-only arguments.
+
+
+What's New in IDLE 3.9.0 (since 3.8.0)
+Released on 2020-10-05?
+======================================
+
+bpo-41468: Improve IDLE run crash error message (which users should
+never see).
+
+bpo-41373: Save files loaded with no line ending, as when blank, or
+different line endings, by setting its line ending to the system
+default. Fix regression in 3.8.4 and 3.9.0b4.
+
 bpo-41300: Save files with non-ascii chars.  Fix regression in
 3.9.0b4 and 3.8.4.
 
-What's New in IDLE 3.8.4
-Released on 2020-06-30
-======================================
-
 bpo-37765: Add keywords to module name completion list.  Rewrite
 Completions section of IDLE doc.
 
@@ -21,11 +48,6 @@
 bpo-40723: Make test_idle pass when run after import.
 Patch by Florian Dahlitz.
 
-
-What's New in IDLE 3.8.3
-Released on 2020-05-13
-======================================
-
 bpo-38689: IDLE will no longer freeze when inspect.signature fails
 when fetching a calltip.
 
@@ -43,11 +65,6 @@
 
 bpo-39663: Add tests for pyparse find_good_parse_start().
 
-
-What's New in IDLE 3.8.2
-Released on 2020-02-17
-======================================
-
 bpo-39600: Remove duplicate font names from configuration list.
 
 bpo-38792: Close a shell calltip if a :exc:`KeyboardInterrupt`
@@ -64,11 +81,6 @@
 Remove unneeded arguments and dead code from pyparse
 find_good_parse_start method.
 
-
-What's New in IDLE 3.8.1
-Released on 2019-12-18
-======================================
-
 bpo-38943: Fix autocomplete windows not always appearing on some
 systems.  Patch by Johnny Najera.
 
@@ -82,9 +94,9 @@
 functions (default shortcuts Alt-T and Alt-U) were mistakenly disabled
 in 3.7.5 and 3.8.0.
 
-bpo-4360: Add an option to toggle IDLE's cursor blink for shell,
+bpo-4630: Add an option to toggle IDLE's cursor blink for shell,
 editor, and output windows.  See Settings, General, Window Preferences,
-Cursor Blink.  Patch by Zachary Spytz.
+Cursor Blink.  Patch by Zackery Spytz.
 
 bpo-26353: Stop adding newline when saving an IDLE shell window.
 
diff --git a/Lib/idlelib/calltip.py b/Lib/idlelib/calltip.py
index d4092c7..40bc5a0 100644
--- a/Lib/idlelib/calltip.py
+++ b/Lib/idlelib/calltip.py
@@ -55,18 +55,50 @@
             self.open_calltip(False)
 
     def open_calltip(self, evalfuncs):
-        self.remove_calltip_window()
+        """Maybe close an existing calltip and maybe open a new calltip.
 
+        Called from (force_open|try_open|refresh)_calltip_event functions.
+        """
         hp = HyperParser(self.editwin, "insert")
         sur_paren = hp.get_surrounding_brackets('(')
+
+        # If not inside parentheses, no calltip.
         if not sur_paren:
+            self.remove_calltip_window()
             return
+
+        # If a calltip is shown for the current parentheses, do
+        # nothing.
+        if self.active_calltip:
+            opener_line, opener_col = map(int, sur_paren[0].split('.'))
+            if (
+                (opener_line, opener_col) ==
+                (self.active_calltip.parenline, self.active_calltip.parencol)
+            ):
+                return
+
         hp.set_index(sur_paren[0])
-        expression  = hp.get_expression()
+        try:
+            expression = hp.get_expression()
+        except ValueError:
+            expression = None
         if not expression:
+            # No expression before the opening parenthesis, e.g.
+            # because it's in a string or the opener for a tuple:
+            # Do nothing.
             return
+
+        # At this point, the current index is after an opening
+        # parenthesis, in a section of code, preceded by a valid
+        # expression. If there is a calltip shown, it's not for the
+        # same index and should be closed.
+        self.remove_calltip_window()
+
+        # Simple, fast heuristic: If the preceding expression includes
+        # an opening parenthesis, it likely includes a function call.
         if not evalfuncs and (expression.find('(') != -1):
             return
+
         argspec = self.fetch_tip(expression)
         if not argspec:
             return
@@ -118,7 +150,6 @@
 _first_param = re.compile(r'(?<=\()\w*\,?\s*')
 _default_callable_argspec = "See source or doc"
 _invalid_method = "invalid method signature"
-_argument_positional = "  # '/' marks preceding args as positional-only."
 
 def get_argspec(ob):
     '''Return a string describing the signature of a callable object, or ''.
@@ -134,6 +165,7 @@
         ob_call = ob.__call__
     except BaseException:  # Buggy user object could raise anything.
         return ''  # No popup for non-callables.
+    # For Get_argspecTest.test_buggy_getattr_class, CallA() & CallB().
     fob = ob_call if isinstance(ob_call, types.MethodType) else ob
 
     # Initialize argspec and wrap it to get lines.
@@ -146,9 +178,6 @@
         else:
             argspec = ''
 
-    if '/' in argspec and len(argspec) < _MAX_COLS - len(_argument_positional):
-        # Add explanation TODO remove after 3.7, before 3.9.
-        argspec += _argument_positional
     if isinstance(fob, type) and argspec == '()':
         # If fob has no argument, use default callable argspec.
         argspec = _default_callable_argspec
@@ -157,10 +186,7 @@
              if len(argspec) > _MAX_COLS else [argspec] if argspec else [])
 
     # Augment lines from docstring, if any, and join to get argspec.
-    if isinstance(ob_call, types.MethodType):
-        doc = ob_call.__doc__
-    else:
-        doc = getattr(ob, "__doc__", "")
+    doc = inspect.getdoc(ob)
     if doc:
         for line in doc.split('\n', _MAX_LINES)[:_MAX_LINES]:
             line = line.strip()
diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py
index 8259649..a84e1c5 100644
--- a/Lib/idlelib/configdialog.py
+++ b/Lib/idlelib/configdialog.py
@@ -67,7 +67,6 @@
         if not _utest:
             self.withdraw()
 
-        self.configure(borderwidth=5)
         self.title(title or 'IDLE Preferences')
         x = parent.winfo_rootx() + 20
         y = parent.winfo_rooty() + (30 if not _htest else 150)
@@ -97,6 +96,7 @@
         """Create and place widgets for tabbed dialog.
 
         Widgets Bound to self:
+            frame: encloses all other widgets
             note: Notebook
             highpage: HighPage
             fontpage: FontPage
@@ -109,7 +109,9 @@
             load_configs: Load pages except for extensions.
             activate_config_changes: Tell editors to reload.
         """
-        self.note = note = Notebook(self)
+        self.frame = frame = Frame(self, padding="5px")
+        self.frame.grid(sticky="nwes")
+        self.note = note = Notebook(frame)
         self.highpage = HighPage(note)
         self.fontpage = FontPage(note, self.highpage)
         self.keyspage = KeysPage(note)
@@ -148,7 +150,7 @@
             padding_args = {}
         else:
             padding_args = {'padding': (6, 3)}
-        outer = Frame(self, padding=2)
+        outer = Frame(self.frame, padding=2)
         buttons_frame = Frame(outer, padding=2)
         self.buttons = {}
         for txt, cmd in (
@@ -687,7 +689,7 @@
 
     def __init__(self, master):
         super().__init__(master)
-        self.cd = master.master
+        self.cd = master.winfo_toplevel()
         self.style = Style(master)
         self.create_page_highlight()
         self.load_theme_cfg()
@@ -1346,7 +1348,7 @@
 
     def __init__(self, master):
         super().__init__(master)
-        self.cd = master.master
+        self.cd = master.winfo_toplevel()
         self.create_page_keys()
         self.load_key_cfg()
 
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 81ce510..170999e 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -1,23 +1,24 @@
 
 <!DOCTYPE html>
 
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
   <head>
     <meta charset="utf-8" />
-    <title>IDLE &#8212; Python 3.10.0a0 documentation</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>IDLE &#8212; Python 3.10.0a1 documentation</title>
     <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
+    <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+    <script src="../_static/jquery.js"></script>
+    <script src="../_static/underscore.js"></script>
+    <script src="../_static/doctools.js"></script>
+    <script src="../_static/language_data.js"></script>
 
-    <script type="text/javascript" src="../_static/sidebar.js"></script>
+    <script src="../_static/sidebar.js"></script>
 
     <link rel="search" type="application/opensearchdescription+xml"
-          title="Search within Python 3.10.0a0 documentation"
+          title="Search within Python 3.10.0a1 documentation"
           href="../_static/opensearch.xml"/>
     <link rel="author" title="About these documents" href="../about.html" />
     <link rel="index" title="Index" href="../genindex.html" />
@@ -71,11 +72,12 @@
 
 
     <li>
-      <a href="../index.html">3.10.0a0 Documentation</a> &#187;
+      <a href="../index.html">3.10.0a1 Documentation</a> &#187;
     </li>
 
           <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
           <li class="nav-item nav-item-2"><a href="tk.html" accesskey="U">Graphical User Interfaces with Tk</a> &#187;</li>
+        <li class="nav-item nav-item-this"><a href="">IDLE</a></li>
     <li class="right">
 
 
@@ -426,30 +428,30 @@
 the <kbd class="kbd docutils literal notranslate">Command</kbd> key on macOS.</p>
 <ul>
 <li><p><kbd class="kbd docutils literal notranslate">Backspace</kbd> deletes to the left; <kbd class="kbd docutils literal notranslate">Del</kbd> deletes to the right</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-Backspace</kbd> delete word left; <kbd class="kbd docutils literal notranslate">C-Del</kbd> delete word to the right</p></li>
-<li><p>Arrow keys and <kbd class="kbd docutils literal notranslate">Page Up</kbd>/<kbd class="kbd docutils literal notranslate">Page Down</kbd> to move around</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-LeftArrow</kbd> and <kbd class="kbd docutils literal notranslate">C-RightArrow</kbd> moves by words</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">Backspace</kbd></kbd> delete word left; <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">Del</kbd></kbd> delete word to the right</p></li>
+<li><p>Arrow keys and <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">Page</kbd> <kbd class="kbd docutils literal notranslate">Up</kbd></kbd>/<kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">Page</kbd> <kbd class="kbd docutils literal notranslate">Down</kbd></kbd> to move around</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">LeftArrow</kbd></kbd> and <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">RightArrow</kbd></kbd> moves by words</p></li>
 <li><p><kbd class="kbd docutils literal notranslate">Home</kbd>/<kbd class="kbd docutils literal notranslate">End</kbd> go to begin/end of line</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-Home</kbd>/<kbd class="kbd docutils literal notranslate">C-End</kbd> go to begin/end of file</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">Home</kbd></kbd>/<kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">End</kbd></kbd> go to begin/end of file</p></li>
 <li><p>Some useful Emacs bindings are inherited from Tcl/Tk:</p>
 <blockquote>
 <div><ul class="simple">
-<li><p><kbd class="kbd docutils literal notranslate">C-a</kbd> beginning of line</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-e</kbd> end of line</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-k</kbd> kill line (but doesn’t put it in clipboard)</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-l</kbd> center window around the insertion point</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-b</kbd> go backward one character without deleting (usually you can
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">a</kbd></kbd> beginning of line</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">e</kbd></kbd> end of line</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">k</kbd></kbd> kill line (but doesn’t put it in clipboard)</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">l</kbd></kbd> center window around the insertion point</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">b</kbd></kbd> go backward one character without deleting (usually you can
 also use the cursor key for this)</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-f</kbd> go forward one character without deleting (usually you can
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">f</kbd></kbd> go forward one character without deleting (usually you can
 also use the cursor key for this)</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-p</kbd> go up one line (usually you can also use the cursor key for
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd></kbd> go up one line (usually you can also use the cursor key for
 this)</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-d</kbd> delete next character</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd></kbd> delete next character</p></li>
 </ul>
 </div></blockquote>
 </li>
 </ul>
-<p>Standard keybindings (like <kbd class="kbd docutils literal notranslate">C-c</kbd> to copy and <kbd class="kbd docutils literal notranslate">C-v</kbd> to paste)
+<p>Standard keybindings (like <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd></kbd> to copy and <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">v</kbd></kbd> to paste)
 may work.  Keybindings are selected in the Configure IDLE dialog.</p>
 </div>
 <div class="section" id="automatic-indentation">
@@ -481,13 +483,13 @@
 large number of milliseconds, such as 100000000.) For imported module
 names or class or function attributes, type ‘.’.
 For filenames in the root directory, type <a class="reference internal" href="os.html#os.sep" title="os.sep"><code class="xref py py-data docutils literal notranslate"><span class="pre">os.sep</span></code></a> or
-data:<cite>os.altsep</cite> immediately after an opening quote.  (On Windows,
+<a class="reference internal" href="os.html#os.altsep" title="os.altsep"><code class="xref py py-data docutils literal notranslate"><span class="pre">os.altsep</span></code></a> immediately after an opening quote.  (On Windows,
 one can specify a drive first.)  Move into subdirectories by typing a
 directory name and a separator.</p>
-<p>Instead of waiting, or after a box is closed. open a completion box
+<p>Instead of waiting, or after a box is closed, open a completion box
 immediately with Show Completions on the Edit menu.  The default hot
-key is <kbd class="kbd docutils literal notranslate">C-space</kbd>.  If one types a prefix for the desired name
-before opening the box, the first match is displayed.
+key is <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">space</kbd></kbd>.  If one types a prefix for the desired name
+before opening the box, the first match or near miss is made visible.
 The result is the same as if one enters a prefix
 after the box is displayed.  Show Completions after a quote completes
 filenames in the current directory instead of a root directory.</p>
@@ -509,26 +511,29 @@
 </div>
 <div class="section" id="calltips">
 <span id="id4"></span><h3>Calltips<a class="headerlink" href="#calltips" title="Permalink to this headline">¶</a></h3>
-<p>A calltip is shown when one types <kbd class="kbd docutils literal notranslate">(</kbd> after the name of an <em>accessible</em>
-function.  A name expression may include dots and subscripts.  A calltip
-remains until it is clicked, the cursor is moved out of the argument area,
-or <kbd class="kbd docutils literal notranslate">)</kbd> is typed.  When the cursor is in the argument part of a definition,
-the menu or shortcut display a calltip.</p>
-<p>A calltip consists of the function signature and the first line of the
-docstring.  For builtins without an accessible signature, the calltip
-consists of all lines up the fifth line or the first blank line.  These
-details may change.</p>
-<p>The set of <em>accessible</em> functions depends on what modules have been imported
-into the user process, including those imported by Idle itself,
-and what definitions have been run, all since the last restart.</p>
+<p>A calltip is shown automatically when one types <kbd class="kbd docutils literal notranslate">(</kbd> after the name
+of an <em>accessible</em> function.  A function name expression may include
+dots and subscripts.  A calltip remains until it is clicked, the cursor
+is moved out of the argument area, or <kbd class="kbd docutils literal notranslate">)</kbd> is typed.  Whenever the
+cursor is in the argument part of a definition, select Edit and “Show
+Call Tip” on the menu or enter its shortcut to display a calltip.</p>
+<p>The calltip consists of the function’s signature and docstring up to
+the latter’s first blank line or the fifth non-blank line.  (Some builtin
+functions lack an accessible signature.)  A ‘/’ or ‘*’ in the signature
+indicates that the preceding or following arguments are passed by
+position or name (keyword) only.  Details are subject to change.</p>
+<p>In Shell, the accessible functions depends on what modules have been
+imported into the user process, including those imported by Idle itself,
+and which definitions have been run, all since the last restart.</p>
 <p>For example, restart the Shell and enter <code class="docutils literal notranslate"><span class="pre">itertools.count(</span></code>.  A calltip
-appears because Idle imports itertools into the user process for its own use.
-(This could change.)  Enter <code class="docutils literal notranslate"><span class="pre">turtle.write(</span></code> and nothing appears.  Idle does
-not import turtle.  The menu or shortcut do nothing either.  Enter
-<code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">turtle</span></code> and then <code class="docutils literal notranslate"><span class="pre">turtle.write(</span></code> will work.</p>
-<p>In an editor, import statements have no effect until one runs the file.  One
-might want to run a file after writing the import statements at the top,
-or immediately run an existing file before editing.</p>
+appears because Idle imports itertools into the user process for its own
+use.  (This could change.)  Enter <code class="docutils literal notranslate"><span class="pre">turtle.write(</span></code> and nothing appears.
+Idle does not itself import turtle.  The menu entry and shortcut also do
+nothing.  Enter <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">turtle</span></code>.  Thereafter, <code class="docutils literal notranslate"><span class="pre">turtle.write(</span></code>
+will display a calltip.</p>
+<p>In an editor, import statements have no effect until one runs the file.
+One might want to run a file after writing import statements, after
+adding function definitions, or after opening an existing file.</p>
 </div>
 <div class="section" id="code-context">
 <span id="id5"></span><h3>Code Context<a class="headerlink" href="#code-context" title="Permalink to this headline">¶</a></h3>
@@ -556,14 +561,14 @@
 <p>The editing features described in previous subsections work when entering
 code interactively.  IDLE’s Shell window also responds to the following keys.</p>
 <ul>
-<li><p><kbd class="kbd docutils literal notranslate">C-c</kbd> interrupts executing command</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">C-d</kbd> sends end-of-file; closes window if typed at a <code class="docutils literal notranslate"><span class="pre">&gt;&gt;&gt;</span></code> prompt</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">Alt-/</kbd> (Expand word) is also useful to reduce typing</p>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">c</kbd></kbd> interrupts executing command</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">d</kbd></kbd> sends end-of-file; closes window if typed at a <code class="docutils literal notranslate"><span class="pre">&gt;&gt;&gt;</span></code> prompt</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">/</kbd></kbd> (Expand word) is also useful to reduce typing</p>
 <p>Command history</p>
 <ul class="simple">
-<li><p><kbd class="kbd docutils literal notranslate">Alt-p</kbd> retrieves previous command matching what you have typed. On
-macOS use <kbd class="kbd docutils literal notranslate">C-p</kbd>.</p></li>
-<li><p><kbd class="kbd docutils literal notranslate">Alt-n</kbd> retrieves next. On macOS use <kbd class="kbd docutils literal notranslate">C-n</kbd>.</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd></kbd> retrieves previous command matching what you have typed. On
+macOS use <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">p</kbd></kbd>.</p></li>
+<li><p><kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">Alt</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd></kbd> retrieves next. On macOS use <kbd class="kbd docutils literal notranslate"><kbd class="kbd docutils literal notranslate">C</kbd>-<kbd class="kbd docutils literal notranslate">n</kbd></kbd>.</p></li>
 <li><p><kbd class="kbd docutils literal notranslate">Return</kbd> while on any previous command retrieves that command</p></li>
 </ul>
 </li>
@@ -849,6 +854,7 @@
 </div>
 
 
+            <div class="clearer"></div>
           </div>
         </div>
       </div>
@@ -944,11 +950,12 @@
 
 
     <li>
-      <a href="../index.html">3.10.0a0 Documentation</a> &#187;
+      <a href="../index.html">3.10.0a1 Documentation</a> &#187;
     </li>
 
           <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
           <li class="nav-item nav-item-2"><a href="tk.html" >Graphical User Interfaces with Tk</a> &#187;</li>
+        <li class="nav-item nav-item-this"><a href="">IDLE</a></li>
     <li class="right">
 
 
@@ -975,11 +982,11 @@
 <br />
     <br />
 
-    Last updated on Jul 08, 2020.
+    Last updated on Oct 20, 2020.
     <a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
     <br />
 
-    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.1.1.
+    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
     </div>
 
   </body>
diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py
index 9f63ea0..f420d40 100644
--- a/Lib/idlelib/help.py
+++ b/Lib/idlelib/help.py
@@ -28,8 +28,8 @@
 from os.path import abspath, dirname, isfile, join
 from platform import python_version
 
-from tkinter import Toplevel, Frame, Text, Menu
-from tkinter.ttk import Menubutton, Scrollbar
+from tkinter import Toplevel, Text, Menu
+from tkinter.ttk import Frame, Menubutton, Scrollbar, Style
 from tkinter import font as tkfont
 
 from idlelib.config import idleConf
@@ -212,7 +212,9 @@
     def __init__(self, parent, filename):
         Frame.__init__(self, parent)
         self.text = text = HelpText(self, filename)
-        self['background'] = text['background']
+        self.style = Style(parent)
+        self['style'] = 'helpframe.TFrame'
+        self.style.configure('helpframe.TFrame', background=text['background'])
         self.toc = toc = self.toc_menu(text)
         self.scroll = scroll = Scrollbar(self, command=text.yview)
         text['yscrollcommand'] = scroll.set
diff --git a/Lib/idlelib/idle.bat b/Lib/idlelib/idle.bat
old mode 100755
new mode 100644
diff --git a/Lib/idlelib/idle_test/mock_tk.py b/Lib/idlelib/idle_test/mock_tk.py
index 576f7d5..b736bd0 100644
--- a/Lib/idlelib/idle_test/mock_tk.py
+++ b/Lib/idlelib/idle_test/mock_tk.py
@@ -3,6 +3,9 @@
 A gui object is anything with a master or parent parameter, which is
 typically required in spite of what the doc strings say.
 """
+import re
+from _tkinter import TclError
+
 
 class Event:
     '''Minimal mock with attributes for testing event handlers.
@@ -22,6 +25,7 @@
         "Create event with attributes needed for test"
         self.__dict__.update(kwds)
 
+
 class Var:
     "Use for String/Int/BooleanVar: incomplete"
     def __init__(self, master=None, value=None, name=None):
@@ -33,6 +37,7 @@
     def get(self):
         return self.value
 
+
 class Mbox_func:
     """Generic mock for messagebox functions, which all have the same signature.
 
@@ -50,6 +55,7 @@
         self.kwds = kwds
         return self.result  # Set by tester for ask functions
 
+
 class Mbox:
     """Mock for tkinter.messagebox with an Mbox_func for each function.
 
@@ -85,7 +91,6 @@
     showinfo = Mbox_func()     # None
     showwarning = Mbox_func()  # None
 
-from _tkinter import TclError
 
 class Text:
     """A semi-functional non-gui replacement for tkinter.Text text editors.
@@ -154,6 +159,8 @@
         if char.endswith(' lineend') or char == 'end':
             return line, linelength
             # Tk requires that ignored chars before ' lineend' be valid int
+        if m := re.fullmatch(r'end-(\d*)c', char, re.A):  # Used by hyperparser.
+            return line, linelength - int(m.group(1))
 
         # Out of bounds char becomes first or last index of line
         char = int(char)
@@ -177,7 +184,6 @@
             n -= 1
             return n, len(self.data[n]) + endflag
 
-
     def insert(self, index, chars):
         "Insert chars before the character at index."
 
@@ -193,7 +199,6 @@
         self.data[line+1:line+1] = chars[1:]
         self.data[line+len(chars)-1] += after
 
-
     def get(self, index1, index2=None):
         "Return slice from index1 to index2 (default is 'index1+1')."
 
@@ -212,7 +217,6 @@
             lines.append(self.data[endline][:endchar])
             return ''.join(lines)
 
-
     def delete(self, index1, index2=None):
         '''Delete slice from index1 to index2 (default is 'index1+1').
 
@@ -297,6 +301,7 @@
         "Bind to this widget at event sequence a call to function func."
         pass
 
+
 class Entry:
     "Mock for tkinter.Entry."
     def focus_set(self):
diff --git a/Lib/idlelib/idle_test/test_calltip.py b/Lib/idlelib/idle_test/test_calltip.py
index d386b5c..a76829f 100644
--- a/Lib/idlelib/idle_test/test_calltip.py
+++ b/Lib/idlelib/idle_test/test_calltip.py
@@ -1,10 +1,12 @@
-"Test calltip, coverage 60%"
+"Test calltip, coverage 76%"
 
 from idlelib import calltip
 import unittest
+from unittest.mock import Mock
 import textwrap
 import types
 import re
+from idlelib.idle_test.mock_tk import Text
 
 
 # Test Class TC is used in multiple get_argspec test methods
@@ -61,18 +63,16 @@
 
         if List.__doc__ is not None:
             tiptest(List,
-                    f'(iterable=(), /){calltip._argument_positional}'
+                    f'(iterable=(), /)'
                     f'\n{List.__doc__}')
         tiptest(list.__new__,
               '(*args, **kwargs)\n'
               'Create and return a new object.  '
               'See help(type) for accurate signature.')
         tiptest(list.__init__,
-              '(self, /, *args, **kwargs)'
-              + calltip._argument_positional + '\n' +
+              '(self, /, *args, **kwargs)\n'
               'Initialize self.  See help(type(self)) for accurate signature.')
-        append_doc = (calltip._argument_positional
-                      + "\nAppend object to the end of the list.")
+        append_doc = "\nAppend object to the end of the list."
         tiptest(list.append, '(self, object, /)' + append_doc)
         tiptest(List.append, '(self, object, /)' + append_doc)
         tiptest([].append, '(object, /)' + append_doc)
@@ -99,7 +99,12 @@
 (width=70, initial_indent='', subsequent_indent='', expand_tabs=True,
     replace_whitespace=True, fix_sentence_endings=False, break_long_words=True,
     drop_whitespace=True, break_on_hyphens=True, tabsize=8, *, max_lines=None,
-    placeholder=' [...]')''')
+    placeholder=' [...]')
+Object for wrapping/filling text.  The public interface consists of
+the wrap() and fill() methods; the other methods are just there for
+subclasses to override in order to tweak the default behaviour.
+If you want to completely replace the main wrapping algorithm,
+you\'ll probably have to override _wrap_chunks().''')
 
     def test_properly_formated(self):
 
@@ -241,7 +246,7 @@
             __class__ = property({}.__getitem__, {}.__setitem__)
         class Object(metaclass=Type):
             __slots__ = '__class__'
-        for meth, mtip  in ((Type, default_tip), (Object, default_tip),
+        for meth, mtip  in ((Type, get_spec(type)), (Object, default_tip),
                             (Object(), '')):
             with self.subTest(meth=meth, mtip=mtip):
                 self.assertEqual(get_spec(meth), mtip)
@@ -259,5 +264,100 @@
         self.assertIs(calltip.get_entity('int'), int)
 
 
+# Test the 9 Calltip methods.
+# open_calltip is about half the code; the others are fairly trivial.
+# The default mocks are what are needed for open_calltip.
+
+class mock_Shell():
+    "Return mock sufficient to pass to hyperparser."
+    def __init__(self, text):
+        text.tag_prevrange = Mock(return_value=None)
+        self.text = text
+        self.prompt_last_line = ">>> "
+        self.indentwidth = 4
+        self.tabwidth = 8
+
+
+class mock_TipWindow:
+    def __init__(self):
+        pass
+
+    def showtip(self, text, parenleft, parenright):
+        self.args = parenleft, parenright
+        self.parenline, self.parencol = map(int, parenleft.split('.'))
+
+
+class WrappedCalltip(calltip.Calltip):
+    def _make_tk_calltip_window(self):
+        return mock_TipWindow()
+
+    def remove_calltip_window(self, event=None):
+        if self.active_calltip:  # Setup to None.
+            self.active_calltip = None
+            self.tips_removed += 1  # Setup to 0.
+
+    def fetch_tip(self, expression):
+        return 'tip'
+
+
+class CalltipTest(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.text = Text()
+        cls.ct = WrappedCalltip(mock_Shell(cls.text))
+
+    def setUp(self):
+        self.text.delete('1.0', 'end')  # Insert and call
+        self.ct.active_calltip = None
+        # Test .active_calltip, +args
+        self.ct.tips_removed = 0
+
+    def open_close(self, testfunc):
+        # Open-close template with testfunc called in between.
+        opentip = self.ct.open_calltip
+        self.text.insert(1.0, 'f(')
+        opentip(False)
+        self.tip = self.ct.active_calltip
+        testfunc(self)  ###
+        self.text.insert('insert', ')')
+        opentip(False)
+        self.assertIsNone(self.ct.active_calltip, None)
+
+    def test_open_close(self):
+        def args(self):
+            self.assertEqual(self.tip.args, ('1.1', '1.end'))
+        self.open_close(args)
+
+    def test_repeated_force(self):
+        def force(self):
+            for char in 'abc':
+                self.text.insert('insert', 'a')
+                self.ct.open_calltip(True)
+                self.ct.open_calltip(True)
+            self.assertIs(self.ct.active_calltip, self.tip)
+        self.open_close(force)
+
+    def test_repeated_parens(self):
+        def parens(self):
+            for context in "a", "'":
+                with self.subTest(context=context):
+                    self.text.insert('insert', context)
+                    for char in '(()())':
+                        self.text.insert('insert', char)
+                    self.assertIs(self.ct.active_calltip, self.tip)
+            self.text.insert('insert', "'")
+        self.open_close(parens)
+
+    def test_comment_parens(self):
+        def comment(self):
+            self.text.insert('insert', "# ")
+            for char in '(()())':
+                self.text.insert('insert', char)
+            self.assertIs(self.ct.active_calltip, self.tip)
+            self.text.insert('insert', "\n")
+        self.open_close(comment)
+
+
 if __name__ == '__main__':
     unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_run.py b/Lib/idlelib/idle_test/test_run.py
index 9995dbe..37c0d45 100644
--- a/Lib/idlelib/idle_test/test_run.py
+++ b/Lib/idlelib/idle_test/test_run.py
@@ -1,9 +1,10 @@
-"Test run, coverage 42%."
+"Test run, coverage 49%."
 
 from idlelib import run
 import unittest
 from unittest import mock
-from test.support import captured_stderr
+from idlelib.idle_test.mock_idle import Func
+from test.support import captured_output, captured_stderr
 
 import io
 import sys
@@ -282,7 +283,8 @@
         self.assertRaises(TypeError, f.close, 1)
 
 
-class TestSysRecursionLimitWrappers(unittest.TestCase):
+class RecursionLimitTest(unittest.TestCase):
+    # Test (un)install_recursionlimit_wrappers and fixdoc.
 
     def test_bad_setrecursionlimit_calls(self):
         run.install_recursionlimit_wrappers()
@@ -296,12 +298,12 @@
         run.install_recursionlimit_wrappers()
         self.addCleanup(run.uninstall_recursionlimit_wrappers)
 
-        # check that setting the recursion limit works
+        # Check that setting the recursion limit works.
         orig_reclimit = sys.getrecursionlimit()
         self.addCleanup(sys.setrecursionlimit, orig_reclimit)
         sys.setrecursionlimit(orig_reclimit + 3)
 
-        # check that the new limit is returned by sys.getrecursionlimit()
+        # Check that the new limit is returned by sys.getrecursionlimit().
         new_reclimit = sys.getrecursionlimit()
         self.assertEqual(new_reclimit, orig_reclimit + 3)
 
@@ -313,6 +315,7 @@
         self.assertEqual(new_reclimit, orig_reclimit)
 
     def test_fixdoc(self):
+        # Put here until better place for miscellaneous test.
         def func(): "docstring"
         run.fixdoc(func, "more")
         self.assertEqual(func.__doc__, "docstring\n\nmore")
@@ -321,5 +324,32 @@
         self.assertEqual(func.__doc__, "more")
 
 
+class HandleErrorTest(unittest.TestCase):
+    # Method of MyRPCServer
+    def test_fatal_error(self):
+        eq = self.assertEqual
+        with captured_output('__stderr__') as err,\
+             mock.patch('idlelib.run.thread.interrupt_main',
+                        new_callable=Func) as func:
+            try:
+                raise EOFError
+            except EOFError:
+                run.MyRPCServer.handle_error(None, 'abc', '123')
+            eq(run.exit_now, True)
+            run.exit_now = False
+            eq(err.getvalue(), '')
+
+            try:
+                raise IndexError
+            except IndexError:
+                run.MyRPCServer.handle_error(None, 'abc', '123')
+            eq(run.quitting, True)
+            run.quitting = False
+            msg = err.getvalue()
+            self.assertIn('abc', msg)
+            self.assertIn('123', msg)
+            self.assertIn('IndexError', msg)
+            eq(func.called, 2)
+
 if __name__ == '__main__':
     unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py
index aee0c4c..8c9c410 100644
--- a/Lib/idlelib/idle_test/test_searchbase.py
+++ b/Lib/idlelib/idle_test/test_searchbase.py
@@ -76,7 +76,7 @@
     def test_make_entry(self):
         equal = self.assertEqual
         self.dialog.row = 0
-        self.dialog.top = self.root
+        self.dialog.frame = Frame(self.root)
         entry, label = self.dialog.make_entry("Test:", 'hello')
         equal(label['text'], 'Test:')
 
@@ -89,7 +89,7 @@
         equal(self.dialog.row, 1)
 
     def test_create_entries(self):
-        self.dialog.top = self.root
+        self.dialog.frame = Frame(self.root)
         self.dialog.row = 0
         self.engine.setpat('hello')
         self.dialog.create_entries()
@@ -97,7 +97,7 @@
 
     def test_make_frame(self):
         self.dialog.row = 0
-        self.dialog.top = self.root
+        self.dialog.frame = Frame(self.root)
         frame, label = self.dialog.make_frame()
         self.assertEqual(label, '')
         self.assertEqual(str(type(frame)), "<class 'tkinter.ttk.Frame'>")
@@ -108,7 +108,7 @@
         self.assertEqual(label['text'], 'testlabel')
 
     def btn_test_setup(self, meth):
-        self.dialog.top = self.root
+        self.dialog.frame = Frame(self.root)
         self.dialog.row = 0
         return meth()
 
@@ -140,13 +140,13 @@
                     self.assertEqual(var.get(), state)
 
     def test_make_button(self):
-        self.dialog.top = self.root
-        self.dialog.buttonframe = Frame(self.dialog.top)
+        self.dialog.frame = Frame(self.root)
+        self.dialog.buttonframe = Frame(self.dialog.frame)
         btn = self.dialog.make_button('Test', self.dialog.close)
         self.assertEqual(btn['text'], 'Test')
 
     def test_create_command_buttons(self):
-        self.dialog.top = self.root
+        self.dialog.frame = Frame(self.root)
         self.dialog.create_command_buttons()
         # Look for close button command in buttonframe
         closebuttoncommand = ''
diff --git a/Lib/idlelib/idle_test/test_searchengine.py b/Lib/idlelib/idle_test/test_searchengine.py
index 3d26d62..f8401ce 100644
--- a/Lib/idlelib/idle_test/test_searchengine.py
+++ b/Lib/idlelib/idle_test/test_searchengine.py
@@ -175,11 +175,13 @@
 
         engine.setpat('')
         Equal(engine.getprog(), None)
+        Equal(Mbox.showerror.message,
+              'Error: Empty regular expression')
         engine.setpat('+')
         engine.revar.set(1)
         Equal(engine.getprog(), None)
-        self.assertEqual(Mbox.showerror.message,
-                         'Error: nothing to repeat at position 0\nPattern: +')
+        Equal(Mbox.showerror.message,
+              'Error: nothing to repeat\nPattern: +\nOffset: 0')
 
     def test_report_error(self):
         showerror = Mbox.showerror
diff --git a/Lib/idlelib/iomenu.py b/Lib/idlelib/iomenu.py
index 74ebefd..8bb2fa6 100644
--- a/Lib/idlelib/iomenu.py
+++ b/Lib/idlelib/iomenu.py
@@ -155,6 +155,17 @@
                                    parent=self.text)
             return False
 
+        if not isinstance(eol_convention, str):
+            # If the file does not contain line separators, it is None.
+            # If the file contains mixed line separators, it is a tuple.
+            if eol_convention is not None:
+                tkMessageBox.showwarning("Mixed Newlines",
+                                         "Mixed newlines detected.\n"
+                                         "The file will be changed on save.",
+                                         parent=self.text)
+                converted = True
+            eol_convention = os.linesep  # default
+
         self.text.delete("1.0", "end")
         self.set_filename(None)
         self.fileencoding = fileencoding
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 66ae0f7..adc3028 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -757,7 +757,7 @@
     def runcode(self, code):
         "Override base class method"
         if self.tkconsole.executing:
-            self.interp.restart_subprocess()
+            self.restart_subprocess()
         self.checklinecache()
         debugger = self.debugger
         try:
@@ -833,7 +833,7 @@
 
 class PyShell(OutputWindow):
 
-    shell_title = "Python " + python_version() + " Shell"
+    shell_title = "IDLE Shell " + python_version()
 
     # Override classes
     ColorDelegator = ModifiedColorDelegator
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 5bd84aa..1e84ecc 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -387,14 +387,21 @@
             thread.interrupt_main()
         except:
             erf = sys.__stderr__
-            print('\n' + '-'*40, file=erf)
-            print('Unhandled server exception!', file=erf)
-            print('Thread: %s' % threading.current_thread().name, file=erf)
-            print('Client Address: ', client_address, file=erf)
-            print('Request: ', repr(request), file=erf)
-            traceback.print_exc(file=erf)
-            print('\n*** Unrecoverable, server exiting!', file=erf)
-            print('-'*40, file=erf)
+            print(textwrap.dedent(f"""
+            {'-'*40}
+            Unhandled exception in user code execution server!'
+            Thread: {threading.current_thread().name}
+            IDLE Client Address: {client_address}
+            Request: {request!r}
+            """), file=erf)
+            traceback.print_exc(limit=-20, file=erf)
+            print(textwrap.dedent(f"""
+            *** Unrecoverable, server exiting!
+
+            Users should never see this message; it is likely transient.
+            If this recurs, report this with a copy of the message
+            and an explanation of how to make it repeat.
+            {'-'*40}"""), file=erf)
             quitting = True
             thread.interrupt_main()
 
diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py
index a541087..028b0db 100644
--- a/Lib/idlelib/runscript.py
+++ b/Lib/idlelib/runscript.py
@@ -11,6 +11,7 @@
 """
 import os
 import tabnanny
+import time
 import tokenize
 
 import tkinter.messagebox as tkMessageBox
@@ -42,9 +43,7 @@
         self.root = self.editwin.root
         # cli_args is list of strings that extends sys.argv
         self.cli_args = []
-
-        if macosx.isCocoaTk():
-            self.editwin.text_frame.bind('<<run-module-event-2>>', self._run_module_event)
+        self.perf = 0.0    # Workaround for macOS 11 Uni2; see bpo-42508.
 
     def check_module_event(self, event):
         if isinstance(self.editwin, outwin.OutputWindow):
@@ -107,24 +106,10 @@
         finally:
             shell.set_warning_stream(saved_stream)
 
-    def run_module_event(self, event):
-        if macosx.isCocoaTk():
-            # Tk-Cocoa in MacOSX is broken until at least
-            # Tk 8.5.9, and without this rather
-            # crude workaround IDLE would hang when a user
-            # tries to run a module using the keyboard shortcut
-            # (the menu item works fine).
-            self.editwin.text_frame.after(200,
-                lambda: self.editwin.text_frame.event_generate(
-                        '<<run-module-event-2>>'))
-            return 'break'
-        else:
-            return self._run_module_event(event)
-
     def run_custom_event(self, event):
-        return self._run_module_event(event, customize=True)
+        return self.run_module_event(event, customize=True)
 
-    def _run_module_event(self, event, *, customize=False):
+    def run_module_event(self, event, *, customize=False):
         """Run the module after setting up the environment.
 
         First check the syntax.  Next get customization.  If OK, make
@@ -133,6 +118,8 @@
         module being executed and also add that directory to its
         sys.path if not already included.
         """
+        if macosx.isCocoaTk() and (time.perf_counter() - self.perf < .05):
+            return 'break'
         if isinstance(self.editwin, outwin.OutputWindow):
             self.editwin.text.bell()
             return 'break'
@@ -218,6 +205,7 @@
         # XXX This should really be a function of EditorWindow...
         tkMessageBox.showerror(title, message, parent=self.editwin.text)
         self.editwin.text.focus_set()
+        self.perf = time.perf_counter()
 
 
 if __name__ == "__main__":
diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py
index 6fba0b8..fbef87a 100644
--- a/Lib/idlelib/searchbase.py
+++ b/Lib/idlelib/searchbase.py
@@ -33,6 +33,7 @@
         '''Initialize root, engine, and top attributes.
 
         top (level widget): set in create_widgets() called from open().
+        frame: container for all widgets in dialog.
         text (Text searched): set in open(), only used in subclasses().
         ent (ry): created in make_entry() called from create_entry().
         row (of grid): 0 in create_widgets(), +1 in make_entry/frame().
@@ -83,10 +84,14 @@
         top.wm_title(self.title)
         top.wm_iconname(self.icon)
         self.top = top
+        self.frame = Frame(top, padding="5px")
+        self.frame.grid(sticky="nwes")
+        top.grid_columnconfigure(0, weight=100)
+        top.grid_rowconfigure(0, weight=100)
 
         self.row = 0
-        self.top.grid_columnconfigure(0, pad=2, weight=0)
-        self.top.grid_columnconfigure(1, pad=2, minsize=100, weight=100)
+        self.frame.grid_columnconfigure(0, pad=2, weight=0)
+        self.frame.grid_columnconfigure(1, pad=2, minsize=100, weight=100)
 
         self.create_entries()  # row 0 (and maybe 1), cols 0, 1
         self.create_option_buttons()  # next row, cols 0, 1
@@ -99,9 +104,9 @@
         entry - gridded labeled Entry for text entry.
         label - Label widget, returned for testing.
         '''
-        label = Label(self.top, text=label_text)
+        label = Label(self.frame, text=label_text)
         label.grid(row=self.row, column=0, sticky="nw")
-        entry = Entry(self.top, textvariable=var, exportselection=0)
+        entry = Entry(self.frame, textvariable=var, exportselection=0)
         entry.grid(row=self.row, column=1, sticky="nwe")
         self.row = self.row + 1
         return entry, label
@@ -117,11 +122,11 @@
         label - Label widget, returned for testing.
         '''
         if labeltext:
-            label = Label(self.top, text=labeltext)
+            label = Label(self.frame, text=labeltext)
             label.grid(row=self.row, column=0, sticky="nw")
         else:
             label = ''
-        frame = Frame(self.top)
+        frame = Frame(self.frame)
         frame.grid(row=self.row, column=1, columnspan=1, sticky="nwe")
         self.row = self.row + 1
         return frame, label
@@ -171,7 +176,7 @@
 
     def create_command_buttons(self):
         "Place buttons in vertical command frame gridded on right."
-        f = self.buttonframe = Frame(self.top)
+        f = self.buttonframe = Frame(self.frame)
         f.grid(row=0,column=2,padx=2,pady=2,ipadx=2,ipady=2)
 
         b = self.make_button("Close", self.close)
diff --git a/Lib/idlelib/searchengine.py b/Lib/idlelib/searchengine.py
index 911e7d4..a50038e 100644
--- a/Lib/idlelib/searchengine.py
+++ b/Lib/idlelib/searchengine.py
@@ -84,20 +84,17 @@
             flags = flags | re.IGNORECASE
         try:
             prog = re.compile(pat, flags)
-        except re.error as what:
-            args = what.args
-            msg = args[0]
-            col = args[1] if len(args) >= 2 else -1
-            self.report_error(pat, msg, col)
+        except re.error as e:
+            self.report_error(pat, e.msg, e.pos)
             return None
         return prog
 
-    def report_error(self, pat, msg, col=-1):
+    def report_error(self, pat, msg, col=None):
         # Derived class could override this with something fancier
         msg = "Error: " + str(msg)
         if pat:
             msg = msg + "\nPattern: " + str(pat)
-        if col >= 0:
+        if col is not None:
             msg = msg + "\nOffset: " + str(col)
         tkMessageBox.showerror("Regular expression error",
                                msg, master=self.root)
diff --git a/Lib/idlelib/statusbar.py b/Lib/idlelib/statusbar.py
index c071f89..755fafb 100644
--- a/Lib/idlelib/statusbar.py
+++ b/Lib/idlelib/statusbar.py
@@ -1,4 +1,4 @@
-from tkinter import Frame, Label
+from tkinter.ttk import Label, Frame
 
 
 class MultiStatusBar(Frame):
@@ -20,7 +20,8 @@
 
 
 def _multistatus_bar(parent):  # htest #
-    from tkinter import Toplevel, Frame, Text, Button
+    from tkinter import Toplevel, Text
+    from tkinter.ttk import Frame, Button
     top = Toplevel(parent)
     x, y = map(int, parent.geometry().split('+')[1:])
     top.geometry("+%d+%d" %(x, y + 175))
diff --git a/Lib/idlelib/zzdummy.py b/Lib/idlelib/zzdummy.py
index 8084499..3c4b1d2 100644
--- a/Lib/idlelib/zzdummy.py
+++ b/Lib/idlelib/zzdummy.py
@@ -28,7 +28,7 @@
         text = self.text
         text.undo_block_start()
         for line in range(1, text.index('end')):
-            text.insert('%d.0', ztest)
+            text.insert('%d.0', ztext)
         text.undo_block_stop()
         return "break"
 
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index 822d9d6..d9720f2 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -98,6 +98,7 @@
         'THREAD':       ('SELECTED',),
         'UID':          ('SELECTED',),
         'UNSUBSCRIBE':  ('AUTH', 'SELECTED'),
+        'UNSELECT':     ('SELECTED',),
         }
 
 #       Patterns to match server responses
@@ -135,10 +136,13 @@
 
     r"""IMAP4 client class.
 
-    Instantiate with: IMAP4([host[, port]])
+    Instantiate with: IMAP4([host[, port[, timeout=None]]])
 
             host - host's name (default: localhost);
             port - port number (default: standard IMAP4 port).
+            timeout - socket timeout (default: None)
+                      If timeout is not given or is None,
+                      the global default socket timeout is used
 
     All IMAP4rev1 commands are supported by methods of the same
     name (in lower-case).
@@ -181,7 +185,7 @@
     class abort(error): pass        # Service errors - close and retry
     class readonly(abort): pass     # Mailbox status changed to READ-ONLY
 
-    def __init__(self, host='', port=IMAP4_PORT):
+    def __init__(self, host='', port=IMAP4_PORT, timeout=None):
         self.debug = Debug
         self.state = 'LOGOUT'
         self.literal = None             # A literal argument to a command
@@ -195,7 +199,7 @@
 
         # Open socket to server.
 
-        self.open(host, port)
+        self.open(host, port, timeout)
 
         try:
             self._connect()
@@ -284,15 +288,20 @@
     #       Overridable methods
 
 
-    def _create_socket(self):
+    def _create_socket(self, timeout):
         # Default value of IMAP4.host is '', but socket.getaddrinfo()
         # (which is used by socket.create_connection()) expects None
         # as a default value for host.
+        if timeout is not None and not timeout:
+            raise ValueError('Non-blocking socket (timeout=0) is not supported')
         host = None if not self.host else self.host
         sys.audit("imaplib.open", self, self.host, self.port)
-        return socket.create_connection((host, self.port))
+        address = (host, self.port)
+        if timeout is not None:
+            return socket.create_connection(address, timeout)
+        return socket.create_connection(address)
 
-    def open(self, host = '', port = IMAP4_PORT):
+    def open(self, host='', port=IMAP4_PORT, timeout=None):
         """Setup connection to remote server on "host:port"
             (default: localhost:standard IMAP4 port).
         This connection will be used by the routines:
@@ -300,7 +309,7 @@
         """
         self.host = host
         self.port = port
-        self.sock = self._create_socket()
+        self.sock = self._create_socket(timeout)
         self.file = self.sock.makefile('rb')
 
 
@@ -502,7 +511,7 @@
     def enable(self, capability):
         """Send an RFC5161 enable string to the server.
 
-        (typ, [data]) = <intance>.enable(capability)
+        (typ, [data]) = <instance>.enable(capability)
         """
         if 'ENABLE' not in self.capabilities:
             raise IMAP4.error("Server does not support ENABLE")
@@ -894,6 +903,22 @@
         return self._simple_command('UNSUBSCRIBE', mailbox)
 
 
+    def unselect(self):
+        """Free server's resources associated with the selected mailbox
+        and returns the server to the authenticated state.
+        This command performs the same actions as CLOSE, except
+        that no messages are permanently removed from the currently
+        selected mailbox.
+
+        (typ, [data]) = <instance>.unselect()
+        """
+        try:
+            typ, data = self._simple_command('UNSELECT')
+        finally:
+            self.state = 'AUTH'
+        return typ, data
+
+
     def xatom(self, name, *args):
         """Allow simple extension commands
                 notified by server in CAPABILITY response.
@@ -1261,7 +1286,7 @@
 
         """IMAP4 client class over SSL connection
 
-        Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile[, ssl_context]]]]])
+        Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile[, ssl_context[, timeout=None]]]]]])
 
                 host - host's name (default: localhost);
                 port - port number (default: standard IMAP4 SSL port);
@@ -1271,13 +1296,15 @@
                               and private key (default: None)
                 Note: if ssl_context is provided, then parameters keyfile or
                 certfile should not be set otherwise ValueError is raised.
+                timeout - socket timeout (default: None) If timeout is not given or is None,
+                          the global default socket timeout is used
 
         for more documentation see the docstring of the parent class IMAP4.
         """
 
 
         def __init__(self, host='', port=IMAP4_SSL_PORT, keyfile=None,
-                     certfile=None, ssl_context=None):
+                     certfile=None, ssl_context=None, timeout=None):
             if ssl_context is not None and keyfile is not None:
                 raise ValueError("ssl_context and keyfile arguments are mutually "
                                  "exclusive")
@@ -1294,20 +1321,20 @@
                 ssl_context = ssl._create_stdlib_context(certfile=certfile,
                                                          keyfile=keyfile)
             self.ssl_context = ssl_context
-            IMAP4.__init__(self, host, port)
+            IMAP4.__init__(self, host, port, timeout)
 
-        def _create_socket(self):
-            sock = IMAP4._create_socket(self)
+        def _create_socket(self, timeout):
+            sock = IMAP4._create_socket(self, timeout)
             return self.ssl_context.wrap_socket(sock,
                                                 server_hostname=self.host)
 
-        def open(self, host='', port=IMAP4_SSL_PORT):
+        def open(self, host='', port=IMAP4_SSL_PORT, timeout=None):
             """Setup connection to remote server on "host:port".
                 (default: localhost:standard IMAP4 SSL port).
             This connection will be used by the routines:
                 read, readline, send, shutdown.
             """
-            IMAP4.open(self, host, port)
+            IMAP4.open(self, host, port, timeout)
 
     __all__.append("IMAP4_SSL")
 
@@ -1329,7 +1356,7 @@
         IMAP4.__init__(self)
 
 
-    def open(self, host = None, port = None):
+    def open(self, host=None, port=None, timeout=None):
         """Setup a stream connection.
         This connection will be used by the routines:
             read, readline, send, shutdown.
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 32deef1..e00b27e 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -67,6 +67,7 @@
         # Deadlock avoidance for concurrent circular imports.
         me = _thread.get_ident()
         tid = self.owner
+        seen = set()
         while True:
             lock = _blocking_on.get(tid)
             if lock is None:
@@ -74,6 +75,14 @@
             tid = lock.owner
             if tid == me:
                 return True
+            if tid in seen:
+                # bpo 38091: the chain of tid's we encounter here
+                # eventually leads to a fixpoint or a cycle, but
+                # does not reach 'me'.  This means we would not
+                # actually deadlock.  This can happen if other
+                # threads are at the beginning of acquire() below.
+                return False
+            seen.add(tid)
 
     def acquire(self):
         """
@@ -371,7 +380,7 @@
                     self.cached == other.cached and
                     self.has_location == other.has_location)
         except AttributeError:
-            return False
+            return NotImplemented
 
     @property
     def cached(self):
@@ -713,6 +722,8 @@
 
     """
 
+    _ORIGIN = "built-in"
+
     @staticmethod
     def module_repr(module):
         """Return repr for the module.
@@ -720,14 +731,14 @@
         The method is deprecated.  The import machinery does the job itself.
 
         """
-        return '<module {!r} (built-in)>'.format(module.__name__)
+        return f'<module {module.__name__!r} ({BuiltinImporter._ORIGIN})>'
 
     @classmethod
     def find_spec(cls, fullname, path=None, target=None):
         if path is not None:
             return None
         if _imp.is_builtin(fullname):
-            return spec_from_loader(fullname, cls, origin='built-in')
+            return spec_from_loader(fullname, cls, origin=cls._ORIGIN)
         else:
             return None
 
@@ -873,7 +884,7 @@
     """Resolve a relative module name to an absolute one."""
     bits = package.rsplit('.', level - 1)
     if len(bits) < level:
-        raise ValueError('attempted relative import beyond top-level package')
+        raise ImportError('attempted relative import beyond top-level package')
     base = bits[0]
     return '{}.{}'.format(base, name) if name else base
 
@@ -976,7 +987,12 @@
     if parent:
         # Set the module as an attribute on its parent.
         parent_module = sys.modules[parent]
-        setattr(parent_module, name.rpartition('.')[2], module)
+        child = name.rpartition('.')[2]
+        try:
+            setattr(parent_module, child, module)
+        except AttributeError:
+            msg = f"Cannot set an attribute on {parent!r} for child module {child!r}"
+            _warnings.warn(msg, ImportWarning)
     return module
 
 
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
index b8ac482..25a3f8c 100644
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -34,8 +34,8 @@
             key = b'PYTHONCASEOK'
 
         def _relax_case():
-            """True if filenames must be checked case-insensitively."""
-            return key in _os.environ
+            """True if filenames must be checked case-insensitively and ignore environment flags are not set."""
+            return not sys.flags.ignore_environment and key in _os.environ
     else:
         def _relax_case():
             """True if filenames must be checked case-insensitively."""
@@ -271,6 +271,13 @@
 #     Python 3.8b2  3412 (Swap the position of positional args and positional
 #                         only args in ast.arguments #37593)
 #     Python 3.8b4  3413 (Fix "break" and "continue" in "finally" #37830)
+#     Python 3.9a0  3420 (add LOAD_ASSERTION_ERROR #34880)
+#     Python 3.9a0  3421 (simplified bytecode for with blocks #32949)
+#     Python 3.9a0  3422 (remove BEGIN_FINALLY, END_FINALLY, CALL_FINALLY, POP_FINALLY bytecodes #33387)
+#     Python 3.9a2  3423 (add IS_OP, CONTAINS_OP and JUMP_IF_NOT_EXC_MATCH bytecodes #39156)
+#     Python 3.9a2  3424 (simplify bytecodes for *value unpacking)
+#     Python 3.9a2  3425 (simplify bytecodes for **value unpacking)
+
 #
 # MAGIC must change whenever the bytecode emitted by the compiler may no
 # longer be understood by older implementations of the eval loop (usually
@@ -279,7 +286,7 @@
 # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
 # in PC/launcher.c must also be updated.
 
-MAGIC_NUMBER = (3413).to_bytes(2, 'little') + b'\r\n'
+MAGIC_NUMBER = (3425).to_bytes(2, 'little') + b'\r\n'
 _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little')  # For import.c
 
 _PYCACHE = '__pycache__'
@@ -709,9 +716,9 @@
     @classmethod
     def _open_registry(cls, key):
         try:
-            return _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, key)
+            return winreg.OpenKey(winreg.HKEY_CURRENT_USER, key)
         except OSError:
-            return _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, key)
+            return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key)
 
     @classmethod
     def _search_registry(cls, fullname):
@@ -723,7 +730,7 @@
                                   sys_version='%d.%d' % sys.version_info[:2])
         try:
             with cls._open_registry(key) as hkey:
-                filepath = _winreg.QueryValue(hkey, '')
+                filepath = winreg.QueryValue(hkey, '')
         except OSError:
             return None
         return filepath
@@ -1577,14 +1584,7 @@
     sys = _bootstrap.sys
     _imp = _bootstrap._imp
 
-    # Directly load built-in modules needed during bootstrap.
     self_module = sys.modules[__name__]
-    for builtin_name in ('_io', '_warnings', 'builtins', 'marshal'):
-        if builtin_name not in sys.modules:
-            builtin_module = _bootstrap._builtin_from_name(builtin_name)
-        else:
-            builtin_module = sys.modules[builtin_name]
-        setattr(self_module, builtin_name, builtin_module)
 
     # Directly load the os module (needed during bootstrap).
     os_details = ('posix', ['/']), ('nt', ['\\', '/'])
@@ -1603,23 +1603,22 @@
                 continue
     else:
         raise ImportError('importlib requires posix or nt')
+
     setattr(self_module, '_os', os_module)
     setattr(self_module, 'path_sep', path_sep)
     setattr(self_module, 'path_separators', ''.join(path_separators))
     setattr(self_module, '_pathseps_with_colon', {f':{s}' for s in path_separators})
 
-    # Directly load the _thread module (needed during bootstrap).
-    thread_module = _bootstrap._builtin_from_name('_thread')
-    setattr(self_module, '_thread', thread_module)
-
-    # Directly load the _weakref module (needed during bootstrap).
-    weakref_module = _bootstrap._builtin_from_name('_weakref')
-    setattr(self_module, '_weakref', weakref_module)
-
-    # Directly load the winreg module (needed during bootstrap).
+    # Directly load built-in modules needed during bootstrap.
+    builtin_names = ['_io', '_warnings', 'marshal']
     if builtin_os == 'nt':
-        winreg_module = _bootstrap._builtin_from_name('winreg')
-        setattr(self_module, '_winreg', winreg_module)
+        builtin_names.append('winreg')
+    for builtin_name in builtin_names:
+        if builtin_name not in sys.modules:
+            builtin_module = _bootstrap._builtin_from_name(builtin_name)
+        else:
+            builtin_module = sys.modules[builtin_name]
+        setattr(self_module, builtin_name, builtin_module)
 
     # Constants
     setattr(self_module, '_relax_case', _make_relax_case())
diff --git a/Lib/importlib/_common.py b/Lib/importlib/_common.py
new file mode 100644
index 0000000..c1204f0
--- /dev/null
+++ b/Lib/importlib/_common.py
@@ -0,0 +1,62 @@
+import os
+import pathlib
+import zipfile
+import tempfile
+import functools
+import contextlib
+
+
+def from_package(package):
+    """
+    Return a Traversable object for the given package.
+
+    """
+    return fallback_resources(package.__spec__)
+
+
+def fallback_resources(spec):
+    package_directory = pathlib.Path(spec.origin).parent
+    try:
+        archive_path = spec.loader.archive
+        rel_path = package_directory.relative_to(archive_path)
+        return zipfile.Path(archive_path, str(rel_path) + '/')
+    except Exception:
+        pass
+    return package_directory
+
+
+@contextlib.contextmanager
+def _tempfile(reader, suffix=''):
+    # Not using tempfile.NamedTemporaryFile as it leads to deeper 'try'
+    # blocks due to the need to close the temporary file to work on Windows
+    # properly.
+    fd, raw_path = tempfile.mkstemp(suffix=suffix)
+    try:
+        os.write(fd, reader())
+        os.close(fd)
+        yield pathlib.Path(raw_path)
+    finally:
+        try:
+            os.remove(raw_path)
+        except FileNotFoundError:
+            pass
+
+
+@functools.singledispatch
+@contextlib.contextmanager
+def as_file(path):
+    """
+    Given a Traversable object, return that object as a
+    path on the local file system in a context manager.
+    """
+    with _tempfile(path.read_bytes, suffix=path.name) as local:
+        yield local
+
+
+@as_file.register(pathlib.Path)
+@contextlib.contextmanager
+def _(path):
+    """
+    Degenerate behavior for pathlib.Path objects.
+    """
+    yield path
diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py
index 4b2d3de..b8a9bb1 100644
--- a/Lib/importlib/abc.py
+++ b/Lib/importlib/abc.py
@@ -10,10 +10,11 @@
     _frozen_importlib = None
 try:
     import _frozen_importlib_external
-except ImportError as exc:
+except ImportError:
     _frozen_importlib_external = _bootstrap_external
 import abc
 import warnings
+from typing import Protocol, runtime_checkable
 
 
 def _register(abstract_cls, *classes):
@@ -386,3 +387,88 @@
 
 
 _register(ResourceReader, machinery.SourceFileLoader)
+
+
+@runtime_checkable
+class Traversable(Protocol):
+    """
+    An object with a subset of pathlib.Path methods suitable for
+    traversing directories and opening files.
+    """
+
+    @abc.abstractmethod
+    def iterdir(self):
+        """
+        Yield Traversable objects in self
+        """
+
+    @abc.abstractmethod
+    def read_bytes(self):
+        """
+        Read contents of self as bytes
+        """
+
+    @abc.abstractmethod
+    def read_text(self, encoding=None):
+        """
+        Read contents of self as bytes
+        """
+
+    @abc.abstractmethod
+    def is_dir(self):
+        """
+        Return True if self is a dir
+        """
+
+    @abc.abstractmethod
+    def is_file(self):
+        """
+        Return True if self is a file
+        """
+
+    @abc.abstractmethod
+    def joinpath(self, child):
+        """
+        Return Traversable child in self
+        """
+
+    @abc.abstractmethod
+    def __truediv__(self, child):
+        """
+        Return Traversable child in self
+        """
+
+    @abc.abstractmethod
+    def open(self, mode='r', *args, **kwargs):
+        """
+        mode may be 'r' or 'rb' to open as text or binary. Return a handle
+        suitable for reading (same as pathlib.Path.open).
+
+        When opening as text, accepts encoding parameters such as those
+        accepted by io.TextIOWrapper.
+        """
+
+    @abc.abstractproperty
+    def name(self):
+        # type: () -> str
+        """
+        The base name of this object without any parent references.
+        """
+
+
+class TraversableResources(ResourceReader):
+    @abc.abstractmethod
+    def files(self):
+        """Return a Traversable object for the loaded package."""
+
+    def open_resource(self, resource):
+        return self.files().joinpath(resource).open('rb')
+
+    def resource_path(self, resource):
+        raise FileNotFoundError(resource)
+
+    def is_resource(self, path):
+        return self.files().joinpath(path).isfile()
+
+    def contents(self):
+        return (item.name for item in self.files().iterdir())
diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata.py
index 831f593..ffa0cba 100644
--- a/Lib/importlib/metadata.py
+++ b/Lib/importlib/metadata.py
@@ -79,6 +79,16 @@
         return functools.reduce(getattr, attrs, module)
 
     @property
+    def module(self):
+        match = self.pattern.match(self.value)
+        return match.group('module')
+
+    @property
+    def attr(self):
+        match = self.pattern.match(self.value)
+        return match.group('attr')
+
+    @property
     def extras(self):
         match = self.pattern.match(self.value)
         return list(re.finditer(r'\w+', match.group('extras') or ''))
@@ -170,7 +180,7 @@
         """
         for resolver in cls._discover_resolvers():
             dists = resolver(DistributionFinder.Context(name=name))
-            dist = next(dists, None)
+            dist = next(iter(dists), None)
             if dist is not None:
                 return dist
         else:
@@ -213,6 +223,17 @@
             )
         return filter(None, declared)
 
+    @classmethod
+    def _local(cls, root='.'):
+        from pep517 import build, meta
+        system = build.compat_system(root)
+        builder = functools.partial(
+            meta.build,
+            source_dir=root,
+            system=system,
+            )
+        return PathDistribution(zipfile.Path(meta.build_as_zip(builder)))
+
     @property
     def metadata(self):
         """Return the parsed metadata for this Distribution.
@@ -391,7 +412,7 @@
 
     def __init__(self, root):
         self.root = root
-        self.base = os.path.basename(root).lower()
+        self.base = os.path.basename(self.root).lower()
 
     def joinpath(self, child):
         return pathlib.Path(self.root, child)
@@ -408,8 +429,8 @@
         names = zip_path.root.namelist()
         self.joinpath = zip_path.joinpath
 
-        return (
-            posixpath.split(child)[0]
+        return dict.fromkeys(
+            child.split(posixpath.sep, 1)[0]
             for child in names
             )
 
@@ -475,7 +496,6 @@
             )
 
 
-
 class PathDistribution(Distribution):
     def __init__(self, path):
         """Construct a distribution from a path to the metadata directory.
diff --git a/Lib/importlib/resources.py b/Lib/importlib/resources.py
index fc3a1c9..b803a01 100644
--- a/Lib/importlib/resources.py
+++ b/Lib/importlib/resources.py
@@ -1,23 +1,25 @@
 import os
-import tempfile
 
 from . import abc as resources_abc
+from . import _common
+from ._common import as_file
 from contextlib import contextmanager, suppress
 from importlib import import_module
 from importlib.abc import ResourceLoader
 from io import BytesIO, TextIOWrapper
 from pathlib import Path
 from types import ModuleType
-from typing import Iterable, Iterator, Optional, Set, Union   # noqa: F401
+from typing import ContextManager, Iterable, Optional, Union
 from typing import cast
 from typing.io import BinaryIO, TextIO
-from zipimport import ZipImportError
 
 
 __all__ = [
     'Package',
     'Resource',
+    'as_file',
     'contents',
+    'files',
     'is_resource',
     'open_binary',
     'open_text',
@@ -31,24 +33,23 @@
 Resource = Union[str, os.PathLike]
 
 
+def _resolve(name) -> ModuleType:
+    """If name is a string, resolve to a module."""
+    if hasattr(name, '__spec__'):
+        return name
+    return import_module(name)
+
+
 def _get_package(package) -> ModuleType:
     """Take a package name or module object and return the module.
 
-    If a name, the module is imported.  If the passed or imported module
+    If a name, the module is imported.  If the resolved module
     object is not a package, raise an exception.
     """
-    if hasattr(package, '__spec__'):
-        if package.__spec__.submodule_search_locations is None:
-            raise TypeError('{!r} is not a package'.format(
-                package.__spec__.name))
-        else:
-            return package
-    else:
-        module = import_module(package)
-        if module.__spec__.submodule_search_locations is None:
-            raise TypeError('{!r} is not a package'.format(package))
-        else:
-            return module
+    module = _resolve(package)
+    if module.__spec__.submodule_search_locations is None:
+        raise TypeError('{!r} is not a package'.format(package))
+    return module
 
 
 def _normalize_path(path) -> str:
@@ -59,8 +60,7 @@
     parent, file_name = os.path.split(path)
     if parent:
         raise ValueError('{!r} must be only a file name'.format(path))
-    else:
-        return file_name
+    return file_name
 
 
 def _get_resource_reader(
@@ -89,8 +89,8 @@
     reader = _get_resource_reader(package)
     if reader is not None:
         return reader.open_resource(resource)
-    _check_location(package)
-    absolute_package_path = os.path.abspath(package.__spec__.origin)
+    absolute_package_path = os.path.abspath(
+        package.__spec__.origin or 'non-existent file')
     package_path = os.path.dirname(absolute_package_path)
     full_path = os.path.join(package_path, resource)
     try:
@@ -109,8 +109,7 @@
             message = '{!r} resource not found in {!r}'.format(
                 resource, package_name)
             raise FileNotFoundError(message)
-        else:
-            return BytesIO(data)
+        return BytesIO(data)
 
 
 def open_text(package: Package,
@@ -118,39 +117,12 @@
               encoding: str = 'utf-8',
               errors: str = 'strict') -> TextIO:
     """Return a file-like object opened for text reading of the resource."""
-    resource = _normalize_path(resource)
-    package = _get_package(package)
-    reader = _get_resource_reader(package)
-    if reader is not None:
-        return TextIOWrapper(reader.open_resource(resource), encoding, errors)
-    _check_location(package)
-    absolute_package_path = os.path.abspath(package.__spec__.origin)
-    package_path = os.path.dirname(absolute_package_path)
-    full_path = os.path.join(package_path, resource)
-    try:
-        return open(full_path, mode='r', encoding=encoding, errors=errors)
-    except OSError:
-        # Just assume the loader is a resource loader; all the relevant
-        # importlib.machinery loaders are and an AttributeError for
-        # get_data() will make it clear what is needed from the loader.
-        loader = cast(ResourceLoader, package.__spec__.loader)
-        data = None
-        if hasattr(package.__spec__.loader, 'get_data'):
-            with suppress(OSError):
-                data = loader.get_data(full_path)
-        if data is None:
-            package_name = package.__spec__.name
-            message = '{!r} resource not found in {!r}'.format(
-                resource, package_name)
-            raise FileNotFoundError(message)
-        else:
-            return TextIOWrapper(BytesIO(data), encoding, errors)
+    return TextIOWrapper(
+        open_binary(package, resource), encoding=encoding, errors=errors)
 
 
 def read_binary(package: Package, resource: Resource) -> bytes:
     """Return the binary contents of the resource."""
-    resource = _normalize_path(resource)
-    package = _get_package(package)
     with open_binary(package, resource) as fp:
         return fp.read()
 
@@ -164,14 +136,20 @@
     The decoding-related arguments have the same semantics as those of
     bytes.decode().
     """
-    resource = _normalize_path(resource)
-    package = _get_package(package)
     with open_text(package, resource, encoding, errors) as fp:
         return fp.read()
 
 
-@contextmanager
-def path(package: Package, resource: Resource) -> Iterator[Path]:
+def files(package: Package) -> resources_abc.Traversable:
+    """
+    Get a Traversable resource from a package
+    """
+    return _common.from_package(_get_package(package))
+
+
+def path(
+        package: Package, resource: Resource,
+        ) -> 'ContextManager[Path]':
     """A context manager providing a file path object to the resource.
 
     If the resource does not already exist on its own on the file system,
@@ -180,39 +158,23 @@
     raised if the file was deleted prior to the context manager
     exiting).
     """
-    resource = _normalize_path(resource)
-    package = _get_package(package)
-    reader = _get_resource_reader(package)
-    if reader is not None:
-        try:
-            yield Path(reader.resource_path(resource))
-            return
-        except FileNotFoundError:
-            pass
-    else:
-        _check_location(package)
-    # Fall-through for both the lack of resource_path() *and* if
-    # resource_path() raises FileNotFoundError.
-    package_directory = Path(package.__spec__.origin).parent
-    file_path = package_directory / resource
-    if file_path.exists():
-        yield file_path
-    else:
-        with open_binary(package, resource) as fp:
-            data = fp.read()
-        # Not using tempfile.NamedTemporaryFile as it leads to deeper 'try'
-        # blocks due to the need to close the temporary file to work on
-        # Windows properly.
-        fd, raw_path = tempfile.mkstemp()
-        try:
-            os.write(fd, data)
-            os.close(fd)
-            yield Path(raw_path)
-        finally:
-            try:
-                os.remove(raw_path)
-            except FileNotFoundError:
-                pass
+    reader = _get_resource_reader(_get_package(package))
+    return (
+        _path_from_reader(reader, resource)
+        if reader else
+        _common.as_file(files(package).joinpath(_normalize_path(resource)))
+        )
+
+
+@contextmanager
+def _path_from_reader(reader, resource):
+    norm_resource = _normalize_path(resource)
+    with suppress(FileNotFoundError):
+        yield Path(reader.resource_path(norm_resource))
+        return
+    opener_reader = reader.open_resource(norm_resource)
+    with _common._tempfile(opener_reader.read, suffix=norm_resource) as res:
+        yield res
 
 
 def is_resource(package: Package, name: str) -> bool:
@@ -225,17 +187,10 @@
     reader = _get_resource_reader(package)
     if reader is not None:
         return reader.is_resource(name)
-    try:
-        package_contents = set(contents(package))
-    except (NotADirectoryError, FileNotFoundError):
-        return False
+    package_contents = set(contents(package))
     if name not in package_contents:
         return False
-    # Just because the given file_name lives as an entry in the package's
-    # contents doesn't necessarily mean it's a resource.  Directories are not
-    # resources, so let's try to find out if it's a directory or not.
-    path = Path(package.__spec__.origin).parent / name
-    return path.is_file()
+    return (_common.from_package(package) / name).is_file()
 
 
 def contents(package: Package) -> Iterable[str]:
@@ -250,10 +205,11 @@
     if reader is not None:
         return reader.contents()
     # Is the package a namespace package?  By definition, namespace packages
-    # cannot have resources.  We could use _check_location() and catch the
-    # exception, but that's extra work, so just inline the check.
-    elif package.__spec__.origin is None or not package.__spec__.has_location:
+    # cannot have resources.
+    namespace = (
+        package.__spec__.origin is None or
+        package.__spec__.origin == 'namespace'
+        )
+    if namespace or not package.__spec__.has_location:
         return ()
-    else:
-        package_directory = Path(package.__spec__.origin).parent
-        return os.listdir(package_directory)
+    return list(item.name for item in _common.from_package(package).iterdir())
diff --git a/Lib/importlib/util.py b/Lib/importlib/util.py
index 201e0f4..269a6fa 100644
--- a/Lib/importlib/util.py
+++ b/Lib/importlib/util.py
@@ -29,8 +29,8 @@
     if not name.startswith('.'):
         return name
     elif not package:
-        raise ValueError(f'no package specified for {repr(name)} '
-                         '(required for relative module names)')
+        raise ImportError(f'no package specified for {repr(name)} '
+                          '(required for relative module names)')
     level = 0
     for character in name:
         if character != '.':
diff --git a/Lib/inspect.py b/Lib/inspect.py
index e8ea8c2..18bed90 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -32,6 +32,7 @@
               'Yury Selivanov <yselivanov@sprymix.com>')
 
 import abc
+import ast
 import dis
 import collections.abc
 import enum
@@ -769,6 +770,42 @@
         if builtinobject is object:
             return builtin
 
+
+class ClassFoundException(Exception):
+    pass
+
+
+class _ClassFinder(ast.NodeVisitor):
+
+    def __init__(self, qualname):
+        self.stack = []
+        self.qualname = qualname
+
+    def visit_FunctionDef(self, node):
+        self.stack.append(node.name)
+        self.stack.append('<locals>')
+        self.generic_visit(node)
+        self.stack.pop()
+        self.stack.pop()
+
+    visit_AsyncFunctionDef = visit_FunctionDef
+
+    def visit_ClassDef(self, node):
+        self.stack.append(node.name)
+        if self.qualname == '.'.join(self.stack):
+            # Return the decorator for the class if present
+            if node.decorator_list:
+                line_number = node.decorator_list[0].lineno
+            else:
+                line_number = node.lineno
+
+            # decrement by one since lines starts with indexing by zero
+            line_number -= 1
+            raise ClassFoundException(line_number)
+        self.generic_visit(node)
+        self.stack.pop()
+
+
 def findsource(object):
     """Return the entire source file and starting line number for an object.
 
@@ -801,25 +838,15 @@
         return lines, 0
 
     if isclass(object):
-        name = object.__name__
-        pat = re.compile(r'^(\s*)class\s*' + name + r'\b')
-        # make some effort to find the best matching class definition:
-        # use the one with the least indentation, which is the one
-        # that's most probably not inside a function definition.
-        candidates = []
-        for i in range(len(lines)):
-            match = pat.match(lines[i])
-            if match:
-                # if it's at toplevel, it's already the best one
-                if lines[i][0] == 'c':
-                    return lines, i
-                # else add whitespace to candidate list
-                candidates.append((match.group(1), i))
-        if candidates:
-            # this will sort by whitespace, and by line number,
-            # less whitespace first
-            candidates.sort()
-            return lines, candidates[0][1]
+        qualname = object.__qualname__
+        source = ''.join(lines)
+        tree = ast.parse(source)
+        class_finder = _ClassFinder(qualname)
+        try:
+            class_finder.visit(tree)
+        except ClassFoundException as e:
+            line_number = e.args[0]
+            return lines, line_number
         else:
             raise OSError('could not find class definition')
 
@@ -837,7 +864,12 @@
         lnum = object.co_firstlineno - 1
         pat = re.compile(r'^(\s*def\s)|(\s*async\s+def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)')
         while lnum > 0:
-            if pat.match(lines[lnum]): break
+            try:
+                line = lines[lnum]
+            except IndexError:
+                raise OSError('lineno is out of bounds')
+            if pat.match(line):
+                break
             lnum = lnum - 1
         return lines, lnum
     raise OSError('could not find code object')
@@ -899,6 +931,7 @@
         self.indecorator = False
         self.decoratorhasargs = False
         self.last = 1
+        self.body_col0 = None
 
     def tokeneater(self, type, token, srowcol, erowcol, line):
         if not self.started and not self.indecorator:
@@ -930,6 +963,8 @@
         elif self.passline:
             pass
         elif type == tokenize.INDENT:
+            if self.body_col0 is None and self.started:
+                self.body_col0 = erowcol[1]
             self.indent = self.indent + 1
             self.passline = True
         elif type == tokenize.DEDENT:
@@ -939,6 +974,10 @@
             #  not e.g. for "if: else:" or "try: finally:" blocks)
             if self.indent <= 0:
                 raise EndOfBlock
+        elif type == tokenize.COMMENT:
+            if self.body_col0 is not None and srowcol[1] >= self.body_col0:
+                # Include comments if indented at least as much as the block
+                self.last = srowcol[0]
         elif self.indent == 0 and type not in (tokenize.COMMENT, tokenize.NL):
             # any other token on the same indentation level end the previous
             # block as well, except the pseudo-tokens COMMENT and NL.
@@ -1136,7 +1175,6 @@
     varkw = None
     posonlyargs = []
     kwonlyargs = []
-    defaults = ()
     annotations = {}
     defaults = ()
     kwdefaults = {}
@@ -2603,7 +2641,7 @@
 
     Has the following public attributes:
 
-    * arguments : OrderedDict
+    * arguments : dict
         An ordered mutable mapping of parameters' names to arguments' values.
         Does not contain arguments' default values.
     * signature : Signature
@@ -2703,7 +2741,7 @@
                     # Signature.bind_partial().
                     continue
                 new_arguments.append((name, val))
-        self.arguments = OrderedDict(new_arguments)
+        self.arguments = dict(new_arguments)
 
     def __eq__(self, other):
         if self is other:
@@ -2771,7 +2809,7 @@
                 top_kind = _POSITIONAL_ONLY
                 kind_defaults = False
 
-                for idx, param in enumerate(parameters):
+                for param in parameters:
                     kind = param.kind
                     name = param.name
 
@@ -2806,8 +2844,7 @@
 
                     params[name] = param
             else:
-                params = OrderedDict(((param.name, param)
-                                                for param in parameters))
+                params = OrderedDict((param.name, param) for param in parameters)
 
         self._parameters = types.MappingProxyType(params)
         self._return_annotation = return_annotation
@@ -2889,7 +2926,7 @@
     def _bind(self, args, kwargs, *, partial=False):
         """Private method. Don't use directly."""
 
-        arguments = OrderedDict()
+        arguments = {}
 
         parameters = iter(self.parameters.values())
         parameters_ex = ()
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index a3a04f7..bc662c4 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -560,6 +560,8 @@
         return self.__class__, (str(self),)
 
 
+_address_fmt_re = None
+
 @functools.total_ordering
 class _BaseAddress(_IPAddressBase):
 
@@ -618,6 +620,55 @@
     def __reduce__(self):
         return self.__class__, (self._ip,)
 
+    def __format__(self, fmt):
+        """Returns an IP address as a formatted string.
+
+        Supported presentation types are:
+        's': returns the IP address as a string (default)
+        'b': converts to binary and returns a zero-padded string
+        'X' or 'x': converts to upper- or lower-case hex and returns a zero-padded string
+        'n': the same as 'b' for IPv4 and 'x' for IPv6
+
+        For binary and hex presentation types, the alternate form specifier
+        '#' and the grouping option '_' are supported.
+        """
+
+        # Support string formatting
+        if not fmt or fmt[-1] == 's':
+            return format(str(self), fmt)
+
+        # From here on down, support for 'bnXx'
+        global _address_fmt_re
+        if _address_fmt_re is None:
+            import re
+            _address_fmt_re = re.compile('(#?)(_?)([xbnX])')
+
+        m = _address_fmt_re.fullmatch(fmt)
+        if not m:
+            return super().__format__(fmt)
+
+        alternate, grouping, fmt_base = m.groups()
+
+        # Set some defaults
+        if fmt_base == 'n':
+            if self._version == 4:
+                fmt_base = 'b'  # Binary is default for ipv4
+            else:
+                fmt_base = 'x'  # Hex is default for ipv6
+
+        if fmt_base == 'b':
+            padlen = self._max_prefixlen
+        else:
+            padlen = self._max_prefixlen // 4
+
+        if grouping:
+            padlen += padlen // 4 - 1
+
+        if alternate:
+            padlen += 2  # 0b or 0x
+
+        return format(int(self), f'{alternate}0{padlen}{grouping}{fmt_base}')
+
 
 @functools.total_ordering
 class _BaseNetwork(_IPAddressBase):
@@ -1073,7 +1124,6 @@
         return (self.network_address.is_loopback and
                 self.broadcast_address.is_loopback)
 
-
 class _BaseV4:
 
     """Base IPv4 object.
@@ -1347,7 +1397,7 @@
 
     def __eq__(self, other):
         address_equal = IPv4Address.__eq__(self, other)
-        if not address_equal or address_equal is NotImplemented:
+        if address_equal is NotImplemented or not address_equal:
             return address_equal
         try:
             return self.network == other.network
@@ -1416,7 +1466,7 @@
             address: A string or integer representing the IP [& network].
               '192.0.2.0/24'
               '192.0.2.0/255.255.255.0'
-              '192.0.0.2/0.0.0.255'
+              '192.0.2.0/0.0.0.255'
               are all functionally the same in IPv4. Similarly,
               '192.0.2.1'
               '192.0.2.1/255.255.255.255'
@@ -1458,6 +1508,8 @@
 
         if self._prefixlen == (self._max_prefixlen - 1):
             self.hosts = self.__iter__
+        elif self._prefixlen == (self._max_prefixlen):
+            self.hosts = lambda: [IPv4Address(addr)]
 
     @property
     @functools.lru_cache()
@@ -1785,6 +1837,26 @@
         reverse_chars = self.exploded[::-1].replace(':', '')
         return '.'.join(reverse_chars) + '.ip6.arpa'
 
+    @staticmethod
+    def _split_scope_id(ip_str):
+        """Helper function to parse IPv6 string address with scope id.
+
+        See RFC 4007 for details.
+
+        Args:
+            ip_str: A string, the IPv6 address.
+
+        Returns:
+            (addr, scope_id) tuple.
+
+        """
+        addr, sep, scope_id = ip_str.partition('%')
+        if not sep:
+            scope_id = None
+        elif not scope_id or '%' in scope_id:
+            raise AddressValueError('Invalid IPv6 address: "%r"' % ip_str)
+        return addr, scope_id
+
     @property
     def max_prefixlen(self):
         return self._max_prefixlen
@@ -1798,7 +1870,7 @@
 
     """Represent and manipulate single IPv6 Addresses."""
 
-    __slots__ = ('_ip', '__weakref__')
+    __slots__ = ('_ip', '_scope_id', '__weakref__')
 
     def __init__(self, address):
         """Instantiate a new IPv6 address object.
@@ -1821,12 +1893,14 @@
         if isinstance(address, int):
             self._check_int_address(address)
             self._ip = address
+            self._scope_id = None
             return
 
         # Constructing from a packed address
         if isinstance(address, bytes):
             self._check_packed_address(address, 16)
             self._ip = int.from_bytes(address, 'big')
+            self._scope_id = None
             return
 
         # Assume input argument to be string or any object representation
@@ -1834,8 +1908,37 @@
         addr_str = str(address)
         if '/' in addr_str:
             raise AddressValueError("Unexpected '/' in %r" % address)
+        addr_str, self._scope_id = self._split_scope_id(addr_str)
+
         self._ip = self._ip_int_from_string(addr_str)
 
+    def __str__(self):
+        ip_str = super().__str__()
+        return ip_str + '%' + self._scope_id if self._scope_id else ip_str
+
+    def __hash__(self):
+        return hash((self._ip, self._scope_id))
+
+    def __eq__(self, other):
+        address_equal = super().__eq__(other)
+        if address_equal is NotImplemented:
+            return NotImplemented
+        if not address_equal:
+            return False
+        return self._scope_id == getattr(other, '_scope_id', None)
+
+    @property
+    def scope_id(self):
+        """Identifier of a particular zone of the address's scope.
+
+        See RFC 4007 for details.
+
+        Returns:
+            A string identifying the zone of the address if specified, else None.
+
+        """
+        return self._scope_id
+
     @property
     def packed(self):
         """The binary representation of this address."""
@@ -1989,12 +2092,12 @@
         return self.network.hostmask
 
     def __str__(self):
-        return '%s/%d' % (self._string_from_ip_int(self._ip),
+        return '%s/%d' % (super().__str__(),
                           self._prefixlen)
 
     def __eq__(self, other):
         address_equal = IPv6Address.__eq__(self, other)
-        if not address_equal or address_equal is NotImplemented:
+        if address_equal is NotImplemented or not address_equal:
             return address_equal
         try:
             return self.network == other.network
@@ -2007,7 +2110,7 @@
     def __lt__(self, other):
         address_less = IPv6Address.__lt__(self, other)
         if address_less is NotImplemented:
-            return NotImplemented
+            return address_less
         try:
             return (self.network < other.network or
                     self.network == other.network and address_less)
@@ -2110,6 +2213,8 @@
 
         if self._prefixlen == (self._max_prefixlen - 1):
             self.hosts = self.__iter__
+        elif self._prefixlen == self._max_prefixlen:
+            self.hosts = lambda: [IPv6Address(addr)]
 
     def hosts(self):
         """Generate Iterator over usable hosts in a network.
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 1ba8b48..2c52bde 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -329,8 +329,6 @@
 
     To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
     kwarg; otherwise ``JSONDecoder`` is used.
-
-    The ``encoding`` argument is ignored and deprecated since Python 3.1.
     """
     if isinstance(s, str):
         if s.startswith('\ufeff'):
@@ -342,15 +340,6 @@
                             f'not {s.__class__.__name__}')
         s = s.decode(detect_encoding(s), 'surrogatepass')
 
-    if "encoding" in kw:
-        import warnings
-        warnings.warn(
-            "'encoding' is ignored and deprecated. It will be removed in Python 3.9",
-            DeprecationWarning,
-            stacklevel=2
-        )
-        del kw['encoding']
-
     if (cls is None and object_hook is None and
             parse_int is None and parse_float is None and
             parse_constant is None and object_pairs_hook is None and not kw):
diff --git a/Lib/json/tool.py b/Lib/json/tool.py
index c42138a..5dee0a7 100644
--- a/Lib/json/tool.py
+++ b/Lib/json/tool.py
@@ -30,22 +30,42 @@
                         default=sys.stdout)
     parser.add_argument('--sort-keys', action='store_true', default=False,
                         help='sort the output of dictionaries alphabetically by key')
+    parser.add_argument('--no-ensure-ascii', dest='ensure_ascii', action='store_false',
+                        help='disable escaping of non-ASCII characters')
     parser.add_argument('--json-lines', action='store_true', default=False,
-                        help='parse input using the jsonlines format')
+                        help='parse input using the JSON Lines format. '
+                        'Use with --no-indent or --compact to produce valid JSON Lines output.')
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument('--indent', default=4, type=int,
+                       help='separate items with newlines and use this number '
+                       'of spaces for indentation')
+    group.add_argument('--tab', action='store_const', dest='indent',
+                       const='\t', help='separate items with newlines and use '
+                       'tabs for indentation')
+    group.add_argument('--no-indent', action='store_const', dest='indent',
+                       const=None,
+                       help='separate items with spaces rather than newlines')
+    group.add_argument('--compact', action='store_true',
+                       help='suppress all whitespace separation (most compact)')
     options = parser.parse_args()
 
-    infile = options.infile
-    outfile = options.outfile
-    sort_keys = options.sort_keys
-    json_lines = options.json_lines
-    with infile, outfile:
+    dump_args = {
+        'sort_keys': options.sort_keys,
+        'indent': options.indent,
+        'ensure_ascii': options.ensure_ascii,
+    }
+    if options.compact:
+        dump_args['indent'] = None
+        dump_args['separators'] = ',', ':'
+
+    with options.infile as infile, options.outfile as outfile:
         try:
-            if json_lines:
+            if options.json_lines:
                 objs = (json.loads(line) for line in infile)
             else:
                 objs = (json.load(infile), )
             for obj in objs:
-                json.dump(obj, outfile, sort_keys=sort_keys, indent=4)
+                json.dump(obj, outfile, **dump_args)
                 outfile.write('\n')
         except ValueError as e:
             raise SystemExit(e)
diff --git a/Lib/keyword.py b/Lib/keyword.py
index ddcbb25..59fcfb0 100644
--- a/Lib/keyword.py
+++ b/Lib/keyword.py
@@ -1,23 +1,25 @@
-"""Keywords (from "Grammar/Grammar")
+"""Keywords (from "Grammar/python.gram")
 
 This file is automatically generated; please don't muck it up!
 
 To update the symbols in this file, 'cd' to the top directory of
 the python source tree and run:
 
-    python3 -m Parser.pgen.keywordgen Grammar/Grammar \
-                                      Grammar/Tokens \
-                                      Lib/keyword.py
+    PYTHONPATH=Tools/peg_generator python3 -m pegen.keywordgen \
+        Grammar/Grammar \
+        Grammar/Tokens \
+        Lib/keyword.py
 
 Alternatively, you can run 'make regen-keyword'.
 """
 
-__all__ = ["iskeyword", "kwlist"]
+__all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"]
 
 kwlist = [
     'False',
     'None',
     'True',
+    '__peg_parser__',
     'and',
     'as',
     'assert',
@@ -52,4 +54,9 @@
     'yield'
 ]
 
+softkwlist = [
+
+]
+
 iskeyword = frozenset(kwlist).__contains__
+issoftkeyword = frozenset(softkwlist).__contains__
diff --git a/Lib/lib2to3/Grammar.txt b/Lib/lib2to3/Grammar.txt
index 8ce7fd8..e007dc1 100644
--- a/Lib/lib2to3/Grammar.txt
+++ b/Lib/lib2to3/Grammar.txt
@@ -49,7 +49,7 @@
 flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
 break_stmt: 'break'
 continue_stmt: 'continue'
-return_stmt: 'return' [testlist]
+return_stmt: 'return' [testlist_star_expr]
 yield_stmt: yield_expr
 raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]]
 import_stmt: import_name | import_from
@@ -153,4 +153,4 @@
 encoding_decl: NAME
 
 yield_expr: 'yield' [yield_arg]
-yield_arg: 'from' test | testlist
+yield_arg: 'from' test | testlist_star_expr
diff --git a/Lib/lib2to3/__init__.py b/Lib/lib2to3/__init__.py
index ea30561..4224dff 100644
--- a/Lib/lib2to3/__init__.py
+++ b/Lib/lib2to3/__init__.py
@@ -1 +1,8 @@
-#empty
+import warnings
+
+
+warnings.warn(
+    "lib2to3 package is deprecated and may not be able to parse Python 3.10+",
+    PendingDeprecationWarning,
+    stacklevel=2,
+)
diff --git a/Lib/lib2to3/fixer_util.py b/Lib/lib2to3/fixer_util.py
index babe6cb..c2a3a47 100644
--- a/Lib/lib2to3/fixer_util.py
+++ b/Lib/lib2to3/fixer_util.py
@@ -412,7 +412,7 @@
     return None
 
 def _is_import_binding(node, name, package=None):
-    """ Will reuturn node if node will import name, or node
+    """ Will return node if node will import name, or node
         will import * from package.  None is returned otherwise.
         See test cases for examples. """
 
diff --git a/Lib/lib2to3/fixes/fix_urllib.py b/Lib/lib2to3/fixes/fix_urllib.py
index 5a36049..ab892bc 100644
--- a/Lib/lib2to3/fixes/fix_urllib.py
+++ b/Lib/lib2to3/fixes/fix_urllib.py
@@ -13,7 +13,7 @@
                 ("urllib.request",
                     ["URLopener", "FancyURLopener", "urlretrieve",
                      "_urlopener", "urlopen", "urlcleanup",
-                     "pathname2url", "url2pathname"]),
+                     "pathname2url", "url2pathname", "getproxies"]),
                 ("urllib.parse",
                     ["quote", "quote_plus", "unquote", "unquote_plus",
                      "urlencode", "splitattr", "splithost", "splitnport",
diff --git a/Lib/lib2to3/main.py b/Lib/lib2to3/main.py
index d6b7088..f2849fd 100644
--- a/Lib/lib2to3/main.py
+++ b/Lib/lib2to3/main.py
@@ -90,11 +90,11 @@
             if os.path.lexists(backup):
                 try:
                     os.remove(backup)
-                except OSError as err:
+                except OSError:
                     self.log_message("Can't remove backup %s", backup)
             try:
                 os.rename(filename, backup)
-            except OSError as err:
+            except OSError:
                 self.log_message("Can't rename %s to %s", filename, backup)
         # Actually write the new file
         write = super(StdoutRefactoringTool, self).write_file
@@ -154,6 +154,8 @@
                       help="List available transformations")
     parser.add_option("-p", "--print-function", action="store_true",
                       help="Modify the grammar so that print() is a function")
+    parser.add_option("-e", "--exec-function", action="store_true",
+                      help="Modify the grammar so that exec() is a function")
     parser.add_option("-v", "--verbose", action="store_true",
                       help="More verbose logging")
     parser.add_option("--no-diffs", action="store_true",
@@ -211,6 +213,9 @@
     if options.print_function:
         flags["print_function"] = True
 
+    if options.exec_function:
+        flags["exec_function"] = True
+
     # Set up logging handler
     level = logging.DEBUG if options.verbose else logging.INFO
     logging.basicConfig(format='%(name)s: %(message)s', level=level)
diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py
index 55fd60f..3a5aaff 100644
--- a/Lib/lib2to3/refactor.py
+++ b/Lib/lib2to3/refactor.py
@@ -155,6 +155,7 @@
 class RefactoringTool(object):
 
     _default_options = {"print_function" : False,
+                        "exec_function": False,
                         "write_unchanged_files" : False}
 
     CLASS_PREFIX = "Fix" # The prefix for fixer classes
@@ -173,10 +174,13 @@
         self.options = self._default_options.copy()
         if options is not None:
             self.options.update(options)
-        if self.options["print_function"]:
-            self.grammar = pygram.python_grammar_no_print_statement
-        else:
-            self.grammar = pygram.python_grammar
+        self.grammar = pygram.python_grammar.copy()
+
+        if self.options['print_function']:
+            del self.grammar.keywords["print"]
+        elif self.options['exec_function']:
+            del self.grammar.keywords["exec"]
+
         # When this is True, the refactor*() methods will call write_file() for
         # files processed even if they were not changed during refactoring. If
         # and only if the refactor method's write parameter was True.
diff --git a/Lib/lib2to3/tests/data/py3_test_grammar.py b/Lib/lib2to3/tests/data/py3_test_grammar.py
index e0b6828..d062232 100644
--- a/Lib/lib2to3/tests/data/py3_test_grammar.py
+++ b/Lib/lib2to3/tests/data/py3_test_grammar.py
@@ -473,15 +473,27 @@
         test_inner()
 
     def testReturn(self):
-        # 'return' [testlist]
+        # 'return' [testlist_star_expr]
         def g1(): return
         def g2(): return 1
+        return_list = [2, 3]
+        def g3(): return 1, *return_list
         g1()
         x = g2()
+        x3 = g3()
         check_syntax_error(self, "class foo:return 1")
 
     def testYield(self):
+        # 'yield' [yield_arg]
+        def g1(): yield 1
+        yield_list = [2, 3]
+        def g2(): yield 1, *yield_list
+        def g3(): yield from iter(yield_list)
+        x1 = g1()
+        x2 = g2()
+        x3 = g3()
         check_syntax_error(self, "class foo:yield 1")
+        check_syntax_error(self, "def g4(): yield from *a")
 
     def testRaise(self):
         # 'raise' test [',' test]
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index a285241..121ebe6 100644
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -1913,7 +1913,11 @@
 """
         self.check(b, a)
 
+    def test_single_import(self):
+        b = "from urllib import getproxies"
+        a = "from urllib.request import getproxies"
 
+        self.check(b, a)
 
     def test_import_module_usage(self):
         for old, changes in self.modules.items():
diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py
index 3a0e7f4..ba2bb78 100644
--- a/Lib/lib2to3/tests/test_parser.py
+++ b/Lib/lib2to3/tests/test_parser.py
@@ -538,7 +538,7 @@
 
 # Adapted from Python 3's Lib/test/test_unicode_identifiers.py and
 # Lib/test/test_tokenize.py:TokenizeTest.test_non_ascii_identifiers
-class TestIdentfier(GrammarTest):
+class TestIdentifier(GrammarTest):
     def test_non_ascii_identifiers(self):
         self.validate("Örter = 'places'\ngrün = 'green'")
         self.validate("蟒 = a蟒 = 锦蛇 = 1")
diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py
index 9e3b8fb..be70567 100644
--- a/Lib/lib2to3/tests/test_refactor.py
+++ b/Lib/lib2to3/tests/test_refactor.py
@@ -44,9 +44,13 @@
 
     def test_print_function_option(self):
         rt = self.rt({"print_function" : True})
-        self.assertIs(rt.grammar, pygram.python_grammar_no_print_statement)
-        self.assertIs(rt.driver.grammar,
-                      pygram.python_grammar_no_print_statement)
+        self.assertNotIn("print", rt.grammar.keywords)
+        self.assertNotIn("print", rt.driver.grammar.keywords)
+
+    def test_exec_function_option(self):
+        rt = self.rt({"exec_function" : True})
+        self.assertNotIn("exec", rt.grammar.keywords)
+        self.assertNotIn("exec", rt.driver.grammar.keywords)
 
     def test_write_unchanged_files_option(self):
         rt = self.rt()
diff --git a/Lib/linecache.py b/Lib/linecache.py
index c87e180..fa5dbd0 100644
--- a/Lib/linecache.py
+++ b/Lib/linecache.py
@@ -10,17 +10,8 @@
 import os
 import tokenize
 
-__all__ = ["getline", "clearcache", "checkcache"]
+__all__ = ["getline", "clearcache", "checkcache", "lazycache"]
 
-def getline(filename, lineno, module_globals=None):
-    lines = getlines(filename, module_globals)
-    if 1 <= lineno <= len(lines):
-        return lines[lineno-1]
-    else:
-        return ''
-
-
-# The cache
 
 # The cache. Maps filenames to either a thunk which will provide source code,
 # or a tuple (size, mtime, lines, fullname) once loaded.
@@ -29,9 +20,17 @@
 
 def clearcache():
     """Clear the cache entirely."""
+    cache.clear()
 
-    global cache
-    cache = {}
+
+def getline(filename, lineno, module_globals=None):
+    """Get a line for a Python source file from the cache.
+    Update the cache if it doesn't contain an entry for this file already."""
+
+    lines = getlines(filename, module_globals)
+    if 1 <= lineno <= len(lines):
+        return lines[lineno - 1]
+    return ''
 
 
 def getlines(filename, module_globals=None):
@@ -56,11 +55,10 @@
 
     if filename is None:
         filenames = list(cache.keys())
+    elif filename in cache:
+        filenames = [filename]
     else:
-        if filename in cache:
-            filenames = [filename]
-        else:
-            return
+        return
 
     for filename in filenames:
         entry = cache[filename]
@@ -109,8 +107,10 @@
                     # for this module.
                     return []
                 cache[filename] = (
-                    len(data), None,
-                    [line+'\n' for line in data.splitlines()], fullname
+                    len(data),
+                    None,
+                    [line + '\n' for line in data.splitlines()],
+                    fullname
                 )
                 return cache[filename][2]
 
diff --git a/Lib/locale.py b/Lib/locale.py
index dd8a085..1a4e9f6 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -279,6 +279,8 @@
         if precedes:
             s = smb + (separated and ' ' or '') + s
         else:
+            if international and smb[-1] == ' ':
+                smb = smb[:-1]
             s = s + (separated and ' ' or '') + smb
 
     sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn']
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 0cfaec8..7b169a1 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2017 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2019 by Vinay Sajip. All Rights Reserved.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation for any purpose and without fee is hereby granted,
@@ -18,7 +18,7 @@
 Logging package for Python. Based on PEP 282 and comments thereto in
 comp.lang.python.
 
-Copyright (C) 2001-2017 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2019 Vinay Sajip. All Rights Reserved.
 
 To use, simply 'import logging' and log away!
 """
@@ -234,11 +234,9 @@
     def _register_at_fork_reinit_lock(instance):
         pass  # no-op when os.register_at_fork does not exist.
 else:
-    # A collection of instances with a createLock method (logging.Handler)
+    # A collection of instances with a _at_fork_reinit method (logging.Handler)
     # to be called in the child after forking.  The weakref avoids us keeping
-    # discarded Handler instances alive.  A set is used to avoid accumulating
-    # duplicate registrations as createLock() is responsible for registering
-    # a new Handler instance with this set in the first place.
+    # discarded Handler instances alive.
     _at_fork_reinit_lock_weakset = weakref.WeakSet()
 
     def _register_at_fork_reinit_lock(instance):
@@ -249,16 +247,12 @@
             _releaseLock()
 
     def _after_at_fork_child_reinit_locks():
-        # _acquireLock() was called in the parent before forking.
         for handler in _at_fork_reinit_lock_weakset:
-            try:
-                handler.createLock()
-            except Exception as err:
-                # Similar to what PyErr_WriteUnraisable does.
-                print("Ignoring exception from logging atfork", instance,
-                      "._reinit_lock() method:", err, file=sys.stderr)
-        _releaseLock()  # Acquired by os.register_at_fork(before=.
+            handler._at_fork_reinit()
 
+        # _acquireLock() was called in the parent before forking.
+        # The lock is reinitialized to unlocked state.
+        _lock._at_fork_reinit()
 
     os.register_at_fork(before=_acquireLock,
                         after_in_child=_after_at_fork_child_reinit_locks,
@@ -515,7 +509,7 @@
     responsible for converting a LogRecord to (usually) a string which can
     be interpreted by either a human or an external system. The base Formatter
     allows a formatting string to be specified. If none is supplied, the
-    the style-dependent default value, "%(message)s", "{message}", or
+    style-dependent default value, "%(message)s", "{message}", or
     "${message}", is used.
 
     The Formatter can be initialized with a format string which makes use of
@@ -603,8 +597,9 @@
         if datefmt:
             s = time.strftime(datefmt, ct)
         else:
-            t = time.strftime(self.default_time_format, ct)
-            s = self.default_msec_format % (t, record.msecs)
+            s = time.strftime(self.default_time_format, ct)
+            if self.default_msec_format:
+                s = self.default_msec_format % (s, record.msecs)
         return s
 
     def formatException(self, ei):
@@ -753,8 +748,8 @@
         """
         Determine if the specified record is to be logged.
 
-        Is the specified record to be logged? Returns 0 for no, nonzero for
-        yes. If deemed appropriate, the record may be modified in-place.
+        Returns True if the record should be logged, or False otherwise.
+        If deemed appropriate, the record may be modified in-place.
         """
         if self.nlen == 0:
             return True
@@ -891,6 +886,9 @@
         self.lock = threading.RLock()
         _register_at_fork_reinit_lock(self)
 
+    def _at_fork_reinit(self):
+        self.lock._at_fork_reinit()
+
     def acquire(self):
         """
         Acquire the I/O thread lock.
@@ -1122,7 +1120,7 @@
     """
     A handler class which writes formatted logging records to disk files.
     """
-    def __init__(self, filename, mode='a', encoding=None, delay=False):
+    def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None):
         """
         Open the specified file and use it as the stream for logging.
         """
@@ -1133,6 +1131,7 @@
         self.baseFilename = os.path.abspath(filename)
         self.mode = mode
         self.encoding = encoding
+        self.errors = errors
         self.delay = delay
         if delay:
             #We don't open the stream, but we still need to call the
@@ -1169,7 +1168,8 @@
         Open the current base file with the (original) mode and encoding.
         Return the resulting stream.
         """
-        return open(self.baseFilename, self.mode, encoding=self.encoding)
+        return open(self.baseFilename, self.mode, encoding=self.encoding,
+                    errors=self.errors)
 
     def emit(self, record):
         """
@@ -1931,15 +1931,20 @@
               attached to the root logger are removed and closed, before
               carrying out the configuration as specified by the other
               arguments.
+    encoding  If specified together with a filename, this encoding is passed to
+              the created FileHandler, causing it to be used when the file is
+              opened.
+    errors    If specified together with a filename, this value is passed to the
+              created FileHandler, causing it to be used when the file is
+              opened in text mode. If not specified, the default value is
+              `backslashreplace`.
+
     Note that you could specify a stream created using open(filename, mode)
     rather than passing the filename and mode in. However, it should be
     remembered that StreamHandler does not close its stream (since it may be
     using sys.stdout or sys.stderr), whereas FileHandler closes its stream
     when the handler is closed.
 
-    .. versionchanged:: 3.8
-       Added the ``force`` parameter.
-
     .. versionchanged:: 3.2
        Added the ``style`` parameter.
 
@@ -1949,12 +1954,20 @@
        ``filename``/``filemode``, or ``filename``/``filemode`` specified
        together with ``stream``, or ``handlers`` specified together with
        ``stream``.
+
+    .. versionchanged:: 3.8
+       Added the ``force`` parameter.
+
+    .. versionchanged:: 3.9
+       Added the ``encoding`` and ``errors`` parameters.
     """
     # Add thread safety in case someone mistakenly calls
     # basicConfig() from multiple threads
     _acquireLock()
     try:
         force = kwargs.pop('force', False)
+        encoding = kwargs.pop('encoding', None)
+        errors = kwargs.pop('errors', 'backslashreplace')
         if force:
             for h in root.handlers[:]:
                 root.removeHandler(h)
@@ -1973,7 +1986,10 @@
                 filename = kwargs.pop("filename", None)
                 mode = kwargs.pop("filemode", 'a')
                 if filename:
-                    h = FileHandler(filename, mode)
+                    if 'b'in mode:
+                        errors = None
+                    h = FileHandler(filename, mode,
+                                    encoding=encoding, errors=errors)
                 else:
                     stream = kwargs.pop("stream", None)
                     h = StreamHandler(stream)
@@ -2009,10 +2025,9 @@
 
     If no name is specified, return the root logger.
     """
-    if name:
-        return Logger.manager.getLogger(name)
-    else:
+    if not name or isinstance(name, str) and name == root.name:
         return root
+    return Logger.manager.getLogger(name)
 
 def critical(msg, *args, **kwargs):
     """
@@ -2151,6 +2166,9 @@
     def createLock(self):
         self.lock = None
 
+    def _at_fork_reinit(self):
+        pass
+
 # Warnings integration
 
 _warnings_showwarning = None
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 3cd5fea..fd3aded 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -143,6 +143,7 @@
         kwargs = section.get("kwargs", '{}')
         kwargs = eval(kwargs, vars(logging))
         h = klass(*args, **kwargs)
+        h.name = hand
         if "level" in section:
             level = section["level"]
             h.setLevel(level)
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 34ff7a0..867ef4e 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -48,15 +48,19 @@
     Not meant to be instantiated directly.  Instead, use RotatingFileHandler
     or TimedRotatingFileHandler.
     """
-    def __init__(self, filename, mode, encoding=None, delay=False):
+    namer = None
+    rotator = None
+
+    def __init__(self, filename, mode, encoding=None, delay=False, errors=None):
         """
         Use the specified filename for streamed logging
         """
-        logging.FileHandler.__init__(self, filename, mode, encoding, delay)
+        logging.FileHandler.__init__(self, filename, mode=mode,
+                                     encoding=encoding, delay=delay,
+                                     errors=errors)
         self.mode = mode
         self.encoding = encoding
-        self.namer = None
-        self.rotator = None
+        self.errors = errors
 
     def emit(self, record):
         """
@@ -117,7 +121,8 @@
     Handler for logging to a set of files, which switches from one file
     to the next when the current file reaches a certain size.
     """
-    def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False):
+    def __init__(self, filename, mode='a', maxBytes=0, backupCount=0,
+                 encoding=None, delay=False, errors=None):
         """
         Open the specified file and use it as the stream for logging.
 
@@ -145,7 +150,8 @@
         # on each run.
         if maxBytes > 0:
             mode = 'a'
-        BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
+        BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding,
+                                     delay=delay, errors=errors)
         self.maxBytes = maxBytes
         self.backupCount = backupCount
 
@@ -196,8 +202,11 @@
     If backupCount is > 0, when rollover is done, no more than backupCount
     files are kept - the oldest ones are deleted.
     """
-    def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None):
-        BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
+    def __init__(self, filename, when='h', interval=1, backupCount=0,
+                 encoding=None, delay=False, utc=False, atTime=None,
+                 errors=None):
+        BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding,
+                                     delay=delay, errors=errors)
         self.when = when.upper()
         self.backupCount = backupCount
         self.utc = utc
@@ -431,8 +440,11 @@
     This handler is based on a suggestion and patch by Chad J.
     Schroeder.
     """
-    def __init__(self, filename, mode='a', encoding=None, delay=False):
-        logging.FileHandler.__init__(self, filename, mode, encoding, delay)
+    def __init__(self, filename, mode='a', encoding=None, delay=False,
+                 errors=None):
+        logging.FileHandler.__init__(self, filename, mode=mode,
+                                     encoding=encoding, delay=delay,
+                                     errors=errors)
         self.dev, self.ino = -1, -1
         self._statstream()
 
@@ -730,6 +742,10 @@
     LOG_CRON      = 9       #  clock daemon
     LOG_AUTHPRIV  = 10      #  security/authorization messages (private)
     LOG_FTP       = 11      #  FTP daemon
+    LOG_NTP       = 12      #  NTP subsystem
+    LOG_SECURITY  = 13      #  Log audit
+    LOG_CONSOLE   = 14      #  Log alert
+    LOG_SOLCRON   = 15      #  Scheduling daemon (Solaris)
 
     #  other codes through 15 reserved for system use
     LOG_LOCAL0    = 16      #  reserved for local use
@@ -757,27 +773,30 @@
         }
 
     facility_names = {
-        "auth":     LOG_AUTH,
-        "authpriv": LOG_AUTHPRIV,
-        "cron":     LOG_CRON,
-        "daemon":   LOG_DAEMON,
-        "ftp":      LOG_FTP,
-        "kern":     LOG_KERN,
-        "lpr":      LOG_LPR,
-        "mail":     LOG_MAIL,
-        "news":     LOG_NEWS,
-        "security": LOG_AUTH,       #  DEPRECATED
-        "syslog":   LOG_SYSLOG,
-        "user":     LOG_USER,
-        "uucp":     LOG_UUCP,
-        "local0":   LOG_LOCAL0,
-        "local1":   LOG_LOCAL1,
-        "local2":   LOG_LOCAL2,
-        "local3":   LOG_LOCAL3,
-        "local4":   LOG_LOCAL4,
-        "local5":   LOG_LOCAL5,
-        "local6":   LOG_LOCAL6,
-        "local7":   LOG_LOCAL7,
+        "auth":         LOG_AUTH,
+        "authpriv":     LOG_AUTHPRIV,
+        "console":      LOG_CONSOLE,
+        "cron":         LOG_CRON,
+        "daemon":       LOG_DAEMON,
+        "ftp":          LOG_FTP,
+        "kern":         LOG_KERN,
+        "lpr":          LOG_LPR,
+        "mail":         LOG_MAIL,
+        "news":         LOG_NEWS,
+        "ntp":          LOG_NTP,
+        "security":     LOG_SECURITY,
+        "solaris-cron": LOG_SOLCRON,
+        "syslog":       LOG_SYSLOG,
+        "user":         LOG_USER,
+        "uucp":         LOG_UUCP,
+        "local0":       LOG_LOCAL0,
+        "local1":       LOG_LOCAL1,
+        "local2":       LOG_LOCAL2,
+        "local3":       LOG_LOCAL3,
+        "local4":       LOG_LOCAL4,
+        "local5":       LOG_LOCAL5,
+        "local6":       LOG_LOCAL6,
+        "local7":       LOG_LOCAL7,
         }
 
     #The map below appears to be trivially lowercasing the key. However,
@@ -1154,6 +1173,20 @@
         """
         return record.__dict__
 
+    def getConnection(self, host, secure):
+        """
+        get a HTTP[S]Connection.
+
+        Override when a custom connection is required, for example if
+        there is a proxy.
+        """
+        import http.client
+        if secure:
+            connection = http.client.HTTPSConnection(host, context=self.context)
+        else:
+            connection = http.client.HTTPConnection(host)
+        return connection
+
     def emit(self, record):
         """
         Emit a record.
@@ -1161,12 +1194,9 @@
         Send the record to the Web server as a percent-encoded dictionary
         """
         try:
-            import http.client, urllib.parse
+            import urllib.parse
             host = self.host
-            if self.secure:
-                h = http.client.HTTPSConnection(host, context=self.context)
-            else:
-                h = http.client.HTTPConnection(host)
+            h = self.getConnection(host, self.secure)
             url = self.url
             data = urllib.parse.urlencode(self.mapLogRecord(record))
             if self.method == "GET":
@@ -1242,7 +1272,7 @@
         """
         self.acquire()
         try:
-            self.buffer = []
+            self.buffer.clear()
         finally:
             self.release()
 
@@ -1294,7 +1324,11 @@
         """
         Set the target handler for this handler.
         """
-        self.target = target
+        self.acquire()
+        try:
+            self.target = target
+        finally:
+            self.release()
 
     def flush(self):
         """
@@ -1309,7 +1343,7 @@
             if self.target:
                 for record in self.buffer:
                     self.target.handle(record)
-                self.buffer = []
+                self.buffer.clear()
         finally:
             self.release()
 
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index 5b4e864..70da07e 100644
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -18,6 +18,7 @@
 import email.generator
 import io
 import contextlib
+from types import GenericAlias
 try:
     import fcntl
 except ImportError:
@@ -260,6 +261,8 @@
         else:
             raise TypeError('Invalid message type: %s' % type(message))
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class Maildir(Mailbox):
     """A qmail-style Maildir mailbox."""
@@ -2015,6 +2018,8 @@
             return False
         return self._file.closed
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 class _PartialFile(_ProxyFile):
     """A read-only wrapper of part of a file."""
diff --git a/Lib/mailcap.py b/Lib/mailcap.py
index bd0fc09..ae416a8 100644
--- a/Lib/mailcap.py
+++ b/Lib/mailcap.py
@@ -251,6 +251,7 @@
         else:
             print("Executing:", command)
             sts = os.system(command)
+            sts = os.waitstatus_to_exitcode(sts)
             if sts:
                 print("Exit status:", sts)
 
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 954bb0a..92c2a47 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -401,6 +401,7 @@
         '.Z': 'compress',
         '.bz2': 'bzip2',
         '.xz': 'xz',
+        '.br': 'br',
         }
 
     # Before adding new types, make sure they are either registered with IANA,
@@ -447,7 +448,6 @@
         '.dvi'    : 'application/x-dvi',
         '.gtar'   : 'application/x-gtar',
         '.hdf'    : 'application/x-hdf',
-        '.h5'     : 'application/x-hdf5',
         '.latex'  : 'application/x-latex',
         '.mif'    : 'application/x-mif',
         '.cdf'    : 'application/x-netcdf',
diff --git a/Lib/modulefinder.py b/Lib/modulefinder.py
index aadcd23..cb455f4 100644
--- a/Lib/modulefinder.py
+++ b/Lib/modulefinder.py
@@ -7,8 +7,6 @@
 import os
 import io
 import sys
-import types
-import warnings
 
 
 LOAD_CONST = dis.opmap['LOAD_CONST']
diff --git a/Lib/msilib/__init__.py b/Lib/msilib/__init__.py
index 0bc8dd9..0e85aa2 100644
--- a/Lib/msilib/__init__.py
+++ b/Lib/msilib/__init__.py
@@ -116,7 +116,7 @@
                 raise TypeError("Unsupported type %s" % field.__class__.__name__)
         try:
             v.Modify(MSIMODIFY_INSERT, r)
-        except Exception as e:
+        except Exception:
             raise MSIError("Could not insert "+repr(values)+" into "+table)
 
         r.ClearData()
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py
index 8e2facf..510e4b5 100644
--- a/Lib/multiprocessing/connection.py
+++ b/Lib/multiprocessing/connection.py
@@ -73,6 +73,11 @@
     if family == 'AF_INET':
         return ('localhost', 0)
     elif family == 'AF_UNIX':
+        # Prefer abstract sockets if possible to avoid problems with the address
+        # size.  When coding portable applications, some implementations have
+        # sun_path as short as 92 bytes in the sockaddr_un struct.
+        if util.abstract_sockets_supported:
+            return f"\0listener-{os.getpid()}-{next(_mmap_counter)}"
         return tempfile.mktemp(prefix='listener-', dir=util.get_temp_dir())
     elif family == 'AF_PIPE':
         return tempfile.mktemp(prefix=r'\\.\pipe\pyc-%d-%d-' %
diff --git a/Lib/multiprocessing/forkserver.py b/Lib/multiprocessing/forkserver.py
index 215ac39..22a911a 100644
--- a/Lib/multiprocessing/forkserver.py
+++ b/Lib/multiprocessing/forkserver.py
@@ -237,14 +237,8 @@
                             break
                         child_w = pid_to_fd.pop(pid, None)
                         if child_w is not None:
-                            if os.WIFSIGNALED(sts):
-                                returncode = -os.WTERMSIG(sts)
-                            else:
-                                if not os.WIFEXITED(sts):
-                                    raise AssertionError(
-                                        "Child {0:n} status is {1:n}".format(
-                                            pid,sts))
-                                returncode = os.WEXITSTATUS(sts)
+                            returncode = os.waitstatus_to_exitcode(sts)
+
                             # Send exit code to client process
                             try:
                                 write_signed(child_w, returncode)
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index 85e0d88..0eb16c6 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -21,6 +21,7 @@
 import array
 import queue
 import time
+import types
 import os
 from os import getpid
 
@@ -248,7 +249,7 @@
                     try:
                         obj, exposed, gettypeid = \
                             self.id_to_local_proxy_obj[ident]
-                    except KeyError as second_ke:
+                    except KeyError:
                         raise ke
 
                 if methodname not in exposed:
@@ -296,7 +297,7 @@
             try:
                 try:
                     send(msg)
-                except Exception as e:
+                except Exception:
                     send(('#UNSERIALIZABLE', format_exc()))
             except Exception as e:
                 util.info('exception in thread serving %r',
@@ -360,36 +361,10 @@
         finally:
             self.stop_event.set()
 
-    def create(*args, **kwds):
+    def create(self, c, typeid, /, *args, **kwds):
         '''
         Create a new shared object and return its id
         '''
-        if len(args) >= 3:
-            self, c, typeid, *args = args
-        elif not args:
-            raise TypeError("descriptor 'create' of 'Server' object "
-                            "needs an argument")
-        else:
-            if 'typeid' not in kwds:
-                raise TypeError('create expected at least 2 positional '
-                                'arguments, got %d' % (len(args)-1))
-            typeid = kwds.pop('typeid')
-            if len(args) >= 2:
-                self, c, *args = args
-                import warnings
-                warnings.warn("Passing 'typeid' as keyword argument is deprecated",
-                              DeprecationWarning, stacklevel=2)
-            else:
-                if 'c' not in kwds:
-                    raise TypeError('create expected at least 2 positional '
-                                    'arguments, got %d' % (len(args)-1))
-                c = kwds.pop('c')
-                self, *args = args
-                import warnings
-                warnings.warn("Passing 'c' as keyword argument is deprecated",
-                              DeprecationWarning, stacklevel=2)
-        args = tuple(args)
-
         with self.mutex:
             callable, exposed, method_to_typeid, proxytype = \
                       self.registry[typeid]
@@ -421,7 +396,6 @@
 
         self.incref(c, ident)
         return ident, tuple(exposed)
-    create.__text_signature__ = '($self, c, typeid, /, *args, **kwds)'
 
     def get_methods(self, c, token):
         '''
@@ -1156,6 +1130,8 @@
         return self._callmethod('set', (value,))
     value = property(get, set)
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 BaseListProxy = MakeProxyType('BaseListProxy', (
     '__add__', '__contains__', '__delitem__', '__getitem__', '__len__',
@@ -1297,26 +1273,15 @@
                 _SharedMemoryTracker(f"shm_{address}_{getpid()}")
             util.debug(f"SharedMemoryServer started by pid {getpid()}")
 
-        def create(*args, **kwargs):
+        def create(self, c, typeid, /, *args, **kwargs):
             """Create a new distributed-shared object (not backed by a shared
             memory block) and return its id to be used in a Proxy Object."""
             # Unless set up as a shared proxy, don't make shared_memory_context
             # a standard part of kwargs.  This makes things easier for supplying
             # simple functions.
-            if len(args) >= 3:
-                typeod = args[2]
-            elif 'typeid' in kwargs:
-                typeid = kwargs['typeid']
-            elif not args:
-                raise TypeError("descriptor 'create' of 'SharedMemoryServer' "
-                                "object needs an argument")
-            else:
-                raise TypeError('create expected at least 2 positional '
-                                'arguments, got %d' % (len(args)-1))
             if hasattr(self.registry[typeid][-1], "_shared_memory_proxy"):
                 kwargs['shared_memory_context'] = self.shared_memory_context
-            return Server.create(*args, **kwargs)
-        create.__text_signature__ = '($self, c, typeid, /, *args, **kwargs)'
+            return Server.create(self, c, typeid, *args, **kwargs)
 
         def shutdown(self, c):
             "Call unlink() on all tracked shared memory, terminate the Server."
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py
index 41dd923..bbe05a5 100644
--- a/Lib/multiprocessing/pool.py
+++ b/Lib/multiprocessing/pool.py
@@ -20,8 +20,8 @@
 import threading
 import time
 import traceback
+import types
 import warnings
-from queue import Empty
 
 # If threading is available then ThreadPool should be provided.  Therefore
 # we avoid top-level imports which are liable to fail on some systems.
@@ -780,6 +780,8 @@
         del self._cache[self._job]
         self._pool = None
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 AsyncResult = ApplyResult       # create alias -- see #17805
 
 #
diff --git a/Lib/multiprocessing/popen_fork.py b/Lib/multiprocessing/popen_fork.py
index 11e2160..625981c 100644
--- a/Lib/multiprocessing/popen_fork.py
+++ b/Lib/multiprocessing/popen_fork.py
@@ -25,16 +25,12 @@
         if self.returncode is None:
             try:
                 pid, sts = os.waitpid(self.pid, flag)
-            except OSError as e:
+            except OSError:
                 # Child process not yet created. See #1731717
                 # e.errno == errno.ECHILD == 10
                 return None
             if pid == self.pid:
-                if os.WIFSIGNALED(sts):
-                    self.returncode = -os.WTERMSIG(sts)
-                else:
-                    assert os.WIFEXITED(sts), "Status is {:n}".format(sts)
-                    self.returncode = os.WEXITSTATUS(sts)
+                self.returncode = os.waitstatus_to_exitcode(sts)
         return self.returncode
 
     def wait(self, timeout=None):
diff --git a/Lib/multiprocessing/process.py b/Lib/multiprocessing/process.py
index be13c07..0b2e0b4 100644
--- a/Lib/multiprocessing/process.py
+++ b/Lib/multiprocessing/process.py
@@ -317,12 +317,12 @@
             finally:
                 util._exit_function()
         except SystemExit as e:
-            if not e.args:
-                exitcode = 1
-            elif isinstance(e.args[0], int):
-                exitcode = e.args[0]
+            if e.code is None:
+                exitcode = 0
+            elif isinstance(e.code, int):
+                exitcode = e.code
             else:
-                sys.stderr.write(str(e.args[0]) + '\n')
+                sys.stderr.write(str(e.code) + '\n')
                 exitcode = 1
         except:
             exitcode = 1
diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py
index d112db2..a290181 100644
--- a/Lib/multiprocessing/queues.py
+++ b/Lib/multiprocessing/queues.py
@@ -14,6 +14,7 @@
 import threading
 import collections
 import time
+import types
 import weakref
 import errno
 
@@ -48,8 +49,7 @@
         self._sem = ctx.BoundedSemaphore(maxsize)
         # For use by concurrent.futures
         self._ignore_epipe = False
-
-        self._after_fork()
+        self._reset()
 
         if sys.platform != 'win32':
             register_after_fork(self, Queue._after_fork)
@@ -62,11 +62,17 @@
     def __setstate__(self, state):
         (self._ignore_epipe, self._maxsize, self._reader, self._writer,
          self._rlock, self._wlock, self._sem, self._opid) = state
-        self._after_fork()
+        self._reset()
 
     def _after_fork(self):
         debug('Queue._after_fork()')
-        self._notempty = threading.Condition(threading.Lock())
+        self._reset(after_fork=True)
+
+    def _reset(self, after_fork=False):
+        if after_fork:
+            self._notempty._at_fork_reinit()
+        else:
+            self._notempty = threading.Condition(threading.Lock())
         self._buffer = collections.deque()
         self._thread = None
         self._jointhread = None
@@ -340,6 +346,10 @@
         else:
             self._wlock = ctx.Lock()
 
+    def close(self):
+        self._reader.close()
+        self._writer.close()
+
     def empty(self):
         return not self._poll()
 
@@ -366,3 +376,5 @@
         else:
             with self._wlock:
                 self._writer.send_bytes(obj)
+
+    __class_getitem__ = classmethod(types.GenericAlias)
diff --git a/Lib/multiprocessing/resource_sharer.py b/Lib/multiprocessing/resource_sharer.py
index 8d5c990..6607650 100644
--- a/Lib/multiprocessing/resource_sharer.py
+++ b/Lib/multiprocessing/resource_sharer.py
@@ -63,7 +63,6 @@
     def __init__(self):
         self._key = 0
         self._cache = {}
-        self._old_locks = []
         self._lock = threading.Lock()
         self._listener = None
         self._address = None
@@ -113,10 +112,7 @@
         for key, (send, close) in self._cache.items():
             close()
         self._cache.clear()
-        # If self._lock was locked at the time of the fork, it may be broken
-        # -- see issue 6721.  Replace it without letting it be gc'ed.
-        self._old_locks.append(self._lock)
-        self._lock = threading.Lock()
+        self._lock._at_fork_reinit()
         if self._listener is not None:
             self._listener.close()
         self._listener = None
diff --git a/Lib/multiprocessing/shared_memory.py b/Lib/multiprocessing/shared_memory.py
index f92eb01..122b3fc 100644
--- a/Lib/multiprocessing/shared_memory.py
+++ b/Lib/multiprocessing/shared_memory.py
@@ -14,6 +14,7 @@
 import errno
 import struct
 import secrets
+import types
 
 if os.name == "nt":
     import _winapi
@@ -75,6 +76,8 @@
             raise ValueError("'size' must be a positive integer")
         if create:
             self._flags = _O_CREX | os.O_RDWR
+            if size == 0:
+                raise ValueError("'size' must be a positive number different from zero")
         if name is None and not self._flags & os.O_EXCL:
             raise ValueError("'name' can only be None if create=True")
 
@@ -251,6 +254,15 @@
     packing format for any storable value must require no more than 8
     characters to describe its format."""
 
+    # The shared memory area is organized as follows:
+    # - 8 bytes: number of items (N) as a 64-bit integer
+    # - (N + 1) * 8 bytes: offsets of each element from the start of the
+    #                      data area
+    # - K bytes: the data area storing item values (with encoding and size
+    #            depending on their respective types)
+    # - N * 8 bytes: `struct` format string for each element
+    # - N bytes: index into _back_transforms_mapping for each element
+    #            (for reconstructing the corresponding Python value)
     _types_mapping = {
         int: "q",
         float: "d",
@@ -282,7 +294,8 @@
             return 3  # NoneType
 
     def __init__(self, sequence=None, *, name=None):
-        if sequence is not None:
+        if name is None or sequence is not None:
+            sequence = sequence or ()
             _formats = [
                 self._types_mapping[type(item)]
                     if not isinstance(item, (str, bytes))
@@ -293,10 +306,14 @@
             ]
             self._list_len = len(_formats)
             assert sum(len(fmt) <= 8 for fmt in _formats) == self._list_len
-            self._allocated_bytes = tuple(
-                    self._alignment if fmt[-1] != "s" else int(fmt[:-1])
-                    for fmt in _formats
-            )
+            offset = 0
+            # The offsets of each list element into the shared memory's
+            # data area (0 meaning the start of the data area, not the start
+            # of the shared memory area).
+            self._allocated_offsets = [0]
+            for fmt in _formats:
+                offset += self._alignment if fmt[-1] != "s" else int(fmt[:-1])
+                self._allocated_offsets.append(offset)
             _recreation_codes = [
                 self._extract_recreation_code(item) for item in sequence
             ]
@@ -307,13 +324,9 @@
                 self._format_back_transform_codes
             )
 
-        else:
-            requested_size = 8  # Some platforms require > 0.
-
-        if name is not None and sequence is None:
-            self.shm = SharedMemory(name)
-        else:
             self.shm = SharedMemory(name, create=True, size=requested_size)
+        else:
+            self.shm = SharedMemory(name)
 
         if sequence is not None:
             _enc = _encoding
@@ -322,7 +335,7 @@
                 self.shm.buf,
                 0,
                 self._list_len,
-                *(self._allocated_bytes)
+                *(self._allocated_offsets)
             )
             struct.pack_into(
                 "".join(_formats),
@@ -345,10 +358,12 @@
 
         else:
             self._list_len = len(self)  # Obtains size from offset 0 in buffer.
-            self._allocated_bytes = struct.unpack_from(
-                self._format_size_metainfo,
-                self.shm.buf,
-                1 * 8
+            self._allocated_offsets = list(
+                struct.unpack_from(
+                    self._format_size_metainfo,
+                    self.shm.buf,
+                    1 * 8
+                )
             )
 
     def _get_packing_format(self, position):
@@ -370,7 +385,6 @@
     def _get_back_transform(self, position):
         "Gets the back transformation function for a single value."
 
-        position = position if position >= 0 else position + self._list_len
         if (position >= self._list_len) or (self._list_len < 0):
             raise IndexError("Requested position out of range.")
 
@@ -387,7 +401,6 @@
         """Sets the packing format and back transformation code for a
         single value in the list at the specified position."""
 
-        position = position if position >= 0 else position + self._list_len
         if (position >= self._list_len) or (self._list_len < 0):
             raise IndexError("Requested position out of range.")
 
@@ -407,9 +420,9 @@
         )
 
     def __getitem__(self, position):
+        position = position if position >= 0 else position + self._list_len
         try:
-            offset = self._offset_data_start \
-                     + sum(self._allocated_bytes[:position])
+            offset = self._offset_data_start + self._allocated_offsets[position]
             (v,) = struct.unpack_from(
                 self._get_packing_format(position),
                 self.shm.buf,
@@ -424,9 +437,10 @@
         return v
 
     def __setitem__(self, position, value):
+        position = position if position >= 0 else position + self._list_len
         try:
-            offset = self._offset_data_start \
-                     + sum(self._allocated_bytes[:position])
+            item_offset = self._allocated_offsets[position]
+            offset = self._offset_data_start + item_offset
             current_format = self._get_packing_format(position)
         except IndexError:
             raise IndexError("assignment index out of range")
@@ -435,15 +449,17 @@
             new_format = self._types_mapping[type(value)]
             encoded_value = value
         else:
+            allocated_length = self._allocated_offsets[position + 1] - item_offset
+
             encoded_value = (value.encode(_encoding)
                              if isinstance(value, str) else value)
-            if len(encoded_value) > self._allocated_bytes[position]:
+            if len(encoded_value) > allocated_length:
                 raise ValueError("bytes/str item exceeds available storage")
             if current_format[-1] == "s":
                 new_format = current_format
             else:
                 new_format = self._types_mapping[str] % (
-                    self._allocated_bytes[position],
+                    allocated_length,
                 )
 
         self._set_packing_format_and_transform(
@@ -464,33 +480,35 @@
 
     @property
     def format(self):
-        "The struct packing format used by all currently stored values."
+        "The struct packing format used by all currently stored items."
         return "".join(
             self._get_packing_format(i) for i in range(self._list_len)
         )
 
     @property
     def _format_size_metainfo(self):
-        "The struct packing format used for metainfo on storage sizes."
-        return f"{self._list_len}q"
+        "The struct packing format used for the items' storage offsets."
+        return "q" * (self._list_len + 1)
 
     @property
     def _format_packing_metainfo(self):
-        "The struct packing format used for the values' packing formats."
+        "The struct packing format used for the items' packing formats."
         return "8s" * self._list_len
 
     @property
     def _format_back_transform_codes(self):
-        "The struct packing format used for the values' back transforms."
+        "The struct packing format used for the items' back transforms."
         return "b" * self._list_len
 
     @property
     def _offset_data_start(self):
-        return (self._list_len + 1) * 8  # 8 bytes per "q"
+        # - 8 bytes for the list length
+        # - (N + 1) * 8 bytes for the element offsets
+        return (self._list_len + 2) * 8
 
     @property
     def _offset_packing_formats(self):
-        return self._offset_data_start + sum(self._allocated_bytes)
+        return self._offset_data_start + self._allocated_offsets[-1]
 
     @property
     def _offset_back_transform_codes(self):
@@ -510,3 +528,5 @@
                 return position
         else:
             raise ValueError(f"{value!r} not in this container")
+
+    __class_getitem__ = classmethod(types.GenericAlias)
diff --git a/Lib/multiprocessing/synchronize.py b/Lib/multiprocessing/synchronize.py
index 4fcbefc..d0be48f 100644
--- a/Lib/multiprocessing/synchronize.py
+++ b/Lib/multiprocessing/synchronize.py
@@ -270,7 +270,7 @@
     def notify(self, n=1):
         assert self._lock._semlock._is_mine(), 'lock is not owned'
         assert not self._wait_semaphore.acquire(
-            False), ('notify: Should not have been able to acquire'
+            False), ('notify: Should not have been able to acquire '
                      + '_wait_semaphore')
 
         # to take account of timeouts since last notify*() we subtract
diff --git a/Lib/multiprocessing/util.py b/Lib/multiprocessing/util.py
index 44abfe5..21f2a7e 100644
--- a/Lib/multiprocessing/util.py
+++ b/Lib/multiprocessing/util.py
@@ -367,13 +367,13 @@
 
 class ForkAwareThreadLock(object):
     def __init__(self):
-        self._reset()
-        register_after_fork(self, ForkAwareThreadLock._reset)
-
-    def _reset(self):
         self._lock = threading.Lock()
         self.acquire = self._lock.acquire
         self.release = self._lock.release
+        register_after_fork(self, ForkAwareThreadLock._at_fork_reinit)
+
+    def _at_fork_reinit(self):
+        self._lock._at_fork_reinit()
 
     def __enter__(self):
         return self._lock.__enter__()
@@ -452,7 +452,7 @@
         return _posixsubprocess.fork_exec(
             args, [os.fsencode(path)], True, passfds, None, None,
             -1, -1, -1, -1, -1, -1, errpipe_read, errpipe_write,
-            False, False, None)
+            False, False, None, None, None, -1, None)
     finally:
         os.close(errpipe_read)
         os.close(errpipe_write)
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index 9036f36..f6e746e 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -67,7 +67,6 @@
 import socket
 import collections
 import datetime
-import warnings
 import sys
 
 try:
@@ -294,7 +293,7 @@
 
 
 # The classes themselves
-class _NNTPBase:
+class NNTP:
     # UTF-8 is the character set for all NNTP commands and responses: they
     # are automatically encoded (when sending) and decoded (and receiving)
     # by this class.
@@ -310,13 +309,18 @@
     encoding = 'utf-8'
     errors = 'surrogateescape'
 
-    def __init__(self, file, host,
-                 readermode=None, timeout=_GLOBAL_DEFAULT_TIMEOUT):
+    def __init__(self, host, port=NNTP_PORT, user=None, password=None,
+                 readermode=None, usenetrc=False,
+                 timeout=_GLOBAL_DEFAULT_TIMEOUT):
         """Initialize an instance.  Arguments:
-        - file: file-like object (open for read/write in binary mode)
-        - host: hostname of the server
+        - host: hostname to connect to
+        - port: port to connect to (default the standard NNTP port)
+        - user: username to authenticate with
+        - password: password to use with username
         - readermode: if true, send 'mode reader' command after
                       connecting.
+        - usenetrc: allow loading username and password from ~/.netrc file
+                    if not specified explicitly
         - timeout: timeout (in seconds) used for socket connections
 
         readermode is sometimes necessary if you are connecting to an
@@ -326,7 +330,24 @@
         readermode.
         """
         self.host = host
-        self.file = file
+        self.port = port
+        self.sock = self._create_socket(timeout)
+        self.file = None
+        try:
+            self.file = self.sock.makefile("rwb")
+            self._base_init(readermode)
+            if user or usenetrc:
+                self.login(user, password, usenetrc)
+        except:
+            if self.file:
+                self.file.close()
+            self.sock.close()
+            raise
+
+    def _base_init(self, readermode):
+        """Partial initialization for the NNTP protocol.
+        This instance method is extracted for supporting the test code.
+        """
         self.debugging = 0
         self.welcome = self._getresp()
 
@@ -371,6 +392,12 @@
                 if is_connected():
                     self._close()
 
+    def _create_socket(self, timeout):
+        if timeout is not None and not timeout:
+            raise ValueError('Non-blocking socket (timeout=0) is not supported')
+        sys.audit("nntplib.connect", self, self.host, self.port)
+        return socket.create_connection((self.host, self.port), timeout)
+
     def getwelcome(self):
         """Get the welcome message from the server
         (this is read and squirreled away by __init__()).
@@ -834,44 +861,6 @@
         fmt = self._getoverviewfmt()
         return resp, _parse_overview(lines, fmt)
 
-    def xgtitle(self, group, *, file=None):
-        """Process an XGTITLE command (optional server extension) Arguments:
-        - group: group name wildcard (i.e. news.*)
-        Returns:
-        - resp: server response if successful
-        - list: list of (name,title) strings"""
-        warnings.warn("The XGTITLE extension is not actively used, "
-                      "use descriptions() instead",
-                      DeprecationWarning, 2)
-        line_pat = re.compile('^([^ \t]+)[ \t]+(.*)$')
-        resp, raw_lines = self._longcmdstring('XGTITLE ' + group, file)
-        lines = []
-        for raw_line in raw_lines:
-            match = line_pat.search(raw_line.strip())
-            if match:
-                lines.append(match.group(1, 2))
-        return resp, lines
-
-    def xpath(self, id):
-        """Process an XPATH command (optional server extension) Arguments:
-        - id: Message id of article
-        Returns:
-        resp: server response if successful
-        path: directory path to article
-        """
-        warnings.warn("The XPATH extension is not actively used",
-                      DeprecationWarning, 2)
-
-        resp = self._shortcmd('XPATH {0}'.format(id))
-        if not resp.startswith('223'):
-            raise NNTPReplyError(resp)
-        try:
-            [resp_num, path] = resp.split()
-        except ValueError:
-            raise NNTPReplyError(resp) from None
-        else:
-            return resp, path
-
     def date(self):
         """Process the DATE command.
         Returns:
@@ -927,8 +916,12 @@
         return self._post('IHAVE {0}'.format(message_id), data)
 
     def _close(self):
-        self.file.close()
-        del self.file
+        try:
+            if self.file:
+                self.file.close()
+                del self.file
+        finally:
+            self.sock.close()
 
     def quit(self):
         """Process a QUIT command and close the socket.  Returns:
@@ -1018,54 +1011,8 @@
                 raise NNTPError("TLS failed to start.")
 
 
-class NNTP(_NNTPBase):
-
-    def __init__(self, host, port=NNTP_PORT, user=None, password=None,
-                 readermode=None, usenetrc=False,
-                 timeout=_GLOBAL_DEFAULT_TIMEOUT):
-        """Initialize an instance.  Arguments:
-        - host: hostname to connect to
-        - port: port to connect to (default the standard NNTP port)
-        - user: username to authenticate with
-        - password: password to use with username
-        - readermode: if true, send 'mode reader' command after
-                      connecting.
-        - usenetrc: allow loading username and password from ~/.netrc file
-                    if not specified explicitly
-        - timeout: timeout (in seconds) used for socket connections
-
-        readermode is sometimes necessary if you are connecting to an
-        NNTP server on the local machine and intend to call
-        reader-specific commands, such as `group'.  If you get
-        unexpected NNTPPermanentErrors, you might need to set
-        readermode.
-        """
-        self.host = host
-        self.port = port
-        sys.audit("nntplib.connect", self, host, port)
-        self.sock = socket.create_connection((host, port), timeout)
-        file = None
-        try:
-            file = self.sock.makefile("rwb")
-            _NNTPBase.__init__(self, file, host,
-                               readermode, timeout)
-            if user or usenetrc:
-                self.login(user, password, usenetrc)
-        except:
-            if file:
-                file.close()
-            self.sock.close()
-            raise
-
-    def _close(self):
-        try:
-            _NNTPBase._close(self)
-        finally:
-            self.sock.close()
-
-
 if _have_ssl:
-    class NNTP_SSL(_NNTPBase):
+    class NNTP_SSL(NNTP):
 
         def __init__(self, host, port=NNTP_SSL_PORT,
                     user=None, password=None, ssl_context=None,
@@ -1074,27 +1021,19 @@
             """This works identically to NNTP.__init__, except for the change
             in default port and the `ssl_context` argument for SSL connections.
             """
-            sys.audit("nntplib.connect", self, host, port)
-            self.sock = socket.create_connection((host, port), timeout)
-            file = None
-            try:
-                self.sock = _encrypt_on(self.sock, ssl_context, host)
-                file = self.sock.makefile("rwb")
-                _NNTPBase.__init__(self, file, host,
-                                   readermode=readermode, timeout=timeout)
-                if user or usenetrc:
-                    self.login(user, password, usenetrc)
-            except:
-                if file:
-                    file.close()
-                self.sock.close()
-                raise
+            self.ssl_context = ssl_context
+            super().__init__(host, port, user, password, readermode,
+                             usenetrc, timeout)
 
-        def _close(self):
+        def _create_socket(self, timeout):
+            sock = super()._create_socket(timeout)
             try:
-                _NNTPBase._close(self)
-            finally:
-                self.sock.close()
+                sock = _encrypt_on(sock, self.ssl_context, self.host)
+            except:
+                sock.close()
+                raise
+            else:
+                return sock
 
     __all__.append("NNTP_SSL")
 
diff --git a/Lib/opcode.py b/Lib/opcode.py
index 3fb716b..ac1aa53 100644
--- a/Lib/opcode.py
+++ b/Lib/opcode.py
@@ -21,8 +21,7 @@
 except ImportError:
     pass
 
-cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
-        'is not', 'exception match', 'BAD')
+cmp_op = ('<', '<=', '==', '!=', '>', '>=')
 
 hasconst = []
 hasname = []
@@ -84,10 +83,12 @@
 def_op('INPLACE_FLOOR_DIVIDE', 28)
 def_op('INPLACE_TRUE_DIVIDE', 29)
 
+def_op('RERAISE', 48)
+def_op('WITH_EXCEPT_START', 49)
 def_op('GET_AITER', 50)
 def_op('GET_ANEXT', 51)
 def_op('BEFORE_ASYNC_WITH', 52)
-def_op('BEGIN_FINALLY', 53)
+
 def_op('END_ASYNC_FOR', 54)
 def_op('INPLACE_ADD', 55)
 def_op('INPLACE_SUBTRACT', 56)
@@ -109,20 +110,20 @@
 def_op('LOAD_BUILD_CLASS', 71)
 def_op('YIELD_FROM', 72)
 def_op('GET_AWAITABLE', 73)
-
+def_op('LOAD_ASSERTION_ERROR', 74)
 def_op('INPLACE_LSHIFT', 75)
 def_op('INPLACE_RSHIFT', 76)
 def_op('INPLACE_AND', 77)
 def_op('INPLACE_XOR', 78)
 def_op('INPLACE_OR', 79)
-def_op('WITH_CLEANUP_START', 81)
-def_op('WITH_CLEANUP_FINISH', 82)
+
+def_op('LIST_TO_TUPLE', 82)
 def_op('RETURN_VALUE', 83)
 def_op('IMPORT_STAR', 84)
 def_op('SETUP_ANNOTATIONS', 85)
 def_op('YIELD_VALUE', 86)
 def_op('POP_BLOCK', 87)
-def_op('END_FINALLY', 88)
+
 def_op('POP_EXCEPT', 89)
 
 HAVE_ARGUMENT = 90              # Opcodes from here have an argument:
@@ -158,6 +159,10 @@
 
 name_op('LOAD_GLOBAL', 116)     # Index in name list
 
+def_op('IS_OP', 117)
+def_op('CONTAINS_OP', 118)
+
+jabs_op('JUMP_IF_NOT_EXC_MATCH', 121)
 jrel_op('SETUP_FINALLY', 122)   # Distance to target address
 
 def_op('LOAD_FAST', 124)        # Local variable number
@@ -195,22 +200,18 @@
 def_op('EXTENDED_ARG', 144)
 EXTENDED_ARG = 144
 
-def_op('BUILD_LIST_UNPACK', 149)
-def_op('BUILD_MAP_UNPACK', 150)
-def_op('BUILD_MAP_UNPACK_WITH_CALL', 151)
-def_op('BUILD_TUPLE_UNPACK', 152)
-def_op('BUILD_SET_UNPACK', 153)
-
 jrel_op('SETUP_ASYNC_WITH', 154)
 
 def_op('FORMAT_VALUE', 155)
 def_op('BUILD_CONST_KEY_MAP', 156)
 def_op('BUILD_STRING', 157)
-def_op('BUILD_TUPLE_UNPACK_WITH_CALL', 158)
 
 name_op('LOAD_METHOD', 160)
 def_op('CALL_METHOD', 161)
-jrel_op('CALL_FINALLY', 162)
-def_op('POP_FINALLY', 163)
+
+def_op('LIST_EXTEND', 162)
+def_op('SET_UPDATE', 163)
+def_op('DICT_MERGE', 164)
+def_op('DICT_UPDATE', 165)
 
 del def_op, name_op, jrel_op, jabs_op
diff --git a/Lib/os.py b/Lib/os.py
index 253cad1..b794159 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -28,6 +28,8 @@
 
 from _collections_abc import _check_methods
 
+GenericAlias = type(list[int])
+
 _names = sys.builtin_module_names
 
 # Note:  more names are added to __all__ later.
@@ -336,7 +338,10 @@
             dirs.remove('CVS')  # don't visit CVS directories
 
     """
-    top = fspath(top)
+    sys.audit("os.walk", top, topdown, onerror, followlinks)
+    return _walk(fspath(top), topdown, onerror, followlinks)
+
+def _walk(top, topdown, onerror, followlinks):
     dirs = []
     nondirs = []
     walk_dirs = []
@@ -410,11 +415,11 @@
             # the caller can replace the directory entry during the "yield"
             # above.
             if followlinks or not islink(new_path):
-                yield from walk(new_path, topdown, onerror, followlinks)
+                yield from _walk(new_path, topdown, onerror, followlinks)
     else:
         # Recurse into sub-directories
         for new_path in walk_dirs:
-            yield from walk(new_path, topdown, onerror, followlinks)
+            yield from _walk(new_path, topdown, onerror, followlinks)
         # Yield after recursion if going bottom up
         yield top, dirs, nondirs
 
@@ -455,6 +460,7 @@
             if 'CVS' in dirs:
                 dirs.remove('CVS')  # don't visit CVS directories
         """
+        sys.audit("os.fwalk", top, topdown, onerror, follow_symlinks, dir_fd)
         if not isinstance(top, int) or not hasattr(top, '__index__'):
             top = fspath(top)
         # Note: To guard against symlink races, we use the standard
@@ -654,17 +660,15 @@
     return path_list.split(pathsep)
 
 
-# Change environ to automatically call putenv(), unsetenv if they exist.
-from _collections_abc import MutableMapping
+# Change environ to automatically call putenv() and unsetenv()
+from _collections_abc import MutableMapping, Mapping
 
 class _Environ(MutableMapping):
-    def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue, putenv, unsetenv):
+    def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue):
         self.encodekey = encodekey
         self.decodekey = decodekey
         self.encodevalue = encodevalue
         self.decodevalue = decodevalue
-        self.putenv = putenv
-        self.unsetenv = unsetenv
         self._data = data
 
     def __getitem__(self, key):
@@ -678,12 +682,12 @@
     def __setitem__(self, key, value):
         key = self.encodekey(key)
         value = self.encodevalue(value)
-        self.putenv(key, value)
+        putenv(key, value)
         self._data[key] = value
 
     def __delitem__(self, key):
         encodedkey = self.encodekey(key)
-        self.unsetenv(encodedkey)
+        unsetenv(encodedkey)
         try:
             del self._data[encodedkey]
         except KeyError:
@@ -712,21 +716,23 @@
             self[key] = value
         return self[key]
 
-try:
-    _putenv = putenv
-except NameError:
-    _putenv = lambda key, value: None
-else:
-    if "putenv" not in __all__:
-        __all__.append("putenv")
+    def __ior__(self, other):
+        self.update(other)
+        return self
 
-try:
-    _unsetenv = unsetenv
-except NameError:
-    _unsetenv = lambda key: _putenv(key, "")
-else:
-    if "unsetenv" not in __all__:
-        __all__.append("unsetenv")
+    def __or__(self, other):
+        if not isinstance(other, Mapping):
+            return NotImplemented
+        new = dict(self)
+        new.update(other)
+        return new
+
+    def __ror__(self, other):
+        if not isinstance(other, Mapping):
+            return NotImplemented
+        new = dict(other)
+        new.update(self)
+        return new
 
 def _createenviron():
     if name == 'nt':
@@ -755,8 +761,7 @@
         data = environ
     return _Environ(data,
         encodekey, decode,
-        encode, decode,
-        _putenv, _unsetenv)
+        encode, decode)
 
 # unicode environ
 environ = _createenviron()
@@ -781,8 +786,7 @@
     # bytes environ
     environb = _Environ(environ._data,
         _check_bytes, bytes,
-        _check_bytes, bytes,
-        _putenv, _unsetenv)
+        _check_bytes, bytes)
     del _check_bytes
 
     def getenvb(key, default=None):
@@ -862,12 +866,8 @@
                 wpid, sts = waitpid(pid, 0)
                 if WIFSTOPPED(sts):
                     continue
-                elif WIFSIGNALED(sts):
-                    return -WTERMSIG(sts)
-                elif WIFEXITED(sts):
-                    return WEXITSTATUS(sts)
-                else:
-                    raise OSError("Not stopped, signaled or exited???")
+
+                return waitstatus_to_exitcode(sts)
 
     def spawnv(mode, file, args):
         """spawnv(mode, file, args) -> integer
@@ -1076,6 +1076,8 @@
             return _check_methods(subclass, '__fspath__')
         return NotImplemented
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 if name == 'nt':
     class _AddedDllDirectory:
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index ff8bac9..147be2f 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -329,7 +329,10 @@
                     # parent dir
                     path, _, _ = path.rpartition(sep)
                     continue
-                newpath = path + sep + name
+                if path.endswith(sep):
+                    newpath = path + name
+                else:
+                    newpath = path + sep + name
                 if newpath in seen:
                     # Already seen this path
                     path = seen[newpath]
@@ -447,6 +450,20 @@
     def readlink(self, path):
         return os.readlink(path)
 
+    def owner(self, path):
+        try:
+            import pwd
+            return pwd.getpwuid(self.stat(path).st_uid).pw_name
+        except ImportError:
+            raise NotImplementedError("Path.owner() is unsupported on this system")
+
+    def group(self, path):
+        try:
+            import grp
+            return grp.getgrgid(self.stat(path).st_gid).gr_name
+        except ImportError:
+            raise NotImplementedError("Path.group() is unsupported on this system")
+
 
 _normal_accessor = _NormalAccessor()
 
@@ -785,6 +802,9 @@
             return NotImplemented
         return self._cparts >= other._cparts
 
+    def __class_getitem__(cls, type):
+        return cls
+
     drive = property(attrgetter('_drv'),
                      doc="""The drive prefix (letter or UNC path), if any.""")
 
@@ -853,6 +873,10 @@
         return self._from_parsed_parts(self._drv, self._root,
                                        self._parts[:-1] + [name])
 
+    def with_stem(self, stem):
+        """Return a new path with the stem changed."""
+        return self.with_name(stem + self.suffix)
+
     def with_suffix(self, suffix):
         """Return a new path with the file suffix changed.  If the path
         has no suffix, add given suffix.  If the given suffix is an empty
@@ -901,11 +925,21 @@
         cf = self._flavour.casefold_parts
         if (root or drv) if n == 0 else cf(abs_parts[:n]) != cf(to_abs_parts):
             formatted = self._format_parsed_parts(to_drv, to_root, to_parts)
-            raise ValueError("{!r} does not start with {!r}"
+            raise ValueError("{!r} is not in the subpath of {!r}"
+                    " OR one path is relative and the other is absolute."
                              .format(str(self), str(formatted)))
         return self._from_parsed_parts('', root if n == 1 else '',
                                        abs_parts[n:])
 
+    def is_relative_to(self, *other):
+        """Return True if the path is relative to another path or False.
+        """
+        try:
+            self.relative_to(*other)
+            return True
+        except ValueError:
+            return False
+
     @property
     def parts(self):
         """An object providing sequence-like access to the
@@ -1029,7 +1063,6 @@
     """
     __slots__ = (
         '_accessor',
-        '_closed',
     )
 
     def __new__(cls, *args, **kwargs):
@@ -1046,7 +1079,6 @@
               # Private non-constructor arguments
               template=None,
               ):
-        self._closed = False
         if template is not None:
             self._accessor = template._accessor
         else:
@@ -1059,15 +1091,18 @@
         return self._from_parsed_parts(self._drv, self._root, parts)
 
     def __enter__(self):
-        if self._closed:
-            self._raise_closed()
         return self
 
     def __exit__(self, t, v, tb):
-        self._closed = True
-
-    def _raise_closed(self):
-        raise ValueError("I/O operation on closed path")
+        # https://bugs.python.org/issue39682
+        # In previous versions of pathlib, this method marked this path as
+        # closed; subsequent attempts to perform I/O would raise an IOError.
+        # This functionality was never documented, and had the effect of
+        # making Path objects mutable, contrary to PEP 428. In Python 3.9 the
+        # _closed attribute was removed, and this method made a no-op.
+        # This method and __enter__()/__exit__() should be deprecated and
+        # removed in the future.
+        pass
 
     def _opener(self, name, flags, mode=0o666):
         # A stub for the opener argument to built-in open()
@@ -1078,8 +1113,6 @@
         Open the file pointed by this path and return a file descriptor,
         as os.open() does.
         """
-        if self._closed:
-            self._raise_closed()
         return self._accessor.open(self, flags, mode)
 
     # Public API
@@ -1106,27 +1139,24 @@
         try:
             other_st = other_path.stat()
         except AttributeError:
-            other_st = os.stat(other_path)
+            other_st = self._accessor.stat(other_path)
         return os.path.samestat(st, other_st)
 
     def iterdir(self):
         """Iterate over the files in this directory.  Does not yield any
         result for the special paths '.' and '..'.
         """
-        if self._closed:
-            self._raise_closed()
         for name in self._accessor.listdir(self):
             if name in {'.', '..'}:
                 # Yielding a path object for these makes little sense
                 continue
             yield self._make_child_relpath(name)
-            if self._closed:
-                self._raise_closed()
 
     def glob(self, pattern):
         """Iterate over this subtree and yield all existing files (of any
         kind, including directories) matching the given relative pattern.
         """
+        sys.audit("pathlib.Path.glob", self, pattern)
         if not pattern:
             raise ValueError("Unacceptable pattern: {!r}".format(pattern))
         drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
@@ -1141,6 +1171,7 @@
         directories) matching the given relative pattern, anywhere in
         this subtree.
         """
+        sys.audit("pathlib.Path.rglob", self, pattern)
         drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
         if drv or root:
             raise NotImplementedError("Non-relative patterns are unsupported")
@@ -1156,8 +1187,6 @@
         Use resolve() to get the canonical path to a file.
         """
         # XXX untested yet!
-        if self._closed:
-            self._raise_closed()
         if self.is_absolute():
             return self
         # FIXME this must defer to the specific flavour (and, under Windows,
@@ -1172,8 +1201,6 @@
         normalizing it (for example turning slashes into backslashes under
         Windows).
         """
-        if self._closed:
-            self._raise_closed()
         s = self._flavour.resolve(self, strict=strict)
         if s is None:
             # No symlink resolution => for consistency, raise an error if
@@ -1197,15 +1224,13 @@
         """
         Return the login name of the file owner.
         """
-        import pwd
-        return pwd.getpwuid(self.stat().st_uid).pw_name
+        return self._accessor.owner(self)
 
     def group(self):
         """
         Return the group name of the file gid.
         """
-        import grp
-        return grp.getgrgid(self.stat().st_gid).gr_name
+        return self._accessor.group(self)
 
     def open(self, mode='r', buffering=-1, encoding=None,
              errors=None, newline=None):
@@ -1213,8 +1238,6 @@
         Open the file pointed by this path and return a file object, as
         the built-in open() function does.
         """
-        if self._closed:
-            self._raise_closed()
         return io.open(self, mode, buffering, encoding, errors, newline,
                        opener=self._opener)
 
@@ -1251,12 +1274,19 @@
         with self.open(mode='w', encoding=encoding, errors=errors) as f:
             return f.write(data)
 
+    def readlink(self):
+        """
+        Return the path to which the symbolic link points.
+        """
+        path = self._accessor.readlink(self)
+        obj = self._from_parts((path,), init=False)
+        obj._init(template=self)
+        return obj
+
     def touch(self, mode=0o666, exist_ok=True):
         """
         Create this file with the given access mode, if it doesn't exist.
         """
-        if self._closed:
-            self._raise_closed()
         if exist_ok:
             # First try to bump modification time
             # Implementation note: GNU touch uses the UTIME_NOW option of
@@ -1278,8 +1308,6 @@
         """
         Create a new directory at this given path.
         """
-        if self._closed:
-            self._raise_closed()
         try:
             self._accessor.mkdir(self, mode)
         except FileNotFoundError:
@@ -1297,8 +1325,6 @@
         """
         Change the permissions of the path, like os.chmod().
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.chmod(self, mode)
 
     def lchmod(self, mode):
@@ -1306,8 +1332,6 @@
         Like chmod(), except if the path points to a symlink, the symlink's
         permissions are changed, rather than its target's.
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.lchmod(self, mode)
 
     def unlink(self, missing_ok=False):
@@ -1315,8 +1339,6 @@
         Remove this file or link.
         If the path is a directory, use rmdir() instead.
         """
-        if self._closed:
-            self._raise_closed()
         try:
             self._accessor.unlink(self)
         except FileNotFoundError:
@@ -1327,8 +1349,6 @@
         """
         Remove this directory.  The directory must be empty.
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.rmdir(self)
 
     def lstat(self):
@@ -1336,36 +1356,37 @@
         Like stat(), except if the path points to a symlink, the symlink's
         status information is returned, rather than its target's.
         """
-        if self._closed:
-            self._raise_closed()
         return self._accessor.lstat(self)
 
     def link_to(self, target):
         """
         Create a hard link pointing to a path named target.
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.link_to(self, target)
 
     def rename(self, target):
         """
-        Rename this path to the given path,
-        and return a new Path instance pointing to the given path.
+        Rename this path to the target path.
+
+        The target path may be absolute or relative. Relative paths are
+        interpreted relative to the current working directory, *not* the
+        directory of the Path object.
+
+        Returns the new Path instance pointing to the target path.
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.rename(self, target)
         return self.__class__(target)
 
     def replace(self, target):
         """
-        Rename this path to the given path, clobbering the existing
-        destination if it exists, and return a new Path instance
-        pointing to the given path.
+        Rename this path to the target path, overwriting if that path exists.
+
+        The target path may be absolute or relative. Relative paths are
+        interpreted relative to the current working directory, *not* the
+        directory of the Path object.
+
+        Returns the new Path instance pointing to the target path.
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.replace(self, target)
         return self.__class__(target)
 
@@ -1374,8 +1395,6 @@
         Make this path a symlink pointing to the given path.
         Note the order of arguments (self, target) is the reverse of os.symlink's.
         """
-        if self._closed:
-            self._raise_closed()
         self._accessor.symlink(target, self, target_is_directory)
 
     # Convenience functions for querying the stat results
@@ -1436,9 +1455,8 @@
         if not self.exists() or not self.is_dir():
             return False
 
-        parent = Path(self.parent)
         try:
-            parent_dev = parent.stat().st_dev
+            parent_dev = self.parent.stat().st_dev
         except OSError:
             return False
 
@@ -1446,7 +1464,7 @@
         if dev != parent_dev:
             return True
         ino = self.stat().st_ino
-        parent_ino = parent.stat().st_ino
+        parent_ino = self.parent.stat().st_ino
         return ino == parent_ino
 
     def is_symlink(self):
@@ -1554,11 +1572,5 @@
     """
     __slots__ = ()
 
-    def owner(self):
-        raise NotImplementedError("Path.owner() is unsupported on this system")
-
-    def group(self):
-        raise NotImplementedError("Path.group() is unsupported on this system")
-
     def is_mount(self):
         raise NotImplementedError("Path.is_mount() is unsupported on this system")
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 0810235..d7d9571 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -1312,14 +1312,6 @@
             # _getval() already printed the error
             return
         code = None
-        # Is it a function?
-        try:
-            code = value.__code__
-        except Exception:
-            pass
-        if code:
-            self.message('Function %s' % code.co_name)
-            return
         # Is it an instance method?
         try:
             code = value.__func__.__code__
@@ -1328,6 +1320,14 @@
         if code:
             self.message('Method %s' % code.co_name)
             return
+        # Is it a function?
+        try:
+            code = value.__code__
+        except Exception:
+            pass
+        if code:
+            self.message('Function %s' % code.co_name)
+            return
         # Is it a class?
         if value.__class__ is type:
             self.message('Class %s.%s' % (value.__module__, value.__qualname__))
diff --git a/Lib/pickle.py b/Lib/pickle.py
index af50a9b..e63a8b6 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -13,7 +13,7 @@
     dump(object, file)
     dumps(object) -> string
     load(file) -> object
-    loads(string) -> object
+    loads(bytes) -> object
 
 Misc variables:
 
@@ -340,7 +340,9 @@
     # Protect the iteration by using a list copy of sys.modules against dynamic
     # modules that trigger imports of other modules upon calls to getattr.
     for module_name, module in sys.modules.copy().items():
-        if module_name == '__main__' or module is None:
+        if (module_name == '__main__'
+            or module_name == '__mp_main__'  # bpo-42406
+            or module is None):
             continue
         try:
             if _getattribute(module, name)[0] is obj:
@@ -1604,17 +1606,29 @@
 
     def load_get(self):
         i = int(self.readline()[:-1])
-        self.append(self.memo[i])
+        try:
+            self.append(self.memo[i])
+        except KeyError:
+            msg = f'Memo value not found at index {i}'
+            raise UnpicklingError(msg) from None
     dispatch[GET[0]] = load_get
 
     def load_binget(self):
         i = self.read(1)[0]
-        self.append(self.memo[i])
+        try:
+            self.append(self.memo[i])
+        except KeyError as exc:
+            msg = f'Memo value not found at index {i}'
+            raise UnpicklingError(msg) from None
     dispatch[BINGET[0]] = load_binget
 
     def load_long_binget(self):
         i, = unpack('<I', self.read(4))
-        self.append(self.memo[i])
+        try:
+            self.append(self.memo[i])
+        except KeyError as exc:
+            msg = f'Memo value not found at index {i}'
+            raise UnpicklingError(msg) from None
     dispatch[LONG_BINGET[0]] = load_long_binget
 
     def load_put(self):
@@ -1749,7 +1763,7 @@
     return _Unpickler(file, fix_imports=fix_imports, buffers=buffers,
                      encoding=encoding, errors=errors).load()
 
-def _loads(s, *, fix_imports=True, encoding="ASCII", errors="strict",
+def _loads(s, /, *, fix_imports=True, encoding="ASCII", errors="strict",
            buffers=None):
     if isinstance(s, str):
         raise TypeError("Can't load pickle from unicode string")
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
index 8474a77..4c18467 100644
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -7,6 +7,7 @@
 import importlib.machinery
 import os
 import os.path
+import re
 import sys
 from types import ModuleType
 import warnings
@@ -635,3 +636,72 @@
     parts.insert(0, os.path.dirname(mod.__file__))
     resource_name = os.path.join(*parts)
     return loader.get_data(resource_name)
+
+
+_DOTTED_WORDS = r'(?!\d)(\w+)(\.(?!\d)(\w+))*'
+_NAME_PATTERN = re.compile(f'^(?P<pkg>{_DOTTED_WORDS})(?P<cln>:(?P<obj>{_DOTTED_WORDS})?)?$', re.U)
+del _DOTTED_WORDS
+
+def resolve_name(name):
+    """
+    Resolve a name to an object.
+
+    It is expected that `name` will be a string in one of the following
+    formats, where W is shorthand for a valid Python identifier and dot stands
+    for a literal period in these pseudo-regexes:
+
+    W(.W)*
+    W(.W)*:(W(.W)*)?
+
+    The first form is intended for backward compatibility only. It assumes that
+    some part of the dotted name is a package, and the rest is an object
+    somewhere within that package, possibly nested inside other objects.
+    Because the place where the package stops and the object hierarchy starts
+    can't be inferred by inspection, repeated attempts to import must be done
+    with this form.
+
+    In the second form, the caller makes the division point clear through the
+    provision of a single colon: the dotted name to the left of the colon is a
+    package to be imported, and the dotted name to the right is the object
+    hierarchy within that package. Only one import is needed in this form. If
+    it ends with the colon, then a module object is returned.
+
+    The function will return an object (which might be a module), or raise one
+    of the following exceptions:
+
+    ValueError - if `name` isn't in a recognised format
+    ImportError - if an import failed when it shouldn't have
+    AttributeError - if a failure occurred when traversing the object hierarchy
+                     within the imported package to get to the desired object)
+    """
+    m = _NAME_PATTERN.match(name)
+    if not m:
+        raise ValueError(f'invalid format: {name!r}')
+    gd = m.groupdict()
+    if gd.get('cln'):
+        # there is a colon - a one-step import is all that's needed
+        mod = importlib.import_module(gd['pkg'])
+        parts = gd.get('obj')
+        parts = parts.split('.') if parts else []
+    else:
+        # no colon - have to iterate to find the package boundary
+        parts = name.split('.')
+        modname = parts.pop(0)
+        # first part *must* be a module/package.
+        mod = importlib.import_module(modname)
+        while parts:
+            p = parts[0]
+            s = f'{modname}.{p}'
+            try:
+                mod = importlib.import_module(s)
+                parts.pop(0)
+                modname = s
+            except ImportError:
+                break
+    # if we reach this point, mod is the module, already imported, and
+    # parts is the list of parts in the object hierarchy to be traversed, or
+    # an empty list if just the module is wanted.
+    result = mod
+    for p in parts:
+        result = getattr(result, p)
+    return result
diff --git a/Lib/platform.py b/Lib/platform.py
index 994d892..e9f50ab 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -116,6 +116,9 @@
 import os
 import re
 import sys
+import subprocess
+import functools
+import itertools
 
 ### Globals & Constants
 
@@ -600,22 +603,6 @@
             os.path.join(os.path.dirname(filepath), os.readlink(filepath)))
     return filepath
 
-def _syscmd_uname(option, default=''):
-
-    """ Interface to the system's uname command.
-    """
-    if sys.platform in ('dos', 'win32', 'win16'):
-        # XXX Others too ?
-        return default
-
-    import subprocess
-    try:
-        output = subprocess.check_output(('uname', option),
-                                         stderr=subprocess.DEVNULL,
-                                         text=True)
-    except (OSError, subprocess.CalledProcessError):
-        return default
-    return (output.strip() or default)
 
 def _syscmd_file(target, default=''):
 
@@ -736,13 +723,90 @@
 
     return bits, linkage
 
+
+def _get_machine_win32():
+    # Try to use the PROCESSOR_* environment variables
+    # available on Win XP and later; see
+    # http://support.microsoft.com/kb/888731 and
+    # http://www.geocities.com/rick_lively/MANUALS/ENV/MSWIN/PROCESSI.HTM
+
+    # WOW64 processes mask the native architecture
+    return (
+        os.environ.get('PROCESSOR_ARCHITEW6432', '') or
+        os.environ.get('PROCESSOR_ARCHITECTURE', '')
+    )
+
+
+class _Processor:
+    @classmethod
+    def get(cls):
+        func = getattr(cls, f'get_{sys.platform}', cls.from_subprocess)
+        return func() or ''
+
+    def get_win32():
+        return os.environ.get('PROCESSOR_IDENTIFIER', _get_machine_win32())
+
+    def get_OpenVMS():
+        try:
+            import vms_lib
+        except ImportError:
+            pass
+        else:
+            csid, cpu_number = vms_lib.getsyi('SYI$_CPU', 0)
+            return 'Alpha' if cpu_number >= 128 else 'VAX'
+
+    def from_subprocess():
+        """
+        Fall back to `uname -p`
+        """
+        try:
+            return subprocess.check_output(
+                ['uname', '-p'],
+                stderr=subprocess.DEVNULL,
+                text=True,
+            ).strip()
+        except (OSError, subprocess.CalledProcessError):
+            pass
+
+
+def _unknown_as_blank(val):
+    return '' if val == 'unknown' else val
+
+
 ### Portable uname() interface
 
-uname_result = collections.namedtuple("uname_result",
-                    "system node release version machine processor")
+class uname_result(
+    collections.namedtuple(
+        "uname_result_base",
+        "system node release version machine")
+        ):
+    """
+    A uname_result that's largely compatible with a
+    simple namedtuple except that 'platform' is
+    resolved late and cached to avoid calling "uname"
+    except when needed.
+    """
+
+    @functools.cached_property
+    def processor(self):
+        return _unknown_as_blank(_Processor.get())
+
+    def __iter__(self):
+        return itertools.chain(
+            super().__iter__(),
+            (self.processor,)
+        )
+
+    def __getitem__(self, key):
+        return tuple(iter(self))[key]
+
+    def __len__(self):
+        return len(tuple(iter(self)))
+
 
 _uname_cache = None
 
+
 def uname():
 
     """ Fairly portable uname interface. Returns a tuple
@@ -756,52 +820,30 @@
 
     """
     global _uname_cache
-    no_os_uname = 0
 
     if _uname_cache is not None:
         return _uname_cache
 
-    processor = ''
-
     # Get some infos from the builtin os.uname API...
     try:
-        system, node, release, version, machine = os.uname()
+        system, node, release, version, machine = infos = os.uname()
     except AttributeError:
-        no_os_uname = 1
+        system = sys.platform
+        node = _node()
+        release = version = machine = ''
+        infos = ()
 
-    if no_os_uname or not list(filter(None, (system, node, release, version, machine))):
-        # Hmm, no there is either no uname or uname has returned
-        #'unknowns'... we'll have to poke around the system then.
-        if no_os_uname:
-            system = sys.platform
-            release = ''
-            version = ''
-            node = _node()
-            machine = ''
-
-        use_syscmd_ver = 1
+    if not any(infos):
+        # uname is not available
 
         # Try win32_ver() on win32 platforms
         if system == 'win32':
             release, version, csd, ptype = win32_ver()
-            if release and version:
-                use_syscmd_ver = 0
-            # Try to use the PROCESSOR_* environment variables
-            # available on Win XP and later; see
-            # http://support.microsoft.com/kb/888731 and
-            # http://www.geocities.com/rick_lively/MANUALS/ENV/MSWIN/PROCESSI.HTM
-            if not machine:
-                # WOW64 processes mask the native architecture
-                if "PROCESSOR_ARCHITEW6432" in os.environ:
-                    machine = os.environ.get("PROCESSOR_ARCHITEW6432", '')
-                else:
-                    machine = os.environ.get('PROCESSOR_ARCHITECTURE', '')
-            if not processor:
-                processor = os.environ.get('PROCESSOR_IDENTIFIER', machine)
+            machine = machine or _get_machine_win32()
 
         # Try the 'ver' system command available on some
         # platforms
-        if use_syscmd_ver:
+        if not (release and version):
             system, release, version = _syscmd_ver(system)
             # Normalize system to what win32_ver() normally returns
             # (_syscmd_ver() tends to return the vendor name as well)
@@ -841,42 +883,15 @@
         if not release or release == '0':
             release = version
             version = ''
-        # Get processor information
-        try:
-            import vms_lib
-        except ImportError:
-            pass
-        else:
-            csid, cpu_number = vms_lib.getsyi('SYI$_CPU', 0)
-            if (cpu_number >= 128):
-                processor = 'Alpha'
-            else:
-                processor = 'VAX'
-    if not processor:
-        # Get processor information from the uname system command
-        processor = _syscmd_uname('-p', '')
-
-    #If any unknowns still exist, replace them with ''s, which are more portable
-    if system == 'unknown':
-        system = ''
-    if node == 'unknown':
-        node = ''
-    if release == 'unknown':
-        release = ''
-    if version == 'unknown':
-        version = ''
-    if machine == 'unknown':
-        machine = ''
-    if processor == 'unknown':
-        processor = ''
 
     #  normalize name
     if system == 'Microsoft' and release == 'Windows':
         system = 'Windows'
         release = 'Vista'
 
-    _uname_cache = uname_result(system, node, release, version,
-                                machine, processor)
+    vals = system, node, release, version, machine
+    # Replace 'unknown' values with the more portable ''
+    _uname_cache = uname_result(*map(_unknown_as_blank, vals))
     return _uname_cache
 
 ### Direct interfaces to some of the uname() return values
@@ -1202,7 +1217,7 @@
 
     elif system in ('Linux',):
         # check for libc vs. glibc
-        libcname, libcversion = libc_ver(sys.executable)
+        libcname, libcversion = libc_ver()
         platform = _platform(system, release, machine, processor,
                              'with',
                              libcname+libcversion)
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
index 04f8a87..2eeebe4 100644
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -46,14 +46,11 @@
     print(pl["aKey"])
 """
 __all__ = [
-    "readPlist", "writePlist", "readPlistFromBytes", "writePlistToBytes",
-    "Data", "InvalidFileException", "FMT_XML", "FMT_BINARY",
-    "load", "dump", "loads", "dumps", "UID"
+    "InvalidFileException", "FMT_XML", "FMT_BINARY", "load", "dump", "loads", "dumps", "UID"
 ]
 
 import binascii
 import codecs
-import contextlib
 import datetime
 import enum
 from io import BytesIO
@@ -61,7 +58,6 @@
 import os
 import re
 import struct
-from warnings import warn
 from xml.parsers.expat import ParserCreate
 
 
@@ -69,112 +65,6 @@
 globals().update(PlistFormat.__members__)
 
 
-#
-#
-# Deprecated functionality
-#
-#
-
-
-@contextlib.contextmanager
-def _maybe_open(pathOrFile, mode):
-    if isinstance(pathOrFile, str):
-        with open(pathOrFile, mode) as fp:
-            yield fp
-
-    else:
-        yield pathOrFile
-
-
-def readPlist(pathOrFile):
-    """
-    Read a .plist from a path or file. pathOrFile should either
-    be a file name, or a readable binary file object.
-
-    This function is deprecated, use load instead.
-    """
-    warn("The readPlist function is deprecated, use load() instead",
-        DeprecationWarning, 2)
-
-    with _maybe_open(pathOrFile, 'rb') as fp:
-        return load(fp, fmt=None, use_builtin_types=False)
-
-def writePlist(value, pathOrFile):
-    """
-    Write 'value' to a .plist file. 'pathOrFile' may either be a
-    file name or a (writable) file object.
-
-    This function is deprecated, use dump instead.
-    """
-    warn("The writePlist function is deprecated, use dump() instead",
-        DeprecationWarning, 2)
-    with _maybe_open(pathOrFile, 'wb') as fp:
-        dump(value, fp, fmt=FMT_XML, sort_keys=True, skipkeys=False)
-
-
-def readPlistFromBytes(data):
-    """
-    Read a plist data from a bytes object. Return the root object.
-
-    This function is deprecated, use loads instead.
-    """
-    warn("The readPlistFromBytes function is deprecated, use loads() instead",
-        DeprecationWarning, 2)
-    return load(BytesIO(data), fmt=None, use_builtin_types=False)
-
-
-def writePlistToBytes(value):
-    """
-    Return 'value' as a plist-formatted bytes object.
-
-    This function is deprecated, use dumps instead.
-    """
-    warn("The writePlistToBytes function is deprecated, use dumps() instead",
-        DeprecationWarning, 2)
-    f = BytesIO()
-    dump(value, f, fmt=FMT_XML, sort_keys=True, skipkeys=False)
-    return f.getvalue()
-
-
-class Data:
-    """
-    Wrapper for binary data.
-
-    This class is deprecated, use a bytes object instead.
-    """
-
-    def __init__(self, data):
-        if not isinstance(data, bytes):
-            raise TypeError("data must be as bytes")
-        self.data = data
-
-    @classmethod
-    def fromBase64(cls, data):
-        # base64.decodebytes just calls binascii.a2b_base64;
-        # it seems overkill to use both base64 and binascii.
-        return cls(_decode_base64(data))
-
-    def asBase64(self, maxlinelength=76):
-        return _encode_base64(self.data, maxlinelength)
-
-    def __eq__(self, other):
-        if isinstance(other, self.__class__):
-            return self.data == other.data
-        elif isinstance(other, bytes):
-            return self.data == other
-        else:
-            return NotImplemented
-
-    def __repr__(self):
-        return "%s(%s)" % (self.__class__.__name__, repr(self.data))
-
-#
-#
-# End of deprecated functionality
-#
-#
-
-
 class UID:
     def __init__(self, data):
         if not isinstance(data, int):
@@ -202,7 +92,6 @@
     def __hash__(self):
         return hash(self.data)
 
-
 #
 # XML support
 #
@@ -273,11 +162,10 @@
     return text
 
 class _PlistParser:
-    def __init__(self, use_builtin_types, dict_type):
+    def __init__(self, dict_type):
         self.stack = []
         self.current_key = None
         self.root = None
-        self._use_builtin_types = use_builtin_types
         self._dict_type = dict_type
 
     def parse(self, fileobj):
@@ -285,9 +173,16 @@
         self.parser.StartElementHandler = self.handle_begin_element
         self.parser.EndElementHandler = self.handle_end_element
         self.parser.CharacterDataHandler = self.handle_data
+        self.parser.EntityDeclHandler = self.handle_entity_decl
         self.parser.ParseFile(fileobj)
         return self.root
 
+    def handle_entity_decl(self, entity_name, is_parameter_entity, value, base, system_id, public_id, notation_name):
+        # Reject plist files with entity declarations to avoid XML vulnerabilies in expat.
+        # Regular plist files don't contain those declerations, and Apple's plutil tool does not
+        # accept them either.
+        raise InvalidFileException("XML entity declarations are not supported in plist files")
+
     def handle_begin_element(self, element, attrs):
         self.data = []
         handler = getattr(self, "begin_" + element, None)
@@ -357,7 +252,11 @@
         self.add_object(False)
 
     def end_integer(self):
-        self.add_object(int(self.get_data()))
+        raw = self.get_data()
+        if raw.startswith('0x') or raw.startswith('0X'):
+            self.add_object(int(raw, 16))
+        else:
+            self.add_object(int(raw))
 
     def end_real(self):
         self.add_object(float(self.get_data()))
@@ -366,11 +265,7 @@
         self.add_object(self.get_data())
 
     def end_data(self):
-        if self._use_builtin_types:
-            self.add_object(_decode_base64(self.get_data()))
-
-        else:
-            self.add_object(Data.fromBase64(self.get_data()))
+        self.add_object(_decode_base64(self.get_data()))
 
     def end_date(self):
         self.add_object(_date_from_string(self.get_data()))
@@ -452,9 +347,6 @@
         elif isinstance(value, dict):
             self.write_dict(value)
 
-        elif isinstance(value, Data):
-            self.write_data(value)
-
         elif isinstance(value, (bytes, bytearray)):
             self.write_bytes(value)
 
@@ -467,9 +359,6 @@
         else:
             raise TypeError("unsupported type: %s" % type(value))
 
-    def write_data(self, data):
-        self.write_bytes(data.data)
-
     def write_bytes(self, data):
         self.begin_element("data")
         self._indent_level -= 1
@@ -563,8 +452,7 @@
 
     see also: http://opensource.apple.com/source/CF/CF-744.18/CFBinaryPList.c
     """
-    def __init__(self, use_builtin_types, dict_type):
-        self._use_builtin_types = use_builtin_types
+    def __init__(self, dict_type):
         self._dict_type = dict_type
 
     def parse(self, fp):
@@ -589,7 +477,7 @@
             return self._read_object(top_object)
 
         except (OSError, IndexError, struct.error, OverflowError,
-                UnicodeDecodeError):
+                ValueError):
             raise InvalidFileException()
 
     def _get_size(self, tokenL):
@@ -605,7 +493,7 @@
     def _read_ints(self, n, size):
         data = self._fp.read(size * n)
         if size in _BINARY_FORMAT:
-            return struct.unpack('>' + _BINARY_FORMAT[size] * n, data)
+            return struct.unpack(f'>{n}{_BINARY_FORMAT[size]}', data)
         else:
             if not size or len(data) != size * n:
                 raise InvalidFileException()
@@ -664,18 +552,23 @@
 
         elif tokenH == 0x40:  # data
             s = self._get_size(tokenL)
-            if self._use_builtin_types:
-                result = self._fp.read(s)
-            else:
-                result = Data(self._fp.read(s))
+            result = self._fp.read(s)
+            if len(result) != s:
+                raise InvalidFileException()
 
         elif tokenH == 0x50:  # ascii string
             s = self._get_size(tokenL)
-            result =  self._fp.read(s).decode('ascii')
+            data = self._fp.read(s)
+            if len(data) != s:
+                raise InvalidFileException()
+            result = data.decode('ascii')
 
         elif tokenH == 0x60:  # unicode string
-            s = self._get_size(tokenL)
-            result = self._fp.read(s * 2).decode('utf-16be')
+            s = self._get_size(tokenL) * 2
+            data = self._fp.read(s)
+            if len(data) != s:
+                raise InvalidFileException()
+            result = data.decode('utf-16be')
 
         elif tokenH == 0x80:  # UID
             # used by Key-Archiver plist files
@@ -700,9 +593,11 @@
             obj_refs = self._read_refs(s)
             result = self._dict_type()
             self._objects[ref] = result
-            for k, o in zip(key_refs, obj_refs):
-                result[self._read_object(k)] = self._read_object(o)
-
+            try:
+                for k, o in zip(key_refs, obj_refs):
+                    result[self._read_object(k)] = self._read_object(o)
+            except TypeError:
+                raise InvalidFileException()
         else:
             raise InvalidFileException()
 
@@ -716,7 +611,7 @@
     elif count < 1 << 16:
         return 2
 
-    elif count << 1 << 32:
+    elif count < 1 << 32:
         return 4
 
     else:
@@ -783,10 +678,6 @@
             if (type(value), value) in self._objtable:
                 return
 
-        elif isinstance(value, Data):
-            if (type(value.data), value.data) in self._objtable:
-                return
-
         elif id(value) in self._objidtable:
             return
 
@@ -795,8 +686,6 @@
         self._objlist.append(value)
         if isinstance(value, _scalars):
             self._objtable[(type(value), value)] = refnum
-        elif isinstance(value, Data):
-            self._objtable[(type(value.data), value.data)] = refnum
         else:
             self._objidtable[id(value)] = refnum
 
@@ -826,8 +715,6 @@
     def _getrefnum(self, value):
         if isinstance(value, _scalars):
             return self._objtable[(type(value), value)]
-        elif isinstance(value, Data):
-            return self._objtable[(type(value.data), value.data)]
         else:
             return self._objidtable[id(value)]
 
@@ -885,10 +772,6 @@
             f = (value - datetime.datetime(2001, 1, 1)).total_seconds()
             self._fp.write(struct.pack('>Bd', 0x33, f))
 
-        elif isinstance(value, Data):
-            self._write_size(0x40, len(value.data))
-            self._fp.write(value.data)
-
         elif isinstance(value, (bytes, bytearray)):
             self._write_size(0x40, len(value))
             self._fp.write(value)
@@ -970,7 +853,7 @@
 }
 
 
-def load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict):
+def load(fp, *, fmt=None, dict_type=dict):
     """Read a .plist file. 'fp' should be a readable and binary file object.
     Return the unpacked root object (which usually is a dictionary).
     """
@@ -988,17 +871,16 @@
     else:
         P = _FORMATS[fmt]['parser']
 
-    p = P(use_builtin_types=use_builtin_types, dict_type=dict_type)
+    p = P(dict_type=dict_type)
     return p.parse(fp)
 
 
-def loads(value, *, fmt=None, use_builtin_types=True, dict_type=dict):
+def loads(value, *, fmt=None, dict_type=dict):
     """Read a .plist file from a bytes object.
     Return the unpacked root object (which usually is a dictionary).
     """
     fp = BytesIO(value)
-    return load(
-        fp, fmt=fmt, use_builtin_types=use_builtin_types, dict_type=dict_type)
+    return load(fp, fmt=fmt, dict_type=dict_type)
 
 
 def dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False):
diff --git a/Lib/poplib.py b/Lib/poplib.py
index e3bd2ab..0f85873 100644
--- a/Lib/poplib.py
+++ b/Lib/poplib.py
@@ -107,6 +107,8 @@
         self.welcome = self._getresp()
 
     def _create_socket(self, timeout):
+        if timeout is not None and not timeout:
+            raise ValueError('Non-blocking socket (timeout=0) is not supported')
         return socket.create_connection((self.host, self.port), timeout)
 
     def _putline(self, line):
@@ -385,7 +387,7 @@
             for capline in rawcaps:
                 capnm, capargs = _parsecap(capline)
                 caps[capnm] = capargs
-        except error_proto as _err:
+        except error_proto:
             raise error_proto('-ERR CAPA not supported by server')
         return caps
 
diff --git a/Lib/pprint.py b/Lib/pprint.py
index 4bfcc31..7c1118a 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -342,6 +342,33 @@
 
     _dispatch[_types.MappingProxyType.__repr__] = _pprint_mappingproxy
 
+    def _pprint_simplenamespace(self, object, stream, indent, allowance, context, level):
+        if type(object) is _types.SimpleNamespace:
+            # The SimpleNamespace repr is "namespace" instead of the class
+            # name, so we do the same here. For subclasses; use the class name.
+            cls_name = 'namespace'
+        else:
+            cls_name = object.__class__.__name__
+        indent += len(cls_name) + 1
+        delimnl = ',\n' + ' ' * indent
+        items = object.__dict__.items()
+        last_index = len(items) - 1
+
+        stream.write(cls_name + '(')
+        for i, (key, ent) in enumerate(items):
+            stream.write(key)
+            stream.write('=')
+
+            last = i == last_index
+            self._format(ent, stream, indent + len(key) + 1,
+                         allowance if last else 1,
+                         context, level)
+            if not last:
+                stream.write(delimnl)
+        stream.write(')')
+
+    _dispatch[_types.SimpleNamespace.__repr__] = _pprint_simplenamespace
+
     def _format_dict_items(self, items, stream, indent, allowance, context,
                            level):
         write = stream.write
diff --git a/Lib/profile.py b/Lib/profile.py
index 1346297..5cb017ed 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -425,29 +425,13 @@
         return self
 
     # This method is more useful to profile a single function call.
-    def runcall(*args, **kw):
-        if len(args) >= 2:
-            self, func, *args = args
-        elif not args:
-            raise TypeError("descriptor 'runcall' of 'Profile' object "
-                            "needs an argument")
-        elif 'func' in kw:
-            func = kw.pop('func')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'func' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('runcall expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
+    def runcall(self, func, /, *args, **kw):
         self.set_cmd(repr(func))
         sys.setprofile(self.dispatcher)
         try:
             return func(*args, **kw)
         finally:
             sys.setprofile(None)
-    runcall.__text_signature__ = '($self, func, /, *args, **kw)'
 
 
     #******************************************************************
@@ -587,6 +571,11 @@
     (options, args) = parser.parse_args()
     sys.argv[:] = args
 
+    # The script that we're profiling may chdir, so capture the absolute path
+    # to the output file at startup.
+    if options.outfile is not None:
+        options.outfile = os.path.abspath(options.outfile)
+
     if len(args) > 0:
         if options.module:
             import runpy
diff --git a/Lib/pstats.py b/Lib/pstats.py
index 4b419a8..0f93ae0 100644
--- a/Lib/pstats.py
+++ b/Lib/pstats.py
@@ -25,11 +25,13 @@
 import time
 import marshal
 import re
+
 from enum import Enum
 from functools import cmp_to_key
+from dataclasses import dataclass
+from typing import Dict
 
-__all__ = ["Stats", "SortKey"]
-
+__all__ = ["Stats", "SortKey", "FunctionProfile", "StatsProfile"]
 
 class SortKey(str, Enum):
     CALLS = 'calls', 'ncalls'
@@ -43,15 +45,31 @@
     TIME = 'time', 'tottime'
 
     def __new__(cls, *values):
-        obj = str.__new__(cls)
-
-        obj._value_ = values[0]
+        value = values[0]
+        obj = str.__new__(cls, value)
+        obj._value_ = value
         for other_value in values[1:]:
             cls._value2member_map_[other_value] = obj
         obj._all_values = values
         return obj
 
 
+@dataclass(unsafe_hash=True)
+class FunctionProfile:
+    ncalls: int
+    tottime: float
+    percall_tottime: float
+    cumtime: float
+    percall_cumtime: float
+    file_name: str
+    line_number: int
+
+@dataclass(unsafe_hash=True)
+class StatsProfile:
+    '''Class for keeping track of an item in inventory.'''
+    total_tt: float
+    func_profiles: Dict[str, FunctionProfile]
+
 class Stats:
     """This class is used for creating reports from data generated by the
     Profile class.  It is a "friend" of that class, and imports data either
@@ -333,6 +351,41 @@
 
         return new_list, msg
 
+    def get_stats_profile(self):
+        """This method returns an instance of StatsProfile, which contains a mapping
+        of function names to instances of FunctionProfile. Each FunctionProfile
+        instance holds information related to the function's profile such as how
+        long the function took to run, how many times it was called, etc...
+        """
+        func_list = self.fcn_list[:] if self.fcn_list else list(self.stats.keys())
+        if not func_list:
+            return StatsProfile(0, {})
+
+        total_tt = float(f8(self.total_tt))
+        func_profiles = {}
+        stats_profile = StatsProfile(total_tt, func_profiles)
+
+        for func in func_list:
+            cc, nc, tt, ct, callers = self.stats[func]
+            file_name, line_number, func_name = func
+            ncalls = str(nc) if nc == cc else (str(nc) + '/' + str(cc))
+            tottime = float(f8(tt))
+            percall_tottime = -1 if nc == 0 else float(f8(tt/nc))
+            cumtime = float(f8(ct))
+            percall_cumtime = -1 if cc == 0 else float(f8(ct/cc))
+            func_profile = FunctionProfile(
+                ncalls,
+                tottime, # time spent in this function alone
+                percall_tottime,
+                cumtime, # time spent in the function plus all functions that this function called,
+                percall_cumtime,
+                file_name,
+                line_number
+            )
+            func_profiles[func_name] = func_profile
+
+        return stats_profile
+
     def get_print_list(self, sel_list):
         width = self.max_name_len
         if self.fcn_list:
diff --git a/Lib/py_compile.py b/Lib/py_compile.py
index 2173689..a81f493 100644
--- a/Lib/py_compile.py
+++ b/Lib/py_compile.py
@@ -197,12 +197,10 @@
                 compile(filename, doraise=True)
             except PyCompileError as error:
                 rv = 1
-                if quiet < 2:
-                    sys.stderr.write("%s\n" % error.msg)
+                sys.stderr.write("%s\n" % error.msg)
             except OSError as error:
                 rv = 1
-                if quiet < 2:
-                    sys.stderr.write("%s\n" % error)
+                sys.stderr.write("%s\n" % error)
     else:
         for filename in args:
             try:
@@ -210,8 +208,7 @@
             except PyCompileError as error:
                 # return value to indicate at least one failure
                 rv = 1
-                if quiet < 2:
-                    sys.stderr.write("%s\n" % error.msg)
+                sys.stderr.write("%s\n" % error.msg)
     return rv
 
 if __name__ == "__main__":
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
old mode 100644
new mode 100755
index dc3377d..35ef3eb
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -90,9 +90,101 @@
             normdirs.append(normdir)
     return dirs
 
+def _findclass(func):
+    cls = sys.modules.get(func.__module__)
+    if cls is None:
+        return None
+    for name in func.__qualname__.split('.')[:-1]:
+        cls = getattr(cls, name)
+    if not inspect.isclass(cls):
+        return None
+    return cls
+
+def _finddoc(obj):
+    if inspect.ismethod(obj):
+        name = obj.__func__.__name__
+        self = obj.__self__
+        if (inspect.isclass(self) and
+            getattr(getattr(self, name, None), '__func__') is obj.__func__):
+            # classmethod
+            cls = self
+        else:
+            cls = self.__class__
+    elif inspect.isfunction(obj):
+        name = obj.__name__
+        cls = _findclass(obj)
+        if cls is None or getattr(cls, name) is not obj:
+            return None
+    elif inspect.isbuiltin(obj):
+        name = obj.__name__
+        self = obj.__self__
+        if (inspect.isclass(self) and
+            self.__qualname__ + '.' + name == obj.__qualname__):
+            # classmethod
+            cls = self
+        else:
+            cls = self.__class__
+    # Should be tested before isdatadescriptor().
+    elif isinstance(obj, property):
+        func = obj.fget
+        name = func.__name__
+        cls = _findclass(func)
+        if cls is None or getattr(cls, name) is not obj:
+            return None
+    elif inspect.ismethoddescriptor(obj) or inspect.isdatadescriptor(obj):
+        name = obj.__name__
+        cls = obj.__objclass__
+        if getattr(cls, name) is not obj:
+            return None
+        if inspect.ismemberdescriptor(obj):
+            slots = getattr(cls, '__slots__', None)
+            if isinstance(slots, dict) and name in slots:
+                return slots[name]
+    else:
+        return None
+    for base in cls.__mro__:
+        try:
+            doc = _getowndoc(getattr(base, name))
+        except AttributeError:
+            continue
+        if doc is not None:
+            return doc
+    return None
+
+def _getowndoc(obj):
+    """Get the documentation string for an object if it is not
+    inherited from its class."""
+    try:
+        doc = object.__getattribute__(obj, '__doc__')
+        if doc is None:
+            return None
+        if obj is not type:
+            typedoc = type(obj).__doc__
+            if isinstance(typedoc, str) and typedoc == doc:
+                return None
+        return doc
+    except AttributeError:
+        return None
+
+def _getdoc(object):
+    """Get the documentation string for an object.
+
+    All tabs are expanded to spaces.  To clean up docstrings that are
+    indented to line up with blocks of code, any whitespace than can be
+    uniformly removed from the second line onwards is removed."""
+    doc = _getowndoc(object)
+    if doc is None:
+        try:
+            doc = _finddoc(object)
+        except (AttributeError, TypeError):
+            return None
+    if not isinstance(doc, str):
+        return None
+    return inspect.cleandoc(doc)
+
 def getdoc(object):
     """Get the doc string or comments for an object."""
-    result = inspect.getdoc(object) or inspect.getcomments(object)
+    result = _getdoc(object) or inspect.getcomments(object)
     return result and re.sub('^ *\n', '', result.rstrip()) or ''
 
 def splitdoc(doc):
@@ -584,7 +676,7 @@
         escape = escape or self.escape
         results = []
         here = 0
-        pattern = re.compile(r'\b((http|ftp)://\S+[\w/]|'
+        pattern = re.compile(r'\b((http|https|ftp)://\S+[\w/]|'
                                 r'RFC[- ]?(\d+)|'
                                 r'PEP[- ]?(\d+)|'
                                 r'(self\.)?(\w+))')
@@ -825,11 +917,8 @@
                 push(msg)
                 for name, kind, homecls, value in ok:
                     base = self.docother(getattr(object, name), name, mod)
-                    if callable(value) or inspect.isdatadescriptor(value):
-                        doc = getattr(value, "__doc__", None)
-                    else:
-                        doc = None
-                    if doc is None:
+                    doc = getdoc(value)
+                    if not doc:
                         push('<dl><dt>%s</dl>\n' % base)
                     else:
                         doc = self.markup(getdoc(value), self.preformat,
@@ -1309,10 +1398,7 @@
                 hr.maybe()
                 push(msg)
                 for name, kind, homecls, value in ok:
-                    if callable(value) or inspect.isdatadescriptor(value):
-                        doc = getdoc(value)
-                    else:
-                        doc = None
+                    doc = getdoc(value)
                     try:
                         obj = getattr(object, name)
                     except AttributeError:
@@ -1448,8 +1534,10 @@
             chop = maxlen - len(line)
             if chop < 0: repr = repr[:chop] + '...'
         line = (name and self.bold(name) + ' = ' or '') + repr
-        if doc is not None:
-            line += '\n' + self.indent(str(doc))
+        if not doc:
+            doc = getdoc(object)
+        if doc:
+            line += '\n' + self.indent(str(doc)) + '\n'
         return line
 
 class _PlainTextDoc(TextDoc):
@@ -1672,11 +1760,15 @@
     if not (inspect.ismodule(object) or
               inspect.isclass(object) or
               inspect.isroutine(object) or
-              inspect.isdatadescriptor(object)):
+              inspect.isdatadescriptor(object) or
+              _getdoc(object)):
         # If the passed object is a piece of data or an instance,
         # document its available methods instead of its value.
-        object = type(object)
-        desc += ' object'
+        if hasattr(object, '__origin__'):
+            object = object.__origin__
+        else:
+            object = type(object)
+            desc += ' object'
     return title % desc + '\n\n' + renderer.document(object, name)
 
 def doc(thing, title='Python Library Documentation: %s', forceload=0,
@@ -1725,6 +1817,7 @@
         'False': '',
         'None': '',
         'True': '',
+        '__peg_parser__': '',
         'and': 'BOOLEAN',
         'as': 'with',
         'assert': ('assert', ''),
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index 6834657..d8dd8c5 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Mon Jul 20 14:14:54 2020
+# Autogenerated by Sphinx on Mon Dec  7 15:00:07 2020
 topics = {'assert': 'The "assert" statement\n'
            '**********************\n'
            '\n'
@@ -99,27 +99,26 @@
                'assigned,\n'
                '  from left to right, to the corresponding targets.\n'
                '\n'
-               '  * If the target list contains one target prefixed with an\n'
-               '    asterisk, called a “starred” target: The object must be '
-               'an\n'
-               '    iterable with at least as many items as there are targets '
-               'in the\n'
-               '    target list, minus one.  The first items of the iterable '
-               'are\n'
-               '    assigned, from left to right, to the targets before the '
+               '  * If the target list contains one target prefixed with an '
+               'asterisk,\n'
+               '    called a “starred” target: The object must be an iterable '
+               'with at\n'
+               '    least as many items as there are targets in the target '
+               'list, minus\n'
+               '    one.  The first items of the iterable are assigned, from '
+               'left to\n'
+               '    right, to the targets before the starred target.  The '
+               'final items\n'
+               '    of the iterable are assigned to the targets after the '
                'starred\n'
-               '    target.  The final items of the iterable are assigned to '
-               'the\n'
-               '    targets after the starred target.  A list of the remaining '
-               'items\n'
-               '    in the iterable is then assigned to the starred target '
-               '(the list\n'
-               '    can be empty).\n'
+               '    target.  A list of the remaining items in the iterable is '
+               'then\n'
+               '    assigned to the starred target (the list can be empty).\n'
                '\n'
                '  * Else: The object must be an iterable with the same number '
-               'of\n'
-               '    items as there are targets in the target list, and the '
-               'items are\n'
+               'of items\n'
+               '    as there are targets in the target list, and the items '
+               'are\n'
                '    assigned, from left to right, to the corresponding '
                'targets.\n'
                '\n'
@@ -135,10 +134,10 @@
                'in the\n'
                '    current local namespace.\n'
                '\n'
-               '  * Otherwise: the name is bound to the object in the global\n'
-               '    namespace or the outer namespace determined by '
-               '"nonlocal",\n'
-               '    respectively.\n'
+               '  * Otherwise: the name is bound to the object in the global '
+               'namespace\n'
+               '    or the outer namespace determined by "nonlocal", '
+               'respectively.\n'
                '\n'
                '  The name is rebound if it was already bound.  This may cause '
                'the\n'
@@ -225,26 +224,27 @@
                'called with\n'
                '  appropriate arguments.\n'
                '\n'
-               '* If the target is a slicing: The primary expression in the\n'
-               '  reference is evaluated.  It should yield a mutable sequence '
-               'object\n'
-               '  (such as a list).  The assigned object should be a sequence '
-               'object\n'
-               '  of the same type.  Next, the lower and upper bound '
-               'expressions are\n'
-               '  evaluated, insofar they are present; defaults are zero and '
-               'the\n'
-               '  sequence’s length.  The bounds should evaluate to integers. '
-               'If\n'
-               '  either bound is negative, the sequence’s length is added to '
-               'it.  The\n'
-               '  resulting bounds are clipped to lie between zero and the '
+               '* If the target is a slicing: The primary expression in the '
+               'reference\n'
+               '  is evaluated.  It should yield a mutable sequence object '
+               '(such as a\n'
+               '  list).  The assigned object should be a sequence object of '
+               'the same\n'
+               '  type.  Next, the lower and upper bound expressions are '
+               'evaluated,\n'
+               '  insofar they are present; defaults are zero and the '
                'sequence’s\n'
-               '  length, inclusive.  Finally, the sequence object is asked to '
-               'replace\n'
-               '  the slice with the items of the assigned sequence.  The '
-               'length of\n'
-               '  the slice may be different from the length of the assigned '
+               '  length.  The bounds should evaluate to integers. If either '
+               'bound is\n'
+               '  negative, the sequence’s length is added to it.  The '
+               'resulting\n'
+               '  bounds are clipped to lie between zero and the sequence’s '
+               'length,\n'
+               '  inclusive.  Finally, the sequence object is asked to replace '
+               'the\n'
+               '  slice with the items of the assigned sequence.  The length '
+               'of the\n'
+               '  slice may be different from the length of the assigned '
                'sequence,\n'
                '  thus changing the length of the target sequence, if the '
                'target\n'
@@ -514,8 +514,8 @@
           'is semantically equivalent to:\n'
           '\n'
           '   manager = (EXPRESSION)\n'
-          '   aexit = type(manager).__aexit__\n'
           '   aenter = type(manager).__aenter__\n'
+          '   aexit = type(manager).__aexit__\n'
           '   value = await aenter(manager)\n'
           '   hit_except = False\n'
           '\n'
@@ -544,13 +544,17 @@
           '\n'
           '-[ Footnotes ]-\n'
           '\n'
-          '[1] The exception is propagated to the invocation stack unless\n'
-          '    there is a "finally" clause which happens to raise another\n'
-          '    exception. That new exception causes the old one to be lost.\n'
+          '[1] The exception is propagated to the invocation stack unless '
+          'there\n'
+          '    is a "finally" clause which happens to raise another '
+          'exception.\n'
+          '    That new exception causes the old one to be lost.\n'
           '\n'
-          '[2] A string literal appearing as the first statement in the\n'
-          '    function body is transformed into the function’s "__doc__"\n'
-          '    attribute and therefore the function’s *docstring*.\n'
+          '[2] A string literal appearing as the first statement in the '
+          'function\n'
+          '    body is transformed into the function’s "__doc__" attribute '
+          'and\n'
+          '    therefore the function’s *docstring*.\n'
           '\n'
           '[3] A string literal appearing as the first statement in the class\n'
           '    body is transformed into the namespace’s "__doc__" item and\n'
@@ -688,11 +692,18 @@
                      'needs, for\n'
                      '   example, "object.__getattribute__(self, name)".\n'
                      '\n'
-                     '   Note: This method may still be bypassed when looking '
-                     'up special\n'
-                     '     methods as the result of implicit invocation via '
-                     'language syntax\n'
-                     '     or built-in functions. See Special method lookup.\n'
+                     '   Note:\n'
+                     '\n'
+                     '     This method may still be bypassed when looking up '
+                     'special methods\n'
+                     '     as the result of implicit invocation via language '
+                     'syntax or\n'
+                     '     built-in functions. See Special method lookup.\n'
+                     '\n'
+                     '   For certain sensitive attribute accesses, raises an '
+                     'auditing event\n'
+                     '   "object.__getattr__" with arguments "obj" and '
+                     '"name".\n'
                      '\n'
                      'object.__setattr__(self, name, value)\n'
                      '\n'
@@ -710,6 +721,11 @@
                      'for example,\n'
                      '   "object.__setattr__(self, name, value)".\n'
                      '\n'
+                     '   For certain sensitive attribute assignments, raises '
+                     'an auditing\n'
+                     '   event "object.__setattr__" with arguments "obj", '
+                     '"name", "value".\n'
+                     '\n'
                      'object.__delattr__(self, name)\n'
                      '\n'
                      '   Like "__setattr__()" but for attribute deletion '
@@ -718,6 +734,11 @@
                      'obj.name" is\n'
                      '   meaningful for the object.\n'
                      '\n'
+                     '   For certain sensitive attribute deletions, raises an '
+                     'auditing event\n'
+                     '   "object.__delattr__" with arguments "obj" and '
+                     '"name".\n'
+                     '\n'
                      'object.__dir__(self)\n'
                      '\n'
                      '   Called when "dir()" is called on the object. A '
@@ -776,15 +797,16 @@
                      '\n'
                      '   sys.modules[__name__].__class__ = VerboseModule\n'
                      '\n'
-                     'Note: Defining module "__getattr__" and setting module '
-                     '"__class__"\n'
-                     '  only affect lookups made using the attribute access '
-                     'syntax –\n'
-                     '  directly accessing the module globals (whether by code '
-                     'within the\n'
-                     '  module, or via a reference to the module’s globals '
-                     'dictionary) is\n'
-                     '  unaffected.\n'
+                     'Note:\n'
+                     '\n'
+                     '  Defining module "__getattr__" and setting module '
+                     '"__class__" only\n'
+                     '  affect lookups made using the attribute access syntax '
+                     '– directly\n'
+                     '  accessing the module globals (whether by code within '
+                     'the module, or\n'
+                     '  via a reference to the module’s globals dictionary) is '
+                     'unaffected.\n'
                      '\n'
                      'Changed in version 3.5: "__class__" module attribute is '
                      'now writable.\n'
@@ -867,12 +889,14 @@
                      'created. The\n'
                      '   descriptor has been assigned to *name*.\n'
                      '\n'
-                     '   Note: "__set_name__()" is only called implicitly as '
-                     'part of the\n'
-                     '     "type" constructor, so it will need to be called '
-                     'explicitly with\n'
-                     '     the appropriate parameters when a descriptor is '
-                     'added to a class\n'
+                     '   Note:\n'
+                     '\n'
+                     '     "__set_name__()" is only called implicitly as part '
+                     'of the "type"\n'
+                     '     constructor, so it will need to be called '
+                     'explicitly with the\n'
+                     '     appropriate parameters when a descriptor is added '
+                     'to a class\n'
                      '     after initial creation:\n'
                      '\n'
                      '        class A:\n'
@@ -979,12 +1003,13 @@
                      'define both\n'
                      '"__get__()" and "__set__()", while non-data descriptors '
                      'have just the\n'
-                     '"__get__()" method.  Data descriptors with "__set__()" '
-                     'and "__get__()"\n'
-                     'defined always override a redefinition in an instance '
-                     'dictionary.  In\n'
-                     'contrast, non-data descriptors can be overridden by '
-                     'instances.\n'
+                     '"__get__()" method.  Data descriptors with "__get__()" '
+                     'and "__set__()"\n'
+                     '(and/or "__delete__()") defined always override a '
+                     'redefinition in an\n'
+                     'instance dictionary.  In contrast, non-data descriptors '
+                     'can be\n'
+                     'overridden by instances.\n'
                      '\n'
                      'Python methods (including "staticmethod()" and '
                      '"classmethod()") are\n'
@@ -1032,10 +1057,9 @@
                      '--------------------------\n'
                      '\n'
                      '* When inheriting from a class without *__slots__*, the '
-                     '*__dict__*\n'
-                     '  and *__weakref__* attribute of the instances will '
-                     'always be\n'
-                     '  accessible.\n'
+                     '*__dict__* and\n'
+                     '  *__weakref__* attribute of the instances will always '
+                     'be accessible.\n'
                      '\n'
                      '* Without a *__dict__* variable, instances cannot be '
                      'assigned new\n'
@@ -1050,14 +1074,12 @@
                      '  declaration.\n'
                      '\n'
                      '* Without a *__weakref__* variable for each instance, '
-                     'classes\n'
-                     '  defining *__slots__* do not support weak references to '
-                     'its\n'
-                     '  instances. If weak reference support is needed, then '
-                     'add\n'
-                     '  "\'__weakref__\'" to the sequence of strings in the '
-                     '*__slots__*\n'
-                     '  declaration.\n'
+                     'classes defining\n'
+                     '  *__slots__* do not support weak references to its '
+                     'instances. If weak\n'
+                     '  reference support is needed, then add '
+                     '"\'__weakref__\'" to the\n'
+                     '  sequence of strings in the *__slots__* declaration.\n'
                      '\n'
                      '* *__slots__* are implemented at the class level by '
                      'creating\n'
@@ -1070,24 +1092,23 @@
                      '  attribute would overwrite the descriptor assignment.\n'
                      '\n'
                      '* The action of a *__slots__* declaration is not limited '
-                     'to the\n'
-                     '  class where it is defined.  *__slots__* declared in '
-                     'parents are\n'
-                     '  available in child classes. However, child subclasses '
-                     'will get a\n'
-                     '  *__dict__* and *__weakref__* unless they also define '
-                     '*__slots__*\n'
-                     '  (which should only contain names of any *additional* '
-                     'slots).\n'
+                     'to the class\n'
+                     '  where it is defined.  *__slots__* declared in parents '
+                     'are available\n'
+                     '  in child classes. However, child subclasses will get a '
+                     '*__dict__*\n'
+                     '  and *__weakref__* unless they also define *__slots__* '
+                     '(which should\n'
+                     '  only contain names of any *additional* slots).\n'
                      '\n'
                      '* If a class defines a slot also defined in a base '
-                     'class, the\n'
-                     '  instance variable defined by the base class slot is '
-                     'inaccessible\n'
-                     '  (except by retrieving its descriptor directly from the '
-                     'base class).\n'
-                     '  This renders the meaning of the program undefined.  In '
-                     'the future, a\n'
+                     'class, the instance\n'
+                     '  variable defined by the base class slot is '
+                     'inaccessible (except by\n'
+                     '  retrieving its descriptor directly from the base '
+                     'class). This\n'
+                     '  renders the meaning of the program undefined.  In the '
+                     'future, a\n'
                      '  check may be added to prevent this.\n'
                      '\n'
                      '* Nonempty *__slots__* does not work for classes derived '
@@ -1096,9 +1117,9 @@
                      '"bytes" and "tuple".\n'
                      '\n'
                      '* Any non-string iterable may be assigned to '
-                     '*__slots__*. Mappings\n'
-                     '  may also be used; however, in the future, special '
-                     'meaning may be\n'
+                     '*__slots__*. Mappings may\n'
+                     '  also be used; however, in the future, special meaning '
+                     'may be\n'
                      '  assigned to the values corresponding to each key.\n'
                      '\n'
                      '* *__class__* assignment works only if both classes have '
@@ -1114,9 +1135,9 @@
                      '  raise "TypeError".\n'
                      '\n'
                      '* If an iterator is used for *__slots__* then a '
-                     'descriptor is\n'
-                     '  created for each of the iterator’s values. However, '
-                     'the *__slots__*\n'
+                     'descriptor is created\n'
+                     '  for each of the iterator’s values. However, the '
+                     '*__slots__*\n'
                      '  attribute will be an empty iterator.\n',
  'attribute-references': 'Attribute references\n'
                          '********************\n'
@@ -1458,8 +1479,8 @@
                    '\n'
                    '   Called when the instance is “called” as a function; if '
                    'this method\n'
-                   '   is defined, "x(arg1, arg2, ...)" is a shorthand for\n'
-                   '   "x.__call__(arg1, arg2, ...)".\n',
+                   '   is defined, "x(arg1, arg2, ...)" roughly translates to\n'
+                   '   "type(x).__call__(x, arg1, ...)".\n',
  'calls': 'Calls\n'
           '*****\n'
           '\n'
@@ -1716,6 +1737,10 @@
           'for\n'
           'function decorators.  The result is then bound to the class name.\n'
           '\n'
+          'Changed in version 3.9: Classes may be decorated with any valid\n'
+          '"assignment_expression". Previously, the grammar was much more\n'
+          'restrictive; see **PEP 614** for details.\n'
+          '\n'
           '**Programmer’s note:** Variables defined in the class definition '
           'are\n'
           'class attributes; they are shared by instances.  Instance '
@@ -1877,10 +1902,10 @@
                 '  != x" is true.  This behavior is compliant with IEEE 754.\n'
                 '\n'
                 '* "None" and "NotImplemented" are singletons.  **PEP 8** '
-                'advises\n'
-                '  that comparisons for singletons should always be done with '
-                '"is" or\n'
-                '  "is not", never the equality operators.\n'
+                'advises that\n'
+                '  comparisons for singletons should always be done with "is" '
+                'or "is\n'
+                '  not", never the equality operators.\n'
                 '\n'
                 '* Binary sequences (instances of "bytes" or "bytearray") can '
                 'be\n'
@@ -1896,15 +1921,15 @@
                 '\n'
                 '  Strings and binary sequences cannot be directly compared.\n'
                 '\n'
-                '* Sequences (instances of "tuple", "list", or "range") can '
-                'be\n'
-                '  compared only within each of their types, with the '
-                'restriction that\n'
-                '  ranges do not support order comparison.  Equality '
-                'comparison across\n'
-                '  these types results in inequality, and ordering comparison '
-                'across\n'
-                '  these types raises "TypeError".\n'
+                '* Sequences (instances of "tuple", "list", or "range") can be '
+                'compared\n'
+                '  only within each of their types, with the restriction that '
+                'ranges do\n'
+                '  not support order comparison.  Equality comparison across '
+                'these\n'
+                '  types results in inequality, and ordering comparison across '
+                'these\n'
+                '  types raises "TypeError".\n'
                 '\n'
                 '  Sequences compare lexicographically using comparison of\n'
                 '  corresponding elements.  The built-in containers typically '
@@ -1928,8 +1953,8 @@
                 '    false because the type is not the same).\n'
                 '\n'
                 '  * Collections that support order comparison are ordered the '
-                'same\n'
-                '    as their first unequal elements (for example, "[1,2,x] <= '
+                'same as\n'
+                '    their first unequal elements (for example, "[1,2,x] <= '
                 '[1,2,y]"\n'
                 '    has the same value as "x <= y").  If a corresponding '
                 'element does\n'
@@ -1947,8 +1972,8 @@
                 '"TypeError".\n'
                 '\n'
                 '* Sets (instances of "set" or "frozenset") can be compared '
-                'within\n'
-                '  and across their types.\n'
+                'within and\n'
+                '  across their types.\n'
                 '\n'
                 '  They define order comparison operators to mean subset and '
                 'superset\n'
@@ -1967,8 +1992,8 @@
                 '  Comparison of sets enforces reflexivity of its elements.\n'
                 '\n'
                 '* Most other built-in types have no comparison methods '
-                'implemented,\n'
-                '  so they inherit the default comparison behavior.\n'
+                'implemented, so\n'
+                '  they inherit the default comparison behavior.\n'
                 '\n'
                 'User-defined classes that customize their comparison behavior '
                 'should\n'
@@ -2017,10 +2042,10 @@
                 '  "total_ordering()" decorator.\n'
                 '\n'
                 '* The "hash()" result should be consistent with equality. '
-                'Objects\n'
-                '  that are equal should either have the same hash value, or '
-                'be marked\n'
-                '  as unhashable.\n'
+                'Objects that\n'
+                '  are equal should either have the same hash value, or be '
+                'marked as\n'
+                '  unhashable.\n'
                 '\n'
                 'Python does not enforce these consistency rules. In fact, '
                 'the\n'
@@ -2294,10 +2319,11 @@
              ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, '
              '2]".\n'
              '\n'
-             'Note: There is a subtlety when the sequence is being modified by '
-             'the\n'
-             '  loop (this can only occur for mutable sequences, e.g. lists).  '
-             'An\n'
+             'Note:\n'
+             '\n'
+             '  There is a subtlety when the sequence is being modified by the '
+             'loop\n'
+             '  (this can only occur for mutable sequences, e.g. lists).  An\n'
              '  internal counter is used to keep track of which item is used '
              'next,\n'
              '  and this is incremented on each iteration.  When this counter '
@@ -2520,8 +2546,8 @@
              'follows:\n'
              '\n'
              '1. The context expression (the expression given in the '
-             '"with_item")\n'
-             '   is evaluated to obtain a context manager.\n'
+             '"with_item") is\n'
+             '   evaluated to obtain a context manager.\n'
              '\n'
              '2. The context manager’s "__enter__()" is loaded for later use.\n'
              '\n'
@@ -2529,13 +2555,15 @@
              '\n'
              '4. The context manager’s "__enter__()" method is invoked.\n'
              '\n'
-             '5. If a target was included in the "with" statement, the return\n'
-             '   value from "__enter__()" is assigned to it.\n'
+             '5. If a target was included in the "with" statement, the return '
+             'value\n'
+             '   from "__enter__()" is assigned to it.\n'
              '\n'
-             '   Note: The "with" statement guarantees that if the '
-             '"__enter__()"\n'
-             '     method returns without an error, then "__exit__()" will '
-             'always be\n'
+             '   Note:\n'
+             '\n'
+             '     The "with" statement guarantees that if the "__enter__()" '
+             'method\n'
+             '     returns without an error, then "__exit__()" will always be\n'
              '     called. Thus, if an error occurs during the assignment to '
              'the\n'
              '     target list, it will be treated the same as an error '
@@ -2625,8 +2653,8 @@
              '[parameter_list] ")"\n'
              '               ["->" expression] ":" suite\n'
              '   decorators                ::= decorator+\n'
-             '   decorator                 ::= "@" dotted_name ["(" '
-             '[argument_list [","]] ")"] NEWLINE\n'
+             '   decorator                 ::= "@" assignment_expression '
+             'NEWLINE\n'
              '   dotted_name               ::= identifier ("." identifier)*\n'
              '   parameter_list            ::= defparameter ("," '
              'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n'
@@ -2680,6 +2708,11 @@
              'the name\n'
              '"func".\n'
              '\n'
+             'Changed in version 3.9: Functions may be decorated with any '
+             'valid\n'
+             '"assignment_expression". Previously, the grammar was much more\n'
+             'restrictive; see **PEP 614** for details.\n'
+             '\n'
              'When one or more *parameters* have the form *parameter* "="\n'
              '*expression*, the function is said to have “default parameter '
              'values.”\n'
@@ -2881,6 +2914,10 @@
              'function decorators.  The result is then bound to the class '
              'name.\n'
              '\n'
+             'Changed in version 3.9: Classes may be decorated with any valid\n'
+             '"assignment_expression". Previously, the grammar was much more\n'
+             'restrictive; see **PEP 614** for details.\n'
+             '\n'
              '**Programmer’s note:** Variables defined in the class definition '
              'are\n'
              'class attributes; they are shared by instances.  Instance '
@@ -3009,8 +3046,8 @@
              'is semantically equivalent to:\n'
              '\n'
              '   manager = (EXPRESSION)\n'
-             '   aexit = type(manager).__aexit__\n'
              '   aenter = type(manager).__aenter__\n'
+             '   aexit = type(manager).__aexit__\n'
              '   value = await aenter(manager)\n'
              '   hit_except = False\n'
              '\n'
@@ -3040,14 +3077,17 @@
              '\n'
              '-[ Footnotes ]-\n'
              '\n'
-             '[1] The exception is propagated to the invocation stack unless\n'
-             '    there is a "finally" clause which happens to raise another\n'
-             '    exception. That new exception causes the old one to be '
-             'lost.\n'
+             '[1] The exception is propagated to the invocation stack unless '
+             'there\n'
+             '    is a "finally" clause which happens to raise another '
+             'exception.\n'
+             '    That new exception causes the old one to be lost.\n'
              '\n'
-             '[2] A string literal appearing as the first statement in the\n'
-             '    function body is transformed into the function’s "__doc__"\n'
-             '    attribute and therefore the function’s *docstring*.\n'
+             '[2] A string literal appearing as the first statement in the '
+             'function\n'
+             '    body is transformed into the function’s "__doc__" attribute '
+             'and\n'
+             '    therefore the function’s *docstring*.\n'
              '\n'
              '[3] A string literal appearing as the first statement in the '
              'class\n'
@@ -3146,8 +3186,8 @@
                 '  complex;\n'
                 '\n'
                 '* otherwise, if either argument is a floating point number, '
-                'the\n'
-                '  other is converted to floating point;\n'
+                'the other\n'
+                '  is converted to floating point;\n'
                 '\n'
                 '* otherwise, both must be integers and no conversion is '
                 'necessary.\n'
@@ -3257,7 +3297,9 @@
                   'for\n'
                   '   objects that still exist when the interpreter exits.\n'
                   '\n'
-                  '   Note: "del x" doesn’t directly call "x.__del__()" — the '
+                  '   Note:\n'
+                  '\n'
+                  '     "del x" doesn’t directly call "x.__del__()" — the '
                   'former\n'
                   '     decrements the reference count for "x" by one, and the '
                   'latter is\n'
@@ -3281,13 +3323,15 @@
                   '\n'
                   '   See also: Documentation for the "gc" module.\n'
                   '\n'
-                  '   Warning: Due to the precarious circumstances under '
-                  'which\n'
-                  '     "__del__()" methods are invoked, exceptions that occur '
-                  'during\n'
-                  '     their execution are ignored, and a warning is printed '
-                  'to\n'
-                  '     "sys.stderr" instead. In particular:\n'
+                  '   Warning:\n'
+                  '\n'
+                  '     Due to the precarious circumstances under which '
+                  '"__del__()"\n'
+                  '     methods are invoked, exceptions that occur during '
+                  'their execution\n'
+                  '     are ignored, and a warning is printed to "sys.stderr" '
+                  'instead.\n'
+                  '     In particular:\n'
                   '\n'
                   '     * "__del__()" can be invoked when arbitrary code is '
                   'being\n'
@@ -3300,22 +3344,20 @@
                   '       that gets interrupted to execute "__del__()".\n'
                   '\n'
                   '     * "__del__()" can be executed during interpreter '
-                  'shutdown.  As\n'
-                  '       a consequence, the global variables it needs to '
-                  'access\n'
-                  '       (including other modules) may already have been '
-                  'deleted or set\n'
-                  '       to "None". Python guarantees that globals whose name '
-                  'begins\n'
-                  '       with a single underscore are deleted from their '
-                  'module before\n'
-                  '       other globals are deleted; if no other references to '
-                  'such\n'
-                  '       globals exist, this may help in assuring that '
-                  'imported modules\n'
-                  '       are still available at the time when the "__del__()" '
-                  'method is\n'
-                  '       called.\n'
+                  'shutdown.  As a\n'
+                  '       consequence, the global variables it needs to access '
+                  '(including\n'
+                  '       other modules) may already have been deleted or set '
+                  'to "None".\n'
+                  '       Python guarantees that globals whose name begins '
+                  'with a single\n'
+                  '       underscore are deleted from their module before '
+                  'other globals\n'
+                  '       are deleted; if no other references to such globals '
+                  'exist, this\n'
+                  '       may help in assuring that imported modules are still '
+                  'available\n'
+                  '       at the time when the "__del__()" method is called.\n'
                   '\n'
                   'object.__repr__(self)\n'
                   '\n'
@@ -3400,7 +3442,7 @@
                   '\n'
                   '   Changed in version 3.7: "object.__format__(x, \'\')" is '
                   'now\n'
-                  '   equivalent to "str(x)" rather than "format(str(self), '
+                  '   equivalent to "str(x)" rather than "format(str(x), '
                   '\'\')".\n'
                   '\n'
                   'object.__lt__(self, other)\n'
@@ -3434,16 +3476,21 @@
                   '   on the value to determine if the result is true or '
                   'false.\n'
                   '\n'
-                  '   By default, "__ne__()" delegates to "__eq__()" and '
-                  'inverts the\n'
-                  '   result unless it is "NotImplemented".  There are no '
-                  'other implied\n'
-                  '   relationships among the comparison operators, for '
-                  'example, the\n'
-                  '   truth of "(x<y or x==y)" does not imply "x<=y". To '
-                  'automatically\n'
-                  '   generate ordering operations from a single root '
-                  'operation, see\n'
+                  '   By default, "object" implements "__eq__()" by using '
+                  '"is", returning\n'
+                  '   "NotImplemented" in the case of a false comparison: '
+                  '"True if x is y\n'
+                  '   else NotImplemented". For "__ne__()", by default it '
+                  'delegates to\n'
+                  '   "__eq__()" and inverts the result unless it is '
+                  '"NotImplemented".\n'
+                  '   There are no other implied relationships among the '
+                  'comparison\n'
+                  '   operators or default implementations; for example, the '
+                  'truth of\n'
+                  '   "(x<y or x==y)" does not imply "x<=y". To automatically '
+                  'generate\n'
+                  '   ordering operations from a single root operation, see\n'
                   '   "functools.total_ordering()".\n'
                   '\n'
                   '   See the paragraph on "__hash__()" for some important '
@@ -3491,19 +3538,21 @@
                   '      def __hash__(self):\n'
                   '          return hash((self.name, self.nick, self.color))\n'
                   '\n'
-                  '   Note: "hash()" truncates the value returned from an '
-                  'object’s\n'
-                  '     custom "__hash__()" method to the size of a '
-                  '"Py_ssize_t".  This\n'
-                  '     is typically 8 bytes on 64-bit builds and 4 bytes on '
-                  '32-bit\n'
-                  '     builds. If an object’s   "__hash__()" must '
-                  'interoperate on builds\n'
-                  '     of different bit sizes, be sure to check the width on '
-                  'all\n'
-                  '     supported builds.  An easy way to do this is with '
-                  '"python -c\n'
-                  '     "import sys; print(sys.hash_info.width)"".\n'
+                  '   Note:\n'
+                  '\n'
+                  '     "hash()" truncates the value returned from an object’s '
+                  'custom\n'
+                  '     "__hash__()" method to the size of a "Py_ssize_t".  '
+                  'This is\n'
+                  '     typically 8 bytes on 64-bit builds and 4 bytes on '
+                  '32-bit builds.\n'
+                  '     If an object’s   "__hash__()" must interoperate on '
+                  'builds of\n'
+                  '     different bit sizes, be sure to check the width on all '
+                  'supported\n'
+                  '     builds.  An easy way to do this is with "python -c '
+                  '"import sys;\n'
+                  '     print(sys.hash_info.width)"".\n'
                   '\n'
                   '   If a class does not define an "__eq__()" method it '
                   'should not\n'
@@ -3561,22 +3610,24 @@
                   '   hashable by an "isinstance(obj, '
                   'collections.abc.Hashable)" call.\n'
                   '\n'
-                  '   Note: By default, the "__hash__()" values of str and '
-                  'bytes\n'
-                  '     objects are “salted” with an unpredictable random '
-                  'value.\n'
-                  '     Although they remain constant within an individual '
-                  'Python\n'
-                  '     process, they are not predictable between repeated '
-                  'invocations of\n'
-                  '     Python.This is intended to provide protection against '
-                  'a denial-\n'
-                  '     of-service caused by carefully-chosen inputs that '
-                  'exploit the\n'
-                  '     worst case performance of a dict insertion, O(n^2) '
-                  'complexity.\n'
-                  '     See '
-                  'http://www.ocert.org/advisories/ocert-2011-003.html for\n'
+                  '   Note:\n'
+                  '\n'
+                  '     By default, the "__hash__()" values of str and bytes '
+                  'objects are\n'
+                  '     “salted” with an unpredictable random value.  Although '
+                  'they\n'
+                  '     remain constant within an individual Python process, '
+                  'they are not\n'
+                  '     predictable between repeated invocations of '
+                  'Python.This is\n'
+                  '     intended to provide protection against a '
+                  'denial-of-service caused\n'
+                  '     by carefully-chosen inputs that exploit the worst '
+                  'case\n'
+                  '     performance of a dict insertion, O(n^2) complexity.  '
+                  'See\n'
+                  '     http://www.ocert.org/advisories/ocert-2011-003.html '
+                  'for\n'
                   '     details.Changing hash values affects the iteration '
                   'order of sets.\n'
                   '     Python has never made guarantees about this ordering '
@@ -3966,7 +4017,7 @@
              'is\n'
              '   first hit. The arguments are the same as for "break".\n'
              '\n'
-             'cl(ear) [filename:lineno | bpnumber [bpnumber ...]]\n'
+             'cl(ear) [filename:lineno | bpnumber ...]\n'
              '\n'
              '   With a *filename:lineno* argument, clear all the breakpoints '
              'at\n'
@@ -3976,7 +4027,7 @@
              'first\n'
              '   ask confirmation).\n'
              '\n'
-             'disable [bpnumber [bpnumber ...]]\n'
+             'disable [bpnumber ...]\n'
              '\n'
              '   Disable the breakpoints given as a space separated list of\n'
              '   breakpoint numbers.  Disabling a breakpoint means it cannot '
@@ -3985,7 +4036,7 @@
              'breakpoint, it\n'
              '   remains in the list of breakpoints and can be (re-)enabled.\n'
              '\n'
-             'enable [bpnumber [bpnumber ...]]\n'
+             'enable [bpnumber ...]\n'
              '\n'
              '   Enable the breakpoints specified.\n'
              '\n'
@@ -4156,9 +4207,11 @@
              'its\n'
              '   value.\n'
              '\n'
-             '   Note: "print()" can also be used, but is not a debugger '
-             'command —\n'
-             '     this executes the Python "print()" function.\n'
+             '   Note:\n'
+             '\n'
+             '     "print()" can also be used, but is not a debugger command — '
+             'this\n'
+             '     executes the Python "print()" function.\n'
              '\n'
              'pp expression\n'
              '\n'
@@ -4290,8 +4343,8 @@
              '-[ Footnotes ]-\n'
              '\n'
              '[1] Whether a frame is considered to originate in a certain '
-             'module\n'
-             '    is determined by the "__name__" in the frame globals.\n',
+             'module is\n'
+             '    determined by the "__name__" in the frame globals.\n',
  'del': 'The "del" statement\n'
         '*******************\n'
         '\n'
@@ -4471,13 +4524,15 @@
                'about the\n'
                'exceptional condition.\n'
                '\n'
-               'Note: Exception messages are not part of the Python API.  '
-               'Their\n'
-               '  contents may change from one version of Python to the next '
-               'without\n'
-               '  warning and should not be relied on by code which will run '
-               'under\n'
-               '  multiple versions of the interpreter.\n'
+               'Note:\n'
+               '\n'
+               '  Exception messages are not part of the Python API.  Their '
+               'contents\n'
+               '  may change from one version of Python to the next without '
+               'warning\n'
+               '  and should not be relied on by code which will run under '
+               'multiple\n'
+               '  versions of the interpreter.\n'
                '\n'
                'See also the description of the "try" statement in section The '
                'try\n'
@@ -4487,10 +4542,9 @@
                '-[ Footnotes ]-\n'
                '\n'
                '[1] This limitation occurs because the code that is executed '
-               'by\n'
-               '    these operations is not available at the time the module '
-               'is\n'
-               '    compiled.\n',
+               'by these\n'
+               '    operations is not available at the time the module is '
+               'compiled.\n',
  'execmodel': 'Execution model\n'
               '***************\n'
               '\n'
@@ -4512,9 +4566,13 @@
               '(a\n'
               'command specified on the interpreter command line with the '
               '"-c"\n'
-              'option) is a code block.  The string argument passed to the '
-              'built-in\n'
-              'functions "eval()" and "exec()" is a code block.\n'
+              'option) is a code block. A module run as a top level script (as '
+              'module\n'
+              '"__main__") from the command line using a "-m" argument is also '
+              'a code\n'
+              'block. The string argument passed to the built-in functions '
+              '"eval()"\n'
+              'and "exec()" is a code block.\n'
               '\n'
               'A code block is executed in an *execution frame*.  A frame '
               'contains\n'
@@ -4792,13 +4850,15 @@
               'about the\n'
               'exceptional condition.\n'
               '\n'
-              'Note: Exception messages are not part of the Python API.  '
-              'Their\n'
-              '  contents may change from one version of Python to the next '
-              'without\n'
-              '  warning and should not be relied on by code which will run '
-              'under\n'
-              '  multiple versions of the interpreter.\n'
+              'Note:\n'
+              '\n'
+              '  Exception messages are not part of the Python API.  Their '
+              'contents\n'
+              '  may change from one version of Python to the next without '
+              'warning\n'
+              '  and should not be relied on by code which will run under '
+              'multiple\n'
+              '  versions of the interpreter.\n'
               '\n'
               'See also the description of the "try" statement in section The '
               'try\n'
@@ -4807,11 +4867,10 @@
               '\n'
               '-[ Footnotes ]-\n'
               '\n'
-              '[1] This limitation occurs because the code that is executed '
-              'by\n'
-              '    these operations is not available at the time the module '
-              'is\n'
-              '    compiled.\n',
+              '[1] This limitation occurs because the code that is executed by '
+              'these\n'
+              '    operations is not available at the time the module is '
+              'compiled.\n',
  'exprlists': 'Expression lists\n'
               '****************\n'
               '\n'
@@ -4930,8 +4989,11 @@
         'i\n'
         ':= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n'
         '\n'
-        'Note: There is a subtlety when the sequence is being modified by the\n'
-        '  loop (this can only occur for mutable sequences, e.g. lists).  An\n'
+        'Note:\n'
+        '\n'
+        '  There is a subtlety when the sequence is being modified by the '
+        'loop\n'
+        '  (this can only occur for mutable sequences, e.g. lists).  An\n'
         '  internal counter is used to keep track of which item is used next,\n'
         '  and this is incremented on each iteration.  When this counter has\n'
         '  reached the length of the sequence the loop terminates.  This '
@@ -5245,24 +5307,23 @@
                   'for the\n'
                   'conversion.  The alternate form is defined differently for '
                   'different\n'
-                  'types.  This option is only valid for integer, float, '
-                  'complex and\n'
-                  'Decimal types. For integers, when binary, octal, or '
-                  'hexadecimal output\n'
-                  'is used, this option adds the prefix respective "\'0b\'", '
-                  '"\'0o\'", or\n'
-                  '"\'0x\'" to the output value. For floats, complex and '
-                  'Decimal the\n'
-                  'alternate form causes the result of the conversion to '
-                  'always contain a\n'
-                  'decimal-point character, even if no digits follow it. '
-                  'Normally, a\n'
-                  'decimal-point character appears in the result of these '
-                  'conversions\n'
-                  'only if a digit follows it. In addition, for "\'g\'" and '
-                  '"\'G\'"\n'
-                  'conversions, trailing zeros are not removed from the '
-                  'result.\n'
+                  'types.  This option is only valid for integer, float and '
+                  'complex\n'
+                  'types. For integers, when binary, octal, or hexadecimal '
+                  'output is\n'
+                  'used, this option adds the prefix respective "\'0b\'", '
+                  '"\'0o\'", or "\'0x\'"\n'
+                  'to the output value. For float and complex the alternate '
+                  'form causes\n'
+                  'the result of the conversion to always contain a '
+                  'decimal-point\n'
+                  'character, even if no digits follow it. Normally, a '
+                  'decimal-point\n'
+                  'character appears in the result of these conversions only '
+                  'if a digit\n'
+                  'follows it. In addition, for "\'g\'" and "\'G\'" '
+                  'conversions, trailing\n'
+                  'zeros are not removed from the result.\n'
                   '\n'
                   'The "\',\'" option signals the use of a comma for a '
                   'thousands separator.\n'
@@ -5400,9 +5461,8 @@
                   'the integer\n'
                   'to a floating point number before formatting.\n'
                   '\n'
-                  'The available presentation types for floating point and '
-                  'decimal values\n'
-                  'are:\n'
+                  'The available presentation types for "float" and "Decimal" '
+                  'values are:\n'
                   '\n'
                   '   '
                   '+-----------+------------------------------------------------------------+\n'
@@ -5411,24 +5471,50 @@
                   '|\n'
                   '   '
                   '|===========|============================================================|\n'
-                  '   | "\'e\'"     | Exponent notation. Prints the number in '
-                  'scientific         |\n'
-                  '   |           | notation using the letter ‘e’ to indicate '
-                  'the exponent.    |\n'
-                  '   |           | The default precision is '
-                  '"6".                              |\n'
+                  '   | "\'e\'"     | Scientific notation. For a given '
+                  'precision "p", formats    |\n'
+                  '   |           | the number in scientific notation with the '
+                  'letter ‘e’      |\n'
+                  '   |           | separating the coefficient from the '
+                  'exponent. The          |\n'
+                  '   |           | coefficient has one digit before and "p" '
+                  'digits after the  |\n'
+                  '   |           | decimal point, for a total of "p + 1" '
+                  'significant digits.  |\n'
+                  '   |           | With no precision given, uses a precision '
+                  'of "6" digits    |\n'
+                  '   |           | after the decimal point for "float", and '
+                  'shows all         |\n'
+                  '   |           | coefficient digits for "Decimal". If no '
+                  'digits follow the  |\n'
+                  '   |           | decimal point, the decimal point is also '
+                  'removed unless    |\n'
+                  '   |           | the "#" option is '
+                  'used.                                    |\n'
                   '   '
                   '+-----------+------------------------------------------------------------+\n'
-                  '   | "\'E\'"     | Exponent notation. Same as "\'e\'" '
-                  'except it uses an upper   |\n'
+                  '   | "\'E\'"     | Scientific notation. Same as "\'e\'" '
+                  'except it uses an upper |\n'
                   '   |           | case ‘E’ as the separator '
                   'character.                       |\n'
                   '   '
                   '+-----------+------------------------------------------------------------+\n'
-                  '   | "\'f\'"     | Fixed-point notation. Displays the '
-                  'number as a fixed-point |\n'
-                  '   |           | number. The default precision is '
-                  '"6".                      |\n'
+                  '   | "\'f\'"     | Fixed-point notation. For a given '
+                  'precision "p", formats   |\n'
+                  '   |           | the number as a decimal number with '
+                  'exactly "p" digits     |\n'
+                  '   |           | following the decimal point. With no '
+                  'precision given, uses |\n'
+                  '   |           | a precision of "6" digits after the '
+                  'decimal point for      |\n'
+                  '   |           | "float", and uses a precision large enough '
+                  'to show all     |\n'
+                  '   |           | coefficient digits for "Decimal". If no '
+                  'digits follow the  |\n'
+                  '   |           | decimal point, the decimal point is also '
+                  'removed unless    |\n'
+                  '   |           | the "#" option is '
+                  'used.                                    |\n'
                   '   '
                   '+-----------+------------------------------------------------------------+\n'
                   '   | "\'F\'"     | Fixed-point notation. Same as "\'f\'", '
@@ -5474,9 +5560,14 @@
                   '   |           | regardless of the precision.  A precision '
                   'of "0" is        |\n'
                   '   |           | treated as equivalent to a precision of '
-                  '"1". The default   |\n'
-                  '   |           | precision is '
-                  '"6".                                          |\n'
+                  '"1". With no       |\n'
+                  '   |           | precision given, uses a precision of "6" '
+                  'significant       |\n'
+                  '   |           | digits for "float", and shows all '
+                  'coefficient digits for   |\n'
+                  '   |           | '
+                  '"Decimal".                                                 '
+                  '|\n'
                   '   '
                   '+-----------+------------------------------------------------------------+\n'
                   '   | "\'G\'"     | General format. Same as "\'g\'" except '
@@ -5689,8 +5780,8 @@
              '[parameter_list] ")"\n'
              '               ["->" expression] ":" suite\n'
              '   decorators                ::= decorator+\n'
-             '   decorator                 ::= "@" dotted_name ["(" '
-             '[argument_list [","]] ")"] NEWLINE\n'
+             '   decorator                 ::= "@" assignment_expression '
+             'NEWLINE\n'
              '   dotted_name               ::= identifier ("." identifier)*\n'
              '   parameter_list            ::= defparameter ("," '
              'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n'
@@ -5744,6 +5835,11 @@
              'the name\n'
              '"func".\n'
              '\n'
+             'Changed in version 3.9: Functions may be decorated with any '
+             'valid\n'
+             '"assignment_expression". Previously, the grammar was much more\n'
+             'restrictive; see **PEP 614** for details.\n'
+             '\n'
              'When one or more *parameters* have the form *parameter* "="\n'
              '*expression*, the function is said to have “default parameter '
              'values.”\n'
@@ -5934,7 +6030,9 @@
                'defined.\n'
                '   See section The import statement.\n'
                '\n'
-               '   Note: The name "_" is often used in conjunction with\n'
+               '   Note:\n'
+               '\n'
+               '     The name "_" is often used in conjunction with\n'
                '     internationalization; refer to the documentation for the\n'
                '     "gettext" module for more information on this '
                'convention.\n'
@@ -6080,7 +6178,9 @@
                 'defined.\n'
                 '   See section The import statement.\n'
                 '\n'
-                '   Note: The name "_" is often used in conjunction with\n'
+                '   Note:\n'
+                '\n'
+                '     The name "_" is often used in conjunction with\n'
                 '     internationalization; refer to the documentation for '
                 'the\n'
                 '     "gettext" module for more information on this '
@@ -6165,8 +6265,9 @@
            '\n'
            '1. find a module, loading and initializing it if necessary\n'
            '\n'
-           '2. define a name or names in the local namespace for the scope\n'
-           '   where the "import" statement occurs.\n'
+           '2. define a name or names in the local namespace for the scope '
+           'where\n'
+           '   the "import" statement occurs.\n'
            '\n'
            'When the statement contains multiple clauses (separated by commas) '
            'the\n'
@@ -6192,8 +6293,9 @@
            'made\n'
            'available in the local namespace in one of three ways:\n'
            '\n'
-           '* If the module name is followed by "as", then the name following\n'
-           '  "as" is bound directly to the imported module.\n'
+           '* If the module name is followed by "as", then the name following '
+           '"as"\n'
+           '  is bound directly to the imported module.\n'
            '\n'
            '* If no other name is specified, and the module being imported is '
            'a\n'
@@ -6342,8 +6444,8 @@
            '\n'
            '* other future statements.\n'
            '\n'
-           'The only feature in Python 3.7 that requires using the future\n'
-           'statement is "annotations".\n'
+           'The only feature that requires using the future statement is\n'
+           '"annotations" (see **PEP 563**).\n'
            '\n'
            'All historical features enabled by the future statement are still\n'
            'recognized by Python 3.  The list includes "absolute_import",\n'
@@ -6871,15 +6973,18 @@
                   '"__rpow__()" (the\n'
                   '   coercion rules would become too complicated).\n'
                   '\n'
-                  '   Note: If the right operand’s type is a subclass of the '
-                  'left\n'
-                  '     operand’s type and that subclass provides the '
-                  'reflected method\n'
-                  '     for the operation, this method will be called before '
-                  'the left\n'
-                  '     operand’s non-reflected method.  This behavior allows '
-                  'subclasses\n'
-                  '     to override their ancestors’ operations.\n'
+                  '   Note:\n'
+                  '\n'
+                  '     If the right operand’s type is a subclass of the left '
+                  'operand’s\n'
+                  '     type and that subclass provides a different '
+                  'implementation of the\n'
+                  '     reflected method for the operation, this method will '
+                  'be called\n'
+                  '     before the left operand’s non-reflected method. This '
+                  'behavior\n'
+                  '     allows subclasses to override their ancestors’ '
+                  'operations.\n'
                   '\n'
                   'object.__iadd__(self, other)\n'
                   'object.__isub__(self, other)\n'
@@ -6923,6 +7028,16 @@
                   'the data\n'
                   '   model.\n'
                   '\n'
+                  '   Note:\n'
+                  '\n'
+                  '     Due to a bug in the dispatching mechanism for "**=", a '
+                  'class that\n'
+                  '     defines "__ipow__()" but returns "NotImplemented" '
+                  'would fail to\n'
+                  '     fall back to "x.__pow__(y)" and "y.__rpow__(x)". This '
+                  'bug is\n'
+                  '     fixed in Python 3.10.\n'
+                  '\n'
                   'object.__neg__(self)\n'
                   'object.__pos__(self)\n'
                   'object.__abs__(self)\n'
@@ -7199,8 +7314,8 @@
                      '-[ Footnotes ]-\n'
                      '\n'
                      '[1] While "abs(x%y) < abs(y)" is true mathematically, '
-                     'for floats\n'
-                     '    it may not be true numerically due to roundoff.  For '
+                     'for floats it\n'
+                     '    may not be true numerically due to roundoff.  For '
                      'example, and\n'
                      '    assuming a platform on which a Python float is an '
                      'IEEE 754 double-\n'
@@ -7265,22 +7380,22 @@
                      '"unicodedata.normalize()".\n'
                      '\n'
                      '[4] Due to automatic garbage-collection, free lists, and '
-                     'the\n'
-                     '    dynamic nature of descriptors, you may notice '
-                     'seemingly unusual\n'
-                     '    behaviour in certain uses of the "is" operator, like '
-                     'those\n'
-                     '    involving comparisons between instance methods, or '
-                     'constants.\n'
-                     '    Check their documentation for more info.\n'
+                     'the dynamic\n'
+                     '    nature of descriptors, you may notice seemingly '
+                     'unusual behaviour\n'
+                     '    in certain uses of the "is" operator, like those '
+                     'involving\n'
+                     '    comparisons between instance methods, or constants.  '
+                     'Check their\n'
+                     '    documentation for more info.\n'
                      '\n'
                      '[5] The "%" operator is also used for string formatting; '
                      'the same\n'
                      '    precedence applies.\n'
                      '\n'
                      '[6] The power operator "**" binds less tightly than an '
-                     'arithmetic\n'
-                     '    or bitwise unary operator on its right, that is, '
+                     'arithmetic or\n'
+                     '    bitwise unary operator on its right, that is, '
                      '"2**-1" is "0.5".\n',
  'pass': 'The "pass" statement\n'
          '********************\n'
@@ -7570,9 +7685,11 @@
                    '\n'
                    '   New in version 3.4.\n'
                    '\n'
-                   'Note: Slicing is done exclusively with the following three '
-                   'methods.\n'
-                   '  A call like\n'
+                   'Note:\n'
+                   '\n'
+                   '  Slicing is done exclusively with the following three '
+                   'methods.  A\n'
+                   '  call like\n'
                    '\n'
                    '     a[1:2] = b\n'
                    '\n'
@@ -7603,7 +7720,9 @@
                    'the\n'
                    '   container), "KeyError" should be raised.\n'
                    '\n'
-                   '   Note: "for" loops expect that an "IndexError" will be '
+                   '   Note:\n'
+                   '\n'
+                   '     "for" loops expect that an "IndexError" will be '
                    'raised for\n'
                    '     illegal indexes to allow proper detection of the end '
                    'of the\n'
@@ -7839,26 +7958,26 @@
                  '-[ Footnotes ]-\n'
                  '\n'
                  '[1] Additional information on these special methods may be '
-                 'found\n'
-                 '    in the Python Reference Manual (Basic customization).\n'
+                 'found in\n'
+                 '    the Python Reference Manual (Basic customization).\n'
                  '\n'
                  '[2] As a consequence, the list "[1, 2]" is considered equal '
-                 'to\n'
-                 '    "[1.0, 2.0]", and similarly for tuples.\n'
+                 'to "[1.0,\n'
+                 '    2.0]", and similarly for tuples.\n'
                  '\n'
                  '[3] They must have since the parser can’t tell the type of '
                  'the\n'
                  '    operands.\n'
                  '\n'
                  '[4] Cased characters are those with general category '
-                 'property\n'
-                 '    being one of “Lu” (Letter, uppercase), “Ll” (Letter, '
-                 'lowercase),\n'
-                 '    or “Lt” (Letter, titlecase).\n'
+                 'property being\n'
+                 '    one of “Lu” (Letter, uppercase), “Ll” (Letter, '
+                 'lowercase), or “Lt”\n'
+                 '    (Letter, titlecase).\n'
                  '\n'
-                 '[5] To format only a tuple you should therefore provide a\n'
-                 '    singleton tuple whose only element is the tuple to be '
-                 'formatted.\n',
+                 '[5] To format only a tuple you should therefore provide a '
+                 'singleton\n'
+                 '    tuple whose only element is the tuple to be formatted.\n',
  'specialnames': 'Special method names\n'
                  '********************\n'
                  '\n'
@@ -8003,7 +8122,9 @@
                  'for\n'
                  '   objects that still exist when the interpreter exits.\n'
                  '\n'
-                 '   Note: "del x" doesn’t directly call "x.__del__()" — the '
+                 '   Note:\n'
+                 '\n'
+                 '     "del x" doesn’t directly call "x.__del__()" — the '
                  'former\n'
                  '     decrements the reference count for "x" by one, and the '
                  'latter is\n'
@@ -8027,12 +8148,15 @@
                  '\n'
                  '   See also: Documentation for the "gc" module.\n'
                  '\n'
-                 '   Warning: Due to the precarious circumstances under which\n'
-                 '     "__del__()" methods are invoked, exceptions that occur '
-                 'during\n'
-                 '     their execution are ignored, and a warning is printed '
-                 'to\n'
-                 '     "sys.stderr" instead. In particular:\n'
+                 '   Warning:\n'
+                 '\n'
+                 '     Due to the precarious circumstances under which '
+                 '"__del__()"\n'
+                 '     methods are invoked, exceptions that occur during their '
+                 'execution\n'
+                 '     are ignored, and a warning is printed to "sys.stderr" '
+                 'instead.\n'
+                 '     In particular:\n'
                  '\n'
                  '     * "__del__()" can be invoked when arbitrary code is '
                  'being\n'
@@ -8045,22 +8169,20 @@
                  '       that gets interrupted to execute "__del__()".\n'
                  '\n'
                  '     * "__del__()" can be executed during interpreter '
-                 'shutdown.  As\n'
-                 '       a consequence, the global variables it needs to '
-                 'access\n'
-                 '       (including other modules) may already have been '
-                 'deleted or set\n'
-                 '       to "None". Python guarantees that globals whose name '
-                 'begins\n'
-                 '       with a single underscore are deleted from their '
-                 'module before\n'
-                 '       other globals are deleted; if no other references to '
-                 'such\n'
-                 '       globals exist, this may help in assuring that '
-                 'imported modules\n'
-                 '       are still available at the time when the "__del__()" '
-                 'method is\n'
-                 '       called.\n'
+                 'shutdown.  As a\n'
+                 '       consequence, the global variables it needs to access '
+                 '(including\n'
+                 '       other modules) may already have been deleted or set '
+                 'to "None".\n'
+                 '       Python guarantees that globals whose name begins with '
+                 'a single\n'
+                 '       underscore are deleted from their module before other '
+                 'globals\n'
+                 '       are deleted; if no other references to such globals '
+                 'exist, this\n'
+                 '       may help in assuring that imported modules are still '
+                 'available\n'
+                 '       at the time when the "__del__()" method is called.\n'
                  '\n'
                  'object.__repr__(self)\n'
                  '\n'
@@ -8145,7 +8267,7 @@
                  '\n'
                  '   Changed in version 3.7: "object.__format__(x, \'\')" is '
                  'now\n'
-                 '   equivalent to "str(x)" rather than "format(str(self), '
+                 '   equivalent to "str(x)" rather than "format(str(x), '
                  '\'\')".\n'
                  '\n'
                  'object.__lt__(self, other)\n'
@@ -8179,16 +8301,21 @@
                  '   on the value to determine if the result is true or '
                  'false.\n'
                  '\n'
-                 '   By default, "__ne__()" delegates to "__eq__()" and '
-                 'inverts the\n'
-                 '   result unless it is "NotImplemented".  There are no other '
-                 'implied\n'
-                 '   relationships among the comparison operators, for '
-                 'example, the\n'
-                 '   truth of "(x<y or x==y)" does not imply "x<=y". To '
-                 'automatically\n'
-                 '   generate ordering operations from a single root '
-                 'operation, see\n'
+                 '   By default, "object" implements "__eq__()" by using "is", '
+                 'returning\n'
+                 '   "NotImplemented" in the case of a false comparison: "True '
+                 'if x is y\n'
+                 '   else NotImplemented". For "__ne__()", by default it '
+                 'delegates to\n'
+                 '   "__eq__()" and inverts the result unless it is '
+                 '"NotImplemented".\n'
+                 '   There are no other implied relationships among the '
+                 'comparison\n'
+                 '   operators or default implementations; for example, the '
+                 'truth of\n'
+                 '   "(x<y or x==y)" does not imply "x<=y". To automatically '
+                 'generate\n'
+                 '   ordering operations from a single root operation, see\n'
                  '   "functools.total_ordering()".\n'
                  '\n'
                  '   See the paragraph on "__hash__()" for some important '
@@ -8236,19 +8363,21 @@
                  '      def __hash__(self):\n'
                  '          return hash((self.name, self.nick, self.color))\n'
                  '\n'
-                 '   Note: "hash()" truncates the value returned from an '
-                 'object’s\n'
-                 '     custom "__hash__()" method to the size of a '
-                 '"Py_ssize_t".  This\n'
-                 '     is typically 8 bytes on 64-bit builds and 4 bytes on '
-                 '32-bit\n'
-                 '     builds. If an object’s   "__hash__()" must interoperate '
-                 'on builds\n'
-                 '     of different bit sizes, be sure to check the width on '
-                 'all\n'
-                 '     supported builds.  An easy way to do this is with '
-                 '"python -c\n'
-                 '     "import sys; print(sys.hash_info.width)"".\n'
+                 '   Note:\n'
+                 '\n'
+                 '     "hash()" truncates the value returned from an object’s '
+                 'custom\n'
+                 '     "__hash__()" method to the size of a "Py_ssize_t".  '
+                 'This is\n'
+                 '     typically 8 bytes on 64-bit builds and 4 bytes on '
+                 '32-bit builds.\n'
+                 '     If an object’s   "__hash__()" must interoperate on '
+                 'builds of\n'
+                 '     different bit sizes, be sure to check the width on all '
+                 'supported\n'
+                 '     builds.  An easy way to do this is with "python -c '
+                 '"import sys;\n'
+                 '     print(sys.hash_info.width)"".\n'
                  '\n'
                  '   If a class does not define an "__eq__()" method it should '
                  'not\n'
@@ -8304,21 +8433,22 @@
                  '   hashable by an "isinstance(obj, '
                  'collections.abc.Hashable)" call.\n'
                  '\n'
-                 '   Note: By default, the "__hash__()" values of str and '
-                 'bytes\n'
-                 '     objects are “salted” with an unpredictable random '
-                 'value.\n'
-                 '     Although they remain constant within an individual '
-                 'Python\n'
-                 '     process, they are not predictable between repeated '
-                 'invocations of\n'
-                 '     Python.This is intended to provide protection against a '
-                 'denial-\n'
-                 '     of-service caused by carefully-chosen inputs that '
-                 'exploit the\n'
-                 '     worst case performance of a dict insertion, O(n^2) '
-                 'complexity.\n'
-                 '     See http://www.ocert.org/advisories/ocert-2011-003.html '
+                 '   Note:\n'
+                 '\n'
+                 '     By default, the "__hash__()" values of str and bytes '
+                 'objects are\n'
+                 '     “salted” with an unpredictable random value.  Although '
+                 'they\n'
+                 '     remain constant within an individual Python process, '
+                 'they are not\n'
+                 '     predictable between repeated invocations of Python.This '
+                 'is\n'
+                 '     intended to provide protection against a '
+                 'denial-of-service caused\n'
+                 '     by carefully-chosen inputs that exploit the worst case\n'
+                 '     performance of a dict insertion, O(n^2) complexity.  '
+                 'See\n'
+                 '     http://www.ocert.org/advisories/ocert-2011-003.html '
                  'for\n'
                  '     details.Changing hash values affects the iteration '
                  'order of sets.\n'
@@ -8407,11 +8537,17 @@
                  'needs, for\n'
                  '   example, "object.__getattribute__(self, name)".\n'
                  '\n'
-                 '   Note: This method may still be bypassed when looking up '
-                 'special\n'
-                 '     methods as the result of implicit invocation via '
-                 'language syntax\n'
-                 '     or built-in functions. See Special method lookup.\n'
+                 '   Note:\n'
+                 '\n'
+                 '     This method may still be bypassed when looking up '
+                 'special methods\n'
+                 '     as the result of implicit invocation via language '
+                 'syntax or\n'
+                 '     built-in functions. See Special method lookup.\n'
+                 '\n'
+                 '   For certain sensitive attribute accesses, raises an '
+                 'auditing event\n'
+                 '   "object.__getattr__" with arguments "obj" and "name".\n'
                  '\n'
                  'object.__setattr__(self, name, value)\n'
                  '\n'
@@ -8429,6 +8565,11 @@
                  'example,\n'
                  '   "object.__setattr__(self, name, value)".\n'
                  '\n'
+                 '   For certain sensitive attribute assignments, raises an '
+                 'auditing\n'
+                 '   event "object.__setattr__" with arguments "obj", "name", '
+                 '"value".\n'
+                 '\n'
                  'object.__delattr__(self, name)\n'
                  '\n'
                  '   Like "__setattr__()" but for attribute deletion instead '
@@ -8437,6 +8578,10 @@
                  'obj.name" is\n'
                  '   meaningful for the object.\n'
                  '\n'
+                 '   For certain sensitive attribute deletions, raises an '
+                 'auditing event\n'
+                 '   "object.__delattr__" with arguments "obj" and "name".\n'
+                 '\n'
                  'object.__dir__(self)\n'
                  '\n'
                  '   Called when "dir()" is called on the object. A sequence '
@@ -8495,15 +8640,16 @@
                  '\n'
                  '   sys.modules[__name__].__class__ = VerboseModule\n'
                  '\n'
-                 'Note: Defining module "__getattr__" and setting module '
-                 '"__class__"\n'
-                 '  only affect lookups made using the attribute access syntax '
-                 '–\n'
-                 '  directly accessing the module globals (whether by code '
-                 'within the\n'
-                 '  module, or via a reference to the module’s globals '
-                 'dictionary) is\n'
-                 '  unaffected.\n'
+                 'Note:\n'
+                 '\n'
+                 '  Defining module "__getattr__" and setting module '
+                 '"__class__" only\n'
+                 '  affect lookups made using the attribute access syntax – '
+                 'directly\n'
+                 '  accessing the module globals (whether by code within the '
+                 'module, or\n'
+                 '  via a reference to the module’s globals dictionary) is '
+                 'unaffected.\n'
                  '\n'
                  'Changed in version 3.5: "__class__" module attribute is now '
                  'writable.\n'
@@ -8586,12 +8732,14 @@
                  'The\n'
                  '   descriptor has been assigned to *name*.\n'
                  '\n'
-                 '   Note: "__set_name__()" is only called implicitly as part '
-                 'of the\n'
-                 '     "type" constructor, so it will need to be called '
-                 'explicitly with\n'
-                 '     the appropriate parameters when a descriptor is added '
-                 'to a class\n'
+                 '   Note:\n'
+                 '\n'
+                 '     "__set_name__()" is only called implicitly as part of '
+                 'the "type"\n'
+                 '     constructor, so it will need to be called explicitly '
+                 'with the\n'
+                 '     appropriate parameters when a descriptor is added to a '
+                 'class\n'
                  '     after initial creation:\n'
                  '\n'
                  '        class A:\n'
@@ -8696,12 +8844,13 @@
                  'both\n'
                  '"__get__()" and "__set__()", while non-data descriptors have '
                  'just the\n'
-                 '"__get__()" method.  Data descriptors with "__set__()" and '
-                 '"__get__()"\n'
-                 'defined always override a redefinition in an instance '
-                 'dictionary.  In\n'
-                 'contrast, non-data descriptors can be overridden by '
-                 'instances.\n'
+                 '"__get__()" method.  Data descriptors with "__get__()" and '
+                 '"__set__()"\n'
+                 '(and/or "__delete__()") defined always override a '
+                 'redefinition in an\n'
+                 'instance dictionary.  In contrast, non-data descriptors can '
+                 'be\n'
+                 'overridden by instances.\n'
                  '\n'
                  'Python methods (including "staticmethod()" and '
                  '"classmethod()") are\n'
@@ -8749,10 +8898,9 @@
                  '~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
                  '\n'
                  '* When inheriting from a class without *__slots__*, the '
-                 '*__dict__*\n'
-                 '  and *__weakref__* attribute of the instances will always '
-                 'be\n'
-                 '  accessible.\n'
+                 '*__dict__* and\n'
+                 '  *__weakref__* attribute of the instances will always be '
+                 'accessible.\n'
                  '\n'
                  '* Without a *__dict__* variable, instances cannot be '
                  'assigned new\n'
@@ -8766,13 +8914,12 @@
                  '  declaration.\n'
                  '\n'
                  '* Without a *__weakref__* variable for each instance, '
-                 'classes\n'
-                 '  defining *__slots__* do not support weak references to '
-                 'its\n'
-                 '  instances. If weak reference support is needed, then add\n'
-                 '  "\'__weakref__\'" to the sequence of strings in the '
-                 '*__slots__*\n'
-                 '  declaration.\n'
+                 'classes defining\n'
+                 '  *__slots__* do not support weak references to its '
+                 'instances. If weak\n'
+                 '  reference support is needed, then add "\'__weakref__\'" to '
+                 'the\n'
+                 '  sequence of strings in the *__slots__* declaration.\n'
                  '\n'
                  '* *__slots__* are implemented at the class level by '
                  'creating\n'
@@ -8785,23 +8932,22 @@
                  '  attribute would overwrite the descriptor assignment.\n'
                  '\n'
                  '* The action of a *__slots__* declaration is not limited to '
-                 'the\n'
-                 '  class where it is defined.  *__slots__* declared in '
-                 'parents are\n'
-                 '  available in child classes. However, child subclasses will '
-                 'get a\n'
-                 '  *__dict__* and *__weakref__* unless they also define '
-                 '*__slots__*\n'
-                 '  (which should only contain names of any *additional* '
-                 'slots).\n'
+                 'the class\n'
+                 '  where it is defined.  *__slots__* declared in parents are '
+                 'available\n'
+                 '  in child classes. However, child subclasses will get a '
+                 '*__dict__*\n'
+                 '  and *__weakref__* unless they also define *__slots__* '
+                 '(which should\n'
+                 '  only contain names of any *additional* slots).\n'
                  '\n'
                  '* If a class defines a slot also defined in a base class, '
-                 'the\n'
-                 '  instance variable defined by the base class slot is '
-                 'inaccessible\n'
-                 '  (except by retrieving its descriptor directly from the '
-                 'base class).\n'
-                 '  This renders the meaning of the program undefined.  In the '
+                 'the instance\n'
+                 '  variable defined by the base class slot is inaccessible '
+                 '(except by\n'
+                 '  retrieving its descriptor directly from the base class). '
+                 'This\n'
+                 '  renders the meaning of the program undefined.  In the '
                  'future, a\n'
                  '  check may be added to prevent this.\n'
                  '\n'
@@ -8811,9 +8957,9 @@
                  'and "tuple".\n'
                  '\n'
                  '* Any non-string iterable may be assigned to *__slots__*. '
-                 'Mappings\n'
-                 '  may also be used; however, in the future, special meaning '
-                 'may be\n'
+                 'Mappings may\n'
+                 '  also be used; however, in the future, special meaning may '
+                 'be\n'
                  '  assigned to the values corresponding to each key.\n'
                  '\n'
                  '* *__class__* assignment works only if both classes have the '
@@ -8829,8 +8975,8 @@
                  '  raise "TypeError".\n'
                  '\n'
                  '* If an iterator is used for *__slots__* then a descriptor '
-                 'is\n'
-                 '  created for each of the iterator’s values. However, the '
+                 'is created\n'
+                 '  for each of the iterator’s values. However, the '
                  '*__slots__*\n'
                  '  attribute will be an empty iterator.\n'
                  '\n'
@@ -8883,9 +9029,11 @@
                  'does nothing,\n'
                  '   but raises an error if it is called with any arguments.\n'
                  '\n'
-                 '   Note: The metaclass hint "metaclass" is consumed by the '
-                 'rest of\n'
-                 '     the type machinery, and is never passed to '
+                 '   Note:\n'
+                 '\n'
+                 '     The metaclass hint "metaclass" is consumed by the rest '
+                 'of the\n'
+                 '     type machinery, and is never passed to '
                  '"__init_subclass__"\n'
                  '     implementations. The actual metaclass (rather than the '
                  'explicit\n'
@@ -8953,9 +9101,10 @@
                  'tuple may\n'
                  'be empty, in such case the original base is ignored.\n'
                  '\n'
-                 'See also: **PEP 560** - Core support for typing module and '
-                 'generic\n'
-                 '  types\n'
+                 'See also:\n'
+                 '\n'
+                 '  **PEP 560** - Core support for typing module and generic '
+                 'types\n'
                  '\n'
                  '\n'
                  'Determining the appropriate metaclass\n'
@@ -9213,9 +9362,10 @@
                  'type hints,\n'
                  'other usage is discouraged.\n'
                  '\n'
-                 'See also: **PEP 560** - Core support for typing module and '
-                 'generic\n'
-                 '  types\n'
+                 'See also:\n'
+                 '\n'
+                 '  **PEP 560** - Core support for typing module and generic '
+                 'types\n'
                  '\n'
                  '\n'
                  'Emulating callable objects\n'
@@ -9225,8 +9375,8 @@
                  '\n'
                  '   Called when the instance is “called” as a function; if '
                  'this method\n'
-                 '   is defined, "x(arg1, arg2, ...)" is a shorthand for\n'
-                 '   "x.__call__(arg1, arg2, ...)".\n'
+                 '   is defined, "x(arg1, arg2, ...)" roughly translates to\n'
+                 '   "type(x).__call__(x, arg1, ...)".\n'
                  '\n'
                  '\n'
                  'Emulating container types\n'
@@ -9327,9 +9477,11 @@
                  '\n'
                  '   New in version 3.4.\n'
                  '\n'
-                 'Note: Slicing is done exclusively with the following three '
-                 'methods.\n'
-                 '  A call like\n'
+                 'Note:\n'
+                 '\n'
+                 '  Slicing is done exclusively with the following three '
+                 'methods.  A\n'
+                 '  call like\n'
                  '\n'
                  '     a[1:2] = b\n'
                  '\n'
@@ -9360,8 +9512,10 @@
                  'the\n'
                  '   container), "KeyError" should be raised.\n'
                  '\n'
-                 '   Note: "for" loops expect that an "IndexError" will be '
-                 'raised for\n'
+                 '   Note:\n'
+                 '\n'
+                 '     "for" loops expect that an "IndexError" will be raised '
+                 'for\n'
                  '     illegal indexes to allow proper detection of the end of '
                  'the\n'
                  '     sequence.\n'
@@ -9551,15 +9705,18 @@
                  '"__rpow__()" (the\n'
                  '   coercion rules would become too complicated).\n'
                  '\n'
-                 '   Note: If the right operand’s type is a subclass of the '
-                 'left\n'
-                 '     operand’s type and that subclass provides the reflected '
-                 'method\n'
-                 '     for the operation, this method will be called before '
-                 'the left\n'
-                 '     operand’s non-reflected method.  This behavior allows '
-                 'subclasses\n'
-                 '     to override their ancestors’ operations.\n'
+                 '   Note:\n'
+                 '\n'
+                 '     If the right operand’s type is a subclass of the left '
+                 'operand’s\n'
+                 '     type and that subclass provides a different '
+                 'implementation of the\n'
+                 '     reflected method for the operation, this method will be '
+                 'called\n'
+                 '     before the left operand’s non-reflected method. This '
+                 'behavior\n'
+                 '     allows subclasses to override their ancestors’ '
+                 'operations.\n'
                  '\n'
                  'object.__iadd__(self, other)\n'
                  'object.__isub__(self, other)\n'
@@ -9603,6 +9760,16 @@
                  'the data\n'
                  '   model.\n'
                  '\n'
+                 '   Note:\n'
+                 '\n'
+                 '     Due to a bug in the dispatching mechanism for "**=", a '
+                 'class that\n'
+                 '     defines "__ipow__()" but returns "NotImplemented" would '
+                 'fail to\n'
+                 '     fall back to "x.__pow__(y)" and "y.__rpow__(x)". This '
+                 'bug is\n'
+                 '     fixed in Python 3.10.\n'
+                 '\n'
                  'object.__neg__(self)\n'
                  'object.__pos__(self)\n'
                  'object.__abs__(self)\n'
@@ -9909,9 +10076,20 @@
                    'For a list\n'
                    '   of possible encodings, see section Standard Encodings.\n'
                    '\n'
+                   '   By default, the *errors* argument is not checked for '
+                   'best\n'
+                   '   performances, but only used at the first encoding '
+                   'error. Enable the\n'
+                   '   Python Development Mode, or use a debug build to check '
+                   '*errors*.\n'
+                   '\n'
                    '   Changed in version 3.1: Support for keyword arguments '
                    'added.\n'
                    '\n'
+                   '   Changed in version 3.9: The *errors* is now checked in '
+                   'development\n'
+                   '   mode and in debug mode.\n'
+                   '\n'
                    'str.endswith(suffix[, start[, end]])\n'
                    '\n'
                    '   Return "True" if the string ends with the specified '
@@ -9966,11 +10144,13 @@
                    '"-1" if\n'
                    '   *sub* is not found.\n'
                    '\n'
-                   '   Note: The "find()" method should be used only if you '
-                   'need to know\n'
-                   '     the position of *sub*.  To check if *sub* is a '
-                   'substring or not,\n'
-                   '     use the "in" operator:\n'
+                   '   Note:\n'
+                   '\n'
+                   '     The "find()" method should be used only if you need '
+                   'to know the\n'
+                   '     position of *sub*.  To check if *sub* is a substring '
+                   'or not, use\n'
+                   '     the "in" operator:\n'
                    '\n'
                    "        >>> 'Py' in 'Python'\n"
                    '        True\n'
@@ -9999,8 +10179,9 @@
                    '   formatting options that can be specified in format '
                    'strings.\n'
                    '\n'
-                   '   Note: When formatting a number ("int", "float", '
-                   '"complex",\n'
+                   '   Note:\n'
+                   '\n'
+                   '     When formatting a number ("int", "float", "complex",\n'
                    '     "decimal.Decimal" and subclasses) with the "n" type '
                    '(ex:\n'
                    '     "\'{:n}\'.format(1234)"), the function temporarily '
@@ -10205,6 +10386,15 @@
                    '"False"\n'
                    '   otherwise.\n'
                    '\n'
+                   "   >>> 'BANANA'.isupper()\n"
+                   '   True\n'
+                   "   >>> 'banana'.isupper()\n"
+                   '   False\n'
+                   "   >>> 'baNana'.isupper()\n"
+                   '   False\n'
+                   "   >>> ' '.isupper()\n"
+                   '   False\n'
+                   '\n'
                    'str.join(iterable)\n'
                    '\n'
                    '   Return a string which is the concatenation of the '
@@ -10253,6 +10443,16 @@
                    "      >>> 'www.example.com'.lstrip('cmowz.')\n"
                    "      'example.com'\n"
                    '\n'
+                   '   See "str.removeprefix()" for a method that will remove '
+                   'a single\n'
+                   '   prefix string rather than all of a set of characters.  '
+                   'For example:\n'
+                   '\n'
+                   "      >>> 'Arthur: three!'.lstrip('Arthur: ')\n"
+                   "      'ee!'\n"
+                   "      >>> 'Arthur: three!'.removeprefix('Arthur: ')\n"
+                   "      'three!'\n"
+                   '\n'
                    'static str.maketrans(x[, y[, z]])\n'
                    '\n'
                    '   This static method returns a translation table usable '
@@ -10289,6 +10489,35 @@
                    'followed by\n'
                    '   two empty strings.\n'
                    '\n'
+                   'str.removeprefix(prefix, /)\n'
+                   '\n'
+                   '   If the string starts with the *prefix* string, return\n'
+                   '   "string[len(prefix):]". Otherwise, return a copy of the '
+                   'original\n'
+                   '   string:\n'
+                   '\n'
+                   "      >>> 'TestHook'.removeprefix('Test')\n"
+                   "      'Hook'\n"
+                   "      >>> 'BaseTestCase'.removeprefix('Test')\n"
+                   "      'BaseTestCase'\n"
+                   '\n'
+                   '   New in version 3.9.\n'
+                   '\n'
+                   'str.removesuffix(suffix, /)\n'
+                   '\n'
+                   '   If the string ends with the *suffix* string and that '
+                   '*suffix* is\n'
+                   '   not empty, return "string[:-len(suffix)]". Otherwise, '
+                   'return a copy\n'
+                   '   of the original string:\n'
+                   '\n'
+                   "      >>> 'MiscTests'.removesuffix('Tests')\n"
+                   "      'Misc'\n"
+                   "      >>> 'TmpDirMixin'.removesuffix('Tests')\n"
+                   "      'TmpDirMixin'\n"
+                   '\n'
+                   '   New in version 3.9.\n'
+                   '\n'
                    'str.replace(old, new[, count])\n'
                    '\n'
                    '   Return a copy of the string with all occurrences of '
@@ -10366,6 +10595,16 @@
                    "      >>> 'mississippi'.rstrip('ipz')\n"
                    "      'mississ'\n"
                    '\n'
+                   '   See "str.removesuffix()" for a method that will remove '
+                   'a single\n'
+                   '   suffix string rather than all of a set of characters.  '
+                   'For example:\n'
+                   '\n'
+                   "      >>> 'Monty Python'.rstrip(' Python')\n"
+                   "      'M'\n"
+                   "      >>> 'Monty Python'.removesuffix(' Python')\n"
+                   "      'Monty'\n"
+                   '\n'
                    'str.split(sep=None, maxsplit=-1)\n'
                    '\n'
                    '   Return a list of the words in the string, using *sep* '
@@ -10847,17 +11086,20 @@
             '\n'
             '2. Unlike in Standard C, exactly two hex digits are required.\n'
             '\n'
-            '3. In a bytes literal, hexadecimal and octal escapes denote the\n'
-            '   byte with the given value. In a string literal, these escapes\n'
-            '   denote a Unicode character with the given value.\n'
+            '3. In a bytes literal, hexadecimal and octal escapes denote the '
+            'byte\n'
+            '   with the given value. In a string literal, these escapes '
+            'denote a\n'
+            '   Unicode character with the given value.\n'
             '\n'
             '4. Changed in version 3.3: Support for name aliases [1] has been\n'
             '   added.\n'
             '\n'
             '5. Exactly four hex digits are required.\n'
             '\n'
-            '6. Any Unicode character can be encoded this way.  Exactly eight\n'
-            '   hex digits are required.\n'
+            '6. Any Unicode character can be encoded this way.  Exactly eight '
+            'hex\n'
+            '   digits are required.\n'
             '\n'
             'Unlike Standard C, all unrecognized escape sequences are left in '
             'the\n'
@@ -10899,9 +11141,10 @@
  'subscriptions': 'Subscriptions\n'
                   '*************\n'
                   '\n'
-                  'A subscription selects an item of a sequence (string, tuple '
-                  'or list)\n'
-                  'or mapping (dictionary) object:\n'
+                  'Subscription of a sequence (string, tuple or list) or '
+                  'mapping\n'
+                  '(dictionary) object usually selects an item from the '
+                  'collection:\n'
                   '\n'
                   '   subscription ::= primary "[" expression_list "]"\n'
                   '\n'
@@ -10952,7 +11195,13 @@
                   '\n'
                   'A string’s items are characters.  A character is not a '
                   'separate data\n'
-                  'type but a string of exactly one character.\n',
+                  'type but a string of exactly one character.\n'
+                  '\n'
+                  'Subscription of certain *classes* or *types* creates a '
+                  'generic alias.\n'
+                  'In this case, user-defined classes can support subscription '
+                  'by\n'
+                  'providing a "__class_getitem__()" classmethod.\n',
  'truth': 'Truth Value Testing\n'
           '*******************\n'
           '\n'
@@ -11170,10 +11419,17 @@
           'for\n'
           '   the operands provided.  (The interpreter will then try the\n'
           '   reflected operation, or some other fallback, depending on the\n'
-          '   operator.)  Its truth value is true.\n'
+          '   operator.)  It should not be evaluated in a boolean context.\n'
           '\n'
           '   See Implementing the arithmetic operations for more details.\n'
           '\n'
+          '   Changed in version 3.9: Evaluating "NotImplemented" in a '
+          'boolean\n'
+          '   context is deprecated. While it currently evaluates as true, it\n'
+          '   will emit a "DeprecationWarning". It will raise a "TypeError" in '
+          'a\n'
+          '   future version of Python.\n'
+          '\n'
           'Ellipsis\n'
           '   This type has a single value.  There is a single object with '
           'this\n'
@@ -11191,6 +11447,27 @@
           'representation\n'
           '   in computers.\n'
           '\n'
+          '   The string representations of the numeric classes, computed by\n'
+          '   "__repr__()" and "__str__()", have the following properties:\n'
+          '\n'
+          '   * They are valid numeric literals which, when passed to their '
+          'class\n'
+          '     constructor, produce an object having the value of the '
+          'original\n'
+          '     numeric.\n'
+          '\n'
+          '   * The representation is in base 10, when possible.\n'
+          '\n'
+          '   * Leading zeros, possibly excepting a single zero before a '
+          'decimal\n'
+          '     point, are not shown.\n'
+          '\n'
+          '   * Trailing zeros, possibly excepting a single zero after a '
+          'decimal\n'
+          '     point, are not shown.\n'
+          '\n'
+          '   * A sign is shown only when the number is negative.\n'
+          '\n'
           '   Python distinguishes between integers, floating point numbers, '
           'and\n'
           '   complex numbers:\n'
@@ -12242,6 +12519,21 @@
                  'positional\n'
                  '   argument and a possibly empty set of keyword arguments.\n'
                  '\n'
+                 '   Dictionaries can be created by several means:\n'
+                 '\n'
+                 '   * Use a comma-separated list of "key: value" pairs within '
+                 'braces:\n'
+                 '     "{\'jack\': 4098, \'sjoerd\': 4127}" or "{4098: '
+                 "'jack', 4127:\n"
+                 '     \'sjoerd\'}"\n'
+                 '\n'
+                 '   * Use a dict comprehension: "{}", "{x: x ** 2 for x in '
+                 'range(10)}"\n'
+                 '\n'
+                 '   * Use the type constructor: "dict()", "dict([(\'foo\', '
+                 "100), ('bar',\n"
+                 '     200)])", "dict(foo=100, bar=200)"\n'
+                 '\n'
                  '   If no positional argument is given, an empty dictionary '
                  'is created.\n'
                  '   If a positional argument is given and it is a mapping '
@@ -12279,7 +12571,8 @@
                  "      >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))\n"
                  "      >>> d = dict([('two', 2), ('one', 1), ('three', 3)])\n"
                  "      >>> e = dict({'three': 3, 'one': 1, 'two': 2})\n"
-                 '      >>> a == b == c == d == e\n'
+                 "      >>> f = dict({'one': 1, 'three': 3}, two=2)\n"
+                 '      >>> a == b == c == d == e == f\n'
                  '      True\n'
                  '\n'
                  '   Providing keyword arguments as in the first example only '
@@ -12477,6 +12770,29 @@
                  '         >>> d.values() == d.values()\n'
                  '         False\n'
                  '\n'
+                 '   d | other\n'
+                 '\n'
+                 '      Create a new dictionary with the merged keys and '
+                 'values of *d*\n'
+                 '      and *other*, which must both be dictionaries. The '
+                 'values of\n'
+                 '      *other* take priority when *d* and *other* share '
+                 'keys.\n'
+                 '\n'
+                 '      New in version 3.9.\n'
+                 '\n'
+                 '   d |= other\n'
+                 '\n'
+                 '      Update the dictionary *d* with keys and values from '
+                 '*other*,\n'
+                 '      which may be either a *mapping* or an *iterable* of '
+                 'key/value\n'
+                 '      pairs. The values of *other* take priority when *d* '
+                 'and *other*\n'
+                 '      share keys.\n'
+                 '\n'
+                 '      New in version 3.9.\n'
+                 '\n'
                  '   Dictionaries compare equal if and only if they have the '
                  'same "(key,\n'
                  '   value)" pairs (regardless of ordering). Order comparisons '
@@ -12524,9 +12840,11 @@
                  '\n'
                  '   Changed in version 3.8: Dictionaries are now reversible.\n'
                  '\n'
-                 'See also: "types.MappingProxyType" can be used to create a '
-                 'read-only\n'
-                 '  view of a "dict".\n'
+                 'See also:\n'
+                 '\n'
+                 '  "types.MappingProxyType" can be used to create a read-only '
+                 'view of a\n'
+                 '  "dict".\n'
                  '\n'
                  '\n'
                  'Dictionary view objects\n'
@@ -12910,13 +13228,14 @@
              '"None", it\n'
              '   is treated like "1".\n'
              '\n'
-             '6. Concatenating immutable sequences always results in a new\n'
-             '   object. This means that building up a sequence by repeated\n'
-             '   concatenation will have a quadratic runtime cost in the '
-             'total\n'
-             '   sequence length. To get a linear runtime cost, you must '
-             'switch to\n'
-             '   one of the alternatives below:\n'
+             '6. Concatenating immutable sequences always results in a new '
+             'object.\n'
+             '   This means that building up a sequence by repeated '
+             'concatenation\n'
+             '   will have a quadratic runtime cost in the total sequence '
+             'length.\n'
+             '   To get a linear runtime cost, you must switch to one of the\n'
+             '   alternatives below:\n'
              '\n'
              '   * if concatenating "str" objects, you can build a list and '
              'use\n'
@@ -12934,24 +13253,25 @@
              '   * for other types, investigate the relevant class '
              'documentation\n'
              '\n'
-             '7. Some sequence types (such as "range") only support item\n'
-             '   sequences that follow specific patterns, and hence don’t '
-             'support\n'
-             '   sequence concatenation or repetition.\n'
-             '\n'
-             '8. "index" raises "ValueError" when *x* is not found in *s*. '
-             'Not\n'
-             '   all implementations support passing the additional arguments '
-             '*i*\n'
-             '   and *j*. These arguments allow efficient searching of '
-             'subsections\n'
-             '   of the sequence. Passing the extra arguments is roughly '
-             'equivalent\n'
-             '   to using "s[i:j].index(x)", only without copying any data and '
-             'with\n'
-             '   the returned index being relative to the start of the '
+             '7. Some sequence types (such as "range") only support item '
+             'sequences\n'
+             '   that follow specific patterns, and hence don’t support '
              'sequence\n'
-             '   rather than the start of the slice.\n'
+             '   concatenation or repetition.\n'
+             '\n'
+             '8. "index" raises "ValueError" when *x* is not found in *s*. Not '
+             'all\n'
+             '   implementations support passing the additional arguments *i* '
+             'and\n'
+             '   *j*. These arguments allow efficient searching of subsections '
+             'of\n'
+             '   the sequence. Passing the extra arguments is roughly '
+             'equivalent to\n'
+             '   using "s[i:j].index(x)", only without copying any data and '
+             'with the\n'
+             '   returned index being relative to the start of the sequence '
+             'rather\n'
+             '   than the start of the slice.\n'
              '\n'
              '\n'
              'Immutable Sequence Types\n'
@@ -13079,17 +13399,17 @@
              '1. *t* must have the same length as the slice it is replacing.\n'
              '\n'
              '2. The optional argument *i* defaults to "-1", so that by '
-             'default\n'
-             '   the last item is removed and returned.\n'
+             'default the\n'
+             '   last item is removed and returned.\n'
              '\n'
              '3. "remove()" raises "ValueError" when *x* is not found in *s*.\n'
              '\n'
-             '4. The "reverse()" method modifies the sequence in place for\n'
-             '   economy of space when reversing a large sequence.  To remind '
-             'users\n'
-             '   that it operates by side effect, it does not return the '
-             'reversed\n'
-             '   sequence.\n'
+             '4. The "reverse()" method modifies the sequence in place for '
+             'economy\n'
+             '   of space when reversing a large sequence.  To remind users '
+             'that it\n'
+             '   operates by side effect, it does not return the reversed '
+             'sequence.\n'
              '\n'
              '5. "clear()" and "copy()" are included for consistency with the\n'
              '   interfaces of mutable containers that don’t support slicing\n'
@@ -13126,9 +13446,9 @@
              '   * Using a pair of square brackets to denote the empty list: '
              '"[]"\n'
              '\n'
-             '   * Using square brackets, separating items with commas: '
-             '"[a]",\n'
-             '     "[a, b, c]"\n'
+             '   * Using square brackets, separating items with commas: "[a]", '
+             '"[a,\n'
+             '     b, c]"\n'
              '\n'
              '   * Using a list comprehension: "[x for x in iterable]"\n'
              '\n'
@@ -13431,9 +13751,9 @@
              '\n'
              'See also:\n'
              '\n'
-             '  * The linspace recipe shows how to implement a lazy version '
-             'of\n'
-             '    range suitable for floating point applications.\n',
+             '  * The linspace recipe shows how to implement a lazy version of '
+             'range\n'
+             '    suitable for floating point applications.\n',
  'typesseq-mutable': 'Mutable Sequence Types\n'
                      '**********************\n'
                      '\n'
@@ -13544,19 +13864,18 @@
                      'replacing.\n'
                      '\n'
                      '2. The optional argument *i* defaults to "-1", so that '
-                     'by default\n'
-                     '   the last item is removed and returned.\n'
+                     'by default the\n'
+                     '   last item is removed and returned.\n'
                      '\n'
                      '3. "remove()" raises "ValueError" when *x* is not found '
                      'in *s*.\n'
                      '\n'
                      '4. The "reverse()" method modifies the sequence in place '
-                     'for\n'
-                     '   economy of space when reversing a large sequence.  To '
-                     'remind users\n'
-                     '   that it operates by side effect, it does not return '
-                     'the reversed\n'
-                     '   sequence.\n'
+                     'for economy\n'
+                     '   of space when reversing a large sequence.  To remind '
+                     'users that it\n'
+                     '   operates by side effect, it does not return the '
+                     'reversed sequence.\n'
                      '\n'
                      '5. "clear()" and "copy()" are included for consistency '
                      'with the\n'
@@ -13639,8 +13958,9 @@
          'The execution of the "with" statement with one “item” proceeds as\n'
          'follows:\n'
          '\n'
-         '1. The context expression (the expression given in the "with_item")\n'
-         '   is evaluated to obtain a context manager.\n'
+         '1. The context expression (the expression given in the "with_item") '
+         'is\n'
+         '   evaluated to obtain a context manager.\n'
          '\n'
          '2. The context manager’s "__enter__()" is loaded for later use.\n'
          '\n'
@@ -13648,12 +13968,15 @@
          '\n'
          '4. The context manager’s "__enter__()" method is invoked.\n'
          '\n'
-         '5. If a target was included in the "with" statement, the return\n'
-         '   value from "__enter__()" is assigned to it.\n'
+         '5. If a target was included in the "with" statement, the return '
+         'value\n'
+         '   from "__enter__()" is assigned to it.\n'
          '\n'
-         '   Note: The "with" statement guarantees that if the "__enter__()"\n'
-         '     method returns without an error, then "__exit__()" will always '
-         'be\n'
+         '   Note:\n'
+         '\n'
+         '     The "with" statement guarantees that if the "__enter__()" '
+         'method\n'
+         '     returns without an error, then "__exit__()" will always be\n'
          '     called. Thus, if an error occurs during the assignment to the\n'
          '     target list, it will be treated the same as an error occurring\n'
          '     within the suite would be. See step 6 below.\n'
diff --git a/Lib/queue.py b/Lib/queue.py
index 5bb0431..10dbcbc 100644
--- a/Lib/queue.py
+++ b/Lib/queue.py
@@ -1,6 +1,7 @@
 '''A multi-producer, multi-consumer queue.'''
 
 import threading
+import types
 from collections import deque
 from heapq import heappush, heappop
 from time import monotonic as time
@@ -216,6 +217,8 @@
     def _get(self):
         return self.queue.popleft()
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 class PriorityQueue(Queue):
     '''Variant of Queue that retrieves open entries in priority order (lowest first).
@@ -316,6 +319,8 @@
         '''Return the approximate size of the queue (not reliable!).'''
         return len(self._queue)
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 if SimpleQueue is None:
     SimpleQueue = _PySimpleQueue
diff --git a/Lib/quopri.py b/Lib/quopri.py
index cbd979a..08899c5 100755
--- a/Lib/quopri.py
+++ b/Lib/quopri.py
@@ -204,11 +204,11 @@
         print("-t: quote tabs")
         print("-d: decode; default encode")
         sys.exit(2)
-    deco = 0
-    tabs = 0
+    deco = False
+    tabs = False
     for o, a in opts:
-        if o == '-t': tabs = 1
-        if o == '-d': deco = 1
+        if o == '-t': tabs = True
+        if o == '-d': deco = True
     if tabs and deco:
         sys.stdout = sys.stderr
         print("-t and -d are mutually exclusive")
diff --git a/Lib/random.py b/Lib/random.py
index 365a019..a6454f5 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -1,5 +1,9 @@
 """Random variable generators.
 
+    bytes
+    -----
+           uniform bytes (values between 0 and 255)
+
     integers
     --------
            uniform within range
@@ -37,14 +41,20 @@
 
 """
 
+# Translated by Guido van Rossum from C source provided by
+# Adrian Baddeley.  Adapted by Raymond Hettinger for use with
+# the Mersenne Twister  and os.urandom() core generators.
+
 from warnings import warn as _warn
 from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
 from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
+from math import tau as TWOPI, floor as _floor
 from os import urandom as _urandom
 from _collections_abc import Set as _Set, Sequence as _Sequence
 from itertools import accumulate as _accumulate, repeat as _repeat
 from bisect import bisect as _bisect
 import os as _os
+import _random
 
 try:
     # hashlib is pretty heavy to load, try lean internal module first
@@ -53,28 +63,40 @@
     # fallback to official implementation
     from hashlib import sha512 as _sha512
 
+__all__ = [
+    "Random",
+    "SystemRandom",
+    "betavariate",
+    "choice",
+    "choices",
+    "expovariate",
+    "gammavariate",
+    "gauss",
+    "getrandbits",
+    "getstate",
+    "lognormvariate",
+    "normalvariate",
+    "paretovariate",
+    "randint",
+    "random",
+    "randrange",
+    "sample",
+    "seed",
+    "setstate",
+    "shuffle",
+    "triangular",
+    "uniform",
+    "vonmisesvariate",
+    "weibullvariate",
+]
 
-__all__ = ["Random","seed","random","uniform","randint","choice","sample",
-           "randrange","shuffle","normalvariate","lognormvariate",
-           "expovariate","vonmisesvariate","gammavariate","triangular",
-           "gauss","betavariate","paretovariate","weibullvariate",
-           "getstate","setstate", "getrandbits", "choices",
-           "SystemRandom"]
-
-NV_MAGICCONST = 4 * _exp(-0.5)/_sqrt(2.0)
-TWOPI = 2.0*_pi
+NV_MAGICCONST = 4 * _exp(-0.5) / _sqrt(2.0)
 LOG4 = _log(4.0)
 SG_MAGICCONST = 1.0 + _log(4.5)
 BPF = 53        # Number of bits in a float
-RECIP_BPF = 2**-BPF
+RECIP_BPF = 2 ** -BPF
 
 
-# Translated by Guido van Rossum from C source provided by
-# Adrian Baddeley.  Adapted by Raymond Hettinger for use with
-# the Mersenne Twister  and os.urandom() core generators.
-
-import _random
-
 class Random(_random.Random):
     """Random number generator base class used by bound module functions.
 
@@ -100,28 +122,11 @@
         self.seed(x)
         self.gauss_next = None
 
-    def __init_subclass__(cls, /, **kwargs):
-        """Control how subclasses generate random integers.
-
-        The algorithm a subclass can use depends on the random() and/or
-        getrandbits() implementation available to it and determines
-        whether it can generate random integers from arbitrarily large
-        ranges.
-        """
-
-        for c in cls.__mro__:
-            if '_randbelow' in c.__dict__:
-                # just inherit it
-                break
-            if 'getrandbits' in c.__dict__:
-                cls._randbelow = cls._randbelow_with_getrandbits
-                break
-            if 'random' in c.__dict__:
-                cls._randbelow = cls._randbelow_without_getrandbits
-                break
-
     def seed(self, a=None, version=2):
-        """Initialize internal state from hashable object.
+        """Initialize internal state from a seed.
+
+        The only supported seed types are None, int, float,
+        str, bytes, and bytearray.
 
         None or no argument seeds from current time or from an operating
         system specific randomness source if available.
@@ -143,12 +148,20 @@
             x ^= len(a)
             a = -2 if x == -1 else x
 
-        if version == 2 and isinstance(a, (str, bytes, bytearray)):
+        elif version == 2 and isinstance(a, (str, bytes, bytearray)):
             if isinstance(a, str):
                 a = a.encode()
             a += _sha512(a).digest()
             a = int.from_bytes(a, 'big')
 
+        elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)):
+            _warn('Seeding based on hashing is deprecated\n'
+                  'since Python 3.9 and will be removed in a subsequent '
+                  'version. The only \n'
+                  'supported seed types are: None, '
+                  'int, float, str, bytes, and bytearray.',
+                  DeprecationWarning, 2)
+
         super().seed(a)
         self.gauss_next = None
 
@@ -169,7 +182,7 @@
             #   really unsigned 32-bit ints, so we convert negative ints from
             #   version 2 to positive longs for version 3.
             try:
-                internalstate = tuple(x % (2**32) for x in internalstate)
+                internalstate = tuple(x % (2 ** 32) for x in internalstate)
             except ValueError as e:
                 raise TypeError from e
             super().setstate(internalstate)
@@ -178,15 +191,18 @@
                              "Random.setstate() of version %s" %
                              (version, self.VERSION))
 
-## ---- Methods below this point do not need to be overridden when
-## ---- subclassing for the purpose of using a different core generator.
 
-## -------------------- pickle support  -------------------
+    ## -------------------------------------------------------
+    ## ---- Methods below this point do not need to be overridden or extended
+    ## ---- when subclassing for the purpose of using a different core generator.
+
+
+    ## -------------------- pickle support  -------------------
 
     # Issue 17489: Since __reduce__ was defined to fix #759889 this is no
     # longer called; we leave it here because it has been here since random was
     # rewritten back in 2001 and why risk breaking something.
-    def __getstate__(self): # for pickle
+    def __getstate__(self):  # for pickle
         return self.getstate()
 
     def __setstate__(self, state):  # for pickle
@@ -195,9 +211,83 @@
     def __reduce__(self):
         return self.__class__, (), self.getstate()
 
-## -------------------- integer methods  -------------------
 
-    def randrange(self, start, stop=None, step=1, _int=int):
+    ## ---- internal support method for evenly distributed integers ----
+
+    def __init_subclass__(cls, /, **kwargs):
+        """Control how subclasses generate random integers.
+
+        The algorithm a subclass can use depends on the random() and/or
+        getrandbits() implementation available to it and determines
+        whether it can generate random integers from arbitrarily large
+        ranges.
+        """
+
+        for c in cls.__mro__:
+            if '_randbelow' in c.__dict__:
+                # just inherit it
+                break
+            if 'getrandbits' in c.__dict__:
+                cls._randbelow = cls._randbelow_with_getrandbits
+                break
+            if 'random' in c.__dict__:
+                cls._randbelow = cls._randbelow_without_getrandbits
+                break
+
+    def _randbelow_with_getrandbits(self, n):
+        "Return a random int in the range [0,n).  Returns 0 if n==0."
+
+        if not n:
+            return 0
+        getrandbits = self.getrandbits
+        k = n.bit_length()  # don't use (n-1) here because n can be 1
+        r = getrandbits(k)  # 0 <= r < 2**k
+        while r >= n:
+            r = getrandbits(k)
+        return r
+
+    def _randbelow_without_getrandbits(self, n, maxsize=1<<BPF):
+        """Return a random int in the range [0,n).  Returns 0 if n==0.
+
+        The implementation does not use getrandbits, but only random.
+        """
+
+        random = self.random
+        if n >= maxsize:
+            _warn("Underlying random() generator does not supply \n"
+                "enough bits to choose from a population range this large.\n"
+                "To remove the range limitation, add a getrandbits() method.")
+            return _floor(random() * n)
+        if n == 0:
+            return 0
+        rem = maxsize % n
+        limit = (maxsize - rem) / maxsize   # int(limit * maxsize) % n == 0
+        r = random()
+        while r >= limit:
+            r = random()
+        return _floor(r * maxsize) % n
+
+    _randbelow = _randbelow_with_getrandbits
+
+
+    ## --------------------------------------------------------
+    ## ---- Methods below this point generate custom distributions
+    ## ---- based on the methods defined above.  They do not
+    ## ---- directly touch the underlying generator and only
+    ## ---- access randomness through the methods:  random(),
+    ## ---- getrandbits(), or _randbelow().
+
+
+    ## -------------------- bytes methods ---------------------
+
+    def randbytes(self, n):
+        """Generate n random bytes."""
+        return self.getrandbits(n * 8).to_bytes(n, 'little')
+
+
+    ## -------------------- integer methods  -------------------
+
+    def randrange(self, start, stop=None, step=1):
         """Choose a random item from range(start, stop[, step]).
 
         This fixes the problem with randint() which includes the
@@ -207,7 +297,7 @@
 
         # This code is a bit messy to make it fast for the
         # common case while still doing adequate error checking.
-        istart = _int(start)
+        istart = int(start)
         if istart != start:
             raise ValueError("non-integer arg 1 for randrange()")
         if stop is None:
@@ -216,7 +306,7 @@
             raise ValueError("empty range for randrange()")
 
         # stop argument supplied.
-        istop = _int(stop)
+        istop = int(stop)
         if istop != stop:
             raise ValueError("non-integer stop for randrange()")
         width = istop - istart
@@ -226,7 +316,7 @@
             raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
 
         # Non-unit step argument supplied.
-        istep = _int(step)
+        istep = int(step)
         if istep != step:
             raise ValueError("non-integer step for randrange()")
         if istep > 0:
@@ -239,7 +329,7 @@
         if n <= 0:
             raise ValueError("empty range for randrange()")
 
-        return istart + istep*self._randbelow(n)
+        return istart + istep * self._randbelow(n)
 
     def randint(self, a, b):
         """Return random integer in range [a, b], including both end points.
@@ -247,48 +337,13 @@
 
         return self.randrange(a, b+1)
 
-    def _randbelow_with_getrandbits(self, n):
-        "Return a random int in the range [0,n).  Raises ValueError if n==0."
 
-        getrandbits = self.getrandbits
-        k = n.bit_length()  # don't use (n-1) here because n can be 1
-        r = getrandbits(k)          # 0 <= r < 2**k
-        while r >= n:
-            r = getrandbits(k)
-        return r
-
-    def _randbelow_without_getrandbits(self, n, int=int, maxsize=1<<BPF):
-        """Return a random int in the range [0,n).  Raises ValueError if n==0.
-
-        The implementation does not use getrandbits, but only random.
-        """
-
-        random = self.random
-        if n >= maxsize:
-            _warn("Underlying random() generator does not supply \n"
-                "enough bits to choose from a population range this large.\n"
-                "To remove the range limitation, add a getrandbits() method.")
-            return int(random() * n)
-        if n == 0:
-            raise ValueError("Boundary cannot be zero")
-        rem = maxsize % n
-        limit = (maxsize - rem) / maxsize   # int(limit * maxsize) % n == 0
-        r = random()
-        while r >= limit:
-            r = random()
-        return int(r*maxsize) % n
-
-    _randbelow = _randbelow_with_getrandbits
-
-## -------------------- sequence methods  -------------------
+    ## -------------------- sequence methods  -------------------
 
     def choice(self, seq):
         """Choose a random element from a non-empty sequence."""
-        try:
-            i = self._randbelow(len(seq))
-        except ValueError:
-            raise IndexError('Cannot choose from an empty sequence') from None
-        return seq[i]
+        # raises IndexError if seq is empty
+        return seq[self._randbelow(len(seq))]
 
     def shuffle(self, x, random=None):
         """Shuffle list x in place, and return None.
@@ -303,16 +358,20 @@
             randbelow = self._randbelow
             for i in reversed(range(1, len(x))):
                 # pick an element in x[:i+1] with which to exchange x[i]
-                j = randbelow(i+1)
+                j = randbelow(i + 1)
                 x[i], x[j] = x[j], x[i]
         else:
-            _int = int
+            _warn('The *random* parameter to shuffle() has been deprecated\n'
+                  'since Python 3.9 and will be removed in a subsequent '
+                  'version.',
+                  DeprecationWarning, 2)
+            floor = _floor
             for i in reversed(range(1, len(x))):
                 # pick an element in x[:i+1] with which to exchange x[i]
-                j = _int(random() * (i+1))
+                j = floor(random() * (i + 1))
                 x[i], x[j] = x[j], x[i]
 
-    def sample(self, population, k):
+    def sample(self, population, k, *, counts=None):
         """Chooses k unique random elements from a population sequence or set.
 
         Returns a new list containing elements from the population while
@@ -325,9 +384,21 @@
         population contains repeats, then each occurrence is a possible
         selection in the sample.
 
-        To choose a sample in a range of integers, use range as an argument.
-        This is especially fast and space efficient for sampling from a
-        large population:   sample(range(10000000), 60)
+        Repeated elements can be specified one at a time or with the optional
+        counts parameter.  For example:
+
+            sample(['red', 'blue'], counts=[4, 2], k=5)
+
+        is equivalent to:
+
+            sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
+
+        To choose a sample from a range of integers, use range() for the
+        population argument.  This is especially fast and space efficient
+        for sampling from a large population:
+
+            sample(range(10000000), 60)
+
         """
 
         # Sampling without replacement entails tracking either potential
@@ -354,24 +425,40 @@
         # causing them to eat more entropy than necessary.
 
         if isinstance(population, _Set):
+            _warn('Sampling from a set deprecated\n'
+                  'since Python 3.9 and will be removed in a subsequent version.',
+                  DeprecationWarning, 2)
             population = tuple(population)
         if not isinstance(population, _Sequence):
-            raise TypeError("Population must be a sequence or set.  For dicts, use list(d).")
-        randbelow = self._randbelow
+            raise TypeError("Population must be a sequence.  For dicts or sets, use sorted(d).")
         n = len(population)
+        if counts is not None:
+            cum_counts = list(_accumulate(counts))
+            if len(cum_counts) != n:
+                raise ValueError('The number of counts does not match the population')
+            total = cum_counts.pop()
+            if not isinstance(total, int):
+                raise TypeError('Counts must be integers')
+            if total <= 0:
+                raise ValueError('Total of counts must be greater than zero')
+            selections = sample(range(total), k=k)
+            bisect = _bisect
+            return [population[bisect(cum_counts, s)] for s in selections]
+        randbelow = self._randbelow
         if not 0 <= k <= n:
             raise ValueError("Sample larger than population or is negative")
         result = [None] * k
         setsize = 21        # size of a small set minus size of an empty list
         if k > 5:
-            setsize += 4 ** _ceil(_log(k * 3, 4)) # table size for big sets
+            setsize += 4 ** _ceil(_log(k * 3, 4))  # table size for big sets
         if n <= setsize:
-            # An n-length list is smaller than a k-length set
+            # An n-length list is smaller than a k-length set.
+            # Invariant:  non-selected at pool[0 : n-i]
             pool = list(population)
-            for i in range(k):         # invariant:  non-selected at [0,n-i)
-                j = randbelow(n-i)
+            for i in range(k):
+                j = randbelow(n - i)
                 result[i] = pool[j]
-                pool[j] = pool[n-i-1]   # move non-selected item into vacancy
+                pool[j] = pool[n - i - 1]  # move non-selected item into vacancy
         else:
             selected = set()
             selected_add = selected.add
@@ -394,29 +481,28 @@
         n = len(population)
         if cum_weights is None:
             if weights is None:
-                _int = int
+                floor = _floor
                 n += 0.0    # convert to float for a small speed improvement
-                return [population[_int(random() * n)] for i in _repeat(None, k)]
+                return [population[floor(random() * n)] for i in _repeat(None, k)]
             cum_weights = list(_accumulate(weights))
         elif weights is not None:
             raise TypeError('Cannot specify both weights and cumulative weights')
         if len(cum_weights) != n:
             raise ValueError('The number of weights does not match the population')
-        bisect = _bisect
         total = cum_weights[-1] + 0.0   # convert to float
+        if total <= 0.0:
+            raise ValueError('Total of weights must be greater than zero')
+        bisect = _bisect
         hi = n - 1
         return [population[bisect(cum_weights, random() * total, 0, hi)]
                 for i in _repeat(None, k)]
 
-## -------------------- real-valued distributions  -------------------
 
-## -------------------- uniform distribution -------------------
+    ## -------------------- real-valued distributions  -------------------
 
     def uniform(self, a, b):
         "Get a random number in the range [a, b) or [a, b] depending on rounding."
-        return a + (b-a) * self.random()
-
-## -------------------- triangular --------------------
+        return a + (b - a) * self.random()
 
     def triangular(self, low=0.0, high=1.0, mode=None):
         """Triangular distribution.
@@ -438,180 +524,26 @@
             low, high = high, low
         return low + (high - low) * _sqrt(u * c)
 
-## -------------------- normal distribution --------------------
-
     def normalvariate(self, mu, sigma):
         """Normal distribution.
 
         mu is the mean, and sigma is the standard deviation.
 
         """
-        # mu = mean, sigma = standard deviation
-
         # Uses Kinderman and Monahan method. Reference: Kinderman,
         # A.J. and Monahan, J.F., "Computer generation of random
         # variables using the ratio of uniform deviates", ACM Trans
         # Math Software, 3, (1977), pp257-260.
 
         random = self.random
-        while 1:
+        while True:
             u1 = random()
             u2 = 1.0 - random()
-            z = NV_MAGICCONST*(u1-0.5)/u2
-            zz = z*z/4.0
+            z = NV_MAGICCONST * (u1 - 0.5) / u2
+            zz = z * z / 4.0
             if zz <= -_log(u2):
                 break
-        return mu + z*sigma
-
-## -------------------- lognormal distribution --------------------
-
-    def lognormvariate(self, mu, sigma):
-        """Log normal distribution.
-
-        If you take the natural logarithm of this distribution, you'll get a
-        normal distribution with mean mu and standard deviation sigma.
-        mu can have any value, and sigma must be greater than zero.
-
-        """
-        return _exp(self.normalvariate(mu, sigma))
-
-## -------------------- exponential distribution --------------------
-
-    def expovariate(self, lambd):
-        """Exponential distribution.
-
-        lambd is 1.0 divided by the desired mean.  It should be
-        nonzero.  (The parameter would be called "lambda", but that is
-        a reserved word in Python.)  Returned values range from 0 to
-        positive infinity if lambd is positive, and from negative
-        infinity to 0 if lambd is negative.
-
-        """
-        # lambd: rate lambd = 1/mean
-        # ('lambda' is a Python reserved word)
-
-        # we use 1-random() instead of random() to preclude the
-        # possibility of taking the log of zero.
-        return -_log(1.0 - self.random())/lambd
-
-## -------------------- von Mises distribution --------------------
-
-    def vonmisesvariate(self, mu, kappa):
-        """Circular data distribution.
-
-        mu is the mean angle, expressed in radians between 0 and 2*pi, and
-        kappa is the concentration parameter, which must be greater than or
-        equal to zero.  If kappa is equal to zero, this distribution reduces
-        to a uniform random angle over the range 0 to 2*pi.
-
-        """
-        # mu:    mean angle (in radians between 0 and 2*pi)
-        # kappa: concentration parameter kappa (>= 0)
-        # if kappa = 0 generate uniform random angle
-
-        # Based upon an algorithm published in: Fisher, N.I.,
-        # "Statistical Analysis of Circular Data", Cambridge
-        # University Press, 1993.
-
-        # Thanks to Magnus Kessler for a correction to the
-        # implementation of step 4.
-
-        random = self.random
-        if kappa <= 1e-6:
-            return TWOPI * random()
-
-        s = 0.5 / kappa
-        r = s + _sqrt(1.0 + s * s)
-
-        while 1:
-            u1 = random()
-            z = _cos(_pi * u1)
-
-            d = z / (r + z)
-            u2 = random()
-            if u2 < 1.0 - d * d or u2 <= (1.0 - d) * _exp(d):
-                break
-
-        q = 1.0 / r
-        f = (q + z) / (1.0 + q * z)
-        u3 = random()
-        if u3 > 0.5:
-            theta = (mu + _acos(f)) % TWOPI
-        else:
-            theta = (mu - _acos(f)) % TWOPI
-
-        return theta
-
-## -------------------- gamma distribution --------------------
-
-    def gammavariate(self, alpha, beta):
-        """Gamma distribution.  Not the gamma function!
-
-        Conditions on the parameters are alpha > 0 and beta > 0.
-
-        The probability distribution function is:
-
-                    x ** (alpha - 1) * math.exp(-x / beta)
-          pdf(x) =  --------------------------------------
-                      math.gamma(alpha) * beta ** alpha
-
-        """
-
-        # alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2
-
-        # Warning: a few older sources define the gamma distribution in terms
-        # of alpha > -1.0
-        if alpha <= 0.0 or beta <= 0.0:
-            raise ValueError('gammavariate: alpha and beta must be > 0.0')
-
-        random = self.random
-        if alpha > 1.0:
-
-            # Uses R.C.H. Cheng, "The generation of Gamma
-            # variables with non-integral shape parameters",
-            # Applied Statistics, (1977), 26, No. 1, p71-74
-
-            ainv = _sqrt(2.0 * alpha - 1.0)
-            bbb = alpha - LOG4
-            ccc = alpha + ainv
-
-            while 1:
-                u1 = random()
-                if not 1e-7 < u1 < .9999999:
-                    continue
-                u2 = 1.0 - random()
-                v = _log(u1/(1.0-u1))/ainv
-                x = alpha*_exp(v)
-                z = u1*u1*u2
-                r = bbb+ccc*v-x
-                if r + SG_MAGICCONST - 4.5*z >= 0.0 or r >= _log(z):
-                    return x * beta
-
-        elif alpha == 1.0:
-            # expovariate(1/beta)
-            return -_log(1.0 - random()) * beta
-
-        else:   # alpha is between 0 and 1 (exclusive)
-
-            # Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle
-
-            while 1:
-                u = random()
-                b = (_e + alpha)/_e
-                p = b*u
-                if p <= 1.0:
-                    x = p ** (1.0/alpha)
-                else:
-                    x = -_log((b-p)/alpha)
-                u1 = random()
-                if p > 1.0:
-                    if u1 <= x ** (alpha - 1.0):
-                        break
-                elif u1 <= _exp(-x):
-                    break
-            return x * beta
-
-## -------------------- Gauss (faster alternative) --------------------
+        return mu + z * sigma
 
     def gauss(self, mu, sigma):
         """Gaussian distribution.
@@ -622,7 +554,6 @@
         Not thread-safe without a lock around calls.
 
         """
-
         # When x and y are two variables from [0, 1), uniformly
         # distributed, then
         #
@@ -650,21 +581,141 @@
             z = _cos(x2pi) * g2rad
             self.gauss_next = _sin(x2pi) * g2rad
 
-        return mu + z*sigma
+        return mu + z * sigma
 
-## -------------------- beta --------------------
-## See
-## http://mail.python.org/pipermail/python-bugs-list/2001-January/003752.html
-## for Ivan Frohne's insightful analysis of why the original implementation:
-##
-##    def betavariate(self, alpha, beta):
-##        # Discrete Event Simulation in C, pp 87-88.
-##
-##        y = self.expovariate(alpha)
-##        z = self.expovariate(1.0/beta)
-##        return z/(y+z)
-##
-## was dead wrong, and how it probably got that way.
+    def lognormvariate(self, mu, sigma):
+        """Log normal distribution.
+
+        If you take the natural logarithm of this distribution, you'll get a
+        normal distribution with mean mu and standard deviation sigma.
+        mu can have any value, and sigma must be greater than zero.
+
+        """
+        return _exp(self.normalvariate(mu, sigma))
+
+    def expovariate(self, lambd):
+        """Exponential distribution.
+
+        lambd is 1.0 divided by the desired mean.  It should be
+        nonzero.  (The parameter would be called "lambda", but that is
+        a reserved word in Python.)  Returned values range from 0 to
+        positive infinity if lambd is positive, and from negative
+        infinity to 0 if lambd is negative.
+
+        """
+        # lambd: rate lambd = 1/mean
+        # ('lambda' is a Python reserved word)
+
+        # we use 1-random() instead of random() to preclude the
+        # possibility of taking the log of zero.
+        return -_log(1.0 - self.random()) / lambd
+
+    def vonmisesvariate(self, mu, kappa):
+        """Circular data distribution.
+
+        mu is the mean angle, expressed in radians between 0 and 2*pi, and
+        kappa is the concentration parameter, which must be greater than or
+        equal to zero.  If kappa is equal to zero, this distribution reduces
+        to a uniform random angle over the range 0 to 2*pi.
+
+        """
+        # Based upon an algorithm published in: Fisher, N.I.,
+        # "Statistical Analysis of Circular Data", Cambridge
+        # University Press, 1993.
+
+        # Thanks to Magnus Kessler for a correction to the
+        # implementation of step 4.
+
+        random = self.random
+        if kappa <= 1e-6:
+            return TWOPI * random()
+
+        s = 0.5 / kappa
+        r = s + _sqrt(1.0 + s * s)
+
+        while True:
+            u1 = random()
+            z = _cos(_pi * u1)
+
+            d = z / (r + z)
+            u2 = random()
+            if u2 < 1.0 - d * d or u2 <= (1.0 - d) * _exp(d):
+                break
+
+        q = 1.0 / r
+        f = (q + z) / (1.0 + q * z)
+        u3 = random()
+        if u3 > 0.5:
+            theta = (mu + _acos(f)) % TWOPI
+        else:
+            theta = (mu - _acos(f)) % TWOPI
+
+        return theta
+
+    def gammavariate(self, alpha, beta):
+        """Gamma distribution.  Not the gamma function!
+
+        Conditions on the parameters are alpha > 0 and beta > 0.
+
+        The probability distribution function is:
+
+                    x ** (alpha - 1) * math.exp(-x / beta)
+          pdf(x) =  --------------------------------------
+                      math.gamma(alpha) * beta ** alpha
+
+        """
+        # alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2
+
+        # Warning: a few older sources define the gamma distribution in terms
+        # of alpha > -1.0
+        if alpha <= 0.0 or beta <= 0.0:
+            raise ValueError('gammavariate: alpha and beta must be > 0.0')
+
+        random = self.random
+        if alpha > 1.0:
+
+            # Uses R.C.H. Cheng, "The generation of Gamma
+            # variables with non-integral shape parameters",
+            # Applied Statistics, (1977), 26, No. 1, p71-74
+
+            ainv = _sqrt(2.0 * alpha - 1.0)
+            bbb = alpha - LOG4
+            ccc = alpha + ainv
+
+            while 1:
+                u1 = random()
+                if not 1e-7 < u1 < 0.9999999:
+                    continue
+                u2 = 1.0 - random()
+                v = _log(u1 / (1.0 - u1)) / ainv
+                x = alpha * _exp(v)
+                z = u1 * u1 * u2
+                r = bbb + ccc * v - x
+                if r + SG_MAGICCONST - 4.5 * z >= 0.0 or r >= _log(z):
+                    return x * beta
+
+        elif alpha == 1.0:
+            # expovariate(1/beta)
+            return -_log(1.0 - random()) * beta
+
+        else:
+            # alpha is between 0 and 1 (exclusive)
+            # Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle
+            while True:
+                u = random()
+                b = (_e + alpha) / _e
+                p = b * u
+                if p <= 1.0:
+                    x = p ** (1.0 / alpha)
+                else:
+                    x = -_log((b - p) / alpha)
+                u1 = random()
+                if p > 1.0:
+                    if u1 <= x ** (alpha - 1.0):
+                        break
+                elif u1 <= _exp(-x):
+                    break
+            return x * beta
 
     def betavariate(self, alpha, beta):
         """Beta distribution.
@@ -673,25 +724,32 @@
         Returned values range between 0 and 1.
 
         """
+        ## See
+        ## http://mail.python.org/pipermail/python-bugs-list/2001-January/003752.html
+        ## for Ivan Frohne's insightful analysis of why the original implementation:
+        ##
+        ##    def betavariate(self, alpha, beta):
+        ##        # Discrete Event Simulation in C, pp 87-88.
+        ##
+        ##        y = self.expovariate(alpha)
+        ##        z = self.expovariate(1.0/beta)
+        ##        return z/(y+z)
+        ##
+        ## was dead wrong, and how it probably got that way.
 
         # This version due to Janne Sinkkonen, and matches all the std
         # texts (e.g., Knuth Vol 2 Ed 3 pg 134 "the beta distribution").
         y = self.gammavariate(alpha, 1.0)
-        if y == 0:
-            return 0.0
-        else:
+        if y:
             return y / (y + self.gammavariate(beta, 1.0))
-
-## -------------------- Pareto --------------------
+        return 0.0
 
     def paretovariate(self, alpha):
         """Pareto distribution.  alpha is the shape parameter."""
         # Jain, pg. 495
 
         u = 1.0 - self.random()
-        return 1.0 / u ** (1.0/alpha)
-
-## -------------------- Weibull --------------------
+        return 1.0 / u ** (1.0 / alpha)
 
     def weibullvariate(self, alpha, beta):
         """Weibull distribution.
@@ -702,16 +760,20 @@
         # Jain, pg. 499; bug fix courtesy Bill Arms
 
         u = 1.0 - self.random()
-        return alpha * (-_log(u)) ** (1.0/beta)
+        return alpha * (-_log(u)) ** (1.0 / beta)
 
+
+## ------------------------------------------------------------------
 ## --------------- Operating System Random Source  ------------------
 
+
 class SystemRandom(Random):
     """Alternate random number generator using sources provided
     by the operating system (such as /dev/urandom on Unix or
     CryptGenRandom on Windows).
 
      Not available on all systems (see os.urandom() for details).
+
     """
 
     def random(self):
@@ -720,12 +782,18 @@
 
     def getrandbits(self, k):
         """getrandbits(k) -> x.  Generates an int with k random bits."""
-        if k <= 0:
-            raise ValueError('number of bits must be greater than zero')
+        if k < 0:
+            raise ValueError('number of bits must be non-negative')
         numbytes = (k + 7) // 8                       # bits / 8 and rounded up
         x = int.from_bytes(_urandom(numbytes), 'big')
         return x >> (numbytes * 8 - k)                # trim excess bits
 
+    def randbytes(self, n):
+        """Generate n random bytes."""
+        # os.urandom(n) fails with ValueError for n < 0
+        # and returns an empty bytes string for n == 0.
+        return _urandom(n)
+
     def seed(self, *args, **kwds):
         "Stub method.  Not used for a system random number generator."
         return None
@@ -735,51 +803,11 @@
         raise NotImplementedError('System entropy source does not have state.')
     getstate = setstate = _notimplemented
 
-## -------------------- test program --------------------
 
-def _test_generator(n, func, args):
-    import time
-    print(n, 'times', func.__name__)
-    total = 0.0
-    sqsum = 0.0
-    smallest = 1e10
-    largest = -1e10
-    t0 = time.perf_counter()
-    for i in range(n):
-        x = func(*args)
-        total += x
-        sqsum = sqsum + x*x
-        smallest = min(x, smallest)
-        largest = max(x, largest)
-    t1 = time.perf_counter()
-    print(round(t1-t0, 3), 'sec,', end=' ')
-    avg = total/n
-    stddev = _sqrt(sqsum/n - avg*avg)
-    print('avg %g, stddev %g, min %g, max %g\n' % \
-              (avg, stddev, smallest, largest))
-
-
-def _test(N=2000):
-    _test_generator(N, random, ())
-    _test_generator(N, normalvariate, (0.0, 1.0))
-    _test_generator(N, lognormvariate, (0.0, 1.0))
-    _test_generator(N, vonmisesvariate, (0.0, 1.0))
-    _test_generator(N, gammavariate, (0.01, 1.0))
-    _test_generator(N, gammavariate, (0.1, 1.0))
-    _test_generator(N, gammavariate, (0.1, 2.0))
-    _test_generator(N, gammavariate, (0.5, 1.0))
-    _test_generator(N, gammavariate, (0.9, 1.0))
-    _test_generator(N, gammavariate, (1.0, 1.0))
-    _test_generator(N, gammavariate, (2.0, 1.0))
-    _test_generator(N, gammavariate, (20.0, 1.0))
-    _test_generator(N, gammavariate, (200.0, 1.0))
-    _test_generator(N, gauss, (0.0, 1.0))
-    _test_generator(N, betavariate, (3.0, 3.0))
-    _test_generator(N, triangular, (0.0, 1.0, 1.0/3.0))
-
+# ----------------------------------------------------------------------
 # Create one instance, seeded from current time, and export its methods
 # as module-level functions.  The functions share state across all uses
-#(both in the user's code and in the Python libraries), but that's fine
+# (both in the user's code and in the Python libraries), but that's fine
 # for most programs and is easier for the casual user than making them
 # instantiate their own Random() instance.
 
@@ -806,6 +834,50 @@
 getstate = _inst.getstate
 setstate = _inst.setstate
 getrandbits = _inst.getrandbits
+randbytes = _inst.randbytes
+
+
+## ------------------------------------------------------
+## ----------------- test program -----------------------
+
+def _test_generator(n, func, args):
+    from statistics import stdev, fmean as mean
+    from time import perf_counter
+
+    t0 = perf_counter()
+    data = [func(*args) for i in range(n)]
+    t1 = perf_counter()
+
+    xbar = mean(data)
+    sigma = stdev(data, xbar)
+    low = min(data)
+    high = max(data)
+
+    print(f'{t1 - t0:.3f} sec, {n} times {func.__name__}')
+    print('avg %g, stddev %g, min %g, max %g\n' % (xbar, sigma, low, high))
+
+
+def _test(N=2000):
+    _test_generator(N, random, ())
+    _test_generator(N, normalvariate, (0.0, 1.0))
+    _test_generator(N, lognormvariate, (0.0, 1.0))
+    _test_generator(N, vonmisesvariate, (0.0, 1.0))
+    _test_generator(N, gammavariate, (0.01, 1.0))
+    _test_generator(N, gammavariate, (0.1, 1.0))
+    _test_generator(N, gammavariate, (0.1, 2.0))
+    _test_generator(N, gammavariate, (0.5, 1.0))
+    _test_generator(N, gammavariate, (0.9, 1.0))
+    _test_generator(N, gammavariate, (1.0, 1.0))
+    _test_generator(N, gammavariate, (2.0, 1.0))
+    _test_generator(N, gammavariate, (20.0, 1.0))
+    _test_generator(N, gammavariate, (200.0, 1.0))
+    _test_generator(N, gauss, (0.0, 1.0))
+    _test_generator(N, betavariate, (3.0, 3.0))
+    _test_generator(N, triangular, (0.0, 1.0, 1.0 / 3.0))
+
+
+## ------------------------------------------------------
+## ------------------ fork support  ---------------------
 
 if hasattr(_os, "fork"):
     _os.register_at_fork(after_in_child=_inst.seed)
diff --git a/Lib/runpy.py b/Lib/runpy.py
index 0f54f3e..7e1e1ac 100644
--- a/Lib/runpy.py
+++ b/Lib/runpy.py
@@ -133,6 +133,9 @@
         # importlib, where the latter raises other errors for cases where
         # pkgutil previously raised ImportError
         msg = "Error while finding module specification for {!r} ({}: {})"
+        if mod_name.endswith(".py"):
+            msg += (f". Try using '{mod_name[:-3]}' instead of "
+                    f"'{mod_name}' as the module name.")
         raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex
     if spec is None:
         raise error("No module named %s" % mod_name)
diff --git a/Lib/secrets.py b/Lib/secrets.py
index 1304342..a546efb 100644
--- a/Lib/secrets.py
+++ b/Lib/secrets.py
@@ -14,7 +14,6 @@
 
 import base64
 import binascii
-import os
 
 from hmac import compare_digest
 from random import SystemRandom
@@ -44,7 +43,7 @@
     """
     if nbytes is None:
         nbytes = DEFAULT_ENTROPY
-    return os.urandom(nbytes)
+    return _sysrand.randbytes(nbytes)
 
 def token_hex(nbytes=None):
     """Return a random text string, in hexadecimal.
diff --git a/Lib/selectors.py b/Lib/selectors.py
index a9a0801..bb15a1c 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -57,6 +57,7 @@
     SelectorKey.data.__doc__ = ('''Optional opaque data associated to this file object.
     For example, this could be used to store a per-client session ID.''')
 
+
 class _SelectorMapping(Mapping):
     """Mapping of file objects to selector keys."""
 
@@ -552,7 +553,10 @@
 
         def select(self, timeout=None):
             timeout = None if timeout is None else max(timeout, 0)
-            max_ev = len(self._fd_to_key)
+            # If max_ev is 0, kqueue will ignore the timeout. For consistent
+            # behavior with the other selector classes, we prevent that here
+            # (using max). See https://bugs.python.org/issue29255
+            max_ev = max(len(self._fd_to_key), 1)
             ready = []
             try:
                 kev_list = self._selector.control(None, max_ev, timeout)
@@ -577,16 +581,39 @@
             super().close()
 
 
+def _can_use(method):
+    """Check if we can use the selector depending upon the
+    operating system. """
+    # Implementation based upon https://github.com/sethmlarson/selectors2/blob/master/selectors2.py
+    selector = getattr(select, method, None)
+    if selector is None:
+        # select module does not implement method
+        return False
+    # check if the OS and Kernel actually support the method. Call may fail with
+    # OSError: [Errno 38] Function not implemented
+    try:
+        selector_obj = selector()
+        if method == 'poll':
+            # check that poll actually works
+            selector_obj.poll(0)
+        else:
+            # close epoll, kqueue, and devpoll fd
+            selector_obj.close()
+        return True
+    except OSError:
+        return False
+
+
 # Choose the best implementation, roughly:
 #    epoll|kqueue|devpoll > poll > select.
 # select() also can't accept a FD > FD_SETSIZE (usually around 1024)
-if 'KqueueSelector' in globals():
+if _can_use('kqueue'):
     DefaultSelector = KqueueSelector
-elif 'EpollSelector' in globals():
+elif _can_use('epoll'):
     DefaultSelector = EpollSelector
-elif 'DevpollSelector' in globals():
+elif _can_use('devpoll'):
     DefaultSelector = DevpollSelector
-elif 'PollSelector' in globals():
+elif _can_use('poll'):
     DefaultSelector = PollSelector
 else:
     DefaultSelector = SelectSelector
diff --git a/Lib/shlex.py b/Lib/shlex.py
index c817274..4801a6c 100644
--- a/Lib/shlex.py
+++ b/Lib/shlex.py
@@ -304,6 +304,10 @@
 
 def split(s, comments=False, posix=True):
     """Split the string *s* using shell-like syntax."""
+    if s is None:
+        import warnings
+        warnings.warn("Passing None for 's' to shlex.split() is deprecated.",
+                      DeprecationWarning, stacklevel=2)
     lex = shlex(s, posix=posix)
     lex.whitespace_split = True
     if not comments:
diff --git a/Lib/shutil.py b/Lib/shutil.py
index 1f05d80..f0e833d 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -53,6 +53,9 @@
 _USE_CP_SENDFILE = hasattr(os, "sendfile") and sys.platform.startswith("linux")
 _HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile")  # macOS
 
+# CMD defaults in Windows 10
+_WIN_DEFAULT_PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC"
+
 __all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2",
            "copytree", "move", "rmtree", "Error", "SpecialFileError",
            "ExecError", "make_archive", "get_archive_formats",
@@ -708,7 +711,7 @@
         try:
             fd = os.open(path, os.O_RDONLY)
         except Exception:
-            onerror(os.lstat, path, sys.exc_info())
+            onerror(os.open, path, sys.exc_info())
             return
         try:
             if os.path.samestat(orig_st, os.fstat(fd)):
@@ -741,8 +744,20 @@
 rmtree.avoids_symlink_attacks = _use_fd_functions
 
 def _basename(path):
-    # A basename() variant which first strips the trailing slash, if present.
-    # Thus we always get the last component of the path, even for directories.
+    """A basename() variant which first strips the trailing slash, if present.
+    Thus we always get the last component of the path, even for directories.
+
+    path: Union[PathLike, str]
+
+    e.g.
+    >>> os.path.basename('/bar/foo')
+    'foo'
+    >>> os.path.basename('/bar/foo/')
+    ''
+    >>> _basename('/bar/foo/')
+    'foo'
+    """
+    path = os.fspath(path)
     sep = os.path.sep + (os.path.altsep or '')
     return os.path.basename(path.rstrip(sep))
 
@@ -781,7 +796,10 @@
             os.rename(src, dst)
             return
 
+        # Using _basename instead of os.path.basename is important, as we must
+        # ignore any trailing slash to avoid the basename returning ''
         real_dst = os.path.join(dst, _basename(src))
+
         if os.path.exists(real_dst):
             raise Error("Destination path '%s' already exists" % real_dst)
     try:
@@ -1400,7 +1418,9 @@
             path.insert(0, curdir)
 
         # PATHEXT is necessary to check on Windows.
-        pathext = os.environ.get("PATHEXT", "").split(os.pathsep)
+        pathext_source = os.getenv("PATHEXT") or _WIN_DEFAULT_PATHEXT
+        pathext = [ext for ext in pathext_source.split(os.pathsep) if ext]
+
         if use_bytes:
             pathext = [os.fsencode(ext) for ext in pathext]
         # See if the given file matches any of the expected path extensions.
diff --git a/Lib/site.py b/Lib/site.py
index 9fa21cc..9e617af 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -334,13 +334,22 @@
             continue
         seen.add(prefix)
 
+        libdirs = [sys.platlibdir]
+        if sys.platlibdir != "lib":
+            libdirs.append("lib")
+
         if os.sep == '/':
-            sitepackages.append(os.path.join(prefix, "lib",
-                                        "python%d.%d" % sys.version_info[:2],
-                                        "site-packages"))
+            for libdir in libdirs:
+                path = os.path.join(prefix, libdir,
+                                    "python%d.%d" % sys.version_info[:2],
+                                    "site-packages")
+                sitepackages.append(path)
         else:
             sitepackages.append(prefix)
-            sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
+
+            for libdir in libdirs:
+                path = os.path.join(prefix, libdir, "site-packages")
+                sitepackages.append(path)
     return sitepackages
 
 def addsitepackages(known_paths, prefixes=None):
@@ -590,7 +599,7 @@
     Exit codes with --user-base or --user-site:
       0 - user site directory is enabled
       1 - user site directory is disabled by user
-      2 - uses site directory is disabled by super user
+      2 - user site directory is disabled by super user
           or for security reasons
      >2 - unknown error
     """
diff --git a/Lib/smtpd.py b/Lib/smtpd.py
index 8103ca9..8f1a22e 100755
--- a/Lib/smtpd.py
+++ b/Lib/smtpd.py
@@ -779,6 +779,8 @@
 
 class MailmanProxy(PureProxy):
     def __init__(self, *args, **kwargs):
+        warn('MailmanProxy is deprecated and will be removed '
+             'in future', DeprecationWarning, 2)
         if 'enable_SMTPUTF8' in kwargs and kwargs['enable_SMTPUTF8']:
             raise ValueError("MailmanProxy does not support SMTPUTF8.")
         super(PureProxy, self).__init__(*args, **kwargs)
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 8e3d4bf..7808ba0 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -303,6 +303,8 @@
     def _get_socket(self, host, port, timeout):
         # This makes it simpler for SMTP_SSL to use the SMTP connect code
         # and just alter the socket connection bit.
+        if timeout is not None and not timeout:
+            raise ValueError('Non-blocking socket (timeout=0) is not supported')
         if self.debuglevel > 0:
             self._print_debug('connect: to', (host, port), self.source_address)
         return socket.create_connection((host, port), timeout,
@@ -333,8 +335,6 @@
                     raise OSError("nonnumeric port")
         if not port:
             port = self.default_port
-        if self.debuglevel > 0:
-            self._print_debug('connect:', (host, port))
         sys.audit("smtplib.connect", self, host, port)
         self.sock = self._get_socket(host, port, self.timeout)
         self.file = None
@@ -1032,13 +1032,12 @@
                                                      keyfile=keyfile)
             self.context = context
             SMTP.__init__(self, host, port, local_hostname, timeout,
-                    source_address)
+                          source_address)
 
         def _get_socket(self, host, port, timeout):
             if self.debuglevel > 0:
                 self._print_debug('connect:', (host, port))
-            new_socket = socket.create_connection((host, port), timeout,
-                    self.source_address)
+            new_socket = super()._get_socket(host, port, timeout)
             new_socket = self.context.wrap_socket(new_socket,
                                                   server_hostname=self._host)
             return new_socket
@@ -1067,19 +1066,23 @@
     ehlo_msg = "lhlo"
 
     def __init__(self, host='', port=LMTP_PORT, local_hostname=None,
-            source_address=None):
+                 source_address=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
         """Initialize a new instance."""
-        SMTP.__init__(self, host, port, local_hostname=local_hostname,
-                      source_address=source_address)
+        super().__init__(host, port, local_hostname=local_hostname,
+                         source_address=source_address, timeout=timeout)
 
     def connect(self, host='localhost', port=0, source_address=None):
         """Connect to the LMTP daemon, on either a Unix or a TCP socket."""
         if host[0] != '/':
-            return SMTP.connect(self, host, port, source_address=source_address)
+            return super().connect(host, port, source_address=source_address)
+
+        if self.timeout is not None and not self.timeout:
+            raise ValueError('Non-blocking socket (timeout=0) is not supported')
 
         # Handle Unix-domain sockets.
         try:
             self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+            self.sock.settimeout(self.timeout)
             self.file = None
             self.sock.connect(host)
         except OSError:
diff --git a/Lib/socket.py b/Lib/socket.py
old mode 100644
new mode 100755
index f83f36d..cafa573
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -12,6 +12,8 @@
 socket() -- create a new socket object
 socketpair() -- create a pair of new socket objects [*]
 fromfd() -- create a socket object from an open file descriptor [*]
+send_fds() -- Send file descriptor to the socket.
+recv_fds() -- Recieve file descriptors from the socket.
 fromshare() -- create a socket object from data received from socket.share() [*]
 gethostname() -- return the current hostname
 gethostbyname() -- map a hostname to its IP number
@@ -104,7 +106,6 @@
     except ValueError:
         return value
 
-_realsocket = socket
 
 # WSA error codes
 if sys.platform.lower().startswith("win"):
@@ -543,6 +544,40 @@
     nfd = dup(fd)
     return socket(family, type, proto, nfd)
 
+if hasattr(_socket.socket, "sendmsg"):
+    import array
+
+    def send_fds(sock, buffers, fds, flags=0, address=None):
+        """ send_fds(sock, buffers, fds[, flags[, address]]) -> integer
+
+        Send the list of file descriptors fds over an AF_UNIX socket.
+        """
+        return sock.sendmsg(buffers, [(_socket.SOL_SOCKET,
+            _socket.SCM_RIGHTS, array.array("i", fds))])
+    __all__.append("send_fds")
+
+if hasattr(_socket.socket, "recvmsg"):
+    import array
+
+    def recv_fds(sock, bufsize, maxfds, flags=0):
+        """ recv_fds(sock, bufsize, maxfds[, flags]) -> (data, list of file
+        descriptors, msg_flags, address)
+
+        Receive up to maxfds file descriptors returning the message
+        data and a list containing the descriptors.
+        """
+        # Array of ints
+        fds = array.array("i")
+        msg, ancdata, flags, addr = sock.recvmsg(bufsize,
+            _socket.CMSG_LEN(maxfds * fds.itemsize))
+        for cmsg_level, cmsg_type, cmsg_data in ancdata:
+            if (cmsg_level == _socket.SOL_SOCKET and cmsg_type == _socket.SCM_RIGHTS):
+                fds.frombytes(cmsg_data[:
+                        len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
+
+        return msg, list(fds), flags, addr
+    __all__.append("recv_fds")
+
 if hasattr(_socket.socket, "share"):
     def fromshare(info):
         """ fromshare(info) -> socket object
diff --git a/Lib/socketserver.py b/Lib/socketserver.py
index 1ad028f..57c1ae6 100644
--- a/Lib/socketserver.py
+++ b/Lib/socketserver.py
@@ -374,7 +374,7 @@
 
         """
         print('-'*40, file=sys.stderr)
-        print('Exception happened during processing of request from',
+        print('Exception occurred during processing of request from',
             client_address, file=sys.stderr)
         import traceback
         traceback.print_exc()
diff --git a/Lib/sqlite3/test/backup.py b/Lib/sqlite3/test/backup.py
index 903bacf..ad1da97 100644
--- a/Lib/sqlite3/test/backup.py
+++ b/Lib/sqlite3/test/backup.py
@@ -36,6 +36,13 @@
         with self.assertRaises(sqlite.ProgrammingError):
             self.cx.backup(bck)
 
+    def test_bad_source_closed_connection(self):
+        bck = sqlite.connect(':memory:')
+        source = sqlite.connect(":memory:")
+        source.close()
+        with self.assertRaises(sqlite.ProgrammingError):
+            source.backup(bck)
+
     def test_bad_target_in_transaction(self):
         bck = sqlite.connect(':memory:')
         bck.execute('CREATE TABLE bar (key INTEGER)')
diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py
index 7c259d2..ad9c9f0 100644
--- a/Lib/sqlite3/test/dbapi.py
+++ b/Lib/sqlite3/test/dbapi.py
@@ -230,7 +230,7 @@
             """)
 
     def CheckExecuteWrongSqlArg(self):
-        with self.assertRaises(ValueError):
+        with self.assertRaises(TypeError):
             self.cu.execute(42)
 
     def CheckExecuteArgInt(self):
@@ -276,7 +276,7 @@
         self.assertEqual(row[0], "foo")
 
     def CheckExecuteParamSequence(self):
-        class L(object):
+        class L:
             def __len__(self):
                 return 1
             def __getitem__(self, x):
@@ -288,6 +288,18 @@
         row = self.cu.fetchone()
         self.assertEqual(row[0], "foo")
 
+    def CheckExecuteParamSequenceBadLen(self):
+        # Issue41662: Error in __len__() was overridden with ProgrammingError.
+        class L:
+            def __len__(self):
+                1/0
+            def __getitem__(slf, x):
+                raise AssertionError
+
+        self.cu.execute("insert into test(name) values ('foo')")
+        with self.assertRaises(ZeroDivisionError):
+            self.cu.execute("select name from test where name=?", L())
+
     def CheckExecuteDictMapping(self):
         self.cu.execute("insert into test(name) values ('foo')")
         self.cu.execute("select name from test where name=:name", {"name": "foo"})
@@ -377,7 +389,7 @@
         self.cu.executemany("insert into test(income) values (?)", mygen())
 
     def CheckExecuteManyWrongSqlArg(self):
-        with self.assertRaises(ValueError):
+        with self.assertRaises(TypeError):
             self.cu.executemany(42, [(3,)])
 
     def CheckExecuteManySelect(self):
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
index ce97655..6aa86d5 100644
--- a/Lib/sqlite3/test/regression.py
+++ b/Lib/sqlite3/test/regression.py
@@ -133,6 +133,19 @@
         con.execute("insert into foo(bar) values (5)")
         con.execute(SELECT)
 
+    def CheckBindMutatingList(self):
+        # Issue41662: Crash when mutate a list of parameters during iteration.
+        class X:
+            def __conform__(self, protocol):
+                parameters.clear()
+                return "..."
+        parameters = [X(), 0]
+        con = sqlite.connect(":memory:",detect_types=sqlite.PARSE_DECLTYPES)
+        con.execute("create table foo(bar X, baz integer)")
+        # Should not crash
+        with self.assertRaises(IndexError):
+            con.execute("insert into foo(bar, baz) values (?, ?)", parameters)
+
     def CheckErrorMsgDecodeError(self):
         # When porting the module to Python 3.0, the error message about
         # decoding errors disappeared. This verifies they're back again.
@@ -262,7 +275,7 @@
         Call a connection with a non-string SQL request: check error handling
         of the statement constructor.
         """
-        self.assertRaises(sqlite.Warning, self.con, 1)
+        self.assertRaises(TypeError, self.con, 1)
 
     def CheckCollation(self):
         def collation_cb(a, b):
diff --git a/Lib/ssl.py b/Lib/ssl.py
index 0726cae..30f4e59 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -252,7 +252,7 @@
 if sys.platform == "win32":
     from _ssl import enum_certificates, enum_crls
 
-from socket import socket, AF_INET, SOCK_STREAM, create_connection
+from socket import socket, SOCK_STREAM, create_connection
 from socket import SOL_SOCKET, SO_TYPE
 import socket as _socket
 import base64        # for DER-to-PEM translation
diff --git a/Lib/statistics.py b/Lib/statistics.py
index c5c6e47..f9d3802 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -163,7 +163,7 @@
     T = _coerce(int, type(start))
     for typ, values in groupby(data, type):
         T = _coerce(T, typ)  # or raise TypeError
-        for n,d in map(_exact_ratio, values):
+        for n, d in map(_exact_ratio, values):
             count += 1
             partials[d] = partials_get(d, 0) + n
     if None in partials:
@@ -261,7 +261,7 @@
         return T(value)
     except TypeError:
         if issubclass(T, Decimal):
-            return T(value.numerator)/T(value.denominator)
+            return T(value.numerator) / T(value.denominator)
         else:
             raise
 
@@ -277,8 +277,8 @@
 def _find_rteq(a, l, x):
     'Locate the rightmost value exactly equal to x'
     i = bisect_right(a, x, lo=l)
-    if i != (len(a)+1) and a[i-1] == x:
-        return i-1
+    if i != (len(a) + 1) and a[i - 1] == x:
+        return i - 1
     raise ValueError
 
 
@@ -315,7 +315,7 @@
         raise StatisticsError('mean requires at least one data point')
     T, total, count = _sum(data)
     assert count == n
-    return _convert(total/n, T)
+    return _convert(total / n, T)
 
 
 def fmean(data):
@@ -403,11 +403,11 @@
         else:
             raise TypeError('unsupported type')
     try:
-        T, total, count = _sum(1/x for x in _fail_neg(data, errmsg))
+        T, total, count = _sum(1 / x for x in _fail_neg(data, errmsg))
     except ZeroDivisionError:
         return 0
     assert count == n
-    return _convert(n/total, T)
+    return _convert(n / total, T)
 
 
 # FIXME: investigate ways to calculate medians without sorting? Quickselect?
@@ -428,11 +428,11 @@
     n = len(data)
     if n == 0:
         raise StatisticsError("no median for empty data")
-    if n%2 == 1:
-        return data[n//2]
+    if n % 2 == 1:
+        return data[n // 2]
     else:
-        i = n//2
-        return (data[i - 1] + data[i])/2
+        i = n // 2
+        return (data[i - 1] + data[i]) / 2
 
 
 def median_low(data):
@@ -451,10 +451,10 @@
     n = len(data)
     if n == 0:
         raise StatisticsError("no median for empty data")
-    if n%2 == 1:
-        return data[n//2]
+    if n % 2 == 1:
+        return data[n // 2]
     else:
-        return data[n//2 - 1]
+        return data[n // 2 - 1]
 
 
 def median_high(data):
@@ -473,7 +473,7 @@
     n = len(data)
     if n == 0:
         raise StatisticsError("no median for empty data")
-    return data[n//2]
+    return data[n // 2]
 
 
 def median_grouped(data, interval=1):
@@ -510,15 +510,15 @@
         return data[0]
     # Find the value at the midpoint. Remember this corresponds to the
     # centre of the class interval.
-    x = data[n//2]
+    x = data[n // 2]
     for obj in (x, interval):
         if isinstance(obj, (str, bytes)):
             raise TypeError('expected number but got %r' % obj)
     try:
-        L = x - interval/2  # The lower limit of the median interval.
+        L = x - interval / 2  # The lower limit of the median interval.
     except TypeError:
         # Mixed type. For now we just coerce to float.
-        L = float(x) - float(interval)/2
+        L = float(x) - float(interval) / 2
 
     # Uses bisection search to search for x in data with log(n) time complexity
     # Find the position of leftmost occurrence of x in data
@@ -528,7 +528,7 @@
     l2 = _find_rteq(data, l1, x)
     cf = l1
     f = l2 - l1 + 1
-    return L + interval*(n/2 - cf)/f
+    return L + interval * (n / 2 - cf) / f
 
 
 def mode(data):
@@ -554,8 +554,7 @@
     If *data* is empty, ``mode``, raises StatisticsError.
 
     """
-    data = iter(data)
-    pairs = Counter(data).most_common(1)
+    pairs = Counter(iter(data)).most_common(1)
     try:
         return pairs[0][0]
     except IndexError:
@@ -597,7 +596,7 @@
 # For sample data where there is a positive probability for values
 # beyond the range of the data, the R6 exclusive method is a
 # reasonable choice.  Consider a random sample of nine values from a
-# population with a uniform distribution from 0.0 to 100.0.  The
+# population with a uniform distribution from 0.0 to 1.0.  The
 # distribution of the third ranked sample point is described by
 # betavariate(alpha=3, beta=7) which has mode=0.250, median=0.286, and
 # mean=0.300.  Only the latter (which corresponds with R6) gives the
@@ -643,9 +642,8 @@
         m = ld - 1
         result = []
         for i in range(1, n):
-            j = i * m // n
-            delta = i*m - j*n
-            interpolated = (data[j] * (n - delta) + data[j+1] * delta) / n
+            j, delta = divmod(i * m, n)
+            interpolated = (data[j] * (n - delta) + data[j + 1] * delta) / n
             result.append(interpolated)
         return result
     if method == 'exclusive':
@@ -655,7 +653,7 @@
             j = i * m // n                               # rescale i to m/n
             j = 1 if j < 1 else ld-1 if j > ld-1 else j  # clamp to 1 .. ld-1
             delta = i*m - j*n                            # exact integer math
-            interpolated = (data[j-1] * (n - delta) + data[j] * delta) / n
+            interpolated = (data[j - 1] * (n - delta) + data[j] * delta) / n
             result.append(interpolated)
         return result
     raise ValueError(f'Unknown method: {method!r}')
@@ -689,9 +687,9 @@
     T, total, count = _sum((x-c)**2 for x in data)
     # The following sum should mathematically equal zero, but due to rounding
     # error may not.
-    U, total2, count2 = _sum((x-c) for x in data)
+    U, total2, count2 = _sum((x - c) for x in data)
     assert T == U and count == count2
-    total -=  total2**2/len(data)
+    total -= total2 ** 2 / len(data)
     assert not total < 0, 'negative sum of square deviations: %f' % total
     return (T, total)
 
@@ -740,7 +738,7 @@
     if n < 2:
         raise StatisticsError('variance requires at least two data points')
     T, ss = _ss(data, xbar)
-    return _convert(ss/(n-1), T)
+    return _convert(ss / (n - 1), T)
 
 
 def pvariance(data, mu=None):
@@ -784,7 +782,7 @@
     if n < 1:
         raise StatisticsError('pvariance requires at least one data point')
     T, ss = _ss(data, mu)
-    return _convert(ss/n, T)
+    return _convert(ss / n, T)
 
 
 def stdev(data, xbar=None):
@@ -896,6 +894,13 @@
     return mu + (x * sigma)
 
 
+# If available, use C implementation
+try:
+    from _statistics import _normal_dist_inv_cdf
+except ImportError:
+    pass
+
+
 class NormalDist:
     "Normal distribution of a random variable"
     # https://en.wikipedia.org/wiki/Normal_distribution
@@ -986,7 +991,7 @@
         if not isinstance(other, NormalDist):
             raise TypeError('Expected another NormalDist instance')
         X, Y = self, other
-        if (Y._sigma, Y._mu) < (X._sigma, X._mu):   # sort to assure commutativity
+        if (Y._sigma, Y._mu) < (X._sigma, X._mu):  # sort to assure commutativity
             X, Y = Y, X
         X_var, Y_var = X.variance, Y.variance
         if not X_var or not Y_var:
@@ -1001,6 +1006,17 @@
         x2 = (a - b) / dv
         return 1.0 - (fabs(Y.cdf(x1) - X.cdf(x1)) + fabs(Y.cdf(x2) - X.cdf(x2)))
 
+    def zscore(self, x):
+        """Compute the Standard Score.  (x - mean) / stdev
+
+        Describes *x* in terms of the number of standard deviations
+        above or below the mean of the normal distribution.
+        """
+        # https://www.statisticshowto.com/probability-and-statistics/z-score/
+        if not self._sigma:
+            raise StatisticsError('zscore() not defined when sigma is zero')
+        return (x - self._mu) / self._sigma
+
     @property
     def mean(self):
         "Arithmetic mean of the normal distribution."
@@ -1102,79 +1118,3 @@
 
     def __repr__(self):
         return f'{type(self).__name__}(mu={self._mu!r}, sigma={self._sigma!r})'
-
-# If available, use C implementation
-try:
-    from _statistics import _normal_dist_inv_cdf
-except ImportError:
-    pass
-
-
-if __name__ == '__main__':
-
-    # Show math operations computed analytically in comparsion
-    # to a monte carlo simulation of the same operations
-
-    from math import isclose
-    from operator import add, sub, mul, truediv
-    from itertools import repeat
-    import doctest
-
-    g1 = NormalDist(10, 20)
-    g2 = NormalDist(-5, 25)
-
-    # Test scaling by a constant
-    assert (g1 * 5 / 5).mean == g1.mean
-    assert (g1 * 5 / 5).stdev == g1.stdev
-
-    n = 100_000
-    G1 = g1.samples(n)
-    G2 = g2.samples(n)
-
-    for func in (add, sub):
-        print(f'\nTest {func.__name__} with another NormalDist:')
-        print(func(g1, g2))
-        print(NormalDist.from_samples(map(func, G1, G2)))
-
-    const = 11
-    for func in (add, sub, mul, truediv):
-        print(f'\nTest {func.__name__} with a constant:')
-        print(func(g1, const))
-        print(NormalDist.from_samples(map(func, G1, repeat(const))))
-
-    const = 19
-    for func in (add, sub, mul):
-        print(f'\nTest constant with {func.__name__}:')
-        print(func(const, g1))
-        print(NormalDist.from_samples(map(func, repeat(const), G1)))
-
-    def assert_close(G1, G2):
-        assert isclose(G1.mean, G1.mean, rel_tol=0.01), (G1, G2)
-        assert isclose(G1.stdev, G2.stdev, rel_tol=0.01), (G1, G2)
-
-    X = NormalDist(-105, 73)
-    Y = NormalDist(31, 47)
-    s = 32.75
-    n = 100_000
-
-    S = NormalDist.from_samples([x + s for x in X.samples(n)])
-    assert_close(X + s, S)
-
-    S = NormalDist.from_samples([x - s for x in X.samples(n)])
-    assert_close(X - s, S)
-
-    S = NormalDist.from_samples([x * s for x in X.samples(n)])
-    assert_close(X * s, S)
-
-    S = NormalDist.from_samples([x / s for x in X.samples(n)])
-    assert_close(X / s, S)
-
-    S = NormalDist.from_samples([x + y for x, y in zip(X.samples(n),
-                                                       Y.samples(n))])
-    assert_close(X + Y, S)
-
-    S = NormalDist.from_samples([x - y for x, y in zip(X.samples(n),
-                                                       Y.samples(n))])
-    assert_close(X - Y, S)
-
-    print(doctest.testmod())
diff --git a/Lib/string.py b/Lib/string.py
index b423ff5..489777b 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -54,30 +54,7 @@
 
 _sentinel_dict = {}
 
-class _TemplateMetaclass(type):
-    pattern = r"""
-    %(delim)s(?:
-      (?P<escaped>%(delim)s) |   # Escape sequence of two delimiters
-      (?P<named>%(id)s)      |   # delimiter and a Python identifier
-      {(?P<braced>%(bid)s)}  |   # delimiter and a braced identifier
-      (?P<invalid>)              # Other ill-formed delimiter exprs
-    )
-    """
-
-    def __init__(cls, name, bases, dct):
-        super(_TemplateMetaclass, cls).__init__(name, bases, dct)
-        if 'pattern' in dct:
-            pattern = cls.pattern
-        else:
-            pattern = _TemplateMetaclass.pattern % {
-                'delim' : _re.escape(cls.delimiter),
-                'id'    : cls.idpattern,
-                'bid'   : cls.braceidpattern or cls.idpattern,
-                }
-        cls.pattern = _re.compile(pattern, cls.flags | _re.VERBOSE)
-
-
-class Template(metaclass=_TemplateMetaclass):
+class Template:
     """A string class for supporting $-substitutions."""
 
     delimiter = '$'
@@ -89,6 +66,24 @@
     braceidpattern = None
     flags = _re.IGNORECASE
 
+    def __init_subclass__(cls):
+        super().__init_subclass__()
+        if 'pattern' in cls.__dict__:
+            pattern = cls.pattern
+        else:
+            delim = _re.escape(cls.delimiter)
+            id = cls.idpattern
+            bid = cls.braceidpattern or cls.idpattern
+            pattern = fr"""
+            {delim}(?:
+              (?P<escaped>{delim})  |   # Escape sequence of two delimiters
+              (?P<named>{id})       |   # delimiter and a Python identifier
+              {{(?P<braced>{bid})}} |   # delimiter and a braced identifier
+              (?P<invalid>)             # Other ill-formed delimiter exprs
+            )
+            """
+        cls.pattern = _re.compile(pattern, cls.flags | _re.VERBOSE)
+
     def __init__(self, template):
         self.template = template
 
@@ -146,6 +141,9 @@
                              self.pattern)
         return self.pattern.sub(convert, self.template)
 
+# Initialize Template.pattern.  __init_subclass__() is automatically called
+# only for subclasses, not for the Template class itself.
+Template.__init_subclass__()
 
 
 ########################################################################
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 5c2c2f0..f1d829a 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -52,7 +52,16 @@
 import warnings
 import contextlib
 from time import monotonic as _time
+import types
 
+try:
+    import pwd
+except ImportError:
+    pwd = None
+try:
+    import grp
+except ImportError:
+    grp = None
 
 __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
            "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
@@ -317,7 +326,7 @@
     if dev_mode:
         args.extend(('-X', 'dev'))
     for opt in ('faulthandler', 'tracemalloc', 'importtime',
-                'showalloccount', 'showrefcount', 'utf8'):
+                'showrefcount', 'utf8', 'oldparser'):
         if opt in xoptions:
             value = xoptions[opt]
             if value is True:
@@ -438,6 +447,9 @@
             args.append('stderr={!r}'.format(self.stderr))
         return "{}({})".format(type(self).__name__, ', '.join(args))
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
+
     def check_returncode(self):
         """Raise CalledProcessError if the exit code is non-zero."""
         if self.returncode:
@@ -719,6 +731,14 @@
 
       start_new_session (POSIX only)
 
+      group (POSIX only)
+
+      extra_groups (POSIX only)
+
+      user (POSIX only)
+
+      umask (POSIX only)
+
       pass_fds (POSIX only)
 
       encoding and errors: Text mode encoding and error handling to use for
@@ -735,7 +755,8 @@
                  shell=False, cwd=None, env=None, universal_newlines=None,
                  startupinfo=None, creationflags=0,
                  restore_signals=True, start_new_session=False,
-                 pass_fds=(), *, encoding=None, errors=None, text=None):
+                 pass_fds=(), *, user=None, group=None, extra_groups=None,
+                 encoding=None, errors=None, text=None, umask=-1):
         """Create new Popen instance."""
         _cleanup()
         # Held while anything is calling waitpid before returncode has been
@@ -833,6 +854,78 @@
             else:
                 line_buffering = False
 
+        gid = None
+        if group is not None:
+            if not hasattr(os, 'setregid'):
+                raise ValueError("The 'group' parameter is not supported on the "
+                                 "current platform")
+
+            elif isinstance(group, str):
+                if grp is None:
+                    raise ValueError("The group parameter cannot be a string "
+                                     "on systems without the grp module")
+
+                gid = grp.getgrnam(group).gr_gid
+            elif isinstance(group, int):
+                gid = group
+            else:
+                raise TypeError("Group must be a string or an integer, not {}"
+                                .format(type(group)))
+
+            if gid < 0:
+                raise ValueError(f"Group ID cannot be negative, got {gid}")
+
+        gids = None
+        if extra_groups is not None:
+            if not hasattr(os, 'setgroups'):
+                raise ValueError("The 'extra_groups' parameter is not "
+                                 "supported on the current platform")
+
+            elif isinstance(extra_groups, str):
+                raise ValueError("Groups must be a list, not a string")
+
+            gids = []
+            for extra_group in extra_groups:
+                if isinstance(extra_group, str):
+                    if grp is None:
+                        raise ValueError("Items in extra_groups cannot be "
+                                         "strings on systems without the "
+                                         "grp module")
+
+                    gids.append(grp.getgrnam(extra_group).gr_gid)
+                elif isinstance(extra_group, int):
+                    gids.append(extra_group)
+                else:
+                    raise TypeError("Items in extra_groups must be a string "
+                                    "or integer, not {}"
+                                    .format(type(extra_group)))
+
+            # make sure that the gids are all positive here so we can do less
+            # checking in the C code
+            for gid_check in gids:
+                if gid_check < 0:
+                    raise ValueError(f"Group ID cannot be negative, got {gid_check}")
+
+        uid = None
+        if user is not None:
+            if not hasattr(os, 'setreuid'):
+                raise ValueError("The 'user' parameter is not supported on "
+                                 "the current platform")
+
+            elif isinstance(user, str):
+                if pwd is None:
+                    raise ValueError("The user parameter cannot be a string "
+                                     "on systems without the pwd module")
+
+                uid = pwd.getpwnam(user).pw_uid
+            elif isinstance(user, int):
+                uid = user
+            else:
+                raise TypeError("User must be a string or an integer")
+
+            if uid < 0:
+                raise ValueError(f"User ID cannot be negative, got {uid}")
+
         try:
             if p2cwrite != -1:
                 self.stdin = io.open(p2cwrite, 'wb', bufsize)
@@ -857,7 +950,9 @@
                                 p2cread, p2cwrite,
                                 c2pread, c2pwrite,
                                 errread, errwrite,
-                                restore_signals, start_new_session)
+                                restore_signals,
+                                gid, gids, uid, umask,
+                                start_new_session)
         except:
             # Cleanup if the child failed starting.
             for f in filter(None, (self.stdin, self.stdout, self.stderr)):
@@ -887,6 +982,17 @@
 
             raise
 
+    def __repr__(self):
+        obj_repr = (
+            f"<{self.__class__.__name__}: "
+            f"returncode: {self.returncode} args: {list(self.args)!r}>"
+        )
+        if len(obj_repr) > 80:
+            obj_repr = obj_repr[:76] + "...>"
+        return obj_repr
+
+    __class_getitem__ = classmethod(types.GenericAlias)
+
     @property
     def universal_newlines(self):
         # universal_newlines as retained as an alias of text_mode for API
@@ -1227,7 +1333,10 @@
                            p2cread, p2cwrite,
                            c2pread, c2pwrite,
                            errread, errwrite,
-                           unused_restore_signals, unused_start_new_session):
+                           unused_restore_signals,
+                           unused_gid, unused_gids, unused_uid,
+                           unused_umask,
+                           unused_start_new_session):
             """Execute program (MS Windows version)"""
 
             assert not pass_fds, "pass_fds not supported on Windows."
@@ -1553,7 +1662,9 @@
                            p2cread, p2cwrite,
                            c2pread, c2pwrite,
                            errread, errwrite,
-                           restore_signals, start_new_session):
+                           restore_signals,
+                           gid, gids, uid, umask,
+                           start_new_session):
             """Execute program (POSIX version)"""
 
             if isinstance(args, (str, bytes)):
@@ -1588,7 +1699,11 @@
                     and (p2cread == -1 or p2cread > 2)
                     and (c2pwrite == -1 or c2pwrite > 2)
                     and (errwrite == -1 or errwrite > 2)
-                    and not start_new_session):
+                    and not start_new_session
+                    and gid is None
+                    and gids is None
+                    and uid is None
+                    and umask < 0):
                 self._posix_spawn(args, executable, env, restore_signals,
                                   p2cread, p2cwrite,
                                   c2pread, c2pwrite,
@@ -1641,7 +1756,9 @@
                             p2cread, p2cwrite, c2pread, c2pwrite,
                             errread, errwrite,
                             errpipe_read, errpipe_write,
-                            restore_signals, start_new_session, preexec_fn)
+                            restore_signals, start_new_session,
+                            gid, gids, uid, umask,
+                            preexec_fn)
                     self._child_created = True
                 finally:
                     # be sure the FD is closed no matter what
@@ -1703,23 +1820,17 @@
                 raise child_exception_type(err_msg)
 
 
-        def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
-                _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
-                _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
-                _WSTOPSIG=os.WSTOPSIG):
+        def _handle_exitstatus(self, sts,
+                               waitstatus_to_exitcode=os.waitstatus_to_exitcode,
+                               _WIFSTOPPED=os.WIFSTOPPED,
+                               _WSTOPSIG=os.WSTOPSIG):
             """All callers to this function MUST hold self._waitpid_lock."""
             # This method is called (indirectly) by __del__, so it cannot
             # refer to anything outside of its local scope.
-            if _WIFSIGNALED(sts):
-                self.returncode = -_WTERMSIG(sts)
-            elif _WIFEXITED(sts):
-                self.returncode = _WEXITSTATUS(sts)
-            elif _WIFSTOPPED(sts):
+            if _WIFSTOPPED(sts):
                 self.returncode = -_WSTOPSIG(sts)
             else:
-                # Should never happen
-                raise SubprocessError("Unknown child exit status!")
-
+                self.returncode = waitstatus_to_exitcode(sts)
 
         def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
                 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
@@ -1926,9 +2037,35 @@
 
         def send_signal(self, sig):
             """Send a signal to the process."""
-            # Skip signalling a process that we know has already died.
-            if self.returncode is None:
+            # bpo-38630: Polling reduces the risk of sending a signal to the
+            # wrong process if the process completed, the Popen.returncode
+            # attribute is still None, and the pid has been reassigned
+            # (recycled) to a new different process. This race condition can
+            # happens in two cases.
+            #
+            # Case 1. Thread A calls Popen.poll(), thread B calls
+            # Popen.send_signal(). In thread A, waitpid() succeed and returns
+            # the exit status. Thread B calls kill() because poll() in thread A
+            # did not set returncode yet. Calling poll() in thread B prevents
+            # the race condition thanks to Popen._waitpid_lock.
+            #
+            # Case 2. waitpid(pid, 0) has been called directly, without
+            # using Popen methods: returncode is still None is this case.
+            # Calling Popen.poll() will set returncode to a default value,
+            # since waitpid() fails with ProcessLookupError.
+            self.poll()
+            if self.returncode is not None:
+                # Skip signalling a process that we know has already died.
+                return
+
+            # The race condition can still happen if the race condition
+            # described above happens between the returncode test
+            # and the kill() call.
+            try:
                 os.kill(self.pid, sig)
+            except ProcessLookupError:
+                # Supress the race condition error; bpo-40550.
+                pass
 
         def terminate(self):
             """Terminate the process with SIGTERM
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 129502b..79750a9 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -104,7 +104,7 @@
 """
 
 from collections import namedtuple
-import warnings
+
 
 _sunau_params = namedtuple('_sunau_params',
                            'nchannels sampwidth framerate nframes comptype compname')
@@ -524,8 +524,3 @@
         return Au_write(f)
     else:
         raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
-
-def openfp(f, mode=None):
-    warnings.warn("sunau.openfp is deprecated since Python 3.7. "
-                  "Use sunau.open instead.", DeprecationWarning, stacklevel=2)
-    return open(f, mode=mode)
diff --git a/Lib/symbol.py b/Lib/symbol.py
index 36e0eec..aaac8c9 100644
--- a/Lib/symbol.py
+++ b/Lib/symbol.py
@@ -11,6 +11,15 @@
 #
 #    make regen-symbol
 
+import warnings
+
+warnings.warn(
+    "The symbol module is deprecated and will be removed "
+    "in future versions of Python",
+    DeprecationWarning,
+    stacklevel=2,
+)
+
 #--start constants--
 single_input = 256
 file_input = 257
diff --git a/Lib/symtable.py b/Lib/symtable.py
index ac0a64f..521540f 100644
--- a/Lib/symtable.py
+++ b/Lib/symtable.py
@@ -34,7 +34,7 @@
 _newSymbolTable = SymbolTableFactory()
 
 
-class SymbolTable(object):
+class SymbolTable:
 
     def __init__(self, raw_table, filename):
         self._table = raw_table
@@ -47,7 +47,7 @@
         else:
             kind = "%s " % self.__class__.__name__
 
-        if self._table.name == "global":
+        if self._table.name == "top":
             return "<{0}SymbolTable for module {1}>".format(kind, self._filename)
         else:
             return "<{0}SymbolTable for {1} in {2}>".format(kind,
@@ -82,10 +82,6 @@
     def has_children(self):
         return bool(self._table.children)
 
-    def has_exec(self):
-        """Return true if the scope uses exec.  Deprecated method."""
-        return False
-
     def get_identifiers(self):
         return self._table.symbols.keys()
 
@@ -94,7 +90,9 @@
         if sym is None:
             flags = self._table.symbols[name]
             namespaces = self.__check_children(name)
-            sym = self._symbols[name] = Symbol(name, flags, namespaces)
+            module_scope = (self._table.name == "top")
+            sym = self._symbols[name] = Symbol(name, flags, namespaces,
+                                               module_scope=module_scope)
         return sym
 
     def get_symbols(self):
@@ -167,13 +165,14 @@
         return self.__methods
 
 
-class Symbol(object):
+class Symbol:
 
-    def __init__(self, name, flags, namespaces=None):
+    def __init__(self, name, flags, namespaces=None, *, module_scope=False):
         self.__name = name
         self.__flags = flags
         self.__scope = (flags >> SCOPE_OFF) & SCOPE_MASK # like PyST_GetScope()
         self.__namespaces = namespaces or ()
+        self.__module_scope = module_scope
 
     def __repr__(self):
         return "<symbol {0!r}>".format(self.__name)
@@ -188,7 +187,10 @@
         return bool(self.__flags & DEF_PARAM)
 
     def is_global(self):
-        return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT))
+        """Return *True* if the sysmbol is global.
+        """
+        return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT)
+                    or (self.__module_scope and self.__flags & DEF_BOUND))
 
     def is_nonlocal(self):
         return bool(self.__flags & DEF_NONLOCAL)
@@ -197,7 +199,10 @@
         return bool(self.__scope == GLOBAL_EXPLICIT)
 
     def is_local(self):
-        return bool(self.__scope in (LOCAL, CELL))
+        """Return *True* if the symbol is local.
+        """
+        return bool(self.__scope in (LOCAL, CELL)
+                    or (self.__module_scope and self.__flags & DEF_BOUND))
 
     def is_annotated(self):
         return bool(self.__flags & DEF_ANNOT)
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index b9e2faf..bf04ac5 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -20,10 +20,10 @@
 
 _INSTALL_SCHEMES = {
     'posix_prefix': {
-        'stdlib': '{installed_base}/lib/python{py_version_short}',
-        'platstdlib': '{platbase}/lib/python{py_version_short}',
+        'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
+        'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
         'purelib': '{base}/lib/python{py_version_short}/site-packages',
-        'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
+        'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
         'include':
             '{installed_base}/include/python{py_version_short}{abiflags}',
         'platinclude':
@@ -62,10 +62,10 @@
         'data': '{userbase}',
         },
     'posix_user': {
-        'stdlib': '{userbase}/lib/python{py_version_short}',
-        'platstdlib': '{userbase}/lib/python{py_version_short}',
+        'stdlib': '{userbase}/{platlibdir}/python{py_version_short}',
+        'platstdlib': '{userbase}/{platlibdir}/python{py_version_short}',
         'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
-        'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
+        'platlib': '{userbase}/{platlibdir}/python{py_version_short}/site-packages',
         'include': '{userbase}/include/python{py_version_short}',
         'scripts': '{userbase}/bin',
         'data': '{userbase}',
@@ -84,8 +84,6 @@
 _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include',
                 'scripts', 'data')
 
- # FIXME don't rely on sys.version here, its format is an implementation detail
- # of CPython, use sys.version_info or sys.hexversion
 _PY_VERSION = sys.version.split()[0]
 _PY_VERSION_SHORT = '%d.%d' % sys.version_info[:2]
 _PY_VERSION_SHORT_NO_DOT = '%d%d' % sys.version_info[:2]
@@ -539,6 +537,7 @@
         _CONFIG_VARS['installed_platbase'] = _BASE_EXEC_PREFIX
         _CONFIG_VARS['platbase'] = _EXEC_PREFIX
         _CONFIG_VARS['projectbase'] = _PROJECT_BASE
+        _CONFIG_VARS['platlibdir'] = sys.platlibdir
         try:
             _CONFIG_VARS['abiflags'] = sys.abiflags
         except AttributeError:
@@ -547,6 +546,7 @@
 
         if os.name == 'nt':
             _init_non_posix(_CONFIG_VARS)
+            _CONFIG_VARS['TZPATH'] = ''
         if os.name == 'posix':
             _init_posix(_CONFIG_VARS)
         # For backward compatibility, see issue19555
@@ -665,7 +665,8 @@
             machine += ".%s" % bitness[sys.maxsize]
         # fall through to standard osname-release-machine representation
     elif osname[:3] == "aix":
-        return "%s-%s.%s" % (osname, version, release)
+        from _aix_support import aix_platform
+        return aix_platform()
     elif osname[:6] == "cygwin":
         osname = "cygwin"
         import re
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 7a69e1b..1d15612 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -420,6 +420,8 @@
         self.__write(b"\037\213\010\010" + timestamp + b"\002\377")
         if self.name.endswith(".gz"):
             self.name = self.name[:-3]
+        # Honor "directory components removed" from RFC1952
+        self.name = os.path.basename(self.name)
         # RFC1952 says we must use ISO-8859-1 for the FNAME field.
         self.__write(self.name.encode("iso-8859-1", "replace") + NUL)
 
@@ -930,6 +932,14 @@
         """Return a header block. info is a dictionary with file
            information, format must be one of the *_FORMAT constants.
         """
+        has_device_fields = info.get("type") in (CHRTYPE, BLKTYPE)
+        if has_device_fields:
+            devmajor = itn(info.get("devmajor", 0), 8, format)
+            devminor = itn(info.get("devminor", 0), 8, format)
+        else:
+            devmajor = stn("", 8, encoding, errors)
+            devminor = stn("", 8, encoding, errors)
+
         parts = [
             stn(info.get("name", ""), 100, encoding, errors),
             itn(info.get("mode", 0) & 0o7777, 8, format),
@@ -943,8 +953,8 @@
             info.get("magic", POSIX_MAGIC),
             stn(info.get("uname", ""), 32, encoding, errors),
             stn(info.get("gname", ""), 32, encoding, errors),
-            itn(info.get("devmajor", 0), 8, format),
-            itn(info.get("devminor", 0), 8, format),
+            devmajor,
+            devminor,
             stn(info.get("prefix", ""), 155, encoding, errors)
         ]
 
@@ -2083,9 +2093,10 @@
 
     def extractfile(self, member):
         """Extract a member from the archive as a file object. `member' may be
-           a filename or a TarInfo object. If `member' is a regular file or a
-           link, an io.BufferedReader object is returned. Otherwise, None is
-           returned.
+           a filename or a TarInfo object. If `member' is a regular file or
+           a link, an io.BufferedReader object is returned. For all other
+           existing members, None is returned. If `member' does not appear
+           in the archive, KeyError is raised.
         """
         self._check("r")
 
@@ -2226,6 +2237,9 @@
         try:
             # For systems that support symbolic and hard links.
             if tarinfo.issym():
+                if os.path.lexists(targetpath):
+                    # Avoid FileExistsError on following os.symlink.
+                    os.unlink(targetpath)
                 os.symlink(tarinfo.linkname, targetpath)
             else:
                 # See extract().
@@ -2461,9 +2475,14 @@
 def is_tarfile(name):
     """Return True if name points to a tar archive that we
        are able to handle, else return False.
+
+       'name' should be a string, file, or file-like object.
     """
     try:
-        t = open(name)
+        if hasattr(name, "read"):
+            t = open(fileobj=name)
+        else:
+            t = open(name)
         t.close()
         return True
     except TarError:
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 5b990e0..770f72c 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -44,6 +44,7 @@
 import errno as _errno
 from random import Random as _Random
 import sys as _sys
+import types as _types
 import weakref as _weakref
 import _thread
 _allocate_lock = _thread.allocate_lock
@@ -307,8 +308,7 @@
     otherwise a default directory is used.
 
     If 'text' is specified and true, the file is opened in text
-    mode.  Else (the default) the file is opened in binary mode.  On
-    some operating systems, this makes no difference.
+    mode.  Else (the default) the file is opened in binary mode.
 
     If any of 'suffix', 'prefix' and 'dir' are not None, they must be the
     same type.  If they are bytes, the returned name will be bytes; str
@@ -643,6 +643,8 @@
                                    'encoding': encoding, 'newline': newline,
                                    'dir': dir, 'errors': errors}
 
+    __class_getitem__ = classmethod(_types.GenericAlias)
+
     def _check(self, file):
         if self._rolled: return
         max_size = self._max_size
@@ -737,10 +739,6 @@
     def seek(self, *args):
         return self._file.seek(*args)
 
-    @property
-    def softspace(self):
-        return self._file.softspace
-
     def tell(self):
         return self._file.tell()
 
@@ -830,3 +828,5 @@
     def cleanup(self):
         if self._finalizer.detach():
             self._rmtree(self.name)
+
+    __class_getitem__ = classmethod(_types.GenericAlias)
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index 8626aa3..e47905c 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -26,6 +26,8 @@
 import test.support
 import test.support.script_helper
 from test import support
+from test.support import hashlib_helper
+from test.support import socket_helper
 
 
 # Skip tests if _multiprocessing wasn't built.
@@ -66,12 +68,6 @@
 except ImportError:
     msvcrt = None
 
-#
-#
-#
-
-# Timeout to wait until a process completes
-TIMEOUT = 60.0 # seconds
 
 def latin(s):
     return s.encode('latin')
@@ -86,7 +82,7 @@
 def join_process(process):
     # Since multiprocessing.Process has the same API than threading.Thread
     # (join() and is_alive(), the support function can be reused
-    support.join_thread(process, timeout=TIMEOUT)
+    support.join_thread(process)
 
 
 if os.name == "posix":
@@ -301,7 +297,7 @@
             target=self._test_create_grandchild_process, args=(wconn, ))
         p.start()
 
-        if not rconn.poll(timeout=60):
+        if not rconn.poll(timeout=support.LONG_TIMEOUT):
             raise AssertionError("Could not communicate with child process")
         parent_process_status = rconn.recv()
         self.assertEqual(parent_process_status, "alive")
@@ -309,7 +305,7 @@
         p.terminate()
         p.join()
 
-        if not rconn.poll(timeout=60):
+        if not rconn.poll(timeout=support.LONG_TIMEOUT):
             raise AssertionError("Could not communicate with child process")
         parent_process_status = rconn.recv()
         self.assertEqual(parent_process_status, "not alive")
@@ -324,7 +320,7 @@
     def _test_report_parent_status(cls, wconn):
         from multiprocessing.process import parent_process
         wconn.send("alive" if parent_process().is_alive() else "not alive")
-        parent_process().join(timeout=5)
+        parent_process().join(timeout=support.SHORT_TIMEOUT)
         wconn.send("alive" if parent_process().is_alive() else "not alive")
 
     def test_process(self):
@@ -870,12 +866,21 @@
 
             os.unlink(testfn)
 
-        for reason in (True, False, 8):
-            p = self.Process(target=sys.exit, args=(reason,))
-            p.daemon = True
-            p.start()
-            join_process(p)
-            self.assertEqual(p.exitcode, reason)
+        cases = [
+            ((True,), 1),
+            ((False,), 0),
+            ((8,), 8),
+            ((None,), 0),
+            ((), 0),
+            ]
+
+        for args, expected in cases:
+            with self.subTest(args=args):
+                p = self.Process(target=sys.exit, args=args)
+                p.daemon = True
+                p.start()
+                join_process(p)
+                self.assertEqual(p.exitcode, expected)
 
 #
 #
@@ -1150,7 +1155,7 @@
             q = self.Queue()
             q.put(NotSerializable())
             q.put(True)
-            self.assertTrue(q.get(timeout=TIMEOUT))
+            self.assertTrue(q.get(timeout=support.SHORT_TIMEOUT))
             close_queue(q)
 
         with test.support.captured_stderr():
@@ -1165,8 +1170,7 @@
                 # qsize is not available on all platform as it
                 # relies on sem_getvalue
                 pass
-            # bpo-30595: use a timeout of 1 second for slow buildbots
-            self.assertTrue(q.get(timeout=1.0))
+            self.assertTrue(q.get(timeout=support.SHORT_TIMEOUT))
             # Check that the size of the queue is correct
             self.assertTrue(q.empty())
             close_queue(q)
@@ -1203,7 +1207,7 @@
 
             # Verify that q is still functioning correctly
             q.put(True)
-            self.assertTrue(q.get(timeout=1.0))
+            self.assertTrue(q.get(timeout=support.SHORT_TIMEOUT))
 
         # Assert that the serialization and the hook have been called correctly
         self.assertTrue(not_serializable_obj.reduce_was_called)
@@ -1553,7 +1557,7 @@
                          args=(cond, state, success, sem))
         p.daemon = True
         p.start()
-        self.assertTrue(sem.acquire(timeout=TIMEOUT))
+        self.assertTrue(sem.acquire(timeout=support.LONG_TIMEOUT))
 
         # Only increment 3 times, so state == 4 is never reached.
         for i in range(3):
@@ -2926,7 +2930,7 @@
         authkey = os.urandom(32)
 
         manager = QueueManager(
-            address=(test.support.HOST, 0), authkey=authkey, serializer=SERIALIZER
+            address=(socket_helper.HOST, 0), authkey=authkey, serializer=SERIALIZER
             )
         manager.start()
         self.addCleanup(manager.shutdown)
@@ -2950,6 +2954,8 @@
         # Make queue finalizer run before the server is stopped
         del queue
 
+
+@hashlib_helper.requires_hashdigest('md5')
 class _TestManagerRestart(BaseTestCase):
 
     @classmethod
@@ -2963,7 +2969,7 @@
     def test_rapid_restart(self):
         authkey = os.urandom(32)
         manager = QueueManager(
-            address=(test.support.HOST, 0), authkey=authkey, serializer=SERIALIZER)
+            address=(socket_helper.HOST, 0), authkey=authkey, serializer=SERIALIZER)
         try:
             srvr = manager.get_server()
             addr = srvr.address
@@ -3434,6 +3440,7 @@
 #
 
 @unittest.skipUnless(HAS_REDUCTION, "test needs multiprocessing.reduction")
+@hashlib_helper.requires_hashdigest('md5')
 class _TestPicklingConnections(BaseTestCase):
 
     ALLOWED_TYPES = ('processes',)
@@ -3441,7 +3448,7 @@
     @classmethod
     def tearDownClass(cls):
         from multiprocessing import resource_sharer
-        resource_sharer.stop(timeout=TIMEOUT)
+        resource_sharer.stop(timeout=support.LONG_TIMEOUT)
 
     @classmethod
     def _listener(cls, conn, families):
@@ -3453,7 +3460,7 @@
             new_conn.close()
             l.close()
 
-        l = socket.create_server((test.support.HOST, 0))
+        l = socket.create_server((socket_helper.HOST, 0))
         conn.send(l.getsockname())
         new_conn, addr = l.accept()
         conn.send(new_conn)
@@ -3736,6 +3743,7 @@
 
 
 @unittest.skipUnless(HAS_SHMEM, "requires multiprocessing.shared_memory")
+@hashlib_helper.requires_hashdigest('md5')
 class _TestSharedMemory(BaseTestCase):
 
     ALLOWED_TYPES = ('processes',)
@@ -3772,6 +3780,35 @@
         self.assertLess(same_sms.size, 20*sms.size)  # Size was ignored.
         same_sms.close()
 
+        # Creating Shared Memory Segment with -ve size
+        with self.assertRaises(ValueError):
+            shared_memory.SharedMemory(create=True, size=-2)
+
+        # Attaching Shared Memory Segment without a name
+        with self.assertRaises(ValueError):
+            shared_memory.SharedMemory(create=False)
+
+        # Test if shared memory segment is created properly,
+        # when _make_filename returns an existing shared memory segment name
+        with unittest.mock.patch(
+            'multiprocessing.shared_memory._make_filename') as mock_make_filename:
+
+            NAME_PREFIX = shared_memory._SHM_NAME_PREFIX
+            names = ['test01_fn', 'test02_fn']
+            # Prepend NAME_PREFIX which can be '/psm_' or 'wnsm_', necessary
+            # because some POSIX compliant systems require name to start with /
+            names = [NAME_PREFIX + name for name in names]
+
+            mock_make_filename.side_effect = names
+            shm1 = shared_memory.SharedMemory(create=True, size=1)
+            self.addCleanup(shm1.unlink)
+            self.assertEqual(shm1._name, names[0])
+
+            mock_make_filename.side_effect = names
+            shm2 = shared_memory.SharedMemory(create=True, size=1)
+            self.addCleanup(shm2.unlink)
+            self.assertEqual(shm2._name, names[1])
+
         if shared_memory._USE_POSIX:
             # Posix Shared Memory can only be unlinked once.  Here we
             # test an implementation detail that is not observed across
@@ -3827,6 +3864,18 @@
 
         sms.close()
 
+        # Test creating a shared memory segment with negative size
+        with self.assertRaises(ValueError):
+            sms_invalid = shared_memory.SharedMemory(create=True, size=-1)
+
+        # Test creating a shared memory segment with size 0
+        with self.assertRaises(ValueError):
+            sms_invalid = shared_memory.SharedMemory(create=True, size=0)
+
+        # Test creating a shared memory segment without size argument
+        with self.assertRaises(ValueError):
+            sms_invalid = shared_memory.SharedMemory(create=True)
+
     def test_shared_memory_across_processes(self):
         # bpo-40135: don't define shared memory block's name in case of
         # the failure when we run multiprocessing tests in parallel.
@@ -4071,7 +4120,7 @@
             p.terminate()
             p.wait()
 
-            deadline = time.monotonic() + 60
+            deadline = time.monotonic() + support.LONG_TIMEOUT
             t = 0.1
             while time.monotonic() < deadline:
                 time.sleep(t)
@@ -4382,6 +4431,7 @@
 
 
 
+@hashlib_helper.requires_hashdigest('md5')
 class OtherTest(unittest.TestCase):
     # TODO: add more tests for deliver/answer challenge.
     def test_deliver_challenge_auth_failure(self):
@@ -4418,6 +4468,7 @@
 def initializer(ns):
     ns.test += 1
 
+@hashlib_helper.requires_hashdigest('md5')
 class TestInitializers(unittest.TestCase):
     def setUp(self):
         self.mgr = multiprocessing.Manager()
@@ -4564,7 +4615,7 @@
 
     def test_wait_socket(self, slow=False):
         from multiprocessing.connection import wait
-        l = socket.create_server((test.support.HOST, 0))
+        l = socket.create_server((socket_helper.HOST, 0))
         addr = l.getsockname()
         readers = []
         procs = []
@@ -5080,7 +5131,7 @@
                 p.terminate()
                 p.wait()
 
-                deadline = time.monotonic() + 60
+                deadline = time.monotonic() + support.LONG_TIMEOUT
                 while time.monotonic() < deadline:
                     time.sleep(.5)
                     try:
@@ -5109,7 +5160,7 @@
         pid = _resource_tracker._pid
         if pid is not None:
             os.kill(pid, signal.SIGKILL)
-            os.waitpid(pid, 0)
+            support.wait_process(pid, exitcode=-signal.SIGKILL)
         with warnings.catch_warnings():
             warnings.simplefilter("ignore")
             _resource_tracker.ensure_running()
@@ -5216,6 +5267,20 @@
 
         proc.join()
 
+    def test_close(self):
+        queue = multiprocessing.SimpleQueue()
+        queue.close()
+        # closing a queue twice should not fail
+        queue.close()
+
+    # Test specific to CPython since it tests private attributes
+    @test.support.cpython_only
+    def test_closed(self):
+        queue = multiprocessing.SimpleQueue()
+        queue.close()
+        self.assertTrue(queue._reader.closed)
+        self.assertTrue(queue._writer.closed)
+
 
 class TestPoolNotLeakOnFailure(unittest.TestCase):
 
@@ -5258,6 +5323,7 @@
             any(process.is_alive() for process in forked_processes))
 
 
+@hashlib_helper.requires_hashdigest('md5')
 class TestSyncManagerTypes(unittest.TestCase):
     """Test all the types which can be shared between a parent and a
     child process by using a manager which acts as an intermediary
@@ -5652,6 +5718,8 @@
                 Mixin = local_globs[type_.capitalize() + 'Mixin']
                 class Temp(base, Mixin, unittest.TestCase):
                     pass
+                if type_ == 'manager':
+                    Temp = hashlib_helper.requires_hashdigest('md5')(Temp)
                 Temp.__name__ = Temp.__qualname__ = newname
                 Temp.__module__ = __module__
                 remote_globs[newname] = Temp
diff --git a/Lib/test/audiotests.py b/Lib/test/audiotests.py
index 0dad017..d3e8e9e 100644
--- a/Lib/test/audiotests.py
+++ b/Lib/test/audiotests.py
@@ -1,7 +1,6 @@
 from test.support import findfile, TESTFN, unlink
 import array
 import io
-from unittest import mock
 import pickle
 
 
@@ -50,17 +49,6 @@
             self.assertEqual(pickle.loads(dump), params)
 
 
-class AudioMiscTests(AudioTests):
-
-    def test_openfp_deprecated(self):
-        arg = "arg"
-        mode = "mode"
-        with mock.patch(f"{self.module.__name__}.open") as mock_open, \
-             self.assertWarns(DeprecationWarning):
-            self.module.openfp(arg, mode=mode)
-            mock_open.assert_called_with(arg, mode=mode)
-
-
 class AudioWriteTests(AudioTests):
 
     def create_file(self, testfile):
diff --git a/Lib/test/bisect_cmd.py b/Lib/test/bisect_cmd.py
index cb06480..0bdd7a4 100755
--- a/Lib/test/bisect_cmd.py
+++ b/Lib/test/bisect_cmd.py
@@ -47,8 +47,16 @@
     return ' '.join(args)
 
 
+def python_cmd():
+    cmd = [sys.executable]
+    cmd.extend(subprocess._args_from_interpreter_flags())
+    cmd.extend(subprocess._optim_args_from_interpreter_flags())
+    return cmd
+
+
 def list_cases(args):
-    cmd = [sys.executable, '-m', 'test', '--list-cases']
+    cmd = python_cmd()
+    cmd.extend(['-m', 'test', '--list-cases'])
     cmd.extend(args.test_args)
     proc = subprocess.run(cmd,
                           stdout=subprocess.PIPE,
@@ -68,7 +76,8 @@
     try:
         write_tests(tmp, tests)
 
-        cmd = [sys.executable, '-m', 'test', '--matchfile', tmp]
+        cmd = python_cmd()
+        cmd.extend(['-m', 'test', '--matchfile', tmp])
         cmd.extend(args.test_args)
         print("+ %s" % format_shell_args(cmd))
         proc = subprocess.run(cmd)
@@ -100,6 +109,9 @@
 
 def main():
     args = parse_args()
+    if '-w' in args.test_args or '--verbose2' in args.test_args:
+        print("WARNING: -w/--verbose2 option should not be used to bisect!")
+        print()
 
     if args.input:
         with open(args.input) as fp:
diff --git a/Lib/test/clinic.test b/Lib/test/clinic.test
index 845b165..cb76c37 100644
--- a/Lib/test/clinic.test
+++ b/Lib/test/clinic.test
@@ -1269,7 +1269,7 @@
         goto exit;
     }
     a = PyLong_AsLongLong(args[0]);
-    if (a == (PY_LONG_LONG)-1 && PyErr_Occurred()) {
+    if (a == -1 && PyErr_Occurred()) {
         goto exit;
     }
 skip_optional:
@@ -1281,7 +1281,7 @@
 
 static PyObject *
 test_long_long_converter_impl(PyObject *module, long long a)
-/*[clinic end generated code: output=3e8083f3aee4f18a input=d5fc81577ff4dd02]*/
+/*[clinic end generated code: output=7143b585d7e433e8 input=d5fc81577ff4dd02]*/
 
 
 /*[clinic input]
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index d1a3c2f..b37ef91 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -2,6 +2,7 @@
 
 See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
 """
+import io
 import itertools
 import bisect
 import copy
@@ -62,6 +63,12 @@
         self.assertEqual(datetime.MINYEAR, 1)
         self.assertEqual(datetime.MAXYEAR, 9999)
 
+    def test_all(self):
+        """Test that __all__ only points to valid attributes."""
+        all_attrs = dir(datetime_module)
+        for attr in datetime_module.__all__:
+            self.assertIn(attr, all_attrs)
+
     def test_name_cleanup(self):
         if '_Pure' in self.__class__.__name__:
             self.skipTest('Only run for Fast C implementation')
@@ -1349,19 +1356,43 @@
     def test_isocalendar(self):
         # Check examples from
         # http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm
-        for i in range(7):
-            d = self.theclass(2003, 12, 22+i)
-            self.assertEqual(d.isocalendar(), (2003, 52, i+1))
-            d = self.theclass(2003, 12, 29) + timedelta(i)
-            self.assertEqual(d.isocalendar(), (2004, 1, i+1))
-            d = self.theclass(2004, 1, 5+i)
-            self.assertEqual(d.isocalendar(), (2004, 2, i+1))
-            d = self.theclass(2009, 12, 21+i)
-            self.assertEqual(d.isocalendar(), (2009, 52, i+1))
-            d = self.theclass(2009, 12, 28) + timedelta(i)
-            self.assertEqual(d.isocalendar(), (2009, 53, i+1))
-            d = self.theclass(2010, 1, 4+i)
-            self.assertEqual(d.isocalendar(), (2010, 1, i+1))
+        week_mondays = [
+                ((2003, 12, 22), (2003, 52, 1)),
+                ((2003, 12, 29), (2004, 1, 1)),
+                ((2004, 1, 5), (2004, 2, 1)),
+                ((2009, 12, 21), (2009, 52, 1)),
+                ((2009, 12, 28), (2009, 53, 1)),
+                ((2010, 1, 4), (2010, 1, 1)),
+        ]
+
+        test_cases = []
+        for cal_date, iso_date in week_mondays:
+            base_date = self.theclass(*cal_date)
+            # Adds one test case for every day of the specified weeks
+            for i in range(7):
+                new_date = base_date + timedelta(i)
+                new_iso = iso_date[0:2] + (iso_date[2] + i,)
+                test_cases.append((new_date, new_iso))
+
+        for d, exp_iso in test_cases:
+            with self.subTest(d=d, comparison="tuple"):
+                self.assertEqual(d.isocalendar(), exp_iso)
+
+            # Check that the tuple contents are accessible by field name
+            with self.subTest(d=d, comparison="fields"):
+                t = d.isocalendar()
+                self.assertEqual((t.year, t.week, t.weekday), exp_iso)
+
+    def test_isocalendar_pickling(self):
+        """Test that the result of datetime.isocalendar() can be pickled.
+
+        The result of a round trip should be a plain tuple.
+        """
+        d = self.theclass(2019, 1, 1)
+        p = pickle.dumps(d.isocalendar())
+        res = pickle.loads(p)
+        self.assertEqual(type(res), tuple)
+        self.assertEqual(res, (2019, 1, 2))
 
     def test_iso_long_years(self):
         # Calculate long ISO years and compare to table from
@@ -1750,6 +1781,7 @@
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
             self.assertEqual(orig, derived)
+            self.assertTrue(isinstance(derived, SubclassDate))
 
     def test_backdoor_resistance(self):
         # For fast unpickling, the constructor accepts a pickle byte string.
@@ -2277,6 +2309,7 @@
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
             self.assertEqual(orig, derived)
+            self.assertTrue(isinstance(derived, SubclassDatetime))
 
     def test_compat_unpickle(self):
         tests = [
@@ -3326,6 +3359,7 @@
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
             self.assertEqual(orig, derived)
+            self.assertTrue(isinstance(derived, SubclassTime))
 
     def test_compat_unpickle(self):
         tests = [
@@ -5785,6 +5819,8 @@
     zonename = 'America/New_York'
 
     def setUp(self):
+        if sys.platform == "vxworks":
+            self.skipTest("Skipping zoneinfo tests on VxWorks")
         if sys.platform == "win32":
             self.skipTest("Skipping zoneinfo tests on Windows")
         try:
@@ -5946,6 +5982,65 @@
 
                 self.assertEqual(dt1.astimezone(timezone.utc), dt_utc)
 
+    def test_PyDateTime_DELTA_GET(self):
+        class TimeDeltaSubclass(timedelta):
+            pass
+
+        for klass in [timedelta, TimeDeltaSubclass]:
+            for args in [(26, 55, 99999), (26, 55, 99999)]:
+                d = klass(*args)
+                with self.subTest(cls=klass, date=args):
+                    days, seconds, microseconds = _testcapi.PyDateTime_DELTA_GET(d)
+
+                    self.assertEqual(days, d.days)
+                    self.assertEqual(seconds, d.seconds)
+                    self.assertEqual(microseconds, d.microseconds)
+
+    def test_PyDateTime_GET(self):
+        class DateSubclass(date):
+            pass
+
+        for klass in [date, DateSubclass]:
+            for args in [(2000, 1, 2), (2012, 2, 29)]:
+                d = klass(*args)
+                with self.subTest(cls=klass, date=args):
+                    year, month, day = _testcapi.PyDateTime_GET(d)
+
+                    self.assertEqual(year, d.year)
+                    self.assertEqual(month, d.month)
+                    self.assertEqual(day, d.day)
+
+    def test_PyDateTime_DATE_GET(self):
+        class DateTimeSubclass(datetime):
+            pass
+
+        for klass in [datetime, DateTimeSubclass]:
+            for args in [(1993, 8, 26, 22, 12, 55, 99999),
+                         (1993, 8, 26, 22, 12, 55, 99999)]:
+                d = klass(*args)
+                with self.subTest(cls=klass, date=args):
+                    hour, minute, second, microsecond = _testcapi.PyDateTime_DATE_GET(d)
+
+                    self.assertEqual(hour, d.hour)
+                    self.assertEqual(minute, d.minute)
+                    self.assertEqual(second, d.second)
+                    self.assertEqual(microsecond, d.microsecond)
+
+    def test_PyDateTime_TIME_GET(self):
+        class TimeSubclass(time):
+            pass
+
+        for klass in [time, TimeSubclass]:
+            for args in [(12, 30, 20, 10), (12, 30, 20, 10)]:
+                d = klass(*args)
+                with self.subTest(cls=klass, date=args):
+                    hour, minute, second, microsecond = _testcapi.PyDateTime_TIME_GET(d)
+
+                    self.assertEqual(hour, d.hour)
+                    self.assertEqual(minute, d.minute)
+                    self.assertEqual(second, d.second)
+                    self.assertEqual(microsecond, d.microsecond)
+
     def test_timezones_offset_zero(self):
         utc0, utc1, non_utc = _testcapi.get_timezones_offset_zero()
 
@@ -6106,7 +6201,7 @@
     def test_date_from_date(self):
         exp_date = date(1993, 8, 26)
 
-        for macro in [0, 1]:
+        for macro in False, True:
             with self.subTest(macro=macro):
                 c_api_date = _testcapi.get_date_fromdate(
                     macro,
@@ -6119,7 +6214,7 @@
     def test_datetime_from_dateandtime(self):
         exp_date = datetime(1993, 8, 26, 22, 12, 55, 99999)
 
-        for macro in [0, 1]:
+        for macro in False, True:
             with self.subTest(macro=macro):
                 c_api_date = _testcapi.get_datetime_fromdateandtime(
                     macro,
@@ -6137,7 +6232,7 @@
         exp_date = datetime(1993, 8, 26, 22, 12, 55, 99999)
 
         for fold in [0, 1]:
-            for macro in [0, 1]:
+            for macro in False, True:
                 with self.subTest(macro=macro, fold=fold):
                     c_api_date = _testcapi.get_datetime_fromdateandtimeandfold(
                         macro,
@@ -6156,7 +6251,7 @@
     def test_time_from_time(self):
         exp_time = time(22, 12, 55, 99999)
 
-        for macro in [0, 1]:
+        for macro in False, True:
             with self.subTest(macro=macro):
                 c_api_time = _testcapi.get_time_fromtime(
                     macro,
@@ -6171,7 +6266,7 @@
         exp_time = time(22, 12, 55, 99999)
 
         for fold in [0, 1]:
-            for macro in [0, 1]:
+            for macro in False, True:
                 with self.subTest(macro=macro, fold=fold):
                     c_api_time = _testcapi.get_time_fromtimeandfold(
                         macro,
@@ -6187,7 +6282,7 @@
     def test_delta_from_dsu(self):
         exp_delta = timedelta(26, 55, 99999)
 
-        for macro in [0, 1]:
+        for macro in False, True:
             with self.subTest(macro=macro):
                 c_api_delta = _testcapi.get_delta_fromdsu(
                     macro,
@@ -6200,7 +6295,7 @@
     def test_date_from_timestamp(self):
         ts = datetime(1995, 4, 12).timestamp()
 
-        for macro in [0, 1]:
+        for macro in False, True:
             with self.subTest(macro=macro):
                 d = _testcapi.get_date_fromtimestamp(int(ts), macro)
 
@@ -6218,7 +6313,7 @@
 
         from_timestamp = _testcapi.get_datetime_fromtimestamp
         for case in cases:
-            for macro in [0, 1]:
+            for macro in False, True:
                 with self.subTest(case=case, macro=macro):
                     dtup, tzinfo, usetz = case
                     dt_orig = datetime(*dtup, tzinfo=tzinfo)
diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py
index 404934c..606f31b 100644
--- a/Lib/test/eintrdata/eintr_tester.py
+++ b/Lib/test/eintrdata/eintr_tester.py
@@ -22,6 +22,7 @@
 import unittest
 
 from test import support
+from test.support import socket_helper
 
 @contextlib.contextmanager
 def kill_on_error(proc):
@@ -57,9 +58,8 @@
 
         # Use faulthandler as watchdog to debug when a test hangs
         # (timeout of 10 minutes)
-        if hasattr(faulthandler, 'dump_traceback_later'):
-            faulthandler.dump_traceback_later(10 * 60, exit=True,
-                                              file=sys.__stderr__)
+        faulthandler.dump_traceback_later(10 * 60, exit=True,
+                                          file=sys.__stderr__)
 
     @staticmethod
     def stop_alarm():
@@ -68,8 +68,7 @@
     def tearDown(self):
         self.stop_alarm()
         signal.signal(signal.SIGALRM, self.orig_handler)
-        if hasattr(faulthandler, 'cancel_dump_traceback_later'):
-            faulthandler.cancel_dump_traceback_later()
+        faulthandler.cancel_dump_traceback_later()
 
     def subprocess(self, *args, **kw):
         cmd_args = (sys.executable, '-c') + args
@@ -285,14 +284,14 @@
         self._test_send(lambda sock, data: sock.sendmsg([data]))
 
     def test_accept(self):
-        sock = socket.create_server((support.HOST, 0))
+        sock = socket.create_server((socket_helper.HOST, 0))
         self.addCleanup(sock.close)
         port = sock.getsockname()[1]
 
         code = '\n'.join((
             'import socket, time',
             '',
-            'host = %r' % support.HOST,
+            'host = %r' % socket_helper.HOST,
             'port = %s' % port,
             'sleep_time = %r' % self.sleep_time,
             '',
diff --git a/Lib/test/fork_wait.py b/Lib/test/fork_wait.py
index 9850b06..249b5e9 100644
--- a/Lib/test/fork_wait.py
+++ b/Lib/test/fork_wait.py
@@ -11,7 +11,7 @@
 
 import os, sys, time, unittest
 import threading
-import test.support as support
+from test import support
 
 
 LONGSLEEP = 2
@@ -43,17 +43,8 @@
             except OSError:
                 pass
 
-    def wait_impl(self, cpid):
-        for i in range(10):
-            # waitpid() shouldn't hang, but some of the buildbots seem to hang
-            # in the forking tests.  This is an attempt to fix the problem.
-            spid, status = os.waitpid(cpid, os.WNOHANG)
-            if spid == cpid:
-                break
-            time.sleep(2 * SHORTSLEEP)
-
-        self.assertEqual(spid, cpid)
-        self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
+    def wait_impl(self, cpid, *, exitcode):
+        support.wait_process(cpid, exitcode=exitcode)
 
     def test_wait(self):
         for i in range(NUM_THREADS):
@@ -62,7 +53,7 @@
             self.threads.append(thread)
 
         # busy-loop to wait for threads
-        deadline = time.monotonic() + 10.0
+        deadline = time.monotonic() + support.SHORT_TIMEOUT
         while len(self.alive) < NUM_THREADS:
             time.sleep(0.1)
             if deadline < time.monotonic():
@@ -88,4 +79,4 @@
             os._exit(n)
         else:
             # Parent
-            self.wait_impl(cpid)
+            self.wait_impl(cpid, exitcode=0)
diff --git a/Lib/test/inspect_fodder.py b/Lib/test/inspect_fodder.py
index 96a0257..e1287a3 100644
--- a/Lib/test/inspect_fodder.py
+++ b/Lib/test/inspect_fodder.py
@@ -91,3 +91,25 @@
 
 custom_method = Callable().as_method_of(42)
 del Callable
+
+# line 95
+class WhichComments:
+  # line 97
+    # before f
+    def f(self):
+      # line 100
+        # start f
+        return 1
+        # line 103
+        # end f
+       # line 105
+    # after f
+
+    # before asyncf - line 108
+    async def asyncf(self):
+        # start asyncf
+        return 2
+        # end asyncf
+       # after asyncf - line 113
+    # end of WhichComments - line 114
+  # after WhichComments - line 115
diff --git a/Lib/test/inspect_fodder2.py b/Lib/test/inspect_fodder2.py
index 5a7b559..e7d4b53 100644
--- a/Lib/test/inspect_fodder2.py
+++ b/Lib/test/inspect_fodder2.py
@@ -138,18 +138,124 @@
             never_reached1
             never_reached2
 
-#line 141
+# line 141
+class cls142:
+    a = """
+class cls149:
+    ...
+"""
+
+# line 148
+class cls149:
+
+    def func151(self):
+        pass
+
+'''
+class cls160:
+    pass
+'''
+
+# line 159
+class cls160:
+
+    def func162(self):
+        pass
+
+# line 165
+class cls166:
+    a = '''
+    class cls175:
+        ...
+    '''
+
+# line 172
+class cls173:
+
+    class cls175:
+        pass
+
+# line 178
+class cls179:
+    pass
+
+# line 182
+class cls183:
+
+    class cls185:
+
+        def func186(self):
+            pass
+
+def class_decorator(cls):
+    return cls
+
+# line 193
+@class_decorator
+@class_decorator
+class cls196:
+
+    @class_decorator
+    @class_decorator
+    class cls200:
+        pass
+
+class cls203:
+    class cls204:
+        class cls205:
+            pass
+    class cls207:
+        class cls205:
+            pass
+
+# line 211
+def func212():
+    class cls213:
+        pass
+    return cls213
+
+# line 217
+class cls213:
+    def func219(self):
+        class cls220:
+            pass
+        return cls220
+
+# line 224
+async def func225():
+    class cls226:
+        pass
+    return cls226
+
+# line 230
+class cls226:
+    async def func232(self):
+        class cls233:
+            pass
+        return cls233
+
+if True:
+    class cls238:
+        class cls239:
+            '''if clause cls239'''
+else:
+    class cls238:
+        class cls239:
+            '''else clause 239'''
+            pass
+
+#line 247
 def positional_only_arg(a, /):
     pass
 
-#line 145
+#line 251
 def all_markers(a, b, /, c, d, *, e, f):
     pass
 
-# line 149
+# line 255
 def all_markers_with_args_and_kwargs(a, b, /, c, d, *args, e, f, **kwargs):
     pass
 
-#line 153
+#line 259
 def all_markers_with_defaults(a, b=1, /, c=2, d=3, *, e=4, f=5):
     pass
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index adf31cc..e20bf9a 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -596,6 +596,7 @@
             test_cwd = 'test_python_worker_{}'.format(pid)
         else:
             test_cwd = 'test_python_{}'.format(pid)
+        test_cwd += support.FS_NONASCII
         test_cwd = os.path.join(self.tmp_dir, test_cwd)
         return test_cwd
 
diff --git a/Lib/test/libregrtest/save_env.py b/Lib/test/libregrtest/save_env.py
index 31931f2..e7c27a6 100644
--- a/Lib/test/libregrtest/save_env.py
+++ b/Lib/test/libregrtest/save_env.py
@@ -7,6 +7,7 @@
 import sys
 import sysconfig
 import threading
+import urllib.request
 import warnings
 from test import support
 from test.libregrtest.utils import print_warning
@@ -68,8 +69,20 @@
                  'files', 'locale', 'warnings.showwarning',
                  'shutil_archive_formats', 'shutil_unpack_formats',
                  'asyncio.events._event_loop_policy',
+                 'urllib.requests._url_tempfiles', 'urllib.requests._opener',
                 )
 
+    def get_urllib_requests__url_tempfiles(self):
+        return list(urllib.request._url_tempfiles)
+    def restore_urllib_requests__url_tempfiles(self, tempfiles):
+        for filename in tempfiles:
+            support.unlink(filename)
+
+    def get_urllib_requests__opener(self):
+        return urllib.request._opener
+    def restore_urllib_requests__opener(self, opener):
+        urllib.request._opener = opener
+
     def get_asyncio_events__event_loop_policy(self):
         return support.maybe_get_event_loop_policy()
     def restore_asyncio_events__event_loop_policy(self, policy):
diff --git a/Lib/test/libregrtest/setup.py b/Lib/test/libregrtest/setup.py
index 2b0bdf9..1f264c1 100644
--- a/Lib/test/libregrtest/setup.py
+++ b/Lib/test/libregrtest/setup.py
@@ -10,6 +10,8 @@
 except ImportError:
     gc = None
 
+from test.libregrtest.utils import setup_unraisable_hook
+
 
 def setup_tests(ns):
     try:
@@ -77,6 +79,19 @@
             pass
         sys.addaudithook(_test_audit_hook)
 
+    setup_unraisable_hook()
+
+    if ns.timeout is not None:
+        # For a slow buildbot worker, increase SHORT_TIMEOUT and LONG_TIMEOUT
+        support.SHORT_TIMEOUT = max(support.SHORT_TIMEOUT, ns.timeout / 40)
+        support.LONG_TIMEOUT = max(support.LONG_TIMEOUT, ns.timeout / 4)
+
+        # If --timeout is short: reduce timeouts
+        support.LOOPBACK_TIMEOUT = min(support.LOOPBACK_TIMEOUT, ns.timeout)
+        support.INTERNET_TIMEOUT = min(support.INTERNET_TIMEOUT, ns.timeout)
+        support.SHORT_TIMEOUT = min(support.SHORT_TIMEOUT, ns.timeout)
+        support.LONG_TIMEOUT = min(support.LONG_TIMEOUT, ns.timeout)
+
 
 def replace_stdout():
     """Set stdout encoder error handler to backslashreplace (as stderr error
diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py
index 0467c8f..71f538f 100644
--- a/Lib/test/libregrtest/utils.py
+++ b/Lib/test/libregrtest/utils.py
@@ -63,3 +63,24 @@
 
 def print_warning(msg):
     support.print_warning(msg)
+
+
+orig_unraisablehook = None
+
+
+def regrtest_unraisable_hook(unraisable):
+    global orig_unraisablehook
+    support.environment_altered = True
+    print_warning("Unraisable exception")
+    old_stderr = sys.stderr
+    try:
+        sys.stderr = sys.__stderr__
+        orig_unraisablehook(unraisable)
+    finally:
+        sys.stderr = old_stderr
+
+
+def setup_unraisable_hook():
+    global orig_unraisablehook
+    orig_unraisablehook = sys.unraisablehook
+    sys.unraisablehook = regrtest_unraisable_hook
diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py
index 40316de..44bc2ae 100644
--- a/Lib/test/list_tests.py
+++ b/Lib/test/list_tests.py
@@ -7,6 +7,7 @@
 from functools import cmp_to_key
 
 from test import support, seq_tests
+from test.support import ALWAYS_EQ, NEVER_EQ
 
 
 class CommonTest(seq_tests.CommonTest):
@@ -329,6 +330,20 @@
 
         self.assertRaises(TypeError, a.remove)
 
+        a = self.type2test([1, 2])
+        self.assertRaises(ValueError, a.remove, NEVER_EQ)
+        self.assertEqual(a, [1, 2])
+        a.remove(ALWAYS_EQ)
+        self.assertEqual(a, [2])
+        a = self.type2test([ALWAYS_EQ])
+        a.remove(1)
+        self.assertEqual(a, [])
+        a = self.type2test([ALWAYS_EQ])
+        a.remove(NEVER_EQ)
+        self.assertEqual(a, [])
+        a = self.type2test([NEVER_EQ])
+        self.assertRaises(ValueError, a.remove, ALWAYS_EQ)
+
         class BadExc(Exception):
             pass
 
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py
index 7b1ad8e..b397525 100644
--- a/Lib/test/lock_tests.py
+++ b/Lib/test/lock_tests.py
@@ -2,6 +2,7 @@
 Various tests for synchronization primitives.
 """
 
+import os
 import sys
 import time
 from _thread import start_new_thread, TIMEOUT_MAX
@@ -12,6 +13,11 @@
 from test import support
 
 
+requires_fork = unittest.skipUnless(hasattr(os, 'fork'),
+                                    "platform doesn't support fork "
+                                     "(no _at_fork_reinit method)")
+
+
 def _wait():
     # A crude wait/yield function not relying on synchronization primitives.
     time.sleep(0.01)
@@ -182,7 +188,7 @@
     def test_timeout(self):
         lock = self.locktype()
         # Can't set timeout if not blocking
-        self.assertRaises(ValueError, lock.acquire, 0, 1)
+        self.assertRaises(ValueError, lock.acquire, False, 1)
         # Invalid timeout values
         self.assertRaises(ValueError, lock.acquire, timeout=-100)
         self.assertRaises(OverflowError, lock.acquire, timeout=1e100)
@@ -265,6 +271,25 @@
         self.assertFalse(lock.locked())
         self.assertTrue(lock.acquire(blocking=False))
 
+    @requires_fork
+    def test_at_fork_reinit(self):
+        def use_lock(lock):
+            # make sure that the lock still works normally
+            # after _at_fork_reinit()
+            lock.acquire()
+            lock.release()
+
+        # unlocked
+        lock = self.locktype()
+        lock._at_fork_reinit()
+        use_lock(lock)
+
+        # locked: _at_fork_reinit() resets the lock to the unlocked state
+        lock2 = self.locktype()
+        lock2.acquire()
+        lock2._at_fork_reinit()
+        use_lock(lock2)
+
 
 class RLockTests(BaseLockTests):
     """
@@ -417,12 +442,13 @@
         b.wait_for_finished()
         self.assertEqual(results, [True] * N)
 
-    def test_reset_internal_locks(self):
+    @requires_fork
+    def test_at_fork_reinit(self):
         # ensure that condition is still using a Lock after reset
         evt = self.eventtype()
         with evt._cond:
             self.assertFalse(evt._cond.acquire(False))
-        evt._reset_internal_locks()
+        evt._at_fork_reinit()
         with evt._cond:
             self.assertFalse(evt._cond.acquire(False))
 
@@ -663,6 +689,38 @@
         b.wait_for_finished()
         self.assertEqual(sem_results, [True] * (6 + 7 + 6 + 1))
 
+    def test_multirelease(self):
+        sem = self.semtype(7)
+        sem.acquire()
+        results1 = []
+        results2 = []
+        phase_num = 0
+        def f():
+            sem.acquire()
+            results1.append(phase_num)
+            sem.acquire()
+            results2.append(phase_num)
+        b = Bunch(f, 10)
+        b.wait_for_started()
+        while len(results1) + len(results2) < 6:
+            _wait()
+        self.assertEqual(results1 + results2, [0] * 6)
+        phase_num = 1
+        sem.release(7)
+        while len(results1) + len(results2) < 13:
+            _wait()
+        self.assertEqual(sorted(results1 + results2), [0] * 6 + [1] * 7)
+        phase_num = 2
+        sem.release(6)
+        while len(results1) + len(results2) < 19:
+            _wait()
+        self.assertEqual(sorted(results1 + results2), [0] * 6 + [1] * 7 + [2] * 6)
+        # The semaphore is still locked
+        self.assertFalse(sem.acquire(False))
+        # Final release, to let the last thread finish
+        sem.release()
+        b.wait_for_finished()
+
     def test_try_acquire(self):
         sem = self.semtype(2)
         self.assertTrue(sem.acquire(False))
diff --git a/Lib/test/mapping_tests.py b/Lib/test/mapping_tests.py
index 53f29f6..613206a 100644
--- a/Lib/test/mapping_tests.py
+++ b/Lib/test/mapping_tests.py
@@ -448,7 +448,7 @@
         class Exc(Exception): pass
 
         class baddict1(self.type2test):
-            def __init__(self):
+            def __init__(self, *args, **kwargs):
                 raise Exc()
 
         self.assertRaises(Exc, baddict1.fromkeys, [1])
@@ -595,12 +595,14 @@
         d = self._empty_mapping()
         d[1] = 1
         try:
+            count = 0
             for i in d:
                 d[i+1] = 1
+                if count >= 1:
+                    self.fail("changing dict size during iteration doesn't raise Error")
+                count += 1
         except RuntimeError:
             pass
-        else:
-            self.fail("changing dict size during iteration doesn't raise Error")
 
     def test_repr(self):
         d = self._empty_mapping()
diff --git a/Lib/test/mock_socket.py b/Lib/test/mock_socket.py
index b28c473..cda4db2 100644
--- a/Lib/test/mock_socket.py
+++ b/Lib/test/mock_socket.py
@@ -91,7 +91,7 @@
         handle = MockFile(self.lines)
         return handle
 
-    def sendall(self, buffer, flags=None):
+    def sendall(self, data, flags=None):
         self.last = data
         self.output.append(data)
         return len(data)
diff --git a/Lib/test/multibytecodec_support.py b/Lib/test/multibytecodec_support.py
index cca8af6..f76c015 100644
--- a/Lib/test/multibytecodec_support.py
+++ b/Lib/test/multibytecodec_support.py
@@ -305,29 +305,23 @@
             self._test_mapping_file_plain()
 
     def _test_mapping_file_plain(self):
-        unichrs = lambda s: ''.join(map(chr, map(eval, s.split('+'))))
+        def unichrs(s):
+            return ''.join(chr(int(x, 16)) for x in s.split('+'))
+
         urt_wa = {}
 
         with self.open_mapping_file() as f:
             for line in f:
                 if not line:
                     break
-                data = line.split('#')[0].strip().split()
+                data = line.split('#')[0].split()
                 if len(data) != 2:
                     continue
 
-                csetval = eval(data[0])
-                if csetval <= 0x7F:
-                    csetch = bytes([csetval & 0xff])
-                elif csetval >= 0x1000000:
-                    csetch = bytes([(csetval >> 24), ((csetval >> 16) & 0xff),
-                                    ((csetval >> 8) & 0xff), (csetval & 0xff)])
-                elif csetval >= 0x10000:
-                    csetch = bytes([(csetval >> 16), ((csetval >> 8) & 0xff),
-                                    (csetval & 0xff)])
-                elif csetval >= 0x100:
-                    csetch = bytes([(csetval >> 8), (csetval & 0xff)])
-                else:
+                if data[0][:2] != '0x':
+                    self.fail(f"Invalid line: {line!r}")
+                csetch = bytes.fromhex(data[0][2:])
+                if len(csetch) == 1 and 0x80 <= csetch[0]:
                     continue
 
                 unich = unichrs(data[1])
diff --git a/Lib/test/outstanding_bugs.py b/Lib/test/outstanding_bugs.py
deleted file mode 100644
index 7e527a6..0000000
--- a/Lib/test/outstanding_bugs.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# This file is for everybody to add tests for bugs that aren't
-# fixed yet. Please add a test case and appropriate bug description.
-#
-# When you fix one of the bugs, please move the test to the correct
-# test_ module.
-#
-
-import unittest
-from test import support
-
-#
-# No test cases for outstanding bugs at the moment.
-#
-
-
-if __name__ == "__main__":
-    unittest.main()
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index ff7bbb0..3d54617 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -1037,7 +1037,9 @@
         self.assertEqual(self.loads(dumped), '\u20ac\x00')
 
     def test_misc_get(self):
-        self.check_unpickling_error(KeyError, b'g0\np0')
+        self.check_unpickling_error(pickle.UnpicklingError, b'g0\np0')
+        self.check_unpickling_error(pickle.UnpicklingError, b'jens:')
+        self.check_unpickling_error(pickle.UnpicklingError, b'hens:')
         self.assert_is_copy([(100,), (100,)],
                             self.loads(b'((Kdtp0\nh\x00l.))'))
 
@@ -1963,6 +1965,17 @@
                 self.assertEqual(B(x), B(y), detail)
                 self.assertEqual(x.__dict__, y.__dict__, detail)
 
+    def test_newobj_overridden_new(self):
+        # Test that Python class with C implemented __new__ is pickleable
+        for proto in protocols:
+            x = MyIntWithNew2(1)
+            x.foo = 42
+            s = self.dumps(x, proto)
+            y = self.loads(s)
+            self.assertIs(type(y), MyIntWithNew2)
+            self.assertEqual(int(y), 1)
+            self.assertEqual(y.foo, 42)
+
     def test_newobj_not_class(self):
         # Issue 24552
         global SimpleNewObj
@@ -3083,6 +3096,13 @@
              MyStr, MyUnicode,
              MyTuple, MyList, MyDict, MySet, MyFrozenSet]
 
+class MyIntWithNew(int):
+    def __new__(cls, value):
+        raise AssertionError
+
+class MyIntWithNew2(MyIntWithNew):
+    __new__ = int.__new__
+
 
 class SlotList(MyList):
     __slots__ = ["foo"]
diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py
index 9f3e79f..cc228fb 100644
--- a/Lib/test/pythoninfo.py
+++ b/Lib/test/pythoninfo.py
@@ -199,11 +199,19 @@
     )
     copy_attributes(info_add, os, 'os.%s', attributes, formatter=format_attr)
 
-    call_func(info_add, 'os.getcwd', os, 'getcwd')
-
-    call_func(info_add, 'os.getuid', os, 'getuid')
-    call_func(info_add, 'os.getgid', os, 'getgid')
-    call_func(info_add, 'os.uname', os, 'uname')
+    for func in (
+        'cpu_count',
+        'getcwd',
+        'getegid',
+        'geteuid',
+        'getgid',
+        'getloadavg',
+        'getresgid',
+        'getresuid',
+        'getuid',
+        'uname',
+    ):
+        call_func(info_add, 'os.%s' % func, os, func)
 
     def format_groups(groups):
         return ', '.join(map(str, groups))
@@ -220,9 +228,6 @@
         else:
             info_add("os.login", login)
 
-    call_func(info_add, 'os.cpu_count', os, 'cpu_count')
-    call_func(info_add, 'os.getloadavg', os, 'getloadavg')
-
     # Environment variables used by the stdlib and tests. Don't log the full
     # environment: filter to list to not leak sensitive information.
     #
@@ -303,7 +308,7 @@
     if hasattr(os, 'umask'):
         mask = os.umask(0)
         os.umask(mask)
-        info_add("os.umask", '%03o' % mask)
+        info_add("os.umask", '0o%03o' % mask)
 
 
 def collect_pwd(info_add):
@@ -715,6 +720,25 @@
         pass
 
 
+def collect_fips(info_add):
+    try:
+        import _hashlib
+    except ImportError:
+        _hashlib = None
+
+    if _hashlib is not None:
+        call_func(info_add, 'fips.openssl_fips_mode', _hashlib, 'get_fips_mode')
+
+    try:
+        with open("/proc/sys/crypto/fips_enabled", encoding="utf-8") as fp:
+            line = fp.readline().rstrip()
+
+        if line:
+            info_add('fips.linux_crypto_fips_enabled', line)
+    except OSError:
+        pass
+
+
 def collect_info(info):
     error = False
     info_add = info.add
@@ -730,6 +754,7 @@
         collect_datetime,
         collect_decimal,
         collect_expat,
+        collect_fips,
         collect_gdb,
         collect_gdbm,
         collect_get_config,
@@ -757,7 +782,7 @@
     ):
         try:
             collect_func(info_add)
-        except Exception as exc:
+        except Exception:
             error = True
             print("ERROR: %s() failed" % (collect_func.__name__),
                   file=sys.stderr)
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 21b0edf..0ffb3ed 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -6,9 +6,6 @@
 Run this script with -h or --help for documentation.
 """
 
-# We import importlib *ASAP* in order to test #15386
-import importlib
-
 import os
 import sys
 from test.libregrtest import main
diff --git a/Lib/test/seq_tests.py b/Lib/test/seq_tests.py
index 65b110e..1d9ad58 100644
--- a/Lib/test/seq_tests.py
+++ b/Lib/test/seq_tests.py
@@ -6,6 +6,7 @@
 import sys
 import pickle
 from test import support
+from test.support import ALWAYS_EQ, NEVER_EQ
 
 # Various iterables
 # This is used for checking the constructor (here and in test_deque.py)
@@ -221,15 +222,15 @@
         self.assertRaises(TypeError, u.__contains__)
 
     def test_contains_fake(self):
-        class AllEq:
-            # Sequences must use rich comparison against each item
-            # (unless "is" is true, or an earlier item answered)
-            # So instances of AllEq must be found in all non-empty sequences.
-            def __eq__(self, other):
-                return True
-            __hash__ = None # Can't meet hash invariant requirements
-        self.assertNotIn(AllEq(), self.type2test([]))
-        self.assertIn(AllEq(), self.type2test([1]))
+        # Sequences must use rich comparison against each item
+        # (unless "is" is true, or an earlier item answered)
+        # So ALWAYS_EQ must be found in all non-empty sequences.
+        self.assertNotIn(ALWAYS_EQ, self.type2test([]))
+        self.assertIn(ALWAYS_EQ, self.type2test([1]))
+        self.assertIn(1, self.type2test([ALWAYS_EQ]))
+        self.assertNotIn(NEVER_EQ, self.type2test([]))
+        self.assertNotIn(ALWAYS_EQ, self.type2test([NEVER_EQ]))
+        self.assertIn(NEVER_EQ, self.type2test([ALWAYS_EQ]))
 
     def test_contains_order(self):
         # Sequences must test in-order.  If a rich comparison has side
@@ -350,6 +351,11 @@
         self.assertEqual(a.count(1), 3)
         self.assertEqual(a.count(3), 0)
 
+        self.assertEqual(a.count(ALWAYS_EQ), 9)
+        self.assertEqual(self.type2test([ALWAYS_EQ, ALWAYS_EQ]).count(1), 2)
+        self.assertEqual(self.type2test([ALWAYS_EQ, ALWAYS_EQ]).count(NEVER_EQ), 2)
+        self.assertEqual(self.type2test([NEVER_EQ, NEVER_EQ]).count(ALWAYS_EQ), 0)
+
         self.assertRaises(TypeError, a.count)
 
         class BadExc(Exception):
@@ -378,6 +384,11 @@
         self.assertEqual(u.index(0, 3, 4), 3)
         self.assertRaises(ValueError, u.index, 2, 0, -10)
 
+        self.assertEqual(u.index(ALWAYS_EQ), 0)
+        self.assertEqual(self.type2test([ALWAYS_EQ, ALWAYS_EQ]).index(1), 0)
+        self.assertEqual(self.type2test([ALWAYS_EQ, ALWAYS_EQ]).index(NEVER_EQ), 0)
+        self.assertRaises(ValueError, self.type2test([NEVER_EQ, NEVER_EQ]).index, ALWAYS_EQ)
+
         self.assertRaises(TypeError, u.index)
 
         class BadExc(Exception):
diff --git a/Lib/test/signalinterproctester.py b/Lib/test/signalinterproctester.py
index 168b5da..bc60b74 100644
--- a/Lib/test/signalinterproctester.py
+++ b/Lib/test/signalinterproctester.py
@@ -4,6 +4,7 @@
 import sys
 import time
 import unittest
+from test import support
 
 
 class SIGUSR1Exception(Exception):
@@ -27,7 +28,7 @@
             # (if set)
             child.wait()
 
-        timeout = 10.0
+        timeout = support.SHORT_TIMEOUT
         deadline = time.monotonic() + timeout
 
         while time.monotonic() < deadline:
diff --git a/Lib/test/ssl_servers.py b/Lib/test/ssl_servers.py
index bfe533c..a4bd745 100644
--- a/Lib/test/ssl_servers.py
+++ b/Lib/test/ssl_servers.py
@@ -9,10 +9,11 @@
     SimpleHTTPRequestHandler, BaseHTTPRequestHandler)
 
 from test import support
+from test.support import socket_helper
 
 here = os.path.dirname(__file__)
 
-HOST = support.HOST
+HOST = socket_helper.HOST
 CERTFILE = os.path.join(here, 'keycert.pem')
 
 # This one's based on HTTPServer, which is based on socketserver
@@ -49,7 +50,7 @@
     server_version = "TestHTTPS/1.0"
     root = here
     # Avoid hanging when a request gets interrupted by the client
-    timeout = 5
+    timeout = support.LOOPBACK_TIMEOUT
 
     def translate_path(self, path):
         """Translate a /-separated PATH to the local filename syntax.
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index 38da941..527f505 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -505,6 +505,7 @@
         EQ("", "", "replace", "A", "")
         EQ("", "", "replace", "A", "A")
         EQ("", "", "replace", "", "", 100)
+        EQ("A", "", "replace", "", "A", 100)
         EQ("", "", "replace", "", "", sys.maxsize)
 
         # interleave (from=="", 'to' gets inserted everywhere)
@@ -681,6 +682,42 @@
         self.checkraises(OverflowError, A2_16, "replace", "A", A2_16)
         self.checkraises(OverflowError, A2_16, "replace", "AA", A2_16+A2_16)
 
+    def test_removeprefix(self):
+        self.checkequal('am', 'spam', 'removeprefix', 'sp')
+        self.checkequal('spamspam', 'spamspamspam', 'removeprefix', 'spam')
+        self.checkequal('spam', 'spam', 'removeprefix', 'python')
+        self.checkequal('spam', 'spam', 'removeprefix', 'spider')
+        self.checkequal('spam', 'spam', 'removeprefix', 'spam and eggs')
+
+        self.checkequal('', '', 'removeprefix', '')
+        self.checkequal('', '', 'removeprefix', 'abcde')
+        self.checkequal('abcde', 'abcde', 'removeprefix', '')
+        self.checkequal('', 'abcde', 'removeprefix', 'abcde')
+
+        self.checkraises(TypeError, 'hello', 'removeprefix')
+        self.checkraises(TypeError, 'hello', 'removeprefix', 42)
+        self.checkraises(TypeError, 'hello', 'removeprefix', 42, 'h')
+        self.checkraises(TypeError, 'hello', 'removeprefix', 'h', 42)
+        self.checkraises(TypeError, 'hello', 'removeprefix', ("he", "l"))
+
+    def test_removesuffix(self):
+        self.checkequal('sp', 'spam', 'removesuffix', 'am')
+        self.checkequal('spamspam', 'spamspamspam', 'removesuffix', 'spam')
+        self.checkequal('spam', 'spam', 'removesuffix', 'python')
+        self.checkequal('spam', 'spam', 'removesuffix', 'blam')
+        self.checkequal('spam', 'spam', 'removesuffix', 'eggs and spam')
+
+        self.checkequal('', '', 'removesuffix', '')
+        self.checkequal('', '', 'removesuffix', 'abcde')
+        self.checkequal('abcde', 'abcde', 'removesuffix', '')
+        self.checkequal('', 'abcde', 'removesuffix', 'abcde')
+
+        self.checkraises(TypeError, 'hello', 'removesuffix')
+        self.checkraises(TypeError, 'hello', 'removesuffix', 42)
+        self.checkraises(TypeError, 'hello', 'removesuffix', 42, 'h')
+        self.checkraises(TypeError, 'hello', 'removesuffix', 'h', 42)
+        self.checkraises(TypeError, 'hello', 'removesuffix', ("lo", "l"))
+
     def test_capitalize(self):
         self.checkequal(' hello ', ' hello ', 'capitalize')
         self.checkequal('Hello ', 'Hello ','capitalize')
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index fb09e06..aee3737 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3,77 +3,31 @@
 if __name__ != 'test.support':
     raise ImportError('support must be imported from the test package')
 
-import asyncio.events
 import collections.abc
 import contextlib
 import errno
-import faulthandler
 import fnmatch
 import functools
-import gc
 import glob
-import hashlib
 import importlib
 import importlib.util
-import locale
-import logging.handlers
-import nntplib
 import os
 import platform
 import re
-import shutil
-import socket
 import stat
 import struct
 import subprocess
 import sys
 import sysconfig
-import tempfile
 import _thread
 import threading
 import time
 import types
 import unittest
-import urllib.error
 import warnings
 
 from .testresult import get_test_runner
 
-try:
-    import multiprocessing.process
-except ImportError:
-    multiprocessing = None
-
-try:
-    import zlib
-except ImportError:
-    zlib = None
-
-try:
-    import gzip
-except ImportError:
-    gzip = None
-
-try:
-    import bz2
-except ImportError:
-    bz2 = None
-
-try:
-    import lzma
-except ImportError:
-    lzma = None
-
-try:
-    import resource
-except ImportError:
-    resource = None
-
-try:
-    import _hashlib
-except ImportError:
-    _hashlib = None
-
 __all__ = [
     # globals
     "PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
@@ -91,26 +45,23 @@
     "create_empty_file", "can_symlink", "fs_is_case_insensitive",
     # unittest
     "is_resource_enabled", "requires", "requires_freebsd_version",
-    "requires_linux_version", "requires_mac_ver", "requires_hashdigest",
+    "requires_linux_version", "requires_mac_ver",
     "check_syntax_error", "check_syntax_warning",
     "TransientResource", "time_out", "socket_peer_reset", "ioerror_peer_reset",
-    "transient_internet", "BasicTestRunner", "run_unittest", "run_doctest",
+    "BasicTestRunner", "run_unittest", "run_doctest",
     "skip_unless_symlink", "requires_gzip", "requires_bz2", "requires_lzma",
     "bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
     "requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
     "anticipate_failure", "load_package_tests", "detect_api_mismatch",
-    "check__all__", "skip_unless_bind_unix_socket", "skip_if_buggy_ucrt_strfptime",
+    "check__all__", "skip_if_buggy_ucrt_strfptime",
     "ignore_warnings",
     # sys
     "is_jython", "is_android", "check_impl_detail", "unix_shell",
     "setswitchinterval",
     # network
-    "HOST", "IPV6_ENABLED", "find_unused_port", "bind_port", "open_urlresource",
-    "bind_unix_socket",
+    "open_urlresource",
     # processes
     'temp_umask', "reap_children",
-    # logging
-    "TestHandler",
     # threads
     "threading_setup", "threading_cleanup", "reap_threads", "start_threads",
     # miscellaneous
@@ -119,9 +70,51 @@
     "run_with_locale", "swap_item",
     "swap_attr", "Matcher", "set_memlimit", "SuppressCrashReport", "sortdict",
     "run_with_tz", "PGO", "missing_compiler_executable", "fd_count",
-    "ALWAYS_EQ", "LARGEST", "SMALLEST"
+    "ALWAYS_EQ", "NEVER_EQ", "LARGEST", "SMALLEST",
+    "LOOPBACK_TIMEOUT", "INTERNET_TIMEOUT", "SHORT_TIMEOUT", "LONG_TIMEOUT",
     ]
 
+
+# Timeout in seconds for tests using a network server listening on the network
+# local loopback interface like 127.0.0.1.
+#
+# The timeout is long enough to prevent test failure: it takes into account
+# that the client and the server can run in different threads or even different
+# processes.
+#
+# The timeout should be long enough for connect(), recv() and send() methods
+# of socket.socket.
+LOOPBACK_TIMEOUT = 5.0
+if sys.platform == 'win32' and platform.machine() == 'ARM':
+    # bpo-37553: test_socket.SendfileUsingSendTest is taking longer than 2
+    # seconds on Windows ARM32 buildbot
+    LOOPBACK_TIMEOUT = 10
+
+# Timeout in seconds for network requests going to the Internet. The timeout is
+# short enough to prevent a test to wait for too long if the Internet request
+# is blocked for whatever reason.
+#
+# Usually, a timeout using INTERNET_TIMEOUT should not mark a test as failed,
+# but skip the test instead: see transient_internet().
+INTERNET_TIMEOUT = 60.0
+
+# Timeout in seconds to mark a test as failed if the test takes "too long".
+#
+# The timeout value depends on the regrtest --timeout command line option.
+#
+# If a test using SHORT_TIMEOUT starts to fail randomly on slow buildbots, use
+# LONG_TIMEOUT instead.
+SHORT_TIMEOUT = 30.0
+
+# Timeout in seconds to detect when a test hangs.
+#
+# It is long enough to reduce the risk of test failure on the slowest Python
+# buildbots. It should not be used to mark a test as failed if the test takes
+# "too long". The timeout value depends on the regrtest --timeout command line
+# option.
+LONG_TIMEOUT = 5 * 60.0
+
+
 class Error(Exception):
     """Base class for regression test exceptions."""
 
@@ -417,6 +410,7 @@
     _rmdir = os.rmdir
 
     def _rmtree(path):
+        import shutil
         try:
             shutil.rmtree(path)
             return
@@ -492,7 +486,9 @@
     if hasattr(_is_gui_available, 'result'):
         return _is_gui_available.result
     reason = None
-    if sys.platform.startswith('win'):
+    if sys.platform.startswith('win') and platform.win32_is_iot():
+        reason = "gui is not available on Windows IoT Core"
+    elif sys.platform.startswith('win'):
         # if Python is running as a service (such as the buildbot service),
         # gui interaction may be disallowed
         import ctypes
@@ -652,165 +648,6 @@
     return decorator
 
 
-def requires_hashdigest(digestname, openssl=None):
-    """Decorator raising SkipTest if a hashing algorithm is not available
-
-    The hashing algorithm could be missing or blocked by a strict crypto
-    policy.
-
-    If 'openssl' is True, then the decorator checks that OpenSSL provides
-    the algorithm. Otherwise the check falls back to built-in
-    implementations.
-
-    ValueError: [digital envelope routines: EVP_DigestInit_ex] disabled for FIPS
-    ValueError: unsupported hash type md4
-    """
-    def decorator(func):
-        @functools.wraps(func)
-        def wrapper(*args, **kwargs):
-            try:
-                if openssl and _hashlib is not None:
-                    _hashlib.new(digestname)
-                else:
-                    hashlib.new(digestname)
-            except ValueError:
-                raise unittest.SkipTest(
-                    f"hash digest '{digestname}' is not available."
-                )
-            return func(*args, **kwargs)
-        return wrapper
-    return decorator
-
-
-HOST = "localhost"
-HOSTv4 = "127.0.0.1"
-HOSTv6 = "::1"
-
-
-def find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM):
-    """Returns an unused port that should be suitable for binding.  This is
-    achieved by creating a temporary socket with the same family and type as
-    the 'sock' parameter (default is AF_INET, SOCK_STREAM), and binding it to
-    the specified host address (defaults to 0.0.0.0) with the port set to 0,
-    eliciting an unused ephemeral port from the OS.  The temporary socket is
-    then closed and deleted, and the ephemeral port is returned.
-
-    Either this method or bind_port() should be used for any tests where a
-    server socket needs to be bound to a particular port for the duration of
-    the test.  Which one to use depends on whether the calling code is creating
-    a python socket, or if an unused port needs to be provided in a constructor
-    or passed to an external program (i.e. the -accept argument to openssl's
-    s_server mode).  Always prefer bind_port() over find_unused_port() where
-    possible.  Hard coded ports should *NEVER* be used.  As soon as a server
-    socket is bound to a hard coded port, the ability to run multiple instances
-    of the test simultaneously on the same host is compromised, which makes the
-    test a ticking time bomb in a buildbot environment. On Unix buildbots, this
-    may simply manifest as a failed test, which can be recovered from without
-    intervention in most cases, but on Windows, the entire python process can
-    completely and utterly wedge, requiring someone to log in to the buildbot
-    and manually kill the affected process.
-
-    (This is easy to reproduce on Windows, unfortunately, and can be traced to
-    the SO_REUSEADDR socket option having different semantics on Windows versus
-    Unix/Linux.  On Unix, you can't have two AF_INET SOCK_STREAM sockets bind,
-    listen and then accept connections on identical host/ports.  An EADDRINUSE
-    OSError will be raised at some point (depending on the platform and
-    the order bind and listen were called on each socket).
-
-    However, on Windows, if SO_REUSEADDR is set on the sockets, no EADDRINUSE
-    will ever be raised when attempting to bind two identical host/ports. When
-    accept() is called on each socket, the second caller's process will steal
-    the port from the first caller, leaving them both in an awkwardly wedged
-    state where they'll no longer respond to any signals or graceful kills, and
-    must be forcibly killed via OpenProcess()/TerminateProcess().
-
-    The solution on Windows is to use the SO_EXCLUSIVEADDRUSE socket option
-    instead of SO_REUSEADDR, which effectively affords the same semantics as
-    SO_REUSEADDR on Unix.  Given the propensity of Unix developers in the Open
-    Source world compared to Windows ones, this is a common mistake.  A quick
-    look over OpenSSL's 0.9.8g source shows that they use SO_REUSEADDR when
-    openssl.exe is called with the 's_server' option, for example. See
-    http://bugs.python.org/issue2550 for more info.  The following site also
-    has a very thorough description about the implications of both REUSEADDR
-    and EXCLUSIVEADDRUSE on Windows:
-    http://msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx)
-
-    XXX: although this approach is a vast improvement on previous attempts to
-    elicit unused ports, it rests heavily on the assumption that the ephemeral
-    port returned to us by the OS won't immediately be dished back out to some
-    other process when we close and delete our temporary socket but before our
-    calling code has a chance to bind the returned port.  We can deal with this
-    issue if/when we come across it.
-    """
-
-    with socket.socket(family, socktype) as tempsock:
-        port = bind_port(tempsock)
-    del tempsock
-    return port
-
-def bind_port(sock, host=HOST):
-    """Bind the socket to a free port and return the port number.  Relies on
-    ephemeral ports in order to ensure we are using an unbound port.  This is
-    important as many tests may be running simultaneously, especially in a
-    buildbot environment.  This method raises an exception if the sock.family
-    is AF_INET and sock.type is SOCK_STREAM, *and* the socket has SO_REUSEADDR
-    or SO_REUSEPORT set on it.  Tests should *never* set these socket options
-    for TCP/IP sockets.  The only case for setting these options is testing
-    multicasting via multiple UDP sockets.
-
-    Additionally, if the SO_EXCLUSIVEADDRUSE socket option is available (i.e.
-    on Windows), it will be set on the socket.  This will prevent anyone else
-    from bind()'ing to our host/port for the duration of the test.
-    """
-
-    if sock.family == socket.AF_INET and sock.type == socket.SOCK_STREAM:
-        if hasattr(socket, 'SO_REUSEADDR'):
-            if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1:
-                raise TestFailed("tests should never set the SO_REUSEADDR "   \
-                                 "socket option on TCP/IP sockets!")
-        if hasattr(socket, 'SO_REUSEPORT'):
-            try:
-                if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
-                    raise TestFailed("tests should never set the SO_REUSEPORT "   \
-                                     "socket option on TCP/IP sockets!")
-            except OSError:
-                # Python's socket module was compiled using modern headers
-                # thus defining SO_REUSEPORT but this process is running
-                # under an older kernel that does not support SO_REUSEPORT.
-                pass
-        if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'):
-            sock.setsockopt(socket.SOL_SOCKET, socket.SO_EXCLUSIVEADDRUSE, 1)
-
-    sock.bind((host, 0))
-    port = sock.getsockname()[1]
-    return port
-
-def bind_unix_socket(sock, addr):
-    """Bind a unix socket, raising SkipTest if PermissionError is raised."""
-    assert sock.family == socket.AF_UNIX
-    try:
-        sock.bind(addr)
-    except PermissionError:
-        sock.close()
-        raise unittest.SkipTest('cannot bind AF_UNIX sockets')
-
-def _is_ipv6_enabled():
-    """Check whether IPv6 is enabled on this host."""
-    if socket.has_ipv6:
-        sock = None
-        try:
-            sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
-            sock.bind((HOSTv6, 0))
-            return True
-        except OSError:
-            pass
-        finally:
-            if sock:
-                sock.close()
-    return False
-
-IPV6_ENABLED = _is_ipv6_enabled()
-
 def system_must_validate_cert(f):
     """Skip the test on TLS certificate validation failures."""
     @functools.wraps(f)
@@ -843,13 +680,33 @@
     float.__getformat__("double").startswith("IEEE"),
     "test requires IEEE 754 doubles")
 
-requires_zlib = unittest.skipUnless(zlib, 'requires zlib')
+def requires_zlib(reason='requires zlib'):
+    try:
+        import zlib
+    except ImportError:
+        zlib = None
+    return unittest.skipUnless(zlib, reason)
 
-requires_gzip = unittest.skipUnless(gzip, 'requires gzip')
+def requires_gzip(reason='requires gzip'):
+    try:
+        import gzip
+    except ImportError:
+        gzip = None
+    return unittest.skipUnless(gzip, reason)
 
-requires_bz2 = unittest.skipUnless(bz2, 'requires bz2')
+def requires_bz2(reason='requires bz2'):
+    try:
+        import bz2
+    except ImportError:
+        bz2 = None
+    return unittest.skipUnless(bz2, reason)
 
-requires_lzma = unittest.skipUnless(lzma, 'requires lzma')
+def requires_lzma(reason='requires lzma'):
+    try:
+        import lzma
+    except ImportError:
+        lzma = None
+    return unittest.skipUnless(lzma, reason)
 
 is_jython = sys.platform.startswith('java')
 
@@ -863,21 +720,21 @@
 # Filename used for testing
 if os.name == 'java':
     # Jython disallows @ in module names
-    TESTFN = '$test'
+    TESTFN_ASCII = '$test'
 else:
-    TESTFN = '@test'
+    TESTFN_ASCII = '@test'
 
 # Disambiguate TESTFN for parallel testing, while letting it remain a valid
 # module name.
-TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid())
+TESTFN_ASCII = "{}_{}_tmp".format(TESTFN_ASCII, os.getpid())
 
 # Define the URL of a dedicated HTTP server for the network tests.
 # The URL must use clear-text HTTP: no redirection to encrypted HTTPS.
 TEST_HTTP_URL = "http://www.pythontest.net"
 
 # FS_NONASCII: non-ASCII character encodable by os.fsencode(),
-# or None if there is no such character.
-FS_NONASCII = None
+# or an empty string if there is no such character.
+FS_NONASCII = ''
 for character in (
     # First try printable and common characters to have a readable filename.
     # For each character, the encoding list are just example of encodings able
@@ -924,7 +781,7 @@
         break
 
 # TESTFN_UNICODE is a non-ascii filename
-TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f"
+TESTFN_UNICODE = TESTFN_ASCII + "-\xe0\xf2\u0258\u0141\u011f"
 if sys.platform == 'darwin':
     # In Mac OS X's VFS API file names are, by definition, canonically
     # decomposed Unicode, encoded using UTF-8. See QA1173:
@@ -942,7 +799,7 @@
     if sys.getwindowsversion().platform >= 2:
         # Different kinds of characters from various languages to minimize the
         # probability that the whole name is encodable to MBCS (issue #9819)
-        TESTFN_UNENCODABLE = TESTFN + "-\u5171\u0141\u2661\u0363\uDC80"
+        TESTFN_UNENCODABLE = TESTFN_ASCII + "-\u5171\u0141\u2661\u0363\uDC80"
         try:
             TESTFN_UNENCODABLE.encode(TESTFN_ENCODING)
         except UnicodeEncodeError:
@@ -959,7 +816,7 @@
         b'\xff'.decode(TESTFN_ENCODING)
     except UnicodeDecodeError:
         # 0xff will be encoded using the surrogate character u+DCFF
-        TESTFN_UNENCODABLE = TESTFN \
+        TESTFN_UNENCODABLE = TESTFN_ASCII \
             + b'-\xff'.decode(TESTFN_ENCODING, 'surrogateescape')
     else:
         # File system encoding (eg. ISO-8859-* encodings) can encode
@@ -993,13 +850,14 @@
     try:
         name.decode(TESTFN_ENCODING)
     except UnicodeDecodeError:
-        TESTFN_UNDECODABLE = os.fsencode(TESTFN) + name
+        TESTFN_UNDECODABLE = os.fsencode(TESTFN_ASCII) + name
         break
 
 if FS_NONASCII:
-    TESTFN_NONASCII = TESTFN + '-' + FS_NONASCII
+    TESTFN_NONASCII = TESTFN_ASCII + FS_NONASCII
 else:
     TESTFN_NONASCII = None
+TESTFN = TESTFN_NONASCII or TESTFN_ASCII
 
 # Save the initial cwd
 SAVEDCWD = os.getcwd()
@@ -1026,6 +884,7 @@
         created, only a warning is issued.
 
     """
+    import tempfile
     dir_created = False
     if path is None:
         path = tempfile.mkdtemp()
@@ -1199,6 +1058,10 @@
 
 def open_urlresource(url, *args, **kw):
     import urllib.request, urllib.parse
+    try:
+        import gzip
+    except ImportError:
+        gzip = None
 
     check = kw.pop('check', None)
 
@@ -1229,7 +1092,7 @@
     opener = urllib.request.build_opener()
     if gzip:
         opener.addheaders.append(('Accept-Encoding', 'gzip'))
-    f = opener.open(url, timeout=15)
+    f = opener.open(url, timeout=INTERNET_TIMEOUT)
     if gzip and f.headers.get('Content-Encoding') == 'gzip':
         f = gzip.GzipFile(fileobj=f)
     try:
@@ -1518,105 +1381,6 @@
 ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
 
 
-def get_socket_conn_refused_errs():
-    """
-    Get the different socket error numbers ('errno') which can be received
-    when a connection is refused.
-    """
-    errors = [errno.ECONNREFUSED]
-    if hasattr(errno, 'ENETUNREACH'):
-        # On Solaris, ENETUNREACH is returned sometimes instead of ECONNREFUSED
-        errors.append(errno.ENETUNREACH)
-    if hasattr(errno, 'EADDRNOTAVAIL'):
-        # bpo-31910: socket.create_connection() fails randomly
-        # with EADDRNOTAVAIL on Travis CI
-        errors.append(errno.EADDRNOTAVAIL)
-    if hasattr(errno, 'EHOSTUNREACH'):
-        # bpo-37583: The destination host cannot be reached
-        errors.append(errno.EHOSTUNREACH)
-    if not IPV6_ENABLED:
-        errors.append(errno.EAFNOSUPPORT)
-    return errors
-
-
-@contextlib.contextmanager
-def transient_internet(resource_name, *, timeout=30.0, errnos=()):
-    """Return a context manager that raises ResourceDenied when various issues
-    with the Internet connection manifest themselves as exceptions."""
-    default_errnos = [
-        ('ECONNREFUSED', 111),
-        ('ECONNRESET', 104),
-        ('EHOSTUNREACH', 113),
-        ('ENETUNREACH', 101),
-        ('ETIMEDOUT', 110),
-        # socket.create_connection() fails randomly with
-        # EADDRNOTAVAIL on Travis CI.
-        ('EADDRNOTAVAIL', 99),
-    ]
-    default_gai_errnos = [
-        ('EAI_AGAIN', -3),
-        ('EAI_FAIL', -4),
-        ('EAI_NONAME', -2),
-        ('EAI_NODATA', -5),
-        # Encountered when trying to resolve IPv6-only hostnames
-        ('WSANO_DATA', 11004),
-    ]
-
-    denied = ResourceDenied("Resource %r is not available" % resource_name)
-    captured_errnos = errnos
-    gai_errnos = []
-    if not captured_errnos:
-        captured_errnos = [getattr(errno, name, num)
-                           for (name, num) in default_errnos]
-        gai_errnos = [getattr(socket, name, num)
-                      for (name, num) in default_gai_errnos]
-
-    def filter_error(err):
-        n = getattr(err, 'errno', None)
-        if (isinstance(err, socket.timeout) or
-            (isinstance(err, socket.gaierror) and n in gai_errnos) or
-            (isinstance(err, urllib.error.HTTPError) and
-             500 <= err.code <= 599) or
-            (isinstance(err, urllib.error.URLError) and
-                 (("ConnectionRefusedError" in err.reason) or
-                  ("TimeoutError" in err.reason) or
-                  ("EOFError" in err.reason))) or
-            n in captured_errnos):
-            if not verbose:
-                sys.stderr.write(denied.args[0] + "\n")
-            raise denied from err
-
-    old_timeout = socket.getdefaulttimeout()
-    try:
-        if timeout is not None:
-            socket.setdefaulttimeout(timeout)
-        yield
-    except nntplib.NNTPTemporaryError as err:
-        if verbose:
-            sys.stderr.write(denied.args[0] + "\n")
-        raise denied from err
-    except OSError as err:
-        # urllib can wrap original socket errors multiple times (!), we must
-        # unwrap to get at the original error.
-        while True:
-            a = err.args
-            if len(a) >= 1 and isinstance(a[0], OSError):
-                err = a[0]
-            # The error can also be wrapped as args[1]:
-            #    except socket.error as msg:
-            #        raise OSError('socket error', msg).with_traceback(sys.exc_info()[2])
-            elif len(a) >= 2 and isinstance(a[1], OSError):
-                err = a[1]
-            else:
-                break
-        filter_error(err)
-        raise
-    # XXX should we catch generic exceptions and look for their
-    # __cause__ or __context__?
-    finally:
-        socket.setdefaulttimeout(old_timeout)
-
-
 @contextlib.contextmanager
 def captured_output(stream_name):
     """Return a context manager used by captured_stdout/stdin/stderr
@@ -1670,6 +1434,7 @@
     longer than expected.  This function tries its best to force all garbage
     objects to disappear.
     """
+    import gc
     gc.collect()
     if is_jython:
         time.sleep(0.1)
@@ -1678,6 +1443,7 @@
 
 @contextlib.contextmanager
 def disable_gc():
+    import gc
     have_gc = gc.isenabled()
     gc.disable()
     try:
@@ -1715,12 +1481,12 @@
 _TPFLAGS_HEAPTYPE = 1<<9
 
 def check_sizeof(test, o, size):
-    import _testcapi
+    import _testinternalcapi
     result = sys.getsizeof(o)
     # add GC header size
     if ((type(o) == type) and (o.__flags__ & _TPFLAGS_HEAPTYPE) or\
         ((type(o) != type) and (type(o).__flags__ & _TPFLAGS_HAVE_GC))):
-        size += _testcapi.SIZEOF_PYGC_HEAD
+        size += _testinternalcapi.SIZEOF_PYGC_HEAD
     msg = 'wrong size for %s: got %d, expected %d' \
             % (type(o), result, size)
     test.assertEqual(result, size, msg)
@@ -2292,7 +2058,7 @@
 
 
 @contextlib.contextmanager
-def wait_threads_exit(timeout=60.0):
+def wait_threads_exit(timeout=None):
     """
     bpo-31234: Context manager to wait until all threads created in the with
     statement exit.
@@ -2306,6 +2072,8 @@
     which doesn't allow to wait for thread exit, whereas thread.Thread has a
     join() method.
     """
+    if timeout is None:
+        timeout = SHORT_TIMEOUT
     old_count = _thread._count()
     try:
         yield
@@ -2326,10 +2094,12 @@
             gc_collect()
 
 
-def join_thread(thread, timeout=30.0):
+def join_thread(thread, timeout=None):
     """Join a thread. Raise an AssertionError if the thread is still alive
     after timeout seconds.
     """
+    if timeout is None:
+        timeout = SHORT_TIMEOUT
     thread.join(timeout)
     if thread.is_alive():
         msg = f"failed to join the thread in {timeout:.1f} seconds"
@@ -2366,6 +2136,7 @@
 
 @contextlib.contextmanager
 def start_threads(threads, unlock=None):
+    import faulthandler
     threads = list(threads)
     started = []
     try:
@@ -2462,19 +2233,6 @@
             if item in obj:
                 del obj[item]
 
-def strip_python_stderr(stderr):
-    """Strip the stderr of a Python process from potential debug output
-    emitted by the interpreter.
-
-    This will typically be run on the result of the communicate() method
-    of a subprocess.Popen object.
-    """
-    stderr = re.sub(br"\[\d+ refs, \d+ blocks\]\r?\n?", b"", stderr).strip()
-    return stderr
-
-requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'),
-                        'types are immortal if COUNT_ALLOCS is defined')
-
 def args_from_interpreter_flags():
     """Return a list of command-line arguments reproducing the current
     settings in sys.flags and sys.warnoptions."""
@@ -2485,37 +2243,6 @@
     optimization settings in sys.flags."""
     return subprocess._optim_args_from_interpreter_flags()
 
-#============================================================
-# Support for assertions about logging.
-#============================================================
-
-class TestHandler(logging.handlers.BufferingHandler):
-    def __init__(self, matcher):
-        # BufferingHandler takes a "capacity" argument
-        # so as to know when to flush. As we're overriding
-        # shouldFlush anyway, we can set a capacity of zero.
-        # You can call flush() manually to clear out the
-        # buffer.
-        logging.handlers.BufferingHandler.__init__(self, 0)
-        self.matcher = matcher
-
-    def shouldFlush(self):
-        return False
-
-    def emit(self, record):
-        self.format(record)
-        self.buffer.append(record.__dict__)
-
-    def matches(self, **kwargs):
-        """
-        Look for a saved dict whose keys/values match the supplied arguments.
-        """
-        result = False
-        for d in self.buffer:
-            if self.matcher.matches(d, **kwargs):
-                result = True
-                break
-        return result
 
 class Matcher(object):
 
@@ -2584,6 +2311,7 @@
     See bpo-37552 [Windows] strptime/strftime return invalid
     results with UCRT version 17763.615
     """
+    import locale
     global _buggy_ucrt
     if _buggy_ucrt is None:
         if(sys.platform == 'win32' and
@@ -2674,6 +2402,7 @@
 
 _can_xattr = None
 def can_xattr():
+    import tempfile
     global _can_xattr
     if _can_xattr is not None:
         return _can_xattr
@@ -2715,31 +2444,10 @@
     msg = "Not run for (non-extended) PGO task"
     return test if ok else unittest.skip(msg)(test)
 
-_bind_nix_socket_error = None
-def skip_unless_bind_unix_socket(test):
-    """Decorator for tests requiring a functional bind() for unix sockets."""
-    if not hasattr(socket, 'AF_UNIX'):
-        return unittest.skip('No UNIX Sockets')(test)
-    global _bind_nix_socket_error
-    if _bind_nix_socket_error is None:
-        path = TESTFN + "can_bind_unix_socket"
-        with socket.socket(socket.AF_UNIX) as sock:
-            try:
-                sock.bind(path)
-                _bind_nix_socket_error = False
-            except OSError as e:
-                _bind_nix_socket_error = e
-            finally:
-                unlink(path)
-    if _bind_nix_socket_error:
-        msg = 'Requires a functional unix bind(): %s' % _bind_nix_socket_error
-        return unittest.skip(msg)(test)
-    else:
-        return test
-
 
 def fs_is_case_insensitive(directory):
     """Detects if the file system for the specified directory is case-insensitive."""
+    import tempfile
     with tempfile.NamedTemporaryFile(dir=directory) as base:
         base_path = base.name
         case_path = base_path.upper()
@@ -2889,11 +2597,16 @@
                     self.old_modes[report_type] = old_mode, old_file
 
         else:
-            if resource is not None:
+            try:
+                import resource
+                self.resource = resource
+            except ImportError:
+                self.resource = None
+            if self.resource is not None:
                 try:
-                    self.old_value = resource.getrlimit(resource.RLIMIT_CORE)
-                    resource.setrlimit(resource.RLIMIT_CORE,
-                                       (0, self.old_value[1]))
+                    self.old_value = self.resource.getrlimit(self.resource.RLIMIT_CORE)
+                    self.resource.setrlimit(self.resource.RLIMIT_CORE,
+                                            (0, self.old_value[1]))
                 except (ValueError, OSError):
                     pass
 
@@ -2931,9 +2644,9 @@
                     msvcrt.CrtSetReportMode(report_type, old_mode)
                     msvcrt.CrtSetReportFile(report_type, old_file)
         else:
-            if resource is not None:
+            if self.resource is not None:
                 try:
-                    resource.setrlimit(resource.RLIMIT_CORE, self.old_value)
+                    self.resource.setrlimit(self.resource.RLIMIT_CORE, self.old_value)
                 except (ValueError, OSError):
                     pass
 
@@ -3020,9 +2733,15 @@
     missing.
 
     """
-    from distutils import ccompiler, sysconfig, spawn
+    from distutils import ccompiler, sysconfig, spawn, errors
     compiler = ccompiler.new_compiler()
     sysconfig.customize_compiler(compiler)
+    if compiler.compiler_type == "msvc":
+        # MSVC has no executables, so check whether initialization succeeds
+        try:
+            compiler.initialize()
+        except errors.DistutilsPlatformError:
+            return "msvc"
     for name in compiler.executables:
         if cmd_names and name not in cmd_names:
             continue
@@ -3053,6 +2772,8 @@
 
 @contextlib.contextmanager
 def disable_faulthandler():
+    import faulthandler
+
     # use sys.__stderr__ instead of sys.stderr, since regrtest replaces
     # sys.stderr with a StringIO which has no file descriptor when a test
     # is run with -W/--verbose3.
@@ -3199,6 +2920,19 @@
 
 ALWAYS_EQ = _ALWAYS_EQ()
 
+class _NEVER_EQ:
+    """
+    Object that is not equal to anything.
+    """
+    def __eq__(self, other):
+        return False
+    def __ne__(self, other):
+        return True
+    def __hash__(self):
+        return 1
+
+NEVER_EQ = _NEVER_EQ()
+
 @functools.total_ordering
 class _LARGEST:
     """
@@ -3225,6 +2959,7 @@
 
 def maybe_get_event_loop_policy():
     """Return the global event loop policy if one is set, else return None."""
+    import asyncio.events
     return asyncio.events._event_loop_policy
 
 # Helpers for testing hashing.
@@ -3370,6 +3105,69 @@
         del self.thread
 
 
+def wait_process(pid, *, exitcode, timeout=None):
+    """
+    Wait until process pid completes and check that the process exit code is
+    exitcode.
+
+    Raise an AssertionError if the process exit code is not equal to exitcode.
+
+    If the process runs longer than timeout seconds (SHORT_TIMEOUT by default),
+    kill the process (if signal.SIGKILL is available) and raise an
+    AssertionError. The timeout feature is not available on Windows.
+    """
+    if os.name != "nt":
+        import signal
+
+        if timeout is None:
+            timeout = SHORT_TIMEOUT
+        t0 = time.monotonic()
+        sleep = 0.001
+        max_sleep = 0.1
+        while True:
+            pid2, status = os.waitpid(pid, os.WNOHANG)
+            if pid2 != 0:
+                break
+            # process is still running
+
+            dt = time.monotonic() - t0
+            if dt > SHORT_TIMEOUT:
+                try:
+                    os.kill(pid, signal.SIGKILL)
+                    os.waitpid(pid, 0)
+                except OSError:
+                    # Ignore errors like ChildProcessError or PermissionError
+                    pass
+
+                raise AssertionError(f"process {pid} is still running "
+                                     f"after {dt:.1f} seconds")
+
+            sleep = min(sleep * 2, max_sleep)
+            time.sleep(sleep)
+    else:
+        # Windows implementation
+        pid2, status = os.waitpid(pid, 0)
+
+    exitcode2 = os.waitstatus_to_exitcode(status)
+    if exitcode2 != exitcode:
+        raise AssertionError(f"process {pid} exited with code {exitcode2}, "
+                             f"but exit code {exitcode} is expected")
+
+    # sanity check: it should not fail in practice
+    if pid2 != pid:
+        raise AssertionError(f"pid {pid2} != pid {pid}")
+
+
+def use_old_parser():
+    import _testinternalcapi
+    config = _testinternalcapi.get_configs()
+    return (config['config']['_use_peg_parser'] == 0)
+
+
+def skip_if_new_parser(msg):
+    return unittest.skipIf(not use_old_parser(), msg)
+
+
 @contextlib.contextmanager
 def save_restore_warnings_filters():
     old_filters = warnings.filters[:]
diff --git a/Lib/test/bytecode_helper.py b/Lib/test/support/bytecode_helper.py
similarity index 91%
rename from Lib/test/bytecode_helper.py
rename to Lib/test/support/bytecode_helper.py
index 347d603..348e277 100644
--- a/Lib/test/bytecode_helper.py
+++ b/Lib/test/support/bytecode_helper.py
@@ -15,7 +15,7 @@
         return s.getvalue()
 
     def assertInBytecode(self, x, opname, argval=_UNSPECIFIED):
-        """Returns instr if op is found, otherwise throws AssertionError"""
+        """Returns instr if opname is found, otherwise throws AssertionError"""
         for instr in dis.get_instructions(x):
             if instr.opname == opname:
                 if argval is _UNSPECIFIED or instr.argval == argval:
@@ -29,7 +29,7 @@
         self.fail(msg)
 
     def assertNotInBytecode(self, x, opname, argval=_UNSPECIFIED):
-        """Throws AssertionError if op is found"""
+        """Throws AssertionError if opname is found"""
         for instr in dis.get_instructions(x):
             if instr.opname == opname:
                 disassembly = self.get_disassembly_as_string(x)
diff --git a/Lib/test/support/hashlib_helper.py b/Lib/test/support/hashlib_helper.py
new file mode 100644
index 0000000..a28132a
--- /dev/null
+++ b/Lib/test/support/hashlib_helper.py
@@ -0,0 +1,38 @@
+import functools
+import hashlib
+import unittest
+
+try:
+    import _hashlib
+except ImportError:
+    _hashlib = None
+
+
+def requires_hashdigest(digestname, openssl=None, usedforsecurity=True):
+    """Decorator raising SkipTest if a hashing algorithm is not available
+
+    The hashing algorithm could be missing or blocked by a strict crypto
+    policy.
+
+    If 'openssl' is True, then the decorator checks that OpenSSL provides
+    the algorithm. Otherwise the check falls back to built-in
+    implementations. The usedforsecurity flag is passed to the constructor.
+
+    ValueError: [digital envelope routines: EVP_DigestInit_ex] disabled for FIPS
+    ValueError: unsupported hash type md4
+    """
+    def decorator(func):
+        @functools.wraps(func)
+        def wrapper(*args, **kwargs):
+            try:
+                if openssl and _hashlib is not None:
+                    _hashlib.new(digestname, usedforsecurity=usedforsecurity)
+                else:
+                    hashlib.new(digestname, usedforsecurity=usedforsecurity)
+            except ValueError:
+                raise unittest.SkipTest(
+                    f"hash digest '{digestname}' is not available."
+                )
+            return func(*args, **kwargs)
+        return wrapper
+    return decorator
diff --git a/Lib/test/support/logging_helper.py b/Lib/test/support/logging_helper.py
new file mode 100644
index 0000000..12fcca4
--- /dev/null
+++ b/Lib/test/support/logging_helper.py
@@ -0,0 +1,29 @@
+import logging.handlers
+
+class TestHandler(logging.handlers.BufferingHandler):
+    def __init__(self, matcher):
+        # BufferingHandler takes a "capacity" argument
+        # so as to know when to flush. As we're overriding
+        # shouldFlush anyway, we can set a capacity of zero.
+        # You can call flush() manually to clear out the
+        # buffer.
+        logging.handlers.BufferingHandler.__init__(self, 0)
+        self.matcher = matcher
+
+    def shouldFlush(self):
+        return False
+
+    def emit(self, record):
+        self.format(record)
+        self.buffer.append(record.__dict__)
+
+    def matches(self, **kwargs):
+        """
+        Look for a saved dict whose keys/values match the supplied arguments.
+        """
+        result = False
+        for d in self.buffer:
+            if self.matcher.matches(d, **kwargs):
+                result = True
+                break
+        return result
diff --git a/Lib/test/support/script_helper.py b/Lib/test/support/script_helper.py
index 8351998..37e576d 100644
--- a/Lib/test/support/script_helper.py
+++ b/Lib/test/support/script_helper.py
@@ -11,7 +11,7 @@
 import zipfile
 
 from importlib.util import source_from_cache
-from test.support import make_legacy_pyc, strip_python_stderr
+from test.support import make_legacy_pyc
 
 
 # Cached result of the expensive test performed in the function below.
@@ -134,7 +134,6 @@
             proc.kill()
             subprocess._cleanup()
     rc = proc.returncode
-    err = strip_python_stderr(err)
     return _PythonRunResult(rc, out, err), cmd_line
 
 def _assert_python(expected_success, /, *args, **env_vars):
diff --git a/Lib/test/support/socket_helper.py b/Lib/test/support/socket_helper.py
new file mode 100644
index 0000000..f709ffd
--- /dev/null
+++ b/Lib/test/support/socket_helper.py
@@ -0,0 +1,269 @@
+import contextlib
+import errno
+import socket
+import unittest
+import sys
+
+from .. import support
+
+
+HOST = "localhost"
+HOSTv4 = "127.0.0.1"
+HOSTv6 = "::1"
+
+
+def find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM):
+    """Returns an unused port that should be suitable for binding.  This is
+    achieved by creating a temporary socket with the same family and type as
+    the 'sock' parameter (default is AF_INET, SOCK_STREAM), and binding it to
+    the specified host address (defaults to 0.0.0.0) with the port set to 0,
+    eliciting an unused ephemeral port from the OS.  The temporary socket is
+    then closed and deleted, and the ephemeral port is returned.
+
+    Either this method or bind_port() should be used for any tests where a
+    server socket needs to be bound to a particular port for the duration of
+    the test.  Which one to use depends on whether the calling code is creating
+    a python socket, or if an unused port needs to be provided in a constructor
+    or passed to an external program (i.e. the -accept argument to openssl's
+    s_server mode).  Always prefer bind_port() over find_unused_port() where
+    possible.  Hard coded ports should *NEVER* be used.  As soon as a server
+    socket is bound to a hard coded port, the ability to run multiple instances
+    of the test simultaneously on the same host is compromised, which makes the
+    test a ticking time bomb in a buildbot environment. On Unix buildbots, this
+    may simply manifest as a failed test, which can be recovered from without
+    intervention in most cases, but on Windows, the entire python process can
+    completely and utterly wedge, requiring someone to log in to the buildbot
+    and manually kill the affected process.
+
+    (This is easy to reproduce on Windows, unfortunately, and can be traced to
+    the SO_REUSEADDR socket option having different semantics on Windows versus
+    Unix/Linux.  On Unix, you can't have two AF_INET SOCK_STREAM sockets bind,
+    listen and then accept connections on identical host/ports.  An EADDRINUSE
+    OSError will be raised at some point (depending on the platform and
+    the order bind and listen were called on each socket).
+
+    However, on Windows, if SO_REUSEADDR is set on the sockets, no EADDRINUSE
+    will ever be raised when attempting to bind two identical host/ports. When
+    accept() is called on each socket, the second caller's process will steal
+    the port from the first caller, leaving them both in an awkwardly wedged
+    state where they'll no longer respond to any signals or graceful kills, and
+    must be forcibly killed via OpenProcess()/TerminateProcess().
+
+    The solution on Windows is to use the SO_EXCLUSIVEADDRUSE socket option
+    instead of SO_REUSEADDR, which effectively affords the same semantics as
+    SO_REUSEADDR on Unix.  Given the propensity of Unix developers in the Open
+    Source world compared to Windows ones, this is a common mistake.  A quick
+    look over OpenSSL's 0.9.8g source shows that they use SO_REUSEADDR when
+    openssl.exe is called with the 's_server' option, for example. See
+    http://bugs.python.org/issue2550 for more info.  The following site also
+    has a very thorough description about the implications of both REUSEADDR
+    and EXCLUSIVEADDRUSE on Windows:
+    http://msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx)
+
+    XXX: although this approach is a vast improvement on previous attempts to
+    elicit unused ports, it rests heavily on the assumption that the ephemeral
+    port returned to us by the OS won't immediately be dished back out to some
+    other process when we close and delete our temporary socket but before our
+    calling code has a chance to bind the returned port.  We can deal with this
+    issue if/when we come across it.
+    """
+
+    with socket.socket(family, socktype) as tempsock:
+        port = bind_port(tempsock)
+    del tempsock
+    return port
+
+def bind_port(sock, host=HOST):
+    """Bind the socket to a free port and return the port number.  Relies on
+    ephemeral ports in order to ensure we are using an unbound port.  This is
+    important as many tests may be running simultaneously, especially in a
+    buildbot environment.  This method raises an exception if the sock.family
+    is AF_INET and sock.type is SOCK_STREAM, *and* the socket has SO_REUSEADDR
+    or SO_REUSEPORT set on it.  Tests should *never* set these socket options
+    for TCP/IP sockets.  The only case for setting these options is testing
+    multicasting via multiple UDP sockets.
+
+    Additionally, if the SO_EXCLUSIVEADDRUSE socket option is available (i.e.
+    on Windows), it will be set on the socket.  This will prevent anyone else
+    from bind()'ing to our host/port for the duration of the test.
+    """
+
+    if sock.family == socket.AF_INET and sock.type == socket.SOCK_STREAM:
+        if hasattr(socket, 'SO_REUSEADDR'):
+            if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1:
+                raise support.TestFailed("tests should never set the "
+                                         "SO_REUSEADDR socket option on "
+                                         "TCP/IP sockets!")
+        if hasattr(socket, 'SO_REUSEPORT'):
+            try:
+                if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
+                    raise support.TestFailed("tests should never set the "
+                                             "SO_REUSEPORT socket option on "
+                                             "TCP/IP sockets!")
+            except OSError:
+                # Python's socket module was compiled using modern headers
+                # thus defining SO_REUSEPORT but this process is running
+                # under an older kernel that does not support SO_REUSEPORT.
+                pass
+        if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'):
+            sock.setsockopt(socket.SOL_SOCKET, socket.SO_EXCLUSIVEADDRUSE, 1)
+
+    sock.bind((host, 0))
+    port = sock.getsockname()[1]
+    return port
+
+def bind_unix_socket(sock, addr):
+    """Bind a unix socket, raising SkipTest if PermissionError is raised."""
+    assert sock.family == socket.AF_UNIX
+    try:
+        sock.bind(addr)
+    except PermissionError:
+        sock.close()
+        raise unittest.SkipTest('cannot bind AF_UNIX sockets')
+
+def _is_ipv6_enabled():
+    """Check whether IPv6 is enabled on this host."""
+    if socket.has_ipv6:
+        sock = None
+        try:
+            sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+            sock.bind((HOSTv6, 0))
+            return True
+        except OSError:
+            pass
+        finally:
+            if sock:
+                sock.close()
+    return False
+
+IPV6_ENABLED = _is_ipv6_enabled()
+
+
+_bind_nix_socket_error = None
+def skip_unless_bind_unix_socket(test):
+    """Decorator for tests requiring a functional bind() for unix sockets."""
+    if not hasattr(socket, 'AF_UNIX'):
+        return unittest.skip('No UNIX Sockets')(test)
+    global _bind_nix_socket_error
+    if _bind_nix_socket_error is None:
+        from test.support import TESTFN, unlink
+        path = TESTFN + "can_bind_unix_socket"
+        with socket.socket(socket.AF_UNIX) as sock:
+            try:
+                sock.bind(path)
+                _bind_nix_socket_error = False
+            except OSError as e:
+                _bind_nix_socket_error = e
+            finally:
+                unlink(path)
+    if _bind_nix_socket_error:
+        msg = 'Requires a functional unix bind(): %s' % _bind_nix_socket_error
+        return unittest.skip(msg)(test)
+    else:
+        return test
+
+
+def get_socket_conn_refused_errs():
+    """
+    Get the different socket error numbers ('errno') which can be received
+    when a connection is refused.
+    """
+    errors = [errno.ECONNREFUSED]
+    if hasattr(errno, 'ENETUNREACH'):
+        # On Solaris, ENETUNREACH is returned sometimes instead of ECONNREFUSED
+        errors.append(errno.ENETUNREACH)
+    if hasattr(errno, 'EADDRNOTAVAIL'):
+        # bpo-31910: socket.create_connection() fails randomly
+        # with EADDRNOTAVAIL on Travis CI
+        errors.append(errno.EADDRNOTAVAIL)
+    if hasattr(errno, 'EHOSTUNREACH'):
+        # bpo-37583: The destination host cannot be reached
+        errors.append(errno.EHOSTUNREACH)
+    if not IPV6_ENABLED:
+        errors.append(errno.EAFNOSUPPORT)
+    return errors
+
+
+_NOT_SET = object()
+
+@contextlib.contextmanager
+def transient_internet(resource_name, *, timeout=_NOT_SET, errnos=()):
+    """Return a context manager that raises ResourceDenied when various issues
+    with the Internet connection manifest themselves as exceptions."""
+    import nntplib
+    import urllib.error
+    if timeout is _NOT_SET:
+        timeout = support.INTERNET_TIMEOUT
+
+    default_errnos = [
+        ('ECONNREFUSED', 111),
+        ('ECONNRESET', 104),
+        ('EHOSTUNREACH', 113),
+        ('ENETUNREACH', 101),
+        ('ETIMEDOUT', 110),
+        # socket.create_connection() fails randomly with
+        # EADDRNOTAVAIL on Travis CI.
+        ('EADDRNOTAVAIL', 99),
+    ]
+    default_gai_errnos = [
+        ('EAI_AGAIN', -3),
+        ('EAI_FAIL', -4),
+        ('EAI_NONAME', -2),
+        ('EAI_NODATA', -5),
+        # Encountered when trying to resolve IPv6-only hostnames
+        ('WSANO_DATA', 11004),
+    ]
+
+    denied = support.ResourceDenied("Resource %r is not available" % resource_name)
+    captured_errnos = errnos
+    gai_errnos = []
+    if not captured_errnos:
+        captured_errnos = [getattr(errno, name, num)
+                           for (name, num) in default_errnos]
+        gai_errnos = [getattr(socket, name, num)
+                      for (name, num) in default_gai_errnos]
+
+    def filter_error(err):
+        n = getattr(err, 'errno', None)
+        if (isinstance(err, socket.timeout) or
+            (isinstance(err, socket.gaierror) and n in gai_errnos) or
+            (isinstance(err, urllib.error.HTTPError) and
+             500 <= err.code <= 599) or
+            (isinstance(err, urllib.error.URLError) and
+                 (("ConnectionRefusedError" in err.reason) or
+                  ("TimeoutError" in err.reason) or
+                  ("EOFError" in err.reason))) or
+            n in captured_errnos):
+            if not support.verbose:
+                sys.stderr.write(denied.args[0] + "\n")
+            raise denied from err
+
+    old_timeout = socket.getdefaulttimeout()
+    try:
+        if timeout is not None:
+            socket.setdefaulttimeout(timeout)
+        yield
+    except nntplib.NNTPTemporaryError as err:
+        if support.verbose:
+            sys.stderr.write(denied.args[0] + "\n")
+        raise denied from err
+    except OSError as err:
+        # urllib can wrap original socket errors multiple times (!), we must
+        # unwrap to get at the original error.
+        while True:
+            a = err.args
+            if len(a) >= 1 and isinstance(a[0], OSError):
+                err = a[0]
+            # The error can also be wrapped as args[1]:
+            #    except socket.error as msg:
+            #        raise OSError('socket error', msg).with_traceback(sys.exc_info()[2])
+            elif len(a) >= 2 and isinstance(a[1], OSError):
+                err = a[1]
+            else:
+                break
+        filter_error(err)
+        raise
+    # XXX should we catch generic exceptions and look for their
+    # __cause__ or __context__?
+    finally:
+        socket.setdefaulttimeout(old_timeout)
diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py
index c077881..0ba243e 100644
--- a/Lib/test/test___all__.py
+++ b/Lib/test/test___all__.py
@@ -17,6 +17,7 @@
         names = {}
         with support.check_warnings(
             (".* (module|package)", DeprecationWarning),
+            (".* (module|package)", PendingDeprecationWarning),
             ("", ResourceWarning),
             quiet=True):
             try:
diff --git a/Lib/test/test__locale.py b/Lib/test/test__locale.py
index ab4e247..59a00ba 100644
--- a/Lib/test/test__locale.py
+++ b/Lib/test/test__locale.py
@@ -30,7 +30,7 @@
     global candidate_locales
     # Issue #13441: Skip some locales (e.g. cs_CZ and hu_HU) on Solaris to
     # workaround a mbstowcs() bug. For example, on Solaris, the hu_HU locale uses
-    # the locale encoding ISO-8859-2, the thousauds separator is b'\xA0' and it is
+    # the locale encoding ISO-8859-2, the thousands separator is b'\xA0' and it is
     # decoded as U+30000020 (an invalid character) by mbstowcs().
     if sys.platform == 'sunos5':
         old_locale = locale.setlocale(locale.LC_ALL)
@@ -72,6 +72,10 @@
     'ps_AF': ('\u066b', '\u066c'),
 }
 
+if sys.platform == 'win32':
+    # ps_AF doesn't work on Windows: see bpo-38324 (msg361830)
+    del known_numerics['ps_AF']
+
 class _LocaleTests(unittest.TestCase):
 
     def setUp(self):
diff --git a/Lib/test/test__xxsubinterpreters.py b/Lib/test/test__xxsubinterpreters.py
index f14868a..7aec021 100644
--- a/Lib/test/test__xxsubinterpreters.py
+++ b/Lib/test/test__xxsubinterpreters.py
@@ -19,12 +19,6 @@
 ##################################
 # helpers
 
-def powerset(*sets):
-    return itertools.chain.from_iterable(
-        combinations(sets, r)
-        for r in range(len(sets)+1))
-
-
 def _captured_script(script):
     r, w = os.pipe()
     indented = script.replace('\n', '\n                ')
@@ -90,14 +84,6 @@
         interpreters.run_string(id, source, shared)
 
 
-def run_interp_threaded(id, source, **shared):
-    def run():
-        _run(id, source, shared)
-    t = threading.Thread(target=run)
-    t.start()
-    t.join()
-
-
 class Interpreter(namedtuple('Interpreter', 'name id')):
 
     @classmethod
@@ -789,12 +775,6 @@
             self._fs.close()
         super().tearDown()
 
-    @property
-    def fs(self):
-        if self._fs is None:
-            self._fs = FSFixture(self)
-        return self._fs
-
     def test_success(self):
         script, file = _captured_script('print("it worked!", end="")')
         with file:
@@ -817,6 +797,7 @@
         self.assertEqual(out, 'it worked!')
 
     def test_create_thread(self):
+        subinterp = interpreters.create(isolated=False)
         script, file = _captured_script("""
             import threading
             def f():
@@ -827,7 +808,7 @@
             t.join()
             """)
         with file:
-            interpreters.run_string(self.id, script)
+            interpreters.run_string(subinterp, script)
             out = file.read()
 
         self.assertEqual(out, 'it worked!')
@@ -1210,6 +1191,185 @@
 
         self.assertEqual(cid2, int(cid1) + 1)
 
+    def test_channel_list_interpreters_none(self):
+        """Test listing interpreters for a channel with no associations."""
+        # Test for channel with no associated interpreters.
+        cid = interpreters.channel_create()
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(send_interps, [])
+        self.assertEqual(recv_interps, [])
+
+    def test_channel_list_interpreters_basic(self):
+        """Test basic listing channel interpreters."""
+        interp0 = interpreters.get_main()
+        cid = interpreters.channel_create()
+        interpreters.channel_send(cid, "send")
+        # Test for a channel that has one end associated to an interpreter.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(send_interps, [interp0])
+        self.assertEqual(recv_interps, [])
+
+        interp1 = interpreters.create()
+        _run_output(interp1, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            obj = _interpreters.channel_recv({cid})
+            """))
+        # Test for channel that has boths ends associated to an interpreter.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(send_interps, [interp0])
+        self.assertEqual(recv_interps, [interp1])
+
+    def test_channel_list_interpreters_multiple(self):
+        """Test listing interpreters for a channel with many associations."""
+        interp0 = interpreters.get_main()
+        interp1 = interpreters.create()
+        interp2 = interpreters.create()
+        interp3 = interpreters.create()
+        cid = interpreters.channel_create()
+
+        interpreters.channel_send(cid, "send")
+        _run_output(interp1, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            _interpreters.channel_send({cid}, "send")
+            """))
+        _run_output(interp2, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            obj = _interpreters.channel_recv({cid})
+            """))
+        _run_output(interp3, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            obj = _interpreters.channel_recv({cid})
+            """))
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(set(send_interps), {interp0, interp1})
+        self.assertEqual(set(recv_interps), {interp2, interp3})
+
+    def test_channel_list_interpreters_destroyed(self):
+        """Test listing channel interpreters with a destroyed interpreter."""
+        interp0 = interpreters.get_main()
+        interp1 = interpreters.create()
+        cid = interpreters.channel_create()
+        interpreters.channel_send(cid, "send")
+        _run_output(interp1, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            obj = _interpreters.channel_recv({cid})
+            """))
+        # Should be one interpreter associated with each end.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(send_interps, [interp0])
+        self.assertEqual(recv_interps, [interp1])
+
+        interpreters.destroy(interp1)
+        # Destroyed interpreter should not be listed.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(send_interps, [interp0])
+        self.assertEqual(recv_interps, [])
+
+    def test_channel_list_interpreters_released(self):
+        """Test listing channel interpreters with a released channel."""
+        # Set up one channel with main interpreter on the send end and two
+        # subinterpreters on the receive end.
+        interp0 = interpreters.get_main()
+        interp1 = interpreters.create()
+        interp2 = interpreters.create()
+        cid = interpreters.channel_create()
+        interpreters.channel_send(cid, "data")
+        _run_output(interp1, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            obj = _interpreters.channel_recv({cid})
+            """))
+        interpreters.channel_send(cid, "data")
+        _run_output(interp2, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            obj = _interpreters.channel_recv({cid})
+            """))
+        # Check the setup.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(len(send_interps), 1)
+        self.assertEqual(len(recv_interps), 2)
+
+        # Release the main interpreter from the send end.
+        interpreters.channel_release(cid, send=True)
+        # Send end should have no associated interpreters.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(len(send_interps), 0)
+        self.assertEqual(len(recv_interps), 2)
+
+        # Release one of the subinterpreters from the receive end.
+        _run_output(interp2, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            _interpreters.channel_release({cid})
+            """))
+        # Receive end should have the released interpreter removed.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(len(send_interps), 0)
+        self.assertEqual(recv_interps, [interp1])
+
+    def test_channel_list_interpreters_closed(self):
+        """Test listing channel interpreters with a closed channel."""
+        interp0 = interpreters.get_main()
+        interp1 = interpreters.create()
+        cid = interpreters.channel_create()
+        # Put something in the channel so that it's not empty.
+        interpreters.channel_send(cid, "send")
+
+        # Check initial state.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(len(send_interps), 1)
+        self.assertEqual(len(recv_interps), 0)
+
+        # Force close the channel.
+        interpreters.channel_close(cid, force=True)
+        # Both ends should raise an error.
+        with self.assertRaises(interpreters.ChannelClosedError):
+            interpreters.channel_list_interpreters(cid, send=True)
+        with self.assertRaises(interpreters.ChannelClosedError):
+            interpreters.channel_list_interpreters(cid, send=False)
+
+    def test_channel_list_interpreters_closed_send_end(self):
+        """Test listing channel interpreters with a channel's send end closed."""
+        interp0 = interpreters.get_main()
+        interp1 = interpreters.create()
+        cid = interpreters.channel_create()
+        # Put something in the channel so that it's not empty.
+        interpreters.channel_send(cid, "send")
+
+        # Check initial state.
+        send_interps = interpreters.channel_list_interpreters(cid, send=True)
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(len(send_interps), 1)
+        self.assertEqual(len(recv_interps), 0)
+
+        # Close the send end of the channel.
+        interpreters.channel_close(cid, send=True)
+        # Send end should raise an error.
+        with self.assertRaises(interpreters.ChannelClosedError):
+            interpreters.channel_list_interpreters(cid, send=True)
+        # Receive end should not be closed (since channel is not empty).
+        recv_interps = interpreters.channel_list_interpreters(cid, send=False)
+        self.assertEqual(len(recv_interps), 0)
+
+        # Close the receive end of the channel from a subinterpreter.
+        _run_output(interp1, dedent(f"""
+            import _xxsubinterpreters as _interpreters
+            _interpreters.channel_close({cid}, force=True)
+            """))
+        # Both ends should raise an error.
+        with self.assertRaises(interpreters.ChannelClosedError):
+            interpreters.channel_list_interpreters(cid, send=True)
+        with self.assertRaises(interpreters.ChannelClosedError):
+            interpreters.channel_list_interpreters(cid, send=False)
+
     ####################
 
     def test_send_recv_main(self):
@@ -1305,6 +1465,27 @@
         with self.assertRaises(interpreters.ChannelEmptyError):
             interpreters.channel_recv(cid)
 
+    def test_recv_default(self):
+        default = object()
+        cid = interpreters.channel_create()
+        obj1 = interpreters.channel_recv(cid, default)
+        interpreters.channel_send(cid, None)
+        interpreters.channel_send(cid, 1)
+        interpreters.channel_send(cid, b'spam')
+        interpreters.channel_send(cid, b'eggs')
+        obj2 = interpreters.channel_recv(cid, default)
+        obj3 = interpreters.channel_recv(cid, default)
+        obj4 = interpreters.channel_recv(cid)
+        obj5 = interpreters.channel_recv(cid, default)
+        obj6 = interpreters.channel_recv(cid, default)
+
+        self.assertIs(obj1, default)
+        self.assertIs(obj2, None)
+        self.assertEqual(obj3, 1)
+        self.assertEqual(obj4, b'spam')
+        self.assertEqual(obj5, b'eggs')
+        self.assertIs(obj6, default)
+
     def test_run_string_arg_unresolved(self):
         cid = interpreters.channel_create()
         interp = interpreters.create()
@@ -1522,6 +1703,23 @@
         with self.assertRaises(interpreters.ChannelClosedError):
             interpreters.channel_recv(cid)
 
+    def test_channel_list_interpreters_invalid_channel(self):
+        cid = interpreters.channel_create()
+        # Test for invalid channel ID.
+        with self.assertRaises(interpreters.ChannelNotFoundError):
+            interpreters.channel_list_interpreters(1000, send=True)
+
+        interpreters.channel_close(cid)
+        # Test for a channel that has been closed.
+        with self.assertRaises(interpreters.ChannelClosedError):
+            interpreters.channel_list_interpreters(cid, send=True)
+
+    def test_channel_list_interpreters_invalid_args(self):
+        # Tests for invalid arguments passed to the API.
+        cid = interpreters.channel_create()
+        with self.assertRaises(TypeError):
+            interpreters.channel_list_interpreters(cid)
+
 
 class ChannelReleaseTests(TestBase):
 
diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py
index 9f5afb2..7e9c47b 100644
--- a/Lib/test/test_abc.py
+++ b/Lib/test/test_abc.py
@@ -149,6 +149,25 @@
             self.assertEqual(D.foo(), 4)
             self.assertEqual(D().foo(), 4)
 
+        def test_object_new_with_one_abstractmethod(self):
+            class C(metaclass=abc_ABCMeta):
+                @abc.abstractmethod
+                def method_one(self):
+                    pass
+            msg = r"class C with abstract method method_one"
+            self.assertRaisesRegex(TypeError, msg, C)
+
+        def test_object_new_with_many_abstractmethods(self):
+            class C(metaclass=abc_ABCMeta):
+                @abc.abstractmethod
+                def method_one(self):
+                    pass
+                @abc.abstractmethod
+                def method_two(self):
+                    pass
+            msg = r"class C with abstract methods method_one, method_two"
+            self.assertRaisesRegex(TypeError, msg, C)
+
         def test_abstractmethod_integration(self):
             for abstractthing in [abc.abstractmethod, abc.abstractproperty,
                                   abc.abstractclassmethod,
@@ -307,7 +326,7 @@
             token_old = abc_get_cache_token()
             A.register(B)
             token_new = abc_get_cache_token()
-            self.assertNotEqual(token_old, token_new)
+            self.assertGreater(token_new, token_old)
             self.assertTrue(isinstance(b, A))
             self.assertTrue(isinstance(b, (A,)))
 
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index c747584..5a95099 100644
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -143,13 +143,12 @@
         frames = byteswap(frames, 2)
 
 
-class AifcMiscTest(audiotests.AudioMiscTests, unittest.TestCase):
-    module = aifc
-
+class AifcMiscTest(unittest.TestCase):
     def test_skipunknown(self):
         #Issue 2245
         #This file contains chunk types aifc doesn't recognize.
-        self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif'))
+        f = aifc.open(findfile('Sine-1000Hz-300ms.aif'))
+        f.close()
 
     def test_close_opened_files_on_error(self):
         non_aifc_file = findfile('pluck-pcm8.wav', subdir='audiodata')
@@ -172,7 +171,8 @@
         f.setparams((1, 1, 1, 1, b'NONE', b''))
         f.close()
 
-        f = self.f = aifc.open(TESTFN, 'rb')
+        f = aifc.open(TESTFN, 'rb')
+        self.addCleanup(f.close)
         params = f.getparams()
         self.assertEqual(params.nchannels, f.getnchannels())
         self.assertEqual(params.sampwidth, f.getsampwidth())
@@ -208,7 +208,8 @@
         fout.setmark(2, 0, b'even')
         fout.writeframes(b'\x00')
         fout.close()
-        f = self.f = aifc.open(TESTFN, 'rb')
+        f = aifc.open(TESTFN, 'rb')
+        self.addCleanup(f.close)
         self.assertEqual(f.getmarkers(), [(1, 0, b'odd'), (2, 0, b'even')])
         self.assertEqual(f.getmark(1), (1, 0, b'odd'))
         self.assertEqual(f.getmark(2), (2, 0, b'even'))
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 0753a4b..22cae62 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -105,7 +105,8 @@
             code = sys.exc_info()[1].code
             stdout = sys.stdout.getvalue()
             stderr = sys.stderr.getvalue()
-            raise ArgumentParserError("SystemExit", stdout, stderr, code)
+            raise ArgumentParserError(
+                "SystemExit", stdout, stderr, code) from None
     finally:
         sys.stdout = old_stdout
         sys.stderr = old_stderr
@@ -686,6 +687,38 @@
         ('--apple', NS(apple=True)),
     ]
 
+class TestBooleanOptionalAction(ParserTestCase):
+    """Tests BooleanOptionalAction"""
+
+    argument_signatures = [Sig('--foo', action=argparse.BooleanOptionalAction)]
+    failures = ['--foo bar', '--foo=bar']
+    successes = [
+        ('', NS(foo=None)),
+        ('--foo', NS(foo=True)),
+        ('--no-foo', NS(foo=False)),
+        ('--foo --no-foo', NS(foo=False)),  # useful for aliases
+        ('--no-foo --foo', NS(foo=True)),
+    ]
+
+    def test_const(self):
+        # See bpo-40862
+        parser = argparse.ArgumentParser()
+        with self.assertRaises(TypeError) as cm:
+            parser.add_argument('--foo', const=True, action=argparse.BooleanOptionalAction)
+
+        self.assertIn("got an unexpected keyword argument 'const'", str(cm.exception))
+
+class TestBooleanOptionalActionRequired(ParserTestCase):
+    """Tests BooleanOptionalAction required"""
+
+    argument_signatures = [
+        Sig('--foo', required=True, action=argparse.BooleanOptionalAction)
+    ]
+    failures = ['']
+    successes = [
+        ('--foo', NS(foo=True)),
+        ('--no-foo', NS(foo=False)),
+    ]
 
 class TestOptionalsActionAppend(ParserTestCase):
     """Tests the append action for an Optional"""
@@ -2176,7 +2209,7 @@
 
     def test_subparser2_help(self):
         self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\
-            usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]]
+            usage: PROG bar 2 [-h] [-y {1,2,3}] [z ...]
 
             2 description
 
@@ -2710,10 +2743,10 @@
     ]
 
     usage_when_not_required = '''\
-        usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]]
+        usage: PROG [-h] [--foo | --spam SPAM | badger ...]
         '''
     usage_when_required = '''\
-        usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...])
+        usage: PROG [-h] (--foo | --spam SPAM | badger ...)
         '''
     help = '''\
 
@@ -3493,6 +3526,10 @@
         Sig('a', help='a'),
         Sig('b', help='b', nargs=2),
         Sig('c', help='c', nargs='?'),
+        Sig('--foo', help='Whether to foo', action=argparse.BooleanOptionalAction),
+        Sig('--bar', help='Whether to bar', default=True,
+                     action=argparse.BooleanOptionalAction),
+        Sig('-f', '--foobar', '--barfoo', action=argparse.BooleanOptionalAction),
     ]
     argument_group_signatures = [
         (Sig('group'), [
@@ -3503,26 +3540,32 @@
         ])
     ]
     usage = '''\
-        usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z]
-                    a b b [c] [d [d ...]] e [e ...]
+        usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
+                    [--bar | --no-bar]
+                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo] [-y [Y]]
+                    [-z Z Z Z]
+                    a b b [c] [d ...] e [e ...]
         '''
     help = usage + '''\
 
         positional arguments:
-          a               a
-          b               b
-          c               c
+          a                     a
+          b                     b
+          c                     c
 
         optional arguments:
-          -h, --help      show this help message and exit
-          -w W [W ...]    w
-          -x [X [X ...]]  x
+          -h, --help            show this help message and exit
+          -w W [W ...]          w
+          -x [X ...]            x
+          --foo, --no-foo       Whether to foo
+          --bar, --no-bar       Whether to bar (default: True)
+          -f, --foobar, --no-foobar, --barfoo, --no-barfoo
 
         group:
-          -y [Y]          y
-          -z Z Z Z        z
-          d               d
-          e               e
+          -y [Y]                y
+          -z Z Z Z              z
+          d                     d
+          e                     e
         '''
     version = ''
 
@@ -4690,7 +4733,7 @@
 
     def test_namespace(self):
         ns = argparse.Namespace(foo=42, bar='spam')
-        string = "Namespace(bar='spam', foo=42)"
+        string = "Namespace(foo=42, bar='spam')"
         self.assertStringEqual(ns, string)
 
     def test_namespace_starkwargs_notidentifier(self):
@@ -5116,7 +5159,7 @@
         self.do_test_exception(nargs="*", metavar=tuple())
 
     def test_nargs_zeroormore_metavar_length1(self):
-        self.do_test_exception(nargs="*", metavar=("1",))
+        self.do_test_no_exception(nargs="*", metavar=("1",))
 
     def test_nargs_zeroormore_metavar_length2(self):
         self.do_test_no_exception(nargs="*", metavar=("1", "2"))
@@ -5299,6 +5342,21 @@
             '''))
 
 
+class TestExitOnError(TestCase):
+
+    def setUp(self):
+        self.parser = argparse.ArgumentParser(exit_on_error=False)
+        self.parser.add_argument('--integers', metavar='N', type=int)
+
+    def test_exit_on_error_with_good_args(self):
+        ns = self.parser.parse_args('--integers 4'.split())
+        self.assertEqual(ns, argparse.Namespace(integers=4))
+
+    def test_exit_on_error_with_bad_args(self):
+        with self.assertRaises(argparse.ArgumentError):
+            self.parser.parse_args('--integers a'.split())
+
+
 def test_main():
     support.run_unittest(__name__)
     # Remove global references to avoid looking like we have refleaks.
diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py
index c243957..f731b70 100644
--- a/Lib/test/test_array.py
+++ b/Lib/test/test_array.py
@@ -10,7 +10,6 @@
 import operator
 import struct
 import sys
-import warnings
 
 import array
 from array import _array_reconstructor as array_reconstructor
@@ -426,26 +425,6 @@
         b.fromlist(a.tolist())
         self.assertEqual(a, b)
 
-    def test_tofromstring(self):
-        # Warnings not raised when arguments are incorrect as Argument Clinic
-        # handles that before the warning can be raised.
-        nb_warnings = 2
-        with warnings.catch_warnings(record=True) as r:
-            warnings.filterwarnings("always",
-                                    message=r"(to|from)string\(\) is deprecated",
-                                    category=DeprecationWarning)
-            a = array.array(self.typecode, 2*self.example)
-            b = array.array(self.typecode)
-            self.assertRaises(TypeError, a.tostring, 42)
-            self.assertRaises(TypeError, b.fromstring)
-            self.assertRaises(TypeError, b.fromstring, 42)
-            b.fromstring(a.tostring())
-            self.assertEqual(a, b)
-            if a.itemsize>1:
-                self.assertRaises(ValueError, b.fromstring, "x")
-                nb_warnings += 1
-        self.assertEqual(len(r), nb_warnings)
-
     def test_tofrombytes(self):
         a = array.array(self.typecode, 2*self.example)
         b = array.array(self.typecode)
diff --git a/Lib/test/test_asdl_parser.py b/Lib/test/test_asdl_parser.py
index 9eaceec..2c14817 100644
--- a/Lib/test/test_asdl_parser.py
+++ b/Lib/test/test_asdl_parser.py
@@ -63,10 +63,10 @@
     def test_attributes(self):
         stmt = self.types['stmt']
         self.assertEqual(len(stmt.attributes), 4)
-        self.assertEqual(str(stmt.attributes[0]), 'Field(int, lineno)')
-        self.assertEqual(str(stmt.attributes[1]), 'Field(int, col_offset)')
-        self.assertEqual(str(stmt.attributes[2]), 'Field(int, end_lineno, opt=True)')
-        self.assertEqual(str(stmt.attributes[3]), 'Field(int, end_col_offset, opt=True)')
+        self.assertEqual(repr(stmt.attributes[0]), 'Field(int, lineno)')
+        self.assertEqual(repr(stmt.attributes[1]), 'Field(int, col_offset)')
+        self.assertEqual(repr(stmt.attributes[2]), 'Field(int, end_lineno, opt=True)')
+        self.assertEqual(repr(stmt.attributes[3]), 'Field(int, end_col_offset, opt=True)')
 
     def test_constructor_fields(self):
         ehandler = self.types['excepthandler']
@@ -118,7 +118,7 @@
         v = CustomVisitor()
         v.visit(self.types['mod'])
         self.assertEqual(v.names_with_seq,
-                         ['Module', 'Module', 'Interactive', 'FunctionType', 'Suite'])
+                         ['Module', 'Module', 'Interactive', 'FunctionType'])
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index b921f4a..5f57ce8 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -1,7 +1,9 @@
 import ast
+import builtins
 import dis
 import os
 import sys
+import types
 import unittest
 import warnings
 import weakref
@@ -17,6 +19,8 @@
     result = [t.__class__.__name__]
     if hasattr(t, 'lineno') and hasattr(t, 'col_offset'):
         result.append((t.lineno, t.col_offset))
+        if hasattr(t, 'end_lineno') and hasattr(t, 'end_col_offset'):
+            result[-1] += (t.end_lineno, t.end_col_offset)
     if t._fields is None:
         return tuple(result)
     for f in t._fields:
@@ -245,6 +249,13 @@
 
 class AST_Tests(unittest.TestCase):
 
+    def _is_ast_node(self, name, node):
+        if not isinstance(node, type):
+            return False
+        if "ast" not in node.__module__:
+            return False
+        return name != 'AST' and name[0].isupper()
+
     def _assertTrueorder(self, ast_node, parent_pos):
         if not isinstance(ast_node, ast.AST) or ast_node._fields is None:
             return
@@ -274,7 +285,7 @@
             x.vararg
 
         with self.assertRaises(TypeError):
-            # "_ast.AST constructor takes 0 positional arguments"
+            # "ast.AST constructor takes 0 positional arguments"
             ast.AST(2)
 
     def test_AST_garbage_collection(self):
@@ -333,7 +344,11 @@
 
     def test_field_attr_existence(self):
         for name, item in ast.__dict__.items():
-            if isinstance(item, type) and name != 'AST' and name[0].isupper():
+            if self._is_ast_node(name, item):
+                if name == 'Index':
+                    # Index(value) just returns value now.
+                    # The argument is required.
+                    continue
                 x = item()
                 if isinstance(x, ast.AST):
                     self.assertEqual(type(x._fields), tuple)
@@ -344,9 +359,11 @@
                                      'kw_defaults', 'kwarg', 'defaults'))
 
         with self.assertRaises(AttributeError):
-            x.vararg
+            x.args
+        self.assertIsNone(x.vararg)
 
         x = ast.arguments(*range(1, 8))
+        self.assertEqual(x.args, 2)
         self.assertEqual(x.vararg, 3)
 
     def test_field_attr_writable(self):
@@ -567,22 +584,31 @@
         m = ast.Module([ast.Expr(ast.expr(**pos), **pos)], [])
         with self.assertRaises(TypeError) as cm:
             compile(m, "<test>", "exec")
-        self.assertIn("but got <_ast.expr", str(cm.exception))
+        self.assertIn("but got <ast.expr", str(cm.exception))
 
-    def test_invalid_identitifer(self):
+    def test_invalid_identifier(self):
         m = ast.Module([ast.Expr(ast.Name(42, ast.Load()))], [])
         ast.fix_missing_locations(m)
         with self.assertRaises(TypeError) as cm:
             compile(m, "<test>", "exec")
         self.assertIn("identifier must be of type str", str(cm.exception))
 
+    def test_invalid_constant(self):
+        for invalid_constant in int, (1, 2, int), frozenset((1, 2, int)):
+            e = ast.Expression(body=ast.Constant(invalid_constant))
+            ast.fix_missing_locations(e)
+            with self.assertRaisesRegex(
+                TypeError, "invalid type in Constant: type"
+            ):
+                compile(e, "<test>", "eval")
+
     def test_empty_yield_from(self):
         # Issue 16546: yield from value is not optional.
         empty_yield_from = ast.parse("def f():\n yield from g()")
         empty_yield_from.body[0].body[0].value.value = None
         with self.assertRaises(ValueError) as cm:
             compile(empty_yield_from, "<test>", "exec")
-        self.assertIn("field value is required", str(cm.exception))
+        self.assertIn("field 'value' is required", str(cm.exception))
 
     @support.cpython_only
     def test_issue31592(self):
@@ -630,6 +656,15 @@
         attr_b = tree.body[0].decorator_list[0].value
         self.assertEqual(attr_b.end_col_offset, 4)
 
+    def test_ast_asdl_signature(self):
+        self.assertEqual(ast.withitem.__doc__, "withitem(expr context_expr, expr? optional_vars)")
+        self.assertEqual(ast.GtE.__doc__, "GtE")
+        self.assertEqual(ast.Name.__doc__, "Name(identifier id, expr_context ctx)")
+        self.assertEqual(ast.cmpop.__doc__, "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn")
+        expressions = [f"     | {node.__doc__}" for node in ast.expr.__subclasses__()]
+        expressions[0] = f"expr = {ast.expr.__subclasses__()[0].__doc__}"
+        self.assertCountEqual(ast.expr.__doc__.split("\n"), expressions)
+
     def test_issue40614_feature_version(self):
         ast.parse('f"{x=}"', feature_version=(3, 8))
         with self.assertRaises(SyntaxError):
@@ -663,23 +698,84 @@
         node = ast.parse('spam(eggs, "and cheese")')
         self.assertEqual(ast.dump(node),
             "Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load()), "
-            "args=[Name(id='eggs', ctx=Load()), Constant(value='and cheese', kind=None)], "
+            "args=[Name(id='eggs', ctx=Load()), Constant(value='and cheese')], "
             "keywords=[]))], type_ignores=[])"
         )
         self.assertEqual(ast.dump(node, annotate_fields=False),
             "Module([Expr(Call(Name('spam', Load()), [Name('eggs', Load()), "
-            "Constant('and cheese', None)], []))], [])"
+            "Constant('and cheese')], []))], [])"
         )
         self.assertEqual(ast.dump(node, include_attributes=True),
             "Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load(), "
             "lineno=1, col_offset=0, end_lineno=1, end_col_offset=4), "
             "args=[Name(id='eggs', ctx=Load(), lineno=1, col_offset=5, "
-            "end_lineno=1, end_col_offset=9), Constant(value='and cheese', kind=None, "
+            "end_lineno=1, end_col_offset=9), Constant(value='and cheese', "
             "lineno=1, col_offset=11, end_lineno=1, end_col_offset=23)], keywords=[], "
             "lineno=1, col_offset=0, end_lineno=1, end_col_offset=24), "
             "lineno=1, col_offset=0, end_lineno=1, end_col_offset=24)], type_ignores=[])"
         )
 
+    def test_dump_indent(self):
+        node = ast.parse('spam(eggs, "and cheese")')
+        self.assertEqual(ast.dump(node, indent=3), """\
+Module(
+   body=[
+      Expr(
+         value=Call(
+            func=Name(id='spam', ctx=Load()),
+            args=[
+               Name(id='eggs', ctx=Load()),
+               Constant(value='and cheese')],
+            keywords=[]))],
+   type_ignores=[])""")
+        self.assertEqual(ast.dump(node, annotate_fields=False, indent='\t'), """\
+Module(
+\t[
+\t\tExpr(
+\t\t\tCall(
+\t\t\t\tName('spam', Load()),
+\t\t\t\t[
+\t\t\t\t\tName('eggs', Load()),
+\t\t\t\t\tConstant('and cheese')],
+\t\t\t\t[]))],
+\t[])""")
+        self.assertEqual(ast.dump(node, include_attributes=True, indent=3), """\
+Module(
+   body=[
+      Expr(
+         value=Call(
+            func=Name(
+               id='spam',
+               ctx=Load(),
+               lineno=1,
+               col_offset=0,
+               end_lineno=1,
+               end_col_offset=4),
+            args=[
+               Name(
+                  id='eggs',
+                  ctx=Load(),
+                  lineno=1,
+                  col_offset=5,
+                  end_lineno=1,
+                  end_col_offset=9),
+               Constant(
+                  value='and cheese',
+                  lineno=1,
+                  col_offset=11,
+                  end_lineno=1,
+                  end_col_offset=23)],
+            keywords=[],
+            lineno=1,
+            col_offset=0,
+            end_lineno=1,
+            end_col_offset=24),
+         lineno=1,
+         col_offset=0,
+         end_lineno=1,
+         end_col_offset=24)],
+   type_ignores=[])""")
+
     def test_dump_incomplete(self):
         node = ast.Raise(lineno=3, col_offset=4)
         self.assertEqual(ast.dump(node),
@@ -713,11 +809,17 @@
         src = ast.parse('1 + 1', mode='eval')
         src.body.right = ast.copy_location(ast.Num(2), src.body.right)
         self.assertEqual(ast.dump(src, include_attributes=True),
-            'Expression(body=BinOp(left=Constant(value=1, kind=None, lineno=1, col_offset=0, '
+            'Expression(body=BinOp(left=Constant(value=1, lineno=1, col_offset=0, '
             'end_lineno=1, end_col_offset=1), op=Add(), right=Constant(value=2, '
             'lineno=1, col_offset=4, end_lineno=1, end_col_offset=5), lineno=1, '
             'col_offset=0, end_lineno=1, end_col_offset=5))'
         )
+        src = ast.Call(col_offset=1, lineno=1, end_lineno=1, end_col_offset=1)
+        new = ast.copy_location(src, ast.Call(col_offset=None, lineno=None))
+        self.assertIsNone(new.end_lineno)
+        self.assertIsNone(new.end_col_offset)
+        self.assertEqual(new.lineno, 1)
+        self.assertEqual(new.col_offset, 1)
 
     def test_fix_missing_locations(self):
         src = ast.parse('write("spam")')
@@ -728,7 +830,7 @@
         self.assertEqual(ast.dump(src, include_attributes=True),
             "Module(body=[Expr(value=Call(func=Name(id='write', ctx=Load(), "
             "lineno=1, col_offset=0, end_lineno=1, end_col_offset=5), "
-            "args=[Constant(value='spam', kind=None, lineno=1, col_offset=6, end_lineno=1, "
+            "args=[Constant(value='spam', lineno=1, col_offset=6, end_lineno=1, "
             "end_col_offset=12)], keywords=[], lineno=1, col_offset=0, end_lineno=1, "
             "end_col_offset=13), lineno=1, col_offset=0, end_lineno=1, "
             "end_col_offset=13), Expr(value=Call(func=Name(id='spam', ctx=Load(), "
@@ -743,8 +845,8 @@
         src = ast.parse('1 + 1', mode='eval')
         self.assertEqual(ast.increment_lineno(src, n=3), src)
         self.assertEqual(ast.dump(src, include_attributes=True),
-            'Expression(body=BinOp(left=Constant(value=1, kind=None, lineno=4, col_offset=0, '
-            'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, kind=None, '
+            'Expression(body=BinOp(left=Constant(value=1, lineno=4, col_offset=0, '
+            'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, '
             'lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4, '
             'col_offset=0, end_lineno=4, end_col_offset=5))'
         )
@@ -752,11 +854,16 @@
         src = ast.parse('1 + 1', mode='eval')
         self.assertEqual(ast.increment_lineno(src.body, n=3), src.body)
         self.assertEqual(ast.dump(src, include_attributes=True),
-            'Expression(body=BinOp(left=Constant(value=1, kind=None, lineno=4, col_offset=0, '
-            'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, kind=None, '
+            'Expression(body=BinOp(left=Constant(value=1, lineno=4, col_offset=0, '
+            'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, '
             'lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4, '
             'col_offset=0, end_lineno=4, end_col_offset=5))'
         )
+        src = ast.Call(
+            func=ast.Name("test", ast.Load()), args=[], keywords=[], lineno=1
+        )
+        self.assertEqual(ast.increment_lineno(src).lineno, 2)
+        self.assertIsNone(ast.increment_lineno(src).end_lineno)
 
     def test_iter_fields(self):
         node = ast.parse('foo()', mode='eval')
@@ -772,7 +879,7 @@
         self.assertEqual(next(iterator).value, 23)
         self.assertEqual(next(iterator).value, 42)
         self.assertEqual(ast.dump(next(iterator)),
-            "keyword(arg='eggs', value=Constant(value='leek', kind=None))"
+            "keyword(arg='eggs', value=Constant(value='leek'))"
         )
 
     def test_get_docstring(self):
@@ -858,6 +965,7 @@
         self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None))
         self.assertEqual(ast.literal_eval('{1, 2, 3}'), {1, 2, 3})
         self.assertEqual(ast.literal_eval('b"hi"'), b"hi")
+        self.assertEqual(ast.literal_eval('set()'), set())
         self.assertRaises(ValueError, ast.literal_eval, 'foo()')
         self.assertEqual(ast.literal_eval('6'), 6)
         self.assertEqual(ast.literal_eval('+6'), 6)
@@ -1263,11 +1371,11 @@
         self.expr(attr, "must have Load context")
 
     def test_subscript(self):
-        sub = ast.Subscript(ast.Name("x", ast.Store()), ast.Index(ast.Num(3)),
+        sub = ast.Subscript(ast.Name("x", ast.Store()), ast.Num(3),
                             ast.Load())
         self.expr(sub, "must have Load context")
         x = ast.Name("x", ast.Load())
-        sub = ast.Subscript(x, ast.Index(ast.Name("y", ast.Store())),
+        sub = ast.Subscript(x, ast.Name("y", ast.Store()),
                             ast.Load())
         self.expr(sub, "must have Load context")
         s = ast.Name("x", ast.Store())
@@ -1275,9 +1383,9 @@
             sl = ast.Slice(*args)
             self.expr(ast.Subscript(x, sl, ast.Load()),
                       "must have Load context")
-        sl = ast.ExtSlice([])
-        self.expr(ast.Subscript(x, sl, ast.Load()), "empty dims on ExtSlice")
-        sl = ast.ExtSlice([ast.Index(s)])
+        sl = ast.Tuple([], ast.Load())
+        self.expr(ast.Subscript(x, sl, ast.Load()))
+        sl = ast.Tuple([s], ast.Load())
         self.expr(ast.Subscript(x, sl, ast.Load()), "must have Load context")
 
     def test_starred(self):
@@ -1619,11 +1727,11 @@
         ''').strip()
         i1, i2, im = map(self._parse_value, (s1, s2, sm))
         self._check_content(s1, i1.value, 'f()[1, 2]')
-        self._check_content(s1, i1.value.slice.value, '1, 2')
+        self._check_content(s1, i1.value.slice, '1, 2')
         self._check_content(s2, i2.slice.lower, 'a.b')
         self._check_content(s2, i2.slice.upper, 'c.d')
-        self._check_content(sm, im.slice.dims[0].upper, 'f ()')
-        self._check_content(sm, im.slice.dims[1].lower, 'g ()')
+        self._check_content(sm, im.slice.elts[0].upper, 'f ()')
+        self._check_content(sm, im.slice.elts[1].lower, 'g ()')
         self._check_end_pos(im, 3, 3)
 
     def test_binop(self):
@@ -1777,6 +1885,17 @@
         cdef = ast.parse(s).body[0]
         self.assertEqual(ast.get_source_segment(s, cdef.body[0], padded=True), s_method)
 
+    def test_source_segment_missing_info(self):
+        s = 'v = 1\r\nw = 1\nx = 1\n\ry = 1\r\n'
+        v, w, x, y = ast.parse(s).body
+        del v.lineno
+        del w.end_lineno
+        del x.col_offset
+        del y.end_col_offset
+        self.assertIsNone(ast.get_source_segment(s, v))
+        self.assertIsNone(ast.get_source_segment(s, w))
+        self.assertIsNone(ast.get_source_segment(s, x))
+        self.assertIsNone(ast.get_source_segment(s, y))
 
 class NodeVisitorTests(unittest.TestCase):
     def test_old_constant_nodes(self):
@@ -1804,7 +1923,7 @@
         visitor = Visitor()
         log = []
         with warnings.catch_warnings(record=True) as wlog:
-            warnings.filterwarnings('always', '', PendingDeprecationWarning)
+            warnings.filterwarnings('always', '', DeprecationWarning)
             visitor.visit(mod)
         self.assertEqual(log, [
             (1, 'Num', 42),
@@ -1828,6 +1947,88 @@
         ])
 
 
+@support.cpython_only
+class ModuleStateTests(unittest.TestCase):
+    # bpo-41194, bpo-41261, bpo-41631: The _ast module uses a global state.
+
+    def check_ast_module(self):
+        # Check that the _ast module still works as expected
+        code = 'x + 1'
+        filename = '<string>'
+        mode = 'eval'
+
+        # Create _ast.AST subclasses instances
+        ast_tree = compile(code, filename, mode, flags=ast.PyCF_ONLY_AST)
+
+        # Call PyAST_Check()
+        code = compile(ast_tree, filename, mode)
+        self.assertIsInstance(code, types.CodeType)
+
+    def test_reload_module(self):
+        # bpo-41194: Importing the _ast module twice must not crash.
+        with support.swap_item(sys.modules, '_ast', None):
+            del sys.modules['_ast']
+            import _ast as ast1
+
+            del sys.modules['_ast']
+            import _ast as ast2
+
+            self.check_ast_module()
+
+        # Unloading the two _ast module instances must not crash.
+        del ast1
+        del ast2
+        support.gc_collect()
+
+        self.check_ast_module()
+
+    def test_sys_modules(self):
+        # bpo-41631: Test reproducing a Mercurial crash when PyAST_Check()
+        # imported the _ast module internally.
+        lazy_mod = object()
+
+        def my_import(name, *args, **kw):
+            sys.modules[name] = lazy_mod
+            return lazy_mod
+
+        with support.swap_item(sys.modules, '_ast', None):
+            del sys.modules['_ast']
+
+            with support.swap_attr(builtins, '__import__', my_import):
+                # Test that compile() does not import the _ast module
+                self.check_ast_module()
+                self.assertNotIn('_ast', sys.modules)
+
+                # Sanity check of the test itself
+                import _ast
+                self.assertIs(_ast, lazy_mod)
+
+    def test_subinterpreter(self):
+        # bpo-41631: Importing and using the _ast module in a subinterpreter
+        # must not crash.
+        code = dedent('''
+            import _ast
+            import ast
+            import gc
+            import sys
+            import types
+
+            # Create _ast.AST subclasses instances and call PyAST_Check()
+            ast_tree = compile('x+1', '<string>', 'eval',
+                               flags=ast.PyCF_ONLY_AST)
+            code = compile(ast_tree, 'string', 'eval')
+            if not isinstance(code, types.CodeType):
+                raise AssertionError
+
+            # Unloading the _ast module must not crash.
+            del ast, _ast
+            del sys.modules['ast'], sys.modules['_ast']
+            gc.collect()
+        ''')
+        res = support.run_in_subinterp(code)
+        self.assertEqual(res, 0)
+
+
 def main():
     if __name__ != '__main__':
         return
@@ -1845,112 +2046,112 @@
 
 #### EVERYTHING BELOW IS GENERATED BY python Lib/test/test_ast.py -g  #####
 exec_results = [
-('Module', [('Expr', (1, 0), ('Constant', (1, 0), None, None))], []),
-('Module', [('Expr', (1, 0), ('Constant', (1, 0), 'module docstring', None))], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (1, 9))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (1, 9), ('Constant', (1, 9), 'function docstring', None))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [('arg', (1, 6), 'a', None, None)], None, [], [], None, []), [('Pass', (1, 10))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [('arg', (1, 6), 'a', None, None)], None, [], [], None, [('Constant', (1, 8), 0, None)]), [('Pass', (1, 12))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], ('arg', (1, 7), 'args', None, None), [], [], None, []), [('Pass', (1, 14))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], ('arg', (1, 8), 'kwargs', None, None), []), [('Pass', (1, 17))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [('arg', (1, 6), 'a', None, None), ('arg', (1, 9), 'b', None, None), ('arg', (1, 14), 'c', None, None), ('arg', (1, 22), 'd', None, None), ('arg', (1, 28), 'e', None, None)], ('arg', (1, 35), 'args', None, None), [('arg', (1, 41), 'f', None, None)], [('Constant', (1, 43), 42, None)], ('arg', (1, 49), 'kwargs', None, None), [('Constant', (1, 11), 1, None), ('Constant', (1, 16), None, None), ('List', (1, 24), [], ('Load',)), ('Dict', (1, 30), [], [])]), [('Expr', (1, 58), ('Constant', (1, 58), 'doc for f()', None))], [], None, None)], []),
-('Module', [('ClassDef', (1, 0), 'C', [], [], [('Pass', (1, 8))], [])], []),
-('Module', [('ClassDef', (1, 0), 'C', [], [], [('Expr', (1, 9), ('Constant', (1, 9), 'docstring for class C', None))], [])], []),
-('Module', [('ClassDef', (1, 0), 'C', [('Name', (1, 8), 'object', ('Load',))], [], [('Pass', (1, 17))], [])], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Return', (1, 8), ('Constant', (1, 15), 1, None))], [], None, None)], []),
-('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])], []),
-('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Constant', (1, 4), 1, None), None)], []),
-('Module', [('Assign', (1, 0), [('Tuple', (1, 0), [('Name', (1, 0), 'a', ('Store',)), ('Name', (1, 2), 'b', ('Store',))], ('Store',))], ('Name', (1, 6), 'c', ('Load',)), None)], []),
-('Module', [('Assign', (1, 0), [('Tuple', (1, 0), [('Name', (1, 1), 'a', ('Store',)), ('Name', (1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 8), 'c', ('Load',)), None)], []),
-('Module', [('Assign', (1, 0), [('List', (1, 0), [('Name', (1, 1), 'a', ('Store',)), ('Name', (1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 8), 'c', ('Load',)), None)], []),
-('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Constant', (1, 5), 1, None))], []),
-('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [], None)], []),
-('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])], []),
-('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])], []),
-('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [])])], []),
-('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [('Pass', (6, 2))])])], []),
-('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',)))], [('Pass', (1, 13))], None)], []),
-('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',))), ('withitem', ('Name', (1, 13), 'z', ('Load',)), ('Name', (1, 18), 'q', ('Store',)))], [('Pass', (1, 21))], None)], []),
-('Module', [('Raise', (1, 0), ('Call', (1, 6), ('Name', (1, 6), 'Exception', ('Load',)), [('Constant', (1, 16), 'string', None)], []), None)], []),
-('Module', [('Try', (1, 0), [('Pass', (2, 2))], [('ExceptHandler', (3, 0), ('Name', (3, 7), 'Exception', ('Load',)), None, [('Pass', (4, 2))])], [], [])], []),
-('Module', [('Try', (1, 0), [('Pass', (2, 2))], [], [], [('Pass', (4, 2))])], []),
-('Module', [('Assert', (1, 0), ('Name', (1, 7), 'v', ('Load',)), None)], []),
-('Module', [('Import', (1, 0), [('alias', 'sys', None)])], []),
-('Module', [('ImportFrom', (1, 0), 'sys', [('alias', 'v', None)], 0)], []),
-('Module', [('Global', (1, 0), ['v'])], []),
-('Module', [('Expr', (1, 0), ('Constant', (1, 0), 1, None))], []),
-('Module', [('Pass', (1, 0))], []),
-('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Break', (1, 11))], [], None)], []),
-('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Continue', (1, 11))], [], None)], []),
-('Module', [('For', (1, 0), ('Tuple', (1, 4), [('Name', (1, 4), 'a', ('Store',)), ('Name', (1, 6), 'b', ('Store',))], ('Store',)), ('Name', (1, 11), 'c', ('Load',)), [('Pass', (1, 14))], [], None)], []),
-('Module', [('For', (1, 0), ('Tuple', (1, 4), [('Name', (1, 5), 'a', ('Store',)), ('Name', (1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 13), 'c', ('Load',)), [('Pass', (1, 16))], [], None)], []),
-('Module', [('For', (1, 0), ('List', (1, 4), [('Name', (1, 5), 'a', ('Store',)), ('Name', (1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 13), 'c', ('Load',)), [('Pass', (1, 16))], [], None)], []),
-('Module', [('Expr', (1, 0), ('GeneratorExp', (1, 0), ('Tuple', (2, 4), [('Name', (3, 4), 'Aa', ('Load',)), ('Name', (5, 7), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4), [('Name', (8, 4), 'Aa', ('Store',)), ('Name', (10, 4), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10), 'Cc', ('Load',)), [], 0)]))], []),
-('Module', [('Expr', (1, 0), ('DictComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Name', (1, 11), 'w', ('Store',)), ('Name', (1, 16), 'x', ('Load',)), [], 0), ('comprehension', ('Name', (1, 22), 'm', ('Store',)), ('Name', (1, 27), 'p', ('Load',)), [('Name', (1, 32), 'g', ('Load',))], 0)]))], []),
-('Module', [('Expr', (1, 0), ('DictComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'v', ('Store',)), ('Name', (1, 13), 'w', ('Store',))], ('Store',)), ('Name', (1, 18), 'x', ('Load',)), [], 0)]))], []),
-('Module', [('Expr', (1, 0), ('SetComp', (1, 0), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 12), 'x', ('Load',)), [('Name', (1, 17), 'g', ('Load',))], 0)]))], []),
-('Module', [('Expr', (1, 0), ('SetComp', (1, 0), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Tuple', (1, 7), [('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 9), 'm', ('Store',))], ('Store',)), ('Name', (1, 14), 'x', ('Load',)), [], 0)]))], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1), ('Constant', (2, 1), 'async function', None)), ('Expr', (3, 1), ('Await', (3, 1), ('Call', (3, 7), ('Name', (3, 7), 'something', ('Load',)), [], [])))], [], None, None)], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncFor', (2, 1), ('Name', (2, 11), 'e', ('Store',)), ('Name', (2, 16), 'i', ('Load',)), [('Expr', (2, 19), ('Constant', (2, 19), 1, None))], [('Expr', (3, 7), ('Constant', (3, 7), 2, None))], None)], [], None, None)], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncWith', (2, 1), [('withitem', ('Name', (2, 12), 'a', ('Load',)), ('Name', (2, 17), 'b', ('Store',)))], [('Expr', (2, 20), ('Constant', (2, 20), 1, None))], None)], [], None, None)], []),
-('Module', [('Expr', (1, 0), ('Dict', (1, 0), [None, ('Constant', (1, 10), 2, None)], [('Dict', (1, 3), [('Constant', (1, 4), 1, None)], [('Constant', (1, 6), 2, None)]), ('Constant', (1, 12), 3, None)]))], []),
-('Module', [('Expr', (1, 0), ('Set', (1, 0), [('Starred', (1, 1), ('Set', (1, 2), [('Constant', (1, 3), 1, None), ('Constant', (1, 6), 2, None)]), ('Load',)), ('Constant', (1, 10), 3, None)]))], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1), ('ListComp', (2, 1), ('Name', (2, 2), 'i', ('Load',)), [('comprehension', ('Name', (2, 14), 'b', ('Store',)), ('Name', (2, 19), 'c', ('Load',)), [], 1)]))], [], None, None)], []),
-('Module', [('FunctionDef', (4, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 1), ('Name', (2, 1), 'deco2', ('Load',)), [], []), ('Call', (3, 1), ('Name', (3, 1), 'deco3', ('Load',)), [('Constant', (3, 7), 1, None)], [])], None, None)], []),
-('Module', [('AsyncFunctionDef', (4, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 15))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 1), ('Name', (2, 1), 'deco2', ('Load',)), [], []), ('Call', (3, 1), ('Name', (3, 1), 'deco3', ('Load',)), [('Constant', (3, 7), 1, None)], [])], None, None)], []),
-('Module', [('ClassDef', (4, 0), 'C', [], [], [('Pass', (4, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 1), ('Name', (2, 1), 'deco2', ('Load',)), [], []), ('Call', (3, 1), ('Name', (3, 1), 'deco3', ('Load',)), [('Constant', (3, 7), 1, None)], [])])], []),
-('Module', [('FunctionDef', (2, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9))], [('Call', (1, 1), ('Name', (1, 1), 'deco', ('Load',)), [('GeneratorExp', (1, 5), ('Name', (1, 6), 'a', ('Load',)), [('comprehension', ('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 17), 'b', ('Load',)), [], 0)])], [])], None, None)], []),
-('Module', [('FunctionDef', (2, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9))], [('Attribute', (1, 1), ('Attribute', (1, 1), ('Name', (1, 1), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',))], None, None)], []),
-('Module', [('Expr', (1, 0), ('NamedExpr', (1, 1), ('Name', (1, 1), 'a', ('Store',)), ('Constant', (1, 6), 1, None)))], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [], None, [], [], None, []), [('Pass', (1, 14))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 12), 'c', None, None), ('arg', (1, 15), 'd', None, None), ('arg', (1, 18), 'e', None, None)], None, [], [], None, []), [('Pass', (1, 22))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 12), 'c', None, None)], None, [('arg', (1, 18), 'd', None, None), ('arg', (1, 21), 'e', None, None)], [None, None], None, []), [('Pass', (1, 25))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 12), 'c', None, None)], None, [('arg', (1, 18), 'd', None, None), ('arg', (1, 21), 'e', None, None)], [None, None], ('arg', (1, 26), 'kwargs', None, None), []), [('Pass', (1, 35))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [], None, [], [], None, [('Constant', (1, 8), 1, None)]), [('Pass', (1, 16))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None), ('arg', (1, 19), 'c', None, None)], None, [], [], None, [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None), ('Constant', (1, 21), 4, None)]), [('Pass', (1, 25))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [('Constant', (1, 24), 4, None)], None, [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 28))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [None], None, [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 26))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [('Constant', (1, 24), 4, None)], ('arg', (1, 29), 'kwargs', None, None), [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 38))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [None], ('arg', (1, 27), 'kwargs', None, None), [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 36))], [], None, None)], []),
+('Module', [('Expr', (1, 0, 1, 4), ('Constant', (1, 0, 1, 4), None, None))], []),
+('Module', [('Expr', (1, 0, 1, 18), ('Constant', (1, 0, 1, 18), 'module docstring', None))], []),
+('Module', [('FunctionDef', (1, 0, 1, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (1, 9, 1, 13))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 29), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (1, 9, 1, 29), ('Constant', (1, 9, 1, 29), 'function docstring', None))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 14), 'f', ('arguments', [], [('arg', (1, 6, 1, 7), 'a', None, None)], None, [], [], None, []), [('Pass', (1, 10, 1, 14))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 16), 'f', ('arguments', [], [('arg', (1, 6, 1, 7), 'a', None, None)], None, [], [], None, [('Constant', (1, 8, 1, 9), 0, None)]), [('Pass', (1, 12, 1, 16))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 18), 'f', ('arguments', [], [], ('arg', (1, 7, 1, 11), 'args', None, None), [], [], None, []), [('Pass', (1, 14, 1, 18))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 21), 'f', ('arguments', [], [], None, [], [], ('arg', (1, 8, 1, 14), 'kwargs', None, None), []), [('Pass', (1, 17, 1, 21))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 71), 'f', ('arguments', [], [('arg', (1, 6, 1, 7), 'a', None, None), ('arg', (1, 9, 1, 10), 'b', None, None), ('arg', (1, 14, 1, 15), 'c', None, None), ('arg', (1, 22, 1, 23), 'd', None, None), ('arg', (1, 28, 1, 29), 'e', None, None)], ('arg', (1, 35, 1, 39), 'args', None, None), [('arg', (1, 41, 1, 42), 'f', None, None)], [('Constant', (1, 43, 1, 45), 42, None)], ('arg', (1, 49, 1, 55), 'kwargs', None, None), [('Constant', (1, 11, 1, 12), 1, None), ('Constant', (1, 16, 1, 20), None, None), ('List', (1, 24, 1, 26), [], ('Load',)), ('Dict', (1, 30, 1, 32), [], [])]), [('Expr', (1, 58, 1, 71), ('Constant', (1, 58, 1, 71), 'doc for f()', None))], [], None, None)], []),
+('Module', [('ClassDef', (1, 0, 1, 12), 'C', [], [], [('Pass', (1, 8, 1, 12))], [])], []),
+('Module', [('ClassDef', (1, 0, 1, 32), 'C', [], [], [('Expr', (1, 9, 1, 32), ('Constant', (1, 9, 1, 32), 'docstring for class C', None))], [])], []),
+('Module', [('ClassDef', (1, 0, 1, 21), 'C', [('Name', (1, 8, 1, 14), 'object', ('Load',))], [], [('Pass', (1, 17, 1, 21))], [])], []),
+('Module', [('FunctionDef', (1, 0, 1, 16), 'f', ('arguments', [], [], None, [], [], None, []), [('Return', (1, 8, 1, 16), ('Constant', (1, 15, 1, 16), 1, None))], [], None, None)], []),
+('Module', [('Delete', (1, 0, 1, 5), [('Name', (1, 4, 1, 5), 'v', ('Del',))])], []),
+('Module', [('Assign', (1, 0, 1, 5), [('Name', (1, 0, 1, 1), 'v', ('Store',))], ('Constant', (1, 4, 1, 5), 1, None), None)], []),
+('Module', [('Assign', (1, 0, 1, 7), [('Tuple', (1, 0, 1, 3), [('Name', (1, 0, 1, 1), 'a', ('Store',)), ('Name', (1, 2, 1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 6, 1, 7), 'c', ('Load',)), None)], []),
+('Module', [('Assign', (1, 0, 1, 9), [('Tuple', (1, 0, 1, 5), [('Name', (1, 1, 1, 2), 'a', ('Store',)), ('Name', (1, 3, 1, 4), 'b', ('Store',))], ('Store',))], ('Name', (1, 8, 1, 9), 'c', ('Load',)), None)], []),
+('Module', [('Assign', (1, 0, 1, 9), [('List', (1, 0, 1, 5), [('Name', (1, 1, 1, 2), 'a', ('Store',)), ('Name', (1, 3, 1, 4), 'b', ('Store',))], ('Store',))], ('Name', (1, 8, 1, 9), 'c', ('Load',)), None)], []),
+('Module', [('AugAssign', (1, 0, 1, 6), ('Name', (1, 0, 1, 1), 'v', ('Store',)), ('Add',), ('Constant', (1, 5, 1, 6), 1, None))], []),
+('Module', [('For', (1, 0, 1, 15), ('Name', (1, 4, 1, 5), 'v', ('Store',)), ('Name', (1, 9, 1, 10), 'v', ('Load',)), [('Pass', (1, 11, 1, 15))], [], None)], []),
+('Module', [('While', (1, 0, 1, 12), ('Name', (1, 6, 1, 7), 'v', ('Load',)), [('Pass', (1, 8, 1, 12))], [])], []),
+('Module', [('If', (1, 0, 1, 9), ('Name', (1, 3, 1, 4), 'v', ('Load',)), [('Pass', (1, 5, 1, 9))], [])], []),
+('Module', [('If', (1, 0, 4, 6), ('Name', (1, 3, 1, 4), 'a', ('Load',)), [('Pass', (2, 2, 2, 6))], [('If', (3, 0, 4, 6), ('Name', (3, 5, 3, 6), 'b', ('Load',)), [('Pass', (4, 2, 4, 6))], [])])], []),
+('Module', [('If', (1, 0, 6, 6), ('Name', (1, 3, 1, 4), 'a', ('Load',)), [('Pass', (2, 2, 2, 6))], [('If', (3, 0, 6, 6), ('Name', (3, 5, 3, 6), 'b', ('Load',)), [('Pass', (4, 2, 4, 6))], [('Pass', (6, 2, 6, 6))])])], []),
+('Module', [('With', (1, 0, 1, 17), [('withitem', ('Name', (1, 5, 1, 6), 'x', ('Load',)), ('Name', (1, 10, 1, 11), 'y', ('Store',)))], [('Pass', (1, 13, 1, 17))], None)], []),
+('Module', [('With', (1, 0, 1, 25), [('withitem', ('Name', (1, 5, 1, 6), 'x', ('Load',)), ('Name', (1, 10, 1, 11), 'y', ('Store',))), ('withitem', ('Name', (1, 13, 1, 14), 'z', ('Load',)), ('Name', (1, 18, 1, 19), 'q', ('Store',)))], [('Pass', (1, 21, 1, 25))], None)], []),
+('Module', [('Raise', (1, 0, 1, 25), ('Call', (1, 6, 1, 25), ('Name', (1, 6, 1, 15), 'Exception', ('Load',)), [('Constant', (1, 16, 1, 24), 'string', None)], []), None)], []),
+('Module', [('Try', (1, 0, 4, 6), [('Pass', (2, 2, 2, 6))], [('ExceptHandler', (3, 0, 4, 6), ('Name', (3, 7, 3, 16), 'Exception', ('Load',)), None, [('Pass', (4, 2, 4, 6))])], [], [])], []),
+('Module', [('Try', (1, 0, 4, 6), [('Pass', (2, 2, 2, 6))], [], [], [('Pass', (4, 2, 4, 6))])], []),
+('Module', [('Assert', (1, 0, 1, 8), ('Name', (1, 7, 1, 8), 'v', ('Load',)), None)], []),
+('Module', [('Import', (1, 0, 1, 10), [('alias', 'sys', None)])], []),
+('Module', [('ImportFrom', (1, 0, 1, 17), 'sys', [('alias', 'v', None)], 0)], []),
+('Module', [('Global', (1, 0, 1, 8), ['v'])], []),
+('Module', [('Expr', (1, 0, 1, 1), ('Constant', (1, 0, 1, 1), 1, None))], []),
+('Module', [('Pass', (1, 0, 1, 4))], []),
+('Module', [('For', (1, 0, 1, 16), ('Name', (1, 4, 1, 5), 'v', ('Store',)), ('Name', (1, 9, 1, 10), 'v', ('Load',)), [('Break', (1, 11, 1, 16))], [], None)], []),
+('Module', [('For', (1, 0, 1, 19), ('Name', (1, 4, 1, 5), 'v', ('Store',)), ('Name', (1, 9, 1, 10), 'v', ('Load',)), [('Continue', (1, 11, 1, 19))], [], None)], []),
+('Module', [('For', (1, 0, 1, 18), ('Tuple', (1, 4, 1, 7), [('Name', (1, 4, 1, 5), 'a', ('Store',)), ('Name', (1, 6, 1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 11, 1, 12), 'c', ('Load',)), [('Pass', (1, 14, 1, 18))], [], None)], []),
+('Module', [('For', (1, 0, 1, 20), ('Tuple', (1, 4, 1, 9), [('Name', (1, 5, 1, 6), 'a', ('Store',)), ('Name', (1, 7, 1, 8), 'b', ('Store',))], ('Store',)), ('Name', (1, 13, 1, 14), 'c', ('Load',)), [('Pass', (1, 16, 1, 20))], [], None)], []),
+('Module', [('For', (1, 0, 1, 20), ('List', (1, 4, 1, 9), [('Name', (1, 5, 1, 6), 'a', ('Store',)), ('Name', (1, 7, 1, 8), 'b', ('Store',))], ('Store',)), ('Name', (1, 13, 1, 14), 'c', ('Load',)), [('Pass', (1, 16, 1, 20))], [], None)], []),
+('Module', [('Expr', (1, 0, 11, 5), ('GeneratorExp', (1, 0, 11, 5), ('Tuple', (2, 4, 6, 5), [('Name', (3, 4, 3, 6), 'Aa', ('Load',)), ('Name', (5, 7, 5, 9), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4, 10, 6), [('Name', (8, 4, 8, 6), 'Aa', ('Store',)), ('Name', (10, 4, 10, 6), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10, 10, 12), 'Cc', ('Load',)), [], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 34), ('DictComp', (1, 0, 1, 34), ('Name', (1, 1, 1, 2), 'a', ('Load',)), ('Name', (1, 5, 1, 6), 'b', ('Load',)), [('comprehension', ('Name', (1, 11, 1, 12), 'w', ('Store',)), ('Name', (1, 16, 1, 17), 'x', ('Load',)), [], 0), ('comprehension', ('Name', (1, 22, 1, 23), 'm', ('Store',)), ('Name', (1, 27, 1, 28), 'p', ('Load',)), [('Name', (1, 32, 1, 33), 'g', ('Load',))], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 20), ('DictComp', (1, 0, 1, 20), ('Name', (1, 1, 1, 2), 'a', ('Load',)), ('Name', (1, 5, 1, 6), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'v', ('Store',)), ('Name', (1, 13, 1, 14), 'w', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'x', ('Load',)), [], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 19), ('SetComp', (1, 0, 1, 19), ('Name', (1, 1, 1, 2), 'r', ('Load',)), [('comprehension', ('Name', (1, 7, 1, 8), 'l', ('Store',)), ('Name', (1, 12, 1, 13), 'x', ('Load',)), [('Name', (1, 17, 1, 18), 'g', ('Load',))], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 16), ('SetComp', (1, 0, 1, 16), ('Name', (1, 1, 1, 2), 'r', ('Load',)), [('comprehension', ('Tuple', (1, 7, 1, 10), [('Name', (1, 7, 1, 8), 'l', ('Store',)), ('Name', (1, 9, 1, 10), 'm', ('Store',))], ('Store',)), ('Name', (1, 14, 1, 15), 'x', ('Load',)), [], 0)]))], []),
+('Module', [('AsyncFunctionDef', (1, 0, 3, 18), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1, 2, 17), ('Constant', (2, 1, 2, 17), 'async function', None)), ('Expr', (3, 1, 3, 18), ('Await', (3, 1, 3, 18), ('Call', (3, 7, 3, 18), ('Name', (3, 7, 3, 16), 'something', ('Load',)), [], [])))], [], None, None)], []),
+('Module', [('AsyncFunctionDef', (1, 0, 3, 8), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncFor', (2, 1, 3, 8), ('Name', (2, 11, 2, 12), 'e', ('Store',)), ('Name', (2, 16, 2, 17), 'i', ('Load',)), [('Expr', (2, 19, 2, 20), ('Constant', (2, 19, 2, 20), 1, None))], [('Expr', (3, 7, 3, 8), ('Constant', (3, 7, 3, 8), 2, None))], None)], [], None, None)], []),
+('Module', [('AsyncFunctionDef', (1, 0, 2, 21), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncWith', (2, 1, 2, 21), [('withitem', ('Name', (2, 12, 2, 13), 'a', ('Load',)), ('Name', (2, 17, 2, 18), 'b', ('Store',)))], [('Expr', (2, 20, 2, 21), ('Constant', (2, 20, 2, 21), 1, None))], None)], [], None, None)], []),
+('Module', [('Expr', (1, 0, 1, 14), ('Dict', (1, 0, 1, 14), [None, ('Constant', (1, 10, 1, 11), 2, None)], [('Dict', (1, 3, 1, 8), [('Constant', (1, 4, 1, 5), 1, None)], [('Constant', (1, 6, 1, 7), 2, None)]), ('Constant', (1, 12, 1, 13), 3, None)]))], []),
+('Module', [('Expr', (1, 0, 1, 12), ('Set', (1, 0, 1, 12), [('Starred', (1, 1, 1, 8), ('Set', (1, 2, 1, 8), [('Constant', (1, 3, 1, 4), 1, None), ('Constant', (1, 6, 1, 7), 2, None)]), ('Load',)), ('Constant', (1, 10, 1, 11), 3, None)]))], []),
+('Module', [('AsyncFunctionDef', (1, 0, 2, 21), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1, 2, 21), ('ListComp', (2, 1, 2, 21), ('Name', (2, 2, 2, 3), 'i', ('Load',)), [('comprehension', ('Name', (2, 14, 2, 15), 'b', ('Store',)), ('Name', (2, 19, 2, 20), 'c', ('Load',)), [], 1)]))], [], None, None)], []),
+('Module', [('FunctionDef', (4, 0, 4, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 9, 4, 13))], [('Name', (1, 1, 1, 6), 'deco1', ('Load',)), ('Call', (2, 1, 2, 8), ('Name', (2, 1, 2, 6), 'deco2', ('Load',)), [], []), ('Call', (3, 1, 3, 9), ('Name', (3, 1, 3, 6), 'deco3', ('Load',)), [('Constant', (3, 7, 3, 8), 1, None)], [])], None, None)], []),
+('Module', [('AsyncFunctionDef', (4, 0, 4, 19), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 15, 4, 19))], [('Name', (1, 1, 1, 6), 'deco1', ('Load',)), ('Call', (2, 1, 2, 8), ('Name', (2, 1, 2, 6), 'deco2', ('Load',)), [], []), ('Call', (3, 1, 3, 9), ('Name', (3, 1, 3, 6), 'deco3', ('Load',)), [('Constant', (3, 7, 3, 8), 1, None)], [])], None, None)], []),
+('Module', [('ClassDef', (4, 0, 4, 13), 'C', [], [], [('Pass', (4, 9, 4, 13))], [('Name', (1, 1, 1, 6), 'deco1', ('Load',)), ('Call', (2, 1, 2, 8), ('Name', (2, 1, 2, 6), 'deco2', ('Load',)), [], []), ('Call', (3, 1, 3, 9), ('Name', (3, 1, 3, 6), 'deco3', ('Load',)), [('Constant', (3, 7, 3, 8), 1, None)], [])])], []),
+('Module', [('FunctionDef', (2, 0, 2, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9, 2, 13))], [('Call', (1, 1, 1, 19), ('Name', (1, 1, 1, 5), 'deco', ('Load',)), [('GeneratorExp', (1, 5, 1, 19), ('Name', (1, 6, 1, 7), 'a', ('Load',)), [('comprehension', ('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 17, 1, 18), 'b', ('Load',)), [], 0)])], [])], None, None)], []),
+('Module', [('FunctionDef', (2, 0, 2, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9, 2, 13))], [('Attribute', (1, 1, 1, 6), ('Attribute', (1, 1, 1, 4), ('Name', (1, 1, 1, 2), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',))], None, None)], []),
+('Module', [('Expr', (1, 0, 1, 8), ('NamedExpr', (1, 1, 1, 7), ('Name', (1, 1, 1, 2), 'a', ('Store',)), ('Constant', (1, 6, 1, 7), 1, None)))], []),
+('Module', [('FunctionDef', (1, 0, 1, 18), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [], None, [], [], None, []), [('Pass', (1, 14, 1, 18))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 26), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 12, 1, 13), 'c', None, None), ('arg', (1, 15, 1, 16), 'd', None, None), ('arg', (1, 18, 1, 19), 'e', None, None)], None, [], [], None, []), [('Pass', (1, 22, 1, 26))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 29), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 12, 1, 13), 'c', None, None)], None, [('arg', (1, 18, 1, 19), 'd', None, None), ('arg', (1, 21, 1, 22), 'e', None, None)], [None, None], None, []), [('Pass', (1, 25, 1, 29))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 39), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 12, 1, 13), 'c', None, None)], None, [('arg', (1, 18, 1, 19), 'd', None, None), ('arg', (1, 21, 1, 22), 'e', None, None)], [None, None], ('arg', (1, 26, 1, 32), 'kwargs', None, None), []), [('Pass', (1, 35, 1, 39))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 20), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [], None, [], [], None, [('Constant', (1, 8, 1, 9), 1, None)]), [('Pass', (1, 16, 1, 20))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 29), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None), ('arg', (1, 19, 1, 20), 'c', None, None)], None, [], [], None, [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None), ('Constant', (1, 21, 1, 22), 4, None)]), [('Pass', (1, 25, 1, 29))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 32), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [('Constant', (1, 24, 1, 25), 4, None)], None, [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 28, 1, 32))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 30), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [None], None, [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 26, 1, 30))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 42), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [('Constant', (1, 24, 1, 25), 4, None)], ('arg', (1, 29, 1, 35), 'kwargs', None, None), [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 38, 1, 42))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 40), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [None], ('arg', (1, 27, 1, 33), 'kwargs', None, None), [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 36, 1, 40))], [], None, None)], []),
 ]
 single_results = [
-('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Constant', (1, 0), 1, None), ('Add',), ('Constant', (1, 2), 2, None)))]),
+('Interactive', [('Expr', (1, 0, 1, 3), ('BinOp', (1, 0, 1, 3), ('Constant', (1, 0, 1, 1), 1, None), ('Add',), ('Constant', (1, 2, 1, 3), 2, None)))]),
 ]
 eval_results = [
-('Expression', ('Constant', (1, 0), None, None)),
-('Expression', ('BoolOp', (1, 0), ('And',), [('Name', (1, 0), 'a', ('Load',)), ('Name', (1, 6), 'b', ('Load',))])),
-('Expression', ('BinOp', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Add',), ('Name', (1, 4), 'b', ('Load',)))),
-('Expression', ('UnaryOp', (1, 0), ('Not',), ('Name', (1, 4), 'v', ('Load',)))),
-('Expression', ('Lambda', (1, 0), ('arguments', [], [], None, [], [], None, []), ('Constant', (1, 7), None, None))),
-('Expression', ('Dict', (1, 0), [('Constant', (1, 2), 1, None)], [('Constant', (1, 4), 2, None)])),
-('Expression', ('Dict', (1, 0), [], [])),
-('Expression', ('Set', (1, 0), [('Constant', (1, 1), None, None)])),
-('Expression', ('Dict', (1, 0), [('Constant', (2, 6), 1, None)], [('Constant', (4, 10), 2, None)])),
-('Expression', ('ListComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
-('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
-('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
-('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('Compare', (1, 0), ('Constant', (1, 0), 1, None), [('Lt',), ('Lt',)], [('Constant', (1, 4), 2, None), ('Constant', (1, 8), 3, None)])),
-('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Constant', (1, 2), 1, None), ('Constant', (1, 4), 2, None), ('Starred', (1, 10), ('Name', (1, 11), 'd', ('Load',)), ('Load',))], [('keyword', 'c', ('Constant', (1, 8), 3, None)), ('keyword', None, ('Name', (1, 15), 'e', ('Load',)))])),
-('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Starred', (1, 2), ('List', (1, 3), [('Constant', (1, 4), 0, None), ('Constant', (1, 7), 1, None)], ('Load',)), ('Load',))], [])),
-('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('GeneratorExp', (1, 1), ('Name', (1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 8), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Load',)), [], 0)])], [])),
-('Expression', ('Constant', (1, 0), 10, None)),
-('Expression', ('Constant', (1, 0), 'string', None)),
-('Expression', ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',))),
-('Expression', ('Subscript', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Slice', ('Name', (1, 2), 'b', ('Load',)), ('Name', (1, 4), 'c', ('Load',)), None), ('Load',))),
-('Expression', ('Name', (1, 0), 'v', ('Load',))),
-('Expression', ('List', (1, 0), [('Constant', (1, 1), 1, None), ('Constant', (1, 3), 2, None), ('Constant', (1, 5), 3, None)], ('Load',))),
-('Expression', ('List', (1, 0), [], ('Load',))),
-('Expression', ('Tuple', (1, 0), [('Constant', (1, 0), 1, None), ('Constant', (1, 2), 2, None), ('Constant', (1, 4), 3, None)], ('Load',))),
-('Expression', ('Tuple', (1, 0), [('Constant', (1, 1), 1, None), ('Constant', (1, 3), 2, None), ('Constant', (1, 5), 3, None)], ('Load',))),
-('Expression', ('Tuple', (1, 0), [], ('Load',))),
-('Expression', ('Call', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',)), 'd', ('Load',)), [('Subscript', (1, 8), ('Attribute', (1, 8), ('Name', (1, 8), 'a', ('Load',)), 'b', ('Load',)), ('Slice', ('Constant', (1, 12), 1, None), ('Constant', (1, 14), 2, None), None), ('Load',))], [])),
+('Expression', ('Constant', (1, 0, 1, 4), None, None)),
+('Expression', ('BoolOp', (1, 0, 1, 7), ('And',), [('Name', (1, 0, 1, 1), 'a', ('Load',)), ('Name', (1, 6, 1, 7), 'b', ('Load',))])),
+('Expression', ('BinOp', (1, 0, 1, 5), ('Name', (1, 0, 1, 1), 'a', ('Load',)), ('Add',), ('Name', (1, 4, 1, 5), 'b', ('Load',)))),
+('Expression', ('UnaryOp', (1, 0, 1, 5), ('Not',), ('Name', (1, 4, 1, 5), 'v', ('Load',)))),
+('Expression', ('Lambda', (1, 0, 1, 11), ('arguments', [], [], None, [], [], None, []), ('Constant', (1, 7, 1, 11), None, None))),
+('Expression', ('Dict', (1, 0, 1, 7), [('Constant', (1, 2, 1, 3), 1, None)], [('Constant', (1, 4, 1, 5), 2, None)])),
+('Expression', ('Dict', (1, 0, 1, 2), [], [])),
+('Expression', ('Set', (1, 0, 1, 7), [('Constant', (1, 1, 1, 5), None, None)])),
+('Expression', ('Dict', (1, 0, 5, 6), [('Constant', (2, 6, 2, 7), 1, None)], [('Constant', (4, 10, 4, 11), 2, None)])),
+('Expression', ('ListComp', (1, 0, 1, 19), ('Name', (1, 1, 1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 7, 1, 8), 'b', ('Store',)), ('Name', (1, 12, 1, 13), 'c', ('Load',)), [('Name', (1, 17, 1, 18), 'd', ('Load',))], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 19), ('Name', (1, 1, 1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 7, 1, 8), 'b', ('Store',)), ('Name', (1, 12, 1, 13), 'c', ('Load',)), [('Name', (1, 17, 1, 18), 'd', ('Load',))], 0)])),
+('Expression', ('ListComp', (1, 0, 1, 20), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'c', ('Load',)), [], 0)])),
+('Expression', ('ListComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('ListComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0, 1, 20), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 20), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('Compare', (1, 0, 1, 9), ('Constant', (1, 0, 1, 1), 1, None), [('Lt',), ('Lt',)], [('Constant', (1, 4, 1, 5), 2, None), ('Constant', (1, 8, 1, 9), 3, None)])),
+('Expression', ('Call', (1, 0, 1, 17), ('Name', (1, 0, 1, 1), 'f', ('Load',)), [('Constant', (1, 2, 1, 3), 1, None), ('Constant', (1, 4, 1, 5), 2, None), ('Starred', (1, 10, 1, 12), ('Name', (1, 11, 1, 12), 'd', ('Load',)), ('Load',))], [('keyword', (1, 6, 1, 9), 'c', ('Constant', (1, 8, 1, 9), 3, None)), ('keyword', (1, 13, 1, 16), None, ('Name', (1, 15, 1, 16), 'e', ('Load',)))])),
+('Expression', ('Call', (1, 0, 1, 10), ('Name', (1, 0, 1, 1), 'f', ('Load',)), [('Starred', (1, 2, 1, 9), ('List', (1, 3, 1, 9), [('Constant', (1, 4, 1, 5), 0, None), ('Constant', (1, 7, 1, 8), 1, None)], ('Load',)), ('Load',))], [])),
+('Expression', ('Call', (1, 0, 1, 15), ('Name', (1, 0, 1, 1), 'f', ('Load',)), [('GeneratorExp', (1, 1, 1, 15), ('Name', (1, 2, 1, 3), 'a', ('Load',)), [('comprehension', ('Name', (1, 8, 1, 9), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Load',)), [], 0)])], [])),
+('Expression', ('Constant', (1, 0, 1, 2), 10, None)),
+('Expression', ('Constant', (1, 0, 1, 8), 'string', None)),
+('Expression', ('Attribute', (1, 0, 1, 3), ('Name', (1, 0, 1, 1), 'a', ('Load',)), 'b', ('Load',))),
+('Expression', ('Subscript', (1, 0, 1, 6), ('Name', (1, 0, 1, 1), 'a', ('Load',)), ('Slice', (1, 2, 1, 5), ('Name', (1, 2, 1, 3), 'b', ('Load',)), ('Name', (1, 4, 1, 5), 'c', ('Load',)), None), ('Load',))),
+('Expression', ('Name', (1, 0, 1, 1), 'v', ('Load',))),
+('Expression', ('List', (1, 0, 1, 7), [('Constant', (1, 1, 1, 2), 1, None), ('Constant', (1, 3, 1, 4), 2, None), ('Constant', (1, 5, 1, 6), 3, None)], ('Load',))),
+('Expression', ('List', (1, 0, 1, 2), [], ('Load',))),
+('Expression', ('Tuple', (1, 0, 1, 5), [('Constant', (1, 0, 1, 1), 1, None), ('Constant', (1, 2, 1, 3), 2, None), ('Constant', (1, 4, 1, 5), 3, None)], ('Load',))),
+('Expression', ('Tuple', (1, 0, 1, 7), [('Constant', (1, 1, 1, 2), 1, None), ('Constant', (1, 3, 1, 4), 2, None), ('Constant', (1, 5, 1, 6), 3, None)], ('Load',))),
+('Expression', ('Tuple', (1, 0, 1, 2), [], ('Load',))),
+('Expression', ('Call', (1, 0, 1, 17), ('Attribute', (1, 0, 1, 7), ('Attribute', (1, 0, 1, 5), ('Attribute', (1, 0, 1, 3), ('Name', (1, 0, 1, 1), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',)), 'd', ('Load',)), [('Subscript', (1, 8, 1, 16), ('Attribute', (1, 8, 1, 11), ('Name', (1, 8, 1, 9), 'a', ('Load',)), 'b', ('Load',)), ('Slice', (1, 12, 1, 15), ('Constant', (1, 12, 1, 13), 1, None), ('Constant', (1, 14, 1, 15), 2, None), None), ('Load',))], [])),
 ]
 main()
diff --git a/Lib/test/test_asynchat.py b/Lib/test/test_asynchat.py
index 14c0ec4..004d368 100644
--- a/Lib/test/test_asynchat.py
+++ b/Lib/test/test_asynchat.py
@@ -1,6 +1,7 @@
 # test asynchat
 
 from test import support
+from test.support import socket_helper
 
 import asynchat
 import asyncore
@@ -12,9 +13,8 @@
 import unittest
 import unittest.mock
 
-HOST = support.HOST
+HOST = socket_helper.HOST
 SERVER_QUIT = b'QUIT\n'
-TIMEOUT = 3.0
 
 
 class echo_server(threading.Thread):
@@ -26,7 +26,7 @@
         threading.Thread.__init__(self)
         self.event = event
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.port = support.bind_port(self.sock)
+        self.port = socket_helper.bind_port(self.sock)
         # This will be set if the client wants us to wait before echoing
         # data back.
         self.start_resend_event = None
@@ -73,14 +73,14 @@
         self.set_terminator(terminator)
         self.buffer = b""
 
-        def handle_connect(self):
-            pass
+    def handle_connect(self):
+        pass
 
-        if sys.platform == 'darwin':
-            # select.poll returns a select.POLLHUP at the end of the tests
-            # on darwin, so just ignore it
-            def handle_expt(self):
-                pass
+    if sys.platform == 'darwin':
+        # select.poll returns a select.POLLHUP at the end of the tests
+        # on darwin, so just ignore it
+        def handle_expt(self):
+            pass
 
     def collect_incoming_data(self, data):
         self.buffer += data
@@ -122,7 +122,7 @@
         c.push(b"I'm not dead yet!" + term)
         c.push(SERVER_QUIT)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents, [b"hello world", b"I'm not dead yet!"])
 
@@ -153,7 +153,7 @@
         c.push(data)
         c.push(SERVER_QUIT)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents, [data[:termlen]])
 
@@ -173,7 +173,7 @@
         c.push(data)
         c.push(SERVER_QUIT)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents, [])
         self.assertEqual(c.buffer, data)
@@ -185,7 +185,7 @@
         p = asynchat.simple_producer(data+SERVER_QUIT, buffer_size=8)
         c.push_with_producer(p)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents, [b"hello world", b"I'm not dead yet!"])
 
@@ -195,7 +195,7 @@
         data = b"hello world\nI'm not dead yet!\n"
         c.push_with_producer(data+SERVER_QUIT)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents, [b"hello world", b"I'm not dead yet!"])
 
@@ -206,7 +206,7 @@
         c.push(b"hello world\n\nI'm not dead yet!\n")
         c.push(SERVER_QUIT)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents,
                          [b"hello world", b"", b"I'm not dead yet!"])
@@ -225,7 +225,7 @@
         # where the server echoes all of its data before we can check that it
         # got any down below.
         s.start_resend_event.set()
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
 
         self.assertEqual(c.contents, [])
         # the server might have been able to send a byte or two back, but this
@@ -246,7 +246,7 @@
         self.assertRaises(TypeError, c.push, 'unicode')
         c.push(SERVER_QUIT)
         asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01)
-        support.join_thread(s, timeout=TIMEOUT)
+        support.join_thread(s)
         self.assertEqual(c.contents, [b'bytes', b'bytes', b'bytes'])
 
 
diff --git a/Lib/test/test_asyncio/functional.py b/Lib/test/test_asyncio/functional.py
index 70cd140..5cd0659 100644
--- a/Lib/test/test_asyncio/functional.py
+++ b/Lib/test/test_asyncio/functional.py
@@ -7,6 +7,7 @@
 import socket
 import tempfile
 import threading
+from test import support
 
 
 class FunctionalTestCaseMixin:
@@ -49,7 +50,7 @@
     def tcp_server(self, server_prog, *,
                    family=socket.AF_INET,
                    addr=None,
-                   timeout=5,
+                   timeout=support.LOOPBACK_TIMEOUT,
                    backlog=1,
                    max_clients=10):
 
@@ -72,7 +73,7 @@
 
     def tcp_client(self, client_prog,
                    family=socket.AF_INET,
-                   timeout=10):
+                   timeout=support.LOOPBACK_TIMEOUT):
 
         sock = socket.socket(family, socket.SOCK_STREAM)
 
@@ -225,7 +226,7 @@
     def run(self):
         try:
             with self._sock:
-                self._sock.setblocking(0)
+                self._sock.setblocking(False)
                 self._run()
         finally:
             self._s1.close()
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index 0f9e3d0..533d5cc 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -3,7 +3,6 @@
 import concurrent.futures
 import errno
 import math
-import os
 import socket
 import sys
 import threading
@@ -17,6 +16,7 @@
 from test.test_asyncio import utils as test_utils
 from test import support
 from test.support.script_helper import assert_python_ok
+from test.support import socket_helper
 
 
 MOCK_ANY = mock.ANY
@@ -91,7 +91,7 @@
         self.assertIsNone(
             base_events._ipaddr_info('1.2.3.4', 1, UNSPEC, 0, 0))
 
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             # IPv4 address with family IPv6.
             self.assertIsNone(
                 base_events._ipaddr_info('1.2.3.4', 1, INET6, STREAM, TCP))
@@ -216,6 +216,9 @@
                 raise NotImplementedError(
                     'cannot submit into a dummy executor')
 
+        self.loop._process_events = mock.Mock()
+        self.loop._write_to_self = mock.Mock()
+
         executor = DummyExecutor()
         self.loop.set_default_executor(executor)
         self.assertIs(executor, self.loop._default_executor)
@@ -226,6 +229,9 @@
         with self.assertWarns(DeprecationWarning):
             self.loop.set_default_executor(executor)
 
+        # Avoid cleaning up the executor mock
+        self.loop._default_executor = None
+
     def test_call_soon(self):
         def cb():
             pass
@@ -1150,7 +1156,7 @@
             srv.close()
             self.loop.run_until_complete(srv.wait_closed())
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'no IPv6 support')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'no IPv6 support')
     def test_create_server_ipv6(self):
         async def main():
             with self.assertWarns(DeprecationWarning):
@@ -1282,7 +1288,7 @@
             t.close()
             test_utils.run_briefly(self.loop)  # allow transport to close
 
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             sock.family = socket.AF_INET6
             coro = self.loop.create_connection(asyncio.Protocol, '::1', 80)
             t, p = self.loop.run_until_complete(coro)
@@ -1301,7 +1307,7 @@
                 t.close()
                 test_utils.run_briefly(self.loop)  # allow transport to close
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'no IPv6 support')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'no IPv6 support')
     @unittest.skipIf(sys.platform.startswith('aix'),
                     "bpo-25545: IPv6 scope id and getaddrinfo() behave differently on AIX")
     @patch_socket
@@ -1633,7 +1639,7 @@
         self.assertRaises(
             OSError, self.loop.run_until_complete, coro)
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 not supported or enabled')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 not supported or enabled')
     def test_create_datagram_endpoint_no_matching_family(self):
         coro = self.loop.create_datagram_endpoint(
             asyncio.DatagramProtocol,
@@ -1694,7 +1700,7 @@
         self.loop.run_until_complete(protocol.done)
         self.assertEqual('CLOSED', protocol.state)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_create_datagram_endpoint_existing_sock_unix(self):
         with test_utils.unix_socket_path() as path:
             sock = socket.socket(socket.AF_UNIX, type=socket.SOCK_DGRAM)
@@ -2009,7 +2015,7 @@
         sock = self.make_socket()
         proto = self.MyProto(self.loop)
         server = self.run_loop(self.loop.create_server(
-            lambda: proto, support.HOST, 0, family=socket.AF_INET))
+            lambda: proto, socket_helper.HOST, 0, family=socket.AF_INET))
         addr = server.sockets[0].getsockname()
 
         for _ in range(10):
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index 85838f1..fa6c49d 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -32,6 +32,8 @@
 from asyncio import selector_events
 from test.test_asyncio import utils as test_utils
 from test import support
+from test.support import socket_helper
+from test.support import ALWAYS_EQ, LARGEST, SMALLEST
 
 
 def tearDownModule():
@@ -291,11 +293,8 @@
             self.loop.stop()
 
         self.loop.call_later(0.1, callback, 'hello world')
-        t0 = time.monotonic()
         self.loop.run_forever()
-        t1 = time.monotonic()
         self.assertEqual(results, ['hello world'])
-        self.assertTrue(0.08 <= t1-t0 <= 0.8, t1-t0)
 
     def test_call_soon(self):
         results = []
@@ -364,6 +363,8 @@
 
         f2 = self.loop.run_in_executor(None, run)
         f2.cancel()
+        self.loop.run_until_complete(
+                self.loop.shutdown_default_executor())
         self.loop.close()
         self.loop.call_soon = patched_call_soon
         self.loop.call_soon_threadsafe = patched_call_soon
@@ -514,7 +515,7 @@
                 lambda: MyProto(loop=self.loop), *httpd.address)
             self._basetest_create_connection(conn_fut)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_create_unix_connection(self):
         # Issue #20682: On Mac OS X Tiger, getsockname() returns a
         # zero-length address for UNIX socket.
@@ -616,7 +617,7 @@
             self._test_create_ssl_connection(httpd, create_connection,
                                              peername=httpd.address)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     @unittest.skipIf(ssl is None, 'No ssl module')
     def test_create_ssl_unix_connection(self):
         # Issue #20682: On Mac OS X Tiger, getsockname() returns a
@@ -635,7 +636,7 @@
 
     def test_create_connection_local_addr(self):
         with test_utils.run_test_server() as httpd:
-            port = support.find_unused_port()
+            port = socket_helper.find_unused_port()
             f = self.loop.create_connection(
                 lambda: MyProto(loop=self.loop),
                 *httpd.address, local_addr=(httpd.address[0], port))
@@ -702,7 +703,7 @@
         proto.transport.close()
         lsock.close()
 
-        support.join_thread(thread, timeout=1)
+        support.join_thread(thread)
         self.assertFalse(thread.is_alive())
         self.assertEqual(proto.state, 'CLOSED')
         self.assertEqual(proto.nbytes, len(message))
@@ -727,7 +728,7 @@
         sock = socket.socket()
         self.addCleanup(sock.close)
         coro = self.loop.connect_accepted_socket(
-            MyProto, sock, ssl_handshake_timeout=1)
+            MyProto, sock, ssl_handshake_timeout=support.LOOPBACK_TIMEOUT)
         with self.assertRaisesRegex(
                 ValueError,
                 'ssl_handshake_timeout is only meaningful with ssl'):
@@ -840,7 +841,7 @@
 
         return server, path
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_create_unix_server(self):
         proto = MyProto(loop=self.loop)
         server, path = self._make_unix_server(lambda: proto)
@@ -932,7 +933,7 @@
         # stop serving
         server.close()
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     @unittest.skipIf(ssl is None, 'No ssl module')
     def test_create_unix_server_ssl(self):
         proto = MyProto(loop=self.loop)
@@ -992,7 +993,7 @@
         self.assertIsNone(proto.transport)
         server.close()
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     @unittest.skipIf(ssl is None, 'No ssl module')
     def test_create_unix_server_ssl_verify_failed(self):
         proto = MyProto(loop=self.loop)
@@ -1052,7 +1053,7 @@
         self.assertIsNone(proto.transport)
         server.close()
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     @unittest.skipIf(ssl is None, 'No ssl module')
     def test_create_unix_server_ssl_verified(self):
         proto = MyProto(loop=self.loop)
@@ -1071,6 +1072,7 @@
                                                ssl=sslcontext_client,
                                                server_hostname='localhost')
         client, pr = self.loop.run_until_complete(f_c)
+        self.loop.run_until_complete(proto.connected)
 
         # close connection
         proto.transport.close()
@@ -1096,6 +1098,7 @@
                                           ssl=sslcontext_client,
                                           server_hostname='localhost')
         client, pr = self.loop.run_until_complete(f_c)
+        self.loop.run_until_complete(proto.connected)
 
         # extra info is available
         self.check_ssl_extra_info(client, peername=(host, port),
@@ -1145,7 +1148,7 @@
 
         server.close()
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 not supported or enabled')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 not supported or enabled')
     def test_create_server_dual_stack(self):
         f_proto = self.loop.create_future()
 
@@ -1157,7 +1160,7 @@
         try_count = 0
         while True:
             try:
-                port = support.find_unused_port()
+                port = socket_helper.find_unused_port()
                 f = self.loop.create_server(TestMyProto, host=None, port=port)
                 server = self.loop.run_until_complete(f)
             except OSError as ex:
@@ -1255,7 +1258,7 @@
     def test_create_datagram_endpoint(self):
         self._test_create_datagram_endpoint(('127.0.0.1', 0), socket.AF_INET)
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 not supported or enabled')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 not supported or enabled')
     def test_create_datagram_endpoint_ipv6(self):
         self._test_create_datagram_endpoint(('::1', 0), socket.AF_INET6)
 
@@ -1487,12 +1490,12 @@
             return len(data)
 
         test_utils.run_until(self.loop, lambda: reader(data) >= 1,
-                             timeout=10)
+                             timeout=support.SHORT_TIMEOUT)
         self.assertEqual(b'1', data)
 
         transport.write(b'2345')
         test_utils.run_until(self.loop, lambda: reader(data) >= 5,
-                             timeout=10)
+                             timeout=support.SHORT_TIMEOUT)
         self.assertEqual(b'12345', data)
         self.assertEqual('CONNECTED', proto.state)
 
@@ -1543,27 +1546,29 @@
             return len(data)
 
         write_transport.write(b'1')
-        test_utils.run_until(self.loop, lambda: reader(data) >= 1, timeout=10)
+        test_utils.run_until(self.loop, lambda: reader(data) >= 1,
+                             timeout=support.SHORT_TIMEOUT)
         self.assertEqual(b'1', data)
         self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state)
         self.assertEqual('CONNECTED', write_proto.state)
 
         os.write(master, b'a')
         test_utils.run_until(self.loop, lambda: read_proto.nbytes >= 1,
-                             timeout=10)
+                             timeout=support.SHORT_TIMEOUT)
         self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state)
         self.assertEqual(1, read_proto.nbytes)
         self.assertEqual('CONNECTED', write_proto.state)
 
         write_transport.write(b'2345')
-        test_utils.run_until(self.loop, lambda: reader(data) >= 5, timeout=10)
+        test_utils.run_until(self.loop, lambda: reader(data) >= 5,
+                             timeout=support.SHORT_TIMEOUT)
         self.assertEqual(b'12345', data)
         self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state)
         self.assertEqual('CONNECTED', write_proto.state)
 
         os.write(master, b'bcde')
         test_utils.run_until(self.loop, lambda: read_proto.nbytes >= 5,
-                             timeout=10)
+                             timeout=support.SHORT_TIMEOUT)
         self.assertEqual(['INITIAL', 'CONNECTED'], read_proto.state)
         self.assertEqual(5, read_proto.nbytes)
         self.assertEqual('CONNECTED', write_proto.state)
@@ -2394,6 +2399,28 @@
         self.assertIs(NotImplemented, h1.__eq__(h3))
         self.assertIs(NotImplemented, h1.__ne__(h3))
 
+        with self.assertRaises(TypeError):
+            h1 < ()
+        with self.assertRaises(TypeError):
+            h1 > ()
+        with self.assertRaises(TypeError):
+            h1 <= ()
+        with self.assertRaises(TypeError):
+            h1 >= ()
+        self.assertFalse(h1 == ())
+        self.assertTrue(h1 != ())
+
+        self.assertTrue(h1 == ALWAYS_EQ)
+        self.assertFalse(h1 != ALWAYS_EQ)
+        self.assertTrue(h1 < LARGEST)
+        self.assertFalse(h1 > LARGEST)
+        self.assertTrue(h1 <= LARGEST)
+        self.assertFalse(h1 >= LARGEST)
+        self.assertFalse(h1 < SMALLEST)
+        self.assertTrue(h1 > SMALLEST)
+        self.assertFalse(h1 <= SMALLEST)
+        self.assertTrue(h1 >= SMALLEST)
+
 
 class AbstractEventLoopTests(unittest.TestCase):
 
diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py
index ee5edd5..ec00896 100644
--- a/Lib/test/test_asyncio/test_futures.py
+++ b/Lib/test/test_asyncio/test_futures.py
@@ -201,6 +201,27 @@
         self.assertFalse(fut.cancelled())
         self.assertFalse(fut.done())
 
+    def test_future_cancel_message_getter(self):
+        f = self._new_future(loop=self.loop)
+        self.assertTrue(hasattr(f, '_cancel_message'))
+        self.assertEqual(f._cancel_message, None)
+
+        f.cancel('my message')
+        with self.assertRaises(asyncio.CancelledError):
+            self.loop.run_until_complete(f)
+        self.assertEqual(f._cancel_message, 'my message')
+
+    def test_future_cancel_message_setter(self):
+        f = self._new_future(loop=self.loop)
+        f.cancel('my message')
+        f._cancel_message = 'my new message'
+        self.assertEqual(f._cancel_message, 'my new message')
+
+        # Also check that the value is used for cancel().
+        with self.assertRaises(asyncio.CancelledError):
+            self.loop.run_until_complete(f)
+        self.assertEqual(f._cancel_message, 'my new message')
+
     def test_cancel(self):
         f = self._new_future(loop=self.loop)
         self.assertTrue(f.cancel())
diff --git a/Lib/test/test_asyncio/test_futures2.py b/Lib/test/test_asyncio/test_futures2.py
new file mode 100644
index 0000000..13dbc70
--- /dev/null
+++ b/Lib/test/test_asyncio/test_futures2.py
@@ -0,0 +1,18 @@
+# IsolatedAsyncioTestCase based tests
+import asyncio
+import unittest
+
+
+class FutureTests(unittest.IsolatedAsyncioTestCase):
+    async def test_recursive_repr_for_pending_tasks(self):
+        # The call crashes if the guard for recursive call
+        # in base_futures:_future_repr_info is absent
+        # See Also: https://bugs.python.org/issue42183
+
+        async def func():
+            return asyncio.all_tasks()
+
+        # The repr() call should not raise RecursiveError at first.
+        # The check for returned string is not very reliable but
+        # exact comparison for the whole string is even weaker.
+        self.assertIn('...', repr(await asyncio.wait_for(func(), timeout=10)))
diff --git a/Lib/test/test_asyncio/test_locks.py b/Lib/test/test_asyncio/test_locks.py
index 9468e74..8c93fae 100644
--- a/Lib/test/test_asyncio/test_locks.py
+++ b/Lib/test/test_asyncio/test_locks.py
@@ -47,13 +47,7 @@
         self.assertTrue(repr(lock).endswith('[unlocked]>'))
         self.assertTrue(RGX_REPR.match(repr(lock)))
 
-        with self.assertWarns(DeprecationWarning):
-            @asyncio.coroutine
-            def acquire_lock():
-                with self.assertWarns(DeprecationWarning):
-                    yield from lock
-
-        self.loop.run_until_complete(acquire_lock())
+        self.loop.run_until_complete(lock.acquire())
         self.assertTrue(repr(lock).endswith('[locked]>'))
         self.assertTrue(RGX_REPR.match(repr(lock)))
 
@@ -61,18 +55,16 @@
         with self.assertWarns(DeprecationWarning):
             lock = asyncio.Lock(loop=self.loop)
 
-
             @asyncio.coroutine
             def acquire_lock():
-                with self.assertWarns(DeprecationWarning):
-                    return (yield from lock)
+                return (yield from lock)
 
-        res = self.loop.run_until_complete(acquire_lock())
+        with self.assertRaisesRegex(
+            TypeError,
+            "object is not iterable"
+        ):
+            self.loop.run_until_complete(acquire_lock())
 
-        self.assertTrue(res)
-        self.assertTrue(lock.locked())
-
-        lock.release()
         self.assertFalse(lock.locked())
 
     def test_lock_by_with_statement(self):
@@ -90,13 +82,13 @@
             def test(lock):
                 yield from asyncio.sleep(0.01)
                 self.assertFalse(lock.locked())
-                with self.assertWarns(DeprecationWarning):
-                    with (yield from lock) as _lock:
-                        self.assertIs(_lock, None)
-                        self.assertTrue(lock.locked())
-                        yield from asyncio.sleep(0.01)
-                        self.assertTrue(lock.locked())
-                    self.assertFalse(lock.locked())
+                with self.assertRaisesRegex(
+                    TypeError,
+                    "object is not iterable"
+                ):
+                    with (yield from lock):
+                        pass
+                self.assertFalse(lock.locked())
 
         for primitive in primitives:
             loop.run_until_complete(test(primitive))
@@ -302,52 +294,16 @@
         self.assertFalse(lock.locked())
 
     def test_context_manager(self):
-        with self.assertWarns(DeprecationWarning):
-            lock = asyncio.Lock(loop=self.loop)
+        async def f():
+            lock = asyncio.Lock()
+            self.assertFalse(lock.locked())
 
-            @asyncio.coroutine
-            def acquire_lock():
-                with self.assertWarns(DeprecationWarning):
-                    return (yield from lock)
+            async with lock:
+                self.assertTrue(lock.locked())
 
-        with self.loop.run_until_complete(acquire_lock()):
-            self.assertTrue(lock.locked())
+            self.assertFalse(lock.locked())
 
-        self.assertFalse(lock.locked())
-
-    def test_context_manager_cant_reuse(self):
-        with self.assertWarns(DeprecationWarning):
-            lock = asyncio.Lock(loop=self.loop)
-
-            @asyncio.coroutine
-            def acquire_lock():
-                with self.assertWarns(DeprecationWarning):
-                    return (yield from lock)
-
-        # This spells "yield from lock" outside a generator.
-        cm = self.loop.run_until_complete(acquire_lock())
-        with cm:
-            self.assertTrue(lock.locked())
-
-        self.assertFalse(lock.locked())
-
-        with self.assertRaises(AttributeError):
-            with cm:
-                pass
-
-    def test_context_manager_no_yield(self):
-        with self.assertWarns(DeprecationWarning):
-            lock = asyncio.Lock(loop=self.loop)
-
-        try:
-            with lock:
-                self.fail('RuntimeError is not raised in with expression')
-        except RuntimeError as err:
-            self.assertEqual(
-                str(err),
-                '"yield from" should be used as context manager expression')
-
-        self.assertFalse(lock.locked())
+        self.loop.run_until_complete(f())
 
 
 class EventTests(test_utils.TestCase):
@@ -809,33 +765,14 @@
         self.assertTrue(RGX_REPR.match(repr(cond)))
 
     def test_context_manager(self):
-        with self.assertWarns(DeprecationWarning):
-            cond = asyncio.Condition(loop=self.loop)
+        async def f():
+            cond = asyncio.Condition()
+            self.assertFalse(cond.locked())
+            async with cond:
+                self.assertTrue(cond.locked())
+            self.assertFalse(cond.locked())
 
-        with self.assertWarns(DeprecationWarning):
-            @asyncio.coroutine
-            def acquire_cond():
-                with self.assertWarns(DeprecationWarning):
-                    return (yield from cond)
-
-        with self.loop.run_until_complete(acquire_cond()):
-            self.assertTrue(cond.locked())
-
-        self.assertFalse(cond.locked())
-
-    def test_context_manager_no_yield(self):
-        with self.assertWarns(DeprecationWarning):
-            cond = asyncio.Condition(loop=self.loop)
-
-        try:
-            with cond:
-                self.fail('RuntimeError is not raised in with expression')
-        except RuntimeError as err:
-            self.assertEqual(
-                str(err),
-                '"yield from" should be used as context manager expression')
-
-        self.assertFalse(cond.locked())
+        self.loop.run_until_complete(f())
 
     def test_explicit_lock(self):
         with self.assertWarns(DeprecationWarning):
@@ -920,16 +857,14 @@
         with self.assertWarns(DeprecationWarning):
             @asyncio.coroutine
             def acquire_lock():
-                with self.assertWarns(DeprecationWarning):
-                    return (yield from sem)
+                return (yield from sem)
 
-        res = self.loop.run_until_complete(acquire_lock())
+        with self.assertRaisesRegex(
+            TypeError,
+            "'Semaphore' object is not iterable",
+        ):
+            self.loop.run_until_complete(acquire_lock())
 
-        self.assertTrue(res)
-        self.assertTrue(sem.locked())
-        self.assertEqual(0, sem._value)
-
-        sem.release()
         self.assertFalse(sem.locked())
         self.assertEqual(1, sem._value)
 
@@ -1064,38 +999,6 @@
         sem.release()
         self.assertFalse(sem.locked())
 
-    def test_context_manager(self):
-        with self.assertWarns(DeprecationWarning):
-            sem = asyncio.Semaphore(2, loop=self.loop)
-
-            @asyncio.coroutine
-            def acquire_lock():
-                with self.assertWarns(DeprecationWarning):
-                    return (yield from sem)
-
-        with self.loop.run_until_complete(acquire_lock()):
-            self.assertFalse(sem.locked())
-            self.assertEqual(1, sem._value)
-
-            with self.loop.run_until_complete(acquire_lock()):
-                self.assertTrue(sem.locked())
-
-        self.assertEqual(2, sem._value)
-
-    def test_context_manager_no_yield(self):
-        with self.assertWarns(DeprecationWarning):
-            sem = asyncio.Semaphore(2, loop=self.loop)
-
-        try:
-            with sem:
-                self.fail('RuntimeError is not raised in with expression')
-        except RuntimeError as err:
-            self.assertEqual(
-                str(err),
-                '"yield from" should be used as context manager expression')
-
-        self.assertEqual(2, sem._value)
-
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_asyncio/test_pep492.py b/Lib/test/test_asyncio/test_pep492.py
index a1f27dd..c5e3a5c 100644
--- a/Lib/test/test_asyncio/test_pep492.py
+++ b/Lib/test/test_asyncio/test_pep492.py
@@ -77,13 +77,12 @@
         async def test(lock):
             await asyncio.sleep(0.01)
             self.assertFalse(lock.locked())
-            with self.assertWarns(DeprecationWarning):
-                with await lock as _lock:
-                    self.assertIs(_lock, None)
-                    self.assertTrue(lock.locked())
-                    await asyncio.sleep(0.01)
-                    self.assertTrue(lock.locked())
-                self.assertFalse(lock.locked())
+            with self.assertRaisesRegex(
+                TypeError,
+                "can't be used in 'await' expression"
+            ):
+                with await lock:
+                    pass
 
         for primitive in primitives:
             self.loop.run_until_complete(test(primitive))
diff --git a/Lib/test/test_asyncio/test_proactor_events.py b/Lib/test/test_asyncio/test_proactor_events.py
index 007039a..451f86a 100644
--- a/Lib/test/test_asyncio/test_proactor_events.py
+++ b/Lib/test/test_asyncio/test_proactor_events.py
@@ -13,6 +13,7 @@
 from asyncio.proactor_events import _ProactorDuplexPipeTransport
 from asyncio.proactor_events import _ProactorDatagramTransport
 from test import support
+from test.support import socket_helper
 from test.test_asyncio import utils as test_utils
 
 
@@ -736,6 +737,7 @@
 
     def test_loop_self_reading_fut(self):
         fut = mock.Mock()
+        self.loop._self_reading_future = fut
         self.loop._loop_self_reading(fut)
         self.assertTrue(fut.result.called)
         self.proactor.recv.assert_called_with(self.ssock, 4096)
@@ -950,7 +952,7 @@
     def prepare(self):
         sock = self.make_socket()
         proto = self.MyProto(self.loop)
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         srv_sock = self.make_socket(cleanup=False)
         srv_sock.bind(('127.0.0.1', port))
         server = self.run_loop(self.loop.create_server(
diff --git a/Lib/test/test_asyncio/test_runners.py b/Lib/test/test_asyncio/test_runners.py
index 3b58dde..b9ae02d 100644
--- a/Lib/test/test_asyncio/test_runners.py
+++ b/Lib/test/test_asyncio/test_runners.py
@@ -87,6 +87,9 @@
 
         asyncio.run(main(False))
         asyncio.run(main(True), debug=True)
+        with mock.patch('asyncio.coroutines._is_debug_mode', lambda: True):
+            asyncio.run(main(True))
+            asyncio.run(main(False), debug=False)
 
     def test_asyncio_run_from_running_loop(self):
         async def main():
diff --git a/Lib/test/test_asyncio/test_sendfile.py b/Lib/test/test_asyncio/test_sendfile.py
index 3b7f784..1b1af08 100644
--- a/Lib/test/test_asyncio/test_sendfile.py
+++ b/Lib/test/test_asyncio/test_sendfile.py
@@ -10,6 +10,7 @@
 from asyncio import constants
 from unittest import mock
 from test import support
+from test.support import socket_helper
 from test.test_asyncio import utils as test_utils
 
 try:
@@ -163,9 +164,9 @@
 
     def prepare_socksendfile(self):
         proto = MyProto(self.loop)
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         srv_sock = self.make_socket(cleanup=False)
-        srv_sock.bind((support.HOST, port))
+        srv_sock.bind((socket_helper.HOST, port))
         server = self.run_loop(self.loop.create_server(
             lambda: proto, sock=srv_sock))
         self.reduce_receive_buffer_size(srv_sock)
@@ -240,7 +241,7 @@
     # Note: sendfile via SSL transport is equal to sendfile fallback
 
     def prepare_sendfile(self, *, is_ssl=False, close_after=0):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         srv_proto = MySendfileProto(loop=self.loop,
                                     close_after=close_after)
         if is_ssl:
@@ -252,17 +253,17 @@
             srv_ctx = None
             cli_ctx = None
         srv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        srv_sock.bind((support.HOST, port))
+        srv_sock.bind((socket_helper.HOST, port))
         server = self.run_loop(self.loop.create_server(
             lambda: srv_proto, sock=srv_sock, ssl=srv_ctx))
         self.reduce_receive_buffer_size(srv_sock)
 
         if is_ssl:
-            server_hostname = support.HOST
+            server_hostname = socket_helper.HOST
         else:
             server_hostname = None
         cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        cli_sock.connect((support.HOST, port))
+        cli_sock.connect((socket_helper.HOST, port))
 
         cli_proto = MySendfileProto(loop=self.loop)
         tr, pr = self.run_loop(self.loop.create_connection(
@@ -444,6 +445,12 @@
         self.assertEqual(srv_proto.data, self.DATA)
         self.assertEqual(self.file.tell(), len(self.DATA))
 
+    # On Solaris, lowering SO_RCVBUF on a TCP connection after it has been
+    # established has no effect. Due to its age, this bug affects both Oracle
+    # Solaris as well as all other OpenSolaris forks (unless they fixed it
+    # themselves).
+    @unittest.skipIf(sys.platform.startswith('sunos'),
+                     "Doesn't work on Solaris")
     def test_sendfile_close_peer_in_the_middle_of_receiving(self):
         srv_proto, cli_proto = self.prepare_sendfile(close_after=1024)
         with self.assertRaises(ConnectionError):
diff --git a/Lib/test/test_asyncio/test_server.py b/Lib/test/test_asyncio/test_server.py
index d47ccc0..2de4dca 100644
--- a/Lib/test/test_asyncio/test_server.py
+++ b/Lib/test/test_asyncio/test_server.py
@@ -3,7 +3,7 @@
 import threading
 import unittest
 
-from test import support
+from test.support import socket_helper
 from test.test_asyncio import utils as test_utils
 from test.test_asyncio import functional as func_tests
 
@@ -47,7 +47,7 @@
 
         with self.assertWarns(DeprecationWarning):
             srv = self.loop.run_until_complete(asyncio.start_server(
-                serve, support.HOSTv4, 0, loop=self.loop, start_serving=False))
+                serve, socket_helper.HOSTv4, 0, loop=self.loop, start_serving=False))
 
         self.assertFalse(srv.is_serving())
 
@@ -73,7 +73,7 @@
     def new_loop(self):
         return asyncio.SelectorEventLoop()
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_start_unix_server_1(self):
         HELLO_MSG = b'1' * 1024 * 5 + b'\n'
         started = threading.Event()
diff --git a/Lib/test/test_asyncio/test_sock_lowlevel.py b/Lib/test/test_asyncio/test_sock_lowlevel.py
index 89c2af9..d8a5df8 100644
--- a/Lib/test/test_asyncio/test_sock_lowlevel.py
+++ b/Lib/test/test_asyncio/test_sock_lowlevel.py
@@ -1,10 +1,14 @@
 import socket
+import time
 import asyncio
 import sys
+import unittest
+
 from asyncio import proactor_events
 from itertools import cycle, islice
 from test.test_asyncio import utils as test_utils
 from test import support
+from test.support import socket_helper
 
 
 class MyProto(asyncio.Protocol):
@@ -121,6 +125,150 @@
             sock = socket.socket()
             self._basetest_sock_recv_into(httpd, sock)
 
+    async def _basetest_sock_recv_racing(self, httpd, sock):
+        sock.setblocking(False)
+        await self.loop.sock_connect(sock, httpd.address)
+
+        task = asyncio.create_task(self.loop.sock_recv(sock, 1024))
+        await asyncio.sleep(0)
+        task.cancel()
+
+        asyncio.create_task(
+            self.loop.sock_sendall(sock, b'GET / HTTP/1.0\r\n\r\n'))
+        data = await self.loop.sock_recv(sock, 1024)
+        # consume data
+        await self.loop.sock_recv(sock, 1024)
+
+        self.assertTrue(data.startswith(b'HTTP/1.0 200 OK'))
+
+    async def _basetest_sock_recv_into_racing(self, httpd, sock):
+        sock.setblocking(False)
+        await self.loop.sock_connect(sock, httpd.address)
+
+        data = bytearray(1024)
+        with memoryview(data) as buf:
+            task = asyncio.create_task(
+                self.loop.sock_recv_into(sock, buf[:1024]))
+            await asyncio.sleep(0)
+            task.cancel()
+
+            task = asyncio.create_task(
+                self.loop.sock_sendall(sock, b'GET / HTTP/1.0\r\n\r\n'))
+            nbytes = await self.loop.sock_recv_into(sock, buf[:1024])
+            # consume data
+            await self.loop.sock_recv_into(sock, buf[nbytes:])
+            self.assertTrue(data.startswith(b'HTTP/1.0 200 OK'))
+
+        await task
+
+    async def _basetest_sock_send_racing(self, listener, sock):
+        listener.bind(('127.0.0.1', 0))
+        listener.listen(1)
+
+        # make connection
+        sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024)
+        sock.setblocking(False)
+        task = asyncio.create_task(
+            self.loop.sock_connect(sock, listener.getsockname()))
+        await asyncio.sleep(0)
+        server = listener.accept()[0]
+        server.setblocking(False)
+
+        with server:
+            await task
+
+            # fill the buffer until sending 5 chars would block
+            size = 8192
+            while size >= 4:
+                with self.assertRaises(BlockingIOError):
+                    while True:
+                        sock.send(b' ' * size)
+                size = int(size / 2)
+
+            # cancel a blocked sock_sendall
+            task = asyncio.create_task(
+                self.loop.sock_sendall(sock, b'hello'))
+            await asyncio.sleep(0)
+            task.cancel()
+
+            # receive everything that is not a space
+            async def recv_all():
+                rv = b''
+                while True:
+                    buf = await self.loop.sock_recv(server, 8192)
+                    if not buf:
+                        return rv
+                    rv += buf.strip()
+            task = asyncio.create_task(recv_all())
+
+            # immediately make another sock_sendall call
+            await self.loop.sock_sendall(sock, b'world')
+            sock.shutdown(socket.SHUT_WR)
+            data = await task
+            # ProactorEventLoop could deliver hello, so endswith is necessary
+            self.assertTrue(data.endswith(b'world'))
+
+    # After the first connect attempt before the listener is ready,
+    # the socket needs time to "recover" to make the next connect call.
+    # On Linux, a second retry will do. On Windows, the waiting time is
+    # unpredictable; and on FreeBSD the socket may never come back
+    # because it's a loopback address. Here we'll just retry for a few
+    # times, and have to skip the test if it's not working. See also:
+    # https://stackoverflow.com/a/54437602/3316267
+    # https://lists.freebsd.org/pipermail/freebsd-current/2005-May/049876.html
+    async def _basetest_sock_connect_racing(self, listener, sock):
+        listener.bind(('127.0.0.1', 0))
+        addr = listener.getsockname()
+        sock.setblocking(False)
+
+        task = asyncio.create_task(self.loop.sock_connect(sock, addr))
+        await asyncio.sleep(0)
+        task.cancel()
+
+        listener.listen(1)
+
+        skip_reason = "Max retries reached"
+        for i in range(128):
+            try:
+                await self.loop.sock_connect(sock, addr)
+            except ConnectionRefusedError as e:
+                skip_reason = e
+            except OSError as e:
+                skip_reason = e
+
+                # Retry only for this error:
+                # [WinError 10022] An invalid argument was supplied
+                if getattr(e, 'winerror', 0) != 10022:
+                    break
+            else:
+                # success
+                return
+
+        self.skipTest(skip_reason)
+
+    def test_sock_client_racing(self):
+        with test_utils.run_test_server() as httpd:
+            sock = socket.socket()
+            with sock:
+                self.loop.run_until_complete(asyncio.wait_for(
+                    self._basetest_sock_recv_racing(httpd, sock), 10))
+            sock = socket.socket()
+            with sock:
+                self.loop.run_until_complete(asyncio.wait_for(
+                    self._basetest_sock_recv_into_racing(httpd, sock), 10))
+        listener = socket.socket()
+        sock = socket.socket()
+        with listener, sock:
+            self.loop.run_until_complete(asyncio.wait_for(
+                self._basetest_sock_send_racing(listener, sock), 10))
+
+    def test_sock_client_connect_racing(self):
+        listener = socket.socket()
+        sock = socket.socket()
+        with listener, sock:
+            self.loop.run_until_complete(asyncio.wait_for(
+                self._basetest_sock_connect_racing(listener, sock), 10))
+
     async def _basetest_huge_content(self, address):
         sock = socket.socket()
         sock.setblocking(False)
@@ -225,7 +373,7 @@
             self.loop.run_until_complete(
                 self._basetest_huge_content_recvinto(httpd.address))
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_unix_sock_client_ops(self):
         with test_utils.run_test_unix_server() as httpd:
             sock = socket.socket(socket.AF_UNIX)
@@ -267,6 +415,25 @@
         conn.close()
         listener.close()
 
+    def test_cancel_sock_accept(self):
+        listener = socket.socket()
+        listener.setblocking(False)
+        listener.bind(('127.0.0.1', 0))
+        listener.listen(1)
+        sockaddr = listener.getsockname()
+        f = asyncio.wait_for(self.loop.sock_accept(listener), 0.1)
+        with self.assertRaises(asyncio.TimeoutError):
+            self.loop.run_until_complete(f)
+
+        listener.close()
+        client = socket.socket()
+        client.setblocking(False)
+        f = self.loop.sock_connect(client, sockaddr)
+        with self.assertRaises(ConnectionRefusedError):
+            self.loop.run_until_complete(f)
+
+        client.close()
+
     def test_create_connection_sock(self):
         with test_utils.run_test_server() as httpd:
             sock = None
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index a7c0890..948820c 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -2,7 +2,7 @@
 
 import logging
 import socket
-import sys
+from test import support
 import unittest
 import weakref
 from unittest import mock
@@ -15,6 +15,7 @@
 from asyncio import log
 from asyncio import protocols
 from asyncio import sslproto
+from test import support
 from test.test_asyncio import utils as test_utils
 from test.test_asyncio import functional as func_tests
 
@@ -162,7 +163,7 @@
 class BaseStartTLS(func_tests.FunctionalTestCaseMixin):
 
     PAYLOAD_SIZE = 1024 * 100
-    TIMEOUT = 60
+    TIMEOUT = support.LONG_TIMEOUT
 
     def new_loop(self):
         raise NotImplementedError
@@ -272,7 +273,8 @@
 
         with self.tcp_server(serve, timeout=self.TIMEOUT) as srv:
             self.loop.run_until_complete(
-                asyncio.wait_for(client(srv.addr), timeout=10))
+                asyncio.wait_for(client(srv.addr),
+                                 timeout=support.SHORT_TIMEOUT))
 
         # No garbage is left if SSL is closed uncleanly
         client_context = weakref.ref(client_context)
@@ -333,7 +335,8 @@
 
         with self.tcp_server(serve, timeout=self.TIMEOUT) as srv:
             self.loop.run_until_complete(
-                asyncio.wait_for(client(srv.addr), timeout=10))
+                asyncio.wait_for(client(srv.addr),
+                                 timeout=support.SHORT_TIMEOUT))
 
         # No garbage is left for SSL client from loop.create_connection, even
         # if user stores the SSLTransport in corresponding protocol instance
@@ -489,7 +492,8 @@
 
         with self.tcp_server(serve, timeout=self.TIMEOUT) as srv:
             self.loop.run_until_complete(
-                asyncio.wait_for(client(srv.addr), timeout=10))
+                asyncio.wait_for(client(srv.addr),
+                                 timeout=support.SHORT_TIMEOUT))
 
     def test_start_tls_server_1(self):
         HELLO_MSG = b'1' * self.PAYLOAD_SIZE
@@ -617,7 +621,7 @@
                     *addr,
                     ssl=client_sslctx,
                     server_hostname='',
-                    ssl_handshake_timeout=10.0),
+                    ssl_handshake_timeout=support.SHORT_TIMEOUT),
                 0.5)
 
         with self.tcp_server(server,
@@ -699,7 +703,7 @@
                     ssl=client_sslctx,
                     server_hostname='',
                     loop=self.loop,
-                    ssl_handshake_timeout=1.0)
+                    ssl_handshake_timeout=support.LOOPBACK_TIMEOUT)
 
         with self.tcp_server(server,
                              max_clients=1,
diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py
index 12bd536..71de82d 100644
--- a/Lib/test/test_asyncio/test_streams.py
+++ b/Lib/test/test_asyncio/test_streams.py
@@ -9,7 +9,7 @@
 import threading
 import unittest
 from unittest import mock
-from test import support
+from test.support import socket_helper
 try:
     import ssl
 except ImportError:
@@ -66,7 +66,7 @@
                                                loop=self.loop)
             self._basetest_open_connection(conn_fut)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_open_unix_connection(self):
         with test_utils.run_test_unix_server() as httpd:
             conn_fut = asyncio.open_unix_connection(httpd.address,
@@ -99,7 +99,7 @@
 
             self._basetest_open_connection_no_loop_ssl(conn_fut)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     @unittest.skipIf(ssl is None, 'No ssl module')
     def test_open_unix_connection_no_loop_ssl(self):
         with test_utils.run_test_unix_server(use_ssl=True) as httpd:
@@ -130,7 +130,7 @@
                                                loop=self.loop)
             self._basetest_open_connection_error(conn_fut)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_open_unix_connection_error(self):
         with test_utils.run_test_unix_server() as httpd:
             conn_fut = asyncio.open_unix_connection(httpd.address,
@@ -452,12 +452,14 @@
 
     def test_readuntil_eof(self):
         stream = asyncio.StreamReader(loop=self.loop)
-        stream.feed_data(b'some dataAA')
+        data = b'some dataAA'
+        stream.feed_data(data)
         stream.feed_eof()
 
-        with self.assertRaises(asyncio.IncompleteReadError) as cm:
+        with self.assertRaisesRegex(asyncio.IncompleteReadError,
+                                    'undefined expected bytes') as cm:
             self.loop.run_until_complete(stream.readuntil(b'AAA'))
-        self.assertEqual(cm.exception.partial, b'some dataAA')
+        self.assertEqual(cm.exception.partial, data)
         self.assertIsNone(cm.exception.expected)
         self.assertEqual(b'', stream._buffer)
 
@@ -653,7 +655,7 @@
 
         self.assertEqual(messages, [])
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_start_unix_server(self):
 
         class MyServer:
diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py
index fe8cfa6..6657a88 100644
--- a/Lib/test/test_asyncio/test_subprocess.py
+++ b/Lib/test/test_asyncio/test_subprocess.py
@@ -1,3 +1,4 @@
+import os
 import signal
 import sys
 import unittest
@@ -143,7 +144,7 @@
             return proc.returncode, stdout
 
         task = run(b'some data')
-        task = asyncio.wait_for(task, 60.0)
+        task = asyncio.wait_for(task, support.LONG_TIMEOUT)
         exitcode, stdout = self.loop.run_until_complete(task)
         self.assertEqual(exitcode, 0)
         self.assertEqual(stdout, b'some data')
@@ -476,12 +477,19 @@
             proc.kill = kill
             returncode = transport.get_returncode()
             transport.close()
-            await transport._wait()
+            await asyncio.wait_for(transport._wait(), 5)
             return (returncode, kill_called)
 
         # Ignore "Close running child process: kill ..." log
         with test_utils.disable_logger():
-            returncode, killed = self.loop.run_until_complete(kill_running())
+            try:
+                returncode, killed = self.loop.run_until_complete(
+                    kill_running()
+                )
+            except asyncio.TimeoutError:
+                self.skipTest(
+                    "Timeout failure on waiting for subprocess stopping"
+                )
         self.assertIsNone(returncode)
 
         # transport.close() must kill the process if it is still running
@@ -691,6 +699,23 @@
 
         Watcher = unix_events.FastChildWatcher
 
+    def has_pidfd_support():
+        if not hasattr(os, 'pidfd_open'):
+            return False
+        try:
+            os.close(os.pidfd_open(os.getpid()))
+        except OSError:
+            return False
+        return True
+
+    @unittest.skipUnless(
+        has_pidfd_support(),
+        "operating system does not support pidfds",
+    )
+    class SubprocessPidfdWatcherTests(SubprocessWatcherMixin,
+                                      test_utils.TestCase):
+        Watcher = unix_events.PidfdChildWatcher
+
 else:
     # Windows
     class SubprocessProactorTests(SubprocessMixin, test_utils.TestCase):
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
index c21b0693..01f62b7 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -10,6 +10,7 @@
 import re
 import sys
 import textwrap
+import traceback
 import types
 import unittest
 import weakref
@@ -57,6 +58,22 @@
         return 'coro=<%s() %s at %s>' % (qualname, state, src)
 
 
+def get_innermost_context(exc):
+    """
+    Return information about the innermost exception context in the chain.
+    """
+    depth = 0
+    while True:
+        context = exc.__context__
+        if context is None:
+            break
+
+        exc = context
+        depth += 1
+
+    return (type(exc), exc.args, depth)
+
+
 class Dummy:
 
     def __repr__(self):
@@ -80,6 +97,12 @@
         return self
 
 
+# The following value can be used as a very small timeout:
+# it passes check "timeout > 0", but has almost
+# no effect on the test performance
+_EPSILON = 0.0001
+
+
 class BaseTaskTests:
 
     Task = None
@@ -97,6 +120,30 @@
         self.loop.set_task_factory(self.new_task)
         self.loop.create_future = lambda: self.new_future(self.loop)
 
+    def test_task_cancel_message_getter(self):
+        async def coro():
+            pass
+        t = self.new_task(self.loop, coro())
+        self.assertTrue(hasattr(t, '_cancel_message'))
+        self.assertEqual(t._cancel_message, None)
+
+        t.cancel('my message')
+        self.assertEqual(t._cancel_message, 'my message')
+
+        with self.assertRaises(asyncio.CancelledError):
+            self.loop.run_until_complete(t)
+
+    def test_task_cancel_message_setter(self):
+        async def coro():
+            pass
+        t = self.new_task(self.loop, coro())
+        t.cancel('my message')
+        t._cancel_message = 'my new message'
+        self.assertEqual(t._cancel_message, 'my new message')
+
+        with self.assertRaises(asyncio.CancelledError):
+            self.loop.run_until_complete(t)
+
     def test_task_del_collect(self):
         class Evil:
             def __del__(self):
@@ -466,6 +513,66 @@
         t = outer()
         self.assertEqual(self.loop.run_until_complete(t), 1042)
 
+    def test_exception_chaining_after_await(self):
+        # Test that when awaiting on a task when an exception is already
+        # active, if the task raises an exception it will be chained
+        # with the original.
+        loop = asyncio.new_event_loop()
+        self.set_event_loop(loop)
+
+        async def raise_error():
+            raise ValueError
+
+        async def run():
+            try:
+                raise KeyError(3)
+            except Exception as exc:
+                task = self.new_task(loop, raise_error())
+                try:
+                    await task
+                except Exception as exc:
+                    self.assertEqual(type(exc), ValueError)
+                    chained = exc.__context__
+                    self.assertEqual((type(chained), chained.args),
+                        (KeyError, (3,)))
+
+        try:
+            task = self.new_task(loop, run())
+            loop.run_until_complete(task)
+        finally:
+            loop.close()
+
+    def test_exception_chaining_after_await_with_context_cycle(self):
+        # Check trying to create an exception context cycle:
+        # https://bugs.python.org/issue40696
+        has_cycle = None
+        loop = asyncio.new_event_loop()
+        self.set_event_loop(loop)
+
+        async def process_exc(exc):
+            raise exc
+
+        async def run():
+            nonlocal has_cycle
+            try:
+                raise KeyError('a')
+            except Exception as exc:
+                task = self.new_task(loop, process_exc(exc))
+                try:
+                    await task
+                except BaseException as exc:
+                    has_cycle = (exc is exc.__context__)
+                    # Prevent a hang if has_cycle is True.
+                    exc.__context__ = None
+
+        try:
+            task = self.new_task(loop, run())
+            loop.run_until_complete(task)
+        finally:
+            loop.close()
+        # This also distinguishes from the initial has_cycle=None.
+        self.assertEqual(has_cycle, False)
+
     def test_cancel(self):
 
         def gen():
@@ -487,6 +594,98 @@
         self.assertTrue(t.cancelled())
         self.assertFalse(t.cancel())
 
+    def test_cancel_with_message_then_future_result(self):
+        # Test Future.result() after calling cancel() with a message.
+        cases = [
+            ((), ()),
+            ((None,), ()),
+            (('my message',), ('my message',)),
+            # Non-string values should roundtrip.
+            ((5,), (5,)),
+        ]
+        for cancel_args, expected_args in cases:
+            with self.subTest(cancel_args=cancel_args):
+                loop = asyncio.new_event_loop()
+                self.set_event_loop(loop)
+
+                async def sleep():
+                    await asyncio.sleep(10)
+
+                async def coro():
+                    task = self.new_task(loop, sleep())
+                    await asyncio.sleep(0)
+                    task.cancel(*cancel_args)
+                    done, pending = await asyncio.wait([task])
+                    task.result()
+
+                task = self.new_task(loop, coro())
+                with self.assertRaises(asyncio.CancelledError) as cm:
+                    loop.run_until_complete(task)
+                exc = cm.exception
+                self.assertEqual(exc.args, ())
+
+                actual = get_innermost_context(exc)
+                self.assertEqual(actual,
+                    (asyncio.CancelledError, expected_args, 2))
+
+    def test_cancel_with_message_then_future_exception(self):
+        # Test Future.exception() after calling cancel() with a message.
+        cases = [
+            ((), ()),
+            ((None,), ()),
+            (('my message',), ('my message',)),
+            # Non-string values should roundtrip.
+            ((5,), (5,)),
+        ]
+        for cancel_args, expected_args in cases:
+            with self.subTest(cancel_args=cancel_args):
+                loop = asyncio.new_event_loop()
+                self.set_event_loop(loop)
+
+                async def sleep():
+                    await asyncio.sleep(10)
+
+                async def coro():
+                    task = self.new_task(loop, sleep())
+                    await asyncio.sleep(0)
+                    task.cancel(*cancel_args)
+                    done, pending = await asyncio.wait([task])
+                    task.exception()
+
+                task = self.new_task(loop, coro())
+                with self.assertRaises(asyncio.CancelledError) as cm:
+                    loop.run_until_complete(task)
+                exc = cm.exception
+                self.assertEqual(exc.args, ())
+
+                actual = get_innermost_context(exc)
+                self.assertEqual(actual,
+                    (asyncio.CancelledError, expected_args, 2))
+
+    def test_cancel_with_message_before_starting_task(self):
+        loop = asyncio.new_event_loop()
+        self.set_event_loop(loop)
+
+        async def sleep():
+            await asyncio.sleep(10)
+
+        async def coro():
+            task = self.new_task(loop, sleep())
+            # We deliberately leave out the sleep here.
+            task.cancel('my message')
+            done, pending = await asyncio.wait([task])
+            task.exception()
+
+        task = self.new_task(loop, coro())
+        with self.assertRaises(asyncio.CancelledError) as cm:
+            loop.run_until_complete(task)
+        exc = cm.exception
+        self.assertEqual(exc.args, ())
+
+        actual = get_innermost_context(exc)
+        self.assertEqual(actual,
+            (asyncio.CancelledError, ('my message',), 2))
+
     def test_cancel_yield(self):
         with self.assertWarns(DeprecationWarning):
             @asyncio.coroutine
@@ -667,6 +866,66 @@
         self.assertTrue(nested_task.cancelled())
         self.assertTrue(fut.cancelled())
 
+    def assert_text_contains(self, text, substr):
+        if substr not in text:
+            raise RuntimeError(f'text {substr!r} not found in:\n>>>{text}<<<')
+
+    def test_cancel_traceback_for_future_result(self):
+        # When calling Future.result() on a cancelled task, check that the
+        # line of code that was interrupted is included in the traceback.
+        loop = asyncio.new_event_loop()
+        self.set_event_loop(loop)
+
+        async def nested():
+            # This will get cancelled immediately.
+            await asyncio.sleep(10)
+
+        async def coro():
+            task = self.new_task(loop, nested())
+            await asyncio.sleep(0)
+            task.cancel()
+            await task  # search target
+
+        task = self.new_task(loop, coro())
+        try:
+            loop.run_until_complete(task)
+        except asyncio.CancelledError:
+            tb = traceback.format_exc()
+            self.assert_text_contains(tb, "await asyncio.sleep(10)")
+            # The intermediate await should also be included.
+            self.assert_text_contains(tb, "await task  # search target")
+        else:
+            self.fail('CancelledError did not occur')
+
+    def test_cancel_traceback_for_future_exception(self):
+        # When calling Future.exception() on a cancelled task, check that the
+        # line of code that was interrupted is included in the traceback.
+        loop = asyncio.new_event_loop()
+        self.set_event_loop(loop)
+
+        async def nested():
+            # This will get cancelled immediately.
+            await asyncio.sleep(10)
+
+        async def coro():
+            task = self.new_task(loop, nested())
+            await asyncio.sleep(0)
+            task.cancel()
+            done, pending = await asyncio.wait([task])
+            task.exception()  # search target
+
+        task = self.new_task(loop, coro())
+        try:
+            loop.run_until_complete(task)
+        except asyncio.CancelledError:
+            tb = traceback.format_exc()
+            self.assert_text_contains(tb, "await asyncio.sleep(10)")
+            # The intermediate await should also be included.
+            self.assert_text_contains(tb,
+                "task.exception()  # search target")
+        else:
+            self.fail('CancelledError did not occur')
+
     def test_stop_while_run_in_complete(self):
 
         def gen():
@@ -861,6 +1120,22 @@
         res = loop.run_until_complete(task)
         self.assertEqual(res, "ok")
 
+    def test_wait_for_cancellation_race_condition(self):
+        def gen():
+            yield 0.1
+            yield 0.1
+            yield 0.1
+            yield 0.1
+
+        loop = self.new_test_loop(gen)
+
+        fut = self.new_future(loop)
+        loop.call_later(0.1, fut.set_result, "ok")
+        task = loop.create_task(asyncio.wait_for(fut, timeout=1))
+        loop.call_later(0.1, task.cancel)
+        res = loop.run_until_complete(task)
+        self.assertEqual(res, "ok")
+
     def test_wait_for_waits_for_task_cancellation(self):
         loop = asyncio.new_event_loop()
         self.addCleanup(loop.close)
@@ -872,17 +1147,89 @@
                 nonlocal task_done
                 try:
                     await asyncio.sleep(0.2)
+                except asyncio.CancelledError:
+                    await asyncio.sleep(_EPSILON)
+                    raise
                 finally:
                     task_done = True
 
             inner_task = self.new_task(loop, inner())
 
-            with self.assertRaises(asyncio.TimeoutError):
-                await asyncio.wait_for(inner_task, timeout=0.1)
+            await asyncio.wait_for(inner_task, timeout=_EPSILON)
 
-            self.assertTrue(task_done)
+        with self.assertRaises(asyncio.TimeoutError) as cm:
+            loop.run_until_complete(foo())
 
-        loop.run_until_complete(foo())
+        self.assertTrue(task_done)
+        chained = cm.exception.__context__
+        self.assertEqual(type(chained), asyncio.CancelledError)
+
+    def test_wait_for_waits_for_task_cancellation_w_timeout_0(self):
+        loop = asyncio.new_event_loop()
+        self.addCleanup(loop.close)
+
+        task_done = False
+
+        async def foo():
+            async def inner():
+                nonlocal task_done
+                try:
+                    await asyncio.sleep(10)
+                except asyncio.CancelledError:
+                    await asyncio.sleep(_EPSILON)
+                    raise
+                finally:
+                    task_done = True
+
+            inner_task = self.new_task(loop, inner())
+            await asyncio.sleep(_EPSILON)
+            await asyncio.wait_for(inner_task, timeout=0)
+
+        with self.assertRaises(asyncio.TimeoutError) as cm:
+            loop.run_until_complete(foo())
+
+        self.assertTrue(task_done)
+        chained = cm.exception.__context__
+        self.assertEqual(type(chained), asyncio.CancelledError)
+
+    def test_wait_for_reraises_exception_during_cancellation(self):
+        loop = asyncio.new_event_loop()
+        self.addCleanup(loop.close)
+
+        class FooException(Exception):
+            pass
+
+        async def foo():
+            async def inner():
+                try:
+                    await asyncio.sleep(0.2)
+                finally:
+                    raise FooException
+
+            inner_task = self.new_task(loop, inner())
+
+            await asyncio.wait_for(inner_task, timeout=_EPSILON)
+
+        with self.assertRaises(FooException):
+            loop.run_until_complete(foo())
+
+    def test_wait_for_raises_timeout_error_if_returned_during_cancellation(self):
+        loop = asyncio.new_event_loop()
+        self.addCleanup(loop.close)
+
+        async def foo():
+            async def inner():
+                try:
+                    await asyncio.sleep(0.2)
+                except asyncio.CancelledError:
+                    return 42
+
+            inner_task = self.new_task(loop, inner())
+
+            await asyncio.wait_for(inner_task, timeout=_EPSILON)
+
+        with self.assertRaises(asyncio.TimeoutError):
+            loop.run_until_complete(foo())
 
     def test_wait_for_self_cancellation(self):
         loop = asyncio.new_event_loop()
@@ -979,12 +1326,12 @@
             def coro(s):
                 return s
         c = coro('test')
-
-        task =self.new_task(
+        task = self.new_task(
             self.loop,
             asyncio.wait([c, c, coro('spam')]))
 
-        done, pending = self.loop.run_until_complete(task)
+        with self.assertWarns(DeprecationWarning):
+            done, pending = self.loop.run_until_complete(task)
 
         self.assertFalse(pending)
         self.assertEqual(set(f.result() for f in done), {'test', 'spam'})
@@ -1201,6 +1548,30 @@
         loop.advance_time(10)
         loop.run_until_complete(asyncio.wait([a, b]))
 
+    def test_wait_with_iterator_of_tasks(self):
+
+        def gen():
+            when = yield
+            self.assertAlmostEqual(0.1, when)
+            when = yield 0
+            self.assertAlmostEqual(0.15, when)
+            yield 0.15
+
+        loop = self.new_test_loop(gen)
+
+        a = self.new_task(loop, asyncio.sleep(0.1))
+        b = self.new_task(loop, asyncio.sleep(0.15))
+
+        async def foo():
+            done, pending = await asyncio.wait(iter([b, a]))
+            self.assertEqual(done, set([a, b]))
+            self.assertEqual(pending, set())
+            return 42
+
+        res = loop.run_until_complete(self.new_task(loop, foo()))
+        self.assertEqual(res, 42)
+        self.assertAlmostEqual(0.15, loop.time())
+
     def test_as_completed(self):
 
         def gen():
@@ -1346,7 +1717,9 @@
             futs = list(asyncio.as_completed(fs, loop=loop))
         self.assertEqual(len(futs), 2)
         waiter = asyncio.wait(futs)
-        done, pending = loop.run_until_complete(waiter)
+        # Deprecation from passing coros in futs to asyncio.wait()
+        with self.assertWarns(DeprecationWarning):
+            done, pending = loop.run_until_complete(waiter)
         self.assertEqual(set(f.result() for f in done), {'a', 'b'})
 
     def test_as_completed_duplicate_coroutines(self):
@@ -1641,32 +2014,6 @@
         self.assertEqual(res, 'test')
         self.assertIsNone(t2.result())
 
-
-    def test_current_task_deprecated(self):
-        Task = self.__class__.Task
-
-        with self.assertWarns(DeprecationWarning):
-            self.assertIsNone(Task.current_task(loop=self.loop))
-
-        async def coro(loop):
-            with self.assertWarns(DeprecationWarning):
-                self.assertIs(Task.current_task(loop=loop), task)
-
-            # See http://bugs.python.org/issue29271 for details:
-            asyncio.set_event_loop(loop)
-            try:
-                with self.assertWarns(DeprecationWarning):
-                    self.assertIs(Task.current_task(None), task)
-                with self.assertWarns(DeprecationWarning):
-                    self.assertIs(Task.current_task(), task)
-            finally:
-                asyncio.set_event_loop(None)
-
-        task = self.new_task(self.loop, coro(self.loop))
-        self.loop.run_until_complete(task)
-        with self.assertWarns(DeprecationWarning):
-            self.assertIsNone(Task.current_task(loop=self.loop))
-
     def test_current_task(self):
         self.assertIsNone(asyncio.current_task(loop=self.loop))
 
@@ -1751,7 +2098,8 @@
 
         async def outer():
             nonlocal proof
-            d, p = await asyncio.wait([inner()])
+            with self.assertWarns(DeprecationWarning):
+                d, p = await asyncio.wait([inner()])
             proof += 100
 
         f = asyncio.ensure_future(outer(), loop=self.loop)
@@ -2002,16 +2350,6 @@
         self.assertIsInstance(exception, Exception)
         self.assertEqual(exception.args, ("foo", ))
 
-    def test_all_tasks_deprecated(self):
-        Task = self.__class__.Task
-
-        async def coro():
-            with self.assertWarns(DeprecationWarning):
-                assert Task.all_tasks(self.loop) == {t}
-
-        t = self.new_task(self.loop, coro())
-        self.loop.run_until_complete(t)
-
     def test_log_destroyed_pending_task(self):
         Task = self.__class__.Task
 
@@ -2034,15 +2372,7 @@
 
         self.assertEqual(asyncio.all_tasks(loop=self.loop), {task})
 
-        # See http://bugs.python.org/issue29271 for details:
-        asyncio.set_event_loop(self.loop)
-        try:
-            with self.assertWarns(DeprecationWarning):
-                self.assertEqual(Task.all_tasks(), {task})
-            with self.assertWarns(DeprecationWarning):
-                self.assertEqual(Task.all_tasks(None), {task})
-        finally:
-            asyncio.set_event_loop(None)
+        asyncio.set_event_loop(None)
 
         # execute the task so it waits for future
         self.loop._run_once()
@@ -2208,31 +2538,46 @@
         self.assertEqual(gather_task.result(), [42])
 
     def test_cancel_gather_2(self):
-        loop = asyncio.new_event_loop()
-        self.addCleanup(loop.close)
+        cases = [
+            ((), ()),
+            ((None,), ()),
+            (('my message',), ('my message',)),
+            # Non-string values should roundtrip.
+            ((5,), (5,)),
+        ]
+        for cancel_args, expected_args in cases:
+            with self.subTest(cancel_args=cancel_args):
+                loop = asyncio.new_event_loop()
+                self.addCleanup(loop.close)
 
-        async def test():
-            time = 0
-            while True:
-                time += 0.05
-                await asyncio.gather(asyncio.sleep(0.05),
-                                     return_exceptions=True,
-                                     loop=loop)
-                if time > 1:
-                    return
+                async def test():
+                    time = 0
+                    while True:
+                        time += 0.05
+                        await asyncio.gather(asyncio.sleep(0.05),
+                                             return_exceptions=True,
+                                             loop=loop)
+                        if time > 1:
+                            return
 
-        async def main():
-            qwe = self.new_task(loop, test())
-            await asyncio.sleep(0.2)
-            qwe.cancel()
-            try:
-                await qwe
-            except asyncio.CancelledError:
-                pass
-            else:
-                self.fail('gather did not propagate the cancellation request')
+                async def main():
+                    qwe = self.new_task(loop, test())
+                    await asyncio.sleep(0.2)
+                    qwe.cancel(*cancel_args)
+                    await qwe
 
-        loop.run_until_complete(main())
+                try:
+                    loop.run_until_complete(main())
+                except asyncio.CancelledError as exc:
+                    self.assertEqual(exc.args, ())
+                    exc_type, exc_args, depth = get_innermost_context(exc)
+                    self.assertEqual((exc_type, exc_args),
+                        (asyncio.CancelledError, expected_args))
+                    # The exact traceback seems to vary in CI.
+                    self.assertIn(depth, (2, 3))
+                else:
+                    self.fail('gather did not propagate the cancellation '
+                              'request')
 
     def test_exception_traceback(self):
         # See http://bugs.python.org/issue28843
@@ -2725,8 +3070,6 @@
         self.assertEqual(asyncio.all_tasks(loop), set())
         self._register_task(task)
         self.assertEqual(asyncio.all_tasks(loop), set())
-        with self.assertWarns(DeprecationWarning):
-            self.assertEqual(asyncio.Task.all_tasks(loop), {task})
         self._unregister_task(task)
 
     def test__enter_task(self):
@@ -3236,6 +3579,8 @@
         self.loop.set_exception_handler(callback)
 
         # Set corrupted task factory
+        self.addCleanup(self.loop.set_task_factory,
+                        self.loop.get_task_factory())
         self.loop.set_task_factory(task_factory)
 
         # Run event loop
@@ -3305,6 +3650,17 @@
             self.loop.run_until_complete(
                 asyncio.wait_for(coroutine_function(), 0.01, loop=self.loop))
 
+    def test_coro_is_deprecated_in_wait(self):
+        # Remove test when passing coros to asyncio.wait() is removed in 3.11
+        with self.assertWarns(DeprecationWarning):
+            self.loop.run_until_complete(
+                asyncio.wait([coroutine_function()]))
+
+        task = self.loop.create_task(coroutine_function())
+        with self.assertWarns(DeprecationWarning):
+            self.loop.run_until_complete(
+                asyncio.wait([task, coroutine_function()]))
+
 
 class CompatibilityTests(test_utils.TestCase):
     # Tests for checking a bridge between old-styled coroutines
diff --git a/Lib/test/test_asyncio/test_threads.py b/Lib/test/test_asyncio/test_threads.py
new file mode 100644
index 0000000..2af3224
--- /dev/null
+++ b/Lib/test/test_asyncio/test_threads.py
@@ -0,0 +1,93 @@
+"""Tests for asyncio/threads.py"""
+
+import asyncio
+import unittest
+
+from contextvars import ContextVar
+from unittest import mock
+from test.test_asyncio import utils as test_utils
+
+
+def tearDownModule():
+    asyncio.set_event_loop_policy(None)
+
+
+class ToThreadTests(test_utils.TestCase):
+    def setUp(self):
+        super().setUp()
+        self.loop = asyncio.new_event_loop()
+        asyncio.set_event_loop(self.loop)
+
+    def tearDown(self):
+        self.loop.run_until_complete(
+            self.loop.shutdown_default_executor())
+        self.loop.close()
+        asyncio.set_event_loop(None)
+        self.loop = None
+        super().tearDown()
+
+    def test_to_thread(self):
+        async def main():
+            return await asyncio.to_thread(sum, [40, 2])
+
+        result = self.loop.run_until_complete(main())
+        self.assertEqual(result, 42)
+
+    def test_to_thread_exception(self):
+        def raise_runtime():
+            raise RuntimeError("test")
+
+        async def main():
+            await asyncio.to_thread(raise_runtime)
+
+        with self.assertRaisesRegex(RuntimeError, "test"):
+            self.loop.run_until_complete(main())
+
+    def test_to_thread_once(self):
+        func = mock.Mock()
+
+        async def main():
+            await asyncio.to_thread(func)
+
+        self.loop.run_until_complete(main())
+        func.assert_called_once()
+
+    def test_to_thread_concurrent(self):
+        func = mock.Mock()
+
+        async def main():
+            futs = []
+            for _ in range(10):
+                fut = asyncio.to_thread(func)
+                futs.append(fut)
+            await asyncio.gather(*futs)
+
+        self.loop.run_until_complete(main())
+        self.assertEqual(func.call_count, 10)
+
+    def test_to_thread_args_kwargs(self):
+        # Unlike run_in_executor(), to_thread() should directly accept kwargs.
+        func = mock.Mock()
+
+        async def main():
+            await asyncio.to_thread(func, 'test', something=True)
+
+        self.loop.run_until_complete(main())
+        func.assert_called_once_with('test', something=True)
+
+    def test_to_thread_contextvars(self):
+        test_ctx = ContextVar('test_ctx')
+
+        def get_ctx():
+            return test_ctx.get()
+
+        async def main():
+            test_ctx.set('parrot')
+            return await asyncio.to_thread(get_ctx)
+
+        result = self.loop.run_until_complete(main())
+        self.assertEqual(result, 'parrot')
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py
index 5487b7a..10bd46d 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -15,6 +15,7 @@
 import unittest
 from unittest import mock
 from test import support
+from test.support import socket_helper
 
 if sys.platform == 'win32':
     raise unittest.SkipTest('UNIX only')
@@ -273,7 +274,7 @@
         self.loop = asyncio.SelectorEventLoop()
         self.set_event_loop(self.loop)
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_create_unix_server_existing_path_sock(self):
         with test_utils.unix_socket_path() as path:
             sock = socket.socket(socket.AF_UNIX)
@@ -286,7 +287,7 @@
             srv.close()
             self.loop.run_until_complete(srv.wait_closed())
 
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_create_unix_server_pathlib(self):
         with test_utils.unix_socket_path() as path:
             path = pathlib.Path(path)
@@ -344,7 +345,7 @@
 
     @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'),
                          'no socket.SOCK_NONBLOCK (linux only)')
-    @support.skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_create_unix_server_path_stream_bittype(self):
         sock = socket.socket(
             socket.AF_UNIX, socket.SOCK_STREAM | socket.SOCK_NONBLOCK)
@@ -497,12 +498,12 @@
     def prepare(self):
         sock = self.make_socket()
         proto = self.MyProto(self.loop)
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         srv_sock = self.make_socket(cleanup=False)
-        srv_sock.bind((support.HOST, port))
+        srv_sock.bind((socket_helper.HOST, port))
         server = self.run_loop(self.loop.create_server(
             lambda: proto, sock=srv_sock))
-        self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
+        self.run_loop(self.loop.sock_connect(sock, (socket_helper.HOST, port)))
         self.run_loop(proto._ready)
 
         def cleanup():
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py
index 6b00570..f276cd2 100644
--- a/Lib/test/test_asyncio/test_windows_events.py
+++ b/Lib/test/test_asyncio/test_windows_events.py
@@ -211,6 +211,34 @@
         fut.cancel()
         fut.cancel()
 
+    def test_read_self_pipe_restart(self):
+        # Regression test for https://bugs.python.org/issue39010
+        # Previously, restarting a proactor event loop in certain states
+        # would lead to spurious ConnectionResetErrors being logged.
+        self.loop.call_exception_handler = mock.Mock()
+        # Start an operation in another thread so that the self-pipe is used.
+        # This is theoretically timing-dependent (the task in the executor
+        # must complete before our start/stop cycles), but in practice it
+        # seems to work every time.
+        f = self.loop.run_in_executor(None, lambda: None)
+        self.loop.stop()
+        self.loop.run_forever()
+        self.loop.stop()
+        self.loop.run_forever()
+
+        # Shut everything down cleanly. This is an important part of the
+        # test - in issue 39010, the error occurred during loop.close(),
+        # so we want to close the loop during the test instead of leaving
+        # it for tearDown.
+        #
+        # First wait for f to complete to avoid a "future's result was never
+        # retrieved" error.
+        self.loop.run_until_complete(f)
+        # Now shut down the loop itself (self.close_loop also shuts down the
+        # loop's default executor).
+        self.close_loop(self.loop)
+        self.assertFalse(self.loop.call_exception_handler.called)
+
 
 class WinPolicyTests(test_utils.TestCase):
 
diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py
index 5b4bb12..804db91 100644
--- a/Lib/test/test_asyncio/utils.py
+++ b/Lib/test/test_asyncio/utils.py
@@ -107,7 +107,7 @@
         gen.close()
 
 
-def run_until(loop, pred, timeout=30):
+def run_until(loop, pred, timeout=support.SHORT_TIMEOUT):
     deadline = time.monotonic() + timeout
     while not pred():
         if timeout is not None:
@@ -139,7 +139,7 @@
 
 class SilentWSGIServer(WSGIServer):
 
-    request_timeout = 2
+    request_timeout = support.LOOPBACK_TIMEOUT
 
     def get_request(self):
         request, client_addr = super().get_request()
@@ -220,7 +220,7 @@
 
     class UnixWSGIServer(UnixHTTPServer, WSGIServer):
 
-        request_timeout = 2
+        request_timeout = support.LOOPBACK_TIMEOUT
 
         def server_bind(self):
             UnixHTTPServer.server_bind(self)
@@ -509,9 +509,11 @@
 class TestCase(unittest.TestCase):
     @staticmethod
     def close_loop(loop):
-        executor = loop._default_executor
-        if executor is not None:
-            executor.shutdown(wait=True)
+        if loop._default_executor is not None:
+            if not loop.is_closed():
+                loop.run_until_complete(loop.shutdown_default_executor())
+            else:
+                loop._default_executor.shutdown(wait=True)
         loop.close()
         policy = support.maybe_get_event_loop_policy()
         if policy is not None:
diff --git a/Lib/test/test_asyncore.py b/Lib/test/test_asyncore.py
index 3fcedb5..3c3abe4 100644
--- a/Lib/test/test_asyncore.py
+++ b/Lib/test/test_asyncore.py
@@ -10,13 +10,13 @@
 import threading
 
 from test import support
+from test.support import socket_helper
 from io import BytesIO
 
 if support.PGO:
     raise unittest.SkipTest("test is not helpful for PGO")
 
 
-TIMEOUT = 3
 HAS_UNIX_SOCKETS = hasattr(socket, 'AF_UNIX')
 
 class dummysocket:
@@ -92,7 +92,7 @@
     if HAS_UNIX_SOCKETS and sock.family == socket.AF_UNIX:
         # Make sure the path doesn't exist.
         support.unlink(addr)
-        support.bind_unix_socket(sock, addr)
+        socket_helper.bind_unix_socket(sock, addr)
     else:
         sock.bind(addr)
 
@@ -328,7 +328,7 @@
         evt = threading.Event()
         sock = socket.socket()
         sock.settimeout(3)
-        port = support.bind_port(sock)
+        port = socket_helper.bind_port(sock)
 
         cap = BytesIO()
         args = (evt, cap, sock)
@@ -342,7 +342,7 @@
             data = b"Suppose there isn't a 16-ton weight?"
             d = dispatcherwithsend_noread()
             d.create_socket()
-            d.connect((support.HOST, port))
+            d.connect((socket_helper.HOST, port))
 
             # give time for socket to connect
             time.sleep(0.1)
@@ -360,7 +360,7 @@
 
             self.assertEqual(cap.getvalue(), data*2)
         finally:
-            support.join_thread(t, timeout=TIMEOUT)
+            support.join_thread(t)
 
 
 @unittest.skipUnless(hasattr(asyncore, 'file_wrapper'),
@@ -788,16 +788,16 @@
                 except OSError:
                     pass
         finally:
-            support.join_thread(t, timeout=TIMEOUT)
+            support.join_thread(t)
 
 class TestAPI_UseIPv4Sockets(BaseTestAPI):
     family = socket.AF_INET
-    addr = (support.HOST, 0)
+    addr = (socket_helper.HOST, 0)
 
-@unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 support required')
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 support required')
 class TestAPI_UseIPv6Sockets(BaseTestAPI):
     family = socket.AF_INET6
-    addr = (support.HOSTv6, 0)
+    addr = (socket_helper.HOSTv6, 0)
 
 @unittest.skipUnless(HAS_UNIX_SOCKETS, 'Unix sockets required')
 class TestAPI_UseUnixSockets(BaseTestAPI):
diff --git a/Lib/test/test_base64.py b/Lib/test/test_base64.py
index 7dba663..1dbeac4 100644
--- a/Lib/test/test_base64.py
+++ b/Lib/test/test_base64.py
@@ -18,14 +18,6 @@
         int_data = memoryview(b"1234").cast('I')
         self.assertRaises(TypeError, f, int_data)
 
-    def test_encodestring_warns(self):
-        with self.assertWarns(DeprecationWarning):
-            base64.encodestring(b"www.python.org")
-
-    def test_decodestring_warns(self):
-        with self.assertWarns(DeprecationWarning):
-            base64.decodestring(b"d3d3LnB5dGhvbi5vcmc=\n")
-
     def test_encodebytes(self):
         eq = self.assertEqual
         eq(base64.encodebytes(b"www.python.org"), b"d3d3LnB5dGhvbi5vcmc=\n")
diff --git a/Lib/test/test_bigaddrspace.py b/Lib/test/test_bigaddrspace.py
index b639f68..aa1f8ca 100644
--- a/Lib/test/test_bigaddrspace.py
+++ b/Lib/test/test_bigaddrspace.py
@@ -55,7 +55,7 @@
 
 class StrTest(unittest.TestCase):
 
-    unicodesize = 2 if sys.maxunicode < 65536 else 4
+    unicodesize = 4
 
     @bigaddrspacetest
     def test_concat(self):
diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py
index 08de5c9..4532795 100644
--- a/Lib/test/test_binascii.py
+++ b/Lib/test/test_binascii.py
@@ -4,6 +4,7 @@
 import binascii
 import array
 import re
+from test import support
 
 # Note: "*_hex" functions are aliases for "(un)hexlify"
 b2a_functions = ['b2a_base64', 'b2a_hex', 'b2a_hqx', 'b2a_qp', 'b2a_uu',
@@ -36,6 +37,7 @@
             self.assertTrue(hasattr(getattr(binascii, name), '__call__'))
             self.assertRaises(TypeError, getattr(binascii, name))
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_returned_value(self):
         # Limit to the minimum of all limits (b2a_uu)
         MAX_ALL = 45
@@ -179,6 +181,7 @@
         with self.assertRaises(TypeError):
             binascii.b2a_uu(b"", True)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_crc_hqx(self):
         crc = binascii.crc_hqx(self.type2test(b"Test the CRC-32 of"), 0)
         crc = binascii.crc_hqx(self.type2test(b" this string."), crc)
@@ -198,6 +201,7 @@
 
         self.assertRaises(TypeError, binascii.crc32)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_hqx(self):
         # Perform binhex4 style RLE-compression
         # Then calculate the hexbin4 binary-to-ASCII translation
@@ -208,6 +212,7 @@
         res = binascii.rledecode_hqx(b)
         self.assertEqual(res, self.rawdata)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_rle(self):
         # test repetition with a repetition longer than the limit of 255
         data = (b'a' * 100 + b'b' + b'c' * 300)
@@ -354,6 +359,7 @@
         self.assertEqual(b2a_qp(type2test(b'a.\n')), b'a.\n')
         self.assertEqual(b2a_qp(type2test(b'.a')[:-1]), b'=2E')
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_empty_string(self):
         # A test for SF bug #1022953.  Make sure SystemError is not raised.
         empty = self.type2test(b'')
@@ -378,6 +384,7 @@
         # crc_hqx needs 2 arguments
         self.assertRaises(TypeError, binascii.crc_hqx, "test", 0)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_unicode_a2b(self):
         # Unicode strings are accepted by a2b_* functions.
         MAX_ALL = 45
@@ -416,6 +423,18 @@
         self.assertEqual(binascii.b2a_base64(b, newline=False),
                          b'aGVsbG8=')
 
+    def test_deprecated_warnings(self):
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.b2a_hqx(b'abc'), b'B@*M')
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.a2b_hqx(b'B@*M'), (b'abc', 0))
+
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.rlecode_hqx(b'a' * 10), b'a\x90\n')
+
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.rledecode_hqx(b'a\x90\n'), b'a' * 10)
+
 
 class ArrayBinASCIITest(BinASCIITest):
     def type2test(self, s):
diff --git a/Lib/test/test_binhex.py b/Lib/test/test_binhex.py
index 2f3d53a..9c9486e 100644
--- a/Lib/test/test_binhex.py
+++ b/Lib/test/test_binhex.py
@@ -3,17 +3,20 @@
    Uses the mechanism of the python binhex module
    Based on an original test by Roger E. Masse.
 """
-import binhex
 import unittest
 from test import support
 
+with support.check_warnings(('', DeprecationWarning)):
+    binhex = support.import_fresh_module('binhex')
+
 
 class BinHexTestCase(unittest.TestCase):
 
     def setUp(self):
-        self.fname1 = support.TESTFN + "1"
-        self.fname2 = support.TESTFN + "2"
-        self.fname3 = support.TESTFN + "very_long_filename__very_long_filename__very_long_filename__very_long_filename__"
+        # binhex supports only file names encodable to Latin1
+        self.fname1 = support.TESTFN_ASCII + "1"
+        self.fname2 = support.TESTFN_ASCII + "2"
+        self.fname3 = support.TESTFN_ASCII + "very_long_filename__very_long_filename__very_long_filename__very_long_filename__"
 
     def tearDown(self):
         support.unlink(self.fname1)
@@ -45,6 +48,18 @@
 
         self.assertRaises(binhex.Error, binhex.binhex, self.fname3, self.fname2)
 
+    def test_binhex_line_endings(self):
+        # bpo-29566: Ensure the line endings are those for macOS 9
+        with open(self.fname1, 'wb') as f:
+            f.write(self.DATA)
+
+        binhex.binhex(self.fname1, self.fname2)
+
+        with open(self.fname2, 'rb') as fp:
+            contents = fp.read()
+
+        self.assertNotIn(b'\n', contents)
+
 def test_main():
     support.run_unittest(BinHexTestCase)
 
diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py
index dcea206..d440bcf 100644
--- a/Lib/test/test_buffer.py
+++ b/Lib/test/test_buffer.py
@@ -45,6 +45,11 @@
 except ImportError:
     numpy_array = None
 
+try:
+    import _testcapi
+except ImportError:
+    _testcapi = None
+
 
 SHORT_TEST = True
 
@@ -966,8 +971,6 @@
             m.tobytes()  # Releasing mm didn't release m
 
     def verify_getbuf(self, orig_ex, ex, req, sliced=False):
-        def simple_fmt(ex):
-            return ex.format == '' or ex.format == 'B'
         def match(req, flag):
             return ((req&flag) == flag)
 
@@ -2525,7 +2528,7 @@
         values = [INT(9), IDX(9),
                   2.2+3j, Decimal("-21.1"), 12.2, Fraction(5, 2),
                   [1,2,3], {4,5,6}, {7:8}, (), (9,),
-                  True, False, None, NotImplemented,
+                  True, False, None, Ellipsis,
                   b'a', b'abc', bytearray(b'a'), bytearray(b'abc'),
                   'a', 'abc', r'a', r'abc',
                   f, lambda x: x]
@@ -4418,6 +4421,13 @@
         x = ndarray([1,2,3], shape=[3], flags=ND_GETBUF_FAIL)
         self.assertRaises(BufferError, memoryview, x)
 
+    @support.cpython_only
+    def test_pybuffer_size_from_format(self):
+        # basic tests
+        for format in ('', 'ii', '3s'):
+            self.assertEqual(_testcapi.PyBuffer_SizeFromFormat(format),
+                             struct.calcsize(format))
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 4a49826..4df1b95 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -25,6 +25,7 @@
 from textwrap import dedent
 from types import AsyncGeneratorType, FunctionType
 from operator import neg
+from test import support
 from test.support import (
     EnvironmentVarGuard, TESTFN, check_warnings, swap_attr, unlink,
     maybe_get_event_loop_policy)
@@ -326,8 +327,8 @@
         bom = b'\xef\xbb\xbf'
         compile(bom + b'print(1)\n', '', 'exec')
         compile(source='pass', filename='?', mode='exec')
-        compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
-        compile('pass', '?', dont_inherit=1, mode='exec')
+        compile(dont_inherit=False, filename='tmp', source='0', mode='eval')
+        compile('pass', '?', dont_inherit=True, mode='exec')
         compile(memoryview(b"text"), "name", "exec")
         self.assertRaises(TypeError, compile)
         self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
@@ -831,6 +832,7 @@
         self.assertEqual(hash('spam'), hash(b'spam'))
         hash((0,1,2,3))
         def f(): pass
+        hash(f)
         self.assertRaises(TypeError, hash, [])
         self.assertRaises(TypeError, hash, {})
         # Bug 1536021: Allow hash to return long objects
@@ -1014,7 +1016,12 @@
         self.assertEqual(max(1, 2.0, 3), 3)
         self.assertEqual(max(1.0, 2, 3), 3)
 
-        self.assertRaises(TypeError, max)
+        with self.assertRaisesRegex(
+            TypeError,
+            'max expected at least 1 argument, got 0'
+        ):
+            max()
+
         self.assertRaises(TypeError, max, 42)
         self.assertRaises(ValueError, max, ())
         class BadSeq:
@@ -1068,7 +1075,12 @@
         self.assertEqual(min(1, 2.0, 3), 1)
         self.assertEqual(min(1.0, 2, 3), 1.0)
 
-        self.assertRaises(TypeError, min)
+        with self.assertRaisesRegex(
+            TypeError,
+            'min expected at least 1 argument, got 0'
+        ):
+            min()
+
         self.assertRaises(TypeError, min, 42)
         self.assertRaises(ValueError, min, ())
         class BadSeq:
@@ -1457,6 +1469,24 @@
 
         self.assertEqual(sum(range(10), 1000), 1045)
         self.assertEqual(sum(range(10), start=1000), 1045)
+        self.assertEqual(sum(range(10), 2**31-5), 2**31+40)
+        self.assertEqual(sum(range(10), 2**63-5), 2**63+40)
+
+        self.assertEqual(sum(i % 2 != 0 for i in range(10)), 5)
+        self.assertEqual(sum((i % 2 != 0 for i in range(10)), 2**31-3),
+                         2**31+2)
+        self.assertEqual(sum((i % 2 != 0 for i in range(10)), 2**63-3),
+                         2**63+2)
+        self.assertIs(sum([], False), False)
+
+        self.assertEqual(sum(i / 2 for i in range(10)), 22.5)
+        self.assertEqual(sum((i / 2 for i in range(10)), 1000), 1022.5)
+        self.assertEqual(sum((i / 2 for i in range(10)), 1000.25), 1022.75)
+        self.assertEqual(sum([0.5, 1]), 1.5)
+        self.assertEqual(sum([1, 0.5]), 1.5)
+        self.assertEqual(repr(sum([-0.0])), '0.0')
+        self.assertEqual(repr(sum([-0.0], -0.0)), '-0.0')
+        self.assertEqual(repr(sum([], -0.0)), '-0.0')
 
         self.assertRaises(TypeError, sum)
         self.assertRaises(TypeError, sum, 42)
@@ -1468,6 +1498,9 @@
         self.assertRaises(TypeError, sum, [[1], [2], [3]])
         self.assertRaises(TypeError, sum, [{2:3}])
         self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
+        self.assertRaises(TypeError, sum, [], '')
+        self.assertRaises(TypeError, sum, [], b'')
+        self.assertRaises(TypeError, sum, [], bytearray())
 
         class BadSeq:
             def __getitem__(self, index):
@@ -1700,6 +1733,20 @@
             self.assertRaises(TypeError, tp, 1, 2)
             self.assertRaises(TypeError, tp, a=1, b=2)
 
+    def test_warning_notimplemented(self):
+        # Issue #35712: NotImplemented is a sentinel value that should never
+        # be evaluated in a boolean context (virtually all such use cases
+        # are a result of accidental misuse implementing rich comparison
+        # operations in terms of one another).
+        # For the time being, it will continue to evaluate as truthy, but
+        # issue a deprecation warning (with the eventual intent to make it
+        # a TypeError).
+        self.assertWarns(DeprecationWarning, bool, NotImplemented)
+        with self.assertWarns(DeprecationWarning):
+            self.assertTrue(NotImplemented)
+        with self.assertWarns(DeprecationWarning):
+            self.assertFalse(not NotImplemented)
+
 
 class TestBreakpoint(unittest.TestCase):
     def setUp(self):
@@ -1834,6 +1881,7 @@
             os.close(w)
             self.skipTest("pty.fork() raised {}".format(e))
             raise
+
         if pid == 0:
             # Child
             try:
@@ -1847,9 +1895,11 @@
             finally:
                 # We don't want to return to unittest...
                 os._exit(0)
+
         # Parent
         os.close(w)
         os.write(fd, terminal_input)
+
         # Get results from the pipe
         with open(r, "r") as rpipe:
             lines = []
@@ -1859,6 +1909,7 @@
                     # The other end was closed => the child exited
                     break
                 lines.append(line)
+
         # Check the result was got and corresponds to the user's terminal input
         if len(lines) != 2:
             # Something went wrong, try to get at stderr
@@ -1881,8 +1932,7 @@
         # completion, otherwise the child process hangs on AIX.
         os.close(fd)
 
-        # Wait until the child process completes
-        os.waitpid(pid, 0)
+        support.wait_process(pid, exitcode=0)
 
         return lines
 
@@ -1954,7 +2004,7 @@
         self.assertEqual(data, sorted(copy, key=lambda x: -x))
         self.assertNotEqual(data, copy)
         random.shuffle(copy)
-        self.assertEqual(data, sorted(copy, reverse=1))
+        self.assertEqual(data, sorted(copy, reverse=True))
         self.assertNotEqual(data, copy)
 
     def test_bad_arguments(self):
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index bbd45c7..05568f2 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -12,12 +12,14 @@
 import functools
 import pickle
 import tempfile
+import textwrap
 import unittest
 
 import test.support
 import test.string_tests
 import test.list_tests
 from test.support import bigaddrspacetest, MAX_Py_ssize_t
+from test.support.script_helper import assert_python_failure
 
 
 if sys.flags.bytes_warning:
@@ -315,6 +317,62 @@
         # Default encoding is utf-8
         self.assertEqual(self.type2test(b'\xe2\x98\x83').decode(), '\u2603')
 
+    def test_check_encoding_errors(self):
+        # bpo-37388: bytes(str) and bytes.encode() must check encoding
+        # and errors arguments in dev mode
+        invalid = 'Boom, Shaka Laka, Boom!'
+        encodings = ('ascii', 'utf8', 'latin1')
+        code = textwrap.dedent(f'''
+            import sys
+            type2test = {self.type2test.__name__}
+            encodings = {encodings!r}
+
+            for data in ('', 'short string'):
+                try:
+                    type2test(data, encoding={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(21)
+
+                for encoding in encodings:
+                    try:
+                        type2test(data, encoding=encoding, errors={invalid!r})
+                    except LookupError:
+                        pass
+                    else:
+                        sys.exit(22)
+
+            for data in (b'', b'short string'):
+                data = type2test(data)
+                print(repr(data))
+                try:
+                    data.decode(encoding={invalid!r})
+                except LookupError:
+                    sys.exit(10)
+                else:
+                    sys.exit(23)
+
+                try:
+                    data.decode(errors={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(24)
+
+                for encoding in encodings:
+                    try:
+                        data.decode(encoding=encoding, errors={invalid!r})
+                    except LookupError:
+                        pass
+                    else:
+                        sys.exit(25)
+
+            sys.exit(10)
+        ''')
+        proc = assert_python_failure('-X', 'dev', '-c', code)
+        self.assertEqual(proc.rc, 10, proc)
+
     def test_from_int(self):
         b = self.type2test(0)
         self.assertEqual(b, self.type2test())
@@ -489,9 +547,13 @@
         self.assertEqual(dot_join([bytearray(b"ab"), b"cd"]), b"ab.:cd")
         self.assertEqual(dot_join([b"ab", bytearray(b"cd")]), b"ab.:cd")
         # Stress it with many items
-        seq = [b"abc"] * 1000
-        expected = b"abc" + b".:abc" * 999
+        seq = [b"abc"] * 100000
+        expected = b"abc" + b".:abc" * 99999
         self.assertEqual(dot_join(seq), expected)
+        # Stress test with empty separator
+        seq = [b"abc"] * 100000
+        expected = b"abc" * 100000
+        self.assertEqual(self.type2test(b"").join(seq), expected)
         self.assertRaises(TypeError, self.type2test(b" ").join, None)
         # Error handling and cleanup when some item in the middle of the
         # sequence has the wrong type.
@@ -904,6 +966,15 @@
         c = b.translate(None, delete=b'e')
         self.assertEqual(c, b'hllo')
 
+    def test_sq_item(self):
+        _testcapi = test.support.import_module('_testcapi')
+        obj = self.type2test((42,))
+        with self.assertRaises(IndexError):
+            _testcapi.sequence_getitem(obj, -2)
+        with self.assertRaises(IndexError):
+            _testcapi.sequence_getitem(obj, 1)
+        self.assertEqual(_testcapi.sequence_getitem(obj, 0), 42)
+
 
 class BytesTest(BaseBytesTest, unittest.TestCase):
     type2test = bytes
@@ -963,6 +1034,7 @@
             c_char_p)
 
         PyBytes_FromFormat = pythonapi.PyBytes_FromFormat
+        PyBytes_FromFormat.argtypes = (c_char_p,)
         PyBytes_FromFormat.restype = py_object
 
         # basic tests
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index 2591f0a..1fce9d8 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -100,6 +100,9 @@
         self.assertRaises(ValueError, BZ2File, os.devnull, compresslevel=0)
         self.assertRaises(ValueError, BZ2File, os.devnull, compresslevel=10)
 
+        # compresslevel is keyword-only
+        self.assertRaises(TypeError, BZ2File, os.devnull, "r", 3)
+
     def testRead(self):
         self.createTempFile()
         with BZ2File(self.filename) as bz2f:
@@ -707,7 +710,7 @@
     def testDecompress4G(self, size):
         # "Test BZ2Decompressor.decompress() with >4GiB input"
         blocksize = 10 * 1024 * 1024
-        block = random.getrandbits(blocksize * 8).to_bytes(blocksize, 'little')
+        block = random.randbytes(blocksize)
         try:
             data = block * (size // blocksize + 1)
             compressed = bz2.compress(data)
diff --git a/Lib/test/test_c_locale_coercion.py b/Lib/test/test_c_locale_coercion.py
index fb599b0..fcc8599 100644
--- a/Lib/test/test_c_locale_coercion.py
+++ b/Lib/test/test_c_locale_coercion.py
@@ -49,6 +49,10 @@
     # TODO: Work out a robust dynamic test for this that doesn't rely on
     #       CPython's own locale handling machinery
     EXPECT_COERCION_IN_DEFAULT_LOCALE = False
+elif sys.platform == "vxworks":
+    # VxWorks defaults to using UTF-8 for all system interfaces
+    EXPECTED_C_LOCALE_STREAM_ENCODING = "utf-8"
+    EXPECTED_C_LOCALE_FS_ENCODING = "utf-8"
 
 # Note that the above expectations are still wrong in some cases, such as:
 # * Windows when PYTHONLEGACYWINDOWSFSENCODING is set
@@ -403,7 +407,10 @@
         # skip the test if the LC_CTYPE locale is C or coerced
         old_loc = locale.setlocale(locale.LC_CTYPE, None)
         self.addCleanup(locale.setlocale, locale.LC_CTYPE, old_loc)
-        loc = locale.setlocale(locale.LC_CTYPE, "")
+        try:
+            loc = locale.setlocale(locale.LC_CTYPE, "")
+        except locale.Error as e:
+            self.skipTest(str(e))
         if loc == "C":
             self.skipTest("test requires LC_CTYPE locale different than C")
         if loc in TARGET_LOCALES :
diff --git a/Lib/test/test_call.py b/Lib/test/test_call.py
index 0bff7de..451a717 100644
--- a/Lib/test/test_call.py
+++ b/Lib/test/test_call.py
@@ -1,4 +1,3 @@
-import datetime
 import unittest
 from test.support import cpython_only
 try:
@@ -27,125 +26,6 @@
         self.assertEqual(list(res.items()), expected)
 
 
-# The test cases here cover several paths through the function calling
-# code.  They depend on the METH_XXX flag that is used to define a C
-# function, which can't be verified from Python.  If the METH_XXX decl
-# for a C function changes, these tests may not cover the right paths.
-
-class CFunctionCalls(unittest.TestCase):
-
-    def test_varargs0(self):
-        self.assertRaises(TypeError, {}.__contains__)
-
-    def test_varargs1(self):
-        {}.__contains__(0)
-
-    def test_varargs2(self):
-        self.assertRaises(TypeError, {}.__contains__, 0, 1)
-
-    def test_varargs0_ext(self):
-        try:
-            {}.__contains__(*())
-        except TypeError:
-            pass
-
-    def test_varargs1_ext(self):
-        {}.__contains__(*(0,))
-
-    def test_varargs2_ext(self):
-        try:
-            {}.__contains__(*(1, 2))
-        except TypeError:
-            pass
-        else:
-            raise RuntimeError
-
-    def test_varargs1_kw(self):
-        self.assertRaises(TypeError, {}.__contains__, x=2)
-
-    def test_varargs2_kw(self):
-        self.assertRaises(TypeError, {}.__contains__, x=2, y=2)
-
-    def test_oldargs0_0(self):
-        {}.keys()
-
-    def test_oldargs0_1(self):
-        self.assertRaises(TypeError, {}.keys, 0)
-
-    def test_oldargs0_2(self):
-        self.assertRaises(TypeError, {}.keys, 0, 1)
-
-    def test_oldargs0_0_ext(self):
-        {}.keys(*())
-
-    def test_oldargs0_1_ext(self):
-        try:
-            {}.keys(*(0,))
-        except TypeError:
-            pass
-        else:
-            raise RuntimeError
-
-    def test_oldargs0_2_ext(self):
-        try:
-            {}.keys(*(1, 2))
-        except TypeError:
-            pass
-        else:
-            raise RuntimeError
-
-    def test_oldargs0_0_kw(self):
-        try:
-            {}.keys(x=2)
-        except TypeError:
-            pass
-        else:
-            raise RuntimeError
-
-    def test_oldargs0_1_kw(self):
-        self.assertRaises(TypeError, {}.keys, x=2)
-
-    def test_oldargs0_2_kw(self):
-        self.assertRaises(TypeError, {}.keys, x=2, y=2)
-
-    def test_oldargs1_0(self):
-        self.assertRaises(TypeError, [].count)
-
-    def test_oldargs1_1(self):
-        [].count(1)
-
-    def test_oldargs1_2(self):
-        self.assertRaises(TypeError, [].count, 1, 2)
-
-    def test_oldargs1_0_ext(self):
-        try:
-            [].count(*())
-        except TypeError:
-            pass
-        else:
-            raise RuntimeError
-
-    def test_oldargs1_1_ext(self):
-        [].count(*(1,))
-
-    def test_oldargs1_2_ext(self):
-        try:
-            [].count(*(1, 2))
-        except TypeError:
-            pass
-        else:
-            raise RuntimeError
-
-    def test_oldargs1_0_kw(self):
-        self.assertRaises(TypeError, [].count, x=2)
-
-    def test_oldargs1_1_kw(self):
-        self.assertRaises(TypeError, [].count, {}, x=2)
-
-    def test_oldargs1_2_kw(self):
-        self.assertRaises(TypeError, [].count, x=2, y=2)
-
-
 @cpython_only
 class CFunctionCallsErrorMessages(unittest.TestCase):
 
@@ -193,7 +73,7 @@
         self.assertRaisesRegex(TypeError, msg, bool, x=2)
 
     def test_varargs4_kw(self):
-        msg = r"^index\(\) takes no keyword arguments$"
+        msg = r"^list[.]index\(\) takes no keyword arguments$"
         self.assertRaisesRegex(TypeError, msg, [].index, x=2)
 
     def test_varargs5_kw(self):
@@ -209,19 +89,19 @@
         self.assertRaisesRegex(TypeError, msg, next, x=2)
 
     def test_varargs8_kw(self):
-        msg = r"^pack\(\) takes no keyword arguments$"
+        msg = r"^_struct[.]pack\(\) takes no keyword arguments$"
         self.assertRaisesRegex(TypeError, msg, struct.pack, x=2)
 
     def test_varargs9_kw(self):
-        msg = r"^pack_into\(\) takes no keyword arguments$"
+        msg = r"^_struct[.]pack_into\(\) takes no keyword arguments$"
         self.assertRaisesRegex(TypeError, msg, struct.pack_into, x=2)
 
     def test_varargs10_kw(self):
-        msg = r"^index\(\) takes no keyword arguments$"
+        msg = r"^deque[.]index\(\) takes no keyword arguments$"
         self.assertRaisesRegex(TypeError, msg, collections.deque().index, x=2)
 
     def test_varargs11_kw(self):
-        msg = r"^pack\(\) takes no keyword arguments$"
+        msg = r"^Struct[.]pack\(\) takes no keyword arguments$"
         self.assertRaisesRegex(TypeError, msg, struct.Struct.pack, struct.Struct(""), x=2)
 
     def test_varargs12_kw(self):
@@ -289,6 +169,176 @@
         self.assertRaisesRegex(TypeError, msg, [].count, x=2, y=2)
 
 
+
+class TestCallingConventions(unittest.TestCase):
+    """Test calling using various C calling conventions (METH_*) from Python
+
+    Subclasses test several kinds of functions (module-level, methods,
+    class methods static methods) using these attributes:
+      obj: the object that contains tested functions (as attributes)
+      expected_self: expected "self" argument to the C function
+
+    The base class tests module-level functions.
+    """
+
+    def setUp(self):
+        self.obj = self.expected_self = _testcapi
+
+    def test_varargs(self):
+        self.assertEqual(
+            self.obj.meth_varargs(1, 2, 3),
+            (self.expected_self, (1, 2, 3)),
+        )
+
+    def test_varargs_ext(self):
+        self.assertEqual(
+            self.obj.meth_varargs(*(1, 2, 3)),
+            (self.expected_self, (1, 2, 3)),
+        )
+
+    def test_varargs_error_kw(self):
+        msg = r"meth_varargs\(\) takes no keyword arguments"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_varargs(k=1),
+        )
+
+    def test_varargs_keywords(self):
+        self.assertEqual(
+            self.obj.meth_varargs_keywords(1, 2, a=3, b=4),
+            (self.expected_self, (1, 2), {'a': 3, 'b': 4})
+        )
+
+    def test_varargs_keywords_ext(self):
+        self.assertEqual(
+            self.obj.meth_varargs_keywords(*[1, 2], **{'a': 3, 'b': 4}),
+            (self.expected_self, (1, 2), {'a': 3, 'b': 4})
+        )
+
+    def test_o(self):
+        self.assertEqual(self.obj.meth_o(1), (self.expected_self, 1))
+
+    def test_o_ext(self):
+        self.assertEqual(self.obj.meth_o(*[1]), (self.expected_self, 1))
+
+    def test_o_error_no_arg(self):
+        msg = r"meth_o\(\) takes exactly one argument \(0 given\)"
+        self.assertRaisesRegex(TypeError, msg, self.obj.meth_o)
+
+    def test_o_error_two_args(self):
+        msg = r"meth_o\(\) takes exactly one argument \(2 given\)"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_o(1, 2),
+        )
+
+    def test_o_error_ext(self):
+        msg = r"meth_o\(\) takes exactly one argument \(3 given\)"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_o(*(1, 2, 3)),
+        )
+
+    def test_o_error_kw(self):
+        msg = r"meth_o\(\) takes no keyword arguments"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_o(k=1),
+        )
+
+    def test_o_error_arg_kw(self):
+        msg = r"meth_o\(\) takes no keyword arguments"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_o(k=1),
+        )
+
+    def test_noargs(self):
+        self.assertEqual(self.obj.meth_noargs(), self.expected_self)
+
+    def test_noargs_ext(self):
+        self.assertEqual(self.obj.meth_noargs(*[]), self.expected_self)
+
+    def test_noargs_error_arg(self):
+        msg = r"meth_noargs\(\) takes no arguments \(1 given\)"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_noargs(1),
+        )
+
+    def test_noargs_error_arg2(self):
+        msg = r"meth_noargs\(\) takes no arguments \(2 given\)"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_noargs(1, 2),
+        )
+
+    def test_noargs_error_ext(self):
+        msg = r"meth_noargs\(\) takes no arguments \(3 given\)"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_noargs(*(1, 2, 3)),
+        )
+
+    def test_noargs_error_kw(self):
+        msg = r"meth_noargs\(\) takes no keyword arguments"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_noargs(k=1),
+        )
+
+    def test_fastcall(self):
+        self.assertEqual(
+            self.obj.meth_fastcall(1, 2, 3),
+            (self.expected_self, (1, 2, 3)),
+        )
+
+    def test_fastcall_ext(self):
+        self.assertEqual(
+            self.obj.meth_fastcall(*(1, 2, 3)),
+            (self.expected_self, (1, 2, 3)),
+        )
+
+    def test_fastcall_error_kw(self):
+        msg = r"meth_fastcall\(\) takes no keyword arguments"
+        self.assertRaisesRegex(
+            TypeError, msg, lambda: self.obj.meth_fastcall(k=1),
+        )
+
+    def test_fastcall_keywords(self):
+        self.assertEqual(
+            self.obj.meth_fastcall_keywords(1, 2, a=3, b=4),
+            (self.expected_self, (1, 2), {'a': 3, 'b': 4})
+        )
+
+    def test_fastcall_keywords_ext(self):
+        self.assertEqual(
+            self.obj.meth_fastcall_keywords(*(1, 2), **{'a': 3, 'b': 4}),
+            (self.expected_self, (1, 2), {'a': 3, 'b': 4})
+        )
+
+
+class TestCallingConventionsInstance(TestCallingConventions):
+    """Test calling instance methods using various calling conventions"""
+
+    def setUp(self):
+        self.obj = self.expected_self = _testcapi.MethInstance()
+
+
+class TestCallingConventionsClass(TestCallingConventions):
+    """Test calling class methods using various calling conventions"""
+
+    def setUp(self):
+        self.obj = self.expected_self = _testcapi.MethClass
+
+
+class TestCallingConventionsClassInstance(TestCallingConventions):
+    """Test calling class methods on instance"""
+
+    def setUp(self):
+        self.obj = _testcapi.MethClass()
+        self.expected_self = _testcapi.MethClass
+
+
+class TestCallingConventionsStatic(TestCallingConventions):
+    """Test calling static methods using various calling conventions"""
+
+    def setUp(self):
+        self.obj = _testcapi.MethStatic()
+        self.expected_self = None
+
+
 def pyfunc(arg1, arg2):
     return [arg1, arg2]
 
@@ -315,14 +365,14 @@
 
 PYTHON_INSTANCE = PythonClass()
 
+NULL_OR_EMPTY = object()
 
-IGNORE_RESULT = object()
-
-
-@cpython_only
 class FastCallTests(unittest.TestCase):
+    """Test calling using various callables from C
+    """
+
     # Test calls with positional arguments
-    CALLS_POSARGS = (
+    CALLS_POSARGS = [
         # (func, args: tuple, result)
 
         # Python function with 2 arguments
@@ -341,31 +391,11 @@
         (PYTHON_INSTANCE.class_method, (), "classmethod"),
         (PYTHON_INSTANCE.static_method, (), "staticmethod"),
 
-        # C function: METH_NOARGS
-        (globals, (), IGNORE_RESULT),
-
-        # C function: METH_O
-        (id, ("hello",), IGNORE_RESULT),
-
-        # C function: METH_VARARGS
-        (dir, (1,), IGNORE_RESULT),
-
-        # C function: METH_VARARGS | METH_KEYWORDS
-        (min, (5, 9), 5),
-
-        # C function: METH_FASTCALL
-        (divmod, (1000, 33), (30, 10)),
-
-        # C type static method: METH_FASTCALL | METH_CLASS
-        (int.from_bytes, (b'\x01\x00', 'little'), 1),
-
-        # bpo-30524: Test that calling a C type static method with no argument
-        # doesn't crash (ignore the result): METH_FASTCALL | METH_CLASS
-        (datetime.datetime.now, (), IGNORE_RESULT),
-    )
+        # C callables are added later
+    ]
 
     # Test calls with positional and keyword arguments
-    CALLS_KWARGS = (
+    CALLS_KWARGS = [
         # (func, args: tuple, kwargs: dict, result)
 
         # Python function with 2 arguments
@@ -376,17 +406,51 @@
         (PYTHON_INSTANCE.method, (1,), {'arg2': 2}, [1, 2]),
         (PYTHON_INSTANCE.method, (), {'arg1': 1, 'arg2': 2}, [1, 2]),
 
-        # C function: METH_VARARGS | METH_KEYWORDS
-        (max, ([],), {'default': 9}, 9),
+        # C callables are added later
+    ]
 
-        # C type static method: METH_FASTCALL | METH_CLASS
-        (int.from_bytes, (b'\x01\x00',), {'byteorder': 'little'}, 1),
-        (int.from_bytes, (), {'bytes': b'\x01\x00', 'byteorder': 'little'}, 1),
-    )
+    # Add all the calling conventions and variants of C callables
+    _instance = _testcapi.MethInstance()
+    for obj, expected_self in (
+        (_testcapi, _testcapi),  # module-level function
+        (_instance, _instance),  # bound method
+        (_testcapi.MethClass, _testcapi.MethClass),  # class method on class
+        (_testcapi.MethClass(), _testcapi.MethClass),  # class method on inst.
+        (_testcapi.MethStatic, None),  # static method
+    ):
+        CALLS_POSARGS.extend([
+            (obj.meth_varargs, (1, 2), (expected_self, (1, 2))),
+            (obj.meth_varargs_keywords,
+                (1, 2), (expected_self, (1, 2), NULL_OR_EMPTY)),
+            (obj.meth_fastcall, (1, 2), (expected_self, (1, 2))),
+            (obj.meth_fastcall, (), (expected_self, ())),
+            (obj.meth_fastcall_keywords,
+                (1, 2), (expected_self, (1, 2), NULL_OR_EMPTY)),
+            (obj.meth_fastcall_keywords,
+                (), (expected_self, (), NULL_OR_EMPTY)),
+            (obj.meth_noargs, (), expected_self),
+            (obj.meth_o, (123, ), (expected_self, 123)),
+        ])
+
+        CALLS_KWARGS.extend([
+            (obj.meth_varargs_keywords,
+                (1, 2), {'x': 'y'}, (expected_self, (1, 2), {'x': 'y'})),
+            (obj.meth_varargs_keywords,
+                (), {'x': 'y'}, (expected_self, (), {'x': 'y'})),
+            (obj.meth_varargs_keywords,
+                (1, 2), {}, (expected_self, (1, 2), NULL_OR_EMPTY)),
+            (obj.meth_fastcall_keywords,
+                (1, 2), {'x': 'y'}, (expected_self, (1, 2), {'x': 'y'})),
+            (obj.meth_fastcall_keywords,
+                (), {'x': 'y'}, (expected_self, (), {'x': 'y'})),
+            (obj.meth_fastcall_keywords,
+                (1, 2), {}, (expected_self, (1, 2), NULL_OR_EMPTY)),
+        ])
 
     def check_result(self, result, expected):
-        if expected is IGNORE_RESULT:
-            return
+        if isinstance(expected, tuple) and expected[-1] is NULL_OR_EMPTY:
+            if result[-1] in ({}, None):
+                expected = (*expected[:-1], result[-1])
         self.assertEqual(result, expected)
 
     def test_fastcall(self):
@@ -403,7 +467,7 @@
                     self.check_result(result, expected)
 
     def test_vectorcall_dict(self):
-        # Test _PyObject_FastCallDict()
+        # Test PyObject_VectorcallDict()
 
         for func, args, expected in self.CALLS_POSARGS:
             with self.subTest(func=func, args=args):
@@ -411,26 +475,18 @@
                 result = _testcapi.pyobject_fastcalldict(func, args, None)
                 self.check_result(result, expected)
 
-                # kwargs={}
-                result = _testcapi.pyobject_fastcalldict(func, args, {})
-                self.check_result(result, expected)
-
                 if not args:
                     # args=NULL, nargs=0, kwargs=NULL
                     result = _testcapi.pyobject_fastcalldict(func, None, None)
                     self.check_result(result, expected)
 
-                    # args=NULL, nargs=0, kwargs={}
-                    result = _testcapi.pyobject_fastcalldict(func, None, {})
-                    self.check_result(result, expected)
-
         for func, args, kwargs, expected in self.CALLS_KWARGS:
             with self.subTest(func=func, args=args, kwargs=kwargs):
                 result = _testcapi.pyobject_fastcalldict(func, args, kwargs)
                 self.check_result(result, expected)
 
     def test_vectorcall(self):
-        # Test _PyObject_Vectorcall()
+        # Test PyObject_Vectorcall()
 
         for func, args, expected in self.CALLS_POSARGS:
             with self.subTest(func=func, args=args):
@@ -537,7 +593,7 @@
         # 1. vectorcall using PyVectorcall_Call()
         #   (only for objects that support vectorcall directly)
         # 2. normal call
-        # 3. vectorcall using _PyObject_Vectorcall()
+        # 3. vectorcall using PyObject_Vectorcall()
         # 4. call as bound method
         # 5. call using functools.partial
 
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 7547127..5150d57 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -12,6 +12,9 @@
 import threading
 import time
 import unittest
+import weakref
+import importlib.machinery
+import importlib.util
 from test import support
 from test.support import MISSING_C_DOCSTRINGS
 from test.support.script_helper import assert_python_failure, assert_python_ok
@@ -23,6 +26,8 @@
 # Skip this test if the _testcapi module isn't available.
 _testcapi = support.import_module('_testcapi')
 
+import _testinternalcapi
+
 # Were we compiled --with-pydebug or with #define Py_DEBUG?
 Py_DEBUG = hasattr(sys, 'gettotalrefcount')
 
@@ -60,8 +65,12 @@
         self.assertEqual(out, b'')
         # This used to cause an infinite loop.
         self.assertTrue(err.rstrip().startswith(
-                         b'Fatal Python error:'
-                         b' PyThreadState_Get: no current thread'))
+                         b'Fatal Python error: '
+                         b'PyThreadState_Get: '
+                         b'the function must be called with the GIL held, '
+                         b'but the GIL is released '
+                         b'(the current Python thread state is NULL)'),
+                        err)
 
     def test_memoryview_from_NULL_pointer(self):
         self.assertRaises(ValueError, _testcapi.make_memoryview_from_NULL_pointer)
@@ -96,7 +105,7 @@
             def __len__(self):
                 return 1
         self.assertRaises(TypeError, _posixsubprocess.fork_exec,
-                          1,Z(),3,(1, 2),5,6,7,8,9,10,11,12,13,14,15,16,17)
+                          1,Z(),3,(1, 2),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)
         # Issue #15736: overflow in _PySequence_BytesToCharpArray()
         class Z(object):
             def __len__(self):
@@ -104,7 +113,7 @@
             def __getitem__(self, i):
                 return b'x'
         self.assertRaises(MemoryError, _posixsubprocess.fork_exec,
-                          1,Z(),3,(1, 2),5,6,7,8,9,10,11,12,13,14,15,16,17)
+                          1,Z(),3,(1, 2),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)
 
     @unittest.skipUnless(_posixsubprocess, '_posixsubprocess required for this test.')
     def test_subprocess_fork_exec(self):
@@ -114,7 +123,7 @@
 
         # Issue #15738: crash in subprocess_fork_exec()
         self.assertRaises(TypeError, _posixsubprocess.fork_exec,
-                          Z(),[b'1'],3,(1, 2),5,6,7,8,9,10,11,12,13,14,15,16,17)
+                          Z(),[b'1'],3,(1, 2),5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)
 
     @unittest.skipIf(MISSING_C_DOCSTRINGS,
                      "Signature information for builtins requires docstrings")
@@ -196,7 +205,8 @@
             """)
             rc, out, err = assert_python_failure('-c', code)
             self.assertRegex(err.replace(b'\r', b''),
-                             br'Fatal Python error: a function returned NULL '
+                             br'Fatal Python error: _Py_CheckFunctionResult: '
+                                br'a function returned NULL '
                                 br'without setting an error\n'
                              br'Python runtime state: initialized\n'
                              br'SystemError: <built-in function '
@@ -224,8 +234,9 @@
             """)
             rc, out, err = assert_python_failure('-c', code)
             self.assertRegex(err.replace(b'\r', b''),
-                             br'Fatal Python error: a function returned a '
-                                br'result with an error set\n'
+                             br'Fatal Python error: _Py_CheckFunctionResult: '
+                                 br'a function returned a result '
+                                 br'with an error set\n'
                              br'Python runtime state: initialized\n'
                              br'ValueError\n'
                              br'\n'
@@ -439,6 +450,37 @@
         # Test that subtype_dealloc decref the newly assigned __class__ only once
         self.assertEqual(new_type_refcnt, sys.getrefcount(A))
 
+    def test_heaptype_with_dict(self):
+        inst = _testcapi.HeapCTypeWithDict()
+        inst.foo = 42
+        self.assertEqual(inst.foo, 42)
+        self.assertEqual(inst.dictobj, inst.__dict__)
+        self.assertEqual(inst.dictobj, {"foo": 42})
+
+        inst = _testcapi.HeapCTypeWithDict()
+        self.assertEqual({}, inst.__dict__)
+
+    def test_heaptype_with_negative_dict(self):
+        inst = _testcapi.HeapCTypeWithNegativeDict()
+        inst.foo = 42
+        self.assertEqual(inst.foo, 42)
+        self.assertEqual(inst.dictobj, inst.__dict__)
+        self.assertEqual(inst.dictobj, {"foo": 42})
+
+        inst = _testcapi.HeapCTypeWithNegativeDict()
+        self.assertEqual({}, inst.__dict__)
+
+    def test_heaptype_with_weakref(self):
+        inst = _testcapi.HeapCTypeWithWeakref()
+        ref = weakref.ref(inst)
+        self.assertEqual(ref(), inst)
+        self.assertEqual(inst.weakreflist, ref)
+
+    def test_heaptype_with_buffer(self):
+        inst = _testcapi.HeapCTypeWithBuffer()
+        b = bytes(inst)
+        self.assertEqual(b, b"1234")
+
     def test_c_subclass_of_heap_ctype_with_tpdealloc_decrefs_once(self):
         subclass_instance = _testcapi.HeapCTypeSubclass()
         type_refcnt = sys.getrefcount(_testcapi.HeapCTypeSubclass)
@@ -598,6 +640,7 @@
             import pickle
             with open({:d}, "wb") as f:
 
+                @(lambda x:x)  # Py 3.9
                 def noop(x): return x
 
                 a = (b := f'1{{2}}3') + noop('x')  # Py 3.8 (:=) / 3.6 (f'')
@@ -656,6 +699,12 @@
                     if name.startswith('test_') and not name.endswith('_code'))
 
 
+class Test_testinternalcapi(unittest.TestCase):
+    locals().update((name, getattr(_testinternalcapi, name))
+                    for name in dir(_testinternalcapi)
+                    if name.startswith('test_'))
+
+
 class PyMemDebugTests(unittest.TestCase):
     PYTHONMALLOC = 'debug'
     # '0x04c06e0' or '04C06E0'
@@ -683,7 +732,7 @@
                  r"\n"
                  r"Enable tracemalloc to get the memory block allocation traceback\n"
                  r"\n"
-                 r"Fatal Python error: bad trailing pad byte")
+                 r"Fatal Python error: _PyMem_DebugRawFree: bad trailing pad byte")
         regex = regex.format(ptr=self.PTR_REGEX)
         regex = re.compile(regex, flags=re.DOTALL)
         self.assertRegex(out, regex)
@@ -699,14 +748,14 @@
                  r"\n"
                  r"Enable tracemalloc to get the memory block allocation traceback\n"
                  r"\n"
-                 r"Fatal Python error: bad ID: Allocated using API 'm', verified using API 'r'\n")
+                 r"Fatal Python error: _PyMem_DebugRawFree: bad ID: Allocated using API 'm', verified using API 'r'\n")
         regex = regex.format(ptr=self.PTR_REGEX)
         self.assertRegex(out, regex)
 
     def check_malloc_without_gil(self, code):
         out = self.check(code)
-        expected = ('Fatal Python error: Python memory allocator called '
-                    'without holding the GIL')
+        expected = ('Fatal Python error: _PyMem_DebugMalloc: '
+                    'Python memory allocator called without holding the GIL')
         self.assertIn(expected, out)
 
     def test_pymem_malloc_without_gil(self):
@@ -764,5 +813,76 @@
     PYTHONMALLOC = ''
 
 
+class Test_ModuleStateAccess(unittest.TestCase):
+    """Test access to module start (PEP 573)"""
+
+    # The C part of the tests lives in _testmultiphase, in a module called
+    # _testmultiphase_meth_state_access.
+    # This module has multi-phase initialization, unlike _testcapi.
+
+    def setUp(self):
+        fullname = '_testmultiphase_meth_state_access'  # XXX
+        origin = importlib.util.find_spec('_testmultiphase').origin
+        loader = importlib.machinery.ExtensionFileLoader(fullname, origin)
+        spec = importlib.util.spec_from_loader(fullname, loader)
+        module = importlib.util.module_from_spec(spec)
+        loader.exec_module(module)
+        self.module = module
+
+    def test_subclass_get_module(self):
+        """PyType_GetModule for defining_class"""
+        class StateAccessType_Subclass(self.module.StateAccessType):
+            pass
+
+        instance = StateAccessType_Subclass()
+        self.assertIs(instance.get_defining_module(), self.module)
+
+    def test_subclass_get_module_with_super(self):
+        class StateAccessType_Subclass(self.module.StateAccessType):
+            def get_defining_module(self):
+                return super().get_defining_module()
+
+        instance = StateAccessType_Subclass()
+        self.assertIs(instance.get_defining_module(), self.module)
+
+    def test_state_access(self):
+        """Checks methods defined with and without argument clinic
+
+        This tests a no-arg method (get_count) and a method with
+        both a positional and keyword argument.
+        """
+
+        a = self.module.StateAccessType()
+        b = self.module.StateAccessType()
+
+        methods = {
+            'clinic': a.increment_count_clinic,
+            'noclinic': a.increment_count_noclinic,
+        }
+
+        for name, increment_count in methods.items():
+            with self.subTest(name):
+                self.assertEqual(a.get_count(), b.get_count())
+                self.assertEqual(a.get_count(), 0)
+
+                increment_count()
+                self.assertEqual(a.get_count(), b.get_count())
+                self.assertEqual(a.get_count(), 1)
+
+                increment_count(3)
+                self.assertEqual(a.get_count(), b.get_count())
+                self.assertEqual(a.get_count(), 4)
+
+                increment_count(-2, twice=True)
+                self.assertEqual(a.get_count(), b.get_count())
+                self.assertEqual(a.get_count(), 0)
+
+                with self.assertRaises(TypeError):
+                    increment_count(thrice=3)
+
+                with self.assertRaises(TypeError):
+                    increment_count(1, 2, 3)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_cgitb.py b/Lib/test/test_cgitb.py
index e299ec3..bab152d 100644
--- a/Lib/test/test_cgitb.py
+++ b/Lib/test/test_cgitb.py
@@ -31,7 +31,7 @@
     def test_text(self):
         try:
             raise ValueError("Hello World")
-        except ValueError as err:
+        except ValueError:
             text = cgitb.text(sys.exc_info())
             self.assertIn("ValueError", text)
             self.assertIn("Hello World", text)
@@ -41,8 +41,9 @@
             rc, out, err = assert_python_failure(
                   '-c',
                   ('import cgitb; cgitb.enable(logdir=%s); '
-                   'raise ValueError("Hello World")') % repr(tracedir))
-        out = out.decode(sys.getfilesystemencoding())
+                   'raise ValueError("Hello World")') % repr(tracedir),
+                  PYTHONIOENCODING='utf-8')
+        out = out.decode()
         self.assertIn("ValueError", out)
         self.assertIn("Hello World", out)
         self.assertIn("<strong>&lt;module&gt;</strong>", out)
@@ -56,8 +57,9 @@
             rc, out, err = assert_python_failure(
                   '-c',
                   ('import cgitb; cgitb.enable(format="text", logdir=%s); '
-                   'raise ValueError("Hello World")') % repr(tracedir))
-        out = out.decode(sys.getfilesystemencoding())
+                   'raise ValueError("Hello World")') % repr(tracedir),
+                  PYTHONIOENCODING='utf-8')
+        out = out.decode()
         self.assertIn("ValueError", out)
         self.assertIn("Hello World", out)
         self.assertNotIn('<p>', out)
diff --git a/Lib/test/test_check_c_globals.py b/Lib/test/test_check_c_globals.py
new file mode 100644
index 0000000..030debc
--- /dev/null
+++ b/Lib/test/test_check_c_globals.py
@@ -0,0 +1,24 @@
+import unittest
+import test.test_tools
+
+test.test_tools.skip_if_missing('c-analyzer')
+with test.test_tools.imports_under_tool('c-analyzer'):
+    from cpython.__main__ import main
+
+
+class ActualChecks(unittest.TestCase):
+
+    # XXX Also run the check in "make check".
+    #@unittest.expectedFailure
+    # Failing on one of the buildbots (see https://bugs.python.org/issue36876).
+    @unittest.skip('activate this once all the globals have been resolved')
+    def test_check_c_globals(self):
+        try:
+            main('check', {})
+        except NotImplementedError:
+            raise unittest.SkipTest('not supported on this host')
+
+
+if __name__ == '__main__':
+    # Test needs to be a package, so we can do relative imports.
+    unittest.main()
diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py
index 456f1be..7524f58 100644
--- a/Lib/test/test_class.py
+++ b/Lib/test/test_class.py
@@ -529,7 +529,7 @@
             # In debug mode, printed XXX undetected error and
             #  raises AttributeError
             I()
-        except AttributeError as x:
+        except AttributeError:
             pass
         else:
             self.fail("attribute error for I.__init__ got masked")
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index 244c5fe..9989b14 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -2,7 +2,7 @@
 # Copyright 2012-2013 by Larry Hastings.
 # Licensed to the PSF under a contributor agreement.
 
-from test import support
+from test import support, test_tools
 from unittest import TestCase
 import collections
 import inspect
@@ -10,17 +10,10 @@
 import sys
 import unittest
 
-
-clinic_path = os.path.join(os.path.dirname(__file__), '..', '..', 'Tools', 'clinic')
-clinic_path = os.path.normpath(clinic_path)
-if not os.path.exists(clinic_path):
-    raise unittest.SkipTest(f'{clinic_path!r} path does not exist')
-sys.path.append(clinic_path)
-try:
+test_tools.skip_if_missing('clinic')
+with test_tools.imports_under_tool('clinic'):
     import clinic
     from clinic import DSLParser
-finally:
-    del sys.path[-1]
 
 
 class FakeConverter:
@@ -801,17 +794,29 @@
     maxDiff = None
 
     def test_external(self):
+        # bpo-42398: Test that the destination file is left unchanged if the
+        # content does not change. Moreover, check also that the file
+        # modification time does not change in this case.
         source = support.findfile('clinic.test')
         with open(source, 'r', encoding='utf-8') as f:
-            original = f.read()
-        with support.temp_dir() as testdir:
-            testfile = os.path.join(testdir, 'clinic.test.c')
+            orig_contents = f.read()
+
+        with support.temp_dir() as tmp_dir:
+            testfile = os.path.join(tmp_dir, 'clinic.test.c')
             with open(testfile, 'w', encoding='utf-8') as f:
-                f.write(original)
-            clinic.parse_file(testfile, force=True)
+                f.write(orig_contents)
+            old_mtime_ns = os.stat(testfile).st_mtime_ns
+
+            clinic.parse_file(testfile)
+
             with open(testfile, 'r', encoding='utf-8') as f:
-                result = f.read()
-            self.assertEqual(result, original)
+                new_contents = f.read()
+            new_mtime_ns = os.stat(testfile).st_mtime_ns
+
+        self.assertEqual(new_contents, orig_contents)
+        # Don't change the file modification time
+        # if the content does not change
+        self.assertEqual(new_mtime_ns, old_mtime_ns)
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index 5fc5bff..051c092 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -6,6 +6,7 @@
 import subprocess
 import sys
 import tempfile
+import textwrap
 import unittest
 from test import support
 from test.support.script_helper import (
@@ -44,7 +45,11 @@
 
     def test_usage(self):
         rc, out, err = assert_python_ok('-h')
-        self.assertIn(b'usage', out)
+        lines = out.splitlines()
+        self.assertIn(b'usage', lines[0])
+        # The first line contains the program name,
+        # but the rest should be ASCII-only
+        b''.join(lines[1:]).decode('ascii')
 
     def test_version(self):
         version = ('Python %d.%d' % sys.version_info[:2]).encode("ascii")
@@ -219,6 +224,21 @@
         )
         check_output(text)
 
+    def test_non_interactive_output_buffering(self):
+        code = textwrap.dedent("""
+            import sys
+            out = sys.stdout
+            print(out.isatty(), out.write_through, out.line_buffering)
+            err = sys.stderr
+            print(err.isatty(), err.write_through, err.line_buffering)
+        """)
+        args = [sys.executable, '-c', code]
+        proc = subprocess.run(args, stdout=subprocess.PIPE,
+                              stderr=subprocess.PIPE, text=True, check=True)
+        self.assertEqual(proc.stdout,
+                         'False False False\n'
+                         'False False True\n')
+
     def test_unbuffered_output(self):
         # Test expected operation of the '-u' switch
         for stream in ('stdout', 'stderr'):
@@ -332,10 +352,10 @@
 
         if sys.platform == 'win32':
             self.assertEqual(b'1\r\n2\r\n', out)
-            self.assertEqual(b'3\r\n4', err)
+            self.assertEqual(b'3\r\n4\r\n', err)
         else:
             self.assertEqual(b'1\n2\n', out)
-            self.assertEqual(b'3\n4', err)
+            self.assertEqual(b'3\n4\n', err)
 
     def test_unmached_quote(self):
         # Issue #10206: python program starting with unmatched quote
@@ -391,7 +411,7 @@
             stderr=subprocess.PIPE,
             preexec_fn=preexec)
         out, err = p.communicate()
-        self.assertEqual(support.strip_python_stderr(err), b'')
+        self.assertEqual(err, b'')
         self.assertEqual(p.returncode, 42)
 
     def test_no_stdin(self):
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py
index f0bd013..7a3707d 100644
--- a/Lib/test/test_cmd_line_script.py
+++ b/Lib/test/test_cmd_line_script.py
@@ -143,7 +143,7 @@
             *run_args, __isolated=False, __cwd=cwd, **env_vars
         )
         if verbose > 1:
-            print('Output from test script %r:' % script_exec_args)
+            print(f'Output from test script {script_exec_args!r:}')
             print(repr(err))
             print('Expected output: %r' % expected_msg)
         self.assertIn(expected_msg.encode('utf-8'), err)
@@ -218,6 +218,19 @@
             script_name = _make_test_script(script_dir, 'script')
             self._check_script(script_name, script_name, script_name,
                                script_dir, None,
+                               importlib.machinery.SourceFileLoader,
+                               expected_cwd=script_dir)
+
+    def test_script_abspath(self):
+        # pass the script using the relative path, expect the absolute path
+        # in __file__
+        with support.temp_cwd() as script_dir:
+            self.assertTrue(os.path.isabs(script_dir), script_dir)
+
+            script_name = _make_test_script(script_dir, 'script')
+            relative_name = os.path.basename(script_name)
+            self._check_script(relative_name, script_name, relative_name,
+                               script_dir, None,
                                importlib.machinery.SourceFileLoader)
 
     def test_script_compiled(self):
@@ -486,6 +499,16 @@
             self.assertNotIn(b'is a package', err)
             self.assertNotIn(b'Traceback', err)
 
+    def test_hint_when_triying_to_import_a_py_file(self):
+        with support.temp_dir() as script_dir, \
+                support.change_cwd(path=script_dir):
+            # Create invalid *.pyc as empty file
+            with open('asyncio.py', 'wb'):
+                pass
+            err = self.check_dash_m_failure('asyncio.py')
+            self.assertIn(b"Try using 'asyncio' instead "
+                          b"of 'asyncio.py' as the module name", err)
+
     def test_dash_m_init_traceback(self):
         # These were wrapped in an ImportError and tracebacks were
         # suppressed; see Issue 14285
@@ -523,7 +546,7 @@
             script_name = _make_test_script(script_dir, 'script', script)
             exitcode, stdout, stderr = assert_python_failure(script_name)
             text = stderr.decode('ascii').split('\n')
-            self.assertEqual(len(text), 4)
+            self.assertEqual(len(text), 5)
             self.assertTrue(text[0].startswith('Traceback'))
             self.assertTrue(text[1].startswith('  File '))
             self.assertTrue(text[3].startswith('NameError'))
@@ -542,7 +565,7 @@
 
         # Issue #16218
         source = 'print(ascii(__file__))\n'
-        script_name = _make_test_script(os.curdir, name, source)
+        script_name = _make_test_script(os.getcwd(), name, source)
         self.addCleanup(support.unlink, script_name)
         rc, stdout, stderr = assert_python_ok(script_name)
         self.assertEqual(
@@ -567,7 +590,7 @@
             script_name = _make_test_script(script_dir, 'script', script)
             exitcode, stdout, stderr = assert_python_failure(script_name)
             text = stderr.decode('ascii')
-            self.assertEqual(text, "some text")
+            self.assertEqual(text.rstrip(), "some text")
 
     def test_syntaxerror_unindented_caret_position(self):
         script = "1 + 1 = 2\n"
@@ -609,14 +632,14 @@
             self.assertEqual(
                 stderr.splitlines()[-3:],
                 [
-                    b'    foo = f"""{}',
+                    b'    foo"""',
                     b'          ^',
                     b'SyntaxError: f-string: empty expression not allowed',
                 ],
             )
 
     def test_syntaxerror_invalid_escape_sequence_multi_line(self):
-        script = 'foo = """\\q\n"""\n'
+        script = 'foo = """\\q"""\n'
         with support.temp_dir() as script_dir:
             script_name = _make_test_script(script_dir, 'script', script)
             exitcode, stdout, stderr = assert_python_failure(
@@ -624,10 +647,9 @@
             )
             self.assertEqual(
                 stderr.splitlines()[-3:],
-                [
-                    b'    foo = """\\q',
+                [   b'    foo = """\\q"""',
                     b'          ^',
-                    b'SyntaxError: invalid escape sequence \\q',
+                    b'SyntaxError: invalid escape sequence \\q'
                 ],
             )
 
@@ -702,7 +724,7 @@
     def test_nonexisting_script(self):
         # bpo-34783: "./python script.py" must not crash
         # if the script file doesn't exist.
-        # (Skip test for macOS framework builds because sys.excutable name
+        # (Skip test for macOS framework builds because sys.executable name
         #  is not the actual Python executable file name.
         script = 'nonexistingscript.py'
         self.assertFalse(os.path.exists(script))
diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py
index 0d80af4..ac3dde7 100644
--- a/Lib/test/test_code.py
+++ b/Lib/test/test_code.py
@@ -130,7 +130,6 @@
 import threading
 import unittest
 import weakref
-import opcode
 try:
     import ctypes
 except ImportError:
@@ -241,7 +240,7 @@
         def func2():
             y = 2
             return y
-        code2 = func.__code__
+        code2 = func2.__code__
 
         for attr, value in (
             ("co_argcount", 0),
@@ -434,42 +433,6 @@
             tt.join()
             self.assertEqual(LAST_FREED, 500)
 
-        @cpython_only
-        def test_clean_stack_on_return(self):
-
-            def f(x):
-                return x
-
-            code = f.__code__
-            ct = type(f.__code__)
-
-            # Insert an extra LOAD_FAST, this duplicates the value of
-            # 'x' in the stack, leaking it if the frame is not properly
-            # cleaned up upon exit.
-
-            bytecode = list(code.co_code)
-            bytecode.insert(-2, opcode.opmap['LOAD_FAST'])
-            bytecode.insert(-2, 0)
-
-            c = ct(code.co_argcount, code.co_posonlyargcount,
-                   code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize+1,
-                   code.co_flags, bytes(bytecode),
-                   code.co_consts, code.co_names, code.co_varnames,
-                   code.co_filename, code.co_name, code.co_firstlineno,
-                   code.co_lnotab, code.co_freevars, code.co_cellvars)
-            new_function = type(f)(c, f.__globals__, 'nf', f.__defaults__, f.__closure__)
-
-            class Var:
-                pass
-            the_object = Var()
-            var = weakref.ref(the_object)
-
-            new_function(the_object)
-
-            # Check if the_object is leaked
-            del the_object
-            assert var() is None
-
 
 def test_main(verbose=None):
     from test import test_code
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 0fd258c..8d112a1 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -11,7 +11,7 @@
 
 try:
     import _testcapi
-except ImportError as exc:
+except ImportError:
     _testcapi = None
 
 try:
@@ -2183,6 +2183,18 @@
             ("", len(allbytes))
         )
 
+        self.assertRaisesRegex(TypeError,
+            "character mapping must be in range\\(0x110000\\)",
+            codecs.charmap_decode,
+            b"\x00\x01\x02", "strict", {0: "A", 1: 'Bb', 2: -2}
+        )
+
+        self.assertRaisesRegex(TypeError,
+            "character mapping must be in range\\(0x110000\\)",
+            codecs.charmap_decode,
+            b"\x00\x01\x02", "strict", {0: "A", 1: 'Bb', 2: 999999999}
+        )
+
     def test_decode_with_int2int_map(self):
         a = ord('a')
         b = ord('b')
diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py
index 1e57ab9..66caf5a 100644
--- a/Lib/test/test_codeop.py
+++ b/Lib/test/test_codeop.py
@@ -2,14 +2,15 @@
    Test cases for codeop.py
    Nick Mathewson
 """
+import sys
 import unittest
+import warnings
 from test import support
 
 from codeop import compile_command, PyCF_DONT_IMPLY_DEDENT
 import io
 
 if support.is_jython:
-    import sys
 
     def unify_callables(d):
         for n,v in d.items():
@@ -288,6 +289,15 @@
 
         ai("[i for i in range(10)] = (1, 2, 3)")
 
+    def test_invalid_exec(self):
+        ai = self.assertInvalid
+        ai("raise = 4", symbol="exec")
+        ai('def a-b', symbol='exec')
+        ai('await?', symbol='exec')
+        ai('=!=', symbol='exec')
+        ai('a await raise b', symbol='exec')
+        ai('a await raise b?+1', symbol='exec')
+
     def test_filename(self):
         self.assertEqual(compile_command("a = 1\n", "abc").co_filename,
                          compile("a = 1\n", "abc", 'single').co_filename)
@@ -296,9 +306,18 @@
 
     def test_warning(self):
         # Test that the warning is only returned once.
-        with support.check_warnings((".*literal", SyntaxWarning)) as w:
-            compile_command("0 is 0")
-            self.assertEqual(len(w.warnings), 1)
+        with support.check_warnings(
+                (".*literal", SyntaxWarning),
+                (".*invalid", DeprecationWarning),
+                ) as w:
+            compile_command(r"'\e' is 0")
+            self.assertEqual(len(w.warnings), 2)
+
+        # bpo-41520: check SyntaxWarning treated as an SyntaxError
+        with warnings.catch_warnings(), self.assertRaises(SyntaxError):
+            warnings.simplefilter('error', SyntaxWarning)
+            compile_command('1 is 1', symbol='exec')
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 58f65f3..057ec92 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -195,6 +195,22 @@
              ('e', 55), ('f', 666), ('g', 777), ('h', 88888),
              ('i', 9999), ('j', 0)])
 
+    def test_iter_not_calling_getitem_on_maps(self):
+        class DictWithGetItem(UserDict):
+            def __init__(self, *args, **kwds):
+                self.called = False
+                UserDict.__init__(self, *args, **kwds)
+            def __getitem__(self, item):
+                self.called = True
+                UserDict.__getitem__(self, item)
+
+        d = DictWithGetItem(a=1)
+        c = ChainMap(d)
+        d.called = False
+
+        set(c)  # iterate over chain map
+        self.assertFalse(d.called, '__getitem__ was called')
+
     def test_dict_coercion(self):
         d = ChainMap(dict(a=1, b=2), dict(b=20, c=30))
         self.assertEqual(dict(d), dict(a=1, b=2, c=30))
@@ -232,6 +248,52 @@
         for k, v in dict(a=1, B=20, C=30, z=100).items():             # check get
             self.assertEqual(d.get(k, 100), v)
 
+    def test_union_operators(self):
+        cm1 = ChainMap(dict(a=1, b=2), dict(c=3, d=4))
+        cm2 = ChainMap(dict(a=10, e=5), dict(b=20, d=4))
+        cm3 = cm1.copy()
+        d = dict(a=10, c=30)
+        pairs = [('c', 3), ('p',0)]
+
+        tmp = cm1 | cm2 # testing between chainmaps
+        self.assertEqual(tmp.maps, [cm1.maps[0] | dict(cm2), *cm1.maps[1:]])
+        cm1 |= cm2
+        self.assertEqual(tmp, cm1)
+
+        tmp = cm2 | d # testing between chainmap and mapping
+        self.assertEqual(tmp.maps, [cm2.maps[0] | d, *cm2.maps[1:]])
+        self.assertEqual((d | cm2).maps, [d | dict(cm2)])
+        cm2 |= d
+        self.assertEqual(tmp, cm2)
+
+        # testing behavior between chainmap and iterable key-value pairs
+        with self.assertRaises(TypeError):
+            cm3 | pairs
+        tmp = cm3.copy()
+        cm3 |= pairs
+        self.assertEqual(cm3.maps, [tmp.maps[0] | dict(pairs), *tmp.maps[1:]])
+
+        # testing proper return types for ChainMap and it's subclasses
+        class Subclass(ChainMap):
+            pass
+
+        class SubclassRor(ChainMap):
+            def __ror__(self, other):
+                return super().__ror__(other)
+
+        tmp = ChainMap() | ChainMap()
+        self.assertIs(type(tmp), ChainMap)
+        self.assertIs(type(tmp.maps[0]), dict)
+        tmp = ChainMap() | Subclass()
+        self.assertIs(type(tmp), ChainMap)
+        self.assertIs(type(tmp.maps[0]), dict)
+        tmp = Subclass() | ChainMap()
+        self.assertIs(type(tmp), Subclass)
+        self.assertIs(type(tmp.maps[0]), dict)
+        tmp = ChainMap() | SubclassRor()
+        self.assertIs(type(tmp), SubclassRor)
+        self.assertIs(type(tmp.maps[0]), dict)
+
 
 ################################################################################
 ### Named Tuples
@@ -365,6 +427,18 @@
         self.assertIs(P.m.__doc__, Q.o.__doc__)
         self.assertIs(P.n.__doc__, Q.p.__doc__)
 
+    @support.cpython_only
+    def test_field_repr(self):
+        Point = namedtuple('Point', 'x y')
+        self.assertEqual(repr(Point.x), "_tuplegetter(0, 'Alias for field number 0')")
+        self.assertEqual(repr(Point.y), "_tuplegetter(1, 'Alias for field number 1')")
+
+        Point.x.__doc__ = 'The x-coordinate'
+        Point.y.__doc__ = 'The y-coordinate'
+
+        self.assertEqual(repr(Point.x), "_tuplegetter(0, 'The x-coordinate')")
+        self.assertEqual(repr(Point.y), "_tuplegetter(1, 'The y-coordinate')")
+
     def test_name_fixer(self):
         for spec, renamed in [
             [('efg', 'g%hi'),  ('efg', '_1')],                              # field with non-alpha char
@@ -424,8 +498,8 @@
 
         self.assertIsInstance(p, tuple)
         self.assertEqual(p, (11, 22))                                       # matches a real tuple
-        self.assertEqual(tuple(p), (11, 22))                                # coercable to a real tuple
-        self.assertEqual(list(p), [11, 22])                                 # coercable to a list
+        self.assertEqual(tuple(p), (11, 22))                                # coercible to a real tuple
+        self.assertEqual(list(p), [11, 22])                                 # coercible to a list
         self.assertEqual(max(p), 22)                                        # iterable
         self.assertEqual(max(*p), 22)                                       # star-able
         x, y = p
@@ -1472,9 +1546,6 @@
 
     def test_issue26915(self):
         # Container membership test should check identity first
-        class CustomEqualObject:
-            def __eq__(self, other):
-                return False
         class CustomSequence(Sequence):
             def __init__(self, seq):
                 self._seq = seq
@@ -1484,7 +1555,7 @@
                 return len(self._seq)
 
         nan = float('nan')
-        obj = CustomEqualObject()
+        obj = support.NEVER_EQ
         seq = CustomSequence([nan, obj, nan])
         containers = [
             seq,
@@ -1503,6 +1574,62 @@
         # coerce both to a real set then check equality
         self.assertSetEqual(set(s1), set(s2))
 
+    def test_Set_from_iterable(self):
+        """Verify _from_iterable overriden to an instance method works."""
+        class SetUsingInstanceFromIterable(MutableSet):
+            def __init__(self, values, created_by):
+                if not created_by:
+                    raise ValueError(f'created_by must be specified')
+                self.created_by = created_by
+                self._values = set(values)
+
+            def _from_iterable(self, values):
+                return type(self)(values, 'from_iterable')
+
+            def __contains__(self, value):
+                return value in self._values
+
+            def __iter__(self):
+                yield from self._values
+
+            def __len__(self):
+                return len(self._values)
+
+            def add(self, value):
+                self._values.add(value)
+
+            def discard(self, value):
+                self._values.discard(value)
+
+        impl = SetUsingInstanceFromIterable([1, 2, 3], 'test')
+
+        actual = impl - {1}
+        self.assertIsInstance(actual, SetUsingInstanceFromIterable)
+        self.assertEqual('from_iterable', actual.created_by)
+        self.assertEqual({2, 3}, actual)
+
+        actual = impl | {4}
+        self.assertIsInstance(actual, SetUsingInstanceFromIterable)
+        self.assertEqual('from_iterable', actual.created_by)
+        self.assertEqual({1, 2, 3, 4}, actual)
+
+        actual = impl & {2}
+        self.assertIsInstance(actual, SetUsingInstanceFromIterable)
+        self.assertEqual('from_iterable', actual.created_by)
+        self.assertEqual({2}, actual)
+
+        actual = impl ^ {3, 4}
+        self.assertIsInstance(actual, SetUsingInstanceFromIterable)
+        self.assertEqual('from_iterable', actual.created_by)
+        self.assertEqual({1, 2, 4}, actual)
+
+        # NOTE: ixor'ing with a list is important here: internally, __ixor__
+        # only calls _from_iterable if the other value isn't already a Set.
+        impl ^= [3, 4]
+        self.assertIsInstance(impl, SetUsingInstanceFromIterable)
+        self.assertEqual('test', impl.created_by)
+        self.assertEqual({1, 2, 4}, impl)
+
     def test_Set_interoperability_with_real_sets(self):
         # Issue: 8743
         class ListSet(Set):
@@ -2067,6 +2194,29 @@
                 set_result = setop(set(p.elements()), set(q.elements()))
                 self.assertEqual(counter_result, dict.fromkeys(set_result, 1))
 
+    def test_subset_superset_not_implemented(self):
+        # Verify that multiset comparison operations are not implemented.
+
+        # These operations were intentionally omitted because multiset
+        # comparison semantics conflict with existing dict equality semantics.
+
+        # For multisets, we would expect that if p<=q and p>=q are both true,
+        # then p==q.  However, dict equality semantics require that p!=q when
+        # one of sets contains an element with a zero count and the other
+        # doesn't.
+
+        p = Counter(a=1, b=0)
+        q = Counter(a=1, c=0)
+        self.assertNotEqual(p, q)
+        with self.assertRaises(TypeError):
+            p < q
+        with self.assertRaises(TypeError):
+            p <= q
+        with self.assertRaises(TypeError):
+            p > q
+        with self.assertRaises(TypeError):
+            p >= q
+
     def test_inplace_operations(self):
         elements = 'abcd'
         for i in range(1000):
diff --git a/Lib/test/test_compare.py b/Lib/test/test_compare.py
index 471c8da..2b3faed 100644
--- a/Lib/test/test_compare.py
+++ b/Lib/test/test_compare.py
@@ -1,4 +1,5 @@
 import unittest
+from test.support import ALWAYS_EQ
 
 class Empty:
     def __repr__(self):
@@ -14,13 +15,6 @@
     def __eq__(self, other):
         return self.arg == other
 
-class Anything:
-    def __eq__(self, other):
-        return True
-
-    def __ne__(self, other):
-        return False
-
 class ComparisonTest(unittest.TestCase):
     set1 = [2, 2.0, 2, 2+0j, Cmp(2.0)]
     set2 = [[1], (3,), None, Empty()]
@@ -113,11 +107,11 @@
 
     def test_issue_1393(self):
         x = lambda: None
-        self.assertEqual(x, Anything())
-        self.assertEqual(Anything(), x)
+        self.assertEqual(x, ALWAYS_EQ)
+        self.assertEqual(ALWAYS_EQ, x)
         y = object()
-        self.assertEqual(y, Anything())
-        self.assertEqual(Anything(), y)
+        self.assertEqual(y, ALWAYS_EQ)
+        self.assertEqual(ALWAYS_EQ, y)
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index 566ca27..55716fd 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -750,6 +750,16 @@
             self.assertEqual(None, opcodes[0].argval)
             self.assertEqual('RETURN_VALUE', opcodes[1].opname)
 
+    def test_big_dict_literal(self):
+        # The compiler has a flushing point in "compiler_dict" that calls compiles
+        # a portion of the dictionary literal when the loop that iterates over the items
+        # reaches 0xFFFF elements but the code was not including the boundary element,
+        # dropping the key at position 0xFFFF. See bpo-41531 for more information
+
+        dict_size = 0xFFFF + 1
+        the_dict = "{" + ",".join(f"{x}:{x}" for x in range(dict_size)) + "}"
+        self.assertEqual(len(eval(the_dict)), dict_size)
+
 class TestExpressionStackSize(unittest.TestCase):
     # These tests check that the computed stack size for a code object
     # stays within reasonable bounds (see issue #21523 for an example
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index 64f092b..3bbc681 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -1,16 +1,19 @@
-import sys
 import compileall
+import contextlib
+import filecmp
 import importlib.util
-import test.test_importlib.util
+import io
+import itertools
 import os
 import pathlib
 import py_compile
 import shutil
 import struct
+import sys
 import tempfile
+import test.test_importlib.util
 import time
 import unittest
-import io
 
 from unittest import mock, skipUnless
 try:
@@ -26,6 +29,24 @@
 from .test_py_compile import SourceDateEpochTestMeta
 
 
+def get_pyc(script, opt):
+    if not opt:
+        # Replace None and 0 with ''
+        opt = ''
+    return importlib.util.cache_from_source(script, optimization=opt)
+
+
+def get_pycs(script):
+    return [get_pyc(script, opt) for opt in (0, 1, 2)]
+
+
+def is_hardlink(filename1, filename2):
+    """Returns True if two files have the same inode (hardlink)"""
+    inode1 = os.stat(filename1).st_ino
+    inode2 = os.stat(filename2).st_ino
+    return inode1 == inode2
+
+
 class CompileallTestsBase:
 
     def setUp(self):
@@ -194,6 +215,172 @@
         compileall.compile_dir(self.directory, quiet=True, workers=5)
         self.assertTrue(compile_file_mock.called)
 
+    def test_compile_dir_maxlevels(self):
+        # Test the actual impact of maxlevels parameter
+        depth = 3
+        path = self.directory
+        for i in range(1, depth + 1):
+            path = os.path.join(path, f"dir_{i}")
+            source = os.path.join(path, 'script.py')
+            os.mkdir(path)
+            shutil.copyfile(self.source_path, source)
+        pyc_filename = importlib.util.cache_from_source(source)
+
+        compileall.compile_dir(self.directory, quiet=True, maxlevels=depth - 1)
+        self.assertFalse(os.path.isfile(pyc_filename))
+
+        compileall.compile_dir(self.directory, quiet=True, maxlevels=depth)
+        self.assertTrue(os.path.isfile(pyc_filename))
+
+    def _test_ddir_only(self, *, ddir, parallel=True):
+        """Recursive compile_dir ddir must contain package paths; bpo39769."""
+        fullpath = ["test", "foo"]
+        path = self.directory
+        mods = []
+        for subdir in fullpath:
+            path = os.path.join(path, subdir)
+            os.mkdir(path)
+            script_helper.make_script(path, "__init__", "")
+            mods.append(script_helper.make_script(path, "mod",
+                                                  "def fn(): 1/0\nfn()\n"))
+        compileall.compile_dir(
+                self.directory, quiet=True, ddir=ddir,
+                workers=2 if parallel else 1)
+        self.assertTrue(mods)
+        for mod in mods:
+            self.assertTrue(mod.startswith(self.directory), mod)
+            modcode = importlib.util.cache_from_source(mod)
+            modpath = mod[len(self.directory+os.sep):]
+            _, _, err = script_helper.assert_python_failure(modcode)
+            expected_in = os.path.join(ddir, modpath)
+            mod_code_obj = test.test_importlib.util.get_code_from_pyc(modcode)
+            self.assertEqual(mod_code_obj.co_filename, expected_in)
+            self.assertIn(f'"{expected_in}"', os.fsdecode(err))
+
+    def test_ddir_only_one_worker(self):
+        """Recursive compile_dir ddir= contains package paths; bpo39769."""
+        return self._test_ddir_only(ddir="<a prefix>", parallel=False)
+
+    def test_ddir_multiple_workers(self):
+        """Recursive compile_dir ddir= contains package paths; bpo39769."""
+        return self._test_ddir_only(ddir="<a prefix>", parallel=True)
+
+    def test_ddir_empty_only_one_worker(self):
+        """Recursive compile_dir ddir='' contains package paths; bpo39769."""
+        return self._test_ddir_only(ddir="", parallel=False)
+
+    def test_ddir_empty_multiple_workers(self):
+        """Recursive compile_dir ddir='' contains package paths; bpo39769."""
+        return self._test_ddir_only(ddir="", parallel=True)
+
+    def test_strip_only(self):
+        fullpath = ["test", "build", "real", "path"]
+        path = os.path.join(self.directory, *fullpath)
+        os.makedirs(path)
+        script = script_helper.make_script(path, "test", "1 / 0")
+        bc = importlib.util.cache_from_source(script)
+        stripdir = os.path.join(self.directory, *fullpath[:2])
+        compileall.compile_dir(path, quiet=True, stripdir=stripdir)
+        rc, out, err = script_helper.assert_python_failure(bc)
+        expected_in = os.path.join(*fullpath[2:])
+        self.assertIn(
+            expected_in,
+            str(err, encoding=sys.getdefaultencoding())
+        )
+        self.assertNotIn(
+            stripdir,
+            str(err, encoding=sys.getdefaultencoding())
+        )
+
+    def test_prepend_only(self):
+        fullpath = ["test", "build", "real", "path"]
+        path = os.path.join(self.directory, *fullpath)
+        os.makedirs(path)
+        script = script_helper.make_script(path, "test", "1 / 0")
+        bc = importlib.util.cache_from_source(script)
+        prependdir = "/foo"
+        compileall.compile_dir(path, quiet=True, prependdir=prependdir)
+        rc, out, err = script_helper.assert_python_failure(bc)
+        expected_in = os.path.join(prependdir, self.directory, *fullpath)
+        self.assertIn(
+            expected_in,
+            str(err, encoding=sys.getdefaultencoding())
+        )
+
+    def test_strip_and_prepend(self):
+        fullpath = ["test", "build", "real", "path"]
+        path = os.path.join(self.directory, *fullpath)
+        os.makedirs(path)
+        script = script_helper.make_script(path, "test", "1 / 0")
+        bc = importlib.util.cache_from_source(script)
+        stripdir = os.path.join(self.directory, *fullpath[:2])
+        prependdir = "/foo"
+        compileall.compile_dir(path, quiet=True,
+                               stripdir=stripdir, prependdir=prependdir)
+        rc, out, err = script_helper.assert_python_failure(bc)
+        expected_in = os.path.join(prependdir, *fullpath[2:])
+        self.assertIn(
+            expected_in,
+            str(err, encoding=sys.getdefaultencoding())
+        )
+        self.assertNotIn(
+            stripdir,
+            str(err, encoding=sys.getdefaultencoding())
+        )
+
+    def test_strip_prepend_and_ddir(self):
+        fullpath = ["test", "build", "real", "path", "ddir"]
+        path = os.path.join(self.directory, *fullpath)
+        os.makedirs(path)
+        script_helper.make_script(path, "test", "1 / 0")
+        with self.assertRaises(ValueError):
+            compileall.compile_dir(path, quiet=True, ddir="/bar",
+                                   stripdir="/foo", prependdir="/bar")
+
+    def test_multiple_optimization_levels(self):
+        script = script_helper.make_script(self.directory,
+                                           "test_optimization",
+                                           "a = 0")
+        bc = []
+        for opt_level in "", 1, 2, 3:
+            bc.append(importlib.util.cache_from_source(script,
+                                                       optimization=opt_level))
+        test_combinations = [[0, 1], [1, 2], [0, 2], [0, 1, 2]]
+        for opt_combination in test_combinations:
+            compileall.compile_file(script, quiet=True,
+                                    optimize=opt_combination)
+            for opt_level in opt_combination:
+                self.assertTrue(os.path.isfile(bc[opt_level]))
+                try:
+                    os.unlink(bc[opt_level])
+                except Exception:
+                    pass
+
+    @support.skip_unless_symlink
+    def test_ignore_symlink_destination(self):
+        # Create folders for allowed files, symlinks and prohibited area
+        allowed_path = os.path.join(self.directory, "test", "dir", "allowed")
+        symlinks_path = os.path.join(self.directory, "test", "dir", "symlinks")
+        prohibited_path = os.path.join(self.directory, "test", "dir", "prohibited")
+        os.makedirs(allowed_path)
+        os.makedirs(symlinks_path)
+        os.makedirs(prohibited_path)
+
+        # Create scripts and symlinks and remember their byte-compiled versions
+        allowed_script = script_helper.make_script(allowed_path, "test_allowed", "a = 0")
+        prohibited_script = script_helper.make_script(prohibited_path, "test_prohibited", "a = 0")
+        allowed_symlink = os.path.join(symlinks_path, "test_allowed.py")
+        prohibited_symlink = os.path.join(symlinks_path, "test_prohibited.py")
+        os.symlink(allowed_script, allowed_symlink)
+        os.symlink(prohibited_script, prohibited_symlink)
+        allowed_bc = importlib.util.cache_from_source(allowed_symlink)
+        prohibited_bc = importlib.util.cache_from_source(prohibited_symlink)
+
+        compileall.compile_dir(symlinks_path, quiet=True, limit_sl_dest=allowed_path)
+
+        self.assertTrue(os.path.isfile(allowed_bc))
+        self.assertFalse(os.path.isfile(prohibited_bc))
+
 
 class CompileallTestsWithSourceEpoch(CompileallTestsBase,
                                      unittest.TestCase,
@@ -269,13 +456,15 @@
 
     def assertRunOK(self, *args, **env_vars):
         rc, out, err = script_helper.assert_python_ok(
-                         *self._get_run_args(args), **env_vars)
+                         *self._get_run_args(args), **env_vars,
+                         PYTHONIOENCODING='utf-8')
         self.assertEqual(b'', err)
         return out
 
     def assertRunNotOK(self, *args, **env_vars):
         rc, out, err = script_helper.assert_python_failure(
-                        *self._get_run_args(args), **env_vars)
+                        *self._get_run_args(args), **env_vars,
+                        PYTHONIOENCODING='utf-8')
         return rc, out, err
 
     def assertCompiled(self, fn):
@@ -436,6 +625,20 @@
         self.assertCompiled(spamfn)
         self.assertCompiled(eggfn)
 
+    @support.skip_unless_symlink
+    def test_symlink_loop(self):
+        # Currently, compileall ignores symlinks to directories.
+        # If that limitation is ever lifted, it should protect against
+        # recursion in symlink loops.
+        pkg = os.path.join(self.pkgdir, 'spam')
+        script_helper.make_pkg(pkg)
+        os.symlink('.', os.path.join(pkg, 'evil'))
+        os.symlink('.', os.path.join(pkg, 'evil2'))
+        self.assertRunOK('-q', self.pkgdir)
+        self.assertCompiled(os.path.join(
+            self.pkgdir, 'spam', 'evil', 'evil2', '__init__.py'
+        ))
+
     def test_quiet(self):
         noisy = self.assertRunOK(self.pkgdir)
         quiet = self.assertRunOK('-q', self.pkgdir)
@@ -577,56 +780,109 @@
             self.assertTrue(compile_dir.called)
             self.assertEqual(compile_dir.call_args[-1]['workers'], 0)
 
-    def _test_ddir_only(self, *, ddir, parallel=True):
-        """Recursive compile_dir ddir must contain package paths; bpo39769."""
-        fullpath = ["test", "foo"]
-        path = self.directory
-        mods = []
-        for subdir in fullpath:
-            path = os.path.join(path, subdir)
-            os.mkdir(path)
-            script_helper.make_script(path, "__init__", "")
-            mods.append(script_helper.make_script(path, "mod",
-                                                  "def fn(): 1/0\nfn()\n"))
-        compileall.compile_dir(
-                self.directory, quiet=True, ddir=ddir,
-                workers=2 if parallel else 1)
-        self.assertTrue(mods)
-        for mod in mods:
-            self.assertTrue(mod.startswith(self.directory), mod)
-            modcode = importlib.util.cache_from_source(mod)
-            modpath = mod[len(self.directory+os.sep):]
-            _, _, err = script_helper.assert_python_failure(modcode)
-            expected_in = os.path.join(ddir, modpath)
-            mod_code_obj = test.test_importlib.util._get_code_from_pyc(modcode)
-            self.assertEqual(mod_code_obj.co_filename, expected_in)
-            self.assertIn(f'"{expected_in}"', os.fsdecode(err))
+    def test_strip_and_prepend(self):
+        fullpath = ["test", "build", "real", "path"]
+        path = os.path.join(self.directory, *fullpath)
+        os.makedirs(path)
+        script = script_helper.make_script(path, "test", "1 / 0")
+        bc = importlib.util.cache_from_source(script)
+        stripdir = os.path.join(self.directory, *fullpath[:2])
+        prependdir = "/foo"
+        self.assertRunOK("-s", stripdir, "-p", prependdir, path)
+        rc, out, err = script_helper.assert_python_failure(bc)
+        expected_in = os.path.join(prependdir, *fullpath[2:])
+        self.assertIn(
+            expected_in,
+            str(err, encoding=sys.getdefaultencoding())
+        )
+        self.assertNotIn(
+            stripdir,
+            str(err, encoding=sys.getdefaultencoding())
+        )
 
-    def test_ddir_only_one_worker(self):
-        """Recursive compile_dir ddir= contains package paths; bpo39769."""
-        return self._test_ddir_only(ddir="<a prefix>", parallel=False)
+    def test_multiple_optimization_levels(self):
+        path = os.path.join(self.directory, "optimizations")
+        os.makedirs(path)
+        script = script_helper.make_script(path,
+                                           "test_optimization",
+                                           "a = 0")
+        bc = []
+        for opt_level in "", 1, 2, 3:
+            bc.append(importlib.util.cache_from_source(script,
+                                                       optimization=opt_level))
+        test_combinations = [["0", "1"],
+                             ["1", "2"],
+                             ["0", "2"],
+                             ["0", "1", "2"]]
+        for opt_combination in test_combinations:
+            self.assertRunOK(path, *("-o" + str(n) for n in opt_combination))
+            for opt_level in opt_combination:
+                self.assertTrue(os.path.isfile(bc[int(opt_level)]))
+                try:
+                    os.unlink(bc[opt_level])
+                except Exception:
+                    pass
 
-    def test_ddir_multiple_workers(self):
-        """Recursive compile_dir ddir= contains package paths; bpo39769."""
-        return self._test_ddir_only(ddir="<a prefix>", parallel=True)
+    @support.skip_unless_symlink
+    def test_ignore_symlink_destination(self):
+        # Create folders for allowed files, symlinks and prohibited area
+        allowed_path = os.path.join(self.directory, "test", "dir", "allowed")
+        symlinks_path = os.path.join(self.directory, "test", "dir", "symlinks")
+        prohibited_path = os.path.join(self.directory, "test", "dir", "prohibited")
+        os.makedirs(allowed_path)
+        os.makedirs(symlinks_path)
+        os.makedirs(prohibited_path)
 
-    def test_ddir_empty_only_one_worker(self):
-        """Recursive compile_dir ddir='' contains package paths; bpo39769."""
-        return self._test_ddir_only(ddir="", parallel=False)
+        # Create scripts and symlinks and remember their byte-compiled versions
+        allowed_script = script_helper.make_script(allowed_path, "test_allowed", "a = 0")
+        prohibited_script = script_helper.make_script(prohibited_path, "test_prohibited", "a = 0")
+        allowed_symlink = os.path.join(symlinks_path, "test_allowed.py")
+        prohibited_symlink = os.path.join(symlinks_path, "test_prohibited.py")
+        os.symlink(allowed_script, allowed_symlink)
+        os.symlink(prohibited_script, prohibited_symlink)
+        allowed_bc = importlib.util.cache_from_source(allowed_symlink)
+        prohibited_bc = importlib.util.cache_from_source(prohibited_symlink)
 
-    def test_ddir_empty_multiple_workers(self):
-        """Recursive compile_dir ddir='' contains package paths; bpo39769."""
-        return self._test_ddir_only(ddir="", parallel=True)
+        self.assertRunOK(symlinks_path, "-e", allowed_path)
+
+        self.assertTrue(os.path.isfile(allowed_bc))
+        self.assertFalse(os.path.isfile(prohibited_bc))
+
+    def test_hardlink_bad_args(self):
+        # Bad arguments combination, hardlink deduplication make sense
+        # only for more than one optimization level
+        self.assertRunNotOK(self.directory, "-o 1", "--hardlink-dupes")
+
+    def test_hardlink(self):
+        # 'a = 0' code produces the same bytecode for the 3 optimization
+        # levels. All three .pyc files must have the same inode (hardlinks).
+        #
+        # If deduplication is disabled, all pyc files must have different
+        # inodes.
+        for dedup in (True, False):
+            with tempfile.TemporaryDirectory() as path:
+                with self.subTest(dedup=dedup):
+                    script = script_helper.make_script(path, "script", "a = 0")
+                    pycs = get_pycs(script)
+
+                    args = ["-q", "-o 0", "-o 1", "-o 2"]
+                    if dedup:
+                        args.append("--hardlink-dupes")
+                    self.assertRunOK(path, *args)
+
+                    self.assertEqual(is_hardlink(pycs[0], pycs[1]), dedup)
+                    self.assertEqual(is_hardlink(pycs[1], pycs[2]), dedup)
+                    self.assertEqual(is_hardlink(pycs[0], pycs[2]), dedup)
 
 
-class CommmandLineTestsWithSourceEpoch(CommandLineTestsBase,
+class CommandLineTestsWithSourceEpoch(CommandLineTestsBase,
                                        unittest.TestCase,
                                        metaclass=SourceDateEpochTestMeta,
                                        source_date_epoch=True):
     pass
 
 
-class CommmandLineTestsNoSourceEpoch(CommandLineTestsBase,
+class CommandLineTestsNoSourceEpoch(CommandLineTestsBase,
                                      unittest.TestCase,
                                      metaclass=SourceDateEpochTestMeta,
                                      source_date_epoch=False):
@@ -634,5 +890,176 @@
 
 
 
+class HardlinkDedupTestsBase:
+    # Test hardlink_dupes parameter of compileall.compile_dir()
+
+    def setUp(self):
+        self.path = None
+
+    @contextlib.contextmanager
+    def temporary_directory(self):
+        with tempfile.TemporaryDirectory() as path:
+            self.path = path
+            yield path
+            self.path = None
+
+    def make_script(self, code, name="script"):
+        return script_helper.make_script(self.path, name, code)
+
+    def compile_dir(self, *, dedup=True, optimize=(0, 1, 2), force=False):
+        compileall.compile_dir(self.path, quiet=True, optimize=optimize,
+                               hardlink_dupes=dedup, force=force)
+
+    def test_bad_args(self):
+        # Bad arguments combination, hardlink deduplication make sense
+        # only for more than one optimization level
+        with self.temporary_directory():
+            self.make_script("pass")
+            with self.assertRaises(ValueError):
+                compileall.compile_dir(self.path, quiet=True, optimize=0,
+                                       hardlink_dupes=True)
+            with self.assertRaises(ValueError):
+                # same optimization level specified twice:
+                # compile_dir() removes duplicates
+                compileall.compile_dir(self.path, quiet=True, optimize=[0, 0],
+                                       hardlink_dupes=True)
+
+    def create_code(self, docstring=False, assertion=False):
+        lines = []
+        if docstring:
+            lines.append("'module docstring'")
+        lines.append('x = 1')
+        if assertion:
+            lines.append("assert x == 1")
+        return '\n'.join(lines)
+
+    def iter_codes(self):
+        for docstring in (False, True):
+            for assertion in (False, True):
+                code = self.create_code(docstring=docstring, assertion=assertion)
+                yield (code, docstring, assertion)
+
+    def test_disabled(self):
+        # Deduplication disabled, no hardlinks
+        for code, docstring, assertion in self.iter_codes():
+            with self.subTest(docstring=docstring, assertion=assertion):
+                with self.temporary_directory():
+                    script = self.make_script(code)
+                    pycs = get_pycs(script)
+                    self.compile_dir(dedup=False)
+                    self.assertFalse(is_hardlink(pycs[0], pycs[1]))
+                    self.assertFalse(is_hardlink(pycs[0], pycs[2]))
+                    self.assertFalse(is_hardlink(pycs[1], pycs[2]))
+
+    def check_hardlinks(self, script, docstring=False, assertion=False):
+        pycs = get_pycs(script)
+        self.assertEqual(is_hardlink(pycs[0], pycs[1]),
+                         not assertion)
+        self.assertEqual(is_hardlink(pycs[0], pycs[2]),
+                         not assertion and not docstring)
+        self.assertEqual(is_hardlink(pycs[1], pycs[2]),
+                         not docstring)
+
+    def test_hardlink(self):
+        # Test deduplication on all combinations
+        for code, docstring, assertion in self.iter_codes():
+            with self.subTest(docstring=docstring, assertion=assertion):
+                with self.temporary_directory():
+                    script = self.make_script(code)
+                    self.compile_dir()
+                    self.check_hardlinks(script, docstring, assertion)
+
+    def test_only_two_levels(self):
+        # Don't build the 3 optimization levels, but only 2
+        for opts in ((0, 1), (1, 2), (0, 2)):
+            with self.subTest(opts=opts):
+                with self.temporary_directory():
+                    # code with no dostring and no assertion:
+                    # same bytecode for all optimization levels
+                    script = self.make_script(self.create_code())
+                    self.compile_dir(optimize=opts)
+                    pyc1 = get_pyc(script, opts[0])
+                    pyc2 = get_pyc(script, opts[1])
+                    self.assertTrue(is_hardlink(pyc1, pyc2))
+
+    def test_duplicated_levels(self):
+        # compile_dir() must not fail if optimize contains duplicated
+        # optimization levels and/or if optimization levels are not sorted.
+        with self.temporary_directory():
+            # code with no dostring and no assertion:
+            # same bytecode for all optimization levels
+            script = self.make_script(self.create_code())
+            self.compile_dir(optimize=[1, 0, 1, 0])
+            pyc1 = get_pyc(script, 0)
+            pyc2 = get_pyc(script, 1)
+            self.assertTrue(is_hardlink(pyc1, pyc2))
+
+    def test_recompilation(self):
+        # Test compile_dir() when pyc files already exists and the script
+        # content changed
+        with self.temporary_directory():
+            script = self.make_script("a = 0")
+            self.compile_dir()
+            # All three levels have the same inode
+            self.check_hardlinks(script)
+
+            pycs = get_pycs(script)
+            inode = os.stat(pycs[0]).st_ino
+
+            # Change of the module content
+            script = self.make_script("print(0)")
+
+            # Recompilation without -o 1
+            self.compile_dir(optimize=[0, 2], force=True)
+
+            # opt-1.pyc should have the same inode as before and others should not
+            self.assertEqual(inode, os.stat(pycs[1]).st_ino)
+            self.assertTrue(is_hardlink(pycs[0], pycs[2]))
+            self.assertNotEqual(inode, os.stat(pycs[2]).st_ino)
+            # opt-1.pyc and opt-2.pyc have different content
+            self.assertFalse(filecmp.cmp(pycs[1], pycs[2], shallow=True))
+
+    def test_import(self):
+        # Test that import updates a single pyc file when pyc files already
+        # exists and the script content changed
+        with self.temporary_directory():
+            script = self.make_script(self.create_code(), name="module")
+            self.compile_dir()
+            # All three levels have the same inode
+            self.check_hardlinks(script)
+
+            pycs = get_pycs(script)
+            inode = os.stat(pycs[0]).st_ino
+
+            # Change of the module content
+            script = self.make_script("print(0)", name="module")
+
+            # Import the module in Python with -O (optimization level 1)
+            script_helper.assert_python_ok(
+                "-O", "-c", "import module", __isolated=False, PYTHONPATH=self.path
+            )
+
+            # Only opt-1.pyc is changed
+            self.assertEqual(inode, os.stat(pycs[0]).st_ino)
+            self.assertEqual(inode, os.stat(pycs[2]).st_ino)
+            self.assertFalse(is_hardlink(pycs[1], pycs[2]))
+            # opt-1.pyc and opt-2.pyc have different content
+            self.assertFalse(filecmp.cmp(pycs[1], pycs[2], shallow=True))
+
+
+class HardlinkDedupTestsWithSourceEpoch(HardlinkDedupTestsBase,
+                                        unittest.TestCase,
+                                        metaclass=SourceDateEpochTestMeta,
+                                        source_date_epoch=True):
+    pass
+
+
+class HardlinkDedupTestsNoSourceEpoch(HardlinkDedupTestsBase,
+                                      unittest.TestCase,
+                                      metaclass=SourceDateEpochTestMeta,
+                                      source_date_epoch=False):
+    pass
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py
index a5a746e..4fe4bf7 100644
--- a/Lib/test/test_concurrent_futures.py
+++ b/Lib/test/test_concurrent_futures.py
@@ -1,10 +1,11 @@
-import test.support
+from test import support
 
 # Skip tests if _multiprocessing wasn't built.
-test.support.import_module('_multiprocessing')
+support.import_module('_multiprocessing')
 # Skip tests if sem_open implementation is broken.
-test.support.skip_if_broken_multiprocessing_synchronize()
+support.skip_if_broken_multiprocessing_synchronize()
 
+from test.support import hashlib_helper
 from test.support.script_helper import assert_python_ok
 
 import contextlib
@@ -100,11 +101,11 @@
 
 class BaseTestCase(unittest.TestCase):
     def setUp(self):
-        self._thread_key = test.support.threading_setup()
+        self._thread_key = support.threading_setup()
 
     def tearDown(self):
-        test.support.reap_children()
-        test.support.threading_cleanup(*self._thread_key)
+        support.reap_children()
+        support.threading_cleanup(*self._thread_key)
 
 
 class ExecutorMixin:
@@ -131,7 +132,7 @@
         self.executor = None
 
         dt = time.monotonic() - self.t1
-        if test.support.verbose:
+        if support.verbose:
             print("%.2fs" % dt, end=' ')
         self.assertLess(dt, 300, "synchronization issue: test lasted too long")
 
@@ -342,6 +343,49 @@
         for f in fs:
             f.result()
 
+    def test_cancel_futures(self):
+        executor = self.executor_type(max_workers=3)
+        fs = [executor.submit(time.sleep, .1) for _ in range(50)]
+        executor.shutdown(cancel_futures=True)
+        # We can't guarantee the exact number of cancellations, but we can
+        # guarantee that *some* were cancelled. With setting max_workers to 3,
+        # most of the submitted futures should have been cancelled.
+        cancelled = [fut for fut in fs if fut.cancelled()]
+        self.assertTrue(len(cancelled) >= 35, msg=f"{len(cancelled)=}")
+
+        # Ensure the other futures were able to finish.
+        # Use "not fut.cancelled()" instead of "fut.done()" to include futures
+        # that may have been left in a pending state.
+        others = [fut for fut in fs if not fut.cancelled()]
+        for fut in others:
+            self.assertTrue(fut.done(), msg=f"{fut._state=}")
+            self.assertIsNone(fut.exception())
+
+        # Similar to the number of cancelled futures, we can't guarantee the
+        # exact number that completed. But, we can guarantee that at least
+        # one finished.
+        self.assertTrue(len(others) > 0, msg=f"{len(others)=}")
+
+    def test_hang_issue39205(self):
+        """shutdown(wait=False) doesn't hang at exit with running futures.
+
+        See https://bugs.python.org/issue39205.
+        """
+        if self.executor_type == futures.ProcessPoolExecutor:
+            raise unittest.SkipTest(
+                "Hangs due to https://bugs.python.org/issue39205")
+
+        rc, out, err = assert_python_ok('-c', """if True:
+            from concurrent.futures import {executor_type}
+            from test.test_concurrent_futures import sleep_and_print
+            if __name__ == "__main__":
+                t = {executor_type}(max_workers=3)
+                t.submit(sleep_and_print, 1.0, "apple")
+                t.shutdown(wait=False)
+            """.format(executor_type=self.executor_type.__name__))
+        self.assertFalse(err)
+        self.assertEqual(out.strip(), b"apple")
+
 
 class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase):
     def _prime_executor(self):
@@ -372,13 +416,32 @@
 
     def test_del_shutdown(self):
         executor = futures.ThreadPoolExecutor(max_workers=5)
-        executor.map(abs, range(-5, 5))
+        res = executor.map(abs, range(-5, 5))
         threads = executor._threads
         del executor
 
         for t in threads:
             t.join()
 
+        # Make sure the results were all computed before the
+        # executor got shutdown.
+        assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
+    def test_shutdown_no_wait(self):
+        # Ensure that the executor cleans up the threads when calling
+        # shutdown with wait=False
+        executor = futures.ThreadPoolExecutor(max_workers=5)
+        res = executor.map(abs, range(-5, 5))
+        threads = executor._threads
+        executor.shutdown(wait=False)
+        for t in threads:
+            t.join()
+
+        # Make sure the results were all computed before the
+        # executor got shutdown.
+        assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
+
     def test_thread_names_assigned(self):
         executor = futures.ThreadPoolExecutor(
             max_workers=5, thread_name_prefix='SpecialPool')
@@ -402,16 +465,38 @@
             self.assertRegex(t.name, r'ThreadPoolExecutor-\d+_[0-4]$')
             t.join()
 
+    def test_cancel_futures_wait_false(self):
+        # Can only be reliably tested for TPE, since PPE often hangs with
+        # `wait=False` (even without *cancel_futures*).
+        rc, out, err = assert_python_ok('-c', """if True:
+            from concurrent.futures import ThreadPoolExecutor
+            from test.test_concurrent_futures import sleep_and_print
+            if __name__ == "__main__":
+                t = ThreadPoolExecutor()
+                t.submit(sleep_and_print, .1, "apple")
+                t.shutdown(wait=False, cancel_futures=True)
+            """.format(executor_type=self.executor_type.__name__))
+        # Errors in atexit hooks don't change the process exit code, check
+        # stderr manually.
+        self.assertFalse(err)
+        self.assertEqual(out.strip(), b"apple")
+
 
 class ProcessPoolShutdownTest(ExecutorShutdownTest):
     def _prime_executor(self):
         pass
 
     def test_processes_terminate(self):
-        self.executor.submit(mul, 21, 2)
-        self.executor.submit(mul, 6, 7)
-        self.executor.submit(mul, 3, 14)
-        self.assertEqual(len(self.executor._processes), 5)
+        def acquire_lock(lock):
+            lock.acquire()
+
+        mp_context = get_context()
+        sem = mp_context.Semaphore(0)
+        for _ in range(3):
+            self.executor.submit(acquire_lock, sem)
+        self.assertEqual(len(self.executor._processes), 3)
+        for _ in range(3):
+            sem.release()
         processes = self.executor._processes
         self.executor.shutdown()
 
@@ -429,20 +514,45 @@
 
     def test_del_shutdown(self):
         executor = futures.ProcessPoolExecutor(max_workers=5)
-        list(executor.map(abs, range(-5, 5)))
-        queue_management_thread = executor._queue_management_thread
+        res = executor.map(abs, range(-5, 5))
+        executor_manager_thread = executor._executor_manager_thread
         processes = executor._processes
         call_queue = executor._call_queue
-        queue_management_thread = executor._queue_management_thread
+        executor_manager_thread = executor._executor_manager_thread
         del executor
 
         # Make sure that all the executor resources were properly cleaned by
         # the shutdown process
-        queue_management_thread.join()
+        executor_manager_thread.join()
         for p in processes.values():
             p.join()
         call_queue.join_thread()
 
+        # Make sure the results were all computed before the
+        # executor got shutdown.
+        assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
+    def test_shutdown_no_wait(self):
+        # Ensure that the executor cleans up the processes when calling
+        # shutdown with wait=False
+        executor = futures.ProcessPoolExecutor(max_workers=5)
+        res = executor.map(abs, range(-5, 5))
+        processes = executor._processes
+        call_queue = executor._call_queue
+        executor_manager_thread = executor._executor_manager_thread
+        executor.shutdown(wait=False)
+
+        # Make sure that all the executor resources were properly cleaned by
+        # the shutdown process
+        executor_manager_thread.join()
+        for p in processes.values():
+            p.join()
+        call_queue.join_thread()
+
+        # Make sure the results were all computed before the executor got
+        # shutdown.
+        assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
 
 create_executor_tests(ProcessPoolShutdownTest,
                       executor_mixins=(ProcessPoolForkMixin,
@@ -670,9 +780,8 @@
         self.assertEqual(16, future.result())
         future = self.executor.submit(capture, 1, self=2, fn=3)
         self.assertEqual(future.result(), ((1,), {'self': 2, 'fn': 3}))
-        with self.assertWarns(DeprecationWarning):
-            future = self.executor.submit(fn=capture, arg=1)
-        self.assertEqual(future.result(), ((), {'arg': 1}))
+        with self.assertRaises(TypeError):
+            self.executor.submit(fn=capture, arg=1)
         with self.assertRaises(TypeError):
             self.executor.submit(arg=1)
 
@@ -712,7 +821,7 @@
         self.executor.map(str, [2] * (self.worker_count + 1))
         self.executor.shutdown()
 
-    @test.support.cpython_only
+    @support.cpython_only
     def test_no_stale_references(self):
         # Issue #16284: check that the executors don't unnecessarily hang onto
         # references.
@@ -724,7 +833,7 @@
         self.executor.submit(my_object.my_method)
         del my_object
 
-        collected = my_object_collected.wait(timeout=5.0)
+        collected = my_object_collected.wait(timeout=support.SHORT_TIMEOUT)
         self.assertTrue(collected,
                         "Stale reference not collected within timeout.")
 
@@ -836,7 +945,7 @@
         self.assertIs(type(cause), futures.process._RemoteTraceback)
         self.assertIn('raise RuntimeError(123) # some comment', cause.tb)
 
-        with test.support.captured_stderr() as f1:
+        with support.captured_stderr() as f1:
             try:
                 raise exc
             except RuntimeError:
@@ -844,6 +953,7 @@
         self.assertIn('raise RuntimeError(123) # some comment',
                       f1.getvalue())
 
+    @hashlib_helper.requires_hashdigest('md5')
     def test_ressources_gced_in_workers(self):
         # Ensure that argument for a job are correctly gc-ed after the job
         # is finished
@@ -857,22 +967,47 @@
         # explicitly destroy the object to ensure that EventfulGCObj.__del__()
         # is called while manager is still running.
         obj = None
-        test.support.gc_collect()
+        support.gc_collect()
 
         mgr.shutdown()
         mgr.join()
 
+    def test_saturation(self):
+        executor = self.executor_type(4)
+        mp_context = get_context()
+        sem = mp_context.Semaphore(0)
+        job_count = 15 * executor._max_workers
+        try:
+            for _ in range(job_count):
+                executor.submit(sem.acquire)
+            self.assertEqual(len(executor._processes), executor._max_workers)
+            for _ in range(job_count):
+                sem.release()
+        finally:
+            executor.shutdown()
+
+    def test_idle_process_reuse_one(self):
+        executor = self.executor_type(4)
+        executor.submit(mul, 21, 2).result()
+        executor.submit(mul, 6, 7).result()
+        executor.submit(mul, 3, 14).result()
+        self.assertEqual(len(executor._processes), 1)
+        executor.shutdown()
+
+    def test_idle_process_reuse_multiple(self):
+        executor = self.executor_type(4)
+        executor.submit(mul, 12, 7).result()
+        executor.submit(mul, 33, 25)
+        executor.submit(mul, 25, 26).result()
+        executor.submit(mul, 18, 29)
+        self.assertLessEqual(len(executor._processes), 2)
+        executor.shutdown()
 
 create_executor_tests(ProcessPoolExecutorTest,
                       executor_mixins=(ProcessPoolForkMixin,
                                        ProcessPoolForkserverMixin,
                                        ProcessPoolSpawnMixin))
 
-def hide_process_stderr():
-    import io
-    sys.stderr = io.StringIO()
-
-
 def _crash(delay=None):
     """Induces a segfault."""
     if delay:
@@ -889,13 +1024,18 @@
 
 def _raise_error(Err):
     """Function that raises an Exception in process."""
-    hide_process_stderr()
+    raise Err()
+
+
+def _raise_error_ignore_stderr(Err):
+    """Function that raises an Exception in process and ignores stderr."""
+    import io
+    sys.stderr = io.StringIO()
     raise Err()
 
 
 def _return_instance(cls):
     """Function that returns a instance of cls."""
-    hide_process_stderr()
     return cls()
 
 
@@ -934,16 +1074,11 @@
     """Bad object that triggers an error at unpickling time."""
     def __reduce__(self):
         from pickle import UnpicklingError
-        return _raise_error, (UnpicklingError, )
+        return _raise_error_ignore_stderr, (UnpicklingError, )
 
 
 class ExecutorDeadlockTest:
-    TIMEOUT = 15
-
-    @classmethod
-    def _sleep_id(cls, x, delay):
-        time.sleep(delay)
-        return x
+    TIMEOUT = support.SHORT_TIMEOUT
 
     def _fail_on_deadlock(self, executor):
         # If we did not recover before TIMEOUT seconds, consider that the
@@ -964,57 +1099,84 @@
         self.fail(f"Executor deadlock:\n\n{tb}")
 
 
-    def test_crash(self):
-        # extensive testing for deadlock caused by crashes in a pool.
+    def _check_crash(self, error, func, *args, ignore_stderr=False):
+        # test for deadlock caused by crashes in a pool
         self.executor.shutdown(wait=True)
-        crash_cases = [
-            # Check problem occurring while pickling a task in
-            # the task_handler thread
-            (id, (ErrorAtPickle(),), PicklingError, "error at task pickle"),
-            # Check problem occurring while unpickling a task on workers
-            (id, (ExitAtUnpickle(),), BrokenProcessPool,
-             "exit at task unpickle"),
-            (id, (ErrorAtUnpickle(),), BrokenProcessPool,
-             "error at task unpickle"),
-            (id, (CrashAtUnpickle(),), BrokenProcessPool,
-             "crash at task unpickle"),
-            # Check problem occurring during func execution on workers
-            (_crash, (), BrokenProcessPool,
-             "crash during func execution on worker"),
-            (_exit, (), SystemExit,
-             "exit during func execution on worker"),
-            (_raise_error, (RuntimeError, ), RuntimeError,
-             "error during func execution on worker"),
-            # Check problem occurring while pickling a task result
-            # on workers
-            (_return_instance, (CrashAtPickle,), BrokenProcessPool,
-             "crash during result pickle on worker"),
-            (_return_instance, (ExitAtPickle,), SystemExit,
-             "exit during result pickle on worker"),
-            (_return_instance, (ErrorAtPickle,), PicklingError,
-             "error during result pickle on worker"),
-            # Check problem occurring while unpickling a task in
-            # the result_handler thread
-            (_return_instance, (ErrorAtUnpickle,), BrokenProcessPool,
-             "error during result unpickle in result_handler"),
-            (_return_instance, (ExitAtUnpickle,), BrokenProcessPool,
-             "exit during result unpickle in result_handler")
-        ]
-        for func, args, error, name in crash_cases:
-            with self.subTest(name):
-                # The captured_stderr reduces the noise in the test report
-                with test.support.captured_stderr():
-                    executor = self.executor_type(
-                        max_workers=2, mp_context=get_context(self.ctx))
-                    res = executor.submit(func, *args)
-                    with self.assertRaises(error):
-                        try:
-                            res.result(timeout=self.TIMEOUT)
-                        except futures.TimeoutError:
-                            # If we did not recover before TIMEOUT seconds,
-                            # consider that the executor is in a deadlock state
-                            self._fail_on_deadlock(executor)
-                    executor.shutdown(wait=True)
+
+        executor = self.executor_type(
+            max_workers=2, mp_context=get_context(self.ctx))
+        res = executor.submit(func, *args)
+
+        if ignore_stderr:
+            cm = support.captured_stderr()
+        else:
+            cm = contextlib.nullcontext()
+
+        try:
+            with self.assertRaises(error):
+                with cm:
+                    res.result(timeout=self.TIMEOUT)
+        except futures.TimeoutError:
+            # If we did not recover before TIMEOUT seconds,
+            # consider that the executor is in a deadlock state
+            self._fail_on_deadlock(executor)
+        executor.shutdown(wait=True)
+
+    def test_error_at_task_pickle(self):
+        # Check problem occurring while pickling a task in
+        # the task_handler thread
+        self._check_crash(PicklingError, id, ErrorAtPickle())
+
+    def test_exit_at_task_unpickle(self):
+        # Check problem occurring while unpickling a task on workers
+        self._check_crash(BrokenProcessPool, id, ExitAtUnpickle())
+
+    def test_error_at_task_unpickle(self):
+        # Check problem occurring while unpickling a task on workers
+        self._check_crash(BrokenProcessPool, id, ErrorAtUnpickle())
+
+    def test_crash_at_task_unpickle(self):
+        # Check problem occurring while unpickling a task on workers
+        self._check_crash(BrokenProcessPool, id, CrashAtUnpickle())
+
+    def test_crash_during_func_exec_on_worker(self):
+        # Check problem occurring during func execution on workers
+        self._check_crash(BrokenProcessPool, _crash)
+
+    def test_exit_during_func_exec_on_worker(self):
+        # Check problem occurring during func execution on workers
+        self._check_crash(SystemExit, _exit)
+
+    def test_error_during_func_exec_on_worker(self):
+        # Check problem occurring during func execution on workers
+        self._check_crash(RuntimeError, _raise_error, RuntimeError)
+
+    def test_crash_during_result_pickle_on_worker(self):
+        # Check problem occurring while pickling a task result
+        # on workers
+        self._check_crash(BrokenProcessPool, _return_instance, CrashAtPickle)
+
+    def test_exit_during_result_pickle_on_worker(self):
+        # Check problem occurring while pickling a task result
+        # on workers
+        self._check_crash(SystemExit, _return_instance, ExitAtPickle)
+
+    def test_error_during_result_pickle_on_worker(self):
+        # Check problem occurring while pickling a task result
+        # on workers
+        self._check_crash(PicklingError, _return_instance, ErrorAtPickle)
+
+    def test_error_during_result_unpickle_in_result_handler(self):
+        # Check problem occurring while unpickling a task in
+        # the result_handler thread
+        self._check_crash(BrokenProcessPool,
+                          _return_instance, ErrorAtUnpickle,
+                          ignore_stderr=True)
+
+    def test_exit_during_result_unpickle_in_result_handler(self):
+        # Check problem occurring while unpickling a task in
+        # the result_handler thread
+        self._check_crash(BrokenProcessPool, _return_instance, ExitAtUnpickle)
 
     def test_shutdown_deadlock(self):
         # Test that the pool calling shutdown do not cause deadlock
@@ -1028,6 +1190,32 @@
             with self.assertRaises(BrokenProcessPool):
                 f.result()
 
+    def test_shutdown_deadlock_pickle(self):
+        # Test that the pool calling shutdown with wait=False does not cause
+        # a deadlock if a task fails at pickle after the shutdown call.
+        # Reported in bpo-39104.
+        self.executor.shutdown(wait=True)
+        with self.executor_type(max_workers=2,
+                                mp_context=get_context(self.ctx)) as executor:
+            self.executor = executor  # Allow clean up in fail_on_deadlock
+
+            # Start the executor and get the executor_manager_thread to collect
+            # the threads and avoid dangling thread that should be cleaned up
+            # asynchronously.
+            executor.submit(id, 42).result()
+            executor_manager = executor._executor_manager_thread
+
+            # Submit a task that fails at pickle and shutdown the executor
+            # without waiting
+            f = executor.submit(id, ErrorAtPickle())
+            executor.shutdown(wait=False)
+            with self.assertRaises(PicklingError):
+                f.result()
+
+        # Make sure the executor is eventually shutdown and do not leave
+        # dangling threads
+        executor_manager.join()
+
 
 create_executor_tests(ExecutorDeadlockTest,
                       executor_mixins=(ProcessPoolForkMixin,
@@ -1070,7 +1258,7 @@
         self.assertTrue(was_cancelled)
 
     def test_done_callback_raises(self):
-        with test.support.captured_stderr() as stderr:
+        with support.captured_stderr() as stderr:
             raising_was_called = False
             fn_was_called = False
 
@@ -1125,7 +1313,7 @@
         self.assertTrue(was_cancelled)
 
     def test_done_callback_raises_already_succeeded(self):
-        with test.support.captured_stderr() as stderr:
+        with support.captured_stderr() as stderr:
             def raising_fn(callback_future):
                 raise Exception('doh!')
 
@@ -1244,7 +1432,8 @@
         t = threading.Thread(target=notification)
         t.start()
 
-        self.assertRaises(futures.CancelledError, f1.result, timeout=5)
+        self.assertRaises(futures.CancelledError,
+                          f1.result, timeout=support.SHORT_TIMEOUT)
         t.join()
 
     def test_exception_with_timeout(self):
@@ -1273,7 +1462,7 @@
         t = threading.Thread(target=notification)
         t.start()
 
-        self.assertTrue(isinstance(f1.exception(timeout=5), OSError))
+        self.assertTrue(isinstance(f1.exception(timeout=support.SHORT_TIMEOUT), OSError))
         t.join()
 
     def test_multiple_set_result(self):
@@ -1309,11 +1498,11 @@
 
 def setUpModule():
     global _threads_key
-    _threads_key = test.support.threading_setup()
+    _threads_key = support.threading_setup()
 
 
 def tearDownModule():
-    test.support.threading_cleanup(*_threads_key)
+    support.threading_cleanup(*_threads_key)
     multiprocessing.util._cleanup_tests()
 
 
diff --git a/Lib/test/test_contains.py b/Lib/test/test_contains.py
index 036a1d0..471d04a 100644
--- a/Lib/test/test_contains.py
+++ b/Lib/test/test_contains.py
@@ -1,5 +1,6 @@
 from collections import deque
 import unittest
+from test.support import NEVER_EQ
 
 
 class base_set:
@@ -69,13 +70,7 @@
         # containment and equality tests involving elements that are
         # not necessarily equal to themselves
 
-        class MyNonReflexive(object):
-            def __eq__(self, other):
-                return False
-            def __hash__(self):
-                return 28
-
-        values = float('nan'), 1, None, 'abc', MyNonReflexive()
+        values = float('nan'), 1, None, 'abc', NEVER_EQ
         constructors = list, tuple, dict.fromkeys, set, frozenset, deque
         for constructor in constructors:
             container = constructor(values)
diff --git a/Lib/test/test_context.py b/Lib/test/test_context.py
index b9e991a..2d8b63a 100644
--- a/Lib/test/test_context.py
+++ b/Lib/test/test_context.py
@@ -358,10 +358,6 @@
             tp.shutdown()
         self.assertEqual(results, list(range(10)))
 
-    def test_contextvar_getitem(self):
-        clss = contextvars.ContextVar
-        self.assertEqual(clss[str], clss)
-
 
 # HAMT Tests
 
diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py
index 188a29d..024f912 100644
--- a/Lib/test/test_contextlib.py
+++ b/Lib/test/test_contextlib.py
@@ -603,9 +603,9 @@
                 stack.callback(arg=1)
             with self.assertRaises(TypeError):
                 self.exit_stack.callback(arg=2)
-            with self.assertWarns(DeprecationWarning):
+            with self.assertRaises(TypeError):
                 stack.callback(callback=_exit, arg=3)
-        self.assertEqual(result, [((), {'arg': 3})])
+        self.assertEqual(result, [])
 
     def test_push(self):
         exc_raised = ZeroDivisionError
diff --git a/Lib/test/test_contextlib_async.py b/Lib/test/test_contextlib_async.py
index 492b226..43fb7fc 100644
--- a/Lib/test/test_contextlib_async.py
+++ b/Lib/test/test_contextlib_async.py
@@ -358,9 +358,9 @@
                 stack.push_async_callback(arg=1)
             with self.assertRaises(TypeError):
                 self.exit_stack.push_async_callback(arg=2)
-            with self.assertWarns(DeprecationWarning):
+            with self.assertRaises(TypeError):
                 stack.push_async_callback(callback=_exit, arg=3)
-        self.assertEqual(result, [((), {'arg': 3})])
+        self.assertEqual(result, [])
 
     @_async_test
     async def test_async_push(self):
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py
index 208b5c2..8d1e069 100644
--- a/Lib/test/test_coroutines.py
+++ b/Lib/test/test_coroutines.py
@@ -1203,39 +1203,41 @@
             def __aenter__(self):
                 pass
 
+        body_executed = False
         async def foo():
             async with CM():
-                pass
+                body_executed = True
 
         with self.assertRaisesRegex(AttributeError, '__aexit__'):
             run_async(foo())
+        self.assertFalse(body_executed)
 
     def test_with_3(self):
         class CM:
             def __aexit__(self):
                 pass
 
+        body_executed = False
         async def foo():
             async with CM():
-                pass
+                body_executed = True
 
         with self.assertRaisesRegex(AttributeError, '__aenter__'):
             run_async(foo())
+        self.assertFalse(body_executed)
 
     def test_with_4(self):
         class CM:
-            def __enter__(self):
-                pass
+            pass
 
-            def __exit__(self):
-                pass
-
+        body_executed = False
         async def foo():
             async with CM():
-                pass
+                body_executed = True
 
-        with self.assertRaisesRegex(AttributeError, '__aexit__'):
+        with self.assertRaisesRegex(AttributeError, '__aenter__'):
             run_async(foo())
+        self.assertFalse(body_executed)
 
     def test_with_5(self):
         # While this test doesn't make a lot of sense,
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index a16d140..d421be0 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -14,6 +14,12 @@
 from textwrap import dedent
 from collections import OrderedDict
 
+
+class BadIterable:
+    def __iter__(self):
+        raise OSError
+
+
 class Test_Csv(unittest.TestCase):
     """
     Test the underlying C csv parser in ways that are not appropriate
@@ -40,9 +46,15 @@
 
     def test_reader_arg_valid(self):
         self._test_arg_valid(csv.reader, [])
+        self.assertRaises(OSError, csv.reader, BadIterable())
 
     def test_writer_arg_valid(self):
         self._test_arg_valid(csv.writer, StringIO())
+        class BadWriter:
+            @property
+            def write(self):
+                raise OSError
+        self.assertRaises(OSError, csv.writer, BadWriter())
 
     def _test_default_attrs(self, ctor, *args):
         obj = ctor(*args)
@@ -141,6 +153,7 @@
         self._write_test([None], '""')
         self._write_error_test(csv.Error, [None], quoting = csv.QUOTE_NONE)
         # Check that exceptions are passed up the chain
+        self._write_error_test(OSError, BadIterable())
         class BadList:
             def __len__(self):
                 return 10;
@@ -230,6 +243,12 @@
             fileobj.seek(0)
             self.assertEqual(fileobj.read(), 'a\r\n""\r\n')
 
+    def test_writerows_errors(self):
+        with TemporaryFile("w+", newline='') as fileobj:
+            writer = csv.writer(fileobj)
+            self.assertRaises(TypeError, writer.writerows, None)
+            self.assertRaises(OSError, writer.writerows, BadIterable())
+
     @support.cpython_only
     def test_writerows_legacy_strings(self):
         import _testcapi
@@ -334,7 +353,6 @@
     def test_roundtrip_quoteed_newlines(self):
         with TemporaryFile("w+", newline='') as fileobj:
             writer = csv.writer(fileobj)
-            self.assertRaises(TypeError, writer.writerows, None)
             rows = [['a\nb','b'],['c','x\r\nd']]
             writer.writerows(rows)
             fileobj.seek(0)
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 09738c8..5e619d1 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -261,6 +261,10 @@
         curses.putp(b'abc')
         curses.qiflush()
         curses.raw() ; curses.raw(1)
+        curses.set_escdelay(25)
+        self.assertEqual(curses.get_escdelay(), 25)
+        curses.set_tabsize(4)
+        self.assertEqual(curses.get_tabsize(), 4)
         if hasattr(curses, 'setsyx'):
             curses.setsyx(5,5)
         curses.tigetflag('hc')
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
old mode 100755
new mode 100644
index 21a7d7e..b20103b
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -2028,7 +2028,7 @@
         class C:
             x: Union[int, type(None)] = None
 
-        self.assertDocStrEqual(C.__doc__, "C(x:Union[int, NoneType]=None)")
+        self.assertDocStrEqual(C.__doc__, "C(x:Optional[int]=None)")
 
     def test_docstring_list_field(self):
         @dataclass
@@ -3134,13 +3134,6 @@
         self.assertEqual(c1.x, 3)
         self.assertEqual(c1.y, 2)
 
-        self.assertRaises(TypeError, replace)
-        self.assertRaises(TypeError, replace, c, c)
-        with self.assertWarns(DeprecationWarning):
-            c1 = replace(obj=c, x=3)
-        self.assertEqual(c1.x, 3)
-        self.assertEqual(c1.y, 2)
-
     def test_frozen(self):
         @dataclass(frozen=True)
         class C:
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index 1f37b53..fd62f37 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -5201,6 +5201,7 @@
         DefaultContext = C.DefaultContext
 
         InvalidOperation = C.InvalidOperation
+        FloatOperation = C.FloatOperation
         DivisionByZero = C.DivisionByZero
         Overflow = C.Overflow
         Subnormal = C.Subnormal
@@ -5274,6 +5275,7 @@
           Underflow: C.DecUnderflow,
           Overflow: C.DecOverflow,
           DivisionByZero: C.DecDivisionByZero,
+          FloatOperation: C.DecFloatOperation,
           InvalidOperation: C.DecIEEEInvalidOperation
         }
         IntCond = [
@@ -5476,6 +5478,44 @@
             self.assertEqual(Decimal.from_float(cls(101.1)),
                              Decimal.from_float(101.1))
 
+    # Issue 41540:
+    @unittest.skipIf(sys.platform.startswith("aix"),
+                     "AIX: default ulimit: test is flaky because of extreme over-allocation")
+    def test_maxcontext_exact_arith(self):
+
+        # Make sure that exact operations do not raise MemoryError due
+        # to huge intermediate values when the context precision is very
+        # large.
+
+        # The following functions fill the available precision and are
+        # therefore not suitable for large precisions (by design of the
+        # specification).
+        MaxContextSkip = ['logical_invert', 'next_minus', 'next_plus',
+                          'logical_and', 'logical_or', 'logical_xor',
+                          'next_toward', 'rotate', 'shift']
+
+        Decimal = C.Decimal
+        Context = C.Context
+        localcontext = C.localcontext
+
+        # Here only some functions that are likely candidates for triggering a
+        # MemoryError are tested.  deccheck.py has an exhaustive test.
+        maxcontext = Context(prec=C.MAX_PREC, Emin=C.MIN_EMIN, Emax=C.MAX_EMAX)
+        with localcontext(maxcontext):
+            self.assertEqual(Decimal(0).exp(), 1)
+            self.assertEqual(Decimal(1).ln(), 0)
+            self.assertEqual(Decimal(1).log10(), 0)
+            self.assertEqual(Decimal(10**2).log10(), 2)
+            self.assertEqual(Decimal(10**223).log10(), 223)
+            self.assertEqual(Decimal(10**19).logb(), 19)
+            self.assertEqual(Decimal(4).sqrt(), 2)
+            self.assertEqual(Decimal("40E9").sqrt(), Decimal('2.0E+5'))
+            self.assertEqual(divmod(Decimal(10), 3), (3, 1))
+            self.assertEqual(Decimal(10) // 3, 3)
+            self.assertEqual(Decimal(4) / 2, 2)
+            self.assertEqual(Decimal(400) ** -1, Decimal('0.0025'))
+
+
 @requires_docstrings
 @unittest.skipUnless(C, "test requires C version")
 class SignatureTest(unittest.TestCase):
@@ -5600,13 +5640,13 @@
                     args, kwds = mkargs(C, c_sig)
                     try:
                         getattr(c_type(9), attr)(*args, **kwds)
-                    except Exception as err:
+                    except Exception:
                         raise TestFailed("invalid signature for %s: %s %s" % (c_func, args, kwds))
 
                     args, kwds = mkargs(P, p_sig)
                     try:
                         getattr(p_type(9), attr)(*args, **kwds)
-                    except Exception as err:
+                    except Exception:
                         raise TestFailed("invalid signature for %s: %s %s" % (p_func, args, kwds))
 
         doit('Decimal')
diff --git a/Lib/test/test_decorators.py b/Lib/test/test_decorators.py
index d0a2ec9..298979e 100644
--- a/Lib/test/test_decorators.py
+++ b/Lib/test/test_decorators.py
@@ -151,21 +151,18 @@
         self.assertEqual(counts['double'], 4)
 
     def test_errors(self):
-        # Test syntax restrictions - these are all compile-time errors:
-        #
-        for expr in [ "1+2", "x[3]", "(1, 2)" ]:
-            # Sanity check: is expr is a valid expression by itself?
-            compile(expr, "testexpr", "exec")
 
-            codestr = "@%s\ndef f(): pass" % expr
-            self.assertRaises(SyntaxError, compile, codestr, "test", "exec")
+        # Test SyntaxErrors:
+        for stmt in ("x,", "x, y", "x = y", "pass", "import sys"):
+            compile(stmt, "test", "exec")  # Sanity check.
+            with self.assertRaises(SyntaxError):
+                compile(f"@{stmt}\ndef f(): pass", "test", "exec")
 
-        # You can't put multiple decorators on a single line:
-        #
-        self.assertRaises(SyntaxError, compile,
-                          "@f1 @f2\ndef f(): pass", "test", "exec")
-
-        # Test runtime errors
+        # Test TypeErrors that used to be SyntaxErrors:
+        for expr in ("1.+2j", "[1, 2][-1]", "(1, 2)", "True", "...", "None"):
+            compile(expr, "test", "eval")  # Sanity check.
+            with self.assertRaises(TypeError):
+                exec(f"@{expr}\ndef f(): pass")
 
         def unimp(func):
             raise NotImplementedError
@@ -179,6 +176,13 @@
             code = compile(codestr, "test", "exec")
             self.assertRaises(exc, eval, code, context)
 
+    def test_expressions(self):
+        for expr in (
+            "(x,)", "(x, y)", "x := y", "(x := y)", "x @y", "(x @ y)", "x[0]",
+            "w[x].y.z", "w + x - (y + z)", "x(y)()(z)", "[w, x, y][z]", "x.y",
+        ):
+            compile(f"@{expr}\ndef f(): pass", "test", "exec")
+
     def test_double(self):
         class C(object):
             @funcattrs(abc=1, xyz="haha")
@@ -265,6 +269,45 @@
         self.assertEqual(bar(), 42)
         self.assertEqual(actions, expected_actions)
 
+    def test_wrapped_descriptor_inside_classmethod(self):
+        class BoundWrapper:
+            def __init__(self, wrapped):
+                self.__wrapped__ = wrapped
+
+            def __call__(self, *args, **kwargs):
+                return self.__wrapped__(*args, **kwargs)
+
+        class Wrapper:
+            def __init__(self, wrapped):
+                self.__wrapped__ = wrapped
+
+            def __get__(self, instance, owner):
+                bound_function = self.__wrapped__.__get__(instance, owner)
+                return BoundWrapper(bound_function)
+
+        def decorator(wrapped):
+            return Wrapper(wrapped)
+
+        class Class:
+            @decorator
+            @classmethod
+            def inner(cls):
+                # This should already work.
+                return 'spam'
+
+            @classmethod
+            @decorator
+            def outer(cls):
+                # Raised TypeError with a message saying that the 'Wrapper'
+                # object is not callable.
+                return 'eggs'
+
+        self.assertEqual(Class.inner(), 'spam')
+        self.assertEqual(Class.outer(), 'eggs')
+        self.assertEqual(Class().inner(), 'spam')
+        self.assertEqual(Class().outer(), 'eggs')
+
+
 class TestClassDecorators(unittest.TestCase):
 
     def test_simple(self):
diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py
index b9f1fb9..b48c649 100644
--- a/Lib/test/test_defaultdict.py
+++ b/Lib/test/test_defaultdict.py
@@ -183,5 +183,43 @@
             o = pickle.loads(s)
             self.assertEqual(d, o)
 
+    def test_union(self):
+        i = defaultdict(int, {1: 1, 2: 2})
+        s = defaultdict(str, {0: "zero", 1: "one"})
+
+        i_s = i | s
+        self.assertIs(i_s.default_factory, int)
+        self.assertDictEqual(i_s, {1: "one", 2: 2, 0: "zero"})
+        self.assertEqual(list(i_s), [1, 2, 0])
+
+        s_i = s | i
+        self.assertIs(s_i.default_factory, str)
+        self.assertDictEqual(s_i, {0: "zero", 1: 1, 2: 2})
+        self.assertEqual(list(s_i), [0, 1, 2])
+
+        i_ds = i | dict(s)
+        self.assertIs(i_ds.default_factory, int)
+        self.assertDictEqual(i_ds, {1: "one", 2: 2, 0: "zero"})
+        self.assertEqual(list(i_ds), [1, 2, 0])
+
+        ds_i = dict(s) | i
+        self.assertIs(ds_i.default_factory, int)
+        self.assertDictEqual(ds_i, {0: "zero", 1: 1, 2: 2})
+        self.assertEqual(list(ds_i), [0, 1, 2])
+
+        with self.assertRaises(TypeError):
+            i | list(s.items())
+        with self.assertRaises(TypeError):
+            list(s.items()) | i
+
+        # We inherit a fine |= from dict, so just a few sanity checks here:
+        i |= list(s.items())
+        self.assertIs(i.default_factory, int)
+        self.assertDictEqual(i, {1: "one", 2: 2, 0: "zero"})
+        self.assertEqual(list(i), [1, 2, 0])
+
+        with self.assertRaises(TypeError):
+            i |= None
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 18397a8..9e875da 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1613,8 +1613,8 @@
             spam_cm(spam.spamlist())
         self.assertEqual(
             str(cm.exception),
-            "descriptor 'classmeth' requires a type "
-            "but received a 'xxsubtype.spamlist' instance")
+            "descriptor 'classmeth' for type 'xxsubtype.spamlist' "
+            "needs a type, not a 'xxsubtype.spamlist' as arg 2")
 
         with self.assertRaises(TypeError) as cm:
             spam_cm(list)
@@ -1967,7 +1967,7 @@
         # different error messages.
         set_add = set.add
 
-        expected_errmsg = "descriptor 'add' of 'set' object needs an argument"
+        expected_errmsg = "unbound method set.add() needs an argument"
 
         with self.assertRaises(TypeError) as cm:
             set_add()
@@ -2526,9 +2526,9 @@
         except TypeError:
             pass
 
-        # Two essentially featureless objects, just inheriting stuff from
-        # object.
-        self.assertEqual(dir(NotImplemented), dir(Ellipsis))
+        # Two essentially featureless objects, (Ellipsis just inherits stuff
+        # from object.
+        self.assertEqual(dir(object()), dir(Ellipsis))
 
         # Nasty test case for proxied objects
         class Wrapper(object):
diff --git a/Lib/test/test_descrtut.py b/Lib/test/test_descrtut.py
index b84d644..8e25f58 100644
--- a/Lib/test/test_descrtut.py
+++ b/Lib/test/test_descrtut.py
@@ -167,6 +167,7 @@
     >>> pprint.pprint(dir(list))    # like list.__dict__.keys(), but sorted
     ['__add__',
      '__class__',
+     '__class_getitem__',
      '__contains__',
      '__delattr__',
      '__delitem__',
diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py
index de483ab..6b8596f 100644
--- a/Lib/test/test_dict.py
+++ b/Lib/test/test_dict.py
@@ -37,6 +37,38 @@
             dictliteral = '{' + ', '.join(formatted_items) + '}'
             self.assertEqual(eval(dictliteral), dict(items))
 
+    def test_merge_operator(self):
+
+        a = {0: 0, 1: 1, 2: 1}
+        b = {1: 1, 2: 2, 3: 3}
+
+        c = a.copy()
+        c |= b
+
+        self.assertEqual(a | b, {0: 0, 1: 1, 2: 2, 3: 3})
+        self.assertEqual(c, {0: 0, 1: 1, 2: 2, 3: 3})
+
+        c = b.copy()
+        c |= a
+
+        self.assertEqual(b | a, {1: 1, 2: 1, 3: 3, 0: 0})
+        self.assertEqual(c, {1: 1, 2: 1, 3: 3, 0: 0})
+
+        c = a.copy()
+        c |= [(1, 1), (2, 2), (3, 3)]
+
+        self.assertEqual(c, {0: 0, 1: 1, 2: 2, 3: 3})
+
+        self.assertIs(a.__or__(None), NotImplemented)
+        self.assertIs(a.__or__(()), NotImplemented)
+        self.assertIs(a.__or__("BAD"), NotImplemented)
+        self.assertIs(a.__or__(""), NotImplemented)
+
+        self.assertRaises(TypeError, a.__ior__, None)
+        self.assertEqual(a.__ior__(()), {0: 0, 1: 1, 2: 1})
+        self.assertRaises(ValueError, a.__ior__, "BAD")
+        self.assertEqual(a.__ior__(""), {0: 0, 1: 1, 2: 1})
+
     def test_bool(self):
         self.assertIs(not {}, True)
         self.assertTrue({1: 2})
@@ -1292,6 +1324,19 @@
         d = {0: set()}
         (0, X()) in d.items()
 
+    def test_dict_contain_use_after_free(self):
+        # bpo-40489
+        class S(str):
+            def __eq__(self, other):
+                d.clear()
+                return NotImplemented
+
+            def __hash__(self):
+                return hash('test')
+
+        d = {S(): 'value'}
+        self.assertFalse('test' in d)
+
     def test_init_use_after_free(self):
         class X:
             def __hash__(self):
diff --git a/Lib/test/test_dict_version.py b/Lib/test/test_dict_version.py
index cb79e74..b237865 100644
--- a/Lib/test/test_dict_version.py
+++ b/Lib/test/test_dict_version.py
@@ -98,20 +98,25 @@
         value2 = AlwaysEqual()
         self.assertTrue(value1 == value2)
         self.assertFalse(value1 != value2)
+        self.assertIsNot(value1, value2)
 
         d = self.new_dict()
         self.check_version_changed(d, d.__setitem__, 'key', value1)
+        self.assertIs(d['key'], value1)
 
         # setting a key to a value equal to the current value
         # with dict.__setitem__() must change the version
         self.check_version_changed(d, d.__setitem__, 'key', value2)
+        self.assertIs(d['key'], value2)
 
         # setting a key to a value equal to the current value
         # with dict.update() must change the version
         self.check_version_changed(d, d.update, key=value1)
+        self.assertIs(d['key'], value1)
 
         d2 = self.new_dict(key=value2)
         self.check_version_changed(d, d.update, d2)
+        self.assertIs(d['key'], value2)
 
     def test_setdefault(self):
         d = self.new_dict()
diff --git a/Lib/test/test_dictcomps.py b/Lib/test/test_dictcomps.py
index 927e310..472e3df 100644
--- a/Lib/test/test_dictcomps.py
+++ b/Lib/test/test_dictcomps.py
@@ -77,7 +77,7 @@
             compile("{x: y for y, x in ((1, 2), (3, 4))} = 5", "<test>",
                     "exec")
 
-        with self.assertRaisesRegex(SyntaxError, "cannot assign"):
+        with self.assertRaisesRegex(SyntaxError, "illegal expression"):
             compile("{x: y for y, x in ((1, 2), (3, 4))} += 5", "<test>",
                     "exec")
 
@@ -111,5 +111,22 @@
         self.assertEqual(actual, expected)
         self.assertEqual(actual_calls, expected_calls)
 
+    def test_assignment_idiom_in_comprehensions(self):
+        expected = {1: 1, 2: 4, 3: 9, 4: 16}
+        actual = {j: j*j for i in range(4) for j in [i+1]}
+        self.assertEqual(actual, expected)
+        expected = {3: 2, 5: 6, 7: 12, 9: 20}
+        actual = {j+k: j*k for i in range(4) for j in [i+1] for k in [j+1]}
+        self.assertEqual(actual, expected)
+        expected = {3: 2, 5: 6, 7: 12, 9: 20}
+        actual = {j+k: j*k for i in range(4)  for j, k in [(i+1, i+2)]}
+        self.assertEqual(actual, expected)
+
+    def test_star_expression(self):
+        expected = {0: 0, 1: 1, 2: 4, 3: 9}
+        self.assertEqual({i: i*i for i in [*range(4)]}, expected)
+        self.assertEqual({i: i*i for i in (*range(4),)}, expected)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py
index 2763cbf..be271be 100644
--- a/Lib/test/test_dictviews.py
+++ b/Lib/test/test_dictviews.py
@@ -92,6 +92,12 @@
         d1 = {'a': 1, 'b': 2}
         d2 = {'b': 3, 'c': 2}
         d3 = {'d': 4, 'e': 5}
+        d4 = {'d': 4}
+
+        class CustomSet(set):
+            def intersection(self, other):
+                return CustomSet(super().intersection(other))
+
         self.assertEqual(d1.keys() & d1.keys(), {'a', 'b'})
         self.assertEqual(d1.keys() & d2.keys(), {'b'})
         self.assertEqual(d1.keys() & d3.keys(), set())
@@ -99,6 +105,14 @@
         self.assertEqual(d1.keys() & set(d2.keys()), {'b'})
         self.assertEqual(d1.keys() & set(d3.keys()), set())
         self.assertEqual(d1.keys() & tuple(d1.keys()), {'a', 'b'})
+        self.assertEqual(d3.keys() & d4.keys(), {'d'})
+        self.assertEqual(d4.keys() & d3.keys(), {'d'})
+        self.assertEqual(d4.keys() & set(d3.keys()), {'d'})
+        self.assertIsInstance(d4.keys() & frozenset(d3.keys()), set)
+        self.assertIsInstance(frozenset(d3.keys()) & d4.keys(), set)
+        self.assertIs(type(d4.keys() & CustomSet(d3.keys())), set)
+        self.assertIs(type(d1.keys() & []), set)
+        self.assertIs(type([] & d1.keys()), set)
 
         self.assertEqual(d1.keys() | d1.keys(), {'a', 'b'})
         self.assertEqual(d1.keys() | d2.keys(), {'a', 'b', 'c'})
@@ -200,6 +214,38 @@
         self.assertTrue(de.items().isdisjoint(de.items()))
         self.assertTrue(de.items().isdisjoint([1]))
 
+    def test_set_operations_with_iterator(self):
+        origin = {1: 2, 3: 4}
+        self.assertEqual(origin.keys() & iter([1, 2]), {1})
+        self.assertEqual(origin.keys() | iter([1, 2]), {1, 2, 3})
+        self.assertEqual(origin.keys() ^ iter([1, 2]), {2, 3})
+        self.assertEqual(origin.keys() - iter([1, 2]), {3})
+
+        items = origin.items()
+        self.assertEqual(items & iter([(1, 2)]), {(1, 2)})
+        self.assertEqual(items ^ iter([(1, 2)]), {(3, 4)})
+        self.assertEqual(items | iter([(1, 2)]), {(1, 2), (3, 4)})
+        self.assertEqual(items - iter([(1, 2)]), {(3, 4)})
+
+    def test_set_operations_with_noniterable(self):
+        with self.assertRaises(TypeError):
+            {}.keys() & 1
+        with self.assertRaises(TypeError):
+            {}.keys() | 1
+        with self.assertRaises(TypeError):
+            {}.keys() ^ 1
+        with self.assertRaises(TypeError):
+            {}.keys() - 1
+
+        with self.assertRaises(TypeError):
+            {}.items() & 1
+        with self.assertRaises(TypeError):
+            {}.items() | 1
+        with self.assertRaises(TypeError):
+            {}.items() ^ 1
+        with self.assertRaises(TypeError):
+            {}.items() - 1
+
     def test_recursive_repr(self):
         d = {}
         d[42] = d.values()
diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py
index 5e2ca1a..42ac1fd 100644
--- a/Lib/test/test_difflib.py
+++ b/Lib/test/test_difflib.py
@@ -501,12 +501,58 @@
         for char in ['a', '#', '\n', '\f', '\r', '\v']:
             self.assertFalse(difflib.IS_CHARACTER_JUNK(char), repr(char))
 
+class TestFindLongest(unittest.TestCase):
+    def longer_match_exists(self, a, b, n):
+        return any(b_part in a for b_part in
+                   [b[i:i + n + 1] for i in range(0, len(b) - n - 1)])
+
+    def test_default_args(self):
+        a = 'foo bar'
+        b = 'foo baz bar'
+        sm = difflib.SequenceMatcher(a=a, b=b)
+        match = sm.find_longest_match()
+        self.assertEqual(match.a, 0)
+        self.assertEqual(match.b, 0)
+        self.assertEqual(match.size, 6)
+        self.assertEqual(a[match.a: match.a + match.size],
+                         b[match.b: match.b + match.size])
+        self.assertFalse(self.longer_match_exists(a, b, match.size))
+
+        match = sm.find_longest_match(alo=2, blo=4)
+        self.assertEqual(match.a, 3)
+        self.assertEqual(match.b, 7)
+        self.assertEqual(match.size, 4)
+        self.assertEqual(a[match.a: match.a + match.size],
+                         b[match.b: match.b + match.size])
+        self.assertFalse(self.longer_match_exists(a[2:], b[4:], match.size))
+
+        match = sm.find_longest_match(bhi=5, blo=1)
+        self.assertEqual(match.a, 1)
+        self.assertEqual(match.b, 1)
+        self.assertEqual(match.size, 4)
+        self.assertEqual(a[match.a: match.a + match.size],
+                         b[match.b: match.b + match.size])
+        self.assertFalse(self.longer_match_exists(a, b[1:5], match.size))
+
+    def test_longest_match_with_popular_chars(self):
+        a = 'dabcd'
+        b = 'd'*100 + 'abc' + 'd'*100  # length over 200 so popular used
+        sm = difflib.SequenceMatcher(a=a, b=b)
+        match = sm.find_longest_match(0, len(a), 0, len(b))
+        self.assertEqual(match.a, 0)
+        self.assertEqual(match.b, 99)
+        self.assertEqual(match.size, 5)
+        self.assertEqual(a[match.a: match.a + match.size],
+                         b[match.b: match.b + match.size])
+        self.assertFalse(self.longer_match_exists(a, b, match.size))
+
+
 def test_main():
     difflib.HtmlDiff._default_prefix = 0
     Doctests = doctest.DocTestSuite(difflib)
     run_unittest(
         TestWithAscii, TestAutojunk, TestSFpatches, TestSFbugs,
-        TestOutputFormat, TestBytes, TestJunkAPIs, Doctests)
+        TestOutputFormat, TestBytes, TestJunkAPIs, TestFindLongest, Doctests)
 
 if __name__ == '__main__':
     test_main()
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
index 03b2860..ac5836d 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -1,7 +1,7 @@
 # Minimal tests for dis module
 
 from test.support import captured_stdout
-from test.bytecode_helper import BytecodeTestCase
+from test.support.bytecode_helper import BytecodeTestCase
 import unittest
 import sys
 import dis
@@ -147,7 +147,7 @@
 dis_bug1333982 = """\
 %3d           0 LOAD_CONST               1 (0)
               2 POP_JUMP_IF_TRUE        26
-              4 LOAD_GLOBAL              0 (AssertionError)
+              4 LOAD_ASSERTION_ERROR
               6 LOAD_CONST               2 (<code object <listcomp> at 0x..., file "%s", line %d>)
               8 LOAD_CONST               3 ('bug1333982.<locals>.<listcomp>')
              10 MAKE_FUNCTION            0
@@ -278,32 +278,33 @@
     -->       6 BINARY_TRUE_DIVIDE
               8 POP_TOP
              10 POP_BLOCK
-             12 JUMP_FORWARD            40 (to 54)
+             12 JUMP_FORWARD            42 (to 56)
 
 %3d     >>   14 DUP_TOP
              16 LOAD_GLOBAL              0 (Exception)
-             18 COMPARE_OP              10 (exception match)
-             20 POP_JUMP_IF_FALSE       52
-             22 POP_TOP
-             24 STORE_FAST               0 (e)
-             26 POP_TOP
-             28 SETUP_FINALLY           10 (to 40)
+             18 JUMP_IF_NOT_EXC_MATCH    54
+             20 POP_TOP
+             22 STORE_FAST               0 (e)
+             24 POP_TOP
+             26 SETUP_FINALLY           18 (to 46)
 
-%3d          30 LOAD_FAST                0 (e)
-             32 LOAD_ATTR                1 (__traceback__)
-             34 STORE_FAST               1 (tb)
-             36 POP_BLOCK
-             38 BEGIN_FINALLY
-        >>   40 LOAD_CONST               0 (None)
-             42 STORE_FAST               0 (e)
-             44 DELETE_FAST              0 (e)
-             46 END_FINALLY
-             48 POP_EXCEPT
-             50 JUMP_FORWARD             2 (to 54)
-        >>   52 END_FINALLY
+%3d          28 LOAD_FAST                0 (e)
+             30 LOAD_ATTR                1 (__traceback__)
+             32 STORE_FAST               1 (tb)
+             34 POP_BLOCK
+             36 POP_EXCEPT
+             38 LOAD_CONST               0 (None)
+             40 STORE_FAST               0 (e)
+             42 DELETE_FAST              0 (e)
+             44 JUMP_FORWARD            10 (to 56)
+        >>   46 LOAD_CONST               0 (None)
+             48 STORE_FAST               0 (e)
+             50 DELETE_FAST              0 (e)
+             52 RERAISE
+        >>   54 RERAISE
 
-%3d     >>   54 LOAD_FAST                1 (tb)
-             56 RETURN_VALUE
+%3d     >>   56 LOAD_FAST                1 (tb)
+             58 RETURN_VALUE
 """ % (TRACEBACK_CODE.co_firstlineno + 1,
        TRACEBACK_CODE.co_firstlineno + 2,
        TRACEBACK_CODE.co_firstlineno + 3,
@@ -331,6 +332,68 @@
              28 RETURN_VALUE
 """ % (_fstring.__code__.co_firstlineno + 1,)
 
+def _tryfinally(a, b):
+    try:
+        return a
+    finally:
+        b()
+
+def _tryfinallyconst(b):
+    try:
+        return 1
+    finally:
+        b()
+
+dis_tryfinally = """\
+%3d           0 SETUP_FINALLY           12 (to 14)
+
+%3d           2 LOAD_FAST                0 (a)
+              4 POP_BLOCK
+
+%3d           6 LOAD_FAST                1 (b)
+              8 CALL_FUNCTION            0
+             10 POP_TOP
+
+%3d          12 RETURN_VALUE
+
+%3d     >>   14 LOAD_FAST                1 (b)
+             16 CALL_FUNCTION            0
+             18 POP_TOP
+             20 RERAISE
+             22 LOAD_CONST               0 (None)
+             24 RETURN_VALUE
+""" % (_tryfinally.__code__.co_firstlineno + 1,
+       _tryfinally.__code__.co_firstlineno + 2,
+       _tryfinally.__code__.co_firstlineno + 4,
+       _tryfinally.__code__.co_firstlineno + 2,
+       _tryfinally.__code__.co_firstlineno + 4,
+       )
+
+dis_tryfinallyconst = """\
+%3d           0 SETUP_FINALLY           12 (to 14)
+
+%3d           2 POP_BLOCK
+
+%3d           4 LOAD_FAST                0 (b)
+              6 CALL_FUNCTION            0
+              8 POP_TOP
+
+%3d          10 LOAD_CONST               1 (1)
+             12 RETURN_VALUE
+
+%3d     >>   14 LOAD_FAST                0 (b)
+             16 CALL_FUNCTION            0
+             18 POP_TOP
+             20 RERAISE
+             22 LOAD_CONST               0 (None)
+             24 RETURN_VALUE
+""" % (_tryfinallyconst.__code__.co_firstlineno + 1,
+       _tryfinallyconst.__code__.co_firstlineno + 2,
+       _tryfinallyconst.__code__.co_firstlineno + 4,
+       _tryfinallyconst.__code__.co_firstlineno + 2,
+       _tryfinallyconst.__code__.co_firstlineno + 4,
+       )
+
 def _g(x):
     yield x
 
@@ -442,7 +505,8 @@
     def test_widths(self):
         for opcode, opname in enumerate(dis.opname):
             if opname in ('BUILD_MAP_UNPACK_WITH_CALL',
-                          'BUILD_TUPLE_UNPACK_WITH_CALL'):
+                          'BUILD_TUPLE_UNPACK_WITH_CALL',
+                          'JUMP_IF_NOT_EXC_MATCH'):
                 continue
             with self.subTest(opname=opname):
                 width = dis._OPNAME_WIDTH
@@ -561,6 +625,10 @@
     def test_disassemble_fstring(self):
         self.do_disassembly_test(_fstring, dis_fstring)
 
+    def test_disassemble_try_finally(self):
+        self.do_disassembly_test(_tryfinally, dis_tryfinally)
+        self.do_disassembly_test(_tryfinallyconst, dis_tryfinallyconst)
+
     def test_dis_none(self):
         try:
             del sys.last_traceback
@@ -752,7 +820,7 @@
 Positional-only arguments: 0
 Kw-only arguments: 0
 Number of locals:  2
-Stack size:        10
+Stack size:        9
 Flags:             OPTIMIZED, NEWLOCALS, NOFREE, COROUTINE
 Constants:
    0: None
@@ -977,49 +1045,62 @@
   Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=96, starts_line=None, is_jump_target=False),
   Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=98, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=100, starts_line=None, is_jump_target=False),
-  Instruction(opname='SETUP_FINALLY', opcode=122, arg=70, argval=174, argrepr='to 174', offset=102, starts_line=20, is_jump_target=True),
+  Instruction(opname='SETUP_FINALLY', opcode=122, arg=96, argval=200, argrepr='to 200', offset=102, starts_line=20, is_jump_target=True),
   Instruction(opname='SETUP_FINALLY', opcode=122, arg=12, argval=118, argrepr='to 118', offset=104, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=106, starts_line=21, is_jump_target=False),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval=0, argrepr='0', offset=108, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval=0, argrepr='0', offset=108, starts_line=None, is_jump_target=False),
   Instruction(opname='BINARY_TRUE_DIVIDE', opcode=27, arg=None, argval=None, argrepr='', offset=110, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=112, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=114, starts_line=None, is_jump_target=False),
-  Instruction(opname='JUMP_FORWARD', opcode=110, arg=28, argval=146, argrepr='to 146', offset=116, starts_line=None, is_jump_target=False),
+  Instruction(opname='JUMP_FORWARD', opcode=110, arg=26, argval=144, argrepr='to 144', offset=116, starts_line=None, is_jump_target=False),
   Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=118, starts_line=22, is_jump_target=True),
   Instruction(opname='LOAD_GLOBAL', opcode=116, arg=2, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=120, starts_line=None, is_jump_target=False),
-  Instruction(opname='COMPARE_OP', opcode=107, arg=10, argval='exception match', argrepr='exception match', offset=122, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=144, argval=144, argrepr='', offset=124, starts_line=None, is_jump_target=False),
+  Instruction(opname='JUMP_IF_NOT_EXC_MATCH', opcode=121, arg=142, argval=142, argrepr='', offset=122, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=124, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=126, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=128, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=130, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=132, starts_line=23, is_jump_target=False),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=134, starts_line=None, is_jump_target=False),
-  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=136, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=140, starts_line=None, is_jump_target=False),
-  Instruction(opname='JUMP_FORWARD', opcode=110, arg=26, argval=170, argrepr='to 170', offset=142, starts_line=None, is_jump_target=False),
-  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=144, starts_line=None, is_jump_target=True),
-  Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=146, starts_line=25, is_jump_target=True),
-  Instruction(opname='SETUP_WITH', opcode=143, arg=14, argval=164, argrepr='to 164', offset=148, starts_line=None, is_jump_target=False),
-  Instruction(opname='STORE_FAST', opcode=125, arg=1, argval='dodgy', argrepr='dodgy', offset=150, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=152, starts_line=26, is_jump_target=False),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval='Never reach this', argrepr="'Never reach this'", offset=154, starts_line=None, is_jump_target=False),
-  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=156, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=158, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=160, starts_line=None, is_jump_target=False),
-  Instruction(opname='BEGIN_FINALLY', opcode=53, arg=None, argval=None, argrepr='', offset=162, starts_line=None, is_jump_target=False),
-  Instruction(opname='WITH_CLEANUP_START', opcode=81, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=True),
-  Instruction(opname='WITH_CLEANUP_FINISH', opcode=82, arg=None, argval=None, argrepr='', offset=166, starts_line=None, is_jump_target=False),
-  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=168, starts_line=None, is_jump_target=False),
-  Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=170, starts_line=None, is_jump_target=True),
-  Instruction(opname='BEGIN_FINALLY', opcode=53, arg=None, argval=None, argrepr='', offset=172, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=174, starts_line=28, is_jump_target=True),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=176, starts_line=None, is_jump_target=False),
-  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=178, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=130, starts_line=23, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=132, starts_line=None, is_jump_target=False),
+  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=134, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=136, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False),
+  Instruction(opname='JUMP_FORWARD', opcode=110, arg=46, argval=188, argrepr='to 188', offset=140, starts_line=None, is_jump_target=False),
+  Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=142, starts_line=None, is_jump_target=True),
+  Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=144, starts_line=25, is_jump_target=True),
+  Instruction(opname='SETUP_WITH', opcode=143, arg=24, argval=172, argrepr='to 172', offset=146, starts_line=None, is_jump_target=False),
+  Instruction(opname='STORE_FAST', opcode=125, arg=1, argval='dodgy', argrepr='dodgy', offset=148, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=150, starts_line=26, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Never reach this', argrepr="'Never reach this'", offset=152, starts_line=None, is_jump_target=False),
+  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=154, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=156, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=158, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=160, starts_line=None, is_jump_target=False),
+  Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=162, starts_line=None, is_jump_target=False),
+  Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=False),
+  Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=166, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=168, starts_line=None, is_jump_target=False),
+  Instruction(opname='JUMP_FORWARD', opcode=110, arg=16, argval=188, argrepr='to 188', offset=170, starts_line=None, is_jump_target=False),
+  Instruction(opname='WITH_EXCEPT_START', opcode=49, arg=None, argval=None, argrepr='', offset=172, starts_line=None, is_jump_target=True),
+  Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=178, argval=178, argrepr='', offset=174, starts_line=None, is_jump_target=False),
+  Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=176, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=178, starts_line=None, is_jump_target=True),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=False),
-  Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=184, starts_line=None, is_jump_target=False),
-  Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=184, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=188, starts_line=None, is_jump_target=True),
+  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=190, starts_line=28, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=192, starts_line=None, is_jump_target=False),
+  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=194, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=196, starts_line=None, is_jump_target=False),
+  Instruction(opname='JUMP_FORWARD', opcode=110, arg=10, argval=210, argrepr='to 210', offset=198, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=200, starts_line=None, is_jump_target=True),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=202, starts_line=None, is_jump_target=False),
+  Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=204, starts_line=None, is_jump_target=False),
+  Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=206, starts_line=None, is_jump_target=False),
+  Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=208, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=210, starts_line=None, is_jump_target=True),
+  Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=212, starts_line=None, is_jump_target=False),
 ]
 
 # One last piece of inspect fodder to check the default line number handling
@@ -1032,6 +1113,10 @@
 
 class InstructionTests(BytecodeTestCase):
 
+    def __init__(self, *args):
+        super().__init__(*args)
+        self.maxDiff = None
+
     def test_default_first_line(self):
         actual = dis.get_instructions(simple)
         self.assertEqual(list(actual), expected_opinfo_simple)
@@ -1063,6 +1148,7 @@
 # get_instructions has its own tests above, so can rely on it to validate
 # the object oriented API
 class BytecodeTests(unittest.TestCase):
+
     def test_instantiation(self):
         # Test with function, method, code string and code object
         for obj in [_f, _C(1).__init__, "a=1", _f.__code__]:
diff --git a/Lib/test/test_distutils.py b/Lib/test/test_distutils.py
index d613abe..a37f117 100644
--- a/Lib/test/test_distutils.py
+++ b/Lib/test/test_distutils.py
@@ -10,9 +10,15 @@
 
 
 def test_main():
+    # used by regrtest
     test.support.run_unittest(distutils.tests.test_suite())
     test.support.reap_children()
 
 
+def load_tests(*_):
+    # used by unittest
+    return distutils.tests.test_suite()
+
+
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index ad30a05..3efe5da 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -665,7 +665,7 @@
 
     >>> import builtins
     >>> tests = doctest.DocTestFinder().find(builtins)
-    >>> 800 < len(tests) < 820 # approximate number of objects with docstrings
+    >>> 816 < len(tests) < 836 # approximate number of objects with docstrings
     True
     >>> real_tests = [t for t in tests if len(t.examples) > 0]
     >>> len(real_tests) # objects that actually have doctests
@@ -2494,7 +2494,7 @@
 
 def test_testfile(): r"""
 Tests for the `testfile()` function.  This function runs all the
-doctest examples in a given file.  In its simple invokation, it is
+doctest examples in a given file.  In its simple invocation, it is
 called with the name of a file, which is taken to be relative to the
 calling module.  The return value is (#failures, #tests).
 
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
deleted file mode 100644
index 0f56fcf..0000000
--- a/Lib/test/test_dummy_thread.py
+++ /dev/null
@@ -1,276 +0,0 @@
-import _dummy_thread as _thread
-import time
-import queue
-import random
-import unittest
-from test import support
-from unittest import mock
-
-DELAY = 0
-
-
-class LockTests(unittest.TestCase):
-    """Test lock objects."""
-
-    def setUp(self):
-        # Create a lock
-        self.lock = _thread.allocate_lock()
-
-    def test_initlock(self):
-        #Make sure locks start locked
-        self.assertFalse(self.lock.locked(),
-                        "Lock object is not initialized unlocked.")
-
-    def test_release(self):
-        # Test self.lock.release()
-        self.lock.acquire()
-        self.lock.release()
-        self.assertFalse(self.lock.locked(),
-                        "Lock object did not release properly.")
-
-    def test_LockType_context_manager(self):
-        with _thread.LockType():
-            pass
-        self.assertFalse(self.lock.locked(),
-                         "Acquired Lock was not released")
-
-    def test_improper_release(self):
-        #Make sure release of an unlocked thread raises RuntimeError
-        self.assertRaises(RuntimeError, self.lock.release)
-
-    def test_cond_acquire_success(self):
-        #Make sure the conditional acquiring of the lock works.
-        self.assertTrue(self.lock.acquire(0),
-                        "Conditional acquiring of the lock failed.")
-
-    def test_cond_acquire_fail(self):
-        #Test acquiring locked lock returns False
-        self.lock.acquire(0)
-        self.assertFalse(self.lock.acquire(0),
-                        "Conditional acquiring of a locked lock incorrectly "
-                         "succeeded.")
-
-    def test_uncond_acquire_success(self):
-        #Make sure unconditional acquiring of a lock works.
-        self.lock.acquire()
-        self.assertTrue(self.lock.locked(),
-                        "Uncondional locking failed.")
-
-    def test_uncond_acquire_return_val(self):
-        #Make sure that an unconditional locking returns True.
-        self.assertIs(self.lock.acquire(1), True,
-                        "Unconditional locking did not return True.")
-        self.assertIs(self.lock.acquire(), True)
-
-    def test_uncond_acquire_blocking(self):
-        #Make sure that unconditional acquiring of a locked lock blocks.
-        def delay_unlock(to_unlock, delay):
-            """Hold on to lock for a set amount of time before unlocking."""
-            time.sleep(delay)
-            to_unlock.release()
-
-        self.lock.acquire()
-        start_time = int(time.monotonic())
-        _thread.start_new_thread(delay_unlock,(self.lock, DELAY))
-        if support.verbose:
-            print()
-            print("*** Waiting for thread to release the lock "\
-            "(approx. %s sec.) ***" % DELAY)
-        self.lock.acquire()
-        end_time = int(time.monotonic())
-        if support.verbose:
-            print("done")
-        self.assertGreaterEqual(end_time - start_time, DELAY,
-                        "Blocking by unconditional acquiring failed.")
-
-    @mock.patch('time.sleep')
-    def test_acquire_timeout(self, mock_sleep):
-        """Test invoking acquire() with a positive timeout when the lock is
-        already acquired. Ensure that time.sleep() is invoked with the given
-        timeout and that False is returned."""
-
-        self.lock.acquire()
-        retval = self.lock.acquire(waitflag=0, timeout=1)
-        self.assertTrue(mock_sleep.called)
-        mock_sleep.assert_called_once_with(1)
-        self.assertEqual(retval, False)
-
-    def test_lock_representation(self):
-        self.lock.acquire()
-        self.assertIn("locked", repr(self.lock))
-        self.lock.release()
-        self.assertIn("unlocked", repr(self.lock))
-
-
-class RLockTests(unittest.TestCase):
-    """Test dummy RLock objects."""
-
-    def setUp(self):
-        self.rlock = _thread.RLock()
-
-    def test_multiple_acquire(self):
-        self.assertIn("unlocked", repr(self.rlock))
-        self.rlock.acquire()
-        self.rlock.acquire()
-        self.assertIn("locked", repr(self.rlock))
-        self.rlock.release()
-        self.assertIn("locked", repr(self.rlock))
-        self.rlock.release()
-        self.assertIn("unlocked", repr(self.rlock))
-        self.assertRaises(RuntimeError, self.rlock.release)
-
-
-class MiscTests(unittest.TestCase):
-    """Miscellaneous tests."""
-
-    def test_exit(self):
-        self.assertRaises(SystemExit, _thread.exit)
-
-    def test_ident(self):
-        self.assertIsInstance(_thread.get_ident(), int,
-                              "_thread.get_ident() returned a non-integer")
-        self.assertGreater(_thread.get_ident(), 0)
-
-    def test_LockType(self):
-        self.assertIsInstance(_thread.allocate_lock(), _thread.LockType,
-                              "_thread.LockType is not an instance of what "
-                              "is returned by _thread.allocate_lock()")
-
-    def test_set_sentinel(self):
-        self.assertIsInstance(_thread._set_sentinel(), _thread.LockType,
-                              "_thread._set_sentinel() did not return a "
-                              "LockType instance.")
-
-    def test_interrupt_main(self):
-        #Calling start_new_thread with a function that executes interrupt_main
-        # should raise KeyboardInterrupt upon completion.
-        def call_interrupt():
-            _thread.interrupt_main()
-
-        self.assertRaises(KeyboardInterrupt,
-                          _thread.start_new_thread,
-                          call_interrupt,
-                          tuple())
-
-    def test_interrupt_in_main(self):
-        self.assertRaises(KeyboardInterrupt, _thread.interrupt_main)
-
-    def test_stack_size_None(self):
-        retval = _thread.stack_size(None)
-        self.assertEqual(retval, 0)
-
-    def test_stack_size_not_None(self):
-        with self.assertRaises(_thread.error) as cm:
-            _thread.stack_size("")
-        self.assertEqual(cm.exception.args[0],
-                         "setting thread stack size not supported")
-
-
-class ThreadTests(unittest.TestCase):
-    """Test thread creation."""
-
-    def test_arg_passing(self):
-        #Make sure that parameter passing works.
-        def arg_tester(queue, arg1=False, arg2=False):
-            """Use to test _thread.start_new_thread() passes args properly."""
-            queue.put((arg1, arg2))
-
-        testing_queue = queue.Queue(1)
-        _thread.start_new_thread(arg_tester, (testing_queue, True, True))
-        result = testing_queue.get()
-        self.assertTrue(result[0] and result[1],
-                        "Argument passing for thread creation "
-                        "using tuple failed")
-
-        _thread.start_new_thread(
-                arg_tester,
-                tuple(),
-                {'queue':testing_queue, 'arg1':True, 'arg2':True})
-
-        result = testing_queue.get()
-        self.assertTrue(result[0] and result[1],
-                        "Argument passing for thread creation "
-                        "using kwargs failed")
-
-        _thread.start_new_thread(
-                arg_tester,
-                (testing_queue, True),
-                {'arg2':True})
-
-        result = testing_queue.get()
-        self.assertTrue(result[0] and result[1],
-                        "Argument passing for thread creation using both tuple"
-                        " and kwargs failed")
-
-    def test_multi_thread_creation(self):
-        def queue_mark(queue, delay):
-            time.sleep(delay)
-            queue.put(_thread.get_ident())
-
-        thread_count = 5
-        testing_queue = queue.Queue(thread_count)
-
-        if support.verbose:
-            print()
-            print("*** Testing multiple thread creation "
-                  "(will take approx. %s to %s sec.) ***" % (
-                    DELAY, thread_count))
-
-        for count in range(thread_count):
-            if DELAY:
-                local_delay = round(random.random(), 1)
-            else:
-                local_delay = 0
-            _thread.start_new_thread(queue_mark,
-                                     (testing_queue, local_delay))
-        time.sleep(DELAY)
-        if support.verbose:
-            print('done')
-        self.assertEqual(testing_queue.qsize(), thread_count,
-                         "Not all %s threads executed properly "
-                         "after %s sec." % (thread_count, DELAY))
-
-    def test_args_not_tuple(self):
-        """
-        Test invoking start_new_thread() with a non-tuple value for "args".
-        Expect TypeError with a meaningful error message to be raised.
-        """
-        with self.assertRaises(TypeError) as cm:
-            _thread.start_new_thread(mock.Mock(), [])
-        self.assertEqual(cm.exception.args[0], "2nd arg must be a tuple")
-
-    def test_kwargs_not_dict(self):
-        """
-        Test invoking start_new_thread() with a non-dict value for "kwargs".
-        Expect TypeError with a meaningful error message to be raised.
-        """
-        with self.assertRaises(TypeError) as cm:
-            _thread.start_new_thread(mock.Mock(), tuple(), kwargs=[])
-        self.assertEqual(cm.exception.args[0], "3rd arg must be a dict")
-
-    def test_SystemExit(self):
-        """
-        Test invoking start_new_thread() with a function that raises
-        SystemExit.
-        The exception should be discarded.
-        """
-        func = mock.Mock(side_effect=SystemExit())
-        try:
-            _thread.start_new_thread(func, tuple())
-        except SystemExit:
-            self.fail("start_new_thread raised SystemExit.")
-
-    @mock.patch('traceback.print_exc')
-    def test_RaiseException(self, mock_print_exc):
-        """
-        Test invoking start_new_thread() with a function that raises exception.
-
-        The exception should be discarded and the traceback should be printed
-        via traceback.print_exc()
-        """
-        func = mock.Mock(side_effect=Exception)
-        _thread.start_new_thread(func, tuple())
-        self.assertTrue(mock_print_exc.called)
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/Lib/test/test_dummy_threading.py b/Lib/test/test_dummy_threading.py
deleted file mode 100644
index a0c2972..0000000
--- a/Lib/test/test_dummy_threading.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from test import support
-import unittest
-import dummy_threading as _threading
-import time
-
-class DummyThreadingTestCase(unittest.TestCase):
-
-    class TestThread(_threading.Thread):
-
-        def run(self):
-            global running
-            global sema
-            global mutex
-            # Uncomment if testing another module, such as the real 'threading'
-            # module.
-            #delay = random.random() * 2
-            delay = 0
-            if support.verbose:
-                print('task', self.name, 'will run for', delay, 'sec')
-            sema.acquire()
-            mutex.acquire()
-            running += 1
-            if support.verbose:
-                print(running, 'tasks are running')
-            mutex.release()
-            time.sleep(delay)
-            if support.verbose:
-                print('task', self.name, 'done')
-            mutex.acquire()
-            running -= 1
-            if support.verbose:
-                print(self.name, 'is finished.', running, 'tasks are running')
-            mutex.release()
-            sema.release()
-
-    def setUp(self):
-        self.numtasks = 10
-        global sema
-        sema = _threading.BoundedSemaphore(value=3)
-        global mutex
-        mutex = _threading.RLock()
-        global running
-        running = 0
-        self.threads = []
-
-    def test_tasks(self):
-        for i in range(self.numtasks):
-            t = self.TestThread(name="<thread %d>"%i)
-            self.threads.append(t)
-            t.start()
-
-        if support.verbose:
-            print('waiting for all tasks to complete')
-        for t in self.threads:
-            t.join()
-        if support.verbose:
-            print('all tasks done')
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/Lib/test/test_email/test__header_value_parser.py b/Lib/test/test_email/test__header_value_parser.py
index 4b5b442..1bdcfa1 100644
--- a/Lib/test/test_email/test__header_value_parser.py
+++ b/Lib/test/test_email/test__header_value_parser.py
@@ -301,7 +301,7 @@
             [],
             '')
 
-    def test_get_unstructured_invaild_ew(self):
+    def test_get_unstructured_invalid_ew(self):
         self._test_get_x(self._get_unst,
             '=?test val',
             '=?test val',
diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py
index 9e5c6ad..ab68cdd 100644
--- a/Lib/test/test_email/test_email.py
+++ b/Lib/test/test_email/test_email.py
@@ -311,6 +311,41 @@
         g.flatten(msg)
         self.assertEqual(fullrepr, s.getvalue())
 
+    def test_nonascii_as_string_without_cte(self):
+        m = textwrap.dedent("""\
+            MIME-Version: 1.0
+            Content-type: text/plain; charset="iso-8859-1"
+
+            Test if non-ascii messages with no Content-Transfer-Encoding set
+            can be as_string'd:
+            Föö bär
+            """)
+        source = m.encode('iso-8859-1')
+        expected = textwrap.dedent("""\
+            MIME-Version: 1.0
+            Content-type: text/plain; charset="iso-8859-1"
+            Content-Transfer-Encoding: quoted-printable
+
+            Test if non-ascii messages with no Content-Transfer-Encoding set
+            can be as_string'd:
+            F=F6=F6 b=E4r
+            """)
+        msg = email.message_from_bytes(source)
+        self.assertEqual(msg.as_string(), expected)
+
+    def test_nonascii_as_string_without_content_type_and_cte(self):
+        m = textwrap.dedent("""\
+            MIME-Version: 1.0
+
+            Test if non-ascii messages with no Content-Type nor
+            Content-Transfer-Encoding set can be as_string'd:
+            Föö bär
+            """)
+        source = m.encode('iso-8859-1')
+        expected = source.decode('ascii', 'replace')
+        msg = email.message_from_bytes(source)
+        self.assertEqual(msg.as_string(), expected)
+
     def test_as_bytes(self):
         msg = self._msgobj('msg_01.txt')
         with openfile('msg_01.txt') as fp:
@@ -1008,7 +1043,7 @@
 Subject: the first part of this is short,
  but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself""")
 
-    def test_splittable_leading_char_followed_by_overlong_unsplitable(self):
+    def test_splittable_leading_char_followed_by_overlong_unsplittable(self):
         eq = self.ndiffAssertEqual
         h = Header(', but_the_second'
             '_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line'
@@ -1017,7 +1052,7 @@
 ,
  but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself""")
 
-    def test_multiple_splittable_leading_char_followed_by_overlong_unsplitable(self):
+    def test_multiple_splittable_leading_char_followed_by_overlong_unsplittable(self):
         eq = self.ndiffAssertEqual
         h = Header(', , but_the_second'
             '_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line'
@@ -1026,14 +1061,14 @@
 , ,
  but_the_second_part_does_not_fit_within_maxlinelen_and_thus_should_be_on_a_line_all_by_itself""")
 
-    def test_trailing_splitable_on_overlong_unsplitable(self):
+    def test_trailing_splittable_on_overlong_unsplittable(self):
         eq = self.ndiffAssertEqual
         h = Header('this_part_does_not_fit_within_maxlinelen_and_thus_should_'
             'be_on_a_line_all_by_itself;')
         eq(h.encode(), "this_part_does_not_fit_within_maxlinelen_and_thus_should_"
             "be_on_a_line_all_by_itself;")
 
-    def test_trailing_splitable_on_overlong_unsplitable_with_leading_splitable(self):
+    def test_trailing_splittable_on_overlong_unsplittable_with_leading_splittable(self):
         eq = self.ndiffAssertEqual
         h = Header('; '
             'this_part_does_not_fit_within_maxlinelen_and_thus_should_'
@@ -1466,7 +1501,7 @@
         g.flatten(msg)
         self.assertEqual(b.getvalue(), source + b'>From R\xc3\xb6lli\n')
 
-    def test_mutltipart_with_bad_bytes_in_cte(self):
+    def test_multipart_with_bad_bytes_in_cte(self):
         # bpo30835
         source = textwrap.dedent("""\
             From: aperson@example.com
diff --git a/Lib/test/test_email/test_headerregistry.py b/Lib/test/test_email/test_headerregistry.py
index 7ade968..68bbc95 100644
--- a/Lib/test/test_email/test_headerregistry.py
+++ b/Lib/test/test_email/test_headerregistry.py
@@ -7,6 +7,7 @@
 from test.test_email import TestEmailBase, parameterize
 from email import headerregistry
 from email.headerregistry import Address, Group
+from test.support import ALWAYS_EQ
 
 
 DITTO = object()
@@ -1563,6 +1564,24 @@
         self.assertEqual(m['to'], 'foo bar:;')
         self.assertEqual(m['to'].addresses, g.addresses)
 
+    def test_address_comparison(self):
+        a = Address('foo', 'bar', 'example.com')
+        self.assertEqual(Address('foo', 'bar', 'example.com'), a)
+        self.assertNotEqual(Address('baz', 'bar', 'example.com'), a)
+        self.assertNotEqual(Address('foo', 'baz', 'example.com'), a)
+        self.assertNotEqual(Address('foo', 'bar', 'baz'), a)
+        self.assertFalse(a == object())
+        self.assertTrue(a == ALWAYS_EQ)
+
+    def test_group_comparison(self):
+        a = Address('foo', 'bar', 'example.com')
+        g = Group('foo bar', [a])
+        self.assertEqual(Group('foo bar', (a,)), g)
+        self.assertNotEqual(Group('baz', [a]), g)
+        self.assertNotEqual(Group('foo bar', []), g)
+        self.assertFalse(g == object())
+        self.assertTrue(g == ALWAYS_EQ)
+
 
 class TestFolding(TestHeaderBase):
 
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 64a26b9..aeb44d7 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -267,9 +267,8 @@
 
     def test_bpo20891(self):
         """
-        bpo-20891: Calling PyGILState_Ensure in a non-Python thread before
-        calling PyEval_InitThreads() must not crash. PyGILState_Ensure() must
-        call PyEval_InitThreads() for us in this case.
+        bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
+        crash.
         """
         out, err = self.run_embedded_interpreter("test_bpo20891")
         self.assertEqual(out, '')
@@ -348,6 +347,7 @@
         'isolated': 0,
         'use_environment': 1,
         'dev_mode': 0,
+        '_use_peg_parser': 1,
 
         'install_signal_handlers': 1,
         'use_hash_seed': 0,
@@ -356,7 +356,6 @@
         'tracemalloc': 0,
         'import_time': 0,
         'show_ref_count': 0,
-        'show_alloc_count': 0,
         'dump_refs': 0,
         'malloc_stats': 0,
 
@@ -367,6 +366,7 @@
         'program_name': GET_DEFAULT_CONFIG,
         'parse_argv': 0,
         'argv': [""],
+        '_orig_argv': [],
 
         'xoptions': [],
         'warnoptions': [],
@@ -381,6 +381,7 @@
         'exec_prefix': GET_DEFAULT_CONFIG,
         'base_exec_prefix': GET_DEFAULT_CONFIG,
         'module_search_paths': GET_DEFAULT_CONFIG,
+        'platlibdir': sys.platlibdir,
 
         'site_import': 1,
         'bytes_warning': 0,
@@ -407,6 +408,7 @@
         'check_hash_pycs_mode': 'default',
         'pathconfig_warnings': 1,
         '_init_main': 1,
+        '_isolated_interpreter': 0,
     }
     if MS_WINDOWS:
         CONFIG_COMPAT.update({
@@ -585,13 +587,14 @@
             if value is self.GET_DEFAULT_CONFIG:
                 expected[key] = config[key]
 
-        pythonpath_env = expected['pythonpath_env']
-        if pythonpath_env is not None:
-            paths = pythonpath_env.split(os.path.pathsep)
-            expected['module_search_paths'] = [*paths, *expected['module_search_paths']]
-        if modify_path_cb is not None:
-            expected['module_search_paths'] = expected['module_search_paths'].copy()
-            modify_path_cb(expected['module_search_paths'])
+        if expected['module_search_paths'] is not self.IGNORE_CONFIG:
+            pythonpath_env = expected['pythonpath_env']
+            if pythonpath_env is not None:
+                paths = pythonpath_env.split(os.path.pathsep)
+                expected['module_search_paths'] = [*paths, *expected['module_search_paths']]
+            if modify_path_cb is not None:
+                expected['module_search_paths'] = expected['module_search_paths'].copy()
+                modify_path_cb(expected['module_search_paths'])
 
         for key in self.COPY_PRE_CONFIG:
             if key not in expected_preconfig:
@@ -730,15 +733,20 @@
             'tracemalloc': 2,
             'import_time': 1,
             'show_ref_count': 1,
-            'show_alloc_count': 1,
             'malloc_stats': 1,
+            '_use_peg_parser': 0,
 
             'stdio_encoding': 'iso8859-1',
             'stdio_errors': 'replace',
 
             'pycache_prefix': 'conf_pycache_prefix',
             'program_name': './conf_program_name',
-            'argv': ['-c', 'arg2', ],
+            'argv': ['-c', 'arg2'],
+            '_orig_argv': ['python3',
+                           '-W', 'cmdline_warnoption',
+                           '-X', 'cmdline_xoption',
+                           '-c', 'pass',
+                           'arg2'],
             'parse_argv': 1,
             'xoptions': [
                 'config_xoption1=3',
@@ -765,9 +773,13 @@
             'buffered_stdio': 0,
             'user_site_directory': 0,
             'faulthandler': 1,
+            'platlibdir': 'my_platlibdir',
+            'module_search_paths': self.IGNORE_CONFIG,
 
             'check_hash_pycs_mode': 'always',
             'pathconfig_warnings': 0,
+
+            '_isolated_interpreter': 1,
         }
         self.check_all_configs("test_init_from_config", config, preconfig,
                                api=API_COMPAT)
@@ -794,6 +806,9 @@
             'user_site_directory': 0,
             'faulthandler': 1,
             'warnoptions': ['EnvVar'],
+            'platlibdir': 'env_platlibdir',
+            'module_search_paths': self.IGNORE_CONFIG,
+            '_use_peg_parser': 0,
         }
         self.check_all_configs("test_init_compat_env", config, preconfig,
                                api=API_COMPAT)
@@ -821,6 +836,9 @@
             'user_site_directory': 0,
             'faulthandler': 1,
             'warnoptions': ['EnvVar'],
+            'platlibdir': 'env_platlibdir',
+            'module_search_paths': self.IGNORE_CONFIG,
+            '_use_peg_parser': 0,
         }
         self.check_all_configs("test_init_python_env", config, preconfig,
                                api=API_PYTHON)
@@ -861,7 +879,8 @@
         }
         config = {
             'argv': ['script.py'],
-            'run_filename': 'script.py',
+            '_orig_argv': ['python3', '-X', 'dev', 'script.py'],
+            'run_filename': os.path.abspath('script.py'),
             'dev_mode': 1,
             'faulthandler': 1,
             'warnoptions': ['default'],
@@ -875,9 +894,14 @@
         preconfig = {
             'isolated': 0,
         }
+        argv = ["python3",
+               "-E", "-I",
+               "-X", "dev",
+               "-X", "utf8",
+               "script.py"]
         config = {
-            'argv': ["python3", "-E", "-I",
-                     "-X", "dev", "-X", "utf8", "script.py"],
+            'argv': argv,
+            '_orig_argv': argv,
             'isolated': 0,
         }
         self.check_all_configs("test_preinit_dont_parse_argv", config, preconfig,
@@ -956,6 +980,9 @@
                 'ignore:::sysadd_warnoption',
                 'ignore:::config_warnoption',
             ],
+            '_orig_argv': ['python3',
+                           '-W', 'ignore:::cmdline_warnoption',
+                           '-X', 'cmdline_xoption'],
         }
         self.check_all_configs("test_init_sys_add", config, api=API_PYTHON)
 
@@ -964,6 +991,7 @@
                 'print(json.dumps(_testinternalcapi.get_configs()))')
         config = {
             'argv': ['-c', 'arg2'],
+            '_orig_argv': ['python3', '-c', code, 'arg2'],
             'program_name': './python3',
             'run_command': code + '\n',
             'parse_argv': 1,
@@ -975,6 +1003,9 @@
                 'print(json.dumps(_testinternalcapi.get_configs()))')
         config = {
             'argv': ['-c', 'arg2'],
+            '_orig_argv': ['python3',
+                           '-c', code,
+                           'arg2'],
             'program_name': './python3',
             'run_command': code + '\n',
             'parse_argv': 1,
@@ -988,6 +1019,7 @@
         config = {
             'parse_argv': 1,
             'argv': ['-c', 'arg1', '-v', 'arg3'],
+            '_orig_argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
             'program_name': './argv0',
             'run_command': 'pass\n',
             'use_environment': 0,
@@ -1001,6 +1033,7 @@
         config = {
             'parse_argv': 0,
             'argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
+            '_orig_argv': ['./argv0', '-E', '-c', 'pass', 'arg1', '-v', 'arg3'],
             'program_name': './argv0',
         }
         self.check_all_configs("test_init_dont_parse_argv", config, pre_config,
@@ -1073,11 +1106,11 @@
         else:
             ver = sys.version_info
             return [
-                os.path.join(prefix, 'lib',
+                os.path.join(prefix, sys.platlibdir,
                              f'python{ver.major}{ver.minor}.zip'),
-                os.path.join(prefix, 'lib',
+                os.path.join(prefix, sys.platlibdir,
                              f'python{ver.major}.{ver.minor}'),
-                os.path.join(exec_prefix, 'lib',
+                os.path.join(exec_prefix, sys.platlibdir,
                              f'python{ver.major}.{ver.minor}', 'lib-dynload'),
             ]
 
@@ -1194,7 +1227,7 @@
 
             if not MS_WINDOWS:
                 lib_dynload = os.path.join(pyvenv_home,
-                                           'lib',
+                                           sys.platlibdir,
                                            f'python{ver.major}.{ver.minor}',
                                            'lib-dynload')
                 os.makedirs(lib_dynload)
@@ -1304,10 +1337,17 @@
             'faulthandler': 1,
             'bytes_warning': 1,
             'warnoptions': warnoptions,
+            '_orig_argv': ['python3',
+                           '-Wignore:::cmdline1',
+                           '-Wignore:::cmdline2'],
         }
         self.check_all_configs("test_init_warnoptions", config, preconfig,
                                api=API_PYTHON)
 
+    def test_get_argc_argv(self):
+        self.run_embedded_interpreter("test_get_argc_argv")
+        # ignore output
+
 
 class AuditingTests(EmbeddingTestsMixin, unittest.TestCase):
     def test_open_code_hook(self):
@@ -1320,36 +1360,44 @@
         self.run_embedded_interpreter("test_audit_subinterpreter")
 
     def test_audit_run_command(self):
-        self.run_embedded_interpreter("test_audit_run_command", timeout=3, returncode=1)
+        self.run_embedded_interpreter("test_audit_run_command",
+                                      timeout=support.SHORT_TIMEOUT,
+                                      returncode=1)
 
     def test_audit_run_file(self):
-        self.run_embedded_interpreter("test_audit_run_file", timeout=3, returncode=1)
+        self.run_embedded_interpreter("test_audit_run_file",
+                                      timeout=support.SHORT_TIMEOUT,
+                                      returncode=1)
 
     def test_audit_run_interactivehook(self):
-        startup = os.path.join(self.oldcwd, support.TESTFN) + (support.FS_NONASCII or '') + ".py"
+        startup = os.path.join(self.oldcwd, support.TESTFN) + ".py"
         with open(startup, "w", encoding="utf-8") as f:
             print("import sys", file=f)
             print("sys.__interactivehook__ = lambda: None", file=f)
         try:
             env = {**remove_python_envvars(), "PYTHONSTARTUP": startup}
-            self.run_embedded_interpreter("test_audit_run_interactivehook", timeout=5,
+            self.run_embedded_interpreter("test_audit_run_interactivehook",
+                                          timeout=support.SHORT_TIMEOUT,
                                           returncode=10, env=env)
         finally:
             os.unlink(startup)
 
     def test_audit_run_startup(self):
-        startup = os.path.join(self.oldcwd, support.TESTFN) + (support.FS_NONASCII or '') + ".py"
+        startup = os.path.join(self.oldcwd, support.TESTFN) + ".py"
         with open(startup, "w", encoding="utf-8") as f:
             print("pass", file=f)
         try:
             env = {**remove_python_envvars(), "PYTHONSTARTUP": startup}
-            self.run_embedded_interpreter("test_audit_run_startup", timeout=5,
+            self.run_embedded_interpreter("test_audit_run_startup",
+                                          timeout=support.SHORT_TIMEOUT,
                                           returncode=10, env=env)
         finally:
             os.unlink(startup)
 
     def test_audit_run_stdin(self):
-        self.run_embedded_interpreter("test_audit_run_stdin", timeout=3, returncode=1)
+        self.run_embedded_interpreter("test_audit_run_stdin",
+                                      timeout=support.SHORT_TIMEOUT,
+                                      returncode=1)
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index a2a3c56..0e6b1b1 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -9,6 +9,7 @@
 from io import StringIO
 from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
 from test import support
+from test.support import ALWAYS_EQ
 from datetime import timedelta
 
 
@@ -445,12 +446,63 @@
         self.assertEqual('{:<20}'.format(Season.SPRING),
                          '{:<20}'.format(str(Season.SPRING)))
 
-    def test_format_enum_custom(self):
+    def test_str_override_enum(self):
+        class EnumWithStrOverrides(Enum):
+            one = auto()
+            two = auto()
+
+            def __str__(self):
+                return 'Str!'
+        self.assertEqual(str(EnumWithStrOverrides.one), 'Str!')
+        self.assertEqual('{}'.format(EnumWithStrOverrides.one), 'Str!')
+
+    def test_format_override_enum(self):
+        class EnumWithFormatOverride(Enum):
+            one = 1.0
+            two = 2.0
+            def __format__(self, spec):
+                return 'Format!!'
+        self.assertEqual(str(EnumWithFormatOverride.one), 'EnumWithFormatOverride.one')
+        self.assertEqual('{}'.format(EnumWithFormatOverride.one), 'Format!!')
+
+    def test_str_and_format_override_enum(self):
+        class EnumWithStrFormatOverrides(Enum):
+            one = auto()
+            two = auto()
+            def __str__(self):
+                return 'Str!'
+            def __format__(self, spec):
+                return 'Format!'
+        self.assertEqual(str(EnumWithStrFormatOverrides.one), 'Str!')
+        self.assertEqual('{}'.format(EnumWithStrFormatOverrides.one), 'Format!')
+
+    def test_str_override_mixin(self):
+        class MixinEnumWithStrOverride(float, Enum):
+            one = 1.0
+            two = 2.0
+            def __str__(self):
+                return 'Overridden!'
+        self.assertEqual(str(MixinEnumWithStrOverride.one), 'Overridden!')
+        self.assertEqual('{}'.format(MixinEnumWithStrOverride.one), 'Overridden!')
+
+    def test_str_and_format_override_mixin(self):
+        class MixinWithStrFormatOverrides(float, Enum):
+            one = 1.0
+            two = 2.0
+            def __str__(self):
+                return 'Str!'
+            def __format__(self, spec):
+                return 'Format!'
+        self.assertEqual(str(MixinWithStrFormatOverrides.one), 'Str!')
+        self.assertEqual('{}'.format(MixinWithStrFormatOverrides.one), 'Format!')
+
+    def test_format_override_mixin(self):
         class TestFloat(float, Enum):
             one = 1.0
             two = 2.0
             def __format__(self, spec):
                 return 'TestFloat success!'
+        self.assertEqual(str(TestFloat.one), 'TestFloat.one')
         self.assertEqual('{}'.format(TestFloat.one), 'TestFloat success!')
 
     def assertFormatIsValue(self, spec, member):
@@ -500,6 +552,56 @@
         self.assertFormatIsValue('{:>20}', Directional.WEST)
         self.assertFormatIsValue('{:<20}', Directional.WEST)
 
+    def test_object_str_override(self):
+        class Colors(Enum):
+            RED, GREEN, BLUE = 1, 2, 3
+            def __repr__(self):
+                return "test.%s" % (self._name_, )
+            __str__ = object.__str__
+        self.assertEqual(str(Colors.RED), 'test.RED')
+
+    def test_enum_str_override(self):
+        class MyStrEnum(Enum):
+            def __str__(self):
+                return 'MyStr'
+        class MyMethodEnum(Enum):
+            def hello(self):
+                return 'Hello!  My name is %s' % self.name
+        class Test1Enum(MyMethodEnum, int, MyStrEnum):
+            One = 1
+            Two = 2
+        self.assertEqual(str(Test1Enum.One), 'MyStr')
+        #
+        class Test2Enum(MyStrEnum, MyMethodEnum):
+            One = 1
+            Two = 2
+        self.assertEqual(str(Test2Enum.One), 'MyStr')
+
+    def test_inherited_data_type(self):
+        class HexInt(int):
+            def __repr__(self):
+                return hex(self)
+        class MyEnum(HexInt, enum.Enum):
+            A = 1
+            B = 2
+            C = 3
+        self.assertEqual(repr(MyEnum.A), '<MyEnum.A: 0x1>')
+
+    def test_too_many_data_types(self):
+        with self.assertRaisesRegex(TypeError, 'too many data types'):
+            class Huh(str, int, Enum):
+                One = 1
+
+        class MyStr(str):
+            def hello(self):
+                return 'hello, %s' % self
+        class MyInt(int):
+            def repr(self):
+                return hex(self)
+        with self.assertRaisesRegex(TypeError, 'too many data types'):
+            class Huh(MyStr, MyInt, Enum):
+                One = 1
+
     def test_hash(self):
         Season = self.Season
         dates = {}
@@ -899,6 +1001,9 @@
                 cyan = 4
                 magenta = 5
                 yellow = 6
+        with self.assertRaisesRegex(TypeError, "EvenMoreColor: cannot extend enumeration 'Color'"):
+            class EvenMoreColor(Color, IntEnum):
+                chartruese = 7
 
     def test_exclude_methods(self):
         class whatever(Enum):
@@ -1458,13 +1563,10 @@
         self.assertEqual(list(map(int, Color)), [1, 2, 3])
 
     def test_equality(self):
-        class AlwaysEqual:
-            def __eq__(self, other):
-                return True
         class OrdinaryEnum(Enum):
             a = 1
-        self.assertEqual(AlwaysEqual(), OrdinaryEnum.a)
-        self.assertEqual(OrdinaryEnum.a, AlwaysEqual())
+        self.assertEqual(ALWAYS_EQ, OrdinaryEnum.a)
+        self.assertEqual(OrdinaryEnum.a, ALWAYS_EQ)
 
     def test_ordered_mixin(self):
         class OrderedEnum(Enum):
@@ -1711,6 +1813,17 @@
                 def _generate_next_value_(name, start, count, last):
                     return name
 
+    def test_auto_order_wierd(self):
+        weird_auto = auto()
+        weird_auto.value = 'pathological case'
+        class Color(Enum):
+            red = weird_auto
+            def _generate_next_value_(name, start, count, last):
+                return name
+            blue = auto()
+        self.assertEqual(list(Color), [Color.red, Color.blue])
+        self.assertEqual(Color.red.value, 'pathological case')
+        self.assertEqual(Color.blue.value, 'blue')
 
     def test_duplicate_auto(self):
         class Dupes(Enum):
@@ -1719,6 +1832,18 @@
             third = auto()
         self.assertEqual([Dupes.first, Dupes.second, Dupes.third], list(Dupes))
 
+    def test_default_missing(self):
+        class Color(Enum):
+            RED = 1
+            GREEN = 2
+            BLUE = 3
+        try:
+            Color(7)
+        except ValueError as exc:
+            self.assertTrue(exc.__context__ is None)
+        else:
+            raise Exception('Exception not raised.')
+
     def test_missing(self):
         class Color(Enum):
             red = 1
@@ -1737,7 +1862,12 @@
                     # trigger not found
                     return None
         self.assertIs(Color('three'), Color.blue)
-        self.assertRaises(ValueError, Color, 7)
+        try:
+            Color(7)
+        except ValueError as exc:
+            self.assertTrue(exc.__context__ is None)
+        else:
+            raise Exception('Exception not raised.')
         try:
             Color('bad return')
         except TypeError as exc:
@@ -2219,12 +2349,13 @@
             d = 4
             f = 6
         # Bizarre.c | Bizarre.d
-        self.assertRaisesRegex(ValueError, "5 is not a valid Bizarre", Bizarre, 5)
-        self.assertRaisesRegex(ValueError, "5 is not a valid Bizarre", Bizarre, 5)
-        self.assertRaisesRegex(ValueError, "2 is not a valid Bizarre", Bizarre, 2)
-        self.assertRaisesRegex(ValueError, "2 is not a valid Bizarre", Bizarre, 2)
-        self.assertRaisesRegex(ValueError, "1 is not a valid Bizarre", Bizarre, 1)
-        self.assertRaisesRegex(ValueError, "1 is not a valid Bizarre", Bizarre, 1)
+        name = "TestFlag.test_cascading_failure.<locals>.Bizarre"
+        self.assertRaisesRegex(ValueError, "5 is not a valid " + name, Bizarre, 5)
+        self.assertRaisesRegex(ValueError, "5 is not a valid " + name, Bizarre, 5)
+        self.assertRaisesRegex(ValueError, "2 is not a valid " + name, Bizarre, 2)
+        self.assertRaisesRegex(ValueError, "2 is not a valid " + name, Bizarre, 2)
+        self.assertRaisesRegex(ValueError, "1 is not a valid " + name, Bizarre, 1)
+        self.assertRaisesRegex(ValueError, "1 is not a valid " + name, Bizarre, 1)
 
     def test_duplicate_auto(self):
         class Dupes(Enum):
diff --git a/Lib/test/test_eof.py b/Lib/test/test_eof.py
index 9ef8eb1..51cbbd8 100644
--- a/Lib/test/test_eof.py
+++ b/Lib/test/test_eof.py
@@ -26,6 +26,15 @@
         else:
             raise support.TestFailed
 
+    def test_eof_with_line_continuation(self):
+        expect = "unexpected EOF while parsing (<string>, line 1)"
+        try:
+            compile('"\\xhh" \\',  '<string>', 'exec', dont_inherit=True)
+        except SyntaxError as msg:
+            self.assertEqual(str(msg), expect)
+        else:
+            raise support.TestFailed
+
     def test_line_continuation_EOF(self):
         """A continuation at the end of input must be an error; bpo2180."""
         expect = 'unexpected EOF while parsing (<string>, line 1)'
@@ -43,10 +52,14 @@
             file_name = script_helper.make_script(temp_dir, 'foo', '\\')
             rc, out, err = script_helper.assert_python_failure(file_name)
             self.assertIn(b'unexpected EOF while parsing', err)
+            self.assertIn(b'line 2', err)
+            self.assertIn(b'\\', err)
 
             file_name = script_helper.make_script(temp_dir, 'foo', 'y = 6\\')
             rc, out, err = script_helper.assert_python_failure(file_name)
             self.assertIn(b'unexpected EOF while parsing', err)
+            self.assertIn(b'line 2', err)
+            self.assertIn(b'y = 6\\', err)
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_epoll.py b/Lib/test/test_epoll.py
index 8ac0f31..10f148f 100644
--- a/Lib/test/test_epoll.py
+++ b/Lib/test/test_epoll.py
@@ -225,7 +225,10 @@
         self.assertFalse(then - now > 0.01)
 
         server.close()
-        ep.unregister(fd)
+
+        with self.assertRaises(OSError) as cm:
+            ep.unregister(fd)
+        self.assertEqual(cm.exception.errno, errno.EBADF)
 
     def test_close(self):
         open_file = open(__file__, "rb")
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 3a32253..8d125b5 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -1,6 +1,7 @@
 # Python test set -- part 5, built-in exceptions
 
 import copy
+import gc
 import os
 import sys
 import unittest
@@ -33,16 +34,17 @@
 class ExceptionTests(unittest.TestCase):
 
     def raise_catch(self, exc, excname):
-        try:
-            raise exc("spam")
-        except exc as err:
-            buf1 = str(err)
-        try:
-            raise exc("spam")
-        except exc as err:
-            buf2 = str(err)
-        self.assertEqual(buf1, buf2)
-        self.assertEqual(exc.__name__, excname)
+        with self.subTest(exc=exc, excname=excname):
+            try:
+                raise exc("spam")
+            except exc as err:
+                buf1 = str(err)
+            try:
+                raise exc("spam")
+            except exc as err:
+                buf2 = str(err)
+            self.assertEqual(buf1, buf2)
+            self.assertEqual(exc.__name__, excname)
 
     def testRaising(self):
         self.raise_catch(AttributeError, "AttributeError")
@@ -133,13 +135,14 @@
         # these code fragments
 
         def ckmsg(src, msg):
-            try:
-                compile(src, '<fragment>', 'exec')
-            except SyntaxError as e:
-                if e.msg != msg:
-                    self.fail("expected %s, got %s" % (msg, e.msg))
-            else:
-                self.fail("failed to get expected SyntaxError")
+            with self.subTest(src=src, msg=msg):
+                try:
+                    compile(src, '<fragment>', 'exec')
+                except SyntaxError as e:
+                    if e.msg != msg:
+                        self.fail("expected %s, got %s" % (msg, e.msg))
+                else:
+                    self.fail("failed to get expected SyntaxError")
 
         s = '''if 1:
         try:
@@ -178,8 +181,8 @@
         s = '''if True:\n        print()\n\texec "mixed tabs and spaces"'''
         ckmsg(s, "inconsistent use of tabs and spaces in indentation", TabError)
 
-    def testSyntaxErrorOffset(self):
-        def check(src, lineno, offset, encoding='utf-8'):
+    def check(self, src, lineno, offset, encoding='utf-8'):
+        with self.subTest(source=src, lineno=lineno, offset=offset):
             with self.assertRaises(SyntaxError) as cm:
                 compile(src, '<fragment>', 'exec')
             self.assertEqual(cm.exception.lineno, lineno)
@@ -188,8 +191,10 @@
                 if not isinstance(src, str):
                     src = src.decode(encoding, 'replace')
                 line = src.split('\n')[lineno-1]
-                self.assertEqual(cm.exception.text.rstrip('\n'), line)
+                self.assertIn(line, cm.exception.text)
 
+    def testSyntaxErrorOffset(self):
+        check = self.check
         check('def fact(x):\n\treturn x!\n', 2, 10)
         check('1 +\n', 1, 4)
         check('def spam():\n  print(1)\n print(2)', 3, 10)
@@ -200,6 +205,7 @@
         check(b'Python = "\xcf\xb3\xf2\xee\xed" +', 1, 18)
         check('x = "a', 1, 7)
         check('lambda x: x = 2', 1, 1)
+        check('f{a + b + c}', 1, 2)
 
         # Errors thrown by compile.c
         check('class foo:return 1', 1, 11)
@@ -217,6 +223,18 @@
         check(b'\xce\xb1 = 0xI', 1, 6)
         check(b'# -*- coding: iso8859-7 -*-\n\xe1 = 0xI', 2, 6,
               encoding='iso8859-7')
+        check(b"""if 1:
+            def foo():
+                '''
+
+            def bar():
+                pass
+
+            def baz():
+                '''quux'''
+            """, 9, 20)
+        check("pass\npass\npass\n(1+)\npass\npass\npass", 4, 4)
+        check("(1+)", 1, 4)
 
         # Errors thrown by symtable.c
         check('x = [(yield i) for i in range(3)]', 1, 5)
@@ -227,20 +245,17 @@
         check('nonlocal x', 1, 1)
         check('def f():\n  global x\n  nonlocal x', 2, 3)
 
-        # Errors thrown by ast.c
-        check('for 1 in []: pass', 1, 5)
-        check('def f(*):\n  pass', 1, 7)
-        check('[*x for x in xs]', 1, 2)
-        check('def f():\n  x, y: int', 2, 3)
-        check('(yield i) = 2', 1, 1)
-        check('foo(x for x in range(10), 100)', 1, 5)
-        check('foo(1=2)', 1, 5)
-
         # Errors thrown by future.c
         check('from __future__ import doesnt_exist', 1, 1)
         check('from __future__ import braces', 1, 1)
         check('x=1\nfrom __future__ import division', 2, 1)
-
+        check('foo(1=2)', 1, 5)
+        check('def f():\n  x, y: int', 2, 3)
+        check('[*x for x in xs]', 1, 2)
+        check('foo(x for x in range(10), 100)', 1, 5)
+        check('(yield i) = 2', 1, 1 if support.use_old_parser() else 2)
+        check('def f(*):\n  pass', 1, 7 if support.use_old_parser() else 8)
+        check('for 1 in []: pass', 1, 5)
 
     @cpython_only
     def testSettingException(self):
@@ -994,7 +1009,7 @@
         # finalization of these locals.
         code = """if 1:
             import sys
-            from _testcapi import get_recursion_depth
+            from _testinternalcapi import get_recursion_depth
 
             class MyException(Exception): pass
 
@@ -1078,8 +1093,9 @@
         """
         with SuppressCrashReport():
             rc, out, err = script_helper.assert_python_failure("-c", code)
-            self.assertIn(b'Fatal Python error: Cannot recover from '
-                          b'MemoryErrors while normalizing exceptions.', err)
+            self.assertIn(b'Fatal Python error: _PyErr_NormalizeException: '
+                          b'Cannot recover from MemoryErrors while '
+                          b'normalizing exceptions.', err)
 
     @cpython_only
     def test_MemoryError(self):
@@ -1297,6 +1313,52 @@
                 next(i)
                 next(i)
 
+    @unittest.skipUnless(__debug__, "Won't work if __debug__ is False")
+    def test_assert_shadowing(self):
+        # Shadowing AssertionError would cause the assert statement to
+        # misbehave.
+        global AssertionError
+        AssertionError = TypeError
+        try:
+            assert False, 'hello'
+        except BaseException as e:
+            del AssertionError
+            self.assertIsInstance(e, AssertionError)
+            self.assertEqual(str(e), 'hello')
+        else:
+            del AssertionError
+            self.fail('Expected exception')
+
+    def test_memory_error_subclasses(self):
+        # bpo-41654: MemoryError instances use a freelist of objects that are
+        # linked using the 'dict' attribute when they are inactive/dead.
+        # Subclasses of MemoryError should not participate in the freelist
+        # schema. This test creates a MemoryError object and keeps it alive
+        # (therefore advancing the freelist) and then it creates and destroys a
+        # subclass object. Finally, it checks that creating a new MemoryError
+        # succeeds, proving that the freelist is not corrupted.
+
+        class TestException(MemoryError):
+            pass
+
+        try:
+            raise MemoryError
+        except MemoryError as exc:
+            inst = exc
+
+        try:
+            raise TestException
+        except Exception:
+            pass
+
+        for _ in range(10):
+            try:
+                raise MemoryError
+            except MemoryError as exc:
+                pass
+
+            gc_collect()
+
 
 class ImportErrorTests(unittest.TestCase):
 
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index 3cac3bd..4205ca8 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -52,15 +52,15 @@
     >>> f(1, 2, **{'a': -1, 'b': 5}, **{'a': 4, 'c': 6})
     Traceback (most recent call last):
         ...
-    TypeError: f() got multiple values for keyword argument 'a'
+    TypeError: test.test_extcall.f() got multiple values for keyword argument 'a'
     >>> f(1, 2, **{'a': -1, 'b': 5}, a=4, c=6)
     Traceback (most recent call last):
         ...
-    TypeError: f() got multiple values for keyword argument 'a'
+    TypeError: test.test_extcall.f() got multiple values for keyword argument 'a'
     >>> f(1, 2, a=3, **{'a': 4}, **{'a': 5})
     Traceback (most recent call last):
         ...
-    TypeError: f() got multiple values for keyword argument 'a'
+    TypeError: test.test_extcall.f() got multiple values for keyword argument 'a'
     >>> f(1, 2, 3, *[4, 5], **{'a':6, 'b':7})
     (1, 2, 3, 4, 5) {'a': 6, 'b': 7}
     >>> f(1, 2, 3, x=4, y=5, *(6, 7), **{'a':8, 'b': 9})
@@ -79,6 +79,24 @@
     >>> f(1, 2, 3, *(4, 5), x=6, y=7, **UserDict(a=8, b=9))
     (1, 2, 3, 4, 5) {'a': 8, 'b': 9, 'x': 6, 'y': 7}
 
+Mix keyword arguments and dict unpacking
+
+    >>> d1 = {'a':1}
+
+    >>> d2 = {'c':3}
+
+    >>> f(b=2, **d1, **d2)
+    () {'a': 1, 'b': 2, 'c': 3}
+
+    >>> f(**d1, b=2, **d2)
+    () {'a': 1, 'b': 2, 'c': 3}
+
+    >>> f(**d1, **d2, b=2)
+    () {'a': 1, 'b': 2, 'c': 3}
+
+    >>> f(**d1, b=2, **d2, d=4)
+    () {'a': 1, 'b': 2, 'c': 3, 'd': 4}
+
 Examples with invalid arguments (TypeErrors). We're also testing the function
 names in the exception messages.
 
@@ -118,7 +136,7 @@
     >>> g(*Nothing())
     Traceback (most recent call last):
       ...
-    TypeError: g() argument after * must be an iterable, not Nothing
+    TypeError: test.test_extcall.g() argument after * must be an iterable, not Nothing
 
     >>> class Nothing:
     ...     def __len__(self): return 5
@@ -127,7 +145,7 @@
     >>> g(*Nothing())
     Traceback (most recent call last):
       ...
-    TypeError: g() argument after * must be an iterable, not Nothing
+    TypeError: test.test_extcall.g() argument after * must be an iterable, not Nothing
 
     >>> class Nothing():
     ...     def __len__(self): return 5
@@ -237,7 +255,7 @@
     >>> f(**{1:2})
     Traceback (most recent call last):
       ...
-    TypeError: f() keywords must be strings
+    TypeError: keywords must be strings
 
     >>> h(**{'e': 2})
     Traceback (most recent call last):
@@ -247,17 +265,17 @@
     >>> h(*h)
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after * must be an iterable, not function
+    TypeError: test.test_extcall.h() argument after * must be an iterable, not function
 
     >>> h(1, *h)
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after * must be an iterable, not function
+    TypeError: Value after * must be an iterable, not function
 
     >>> h(*[1], *h)
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after * must be an iterable, not function
+    TypeError: Value after * must be an iterable, not function
 
     >>> dir(*h)
     Traceback (most recent call last):
@@ -268,38 +286,38 @@
     >>> nothing(*h)
     Traceback (most recent call last):
       ...
-    TypeError: NoneType object argument after * must be an iterable, \
+    TypeError: None argument after * must be an iterable, \
 not function
 
     >>> h(**h)
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after ** must be a mapping, not function
+    TypeError: test.test_extcall.h() argument after ** must be a mapping, not function
 
     >>> h(**[])
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after ** must be a mapping, not list
+    TypeError: test.test_extcall.h() argument after ** must be a mapping, not list
 
     >>> h(a=1, **h)
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after ** must be a mapping, not function
+    TypeError: test.test_extcall.h() argument after ** must be a mapping, not function
 
     >>> h(a=1, **[])
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after ** must be a mapping, not list
+    TypeError: test.test_extcall.h() argument after ** must be a mapping, not list
 
     >>> h(**{'a': 1}, **h)
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after ** must be a mapping, not function
+    TypeError: test.test_extcall.h() argument after ** must be a mapping, not function
 
     >>> h(**{'a': 1}, **[])
     Traceback (most recent call last):
       ...
-    TypeError: h() argument after ** must be a mapping, not list
+    TypeError: test.test_extcall.h() argument after ** must be a mapping, not list
 
     >>> dir(**h)
     Traceback (most recent call last):
@@ -309,7 +327,7 @@
     >>> nothing(**h)
     Traceback (most recent call last):
       ...
-    TypeError: NoneType object argument after ** must be a mapping, \
+    TypeError: None argument after ** must be a mapping, \
 not function
 
     >>> dir(b=1, **{'b': 1})
@@ -351,17 +369,17 @@
     >>> g(**MultiDict([('x', 1), ('x', 2)]))
     Traceback (most recent call last):
       ...
-    TypeError: g() got multiple values for keyword argument 'x'
+    TypeError: test.test_extcall.g() got multiple values for keyword argument 'x'
 
     >>> g(a=3, **MultiDict([('x', 1), ('x', 2)]))
     Traceback (most recent call last):
       ...
-    TypeError: g() got multiple values for keyword argument 'x'
+    TypeError: test.test_extcall.g() got multiple values for keyword argument 'x'
 
     >>> g(**MultiDict([('a', 3)]), **MultiDict([('x', 1), ('x', 2)]))
     Traceback (most recent call last):
       ...
-    TypeError: g() got multiple values for keyword argument 'x'
+    TypeError: test.test_extcall.g() got multiple values for keyword argument 'x'
 
 Another helper function
 
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index d875103..c64afe8 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -71,9 +71,8 @@
         with support.SuppressCrashReport():
             process = script_helper.spawn_python('-c', code, pass_fds=pass_fds)
             with process:
-                stdout, stderr = process.communicate()
+                output, stderr = process.communicate()
                 exitcode = process.wait()
-        output = support.strip_python_stderr(stdout)
         output = output.decode('ascii', 'backslashreplace')
         if filename:
             self.assertEqual(output, '')
@@ -124,7 +123,9 @@
         self.assertRegex(output, regex)
         self.assertNotEqual(exitcode, 0)
 
-    def check_fatal_error(self, code, line_number, name_regex, **kw):
+    def check_fatal_error(self, code, line_number, name_regex, func=None, **kw):
+        if func:
+            name_regex = '%s: %s' % (func, name_regex)
         fatal_error = 'Fatal Python error: %s' % name_regex
         self.check_error(code, line_number, fatal_error, **kw)
 
@@ -174,6 +175,7 @@
             3,
             'in new thread',
             know_current_thread=False,
+            func='faulthandler_fatal_error_thread',
             py_fatal_error=True)
 
     def test_sigabrt(self):
@@ -231,6 +233,7 @@
             """,
             2,
             'xyz',
+            func='faulthandler_fatal_error_py',
             py_fatal_error=True)
 
     def test_fatal_error_without_gil(self):
@@ -240,6 +243,7 @@
             """,
             2,
             'xyz',
+            func='faulthandler_fatal_error_py',
             py_fatal_error=True)
 
     @unittest.skipIf(sys.platform.startswith('openbsd'),
@@ -535,8 +539,6 @@
         with temporary_filename() as filename:
             self.check_dump_traceback_threads(filename)
 
-    @unittest.skipIf(not hasattr(faulthandler, 'dump_traceback_later'),
-                     'need faulthandler.dump_traceback_later()')
     def check_dump_traceback_later(self, repeat=False, cancel=False, loops=1,
                                    *, filename=None, fd=None):
         """
@@ -744,9 +746,8 @@
             faulthandler.enable()
         with self.check_stderr_none():
             faulthandler.dump_traceback()
-        if hasattr(faulthandler, 'dump_traceback_later'):
-            with self.check_stderr_none():
-                faulthandler.dump_traceback_later(1e-3)
+        with self.check_stderr_none():
+            faulthandler.dump_traceback_later(1e-3)
         if hasattr(faulthandler, "register"):
             with self.check_stderr_none():
                 faulthandler.register(signal.SIGUSR1)
@@ -823,6 +824,17 @@
         self.assertEqual(output, [])
         self.assertEqual(exitcode, 0xC0000005)
 
+    def test_cancel_later_without_dump_traceback_later(self):
+        # bpo-37933: Calling cancel_dump_traceback_later()
+        # without dump_traceback_later() must not segfault.
+        code = dedent("""
+            import faulthandler
+            faulthandler.cancel_dump_traceback_later()
+        """)
+        output, exitcode = self.get_output(code)
+        self.assertEqual(output, [])
+        self.assertEqual(exitcode, 0)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_fcntl.py b/Lib/test/test_fcntl.py
index c394f69..9ab68c6 100644
--- a/Lib/test/test_fcntl.py
+++ b/Lib/test/test_fcntl.py
@@ -181,6 +181,12 @@
         self.assertRaises(OverflowError, fcntl.flock, _testcapi.INT_MAX+1,
                           fcntl.LOCK_SH)
 
+    @unittest.skipIf(sys.platform != 'darwin', "F_GETPATH is only available on macos")
+    def test_fcntl_f_getpath(self):
+        self.f = open(TESTFN, 'wb')
+        expected = os.path.abspath(TESTFN).encode('utf-8')
+        res = fcntl.fcntl(self.f.fileno(), fcntl.F_GETPATH, bytes(len(expected)))
+        self.assertEqual(expected, res)
 
 def test_main():
     run_unittest(TestFcntl)
diff --git a/Lib/test/test_finalization.py b/Lib/test/test_finalization.py
index 35d7913..1d13443 100644
--- a/Lib/test/test_finalization.py
+++ b/Lib/test/test_finalization.py
@@ -16,6 +16,15 @@
                 raise TypeError('requires _testcapi.with_tp_del')
         return C
 
+try:
+    from _testcapi import without_gc
+except ImportError:
+    def without_gc(cls):
+        class C:
+            def __new__(cls, *args, **kwargs):
+                raise TypeError('requires _testcapi.without_gc')
+        return C
+
 from test import support
 
 
@@ -94,9 +103,11 @@
         assert self.id_ == id(self)
 
 
+@without_gc
 class NonGC(NonGCSimpleBase):
     __slots__ = ()
 
+@without_gc
 class NonGCResurrector(NonGCSimpleBase):
     __slots__ = ()
 
@@ -109,8 +120,14 @@
 class Simple(SimpleBase):
     pass
 
-class SimpleResurrector(NonGCResurrector, SimpleBase):
-    pass
+# Can't inherit from NonGCResurrector, in case importing without_gc fails.
+class SimpleResurrector(SimpleBase):
+
+    def side_effect(self):
+        """
+        Resurrect self by storing self in a class-wide list.
+        """
+        self.survivors.append(self)
 
 
 class TestBase:
@@ -178,6 +195,7 @@
             self.assert_survivors([])
         self.assertIs(wr(), None)
 
+    @support.cpython_only
     def test_non_gc(self):
         with SimpleBase.test():
             s = NonGC()
@@ -191,6 +209,7 @@
             self.assert_del_calls(ids)
             self.assert_survivors([])
 
+    @support.cpython_only
     def test_non_gc_resurrect(self):
         with SimpleBase.test():
             s = NonGCResurrector()
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index b656582..9651281 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -312,6 +312,34 @@
         # distinguishes -0.0 and 0.0.
         self.assertEqual((a, copysign(1.0, a)), (b, copysign(1.0, b)))
 
+    def test_float_floor(self):
+        self.assertIsInstance(float(0.5).__floor__(), int)
+        self.assertEqual(float(0.5).__floor__(), 0)
+        self.assertEqual(float(1.0).__floor__(), 1)
+        self.assertEqual(float(1.5).__floor__(), 1)
+        self.assertEqual(float(-0.5).__floor__(), -1)
+        self.assertEqual(float(-1.0).__floor__(), -1)
+        self.assertEqual(float(-1.5).__floor__(), -2)
+        self.assertEqual(float(1.23e167).__floor__(), 1.23e167)
+        self.assertEqual(float(-1.23e167).__floor__(), -1.23e167)
+        self.assertRaises(ValueError, float("nan").__floor__)
+        self.assertRaises(OverflowError, float("inf").__floor__)
+        self.assertRaises(OverflowError, float("-inf").__floor__)
+
+    def test_float_ceil(self):
+        self.assertIsInstance(float(0.5).__ceil__(), int)
+        self.assertEqual(float(0.5).__ceil__(), 1)
+        self.assertEqual(float(1.0).__ceil__(), 1)
+        self.assertEqual(float(1.5).__ceil__(), 2)
+        self.assertEqual(float(-0.5).__ceil__(), 0)
+        self.assertEqual(float(-1.0).__ceil__(), -1)
+        self.assertEqual(float(-1.5).__ceil__(), -1)
+        self.assertEqual(float(1.23e167).__ceil__(), 1.23e167)
+        self.assertEqual(float(-1.23e167).__ceil__(), -1.23e167)
+        self.assertRaises(ValueError, float("nan").__ceil__)
+        self.assertRaises(OverflowError, float("inf").__ceil__)
+        self.assertRaises(OverflowError, float("-inf").__ceil__)
+
     @support.requires_IEEE_754
     def test_float_mod(self):
         # Check behaviour of % operator for IEEE 754 special cases.
diff --git a/Lib/test/test_flufl.py b/Lib/test/test_flufl.py
index 33e52e6..2228585 100644
--- a/Lib/test/test_flufl.py
+++ b/Lib/test/test_flufl.py
@@ -1,5 +1,7 @@
 import __future__
 import unittest
+from test import support
+
 
 class FLUFLTests(unittest.TestCase):
 
@@ -12,10 +14,13 @@
                     __future__.CO_FUTURE_BARRY_AS_BDFL)
         self.assertRegex(str(cm.exception),
                          "with Barry as BDFL, use '<>' instead of '!='")
-        self.assertEqual(cm.exception.text, '2 != 3\n')
+        self.assertIn('2 != 3', cm.exception.text)
         self.assertEqual(cm.exception.filename, '<FLUFL test>')
-        self.assertEqual(cm.exception.lineno, 2)
-        self.assertEqual(cm.exception.offset, 4)
+
+        self.assertTrue(cm.exception.lineno, 2)
+        # The old parser reports the end of the token and the new
+        # parser reports the start of the token
+        self.assertEqual(cm.exception.offset, 4 if support.use_old_parser() else 3)
 
     def test_guido_as_bdfl(self):
         code = '2 {0} 3'
@@ -23,10 +28,12 @@
         with self.assertRaises(SyntaxError) as cm:
             compile(code.format('<>'), '<FLUFL test>', 'exec')
         self.assertRegex(str(cm.exception), "invalid syntax")
-        self.assertEqual(cm.exception.text, '2 <> 3\n')
+        self.assertIn('2 <> 3', cm.exception.text)
         self.assertEqual(cm.exception.filename, '<FLUFL test>')
         self.assertEqual(cm.exception.lineno, 1)
-        self.assertEqual(cm.exception.offset, 4)
+        # The old parser reports the end of the token and the new
+        # parser reports the start of the token
+        self.assertEqual(cm.exception.offset, 4 if support.use_old_parser() else 3)
 
 
 if __name__ == '__main__':
diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py
index 55f9f0d..10668e4 100644
--- a/Lib/test/test_fnmatch.py
+++ b/Lib/test/test_fnmatch.py
@@ -45,6 +45,13 @@
         check('\nfoo', 'foo*', False)
         check('\n', '*')
 
+    def test_slow_fnmatch(self):
+        check = self.check_match
+        check('a' * 50, '*a*a*a*a*a*a*a*a*a*a')
+        # The next "takes forever" if the regexp translation is
+        # straightforward.  See bpo-40480.
+        check('a' * 50 + 'b', '*a*a*a*a*a*a*a*a*a*a', False)
+
     def test_mix_bytes_str(self):
         self.assertRaises(TypeError, fnmatch, 'test', b'*')
         self.assertRaises(TypeError, fnmatch, b'test', '*')
@@ -99,6 +106,7 @@
 class TranslateTestCase(unittest.TestCase):
 
     def test_translate(self):
+        import re
         self.assertEqual(translate('*'), r'(?s:.*)\Z')
         self.assertEqual(translate('?'), r'(?s:.)\Z')
         self.assertEqual(translate('a?b*'), r'(?s:a.b.*)\Z')
@@ -107,7 +115,34 @@
         self.assertEqual(translate('[!x]'), r'(?s:[^x])\Z')
         self.assertEqual(translate('[^x]'), r'(?s:[\^x])\Z')
         self.assertEqual(translate('[x'), r'(?s:\[x)\Z')
-
+        # from the docs
+        self.assertEqual(translate('*.txt'), r'(?s:.*\.txt)\Z')
+        # squash consecutive stars
+        self.assertEqual(translate('*********'), r'(?s:.*)\Z')
+        self.assertEqual(translate('A*********'), r'(?s:A.*)\Z')
+        self.assertEqual(translate('*********A'), r'(?s:.*A)\Z')
+        self.assertEqual(translate('A*********?[?]?'), r'(?s:A.*.[?].)\Z')
+        # fancy translation to prevent exponential-time match failure
+        t = translate('**a*a****a')
+        digits = re.findall(r'\d+', t)
+        self.assertEqual(len(digits), 4)
+        self.assertEqual(digits[0], digits[1])
+        self.assertEqual(digits[2], digits[3])
+        g1 = f"g{digits[0]}"  # e.g., group name "g4"
+        g2 = f"g{digits[2]}"  # e.g., group name "g5"
+        self.assertEqual(t,
+         fr'(?s:(?=(?P<{g1}>.*?a))(?P={g1})(?=(?P<{g2}>.*?a))(?P={g2}).*a)\Z')
+        # and try pasting multiple translate results - it's an undocumented
+        # feature that this works; all the pain of generating unique group
+        # names across calls exists to support this
+        r1 = translate('**a**a**a*')
+        r2 = translate('**b**b**b*')
+        r3 = translate('*c*c*c*')
+        fatre = "|".join([r1, r2, r3])
+        self.assertTrue(re.match(fatre, 'abaccad'))
+        self.assertTrue(re.match(fatre, 'abxbcab'))
+        self.assertTrue(re.match(fatre, 'cbabcaxc'))
+        self.assertFalse(re.match(fatre, 'dabccbad'))
 
 class FilterTestCase(unittest.TestCase):
 
diff --git a/Lib/test/test_fork1.py b/Lib/test/test_fork1.py
index 2ab856f..a2f7cfe 100644
--- a/Lib/test/test_fork1.py
+++ b/Lib/test/test_fork1.py
@@ -10,26 +10,13 @@
 import unittest
 
 from test.fork_wait import ForkWait
-from test.support import reap_children, get_attribute, verbose
+from test import support
 
 
 # Skip test if fork does not exist.
-get_attribute(os, 'fork')
+support.get_attribute(os, 'fork')
 
 class ForkTest(ForkWait):
-    def wait_impl(self, cpid):
-        deadline = time.monotonic() + 10.0
-        while time.monotonic() <= deadline:
-            # waitpid() shouldn't hang, but some of the buildbots seem to hang
-            # in the forking tests.  This is an attempt to fix the problem.
-            spid, status = os.waitpid(cpid, os.WNOHANG)
-            if spid == cpid:
-                break
-            time.sleep(0.1)
-
-        self.assertEqual(spid, cpid)
-        self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
-
     def test_threaded_import_lock_fork(self):
         """Check fork() in main thread works while a subthread is doing an import"""
         import_started = threading.Event()
@@ -46,6 +33,7 @@
         t = threading.Thread(target=importer)
         t.start()
         import_started.wait()
+        exitcode = 42
         pid = os.fork()
         try:
             # PyOS_BeforeFork should have waited for the import to complete
@@ -54,9 +42,9 @@
             if not pid:
                 m = __import__(fake_module_name)
                 if m == complete_module:
-                    os._exit(0)
+                    os._exit(exitcode)
                 else:
-                    if verbose > 1:
+                    if support.verbose > 1:
                         print("Child encountered partial module")
                     os._exit(1)
             else:
@@ -64,7 +52,7 @@
                 # Exitcode 1 means the child got a partial module (bad.) No
                 # exitcode (but a hang, which manifests as 'got pid 0')
                 # means the child deadlocked (also bad.)
-                self.wait_impl(pid)
+                self.wait_impl(pid, exitcode=exitcode)
         finally:
             try:
                 os.kill(pid, signal.SIGKILL)
@@ -74,6 +62,7 @@
 
     def test_nested_import_lock_fork(self):
         """Check fork() in main thread works while the main thread is doing an import"""
+        exitcode = 42
         # Issue 9573: this used to trigger RuntimeError in the child process
         def fork_with_import_lock(level):
             release = 0
@@ -90,13 +79,13 @@
                         imp.release_lock()
             except RuntimeError:
                 if in_child:
-                    if verbose > 1:
+                    if support.verbose > 1:
                         print("RuntimeError in child")
                     os._exit(1)
                 raise
             if in_child:
-                os._exit(0)
-            self.wait_impl(pid)
+                os._exit(exitcode)
+            self.wait_impl(pid, exitcode=exitcode)
 
         # Check this works with various levels of nested
         # import in the main thread
@@ -105,7 +94,7 @@
 
 
 def tearDownModule():
-    reap_children()
+    support.reap_children()
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index 4559cd5..9653e46 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -1,6 +1,7 @@
 from test.support import verbose, TestFailed
 import locale
 import sys
+import re
 import test.support as support
 import unittest
 
@@ -427,13 +428,16 @@
             localeconv = locale.localeconv()
             sep = localeconv['thousands_sep']
             point = localeconv['decimal_point']
+            grouping = localeconv['grouping']
 
             text = format(123456789, "n")
-            self.assertIn(sep, text)
+            if grouping:
+                self.assertIn(sep, text)
             self.assertEqual(text.replace(sep, ''), '123456789')
 
             text = format(1234.5, "n")
-            self.assertIn(sep, text)
+            if grouping:
+                self.assertIn(sep, text)
             self.assertIn(point, text)
             self.assertEqual(text.replace(sep, ''), '1234' + point + '5')
         finally:
@@ -484,6 +488,36 @@
         with self.assertRaises(ValueError) as cm:
             format(c, ".%sf" % (INT_MAX + 1))
 
+    def test_g_format_has_no_trailing_zeros(self):
+        # regression test for bugs.python.org/issue40780
+        self.assertEqual("%.3g" % 1505.0, "1.5e+03")
+        self.assertEqual("%#.3g" % 1505.0, "1.50e+03")
+
+        self.assertEqual(format(1505.0, ".3g"), "1.5e+03")
+        self.assertEqual(format(1505.0, "#.3g"), "1.50e+03")
+
+        self.assertEqual(format(12300050.0, ".6g"), "1.23e+07")
+        self.assertEqual(format(12300050.0, "#.6g"), "1.23000e+07")
+
+    def test_with_two_commas_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify ',' with ','.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            '{:,,}'.format(1)
+
+    def test_with_two_underscore_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify '_' with '_'.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            '{:__}'.format(1)
+
+    def test_with_a_commas_and_an_underscore_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify both ',' and '_'.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            '{:,_}'.format(1)
+
+    def test_with_an_underscore_and_a_comma_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify both ',' and '_'.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            '{:_,}'.format(1)
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py
index 86b49f3..0845f79 100644
--- a/Lib/test/test_fractions.py
+++ b/Lib/test/test_fractions.py
@@ -9,11 +9,10 @@
 import functools
 import sys
 import unittest
-import warnings
 from copy import copy, deepcopy
 from pickle import dumps, loads
 F = fractions.Fraction
-gcd = fractions.gcd
+
 
 class DummyFloat(object):
     """Dummy float class for testing comparisons with Fractions"""
@@ -82,30 +81,6 @@
 class DummyFraction(fractions.Fraction):
     """Dummy Fraction subclass for copy and deepcopy testing."""
 
-class GcdTest(unittest.TestCase):
-
-    def testMisc(self):
-        # fractions.gcd() is deprecated
-        with self.assertWarnsRegex(DeprecationWarning, r'fractions\.gcd'):
-            gcd(1, 1)
-        with warnings.catch_warnings():
-            warnings.filterwarnings('ignore', r'fractions\.gcd',
-                                    DeprecationWarning)
-            self.assertEqual(0, gcd(0, 0))
-            self.assertEqual(1, gcd(1, 0))
-            self.assertEqual(-1, gcd(-1, 0))
-            self.assertEqual(1, gcd(0, 1))
-            self.assertEqual(-1, gcd(0, -1))
-            self.assertEqual(1, gcd(7, 1))
-            self.assertEqual(-1, gcd(7, -1))
-            self.assertEqual(1, gcd(-23, 15))
-            self.assertEqual(12, gcd(120, 84))
-            self.assertEqual(-12, gcd(84, -120))
-            self.assertEqual(gcd(120.0, 84), 12.0)
-            self.assertEqual(gcd(120, 84.0), 12.0)
-            self.assertEqual(gcd(F(120), F(84)), F(12))
-            self.assertEqual(gcd(F(120, 77), F(84, 55)), F(12, 385))
-
 
 def _components(r):
     return (r.numerator, r.denominator)
@@ -727,5 +702,28 @@
         r = F(13, 7)
         self.assertRaises(AttributeError, setattr, r, 'a', 10)
 
+    def test_int_subclass(self):
+        class myint(int):
+            def __mul__(self, other):
+                return type(self)(int(self) * int(other))
+            def __floordiv__(self, other):
+                return type(self)(int(self) // int(other))
+            def __mod__(self, other):
+                x = type(self)(int(self) % int(other))
+                return x
+            @property
+            def numerator(self):
+                return type(self)(int(self))
+            @property
+            def denominator(self):
+                return type(self)(1)
+
+        f = fractions.Fraction(myint(1 * 3), myint(2 * 3))
+        self.assertEqual(f.numerator, 1)
+        self.assertEqual(f.denominator, 2)
+        self.assertEqual(type(f.numerator), myint)
+        self.assertEqual(type(f.denominator), myint)
+
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py
index d6aa283..a8696f0 100644
--- a/Lib/test/test_frame.py
+++ b/Lib/test/test_frame.py
@@ -50,7 +50,7 @@
             nonlocal endly
             try:
                 yield
-                inner()
+                self.inner()
             finally:
                 endly = True
         gen = g()
diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py
index 4966392..2ae815a 100644
--- a/Lib/test/test_fstring.py
+++ b/Lib/test/test_fstring.py
@@ -8,9 +8,13 @@
 # Unicode identifiers in tests is allowed by PEP 3131.
 
 import ast
+import os
+import re
 import types
 import decimal
 import unittest
+from test.support import temp_cwd, use_old_parser
+from test.support.script_helper import assert_python_failure
 
 a_global = 'global variable'
 
@@ -521,7 +525,8 @@
                              # This looks like a nested format spec.
                              ])
 
-        self.assertAllRaise(SyntaxError, "invalid syntax",
+        err_msg = "invalid syntax" if use_old_parser() else "f-string: invalid syntax"
+        self.assertAllRaise(SyntaxError, err_msg,
                             [# Invalid syntax inside a nested spec.
                              "f'{4:{/5}}'",
                              ])
@@ -583,7 +588,7 @@
                              ])
 
         # Different error message is raised for other whitespace characters.
-        self.assertAllRaise(SyntaxError, 'invalid character in identifier',
+        self.assertAllRaise(SyntaxError, r"invalid non-printable character U\+00A0",
                             ["f'''{\xa0}'''",
                              "\xa0",
                              ])
@@ -595,7 +600,8 @@
         #  are added around it. But we shouldn't go from an invalid
         #  expression to a valid one. The added parens are just
         #  supposed to allow whitespace (including newlines).
-        self.assertAllRaise(SyntaxError, 'invalid syntax',
+        err_msg = "invalid syntax" if use_old_parser() else "f-string: invalid syntax"
+        self.assertAllRaise(SyntaxError, err_msg,
                             ["f'{,}'",
                              "f'{,}'",  # this is (,), which is an error
                              ])
@@ -713,7 +719,8 @@
 
         # lambda doesn't work without parens, because the colon
         #  makes the parser think it's a format_spec
-        self.assertAllRaise(SyntaxError, 'unexpected EOF while parsing',
+        err_msg = "invalid syntax" if use_old_parser() else "f-string: invalid syntax"
+        self.assertAllRaise(SyntaxError, err_msg,
                             ["f'{lambda x:x}'",
                              ])
 
@@ -722,9 +729,11 @@
         #  a function into a generator
         def fn(y):
             f'y:{yield y*2}'
+            f'{yield}'
 
         g = fn(4)
         self.assertEqual(next(g), 8)
+        self.assertEqual(next(g), None)
 
     def test_yield_send(self):
         def fn(x):
@@ -841,8 +850,7 @@
         self.assertEqual(f'{f"{y}"*3}', '555')
 
     def test_invalid_string_prefixes(self):
-        self.assertAllRaise(SyntaxError, 'unexpected EOF while parsing',
-                            ["fu''",
+        single_quote_cases = ["fu''",
                              "uf''",
                              "Fu''",
                              "fU''",
@@ -863,8 +871,15 @@
                              "bf''",
                              "bF''",
                              "Bf''",
-                             "BF''",
-                             ])
+                             "BF''",]
+        double_quote_cases = [case.replace("'", '"') for case in single_quote_cases]
+        error_msg = (
+            'invalid syntax'
+            if use_old_parser()
+            else 'unexpected EOF while parsing'
+        )
+        self.assertAllRaise(SyntaxError, error_msg,
+                            single_quote_cases + double_quote_cases)
 
     def test_leading_trailing_spaces(self):
         self.assertEqual(f'{ 3}', '3')
@@ -1043,6 +1058,17 @@
                              r"f'{1000:j}'",
                             ])
 
+    @unittest.skipIf(use_old_parser(), "The old parser only supports <fstring> as the filename")
+    def test_filename_in_syntaxerror(self):
+        # see issue 38964
+        with temp_cwd() as cwd:
+            file_path = os.path.join(cwd, 't.py')
+            with open(file_path, 'w') as f:
+                f.write('f"{a b}"') # This generates a SyntaxError
+            _, _, stderr = assert_python_failure(file_path,
+                                                 PYTHONIOENCODING='ascii')
+        self.assertIn(file_path.encode('ascii', 'backslashreplace'), stderr)
+
     def test_loop(self):
         for i in range(1000):
             self.assertEqual(f'i:{i}', 'i:' + str(i))
@@ -1178,6 +1204,30 @@
         self.assertEqual(f'{(x:=10)}', '10')
         self.assertEqual(x, 10)
 
+    def test_invalid_syntax_error_message(self):
+        err_msg = "invalid syntax" if use_old_parser() else "f-string: invalid syntax"
+        with self.assertRaisesRegex(SyntaxError, err_msg):
+            compile("f'{a $ b}'", "?", "exec")
+
+    def test_with_two_commas_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify ',' with ','.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            f'{1:,,}'
+
+    def test_with_two_underscore_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify '_' with '_'.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            f'{1:__}'
+
+    def test_with_a_commas_and_an_underscore_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify both ',' and '_'.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            f'{1:,_}'
+
+    def test_with_an_underscore_and_a_comma_in_format_specifier(self):
+        error_msg = re.escape("Cannot specify both ',' and '_'.")
+        with self.assertRaisesRegex(ValueError, error_msg):
+            f'{1:_,}'
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index b0e4641..e424076 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -19,14 +19,16 @@
 
 from unittest import TestCase, skipUnless
 from test import support
-from test.support import HOST, HOSTv6
+from test.support import socket_helper
+from test.support.socket_helper import HOST, HOSTv6
 
-TIMEOUT = 3
+TIMEOUT = support.LOOPBACK_TIMEOUT
+DEFAULT_ENCODING = 'utf-8'
 # the dummy data returned by server over the data channel when
 # RETR, LIST, NLST, MLSD commands are issued
-RETR_DATA = 'abcde12345\r\n' * 1000
-LIST_DATA = 'foo\r\nbar\r\n'
-NLST_DATA = 'foo\r\nbar\r\n'
+RETR_DATA = 'abcde12345\r\n' * 1000 + 'non-ascii char \xAE\r\n'
+LIST_DATA = 'foo\r\nbar\r\n non-ascii char \xAE\r\n'
+NLST_DATA = 'foo\r\nbar\r\n non-ascii char \xAE\r\n'
 MLSD_DATA = ("type=cdir;perm=el;unique==keVO1+ZF4; test\r\n"
              "type=pdir;perm=e;unique==keVO1+d?3; ..\r\n"
              "type=OS.unix=slink:/foobar;perm=;unique==keVO1+4G4; foobar\r\n"
@@ -41,7 +43,9 @@
              "type=dir;perm=cpmel;unique==keVO1+7G4; incoming\r\n"
              "type=file;perm=r;unique==keVO1+1G4; file2\r\n"
              "type=file;perm=r;unique==keVO1+1G4; file3\r\n"
-             "type=file;perm=r;unique==keVO1+1G4; file4\r\n")
+             "type=file;perm=r;unique==keVO1+1G4; file4\r\n"
+             "type=dir;perm=cpmel;unique==SGP1; dir \xAE non-ascii char\r\n"
+             "type=file;perm=r;unique==SGP2; file \xAE non-ascii char\r\n")
 
 
 class DummyDTPHandler(asynchat.async_chat):
@@ -51,9 +55,11 @@
         asynchat.async_chat.__init__(self, conn)
         self.baseclass = baseclass
         self.baseclass.last_received_data = ''
+        self.encoding = baseclass.encoding
 
     def handle_read(self):
-        self.baseclass.last_received_data += self.recv(1024).decode('ascii')
+        new_data = self.recv(1024).decode(self.encoding, 'replace')
+        self.baseclass.last_received_data += new_data
 
     def handle_close(self):
         # XXX: this method can be called many times in a row for a single
@@ -70,7 +76,7 @@
             self.baseclass.next_data = None
         if not what:
             return self.close_when_done()
-        super(DummyDTPHandler, self).push(what.encode('ascii'))
+        super(DummyDTPHandler, self).push(what.encode(self.encoding))
 
     def handle_error(self):
         raise Exception
@@ -80,7 +86,7 @@
 
     dtp_handler = DummyDTPHandler
 
-    def __init__(self, conn):
+    def __init__(self, conn, encoding=DEFAULT_ENCODING):
         asynchat.async_chat.__init__(self, conn)
         # tells the socket to handle urgent data inline (ABOR command)
         self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_OOBINLINE, 1)
@@ -94,12 +100,13 @@
         self.rest = None
         self.next_retr_data = RETR_DATA
         self.push('220 welcome')
+        self.encoding = encoding
 
     def collect_incoming_data(self, data):
         self.in_buffer.append(data)
 
     def found_terminator(self):
-        line = b''.join(self.in_buffer).decode('ascii')
+        line = b''.join(self.in_buffer).decode(self.encoding)
         self.in_buffer = []
         if self.next_response:
             self.push(self.next_response)
@@ -121,7 +128,7 @@
         raise Exception
 
     def push(self, data):
-        asynchat.async_chat.push(self, data.encode('ascii') + b'\r\n')
+        asynchat.async_chat.push(self, data.encode(self.encoding) + b'\r\n')
 
     def cmd_port(self, arg):
         addr = list(map(int, arg.split(',')))
@@ -251,7 +258,7 @@
 
     handler = DummyFTPHandler
 
-    def __init__(self, address, af=socket.AF_INET):
+    def __init__(self, address, af=socket.AF_INET, encoding=DEFAULT_ENCODING):
         threading.Thread.__init__(self)
         asyncore.dispatcher.__init__(self)
         self.daemon = True
@@ -262,6 +269,7 @@
         self.active_lock = threading.Lock()
         self.host, self.port = self.socket.getsockname()[:2]
         self.handler_instance = None
+        self.encoding = encoding
 
     def start(self):
         assert not self.active
@@ -284,7 +292,7 @@
         self.join()
 
     def handle_accepted(self, conn, addr):
-        self.handler_instance = self.handler(conn)
+        self.handler_instance = self.handler(conn, encoding=self.encoding)
 
     def handle_connect(self):
         self.close()
@@ -346,7 +354,7 @@
                 if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
                                    ssl.SSL_ERROR_WANT_WRITE):
                     return
-            except OSError as err:
+            except OSError:
                 # Any "socket error" corresponds to a SSL_ERROR_SYSCALL return
                 # from OpenSSL's SSL_shutdown(), corresponding to a
                 # closed socket condition. See also:
@@ -421,8 +429,8 @@
 
         dtp_handler = DummyTLS_DTPHandler
 
-        def __init__(self, conn):
-            DummyFTPHandler.__init__(self, conn)
+        def __init__(self, conn, encoding=DEFAULT_ENCODING):
+            DummyFTPHandler.__init__(self, conn, encoding=encoding)
             self.secure_data_channel = False
             self._ccc = False
 
@@ -462,10 +470,10 @@
 
 class TestFTPClass(TestCase):
 
-    def setUp(self):
-        self.server = DummyFTPServer((HOST, 0))
+    def setUp(self, encoding=DEFAULT_ENCODING):
+        self.server = DummyFTPServer((HOST, 0), encoding=encoding)
         self.server.start()
-        self.client = ftplib.FTP(timeout=TIMEOUT)
+        self.client = ftplib.FTP(timeout=TIMEOUT, encoding=encoding)
         self.client.connect(self.server.host, self.server.port)
 
     def tearDown(self):
@@ -565,14 +573,14 @@
 
     def test_retrbinary(self):
         def callback(data):
-            received.append(data.decode('ascii'))
+            received.append(data.decode(self.client.encoding))
         received = []
         self.client.retrbinary('retr', callback)
         self.check_data(''.join(received), RETR_DATA)
 
     def test_retrbinary_rest(self):
         def callback(data):
-            received.append(data.decode('ascii'))
+            received.append(data.decode(self.client.encoding))
         for rest in (0, 10, 20):
             received = []
             self.client.retrbinary('retr', callback, rest=rest)
@@ -584,7 +592,7 @@
         self.check_data(''.join(received), RETR_DATA.replace('\r\n', ''))
 
     def test_storbinary(self):
-        f = io.BytesIO(RETR_DATA.encode('ascii'))
+        f = io.BytesIO(RETR_DATA.encode(self.client.encoding))
         self.client.storbinary('stor', f)
         self.check_data(self.server.handler_instance.last_received_data, RETR_DATA)
         # test new callback arg
@@ -594,14 +602,16 @@
         self.assertTrue(flag)
 
     def test_storbinary_rest(self):
-        f = io.BytesIO(RETR_DATA.replace('\r\n', '\n').encode('ascii'))
+        data = RETR_DATA.replace('\r\n', '\n').encode(self.client.encoding)
+        f = io.BytesIO(data)
         for r in (30, '30'):
             f.seek(0)
             self.client.storbinary('stor', f, rest=r)
             self.assertEqual(self.server.handler_instance.rest, str(r))
 
     def test_storlines(self):
-        f = io.BytesIO(RETR_DATA.replace('\r\n', '\n').encode('ascii'))
+        data = RETR_DATA.replace('\r\n', '\n').encode(self.client.encoding)
+        f = io.BytesIO(data)
         self.client.storlines('stor', f)
         self.check_data(self.server.handler_instance.last_received_data, RETR_DATA)
         # test new callback arg
@@ -742,7 +752,7 @@
 
     def test_source_address(self):
         self.client.quit()
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         try:
             self.client.connect(self.server.host, self.server.port,
                                 source_address=(HOST, port))
@@ -754,7 +764,7 @@
             raise
 
     def test_source_address_passive_connection(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         self.client.source_address = (HOST, port)
         try:
             with self.client.transfercmd('list') as sock:
@@ -790,14 +800,32 @@
         f = io.BytesIO(b'x' * self.client.maxline * 2)
         self.assertRaises(ftplib.Error, self.client.storlines, 'stor', f)
 
+    def test_encoding_param(self):
+        encodings = ['latin-1', 'utf-8']
+        for encoding in encodings:
+            with self.subTest(encoding=encoding):
+                self.tearDown()
+                self.setUp(encoding=encoding)
+                self.assertEqual(encoding, self.client.encoding)
+                self.test_retrbinary()
+                self.test_storbinary()
+                self.test_retrlines()
+                new_dir = self.client.mkd('/non-ascii dir \xAE')
+                self.check_data(new_dir, '/non-ascii dir \xAE')
+        # Check default encoding
+        client = ftplib.FTP(timeout=TIMEOUT)
+        self.assertEqual(DEFAULT_ENCODING, client.encoding)
 
-@skipUnless(support.IPV6_ENABLED, "IPv6 not enabled")
+
+@skipUnless(socket_helper.IPV6_ENABLED, "IPv6 not enabled")
 class TestIPv6Environment(TestCase):
 
     def setUp(self):
-        self.server = DummyFTPServer((HOSTv6, 0), af=socket.AF_INET6)
+        self.server = DummyFTPServer((HOSTv6, 0),
+                                     af=socket.AF_INET6,
+                                     encoding=DEFAULT_ENCODING)
         self.server.start()
-        self.client = ftplib.FTP(timeout=TIMEOUT)
+        self.client = ftplib.FTP(timeout=TIMEOUT, encoding=DEFAULT_ENCODING)
         self.client.connect(self.server.host, self.server.port)
 
     def tearDown(self):
@@ -824,7 +852,7 @@
     def test_transfer(self):
         def retr():
             def callback(data):
-                received.append(data.decode('ascii'))
+                received.append(data.decode(self.client.encoding))
             received = []
             self.client.retrbinary('retr', callback)
             self.assertEqual(len(''.join(received)), len(RETR_DATA))
@@ -841,10 +869,10 @@
     and data connections first.
     """
 
-    def setUp(self):
-        self.server = DummyTLS_FTPServer((HOST, 0))
+    def setUp(self, encoding=DEFAULT_ENCODING):
+        self.server = DummyTLS_FTPServer((HOST, 0), encoding=encoding)
         self.server.start()
-        self.client = ftplib.FTP_TLS(timeout=TIMEOUT)
+        self.client = ftplib.FTP_TLS(timeout=TIMEOUT, encoding=encoding)
         self.client.connect(self.server.host, self.server.port)
         # enable TLS
         self.client.auth()
@@ -855,8 +883,8 @@
 class TestTLS_FTPClass(TestCase):
     """Specific TLS_FTP class tests."""
 
-    def setUp(self):
-        self.server = DummyTLS_FTPServer((HOST, 0))
+    def setUp(self, encoding=DEFAULT_ENCODING):
+        self.server = DummyTLS_FTPServer((HOST, 0), encoding=encoding)
         self.server.start()
         self.client = ftplib.FTP_TLS(timeout=TIMEOUT)
         self.client.connect(self.server.host, self.server.port)
@@ -877,7 +905,8 @@
         # clear text
         with self.client.transfercmd('list') as sock:
             self.assertNotIsInstance(sock, ssl.SSLSocket)
-            self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
+            self.assertEqual(sock.recv(1024),
+                             LIST_DATA.encode(self.client.encoding))
         self.assertEqual(self.client.voidresp(), "226 transfer complete")
 
         # secured, after PROT P
@@ -886,14 +915,16 @@
             self.assertIsInstance(sock, ssl.SSLSocket)
             # consume from SSL socket to finalize handshake and avoid
             # "SSLError [SSL] shutdown while in init"
-            self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
+            self.assertEqual(sock.recv(1024),
+                             LIST_DATA.encode(self.client.encoding))
         self.assertEqual(self.client.voidresp(), "226 transfer complete")
 
         # PROT C is issued, the connection must be in cleartext again
         self.client.prot_c()
         with self.client.transfercmd('list') as sock:
             self.assertNotIsInstance(sock, ssl.SSLSocket)
-            self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
+            self.assertEqual(sock.recv(1024),
+                             LIST_DATA.encode(self.client.encoding))
         self.assertEqual(self.client.voidresp(), "226 transfer complete")
 
     def test_login(self):
@@ -977,7 +1008,7 @@
         self.evt = threading.Event()
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.sock.settimeout(20)
-        self.port = support.bind_port(self.sock)
+        self.port = socket_helper.bind_port(self.sock)
         self.server_thread = threading.Thread(target=self.server)
         self.server_thread.daemon = True
         self.server_thread.start()
@@ -1045,6 +1076,10 @@
         self.evt.wait()
         ftp.close()
 
+        # bpo-39259
+        with self.assertRaises(ValueError):
+            ftplib.FTP(HOST, timeout=0)
+
     def testTimeoutConnect(self):
         ftp = ftplib.FTP()
         ftp.connect(HOST, timeout=30)
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index 8fee1c6..11e8aa3 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -13,9 +13,14 @@
 import typing
 import unittest
 import unittest.mock
+import os
+import weakref
+import gc
 from weakref import proxy
 import contextlib
 
+from test.support.script_helper import assert_python_ok
+
 import functools
 
 py_functools = support.import_fresh_module('functools', blocked=['_functools'])
@@ -556,11 +561,9 @@
         with self.assertRaises(TypeError):
             class B:
                 method = functools.partialmethod()
-        with self.assertWarns(DeprecationWarning):
+        with self.assertRaises(TypeError):
             class B:
                 method = functools.partialmethod(func=capture, a=1)
-        b = B()
-        self.assertEqual(b.method(2, x=3), ((b, 2), {'a': 1, 'x': 3}))
 
     def test_repr(self):
         self.assertEqual(repr(vars(self.A)['both']),
@@ -1160,6 +1163,25 @@
         return self.value == other.value
 
 
+class TestCache:
+    # This tests that the pass-through is working as designed.
+    # The underlying functionality is tested in TestLRU.
+
+    def test_cache(self):
+        @self.module.cache
+        def fib(n):
+            if n < 2:
+                return n
+            return fib(n-1) + fib(n-2)
+        self.assertEqual([fib(n) for n in range(16)],
+            [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610])
+        self.assertEqual(fib.cache_info(),
+            self.module._CacheInfo(hits=28, misses=16, maxsize=None, currsize=16))
+        fib.cache_clear()
+        self.assertEqual(fib.cache_info(),
+            self.module._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
+
+
 class TestLRU:
 
     def test_lru(self):
@@ -1657,6 +1679,46 @@
                 f_copy = copy.deepcopy(f)
                 self.assertIs(f_copy, f)
 
+    def test_lru_cache_parameters(self):
+        @self.module.lru_cache(maxsize=2)
+        def f():
+            return 1
+        self.assertEqual(f.cache_parameters(), {'maxsize': 2, "typed": False})
+
+        @self.module.lru_cache(maxsize=1000, typed=True)
+        def f():
+            return 1
+        self.assertEqual(f.cache_parameters(), {'maxsize': 1000, "typed": True})
+
+    def test_lru_cache_weakrefable(self):
+        @self.module.lru_cache
+        def test_function(x):
+            return x
+
+        class A:
+            @self.module.lru_cache
+            def test_method(self, x):
+                return (self, x)
+
+            @staticmethod
+            @self.module.lru_cache
+            def test_staticmethod(x):
+                return (self, x)
+
+        refs = [weakref.ref(test_function),
+                weakref.ref(A.test_method),
+                weakref.ref(A.test_staticmethod)]
+
+        for ref in refs:
+            self.assertIsNotNone(ref())
+
+        del A
+        del test_function
+        gc.collect()
+
+        for ref in refs:
+            self.assertIsNone(ref())
+
 
 @py_functools.lru_cache()
 def py_cached_func(x, y):
diff --git a/Lib/test/test_future.py b/Lib/test/test_future.py
index 5794646..0f40357 100644
--- a/Lib/test/test_future.py
+++ b/Lib/test/test_future.py
@@ -7,6 +7,7 @@
 from textwrap import dedent
 import os
 import re
+import sys
 
 rx = re.compile(r'\((\S+).py, line (\d+)')
 
@@ -85,10 +86,10 @@
             for future in __future__.all_feature_names
         }
         # obtain some of the exported compiler flags (PyCF_***) from the ast module
-        flags.update({
+        flags |= {
             flag: getattr(ast, flag)
             for flag in dir(ast) if flag.startswith("PyCF_")
-        })
+        }
         self.assertCountEqual(set(flags.values()), flags.values())
 
     def test_parserhack(self):
@@ -128,6 +129,10 @@
             ...
         def g(arg: {ann}) -> None:
             ...
+        async def f2() -> {ann}:
+            ...
+        async def g2(arg: {ann}) -> None:
+            ...
         var: {ann}
         var2: {ann} = None
         """
@@ -138,9 +143,13 @@
         exec(self.template.format(ann=annotation), {}, scope)
         func_ret_ann = scope['f'].__annotations__['return']
         func_arg_ann = scope['g'].__annotations__['arg']
+        async_func_ret_ann = scope['f2'].__annotations__['return']
+        async_func_arg_ann = scope['g2'].__annotations__['arg']
         var_ann1 = scope['__annotations__']['var']
         var_ann2 = scope['__annotations__']['var2']
         self.assertEqual(func_ret_ann, func_arg_ann)
+        self.assertEqual(func_ret_ann, async_func_ret_ann)
+        self.assertEqual(func_ret_ann, async_func_arg_ann)
         self.assertEqual(func_ret_ann, var_ann1)
         self.assertEqual(func_ret_ann, var_ann2)
         return func_ret_ann
@@ -161,6 +170,7 @@
         eq = self.assertAnnotationEqual
         eq('...')
         eq("'some_string'")
+        eq("u'some_string'")
         eq("b'\\xa3'")
         eq('Name')
         eq('None')
@@ -266,7 +276,6 @@
         eq("set[str,]")
         eq("tuple[str, ...]")
         eq("tuple[(str, *types)]")
-        eq("tuple[xx:yy, (*types,)]")
         eq("tuple[str, int, (str, int)]")
         eq("tuple[(*int, str, str, (str, int))]")
         eq("tuple[str, int, float, dict[str, int]]")
@@ -307,8 +316,9 @@
         eq('f((x for x in a), 2)')
         eq('(((a)))', 'a')
         eq('(((a, b)))', '(a, b)')
-        eq("(x:=10)")
-        eq("f'{(x:=10):=10}'")
+        eq("(x := 10)")
+        eq("f'{(x := 10):=10}'")
+        eq("1 + 2 + 3")
 
     def test_fstring_debug_annotations(self):
         # f-strings with '=' don't round trip very well, so set the expected
@@ -320,6 +330,18 @@
         self.assertAnnotationEqual("f'{x=!a}'", expected="f'x={x!a}'")
         self.assertAnnotationEqual("f'{x=!s:*^20}'", expected="f'x={x!s:*^20}'")
 
+    def test_infinity_numbers(self):
+        inf = "1e" + repr(sys.float_info.max_10_exp + 1)
+        infj = f"{inf}j"
+        self.assertAnnotationEqual("1e1000", expected=inf)
+        self.assertAnnotationEqual("1e1000j", expected=infj)
+        self.assertAnnotationEqual("-1e1000", expected=f"-{inf}")
+        self.assertAnnotationEqual("3+1e1000j", expected=f"3 + {infj}")
+        self.assertAnnotationEqual("(1e1000, 1e1000j)", expected=f"({inf}, {infj})")
+        self.assertAnnotationEqual("'inf'")
+        self.assertAnnotationEqual("('inf', 1e1000, 'infxxx', 1e1000j)", expected=f"('inf', {inf}, 'infxxx', {infj})")
+        self.assertAnnotationEqual("(1e1000, (1e1000j,))", expected=f"({inf}, ({infj},))")
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
index f52db1e..38c9cb7 100644
--- a/Lib/test/test_gc.py
+++ b/Lib/test/test_gc.py
@@ -1,7 +1,8 @@
 import unittest
+import unittest.mock
 from test.support import (verbose, refcount_test, run_unittest,
-                          strip_python_stderr, cpython_only, start_threads,
-                          temp_dir, requires_type_collecting, TESTFN, unlink,
+                          cpython_only, start_threads,
+                          temp_dir, TESTFN, unlink,
                           import_module)
 from test.support.script_helper import assert_python_ok, make_script
 
@@ -22,6 +23,11 @@
                 raise TypeError('requires _testcapi.with_tp_del')
         return C
 
+try:
+    from _testcapi import ContainerNoGC
+except ImportError:
+    ContainerNoGC = None
+
 ### Support code
 ###############################################################################
 
@@ -125,7 +131,6 @@
         del a
         self.assertNotEqual(gc.collect(), 0)
 
-    @requires_type_collecting
     def test_newinstance(self):
         class A(object):
             pass
@@ -576,9 +581,27 @@
         self.assertTrue(gc.is_tracked(UserInt()))
         self.assertTrue(gc.is_tracked([]))
         self.assertTrue(gc.is_tracked(set()))
-        self.assertFalse(gc.is_tracked(UserClassSlots()))
-        self.assertFalse(gc.is_tracked(UserFloatSlots()))
-        self.assertFalse(gc.is_tracked(UserIntSlots()))
+        self.assertTrue(gc.is_tracked(UserClassSlots()))
+        self.assertTrue(gc.is_tracked(UserFloatSlots()))
+        self.assertTrue(gc.is_tracked(UserIntSlots()))
+
+    def test_is_finalized(self):
+        # Objects not tracked by the always gc return false
+        self.assertFalse(gc.is_finalized(3))
+
+        storage = []
+        class Lazarus:
+            def __del__(self):
+                storage.append(self)
+
+        lazarus = Lazarus()
+        self.assertFalse(gc.is_finalized(lazarus))
+
+        del lazarus
+        gc.collect()
+
+        lazarus = storage.pop()
+        self.assertTrue(gc.is_finalized(lazarus))
 
     def test_bug1055820b(self):
         # Corresponds to temp2b.py in the bug report.
@@ -665,8 +688,8 @@
             p.stdout.close()
             p.stderr.close()
             self.assertEqual(p.returncode, 0)
-            self.assertEqual(stdout.strip(), b"")
-            return strip_python_stderr(stderr)
+            self.assertEqual(stdout, b"")
+            return stderr
 
         stderr = run_command(code % "0")
         self.assertIn(b"ResourceWarning: gc: 2 uncollectable objects at "
@@ -685,7 +708,6 @@
         stderr = run_command(code % "gc.DEBUG_SAVEALL")
         self.assertNotIn(b"uncollectable objects at shutdown", stderr)
 
-    @requires_type_collecting
     def test_gc_main_module_at_shutdown(self):
         # Create a reference cycle through the __main__ module and check
         # it gets collected at interpreter shutdown.
@@ -699,7 +721,6 @@
         rc, out, err = assert_python_ok('-c', code)
         self.assertEqual(out.strip(), b'__del__ called')
 
-    @requires_type_collecting
     def test_gc_ordinary_module_at_shutdown(self):
         # Same as above, but with a non-__main__ module.
         with temp_dir() as script_dir:
@@ -719,7 +740,6 @@
             rc, out, err = assert_python_ok('-c', code)
             self.assertEqual(out.strip(), b'__del__ called')
 
-    @requires_type_collecting
     def test_global_del_SystemExit(self):
         code = """if 1:
             class ClassWithDel:
@@ -822,7 +842,78 @@
         self.assertRaises(TypeError, gc.get_objects, "1")
         self.assertRaises(TypeError, gc.get_objects, 1.234)
 
-    def test_38379(self):
+    def test_resurrection_only_happens_once_per_object(self):
+        class A:  # simple self-loop
+            def __init__(self):
+                self.me = self
+
+        class Lazarus(A):
+            resurrected = 0
+            resurrected_instances = []
+
+            def __del__(self):
+                Lazarus.resurrected += 1
+                Lazarus.resurrected_instances.append(self)
+
+        gc.collect()
+        gc.disable()
+
+        # We start with 0 resurrections
+        laz = Lazarus()
+        self.assertEqual(Lazarus.resurrected, 0)
+
+        # Deleting the instance and triggering a collection
+        # resurrects the object
+        del laz
+        gc.collect()
+        self.assertEqual(Lazarus.resurrected, 1)
+        self.assertEqual(len(Lazarus.resurrected_instances), 1)
+
+        # Clearing the references and forcing a collection
+        # should not resurrect the object again.
+        Lazarus.resurrected_instances.clear()
+        self.assertEqual(Lazarus.resurrected, 1)
+        gc.collect()
+        self.assertEqual(Lazarus.resurrected, 1)
+
+        gc.enable()
+
+    def test_resurrection_is_transitive(self):
+        class Cargo:
+            def __init__(self):
+                self.me = self
+
+        class Lazarus:
+            resurrected_instances = []
+
+            def __del__(self):
+                Lazarus.resurrected_instances.append(self)
+
+        gc.collect()
+        gc.disable()
+
+        laz = Lazarus()
+        cargo = Cargo()
+        cargo_id = id(cargo)
+
+        # Create a cycle between cargo and laz
+        laz.cargo = cargo
+        cargo.laz = laz
+
+        # Drop the references, force a collection and check that
+        # everything was resurrected.
+        del laz, cargo
+        gc.collect()
+        self.assertEqual(len(Lazarus.resurrected_instances), 1)
+        instance = Lazarus.resurrected_instances.pop()
+        self.assertTrue(hasattr(instance, "cargo"))
+        self.assertEqual(id(instance.cargo), cargo_id)
+
+        gc.collect()
+        gc.enable()
+
+    def test_resurrection_does_not_block_cleanup_of_other_objects(self):
+
         # When a finalizer resurrects objects, stats were reporting them as
         # having been collected.  This affected both collect()'s return
         # value and the dicts returned by get_stats().
@@ -861,38 +952,93 @@
         # Nothing is collected - Z() is merely resurrected.
         t = gc.collect()
         c, nc = getstats()
-        #self.assertEqual(t, 2)  # before
-        self.assertEqual(t, 0)  # after
-        #self.assertEqual(c - oldc, 2)   # before
-        self.assertEqual(c - oldc, 0)   # after
+        self.assertEqual(t, 0)
+        self.assertEqual(c - oldc, 0)
         self.assertEqual(nc - oldnc, 0)
 
-        # Unfortunately, a Z() prevents _anything_ from being collected.
-        # It should be possible to collect the A instances anyway, but
-        # that will require non-trivial code changes.
+        # Z() should not prevent anything else from being collected.
         oldc, oldnc = c, nc
         for i in range(N):
             A()
         Z()
-        # Z() prevents anything from being collected.
-        t = gc.collect()
-        c, nc = getstats()
-        #self.assertEqual(t, 2*N + 2)  # before
-        self.assertEqual(t, 0)  # after
-        #self.assertEqual(c - oldc, 2*N + 2)   # before
-        self.assertEqual(c - oldc, 0)   # after
-        self.assertEqual(nc - oldnc, 0)
-
-        # But the A() trash is reclaimed on the next run.
-        oldc, oldnc = c, nc
         t = gc.collect()
         c, nc = getstats()
         self.assertEqual(t, 2*N)
         self.assertEqual(c - oldc, 2*N)
         self.assertEqual(nc - oldnc, 0)
 
+        # The A() trash should have been reclaimed already but the
+        # 2 copies of Z are still in zs (and the associated dicts).
+        oldc, oldnc = c, nc
+        zs.clear()
+        t = gc.collect()
+        c, nc = getstats()
+        self.assertEqual(t, 4)
+        self.assertEqual(c - oldc, 4)
+        self.assertEqual(nc - oldnc, 0)
+
         gc.enable()
 
+    @unittest.skipIf(ContainerNoGC is None,
+                     'requires ContainerNoGC extension type')
+    def test_trash_weakref_clear(self):
+        # Test that trash weakrefs are properly cleared (bpo-38006).
+        #
+        # Structure we are creating:
+        #
+        #   Z <- Y <- A--+--> WZ -> C
+        #             ^  |
+        #             +--+
+        # where:
+        #   WZ is a weakref to Z with callback C
+        #   Y doesn't implement tp_traverse
+        #   A contains a reference to itself, Y and WZ
+        #
+        # A, Y, Z, WZ are all trash.  The GC doesn't know that Z is trash
+        # because Y does not implement tp_traverse.  To show the bug, WZ needs
+        # to live long enough so that Z is deallocated before it.  Then, if
+        # gcmodule is buggy, when Z is being deallocated, C will run.
+        #
+        # To ensure WZ lives long enough, we put it in a second reference
+        # cycle.  That trick only works due to the ordering of the GC prev/next
+        # linked lists.  So, this test is a bit fragile.
+        #
+        # The bug reported in bpo-38006 is caused because the GC did not
+        # clear WZ before starting the process of calling tp_clear on the
+        # trash.  Normally, handle_weakrefs() would find the weakref via Z and
+        # clear it.  However, since the GC cannot find Z, WR is not cleared and
+        # it can execute during delete_garbage().  That can lead to disaster
+        # since the callback might tinker with objects that have already had
+        # tp_clear called on them (leaving them in possibly invalid states).
+
+        callback = unittest.mock.Mock()
+
+        class A:
+            __slots__ = ['a', 'y', 'wz']
+
+        class Z:
+            pass
+
+        # setup required object graph, as described above
+        a = A()
+        a.a = a
+        a.y = ContainerNoGC(Z())
+        a.wz = weakref.ref(a.y.value, callback)
+        # create second cycle to keep WZ alive longer
+        wr_cycle = [a.wz]
+        wr_cycle.append(wr_cycle)
+        # ensure trash unrelated to this test is gone
+        gc.collect()
+        gc.disable()
+        # release references and create trash
+        del a, wr_cycle
+        gc.collect()
+        # if called, it means there is a bug in the GC.  The weakref should be
+        # cleared before Z dies.
+        callback.assert_not_called()
+        gc.enable()
+
+
 class GCCallbackTests(unittest.TestCase):
     def setUp(self):
         # Save gc state and disable it.
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index d90ca5a..22c75ba 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -13,7 +13,7 @@
 import unittest
 
 from test import support
-from test.support import run_unittest, findfile, python_is_optimized
+from test.support import findfile, python_is_optimized
 
 def get_gdb_version():
     try:
@@ -371,7 +371,6 @@
         def check_repr(text):
             try:
                 text.encode(encoding)
-                printable = True
             except UnicodeEncodeError:
                 self.assertGdbRepr(text, ascii(text))
             else:
@@ -862,47 +861,66 @@
                                           )
         self.assertIn('Garbage-collecting', gdb_output)
 
+
     @unittest.skipIf(python_is_optimized(),
                      "Python was compiled with optimizations")
     # Some older versions of gdb will fail with
     #  "Cannot find new threads: generic error"
     # unless we add LD_PRELOAD=PATH-TO-libpthread.so.1 as a workaround
+    #
+    # gdb will also generate many erroneous errors such as:
+    #     Function "meth_varargs" not defined.
+    # This is because we are calling functions from an "external" module
+    # (_testcapimodule) rather than compiled-in functions. It seems difficult
+    # to suppress these. See also the comment in DebuggerTests.get_stack_trace
     def test_pycfunction(self):
         'Verify that "py-bt" displays invocations of PyCFunction instances'
         # Various optimizations multiply the code paths by which these are
         # called, so test a variety of calling conventions.
-        for py_name, py_args, c_name, expected_frame_number in (
-            ('gmtime', '', 'time_gmtime', 1),  # METH_VARARGS
-            ('len', '[]', 'builtin_len', 1),  # METH_O
-            ('locals', '', 'builtin_locals', 1),  # METH_NOARGS
-            ('iter', '[]', 'builtin_iter', 1),  # METH_FASTCALL
-            ('sorted', '[]', 'builtin_sorted', 1),  # METH_FASTCALL|METH_KEYWORDS
+        for func_name, args, expected_frame in (
+            ('meth_varargs', '', 1),
+            ('meth_varargs_keywords', '', 1),
+            ('meth_o', '[]', 1),
+            ('meth_noargs', '', 1),
+            ('meth_fastcall', '', 1),
+            ('meth_fastcall_keywords', '', 1),
         ):
-            with self.subTest(c_name):
-                cmd = ('from time import gmtime\n'  # (not always needed)
-                    'def foo():\n'
-                    f'    {py_name}({py_args})\n'
-                    'def bar():\n'
-                    '    foo()\n'
-                    'bar()\n')
-                # Verify with "py-bt":
-                gdb_output = self.get_stack_trace(
-                    cmd,
-                    breakpoint=c_name,
-                    cmds_after_breakpoint=['bt', 'py-bt'],
-                )
-                self.assertIn(f'<built-in method {py_name}', gdb_output)
+            for obj in (
+                '_testcapi',
+                '_testcapi.MethClass',
+                '_testcapi.MethClass()',
+                '_testcapi.MethStatic()',
 
-                # Verify with "py-bt-full":
-                gdb_output = self.get_stack_trace(
-                    cmd,
-                    breakpoint=c_name,
-                    cmds_after_breakpoint=['py-bt-full'],
-                )
-                self.assertIn(
-                    f'#{expected_frame_number} <built-in method {py_name}',
-                    gdb_output,
-                )
+                # XXX: bound methods don't yet give nice tracebacks
+                # '_testcapi.MethInstance()',
+            ):
+                with self.subTest(f'{obj}.{func_name}'):
+                    cmd = textwrap.dedent(f'''
+                        import _testcapi
+                        def foo():
+                            {obj}.{func_name}({args})
+                        def bar():
+                            foo()
+                        bar()
+                    ''')
+                    # Verify with "py-bt":
+                    gdb_output = self.get_stack_trace(
+                        cmd,
+                        breakpoint=func_name,
+                        cmds_after_breakpoint=['bt', 'py-bt'],
+                    )
+                    self.assertIn(f'<built-in method {func_name}', gdb_output)
+
+                    # Verify with "py-bt-full":
+                    gdb_output = self.get_stack_trace(
+                        cmd,
+                        breakpoint=func_name,
+                        cmds_after_breakpoint=['py-bt-full'],
+                    )
+                    self.assertIn(
+                        f'#{expected_frame} <built-in method {func_name}',
+                        gdb_output,
+                    )
 
     @unittest.skipIf(python_is_optimized(),
                      "Python was compiled with optimizations")
@@ -983,18 +1001,13 @@
         self.assertMultilineMatches(bt,
                                     r".*\na = 1\nb = 2\nc = 3\n.*")
 
-def test_main():
+
+def setUpModule():
     if support.verbose:
         print("GDB version %s.%s:" % (gdb_major_version, gdb_minor_version))
         for line in gdb_version.splitlines():
             print(" " * 4 + line)
-    run_unittest(PrettyPrintTests,
-                 PyListTests,
-                 StackNavigationTests,
-                 PyBtTests,
-                 PyPrintTests,
-                 PyLocalsTests
-                 )
+
 
 if __name__ == "__main__":
-    test_main()
+    unittest.main()
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index f8d86da..3bf1522 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -316,6 +316,154 @@
         self.assertEqual(cm.exception.value.value, 2)
 
 
+class GeneratorThrowTest(unittest.TestCase):
+
+    def test_exception_context_with_yield(self):
+        def f():
+            try:
+                raise KeyError('a')
+            except Exception:
+                yield
+
+        gen = f()
+        gen.send(None)
+        with self.assertRaises(ValueError) as cm:
+            gen.throw(ValueError)
+        context = cm.exception.__context__
+        self.assertEqual((type(context), context.args), (KeyError, ('a',)))
+
+    def test_exception_context_with_yield_inside_generator(self):
+        # Check that the context is also available from inside the generator
+        # with yield, as opposed to outside.
+        def f():
+            try:
+                raise KeyError('a')
+            except Exception:
+                try:
+                    yield
+                except Exception as exc:
+                    self.assertEqual(type(exc), ValueError)
+                    context = exc.__context__
+                    self.assertEqual((type(context), context.args),
+                        (KeyError, ('a',)))
+                    yield 'b'
+
+        gen = f()
+        gen.send(None)
+        actual = gen.throw(ValueError)
+        # This ensures that the assertions inside were executed.
+        self.assertEqual(actual, 'b')
+
+    def test_exception_context_with_yield_from(self):
+        def f():
+            yield
+
+        def g():
+            try:
+                raise KeyError('a')
+            except Exception:
+                yield from f()
+
+        gen = g()
+        gen.send(None)
+        with self.assertRaises(ValueError) as cm:
+            gen.throw(ValueError)
+        context = cm.exception.__context__
+        self.assertEqual((type(context), context.args), (KeyError, ('a',)))
+
+    def test_exception_context_with_yield_from_with_context_cycle(self):
+        # Check trying to create an exception context cycle:
+        # https://bugs.python.org/issue40696
+        has_cycle = None
+
+        def f():
+            yield
+
+        def g(exc):
+            nonlocal has_cycle
+            try:
+                raise exc
+            except Exception:
+                try:
+                    yield from f()
+                except Exception as exc:
+                    has_cycle = (exc is exc.__context__)
+            yield
+
+        exc = KeyError('a')
+        gen = g(exc)
+        gen.send(None)
+        gen.throw(exc)
+        # This also distinguishes from the initial has_cycle=None.
+        self.assertEqual(has_cycle, False)
+
+    def test_throw_after_none_exc_type(self):
+        def g():
+            try:
+                raise KeyError
+            except KeyError:
+                pass
+
+            try:
+                yield
+            except Exception:
+                raise RuntimeError
+
+        gen = g()
+        gen.send(None)
+        with self.assertRaises(RuntimeError) as cm:
+            gen.throw(ValueError)
+
+
+class GeneratorStackTraceTest(unittest.TestCase):
+
+    def check_stack_names(self, frame, expected):
+        names = []
+        while frame:
+            name = frame.f_code.co_name
+            # Stop checking frames when we get to our test helper.
+            if name.startswith('check_') or name.startswith('call_'):
+                break
+
+            names.append(name)
+            frame = frame.f_back
+
+        self.assertEqual(names, expected)
+
+    def check_yield_from_example(self, call_method):
+        def f():
+            self.check_stack_names(sys._getframe(), ['f', 'g'])
+            try:
+                yield
+            except Exception:
+                pass
+            self.check_stack_names(sys._getframe(), ['f', 'g'])
+
+        def g():
+            self.check_stack_names(sys._getframe(), ['g'])
+            yield from f()
+            self.check_stack_names(sys._getframe(), ['g'])
+
+        gen = g()
+        gen.send(None)
+        try:
+            call_method(gen)
+        except StopIteration:
+            pass
+
+    def test_send_with_yield_from(self):
+        def call_send(gen):
+            gen.send(None)
+
+        self.check_yield_from_example(call_send)
+
+    def test_throw_with_yield_from(self):
+        def call_throw(gen):
+            gen.throw(RuntimeError)
+
+        self.check_yield_from_example(call_throw)
+
+
 class YieldFromTests(unittest.TestCase):
     def test_generator_gi_yieldfrom(self):
         def a():
@@ -1856,10 +2004,11 @@
   ...
 SyntaxError: 'yield' outside function
 
->>> def f(): x = yield = y
-Traceback (most recent call last):
-  ...
-SyntaxError: assignment to yield expression not possible
+# Pegen does not produce this error message yet
+# >>> def f(): x = yield = y
+# Traceback (most recent call last):
+#   ...
+# SyntaxError: assignment to yield expression not possible
 
 >>> def f(): (yield bar) = y
 Traceback (most recent call last):
@@ -1869,7 +2018,7 @@
 >>> def f(): (yield bar) += y
 Traceback (most recent call last):
   ...
-SyntaxError: cannot assign to yield expression
+SyntaxError: 'yield expression' is an illegal expression for augmented assignment
 
 
 Now check some throw() conditions:
diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py
new file mode 100644
index 0000000..c113e53
--- /dev/null
+++ b/Lib/test/test_genericalias.py
@@ -0,0 +1,312 @@
+"""Tests for C-implemented GenericAlias."""
+
+import unittest
+import pickle
+from collections import (
+    defaultdict, deque, OrderedDict, Counter, UserDict, UserList
+)
+from collections.abc import *
+from concurrent.futures import Future
+from concurrent.futures.thread import _WorkItem
+from contextlib import AbstractContextManager, AbstractAsyncContextManager
+from contextvars import ContextVar, Token
+from dataclasses import Field
+from functools import partial, partialmethod, cached_property
+from mailbox import Mailbox, _PartialFile
+try:
+    import ctypes
+except ImportError:
+    ctypes = None
+from difflib import SequenceMatcher
+from filecmp import dircmp
+from fileinput import FileInput
+from itertools import chain
+from http.cookies import Morsel
+from multiprocessing.managers import ValueProxy
+from multiprocessing.pool import ApplyResult
+try:
+    from multiprocessing.shared_memory import ShareableList
+except ImportError:
+    # multiprocessing.shared_memory is not available on e.g. Android
+    ShareableList = None
+from multiprocessing.queues import SimpleQueue as MPSimpleQueue
+from os import DirEntry
+from re import Pattern, Match
+from types import GenericAlias, MappingProxyType, AsyncGeneratorType
+from tempfile import TemporaryDirectory, SpooledTemporaryFile
+from urllib.parse import SplitResult, ParseResult
+from unittest.case import _AssertRaisesContext
+from queue import Queue, SimpleQueue
+from weakref import WeakSet, ReferenceType, ref
+import typing
+
+from typing import TypeVar
+T = TypeVar('T')
+K = TypeVar('K')
+V = TypeVar('V')
+
+class BaseTest(unittest.TestCase):
+    """Test basics."""
+    generic_types = [type, tuple, list, dict, set, frozenset, enumerate,
+                     defaultdict, deque,
+                     SequenceMatcher,
+                     dircmp,
+                     FileInput,
+                     OrderedDict, Counter, UserDict, UserList,
+                     Pattern, Match,
+                     partial, partialmethod, cached_property,
+                     AbstractContextManager, AbstractAsyncContextManager,
+                     Awaitable, Coroutine,
+                     AsyncIterable, AsyncIterator,
+                     AsyncGenerator, Generator,
+                     Iterable, Iterator,
+                     Reversible,
+                     Container, Collection,
+                     Callable,
+                     Mailbox, _PartialFile,
+                     ContextVar, Token,
+                     Field,
+                     Set, MutableSet,
+                     Mapping, MutableMapping, MappingView,
+                     KeysView, ItemsView, ValuesView,
+                     Sequence, MutableSequence,
+                     MappingProxyType, AsyncGeneratorType,
+                     DirEntry,
+                     chain,
+                     TemporaryDirectory, SpooledTemporaryFile,
+                     Queue, SimpleQueue,
+                     _AssertRaisesContext,
+                     SplitResult, ParseResult,
+                     ValueProxy, ApplyResult,
+                     WeakSet, ReferenceType, ref,
+                     ShareableList, MPSimpleQueue,
+                     Future, _WorkItem,
+                     Morsel]
+    if ctypes is not None:
+        generic_types.extend((ctypes.Array, ctypes.LibraryLoader))
+
+    def test_subscriptable(self):
+        for t in self.generic_types:
+            if t is None:
+                continue
+            tname = t.__name__
+            with self.subTest(f"Testing {tname}"):
+                alias = t[int]
+                self.assertIs(alias.__origin__, t)
+                self.assertEqual(alias.__args__, (int,))
+                self.assertEqual(alias.__parameters__, ())
+
+    def test_unsubscriptable(self):
+        for t in int, str, float, Sized, Hashable:
+            tname = t.__name__
+            with self.subTest(f"Testing {tname}"):
+                with self.assertRaises(TypeError):
+                    t[int]
+
+    def test_instantiate(self):
+        for t in tuple, list, dict, set, frozenset, defaultdict, deque:
+            tname = t.__name__
+            with self.subTest(f"Testing {tname}"):
+                alias = t[int]
+                self.assertEqual(alias(), t())
+                if t is dict:
+                    self.assertEqual(alias(iter([('a', 1), ('b', 2)])), dict(a=1, b=2))
+                    self.assertEqual(alias(a=1, b=2), dict(a=1, b=2))
+                elif t is defaultdict:
+                    def default():
+                        return 'value'
+                    a = alias(default)
+                    d = defaultdict(default)
+                    self.assertEqual(a['test'], d['test'])
+                else:
+                    self.assertEqual(alias(iter((1, 2, 3))), t((1, 2, 3)))
+
+    def test_unbound_methods(self):
+        t = list[int]
+        a = t()
+        t.append(a, 'foo')
+        self.assertEqual(a, ['foo'])
+        x = t.__getitem__(a, 0)
+        self.assertEqual(x, 'foo')
+        self.assertEqual(t.__len__(a), 1)
+
+    def test_subclassing(self):
+        class C(list[int]):
+            pass
+        self.assertEqual(C.__bases__, (list,))
+        self.assertEqual(C.__class__, type)
+
+    def test_class_methods(self):
+        t = dict[int, None]
+        self.assertEqual(dict.fromkeys(range(2)), {0: None, 1: None})  # This works
+        self.assertEqual(t.fromkeys(range(2)), {0: None, 1: None})  # Should be equivalent
+
+    def test_no_chaining(self):
+        t = list[int]
+        with self.assertRaises(TypeError):
+            t[int]
+
+    def test_generic_subclass(self):
+        class MyList(list):
+            pass
+        t = MyList[int]
+        self.assertIs(t.__origin__, MyList)
+        self.assertEqual(t.__args__, (int,))
+        self.assertEqual(t.__parameters__, ())
+
+    def test_repr(self):
+        class MyList(list):
+            pass
+        self.assertEqual(repr(list[str]), 'list[str]')
+        self.assertEqual(repr(list[()]), 'list[()]')
+        self.assertEqual(repr(tuple[int, ...]), 'tuple[int, ...]')
+        self.assertTrue(repr(MyList[int]).endswith('.BaseTest.test_repr.<locals>.MyList[int]'))
+        self.assertEqual(repr(list[str]()), '[]')  # instances should keep their normal repr
+
+    def test_exposed_type(self):
+        import types
+        a = types.GenericAlias(list, int)
+        self.assertEqual(str(a), 'list[int]')
+        self.assertIs(a.__origin__, list)
+        self.assertEqual(a.__args__, (int,))
+        self.assertEqual(a.__parameters__, ())
+
+    def test_parameters(self):
+        from typing import List, Dict, Callable
+        D0 = dict[str, int]
+        self.assertEqual(D0.__args__, (str, int))
+        self.assertEqual(D0.__parameters__, ())
+        D1a = dict[str, V]
+        self.assertEqual(D1a.__args__, (str, V))
+        self.assertEqual(D1a.__parameters__, (V,))
+        D1b = dict[K, int]
+        self.assertEqual(D1b.__args__, (K, int))
+        self.assertEqual(D1b.__parameters__, (K,))
+        D2a = dict[K, V]
+        self.assertEqual(D2a.__args__, (K, V))
+        self.assertEqual(D2a.__parameters__, (K, V))
+        D2b = dict[T, T]
+        self.assertEqual(D2b.__args__, (T, T))
+        self.assertEqual(D2b.__parameters__, (T,))
+        L0 = list[str]
+        self.assertEqual(L0.__args__, (str,))
+        self.assertEqual(L0.__parameters__, ())
+        L1 = list[T]
+        self.assertEqual(L1.__args__, (T,))
+        self.assertEqual(L1.__parameters__, (T,))
+        L2 = list[list[T]]
+        self.assertEqual(L2.__args__, (list[T],))
+        self.assertEqual(L2.__parameters__, (T,))
+        L3 = list[List[T]]
+        self.assertEqual(L3.__args__, (List[T],))
+        self.assertEqual(L3.__parameters__, (T,))
+        L4a = list[Dict[K, V]]
+        self.assertEqual(L4a.__args__, (Dict[K, V],))
+        self.assertEqual(L4a.__parameters__, (K, V))
+        L4b = list[Dict[T, int]]
+        self.assertEqual(L4b.__args__, (Dict[T, int],))
+        self.assertEqual(L4b.__parameters__, (T,))
+        L5 = list[Callable[[K, V], K]]
+        self.assertEqual(L5.__args__, (Callable[[K, V], K],))
+        self.assertEqual(L5.__parameters__, (K, V))
+
+    def test_parameter_chaining(self):
+        from typing import List, Dict, Union, Callable
+        self.assertEqual(list[T][int], list[int])
+        self.assertEqual(dict[str, T][int], dict[str, int])
+        self.assertEqual(dict[T, int][str], dict[str, int])
+        self.assertEqual(dict[K, V][str, int], dict[str, int])
+        self.assertEqual(dict[T, T][int], dict[int, int])
+
+        self.assertEqual(list[list[T]][int], list[list[int]])
+        self.assertEqual(list[dict[T, int]][str], list[dict[str, int]])
+        self.assertEqual(list[dict[str, T]][int], list[dict[str, int]])
+        self.assertEqual(list[dict[K, V]][str, int], list[dict[str, int]])
+        self.assertEqual(dict[T, list[int]][str], dict[str, list[int]])
+
+        self.assertEqual(list[List[T]][int], list[List[int]])
+        self.assertEqual(list[Dict[K, V]][str, int], list[Dict[str, int]])
+        self.assertEqual(list[Union[K, V]][str, int], list[Union[str, int]])
+        self.assertEqual(list[Callable[[K, V], K]][str, int],
+                         list[Callable[[str, int], str]])
+        self.assertEqual(dict[T, List[int]][str], dict[str, List[int]])
+
+        with self.assertRaises(TypeError):
+            list[int][int]
+            dict[T, int][str, int]
+            dict[str, T][str, int]
+            dict[T, T][str, int]
+
+    def test_equality(self):
+        self.assertEqual(list[int], list[int])
+        self.assertEqual(dict[str, int], dict[str, int])
+        self.assertNotEqual(dict[str, int], dict[str, str])
+        self.assertNotEqual(list, list[int])
+        self.assertNotEqual(list[int], list)
+
+    def test_isinstance(self):
+        self.assertTrue(isinstance([], list))
+        with self.assertRaises(TypeError):
+            isinstance([], list[str])
+
+    def test_issubclass(self):
+        class L(list): ...
+        self.assertTrue(issubclass(L, list))
+        with self.assertRaises(TypeError):
+            issubclass(L, list[str])
+
+    def test_type_generic(self):
+        t = type[int]
+        Test = t('Test', (), {})
+        self.assertTrue(isinstance(Test, type))
+        test = Test()
+        self.assertEqual(t(test), Test)
+        self.assertEqual(t(0), int)
+
+    def test_type_subclass_generic(self):
+        class MyType(type):
+            pass
+        with self.assertRaises(TypeError):
+            MyType[int]
+
+    def test_pickle(self):
+        alias = GenericAlias(list, T)
+        s = pickle.dumps(alias)
+        loaded = pickle.loads(s)
+        self.assertEqual(alias.__origin__, loaded.__origin__)
+        self.assertEqual(alias.__args__, loaded.__args__)
+        self.assertEqual(alias.__parameters__, loaded.__parameters__)
+
+    def test_union(self):
+        a = typing.Union[list[int], list[str]]
+        self.assertEqual(a.__args__, (list[int], list[str]))
+        self.assertEqual(a.__parameters__, ())
+
+    def test_union_generic(self):
+        a = typing.Union[list[T], tuple[T, ...]]
+        self.assertEqual(a.__args__, (list[T], tuple[T, ...]))
+        self.assertEqual(a.__parameters__, (T,))
+
+    def test_dir(self):
+        dir_of_gen_alias = set(dir(list[int]))
+        self.assertTrue(dir_of_gen_alias.issuperset(dir(list)))
+        for generic_alias_property in ("__origin__", "__args__", "__parameters__"):
+            self.assertIn(generic_alias_property, dir_of_gen_alias)
+
+    def test_weakref(self):
+        for t in self.generic_types:
+            if t is None:
+                continue
+            tname = t.__name__
+            with self.subTest(f"Testing {tname}"):
+                alias = t[int]
+                self.assertEqual(ref(alias)(), alias)
+
+    def test_no_kwargs(self):
+        # bpo-42576
+        with self.assertRaises(TypeError):
+            GenericAlias(bad=float)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
index 9d5ac44..e7acbcd 100644
--- a/Lib/test/test_genericpath.py
+++ b/Lib/test/test_genericpath.py
@@ -534,7 +534,7 @@
 class PathLikeTests(unittest.TestCase):
 
     def setUp(self):
-        self.file_name = support.TESTFN.lower()
+        self.file_name = support.TESTFN
         self.file_path = FakePath(support.TESTFN)
         self.addCleanup(support.unlink, self.file_name)
         create_file(self.file_name, b"test_genericpath.PathLikeTests")
diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py
index fd712bb..5c1a209 100644
--- a/Lib/test/test_genexps.py
+++ b/Lib/test/test_genexps.py
@@ -15,6 +15,22 @@
     >>> list((i,j) for i in range(4) for j in range(i) )
     [(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]
 
+Test the idiom for temporary variable assignment in comprehensions.
+
+    >>> list((j*j for i in range(4) for j in [i+1]))
+    [1, 4, 9, 16]
+    >>> list((j*k for i in range(4) for j in [i+1] for k in [j+1]))
+    [2, 6, 12, 20]
+    >>> list((j*k for i in range(4) for j, k in [(i+1, i+2)]))
+    [2, 6, 12, 20]
+
+Not assignment
+
+    >>> list((i*i for i in [*range(4)]))
+    [0, 1, 4, 9]
+    >>> list((i*i for i in (*range(4),)))
+    [0, 1, 4, 9]
+
 Make sure the induction variable is not exposed
 
     >>> i = 20
@@ -142,7 +158,7 @@
     >>> (y for y in (1,2)) += 10
     Traceback (most recent call last):
        ...
-    SyntaxError: cannot assign to generator expression
+    SyntaxError: 'generator expression' is an illegal expression for augmented assignment
 
 
 ########### Tests borrowed from or inspired by test_generators.py ############
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 2ed73e3..e1a402e 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -1,7 +1,7 @@
 # Python test set -- part 1, grammar.
 # This just tests whether the parser accepts them all.
 
-from test.support import check_syntax_error, check_syntax_warning
+from test.support import check_syntax_error, check_syntax_warning, use_old_parser
 import inspect
 import unittest
 import sys
@@ -460,7 +460,7 @@
 
     def test_funcdef(self):
         ### [decorators] 'def' NAME parameters ['->' test] ':' suite
-        ### decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
+        ### decorator: '@' namedexpr_test NEWLINE
         ### decorators: decorator+
         ### parameters: '(' [typedargslist] ')'
         ### typedargslist: ((tfpdef ['=' test] ',')*
@@ -666,6 +666,20 @@
         def f(x) -> list: pass
         self.assertEqual(f.__annotations__, {'return': list})
 
+        # Test expressions as decorators (PEP 614):
+        @False or null
+        def f(x): pass
+        @d := null
+        def f(x): pass
+        @lambda f: null(f)
+        def f(x): pass
+        @[..., null, ...][1]
+        def f(x): pass
+        @null(null)(null)
+        def f(x): pass
+        @[null][0].__call__.__call__
+        def f(x): pass
+
         # test closures with a variety of opargs
         closure = 1
         def f(): return closure
@@ -787,6 +801,23 @@
         del abc
         del x, y, (z, xyz)
 
+        x, y, z = "xyz"
+        del x
+        del y,
+        del (z)
+        del ()
+
+        a, b, c, d, e, f, g = "abcdefg"
+        del a, (b, c), (d, (e, f))
+
+        a, b, c, d, e, f, g = "abcdefg"
+        del a, [b, c], (d, [e, f])
+
+        abcd = list("abcd")
+        del abcd[1:2]
+
+        compile("del a, (b[0].c, (d.e, f.g[1:2])), [h.i.j], ()", "<testcase>", "exec")
+
     def test_pass_stmt(self):
         # 'pass'
         pass
@@ -1248,7 +1279,7 @@
     def test_try(self):
         ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
         ###         | 'try' ':' suite 'finally' ':' suite
-        ### except_clause: 'except' [expr ['as' expr]]
+        ### except_clause: 'except' [expr ['as' NAME]]
         try:
             1/0
         except ZeroDivisionError:
@@ -1266,6 +1297,9 @@
         except (EOFError, TypeError, ZeroDivisionError) as msg: pass
         try: pass
         finally: pass
+        with self.assertRaises(SyntaxError):
+            compile("try:\n    pass\nexcept Exception as a.b:\n    pass", "?", "exec")
+            compile("try:\n    pass\nexcept Exception as a[b]:\n    pass", "?", "exec")
 
     def test_suite(self):
         # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT
@@ -1515,13 +1549,27 @@
             def meth2(self, arg): pass
             def meth3(self, a1, a2): pass
 
-        # decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
+        # decorator: '@' namedexpr_test NEWLINE
         # decorators: decorator+
         # decorated: decorators (classdef | funcdef)
         def class_decorator(x): return x
         @class_decorator
         class G: pass
 
+        # Test expressions as decorators (PEP 614):
+        @False or class_decorator
+        class H: pass
+        @d := class_decorator
+        class I: pass
+        @lambda c: class_decorator(c)
+        class J: pass
+        @[..., class_decorator, ...][1]
+        class K: pass
+        @class_decorator(class_decorator)(class_decorator)
+        class L: pass
+        @[class_decorator][0].__call__.__call__
+        class M: pass
+
     def test_dictcomps(self):
         # dictorsetmaker: ( (test ':' test (comp_for |
         #                                   (',' test ':' test)* [','])) |
@@ -1666,6 +1714,70 @@
         with manager() as x, manager():
             pass
 
+        if not use_old_parser():
+            test_cases = [
+                """if 1:
+                    with (
+                        manager()
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager() as x
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager() as (x, y),
+                        manager() as z,
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager(),
+                        manager()
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager() as x,
+                        manager() as y
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager() as x,
+                        manager()
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager() as x,
+                        manager() as y,
+                        manager() as z,
+                    ):
+                        pass
+                """,
+                """if 1:
+                    with (
+                        manager() as x,
+                        manager() as y,
+                        manager(),
+                    ):
+                        pass
+                """,
+            ]
+            for case in test_cases:
+                with self.subTest(case=case):
+                    compile(case, "<string>", "exec")
+
+
     def test_if_else_expr(self):
         # Test ifelse expressions in various cases
         def _checkeval(msg, ret):
diff --git a/Lib/test/test_graphlib.py b/Lib/test/test_graphlib.py
new file mode 100644
index 0000000..0043253
--- /dev/null
+++ b/Lib/test/test_graphlib.py
@@ -0,0 +1,244 @@
+from itertools import chain
+import graphlib
+import os
+import unittest
+
+from test.support.script_helper import assert_python_ok
+
+class TestTopologicalSort(unittest.TestCase):
+    def _test_graph(self, graph, expected):
+        def static_order_with_groups(ts):
+            ts.prepare()
+            while ts.is_active():
+                nodes = ts.get_ready()
+                for node in nodes:
+                    ts.done(node)
+                yield nodes
+
+        ts = graphlib.TopologicalSorter(graph)
+        self.assertEqual(list(static_order_with_groups(ts)), list(expected))
+
+        ts = graphlib.TopologicalSorter(graph)
+        self.assertEqual(list(ts.static_order()), list(chain(*expected)))
+
+    def _assert_cycle(self, graph, cycle):
+        ts = graphlib.TopologicalSorter()
+        for node, dependson in graph.items():
+            ts.add(node, *dependson)
+        try:
+            ts.prepare()
+        except graphlib.CycleError as e:
+            msg, seq = e.args
+            self.assertIn(" ".join(map(str, cycle)), " ".join(map(str, seq * 2)))
+        else:
+            raise
+
+    def test_simple_cases(self):
+        self._test_graph(
+            {2: {11}, 9: {11, 8}, 10: {11, 3}, 11: {7, 5}, 8: {7, 3}},
+            [(3, 5, 7), (11, 8), (2, 10, 9)],
+        )
+
+        self._test_graph({1: {}}, [(1,)])
+
+        self._test_graph(
+            {x: {x + 1} for x in range(10)}, [(x,) for x in range(10, -1, -1)]
+        )
+
+        self._test_graph(
+            {2: {3}, 3: {4}, 4: {5}, 5: {1}, 11: {12}, 12: {13}, 13: {14}, 14: {15}},
+            [(1, 15), (5, 14), (4, 13), (3, 12), (2, 11)],
+        )
+
+        self._test_graph(
+            {
+                0: [1, 2],
+                1: [3],
+                2: [5, 6],
+                3: [4],
+                4: [9],
+                5: [3],
+                6: [7],
+                7: [8],
+                8: [4],
+                9: [],
+            },
+            [(9,), (4,), (3, 8), (1, 5, 7), (6,), (2,), (0,)],
+        )
+
+        self._test_graph({0: [1, 2], 1: [], 2: [3], 3: []}, [(1, 3), (2,), (0,)])
+
+        self._test_graph(
+            {0: [1, 2], 1: [], 2: [3], 3: [], 4: [5], 5: [6], 6: []},
+            [(1, 3, 6), (2, 5), (0, 4)],
+        )
+
+    def test_no_dependencies(self):
+        self._test_graph({1: {2}, 3: {4}, 5: {6}}, [(2, 4, 6), (1, 3, 5)])
+
+        self._test_graph({1: set(), 3: set(), 5: set()}, [(1, 3, 5)])
+
+    def test_the_node_multiple_times(self):
+        # Test same node multiple times in dependencies
+        self._test_graph({1: {2}, 3: {4}, 0: [2, 4, 4, 4, 4, 4]}, [(2, 4), (1, 3, 0)])
+
+        # Test adding the same dependency multiple times
+        ts = graphlib.TopologicalSorter()
+        ts.add(1, 2)
+        ts.add(1, 2)
+        ts.add(1, 2)
+        self.assertEqual([*ts.static_order()], [2, 1])
+
+    def test_graph_with_iterables(self):
+        dependson = (2 * x + 1 for x in range(5))
+        ts = graphlib.TopologicalSorter({0: dependson})
+        self.assertEqual(list(ts.static_order()), [1, 3, 5, 7, 9, 0])
+
+    def test_add_dependencies_for_same_node_incrementally(self):
+        # Test same node multiple times
+        ts = graphlib.TopologicalSorter()
+        ts.add(1, 2)
+        ts.add(1, 3)
+        ts.add(1, 4)
+        ts.add(1, 5)
+
+        ts2 = graphlib.TopologicalSorter({1: {2, 3, 4, 5}})
+        self.assertEqual([*ts.static_order()], [*ts2.static_order()])
+
+    def test_empty(self):
+        self._test_graph({}, [])
+
+    def test_cycle(self):
+        # Self cycle
+        self._assert_cycle({1: {1}}, [1, 1])
+        # Simple cycle
+        self._assert_cycle({1: {2}, 2: {1}}, [1, 2, 1])
+        # Indirect cycle
+        self._assert_cycle({1: {2}, 2: {3}, 3: {1}}, [1, 3, 2, 1])
+        # not all elements involved in a cycle
+        self._assert_cycle({1: {2}, 2: {3}, 3: {1}, 5: {4}, 4: {6}}, [1, 3, 2, 1])
+        # Multiple cycles
+        self._assert_cycle({1: {2}, 2: {1}, 3: {4}, 4: {5}, 6: {7}, 7: {6}}, [1, 2, 1])
+        # Cycle in the middle of the graph
+        self._assert_cycle({1: {2}, 2: {3}, 3: {2, 4}, 4: {5}}, [3, 2])
+
+    def test_calls_before_prepare(self):
+        ts = graphlib.TopologicalSorter()
+
+        with self.assertRaisesRegex(ValueError, r"prepare\(\) must be called first"):
+            ts.get_ready()
+        with self.assertRaisesRegex(ValueError, r"prepare\(\) must be called first"):
+            ts.done(3)
+        with self.assertRaisesRegex(ValueError, r"prepare\(\) must be called first"):
+            ts.is_active()
+
+    def test_prepare_multiple_times(self):
+        ts = graphlib.TopologicalSorter()
+        ts.prepare()
+        with self.assertRaisesRegex(ValueError, r"cannot prepare\(\) more than once"):
+            ts.prepare()
+
+    def test_invalid_nodes_in_done(self):
+        ts = graphlib.TopologicalSorter()
+        ts.add(1, 2, 3, 4)
+        ts.add(2, 3, 4)
+        ts.prepare()
+        ts.get_ready()
+
+        with self.assertRaisesRegex(ValueError, "node 2 was not passed out"):
+            ts.done(2)
+        with self.assertRaisesRegex(ValueError, r"node 24 was not added using add\(\)"):
+            ts.done(24)
+
+    def test_done(self):
+        ts = graphlib.TopologicalSorter()
+        ts.add(1, 2, 3, 4)
+        ts.add(2, 3)
+        ts.prepare()
+
+        self.assertEqual(ts.get_ready(), (3, 4))
+        # If we don't mark anything as done, get_ready() returns nothing
+        self.assertEqual(ts.get_ready(), ())
+        ts.done(3)
+        # Now 2 becomes available as 3 is done
+        self.assertEqual(ts.get_ready(), (2,))
+        self.assertEqual(ts.get_ready(), ())
+        ts.done(4)
+        ts.done(2)
+        # Only 1 is missing
+        self.assertEqual(ts.get_ready(), (1,))
+        self.assertEqual(ts.get_ready(), ())
+        ts.done(1)
+        self.assertEqual(ts.get_ready(), ())
+        self.assertFalse(ts.is_active())
+
+    def test_is_active(self):
+        ts = graphlib.TopologicalSorter()
+        ts.add(1, 2)
+        ts.prepare()
+
+        self.assertTrue(ts.is_active())
+        self.assertEqual(ts.get_ready(), (2,))
+        self.assertTrue(ts.is_active())
+        ts.done(2)
+        self.assertTrue(ts.is_active())
+        self.assertEqual(ts.get_ready(), (1,))
+        self.assertTrue(ts.is_active())
+        ts.done(1)
+        self.assertFalse(ts.is_active())
+
+    def test_not_hashable_nodes(self):
+        ts = graphlib.TopologicalSorter()
+        self.assertRaises(TypeError, ts.add, dict(), 1)
+        self.assertRaises(TypeError, ts.add, 1, dict())
+        self.assertRaises(TypeError, ts.add, dict(), dict())
+
+    def test_order_of_insertion_does_not_matter_between_groups(self):
+        def get_groups(ts):
+            ts.prepare()
+            while ts.is_active():
+                nodes = ts.get_ready()
+                ts.done(*nodes)
+                yield set(nodes)
+
+        ts = graphlib.TopologicalSorter()
+        ts.add(3, 2, 1)
+        ts.add(1, 0)
+        ts.add(4, 5)
+        ts.add(6, 7)
+        ts.add(4, 7)
+
+        ts2 = graphlib.TopologicalSorter()
+        ts2.add(1, 0)
+        ts2.add(3, 2, 1)
+        ts2.add(4, 7)
+        ts2.add(6, 7)
+        ts2.add(4, 5)
+
+        self.assertEqual(list(get_groups(ts)), list(get_groups(ts2)))
+
+    def test_static_order_does_not_change_with_the_hash_seed(self):
+        def check_order_with_hash_seed(seed):
+            code = """if 1:
+                import graphlib
+                ts = graphlib.TopologicalSorter()
+                ts.add('blech', 'bluch', 'hola')
+                ts.add('abcd', 'blech', 'bluch', 'a', 'b')
+                ts.add('a', 'a string', 'something', 'b')
+                ts.add('bluch', 'hola', 'abcde', 'a', 'b')
+                print(list(ts.static_order()))
+                """
+            env = os.environ.copy()
+            # signal to assert_python not to do a copy
+            # of os.environ on its own
+            env["__cleanenv"] = True
+            env["PYTHONHASHSEED"] = str(seed)
+            out = assert_python_ok("-c", code, **env)
+            return out
+
+        run1 = check_order_with_hash_seed(1234)
+        run2 = check_order_with_hash_seed(31415)
+
+        self.assertNotEqual(run1, "")
+        self.assertNotEqual(run2, "")
+        self.assertEqual(run1, run2)
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 6468286..0f235d1 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -328,8 +328,15 @@
             cmByte = fRead.read(1)
             self.assertEqual(cmByte, b'\x08') # deflate
 
+            try:
+                expectedname = self.filename.encode('Latin-1') + b'\x00'
+                expectedflags = b'\x08' # only the FNAME flag is set
+            except UnicodeEncodeError:
+                expectedname = b''
+                expectedflags = b'\x00'
+
             flagsByte = fRead.read(1)
-            self.assertEqual(flagsByte, b'\x08') # only the FNAME flag is set
+            self.assertEqual(flagsByte, expectedflags)
 
             mtimeBytes = fRead.read(4)
             self.assertEqual(mtimeBytes, struct.pack('<i', mtime)) # little-endian
@@ -344,9 +351,8 @@
             # RFC 1952 specifies that this is the name of the input file, if any.
             # However, the gzip module defaults to storing the name of the output
             # file in this field.
-            expected = self.filename.encode('Latin-1') + b'\x00'
-            nameBytes = fRead.read(len(expected))
-            self.assertEqual(nameBytes, expected)
+            nameBytes = fRead.read(len(expectedname))
+            self.assertEqual(nameBytes, expectedname)
 
             # Since no other flags were set, the header ends here.
             # Rather than process the compressed data, let's seek to the trailer.
@@ -358,6 +364,10 @@
             isizeBytes = fRead.read(4)
             self.assertEqual(isizeBytes, struct.pack('<i', len(data1)))
 
+    def test_metadata_ascii_name(self):
+        self.filename = support.TESTFN_ASCII
+        self.test_metadata()
+
     def test_compresslevel_metadata(self):
         # see RFC 1952: http://www.faqs.org/rfcs/rfc1952.html
         # specifically, discussion of XFL in section 2.3.1
@@ -489,7 +499,9 @@
             if "x" in mode:
                 support.unlink(self.filename)
             with open(self.filename, mode) as f:
-                with gzip.GzipFile(fileobj=f) as g:
+                with self.assertWarns(FutureWarning):
+                    g = gzip.GzipFile(fileobj=f)
+                with g:
                     self.assertEqual(g.mode, gzip.WRITE)
 
     def test_bytes_filename(self):
diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
index 8b53d23..86f31a5 100644
--- a/Lib/test/test_hashlib.py
+++ b/Lib/test/test_hashlib.py
@@ -8,30 +8,48 @@
 
 import array
 from binascii import unhexlify
-import functools
 import hashlib
 import importlib
 import itertools
 import os
 import sys
+import sysconfig
 import threading
 import unittest
 import warnings
 from test import support
 from test.support import _4G, bigmemtest, import_fresh_module
-from test.support import requires_hashdigest
 from http.client import HTTPException
 
 # Were we compiled --with-pydebug or with #define Py_DEBUG?
 COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
 
-c_hashlib = import_fresh_module('hashlib', fresh=['_hashlib'])
-py_hashlib = import_fresh_module('hashlib', blocked=['_hashlib'])
+# default builtin hash module
+default_builtin_hashes = {'md5', 'sha1', 'sha256', 'sha512', 'sha3', 'blake2'}
+# --with-builtin-hashlib-hashes override
+builtin_hashes = sysconfig.get_config_var("PY_BUILTIN_HASHLIB_HASHES")
+if builtin_hashes is None:
+    builtin_hashes = default_builtin_hashes
+else:
+    builtin_hashes = {
+        m.strip() for m in builtin_hashes.strip('"').lower().split(",")
+    }
+
+# hashlib with and without OpenSSL backend for PBKDF2
+# only import builtin_hashlib when all builtin hashes are available.
+# Otherwise import prints noise on stderr
+openssl_hashlib = import_fresh_module('hashlib', fresh=['_hashlib'])
+if builtin_hashes == default_builtin_hashes:
+    builtin_hashlib = import_fresh_module('hashlib', blocked=['_hashlib'])
+else:
+    builtin_hashlib = None
 
 try:
-    from _hashlib import HASH
+    from _hashlib import HASH, HASHXOF, openssl_md_meth_names
 except ImportError:
     HASH = None
+    HASHXOF = None
+    openssl_md_meth_names = frozenset()
 
 try:
     import _blake2
@@ -93,7 +111,7 @@
         try:
             return importlib.import_module(module_name)
         except ModuleNotFoundError as error:
-            if self._warn_on_extension_import:
+            if self._warn_on_extension_import and module_name in builtin_hashes:
                 warnings.warn('Did a C extension fail to compile? %s' % error)
         return None
 
@@ -176,20 +194,17 @@
         constructors = self.constructors_to_test.values()
         return itertools.chain.from_iterable(constructors)
 
-    @support.refcount_test
-    @unittest.skipIf(c_hashlib is None, 'Require _hashlib module')
-    def test_refleaks_in_hash___init__(self):
-        gettotalrefcount = support.get_attribute(sys, 'gettotalrefcount')
-        sha1_hash = c_hashlib.new('sha1')
-        refs_before = gettotalrefcount()
-        for i in range(100):
-            sha1_hash.__init__('sha1')
-        self.assertAlmostEqual(gettotalrefcount() - refs_before, 0, delta=10)
+    @property
+    def is_fips_mode(self):
+        if hasattr(self._hashlib, "get_fips_mode"):
+            return self._hashlib.get_fips_mode()
+        else:
+            return None
 
     def test_hash_array(self):
         a = array.array("b", range(10))
         for cons in self.hash_constructors:
-            c = cons(a)
+            c = cons(a, usedforsecurity=False)
             if c.name in self.shakes:
                 c.hexdigest(16)
             else:
@@ -204,6 +219,30 @@
         self.assertTrue(set(hashlib.algorithms_guaranteed).
                             issubset(hashlib.algorithms_available))
 
+    def test_usedforsecurity_true(self):
+        hashlib.new("sha256", usedforsecurity=True)
+        if self.is_fips_mode:
+            self.skipTest("skip in FIPS mode")
+        for cons in self.hash_constructors:
+            cons(usedforsecurity=True)
+            cons(b'', usedforsecurity=True)
+        hashlib.new("md5", usedforsecurity=True)
+        hashlib.md5(usedforsecurity=True)
+        if self._hashlib is not None:
+            self._hashlib.new("md5", usedforsecurity=True)
+            self._hashlib.openssl_md5(usedforsecurity=True)
+
+    def test_usedforsecurity_false(self):
+        hashlib.new("sha256", usedforsecurity=False)
+        for cons in self.hash_constructors:
+            cons(usedforsecurity=False)
+            cons(b'', usedforsecurity=False)
+        hashlib.new("md5", usedforsecurity=False)
+        hashlib.md5(usedforsecurity=False)
+        if self._hashlib is not None:
+            self._hashlib.new("md5", usedforsecurity=False)
+            self._hashlib.openssl_md5(usedforsecurity=False)
+
     def test_unknown_hash(self):
         self.assertRaises(ValueError, hashlib.new, 'spam spam spam spam spam')
         self.assertRaises(TypeError, hashlib.new, 1)
@@ -239,7 +278,7 @@
 
     def test_hexdigest(self):
         for cons in self.hash_constructors:
-            h = cons()
+            h = cons(usedforsecurity=False)
             if h.name in self.shakes:
                 self.assertIsInstance(h.digest(16), bytes)
                 self.assertEqual(hexstr(h.digest(16)), h.hexdigest(16))
@@ -251,9 +290,12 @@
         # See issue #34922
         large_sizes = (2**29, 2**32-10, 2**32+10, 2**61, 2**64-10, 2**64+10)
         for cons in self.hash_constructors:
-            h = cons()
+            h = cons(usedforsecurity=False)
             if h.name not in self.shakes:
                 continue
+            if HASH is not None and isinstance(h, HASH):
+                # _hashopenssl's take a size_t
+                continue
             for digest in h.digest, h.hexdigest:
                 self.assertRaises(ValueError, digest, -10)
                 for length in large_sizes:
@@ -262,13 +304,16 @@
 
     def test_name_attribute(self):
         for cons in self.hash_constructors:
-            h = cons()
+            h = cons(usedforsecurity=False)
             self.assertIsInstance(h.name, str)
             if h.name in self.supported_hash_names:
                 self.assertIn(h.name, self.supported_hash_names)
             else:
                 self.assertNotIn(h.name, self.supported_hash_names)
-            self.assertEqual(h.name, hashlib.new(h.name).name)
+            self.assertEqual(
+                h.name,
+                hashlib.new(h.name, usedforsecurity=False).name
+            )
 
     def test_large_update(self):
         aas = b'a' * 128
@@ -277,7 +322,7 @@
         dees = b'd' * 2048 #  HASHLIB_GIL_MINSIZE
 
         for cons in self.hash_constructors:
-            m1 = cons()
+            m1 = cons(usedforsecurity=False)
             m1.update(aas)
             m1.update(bees)
             m1.update(cees)
@@ -287,15 +332,15 @@
             else:
                 args = ()
 
-            m2 = cons()
+            m2 = cons(usedforsecurity=False)
             m2.update(aas + bees + cees + dees)
             self.assertEqual(m1.digest(*args), m2.digest(*args))
 
-            m3 = cons(aas + bees + cees + dees)
+            m3 = cons(aas + bees + cees + dees, usedforsecurity=False)
             self.assertEqual(m1.digest(*args), m3.digest(*args))
 
             # verify copy() doesn't touch original
-            m4 = cons(aas + bees + cees)
+            m4 = cons(aas + bees + cees, usedforsecurity=False)
             m4_digest = m4.digest(*args)
             m4_copy = m4.copy()
             m4_copy.update(dees)
@@ -355,7 +400,7 @@
                              digest_length=None):
         constructors = self.constructors_to_test[name]
         for hash_object_constructor in constructors:
-            m = hash_object_constructor()
+            m = hash_object_constructor(usedforsecurity=False)
             self.assertEqual(m.block_size, block_size)
             self.assertEqual(m.digest_size, digest_size)
             if digest_length:
@@ -414,15 +459,24 @@
         self.check_blocksize_name('blake2s', 64, 32)
 
     def test_case_md5_0(self):
-        self.check('md5', b'', 'd41d8cd98f00b204e9800998ecf8427e')
+        self.check(
+            'md5', b'', 'd41d8cd98f00b204e9800998ecf8427e',
+            usedforsecurity=False
+        )
 
     def test_case_md5_1(self):
-        self.check('md5', b'abc', '900150983cd24fb0d6963f7d28e17f72')
+        self.check(
+            'md5', b'abc', '900150983cd24fb0d6963f7d28e17f72',
+            usedforsecurity=False
+        )
 
     def test_case_md5_2(self):
-        self.check('md5',
-                   b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
-                   'd174ab98d277d9f5a5611c2c9f419d9f')
+        self.check(
+            'md5',
+            b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
+            'd174ab98d277d9f5a5611c2c9f419d9f',
+            usedforsecurity=False
+        )
 
     @unittest.skipIf(sys.maxsize < _4G + 5, 'test cannot run on 32-bit systems')
     @bigmemtest(size=_4G + 5, memuse=1, dry_run=False)
@@ -802,22 +856,28 @@
         gil_minsize = 2048
 
         for cons in self.hash_constructors:
-            m = cons()
+            m = cons(usedforsecurity=False)
             m.update(b'1')
             m.update(b'#' * gil_minsize)
             m.update(b'1')
 
-            m = cons(b'x' * gil_minsize)
+            m = cons(b'x' * gil_minsize, usedforsecurity=False)
             m.update(b'1')
 
-        m = hashlib.md5()
+        m = hashlib.sha256()
         m.update(b'1')
         m.update(b'#' * gil_minsize)
         m.update(b'1')
-        self.assertEqual(m.hexdigest(), 'cb1e1a2cbc80be75e19935d621fb9b21')
+        self.assertEqual(
+            m.hexdigest(),
+            '1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94'
+        )
 
-        m = hashlib.md5(b'x' * gil_minsize)
-        self.assertEqual(m.hexdigest(), 'cfb767f225d58469c5de3632a8803958')
+        m = hashlib.sha256(b'1' + b'#' * gil_minsize + b'1')
+        self.assertEqual(
+            m.hexdigest(),
+            '1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94'
+        )
 
     @support.reap_threads
     def test_threaded_hashing(self):
@@ -855,6 +915,23 @@
 
         self.assertEqual(expected_hash, hasher.hexdigest())
 
+    def test_get_fips_mode(self):
+        fips_mode = self.is_fips_mode
+        if fips_mode is not None:
+            self.assertIsInstance(fips_mode, int)
+
+    @unittest.skipUnless(HASH is not None, 'need _hashlib')
+    def test_internal_types(self):
+        # internal types like _hashlib.HASH are not constructable
+        with self.assertRaisesRegex(
+            TypeError, "cannot create 'HASH' instance"
+        ):
+            HASH()
+        with self.assertRaisesRegex(
+            TypeError, "cannot create 'HASHXOF' instance"
+        ):
+            HASHXOF()
+
 
 class KDFTests(unittest.TestCase):
 
@@ -913,8 +990,10 @@
             (bytes.fromhex('9d9e9c4cd21fe4be24d5b8244c759665'), None),],
     }
 
-    def _test_pbkdf2_hmac(self, pbkdf2):
+    def _test_pbkdf2_hmac(self, pbkdf2, supported):
         for digest_name, results in self.pbkdf2_results.items():
+            if digest_name not in supported:
+                continue
             for i, vector in enumerate(self.pbkdf2_test_vectors):
                 password, salt, rounds, dklen = vector
                 expected, overwrite_dklen = results[i]
@@ -925,6 +1004,7 @@
                                  (digest_name, password, salt, rounds, dklen))
                 out = pbkdf2(digest_name, memoryview(password),
                              memoryview(salt), rounds, dklen)
+                self.assertEqual(out, expected)
                 out = pbkdf2(digest_name, bytearray(password),
                              bytearray(salt), rounds, dklen)
                 self.assertEqual(out, expected)
@@ -933,28 +1013,42 @@
                     self.assertEqual(out, expected,
                                      (digest_name, password, salt, rounds))
 
-        self.assertRaises(TypeError, pbkdf2, b'sha1', b'pass', b'salt', 1)
-        self.assertRaises(TypeError, pbkdf2, 'sha1', 'pass', 'salt', 1)
-        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', 0)
-        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', -1)
-        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', 1, 0)
-        self.assertRaises(ValueError, pbkdf2, 'sha1', b'pass', b'salt', 1, -1)
         with self.assertRaisesRegex(ValueError, 'unsupported hash type'):
             pbkdf2('unknown', b'pass', b'salt', 1)
-        out = pbkdf2(hash_name='sha1', password=b'password', salt=b'salt',
-            iterations=1, dklen=None)
-        self.assertEqual(out, self.pbkdf2_results['sha1'][0][0])
 
+        if 'sha1' in supported:
+            self.assertRaises(
+                TypeError, pbkdf2, b'sha1', b'pass', b'salt', 1
+            )
+            self.assertRaises(
+                TypeError, pbkdf2, 'sha1', 'pass', 'salt', 1
+            )
+            self.assertRaises(
+                ValueError, pbkdf2, 'sha1', b'pass', b'salt', 0
+            )
+            self.assertRaises(
+                ValueError, pbkdf2, 'sha1', b'pass', b'salt', -1
+            )
+            self.assertRaises(
+                ValueError, pbkdf2, 'sha1', b'pass', b'salt', 1, 0
+            )
+            self.assertRaises(
+                ValueError, pbkdf2, 'sha1', b'pass', b'salt', 1, -1
+            )
+            out = pbkdf2(hash_name='sha1', password=b'password', salt=b'salt',
+                iterations=1, dklen=None)
+            self.assertEqual(out, self.pbkdf2_results['sha1'][0][0])
+
+    @unittest.skipIf(builtin_hashlib is None, "test requires builtin_hashlib")
     def test_pbkdf2_hmac_py(self):
-        self._test_pbkdf2_hmac(py_hashlib.pbkdf2_hmac)
+        self._test_pbkdf2_hmac(builtin_hashlib.pbkdf2_hmac, builtin_hashes)
 
-    @unittest.skipUnless(hasattr(c_hashlib, 'pbkdf2_hmac'),
+    @unittest.skipUnless(hasattr(openssl_hashlib, 'pbkdf2_hmac'),
                      '   test requires OpenSSL > 1.0')
     def test_pbkdf2_hmac_c(self):
-        self._test_pbkdf2_hmac(c_hashlib.pbkdf2_hmac)
+        self._test_pbkdf2_hmac(openssl_hashlib.pbkdf2_hmac, openssl_md_meth_names)
 
-
-    @unittest.skipUnless(hasattr(c_hashlib, 'scrypt'),
+    @unittest.skipUnless(hasattr(hashlib, 'scrypt'),
                      '   test requires OpenSSL > 1.1')
     def test_scrypt(self):
         for password, salt, n, r, p, expected in self.scrypt_test_vectors:
diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py
index 23c108f..6daf22c 100644
--- a/Lib/test/test_hmac.py
+++ b/Lib/test/test_hmac.py
@@ -6,7 +6,18 @@
 import unittest.mock
 import warnings
 
-from test.support import requires_hashdigest
+from test.support import hashlib_helper
+
+from _operator import _compare_digest as operator_compare_digest
+
+try:
+    from _hashlib import HMAC as C_HMAC
+    from _hashlib import hmac_new as c_hmac_new
+    from _hashlib import compare_digest as openssl_compare_digest
+except ImportError:
+    C_HMAC = None
+    c_hmac_new = None
+    openssl_compare_digest = None
 
 
 def ignore_warning(func):
@@ -21,34 +32,91 @@
 
 class TestVectorsTestCase(unittest.TestCase):
 
-    @requires_hashdigest('md5', openssl=True)
+    def asssert_hmac(
+        self, key, data, digest, hashfunc, hashname, digest_size, block_size
+    ):
+        h = hmac.HMAC(key, data, digestmod=hashfunc)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+        self.assertEqual(h.digest(), binascii.unhexlify(digest))
+        self.assertEqual(h.name, f"hmac-{hashname}")
+        self.assertEqual(h.digest_size, digest_size)
+        self.assertEqual(h.block_size, block_size)
+
+        h = hmac.HMAC(key, data, digestmod=hashname)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+        self.assertEqual(h.digest(), binascii.unhexlify(digest))
+        self.assertEqual(h.name, f"hmac-{hashname}")
+        self.assertEqual(h.digest_size, digest_size)
+        self.assertEqual(h.block_size, block_size)
+
+        h = hmac.HMAC(key, digestmod=hashname)
+        h2 = h.copy()
+        h2.update(b"test update")
+        h.update(data)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+
+        h = hmac.new(key, data, digestmod=hashname)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+        self.assertEqual(h.digest(), binascii.unhexlify(digest))
+        self.assertEqual(h.name, f"hmac-{hashname}")
+        self.assertEqual(h.digest_size, digest_size)
+        self.assertEqual(h.block_size, block_size)
+
+        h = hmac.new(key, None, digestmod=hashname)
+        h.update(data)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+
+        h = hmac.new(key, digestmod=hashname)
+        h.update(data)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+
+        h = hmac.new(key, data, digestmod=hashfunc)
+        self.assertEqual(h.hexdigest().upper(), digest.upper())
+
+        self.assertEqual(
+            hmac.digest(key, data, digest=hashname),
+            binascii.unhexlify(digest)
+        )
+        self.assertEqual(
+            hmac.digest(key, data, digest=hashfunc),
+            binascii.unhexlify(digest)
+        )
+        with unittest.mock.patch('hmac._openssl_md_meths', {}):
+            self.assertEqual(
+                hmac.digest(key, data, digest=hashname),
+                binascii.unhexlify(digest)
+            )
+            self.assertEqual(
+                hmac.digest(key, data, digest=hashfunc),
+                binascii.unhexlify(digest)
+            )
+
+        if c_hmac_new is not None:
+            h = c_hmac_new(key, data, digestmod=hashname)
+            self.assertEqual(h.hexdigest().upper(), digest.upper())
+            self.assertEqual(h.digest(), binascii.unhexlify(digest))
+            self.assertEqual(h.name, f"hmac-{hashname}")
+            self.assertEqual(h.digest_size, digest_size)
+            self.assertEqual(h.block_size, block_size)
+
+            h = c_hmac_new(key, digestmod=hashname)
+            h2 = h.copy()
+            h2.update(b"test update")
+            h.update(data)
+            self.assertEqual(h.hexdigest().upper(), digest.upper())
+
+    @hashlib_helper.requires_hashdigest('md5', openssl=True)
     def test_md5_vectors(self):
         # Test the HMAC module against test vectors from the RFC.
 
         def md5test(key, data, digest):
-            h = hmac.HMAC(key, data, digestmod=hashlib.md5)
-            self.assertEqual(h.hexdigest().upper(), digest.upper())
-            self.assertEqual(h.digest(), binascii.unhexlify(digest))
-            self.assertEqual(h.name, "hmac-md5")
-            self.assertEqual(h.digest_size, 16)
-            self.assertEqual(h.block_size, 64)
-
-            h = hmac.HMAC(key, data, digestmod='md5')
-            self.assertEqual(h.hexdigest().upper(), digest.upper())
-            self.assertEqual(h.digest(), binascii.unhexlify(digest))
-            self.assertEqual(h.name, "hmac-md5")
-            self.assertEqual(h.digest_size, 16)
-            self.assertEqual(h.block_size, 64)
-
-            self.assertEqual(
-                hmac.digest(key, data, digest='md5'),
-                binascii.unhexlify(digest)
+            self.asssert_hmac(
+                key, data, digest,
+                hashfunc=hashlib.md5,
+                hashname="md5",
+                digest_size=16,
+                block_size=64
             )
-            with unittest.mock.patch('hmac._openssl_md_meths', {}):
-                self.assertEqual(
-                    hmac.digest(key, data, digest='md5'),
-                    binascii.unhexlify(digest)
-                )
 
         md5test(b"\x0b" * 16,
                 b"Hi There",
@@ -79,29 +147,17 @@
                  b"and Larger Than One Block-Size Data"),
                 "6f630fad67cda0ee1fb1f562db3aa53e")
 
-    @requires_hashdigest('sha1', openssl=True)
+    @hashlib_helper.requires_hashdigest('sha1', openssl=True)
     def test_sha_vectors(self):
         def shatest(key, data, digest):
-            h = hmac.HMAC(key, data, digestmod=hashlib.sha1)
-            self.assertEqual(h.hexdigest().upper(), digest.upper())
-            self.assertEqual(h.digest(), binascii.unhexlify(digest))
-            self.assertEqual(h.name, "hmac-sha1")
-            self.assertEqual(h.digest_size, 20)
-            self.assertEqual(h.block_size, 64)
-
-            h = hmac.HMAC(key, data, digestmod='sha1')
-            self.assertEqual(h.hexdigest().upper(), digest.upper())
-            self.assertEqual(h.digest(), binascii.unhexlify(digest))
-            self.assertEqual(h.name, "hmac-sha1")
-            self.assertEqual(h.digest_size, 20)
-            self.assertEqual(h.block_size, 64)
-
-            self.assertEqual(
-                hmac.digest(key, data, digest='sha1'),
-                binascii.unhexlify(digest)
+            self.asssert_hmac(
+                key, data, digest,
+                hashfunc=hashlib.sha1,
+                hashname="sha1",
+                digest_size=20,
+                block_size=64
             )
 
-
         shatest(b"\x0b" * 20,
                 b"Hi There",
                 "b617318655057264e28bc0b6fb378c8ef146be00")
@@ -133,37 +189,15 @@
 
     def _rfc4231_test_cases(self, hashfunc, hash_name, digest_size, block_size):
         def hmactest(key, data, hexdigests):
-            hmac_name = "hmac-" + hash_name
-            h = hmac.HMAC(key, data, digestmod=hashfunc)
-            self.assertEqual(h.hexdigest().lower(), hexdigests[hashfunc])
-            self.assertEqual(h.name, hmac_name)
-            self.assertEqual(h.digest_size, digest_size)
-            self.assertEqual(h.block_size, block_size)
+            digest = hexdigests[hashfunc]
 
-            h = hmac.HMAC(key, data, digestmod=hash_name)
-            self.assertEqual(h.hexdigest().lower(), hexdigests[hashfunc])
-            self.assertEqual(h.name, hmac_name)
-            self.assertEqual(h.digest_size, digest_size)
-            self.assertEqual(h.block_size, block_size)
-
-            self.assertEqual(
-                hmac.digest(key, data, digest=hashfunc),
-                binascii.unhexlify(hexdigests[hashfunc])
+            self.asssert_hmac(
+                key, data, digest,
+                hashfunc=hashfunc,
+                hashname=hash_name,
+                digest_size=digest_size,
+                block_size=block_size
             )
-            self.assertEqual(
-                hmac.digest(key, data, digest=hash_name),
-                binascii.unhexlify(hexdigests[hashfunc])
-            )
-
-            with unittest.mock.patch('hmac._openssl_md_meths', {}):
-                self.assertEqual(
-                    hmac.digest(key, data, digest=hashfunc),
-                    binascii.unhexlify(hexdigests[hashfunc])
-                )
-                self.assertEqual(
-                    hmac.digest(key, data, digest=hash_name),
-                    binascii.unhexlify(hexdigests[hashfunc])
-                )
 
         # 4.2.  Test Case 1
         hmactest(key = b'\x0b'*20,
@@ -272,23 +306,23 @@
                                    '134676fb6de0446065c97440fa8c6a58',
                  })
 
-    @requires_hashdigest('sha224', openssl=True)
+    @hashlib_helper.requires_hashdigest('sha224', openssl=True)
     def test_sha224_rfc4231(self):
         self._rfc4231_test_cases(hashlib.sha224, 'sha224', 28, 64)
 
-    @requires_hashdigest('sha256', openssl=True)
+    @hashlib_helper.requires_hashdigest('sha256', openssl=True)
     def test_sha256_rfc4231(self):
         self._rfc4231_test_cases(hashlib.sha256, 'sha256', 32, 64)
 
-    @requires_hashdigest('sha384', openssl=True)
+    @hashlib_helper.requires_hashdigest('sha384', openssl=True)
     def test_sha384_rfc4231(self):
         self._rfc4231_test_cases(hashlib.sha384, 'sha384', 48, 128)
 
-    @requires_hashdigest('sha512', openssl=True)
+    @hashlib_helper.requires_hashdigest('sha512', openssl=True)
     def test_sha512_rfc4231(self):
         self._rfc4231_test_cases(hashlib.sha512, 'sha512', 64, 128)
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_legacy_block_size_warnings(self):
         class MockCrazyHash(object):
             """Ain't no block_size attribute here."""
@@ -329,7 +363,7 @@
         "6c845b47f52b3b47f6590c502db7825aad757bf4fadc8fa972f7cd2e76a5bdeb"
     )
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_normal(self):
         # Standard constructor call.
         try:
@@ -337,21 +371,21 @@
         except Exception:
             self.fail("Standard constructor call raised exception.")
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_with_str_key(self):
         # Pass a key of type str, which is an error, because it expects a key
         # of type bytes
         with self.assertRaises(TypeError):
             h = hmac.HMAC("key", digestmod='sha256')
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_dot_new_with_str_key(self):
         # Pass a key of type str, which is an error, because it expects a key
         # of type bytes
         with self.assertRaises(TypeError):
             h = hmac.new("key", digestmod='sha256')
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_withtext(self):
         # Constructor call with text.
         try:
@@ -360,7 +394,7 @@
             self.fail("Constructor call with text argument raised exception.")
         self.assertEqual(h.hexdigest(), self.expected)
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_with_bytearray(self):
         try:
             h = hmac.HMAC(bytearray(b"key"), bytearray(b"hash this!"),
@@ -369,7 +403,7 @@
             self.fail("Constructor call with bytearray arguments raised exception.")
         self.assertEqual(h.hexdigest(), self.expected)
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_with_memoryview_msg(self):
         try:
             h = hmac.HMAC(b"key", memoryview(b"hash this!"), digestmod="sha256")
@@ -377,7 +411,7 @@
             self.fail("Constructor call with memoryview msg raised exception.")
         self.assertEqual(h.hexdigest(), self.expected)
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_withmodule(self):
         # Constructor call with text and digest module.
         try:
@@ -385,50 +419,69 @@
         except Exception:
             self.fail("Constructor call with hashlib.sha256 raised exception.")
 
+    @unittest.skipUnless(C_HMAC is not None, 'need _hashlib')
+    def test_internal_types(self):
+        # internal types like _hashlib.C_HMAC are not constructable
+        with self.assertRaisesRegex(
+            TypeError, "cannot create 'HMAC' instance"
+        ):
+            C_HMAC()
+
 
 class SanityTestCase(unittest.TestCase):
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_exercise_all_methods(self):
         # Exercising all methods once.
         # This must not raise any exceptions
         try:
             h = hmac.HMAC(b"my secret key", digestmod="sha256")
             h.update(b"compute the hash of this text!")
-            dig = h.digest()
-            dig = h.hexdigest()
-            h2 = h.copy()
+            h.digest()
+            h.hexdigest()
+            h.copy()
         except Exception:
             self.fail("Exception raised during normal usage of HMAC class.")
 
 
 class CopyTestCase(unittest.TestCase):
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_attributes(self):
         # Testing if attributes are of same type.
         h1 = hmac.HMAC(b"key", digestmod="sha256")
         h2 = h1.copy()
-        self.assertTrue(h1.digest_cons == h2.digest_cons,
+        self.assertTrue(h1._digest_cons == h2._digest_cons,
             "digest constructors don't match.")
-        self.assertEqual(type(h1.inner), type(h2.inner),
+        self.assertEqual(type(h1._inner), type(h2._inner),
             "Types of inner don't match.")
-        self.assertEqual(type(h1.outer), type(h2.outer),
+        self.assertEqual(type(h1._outer), type(h2._outer),
             "Types of outer don't match.")
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_realcopy(self):
         # Testing if the copy method created a real copy.
         h1 = hmac.HMAC(b"key", digestmod="sha256")
         h2 = h1.copy()
         # Using id() in case somebody has overridden __eq__/__ne__.
         self.assertTrue(id(h1) != id(h2), "No real copy of the HMAC instance.")
-        self.assertTrue(id(h1.inner) != id(h2.inner),
+        self.assertTrue(id(h1._inner) != id(h2._inner),
             "No real copy of the attribute 'inner'.")
-        self.assertTrue(id(h1.outer) != id(h2.outer),
+        self.assertTrue(id(h1._outer) != id(h2._outer),
             "No real copy of the attribute 'outer'.")
+        self.assertEqual(h1._inner, h1.inner)
+        self.assertEqual(h1._outer, h1.outer)
+        self.assertEqual(h1._digest_cons, h1.digest_cons)
 
-    @requires_hashdigest('sha256')
+    @hashlib_helper.requires_hashdigest('sha256')
+    def test_properties(self):
+        # deprecated properties
+        h1 = hmac.HMAC(b"key", digestmod="sha256")
+        self.assertEqual(h1._inner, h1.inner)
+        self.assertEqual(h1._outer, h1.outer)
+        self.assertEqual(h1._digest_cons, h1.digest_cons)
+
+    @hashlib_helper.requires_hashdigest('sha256')
     def test_equality(self):
         # Testing if the copy has the same digests.
         h1 = hmac.HMAC(b"key", digestmod="sha256")
@@ -439,89 +492,118 @@
         self.assertEqual(h1.hexdigest(), h2.hexdigest(),
             "Hexdigest of copy doesn't match original hexdigest.")
 
+    @hashlib_helper.requires_hashdigest('sha256')
+    def test_equality_new(self):
+        # Testing if the copy has the same digests with hmac.new().
+        h1 = hmac.new(b"key", digestmod="sha256")
+        h1.update(b"some random text")
+        h2 = h1.copy()
+        self.assertTrue(
+            id(h1) != id(h2), "No real copy of the HMAC instance."
+        )
+        self.assertEqual(h1.digest(), h2.digest(),
+            "Digest of copy doesn't match original digest.")
+        self.assertEqual(h1.hexdigest(), h2.hexdigest(),
+            "Hexdigest of copy doesn't match original hexdigest.")
+
+
 class CompareDigestTestCase(unittest.TestCase):
 
-    def test_compare_digest(self):
+    def test_hmac_compare_digest(self):
+        self._test_compare_digest(hmac.compare_digest)
+        if openssl_compare_digest is not None:
+            self.assertIs(hmac.compare_digest, openssl_compare_digest)
+        else:
+            self.assertIs(hmac.compare_digest, operator_compare_digest)
+
+    def test_operator_compare_digest(self):
+        self._test_compare_digest(operator_compare_digest)
+
+    @unittest.skipIf(openssl_compare_digest is None, "test requires _hashlib")
+    def test_openssl_compare_digest(self):
+        self._test_compare_digest(openssl_compare_digest)
+
+    def _test_compare_digest(self, compare_digest):
         # Testing input type exception handling
         a, b = 100, 200
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = 100, b"foobar"
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = b"foobar", 200
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = "foobar", b"foobar"
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = b"foobar", "foobar"
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
 
         # Testing bytes of different lengths
         a, b = b"foobar", b"foo"
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
         a, b = b"\xde\xad\xbe\xef", b"\xde\xad"
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         # Testing bytes of same lengths, different values
         a, b = b"foobar", b"foobaz"
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
         a, b = b"\xde\xad\xbe\xef", b"\xab\xad\x1d\xea"
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         # Testing bytes of same lengths, same values
         a, b = b"foobar", b"foobar"
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
         a, b = b"\xde\xad\xbe\xef", b"\xde\xad\xbe\xef"
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
 
         # Testing bytearrays of same lengths, same values
         a, b = bytearray(b"foobar"), bytearray(b"foobar")
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
 
         # Testing bytearrays of different lengths
         a, b = bytearray(b"foobar"), bytearray(b"foo")
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         # Testing bytearrays of same lengths, different values
         a, b = bytearray(b"foobar"), bytearray(b"foobaz")
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         # Testing byte and bytearray of same lengths, same values
         a, b = bytearray(b"foobar"), b"foobar"
-        self.assertTrue(hmac.compare_digest(a, b))
-        self.assertTrue(hmac.compare_digest(b, a))
+        self.assertTrue(compare_digest(a, b))
+        self.assertTrue(compare_digest(b, a))
 
         # Testing byte bytearray of different lengths
         a, b = bytearray(b"foobar"), b"foo"
-        self.assertFalse(hmac.compare_digest(a, b))
-        self.assertFalse(hmac.compare_digest(b, a))
+        self.assertFalse(compare_digest(a, b))
+        self.assertFalse(compare_digest(b, a))
 
         # Testing byte and bytearray of same lengths, different values
         a, b = bytearray(b"foobar"), b"foobaz"
-        self.assertFalse(hmac.compare_digest(a, b))
-        self.assertFalse(hmac.compare_digest(b, a))
+        self.assertFalse(compare_digest(a, b))
+        self.assertFalse(compare_digest(b, a))
 
         # Testing str of same lengths
         a, b = "foobar", "foobar"
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
 
         # Testing str of different lengths
         a, b = "foo", "foobar"
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         # Testing bytes of same lengths, different values
         a, b = "foobar", "foobaz"
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         # Testing error cases
         a, b = "foobar", b"foobar"
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = b"foobar", "foobar"
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = b"foobar", 1
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = 100, 200
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
         a, b = "fooä", "fooä"
-        self.assertRaises(TypeError, hmac.compare_digest, a, b)
+        self.assertRaises(TypeError, compare_digest, a, b)
 
         # subclasses are supported by ignore __eq__
         class mystr(str):
@@ -529,22 +611,22 @@
                 return False
 
         a, b = mystr("foobar"), mystr("foobar")
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
         a, b = mystr("foobar"), "foobar"
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
         a, b = mystr("foobar"), mystr("foobaz")
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
         class mybytes(bytes):
             def __eq__(self, other):
                 return False
 
         a, b = mybytes(b"foobar"), mybytes(b"foobar")
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
         a, b = mybytes(b"foobar"), b"foobar"
-        self.assertTrue(hmac.compare_digest(a, b))
+        self.assertTrue(compare_digest(a, b))
         a, b = mybytes(b"foobar"), mybytes(b"foobaz")
-        self.assertFalse(hmac.compare_digest(a, b))
+        self.assertFalse(compare_digest(a, b))
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_htmlparser.py b/Lib/test/test_htmlparser.py
index 326e342..a2bfb39 100644
--- a/Lib/test/test_htmlparser.py
+++ b/Lib/test/test_htmlparser.py
@@ -573,13 +573,6 @@
         for html, expected in data:
             self._run_check(html, expected)
 
-    def test_unescape_method(self):
-        from html import unescape
-        p = self.get_collector()
-        with self.assertWarns(DeprecationWarning):
-            s = '&quot;&#34;&#x22;&quot&#34&#x22&#bad;'
-            self.assertEqual(p.unescape(s), unescape(s))
-
     def test_broken_comments(self):
         html = ('<! not really a comment >'
                 '<! not a comment either -->'
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
index 5a5fcec..ed12589 100644
--- a/Lib/test/test_httplib.py
+++ b/Lib/test/test_httplib.py
@@ -13,6 +13,7 @@
 TestCase = unittest.TestCase
 
 from test import support
+from test.support import socket_helper
 
 here = os.path.dirname(__file__)
 # Self-signed cert file for 'localhost'
@@ -42,7 +43,7 @@
 trailers = "X-Dummy: foo\r\nX-Dumm2: bar\r\n"
 chunked_end = "\r\n"
 
-HOST = support.HOST
+HOST = socket_helper.HOST
 
 class FakeSocket:
     def __init__(self, text, fileclass=io.BytesIO, host=None, port=None):
@@ -1455,6 +1456,7 @@
             'UNSUPPORTED_MEDIA_TYPE',
             'REQUESTED_RANGE_NOT_SATISFIABLE',
             'EXPECTATION_FAILED',
+            'IM_A_TEAPOT',
             'MISDIRECTED_REQUEST',
             'UNPROCESSABLE_ENTITY',
             'LOCKED',
@@ -1473,6 +1475,8 @@
             'INSUFFICIENT_STORAGE',
             'NOT_EXTENDED',
             'NETWORK_AUTHENTICATION_REQUIRED',
+            'EARLY_HINTS',
+            'TOO_EARLY'
         ]
         for const in expected:
             with self.subTest(constant=const):
@@ -1482,8 +1486,8 @@
 class SourceAddressTest(TestCase):
     def setUp(self):
         self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.port = support.bind_port(self.serv)
-        self.source_port = support.find_unused_port()
+        self.port = socket_helper.bind_port(self.serv)
+        self.source_port = socket_helper.find_unused_port()
         self.serv.listen()
         self.conn = None
 
@@ -1515,7 +1519,7 @@
 
     def setUp(self):
         self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        TimeoutTest.PORT = support.bind_port(self.serv)
+        TimeoutTest.PORT = socket_helper.bind_port(self.serv)
         self.serv.listen()
 
     def tearDown(self):
@@ -1647,7 +1651,7 @@
         # Default settings: requires a valid cert from a trusted CA
         import ssl
         support.requires('network')
-        with support.transient_internet('self-signed.pythontest.net'):
+        with socket_helper.transient_internet('self-signed.pythontest.net'):
             h = client.HTTPSConnection('self-signed.pythontest.net', 443)
             with self.assertRaises(ssl.SSLError) as exc_info:
                 h.request('GET', '/')
@@ -1657,7 +1661,7 @@
         # Switch off cert verification
         import ssl
         support.requires('network')
-        with support.transient_internet('self-signed.pythontest.net'):
+        with socket_helper.transient_internet('self-signed.pythontest.net'):
             context = ssl._create_unverified_context()
             h = client.HTTPSConnection('self-signed.pythontest.net', 443,
                                        context=context)
@@ -1671,7 +1675,7 @@
     def test_networked_trusted_by_default_cert(self):
         # Default settings: requires a valid cert from a trusted CA
         support.requires('network')
-        with support.transient_internet('www.python.org'):
+        with socket_helper.transient_internet('www.python.org'):
             h = client.HTTPSConnection('www.python.org', 443)
             h.request('GET', '/')
             resp = h.getresponse()
@@ -1685,7 +1689,7 @@
         import ssl
         support.requires('network')
         selfsigned_pythontestdotnet = 'self-signed.pythontest.net'
-        with support.transient_internet(selfsigned_pythontestdotnet):
+        with socket_helper.transient_internet(selfsigned_pythontestdotnet):
             context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
             self.assertEqual(context.verify_mode, ssl.CERT_REQUIRED)
             self.assertEqual(context.check_hostname, True)
@@ -1717,7 +1721,7 @@
         # We feed a "CA" cert that is unrelated to the server's cert
         import ssl
         support.requires('network')
-        with support.transient_internet('self-signed.pythontest.net'):
+        with socket_helper.transient_internet('self-signed.pythontest.net'):
             context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
             context.load_verify_locations(CERT_localhost)
             h = client.HTTPSConnection('self-signed.pythontest.net', 443, context=context)
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
index 87d4924..8df0b52 100644
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -3,7 +3,7 @@
 Written by Cody A.W. Somerville <cody-somerville@ubuntu.com>,
 Josip Dzolonga, and Michael Otteneder for the 2007/08 GHOP contest.
 """
-
+from collections import OrderedDict
 from http.server import BaseHTTPRequestHandler, HTTPServer, \
      SimpleHTTPRequestHandler, CGIHTTPRequestHandler
 from http import server, HTTPStatus
@@ -14,11 +14,12 @@
 import re
 import base64
 import ntpath
+import pathlib
 import shutil
 import email.message
 import email.utils
 import html
-import http.client
+import http, http.client
 import urllib.parse
 import tempfile
 import time
@@ -585,6 +586,15 @@
 print(os.environ["%s"])
 """
 
+cgi_file6 = """\
+#!%s
+import os
+
+print("Content-type: text/plain")
+print()
+print(repr(os.environ))
+"""
+
 
 @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
         "This test can't be run reliably as root (issue #13308).")
@@ -600,13 +610,20 @@
         self.parent_dir = tempfile.mkdtemp()
         self.cgi_dir = os.path.join(self.parent_dir, 'cgi-bin')
         self.cgi_child_dir = os.path.join(self.cgi_dir, 'child-dir')
+        self.sub_dir_1 = os.path.join(self.parent_dir, 'sub')
+        self.sub_dir_2 = os.path.join(self.sub_dir_1, 'dir')
+        self.cgi_dir_in_sub_dir = os.path.join(self.sub_dir_2, 'cgi-bin')
         os.mkdir(self.cgi_dir)
         os.mkdir(self.cgi_child_dir)
+        os.mkdir(self.sub_dir_1)
+        os.mkdir(self.sub_dir_2)
+        os.mkdir(self.cgi_dir_in_sub_dir)
         self.nocgi_path = None
         self.file1_path = None
         self.file2_path = None
         self.file3_path = None
         self.file4_path = None
+        self.file5_path = None
 
         # The shebang line should be pure ASCII: use symlink if possible.
         # See issue #7668.
@@ -651,6 +668,16 @@
             file4.write(cgi_file4 % (self.pythonexe, 'QUERY_STRING'))
         os.chmod(self.file4_path, 0o777)
 
+        self.file5_path = os.path.join(self.cgi_dir_in_sub_dir, 'file5.py')
+        with open(self.file5_path, 'w', encoding='utf-8') as file5:
+            file5.write(cgi_file1 % self.pythonexe)
+        os.chmod(self.file5_path, 0o777)
+
+        self.file6_path = os.path.join(self.cgi_dir, 'file6.py')
+        with open(self.file6_path, 'w', encoding='utf-8') as file6:
+            file6.write(cgi_file6 % self.pythonexe)
+        os.chmod(self.file6_path, 0o777)
+
         os.chdir(self.parent_dir)
 
     def tearDown(self):
@@ -668,8 +695,15 @@
                 os.remove(self.file3_path)
             if self.file4_path:
                 os.remove(self.file4_path)
+            if self.file5_path:
+                os.remove(self.file5_path)
+            if self.file6_path:
+                os.remove(self.file6_path)
             os.rmdir(self.cgi_child_dir)
             os.rmdir(self.cgi_dir)
+            os.rmdir(self.cgi_dir_in_sub_dir)
+            os.rmdir(self.sub_dir_2)
+            os.rmdir(self.sub_dir_1)
             os.rmdir(self.parent_dir)
         finally:
             BaseTestCase.tearDown(self)
@@ -788,12 +822,40 @@
              'text/html', HTTPStatus.OK),
             (res.read(), res.getheader('Content-type'), res.status))
 
+    def test_cgi_path_in_sub_directories(self):
+        try:
+            CGIHTTPRequestHandler.cgi_directories.append('/sub/dir/cgi-bin')
+            res = self.request('/sub/dir/cgi-bin/file5.py')
+            self.assertEqual(
+                (b'Hello World' + self.linesep, 'text/html', HTTPStatus.OK),
+                (res.read(), res.getheader('Content-type'), res.status))
+        finally:
+            CGIHTTPRequestHandler.cgi_directories.remove('/sub/dir/cgi-bin')
+
+    def test_accept(self):
+        browser_accept = \
+                    'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
+        tests = (
+            ((('Accept', browser_accept),), browser_accept),
+            ((), ''),
+            # Hack case to get two values for the one header
+            ((('Accept', 'text/html'), ('ACCEPT', 'text/plain')),
+               'text/html,text/plain'),
+        )
+        for headers, expected in tests:
+            headers = OrderedDict(headers)
+            with self.subTest(headers):
+                res = self.request('/cgi-bin/file6.py', 'GET', headers=headers)
+                self.assertEqual(http.HTTPStatus.OK, res.status)
+                expected = f"'HTTP_ACCEPT': {expected!r}"
+                self.assertIn(expected.encode('ascii'), res.read())
+
 
 class SocketlessRequestHandler(SimpleHTTPRequestHandler):
-    def __init__(self, *args, **kwargs):
+    def __init__(self, directory=None):
         request = mock.Mock()
         request.makefile.return_value = BytesIO()
-        super().__init__(request, None, None)
+        super().__init__(request, None, None, directory=directory)
 
         self.get_called = False
         self.protocol_version = "HTTP/1.1"
@@ -1068,41 +1130,91 @@
 class SimpleHTTPRequestHandlerTestCase(unittest.TestCase):
     """ Test url parsing """
     def setUp(self):
-        self.translated = os.getcwd()
-        self.translated = os.path.join(self.translated, 'filename')
-        self.handler = SocketlessRequestHandler()
+        self.translated_1 = os.path.join(os.getcwd(), 'filename')
+        self.translated_2 = os.path.join('foo', 'filename')
+        self.translated_3 = os.path.join('bar', 'filename')
+        self.handler_1 = SocketlessRequestHandler()
+        self.handler_2 = SocketlessRequestHandler(directory='foo')
+        self.handler_3 = SocketlessRequestHandler(directory=pathlib.PurePath('bar'))
 
     def test_query_arguments(self):
-        path = self.handler.translate_path('/filename')
-        self.assertEqual(path, self.translated)
-        path = self.handler.translate_path('/filename?foo=bar')
-        self.assertEqual(path, self.translated)
-        path = self.handler.translate_path('/filename?a=b&spam=eggs#zot')
-        self.assertEqual(path, self.translated)
+        path = self.handler_1.translate_path('/filename')
+        self.assertEqual(path, self.translated_1)
+        path = self.handler_2.translate_path('/filename')
+        self.assertEqual(path, self.translated_2)
+        path = self.handler_3.translate_path('/filename')
+        self.assertEqual(path, self.translated_3)
+
+        path = self.handler_1.translate_path('/filename?foo=bar')
+        self.assertEqual(path, self.translated_1)
+        path = self.handler_2.translate_path('/filename?foo=bar')
+        self.assertEqual(path, self.translated_2)
+        path = self.handler_3.translate_path('/filename?foo=bar')
+        self.assertEqual(path, self.translated_3)
+
+        path = self.handler_1.translate_path('/filename?a=b&spam=eggs#zot')
+        self.assertEqual(path, self.translated_1)
+        path = self.handler_2.translate_path('/filename?a=b&spam=eggs#zot')
+        self.assertEqual(path, self.translated_2)
+        path = self.handler_3.translate_path('/filename?a=b&spam=eggs#zot')
+        self.assertEqual(path, self.translated_3)
 
     def test_start_with_double_slash(self):
-        path = self.handler.translate_path('//filename')
-        self.assertEqual(path, self.translated)
-        path = self.handler.translate_path('//filename?foo=bar')
-        self.assertEqual(path, self.translated)
+        path = self.handler_1.translate_path('//filename')
+        self.assertEqual(path, self.translated_1)
+        path = self.handler_2.translate_path('//filename')
+        self.assertEqual(path, self.translated_2)
+        path = self.handler_3.translate_path('//filename')
+        self.assertEqual(path, self.translated_3)
+
+        path = self.handler_1.translate_path('//filename?foo=bar')
+        self.assertEqual(path, self.translated_1)
+        path = self.handler_2.translate_path('//filename?foo=bar')
+        self.assertEqual(path, self.translated_2)
+        path = self.handler_3.translate_path('//filename?foo=bar')
+        self.assertEqual(path, self.translated_3)
 
     def test_windows_colon(self):
         with support.swap_attr(server.os, 'path', ntpath):
-            path = self.handler.translate_path('c:c:c:foo/filename')
+            path = self.handler_1.translate_path('c:c:c:foo/filename')
             path = path.replace(ntpath.sep, os.sep)
-            self.assertEqual(path, self.translated)
+            self.assertEqual(path, self.translated_1)
+            path = self.handler_2.translate_path('c:c:c:foo/filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_2)
+            path = self.handler_3.translate_path('c:c:c:foo/filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_3)
 
-            path = self.handler.translate_path('\\c:../filename')
+            path = self.handler_1.translate_path('\\c:../filename')
             path = path.replace(ntpath.sep, os.sep)
-            self.assertEqual(path, self.translated)
+            self.assertEqual(path, self.translated_1)
+            path = self.handler_2.translate_path('\\c:../filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_2)
+            path = self.handler_3.translate_path('\\c:../filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_3)
 
-            path = self.handler.translate_path('c:\\c:..\\foo/filename')
+            path = self.handler_1.translate_path('c:\\c:..\\foo/filename')
             path = path.replace(ntpath.sep, os.sep)
-            self.assertEqual(path, self.translated)
+            self.assertEqual(path, self.translated_1)
+            path = self.handler_2.translate_path('c:\\c:..\\foo/filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_2)
+            path = self.handler_3.translate_path('c:\\c:..\\foo/filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_3)
 
-            path = self.handler.translate_path('c:c:foo\\c:c:bar/filename')
+            path = self.handler_1.translate_path('c:c:foo\\c:c:bar/filename')
             path = path.replace(ntpath.sep, os.sep)
-            self.assertEqual(path, self.translated)
+            self.assertEqual(path, self.translated_1)
+            path = self.handler_2.translate_path('c:c:foo\\c:c:bar/filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_2)
+            path = self.handler_3.translate_path('c:c:foo\\c:c:bar/filename')
+            path = path.replace(ntpath.sep, os.sep)
+            self.assertEqual(path, self.translated_3)
 
 
 class MiscTestCase(unittest.TestCase):
diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py
index 06ea86b..914a75a 100644
--- a/Lib/test/test_imaplib.py
+++ b/Lib/test/test_imaplib.py
@@ -1,4 +1,5 @@
 from test import support
+from test.support import socket_helper
 
 from contextlib import contextmanager
 import imaplib
@@ -9,9 +10,9 @@
 import threading
 import socket
 
-from test.support import (reap_threads, verbose, transient_internet,
-                          run_with_tz, run_with_locale, cpython_only,
-                          requires_hashdigest)
+from test.support import (reap_threads, verbose,
+                          run_with_tz, run_with_locale, cpython_only)
+from test.support import hashlib_helper
 import unittest
 from unittest import mock
 from datetime import datetime, timezone, timedelta
@@ -82,7 +83,7 @@
                 pass
 
         # This is the exception that should be raised.
-        expected_errnos = support.get_socket_conn_refused_errs()
+        expected_errnos = socket_helper.get_socket_conn_refused_errs()
         with self.assertRaises(OSError) as cm:
             imaplib.IMAP4()
         self.assertIn(cm.exception.errno, expected_errnos)
@@ -109,12 +110,13 @@
 
 
 class SimpleIMAPHandler(socketserver.StreamRequestHandler):
-    timeout = 1
+    timeout = support.LOOPBACK_TIMEOUT
     continuation = None
     capabilities = ''
 
     def setup(self):
         super().setup()
+        self.server.is_selected = False
         self.server.logged = None
 
     def _send(self, message):
@@ -189,6 +191,18 @@
         self.server.logged = args[0]
         self._send_tagged(tag, 'OK', 'LOGIN completed')
 
+    def cmd_SELECT(self, tag, args):
+        self.server.is_selected = True
+        self._send_line(b'* 2 EXISTS')
+        self._send_tagged(tag, 'OK', '[READ-WRITE] SELECT completed.')
+
+    def cmd_UNSELECT(self, tag, args):
+        if self.server.is_selected:
+            self.server.is_selected = False
+            self._send_tagged(tag, 'OK', 'Returned to authenticated state. (Success)')
+        else:
+            self._send_tagged(tag, 'BAD', 'No mailbox selected')
+
 
 class NewIMAPTestsMixin():
     client = None
@@ -210,7 +224,7 @@
                 raise
 
         self.addCleanup(self._cleanup)
-        self.server = self.server_class((support.HOST, 0), imap_handler)
+        self.server = self.server_class((socket_helper.HOST, 0), imap_handler)
         self.thread = threading.Thread(
             name=self._testMethodName+'-server',
             target=self.server.serve_forever,
@@ -238,7 +252,7 @@
         # cleanup the server
         self.server.shutdown()
         self.server.server_close()
-        support.join_thread(self.thread, 3.0)
+        support.join_thread(self.thread)
         # Explicitly clear the attribute to prevent dangling thread
         self.thread = None
 
@@ -371,7 +385,7 @@
         self.assertEqual(code, 'OK')
         self.assertEqual(server.response, b'ZmFrZQ==\r\n')  # b64 encoded 'fake'
 
-    @requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5')
     def test_login_cram_md5_bytes(self):
         class AuthHandler(SimpleIMAPHandler):
             capabilities = 'LOGINDISABLED AUTH=CRAM-MD5'
@@ -389,7 +403,7 @@
         ret, _ = client.login_cram_md5("tim", b"tanstaaftanstaaf")
         self.assertEqual(ret, "OK")
 
-    @requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5')
     def test_login_cram_md5_plain_text(self):
         class AuthHandler(SimpleIMAPHandler):
             capabilities = 'LOGINDISABLED AUTH=CRAM-MD5'
@@ -440,6 +454,29 @@
         with self.imap_class(*server.server_address):
             pass
 
+    def test_imaplib_timeout_test(self):
+        _, server = self._setup(SimpleIMAPHandler)
+        addr = server.server_address[1]
+        client = self.imap_class("localhost", addr, timeout=None)
+        self.assertEqual(client.sock.timeout, None)
+        client.shutdown()
+        client = self.imap_class("localhost", addr, timeout=support.LOOPBACK_TIMEOUT)
+        self.assertEqual(client.sock.timeout, support.LOOPBACK_TIMEOUT)
+        client.shutdown()
+        with self.assertRaises(ValueError):
+            client = self.imap_class("localhost", addr, timeout=0)
+
+    def test_imaplib_timeout_functionality_test(self):
+        class TimeoutHandler(SimpleIMAPHandler):
+            def handle(self):
+                time.sleep(1)
+                SimpleIMAPHandler.handle(self)
+
+        _, server = self._setup(TimeoutHandler)
+        addr = server.server_address[1]
+        with self.assertRaises(socket.timeout):
+            client = self.imap_class("localhost", addr, timeout=0.001)
+
     def test_with_statement(self):
         _, server = self._setup(SimpleIMAPHandler, connect=False)
         with self.imap_class(*server.server_address) as imap:
@@ -487,6 +524,18 @@
         self.assertEqual(typ, 'OK')
         self.assertEqual(data[0], b'() "." directoryA')
 
+    def test_unselect(self):
+        client, _ = self._setup(SimpleIMAPHandler)
+        client.login('user', 'pass')
+        typ, data = client.select()
+        self.assertEqual(typ, 'OK')
+        self.assertEqual(data[0], b'2')
+
+        typ, data = client.unselect()
+        self.assertEqual(typ, 'OK')
+        self.assertEqual(data[0], b'Returned to authenticated state. (Success)')
+        self.assertEqual(client.state, 'AUTH')
+
 
 class NewIMAPTests(NewIMAPTestsMixin, unittest.TestCase):
     imap_class = imaplib.IMAP4
@@ -577,7 +626,7 @@
 
     @contextmanager
     def reaped_server(self, hdlr):
-        server, thread = self.make_server((support.HOST, 0), hdlr)
+        server, thread = self.make_server((socket_helper.HOST, 0), hdlr)
         try:
             yield server
         finally:
@@ -800,7 +849,7 @@
                              b'ZmFrZQ==\r\n')  # b64 encoded 'fake'
 
     @reap_threads
-    @requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5')
     def test_login_cram_md5(self):
 
         class AuthHandler(SimpleIMAPHandler):
@@ -920,16 +969,16 @@
     imap_class = imaplib.IMAP4
 
     def setUp(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             self.server = self.imap_class(self.host, self.port)
 
     def tearDown(self):
         if self.server is not None:
-            with transient_internet(self.host):
+            with socket_helper.transient_internet(self.host):
                 self.server.logout()
 
     def test_logincapa(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             for cap in self.server.capabilities:
                 self.assertIsInstance(cap, str)
             self.assertIn('LOGINDISABLED', self.server.capabilities)
@@ -938,7 +987,7 @@
             self.assertEqual(rs[0], 'OK')
 
     def test_logout(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             rs = self.server.logout()
             self.server = None
             self.assertEqual(rs[0], 'BYE', rs)
@@ -952,7 +1001,7 @@
 
     def setUp(self):
         super().setUp()
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             rs = self.server.starttls()
             self.assertEqual(rs[0], 'OK')
 
@@ -993,24 +1042,24 @@
             server.logout()
 
     def test_logincapa(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             _server = self.imap_class(self.host, self.port)
             self.check_logincapa(_server)
 
     def test_logout(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             _server = self.imap_class(self.host, self.port)
             rs = _server.logout()
             self.assertEqual(rs[0], 'BYE', rs)
 
     def test_ssl_context_certfile_exclusive(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             self.assertRaises(
                 ValueError, self.imap_class, self.host, self.port,
                 certfile=CERTFILE, ssl_context=self.create_ssl_context())
 
     def test_ssl_context_keyfile_exclusive(self):
-        with transient_internet(self.host):
+        with socket_helper.transient_internet(self.host):
             self.assertRaises(
                 ValueError, self.imap_class, self.host, self.port,
                 keyfile=CERTFILE, ssl_context=self.create_ssl_context())
diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py
index 52f0491..d1dafbe 100644
--- a/Lib/test/test_import/__init__.py
+++ b/Lib/test/test_import/__init__.py
@@ -1,24 +1,22 @@
-# We import importlib *ASAP* in order to test #15386
-import importlib
+import builtins
+import contextlib
+import errno
+import glob
 import importlib.util
 from importlib._bootstrap_external import _get_sourcefile
-import builtins
 import marshal
 import os
 import py_compile
 import random
 import shutil
-import subprocess
 import stat
+import subprocess
 import sys
+import textwrap
 import threading
 import time
 import unittest
-import unittest.mock as mock
-import textwrap
-import errno
-import contextlib
-import glob
+from unittest import mock
 
 import test.support
 from test.support import (
@@ -28,6 +26,7 @@
     temp_dir, DirsOnSysPath)
 from test.support import script_helper
 from test.test_importlib.util import uncache
+from types import ModuleType
 
 
 skip_if_dont_write_bytecode = unittest.skipIf(
@@ -437,16 +436,24 @@
                 os.does_not_exist
 
     def test_concurrency(self):
+        # bpo 38091: this is a hack to slow down the code that calls
+        # has_deadlock(); the logic was itself sometimes deadlocking.
+        def delay_has_deadlock(frame, event, arg):
+            if event == 'call' and frame.f_code.co_name == 'has_deadlock':
+                time.sleep(0.1)
+
         sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'data'))
         try:
             exc = None
             def run():
+                sys.settrace(delay_has_deadlock)
                 event.wait()
                 try:
                     import package
                 except BaseException as e:
                     nonlocal exc
                     exc = e
+                sys.settrace(None)
 
             for i in range(10):
                 event = threading.Event()
@@ -1341,6 +1348,19 @@
             str(cm.exception),
         )
 
+    def test_unwritable_module(self):
+        self.addCleanup(unload, "test.test_import.data.unwritable")
+        self.addCleanup(unload, "test.test_import.data.unwritable.x")
+
+        import test.test_import.data.unwritable as unwritable
+        with self.assertWarns(ImportWarning):
+            from test.test_import.data.unwritable import x
+
+        self.assertNotEqual(type(unwritable), ModuleType)
+        self.assertEqual(type(x), ModuleType)
+        with self.assertRaises(AttributeError):
+            unwritable.x = 42
+
 
 if __name__ == '__main__':
     # Test needs to be a package, so we can do relative imports.
diff --git a/Lib/test/test_import/data/unwritable/__init__.py b/Lib/test/test_import/data/unwritable/__init__.py
new file mode 100644
index 0000000..da4ddb3
--- /dev/null
+++ b/Lib/test/test_import/data/unwritable/__init__.py
@@ -0,0 +1,12 @@
+import sys
+
+class MyMod(object):
+    __slots__ = ['__builtins__', '__cached__', '__doc__',
+                 '__file__', '__loader__', '__name__',
+                 '__package__', '__path__', '__spec__']
+    def __init__(self):
+        for attr in self.__slots__:
+            setattr(self, attr, globals()[attr])
+
+
+sys.modules[__name__] = MyMod()
diff --git a/Lib/test/test_import/data/unwritable/x.py b/Lib/test/test_import/data/unwritable/x.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Lib/test/test_import/data/unwritable/x.py
diff --git a/Lib/test/test_importlib/extension/test_case_sensitivity.py b/Lib/test/test_importlib/extension/test_case_sensitivity.py
index 0dd9c86..3a85784 100644
--- a/Lib/test/test_importlib/extension/test_case_sensitivity.py
+++ b/Lib/test/test_importlib/extension/test_case_sensitivity.py
@@ -1,7 +1,7 @@
 from importlib import _bootstrap_external
 from test import support
 import unittest
-
+import sys
 from .. import util
 
 importlib = util.import_importlib('importlib')
@@ -21,6 +21,7 @@
                                            self.machinery.EXTENSION_SUFFIXES))
         return finder.find_module(bad_name)
 
+    @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
     def test_case_sensitive(self):
         with support.EnvironmentVarGuard() as env:
             env.unset('PYTHONCASEOK')
@@ -28,6 +29,7 @@
             loader = self.find_module()
             self.assertIsNone(loader)
 
+    @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
     def test_case_insensitivity(self):
         with support.EnvironmentVarGuard() as env:
             env.set('PYTHONCASEOK', '1')
diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py
index 9ad05fa..abd612f 100644
--- a/Lib/test/test_importlib/extension/test_loader.py
+++ b/Lib/test/test_importlib/extension/test_loader.py
@@ -267,29 +267,6 @@
                 self.assertEqual(module.__name__, name)
                 self.assertEqual(module.__doc__, "Module named in %s" % lang)
 
-    @unittest.skipIf(not hasattr(sys, 'gettotalrefcount'),
-            '--with-pydebug has to be enabled for this test')
-    def test_bad_traverse(self):
-        ''' Issue #32374: Test that traverse fails when accessing per-module
-            state before Py_mod_exec was executed.
-            (Multiphase initialization modules only)
-        '''
-        script = """if True:
-                try:
-                    from test import support
-                    import importlib.util as util
-                    spec = util.find_spec('_testmultiphase')
-                    spec.name = '_testmultiphase_with_bad_traverse'
-
-                    with support.SuppressCrashReport():
-                        m = spec.loader.create_module(spec)
-                except:
-                    # Prevent Python-level exceptions from
-                    # ending the process with non-zero status
-                    # (We are testing for a crash in C-code)
-                    pass"""
-        assert_python_failure("-c", script)
-
 
 (Frozen_MultiPhaseExtensionModuleTests,
  Source_MultiPhaseExtensionModuleTests
diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py
index d923cec..2e55d14 100644
--- a/Lib/test/test_importlib/fixtures.py
+++ b/Lib/test/test_importlib/fixtures.py
@@ -161,6 +161,21 @@
         build_files(EggInfoFile.files, prefix=self.site_dir)
 
 
+class LocalPackage:
+    files = {
+        "setup.py": """
+            import setuptools
+            setuptools.setup(name="local-pkg", version="2.0.1")
+            """,
+        }
+
+    def setUp(self):
+        self.fixtures = contextlib.ExitStack()
+        self.addCleanup(self.fixtures.close)
+        self.fixtures.enter_context(tempdir_as_cwd())
+        build_files(self.files)
+
+
 def build_files(file_defs, prefix=pathlib.Path()):
     """Build a set of files/directories, as described by the
 
@@ -195,6 +210,17 @@
                     f.write(DALS(contents))
 
 
+class FileBuilder:
+    def unicode_filename(self):
+        try:
+            import test.support
+        except ImportError:
+            # outside CPython, hard-code a unicode snowman
+            return '☃'
+        return test.support.FS_NONASCII or \
+            self.skip("File system does not support non-ascii.")
+
+
 def DALS(str):
     "Dedent and left-strip"
     return textwrap.dedent(str).lstrip()
diff --git a/Lib/test/test_importlib/import_/test_relative_imports.py b/Lib/test/test_importlib/import_/test_relative_imports.py
index 8a95a32..41aa182 100644
--- a/Lib/test/test_importlib/import_/test_relative_imports.py
+++ b/Lib/test/test_importlib/import_/test_relative_imports.py
@@ -133,6 +133,7 @@
             self.assertEqual(module.__name__, 'pkg')
             self.assertTrue(hasattr(module, 'subpkg2'))
             self.assertEqual(module.subpkg2.attr, 'pkg.subpkg2.__init__')
+        self.relative_import_test(create, globals_, callback)
 
     def test_deep_import(self):
         # [deep import]
@@ -156,7 +157,7 @@
                     {'__name__': 'pkg', '__path__': ['blah']})
         def callback(global_):
             self.__import__('pkg')
-            with self.assertRaises(ValueError):
+            with self.assertRaises(ImportError):
                 self.__import__('', global_, fromlist=['top_level'],
                                     level=2)
         self.relative_import_test(create, globals_, callback)
@@ -167,7 +168,7 @@
         globals_ = {'__package__': 'pkg'}, {'__name__': 'pkg.module'}
         def callback(global_):
             self.__import__('pkg')
-            with self.assertRaises(ValueError):
+            with self.assertRaises(ImportError):
                 self.__import__('', global_, fromlist=['top_level'],
                                     level=2)
         self.relative_import_test(create, globals_, callback)
diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py
index 12ce0cb..ad1cfdb 100644
--- a/Lib/test/test_importlib/source/test_case_sensitivity.py
+++ b/Lib/test/test_importlib/source/test_case_sensitivity.py
@@ -1,4 +1,6 @@
 """Test case-sensitivity (PEP 235)."""
+import sys
+
 from .. import util
 
 importlib = util.import_importlib('importlib')
@@ -38,6 +40,7 @@
             insensitive_finder = self.finder(insensitive_path)
             return self.find(sensitive_finder), self.find(insensitive_finder)
 
+    @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
     def test_sensitive(self):
         with test_support.EnvironmentVarGuard() as env:
             env.unset('PYTHONCASEOK')
@@ -47,6 +50,7 @@
             self.assertIn(self.name, sensitive.get_filename(self.name))
             self.assertIsNone(insensitive)
 
+    @unittest.skipIf(sys.flags.ignore_environment, 'ignore_environment flag was set')
     def test_insensitive(self):
         with test_support.EnvironmentVarGuard() as env:
             env.set('PYTHONCASEOK', '1')
diff --git a/Lib/test/test_importlib/test_abc.py b/Lib/test/test_importlib/test_abc.py
index 05608bb..9816b35 100644
--- a/Lib/test/test_importlib/test_abc.py
+++ b/Lib/test/test_importlib/test_abc.py
@@ -357,13 +357,27 @@
 
         return MetaPathSpecFinder()
 
-    def test_no_spec(self):
+    def test_find_module(self):
         finder = self.finder(None)
         path = ['a', 'b', 'c']
         name = 'blah'
         with self.assertWarns(DeprecationWarning):
             found = finder.find_module(name, path)
         self.assertIsNone(found)
+
+    def test_find_spec_with_explicit_target(self):
+        loader = object()
+        spec = self.util.spec_from_loader('blah', loader)
+        finder = self.finder(spec)
+        found = finder.find_spec('blah', 'blah', None)
+        self.assertEqual(found, spec)
+
+    def test_no_spec(self):
+        finder = self.finder(None)
+        path = ['a', 'b', 'c']
+        name = 'blah'
+        found = finder.find_spec(name, path, None)
+        self.assertIsNone(found)
         self.assertEqual(name, finder.called_for[0])
         self.assertEqual(path, finder.called_for[1])
 
@@ -371,9 +385,8 @@
         loader = object()
         spec = self.util.spec_from_loader('blah', loader)
         finder = self.finder(spec)
-        with self.assertWarns(DeprecationWarning):
-            found = finder.find_module('blah', None)
-        self.assertIs(found, spec.loader)
+        found = finder.find_spec('blah', None)
+        self.assertIs(found, spec)
 
 
 (Frozen_MPFFindModuleTests,
diff --git a/Lib/test/test_importlib/test_files.py b/Lib/test/test_importlib/test_files.py
new file mode 100644
index 0000000..fa7af82
--- /dev/null
+++ b/Lib/test/test_importlib/test_files.py
@@ -0,0 +1,39 @@
+import typing
+import unittest
+
+from importlib import resources
+from importlib.abc import Traversable
+from . import data01
+from . import util
+
+
+class FilesTests:
+    def test_read_bytes(self):
+        files = resources.files(self.data)
+        actual = files.joinpath('utf-8.file').read_bytes()
+        assert actual == b'Hello, UTF-8 world!\n'
+
+    def test_read_text(self):
+        files = resources.files(self.data)
+        actual = files.joinpath('utf-8.file').read_text()
+        assert actual == 'Hello, UTF-8 world!\n'
+
+    @unittest.skipUnless(
+        hasattr(typing, 'runtime_checkable'),
+        "Only suitable when typing supports runtime_checkable",
+        )
+    def test_traversable(self):
+        assert isinstance(resources.files(self.data), Traversable)
+
+
+class OpenDiskTests(FilesTests, unittest.TestCase):
+    def setUp(self):
+        self.data = data01
+
+
+class OpenZipTests(FilesTests, util.ZipSetup, unittest.TestCase):
+    pass
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py
index 42a7999..91e501a 100644
--- a/Lib/test/test_importlib/test_main.py
+++ b/Lib/test/test_importlib/test_main.py
@@ -246,3 +246,24 @@
         """
         with self.assertRaises(Exception):
             json.dumps(self.ep)
+
+    def test_module(self):
+        assert self.ep.module == 'value'
+
+    def test_attr(self):
+        assert self.ep.attr is None
+
+
+class FileSystem(
+        fixtures.OnSysPath, fixtures.SiteDir, fixtures.FileBuilder,
+        unittest.TestCase):
+    def test_unicode_dir_on_sys_path(self):
+        """
+        Ensure a Unicode subdirectory of a directory on sys.path
+        does not crash.
+        """
+        fixtures.build_files(
+            {self.unicode_filename(): {}},
+            prefix=self.site_dir,
+            )
+        list(distributions())
diff --git a/Lib/test/test_importlib/test_path.py b/Lib/test/test_importlib/test_path.py
index 2d3dcda..c4e7285 100644
--- a/Lib/test/test_importlib/test_path.py
+++ b/Lib/test/test_importlib/test_path.py
@@ -17,6 +17,7 @@
         # Test also implicitly verifies the returned object is a pathlib.Path
         # instance.
         with resources.path(self.data, 'utf-8.file') as path:
+            self.assertTrue(path.name.endswith("utf-8.file"), repr(path))
             # pathlib.Path.read_text() was introduced in Python 3.5.
             with path.open('r', encoding='utf-8') as file:
                 text = file.read()
diff --git a/Lib/test/test_pkgimport.py b/Lib/test/test_importlib/test_pkg_import.py
similarity index 95%
rename from Lib/test/test_pkgimport.py
rename to Lib/test/test_importlib/test_pkg_import.py
index 5d9a451..6181dcf 100644
--- a/Lib/test/test_pkgimport.py
+++ b/Lib/test/test_importlib/test_pkg_import.py
@@ -14,7 +14,7 @@
     def __init__(self, *args, **kw):
         self.package_name = 'PACKAGE_'
         while self.package_name in sys.modules:
-            self.package_name += random.choose(string.ascii_letters)
+            self.package_name += random.choice(string.ascii_letters)
         self.module_name = self.package_name + '.foo'
         unittest.TestCase.__init__(self, *args, **kw)
 
@@ -60,7 +60,7 @@
         # ...make up a variable name that isn't bound in __builtins__
         var = 'a'
         while var in dir(__builtins__):
-            var += random.choose(string.ascii_letters)
+            var += random.choice(string.ascii_letters)
 
         # ...make a module that just contains that
         self.rewrite_file(var)
diff --git a/Lib/test/test_importlib/test_resource.py b/Lib/test/test_importlib/test_resource.py
index f88d92d..e132c57 100644
--- a/Lib/test/test_importlib/test_resource.py
+++ b/Lib/test/test_importlib/test_resource.py
@@ -1,10 +1,13 @@
 import sys
 import unittest
+import uuid
 
 from . import data01
 from . import zipdata01, zipdata02
 from . import util
 from importlib import resources, import_module
+from pathlib import Path
+from test import support
 
 
 class ResourceTests:
@@ -162,5 +165,71 @@
             'test.test_importlib.data03.namespace', 'resource1.txt')
 
 
+class DeletingZipsTest(unittest.TestCase):
+    """Having accessed resources in a zip file should not keep an open
+    reference to the zip.
+    """
+    ZIP_MODULE = zipdata01
+
+    def setUp(self):
+        modules = support.modules_setup()
+        self.addCleanup(support.modules_cleanup, *modules)
+
+        data_path = Path(self.ZIP_MODULE.__file__)
+        data_dir = data_path.parent
+        self.source_zip_path = data_dir / 'ziptestdata.zip'
+        self.zip_path = Path.cwd() / '{}.zip'.format(uuid.uuid4())
+        self.zip_path.write_bytes(self.source_zip_path.read_bytes())
+        sys.path.append(str(self.zip_path))
+        self.data = import_module('ziptestdata')
+
+    def tearDown(self):
+        try:
+            sys.path.remove(str(self.zip_path))
+        except ValueError:
+            pass
+
+        try:
+            del sys.path_importer_cache[str(self.zip_path)]
+            del sys.modules[self.data.__name__]
+        except KeyError:
+            pass
+
+        try:
+            support.unlink(self.zip_path)
+        except OSError:
+            # If the test fails, this will probably fail too
+            pass
+
+    def test_contents_does_not_keep_open(self):
+        c = resources.contents('ziptestdata')
+        self.zip_path.unlink()
+
+    def test_is_resource_does_not_keep_open(self):
+        c = resources.is_resource('ziptestdata', 'binary.file')
+        self.zip_path.unlink()
+
+    def test_is_resource_failure_does_not_keep_open(self):
+        c = resources.is_resource('ziptestdata', 'not-present')
+        self.zip_path.unlink()
+
+    def test_path_does_not_keep_open(self):
+        c = resources.path('ziptestdata', 'binary.file')
+        self.zip_path.unlink()
+
+    def test_entered_path_does_not_keep_open(self):
+        # This is what certifi does on import to make its bundle
+        # available for the process duration.
+        c = resources.path('ziptestdata', 'binary.file').__enter__()
+        self.zip_path.unlink()
+
+    def test_read_binary_does_not_keep_open(self):
+        c = resources.read_binary('ziptestdata', 'binary.file')
+        self.zip_path.unlink()
+
+    def test_read_text_does_not_keep_open(self):
+        c = resources.read_text('ziptestdata', 'utf-8.file', encoding='utf-8')
+        self.zip_path.unlink()
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_threaded_import.py b/Lib/test/test_importlib/test_threaded_import.py
similarity index 97%
rename from Lib/test/test_threaded_import.py
rename to Lib/test/test_importlib/test_threaded_import.py
index 8607f36..d1f64c7 100644
--- a/Lib/test/test_threaded_import.py
+++ b/Lib/test/test_importlib/test_threaded_import.py
@@ -178,11 +178,11 @@
         # In case this test is run again, make sure the helper module
         # gets loaded from scratch again.
         try:
-            del sys.modules['test.threaded_import_hangers']
+            del sys.modules['test.test_importlib.threaded_import_hangers']
         except KeyError:
             pass
-        import test.threaded_import_hangers
-        self.assertFalse(test.threaded_import_hangers.errors)
+        import test.test_importlib.threaded_import_hangers
+        self.assertFalse(test.test_importlib.threaded_import_hangers.errors)
 
     def test_circular_imports(self):
         # The goal of this test is to exercise implementations of the import
diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py
index 58faab4..d6c10ed 100644
--- a/Lib/test/test_importlib/test_util.py
+++ b/Lib/test/test_importlib/test_util.py
@@ -375,7 +375,7 @@
 
     def test_no_package(self):
         # .bacon in ''
-        with self.assertRaises(ValueError):
+        with self.assertRaises(ImportError):
             self.util.resolve_name('.bacon', '')
 
     def test_in_package(self):
@@ -390,7 +390,7 @@
 
     def test_escape(self):
         # ..bacon in spam
-        with self.assertRaises(ValueError):
+        with self.assertRaises(ImportError):
             self.util.resolve_name('..bacon', 'spam')
 
 
@@ -518,7 +518,7 @@
         with util.temp_module(name, pkg=True) as pkg_dir:
             fullname, _ = util.submodule(name, subname, pkg_dir)
             relname = '.' + subname
-            with self.assertRaises(ValueError):
+            with self.assertRaises(ImportError):
                 self.util.find_spec(relname)
             self.assertNotIn(name, sorted(sys.modules))
             self.assertNotIn(fullname, sorted(sys.modules))
@@ -861,7 +861,7 @@
         in advance. Such exceptional releases will then require an
         adjustment to this test case.
         """
-        EXPECTED_MAGIC_NUMBER = 3413
+        EXPECTED_MAGIC_NUMBER = 3425
         actual = int.from_bytes(importlib.util.MAGIC_NUMBER[:2], 'little')
 
         msg = (
diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py
index 9568c22..a5399c1 100644
--- a/Lib/test/test_importlib/test_zip.py
+++ b/Lib/test/test_importlib/test_zip.py
@@ -3,23 +3,31 @@
 
 from contextlib import ExitStack
 from importlib.metadata import (
-    distribution, entry_points, files, PackageNotFoundError, version,
+    distribution, entry_points, files, PackageNotFoundError,
+    version, distributions,
 )
-from importlib.resources import path
+from importlib import resources
+
+from test.support import requires_zlib
 
 
+@requires_zlib()
 class TestZip(unittest.TestCase):
     root = 'test.test_importlib.data'
 
+    def _fixture_on_path(self, filename):
+        pkg_file = resources.files(self.root).joinpath(filename)
+        file = self.resources.enter_context(resources.as_file(pkg_file))
+        assert file.name.startswith('example-'), file.name
+        sys.path.insert(0, str(file))
+        self.resources.callback(sys.path.pop, 0)
+
     def setUp(self):
         # Find the path to the example-*.whl so we can add it to the front of
         # sys.path, where we'll then try to find the metadata thereof.
         self.resources = ExitStack()
         self.addCleanup(self.resources.close)
-        wheel = self.resources.enter_context(
-            path(self.root, 'example-21.12-py3-none-any.whl'))
-        sys.path.insert(0, str(wheel))
-        self.resources.callback(sys.path.pop, 0)
+        self._fixture_on_path('example-21.12-py3-none-any.whl')
 
     def test_zip_version(self):
         self.assertEqual(version('example'), '21.12')
@@ -46,17 +54,19 @@
             path = str(file.dist.locate_file(file))
             assert '.whl/' in path, path
 
+    def test_one_distribution(self):
+        dists = list(distributions(path=sys.path[:1]))
+        assert len(dists) == 1
 
+
+@requires_zlib()
 class TestEgg(TestZip):
     def setUp(self):
         # Find the path to the example-*.egg so we can add it to the front of
         # sys.path, where we'll then try to find the metadata thereof.
         self.resources = ExitStack()
         self.addCleanup(self.resources.close)
-        egg = self.resources.enter_context(
-            path(self.root, 'example-21.12-py3.6.egg'))
-        sys.path.insert(0, str(egg))
-        self.resources.callback(sys.path.pop, 0)
+        self._fixture_on_path('example-21.12-py3.6.egg')
 
     def test_files(self):
         for file in files('example'):
diff --git a/Lib/test/threaded_import_hangers.py b/Lib/test/test_importlib/threaded_import_hangers.py
similarity index 100%
rename from Lib/test/threaded_import_hangers.py
rename to Lib/test/test_importlib/threaded_import_hangers.py
diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py
index e6a1476..de6e0b0 100644
--- a/Lib/test/test_importlib/util.py
+++ b/Lib/test/test_importlib/util.py
@@ -119,7 +119,7 @@
     return '{}.{}'.format(parent, name), path
 
 
-def _get_code_from_pyc(pyc_path):
+def get_code_from_pyc(pyc_path):
     """Reads a pyc file and returns the unmarshalled code object within.
 
     No header validation is performed.
@@ -499,7 +499,7 @@
             self.execute(data01, full_path)
 
     def test_relative_path(self):
-        # A reative path is a ValueError.
+        # A relative path is a ValueError.
         with self.assertRaises(ValueError):
             self.execute(data01, '../data01/utf-8.file')
 
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index ad93f30..d9e26a3 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -25,7 +25,7 @@
     ThreadPoolExecutor = None
 
 from test.support import run_unittest, TESTFN, DirsOnSysPath, cpython_only
-from test.support import MISSING_C_DOCSTRINGS, cpython_only
+from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ
 from test.support.script_helper import assert_python_ok, assert_python_failure
 from test import inspect_fodder as mod
 from test import inspect_fodder2 as mod2
@@ -118,10 +118,6 @@
     yield
     return 'spam'
 
-class EqualsToAll:
-    def __eq__(self, other):
-        return True
-
 class TestPredicates(IsTestBase):
 
     def test_excluding_predicates(self):
@@ -392,6 +388,7 @@
                           ('ParrotDroppings', mod.ParrotDroppings),
                           ('StupidGit', mod.StupidGit),
                           ('Tit', mod.MalodorousPervert),
+                          ('WhichComments', mod.WhichComments),
                          ])
         tree = inspect.getclasstree([cls[1] for cls in classes])
         self.assertEqual(tree,
@@ -405,7 +402,8 @@
                             [(mod.FesteringGob, (mod.MalodorousPervert,
                                                     mod.ParrotDroppings))
                              ]
-                            ]
+                            ],
+                            (mod.WhichComments, (object,),)
                            ]
                           ])
         tree = inspect.getclasstree([cls[1] for cls in classes], True)
@@ -417,7 +415,8 @@
                             [(mod.FesteringGob, (mod.MalodorousPervert,
                                                     mod.ParrotDroppings))
                              ]
-                            ]
+                            ],
+                            (mod.WhichComments, (object,),)
                            ]
                           ])
 
@@ -468,6 +467,7 @@
     def test_getcomments(self):
         self.assertEqual(inspect.getcomments(mod), '# line 1\n')
         self.assertEqual(inspect.getcomments(mod.StupidGit), '# line 20\n')
+        self.assertEqual(inspect.getcomments(mod2.cls160), '# line 159\n')
         # If the object source file is not available, return None.
         co = compile('x=1', '_non_existing_filename.py', 'exec')
         self.assertIsNone(inspect.getcomments(co))
@@ -647,6 +647,18 @@
         # as argument to another function.
         self.assertSourceEqual(mod2.anonymous, 55, 55)
 
+class TestBlockComments(GetSourceBase):
+    fodderModule = mod
+
+    def test_toplevel_class(self):
+        self.assertSourceEqual(mod.WhichComments, 96, 114)
+
+    def test_class_method(self):
+        self.assertSourceEqual(mod.WhichComments.f, 99, 104)
+
+    def test_class_async_method(self):
+        self.assertSourceEqual(mod.WhichComments.asyncf, 109, 112)
+
 class TestBuggyCases(GetSourceBase):
     fodderModule = mod2
 
@@ -698,12 +710,62 @@
             self.assertRaises(IOError, inspect.findsource, co)
             self.assertRaises(IOError, inspect.getsource, co)
 
+    def test_findsource_with_out_of_bounds_lineno(self):
+        mod_len = len(inspect.getsource(mod))
+        src = '\n' * 2* mod_len + "def f(): pass"
+        co = compile(src, mod.__file__, "exec")
+        g, l = {}, {}
+        eval(co, g, l)
+        func = l['f']
+        self.assertEqual(func.__code__.co_firstlineno, 1+2*mod_len)
+        with self.assertRaisesRegex(IOError, "lineno is out of bounds"):
+            inspect.findsource(func)
+
     def test_getsource_on_method(self):
         self.assertSourceEqual(mod2.ClassWithMethod.method, 118, 119)
 
     def test_nested_func(self):
         self.assertSourceEqual(mod2.cls135.func136, 136, 139)
 
+    def test_class_definition_in_multiline_string_definition(self):
+        self.assertSourceEqual(mod2.cls149, 149, 152)
+
+    def test_class_definition_in_multiline_comment(self):
+        self.assertSourceEqual(mod2.cls160, 160, 163)
+
+    def test_nested_class_definition_indented_string(self):
+        self.assertSourceEqual(mod2.cls173.cls175, 175, 176)
+
+    def test_nested_class_definition(self):
+        self.assertSourceEqual(mod2.cls183, 183, 188)
+        self.assertSourceEqual(mod2.cls183.cls185, 185, 188)
+
+    def test_class_decorator(self):
+        self.assertSourceEqual(mod2.cls196, 194, 201)
+        self.assertSourceEqual(mod2.cls196.cls200, 198, 201)
+
+    def test_class_inside_conditional(self):
+        self.assertSourceEqual(mod2.cls238, 238, 240)
+        self.assertSourceEqual(mod2.cls238.cls239, 239, 240)
+
+    def test_multiple_children_classes(self):
+        self.assertSourceEqual(mod2.cls203, 203, 209)
+        self.assertSourceEqual(mod2.cls203.cls204, 204, 206)
+        self.assertSourceEqual(mod2.cls203.cls204.cls205, 205, 206)
+        self.assertSourceEqual(mod2.cls203.cls207, 207, 209)
+        self.assertSourceEqual(mod2.cls203.cls207.cls205, 208, 209)
+
+    def test_nested_class_definition_inside_function(self):
+        self.assertSourceEqual(mod2.func212(), 213, 214)
+        self.assertSourceEqual(mod2.cls213, 218, 222)
+        self.assertSourceEqual(mod2.cls213().func219(), 220, 221)
+
+    def test_nested_class_definition_inside_async_function(self):
+        import asyncio
+        self.addCleanup(asyncio.set_event_loop_policy, None)
+        self.assertSourceEqual(asyncio.run(mod2.func225()), 226, 227)
+        self.assertSourceEqual(mod2.cls226, 231, 235)
+        self.assertSourceEqual(asyncio.run(mod2.cls226().func232()), 233, 234)
 
 class TestNoEOL(GetSourceBase):
     def setUp(self):
@@ -2081,6 +2143,7 @@
         P = inspect.Parameter
 
         self.assertEqual(str(S()), '()')
+        self.assertEqual(repr(S().parameters), 'mappingproxy(OrderedDict())')
 
         def test(po, pk, pod=42, pkd=100, *args, ko, **kwargs):
             pass
@@ -2978,8 +3041,8 @@
         def foo(a, *, b:int) -> float: pass
         self.assertFalse(inspect.signature(foo) == 42)
         self.assertTrue(inspect.signature(foo) != 42)
-        self.assertTrue(inspect.signature(foo) == EqualsToAll())
-        self.assertFalse(inspect.signature(foo) != EqualsToAll())
+        self.assertTrue(inspect.signature(foo) == ALWAYS_EQ)
+        self.assertFalse(inspect.signature(foo) != ALWAYS_EQ)
 
         def bar(a, *, b:int) -> float: pass
         self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
@@ -3184,6 +3247,11 @@
         l = list(signature.parameters)
         self.assertEqual(l, unsorted_keyword_only_parameters)
 
+    def test_signater_parameters_is_ordered(self):
+        p1 = inspect.signature(lambda x, y: None).parameters
+        p2 = inspect.signature(lambda y, x: None).parameters
+        self.assertNotEqual(p1, p2)
+
 
 class TestParameterObject(unittest.TestCase):
     def test_signature_parameter_kinds(self):
@@ -3253,8 +3321,8 @@
         self.assertFalse(p != p)
         self.assertFalse(p == 42)
         self.assertTrue(p != 42)
-        self.assertTrue(p == EqualsToAll())
-        self.assertFalse(p != EqualsToAll())
+        self.assertTrue(p == ALWAYS_EQ)
+        self.assertFalse(p != ALWAYS_EQ)
 
         self.assertTrue(p == P('foo', default=42,
                                kind=inspect.Parameter.KEYWORD_ONLY))
@@ -3601,8 +3669,8 @@
         ba = inspect.signature(foo).bind(1)
         self.assertTrue(ba == ba)
         self.assertFalse(ba != ba)
-        self.assertTrue(ba == EqualsToAll())
-        self.assertFalse(ba != EqualsToAll())
+        self.assertTrue(ba == ALWAYS_EQ)
+        self.assertFalse(ba != ALWAYS_EQ)
 
         ba2 = inspect.signature(foo).bind(1)
         self.assertTrue(ba == ba2)
@@ -3685,6 +3753,10 @@
         ba.apply_defaults()
         self.assertEqual(list(ba.arguments.items()), [('a', 'spam')])
 
+    def test_signature_bound_arguments_arguments_type(self):
+        def foo(a): pass
+        ba = inspect.signature(foo).bind(1)
+        self.assertIs(type(ba.arguments), dict)
 
 class TestSignaturePrivateHelpers(unittest.TestCase):
     def test_signature_get_bound_param(self):
@@ -3970,8 +4042,8 @@
 
 def test_main():
     run_unittest(
-        TestDecorators, TestRetrievingSourceCode, TestOneliners, TestBuggyCases,
-        TestInterpreterStack, TestClassesAndFunctions, TestPredicates,
+        TestDecorators, TestRetrievingSourceCode, TestOneliners, TestBlockComments,
+        TestBuggyCases, TestInterpreterStack, TestClassesAndFunctions, TestPredicates,
         TestGetcallargsFunctions, TestGetcallargsMethods,
         TestGetcallargsUnboundMethods, TestGetattrStatic, TestGetGeneratorState,
         TestNoEOL, TestSignatureObject, TestSignatureBind, TestParameterObject,
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index bea4342..d2e3877 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -29,6 +29,7 @@
 import signal
 import sys
 import sysconfig
+import textwrap
 import threading
 import time
 import unittest
@@ -37,7 +38,8 @@
 from collections import deque, UserList
 from itertools import cycle, count
 from test import support
-from test.support.script_helper import assert_python_ok, run_python_until_end
+from test.support.script_helper import (
+    assert_python_ok, assert_python_failure, run_python_until_end)
 from test.support import FakePath
 
 import codecs
@@ -922,7 +924,7 @@
                 self.assertEqual(f.read(), "egg\n")
 
         check_path_succeeds(FakePath(support.TESTFN))
-        check_path_succeeds(FakePath(support.TESTFN.encode('utf-8')))
+        check_path_succeeds(FakePath(os.fsencode(support.TESTFN)))
 
         with self.open(support.TESTFN, "w") as f:
             bad_path = FakePath(f.fileno())
@@ -1526,6 +1528,13 @@
         self.assertRaises(ValueError, b.peek)
         self.assertRaises(ValueError, b.read1, 1)
 
+    def test_truncate_on_read_only(self):
+        rawio = self.MockFileIO(b"abc")
+        bufio = self.tp(rawio)
+        self.assertFalse(bufio.writable())
+        self.assertRaises(self.UnsupportedOperation, bufio.truncate)
+        self.assertRaises(self.UnsupportedOperation, bufio.truncate, 0)
+
 
 class CBufferedReaderTest(BufferedReaderTest, SizeofTest):
     tp = io.BufferedReader
@@ -2370,6 +2379,10 @@
     # You can't construct a BufferedRandom over a non-seekable stream.
     test_unseekable = None
 
+    # writable() returns True, so there's no point to test it over
+    # a writable stream.
+    test_truncate_on_read_only = None
+
 
 class CBufferedRandomTest(BufferedRandomTest, SizeofTest):
     tp = io.BufferedRandom
@@ -3495,7 +3508,6 @@
             """.format(iomod=iomod, kwargs=kwargs)
         return assert_python_ok("-c", code)
 
-    @support.requires_type_collecting
     def test_create_at_shutdown_without_encoding(self):
         rc, out, err = self._check_create_at_shutdown()
         if err:
@@ -3505,7 +3517,6 @@
         else:
             self.assertEqual("ok", out.decode().strip())
 
-    @support.requires_type_collecting
     def test_create_at_shutdown_with_encoding(self):
         rc, out, err = self._check_create_at_shutdown(encoding='utf-8',
                                                       errors='strict')
@@ -3688,7 +3699,7 @@
 
 class CTextIOWrapperTest(TextIOWrapperTest):
     io = io
-    shutdown_error = "RuntimeError: could not find io module state"
+    shutdown_error = "LookupError: unknown encoding: ascii"
 
     def test_initialization(self):
         r = self.BytesIO(b"\xc3\xa9\n\n")
@@ -4146,6 +4157,51 @@
         # there used to be a buffer overflow in the parser for rawmode
         self.assertRaises(ValueError, self.open, support.TESTFN, 'rwax+')
 
+    def test_check_encoding_errors(self):
+        # bpo-37388: open() and TextIOWrapper must check encoding and errors
+        # arguments in dev mode
+        mod = self.io.__name__
+        filename = __file__
+        invalid = 'Boom, Shaka Laka, Boom!'
+        code = textwrap.dedent(f'''
+            import sys
+            from {mod} import open, TextIOWrapper
+
+            try:
+                open({filename!r}, encoding={invalid!r})
+            except LookupError:
+                pass
+            else:
+                sys.exit(21)
+
+            try:
+                open({filename!r}, errors={invalid!r})
+            except LookupError:
+                pass
+            else:
+                sys.exit(22)
+
+            fp = open({filename!r}, "rb")
+            with fp:
+                try:
+                    TextIOWrapper(fp, encoding={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(23)
+
+                try:
+                    TextIOWrapper(fp, errors={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(24)
+
+            sys.exit(10)
+        ''')
+        proc = assert_python_failure('-X', 'dev', '-c', code)
+        self.assertEqual(proc.rc, 10, proc)
+
 
 class CMiscIOTest(MiscIOTest):
     io = io
@@ -4191,7 +4247,8 @@
         err = res.err.decode()
         if res.rc != 0:
             # Failure: should be a fatal error
-            pattern = (r"Fatal Python error: could not acquire lock "
+            pattern = (r"Fatal Python error: _enter_buffered_busy: "
+                       r"could not acquire lock "
                        r"for <(_io\.)?BufferedWriter name='<{stream_name}>'> "
                        r"at interpreter shutdown, possibly due to "
                        r"daemon threads".format_map(locals()))
diff --git a/Lib/test/test_ioctl.py b/Lib/test/test_ioctl.py
index d1a5db9..a287358 100644
--- a/Lib/test/test_ioctl.py
+++ b/Lib/test/test_ioctl.py
@@ -48,7 +48,7 @@
         else:
             buf.append(fill)
         with open("/dev/tty", "rb") as tty:
-            r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, 1)
+            r = fcntl.ioctl(tty, termios.TIOCGPGRP, buf, True)
         rpgrp = buf[0]
         self.assertEqual(r, 0)
         self.assertIn(rpgrp, ids)
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index 2eba740..3c07008 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -7,7 +7,6 @@
 import unittest
 import re
 import contextlib
-import functools
 import operator
 import pickle
 import ipaddress
@@ -170,10 +169,44 @@
         assertBadLength(15)
         assertBadLength(17)
 
+    def test_blank_scope_id(self):
+        address = ('::1%')
+        with self.assertAddressError('Invalid IPv6 address: "%r"', address):
+            self.factory(address)
+
+    def test_invalid_scope_id_with_percent(self):
+        address = ('::1%scope%')
+        with self.assertAddressError('Invalid IPv6 address: "%r"', address):
+            self.factory(address)
 
 class AddressTestCase_v4(BaseTestCase, CommonTestMixin_v4):
     factory = ipaddress.IPv4Address
 
+    def test_format(self):
+        v4 = ipaddress.IPv4Address("1.2.3.42")
+        v4_pairs  = [
+            ("b" ,"00000001000000100000001100101010"),
+            ("n" ,"00000001000000100000001100101010"),
+            ("x" ,"0102032a"),
+            ("X" ,"0102032A"),
+            ("_b" ,"0000_0001_0000_0010_0000_0011_0010_1010"),
+            ("_n" ,"0000_0001_0000_0010_0000_0011_0010_1010"),
+            ("_x" ,"0102_032a"),
+            ("_X" ,"0102_032A"),
+            ("#b" ,"0b00000001000000100000001100101010"),
+            ("#n" ,"0b00000001000000100000001100101010"),
+            ("#x" ,"0x0102032a"),
+            ("#X" ,"0X0102032A"),
+            ("#_b" ,"0b0000_0001_0000_0010_0000_0011_0010_1010"),
+            ("#_n" ,"0b0000_0001_0000_0010_0000_0011_0010_1010"),
+            ("#_x" ,"0x0102_032a"),
+            ("#_X" ,"0X0102_032A"),
+            ("s" ,"1.2.3.42"),
+            ("" ,"1.2.3.42"),
+        ]
+        for (fmt, txt) in v4_pairs:
+            self.assertEqual(txt, format(v4, fmt))
+
     def test_network_passed_as_address(self):
         addr = "127.0.0.1/24"
         with self.assertAddressError("Unexpected '/' in %r", addr):
@@ -261,25 +294,72 @@
 class AddressTestCase_v6(BaseTestCase, CommonTestMixin_v6):
     factory = ipaddress.IPv6Address
 
+    def test_format(self):
+
+        v6 = ipaddress.IPv6Address("::1.2.3.42")
+        v6_pairs = [
+            ("b",
+                "000000000000000000000000000000000000000000000000000000"
+                "000000000000000000000000000000000000000000000000010000"
+                "00100000001100101010"),
+            ("n", "0000000000000000000000000102032a"),
+            ("x", "0000000000000000000000000102032a"),
+            ("X", "0000000000000000000000000102032A"),
+            ("_b",
+                "0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000"
+                "_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000"
+                "_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010"
+                "_1010"),
+            ("_n", "0000_0000_0000_0000_0000_0000_0102_032a"),
+            ("_x", "0000_0000_0000_0000_0000_0000_0102_032a"),
+            ("_X", "0000_0000_0000_0000_0000_0000_0102_032A"),
+            ("#b",
+                "0b0000000000000000000000000000000000000000000000000000"
+                "000000000000000000000000000000000000000000000000000100"
+                "0000100000001100101010"),
+            ("#n", "0x0000000000000000000000000102032a"),
+            ("#x", "0x0000000000000000000000000102032a"),
+            ("#X", "0X0000000000000000000000000102032A"),
+            ("#_b",
+                "0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000"
+                "_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000"
+                "_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011"
+                "_0010_1010"),
+            ("#_n", "0x0000_0000_0000_0000_0000_0000_0102_032a"),
+            ("#_x", "0x0000_0000_0000_0000_0000_0000_0102_032a"),
+            ("#_X", "0X0000_0000_0000_0000_0000_0000_0102_032A"),
+            ("s", "::102:32a"),
+            ("", "::102:32a"),
+        ]
+
+        for (fmt, txt) in v6_pairs:
+            self.assertEqual(txt, format(v6, fmt))
+
     def test_network_passed_as_address(self):
-        addr = "::1/24"
-        with self.assertAddressError("Unexpected '/' in %r", addr):
-            ipaddress.IPv6Address(addr)
+        def assertBadSplit(addr):
+            msg = "Unexpected '/' in %r"
+            with self.assertAddressError(msg, addr):
+                ipaddress.IPv6Address(addr)
+        assertBadSplit("::1/24")
+        assertBadSplit("::1%scope_id/24")
 
     def test_bad_address_split_v6_not_enough_parts(self):
         def assertBadSplit(addr):
             msg = "At least 3 parts expected in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit(":")
         assertBadSplit(":1")
         assertBadSplit("FEDC:9878")
+        assertBadSplit(":%scope")
+        assertBadSplit(":1%scope")
+        assertBadSplit("FEDC:9878%scope")
 
     def test_bad_address_split_v6_too_many_colons(self):
         def assertBadSplit(addr):
             msg = "At most 8 colons permitted in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit("9:8:7:6:5:4:3::2:1")
@@ -289,10 +369,17 @@
         # A trailing IPv4 address is two parts
         assertBadSplit("10:9:8:7:6:5:4:3:42.42.42.42")
 
+        assertBadSplit("9:8:7:6:5:4:3::2:1%scope")
+        assertBadSplit("10:9:8:7:6:5:4:3:2:1%scope")
+        assertBadSplit("::8:7:6:5:4:3:2:1%scope")
+        assertBadSplit("8:7:6:5:4:3:2:1::%scope")
+        # A trailing IPv4 address is two parts
+        assertBadSplit("10:9:8:7:6:5:4:3:42.42.42.42%scope")
+
     def test_bad_address_split_v6_too_many_parts(self):
         def assertBadSplit(addr):
             msg = "Exactly 8 parts expected without '::' in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit("3ffe:0:0:0:0:0:0:0:1")
@@ -302,18 +389,26 @@
         assertBadSplit("9:8:7:6:5:4:3:42.42.42.42")
         assertBadSplit("7:6:5:4:3:42.42.42.42")
 
+        assertBadSplit("3ffe:0:0:0:0:0:0:0:1%scope")
+        assertBadSplit("9:8:7:6:5:4:3:2:1%scope")
+        assertBadSplit("7:6:5:4:3:2:1%scope")
+        # A trailing IPv4 address is two parts
+        assertBadSplit("9:8:7:6:5:4:3:42.42.42.42%scope")
+        assertBadSplit("7:6:5:4:3:42.42.42.42%scope")
+
     def test_bad_address_split_v6_too_many_parts_with_double_colon(self):
         def assertBadSplit(addr):
             msg = "Expected at most 7 other parts with '::' in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit("1:2:3:4::5:6:7:8")
+        assertBadSplit("1:2:3:4::5:6:7:8%scope")
 
     def test_bad_address_split_v6_repeated_double_colon(self):
         def assertBadSplit(addr):
             msg = "At most one '::' permitted in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit("3ffe::1::1")
@@ -327,10 +422,21 @@
         assertBadSplit(":::")
         assertBadSplit('2001:db8:::1')
 
+        assertBadSplit("3ffe::1::1%scope")
+        assertBadSplit("1::2::3::4:5%scope")
+        assertBadSplit("2001::db:::1%scope")
+        assertBadSplit("3ffe::1::%scope")
+        assertBadSplit("::3ffe::1%scope")
+        assertBadSplit(":3ffe::1::1%scope")
+        assertBadSplit("3ffe::1::1:%scope")
+        assertBadSplit(":3ffe::1::1:%scope")
+        assertBadSplit(":::%scope")
+        assertBadSplit('2001:db8:::1%scope')
+
     def test_bad_address_split_v6_leading_colon(self):
         def assertBadSplit(addr):
             msg = "Leading ':' only permitted as part of '::' in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit(":2001:db8::1")
@@ -338,10 +444,15 @@
         assertBadSplit(":1:2:3:4:5:6:")
         assertBadSplit(":6:5:4:3:2:1::")
 
+        assertBadSplit(":2001:db8::1%scope")
+        assertBadSplit(":1:2:3:4:5:6:7%scope")
+        assertBadSplit(":1:2:3:4:5:6:%scope")
+        assertBadSplit(":6:5:4:3:2:1::%scope")
+
     def test_bad_address_split_v6_trailing_colon(self):
         def assertBadSplit(addr):
             msg = "Trailing ':' only permitted as part of '::' in %r"
-            with self.assertAddressError(msg, addr):
+            with self.assertAddressError(msg, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadSplit("2001:db8::1:")
@@ -349,9 +460,14 @@
         assertBadSplit("::1.2.3.4:")
         assertBadSplit("::7:6:5:4:3:2:")
 
+        assertBadSplit("2001:db8::1:%scope")
+        assertBadSplit("1:2:3:4:5:6:7:%scope")
+        assertBadSplit("::1.2.3.4:%scope")
+        assertBadSplit("::7:6:5:4:3:2:%scope")
+
     def test_bad_v4_part_in(self):
         def assertBadAddressPart(addr, v4_error):
-            with self.assertAddressError("%s in %r", v4_error, addr):
+            with self.assertAddressError("%s in %r", v4_error, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadAddressPart("3ffe::1.net", "Expected 4 octets in '1.net'")
@@ -365,9 +481,20 @@
                              "Only decimal digits permitted in 'net' "
                              "in '1.1.1.net'")
 
+        assertBadAddressPart("3ffe::1.net%scope", "Expected 4 octets in '1.net'")
+        assertBadAddressPart("3ffe::127.0.1%scope",
+                             "Expected 4 octets in '127.0.1'")
+        assertBadAddressPart("::1.2.3%scope",
+                             "Expected 4 octets in '1.2.3'")
+        assertBadAddressPart("::1.2.3.4.5%scope",
+                             "Expected 4 octets in '1.2.3.4.5'")
+        assertBadAddressPart("3ffe::1.1.1.net%scope",
+                             "Only decimal digits permitted in 'net' "
+                             "in '1.1.1.net'")
+
     def test_invalid_characters(self):
         def assertBadPart(addr, part):
-            msg = "Only hex digits permitted in %r in %r" % (part, addr)
+            msg = "Only hex digits permitted in %r in %r" % (part, addr.split('%')[0])
             with self.assertAddressError(re.escape(msg)):
                 ipaddress.IPv6Address(addr)
 
@@ -378,10 +505,17 @@
         assertBadPart("1.2.3.4::", "1.2.3.4")
         assertBadPart('1234:axy::b', "axy")
 
+        assertBadPart("3ffe::goog%scope", "goog")
+        assertBadPart("3ffe::-0%scope", "-0")
+        assertBadPart("3ffe::+0%scope", "+0")
+        assertBadPart("3ffe::-1%scope", "-1")
+        assertBadPart("1.2.3.4::%scope", "1.2.3.4")
+        assertBadPart('1234:axy::b%scope', "axy")
+
     def test_part_length(self):
         def assertBadPart(addr, part):
             msg = "At most 4 characters permitted in %r in %r"
-            with self.assertAddressError(msg, part, addr):
+            with self.assertAddressError(msg, part, addr.split('%')[0]):
                 ipaddress.IPv6Address(addr)
 
         assertBadPart("::00000", "00000")
@@ -389,11 +523,17 @@
         assertBadPart("02001:db8::", "02001")
         assertBadPart('2001:888888::1', "888888")
 
+        assertBadPart("::00000%scope", "00000")
+        assertBadPart("3ffe::10000%scope", "10000")
+        assertBadPart("02001:db8::%scope", "02001")
+        assertBadPart('2001:888888::1%scope', "888888")
+
     def test_pickle(self):
         self.pickle_test('2001:db8::')
 
     def test_weakref(self):
         weakref.ref(self.factory('2001:db8::'))
+        weakref.ref(self.factory('2001:db8::%scope'))
 
 
 class NetmaskTestMixin_v4(CommonTestMixin_v4):
@@ -551,11 +691,20 @@
             # IPv6Network has prefixlen, but IPv6Interface doesn't.
             # Should we add it to IPv4Interface too? (bpo-36392)
 
+        scoped_net = self.factory('::1%scope')
+        self.assertEqual(str(scoped_net), '::1%scope/128')
+        self.assertEqual(str(scoped_net.netmask), 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
+        self.assertEqual(str(scoped_net.hostmask), '::')
+
     def test_split_netmask(self):
         addr = "cafe:cafe::/128/190"
         with self.assertAddressError("Only one '/' permitted in %r" % addr):
             self.factory(addr)
 
+        scoped_addr = "cafe:cafe::%scope/128/190"
+        with self.assertAddressError("Only one '/' permitted in %r" % scoped_addr):
+            self.factory(scoped_addr)
+
     def test_address_errors(self):
         def assertBadAddress(addr, details):
             with self.assertAddressError(details):
@@ -568,6 +717,13 @@
         assertBadAddress("10/8", "At least 3 parts")
         assertBadAddress("1234:axy::b", "Only hex digits")
 
+        assertBadAddress("/%scope", "Address cannot be empty")
+        assertBadAddress("/%scope8", "Address cannot be empty")
+        assertBadAddress("google.com%scope", "At least 3 parts")
+        assertBadAddress("1.2.3.4%scope", "At least 3 parts")
+        assertBadAddress("10%scope/8", "At least 3 parts")
+        assertBadAddress("1234:axy::b%scope", "Only hex digits")
+
     def test_valid_netmask(self):
         # We only support CIDR for IPv6, because expanded netmasks are not
         # standard notation.
@@ -579,6 +735,14 @@
             # Zero prefix is treated as decimal.
             self.assertEqual(str(self.factory('::/0%d' % i)), net_str)
 
+        self.assertEqual(str(self.factory('2001:db8::%scope/32')), '2001:db8::%scope/32')
+        for i in range(0, 129):
+            # Generate and re-parse the CIDR format (trivial).
+            net_str = '::/%d' % i
+            self.assertEqual(str(self.factory(net_str)), net_str)
+            # Zero prefix is treated as decimal.
+            self.assertEqual(str(self.factory('::/0%d' % i)), net_str)
+
     def test_netmask_errors(self):
         def assertBadNetmask(addr, netmask):
             msg = "%r is not a valid netmask" % netmask
@@ -597,6 +761,8 @@
         assertBadNetmask("::1", "pudding")
         assertBadNetmask("::", "::")
 
+        assertBadNetmask("::1%scope", "pudding")
+
     def test_netmask_in_tuple_errors(self):
         def assertBadNetmask(addr, netmask):
             msg = "%r is not a valid netmask" % netmask
@@ -604,12 +770,15 @@
                 self.factory((addr, netmask))
         assertBadNetmask("::1", -1)
         assertBadNetmask("::1", 129)
+        assertBadNetmask("::1%scope", 129)
 
     def test_pickle(self):
         self.pickle_test('2001:db8::1000/124')
         self.pickle_test('2001:db8::1000/127')  # IPV6LENGTH - 1
         self.pickle_test('2001:db8::1000')      # IPV6LENGTH
 
+        self.pickle_test('2001:db8::1000%scope')      # IPV6LENGTH
+
 
 class InterfaceTestCase_v6(BaseTestCase, NetmaskTestMixin_v6):
     factory = ipaddress.IPv6Interface
@@ -636,6 +805,13 @@
             self.factory('2000:aaa::/48').subnet_of(
                 self.factory('2000:aaa::/56')))
 
+        self.assertFalse(
+            self.factory('2000:999::%scope/56').subnet_of(
+                self.factory('2000:aaa::%scope/48')))
+        self.assertTrue(
+            self.factory('2000:aaa::%scope/56').subnet_of(
+                self.factory('2000:aaa::%scope/48')))
+
     def test_supernet_of(self):
         # containee left of container
         self.assertFalse(
@@ -682,13 +858,19 @@
     v6addr = ipaddress.IPv6Address(1)
     v6net = ipaddress.IPv6Network(1)
     v6intf = ipaddress.IPv6Interface(1)
+    v6addr_scoped = ipaddress.IPv6Address('::1%scope')
+    v6net_scoped= ipaddress.IPv6Network('::1%scope')
+    v6intf_scoped= ipaddress.IPv6Interface('::1%scope')
 
     v4_addresses = [v4addr, v4intf]
     v4_objects = v4_addresses + [v4net]
     v6_addresses = [v6addr, v6intf]
     v6_objects = v6_addresses + [v6net]
+    v6_scoped_addresses = [v6addr_scoped, v6intf_scoped]
+    v6_scoped_objects = v6_scoped_addresses + [v6net_scoped]
 
     objects = v4_objects + v6_objects
+    objects_with_scoped = objects + v6_scoped_objects
 
     v4addr2 = ipaddress.IPv4Address(2)
     v4net2 = ipaddress.IPv4Network(2)
@@ -696,11 +878,14 @@
     v6addr2 = ipaddress.IPv6Address(2)
     v6net2 = ipaddress.IPv6Network(2)
     v6intf2 = ipaddress.IPv6Interface(2)
+    v6addr2_scoped = ipaddress.IPv6Address('::2%scope')
+    v6net2_scoped = ipaddress.IPv6Network('::2%scope')
+    v6intf2_scoped = ipaddress.IPv6Interface('::2%scope')
 
     def test_foreign_type_equality(self):
         # __eq__ should never raise TypeError directly
         other = object()
-        for obj in self.objects:
+        for obj in self.objects_with_scoped:
             self.assertNotEqual(obj, other)
             self.assertFalse(obj == other)
             self.assertEqual(obj.__eq__(other), NotImplemented)
@@ -715,8 +900,17 @@
                     continue
                 self.assertNotEqual(lhs, rhs)
 
+    def test_scoped_ipv6_equality(self):
+        for lhs, rhs in zip(self.v6_objects, self.v6_scoped_objects):
+            self.assertNotEqual(lhs, rhs)
+
+    def test_v4_with_v6_scoped_equality(self):
+        for lhs in self.v4_objects:
+            for rhs in self.v6_scoped_objects:
+                self.assertNotEqual(lhs, rhs)
+
     def test_same_type_equality(self):
-        for obj in self.objects:
+        for obj in self.objects_with_scoped:
             self.assertEqual(obj, obj)
             self.assertLessEqual(obj, obj)
             self.assertGreaterEqual(obj, obj)
@@ -729,6 +923,9 @@
             (self.v6addr, self.v6addr2),
             (self.v6net, self.v6net2),
             (self.v6intf, self.v6intf2),
+            (self.v6addr_scoped, self.v6addr2_scoped),
+            (self.v6net_scoped, self.v6net2_scoped),
+            (self.v6intf_scoped, self.v6intf2_scoped),
         ):
             self.assertNotEqual(lhs, rhs)
             self.assertLess(lhs, rhs)
@@ -743,16 +940,21 @@
     def test_containment(self):
         for obj in self.v4_addresses:
             self.assertIn(obj, self.v4net)
-        for obj in self.v6_addresses:
+        for obj in self.v6_addresses + self.v6_scoped_addresses:
             self.assertIn(obj, self.v6net)
-        for obj in self.v4_objects + [self.v6net]:
+        for obj in self.v6_addresses + self.v6_scoped_addresses:
+            self.assertIn(obj, self.v6net_scoped)
+
+        for obj in self.v4_objects + [self.v6net, self.v6net_scoped]:
             self.assertNotIn(obj, self.v6net)
-        for obj in self.v6_objects + [self.v4net]:
+        for obj in self.v4_objects + [self.v6net, self.v6net_scoped]:
+            self.assertNotIn(obj, self.v6net_scoped)
+        for obj in self.v6_objects + self.v6_scoped_objects + [self.v4net]:
             self.assertNotIn(obj, self.v4net)
 
     def test_mixed_type_ordering(self):
-        for lhs in self.objects:
-            for rhs in self.objects:
+        for lhs in self.objects_with_scoped:
+            for rhs in self.objects_with_scoped:
                 if isinstance(lhs, type(rhs)) or isinstance(rhs, type(lhs)):
                     continue
                 self.assertRaises(TypeError, lambda: lhs < rhs)
@@ -762,7 +964,7 @@
 
     def test_foreign_type_ordering(self):
         other = object()
-        for obj in self.objects:
+        for obj in self.objects_with_scoped:
             with self.assertRaises(TypeError):
                 obj < other
             with self.assertRaises(TypeError):
@@ -784,14 +986,18 @@
         # with get_mixed_type_key, you can sort addresses and network.
         v4_ordered = [self.v4addr, self.v4net, self.v4intf]
         v6_ordered = [self.v6addr, self.v6net, self.v6intf]
+        v6_scoped_ordered = [self.v6addr_scoped, self.v6net_scoped, self.v6intf_scoped]
         self.assertEqual(v4_ordered,
                          sorted(self.v4_objects,
                                 key=ipaddress.get_mixed_type_key))
         self.assertEqual(v6_ordered,
                          sorted(self.v6_objects,
                                 key=ipaddress.get_mixed_type_key))
-        self.assertEqual(v4_ordered + v6_ordered,
-                         sorted(self.objects,
+        self.assertEqual(v6_scoped_ordered,
+                         sorted(self.v6_scoped_objects,
+                                key=ipaddress.get_mixed_type_key))
+        self.assertEqual(v4_ordered + v6_scoped_ordered,
+                         sorted(self.v4_objects + self.v6_scoped_objects,
                                 key=ipaddress.get_mixed_type_key))
         self.assertEqual(NotImplemented, ipaddress.get_mixed_type_key(object))
 
@@ -801,6 +1007,8 @@
         v4net = ipaddress.ip_network('1.1.1.1')
         v6addr = ipaddress.ip_address('::1')
         v6net = ipaddress.ip_network('::1')
+        v6addr_scoped = ipaddress.ip_address('::1%scope')
+        v6net_scoped = ipaddress.ip_network('::1%scope')
 
         self.assertRaises(TypeError, v4addr.__lt__, v6addr)
         self.assertRaises(TypeError, v4addr.__gt__, v6addr)
@@ -812,6 +1020,16 @@
         self.assertRaises(TypeError, v6net.__lt__, v4net)
         self.assertRaises(TypeError, v6net.__gt__, v4net)
 
+        self.assertRaises(TypeError, v4addr.__lt__, v6addr_scoped)
+        self.assertRaises(TypeError, v4addr.__gt__, v6addr_scoped)
+        self.assertRaises(TypeError, v4net.__lt__, v6net_scoped)
+        self.assertRaises(TypeError, v4net.__gt__, v6net_scoped)
+
+        self.assertRaises(TypeError, v6addr_scoped.__lt__, v4addr)
+        self.assertRaises(TypeError, v6addr_scoped.__gt__, v4addr)
+        self.assertRaises(TypeError, v6net_scoped.__lt__, v4net)
+        self.assertRaises(TypeError, v6net_scoped.__gt__, v4net)
+
 
 class IpaddrUnitTest(unittest.TestCase):
 
@@ -825,12 +1043,19 @@
         self.ipv6_interface = ipaddress.IPv6Interface(
             '2001:658:22a:cafe:200:0:0:1/64')
         self.ipv6_network = ipaddress.IPv6Network('2001:658:22a:cafe::/64')
+        self.ipv6_scoped_address = ipaddress.IPv6Interface(
+            '2001:658:22a:cafe:200:0:0:1%scope')
+        self.ipv6_scoped_interface = ipaddress.IPv6Interface(
+            '2001:658:22a:cafe:200:0:0:1%scope/64')
+        self.ipv6_scoped_network = ipaddress.IPv6Network('2001:658:22a:cafe::%scope/64')
 
     def testRepr(self):
         self.assertEqual("IPv4Interface('1.2.3.4/32')",
                          repr(ipaddress.IPv4Interface('1.2.3.4')))
         self.assertEqual("IPv6Interface('::1/128')",
                          repr(ipaddress.IPv6Interface('::1')))
+        self.assertEqual("IPv6Interface('::1%scope/128')",
+                         repr(ipaddress.IPv6Interface('::1%scope')))
 
     # issue #16531: constructing IPv4Network from an (address, mask) tuple
     def testIPv4Tuple(self):
@@ -917,6 +1142,8 @@
         self.assertEqual(ipaddress.IPv6Network((ip, '96')),
                          net)
 
+        ip_scoped = ipaddress.IPv6Address('2001:db8::%scope')
+
         # strict=True and host bits set
         ip = ipaddress.IPv6Address('2001:db8::1')
         with self.assertRaises(ValueError):
@@ -945,6 +1172,13 @@
                 (42540766411282592856903984951653826561, '96')),
                          ipaddress.IPv6Interface('2001:db8::1/96'))
 
+        ip_scoped = ipaddress.IPv6Address('2001:db8::1%scope')
+        with self.assertRaises(ValueError):
+            ipaddress.IPv6Network(('2001:db8::1%scope', 96))
+        with self.assertRaises(ValueError):
+            ipaddress.IPv6Network((ip_scoped, 96))
+        # strict=False and host bits set
+
     # issue57
     def testAddressIntMath(self):
         self.assertEqual(ipaddress.IPv4Address('1.1.1.1') + 255,
@@ -955,6 +1189,10 @@
                          ipaddress.IPv6Address('::ffff'))
         self.assertEqual(ipaddress.IPv6Address('::ffff') - (2**16 - 2),
                          ipaddress.IPv6Address('::1'))
+        self.assertNotEqual(ipaddress.IPv6Address('::1%scope') + (2**16 - 2),
+                            ipaddress.IPv6Address('::ffff%scope'))
+        self.assertNotEqual(ipaddress.IPv6Address('::ffff%scope') - (2**16 - 2),
+                            ipaddress.IPv6Address('::1%scope'))
 
     def testInvalidIntToBytes(self):
         self.assertRaises(ValueError, ipaddress.v4_int_to_packed, -1)
@@ -987,6 +1225,12 @@
                          '2001:658:22a:cafe::')
         self.assertEqual(str(self.ipv6_network.hostmask),
                          '::ffff:ffff:ffff:ffff')
+        self.assertEqual(int(self.ipv6_scoped_network.network_address),
+                         42540616829182469433403647294022090752)
+        self.assertEqual(str(self.ipv6_scoped_network.network_address),
+                         '2001:658:22a:cafe::%scope')
+        self.assertEqual(str(self.ipv6_scoped_network.hostmask),
+                         '::ffff:ffff:ffff:ffff')
 
     def testIpFromInt(self):
         self.assertEqual(self.ipv4_interface._ip,
@@ -994,17 +1238,23 @@
 
         ipv4 = ipaddress.ip_network('1.2.3.4')
         ipv6 = ipaddress.ip_network('2001:658:22a:cafe:200:0:0:1')
+        ipv6_scoped = ipaddress.ip_network('2001:658:22a:cafe:200:0:0:1%scope')
         self.assertEqual(ipv4, ipaddress.ip_network(int(ipv4.network_address)))
         self.assertEqual(ipv6, ipaddress.ip_network(int(ipv6.network_address)))
+        self.assertNotEqual(ipv6_scoped, ipaddress.ip_network(int(ipv6_scoped.network_address)))
 
         v6_int = 42540616829182469433547762482097946625
         self.assertEqual(self.ipv6_interface._ip,
                          ipaddress.IPv6Interface(v6_int)._ip)
+        self.assertEqual(self.ipv6_scoped_interface._ip,
+                         ipaddress.IPv6Interface(v6_int)._ip)
 
         self.assertEqual(ipaddress.ip_network(self.ipv4_address._ip).version,
                          4)
         self.assertEqual(ipaddress.ip_network(self.ipv6_address._ip).version,
                          6)
+        self.assertEqual(ipaddress.ip_network(self.ipv6_scoped_address._ip).version,
+                         6)
 
     def testIpFromPacked(self):
         address = ipaddress.ip_address
@@ -1030,6 +1280,24 @@
                          42540616829182469433547762482097946625)
         self.assertEqual(str(self.ipv6_interface.ip),
                          '2001:658:22a:cafe:200::1')
+        self.assertEqual(int(self.ipv6_scoped_interface.ip),
+                         42540616829182469433547762482097946625)
+        self.assertEqual(str(self.ipv6_scoped_interface.ip),
+                         '2001:658:22a:cafe:200::1')
+
+    def testGetScopeId(self):
+        self.assertEqual(self.ipv6_address.scope_id,
+                         None)
+        self.assertEqual(str(self.ipv6_scoped_address.scope_id),
+                         'scope')
+        self.assertEqual(self.ipv6_interface.scope_id,
+                         None)
+        self.assertEqual(str(self.ipv6_scoped_interface.scope_id),
+                         'scope')
+        self.assertEqual(self.ipv6_network.network_address.scope_id,
+                         None)
+        self.assertEqual(str(self.ipv6_scoped_network.network_address.scope_id),
+                         'scope')
 
     def testGetNetmask(self):
         self.assertEqual(int(self.ipv4_network.netmask), 4294967040)
@@ -1037,6 +1305,9 @@
         self.assertEqual(int(self.ipv6_network.netmask),
                          340282366920938463444927863358058659840)
         self.assertEqual(self.ipv6_network.prefixlen, 64)
+        self.assertEqual(int(self.ipv6_scoped_network.netmask),
+                         340282366920938463444927863358058659840)
+        self.assertEqual(self.ipv6_scoped_network.prefixlen, 64)
 
     def testZeroNetmask(self):
         ipv4_zero_netmask = ipaddress.IPv4Interface('1.2.3.4/0')
@@ -1047,6 +1318,10 @@
         self.assertEqual(int(ipv6_zero_netmask.network.netmask), 0)
         self.assertEqual(ipv6_zero_netmask._prefix_from_prefix_string('0'), 0)
 
+        ipv6_scoped_zero_netmask = ipaddress.IPv6Interface('::1%scope/0')
+        self.assertEqual(int(ipv6_scoped_zero_netmask.network.netmask), 0)
+        self.assertEqual(ipv6_scoped_zero_netmask._prefix_from_prefix_string('0'), 0)
+
     def testIPv4Net(self):
         net = ipaddress.IPv4Network('127.0.0.0/0.0.0.255')
         self.assertEqual(net.prefixlen, 24)
@@ -1060,9 +1335,15 @@
         self.assertEqual(str(self.ipv6_network.broadcast_address),
                          '2001:658:22a:cafe:ffff:ffff:ffff:ffff')
 
+        self.assertEqual(int(self.ipv6_scoped_network.broadcast_address),
+                         42540616829182469451850391367731642367)
+        self.assertEqual(str(self.ipv6_scoped_network.broadcast_address),
+                         '2001:658:22a:cafe:ffff:ffff:ffff:ffff')
+
     def testGetPrefixlen(self):
         self.assertEqual(self.ipv4_interface.network.prefixlen, 24)
         self.assertEqual(self.ipv6_interface.network.prefixlen, 64)
+        self.assertEqual(self.ipv6_scoped_interface.network.prefixlen, 64)
 
     def testGetSupernet(self):
         self.assertEqual(self.ipv4_network.supernet().prefixlen, 23)
@@ -1077,6 +1358,9 @@
                          '2001:658:22a:cafe::')
         self.assertEqual(ipaddress.IPv6Interface('::0/0').network.supernet(),
                          ipaddress.IPv6Network('::0/0'))
+        self.assertEqual(self.ipv6_scoped_network.supernet().prefixlen, 63)
+        self.assertEqual(str(self.ipv6_scoped_network.supernet().network_address),
+                         '2001:658:22a:cafe::')
 
     def testGetSupernet3(self):
         self.assertEqual(self.ipv4_network.supernet(3).prefixlen, 21)
@@ -1086,6 +1370,9 @@
         self.assertEqual(self.ipv6_network.supernet(3).prefixlen, 61)
         self.assertEqual(str(self.ipv6_network.supernet(3).network_address),
                          '2001:658:22a:caf8::')
+        self.assertEqual(self.ipv6_scoped_network.supernet(3).prefixlen, 61)
+        self.assertEqual(str(self.ipv6_scoped_network.supernet(3).network_address),
+                         '2001:658:22a:caf8::')
 
     def testGetSupernet4(self):
         self.assertRaises(ValueError, self.ipv4_network.supernet,
@@ -1101,6 +1388,12 @@
                           new_prefix=65)
         self.assertEqual(self.ipv6_network.supernet(prefixlen_diff=2),
                          self.ipv6_network.supernet(new_prefix=62))
+        self.assertRaises(ValueError, self.ipv6_scoped_network.supernet,
+                          prefixlen_diff=2, new_prefix=1)
+        self.assertRaises(ValueError, self.ipv6_scoped_network.supernet,
+                          new_prefix=65)
+        self.assertEqual(self.ipv6_scoped_network.supernet(prefixlen_diff=2),
+                         self.ipv6_scoped_network.supernet(new_prefix=62))
 
     def testHosts(self):
         hosts = list(self.ipv4_network.hosts())
@@ -1114,6 +1407,12 @@
         self.assertEqual(ipaddress.IPv6Address('2001:658:22a:cafe::1'), hosts[0])
         self.assertEqual(ipaddress.IPv6Address('2001:658:22a:cafe::ff'), hosts[-1])
 
+        ipv6_scoped_network = ipaddress.IPv6Network('2001:658:22a:cafe::%scope/120')
+        hosts = list(ipv6_scoped_network.hosts())
+        self.assertEqual(255, len(hosts))
+        self.assertEqual(ipaddress.IPv6Address('2001:658:22a:cafe::1'), hosts[0])
+        self.assertEqual(ipaddress.IPv6Address('2001:658:22a:cafe::ff'), hosts[-1])
+
         # special case where only 1 bit is left for address
         addrs = [ipaddress.IPv4Address('2.0.0.0'),
                  ipaddress.IPv4Address('2.0.0.1')]
@@ -1124,6 +1423,15 @@
         self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
                          list(ipaddress.ip_network(tpl_args).hosts()))
 
+        # special case where the network is a /32
+        addrs = [ipaddress.IPv4Address('1.2.3.4')]
+        str_args = '1.2.3.4/32'
+        tpl_args = ('1.2.3.4', 32)
+        self.assertEqual(addrs, list(ipaddress.ip_network(str_args).hosts()))
+        self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts()))
+        self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
+                         list(ipaddress.ip_network(tpl_args).hosts()))
+
         addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::'),
                  ipaddress.IPv6Address('2001:658:22a:cafe::1')]
         str_args = '2001:658:22a:cafe::/127'
@@ -1133,6 +1441,14 @@
         self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
                          list(ipaddress.ip_network(tpl_args).hosts()))
 
+        addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::1'), ]
+        str_args = '2001:658:22a:cafe::1/128'
+        tpl_args = ('2001:658:22a:cafe::1', 128)
+        self.assertEqual(addrs, list(ipaddress.ip_network(str_args).hosts()))
+        self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts()))
+        self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
+                         list(ipaddress.ip_network(tpl_args).hosts()))
+
     def testFancySubnetting(self):
         self.assertEqual(sorted(self.ipv4_network.subnets(prefixlen_diff=3)),
                          sorted(self.ipv4_network.subnets(new_prefix=27)))
@@ -1148,6 +1464,13 @@
         self.assertRaises(ValueError, list,
                           self.ipv6_network.subnets(prefixlen_diff=4,
                                                    new_prefix=68))
+        self.assertEqual(sorted(self.ipv6_scoped_network.subnets(prefixlen_diff=4)),
+                         sorted(self.ipv6_scoped_network.subnets(new_prefix=68)))
+        self.assertRaises(ValueError, list,
+                          self.ipv6_scoped_network.subnets(new_prefix=63))
+        self.assertRaises(ValueError, list,
+                          self.ipv6_scoped_network.subnets(prefixlen_diff=4,
+                                                           new_prefix=68))
 
     def testGetSubnets(self):
         self.assertEqual(list(self.ipv4_network.subnets())[0].prefixlen, 25)
@@ -1159,6 +1482,7 @@
                          '1.2.3.128')
 
         self.assertEqual(list(self.ipv6_network.subnets())[0].prefixlen, 65)
+        self.assertEqual(list(self.ipv6_scoped_network.subnets())[0].prefixlen, 65)
 
     def testGetSubnetForSingle32(self):
         ip = ipaddress.IPv4Network('1.2.3.4/32')
@@ -1174,6 +1498,12 @@
         self.assertEqual(subnets1, ['::1/128'])
         self.assertEqual(subnets1, subnets2)
 
+        ip_scoped = ipaddress.IPv6Network('::1%scope/128')
+        subnets1 = [str(x) for x in ip_scoped.subnets()]
+        subnets2 = [str(x) for x in ip_scoped.subnets(2)]
+        self.assertEqual(subnets1, ['::1%scope/128'])
+        self.assertEqual(subnets1, subnets2)
+
     def testSubnet2(self):
         ips = [str(x) for x in self.ipv4_network.subnets(2)]
         self.assertEqual(
@@ -1217,12 +1547,18 @@
                           self.ipv6_interface.network.subnets(65))
         self.assertRaises(ValueError, list,
                           self.ipv6_network.subnets(65))
+        self.assertRaises(ValueError, list,
+                          self.ipv6_scoped_interface.network.subnets(65))
+        self.assertRaises(ValueError, list,
+                          self.ipv6_scoped_network.subnets(65))
 
     def testSupernetFailsForLargeCidrDiff(self):
         self.assertRaises(ValueError,
                           self.ipv4_interface.network.supernet, 25)
         self.assertRaises(ValueError,
                           self.ipv6_interface.network.supernet, 65)
+        self.assertRaises(ValueError,
+                          self.ipv6_scoped_interface.network.supernet, 65)
 
     def testSubnetFailsForNegativeCidrDiff(self):
         self.assertRaises(ValueError, list,
@@ -1233,6 +1569,10 @@
                           self.ipv6_interface.network.subnets(-1))
         self.assertRaises(ValueError, list,
                           self.ipv6_network.subnets(-1))
+        self.assertRaises(ValueError, list,
+                          self.ipv6_scoped_interface.network.subnets(-1))
+        self.assertRaises(ValueError, list,
+                          self.ipv6_scoped_network.subnets(-1))
 
     def testGetNum_Addresses(self):
         self.assertEqual(self.ipv4_network.num_addresses, 256)
@@ -1245,6 +1585,11 @@
                          9223372036854775808)
         self.assertEqual(self.ipv6_network.supernet().num_addresses,
                          36893488147419103232)
+        self.assertEqual(self.ipv6_scoped_network.num_addresses, 18446744073709551616)
+        self.assertEqual(list(self.ipv6_scoped_network.subnets())[0].num_addresses,
+                         9223372036854775808)
+        self.assertEqual(self.ipv6_scoped_network.supernet().num_addresses,
+                         36893488147419103232)
 
     def testContains(self):
         self.assertIn(ipaddress.IPv4Interface('1.2.3.128/25'),
@@ -1266,6 +1611,9 @@
         self.assertEqual(str(self.ipv6_network[5]),
                          '2001:658:22a:cafe::5')
         self.assertRaises(IndexError, self.ipv6_network.__getitem__, 1 << 64)
+        self.assertEqual(str(self.ipv6_scoped_network[5]),
+                         '2001:658:22a:cafe::5')
+        self.assertRaises(IndexError, self.ipv6_scoped_network.__getitem__, 1 << 64)
 
     def testGetitem(self):
         # http://code.google.com/p/ipaddr-py/issues/detail?id=15
@@ -1285,6 +1633,8 @@
                          ipaddress.IPv4Interface('1.2.3.4/23'))
         self.assertFalse(self.ipv4_interface ==
                          ipaddress.IPv6Interface('::1.2.3.4/24'))
+        self.assertFalse(self.ipv4_interface ==
+                         ipaddress.IPv6Interface('::1.2.3.4%scope/24'))
         self.assertFalse(self.ipv4_interface == '')
         self.assertFalse(self.ipv4_interface == [])
         self.assertFalse(self.ipv4_interface == 2)
@@ -1299,6 +1649,20 @@
         self.assertFalse(self.ipv6_interface == [])
         self.assertFalse(self.ipv6_interface == 2)
 
+        self.assertTrue(self.ipv6_scoped_interface ==
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1%scope/64'))
+        self.assertFalse(self.ipv6_scoped_interface ==
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1%scope/63'))
+        self.assertFalse(self.ipv6_scoped_interface ==
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/64'))
+        self.assertFalse(self.ipv6_scoped_interface ==
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/63'))
+        self.assertFalse(self.ipv6_scoped_interface ==
+                         ipaddress.IPv4Interface('1.2.3.4/23'))
+        self.assertFalse(self.ipv6_scoped_interface == '')
+        self.assertFalse(self.ipv6_scoped_interface == [])
+        self.assertFalse(self.ipv6_scoped_interface == 2)
+
     def testNotEqual(self):
         self.assertFalse(self.ipv4_interface !=
                          ipaddress.IPv4Interface('1.2.3.4/24'))
@@ -1306,6 +1670,8 @@
                         ipaddress.IPv4Interface('1.2.3.4/23'))
         self.assertTrue(self.ipv4_interface !=
                         ipaddress.IPv6Interface('::1.2.3.4/24'))
+        self.assertTrue(self.ipv4_interface !=
+                        ipaddress.IPv6Interface('::1.2.3.4%scope/24'))
         self.assertTrue(self.ipv4_interface != '')
         self.assertTrue(self.ipv4_interface != [])
         self.assertTrue(self.ipv4_interface != 2)
@@ -1332,6 +1698,26 @@
         self.assertTrue(self.ipv6_address != [])
         self.assertTrue(self.ipv6_address != 2)
 
+        self.assertFalse(self.ipv6_scoped_interface !=
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1%scope/64'))
+        self.assertTrue(self.ipv6_scoped_interface !=
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1%scope/63'))
+        self.assertTrue(self.ipv6_scoped_interface !=
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/64'))
+        self.assertTrue(self.ipv6_scoped_interface !=
+            ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/63'))
+        self.assertTrue(self.ipv6_scoped_interface !=
+                        ipaddress.IPv4Interface('1.2.3.4/23'))
+        self.assertTrue(self.ipv6_scoped_interface != '')
+        self.assertTrue(self.ipv6_scoped_interface != [])
+        self.assertTrue(self.ipv6_scoped_interface != 2)
+
+        self.assertTrue(self.ipv6_scoped_address !=
+                        ipaddress.IPv4Address('1.2.3.4'))
+        self.assertTrue(self.ipv6_scoped_address != '')
+        self.assertTrue(self.ipv6_scoped_address != [])
+        self.assertTrue(self.ipv6_scoped_address != 2)
+
     def testSlash32Constructor(self):
         self.assertEqual(str(ipaddress.IPv4Interface(
                     '1.2.3.4/255.255.255.255')), '1.2.3.4/32')
@@ -1339,6 +1725,8 @@
     def testSlash128Constructor(self):
         self.assertEqual(str(ipaddress.IPv6Interface('::1/128')),
                                   '::1/128')
+        self.assertEqual(str(ipaddress.IPv6Interface('::1%scope/128')),
+                                  '::1%scope/128')
 
     def testSlash0Constructor(self):
         self.assertEqual(str(ipaddress.IPv4Interface('1.2.3.4/0.0.0.0')),
@@ -1410,6 +1798,13 @@
         collapsed = ipaddress.collapse_addresses([ip1, ip2, ip3])
         self.assertEqual(list(collapsed), [ip3])
 
+        ip1 = ipaddress.IPv6Network('2001::%scope/100')
+        ip2 = ipaddress.IPv6Network('2001::%scope/120')
+        ip3 = ipaddress.IPv6Network('2001::%scope/96')
+        # test that ipv6 addresses are subsumed properly.
+        collapsed = ipaddress.collapse_addresses([ip1, ip2, ip3])
+        self.assertEqual(list(collapsed), [ip3])
+
         # the toejam test
         addr_tuples = [
                 (ipaddress.ip_address('1.1.1.1'),
@@ -1423,6 +1818,18 @@
             self.assertRaises(TypeError, ipaddress.collapse_addresses,
                               [ip1, ip2])
 
+        addr_tuples = [
+                (ipaddress.ip_address('1.1.1.1'),
+                 ipaddress.ip_address('::1%scope')),
+                (ipaddress.IPv4Network('1.1.0.0/24'),
+                 ipaddress.IPv6Network('2001::%scope/120')),
+                (ipaddress.IPv4Network('1.1.0.0/32'),
+                 ipaddress.IPv6Network('2001::%scope/128')),
+        ]
+        for ip1, ip2 in addr_tuples:
+            self.assertRaises(TypeError, ipaddress.collapse_addresses,
+                              [ip1, ip2])
+
     def testSummarizing(self):
         #ip = ipaddress.ip_address
         #ipnet = ipaddress.ip_network
@@ -1442,6 +1849,8 @@
         # test that a summary over ip4 & ip6 fails
         self.assertRaises(TypeError, list,
                           summarize(ip1, ipaddress.IPv6Address('::1')))
+        self.assertRaises(TypeError, list,
+                          summarize(ip1, ipaddress.IPv6Address('::1%scope')))
         # test a /24 is summarized properly
         self.assertEqual(list(summarize(ip1, ip2))[0],
                          ipaddress.ip_network('1.1.1.0/24'))
@@ -1467,6 +1876,17 @@
                          [ipaddress.ip_network('1::/16'),
                           ipaddress.ip_network('2::/128')])
 
+        ip1 = ipaddress.ip_address('1::%scope')
+        ip2 = ipaddress.ip_address('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scope')
+        # test an IPv6 is summarized properly
+        self.assertEqual(list(summarize(ip1, ip2))[0],
+                         ipaddress.ip_network('1::/16'))
+        # test an IPv6 range that isn't on a network byte boundary
+        ip2 = ipaddress.ip_address('2::%scope')
+        self.assertEqual(list(summarize(ip1, ip2)),
+                         [ipaddress.ip_network('1::/16'),
+                          ipaddress.ip_network('2::/128')])
+
         # test exception raised when first is greater than last
         self.assertRaises(ValueError, list,
                           summarize(ipaddress.ip_address('1.1.1.0'),
@@ -1492,6 +1912,10 @@
                         ipaddress.ip_address('::1'))
         self.assertTrue(ipaddress.ip_address('::1') <=
                         ipaddress.ip_address('::2'))
+        self.assertTrue(ipaddress.ip_address('::1%scope') <=
+                        ipaddress.ip_address('::1%scope'))
+        self.assertTrue(ipaddress.ip_address('::1%scope') <=
+                        ipaddress.ip_address('::2%scope'))
 
     def testInterfaceComparison(self):
         self.assertTrue(ipaddress.ip_interface('1.1.1.1/24') ==
@@ -1524,6 +1948,52 @@
         self.assertTrue(ipaddress.ip_interface('::1/64') >
                         ipaddress.ip_interface('::2/48'))
 
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') ==
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') <
+                        ipaddress.ip_interface('::1%scope/80'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') <
+                        ipaddress.ip_interface('::2%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::2%scope/48') <
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/80') >
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::2%scope/64') >
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') >
+                        ipaddress.ip_interface('::2%scope/48'))
+
+
+        self.assertFalse(ipaddress.ip_interface('::1%scope/64') ==
+                        ipaddress.ip_interface('::1/64'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') <
+                        ipaddress.ip_interface('::1/80'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') <
+                        ipaddress.ip_interface('::2/64'))
+        self.assertTrue(ipaddress.ip_interface('::2%scope/48') <
+                        ipaddress.ip_interface('::1/64'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/80') >
+                        ipaddress.ip_interface('::1/64'))
+        self.assertTrue(ipaddress.ip_interface('::2%scope/64') >
+                        ipaddress.ip_interface('::1/64'))
+        self.assertTrue(ipaddress.ip_interface('::1%scope/64') >
+                        ipaddress.ip_interface('::2/48'))
+
+        self.assertFalse(ipaddress.ip_interface('::1/64') ==
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::1/64') <
+                        ipaddress.ip_interface('::1%scope/80'))
+        self.assertTrue(ipaddress.ip_interface('::1/64') <
+                        ipaddress.ip_interface('::2%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::2/48') <
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::1/80') >
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::2/64') >
+                        ipaddress.ip_interface('::1%scope/64'))
+        self.assertTrue(ipaddress.ip_interface('::1/64') >
+                        ipaddress.ip_interface('::2%scope/48'))
+
     def testNetworkComparison(self):
         # ip1 and ip2 have the same network address
         ip1 = ipaddress.IPv4Network('1.1.1.0/24')
@@ -1603,6 +2073,7 @@
                         ipaddress.ip_network('1.1.1.2'))
         self.assertFalse(ipaddress.ip_network('1.1.1.2') <=
                         ipaddress.ip_network('1.1.1.1'))
+
         self.assertTrue(ipaddress.ip_network('::1') <=
                         ipaddress.ip_network('::1'))
         self.assertTrue(ipaddress.ip_network('::1') <=
@@ -1613,6 +2084,7 @@
     def testStrictNetworks(self):
         self.assertRaises(ValueError, ipaddress.ip_network, '192.168.1.1/24')
         self.assertRaises(ValueError, ipaddress.ip_network, '::1/120')
+        self.assertRaises(ValueError, ipaddress.ip_network, '::1%scope/120')
 
     def testOverlaps(self):
         other = ipaddress.IPv4Network('1.2.3.0/30')
@@ -1641,13 +2113,28 @@
         self.assertEqual(ipaddress.ip_address('FFFF::192.0.2.1'),
                           ipaddress.ip_address('FFFF::c000:201'))
 
+        self.assertEqual(ipaddress.ip_address('::FFFF:192.0.2.1%scope'),
+                          ipaddress.ip_address('::FFFF:c000:201%scope'))
+        self.assertEqual(ipaddress.ip_address('FFFF::192.0.2.1%scope'),
+                          ipaddress.ip_address('FFFF::c000:201%scope'))
+        self.assertNotEqual(ipaddress.ip_address('::FFFF:192.0.2.1%scope'),
+                            ipaddress.ip_address('::FFFF:c000:201'))
+        self.assertNotEqual(ipaddress.ip_address('FFFF::192.0.2.1%scope'),
+                            ipaddress.ip_address('FFFF::c000:201'))
+        self.assertNotEqual(ipaddress.ip_address('::FFFF:192.0.2.1'),
+                          ipaddress.ip_address('::FFFF:c000:201%scope'))
+        self.assertNotEqual(ipaddress.ip_address('FFFF::192.0.2.1'),
+                          ipaddress.ip_address('FFFF::c000:201%scope'))
+
     def testIPVersion(self):
         self.assertEqual(self.ipv4_address.version, 4)
         self.assertEqual(self.ipv6_address.version, 6)
+        self.assertEqual(self.ipv6_scoped_address.version, 6)
 
     def testMaxPrefixLength(self):
         self.assertEqual(self.ipv4_interface.max_prefixlen, 32)
         self.assertEqual(self.ipv6_interface.max_prefixlen, 128)
+        self.assertEqual(self.ipv6_scoped_interface.max_prefixlen, 128)
 
     def testPacked(self):
         self.assertEqual(self.ipv4_address.packed,
@@ -1662,6 +2149,14 @@
                             + b'\x00' * 6)
         self.assertEqual(ipaddress.IPv6Interface('::1:0:0:0:0').packed,
                          b'\x00' * 6 + b'\x00\x01' + b'\x00' * 8)
+        self.assertEqual(self.ipv6_scoped_address.packed,
+                         b'\x20\x01\x06\x58\x02\x2a\xca\xfe'
+                         b'\x02\x00\x00\x00\x00\x00\x00\x01')
+        self.assertEqual(ipaddress.IPv6Interface('ffff:2:3:4:ffff::%scope').packed,
+                         b'\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
+                            + b'\x00' * 6)
+        self.assertEqual(ipaddress.IPv6Interface('::1:0:0:0:0%scope').packed,
+                         b'\x00' * 6 + b'\x00\x01' + b'\x00' * 8)
 
     def testIpType(self):
         ipv4net = ipaddress.ip_network('1.2.3.4')
diff --git a/Lib/test/test_isinstance.py b/Lib/test/test_isinstance.py
index 53639e9..31b3899 100644
--- a/Lib/test/test_isinstance.py
+++ b/Lib/test/test_isinstance.py
@@ -271,6 +271,16 @@
 
         self.assertEqual(True, issubclass(B(), int))
 
+    def test_infinite_recursion_in_bases(self):
+        class X:
+            @property
+            def __bases__(self):
+                return self.__bases__
+
+        self.assertRaises(RecursionError, issubclass, X(), int)
+        self.assertRaises(RecursionError, issubclass, int, X())
+        self.assertRaises(RecursionError, isinstance, 1, X())
+
 
 def blowstack(fxn, arg, compare_to):
     # Make sure that calling isinstance with a deeply nested tuple for its
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index 22553d5..5243469 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -3,7 +3,7 @@
 import sys
 import unittest
 from test.support import run_unittest, TESTFN, unlink, cpython_only
-from test.support import check_free_after_iterating
+from test.support import check_free_after_iterating, ALWAYS_EQ, NEVER_EQ
 import pickle
 import collections.abc
 
@@ -41,6 +41,14 @@
     def __iter__(self):
         return BasicIterClass(self.n)
 
+class IteratorProxyClass:
+    def __init__(self, i):
+        self.i = i
+    def __next__(self):
+        return next(self.i)
+    def __iter__(self):
+        return self
+
 class SequenceClass:
     def __init__(self, n):
         self.n = n
@@ -50,6 +58,12 @@
         else:
             raise IndexError
 
+class SequenceProxyClass:
+    def __init__(self, s):
+        self.s = s
+    def __getitem__(self, i):
+        return self.s[i]
+
 class UnlimitedSequenceClass:
     def __getitem__(self, i):
         return i
@@ -639,6 +653,13 @@
             for i in "abc", -1, 5, 42.42, (3, 4), [], {1: 1}, 3-12j, sc5:
                 self.assertNotIn(i, sc5)
 
+        self.assertIn(ALWAYS_EQ, IteratorProxyClass(iter([1])))
+        self.assertIn(ALWAYS_EQ, SequenceProxyClass([1]))
+        self.assertNotIn(ALWAYS_EQ, IteratorProxyClass(iter([NEVER_EQ])))
+        self.assertNotIn(ALWAYS_EQ, SequenceProxyClass([NEVER_EQ]))
+        self.assertIn(NEVER_EQ, IteratorProxyClass(iter([ALWAYS_EQ])))
+        self.assertIn(NEVER_EQ, SequenceProxyClass([ALWAYS_EQ]))
+
         self.assertRaises(TypeError, lambda: 3 in 12)
         self.assertRaises(TypeError, lambda: 3 not in map)
         self.assertRaises(ZeroDivisionError, lambda: 3 in BadIterableClass())
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index eaa6197..702cf08 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -2290,7 +2290,7 @@
 ...     "Count how many times the predicate is true"
 ...     return sum(map(pred, iterable))
 
->>> def padnone(iterable):
+>>> def pad_none(iterable):
 ...     "Returns the sequence elements and then returns None indefinitely"
 ...     return chain(iterable, repeat(None))
 
@@ -2460,7 +2460,7 @@
 >>> list(pairwise('a'))
 []
 
->>> list(islice(padnone('abc'), 0, 6))
+>>> list(islice(pad_none('abc'), 0, 6))
 ['a', 'b', 'c', None, None, None]
 
 >>> list(ncycles('abc', 3))
diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py
index 895c95b..fdb9e62 100644
--- a/Lib/test/test_json/test_decode.py
+++ b/Lib/test/test_json/test_decode.py
@@ -95,9 +95,5 @@
         d = self.json.JSONDecoder()
         self.assertRaises(ValueError, d.raw_decode, 'a'*42, -50000)
 
-    def test_deprecated_encode(self):
-        with self.assertWarns(DeprecationWarning):
-            self.loads('{}', encoding='fake')
-
 class TestPyDecode(TestDecode, PyTest): pass
 class TestCDecode(TestDecode, CTest): pass
diff --git a/Lib/test/test_json/test_recursion.py b/Lib/test/test_json/test_recursion.py
index 877dc44..543c628 100644
--- a/Lib/test/test_json/test_recursion.py
+++ b/Lib/test/test_json/test_recursion.py
@@ -52,7 +52,7 @@
                         return [JSONTestObject]
                     else:
                         return 'JSONTestObject'
-                return pyjson.JSONEncoder.default(o)
+                return self.json.JSONEncoder.default(o)
 
         enc = RecursiveJSONEncoder()
         self.assertEqual(enc.encode(JSONTestObject), '"JSONTestObject"')
diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py
index a62a5d4..fc2a7a4 100644
--- a/Lib/test/test_json/test_tool.py
+++ b/Lib/test/test_json/test_tool.py
@@ -3,8 +3,8 @@
 import sys
 import textwrap
 import unittest
+import subprocess
 
-from subprocess import Popen, PIPE
 from test import support
 from test.support.script_helper import assert_python_ok
 
@@ -86,10 +86,9 @@
 
     def test_stdin_stdout(self):
         args = sys.executable, '-m', 'json.tool'
-        with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc:
-            out, err = proc.communicate(self.data.encode())
-        self.assertEqual(out.splitlines(), self.expect.encode().splitlines())
-        self.assertEqual(err, b'')
+        process = subprocess.run(args, input=self.data, capture_output=True, text=True, check=True)
+        self.assertEqual(process.stdout, self.expect)
+        self.assertEqual(process.stderr, '')
 
     def _create_infile(self, data=None):
         infile = support.TESTFN
@@ -133,10 +132,9 @@
 
     def test_jsonlines(self):
         args = sys.executable, '-m', 'json.tool', '--json-lines'
-        with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc:
-            out, err = proc.communicate(self.jsonlines_raw.encode())
-        self.assertEqual(out.splitlines(), self.jsonlines_expect.encode().splitlines())
-        self.assertEqual(err, b'')
+        process = subprocess.run(args, input=self.jsonlines_raw, capture_output=True, text=True, check=True)
+        self.assertEqual(process.stdout, self.jsonlines_expect)
+        self.assertEqual(process.stderr, '')
 
     def test_help_flag(self):
         rc, out, err = assert_python_ok('-m', 'json.tool', '-h')
@@ -152,10 +150,71 @@
                          self.expect_without_sort_keys.encode().splitlines())
         self.assertEqual(err, b'')
 
+    def test_indent(self):
+        input_ = '[1, 2]'
+        expect = textwrap.dedent('''\
+        [
+          1,
+          2
+        ]
+        ''')
+        args = sys.executable, '-m', 'json.tool', '--indent', '2'
+        process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True)
+        self.assertEqual(process.stdout, expect)
+        self.assertEqual(process.stderr, '')
+
+    def test_no_indent(self):
+        input_ = '[1,\n2]'
+        expect = '[1, 2]\n'
+        args = sys.executable, '-m', 'json.tool', '--no-indent'
+        process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True)
+        self.assertEqual(process.stdout, expect)
+        self.assertEqual(process.stderr, '')
+
+    def test_tab(self):
+        input_ = '[1, 2]'
+        expect = '[\n\t1,\n\t2\n]\n'
+        args = sys.executable, '-m', 'json.tool', '--tab'
+        process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True)
+        self.assertEqual(process.stdout, expect)
+        self.assertEqual(process.stderr, '')
+
+    def test_compact(self):
+        input_ = '[ 1 ,\n 2]'
+        expect = '[1,2]\n'
+        args = sys.executable, '-m', 'json.tool', '--compact'
+        process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True)
+        self.assertEqual(process.stdout, expect)
+        self.assertEqual(process.stderr, '')
+
+    def test_no_ensure_ascii_flag(self):
+        infile = self._create_infile('{"key":"💩"}')
+        outfile = support.TESTFN + '.out'
+        self.addCleanup(os.remove, outfile)
+        assert_python_ok('-m', 'json.tool', '--no-ensure-ascii', infile, outfile)
+        with open(outfile, "rb") as f:
+            lines = f.read().splitlines()
+        # asserting utf-8 encoded output file
+        expected = [b'{', b'    "key": "\xf0\x9f\x92\xa9"', b"}"]
+        self.assertEqual(lines, expected)
+
+    def test_ensure_ascii_default(self):
+        infile = self._create_infile('{"key":"💩"}')
+        outfile = support.TESTFN + '.out'
+        self.addCleanup(os.remove, outfile)
+        assert_python_ok('-m', 'json.tool', infile, outfile)
+        with open(outfile, "rb") as f:
+            lines = f.read().splitlines()
+        # asserting an ascii encoded output file
+        expected = [b'{', rb'    "key": "\ud83d\udca9"', b"}"]
+        self.assertEqual(lines, expected)
+
     @unittest.skipIf(sys.platform =="win32", "The test is failed with ValueError on Windows")
     def test_broken_pipe_error(self):
         cmd = [sys.executable, '-m', 'json.tool']
-        proc = Popen(cmd, stdout=PIPE, stdin=PIPE)
+        proc = subprocess.Popen(cmd,
+                                stdout=subprocess.PIPE,
+                                stdin=subprocess.PIPE)
         # bpo-39828: Closing before json.tool attempts to write into stdout.
         proc.stdout.close()
         proc.communicate(b'"{}"')
diff --git a/Lib/test/test_keyword.py b/Lib/test/test_keyword.py
index 3e2a8b3..e1042cf 100644
--- a/Lib/test/test_keyword.py
+++ b/Lib/test/test_keyword.py
@@ -1,5 +1,6 @@
 import keyword
 import unittest
+from test.support import use_old_parser
 
 
 class Test_iskeyword(unittest.TestCase):
@@ -21,7 +22,10 @@
         self.assertFalse(keyword.iskeyword('eggs'))
 
     def test_all_keywords_fail_to_be_used_as_names(self):
-        for key in keyword.kwlist:
+        all_keywords = set(keyword.kwlist)
+        if use_old_parser():
+            all_keywords.discard('__peg_parser__')
+        for key in all_keywords:
             with self.assertRaises(SyntaxError):
                 exec(f"{key} = 42")
 
diff --git a/Lib/test/test_largefile.py b/Lib/test/test_largefile.py
index 8870c72..a99b4ba 100644
--- a/Lib/test/test_largefile.py
+++ b/Lib/test/test_largefile.py
@@ -5,17 +5,21 @@
 import stat
 import sys
 import unittest
+import socket
+import shutil
+import threading
 from test.support import TESTFN, requires, unlink, bigmemtest
+from test.support import SHORT_TIMEOUT
+from test.support import socket_helper
 import io  # C implementation of io
 import _pyio as pyio # Python implementation of io
 
 # size of file to create (>2 GiB; 2 GiB == 2,147,483,648 bytes)
 size = 2_500_000_000
+TESTFN2 = TESTFN + '2'
+
 
 class LargeFileTest:
-    """Test that each file function works as expected for large
-    (i.e. > 2 GiB) files.
-    """
 
     def setUp(self):
         if os.path.exists(TESTFN):
@@ -44,6 +48,13 @@
         if not os.stat(TESTFN)[stat.ST_SIZE] == 0:
             raise cls.failureException('File was not truncated by opening '
                                        'with mode "wb"')
+        unlink(TESTFN2)
+
+
+class TestFileMethods(LargeFileTest):
+    """Test that each file function works as expected for large
+    (i.e. > 2 GiB) files.
+    """
 
     # _pyio.FileIO.readall() uses a temporary bytearray then casted to bytes,
     # so memuse=2 is needed
@@ -140,6 +151,91 @@
                 f.seek(pos)
                 self.assertTrue(f.seekable())
 
+
+def skip_no_disk_space(path, required):
+    def decorator(fun):
+        def wrapper(*args, **kwargs):
+            if shutil.disk_usage(os.path.realpath(path)).free < required:
+                hsize = int(required / 1024 / 1024)
+                raise unittest.SkipTest(
+                    f"required {hsize} MiB of free disk space")
+            return fun(*args, **kwargs)
+        return wrapper
+    return decorator
+
+
+class TestCopyfile(LargeFileTest, unittest.TestCase):
+    open = staticmethod(io.open)
+
+    # Exact required disk space would be (size * 2), but let's give it a
+    # bit more tolerance.
+    @skip_no_disk_space(TESTFN, size * 2.5)
+    def test_it(self):
+        # Internally shutil.copyfile() can use "fast copy" methods like
+        # os.sendfile().
+        size = os.path.getsize(TESTFN)
+        shutil.copyfile(TESTFN, TESTFN2)
+        self.assertEqual(os.path.getsize(TESTFN2), size)
+        with open(TESTFN2, 'rb') as f:
+            self.assertEqual(f.read(5), b'z\x00\x00\x00\x00')
+            f.seek(size - 5)
+            self.assertEqual(f.read(), b'\x00\x00\x00\x00a')
+
+
+@unittest.skipIf(not hasattr(os, 'sendfile'), 'sendfile not supported')
+class TestSocketSendfile(LargeFileTest, unittest.TestCase):
+    open = staticmethod(io.open)
+    timeout = SHORT_TIMEOUT
+
+    def setUp(self):
+        super().setUp()
+        self.thread = None
+
+    def tearDown(self):
+        super().tearDown()
+        if self.thread is not None:
+            self.thread.join(self.timeout)
+            self.thread = None
+
+    def tcp_server(self, sock):
+        def run(sock):
+            with sock:
+                conn, _ = sock.accept()
+                conn.settimeout(self.timeout)
+                with conn, open(TESTFN2, 'wb') as f:
+                    event.wait(self.timeout)
+                    while True:
+                        chunk = conn.recv(65536)
+                        if not chunk:
+                            return
+                        f.write(chunk)
+
+        event = threading.Event()
+        sock.settimeout(self.timeout)
+        self.thread = threading.Thread(target=run, args=(sock, ))
+        self.thread.start()
+        event.set()
+
+    # Exact required disk space would be (size * 2), but let's give it a
+    # bit more tolerance.
+    @skip_no_disk_space(TESTFN, size * 2.5)
+    def test_it(self):
+        port = socket_helper.find_unused_port()
+        with socket.create_server(("", port)) as sock:
+            self.tcp_server(sock)
+            with socket.create_connection(("127.0.0.1", port)) as client:
+                with open(TESTFN, 'rb') as f:
+                    client.sendfile(f)
+        self.tearDown()
+
+        size = os.path.getsize(TESTFN)
+        self.assertEqual(os.path.getsize(TESTFN2), size)
+        with open(TESTFN2, 'rb') as f:
+            self.assertEqual(f.read(5), b'z\x00\x00\x00\x00')
+            f.seek(size - 5)
+            self.assertEqual(f.read(), b'\x00\x00\x00\x00a')
+
+
 def setUpModule():
     try:
         import signal
@@ -176,14 +272,18 @@
             unlink(TESTFN)
 
 
-class CLargeFileTest(LargeFileTest, unittest.TestCase):
+class CLargeFileTest(TestFileMethods, unittest.TestCase):
     open = staticmethod(io.open)
 
-class PyLargeFileTest(LargeFileTest, unittest.TestCase):
+
+class PyLargeFileTest(TestFileMethods, unittest.TestCase):
     open = staticmethod(pyio.open)
 
+
 def tearDownModule():
     unlink(TESTFN)
+    unlink(TESTFN2)
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_lib2to3.py b/Lib/test/test_lib2to3.py
index 5eaa516..e939d47 100644
--- a/Lib/test/test_lib2to3.py
+++ b/Lib/test/test_lib2to3.py
@@ -1,5 +1,8 @@
-from lib2to3.tests import load_tests
 import unittest
+from test.support import check_warnings, import_fresh_module
+
+with check_warnings(("", PendingDeprecationWarning)):
+    load_tests = import_fresh_module('lib2to3.tests', fresh=['lib2to3']).load_tests
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_list.py b/Lib/test/test_list.py
index 105ef65..3c8d829 100644
--- a/Lib/test/test_list.py
+++ b/Lib/test/test_list.py
@@ -150,6 +150,11 @@
             a[:] = data
             self.assertEqual(list(it), [])
 
+    def test_step_overflow(self):
+        a = [0, 1, 2, 3, 4]
+        a[1::sys.maxsize] = [0]
+        self.assertEqual(a[3::sys.maxsize], [3])
+
     def test_no_comdat_folding(self):
         # Issue 8847: In the PGO build, the MSVC linker's COMDAT folding
         # optimization causes failures in code that relies on distinct
diff --git a/Lib/test/test_listcomps.py b/Lib/test/test_listcomps.py
index ddb169f..62b3319 100644
--- a/Lib/test/test_listcomps.py
+++ b/Lib/test/test_listcomps.py
@@ -16,6 +16,22 @@
     >>> [(i,j) for i in range(4) for j in range(i)]
     [(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]
 
+Test the idiom for temporary variable assignment in comprehensions.
+
+    >>> [j*j for i in range(4) for j in [i+1]]
+    [1, 4, 9, 16]
+    >>> [j*k for i in range(4) for j in [i+1] for k in [j+1]]
+    [2, 6, 12, 20]
+    >>> [j*k for i in range(4) for j, k in [(i+1, i+2)]]
+    [2, 6, 12, 20]
+
+Not assignment
+
+    >>> [i*i for i in [*range(4)]]
+    [0, 1, 4, 9]
+    >>> [i*i for i in (*range(4),)]
+    [0, 1, 4, 9]
+
 Make sure the induction variable is not exposed
 
     >>> i = 20
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index c5d8e26..2863d20 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -334,8 +334,7 @@
         euro = '\u20ac'
         self._test_currency(50000, "50000,00 " + euro)
         self._test_currency(50000, "50 000,00 " + euro, grouping=True)
-        # XXX is the trailing space a bug?
-        self._test_currency(50000, "50 000,00 EUR ",
+        self._test_currency(50000, "50 000,00 EUR",
             grouping=True, international=True)
 
 
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 09b273b..410eae2 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2017 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2019 by Vinay Sajip. All Rights Reserved.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation for any purpose and without fee is hereby granted,
@@ -16,7 +16,7 @@
 
 """Test harness for the logging module. Run all tests.
 
-Copyright (C) 2001-2017 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2019 Vinay Sajip. All Rights Reserved.
 """
 
 import logging
@@ -36,13 +36,14 @@
 import queue
 import random
 import re
-import signal
 import socket
 import struct
 import sys
 import tempfile
 from test.support.script_helper import assert_python_ok, assert_python_failure
 from test import support
+from test.support import socket_helper
+from test.support.logging_helper import TestHandler
 import textwrap
 import threading
 import time
@@ -727,30 +728,19 @@
 
         locks_held__ready_to_fork.wait()
         pid = os.fork()
-        if pid == 0:  # Child.
+        if pid == 0:
+            # Child process
             try:
                 test_logger.info(r'Child process did not deadlock. \o/')
             finally:
                 os._exit(0)
-        else:  # Parent.
+        else:
+            # Parent process
             test_logger.info(r'Parent process returned from fork. \o/')
             fork_happened__release_locks_and_end_thread.set()
             lock_holder_thread.join()
-            start_time = time.monotonic()
-            while True:
-                test_logger.debug('Waiting for child process.')
-                waited_pid, status = os.waitpid(pid, os.WNOHANG)
-                if waited_pid == pid:
-                    break  # child process exited.
-                if time.monotonic() - start_time > 7:
-                    break  # so long? implies child deadlock.
-                time.sleep(0.05)
-            test_logger.debug('Done waiting.')
-            if waited_pid != pid:
-                os.kill(pid, signal.SIGKILL)
-                waited_pid, status = os.waitpid(pid, 0)
-                self.fail("child process deadlocked.")
-            self.assertEqual(status, 0, msg="child process error")
+
+            support.wait_process(pid, exitcode=0)
 
 
 class BadStream(object):
@@ -869,16 +859,13 @@
         """
         asyncore.loop(poll_interval, map=self._map)
 
-    def stop(self, timeout=None):
+    def stop(self):
         """
         Stop the thread by closing the server instance.
         Wait for the server thread to terminate.
-
-        :param timeout: How long to wait for the server thread
-                        to terminate.
         """
         self.close()
-        support.join_thread(self._thread, timeout)
+        support.join_thread(self._thread)
         self._thread = None
         asyncore.close_all(map=self._map, ignore_all=True)
 
@@ -922,16 +909,13 @@
         self.ready.set()
         super(ControlMixin, self).serve_forever(poll_interval)
 
-    def stop(self, timeout=None):
+    def stop(self):
         """
         Tell the server thread to stop, and wait for it to do so.
-
-        :param timeout: How long to wait for the server thread
-                        to terminate.
         """
         self.shutdown()
         if self._thread is not None:
-            support.join_thread(self._thread, timeout)
+            support.join_thread(self._thread)
             self._thread = None
         self.server_close()
         self.ready.clear()
@@ -1065,15 +1049,15 @@
 # - end of server_helper section
 
 class SMTPHandlerTest(BaseTest):
-    # bpo-14314, bpo-19665, bpo-34092: don't wait forever, timeout of 1 minute
-    TIMEOUT = 60.0
+    # bpo-14314, bpo-19665, bpo-34092: don't wait forever
+    TIMEOUT = support.LONG_TIMEOUT
 
     def test_basic(self):
         sockmap = {}
-        server = TestSMTPServer((support.HOST, 0), self.process_message, 0.001,
+        server = TestSMTPServer((socket_helper.HOST, 0), self.process_message, 0.001,
                                 sockmap)
         server.start()
-        addr = (support.HOST, server.port)
+        addr = (socket_helper.HOST, server.port)
         h = logging.handlers.SMTPHandler(addr, 'me', 'you', 'Log',
                                          timeout=self.TIMEOUT)
         self.assertEqual(h.toaddrs, ['you'])
@@ -1173,6 +1157,32 @@
         # assert that no new lines have been added
         self.assert_log_lines(lines)  # no change
 
+    def test_race_between_set_target_and_flush(self):
+        class MockRaceConditionHandler:
+            def __init__(self, mem_hdlr):
+                self.mem_hdlr = mem_hdlr
+                self.threads = []
+
+            def removeTarget(self):
+                self.mem_hdlr.setTarget(None)
+
+            def handle(self, msg):
+                thread = threading.Thread(target=self.removeTarget)
+                self.threads.append(thread)
+                thread.start()
+
+        target = MockRaceConditionHandler(self.mem_hdlr)
+        try:
+            self.mem_hdlr.setTarget(target)
+
+            for _ in range(10):
+                time.sleep(0.005)
+                self.mem_logger.info("not flushed")
+                self.mem_logger.warning("flushed")
+        finally:
+            for thread in target.threads:
+                support.join_thread(thread)
+
 
 class ExceptionFormatter(logging.Formatter):
     """A special exception formatter."""
@@ -1591,6 +1601,30 @@
         self.apply_config(self.disable_test, disable_existing_loggers=False)
         self.assertFalse(logger.disabled)
 
+    def test_config_set_handler_names(self):
+        test_config = """
+            [loggers]
+            keys=root
+
+            [handlers]
+            keys=hand1
+
+            [formatters]
+            keys=form1
+
+            [logger_root]
+            handlers=hand1
+
+            [handler_hand1]
+            class=StreamHandler
+            formatter=form1
+
+            [formatter_form1]
+            format=%(levelname)s ++ %(message)s
+            """
+        self.apply_config(test_config)
+        self.assertEqual(logging.getLogger().handlers[0].name, 'hand1')
+
     def test_defaults_do_no_interpolation(self):
         """bpo-33802 defaults should not get interpolated"""
         ini = textwrap.dedent("""
@@ -1675,7 +1709,7 @@
                 self.root_logger.removeHandler(self.sock_hdlr)
                 self.sock_hdlr.close()
             if self.server:
-                self.server.stop(2.0)
+                self.server.stop()
         finally:
             BaseTest.tearDown(self)
 
@@ -1712,7 +1746,7 @@
         # one-second timeout on socket.create_connection() (issue #16264).
         self.sock_hdlr.retryStart = 2.5
         # Kill the server
-        self.server.stop(2.0)
+        self.server.stop()
         # The logging call should try to connect, which should fail
         try:
             raise RuntimeError('Deliberate mistake')
@@ -1786,7 +1820,7 @@
         """Shutdown the UDP server."""
         try:
             if self.server:
-                self.server.stop(2.0)
+                self.server.stop()
             if self.sock_hdlr:
                 self.root_logger.removeHandler(self.sock_hdlr)
                 self.sock_hdlr.close()
@@ -1867,7 +1901,7 @@
         """Shutdown the server."""
         try:
             if self.server:
-                self.server.stop(2.0)
+                self.server.stop()
             if self.sl_hdlr:
                 self.root_logger.removeHandler(self.sl_hdlr)
                 self.sl_hdlr.close()
@@ -1914,7 +1948,7 @@
         SysLogHandlerTest.tearDown(self)
         support.unlink(self.address)
 
-@unittest.skipUnless(support.IPV6_ENABLED,
+@unittest.skipUnless(socket_helper.IPV6_ENABLED,
                      'IPv6 support required for this test.')
 class IPv6SysLogHandlerTest(SysLogHandlerTest):
 
@@ -2004,7 +2038,7 @@
                 self.assertEqual(d['funcName'], ['test_output'])
                 self.assertEqual(d['msg'], [msg])
 
-            self.server.stop(2.0)
+            self.server.stop()
             self.root_logger.removeHandler(self.h_hdlr)
             self.h_hdlr.close()
 
@@ -3204,7 +3238,7 @@
         finally:
             t.ready.wait(2.0)
             logging.config.stopListening()
-            support.join_thread(t, 2.0)
+            support.join_thread(t)
 
     def test_listen_config_10_ok(self):
         with support.captured_stdout() as output:
@@ -3516,7 +3550,7 @@
     @unittest.skipUnless(hasattr(logging.handlers, 'QueueListener'),
                          'logging.handlers.QueueListener required for this test')
     def test_queue_listener(self):
-        handler = support.TestHandler(support.Matcher())
+        handler = TestHandler(support.Matcher())
         listener = logging.handlers.QueueListener(self.queue, handler)
         listener.start()
         try:
@@ -3532,7 +3566,7 @@
 
         # Now test with respect_handler_level set
 
-        handler = support.TestHandler(support.Matcher())
+        handler = TestHandler(support.Matcher())
         handler.setLevel(logging.CRITICAL)
         listener = logging.handlers.QueueListener(self.queue, handler,
                                                   respect_handler_level=True)
@@ -3934,6 +3968,19 @@
         f.format(r)
         self.assertEqual(r.asctime, '1993-04-21 08:03:00,123')
 
+    def test_default_msec_format_none(self):
+        class NoMsecFormatter(logging.Formatter):
+            default_msec_format = None
+            default_time_format = '%d/%m/%Y %H:%M:%S'
+
+        r = self.get_record()
+        dt = datetime.datetime(1993, 4, 21, 8, 3, 0, 123, utc)
+        r.created = time.mktime(dt.astimezone(None).timetuple())
+        f = NoMsecFormatter()
+        f.converter = time.gmtime
+        self.assertEqual(f.formatTime(r), '21/04/1993 08:03:00')
+
+
 class TestBufferingFormatter(logging.BufferingFormatter):
     def formatHeader(self, records):
         return '[(%d)' % len(records)
@@ -4234,7 +4281,6 @@
             h.close()
             logging.setLoggerClass(logging.Logger)
 
-    @support.requires_type_collecting
     def test_logging_at_shutdown(self):
         # Issue #20037
         code = """if 1:
@@ -4507,6 +4553,99 @@
         self.assertEqual(new_string_io.getvalue().strip(),
                          'WARNING:root:warn\nINFO:root:info')
 
+    def test_encoding(self):
+        try:
+            encoding = 'utf-8'
+            logging.basicConfig(filename='test.log', encoding=encoding,
+                                errors='strict',
+                                format='%(message)s', level=logging.DEBUG)
+
+            self.assertEqual(len(logging.root.handlers), 1)
+            handler = logging.root.handlers[0]
+            self.assertIsInstance(handler, logging.FileHandler)
+            self.assertEqual(handler.encoding, encoding)
+            logging.debug('The Øresund Bridge joins Copenhagen to Malmö')
+        finally:
+            handler.close()
+            with open('test.log', encoding='utf-8') as f:
+                data = f.read().strip()
+            os.remove('test.log')
+            self.assertEqual(data,
+                             'The Øresund Bridge joins Copenhagen to Malmö')
+
+    def test_encoding_errors(self):
+        try:
+            encoding = 'ascii'
+            logging.basicConfig(filename='test.log', encoding=encoding,
+                                errors='ignore',
+                                format='%(message)s', level=logging.DEBUG)
+
+            self.assertEqual(len(logging.root.handlers), 1)
+            handler = logging.root.handlers[0]
+            self.assertIsInstance(handler, logging.FileHandler)
+            self.assertEqual(handler.encoding, encoding)
+            logging.debug('The Øresund Bridge joins Copenhagen to Malmö')
+        finally:
+            handler.close()
+            with open('test.log', encoding='utf-8') as f:
+                data = f.read().strip()
+            os.remove('test.log')
+            self.assertEqual(data, 'The resund Bridge joins Copenhagen to Malm')
+
+    def test_encoding_errors_default(self):
+        try:
+            encoding = 'ascii'
+            logging.basicConfig(filename='test.log', encoding=encoding,
+                                format='%(message)s', level=logging.DEBUG)
+
+            self.assertEqual(len(logging.root.handlers), 1)
+            handler = logging.root.handlers[0]
+            self.assertIsInstance(handler, logging.FileHandler)
+            self.assertEqual(handler.encoding, encoding)
+            self.assertEqual(handler.errors, 'backslashreplace')
+            logging.debug('😂: ☃️: The Øresund Bridge joins Copenhagen to Malmö')
+        finally:
+            handler.close()
+            with open('test.log', encoding='utf-8') as f:
+                data = f.read().strip()
+            os.remove('test.log')
+            self.assertEqual(data, r'\U0001f602: \u2603\ufe0f: The \xd8resund '
+                                   r'Bridge joins Copenhagen to Malm\xf6')
+
+    def test_encoding_errors_none(self):
+        # Specifying None should behave as 'strict'
+        try:
+            encoding = 'ascii'
+            logging.basicConfig(filename='test.log', encoding=encoding,
+                                errors=None,
+                                format='%(message)s', level=logging.DEBUG)
+
+            self.assertEqual(len(logging.root.handlers), 1)
+            handler = logging.root.handlers[0]
+            self.assertIsInstance(handler, logging.FileHandler)
+            self.assertEqual(handler.encoding, encoding)
+            self.assertIsNone(handler.errors)
+
+            message = []
+
+            def dummy_handle_error(record):
+                _, v, _ = sys.exc_info()
+                message.append(str(v))
+
+            handler.handleError = dummy_handle_error
+            logging.debug('The Øresund Bridge joins Copenhagen to Malmö')
+            self.assertTrue(message)
+            self.assertIn("'ascii' codec can't encode "
+                          "character '\\xd8' in position 4:", message[0])
+        finally:
+            handler.close()
+            with open('test.log', encoding='utf-8') as f:
+                data = f.read().strip()
+            os.remove('test.log')
+            # didn't write anything due to the encoding error
+            self.assertEqual(data, r'')
+
+
     def _test_log(self, method, level=None):
         # logging.root has no handlers so basicConfig should be called
         called = []
@@ -4794,6 +4933,7 @@
         self.assertIs(root, logging.root)
         self.assertIs(root, logging.getLogger(None))
         self.assertIs(root, logging.getLogger(''))
+        self.assertIs(root, logging.getLogger('root'))
         self.assertIs(root, logging.getLogger('foo').root)
         self.assertIs(root, logging.getLogger('foo.bar').root)
         self.assertIs(root, logging.getLogger('foo').parent)
@@ -4943,7 +5083,26 @@
         self.assertFalse(os.path.exists(namer(self.fn + ".3")))
         rh.close()
 
-    @support.requires_zlib
+    def test_namer_rotator_inheritance(self):
+        class HandlerWithNamerAndRotator(logging.handlers.RotatingFileHandler):
+            def namer(self, name):
+                return name + ".test"
+
+            def rotator(self, source, dest):
+                if os.path.exists(source):
+                    os.rename(source, dest + ".rotated")
+
+        rh = HandlerWithNamerAndRotator(
+            self.fn, backupCount=2, maxBytes=1)
+        self.assertEqual(rh.namer(self.fn), self.fn + ".test")
+        rh.emit(self.next_rec())
+        self.assertLogFile(self.fn)
+        rh.emit(self.next_rec())
+        self.assertLogFile(rh.namer(self.fn + ".1") + ".rotated")
+        self.assertFalse(os.path.exists(rh.namer(self.fn + ".1")))
+        rh.close()
+
+    @support.requires_zlib()
     def test_rotator(self):
         def namer(name):
             return name + ".gz"
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index 53101b3..7ce37e8 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -956,6 +956,14 @@
         self.assertEqual(huge >> (sys.maxsize + 1), (1 << 499) + 5)
         self.assertEqual(huge >> (sys.maxsize + 1000), 0)
 
+    @support.cpython_only
+    def test_small_ints_in_huge_calculation(self):
+        a = 2 ** 100
+        b = -a + 1
+        c = a + 1
+        self.assertIs(a + b, 1)
+        self.assertIs(c - a, 1)
+
     def test_small_ints(self):
         for i in range(-5, 257):
             self.assertIs(i, i + 0)
diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py
index f24ed3c..0f3af27 100644
--- a/Lib/test/test_lzma.py
+++ b/Lib/test/test_lzma.py
@@ -350,7 +350,7 @@
     def test_decompressor_bigmem(self, size):
         lzd = LZMADecompressor()
         blocksize = 10 * 1024 * 1024
-        block = random.getrandbits(blocksize * 8).to_bytes(blocksize, "little")
+        block = random.randbytes(blocksize)
         try:
             input = block * (size // blocksize + 1)
             cdata = lzma.compress(input)
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index effac97..6f891d4 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -1092,7 +1092,7 @@
             # Signal the child it can now release the lock and exit.
             p.send(b'p')
             # Wait for child to exit.  Locking should now succeed.
-            exited_pid, status = os.waitpid(pid, 0)
+            support.wait_process(pid, exitcode=0)
 
         self._box.lock()
         self._box.unlock()
@@ -1420,7 +1420,7 @@
         # Initialize with invalid argument
         self.assertRaises(TypeError, lambda: self._factory(object()))
 
-    def test_all_eMM_attribues_exist(self):
+    def test_all_eMM_attributes_exist(self):
         # Issue 12537
         eMM = email.message_from_string(_sample_message)
         msg = self._factory(_sample_message)
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index 4a1ba83..4b848a5 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -53,30 +53,6 @@
     return n
 
 
-def ulp(x):
-    """Return the value of the least significant bit of a
-    float x, such that the first float bigger than x is x+ulp(x).
-    Then, given an expected result x and a tolerance of n ulps,
-    the result y should be such that abs(y-x) <= n * ulp(x).
-    The results from this function will only make sense on platforms
-    where native doubles are represented in IEEE 754 binary64 format.
-    """
-    x = abs(float(x))
-    if math.isnan(x) or math.isinf(x):
-        return x
-
-    # Find next float up from x.
-    n = struct.unpack('<q', struct.pack('<d', x))[0]
-    x_next = struct.unpack('<d', struct.pack('<q', n + 1))[0]
-    if math.isinf(x_next):
-        # Corner case: x was the largest finite float. Then it's
-        # not an exact power of two, so we can take the difference
-        # between x and the previous float.
-        x_prev = struct.unpack('<d', struct.pack('<q', n - 1))[0]
-        return x - x_prev
-    else:
-        return x_next - x
-
 # Here's a pure Python version of the math.factorial algorithm, for
 # documentation and comparison purposes.
 #
@@ -240,6 +216,13 @@
     else:
         return None
 
+class FloatLike:
+    def __init__(self, value):
+        self.value = value
+
+    def __float__(self):
+        return self.value
+
 class IntSubclass(int):
     pass
 
@@ -397,12 +380,14 @@
     def testCeil(self):
         self.assertRaises(TypeError, math.ceil)
         self.assertEqual(int, type(math.ceil(0.5)))
-        self.ftest('ceil(0.5)', math.ceil(0.5), 1)
-        self.ftest('ceil(1.0)', math.ceil(1.0), 1)
-        self.ftest('ceil(1.5)', math.ceil(1.5), 2)
-        self.ftest('ceil(-0.5)', math.ceil(-0.5), 0)
-        self.ftest('ceil(-1.0)', math.ceil(-1.0), -1)
-        self.ftest('ceil(-1.5)', math.ceil(-1.5), -1)
+        self.assertEqual(math.ceil(0.5), 1)
+        self.assertEqual(math.ceil(1.0), 1)
+        self.assertEqual(math.ceil(1.5), 2)
+        self.assertEqual(math.ceil(-0.5), 0)
+        self.assertEqual(math.ceil(-1.0), -1)
+        self.assertEqual(math.ceil(-1.5), -1)
+        self.assertEqual(math.ceil(0.0), 0)
+        self.assertEqual(math.ceil(-0.0), 0)
         #self.assertEqual(math.ceil(INF), INF)
         #self.assertEqual(math.ceil(NINF), NINF)
         #self.assertTrue(math.isnan(math.ceil(NAN)))
@@ -410,9 +395,14 @@
         class TestCeil:
             def __ceil__(self):
                 return 42
+        class FloatCeil(float):
+            def __ceil__(self):
+                return 42
         class TestNoCeil:
             pass
-        self.ftest('ceil(TestCeil())', math.ceil(TestCeil()), 42)
+        self.assertEqual(math.ceil(TestCeil()), 42)
+        self.assertEqual(math.ceil(FloatCeil()), 42)
+        self.assertEqual(math.ceil(FloatLike(42.5)), 43)
         self.assertRaises(TypeError, math.ceil, TestNoCeil())
 
         t = TestNoCeil()
@@ -456,9 +446,9 @@
 
     def testCos(self):
         self.assertRaises(TypeError, math.cos)
-        self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0, abs_tol=ulp(1))
+        self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0, abs_tol=math.ulp(1))
         self.ftest('cos(0)', math.cos(0), 1)
-        self.ftest('cos(pi/2)', math.cos(math.pi/2), 0, abs_tol=ulp(1))
+        self.ftest('cos(pi/2)', math.cos(math.pi/2), 0, abs_tol=math.ulp(1))
         self.ftest('cos(pi)', math.cos(math.pi), -1)
         try:
             self.assertTrue(math.isnan(math.cos(INF)))
@@ -468,6 +458,8 @@
             self.assertRaises(ValueError, math.cos, NINF)
         self.assertTrue(math.isnan(math.cos(NAN)))
 
+    @unittest.skipIf(sys.platform == 'win32' and platform.machine() in ('ARM', 'ARM64'),
+                    "Windows UCRT is off by 2 ULP this test requires accuracy within 1 ULP")
     def testCosh(self):
         self.assertRaises(TypeError, math.cosh)
         self.ftest('cosh(0)', math.cosh(0), 1)
@@ -501,21 +493,25 @@
 
     def testFactorial(self):
         self.assertEqual(math.factorial(0), 1)
-        self.assertEqual(math.factorial(0.0), 1)
         total = 1
         for i in range(1, 1000):
             total *= i
             self.assertEqual(math.factorial(i), total)
-            self.assertEqual(math.factorial(float(i)), total)
             self.assertEqual(math.factorial(i), py_factorial(i))
         self.assertRaises(ValueError, math.factorial, -1)
-        self.assertRaises(ValueError, math.factorial, -1.0)
         self.assertRaises(ValueError, math.factorial, -10**100)
-        self.assertRaises(ValueError, math.factorial, -1e100)
-        self.assertRaises(ValueError, math.factorial, math.pi)
 
     def testFactorialNonIntegers(self):
-        self.assertRaises(TypeError, math.factorial, decimal.Decimal(5.2))
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(math.factorial(5.0), 120)
+        with self.assertWarns(DeprecationWarning):
+            self.assertRaises(ValueError, math.factorial, 5.2)
+        with self.assertWarns(DeprecationWarning):
+            self.assertRaises(ValueError, math.factorial, -1.0)
+        with self.assertWarns(DeprecationWarning):
+            self.assertRaises(ValueError, math.factorial, -1e100)
+        self.assertRaises(TypeError, math.factorial, decimal.Decimal('5'))
+        self.assertRaises(TypeError, math.factorial, decimal.Decimal('5.2'))
         self.assertRaises(TypeError, math.factorial, "5")
 
     # Other implementations may place different upper bounds.
@@ -524,21 +520,18 @@
         # Currently raises OverflowError for inputs that are too large
         # to fit into a C long.
         self.assertRaises(OverflowError, math.factorial, 10**100)
-        self.assertRaises(OverflowError, math.factorial, 1e100)
+        with self.assertWarns(DeprecationWarning):
+            self.assertRaises(OverflowError, math.factorial, 1e100)
 
     def testFloor(self):
         self.assertRaises(TypeError, math.floor)
         self.assertEqual(int, type(math.floor(0.5)))
-        self.ftest('floor(0.5)', math.floor(0.5), 0)
-        self.ftest('floor(1.0)', math.floor(1.0), 1)
-        self.ftest('floor(1.5)', math.floor(1.5), 1)
-        self.ftest('floor(-0.5)', math.floor(-0.5), -1)
-        self.ftest('floor(-1.0)', math.floor(-1.0), -1)
-        self.ftest('floor(-1.5)', math.floor(-1.5), -2)
-        # pow() relies on floor() to check for integers
-        # This fails on some platforms - so check it here
-        self.ftest('floor(1.23e167)', math.floor(1.23e167), 1.23e167)
-        self.ftest('floor(-1.23e167)', math.floor(-1.23e167), -1.23e167)
+        self.assertEqual(math.floor(0.5), 0)
+        self.assertEqual(math.floor(1.0), 1)
+        self.assertEqual(math.floor(1.5), 1)
+        self.assertEqual(math.floor(-0.5), -1)
+        self.assertEqual(math.floor(-1.0), -1)
+        self.assertEqual(math.floor(-1.5), -2)
         #self.assertEqual(math.ceil(INF), INF)
         #self.assertEqual(math.ceil(NINF), NINF)
         #self.assertTrue(math.isnan(math.floor(NAN)))
@@ -546,9 +539,14 @@
         class TestFloor:
             def __floor__(self):
                 return 42
+        class FloatFloor(float):
+            def __floor__(self):
+                return 42
         class TestNoFloor:
             pass
-        self.ftest('floor(TestFloor())', math.floor(TestFloor()), 42)
+        self.assertEqual(math.floor(TestFloor()), 42)
+        self.assertEqual(math.floor(FloatFloor()), 42)
+        self.assertEqual(math.floor(FloatLike(41.9)), 41)
         self.assertRaises(TypeError, math.floor, TestNoFloor())
 
         t = TestNoFloor()
@@ -707,33 +705,32 @@
         self.assertEqual(gcd(84, -120), 12)
         self.assertEqual(gcd(1216342683557601535506311712,
                              436522681849110124616458784), 32)
-        c = 652560
+
         x = 434610456570399902378880679233098819019853229470286994367836600566
         y = 1064502245825115327754847244914921553977
-        a = x * c
-        b = y * c
-        self.assertEqual(gcd(a, b), c)
-        self.assertEqual(gcd(b, a), c)
-        self.assertEqual(gcd(-a, b), c)
-        self.assertEqual(gcd(b, -a), c)
-        self.assertEqual(gcd(a, -b), c)
-        self.assertEqual(gcd(-b, a), c)
-        self.assertEqual(gcd(-a, -b), c)
-        self.assertEqual(gcd(-b, -a), c)
-        c = 576559230871654959816130551884856912003141446781646602790216406874
-        a = x * c
-        b = y * c
-        self.assertEqual(gcd(a, b), c)
-        self.assertEqual(gcd(b, a), c)
-        self.assertEqual(gcd(-a, b), c)
-        self.assertEqual(gcd(b, -a), c)
-        self.assertEqual(gcd(a, -b), c)
-        self.assertEqual(gcd(-b, a), c)
-        self.assertEqual(gcd(-a, -b), c)
-        self.assertEqual(gcd(-b, -a), c)
+        for c in (652560,
+                  576559230871654959816130551884856912003141446781646602790216406874):
+            a = x * c
+            b = y * c
+            self.assertEqual(gcd(a, b), c)
+            self.assertEqual(gcd(b, a), c)
+            self.assertEqual(gcd(-a, b), c)
+            self.assertEqual(gcd(b, -a), c)
+            self.assertEqual(gcd(a, -b), c)
+            self.assertEqual(gcd(-b, a), c)
+            self.assertEqual(gcd(-a, -b), c)
+            self.assertEqual(gcd(-b, -a), c)
 
+        self.assertEqual(gcd(), 0)
+        self.assertEqual(gcd(120), 120)
+        self.assertEqual(gcd(-120), 120)
+        self.assertEqual(gcd(120, 84, 102), 6)
+        self.assertEqual(gcd(120, 1, 84), 1)
+
+        self.assertRaises(TypeError, gcd, 120.0)
         self.assertRaises(TypeError, gcd, 120.0, 84)
         self.assertRaises(TypeError, gcd, 120, 84.0)
+        self.assertRaises(TypeError, gcd, 120, 1, 84.0)
         self.assertEqual(gcd(MyIndexable(120), MyIndexable(84)), 12)
 
     def testHypot(self):
@@ -976,6 +973,50 @@
                 with self.assertRaises(TypeError):
                     math.isqrt(value)
 
+    def test_lcm(self):
+        lcm = math.lcm
+        self.assertEqual(lcm(0, 0), 0)
+        self.assertEqual(lcm(1, 0), 0)
+        self.assertEqual(lcm(-1, 0), 0)
+        self.assertEqual(lcm(0, 1), 0)
+        self.assertEqual(lcm(0, -1), 0)
+        self.assertEqual(lcm(7, 1), 7)
+        self.assertEqual(lcm(7, -1), 7)
+        self.assertEqual(lcm(-23, 15), 345)
+        self.assertEqual(lcm(120, 84), 840)
+        self.assertEqual(lcm(84, -120), 840)
+        self.assertEqual(lcm(1216342683557601535506311712,
+                             436522681849110124616458784),
+                             16592536571065866494401400422922201534178938447014944)
+
+        x = 43461045657039990237
+        y = 10645022458251153277
+        for c in (652560,
+                  57655923087165495981):
+            a = x * c
+            b = y * c
+            d = x * y * c
+            self.assertEqual(lcm(a, b), d)
+            self.assertEqual(lcm(b, a), d)
+            self.assertEqual(lcm(-a, b), d)
+            self.assertEqual(lcm(b, -a), d)
+            self.assertEqual(lcm(a, -b), d)
+            self.assertEqual(lcm(-b, a), d)
+            self.assertEqual(lcm(-a, -b), d)
+            self.assertEqual(lcm(-b, -a), d)
+
+        self.assertEqual(lcm(), 1)
+        self.assertEqual(lcm(120), 120)
+        self.assertEqual(lcm(-120), 120)
+        self.assertEqual(lcm(120, 84, 102), 14280)
+        self.assertEqual(lcm(120, 0, 84), 0)
+
+        self.assertRaises(TypeError, lcm, 120.0)
+        self.assertRaises(TypeError, lcm, 120.0, 84)
+        self.assertRaises(TypeError, lcm, 120, 84.0)
+        self.assertRaises(TypeError, lcm, 120, 0, 84.0)
+        self.assertEqual(lcm(MyIndexable(120), MyIndexable(84)), 840)
+
     def testLdexp(self):
         self.assertRaises(TypeError, math.ldexp)
         self.ftest('ldexp(0,1)', math.ldexp(0,1), 0)
@@ -1423,7 +1464,7 @@
         self.assertRaises(TypeError, math.tanh)
         self.ftest('tanh(0)', math.tanh(0), 0)
         self.ftest('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0,
-                   abs_tol=ulp(1))
+                   abs_tol=math.ulp(1))
         self.ftest('tanh(inf)', math.tanh(INF), 1)
         self.ftest('tanh(-inf)', math.tanh(NINF), -1)
         self.assertTrue(math.isnan(math.tanh(NAN)))
@@ -1447,17 +1488,21 @@
         self.assertEqual(math.trunc(-0.999999), -0)
         self.assertEqual(math.trunc(-100.999), -100)
 
-        class TestTrunc(object):
+        class TestTrunc:
             def __trunc__(self):
                 return 23
-
-        class TestNoTrunc(object):
+        class FloatTrunc(float):
+            def __trunc__(self):
+                return 23
+        class TestNoTrunc:
             pass
 
         self.assertEqual(math.trunc(TestTrunc()), 23)
+        self.assertEqual(math.trunc(FloatTrunc()), 23)
 
         self.assertRaises(TypeError, math.trunc)
         self.assertRaises(TypeError, math.trunc, 1, 2)
+        self.assertRaises(TypeError, math.trunc, FloatLike(23.5))
         self.assertRaises(TypeError, math.trunc, TestNoTrunc())
 
     def testIsfinite(self):
@@ -1878,6 +1923,75 @@
             self.assertIs(type(comb(IntSubclass(5), IntSubclass(k))), int)
             self.assertIs(type(comb(MyIndexable(5), MyIndexable(k))), int)
 
+    @requires_IEEE_754
+    def test_nextafter(self):
+        # around 2^52 and 2^63
+        self.assertEqual(math.nextafter(4503599627370496.0, -INF),
+                         4503599627370495.5)
+        self.assertEqual(math.nextafter(4503599627370496.0, INF),
+                         4503599627370497.0)
+        self.assertEqual(math.nextafter(9223372036854775808.0, 0.0),
+                         9223372036854774784.0)
+        self.assertEqual(math.nextafter(-9223372036854775808.0, 0.0),
+                         -9223372036854774784.0)
+
+        # around 1.0
+        self.assertEqual(math.nextafter(1.0, -INF),
+                         float.fromhex('0x1.fffffffffffffp-1'))
+        self.assertEqual(math.nextafter(1.0, INF),
+                         float.fromhex('0x1.0000000000001p+0'))
+
+        # x == y: y is returned
+        self.assertEqual(math.nextafter(2.0, 2.0), 2.0)
+        self.assertEqualSign(math.nextafter(-0.0, +0.0), +0.0)
+        self.assertEqualSign(math.nextafter(+0.0, -0.0), -0.0)
+
+        # around 0.0
+        smallest_subnormal = sys.float_info.min * sys.float_info.epsilon
+        self.assertEqual(math.nextafter(+0.0, INF), smallest_subnormal)
+        self.assertEqual(math.nextafter(-0.0, INF), smallest_subnormal)
+        self.assertEqual(math.nextafter(+0.0, -INF), -smallest_subnormal)
+        self.assertEqual(math.nextafter(-0.0, -INF), -smallest_subnormal)
+        self.assertEqualSign(math.nextafter(smallest_subnormal, +0.0), +0.0)
+        self.assertEqualSign(math.nextafter(-smallest_subnormal, +0.0), -0.0)
+        self.assertEqualSign(math.nextafter(smallest_subnormal, -0.0), +0.0)
+        self.assertEqualSign(math.nextafter(-smallest_subnormal, -0.0), -0.0)
+
+        # around infinity
+        largest_normal = sys.float_info.max
+        self.assertEqual(math.nextafter(INF, 0.0), largest_normal)
+        self.assertEqual(math.nextafter(-INF, 0.0), -largest_normal)
+        self.assertEqual(math.nextafter(largest_normal, INF), INF)
+        self.assertEqual(math.nextafter(-largest_normal, -INF), -INF)
+
+        # NaN
+        self.assertIsNaN(math.nextafter(NAN, 1.0))
+        self.assertIsNaN(math.nextafter(1.0, NAN))
+        self.assertIsNaN(math.nextafter(NAN, NAN))
+
+    @requires_IEEE_754
+    def test_ulp(self):
+        self.assertEqual(math.ulp(1.0), sys.float_info.epsilon)
+        # use int ** int rather than float ** int to not rely on pow() accuracy
+        self.assertEqual(math.ulp(2 ** 52), 1.0)
+        self.assertEqual(math.ulp(2 ** 53), 2.0)
+        self.assertEqual(math.ulp(2 ** 64), 4096.0)
+
+        # min and max
+        self.assertEqual(math.ulp(0.0),
+                         sys.float_info.min * sys.float_info.epsilon)
+        self.assertEqual(math.ulp(FLOAT_MAX),
+                         FLOAT_MAX - math.nextafter(FLOAT_MAX, -INF))
+
+        # special cases
+        self.assertEqual(math.ulp(INF), INF)
+        self.assertIsNaN(math.ulp(math.nan))
+
+        # negative number: ulp(-x) == ulp(x)
+        for x in (0.0, 1.0, 2 ** 52, 2 ** 64, INF):
+            with self.subTest(x=x):
+                self.assertEqual(math.ulp(-x), math.ulp(x))
+
     def test_issue39871(self):
         # A SystemError should not be raised if the first arg to atan2(),
         # copysign(), or remainder() cannot be converted to a float.
@@ -1900,6 +2014,14 @@
         if not math.isnan(value):
             self.fail("Expected a NaN, got {!r}.".format(value))
 
+    def assertEqualSign(self, x, y):
+        """Similar to assertEqual(), but compare also the sign with copysign().
+
+        Function useful to compare signed zeros.
+        """
+        self.assertEqual(x, y)
+        self.assertEqual(math.copysign(1.0, x), math.copysign(1.0, y))
+
 
 class IsCloseTests(unittest.TestCase):
     isclose = math.isclose  # subclasses should override this
diff --git a/Lib/test/test_metaclass.py b/Lib/test/test_metaclass.py
index e6fe20a..6edd899 100644
--- a/Lib/test/test_metaclass.py
+++ b/Lib/test/test_metaclass.py
@@ -128,7 +128,7 @@
     ...
     Traceback (most recent call last):
     [...]
-    SyntaxError: keyword argument repeated
+    SyntaxError: keyword argument repeated: metaclass
     >>>
 
 Another way.
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index 7096585..1663b1f 100644
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -1152,6 +1152,22 @@
 
         doc.unlink()
 
+    def testStandalone(self):
+        doc = parseString('<foo>&#x20ac;</foo>')
+        self.assertEqual(doc.toxml(),
+                         '<?xml version="1.0" ?><foo>\u20ac</foo>')
+        self.assertEqual(doc.toxml(standalone=None),
+                         '<?xml version="1.0" ?><foo>\u20ac</foo>')
+        self.assertEqual(doc.toxml(standalone=True),
+            '<?xml version="1.0" standalone="yes"?><foo>\u20ac</foo>')
+        self.assertEqual(doc.toxml(standalone=False),
+            '<?xml version="1.0" standalone="no"?><foo>\u20ac</foo>')
+        self.assertEqual(doc.toxml('utf-8', True),
+            b'<?xml version="1.0" encoding="utf-8" standalone="yes"?>'
+            b'<foo>\xe2\x82\xac</foo>')
+
+        doc.unlink()
+
     class UserDataHandler:
         called = 0
         def handle(self, operation, key, data, src, dst):
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 88c501d..5400f25 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -740,6 +740,42 @@
             # See bpo-34754 for details.
             self.assertRaises(OSError, mm.flush, 1, len(b'python'))
 
+    def test_repr(self):
+        open_mmap_repr_pat = re.compile(
+            r"<mmap.mmap closed=False, "
+            r"access=(?P<access>\S+), "
+            r"length=(?P<length>\d+), "
+            r"pos=(?P<pos>\d+), "
+            r"offset=(?P<offset>\d+)>")
+        closed_mmap_repr_pat = re.compile(r"<mmap.mmap closed=True>")
+        mapsizes = (50, 100, 1_000, 1_000_000, 10_000_000)
+        offsets = tuple((mapsize // 2 // mmap.ALLOCATIONGRANULARITY)
+                        * mmap.ALLOCATIONGRANULARITY for mapsize in mapsizes)
+        for offset, mapsize in zip(offsets, mapsizes):
+            data = b'a' * mapsize
+            length = mapsize - offset
+            accesses = ('ACCESS_DEFAULT', 'ACCESS_READ',
+                        'ACCESS_COPY', 'ACCESS_WRITE')
+            positions = (0, length//10, length//5, length//4)
+            with open(TESTFN, "wb+") as fp:
+                fp.write(data)
+                fp.flush()
+                for access, pos in itertools.product(accesses, positions):
+                    accint = getattr(mmap, access)
+                    with mmap.mmap(fp.fileno(),
+                                   length,
+                                   access=accint,
+                                   offset=offset) as mm:
+                        mm.seek(pos)
+                        match = open_mmap_repr_pat.match(repr(mm))
+                        self.assertIsNotNone(match)
+                        self.assertEqual(match.group('access'), access)
+                        self.assertEqual(match.group('length'), str(length))
+                        self.assertEqual(match.group('pos'), str(pos))
+                        self.assertEqual(match.group('offset'), str(offset))
+                    match = closed_mmap_repr_pat.match(repr(mm))
+                    self.assertIsNotNone(match)
+
     @unittest.skipUnless(hasattr(mmap.mmap, 'madvise'), 'needs madvise')
     def test_madvise(self):
         size = 2 * PAGESIZE
diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py
index efe9a8e..1d44563 100644
--- a/Lib/test/test_module.py
+++ b/Lib/test/test_module.py
@@ -1,7 +1,7 @@
 # Test the module type
 import unittest
 import weakref
-from test.support import gc_collect, requires_type_collecting
+from test.support import gc_collect
 from test.support.script_helper import assert_python_ok
 
 import sys
@@ -101,7 +101,6 @@
         gc_collect()
         self.assertEqual(f().__dict__["bar"], 4)
 
-    @requires_type_collecting
     def test_clear_dict_in_ref_cycle(self):
         destroyed = []
         m = ModuleType("foo")
@@ -266,7 +265,6 @@
         self.assertEqual(r[-len(ends_with):], ends_with,
                          '{!r} does not end with {!r}'.format(r, ends_with))
 
-    @requires_type_collecting
     def test_module_finalization_at_shutdown(self):
         # Module globals and builtins should still be available during shutdown
         rc, out, err = assert_python_ok("-c", "from test import final_a")
diff --git a/Lib/test/test_msilib.py b/Lib/test/test_msilib.py
index 153a8ac..4a233c3 100644
--- a/Lib/test/test_msilib.py
+++ b/Lib/test/test_msilib.py
@@ -1,13 +1,13 @@
 """ Test suite for the code in msilib """
 import os
 import unittest
-from test.support import TESTFN, FS_NONASCII, import_module, unlink
+from test.support import TESTFN, import_module, unlink
 msilib = import_module('msilib')
 import msilib.schema
 
 
 def init_database():
-    path = TESTFN + (FS_NONASCII or '') + '.msi'
+    path = TESTFN + '.msi'
     db = msilib.init_database(
         path,
         msilib.schema,
diff --git a/Lib/test/test_named_expressions.py b/Lib/test/test_named_expressions.py
index 3ae557f..2adcd4b 100644
--- a/Lib/test/test_named_expressions.py
+++ b/Lib/test/test_named_expressions.py
@@ -1,4 +1,3 @@
-import os
 import unittest
 
 GLOBAL_VAR = None
@@ -114,7 +113,7 @@
             "assignment expression within a comprehension cannot be used in a class body"):
             exec(code, {}, {})
 
-    def test_named_expression_invalid_rebinding_comprehension_iteration_variable(self):
+    def test_named_expression_invalid_rebinding_list_comprehension_iteration_variable(self):
         cases = [
             ("Local reuse", 'i', "[i := 0 for i in range(5)]"),
             ("Nested reuse", 'j', "[[(j := 0) for i in range(5)] for j in range(5)]"),
@@ -131,7 +130,7 @@
                 with self.assertRaisesRegex(SyntaxError, msg):
                     exec(code, {}, {})
 
-    def test_named_expression_invalid_rebinding_comprehension_inner_loop(self):
+    def test_named_expression_invalid_rebinding_list_comprehension_inner_loop(self):
         cases = [
             ("Inner reuse", 'j', "[i for i in range(5) if (j := 0) for j in range(5)]"),
             ("Inner unpacking reuse", 'j', "[i for i in range(5) if (j := 0) for j, k in [(0, 1)]]"),
@@ -146,7 +145,7 @@
                 with self.assertRaisesRegex(SyntaxError, msg):
                     exec(f"lambda: {code}", {}) # Function scope
 
-    def test_named_expression_invalid_comprehension_iterable_expression(self):
+    def test_named_expression_invalid_list_comprehension_iterable_expression(self):
         cases = [
             ("Top level", "[i for i in (i := range(5))]"),
             ("Inside tuple", "[i for i in (2, 3, i := range(5))]"),
@@ -168,6 +167,60 @@
                 with self.assertRaisesRegex(SyntaxError, msg):
                     exec(f"lambda: {code}", {}) # Function scope
 
+    def test_named_expression_invalid_rebinding_set_comprehension_iteration_variable(self):
+        cases = [
+            ("Local reuse", 'i', "{i := 0 for i in range(5)}"),
+            ("Nested reuse", 'j', "{{(j := 0) for i in range(5)} for j in range(5)}"),
+            ("Reuse inner loop target", 'j', "{(j := 0) for i in range(5) for j in range(5)}"),
+            ("Unpacking reuse", 'i', "{i := 0 for i, j in {(0, 1)}}"),
+            ("Reuse in loop condition", 'i', "{i+1 for i in range(5) if (i := 0)}"),
+            ("Unreachable reuse", 'i', "{False or (i:=0) for i in range(5)}"),
+            ("Unreachable nested reuse", 'i',
+                "{(i, j) for i in range(5) for j in range(5) if True or (i:=10)}"),
+        ]
+        for case, target, code in cases:
+            msg = f"assignment expression cannot rebind comprehension iteration variable '{target}'"
+            with self.subTest(case=case):
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(code, {}, {})
+
+    def test_named_expression_invalid_rebinding_set_comprehension_inner_loop(self):
+        cases = [
+            ("Inner reuse", 'j', "{i for i in range(5) if (j := 0) for j in range(5)}"),
+            ("Inner unpacking reuse", 'j', "{i for i in range(5) if (j := 0) for j, k in {(0, 1)}}"),
+        ]
+        for case, target, code in cases:
+            msg = f"comprehension inner loop cannot rebind assignment expression target '{target}'"
+            with self.subTest(case=case):
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(code, {}) # Module scope
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(code, {}, {}) # Class scope
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(f"lambda: {code}", {}) # Function scope
+
+    def test_named_expression_invalid_set_comprehension_iterable_expression(self):
+        cases = [
+            ("Top level", "{i for i in (i := range(5))}"),
+            ("Inside tuple", "{i for i in (2, 3, i := range(5))}"),
+            ("Inside list", "{i for i in {2, 3, i := range(5)}}"),
+            ("Different name", "{i for i in (j := range(5))}"),
+            ("Lambda expression", "{i for i in (lambda:(j := range(5)))()}"),
+            ("Inner loop", "{i for i in range(5) for j in (i := range(5))}"),
+            ("Nested comprehension", "{i for i in {j for j in (k := range(5))}}"),
+            ("Nested comprehension condition", "{i for i in {j for j in range(5) if (j := True)}}"),
+            ("Nested comprehension body", "{i for i in {(j := True) for j in range(5)}}"),
+        ]
+        msg = "assignment expression cannot be used in a comprehension iterable expression"
+        for case, code in cases:
+            with self.subTest(case=case):
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(code, {}) # Module scope
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(code, {}, {}) # Class scope
+                with self.assertRaisesRegex(SyntaxError, msg):
+                    exec(f"lambda: {code}", {}) # Function scope
+
 
 class NamedExpressionAssignmentTest(unittest.TestCase):
 
@@ -514,6 +567,15 @@
             self.assertEqual(nonlocal_var, None)
         f()
 
+    def test_named_expression_scope_in_genexp(self):
+        a = 1
+        b = [1, 2, 3, 4]
+        genexp = (c := i + a for i in b)
+
+        self.assertNotIn("c", locals())
+        for idx, elem in enumerate(genexp):
+            self.assertEqual(elem, b[idx] + a)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py
index fbd7db0..1df64fa 100644
--- a/Lib/test/test_nntplib.py
+++ b/Lib/test/test_nntplib.py
@@ -5,13 +5,14 @@
 import unittest
 import functools
 import contextlib
+import nntplib
 import os.path
 import re
 import threading
 
 from test import support
+from test.support import socket_helper
 from nntplib import NNTP, GroupInfo
-import nntplib
 from unittest.mock import patch
 try:
     import ssl
@@ -19,7 +20,6 @@
     ssl = None
 
 
-TIMEOUT = 30
 certfile = os.path.join(os.path.dirname(__file__), 'keycert3.pem')
 
 if ssl is not None:
@@ -246,7 +246,7 @@
         def wrap_meth(meth):
             @functools.wraps(meth)
             def wrapped(self):
-                with support.transient_internet(self.NNTP_HOST):
+                with socket_helper.transient_internet(self.NNTP_HOST):
                     meth(self)
             return wrapped
         for name in dir(cls):
@@ -259,6 +259,10 @@
             # value
             setattr(cls, name, wrap_meth(meth))
 
+    def test_timeout(self):
+        with self.assertRaises(ValueError):
+            self.NNTP_CLASS(self.NNTP_HOST, timeout=0, usenetrc=False)
+
     def test_with_statement(self):
         def is_connected():
             if not hasattr(server, 'file'):
@@ -270,12 +274,18 @@
             return True
 
         try:
-            with self.NNTP_CLASS(self.NNTP_HOST, timeout=TIMEOUT, usenetrc=False) as server:
+            server = self.NNTP_CLASS(self.NNTP_HOST,
+                                     timeout=support.INTERNET_TIMEOUT,
+                                     usenetrc=False)
+            with server:
                 self.assertTrue(is_connected())
                 self.assertTrue(server.help())
             self.assertFalse(is_connected())
 
-            with self.NNTP_CLASS(self.NNTP_HOST, timeout=TIMEOUT, usenetrc=False) as server:
+            server = self.NNTP_CLASS(self.NNTP_HOST,
+                                     timeout=support.INTERNET_TIMEOUT,
+                                     usenetrc=False)
+            with server:
                 server.quit()
             self.assertFalse(is_connected())
         except SSLError as ssl_err:
@@ -305,9 +315,10 @@
     @classmethod
     def setUpClass(cls):
         support.requires("network")
-        with support.transient_internet(cls.NNTP_HOST):
+        with socket_helper.transient_internet(cls.NNTP_HOST):
             try:
-                cls.server = cls.NNTP_CLASS(cls.NNTP_HOST, timeout=TIMEOUT,
+                cls.server = cls.NNTP_CLASS(cls.NNTP_HOST,
+                                            timeout=support.INTERNET_TIMEOUT,
                                             usenetrc=False)
             except SSLError as ssl_err:
                 # matches "[SSL: DH_KEY_TOO_SMALL] dh key too small"
@@ -400,6 +411,18 @@
     return (sio, file)
 
 
+class NNTPServer(nntplib.NNTP):
+
+    def __init__(self, f, host, readermode=None):
+        self.file = f
+        self.host = host
+        self._base_init(readermode)
+
+    def _close(self):
+        self.file.close()
+        del self.file
+
+
 class MockedNNTPTestsMixin:
     # Override in derived classes
     handler_class = None
@@ -415,7 +438,7 @@
     def make_server(self, *args, **kwargs):
         self.handler = self.handler_class()
         self.sio, file = make_mock_file(self.handler)
-        self.server = nntplib._NNTPBase(file, 'test.server', *args, **kwargs)
+        self.server = NNTPServer(file, 'test.server', *args, **kwargs)
         return self.server
 
 
@@ -1545,14 +1568,14 @@
 class LocalServerTests(unittest.TestCase):
     def setUp(self):
         sock = socket.socket()
-        port = support.bind_port(sock)
+        port = socket_helper.bind_port(sock)
         sock.listen()
         self.background = threading.Thread(
             target=self.run_server, args=(sock,))
         self.background.start()
         self.addCleanup(self.background.join)
 
-        self.nntp = NNTP(support.HOST, port, usenetrc=False).__enter__()
+        self.nntp = NNTP(socket_helper.HOST, port, usenetrc=False).__enter__()
         self.addCleanup(self.nntp.__exit__, None, None, None)
 
     def run_server(self, sock):
diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
deleted file mode 100644
index ba877e7..0000000
--- a/Lib/test/test_normalization.py
+++ /dev/null
@@ -1,117 +0,0 @@
-from test.support import open_urlresource
-import unittest
-
-from http.client import HTTPException
-import sys
-from unicodedata import normalize, is_normalized, unidata_version
-
-TESTDATAFILE = "NormalizationTest.txt"
-TESTDATAURL = "http://www.pythontest.net/unicode/" + unidata_version + "/" + TESTDATAFILE
-
-def check_version(testfile):
-    hdr = testfile.readline()
-    return unidata_version in hdr
-
-class RangeError(Exception):
-    pass
-
-def NFC(str):
-    return normalize("NFC", str)
-
-def NFKC(str):
-    return normalize("NFKC", str)
-
-def NFD(str):
-    return normalize("NFD", str)
-
-def NFKD(str):
-    return normalize("NFKD", str)
-
-def unistr(data):
-    data = [int(x, 16) for x in data.split(" ")]
-    for x in data:
-        if x > sys.maxunicode:
-            raise RangeError
-    return "".join([chr(x) for x in data])
-
-class NormalizationTest(unittest.TestCase):
-    def test_main(self):
-        # Hit the exception early
-        try:
-            testdata = open_urlresource(TESTDATAURL, encoding="utf-8",
-                                        check=check_version)
-        except PermissionError:
-            self.skipTest(f"Permission error when downloading {TESTDATAURL} "
-                          f"into the test data directory")
-        except (OSError, HTTPException):
-            self.fail(f"Could not retrieve {TESTDATAURL}")
-
-        with testdata:
-            self.run_normalization_tests(testdata)
-
-    def run_normalization_tests(self, testdata):
-        part = None
-        part1_data = {}
-
-        for line in testdata:
-            if '#' in line:
-                line = line.split('#')[0]
-            line = line.strip()
-            if not line:
-                continue
-            if line.startswith("@Part"):
-                part = line.split()[0]
-                continue
-            try:
-                c1,c2,c3,c4,c5 = [unistr(x) for x in line.split(';')[:-1]]
-            except RangeError:
-                # Skip unsupported characters;
-                # try at least adding c1 if we are in part1
-                if part == "@Part1":
-                    try:
-                        c1 = unistr(line.split(';')[0])
-                    except RangeError:
-                        pass
-                    else:
-                        part1_data[c1] = 1
-                continue
-
-            # Perform tests
-            self.assertTrue(c2 ==  NFC(c1) ==  NFC(c2) ==  NFC(c3), line)
-            self.assertTrue(c4 ==  NFC(c4) ==  NFC(c5), line)
-            self.assertTrue(c3 ==  NFD(c1) ==  NFD(c2) ==  NFD(c3), line)
-            self.assertTrue(c5 ==  NFD(c4) ==  NFD(c5), line)
-            self.assertTrue(c4 == NFKC(c1) == NFKC(c2) == \
-                            NFKC(c3) == NFKC(c4) == NFKC(c5),
-                            line)
-            self.assertTrue(c5 == NFKD(c1) == NFKD(c2) == \
-                            NFKD(c3) == NFKD(c4) == NFKD(c5),
-                            line)
-
-            self.assertTrue(is_normalized("NFC", c2))
-            self.assertTrue(is_normalized("NFC", c4))
-
-            self.assertTrue(is_normalized("NFD", c3))
-            self.assertTrue(is_normalized("NFD", c5))
-
-            self.assertTrue(is_normalized("NFKC", c4))
-            self.assertTrue(is_normalized("NFKD", c5))
-
-            # Record part 1 data
-            if part == "@Part1":
-                part1_data[c1] = 1
-
-        # Perform tests for all other data
-        for c in range(sys.maxunicode+1):
-            X = chr(c)
-            if X in part1_data:
-                continue
-            self.assertTrue(X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X), c)
-
-    def test_bug_834676(self):
-        # Check for bug 834676
-        normalize('NFC', '\ud55c\uae00')
-
-
-if __name__ == "__main__":
-    unittest.main()
diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py
index 4a02db2..6f881f1 100644
--- a/Lib/test/test_ntpath.py
+++ b/Lib/test/test_ntpath.py
@@ -725,7 +725,7 @@
     path = ntpath
 
     def setUp(self):
-        self.file_name = support.TESTFN.lower()
+        self.file_name = support.TESTFN
         self.file_path = FakePath(support.TESTFN)
         self.addCleanup(support.unlink, self.file_name)
         with open(self.file_name, 'xb', 0) as file:
diff --git a/Lib/test/test_ordered_dict.py b/Lib/test/test_ordered_dict.py
index 085e5f6..fdea44e 100644
--- a/Lib/test/test_ordered_dict.py
+++ b/Lib/test/test_ordered_dict.py
@@ -407,9 +407,9 @@
         self.assertEqual(list(od), list('abcde'))
         od.move_to_end('c')
         self.assertEqual(list(od), list('abdec'))
-        od.move_to_end('c', 0)
+        od.move_to_end('c', False)
         self.assertEqual(list(od), list('cabde'))
-        od.move_to_end('c', 0)
+        od.move_to_end('c', False)
         self.assertEqual(list(od), list('cabde'))
         od.move_to_end('e')
         self.assertEqual(list(od), list('cabde'))
@@ -418,7 +418,7 @@
         with self.assertRaises(KeyError):
             od.move_to_end('x')
         with self.assertRaises(KeyError):
-            od.move_to_end('x', 0)
+            od.move_to_end('x', False)
 
     def test_move_to_end_issue25406(self):
         OrderedDict = self.OrderedDict
@@ -654,6 +654,49 @@
         support.check_free_after_iterating(self, lambda d: iter(d.values()), self.OrderedDict)
         support.check_free_after_iterating(self, lambda d: iter(d.items()), self.OrderedDict)
 
+    def test_merge_operator(self):
+        OrderedDict = self.OrderedDict
+
+        a = OrderedDict({0: 0, 1: 1, 2: 1})
+        b = OrderedDict({1: 1, 2: 2, 3: 3})
+
+        c = a.copy()
+        d = a.copy()
+        c |= b
+        d |= list(b.items())
+        expected = OrderedDict({0: 0, 1: 1, 2: 2, 3: 3})
+        self.assertEqual(a | dict(b), expected)
+        self.assertEqual(a | b, expected)
+        self.assertEqual(c, expected)
+        self.assertEqual(d, expected)
+
+        c = b.copy()
+        c |= a
+        expected = OrderedDict({1: 1, 2: 1, 3: 3, 0: 0})
+        self.assertEqual(dict(b) | a, expected)
+        self.assertEqual(b | a, expected)
+        self.assertEqual(c, expected)
+
+        self.assertIs(type(a | b), OrderedDict)
+        self.assertIs(type(dict(a) | b), OrderedDict)
+        self.assertIs(type(a | dict(b)), OrderedDict)
+
+        expected = a.copy()
+        a |= ()
+        a |= ""
+        self.assertEqual(a, expected)
+
+        with self.assertRaises(TypeError):
+            a | None
+        with self.assertRaises(TypeError):
+            a | ()
+        with self.assertRaises(TypeError):
+            a | "BAD"
+        with self.assertRaises(TypeError):
+            a | ""
+        with self.assertRaises(ValueError):
+            a |= "BAD"
+
 
 class PurePythonOrderedDictTests(OrderedDictTests, unittest.TestCase):
 
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 2a4ae15..bf1cb5f 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -25,10 +25,12 @@
 import tempfile
 import threading
 import time
+import types
 import unittest
 import uuid
 import warnings
 from test import support
+from test.support import socket_helper
 from platform import win32_is_iot
 
 try:
@@ -953,17 +955,40 @@
         value_str = value.decode(sys.getfilesystemencoding(), 'surrogateescape')
         self.assertEqual(os.environ['bytes'], value_str)
 
+    def test_putenv_unsetenv(self):
+        name = "PYTHONTESTVAR"
+        value = "testvalue"
+        code = f'import os; print(repr(os.environ.get({name!r})))'
+
+        with support.EnvironmentVarGuard() as env:
+            env.pop(name, None)
+
+            os.putenv(name, value)
+            proc = subprocess.run([sys.executable, '-c', code], check=True,
+                                  stdout=subprocess.PIPE, text=True)
+            self.assertEqual(proc.stdout.rstrip(), repr(value))
+
+            os.unsetenv(name)
+            proc = subprocess.run([sys.executable, '-c', code], check=True,
+                                  stdout=subprocess.PIPE, text=True)
+            self.assertEqual(proc.stdout.rstrip(), repr(None))
+
     # On OS X < 10.6, unsetenv() doesn't return a value (bpo-13415).
     @support.requires_mac_ver(10, 6)
-    def test_unset_error(self):
+    def test_putenv_unsetenv_error(self):
+        # Empty variable name is invalid.
+        # "=" and null character are not allowed in a variable name.
+        for name in ('', '=name', 'na=me', 'name=', 'name\0', 'na\0me'):
+            self.assertRaises((OSError, ValueError), os.putenv, name, "value")
+            self.assertRaises((OSError, ValueError), os.unsetenv, name)
+
         if sys.platform == "win32":
-            # an environment variable is limited to 32,767 characters
-            key = 'x' * 50000
-            self.assertRaises(ValueError, os.environ.__delitem__, key)
-        else:
-            # "=" is not allowed in a variable name
-            key = 'key='
-            self.assertRaises(OSError, os.environ.__delitem__, key)
+            # On Windows, an environment variable string ("name=value" string)
+            # is limited to 32,767 characters
+            longstr = 'x' * 32_768
+            self.assertRaises(ValueError, os.putenv, longstr, "1")
+            self.assertRaises(ValueError, os.putenv, "X", longstr)
+            self.assertRaises(ValueError, os.unsetenv, longstr)
 
     def test_key_type(self):
         missing = 'missingkey'
@@ -1003,6 +1028,96 @@
     def test_iter_error_when_changing_os_environ_values(self):
         self._test_environ_iteration(os.environ.values())
 
+    def _test_underlying_process_env(self, var, expected):
+        if not (unix_shell and os.path.exists(unix_shell)):
+            return
+
+        with os.popen(f"{unix_shell} -c 'echo ${var}'") as popen:
+            value = popen.read().strip()
+
+        self.assertEqual(expected, value)
+
+    def test_or_operator(self):
+        overridden_key = '_TEST_VAR_'
+        original_value = 'original_value'
+        os.environ[overridden_key] = original_value
+
+        new_vars_dict = {'_A_': '1', '_B_': '2', overridden_key: '3'}
+        expected = dict(os.environ)
+        expected.update(new_vars_dict)
+
+        actual = os.environ | new_vars_dict
+        self.assertDictEqual(expected, actual)
+        self.assertEqual('3', actual[overridden_key])
+
+        new_vars_items = new_vars_dict.items()
+        self.assertIs(NotImplemented, os.environ.__or__(new_vars_items))
+
+        self._test_underlying_process_env('_A_', '')
+        self._test_underlying_process_env(overridden_key, original_value)
+
+    def test_ior_operator(self):
+        overridden_key = '_TEST_VAR_'
+        os.environ[overridden_key] = 'original_value'
+
+        new_vars_dict = {'_A_': '1', '_B_': '2', overridden_key: '3'}
+        expected = dict(os.environ)
+        expected.update(new_vars_dict)
+
+        os.environ |= new_vars_dict
+        self.assertEqual(expected, os.environ)
+        self.assertEqual('3', os.environ[overridden_key])
+
+        self._test_underlying_process_env('_A_', '1')
+        self._test_underlying_process_env(overridden_key, '3')
+
+    def test_ior_operator_invalid_dicts(self):
+        os_environ_copy = os.environ.copy()
+        with self.assertRaises(TypeError):
+            dict_with_bad_key = {1: '_A_'}
+            os.environ |= dict_with_bad_key
+
+        with self.assertRaises(TypeError):
+            dict_with_bad_val = {'_A_': 1}
+            os.environ |= dict_with_bad_val
+
+        # Check nothing was added.
+        self.assertEqual(os_environ_copy, os.environ)
+
+    def test_ior_operator_key_value_iterable(self):
+        overridden_key = '_TEST_VAR_'
+        os.environ[overridden_key] = 'original_value'
+
+        new_vars_items = (('_A_', '1'), ('_B_', '2'), (overridden_key, '3'))
+        expected = dict(os.environ)
+        expected.update(new_vars_items)
+
+        os.environ |= new_vars_items
+        self.assertEqual(expected, os.environ)
+        self.assertEqual('3', os.environ[overridden_key])
+
+        self._test_underlying_process_env('_A_', '1')
+        self._test_underlying_process_env(overridden_key, '3')
+
+    def test_ror_operator(self):
+        overridden_key = '_TEST_VAR_'
+        original_value = 'original_value'
+        os.environ[overridden_key] = original_value
+
+        new_vars_dict = {'_A_': '1', '_B_': '2', overridden_key: '3'}
+        expected = dict(new_vars_dict)
+        expected.update(os.environ)
+
+        actual = new_vars_dict | os.environ
+        self.assertDictEqual(expected, actual)
+        self.assertEqual(original_value, actual[overridden_key])
+
+        new_vars_items = new_vars_dict.items()
+        self.assertIs(NotImplemented, os.environ.__ror__(new_vars_items))
+
+        self._test_underlying_process_env('_A_', '')
+        self._test_underlying_process_env(overridden_key, original_value)
+
 
 class WalkTests(unittest.TestCase):
     """Tests for os.walk()."""
@@ -1058,7 +1173,7 @@
         os.makedirs(t2_path)
 
         for path in tmp1_path, tmp2_path, tmp3_path, tmp4_path, tmp5_path:
-            with open(path, "x") as f:
+            with open(path, "x", encoding='utf-8') as f:
                 f.write("I'm " + path + " and proud of it.  Blame test_os.\n")
 
         if support.can_symlink():
@@ -2244,7 +2359,7 @@
             file_name = 'FILE%d' % i
             file_path = os.path.join(support.TESTFN, file_name)
             os.makedirs(dir_path)
-            with open(file_path, 'w') as f:
+            with open(file_path, 'w', encoding='utf-8') as f:
                 f.write("I'm %s and proud of it. Blame test_os.\n" % file_path)
             self.created_paths.extend([dir_name, file_name])
         self.created_paths.sort()
@@ -2675,7 +2790,7 @@
         # We are the parent of our subprocess
         self.assertEqual(int(stdout), os.getpid())
 
-    def check_waitpid(self, code, exitcode):
+    def check_waitpid(self, code, exitcode, callback=None):
         if sys.platform == 'win32':
             # On Windows, os.spawnv() simply joins arguments with spaces:
             # arguments need to be quoted
@@ -2684,29 +2799,58 @@
             args = [sys.executable, '-c', code]
         pid = os.spawnv(os.P_NOWAIT, sys.executable, args)
 
+        if callback is not None:
+            callback(pid)
+
+        # don't use support.wait_process() to test directly os.waitpid()
+        # and os.waitstatus_to_exitcode()
         pid2, status = os.waitpid(pid, 0)
-        if sys.platform == 'win32':
-            self.assertEqual(status, exitcode << 8)
-        else:
-            self.assertTrue(os.WIFEXITED(status), status)
-            self.assertEqual(os.WEXITSTATUS(status), exitcode)
+        self.assertEqual(os.waitstatus_to_exitcode(status), exitcode)
         self.assertEqual(pid2, pid)
 
     def test_waitpid(self):
         self.check_waitpid(code='pass', exitcode=0)
 
-    def test_waitpid_exitcode(self):
+    def test_waitstatus_to_exitcode(self):
         exitcode = 23
         code = f'import sys; sys.exit({exitcode})'
         self.check_waitpid(code, exitcode=exitcode)
 
+        with self.assertRaises(TypeError):
+            os.waitstatus_to_exitcode(0.0)
+
     @unittest.skipUnless(sys.platform == 'win32', 'win32-specific test')
     def test_waitpid_windows(self):
-        # bpo-40138: test os.waitpid() with exit code larger than INT_MAX.
+        # bpo-40138: test os.waitpid() and os.waitstatus_to_exitcode()
+        # with exit code larger than INT_MAX.
         STATUS_CONTROL_C_EXIT = 0xC000013A
         code = f'import _winapi; _winapi.ExitProcess({STATUS_CONTROL_C_EXIT})'
         self.check_waitpid(code, exitcode=STATUS_CONTROL_C_EXIT)
 
+    @unittest.skipUnless(sys.platform == 'win32', 'win32-specific test')
+    def test_waitstatus_to_exitcode_windows(self):
+        max_exitcode = 2 ** 32 - 1
+        for exitcode in (0, 1, 5, max_exitcode):
+            self.assertEqual(os.waitstatus_to_exitcode(exitcode << 8),
+                             exitcode)
+
+        # invalid values
+        with self.assertRaises(ValueError):
+            os.waitstatus_to_exitcode((max_exitcode + 1) << 8)
+        with self.assertRaises(OverflowError):
+            os.waitstatus_to_exitcode(-1)
+
+    # Skip the test on Windows
+    @unittest.skipUnless(hasattr(signal, 'SIGKILL'), 'need signal.SIGKILL')
+    def test_waitstatus_to_exitcode_kill(self):
+        code = f'import time; time.sleep({support.LONG_TIMEOUT})'
+        signum = signal.SIGKILL
+
+        def kill_process(pid):
+            os.kill(pid, signum)
+
+        self.check_waitpid(code, exitcode=-signum, callback=kill_process)
+
 
 class SpawnTests(unittest.TestCase):
     def create_args(self, *, with_env=False, use_bytes=False):
@@ -2767,6 +2911,10 @@
         exitcode = os.spawnv(os.P_WAIT, args[0], args)
         self.assertEqual(exitcode, self.exitcode)
 
+        # Test for PyUnicode_FSConverter()
+        exitcode = os.spawnv(os.P_WAIT, FakePath(args[0]), args)
+        self.assertEqual(exitcode, self.exitcode)
+
     @requires_os_func('spawnve')
     def test_spawnve(self):
         args = self.create_args(with_env=True)
@@ -2789,14 +2937,7 @@
     def test_nowait(self):
         args = self.create_args()
         pid = os.spawnv(os.P_NOWAIT, args[0], args)
-        result = os.waitpid(pid, 0)
-        self.assertEqual(result[0], pid)
-        status = result[1]
-        if hasattr(os, 'WIFEXITED'):
-            self.assertTrue(os.WIFEXITED(status))
-            self.assertEqual(os.WEXITSTATUS(status), self.exitcode)
-        else:
-            self.assertEqual(status, self.exitcode << 8)
+        support.wait_process(pid, exitcode=self.exitcode)
 
     @requires_os_func('spawnve')
     def test_spawnve_bytes(self):
@@ -3031,7 +3172,7 @@
         support.unlink(support.TESTFN)
 
     def setUp(self):
-        self.server = SendfileTestServer((support.HOST, 0))
+        self.server = SendfileTestServer((socket_helper.HOST, 0))
         self.server.start()
         self.client = socket.socket()
         self.client.connect((self.server.host, self.server.port))
@@ -3135,11 +3276,12 @@
 
     def test_keywords(self):
         # Keyword arguments should be supported
-        os.sendfile(out=self.sockno, offset=0, count=4096,
-            **{'in': self.fileno})
+        os.sendfile(out_fd=self.sockno, in_fd=self.fileno,
+                    offset=0, count=4096)
         if self.SUPPORT_HEADERS_TRAILERS:
-            os.sendfile(self.sockno, self.fileno, offset=0, count=4096,
-                headers=(), trailers=(), flags=0)
+            os.sendfile(out_fd=self.sockno, in_fd=self.fileno,
+                        offset=0, count=4096,
+                        headers=(), trailers=(), flags=0)
 
     # --- headers / trailers tests
 
@@ -3343,7 +3485,11 @@
         should work too.
         """
         try:
-            size = subprocess.check_output(['stty', 'size']).decode().split()
+            size = (
+                subprocess.check_output(
+                    ["stty", "size"], stderr=subprocess.DEVNULL, text=True
+                ).split()
+            )
         except (FileNotFoundError, subprocess.CalledProcessError,
                 PermissionError):
             self.skipTest("stty invocation failed")
@@ -3591,7 +3737,7 @@
         if os.name == 'nt':
             bytes_fspath = bytes_filename = None
         else:
-            bytes_filename = support.TESTFN.encode('ascii')
+            bytes_filename = os.fsencode(support.TESTFN)
             bytes_fspath = FakePath(bytes_filename)
         fd = os.open(FakePath(str_filename), os.O_WRONLY|os.O_CREAT)
         self.addCleanup(support.unlink, support.TESTFN)
@@ -3662,6 +3808,24 @@
         self.assertIn('walk', os.__all__)
 
 
+class TestDirEntry(unittest.TestCase):
+    def setUp(self):
+        self.path = os.path.realpath(support.TESTFN)
+        self.addCleanup(support.rmtree, self.path)
+        os.mkdir(self.path)
+
+    def test_uninstantiable(self):
+        self.assertRaises(TypeError, os.DirEntry)
+
+    def test_unpickable(self):
+        filename = create_file(os.path.join(self.path, "file.txt"), b'python')
+        entry = [entry for entry in os.scandir(self.path)].pop()
+        self.assertIsInstance(entry, os.DirEntry)
+        self.assertEqual(entry.name, "file.txt")
+        import pickle
+        self.assertRaises(TypeError, pickle.dumps, entry, filename)
+
+
 class TestScandir(unittest.TestCase):
     check_no_resource_warning = support.check_no_resource_warning
 
@@ -3696,6 +3860,18 @@
         else:
             self.assertEqual(stat1, stat2)
 
+    def test_uninstantiable(self):
+        scandir_iter = os.scandir(self.path)
+        self.assertRaises(TypeError, type(scandir_iter))
+        scandir_iter.close()
+
+    def test_unpickable(self):
+        filename = self.create_file("file.txt")
+        scandir_iter = os.scandir(self.path)
+        import pickle
+        self.assertRaises(TypeError, pickle.dumps, scandir_iter, filename)
+        scandir_iter.close()
+
     def check_entry(self, entry, name, is_dir, is_file, is_symlink):
         self.assertIsInstance(entry, os.DirEntry)
         self.assertEqual(entry.name, name)
@@ -4050,6 +4226,9 @@
         self.assertFalse(issubclass(FakePath, A))
         self.assertTrue(issubclass(FakePath, os.PathLike))
 
+    def test_pathlike_class_getitem(self):
+        self.assertIsInstance(os.PathLike[bytes], types.GenericAlias)
+
 
 class TimesTests(unittest.TestCase):
     def test_times(self):
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index e5285c6..a4d2cdc 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -1,11 +1,16 @@
 import copy
-import parser
+import warnings
+with warnings.catch_warnings():
+    warnings.filterwarnings('ignore', 'The parser module is deprecated',
+                            DeprecationWarning)
+    import parser
 import pickle
 import unittest
 import operator
 import struct
 from test import support
 from test.support.script_helper import assert_python_failure
+from test.support.script_helper import assert_python_ok
 
 #
 #  First, we test that we can generate trees from valid source fragments,
@@ -221,6 +226,27 @@
         self.check_suite("@funcattrs()\n"
                          "def f(): pass")
 
+        self.check_suite("@False or x\n"
+                         "def f(): pass")
+        self.check_suite("@d := x\n"
+                         "def f(): pass")
+        self.check_suite("@lambda f: x(f)\n"
+                         "def f(): pass")
+        self.check_suite("@[..., x, ...][1]\n"
+                         "def f(): pass")
+        self.check_suite("@x(x)(x)\n"
+                         "def f(): pass")
+        self.check_suite("@(x, x)\n"
+                         "def f(): pass")
+        self.check_suite("@...\n"
+                         "def f(): pass")
+        self.check_suite("@None\n"
+                         "def f(): pass")
+        self.check_suite("@w @(x @y) @(z)\n"
+                         "def f(): pass")
+        self.check_suite("@w[x].y.z\n"
+                         "def f(): pass")
+
         # keyword-only arguments
         self.check_suite("def f(*, a): pass")
         self.check_suite("def f(*, a = 5): pass")
@@ -265,6 +291,27 @@
                          "@decorator2\n"
                          "class foo():pass")
 
+        self.check_suite("@False or x\n"
+                         "class C: pass")
+        self.check_suite("@d := x\n"
+                         "class C: pass")
+        self.check_suite("@lambda f: x(f)\n"
+                         "class C: pass")
+        self.check_suite("@[..., x, ...][1]\n"
+                         "class C: pass")
+        self.check_suite("@x(x)(x)\n"
+                         "class C: pass")
+        self.check_suite("@(x, x)\n"
+                         "class C: pass")
+        self.check_suite("@...\n"
+                         "class C: pass")
+        self.check_suite("@None\n"
+                         "class C: pass")
+        self.check_suite("@w @(x @y) @(z)\n"
+                         "class C: pass")
+        self.check_suite("@w[x].y.z\n"
+                         "class C: pass")
+
     def test_import_from_statement(self):
         self.check_suite("from sys.path import *")
         self.check_suite("from sys.path import dirname")
@@ -854,7 +901,7 @@
 
     def test_trigger_memory_error(self):
         e = self._nested_expression(100)
-        rc, out, err = assert_python_failure('-c', e)
+        rc, out, err = assert_python_failure('-Xoldparser', '-c', e)
         # parsing the expression will result in an error message
         # followed by a MemoryError (see #11963)
         self.assertIn(b's_push: parser stack overflow', err)
@@ -987,5 +1034,13 @@
         with self.assertRaises(TypeError):
             parser.expr("a", "b")
 
+
+class TestDeprecation(unittest.TestCase):
+    def test_deprecation_message(self):
+        code = "def f():\n  import parser\n\nf()"
+        rc, out, err = assert_python_ok('-c', code)
+        self.assertIn(b'<string>:2: DeprecationWarning', err)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index 3622694..3da3571 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -559,6 +559,23 @@
         self.assertRaises(ValueError, P('a/b').with_name, 'c/')
         self.assertRaises(ValueError, P('a/b').with_name, 'c/d')
 
+    def test_with_stem_common(self):
+        P = self.cls
+        self.assertEqual(P('a/b').with_stem('d'), P('a/d'))
+        self.assertEqual(P('/a/b').with_stem('d'), P('/a/d'))
+        self.assertEqual(P('a/b.py').with_stem('d'), P('a/d.py'))
+        self.assertEqual(P('/a/b.py').with_stem('d'), P('/a/d.py'))
+        self.assertEqual(P('/a/b.tar.gz').with_stem('d'), P('/a/d.gz'))
+        self.assertEqual(P('a/Dot ending.').with_stem('d'), P('a/d'))
+        self.assertEqual(P('/a/Dot ending.').with_stem('d'), P('/a/d'))
+        self.assertRaises(ValueError, P('').with_stem, 'd')
+        self.assertRaises(ValueError, P('.').with_stem, 'd')
+        self.assertRaises(ValueError, P('/').with_stem, 'd')
+        self.assertRaises(ValueError, P('a/b').with_stem, '')
+        self.assertRaises(ValueError, P('a/b').with_stem, '/c')
+        self.assertRaises(ValueError, P('a/b').with_stem, 'c/')
+        self.assertRaises(ValueError, P('a/b').with_stem, 'c/d')
+
     def test_with_suffix_common(self):
         P = self.cls
         self.assertEqual(P('a/b').with_suffix('.gz'), P('a/b.gz'))
@@ -619,6 +636,40 @@
         self.assertRaises(ValueError, p.relative_to, '')
         self.assertRaises(ValueError, p.relative_to, P('a'))
 
+    def test_is_relative_to_common(self):
+        P = self.cls
+        p = P('a/b')
+        self.assertRaises(TypeError, p.is_relative_to)
+        self.assertRaises(TypeError, p.is_relative_to, b'a')
+        self.assertTrue(p.is_relative_to(P()))
+        self.assertTrue(p.is_relative_to(''))
+        self.assertTrue(p.is_relative_to(P('a')))
+        self.assertTrue(p.is_relative_to('a/'))
+        self.assertTrue(p.is_relative_to(P('a/b')))
+        self.assertTrue(p.is_relative_to('a/b'))
+        # With several args.
+        self.assertTrue(p.is_relative_to('a', 'b'))
+        # Unrelated paths.
+        self.assertFalse(p.is_relative_to(P('c')))
+        self.assertFalse(p.is_relative_to(P('a/b/c')))
+        self.assertFalse(p.is_relative_to(P('a/c')))
+        self.assertFalse(p.is_relative_to(P('/a')))
+        p = P('/a/b')
+        self.assertTrue(p.is_relative_to(P('/')))
+        self.assertTrue(p.is_relative_to('/'))
+        self.assertTrue(p.is_relative_to(P('/a')))
+        self.assertTrue(p.is_relative_to('/a'))
+        self.assertTrue(p.is_relative_to('/a/'))
+        self.assertTrue(p.is_relative_to(P('/a/b')))
+        self.assertTrue(p.is_relative_to('/a/b'))
+        # Unrelated paths.
+        self.assertFalse(p.is_relative_to(P('/c')))
+        self.assertFalse(p.is_relative_to(P('/a/b/c')))
+        self.assertFalse(p.is_relative_to(P('/a/c')))
+        self.assertFalse(p.is_relative_to(P()))
+        self.assertFalse(p.is_relative_to(''))
+        self.assertFalse(p.is_relative_to(P('a')))
+
     def test_pickling_common(self):
         P = self.cls
         p = P('/a/b')
@@ -980,6 +1031,20 @@
         self.assertRaises(ValueError, P('c:a/b').with_name, 'd:/e')
         self.assertRaises(ValueError, P('c:a/b').with_name, '//My/Share')
 
+    def test_with_stem(self):
+        P = self.cls
+        self.assertEqual(P('c:a/b').with_stem('d'), P('c:a/d'))
+        self.assertEqual(P('c:/a/b').with_stem('d'), P('c:/a/d'))
+        self.assertEqual(P('c:a/Dot ending.').with_stem('d'), P('c:a/d'))
+        self.assertEqual(P('c:/a/Dot ending.').with_stem('d'), P('c:/a/d'))
+        self.assertRaises(ValueError, P('c:').with_stem, 'd')
+        self.assertRaises(ValueError, P('c:/').with_stem, 'd')
+        self.assertRaises(ValueError, P('//My/Share').with_stem, 'd')
+        self.assertRaises(ValueError, P('c:a/b').with_stem, 'd:')
+        self.assertRaises(ValueError, P('c:a/b').with_stem, 'd:e')
+        self.assertRaises(ValueError, P('c:a/b').with_stem, 'd:/e')
+        self.assertRaises(ValueError, P('c:a/b').with_stem, '//My/Share')
+
     def test_with_suffix(self):
         P = self.cls
         self.assertEqual(P('c:a/b').with_suffix('.gz'), P('c:a/b.gz'))
@@ -1062,6 +1127,59 @@
         self.assertRaises(ValueError, p.relative_to, P('//z/Share/Foo'))
         self.assertRaises(ValueError, p.relative_to, P('//Server/z/Foo'))
 
+    def test_is_relative_to(self):
+        P = self.cls
+        p = P('C:Foo/Bar')
+        self.assertTrue(p.is_relative_to(P('c:')))
+        self.assertTrue(p.is_relative_to('c:'))
+        self.assertTrue(p.is_relative_to(P('c:foO')))
+        self.assertTrue(p.is_relative_to('c:foO'))
+        self.assertTrue(p.is_relative_to('c:foO/'))
+        self.assertTrue(p.is_relative_to(P('c:foO/baR')))
+        self.assertTrue(p.is_relative_to('c:foO/baR'))
+        # Unrelated paths.
+        self.assertFalse(p.is_relative_to(P()))
+        self.assertFalse(p.is_relative_to(''))
+        self.assertFalse(p.is_relative_to(P('d:')))
+        self.assertFalse(p.is_relative_to(P('/')))
+        self.assertFalse(p.is_relative_to(P('Foo')))
+        self.assertFalse(p.is_relative_to(P('/Foo')))
+        self.assertFalse(p.is_relative_to(P('C:/Foo')))
+        self.assertFalse(p.is_relative_to(P('C:Foo/Bar/Baz')))
+        self.assertFalse(p.is_relative_to(P('C:Foo/Baz')))
+        p = P('C:/Foo/Bar')
+        self.assertTrue(p.is_relative_to('c:'))
+        self.assertTrue(p.is_relative_to(P('c:/')))
+        self.assertTrue(p.is_relative_to(P('c:/foO')))
+        self.assertTrue(p.is_relative_to('c:/foO/'))
+        self.assertTrue(p.is_relative_to(P('c:/foO/baR')))
+        self.assertTrue(p.is_relative_to('c:/foO/baR'))
+        # Unrelated paths.
+        self.assertFalse(p.is_relative_to(P('C:/Baz')))
+        self.assertFalse(p.is_relative_to(P('C:/Foo/Bar/Baz')))
+        self.assertFalse(p.is_relative_to(P('C:/Foo/Baz')))
+        self.assertFalse(p.is_relative_to(P('C:Foo')))
+        self.assertFalse(p.is_relative_to(P('d:')))
+        self.assertFalse(p.is_relative_to(P('d:/')))
+        self.assertFalse(p.is_relative_to(P('/')))
+        self.assertFalse(p.is_relative_to(P('/Foo')))
+        self.assertFalse(p.is_relative_to(P('//C/Foo')))
+        # UNC paths.
+        p = P('//Server/Share/Foo/Bar')
+        self.assertTrue(p.is_relative_to(P('//sErver/sHare')))
+        self.assertTrue(p.is_relative_to('//sErver/sHare'))
+        self.assertTrue(p.is_relative_to('//sErver/sHare/'))
+        self.assertTrue(p.is_relative_to(P('//sErver/sHare/Foo')))
+        self.assertTrue(p.is_relative_to('//sErver/sHare/Foo'))
+        self.assertTrue(p.is_relative_to('//sErver/sHare/Foo/'))
+        self.assertTrue(p.is_relative_to(P('//sErver/sHare/Foo/Bar')))
+        self.assertTrue(p.is_relative_to('//sErver/sHare/Foo/Bar'))
+        # Unrelated paths.
+        self.assertFalse(p.is_relative_to(P('/Server/Share/Foo')))
+        self.assertFalse(p.is_relative_to(P('c:/Server/Share/Foo')))
+        self.assertFalse(p.is_relative_to(P('//z/Share/Foo')))
+        self.assertFalse(p.is_relative_to(P('//Server/z/Foo')))
+
     def test_is_absolute(self):
         P = self.cls
         # Under NT, only paths with both a drive and a root are absolute.
@@ -1633,13 +1751,15 @@
         next(it2)
         with p:
             pass
-        # I/O operation on closed path.
-        self.assertRaises(ValueError, next, it)
-        self.assertRaises(ValueError, next, it2)
-        self.assertRaises(ValueError, p.open)
-        self.assertRaises(ValueError, p.resolve)
-        self.assertRaises(ValueError, p.absolute)
-        self.assertRaises(ValueError, p.__enter__)
+        # Using a path as a context manager is a no-op, thus the following
+        # operations should still succeed after the context manage exits.
+        next(it)
+        next(it2)
+        p.exists()
+        p.resolve()
+        p.absolute()
+        with p:
+            pass
 
     def test_chmod(self):
         p = self.cls(BASE) / 'fileA'
@@ -1779,6 +1899,16 @@
         self.assertEqual(os.stat(r).st_size, size)
         self.assertFileNotFound(q.stat)
 
+    @support.skip_unless_symlink
+    def test_readlink(self):
+        P = self.cls(BASE)
+        self.assertEqual((P / 'linkA').readlink(), self.cls('fileA'))
+        self.assertEqual((P / 'brokenLink').readlink(),
+                         self.cls('non-existing'))
+        self.assertEqual((P / 'linkB').readlink(), self.cls('dirB'))
+        with self.assertRaises(OSError):
+            (P / 'fileA').readlink()
+
     def test_touch_common(self):
         P = self.cls(BASE)
         p = P / 'newfileA'
@@ -2174,6 +2304,9 @@
 class PathTest(_BasePathTest, unittest.TestCase):
     cls = pathlib.Path
 
+    def test_class_getitem(self):
+        self.assertIs(self.cls[str], self.cls)
+
     def test_concrete_class(self):
         p = self.cls('a')
         self.assertIs(type(p),
@@ -2214,6 +2347,15 @@
         st = os.stat(join('other_new_file'))
         self.assertEqual(stat.S_IMODE(st.st_mode), 0o644)
 
+    def test_resolve_root(self):
+        current_directory = os.getcwd()
+        try:
+            os.chdir('/')
+            p = self.cls('spam')
+            self.assertEqual(str(p.resolve()), '/spam')
+        finally:
+            os.chdir(current_directory)
+
     def test_touch_mode(self):
         old_mask = os.umask(0)
         self.addCleanup(os.umask, old_mask)
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 0e7ae1d..8016f81 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -425,6 +425,47 @@
     (Pdb) continue
     """
 
+def test_pdb_whatis_command():
+    """Test the whatis command
+
+    >>> myvar = (1,2)
+    >>> def myfunc():
+    ...     pass
+
+    >>> class MyClass:
+    ...    def mymethod(self):
+    ...        pass
+
+    >>> def test_function():
+    ...   import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
+
+    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
+    ...    'whatis myvar',
+    ...    'whatis myfunc',
+    ...    'whatis MyClass',
+    ...    'whatis MyClass()',
+    ...    'whatis MyClass.mymethod',
+    ...    'whatis MyClass().mymethod',
+    ...    'continue',
+    ... ]):
+    ...    test_function()
+    --Return--
+    > <doctest test.test_pdb.test_pdb_whatis_command[3]>(2)test_function()->None
+    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
+    (Pdb) whatis myvar
+    <class 'tuple'>
+    (Pdb) whatis myfunc
+    Function myfunc
+    (Pdb) whatis MyClass
+    Class test.test_pdb.MyClass
+    (Pdb) whatis MyClass()
+    <class 'test.test_pdb.MyClass'>
+    (Pdb) whatis MyClass.mymethod
+    Function mymethod
+    (Pdb) whatis MyClass().mymethod
+    Method mymethod
+    (Pdb) continue
+    """
 
 def test_post_mortem():
     """Test post mortem traceback debugging.
@@ -984,7 +1025,7 @@
 
 def test_pdb_until_command_for_generator():
     """Testing no unwindng stack on yield for generators
-       for "until" command if target breakpoing is not reached
+       for "until" command if target breakpoint is not reached
 
     >>> def test_gen():
     ...     yield 0
@@ -1028,7 +1069,7 @@
 
 def test_pdb_until_command_for_coroutine():
     """Testing no unwindng stack for coroutines
-       for "until" command if target breakpoing is not reached
+       for "until" command if target breakpoint is not reached
 
     >>> import asyncio
 
@@ -1198,6 +1239,7 @@
                 stdout=subprocess.PIPE,
                 stdin=subprocess.PIPE,
                 stderr=subprocess.STDOUT,
+                env = {**os.environ, 'PYTHONIOENCODING': 'utf-8'}
         ) as proc:
             stdout, stderr = proc.communicate(str.encode(commands))
         stdout = stdout and bytes.decode(stdout)
@@ -1353,10 +1395,11 @@
             stdout=subprocess.PIPE,
             stdin=subprocess.PIPE,
             stderr=subprocess.STDOUT,
+            env={**os.environ, 'PYTHONIOENCODING': 'utf-8'}
             )
         self.addCleanup(proc.stdout.close)
         stdout, stderr = proc.communicate(b'cont\n')
-        self.assertNotIn('Error', stdout.decode(),
+        self.assertNotIn(b'Error', stdout,
                          "Got an error running test script under PDB")
 
     def test_issue36250(self):
@@ -1382,10 +1425,11 @@
             stdout=subprocess.PIPE,
             stdin=subprocess.PIPE,
             stderr=subprocess.STDOUT,
+            env = {**os.environ, 'PYTHONIOENCODING': 'utf-8'}
             )
         self.addCleanup(proc.stdout.close)
         stdout, stderr = proc.communicate(b'cont\ncont\n')
-        self.assertNotIn('Error', stdout.decode(),
+        self.assertNotIn(b'Error', stdout,
                          "Got an error running test script under PDB")
 
     def test_issue16180(self):
@@ -1425,8 +1469,8 @@
                 )
                 with proc:
                     stdout, stderr = proc.communicate(b'q\n')
-                    self.assertNotIn("NameError: name 'invalid' is not defined",
-                                  stdout.decode())
+                    self.assertNotIn(b"NameError: name 'invalid' is not defined",
+                                  stdout)
 
         finally:
             if save_home is not None:
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 01c0036..55543de 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -1,7 +1,7 @@
 import dis
 import unittest
 
-from test.bytecode_helper import BytecodeTestCase
+from test.support.bytecode_helper import BytecodeTestCase
 
 
 def count_instr_recursively(f, opname):
@@ -65,14 +65,14 @@
         self.check_lnotab(unot)
 
     def test_elim_inversion_of_is_or_in(self):
-        for line, cmp_op in (
-            ('not a is b', 'is not',),
-            ('not a in b', 'not in',),
-            ('not a is not b', 'is',),
-            ('not a not in b', 'in',),
+        for line, cmp_op, invert in (
+            ('not a is b', 'IS_OP', 1,),
+            ('not a is not b', 'IS_OP', 0,),
+            ('not a in b', 'CONTAINS_OP', 1,),
+            ('not a not in b', 'CONTAINS_OP', 0,),
             ):
             code = compile(line, '', 'single')
-            self.assertInBytecode(code, 'COMPARE_OP', cmp_op)
+            self.assertInBytecode(code, cmp_op, invert)
             self.check_lnotab(code)
 
     def test_global_as_constant(self):
@@ -474,7 +474,7 @@
         self.assertEqual(f(), 1)
         self.check_lnotab(f)
 
-    def test_if_with_if_expression(self):  # XXX does this belong in 3.8?
+    def test_if_with_if_expression(self):
         # Check bpo-37289
         def f(x):
             if (True if x else False):
@@ -495,6 +495,20 @@
             return 6
         self.check_lnotab(f)
 
+    def test_assignment_idiom_in_comprehensions(self):
+        def listcomp():
+            return [y for x in a for y in [f(x)]]
+        self.assertEqual(count_instr_recursively(listcomp, 'FOR_ITER'), 1)
+        def setcomp():
+            return {y for x in a for y in [f(x)]}
+        self.assertEqual(count_instr_recursively(setcomp, 'FOR_ITER'), 1)
+        def dictcomp():
+            return {y: y for x in a for y in [f(x)]}
+        self.assertEqual(count_instr_recursively(dictcomp, 'FOR_ITER'), 1)
+        def genexpr():
+            return (y for x in a for y in [f(x)])
+        self.assertEqual(count_instr_recursively(genexpr, 'FOR_ITER'), 1)
+
 
 class TestBuglets(unittest.TestCase):
 
@@ -508,6 +522,13 @@
         with self.assertRaises(ValueError):
             f()
 
+    def test_bpo_42057(self):
+        for i in range(10):
+            try:
+                raise Exception
+            except Exception or Exception:
+                pass
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_peg_generator/__init__.py b/Lib/test/test_peg_generator/__init__.py
new file mode 100644
index 0000000..fa855f2
--- /dev/null
+++ b/Lib/test/test_peg_generator/__init__.py
@@ -0,0 +1,7 @@
+import os
+
+from test.support import load_package_tests
+
+# Load all tests in package
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_peg_generator/__main__.py b/Lib/test/test_peg_generator/__main__.py
new file mode 100644
index 0000000..1fab1fd
--- /dev/null
+++ b/Lib/test/test_peg_generator/__main__.py
@@ -0,0 +1,4 @@
+import unittest
+from . import load_tests
+
+unittest.main()
diff --git a/Lib/test/test_peg_generator/test_c_parser.py b/Lib/test/test_peg_generator/test_c_parser.py
new file mode 100644
index 0000000..9701d4f
--- /dev/null
+++ b/Lib/test/test_peg_generator/test_c_parser.py
@@ -0,0 +1,452 @@
+import sysconfig
+import textwrap
+import unittest
+from distutils.tests.support import TempdirManager
+from pathlib import Path
+
+from test import test_tools
+from test import support
+from test.support.script_helper import assert_python_ok
+
+_py_cflags_nodist = sysconfig.get_config_var('PY_CFLAGS_NODIST')
+_pgo_flag = sysconfig.get_config_var('PGO_PROF_USE_FLAG')
+if _pgo_flag and _py_cflags_nodist and _pgo_flag in _py_cflags_nodist:
+    raise unittest.SkipTest("peg_generator test disabled under PGO build")
+
+test_tools.skip_if_missing("peg_generator")
+with test_tools.imports_under_tool("peg_generator"):
+    from pegen.grammar_parser import GeneratedParser as GrammarParser
+    from pegen.testutil import (
+        parse_string,
+        generate_parser_c_extension,
+        generate_c_parser_source,
+    )
+    from pegen.ast_dump import ast_dump
+
+
+TEST_TEMPLATE = """
+tmp_dir = {extension_path!r}
+
+import ast
+import traceback
+import sys
+import unittest
+
+from test import test_tools
+with test_tools.imports_under_tool("peg_generator"):
+    from pegen.ast_dump import ast_dump
+
+sys.path.insert(0, tmp_dir)
+import parse
+
+class Tests(unittest.TestCase):
+
+    def check_input_strings_for_grammar(
+        self,
+        valid_cases = (),
+        invalid_cases = (),
+    ):
+        if valid_cases:
+            for case in valid_cases:
+                parse.parse_string(case, mode=0)
+
+        if invalid_cases:
+            for case in invalid_cases:
+                with self.assertRaises(SyntaxError):
+                    parse.parse_string(case, mode=0)
+
+    def verify_ast_generation(self, stmt):
+        expected_ast = ast.parse(stmt)
+        actual_ast = parse.parse_string(stmt, mode=1)
+        self.assertEqual(ast_dump(expected_ast), ast_dump(actual_ast))
+
+    def test_parse(self):
+        {test_source}
+
+unittest.main()
+"""
+
+
+class TestCParser(TempdirManager, unittest.TestCase):
+    def setUp(self):
+        cmd = support.missing_compiler_executable()
+        if cmd is not None:
+            self.skipTest("The %r command is not found" % cmd)
+        super(TestCParser, self).setUp()
+        self.tmp_path = self.mkdtemp()
+        change_cwd = support.change_cwd(self.tmp_path)
+        change_cwd.__enter__()
+        self.addCleanup(change_cwd.__exit__, None, None, None)
+
+    def tearDown(self):
+        super(TestCParser, self).tearDown()
+
+    def build_extension(self, grammar_source):
+        grammar = parse_string(grammar_source, GrammarParser)
+        generate_parser_c_extension(grammar, Path(self.tmp_path))
+
+    def run_test(self, grammar_source, test_source):
+        self.build_extension(grammar_source)
+        test_source = textwrap.indent(textwrap.dedent(test_source), 8 * " ")
+        assert_python_ok(
+            "-c",
+            TEST_TEMPLATE.format(extension_path=self.tmp_path, test_source=test_source),
+        )
+
+    def test_c_parser(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=stmt* $ { Module(a, NULL, p->arena) }
+        stmt[stmt_ty]: a=expr_stmt { a }
+        expr_stmt[stmt_ty]: a=expression NEWLINE { _Py_Expr(a, EXTRA) }
+        expression[expr_ty]: ( l=expression '+' r=term { _Py_BinOp(l, Add, r, EXTRA) }
+                            | l=expression '-' r=term { _Py_BinOp(l, Sub, r, EXTRA) }
+                            | t=term { t }
+                            )
+        term[expr_ty]: ( l=term '*' r=factor { _Py_BinOp(l, Mult, r, EXTRA) }
+                    | l=term '/' r=factor { _Py_BinOp(l, Div, r, EXTRA) }
+                    | f=factor { f }
+                    )
+        factor[expr_ty]: ('(' e=expression ')' { e }
+                        | a=atom { a }
+                        )
+        atom[expr_ty]: ( n=NAME { n }
+                    | n=NUMBER { n }
+                    | s=STRING { s }
+                    )
+        """
+        test_source = """
+        expressions = [
+            "4+5",
+            "4-5",
+            "4*5",
+            "1+4*5",
+            "1+4/5",
+            "(1+1) + (1+1)",
+            "(1+1) - (1+1)",
+            "(1+1) * (1+1)",
+            "(1+1) / (1+1)",
+        ]
+
+        for expr in expressions:
+            the_ast = parse.parse_string(expr, mode=1)
+            expected_ast = ast.parse(expr)
+            self.assertEqual(ast_dump(the_ast), ast_dump(expected_ast))
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_lookahead(self) -> None:
+        grammar_source = """
+        start: NAME &NAME expr NEWLINE? ENDMARKER
+        expr: NAME | NUMBER
+        """
+        test_source = """
+        valid_cases = ["foo bar"]
+        invalid_cases = ["foo 34"]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_negative_lookahead(self) -> None:
+        grammar_source = """
+        start: NAME !NAME expr NEWLINE? ENDMARKER
+        expr: NAME | NUMBER
+        """
+        test_source = """
+        valid_cases = ["foo 34"]
+        invalid_cases = ["foo bar"]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_cut(self) -> None:
+        grammar_source = """
+        start: X ~ Y Z | X Q S
+        X: 'x'
+        Y: 'y'
+        Z: 'z'
+        Q: 'q'
+        S: 's'
+        """
+        test_source = """
+        valid_cases = ["x y z"]
+        invalid_cases = ["x q s"]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_gather(self) -> None:
+        grammar_source = """
+        start: ';'.pass_stmt+ NEWLINE
+        pass_stmt: 'pass'
+        """
+        test_source = """
+        valid_cases = ["pass", "pass; pass"]
+        invalid_cases = ["pass;", "pass; pass;"]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_left_recursion(self) -> None:
+        grammar_source = """
+        start: expr NEWLINE
+        expr: ('-' term | expr '+' term | term)
+        term: NUMBER
+        """
+        test_source = """
+        valid_cases = ["-34", "34", "34 + 12", "1 + 1 + 2 + 3"]
+        self.check_input_strings_for_grammar(valid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_advanced_left_recursive(self) -> None:
+        grammar_source = """
+        start: NUMBER | sign start
+        sign: ['-']
+        """
+        test_source = """
+        valid_cases = ["23", "-34"]
+        self.check_input_strings_for_grammar(valid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_mutually_left_recursive(self) -> None:
+        grammar_source = """
+        start: foo 'E'
+        foo: bar 'A' | 'B'
+        bar: foo 'C' | 'D'
+        """
+        test_source = """
+        valid_cases = ["B E", "D A C A E"]
+        self.check_input_strings_for_grammar(valid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_nasty_mutually_left_recursive(self) -> None:
+        grammar_source = """
+        start: target '='
+        target: maybe '+' | NAME
+        maybe: maybe '-' | target
+        """
+        test_source = """
+        valid_cases = ["x ="]
+        invalid_cases = ["x - + ="]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_return_stmt_noexpr_action(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) }
+        statements[asdl_seq*]: a=statement+ { a }
+        statement[stmt_ty]: simple_stmt
+        simple_stmt[stmt_ty]: small_stmt
+        small_stmt[stmt_ty]: return_stmt
+        return_stmt[stmt_ty]: a='return' NEWLINE { _Py_Return(NULL, EXTRA) }
+        """
+        test_source = """
+        stmt = "return"
+        self.verify_ast_generation(stmt)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_gather_action_ast(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=';'.pass_stmt+ NEWLINE ENDMARKER { Module(a, NULL, p->arena) }
+        pass_stmt[stmt_ty]: a='pass' { _Py_Pass(EXTRA)}
+        """
+        test_source = """
+        stmt = "pass; pass"
+        self.verify_ast_generation(stmt)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_pass_stmt_action(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) }
+        statements[asdl_seq*]: a=statement+ { a }
+        statement[stmt_ty]: simple_stmt
+        simple_stmt[stmt_ty]: small_stmt
+        small_stmt[stmt_ty]: pass_stmt
+        pass_stmt[stmt_ty]: a='pass' NEWLINE { _Py_Pass(EXTRA) }
+        """
+        test_source = """
+        stmt = "pass"
+        self.verify_ast_generation(stmt)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_if_stmt_action(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) }
+        statements[asdl_seq*]: a=statement+ { _PyPegen_seq_flatten(p, a) }
+        statement[asdl_seq*]:  a=compound_stmt { _PyPegen_singleton_seq(p, a) } | simple_stmt
+
+        simple_stmt[asdl_seq*]: a=small_stmt b=further_small_stmt* [';'] NEWLINE { _PyPegen_seq_insert_in_front(p, a, b) }
+        further_small_stmt[stmt_ty]: ';' a=small_stmt { a }
+
+        block: simple_stmt | NEWLINE INDENT a=statements DEDENT { a }
+
+        compound_stmt: if_stmt
+
+        if_stmt: 'if' a=full_expression ':' b=block { _Py_If(a, b, NULL, EXTRA) }
+
+        small_stmt[stmt_ty]: pass_stmt
+
+        pass_stmt[stmt_ty]: a='pass' { _Py_Pass(EXTRA) }
+
+        full_expression: NAME
+        """
+        test_source = """
+        stmt = "pass"
+        self.verify_ast_generation(stmt)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_same_name_different_types(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=import_from+ NEWLINE ENDMARKER { Module(a, NULL, p->arena)}
+        import_from[stmt_ty]: ( a='from' !'import' c=simple_name 'import' d=import_as_names_from {
+                                _Py_ImportFrom(c->v.Name.id, d, 0, EXTRA) }
+                            | a='from' '.' 'import' c=import_as_names_from {
+                                _Py_ImportFrom(NULL, c, 1, EXTRA) }
+                            )
+        simple_name[expr_ty]: NAME
+        import_as_names_from[asdl_seq*]: a=','.import_as_name_from+ { a }
+        import_as_name_from[alias_ty]: a=NAME 'as' b=NAME { _Py_alias(((expr_ty) a)->v.Name.id, ((expr_ty) b)->v.Name.id, p->arena) }
+        """
+        test_source = """
+        for stmt in ("from a import b as c", "from . import a as b"):
+            expected_ast = ast.parse(stmt)
+            actual_ast = parse.parse_string(stmt, mode=1)
+            self.assertEqual(ast_dump(expected_ast), ast_dump(actual_ast))
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_with_stmt_with_paren(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=[statements] ENDMARKER { Module(a, NULL, p->arena) }
+        statements[asdl_seq*]: a=statement+ { _PyPegen_seq_flatten(p, a) }
+        statement[asdl_seq*]: a=compound_stmt { _PyPegen_singleton_seq(p, a) }
+        compound_stmt[stmt_ty]: with_stmt
+        with_stmt[stmt_ty]: (
+            a='with' '(' b=','.with_item+ ')' ':' c=block {
+                _Py_With(b, _PyPegen_singleton_seq(p, c), NULL, EXTRA) }
+        )
+        with_item[withitem_ty]: (
+            e=NAME o=['as' t=NAME { t }] { _Py_withitem(e, _PyPegen_set_expr_context(p, o, Store), p->arena) }
+        )
+        block[stmt_ty]: a=pass_stmt NEWLINE { a } | NEWLINE INDENT a=pass_stmt DEDENT { a }
+        pass_stmt[stmt_ty]: a='pass' { _Py_Pass(EXTRA) }
+        """
+        test_source = """
+        stmt = "with (\\n    a as b,\\n    c as d\\n): pass"
+        the_ast = parse.parse_string(stmt, mode=1)
+        self.assertTrue(ast_dump(the_ast).startswith(
+            "Module(body=[With(items=[withitem(context_expr=Name(id='a', ctx=Load()), optional_vars=Name(id='b', ctx=Store())), "
+            "withitem(context_expr=Name(id='c', ctx=Load()), optional_vars=Name(id='d', ctx=Store()))]"
+        ))
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_ternary_operator(self) -> None:
+        grammar_source = """
+        start[mod_ty]: a=expr ENDMARKER { Module(a, NULL, p->arena) }
+        expr[asdl_seq*]: a=listcomp NEWLINE { _PyPegen_singleton_seq(p, _Py_Expr(a, EXTRA)) }
+        listcomp[expr_ty]: (
+            a='[' b=NAME c=for_if_clauses d=']' { _Py_ListComp(b, c, EXTRA) }
+        )
+        for_if_clauses[asdl_seq*]: (
+            a=(y=[ASYNC] 'for' a=NAME 'in' b=NAME c=('if' z=NAME { z })*
+                { _Py_comprehension(_Py_Name(((expr_ty) a)->v.Name.id, Store, EXTRA), b, c, (y == NULL) ? 0 : 1, p->arena) })+ { a }
+        )
+        """
+        test_source = """
+        stmt = "[i for i in a if b]"
+        self.verify_ast_generation(stmt)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_syntax_error_for_string(self) -> None:
+        grammar_source = """
+        start: expr+ NEWLINE? ENDMARKER
+        expr: NAME
+        """
+        test_source = r"""
+        for text in ("a b 42 b a", "\u540d \u540d 42 \u540d \u540d"):
+            try:
+                parse.parse_string(text, mode=0)
+            except SyntaxError as e:
+                tb = traceback.format_exc()
+            self.assertTrue('File "<string>", line 1' in tb)
+            self.assertTrue(f"SyntaxError: invalid syntax" in tb)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_headers_and_trailer(self) -> None:
+        grammar_source = """
+        @header 'SOME HEADER'
+        @subheader 'SOME SUBHEADER'
+        @trailer 'SOME TRAILER'
+        start: expr+ NEWLINE? ENDMARKER
+        expr: x=NAME
+        """
+        grammar = parse_string(grammar_source, GrammarParser)
+        parser_source = generate_c_parser_source(grammar)
+
+        self.assertTrue("SOME HEADER" in parser_source)
+        self.assertTrue("SOME SUBHEADER" in parser_source)
+        self.assertTrue("SOME TRAILER" in parser_source)
+
+    def test_error_in_rules(self) -> None:
+        grammar_source = """
+        start: expr+ NEWLINE? ENDMARKER
+        expr: NAME {PyTuple_New(-1)}
+        """
+        # PyTuple_New raises SystemError if an invalid argument was passed.
+        test_source = """
+        with self.assertRaises(SystemError):
+            parse.parse_string("a", mode=0)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_no_soft_keywords(self) -> None:
+        grammar_source = """
+        start: expr+ NEWLINE? ENDMARKER
+        expr: 'foo'
+        """
+        grammar = parse_string(grammar_source, GrammarParser)
+        parser_source = generate_c_parser_source(grammar)
+        assert "expect_soft_keyword" not in parser_source
+
+    def test_soft_keywords(self) -> None:
+        grammar_source = """
+        start: expr+ NEWLINE? ENDMARKER
+        expr: "foo"
+        """
+        grammar = parse_string(grammar_source, GrammarParser)
+        parser_source = generate_c_parser_source(grammar)
+        assert "expect_soft_keyword" in parser_source
+
+    def test_soft_keywords_parse(self) -> None:
+        grammar_source = """
+        start: "if" expr '+' expr NEWLINE
+        expr: NAME
+        """
+        test_source = """
+        valid_cases = ["if if + if"]
+        invalid_cases = ["if if"]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
+
+    def test_soft_keywords_lookahead(self) -> None:
+        grammar_source = """
+        start: &"if" "if" expr '+' expr NEWLINE
+        expr: NAME
+        """
+        test_source = """
+        valid_cases = ["if if + if"]
+        invalid_cases = ["if if"]
+        self.check_input_strings_for_grammar(valid_cases, invalid_cases)
+        """
+        self.run_test(grammar_source, test_source)
diff --git a/Lib/test/test_peg_generator/test_first_sets.py b/Lib/test/test_peg_generator/test_first_sets.py
new file mode 100644
index 0000000..425ee23
--- /dev/null
+++ b/Lib/test/test_peg_generator/test_first_sets.py
@@ -0,0 +1,225 @@
+import unittest
+
+from test import test_tools
+from typing import Dict, Set
+
+test_tools.skip_if_missing('peg_generator')
+with test_tools.imports_under_tool('peg_generator'):
+    from pegen.grammar_parser import GeneratedParser as GrammarParser
+    from pegen.testutil import parse_string
+    from pegen.first_sets import FirstSetCalculator
+    from pegen.grammar import Grammar
+
+
+class TestFirstSets(unittest.TestCase):
+    def calculate_first_sets(self, grammar_source: str) -> Dict[str, Set[str]]:
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        return FirstSetCalculator(grammar.rules).calculate()
+
+    def test_alternatives(self) -> None:
+        grammar = """
+            start: expr NEWLINE? ENDMARKER
+            expr: A | B
+            A: 'a' | '-'
+            B: 'b' | '+'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "A": {"'a'", "'-'"},
+            "B": {"'+'", "'b'"},
+            "expr": {"'+'", "'a'", "'b'", "'-'"},
+            "start": {"'+'", "'a'", "'b'", "'-'"},
+        })
+
+    def test_optionals(self) -> None:
+        grammar = """
+            start: expr NEWLINE
+            expr: ['a'] ['b'] 'c'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "expr": {"'c'", "'a'", "'b'"},
+            "start": {"'c'", "'a'", "'b'"},
+        })
+
+    def test_repeat_with_separator(self) -> None:
+        grammar = """
+        start: ','.thing+ NEWLINE
+        thing: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"thing": {"NUMBER"}, "start": {"NUMBER"}})
+
+    def test_optional_operator(self) -> None:
+        grammar = """
+        start: sum NEWLINE
+        sum: (term)? 'b'
+        term: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "term": {"NUMBER"},
+            "sum": {"NUMBER", "'b'"},
+            "start": {"'b'", "NUMBER"},
+        })
+
+    def test_optional_literal(self) -> None:
+        grammar = """
+        start: sum NEWLINE
+        sum: '+' ? term
+        term: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "term": {"NUMBER"},
+            "sum": {"'+'", "NUMBER"},
+            "start": {"'+'", "NUMBER"},
+        })
+
+    def test_optional_after(self) -> None:
+        grammar = """
+        start: term NEWLINE
+        term: NUMBER ['+']
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"term": {"NUMBER"}, "start": {"NUMBER"}})
+
+    def test_optional_before(self) -> None:
+        grammar = """
+        start: term NEWLINE
+        term: ['+'] NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"term": {"NUMBER", "'+'"}, "start": {"NUMBER", "'+'"}})
+
+    def test_repeat_0(self) -> None:
+        grammar = """
+        start: thing* "+" NEWLINE
+        thing: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"thing": {"NUMBER"}, "start": {'"+"', "NUMBER"}})
+
+    def test_repeat_0_with_group(self) -> None:
+        grammar = """
+        start: ('+' '-')* term NEWLINE
+        term: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"term": {"NUMBER"}, "start": {"'+'", "NUMBER"}})
+
+    def test_repeat_1(self) -> None:
+        grammar = """
+        start: thing+ '-' NEWLINE
+        thing: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"thing": {"NUMBER"}, "start": {"NUMBER"}})
+
+    def test_repeat_1_with_group(self) -> None:
+        grammar = """
+        start: ('+' term)+ term NEWLINE
+        term: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"term": {"NUMBER"}, "start": {"'+'"}})
+
+    def test_gather(self) -> None:
+        grammar = """
+        start: ','.thing+ NEWLINE
+        thing: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"thing": {"NUMBER"}, "start": {"NUMBER"}})
+
+    def test_positive_lookahead(self) -> None:
+        grammar = """
+        start: expr NEWLINE
+        expr: &'a' opt
+        opt: 'a' | 'b' | 'c'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "expr": {"'a'"},
+            "start": {"'a'"},
+            "opt": {"'b'", "'c'", "'a'"},
+        })
+
+    def test_negative_lookahead(self) -> None:
+        grammar = """
+        start: expr NEWLINE
+        expr: !'a' opt
+        opt: 'a' | 'b' | 'c'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "opt": {"'b'", "'a'", "'c'"},
+            "expr": {"'b'", "'c'"},
+            "start": {"'b'", "'c'"},
+        })
+
+    def test_left_recursion(self) -> None:
+        grammar = """
+        start: expr NEWLINE
+        expr: ('-' term | expr '+' term | term)
+        term: NUMBER
+        foo: 'foo'
+        bar: 'bar'
+        baz: 'baz'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "expr": {"NUMBER", "'-'"},
+            "term": {"NUMBER"},
+            "start": {"NUMBER", "'-'"},
+            "foo": {"'foo'"},
+            "bar": {"'bar'"},
+            "baz": {"'baz'"},
+        })
+
+    def test_advance_left_recursion(self) -> None:
+        grammar = """
+        start: NUMBER | sign start
+        sign: ['-']
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"sign": {"'-'", ""}, "start": {"'-'", "NUMBER"}})
+
+    def test_mutual_left_recursion(self) -> None:
+        grammar = """
+        start: foo 'E'
+        foo: bar 'A' | 'B'
+        bar: foo 'C' | 'D'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "foo": {"'D'", "'B'"},
+            "bar": {"'D'"},
+            "start": {"'D'", "'B'"},
+        })
+
+    def test_nasty_left_recursion(self) -> None:
+        # TODO: Validate this
+        grammar = """
+        start: target '='
+        target: maybe '+' | NAME
+        maybe: maybe '-' | target
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"maybe": set(), "target": {"NAME"}, "start": {"NAME"}})
+
+    def test_nullable_rule(self) -> None:
+        grammar = """
+        start: sign thing $
+        sign: ['-']
+        thing: NUMBER
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "sign": {"", "'-'"},
+            "thing": {"NUMBER"},
+            "start": {"NUMBER", "'-'"},
+        })
+
+    def test_epsilon_production_in_start_rule(self) -> None:
+        grammar = """
+        start: ['-'] $
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {"start": {"ENDMARKER", "'-'"}})
+
+    def test_multiple_nullable_rules(self) -> None:
+        grammar = """
+        start: sign thing other another $
+        sign: ['-']
+        thing: ['+']
+        other: '*'
+        another: '/'
+        """
+        self.assertEqual(self.calculate_first_sets(grammar), {
+            "sign": {"", "'-'"},
+            "thing": {"'+'", ""},
+            "start": {"'+'", "'-'", "'*'"},
+            "other": {"'*'"},
+            "another": {"'/'"},
+        })
diff --git a/Lib/test/test_peg_generator/test_pegen.py b/Lib/test/test_peg_generator/test_pegen.py
new file mode 100644
index 0000000..bcfee3f
--- /dev/null
+++ b/Lib/test/test_peg_generator/test_pegen.py
@@ -0,0 +1,774 @@
+import io
+import textwrap
+import unittest
+
+from test import test_tools
+from typing import Dict, Any
+from tokenize import TokenInfo, NAME, NEWLINE, NUMBER, OP
+
+test_tools.skip_if_missing('peg_generator')
+with test_tools.imports_under_tool('peg_generator'):
+    from pegen.grammar_parser import GeneratedParser as GrammarParser
+    from pegen.testutil import (
+        parse_string,
+        generate_parser,
+        make_parser
+    )
+    from pegen.grammar import GrammarVisitor, GrammarError, Grammar
+    from pegen.grammar_visualizer import ASTGrammarPrinter
+    from pegen.parser import Parser
+    from pegen.python_generator import PythonParserGenerator
+
+
+class TestPegen(unittest.TestCase):
+    def test_parse_grammar(self) -> None:
+        grammar_source = """
+        start: sum NEWLINE
+        sum: t1=term '+' t2=term { action } | term
+        term: NUMBER
+        """
+        expected = """
+        start: sum NEWLINE
+        sum: term '+' term | term
+        term: NUMBER
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        rules = grammar.rules
+        self.assertEqual(str(grammar), textwrap.dedent(expected).strip())
+        # Check the str() and repr() of a few rules; AST nodes don't support ==.
+        self.assertEqual(str(rules["start"]), "start: sum NEWLINE")
+        self.assertEqual(str(rules["sum"]), "sum: term '+' term | term")
+        expected_repr = "Rule('term', None, Rhs([Alt([NamedItem(None, NameLeaf('NUMBER'))])]))"
+        self.assertEqual(repr(rules["term"]), expected_repr)
+
+    def test_long_rule_str(self) -> None:
+        grammar_source = """
+        start: zero | one | one zero | one one | one zero zero | one zero one | one one zero | one one one
+        """
+        expected = """
+        start:
+            | zero
+            | one
+            | one zero
+            | one one
+            | one zero zero
+            | one zero one
+            | one one zero
+            | one one one
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        self.assertEqual(str(grammar.rules["start"]), textwrap.dedent(expected).strip())
+
+    def test_typed_rules(self) -> None:
+        grammar = """
+        start[int]: sum NEWLINE
+        sum[int]: t1=term '+' t2=term { action } | term
+        term[int]: NUMBER
+        """
+        rules = parse_string(grammar, GrammarParser).rules
+        # Check the str() and repr() of a few rules; AST nodes don't support ==.
+        self.assertEqual(str(rules["start"]), "start: sum NEWLINE")
+        self.assertEqual(str(rules["sum"]), "sum: term '+' term | term")
+        self.assertEqual(
+            repr(rules["term"]),
+            "Rule('term', 'int', Rhs([Alt([NamedItem(None, NameLeaf('NUMBER'))])]))"
+        )
+
+    def test_gather(self) -> None:
+        grammar = """
+        start: ','.thing+ NEWLINE
+        thing: NUMBER
+        """
+        rules = parse_string(grammar, GrammarParser).rules
+        self.assertEqual(str(rules["start"]), "start: ','.thing+ NEWLINE")
+        self.assertTrue(repr(rules["start"]).startswith(
+            "Rule('start', None, Rhs([Alt([NamedItem(None, Gather(StringLeaf(\"','\"), NameLeaf('thing'"
+        ))
+        self.assertEqual(str(rules["thing"]), "thing: NUMBER")
+        parser_class = make_parser(grammar)
+        node = parse_string("42\n", parser_class)
+        assert node == [
+            [[TokenInfo(NUMBER, string="42", start=(1, 0), end=(1, 2), line="42\n")]],
+            TokenInfo(NEWLINE, string="\n", start=(1, 2), end=(1, 3), line="42\n"),
+        ]
+        node = parse_string("1, 2\n", parser_class)
+        assert node == [
+            [
+                [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1, 2\n")],
+                [TokenInfo(NUMBER, string="2", start=(1, 3), end=(1, 4), line="1, 2\n")],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 4), end=(1, 5), line="1, 2\n"),
+        ]
+
+    def test_expr_grammar(self) -> None:
+        grammar = """
+        start: sum NEWLINE
+        sum: term '+' term | term
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("42\n", parser_class)
+        self.assertEqual(node, [
+            [[TokenInfo(NUMBER, string="42", start=(1, 0), end=(1, 2), line="42\n")]],
+            TokenInfo(NEWLINE, string="\n", start=(1, 2), end=(1, 3), line="42\n"),
+        ])
+
+    def test_optional_operator(self) -> None:
+        grammar = """
+        start: sum NEWLINE
+        sum: term ('+' term)?
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1+2\n", parser_class)
+        self.assertEqual(node, [
+            [
+                [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1+2\n")],
+                [
+                    TokenInfo(OP, string="+", start=(1, 1), end=(1, 2), line="1+2\n"),
+                    [TokenInfo(NUMBER, string="2", start=(1, 2), end=(1, 3), line="1+2\n")],
+                ],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 3), end=(1, 4), line="1+2\n"),
+        ])
+        node = parse_string("1\n", parser_class)
+        self.assertEqual(node, [
+            [[TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1\n")], None],
+            TokenInfo(NEWLINE, string="\n", start=(1, 1), end=(1, 2), line="1\n"),
+        ])
+
+    def test_optional_literal(self) -> None:
+        grammar = """
+        start: sum NEWLINE
+        sum: term '+' ?
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1+\n", parser_class)
+        self.assertEqual(node, [
+            [
+                [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1+\n")],
+                TokenInfo(OP, string="+", start=(1, 1), end=(1, 2), line="1+\n"),
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 2), end=(1, 3), line="1+\n"),
+        ])
+        node = parse_string("1\n", parser_class)
+        self.assertEqual(node, [
+            [[TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1\n")], None],
+            TokenInfo(NEWLINE, string="\n", start=(1, 1), end=(1, 2), line="1\n"),
+        ])
+
+    def test_alt_optional_operator(self) -> None:
+        grammar = """
+        start: sum NEWLINE
+        sum: term ['+' term]
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1 + 2\n", parser_class)
+        self.assertEqual(node, [
+            [
+                [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1 + 2\n")],
+                [
+                    TokenInfo(OP, string="+", start=(1, 2), end=(1, 3), line="1 + 2\n"),
+                    [TokenInfo(NUMBER, string="2", start=(1, 4), end=(1, 5), line="1 + 2\n")],
+                ],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 5), end=(1, 6), line="1 + 2\n"),
+        ])
+        node = parse_string("1\n", parser_class)
+        self.assertEqual(node, [
+            [[TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1\n")], None],
+            TokenInfo(NEWLINE, string="\n", start=(1, 1), end=(1, 2), line="1\n"),
+        ])
+
+    def test_repeat_0_simple(self) -> None:
+        grammar = """
+        start: thing thing* NEWLINE
+        thing: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1 2 3\n", parser_class)
+        self.assertEqual(node, [
+            [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1 2 3\n")],
+            [
+                [[TokenInfo(NUMBER, string="2", start=(1, 2), end=(1, 3), line="1 2 3\n")]],
+                [[TokenInfo(NUMBER, string="3", start=(1, 4), end=(1, 5), line="1 2 3\n")]],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 5), end=(1, 6), line="1 2 3\n"),
+        ])
+        node = parse_string("1\n", parser_class)
+        self.assertEqual(node, [
+            [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1\n")],
+            [],
+            TokenInfo(NEWLINE, string="\n", start=(1, 1), end=(1, 2), line="1\n"),
+        ])
+
+    def test_repeat_0_complex(self) -> None:
+        grammar = """
+        start: term ('+' term)* NEWLINE
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1 + 2 + 3\n", parser_class)
+        self.assertEqual(node, [
+            [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1 + 2 + 3\n")],
+            [
+                [
+                    [
+                        TokenInfo(OP, string="+", start=(1, 2), end=(1, 3), line="1 + 2 + 3\n"),
+                        [TokenInfo(NUMBER, string="2", start=(1, 4), end=(1, 5), line="1 + 2 + 3\n")],
+                    ]
+                ],
+                [
+                    [
+                        TokenInfo(OP, string="+", start=(1, 6), end=(1, 7), line="1 + 2 + 3\n"),
+                        [TokenInfo(NUMBER, string="3", start=(1, 8), end=(1, 9), line="1 + 2 + 3\n")],
+                    ]
+                ],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 9), end=(1, 10), line="1 + 2 + 3\n"),
+        ])
+
+    def test_repeat_1_simple(self) -> None:
+        grammar = """
+        start: thing thing+ NEWLINE
+        thing: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1 2 3\n", parser_class)
+        self.assertEqual(node, [
+            [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1 2 3\n")],
+            [
+                [[TokenInfo(NUMBER, string="2", start=(1, 2), end=(1, 3), line="1 2 3\n")]],
+                [[TokenInfo(NUMBER, string="3", start=(1, 4), end=(1, 5), line="1 2 3\n")]],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 5), end=(1, 6), line="1 2 3\n"),
+        ])
+        with self.assertRaises(SyntaxError):
+            parse_string("1\n", parser_class)
+
+    def test_repeat_1_complex(self) -> None:
+        grammar = """
+        start: term ('+' term)+ NEWLINE
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1 + 2 + 3\n", parser_class)
+        self.assertEqual(node, [
+            [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1 + 2 + 3\n")],
+            [
+                [
+                    [
+                        TokenInfo(OP, string="+", start=(1, 2), end=(1, 3), line="1 + 2 + 3\n"),
+                        [TokenInfo(NUMBER, string="2", start=(1, 4), end=(1, 5), line="1 + 2 + 3\n")],
+                    ]
+                ],
+                [
+                    [
+                        TokenInfo(OP, string="+", start=(1, 6), end=(1, 7), line="1 + 2 + 3\n"),
+                        [TokenInfo(NUMBER, string="3", start=(1, 8), end=(1, 9), line="1 + 2 + 3\n")],
+                    ]
+                ],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 9), end=(1, 10), line="1 + 2 + 3\n"),
+        ])
+        with self.assertRaises(SyntaxError):
+            parse_string("1\n", parser_class)
+
+    def test_repeat_with_sep_simple(self) -> None:
+        grammar = """
+        start: ','.thing+ NEWLINE
+        thing: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("1, 2, 3\n", parser_class)
+        self.assertEqual(node, [
+            [
+                [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1, 2, 3\n")],
+                [TokenInfo(NUMBER, string="2", start=(1, 3), end=(1, 4), line="1, 2, 3\n")],
+                [TokenInfo(NUMBER, string="3", start=(1, 6), end=(1, 7), line="1, 2, 3\n")],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 7), end=(1, 8), line="1, 2, 3\n"),
+        ])
+
+    def test_left_recursive(self) -> None:
+        grammar_source = """
+        start: expr NEWLINE
+        expr: ('-' term | expr '+' term | term)
+        term: NUMBER
+        foo: NAME+
+        bar: NAME*
+        baz: NAME?
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        parser_class = generate_parser(grammar)
+        rules = grammar.rules
+        self.assertFalse(rules["start"].left_recursive)
+        self.assertTrue(rules["expr"].left_recursive)
+        self.assertFalse(rules["term"].left_recursive)
+        self.assertFalse(rules["foo"].left_recursive)
+        self.assertFalse(rules["bar"].left_recursive)
+        self.assertFalse(rules["baz"].left_recursive)
+        node = parse_string("1 + 2 + 3\n", parser_class)
+        self.assertEqual(node, [
+            [
+                [
+                    [[TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1 + 2 + 3\n")]],
+                    TokenInfo(OP, string="+", start=(1, 2), end=(1, 3), line="1 + 2 + 3\n"),
+                    [TokenInfo(NUMBER, string="2", start=(1, 4), end=(1, 5), line="1 + 2 + 3\n")],
+                ],
+                TokenInfo(OP, string="+", start=(1, 6), end=(1, 7), line="1 + 2 + 3\n"),
+                [TokenInfo(NUMBER, string="3", start=(1, 8), end=(1, 9), line="1 + 2 + 3\n")],
+            ],
+            TokenInfo(NEWLINE, string="\n", start=(1, 9), end=(1, 10), line="1 + 2 + 3\n"),
+        ])
+
+    def test_python_expr(self) -> None:
+        grammar = """
+        start: expr NEWLINE? $ { ast.Expression(expr, lineno=1, col_offset=0) }
+        expr: ( expr '+' term { ast.BinOp(expr, ast.Add(), term, lineno=expr.lineno, col_offset=expr.col_offset, end_lineno=term.end_lineno, end_col_offset=term.end_col_offset) }
+            | expr '-' term { ast.BinOp(expr, ast.Sub(), term, lineno=expr.lineno, col_offset=expr.col_offset, end_lineno=term.end_lineno, end_col_offset=term.end_col_offset) }
+            | term { term }
+            )
+        term: ( l=term '*' r=factor { ast.BinOp(l, ast.Mult(), r, lineno=l.lineno, col_offset=l.col_offset, end_lineno=r.end_lineno, end_col_offset=r.end_col_offset) }
+            | l=term '/' r=factor { ast.BinOp(l, ast.Div(), r, lineno=l.lineno, col_offset=l.col_offset, end_lineno=r.end_lineno, end_col_offset=r.end_col_offset) }
+            | factor { factor }
+            )
+        factor: ( '(' expr ')' { expr }
+                | atom { atom }
+                )
+        atom: ( n=NAME { ast.Name(id=n.string, ctx=ast.Load(), lineno=n.start[0], col_offset=n.start[1], end_lineno=n.end[0], end_col_offset=n.end[1]) }
+            | n=NUMBER { ast.Constant(value=ast.literal_eval(n.string), lineno=n.start[0], col_offset=n.start[1], end_lineno=n.end[0], end_col_offset=n.end[1]) }
+            )
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("(1 + 2*3 + 5)/(6 - 2)\n", parser_class)
+        code = compile(node, "", "eval")
+        val = eval(code)
+        self.assertEqual(val, 3.0)
+
+    def test_nullable(self) -> None:
+        grammar_source = """
+        start: sign NUMBER
+        sign: ['-' | '+']
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        out = io.StringIO()
+        genr = PythonParserGenerator(grammar, out)
+        rules = grammar.rules
+        self.assertFalse(rules["start"].nullable)  # Not None!
+        self.assertTrue(rules["sign"].nullable)
+
+    def test_advanced_left_recursive(self) -> None:
+        grammar_source = """
+        start: NUMBER | sign start
+        sign: ['-']
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        out = io.StringIO()
+        genr = PythonParserGenerator(grammar, out)
+        rules = grammar.rules
+        self.assertFalse(rules["start"].nullable)  # Not None!
+        self.assertTrue(rules["sign"].nullable)
+        self.assertTrue(rules["start"].left_recursive)
+        self.assertFalse(rules["sign"].left_recursive)
+
+    def test_mutually_left_recursive(self) -> None:
+        grammar_source = """
+        start: foo 'E'
+        foo: bar 'A' | 'B'
+        bar: foo 'C' | 'D'
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        out = io.StringIO()
+        genr = PythonParserGenerator(grammar, out)
+        rules = grammar.rules
+        self.assertFalse(rules["start"].left_recursive)
+        self.assertTrue(rules["foo"].left_recursive)
+        self.assertTrue(rules["bar"].left_recursive)
+        genr.generate("<string>")
+        ns: Dict[str, Any] = {}
+        exec(out.getvalue(), ns)
+        parser_class: Type[Parser] = ns["GeneratedParser"]
+        node = parse_string("D A C A E", parser_class)
+        self.assertEqual(node, [
+            [
+                [
+                    [
+                        [TokenInfo(type=NAME, string="D", start=(1, 0), end=(1, 1), line="D A C A E")],
+                        TokenInfo(type=NAME, string="A", start=(1, 2), end=(1, 3), line="D A C A E"),
+                    ],
+                    TokenInfo(type=NAME, string="C", start=(1, 4), end=(1, 5), line="D A C A E"),
+                ],
+                TokenInfo(type=NAME, string="A", start=(1, 6), end=(1, 7), line="D A C A E"),
+            ],
+            TokenInfo(type=NAME, string="E", start=(1, 8), end=(1, 9), line="D A C A E"),
+        ])
+        node = parse_string("B C A E", parser_class)
+        self.assertIsNotNone(node)
+        self.assertEqual(node, [
+            [
+                [
+                    [TokenInfo(type=NAME, string="B", start=(1, 0), end=(1, 1), line="B C A E")],
+                    TokenInfo(type=NAME, string="C", start=(1, 2), end=(1, 3), line="B C A E"),
+                ],
+                TokenInfo(type=NAME, string="A", start=(1, 4), end=(1, 5), line="B C A E"),
+            ],
+            TokenInfo(type=NAME, string="E", start=(1, 6), end=(1, 7), line="B C A E"),
+        ])
+
+    def test_nasty_mutually_left_recursive(self) -> None:
+        # This grammar does not recognize 'x - + =', much to my chagrin.
+        # But that's the way PEG works.
+        # [Breathlessly]
+        # The problem is that the toplevel target call
+        # recurses into maybe, which recognizes 'x - +',
+        # and then the toplevel target looks for another '+',
+        # which fails, so it retreats to NAME,
+        # which succeeds, so we end up just recognizing 'x',
+        # and then start fails because there's no '=' after that.
+        grammar_source = """
+        start: target '='
+        target: maybe '+' | NAME
+        maybe: maybe '-' | target
+        """
+        grammar: Grammar = parse_string(grammar_source, GrammarParser)
+        out = io.StringIO()
+        genr = PythonParserGenerator(grammar, out)
+        genr.generate("<string>")
+        ns: Dict[str, Any] = {}
+        exec(out.getvalue(), ns)
+        parser_class = ns["GeneratedParser"]
+        with self.assertRaises(SyntaxError):
+            parse_string("x - + =", parser_class)
+
+    def test_lookahead(self) -> None:
+        grammar = """
+        start: (expr_stmt | assign_stmt) &'.'
+        expr_stmt: !(target '=') expr
+        assign_stmt: target '=' expr
+        expr: term ('+' term)*
+        target: NAME
+        term: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("foo = 12 + 12 .", parser_class)
+        self.assertEqual(node, [
+            [
+                [
+                    [TokenInfo(NAME, string="foo", start=(1, 0), end=(1, 3), line="foo = 12 + 12 .")],
+                    TokenInfo(OP, string="=", start=(1, 4), end=(1, 5), line="foo = 12 + 12 ."),
+                    [
+                        [
+                            TokenInfo(
+                                NUMBER, string="12", start=(1, 6), end=(1, 8), line="foo = 12 + 12 ."
+                            )
+                        ],
+                        [
+                            [
+                                [
+                                    TokenInfo(
+                                        OP,
+                                        string="+",
+                                        start=(1, 9),
+                                        end=(1, 10),
+                                        line="foo = 12 + 12 .",
+                                    ),
+                                    [
+                                        TokenInfo(
+                                            NUMBER,
+                                            string="12",
+                                            start=(1, 11),
+                                            end=(1, 13),
+                                            line="foo = 12 + 12 .",
+                                        )
+                                    ],
+                                ]
+                            ]
+                        ],
+                    ],
+                ]
+            ]
+        ])
+
+    def test_named_lookahead_error(self) -> None:
+        grammar = """
+        start: foo=!'x' NAME
+        """
+        with self.assertRaises(SyntaxError):
+            make_parser(grammar)
+
+    def test_start_leader(self) -> None:
+        grammar = """
+        start: attr | NAME
+        attr: start '.' NAME
+        """
+        # Would assert False without a special case in compute_left_recursives().
+        make_parser(grammar)
+
+    def test_opt_sequence(self) -> None:
+        grammar = """
+        start: [NAME*]
+        """
+        # This case was failing because of a double trailing comma at the end
+        # of a line in the generated source. See bpo-41044
+        make_parser(grammar)
+
+    def test_left_recursion_too_complex(self) -> None:
+        grammar = """
+        start: foo
+        foo: bar '+' | baz '+' | '+'
+        bar: baz '-' | foo '-' | '-'
+        baz: foo '*' | bar '*' | '*'
+        """
+        with self.assertRaises(ValueError) as errinfo:
+            make_parser(grammar)
+            self.assertTrue("no leader" in str(errinfo.exception.value))
+
+    def test_cut(self) -> None:
+        grammar = """
+        start: '(' ~ expr ')'
+        expr: NUMBER
+        """
+        parser_class = make_parser(grammar)
+        node = parse_string("(1)", parser_class)
+        self.assertEqual(node, [
+            TokenInfo(OP, string="(", start=(1, 0), end=(1, 1), line="(1)"),
+            [TokenInfo(NUMBER, string="1", start=(1, 1), end=(1, 2), line="(1)")],
+            TokenInfo(OP, string=")", start=(1, 2), end=(1, 3), line="(1)"),
+        ])
+
+    def test_dangling_reference(self) -> None:
+        grammar = """
+        start: foo ENDMARKER
+        foo: bar NAME
+        """
+        with self.assertRaises(GrammarError):
+            parser_class = make_parser(grammar)
+
+    def test_bad_token_reference(self) -> None:
+        grammar = """
+        start: foo
+        foo: NAMEE
+        """
+        with self.assertRaises(GrammarError):
+            parser_class = make_parser(grammar)
+
+    def test_missing_start(self) -> None:
+        grammar = """
+        foo: NAME
+        """
+        with self.assertRaises(GrammarError):
+            parser_class = make_parser(grammar)
+
+    def test_invalid_rule_name(self) -> None:
+        grammar = """
+        start: _a b
+        _a: 'a'
+        b: 'b'
+        """
+        with self.assertRaisesRegex(GrammarError, "cannot start with underscore: '_a'"):
+            parser_class = make_parser(grammar)
+
+    def test_invalid_variable_name(self) -> None:
+        grammar = """
+        start: a b
+        a: _x='a'
+        b: 'b'
+        """
+        with self.assertRaisesRegex(GrammarError, "cannot start with underscore: '_x'"):
+            parser_class = make_parser(grammar)
+
+    def test_invalid_variable_name_in_temporal_rule(self) -> None:
+        grammar = """
+        start: a b
+        a: (_x='a' | 'b') | 'c'
+        b: 'b'
+        """
+        with self.assertRaisesRegex(GrammarError, "cannot start with underscore: '_x'"):
+            parser_class = make_parser(grammar)
+
+
+class TestGrammarVisitor:
+    class Visitor(GrammarVisitor):
+        def __init__(self) -> None:
+            self.n_nodes = 0
+
+        def visit(self, node: Any, *args: Any, **kwargs: Any) -> None:
+            self.n_nodes += 1
+            super().visit(node, *args, **kwargs)
+
+    def test_parse_trivial_grammar(self) -> None:
+        grammar = """
+        start: 'a'
+        """
+        rules = parse_string(grammar, GrammarParser)
+        visitor = self.Visitor()
+
+        visitor.visit(rules)
+
+        self.assertEqual(visitor.n_nodes, 6)
+
+    def test_parse_or_grammar(self) -> None:
+        grammar = """
+        start: rule
+        rule: 'a' | 'b'
+        """
+        rules = parse_string(grammar, GrammarParser)
+        visitor = self.Visitor()
+
+        visitor.visit(rules)
+
+        # Grammar/Rule/Rhs/Alt/NamedItem/NameLeaf   -> 6
+        #         Rule/Rhs/                         -> 2
+        #                  Alt/NamedItem/StringLeaf -> 3
+        #                  Alt/NamedItem/StringLeaf -> 3
+
+        self.assertEqual(visitor.n_nodes, 14)
+
+    def test_parse_repeat1_grammar(self) -> None:
+        grammar = """
+        start: 'a'+
+        """
+        rules = parse_string(grammar, GrammarParser)
+        visitor = self.Visitor()
+
+        visitor.visit(rules)
+
+        # Grammar/Rule/Rhs/Alt/NamedItem/Repeat1/StringLeaf -> 6
+        self.assertEqual(visitor.n_nodes, 7)
+
+    def test_parse_repeat0_grammar(self) -> None:
+        grammar = """
+        start: 'a'*
+        """
+        rules = parse_string(grammar, GrammarParser)
+        visitor = self.Visitor()
+
+        visitor.visit(rules)
+
+        # Grammar/Rule/Rhs/Alt/NamedItem/Repeat0/StringLeaf -> 6
+
+        self.assertEqual(visitor.n_nodes, 7)
+
+    def test_parse_optional_grammar(self) -> None:
+        grammar = """
+        start: 'a' ['b']
+        """
+        rules = parse_string(grammar, GrammarParser)
+        visitor = self.Visitor()
+
+        visitor.visit(rules)
+
+        # Grammar/Rule/Rhs/Alt/NamedItem/StringLeaf                       -> 6
+        #                      NamedItem/Opt/Rhs/Alt/NamedItem/Stringleaf -> 6
+
+        self.assertEqual(visitor.n_nodes, 12)
+
+
+class TestGrammarVisualizer(unittest.TestCase):
+    def test_simple_rule(self) -> None:
+        grammar = """
+        start: 'a' 'b'
+        """
+        rules = parse_string(grammar, GrammarParser)
+
+        printer = ASTGrammarPrinter()
+        lines: List[str] = []
+        printer.print_grammar_ast(rules, printer=lines.append)
+
+        output = "\n".join(lines)
+        expected_output = textwrap.dedent(
+            """\
+        └──Rule
+           └──Rhs
+              └──Alt
+                 ├──NamedItem
+                 │  └──StringLeaf("'a'")
+                 └──NamedItem
+                    └──StringLeaf("'b'")
+        """
+        )
+
+        self.assertEqual(output, expected_output)
+
+    def test_multiple_rules(self) -> None:
+        grammar = """
+        start: a b
+        a: 'a'
+        b: 'b'
+        """
+        rules = parse_string(grammar, GrammarParser)
+
+        printer = ASTGrammarPrinter()
+        lines: List[str] = []
+        printer.print_grammar_ast(rules, printer=lines.append)
+
+        output = "\n".join(lines)
+        expected_output = textwrap.dedent(
+            """\
+        └──Rule
+           └──Rhs
+              └──Alt
+                 ├──NamedItem
+                 │  └──NameLeaf('a')
+                 └──NamedItem
+                    └──NameLeaf('b')
+
+        └──Rule
+           └──Rhs
+              └──Alt
+                 └──NamedItem
+                    └──StringLeaf("'a'")
+
+        └──Rule
+           └──Rhs
+              └──Alt
+                 └──NamedItem
+                    └──StringLeaf("'b'")
+                        """
+        )
+
+        self.assertEqual(output, expected_output)
+
+    def test_deep_nested_rule(self) -> None:
+        grammar = """
+        start: 'a' ['b'['c'['d']]]
+        """
+        rules = parse_string(grammar, GrammarParser)
+
+        printer = ASTGrammarPrinter()
+        lines: List[str] = []
+        printer.print_grammar_ast(rules, printer=lines.append)
+
+        output = "\n".join(lines)
+        expected_output = textwrap.dedent(
+            """\
+        └──Rule
+           └──Rhs
+              └──Alt
+                 ├──NamedItem
+                 │  └──StringLeaf("'a'")
+                 └──NamedItem
+                    └──Opt
+                       └──Rhs
+                          └──Alt
+                             ├──NamedItem
+                             │  └──StringLeaf("'b'")
+                             └──NamedItem
+                                └──Opt
+                                   └──Rhs
+                                      └──Alt
+                                         ├──NamedItem
+                                         │  └──StringLeaf("'c'")
+                                         └──NamedItem
+                                            └──Opt
+                                               └──Rhs
+                                                  └──Alt
+                                                     └──NamedItem
+                                                        └──StringLeaf("'d'")
+                                """
+        )
+
+        self.assertEqual(output, expected_output)
diff --git a/Lib/test/test_peg_parser.py b/Lib/test/test_peg_parser.py
new file mode 100644
index 0000000..f4aaef8
--- /dev/null
+++ b/Lib/test/test_peg_parser.py
@@ -0,0 +1,803 @@
+import ast
+import _peg_parser as peg_parser
+import unittest
+from typing import Any, Union, Iterable, Tuple
+from textwrap import dedent
+from test import support
+
+
+TEST_CASES = [
+    ('annotated_assignment', 'x: int = 42'),
+    ('annotated_assignment_with_tuple', 'x: tuple = 1, 2'),
+    ('annotated_assignment_with_parens', '(paren): int = 3+2'),
+    ('annotated_assignment_with_yield', 'x: int = yield 42'),
+    ('annotated_no_assignment', 'x: int'),
+    ('annotation_with_multiple_parens', '((parens)): int'),
+    ('annotation_with_parens', '(parens): int'),
+    ('annotated_assignment_with_attr', 'a.b: int'),
+    ('annotated_assignment_with_subscript', 'a[b]: int'),
+    ('annotated_assignment_with_attr_and_parens', '(a.b): int'),
+    ('annotated_assignment_with_subscript_and_parens', '(a[b]): int'),
+    ('assert', 'assert a'),
+    ('assert_message', 'assert a, b'),
+    ('assignment_false', 'a = False'),
+    ('assignment_none', 'a = None'),
+    ('assignment_true', 'a = True'),
+    ('assignment_paren', '(a) = 42'),
+    ('assignment_paren_multiple', '(a, b) = (0, 1)'),
+    ('asyncfor',
+     '''
+        async for i in a:
+            pass
+     '''),
+    ('attribute_call', 'a.b()'),
+    ('attribute_multiple_names', 'abcd.efg.hij'),
+    ('attribute_simple', 'a.b'),
+    ('attributes_subscript', 'a.b[0]'),
+    ('augmented_assignment', 'x += 42'),
+    ('augmented_assignment_attribute', 'a.b.c += 42'),
+    ('augmented_assignment_paren', '(x) += 42'),
+    ('augmented_assignment_paren_subscript', '(x[0]) -= 42'),
+    ('binop_add', '1 + 1'),
+    ('binop_add_multiple', '1 + 1 + 1 + 1'),
+    ('binop_all', '1 + 2 * 5 + 3 ** 2 - -3'),
+    ('binop_boolop_comp', '1 + 1 == 2 or 1 + 1 == 3 and not b'),
+    ('boolop_or', 'a or b'),
+    ('boolop_or_multiple', 'a or b or c'),
+    ('class_def_bases',
+     '''
+        class C(A, B):
+            pass
+     '''),
+    ('class_def_decorators',
+     '''
+        @a
+        class C:
+            pass
+     '''),
+    ('class_def_decorator_with_expression',
+     '''
+        @lambda x: 42
+        class C:
+            pass
+     '''),
+    ('class_def_decorator_with_expression_and_walrus',
+     '''
+        @x:=lambda x: 42
+        class C:
+            pass
+     '''),
+
+    ('class_def_keywords',
+     '''
+        class C(keyword=a+b, **c):
+            pass
+     '''),
+    ('class_def_mixed',
+     '''
+        class C(A, B, keyword=0, **a):
+            pass
+     '''),
+    ('class_def_simple',
+     '''
+        class C:
+            pass
+     '''),
+    ('class_def_starred_and_kwarg',
+     '''
+        class C(A, B, *x, **y):
+            pass
+     '''),
+    ('class_def_starred_in_kwargs',
+     '''
+        class C(A, x=2, *[B, C], y=3):
+            pass
+     '''),
+    ('call_attribute', 'f().b'),
+    ('call_genexp', 'f(i for i in a)'),
+    ('call_mixed_args', 'f(a, b, *c, **d)'),
+    ('call_mixed_args_named', 'f(a, b, *c, d=4, **v)'),
+    ('call_one_arg', 'f(a)'),
+    ('call_posarg_genexp', 'f(a, (i for i in a))'),
+    ('call_simple', 'f()'),
+    ('call_subscript', 'f()[0]'),
+    ('comp', 'a == b'),
+    ('comp_multiple', 'a == b == c'),
+    ('comp_paren_end', 'a == (b-1)'),
+    ('comp_paren_start', '(a-1) == b'),
+    ('decorator',
+     '''
+        @a
+        def f():
+            pass
+     '''),
+    ('decorator_async',
+     '''
+        @a
+        async def d():
+            pass
+     '''),
+    ('decorator_with_expression',
+     '''
+        @lambda x: 42
+        def f():
+            pass
+     '''),
+    ('decorator_with_expression_and_walrus',
+     '''
+        @x:=lambda x: 42
+        def f():
+            pass
+     '''),
+    ('del_attribute', 'del a.b'),
+    ('del_call_attribute', 'del a().c'),
+    ('del_call_genexp_attribute', 'del a(i for i in b).c'),
+    ('del_empty', 'del()'),
+    ('del_list', 'del a, [b, c]'),
+    ('del_mixed', 'del a[0].b().c'),
+    ('del_multiple', 'del a, b'),
+    ('del_multiple_calls_attribute', 'del a()().b'),
+    ('del_paren', 'del(a,b)'),
+    ('del_paren_single_target', 'del(a)'),
+    ('del_subscript_attribute', 'del a[0].b'),
+    ('del_tuple', 'del a, (b, c)'),
+    ('delete', 'del a'),
+    ('dict',
+     '''
+        {
+            a: 1,
+            b: 2,
+            c: 3
+        }
+     '''),
+    ('dict_comp', '{x:1 for x in a}'),
+    ('dict_comp_if', '{x:1+2 for x in a if b}'),
+    ('dict_empty', '{}'),
+    ('empty_line_after_linecont',
+     r'''
+        pass
+        \
+
+        pass
+     '''),
+    ('for',
+     '''
+        for i in a:
+            pass
+     '''),
+    ('for_else',
+     '''
+        for i in a:
+            pass
+        else:
+            pass
+     '''),
+    ('for_star_target_in_paren', 'for (a) in b: pass'),
+    ('for_star_targets_attribute', 'for a.b in c: pass'),
+    ('for_star_targets_call_attribute', 'for a().c in b: pass'),
+    ('for_star_targets_empty', 'for () in a: pass'),
+    ('for_star_targets_mixed', 'for a[0].b().c in d: pass'),
+    ('for_star_targets_mixed_starred',
+     '''
+        for a, *b, (c, d) in e:
+            pass
+     '''),
+    ('for_star_targets_multiple', 'for a, b in c: pass'),
+    ('for_star_targets_nested_starred', 'for *[*a] in b: pass'),
+    ('for_star_targets_starred', 'for *a in b: pass'),
+    ('for_star_targets_subscript_attribute', 'for a[0].b in c: pass'),
+    ('for_star_targets_trailing_comma',
+     '''
+        for a, (b, c), in d:
+            pass
+     '''),
+    ('for_star_targets_tuple', 'for a, (b, c) in d: pass'),
+    ('for_underscore',
+     '''
+        for _ in a:
+            pass
+     '''),
+    ('function_return_type',
+     '''
+        def f() -> Any:
+            pass
+     '''),
+    ('f-string_slice', "f'{x[2]}'"),
+    ('f-string_slice_upper', "f'{x[2:3]}'"),
+    ('f-string_slice_step', "f'{x[2:3:-2]}'"),
+    ('f-string_constant', "f'{42}'"),
+    ('f-string_boolop', "f'{x and y}'"),
+    ('f-string_named_expr', "f'{(x:=42)}'"),
+    ('f-string_binop', "f'{x+y}'"),
+    ('f-string_unaryop', "f'{not x}'"),
+    ('f-string_lambda', "f'{(lambda x, /, y, y2=42 , *z, k1, k2=34, **k3: 42)}'"),
+    ('f-string_lambda_call', "f'{(lambda: 2)(2)}'"),
+    ('f-string_ifexpr', "f'{x if y else z}'"),
+    ('f-string_dict', "f'{ {2:34, 3:34} }'"),
+    ('f-string_set', "f'{ {2,-45} }'"),
+    ('f-string_list', "f'{ [2,-45] }'"),
+    ('f-string_tuple', "f'{ (2,-45) }'"),
+    ('f-string_listcomp', "f'{[x for x in y if z]}'"),
+    ('f-string_setcomp', "f'{ {x for x in y if z} }'"),
+    ('f-string_dictcomp', "f'{ {x:x for x in y if z} }'"),
+    ('f-string_genexpr', "f'{ (x for x in y if z) }'"),
+    ('f-string_yield', "f'{ (yield x) }'"),
+    ('f-string_yieldfrom', "f'{ (yield from x) }'"),
+    ('f-string_await', "f'{ await x }'"),
+    ('f-string_compare', "f'{ x == y }'"),
+    ('f-string_call', "f'{ f(x,y,z) }'"),
+    ('f-string_attribute', "f'{ f.x.y.z }'"),
+    ('f-string_starred', "f'{ *x, }'"),
+    ('f-string_doublestarred', "f'{ {**x} }'"),
+    ('f-string_escape_brace', "f'{{Escape'"),
+    ('f-string_escape_closing_brace', "f'Escape}}'"),
+    ('f-string_repr', "f'{a!r}'"),
+    ('f-string_str', "f'{a!s}'"),
+    ('f-string_ascii', "f'{a!a}'"),
+    ('f-string_debug', "f'{a=}'"),
+    ('f-string_padding', "f'{a:03d}'"),
+    ('f-string_multiline',
+     """
+        f'''
+        {hello}
+        '''
+     """),
+    ('f-string_multiline_in_expr',
+     """
+        f'''
+        {
+        hello
+        }
+        '''
+     """),
+    ('f-string_multiline_in_call',
+     """
+        f'''
+        {f(
+            a, b, c
+        )}
+        '''
+     """),
+    ('global', 'global a, b'),
+    ('group', '(yield a)'),
+    ('if_elif',
+     '''
+        if a:
+            pass
+        elif b:
+            pass
+     '''),
+    ('if_elif_elif',
+     '''
+        if a:
+            pass
+        elif b:
+            pass
+        elif c:
+            pass
+     '''),
+    ('if_elif_else',
+     '''
+        if a:
+            pass
+        elif b:
+            pass
+        else:
+           pass
+     '''),
+    ('if_else',
+     '''
+        if a:
+            pass
+        else:
+            pass
+     '''),
+    ('if_simple', 'if a: pass'),
+    ('import', 'import a'),
+    ('import_alias', 'import a as b'),
+    ('import_dotted', 'import a.b'),
+    ('import_dotted_alias', 'import a.b as c'),
+    ('import_dotted_multichar', 'import ab.cd'),
+    ('import_from', 'from a import b'),
+    ('import_from_alias', 'from a import b as c'),
+    ('import_from_dotted', 'from a.b import c'),
+    ('import_from_dotted_alias', 'from a.b import c as d'),
+    ('import_from_multiple_aliases', 'from a import b as c, d as e'),
+    ('import_from_one_dot', 'from .a import b'),
+    ('import_from_one_dot_alias', 'from .a import b as c'),
+    ('import_from_star', 'from a import *'),
+    ('import_from_three_dots', 'from ...a import b'),
+    ('import_from_trailing_comma', 'from a import (b,)'),
+    ('kwarg',
+     '''
+        def f(**a):
+            pass
+     '''),
+    ('kwonly_args',
+     '''
+        def f(*, a, b):
+            pass
+     '''),
+    ('kwonly_args_with_default',
+     '''
+        def f(*, a=2, b):
+            pass
+     '''),
+    ('lambda_kwarg', 'lambda **a: 42'),
+    ('lambda_kwonly_args', 'lambda *, a, b: 42'),
+    ('lambda_kwonly_args_with_default', 'lambda *, a=2, b: 42'),
+    ('lambda_mixed_args', 'lambda a, /, b, *, c: 42'),
+    ('lambda_mixed_args_with_default', 'lambda a, b=2, /, c=3, *e, f, **g: 42'),
+    ('lambda_no_args', 'lambda: 42'),
+    ('lambda_pos_args', 'lambda a,b: 42'),
+    ('lambda_pos_args_with_default', 'lambda a, b=2: 42'),
+    ('lambda_pos_only_args', 'lambda a, /: 42'),
+    ('lambda_pos_only_args_with_default', 'lambda a=0, /: 42'),
+    ('lambda_pos_posonly_args', 'lambda a, b, /, c, d: 42'),
+    ('lambda_pos_posonly_args_with_default', 'lambda a, b=0, /, c=2: 42'),
+    ('lambda_vararg', 'lambda *a: 42'),
+    ('lambda_vararg_kwonly_args', 'lambda *a, b: 42'),
+    ('list', '[1, 2, a]'),
+    ('list_comp', '[i for i in a]'),
+    ('list_comp_if', '[i for i in a if b]'),
+    ('list_trailing_comma', '[1+2, a, 3+4,]'),
+    ('mixed_args',
+     '''
+        def f(a, /, b, *, c):
+            pass
+     '''),
+    ('mixed_args_with_default',
+     '''
+        def f(a, b=2, /, c=3, *e, f, **g):
+            pass
+     '''),
+    ('multipart_string_bytes', 'b"Hola" b"Hello" b"Bye"'),
+    ('multipart_string_triple', '"""Something here""" "and now"'),
+    ('multipart_string_different_prefixes', 'u"Something" "Other thing" r"last thing"'),
+    ('multiple_assignments', 'x = y = z = 42'),
+    ('multiple_assignments_with_yield', 'x = y = z = yield 42'),
+    ('multiple_pass',
+     '''
+        pass; pass
+        pass
+     '''),
+    ('namedexpr', '(x := [1, 2, 3])'),
+    ('namedexpr_false', '(x := False)'),
+    ('namedexpr_none', '(x := None)'),
+    ('namedexpr_true', '(x := True)'),
+    ('nonlocal', 'nonlocal a, b'),
+    ('number_complex', '-2.234+1j'),
+    ('number_float', '-34.2333'),
+    ('number_imaginary_literal', '1.1234j'),
+    ('number_integer', '-234'),
+    ('number_underscores', '1_234_567'),
+    ('pass', 'pass'),
+    ('pos_args',
+     '''
+        def f(a, b):
+            pass
+     '''),
+    ('pos_args_with_default',
+     '''
+        def f(a, b=2):
+            pass
+     '''),
+    ('pos_only_args',
+     '''
+        def f(a, /):
+            pass
+     '''),
+    ('pos_only_args_with_default',
+     '''
+        def f(a=0, /):
+            pass
+     '''),
+    ('pos_posonly_args',
+     '''
+        def f(a, b, /, c, d):
+            pass
+     '''),
+    ('pos_posonly_args_with_default',
+     '''
+        def f(a, b=0, /, c=2):
+            pass
+     '''),
+    ('primary_mixed', 'a.b.c().d[0]'),
+    ('raise', 'raise'),
+    ('raise_ellipsis', 'raise ...'),
+    ('raise_expr', 'raise a'),
+    ('raise_from', 'raise a from b'),
+    ('return', 'return'),
+    ('return_expr', 'return a'),
+    ('set', '{1, 2+4, 3+5}'),
+    ('set_comp', '{i for i in a}'),
+    ('set_trailing_comma', '{1, 2, 3,}'),
+    ('simple_assignment', 'x = 42'),
+    ('simple_assignment_with_yield', 'x = yield 42'),
+    ('string_bytes', 'b"hello"'),
+    ('string_concatenation_bytes', 'b"hello" b"world"'),
+    ('string_concatenation_simple', '"abcd" "efgh"'),
+    ('string_format_simple', 'f"hello"'),
+    ('string_format_with_formatted_value', 'f"hello {world}"'),
+    ('string_simple', '"hello"'),
+    ('string_unicode', 'u"hello"'),
+    ('subscript_attribute', 'a[0].b'),
+    ('subscript_call', 'a[b]()'),
+    ('subscript_multiple_slices', 'a[0:a:2, 1]'),
+    ('subscript_simple', 'a[0]'),
+    ('subscript_single_element_tuple', 'a[0,]'),
+    ('subscript_trailing_comma', 'a[0, 1, 2,]'),
+    ('subscript_tuple', 'a[0, 1, 2]'),
+    ('subscript_whole_slice', 'a[0+1:b:c]'),
+    ('try_except',
+     '''
+        try:
+            pass
+        except:
+            pass
+     '''),
+    ('try_except_else',
+     '''
+        try:
+            pass
+        except:
+            pass
+        else:
+            pass
+     '''),
+    ('try_except_else_finally',
+     '''
+        try:
+            pass
+        except:
+            pass
+        else:
+            pass
+        finally:
+            pass
+     '''),
+    ('try_except_expr',
+     '''
+        try:
+            pass
+        except a:
+            pass
+     '''),
+    ('try_except_expr_target',
+     '''
+        try:
+            pass
+        except a as b:
+            pass
+     '''),
+    ('try_except_finally',
+     '''
+        try:
+            pass
+        except:
+            pass
+        finally:
+            pass
+     '''),
+    ('try_finally',
+     '''
+        try:
+            pass
+        finally:
+            pass
+     '''),
+    ('unpacking_binop', '[*([1, 2, 3] + [3, 4, 5])]'),
+    ('unpacking_call', '[*b()]'),
+    ('unpacking_compare', '[*(x < y)]'),
+    ('unpacking_constant', '[*3]'),
+    ('unpacking_dict', '[*{1: 2, 3: 4}]'),
+    ('unpacking_dict_comprehension', '[*{x:y for x,y in z}]'),
+    ('unpacking_ifexpr', '[*([1, 2, 3] if x else y)]'),
+    ('unpacking_list', '[*[1,2,3]]'),
+    ('unpacking_list_comprehension', '[*[x for x in y]]'),
+    ('unpacking_namedexpr', '[*(x:=[1, 2, 3])]'),
+    ('unpacking_set', '[*{1,2,3}]'),
+    ('unpacking_set_comprehension', '[*{x for x in y}]'),
+    ('unpacking_string', '[*"myvalue"]'),
+    ('unpacking_tuple', '[*(1,2,3)]'),
+    ('unpacking_unaryop', '[*(not [1, 2, 3])]'),
+    ('unpacking_yield', '[*(yield 42)]'),
+    ('unpacking_yieldfrom', '[*(yield from x)]'),
+    ('tuple', '(1, 2, 3)'),
+    ('vararg',
+     '''
+        def f(*a):
+            pass
+     '''),
+    ('vararg_kwonly_args',
+     '''
+        def f(*a, b):
+            pass
+     '''),
+    ('while',
+     '''
+        while a:
+            pass
+     '''),
+    ('while_else',
+     '''
+        while a:
+            pass
+        else:
+             pass
+    '''),
+    ('with',
+     '''
+        with a:
+            pass
+     '''),
+    ('with_as',
+     '''
+        with a as b:
+            pass
+     '''),
+    ('with_as_paren',
+     '''
+        with a as (b):
+            pass
+     '''),
+    ('with_as_empty', 'with a as (): pass'),
+    ('with_list_recursive',
+     '''
+        with a as [x, [y, z]]:
+            pass
+     '''),
+    ('with_tuple_recursive',
+     '''
+        with a as ((x, y), z):
+            pass
+     '''),
+    ('with_tuple_target',
+     '''
+        with a as (x, y):
+            pass
+     '''),
+    ('with_list_target',
+     '''
+        with a as [x, y]:
+            pass
+     '''),
+    ('yield', 'yield'),
+    ('yield_expr', 'yield a'),
+    ('yield_from', 'yield from a'),
+]
+
+FAIL_TEST_CASES = [
+    ("annotation_multiple_targets", "(a, b): int = 42"),
+    ("annotation_nested_tuple", "((a, b)): int"),
+    ("annotation_list", "[a]: int"),
+    ("annotation_lambda", "lambda: int = 42"),
+    ("annotation_tuple", "(a,): int"),
+    ("annotation_tuple_without_paren", "a,: int"),
+    ("assignment_keyword", "a = if"),
+    ("augmented_assignment_list", "[a, b] += 1"),
+    ("augmented_assignment_tuple", "a, b += 1"),
+    ("augmented_assignment_tuple_paren", "(a, b) += (1, 2)"),
+    ("comprehension_lambda", "(a for a in lambda: b)"),
+    ("comprehension_else", "(a for a in b if c else d"),
+    ("del_call", "del a()"),
+    ("del_call_genexp", "del a(i for i in b)"),
+    ("del_subscript_call", "del a[b]()"),
+    ("del_attribute_call", "del a.b()"),
+    ("del_mixed_call", "del a[0].b().c.d()"),
+    ("for_star_targets_call", "for a() in b: pass"),
+    ("for_star_targets_subscript_call", "for a[b]() in c: pass"),
+    ("for_star_targets_attribute_call", "for a.b() in c: pass"),
+    ("for_star_targets_mixed_call", "for a[0].b().c.d() in e: pass"),
+    ("for_star_targets_in", "for a, in in b: pass"),
+    ("f-string_assignment", "f'{x = 42}'"),
+    ("f-string_empty", "f'{}'"),
+    ("f-string_function_def", "f'{def f(): pass}'"),
+    ("f-string_lambda", "f'{lambda x: 42}'"),
+    ("f-string_singe_brace", "f'{'"),
+    ("f-string_single_closing_brace", "f'}'"),
+    ("from_import_invalid", "from import import a"),
+    ("from_import_trailing_comma", "from a import b,"),
+    ("import_non_ascii_syntax_error", "import ä £"),
+    # This test case checks error paths involving tokens with uninitialized
+    # values of col_offset and end_col_offset.
+    ("invalid indentation",
+     """
+     def f():
+         a
+             a
+     """),
+    ("not_terminated_string", "a = 'example"),
+    ("try_except_attribute_target",
+     """
+     try:
+         pass
+     except Exception as a.b:
+         pass
+     """),
+    ("try_except_subscript_target",
+     """
+     try:
+         pass
+     except Exception as a[0]:
+         pass
+     """),
+]
+
+FAIL_SPECIALIZED_MESSAGE_CASES = [
+    ("f(x, y, z=1, **b, *a", "iterable argument unpacking follows keyword argument unpacking"),
+    ("f(x, y=1, *z, **a, b", "positional argument follows keyword argument unpacking"),
+    ("f(x, y, z=1, a=2, b", "positional argument follows keyword argument"),
+    ("True = 1", "cannot assign to True"),
+    ("a() = 1", "cannot assign to function call"),
+    ("(a, b): int", "only single target (not tuple) can be annotated"),
+    ("[a, b]: int", "only single target (not list) can be annotated"),
+    ("a(): int", "illegal target for annotation"),
+    ("1 += 1", "'literal' is an illegal expression for augmented assignment"),
+    ("pass\n    pass", "unexpected indent"),
+    ("def f():\npass", "expected an indented block"),
+    ("def f(*): pass", "named arguments must follow bare *"),
+    ("def f(*,): pass", "named arguments must follow bare *"),
+    ("def f(*, **a): pass", "named arguments must follow bare *"),
+    ("lambda *: pass", "named arguments must follow bare *"),
+    ("lambda *,: pass", "named arguments must follow bare *"),
+    ("lambda *, **a: pass", "named arguments must follow bare *"),
+    ("f(g()=2", "expression cannot contain assignment, perhaps you meant \"==\"?"),
+    ("f(a, b, *c, d.e=2", "expression cannot contain assignment, perhaps you meant \"==\"?"),
+    ("f(*a, **b, c=0, d[1]=3)", "expression cannot contain assignment, perhaps you meant \"==\"?"),
+]
+
+GOOD_BUT_FAIL_TEST_CASES = [
+    ('string_concatenation_format', 'f"{hello} world" f"again {and_again}"'),
+    ('string_concatenation_multiple',
+     '''
+        f"hello" f"{world} again" f"and_again"
+     '''),
+    ('f-string_multiline_comp',
+     """
+        f'''
+        {(i for i in a
+            if b)}
+        '''
+     """),
+]
+
+FSTRINGS_TRACEBACKS = {
+    'multiline_fstrings_same_line_with_brace': (
+        """
+            f'''
+            {a$b}
+            '''
+        """,
+        '(a$b)\n',
+    ),
+    'multiline_fstring_brace_on_next_line': (
+        """
+            f'''
+            {a$b
+            }'''
+        """,
+        '(a$b\n',
+    ),
+    'multiline_fstring_brace_on_previous_line': (
+        """
+            f'''
+            {
+            a$b}'''
+        """,
+        'a$b)\n',
+    ),
+}
+
+EXPRESSIONS_TEST_CASES = [
+    ("expression_add", "1+1"),
+    ("expression_add_2", "a+b"),
+    ("expression_call", "f(a, b=2, **kw)"),
+    ("expression_tuple", "1, 2, 3"),
+    ("expression_tuple_one_value", "1,")
+]
+
+
+def cleanup_source(source: Any) -> str:
+    if isinstance(source, str):
+        result = dedent(source)
+    elif not isinstance(source, (list, tuple)):
+        result = "\n".join(source)
+    else:
+        raise TypeError(f"Invalid type for test source: {source}")
+    return result
+
+
+def prepare_test_cases(
+    test_cases: Iterable[Tuple[str, Union[str, Iterable[str]]]]
+) -> Tuple[Iterable[str], Iterable[str]]:
+
+    test_ids, _test_sources = zip(*test_cases)
+    test_sources = list(_test_sources)
+    for index, source in enumerate(test_sources):
+        result = cleanup_source(source)
+        test_sources[index] = result
+    return test_ids, test_sources
+
+
+TEST_IDS, TEST_SOURCES = prepare_test_cases(TEST_CASES)
+
+GOOD_BUT_FAIL_TEST_IDS, GOOD_BUT_FAIL_SOURCES = prepare_test_cases(
+    GOOD_BUT_FAIL_TEST_CASES
+)
+
+FAIL_TEST_IDS, FAIL_SOURCES = prepare_test_cases(FAIL_TEST_CASES)
+
+EXPRESSIONS_TEST_IDS, EXPRESSIONS_TEST_SOURCES = prepare_test_cases(
+    EXPRESSIONS_TEST_CASES
+)
+
+
+class ASTGenerationTest(unittest.TestCase):
+    def test_correct_ast_generation_on_source_files(self) -> None:
+        self.maxDiff = None
+        for source in TEST_SOURCES:
+            actual_ast = peg_parser.parse_string(source)
+            expected_ast = peg_parser.parse_string(source, oldparser=True)
+            self.assertEqual(
+                ast.dump(actual_ast, include_attributes=True),
+                ast.dump(expected_ast, include_attributes=True),
+                f"Wrong AST generation for source: {source}",
+            )
+
+    def test_incorrect_ast_generation_on_source_files(self) -> None:
+        for source in FAIL_SOURCES:
+            with self.assertRaises(SyntaxError, msg=f"Parsing {source} did not raise an exception"):
+                peg_parser.parse_string(source)
+
+    def test_incorrect_ast_generation_with_specialized_errors(self) -> None:
+        for source, error_text in FAIL_SPECIALIZED_MESSAGE_CASES:
+            exc = IndentationError if "indent" in error_text else SyntaxError
+            with self.assertRaises(exc) as se:
+                peg_parser.parse_string(source)
+            self.assertTrue(
+                error_text in se.exception.msg,
+                f"Actual error message does not match expexted for {source}"
+            )
+
+    @unittest.expectedFailure
+    def test_correct_but_known_to_fail_ast_generation_on_source_files(self) -> None:
+        for source in GOOD_BUT_FAIL_SOURCES:
+            actual_ast = peg_parser.parse_string(source)
+            expected_ast = peg_parser.parse_string(source, oldparser=True)
+            self.assertEqual(
+                ast.dump(actual_ast, include_attributes=True),
+                ast.dump(expected_ast, include_attributes=True),
+                f"Wrong AST generation for source: {source}",
+            )
+
+    def test_correct_ast_generation_without_pos_info(self) -> None:
+        for source in GOOD_BUT_FAIL_SOURCES:
+            actual_ast = peg_parser.parse_string(source)
+            expected_ast = peg_parser.parse_string(source, oldparser=True)
+            self.assertEqual(
+                ast.dump(actual_ast),
+                ast.dump(expected_ast),
+                f"Wrong AST generation for source: {source}",
+            )
+
+    def test_fstring_parse_error_tracebacks(self) -> None:
+        for source, error_text in FSTRINGS_TRACEBACKS.values():
+            with self.assertRaises(SyntaxError) as se:
+                peg_parser.parse_string(dedent(source))
+            self.assertEqual(error_text, se.exception.text)
+
+    def test_correct_ast_generatrion_eval(self) -> None:
+        for source in EXPRESSIONS_TEST_SOURCES:
+            actual_ast = peg_parser.parse_string(source, mode='eval')
+            expected_ast = peg_parser.parse_string(source, mode='eval', oldparser=True)
+            self.assertEqual(
+                ast.dump(actual_ast, include_attributes=True),
+                ast.dump(expected_ast, include_attributes=True),
+                f"Wrong AST generation for source: {source}",
+            )
+
+    def test_tokenizer_errors_are_propagated(self) -> None:
+        n=201
+        with self.assertRaisesRegex(SyntaxError, "too many nested parentheses"):
+            peg_parser.parse_string(n*'(' + ')'*n)
diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py
index 2887ce6..b162f99 100644
--- a/Lib/test/test_pkgutil.py
+++ b/Lib/test/test_pkgutil.py
@@ -186,6 +186,97 @@
         with self.assertRaises((TypeError, ValueError)):
             list(pkgutil.walk_packages(bytes_input))
 
+    def test_name_resolution(self):
+        import logging
+        import logging.handlers
+
+        success_cases = (
+            ('os', os),
+            ('os.path', os.path),
+            ('os.path:pathsep', os.path.pathsep),
+            ('logging', logging),
+            ('logging:', logging),
+            ('logging.handlers', logging.handlers),
+            ('logging.handlers:', logging.handlers),
+            ('logging.handlers:SysLogHandler', logging.handlers.SysLogHandler),
+            ('logging.handlers.SysLogHandler', logging.handlers.SysLogHandler),
+            ('logging.handlers:SysLogHandler.LOG_ALERT',
+                logging.handlers.SysLogHandler.LOG_ALERT),
+            ('logging.handlers.SysLogHandler.LOG_ALERT',
+                logging.handlers.SysLogHandler.LOG_ALERT),
+            ('builtins.int', int),
+            ('builtins:int', int),
+            ('builtins.int.from_bytes', int.from_bytes),
+            ('builtins:int.from_bytes', int.from_bytes),
+            ('builtins.ZeroDivisionError', ZeroDivisionError),
+            ('builtins:ZeroDivisionError', ZeroDivisionError),
+            ('os:path', os.path),
+        )
+
+        failure_cases = (
+            (None, TypeError),
+            (1, TypeError),
+            (2.0, TypeError),
+            (True, TypeError),
+            ('', ValueError),
+            ('?abc', ValueError),
+            ('abc/foo', ValueError),
+            ('foo', ImportError),
+            ('os.foo', AttributeError),
+            ('os.foo:', ImportError),
+            ('os.pth:pathsep', ImportError),
+            ('logging.handlers:NoSuchHandler', AttributeError),
+            ('logging.handlers:SysLogHandler.NO_SUCH_VALUE', AttributeError),
+            ('logging.handlers.SysLogHandler.NO_SUCH_VALUE', AttributeError),
+            ('ZeroDivisionError', ImportError),
+            ('os.path.9abc', ValueError),
+            ('9abc', ValueError),
+        )
+
+        # add some Unicode package names to the mix.
+
+        unicode_words = ('\u0935\u092e\u0938',
+                         '\xe9', '\xc8',
+                         '\uc548\ub155\ud558\uc138\uc694',
+                         '\u3055\u3088\u306a\u3089',
+                         '\u3042\u308a\u304c\u3068\u3046',
+                         '\u0425\u043e\u0440\u043e\u0448\u043e',
+                         '\u0441\u043f\u0430\u0441\u0438\u0431\u043e',
+                         '\u73b0\u4ee3\u6c49\u8bed\u5e38\u7528\u5b57\u8868')
+
+        for uw in unicode_words:
+            d = os.path.join(self.dirname, uw)
+            try:
+                os.makedirs(d, exist_ok=True)
+            except  UnicodeEncodeError:
+                # When filesystem encoding cannot encode uw: skip this test
+                continue
+            # make an empty __init__.py file
+            f = os.path.join(d, '__init__.py')
+            with open(f, 'w') as f:
+                f.write('')
+                f.flush()
+            # now import the package we just created; clearing the caches is
+            # needed, otherwise the newly created package isn't found
+            importlib.invalidate_caches()
+            mod = importlib.import_module(uw)
+            success_cases += (uw, mod),
+            if len(uw) > 1:
+                failure_cases += (uw[:-1], ImportError),
+
+        # add an example with a Unicode digit at the start
+        failure_cases += ('\u0966\u0935\u092e\u0938', ValueError),
+
+        for s, expected in success_cases:
+            with self.subTest(s=s):
+                o = pkgutil.resolve_name(s)
+                self.assertEqual(o, expected)
+
+        for s, exc in failure_cases:
+            with self.subTest(s=s):
+                with self.assertRaises(exc):
+                    pkgutil.resolve_name(s)
+
 
 class PkgutilPEP302Tests(unittest.TestCase):
 
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 3084663..a3b06fe 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -154,11 +154,39 @@
         res = platform.uname()
         self.assertTrue(any(res))
         self.assertEqual(res[0], res.system)
+        self.assertEqual(res[-6], res.system)
         self.assertEqual(res[1], res.node)
+        self.assertEqual(res[-5], res.node)
         self.assertEqual(res[2], res.release)
+        self.assertEqual(res[-4], res.release)
         self.assertEqual(res[3], res.version)
+        self.assertEqual(res[-3], res.version)
         self.assertEqual(res[4], res.machine)
+        self.assertEqual(res[-2], res.machine)
         self.assertEqual(res[5], res.processor)
+        self.assertEqual(res[-1], res.processor)
+        self.assertEqual(len(res), 6)
+
+    def test_uname_cast_to_tuple(self):
+        res = platform.uname()
+        expected = (
+            res.system, res.node, res.release, res.version, res.machine,
+            res.processor,
+        )
+        self.assertEqual(tuple(res), expected)
+
+    @unittest.skipIf(sys.platform in ['win32', 'OpenVMS'], "uname -p not used")
+    def test_uname_processor(self):
+        """
+        On some systems, the processor must match the output
+        of 'uname -p'. See Issue 35967 for rationale.
+        """
+        try:
+            proc_res = subprocess.check_output(['uname', '-p'], text=True).strip()
+            expect = platform._unknown_as_blank(proc_res)
+        except (OSError, subprocess.CalledProcessError):
+            expect = ''
+        self.assertEqual(platform.uname().processor, expect)
 
     @unittest.skipUnless(sys.platform.startswith('win'), "windows only test")
     def test_uname_win32_ARCHITEW6432(self):
@@ -209,7 +237,10 @@
             # On Snow Leopard, sw_vers reports 10.6.0 as 10.6
             if len_diff > 0:
                 expect_list.extend(['0'] * len_diff)
-            self.assertEqual(result_list, expect_list)
+            # For compatibility with older binaries, macOS 11.x may report
+            # itself as '10.16' rather than '11.x.y'.
+            if result_list != ['10', '16']:
+                self.assertEqual(result_list, expect_list)
 
             # res[1] claims to contain
             # (version, dev_stage, non_release_version)
@@ -217,7 +248,7 @@
             self.assertEqual(res[1], ('', '', ''))
 
             if sys.byteorder == 'little':
-                self.assertIn(res[2], ('i386', 'x86_64'))
+                self.assertIn(res[2], ('i386', 'x86_64', 'arm64'))
             else:
                 self.assertEqual(res[2], 'PowerPC')
 
@@ -236,9 +267,7 @@
 
         else:
             # parent
-            cpid, sts = os.waitpid(pid, 0)
-            self.assertEqual(cpid, pid)
-            self.assertEqual(sts, 0)
+            support.wait_process(pid, exitcode=0)
 
     def test_libc_ver(self):
         # check that libc_ver(executable) doesn't raise an exception
diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py
index 0d887e2..9e53305 100644
--- a/Lib/test/test_plistlib.py
+++ b/Lib/test/test_plistlib.py
@@ -2,6 +2,7 @@
 import copy
 import operator
 import pickle
+import struct
 import unittest
 import plistlib
 import os
@@ -105,6 +106,298 @@
         AAABOQ=='''),
 }
 
+XML_PLIST_WITH_ENTITY=b'''\
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd" [
+   <!ENTITY entity "replacement text">
+  ]>
+<plist version="1.0">
+  <dict>
+    <key>A</key>
+    <string>&entity;</string>
+  </dict>
+</plist>
+'''
+
+INVALID_BINARY_PLISTS = [
+    ('too short data',
+        b''
+    ),
+    ('too large offset_table_offset and offset_size = 1',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x2a'
+    ),
+    ('too large offset_table_offset and nonstandard offset_size',
+        b'\x00\x00\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x03\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x2c'
+    ),
+    ('integer overflow in offset_table_offset',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\xff\xff\xff\xff\xff\xff\xff\xff'
+    ),
+    ('too large top_object',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('integer overflow in top_object',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\xff\xff\xff\xff\xff\xff\xff\xff'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('too large num_objects and offset_size = 1',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\xff'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('too large num_objects and nonstandard offset_size',
+        b'\x00\x00\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x03\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\xff'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('extremally large num_objects (32 bit)',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x7f\xff\xff\xff'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('extremally large num_objects (64 bit)',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\xff\xff\xff\xff\xff'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('integer overflow in num_objects',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\xff\xff\xff\xff\xff\xff\xff\xff'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('offset_size = 0',
+        b'\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('ref_size = 0',
+        b'\xa1\x01\x00\x08\x0a'
+        b'\x00\x00\x00\x00\x00\x00\x01\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0b'
+    ),
+    ('too large offset',
+        b'\x00\x2a'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('integer overflow in offset',
+        b'\x00\xff\xff\xff\xff\xff\xff\xff\xff'
+        b'\x00\x00\x00\x00\x00\x00\x08\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x09'
+    ),
+    ('too large array size',
+        b'\xaf\x00\x01\xff\x00\x08\x0c'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0d'
+    ),
+    ('extremally large array size (32-bit)',
+        b'\xaf\x02\x7f\xff\xff\xff\x01\x00\x08\x0f'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x10'
+    ),
+    ('extremally large array size (64-bit)',
+        b'\xaf\x03\x00\x00\x00\xff\xff\xff\xff\xff\x01\x00\x08\x13'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x14'
+    ),
+    ('integer overflow in array size',
+        b'\xaf\x03\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x08\x13'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x14'
+    ),
+    ('too large reference index',
+        b'\xa1\x02\x00\x08\x0a'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0b'
+    ),
+    ('integer overflow in reference index',
+        b'\xa1\xff\xff\xff\xff\xff\xff\xff\xff\x00\x08\x11'
+        b'\x00\x00\x00\x00\x00\x00\x01\x08'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x12'
+    ),
+    ('too large bytes size',
+        b'\x4f\x00\x23\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0c'
+    ),
+    ('extremally large bytes size (32-bit)',
+        b'\x4f\x02\x7f\xff\xff\xff\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0f'
+    ),
+    ('extremally large bytes size (64-bit)',
+        b'\x4f\x03\x00\x00\x00\xff\xff\xff\xff\xff\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x13'
+    ),
+    ('integer overflow in bytes size',
+        b'\x4f\x03\xff\xff\xff\xff\xff\xff\xff\xff\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x13'
+    ),
+    ('too large ASCII size',
+        b'\x5f\x00\x23\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0c'
+    ),
+    ('extremally large ASCII size (32-bit)',
+        b'\x5f\x02\x7f\xff\xff\xff\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0f'
+    ),
+    ('extremally large ASCII size (64-bit)',
+        b'\x5f\x03\x00\x00\x00\xff\xff\xff\xff\xff\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x13'
+    ),
+    ('integer overflow in ASCII size',
+        b'\x5f\x03\xff\xff\xff\xff\xff\xff\xff\xff\x41\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x13'
+    ),
+    ('invalid ASCII',
+        b'\x51\xff\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0a'
+    ),
+    ('too large UTF-16 size',
+        b'\x6f\x00\x13\x20\xac\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0e'
+    ),
+    ('extremally large UTF-16 size (32-bit)',
+        b'\x6f\x02\x4f\xff\xff\xff\x20\xac\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x11'
+    ),
+    ('extremally large UTF-16 size (64-bit)',
+        b'\x6f\x03\x00\x00\x00\xff\xff\xff\xff\xff\x20\xac\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x15'
+    ),
+    ('integer overflow in UTF-16 size',
+        b'\x6f\x03\xff\xff\xff\xff\xff\xff\xff\xff\x20\xac\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x15'
+    ),
+    ('invalid UTF-16',
+        b'\x61\xd8\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0b'
+    ),
+    ('non-hashable key',
+        b'\xd1\x01\x01\xa0\x08\x0b'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x02'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x0c'
+    ),
+    ('too large datetime (datetime overflow)',
+        b'\x33\x42\x50\x00\x00\x00\x00\x00\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x11'
+    ),
+    ('too large datetime (timedelta overflow)',
+        b'\x33\x42\xe0\x00\x00\x00\x00\x00\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x11'
+    ),
+    ('invalid datetime (Infinity)',
+        b'\x33\x7f\xf0\x00\x00\x00\x00\x00\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x11'
+    ),
+    ('invalid datetime (NaN)',
+        b'\x33\x7f\xf8\x00\x00\x00\x00\x00\x00\x08'
+        b'\x00\x00\x00\x00\x00\x00\x01\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x01'
+        b'\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x00\x00\x00\x00\x00\x00\x00\x11'
+    ),
+]
+
 
 class TestPlistlib(unittest.TestCase):
 
@@ -263,14 +556,12 @@
         self.assertEqual(copy.deepcopy(UID(1)), UID(1))
 
     def test_appleformatting(self):
-        for use_builtin_types in (True, False):
-            for fmt in ALL_FORMATS:
-                with self.subTest(fmt=fmt, use_builtin_types=use_builtin_types):
-                    pl = plistlib.loads(TESTDATA[fmt],
-                        use_builtin_types=use_builtin_types)
-                    data = plistlib.dumps(pl, fmt=fmt)
-                    self.assertEqual(data, TESTDATA[fmt],
-                        "generated data was not identical to Apple's output")
+        for fmt in ALL_FORMATS:
+            with self.subTest(fmt=fmt):
+                pl = plistlib.loads(TESTDATA[fmt])
+                data = plistlib.dumps(pl, fmt=fmt)
+                self.assertEqual(data, TESTDATA[fmt],
+                    "generated data was not identical to Apple's output")
 
 
     def test_appleformattingfromliteral(self):
@@ -486,6 +777,19 @@
         self.assertRaises(ValueError, plistlib.loads,
                           b"<plist><integer>not real</integer></plist>")
 
+    def test_integer_notations(self):
+        pl = b"<plist><integer>456</integer></plist>"
+        value = plistlib.loads(pl)
+        self.assertEqual(value, 456)
+
+        pl = b"<plist><integer>0xa</integer></plist>"
+        value = plistlib.loads(pl)
+        self.assertEqual(value, 10)
+
+        pl = b"<plist><integer>0123</integer></plist>"
+        value = plistlib.loads(pl)
+        self.assertEqual(value, 123)
+
     def test_xml_encodings(self):
         base = TESTDATA[plistlib.FMT_XML]
 
@@ -525,9 +829,29 @@
         with self.assertRaises(OverflowError):
             plistlib.dumps(huge_uid, fmt=plistlib.FMT_BINARY)
 
+    def test_xml_plist_with_entity_decl(self):
+        with self.assertRaisesRegex(plistlib.InvalidFileException,
+                                    "XML entity declarations are not supported"):
+            plistlib.loads(XML_PLIST_WITH_ENTITY, fmt=plistlib.FMT_XML)
+
 
 class TestBinaryPlistlib(unittest.TestCase):
 
+    @staticmethod
+    def decode(*objects, offset_size=1, ref_size=1):
+        data = [b'bplist00']
+        offset = 8
+        offsets = []
+        for x in objects:
+            offsets.append(offset.to_bytes(offset_size, 'big'))
+            data.append(x)
+            offset += len(x)
+        tail = struct.pack('>6xBBQQQ', offset_size, ref_size,
+                           len(objects), 0, offset)
+        data.extend(offsets)
+        data.append(tail)
+        return plistlib.loads(b''.join(data), fmt=plistlib.FMT_BINARY)
+
     def test_nonstandard_refs_size(self):
         # Issue #21538: Refs and offsets are 24-bit integers
         data = (b'bplist00'
@@ -542,10 +866,9 @@
 
     def test_dump_duplicates(self):
         # Test effectiveness of saving duplicated objects
-        for x in (None, False, True, 12345, 123.45, 'abcde', b'abcde',
+        for x in (None, False, True, 12345, 123.45, 'abcde', 'абвгд', b'abcde',
                   datetime.datetime(2004, 10, 26, 10, 33, 33),
-                  plistlib.Data(b'abcde'), bytearray(b'abcde'),
-                  [12, 345], (12, 345), {'12': 345}):
+                  bytearray(b'abcde'), [12, 345], (12, 345), {'12': 345}):
             with self.subTest(x=x):
                 data = plistlib.dumps([x]*1000, fmt=plistlib.FMT_BINARY)
                 self.assertLess(len(data), 1100, repr(data))
@@ -553,8 +876,7 @@
     def test_identity(self):
         for x in (None, False, True, 12345, 123.45, 'abcde', b'abcde',
                   datetime.datetime(2004, 10, 26, 10, 33, 33),
-                  plistlib.Data(b'abcde'), bytearray(b'abcde'),
-                  [12, 345], (12, 345), {'12': 345}):
+                  bytearray(b'abcde'), [12, 345], (12, 345), {'12': 345}):
             with self.subTest(x=x):
                 data = plistlib.dumps([x]*2, fmt=plistlib.FMT_BINARY)
                 a, b = plistlib.loads(data)
@@ -581,6 +903,20 @@
         b = plistlib.loads(plistlib.dumps(a, fmt=plistlib.FMT_BINARY))
         self.assertIs(b['x'], b)
 
+    def test_deep_nesting(self):
+        for N in [300, 100000]:
+            chunks = [b'\xa1' + (i + 1).to_bytes(4, 'big') for i in range(N)]
+            try:
+                result = self.decode(*chunks, b'\x54seed', offset_size=4, ref_size=4)
+            except RecursionError:
+                pass
+            else:
+                for i in range(N):
+                    self.assertIsInstance(result, list)
+                    self.assertEqual(len(result), 1)
+                    result = result[0]
+                self.assertEqual(result, 'seed')
+
     def test_large_timestamp(self):
         # Issue #26709: 32-bit timestamp out of range
         for ts in -2**31-1, 2**31:
@@ -590,144 +926,37 @@
                 data = plistlib.dumps(d, fmt=plistlib.FMT_BINARY)
                 self.assertEqual(plistlib.loads(data), d)
 
+    def test_load_singletons(self):
+        self.assertIs(self.decode(b'\x00'), None)
+        self.assertIs(self.decode(b'\x08'), False)
+        self.assertIs(self.decode(b'\x09'), True)
+        self.assertEqual(self.decode(b'\x0f'), b'')
+
+    def test_load_int(self):
+        self.assertEqual(self.decode(b'\x10\x00'), 0)
+        self.assertEqual(self.decode(b'\x10\xfe'), 0xfe)
+        self.assertEqual(self.decode(b'\x11\xfe\xdc'), 0xfedc)
+        self.assertEqual(self.decode(b'\x12\xfe\xdc\xba\x98'), 0xfedcba98)
+        self.assertEqual(self.decode(b'\x13\x01\x23\x45\x67\x89\xab\xcd\xef'),
+                         0x0123456789abcdef)
+        self.assertEqual(self.decode(b'\x13\xfe\xdc\xba\x98\x76\x54\x32\x10'),
+                         -0x123456789abcdf0)
+
+    def test_unsupported(self):
+        unsupported = [*range(1, 8), *range(10, 15),
+                       0x20, 0x21, *range(0x24, 0x33), *range(0x34, 0x40)]
+        for i in [0x70, 0x90, 0xb0, 0xc0, 0xe0, 0xf0]:
+            unsupported.extend(i + j for j in range(16))
+        for token in unsupported:
+            with self.subTest(f'token {token:02x}'):
+                with self.assertRaises(plistlib.InvalidFileException):
+                    self.decode(bytes([token]) + b'\x00'*16)
+
     def test_invalid_binary(self):
-        for data in [
-                # too short data
-                b'',
-                # too large offset_table_offset and nonstandard offset_size
-                b'\x00\x08'
-                b'\x00\x00\x00\x00\x00\x00\x03\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x2a',
-                # integer overflow in offset_table_offset
-                b'\x00\x08'
-                b'\x00\x00\x00\x00\x00\x00\x01\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\xff\xff\xff\xff\xff\xff\xff\xff',
-                # offset_size = 0
-                b'\x00\x08'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x09',
-                # ref_size = 0
-                b'\xa1\x01\x00\x08\x0a'
-                b'\x00\x00\x00\x00\x00\x00\x01\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x02'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x0b',
-                # integer overflow in offset
-                b'\x00\xff\xff\xff\xff\xff\xff\xff\xff'
-                b'\x00\x00\x00\x00\x00\x00\x08\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x09',
-                # invalid ASCII
-                b'\x51\xff\x08'
-                b'\x00\x00\x00\x00\x00\x00\x01\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x0a',
-                # invalid UTF-16
-                b'\x61\xd8\x00\x08'
-                b'\x00\x00\x00\x00\x00\x00\x01\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x01'
-                b'\x00\x00\x00\x00\x00\x00\x00\x00'
-                b'\x00\x00\x00\x00\x00\x00\x00\x0b',
-                ]:
-            with self.assertRaises(plistlib.InvalidFileException):
-                plistlib.loads(b'bplist00' + data, fmt=plistlib.FMT_BINARY)
-
-
-class TestPlistlibDeprecated(unittest.TestCase):
-    def test_io_deprecated(self):
-        pl_in = {
-            'key': 42,
-            'sub': {
-                'key': 9,
-                'alt': 'value',
-                'data': b'buffer',
-            }
-        }
-        pl_out = {
-            'key': 42,
-            'sub': {
-                'key': 9,
-                'alt': 'value',
-                'data': plistlib.Data(b'buffer'),
-            }
-        }
-
-        self.addCleanup(support.unlink, support.TESTFN)
-        with self.assertWarns(DeprecationWarning):
-            plistlib.writePlist(pl_in, support.TESTFN)
-
-        with self.assertWarns(DeprecationWarning):
-            pl2 = plistlib.readPlist(support.TESTFN)
-
-        self.assertEqual(pl_out, pl2)
-
-        os.unlink(support.TESTFN)
-
-        with open(support.TESTFN, 'wb') as fp:
-            with self.assertWarns(DeprecationWarning):
-                plistlib.writePlist(pl_in, fp)
-
-        with open(support.TESTFN, 'rb') as fp:
-            with self.assertWarns(DeprecationWarning):
-                pl2 = plistlib.readPlist(fp)
-
-        self.assertEqual(pl_out, pl2)
-
-    def test_bytes_deprecated(self):
-        pl = {
-            'key': 42,
-            'sub': {
-                'key': 9,
-                'alt': 'value',
-                'data': b'buffer',
-            }
-        }
-        with self.assertWarns(DeprecationWarning):
-            data = plistlib.writePlistToBytes(pl)
-
-        with self.assertWarns(DeprecationWarning):
-            pl2 = plistlib.readPlistFromBytes(data)
-
-        self.assertIsInstance(pl2, dict)
-        self.assertEqual(pl2, dict(
-            key=42,
-            sub=dict(
-                key=9,
-                alt='value',
-                data=plistlib.Data(b'buffer'),
-            )
-        ))
-
-        with self.assertWarns(DeprecationWarning):
-            data2 = plistlib.writePlistToBytes(pl2)
-        self.assertEqual(data, data2)
-
-    def test_dataobject_deprecated(self):
-        in_data = { 'key': plistlib.Data(b'hello') }
-        out_data = { 'key': b'hello' }
-
-        buf = plistlib.dumps(in_data)
-
-        cur = plistlib.loads(buf)
-        self.assertEqual(cur, out_data)
-        self.assertEqual(cur, in_data)
-
-        cur = plistlib.loads(buf, use_builtin_types=False)
-        self.assertEqual(cur, out_data)
-        self.assertEqual(cur, in_data)
-
-        with self.assertWarns(DeprecationWarning):
-            cur = plistlib.readPlistFromBytes(buf)
-        self.assertEqual(cur, out_data)
-        self.assertEqual(cur, in_data)
+        for name, data in INVALID_BINARY_PLISTS:
+            with self.subTest(name):
+                with self.assertRaises(plistlib.InvalidFileException):
+                    plistlib.loads(b'bplist00' + data, fmt=plistlib.FMT_BINARY)
 
 
 class TestKeyedArchive(unittest.TestCase):
diff --git a/Lib/test/test_popen.py b/Lib/test/test_popen.py
index da01a87..ab1bc77 100644
--- a/Lib/test/test_popen.py
+++ b/Lib/test/test_popen.py
@@ -44,10 +44,11 @@
 
     def test_return_code(self):
         self.assertEqual(os.popen("exit 0").close(), None)
+        status = os.popen("exit 42").close()
         if os.name == 'nt':
-            self.assertEqual(os.popen("exit 42").close(), 42)
+            self.assertEqual(status, 42)
         else:
-            self.assertEqual(os.popen("exit 42").close(), 42 << 8)
+            self.assertEqual(os.waitstatus_to_exitcode(status), 42)
 
     def test_contextmanager(self):
         with os.popen("echo hello") as f:
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index 7b1d854..b670afc 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -13,8 +13,10 @@
 
 from unittest import TestCase, skipUnless
 from test import support as test_support
+from test.support import hashlib_helper
+from test.support import socket_helper
 
-HOST = test_support.HOST
+HOST = socket_helper.HOST
 PORT = 0
 
 SUPPORTS_SSL = False
@@ -255,7 +257,8 @@
     def setUp(self):
         self.server = DummyPOP3Server((HOST, PORT))
         self.server.start()
-        self.client = poplib.POP3(self.server.host, self.server.port, timeout=3)
+        self.client = poplib.POP3(self.server.host, self.server.port,
+                                  timeout=test_support.LOOPBACK_TIMEOUT)
 
     def tearDown(self):
         self.client.close()
@@ -309,11 +312,11 @@
     def test_rpop(self):
         self.assertOK(self.client.rpop('foo'))
 
-    @test_support.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5')
     def test_apop_normal(self):
         self.assertOK(self.client.apop('foo', 'dummypassword'))
 
-    @test_support.requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5')
     def test_apop_REDOS(self):
         # Replace welcome with very long evil welcome.
         # NB The upper bound on welcome length is currently 2048.
@@ -376,7 +379,8 @@
         self.assertEqual(ctx.check_hostname, True)
         with self.assertRaises(ssl.CertificateError):
             resp = self.client.stls(context=ctx)
-        self.client = poplib.POP3("localhost", self.server.port, timeout=3)
+        self.client = poplib.POP3("localhost", self.server.port,
+                                  timeout=test_support.LOOPBACK_TIMEOUT)
         resp = self.client.stls(context=ctx)
         self.assertEqual(resp, expected)
 
@@ -445,7 +449,8 @@
     def setUp(self):
         self.server = DummyPOP3Server((HOST, PORT))
         self.server.start()
-        self.client = poplib.POP3(self.server.host, self.server.port, timeout=3)
+        self.client = poplib.POP3(self.server.host, self.server.port,
+                                  timeout=test_support.LOOPBACK_TIMEOUT)
         self.client.stls()
 
     def tearDown(self):
@@ -477,8 +482,8 @@
         self.evt = threading.Event()
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.sock.settimeout(60)  # Safety net. Look issue 11812
-        self.port = test_support.bind_port(self.sock)
-        self.thread = threading.Thread(target=self.server, args=(self.evt,self.sock))
+        self.port = socket_helper.bind_port(self.sock)
+        self.thread = threading.Thread(target=self.server, args=(self.evt, self.sock))
         self.thread.daemon = True
         self.thread.start()
         self.evt.wait()
@@ -502,12 +507,12 @@
 
     def testTimeoutDefault(self):
         self.assertIsNone(socket.getdefaulttimeout())
-        socket.setdefaulttimeout(30)
+        socket.setdefaulttimeout(test_support.LOOPBACK_TIMEOUT)
         try:
             pop = poplib.POP3(HOST, self.port)
         finally:
             socket.setdefaulttimeout(None)
-        self.assertEqual(pop.sock.gettimeout(), 30)
+        self.assertEqual(pop.sock.gettimeout(), test_support.LOOPBACK_TIMEOUT)
         pop.close()
 
     def testTimeoutNone(self):
@@ -521,9 +526,11 @@
         pop.close()
 
     def testTimeoutValue(self):
-        pop = poplib.POP3(HOST, self.port, timeout=30)
-        self.assertEqual(pop.sock.gettimeout(), 30)
+        pop = poplib.POP3(HOST, self.port, timeout=test_support.LOOPBACK_TIMEOUT)
+        self.assertEqual(pop.sock.gettimeout(), test_support.LOOPBACK_TIMEOUT)
         pop.close()
+        with self.assertRaises(ValueError):
+            poplib.POP3(HOST, self.port, timeout=0)
 
 
 def test_main():
diff --git a/Lib/test/test_positional_only_arg.py b/Lib/test/test_positional_only_arg.py
index 2ef40e3..0a9503e 100644
--- a/Lib/test/test_positional_only_arg.py
+++ b/Lib/test/test_positional_only_arg.py
@@ -16,11 +16,6 @@
 def global_pos_only_defaults(a=1, /, b=2):
     return a, b
 
-def global_inner_has_pos_only():
-    def f(x: int, /): ...
-    return f
-
-
 class PositionalOnlyTestCase(unittest.TestCase):
 
     def assertRaisesSyntaxError(self, codestr, regex="invalid syntax"):
@@ -266,12 +261,6 @@
         with self.assertRaisesRegex(TypeError, expected):
             Example().f(1, b=2)
 
-    def test_mangling(self):
-        class X:
-            def f(self, *, __a=42):
-                return __a
-        self.assertEqual(X().f(), 42)
-
     def test_module_function(self):
         with self.assertRaisesRegex(TypeError, r"f\(\) missing 2 required positional arguments: 'a' and 'b'"):
             global_pos_only_f()
@@ -307,6 +296,29 @@
         with self.assertRaisesRegex(TypeError, r"g\(\) takes 2 positional arguments but 3 were given"):
             f(1,2)(3,4,5)
 
+    def test_annotations_in_closures(self):
+
+        def inner_has_pos_only():
+            def f(x: int, /): ...
+            return f
+
+        assert inner_has_pos_only().__annotations__ == {'x': int}
+
+        class Something:
+            def method(self):
+                def f(x: int, /): ...
+                return f
+
+        assert Something().method().__annotations__ == {'x': int}
+
+        def multiple_levels():
+            def inner_has_pos_only():
+                def f(x: int, /): ...
+                return f
+            return inner_has_pos_only()
+
+        assert multiple_levels().__annotations__ == {'x': int}
+
     def test_same_keyword_as_positional_with_kwargs(self):
         def f(something,/,**kwargs):
             return (something, kwargs)
@@ -417,19 +429,16 @@
 
         self.assertEqual(C().method(), sentinel)
 
-    def test_annotations(self):
-        assert global_inner_has_pos_only().__annotations__ == {'x': int}
-
     def test_annotations_constant_fold(self):
         def g():
             def f(x: not (int is int), /): ...
 
         # without constant folding we end up with
-        # COMPARE_OP(is), UNARY_NOT
-        # with constant folding we should expect a COMPARE_OP(is not)
+        # COMPARE_OP(is), IS_OP (0)
+        # with constant folding we should expect a IS_OP (1)
         codes = [(i.opname, i.argval) for i in dis.get_instructions(g)]
         self.assertNotIn(('UNARY_NOT', None), codes)
-        self.assertIn(('COMPARE_OP', 'is not'), codes)
+        self.assertIn(('IS_OP', 1), codes)
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 9bdd284..bfbcbab 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -37,6 +37,7 @@
 
 requires_sched = unittest.skipUnless(_supports_sched(), 'requires POSIX scheduler API')
 
+
 class PosixTester(unittest.TestCase):
 
     def setUp(self):
@@ -180,7 +181,6 @@
 
     @unittest.skipUnless(getattr(os, 'execve', None) in os.supports_fd, "test needs execve() to support the fd parameter")
     @unittest.skipUnless(hasattr(os, 'fork'), "test needs os.fork()")
-    @unittest.skipUnless(hasattr(os, 'waitpid'), "test needs os.waitpid()")
     def test_fexecve(self):
         fp = os.open(sys.executable, os.O_RDONLY)
         try:
@@ -189,7 +189,7 @@
                 os.chdir(os.path.split(sys.executable)[0])
                 posix.execve(fp, [sys.executable, '-c', 'pass'], os.environ)
             else:
-                self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+                support.wait_process(pid, exitcode=0)
         finally:
             os.close(fp)
 
@@ -969,7 +969,6 @@
             self.assertEqual(type(k), item_type)
             self.assertEqual(type(v), item_type)
 
-    @unittest.skipUnless(hasattr(os, "putenv"), "requires os.putenv()")
     def test_putenv(self):
         with self.assertRaises(ValueError):
             os.putenv('FRUIT\0VEGETABLE', 'cabbage')
@@ -1046,7 +1045,7 @@
         if sys.platform == 'darwin':
             import sysconfig
             dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.0'
-            if tuple(int(n) for n in dt.split('.')[0:2]) < (10, 6):
+            if tuple(int(n) for n in str(dt).split('.')[0:2]) < (10, 6):
                 raise unittest.SkipTest("getgroups(2) is broken prior to 10.6")
 
         # 'id -G' and 'os.getgroups()' should return the same
@@ -1226,6 +1225,16 @@
         finally:
             posix.close(f)
 
+    @unittest.skipUnless(hasattr(signal, 'SIGCHLD'), 'CLD_XXXX be placed in si_code for a SIGCHLD signal')
+    @unittest.skipUnless(hasattr(os, 'waitid_result'), "test needs os.waitid_result")
+    def test_cld_xxxx_constants(self):
+        os.CLD_EXITED
+        os.CLD_KILLED
+        os.CLD_DUMPED
+        os.CLD_TRAPPED
+        os.CLD_STOPPED
+        os.CLD_CONTINUED
+
     @unittest.skipUnless(os.symlink in os.supports_dir_fd, "test needs dir_fd support in os.symlink()")
     def test_symlink_dir_fd(self):
         f = posix.open(posix.getcwd(), posix.O_RDONLY)
@@ -1460,6 +1469,17 @@
         open(fn, 'wb').close()
         self.assertRaises(ValueError, os.stat, fn_with_NUL)
 
+    @unittest.skipUnless(hasattr(os, "pidfd_open"), "pidfd_open unavailable")
+    def test_pidfd_open(self):
+        with self.assertRaises(OSError) as cm:
+            os.pidfd_open(-1)
+        if cm.exception.errno == errno.ENOSYS:
+            self.skipTest("system does not support pidfd_open")
+        if isinstance(cm.exception, PermissionError):
+            self.skipTest(f"pidfd_open syscall blocked: {cm.exception!r}")
+        self.assertEqual(cm.exception.errno, errno.EINVAL)
+        os.close(os.pidfd_open(os.getpid(), 0))
+
 class PosixGroupsTester(unittest.TestCase):
 
     def setUp(self):
@@ -1519,7 +1539,7 @@
             """
         args = self.python_args('-c', script)
         pid = self.spawn_func(args[0], args, os.environ)
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
         with open(pidfile) as f:
             self.assertEqual(f.read(), str(pid))
 
@@ -1549,7 +1569,7 @@
         args = self.python_args('-c', script)
         pid = self.spawn_func(args[0], args,
                               {**os.environ, 'foo': 'bar'})
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
         with open(envfile) as f:
             self.assertEqual(f.read(), 'bar')
 
@@ -1560,7 +1580,7 @@
             os.environ,
             file_actions=None
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_empty_file_actions(self):
         pid = self.spawn_func(
@@ -1569,7 +1589,7 @@
             os.environ,
             file_actions=[]
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_resetids_explicit_default(self):
         pid = self.spawn_func(
@@ -1578,7 +1598,7 @@
             os.environ,
             resetids=False
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_resetids(self):
         pid = self.spawn_func(
@@ -1587,7 +1607,7 @@
             os.environ,
             resetids=True
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_resetids_wrong_type(self):
         with self.assertRaises(TypeError):
@@ -1602,7 +1622,7 @@
             os.environ,
             setpgroup=os.getpgrp()
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_setpgroup_wrong_type(self):
         with self.assertRaises(TypeError):
@@ -1623,7 +1643,7 @@
             os.environ,
             setsigmask=[signal.SIGUSR1]
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_setsigmask_wrong_type(self):
         with self.assertRaises(TypeError):
@@ -1664,7 +1684,8 @@
         finally:
             os.close(wfd)
 
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
+
         output = os.read(rfd, 100)
         child_sid = int(output)
         parent_sid = os.getsid(os.getpid())
@@ -1687,10 +1708,7 @@
         finally:
             signal.signal(signal.SIGUSR1, original_handler)
 
-        pid2, status = os.waitpid(pid, 0)
-        self.assertEqual(pid2, pid)
-        self.assertTrue(os.WIFSIGNALED(status), status)
-        self.assertEqual(os.WTERMSIG(status), signal.SIGUSR1)
+        support.wait_process(pid, exitcode=-signal.SIGUSR1)
 
     def test_setsigdef_wrong_type(self):
         with self.assertRaises(TypeError):
@@ -1724,7 +1742,7 @@
             os.environ,
             scheduler=(None, os.sched_param(priority))
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     @requires_sched
     @unittest.skipIf(sys.platform.startswith(('freebsd', 'netbsd')),
@@ -1744,7 +1762,7 @@
             os.environ,
             scheduler=(policy, os.sched_param(priority))
         )
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_multiple_file_actions(self):
         file_actions = [
@@ -1756,7 +1774,7 @@
                               self.NOOP_PROGRAM,
                               os.environ,
                               file_actions=file_actions)
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+        support.wait_process(pid, exitcode=0)
 
     def test_bad_file_actions(self):
         args = self.NOOP_PROGRAM
@@ -1802,7 +1820,8 @@
         args = self.python_args('-c', script)
         pid = self.spawn_func(args[0], args, os.environ,
                               file_actions=file_actions)
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+
+        support.wait_process(pid, exitcode=0)
         with open(outfile) as f:
             self.assertEqual(f.read(), 'hello')
 
@@ -1820,7 +1839,8 @@
         args = self.python_args('-c', script)
         pid = self.spawn_func(args[0], args, os.environ,
                               file_actions=[(os.POSIX_SPAWN_CLOSE, 0)])
-        self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+
+        support.wait_process(pid, exitcode=0)
         with open(closefile) as f:
             self.assertEqual(f.read(), 'is closed %d' % errno.EBADF)
 
@@ -1838,7 +1858,7 @@
             args = self.python_args('-c', script)
             pid = self.spawn_func(args[0], args, os.environ,
                                   file_actions=file_actions)
-            self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+            support.wait_process(pid, exitcode=0)
         with open(dupfile) as f:
             self.assertEqual(f.read(), 'hello')
 
@@ -1870,13 +1890,12 @@
         spawn_args = (program, '-I', '-S', '-c', 'pass')
         code = textwrap.dedent("""
             import os
+            from test import support
+
             args = %a
             pid = os.posix_spawnp(args[0], args, os.environ)
-            pid2, status = os.waitpid(pid, 0)
-            if pid2 != pid:
-                raise Exception(f"pid {pid2} != {pid}")
-            if status != 0:
-                raise Exception(f"status {status} != 0")
+
+            support.wait_process(pid, exitcode=0)
         """ % (spawn_args,))
 
         # Use a subprocess to test os.posix_spawnp() with a modified PATH
@@ -1886,6 +1905,233 @@
         assert_python_ok(*args, PATH=path)
 
 
+@unittest.skipUnless(sys.platform == "darwin", "test weak linking on macOS")
+class TestPosixWeaklinking(unittest.TestCase):
+    # These test cases verify that weak linking support on macOS works
+    # as expected. These cases only test new behaviour introduced by weak linking,
+    # regular behaviour is tested by the normal test cases.
+    #
+    # See the section on Weak Linking in Mac/README.txt for more information.
+    def setUp(self):
+        import sysconfig
+        import platform
+
+        config_vars = sysconfig.get_config_vars()
+        self.available = { nm for nm in config_vars if nm.startswith("HAVE_") and config_vars[nm] }
+        self.mac_ver = tuple(int(part) for part in platform.mac_ver()[0].split("."))
+
+    def _verify_available(self, name):
+        if name not in self.available:
+            raise unittest.SkipTest(f"{name} not weak-linked")
+
+    def test_pwritev(self):
+        self._verify_available("HAVE_PWRITEV")
+        if self.mac_ver >= (10, 16):
+            self.assertTrue(hasattr(os, "pwritev"), "os.pwritev is not available")
+            self.assertTrue(hasattr(os, "preadv"), "os.readv is not available")
+
+        else:
+            self.assertFalse(hasattr(os, "pwritev"), "os.pwritev is available")
+            self.assertFalse(hasattr(os, "preadv"), "os.readv is available")
+
+    def test_stat(self):
+        self._verify_available("HAVE_FSTATAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_FSTATAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_FSTATAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.stat("file", dir_fd=0)
+
+    def test_access(self):
+        self._verify_available("HAVE_FACCESSAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_FACCESSAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_FACCESSAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.access("file", os.R_OK, dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "follow_symlinks unavailable"):
+                os.access("file", os.R_OK, follow_symlinks=False)
+
+            with self.assertRaisesRegex(NotImplementedError, "effective_ids unavailable"):
+                os.access("file", os.R_OK, effective_ids=True)
+
+    def test_chmod(self):
+        self._verify_available("HAVE_FCHMODAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_FCHMODAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_FCHMODAT", posix._have_functions)
+            self.assertIn("HAVE_LCHMOD", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.chmod("file", 0o644, dir_fd=0)
+
+    def test_chown(self):
+        self._verify_available("HAVE_FCHOWNAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_FCHOWNAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_FCHOWNAT", posix._have_functions)
+            self.assertIn("HAVE_LCHOWN", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.chown("file", 0, 0, dir_fd=0)
+
+    def test_link(self):
+        self._verify_available("HAVE_LINKAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_LINKAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_LINKAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "src_dir_fd unavailable"):
+                os.link("source", "target",  src_dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "dst_dir_fd unavailable"):
+                os.link("source", "target",  dst_dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "src_dir_fd unavailable"):
+                os.link("source", "target",  src_dir_fd=0, dst_dir_fd=0)
+
+            # issue 41355: !HAVE_LINKAT code path ignores the follow_symlinks flag
+            with support.temp_dir() as base_path:
+                link_path = os.path.join(base_path, "link")
+                target_path = os.path.join(base_path, "target")
+                source_path = os.path.join(base_path, "source")
+
+                with open(source_path, "w") as fp:
+                    fp.write("data")
+
+                os.symlink("target", link_path)
+
+                # Calling os.link should fail in the link(2) call, and
+                # should not reject *follow_symlinks* (to match the
+                # behaviour you'd get when building on a platform without
+                # linkat)
+                with self.assertRaises(FileExistsError):
+                    os.link(source_path, link_path, follow_symlinks=True)
+
+                with self.assertRaises(FileExistsError):
+                    os.link(source_path, link_path, follow_symlinks=False)
+
+
+    def test_listdir_scandir(self):
+        self._verify_available("HAVE_FDOPENDIR")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_FDOPENDIR", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_FDOPENDIR", posix._have_functions)
+
+            with self.assertRaisesRegex(TypeError, "listdir: path should be string, bytes, os.PathLike or None, not int"):
+                os.listdir(0)
+
+            with self.assertRaisesRegex(TypeError, "scandir: path should be string, bytes, os.PathLike or None, not int"):
+                os.scandir(0)
+
+    def test_mkdir(self):
+        self._verify_available("HAVE_MKDIRAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_MKDIRAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_MKDIRAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.mkdir("dir", dir_fd=0)
+
+    def test_rename_replace(self):
+        self._verify_available("HAVE_RENAMEAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_RENAMEAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_RENAMEAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "src_dir_fd and dst_dir_fd unavailable"):
+                os.rename("a", "b", src_dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "src_dir_fd and dst_dir_fd unavailable"):
+                os.rename("a", "b", dst_dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "src_dir_fd and dst_dir_fd unavailable"):
+                os.replace("a", "b", src_dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "src_dir_fd and dst_dir_fd unavailable"):
+                os.replace("a", "b", dst_dir_fd=0)
+
+    def test_unlink_rmdir(self):
+        self._verify_available("HAVE_UNLINKAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_UNLINKAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_UNLINKAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.unlink("path", dir_fd=0)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.rmdir("path", dir_fd=0)
+
+    def test_open(self):
+        self._verify_available("HAVE_OPENAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_OPENAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_OPENAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.open("path", os.O_RDONLY, dir_fd=0)
+
+    def test_readlink(self):
+        self._verify_available("HAVE_READLINKAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_READLINKAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_READLINKAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.readlink("path",  dir_fd=0)
+
+    def test_symlink(self):
+        self._verify_available("HAVE_SYMLINKAT")
+        if self.mac_ver >= (10, 10):
+            self.assertIn("HAVE_SYMLINKAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_SYMLINKAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.symlink("a", "b",  dir_fd=0)
+
+    def test_utime(self):
+        self._verify_available("HAVE_FUTIMENS")
+        self._verify_available("HAVE_UTIMENSAT")
+        if self.mac_ver >= (10, 13):
+            self.assertIn("HAVE_FUTIMENS", posix._have_functions)
+            self.assertIn("HAVE_UTIMENSAT", posix._have_functions)
+
+        else:
+            self.assertNotIn("HAVE_FUTIMENS", posix._have_functions)
+            self.assertNotIn("HAVE_UTIMENSAT", posix._have_functions)
+
+            with self.assertRaisesRegex(NotImplementedError, "dir_fd unavailable"):
+                os.utime("path", dir_fd=0)
+
+
 def test_main():
     try:
         support.run_unittest(
@@ -1893,6 +2139,7 @@
             PosixGroupsTester,
             TestPosixSpawn,
             TestPosixSpawnP,
+            TestPosixWeaklinking
         )
     finally:
         support.reap_children()
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index 4d3d897..18819a5 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -627,7 +627,7 @@
     path = posixpath
 
     def setUp(self):
-        self.file_name = support.TESTFN.lower()
+        self.file_name = support.TESTFN
         self.file_path = FakePath(support.TESTFN)
         self.addCleanup(support.unlink, self.file_name)
         with open(self.file_name, 'xb', 0) as file:
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
index 269ac06..cf3e4f0 100644
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -346,6 +346,65 @@
                           ('lazy', 7),
                           ('dog', 8)]))""")
 
+    def test_empty_simple_namespace(self):
+        ns = types.SimpleNamespace()
+        formatted = pprint.pformat(ns)
+        self.assertEqual(formatted, "namespace()")
+
+    def test_small_simple_namespace(self):
+        ns = types.SimpleNamespace(a=1, b=2)
+        formatted = pprint.pformat(ns)
+        self.assertEqual(formatted, "namespace(a=1, b=2)")
+
+    def test_simple_namespace(self):
+        ns = types.SimpleNamespace(
+            the=0,
+            quick=1,
+            brown=2,
+            fox=3,
+            jumped=4,
+            over=5,
+            a=6,
+            lazy=7,
+            dog=8,
+        )
+        formatted = pprint.pformat(ns, width=60)
+        self.assertEqual(formatted, """\
+namespace(the=0,
+          quick=1,
+          brown=2,
+          fox=3,
+          jumped=4,
+          over=5,
+          a=6,
+          lazy=7,
+          dog=8)""")
+
+    def test_simple_namespace_subclass(self):
+        class AdvancedNamespace(types.SimpleNamespace): pass
+        ns = AdvancedNamespace(
+            the=0,
+            quick=1,
+            brown=2,
+            fox=3,
+            jumped=4,
+            over=5,
+            a=6,
+            lazy=7,
+            dog=8,
+        )
+        formatted = pprint.pformat(ns, width=60)
+        self.assertEqual(formatted, """\
+AdvancedNamespace(the=0,
+                  quick=1,
+                  brown=2,
+                  fox=3,
+                  jumped=4,
+                  over=5,
+                  a=6,
+                  lazy=7,
+                  dog=8)""")
+
     def test_subclassing(self):
         o = {'names with spaces': 'should be presented using repr()',
              'others.should.not.be': 'like.this'}
@@ -422,7 +481,7 @@
         # Consequently, this test is fragile and
         # implementation-dependent.  Small changes to Python's sort
         # algorithm cause the test to fail when it should pass.
-        # XXX Or changes to the dictionary implmentation...
+        # XXX Or changes to the dictionary implementation...
 
         cube_repr_tgt = """\
 {frozenset(): frozenset({frozenset({2}), frozenset({0}), frozenset({1})}),
diff --git a/Lib/test/test_profile.py b/Lib/test/test_profile.py
index 01a8a6e..2336498 100644
--- a/Lib/test/test_profile.py
+++ b/Lib/test/test_profile.py
@@ -6,7 +6,7 @@
 import os
 from difflib import unified_diff
 from io import StringIO
-from test.support import TESTFN, run_unittest, unlink
+from test.support import TESTFN, run_unittest, unlink, temp_dir, change_cwd
 from contextlib import contextmanager
 
 import profile
@@ -111,6 +111,20 @@
         assert_python_ok('-m', self.profilermodule.__name__,
                          '-m', 'timeit', '-n', '1')
 
+    def test_output_file_when_changing_directory(self):
+        with temp_dir() as tmpdir, change_cwd(tmpdir):
+            os.mkdir('dest')
+            with open('demo.py', 'w') as f:
+                f.write('import os; os.chdir("dest")')
+
+            assert_python_ok(
+                '-m', self.profilermodule.__name__,
+                '-o', 'out.pstats',
+                'demo.py',
+            )
+
+            self.assertTrue(os.path.exists('out.pstats'))
+
 
 def regenerate_expected_output(filename, cls):
     filename = filename.rstrip('co')
diff --git a/Lib/test/test_property.py b/Lib/test/test_property.py
index f6f8f5e..172737a 100644
--- a/Lib/test/test_property.py
+++ b/Lib/test/test_property.py
@@ -183,6 +183,27 @@
             fake_prop.__init__('fget', 'fset', 'fdel', 'doc')
         self.assertAlmostEqual(gettotalrefcount() - refs_before, 0, delta=10)
 
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_class_property(self):
+        class A:
+            @classmethod
+            @property
+            def __doc__(cls):
+                return 'A doc for %r' % cls.__name__
+        self.assertEqual(A.__doc__, "A doc for 'A'")
+
+    @unittest.skipIf(sys.flags.optimize >= 2,
+                     "Docstrings are omitted with -O2 and above")
+    def test_class_property_override(self):
+        class A:
+            """First"""
+            @classmethod
+            @property
+            def __doc__(cls):
+                return 'Second'
+        self.assertEqual(A.__doc__, 'Second')
+
 
 # Issue 5890: subclasses of property do not preserve method __doc__ strings
 class PropertySub(property):
diff --git a/Lib/test/test_pstats.py b/Lib/test/test_pstats.py
index f835ce3..4f78b99 100644
--- a/Lib/test/test_pstats.py
+++ b/Lib/test/test_pstats.py
@@ -1,10 +1,11 @@
 import unittest
+
 from test import support
 from io import StringIO
-import pstats
 from pstats import SortKey
 
-
+import pstats
+import cProfile
 
 class AddCallersTestCase(unittest.TestCase):
     """Tests for pstats.add_callers helper."""
@@ -75,6 +76,28 @@
                           SortKey.TIME,
                           'calls')
 
+    def test_get_stats_profile(self):
+        def pass1(): pass
+        def pass2(): pass
+        def pass3(): pass
+
+        pr = cProfile.Profile()
+        pr.enable()
+        pass1()
+        pass2()
+        pass3()
+        pr.create_stats()
+        ps = pstats.Stats(pr)
+
+        stats_profile = ps.get_stats_profile()
+        funcs_called = set(stats_profile.func_profiles.keys())
+        self.assertIn('pass1', funcs_called)
+        self.assertIn('pass2', funcs_called)
+        self.assertIn('pass3', funcs_called)
+
+    def test_SortKey_enum(self):
+        self.assertEqual(SortKey.FILENAME, 'filename')
+        self.assertNotEqual(SortKey.FILENAME, SortKey.CALLS)
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py
index dfb3a3f..9c32467 100644
--- a/Lib/test/test_pty.py
+++ b/Lib/test/test_pty.py
@@ -200,8 +200,8 @@
             ##    raise TestFailed("Unexpected output from child: %r" % line)
 
             (pid, status) = os.waitpid(pid, 0)
-            res = status >> 8
-            debug("Child (%d) exited with status %d (%d)." % (pid, res, status))
+            res = os.waitstatus_to_exitcode(status)
+            debug("Child (%d) exited with code %d (status %d)." % (pid, res, status))
             if res == 1:
                 self.fail("Child raised an unexpected exception in os.setsid()")
             elif res == 2:
diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py
index d4a68c9..e6791c6 100644
--- a/Lib/test/test_py_compile.py
+++ b/Lib/test/test_py_compile.py
@@ -4,11 +4,13 @@
 import py_compile
 import shutil
 import stat
+import subprocess
 import sys
 import tempfile
 import unittest
 
 from test import support
+from test.support import script_helper
 
 
 def without_source_date_epoch(fxn):
@@ -216,5 +218,59 @@
     pass
 
 
+class PyCompileCLITestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.directory = tempfile.mkdtemp()
+        self.source_path = os.path.join(self.directory, '_test.py')
+        self.cache_path = importlib.util.cache_from_source(self.source_path)
+        with open(self.source_path, 'w') as file:
+            file.write('x = 123\n')
+
+    def tearDown(self):
+        support.rmtree(self.directory)
+
+    def pycompilecmd(self, *args, **kwargs):
+        # assert_python_* helpers don't return proc object. We'll just use
+        # subprocess.run() instead of spawn_python() and its friends to test
+        # stdin support of the CLI.
+        if args and args[0] == '-' and 'input' in kwargs:
+            return subprocess.run([sys.executable, '-m', 'py_compile', '-'],
+                                  input=kwargs['input'].encode(),
+                                  capture_output=True)
+        return script_helper.assert_python_ok('-m', 'py_compile', *args, **kwargs)
+
+    def pycompilecmd_failure(self, *args):
+        return script_helper.assert_python_failure('-m', 'py_compile', *args)
+
+    def test_stdin(self):
+        result = self.pycompilecmd('-', input=self.source_path)
+        self.assertEqual(result.returncode, 0)
+        self.assertEqual(result.stdout, b'')
+        self.assertEqual(result.stderr, b'')
+        self.assertTrue(os.path.exists(self.cache_path))
+
+    def test_with_files(self):
+        rc, stdout, stderr = self.pycompilecmd(self.source_path, self.source_path)
+        self.assertEqual(rc, 0)
+        self.assertEqual(stdout, b'')
+        self.assertEqual(stderr, b'')
+        self.assertTrue(os.path.exists(self.cache_path))
+
+    def test_bad_syntax(self):
+        bad_syntax = os.path.join(os.path.dirname(__file__), 'badsyntax_3131.py')
+        rc, stdout, stderr = self.pycompilecmd_failure(bad_syntax)
+        self.assertEqual(rc, 1)
+        self.assertEqual(stdout, b'')
+        self.assertIn(b'SyntaxError', stderr)
+
+    def test_file_not_exists(self):
+        should_not_exists = os.path.join(os.path.dirname(__file__), 'should_not_exists.py')
+        rc, stdout, stderr = self.pycompilecmd_failure(self.source_path, should_not_exists)
+        self.assertEqual(rc, 1)
+        self.assertEqual(stdout, b'')
+        self.assertIn(b'No such file or directory', stderr)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py
index fafe17c..869799c 100644
--- a/Lib/test/test_pyclbr.py
+++ b/Lib/test/test_pyclbr.py
@@ -223,9 +223,7 @@
         cm('random', ignore=('Random',))  # from _random import Random as CoreGenerator
         cm('cgi', ignore=('log',))      # set with = in module
         cm('pickle', ignore=('partial', 'PickleBuffer'))
-        # TODO(briancurtin): openfp is deprecated as of 3.7.
-        # Update this once it has been removed.
-        cm('aifc', ignore=('openfp', '_aifc_params'))  # set with = in module
+        cm('aifc', ignore=('_aifc_params',))  # set with = in module
         cm('sre_parse', ignore=('dump', 'groups', 'pos')) # from sre_constants import *; property
         cm('pdb')
         cm('pydoc', ignore=('input', 'output',)) # properties
@@ -249,7 +247,7 @@
         # not a package.
         #
         # Issue #14798.
-        self.assertRaises(ImportError, pyclbr.readmodule_ex, 'asyncore.foo')
+        self.assertRaises(ImportError, pyclbr.readmodule_ex, 'asyncio.foo')
 
     def test_module_has_no_spec(self):
         module_name = "doesnotexist"
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index c80477c..ffabb7f 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -476,6 +476,7 @@
     def test_non_str_name(self):
         # issue14638
         # Treat illegal (non-str) name like no name
+
         class A:
             __name__ = 42
         class B:
@@ -1254,7 +1255,9 @@
 
         X.attr.__doc__ = 'Custom descriptor'
         self.assertEqual(self._get_summary_lines(X.attr), """\
-<test.test_pydoc.TestDescriptions.test_custom_non_data_descriptor.<locals>.Descr object>""")
+<test.test_pydoc.TestDescriptions.test_custom_non_data_descriptor.<locals>.Descr object>
+    Custom descriptor
+""")
 
         X.attr.__name__ = 'foo'
         self.assertEqual(self._get_summary_lines(X.attr), """\
@@ -1311,6 +1314,17 @@
             'async <a name="-an_async_generator"><strong>an_async_generator',
             html)
 
+    def test_html_for_https_links(self):
+        def a_fn_with_https_link():
+            """a link https://localhost/"""
+            pass
+
+        html = pydoc.HTMLDoc().document(a_fn_with_https_link)
+        self.assertIn(
+            '<a href="https://localhost/">https://localhost/</a>',
+            html
+        )
+
 class PydocServerTest(unittest.TestCase):
     """Tests for pydoc._start_server"""
 
@@ -1325,7 +1339,7 @@
         self.assertIn('0.0.0.0', serverthread.docserver.address)
 
         starttime = time.monotonic()
-        timeout = 1  #seconds
+        timeout = test.support.SHORT_TIMEOUT
 
         while serverthread.serving:
             time.sleep(.01)
diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py
index 2b6c2d2..b2b4dea 100644
--- a/Lib/test/test_pyexpat.py
+++ b/Lib/test/test_pyexpat.py
@@ -3,6 +3,7 @@
 
 from io import BytesIO
 import os
+import platform
 import sys
 import sysconfig
 import unittest
@@ -230,7 +231,7 @@
         parser = expat.ParserCreate(namespace_separator='!')
         self._hookup_callbacks(parser, out)
 
-        parser.Parse(data, 1)
+        parser.Parse(data, True)
 
         operations = out.out
         self._verify_parse_output(operations)
@@ -242,7 +243,7 @@
         parser = expat.ParserCreate(namespace_separator='!')
         self._hookup_callbacks(parser, out)
 
-        parser.Parse(data.decode('iso-8859-1'), 1)
+        parser.Parse(data.decode('iso-8859-1'), True)
 
         operations = out.out
         self._verify_parse_output(operations)
@@ -315,7 +316,7 @@
             L.append(name)
         p.StartElementHandler = collector
         p.EndElementHandler = collector
-        p.Parse(b"<e> <e/> <e></e> </e>", 1)
+        p.Parse(b"<e> <e/> <e></e> </e>", True)
         tag = L[0]
         self.assertEqual(len(L), 6)
         for entry in L:
@@ -331,14 +332,14 @@
 
             def ExternalEntityRefHandler(self, context, base, sysId, pubId):
                 external_parser = self.parser.ExternalEntityParserCreate("")
-                self.parser_result = external_parser.Parse(b"", 1)
+                self.parser_result = external_parser.Parse(b"", True)
                 return 1
 
         parser = expat.ParserCreate(namespace_separator='!')
         parser.buffer_text = 1
         out = ExternalOutputter(parser)
         parser.ExternalEntityRefHandler = out.ExternalEntityRefHandler
-        parser.Parse(data, 1)
+        parser.Parse(data, True)
         self.assertEqual(out.parser_result, 1)
 
 
@@ -382,7 +383,7 @@
     def test_buffering_enabled(self):
         # Make sure buffering is turned on
         self.assertTrue(self.parser.buffer_text)
-        self.parser.Parse(b"<a>1<b/>2<c/>3</a>", 1)
+        self.parser.Parse(b"<a>1<b/>2<c/>3</a>", True)
         self.assertEqual(self.stuff, ['123'],
                          "buffered text not properly collapsed")
 
@@ -390,39 +391,39 @@
         # XXX This test exposes more detail of Expat's text chunking than we
         # XXX like, but it tests what we need to concisely.
         self.setHandlers(["StartElementHandler"])
-        self.parser.Parse(b"<a>1<b buffer-text='no'/>2\n3<c buffer-text='yes'/>4\n5</a>", 1)
+        self.parser.Parse(b"<a>1<b buffer-text='no'/>2\n3<c buffer-text='yes'/>4\n5</a>", True)
         self.assertEqual(self.stuff,
                          ["<a>", "1", "<b>", "2", "\n", "3", "<c>", "4\n5"],
                          "buffering control not reacting as expected")
 
     def test2(self):
-        self.parser.Parse(b"<a>1<b/>&lt;2&gt;<c/>&#32;\n&#x20;3</a>", 1)
+        self.parser.Parse(b"<a>1<b/>&lt;2&gt;<c/>&#32;\n&#x20;3</a>", True)
         self.assertEqual(self.stuff, ["1<2> \n 3"],
                          "buffered text not properly collapsed")
 
     def test3(self):
         self.setHandlers(["StartElementHandler"])
-        self.parser.Parse(b"<a>1<b/>2<c/>3</a>", 1)
+        self.parser.Parse(b"<a>1<b/>2<c/>3</a>", True)
         self.assertEqual(self.stuff, ["<a>", "1", "<b>", "2", "<c>", "3"],
                          "buffered text not properly split")
 
     def test4(self):
         self.setHandlers(["StartElementHandler", "EndElementHandler"])
         self.parser.CharacterDataHandler = None
-        self.parser.Parse(b"<a>1<b/>2<c/>3</a>", 1)
+        self.parser.Parse(b"<a>1<b/>2<c/>3</a>", True)
         self.assertEqual(self.stuff,
                          ["<a>", "<b>", "</b>", "<c>", "</c>", "</a>"])
 
     def test5(self):
         self.setHandlers(["StartElementHandler", "EndElementHandler"])
-        self.parser.Parse(b"<a>1<b></b>2<c/>3</a>", 1)
+        self.parser.Parse(b"<a>1<b></b>2<c/>3</a>", True)
         self.assertEqual(self.stuff,
             ["<a>", "1", "<b>", "</b>", "2", "<c>", "</c>", "3", "</a>"])
 
     def test6(self):
         self.setHandlers(["CommentHandler", "EndElementHandler",
                     "StartElementHandler"])
-        self.parser.Parse(b"<a>1<b/>2<c></c>345</a> ", 1)
+        self.parser.Parse(b"<a>1<b/>2<c></c>345</a> ", True)
         self.assertEqual(self.stuff,
             ["<a>", "1", "<b>", "</b>", "2", "<c>", "</c>", "345", "</a>"],
             "buffered text not properly split")
@@ -430,7 +431,7 @@
     def test7(self):
         self.setHandlers(["CommentHandler", "EndElementHandler",
                     "StartElementHandler"])
-        self.parser.Parse(b"<a>1<b/>2<c></c>3<!--abc-->4<!--def-->5</a> ", 1)
+        self.parser.Parse(b"<a>1<b/>2<c></c>3<!--abc-->4<!--def-->5</a> ", True)
         self.assertEqual(self.stuff,
                          ["<a>", "1", "<b>", "</b>", "2", "<c>", "</c>", "3",
                           "<!--abc-->", "4", "<!--def-->", "5", "</a>"],
@@ -450,7 +451,7 @@
         parser = expat.ParserCreate()
         parser.StartElementHandler = self.StartElementHandler
         try:
-            parser.Parse(b"<a><b><c/></b></a>", 1)
+            parser.Parse(b"<a><b><c/></b></a>", True)
             self.fail()
         except RuntimeError as e:
             self.assertEqual(e.args[0], 'a',
@@ -465,7 +466,7 @@
                                        "pyexpat.c", "StartElement")
             self.check_traceback_entry(entries[2],
                                        "test_pyexpat.py", "StartElementHandler")
-            if sysconfig.is_python_build():
+            if sysconfig.is_python_build() and not (sys.platform == 'win32' and platform.machine() == 'ARM'):
                 self.assertIn('call_with_frame("StartElement"', entries[1][3])
 
 
@@ -498,7 +499,7 @@
                               ('e', 15, 3, 6), ('e', 17, 4, 1), ('e', 22, 5, 0)]
 
         xml = b'<a>\n <b>\n  <c/>\n </b>\n</a>'
-        self.parser.Parse(xml, 1)
+        self.parser.Parse(xml, True)
 
 
 class sf1296433Test(unittest.TestCase):
@@ -578,7 +579,7 @@
 
         # Parse one chunk of XML
         self.n = 0
-        parser.Parse(xml1, 0)
+        parser.Parse(xml1, False)
         self.assertEqual(parser.buffer_size, 1024)
         self.assertEqual(self.n, 1)
 
@@ -587,13 +588,13 @@
         self.assertFalse(parser.buffer_text)
         self.assertEqual(parser.buffer_size, 1024)
         for i in range(10):
-            parser.Parse(xml2, 0)
+            parser.Parse(xml2, False)
         self.assertEqual(self.n, 11)
 
         parser.buffer_text = 1
         self.assertTrue(parser.buffer_text)
         self.assertEqual(parser.buffer_size, 1024)
-        parser.Parse(xml3, 1)
+        parser.Parse(xml3, True)
         self.assertEqual(self.n, 12)
 
     def counting_handler(self, text):
@@ -620,10 +621,10 @@
         self.assertEqual(parser.buffer_size, 1024)
 
         self.n = 0
-        parser.Parse(xml1, 0)
+        parser.Parse(xml1, False)
         parser.buffer_size *= 2
         self.assertEqual(parser.buffer_size, 2048)
-        parser.Parse(xml2, 1)
+        parser.Parse(xml2, True)
         self.assertEqual(self.n, 2)
 
     def test_change_size_2(self):
@@ -636,10 +637,10 @@
         self.assertEqual(parser.buffer_size, 2048)
 
         self.n=0
-        parser.Parse(xml1, 0)
+        parser.Parse(xml1, False)
         parser.buffer_size = parser.buffer_size // 2
         self.assertEqual(parser.buffer_size, 1024)
-        parser.Parse(xml2, 1)
+        parser.Parse(xml2, True)
         self.assertEqual(self.n, 4)
 
 class MalformedInputTest(unittest.TestCase):
diff --git a/Lib/test/test_queue.py b/Lib/test/test_queue.py
index 46e2a8c..d88e28a 100644
--- a/Lib/test/test_queue.py
+++ b/Lib/test/test_queue.py
@@ -63,7 +63,7 @@
                           block_func)
             return self.result
         finally:
-            support.join_thread(thread, 10) # make sure the thread terminates
+            support.join_thread(thread) # make sure the thread terminates
 
     # Call this instead if block_func is supposed to raise an exception.
     def do_exceptional_blocking_test(self,block_func, block_args, trigger_func,
@@ -79,7 +79,7 @@
                 self.fail("expected exception of kind %r" %
                                  expected_exception_class)
         finally:
-            support.join_thread(thread, 10) # make sure the thread terminates
+            support.join_thread(thread) # make sure the thread terminates
             if not thread.startedEvent.is_set():
                 self.fail("trigger thread ended but event never set")
 
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index 899ca10..a80e71e 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -5,11 +5,13 @@
 import time
 import pickle
 import warnings
+import test.support
+
 from functools import partial
 from math import log, exp, pi, fsum, sin, factorial
 from test import support
 from fractions import Fraction
-
+from collections import Counter
 
 class TestBasicOps:
     # Superclass with tests common to all generators.
@@ -41,11 +43,17 @@
         class MySeed(object):
             def __hash__(self):
                 return -1729
-        for arg in [None, 0, 0, 1, 1, -1, -1, 10**20, -(10**20),
-                    3.14, 1+2j, 'a', tuple('abc'), MySeed()]:
+        for arg in [None, 0, 1, -1, 10**20, -(10**20),
+                    False, True, 3.14, 'a']:
             self.gen.seed(arg)
+
+        for arg in [1+2j, tuple('abc'), MySeed()]:
+            with self.assertWarns(DeprecationWarning):
+                self.gen.seed(arg)
+
         for arg in [list(range(3)), dict(one=1)]:
-            self.assertRaises(TypeError, self.gen.seed, arg)
+            with self.assertWarns(DeprecationWarning):
+                self.assertRaises(TypeError, self.gen.seed, arg)
         self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4)
         self.assertRaises(TypeError, type(self.gen), [])
 
@@ -97,7 +105,8 @@
         shuffle = self.gen.shuffle
         mock_random = unittest.mock.Mock(return_value=0.5)
         seq = bytearray(b'abcdefghijk')
-        shuffle(seq, mock_random)
+        with self.assertWarns(DeprecationWarning):
+            shuffle(seq, mock_random)
         mock_random.assert_called_with()
 
     def test_choice(self):
@@ -141,7 +150,6 @@
 
     def test_sample_inputs(self):
         # SF bug #801342 -- population can be any iterable defining __len__()
-        self.gen.sample(set(range(20)), 2)
         self.gen.sample(range(20), 2)
         self.gen.sample(range(20), 2)
         self.gen.sample(str('abcdefghijklmnopqrst'), 2)
@@ -150,6 +158,82 @@
     def test_sample_on_dicts(self):
         self.assertRaises(TypeError, self.gen.sample, dict.fromkeys('abcdef'), 2)
 
+    def test_sample_on_sets(self):
+        with self.assertWarns(DeprecationWarning):
+            population = {10, 20, 30, 40, 50, 60, 70}
+            self.gen.sample(population, k=5)
+
+    def test_sample_with_counts(self):
+        sample = self.gen.sample
+
+        # General case
+        colors = ['red', 'green', 'blue', 'orange', 'black', 'brown', 'amber']
+        counts = [500,      200,     20,       10,       5,       0,       1 ]
+        k = 700
+        summary = Counter(sample(colors, counts=counts, k=k))
+        self.assertEqual(sum(summary.values()), k)
+        for color, weight in zip(colors, counts):
+            self.assertLessEqual(summary[color], weight)
+        self.assertNotIn('brown', summary)
+
+        # Case that exhausts the population
+        k = sum(counts)
+        summary = Counter(sample(colors, counts=counts, k=k))
+        self.assertEqual(sum(summary.values()), k)
+        for color, weight in zip(colors, counts):
+            self.assertLessEqual(summary[color], weight)
+        self.assertNotIn('brown', summary)
+
+        # Case with population size of 1
+        summary = Counter(sample(['x'], counts=[10], k=8))
+        self.assertEqual(summary, Counter(x=8))
+
+        # Case with all counts equal.
+        nc = len(colors)
+        summary = Counter(sample(colors, counts=[10]*nc, k=10*nc))
+        self.assertEqual(summary, Counter(10*colors))
+
+        # Test error handling
+        with self.assertRaises(TypeError):
+            sample(['red', 'green', 'blue'], counts=10, k=10)               # counts not iterable
+        with self.assertRaises(ValueError):
+            sample(['red', 'green', 'blue'], counts=[-3, -7, -8], k=2)      # counts are negative
+        with self.assertRaises(ValueError):
+            sample(['red', 'green', 'blue'], counts=[0, 0, 0], k=2)         # counts are zero
+        with self.assertRaises(ValueError):
+            sample(['red', 'green'], counts=[10, 10], k=21)                 # population too small
+        with self.assertRaises(ValueError):
+            sample(['red', 'green', 'blue'], counts=[1, 2], k=2)            # too few counts
+        with self.assertRaises(ValueError):
+            sample(['red', 'green', 'blue'], counts=[1, 2, 3, 4], k=2)      # too many counts
+
+    def test_sample_counts_equivalence(self):
+        # Test the documented strong equivalence to a sample with repeated elements.
+        # We run this test on random.Random() which makes deterministic selections
+        # for a given seed value.
+        sample = random.sample
+        seed = random.seed
+
+        colors =  ['red', 'green', 'blue', 'orange', 'black', 'amber']
+        counts = [500,      200,     20,       10,       5,       1 ]
+        k = 700
+        seed(8675309)
+        s1 = sample(colors, counts=counts, k=k)
+        seed(8675309)
+        expanded = [color for (color, count) in zip(colors, counts) for i in range(count)]
+        self.assertEqual(len(expanded), sum(counts))
+        s2 = sample(expanded, k=k)
+        self.assertEqual(s1, s2)
+
+        pop = 'abcdefghi'
+        counts = [10, 9, 8, 7, 6, 5, 4, 3, 2]
+        seed(8675309)
+        s1 = ''.join(sample(pop, counts=counts, k=30))
+        expanded = ''.join([letter for (letter, count) in zip(pop, counts) for i in range(count)])
+        seed(8675309)
+        s2 = ''.join(sample(expanded, k=30))
+        self.assertEqual(s1, s2)
+
     def test_choices(self):
         choices = self.gen.choices
         data = ['red', 'green', 'blue', 'yellow']
@@ -235,6 +319,11 @@
         choices = self.gen.choices
         choices(population=[1, 2], weights=[1e-323, 1e-323], k=5000)
 
+    def test_choices_with_all_zero_weights(self):
+        # See issue #38881
+        with self.assertRaises(ValueError):
+            self.gen.choices('AB', [0.0, 0.0])
+
     def test_gauss(self):
         # Ensure that the seed() method initializes all the hidden state.  In
         # particular, through 2.2.1 it failed to reset a piece of state used
@@ -252,6 +341,31 @@
             self.assertEqual(x1, x2)
             self.assertEqual(y1, y2)
 
+    def test_getrandbits(self):
+        # Verify ranges
+        for k in range(1, 1000):
+            self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k)
+        self.assertEqual(self.gen.getrandbits(0), 0)
+
+        # Verify all bits active
+        getbits = self.gen.getrandbits
+        for span in [1, 2, 3, 4, 31, 32, 32, 52, 53, 54, 119, 127, 128, 129]:
+            all_bits = 2**span-1
+            cum = 0
+            cpl_cum = 0
+            for i in range(100):
+                v = getbits(span)
+                cum |= v
+                cpl_cum |= all_bits ^ v
+            self.assertEqual(cum, all_bits)
+            self.assertEqual(cpl_cum, all_bits)
+
+        # Verify argument checking
+        self.assertRaises(TypeError, self.gen.getrandbits)
+        self.assertRaises(TypeError, self.gen.getrandbits, 1, 2)
+        self.assertRaises(ValueError, self.gen.getrandbits, -1)
+        self.assertRaises(TypeError, self.gen.getrandbits, 10.1)
+
     def test_pickling(self):
         for proto in range(pickle.HIGHEST_PROTOCOL + 1):
             state = pickle.dumps(self.gen, proto)
@@ -260,6 +374,14 @@
             restoredseq = [newgen.random() for i in range(10)]
             self.assertEqual(origseq, restoredseq)
 
+    @test.support.cpython_only
+    def test_bug_41052(self):
+        # _random.Random should not be allowed to serialization
+        import _random
+        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+            r = _random.Random()
+            self.assertRaises(TypeError, pickle.dumps, r, proto)
+
     def test_bug_1727780(self):
         # verify that version-2-pickles can be loaded
         # fine, whether they are created on 32-bit or 64-bit
@@ -280,6 +402,22 @@
         k = sum(randrange(6755399441055744) % 3 == 2 for i in range(n))
         self.assertTrue(0.30 < k/n < .37, (k/n))
 
+    def test_randbytes(self):
+        # Verify ranges
+        for n in range(1, 10):
+            data = self.gen.randbytes(n)
+            self.assertEqual(type(data), bytes)
+            self.assertEqual(len(data), n)
+
+        self.assertEqual(self.gen.randbytes(0), b'')
+
+        # Verify argument checking
+        self.assertRaises(TypeError, self.gen.randbytes)
+        self.assertRaises(TypeError, self.gen.randbytes, 1, 2)
+        self.assertRaises(ValueError, self.gen.randbytes, -1)
+        self.assertRaises(TypeError, self.gen.randbytes, 1.0)
+
+
 try:
     random.SystemRandom().random()
 except NotImplementedError:
@@ -363,26 +501,6 @@
         raises(0, 42, 0)
         raises(0, 42, 3.14159)
 
-    def test_genrandbits(self):
-        # Verify ranges
-        for k in range(1, 1000):
-            self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k)
-
-        # Verify all bits active
-        getbits = self.gen.getrandbits
-        for span in [1, 2, 3, 4, 31, 32, 32, 52, 53, 54, 119, 127, 128, 129]:
-            cum = 0
-            for i in range(100):
-                cum |= getbits(span)
-            self.assertEqual(cum, 2**span-1)
-
-        # Verify argument checking
-        self.assertRaises(TypeError, self.gen.getrandbits)
-        self.assertRaises(TypeError, self.gen.getrandbits, 1, 2)
-        self.assertRaises(ValueError, self.gen.getrandbits, 0)
-        self.assertRaises(ValueError, self.gen.getrandbits, -1)
-        self.assertRaises(TypeError, self.gen.getrandbits, 10.1)
-
     def test_randbelow_logic(self, _log=log, int=int):
         # check bitcount transition points:  2**i and 2**(i+1)-1
         # show that: k = int(1.001 + _log(n, 2))
@@ -602,34 +720,18 @@
             self.assertEqual(set(range(start,stop)),
                 set([self.gen.randrange(start,stop) for i in range(100)]))
 
-    def test_genrandbits(self):
+    def test_getrandbits(self):
+        super().test_getrandbits()
+
         # Verify cross-platform repeatability
         self.gen.seed(1234567)
         self.assertEqual(self.gen.getrandbits(100),
                          97904845777343510404718956115)
-        # Verify ranges
-        for k in range(1, 1000):
-            self.assertTrue(0 <= self.gen.getrandbits(k) < 2**k)
-
-        # Verify all bits active
-        getbits = self.gen.getrandbits
-        for span in [1, 2, 3, 4, 31, 32, 32, 52, 53, 54, 119, 127, 128, 129]:
-            cum = 0
-            for i in range(100):
-                cum |= getbits(span)
-            self.assertEqual(cum, 2**span-1)
-
-        # Verify argument checking
-        self.assertRaises(TypeError, self.gen.getrandbits)
-        self.assertRaises(TypeError, self.gen.getrandbits, 'a')
-        self.assertRaises(TypeError, self.gen.getrandbits, 1, 2)
-        self.assertRaises(ValueError, self.gen.getrandbits, 0)
-        self.assertRaises(ValueError, self.gen.getrandbits, -1)
 
     def test_randrange_uses_getrandbits(self):
         # Verify use of getrandbits by randrange
         # Use same seed as in the cross-platform repeatability test
-        # in test_genrandbits above.
+        # in test_getrandbits above.
         self.gen.seed(1234567)
         # If randrange uses getrandbits, it should pick getrandbits(100)
         # when called with a 100-bits stop argument.
@@ -668,10 +770,10 @@
                 maxsize+1, maxsize=maxsize
             )
         self.gen._randbelow_without_getrandbits(5640, maxsize=maxsize)
-        # issue 33203: test that _randbelow raises ValueError on
+        # issue 33203: test that _randbelow returns zero on
         # n == 0 also in its getrandbits-independent branch.
-        with self.assertRaises(ValueError):
-            self.gen._randbelow_without_getrandbits(0, maxsize=maxsize)
+        x = self.gen._randbelow_without_getrandbits(0, maxsize=maxsize)
+        self.assertEqual(x, 0)
 
         # This might be going too far to test a single line, but because of our
         # noble aim of achieving 100% test coverage we need to write a case in
@@ -736,6 +838,57 @@
         c = self.gen.choices(population, cum_weights=cum_weights, k=10000)
         self.assertEqual(a, c)
 
+    def test_randbytes(self):
+        super().test_randbytes()
+
+        # Mersenne Twister randbytes() is deterministic
+        # and does not depend on the endian and bitness.
+        seed = 8675309
+        expected = b'3\xa8\xf9f\xf4\xa4\xd06\x19\x8f\x9f\x82\x02oe\xf0'
+
+        self.gen.seed(seed)
+        self.assertEqual(self.gen.randbytes(16), expected)
+
+        # randbytes(0) must not consume any entropy
+        self.gen.seed(seed)
+        self.assertEqual(self.gen.randbytes(0), b'')
+        self.assertEqual(self.gen.randbytes(16), expected)
+
+        # Four randbytes(4) calls give the same output than randbytes(16)
+        self.gen.seed(seed)
+        self.assertEqual(b''.join([self.gen.randbytes(4) for _ in range(4)]),
+                         expected)
+
+        # Each randbytes(1), randbytes(2) or randbytes(3) call consumes
+        # 4 bytes of entropy
+        self.gen.seed(seed)
+        expected1 = expected[3::4]
+        self.assertEqual(b''.join(self.gen.randbytes(1) for _ in range(4)),
+                         expected1)
+
+        self.gen.seed(seed)
+        expected2 = b''.join(expected[i + 2: i + 4]
+                             for i in range(0, len(expected), 4))
+        self.assertEqual(b''.join(self.gen.randbytes(2) for _ in range(4)),
+                         expected2)
+
+        self.gen.seed(seed)
+        expected3 = b''.join(expected[i + 1: i + 4]
+                             for i in range(0, len(expected), 4))
+        self.assertEqual(b''.join(self.gen.randbytes(3) for _ in range(4)),
+                         expected3)
+
+    def test_randbytes_getrandbits(self):
+        # There is a simple relation between randbytes() and getrandbits()
+        seed = 2849427419
+        gen2 = random.Random()
+        self.gen.seed(seed)
+        gen2.seed(seed)
+        for n in range(9):
+            self.assertEqual(self.gen.randbytes(n),
+                             gen2.getrandbits(n * 8).to_bytes(n, 'little'))
+
+
 def gamma(z, sqrt2pi=(2.0*pi)**0.5):
     # Reflection to right half of complex plane
     if z < 0.5:
@@ -1092,8 +1245,7 @@
                 child_val = eval(f.read())
             self.assertNotEqual(val, child_val)
 
-            pid, status = os.waitpid(pid, 0)
-            self.assertEqual(status, 0)
+            support.wait_process(pid, exitcode=0)
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_range.py b/Lib/test/test_range.py
index 94c96a9..30fa129 100644
--- a/Lib/test/test_range.py
+++ b/Lib/test/test_range.py
@@ -4,6 +4,7 @@
 import sys
 import pickle
 import itertools
+from test.support import ALWAYS_EQ
 
 # pure Python implementations (3 args only), for comparison
 def pyrange(start, stop, step):
@@ -90,6 +91,19 @@
         r = range(-sys.maxsize, sys.maxsize, 2)
         self.assertEqual(len(r), sys.maxsize)
 
+    def test_range_constructor_error_messages(self):
+        with self.assertRaisesRegex(
+                TypeError,
+                "range expected at least 1 argument, got 0"
+        ):
+            range()
+
+        with self.assertRaisesRegex(
+                TypeError,
+                "range expected at most 3 arguments, got 6"
+        ):
+            range(1, 2, 3, 4, 5, 6)
+
     def test_large_operands(self):
         x = range(10**20, 10**20+10, 3)
         self.assertEqual(len(x), 4)
@@ -289,11 +303,7 @@
         self.assertRaises(ValueError, range(1, 2**100, 2).index, 2**87)
         self.assertEqual(range(1, 2**100, 2).index(2**87+1), 2**86)
 
-        class AlwaysEqual(object):
-            def __eq__(self, other):
-                return True
-        always_equal = AlwaysEqual()
-        self.assertEqual(range(10).index(always_equal), 0)
+        self.assertEqual(range(10).index(ALWAYS_EQ), 0)
 
     def test_user_index_method(self):
         bignum = 2*sys.maxsize
@@ -344,11 +354,7 @@
         self.assertEqual(range(1, 2**100, 2).count(2**87), 0)
         self.assertEqual(range(1, 2**100, 2).count(2**87+1), 1)
 
-        class AlwaysEqual(object):
-            def __eq__(self, other):
-                return True
-        always_equal = AlwaysEqual()
-        self.assertEqual(range(10).count(always_equal), 10)
+        self.assertEqual(range(10).count(ALWAYS_EQ), 10)
 
         self.assertEqual(len(range(sys.maxsize, sys.maxsize+10)), 10)
 
@@ -429,9 +435,7 @@
         self.assertIn(True, range(3))
         self.assertIn(1+0j, range(3))
 
-        class C1:
-            def __eq__(self, other): return True
-        self.assertIn(C1(), range(3))
+        self.assertIn(ALWAYS_EQ, range(3))
 
         # Objects are never coerced into other types for comparison.
         class C2:
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index 4817d76..1bfbcb8 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -2217,7 +2217,7 @@
 
     def test_re_tests(self):
         're_tests test suite'
-        from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR
+        from test.re_tests import tests, FAIL, SYNTAX_ERROR
         for t in tests:
             pattern = s = outcome = repl = expected = None
             if len(t) == 5:
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index f89b1af..a77638b 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -5,7 +5,6 @@
 """
 
 import contextlib
-import faulthandler
 import glob
 import io
 import os.path
@@ -55,8 +54,6 @@
                     libregrtest._parse_args([opt])
                 self.assertIn('Run Python regression tests.', out.getvalue())
 
-    @unittest.skipUnless(hasattr(faulthandler, 'dump_traceback_later'),
-                         "faulthandler.dump_traceback_later() required")
     def test_timeout(self):
         ns = libregrtest._parse_args(['--timeout', '4.2'])
         self.assertEqual(ns.timeout, 4.2)
@@ -520,7 +517,7 @@
         if not input:
             input = ''
         if 'stderr' not in kw:
-            kw['stderr'] = subprocess.PIPE
+            kw['stderr'] = subprocess.STDOUT
         proc = subprocess.run(args,
                               universal_newlines=True,
                               input=input,
@@ -592,8 +589,7 @@
         self.python_args = ['-Wd', '-E', '-bb']
         self.regrtest_args = ['-uall', '-rwW',
                               '--testdir=%s' % self.tmptestdir]
-        if hasattr(faulthandler, 'dump_traceback_later'):
-            self.regrtest_args.extend(('--timeout', '3600', '-j4'))
+        self.regrtest_args.extend(('--timeout', '3600', '-j4'))
         if sys.platform == 'win32':
             self.regrtest_args.append('-n')
 
@@ -664,6 +660,8 @@
         test_args = ['--testdir=%s' % self.tmptestdir]
         if platform.machine() == 'ARM64':
             test_args.append('-arm64') # ARM 64-bit build
+        elif platform.machine() == 'ARM':
+            test_args.append('-arm32')   # 32-bit ARM build
         elif platform.architecture()[0] == '64bit':
             test_args.append('-x64')   # 64-bit build
         if not Py_DEBUG:
@@ -679,6 +677,8 @@
         rt_args = ["-q"]             # Quick, don't run tests twice
         if platform.machine() == 'ARM64':
             rt_args.append('-arm64') # ARM 64-bit build
+        elif platform.machine() == 'ARM':
+            rt_args.append('-arm32')   # 32-bit ARM build
         elif platform.architecture()[0] == '64bit':
             rt_args.append('-x64')   # 64-bit build
         if Py_DEBUG:
@@ -1233,6 +1233,39 @@
         self.assertRegex(output,
                          re.compile('%s timed out' % testname, re.MULTILINE))
 
+    def test_unraisable_exc(self):
+        # --fail-env-changed must catch unraisable exception.
+        # The exceptioin must be displayed even if sys.stderr is redirected.
+        code = textwrap.dedent(r"""
+            import unittest
+            import weakref
+            from test.support import captured_stderr
+
+            class MyObject:
+                pass
+
+            def weakref_callback(obj):
+                raise Exception("weakref callback bug")
+
+            class Tests(unittest.TestCase):
+                def test_unraisable_exc(self):
+                    obj = MyObject()
+                    ref = weakref.ref(obj, weakref_callback)
+                    with captured_stderr() as stderr:
+                        # call weakref_callback() which logs
+                        # an unraisable exception
+                        obj = None
+                    self.assertEqual(stderr.getvalue(), '')
+        """)
+        testname = self.create_test(code=code)
+
+        output = self.run_tests("--fail-env-changed", "-v", testname, exitcode=3)
+        self.check_executed_tests(output, [testname],
+                                  env_changed=[testname],
+                                  fail_env_changed=True)
+        self.assertIn("Warning -- Unraisable exception", output)
+        self.assertIn("Exception: weakref callback bug", output)
+
     def test_cleanup(self):
         dirname = os.path.join(self.tmptestdir, "test_python_123")
         os.mkdir(dirname)
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index 77cd7c4..a3112b8 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -4,6 +4,7 @@
 import unittest
 import urllib.robotparser
 from test import support
+from test.support import socket_helper
 from http.server import BaseHTTPRequestHandler, HTTPServer
 
 
@@ -309,7 +310,10 @@
 class PasswordProtectedSiteTestCase(unittest.TestCase):
 
     def setUp(self):
-        self.server = HTTPServer((support.HOST, 0), RobotHandler)
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
+        self.server = HTTPServer((socket_helper.HOST, 0), RobotHandler)
 
         self.t = threading.Thread(
             name='HTTPServer serving',
@@ -329,7 +333,7 @@
     @support.reap_threads
     def testPasswordProtectedSite(self):
         addr = self.server.server_address
-        url = 'http://' + support.HOST + ':' + str(addr[1])
+        url = 'http://' + socket_helper.HOST + ':' + str(addr[1])
         robots_url = url + "/robots.txt"
         parser = urllib.robotparser.RobotFileParser()
         parser.set_url(url)
@@ -345,7 +349,7 @@
     @classmethod
     def setUpClass(cls):
         support.requires('network')
-        with support.transient_internet(cls.base_url):
+        with socket_helper.transient_internet(cls.base_url):
             cls.parser = urllib.robotparser.RobotFileParser(cls.robots_txt)
             cls.parser.read()
 
diff --git a/Lib/test/test_runpy.py b/Lib/test/test_runpy.py
index 84834d3..4aaf75b 100644
--- a/Lib/test/test_runpy.py
+++ b/Lib/test/test_runpy.py
@@ -1,14 +1,17 @@
 # Test the runpy module
-import unittest
-import os
+import contextlib
+import importlib.machinery, importlib.util
 import os.path
-import sys
-import re
-import tempfile
-import importlib, importlib.machinery, importlib.util
-import py_compile
-import warnings
 import pathlib
+import py_compile
+import re
+import signal
+import subprocess
+import sys
+import tempfile
+import textwrap
+import unittest
+import warnings
 from test.support import (
     forget, make_legacy_pyc, unload, verbose, no_tracing,
     create_empty_file, temp_dir)
@@ -752,5 +755,82 @@
             self.assertEqual(result['s'], "non-ASCII: h\xe9")
 
 
+class TestExit(unittest.TestCase):
+    STATUS_CONTROL_C_EXIT = 0xC000013A
+    EXPECTED_CODE = (
+        STATUS_CONTROL_C_EXIT
+        if sys.platform == "win32"
+        else -signal.SIGINT
+    )
+    @staticmethod
+    @contextlib.contextmanager
+    def tmp_path(*args, **kwargs):
+        with temp_dir() as tmp_fn:
+            yield pathlib.Path(tmp_fn)
+
+
+    def run(self, *args, **kwargs):
+        with self.tmp_path() as tmp:
+            self.ham = ham = tmp / "ham.py"
+            ham.write_text(
+                textwrap.dedent(
+                    """\
+                    raise KeyboardInterrupt
+                    """
+                )
+            )
+            super().run(*args, **kwargs)
+
+    def assertSigInt(self, *args, **kwargs):
+        proc = subprocess.run(*args, **kwargs, text=True, stderr=subprocess.PIPE)
+        self.assertTrue(proc.stderr.endswith("\nKeyboardInterrupt\n"))
+        self.assertEqual(proc.returncode, self.EXPECTED_CODE)
+
+    def test_pymain_run_file(self):
+        self.assertSigInt([sys.executable, self.ham])
+
+    def test_pymain_run_file_runpy_run_module(self):
+        tmp = self.ham.parent
+        run_module = tmp / "run_module.py"
+        run_module.write_text(
+            textwrap.dedent(
+                """\
+                import runpy
+                runpy.run_module("ham")
+                """
+            )
+        )
+        self.assertSigInt([sys.executable, run_module], cwd=tmp)
+
+    def test_pymain_run_file_runpy_run_module_as_main(self):
+        tmp = self.ham.parent
+        run_module_as_main = tmp / "run_module_as_main.py"
+        run_module_as_main.write_text(
+            textwrap.dedent(
+                """\
+                import runpy
+                runpy._run_module_as_main("ham")
+                """
+            )
+        )
+        self.assertSigInt([sys.executable, run_module_as_main], cwd=tmp)
+
+    def test_pymain_run_command_run_module(self):
+        self.assertSigInt(
+            [sys.executable, "-c", "import runpy; runpy.run_module('ham')"],
+            cwd=self.ham.parent,
+        )
+
+    def test_pymain_run_command(self):
+        self.assertSigInt([sys.executable, "-c", "import ham"], cwd=self.ham.parent)
+
+    def test_pymain_run_stdin(self):
+        self.assertSigInt([sys.executable], input="import ham", cwd=self.ham.parent)
+
+    def test_pymain_run_module(self):
+        ham = self.ham
+        self.assertSigInt([sys.executable, "-m", ham.stem], cwd=ham.parent)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index da4eb1d..ce3a422 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -20,6 +20,7 @@
 import os.path
 import shutil
 from urllib.error import URLError
+import urllib.request
 from test import support
 from test.support import findfile, run_unittest, FakePath, TESTFN
 
@@ -979,6 +980,9 @@
         self.assertEqual(handler._entities, [("img", None, "expat.gif", "GIF")])
 
     def test_expat_external_dtd_enabled(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         parser = create_parser()
         parser.setFeature(feature_external_ges, True)
         resolver = self.TestEntityRecorder()
diff --git a/Lib/test/test_sched.py b/Lib/test/test_sched.py
index 3f84af2..26cb4be 100644
--- a/Lib/test/test_sched.py
+++ b/Lib/test/test_sched.py
@@ -6,7 +6,7 @@
 from test import support
 
 
-TIMEOUT = 10
+TIMEOUT = support.SHORT_TIMEOUT
 
 
 class Timer:
@@ -82,7 +82,7 @@
         self.assertEqual(q.get(timeout=TIMEOUT), 5)
         self.assertTrue(q.empty())
         timer.advance(1000)
-        support.join_thread(t, timeout=TIMEOUT)
+        support.join_thread(t)
         self.assertTrue(q.empty())
         self.assertEqual(timer.time(), 5)
 
@@ -137,7 +137,7 @@
         self.assertEqual(q.get(timeout=TIMEOUT), 4)
         self.assertTrue(q.empty())
         timer.advance(1000)
-        support.join_thread(t, timeout=TIMEOUT)
+        support.join_thread(t)
         self.assertTrue(q.empty())
         self.assertEqual(timer.time(), 4)
 
diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py
index 3161122..2274c39 100644
--- a/Lib/test/test_selectors.py
+++ b/Lib/test/test_selectors.py
@@ -6,6 +6,7 @@
 import socket
 import sys
 from test import support
+from test.support import socket_helper
 from time import sleep
 import unittest
 import unittest.mock
@@ -22,7 +23,7 @@
 else:
     def socketpair(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0):
         with socket.socket(family, type, proto) as l:
-            l.bind((support.HOST, 0))
+            l.bind((socket_helper.HOST, 0))
             l.listen()
             c = socket.socket(family, type, proto)
             try:
@@ -543,6 +544,19 @@
         with self.assertRaises(KeyError):
             s.get_key(bad_f)
 
+    def test_empty_select_timeout(self):
+        # Issues #23009, #29255: Make sure timeout is applied when no fds
+        # are registered.
+        s = self.SELECTOR()
+        self.addCleanup(s.close)
+
+        t0 = time()
+        self.assertEqual(s.select(1), [])
+        t1 = time()
+        dt = t1 - t0
+        # Tolerate 2.0 seconds for very slow buildbots
+        self.assertTrue(0.8 <= dt <= 2.0, dt)
+
 
 @unittest.skipUnless(hasattr(selectors, 'DevpollSelector'),
                      "Test needs selectors.DevpollSelector")
diff --git a/Lib/test/test_setcomps.py b/Lib/test/test_setcomps.py
index fb7cde0..ecc4fff 100644
--- a/Lib/test/test_setcomps.py
+++ b/Lib/test/test_setcomps.py
@@ -21,6 +21,22 @@
     >>> list(sorted({(i,j) for i in range(4) for j in range(i)}))
     [(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]
 
+Test the idiom for temporary variable assignment in comprehensions.
+
+    >>> sorted({j*j for i in range(4) for j in [i+1]})
+    [1, 4, 9, 16]
+    >>> sorted({j*k for i in range(4) for j in [i+1] for k in [j+1]})
+    [2, 6, 12, 20]
+    >>> sorted({j*k for i in range(4) for j, k in [(i+1, i+2)]})
+    [2, 6, 12, 20]
+
+Not assignment
+
+    >>> sorted({i*i for i in [*range(4)]})
+    [0, 1, 4, 9]
+    >>> sorted({i*i for i in (*range(4),)})
+    [0, 1, 4, 9]
+
 Make sure the induction variable is not exposed
 
     >>> i = 20
diff --git a/Lib/test/test_shlex.py b/Lib/test/test_shlex.py
index a21ccd2..3081a78 100644
--- a/Lib/test/test_shlex.py
+++ b/Lib/test/test_shlex.py
@@ -3,7 +3,7 @@
 import shlex
 import string
 import unittest
-
+from unittest import mock
 
 
 # The original test data set was from shellwords, by Hartmut Goebel.
@@ -162,6 +162,11 @@
             tok = lex.get_token()
         return ret
 
+    @mock.patch('sys.stdin', io.StringIO())
+    def testSplitNoneDeprecation(self):
+        with self.assertWarns(DeprecationWarning):
+            shlex.split(None)
+
     def testSplitPosix(self):
         """Test data splitting with posix parser"""
         self.splitTest(self.posix_data, comments=True)
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index bcb7e49..e19af64 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -123,12 +123,12 @@
     srcname = None
     dstname = None
     try:
-        with tempfile.NamedTemporaryFile("wb", delete=False) as f:
+        with tempfile.NamedTemporaryFile("wb", dir=os.getcwd(), delete=False) as f:
             srcname = f.name
             f.write(b"0123456789")
 
         with open(srcname, "rb") as src:
-            with tempfile.NamedTemporaryFile("wb", delete=False) as dst:
+            with tempfile.NamedTemporaryFile("wb", dir=os.getcwd(), delete=False) as dst:
                 dstname = dst.name
                 infd = src.fileno()
                 outfd = dst.fileno()
@@ -159,31 +159,21 @@
     else:
         return True
 
-class TestShutil(unittest.TestCase):
 
-    def setUp(self):
-        super(TestShutil, self).setUp()
-        self.tempdirs = []
+class BaseTest:
 
-    def tearDown(self):
-        super(TestShutil, self).tearDown()
-        while self.tempdirs:
-            d = self.tempdirs.pop()
-            shutil.rmtree(d, os.name in ('nt', 'cygwin'))
-
-
-    def mkdtemp(self):
+    def mkdtemp(self, prefix=None):
         """Create a temporary directory that will be cleaned up.
 
         Returns the path of the directory.
         """
-        basedir = None
-        if sys.platform == "win32":
-            basedir = os.path.realpath(os.getcwd())
-        d = tempfile.mkdtemp(dir=basedir)
-        self.tempdirs.append(d)
+        d = tempfile.mkdtemp(prefix=prefix, dir=os.getcwd())
+        self.addCleanup(support.rmtree, d)
         return d
 
+
+class TestRmTree(BaseTest, unittest.TestCase):
+
     def test_rmtree_works_on_bytes(self):
         tmp = self.mkdtemp()
         victim = os.path.join(tmp, 'killme')
@@ -241,6 +231,7 @@
         os.mkdir(dir_)
         link = os.path.join(tmp, 'link')
         _winapi.CreateJunction(dir_, link)
+        self.addCleanup(support.unlink, link)
         self.assertRaises(OSError, shutil.rmtree, link)
         self.assertTrue(os.path.exists(dir_))
         self.assertTrue(os.path.lexists(link))
@@ -277,7 +268,7 @@
 
     def test_rmtree_errors(self):
         # filename is guaranteed not to exist
-        filename = tempfile.mktemp()
+        filename = tempfile.mktemp(dir=self.mkdtemp())
         self.assertRaises(FileNotFoundError, shutil.rmtree, filename)
         # test that ignore_errors option is honored
         shutil.rmtree(filename, ignore_errors=True)
@@ -385,329 +376,6 @@
         finally:
             os.lstat = orig_lstat
 
-    @support.skip_unless_symlink
-    def test_copymode_follow_symlinks(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        src_link = os.path.join(tmp_dir, 'baz')
-        dst_link = os.path.join(tmp_dir, 'quux')
-        write_file(src, 'foo')
-        write_file(dst, 'foo')
-        os.symlink(src, src_link)
-        os.symlink(dst, dst_link)
-        os.chmod(src, stat.S_IRWXU|stat.S_IRWXG)
-        # file to file
-        os.chmod(dst, stat.S_IRWXO)
-        self.assertNotEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        shutil.copymode(src, dst)
-        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        # On Windows, os.chmod does not follow symlinks (issue #15411)
-        if os.name != 'nt':
-            # follow src link
-            os.chmod(dst, stat.S_IRWXO)
-            shutil.copymode(src_link, dst)
-            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-            # follow dst link
-            os.chmod(dst, stat.S_IRWXO)
-            shutil.copymode(src, dst_link)
-            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-            # follow both links
-            os.chmod(dst, stat.S_IRWXO)
-            shutil.copymode(src_link, dst_link)
-            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-
-    @unittest.skipUnless(hasattr(os, 'lchmod'), 'requires os.lchmod')
-    @support.skip_unless_symlink
-    def test_copymode_symlink_to_symlink(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        src_link = os.path.join(tmp_dir, 'baz')
-        dst_link = os.path.join(tmp_dir, 'quux')
-        write_file(src, 'foo')
-        write_file(dst, 'foo')
-        os.symlink(src, src_link)
-        os.symlink(dst, dst_link)
-        os.chmod(src, stat.S_IRWXU|stat.S_IRWXG)
-        os.chmod(dst, stat.S_IRWXU)
-        os.lchmod(src_link, stat.S_IRWXO|stat.S_IRWXG)
-        # link to link
-        os.lchmod(dst_link, stat.S_IRWXO)
-        shutil.copymode(src_link, dst_link, follow_symlinks=False)
-        self.assertEqual(os.lstat(src_link).st_mode,
-                         os.lstat(dst_link).st_mode)
-        self.assertNotEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        # src link - use chmod
-        os.lchmod(dst_link, stat.S_IRWXO)
-        shutil.copymode(src_link, dst, follow_symlinks=False)
-        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-        # dst link - use chmod
-        os.lchmod(dst_link, stat.S_IRWXO)
-        shutil.copymode(src, dst_link, follow_symlinks=False)
-        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
-
-    @unittest.skipIf(hasattr(os, 'lchmod'), 'requires os.lchmod to be missing')
-    @support.skip_unless_symlink
-    def test_copymode_symlink_to_symlink_wo_lchmod(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        src_link = os.path.join(tmp_dir, 'baz')
-        dst_link = os.path.join(tmp_dir, 'quux')
-        write_file(src, 'foo')
-        write_file(dst, 'foo')
-        os.symlink(src, src_link)
-        os.symlink(dst, dst_link)
-        shutil.copymode(src_link, dst_link, follow_symlinks=False)  # silent fail
-
-    @support.skip_unless_symlink
-    def test_copystat_symlinks(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        src_link = os.path.join(tmp_dir, 'baz')
-        dst_link = os.path.join(tmp_dir, 'qux')
-        write_file(src, 'foo')
-        src_stat = os.stat(src)
-        os.utime(src, (src_stat.st_atime,
-                       src_stat.st_mtime - 42.0))  # ensure different mtimes
-        write_file(dst, 'bar')
-        self.assertNotEqual(os.stat(src).st_mtime, os.stat(dst).st_mtime)
-        os.symlink(src, src_link)
-        os.symlink(dst, dst_link)
-        if hasattr(os, 'lchmod'):
-            os.lchmod(src_link, stat.S_IRWXO)
-        if hasattr(os, 'lchflags') and hasattr(stat, 'UF_NODUMP'):
-            os.lchflags(src_link, stat.UF_NODUMP)
-        src_link_stat = os.lstat(src_link)
-        # follow
-        if hasattr(os, 'lchmod'):
-            shutil.copystat(src_link, dst_link, follow_symlinks=True)
-            self.assertNotEqual(src_link_stat.st_mode, os.stat(dst).st_mode)
-        # don't follow
-        shutil.copystat(src_link, dst_link, follow_symlinks=False)
-        dst_link_stat = os.lstat(dst_link)
-        if os.utime in os.supports_follow_symlinks:
-            for attr in 'st_atime', 'st_mtime':
-                # The modification times may be truncated in the new file.
-                self.assertLessEqual(getattr(src_link_stat, attr),
-                                     getattr(dst_link_stat, attr) + 1)
-        if hasattr(os, 'lchmod'):
-            self.assertEqual(src_link_stat.st_mode, dst_link_stat.st_mode)
-        if hasattr(os, 'lchflags') and hasattr(src_link_stat, 'st_flags'):
-            self.assertEqual(src_link_stat.st_flags, dst_link_stat.st_flags)
-        # tell to follow but dst is not a link
-        shutil.copystat(src_link, dst, follow_symlinks=False)
-        self.assertTrue(abs(os.stat(src).st_mtime - os.stat(dst).st_mtime) <
-                        00000.1)
-
-    @unittest.skipUnless(hasattr(os, 'chflags') and
-                         hasattr(errno, 'EOPNOTSUPP') and
-                         hasattr(errno, 'ENOTSUP'),
-                         "requires os.chflags, EOPNOTSUPP & ENOTSUP")
-    def test_copystat_handles_harmless_chflags_errors(self):
-        tmpdir = self.mkdtemp()
-        file1 = os.path.join(tmpdir, 'file1')
-        file2 = os.path.join(tmpdir, 'file2')
-        write_file(file1, 'xxx')
-        write_file(file2, 'xxx')
-
-        def make_chflags_raiser(err):
-            ex = OSError()
-
-            def _chflags_raiser(path, flags, *, follow_symlinks=True):
-                ex.errno = err
-                raise ex
-            return _chflags_raiser
-        old_chflags = os.chflags
-        try:
-            for err in errno.EOPNOTSUPP, errno.ENOTSUP:
-                os.chflags = make_chflags_raiser(err)
-                shutil.copystat(file1, file2)
-            # assert others errors break it
-            os.chflags = make_chflags_raiser(errno.EOPNOTSUPP + errno.ENOTSUP)
-            self.assertRaises(OSError, shutil.copystat, file1, file2)
-        finally:
-            os.chflags = old_chflags
-
-    @support.skip_unless_xattr
-    def test_copyxattr(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        write_file(src, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        write_file(dst, 'bar')
-
-        # no xattr == no problem
-        shutil._copyxattr(src, dst)
-        # common case
-        os.setxattr(src, 'user.foo', b'42')
-        os.setxattr(src, 'user.bar', b'43')
-        shutil._copyxattr(src, dst)
-        self.assertEqual(sorted(os.listxattr(src)), sorted(os.listxattr(dst)))
-        self.assertEqual(
-                os.getxattr(src, 'user.foo'),
-                os.getxattr(dst, 'user.foo'))
-        # check errors don't affect other attrs
-        os.remove(dst)
-        write_file(dst, 'bar')
-        os_error = OSError(errno.EPERM, 'EPERM')
-
-        def _raise_on_user_foo(fname, attr, val, **kwargs):
-            if attr == 'user.foo':
-                raise os_error
-            else:
-                orig_setxattr(fname, attr, val, **kwargs)
-        try:
-            orig_setxattr = os.setxattr
-            os.setxattr = _raise_on_user_foo
-            shutil._copyxattr(src, dst)
-            self.assertIn('user.bar', os.listxattr(dst))
-        finally:
-            os.setxattr = orig_setxattr
-        # the source filesystem not supporting xattrs should be ok, too.
-        def _raise_on_src(fname, *, follow_symlinks=True):
-            if fname == src:
-                raise OSError(errno.ENOTSUP, 'Operation not supported')
-            return orig_listxattr(fname, follow_symlinks=follow_symlinks)
-        try:
-            orig_listxattr = os.listxattr
-            os.listxattr = _raise_on_src
-            shutil._copyxattr(src, dst)
-        finally:
-            os.listxattr = orig_listxattr
-
-        # test that shutil.copystat copies xattrs
-        src = os.path.join(tmp_dir, 'the_original')
-        srcro = os.path.join(tmp_dir, 'the_original_ro')
-        write_file(src, src)
-        write_file(srcro, srcro)
-        os.setxattr(src, 'user.the_value', b'fiddly')
-        os.setxattr(srcro, 'user.the_value', b'fiddly')
-        os.chmod(srcro, 0o444)
-        dst = os.path.join(tmp_dir, 'the_copy')
-        dstro = os.path.join(tmp_dir, 'the_copy_ro')
-        write_file(dst, dst)
-        write_file(dstro, dstro)
-        shutil.copystat(src, dst)
-        shutil.copystat(srcro, dstro)
-        self.assertEqual(os.getxattr(dst, 'user.the_value'), b'fiddly')
-        self.assertEqual(os.getxattr(dstro, 'user.the_value'), b'fiddly')
-
-    @support.skip_unless_symlink
-    @support.skip_unless_xattr
-    @unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
-                         'root privileges required')
-    def test_copyxattr_symlinks(self):
-        # On Linux, it's only possible to access non-user xattr for symlinks;
-        # which in turn require root privileges. This test should be expanded
-        # as soon as other platforms gain support for extended attributes.
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        src_link = os.path.join(tmp_dir, 'baz')
-        write_file(src, 'foo')
-        os.symlink(src, src_link)
-        os.setxattr(src, 'trusted.foo', b'42')
-        os.setxattr(src_link, 'trusted.foo', b'43', follow_symlinks=False)
-        dst = os.path.join(tmp_dir, 'bar')
-        dst_link = os.path.join(tmp_dir, 'qux')
-        write_file(dst, 'bar')
-        os.symlink(dst, dst_link)
-        shutil._copyxattr(src_link, dst_link, follow_symlinks=False)
-        self.assertEqual(os.getxattr(dst_link, 'trusted.foo', follow_symlinks=False), b'43')
-        self.assertRaises(OSError, os.getxattr, dst, 'trusted.foo')
-        shutil._copyxattr(src_link, dst, follow_symlinks=False)
-        self.assertEqual(os.getxattr(dst, 'trusted.foo'), b'43')
-
-    @support.skip_unless_symlink
-    def test_copy_symlinks(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        src_link = os.path.join(tmp_dir, 'baz')
-        write_file(src, 'foo')
-        os.symlink(src, src_link)
-        if hasattr(os, 'lchmod'):
-            os.lchmod(src_link, stat.S_IRWXU | stat.S_IRWXO)
-        # don't follow
-        shutil.copy(src_link, dst, follow_symlinks=True)
-        self.assertFalse(os.path.islink(dst))
-        self.assertEqual(read_file(src), read_file(dst))
-        os.remove(dst)
-        # follow
-        shutil.copy(src_link, dst, follow_symlinks=False)
-        self.assertTrue(os.path.islink(dst))
-        self.assertEqual(os.readlink(dst), os.readlink(src_link))
-        if hasattr(os, 'lchmod'):
-            self.assertEqual(os.lstat(src_link).st_mode,
-                             os.lstat(dst).st_mode)
-
-    @support.skip_unless_symlink
-    def test_copy2_symlinks(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        src_link = os.path.join(tmp_dir, 'baz')
-        write_file(src, 'foo')
-        os.symlink(src, src_link)
-        if hasattr(os, 'lchmod'):
-            os.lchmod(src_link, stat.S_IRWXU | stat.S_IRWXO)
-        if hasattr(os, 'lchflags') and hasattr(stat, 'UF_NODUMP'):
-            os.lchflags(src_link, stat.UF_NODUMP)
-        src_stat = os.stat(src)
-        src_link_stat = os.lstat(src_link)
-        # follow
-        shutil.copy2(src_link, dst, follow_symlinks=True)
-        self.assertFalse(os.path.islink(dst))
-        self.assertEqual(read_file(src), read_file(dst))
-        os.remove(dst)
-        # don't follow
-        shutil.copy2(src_link, dst, follow_symlinks=False)
-        self.assertTrue(os.path.islink(dst))
-        self.assertEqual(os.readlink(dst), os.readlink(src_link))
-        dst_stat = os.lstat(dst)
-        if os.utime in os.supports_follow_symlinks:
-            for attr in 'st_atime', 'st_mtime':
-                # The modification times may be truncated in the new file.
-                self.assertLessEqual(getattr(src_link_stat, attr),
-                                     getattr(dst_stat, attr) + 1)
-        if hasattr(os, 'lchmod'):
-            self.assertEqual(src_link_stat.st_mode, dst_stat.st_mode)
-            self.assertNotEqual(src_stat.st_mode, dst_stat.st_mode)
-        if hasattr(os, 'lchflags') and hasattr(src_link_stat, 'st_flags'):
-            self.assertEqual(src_link_stat.st_flags, dst_stat.st_flags)
-
-    @support.skip_unless_xattr
-    def test_copy2_xattr(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'foo')
-        dst = os.path.join(tmp_dir, 'bar')
-        write_file(src, 'foo')
-        os.setxattr(src, 'user.foo', b'42')
-        shutil.copy2(src, dst)
-        self.assertEqual(
-                os.getxattr(src, 'user.foo'),
-                os.getxattr(dst, 'user.foo'))
-        os.remove(dst)
-
-    @support.skip_unless_symlink
-    def test_copyfile_symlinks(self):
-        tmp_dir = self.mkdtemp()
-        src = os.path.join(tmp_dir, 'src')
-        dst = os.path.join(tmp_dir, 'dst')
-        dst_link = os.path.join(tmp_dir, 'dst_link')
-        link = os.path.join(tmp_dir, 'link')
-        write_file(src, 'foo')
-        os.symlink(src, link)
-        # don't follow
-        shutil.copyfile(link, dst_link, follow_symlinks=False)
-        self.assertTrue(os.path.islink(dst_link))
-        self.assertEqual(os.readlink(link), os.readlink(dst_link))
-        # follow
-        shutil.copyfile(link, dst)
-        self.assertFalse(os.path.islink(dst))
-
     def test_rmtree_uses_safe_fd_version_if_available(self):
         _use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <=
                              os.supports_dir_fd and
@@ -734,14 +402,45 @@
 
     def test_rmtree_dont_delete_file(self):
         # When called on a file instead of a directory, don't delete it.
-        handle, path = tempfile.mkstemp()
+        handle, path = tempfile.mkstemp(dir=self.mkdtemp())
         os.close(handle)
         self.assertRaises(NotADirectoryError, shutil.rmtree, path)
         os.remove(path)
 
+    @support.skip_unless_symlink
+    def test_rmtree_on_symlink(self):
+        # bug 1669.
+        os.mkdir(TESTFN)
+        try:
+            src = os.path.join(TESTFN, 'cheese')
+            dst = os.path.join(TESTFN, 'shop')
+            os.mkdir(src)
+            os.symlink(src, dst)
+            self.assertRaises(OSError, shutil.rmtree, dst)
+            shutil.rmtree(dst, ignore_errors=True)
+        finally:
+            shutil.rmtree(TESTFN, ignore_errors=True)
+
+    @unittest.skipUnless(_winapi, 'only relevant on Windows')
+    def test_rmtree_on_junction(self):
+        os.mkdir(TESTFN)
+        try:
+            src = os.path.join(TESTFN, 'cheese')
+            dst = os.path.join(TESTFN, 'shop')
+            os.mkdir(src)
+            open(os.path.join(src, 'spam'), 'wb').close()
+            _winapi.CreateJunction(src, dst)
+            self.assertRaises(OSError, shutil.rmtree, dst)
+            shutil.rmtree(dst, ignore_errors=True)
+        finally:
+            shutil.rmtree(TESTFN, ignore_errors=True)
+
+
+class TestCopyTree(BaseTest, unittest.TestCase):
+
     def test_copytree_simple(self):
-        src_dir = tempfile.mkdtemp()
-        dst_dir = os.path.join(tempfile.mkdtemp(), 'destination')
+        src_dir = self.mkdtemp()
+        dst_dir = os.path.join(self.mkdtemp(), 'destination')
         self.addCleanup(shutil.rmtree, src_dir)
         self.addCleanup(shutil.rmtree, os.path.dirname(dst_dir))
         write_file((src_dir, 'test.txt'), '123')
@@ -759,8 +458,8 @@
         self.assertEqual(actual, '456')
 
     def test_copytree_dirs_exist_ok(self):
-        src_dir = tempfile.mkdtemp()
-        dst_dir = tempfile.mkdtemp()
+        src_dir = self.mkdtemp()
+        dst_dir = self.mkdtemp()
         self.addCleanup(shutil.rmtree, src_dir)
         self.addCleanup(shutil.rmtree, dst_dir)
 
@@ -819,9 +518,9 @@
         # creating data
         join = os.path.join
         exists = os.path.exists
-        src_dir = tempfile.mkdtemp()
+        src_dir = self.mkdtemp()
         try:
-            dst_dir = join(tempfile.mkdtemp(), 'destination')
+            dst_dir = join(self.mkdtemp(), 'destination')
             write_file((src_dir, 'test.txt'), '123')
             write_file((src_dir, 'test.tmp'), '123')
             os.mkdir(join(src_dir, 'test_dir'))
@@ -923,7 +622,7 @@
         self.assertEqual(len(invokations), 9)
 
     def test_copytree_retains_permissions(self):
-        tmp_dir = tempfile.mkdtemp()
+        tmp_dir = self.mkdtemp()
         src_dir = os.path.join(tmp_dir, 'source')
         os.mkdir(src_dir)
         dst_dir = os.path.join(tmp_dir, 'destination')
@@ -935,6 +634,7 @@
         write_file((src_dir, 'restrictive.txt'), '456')
         os.chmod(os.path.join(src_dir, 'restrictive.txt'), 0o600)
         restrictive_subdir = tempfile.mkdtemp(dir=src_dir)
+        self.addCleanup(support.rmtree, restrictive_subdir)
         os.chmod(restrictive_subdir, 0o600)
 
         shutil.copytree(src_dir, dst_dir)
@@ -953,8 +653,8 @@
         # When copying to VFAT, copystat() raises OSError. On Windows, the
         # exception object has a meaningful 'winerror' attribute, but not
         # on other operating systems. Do not assume 'winerror' is set.
-        src_dir = tempfile.mkdtemp()
-        dst_dir = os.path.join(tempfile.mkdtemp(), 'destination')
+        src_dir = self.mkdtemp()
+        dst_dir = os.path.join(self.mkdtemp(), 'destination')
         self.addCleanup(shutil.rmtree, src_dir)
         self.addCleanup(shutil.rmtree, os.path.dirname(dst_dir))
 
@@ -972,15 +672,497 @@
             self.assertEqual(b, os.path.join(dst, 'foo'))
 
         flag = []
-        src = tempfile.mkdtemp()
-        self.addCleanup(support.rmtree, src)
-        dst = tempfile.mktemp()
-        self.addCleanup(support.rmtree, dst)
+        src = self.mkdtemp()
+        dst = tempfile.mktemp(dir=self.mkdtemp())
         with open(os.path.join(src, 'foo'), 'w') as f:
             f.close()
         shutil.copytree(src, dst, copy_function=custom_cpfun)
         self.assertEqual(len(flag), 1)
 
+    # Issue #3002: copyfile and copytree block indefinitely on named pipes
+    @unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
+    @support.skip_unless_symlink
+    def test_copytree_named_pipe(self):
+        os.mkdir(TESTFN)
+        try:
+            subdir = os.path.join(TESTFN, "subdir")
+            os.mkdir(subdir)
+            pipe = os.path.join(subdir, "mypipe")
+            try:
+                os.mkfifo(pipe)
+            except PermissionError as e:
+                self.skipTest('os.mkfifo(): %s' % e)
+            try:
+                shutil.copytree(TESTFN, TESTFN2)
+            except shutil.Error as e:
+                errors = e.args[0]
+                self.assertEqual(len(errors), 1)
+                src, dst, error_msg = errors[0]
+                self.assertEqual("`%s` is a named pipe" % pipe, error_msg)
+            else:
+                self.fail("shutil.Error should have been raised")
+        finally:
+            shutil.rmtree(TESTFN, ignore_errors=True)
+            shutil.rmtree(TESTFN2, ignore_errors=True)
+
+    def test_copytree_special_func(self):
+        src_dir = self.mkdtemp()
+        dst_dir = os.path.join(self.mkdtemp(), 'destination')
+        write_file((src_dir, 'test.txt'), '123')
+        os.mkdir(os.path.join(src_dir, 'test_dir'))
+        write_file((src_dir, 'test_dir', 'test.txt'), '456')
+
+        copied = []
+        def _copy(src, dst):
+            copied.append((src, dst))
+
+        shutil.copytree(src_dir, dst_dir, copy_function=_copy)
+        self.assertEqual(len(copied), 2)
+
+    @support.skip_unless_symlink
+    def test_copytree_dangling_symlinks(self):
+        # a dangling symlink raises an error at the end
+        src_dir = self.mkdtemp()
+        dst_dir = os.path.join(self.mkdtemp(), 'destination')
+        os.symlink('IDONTEXIST', os.path.join(src_dir, 'test.txt'))
+        os.mkdir(os.path.join(src_dir, 'test_dir'))
+        write_file((src_dir, 'test_dir', 'test.txt'), '456')
+        self.assertRaises(Error, shutil.copytree, src_dir, dst_dir)
+
+        # a dangling symlink is ignored with the proper flag
+        dst_dir = os.path.join(self.mkdtemp(), 'destination2')
+        shutil.copytree(src_dir, dst_dir, ignore_dangling_symlinks=True)
+        self.assertNotIn('test.txt', os.listdir(dst_dir))
+
+        # a dangling symlink is copied if symlinks=True
+        dst_dir = os.path.join(self.mkdtemp(), 'destination3')
+        shutil.copytree(src_dir, dst_dir, symlinks=True)
+        self.assertIn('test.txt', os.listdir(dst_dir))
+
+    @support.skip_unless_symlink
+    def test_copytree_symlink_dir(self):
+        src_dir = self.mkdtemp()
+        dst_dir = os.path.join(self.mkdtemp(), 'destination')
+        os.mkdir(os.path.join(src_dir, 'real_dir'))
+        with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'w'):
+            pass
+        os.symlink(os.path.join(src_dir, 'real_dir'),
+                   os.path.join(src_dir, 'link_to_dir'),
+                   target_is_directory=True)
+
+        shutil.copytree(src_dir, dst_dir, symlinks=False)
+        self.assertFalse(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
+        self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
+
+        dst_dir = os.path.join(self.mkdtemp(), 'destination2')
+        shutil.copytree(src_dir, dst_dir, symlinks=True)
+        self.assertTrue(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
+        self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
+
+    def test_copytree_return_value(self):
+        # copytree returns its destination path.
+        src_dir = self.mkdtemp()
+        dst_dir = src_dir + "dest"
+        self.addCleanup(shutil.rmtree, dst_dir, True)
+        src = os.path.join(src_dir, 'foo')
+        write_file(src, 'foo')
+        rv = shutil.copytree(src_dir, dst_dir)
+        self.assertEqual(['foo'], os.listdir(rv))
+
+    def test_copytree_subdirectory(self):
+        # copytree where dst is a subdirectory of src, see Issue 38688
+        base_dir = self.mkdtemp()
+        self.addCleanup(shutil.rmtree, base_dir, ignore_errors=True)
+        src_dir = os.path.join(base_dir, "t", "pg")
+        dst_dir = os.path.join(src_dir, "somevendor", "1.0")
+        os.makedirs(src_dir)
+        src = os.path.join(src_dir, 'pol')
+        write_file(src, 'pol')
+        rv = shutil.copytree(src_dir, dst_dir)
+        self.assertEqual(['pol'], os.listdir(rv))
+
+class TestCopy(BaseTest, unittest.TestCase):
+
+    ### shutil.copymode
+
+    @support.skip_unless_symlink
+    def test_copymode_follow_symlinks(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        src_link = os.path.join(tmp_dir, 'baz')
+        dst_link = os.path.join(tmp_dir, 'quux')
+        write_file(src, 'foo')
+        write_file(dst, 'foo')
+        os.symlink(src, src_link)
+        os.symlink(dst, dst_link)
+        os.chmod(src, stat.S_IRWXU|stat.S_IRWXG)
+        # file to file
+        os.chmod(dst, stat.S_IRWXO)
+        self.assertNotEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+        shutil.copymode(src, dst)
+        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+        # On Windows, os.chmod does not follow symlinks (issue #15411)
+        if os.name != 'nt':
+            # follow src link
+            os.chmod(dst, stat.S_IRWXO)
+            shutil.copymode(src_link, dst)
+            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+            # follow dst link
+            os.chmod(dst, stat.S_IRWXO)
+            shutil.copymode(src, dst_link)
+            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+            # follow both links
+            os.chmod(dst, stat.S_IRWXO)
+            shutil.copymode(src_link, dst_link)
+            self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+
+    @unittest.skipUnless(hasattr(os, 'lchmod'), 'requires os.lchmod')
+    @support.skip_unless_symlink
+    def test_copymode_symlink_to_symlink(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        src_link = os.path.join(tmp_dir, 'baz')
+        dst_link = os.path.join(tmp_dir, 'quux')
+        write_file(src, 'foo')
+        write_file(dst, 'foo')
+        os.symlink(src, src_link)
+        os.symlink(dst, dst_link)
+        os.chmod(src, stat.S_IRWXU|stat.S_IRWXG)
+        os.chmod(dst, stat.S_IRWXU)
+        os.lchmod(src_link, stat.S_IRWXO|stat.S_IRWXG)
+        # link to link
+        os.lchmod(dst_link, stat.S_IRWXO)
+        shutil.copymode(src_link, dst_link, follow_symlinks=False)
+        self.assertEqual(os.lstat(src_link).st_mode,
+                         os.lstat(dst_link).st_mode)
+        self.assertNotEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+        # src link - use chmod
+        os.lchmod(dst_link, stat.S_IRWXO)
+        shutil.copymode(src_link, dst, follow_symlinks=False)
+        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+        # dst link - use chmod
+        os.lchmod(dst_link, stat.S_IRWXO)
+        shutil.copymode(src, dst_link, follow_symlinks=False)
+        self.assertEqual(os.stat(src).st_mode, os.stat(dst).st_mode)
+
+    @unittest.skipIf(hasattr(os, 'lchmod'), 'requires os.lchmod to be missing')
+    @support.skip_unless_symlink
+    def test_copymode_symlink_to_symlink_wo_lchmod(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        src_link = os.path.join(tmp_dir, 'baz')
+        dst_link = os.path.join(tmp_dir, 'quux')
+        write_file(src, 'foo')
+        write_file(dst, 'foo')
+        os.symlink(src, src_link)
+        os.symlink(dst, dst_link)
+        shutil.copymode(src_link, dst_link, follow_symlinks=False)  # silent fail
+
+    ### shutil.copystat
+
+    @support.skip_unless_symlink
+    def test_copystat_symlinks(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        src_link = os.path.join(tmp_dir, 'baz')
+        dst_link = os.path.join(tmp_dir, 'qux')
+        write_file(src, 'foo')
+        src_stat = os.stat(src)
+        os.utime(src, (src_stat.st_atime,
+                       src_stat.st_mtime - 42.0))  # ensure different mtimes
+        write_file(dst, 'bar')
+        self.assertNotEqual(os.stat(src).st_mtime, os.stat(dst).st_mtime)
+        os.symlink(src, src_link)
+        os.symlink(dst, dst_link)
+        if hasattr(os, 'lchmod'):
+            os.lchmod(src_link, stat.S_IRWXO)
+        if hasattr(os, 'lchflags') and hasattr(stat, 'UF_NODUMP'):
+            os.lchflags(src_link, stat.UF_NODUMP)
+        src_link_stat = os.lstat(src_link)
+        # follow
+        if hasattr(os, 'lchmod'):
+            shutil.copystat(src_link, dst_link, follow_symlinks=True)
+            self.assertNotEqual(src_link_stat.st_mode, os.stat(dst).st_mode)
+        # don't follow
+        shutil.copystat(src_link, dst_link, follow_symlinks=False)
+        dst_link_stat = os.lstat(dst_link)
+        if os.utime in os.supports_follow_symlinks:
+            for attr in 'st_atime', 'st_mtime':
+                # The modification times may be truncated in the new file.
+                self.assertLessEqual(getattr(src_link_stat, attr),
+                                     getattr(dst_link_stat, attr) + 1)
+        if hasattr(os, 'lchmod'):
+            self.assertEqual(src_link_stat.st_mode, dst_link_stat.st_mode)
+        if hasattr(os, 'lchflags') and hasattr(src_link_stat, 'st_flags'):
+            self.assertEqual(src_link_stat.st_flags, dst_link_stat.st_flags)
+        # tell to follow but dst is not a link
+        shutil.copystat(src_link, dst, follow_symlinks=False)
+        self.assertTrue(abs(os.stat(src).st_mtime - os.stat(dst).st_mtime) <
+                        00000.1)
+
+    @unittest.skipUnless(hasattr(os, 'chflags') and
+                         hasattr(errno, 'EOPNOTSUPP') and
+                         hasattr(errno, 'ENOTSUP'),
+                         "requires os.chflags, EOPNOTSUPP & ENOTSUP")
+    def test_copystat_handles_harmless_chflags_errors(self):
+        tmpdir = self.mkdtemp()
+        file1 = os.path.join(tmpdir, 'file1')
+        file2 = os.path.join(tmpdir, 'file2')
+        write_file(file1, 'xxx')
+        write_file(file2, 'xxx')
+
+        def make_chflags_raiser(err):
+            ex = OSError()
+
+            def _chflags_raiser(path, flags, *, follow_symlinks=True):
+                ex.errno = err
+                raise ex
+            return _chflags_raiser
+        old_chflags = os.chflags
+        try:
+            for err in errno.EOPNOTSUPP, errno.ENOTSUP:
+                os.chflags = make_chflags_raiser(err)
+                shutil.copystat(file1, file2)
+            # assert others errors break it
+            os.chflags = make_chflags_raiser(errno.EOPNOTSUPP + errno.ENOTSUP)
+            self.assertRaises(OSError, shutil.copystat, file1, file2)
+        finally:
+            os.chflags = old_chflags
+
+    ### shutil.copyxattr
+
+    @support.skip_unless_xattr
+    def test_copyxattr(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        write_file(src, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        write_file(dst, 'bar')
+
+        # no xattr == no problem
+        shutil._copyxattr(src, dst)
+        # common case
+        os.setxattr(src, 'user.foo', b'42')
+        os.setxattr(src, 'user.bar', b'43')
+        shutil._copyxattr(src, dst)
+        self.assertEqual(sorted(os.listxattr(src)), sorted(os.listxattr(dst)))
+        self.assertEqual(
+                os.getxattr(src, 'user.foo'),
+                os.getxattr(dst, 'user.foo'))
+        # check errors don't affect other attrs
+        os.remove(dst)
+        write_file(dst, 'bar')
+        os_error = OSError(errno.EPERM, 'EPERM')
+
+        def _raise_on_user_foo(fname, attr, val, **kwargs):
+            if attr == 'user.foo':
+                raise os_error
+            else:
+                orig_setxattr(fname, attr, val, **kwargs)
+        try:
+            orig_setxattr = os.setxattr
+            os.setxattr = _raise_on_user_foo
+            shutil._copyxattr(src, dst)
+            self.assertIn('user.bar', os.listxattr(dst))
+        finally:
+            os.setxattr = orig_setxattr
+        # the source filesystem not supporting xattrs should be ok, too.
+        def _raise_on_src(fname, *, follow_symlinks=True):
+            if fname == src:
+                raise OSError(errno.ENOTSUP, 'Operation not supported')
+            return orig_listxattr(fname, follow_symlinks=follow_symlinks)
+        try:
+            orig_listxattr = os.listxattr
+            os.listxattr = _raise_on_src
+            shutil._copyxattr(src, dst)
+        finally:
+            os.listxattr = orig_listxattr
+
+        # test that shutil.copystat copies xattrs
+        src = os.path.join(tmp_dir, 'the_original')
+        srcro = os.path.join(tmp_dir, 'the_original_ro')
+        write_file(src, src)
+        write_file(srcro, srcro)
+        os.setxattr(src, 'user.the_value', b'fiddly')
+        os.setxattr(srcro, 'user.the_value', b'fiddly')
+        os.chmod(srcro, 0o444)
+        dst = os.path.join(tmp_dir, 'the_copy')
+        dstro = os.path.join(tmp_dir, 'the_copy_ro')
+        write_file(dst, dst)
+        write_file(dstro, dstro)
+        shutil.copystat(src, dst)
+        shutil.copystat(srcro, dstro)
+        self.assertEqual(os.getxattr(dst, 'user.the_value'), b'fiddly')
+        self.assertEqual(os.getxattr(dstro, 'user.the_value'), b'fiddly')
+
+    @support.skip_unless_symlink
+    @support.skip_unless_xattr
+    @unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
+                         'root privileges required')
+    def test_copyxattr_symlinks(self):
+        # On Linux, it's only possible to access non-user xattr for symlinks;
+        # which in turn require root privileges. This test should be expanded
+        # as soon as other platforms gain support for extended attributes.
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        src_link = os.path.join(tmp_dir, 'baz')
+        write_file(src, 'foo')
+        os.symlink(src, src_link)
+        os.setxattr(src, 'trusted.foo', b'42')
+        os.setxattr(src_link, 'trusted.foo', b'43', follow_symlinks=False)
+        dst = os.path.join(tmp_dir, 'bar')
+        dst_link = os.path.join(tmp_dir, 'qux')
+        write_file(dst, 'bar')
+        os.symlink(dst, dst_link)
+        shutil._copyxattr(src_link, dst_link, follow_symlinks=False)
+        self.assertEqual(os.getxattr(dst_link, 'trusted.foo', follow_symlinks=False), b'43')
+        self.assertRaises(OSError, os.getxattr, dst, 'trusted.foo')
+        shutil._copyxattr(src_link, dst, follow_symlinks=False)
+        self.assertEqual(os.getxattr(dst, 'trusted.foo'), b'43')
+
+    ### shutil.copy
+
+    def _copy_file(self, method):
+        fname = 'test.txt'
+        tmpdir = self.mkdtemp()
+        write_file((tmpdir, fname), 'xxx')
+        file1 = os.path.join(tmpdir, fname)
+        tmpdir2 = self.mkdtemp()
+        method(file1, tmpdir2)
+        file2 = os.path.join(tmpdir2, fname)
+        return (file1, file2)
+
+    def test_copy(self):
+        # Ensure that the copied file exists and has the same mode bits.
+        file1, file2 = self._copy_file(shutil.copy)
+        self.assertTrue(os.path.exists(file2))
+        self.assertEqual(os.stat(file1).st_mode, os.stat(file2).st_mode)
+
+    @support.skip_unless_symlink
+    def test_copy_symlinks(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        src_link = os.path.join(tmp_dir, 'baz')
+        write_file(src, 'foo')
+        os.symlink(src, src_link)
+        if hasattr(os, 'lchmod'):
+            os.lchmod(src_link, stat.S_IRWXU | stat.S_IRWXO)
+        # don't follow
+        shutil.copy(src_link, dst, follow_symlinks=True)
+        self.assertFalse(os.path.islink(dst))
+        self.assertEqual(read_file(src), read_file(dst))
+        os.remove(dst)
+        # follow
+        shutil.copy(src_link, dst, follow_symlinks=False)
+        self.assertTrue(os.path.islink(dst))
+        self.assertEqual(os.readlink(dst), os.readlink(src_link))
+        if hasattr(os, 'lchmod'):
+            self.assertEqual(os.lstat(src_link).st_mode,
+                             os.lstat(dst).st_mode)
+
+    ### shutil.copy2
+
+    @unittest.skipUnless(hasattr(os, 'utime'), 'requires os.utime')
+    def test_copy2(self):
+        # Ensure that the copied file exists and has the same mode and
+        # modification time bits.
+        file1, file2 = self._copy_file(shutil.copy2)
+        self.assertTrue(os.path.exists(file2))
+        file1_stat = os.stat(file1)
+        file2_stat = os.stat(file2)
+        self.assertEqual(file1_stat.st_mode, file2_stat.st_mode)
+        for attr in 'st_atime', 'st_mtime':
+            # The modification times may be truncated in the new file.
+            self.assertLessEqual(getattr(file1_stat, attr),
+                                 getattr(file2_stat, attr) + 1)
+        if hasattr(os, 'chflags') and hasattr(file1_stat, 'st_flags'):
+            self.assertEqual(getattr(file1_stat, 'st_flags'),
+                             getattr(file2_stat, 'st_flags'))
+
+    @support.skip_unless_symlink
+    def test_copy2_symlinks(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        src_link = os.path.join(tmp_dir, 'baz')
+        write_file(src, 'foo')
+        os.symlink(src, src_link)
+        if hasattr(os, 'lchmod'):
+            os.lchmod(src_link, stat.S_IRWXU | stat.S_IRWXO)
+        if hasattr(os, 'lchflags') and hasattr(stat, 'UF_NODUMP'):
+            os.lchflags(src_link, stat.UF_NODUMP)
+        src_stat = os.stat(src)
+        src_link_stat = os.lstat(src_link)
+        # follow
+        shutil.copy2(src_link, dst, follow_symlinks=True)
+        self.assertFalse(os.path.islink(dst))
+        self.assertEqual(read_file(src), read_file(dst))
+        os.remove(dst)
+        # don't follow
+        shutil.copy2(src_link, dst, follow_symlinks=False)
+        self.assertTrue(os.path.islink(dst))
+        self.assertEqual(os.readlink(dst), os.readlink(src_link))
+        dst_stat = os.lstat(dst)
+        if os.utime in os.supports_follow_symlinks:
+            for attr in 'st_atime', 'st_mtime':
+                # The modification times may be truncated in the new file.
+                self.assertLessEqual(getattr(src_link_stat, attr),
+                                     getattr(dst_stat, attr) + 1)
+        if hasattr(os, 'lchmod'):
+            self.assertEqual(src_link_stat.st_mode, dst_stat.st_mode)
+            self.assertNotEqual(src_stat.st_mode, dst_stat.st_mode)
+        if hasattr(os, 'lchflags') and hasattr(src_link_stat, 'st_flags'):
+            self.assertEqual(src_link_stat.st_flags, dst_stat.st_flags)
+
+    @support.skip_unless_xattr
+    def test_copy2_xattr(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'foo')
+        dst = os.path.join(tmp_dir, 'bar')
+        write_file(src, 'foo')
+        os.setxattr(src, 'user.foo', b'42')
+        shutil.copy2(src, dst)
+        self.assertEqual(
+                os.getxattr(src, 'user.foo'),
+                os.getxattr(dst, 'user.foo'))
+        os.remove(dst)
+
+    def test_copy_return_value(self):
+        # copy and copy2 both return their destination path.
+        for fn in (shutil.copy, shutil.copy2):
+            src_dir = self.mkdtemp()
+            dst_dir = self.mkdtemp()
+            src = os.path.join(src_dir, 'foo')
+            write_file(src, 'foo')
+            rv = fn(src, dst_dir)
+            self.assertEqual(rv, os.path.join(dst_dir, 'foo'))
+            rv = fn(src, os.path.join(dst_dir, 'bar'))
+            self.assertEqual(rv, os.path.join(dst_dir, 'bar'))
+
+    ### shutil.copyfile
+
+    @support.skip_unless_symlink
+    def test_copyfile_symlinks(self):
+        tmp_dir = self.mkdtemp()
+        src = os.path.join(tmp_dir, 'src')
+        dst = os.path.join(tmp_dir, 'dst')
+        dst_link = os.path.join(tmp_dir, 'dst_link')
+        link = os.path.join(tmp_dir, 'link')
+        write_file(src, 'foo')
+        os.symlink(src, link)
+        # don't follow
+        shutil.copyfile(link, dst_link, follow_symlinks=False)
+        self.assertTrue(os.path.islink(dst_link))
+        self.assertEqual(os.readlink(link), os.readlink(dst_link))
+        # follow
+        shutil.copyfile(link, dst)
+        self.assertFalse(os.path.islink(dst))
+
     @unittest.skipUnless(hasattr(os, 'link'), 'requires os.link')
     def test_dont_copy_file_onto_link_to_itself(self):
         # bug 851123.
@@ -1021,34 +1203,6 @@
         finally:
             shutil.rmtree(TESTFN, ignore_errors=True)
 
-    @support.skip_unless_symlink
-    def test_rmtree_on_symlink(self):
-        # bug 1669.
-        os.mkdir(TESTFN)
-        try:
-            src = os.path.join(TESTFN, 'cheese')
-            dst = os.path.join(TESTFN, 'shop')
-            os.mkdir(src)
-            os.symlink(src, dst)
-            self.assertRaises(OSError, shutil.rmtree, dst)
-            shutil.rmtree(dst, ignore_errors=True)
-        finally:
-            shutil.rmtree(TESTFN, ignore_errors=True)
-
-    @unittest.skipUnless(_winapi, 'only relevant on Windows')
-    def test_rmtree_on_junction(self):
-        os.mkdir(TESTFN)
-        try:
-            src = os.path.join(TESTFN, 'cheese')
-            dst = os.path.join(TESTFN, 'shop')
-            os.mkdir(src)
-            open(os.path.join(src, 'spam'), 'wb').close()
-            _winapi.CreateJunction(src, dst)
-            self.assertRaises(OSError, shutil.rmtree, dst)
-            shutil.rmtree(dst, ignore_errors=True)
-        finally:
-            shutil.rmtree(TESTFN, ignore_errors=True)
-
     # Issue #3002: copyfile and copytree block indefinitely on named pipes
     @unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
     def test_copyfile_named_pipe(self):
@@ -1064,121 +1218,35 @@
         finally:
             os.remove(TESTFN)
 
-    @unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
-    @support.skip_unless_symlink
-    def test_copytree_named_pipe(self):
-        os.mkdir(TESTFN)
-        try:
-            subdir = os.path.join(TESTFN, "subdir")
-            os.mkdir(subdir)
-            pipe = os.path.join(subdir, "mypipe")
-            try:
-                os.mkfifo(pipe)
-            except PermissionError as e:
-                self.skipTest('os.mkfifo(): %s' % e)
-            try:
-                shutil.copytree(TESTFN, TESTFN2)
-            except shutil.Error as e:
-                errors = e.args[0]
-                self.assertEqual(len(errors), 1)
-                src, dst, error_msg = errors[0]
-                self.assertEqual("`%s` is a named pipe" % pipe, error_msg)
-            else:
-                self.fail("shutil.Error should have been raised")
-        finally:
-            shutil.rmtree(TESTFN, ignore_errors=True)
-            shutil.rmtree(TESTFN2, ignore_errors=True)
-
-    def test_copytree_special_func(self):
-
+    def test_copyfile_return_value(self):
+        # copytree returns its destination path.
         src_dir = self.mkdtemp()
-        dst_dir = os.path.join(self.mkdtemp(), 'destination')
-        write_file((src_dir, 'test.txt'), '123')
-        os.mkdir(os.path.join(src_dir, 'test_dir'))
-        write_file((src_dir, 'test_dir', 'test.txt'), '456')
+        dst_dir = self.mkdtemp()
+        dst_file = os.path.join(dst_dir, 'bar')
+        src_file = os.path.join(src_dir, 'foo')
+        write_file(src_file, 'foo')
+        rv = shutil.copyfile(src_file, dst_file)
+        self.assertTrue(os.path.exists(rv))
+        self.assertEqual(read_file(src_file), read_file(dst_file))
 
-        copied = []
-        def _copy(src, dst):
-            copied.append((src, dst))
-
-        shutil.copytree(src_dir, dst_dir, copy_function=_copy)
-        self.assertEqual(len(copied), 2)
-
-    @support.skip_unless_symlink
-    def test_copytree_dangling_symlinks(self):
-
-        # a dangling symlink raises an error at the end
+    def test_copyfile_same_file(self):
+        # copyfile() should raise SameFileError if the source and destination
+        # are the same.
         src_dir = self.mkdtemp()
-        dst_dir = os.path.join(self.mkdtemp(), 'destination')
-        os.symlink('IDONTEXIST', os.path.join(src_dir, 'test.txt'))
-        os.mkdir(os.path.join(src_dir, 'test_dir'))
-        write_file((src_dir, 'test_dir', 'test.txt'), '456')
-        self.assertRaises(Error, shutil.copytree, src_dir, dst_dir)
+        src_file = os.path.join(src_dir, 'foo')
+        write_file(src_file, 'foo')
+        self.assertRaises(SameFileError, shutil.copyfile, src_file, src_file)
+        # But Error should work too, to stay backward compatible.
+        self.assertRaises(Error, shutil.copyfile, src_file, src_file)
+        # Make sure file is not corrupted.
+        self.assertEqual(read_file(src_file), 'foo')
 
-        # a dangling symlink is ignored with the proper flag
-        dst_dir = os.path.join(self.mkdtemp(), 'destination2')
-        shutil.copytree(src_dir, dst_dir, ignore_dangling_symlinks=True)
-        self.assertNotIn('test.txt', os.listdir(dst_dir))
 
-        # a dangling symlink is copied if symlinks=True
-        dst_dir = os.path.join(self.mkdtemp(), 'destination3')
-        shutil.copytree(src_dir, dst_dir, symlinks=True)
-        self.assertIn('test.txt', os.listdir(dst_dir))
+class TestArchives(BaseTest, unittest.TestCase):
 
-    @support.skip_unless_symlink
-    def test_copytree_symlink_dir(self):
-        src_dir = self.mkdtemp()
-        dst_dir = os.path.join(self.mkdtemp(), 'destination')
-        os.mkdir(os.path.join(src_dir, 'real_dir'))
-        with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'w'):
-            pass
-        os.symlink(os.path.join(src_dir, 'real_dir'),
-                   os.path.join(src_dir, 'link_to_dir'),
-                   target_is_directory=True)
+    ### shutil.make_archive
 
-        shutil.copytree(src_dir, dst_dir, symlinks=False)
-        self.assertFalse(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
-        self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
-
-        dst_dir = os.path.join(self.mkdtemp(), 'destination2')
-        shutil.copytree(src_dir, dst_dir, symlinks=True)
-        self.assertTrue(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
-        self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
-
-    def _copy_file(self, method):
-        fname = 'test.txt'
-        tmpdir = self.mkdtemp()
-        write_file((tmpdir, fname), 'xxx')
-        file1 = os.path.join(tmpdir, fname)
-        tmpdir2 = self.mkdtemp()
-        method(file1, tmpdir2)
-        file2 = os.path.join(tmpdir2, fname)
-        return (file1, file2)
-
-    def test_copy(self):
-        # Ensure that the copied file exists and has the same mode bits.
-        file1, file2 = self._copy_file(shutil.copy)
-        self.assertTrue(os.path.exists(file2))
-        self.assertEqual(os.stat(file1).st_mode, os.stat(file2).st_mode)
-
-    @unittest.skipUnless(hasattr(os, 'utime'), 'requires os.utime')
-    def test_copy2(self):
-        # Ensure that the copied file exists and has the same mode and
-        # modification time bits.
-        file1, file2 = self._copy_file(shutil.copy2)
-        self.assertTrue(os.path.exists(file2))
-        file1_stat = os.stat(file1)
-        file2_stat = os.stat(file2)
-        self.assertEqual(file1_stat.st_mode, file2_stat.st_mode)
-        for attr in 'st_atime', 'st_mtime':
-            # The modification times may be truncated in the new file.
-            self.assertLessEqual(getattr(file1_stat, attr),
-                                 getattr(file2_stat, attr) + 1)
-        if hasattr(os, 'chflags') and hasattr(file1_stat, 'st_flags'):
-            self.assertEqual(getattr(file1_stat, 'st_flags'),
-                             getattr(file2_stat, 'st_flags'))
-
-    @support.requires_zlib
+    @support.requires_zlib()
     def test_make_tarball(self):
         # creating something to tar
         root_dir, base_dir = self._create_files('')
@@ -1234,7 +1302,7 @@
             write_file((root_dir, 'outer'), 'xxx')
         return root_dir, base_dir
 
-    @support.requires_zlib
+    @support.requires_zlib()
     @unittest.skipUnless(shutil.which('tar'),
                          'Need the tar command to run')
     def test_tarfile_vs_tar(self):
@@ -1267,7 +1335,7 @@
         self.assertEqual(tarball, base_name + '.tar')
         self.assertTrue(os.path.isfile(tarball))
 
-    @support.requires_zlib
+    @support.requires_zlib()
     def test_make_zipfile(self):
         # creating something to zip
         root_dir, base_dir = self._create_files()
@@ -1304,7 +1372,7 @@
                     ['dist/', 'dist/sub/', 'dist/sub2/',
                      'dist/file1', 'dist/file2', 'dist/sub/file3'])
 
-    @support.requires_zlib
+    @support.requires_zlib()
     @unittest.skipUnless(shutil.which('zip'),
                          'Need the zip command to run')
     def test_zipfile_vs_zip(self):
@@ -1330,7 +1398,7 @@
             names2 = zf.namelist()
         self.assertEqual(sorted(names), sorted(names2))
 
-    @support.requires_zlib
+    @support.requires_zlib()
     @unittest.skipUnless(shutil.which('unzip'),
                          'Need the unzip command to run')
     def test_unzip_zipfile(self):
@@ -1359,7 +1427,7 @@
         base_name = os.path.join(tmpdir, 'archive')
         self.assertRaises(ValueError, make_archive, base_name, 'xxx')
 
-    @support.requires_zlib
+    @support.requires_zlib()
     def test_make_archive_owner_group(self):
         # testing make_archive with owner and group, with various combinations
         # this works even if there's not gid/uid support
@@ -1387,7 +1455,7 @@
         self.assertTrue(os.path.isfile(res))
 
 
-    @support.requires_zlib
+    @support.requires_zlib()
     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
     def test_tarfile_root_owner(self):
         root_dir, base_dir = self._create_files()
@@ -1432,7 +1500,7 @@
             self.assertEqual(make_archive('test', 'tar'), 'test.tar')
             self.assertTrue(os.path.isfile('test.tar'))
 
-    @support.requires_zlib
+    @support.requires_zlib()
     def test_make_zipfile_in_curdir(self):
         # Issue #21280
         root_dir = self.mkdtemp()
@@ -1456,6 +1524,8 @@
         formats = [name for name, params in get_archive_formats()]
         self.assertNotIn('xxx', formats)
 
+    ### shutil.unpack_archive
+
     def check_unpack_archive(self, format):
         self.check_unpack_archive_with_converter(format, lambda path: path)
         self.check_unpack_archive_with_converter(format, pathlib.Path)
@@ -1485,20 +1555,20 @@
     def test_unpack_archive_tar(self):
         self.check_unpack_archive('tar')
 
-    @support.requires_zlib
+    @support.requires_zlib()
     def test_unpack_archive_gztar(self):
         self.check_unpack_archive('gztar')
 
-    @support.requires_bz2
+    @support.requires_bz2()
     def test_unpack_archive_bztar(self):
         self.check_unpack_archive('bztar')
 
-    @support.requires_lzma
+    @support.requires_lzma()
     @unittest.skipIf(AIX and not _maxdataOK(), "AIX MAXDATA must be 0x20000000 or larger")
     def test_unpack_archive_xztar(self):
         self.check_unpack_archive('xztar')
 
-    @support.requires_zlib
+    @support.requires_zlib()
     def test_unpack_archive_zip(self):
         self.check_unpack_archive('zip')
 
@@ -1528,6 +1598,9 @@
         unregister_unpack_format('Boo2')
         self.assertEqual(get_unpack_formats(), formats)
 
+
+class TestMisc(BaseTest, unittest.TestCase):
+
     @unittest.skipUnless(hasattr(shutil, 'disk_usage'),
                          "disk_usage not available on this platform")
     def test_disk_usage(self):
@@ -1546,8 +1619,6 @@
     @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
     @unittest.skipUnless(hasattr(os, 'chown'), 'requires os.chown')
     def test_chown(self):
-
-        # cleaned-up automatically by TestShutil.tearDown method
         dirname = self.mkdtemp()
         filename = tempfile.mktemp(dir=dirname)
         write_file(filename, 'testing chown function')
@@ -1595,76 +1666,23 @@
         shutil.chown(dirname, group=gid)
         check_chown(dirname, gid=gid)
 
-        user = pwd.getpwuid(uid)[0]
-        group = grp.getgrgid(gid)[0]
-        shutil.chown(filename, user, group)
-        check_chown(filename, uid, gid)
-        shutil.chown(dirname, user, group)
-        check_chown(dirname, uid, gid)
-
-    def test_copy_return_value(self):
-        # copy and copy2 both return their destination path.
-        for fn in (shutil.copy, shutil.copy2):
-            src_dir = self.mkdtemp()
-            dst_dir = self.mkdtemp()
-            src = os.path.join(src_dir, 'foo')
-            write_file(src, 'foo')
-            rv = fn(src, dst_dir)
-            self.assertEqual(rv, os.path.join(dst_dir, 'foo'))
-            rv = fn(src, os.path.join(dst_dir, 'bar'))
-            self.assertEqual(rv, os.path.join(dst_dir, 'bar'))
-
-    def test_copyfile_return_value(self):
-        # copytree returns its destination path.
-        src_dir = self.mkdtemp()
-        dst_dir = self.mkdtemp()
-        dst_file = os.path.join(dst_dir, 'bar')
-        src_file = os.path.join(src_dir, 'foo')
-        write_file(src_file, 'foo')
-        rv = shutil.copyfile(src_file, dst_file)
-        self.assertTrue(os.path.exists(rv))
-        self.assertEqual(read_file(src_file), read_file(dst_file))
-
-    def test_copyfile_same_file(self):
-        # copyfile() should raise SameFileError if the source and destination
-        # are the same.
-        src_dir = self.mkdtemp()
-        src_file = os.path.join(src_dir, 'foo')
-        write_file(src_file, 'foo')
-        self.assertRaises(SameFileError, shutil.copyfile, src_file, src_file)
-        # But Error should work too, to stay backward compatible.
-        self.assertRaises(Error, shutil.copyfile, src_file, src_file)
-        # Make sure file is not corrupted.
-        self.assertEqual(read_file(src_file), 'foo')
-
-    def test_copytree_return_value(self):
-        # copytree returns its destination path.
-        src_dir = self.mkdtemp()
-        dst_dir = src_dir + "dest"
-        self.addCleanup(shutil.rmtree, dst_dir, True)
-        src = os.path.join(src_dir, 'foo')
-        write_file(src, 'foo')
-        rv = shutil.copytree(src_dir, dst_dir)
-        self.assertEqual(['foo'], os.listdir(rv))
-
-    def test_copytree_subdirectory(self):
-        # copytree where dst is a subdirectory of src, see Issue 38688
-        base_dir = self.mkdtemp()
-        self.addCleanup(shutil.rmtree, base_dir, ignore_errors=True)
-        src_dir = os.path.join(base_dir, "t", "pg")
-        dst_dir = os.path.join(src_dir, "somevendor", "1.0")
-        os.makedirs(src_dir)
-        src = os.path.join(src_dir, 'pol')
-        write_file(src, 'pol')
-        rv = shutil.copytree(src_dir, dst_dir)
-        self.assertEqual(['pol'], os.listdir(rv))
+        try:
+            user = pwd.getpwuid(uid)[0]
+            group = grp.getgrgid(gid)[0]
+        except KeyError:
+            # On some systems uid/gid cannot be resolved.
+            pass
+        else:
+            shutil.chown(filename, user, group)
+            check_chown(filename, uid, gid)
+            shutil.chown(dirname, user, group)
+            check_chown(dirname, uid, gid)
 
 
-class TestWhich(unittest.TestCase):
+class TestWhich(BaseTest, unittest.TestCase):
 
     def setUp(self):
-        self.temp_dir = tempfile.mkdtemp(prefix="Tmp")
-        self.addCleanup(shutil.rmtree, self.temp_dir, True)
+        self.temp_dir = self.mkdtemp(prefix="Tmp")
         # Give the temp_file an ".exe" suffix for all.
         # It's needed on Windows and not harmful on other platforms.
         self.temp_file = tempfile.NamedTemporaryFile(dir=self.temp_dir,
@@ -1830,6 +1848,23 @@
             rv = shutil.which(program, path=self.temp_dir)
             self.assertEqual(rv, temp_filexyz.name)
 
+    # Issue 40592: See https://bugs.python.org/issue40592
+    @unittest.skipUnless(sys.platform == "win32", 'test specific to Windows')
+    def test_pathext_with_empty_str(self):
+        ext = ".xyz"
+        temp_filexyz = tempfile.NamedTemporaryFile(dir=self.temp_dir,
+                                                   prefix="Tmp2", suffix=ext)
+        self.addCleanup(temp_filexyz.close)
+
+        # strip path and extension
+        program = os.path.basename(temp_filexyz.name)
+        program = os.path.splitext(program)[0]
+
+        with support.EnvironmentVarGuard() as env:
+            env['PATHEXT'] = f"{ext};"  # note the ;
+            rv = shutil.which(program, path=self.temp_dir)
+            self.assertEqual(rv, temp_filexyz.name)
+
 
 class TestWhichBytes(TestWhich):
     def setUp(self):
@@ -1841,28 +1876,17 @@
         self.ext = os.fsencode(self.ext)
 
 
-class TestMove(unittest.TestCase):
+class TestMove(BaseTest, unittest.TestCase):
 
     def setUp(self):
         filename = "foo"
-        basedir = None
-        if sys.platform == "win32":
-            basedir = os.path.realpath(os.getcwd())
-        self.src_dir = tempfile.mkdtemp(dir=basedir)
-        self.dst_dir = tempfile.mkdtemp(dir=basedir)
+        self.src_dir = self.mkdtemp()
+        self.dst_dir = self.mkdtemp()
         self.src_file = os.path.join(self.src_dir, filename)
         self.dst_file = os.path.join(self.dst_dir, filename)
         with open(self.src_file, "wb") as f:
             f.write(b"spam")
 
-    def tearDown(self):
-        for d in (self.src_dir, self.dst_dir):
-            try:
-                if d:
-                    shutil.rmtree(d)
-            except:
-                pass
-
     def _check_move_file(self, src, dst, real_dst):
         with open(src, "rb") as f:
             contents = f.read()
@@ -1885,6 +1909,16 @@
         # Move a file inside an existing dir on the same filesystem.
         self._check_move_file(self.src_file, self.dst_dir, self.dst_file)
 
+    def test_move_file_to_dir_pathlike_src(self):
+        # Move a pathlike file to another location on the same filesystem.
+        src = pathlib.Path(self.src_file)
+        self._check_move_file(src, self.dst_dir, self.dst_file)
+
+    def test_move_file_to_dir_pathlike_dst(self):
+        # Move a file to another pathlike location on the same filesystem.
+        dst = pathlib.Path(self.dst_dir)
+        self._check_move_file(self.src_file, dst, self.dst_file)
+
     @mock_rename
     def test_move_file_other_fs(self):
         # Move a file to an existing dir on another filesystem.
@@ -1897,14 +1931,11 @@
 
     def test_move_dir(self):
         # Move a dir to another location on the same filesystem.
-        dst_dir = tempfile.mktemp()
+        dst_dir = tempfile.mktemp(dir=self.mkdtemp())
         try:
             self._check_move_dir(self.src_dir, dst_dir, dst_dir)
         finally:
-            try:
-                shutil.rmtree(dst_dir)
-            except:
-                pass
+            support.rmtree(dst_dir)
 
     @mock_rename
     def test_move_dir_other_fs(self):
@@ -1951,7 +1982,7 @@
                              msg='_destinsrc() wrongly concluded that '
                              'dst (%s) is not in src (%s)' % (dst, src))
         finally:
-            shutil.rmtree(TESTFN, ignore_errors=True)
+            support.rmtree(TESTFN)
 
     def test_destinsrc_false_positive(self):
         os.mkdir(TESTFN)
@@ -1963,7 +1994,7 @@
                             msg='_destinsrc() wrongly concluded that '
                             'dst (%s) is in src (%s)' % (dst, src))
         finally:
-            shutil.rmtree(TESTFN, ignore_errors=True)
+            support.rmtree(TESTFN)
 
     @support.skip_unless_symlink
     @mock_rename
@@ -2035,11 +2066,25 @@
         shutil.move(self.src_dir, self.dst_dir, copy_function=_copy)
         self.assertEqual(len(moved), 3)
 
+    def test_move_dir_caseinsensitive(self):
+        # Renames a folder to the same name
+        # but a different case.
+
+        self.src_dir = self.mkdtemp()
+        dst_dir = os.path.join(
+                os.path.dirname(self.src_dir),
+                os.path.basename(self.src_dir).upper())
+        self.assertNotEqual(self.src_dir, dst_dir)
+
+        try:
+            shutil.move(self.src_dir, dst_dir)
+            self.assertTrue(os.path.isdir(dst_dir))
+        finally:
+            os.rmdir(dst_dir)
+
 
 class TestCopyFile(unittest.TestCase):
 
-    _delete = False
-
     class Faux(object):
         _entered = False
         _exited_with = None
@@ -2058,27 +2103,18 @@
                 raise OSError("Cannot close")
             return self._suppress_at_exit
 
-    def tearDown(self):
-        if self._delete:
-            del shutil.open
-
-    def _set_shutil_open(self, func):
-        shutil.open = func
-        self._delete = True
-
     def test_w_source_open_fails(self):
         def _open(filename, mode='r'):
             if filename == 'srcfile':
                 raise OSError('Cannot open "srcfile"')
             assert 0  # shouldn't reach here.
 
-        self._set_shutil_open(_open)
-
-        self.assertRaises(OSError, shutil.copyfile, 'srcfile', 'destfile')
+        with support.swap_attr(shutil, 'open', _open):
+            with self.assertRaises(OSError):
+                shutil.copyfile('srcfile', 'destfile')
 
     @unittest.skipIf(MACOS, "skipped on macOS")
     def test_w_dest_open_fails(self):
-
         srcfile = self.Faux()
 
         def _open(filename, mode='r'):
@@ -2088,9 +2124,8 @@
                 raise OSError('Cannot open "destfile"')
             assert 0  # shouldn't reach here.
 
-        self._set_shutil_open(_open)
-
-        shutil.copyfile('srcfile', 'destfile')
+        with support.swap_attr(shutil, 'open', _open):
+            shutil.copyfile('srcfile', 'destfile')
         self.assertTrue(srcfile._entered)
         self.assertTrue(srcfile._exited_with[0] is OSError)
         self.assertEqual(srcfile._exited_with[1].args,
@@ -2098,7 +2133,6 @@
 
     @unittest.skipIf(MACOS, "skipped on macOS")
     def test_w_dest_close_fails(self):
-
         srcfile = self.Faux()
         destfile = self.Faux(True)
 
@@ -2109,9 +2143,8 @@
                 return destfile
             assert 0  # shouldn't reach here.
 
-        self._set_shutil_open(_open)
-
-        shutil.copyfile('srcfile', 'destfile')
+        with support.swap_attr(shutil, 'open', _open):
+            shutil.copyfile('srcfile', 'destfile')
         self.assertTrue(srcfile._entered)
         self.assertTrue(destfile._entered)
         self.assertTrue(destfile._raised)
@@ -2132,33 +2165,15 @@
                 return destfile
             assert 0  # shouldn't reach here.
 
-        self._set_shutil_open(_open)
-
-        self.assertRaises(OSError,
-                          shutil.copyfile, 'srcfile', 'destfile')
+        with support.swap_attr(shutil, 'open', _open):
+            with self.assertRaises(OSError):
+                shutil.copyfile('srcfile', 'destfile')
         self.assertTrue(srcfile._entered)
         self.assertTrue(destfile._entered)
         self.assertFalse(destfile._raised)
         self.assertTrue(srcfile._exited_with[0] is None)
         self.assertTrue(srcfile._raised)
 
-    def test_move_dir_caseinsensitive(self):
-        # Renames a folder to the same name
-        # but a different case.
-
-        self.src_dir = tempfile.mkdtemp()
-        self.addCleanup(shutil.rmtree, self.src_dir, True)
-        dst_dir = os.path.join(
-                os.path.dirname(self.src_dir),
-                os.path.basename(self.src_dir).upper())
-        self.assertNotEqual(self.src_dir, dst_dir)
-
-        try:
-            shutil.move(self.src_dir, dst_dir)
-            self.assertTrue(os.path.isdir(dst_dir))
-        finally:
-            os.rmdir(dst_dir)
-
 
 class TestCopyFileObj(unittest.TestCase):
     FILESIZE = 2 * 1024 * 1024
@@ -2215,7 +2230,7 @@
 
         # If file size < 1 MiB memoryview() length must be equal to
         # the actual file size.
-        with tempfile.NamedTemporaryFile(delete=False) as f:
+        with tempfile.NamedTemporaryFile(dir=os.getcwd(), delete=False) as f:
             f.write(b'foo')
         fname = f.name
         self.addCleanup(support.unlink, fname)
@@ -2224,7 +2239,7 @@
         self.assertEqual(m.call_args[0][2], 3)
 
         # Empty files should not rely on readinto() variant.
-        with tempfile.NamedTemporaryFile(delete=False) as f:
+        with tempfile.NamedTemporaryFile(dir=os.getcwd(), delete=False) as f:
             pass
         fname = f.name
         self.addCleanup(support.unlink, fname)
@@ -2290,7 +2305,7 @@
         self.assertEqual(read_file(TESTFN, binary=True), self.FILEDATA)
 
     def test_non_existent_src(self):
-        name = tempfile.mktemp()
+        name = tempfile.mktemp(dir=os.getcwd())
         with self.assertRaises(FileNotFoundError) as cm:
             shutil.copyfile(name, "new")
         self.assertEqual(cm.exception.filename, name)
@@ -2461,7 +2476,7 @@
         return shutil._fastcopy_fcopyfile(src, dst, posix._COPYFILE_DATA)
 
 
-class TermsizeTests(unittest.TestCase):
+class TestGetTerminalSize(unittest.TestCase):
     def test_does_not_crash(self):
         """Check if get_terminal_size() returns a meaningful value.
 
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index d41e94b..45553a6 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -644,7 +644,7 @@
                 # wait until the child process is loaded and has started
                 first_line = process.stdout.readline()
 
-                stdout, stderr = process.communicate(timeout=5.0)
+                stdout, stderr = process.communicate(timeout=support.SHORT_TIMEOUT)
             except subprocess.TimeoutExpired:
                 process.kill()
                 return False
@@ -1192,7 +1192,7 @@
         self.setsig(signal.SIGALRM, second_handler)  # for ITIMER_REAL
 
         expected_sigs = 0
-        deadline = time.monotonic() + 15.0
+        deadline = time.monotonic() + support.SHORT_TIMEOUT
 
         while expected_sigs < N:
             os.kill(os.getpid(), signal.SIGPROF)
@@ -1226,7 +1226,7 @@
         self.setsig(signal.SIGALRM, handler)  # for ITIMER_REAL
 
         expected_sigs = 0
-        deadline = time.monotonic() + 15.0
+        deadline = time.monotonic() + support.SHORT_TIMEOUT
 
         while expected_sigs < N:
             # Hopefully the SIGALRM will be received somewhere during
@@ -1273,6 +1273,27 @@
         self.assertTrue(is_ok)
 
 
+class PidfdSignalTest(unittest.TestCase):
+
+    @unittest.skipUnless(
+        hasattr(signal, "pidfd_send_signal"),
+        "pidfd support not built in",
+    )
+    def test_pidfd_send_signal(self):
+        with self.assertRaises(OSError) as cm:
+            signal.pidfd_send_signal(0, signal.SIGINT)
+        if cm.exception.errno == errno.ENOSYS:
+            self.skipTest("kernel does not support pidfds")
+        elif cm.exception.errno == errno.EPERM:
+            self.skipTest("Not enough privileges to use pidfs")
+        self.assertEqual(cm.exception.errno, errno.EBADF)
+        my_pidfd = os.open(f'/proc/{os.getpid()}', os.O_DIRECTORY)
+        self.addCleanup(os.close, my_pidfd)
+        with self.assertRaisesRegex(TypeError, "^siginfo must be None$"):
+            signal.pidfd_send_signal(my_pidfd, signal.SIGINT, object(), 0)
+        with self.assertRaises(KeyboardInterrupt):
+            signal.pidfd_send_signal(my_pidfd, signal.SIGINT)
+
 def tearDownModule():
     support.reap_children()
 
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 0100865..ffba139 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -7,20 +7,21 @@
 import unittest
 import test.support
 from test import support
+from test.support import socket_helper
 from test.support import (captured_stderr, TESTFN, EnvironmentVarGuard,
                           change_cwd)
 import builtins
+import encodings
 import glob
 import os
-import sys
 import re
-import encodings
-import urllib.request
-import urllib.error
 import shutil
 import subprocess
+import sys
 import sysconfig
 import tempfile
+import urllib.error
+import urllib.request
 from unittest import mock
 from copy import copy
 
@@ -267,11 +268,18 @@
         dirs = site.getsitepackages()
         if os.sep == '/':
             # OS X, Linux, FreeBSD, etc
-            self.assertEqual(len(dirs), 1)
+            if sys.platlibdir != "lib":
+                self.assertEqual(len(dirs), 2)
+                wanted = os.path.join('xoxo', sys.platlibdir,
+                                      'python%d.%d' % sys.version_info[:2],
+                                      'site-packages')
+                self.assertEqual(dirs[0], wanted)
+            else:
+                self.assertEqual(len(dirs), 1)
             wanted = os.path.join('xoxo', 'lib',
                                   'python%d.%d' % sys.version_info[:2],
                                   'site-packages')
-            self.assertEqual(dirs[0], wanted)
+            self.assertEqual(dirs[-1], wanted)
         else:
             # other platforms
             self.assertEqual(len(dirs), 2)
@@ -492,8 +500,6 @@
 
     @test.support.requires_resource('network')
     @test.support.system_must_validate_cert
-    @unittest.skipUnless(sys.version_info[3] == 'final',
-                         'only for released versions')
     @unittest.skipUnless(hasattr(urllib.request, "HTTPSHandler"),
                          'need SSL support to download license')
     def test_license_exists_at_url(self):
@@ -501,8 +507,10 @@
         # string displayed by license in the absence of a LICENSE file.
         url = license._Printer__data.split()[1]
         req = urllib.request.Request(url, method='HEAD')
+        # Reset global urllib.request._opener
+        self.addCleanup(urllib.request.urlcleanup)
         try:
-            with test.support.transient_internet(url):
+            with socket_helper.transient_internet(url):
                 with urllib.request.urlopen(req) as data:
                     code = data.getcode()
         except urllib.error.HTTPError as e:
diff --git a/Lib/test/test_smtpd.py b/Lib/test/test_smtpd.py
index a9f7d5a..3be7739 100644
--- a/Lib/test/test_smtpd.py
+++ b/Lib/test/test_smtpd.py
@@ -1,6 +1,7 @@
 import unittest
 import textwrap
 from test import support, mock_socket
+from test.support import socket_helper
 import socket
 import io
 import smtpd
@@ -38,7 +39,7 @@
         smtpd.socket = asyncore.socket = mock_socket
 
     def test_process_message_unimplemented(self):
-        server = smtpd.SMTPServer((support.HOST, 0), ('b', 0),
+        server = smtpd.SMTPServer((socket_helper.HOST, 0), ('b', 0),
                                   decode_data=True)
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr, decode_data=True)
@@ -57,7 +58,7 @@
         self.assertRaises(
             ValueError,
             smtpd.SMTPServer,
-            (support.HOST, 0),
+            (socket_helper.HOST, 0),
             ('b', 0),
             enable_SMTPUTF8=True,
             decode_data=True)
@@ -87,7 +88,7 @@
         write_line(b'.')
 
     def test_process_message_with_decode_data_true(self):
-        server = smtpd.DebuggingServer((support.HOST, 0), ('b', 0),
+        server = smtpd.DebuggingServer((socket_helper.HOST, 0), ('b', 0),
                                        decode_data=True)
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr, decode_data=True)
@@ -104,7 +105,7 @@
              """))
 
     def test_process_message_with_decode_data_false(self):
-        server = smtpd.DebuggingServer((support.HOST, 0), ('b', 0))
+        server = smtpd.DebuggingServer((socket_helper.HOST, 0), ('b', 0))
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr)
         with support.captured_stdout() as s:
@@ -120,7 +121,7 @@
              """))
 
     def test_process_message_with_enable_SMTPUTF8_true(self):
-        server = smtpd.DebuggingServer((support.HOST, 0), ('b', 0),
+        server = smtpd.DebuggingServer((socket_helper.HOST, 0), ('b', 0),
                                        enable_SMTPUTF8=True)
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr, enable_SMTPUTF8=True)
@@ -137,7 +138,7 @@
              """))
 
     def test_process_SMTPUTF8_message_with_enable_SMTPUTF8_true(self):
-        server = smtpd.DebuggingServer((support.HOST, 0), ('b', 0),
+        server = smtpd.DebuggingServer((socket_helper.HOST, 0), ('b', 0),
                                        enable_SMTPUTF8=True)
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr, enable_SMTPUTF8=True)
@@ -168,13 +169,13 @@
         asyncore.close_all()
         asyncore.socket = smtpd.socket = socket
 
-    @unittest.skipUnless(support.IPV6_ENABLED, "IPv6 not enabled")
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, "IPv6 not enabled")
     def test_socket_uses_IPv6(self):
-        server = smtpd.SMTPServer((support.HOSTv6, 0), (support.HOSTv4, 0))
+        server = smtpd.SMTPServer((socket_helper.HOSTv6, 0), (socket_helper.HOSTv4, 0))
         self.assertEqual(server.socket.family, socket.AF_INET6)
 
     def test_socket_uses_IPv4(self):
-        server = smtpd.SMTPServer((support.HOSTv4, 0), (support.HOSTv6, 0))
+        server = smtpd.SMTPServer((socket_helper.HOSTv4, 0), (socket_helper.HOSTv6, 0))
         self.assertEqual(server.socket.family, socket.AF_INET)
 
 
@@ -197,7 +198,7 @@
         channel.handle_read()
 
     def test_params_rejected(self):
-        server = DummyServer((support.HOST, 0), ('b', 0))
+        server = DummyServer((socket_helper.HOST, 0), ('b', 0))
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr)
         self.write_line(channel, b'EHLO example')
@@ -206,7 +207,7 @@
         self.assertEqual(channel.socket.last, self.error_response)
 
     def test_nothing_accepted(self):
-        server = DummyServer((support.HOST, 0), ('b', 0))
+        server = DummyServer((socket_helper.HOST, 0), ('b', 0))
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr)
         self.write_line(channel, b'EHLO example')
@@ -234,7 +235,7 @@
         channel.handle_read()
 
     def test_with_decode_data_true(self):
-        server = DummyServer((support.HOST, 0), ('b', 0), decode_data=True)
+        server = DummyServer((socket_helper.HOST, 0), ('b', 0), decode_data=True)
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr, decode_data=True)
         self.write_line(channel, b'EHLO example')
@@ -250,7 +251,7 @@
         self.assertEqual(channel.socket.last, b'250 OK\r\n')
 
     def test_with_decode_data_false(self):
-        server = DummyServer((support.HOST, 0), ('b', 0))
+        server = DummyServer((socket_helper.HOST, 0), ('b', 0))
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr)
         self.write_line(channel, b'EHLO example')
@@ -271,7 +272,7 @@
         self.assertEqual(channel.socket.last, b'250 OK\r\n')
 
     def test_with_enable_smtputf8_true(self):
-        server = DummyServer((support.HOST, 0), ('b', 0), enable_SMTPUTF8=True)
+        server = DummyServer((socket_helper.HOST, 0), ('b', 0), enable_SMTPUTF8=True)
         conn, addr = server.accept()
         channel = smtpd.SMTPChannel(server, conn, addr, enable_SMTPUTF8=True)
         self.write_line(channel, b'EHLO example')
@@ -286,7 +287,7 @@
         smtpd.socket = asyncore.socket = mock_socket
         self.old_debugstream = smtpd.DEBUGSTREAM
         self.debug = smtpd.DEBUGSTREAM = io.StringIO()
-        self.server = DummyServer((support.HOST, 0), ('b', 0),
+        self.server = DummyServer((socket_helper.HOST, 0), ('b', 0),
                                   decode_data=True)
         conn, addr = self.server.accept()
         self.channel = smtpd.SMTPChannel(self.server, conn, addr,
@@ -304,7 +305,7 @@
     def test_broken_connect(self):
         self.assertRaises(
             DummyDispatcherBroken, BrokenDummyServer,
-            (support.HOST, 0), ('b', 0), decode_data=True)
+            (socket_helper.HOST, 0), ('b', 0), decode_data=True)
 
     def test_decode_data_and_enable_SMTPUTF8_raises(self):
         self.assertRaises(
@@ -758,13 +759,13 @@
         with support.check_warnings(('', DeprecationWarning)):
             self.channel._SMTPChannel__addr = 'spam'
 
-@unittest.skipUnless(support.IPV6_ENABLED, "IPv6 not enabled")
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, "IPv6 not enabled")
 class SMTPDChannelIPv6Test(SMTPDChannelTest):
     def setUp(self):
         smtpd.socket = asyncore.socket = mock_socket
         self.old_debugstream = smtpd.DEBUGSTREAM
         self.debug = smtpd.DEBUGSTREAM = io.StringIO()
-        self.server = DummyServer((support.HOSTv6, 0), ('b', 0),
+        self.server = DummyServer((socket_helper.HOSTv6, 0), ('b', 0),
                                   decode_data=True)
         conn, addr = self.server.accept()
         self.channel = smtpd.SMTPChannel(self.server, conn, addr,
@@ -776,7 +777,7 @@
         smtpd.socket = asyncore.socket = mock_socket
         self.old_debugstream = smtpd.DEBUGSTREAM
         self.debug = smtpd.DEBUGSTREAM = io.StringIO()
-        self.server = DummyServer((support.HOST, 0), ('b', 0),
+        self.server = DummyServer((socket_helper.HOST, 0), ('b', 0),
                                   decode_data=True)
         conn, addr = self.server.accept()
         # Set DATA size limit to 32 bytes for easy testing
@@ -831,7 +832,7 @@
         smtpd.socket = asyncore.socket = mock_socket
         self.old_debugstream = smtpd.DEBUGSTREAM
         self.debug = smtpd.DEBUGSTREAM = io.StringIO()
-        self.server = DummyServer((support.HOST, 0), ('b', 0))
+        self.server = DummyServer((socket_helper.HOST, 0), ('b', 0))
         conn, addr = self.server.accept()
         self.channel = smtpd.SMTPChannel(self.server, conn, addr)
 
@@ -873,7 +874,7 @@
         smtpd.socket = asyncore.socket = mock_socket
         self.old_debugstream = smtpd.DEBUGSTREAM
         self.debug = smtpd.DEBUGSTREAM = io.StringIO()
-        self.server = DummyServer((support.HOST, 0), ('b', 0),
+        self.server = DummyServer((socket_helper.HOST, 0), ('b', 0),
                                   decode_data=True)
         conn, addr = self.server.accept()
         # Set decode_data to True
@@ -916,7 +917,7 @@
         smtpd.socket = asyncore.socket = mock_socket
         self.old_debugstream = smtpd.DEBUGSTREAM
         self.debug = smtpd.DEBUGSTREAM = io.StringIO()
-        self.server = DummyServer((support.HOST, 0), ('b', 0),
+        self.server = DummyServer((socket_helper.HOST, 0), ('b', 0),
                                   enable_SMTPUTF8=True)
         conn, addr = self.server.accept()
         self.channel = smtpd.SMTPChannel(self.server, conn, addr,
diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py
index d0c9862..5762999 100644
--- a/Lib/test/test_smtplib.py
+++ b/Lib/test/test_smtplib.py
@@ -20,11 +20,12 @@
 
 import unittest
 from test import support, mock_socket
-from test.support import HOST
+from test.support import hashlib_helper
+from test.support import socket_helper
 from test.support import threading_setup, threading_cleanup, join_thread
-from test.support import requires_hashdigest
 from unittest.mock import Mock
 
+HOST = socket_helper.HOST
 
 if sys.platform == 'darwin':
     # select.poll returns a select.POLLHUP at the end of the tests
@@ -56,7 +57,7 @@
         serv.close()
         evt.set()
 
-class GeneralTests(unittest.TestCase):
+class GeneralTests:
 
     def setUp(self):
         smtplib.socket = mock_socket
@@ -75,29 +76,29 @@
     def testBasic1(self):
         mock_socket.reply_with(b"220 Hola mundo")
         # connects
-        smtp = smtplib.SMTP(HOST, self.port)
-        smtp.close()
+        client = self.client(HOST, self.port)
+        client.close()
 
     def testSourceAddress(self):
         mock_socket.reply_with(b"220 Hola mundo")
         # connects
-        smtp = smtplib.SMTP(HOST, self.port,
-                source_address=('127.0.0.1',19876))
-        self.assertEqual(smtp.source_address, ('127.0.0.1', 19876))
-        smtp.close()
+        client = self.client(HOST, self.port,
+                             source_address=('127.0.0.1',19876))
+        self.assertEqual(client.source_address, ('127.0.0.1', 19876))
+        client.close()
 
     def testBasic2(self):
         mock_socket.reply_with(b"220 Hola mundo")
         # connects, include port in host name
-        smtp = smtplib.SMTP("%s:%s" % (HOST, self.port))
-        smtp.close()
+        client = self.client("%s:%s" % (HOST, self.port))
+        client.close()
 
     def testLocalHostName(self):
         mock_socket.reply_with(b"220 Hola mundo")
         # check that supplied local_hostname is used
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname="testhost")
-        self.assertEqual(smtp.local_hostname, "testhost")
-        smtp.close()
+        client = self.client(HOST, self.port, local_hostname="testhost")
+        self.assertEqual(client.local_hostname, "testhost")
+        client.close()
 
     def testTimeoutDefault(self):
         mock_socket.reply_with(b"220 Hola mundo")
@@ -105,51 +106,71 @@
         mock_socket.setdefaulttimeout(30)
         self.assertEqual(mock_socket.getdefaulttimeout(), 30)
         try:
-            smtp = smtplib.SMTP(HOST, self.port)
+            client = self.client(HOST, self.port)
         finally:
             mock_socket.setdefaulttimeout(None)
-        self.assertEqual(smtp.sock.gettimeout(), 30)
-        smtp.close()
+        self.assertEqual(client.sock.gettimeout(), 30)
+        client.close()
 
     def testTimeoutNone(self):
         mock_socket.reply_with(b"220 Hola mundo")
         self.assertIsNone(socket.getdefaulttimeout())
         socket.setdefaulttimeout(30)
         try:
-            smtp = smtplib.SMTP(HOST, self.port, timeout=None)
+            client = self.client(HOST, self.port, timeout=None)
         finally:
             socket.setdefaulttimeout(None)
-        self.assertIsNone(smtp.sock.gettimeout())
-        smtp.close()
+        self.assertIsNone(client.sock.gettimeout())
+        client.close()
+
+    def testTimeoutZero(self):
+        mock_socket.reply_with(b"220 Hola mundo")
+        with self.assertRaises(ValueError):
+            self.client(HOST, self.port, timeout=0)
 
     def testTimeoutValue(self):
         mock_socket.reply_with(b"220 Hola mundo")
-        smtp = smtplib.SMTP(HOST, self.port, timeout=30)
-        self.assertEqual(smtp.sock.gettimeout(), 30)
-        smtp.close()
+        client = self.client(HOST, self.port, timeout=30)
+        self.assertEqual(client.sock.gettimeout(), 30)
+        client.close()
 
     def test_debuglevel(self):
         mock_socket.reply_with(b"220 Hello world")
-        smtp = smtplib.SMTP()
-        smtp.set_debuglevel(1)
+        client = self.client()
+        client.set_debuglevel(1)
         with support.captured_stderr() as stderr:
-            smtp.connect(HOST, self.port)
-        smtp.close()
+            client.connect(HOST, self.port)
+        client.close()
         expected = re.compile(r"^connect:", re.MULTILINE)
         self.assertRegex(stderr.getvalue(), expected)
 
     def test_debuglevel_2(self):
         mock_socket.reply_with(b"220 Hello world")
-        smtp = smtplib.SMTP()
-        smtp.set_debuglevel(2)
+        client = self.client()
+        client.set_debuglevel(2)
         with support.captured_stderr() as stderr:
-            smtp.connect(HOST, self.port)
-        smtp.close()
+            client.connect(HOST, self.port)
+        client.close()
         expected = re.compile(r"^\d{2}:\d{2}:\d{2}\.\d{6} connect: ",
                               re.MULTILINE)
         self.assertRegex(stderr.getvalue(), expected)
 
 
+class SMTPGeneralTests(GeneralTests, unittest.TestCase):
+
+    client = smtplib.SMTP
+
+
+class LMTPGeneralTests(GeneralTests, unittest.TestCase):
+
+    client = smtplib.LMTP
+
+    def testTimeoutZero(self):
+        super().testTimeoutZero()
+        local_host = '/some/local/lmtp/delivery/program'
+        with self.assertRaises(ValueError):
+            self.client(local_host, timeout=0)
+
 # Test server thread using the specified SMTP server class
 def debugging_server(serv, serv_evt, client_evt):
     serv_evt.set()
@@ -245,15 +266,17 @@
 
     def testBasic(self):
         # connect
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.quit()
 
     def testSourceAddress(self):
         # connect
-        src_port = support.find_unused_port()
+        src_port = socket_helper.find_unused_port()
         try:
             smtp = smtplib.SMTP(self.host, self.port, local_hostname='localhost',
-                                timeout=3, source_address=(self.host, src_port))
+                                timeout=support.LOOPBACK_TIMEOUT,
+                                source_address=(self.host, src_port))
             self.addCleanup(smtp.close)
             self.assertEqual(smtp.source_address, (self.host, src_port))
             self.assertEqual(smtp.local_hostname, 'localhost')
@@ -264,14 +287,16 @@
             raise
 
     def testNOOP(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         expected = (250, b'OK')
         self.assertEqual(smtp.noop(), expected)
         smtp.quit()
 
     def testRSET(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         expected = (250, b'OK')
         self.assertEqual(smtp.rset(), expected)
@@ -279,7 +304,8 @@
 
     def testELHO(self):
         # EHLO isn't implemented in DebuggingServer
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         expected = (250, b'\nSIZE 33554432\nHELP')
         self.assertEqual(smtp.ehlo(), expected)
@@ -287,7 +313,8 @@
 
     def testEXPNNotImplemented(self):
         # EXPN isn't implemented in DebuggingServer
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         expected = (502, b'EXPN not implemented')
         smtp.putcmd('EXPN')
@@ -295,7 +322,8 @@
         smtp.quit()
 
     def testVRFY(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         expected = (252, b'Cannot VRFY user, but will accept message ' + \
                          b'and attempt delivery')
@@ -306,7 +334,8 @@
     def testSecondHELO(self):
         # check that a second HELO returns a message that it's a duplicate
         # (this behavior is specific to smtpd.SMTPChannel)
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.helo()
         expected = (503, b'Duplicate HELO/EHLO')
@@ -314,7 +343,8 @@
         smtp.quit()
 
     def testHELP(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         self.assertEqual(smtp.help(), b'Supported commands: EHLO HELO MAIL ' + \
                                       b'RCPT DATA RSET NOOP QUIT VRFY')
@@ -323,7 +353,8 @@
     def testSend(self):
         # connect and send mail
         m = 'A test message'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.sendmail('John', 'Sally', m)
         # XXX(nnorwitz): this test is flaky and dies with a bad file descriptor
@@ -340,7 +371,8 @@
 
     def testSendBinary(self):
         m = b'A test message'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.sendmail('John', 'Sally', m)
         # XXX (see comment in testSend)
@@ -356,7 +388,8 @@
     def testSendNeedingDotQuote(self):
         # Issue 12283
         m = '.A test\n.mes.sage.'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.sendmail('John', 'Sally', m)
         # XXX (see comment in testSend)
@@ -371,7 +404,8 @@
 
     def testSendNullSender(self):
         m = 'A test message'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.sendmail('<>', 'Sally', m)
         # XXX (see comment in testSend)
@@ -389,7 +423,8 @@
 
     def testSendMessage(self):
         m = email.mime.text.MIMEText('A test message')
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.send_message(m, from_addr='John', to_addrs='Sally')
         # XXX (see comment in testSend)
@@ -414,7 +449,8 @@
         m['To'] = 'John'
         m['CC'] = 'Sally, Fred'
         m['Bcc'] = 'John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.send_message(m)
         # XXX (see comment in testSend)
@@ -448,7 +484,8 @@
         m = email.mime.text.MIMEText('A test message')
         m['From'] = 'foo@bar.com'
         m['To'] = 'John, Dinsdale'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.send_message(m)
         # XXX (see comment in testSend)
@@ -476,7 +513,8 @@
         m = email.mime.text.MIMEText('A test message')
         m['From'] = 'foo@bar.com'
         m['To'] = 'John, Dinsdale'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.send_message(m, from_addr='joe@example.com', to_addrs='foo@example.net')
         # XXX (see comment in testSend)
@@ -507,7 +545,8 @@
         m['From'] = 'Bernard, Bianca'
         m['Sender'] = 'the_rescuers@Rescue-Aid-Society.com'
         m['To'] = 'John, Dinsdale'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.send_message(m)
         # XXX (see comment in testSend)
@@ -540,7 +579,8 @@
         m['Resent-From'] = 'holy@grail.net'
         m['Resent-To'] = 'Martha <my_mom@great.cooker.com>, Jeff'
         m['Resent-Bcc'] = 'doe@losthope.net'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.send_message(m)
         # XXX (see comment in testSend)
@@ -579,7 +619,8 @@
         m['Resent-Date'] = 'Thu, 2 Jan 1970 17:42:00 +0000'
         m['Resent-To'] = 'holy@grail.net'
         m['Resent-From'] = 'Martha <my_mom@great.cooker.com>, Jeff'
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         with self.assertRaises(ValueError):
             smtp.send_message(m)
@@ -671,7 +712,7 @@
         self.evt = threading.Event()
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.sock.settimeout(15)
-        self.port = support.bind_port(self.sock)
+        self.port = socket_helper.bind_port(self.sock)
         servargs = (self.evt, self.respdata, self.sock)
         self.thread = threading.Thread(target=server, args=servargs)
         self.thread.start()
@@ -944,11 +985,13 @@
 
     def testBasic(self):
         # smoke test
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.quit()
 
     def testEHLO(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
 
         # no features should be present before the EHLO
         self.assertEqual(smtp.esmtp_features, {})
@@ -969,7 +1012,8 @@
         smtp.quit()
 
     def testVRFY(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
 
         for addr_spec, name in sim_users.items():
             expected_known = (250, bytes('%s %s' %
@@ -983,7 +1027,8 @@
         smtp.quit()
 
     def testEXPN(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
 
         for listname, members in sim_lists.items():
             users = []
@@ -999,30 +1044,35 @@
 
     def testAUTH_PLAIN(self):
         self.serv.add_feature("AUTH PLAIN")
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         resp = smtp.login(sim_auth[0], sim_auth[1])
         self.assertEqual(resp, (235, b'Authentication Succeeded'))
         smtp.close()
 
     def testAUTH_LOGIN(self):
         self.serv.add_feature("AUTH LOGIN")
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         resp = smtp.login(sim_auth[0], sim_auth[1])
         self.assertEqual(resp, (235, b'Authentication Succeeded'))
         smtp.close()
 
-    @requires_hashdigest('md5')
+    @hashlib_helper.requires_hashdigest('md5')
     def testAUTH_CRAM_MD5(self):
         self.serv.add_feature("AUTH CRAM-MD5")
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         resp = smtp.login(sim_auth[0], sim_auth[1])
         self.assertEqual(resp, (235, b'Authentication Succeeded'))
         smtp.close()
 
+    @hashlib_helper.requires_hashdigest('md5')
     def testAUTH_multiple(self):
         # Test that multiple authentication methods are tried.
         self.serv.add_feature("AUTH BOGUS PLAIN LOGIN CRAM-MD5")
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         resp = smtp.login(sim_auth[0], sim_auth[1])
         self.assertEqual(resp, (235, b'Authentication Succeeded'))
         smtp.close()
@@ -1040,7 +1090,8 @@
         for mechanism in supported:
             with self.subTest(mechanism=mechanism):
                 smtp = smtplib.SMTP(HOST, self.port,
-                                    local_hostname='localhost', timeout=15)
+                                    local_hostname='localhost',
+                                    timeout=support.LOOPBACK_TIMEOUT)
                 smtp.ehlo('foo')
                 smtp.user, smtp.password = sim_auth[0], sim_auth[1]
                 method = 'auth_' + mechanism.lower().replace('-', '_')
@@ -1051,7 +1102,7 @@
     def test_quit_resets_greeting(self):
         smtp = smtplib.SMTP(HOST, self.port,
                             local_hostname='localhost',
-                            timeout=15)
+                            timeout=support.LOOPBACK_TIMEOUT)
         code, message = smtp.ehlo()
         self.assertEqual(code, 250)
         self.assertIn('size', smtp.esmtp_features)
@@ -1085,7 +1136,8 @@
 
     # Issue 17498: make sure _rset does not raise SMTPServerDisconnected exception
     def test__rest_from_mail_cmd(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.noop()
         self.serv._SMTPchannel.mail_response = '451 Requested action aborted'
         self.serv._SMTPchannel.disconnect = True
@@ -1095,7 +1147,8 @@
 
     # Issue 5713: make sure close, not rset, is called if we get a 421 error
     def test_421_from_mail_cmd(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.noop()
         self.serv._SMTPchannel.mail_response = '421 closing connection'
         with self.assertRaises(smtplib.SMTPSenderRefused):
@@ -1104,7 +1157,8 @@
         self.assertEqual(self.serv._SMTPchannel.rset_count, 0)
 
     def test_421_from_rcpt_cmd(self):
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.noop()
         self.serv._SMTPchannel.rcpt_response = ['250 accepted', '421 closing']
         with self.assertRaises(smtplib.SMTPRecipientsRefused) as r:
@@ -1121,7 +1175,8 @@
                 else:
                     super().found_terminator()
         self.serv.channel_class = MySimSMTPChannel
-        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.noop()
         with self.assertRaises(smtplib.SMTPDataError):
             smtp.sendmail('John@foo.org', ['Sally@foo.org'], 'test message')
@@ -1130,7 +1185,8 @@
 
     def test_smtputf8_NotSupportedError_if_no_server_support(self):
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.ehlo()
         self.assertTrue(smtp.does_esmtp)
@@ -1145,7 +1201,8 @@
 
     def test_send_unicode_without_SMTPUTF8(self):
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         self.assertRaises(UnicodeEncodeError, smtp.sendmail, 'Alice', 'Böb', '')
         self.assertRaises(UnicodeEncodeError, smtp.mail, 'Älice')
@@ -1158,15 +1215,16 @@
         msg['To'] = 'Dinsdale'
         msg['Subject'] = 'Nudge nudge, wink, wink \u1F609'
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         with self.assertRaises(smtplib.SMTPNotSupportedError):
             smtp.send_message(msg)
 
     def test_name_field_not_included_in_envelop_addresses(self):
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3
-        )
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
 
         message = EmailMessage()
@@ -1242,7 +1300,8 @@
 
     def test_test_server_supports_extensions(self):
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.ehlo()
         self.assertTrue(smtp.does_esmtp)
@@ -1251,7 +1310,8 @@
     def test_send_unicode_with_SMTPUTF8_via_sendmail(self):
         m = '¡a test message containing unicode!'.encode('utf-8')
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.sendmail('Jőhn', 'Sálly', m,
                       mail_options=['BODY=8BITMIME', 'SMTPUTF8'])
@@ -1265,7 +1325,8 @@
     def test_send_unicode_with_SMTPUTF8_via_low_level_API(self):
         m = '¡a test message containing unicode!'.encode('utf-8')
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         smtp.ehlo()
         self.assertEqual(
@@ -1301,7 +1362,8 @@
             oh là là, know what I mean, know what I mean?
             """)
         smtp = smtplib.SMTP(
-            HOST, self.port, local_hostname='localhost', timeout=3)
+            HOST, self.port, local_hostname='localhost',
+            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(smtp.close)
         self.assertEqual(smtp.send_message(msg), {})
         self.assertEqual(self.serv.last_mailfrom, 'főo@bar.com')
@@ -1366,15 +1428,15 @@
 
     def testAUTH_PLAIN_initial_response_login(self):
         self.serv.add_feature('AUTH PLAIN')
-        smtp = smtplib.SMTP(HOST, self.port,
-                            local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.login('psu', 'doesnotexist')
         smtp.close()
 
     def testAUTH_PLAIN_initial_response_auth(self):
         self.serv.add_feature('AUTH PLAIN')
-        smtp = smtplib.SMTP(HOST, self.port,
-                            local_hostname='localhost', timeout=15)
+        smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
+                            timeout=support.LOOPBACK_TIMEOUT)
         smtp.user = 'psu'
         smtp.password = 'doesnotexist'
         code, response = smtp.auth('plain', smtp.auth_plain)
diff --git a/Lib/test/test_smtpnet.py b/Lib/test/test_smtpnet.py
index b69cd9d..74a00a9 100644
--- a/Lib/test/test_smtpnet.py
+++ b/Lib/test/test_smtpnet.py
@@ -1,5 +1,6 @@
 import unittest
 from test import support
+from test.support import socket_helper
 import smtplib
 import socket
 
@@ -28,7 +29,7 @@
         context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
         context.check_hostname = False
         context.verify_mode = ssl.CERT_NONE
-        with support.transient_internet(self.testServer):
+        with socket_helper.transient_internet(self.testServer):
             server = smtplib.SMTP(self.testServer, self.remotePort)
             try:
                 server.starttls(context=context)
@@ -47,14 +48,14 @@
 
     def test_connect(self):
         support.get_attribute(smtplib, 'SMTP_SSL')
-        with support.transient_internet(self.testServer):
+        with socket_helper.transient_internet(self.testServer):
             server = smtplib.SMTP_SSL(self.testServer, self.remotePort)
             server.ehlo()
             server.quit()
 
     def test_connect_default_port(self):
         support.get_attribute(smtplib, 'SMTP_SSL')
-        with support.transient_internet(self.testServer):
+        with socket_helper.transient_internet(self.testServer):
             server = smtplib.SMTP_SSL(self.testServer)
             server.ehlo()
             server.quit()
@@ -64,20 +65,20 @@
         context.check_hostname = False
         context.verify_mode = ssl.CERT_NONE
         support.get_attribute(smtplib, 'SMTP_SSL')
-        with support.transient_internet(self.testServer):
+        with socket_helper.transient_internet(self.testServer):
             server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
             server.ehlo()
             server.quit()
 
     def test_connect_using_sslcontext_verified(self):
-        with support.transient_internet(self.testServer):
+        with socket_helper.transient_internet(self.testServer):
             can_verify = check_ssl_verifiy(self.testServer, self.remotePort)
             if not can_verify:
                 self.skipTest("SSL certificate can't be verified")
 
         support.get_attribute(smtplib, 'SMTP_SSL')
         context = ssl.create_default_context()
-        with support.transient_internet(self.testServer):
+        with socket_helper.transient_internet(self.testServer):
             server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
             server.ehlo()
             server.quit()
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
old mode 100644
new mode 100755
index f9370d8..aefba4f
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -1,5 +1,6 @@
 import unittest
 from test import support
+from test.support import socket_helper
 
 import errno
 import io
@@ -34,10 +35,9 @@
 except ImportError:
     fcntl = None
 
-HOST = support.HOST
+HOST = socket_helper.HOST
 # test unicode string and carriage return
 MSG = 'Michael Gilfix was here\u1234\r\n'.encode('utf-8')
-MAIN_TIMEOUT = 60.0
 
 VSOCKPORT = 1234
 AIX = platform.system() == "AIX"
@@ -80,6 +80,16 @@
         s.close()
     return True
 
+def _have_socket_can_j1939():
+    """Check whether CAN J1939 sockets are supported on this host."""
+    try:
+        s = socket.socket(socket.PF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939)
+    except (AttributeError, OSError):
+        return False
+    else:
+        s.close()
+    return True
+
 def _have_socket_rds():
     """Check whether RDS sockets are supported on this host."""
     try:
@@ -116,6 +126,19 @@
     return ret
 
 
+def _have_socket_bluetooth():
+    """Check whether AF_BLUETOOTH sockets are supported on this host."""
+    try:
+        # RFCOMM is supported by all platforms with bluetooth support. Windows
+        # does not support omitting the protocol.
+        s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
+    except (AttributeError, OSError):
+        return False
+    else:
+        s.close()
+    return True
+
+
 @contextlib.contextmanager
 def socket_setdefaulttimeout(timeout):
     old_timeout = socket.getdefaulttimeout()
@@ -130,6 +153,8 @@
 
 HAVE_SOCKET_CAN_ISOTP = _have_socket_can_isotp()
 
+HAVE_SOCKET_CAN_J1939 = _have_socket_can_j1939()
+
 HAVE_SOCKET_RDS = _have_socket_rds()
 
 HAVE_SOCKET_ALG = _have_socket_alg()
@@ -138,6 +163,10 @@
 
 HAVE_SOCKET_VSOCK = _have_socket_vsock()
 
+HAVE_SOCKET_UDPLITE = hasattr(socket, "IPPROTO_UDPLITE")
+
+HAVE_SOCKET_BLUETOOTH = _have_socket_bluetooth()
+
 # Size in bytes of the int type
 SIZEOF_INT = array.array("i").itemsize
 
@@ -145,7 +174,7 @@
 
     def setUp(self):
         self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.port = support.bind_port(self.serv)
+        self.port = socket_helper.bind_port(self.serv)
         self.serv.listen()
 
     def tearDown(self):
@@ -156,12 +185,18 @@
 
     def setUp(self):
         self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-        self.port = support.bind_port(self.serv)
+        self.port = socket_helper.bind_port(self.serv)
 
     def tearDown(self):
         self.serv.close()
         self.serv = None
 
+class SocketUDPLITETest(SocketUDPTest):
+
+    def setUp(self):
+        self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDPLITE)
+        self.port = socket_helper.bind_port(self.serv)
+
 class ThreadSafeCleanupTestCase(unittest.TestCase):
     """Subclass of unittest.TestCase with thread-safe cleanup methods.
 
@@ -243,7 +278,7 @@
         self.serv = socket.socket(socket.PF_RDS, socket.SOCK_SEQPACKET, 0)
         self.addCleanup(self.serv.close)
         try:
-            self.port = support.bind_port(self.serv)
+            self.port = socket_helper.bind_port(self.serv)
         except OSError:
             self.skipTest('unable to bind RDS socket')
 
@@ -393,6 +428,22 @@
         self.cli = None
         ThreadableTest.clientTearDown(self)
 
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+class ThreadedUDPLITESocketTest(SocketUDPLITETest, ThreadableTest):
+
+    def __init__(self, methodName='runTest'):
+        SocketUDPLITETest.__init__(self, methodName=methodName)
+        ThreadableTest.__init__(self)
+
+    def clientSetUp(self):
+        self.cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDPLITE)
+
+    def clientTearDown(self):
+        self.cli.close()
+        self.cli = None
+        ThreadableTest.clientTearDown(self)
+
 class ThreadedCANSocketTest(SocketCANTest, ThreadableTest):
 
     def __init__(self, methodName='runTest'):
@@ -644,7 +695,7 @@
 
     def bindSock(self, sock):
         path = tempfile.mktemp(dir=self.dir_path)
-        support.bind_unix_socket(sock, path)
+        socket_helper.bind_unix_socket(sock, path)
         self.addCleanup(support.unlink, path)
 
 class UnixStreamBase(UnixSocketTestBase):
@@ -664,7 +715,7 @@
         self.port = self.serv_addr[1]
 
     def bindSock(self, sock):
-        support.bind_port(sock, host=self.host)
+        socket_helper.bind_port(sock, host=self.host)
 
 class TCPTestBase(InetTestBase):
     """Base class for TCP-over-IPv4 tests."""
@@ -678,6 +729,12 @@
     def newSocket(self):
         return socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 
+class UDPLITETestBase(InetTestBase):
+    """Base class for UDPLITE-over-IPv4 tests."""
+
+    def newSocket(self):
+        return socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDPLITE)
+
 class SCTPStreamBase(InetTestBase):
     """Base class for SCTP tests in one-to-one (SOCK_STREAM) mode."""
 
@@ -689,7 +746,7 @@
 class Inet6TestBase(InetTestBase):
     """Base class for IPv6 socket tests."""
 
-    host = support.HOSTv6
+    host = socket_helper.HOSTv6
 
 class UDP6TestBase(Inet6TestBase):
     """Base class for UDP-over-IPv6 tests."""
@@ -697,6 +754,12 @@
     def newSocket(self):
         return socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
 
+class UDPLITE6TestBase(Inet6TestBase):
+    """Base class for UDPLITE-over-IPv6 tests."""
+
+    def newSocket(self):
+        return socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDPLITE)
+
 
 # Test-skipping decorators for use with ThreadableTest.
 
@@ -896,6 +959,37 @@
         socket.IPPROTO_L2TP
         socket.IPPROTO_SCTP
 
+    @unittest.skipUnless(sys.platform == 'darwin', 'macOS specific test')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
+    def test3542SocketOptions(self):
+        # Ref. issue #35569 and https://tools.ietf.org/html/rfc3542
+        opts = {
+            'IPV6_CHECKSUM',
+            'IPV6_DONTFRAG',
+            'IPV6_DSTOPTS',
+            'IPV6_HOPLIMIT',
+            'IPV6_HOPOPTS',
+            'IPV6_NEXTHOP',
+            'IPV6_PATHMTU',
+            'IPV6_PKTINFO',
+            'IPV6_RECVDSTOPTS',
+            'IPV6_RECVHOPLIMIT',
+            'IPV6_RECVHOPOPTS',
+            'IPV6_RECVPATHMTU',
+            'IPV6_RECVPKTINFO',
+            'IPV6_RECVRTHDR',
+            'IPV6_RECVTCLASS',
+            'IPV6_RTHDR',
+            'IPV6_RTHDRDSTOPTS',
+            'IPV6_RTHDR_TYPE_0',
+            'IPV6_TCLASS',
+            'IPV6_USE_MIN_MTU',
+        }
+        for opt in opts:
+            self.assertTrue(
+                hasattr(socket, opt), f"Missing RFC3542 socket option '{opt}'"
+            )
+
     def testHostnameRes(self):
         # Testing hostname resolution mechanisms
         hostname = socket.gethostname()
@@ -916,12 +1010,12 @@
             self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
 
     def test_host_resolution(self):
-        for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
+        for addr in [socket_helper.HOSTv4, '10.0.0.1', '255.255.255.255']:
             self.assertEqual(socket.gethostbyname(addr), addr)
 
-        # we don't test support.HOSTv6 because there's a chance it doesn't have
+        # we don't test socket_helper.HOSTv6 because there's a chance it doesn't have
         # a matching name entry (e.g. 'ip6-localhost')
-        for host in [support.HOSTv4]:
+        for host in [socket_helper.HOSTv4]:
             self.assertIn(host, socket.gethostbyaddr(host)[2])
 
     def test_host_resolution_bad_address(self):
@@ -1284,7 +1378,7 @@
 
     def testSockName(self):
         # Testing getsockname()
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.addCleanup(sock.close)
         sock.bind(("0.0.0.0", port))
@@ -1350,7 +1444,7 @@
     def test_getsockaddrarg(self):
         sock = socket.socket()
         self.addCleanup(sock.close)
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         big_port = port + 65536
         neg_port = port - 65536
         self.assertRaises(OverflowError, sock.bind, (HOST, big_port))
@@ -1358,7 +1452,7 @@
         # Since find_unused_port() is inherently subject to race conditions, we
         # call it a couple times if necessary.
         for i in itertools.count():
-            port = support.find_unused_port()
+            port = socket_helper.find_unused_port()
             try:
                 sock.bind((HOST, port))
             except OSError as e:
@@ -1411,7 +1505,7 @@
         socket.getaddrinfo('localhost', 80)
         socket.getaddrinfo('127.0.0.1', 80)
         socket.getaddrinfo(None, 80)
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             socket.getaddrinfo('::1', 80)
         # port can be a string service name such as "http", a numeric
         # port number or None
@@ -1482,7 +1576,7 @@
     def test_idna(self):
         # Check for internet access before running test
         # (issue #12804, issue #25138).
-        with support.transient_internet('python.org'):
+        with socket_helper.transient_internet('python.org'):
             socket.gethostbyname('python.org')
 
         # these should all be successful
@@ -1624,14 +1718,14 @@
             srv.bind((HOST, 0))
             self.assertRaises(OverflowError, srv.listen, _testcapi.INT_MAX + 1)
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
     def test_flowinfo(self):
         self.assertRaises(OverflowError, socket.getnameinfo,
-                          (support.HOSTv6, 0, 0xffffffff), 0)
+                          (socket_helper.HOSTv6, 0, 0xffffffff), 0)
         with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s:
-            self.assertRaises(OverflowError, s.bind, (support.HOSTv6, 0, -10))
+            self.assertRaises(OverflowError, s.bind, (socket_helper.HOSTv6, 0, -10))
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
     def test_getaddrinfo_ipv6_basic(self):
         ((*_, sockaddr),) = socket.getaddrinfo(
             'ff02::1de:c0:face:8D',  # Note capital letter `D`.
@@ -1641,7 +1735,7 @@
         )
         self.assertEqual(sockaddr, ('ff02::1de:c0:face:8d', 1234, 0, 0))
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
     @unittest.skipIf(sys.platform == 'win32', 'does not work on Windows')
     @unittest.skipIf(AIX, 'Symbolic scope id does not work')
     def test_getaddrinfo_ipv6_scopeid_symbolic(self):
@@ -1656,7 +1750,7 @@
         # Note missing interface name part in IPv6 address
         self.assertEqual(sockaddr, ('ff02::1de:c0:face:8d', 1234, 0, ifindex))
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
     @unittest.skipUnless(
         sys.platform == 'win32',
         'Numeric scope id does not work or undocumented')
@@ -1673,7 +1767,7 @@
         # Note missing interface name part in IPv6 address
         self.assertEqual(sockaddr, ('ff02::1de:c0:face:8d', 1234, 0, ifindex))
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
     @unittest.skipIf(sys.platform == 'win32', 'does not work on Windows')
     @unittest.skipIf(AIX, 'Symbolic scope id does not work')
     def test_getnameinfo_ipv6_scopeid_symbolic(self):
@@ -1683,7 +1777,7 @@
         nameinfo = socket.getnameinfo(sockaddr, socket.NI_NUMERICHOST | socket.NI_NUMERICSERV)
         self.assertEqual(nameinfo, ('ff02::1de:c0:face:8d%' + test_interface, '1234'))
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
     @unittest.skipUnless( sys.platform == 'win32',
         'Numeric scope id does not work or undocumented')
     def test_getnameinfo_ipv6_scopeid_numeric(self):
@@ -1776,19 +1870,19 @@
     def test_socket_fileno(self):
         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.addCleanup(s.close)
-        s.bind((support.HOST, 0))
+        s.bind((socket_helper.HOST, 0))
         self._test_socket_fileno(s, socket.AF_INET, socket.SOCK_STREAM)
 
         if hasattr(socket, "SOCK_DGRAM"):
             s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
             self.addCleanup(s.close)
-            s.bind((support.HOST, 0))
+            s.bind((socket_helper.HOST, 0))
             self._test_socket_fileno(s, socket.AF_INET, socket.SOCK_DGRAM)
 
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
             self.addCleanup(s.close)
-            s.bind((support.HOSTv6, 0, 0, 0))
+            s.bind((socket_helper.HOSTv6, 0, 0, 0))
             self._test_socket_fileno(s, socket.AF_INET6, socket.SOCK_STREAM)
 
         if hasattr(socket, "AF_UNIX"):
@@ -2066,6 +2160,68 @@
                 raise
 
 
+@unittest.skipUnless(HAVE_SOCKET_CAN_J1939, 'CAN J1939 required for this test.')
+class J1939Test(unittest.TestCase):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.interface = "vcan0"
+
+    @unittest.skipUnless(hasattr(socket, "CAN_J1939"),
+                         'socket.CAN_J1939 required for this test.')
+    def testJ1939Constants(self):
+        socket.CAN_J1939
+
+        socket.J1939_MAX_UNICAST_ADDR
+        socket.J1939_IDLE_ADDR
+        socket.J1939_NO_ADDR
+        socket.J1939_NO_NAME
+        socket.J1939_PGN_REQUEST
+        socket.J1939_PGN_ADDRESS_CLAIMED
+        socket.J1939_PGN_ADDRESS_COMMANDED
+        socket.J1939_PGN_PDU1_MAX
+        socket.J1939_PGN_MAX
+        socket.J1939_NO_PGN
+
+        # J1939 socket options
+        socket.SO_J1939_FILTER
+        socket.SO_J1939_PROMISC
+        socket.SO_J1939_SEND_PRIO
+        socket.SO_J1939_ERRQUEUE
+
+        socket.SCM_J1939_DEST_ADDR
+        socket.SCM_J1939_DEST_NAME
+        socket.SCM_J1939_PRIO
+        socket.SCM_J1939_ERRQUEUE
+
+        socket.J1939_NLA_PAD
+        socket.J1939_NLA_BYTES_ACKED
+
+        socket.J1939_EE_INFO_NONE
+        socket.J1939_EE_INFO_TX_ABORT
+
+        socket.J1939_FILTER_MAX
+
+    @unittest.skipUnless(hasattr(socket, "CAN_J1939"),
+                         'socket.CAN_J1939 required for this test.')
+    def testCreateJ1939Socket(self):
+        with socket.socket(socket.PF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939) as s:
+            pass
+
+    def testBind(self):
+        try:
+            with socket.socket(socket.PF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939) as s:
+                addr = self.interface, socket.J1939_NO_NAME, socket.J1939_NO_PGN, socket.J1939_NO_ADDR
+                s.bind(addr)
+                self.assertEqual(s.getsockname(), addr)
+        except OSError as e:
+            if e.errno == errno.ENODEV:
+                self.skipTest('network interface `%s` does not exist' %
+                           self.interface)
+            else:
+                raise
+
+
 @unittest.skipUnless(HAVE_SOCKET_RDS, 'RDS sockets required for this test.')
 class BasicRDSTest(unittest.TestCase):
 
@@ -2164,12 +2320,12 @@
 
     def testBindSock(self):
         with socket.socket(socket.AF_QIPCRTR, socket.SOCK_DGRAM) as s:
-            support.bind_port(s, host=s.getsockname()[0])
+            socket_helper.bind_port(s, host=s.getsockname()[0])
             self.assertNotEqual(s.getsockname()[1], 0)
 
     def testInvalidBindSock(self):
         with socket.socket(socket.AF_QIPCRTR, socket.SOCK_DGRAM) as s:
-            self.assertRaises(OSError, support.bind_port, s, host=-2)
+            self.assertRaises(OSError, socket_helper.bind_port, s, host=-2)
 
     def testAutoBindSock(self):
         with socket.socket(socket.AF_QIPCRTR, socket.SOCK_DGRAM) as s:
@@ -2225,6 +2381,45 @@
                              socket.SO_VM_SOCKETS_BUFFER_MIN_SIZE))
 
 
+@unittest.skipUnless(HAVE_SOCKET_BLUETOOTH,
+                     'Bluetooth sockets required for this test.')
+class BasicBluetoothTest(unittest.TestCase):
+
+    def testBluetoothConstants(self):
+        socket.BDADDR_ANY
+        socket.BDADDR_LOCAL
+        socket.AF_BLUETOOTH
+        socket.BTPROTO_RFCOMM
+
+        if sys.platform != "win32":
+            socket.BTPROTO_HCI
+            socket.SOL_HCI
+            socket.BTPROTO_L2CAP
+
+            if not sys.platform.startswith("freebsd"):
+                socket.BTPROTO_SCO
+
+    def testCreateRfcommSocket(self):
+        with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) as s:
+            pass
+
+    @unittest.skipIf(sys.platform == "win32", "windows does not support L2CAP sockets")
+    def testCreateL2capSocket(self):
+        with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_L2CAP) as s:
+            pass
+
+    @unittest.skipIf(sys.platform == "win32", "windows does not support HCI sockets")
+    def testCreateHciSocket(self):
+        with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_RAW, socket.BTPROTO_HCI) as s:
+            pass
+
+    @unittest.skipIf(sys.platform == "win32" or sys.platform.startswith("freebsd"),
+                     "windows and freebsd do not support SCO sockets")
+    def testCreateScoSocket(self):
+        with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_SCO) as s:
+            pass
+
+
 class BasicTCPTest(SocketConnectedTest):
 
     def __init__(self, methodName='runTest'):
@@ -2376,6 +2571,37 @@
     def _testRecvFromNegative(self):
         self.cli.sendto(MSG, 0, (HOST, self.port))
 
+
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+class BasicUDPLITETest(ThreadedUDPLITESocketTest):
+
+    def __init__(self, methodName='runTest'):
+        ThreadedUDPLITESocketTest.__init__(self, methodName=methodName)
+
+    def testSendtoAndRecv(self):
+        # Testing sendto() and Recv() over UDPLITE
+        msg = self.serv.recv(len(MSG))
+        self.assertEqual(msg, MSG)
+
+    def _testSendtoAndRecv(self):
+        self.cli.sendto(MSG, 0, (HOST, self.port))
+
+    def testRecvFrom(self):
+        # Testing recvfrom() over UDPLITE
+        msg, addr = self.serv.recvfrom(len(MSG))
+        self.assertEqual(msg, MSG)
+
+    def _testRecvFrom(self):
+        self.cli.sendto(MSG, 0, (HOST, self.port))
+
+    def testRecvFromNegative(self):
+        # Negative lengths passed to recvfrom should give ValueError.
+        self.assertRaises(ValueError, self.serv.recvfrom, -1)
+
+    def _testRecvFromNegative(self):
+        self.cli.sendto(MSG, 0, (HOST, self.port))
+
 # Tests for the sendmsg()/recvmsg() interface.  Where possible, the
 # same test code is used with different families and types of socket
 # (e.g. stream, datagram), and tests using recvmsg() are repeated
@@ -2408,7 +2634,7 @@
 
     # Time in seconds to wait before considering a test failed, or
     # None for no timeout.  Not all tests actually set a timeout.
-    fail_timeout = 3.0
+    fail_timeout = support.LOOPBACK_TIMEOUT
 
     def setUp(self):
         self.misc_event = threading.Event()
@@ -3974,25 +4200,25 @@
         self.assertEqual(addr1[:-1], addr2[:-1])
 
 @requireAttrs(socket.socket, "sendmsg")
-@unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
 @requireSocket("AF_INET6", "SOCK_DGRAM")
 class SendmsgUDP6Test(SendmsgConnectionlessTests, SendrecvmsgUDP6TestBase):
     pass
 
 @requireAttrs(socket.socket, "recvmsg")
-@unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
 @requireSocket("AF_INET6", "SOCK_DGRAM")
 class RecvmsgUDP6Test(RecvmsgTests, SendrecvmsgUDP6TestBase):
     pass
 
 @requireAttrs(socket.socket, "recvmsg_into")
-@unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
 @requireSocket("AF_INET6", "SOCK_DGRAM")
 class RecvmsgIntoUDP6Test(RecvmsgIntoTests, SendrecvmsgUDP6TestBase):
     pass
 
 @requireAttrs(socket.socket, "recvmsg")
-@unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
 @requireAttrs(socket, "IPPROTO_IPV6")
 @requireSocket("AF_INET6", "SOCK_DGRAM")
 class RecvmsgRFC3542AncillaryUDP6Test(RFC3542AncillaryTest,
@@ -4000,7 +4226,7 @@
     pass
 
 @requireAttrs(socket.socket, "recvmsg_into")
-@unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
 @requireAttrs(socket, "IPPROTO_IPV6")
 @requireSocket("AF_INET6", "SOCK_DGRAM")
 class RecvmsgIntoRFC3542AncillaryUDP6Test(RecvmsgIntoMixin,
@@ -4009,6 +4235,89 @@
     pass
 
 
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+class SendrecvmsgUDPLITETestBase(SendrecvmsgDgramFlagsBase,
+                             SendrecvmsgConnectionlessBase,
+                             ThreadedSocketTestMixin, UDPLITETestBase):
+    pass
+
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireAttrs(socket.socket, "sendmsg")
+class SendmsgUDPLITETest(SendmsgConnectionlessTests, SendrecvmsgUDPLITETestBase):
+    pass
+
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireAttrs(socket.socket, "recvmsg")
+class RecvmsgUDPLITETest(RecvmsgTests, SendrecvmsgUDPLITETestBase):
+    pass
+
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireAttrs(socket.socket, "recvmsg_into")
+class RecvmsgIntoUDPLITETest(RecvmsgIntoTests, SendrecvmsgUDPLITETestBase):
+    pass
+
+
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+class SendrecvmsgUDPLITE6TestBase(SendrecvmsgDgramFlagsBase,
+                              SendrecvmsgConnectionlessBase,
+                              ThreadedSocketTestMixin, UDPLITE6TestBase):
+
+    def checkRecvmsgAddress(self, addr1, addr2):
+        # Called to compare the received address with the address of
+        # the peer, ignoring scope ID
+        self.assertEqual(addr1[:-1], addr2[:-1])
+
+@requireAttrs(socket.socket, "sendmsg")
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireSocket("AF_INET6", "SOCK_DGRAM")
+class SendmsgUDPLITE6Test(SendmsgConnectionlessTests, SendrecvmsgUDPLITE6TestBase):
+    pass
+
+@requireAttrs(socket.socket, "recvmsg")
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireSocket("AF_INET6", "SOCK_DGRAM")
+class RecvmsgUDPLITE6Test(RecvmsgTests, SendrecvmsgUDPLITE6TestBase):
+    pass
+
+@requireAttrs(socket.socket, "recvmsg_into")
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireSocket("AF_INET6", "SOCK_DGRAM")
+class RecvmsgIntoUDPLITE6Test(RecvmsgIntoTests, SendrecvmsgUDPLITE6TestBase):
+    pass
+
+@requireAttrs(socket.socket, "recvmsg")
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireAttrs(socket, "IPPROTO_IPV6")
+@requireSocket("AF_INET6", "SOCK_DGRAM")
+class RecvmsgRFC3542AncillaryUDPLITE6Test(RFC3542AncillaryTest,
+                                      SendrecvmsgUDPLITE6TestBase):
+    pass
+
+@requireAttrs(socket.socket, "recvmsg_into")
+@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test.')
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+@requireAttrs(socket, "IPPROTO_IPV6")
+@requireSocket("AF_INET6", "SOCK_DGRAM")
+class RecvmsgIntoRFC3542AncillaryUDPLITE6Test(RecvmsgIntoMixin,
+                                          RFC3542AncillaryTest,
+                                          SendrecvmsgUDPLITE6TestBase):
+    pass
+
+
 class SendrecvmsgTCPTestBase(SendrecvmsgConnectedBase,
                              ConnectedStreamTestMixin, TCPTestBase):
     pass
@@ -4118,7 +4427,7 @@
         self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler)
 
     # Timeout for socket operations
-    timeout = 4.0
+    timeout = support.LOOPBACK_TIMEOUT
 
     # Provide setAlarm() method to schedule delivery of SIGALRM after
     # given number of seconds, or cancel it if zero, and an
@@ -4397,7 +4706,7 @@
 
     def testAccept(self):
         # Testing non-blocking accept
-        self.serv.setblocking(0)
+        self.serv.setblocking(False)
 
         # connect() didn't start: non-blocking accept() fails
         start_time = time.monotonic()
@@ -4408,7 +4717,7 @@
 
         self.event.set()
 
-        read, write, err = select.select([self.serv], [], [], MAIN_TIMEOUT)
+        read, write, err = select.select([self.serv], [], [], support.LONG_TIMEOUT)
         if self.serv not in read:
             self.fail("Error trying to do accept after select.")
 
@@ -4428,7 +4737,7 @@
         # Testing non-blocking recv
         conn, addr = self.serv.accept()
         self.addCleanup(conn.close)
-        conn.setblocking(0)
+        conn.setblocking(False)
 
         # the server didn't send data yet: non-blocking recv() fails
         with self.assertRaises(BlockingIOError):
@@ -4436,7 +4745,7 @@
 
         self.event.set()
 
-        read, write, err = select.select([conn], [], [], MAIN_TIMEOUT)
+        read, write, err = select.select([conn], [], [], support.LONG_TIMEOUT)
         if conn not in read:
             self.fail("Error during select call to non-blocking socket.")
 
@@ -4796,7 +5105,7 @@
             socket.socket = old_socket
 
     def test_connect(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.addCleanup(cli.close)
         with self.assertRaises(OSError) as cm:
@@ -4806,7 +5115,7 @@
     def test_create_connection(self):
         # Issue #9792: errors raised by create_connection() should have
         # a proper errno attribute.
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         with self.assertRaises(OSError) as cm:
             socket.create_connection((HOST, port))
 
@@ -4824,7 +5133,7 @@
         # On Solaris, ENETUNREACH is returned in this circumstance instead
         # of ECONNREFUSED.  So, if that errno exists, add it to our list of
         # expected errnos.
-        expected_errnos = support.get_socket_conn_refused_errs()
+        expected_errnos = socket_helper.get_socket_conn_refused_errs()
         self.assertIn(cm.exception.errno, expected_errnos)
 
     def test_create_connection_timeout(self):
@@ -4836,7 +5145,7 @@
             except socket.timeout:
                 pass
             except OSError as exc:
-                if support.IPV6_ENABLED or exc.errno != errno.EAFNOSUPPORT:
+                if socket_helper.IPV6_ENABLED or exc.errno != errno.EAFNOSUPPORT:
                     raise
             else:
                 self.fail('socket.timeout not raised')
@@ -4849,7 +5158,7 @@
         ThreadableTest.__init__(self)
 
     def clientSetUp(self):
-        self.source_port = support.find_unused_port()
+        self.source_port = socket_helper.find_unused_port()
 
     def clientTearDown(self):
         self.cli.close()
@@ -4862,14 +5171,16 @@
 
     testFamily = _justAccept
     def _testFamily(self):
-        self.cli = socket.create_connection((HOST, self.port), timeout=30)
+        self.cli = socket.create_connection((HOST, self.port),
+                            timeout=support.LOOPBACK_TIMEOUT)
         self.addCleanup(self.cli.close)
         self.assertEqual(self.cli.family, 2)
 
     testSourceAddress = _justAccept
     def _testSourceAddress(self):
-        self.cli = socket.create_connection((HOST, self.port), timeout=30,
-                source_address=('', self.source_port))
+        self.cli = socket.create_connection((HOST, self.port),
+                            timeout=support.LOOPBACK_TIMEOUT,
+                            source_address=('', self.source_port))
         self.addCleanup(self.cli.close)
         self.assertEqual(self.cli.getsockname()[1], self.source_port)
         # The port number being used is sufficient to show that the bind()
@@ -5022,6 +5333,31 @@
         if not ok:
             self.fail("recv() returned success when we did not expect it")
 
+@unittest.skipUnless(HAVE_SOCKET_UDPLITE,
+          'UDPLITE sockets required for this test.')
+class UDPLITETimeoutTest(SocketUDPLITETest):
+
+    def testUDPLITETimeout(self):
+        def raise_timeout(*args, **kwargs):
+            self.serv.settimeout(1.0)
+            self.serv.recv(1024)
+        self.assertRaises(socket.timeout, raise_timeout,
+                              "Error generating a timeout exception (UDPLITE)")
+
+    def testTimeoutZero(self):
+        ok = False
+        try:
+            self.serv.settimeout(0.0)
+            foo = self.serv.recv(1024)
+        except socket.timeout:
+            self.fail("caught timeout instead of error (UDPLITE)")
+        except OSError:
+            ok = True
+        except:
+            self.fail("caught unexpected exception (UDPLITE)")
+        if not ok:
+            self.fail("recv() returned success when we did not expect it")
+
 class TestExceptions(unittest.TestCase):
 
     def testExceptionTree(self):
@@ -5108,7 +5444,7 @@
     def bind(self, sock, path):
         # Bind the socket
         try:
-            support.bind_unix_socket(sock, path)
+            socket_helper.bind_unix_socket(sock, path)
         except OSError as e:
             if str(e) == "AF_UNIX path too long":
                 self.skipTest(
@@ -5473,15 +5809,15 @@
         with socket.socket(socket.AF_INET,
                            socket.SOCK_STREAM | socket.SOCK_NONBLOCK) as s:
             self.checkNonblock(s)
-            s.setblocking(1)
+            s.setblocking(True)
             self.checkNonblock(s, nonblock=False)
-            s.setblocking(0)
+            s.setblocking(False)
             self.checkNonblock(s)
             s.settimeout(None)
             self.checkNonblock(s, nonblock=False)
             s.settimeout(2.0)
             self.checkNonblock(s, timeout=2.0)
-            s.setblocking(1)
+            s.setblocking(True)
             self.checkNonblock(s, nonblock=False)
         # defaulttimeout
         t = socket.getdefaulttimeout()
@@ -5611,7 +5947,7 @@
     FILESIZE = (10 * 1024 * 1024)  # 10 MiB
     BUFSIZE = 8192
     FILEDATA = b""
-    TIMEOUT = 2
+    TIMEOUT = support.LOOPBACK_TIMEOUT
 
     @classmethod
     def setUpClass(cls):
@@ -5637,7 +5973,7 @@
         support.unlink(support.TESTFN)
 
     def accept_conn(self):
-        self.serv.settimeout(MAIN_TIMEOUT)
+        self.serv.settimeout(support.LONG_TIMEOUT)
         conn, addr = self.serv.accept()
         conn.settimeout(self.TIMEOUT)
         self.addCleanup(conn.close)
@@ -5733,7 +6069,9 @@
     def _testCount(self):
         address = self.serv.getsockname()
         file = open(support.TESTFN, 'rb')
-        with socket.create_connection(address, timeout=2) as sock, file as file:
+        sock = socket.create_connection(address,
+                                        timeout=support.LOOPBACK_TIMEOUT)
+        with sock, file:
             count = 5000007
             meth = self.meth_from_sock(sock)
             sent = meth(file, count=count)
@@ -5752,7 +6090,9 @@
     def _testCountSmall(self):
         address = self.serv.getsockname()
         file = open(support.TESTFN, 'rb')
-        with socket.create_connection(address, timeout=2) as sock, file as file:
+        sock = socket.create_connection(address,
+                                        timeout=support.LOOPBACK_TIMEOUT)
+        with sock, file:
             count = 1
             meth = self.meth_from_sock(sock)
             sent = meth(file, count=count)
@@ -5806,7 +6146,9 @@
     def _testWithTimeout(self):
         address = self.serv.getsockname()
         file = open(support.TESTFN, 'rb')
-        with socket.create_connection(address, timeout=2) as sock, file as file:
+        sock = socket.create_connection(address,
+                                        timeout=support.LOOPBACK_TIMEOUT)
+        with sock, file:
             meth = self.meth_from_sock(sock)
             sent = meth(file)
             self.assertEqual(sent, self.FILESIZE)
@@ -6092,11 +6434,11 @@
 class CreateServerTest(unittest.TestCase):
 
     def test_address(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         with socket.create_server(("127.0.0.1", port)) as sock:
             self.assertEqual(sock.getsockname()[0], "127.0.0.1")
             self.assertEqual(sock.getsockname()[1], port)
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             with socket.create_server(("::1", port),
                                       family=socket.AF_INET6) as sock:
                 self.assertEqual(sock.getsockname()[0], "::1")
@@ -6106,7 +6448,7 @@
         with socket.create_server(("127.0.0.1", 0)) as sock:
             self.assertEqual(sock.family, socket.AF_INET)
             self.assertEqual(sock.type, socket.SOCK_STREAM)
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             with socket.create_server(("::1", 0), family=socket.AF_INET6) as s:
                 self.assertEqual(s.family, socket.AF_INET6)
                 self.assertEqual(sock.type, socket.SOCK_STREAM)
@@ -6126,14 +6468,14 @@
     @unittest.skipIf(not hasattr(_socket, 'IPPROTO_IPV6') or
                      not hasattr(_socket, 'IPV6_V6ONLY'),
                      "IPV6_V6ONLY option not supported")
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
     def test_ipv6_only_default(self):
         with socket.create_server(("::1", 0), family=socket.AF_INET6) as sock:
             assert sock.getsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY)
 
     @unittest.skipIf(not socket.has_dualstack_ipv6(),
                      "dualstack_ipv6 not supported")
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
     def test_dualstack_ipv6_family(self):
         with socket.create_server(("::1", 0), family=socket.AF_INET6,
                                   dualstack_ipv6=True) as sock:
@@ -6141,7 +6483,7 @@
 
 
 class CreateServerFunctionalTest(unittest.TestCase):
-    timeout = 3
+    timeout = support.LOOPBACK_TIMEOUT
 
     def setUp(self):
         self.thread = None
@@ -6175,14 +6517,14 @@
             self.assertEqual(sock.recv(1024), b'foo')
 
     def test_tcp4(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         with socket.create_server(("", port)) as sock:
             self.echo_server(sock)
             self.echo_client(("127.0.0.1", port), socket.AF_INET)
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
     def test_tcp6(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         with socket.create_server(("", port),
                                   family=socket.AF_INET6) as sock:
             self.echo_server(sock)
@@ -6192,9 +6534,9 @@
 
     @unittest.skipIf(not socket.has_dualstack_ipv6(),
                      "dualstack_ipv6 not supported")
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
     def test_dual_stack_client_v4(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         with socket.create_server(("", port), family=socket.AF_INET6,
                                   dualstack_ipv6=True) as sock:
             self.echo_server(sock)
@@ -6202,19 +6544,61 @@
 
     @unittest.skipIf(not socket.has_dualstack_ipv6(),
                      "dualstack_ipv6 not supported")
-    @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test')
     def test_dual_stack_client_v6(self):
-        port = support.find_unused_port()
+        port = socket_helper.find_unused_port()
         with socket.create_server(("", port), family=socket.AF_INET6,
                                   dualstack_ipv6=True) as sock:
             self.echo_server(sock)
             self.echo_client(("::1", port), socket.AF_INET6)
 
+@requireAttrs(socket, "send_fds")
+@requireAttrs(socket, "recv_fds")
+@requireAttrs(socket, "AF_UNIX")
+class SendRecvFdsTests(unittest.TestCase):
+    def testSendAndRecvFds(self):
+        def close_pipes(pipes):
+            for fd1, fd2 in pipes:
+                os.close(fd1)
+                os.close(fd2)
+
+        def close_fds(fds):
+            for fd in fds:
+                os.close(fd)
+
+        # send 10 file descriptors
+        pipes = [os.pipe() for _ in range(10)]
+        self.addCleanup(close_pipes, pipes)
+        fds = [rfd for rfd, wfd in pipes]
+
+        # use a UNIX socket pair to exchange file descriptors locally
+        sock1, sock2 = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
+        with sock1, sock2:
+            socket.send_fds(sock1, [MSG], fds)
+            # request more data and file descriptors than expected
+            msg, fds2, flags, addr = socket.recv_fds(sock2, len(MSG) * 2, len(fds) * 2)
+            self.addCleanup(close_fds, fds2)
+
+        self.assertEqual(msg, MSG)
+        self.assertEqual(len(fds2), len(fds))
+        self.assertEqual(flags, 0)
+        # don't test addr
+
+        # test that file descriptors are connected
+        for index, fds in enumerate(pipes):
+            rfd, wfd = fds
+            os.write(wfd, str(index).encode())
+
+        for index, rfd in enumerate(fds2):
+            data = os.read(rfd, 100)
+            self.assertEqual(data,  str(index).encode())
+
 
 def test_main():
     tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
              TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest,
-             UDPTimeoutTest, CreateServerTest, CreateServerFunctionalTest]
+             UDPTimeoutTest, CreateServerTest, CreateServerFunctionalTest,
+             SendRecvFdsTests]
 
     tests.extend([
         NonBlockingTCPTests,
@@ -6244,6 +6628,7 @@
         BasicVSOCKTest,
         ThreadedVSOCKSocketStreamTest,
     ])
+    tests.append(BasicBluetoothTest)
     tests.extend([
         CmsgMacroTests,
         SendmsgUDPTest,
@@ -6254,6 +6639,14 @@
         RecvmsgRFC3542AncillaryUDP6Test,
         RecvmsgIntoRFC3542AncillaryUDP6Test,
         RecvmsgIntoUDP6Test,
+        SendmsgUDPLITETest,
+        RecvmsgUDPLITETest,
+        RecvmsgIntoUDPLITETest,
+        SendmsgUDPLITE6Test,
+        RecvmsgUDPLITE6Test,
+        RecvmsgRFC3542AncillaryUDPLITE6Test,
+        RecvmsgIntoRFC3542AncillaryUDPLITE6Test,
+        RecvmsgIntoUDPLITE6Test,
         SendmsgTCPTest,
         RecvmsgTCPTest,
         RecvmsgIntoTCPTest,
@@ -6278,5 +6671,6 @@
     support.run_unittest(*tests)
     support.threading_cleanup(*thread_info)
 
+
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index 8aed4b6..c663cc9 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -15,12 +15,13 @@
 
 import test.support
 from test.support import reap_children, reap_threads, verbose
+from test.support import socket_helper
 
 
 test.support.requires("network")
 
 TEST_STR = b"hello world\n"
-HOST = test.support.HOST
+HOST = socket_helper.HOST
 
 HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX")
 requires_unix_sockets = unittest.skipUnless(HAVE_UNIX_SOCKETS,
@@ -36,7 +37,7 @@
 # Remember real select() to avoid interferences with mocking
 _real_select = select.select
 
-def receive(sock, n, timeout=20):
+def receive(sock, n, timeout=test.support.SHORT_TIMEOUT):
     r, w, x = _real_select([sock], [], [], timeout)
     if sock in r:
         return sock.recv(n)
@@ -65,9 +66,7 @@
     except:
         raise
     finally:
-        pid2, status = os.waitpid(pid, 0)
-        testcase.assertEqual(pid2, pid)
-        testcase.assertEqual(72 << 8, status)
+        test.support.wait_process(pid, exitcode=72)
 
 
 class SocketServerTest(unittest.TestCase):
diff --git a/Lib/test/test_source_encoding.py b/Lib/test/test_source_encoding.py
index a0bd741..5ca4346 100644
--- a/Lib/test/test_source_encoding.py
+++ b/Lib/test/test_source_encoding.py
@@ -57,6 +57,9 @@
         # one byte in common with the UTF-16-LE BOM
         self.assertRaises(SyntaxError, eval, b'\xff\x20')
 
+        # one byte in common with the UTF-8 BOM
+        self.assertRaises(SyntaxError, eval, b'\xef\x20')
+
         # two bytes in common with the UTF-8 BOM
         self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20')
 
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 0bc0a8c..27cb884 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -4,6 +4,7 @@
 import unittest
 import unittest.mock
 from test import support
+from test.support import socket_helper
 import socket
 import select
 import time
@@ -29,8 +30,11 @@
 
 from ssl import TLSVersion, _TLSContentType, _TLSMessageType
 
+Py_DEBUG = hasattr(sys, 'gettotalrefcount')
+Py_DEBUG_WIN32 = Py_DEBUG and sys.platform == 'win32'
+
 PROTOCOLS = sorted(ssl._PROTOCOL_NAMES)
-HOST = support.HOST
+HOST = socket_helper.HOST
 IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL')
 IS_OPENSSL_1_1_0 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0)
 IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1)
@@ -405,8 +409,7 @@
         else:
             os.close(wfd)
             self.addCleanup(os.close, rfd)
-            _, status = os.waitpid(pid, 0)
-            self.assertEqual(status, 0)
+            support.wait_process(pid, exitcode=0)
 
             child_random = os.read(rfd, 16)
             self.assertEqual(len(child_random), 16)
@@ -760,7 +763,7 @@
         fail(cert, 'example.net')
 
         # -- IPv6 matching --
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             cert = {'subject': ((('commonName', 'example.com'),),),
                     'subjectAltName': (
                         ('DNS', 'example.com'),
@@ -843,7 +846,7 @@
                 ssl._inet_paton(invalid)
         for ipaddr in ['127.0.0.1', '192.168.0.1']:
             self.assertTrue(ssl._inet_paton(ipaddr))
-        if support.IPV6_ENABLED:
+        if socket_helper.IPV6_ENABLED:
             for ipaddr in ['::1', '2001:db8:85a3::8a2e:370:7334']:
                 self.assertTrue(ssl._inet_paton(ipaddr))
 
@@ -1071,7 +1074,7 @@
     def test_connect_ex_error(self):
         server = socket.socket(socket.AF_INET)
         self.addCleanup(server.close)
-        port = support.bind_port(server)  # Reserve port but don't listen
+        port = socket_helper.bind_port(server)  # Reserve port but don't listen
         s = test_wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED)
         self.addCleanup(s.close)
@@ -1446,6 +1449,7 @@
             ctx.load_verify_locations(cadata=b"broken")
 
 
+    @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
     def test_load_dh_params(self):
         ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
         ctx.load_dh_params(DHFILE)
@@ -1764,6 +1768,7 @@
         self.assertEqual(str(e), "foo")
         self.assertEqual(e.errno, 1)
 
+    @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
     def test_lib_reason(self):
         # Test the library and reason attributes
         ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
@@ -2151,7 +2156,7 @@
     def ssl_io_loop(self, sock, incoming, outgoing, func, *args, **kwargs):
         # A simple IO loop. Call func(*args) depending on the error we get
         # (WANT_READ or WANT_WRITE) move data between the socket and the BIOs.
-        timeout = kwargs.get('timeout', 10)
+        timeout = kwargs.get('timeout', support.SHORT_TIMEOUT)
         deadline = time.monotonic() + timeout
         count = 0
         while True:
@@ -2241,7 +2246,7 @@
     def test_timeout_connect_ex(self):
         # Issue #12065: on a timeout, connect_ex() should return the original
         # errno (mimicking the behaviour of non-SSL sockets).
-        with support.transient_internet(REMOTE_HOST):
+        with socket_helper.transient_internet(REMOTE_HOST):
             s = test_wrap_socket(socket.socket(socket.AF_INET),
                                 cert_reqs=ssl.CERT_REQUIRED,
                                 do_handshake_on_connect=False)
@@ -2252,9 +2257,9 @@
                 self.skipTest("REMOTE_HOST responded too quickly")
             self.assertIn(rc, (errno.EAGAIN, errno.EWOULDBLOCK))
 
-    @unittest.skipUnless(support.IPV6_ENABLED, 'Needs IPv6')
+    @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'Needs IPv6')
     def test_get_server_certificate_ipv6(self):
-        with support.transient_internet('ipv6.google.com'):
+        with socket_helper.transient_internet('ipv6.google.com'):
             _test_get_server_certificate(self, 'ipv6.google.com', 443)
             _test_get_server_certificate_fail(self, 'ipv6.google.com', 443)
 
@@ -2296,7 +2301,7 @@
             self.running = False
             self.sock = connsock
             self.addr = addr
-            self.sock.setblocking(1)
+            self.sock.setblocking(True)
             self.sslconn = None
             threading.Thread.__init__(self)
             self.daemon = True
@@ -2507,7 +2512,7 @@
         self.connectionchatty = connectionchatty
         self.starttls_server = starttls_server
         self.sock = socket.socket()
-        self.port = support.bind_port(self.sock)
+        self.port = socket_helper.bind_port(self.sock)
         self.flag = None
         self.active = False
         self.selected_npn_protocols = []
@@ -2620,7 +2625,7 @@
         def __init__(self, certfile):
             self.certfile = certfile
             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            self.port = support.bind_port(sock, '')
+            self.port = socket_helper.bind_port(sock, '')
             asyncore.dispatcher.__init__(self, sock)
             self.listen(5)
 
@@ -3140,7 +3145,7 @@
         listener_gone = threading.Event()
 
         s = socket.socket()
-        port = support.bind_port(s, HOST)
+        port = socket_helper.bind_port(s, HOST)
 
         # `listener` runs in a thread.  It sits in an accept() until
         # the main thread connects.  Then it rudely closes the socket,
@@ -3344,7 +3349,7 @@
         wrapped = False
         with server:
             s = socket.socket()
-            s.setblocking(1)
+            s.setblocking(True)
             s.connect((HOST, server.port))
             if support.verbose:
                 sys.stdout.write("\n")
@@ -3636,7 +3641,7 @@
         # Issue #5103: SSL handshake must respect the socket timeout
         server = socket.socket(socket.AF_INET)
         host = "127.0.0.1"
-        port = support.bind_port(server)
+        port = socket_helper.bind_port(server)
         started = threading.Event()
         finish = False
 
@@ -3690,7 +3695,7 @@
         context.load_cert_chain(SIGNED_CERTFILE)
         server = socket.socket(socket.AF_INET)
         host = "127.0.0.1"
-        port = support.bind_port(server)
+        port = socket_helper.bind_port(server)
         server = context.wrap_socket(server, server_side=True)
         self.assertTrue(server.server_side)
 
@@ -3826,6 +3831,7 @@
 
     @requires_minimum_version
     @requires_tls_version('TLSv1_2')
+    @requires_tls_version('TLSv1')
     def test_min_max_version_mismatch(self):
         client_context, server_context, hostname = testing_context()
         # client 1.0, server 1.2 (mismatch)
@@ -3953,6 +3959,7 @@
                                    sni_name=hostname)
         self.assertIs(stats['compression'], None)
 
+    @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
     def test_dh_params(self):
         # Check we can get a connection with ephemeral Diffie-Hellman
         client_context, server_context, hostname = testing_context()
@@ -4582,6 +4589,7 @@
             return len(list(f))
 
     @requires_keylog
+    @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
     def test_keylog_defaults(self):
         self.addCleanup(support.unlink, support.TESTFN)
         ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
@@ -4605,6 +4613,7 @@
             ctx.keylog_filename = 1
 
     @requires_keylog
+    @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
     def test_keylog_filename(self):
         self.addCleanup(support.unlink, support.TESTFN)
         client_context, server_context, hostname = testing_context()
@@ -4642,6 +4651,7 @@
     @requires_keylog
     @unittest.skipIf(sys.flags.ignore_environment,
                      "test is not compatible with ignore_environment")
+    @unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
     def test_keylog_env(self):
         self.addCleanup(support.unlink, support.TESTFN)
         with unittest.mock.patch.dict(os.environ):
diff --git a/Lib/test/test_stat.py b/Lib/test/test_stat.py
index be01db2..d9e4ffd 100644
--- a/Lib/test/test_stat.py
+++ b/Lib/test/test_stat.py
@@ -2,8 +2,8 @@
 import os
 import socket
 import sys
-from test.support import (TESTFN, import_fresh_module,
-                          skip_unless_bind_unix_socket)
+from test.support import socket_helper
+from test.support import TESTFN, import_fresh_module
 
 c_stat = import_fresh_module('stat', fresh=['_stat'])
 py_stat = import_fresh_module('stat', blocked=['_stat'])
@@ -193,7 +193,7 @@
                 self.assertS_IS("BLK", st_mode)
                 break
 
-    @skip_unless_bind_unix_socket
+    @socket_helper.skip_unless_bind_unix_socket
     def test_socket(self):
         with socket.socket(socket.AF_UNIX) as s:
             s.bind(TESTFN)
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
index 5b8ad87..bf415dd 100644
--- a/Lib/test/test_statistics.py
+++ b/Lib/test/test_statistics.py
@@ -1004,6 +1004,10 @@
             x = statistics._convert(nan, type(nan))
             self.assertTrue(_nan_equal(x, nan))
 
+    def test_invalid_input_type(self):
+        with self.assertRaises(TypeError):
+            statistics._convert(None, float)
+
 
 class FailNegTest(unittest.TestCase):
     """Test _fail_neg private function."""
@@ -1033,6 +1037,50 @@
         self.assertEqual(errmsg, msg)
 
 
+class FindLteqTest(unittest.TestCase):
+    # Test _find_lteq private function.
+
+    def test_invalid_input_values(self):
+        for a, x in [
+            ([], 1),
+            ([1, 2], 3),
+            ([1, 3], 2)
+        ]:
+            with self.subTest(a=a, x=x):
+                with self.assertRaises(ValueError):
+                    statistics._find_lteq(a, x)
+
+    def test_locate_successfully(self):
+        for a, x, expected_i in [
+            ([1, 1, 1, 2, 3], 1, 0),
+            ([0, 1, 1, 1, 2, 3], 1, 1),
+            ([1, 2, 3, 3, 3], 3, 2)
+        ]:
+            with self.subTest(a=a, x=x):
+                self.assertEqual(expected_i, statistics._find_lteq(a, x))
+
+
+class FindRteqTest(unittest.TestCase):
+    # Test _find_rteq private function.
+
+    def test_invalid_input_values(self):
+        for a, l, x in [
+            ([1], 2, 1),
+            ([1, 3], 0, 2)
+        ]:
+            with self.assertRaises(ValueError):
+                statistics._find_rteq(a, l, x)
+
+    def test_locate_successfully(self):
+        for a, l, x, expected_i in [
+            ([1, 1, 1, 2, 3], 0, 1, 2),
+            ([0, 1, 1, 1, 2, 3], 0, 1, 3),
+            ([1, 2, 3, 3, 3], 0, 3, 4)
+        ]:
+            with self.subTest(a=a, l=l, x=x):
+                self.assertEqual(expected_i, statistics._find_rteq(a, l, x))
+
+
 # === Tests for public functions ===
 
 class UnivariateCommonMixin:
@@ -1476,6 +1524,18 @@
             with self.subTest(values=values):
                 self.assertRaises(exc, self.func, values)
 
+    def test_invalid_type_error(self):
+        # Test error is raised when input contains invalid type(s)
+        for data in [
+            ['3.14'],               # single string
+            ['1', '2', '3'],        # multiple strings
+            [1, '2', 3, '4', 5],    # mixed strings and valid integers
+            [2.3, 3.4, 4.5, '5.6']  # only one string and valid floats
+        ]:
+            with self.subTest(data=data):
+                with self.assertRaises(TypeError):
+                    self.func(data)
+
     def test_ints(self):
         # Test harmonic mean with ints.
         data = [2, 4, 4, 8, 16, 16]
@@ -2614,6 +2674,21 @@
         with self.assertRaises(self.module.StatisticsError):
             NormalDist(1, 0).overlap(X)             # left operand sigma is zero
 
+    def test_zscore(self):
+        NormalDist = self.module.NormalDist
+        X = NormalDist(100, 15)
+        self.assertEqual(X.zscore(142), 2.8)
+        self.assertEqual(X.zscore(58), -2.8)
+        self.assertEqual(X.zscore(100), 0.0)
+        with self.assertRaises(TypeError):
+            X.zscore()                              # too few arguments
+        with self.assertRaises(TypeError):
+            X.zscore(1, 1)                          # too may arguments
+        with self.assertRaises(TypeError):
+            X.zscore(None)                          # non-numeric type
+        with self.assertRaises(self.module.StatisticsError):
+            NormalDist(1, 0).zscore(100)            # sigma is zero
+
     def test_properties(self):
         X = self.module.NormalDist(100, 15)
         self.assertEqual(X.mean, 100)
diff --git a/Lib/test/test_string_literals.py b/Lib/test/test_string_literals.py
index 0cea2ed..9565ee2 100644
--- a/Lib/test/test_string_literals.py
+++ b/Lib/test/test_string_literals.py
@@ -33,6 +33,7 @@
 import tempfile
 import unittest
 import warnings
+from test.support import use_old_parser
 
 
 TEMPLATE = r"""# coding: %s
@@ -63,8 +64,6 @@
 
 class TestLiterals(unittest.TestCase):
 
-    from test.support import check_syntax_warning
-
     def setUp(self):
         self.save_path = sys.path[:]
         self.tmpdir = tempfile.mkdtemp()
@@ -129,6 +128,7 @@
         self.assertEqual(w, [])
         self.assertEqual(exc.filename, '<string>')
         self.assertEqual(exc.lineno, 1)
+        self.assertEqual(exc.offset, 1)
 
     def test_eval_str_raw(self):
         self.assertEqual(eval(""" r'x' """), 'x')
@@ -168,7 +168,8 @@
             eval("b'''\n\\z'''")
         self.assertEqual(len(w), 1)
         self.assertEqual(w[0].filename, '<string>')
-        self.assertEqual(w[0].lineno, 1)
+        if use_old_parser():
+            self.assertEqual(w[0].lineno, 1)
 
         with warnings.catch_warnings(record=True) as w:
             warnings.simplefilter('error', category=DeprecationWarning)
@@ -177,7 +178,8 @@
             exc = cm.exception
         self.assertEqual(w, [])
         self.assertEqual(exc.filename, '<string>')
-        self.assertEqual(exc.lineno, 1)
+        if use_old_parser():
+            self.assertEqual(exc.lineno, 1)
 
     def test_eval_bytes_raw(self):
         self.assertEqual(eval(""" br'x' """), b'x')
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index 67e7c55..b3f21ea 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -7,6 +7,7 @@
 import sys
 
 from test import support
+from test.support.script_helper import assert_python_ok
 
 ISBIGENDIAN = sys.byteorder == "big"
 
@@ -652,6 +653,24 @@
         s2 = struct.Struct(s.format.encode())
         self.assertEqual(s2.format, s.format)
 
+    def test_struct_cleans_up_at_runtime_shutdown(self):
+        code = """if 1:
+            import struct
+
+            class C:
+                def __init__(self):
+                    self.pack = struct.pack
+                def __del__(self):
+                    self.pack('I', -42)
+
+            struct.x = C()
+            """
+        rc, stdout, stderr = assert_python_ok("-c", code)
+        self.assertEqual(rc, 0)
+        self.assertEqual(stdout.rstrip(), b"")
+        self.assertIn(b"Exception ignored in:", stderr)
+        self.assertIn(b"C.__del__", stderr)
+
     def test_issue35714(self):
         # Embedded null characters should not be allowed in format strings.
         for s in '\0', '2\0i', b'\0':
@@ -686,6 +705,10 @@
         with self.assertRaises(struct.error):
             s.iter_unpack(b"12")
 
+    def test_uninstantiable(self):
+        iter_unpack_type = type(struct.Struct(">ibcp").iter_unpack(b""))
+        self.assertRaises(TypeError, iter_unpack_type)
+
     def test_iterate(self):
         s = struct.Struct('>IB')
         b = bytes(range(1, 16))
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index f8fee36..7373fe2 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -11,6 +11,7 @@
 import tempfile
 import time
 import traceback
+import types
 import selectors
 import sysconfig
 import select
@@ -18,6 +19,7 @@
 import threading
 import gc
 import textwrap
+import json
 from test.support import FakePath
 
 try:
@@ -25,6 +27,14 @@
 except ImportError:
     _testcapi = None
 
+try:
+    import pwd
+except ImportError:
+    pwd = None
+try:
+    import grp
+except ImportError:
+    grp = None
 
 if support.PGO:
     raise unittest.SkipTest("test is not helpful for PGO")
@@ -76,15 +86,6 @@
         self.doCleanups()
         support.reap_children()
 
-    def assertStderrEqual(self, stderr, expected, msg=None):
-        # In a debug build, stuff like "[6580 refs]" is printed to stderr at
-        # shutdown time.  That frustrates tests trying to check stderr produced
-        # from a spawned Python process.
-        actual = support.strip_python_stderr(stderr)
-        # strip_python_stderr also strips whitespace, so we do too.
-        expected = expected.strip()
-        self.assertEqual(actual, expected, msg)
-
 
 class PopenTestException(Exception):
     pass
@@ -372,7 +373,9 @@
         # matches *expected_cwd*.
         p = subprocess.Popen([python_arg, "-c",
                               "import os, sys; "
-                              "sys.stdout.write(os.getcwd()); "
+                              "buf = sys.stdout.buffer; "
+                              "buf.write(os.getcwd().encode()); "
+                              "buf.flush(); "
                               "sys.exit(47)"],
                               stdout=subprocess.PIPE,
                               **kwargs)
@@ -381,7 +384,7 @@
         self.assertEqual(47, p.returncode)
         normcase = os.path.normcase
         self.assertEqual(normcase(expected_cwd),
-                         normcase(p.stdout.read().decode("utf-8")))
+                         normcase(p.stdout.read().decode()))
 
     def test_cwd(self):
         # Check that cwd changes the cwd for the child process.
@@ -538,7 +541,7 @@
                           'import sys; sys.stderr.write("strawberry")'],
                          stderr=subprocess.PIPE)
         with p:
-            self.assertStderrEqual(p.stderr.read(), b"strawberry")
+            self.assertEqual(p.stderr.read(), b"strawberry")
 
     def test_stderr_filedes(self):
         # stderr is set to open file descriptor
@@ -550,7 +553,7 @@
                          stderr=d)
         p.wait()
         os.lseek(d, 0, 0)
-        self.assertStderrEqual(os.read(d, 1024), b"strawberry")
+        self.assertEqual(os.read(d, 1024), b"strawberry")
 
     def test_stderr_fileobj(self):
         # stderr is set to open file object
@@ -561,7 +564,7 @@
                          stderr=tf)
         p.wait()
         tf.seek(0)
-        self.assertStderrEqual(tf.read(), b"strawberry")
+        self.assertEqual(tf.read(), b"strawberry")
 
     def test_stderr_redirect_with_no_stdout_redirect(self):
         # test stderr=STDOUT while stdout=None (not set)
@@ -580,8 +583,8 @@
                              stderr=subprocess.PIPE)
         stdout, stderr = p.communicate()
         #NOTE: stdout should get stderr from grandchild
-        self.assertStderrEqual(stdout, b'42')
-        self.assertStderrEqual(stderr, b'') # should be empty
+        self.assertEqual(stdout, b'42')
+        self.assertEqual(stderr, b'') # should be empty
         self.assertEqual(p.returncode, 0)
 
     def test_stdout_stderr_pipe(self):
@@ -594,7 +597,7 @@
                              stdout=subprocess.PIPE,
                              stderr=subprocess.STDOUT)
         with p:
-            self.assertStderrEqual(p.stdout.read(), b"appleorange")
+            self.assertEqual(p.stdout.read(), b"appleorange")
 
     def test_stdout_stderr_file(self):
         # capture stdout and stderr to the same open file
@@ -609,7 +612,7 @@
                              stderr=tf)
         p.wait()
         tf.seek(0)
-        self.assertStderrEqual(tf.read(), b"appleorange")
+        self.assertEqual(tf.read(), b"appleorange")
 
     def test_stdout_filedes_of_stdout(self):
         # stdout is set to 1 (#1531862).
@@ -757,7 +760,7 @@
                              stderr=subprocess.PIPE)
         (stdout, stderr) = p.communicate()
         self.assertEqual(stdout, None)
-        self.assertStderrEqual(stderr, b"pineapple")
+        self.assertEqual(stderr, b"pineapple")
 
     def test_communicate(self):
         p = subprocess.Popen([sys.executable, "-c",
@@ -772,7 +775,7 @@
         self.addCleanup(p.stdin.close)
         (stdout, stderr) = p.communicate(b"banana")
         self.assertEqual(stdout, b"banana")
-        self.assertStderrEqual(stderr, b"pineapple")
+        self.assertEqual(stderr, b"pineapple")
 
     def test_communicate_timeout(self):
         p = subprocess.Popen([sys.executable, "-c",
@@ -791,7 +794,7 @@
         # after it completes.
         (stdout, stderr) = p.communicate()
         self.assertEqual(stdout, "banana")
-        self.assertStderrEqual(stderr.encode(), b"pineapple\npear\n")
+        self.assertEqual(stderr.encode(), b"pineapple\npear\n")
 
     def test_communicate_timeout_large_output(self):
         # Test an expiring timeout while the child is outputting lots of data.
@@ -877,7 +880,7 @@
         p.stdin.write(b"banana")
         (stdout, stderr) = p.communicate(b"split")
         self.assertEqual(stdout, b"bananasplit")
-        self.assertStderrEqual(stderr, b"")
+        self.assertEqual(stderr, b"")
 
     def test_universal_newlines_and_text(self):
         args = [
@@ -995,7 +998,6 @@
         self.assertEqual("line1\nline2\nline3\nline4\nline5\n", stdout)
         # Python debug build push something like "[42442 refs]\n"
         # to stderr at exit of subprocess.
-        # Don't use assertStderrEqual because it strips CR and LF from output.
         self.assertTrue(stderr.startswith("eline2\neline6\neline7\n"))
 
     def test_universal_newlines_communicate_encodings(self):
@@ -1121,9 +1123,7 @@
         with self.assertRaises(subprocess.TimeoutExpired) as c:
             p.wait(timeout=0.0001)
         self.assertIn("0.0001", str(c.exception))  # For coverage of __str__.
-        # Some heavily loaded buildbots (sparc Debian 3.x) require this much
-        # time to start.
-        self.assertEqual(p.wait(timeout=3), 0)
+        self.assertEqual(p.wait(timeout=support.SHORT_TIMEOUT), 0)
 
     def test_invalid_bufsize(self):
         # an invalid type of the bufsize argument should raise
@@ -1289,7 +1289,7 @@
         # Wait for the process to finish; the thread should kill it
         # long before it finishes on its own.  Supplying a timeout
         # triggers a different code path for better coverage.
-        proc.wait(timeout=20)
+        proc.wait(timeout=support.SHORT_TIMEOUT)
         self.assertEqual(proc.returncode, expected_errorcode,
                          msg="unexpected result in wait from main thread")
 
@@ -1350,6 +1350,30 @@
         self.addCleanup(p.stdin.close)
         p.communicate(b"x" * 2**20)
 
+    def test_repr(self):
+        # Run a command that waits for user input, to check the repr() of
+        # a Proc object while and after the sub-process runs.
+        code = 'import sys; input(); sys.exit(57)'
+        cmd = [sys.executable, '-c', code]
+        result = "<Popen: returncode: {}"
+
+        with subprocess.Popen(
+                cmd, stdin=subprocess.PIPE, universal_newlines=True) as proc:
+            self.assertIsNone(proc.returncode)
+            self.assertTrue(
+                repr(proc).startswith(result.format(proc.returncode)) and
+                repr(proc).endswith('>')
+            )
+
+            proc.communicate(input='exit...\n')
+            proc.wait()
+
+            self.assertIsNotNone(proc.returncode)
+            self.assertTrue(
+                repr(proc).startswith(result.format(proc.returncode)) and
+                repr(proc).endswith('>')
+            )
+
     def test_communicate_epipe_only_stdin(self):
         # Issue 10963: communicate() should hide EPIPE
         p = subprocess.Popen(ZERO_RETURN_CMD,
@@ -1413,6 +1437,9 @@
             subprocess.Popen(['exit', '0'], cwd='/some/nonexistent/directory')
         self.assertEqual(c.exception.filename, '/some/nonexistent/directory')
 
+    def test_class_getitems(self):
+        self.assertIsInstance(subprocess.Popen[bytes], types.GenericAlias)
+        self.assertIsInstance(subprocess.CompletedProcess[str], types.GenericAlias)
 
 class RunFuncTestCase(BaseTestCase):
     def run_python(self, code, **kwargs):
@@ -1511,7 +1538,7 @@
     def test_run_with_pathlike_path(self):
         # bpo-31961: test run(pathlike_object)
         # the name of a command that can be run without
-        # any argumenets that exit fast
+        # any arguments that exit fast
         prog = 'tree.com' if mswindows else 'ls'
         path = shutil.which(prog)
         if path is None:
@@ -1589,6 +1616,18 @@
                         f"{stacks}```")
 
 
+def _get_test_grp_name():
+    for name_group in ('staff', 'nogroup', 'grp', 'nobody', 'nfsnobody'):
+        if grp:
+            try:
+                grp.getgrnam(name_group)
+            except KeyError:
+                continue
+            return name_group
+    else:
+        raise unittest.SkipTest('No identified group name to use for this test on this platform.')
+
+
 @unittest.skipIf(mswindows, "POSIX specific tests")
 class POSIXProcessTestCase(BaseTestCase):
 
@@ -1743,6 +1782,186 @@
             child_sid = int(output)
             self.assertNotEqual(parent_sid, child_sid)
 
+    @unittest.skipUnless(hasattr(os, 'setreuid'), 'no setreuid on platform')
+    def test_user(self):
+        # For code coverage of the user parameter.  We don't care if we get an
+        # EPERM error from it depending on the test execution environment, that
+        # still indicates that it was called.
+
+        uid = os.geteuid()
+        test_users = [65534 if uid != 65534 else 65533, uid]
+        name_uid = "nobody" if sys.platform != 'darwin' else "unknown"
+
+        if pwd is not None:
+            try:
+                pwd.getpwnam(name_uid)
+                test_users.append(name_uid)
+            except KeyError:
+                # unknown user name
+                name_uid = None
+
+        for user in test_users:
+            # posix_spawn() may be used with close_fds=False
+            for close_fds in (False, True):
+                with self.subTest(user=user, close_fds=close_fds):
+                    try:
+                        output = subprocess.check_output(
+                                [sys.executable, "-c",
+                                 "import os; print(os.getuid())"],
+                                user=user,
+                                close_fds=close_fds)
+                    except PermissionError:  # (EACCES, EPERM)
+                        pass
+                    except OSError as e:
+                        if e.errno not in (errno.EACCES, errno.EPERM):
+                            raise
+                    else:
+                        if isinstance(user, str):
+                            user_uid = pwd.getpwnam(user).pw_uid
+                        else:
+                            user_uid = user
+                        child_user = int(output)
+                        self.assertEqual(child_user, user_uid)
+
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD, user=-1)
+
+        with self.assertRaises(OverflowError):
+            subprocess.check_call(ZERO_RETURN_CMD,
+                                  cwd=os.curdir, env=os.environ, user=2**64)
+
+        if pwd is None and name_uid is not None:
+            with self.assertRaises(ValueError):
+                subprocess.check_call(ZERO_RETURN_CMD, user=name_uid)
+
+    @unittest.skipIf(hasattr(os, 'setreuid'), 'setreuid() available on platform')
+    def test_user_error(self):
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD, user=65535)
+
+    @unittest.skipUnless(hasattr(os, 'setregid'), 'no setregid() on platform')
+    def test_group(self):
+        gid = os.getegid()
+        group_list = [65534 if gid != 65534 else 65533]
+        name_group = _get_test_grp_name()
+
+        if grp is not None:
+            group_list.append(name_group)
+
+        for group in group_list + [gid]:
+            # posix_spawn() may be used with close_fds=False
+            for close_fds in (False, True):
+                with self.subTest(group=group, close_fds=close_fds):
+                    try:
+                        output = subprocess.check_output(
+                                [sys.executable, "-c",
+                                 "import os; print(os.getgid())"],
+                                group=group,
+                                close_fds=close_fds)
+                    except PermissionError:  # (EACCES, EPERM)
+                        pass
+                    else:
+                        if isinstance(group, str):
+                            group_gid = grp.getgrnam(group).gr_gid
+                        else:
+                            group_gid = group
+
+                        child_group = int(output)
+                        self.assertEqual(child_group, group_gid)
+
+        # make sure we bomb on negative values
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD, group=-1)
+
+        with self.assertRaises(OverflowError):
+            subprocess.check_call(ZERO_RETURN_CMD,
+                                  cwd=os.curdir, env=os.environ, group=2**64)
+
+        if grp is None:
+            with self.assertRaises(ValueError):
+                subprocess.check_call(ZERO_RETURN_CMD, group=name_group)
+
+    @unittest.skipIf(hasattr(os, 'setregid'), 'setregid() available on platform')
+    def test_group_error(self):
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD, group=65535)
+
+    @unittest.skipUnless(hasattr(os, 'setgroups'), 'no setgroups() on platform')
+    def test_extra_groups(self):
+        gid = os.getegid()
+        group_list = [65534 if gid != 65534 else 65533]
+        name_group = _get_test_grp_name()
+        perm_error = False
+
+        if grp is not None:
+            group_list.append(name_group)
+
+        try:
+            output = subprocess.check_output(
+                    [sys.executable, "-c",
+                     "import os, sys, json; json.dump(os.getgroups(), sys.stdout)"],
+                    extra_groups=group_list)
+        except OSError as ex:
+            if ex.errno != errno.EPERM:
+                raise
+            perm_error = True
+
+        else:
+            parent_groups = os.getgroups()
+            child_groups = json.loads(output)
+
+            if grp is not None:
+                desired_gids = [grp.getgrnam(g).gr_gid if isinstance(g, str) else g
+                                for g in group_list]
+            else:
+                desired_gids = group_list
+
+            if perm_error:
+                self.assertEqual(set(child_groups), set(parent_groups))
+            else:
+                self.assertEqual(set(desired_gids), set(child_groups))
+
+        # make sure we bomb on negative values
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD, extra_groups=[-1])
+
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD,
+                                  cwd=os.curdir, env=os.environ,
+                                  extra_groups=[2**64])
+
+        if grp is None:
+            with self.assertRaises(ValueError):
+                subprocess.check_call(ZERO_RETURN_CMD,
+                                      extra_groups=[name_group])
+
+    @unittest.skipIf(hasattr(os, 'setgroups'), 'setgroups() available on platform')
+    def test_extra_groups_error(self):
+        with self.assertRaises(ValueError):
+            subprocess.check_call(ZERO_RETURN_CMD, extra_groups=[])
+
+    @unittest.skipIf(mswindows or not hasattr(os, 'umask'),
+                     'POSIX umask() is not available.')
+    def test_umask(self):
+        tmpdir = None
+        try:
+            tmpdir = tempfile.mkdtemp()
+            name = os.path.join(tmpdir, "beans")
+            # We set an unusual umask in the child so as a unique mode
+            # for us to test the child's touched file for.
+            subprocess.check_call(
+                    [sys.executable, "-c", f"open({name!r}, 'w').close()"],
+                    umask=0o053)
+            # Ignore execute permissions entirely in our test,
+            # filesystems could be mounted to ignore or force that.
+            st_mode = os.stat(name).st_mode & 0o666
+            expected_mode = 0o624
+            self.assertEqual(expected_mode, st_mode,
+                             msg=f'{oct(expected_mode)} != {oct(st_mode)}')
+        finally:
+            if tmpdir is not None:
+                shutil.rmtree(tmpdir)
+
     def test_run_abort(self):
         # returncode handles signal termination
         with support.SuppressCrashReport():
@@ -2032,13 +2251,13 @@
     def test_kill(self):
         p = self._kill_process('kill')
         _, stderr = p.communicate()
-        self.assertStderrEqual(stderr, b'')
+        self.assertEqual(stderr, b'')
         self.assertEqual(p.wait(), -signal.SIGKILL)
 
     def test_terminate(self):
         p = self._kill_process('terminate')
         _, stderr = p.communicate()
-        self.assertStderrEqual(stderr, b'')
+        self.assertEqual(stderr, b'')
         self.assertEqual(p.wait(), -signal.SIGTERM)
 
     def test_send_signal_dead(self):
@@ -2086,8 +2305,8 @@
                        stdin=stdin,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE).communicate()
-            err = support.strip_python_stderr(err)
-            self.assertEqual((out, err), (b'apple', b'orange'))
+            self.assertEqual(out, b'apple')
+            self.assertEqual(err, b'orange')
         finally:
             self._restore_fds(saved_fds)
 
@@ -2172,7 +2391,7 @@
                 os.lseek(fd, 0, 0)
 
             out = os.read(temp_fds[2], 1024)
-            err = support.strip_python_stderr(os.read(temp_fds[0], 1024))
+            err = os.read(temp_fds[0], 1024).strip()
             self.assertEqual(out, b"got STDIN")
             self.assertEqual(err, b"err")
 
@@ -2214,7 +2433,7 @@
                     os.lseek(fd, 0, 0)
 
                 out = os.read(stdout_no, 1024)
-                err = support.strip_python_stderr(os.read(stderr_no, 1024))
+                err = os.read(stderr_no, 1024).strip()
             finally:
                 self._restore_fds(saved_fds)
 
@@ -2793,13 +3012,23 @@
                 ([b"arg"], [b"exe"], 123,  [b"env"]),
                 ([b"arg"], [b"exe"], None, 123),
             ):
-                with self.assertRaises(TypeError):
+                with self.assertRaises(TypeError) as err:
                     _posixsubprocess.fork_exec(
                         args, exe_list,
                         True, (), cwd, env_list,
                         -1, -1, -1, -1,
                         1, 2, 3, 4,
-                        True, True, func)
+                        True, True,
+                        False, [], 0, -1,
+                        func)
+                # Attempt to prevent
+                # "TypeError: fork_exec() takes exactly N arguments (M given)"
+                # from passing the test.  More refactoring to have us start
+                # with a valid *args list, confirm a good call with that works
+                # before mutating it in various ways to ensure that bad calls
+                # with individual arg type errors raise a typeerror would be
+                # ideal.  Saving that for a future PR...
+                self.assertNotIn('takes exactly', str(err.exception))
         finally:
             if not gc_enabled:
                 gc.disable()
@@ -2838,7 +3067,9 @@
                         True, fds_to_keep, None, [b"env"],
                         -1, -1, -1, -1,
                         1, 2, 3, 4,
-                        True, True, None)
+                        True, True,
+                        None, None, None, -1,
+                        None)
                 self.assertIn('fds_to_keep', str(c.exception))
         finally:
             if not gc_enabled:
@@ -2899,16 +3130,49 @@
         proc = subprocess.Popen(args)
 
         # Wait until the real process completes to avoid zombie process
-        pid = proc.pid
-        pid, status = os.waitpid(pid, 0)
-        self.assertEqual(status, 0)
+        support.wait_process(proc.pid, exitcode=0)
 
         status = _testcapi.W_STOPCODE(3)
-        with mock.patch('subprocess.os.waitpid', return_value=(pid, status)):
+        with mock.patch('subprocess.os.waitpid', return_value=(proc.pid, status)):
             returncode = proc.wait()
 
         self.assertEqual(returncode, -3)
 
+    def test_send_signal_race(self):
+        # bpo-38630: send_signal() must poll the process exit status to reduce
+        # the risk of sending the signal to the wrong process.
+        proc = subprocess.Popen(ZERO_RETURN_CMD)
+
+        # wait until the process completes without using the Popen APIs.
+        support.wait_process(proc.pid, exitcode=0)
+
+        # returncode is still None but the process completed.
+        self.assertIsNone(proc.returncode)
+
+        with mock.patch("os.kill") as mock_kill:
+            proc.send_signal(signal.SIGTERM)
+
+        # send_signal() didn't call os.kill() since the process already
+        # completed.
+        mock_kill.assert_not_called()
+
+        # Don't check the returncode value: the test reads the exit status,
+        # so Popen failed to read it and uses a default returncode instead.
+        self.assertIsNotNone(proc.returncode)
+
+    def test_send_signal_race2(self):
+        # bpo-40550: the process might exist between the returncode check and
+        # the kill operation
+        p = subprocess.Popen([sys.executable, '-c', 'exit(1)'])
+
+        # wait for process to exit
+        while not p.returncode:
+            p.poll()
+
+        with mock.patch.object(p, 'poll', new=lambda: None):
+            p.returncode = None
+            p.send_signal(signal.SIGTERM)
+
     def test_communicate_repeated_call_after_stdout_close(self):
         proc = subprocess.Popen([sys.executable, '-c',
                                  'import os, time; os.close(1), time.sleep(2)'],
@@ -3129,7 +3393,7 @@
             p.stdout.read(1)
             getattr(p, method)(*args)
             _, stderr = p.communicate()
-            self.assertStderrEqual(stderr, b'')
+            self.assertEqual(stderr, b'')
             returncode = p.wait()
         self.assertNotEqual(returncode, 0)
 
@@ -3152,7 +3416,7 @@
             # This shouldn't raise even though the child is now dead
             getattr(p, method)(*args)
             _, stderr = p.communicate()
-            self.assertStderrEqual(stderr, b'')
+            self.assertEqual(stderr, b'')
             rc = p.wait()
         self.assertEqual(rc, 42)
 
@@ -3261,7 +3525,7 @@
 
     def test__all__(self):
         """Ensure that __all__ is populated properly."""
-        intentionally_excluded = {"list2cmdline", "Handle"}
+        intentionally_excluded = {"list2cmdline", "Handle", "pwd", "grp"}
         exported = set(subprocess.__all__)
         possible_exports = set()
         import types
@@ -3341,7 +3605,7 @@
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE) as proc:
             self.assertEqual(proc.stdout.read(), b"stdout")
-            self.assertStderrEqual(proc.stderr.read(), b"stderr")
+            self.assertEqual(proc.stderr.read(), b"stderr")
 
         self.assertTrue(proc.stdout.closed)
         self.assertTrue(proc.stderr.closed)
diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py
index 470a100..7f1c0a5 100644
--- a/Lib/test/test_sunau.py
+++ b/Lib/test/test_sunau.py
@@ -119,10 +119,6 @@
         frames = byteswap(frames, 2)
 
 
-class SunauMiscTests(audiotests.AudioMiscTests, unittest.TestCase):
-    module = sunau
-
-
 class SunauLowLevelTest(unittest.TestCase):
 
     def test_read_bad_magic_number(self):
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 80e652d..b5a16f9 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -1,4 +1,3 @@
-import contextlib
 import errno
 import importlib
 import io
@@ -14,6 +13,7 @@
 import unittest
 from test import support
 from test.support import script_helper
+from test.support import socket_helper
 
 TESTFN = support.TESTFN
 
@@ -91,17 +91,17 @@
             support.rmtree('__pycache__')
 
     def test_HOST(self):
-        s = socket.create_server((support.HOST, 0))
+        s = socket.create_server((socket_helper.HOST, 0))
         s.close()
 
     def test_find_unused_port(self):
-        port = support.find_unused_port()
-        s = socket.create_server((support.HOST, port))
+        port = socket_helper.find_unused_port()
+        s = socket.create_server((socket_helper.HOST, port))
         s.close()
 
     def test_bind_port(self):
         s = socket.socket()
-        support.bind_port(s)
+        socket_helper.bind_port(s)
         s.listen()
         s.close()
 
@@ -176,13 +176,10 @@
             with support.temp_cwd() as temp_path:
                 pid = os.fork()
                 if pid != 0:
-                    # parent process (child has pid == 0)
+                    # parent process
 
                     # wait for the child to terminate
-                    (pid, status) = os.waitpid(pid, 0)
-                    if status != 0:
-                        raise AssertionError(f"Child process failed with exit "
-                                             f"status indication 0x{status:x}.")
+                    support.wait_process(pid, exitcode=0)
 
                     # Make sure that temp_path is still present. When the child
                     # process leaves the 'temp_cwd'-context, the __exit__()-
@@ -422,7 +419,7 @@
             os._exit(0)
 
         t0 = time.monotonic()
-        deadline = time.monotonic() + 60.0
+        deadline = time.monotonic() + support.SHORT_TIMEOUT
 
         was_altered = support.environment_altered
         try:
@@ -497,7 +494,6 @@
             ['-Wignore', '-X', 'dev'],
             ['-X', 'faulthandler'],
             ['-X', 'importtime'],
-            ['-X', 'showalloccount'],
             ['-X', 'showrefcount'],
             ['-X', 'tracemalloc'],
             ['-X', 'tracemalloc=3'],
@@ -675,7 +671,6 @@
     # run_doctest
     # threading_cleanup
     # reap_threads
-    # strip_python_stderr
     # can_symlink
     # skip_unless_symlink
     # SuppressCrashReport
diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py
index 98d718c..6585071 100644
--- a/Lib/test/test_symtable.py
+++ b/Lib/test/test_symtable.py
@@ -11,6 +11,8 @@
 
 glob = 42
 some_var = 12
+some_non_assigned_global_var = 11
+some_assigned_global_var = 11
 
 class Mine:
     instance_var = 24
@@ -19,6 +21,8 @@
 
 def spam(a, b, *var, **kw):
     global bar
+    global some_assigned_global_var
+    some_assigned_global_var = 12
     bar = 47
     some_var = 10
     x = 23
@@ -65,7 +69,6 @@
 
     def test_optimized(self):
         self.assertFalse(self.top.is_optimized())
-        self.assertFalse(self.top.has_exec())
 
         self.assertTrue(self.spam.is_optimized())
 
@@ -82,14 +85,14 @@
 
     def test_lineno(self):
         self.assertEqual(self.top.get_lineno(), 0)
-        self.assertEqual(self.spam.get_lineno(), 12)
+        self.assertEqual(self.spam.get_lineno(), 14)
 
     def test_function_info(self):
         func = self.spam
         self.assertEqual(sorted(func.get_parameters()), ["a", "b", "kw", "var"])
         expected = ['a', 'b', 'internal', 'kw', 'other_internal', 'some_var', 'var', 'x']
         self.assertEqual(sorted(func.get_locals()), expected)
-        self.assertEqual(sorted(func.get_globals()), ["bar", "glob"])
+        self.assertEqual(sorted(func.get_globals()), ["bar", "glob", "some_assigned_global_var"])
         self.assertEqual(self.internal.get_frees(), ("x",))
 
     def test_globals(self):
@@ -100,6 +103,9 @@
         self.assertFalse(self.internal.lookup("x").is_global())
         self.assertFalse(self.Mine.lookup("instance_var").is_global())
         self.assertTrue(self.spam.lookup("bar").is_global())
+        # Module-scope globals are both global and local
+        self.assertTrue(self.top.lookup("some_non_assigned_global_var").is_global())
+        self.assertTrue(self.top.lookup("some_assigned_global_var").is_global())
 
     def test_nonlocal(self):
         self.assertFalse(self.spam.lookup("some_var").is_nonlocal())
@@ -110,6 +116,9 @@
     def test_local(self):
         self.assertTrue(self.spam.lookup("x").is_local())
         self.assertFalse(self.spam.lookup("bar").is_local())
+        # Module-scope globals are both global and local
+        self.assertTrue(self.top.lookup("some_non_assigned_global_var").is_local())
+        self.assertTrue(self.top.lookup("some_assigned_global_var").is_local())
 
     def test_free(self):
         self.assertTrue(self.internal.lookup("x").is_free())
@@ -228,6 +237,10 @@
         top = symtable.symtable(code, "?", "exec")
         self.assertIsNotNone(find_block(top, "\u017d"))
 
+    def test_symtable_repr(self):
+        self.assertEqual(str(self.top), "<SymbolTable for module ?>")
+        self.assertEqual(str(self.spam), "<Function SymbolTable for spam in ?>")
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 128c4da..f0c9c98 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -124,10 +124,109 @@
 Traceback (most recent call last):
 SyntaxError: cannot assign to operator
 
+>>> [a, b[1], c + 1] = [1, 2, 3]
+Traceback (most recent call last):
+SyntaxError: cannot assign to operator
+
+>>> [a, b.c.d, c + 1] = [1, 2, 3]
+Traceback (most recent call last):
+SyntaxError: cannot assign to operator
+
 >>> a if 1 else b = 1
 Traceback (most recent call last):
 SyntaxError: cannot assign to conditional expression
 
+>>> True = True = 3
+Traceback (most recent call last):
+SyntaxError: cannot assign to True
+
+>>> x = y = True = z = 3
+Traceback (most recent call last):
+SyntaxError: cannot assign to True
+
+>>> x = y = yield = 1
+Traceback (most recent call last):
+SyntaxError: assignment to yield expression not possible
+
+>>> a, b += 1, 2
+Traceback (most recent call last):
+SyntaxError: 'tuple' is an illegal expression for augmented assignment
+
+>>> (a, b) += 1, 2
+Traceback (most recent call last):
+SyntaxError: 'tuple' is an illegal expression for augmented assignment
+
+>>> [a, b] += 1, 2
+Traceback (most recent call last):
+SyntaxError: 'list' is an illegal expression for augmented assignment
+
+Invalid targets in `for` loops and `with` statements should also
+produce a specialized error message
+
+>>> for a() in b: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> for (a, b()) in b: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> for [a, b()] in b: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> for (*a, b, c+1) in b: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to operator
+
+>>> for (x, *(y, z.d())) in b: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> for a, b() in c: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> for i < (): pass
+Traceback (most recent call last):
+SyntaxError: invalid syntax
+
+>>> for a, b
+Traceback (most recent call last):
+SyntaxError: invalid syntax
+
+>>> with a as b(): pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> with a as (b, c()): pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> with a as [b, c()]: pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> with a as (*b, c, d+1): pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to operator
+
+>>> with a as (x, *(y, z.d())): pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> with a as b, c as d(): pass
+Traceback (most recent call last):
+SyntaxError: cannot assign to function call
+
+>>> with a as b
+Traceback (most recent call last):
+SyntaxError: invalid syntax
+
+>>> p = p =
+Traceback (most recent call last):
+SyntaxError: invalid syntax
+
 From compiler_complex_args():
 
 >>> def f(None=1):
@@ -135,7 +234,6 @@
 Traceback (most recent call last):
 SyntaxError: invalid syntax
 
-
 From ast_for_arguments():
 
 >>> def f(x, y=1, z):
@@ -158,6 +256,16 @@
 Traceback (most recent call last):
 SyntaxError: invalid syntax
 
+>>> import ast; ast.parse('''
+... def f(
+...     *, # type: int
+...     a, # type: int
+... ):
+...     pass
+... ''', type_comments=True)
+Traceback (most recent call last):
+SyntaxError: bare * has associated type comment
+
 
 From ast_for_funcdef():
 
@@ -297,47 +405,50 @@
 ...   290, 291, 292, 293, 294, 295, 296, 297, 298, 299)  # doctest: +ELLIPSIS
 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 297, 298, 299)
 
->>> f(lambda x: x[0] = 3)
-Traceback (most recent call last):
-SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
+# >>> f(lambda x: x[0] = 3)
+# Traceback (most recent call last):
+# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
 
 The grammar accepts any test (basically, any expression) in the
 keyword slot of a call site.  Test a few different options.
 
->>> f(x()=2)
-Traceback (most recent call last):
-SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
->>> f(a or b=1)
-Traceback (most recent call last):
-SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
->>> f(x.y=1)
-Traceback (most recent call last):
-SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
->>> f((x)=2)
-Traceback (most recent call last):
-SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
->>> f(True=2)
-Traceback (most recent call last):
-SyntaxError: cannot assign to True
+# >>> f(x()=2)
+# Traceback (most recent call last):
+# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
+# >>> f(a or b=1)
+# Traceback (most recent call last):
+# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
+# >>> f(x.y=1)
+# Traceback (most recent call last):
+# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
+# >>> f((x)=2)
+# Traceback (most recent call last):
+# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
+# >>> f(True=2)
+# Traceback (most recent call last):
+# SyntaxError: cannot assign to True
 >>> f(__debug__=1)
 Traceback (most recent call last):
 SyntaxError: cannot assign to __debug__
+>>> __debug__: int
+Traceback (most recent call last):
+SyntaxError: cannot assign to __debug__
 
 
 More set_context():
 
 >>> (x for x in x) += 1
 Traceback (most recent call last):
-SyntaxError: cannot assign to generator expression
+SyntaxError: 'generator expression' is an illegal expression for augmented assignment
 >>> None += 1
 Traceback (most recent call last):
-SyntaxError: cannot assign to None
+SyntaxError: 'None' is an illegal expression for augmented assignment
 >>> __debug__ += 1
 Traceback (most recent call last):
 SyntaxError: cannot assign to __debug__
 >>> f() += 1
 Traceback (most recent call last):
-SyntaxError: cannot assign to function call
+SyntaxError: 'function call' is an illegal expression for augmented assignment
 
 
 Test continue in finally in weird combinations.
@@ -588,7 +699,7 @@
 >>> f(a=23, a=234)
 Traceback (most recent call last):
    ...
-SyntaxError: keyword argument repeated
+SyntaxError: keyword argument repeated: a
 
 >>> {1, 2, 3} = 42
 Traceback (most recent call last):
@@ -606,6 +717,27 @@
 Traceback (most recent call last):
 SyntaxError: cannot assign to f-string expression
 
+>>> from t import x,
+Traceback (most recent call last):
+SyntaxError: trailing comma not allowed without surrounding parentheses
+
+>>> from t import x,y,
+Traceback (most recent call last):
+SyntaxError: trailing comma not allowed without surrounding parentheses
+
+>>> (): int
+Traceback (most recent call last):
+SyntaxError: only single target (not tuple) can be annotated
+>>> []: int
+Traceback (most recent call last):
+SyntaxError: only single target (not list) can be annotated
+>>> (()): int
+Traceback (most recent call last):
+SyntaxError: only single target (not tuple) can be annotated
+>>> ([]): int
+Traceback (most recent call last):
+SyntaxError: only single target (not list) can be annotated
+
 Corner-cases that used to fail to raise the correct error:
 
     >>> def f(*, x=lambda __debug__:0): pass
@@ -634,6 +766,9 @@
     Traceback (most recent call last):
     SyntaxError: cannot assign to __debug__
 
+    >>> import ä £
+    Traceback (most recent call last):
+    SyntaxError: invalid character '£' (U+00A3)
 """
 
 import re
@@ -658,7 +793,7 @@
                 self.fail("SyntaxError is not a %s" % subclass.__name__)
             mo = re.search(errtext, str(err))
             if mo is None:
-                self.fail("SyntaxError did not contain '%r'" % (errtext,))
+                self.fail("SyntaxError did not contain %r" % (errtext,))
             self.assertEqual(err.filename, filename)
             if lineno is not None:
                 self.assertEqual(err.lineno, lineno)
@@ -667,11 +802,43 @@
         else:
             self.fail("compile() did not raise SyntaxError")
 
+    def test_curly_brace_after_primary_raises_immediately(self):
+        self._check_error("f{", "invalid syntax", mode="single")
+
     def test_assign_call(self):
         self._check_error("f() = 1", "assign")
 
+    @unittest.skipIf(support.use_old_parser(), "The old parser cannot generate these error messages")
     def test_assign_del(self):
-        self._check_error("del f()", "delete")
+        self._check_error("del (,)", "invalid syntax")
+        self._check_error("del 1", "delete literal")
+        self._check_error("del (1, 2)", "delete literal")
+        self._check_error("del None", "delete None")
+        self._check_error("del *x", "delete starred")
+        self._check_error("del (*x)", "use starred expression")
+        self._check_error("del (*x,)", "delete starred")
+        self._check_error("del [*x,]", "delete starred")
+        self._check_error("del f()", "delete function call")
+        self._check_error("del f(a, b)", "delete function call")
+        self._check_error("del o.f()", "delete function call")
+        self._check_error("del a[0]()", "delete function call")
+        self._check_error("del x, f()", "delete function call")
+        self._check_error("del f(), x", "delete function call")
+        self._check_error("del [a, b, ((c), (d,), e.f())]", "delete function call")
+        self._check_error("del (a if True else b)", "delete conditional")
+        self._check_error("del +a", "delete operator")
+        self._check_error("del a, +b", "delete operator")
+        self._check_error("del a + b", "delete operator")
+        self._check_error("del (a + b, c)", "delete operator")
+        self._check_error("del (c[0], a + b)", "delete operator")
+        self._check_error("del a.b.c + 2", "delete operator")
+        self._check_error("del a.b.c[0] + 2", "delete operator")
+        self._check_error("del (a, b, (c, d.e.f + 2))", "delete operator")
+        self._check_error("del [a, b, (c, d.e.f[0] + 2)]", "delete operator")
+        self._check_error("del (a := 5)", "delete named expression")
+        # We don't have a special message for this, but make sure we don't
+        # report "cannot delete name"
+        self._check_error("del a += b", "invalid syntax")
 
     def test_global_param_err_first(self):
         source = """if 1:
@@ -766,6 +933,54 @@
                           "iterable argument unpacking follows "
                           "keyword argument unpacking")
 
+    def test_empty_line_after_linecont(self):
+        # See issue-40847
+        s = r"""\
+pass
+        \
+
+pass
+"""
+        try:
+            compile(s, '<string>', 'exec')
+        except SyntaxError:
+            self.fail("Empty line after a line continuation character is valid.")
+
+    @support.cpython_only
+    def test_nested_named_except_blocks(self):
+        code = ""
+        for i in range(12):
+            code += f"{'    '*i}try:\n"
+            code += f"{'    '*(i+1)}raise Exception\n"
+            code += f"{'    '*i}except Exception as e:\n"
+        code += f"{' '*4*12}pass"
+        self._check_error(code, "too many statically nested blocks")
+
+    def test_barry_as_flufl_with_syntax_errors(self):
+        # The "barry_as_flufl" rule can produce some "bugs-at-a-distance" if
+        # is reading the wrong token in the presence of syntax errors later
+        # in the file. See bpo-42214 for more information.
+        code = """
+def func1():
+    if a != b:
+        raise ValueError
+
+def func2():
+    try
+        return 1
+    finally:
+        pass
+"""
+        self._check_error(code, "invalid syntax")
+
+    def test_invalid_line_continuation_left_recursive(self):
+        # Check bpo-42218: SyntaxErrors following left-recursive rules
+        # (t_primary_raw in this case) need to be tested explicitly
+        self._check_error("A.\u018a\\ ",
+                          "unexpected character after line continuation character")
+        self._check_error("A.\u03bc\\\n",
+                          "unexpected EOF while parsing")
+
 def test_main():
     support.run_unittest(SyntaxTestCase)
     from test import test_syntax
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index af0e54b..d791513 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -187,15 +187,6 @@
     # testing sys.settrace() is done in test_sys_settrace.py
     # testing sys.setprofile() is done in test_sys_setprofile.py
 
-    def test_setcheckinterval(self):
-        with warnings.catch_warnings():
-            warnings.simplefilter("ignore")
-            self.assertRaises(TypeError, sys.setcheckinterval)
-            orig = sys.getcheckinterval()
-            for n in 0, 100, 120, orig: # orig last to restore starting state
-                sys.setcheckinterval(n)
-                self.assertEqual(sys.getcheckinterval(), n)
-
     def test_switchinterval(self):
         self.assertRaises(TypeError, sys.setswitchinterval)
         self.assertRaises(TypeError, sys.setswitchinterval, "a")
@@ -250,7 +241,7 @@
         # mark". Otherwise, it may not be possible anymore to
         # reset the overflowed flag to 0.
 
-        from _testcapi import get_recursion_depth
+        from _testinternalcapi import get_recursion_depth
 
         def set_recursion_limit_at_depth(depth, limit):
             recursion_depth = get_recursion_depth()
@@ -278,6 +269,8 @@
         finally:
             sys.setrecursionlimit(oldlimit)
 
+    # The error message is specific to CPython
+    @test.support.cpython_only
     def test_recursionlimit_fatalerror(self):
         # A fatal error occurs if a second recursion limit is hit when recovering
         # from a first one.
@@ -299,7 +292,8 @@
                 err = sub.communicate()[1]
                 self.assertTrue(sub.returncode, sub.returncode)
                 self.assertIn(
-                    b"Fatal Python error: Cannot recover from stack overflow",
+                    b"Fatal Python error: _Py_CheckRecursiveCall: "
+                    b"Cannot recover from stack overflow",
                     err)
 
     def test_getwindowsversion(self):
@@ -492,6 +486,7 @@
         self.assertIsInstance(sys.platform, str)
         self.assertIsInstance(sys.prefix, str)
         self.assertIsInstance(sys.base_prefix, str)
+        self.assertIsInstance(sys.platlibdir, str)
         self.assertIsInstance(sys.version, str)
         vi = sys.version_info
         self.assertIsInstance(vi[:], tuple)
@@ -551,10 +546,10 @@
     def test_sys_flags(self):
         self.assertTrue(sys.flags)
         attrs = ("debug",
-                 "inspect", "interactive", "optimize", "dont_write_bytecode",
-                 "no_user_site", "no_site", "ignore_environment", "verbose",
-                 "bytes_warning", "quiet", "hash_randomization", "isolated",
-                 "dev_mode", "utf8_mode")
+                 "inspect", "interactive", "optimize",
+                 "dont_write_bytecode", "no_user_site", "no_site",
+                 "ignore_environment", "verbose", "bytes_warning", "quiet",
+                 "hash_randomization", "isolated", "dev_mode", "utf8_mode")
         for attr in attrs:
             self.assertTrue(hasattr(sys.flags, attr), attr)
             attr_type = bool if attr == "dev_mode" else int
@@ -828,7 +823,6 @@
         c = sys.getallocatedblocks()
         self.assertIn(c, range(b - 50, b + 50))
 
-    @test.support.requires_type_collecting
     def test_is_finalizing(self):
         self.assertIs(sys.is_finalizing(), False)
         # Don't use the atexit module because _Py_Finalizing is only set
@@ -850,7 +844,6 @@
         rc, stdout, stderr = assert_python_ok('-c', code)
         self.assertEqual(stdout.rstrip(), b'True')
 
-    @test.support.requires_type_collecting
     def test_issue20602(self):
         # sys.flags and sys.float_info were wiped during shutdown.
         code = """if 1:
@@ -866,6 +859,23 @@
         self.assertIn(b'sys.flags', out[0])
         self.assertIn(b'sys.float_info', out[1])
 
+    def test_sys_ignores_cleaning_up_user_data(self):
+        code = """if 1:
+            import struct, sys
+
+            class C:
+                def __init__(self):
+                    self.pack = struct.pack
+                def __del__(self):
+                    self.pack('I', -42)
+
+            sys.x = C()
+            """
+        rc, stdout, stderr = assert_python_ok('-c', code)
+        self.assertEqual(rc, 0)
+        self.assertEqual(stdout.rstrip(), b"")
+        self.assertEqual(stderr.rstrip(), b"")
+
     @unittest.skipUnless(hasattr(sys, 'getandroidapilevel'),
                          'need sys.getandroidapilevel()')
     def test_getandroidapilevel(self):
@@ -1047,8 +1057,8 @@
     def setUp(self):
         self.P = struct.calcsize('P')
         self.longdigit = sys.int_info.sizeof_digit
-        import _testcapi
-        self.gc_headsize = _testcapi.SIZEOF_PYGC_HEAD
+        import _testinternalcapi
+        self.gc_headsize = _testinternalcapi.SIZEOF_PYGC_HEAD
 
     check_sizeof = test.support.check_sizeof
 
@@ -1231,7 +1241,7 @@
         # list
         samples = [[], [1,2,3], ['1', '2', '3']]
         for sample in samples:
-            check(sample, vsize('Pn') + len(sample)*self.P)
+            check(list(sample), vsize('Pn') + len(sample)*self.P)
         # sortwrapper (list)
         # XXX
         # cmpwrapper (list)
@@ -1303,9 +1313,7 @@
         check((1,2,3), vsize('') + 3*self.P)
         # type
         # static type: PyTypeObject
-        fmt = 'P2nPI13Pl4Pn9Pn11PIPPP'
-        if hasattr(sys, 'getcounts'):
-            fmt += '3n2P'
+        fmt = 'P2nPI13Pl4Pn9Pn11PIPP'
         s = vsize(fmt)
         check(int, s)
         # class
@@ -1315,7 +1323,7 @@
                   '3P'                  # PyMappingMethods
                   '10P'                 # PySequenceMethods
                   '2P'                  # PyBufferProcs
-                  '4P')
+                  '5P')
         class newstyleclass(object): pass
         # Separate block for PyDictKeysObject with 8 keys and 5 entries
         check(newstyleclass, s + calcsize("2nP2n0P") + 8 + 5*calcsize("n2P"))
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index fdd7894..482e918 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -161,8 +161,8 @@
 def test_raise():
     try:
         raises()
-    except Exception as exc:
-        x = 1
+    except Exception:
+        pass
 
 test_raise.events = [(0, 'call'),
                      (1, 'line'),
@@ -191,7 +191,7 @@
 def settrace_and_raise(tracefunc):
     try:
         _settrace_and_raise(tracefunc)
-    except RuntimeError as exc:
+    except RuntimeError:
         pass
 
 settrace_and_raise.events = [(2, 'exception'),
@@ -481,6 +481,127 @@
             [(0, 'call'),
              (1, 'line')])
 
+    def test_18_except_with_name(self):
+        def func():
+            try:
+                try:
+                    raise Exception
+                except Exception as e:
+                    raise
+                    x = "Something"
+                    y = "Something"
+            except Exception:
+                pass
+
+        self.run_and_compare(func,
+            [(0, 'call'),
+             (1, 'line'),
+             (2, 'line'),
+             (3, 'line'),
+             (3, 'exception'),
+             (4, 'line'),
+             (5, 'line'),
+             (8, 'line'),
+             (9, 'line'),
+             (9, 'return')])
+
+    def test_19_except_with_finally(self):
+        def func():
+            try:
+                try:
+                    raise Exception
+                finally:
+                    y = "Something"
+            except Exception:
+                b = 23
+
+        self.run_and_compare(func,
+            [(0, 'call'),
+             (1, 'line'),
+             (2, 'line'),
+             (3, 'line'),
+             (3, 'exception'),
+             (5, 'line'),
+             (6, 'line'),
+             (7, 'line'),
+             (7, 'return')])
+
+    def test_20_async_for_loop(self):
+        class AsyncIteratorWrapper:
+            def __init__(self, obj):
+                self._it = iter(obj)
+
+            def __aiter__(self):
+                return self
+
+            async def __anext__(self):
+                try:
+                    return next(self._it)
+                except StopIteration:
+                    raise StopAsyncIteration
+
+        async def doit_async():
+            async for letter in AsyncIteratorWrapper("abc"):
+                x = letter
+            y = 42
+
+        def run(tracer):
+            x = doit_async()
+            try:
+                sys.settrace(tracer)
+                x.send(None)
+            finally:
+                sys.settrace(None)
+
+        tracer = self.make_tracer()
+        events = [
+                (0, 'call'),
+                (1, 'line'),
+                (-12, 'call'),
+                (-11, 'line'),
+                (-11, 'return'),
+                (-9, 'call'),
+                (-8, 'line'),
+                (-8, 'return'),
+                (-6, 'call'),
+                (-5, 'line'),
+                (-4, 'line'),
+                (-4, 'return'),
+                (1, 'exception'),
+                (2, 'line'),
+                (1, 'line'),
+                (-6, 'call'),
+                (-5, 'line'),
+                (-4, 'line'),
+                (-4, 'return'),
+                (1, 'exception'),
+                (2, 'line'),
+                (1, 'line'),
+                (-6, 'call'),
+                (-5, 'line'),
+                (-4, 'line'),
+                (-4, 'return'),
+                (1, 'exception'),
+                (2, 'line'),
+                (1, 'line'),
+                (-6, 'call'),
+                (-5, 'line'),
+                (-4, 'line'),
+                (-4, 'exception'),
+                (-3, 'line'),
+                (-2, 'line'),
+                (-2, 'exception'),
+                (-2, 'return'),
+                (1, 'exception'),
+                (3, 'line'),
+                (3, 'return')]
+        try:
+            run(tracer.trace)
+        except Exception:
+            pass
+        self.compare_events(doit_async.__code__.co_firstlineno,
+                            tracer.events, events)
+
 
 class SkipLineEventsTraceTestCase(TraceTestCase):
     """Repeat the trace tests, but with per-line events skipped"""
@@ -827,8 +948,8 @@
             output.append(11)
         output.append(12)
 
-    @jump_test(5, 11, [2, 4, 12])
-    def test_jump_over_return_try_finally_in_finally_block(output):
+    @jump_test(5, 11, [2, 4], (ValueError, 'unreachable'))
+    def test_no_jump_over_return_try_finally_in_finally_block(output):
         try:
             output.append(2)
         finally:
@@ -842,8 +963,8 @@
             pass
         output.append(12)
 
-    @jump_test(3, 4, [1, 4])
-    def test_jump_infinite_while_loop(output):
+    @jump_test(3, 4, [1], (ValueError, 'unreachable'))
+    def test_no_jump_infinite_while_loop(output):
         output.append(1)
         while True:
             output.append(3)
@@ -1236,16 +1357,16 @@
             output.append(7)
         output.append(8)
 
-    @jump_test(1, 5, [], (ValueError, "into a 'finally'"))
-    def test_no_jump_into_finally_block(output):
+    @jump_test(1, 5, [5])
+    def test_jump_into_finally_block(output):
         output.append(1)
         try:
             output.append(3)
         finally:
             output.append(5)
 
-    @jump_test(3, 6, [2, 5, 6], (ValueError, "into a 'finally'"))
-    def test_no_jump_into_finally_block_from_try_block(output):
+    @jump_test(3, 6, [2, 6, 7])
+    def test_jump_into_finally_block_from_try_block(output):
         try:
             output.append(2)
             output.append(3)
@@ -1254,8 +1375,8 @@
             output.append(6)
         output.append(7)
 
-    @jump_test(5, 1, [1, 3], (ValueError, "out of a 'finally'"))
-    def test_no_jump_out_of_finally_block(output):
+    @jump_test(5, 1, [1, 3, 1, 3, 5])
+    def test_jump_out_of_finally_block(output):
         output.append(1)
         try:
             output.append(3)
@@ -1320,23 +1441,23 @@
             output.append(6)
             output.append(7)
 
-    @jump_test(3, 5, [1, 2, -2], (ValueError, 'into'))
-    def test_no_jump_between_with_blocks(output):
+    @jump_test(3, 5, [1, 2, 5, -2])
+    def test_jump_between_with_blocks(output):
         output.append(1)
         with tracecontext(output, 2):
             output.append(3)
         with tracecontext(output, 4):
             output.append(5)
 
-    @async_jump_test(3, 5, [1, 2, -2], (ValueError, 'into'))
-    async def test_no_jump_between_async_with_blocks(output):
+    @async_jump_test(3, 5, [1, 2, 5, -2])
+    async def test_jump_between_async_with_blocks(output):
         output.append(1)
         async with asynctracecontext(output, 2):
             output.append(3)
         async with asynctracecontext(output, 4):
             output.append(5)
 
-    @jump_test(5, 7, [2, 4], (ValueError, 'finally'))
+    @jump_test(5, 7, [2, 4], (ValueError, "unreachable"))
     def test_no_jump_over_return_out_of_finally_block(output):
         try:
             output.append(2)
@@ -1430,9 +1551,8 @@
         output.append(1)
         1 / 0
 
-    @jump_test(3, 2, [2], event='return', error=(ValueError,
-               "can't jump from a yield statement"))
-    def test_no_jump_from_yield(output):
+    @jump_test(3, 2, [2, 5], event='return')
+    def test_jump_from_yield(output):
         def gen():
             output.append(2)
             yield 3
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index b512168..29cde91 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -11,7 +11,7 @@
 import tarfile
 
 from test import support
-from test.support import script_helper, requires_hashdigest
+from test.support import script_helper
 
 # Check for our compression modules.
 try:
@@ -57,21 +57,21 @@
     def mode(self):
         return self.prefix + self.suffix
 
-@support.requires_gzip
+@support.requires_gzip()
 class GzipTest:
     tarname = gzipname
     suffix = 'gz'
     open = gzip.GzipFile if gzip else None
     taropen = tarfile.TarFile.gzopen
 
-@support.requires_bz2
+@support.requires_bz2()
 class Bz2Test:
     tarname = bz2name
     suffix = 'bz2'
     open = bz2.BZ2File if bz2 else None
     taropen = tarfile.TarFile.bz2open
 
-@support.requires_lzma
+@support.requires_lzma()
 class LzmaTest:
     tarname = xzname
     suffix = 'xz'
@@ -319,6 +319,38 @@
 
 class CommonReadTest(ReadTest):
 
+    def test_is_tarfile_erroneous(self):
+        with open(tmpname, "wb"):
+            pass
+
+        # is_tarfile works on filenames
+        self.assertFalse(tarfile.is_tarfile(tmpname))
+
+        # is_tarfile works on path-like objects
+        self.assertFalse(tarfile.is_tarfile(pathlib.Path(tmpname)))
+
+        # is_tarfile works on file objects
+        with open(tmpname, "rb") as fobj:
+            self.assertFalse(tarfile.is_tarfile(fobj))
+
+        # is_tarfile works on file-like objects
+        self.assertFalse(tarfile.is_tarfile(io.BytesIO(b"invalid")))
+
+    def test_is_tarfile_valid(self):
+        # is_tarfile works on filenames
+        self.assertTrue(tarfile.is_tarfile(self.tarname))
+
+        # is_tarfile works on path-like objects
+        self.assertTrue(tarfile.is_tarfile(pathlib.Path(self.tarname)))
+
+        # is_tarfile works on file objects
+        with open(self.tarname, "rb") as fobj:
+            self.assertTrue(tarfile.is_tarfile(fobj))
+
+        # is_tarfile works on file-like objects
+        with open(self.tarname, "rb") as fobj:
+            self.assertTrue(tarfile.is_tarfile(io.BytesIO(fobj.read())))
+
     def test_empty_tarfile(self):
         # Test for issue6123: Allow opening empty archives.
         # This test checks if tarfile.open() is able to open an empty tar
@@ -354,7 +386,7 @@
     def test_ignore_zeros(self):
         # Test TarFile's ignore_zeros option.
         # generate 512 pseudorandom bytes
-        data = Random(0).getrandbits(512*8).to_bytes(512, 'big')
+        data = Random(0).randbytes(512)
         for char in (b'\0', b'a'):
             # Test if EOFHeaderError ('\0') and InvalidHeaderError ('a')
             # are ignored correctly.
@@ -1314,10 +1346,10 @@
                 f.write('something\n')
             os.symlink(source_file, target_file)
             with tarfile.open(temparchive, 'w') as tar:
-                tar.add(source_file)
-                tar.add(target_file)
+                tar.add(source_file, arcname="source")
+                tar.add(target_file, arcname="symlink")
             # Let's extract it to the location which contains the symlink
-            with tarfile.open(temparchive) as tar:
+            with tarfile.open(temparchive, errorlevel=2) as tar:
                 # this should not raise OSError: [Errno 17] File exists
                 try:
                     tar.extractall(path=tempdir)
@@ -1384,12 +1416,15 @@
                                    pax_headers={'non': 'empty'})
             self.assertFalse(f.closed)
 
+
 class GzipWriteTest(GzipTest, WriteTest):
     pass
 
+
 class Bz2WriteTest(Bz2Test, WriteTest):
     pass
 
+
 class LzmaWriteTest(LzmaTest, WriteTest):
     pass
 
@@ -1432,8 +1467,17 @@
         finally:
             os.umask(original_umask)
 
+
 class GzipStreamWriteTest(GzipTest, StreamWriteTest):
-    pass
+    def test_source_directory_not_leaked(self):
+        """
+        Ensure the source directory is not included in the tar header
+        per bpo-41316.
+        """
+        tarfile.open(tmpname, self.mode).close()
+        payload = pathlib.Path(tmpname).read_text(encoding='latin-1')
+        assert os.path.dirname(tmpname) not in payload
+
 
 class Bz2StreamWriteTest(Bz2Test, StreamWriteTest):
     decompressor = bz2.BZ2Decompressor if bz2 else None
@@ -1524,6 +1568,52 @@
                    ("longlnk/" * 127) + "longlink_")
 
 
+class DeviceHeaderTest(WriteTestBase, unittest.TestCase):
+
+    prefix = "w:"
+
+    def test_headers_written_only_for_device_files(self):
+        # Regression test for bpo-18819.
+        tempdir = os.path.join(TEMPDIR, "device_header_test")
+        os.mkdir(tempdir)
+        try:
+            tar = tarfile.open(tmpname, self.mode)
+            try:
+                input_blk = tarfile.TarInfo(name="my_block_device")
+                input_reg = tarfile.TarInfo(name="my_regular_file")
+                input_blk.type = tarfile.BLKTYPE
+                input_reg.type = tarfile.REGTYPE
+                tar.addfile(input_blk)
+                tar.addfile(input_reg)
+            finally:
+                tar.close()
+
+            # devmajor and devminor should be *interpreted* as 0 in both...
+            tar = tarfile.open(tmpname, "r")
+            try:
+                output_blk = tar.getmember("my_block_device")
+                output_reg = tar.getmember("my_regular_file")
+            finally:
+                tar.close()
+            self.assertEqual(output_blk.devmajor, 0)
+            self.assertEqual(output_blk.devminor, 0)
+            self.assertEqual(output_reg.devmajor, 0)
+            self.assertEqual(output_reg.devminor, 0)
+
+            # ...but the fields should not actually be set on regular files:
+            with open(tmpname, "rb") as infile:
+                buf = infile.read()
+            buf_blk = buf[output_blk.offset:output_blk.offset_data]
+            buf_reg = buf[output_reg.offset:output_reg.offset_data]
+            # See `struct posixheader` in GNU docs for byte offsets:
+            # <https://www.gnu.org/software/tar/manual/html_node/Standard.html>
+            device_headers = slice(329, 329 + 16)
+            self.assertEqual(buf_blk[device_headers], b"0000000\0" * 2)
+            self.assertEqual(buf_reg[device_headers], b"\0" * 16)
+        finally:
+            support.rmtree(tempdir)
+
+
 class CreateTest(WriteTestBase, unittest.TestCase):
 
     prefix = "x:"
@@ -2234,7 +2324,8 @@
     def test_test_command_verbose(self):
         for tar_name in testtarnames:
             for opt in '-v', '--verbose':
-                out = self.tarfilecmd(opt, '-t', tar_name)
+                out = self.tarfilecmd(opt, '-t', tar_name,
+                                      PYTHONIOENCODING='utf-8')
                 self.assertIn(b'is a tar archive.\n', out)
 
     def test_test_command_invalid_file(self):
@@ -2305,7 +2396,8 @@
                                   'and-utf8-bom-sig-only.txt')]
         for opt in '-v', '--verbose':
             try:
-                out = self.tarfilecmd(opt, '-c', tmpname, *files)
+                out = self.tarfilecmd(opt, '-c', tmpname, *files,
+                                      PYTHONIOENCODING='utf-8')
                 self.assertIn(b' file created.', out)
                 with tarfile.open(tmpname) as tar:
                     tar.getmembers()
@@ -2363,7 +2455,8 @@
         for opt in '-v', '--verbose':
             try:
                 with support.temp_cwd(tarextdir):
-                    out = self.tarfilecmd(opt, '-e', tmpname)
+                    out = self.tarfilecmd(opt, '-e', tmpname,
+                                          PYTHONIOENCODING='utf-8')
                 self.assertIn(b' file is extracted.', out)
             finally:
                 support.rmtree(tarextdir)
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index 3183ea8..1c5b9cf 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -3,6 +3,7 @@
 import subprocess
 import sys
 import os
+import warnings
 from test import support
 
 # Skip this test if the _tkinter module wasn't built.
@@ -573,9 +574,12 @@
     def test_split(self):
         split = self.interp.tk.split
         call = self.interp.tk.call
-        self.assertRaises(TypeError, split)
-        self.assertRaises(TypeError, split, 'a', 'b')
-        self.assertRaises(TypeError, split, 2)
+        with warnings.catch_warnings():
+            warnings.filterwarnings('ignore', r'\bsplit\b.*\bsplitlist\b',
+                                    DeprecationWarning)
+            self.assertRaises(TypeError, split)
+            self.assertRaises(TypeError, split, 'a', 'b')
+            self.assertRaises(TypeError, split, 2)
         testcases = [
             ('2', '2'),
             ('', ''),
@@ -617,7 +621,8 @@
                     expected),
             ]
         for arg, res in testcases:
-            self.assertEqual(split(arg), res, msg=arg)
+            with self.assertWarns(DeprecationWarning):
+                self.assertEqual(split(arg), res, msg=arg)
 
     def test_splitdict(self):
         splitdict = tkinter._splitdict
diff --git a/Lib/test/test_telnetlib.py b/Lib/test/test_telnetlib.py
index 414c328..7633901 100644
--- a/Lib/test/test_telnetlib.py
+++ b/Lib/test/test_telnetlib.py
@@ -5,9 +5,10 @@
 import contextlib
 
 from test import support
+from test.support import socket_helper
 import unittest
 
-HOST = support.HOST
+HOST = socket_helper.HOST
 
 def server(evt, serv):
     serv.listen()
@@ -26,7 +27,7 @@
         self.evt = threading.Event()
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.sock.settimeout(60)  # Safety net. Look issue 11812
-        self.port = support.bind_port(self.sock)
+        self.port = socket_helper.bind_port(self.sock)
         self.thread = threading.Thread(target=server, args=(self.evt,self.sock))
         self.thread.setDaemon(True)
         self.thread.start()
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index f129454..fcc706e 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -4,12 +4,12 @@
 import io
 import os
 import pathlib
-import signal
 import sys
 import re
 import warnings
 import contextlib
 import stat
+import types
 import weakref
 from unittest import mock
 
@@ -200,15 +200,7 @@
             child_value = os.read(read_fd, len(parent_value)).decode("ascii")
         finally:
             if pid:
-                # best effort to ensure the process can't bleed out
-                # via any bugs above
-                try:
-                    os.kill(pid, signal.SIGKILL)
-                except OSError:
-                    pass
-
-                # Read the process exit status to avoid zombie process
-                os.waitpid(pid, 0)
+                support.wait_process(pid, exitcode=0)
 
             os.close(read_fd)
             os.close(write_fd)
@@ -1231,6 +1223,9 @@
         self.assertTrue(f._rolled)
         self.assertEqual(os.fstat(f.fileno()).st_size, 20)
 
+    def test_class_getitem(self):
+        self.assertIsInstance(tempfile.SpooledTemporaryFile[bytes],
+                      types.GenericAlias)
 
 if tempfile.NamedTemporaryFile is not tempfile.TemporaryFile:
 
diff --git a/Lib/test/test_thread.py b/Lib/test/test_thread.py
index 9f4801f..77e46f2 100644
--- a/Lib/test/test_thread.py
+++ b/Lib/test/test_thread.py
@@ -225,30 +225,31 @@
     @unittest.skipUnless(hasattr(os, 'fork'), 'need os.fork')
     @support.reap_threads
     def test_forkinthread(self):
-        status = "not set"
+        pid = None
 
-        def thread1():
-            nonlocal status
+        def fork_thread(read_fd, write_fd):
+            nonlocal pid
 
             # fork in a thread
             pid = os.fork()
-            if pid == 0:
-                # child
-                try:
-                    os.close(self.read_fd)
-                    os.write(self.write_fd, b"OK")
-                finally:
-                    os._exit(0)
-            else:
-                # parent
-                os.close(self.write_fd)
-                pid, status = os.waitpid(pid, 0)
+            if pid:
+                # parent process
+                return
+
+            # child process
+            try:
+                os.close(read_fd)
+                os.write(write_fd, b"OK")
+            finally:
+                os._exit(0)
 
         with support.wait_threads_exit():
-            thread.start_new_thread(thread1, ())
-            self.assertEqual(os.read(self.read_fd, 2), b"OK",
-                             "Unable to fork() in thread")
-        self.assertEqual(status, 0)
+            thread.start_new_thread(fork_thread, (self.read_fd, self.write_fd))
+            self.assertEqual(os.read(self.read_fd, 2), b"OK")
+            os.close(self.write_fd)
+
+        self.assertIsNotNone(pid)
+        support.wait_process(pid, exitcode=0)
 
     def tearDown(self):
         try:
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index ac4e7a7..c21cdf8 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -3,8 +3,7 @@
 """
 
 import test.support
-from test.support import (verbose, import_module, cpython_only,
-                          requires_type_collecting)
+from test.support import verbose, import_module, cpython_only
 from test.support.script_helper import assert_python_ok, assert_python_failure
 
 import random
@@ -17,6 +16,7 @@
 import os
 import subprocess
 import signal
+import textwrap
 
 from test import lock_tests
 from test import support
@@ -264,7 +264,7 @@
         self.assertEqual(result, 1) # one thread state modified
         if verbose:
             print("    waiting for worker to say it caught the exception")
-        worker_saw_exception.wait(timeout=10)
+        worker_saw_exception.wait(timeout=support.SHORT_TIMEOUT)
         self.assertTrue(t.finished)
         if verbose:
             print("    all OK -- joining worker")
@@ -287,7 +287,7 @@
         finally:
             threading._start_new_thread = _start_new_thread
 
-    def test_finalize_runnning_thread(self):
+    def test_finalize_running_thread(self):
         # Issue 1402: the PyGILState_Ensure / _Release functions may be called
         # very late on python exit: on deallocation of a running thread for
         # example.
@@ -421,8 +421,6 @@
         t.setDaemon(True)
         t.getName()
         t.setName("name")
-        with self.assertWarnsRegex(DeprecationWarning, 'use is_alive()'):
-            t.isAlive()
         e = threading.Event()
         e.isSet()
         threading.activeCount()
@@ -441,6 +439,35 @@
         t = threading.Thread(daemon=True)
         self.assertTrue(t.daemon)
 
+    @unittest.skipUnless(hasattr(os, 'fork'), 'needs os.fork()')
+    def test_fork_at_exit(self):
+        # bpo-42350: Calling os.fork() after threading._shutdown() must
+        # not log an error.
+        code = textwrap.dedent("""
+            import atexit
+            import os
+            import sys
+            from test.support import wait_process
+
+            # Import the threading module to register its "at fork" callback
+            import threading
+
+            def exit_handler():
+                pid = os.fork()
+                if not pid:
+                    print("child process ok", file=sys.stderr, flush=True)
+                    # child process
+                    sys.exit()
+                else:
+                    wait_process(pid, exitcode=0)
+
+            # exit_handler() will be called after threading._shutdown()
+            atexit.register(exit_handler)
+        """)
+        _, out, err = assert_python_ok("-c", code)
+        self.assertEqual(out, b'')
+        self.assertEqual(err.rstrip(), b'child process ok')
+
     @unittest.skipUnless(hasattr(os, 'fork'), 'test needs fork()')
     def test_dummy_thread_after_fork(self):
         # Issue #14308: a dummy thread in the active list doesn't mess up
@@ -487,9 +514,7 @@
             else:
                 t.join()
 
-                pid, status = os.waitpid(pid, 0)
-                self.assertTrue(os.WIFEXITED(status))
-                self.assertEqual(10, os.WEXITSTATUS(status))
+                support.wait_process(pid, exitcode=10)
 
     def test_main_thread(self):
         main = threading.main_thread()
@@ -509,6 +534,7 @@
     def test_main_thread_after_fork(self):
         code = """if 1:
             import os, threading
+            from test import support
 
             pid = os.fork()
             if pid == 0:
@@ -517,7 +543,7 @@
                 print(main.ident == threading.current_thread().ident)
                 print(main.ident == threading.get_ident())
             else:
-                os.waitpid(pid, 0)
+                support.wait_process(pid, exitcode=0)
         """
         _, out, err = assert_python_ok("-c", code)
         data = out.decode().replace('\r', '')
@@ -530,6 +556,7 @@
     def test_main_thread_after_fork_from_nonmain_thread(self):
         code = """if 1:
             import os, threading, sys
+            from test import support
 
             def f():
                 pid = os.fork()
@@ -542,7 +569,7 @@
                     # we have to flush before exit.
                     sys.stdout.flush()
                 else:
-                    os.waitpid(pid, 0)
+                    support.wait_process(pid, exitcode=0)
 
             th = threading.Thread(target=f)
             th.start()
@@ -553,7 +580,6 @@
         self.assertEqual(err, b"")
         self.assertEqual(data, "Thread-1\nTrue\nTrue\n")
 
-    @requires_type_collecting
     def test_main_thread_during_shutdown(self):
         # bpo-31516: current_thread() should still point to the main thread
         # at shutdown
@@ -641,7 +667,7 @@
         finish.release()
         # When the thread ends, the state_lock can be successfully
         # acquired.
-        self.assertTrue(tstate_lock.acquire(timeout=5), False)
+        self.assertTrue(tstate_lock.acquire(timeout=support.SHORT_TIMEOUT), False)
         # But is_alive() is still True:  we hold _tstate_lock now, which
         # prevents is_alive() from knowing the thread's end-of-life C code
         # is done.
@@ -762,6 +788,23 @@
                 # Daemon threads must never add it to _shutdown_locks.
                 self.assertNotIn(tstate_lock, threading._shutdown_locks)
 
+    def test_locals_at_exit(self):
+        # bpo-19466: thread locals must not be deleted before destructors
+        # are called
+        rc, out, err = assert_python_ok("-c", """if 1:
+            import threading
+
+            class Atexit:
+                def __del__(self):
+                    print("thread_dict.atexit = %r" % thread_dict.atexit)
+
+            thread_dict = threading.local()
+            thread_dict.atexit = "value"
+
+            atexit = Atexit()
+        """)
+        self.assertEqual(out.rstrip(), b"thread_dict.atexit = 'value'")
+
 
 class ThreadJoinOnShutdown(BaseTestCase):
 
@@ -799,11 +842,15 @@
     def test_2_join_in_forked_process(self):
         # Like the test above, but from a forked interpreter
         script = """if 1:
+            from test import support
+
             childpid = os.fork()
             if childpid != 0:
-                os.waitpid(childpid, 0)
+                # parent process
+                support.wait_process(childpid, exitcode=0)
                 sys.exit(0)
 
+            # child process
             t = threading.Thread(target=joiningfunc,
                                  args=(threading.current_thread(),))
             t.start()
@@ -818,13 +865,17 @@
         # In the forked process, the main Thread object must be marked as stopped.
 
         script = """if 1:
+            from test import support
+
             main_thread = threading.current_thread()
             def worker():
                 childpid = os.fork()
                 if childpid != 0:
-                    os.waitpid(childpid, 0)
+                    # parent process
+                    support.wait_process(childpid, exitcode=0)
                     sys.exit(0)
 
+                # child process
                 t = threading.Thread(target=joiningfunc,
                                      args=(main_thread,))
                 print('end of main')
@@ -887,9 +938,9 @@
             # just fork a child process and wait it
             pid = os.fork()
             if pid > 0:
-                os.waitpid(pid, 0)
+                support.wait_process(pid, exitcode=50)
             else:
-                os._exit(0)
+                os._exit(50)
 
         # start a bunch of threads that will fork() child processes
         threads = []
@@ -916,26 +967,30 @@
         if pid == 0:
             # check that threads states have been cleared
             if len(sys._current_frames()) == 1:
-                os._exit(0)
+                os._exit(51)
             else:
-                os._exit(1)
+                os._exit(52)
         else:
-            _, status = os.waitpid(pid, 0)
-            self.assertEqual(0, status)
+            support.wait_process(pid, exitcode=51)
 
         for t in threads:
             t.join()
 
 
 class SubinterpThreadingTests(BaseTestCase):
+    def pipe(self):
+        r, w = os.pipe()
+        self.addCleanup(os.close, r)
+        self.addCleanup(os.close, w)
+        if hasattr(os, 'set_blocking'):
+            os.set_blocking(r, False)
+        return (r, w)
 
     def test_threads_join(self):
         # Non-daemon threads should be joined at subinterpreter shutdown
         # (issue #18808)
-        r, w = os.pipe()
-        self.addCleanup(os.close, r)
-        self.addCleanup(os.close, w)
-        code = r"""if 1:
+        r, w = self.pipe()
+        code = textwrap.dedent(r"""
             import os
             import random
             import threading
@@ -953,7 +1008,7 @@
 
             threading.Thread(target=f).start()
             random_sleep()
-            """ % (w,)
+        """ % (w,))
         ret = test.support.run_in_subinterp(code)
         self.assertEqual(ret, 0)
         # The thread was joined properly.
@@ -964,10 +1019,8 @@
         # Python code returned but before the thread state is deleted.
         # To achieve this, we register a thread-local object which sleeps
         # a bit when deallocated.
-        r, w = os.pipe()
-        self.addCleanup(os.close, r)
-        self.addCleanup(os.close, w)
-        code = r"""if 1:
+        r, w = self.pipe()
+        code = textwrap.dedent(r"""
             import os
             import random
             import threading
@@ -992,7 +1045,7 @@
 
             threading.Thread(target=f).start()
             random_sleep()
-            """ % (w,)
+        """ % (w,))
         ret = test.support.run_in_subinterp(code)
         self.assertEqual(ret, 0)
         # The thread was joined properly.
@@ -1000,7 +1053,7 @@
 
     @cpython_only
     def test_daemon_threads_fatal_error(self):
-        subinterp_code = r"""if 1:
+        subinterp_code = f"""if 1:
             import os
             import threading
             import time
@@ -1008,7 +1061,7 @@
             def f():
                 # Make sure the daemon thread is still running when
                 # Py_EndInterpreter is called.
-                time.sleep(10)
+                time.sleep({test.support.SHORT_TIMEOUT})
             threading.Thread(target=f, daemon=True).start()
             """
         script = r"""if 1:
@@ -1107,7 +1160,6 @@
         self.assertIn("ZeroDivisionError", err)
         self.assertNotIn("Unhandled exception", err)
 
-    @requires_type_collecting
     def test_print_exception_stderr_is_none_1(self):
         script = r"""if True:
             import sys
@@ -1377,5 +1429,55 @@
             signal.signal(signal.SIGINT, handler)
 
 
+class AtexitTests(unittest.TestCase):
+
+    def test_atexit_output(self):
+        rc, out, err = assert_python_ok("-c", """if True:
+            import threading
+
+            def run_last():
+                print('parrot')
+
+            threading._register_atexit(run_last)
+        """)
+
+        self.assertFalse(err)
+        self.assertEqual(out.strip(), b'parrot')
+
+    def test_atexit_called_once(self):
+        rc, out, err = assert_python_ok("-c", """if True:
+            import threading
+            from unittest.mock import Mock
+
+            mock = Mock()
+            threading._register_atexit(mock)
+            mock.assert_not_called()
+            # force early shutdown to ensure it was called once
+            threading._shutdown()
+            mock.assert_called_once()
+        """)
+
+        self.assertFalse(err)
+
+    def test_atexit_after_shutdown(self):
+        # The only way to do this is by registering an atexit within
+        # an atexit, which is intended to raise an exception.
+        rc, out, err = assert_python_ok("-c", """if True:
+            import threading
+
+            def func():
+                pass
+
+            def run_last():
+                threading._register_atexit(func)
+
+            threading._register_atexit(run_last)
+        """)
+
+        self.assertTrue(err)
+        self.assertIn("RuntimeError: can't register atexit after shutdown",
+                err.decode())
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index 8d8d31e..6674edc 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -825,7 +825,7 @@
                     try:
                         result = pytime_converter(value, time_rnd)
                         expected = expected_func(value)
-                    except Exception as exc:
+                    except Exception:
                         self.fail("Error on timestamp conversion: %s" % debug_info)
                     self.assertEqual(result,
                                      expected,
@@ -1040,6 +1040,36 @@
             with self.assertRaises(ValueError):
                 pytime_object_to_timespec(float('nan'), time_rnd)
 
+@unittest.skipUnless(sys.platform == "darwin", "test weak linking on macOS")
+class TestTimeWeaklinking(unittest.TestCase):
+    # These test cases verify that weak linking support on macOS works
+    # as expected. These cases only test new behaviour introduced by weak linking,
+    # regular behaviour is tested by the normal test cases.
+    #
+    # See the section on Weak Linking in Mac/README.txt for more information.
+    def test_clock_functions(self):
+        import sysconfig
+        import platform
+
+        config_vars = sysconfig.get_config_vars()
+        var_name = "HAVE_CLOCK_GETTIME"
+        if var_name not in config_vars or not config_vars[var_name]:
+            raise unittest.SkipTest(f"{var_name} is not available")
+
+        mac_ver = tuple(int(x) for x in platform.mac_ver()[0].split("."))
+
+        clock_names = [
+            "CLOCK_MONOTONIC", "clock_gettime", "clock_gettime_ns", "clock_settime",
+            "clock_settime_ns", "clock_getres"]
+
+        if mac_ver >= (10, 12):
+            for name in clock_names:
+                self.assertTrue(hasattr(time, name), f"time.{name} is not available")
+
+        else:
+            for name in clock_names:
+                self.assertFalse(hasattr(time, name), f"time.{name} is available")
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_timeout.py b/Lib/test/test_timeout.py
index b07c07c..ac803f5 100644
--- a/Lib/test/test_timeout.py
+++ b/Lib/test/test_timeout.py
@@ -3,6 +3,7 @@
 import functools
 import unittest
 from test import support
+from test.support import socket_helper
 
 # This requires the 'network' resource as given on the regrtest command line.
 skip_expected = not support.is_resource_enabled('network')
@@ -19,7 +20,7 @@
     We must perform name resolution before timeout tests, otherwise it will be
     performed by connect().
     """
-    with support.transient_internet(host):
+    with socket_helper.transient_internet(host):
         return socket.getaddrinfo(host, port, socket.AF_INET,
                                   socket.SOCK_STREAM)[0][4]
 
@@ -79,24 +80,24 @@
     def testTimeoutThenBlocking(self):
         # Test settimeout() followed by setblocking()
         self.sock.settimeout(10)
-        self.sock.setblocking(1)
+        self.sock.setblocking(True)
         self.assertEqual(self.sock.gettimeout(), None)
-        self.sock.setblocking(0)
+        self.sock.setblocking(False)
         self.assertEqual(self.sock.gettimeout(), 0.0)
 
         self.sock.settimeout(10)
-        self.sock.setblocking(0)
+        self.sock.setblocking(False)
         self.assertEqual(self.sock.gettimeout(), 0.0)
-        self.sock.setblocking(1)
+        self.sock.setblocking(True)
         self.assertEqual(self.sock.gettimeout(), None)
 
     def testBlockingThenTimeout(self):
         # Test setblocking() followed by settimeout()
-        self.sock.setblocking(0)
+        self.sock.setblocking(False)
         self.sock.settimeout(1)
         self.assertEqual(self.sock.gettimeout(), 1)
 
-        self.sock.setblocking(1)
+        self.sock.setblocking(True)
         self.sock.settimeout(1)
         self.assertEqual(self.sock.gettimeout(), 1)
 
@@ -110,7 +111,7 @@
     # solution.
     fuzz = 2.0
 
-    localhost = support.HOST
+    localhost = socket_helper.HOST
 
     def setUp(self):
         raise NotImplementedError()
@@ -199,10 +200,7 @@
 
         skip = True
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        # Use a timeout of 3 seconds.  Why 3?  Because it's more than 1, and
-        # less than 5.  i.e. no particular reason.  Feel free to tweak it if
-        # you feel a different value would be more appropriate.
-        timeout = 3
+        timeout = support.LOOPBACK_TIMEOUT
         sock.settimeout(timeout)
         try:
             sock.connect((whitehole))
@@ -232,25 +230,25 @@
 
         # All that hard work just to test if connect times out in 0.001s ;-)
         self.addr_remote = blackhole
-        with support.transient_internet(self.addr_remote[0]):
+        with socket_helper.transient_internet(self.addr_remote[0]):
             self._sock_operation(1, 0.001, 'connect', self.addr_remote)
 
     def testRecvTimeout(self):
         # Test recv() timeout
-        with support.transient_internet(self.addr_remote[0]):
+        with socket_helper.transient_internet(self.addr_remote[0]):
             self.sock.connect(self.addr_remote)
             self._sock_operation(1, 1.5, 'recv', 1024)
 
     def testAcceptTimeout(self):
         # Test accept() timeout
-        support.bind_port(self.sock, self.localhost)
+        socket_helper.bind_port(self.sock, self.localhost)
         self.sock.listen()
         self._sock_operation(1, 1.5, 'accept')
 
     def testSend(self):
         # Test send() timeout
         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
-            support.bind_port(serv, self.localhost)
+            socket_helper.bind_port(serv, self.localhost)
             serv.listen()
             self.sock.connect(serv.getsockname())
             # Send a lot of data in order to bypass buffering in the TCP stack.
@@ -259,7 +257,7 @@
     def testSendto(self):
         # Test sendto() timeout
         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
-            support.bind_port(serv, self.localhost)
+            socket_helper.bind_port(serv, self.localhost)
             serv.listen()
             self.sock.connect(serv.getsockname())
             # The address argument is ignored since we already connected.
@@ -269,7 +267,7 @@
     def testSendall(self):
         # Test sendall() timeout
         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
-            support.bind_port(serv, self.localhost)
+            socket_helper.bind_port(serv, self.localhost)
             serv.listen()
             self.sock.connect(serv.getsockname())
             # Send a lot of data in order to bypass buffering in the TCP stack.
@@ -288,7 +286,7 @@
     def testRecvfromTimeout(self):
         # Test recvfrom() timeout
         # Prevent "Address already in use" socket exceptions
-        support.bind_port(self.sock, self.localhost)
+        socket_helper.bind_port(self.sock, self.localhost)
         self._sock_operation(1, 1.5, 'recvfrom', 1024)
 
 
diff --git a/Lib/test/test_tools/__init__.py b/Lib/test/test_tools/__init__.py
index 4d0fca3..eb9acad 100644
--- a/Lib/test/test_tools/__init__.py
+++ b/Lib/test/test_tools/__init__.py
@@ -1,20 +1,33 @@
 """Support functions for testing scripts in the Tools directory."""
-import os
-import unittest
+import contextlib
 import importlib
+import os.path
+import unittest
 from test import support
 
-basepath = os.path.dirname(                 # <src/install dir>
-                os.path.dirname(                # Lib
-                    os.path.dirname(                # test
-                        os.path.dirname(__file__))))    # test_tools
+basepath = os.path.normpath(
+        os.path.dirname(                 # <src/install dir>
+            os.path.dirname(                # Lib
+                os.path.dirname(                # test
+                    os.path.dirname(__file__)))))    # test_tools
 
 toolsdir = os.path.join(basepath, 'Tools')
 scriptsdir = os.path.join(toolsdir, 'scripts')
 
-def skip_if_missing():
-    if not os.path.isdir(scriptsdir):
-        raise unittest.SkipTest('scripts directory could not be found')
+def skip_if_missing(tool=None):
+    if tool:
+        tooldir = os.path.join(toolsdir, tool)
+    else:
+        tool = 'scripts'
+        tooldir = scriptsdir
+    if not os.path.isdir(tooldir):
+        raise unittest.SkipTest(f'{tool} directory could not be found')
+
+@contextlib.contextmanager
+def imports_under_tool(name, *subdirs):
+    tooldir = os.path.join(toolsdir, name, *subdirs)
+    with support.DirsOnSysPath(tooldir) as cm:
+        yield cm
 
 def import_tool(toolname):
     with support.DirsOnSysPath(scriptsdir):
diff --git a/Lib/test/test_tools/test_c_analyzer/__init__.py b/Lib/test/test_tools/test_c_analyzer/__init__.py
new file mode 100644
index 0000000..d0b4c04
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/__init__.py
@@ -0,0 +1,15 @@
+import contextlib
+import os.path
+import test.test_tools
+from test.support import load_package_tests
+
+
+@contextlib.contextmanager
+def tool_imports_for_tests():
+    test.test_tools.skip_if_missing('c-analyzer')
+    with test.test_tools.imports_under_tool('c-analyzer'):
+        yield
+
+
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_tools/test_c_analyzer/__main__.py b/Lib/test/test_tools/test_c_analyzer/__main__.py
new file mode 100644
index 0000000..b5b017d
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/__main__.py
@@ -0,0 +1,5 @@
+from . import load_tests
+import unittest
+
+
+unittest.main()
diff --git a/Lib/test/test_tools/test_c_analyzer/test_common/__init__.py b/Lib/test/test_tools/test_c_analyzer/test_common/__init__.py
new file mode 100644
index 0000000..bc502ef
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_common/__init__.py
@@ -0,0 +1,6 @@
+import os.path
+from test.support import load_package_tests
+
+
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_tools/test_c_analyzer/test_common/test_files.py b/Lib/test/test_tools/test_c_analyzer/test_common/test_files.py
new file mode 100644
index 0000000..0c97d2a
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_common/test_files.py
@@ -0,0 +1,470 @@
+import os.path
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.common.files import (
+            iter_files, _walk_tree, glob_tree,
+            )
+
+
+def fixpath(filename):
+    return filename.replace('/', os.path.sep)
+
+
+class IterFilesTests(unittest.TestCase):
+
+    maxDiff = None
+
+    _return_walk = None
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+    def set_files(self, *filesperroot):
+        roots = []
+        result = []
+        for root, files in filesperroot:
+            root = fixpath(root)
+            roots.append(root)
+            result.append([os.path.join(root, fixpath(f))
+                           for f in files])
+        self._return_walk = result
+        return roots
+
+    def _walk(self, root, *, suffix=None, walk=None):
+        self.calls.append(('_walk', (root, suffix, walk)))
+        return iter(self._return_walk.pop(0))
+
+    def _glob(self, root, *, suffix=None):
+        self.calls.append(('_glob', (root, suffix)))
+        return iter(self._return_walk.pop(0))
+
+    def test_typical(self):
+        dirnames = self.set_files(
+            ('spam', ['file1.c', 'file2.c']),
+            ('eggs', ['ham/file3.h']),
+            )
+        suffixes = ('.c', '.h')
+
+        files = list(iter_files(dirnames, suffixes,
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file2.c'),
+            fixpath('eggs/ham/file3.h'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', None, _walk_tree)),
+            ('_walk', ('eggs', None, _walk_tree)),
+            ])
+
+    def test_single_root(self):
+        self._return_walk = [
+                [fixpath('spam/file1.c'), fixpath('spam/file2.c')],
+                ]
+
+        files = list(iter_files('spam', '.c',
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file2.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', '.c', _walk_tree)),
+            ])
+
+    def test_one_root(self):
+        self._return_walk = [
+                [fixpath('spam/file1.c'), fixpath('spam/file2.c')],
+                ]
+
+        files = list(iter_files(['spam'], '.c',
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file2.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', '.c', _walk_tree)),
+            ])
+
+    def test_multiple_roots(self):
+        dirnames = self.set_files(
+            ('spam', ['file1.c', 'file2.c']),
+            ('eggs', ['ham/file3.c']),
+            )
+
+        files = list(iter_files(dirnames, '.c',
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file2.c'),
+            fixpath('eggs/ham/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', '.c', _walk_tree)),
+            ('_walk', ('eggs', '.c', _walk_tree)),
+            ])
+
+    def test_no_roots(self):
+        files = list(iter_files([], '.c',
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [])
+        self.assertEqual(self.calls, [])
+
+    def test_single_suffix(self):
+        self._return_walk = [
+                [fixpath('spam/file1.c'),
+                 fixpath('spam/eggs/file3.c'),
+                 ],
+                ]
+
+        files = list(iter_files('spam', '.c',
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/eggs/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', '.c', _walk_tree)),
+            ])
+
+    def test_one_suffix(self):
+        self._return_walk = [
+                [fixpath('spam/file1.c'),
+                 fixpath('spam/file1.h'),
+                 fixpath('spam/file1.o'),
+                 fixpath('spam/eggs/file3.c'),
+                 ],
+                ]
+
+        files = list(iter_files('spam', ['.c'],
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/eggs/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', None, _walk_tree)),
+            ])
+
+    def test_multiple_suffixes(self):
+        self._return_walk = [
+                [fixpath('spam/file1.c'),
+                 fixpath('spam/file1.h'),
+                 fixpath('spam/file1.o'),
+                 fixpath('spam/eggs/file3.c'),
+                 ],
+                ]
+
+        files = list(iter_files('spam', ('.c', '.h'),
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file1.h'),
+            fixpath('spam/eggs/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', None, _walk_tree)),
+            ])
+
+    def test_no_suffix(self):
+        expected = [fixpath('spam/file1.c'),
+                    fixpath('spam/file1.h'),
+                    fixpath('spam/file1.o'),
+                    fixpath('spam/eggs/file3.c'),
+                    ]
+        for suffix in (None, '', ()):
+            with self.subTest(suffix):
+                self.calls.clear()
+                self._return_walk = [list(expected)]
+
+                files = list(iter_files('spam', suffix,
+                                        _glob=self._glob,
+                                        _walk=self._walk))
+
+                self.assertEqual(files, expected)
+                self.assertEqual(self.calls, [
+                    ('_walk', ('spam', suffix, _walk_tree)),
+                    ])
+
+    def test_relparent(self):
+        dirnames = self.set_files(
+            ('/x/y/z/spam', ['file1.c', 'file2.c']),
+            ('/x/y/z/eggs', ['ham/file3.c']),
+            )
+
+        files = list(iter_files(dirnames, '.c', fixpath('/x/y'),
+                                _glob=self._glob,
+                                _walk=self._walk))
+
+        self.assertEqual(files, [
+            fixpath('z/spam/file1.c'),
+            fixpath('z/spam/file2.c'),
+            fixpath('z/eggs/ham/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', (fixpath('/x/y/z/spam'), '.c', _walk_tree)),
+            ('_walk', (fixpath('/x/y/z/eggs'), '.c', _walk_tree)),
+            ])
+
+    def test_glob(self):
+        dirnames = self.set_files(
+            ('spam', ['file1.c', 'file2.c']),
+            ('eggs', ['ham/file3.c']),
+            )
+
+        files = list(iter_files(dirnames, '.c',
+                                get_files=glob_tree,
+                                _walk=self._walk,
+                                _glob=self._glob))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file2.c'),
+            fixpath('eggs/ham/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_glob', ('spam', '.c')),
+            ('_glob', ('eggs', '.c')),
+            ])
+
+
+    def test_alt_walk_func(self):
+        dirnames = self.set_files(
+            ('spam', ['file1.c', 'file2.c']),
+            ('eggs', ['ham/file3.c']),
+            )
+        def get_files(root):
+            return None
+
+        files = list(iter_files(dirnames, '.c',
+                                get_files=get_files,
+                                _walk=self._walk,
+                                _glob=self._glob))
+
+        self.assertEqual(files, [
+            fixpath('spam/file1.c'),
+            fixpath('spam/file2.c'),
+            fixpath('eggs/ham/file3.c'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_walk', ('spam', '.c', get_files)),
+            ('_walk', ('eggs', '.c', get_files)),
+            ])
+
+
+
+
+
+
+#    def test_no_dirnames(self):
+#        dirnames = []
+#        filter_by_name = None
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [])
+#        self.assertEqual(self.calls, [])
+#
+#    def test_no_filter(self):
+#        self._return_walk = [
+#                [('spam', (), ('file1', 'file2.c', 'file3.h', 'file4.o')),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                ]
+#        filter_by_name = None
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [
+#            fixpath('spam/file1'),
+#            fixpath('spam/file2.c'),
+#            fixpath('spam/file3.h'),
+#            fixpath('spam/file4.o'),
+#            ])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ])
+#
+#    def test_no_files(self):
+#        self._return_walk = [
+#                [('spam', (), ()),
+#                 ],
+#                [(fixpath('eggs/ham'), (), ()),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                fixpath('eggs/ham'),
+#                ]
+#        filter_by_name = None
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ('_walk', (fixpath('eggs/ham'),)),
+#            ])
+#
+#    def test_tree(self):
+#        self._return_walk = [
+#                [('spam', ('sub1', 'sub2', 'sub3'), ('file1',)),
+#                 (fixpath('spam/sub1'), ('sub1sub1',), ('file2', 'file3')),
+#                 (fixpath('spam/sub1/sub1sub1'), (), ('file4',)),
+#                 (fixpath('spam/sub2'), (), ()),
+#                 (fixpath('spam/sub3'), (), ('file5',)),
+#                 ],
+#                [(fixpath('eggs/ham'), (), ('file6',)),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                fixpath('eggs/ham'),
+#                ]
+#        filter_by_name = None
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [
+#            fixpath('spam/file1'),
+#            fixpath('spam/sub1/file2'),
+#            fixpath('spam/sub1/file3'),
+#            fixpath('spam/sub1/sub1sub1/file4'),
+#            fixpath('spam/sub3/file5'),
+#            fixpath('eggs/ham/file6'),
+#            ])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ('_walk', (fixpath('eggs/ham'),)),
+#            ])
+#
+#    def test_filter_suffixes(self):
+#        self._return_walk = [
+#                [('spam', (), ('file1', 'file2.c', 'file3.h', 'file4.o')),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                ]
+#        filter_by_name = ('.c', '.h')
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [
+#            fixpath('spam/file2.c'),
+#            fixpath('spam/file3.h'),
+#            ])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ])
+#
+#    def test_some_filtered(self):
+#        self._return_walk = [
+#                [('spam', (), ('file1', 'file2', 'file3', 'file4')),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                ]
+#        def filter_by_name(filename, results=[False, True, False, True]):
+#            self.calls.append(('filter_by_name', (filename,)))
+#            return results.pop(0)
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [
+#            fixpath('spam/file2'),
+#            fixpath('spam/file4'),
+#            ])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ('filter_by_name', ('file1',)),
+#            ('filter_by_name', ('file2',)),
+#            ('filter_by_name', ('file3',)),
+#            ('filter_by_name', ('file4',)),
+#            ])
+#
+#    def test_none_filtered(self):
+#        self._return_walk = [
+#                [('spam', (), ('file1', 'file2', 'file3', 'file4')),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                ]
+#        def filter_by_name(filename, results=[True, True, True, True]):
+#            self.calls.append(('filter_by_name', (filename,)))
+#            return results.pop(0)
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [
+#            fixpath('spam/file1'),
+#            fixpath('spam/file2'),
+#            fixpath('spam/file3'),
+#            fixpath('spam/file4'),
+#            ])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ('filter_by_name', ('file1',)),
+#            ('filter_by_name', ('file2',)),
+#            ('filter_by_name', ('file3',)),
+#            ('filter_by_name', ('file4',)),
+#            ])
+#
+#    def test_all_filtered(self):
+#        self._return_walk = [
+#                [('spam', (), ('file1', 'file2', 'file3', 'file4')),
+#                 ],
+#                ]
+#        dirnames = [
+#                'spam',
+#                ]
+#        def filter_by_name(filename, results=[False, False, False, False]):
+#            self.calls.append(('filter_by_name', (filename,)))
+#            return results.pop(0)
+#
+#        files = list(iter_files(dirnames, filter_by_name,
+#                                _walk=self._walk))
+#
+#        self.assertEqual(files, [])
+#        self.assertEqual(self.calls, [
+#            ('_walk', ('spam',)),
+#            ('filter_by_name', ('file1',)),
+#            ('filter_by_name', ('file2',)),
+#            ('filter_by_name', ('file3',)),
+#            ('filter_by_name', ('file4',)),
+#            ])
diff --git a/Lib/test/test_tools/test_c_analyzer/test_common/test_info.py b/Lib/test/test_tools/test_c_analyzer/test_common/test_info.py
new file mode 100644
index 0000000..69dbb58
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_common/test_info.py
@@ -0,0 +1,197 @@
+import string
+import unittest
+
+from ..util import PseudoStr, StrProxy, Object
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.common.info import (
+            UNKNOWN,
+            ID,
+            )
+
+
+class IDTests(unittest.TestCase):
+
+    VALID_ARGS = (
+            'x/y/z/spam.c',
+            'func',
+            'eggs',
+            )
+    VALID_KWARGS = dict(zip(ID._fields, VALID_ARGS))
+    VALID_EXPECTED = VALID_ARGS
+
+    def test_from_raw(self):
+        tests = [
+            ('', None),
+            (None, None),
+            ('spam', (None, None, 'spam')),
+            (('spam',), (None, None, 'spam')),
+            (('x/y/z/spam.c', 'spam'), ('x/y/z/spam.c', None, 'spam')),
+            (self.VALID_ARGS, self.VALID_EXPECTED),
+            (self.VALID_KWARGS, self.VALID_EXPECTED),
+            ]
+        for raw, expected in tests:
+            with self.subTest(raw):
+                id = ID.from_raw(raw)
+
+                self.assertEqual(id, expected)
+
+    def test_minimal(self):
+        id = ID(
+                filename=None,
+                funcname=None,
+                name='eggs',
+                )
+
+        self.assertEqual(id, (
+                None,
+                None,
+                'eggs',
+                ))
+
+    def test_init_typical_global(self):
+        id = ID(
+                filename='x/y/z/spam.c',
+                funcname=None,
+                name='eggs',
+                )
+
+        self.assertEqual(id, (
+                'x/y/z/spam.c',
+                None,
+                'eggs',
+                ))
+
+    def test_init_typical_local(self):
+        id = ID(
+                filename='x/y/z/spam.c',
+                funcname='func',
+                name='eggs',
+                )
+
+        self.assertEqual(id, (
+                'x/y/z/spam.c',
+                'func',
+                'eggs',
+                ))
+
+    def test_init_all_missing(self):
+        for value in ('', None):
+            with self.subTest(repr(value)):
+                id = ID(
+                        filename=value,
+                        funcname=value,
+                        name=value,
+                        )
+
+                self.assertEqual(id, (
+                        None,
+                        None,
+                        None,
+                        ))
+
+    def test_init_all_coerced(self):
+        tests = [
+            ('str subclass',
+             dict(
+                 filename=PseudoStr('x/y/z/spam.c'),
+                 funcname=PseudoStr('func'),
+                 name=PseudoStr('eggs'),
+                 ),
+             ('x/y/z/spam.c',
+              'func',
+              'eggs',
+              )),
+            ('non-str',
+             dict(
+                 filename=StrProxy('x/y/z/spam.c'),
+                 funcname=Object(),
+                 name=('a', 'b', 'c'),
+                 ),
+             ('x/y/z/spam.c',
+              '<object>',
+              "('a', 'b', 'c')",
+              )),
+            ]
+        for summary, kwargs, expected in tests:
+            with self.subTest(summary):
+                id = ID(**kwargs)
+
+                for field in ID._fields:
+                    value = getattr(id, field)
+                    self.assertIs(type(value), str)
+                self.assertEqual(tuple(id), expected)
+
+    def test_iterable(self):
+        id = ID(**self.VALID_KWARGS)
+
+        filename, funcname, name = id
+
+        values = (filename, funcname, name)
+        for value, expected in zip(values, self.VALID_EXPECTED):
+            self.assertEqual(value, expected)
+
+    def test_fields(self):
+        id = ID('a', 'b', 'z')
+
+        self.assertEqual(id.filename, 'a')
+        self.assertEqual(id.funcname, 'b')
+        self.assertEqual(id.name, 'z')
+
+    def test_validate_typical(self):
+        id = ID(
+                filename='x/y/z/spam.c',
+                funcname='func',
+                name='eggs',
+                )
+
+        id.validate()  # This does not fail.
+
+    def test_validate_missing_field(self):
+        for field in ID._fields:
+            with self.subTest(field):
+                id = ID(**self.VALID_KWARGS)
+                id = id._replace(**{field: None})
+
+                if field == 'funcname':
+                    id.validate()  # The field can be missing (not set).
+                    id = id._replace(filename=None)
+                    id.validate()  # Both fields can be missing (not set).
+                    continue
+
+                with self.assertRaises(TypeError):
+                    id.validate()
+
+    def test_validate_bad_field(self):
+        badch = tuple(c for c in string.punctuation + string.digits)
+        notnames = (
+                '1a',
+                'a.b',
+                'a-b',
+                '&a',
+                'a++',
+                ) + badch
+        tests = [
+            ('filename', ()),  # Any non-empty str is okay.
+            ('funcname', notnames),
+            ('name', notnames),
+            ]
+        seen = set()
+        for field, invalid in tests:
+            for value in invalid:
+                seen.add(value)
+                with self.subTest(f'{field}={value!r}'):
+                    id = ID(**self.VALID_KWARGS)
+                    id = id._replace(**{field: value})
+
+                    with self.assertRaises(ValueError):
+                        id.validate()
+
+        for field, invalid in tests:
+            valid = seen - set(invalid)
+            for value in valid:
+                with self.subTest(f'{field}={value!r}'):
+                    id = ID(**self.VALID_KWARGS)
+                    id = id._replace(**{field: value})
+
+                    id.validate()  # This does not fail.
diff --git a/Lib/test/test_tools/test_c_analyzer/test_common/test_show.py b/Lib/test/test_tools/test_c_analyzer/test_common/test_show.py
new file mode 100644
index 0000000..91ca2f3
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_common/test_show.py
@@ -0,0 +1,54 @@
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.variables import info
+    from c_analyzer.common.show import (
+            basic,
+            )
+
+
+TYPICAL = [
+        info.Variable.from_parts('src1/spam.c', None, 'var1', 'static const char *'),
+        info.Variable.from_parts('src1/spam.c', 'ham', 'initialized', 'static int'),
+        info.Variable.from_parts('src1/spam.c', None, 'var2', 'static PyObject *'),
+        info.Variable.from_parts('src1/eggs.c', 'tofu', 'ready', 'static int'),
+        info.Variable.from_parts('src1/spam.c', None, 'freelist', 'static (PyTupleObject *)[10]'),
+        info.Variable.from_parts('src1/sub/ham.c', None, 'var1', 'static const char const *'),
+        info.Variable.from_parts('src2/jam.c', None, 'var1', 'static int'),
+        info.Variable.from_parts('src2/jam.c', None, 'var2', 'static MyObject *'),
+        info.Variable.from_parts('Include/spam.h', None, 'data', 'static const int'),
+        ]
+
+
+class BasicTests(unittest.TestCase):
+
+    maxDiff = None
+
+    def setUp(self):
+        self.lines = []
+
+    def print(self, line):
+        self.lines.append(line)
+
+    def test_typical(self):
+        basic(TYPICAL,
+              _print=self.print)
+
+        self.assertEqual(self.lines, [
+            'src1/spam.c:var1                                                 static const char *',
+            'src1/spam.c:ham():initialized                                    static int',
+            'src1/spam.c:var2                                                 static PyObject *',
+            'src1/eggs.c:tofu():ready                                         static int',
+            'src1/spam.c:freelist                                             static (PyTupleObject *)[10]',
+            'src1/sub/ham.c:var1                                              static const char const *',
+            'src2/jam.c:var1                                                  static int',
+            'src2/jam.c:var2                                                  static MyObject *',
+            'Include/spam.h:data                                              static const int',
+            ])
+
+    def test_no_rows(self):
+        basic([],
+              _print=self.print)
+
+        self.assertEqual(self.lines, [])
diff --git a/Lib/test/test_tools/test_c_analyzer/test_cpython/__init__.py b/Lib/test/test_tools/test_c_analyzer/test_cpython/__init__.py
new file mode 100644
index 0000000..bc502ef
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_cpython/__init__.py
@@ -0,0 +1,6 @@
+import os.path
+from test.support import load_package_tests
+
+
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_tools/test_c_analyzer/test_cpython/test___main__.py b/Lib/test/test_tools/test_c_analyzer/test_cpython/test___main__.py
new file mode 100644
index 0000000..6d69ed7
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_cpython/test___main__.py
@@ -0,0 +1,296 @@
+import sys
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.variables import info
+    from cpython import SOURCE_DIRS
+    from cpython.supported import IGNORED_FILE
+    from cpython.known import DATA_FILE as KNOWN_FILE
+    from cpython.__main__ import (
+            cmd_check, cmd_show, parse_args, main,
+            )
+
+
+TYPICAL = [
+        (info.Variable.from_parts('src1/spam.c', None, 'var1', 'const char *'),
+         True,
+         ),
+        (info.Variable.from_parts('src1/spam.c', 'ham', 'initialized', 'int'),
+         True,
+         ),
+        (info.Variable.from_parts('src1/spam.c', None, 'var2', 'PyObject *'),
+         False,
+         ),
+        (info.Variable.from_parts('src1/eggs.c', 'tofu', 'ready', 'int'),
+         True,
+         ),
+        (info.Variable.from_parts('src1/spam.c', None, 'freelist', '(PyTupleObject *)[10]'),
+         False,
+         ),
+        (info.Variable.from_parts('src1/sub/ham.c', None, 'var1', 'const char const *'),
+         True,
+         ),
+        (info.Variable.from_parts('src2/jam.c', None, 'var1', 'int'),
+         True,
+         ),
+        (info.Variable.from_parts('src2/jam.c', None, 'var2', 'MyObject *'),
+         False,
+         ),
+        (info.Variable.from_parts('Include/spam.h', None, 'data', 'const int'),
+         True,
+         ),
+        ]
+
+
+class CMDBase(unittest.TestCase):
+
+    maxDiff = None
+
+#    _return_known_from_file = None
+#    _return_ignored_from_file = None
+    _return_find = ()
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+#    def _known_from_file(self, *args):
+#        self.calls.append(('_known_from_file', args))
+#        return self._return_known_from_file or {}
+#
+#    def _ignored_from_file(self, *args):
+#        self.calls.append(('_ignored_from_file', args))
+#        return self._return_ignored_from_file or {}
+
+    def _find(self, known, ignored, skip_objects=False):
+        self.calls.append(('_find', (known, ignored, skip_objects)))
+        return self._return_find
+
+    def _show(self, *args):
+        self.calls.append(('_show', args))
+
+    def _print(self, *args):
+        self.calls.append(('_print', args))
+
+
+class CheckTests(CMDBase):
+
+    def test_defaults(self):
+        self._return_find = []
+
+        cmd_check('check',
+                  _find=self._find,
+                  _show=self._show,
+                  _print=self._print,
+                  )
+
+        self.assertEqual(
+                self.calls[0],
+                ('_find', (KNOWN_FILE, IGNORED_FILE, False)),
+                )
+
+    def test_all_supported(self):
+        self._return_find = [(v, s) for v, s in TYPICAL if s]
+        dirs = ['src1', 'src2', 'Include']
+
+        cmd_check('check',
+                  known='known.tsv',
+                  ignored='ignored.tsv',
+                  _find=self._find,
+                  _show=self._show,
+                  _print=self._print,
+                  )
+
+        self.assertEqual(self.calls, [
+            ('_find', ('known.tsv', 'ignored.tsv', False)),
+            #('_print', ('okay',)),
+            ])
+
+    def test_some_unsupported(self):
+        self._return_find = TYPICAL
+
+        with self.assertRaises(SystemExit) as cm:
+            cmd_check('check',
+                      known='known.tsv',
+                      ignored='ignored.tsv',
+                      _find=self._find,
+                      _show=self._show,
+                      _print=self._print,
+                      )
+
+        unsupported = [v for v, s in TYPICAL if not s]
+        self.assertEqual(self.calls, [
+            ('_find', ('known.tsv', 'ignored.tsv', False)),
+            ('_print', ('ERROR: found unsupported global variables',)),
+            ('_print', ()),
+            ('_show', (sorted(unsupported),)),
+            ('_print', (' (3 total)',)),
+            ])
+        self.assertEqual(cm.exception.code, 1)
+
+
+class ShowTests(CMDBase):
+
+    def test_defaults(self):
+        self._return_find = []
+
+        cmd_show('show',
+                 _find=self._find,
+                 _show=self._show,
+                 _print=self._print,
+                 )
+
+        self.assertEqual(
+                self.calls[0],
+                ('_find', (KNOWN_FILE, IGNORED_FILE, False)),
+                )
+
+    def test_typical(self):
+        self._return_find = TYPICAL
+
+        cmd_show('show',
+                 known='known.tsv',
+                 ignored='ignored.tsv',
+                 _find=self._find,
+                 _show=self._show,
+                 _print=self._print,
+                 )
+
+        supported = [v for v, s in TYPICAL if s]
+        unsupported = [v for v, s in TYPICAL if not s]
+        self.assertEqual(self.calls, [
+            ('_find', ('known.tsv', 'ignored.tsv', False)),
+            ('_print', ('supported:',)),
+            ('_print', ('----------',)),
+            ('_show', (sorted(supported),)),
+            ('_print', (' (6 total)',)),
+            ('_print', ()),
+            ('_print', ('unsupported:',)),
+            ('_print', ('------------',)),
+            ('_show', (sorted(unsupported),)),
+            ('_print', (' (3 total)',)),
+            ])
+
+
+class ParseArgsTests(unittest.TestCase):
+
+    maxDiff = None
+
+    def test_no_args(self):
+        self.errmsg = None
+        def fail(msg):
+            self.errmsg = msg
+            sys.exit(msg)
+
+        with self.assertRaises(SystemExit):
+            parse_args('cg', [], _fail=fail)
+
+        self.assertEqual(self.errmsg, 'missing command')
+
+    def test_check_no_args(self):
+        cmd, cmdkwargs = parse_args('cg', [
+            'check',
+            ])
+
+        self.assertEqual(cmd, 'check')
+        self.assertEqual(cmdkwargs, {
+            'ignored': IGNORED_FILE,
+            'known': KNOWN_FILE,
+            #'dirs': SOURCE_DIRS,
+            })
+
+    def test_check_full_args(self):
+        cmd, cmdkwargs = parse_args('cg', [
+            'check',
+            '--ignored', 'spam.tsv',
+            '--known', 'eggs.tsv',
+            #'dir1',
+            #'dir2',
+            #'dir3',
+            ])
+
+        self.assertEqual(cmd, 'check')
+        self.assertEqual(cmdkwargs, {
+            'ignored': 'spam.tsv',
+            'known': 'eggs.tsv',
+            #'dirs': ['dir1', 'dir2', 'dir3']
+            })
+
+    def test_show_no_args(self):
+        cmd, cmdkwargs = parse_args('cg', [
+            'show',
+            ])
+
+        self.assertEqual(cmd, 'show')
+        self.assertEqual(cmdkwargs, {
+            'ignored': IGNORED_FILE,
+            'known': KNOWN_FILE,
+            #'dirs': SOURCE_DIRS,
+            'skip_objects': False,
+            })
+
+    def test_show_full_args(self):
+        cmd, cmdkwargs = parse_args('cg', [
+            'show',
+            '--ignored', 'spam.tsv',
+            '--known', 'eggs.tsv',
+            #'dir1',
+            #'dir2',
+            #'dir3',
+            ])
+
+        self.assertEqual(cmd, 'show')
+        self.assertEqual(cmdkwargs, {
+            'ignored': 'spam.tsv',
+            'known': 'eggs.tsv',
+            #'dirs': ['dir1', 'dir2', 'dir3'],
+            'skip_objects': False,
+            })
+
+
+def new_stub_commands(*names):
+    calls = []
+    def cmdfunc(cmd, **kwargs):
+        calls.append((cmd, kwargs))
+    commands = {name: cmdfunc for name in names}
+    return commands, calls
+
+
+class MainTests(unittest.TestCase):
+
+    def test_no_command(self):
+        with self.assertRaises(ValueError):
+            main(None, {})
+
+    def test_check(self):
+        commands, calls = new_stub_commands('check', 'show')
+
+        cmdkwargs = {
+            'ignored': 'spam.tsv',
+            'known': 'eggs.tsv',
+            'dirs': ['dir1', 'dir2', 'dir3'],
+            }
+        main('check', cmdkwargs, _COMMANDS=commands)
+
+        self.assertEqual(calls, [
+            ('check', cmdkwargs),
+            ])
+
+    def test_show(self):
+        commands, calls = new_stub_commands('check', 'show')
+
+        cmdkwargs = {
+            'ignored': 'spam.tsv',
+            'known': 'eggs.tsv',
+            'dirs': ['dir1', 'dir2', 'dir3'],
+            }
+        main('show', cmdkwargs, _COMMANDS=commands)
+
+        self.assertEqual(calls, [
+            ('show', cmdkwargs),
+            ])
diff --git a/Lib/test/test_tools/test_c_analyzer/test_cpython/test_functional.py b/Lib/test/test_tools/test_c_analyzer/test_cpython/test_functional.py
new file mode 100644
index 0000000..9279790
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_cpython/test_functional.py
@@ -0,0 +1,34 @@
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    pass
+
+
+class SelfCheckTests(unittest.TestCase):
+
+    @unittest.expectedFailure
+    def test_known(self):
+        # Make sure known macros & vartypes aren't hiding unknown local types.
+        # XXX finish!
+        raise NotImplementedError
+
+    @unittest.expectedFailure
+    def test_compare_nm_results(self):
+        # Make sure the "show" results match the statics found by "nm" command.
+        # XXX Skip if "nm" is not available.
+        # XXX finish!
+        raise NotImplementedError
+
+
+class DummySourceTests(unittest.TestCase):
+
+    @unittest.expectedFailure
+    def test_check(self):
+        # XXX finish!
+        raise NotImplementedError
+
+    @unittest.expectedFailure
+    def test_show(self):
+        # XXX finish!
+        raise NotImplementedError
diff --git a/Lib/test/test_tools/test_c_analyzer/test_cpython/test_supported.py b/Lib/test/test_tools/test_c_analyzer/test_cpython/test_supported.py
new file mode 100644
index 0000000..a244b97
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_cpython/test_supported.py
@@ -0,0 +1,98 @@
+import re
+import textwrap
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.common.info import ID
+    from c_analyzer.variables.info import Variable
+    from cpython.supported import (
+            is_supported, ignored_from_file,
+            )
+
+
+class IsSupportedTests(unittest.TestCase):
+
+    @unittest.expectedFailure
+    def test_supported(self):
+        statics = [
+                Variable('src1/spam.c', None, 'var1', 'const char *'),
+                Variable('src1/spam.c', None, 'var1', 'int'),
+                ]
+        for static in statics:
+            with self.subTest(static):
+                result = is_supported(static)
+
+                self.assertTrue(result)
+
+    @unittest.expectedFailure
+    def test_not_supported(self):
+        statics = [
+                Variable('src1/spam.c', None, 'var1', 'PyObject *'),
+                Variable('src1/spam.c', None, 'var1', 'PyObject[10]'),
+                ]
+        for static in statics:
+            with self.subTest(static):
+                result = is_supported(static)
+
+                self.assertFalse(result)
+
+
+class IgnoredFromFileTests(unittest.TestCase):
+
+    maxDiff = None
+
+    _return_read_tsv = ()
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+    def _read_tsv(self, *args):
+        self.calls.append(('_read_tsv', args))
+        return self._return_read_tsv
+
+    def test_typical(self):
+        lines = textwrap.dedent('''
+            filename    funcname        name    kind    reason
+            file1.c     -       var1    variable        ...
+            file1.c     func1   local1  variable        |
+            file1.c     -       var2    variable        ???
+            file1.c     func2   local2  variable           |
+            file2.c     -       var1    variable        reasons
+            ''').strip().splitlines()
+        lines = [re.sub(r'\s{1,8}', '\t', line, 4).replace('|', '')
+                 for line in lines]
+        self._return_read_tsv = [tuple(v.strip() for v in line.split('\t'))
+                                 for line in lines[1:]]
+
+        ignored = ignored_from_file('spam.c', _read_tsv=self._read_tsv)
+
+        self.assertEqual(ignored, {
+            'variables': {
+                ID('file1.c', '', 'var1'): '...',
+                ID('file1.c', 'func1', 'local1'): '',
+                ID('file1.c', '', 'var2'): '???',
+                ID('file1.c', 'func2', 'local2'): '',
+                ID('file2.c', '', 'var1'): 'reasons',
+                },
+            })
+        self.assertEqual(self.calls, [
+            ('_read_tsv', ('spam.c', 'filename\tfuncname\tname\tkind\treason')),
+            ])
+
+    def test_empty(self):
+        self._return_read_tsv = []
+
+        ignored = ignored_from_file('spam.c', _read_tsv=self._read_tsv)
+
+        self.assertEqual(ignored, {
+            'variables': {},
+            })
+        self.assertEqual(self.calls, [
+            ('_read_tsv', ('spam.c', 'filename\tfuncname\tname\tkind\treason')),
+            ])
diff --git a/Lib/test/test_tools/test_c_analyzer/test_parser/__init__.py b/Lib/test/test_tools/test_c_analyzer/test_parser/__init__.py
new file mode 100644
index 0000000..bc502ef
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_parser/__init__.py
@@ -0,0 +1,6 @@
+import os.path
+from test.support import load_package_tests
+
+
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_tools/test_c_analyzer/test_parser/test_declarations.py b/Lib/test/test_tools/test_c_analyzer/test_parser/test_declarations.py
new file mode 100644
index 0000000..674fcb1
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_parser/test_declarations.py
@@ -0,0 +1,795 @@
+import textwrap
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.parser.declarations import (
+        iter_global_declarations, iter_local_statements,
+        parse_func, _parse_var, parse_compound,
+        iter_variables,
+        )
+
+
+class TestCaseBase(unittest.TestCase):
+
+    maxDiff = None
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+
+class IterGlobalDeclarationsTests(TestCaseBase):
+
+    def test_functions(self):
+        tests = [
+            (textwrap.dedent('''
+                void func1() {
+                    return;
+                }
+                '''),
+             textwrap.dedent('''
+                void func1() {
+                return;
+                }
+                ''').strip(),
+             ),
+            (textwrap.dedent('''
+                static unsigned int * _func1(
+                    const char *arg1,
+                    int *arg2
+                    long long arg3
+                    )
+                {
+                    return _do_something(arg1, arg2, arg3);
+                }
+                '''),
+             textwrap.dedent('''
+                static unsigned int * _func1( const char *arg1, int *arg2 long long arg3 ) {
+                return _do_something(arg1, arg2, arg3);
+                }
+                ''').strip(),
+             ),
+            (textwrap.dedent('''
+                static PyObject *
+                _func1(const char *arg1, PyObject *arg2)
+                {
+                    static int initialized = 0;
+                    if (!initialized) {
+                        initialized = 1;
+                        _init(arg1);
+                    }
+
+                    PyObject *result = _do_something(arg1, arg2);
+                    Py_INCREF(result);
+                    return result;
+                }
+                '''),
+             textwrap.dedent('''
+                static PyObject * _func1(const char *arg1, PyObject *arg2) {
+                static int initialized = 0;
+                if (!initialized) {
+                initialized = 1;
+                _init(arg1);
+                }
+                PyObject *result = _do_something(arg1, arg2);
+                Py_INCREF(result);
+                return result;
+                }
+                ''').strip(),
+             ),
+            ]
+        for lines, expected in tests:
+            body = textwrap.dedent(
+                    expected.partition('{')[2].rpartition('}')[0]
+                    ).strip()
+            expected = (expected, body)
+            with self.subTest(lines):
+                lines = lines.splitlines()
+
+                stmts = list(iter_global_declarations(lines))
+
+                self.assertEqual(stmts, [expected])
+
+    @unittest.expectedFailure
+    def test_declarations(self):
+        tests = [
+            'int spam;',
+            'long long spam;',
+            'static const int const *spam;',
+            'int spam;',
+            'typedef int myint;',
+            'typedef PyObject * (*unaryfunc)(PyObject *);',
+            # typedef struct
+            # inline struct
+            # enum
+            # inline enum
+            ]
+        for text in tests:
+            expected = (text,
+                        ' '.join(l.strip() for l in text.splitlines()))
+            with self.subTest(lines):
+                lines = lines.splitlines()
+
+                stmts = list(iter_global_declarations(lines))
+
+                self.assertEqual(stmts, [expected])
+
+    @unittest.expectedFailure
+    def test_declaration_multiple_vars(self):
+        lines = ['static const int const *spam, *ham=NULL, eggs = 3;']
+
+        stmts = list(iter_global_declarations(lines))
+
+        self.assertEqual(stmts, [
+            ('static const int const *spam;', None),
+            ('static const int *ham=NULL;', None),
+            ('static const int eggs = 3;', None),
+            ])
+
+    def test_mixed(self):
+        lines = textwrap.dedent('''
+           int spam;
+           static const char const *eggs;
+
+           PyObject * start(void) {
+               static int initialized = 0;
+               if (initialized) {
+                   initialized = 1;
+                   init();
+               }
+               return _start();
+           }
+
+           char* ham;
+
+           static int stop(char *reason) {
+               ham = reason;
+               return _stop();
+           }
+           ''').splitlines()
+        expected = [
+            (textwrap.dedent('''
+                PyObject * start(void) {
+                static int initialized = 0;
+                if (initialized) {
+                initialized = 1;
+                init();
+                }
+                return _start();
+                }
+                ''').strip(),
+             textwrap.dedent('''
+                static int initialized = 0;
+                if (initialized) {
+                initialized = 1;
+                init();
+                }
+                return _start();
+                ''').strip(),
+             ),
+            (textwrap.dedent('''
+                static int stop(char *reason) {
+                ham = reason;
+                return _stop();
+                }
+                ''').strip(),
+             textwrap.dedent('''
+                ham = reason;
+                return _stop();
+                ''').strip(),
+             ),
+            ]
+
+        stmts = list(iter_global_declarations(lines))
+
+        self.assertEqual(stmts, expected)
+        #self.assertEqual([stmt for stmt, _ in stmts],
+        #                 [stmt for stmt, _ in expected])
+        #self.assertEqual([body for _, body in stmts],
+        #                 [body for _, body in expected])
+
+    def test_no_statements(self):
+        lines = []
+
+        stmts = list(iter_global_declarations(lines))
+
+        self.assertEqual(stmts, [])
+
+    def test_bogus(self):
+        tests = [
+                (textwrap.dedent('''
+                    int spam;
+                    static const char const *eggs;
+
+                    PyObject * start(void) {
+                        static int initialized = 0;
+                        if (initialized) {
+                            initialized = 1;
+                            init();
+                        }
+                        return _start();
+                    }
+
+                    char* ham;
+
+                    static int _stop(void) {
+                    // missing closing bracket
+
+                    static int stop(char *reason) {
+                        ham = reason;
+                        return _stop();
+                    }
+                    '''),
+                 [(textwrap.dedent('''
+                    PyObject * start(void) {
+                    static int initialized = 0;
+                    if (initialized) {
+                    initialized = 1;
+                    init();
+                    }
+                    return _start();
+                    }
+                    ''').strip(),
+                   textwrap.dedent('''
+                    static int initialized = 0;
+                    if (initialized) {
+                    initialized = 1;
+                    init();
+                    }
+                    return _start();
+                    ''').strip(),
+                   ),
+                   # Neither "stop()" nor "_stop()" are here.
+                  ],
+                 ),
+                ]
+        for lines, expected in tests:
+            with self.subTest(lines):
+                lines = lines.splitlines()
+
+                stmts = list(iter_global_declarations(lines))
+
+                self.assertEqual(stmts, expected)
+                #self.assertEqual([stmt for stmt, _ in stmts],
+                #                 [stmt for stmt, _ in expected])
+                #self.assertEqual([body for _, body in stmts],
+                #                 [body for _, body in expected])
+
+    def test_ignore_comments(self):
+        tests = [
+            ('// msg', None),
+            ('// int stmt;', None),
+            ('    // ...    ', None),
+            ('// /*', None),
+            ('/* int stmt; */', None),
+            ("""
+             /**
+              * ...
+              * int stmt;
+              */
+             """, None),
+            ]
+        for lines, expected in tests:
+            with self.subTest(lines):
+                lines = lines.splitlines()
+
+                stmts = list(iter_global_declarations(lines))
+
+                self.assertEqual(stmts, [expected] if expected else [])
+
+
+class IterLocalStatementsTests(TestCaseBase):
+
+    def test_vars(self):
+        tests = [
+            # POTS
+            'int spam;',
+            'unsigned int spam;',
+            'char spam;',
+            'float spam;',
+
+            # typedefs
+            'uint spam;',
+            'MyType spam;',
+
+            # complex
+            'struct myspam spam;',
+            'union choice spam;',
+            # inline struct
+            # inline union
+            # enum?
+            ]
+        # pointers
+        tests.extend([
+            # POTS
+            'int * spam;',
+            'unsigned int * spam;',
+            'char *spam;',
+            'char const *spam = "spamspamspam...";',
+            # typedefs
+            'MyType *spam;',
+            # complex
+            'struct myspam *spam;',
+            'union choice *spam;',
+            # packed with details
+            'const char const *spam;',
+            # void pointer
+            'void *data = NULL;',
+            # function pointers
+            'int (* func)(char *arg1);',
+            'char * (* func)(void);',
+            ])
+        # storage class
+        tests.extend([
+            'static int spam;',
+            'extern int spam;',
+            'static unsigned int spam;',
+            'static struct myspam spam;',
+            ])
+        # type qualifier
+        tests.extend([
+            'const int spam;',
+            'const unsigned int spam;',
+            'const struct myspam spam;',
+            ])
+        # combined
+        tests.extend([
+            'const char *spam = eggs;',
+            'static const char const *spam = "spamspamspam...";',
+            'extern const char const *spam;',
+            'static void *data = NULL;',
+            'static int (const * func)(char *arg1) = func1;',
+            'static char * (* func)(void);',
+            ])
+        for line in tests:
+            expected = line
+            with self.subTest(line):
+                stmts = list(iter_local_statements([line]))
+
+                self.assertEqual(stmts, [(expected, None)])
+
+    @unittest.expectedFailure
+    def test_vars_multiline_var(self):
+        lines = textwrap.dedent('''
+            PyObject *
+            spam
+            = NULL;
+            ''').splitlines()
+        expected = 'PyObject * spam = NULL;'
+
+        stmts = list(iter_local_statements(lines))
+
+        self.assertEqual(stmts, [(expected, None)])
+
+    @unittest.expectedFailure
+    def test_declaration_multiple_vars(self):
+        lines = ['static const int const *spam, *ham=NULL, ham2[]={1, 2, 3}, ham3[2]={1, 2}, eggs = 3;']
+
+        stmts = list(iter_global_declarations(lines))
+
+        self.assertEqual(stmts, [
+            ('static const int const *spam;', None),
+            ('static const int *ham=NULL;', None),
+            ('static const int ham[]={1, 2, 3};', None),
+            ('static const int ham[2]={1, 2};', None),
+            ('static const int eggs = 3;', None),
+            ])
+
+    @unittest.expectedFailure
+    def test_other_simple(self):
+        raise NotImplementedError
+
+    @unittest.expectedFailure
+    def test_compound(self):
+        raise NotImplementedError
+
+    @unittest.expectedFailure
+    def test_mixed(self):
+        raise NotImplementedError
+
+    def test_no_statements(self):
+        lines = []
+
+        stmts = list(iter_local_statements(lines))
+
+        self.assertEqual(stmts, [])
+
+    @unittest.expectedFailure
+    def test_bogus(self):
+        raise NotImplementedError
+
+    def test_ignore_comments(self):
+        tests = [
+            ('// msg', None),
+            ('// int stmt;', None),
+            ('    // ...    ', None),
+            ('// /*', None),
+            ('/* int stmt; */', None),
+            ("""
+             /**
+              * ...
+              * int stmt;
+              */
+             """, None),
+            # mixed with statements
+            ('int stmt; // ...', ('int stmt;', None)),
+            ( 'int stmt; /* ...  */', ('int stmt;', None)),
+            ( '/* ...  */ int stmt;', ('int stmt;', None)),
+            ]
+        for lines, expected in tests:
+            with self.subTest(lines):
+                lines = lines.splitlines()
+
+                stmts = list(iter_local_statements(lines))
+
+                self.assertEqual(stmts, [expected] if expected else [])
+
+
+class ParseFuncTests(TestCaseBase):
+
+    def test_typical(self):
+        tests = [
+            ('PyObject *\nspam(char *a)\n{\nreturn _spam(a);\n}',
+             'return _spam(a);',
+             ('spam', 'PyObject * spam(char *a)'),
+             ),
+            ]
+        for stmt, body, expected in tests:
+            with self.subTest(stmt):
+                name, signature = parse_func(stmt, body)
+
+                self.assertEqual((name, signature), expected)
+
+
+class ParseVarTests(TestCaseBase):
+
+    def test_typical(self):
+        tests = [
+            # POTS
+            ('int spam;', ('spam', 'int')),
+            ('unsigned int spam;', ('spam', 'unsigned int')),
+            ('char spam;', ('spam', 'char')),
+            ('float spam;', ('spam', 'float')),
+
+            # typedefs
+            ('uint spam;', ('spam', 'uint')),
+            ('MyType spam;', ('spam', 'MyType')),
+
+            # complex
+            ('struct myspam spam;', ('spam', 'struct myspam')),
+            ('union choice spam;', ('spam', 'union choice')),
+            # inline struct
+            # inline union
+            # enum?
+            ]
+        # pointers
+        tests.extend([
+            # POTS
+            ('int * spam;', ('spam', 'int *')),
+            ('unsigned int * spam;', ('spam', 'unsigned int *')),
+            ('char *spam;', ('spam', 'char *')),
+            ('char const *spam = "spamspamspam...";', ('spam', 'char const *')),
+            # typedefs
+            ('MyType *spam;', ('spam', 'MyType *')),
+            # complex
+            ('struct myspam *spam;', ('spam', 'struct myspam *')),
+            ('union choice *spam;', ('spam', 'union choice *')),
+            # packed with details
+            ('const char const *spam;', ('spam', 'const char const *')),
+            # void pointer
+            ('void *data = NULL;', ('data', 'void *')),
+            # function pointers
+            ('int (* func)(char *);', ('func', 'int (*)(char *)')),
+            ('char * (* func)(void);', ('func', 'char * (*)(void)')),
+            ])
+        # storage class
+        tests.extend([
+            ('static int spam;', ('spam', 'static int')),
+            ('extern int spam;', ('spam', 'extern int')),
+            ('static unsigned int spam;', ('spam', 'static unsigned int')),
+            ('static struct myspam spam;', ('spam', 'static struct myspam')),
+            ])
+        # type qualifier
+        tests.extend([
+            ('const int spam;', ('spam', 'const int')),
+            ('const unsigned int spam;', ('spam', 'const unsigned int')),
+            ('const struct myspam spam;', ('spam', 'const struct myspam')),
+            ])
+        # combined
+        tests.extend([
+            ('const char *spam = eggs;', ('spam', 'const char *')),
+            ('static const char const *spam = "spamspamspam...";',
+             ('spam', 'static const char const *')),
+            ('extern const char const *spam;',
+             ('spam', 'extern const char const *')),
+            ('static void *data = NULL;', ('data', 'static void *')),
+            ('static int (const * func)(char *) = func1;',
+             ('func', 'static int (const *)(char *)')),
+            ('static char * (* func)(void);',
+             ('func', 'static char * (*)(void)')),
+            ])
+        for stmt, expected in tests:
+            with self.subTest(stmt):
+                name, vartype = _parse_var(stmt)
+
+                self.assertEqual((name, vartype), expected)
+
+
+@unittest.skip('not finished')
+class ParseCompoundTests(TestCaseBase):
+
+    def test_typical(self):
+        headers, bodies = parse_compound(stmt, blocks)
+        ...
+
+
+class IterVariablesTests(TestCaseBase):
+
+    _return_iter_source_lines = None
+    _return_iter_global = None
+    _return_iter_local = None
+    _return_parse_func = None
+    _return_parse_var = None
+    _return_parse_compound = None
+
+    def _iter_source_lines(self, filename):
+        self.calls.append(
+                ('_iter_source_lines', (filename,)))
+        return self._return_iter_source_lines.splitlines()
+
+    def _iter_global(self, lines):
+        self.calls.append(
+                ('_iter_global', (lines,)))
+        try:
+            return self._return_iter_global.pop(0)
+        except IndexError:
+            return ('???', None)
+
+    def _iter_local(self, lines):
+        self.calls.append(
+                ('_iter_local', (lines,)))
+        try:
+            return self._return_iter_local.pop(0)
+        except IndexError:
+            return ('???', None)
+
+    def _parse_func(self, stmt, body):
+        self.calls.append(
+                ('_parse_func', (stmt, body)))
+        try:
+            return self._return_parse_func.pop(0)
+        except IndexError:
+            return ('???', '???')
+
+    def _parse_var(self, lines):
+        self.calls.append(
+                ('_parse_var', (lines,)))
+        try:
+            return self._return_parse_var.pop(0)
+        except IndexError:
+            return ('???', '???')
+
+    def _parse_compound(self, stmt, blocks):
+        self.calls.append(
+                ('_parse_compound', (stmt, blocks)))
+        try:
+            return self._return_parse_compound.pop(0)
+        except IndexError:
+            return (['???'], ['???'])
+
+    def test_empty_file(self):
+        self._return_iter_source_lines = ''
+        self._return_iter_global = [
+            [],
+            ]
+        self._return_parse_func = None
+        self._return_parse_var = None
+        self._return_parse_compound = None
+
+        srcvars = list(iter_variables('spam.c',
+                                      _iter_source_lines=self._iter_source_lines,
+                                      _iter_global=self._iter_global,
+                                      _iter_local=self._iter_local,
+                                      _parse_func=self._parse_func,
+                                      _parse_var=self._parse_var,
+                                      _parse_compound=self._parse_compound,
+                                      ))
+
+        self.assertEqual(srcvars, [])
+        self.assertEqual(self.calls, [
+            ('_iter_source_lines', ('spam.c',)),
+            ('_iter_global', ([],)),
+            ])
+
+    def test_no_statements(self):
+        content = textwrap.dedent('''
+        ...
+        ''')
+        self._return_iter_source_lines = content
+        self._return_iter_global = [
+            [],
+            ]
+        self._return_parse_func = None
+        self._return_parse_var = None
+        self._return_parse_compound = None
+
+        srcvars = list(iter_variables('spam.c',
+                                      _iter_source_lines=self._iter_source_lines,
+                                      _iter_global=self._iter_global,
+                                      _iter_local=self._iter_local,
+                                      _parse_func=self._parse_func,
+                                      _parse_var=self._parse_var,
+                                      _parse_compound=self._parse_compound,
+                                      ))
+
+        self.assertEqual(srcvars, [])
+        self.assertEqual(self.calls, [
+            ('_iter_source_lines', ('spam.c',)),
+            ('_iter_global', (content.splitlines(),)),
+            ])
+
+    def test_typical(self):
+        content = textwrap.dedent('''
+        ...
+        ''')
+        self._return_iter_source_lines = content
+        self._return_iter_global = [
+            [('<lines 1>', None),  # var1
+             ('<lines 2>', None),  # non-var
+             ('<lines 3>', None),  # var2
+             ('<lines 4>', '<body 1>'),  # func1
+             ('<lines 9>', None),  # var4
+             ],
+            ]
+        self._return_iter_local = [
+            # func1
+            [('<lines 5>', None),  # var3
+             ('<lines 6>', [('<header 1>', '<block 1>')]),  # if
+             ('<lines 8>', None),  # non-var
+             ],
+            # if
+            [('<lines 7>', None),  # var2 ("collision" with global var)
+             ],
+            ]
+        self._return_parse_func = [
+            ('func1', '<sig 1>'),
+            ]
+        self._return_parse_var = [
+            ('var1', '<vartype 1>'),
+            (None, None),
+            ('var2', '<vartype 2>'),
+            ('var3', '<vartype 3>'),
+            ('var2', '<vartype 2b>'),
+            ('var4', '<vartype 4>'),
+            (None, None),
+            (None, None),
+            (None, None),
+            ('var5', '<vartype 5>'),
+            ]
+        self._return_parse_compound = [
+            ([[
+                'if (',
+                '<simple>',
+                ')',
+                ],
+              ],
+             ['<block 1>']),
+            ]
+
+        srcvars = list(iter_variables('spam.c',
+                                      _iter_source_lines=self._iter_source_lines,
+                                      _iter_global=self._iter_global,
+                                      _iter_local=self._iter_local,
+                                      _parse_func=self._parse_func,
+                                      _parse_var=self._parse_var,
+                                      _parse_compound=self._parse_compound,
+                                      ))
+
+        self.assertEqual(srcvars, [
+            (None, 'var1', '<vartype 1>'),
+            (None, 'var2', '<vartype 2>'),
+            ('func1', 'var3', '<vartype 3>'),
+            ('func1', 'var2', '<vartype 2b>'),
+            ('func1', 'var4', '<vartype 4>'),
+            (None, 'var5', '<vartype 5>'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_iter_source_lines', ('spam.c',)),
+            ('_iter_global', (content.splitlines(),)),
+            ('_parse_var', ('<lines 1>',)),
+            ('_parse_var', ('<lines 2>',)),
+            ('_parse_var', ('<lines 3>',)),
+            ('_parse_func', ('<lines 4>', '<body 1>')),
+            ('_iter_local', (['<body 1>'],)),
+            ('_parse_var', ('<lines 5>',)),
+            ('_parse_compound', ('<lines 6>', [('<header 1>', '<block 1>')])),
+            ('_parse_var', ('if (',)),
+            ('_parse_var', ('<simple>',)),
+            ('_parse_var', (')',)),
+            ('_parse_var', ('<lines 8>',)),
+            ('_iter_local', (['<block 1>'],)),
+            ('_parse_var', ('<lines 7>',)),
+            ('_parse_var', ('<lines 9>',)),
+            ])
+
+    def test_no_locals(self):
+        content = textwrap.dedent('''
+        ...
+        ''')
+        self._return_iter_source_lines = content
+        self._return_iter_global = [
+            [('<lines 1>', None),  # var1
+             ('<lines 2>', None),  # non-var
+             ('<lines 3>', None),  # var2
+             ('<lines 4>', '<body 1>'),  # func1
+             ],
+            ]
+        self._return_iter_local = [
+            # func1
+            [('<lines 5>', None),  # non-var
+             ('<lines 6>', [('<header 1>', '<block 1>')]),  # if
+             ('<lines 8>', None),  # non-var
+             ],
+            # if
+            [('<lines 7>', None),  # non-var
+             ],
+            ]
+        self._return_parse_func = [
+            ('func1', '<sig 1>'),
+            ]
+        self._return_parse_var = [
+            ('var1', '<vartype 1>'),
+            (None, None),
+            ('var2', '<vartype 2>'),
+            (None, None),
+            (None, None),
+            (None, None),
+            (None, None),
+            (None, None),
+            (None, None),
+            ]
+        self._return_parse_compound = [
+            ([[
+                'if (',
+                '<simple>',
+                ')',
+                ],
+              ],
+             ['<block 1>']),
+            ]
+
+        srcvars = list(iter_variables('spam.c',
+                                      _iter_source_lines=self._iter_source_lines,
+                                      _iter_global=self._iter_global,
+                                      _iter_local=self._iter_local,
+                                      _parse_func=self._parse_func,
+                                      _parse_var=self._parse_var,
+                                      _parse_compound=self._parse_compound,
+                                      ))
+
+        self.assertEqual(srcvars, [
+            (None, 'var1', '<vartype 1>'),
+            (None, 'var2', '<vartype 2>'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_iter_source_lines', ('spam.c',)),
+            ('_iter_global', (content.splitlines(),)),
+            ('_parse_var', ('<lines 1>',)),
+            ('_parse_var', ('<lines 2>',)),
+            ('_parse_var', ('<lines 3>',)),
+            ('_parse_func', ('<lines 4>', '<body 1>')),
+            ('_iter_local', (['<body 1>'],)),
+            ('_parse_var', ('<lines 5>',)),
+            ('_parse_compound', ('<lines 6>', [('<header 1>', '<block 1>')])),
+            ('_parse_var', ('if (',)),
+            ('_parse_var', ('<simple>',)),
+            ('_parse_var', (')',)),
+            ('_parse_var', ('<lines 8>',)),
+            ('_iter_local', (['<block 1>'],)),
+            ('_parse_var', ('<lines 7>',)),
+            ])
diff --git a/Lib/test/test_tools/test_c_analyzer/test_parser/test_preprocessor.py b/Lib/test/test_tools/test_c_analyzer/test_parser/test_preprocessor.py
new file mode 100644
index 0000000..b7f950f
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_parser/test_preprocessor.py
@@ -0,0 +1,1561 @@
+import textwrap
+import unittest
+import sys
+
+from ..util import wrapped_arg_combos, StrProxy
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.parser.preprocessor import (
+        iter_lines,
+        # directives
+        parse_directive, PreprocessorDirective,
+        Constant, Macro, IfDirective, Include, OtherDirective,
+        )
+
+
+class TestCaseBase(unittest.TestCase):
+
+    maxDiff = None
+
+    def reset(self):
+        self._calls = []
+        self.errors = None
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+    errors = None
+
+    def try_next_exc(self):
+        if not self.errors:
+            return
+        if exc := self.errors.pop(0):
+            raise exc
+
+    def check_calls(self, *expected):
+        self.assertEqual(self.calls, list(expected))
+        self.assertEqual(self.errors or [], [])
+
+
+class IterLinesTests(TestCaseBase):
+
+    parsed = None
+
+    def check_calls(self, *expected):
+        super().check_calls(*expected)
+        self.assertEqual(self.parsed or [], [])
+
+    def _parse_directive(self, line):
+        self.calls.append(
+                ('_parse_directive', line))
+        self.try_next_exc()
+        return self.parsed.pop(0)
+
+    def test_no_lines(self):
+        lines = []
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [])
+        self.check_calls()
+
+    def test_no_directives(self):
+        lines = textwrap.dedent('''
+
+            // xyz
+            typedef enum {
+                SPAM
+                EGGS
+            } kind;
+
+            struct info {
+                kind kind;
+                int status;
+            };
+
+            typedef struct spam {
+                struct info info;
+            } myspam;
+
+            static int spam = 0;
+
+            /**
+             * ...
+             */
+            static char *
+            get_name(int arg,
+                     char *default,
+                     )
+            {
+                return default
+            }
+
+            int check(void) {
+                return 0;
+            }
+
+            ''')[1:-1].splitlines()
+        expected = [(lno, line, None, ())
+                    for lno, line in enumerate(lines, 1)]
+        expected[1] = (2, ' ', None, ())
+        expected[20] = (21, ' ', None, ())
+        del expected[19]
+        del expected[18]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, expected)
+        self.check_calls()
+
+    def test_single_directives(self):
+        tests = [
+            ('#include <stdio>', Include('<stdio>')),
+            ('#define SPAM 1', Constant('SPAM', '1')),
+            ('#define SPAM() 1', Macro('SPAM', (), '1')),
+            ('#define SPAM(a, b) a = b;', Macro('SPAM', ('a', 'b'), 'a = b;')),
+            ('#if defined(SPAM)', IfDirective('if', 'defined(SPAM)')),
+            ('#ifdef SPAM', IfDirective('ifdef', 'SPAM')),
+            ('#ifndef SPAM', IfDirective('ifndef', 'SPAM')),
+            ('#elseif defined(SPAM)', IfDirective('elseif', 'defined(SPAM)')),
+            ('#else', OtherDirective('else', None)),
+            ('#endif', OtherDirective('endif', None)),
+            ('#error ...', OtherDirective('error', '...')),
+            ('#warning ...', OtherDirective('warning', '...')),
+            ('#__FILE__ ...', OtherDirective('__FILE__', '...')),
+            ('#__LINE__ ...', OtherDirective('__LINE__', '...')),
+            ('#__DATE__ ...', OtherDirective('__DATE__', '...')),
+            ('#__TIME__ ...', OtherDirective('__TIME__', '...')),
+            ('#__TIMESTAMP__ ...', OtherDirective('__TIMESTAMP__', '...')),
+            ]
+        for line, directive in tests:
+            with self.subTest(line):
+                self.reset()
+                self.parsed = [
+                    directive,
+                    ]
+                text = textwrap.dedent('''
+                    static int spam = 0;
+                    {}
+                    static char buffer[256];
+                    ''').strip().format(line)
+                lines = text.strip().splitlines()
+
+                results = list(
+                        iter_lines(lines, _parse_directive=self._parse_directive))
+
+                self.assertEqual(results, [
+                    (1, 'static int spam = 0;', None, ()),
+                    (2, line, directive, ()),
+                    ((3, 'static char buffer[256];', None, ('defined(SPAM)',))
+                     if directive.kind in ('if', 'ifdef', 'elseif')
+                     else (3, 'static char buffer[256];', None, ('! defined(SPAM)',))
+                     if directive.kind == 'ifndef'
+                     else (3, 'static char buffer[256];', None, ())),
+                    ])
+                self.check_calls(
+                        ('_parse_directive', line),
+                        )
+
+    def test_directive_whitespace(self):
+        line = ' # define  eggs  (  a  ,  b  )  {  a  =  b  ;  }  '
+        directive = Macro('eggs', ('a', 'b'), '{ a = b; }')
+        self.parsed = [
+            directive,
+            ]
+        lines = [line]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [
+            (1, line, directive, ()),
+            ])
+        self.check_calls(
+                ('_parse_directive', '#define eggs ( a , b ) { a = b ; }'),
+                )
+
+    @unittest.skipIf(sys.platform == 'win32', 'needs fix under Windows')
+    def test_split_lines(self):
+        directive = Macro('eggs', ('a', 'b'), '{ a = b; }')
+        self.parsed = [
+            directive,
+            ]
+        text = textwrap.dedent(r'''
+            static int spam = 0;
+            #define eggs(a, b) \
+                { \
+                    a = b; \
+                }
+            static char buffer[256];
+            ''').strip()
+        lines = [line + '\n' for line in text.splitlines()]
+        lines[-1] = lines[-1][:-1]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [
+            (1, 'static int spam = 0;\n', None, ()),
+            (5, '#define eggs(a, b)      {          a = b;      }\n', directive, ()),
+            (6, 'static char buffer[256];', None, ()),
+            ])
+        self.check_calls(
+                ('_parse_directive', '#define eggs(a, b) { a = b; }'),
+                )
+
+    def test_nested_conditions(self):
+        directives = [
+            IfDirective('ifdef', 'SPAM'),
+            IfDirective('if', 'SPAM == 1'),
+            IfDirective('elseif', 'SPAM == 2'),
+            OtherDirective('else', None),
+            OtherDirective('endif', None),
+            OtherDirective('endif', None),
+            ]
+        self.parsed = list(directives)
+        text = textwrap.dedent(r'''
+            static int spam = 0;
+
+            #ifdef SPAM
+            static int start = 0;
+            #  if SPAM == 1
+            static char buffer[10];
+            #  elif SPAM == 2
+            static char buffer[100];
+            #  else
+            static char buffer[256];
+            #  endif
+            static int end = 0;
+            #endif
+
+            static int eggs = 0;
+            ''').strip()
+        lines = [line for line in text.splitlines() if line.strip()]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [
+            (1, 'static int spam = 0;', None, ()),
+            (2, '#ifdef SPAM', directives[0], ()),
+            (3, 'static int start = 0;', None, ('defined(SPAM)',)),
+            (4, '#  if SPAM == 1', directives[1], ('defined(SPAM)',)),
+            (5, 'static char buffer[10];', None, ('defined(SPAM)', 'SPAM == 1')),
+            (6, '#  elif SPAM == 2', directives[2], ('defined(SPAM)', 'SPAM == 1')),
+            (7, 'static char buffer[100];', None, ('defined(SPAM)', '! (SPAM == 1)', 'SPAM == 2')),
+            (8, '#  else', directives[3], ('defined(SPAM)', '! (SPAM == 1)', 'SPAM == 2')),
+            (9, 'static char buffer[256];', None, ('defined(SPAM)', '! (SPAM == 1)', '! (SPAM == 2)')),
+            (10, '#  endif', directives[4], ('defined(SPAM)', '! (SPAM == 1)', '! (SPAM == 2)')),
+            (11, 'static int end = 0;', None, ('defined(SPAM)',)),
+            (12, '#endif', directives[5], ('defined(SPAM)',)),
+            (13, 'static int eggs = 0;', None, ()),
+            ])
+        self.check_calls(
+                ('_parse_directive', '#ifdef SPAM'),
+                ('_parse_directive', '#if SPAM == 1'),
+                ('_parse_directive', '#elif SPAM == 2'),
+                ('_parse_directive', '#else'),
+                ('_parse_directive', '#endif'),
+                ('_parse_directive', '#endif'),
+                )
+
+    def test_split_blocks(self):
+        directives = [
+            IfDirective('ifdef', 'SPAM'),
+            OtherDirective('else', None),
+            OtherDirective('endif', None),
+            ]
+        self.parsed = list(directives)
+        text = textwrap.dedent(r'''
+            void str_copy(char *buffer, *orig);
+
+            int init(char *name) {
+                static int initialized = 0;
+                if (initialized) {
+                    return 0;
+                }
+            #ifdef SPAM
+                static char buffer[10];
+                str_copy(buffer, char);
+            }
+
+            void copy(char *buffer, *orig) {
+                strncpy(buffer, orig, 9);
+                buffer[9] = 0;
+            }
+
+            #else
+                static char buffer[256];
+                str_copy(buffer, char);
+            }
+
+            void copy(char *buffer, *orig) {
+                strcpy(buffer, orig);
+            }
+
+            #endif
+            ''').strip()
+        lines = [line for line in text.splitlines() if line.strip()]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [
+            (1, 'void str_copy(char *buffer, *orig);', None, ()),
+            (2, 'int init(char *name) {', None, ()),
+            (3, '    static int initialized = 0;', None, ()),
+            (4, '    if (initialized) {', None, ()),
+            (5, '        return 0;', None, ()),
+            (6, '    }', None, ()),
+
+            (7, '#ifdef SPAM', directives[0], ()),
+
+            (8, '    static char buffer[10];', None, ('defined(SPAM)',)),
+            (9, '    str_copy(buffer, char);', None, ('defined(SPAM)',)),
+            (10, '}', None, ('defined(SPAM)',)),
+            (11, 'void copy(char *buffer, *orig) {', None, ('defined(SPAM)',)),
+            (12, '    strncpy(buffer, orig, 9);', None, ('defined(SPAM)',)),
+            (13, '    buffer[9] = 0;', None, ('defined(SPAM)',)),
+            (14, '}', None, ('defined(SPAM)',)),
+
+            (15, '#else', directives[1], ('defined(SPAM)',)),
+
+            (16, '    static char buffer[256];', None, ('! (defined(SPAM))',)),
+            (17, '    str_copy(buffer, char);', None, ('! (defined(SPAM))',)),
+            (18, '}', None, ('! (defined(SPAM))',)),
+            (19, 'void copy(char *buffer, *orig) {', None, ('! (defined(SPAM))',)),
+            (20, '    strcpy(buffer, orig);', None, ('! (defined(SPAM))',)),
+            (21, '}', None, ('! (defined(SPAM))',)),
+
+            (22, '#endif', directives[2], ('! (defined(SPAM))',)),
+            ])
+        self.check_calls(
+                ('_parse_directive', '#ifdef SPAM'),
+                ('_parse_directive', '#else'),
+                ('_parse_directive', '#endif'),
+                )
+
+    @unittest.skipIf(sys.platform == 'win32', 'needs fix under Windows')
+    def test_basic(self):
+        directives = [
+            Include('<stdio.h>'),
+            IfDirective('ifdef', 'SPAM'),
+            IfDirective('if', '! defined(HAM) || !HAM'),
+            Constant('HAM', '0'),
+            IfDirective('elseif', 'HAM < 0'),
+            Constant('HAM', '-1'),
+            OtherDirective('else', None),
+            OtherDirective('endif', None),
+            OtherDirective('endif', None),
+            IfDirective('if', 'defined(HAM) && (HAM < 0 || ! HAM)'),
+            OtherDirective('undef', 'HAM'),
+            OtherDirective('endif', None),
+            IfDirective('ifndef', 'HAM'),
+            OtherDirective('endif', None),
+            ]
+        self.parsed = list(directives)
+        text = textwrap.dedent(r'''
+            #include <stdio.h>
+            print("begin");
+            #ifdef SPAM
+               print("spam");
+               #if ! defined(HAM) || !HAM
+            #      DEFINE HAM 0
+               #elseif HAM < 0
+            #      DEFINE HAM -1
+               #else
+                   print("ham HAM");
+               #endif
+            #endif
+
+            #if defined(HAM) && \
+                (HAM < 0 || ! HAM)
+              print("ham?");
+              #undef HAM
+            # endif
+
+            #ifndef HAM
+               print("no ham");
+            #endif
+            print("end");
+            ''')[1:-1]
+        lines = [line + '\n' for line in text.splitlines()]
+        lines[-1] = lines[-1][:-1]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [
+            (1, '#include <stdio.h>\n', Include('<stdio.h>'), ()),
+            (2, 'print("begin");\n', None, ()),
+            #
+            (3, '#ifdef SPAM\n',
+                IfDirective('ifdef', 'SPAM'),
+                ()),
+            (4, '   print("spam");\n',
+                None,
+                ('defined(SPAM)',)),
+            (5, '   #if ! defined(HAM) || !HAM\n',
+                IfDirective('if', '! defined(HAM) || !HAM'),
+                ('defined(SPAM)',)),
+            (6, '#      DEFINE HAM 0\n',
+                Constant('HAM', '0'),
+                ('defined(SPAM)', '! defined(HAM) || !HAM')),
+            (7, '   #elseif HAM < 0\n',
+                IfDirective('elseif', 'HAM < 0'),
+                ('defined(SPAM)', '! defined(HAM) || !HAM')),
+            (8, '#      DEFINE HAM -1\n',
+                Constant('HAM', '-1'),
+                ('defined(SPAM)', '! (! defined(HAM) || !HAM)', 'HAM < 0')),
+            (9, '   #else\n',
+                OtherDirective('else', None),
+                ('defined(SPAM)', '! (! defined(HAM) || !HAM)', 'HAM < 0')),
+            (10, '       print("ham HAM");\n',
+                None,
+                ('defined(SPAM)', '! (! defined(HAM) || !HAM)', '! (HAM < 0)')),
+            (11, '   #endif\n',
+                OtherDirective('endif', None),
+                ('defined(SPAM)', '! (! defined(HAM) || !HAM)', '! (HAM < 0)')),
+            (12, '#endif\n',
+                OtherDirective('endif', None),
+                ('defined(SPAM)',)),
+            #
+            (13, '\n', None, ()),
+            #
+            (15, '#if defined(HAM) &&      (HAM < 0 || ! HAM)\n',
+                IfDirective('if', 'defined(HAM) && (HAM < 0 || ! HAM)'),
+                ()),
+            (16, '  print("ham?");\n',
+                None,
+                ('defined(HAM) && (HAM < 0 || ! HAM)',)),
+            (17, '  #undef HAM\n',
+                OtherDirective('undef', 'HAM'),
+                ('defined(HAM) && (HAM < 0 || ! HAM)',)),
+            (18, '# endif\n',
+                OtherDirective('endif', None),
+                ('defined(HAM) && (HAM < 0 || ! HAM)',)),
+            #
+            (19, '\n', None, ()),
+            #
+            (20, '#ifndef HAM\n',
+                IfDirective('ifndef', 'HAM'),
+                ()),
+            (21, '   print("no ham");\n',
+                None,
+                ('! defined(HAM)',)),
+            (22, '#endif\n',
+                OtherDirective('endif', None),
+                ('! defined(HAM)',)),
+            #
+            (23, 'print("end");', None, ()),
+            ])
+
+    @unittest.skipIf(sys.platform == 'win32', 'needs fix under Windows')
+    def test_typical(self):
+        # We use Include/compile.h from commit 66c4f3f38b86.  It has
+        # a good enough mix of code without being too large.
+        directives = [
+            IfDirective('ifndef', 'Py_COMPILE_H'),
+            Constant('Py_COMPILE_H', None),
+
+            IfDirective('ifndef', 'Py_LIMITED_API'),
+
+            Include('"code.h"'),
+
+            IfDirective('ifdef', '__cplusplus'),
+            OtherDirective('endif', None),
+
+            Constant('PyCF_MASK', '(CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)'),
+            Constant('PyCF_MASK_OBSOLETE', '(CO_NESTED)'),
+            Constant('PyCF_SOURCE_IS_UTF8', ' 0x0100'),
+            Constant('PyCF_DONT_IMPLY_DEDENT', '0x0200'),
+            Constant('PyCF_ONLY_AST', '0x0400'),
+            Constant('PyCF_IGNORE_COOKIE', '0x0800'),
+            Constant('PyCF_TYPE_COMMENTS', '0x1000'),
+            Constant('PyCF_ALLOW_TOP_LEVEL_AWAIT', '0x2000'),
+
+            IfDirective('ifndef', 'Py_LIMITED_API'),
+            OtherDirective('endif', None),
+
+            Constant('FUTURE_NESTED_SCOPES', '"nested_scopes"'),
+            Constant('FUTURE_GENERATORS', '"generators"'),
+            Constant('FUTURE_DIVISION', '"division"'),
+            Constant('FUTURE_ABSOLUTE_IMPORT', '"absolute_import"'),
+            Constant('FUTURE_WITH_STATEMENT', '"with_statement"'),
+            Constant('FUTURE_PRINT_FUNCTION', '"print_function"'),
+            Constant('FUTURE_UNICODE_LITERALS', '"unicode_literals"'),
+            Constant('FUTURE_BARRY_AS_BDFL', '"barry_as_FLUFL"'),
+            Constant('FUTURE_GENERATOR_STOP', '"generator_stop"'),
+            Constant('FUTURE_ANNOTATIONS', '"annotations"'),
+
+            Macro('PyAST_Compile', ('mod', 's', 'f', 'ar'), 'PyAST_CompileEx(mod, s, f, -1, ar)'),
+
+            Constant('PY_INVALID_STACK_EFFECT', 'INT_MAX'),
+
+            IfDirective('ifdef', '__cplusplus'),
+            OtherDirective('endif', None),
+
+            OtherDirective('endif', None),  # ifndef Py_LIMITED_API
+
+            Constant('Py_single_input', '256'),
+            Constant('Py_file_input', '257'),
+            Constant('Py_eval_input', '258'),
+            Constant('Py_func_type_input', '345'),
+
+            OtherDirective('endif', None),  # ifndef Py_COMPILE_H
+            ]
+        self.parsed = list(directives)
+        text = textwrap.dedent(r'''
+            #ifndef Py_COMPILE_H
+            #define Py_COMPILE_H
+
+            #ifndef Py_LIMITED_API
+            #include "code.h"
+
+            #ifdef __cplusplus
+            extern "C" {
+            #endif
+
+            /* Public interface */
+            struct _node; /* Declare the existence of this type */
+            PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
+            /* XXX (ncoghlan): Unprefixed type name in a public API! */
+
+            #define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
+                               CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
+                               CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
+                               CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
+            #define PyCF_MASK_OBSOLETE (CO_NESTED)
+            #define PyCF_SOURCE_IS_UTF8  0x0100
+            #define PyCF_DONT_IMPLY_DEDENT 0x0200
+            #define PyCF_ONLY_AST 0x0400
+            #define PyCF_IGNORE_COOKIE 0x0800
+            #define PyCF_TYPE_COMMENTS 0x1000
+            #define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000
+
+            #ifndef Py_LIMITED_API
+            typedef struct {
+                int cf_flags;  /* bitmask of CO_xxx flags relevant to future */
+                int cf_feature_version;  /* minor Python version (PyCF_ONLY_AST) */
+            } PyCompilerFlags;
+            #endif
+
+            /* Future feature support */
+
+            typedef struct {
+                int ff_features;      /* flags set by future statements */
+                int ff_lineno;        /* line number of last future statement */
+            } PyFutureFeatures;
+
+            #define FUTURE_NESTED_SCOPES "nested_scopes"
+            #define FUTURE_GENERATORS "generators"
+            #define FUTURE_DIVISION "division"
+            #define FUTURE_ABSOLUTE_IMPORT "absolute_import"
+            #define FUTURE_WITH_STATEMENT "with_statement"
+            #define FUTURE_PRINT_FUNCTION "print_function"
+            #define FUTURE_UNICODE_LITERALS "unicode_literals"
+            #define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
+            #define FUTURE_GENERATOR_STOP "generator_stop"
+            #define FUTURE_ANNOTATIONS "annotations"
+
+            struct _mod; /* Declare the existence of this type */
+            #define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)
+            PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(
+                struct _mod *mod,
+                const char *filename,       /* decoded from the filesystem encoding */
+                PyCompilerFlags *flags,
+                int optimize,
+                PyArena *arena);
+            PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(
+                struct _mod *mod,
+                PyObject *filename,
+                PyCompilerFlags *flags,
+                int optimize,
+                PyArena *arena);
+            PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(
+                struct _mod * mod,
+                const char *filename        /* decoded from the filesystem encoding */
+                );
+            PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(
+                struct _mod * mod,
+                PyObject *filename
+                );
+
+            /* _Py_Mangle is defined in compile.c */
+            PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
+
+            #define PY_INVALID_STACK_EFFECT INT_MAX
+            PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
+            PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);
+
+            PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);
+
+            #ifdef __cplusplus
+            }
+            #endif
+
+            #endif /* !Py_LIMITED_API */
+
+            /* These definitions must match corresponding definitions in graminit.h. */
+            #define Py_single_input 256
+            #define Py_file_input 257
+            #define Py_eval_input 258
+            #define Py_func_type_input 345
+
+            #endif /* !Py_COMPILE_H */
+            ''').strip()
+        lines = [line + '\n' for line in text.splitlines()]
+        lines[-1] = lines[-1][:-1]
+
+        results = list(
+                iter_lines(lines, _parse_directive=self._parse_directive))
+
+        self.assertEqual(results, [
+            (1, '#ifndef Py_COMPILE_H\n',
+                IfDirective('ifndef', 'Py_COMPILE_H'),
+                ()),
+            (2, '#define Py_COMPILE_H\n',
+                Constant('Py_COMPILE_H', None),
+                ('! defined(Py_COMPILE_H)',)),
+            (3, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)',)),
+            (4, '#ifndef Py_LIMITED_API\n',
+                IfDirective('ifndef', 'Py_LIMITED_API'),
+                ('! defined(Py_COMPILE_H)',)),
+            (5, '#include "code.h"\n',
+                Include('"code.h"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (6, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (7, '#ifdef __cplusplus\n',
+                IfDirective('ifdef', '__cplusplus'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (8, 'extern "C" {\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', 'defined(__cplusplus)')),
+            (9, '#endif\n',
+                OtherDirective('endif', None),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', 'defined(__cplusplus)')),
+            (10, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (11, ' \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (12, 'struct _node;  \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (13, 'PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (14, ' \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (15, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (19, '#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT |                     CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION |                     CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL |                     CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)\n',
+                Constant('PyCF_MASK', '(CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (20, '#define PyCF_MASK_OBSOLETE (CO_NESTED)\n',
+                Constant('PyCF_MASK_OBSOLETE', '(CO_NESTED)'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (21, '#define PyCF_SOURCE_IS_UTF8  0x0100\n',
+                Constant('PyCF_SOURCE_IS_UTF8', ' 0x0100'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (22, '#define PyCF_DONT_IMPLY_DEDENT 0x0200\n',
+                Constant('PyCF_DONT_IMPLY_DEDENT', '0x0200'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (23, '#define PyCF_ONLY_AST 0x0400\n',
+                Constant('PyCF_ONLY_AST', '0x0400'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (24, '#define PyCF_IGNORE_COOKIE 0x0800\n',
+                Constant('PyCF_IGNORE_COOKIE', '0x0800'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (25, '#define PyCF_TYPE_COMMENTS 0x1000\n',
+                Constant('PyCF_TYPE_COMMENTS', '0x1000'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (26, '#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000\n',
+                Constant('PyCF_ALLOW_TOP_LEVEL_AWAIT', '0x2000'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (27, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (28, '#ifndef Py_LIMITED_API\n',
+                IfDirective('ifndef', 'Py_LIMITED_API'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (29, 'typedef struct {\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', '! defined(Py_LIMITED_API)')),
+            (30, '    int cf_flags;   \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', '! defined(Py_LIMITED_API)')),
+            (31, '    int cf_feature_version;   \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', '! defined(Py_LIMITED_API)')),
+            (32, '} PyCompilerFlags;\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', '! defined(Py_LIMITED_API)')),
+            (33, '#endif\n',
+                OtherDirective('endif', None),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', '! defined(Py_LIMITED_API)')),
+            (34, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (35, ' \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (36, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (37, 'typedef struct {\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (38, '    int ff_features;       \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (39, '    int ff_lineno;         \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (40, '} PyFutureFeatures;\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (41, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (42, '#define FUTURE_NESTED_SCOPES "nested_scopes"\n',
+                Constant('FUTURE_NESTED_SCOPES', '"nested_scopes"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (43, '#define FUTURE_GENERATORS "generators"\n',
+                Constant('FUTURE_GENERATORS', '"generators"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (44, '#define FUTURE_DIVISION "division"\n',
+                Constant('FUTURE_DIVISION', '"division"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (45, '#define FUTURE_ABSOLUTE_IMPORT "absolute_import"\n',
+                Constant('FUTURE_ABSOLUTE_IMPORT', '"absolute_import"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (46, '#define FUTURE_WITH_STATEMENT "with_statement"\n',
+                Constant('FUTURE_WITH_STATEMENT', '"with_statement"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (47, '#define FUTURE_PRINT_FUNCTION "print_function"\n',
+                Constant('FUTURE_PRINT_FUNCTION', '"print_function"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (48, '#define FUTURE_UNICODE_LITERALS "unicode_literals"\n',
+                Constant('FUTURE_UNICODE_LITERALS', '"unicode_literals"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (49, '#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"\n',
+                Constant('FUTURE_BARRY_AS_BDFL', '"barry_as_FLUFL"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (50, '#define FUTURE_GENERATOR_STOP "generator_stop"\n',
+                Constant('FUTURE_GENERATOR_STOP', '"generator_stop"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (51, '#define FUTURE_ANNOTATIONS "annotations"\n',
+                Constant('FUTURE_ANNOTATIONS', '"annotations"'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (52, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (53, 'struct _mod;  \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (54, '#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)\n',
+                Macro('PyAST_Compile', ('mod', 's', 'f', 'ar'), 'PyAST_CompileEx(mod, s, f, -1, ar)'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (55, 'PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (56, '    struct _mod *mod,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (57, '    const char *filename,        \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (58, '    PyCompilerFlags *flags,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (59, '    int optimize,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (60, '    PyArena *arena);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (61, 'PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (62, '    struct _mod *mod,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (63, '    PyObject *filename,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (64, '    PyCompilerFlags *flags,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (65, '    int optimize,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (66, '    PyArena *arena);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (67, 'PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (68, '    struct _mod * mod,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (69, '    const char *filename         \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (70, '    );\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (71, 'PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (72, '    struct _mod * mod,\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (73, '    PyObject *filename\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (74, '    );\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (75, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (76, ' \n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (77, 'PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (78, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (79, '#define PY_INVALID_STACK_EFFECT INT_MAX\n',
+                Constant('PY_INVALID_STACK_EFFECT', 'INT_MAX'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (80, 'PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (81, 'PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (82, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (83, 'PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (84, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (85, '#ifdef __cplusplus\n',
+                IfDirective('ifdef', '__cplusplus'),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (86, '}\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', 'defined(__cplusplus)')),
+            (87, '#endif\n',
+                OtherDirective('endif', None),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)', 'defined(__cplusplus)')),
+            (88, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (89, '#endif  \n',
+                OtherDirective('endif', None),
+                ('! defined(Py_COMPILE_H)', '! defined(Py_LIMITED_API)')),
+            (90, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)',)),
+            (91, ' \n',
+                None,
+                ('! defined(Py_COMPILE_H)',)),
+            (92, '#define Py_single_input 256\n',
+                Constant('Py_single_input', '256'),
+                ('! defined(Py_COMPILE_H)',)),
+            (93, '#define Py_file_input 257\n',
+                Constant('Py_file_input', '257'),
+                ('! defined(Py_COMPILE_H)',)),
+            (94, '#define Py_eval_input 258\n',
+                Constant('Py_eval_input', '258'),
+                ('! defined(Py_COMPILE_H)',)),
+            (95, '#define Py_func_type_input 345\n',
+                Constant('Py_func_type_input', '345'),
+                ('! defined(Py_COMPILE_H)',)),
+            (96, '\n',
+                None,
+                ('! defined(Py_COMPILE_H)',)),
+            (97, '#endif  ',
+                OtherDirective('endif', None),
+                ('! defined(Py_COMPILE_H)',)),
+            ])
+        self.check_calls(
+                ('_parse_directive', '#ifndef Py_COMPILE_H'),
+                ('_parse_directive', '#define Py_COMPILE_H'),
+                ('_parse_directive', '#ifndef Py_LIMITED_API'),
+                ('_parse_directive', '#include "code.h"'),
+                ('_parse_directive', '#ifdef __cplusplus'),
+                ('_parse_directive', '#endif'),
+                ('_parse_directive', '#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)'),
+                ('_parse_directive', '#define PyCF_MASK_OBSOLETE (CO_NESTED)'),
+                ('_parse_directive', '#define PyCF_SOURCE_IS_UTF8 0x0100'),
+                ('_parse_directive', '#define PyCF_DONT_IMPLY_DEDENT 0x0200'),
+                ('_parse_directive', '#define PyCF_ONLY_AST 0x0400'),
+                ('_parse_directive', '#define PyCF_IGNORE_COOKIE 0x0800'),
+                ('_parse_directive', '#define PyCF_TYPE_COMMENTS 0x1000'),
+                ('_parse_directive', '#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000'),
+                ('_parse_directive', '#ifndef Py_LIMITED_API'),
+                ('_parse_directive', '#endif'),
+                ('_parse_directive', '#define FUTURE_NESTED_SCOPES "nested_scopes"'),
+                ('_parse_directive', '#define FUTURE_GENERATORS "generators"'),
+                ('_parse_directive', '#define FUTURE_DIVISION "division"'),
+                ('_parse_directive', '#define FUTURE_ABSOLUTE_IMPORT "absolute_import"'),
+                ('_parse_directive', '#define FUTURE_WITH_STATEMENT "with_statement"'),
+                ('_parse_directive', '#define FUTURE_PRINT_FUNCTION "print_function"'),
+                ('_parse_directive', '#define FUTURE_UNICODE_LITERALS "unicode_literals"'),
+                ('_parse_directive', '#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"'),
+                ('_parse_directive', '#define FUTURE_GENERATOR_STOP "generator_stop"'),
+                ('_parse_directive', '#define FUTURE_ANNOTATIONS "annotations"'),
+                ('_parse_directive', '#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)'),
+                ('_parse_directive', '#define PY_INVALID_STACK_EFFECT INT_MAX'),
+                ('_parse_directive', '#ifdef __cplusplus'),
+                ('_parse_directive', '#endif'),
+                ('_parse_directive', '#endif'),
+                ('_parse_directive', '#define Py_single_input 256'),
+                ('_parse_directive', '#define Py_file_input 257'),
+                ('_parse_directive', '#define Py_eval_input 258'),
+                ('_parse_directive', '#define Py_func_type_input 345'),
+                ('_parse_directive', '#endif'),
+                )
+
+
+class ParseDirectiveTests(unittest.TestCase):
+
+    def test_directives(self):
+        tests = [
+            # includes
+            ('#include "internal/pycore_pystate.h"', Include('"internal/pycore_pystate.h"')),
+            ('#include <stdio>', Include('<stdio>')),
+
+            # defines
+            ('#define SPAM int', Constant('SPAM', 'int')),
+            ('#define SPAM', Constant('SPAM', '')),
+            ('#define SPAM(x, y) run(x, y)', Macro('SPAM', ('x', 'y'), 'run(x, y)')),
+            ('#undef SPAM', None),
+
+            # conditionals
+            ('#if SPAM', IfDirective('if', 'SPAM')),
+            # XXX complex conditionls
+            ('#ifdef SPAM', IfDirective('ifdef', 'SPAM')),
+            ('#ifndef SPAM', IfDirective('ifndef', 'SPAM')),
+            ('#elseif SPAM', IfDirective('elseif', 'SPAM')),
+            # XXX complex conditionls
+            ('#else', OtherDirective('else', '')),
+            ('#endif', OtherDirective('endif', '')),
+
+            # other
+            ('#error oops!', None),
+            ('#warning oops!', None),
+            ('#pragma ...', None),
+            ('#__FILE__ ...', None),
+            ('#__LINE__ ...', None),
+            ('#__DATE__ ...', None),
+            ('#__TIME__ ...', None),
+            ('#__TIMESTAMP__ ...', None),
+
+            # extra whitespace
+            (' # include  <stdio> ', Include('<stdio>')),
+            ('#else  ', OtherDirective('else', '')),
+            ('#endif  ', OtherDirective('endif', '')),
+            ('#define SPAM int  ', Constant('SPAM', 'int')),
+            ('#define SPAM  ', Constant('SPAM', '')),
+            ]
+        for line, expected in tests:
+            if expected is None:
+                kind, _, text = line[1:].partition(' ')
+                expected = OtherDirective(kind, text)
+            with self.subTest(line):
+                directive = parse_directive(line)
+
+                self.assertEqual(directive, expected)
+
+    def test_bad_directives(self):
+        tests = [
+            # valid directives with bad text
+            '#define 123',
+            '#else spam',
+            '#endif spam',
+            ]
+        for kind in PreprocessorDirective.KINDS:
+            # missing leading "#"
+            tests.append(kind)
+            if kind in ('else', 'endif'):
+                continue
+            # valid directives with missing text
+            tests.append('#' + kind)
+            tests.append('#' + kind + ' ')
+        for line in tests:
+            with self.subTest(line):
+                with self.assertRaises(ValueError):
+                    parse_directive(line)
+
+    def test_not_directives(self):
+        tests = [
+            '',
+            ' ',
+            'directive',
+            'directive?',
+            '???',
+            ]
+        for line in tests:
+            with self.subTest(line):
+                with self.assertRaises(ValueError):
+                    parse_directive(line)
+
+
+class ConstantTests(unittest.TestCase):
+
+    def test_type(self):
+        directive = Constant('SPAM', '123')
+
+        self.assertIs(type(directive), Constant)
+        self.assertIsInstance(directive, PreprocessorDirective)
+
+    def test_attrs(self):
+        d = Constant('SPAM', '123')
+        kind, name, value = d.kind, d.name, d.value
+
+        self.assertEqual(kind, 'define')
+        self.assertEqual(name, 'SPAM')
+        self.assertEqual(value, '123')
+
+    def test_text(self):
+        tests = [
+            (('SPAM', '123'), 'SPAM 123'),
+            (('SPAM',), 'SPAM'),
+            ]
+        for args, expected in tests:
+            with self.subTest(args):
+                d = Constant(*args)
+                text = d.text
+
+                self.assertEqual(text, expected)
+
+    def test_iter(self):
+        kind, name, value = Constant('SPAM', '123')
+
+        self.assertEqual(kind, 'define')
+        self.assertEqual(name, 'SPAM')
+        self.assertEqual(value, '123')
+
+    def test_defaults(self):
+        kind, name, value = Constant('SPAM')
+
+        self.assertEqual(kind, 'define')
+        self.assertEqual(name, 'SPAM')
+        self.assertIs(value, None)
+
+    def test_coerce(self):
+        tests = []
+        # coerced name, value
+        for args in wrapped_arg_combos('SPAM', '123'):
+            tests.append((args, ('SPAM', '123')))
+        # missing name, value
+        for name in ('', ' ', None, StrProxy(' '), ()):
+            for value in ('', ' ', None, StrProxy(' '), ()):
+                tests.append(
+                        ((name, value), (None, None)))
+        # whitespace
+        tests.extend([
+            ((' SPAM ', ' 123 '), ('SPAM', '123')),
+            ])
+
+        for args, expected in tests:
+            with self.subTest(args):
+                d = Constant(*args)
+
+                self.assertEqual(d[1:], expected)
+                for i, exp in enumerate(expected, start=1):
+                    if exp is not None:
+                        self.assertIs(type(d[i]), str)
+
+    def test_valid(self):
+        tests = [
+            ('SPAM', '123'),
+            # unusual name
+            ('_SPAM_', '123'),
+            ('X_1', '123'),
+            # unusual value
+            ('SPAM', None),
+            ]
+        for args in tests:
+            with self.subTest(args):
+                directive = Constant(*args)
+
+                directive.validate()
+
+    def test_invalid(self):
+        tests = [
+            # invalid name
+            ((None, '123'), TypeError),
+            (('_', '123'), ValueError),
+            (('1', '123'), ValueError),
+            (('_1_', '123'), ValueError),
+            # There is no invalid value (including None).
+            ]
+        for args, exctype in tests:
+            with self.subTest(args):
+                directive = Constant(*args)
+
+                with self.assertRaises(exctype):
+                    directive.validate()
+
+
+class MacroTests(unittest.TestCase):
+
+    def test_type(self):
+        directive = Macro('SPAM', ('x', 'y'), '123')
+
+        self.assertIs(type(directive), Macro)
+        self.assertIsInstance(directive, PreprocessorDirective)
+
+    def test_attrs(self):
+        d = Macro('SPAM', ('x', 'y'), '123')
+        kind, name, args, body = d.kind, d.name, d.args, d.body
+
+        self.assertEqual(kind, 'define')
+        self.assertEqual(name, 'SPAM')
+        self.assertEqual(args, ('x', 'y'))
+        self.assertEqual(body, '123')
+
+    def test_text(self):
+        tests = [
+            (('SPAM', ('x', 'y'), '123'), 'SPAM(x, y) 123'),
+            (('SPAM', ('x', 'y'),), 'SPAM(x, y)'),
+            ]
+        for args, expected in tests:
+            with self.subTest(args):
+                d = Macro(*args)
+                text = d.text
+
+                self.assertEqual(text, expected)
+
+    def test_iter(self):
+        kind, name, args, body = Macro('SPAM', ('x', 'y'), '123')
+
+        self.assertEqual(kind, 'define')
+        self.assertEqual(name, 'SPAM')
+        self.assertEqual(args, ('x', 'y'))
+        self.assertEqual(body, '123')
+
+    def test_defaults(self):
+        kind, name, args, body = Macro('SPAM', ('x', 'y'))
+
+        self.assertEqual(kind, 'define')
+        self.assertEqual(name, 'SPAM')
+        self.assertEqual(args, ('x', 'y'))
+        self.assertIs(body, None)
+
+    def test_coerce(self):
+        tests = []
+        # coerce name and body
+        for args in wrapped_arg_combos('SPAM', ('x', 'y'), '123'):
+            tests.append(
+                    (args, ('SPAM', ('x', 'y'), '123')))
+        # coerce args
+        tests.extend([
+            (('SPAM', 'x', '123'),
+             ('SPAM', ('x',), '123')),
+            (('SPAM', 'x,y', '123'),
+             ('SPAM', ('x', 'y'), '123')),
+            ])
+        # coerce arg names
+        for argnames in wrapped_arg_combos('x', 'y'):
+            tests.append(
+                    (('SPAM', argnames, '123'),
+                     ('SPAM', ('x', 'y'), '123')))
+        # missing name, body
+        for name in ('', ' ', None, StrProxy(' '), ()):
+            for argnames in (None, ()):
+                for body in ('', ' ', None, StrProxy(' '), ()):
+                    tests.append(
+                            ((name, argnames, body),
+                             (None, (), None)))
+        # missing args
+        tests.extend([
+            (('SPAM', None, '123'),
+             ('SPAM', (), '123')),
+            (('SPAM', (), '123'),
+             ('SPAM', (), '123')),
+            ])
+        # missing arg names
+        for arg in ('', ' ', None, StrProxy(' '), ()):
+            tests.append(
+                    (('SPAM', (arg,), '123'),
+                     ('SPAM', (None,), '123')))
+        tests.extend([
+            (('SPAM', ('x', '', 'z'), '123'),
+             ('SPAM', ('x', None, 'z'), '123')),
+            ])
+        # whitespace
+        tests.extend([
+            ((' SPAM ', (' x ', ' y '), ' 123 '),
+             ('SPAM', ('x', 'y'), '123')),
+            (('SPAM', 'x, y', '123'),
+             ('SPAM', ('x', 'y'), '123')),
+            ])
+
+        for args, expected in tests:
+            with self.subTest(args):
+                d = Macro(*args)
+
+                self.assertEqual(d[1:], expected)
+                for i, exp in enumerate(expected, start=1):
+                    if i == 2:
+                        self.assertIs(type(d[i]), tuple)
+                    elif exp is not None:
+                        self.assertIs(type(d[i]), str)
+
+    def test_init_bad_args(self):
+        tests = [
+            ('SPAM', StrProxy('x'), '123'),
+            ('SPAM', object(), '123'),
+            ]
+        for args in tests:
+            with self.subTest(args):
+                with self.assertRaises(TypeError):
+                    Macro(*args)
+
+    def test_valid(self):
+        tests = [
+            # unusual name
+            ('SPAM', ('x', 'y'), 'run(x, y)'),
+            ('_SPAM_', ('x', 'y'), 'run(x, y)'),
+            ('X_1', ('x', 'y'), 'run(x, y)'),
+            # unusual args
+            ('SPAM', (), 'run(x, y)'),
+            ('SPAM', ('_x_', 'y_1'), 'run(x, y)'),
+            ('SPAM', 'x', 'run(x, y)'),
+            ('SPAM', 'x, y', 'run(x, y)'),
+            # unusual body
+            ('SPAM', ('x', 'y'), None),
+            ]
+        for args in tests:
+            with self.subTest(args):
+                directive = Macro(*args)
+
+                directive.validate()
+
+    def test_invalid(self):
+        tests = [
+            # invalid name
+            ((None, ('x', 'y'), '123'), TypeError),
+            (('_', ('x', 'y'), '123'), ValueError),
+            (('1', ('x', 'y'), '123'), ValueError),
+            (('_1', ('x', 'y'), '123'), ValueError),
+            # invalid args
+            (('SPAM', (None, 'y'), '123'), ValueError),
+            (('SPAM', ('x', '_'), '123'), ValueError),
+            (('SPAM', ('x', '1'), '123'), ValueError),
+            (('SPAM', ('x', '_1_'), '123'), ValueError),
+            # There is no invalid body (including None).
+            ]
+        for args, exctype in tests:
+            with self.subTest(args):
+                directive = Macro(*args)
+
+                with self.assertRaises(exctype):
+                    directive.validate()
+
+
+class IfDirectiveTests(unittest.TestCase):
+
+    def test_type(self):
+        directive = IfDirective('if', '1')
+
+        self.assertIs(type(directive), IfDirective)
+        self.assertIsInstance(directive, PreprocessorDirective)
+
+    def test_attrs(self):
+        d = IfDirective('if', '1')
+        kind, condition = d.kind, d.condition
+
+        self.assertEqual(kind, 'if')
+        self.assertEqual(condition, '1')
+        #self.assertEqual(condition, (ArithmeticCondition('1'),))
+
+    def test_text(self):
+        tests = [
+            (('if', 'defined(SPAM) && 1 || (EGGS > 3 && defined(HAM))'),
+             'defined(SPAM) && 1 || (EGGS > 3 && defined(HAM))'),
+            ]
+        for kind in IfDirective.KINDS:
+            tests.append(
+                    ((kind, 'SPAM'), 'SPAM'))
+        for args, expected in tests:
+            with self.subTest(args):
+                d = IfDirective(*args)
+                text = d.text
+
+                self.assertEqual(text, expected)
+
+    def test_iter(self):
+        kind, condition = IfDirective('if', '1')
+
+        self.assertEqual(kind, 'if')
+        self.assertEqual(condition, '1')
+        #self.assertEqual(condition, (ArithmeticCondition('1'),))
+
+    #def test_complex_conditions(self):
+    #    ...
+
+    def test_coerce(self):
+        tests = []
+        for kind in IfDirective.KINDS:
+            if kind == 'ifdef':
+                cond = 'defined(SPAM)'
+            elif kind == 'ifndef':
+                cond = '! defined(SPAM)'
+            else:
+                cond = 'SPAM'
+            for args in wrapped_arg_combos(kind, 'SPAM'):
+                tests.append((args, (kind, cond)))
+            tests.extend([
+                ((' ' + kind + ' ', ' SPAM '), (kind, cond)),
+                ])
+            for raw in ('', ' ', None, StrProxy(' '), ()):
+                tests.append(((kind, raw), (kind, None)))
+        for kind in ('', ' ', None, StrProxy(' '), ()):
+            tests.append(((kind, 'SPAM'), (None, 'SPAM')))
+        for args, expected in tests:
+            with self.subTest(args):
+                d = IfDirective(*args)
+
+                self.assertEqual(tuple(d), expected)
+                for i, exp in enumerate(expected):
+                    if exp is not None:
+                        self.assertIs(type(d[i]), str)
+
+    def test_valid(self):
+        tests = []
+        for kind in IfDirective.KINDS:
+            tests.extend([
+                (kind, 'SPAM'),
+                (kind, '_SPAM_'),
+                (kind, 'X_1'),
+                (kind, '()'),
+                (kind, '--'),
+                (kind, '???'),
+                ])
+        for args in tests:
+            with self.subTest(args):
+                directive = IfDirective(*args)
+
+                directive.validate()
+
+    def test_invalid(self):
+        tests = []
+        # kind
+        tests.extend([
+            ((None, 'SPAM'), TypeError),
+            (('_', 'SPAM'), ValueError),
+            (('-', 'SPAM'), ValueError),
+            (('spam', 'SPAM'), ValueError),
+            ])
+        for kind in PreprocessorDirective.KINDS:
+            if kind in IfDirective.KINDS:
+                continue
+            tests.append(
+                ((kind, 'SPAM'), ValueError))
+        # condition
+        for kind in IfDirective.KINDS:
+            tests.extend([
+                ((kind, None), TypeError),
+                # Any other condition is valid.
+                ])
+        for args, exctype in tests:
+            with self.subTest(args):
+                directive = IfDirective(*args)
+
+                with self.assertRaises(exctype):
+                    directive.validate()
+
+
+class IncludeTests(unittest.TestCase):
+
+    def test_type(self):
+        directive = Include('<stdio>')
+
+        self.assertIs(type(directive), Include)
+        self.assertIsInstance(directive, PreprocessorDirective)
+
+    def test_attrs(self):
+        d = Include('<stdio>')
+        kind, file, text = d.kind, d.file, d.text
+
+        self.assertEqual(kind, 'include')
+        self.assertEqual(file, '<stdio>')
+        self.assertEqual(text, '<stdio>')
+
+    def test_iter(self):
+        kind, file = Include('<stdio>')
+
+        self.assertEqual(kind, 'include')
+        self.assertEqual(file, '<stdio>')
+
+    def test_coerce(self):
+        tests = []
+        for arg, in wrapped_arg_combos('<stdio>'):
+            tests.append((arg, '<stdio>'))
+        tests.extend([
+            (' <stdio> ', '<stdio>'),
+            ])
+        for arg in ('', ' ', None, StrProxy(' '), ()):
+            tests.append((arg, None ))
+        for arg, expected in tests:
+            with self.subTest(arg):
+                _, file = Include(arg)
+
+                self.assertEqual(file, expected)
+                if expected is not None:
+                    self.assertIs(type(file), str)
+
+    def test_valid(self):
+        tests = [
+            '<stdio>',
+            '"spam.h"',
+            '"internal/pycore_pystate.h"',
+            ]
+        for arg in tests:
+            with self.subTest(arg):
+                directive = Include(arg)
+
+                directive.validate()
+
+    def test_invalid(self):
+        tests = [
+            (None, TypeError),
+            # We currently don't check the file.
+            ]
+        for arg, exctype in tests:
+            with self.subTest(arg):
+                directive = Include(arg)
+
+                with self.assertRaises(exctype):
+                    directive.validate()
+
+
+class OtherDirectiveTests(unittest.TestCase):
+
+    def test_type(self):
+        directive = OtherDirective('undef', 'SPAM')
+
+        self.assertIs(type(directive), OtherDirective)
+        self.assertIsInstance(directive, PreprocessorDirective)
+
+    def test_attrs(self):
+        d = OtherDirective('undef', 'SPAM')
+        kind, text = d.kind, d.text
+
+        self.assertEqual(kind, 'undef')
+        self.assertEqual(text, 'SPAM')
+
+    def test_iter(self):
+        kind, text = OtherDirective('undef', 'SPAM')
+
+        self.assertEqual(kind, 'undef')
+        self.assertEqual(text, 'SPAM')
+
+    def test_coerce(self):
+        tests = []
+        for kind in OtherDirective.KINDS:
+            if kind in ('else', 'endif'):
+                continue
+            for args in wrapped_arg_combos(kind, '...'):
+                tests.append((args, (kind, '...')))
+            tests.extend([
+                ((' ' + kind + ' ', ' ... '), (kind, '...')),
+                ])
+            for raw in ('', ' ', None, StrProxy(' '), ()):
+                tests.append(((kind, raw), (kind, None)))
+        for kind in ('else', 'endif'):
+            for args in wrapped_arg_combos(kind, None):
+                tests.append((args, (kind, None)))
+            tests.extend([
+                ((' ' + kind + ' ', None), (kind, None)),
+                ])
+        for kind in ('', ' ', None, StrProxy(' '), ()):
+            tests.append(((kind, '...'), (None, '...')))
+        for args, expected in tests:
+            with self.subTest(args):
+                d = OtherDirective(*args)
+
+                self.assertEqual(tuple(d), expected)
+                for i, exp in enumerate(expected):
+                    if exp is not None:
+                        self.assertIs(type(d[i]), str)
+
+    def test_valid(self):
+        tests = []
+        for kind in OtherDirective.KINDS:
+            if kind in ('else', 'endif'):
+                continue
+            tests.extend([
+                (kind, '...'),
+                (kind, '???'),
+                (kind, 'SPAM'),
+                (kind, '1 + 1'),
+                ])
+        for kind in ('else', 'endif'):
+            tests.append((kind, None))
+        for args in tests:
+            with self.subTest(args):
+                directive = OtherDirective(*args)
+
+                directive.validate()
+
+    def test_invalid(self):
+        tests = []
+        # kind
+        tests.extend([
+            ((None, '...'), TypeError),
+            (('_', '...'), ValueError),
+            (('-', '...'), ValueError),
+            (('spam', '...'), ValueError),
+            ])
+        for kind in PreprocessorDirective.KINDS:
+            if kind in OtherDirective.KINDS:
+                continue
+            tests.append(
+                ((kind, None), ValueError))
+        # text
+        for kind in OtherDirective.KINDS:
+            if kind in ('else', 'endif'):
+                tests.extend([
+                    # Any text is invalid.
+                    ((kind, 'SPAM'), ValueError),
+                    ((kind, '...'), ValueError),
+                    ])
+            else:
+                tests.extend([
+                    ((kind, None), TypeError),
+                    # Any other text is valid.
+                    ])
+        for args, exctype in tests:
+            with self.subTest(args):
+                directive = OtherDirective(*args)
+
+                with self.assertRaises(exctype):
+                    directive.validate()
diff --git a/Lib/test/test_tools/test_c_analyzer/test_symbols/__init__.py b/Lib/test/test_tools/test_c_analyzer/test_symbols/__init__.py
new file mode 100644
index 0000000..bc502ef
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_symbols/__init__.py
@@ -0,0 +1,6 @@
+import os.path
+from test.support import load_package_tests
+
+
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_tools/test_c_analyzer/test_symbols/test_info.py b/Lib/test/test_tools/test_c_analyzer/test_symbols/test_info.py
new file mode 100644
index 0000000..1282a89
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_symbols/test_info.py
@@ -0,0 +1,192 @@
+import string
+import unittest
+
+from ..util import PseudoStr, StrProxy, Object
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.common.info import ID
+    from c_analyzer.symbols.info import Symbol
+
+
+class SymbolTests(unittest.TestCase):
+
+    VALID_ARGS = (
+            ID('x/y/z/spam.c', 'func', 'eggs'),
+            Symbol.KIND.VARIABLE,
+            False,
+            )
+    VALID_KWARGS = dict(zip(Symbol._fields, VALID_ARGS))
+    VALID_EXPECTED = VALID_ARGS
+
+    def test_init_typical_binary_local(self):
+        id = ID(None, None, 'spam')
+        symbol = Symbol(
+                id=id,
+                kind=Symbol.KIND.VARIABLE,
+                external=False,
+                )
+
+        self.assertEqual(symbol, (
+            id,
+            Symbol.KIND.VARIABLE,
+            False,
+            ))
+
+    def test_init_typical_binary_global(self):
+        id = ID('Python/ceval.c', None, 'spam')
+        symbol = Symbol(
+                id=id,
+                kind=Symbol.KIND.VARIABLE,
+                external=False,
+                )
+
+        self.assertEqual(symbol, (
+            id,
+            Symbol.KIND.VARIABLE,
+            False,
+            ))
+
+    def test_init_coercion(self):
+        tests = [
+            ('str subclass',
+             dict(
+                 id=PseudoStr('eggs'),
+                 kind=PseudoStr('variable'),
+                 external=0,
+                 ),
+             (ID(None, None, 'eggs'),
+              Symbol.KIND.VARIABLE,
+              False,
+              )),
+            ('with filename',
+             dict(
+                 id=('x/y/z/spam.c', 'eggs'),
+                 kind=PseudoStr('variable'),
+                 external=0,
+                 ),
+             (ID('x/y/z/spam.c', None, 'eggs'),
+              Symbol.KIND.VARIABLE,
+              False,
+              )),
+            ('non-str 1',
+             dict(
+                 id=('a', 'b', 'c'),
+                 kind=StrProxy('variable'),
+                 external=0,
+                 ),
+             (ID('a', 'b', 'c'),
+              Symbol.KIND.VARIABLE,
+              False,
+              )),
+            ('non-str 2',
+             dict(
+                 id=('a', 'b', 'c'),
+                 kind=Object(),
+                 external=0,
+                 ),
+             (ID('a', 'b', 'c'),
+              '<object>',
+              False,
+              )),
+            ]
+        for summary, kwargs, expected in tests:
+            with self.subTest(summary):
+                symbol = Symbol(**kwargs)
+
+                for field in Symbol._fields:
+                    value = getattr(symbol, field)
+                    if field == 'external':
+                        self.assertIs(type(value), bool)
+                    elif field == 'id':
+                        self.assertIs(type(value), ID)
+                    else:
+                        self.assertIs(type(value), str)
+                self.assertEqual(tuple(symbol), expected)
+
+    def test_init_all_missing(self):
+        id = ID(None, None, 'spam')
+
+        symbol = Symbol(id)
+
+        self.assertEqual(symbol, (
+            id,
+            Symbol.KIND.VARIABLE,
+            None,
+            ))
+
+    def test_fields(self):
+        id = ID('z', 'x', 'a')
+
+        symbol = Symbol(id, 'b', False)
+
+        self.assertEqual(symbol.id, id)
+        self.assertEqual(symbol.kind, 'b')
+        self.assertIs(symbol.external, False)
+
+    def test___getattr__(self):
+        id = ID('z', 'x', 'a')
+        symbol = Symbol(id, 'b', False)
+
+        filename = symbol.filename
+        funcname = symbol.funcname
+        name = symbol.name
+
+        self.assertEqual(filename, 'z')
+        self.assertEqual(funcname, 'x')
+        self.assertEqual(name, 'a')
+
+    def test_validate_typical(self):
+        id = ID('z', 'x', 'a')
+
+        symbol = Symbol(
+                id=id,
+                kind=Symbol.KIND.VARIABLE,
+                external=False,
+                )
+
+        symbol.validate()  # This does not fail.
+
+    def test_validate_missing_field(self):
+        for field in Symbol._fields:
+            with self.subTest(field):
+                symbol = Symbol(**self.VALID_KWARGS)
+                symbol = symbol._replace(**{field: None})
+
+                with self.assertRaises(TypeError):
+                    symbol.validate()
+
+    def test_validate_bad_field(self):
+        badch = tuple(c for c in string.punctuation + string.digits)
+        notnames = (
+                '1a',
+                'a.b',
+                'a-b',
+                '&a',
+                'a++',
+                ) + badch
+        tests = [
+            ('id', notnames),
+            ('kind', ('bogus',)),
+            ]
+        seen = set()
+        for field, invalid in tests:
+            for value in invalid:
+                if field != 'kind':
+                    seen.add(value)
+                with self.subTest(f'{field}={value!r}'):
+                    symbol = Symbol(**self.VALID_KWARGS)
+                    symbol = symbol._replace(**{field: value})
+
+                    with self.assertRaises(ValueError):
+                        symbol.validate()
+
+        for field, invalid in tests:
+            if field == 'kind':
+                continue
+            valid = seen - set(invalid)
+            for value in valid:
+                with self.subTest(f'{field}={value!r}'):
+                    symbol = Symbol(**self.VALID_KWARGS)
+                    symbol = symbol._replace(**{field: value})
+
+                    symbol.validate()  # This does not fail.
diff --git a/Lib/test/test_tools/test_c_analyzer/test_variables/__init__.py b/Lib/test/test_tools/test_c_analyzer/test_variables/__init__.py
new file mode 100644
index 0000000..bc502ef
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_variables/__init__.py
@@ -0,0 +1,6 @@
+import os.path
+from test.support import load_package_tests
+
+
+def load_tests(*args):
+    return load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_tools/test_c_analyzer/test_variables/test_find.py b/Lib/test/test_tools/test_c_analyzer/test_variables/test_find.py
new file mode 100644
index 0000000..7a13cf3
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_variables/test_find.py
@@ -0,0 +1,124 @@
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.variables import info
+    from c_analyzer.variables.find import (
+            vars_from_binary,
+            )
+
+
+class _Base(unittest.TestCase):
+
+    maxDiff = None
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+
+class VarsFromBinaryTests(_Base):
+
+    _return_iter_vars = ()
+    _return_get_symbol_resolver = None
+
+    def setUp(self):
+        super().setUp()
+
+        self.kwargs = dict(
+                _iter_vars=self._iter_vars,
+                _get_symbol_resolver=self._get_symbol_resolver,
+                )
+
+    def _iter_vars(self, binfile, resolve, handle_id):
+        self.calls.append(('_iter_vars', (binfile, resolve, handle_id)))
+        return [(v, v.id) for v in self._return_iter_vars]
+
+    def _get_symbol_resolver(self, known=None, dirnames=(), *,
+                             handle_var,
+                             filenames=None,
+                             check_filename=None,
+                             perfilecache=None,
+                             ):
+        self.calls.append(('_get_symbol_resolver',
+                           (known, dirnames, handle_var, filenames,
+                            check_filename, perfilecache)))
+        return self._return_get_symbol_resolver
+
+    def test_typical(self):
+        resolver = self._return_get_symbol_resolver = object()
+        variables = self._return_iter_vars = [
+            info.Variable.from_parts('dir1/spam.c', None, 'var1', 'int'),
+            info.Variable.from_parts('dir1/spam.c', None, 'var2', 'static int'),
+            info.Variable.from_parts('dir1/spam.c', None, 'var3', 'char *'),
+            info.Variable.from_parts('dir1/spam.c', 'func2', 'var4', 'const char *'),
+            info.Variable.from_parts('dir1/eggs.c', None, 'var1', 'static int'),
+            info.Variable.from_parts('dir1/eggs.c', 'func1', 'var2', 'static char *'),
+            ]
+        known = object()
+        filenames = object()
+
+        found = list(vars_from_binary('python',
+                                      known=known,
+                                      filenames=filenames,
+                                      **self.kwargs))
+
+        self.assertEqual(found, [
+            info.Variable.from_parts('dir1/spam.c', None, 'var1', 'int'),
+            info.Variable.from_parts('dir1/spam.c', None, 'var2', 'static int'),
+            info.Variable.from_parts('dir1/spam.c', None, 'var3', 'char *'),
+            info.Variable.from_parts('dir1/spam.c', 'func2', 'var4', 'const char *'),
+            info.Variable.from_parts('dir1/eggs.c', None, 'var1', 'static int'),
+            info.Variable.from_parts('dir1/eggs.c', 'func1', 'var2', 'static char *'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_get_symbol_resolver', (filenames, known, info.Variable.from_id, None, None, {})),
+            ('_iter_vars', ('python', resolver, None)),
+            ])
+
+#        self._return_iter_symbols = [
+#                s_info.Symbol(('dir1/spam.c', None, 'var1'), 'variable', False),
+#                s_info.Symbol(('dir1/spam.c', None, 'var2'), 'variable', False),
+#                s_info.Symbol(('dir1/spam.c', None, 'func1'), 'function', False),
+#                s_info.Symbol(('dir1/spam.c', None, 'func2'), 'function', True),
+#                s_info.Symbol(('dir1/spam.c', None, 'var3'), 'variable', False),
+#                s_info.Symbol(('dir1/spam.c', 'func2', 'var4'), 'variable', False),
+#                s_info.Symbol(('dir1/ham.c', None, 'var1'), 'variable', True),
+#                s_info.Symbol(('dir1/eggs.c', None, 'var1'), 'variable', False),
+#                s_info.Symbol(('dir1/eggs.c', None, 'xyz'), 'other', False),
+#                s_info.Symbol(('dir1/eggs.c', '???', 'var2'), 'variable', False),
+#                s_info.Symbol(('???', None, 'var_x'), 'variable', False),
+#                s_info.Symbol(('???', '???', 'var_y'), 'variable', False),
+#                s_info.Symbol((None, None, '???'), 'other', False),
+#                ]
+#        known = object()
+#
+#        vars_from_binary('python', knownvars=known, **this.kwargs)
+#        found = list(globals_from_symbols(['dir1'], self.iter_symbols))
+#
+#        self.assertEqual(found, [
+#            info.Variable.from_parts('dir1/spam.c', None, 'var1', '???'),
+#            info.Variable.from_parts('dir1/spam.c', None, 'var2', '???'),
+#            info.Variable.from_parts('dir1/spam.c', None, 'var3', '???'),
+#            info.Variable.from_parts('dir1/spam.c', 'func2', 'var4', '???'),
+#            info.Variable.from_parts('dir1/eggs.c', None, 'var1', '???'),
+#            ])
+#        self.assertEqual(self.calls, [
+#            ('iter_symbols', (['dir1'],)),
+#            ])
+#
+#    def test_no_symbols(self):
+#        self._return_iter_symbols = []
+#
+#        found = list(globals_from_symbols(['dir1'], self.iter_symbols))
+#
+#        self.assertEqual(found, [])
+#        self.assertEqual(self.calls, [
+#            ('iter_symbols', (['dir1'],)),
+#            ])
+
+    # XXX need functional test
diff --git a/Lib/test/test_tools/test_c_analyzer/test_variables/test_info.py b/Lib/test/test_tools/test_c_analyzer/test_variables/test_info.py
new file mode 100644
index 0000000..d424d8e
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_variables/test_info.py
@@ -0,0 +1,244 @@
+import string
+import unittest
+
+from ..util import PseudoStr, StrProxy, Object
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.common.info import UNKNOWN, ID
+    from c_analyzer.variables.info import (
+            normalize_vartype, Variable
+            )
+
+
+class NormalizeVartypeTests(unittest.TestCase):
+
+    def test_basic(self):
+        tests = [
+                (None, None),
+                ('', ''),
+                ('int', 'int'),
+                (PseudoStr('int'), 'int'),
+                (StrProxy('int'), 'int'),
+                ]
+        for vartype, expected in tests:
+            with self.subTest(vartype):
+                normalized = normalize_vartype(vartype)
+
+                self.assertEqual(normalized, expected)
+
+
+class VariableTests(unittest.TestCase):
+
+    VALID_ARGS = (
+            ('x/y/z/spam.c', 'func', 'eggs'),
+            'static',
+            'int',
+            )
+    VALID_KWARGS = dict(zip(Variable._fields, VALID_ARGS))
+    VALID_EXPECTED = VALID_ARGS
+
+    def test_init_typical_global(self):
+        for storage in ('static', 'extern', 'implicit'):
+            with self.subTest(storage):
+                static = Variable(
+                        id=ID(
+                            filename='x/y/z/spam.c',
+                            funcname=None,
+                            name='eggs',
+                            ),
+                        storage=storage,
+                        vartype='int',
+                        )
+
+                self.assertEqual(static, (
+                        ('x/y/z/spam.c', None, 'eggs'),
+                        storage,
+                        'int',
+                        ))
+
+    def test_init_typical_local(self):
+        for storage in ('static', 'local'):
+            with self.subTest(storage):
+                static = Variable(
+                        id=ID(
+                            filename='x/y/z/spam.c',
+                            funcname='func',
+                            name='eggs',
+                            ),
+                        storage=storage,
+                        vartype='int',
+                        )
+
+        self.assertEqual(static, (
+                ('x/y/z/spam.c', 'func', 'eggs'),
+                storage,
+                'int',
+                ))
+
+    def test_init_all_missing(self):
+        for value in ('', None):
+            with self.subTest(repr(value)):
+                static = Variable(
+                        id=value,
+                        storage=value,
+                        vartype=value,
+                        )
+
+                self.assertEqual(static, (
+                        None,
+                        None,
+                        None,
+                        ))
+
+    def test_init_all_coerced(self):
+        id = ID('x/y/z/spam.c', 'func', 'spam')
+        tests = [
+            ('str subclass',
+             dict(
+                 id=(
+                    PseudoStr('x/y/z/spam.c'),
+                    PseudoStr('func'),
+                    PseudoStr('spam'),
+                    ),
+                 storage=PseudoStr('static'),
+                 vartype=PseudoStr('int'),
+                 ),
+             (id,
+              'static',
+              'int',
+              )),
+            ('non-str 1',
+             dict(
+                 id=id,
+                 storage=Object(),
+                 vartype=Object(),
+                 ),
+             (id,
+              '<object>',
+              '<object>',
+              )),
+            ('non-str 2',
+             dict(
+                 id=id,
+                 storage=StrProxy('static'),
+                 vartype=StrProxy('variable'),
+                 ),
+             (id,
+              'static',
+              'variable',
+              )),
+            ('non-str',
+             dict(
+                 id=id,
+                 storage=('a', 'b', 'c'),
+                 vartype=('x', 'y', 'z'),
+                 ),
+             (id,
+              "('a', 'b', 'c')",
+              "('x', 'y', 'z')",
+              )),
+            ]
+        for summary, kwargs, expected in tests:
+            with self.subTest(summary):
+                static = Variable(**kwargs)
+
+                for field in Variable._fields:
+                    value = getattr(static, field)
+                    if field == 'id':
+                        self.assertIs(type(value), ID)
+                    else:
+                        self.assertIs(type(value), str)
+                self.assertEqual(tuple(static), expected)
+
+    def test_iterable(self):
+        static = Variable(**self.VALID_KWARGS)
+
+        id, storage, vartype = static
+
+        values = (id, storage, vartype)
+        for value, expected in zip(values, self.VALID_EXPECTED):
+            self.assertEqual(value, expected)
+
+    def test_fields(self):
+        static = Variable(('a', 'b', 'z'), 'x', 'y')
+
+        self.assertEqual(static.id, ('a', 'b', 'z'))
+        self.assertEqual(static.storage, 'x')
+        self.assertEqual(static.vartype, 'y')
+
+    def test___getattr__(self):
+        static = Variable(('a', 'b', 'z'), 'x', 'y')
+
+        self.assertEqual(static.filename, 'a')
+        self.assertEqual(static.funcname, 'b')
+        self.assertEqual(static.name, 'z')
+
+    def test_validate_typical(self):
+        validstorage = ('static', 'extern', 'implicit', 'local')
+        self.assertEqual(set(validstorage), set(Variable.STORAGE))
+
+        for storage in validstorage:
+            with self.subTest(storage):
+                static = Variable(
+                        id=ID(
+                            filename='x/y/z/spam.c',
+                            funcname='func',
+                            name='eggs',
+                            ),
+                        storage=storage,
+                        vartype='int',
+                        )
+
+                static.validate()  # This does not fail.
+
+    def test_validate_missing_field(self):
+        for field in Variable._fields:
+            with self.subTest(field):
+                static = Variable(**self.VALID_KWARGS)
+                static = static._replace(**{field: None})
+
+                with self.assertRaises(TypeError):
+                    static.validate()
+        for field in ('storage', 'vartype'):
+            with self.subTest(field):
+                static = Variable(**self.VALID_KWARGS)
+                static = static._replace(**{field: UNKNOWN})
+
+                with self.assertRaises(TypeError):
+                    static.validate()
+
+    def test_validate_bad_field(self):
+        badch = tuple(c for c in string.punctuation + string.digits)
+        notnames = (
+                '1a',
+                'a.b',
+                'a-b',
+                '&a',
+                'a++',
+                ) + badch
+        tests = [
+            ('id', ()),  # Any non-empty str is okay.
+            ('storage', ('external', 'global') + notnames),
+            ('vartype', ()),  # Any non-empty str is okay.
+            ]
+        seen = set()
+        for field, invalid in tests:
+            for value in invalid:
+                seen.add(value)
+                with self.subTest(f'{field}={value!r}'):
+                    static = Variable(**self.VALID_KWARGS)
+                    static = static._replace(**{field: value})
+
+                    with self.assertRaises(ValueError):
+                        static.validate()
+
+        for field, invalid in tests:
+            if field == 'id':
+                continue
+            valid = seen - set(invalid)
+            for value in valid:
+                with self.subTest(f'{field}={value!r}'):
+                    static = Variable(**self.VALID_KWARGS)
+                    static = static._replace(**{field: value})
+
+                    static.validate()  # This does not fail.
diff --git a/Lib/test/test_tools/test_c_analyzer/test_variables/test_known.py b/Lib/test/test_tools/test_c_analyzer/test_variables/test_known.py
new file mode 100644
index 0000000..49ff45c
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/test_variables/test_known.py
@@ -0,0 +1,139 @@
+import re
+import textwrap
+import unittest
+
+from .. import tool_imports_for_tests
+with tool_imports_for_tests():
+    from c_analyzer.common.info import ID
+    from c_analyzer.variables.info import Variable
+    from c_analyzer.variables.known import (
+            read_file,
+            from_file,
+            )
+
+class _BaseTests(unittest.TestCase):
+
+    maxDiff = None
+
+    @property
+    def calls(self):
+        try:
+            return self._calls
+        except AttributeError:
+            self._calls = []
+            return self._calls
+
+
+class ReadFileTests(_BaseTests):
+
+    _return_read_tsv = ()
+
+    def _read_tsv(self, *args):
+        self.calls.append(('_read_tsv', args))
+        return self._return_read_tsv
+
+    def test_typical(self):
+        lines = textwrap.dedent('''
+            filename    funcname        name    kind    declaration
+            file1.c     -       var1    variable        static int
+            file1.c     func1   local1  variable        static int
+            file1.c     -       var2    variable        int
+            file1.c     func2   local2  variable        char *
+            file2.c     -       var1    variable        char *
+            ''').strip().splitlines()
+        lines = [re.sub(r'\s+', '\t', line, 4) for line in lines]
+        self._return_read_tsv = [tuple(v.strip() for v in line.split('\t'))
+                                 for line in lines[1:]]
+
+        known = list(read_file('known.tsv', _read_tsv=self._read_tsv))
+
+        self.assertEqual(known, [
+            ('variable', ID('file1.c', '', 'var1'), 'static int'),
+            ('variable', ID('file1.c', 'func1', 'local1'), 'static int'),
+            ('variable', ID('file1.c', '', 'var2'), 'int'),
+            ('variable', ID('file1.c', 'func2', 'local2'), 'char *'),
+            ('variable', ID('file2.c', '', 'var1'), 'char *'),
+            ])
+        self.assertEqual(self.calls, [
+            ('_read_tsv',
+             ('known.tsv', 'filename\tfuncname\tname\tkind\tdeclaration')),
+            ])
+
+    def test_empty(self):
+        self._return_read_tsv = []
+
+        known = list(read_file('known.tsv', _read_tsv=self._read_tsv))
+
+        self.assertEqual(known, [])
+        self.assertEqual(self.calls, [
+            ('_read_tsv', ('known.tsv', 'filename\tfuncname\tname\tkind\tdeclaration')),
+            ])
+
+
+class FromFileTests(_BaseTests):
+
+    _return_read_file = ()
+    _return_handle_var = ()
+
+    def _read_file(self, infile):
+        self.calls.append(('_read_file', (infile,)))
+        return iter(self._return_read_file)
+
+    def _handle_var(self, varid, decl):
+        self.calls.append(('_handle_var', (varid, decl)))
+        var = self._return_handle_var.pop(0)
+        return var
+
+    def test_typical(self):
+        expected = [
+            Variable.from_parts('file1.c', '', 'var1', 'static int'),
+            Variable.from_parts('file1.c', 'func1', 'local1', 'static int'),
+            Variable.from_parts('file1.c', '', 'var2', 'int'),
+            Variable.from_parts('file1.c', 'func2', 'local2', 'char *'),
+            Variable.from_parts('file2.c', '', 'var1', 'char *'),
+            ]
+        self._return_read_file = [('variable', v.id, v.vartype)
+                                  for v in expected]
+#            ('variable', ID('file1.c', '', 'var1'), 'static int'),
+#            ('variable', ID('file1.c', 'func1', 'local1'), 'static int'),
+#            ('variable', ID('file1.c', '', 'var2'), 'int'),
+#            ('variable', ID('file1.c', 'func2', 'local2'), 'char *'),
+#            ('variable', ID('file2.c', '', 'var1'), 'char *'),
+#            ]
+        self._return_handle_var = list(expected)  # a copy
+
+        known = from_file('known.tsv',
+                          handle_var=self._handle_var,
+                          _read_file=self._read_file,
+                          )
+
+        self.assertEqual(known, {
+            'variables': {v.id: v for v in expected},
+            })
+#                Variable.from_parts('file1.c', '', 'var1', 'static int'),
+#                Variable.from_parts('file1.c', 'func1', 'local1', 'static int'),
+#                Variable.from_parts('file1.c', '', 'var2', 'int'),
+#                Variable.from_parts('file1.c', 'func2', 'local2', 'char *'),
+#                Variable.from_parts('file2.c', '', 'var1', 'char *'),
+#                ]},
+#            })
+        self.assertEqual(self.calls, [
+            ('_read_file', ('known.tsv',)),
+            *[('_handle_var', (v.id, v.vartype))
+              for v in expected],
+            ])
+
+    def test_empty(self):
+        self._return_read_file = []
+
+        known = from_file('known.tsv',
+                          handle_var=self._handle_var,
+                          _read_file=self._read_file,
+                          )
+
+        self.assertEqual(known, {
+            'variables': {},
+            })
+        self.assertEqual(self.calls, [
+            ('_read_file', ('known.tsv',)),
+            ])
diff --git a/Lib/test/test_tools/test_c_analyzer/util.py b/Lib/test/test_tools/test_c_analyzer/util.py
new file mode 100644
index 0000000..ba73b0a
--- /dev/null
+++ b/Lib/test/test_tools/test_c_analyzer/util.py
@@ -0,0 +1,60 @@
+import itertools
+
+
+class PseudoStr(str):
+    pass
+
+
+class StrProxy:
+    def __init__(self, value):
+        self.value = value
+    def __str__(self):
+        return self.value
+    def __bool__(self):
+        return bool(self.value)
+
+
+class Object:
+    def __repr__(self):
+        return '<object>'
+
+
+def wrapped_arg_combos(*args,
+                       wrappers=(PseudoStr, StrProxy),
+                       skip=(lambda w, i, v: not isinstance(v, str)),
+                       ):
+    """Yield every possible combination of wrapped items for the given args.
+
+    Effectively, the wrappers are applied to the args according to the
+    powerset of the args indicies.  So the result includes the args
+    completely unwrapped.
+
+    If "skip" is supplied (default is to skip all non-str values) and
+    it returns True for a given arg index/value then that arg will
+    remain unwrapped,
+
+    Only unique results are returned.  If an arg was skipped for one
+    of the combinations then it could end up matching one of the other
+    combinations.  In that case only one of them will be yielded.
+    """
+    if not args:
+        return
+    indices = list(range(len(args)))
+    # The powerset (from recipe in the itertools docs).
+    combos = itertools.chain.from_iterable(itertools.combinations(indices, r)
+                                           for r in range(len(indices)+1))
+    seen = set()
+    for combo in combos:
+        for wrap in wrappers:
+            indexes = []
+            applied = list(args)
+            for i in combo:
+                arg = args[i]
+                if skip and skip(wrap, i, arg):
+                    continue
+                indexes.append(i)
+                applied[i] = wrap(arg)
+            key = (wrap, tuple(indexes))
+            if key not in seen:
+                yield tuple(applied)
+                seen.add(key)
diff --git a/Lib/test/test_tools/test_lll.py b/Lib/test/test_tools/test_lll.py
index b01e218..568cbfb 100644
--- a/Lib/test/test_tools/test_lll.py
+++ b/Lib/test/test_tools/test_lll.py
@@ -1,7 +1,6 @@
 """Tests for the lll script in the Tools/script directory."""
 
 import os
-import sys
 import tempfile
 from test import support
 from test.test_tools import skip_if_missing, import_tool
diff --git a/Lib/test/test_tools/test_md5sum.py b/Lib/test/test_tools/test_md5sum.py
index fb565b7..321bc4b 100644
--- a/Lib/test/test_tools/test_md5sum.py
+++ b/Lib/test/test_tools/test_md5sum.py
@@ -3,12 +3,14 @@
 import os
 import unittest
 from test import support
+from test.support import hashlib_helper
 from test.support.script_helper import assert_python_ok, assert_python_failure
 
 from test.test_tools import scriptsdir, skip_if_missing
 
 skip_if_missing()
 
+@hashlib_helper.requires_hashdigest('md5')
 class MD5SumTests(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
diff --git a/Lib/test/test_tools/test_pathfix.py b/Lib/test/test_tools/test_pathfix.py
index ec36117..03ed29d 100644
--- a/Lib/test/test_tools/test_pathfix.py
+++ b/Lib/test/test_tools/test_pathfix.py
@@ -3,7 +3,7 @@
 import sys
 import unittest
 from test import support
-from test.test_tools import import_tool, scriptsdir, skip_if_missing
+from test.test_tools import scriptsdir, skip_if_missing
 
 
 # need Tools/script/ directory: skip if run on Python installed on the system
@@ -30,16 +30,18 @@
         with open(filename, 'w', encoding='utf8') as f:
             f.write(f'{shebang}\n' + 'print("Hello world")\n')
 
+        encoding = sys.getfilesystemencoding()
         proc = subprocess.run(
             [sys.executable, self.script,
              *pathfix_flags, '-n', pathfix_arg],
-            capture_output=True, text=1)
+            env={**os.environ, 'PYTHONIOENCODING': encoding},
+            capture_output=True)
 
         if stdout == '' and proc.returncode == 0:
             stdout = f'{filename}: updating\n'
         self.assertEqual(proc.returncode, exitcode, proc)
-        self.assertEqual(proc.stdout, stdout, proc)
-        self.assertEqual(proc.stderr, stderr, proc)
+        self.assertEqual(proc.stdout.decode(encoding), stdout.replace('\n', os.linesep), proc)
+        self.assertEqual(proc.stderr.decode(encoding), stderr.replace('\n', os.linesep), proc)
 
         with open(filename, 'r', encoding='utf8') as f:
             output = f.read()
diff --git a/Lib/test/test_tools/test_sundry.py b/Lib/test/test_tools/test_sundry.py
index f5fed01..10eb694 100644
--- a/Lib/test/test_tools/test_sundry.py
+++ b/Lib/test/test_tools/test_sundry.py
@@ -2,7 +2,7 @@
 
 This file contains extremely basic regression tests for the scripts found in
 the Tools directory of a Python checkout or tarball which don't have separate
-tests of their own, such as h2py.py.
+tests of their own.
 """
 
 import os
diff --git a/Lib/test/test_tools/test_unparse.py b/Lib/test/test_tools/test_unparse.py
deleted file mode 100644
index d89cb09..0000000
--- a/Lib/test/test_tools/test_unparse.py
+++ /dev/null
@@ -1,332 +0,0 @@
-"""Tests for the unparse.py script in the Tools/parser directory."""
-
-import unittest
-import test.support
-import io
-import os
-import random
-import tokenize
-import ast
-
-from test.test_tools import basepath, toolsdir, skip_if_missing
-
-skip_if_missing()
-
-parser_path = os.path.join(toolsdir, "parser")
-
-with test.support.DirsOnSysPath(parser_path):
-    import unparse
-
-def read_pyfile(filename):
-    """Read and return the contents of a Python source file (as a
-    string), taking into account the file encoding."""
-    with open(filename, "rb") as pyfile:
-        encoding = tokenize.detect_encoding(pyfile.readline)[0]
-    with open(filename, "r", encoding=encoding) as pyfile:
-        source = pyfile.read()
-    return source
-
-for_else = """\
-def f():
-    for x in range(10):
-        break
-    else:
-        y = 2
-    z = 3
-"""
-
-while_else = """\
-def g():
-    while True:
-        break
-    else:
-        y = 2
-    z = 3
-"""
-
-relative_import = """\
-from . import fred
-from .. import barney
-from .australia import shrimp as prawns
-"""
-
-nonlocal_ex = """\
-def f():
-    x = 1
-    def g():
-        nonlocal x
-        x = 2
-        y = 7
-        def h():
-            nonlocal x, y
-"""
-
-# also acts as test for 'except ... as ...'
-raise_from = """\
-try:
-    1 / 0
-except ZeroDivisionError as e:
-    raise ArithmeticError from e
-"""
-
-class_decorator = """\
-@f1(arg)
-@f2
-class Foo: pass
-"""
-
-elif1 = """\
-if cond1:
-    suite1
-elif cond2:
-    suite2
-else:
-    suite3
-"""
-
-elif2 = """\
-if cond1:
-    suite1
-elif cond2:
-    suite2
-"""
-
-try_except_finally = """\
-try:
-    suite1
-except ex1:
-    suite2
-except ex2:
-    suite3
-else:
-    suite4
-finally:
-    suite5
-"""
-
-with_simple = """\
-with f():
-    suite1
-"""
-
-with_as = """\
-with f() as x:
-    suite1
-"""
-
-with_two_items = """\
-with f() as x, g() as y:
-    suite1
-"""
-
-class ASTTestCase(unittest.TestCase):
-    def assertASTEqual(self, ast1, ast2):
-        self.assertEqual(ast.dump(ast1), ast.dump(ast2))
-
-    def check_roundtrip(self, code1, filename="internal"):
-        ast1 = compile(code1, filename, "exec", ast.PyCF_ONLY_AST)
-        unparse_buffer = io.StringIO()
-        unparse.Unparser(ast1, unparse_buffer)
-        code2 = unparse_buffer.getvalue()
-        ast2 = compile(code2, filename, "exec", ast.PyCF_ONLY_AST)
-        self.assertASTEqual(ast1, ast2)
-
-class UnparseTestCase(ASTTestCase):
-    # Tests for specific bugs found in earlier versions of unparse
-
-    def test_fstrings(self):
-        # See issue 25180
-        self.check_roundtrip(r"""f'{f"{0}"*3}'""")
-        self.check_roundtrip(r"""f'{f"{y}"*3}'""")
-
-    def test_strings(self):
-        self.check_roundtrip("u'foo'")
-        self.check_roundtrip("r'foo'")
-        self.check_roundtrip("b'foo'")
-
-    def test_del_statement(self):
-        self.check_roundtrip("del x, y, z")
-
-    def test_shifts(self):
-        self.check_roundtrip("45 << 2")
-        self.check_roundtrip("13 >> 7")
-
-    def test_for_else(self):
-        self.check_roundtrip(for_else)
-
-    def test_while_else(self):
-        self.check_roundtrip(while_else)
-
-    def test_unary_parens(self):
-        self.check_roundtrip("(-1)**7")
-        self.check_roundtrip("(-1.)**8")
-        self.check_roundtrip("(-1j)**6")
-        self.check_roundtrip("not True or False")
-        self.check_roundtrip("True or not False")
-
-    def test_integer_parens(self):
-        self.check_roundtrip("3 .__abs__()")
-
-    def test_huge_float(self):
-        self.check_roundtrip("1e1000")
-        self.check_roundtrip("-1e1000")
-        self.check_roundtrip("1e1000j")
-        self.check_roundtrip("-1e1000j")
-
-    def test_min_int(self):
-        self.check_roundtrip(str(-2**31))
-        self.check_roundtrip(str(-2**63))
-
-    def test_imaginary_literals(self):
-        self.check_roundtrip("7j")
-        self.check_roundtrip("-7j")
-        self.check_roundtrip("0j")
-        self.check_roundtrip("-0j")
-
-    def test_lambda_parentheses(self):
-        self.check_roundtrip("(lambda: int)()")
-
-    def test_chained_comparisons(self):
-        self.check_roundtrip("1 < 4 <= 5")
-        self.check_roundtrip("a is b is c is not d")
-
-    def test_function_arguments(self):
-        self.check_roundtrip("def f(): pass")
-        self.check_roundtrip("def f(a): pass")
-        self.check_roundtrip("def f(b = 2): pass")
-        self.check_roundtrip("def f(a, b): pass")
-        self.check_roundtrip("def f(a, b = 2): pass")
-        self.check_roundtrip("def f(a = 5, b = 2): pass")
-        self.check_roundtrip("def f(*, a = 1, b = 2): pass")
-        self.check_roundtrip("def f(*, a = 1, b): pass")
-        self.check_roundtrip("def f(*, a, b = 2): pass")
-        self.check_roundtrip("def f(a, b = None, *, c, **kwds): pass")
-        self.check_roundtrip("def f(a=2, *args, c=5, d, **kwds): pass")
-        self.check_roundtrip("def f(*args, **kwargs): pass")
-
-    def test_relative_import(self):
-        self.check_roundtrip(relative_import)
-
-    def test_nonlocal(self):
-        self.check_roundtrip(nonlocal_ex)
-
-    def test_raise_from(self):
-        self.check_roundtrip(raise_from)
-
-    def test_bytes(self):
-        self.check_roundtrip("b'123'")
-
-    def test_annotations(self):
-        self.check_roundtrip("def f(a : int): pass")
-        self.check_roundtrip("def f(a: int = 5): pass")
-        self.check_roundtrip("def f(*args: [int]): pass")
-        self.check_roundtrip("def f(**kwargs: dict): pass")
-        self.check_roundtrip("def f() -> None: pass")
-
-    def test_set_literal(self):
-        self.check_roundtrip("{'a', 'b', 'c'}")
-
-    def test_set_comprehension(self):
-        self.check_roundtrip("{x for x in range(5)}")
-
-    def test_dict_comprehension(self):
-        self.check_roundtrip("{x: x*x for x in range(10)}")
-
-    def test_class_decorators(self):
-        self.check_roundtrip(class_decorator)
-
-    def test_class_definition(self):
-        self.check_roundtrip("class A(metaclass=type, *[], **{}): pass")
-
-    def test_elifs(self):
-        self.check_roundtrip(elif1)
-        self.check_roundtrip(elif2)
-
-    def test_try_except_finally(self):
-        self.check_roundtrip(try_except_finally)
-
-    def test_starred_assignment(self):
-        self.check_roundtrip("a, *b, c = seq")
-        self.check_roundtrip("a, (*b, c) = seq")
-        self.check_roundtrip("a, *b[0], c = seq")
-        self.check_roundtrip("a, *(b, c) = seq")
-
-    def test_with_simple(self):
-        self.check_roundtrip(with_simple)
-
-    def test_with_as(self):
-        self.check_roundtrip(with_as)
-
-    def test_with_two_items(self):
-        self.check_roundtrip(with_two_items)
-
-    def test_dict_unpacking_in_dict(self):
-        # See issue 26489
-        self.check_roundtrip(r"""{**{'y': 2}, 'x': 1}""")
-        self.check_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""")
-
-    def test_subscript(self):
-        self.check_roundtrip("a[i]")
-        self.check_roundtrip("a[i,]")
-        self.check_roundtrip("a[i, j]")
-        self.check_roundtrip("a[()]")
-        self.check_roundtrip("a[i:j]")
-        self.check_roundtrip("a[:j]")
-        self.check_roundtrip("a[i:]")
-        self.check_roundtrip("a[i:j:k]")
-        self.check_roundtrip("a[:j:k]")
-        self.check_roundtrip("a[i::k]")
-        self.check_roundtrip("a[i:j,]")
-        self.check_roundtrip("a[i:j, k]")
-
-
-class DirectoryTestCase(ASTTestCase):
-    """Test roundtrip behaviour on all files in Lib and Lib/test."""
-    NAMES = None
-
-    # test directories, relative to the root of the distribution
-    test_directories = 'Lib', os.path.join('Lib', 'test')
-
-    @classmethod
-    def get_names(cls):
-        if cls.NAMES is not None:
-            return cls.NAMES
-
-        names = []
-        for d in cls.test_directories:
-            test_dir = os.path.join(basepath, d)
-            for n in os.listdir(test_dir):
-                if n.endswith('.py') and not n.startswith('bad'):
-                    names.append(os.path.join(test_dir, n))
-
-        # Test limited subset of files unless the 'cpu' resource is specified.
-        if not test.support.is_resource_enabled("cpu"):
-            names = random.sample(names, 10)
-        # bpo-31174: Store the names sample to always test the same files.
-        # It prevents false alarms when hunting reference leaks.
-        cls.NAMES = names
-        return names
-
-    def test_files(self):
-        # get names of files to test
-        names = self.get_names()
-
-        for filename in names:
-            if test.support.verbose:
-                print('Testing %s' % filename)
-
-            # Some f-strings are not correctly round-tripped by
-            #  Tools/parser/unparse.py.  See issue 28002 for details.
-            #  We need to skip files that contain such f-strings.
-            if os.path.basename(filename) in ('test_fstring.py', ):
-                if test.support.verbose:
-                    print(f'Skipping {filename}: see issue 28002')
-                continue
-
-            with self.subTest(filename=filename):
-                source = read_pyfile(filename)
-                self.check_roundtrip(source)
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py
index 8eacf99..c03982b 100644
--- a/Lib/test/test_trace.py
+++ b/Lib/test/test_trace.py
@@ -180,7 +180,7 @@
         firstlineno_called = get_firstlineno(traced_doubler)
         expected = {
             (self.my_py_filename, firstlineno_calling + 1): 1,
-            # List compehentions work differently in 3.x, so the count
+            # List comprehensions work differently in 3.x, so the count
             # below changed compared to 2.x.
             (self.my_py_filename, firstlineno_calling + 2): 12,
             (self.my_py_filename, firstlineno_calling + 3): 1,
@@ -276,9 +276,8 @@
     def test_arg_errors(self):
         res = self.tracer.runfunc(traced_capturer, 1, 2, self=3, func=4)
         self.assertEqual(res, ((1, 2), {'self': 3, 'func': 4}))
-        with self.assertWarns(DeprecationWarning):
-            res = self.tracer.runfunc(func=traced_capturer, arg=1)
-        self.assertEqual(res, ((), {'arg': 1}))
+        with self.assertRaises(TypeError):
+            self.tracer.runfunc(func=traced_capturer, arg=1)
         with self.assertRaises(TypeError):
             self.tracer.runfunc()
 
@@ -507,7 +506,8 @@
             fd.write("print(type(sys.argv))\n")
 
         status, direct_stdout, stderr = assert_python_ok(TESTFN)
-        status, trace_stdout, stderr = assert_python_ok('-m', 'trace', '-l', TESTFN)
+        status, trace_stdout, stderr = assert_python_ok('-m', 'trace', '-l', TESTFN,
+                                                        PYTHONIOENCODING='utf-8')
         self.assertIn(direct_stdout.strip(), trace_stdout)
 
     def test_count_and_summary(self):
@@ -527,7 +527,8 @@
                 for i in range(10):
                     f()
             """))
-        status, stdout, _ = assert_python_ok('-m', 'trace', '-cs', filename)
+        status, stdout, _ = assert_python_ok('-m', 'trace', '-cs', filename,
+                                             PYTHONIOENCODING='utf-8')
         stdout = stdout.decode()
         self.assertEqual(status, 0)
         self.assertIn('lines   cov%   module   (path)', stdout)
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 96d85e2..8549ba2 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -7,7 +7,7 @@
 import unittest
 import re
 from test import support
-from test.support import TESTFN, Error, captured_output, unlink, cpython_only
+from test.support import TESTFN, Error, captured_output, unlink, cpython_only, ALWAYS_EQ
 from test.support.script_helper import assert_python_ok
 import textwrap
 
@@ -58,13 +58,13 @@
                                         SyntaxError)
         self.assertIn("^", err[2]) # third line has caret
         self.assertEqual(err[2].count('\n'), 1)   # and no additional newline
-        self.assertEqual(err[1].find("+"), err[2].find("^"))  # in the right place
+        self.assertEqual(err[1].find("+") + 1, err[2].find("^"))  # in the right place
 
         err = self.get_exception_format(self.syntax_error_with_caret_non_ascii,
                                         SyntaxError)
         self.assertIn("^", err[2]) # third line has caret
         self.assertEqual(err[2].count('\n'), 1)   # and no additional newline
-        self.assertEqual(err[1].find("+"), err[2].find("^"))  # in the right place
+        self.assertEqual(err[1].find("+") + 1, err[2].find("^"))  # in the right place
 
     def test_nocaret(self):
         exc = SyntaxError("error", ("x.py", 23, None, "bad syntax"))
@@ -78,14 +78,13 @@
         self.assertEqual(len(err), 4)
         self.assertEqual(err[1].strip(), "print(2)")
         self.assertIn("^", err[2])
-        self.assertEqual(err[1].find(")"), err[2].find("^"))
+        self.assertEqual(err[1].find(")") + 1, err[2].find("^"))
 
+        # No caret for "unexpected indent"
         err = self.get_exception_format(self.syntax_error_bad_indentation2,
                                         IndentationError)
-        self.assertEqual(len(err), 4)
+        self.assertEqual(len(err), 3)
         self.assertEqual(err[1].strip(), "print(2)")
-        self.assertIn("^", err[2])
-        self.assertEqual(err[1].find("p"), err[2].find("^"))
 
     def test_base_exception(self):
         # Test that exceptions derived from BaseException are formatted right
@@ -174,7 +173,6 @@
         # Issue #18960: coding spec should have no effect
         do_test("x=0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5)
 
-    @support.requires_type_collecting
     def test_print_traceback_at_exit(self):
         # Issue #22599: Ensure that it is possible to use the traceback module
         # to display an exception at Python exit
@@ -313,7 +311,7 @@
         with captured_output("stderr") as stderr_f:
             try:
                 f()
-            except RecursionError as exc:
+            except RecursionError:
                 render_exc()
             else:
                 self.fail("no recursion occurred")
@@ -360,7 +358,7 @@
         with captured_output("stderr") as stderr_g:
             try:
                 g()
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no value error was raised")
@@ -396,7 +394,7 @@
         with captured_output("stderr") as stderr_h:
             try:
                 h()
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no value error was raised")
@@ -424,7 +422,7 @@
         with captured_output("stderr") as stderr_g:
             try:
                 g(traceback._RECURSIVE_CUTOFF)
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no error raised")
@@ -452,7 +450,7 @@
         with captured_output("stderr") as stderr_g:
             try:
                 g(traceback._RECURSIVE_CUTOFF + 1)
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no error raised")
@@ -657,6 +655,7 @@
         self.assertIn('inner_raise() # Marker', blocks[2])
         self.check_zero_div(blocks[2])
 
+    @unittest.skipIf(support.use_old_parser(), "Pegen is arguably better here, so no need to fix this")
     def test_syntax_error_offset_at_eol(self):
         # See #10186.
         def e():
@@ -666,7 +665,7 @@
         def e():
             exec("x = 5 | 4 |")
         msg = self.get_report(e).splitlines()
-        self.assertEqual(msg[-2], '              ^')
+        self.assertEqual(msg[-2], '               ^')
 
     def test_message_none(self):
         # A message that looks like "None" should not be treated specially
@@ -679,6 +678,25 @@
         err = self.get_report(Exception(''))
         self.assertIn('Exception\n', err)
 
+    def test_syntax_error_various_offsets(self):
+        for offset in range(-5, 10):
+            for add in [0, 2]:
+                text = " "*add + "text%d" % offset
+                expected = ['  File "file.py", line 1']
+                if offset < 1:
+                    expected.append("    %s" % text.lstrip())
+                elif offset <= 6:
+                    expected.append("    %s" % text.lstrip())
+                    expected.append("    %s^" % (" "*(offset-1)))
+                else:
+                    expected.append("    %s" % text.lstrip())
+                    expected.append("    %s^" % (" "*5))
+                expected.append("SyntaxError: msg")
+                expected.append("")
+                err = self.get_report(SyntaxError("msg", ("file.py", 1, offset+add, text)))
+                exp = "\n".join(expected)
+                self.assertEqual(exp, err)
+
 
 class PyExcReportingTests(BaseExceptionReportingTests, unittest.TestCase):
     #
@@ -887,6 +905,8 @@
         # operator fallbacks to FrameSummary.__eq__.
         self.assertEqual(tuple(f), f)
         self.assertIsNone(f.locals)
+        self.assertNotEqual(f, object())
+        self.assertEqual(f, ALWAYS_EQ)
 
     def test_lazy_lines(self):
         linecache.clearcache()
@@ -1083,6 +1103,77 @@
         self.assertEqual(exc_info[0], exc.exc_type)
         self.assertEqual(str(exc_info[1]), str(exc))
 
+    def test_no_refs_to_exception_and_traceback_objects(self):
+        try:
+            1/0
+        except Exception:
+            exc_info = sys.exc_info()
+
+        refcnt1 = sys.getrefcount(exc_info[1])
+        refcnt2 = sys.getrefcount(exc_info[2])
+        exc = traceback.TracebackException(*exc_info)
+        self.assertEqual(sys.getrefcount(exc_info[1]), refcnt1)
+        self.assertEqual(sys.getrefcount(exc_info[2]), refcnt2)
+
+    def test_comparison_basic(self):
+        try:
+            1/0
+        except Exception:
+            exc_info = sys.exc_info()
+            exc = traceback.TracebackException(*exc_info)
+            exc2 = traceback.TracebackException(*exc_info)
+        self.assertIsNot(exc, exc2)
+        self.assertEqual(exc, exc2)
+        self.assertNotEqual(exc, object())
+        self.assertEqual(exc, ALWAYS_EQ)
+
+    def test_comparison_params_variations(self):
+        def raise_exc():
+            try:
+                raise ValueError('bad value')
+            except:
+                raise
+
+        def raise_with_locals():
+            x, y = 1, 2
+            raise_exc()
+
+        try:
+            raise_with_locals()
+        except Exception:
+            exc_info = sys.exc_info()
+
+        exc = traceback.TracebackException(*exc_info)
+        exc1 = traceback.TracebackException(*exc_info, limit=10)
+        exc2 = traceback.TracebackException(*exc_info, limit=2)
+
+        self.assertEqual(exc, exc1)      # limit=10 gets all frames
+        self.assertNotEqual(exc, exc2)   # limit=2 truncates the output
+
+        # locals change the output
+        exc3 = traceback.TracebackException(*exc_info, capture_locals=True)
+        self.assertNotEqual(exc, exc3)
+
+        # there are no locals in the innermost frame
+        exc4 = traceback.TracebackException(*exc_info, limit=-1)
+        exc5 = traceback.TracebackException(*exc_info, limit=-1, capture_locals=True)
+        self.assertEqual(exc4, exc5)
+
+        # there are locals in the next-to-innermost frame
+        exc6 = traceback.TracebackException(*exc_info, limit=-2)
+        exc7 = traceback.TracebackException(*exc_info, limit=-2, capture_locals=True)
+        self.assertNotEqual(exc6, exc7)
+
+    def test_comparison_equivalent_exceptions_are_equal(self):
+        excs = []
+        for _ in range(2):
+            try:
+                1/0
+            except:
+                excs.append(traceback.TracebackException(*sys.exc_info()))
+        self.assertEqual(excs[0], excs[1])
+        self.assertEqual(list(excs[0].format()), list(excs[1].format()))
+
     def test_unhashable(self):
         class UnhashableException(Exception):
             def __eq__(self, other):
@@ -1124,7 +1215,7 @@
         f = test_frame(c, None, None)
         tb = test_tb(f, 6, None)
         exc = traceback.TracebackException(Exception, e, tb, lookup_lines=False)
-        self.assertEqual({}, linecache.cache)
+        self.assertEqual(linecache.cache, {})
         linecache.updatecache('/foo.py', globals())
         self.assertEqual(exc.stack[0].line, "import sys")
 
diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py
index 4b9bf4e..c5ae4e6 100644
--- a/Lib/test/test_tracemalloc.py
+++ b/Lib/test/test_tracemalloc.py
@@ -36,7 +36,7 @@
     bytes_len = (size - EMPTY_STRING_SIZE)
     frames = get_frames(nframe, 1)
     data = b'x' * bytes_len
-    return data, tracemalloc.Traceback(frames)
+    return data, tracemalloc.Traceback(frames, min(len(frames), nframe))
 
 def create_snapshots():
     traceback_limit = 2
@@ -45,27 +45,27 @@
     # traceback_frames) tuples. traceback_frames is a tuple of (filename,
     # line_number) tuples.
     raw_traces = [
-        (0, 10, (('a.py', 2), ('b.py', 4))),
-        (0, 10, (('a.py', 2), ('b.py', 4))),
-        (0, 10, (('a.py', 2), ('b.py', 4))),
+        (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+        (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+        (0, 10, (('a.py', 2), ('b.py', 4)), 3),
 
-        (1, 2, (('a.py', 5), ('b.py', 4))),
+        (1, 2, (('a.py', 5), ('b.py', 4)), 3),
 
-        (2, 66, (('b.py', 1),)),
+        (2, 66, (('b.py', 1),), 1),
 
-        (3, 7, (('<unknown>', 0),)),
+        (3, 7, (('<unknown>', 0),), 1),
     ]
     snapshot = tracemalloc.Snapshot(raw_traces, traceback_limit)
 
     raw_traces2 = [
-        (0, 10, (('a.py', 2), ('b.py', 4))),
-        (0, 10, (('a.py', 2), ('b.py', 4))),
-        (0, 10, (('a.py', 2), ('b.py', 4))),
+        (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+        (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+        (0, 10, (('a.py', 2), ('b.py', 4)), 3),
 
-        (2, 2, (('a.py', 5), ('b.py', 4))),
-        (2, 5000, (('a.py', 5), ('b.py', 4))),
+        (2, 2, (('a.py', 5), ('b.py', 4)), 3),
+        (2, 5000, (('a.py', 5), ('b.py', 4)), 3),
 
-        (4, 400, (('c.py', 578),)),
+        (4, 400, (('c.py', 578),), 1),
     ]
     snapshot2 = tracemalloc.Snapshot(raw_traces2, traceback_limit)
 
@@ -125,7 +125,7 @@
 
         nframe = tracemalloc.get_traceback_limit()
         frames = get_frames(nframe, -3)
-        obj_traceback = tracemalloc.Traceback(frames)
+        obj_traceback = tracemalloc.Traceback(frames, min(len(frames), nframe))
 
         traceback = tracemalloc.get_object_traceback(obj)
         self.assertIsNotNone(traceback)
@@ -167,7 +167,7 @@
         trace = self.find_trace(traces, obj_traceback)
 
         self.assertIsInstance(trace, tuple)
-        domain, size, traceback = trace
+        domain, size, traceback, length = trace
         self.assertEqual(size, obj_size)
         self.assertEqual(traceback, obj_traceback._frames)
 
@@ -197,8 +197,8 @@
 
         trace1 = self.find_trace(traces, obj1_traceback)
         trace2 = self.find_trace(traces, obj2_traceback)
-        domain1, size1, traceback1 = trace1
-        domain2, size2, traceback2 = trace2
+        domain1, size1, traceback1, length1 = trace1
+        domain2, size2, traceback2, length2 = trace2
         self.assertIs(traceback2, traceback1)
 
     def test_get_traced_memory(self):
@@ -246,6 +246,30 @@
         traceback2 = tracemalloc.get_object_traceback(obj)
         self.assertIsNone(traceback2)
 
+    def test_reset_peak(self):
+        # Python allocates some internals objects, so the test must tolerate
+        # a small difference between the expected size and the real usage
+        tracemalloc.clear_traces()
+
+        # Example: allocate a large piece of memory, temporarily
+        large_sum = sum(list(range(100000)))
+        size1, peak1 = tracemalloc.get_traced_memory()
+
+        # reset_peak() resets peak to traced memory: peak2 < peak1
+        tracemalloc.reset_peak()
+        size2, peak2 = tracemalloc.get_traced_memory()
+        self.assertGreaterEqual(peak2, size2)
+        self.assertLess(peak2, peak1)
+
+        # check that peak continue to be updated if new memory is allocated:
+        # peak3 > peak2
+        obj_size = 1024 * 1024
+        obj, obj_traceback = allocate_bytes(obj_size)
+        size3, peak3 = tracemalloc.get_traced_memory()
+        self.assertGreaterEqual(peak3, size3)
+        self.assertGreater(peak3, peak2)
+        self.assertGreaterEqual(peak3 - peak2, obj_size)
+
     def test_is_tracing(self):
         tracemalloc.stop()
         self.assertFalse(tracemalloc.is_tracing())
@@ -259,6 +283,9 @@
         # take a snapshot
         snapshot = tracemalloc.take_snapshot()
 
+        # This can vary
+        self.assertGreater(snapshot.traces[1].traceback.total_nframe, 10)
+
         # write on disk
         snapshot.dump(support.TESTFN)
         self.addCleanup(support.unlink, support.TESTFN)
@@ -311,17 +338,14 @@
             finally:
                 os._exit(exitcode)
         else:
-            pid2, status = os.waitpid(pid, 0)
-            self.assertTrue(os.WIFEXITED(status))
-            exitcode = os.WEXITSTATUS(status)
-            self.assertEqual(exitcode, 0)
+            support.wait_process(pid, exitcode=0)
 
 
 class TestSnapshot(unittest.TestCase):
     maxDiff = 4000
 
     def test_create_snapshot(self):
-        raw_traces = [(0, 5, (('a.py', 2),))]
+        raw_traces = [(0, 5, (('a.py', 2),), 10)]
 
         with contextlib.ExitStack() as stack:
             stack.enter_context(patch.object(tracemalloc, 'is_tracing',
@@ -336,6 +360,7 @@
             self.assertEqual(len(snapshot.traces), 1)
             trace = snapshot.traces[0]
             self.assertEqual(trace.size, 5)
+            self.assertEqual(trace.traceback.total_nframe, 10)
             self.assertEqual(len(trace.traceback), 1)
             self.assertEqual(trace.traceback[0].filename, 'a.py')
             self.assertEqual(trace.traceback[0].lineno, 2)
@@ -351,11 +376,11 @@
         # exclude b.py
         snapshot3 = snapshot.filter_traces((filter1,))
         self.assertEqual(snapshot3.traces._traces, [
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (1, 2, (('a.py', 5), ('b.py', 4))),
-            (3, 7, (('<unknown>', 0),)),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (1, 2, (('a.py', 5), ('b.py', 4)), 3),
+            (3, 7, (('<unknown>', 0),), 1),
         ])
 
         # filter_traces() must not touch the original snapshot
@@ -364,10 +389,10 @@
         # only include two lines of a.py
         snapshot4 = snapshot3.filter_traces((filter2, filter3))
         self.assertEqual(snapshot4.traces._traces, [
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (1, 2, (('a.py', 5), ('b.py', 4))),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (1, 2, (('a.py', 5), ('b.py', 4)), 3),
         ])
 
         # No filter: just duplicate the snapshot
@@ -388,21 +413,21 @@
         # exclude a.py of domain 1
         snapshot3 = snapshot.filter_traces((filter1,))
         self.assertEqual(snapshot3.traces._traces, [
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (2, 66, (('b.py', 1),)),
-            (3, 7, (('<unknown>', 0),)),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (2, 66, (('b.py', 1),), 1),
+            (3, 7, (('<unknown>', 0),), 1),
         ])
 
         # include domain 1
         snapshot3 = snapshot.filter_traces((filter1,))
         self.assertEqual(snapshot3.traces._traces, [
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (2, 66, (('b.py', 1),)),
-            (3, 7, (('<unknown>', 0),)),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (2, 66, (('b.py', 1),), 1),
+            (3, 7, (('<unknown>', 0),), 1),
         ])
 
     def test_filter_traces_domain_filter(self):
@@ -413,17 +438,17 @@
         # exclude domain 2
         snapshot3 = snapshot.filter_traces((filter1,))
         self.assertEqual(snapshot3.traces._traces, [
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (0, 10, (('a.py', 2), ('b.py', 4))),
-            (1, 2, (('a.py', 5), ('b.py', 4))),
-            (2, 66, (('b.py', 1),)),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (0, 10, (('a.py', 2), ('b.py', 4)), 3),
+            (1, 2, (('a.py', 5), ('b.py', 4)), 3),
+            (2, 66, (('b.py', 1),), 1),
         ])
 
         # include domain 2
         snapshot3 = snapshot.filter_traces((filter2,))
         self.assertEqual(snapshot3.traces._traces, [
-            (3, 7, (('<unknown>', 0),)),
+            (3, 7, (('<unknown>', 0),), 1),
         ])
 
     def test_snapshot_group_by_line(self):
diff --git a/Lib/test/test_turtle.py b/Lib/test/test_turtle.py
index 2fd10cc..5d5f057 100644
--- a/Lib/test/test_turtle.py
+++ b/Lib/test/test_turtle.py
@@ -85,7 +85,7 @@
 
         self.assertEqual(parsed_cfg, expected)
 
-    def test_partial_config_dict_with_commments(self):
+    def test_partial_config_dict_with_comments(self):
 
         cfg_name = self.get_cfg_file(test_config_two)
         parsed_cfg = turtle.config_dict(cfg_name)
@@ -127,6 +127,14 @@
             self.assertAlmostEqual(
                 i, j, msg='values at index {} do not match'.format(idx))
 
+class Multiplier:
+
+    def __mul__(self, other):
+        return f'M*{other}'
+
+    def __rmul__(self, other):
+        return f'{other}*M'
+
 
 class TestVec2D(VectorComparisonMixin, unittest.TestCase):
 
@@ -208,9 +216,15 @@
         self.assertAlmostEqual(answer, expected)
 
         vec = Vec2D(0.5, 3)
-        answer = vec * 10
         expected = Vec2D(5, 30)
-        self.assertVectorsAlmostEqual(answer, expected)
+        self.assertVectorsAlmostEqual(vec * 10, expected)
+        self.assertVectorsAlmostEqual(10 * vec, expected)
+        self.assertVectorsAlmostEqual(vec * 10.0, expected)
+        self.assertVectorsAlmostEqual(10.0 * vec, expected)
+
+        M = Multiplier()
+        self.assertEqual(vec * M, Vec2D(f"{vec[0]}*M", f"{vec[1]}*M"))
+        self.assertEqual(M * vec, f'M*{vec}')
 
     def test_vector_negative(self):
         vec = Vec2D(10, -10)
diff --git a/Lib/test/test_type_comments.py b/Lib/test/test_type_comments.py
index 43be54e..71d1430 100644
--- a/Lib/test/test_type_comments.py
+++ b/Lib/test/test_type_comments.py
@@ -1,6 +1,7 @@
 import ast
 import sys
 import unittest
+from test import support
 
 
 funcdef = """\
@@ -390,7 +391,7 @@
         arg = tree.argtypes[0]
         self.assertEqual(arg.id, "int")
         self.assertEqual(tree.returns.value.id, "List")
-        self.assertEqual(tree.returns.slice.value.id, "str")
+        self.assertEqual(tree.returns.slice.id, "str")
 
         tree = parse_func_type_input("(int, *str, **Any) -> float")
         self.assertEqual(tree.argtypes[0].id, "int")
@@ -398,6 +399,14 @@
         self.assertEqual(tree.argtypes[2].id, "Any")
         self.assertEqual(tree.returns.id, "float")
 
+        tree = parse_func_type_input("(*int) -> None")
+        self.assertEqual(tree.argtypes[0].id, "int")
+        tree = parse_func_type_input("(**int) -> None")
+        self.assertEqual(tree.argtypes[0].id, "int")
+        tree = parse_func_type_input("(*int, **str) -> None")
+        self.assertEqual(tree.argtypes[0].id, "int")
+        self.assertEqual(tree.argtypes[1].id, "str")
+
         with self.assertRaises(SyntaxError):
             tree = parse_func_type_input("(int, *str, *Any) -> float")
 
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 56848c1..49dc5bf 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -466,7 +466,7 @@
 
         # No format code means use g, but must have a decimal
         # and a number after the decimal.  This is tricky, because
-        # a totaly empty format specifier means something else.
+        # a totally empty format specifier means something else.
         # So, just use a sign flag
         test(1e200, '+g', '+1e+200')
         test(1e200, '+', '+1e+200')
@@ -622,8 +622,13 @@
         self.assertEqual(attrs, {
              '__contains__',
              '__getitem__',
+             '__class_getitem__',
+             '__ior__',
              '__iter__',
              '__len__',
+             '__or__',
+             '__reversed__',
+             '__ror__',
              'copy',
              'get',
              'items',
@@ -764,6 +769,14 @@
         self.assertEqual(set(view.values()), set(values))
         self.assertEqual(set(view.items()), set(items))
 
+    def test_reversed(self):
+        d = {'a': 1, 'b': 2, 'foo': 0, 'c': 3, 'd': 4}
+        mp = self.mappingproxy(d)
+        del d['foo']
+        r = reversed(mp)
+        self.assertEqual(list(r), list('dcba'))
+        self.assertRaises(StopIteration, next, r)
+
     def test_copy(self):
         original = {'key1': 27, 'key2': 51, 'key3': 93}
         view = self.mappingproxy(original)
@@ -774,6 +787,22 @@
         self.assertEqual(view['key1'], 70)
         self.assertEqual(copy['key1'], 27)
 
+    def test_union(self):
+        mapping = {'a': 0, 'b': 1, 'c': 2}
+        view = self.mappingproxy(mapping)
+        with self.assertRaises(TypeError):
+            view | [('r', 2), ('d', 2)]
+        with self.assertRaises(TypeError):
+            [('r', 2), ('d', 2)] | view
+        with self.assertRaises(TypeError):
+            view |= [('r', 2), ('d', 2)]
+        other = {'c': 3, 'p': 0}
+        self.assertDictEqual(view | other, {'a': 0, 'b': 1, 'c': 3, 'p': 0})
+        self.assertDictEqual(other | view, {'c': 2, 'p': 0, 'a': 0, 'b': 1})
+        self.assertEqual(view, {'a': 0, 'b': 1, 'c': 2})
+        self.assertDictEqual(mapping, {'a': 0, 'b': 1, 'c': 2})
+        self.assertDictEqual(other, {'c': 3, 'p': 0})
+
 
 class ClassCreationTests(unittest.TestCase):
 
@@ -1233,8 +1262,8 @@
         ns2._y = 5
         name = "namespace"
 
-        self.assertEqual(repr(ns1), "{name}(w=3, x=1, y=2)".format(name=name))
-        self.assertEqual(repr(ns2), "{name}(_y=5, x='spam')".format(name=name))
+        self.assertEqual(repr(ns1), "{name}(x=1, y=2, w=3)".format(name=name))
+        self.assertEqual(repr(ns2), "{name}(x='spam', _y=5)".format(name=name))
 
     def test_equal(self):
         ns1 = types.SimpleNamespace(x=1)
@@ -1283,7 +1312,7 @@
         ns3.spam = ns2
         name = "namespace"
         repr1 = "{name}(c='cookie', spam={name}(...))".format(name=name)
-        repr2 = "{name}(spam={name}(spam={name}(...), x=1))".format(name=name)
+        repr2 = "{name}(spam={name}(x=1, spam={name}(...)))".format(name=name)
 
         self.assertEqual(repr(ns1), repr1)
         self.assertEqual(repr(ns2), repr2)
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 83bfef1..13cf20e 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -3,14 +3,14 @@
 import pickle
 import re
 import sys
-from unittest import TestCase, main, skipUnless, SkipTest, skip
+from unittest import TestCase, main, skipUnless, skip
 from copy import copy, deepcopy
 
 from typing import Any, NoReturn
 from typing import TypeVar, AnyStr
 from typing import T, KT, VT  # Not in __all__.
 from typing import Union, Optional, Literal
-from typing import Tuple, List, MutableMapping
+from typing import Tuple, List, Dict, MutableMapping
 from typing import Callable
 from typing import Generic, ClassVar, Final, final, Protocol
 from typing import cast, runtime_checkable
@@ -22,6 +22,7 @@
 from typing import NamedTuple, TypedDict
 from typing import IO, TextIO, BinaryIO
 from typing import Pattern, Match
+from typing import Annotated, ForwardRef
 import abc
 import typing
 import weakref
@@ -299,6 +300,8 @@
         self.assertEqual(repr(u), repr(int))
         u = Union[List[int], int]
         self.assertEqual(repr(u), 'typing.Union[typing.List[int], int]')
+        u = Union[list[int], dict[str, float]]
+        self.assertEqual(repr(u), 'typing.Union[list[int], dict[str, float]]')
 
     def test_cannot_subclass(self):
         with self.assertRaises(TypeError):
@@ -367,10 +370,8 @@
     def test_etree(self):
         # See https://github.com/python/typing/issues/229
         # (Only relevant for Python 2.)
-        try:
-            from xml.etree.cElementTree import Element
-        except ImportError:
-            raise SkipTest("cElementTree not found")
+        from xml.etree.ElementTree import Element
+
         Union[Element, str]  # Shouldn't crash
 
         def Elem(*args):
@@ -412,6 +413,7 @@
         self.assertEqual(repr(Tuple[()]), 'typing.Tuple[()]')
         self.assertEqual(repr(Tuple[int, float]), 'typing.Tuple[int, float]')
         self.assertEqual(repr(Tuple[int, ...]), 'typing.Tuple[int, ...]')
+        self.assertEqual(repr(Tuple[list[int]]), 'typing.Tuple[list[int]]')
 
     def test_errors(self):
         with self.assertRaises(TypeError):
@@ -484,6 +486,8 @@
         self.assertEqual(repr(ct2), 'typing.Callable[[str, float], int]')
         ctv = Callable[..., str]
         self.assertEqual(repr(ctv), 'typing.Callable[..., str]')
+        ct3 = Callable[[str, float], list[int]]
+        self.assertEqual(repr(ct3), 'typing.Callable[[str, float], list[int]]')
 
     def test_callable_with_ellipsis(self):
 
@@ -528,6 +532,7 @@
         self.assertEqual(repr(Literal[int]), "typing.Literal[int]")
         self.assertEqual(repr(Literal), "typing.Literal")
         self.assertEqual(repr(Literal[None]), "typing.Literal[None]")
+        self.assertEqual(repr(Literal[1, 2, 3, 3]), "typing.Literal[1, 2, 3]")
 
     def test_cannot_init(self):
         with self.assertRaises(TypeError):
@@ -559,6 +564,35 @@
         with self.assertRaises(TypeError):
             Literal[1][1]
 
+    def test_equal(self):
+        self.assertNotEqual(Literal[0], Literal[False])
+        self.assertNotEqual(Literal[True], Literal[1])
+        self.assertNotEqual(Literal[1], Literal[2])
+        self.assertNotEqual(Literal[1, True], Literal[1])
+        self.assertEqual(Literal[1], Literal[1])
+        self.assertEqual(Literal[1, 2], Literal[2, 1])
+        self.assertEqual(Literal[1, 2, 3], Literal[1, 2, 3, 3])
+
+    def test_hash(self):
+        self.assertEqual(hash(Literal[1]), hash(Literal[1]))
+        self.assertEqual(hash(Literal[1, 2]), hash(Literal[2, 1]))
+        self.assertEqual(hash(Literal[1, 2, 3]), hash(Literal[1, 2, 3, 3]))
+
+    def test_args(self):
+        self.assertEqual(Literal[1, 2, 3].__args__, (1, 2, 3))
+        self.assertEqual(Literal[1, 2, 3, 3].__args__, (1, 2, 3))
+        self.assertEqual(Literal[1, Literal[2], Literal[3, 4]].__args__, (1, 2, 3, 4))
+        # Mutable arguments will not be deduplicated
+        self.assertEqual(Literal[[], []].__args__, ([], []))
+
+    def test_flatten(self):
+        l1 = Literal[Literal[1], Literal[2], Literal[3]]
+        l2 = Literal[Literal[1, 2], 3]
+        l3 = Literal[Literal[1, 2, 3]]
+        for l in l1, l2, l3:
+            self.assertEqual(l, Literal[1, 2, 3])
+            self.assertEqual(l.__args__, (1, 2, 3))
+
 
 XK = TypeVar('XK', str, bytes)
 XV = TypeVar('XV')
@@ -1419,8 +1453,6 @@
         T = TypeVar('T')
         S = TypeVar('S')
         with self.assertRaises(TypeError):
-            Generic[T]()
-        with self.assertRaises(TypeError):
             Generic[T][T]
         with self.assertRaises(TypeError):
             Generic[T][S]
@@ -1751,17 +1783,23 @@
         self.assertEqual(repr(Union[Tuple, Tuple[int]]).replace('typing.', ''),
                          'Union[Tuple, Tuple[int]]')
         self.assertEqual(repr(Callable[..., Optional[T]][int]).replace('typing.', ''),
-                         'Callable[..., Union[int, NoneType]]')
+                         'Callable[..., Optional[int]]')
         self.assertEqual(repr(Callable[[], List[T]][int]).replace('typing.', ''),
                          'Callable[[], List[int]]')
 
     def test_generic_forward_ref(self):
         def foobar(x: List[List['CC']]): ...
+        def foobar2(x: list[list[ForwardRef('CC')]]): ...
         class CC: ...
         self.assertEqual(
             get_type_hints(foobar, globals(), locals()),
             {'x': List[List[CC]]}
         )
+        self.assertEqual(
+            get_type_hints(foobar2, globals(), locals()),
+            {'x': list[list[CC]]}
+        )
+
         T = TypeVar('T')
         AT = Tuple[T, ...]
         def barfoo(x: AT): ...
@@ -1783,10 +1821,11 @@
         self.assertEqual(T1[int, T].__origin__, T1)
 
         self.assertEqual(T2.__parameters__, (T,))
-        with self.assertRaises(TypeError):
-            T1[int]
-        with self.assertRaises(TypeError):
-            T2[int, str]
+        # These don't work because of tuple.__class_item__
+        ## with self.assertRaises(TypeError):
+        ##     T1[int]
+        ## with self.assertRaises(TypeError):
+        ##     T2[int, str]
 
         self.assertEqual(repr(C1[int]).split('.')[-1], 'C1[int]')
         self.assertEqual(C2.__parameters__, ())
@@ -1825,22 +1864,22 @@
         self.clear_caches()
         class MyTup(Tuple[T, T]): ...
         self.assertIs(MyTup[int]().__class__, MyTup)
-        self.assertIs(MyTup[int]().__orig_class__, MyTup[int])
+        self.assertEqual(MyTup[int]().__orig_class__, MyTup[int])
         class MyCall(Callable[..., T]):
             def __call__(self): return None
         self.assertIs(MyCall[T]().__class__, MyCall)
-        self.assertIs(MyCall[T]().__orig_class__, MyCall[T])
+        self.assertEqual(MyCall[T]().__orig_class__, MyCall[T])
         class MyDict(typing.Dict[T, T]): ...
         self.assertIs(MyDict[int]().__class__, MyDict)
-        self.assertIs(MyDict[int]().__orig_class__, MyDict[int])
+        self.assertEqual(MyDict[int]().__orig_class__, MyDict[int])
         class MyDef(typing.DefaultDict[str, T]): ...
         self.assertIs(MyDef[int]().__class__, MyDef)
-        self.assertIs(MyDef[int]().__orig_class__, MyDef[int])
+        self.assertEqual(MyDef[int]().__orig_class__, MyDef[int])
         # ChainMap was added in 3.3
         if sys.version_info >= (3, 3):
             class MyChain(typing.ChainMap[str, T]): ...
             self.assertIs(MyChain[int]().__class__, MyChain)
-            self.assertIs(MyChain[int]().__orig_class__, MyChain[int])
+            self.assertEqual(MyChain[int]().__orig_class__, MyChain[int])
 
     def test_all_repr_eq_any(self):
         objs = (getattr(typing, el) for el in typing.__all__)
@@ -2269,6 +2308,8 @@
         self.assertEqual(repr(cv), 'typing.Final[int]')
         cv = Final[Employee]
         self.assertEqual(repr(cv), 'typing.Final[%s.Employee]' % __name__)
+        cv = Final[tuple[int]]
+        self.assertEqual(repr(cv), 'typing.Final[tuple[int]]')
 
     def test_cannot_subclass(self):
         with self.assertRaises(TypeError):
@@ -2446,6 +2487,18 @@
         self.assertEqual(get_type_hints(foo, globals(), locals()),
                          {'a': Tuple[T]})
 
+        def foo(a: tuple[ForwardRef('T')]):
+            pass
+
+        self.assertEqual(get_type_hints(foo, globals(), locals()),
+                         {'a': tuple[T]})
+
+    def test_double_forward(self):
+        def foo(a: 'List[\'int\']'):
+            pass
+        self.assertEqual(get_type_hints(foo, globals(), locals()),
+                         {'a': List[int]})
+
     def test_forward_recursion_actually(self):
         def namespace1():
             a = typing.ForwardRef('A')
@@ -2898,6 +2951,86 @@
         self.assertEqual(gth(ForRefExample.func), expects)
         self.assertEqual(gth(ForRefExample.nested), expects)
 
+    def test_get_type_hints_annotated(self):
+        def foobar(x: List['X']): ...
+        X = Annotated[int, (1, 10)]
+        self.assertEqual(
+            get_type_hints(foobar, globals(), locals()),
+            {'x': List[int]}
+        )
+        self.assertEqual(
+            get_type_hints(foobar, globals(), locals(), include_extras=True),
+            {'x': List[Annotated[int, (1, 10)]]}
+        )
+
+        def foobar(x: list[ForwardRef('X')]): ...
+        X = Annotated[int, (1, 10)]
+        self.assertEqual(
+            get_type_hints(foobar, globals(), locals()),
+            {'x': list[int]}
+        )
+        self.assertEqual(
+            get_type_hints(foobar, globals(), locals(), include_extras=True),
+            {'x': list[Annotated[int, (1, 10)]]}
+        )
+
+        BA = Tuple[Annotated[T, (1, 0)], ...]
+        def barfoo(x: BA): ...
+        self.assertEqual(get_type_hints(barfoo, globals(), locals())['x'], Tuple[T, ...])
+        self.assertIs(
+            get_type_hints(barfoo, globals(), locals(), include_extras=True)['x'],
+            BA
+        )
+
+        BA = tuple[Annotated[T, (1, 0)], ...]
+        def barfoo(x: BA): ...
+        self.assertEqual(get_type_hints(barfoo, globals(), locals())['x'], tuple[T, ...])
+        self.assertIs(
+            get_type_hints(barfoo, globals(), locals(), include_extras=True)['x'],
+            BA
+        )
+
+        def barfoo2(x: typing.Callable[..., Annotated[List[T], "const"]],
+                    y: typing.Union[int, Annotated[T, "mutable"]]): ...
+        self.assertEqual(
+            get_type_hints(barfoo2, globals(), locals()),
+            {'x': typing.Callable[..., List[T]], 'y': typing.Union[int, T]}
+        )
+
+        BA2 = typing.Callable[..., List[T]]
+        def barfoo3(x: BA2): ...
+        self.assertIs(
+            get_type_hints(barfoo3, globals(), locals(), include_extras=True)["x"],
+            BA2
+        )
+
+    def test_get_type_hints_annotated_refs(self):
+
+        Const = Annotated[T, "Const"]
+
+        class MySet(Generic[T]):
+
+            def __ior__(self, other: "Const[MySet[T]]") -> "MySet[T]":
+                ...
+
+            def __iand__(self, other: Const["MySet[T]"]) -> "MySet[T]":
+                ...
+
+        self.assertEqual(
+            get_type_hints(MySet.__iand__, globals(), locals()),
+            {'other': MySet[T], 'return': MySet[T]}
+        )
+
+        self.assertEqual(
+            get_type_hints(MySet.__iand__, globals(), locals(), include_extras=True),
+            {'other': Const[MySet[T]], 'return': MySet[T]}
+        )
+
+        self.assertEqual(
+            get_type_hints(MySet.__ior__, globals(), locals()),
+            {'other': MySet[T], 'return': MySet[T]}
+        )
+
 
 class GetUtilitiesTestCase(TestCase):
     def test_get_origin(self):
@@ -2913,9 +3046,12 @@
         self.assertIs(get_origin(Generic), Generic)
         self.assertIs(get_origin(Generic[T]), Generic)
         self.assertIs(get_origin(List[Tuple[T, T]][int]), list)
+        self.assertIs(get_origin(Annotated[T, 'thing']), Annotated)
         self.assertIs(get_origin(List), list)
         self.assertIs(get_origin(Tuple), tuple)
         self.assertIs(get_origin(Callable), collections.abc.Callable)
+        self.assertIs(get_origin(list[int]), list)
+        self.assertIs(get_origin(list), None)
 
     def test_get_args(self):
         T = TypeVar('T')
@@ -2937,9 +3073,12 @@
                          (int, Callable[[Tuple[T, ...]], str]))
         self.assertEqual(get_args(Tuple[int, ...]), (int, ...))
         self.assertEqual(get_args(Tuple[()]), ((),))
+        self.assertEqual(get_args(Annotated[T, 'one', 2, ['three']]), (T, 'one', 2, ['three']))
         self.assertEqual(get_args(List), ())
         self.assertEqual(get_args(Tuple), ())
         self.assertEqual(get_args(Callable), ())
+        self.assertEqual(get_args(list[int]), (int,))
+        self.assertEqual(get_args(list), ())
 
 
 class CollectionsAbcTests(BaseTestCase):
@@ -3075,6 +3214,17 @@
     def test_dict(self):
         self.assertIsSubclass(dict, typing.Dict)
 
+    def test_dict_subscribe(self):
+        K = TypeVar('K')
+        V = TypeVar('V')
+        self.assertEqual(Dict[K, V][str, int], Dict[str, int])
+        self.assertEqual(Dict[K, int][str], Dict[str, int])
+        self.assertEqual(Dict[str, V][int], Dict[str, int])
+        self.assertEqual(Dict[K, List[V]][str, int], Dict[str, List[int]])
+        self.assertEqual(Dict[K, List[int]][str], Dict[str, List[int]])
+        self.assertEqual(Dict[K, list[V]][str, int], Dict[str, list[int]])
+        self.assertEqual(Dict[K, list[int]][str], Dict[str, list[int]])
+
     def test_no_list_instantiation(self):
         with self.assertRaises(TypeError):
             typing.List()
@@ -3516,7 +3666,6 @@
         self.assertEqual(Emp._fields, ('name', 'id'))
         self.assertEqual(Emp.__annotations__,
                          collections.OrderedDict([('name', str), ('id', int)]))
-        self.assertIs(Emp._field_types, Emp.__annotations__)
 
     def test_namedtuple_pyversion(self):
         if sys.version_info[:2] < (3, 6):
@@ -3536,7 +3685,6 @@
         self.assertEqual(CoolEmployee._fields, ('name', 'cool'))
         self.assertEqual(CoolEmployee.__annotations__,
                          collections.OrderedDict(name=str, cool=int))
-        self.assertIs(CoolEmployee._field_types, CoolEmployee.__annotations__)
 
     def test_annotation_usage_with_default(self):
         jelle = CoolEmployeeWithDefault('Jelle')
@@ -3549,15 +3697,14 @@
 
         self.assertEqual(CoolEmployeeWithDefault.__name__, 'CoolEmployeeWithDefault')
         self.assertEqual(CoolEmployeeWithDefault._fields, ('name', 'cool'))
-        self.assertEqual(CoolEmployeeWithDefault._field_types, dict(name=str, cool=int))
+        self.assertEqual(CoolEmployeeWithDefault.__annotations__,
+                         dict(name=str, cool=int))
         self.assertEqual(CoolEmployeeWithDefault._field_defaults, dict(cool=0))
 
         with self.assertRaises(TypeError):
-            exec("""
-class NonDefaultAfterDefault(NamedTuple):
-    x: int = 3
-    y: int
-""")
+            class NonDefaultAfterDefault(NamedTuple):
+                x: int = 3
+                y: int
 
     def test_annotation_usage_with_methods(self):
         self.assertEqual(XMeth(1).double(), 2)
@@ -3566,20 +3713,23 @@
         self.assertEqual(XRepr(1, 2) + XRepr(3), 0)
 
         with self.assertRaises(AttributeError):
-            exec("""
-class XMethBad(NamedTuple):
-    x: int
-    def _fields(self):
-        return 'no chance for this'
-""")
+            class XMethBad(NamedTuple):
+                x: int
+                def _fields(self):
+                    return 'no chance for this'
 
         with self.assertRaises(AttributeError):
-            exec("""
-class XMethBad2(NamedTuple):
-    x: int
-    def _source(self):
-        return 'no chance for this as well'
-""")
+            class XMethBad2(NamedTuple):
+                x: int
+                def _source(self):
+                    return 'no chance for this as well'
+
+    def test_multiple_inheritance(self):
+        class A:
+            pass
+        with self.assertRaises(TypeError):
+            class X(NamedTuple, A):
+                x: int
 
     def test_namedtuple_keyword_usage(self):
         LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
@@ -3589,7 +3739,6 @@
         self.assertEqual(LocalEmployee.__name__, 'LocalEmployee')
         self.assertEqual(LocalEmployee._fields, ('name', 'age'))
         self.assertEqual(LocalEmployee.__annotations__, dict(name=str, age=int))
-        self.assertIs(LocalEmployee._field_types, LocalEmployee.__annotations__)
         with self.assertRaises(TypeError):
             NamedTuple('Name', [('x', int)], y=str)
         with self.assertRaises(TypeError):
@@ -3614,16 +3763,10 @@
             NamedTuple('Emp', [('name', str)], None)
         with self.assertRaises(ValueError):
             NamedTuple('Emp', [('_name', str)])
-
-        with self.assertWarns(DeprecationWarning):
-            Emp = NamedTuple(typename='Emp', name=str, id=int)
-        self.assertEqual(Emp.__name__, 'Emp')
-        self.assertEqual(Emp._fields, ('name', 'id'))
-
-        with self.assertWarns(DeprecationWarning):
-            Emp = NamedTuple('Emp', fields=[('name', str), ('id', int)])
-        self.assertEqual(Emp.__name__, 'Emp')
-        self.assertEqual(Emp._fields, ('name', 'id'))
+        with self.assertRaises(TypeError):
+            NamedTuple(typename='Emp', name=str, id=int)
+        with self.assertRaises(TypeError):
+            NamedTuple('Emp', fields=[('name', str), ('id', int)])
 
     def test_copy_and_pickle(self):
         global Emp  # pickle wants to reference the class by name
@@ -3696,6 +3839,7 @@
             TypedDict()
         with self.assertRaises(TypeError):
             TypedDict('Emp', [('name', str)], None)
+
         with self.assertRaises(TypeError):
             TypedDict(_typename='Emp', name=str, id=int)
         with self.assertRaises(TypeError):
@@ -3760,6 +3904,45 @@
         self.assertEqual(Options(log_level=2), {'log_level': 2})
         self.assertEqual(Options.__total__, False)
 
+    def test_optional_keys(self):
+        class Point2Dor3D(Point2D, total=False):
+            z: int
+
+        assert Point2Dor3D.__required_keys__ == frozenset(['x', 'y'])
+        assert Point2Dor3D.__optional_keys__ == frozenset(['z'])
+
+    def test_keys_inheritance(self):
+        class BaseAnimal(TypedDict):
+            name: str
+
+        class Animal(BaseAnimal, total=False):
+            voice: str
+            tail: bool
+
+        class Cat(Animal):
+            fur_color: str
+
+        assert BaseAnimal.__required_keys__ == frozenset(['name'])
+        assert BaseAnimal.__optional_keys__ == frozenset([])
+        assert BaseAnimal.__annotations__ == {'name': str}
+
+        assert Animal.__required_keys__ == frozenset(['name'])
+        assert Animal.__optional_keys__ == frozenset(['tail', 'voice'])
+        assert Animal.__annotations__ == {
+            'name': str,
+            'tail': bool,
+            'voice': str,
+        }
+
+        assert Cat.__required_keys__ == frozenset(['name', 'fur_color'])
+        assert Cat.__optional_keys__ == frozenset(['tail', 'voice'])
+        assert Cat.__annotations__ == {
+            'fur_color': str,
+            'name': str,
+            'tail': bool,
+            'voice': str,
+        }
+
 
 class IOTests(BaseTestCase):
 
@@ -3856,6 +4039,179 @@
                          "type 're.Match' is not an acceptable base type")
 
 
+class AnnotatedTests(BaseTestCase):
+
+    def test_repr(self):
+        self.assertEqual(
+            repr(Annotated[int, 4, 5]),
+            "typing.Annotated[int, 4, 5]"
+        )
+        self.assertEqual(
+            repr(Annotated[List[int], 4, 5]),
+            "typing.Annotated[typing.List[int], 4, 5]"
+        )
+
+    def test_flatten(self):
+        A = Annotated[Annotated[int, 4], 5]
+        self.assertEqual(A, Annotated[int, 4, 5])
+        self.assertEqual(A.__metadata__, (4, 5))
+        self.assertEqual(A.__origin__, int)
+
+    def test_specialize(self):
+        L = Annotated[List[T], "my decoration"]
+        LI = Annotated[List[int], "my decoration"]
+        self.assertEqual(L[int], Annotated[List[int], "my decoration"])
+        self.assertEqual(L[int].__metadata__, ("my decoration",))
+        self.assertEqual(L[int].__origin__, List[int])
+        with self.assertRaises(TypeError):
+            LI[int]
+        with self.assertRaises(TypeError):
+            L[int, float]
+
+    def test_hash_eq(self):
+        self.assertEqual(len({Annotated[int, 4, 5], Annotated[int, 4, 5]}), 1)
+        self.assertNotEqual(Annotated[int, 4, 5], Annotated[int, 5, 4])
+        self.assertNotEqual(Annotated[int, 4, 5], Annotated[str, 4, 5])
+        self.assertNotEqual(Annotated[int, 4], Annotated[int, 4, 4])
+        self.assertEqual(
+            {Annotated[int, 4, 5], Annotated[int, 4, 5], Annotated[T, 4, 5]},
+            {Annotated[int, 4, 5], Annotated[T, 4, 5]}
+        )
+
+    def test_instantiate(self):
+        class C:
+            classvar = 4
+
+            def __init__(self, x):
+                self.x = x
+
+            def __eq__(self, other):
+                if not isinstance(other, C):
+                    return NotImplemented
+                return other.x == self.x
+
+        A = Annotated[C, "a decoration"]
+        a = A(5)
+        c = C(5)
+        self.assertEqual(a, c)
+        self.assertEqual(a.x, c.x)
+        self.assertEqual(a.classvar, c.classvar)
+
+    def test_instantiate_generic(self):
+        MyCount = Annotated[typing.Counter[T], "my decoration"]
+        self.assertEqual(MyCount([4, 4, 5]), {4: 2, 5: 1})
+        self.assertEqual(MyCount[int]([4, 4, 5]), {4: 2, 5: 1})
+
+    def test_cannot_instantiate_forward(self):
+        A = Annotated["int", (5, 6)]
+        with self.assertRaises(TypeError):
+            A(5)
+
+    def test_cannot_instantiate_type_var(self):
+        A = Annotated[T, (5, 6)]
+        with self.assertRaises(TypeError):
+            A(5)
+
+    def test_cannot_getattr_typevar(self):
+        with self.assertRaises(AttributeError):
+            Annotated[T, (5, 7)].x
+
+    def test_attr_passthrough(self):
+        class C:
+            classvar = 4
+
+        A = Annotated[C, "a decoration"]
+        self.assertEqual(A.classvar, 4)
+        A.x = 5
+        self.assertEqual(C.x, 5)
+
+    def test_hash_eq(self):
+        self.assertEqual(len({Annotated[int, 4, 5], Annotated[int, 4, 5]}), 1)
+        self.assertNotEqual(Annotated[int, 4, 5], Annotated[int, 5, 4])
+        self.assertNotEqual(Annotated[int, 4, 5], Annotated[str, 4, 5])
+        self.assertNotEqual(Annotated[int, 4], Annotated[int, 4, 4])
+        self.assertEqual(
+            {Annotated[int, 4, 5], Annotated[int, 4, 5], Annotated[T, 4, 5]},
+            {Annotated[int, 4, 5], Annotated[T, 4, 5]}
+        )
+
+    def test_cannot_subclass(self):
+        with self.assertRaisesRegex(TypeError, "Cannot subclass .*Annotated"):
+            class C(Annotated):
+                pass
+
+    def test_cannot_check_instance(self):
+        with self.assertRaises(TypeError):
+            isinstance(5, Annotated[int, "positive"])
+
+    def test_cannot_check_subclass(self):
+        with self.assertRaises(TypeError):
+            issubclass(int, Annotated[int, "positive"])
+
+    def test_pickle(self):
+        samples = [typing.Any, typing.Union[int, str],
+                   typing.Optional[str], Tuple[int, ...],
+                   typing.Callable[[str], bytes]]
+
+        for t in samples:
+            x = Annotated[t, "a"]
+
+            for prot in range(pickle.HIGHEST_PROTOCOL + 1):
+                with self.subTest(protocol=prot, type=t):
+                    pickled = pickle.dumps(x, prot)
+                    restored = pickle.loads(pickled)
+                    self.assertEqual(x, restored)
+
+        global _Annotated_test_G
+
+        class _Annotated_test_G(Generic[T]):
+            x = 1
+
+        G = Annotated[_Annotated_test_G[int], "A decoration"]
+        G.foo = 42
+        G.bar = 'abc'
+
+        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+            z = pickle.dumps(G, proto)
+            x = pickle.loads(z)
+            self.assertEqual(x.foo, 42)
+            self.assertEqual(x.bar, 'abc')
+            self.assertEqual(x.x, 1)
+
+    def test_subst(self):
+        dec = "a decoration"
+        dec2 = "another decoration"
+
+        S = Annotated[T, dec2]
+        self.assertEqual(S[int], Annotated[int, dec2])
+
+        self.assertEqual(S[Annotated[int, dec]], Annotated[int, dec, dec2])
+        L = Annotated[List[T], dec]
+
+        self.assertEqual(L[int], Annotated[List[int], dec])
+        with self.assertRaises(TypeError):
+            L[int, int]
+
+        self.assertEqual(S[L[int]], Annotated[List[int], dec, dec2])
+
+        D = Annotated[typing.Dict[KT, VT], dec]
+        self.assertEqual(D[str, int], Annotated[typing.Dict[str, int], dec])
+        with self.assertRaises(TypeError):
+            D[int]
+
+        It = Annotated[int, dec]
+        with self.assertRaises(TypeError):
+            It[None]
+
+        LI = L[int]
+        with self.assertRaises(TypeError):
+            LI[None]
+
+    def test_annotated_in_other_types(self):
+        X = List[Annotated[T, 5]]
+        self.assertEqual(X[int], List[Annotated[int, 5]])
+
+
 class AllTests(BaseTestCase):
     """Tests for __all__."""
 
diff --git a/Lib/test/test_ucn.py b/Lib/test/test_ucn.py
index 8febf0a..e95f911 100644
--- a/Lib/test/test_ucn.py
+++ b/Lib/test/test_ucn.py
@@ -12,7 +12,6 @@
 
 from test import support
 from http.client import HTTPException
-from test.test_normalization import check_version
 
 try:
     from _testcapi import INT_MAX, PY_SSIZE_T_MAX, UINT_MAX
@@ -100,6 +99,7 @@
         self.checkletter("CJK UNIFIED IDEOGRAPH-2B734", "\U0002B734")
         self.checkletter("CJK UNIFIED IDEOGRAPH-2B740", "\U0002B740")
         self.checkletter("CJK UNIFIED IDEOGRAPH-2B81D", "\U0002B81D")
+        self.checkletter("CJK UNIFIED IDEOGRAPH-3134A", "\U0003134A")
 
     def test_bmp_characters(self):
         for code in range(0x10000):
@@ -172,6 +172,9 @@
 
     def test_named_sequences_full(self):
         # Check all the named sequences
+        def check_version(testfile):
+            hdr = testfile.readline()
+            return unicodedata.unidata_version in hdr
         url = ("http://www.pythontest.net/unicode/%s/NamedSequences.txt" %
                unicodedata.unidata_version)
         try:
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 1d6aabd..23508c5 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -11,10 +11,12 @@
 import operator
 import struct
 import sys
+import textwrap
 import unicodedata
 import unittest
 import warnings
 from test import support, string_tests
+from test.support.script_helper import assert_python_failure
 
 # Error handling (bad decoder return)
 def search_function(encoding):
@@ -718,6 +720,13 @@
         self.assertFalse("©".isidentifier())
         self.assertFalse("0".isidentifier())
 
+    @support.cpython_only
+    def test_isidentifier_legacy(self):
+        import _testcapi
+        u = '𝖀𝖓𝖎𝖈𝖔𝖉𝖊'
+        self.assertTrue(u.isidentifier())
+        self.assertTrue(_testcapi.unicode_legacy_string(u).isidentifier())
+
     def test_isprintable(self):
         self.assertTrue("".isprintable())
         self.assertTrue(" ".isprintable())
@@ -1750,7 +1759,7 @@
         # Issue #8271: during the decoding of an invalid UTF-8 byte sequence,
         # only the start byte and the continuation byte(s) are now considered
         # invalid, instead of the number of bytes specified by the start byte.
-        # See http://www.unicode.org/versions/Unicode5.2.0/ch03.pdf (page 95,
+        # See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf (page 95,
         # table 3-8, Row 2) for more information about the algorithm used.
         FFFD = '\ufffd'
         sequences = [
@@ -2447,6 +2456,66 @@
         support.check_free_after_iterating(self, iter, str)
         support.check_free_after_iterating(self, reversed, str)
 
+    def test_check_encoding_errors(self):
+        # bpo-37388: str(bytes) and str.decode() must check encoding and errors
+        # arguments in dev mode
+        encodings = ('ascii', 'utf8', 'latin1')
+        invalid = 'Boom, Shaka Laka, Boom!'
+        code = textwrap.dedent(f'''
+            import sys
+            encodings = {encodings!r}
+
+            for data in (b'', b'short string'):
+                try:
+                    str(data, encoding={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(21)
+
+                try:
+                    str(data, errors={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(22)
+
+                for encoding in encodings:
+                    try:
+                        str(data, encoding, errors={invalid!r})
+                    except LookupError:
+                        pass
+                    else:
+                        sys.exit(22)
+
+            for data in ('', 'short string'):
+                try:
+                    data.encode(encoding={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(23)
+
+                try:
+                    data.encode(errors={invalid!r})
+                except LookupError:
+                    pass
+                else:
+                    sys.exit(24)
+
+                for encoding in encodings:
+                    try:
+                        data.encode(encoding, errors={invalid!r})
+                    except LookupError:
+                        pass
+                    else:
+                        sys.exit(24)
+
+            sys.exit(10)
+        ''')
+        proc = assert_python_failure('-X', 'dev', '-c', code)
+        self.assertEqual(proc.rc, 10, proc)
+
 
 class CAPITest(unittest.TestCase):
 
@@ -2454,11 +2523,13 @@
     def test_from_format(self):
         support.import_module('ctypes')
         from ctypes import (
+            c_char_p,
             pythonapi, py_object, sizeof,
             c_int, c_long, c_longlong, c_ssize_t,
             c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p)
         name = "PyUnicode_FromFormat"
         _PyUnicode_FromFormat = getattr(pythonapi, name)
+        _PyUnicode_FromFormat.argtypes = (c_char_p,)
         _PyUnicode_FromFormat.restype = py_object
 
         def PyUnicode_FromFormat(format, *args):
@@ -2758,15 +2829,43 @@
         for s in ['abc', '\xa1\xa2', '\u4f60\u597d', 'a\U0001f600',
                   'a\ud800b\udfffc', '\ud834\udd1e']:
             l = len(s)
-            self.assertEqual(unicode_asucs4(s, l, 1), s+'\0')
-            self.assertEqual(unicode_asucs4(s, l, 0), s+'\uffff')
-            self.assertEqual(unicode_asucs4(s, l+1, 1), s+'\0\uffff')
-            self.assertEqual(unicode_asucs4(s, l+1, 0), s+'\0\uffff')
-            self.assertRaises(SystemError, unicode_asucs4, s, l-1, 1)
-            self.assertRaises(SystemError, unicode_asucs4, s, l-2, 0)
+            self.assertEqual(unicode_asucs4(s, l, True), s+'\0')
+            self.assertEqual(unicode_asucs4(s, l, False), s+'\uffff')
+            self.assertEqual(unicode_asucs4(s, l+1, True), s+'\0\uffff')
+            self.assertEqual(unicode_asucs4(s, l+1, False), s+'\0\uffff')
+            self.assertRaises(SystemError, unicode_asucs4, s, l-1, True)
+            self.assertRaises(SystemError, unicode_asucs4, s, l-2, False)
             s = '\0'.join([s, s])
-            self.assertEqual(unicode_asucs4(s, len(s), 1), s+'\0')
-            self.assertEqual(unicode_asucs4(s, len(s), 0), s+'\uffff')
+            self.assertEqual(unicode_asucs4(s, len(s), True), s+'\0')
+            self.assertEqual(unicode_asucs4(s, len(s), False), s+'\uffff')
+
+    # Test PyUnicode_AsUTF8()
+    @support.cpython_only
+    def test_asutf8(self):
+        from _testcapi import unicode_asutf8
+
+        bmp = '\u0100'
+        bmp2 = '\uffff'
+        nonbmp = chr(0x10ffff)
+
+        self.assertEqual(unicode_asutf8(bmp), b'\xc4\x80')
+        self.assertEqual(unicode_asutf8(bmp2), b'\xef\xbf\xbf')
+        self.assertEqual(unicode_asutf8(nonbmp), b'\xf4\x8f\xbf\xbf')
+        self.assertRaises(UnicodeEncodeError, unicode_asutf8, 'a\ud800b\udfffc')
+
+    # Test PyUnicode_AsUTF8AndSize()
+    @support.cpython_only
+    def test_asutf8andsize(self):
+        from _testcapi import unicode_asutf8andsize
+
+        bmp = '\u0100'
+        bmp2 = '\uffff'
+        nonbmp = chr(0x10ffff)
+
+        self.assertEqual(unicode_asutf8andsize(bmp), (b'\xc4\x80', 2))
+        self.assertEqual(unicode_asutf8andsize(bmp2), (b'\xef\xbf\xbf', 3))
+        self.assertEqual(unicode_asutf8andsize(nonbmp), (b'\xf4\x8f\xbf\xbf', 4))
+        self.assertRaises(UnicodeEncodeError, unicode_asutf8andsize, 'a\ud800b\udfffc')
 
     # Test PyUnicode_FindChar()
     @support.cpython_only
diff --git a/Lib/test/test_unicode_identifiers.py b/Lib/test/test_unicode_identifiers.py
index 07332c4..5b9ced5 100644
--- a/Lib/test/test_unicode_identifiers.py
+++ b/Lib/test/test_unicode_identifiers.py
@@ -20,9 +20,11 @@
     def test_invalid(self):
         try:
             from test import badsyntax_3131
-        except SyntaxError as s:
-            self.assertEqual(str(s),
-              "invalid character in identifier (badsyntax_3131.py, line 2)")
+        except SyntaxError as err:
+            self.assertEqual(str(err),
+              "invalid character '€' (U+20AC) (badsyntax_3131.py, line 2)")
+            self.assertEqual(err.lineno, 2)
+            self.assertEqual(err.offset, 1)
         else:
             self.fail("expected exception didn't occur")
 
diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py
index 07d7176..b552d2b 100644
--- a/Lib/test/test_unicodedata.py
+++ b/Lib/test/test_unicodedata.py
@@ -1,4 +1,4 @@
-""" Test script for the unicodedata module.
+""" Tests for the unicodedata module.
 
     Written by Marc-Andre Lemburg (mal@lemburg.com).
 
@@ -6,25 +6,23 @@
 
 """
 
-import sys
-import unittest
 import hashlib
-from test.support import script_helper
+from http.client import HTTPException
+import sys
+import unicodedata
+import unittest
+from test.support import open_urlresource, requires_resource, script_helper
 
-encoding = 'utf-8'
-errors = 'surrogatepass'
-
-
-### Run tests
 
 class UnicodeMethodsTest(unittest.TestCase):
 
     # update this, if the database changes
-    expectedchecksum = '9129d6f2bdf008a81c2476e5b5127014a62130c1'
+    expectedchecksum = 'fbdf8106a3c7c242086b0a9efa03ad4d30d5b85d'
 
+    @requires_resource('cpu')
     def test_method_checksum(self):
         h = hashlib.sha1()
-        for i in range(0x10000):
+        for i in range(sys.maxunicode + 1):
             char = chr(i)
             data = [
                 # Predicates (single char)
@@ -61,31 +59,25 @@
                 (char + 'ABC').title(),
 
                 ]
-            h.update(''.join(data).encode(encoding, errors))
+            h.update(''.join(data).encode('utf-8', 'surrogatepass'))
         result = h.hexdigest()
         self.assertEqual(result, self.expectedchecksum)
 
 class UnicodeDatabaseTest(unittest.TestCase):
-
-    def setUp(self):
-        # In case unicodedata is not available, this will raise an ImportError,
-        # but the other test cases will still be run
-        import unicodedata
-        self.db = unicodedata
-
-    def tearDown(self):
-        del self.db
+    db = unicodedata
 
 class UnicodeFunctionsTest(UnicodeDatabaseTest):
 
     # Update this if the database changes. Make sure to do a full rebuild
     # (e.g. 'make distclean && make') to get the correct checksum.
-    expectedchecksum = 'c44a49ca7c5cb6441640fe174ede604b45028652'
+    expectedchecksum = 'd1e37a2854df60ac607b47b51189b9bf1b54bfdb'
+
+    @requires_resource('cpu')
     def test_function_checksum(self):
         data = []
         h = hashlib.sha1()
 
-        for i in range(0x10000):
+        for i in range(sys.maxunicode + 1):
             char = chr(i)
             data = [
                 # Properties
@@ -183,15 +175,8 @@
         self.assertRaises(TypeError, self.db.combining)
         self.assertRaises(TypeError, self.db.combining, 'xx')
 
-    def test_normalize(self):
-        self.assertRaises(TypeError, self.db.normalize)
-        self.assertRaises(ValueError, self.db.normalize, 'unknown', 'xx')
-        self.assertEqual(self.db.normalize('NFKC', ''), '')
-        # The rest can be found in test_normalization.py
-        # which requires an external file.
-
     def test_pr29(self):
-        # http://www.unicode.org/review/pr-29.html
+        # https://www.unicode.org/review/pr-29.html
         # See issues #1054943 and #10254.
         composed = ("\u0b47\u0300\u0b3e", "\u1100\u0300\u1161",
                     'Li\u030dt-s\u1e73\u0301',
@@ -220,9 +205,6 @@
         self.assertEqual(self.db.normalize('NFC', u11a7_str_a), u11a7_str_b)
         self.assertEqual(self.db.normalize('NFC', u11c3_str_a), u11c3_str_b)
 
-    # For tests of unicodedata.is_normalized / self.db.is_normalized ,
-    # see test_normalization.py .
-
     def test_east_asian_width(self):
         eaw = self.db.east_asian_width
         self.assertRaises(TypeError, eaw, b'a')
@@ -327,5 +309,102 @@
                 self.assertEqual(len(lines), 1,
                                  r"\u%.4x should not be a linebreak" % i)
 
+class NormalizationTest(unittest.TestCase):
+    @staticmethod
+    def check_version(testfile):
+        hdr = testfile.readline()
+        return unicodedata.unidata_version in hdr
+
+    @staticmethod
+    def unistr(data):
+        data = [int(x, 16) for x in data.split(" ")]
+        return "".join([chr(x) for x in data])
+
+    def test_normalization(self):
+        TESTDATAFILE = "NormalizationTest.txt"
+        TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"
+
+        # Hit the exception early
+        try:
+            testdata = open_urlresource(TESTDATAURL, encoding="utf-8",
+                                        check=self.check_version)
+        except PermissionError:
+            self.skipTest(f"Permission error when downloading {TESTDATAURL} "
+                          f"into the test data directory")
+        except (OSError, HTTPException):
+            self.fail(f"Could not retrieve {TESTDATAURL}")
+
+        with testdata:
+            self.run_normalization_tests(testdata)
+
+    def run_normalization_tests(self, testdata):
+        part = None
+        part1_data = {}
+
+        def NFC(str):
+            return unicodedata.normalize("NFC", str)
+
+        def NFKC(str):
+            return unicodedata.normalize("NFKC", str)
+
+        def NFD(str):
+            return unicodedata.normalize("NFD", str)
+
+        def NFKD(str):
+            return unicodedata.normalize("NFKD", str)
+
+        for line in testdata:
+            if '#' in line:
+                line = line.split('#')[0]
+            line = line.strip()
+            if not line:
+                continue
+            if line.startswith("@Part"):
+                part = line.split()[0]
+                continue
+            c1,c2,c3,c4,c5 = [self.unistr(x) for x in line.split(';')[:-1]]
+
+            # Perform tests
+            self.assertTrue(c2 ==  NFC(c1) ==  NFC(c2) ==  NFC(c3), line)
+            self.assertTrue(c4 ==  NFC(c4) ==  NFC(c5), line)
+            self.assertTrue(c3 ==  NFD(c1) ==  NFD(c2) ==  NFD(c3), line)
+            self.assertTrue(c5 ==  NFD(c4) ==  NFD(c5), line)
+            self.assertTrue(c4 == NFKC(c1) == NFKC(c2) == \
+                            NFKC(c3) == NFKC(c4) == NFKC(c5),
+                            line)
+            self.assertTrue(c5 == NFKD(c1) == NFKD(c2) == \
+                            NFKD(c3) == NFKD(c4) == NFKD(c5),
+                            line)
+
+            self.assertTrue(unicodedata.is_normalized("NFC", c2))
+            self.assertTrue(unicodedata.is_normalized("NFC", c4))
+
+            self.assertTrue(unicodedata.is_normalized("NFD", c3))
+            self.assertTrue(unicodedata.is_normalized("NFD", c5))
+
+            self.assertTrue(unicodedata.is_normalized("NFKC", c4))
+            self.assertTrue(unicodedata.is_normalized("NFKD", c5))
+
+            # Record part 1 data
+            if part == "@Part1":
+                part1_data[c1] = 1
+
+        # Perform tests for all other data
+        for c in range(sys.maxunicode+1):
+            X = chr(c)
+            if X in part1_data:
+                continue
+            self.assertTrue(X == NFC(X) == NFD(X) == NFKC(X) == NFKD(X), c)
+
+    def test_edge_cases(self):
+        self.assertRaises(TypeError, unicodedata.normalize)
+        self.assertRaises(ValueError, unicodedata.normalize, 'unknown', 'xx')
+        self.assertEqual(unicodedata.normalize('NFKC', ''), '')
+
+    def test_bug_834676(self):
+        # Check for bug 834676
+        unicodedata.normalize('NFC', '\ud55c\uae00')
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_unpack_ex.py b/Lib/test/test_unpack_ex.py
index 45cf051..fcc9382 100644
--- a/Lib/test/test_unpack_ex.py
+++ b/Lib/test/test_unpack_ex.py
@@ -158,14 +158,20 @@
     ...
     SyntaxError: iterable unpacking cannot be used in comprehension
 
-Generator expression in function arguments
-
-    >>> list(*x for x in (range(5) for i in range(3)))
+    >>> {**{} for a in [1]}
     Traceback (most recent call last):
     ...
-        list(*x for x in (range(5) for i in range(3)))
-                  ^
-    SyntaxError: invalid syntax
+    SyntaxError: dict unpacking cannot be used in dict comprehension
+
+# Pegen is better here.
+# Generator expression in function arguments
+
+#     >>> list(*x for x in (range(5) for i in range(3)))
+#     Traceback (most recent call last):
+#     ...
+#         list(*x for x in (range(5) for i in range(3)))
+#                   ^
+#     SyntaxError: invalid syntax
 
     >>> dict(**x for x in [{1:2}])
     Traceback (most recent call last):
@@ -236,27 +242,27 @@
     >>> f(x=5, **{'x': 3}, y=2)
     Traceback (most recent call last):
       ...
-    TypeError: f() got multiple values for keyword argument 'x'
+    TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
 
     >>> f(**{'x': 3}, x=5, y=2)
     Traceback (most recent call last):
       ...
-    TypeError: f() got multiple values for keyword argument 'x'
+    TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
 
     >>> f(**{'x': 3}, **{'x': 5}, y=2)
     Traceback (most recent call last):
       ...
-    TypeError: f() got multiple values for keyword argument 'x'
+    TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
 
     >>> f(x=5, **{'x': 3}, **{'x': 2})
     Traceback (most recent call last):
       ...
-    TypeError: f() got multiple values for keyword argument 'x'
+    TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
 
     >>> f(**{1: 3}, **{1: 5})
     Traceback (most recent call last):
       ...
-    TypeError: f() keywords must be strings
+    TypeError: test.test_unpack_ex.f() got multiple values for keyword argument '1'
 
 Unpacking non-sequence
 
@@ -308,12 +314,17 @@
     >>> a, *b, c, *d, e = range(10) # doctest:+ELLIPSIS
     Traceback (most recent call last):
       ...
-    SyntaxError: two starred expressions in assignment
+    SyntaxError: multiple starred expressions in assignment
 
     >>> [*b, *c] = range(10) # doctest:+ELLIPSIS
     Traceback (most recent call last):
       ...
-    SyntaxError: two starred expressions in assignment
+    SyntaxError: multiple starred expressions in assignment
+
+    >>> a,*b,*c,*d = range(4) # doctest:+ELLIPSIS
+    Traceback (most recent call last):
+      ...
+    SyntaxError: multiple starred expressions in assignment
 
     >>> *a = range(10) # doctest:+ELLIPSIS
     Traceback (most recent call last):
diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py
new file mode 100644
index 0000000..c7c8613
--- /dev/null
+++ b/Lib/test/test_unparse.py
@@ -0,0 +1,558 @@
+"""Tests for the unparse.py script in the Tools/parser directory."""
+
+import unittest
+import test.support
+import pathlib
+import random
+import tokenize
+import ast
+
+
+def read_pyfile(filename):
+    """Read and return the contents of a Python source file (as a
+    string), taking into account the file encoding."""
+    with tokenize.open(filename) as stream:
+        return stream.read()
+
+
+for_else = """\
+def f():
+    for x in range(10):
+        break
+    else:
+        y = 2
+    z = 3
+"""
+
+while_else = """\
+def g():
+    while True:
+        break
+    else:
+        y = 2
+    z = 3
+"""
+
+relative_import = """\
+from . import fred
+from .. import barney
+from .australia import shrimp as prawns
+"""
+
+nonlocal_ex = """\
+def f():
+    x = 1
+    def g():
+        nonlocal x
+        x = 2
+        y = 7
+        def h():
+            nonlocal x, y
+"""
+
+# also acts as test for 'except ... as ...'
+raise_from = """\
+try:
+    1 / 0
+except ZeroDivisionError as e:
+    raise ArithmeticError from e
+"""
+
+class_decorator = """\
+@f1(arg)
+@f2
+class Foo: pass
+"""
+
+elif1 = """\
+if cond1:
+    suite1
+elif cond2:
+    suite2
+else:
+    suite3
+"""
+
+elif2 = """\
+if cond1:
+    suite1
+elif cond2:
+    suite2
+"""
+
+try_except_finally = """\
+try:
+    suite1
+except ex1:
+    suite2
+except ex2:
+    suite3
+else:
+    suite4
+finally:
+    suite5
+"""
+
+with_simple = """\
+with f():
+    suite1
+"""
+
+with_as = """\
+with f() as x:
+    suite1
+"""
+
+with_two_items = """\
+with f() as x, g() as y:
+    suite1
+"""
+
+docstring_prefixes = (
+    "",
+    "class foo:\n    ",
+    "def foo():\n    ",
+    "async def foo():\n    ",
+)
+
+class ASTTestCase(unittest.TestCase):
+    def assertASTEqual(self, ast1, ast2):
+        self.assertEqual(ast.dump(ast1), ast.dump(ast2))
+
+    def check_ast_roundtrip(self, code1, **kwargs):
+        with self.subTest(code1=code1, ast_parse_kwargs=kwargs):
+            ast1 = ast.parse(code1, **kwargs)
+            code2 = ast.unparse(ast1)
+            ast2 = ast.parse(code2, **kwargs)
+            self.assertASTEqual(ast1, ast2)
+
+    def check_invalid(self, node, raises=ValueError):
+        with self.subTest(node=node):
+            self.assertRaises(raises, ast.unparse, node)
+
+    def get_source(self, code1, code2=None):
+        code2 = code2 or code1
+        code1 = ast.unparse(ast.parse(code1))
+        return code1, code2
+
+    def check_src_roundtrip(self, code1, code2=None):
+        code1, code2 = self.get_source(code1, code2)
+        with self.subTest(code1=code1, code2=code2):
+            self.assertEqual(code2, code1)
+
+    def check_src_dont_roundtrip(self, code1, code2=None):
+        code1, code2 = self.get_source(code1, code2)
+        with self.subTest(code1=code1, code2=code2):
+            self.assertNotEqual(code2, code1)
+
+class UnparseTestCase(ASTTestCase):
+    # Tests for specific bugs found in earlier versions of unparse
+
+    def test_fstrings(self):
+        # See issue 25180
+        self.check_ast_roundtrip(r"""f'{f"{0}"*3}'""")
+        self.check_ast_roundtrip(r"""f'{f"{y}"*3}'""")
+        self.check_ast_roundtrip("""f''""")
+        self.check_ast_roundtrip('''f"""'end' "quote\\""""''')
+
+    def test_fstrings_complicated(self):
+        # See issue 28002
+        self.check_ast_roundtrip("""f'''{"'"}'''""")
+        self.check_ast_roundtrip('''f\'\'\'-{f"""*{f"+{f'.{x}.'}+"}*"""}-\'\'\'''')
+        self.check_ast_roundtrip('''f\'\'\'-{f"""*{f"+{f'.{x}.'}+"}*"""}-'single quote\\'\'\'\'''')
+        self.check_ast_roundtrip('f"""{\'\'\'\n\'\'\'}"""')
+        self.check_ast_roundtrip('f"""{g(\'\'\'\n\'\'\')}"""')
+        self.check_ast_roundtrip('''f"a\\r\\nb"''')
+        self.check_ast_roundtrip('''f"\\u2028{'x'}"''')
+
+    def test_strings(self):
+        self.check_ast_roundtrip("u'foo'")
+        self.check_ast_roundtrip("r'foo'")
+        self.check_ast_roundtrip("b'foo'")
+
+    def test_del_statement(self):
+        self.check_ast_roundtrip("del x, y, z")
+
+    def test_shifts(self):
+        self.check_ast_roundtrip("45 << 2")
+        self.check_ast_roundtrip("13 >> 7")
+
+    def test_for_else(self):
+        self.check_ast_roundtrip(for_else)
+
+    def test_while_else(self):
+        self.check_ast_roundtrip(while_else)
+
+    def test_unary_parens(self):
+        self.check_ast_roundtrip("(-1)**7")
+        self.check_ast_roundtrip("(-1.)**8")
+        self.check_ast_roundtrip("(-1j)**6")
+        self.check_ast_roundtrip("not True or False")
+        self.check_ast_roundtrip("True or not False")
+
+    def test_integer_parens(self):
+        self.check_ast_roundtrip("3 .__abs__()")
+
+    def test_huge_float(self):
+        self.check_ast_roundtrip("1e1000")
+        self.check_ast_roundtrip("-1e1000")
+        self.check_ast_roundtrip("1e1000j")
+        self.check_ast_roundtrip("-1e1000j")
+
+    def test_min_int(self):
+        self.check_ast_roundtrip(str(-(2 ** 31)))
+        self.check_ast_roundtrip(str(-(2 ** 63)))
+
+    def test_imaginary_literals(self):
+        self.check_ast_roundtrip("7j")
+        self.check_ast_roundtrip("-7j")
+        self.check_ast_roundtrip("0j")
+        self.check_ast_roundtrip("-0j")
+
+    def test_lambda_parentheses(self):
+        self.check_ast_roundtrip("(lambda: int)()")
+
+    def test_chained_comparisons(self):
+        self.check_ast_roundtrip("1 < 4 <= 5")
+        self.check_ast_roundtrip("a is b is c is not d")
+
+    def test_function_arguments(self):
+        self.check_ast_roundtrip("def f(): pass")
+        self.check_ast_roundtrip("def f(a): pass")
+        self.check_ast_roundtrip("def f(b = 2): pass")
+        self.check_ast_roundtrip("def f(a, b): pass")
+        self.check_ast_roundtrip("def f(a, b = 2): pass")
+        self.check_ast_roundtrip("def f(a = 5, b = 2): pass")
+        self.check_ast_roundtrip("def f(*, a = 1, b = 2): pass")
+        self.check_ast_roundtrip("def f(*, a = 1, b): pass")
+        self.check_ast_roundtrip("def f(*, a, b = 2): pass")
+        self.check_ast_roundtrip("def f(a, b = None, *, c, **kwds): pass")
+        self.check_ast_roundtrip("def f(a=2, *args, c=5, d, **kwds): pass")
+        self.check_ast_roundtrip("def f(*args, **kwargs): pass")
+
+    def test_relative_import(self):
+        self.check_ast_roundtrip(relative_import)
+
+    def test_nonlocal(self):
+        self.check_ast_roundtrip(nonlocal_ex)
+
+    def test_raise_from(self):
+        self.check_ast_roundtrip(raise_from)
+
+    def test_bytes(self):
+        self.check_ast_roundtrip("b'123'")
+
+    def test_annotations(self):
+        self.check_ast_roundtrip("def f(a : int): pass")
+        self.check_ast_roundtrip("def f(a: int = 5): pass")
+        self.check_ast_roundtrip("def f(*args: [int]): pass")
+        self.check_ast_roundtrip("def f(**kwargs: dict): pass")
+        self.check_ast_roundtrip("def f() -> None: pass")
+
+    def test_set_literal(self):
+        self.check_ast_roundtrip("{'a', 'b', 'c'}")
+
+    def test_set_comprehension(self):
+        self.check_ast_roundtrip("{x for x in range(5)}")
+
+    def test_dict_comprehension(self):
+        self.check_ast_roundtrip("{x: x*x for x in range(10)}")
+
+    def test_class_decorators(self):
+        self.check_ast_roundtrip(class_decorator)
+
+    def test_class_definition(self):
+        self.check_ast_roundtrip("class A(metaclass=type, *[], **{}): pass")
+
+    def test_elifs(self):
+        self.check_ast_roundtrip(elif1)
+        self.check_ast_roundtrip(elif2)
+
+    def test_try_except_finally(self):
+        self.check_ast_roundtrip(try_except_finally)
+
+    def test_starred_assignment(self):
+        self.check_ast_roundtrip("a, *b, c = seq")
+        self.check_ast_roundtrip("a, (*b, c) = seq")
+        self.check_ast_roundtrip("a, *b[0], c = seq")
+        self.check_ast_roundtrip("a, *(b, c) = seq")
+
+    def test_with_simple(self):
+        self.check_ast_roundtrip(with_simple)
+
+    def test_with_as(self):
+        self.check_ast_roundtrip(with_as)
+
+    def test_with_two_items(self):
+        self.check_ast_roundtrip(with_two_items)
+
+    def test_dict_unpacking_in_dict(self):
+        # See issue 26489
+        self.check_ast_roundtrip(r"""{**{'y': 2}, 'x': 1}""")
+        self.check_ast_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""")
+
+    def test_slices(self):
+        self.check_ast_roundtrip("a[i]")
+        self.check_ast_roundtrip("a[i,]")
+        self.check_ast_roundtrip("a[i, j]")
+        self.check_ast_roundtrip("a[(*a,)]")
+        self.check_ast_roundtrip("a[(a:=b)]")
+        self.check_ast_roundtrip("a[(a:=b,c)]")
+        self.check_ast_roundtrip("a[()]")
+        self.check_ast_roundtrip("a[i:j]")
+        self.check_ast_roundtrip("a[:j]")
+        self.check_ast_roundtrip("a[i:]")
+        self.check_ast_roundtrip("a[i:j:k]")
+        self.check_ast_roundtrip("a[:j:k]")
+        self.check_ast_roundtrip("a[i::k]")
+        self.check_ast_roundtrip("a[i:j,]")
+        self.check_ast_roundtrip("a[i:j, k]")
+
+    def test_invalid_raise(self):
+        self.check_invalid(ast.Raise(exc=None, cause=ast.Name(id="X")))
+
+    def test_invalid_fstring_constant(self):
+        self.check_invalid(ast.JoinedStr(values=[ast.Constant(value=100)]))
+
+    def test_invalid_fstring_conversion(self):
+        self.check_invalid(
+            ast.FormattedValue(
+                value=ast.Constant(value="a", kind=None),
+                conversion=ord("Y"),  # random character
+                format_spec=None,
+            )
+        )
+
+    def test_invalid_fstring_backslash(self):
+        self.check_invalid(ast.FormattedValue(value=ast.Constant(value="\\\\")))
+
+    def test_invalid_set(self):
+        self.check_invalid(ast.Set(elts=[]))
+
+    def test_invalid_yield_from(self):
+        self.check_invalid(ast.YieldFrom(value=None))
+
+    def test_docstrings(self):
+        docstrings = (
+            'this ends with double quote"',
+            'this includes a """triple quote"""',
+            '\r',
+            '\\r',
+            '\t',
+            '\\t',
+            '\n',
+            '\\n',
+            '\r\\r\t\\t\n\\n',
+            '""">>> content = \"\"\"blabla\"\"\" <<<"""',
+            r'foo\n\x00',
+            "' \\'\\'\\'\"\"\" \"\"\\'\\' \\'",
+            '🐍⛎𩸽üéş^\\\\X\\\\BB\N{LONG RIGHTWARDS SQUIGGLE ARROW}'
+        )
+        for docstring in docstrings:
+            # check as Module docstrings for easy testing
+            self.check_ast_roundtrip(f"'''{docstring}'''")
+
+    def test_constant_tuples(self):
+        self.check_src_roundtrip(ast.Constant(value=(1,), kind=None), "(1,)")
+        self.check_src_roundtrip(
+            ast.Constant(value=(1, 2, 3), kind=None), "(1, 2, 3)"
+        )
+
+    def test_function_type(self):
+        for function_type in (
+            "() -> int",
+            "(int, int) -> int",
+            "(Callable[complex], More[Complex(call.to_typevar())]) -> None"
+        ):
+            self.check_ast_roundtrip(function_type, mode="func_type")
+
+    def test_type_comments(self):
+        for statement in (
+            "a = 5 # type:",
+            "a = 5 # type: int",
+            "a = 5 # type: int and more",
+            "def x(): # type: () -> None\n\tpass",
+            "def x(y): # type: (int) -> None and more\n\tpass",
+            "async def x(): # type: () -> None\n\tpass",
+            "async def x(y): # type: (int) -> None and more\n\tpass",
+            "for x in y: # type: int\n\tpass",
+            "async for x in y: # type: int\n\tpass",
+            "with x(): # type: int\n\tpass",
+            "async with x(): # type: int\n\tpass"
+        ):
+            self.check_ast_roundtrip(statement, type_comments=True)
+
+    def test_type_ignore(self):
+        for statement in (
+            "a = 5 # type: ignore",
+            "a = 5 # type: ignore and more",
+            "def x(): # type: ignore\n\tpass",
+            "def x(y): # type: ignore and more\n\tpass",
+            "async def x(): # type: ignore\n\tpass",
+            "async def x(y): # type: ignore and more\n\tpass",
+            "for x in y: # type: ignore\n\tpass",
+            "async for x in y: # type: ignore\n\tpass",
+            "with x(): # type: ignore\n\tpass",
+            "async with x(): # type: ignore\n\tpass"
+        ):
+            self.check_ast_roundtrip(statement, type_comments=True)
+
+
+class CosmeticTestCase(ASTTestCase):
+    """Test if there are cosmetic issues caused by unnecesary additions"""
+
+    def test_simple_expressions_parens(self):
+        self.check_src_roundtrip("(a := b)")
+        self.check_src_roundtrip("await x")
+        self.check_src_roundtrip("x if x else y")
+        self.check_src_roundtrip("lambda x: x")
+        self.check_src_roundtrip("1 + 1")
+        self.check_src_roundtrip("1 + 2 / 3")
+        self.check_src_roundtrip("(1 + 2) / 3")
+        self.check_src_roundtrip("(1 + 2) * 3 + 4 * (5 + 2)")
+        self.check_src_roundtrip("(1 + 2) * 3 + 4 * (5 + 2) ** 2")
+        self.check_src_roundtrip("~x")
+        self.check_src_roundtrip("x and y")
+        self.check_src_roundtrip("x and y and z")
+        self.check_src_roundtrip("x and (y and x)")
+        self.check_src_roundtrip("(x and y) and z")
+        self.check_src_roundtrip("(x ** y) ** z ** q")
+        self.check_src_roundtrip("x >> y")
+        self.check_src_roundtrip("x << y")
+        self.check_src_roundtrip("x >> y and x >> z")
+        self.check_src_roundtrip("x + y - z * q ^ t ** k")
+        self.check_src_roundtrip("P * V if P and V else n * R * T")
+        self.check_src_roundtrip("lambda P, V, n: P * V == n * R * T")
+        self.check_src_roundtrip("flag & (other | foo)")
+        self.check_src_roundtrip("not x == y")
+        self.check_src_roundtrip("x == (not y)")
+        self.check_src_roundtrip("yield x")
+        self.check_src_roundtrip("yield from x")
+        self.check_src_roundtrip("call((yield x))")
+        self.check_src_roundtrip("return x + (yield x)")
+
+    def test_class_bases_and_keywords(self):
+        self.check_src_roundtrip("class X:\n    pass")
+        self.check_src_roundtrip("class X(A):\n    pass")
+        self.check_src_roundtrip("class X(A, B, C, D):\n    pass")
+        self.check_src_roundtrip("class X(x=y):\n    pass")
+        self.check_src_roundtrip("class X(metaclass=z):\n    pass")
+        self.check_src_roundtrip("class X(x=y, z=d):\n    pass")
+        self.check_src_roundtrip("class X(A, x=y):\n    pass")
+        self.check_src_roundtrip("class X(A, **kw):\n    pass")
+        self.check_src_roundtrip("class X(*args):\n    pass")
+        self.check_src_roundtrip("class X(*args, **kwargs):\n    pass")
+
+    def test_fstrings(self):
+        self.check_src_roundtrip('''f\'\'\'-{f"""*{f"+{f'.{x}.'}+"}*"""}-\'\'\'''')
+        self.check_src_roundtrip('''f"\\u2028{'x'}"''')
+        self.check_src_roundtrip(r"f'{x}\n'")
+        self.check_src_roundtrip('''f''\'{"""\n"""}\\n''\'''')
+        self.check_src_roundtrip('''f''\'{f"""{x}\n"""}\\n''\'''')
+
+    def test_docstrings(self):
+        docstrings = (
+            '"""simple doc string"""',
+            '''"""A more complex one
+            with some newlines"""''',
+            '''"""Foo bar baz
+
+            empty newline"""''',
+            '"""With some \t"""',
+            '"""Foo "bar" baz """',
+            '"""\\r"""',
+            '""""""',
+            '"""\'\'\'"""',
+            '"""\'\'\'\'\'\'"""',
+            '"""🐍⛎𩸽üéş^\\\\X\\\\BB⟿"""',
+            '"""end in single \'quote\'"""',
+            "'''end in double \"quote\"'''",
+            '"""almost end in double "quote"."""',
+        )
+
+        for prefix in docstring_prefixes:
+            for docstring in docstrings:
+                self.check_src_roundtrip(f"{prefix}{docstring}")
+
+    def test_docstrings_negative_cases(self):
+        # Test some cases that involve strings in the children of the
+        # first node but aren't docstrings to make sure we don't have
+        # False positives.
+        docstrings_negative = (
+            'a = """false"""',
+            '"""false""" + """unless its optimized"""',
+            '1 + 1\n"""false"""',
+            'f"""no, top level but f-fstring"""'
+        )
+        for prefix in docstring_prefixes:
+            for negative in docstrings_negative:
+                # this cases should be result with single quote
+                # rather then triple quoted docstring
+                src = f"{prefix}{negative}"
+                self.check_ast_roundtrip(src)
+                self.check_src_dont_roundtrip(src)
+
+    def test_unary_op_factor(self):
+        for prefix in ("+", "-", "~"):
+            self.check_src_roundtrip(f"{prefix}1")
+        for prefix in ("not",):
+            self.check_src_roundtrip(f"{prefix} 1")
+
+    def test_slices(self):
+        self.check_src_roundtrip("a[1]")
+        self.check_src_roundtrip("a[1, 2]")
+        self.check_src_roundtrip("a[(1, *a)]")
+
+class DirectoryTestCase(ASTTestCase):
+    """Test roundtrip behaviour on all files in Lib and Lib/test."""
+
+    lib_dir = pathlib.Path(__file__).parent / ".."
+    test_directories = (lib_dir, lib_dir / "test")
+    run_always_files = {"test_grammar.py", "test_syntax.py", "test_compile.py",
+                        "test_ast.py", "test_asdl_parser.py", "test_fstring.py"}
+
+    _files_to_test = None
+
+    @classmethod
+    def files_to_test(cls):
+
+        if cls._files_to_test is not None:
+            return cls._files_to_test
+
+        items = [
+            item.resolve()
+            for directory in cls.test_directories
+            for item in directory.glob("*.py")
+            if not item.name.startswith("bad")
+        ]
+
+        # Test limited subset of files unless the 'cpu' resource is specified.
+        if not test.support.is_resource_enabled("cpu"):
+
+            tests_to_run_always = {item for item in items if
+                                   item.name in cls.run_always_files}
+
+            items = set(random.sample(items, 10))
+
+            # Make sure that at least tests that heavily use grammar features are
+            # always considered in order to reduce the chance of missing something.
+            items = list(items | tests_to_run_always)
+
+        # bpo-31174: Store the names sample to always test the same files.
+        # It prevents false alarms when hunting reference leaks.
+        cls._files_to_test = items
+
+        return items
+
+    def test_files(self):
+        for item in self.files_to_test():
+            if test.support.verbose:
+                print(f"Testing {item.absolute()}")
+
+            with self.subTest(filename=item):
+                source = read_pyfile(item)
+                self.check_ast_roundtrip(source)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 1c247c5..68bb49e 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -151,7 +151,8 @@
         finally:
             f.close()
         self.pathname = support.TESTFN
-        self.returned_obj = urlopen("file:%s" % self.pathname)
+        self.quoted_pathname = urllib.parse.quote(self.pathname)
+        self.returned_obj = urlopen("file:%s" % self.quoted_pathname)
 
     def tearDown(self):
         """Shut down the open object"""
@@ -194,11 +195,20 @@
         # by the tearDown() method for the test
         self.returned_obj.close()
 
+    def test_headers(self):
+        self.assertIsInstance(self.returned_obj.headers, email.message.Message)
+
+    def test_url(self):
+        self.assertEqual(self.returned_obj.url, self.quoted_pathname)
+
+    def test_status(self):
+        self.assertIsNone(self.returned_obj.status)
+
     def test_info(self):
         self.assertIsInstance(self.returned_obj.info(), email.message.Message)
 
     def test_geturl(self):
-        self.assertEqual(self.returned_obj.geturl(), self.pathname)
+        self.assertEqual(self.returned_obj.geturl(), self.quoted_pathname)
 
     def test_getcode(self):
         self.assertIsNone(self.returned_obj.getcode())
@@ -599,6 +609,9 @@
     """Test urlopen() opening a data URL."""
 
     def setUp(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         # text containing URL special- and unicode-characters
         self.text = "test data URLs :;,%=& \u00f6 \u00c4 "
         # 2x1 pixel RGB PNG image with one black and one white pixel
@@ -673,6 +686,9 @@
     """Test urllib.urlretrieve() on local files"""
 
     def setUp(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         # Create a list of temporary files. Each item in the list is a file
         # name (absolute path or relative to the current working directory).
         # All files in this list will be deleted in the tearDown method. Note,
@@ -813,6 +829,8 @@
     """Test urllib.urlretrieve() using fake http connections"""
 
     def test_short_content_raises_ContentTooShortError(self):
+        self.addCleanup(urllib.request.urlcleanup)
+
         self.fakehttp(b'''HTTP/1.1 200 OK
 Date: Wed, 02 Jan 2008 03:03:54 GMT
 Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
@@ -834,6 +852,8 @@
                 self.unfakehttp()
 
     def test_short_content_raises_ContentTooShortError_without_reporthook(self):
+        self.addCleanup(urllib.request.urlcleanup)
+
         self.fakehttp(b'''HTTP/1.1 200 OK
 Date: Wed, 02 Jan 2008 03:03:54 GMT
 Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
@@ -1084,8 +1104,6 @@
                          "%s" % result)
         self.assertRaises((TypeError, AttributeError), urllib.parse.unquote, None)
         self.assertRaises((TypeError, AttributeError), urllib.parse.unquote, ())
-        with support.check_warnings(('', BytesWarning), quiet=True):
-            self.assertRaises((TypeError, AttributeError), urllib.parse.unquote, b'')
 
     def test_unquoting_badpercent(self):
         # Test unquoting on bad percent-escapes
@@ -1245,6 +1263,29 @@
         self.assertEqual(expect, result,
                          "using unquote(): %r != %r" % (expect, result))
 
+    def test_unquoting_with_bytes_input(self):
+        # ASCII characters decoded to a string
+        given = b'blueberryjam'
+        expect = 'blueberryjam'
+        result = urllib.parse.unquote(given)
+        self.assertEqual(expect, result,
+                         "using unquote(): %r != %r" % (expect, result))
+
+        # A mix of non-ASCII hex-encoded characters and ASCII characters
+        given = b'bl\xc3\xa5b\xc3\xa6rsyltet\xc3\xb8y'
+        expect = 'bl\u00e5b\u00e6rsyltet\u00f8y'
+        result = urllib.parse.unquote(given)
+        self.assertEqual(expect, result,
+                         "using unquote(): %r != %r" % (expect, result))
+
+        # A mix of non-ASCII percent-encoded characters and ASCII characters
+        given = b'bl%c3%a5b%c3%a6rsyltet%c3%b8j'
+        expect = 'bl\u00e5b\u00e6rsyltet\u00f8j'
+        result = urllib.parse.unquote(given)
+        self.assertEqual(expect, result,
+                         "using unquote(): %r != %r" % (expect, result))
+
+
 class urlencode_Tests(unittest.TestCase):
     """Tests for urlencode()"""
 
@@ -1558,85 +1599,6 @@
             self.assertRaises(OSError, DummyURLopener().retrieve, url)
 
 
-# Just commented them out.
-# Can't really tell why keep failing in windows and sparc.
-# Everywhere else they work ok, but on those machines, sometimes
-# fail in one of the tests, sometimes in other. I have a linux, and
-# the tests go ok.
-# If anybody has one of the problematic environments, please help!
-# .   Facundo
-#
-# def server(evt):
-#     import socket, time
-#     serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-#     serv.settimeout(3)
-#     serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-#     serv.bind(("", 9093))
-#     serv.listen()
-#     try:
-#         conn, addr = serv.accept()
-#         conn.send("1 Hola mundo\n")
-#         cantdata = 0
-#         while cantdata < 13:
-#             data = conn.recv(13-cantdata)
-#             cantdata += len(data)
-#             time.sleep(.3)
-#         conn.send("2 No more lines\n")
-#         conn.close()
-#     except socket.timeout:
-#         pass
-#     finally:
-#         serv.close()
-#         evt.set()
-#
-# class FTPWrapperTests(unittest.TestCase):
-#
-#     def setUp(self):
-#         import ftplib, time, threading
-#         ftplib.FTP.port = 9093
-#         self.evt = threading.Event()
-#         threading.Thread(target=server, args=(self.evt,)).start()
-#         time.sleep(.1)
-#
-#     def tearDown(self):
-#         self.evt.wait()
-#
-#     def testBasic(self):
-#         # connects
-#         ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
-#         ftp.close()
-#
-#     def testTimeoutNone(self):
-#         # global default timeout is ignored
-#         import socket
-#         self.assertIsNone(socket.getdefaulttimeout())
-#         socket.setdefaulttimeout(30)
-#         try:
-#             ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
-#         finally:
-#             socket.setdefaulttimeout(None)
-#         self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
-#         ftp.close()
-#
-#     def testTimeoutDefault(self):
-#         # global default timeout is used
-#         import socket
-#         self.assertIsNone(socket.getdefaulttimeout())
-#         socket.setdefaulttimeout(30)
-#         try:
-#             ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [])
-#         finally:
-#             socket.setdefaulttimeout(None)
-#         self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
-#         ftp.close()
-#
-#     def testTimeoutValue(self):
-#         ftp = urllib.ftpwrapper("myuser", "mypass", "localhost", 9093, [],
-#                                 timeout=30)
-#         self.assertEqual(ftp.ftp.sock.gettimeout(), 30)
-#         ftp.close()
-
-
 class RequestTests(unittest.TestCase):
     """Unit tests for urllib.request.Request."""
 
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index 091b397..b71be54 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -1,5 +1,6 @@
 import unittest
 from test import support
+from test.support import socket_helper
 from test import test_urllib
 
 import os
@@ -47,6 +48,9 @@
     def test_trivial(self):
         # A couple trivial tests
 
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         self.assertRaises(ValueError, urllib.request.urlopen, 'bogus url')
 
         # XXX Name hacking to get this to work on Windows.
@@ -631,17 +635,12 @@
             [("http_error_302")],
             ]
         handlers = add_ordered_mock_handlers(o, meth_spec)
-
-        class Unknown:
-            def __eq__(self, other):
-                return True
-
         req = Request("http://example.com/")
         o.open(req)
         assert len(o.calls) == 2
         calls = [(handlers[0], "http_open", (req,)),
                  (handlers[2], "http_error_302",
-                  (req, Unknown(), 302, "", {}))]
+                  (req, support.ALWAYS_EQ, 302, "", {}))]
         for expected, got in zip(calls, o.calls):
             handler, method_name, args = expected
             self.assertEqual((handler, method_name), got[:2])
@@ -1290,6 +1289,10 @@
 
     def test_redirect_no_path(self):
         # Issue 14132: Relative redirect strips original path
+
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         real_class = http.client.HTTPConnection
         response1 = b"HTTP/1.1 302 Found\r\nLocation: ?query\r\n\r\n"
         http.client.HTTPConnection = test_urllib.fakehttp(response1)
@@ -1444,6 +1447,18 @@
         bypass = {'exclude_simple': True, 'exceptions': []}
         self.assertTrue(_proxy_bypass_macosx_sysconf('test', bypass))
 
+        # Check that invalid prefix lengths are ignored
+        bypass = {
+            'exclude_simple': False,
+            'exceptions': [ '10.0.0.0/40', '172.19.10.0/24' ]
+        }
+        host = '172.19.10.5'
+        self.assertTrue(_proxy_bypass_macosx_sysconf(host, bypass),
+                        'expected bypass of %s to be True' % host)
+        host = '10.0.1.5'
+        self.assertFalse(_proxy_bypass_macosx_sysconf(host, bypass),
+                        'expected bypass of %s to be False' % host)
+
     def check_basic_auth(self, headers, realm):
         with self.subTest(realm=realm, headers=headers):
             opener = OpenerDirector()
@@ -1774,7 +1789,7 @@
     @unittest.skipUnless(support.is_resource_enabled('network'),
                          'test requires network access')
     def test_issue16464(self):
-        with support.transient_internet("http://www.example.com/"):
+        with socket_helper.transient_internet("http://www.example.com/"):
             opener = urllib.request.build_opener()
             request = urllib.request.Request("http://www.example.com/")
             self.assertEqual(None, request.data)
diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py
index 1cb358f..ed426b0 100644
--- a/Lib/test/test_urllib2_localnet.py
+++ b/Lib/test/test_urllib2_localnet.py
@@ -9,6 +9,7 @@
 import hashlib
 
 from test import support
+from test.support import hashlib_helper
 
 try:
     import ssl
@@ -315,6 +316,7 @@
         self.assertRaises(urllib.error.HTTPError, urllib.request.urlopen, self.server_url)
 
 
+@hashlib_helper.requires_hashdigest("md5")
 class ProxyAuthTests(unittest.TestCase):
     URL = "http://localhost"
 
@@ -322,7 +324,6 @@
     PASSWD = "test123"
     REALM = "TestRealm"
 
-    @support.requires_hashdigest("md5")
     def setUp(self):
         super(ProxyAuthTests, self).setUp()
         # Ignore proxy bypass settings in the environment.
@@ -448,6 +449,9 @@
     def setUp(self):
         super(TestUrlopen, self).setUp()
 
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         # Ignore proxies for localhost tests.
         def restore_environ(old_environ):
             os.environ.clear()
diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py
index 0f43d71..ba4c500 100644
--- a/Lib/test/test_urllib2net.py
+++ b/Lib/test/test_urllib2net.py
@@ -1,5 +1,6 @@
 import unittest
 from test import support
+from test.support import socket_helper
 from test.test_urllib2 import sanepathname2url
 
 import os
@@ -10,8 +11,6 @@
 
 support.requires("network")
 
-TIMEOUT = 60  # seconds
-
 
 def _retry_thrice(func, exc, *args, **kwargs):
     for i in range(3):
@@ -82,10 +81,13 @@
 class CloseSocketTest(unittest.TestCase):
 
     def test_close(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         # calling .close() on urllib2's response objects should close the
         # underlying socket
         url = support.TEST_HTTP_URL
-        with support.transient_internet(url):
+        with socket_helper.transient_internet(url):
             response = _urlopen_with_retry(url)
             sock = response.fp
             self.assertFalse(sock.closed)
@@ -158,7 +160,7 @@
 
     def test_urlwithfrag(self):
         urlwith_frag = "http://www.pythontest.net/index.html#frag"
-        with support.transient_internet(urlwith_frag):
+        with socket_helper.transient_internet(urlwith_frag):
             req = urllib.request.Request(urlwith_frag)
             res = urllib.request.urlopen(req)
             self.assertEqual(res.geturl(),
@@ -166,7 +168,7 @@
 
     def test_redirect_url_withfrag(self):
         redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/"
-        with support.transient_internet(redirect_url_with_frag):
+        with socket_helper.transient_internet(redirect_url_with_frag):
             req = urllib.request.Request(redirect_url_with_frag)
             res = urllib.request.urlopen(req)
             self.assertEqual(res.geturl(),
@@ -174,7 +176,7 @@
 
     def test_custom_headers(self):
         url = support.TEST_HTTP_URL
-        with support.transient_internet(url):
+        with socket_helper.transient_internet(url):
             opener = urllib.request.build_opener()
             request = urllib.request.Request(url)
             self.assertFalse(request.header_items())
@@ -192,11 +194,11 @@
 
         URL = 'http://www.imdb.com' # mangles Connection:close
 
-        with support.transient_internet(URL):
+        with socket_helper.transient_internet(URL):
             try:
                 with urllib.request.urlopen(URL) as res:
                     pass
-            except ValueError as e:
+            except ValueError:
                 self.fail("urlopen failed for site not sending \
                            Connection:close")
             else:
@@ -222,9 +224,9 @@
                 else:
                     req = expected_err = None
 
-                with support.transient_internet(url):
+                with socket_helper.transient_internet(url):
                     try:
-                        f = urlopen(url, req, TIMEOUT)
+                        f = urlopen(url, req, support.INTERNET_TIMEOUT)
                     # urllib.error.URLError is a subclass of OSError
                     except OSError as err:
                         if expected_err:
@@ -257,10 +259,14 @@
 
 
 class TimeoutTest(unittest.TestCase):
+    def setUp(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
     def test_http_basic(self):
         self.assertIsNone(socket.getdefaulttimeout())
         url = support.TEST_HTTP_URL
-        with support.transient_internet(url, timeout=None):
+        with socket_helper.transient_internet(url, timeout=None):
             u = _urlopen_with_retry(url)
             self.addCleanup(u.close)
             self.assertIsNone(u.fp.raw._sock.gettimeout())
@@ -268,7 +274,7 @@
     def test_http_default_timeout(self):
         self.assertIsNone(socket.getdefaulttimeout())
         url = support.TEST_HTTP_URL
-        with support.transient_internet(url):
+        with socket_helper.transient_internet(url):
             socket.setdefaulttimeout(60)
             try:
                 u = _urlopen_with_retry(url)
@@ -280,7 +286,7 @@
     def test_http_no_timeout(self):
         self.assertIsNone(socket.getdefaulttimeout())
         url = support.TEST_HTTP_URL
-        with support.transient_internet(url):
+        with socket_helper.transient_internet(url):
             socket.setdefaulttimeout(60)
             try:
                 u = _urlopen_with_retry(url, timeout=None)
@@ -291,7 +297,7 @@
 
     def test_http_timeout(self):
         url = support.TEST_HTTP_URL
-        with support.transient_internet(url):
+        with socket_helper.transient_internet(url):
             u = _urlopen_with_retry(url, timeout=120)
             self.addCleanup(u.close)
             self.assertEqual(u.fp.raw._sock.gettimeout(), 120)
@@ -301,7 +307,7 @@
     @skip_ftp_test_on_travis
     def test_ftp_basic(self):
         self.assertIsNone(socket.getdefaulttimeout())
-        with support.transient_internet(self.FTP_HOST, timeout=None):
+        with socket_helper.transient_internet(self.FTP_HOST, timeout=None):
             u = _urlopen_with_retry(self.FTP_HOST)
             self.addCleanup(u.close)
             self.assertIsNone(u.fp.fp.raw._sock.gettimeout())
@@ -309,7 +315,7 @@
     @skip_ftp_test_on_travis
     def test_ftp_default_timeout(self):
         self.assertIsNone(socket.getdefaulttimeout())
-        with support.transient_internet(self.FTP_HOST):
+        with socket_helper.transient_internet(self.FTP_HOST):
             socket.setdefaulttimeout(60)
             try:
                 u = _urlopen_with_retry(self.FTP_HOST)
@@ -321,7 +327,7 @@
     @skip_ftp_test_on_travis
     def test_ftp_no_timeout(self):
         self.assertIsNone(socket.getdefaulttimeout())
-        with support.transient_internet(self.FTP_HOST):
+        with socket_helper.transient_internet(self.FTP_HOST):
             socket.setdefaulttimeout(60)
             try:
                 u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
@@ -332,7 +338,7 @@
 
     @skip_ftp_test_on_travis
     def test_ftp_timeout(self):
-        with support.transient_internet(self.FTP_HOST):
+        with socket_helper.transient_internet(self.FTP_HOST):
             u = _urlopen_with_retry(self.FTP_HOST, timeout=60)
             self.addCleanup(u.close)
             self.assertEqual(u.fp.fp.raw._sock.gettimeout(), 60)
diff --git a/Lib/test/test_urllib_response.py b/Lib/test/test_urllib_response.py
index 0eb5942..73d2ef0 100644
--- a/Lib/test/test_urllib_response.py
+++ b/Lib/test/test_urllib_response.py
@@ -42,6 +42,7 @@
     def test_addinfo(self):
         info = urllib.response.addinfo(self.fp, self.test_headers)
         self.assertEqual(info.info(), self.test_headers)
+        self.assertEqual(info.headers, self.test_headers)
 
     def test_addinfourl(self):
         url = "http://www.python.org"
@@ -51,6 +52,9 @@
         self.assertEqual(infourl.info(), self.test_headers)
         self.assertEqual(infourl.geturl(), url)
         self.assertEqual(infourl.getcode(), code)
+        self.assertEqual(infourl.headers, self.test_headers)
+        self.assertEqual(infourl.url, url)
+        self.assertEqual(infourl.status, code)
 
     def tearDown(self):
         self.sock.close()
diff --git a/Lib/test/test_urllibnet.py b/Lib/test/test_urllibnet.py
index d394ced..28680aa 100644
--- a/Lib/test/test_urllibnet.py
+++ b/Lib/test/test_urllibnet.py
@@ -1,5 +1,6 @@
 import unittest
 from test import support
+from test.support import socket_helper
 
 import contextlib
 import socket
@@ -16,17 +17,18 @@
 class URLTimeoutTest(unittest.TestCase):
     # XXX this test doesn't seem to test anything useful.
 
-    TIMEOUT = 30.0
-
     def setUp(self):
-        socket.setdefaulttimeout(self.TIMEOUT)
+        socket.setdefaulttimeout(support.INTERNET_TIMEOUT)
 
     def tearDown(self):
         socket.setdefaulttimeout(None)
 
     def testURLread(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
         domain = urllib.parse.urlparse(support.TEST_HTTP_URL).netloc
-        with support.transient_internet(domain):
+        with socket_helper.transient_internet(domain):
             f = urllib.request.urlopen(support.TEST_HTTP_URL)
             f.read()
 
@@ -48,10 +50,14 @@
 
     url = 'http://www.pythontest.net/'
 
+    def setUp(self):
+        # clear _opener global variable
+        self.addCleanup(urllib.request.urlcleanup)
+
     @contextlib.contextmanager
     def urlopen(self, *args, **kwargs):
         resource = args[0]
-        with support.transient_internet(resource):
+        with socket_helper.transient_internet(resource):
             r = urllib.request.urlopen(*args, **kwargs)
             try:
                 yield r
@@ -93,7 +99,7 @@
     def test_getcode(self):
         # test getcode() with the fancy opener to get 404 error codes
         URL = self.url + "XXXinvalidXXX"
-        with support.transient_internet(URL):
+        with socket_helper.transient_internet(URL):
             with self.assertWarns(DeprecationWarning):
                 open_url = urllib.request.FancyURLopener().open(URL)
             try:
@@ -144,10 +150,14 @@
 class urlretrieveNetworkTests(unittest.TestCase):
     """Tests urllib.request.urlretrieve using the network."""
 
+    def setUp(self):
+        # remove temporary files created by urlretrieve()
+        self.addCleanup(urllib.request.urlcleanup)
+
     @contextlib.contextmanager
     def urlretrieve(self, *args, **kwargs):
         resource = args[0]
-        with support.transient_internet(resource):
+        with socket_helper.transient_internet(resource):
             file_location, info = urllib.request.urlretrieve(*args, **kwargs)
             try:
                 yield file_location, info
diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
index 4ae6ed3..7625007 100644
--- a/Lib/test/test_urlparse.py
+++ b/Lib/test/test_urlparse.py
@@ -709,15 +709,17 @@
 
     def test_portseparator(self):
         # Issue 754016 makes changes for port separator ':' from scheme separator
-        self.assertEqual(urllib.parse.urlparse("path:80"),
-                ('','','path:80','','',''))
+        self.assertEqual(urllib.parse.urlparse("http:80"), ('http','','80','','',''))
+        self.assertEqual(urllib.parse.urlparse("https:80"), ('https','','80','','',''))
+        self.assertEqual(urllib.parse.urlparse("path:80"), ('path','','80','','',''))
         self.assertEqual(urllib.parse.urlparse("http:"),('http','','','','',''))
         self.assertEqual(urllib.parse.urlparse("https:"),('https','','','','',''))
         self.assertEqual(urllib.parse.urlparse("http://www.python.org:80"),
                 ('http','www.python.org:80','','','',''))
         # As usual, need to check bytes input as well
-        self.assertEqual(urllib.parse.urlparse(b"path:80"),
-                (b'',b'',b'path:80',b'',b'',b''))
+        self.assertEqual(urllib.parse.urlparse(b"http:80"), (b'http',b'',b'80',b'',b'',b''))
+        self.assertEqual(urllib.parse.urlparse(b"https:80"), (b'https',b'',b'80',b'',b'',b''))
+        self.assertEqual(urllib.parse.urlparse(b"path:80"), (b'path',b'',b'80',b'',b'',b''))
         self.assertEqual(urllib.parse.urlparse(b"http:"),(b'http',b'',b'',b'',b'',b''))
         self.assertEqual(urllib.parse.urlparse(b"https:"),(b'https',b'',b'',b'',b'',b''))
         self.assertEqual(urllib.parse.urlparse(b"http://www.python.org:80"),
diff --git a/Lib/test/test_userdict.py b/Lib/test/test_userdict.py
index 662c7f6..483910a 100644
--- a/Lib/test/test_userdict.py
+++ b/Lib/test/test_userdict.py
@@ -30,8 +30,8 @@
         self.assertEqual(collections.UserDict(one=1, two=2), d2)
         # item sequence constructor
         self.assertEqual(collections.UserDict([('one',1), ('two',2)]), d2)
-        with self.assertWarnsRegex(DeprecationWarning, "'dict'"):
-            self.assertEqual(collections.UserDict(dict=[('one',1), ('two',2)]), d2)
+        self.assertEqual(collections.UserDict(dict=[('one',1), ('two',2)]),
+                         {'dict': [('one', 1), ('two', 2)]})
         # both together
         self.assertEqual(collections.UserDict([('one',1), ('two',2)], two=3, three=5), d3)
 
@@ -149,9 +149,8 @@
                          [('dict', 42)])
         self.assertEqual(list(collections.UserDict({}, dict=None).items()),
                          [('dict', None)])
-        with self.assertWarnsRegex(DeprecationWarning, "'dict'"):
-            self.assertEqual(list(collections.UserDict(dict={'a': 42}).items()),
-                             [('a', 42)])
+        self.assertEqual(list(collections.UserDict(dict={'a': 42}).items()),
+                         [('dict', {'a': 42})])
         self.assertRaises(TypeError, collections.UserDict, 42)
         self.assertRaises(TypeError, collections.UserDict, (), ())
         self.assertRaises(TypeError, collections.UserDict.__init__)
diff --git a/Lib/test/test_uu.py b/Lib/test/test_uu.py
index c8709f7..4c639b7 100644
--- a/Lib/test/test_uu.py
+++ b/Lib/test/test_uu.py
@@ -174,8 +174,8 @@
 class UUFileTest(unittest.TestCase):
 
     def setUp(self):
-        self.tmpin  = support.TESTFN + "i"
-        self.tmpout = support.TESTFN + "o"
+        self.tmpin  = support.TESTFN_ASCII + "i"
+        self.tmpout = support.TESTFN_ASCII + "o"
         self.addCleanup(support.unlink, self.tmpin)
         self.addCleanup(support.unlink, self.tmpout)
 
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 92642d2..b1c9242 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -1,4 +1,4 @@
-import unittest.mock
+import unittest
 from test import support
 import builtins
 import contextlib
@@ -6,8 +6,6 @@
 import io
 import os
 import pickle
-import shutil
-import subprocess
 import sys
 import weakref
 from unittest import mock
@@ -15,7 +13,6 @@
 py_uuid = support.import_fresh_module('uuid', blocked=['_uuid'])
 c_uuid = support.import_fresh_module('uuid', fresh=['_uuid'])
 
-
 def importable(name):
     try:
         __import__(name)
@@ -24,6 +21,12 @@
         return False
 
 
+def mock_get_command_stdout(data):
+    def get_command_stdout(command, args):
+        return io.BytesIO(data.encode())
+    return get_command_stdout
+
+
 class BaseTestUUID:
     uuid = None
 
@@ -459,7 +462,7 @@
         # uuid.getnode to fall back on uuid._random_getnode, which will
         # generate a valid value.
         too_large_getter = lambda: 1 << 48
-        with unittest.mock.patch.multiple(
+        with mock.patch.multiple(
             self.uuid,
             _node=None,  # Ignore any cached node value.
             _GETTERS=[too_large_getter],
@@ -472,7 +475,7 @@
         # the value from too_large_getter above.
         try:
             self.uuid.uuid1(node=node)
-        except ValueError as e:
+        except ValueError:
             self.fail('uuid1 was given an invalid node ID')
 
     def test_uuid1(self):
@@ -538,8 +541,8 @@
         f = self.uuid._generate_time_safe
         if f is None:
             self.skipTest('need uuid._generate_time_safe')
-        with unittest.mock.patch.object(self.uuid, '_generate_time_safe',
-                                        lambda: (f()[0], safe_value)):
+        with mock.patch.object(self.uuid, '_generate_time_safe',
+                               lambda: (f()[0], safe_value)):
             yield
 
     @unittest.skipUnless(os.name == 'posix', 'POSIX-only test')
@@ -652,7 +655,7 @@
             os.close(fds[1])
             self.addCleanup(os.close, fds[0])
             parent_value = self.uuid.uuid4().hex
-            os.waitpid(pid, 0)
+            support.wait_process(pid, exitcode=0)
             child_value = os.read(fds[0], 100).decode('latin-1')
 
             self.assertNotEqual(parent_value, child_value)
@@ -674,27 +677,139 @@
 class BaseTestInternals:
     _uuid = py_uuid
 
-    @unittest.skipUnless(os.name == 'posix', 'requires Posix')
-    def test_find_mac(self):
+    def check_parse_mac(self, aix):
+        if not aix:
+            patch = mock.patch.multiple(self.uuid,
+                                        _MAC_DELIM=b':',
+                                        _MAC_OMITS_LEADING_ZEROES=False)
+        else:
+            patch = mock.patch.multiple(self.uuid,
+                                        _MAC_DELIM=b'.',
+                                        _MAC_OMITS_LEADING_ZEROES=True)
+
+        with patch:
+            # Valid MAC addresses
+            if not aix:
+                tests = (
+                    (b'52:54:00:9d:0e:67', 0x5254009d0e67),
+                    (b'12:34:56:78:90:ab', 0x1234567890ab),
+                )
+            else:
+                # AIX format
+                tests = (
+                    (b'fe.ad.c.1.23.4', 0xfead0c012304),
+                )
+            for mac, expected in tests:
+                self.assertEqual(self.uuid._parse_mac(mac), expected)
+
+            # Invalid MAC addresses
+            for mac in (
+                b'',
+                # IPv6 addresses with same length than valid MAC address
+                # (17 characters)
+                b'fe80::5054:ff:fe9',
+                b'123:2:3:4:5:6:7:8',
+                # empty 5rd field
+                b'52:54:00:9d::67',
+                # only 5 fields instead of 6
+                b'52:54:00:9d:0e'
+                # invalid character 'x'
+                b'52:54:00:9d:0e:6x'
+                # dash separator
+                b'52-54-00-9d-0e-67',
+            ):
+                if aix:
+                    mac = mac.replace(b':', b'.')
+                with self.subTest(mac=mac):
+                    self.assertIsNone(self.uuid._parse_mac(mac))
+
+    def test_parse_mac(self):
+        self.check_parse_mac(False)
+
+    def test_parse_mac_aix(self):
+        self.check_parse_mac(True)
+
+    def test_find_under_heading(self):
+        data = '''\
+Name  Mtu   Network     Address           Ipkts Ierrs    Opkts Oerrs  Coll
+en0   1500  link#2      fe.ad.c.1.23.4   1714807956     0 711348489     0     0
+                        01:00:5e:00:00:01
+en0   1500  192.168.129 x071             1714807956     0 711348489     0     0
+                        224.0.0.1
+en0   1500  192.168.90  x071             1714807956     0 711348489     0     0
+                        224.0.0.1
+'''
+
+        # The above data is from AIX - with '.' as _MAC_DELIM and strings
+        # shorter than 17 bytes (no leading 0). (_MAC_OMITS_LEADING_ZEROES=True)
+        with mock.patch.multiple(self.uuid,
+                                 _MAC_DELIM=b'.',
+                                 _MAC_OMITS_LEADING_ZEROES=True,
+                                 _get_command_stdout=mock_get_command_stdout(data)):
+            mac = self.uuid._find_mac_under_heading(
+                command='netstat',
+                args='-ian',
+                heading=b'Address',
+            )
+
+        self.assertEqual(mac, 0xfead0c012304)
+
+    def test_find_under_heading_ipv6(self):
+        # bpo-39991: IPv6 address "fe80::5054:ff:fe9" looks like a MAC address
+        # (same string length) but must be skipped
+        data = '''\
+Name    Mtu Network       Address              Ipkts Ierrs Idrop    Opkts Oerrs  Coll
+vtnet  1500 <Link#1>      52:54:00:9d:0e:67    10017     0     0     8174     0     0
+vtnet     - fe80::%vtnet0 fe80::5054:ff:fe9        0     -     -        4     -     -
+vtnet     - 192.168.122.0 192.168.122.45        8844     -     -     8171     -     -
+lo0   16384 <Link#2>      lo0                 260148     0     0   260148     0     0
+lo0       - ::1/128       ::1                    193     -     -      193     -     -
+                          ff01::1%lo0
+                          ff02::2:2eb7:74fa
+                          ff02::2:ff2e:b774
+                          ff02::1%lo0
+                          ff02::1:ff00:1%lo
+lo0       - fe80::%lo0/64 fe80::1%lo0              0     -     -        0     -     -
+                          ff01::1%lo0
+                          ff02::2:2eb7:74fa
+                          ff02::2:ff2e:b774
+                          ff02::1%lo0
+                          ff02::1:ff00:1%lo
+lo0       - 127.0.0.0/8   127.0.0.1           259955     -     -   259955     -     -
+                          224.0.0.1
+'''
+
+        with mock.patch.multiple(self.uuid,
+                                 _MAC_DELIM=b':',
+                                 _MAC_OMITS_LEADING_ZEROES=False,
+                                 _get_command_stdout=mock_get_command_stdout(data)):
+            mac = self.uuid._find_mac_under_heading(
+                command='netstat',
+                args='-ian',
+                heading=b'Address',
+            )
+
+        self.assertEqual(mac, 0x5254009d0e67)
+
+    def test_find_mac_near_keyword(self):
+        # key and value are on the same line
         data = '''
-fake hwaddr
+fake      Link encap:UNSPEC  hwaddr 00-00
 cscotun0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
 eth0      Link encap:Ethernet  HWaddr 12:34:56:78:90:ab
 '''
 
-        popen = unittest.mock.MagicMock()
-        popen.stdout = io.BytesIO(data.encode())
-
-        with unittest.mock.patch.object(shutil, 'which',
-                                        return_value='/sbin/ifconfig'):
-            with unittest.mock.patch.object(subprocess, 'Popen',
-                                            return_value=popen):
-                mac = self.uuid._find_mac(
-                    command='ifconfig',
-                    args='',
-                    hw_identifiers=[b'hwaddr'],
-                    get_index=lambda x: x + 1,
-                )
+        # The above data will only be parsed properly on non-AIX unixes.
+        with mock.patch.multiple(self.uuid,
+                                 _MAC_DELIM=b':',
+                                 _MAC_OMITS_LEADING_ZEROES=False,
+                                 _get_command_stdout=mock_get_command_stdout(data)):
+            mac = self.uuid._find_mac_near_keyword(
+                command='ifconfig',
+                args='',
+                keywords=[b'hwaddr'],
+                get_word_index=lambda x: x + 1,
+            )
 
         self.assertEqual(mac, 0x1234567890ab)
 
@@ -737,17 +852,6 @@
         node = self.uuid._netstat_getnode()
         self.check_node(node, 'netstat')
 
-    @unittest.skipUnless(os.name == 'nt', 'requires Windows')
-    def test_ipconfig_getnode(self):
-        node = self.uuid._ipconfig_getnode()
-        self.check_node(node, 'ipconfig')
-
-    @unittest.skipUnless(importable('win32wnet'), 'requires win32wnet')
-    @unittest.skipUnless(importable('netbios'), 'requires netbios')
-    def test_netbios_getnode(self):
-        node = self.uuid._netbios_getnode()
-        self.check_node(node)
-
     def test_random_getnode(self):
         node = self.uuid._random_getnode()
         # The multicast bit, i.e. the least significant bit of first octet,
@@ -759,6 +863,13 @@
         node2 = self.uuid._random_getnode()
         self.assertNotEqual(node2, node, '%012x' % node)
 
+class TestInternalsWithoutExtModule(BaseTestInternals, unittest.TestCase):
+    uuid = py_uuid
+
+@unittest.skipUnless(c_uuid, 'requires the C _uuid module')
+class TestInternalsWithExtModule(BaseTestInternals, unittest.TestCase):
+    uuid = c_uuid
+
     @unittest.skipUnless(os.name == 'posix', 'requires Posix')
     def test_unix_getnode(self):
         if not importable('_uuid') and not importable('ctypes'):
@@ -770,19 +881,10 @@
         self.check_node(node, 'unix')
 
     @unittest.skipUnless(os.name == 'nt', 'requires Windows')
-    @unittest.skipUnless(importable('ctypes'), 'requires ctypes')
     def test_windll_getnode(self):
         node = self.uuid._windll_getnode()
         self.check_node(node)
 
 
-class TestInternalsWithoutExtModule(BaseTestInternals, unittest.TestCase):
-    uuid = py_uuid
-
-@unittest.skipUnless(c_uuid, 'requires the C _uuid module')
-class TestInternalsWithExtModule(BaseTestInternals, unittest.TestCase):
-    uuid = c_uuid
-
-
 if __name__ == '__main__':
     unittest.main()
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index 28743f0..ca003d5 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -18,9 +18,9 @@
                           can_symlink, EnvironmentVarGuard, rmtree,
                           import_module,
                           skip_if_broken_multiprocessing_synchronize)
-import threading
 import unittest
 import venv
+from unittest.mock import patch
 
 try:
     import ctypes
@@ -80,8 +80,8 @@
     def get_env_file(self, *args):
         return os.path.join(self.env_dir, *args)
 
-    def get_text_file_contents(self, *args):
-        with open(self.get_env_file(*args), 'r') as f:
+    def get_text_file_contents(self, *args, encoding='utf-8'):
+        with open(self.get_env_file(*args), 'r', encoding=encoding) as f:
             result = f.read()
         return result
 
@@ -139,6 +139,39 @@
         self.assertEqual(context.prompt, '(My prompt) ')
         self.assertIn("prompt = 'My prompt'\n", data)
 
+        rmtree(self.env_dir)
+        builder = venv.EnvBuilder(prompt='.')
+        cwd = os.path.basename(os.getcwd())
+        self.run_with_capture(builder.create, self.env_dir)
+        context = builder.ensure_directories(self.env_dir)
+        data = self.get_text_file_contents('pyvenv.cfg')
+        self.assertEqual(context.prompt, '(%s) ' % cwd)
+        self.assertIn("prompt = '%s'\n" % cwd, data)
+
+    def test_upgrade_dependencies(self):
+        builder = venv.EnvBuilder()
+        bin_path = 'Scripts' if sys.platform == 'win32' else 'bin'
+        python_exe = 'python.exe' if sys.platform == 'win32' else 'python'
+        with tempfile.TemporaryDirectory() as fake_env_dir:
+
+            def pip_cmd_checker(cmd):
+                self.assertEqual(
+                    cmd,
+                    [
+                        os.path.join(fake_env_dir, bin_path, python_exe),
+                        '-m',
+                        'pip',
+                        'install',
+                        '--upgrade',
+                        'pip',
+                        'setuptools'
+                    ]
+                )
+
+            fake_context = builder.ensure_directories(fake_env_dir)
+            with patch('venv.subprocess.check_call', pip_cmd_checker):
+                builder.upgrade_dependencies(fake_context)
+
     @requireVenvCreate
     def test_prefixes(self):
         """
@@ -499,7 +532,7 @@
 
     # Issue #26610: pip/pep425tags.py requires ctypes
     @unittest.skipUnless(ctypes, 'pip requires ctypes')
-    @requires_zlib
+    @requires_zlib()
     def test_with_pip(self):
         self.do_test_with_pip(False)
         self.do_test_with_pip(True)
diff --git a/Lib/test/test_wait3.py b/Lib/test/test_wait3.py
index eb51b2c..aa166ba 100644
--- a/Lib/test/test_wait3.py
+++ b/Lib/test/test_wait3.py
@@ -2,10 +2,12 @@
 """
 
 import os
+import subprocess
+import sys
 import time
 import unittest
 from test.fork_wait import ForkWait
-from test.support import reap_children
+from test import support
 
 if not hasattr(os, 'fork'):
     raise unittest.SkipTest("os.fork not defined")
@@ -14,11 +16,11 @@
     raise unittest.SkipTest("os.wait3 not defined")
 
 class Wait3Test(ForkWait):
-    def wait_impl(self, cpid):
+    def wait_impl(self, cpid, *, exitcode):
         # This many iterations can be required, since some previously run
         # tests (e.g. test_ctypes) could have spawned a lot of children
         # very quickly.
-        deadline = time.monotonic() + 10.0
+        deadline = time.monotonic() + support.SHORT_TIMEOUT
         while time.monotonic() <= deadline:
             # wait3() shouldn't hang, but some of the buildbots seem to hang
             # in the forking tests.  This is an attempt to fix the problem.
@@ -28,11 +30,27 @@
             time.sleep(0.1)
 
         self.assertEqual(spid, cpid)
-        self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
+        self.assertEqual(os.waitstatus_to_exitcode(status), exitcode)
         self.assertTrue(rusage)
 
+    def test_wait3_rusage_initialized(self):
+        # Ensure a successful wait3() call where no child was ready to report
+        # its exit status does not return uninitialized memory in the rusage
+        # structure. See bpo-36279.
+        args = [sys.executable, '-c', 'import sys; sys.stdin.read()']
+        proc = subprocess.Popen(args, stdin=subprocess.PIPE)
+        try:
+            pid, status, rusage = os.wait3(os.WNOHANG)
+            self.assertEqual(0, pid)
+            self.assertEqual(0, status)
+            self.assertEqual(0, sum(rusage))
+        finally:
+            proc.stdin.close()
+            proc.wait()
+
+
 def tearDownModule():
-    reap_children()
+    support.reap_children()
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_wait4.py b/Lib/test/test_wait4.py
index 3e6a79d..f8d5e13 100644
--- a/Lib/test/test_wait4.py
+++ b/Lib/test/test_wait4.py
@@ -6,21 +6,21 @@
 import sys
 import unittest
 from test.fork_wait import ForkWait
-from test.support import reap_children, get_attribute
+from test import support
 
 # If either of these do not exist, skip this test.
-get_attribute(os, 'fork')
-get_attribute(os, 'wait4')
+support.get_attribute(os, 'fork')
+support.get_attribute(os, 'wait4')
 
 
 class Wait4Test(ForkWait):
-    def wait_impl(self, cpid):
+    def wait_impl(self, cpid, *, exitcode):
         option = os.WNOHANG
         if sys.platform.startswith('aix'):
             # Issue #11185: wait4 is broken on AIX and will always return 0
             # with WNOHANG.
             option = 0
-        deadline = time.monotonic() + 10.0
+        deadline = time.monotonic() + support.SHORT_TIMEOUT
         while time.monotonic() <= deadline:
             # wait4() shouldn't hang, but some of the buildbots seem to hang
             # in the forking tests.  This is an attempt to fix the problem.
@@ -29,11 +29,11 @@
                 break
             time.sleep(0.1)
         self.assertEqual(spid, cpid)
-        self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
+        self.assertEqual(os.waitstatus_to_exitcode(status), exitcode)
         self.assertTrue(rusage)
 
 def tearDownModule():
-    reap_children()
+    support.reap_children()
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py
index 7b0d06b..dcc0ea8 100644
--- a/Lib/test/test_warnings/__init__.py
+++ b/Lib/test/test_warnings/__init__.py
@@ -940,8 +940,8 @@
             """))
 
         def run(*args):
-            res = assert_python_ok(*args)
-            stderr = res.err.decode('ascii', 'replace')
+            res = assert_python_ok(*args, PYTHONIOENCODING='utf-8')
+            stderr = res.err.decode('utf-8', 'replace')
             stderr = '\n'.join(stderr.splitlines())
 
             # normalize newlines
@@ -949,27 +949,26 @@
             return stderr
 
         # tracemalloc disabled
+        filename = os.path.abspath(support.TESTFN)
         stderr = run('-Wd', support.TESTFN)
-        expected = textwrap.dedent('''
-            {fname}:5: ResourceWarning: unclosed file <...>
+        expected = textwrap.dedent(f'''
+            {filename}:5: ResourceWarning: unclosed file <...>
               f = None
             ResourceWarning: Enable tracemalloc to get the object allocation traceback
-        ''')
-        expected = expected.format(fname=support.TESTFN).strip()
+        ''').strip()
         self.assertEqual(stderr, expected)
 
         # tracemalloc enabled
         stderr = run('-Wd', '-X', 'tracemalloc=2', support.TESTFN)
-        expected = textwrap.dedent('''
-            {fname}:5: ResourceWarning: unclosed file <...>
+        expected = textwrap.dedent(f'''
+            {filename}:5: ResourceWarning: unclosed file <...>
               f = None
             Object allocated at (most recent call last):
-              File "{fname}", lineno 7
+              File "{filename}", lineno 7
                 func()
-              File "{fname}", lineno 3
+              File "{filename}", lineno 3
                 f = open(__file__)
-        ''')
-        expected = expected.format(fname=support.TESTFN).strip()
+        ''').strip()
         self.assertEqual(stderr, expected)
 
 
@@ -1199,7 +1198,7 @@
     @unittest.skipUnless(sys.getfilesystemencoding() != 'ascii',
                          'requires non-ascii filesystemencoding')
     def test_nonascii(self):
-        PYTHONWARNINGS="ignore:DeprecationWarning" + (support.FS_NONASCII or '')
+        PYTHONWARNINGS="ignore:DeprecationWarning" + support.FS_NONASCII
         rc, stdout, stderr = assert_python_ok("-c",
             "import sys; sys.stdout.write(str(sys.warnoptions))",
             PYTHONIOENCODING="utf-8",
@@ -1228,7 +1227,6 @@
 
 
 class FinalizationTest(unittest.TestCase):
-    @support.requires_type_collecting
     def test_finalization(self):
         # Issue #19421: warnings.warn() should not crash
         # during Python finalization
@@ -1243,7 +1241,8 @@
 a=A()
         """
         rc, out, err = assert_python_ok("-c", code)
-        self.assertEqual(err.decode(), '<string>:7: UserWarning: test')
+        self.assertEqual(err.decode().rstrip(),
+                         '<string>:7: UserWarning: test')
 
     def test_late_resource_warning(self):
         # Issue #21925: Emitting a ResourceWarning late during the Python
diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py
index 8a42f8e4..eb231cb 100644
--- a/Lib/test/test_wave.py
+++ b/Lib/test/test_wave.py
@@ -105,9 +105,7 @@
         frames = byteswap(frames, 4)
 
 
-class MiscTestCase(audiotests.AudioMiscTests, unittest.TestCase):
-    module = wave
-
+class MiscTestCase(unittest.TestCase):
     def test__all__(self):
         blacklist = {'WAVE_FORMAT_PCM'}
         support.check__all__(self, wave, blacklist=blacklist)
diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py
index 2dbf3f4..56a42f0 100644
--- a/Lib/test/test_weakref.py
+++ b/Lib/test/test_weakref.py
@@ -11,7 +11,7 @@
 import random
 
 from test import support
-from test.support import script_helper
+from test.support import script_helper, ALWAYS_EQ
 
 # Used in ReferencesTestCase.test_ref_created_during_del() .
 ref_from_del = None
@@ -411,6 +411,26 @@
             # can be killed in the middle of the call
             "blech" in p
 
+    def test_proxy_reversed(self):
+        class MyObj:
+            def __len__(self):
+                return 3
+            def __reversed__(self):
+                return iter('cba')
+
+        obj = MyObj()
+        self.assertEqual("".join(reversed(weakref.proxy(obj))), "cba")
+
+    def test_proxy_hash(self):
+        cool_hash = 299_792_458
+
+        class MyObj:
+            def __hash__(self):
+                return cool_hash
+
+        obj = MyObj()
+        self.assertEqual(hash(weakref.proxy(obj)), cool_hash)
+
     def test_getweakrefcount(self):
         o = C()
         ref1 = weakref.ref(o)
@@ -649,7 +669,6 @@
         del c1, c2, C, D
         gc.collect()
 
-    @support.requires_type_collecting
     def test_callback_in_cycle_resurrection(self):
         import gc
 
@@ -814,6 +833,10 @@
         self.assertTrue(a != c)
         self.assertTrue(a == d)
         self.assertFalse(a != d)
+        self.assertFalse(a == x)
+        self.assertTrue(a != x)
+        self.assertTrue(a == ALWAYS_EQ)
+        self.assertFalse(a != ALWAYS_EQ)
         del x, y, z
         gc.collect()
         for r in a, b, c:
@@ -1122,6 +1145,9 @@
         _ne(a, f)
         _ne(b, e)
         _ne(b, f)
+        # Compare with different types
+        _ne(a, x.some_method)
+        _eq(a, ALWAYS_EQ)
         del x, y, z
         gc.collect()
         # Dead WeakMethods compare by identity
@@ -1603,6 +1629,43 @@
             self.assertEqual(list(d.keys()), [kw])
             self.assertEqual(d[kw], o)
 
+    def test_weak_valued_union_operators(self):
+        a = C()
+        b = C()
+        c = C()
+        wvd1 = weakref.WeakValueDictionary({1: a})
+        wvd2 = weakref.WeakValueDictionary({1: b, 2: a})
+        wvd3 = wvd1.copy()
+        d1 = {1: c, 3: b}
+        pairs = [(5, c), (6, b)]
+
+        tmp1 = wvd1 | wvd2 # Between two WeakValueDictionaries
+        self.assertEqual(dict(tmp1), dict(wvd1) | dict(wvd2))
+        self.assertIs(type(tmp1), weakref.WeakValueDictionary)
+        wvd1 |= wvd2
+        self.assertEqual(wvd1, tmp1)
+
+        tmp2 = wvd2 | d1 # Between WeakValueDictionary and mapping
+        self.assertEqual(dict(tmp2), dict(wvd2) | d1)
+        self.assertIs(type(tmp2), weakref.WeakValueDictionary)
+        wvd2 |= d1
+        self.assertEqual(wvd2, tmp2)
+
+        tmp3 = wvd3.copy() # Between WeakValueDictionary and iterable key, value
+        tmp3 |= pairs
+        self.assertEqual(dict(tmp3), dict(wvd3) | dict(pairs))
+        self.assertIs(type(tmp3), weakref.WeakValueDictionary)
+
+        tmp4 = d1 | wvd3 # Testing .__ror__
+        self.assertEqual(dict(tmp4), d1 | dict(wvd3))
+        self.assertIs(type(tmp4), weakref.WeakValueDictionary)
+
+        del a
+        self.assertNotIn(2, tmp1)
+        self.assertNotIn(2, tmp2)
+        self.assertNotIn(1, tmp3)
+        self.assertNotIn(1, tmp4)
+
     def test_weak_keyed_dict_update(self):
         self.check_update(weakref.WeakKeyDictionary,
                           {C(): 1, C(): 2, C(): 3})
@@ -1618,6 +1681,43 @@
         self.assertEqual(len(d), 1)
         self.assertEqual(list(d.keys()), [o2])
 
+    def test_weak_keyed_union_operators(self):
+        o1 = C()
+        o2 = C()
+        o3 = C()
+        wkd1 = weakref.WeakKeyDictionary({o1: 1, o2: 2})
+        wkd2 = weakref.WeakKeyDictionary({o3: 3, o1: 4})
+        wkd3 = wkd1.copy()
+        d1 = {o2: '5', o3: '6'}
+        pairs = [(o2, 7), (o3, 8)]
+
+        tmp1 = wkd1 | wkd2 # Between two WeakKeyDictionaries
+        self.assertEqual(dict(tmp1), dict(wkd1) | dict(wkd2))
+        self.assertIs(type(tmp1), weakref.WeakKeyDictionary)
+        wkd1 |= wkd2
+        self.assertEqual(wkd1, tmp1)
+
+        tmp2 = wkd2 | d1 # Between WeakKeyDictionary and mapping
+        self.assertEqual(dict(tmp2), dict(wkd2) | d1)
+        self.assertIs(type(tmp2), weakref.WeakKeyDictionary)
+        wkd2 |= d1
+        self.assertEqual(wkd2, tmp2)
+
+        tmp3 = wkd3.copy() # Between WeakKeyDictionary and iterable key, value
+        tmp3 |= pairs
+        self.assertEqual(dict(tmp3), dict(wkd3) | dict(pairs))
+        self.assertIs(type(tmp3), weakref.WeakKeyDictionary)
+
+        tmp4 = d1 | wkd3 # Testing .__ror__
+        self.assertEqual(dict(tmp4), d1 | dict(wkd3))
+        self.assertIs(type(tmp4), weakref.WeakKeyDictionary)
+
+        del o1
+        self.assertNotIn(4, tmp1.values())
+        self.assertNotIn(4, tmp2.values())
+        self.assertNotIn(1, tmp3.values())
+        self.assertNotIn(1, tmp4.values())
+
     def test_weak_valued_delitem(self):
         d = weakref.WeakValueDictionary()
         o1 = Object('1')
@@ -1891,20 +1991,10 @@
         f()
         self.assertEqual(res, [((1, 2), {'func': 3, 'obj': 4})])
 
-        res = []
-        with self.assertWarns(DeprecationWarning):
-            f = weakref.finalize(a, func=fin, arg=1)
-        self.assertEqual(f.peek(), (a, fin, (), {'arg': 1}))
-        f()
-        self.assertEqual(res, [((), {'arg': 1})])
-
-        res = []
-        with self.assertWarns(DeprecationWarning):
-            f = weakref.finalize(obj=a, func=fin, arg=1)
-        self.assertEqual(f.peek(), (a, fin, (), {'arg': 1}))
-        f()
-        self.assertEqual(res, [((), {'arg': 1})])
-
+        with self.assertRaises(TypeError):
+            weakref.finalize(a, func=fin, arg=1)
+        with self.assertRaises(TypeError):
+            weakref.finalize(obj=a, func=fin, arg=1)
         self.assertRaises(TypeError, weakref.finalize, a)
         self.assertRaises(TypeError, weakref.finalize)
 
diff --git a/Lib/test/test_weakset.py b/Lib/test/test_weakset.py
index 569facd..49a9b5c 100644
--- a/Lib/test/test_weakset.py
+++ b/Lib/test/test_weakset.py
@@ -2,6 +2,7 @@
 from weakref import WeakSet
 import string
 from collections import UserString as ustr
+from collections.abc import Set, MutableSet
 import gc
 import contextlib
 
@@ -437,6 +438,10 @@
     def test_repr(self):
         assert repr(self.s) == repr(self.s.data)
 
+    def test_abc(self):
+        self.assertIsInstance(self.s, Set)
+        self.assertIsInstance(self.s, MutableSet)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Lib/test/test_winconsoleio.py b/Lib/test/test_winconsoleio.py
index 9a61e48..a44f7bb 100644
--- a/Lib/test/test_winconsoleio.py
+++ b/Lib/test/test_winconsoleio.py
@@ -144,6 +144,10 @@
         self.assertStdinRoundTrip('ϼўТλФЙ')
         # Combining characters
         self.assertStdinRoundTrip('A͏B ﬖ̳AA̝')
+
+    # bpo-38325
+    @unittest.skipIf(True, "Handling Non-BMP characters is broken")
+    def test_input_nonbmp(self):
         # Non-BMP
         self.assertStdinRoundTrip('\U00100000\U0010ffff\U0010fffd')
 
@@ -163,6 +167,8 @@
 
                 self.assertEqual(actual, expected, 'stdin.read({})'.format(read_count))
 
+    # bpo-38325
+    @unittest.skipIf(True, "Handling Non-BMP characters is broken")
     def test_partial_surrogate_reads(self):
         # Test that reading less than 1 full character works when stdin
         # contains surrogate pairs that cannot be decoded to UTF-8 without
diff --git a/Lib/test/test_with.py b/Lib/test/test_with.py
index b1d7a15..f21bf65 100644
--- a/Lib/test/test_with.py
+++ b/Lib/test/test_with.py
@@ -7,7 +7,7 @@
 import sys
 import unittest
 from collections import deque
-from contextlib import _GeneratorContextManager, contextmanager
+from contextlib import _GeneratorContextManager, contextmanager, nullcontext
 
 
 class MockContextManager(_GeneratorContextManager):
@@ -641,6 +641,12 @@
             self.assertEqual(blah.two, 2)
             self.assertEqual(blah.three, 3)
 
+    def testWithExtendedTargets(self):
+        with nullcontext(range(1, 5)) as (a, *b, c):
+            self.assertEqual(a, 1)
+            self.assertEqual(b, [2, 3])
+            self.assertEqual(c, 4)
+
 
 class ExitSwallowsExceptionTestCase(unittest.TestCase):
 
diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py
index 6af4514..4bf5d39 100644
--- a/Lib/test/test_wsgiref.py
+++ b/Lib/test/test_wsgiref.py
@@ -1,5 +1,6 @@
 from unittest import mock
 from test import support
+from test.support import socket_helper
 from test.test_httpservers import NoLogRequestHandler
 from unittest import TestCase
 from wsgiref.util import setup_testing_defaults
@@ -263,7 +264,7 @@
         class WsgiHandler(NoLogRequestHandler, WSGIRequestHandler):
             pass
 
-        server = make_server(support.HOST, 0, app, handler_class=WsgiHandler)
+        server = make_server(socket_helper.HOST, 0, app, handler_class=WsgiHandler)
         self.addCleanup(server.server_close)
         interrupted = threading.Event()
 
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index b2492cd..5632b8b 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -242,7 +242,6 @@
         check_method(element.extend)
         check_method(element.insert)
         check_method(element.remove)
-        check_method(element.getchildren)
         check_method(element.find)
         check_method(element.iterfind)
         check_method(element.findall)
@@ -254,7 +253,6 @@
         check_method(element.items)
         check_method(element.iter)
         check_method(element.itertext)
-        check_method(element.getiterator)
 
         # These methods return an iterable. See bug 6472.
 
@@ -432,13 +430,14 @@
         self.assertEqual(ET.tostring(elem),
                 b'<test testa="testval" testb="test1" testc="test2">aa</test>')
 
+        # Test preserving white space chars in attributes
         elem = ET.Element('test')
         elem.set('a', '\r')
         elem.set('b', '\r\n')
         elem.set('c', '\t\n\r ')
-        elem.set('d', '\n\n')
+        elem.set('d', '\n\n\r\r\t\t  ')
         self.assertEqual(ET.tostring(elem),
-                b'<test a="&#10;" b="&#10;" c="&#09;&#10;&#10; " d="&#10;&#10;" />')
+                b'<test a="&#13;" b="&#13;&#10;" c="&#09;&#10;&#13; " d="&#10;&#10;&#13;&#13;&#09;&#09;  " />')
 
     def test_makeelement(self):
         # Test makeelement handling.
@@ -741,24 +740,20 @@
                 ('end-ns', ''),
             ])
 
-    # Element.getchildren() and ElementTree.getiterator() are deprecated.
-    @checkwarnings(("This method will be removed in future versions.  "
-                    "Use .+ instead.",
-                    DeprecationWarning))
-    def test_getchildren(self):
-        # Test Element.getchildren()
+    def test_children(self):
+        # Test Element children iteration
 
         with open(SIMPLE_XMLFILE, "rb") as f:
             tree = ET.parse(f)
-        self.assertEqual([summarize_list(elem.getchildren())
+        self.assertEqual([summarize_list(elem)
                           for elem in tree.getroot().iter()], [
                 ['element', 'element', 'empty-element'],
                 [],
                 [],
                 [],
             ])
-        self.assertEqual([summarize_list(elem.getchildren())
-                          for elem in tree.getiterator()], [
+        self.assertEqual([summarize_list(elem)
+                          for elem in tree.iter()], [
                 ['element', 'element', 'empty-element'],
                 [],
                 [],
@@ -766,13 +761,13 @@
             ])
 
         elem = ET.XML(SAMPLE_XML)
-        self.assertEqual(len(elem.getchildren()), 3)
-        self.assertEqual(len(elem[2].getchildren()), 1)
-        self.assertEqual(elem[:], elem.getchildren())
+        self.assertEqual(len(list(elem)), 3)
+        self.assertEqual(len(list(elem[2])), 1)
+        self.assertEqual(elem[:], list(elem))
         child1 = elem[0]
         child2 = elem[2]
         del elem[1:2]
-        self.assertEqual(len(elem.getchildren()), 2)
+        self.assertEqual(len(list(elem)), 2)
         self.assertEqual(child1, elem[0])
         self.assertEqual(child2, elem[1])
         elem[0:2] = [child2, child1]
@@ -780,7 +775,7 @@
         self.assertEqual(child1, elem[1])
         self.assertNotEqual(child1, elem[0])
         elem.clear()
-        self.assertEqual(elem.getchildren(), [])
+        self.assertEqual(list(elem), [])
 
     def test_writestring(self):
         elem = ET.XML("<html><body>text</body></html>")
@@ -788,6 +783,123 @@
         elem = ET.fromstring("<html><body>text</body></html>")
         self.assertEqual(ET.tostring(elem), b'<html><body>text</body></html>')
 
+    def test_indent(self):
+        elem = ET.XML("<root></root>")
+        ET.indent(elem)
+        self.assertEqual(ET.tostring(elem), b'<root />')
+
+        elem = ET.XML("<html><body>text</body></html>")
+        ET.indent(elem)
+        self.assertEqual(ET.tostring(elem), b'<html>\n  <body>text</body>\n</html>')
+
+        elem = ET.XML("<html> <body>text</body>  </html>")
+        ET.indent(elem)
+        self.assertEqual(ET.tostring(elem), b'<html>\n  <body>text</body>\n</html>')
+
+        elem = ET.XML("<html><body>text</body>tail</html>")
+        ET.indent(elem)
+        self.assertEqual(ET.tostring(elem), b'<html>\n  <body>text</body>tail</html>')
+
+        elem = ET.XML("<html><body><p>par</p>\n<p>text</p>\t<p><br/></p></body></html>")
+        ET.indent(elem)
+        self.assertEqual(
+            ET.tostring(elem),
+            b'<html>\n'
+            b'  <body>\n'
+            b'    <p>par</p>\n'
+            b'    <p>text</p>\n'
+            b'    <p>\n'
+            b'      <br />\n'
+            b'    </p>\n'
+            b'  </body>\n'
+            b'</html>'
+        )
+
+        elem = ET.XML("<html><body><p>pre<br/>post</p><p>text</p></body></html>")
+        ET.indent(elem)
+        self.assertEqual(
+            ET.tostring(elem),
+            b'<html>\n'
+            b'  <body>\n'
+            b'    <p>pre<br />post</p>\n'
+            b'    <p>text</p>\n'
+            b'  </body>\n'
+            b'</html>'
+        )
+
+    def test_indent_space(self):
+        elem = ET.XML("<html><body><p>pre<br/>post</p><p>text</p></body></html>")
+        ET.indent(elem, space='\t')
+        self.assertEqual(
+            ET.tostring(elem),
+            b'<html>\n'
+            b'\t<body>\n'
+            b'\t\t<p>pre<br />post</p>\n'
+            b'\t\t<p>text</p>\n'
+            b'\t</body>\n'
+            b'</html>'
+        )
+
+        elem = ET.XML("<html><body><p>pre<br/>post</p><p>text</p></body></html>")
+        ET.indent(elem, space='')
+        self.assertEqual(
+            ET.tostring(elem),
+            b'<html>\n'
+            b'<body>\n'
+            b'<p>pre<br />post</p>\n'
+            b'<p>text</p>\n'
+            b'</body>\n'
+            b'</html>'
+        )
+
+    def test_indent_space_caching(self):
+        elem = ET.XML("<html><body><p>par</p><p>text</p><p><br/></p><p /></body></html>")
+        ET.indent(elem)
+        self.assertEqual(
+            {el.tail for el in elem.iter()},
+            {None, "\n", "\n  ", "\n    "}
+        )
+        self.assertEqual(
+            {el.text for el in elem.iter()},
+            {None, "\n  ", "\n    ", "\n      ", "par", "text"}
+        )
+        self.assertEqual(
+            len({el.tail for el in elem.iter()}),
+            len({id(el.tail) for el in elem.iter()}),
+        )
+
+    def test_indent_level(self):
+        elem = ET.XML("<html><body><p>pre<br/>post</p><p>text</p></body></html>")
+        with self.assertRaises(ValueError):
+            ET.indent(elem, level=-1)
+        self.assertEqual(
+            ET.tostring(elem),
+            b"<html><body><p>pre<br />post</p><p>text</p></body></html>"
+        )
+
+        ET.indent(elem, level=2)
+        self.assertEqual(
+            ET.tostring(elem),
+            b'<html>\n'
+            b'      <body>\n'
+            b'        <p>pre<br />post</p>\n'
+            b'        <p>text</p>\n'
+            b'      </body>\n'
+            b'    </html>'
+        )
+
+        elem = ET.XML("<html><body><p>pre<br/>post</p><p>text</p></body></html>")
+        ET.indent(elem, level=1, space=' ')
+        self.assertEqual(
+            ET.tostring(elem),
+            b'<html>\n'
+            b'  <body>\n'
+            b'   <p>pre<br />post</p>\n'
+            b'   <p>text</p>\n'
+            b'  </body>\n'
+            b' </html>'
+        )
+
     def test_tostring_default_namespace(self):
         elem = ET.XML('<body xmlns="http://effbot.org/ns"><tag/></body>')
         self.assertEqual(
@@ -1557,6 +1669,17 @@
 </document>
 """.format(html.escape(SIMPLE_XMLFILE, True))
 
+XINCLUDE["include_c1_repeated.xml"] = """\
+<?xml version='1.0'?>
+<document xmlns:xi="http://www.w3.org/2001/XInclude">
+  <p>The following is the source code of Recursive1.xml:</p>
+  <xi:include href="C1.xml"/>
+  <xi:include href="C1.xml"/>
+  <xi:include href="C1.xml"/>
+  <xi:include href="C1.xml"/>
+</document>
+"""
+
 #
 # badly formatted xi:include tags
 
@@ -1577,6 +1700,31 @@
 </div>
 """
 
+XINCLUDE["Recursive1.xml"] = """\
+<?xml version='1.0'?>
+<document xmlns:xi="http://www.w3.org/2001/XInclude">
+  <p>The following is the source code of Recursive2.xml:</p>
+  <xi:include href="Recursive2.xml"/>
+</document>
+"""
+
+XINCLUDE["Recursive2.xml"] = """\
+<?xml version='1.0'?>
+<document xmlns:xi="http://www.w3.org/2001/XInclude">
+  <p>The following is the source code of Recursive3.xml:</p>
+  <xi:include href="Recursive3.xml"/>
+</document>
+"""
+
+XINCLUDE["Recursive3.xml"] = """\
+<?xml version='1.0'?>
+<document xmlns:xi="http://www.w3.org/2001/XInclude">
+  <p>The following is the source code of Recursive1.xml:</p>
+  <xi:include href="Recursive1.xml"/>
+</document>
+"""
+
+
 class XIncludeTest(unittest.TestCase):
 
     def xinclude_loader(self, href, parse="xml", encoding=None):
@@ -1678,6 +1826,13 @@
             '  </ns0:include>\n'
             '</div>') # C5
 
+    def test_xinclude_repeated(self):
+        from xml.etree import ElementInclude
+
+        document = self.xinclude_loader("include_c1_repeated.xml")
+        ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(1+4*2, len(document.findall(".//p")))
+
     def test_xinclude_failures(self):
         from xml.etree import ElementInclude
 
@@ -1710,6 +1865,45 @@
                 "xi:fallback tag must be child of xi:include "
                 "('{http://www.w3.org/2001/XInclude}fallback')")
 
+        # Test infinitely recursive includes.
+        document = self.xinclude_loader("Recursive1.xml")
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, self.xinclude_loader)
+        self.assertEqual(str(cm.exception),
+                "recursive include of Recursive2.xml")
+
+        # Test 'max_depth' limitation.
+        document = self.xinclude_loader("Recursive1.xml")
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, self.xinclude_loader, max_depth=None)
+        self.assertEqual(str(cm.exception),
+                "recursive include of Recursive2.xml")
+
+        document = self.xinclude_loader("Recursive1.xml")
+        with self.assertRaises(ElementInclude.LimitedRecursiveIncludeError) as cm:
+            ElementInclude.include(document, self.xinclude_loader, max_depth=0)
+        self.assertEqual(str(cm.exception),
+                "maximum xinclude depth reached when including file Recursive2.xml")
+
+        document = self.xinclude_loader("Recursive1.xml")
+        with self.assertRaises(ElementInclude.LimitedRecursiveIncludeError) as cm:
+            ElementInclude.include(document, self.xinclude_loader, max_depth=1)
+        self.assertEqual(str(cm.exception),
+                "maximum xinclude depth reached when including file Recursive3.xml")
+
+        document = self.xinclude_loader("Recursive1.xml")
+        with self.assertRaises(ElementInclude.LimitedRecursiveIncludeError) as cm:
+            ElementInclude.include(document, self.xinclude_loader, max_depth=2)
+        self.assertEqual(str(cm.exception),
+                "maximum xinclude depth reached when including file Recursive1.xml")
+
+        document = self.xinclude_loader("Recursive1.xml")
+        with self.assertRaises(ElementInclude.FatalIncludeError) as cm:
+            ElementInclude.include(document, self.xinclude_loader, max_depth=3)
+        self.assertEqual(str(cm.exception),
+                "recursive include of Recursive2.xml")
+
+
 # --------------------------------------------------------------------
 # reported bugs
 
@@ -2066,6 +2260,10 @@
         text = text[6:-4]
         self.assertEqual(root.get('b'), text)
 
+    def test_39495_treebuilder_start(self):
+        self.assertRaises(TypeError, ET.TreeBuilder().start, "tag")
+        self.assertRaises(TypeError, ET.TreeBuilder().start, "tag", None)
+
 
 
 # --------------------------------------------------------------------
@@ -2100,6 +2298,35 @@
         self.assertIsNot(element_foo.attrib, attrib)
         self.assertNotEqual(element_foo.attrib, attrib)
 
+    def test_copy(self):
+        # Only run this test if Element.copy() is defined.
+        if "copy" not in dir(ET.Element):
+            raise unittest.SkipTest("Element.copy() not present")
+
+        element_foo = ET.Element("foo", { "zix": "wyp" })
+        element_foo.append(ET.Element("bar", { "baz": "qix" }))
+
+        with self.assertWarns(DeprecationWarning):
+            element_foo2 = element_foo.copy()
+
+        # elements are not the same
+        self.assertIsNot(element_foo2, element_foo)
+
+        # string attributes are equal
+        self.assertEqual(element_foo2.tag, element_foo.tag)
+        self.assertEqual(element_foo2.text, element_foo.text)
+        self.assertEqual(element_foo2.tail, element_foo.tail)
+
+        # number of children is the same
+        self.assertEqual(len(element_foo2), len(element_foo))
+
+        # children are the same
+        for (child1, child2) in itertools.zip_longest(element_foo, element_foo2):
+            self.assertIs(child1, child2)
+
+        # attrib is a copy
+        self.assertEqual(element_foo2.attrib, element_foo.attrib)
+
     def test___copy__(self):
         element_foo = ET.Element("foo", { "zix": "wyp" })
         element_foo.append(ET.Element("bar", { "baz": "qix" }))
@@ -2838,40 +3065,6 @@
         self.assertEqual(self._ilist(doc), all_tags)
         self.assertEqual(self._ilist(doc, '*'), all_tags)
 
-    # Element.getiterator() is deprecated.
-    @checkwarnings(("This method will be removed in future versions.  "
-                    "Use .+ instead.", DeprecationWarning))
-    def test_getiterator(self):
-        doc = ET.XML('''
-            <document>
-                <house>
-                    <room>bedroom1</room>
-                    <room>bedroom2</room>
-                </house>
-                <shed>nothing here
-                </shed>
-                <house>
-                    <room>bedroom8</room>
-                </house>
-            </document>''')
-
-        self.assertEqual(summarize_list(doc.getiterator('room')),
-                         ['room'] * 3)
-        self.assertEqual(summarize_list(doc.getiterator('house')),
-                         ['house'] * 2)
-
-        # test that getiterator also accepts 'tag' as a keyword arg
-        self.assertEqual(
-            summarize_list(doc.getiterator(tag='room')),
-            ['room'] * 3)
-
-        # make sure both tag=None and tag='*' return all tags
-        all_tags = ['document', 'house', 'room', 'room',
-                    'shed', 'house', 'room']
-        self.assertEqual(summarize_list(doc.getiterator()), all_tags)
-        self.assertEqual(summarize_list(doc.getiterator(None)), all_tags)
-        self.assertEqual(summarize_list(doc.getiterator('*')), all_tags)
-
     def test_copy(self):
         a = ET.Element('a')
         it = a.iter()
@@ -3701,6 +3894,14 @@
         #self.assertEqual(c14n_roundtrip("<doc xmlns:x='http://example.com/x' xmlns='http://example.com/default'><b y:a1='1' xmlns='http://example.com/default' a3='3' xmlns:y='http://example.com/y' y:a2='2'/></doc>"),
         #'<doc xmlns:x="http://example.com/x"><b xmlns:y="http://example.com/y" a3="3" y:a1="1" y:a2="2"></b></doc>')
 
+        # Namespace issues
+        xml = '<X xmlns="http://nps/a"><Y targets="abc,xyz"></Y></X>'
+        self.assertEqual(c14n_roundtrip(xml), xml)
+        xml = '<X xmlns="http://nps/a"><Y xmlns="http://nsp/b" targets="abc,xyz"></Y></X>'
+        self.assertEqual(c14n_roundtrip(xml), xml)
+        xml = '<X xmlns="http://nps/a"><Y xmlns:b="http://nsp/b" b:targets="abc,xyz"></Y></X>'
+        self.assertEqual(c14n_roundtrip(xml), xml)
+
     def test_c14n_exclusion(self):
         xml = textwrap.dedent("""\
         <root xmlns:x="http://example.com/x">
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 52bacc1..f68af52 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -15,6 +15,8 @@
 import io
 import contextlib
 from test import support
+from test.support import socket_helper
+from test.support import ALWAYS_EQ, LARGEST, SMALLEST
 
 try:
     import gzip
@@ -333,7 +335,7 @@
             server.handle_request()  # First request and attempt at second
             server.handle_request()  # Retried second request
 
-        server = http.server.HTTPServer((support.HOST, 0), RequestHandler)
+        server = http.server.HTTPServer((socket_helper.HOST, 0), RequestHandler)
         self.addCleanup(server.server_close)
         thread = threading.Thread(target=run_server)
         thread.start()
@@ -530,14 +532,10 @@
         # some other types
         dbytes = dstr.encode('ascii')
         dtuple = now.timetuple()
-        with self.assertRaises(TypeError):
-            dtime == 1970
-        with self.assertRaises(TypeError):
-            dtime != dbytes
-        with self.assertRaises(TypeError):
-            dtime == bytearray(dbytes)
-        with self.assertRaises(TypeError):
-            dtime != dtuple
+        self.assertFalse(dtime == 1970)
+        self.assertTrue(dtime != dbytes)
+        self.assertFalse(dtime == bytearray(dbytes))
+        self.assertTrue(dtime != dtuple)
         with self.assertRaises(TypeError):
             dtime < float(1970)
         with self.assertRaises(TypeError):
@@ -547,6 +545,18 @@
         with self.assertRaises(TypeError):
             dtime >= dtuple
 
+        self.assertTrue(dtime == ALWAYS_EQ)
+        self.assertFalse(dtime != ALWAYS_EQ)
+        self.assertTrue(dtime < LARGEST)
+        self.assertFalse(dtime > LARGEST)
+        self.assertTrue(dtime <= LARGEST)
+        self.assertFalse(dtime >= LARGEST)
+        self.assertFalse(dtime < SMALLEST)
+        self.assertTrue(dtime > SMALLEST)
+        self.assertFalse(dtime <= SMALLEST)
+        self.assertTrue(dtime >= SMALLEST)
+
+
 class BinaryTestCase(unittest.TestCase):
 
     # XXX What should str(Binary(b"\xff")) return?  I'm chosing "\xff"
diff --git a/Lib/test/test_zipapp.py b/Lib/test/test_zipapp.py
index 73bddc7..69f2e55 100644
--- a/Lib/test/test_zipapp.py
+++ b/Lib/test/test_zipapp.py
@@ -101,7 +101,7 @@
         expected_target = self.tmpdir / 'source.pyz'
         self.assertTrue(expected_target.is_file())
 
-    @requires_zlib
+    @requires_zlib()
     def test_create_archive_with_compression(self):
         # Test packing a directory into a compressed archive.
         source = self.tmpdir / 'source'
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index e2e37a1..999197a 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -16,7 +16,7 @@
 
 
 from tempfile import TemporaryFile
-from random import randint, random, getrandbits
+from random import randint, random, randbytes
 
 from test.support import script_helper
 from test.support import (TESTFN, findfile, unlink, rmtree, temp_dir, temp_cwd,
@@ -33,9 +33,6 @@
                    ('ziptest2dir/ziptest3dir/_ziptest3', 'azsxdcfvgb'),
                    ('ziptest2dir/ziptest3dir/ziptest4dir/_ziptest3', '6y7u8i9o0p')]
 
-def getrandbytes(size):
-    return getrandbits(8 * size).to_bytes(size, 'little')
-
 def get_files(test):
     yield TESTFN2
     with TemporaryFile() as f:
@@ -324,7 +321,7 @@
         # than requested.
         for test_size in (1, 4095, 4096, 4097, 16384):
             file_size = test_size + 1
-            junk = getrandbytes(file_size)
+            junk = randbytes(file_size)
             with zipfile.ZipFile(io.BytesIO(), "w", self.compression) as zipf:
                 zipf.writestr('foo', junk)
                 with zipf.open('foo', 'r') as fp:
@@ -572,6 +569,20 @@
             with open(TESTFN, "rb") as f:
                 self.assertEqual(zipfp.read(TESTFN), f.read())
 
+    def test_io_on_closed_zipextfile(self):
+        fname = "somefile.txt"
+        with zipfile.ZipFile(TESTFN2, mode="w") as zipfp:
+            zipfp.writestr(fname, "bogus")
+
+        with zipfile.ZipFile(TESTFN2, mode="r") as zipfp:
+            with zipfp.open(fname) as fid:
+                fid.close()
+                self.assertRaises(ValueError, fid.read)
+                self.assertRaises(ValueError, fid.seek, 0)
+                self.assertRaises(ValueError, fid.tell)
+                self.assertRaises(ValueError, fid.readable)
+                self.assertRaises(ValueError, fid.seekable)
+
     def test_write_to_readonly(self):
         """Check that trying to call write() on a readonly ZipFile object
         raises a ValueError."""
@@ -629,7 +640,7 @@
             self.assertEqual(zinfo.date_time, (2107, 12, 31, 23, 59, 59))
 
 
-@requires_zlib
+@requires_zlib()
 class DeflateTestsWithSourceFile(AbstractTestsWithSourceFile,
                                  unittest.TestCase):
     compression = zipfile.ZIP_DEFLATED
@@ -645,12 +656,12 @@
             self.assertEqual(sinfo.compress_type, zipfile.ZIP_STORED)
             self.assertEqual(dinfo.compress_type, zipfile.ZIP_DEFLATED)
 
-@requires_bz2
+@requires_bz2()
 class Bzip2TestsWithSourceFile(AbstractTestsWithSourceFile,
                                unittest.TestCase):
     compression = zipfile.ZIP_BZIP2
 
-@requires_lzma
+@requires_lzma()
 class LzmaTestsWithSourceFile(AbstractTestsWithSourceFile,
                               unittest.TestCase):
     compression = zipfile.ZIP_LZMA
@@ -1064,17 +1075,17 @@
                     self.assertEqual(zf.read(zinfo), expected_content)
 
 
-@requires_zlib
+@requires_zlib()
 class DeflateTestZip64InSmallFiles(AbstractTestZip64InSmallFiles,
                                    unittest.TestCase):
     compression = zipfile.ZIP_DEFLATED
 
-@requires_bz2
+@requires_bz2()
 class Bzip2TestZip64InSmallFiles(AbstractTestZip64InSmallFiles,
                                  unittest.TestCase):
     compression = zipfile.ZIP_BZIP2
 
-@requires_lzma
+@requires_lzma()
 class LzmaTestZip64InSmallFiles(AbstractTestZip64InSmallFiles,
                                 unittest.TestCase):
     compression = zipfile.ZIP_LZMA
@@ -1109,15 +1120,15 @@
 class StoredWriterTests(AbstractWriterTests, unittest.TestCase):
     compression = zipfile.ZIP_STORED
 
-@requires_zlib
+@requires_zlib()
 class DeflateWriterTests(AbstractWriterTests, unittest.TestCase):
     compression = zipfile.ZIP_DEFLATED
 
-@requires_bz2
+@requires_bz2()
 class Bzip2WriterTests(AbstractWriterTests, unittest.TestCase):
     compression = zipfile.ZIP_BZIP2
 
-@requires_lzma
+@requires_lzma()
 class LzmaWriterTests(AbstractWriterTests, unittest.TestCase):
     compression = zipfile.ZIP_LZMA
 
@@ -1571,7 +1582,7 @@
         self.assertRaises(NotImplementedError, zipfile.ZipFile,
                           io.BytesIO(data), 'r')
 
-    @requires_zlib
+    @requires_zlib()
     def test_read_unicode_filenames(self):
         # bug #10801
         fname = findfile('zip_cp437_header.zip')
@@ -1844,11 +1855,14 @@
             self.assertEqual(zipf.comment, b"an updated comment")
 
         # check that comments are correctly shortened in append mode
+        # and the file is indeed truncated
         with zipfile.ZipFile(TESTFN,mode="w") as zipf:
             zipf.comment = b"original comment that's longer"
             zipf.writestr("foo.txt", "O, for a Muse of Fire!")
+        original_zip_size = os.path.getsize(TESTFN)
         with zipfile.ZipFile(TESTFN,mode="a") as zipf:
             zipf.comment = b"shorter comment"
+        self.assertTrue(original_zip_size > os.path.getsize(TESTFN))
         with zipfile.ZipFile(TESTFN,mode="r") as zipf:
             self.assertEqual(zipf.comment, b"shorter comment")
 
@@ -1903,6 +1917,33 @@
         self.assertRaises(ValueError,
                           zipfile.ZipInfo, 'seventies', (1979, 1, 1, 0, 0, 0))
 
+    def test_create_empty_zipinfo_repr(self):
+        """Before bpo-26185, repr() on empty ZipInfo object was failing."""
+        zi = zipfile.ZipInfo(filename="empty")
+        self.assertEqual(repr(zi), "<ZipInfo filename='empty' file_size=0>")
+
+    def test_create_empty_zipinfo_default_attributes(self):
+        """Ensure all required attributes are set."""
+        zi = zipfile.ZipInfo()
+        self.assertEqual(zi.orig_filename, "NoName")
+        self.assertEqual(zi.filename, "NoName")
+        self.assertEqual(zi.date_time, (1980, 1, 1, 0, 0, 0))
+        self.assertEqual(zi.compress_type, zipfile.ZIP_STORED)
+        self.assertEqual(zi.comment, b"")
+        self.assertEqual(zi.extra, b"")
+        self.assertIn(zi.create_system, (0, 3))
+        self.assertEqual(zi.create_version, zipfile.DEFAULT_VERSION)
+        self.assertEqual(zi.extract_version, zipfile.DEFAULT_VERSION)
+        self.assertEqual(zi.reserved, 0)
+        self.assertEqual(zi.flag_bits, 0)
+        self.assertEqual(zi.volume, 0)
+        self.assertEqual(zi.internal_attr, 0)
+        self.assertEqual(zi.external_attr, 0)
+
+        # Before bpo-26185, both were missing
+        self.assertEqual(zi.file_size, 0)
+        self.assertEqual(zi.compress_size, 0)
+
     def test_zipfile_with_short_extra_field(self):
         """If an extra field in the header is less than 4 bytes, skip it."""
         zipdata = (
@@ -1985,7 +2026,7 @@
                 fp.seek(0, os.SEEK_SET)
                 self.assertEqual(fp.tell(), 0)
 
-    @requires_bz2
+    @requires_bz2()
     def test_decompress_without_3rd_party_library(self):
         data = b'PK\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         zip_file = io.BytesIO(data)
@@ -2043,7 +2084,7 @@
         b'lePK\005\006\0\0\0\0\001\0\001\0003\000'
         b'\0\0/\0\0\0\0\0')
 
-@requires_zlib
+@requires_zlib()
 class DeflateBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_DEFLATED
     zip_with_bad_crc = (
@@ -2056,7 +2097,7 @@
         b'\x00afilePK\x05\x06\x00\x00\x00\x00\x01\x00'
         b'\x01\x003\x00\x00\x003\x00\x00\x00\x00\x00')
 
-@requires_bz2
+@requires_bz2()
 class Bzip2BadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_BZIP2
     zip_with_bad_crc = (
@@ -2072,7 +2113,7 @@
         b'\x05\x06\x00\x00\x00\x00\x01\x00\x01\x003\x00\x00\x00[\x00'
         b'\x00\x00\x00\x00')
 
-@requires_lzma
+@requires_lzma()
 class LzmaBadCrcTests(AbstractBadCrcTests, unittest.TestCase):
     compression = zipfile.ZIP_LZMA
     zip_with_bad_crc = (
@@ -2139,7 +2180,7 @@
         self.zip2.setpassword(b"perl")
         self.assertRaises(RuntimeError, self.zip2.read, "zero")
 
-    @requires_zlib
+    @requires_zlib()
     def test_good_password(self):
         self.zip.setpassword(b"python")
         self.assertEqual(self.zip.read("test.txt"), self.plain)
@@ -2285,17 +2326,17 @@
                                        unittest.TestCase):
     compression = zipfile.ZIP_STORED
 
-@requires_zlib
+@requires_zlib()
 class DeflateTestsWithRandomBinaryFiles(AbstractTestsWithRandomBinaryFiles,
                                         unittest.TestCase):
     compression = zipfile.ZIP_DEFLATED
 
-@requires_bz2
+@requires_bz2()
 class Bzip2TestsWithRandomBinaryFiles(AbstractTestsWithRandomBinaryFiles,
                                       unittest.TestCase):
     compression = zipfile.ZIP_BZIP2
 
-@requires_lzma
+@requires_lzma()
 class LzmaTestsWithRandomBinaryFiles(AbstractTestsWithRandomBinaryFiles,
                                      unittest.TestCase):
     compression = zipfile.ZIP_LZMA
@@ -2383,12 +2424,12 @@
                     self.assertEqual(zipf.read('twos'), b'222')
 
 
-@requires_zlib
+@requires_zlib()
 class TestsWithMultipleOpens(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
-        cls.data1 = b'111' + getrandbytes(10000)
-        cls.data2 = b'222' + getrandbytes(10000)
+        cls.data1 = b'111' + randbytes(10000)
+        cls.data2 = b'222' + randbytes(10000)
 
     def make_test_archive(self, f):
         # Create the ZIP archive
@@ -2649,7 +2690,7 @@
                                   PYTHONIOENCODING='ascii:backslashreplace')
             self.assertEqual(out, expected)
 
-    @requires_zlib
+    @requires_zlib()
     def test_create_command(self):
         self.addCleanup(unlink, TESTFN)
         with open(TESTFN, 'w') as f:
@@ -2845,7 +2886,7 @@
             a, b, g = root.iterdir()
             with a.open() as strm:
                 data = strm.read()
-            assert data == b"content of a"
+            assert data == "content of a"
 
     def test_read(self):
         for alpharep in self.zipfile_alpharep():
diff --git a/Lib/test/test_zipfile64.py b/Lib/test/test_zipfile64.py
index 56746bc..3a788de 100644
--- a/Lib/test/test_zipfile64.py
+++ b/Lib/test/test_zipfile64.py
@@ -73,7 +73,7 @@
             self.assertFalse(f.closed)
         self.zipTest(TESTFN2, zipfile.ZIP_STORED)
 
-    @requires_zlib
+    @requires_zlib()
     def testDeflated(self):
         # Try the temp file first.  If we do TESTFN2 first, then it hogs
         # gigabytes of disk space for the duration of the test.
diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py
index 2af8689..5602860 100644
--- a/Lib/test/test_zipimport.py
+++ b/Lib/test/test_zipimport.py
@@ -683,7 +683,7 @@
         self.doTest(".py", files, TESTMOD, comment=b"c" * ((1 << 16) - 1))
 
 
-@support.requires_zlib
+@support.requires_zlib()
 class CompressedZipImportTestCase(UncompressedZipImportTestCase):
     compression = ZIP_DEFLATED
 
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py
index f828b4c..02509cd 100644
--- a/Lib/test/test_zlib.py
+++ b/Lib/test/test_zlib.py
@@ -134,8 +134,7 @@
         # Generate 10 MiB worth of random, and expand it by repeating it.
         # The assumption is that zlib's memory is not big enough to exploit
         # such spread out redundancy.
-        data = b''.join([random.getrandbits(8 * _1M).to_bytes(_1M, 'little')
-                        for i in range(10)])
+        data = random.randbytes(_1M * 10)
         data = data * (size // len(data) + 1)
         try:
             compress_func(data)
@@ -488,7 +487,7 @@
                 # others might simply have a single RNG
                 gen = random
         gen.seed(1)
-        data = genblock(1, 17 * 1024, generator=gen)
+        data = gen.randbytes(17 * 1024)
 
         # compress, sync-flush, and decompress
         first = co.compress(data)
@@ -825,20 +824,6 @@
         self.assertEqual(dco.decompress(gzip), HAMLET_SCENE)
 
 
-def genblock(seed, length, step=1024, generator=random):
-    """length-byte stream of random data from a seed (in step-byte blocks)."""
-    if seed is not None:
-        generator.seed(seed)
-    randint = generator.randint
-    if length < step or step < 2:
-        step = length
-    blocks = bytes()
-    for i in range(0, length, step):
-        blocks += bytes(randint(0, 255) for x in range(step))
-    return blocks
-
-
-
 def choose_lines(source, number, seed=None, generator=random):
     """Return a list of number lines randomly chosen from the source"""
     if seed is not None:
@@ -847,7 +832,6 @@
     return [generator.choice(sources) for n in range(number)]
 
 
-
 HAMLET_SCENE = b"""
 LAERTES
 
diff --git a/Lib/test/test_zoneinfo/__init__.py b/Lib/test/test_zoneinfo/__init__.py
new file mode 100644
index 0000000..98cc441
--- /dev/null
+++ b/Lib/test/test_zoneinfo/__init__.py
@@ -0,0 +1 @@
+from .test_zoneinfo import *
diff --git a/Lib/test/test_zoneinfo/__main__.py b/Lib/test/test_zoneinfo/__main__.py
new file mode 100644
index 0000000..5cc4e05
--- /dev/null
+++ b/Lib/test/test_zoneinfo/__main__.py
@@ -0,0 +1,3 @@
+import unittest
+
+unittest.main('test.test_zoneinfo')
diff --git a/Lib/test/test_zoneinfo/_support.py b/Lib/test/test_zoneinfo/_support.py
new file mode 100644
index 0000000..0fe162c
--- /dev/null
+++ b/Lib/test/test_zoneinfo/_support.py
@@ -0,0 +1,100 @@
+import contextlib
+import functools
+import sys
+import threading
+import unittest
+from test.support import import_fresh_module
+
+OS_ENV_LOCK = threading.Lock()
+TZPATH_LOCK = threading.Lock()
+TZPATH_TEST_LOCK = threading.Lock()
+
+
+def call_once(f):
+    """Decorator that ensures a function is only ever called once."""
+    lock = threading.Lock()
+    cached = functools.lru_cache(None)(f)
+
+    @functools.wraps(f)
+    def inner():
+        with lock:
+            return cached()
+
+    return inner
+
+
+@call_once
+def get_modules():
+    """Retrieve two copies of zoneinfo: pure Python and C accelerated.
+
+    Because this function manipulates the import system in a way that might
+    be fragile or do unexpected things if it is run many times, it uses a
+    `call_once` decorator to ensure that this is only ever called exactly
+    one time — in other words, when using this function you will only ever
+    get one copy of each module rather than a fresh import each time.
+    """
+    import zoneinfo as c_module
+
+    py_module = import_fresh_module("zoneinfo", blocked=["_zoneinfo"])
+
+    return py_module, c_module
+
+
+@contextlib.contextmanager
+def set_zoneinfo_module(module):
+    """Make sure sys.modules["zoneinfo"] refers to `module`.
+
+    This is necessary because `pickle` will refuse to serialize
+    an type calling itself `zoneinfo.ZoneInfo` unless `zoneinfo.ZoneInfo`
+    refers to the same object.
+    """
+
+    NOT_PRESENT = object()
+    old_zoneinfo = sys.modules.get("zoneinfo", NOT_PRESENT)
+    sys.modules["zoneinfo"] = module
+    yield
+    if old_zoneinfo is not NOT_PRESENT:
+        sys.modules["zoneinfo"] = old_zoneinfo
+    else:  # pragma: nocover
+        sys.modules.pop("zoneinfo")
+
+
+class ZoneInfoTestBase(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        cls.klass = cls.module.ZoneInfo
+        super().setUpClass()
+
+    @contextlib.contextmanager
+    def tzpath_context(self, tzpath, block_tzdata=True, lock=TZPATH_LOCK):
+        def pop_tzdata_modules():
+            tzdata_modules = {}
+            for modname in list(sys.modules):
+                if modname.split(".", 1)[0] != "tzdata":  # pragma: nocover
+                    continue
+
+                tzdata_modules[modname] = sys.modules.pop(modname)
+
+            return tzdata_modules
+
+        with lock:
+            if block_tzdata:
+                # In order to fully exclude tzdata from the path, we need to
+                # clear the sys.modules cache of all its contents — setting the
+                # root package to None is not enough to block direct access of
+                # already-imported submodules (though it will prevent new
+                # imports of submodules).
+                tzdata_modules = pop_tzdata_modules()
+                sys.modules["tzdata"] = None
+
+            old_path = self.module.TZPATH
+            try:
+                self.module.reset_tzpath(tzpath)
+                yield
+            finally:
+                if block_tzdata:
+                    sys.modules.pop("tzdata")
+                    for modname, module in tzdata_modules.items():
+                        sys.modules[modname] = module
+
+                self.module.reset_tzpath(old_path)
diff --git a/Lib/test/test_zoneinfo/data/update_test_data.py b/Lib/test/test_zoneinfo/data/update_test_data.py
new file mode 100644
index 0000000..f531ab3
--- /dev/null
+++ b/Lib/test/test_zoneinfo/data/update_test_data.py
@@ -0,0 +1,122 @@
+"""
+Script to automatically generate a JSON file containing time zone information.
+
+This is done to allow "pinning" a small subset of the tzdata in the tests,
+since we are testing properties of a file that may be subject to change. For
+example, the behavior in the far future of any given zone is likely to change,
+but "does this give the right answer for this file in 2040" is still an
+important property to test.
+
+This must be run from a computer with zoneinfo data installed.
+"""
+from __future__ import annotations
+
+import base64
+import functools
+import json
+import lzma
+import pathlib
+import textwrap
+import typing
+
+import zoneinfo
+
+KEYS = [
+    "Africa/Abidjan",
+    "Africa/Casablanca",
+    "America/Los_Angeles",
+    "America/Santiago",
+    "Asia/Tokyo",
+    "Australia/Sydney",
+    "Europe/Dublin",
+    "Europe/Lisbon",
+    "Europe/London",
+    "Pacific/Kiritimati",
+    "UTC",
+]
+
+TEST_DATA_LOC = pathlib.Path(__file__).parent
+
+
+@functools.lru_cache(maxsize=None)
+def get_zoneinfo_path() -> pathlib.Path:
+    """Get the first zoneinfo directory on TZPATH containing the "UTC" zone."""
+    key = "UTC"
+    for path in map(pathlib.Path, zoneinfo.TZPATH):
+        if (path / key).exists():
+            return path
+    else:
+        raise OSError("Cannot find time zone data.")
+
+
+def get_zoneinfo_metadata() -> typing.Dict[str, str]:
+    path = get_zoneinfo_path()
+
+    tzdata_zi = path / "tzdata.zi"
+    if not tzdata_zi.exists():
+        # tzdata.zi is necessary to get the version information
+        raise OSError("Time zone data does not include tzdata.zi.")
+
+    with open(tzdata_zi, "r") as f:
+        version_line = next(f)
+
+    _, version = version_line.strip().rsplit(" ", 1)
+
+    if (
+        not version[0:4].isdigit()
+        or len(version) < 5
+        or not version[4:].isalpha()
+    ):
+        raise ValueError(
+            "Version string should be YYYYx, "
+            + "where YYYY is the year and x is a letter; "
+            + f"found: {version}"
+        )
+
+    return {"version": version}
+
+
+def get_zoneinfo(key: str) -> bytes:
+    path = get_zoneinfo_path()
+
+    with open(path / key, "rb") as f:
+        return f.read()
+
+
+def encode_compressed(data: bytes) -> typing.List[str]:
+    compressed_zone = lzma.compress(data)
+    raw = base64.b85encode(compressed_zone)
+
+    raw_data_str = raw.decode("utf-8")
+
+    data_str = textwrap.wrap(raw_data_str, width=70)
+    return data_str
+
+
+def load_compressed_keys() -> typing.Dict[str, typing.List[str]]:
+    output = {key: encode_compressed(get_zoneinfo(key)) for key in KEYS}
+
+    return output
+
+
+def update_test_data(fname: str = "zoneinfo_data.json") -> None:
+    TEST_DATA_LOC.mkdir(exist_ok=True, parents=True)
+
+    # Annotation required: https://github.com/python/mypy/issues/8772
+    json_kwargs: typing.Dict[str, typing.Any] = dict(
+        indent=2, sort_keys=True,
+    )
+
+    compressed_keys = load_compressed_keys()
+    metadata = get_zoneinfo_metadata()
+    output = {
+        "metadata": metadata,
+        "data": compressed_keys,
+    }
+
+    with open(TEST_DATA_LOC / fname, "w") as f:
+        json.dump(output, f, **json_kwargs)
+
+
+if __name__ == "__main__":
+    update_test_data()
diff --git a/Lib/test/test_zoneinfo/data/zoneinfo_data.json b/Lib/test/test_zoneinfo/data/zoneinfo_data.json
new file mode 100644
index 0000000..ec4414a
--- /dev/null
+++ b/Lib/test/test_zoneinfo/data/zoneinfo_data.json
@@ -0,0 +1,190 @@
+{
+  "data": {
+    "Africa/Abidjan": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j-~f{VGF<>F7KxBg5R*{Ksocg8-YYVul=v7vZzaHN",
+      "uC=da5UI2rH18c!OnjV{y4u(+A!!VBKmY&$ORw>7UO^(500B;v0RR91bXh%WvBYQl0ssI2",
+      "00dcD"
+    ],
+    "Africa/Casablanca": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0b&Kz+C_;7KxBg5R*{N&yjMUR~;C-fDaSOU;q-~",
+      "FqW+4{YBjbcw}`a!dW>b)R2-0a+uwf`P3{_Y@HuCz}S$J$ZJ>R_V<~|Fk>sgX4=%0vUrh-",
+      "lt@YP^Wrus;j?`Th#xRPzf<<~Hp4DH^gZX>d{+WOp~HNu8!{uWu}&XphAd{j1;rB4|9?R!",
+      "pqruAFUMt8#*WcrVS{;kLlY(cJRV$w?d2car%R<ALOSO?^`4;ZZtI)%f^^G^>s>q9BgTU4",
+      "Ht-tQKZ7Z`9QqOb?R#b%z?rk>!CkH7jy3wja4NG2q)H}fNRKg8v{);Em;K3Cncf4C6&Oaj",
+      "V+DbX%o4+)CV3+e!Lm6dutu(0BQpH1T?W(~cQtKV*^_Pdx!LirjpTs?Bmt@vktjLq4;)O!",
+      "rrly=c*rwTwMJFd0I57`hgkc?=nyI4RZf9W$6DCWugmf&)wk^tWH17owj=#PGH7Xv-?9$j",
+      "njwDlkOE+BFNR9YXEmBpO;rqEw=e2IR-8^(W;8ma?M3JVd($2T>IW+0tk|Gm8>ftukRQ9J",
+      "8k3brzqMnVyjsLI-CKneFa)Lxvp_a<CkQEd#(pMA^rr}rBNElGA=*!M)puBdoErR9{kWL@",
+      "w=svMc6eZ^-(vQZrV<u^PY#nOIUDJ8%A&;BUVlY9=;@i2j2J1_`P>q40f}0J3VVoWL5rox",
+      "`Kptivcp}o5xA^@>qNI%?zo=Yj4AMV?kbAA)j(1%)+Pp)bSn+7Yk`M{oE}L-Z!G6<Dgq&*",
+      "(C-mFJfbEGDH5M^vBr65rcnsx*~|Em_GeU#B)(+T!|MG-nxj0@IPbp-nHejH3~>OMr5G+h",
+      "p)$3Lg{ono{4cN>Vr&>L4kXH;_VnBL5U!LgzqE%P7QQ*<E!guRW2SE@ayq@)G2nXqA2tGo",
+      "QIgc6>tue}O`3(TZ0`aKn&~8trOQ-rBXCp)f@P6RMO4l0+;b|5-pk9_ryNh}Zc*v%mvz_#",
+      "yd<xXt%~gT90dn4e{Ac<baL-)Y{L7&5G($I$>6fjB0g9{MmMnu8bG%#C~ugXK^S^k@?ab#",
+      "O|aE>dDTt4s4n69(~@t~!wniV%g<uWQat_i6>7khFx~I*4>Y|V$4j5%KPF*-FyKIi@!Ho&",
+      "x8QQsksYt8)D+W)Ni!=G`ogSu^vLL-l#7A7=iIAKL2SuZk9F}NfNk86VI)9WZE?%2wC-ya",
+      "F~z#Qsq)LH0|_D8^5fU8X%GeQ4TB>R-dlziA&tZe&1ada208!$nk`7bOFO2S00G<w{Sp8G",
+      "{cR_IvBYQl0ssI200dcD"
+    ],
+    "America/Los_Angeles": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0qH3OkDsf7KxBg5R*;z{h&-RlhRYu$%jt%!jv+I",
+      "JxhE=%W1?wYb!37Rb?(rgwFIAQI{L#8r*zy!$TMtER_1(vn(Zix^{AVB1(jwr$iL6h0Z!2",
+      "8Gb~UW@0~e512{Z%8}Qzdnjl~wJ1{c2>`Z@1A~t&lyL{p{eM{5)QGf7Mo5FW9==mlyXJt2",
+      "UwpntR7H0eSq!(aYq#aqUz&RM*tvuMI)AsM?K3-dV3-TT{t)!Iy#JTo=tXkzAM9~j2YbiO",
+      "ls3(H8Dc>Y|D1aqL51vjLbpYG;GvGTQB4bXuJ%mA;(B4eUpu$$@zv2vVcq-Y)VKbzp^tei",
+      "uzy}R{Luv<C;_cPe*n$Z<jeC9ogWF9=1mvvUYXS>DjpuVb`79O+CBmg{Wx!bvx$eu4zRE&",
+      "PehMb=&G<9$>iZ|bFE)0=4I?KLFGBC0I(0_svgw0%FiMsT%koo*!nEYc6GY@QnU}&4Isg;",
+      "l=|khi(!VaiSE2=Ny`&&tpi~~;{$u<GHlsr3Ze!iYsU205RFKsLnrXwOL?Mq08xffgS{6h",
+      "E|figx+&N%wbO}re@|}$l;g_6J-Wl%j|qev8A<T?NJ)`;2neGi_DHE4ET*W!c*ggPAgU+L",
+      "E9=bH7;maCUikw^R)UM;TdVvNkQ;FGgN=yQER`SZ1nOgPXr0LCebLety&}kVdmVmB=8eSg",
+      "td!1%p=a2wooIL!Da}OPXvKBfRo?YxqS>N}%f|7mBhAy;<Er2&_LfND#qXN~Mkgf!@4VFA",
+      "Hr%$c)wrKA2cJYWK2>s3YT^sy!$eG~?`9mNJC9@4Bac_p^BZh)Yd_rWW5qh-?tKY(>5VHO",
+      "L*iT8P@wCavLj^yYbnDR+4ukhS+xPrpl)iqB?u)bj9a2aW==g6G3lCJd>(+Blf<d4CF%7u",
+      "tlBUDki}J-!_Dy}5S(MrxSXy~$Z+hgH3P^<<w7D72L7I-R%H3(xm&q_DXxkp$owLTS6Wzk",
+      "hc3nn;laROa3)6hl&gH#)2Lif8fZe$@CdeJ-Zn&*>r)~^40F4f>cRZ^UF;RibfZ>0m73hR",
+      "C{$vTfC(STN`g7(B<=Z2556{}0`?p&|Akkst!4Xy4OT;A@c$XTUI3FRRjy*KA7uC56FD)z",
+      "^X{WV*sr(w!c$W357o!&eLO2wTDNOyw@gf(&R<<LF_3URI4=Ei`-%dM3T66j#9!aG7&b_@",
+      "g1-9vo?DzXZ5vGaf~w__p_@_X?OdvQ_r5bvy2hpESTf+{p?jL+!~!{g8-<-5$@d8EZV&-5",
+      "@a|;^1gB*R-~{EHFA-td_G2bt;~Y}>t;=-Tu1TV{>%8ZVATC9tjD8|(&`$9YHvZ9bVe#>w",
+      "|8c;Tg|xE&)`*}LwM*E}q}q8^Qja%p`_U)*5DdLI9O@!e=3jFjOCrCq28b_bb;s>%D#iJB",
+      "CWJi{JH!Js;6nfayos$kq^OEX00HO-lokL0!mqm{vBYQl0ssI200dcD"
+    ],
+    "America/Santiago": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0fRZ<6QtM7KxBg84(fsEAUJ$J{f-TXlPEUec5Ee",
+      "n+hsD4lC(QYax=JdSpoyje8%VM`GW}<Unz6IOY4=y66tfqG2X4E8xIJQ(~?r{`L~T!sI~o",
+      "VBl7Ao!R1A76Y8P6Y<TfwVHf@sl@S-D4OuAy5mq0MKJZ>{bJ8@y$A8O&*$pw{(f~Os#}2w",
+      "eX6^Rgi$IT%n^V^85L>$_c7{cB^#ogV=rHBJGiz-RQNFGK?gdPi|q)j`&8)}KJ{qo6dixa",
+      "9@yYyVg+%lo0nO+Tw0-w2hJ%mafy<Co(;L+24CYl&?rN0mrh90nxG?%1&Ed@za`Yd>WL)|",
+      ")<o0dZL-*?RFtH7dAv%G*O%l?qvq!0F5C?K#_ZoT{P$77IMoj3&8w3f&n36zquu~s`s0T)",
+      ";>?W6Bi%FWuGPA1Dru$XR4SZANsAthU2EoKH<MU4wYvUTlZGcLIDR+hSik>F6oEtKq`rwP",
+      "(VNegnI_NI%;ma$)wj{k!@KFB30Yo)IOr<QX7IQ@TBq9d;e3QAtYU?$PS-WoaiqwFrg4PR",
+      "A->l>)$)D|+(5h&+%2vuwGuy^@S8FT^s21V5};>VA9Iu;?8bHz#r<;JtfZDI1(FT@edh0#",
+      "MYW$A1qkMGIwTZqqdYNE3gl#zp&NbL9Mp=voqN|;?gqR&4$)1`znddtEyuKS*^nMMD=0^>",
+      "7^z6-C4P67UWOXuMBubP>j6i~03aR@jD^-Y`JSYu#Yp0P8dLLJ0QOPE8=BoiuRX59YW7xg",
+      "WiexjHX%&0?`ZQCdxCdL^qd1v@kOjQKaWo2Y1++~LcA%FTq?5o<?(jL(_Uo}I}k_Fwflcr",
+      "aovwSR_(ILA6li<iBLPQ0#rEet;W-*54kj#sZEGK*tAF{)HNkn#&Hc5`#eaRF;N#$<xQU?",
+      "E%zm?2+b5Ho>%}fX1-RIvlB)1#iTNomGnUL=nM!>Ix|AGtON7!F1O?53kqlC2o-`ZGw*+s",
+      "NM$^9znsIJMwlgscE`|O3|;BRgsQMYm~`uv+nvuv`nigRa}X=BX=A5Sw$)WEklF7&c>_~$",
+      "zJ(m--bqXgiN^w-U=BJH9C0Qro(x90zo@rK;&TJ$nI@&k$ORgOb2<MjjIhYfr;pFUGdMd!",
+      "0d&bOvyq3AZPCez8E(XSg2hBu2A&^k?w|1u8v3JE>s%gWbc}ok_27)Eoku~Fq|B-Ps+4J_",
+      "HPJMLJ2^_)cOU$p&3kNAlrV!)%~6r$BJ>OOi~=-<6byle{?zd4J{NG}o8tw|+#ZNLcpNwk",
+      "TuPE~sbJB8_RZb2DopStO+Wwux~F#S59zm%00I98;S&G=b(j+6vBYQl0ssI200dcD"
+    ],
+    "Asia/Tokyo": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j-~luMgIxeB7KxBg5R*;y?l4Rl4neXH3cv!OtfK@h",
+      "KZzauI)S!FSDREPhhBS6Fb$&Vv#7%;?Te|>pF^0HBr&z_Tk<%vMW_QqjevRZOp8XVFgP<8",
+      "TkT#`9H&0Ua;gT1#rZLV0HqbAKK;_z@nO;6t0L<i8TZ+%T<;ci2bYSG1u!mUSO5S3XcbN8",
+      "dIxbZ00Ex?wE_SDJu@vkvBYQl0ssI200dcD"
+    ],
+    "Australia/Sydney": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0T)o7+nA=7KxBg5R*_t6jS5T`_Ull(nK1_YY;k%",
+      ";_YdTuU3*!K)eKg@^kzjAtbo@Jd|KGai=Q%%sX5FI?*?LG!|m9cKH5~IEwI=PAr_Yc}w35",
+      ">}hOdk<>TdUa07R(LPI6@!GU$ty4=mwqHG-XVe*n(Yvgdlr+FqIU18!osi)48t~eWX8)&L",
+      "G)Ud^0zz@*AF+2r7E}N<P$kOfo*88g)_bOO?7N1Jr|HJyg+HXc7f4}?%Dur3w|~JU?<x4K",
+      "%RRC~q_D87;UyN{nLRu!fEqKeRR*U$vs>f9Y72K~o-T%}D&z%}#7g<qim`EbfhF7ntyAiP",
+      "%LFNc&!$@Kv)Olyf&Y9%(#SkM+%yI}S%b+@ZM2dH7DpmndGMIda<(`#E9q|?H(HzClx+l;",
+      "M?IEz1eF}r?}ay!V9?9rKD^-ayjE@wUMD$2kC!iwH`n=eVrJPmJyNKaW`LdJ68&u;2nF1K",
+      "kZjKCY_A<>2br?oH6ZiYH^%>J3D)TPKV(JY*bwjuw5=DsPB@~CrR<E_U_fJTF9ufU%!cXK",
+      "_4uM#!%%Q1e1G~{E}~vGVE0{Kxecm^NjtJM`c8EFHFTiUIVl@YUD8F+s!u8jz~6hte@oa|",
+      "qayb*^Lwd(etNmBro;aXQjkY8g(*`_JQ0%{V3QP2l!GGQ7D+v&k_PK0F(?f{GziU5>OZeN",
+      "x>A*H&CHrWt0`EP`m!F%waepl#|w#&`XgVc?~2M3uw$fGX~tf_Il!q#Aa<*8xlzQ2+7r6Z",
+      "^;Laa9F(WB_O&Dy2r>~@kSi16W{=6+i5GV=Uq~KX*~&HUN4oz7*O(gXIr}sDVcD`Ikgw#|",
+      "50ssal8s)Qy;?YGCf;*UKKKN!T4!Kqy_G;7<gSrPK{)5#a>PfQapugqvVBKy12v3TVH^L2",
+      "0?#5*VP~MOYfe$h`*L!7@tiW|_^X1N%<}`7YahiUYtMu5XwmOf3?dr+@zXHwW`z}ZDqZlT",
+      "<2Cs(<1%M!i6o&VK89BY0J7HPIo;O62s=|IbV^@y$N&#<x=a876<(U>=>i^F00FcHoDl#3",
+      "Mdv&xvBYQl0ssI200dcD"
+    ],
+    "Europe/Dublin": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0>b$_+0=h7KxBg5R*;&J77#T_U2R5sleVWFDmK~",
+      "Kzj5oh@`<njquRZ&tJIS(cXp1>QKHvW^6V{jU-w>qg1tSt0c^vh;?qAqA0%t?;#S~6U8Qi",
+      "v&f1s9IH#g$m1k1a#3+lylw4mwT4QnEUUQdwg+xnEcBlgu31bAVabn41OMZVLGz6NDwG%X",
+      "uQar!b>GI{qSahE`AG}$kRWbuI~JCt;38)Xwbb~Qggs55t+MAHIxgDxzTJ;2xXx99+qCy4",
+      "45kC#v_l8fx|G&jlVvaciR<-wwf22l%4(t@S6tnX39#_K(4S0fu$FUs$isu<UOJYm|4)2i",
+      "aEpsajn@}B#rnY=Cg_TXsm-A)*adXV&$klNTn3n{XXlaquu}6m{k%oRmY0Yyhlj*<W{D5m",
+      "22}OiqnwHT!tnK`wPqx?wiF%v{ipTrOkcJ5P@7OC4(-l`*&SB$Wd4Vf8gn?>d<i@%mP*e*",
+      "ttDj`9M1;9$YV@dhT)DVcwdq(Ly~KDm_&KL?{_mFwwYtJqRZBk)i1FVQy!40w_KyAg?hIA",
+      "=_{(3#S0eWsF8f%_4Zza$4@$lSmov+Huyn$vP^zJ|8-<C3#q#0kEs9cNg^xUR(m?wEWt-D",
+      "GctAh2nIo~fz%$m$I41=b_WuJ6M9g#A9_Epwqw{d0B|vzmg#_y<=_>9IKzCXB<o`d)**5V",
+      "6g!<<Jw1n5TrN-$)aYz4cLsTmpsUf-6L7ix+kk>78NkARYq@9Dc0TGkhz);NtM_SSzEffN",
+      "l{2^*CKGdp52h!52A)6q9fUSltXF{T*Ehc9Q7u8!W7pE(Fv$D$cKUAt6wY=DA1mGgxC*VX",
+      "q_If3G#FY6-Voj`fIKk`0}Cc72_SD{v>468LV{pyBI33^p0E?}RwDA6Pkq--C~0jF&Z@Pv",
+      "!dx_1SN_)jwz@P$(oK%P!Tk9?fRjK88yxhxlcFtTjjZ$DYssSsa#ufYrR+}}nKS+r384o~",
+      "!Uw$nwTbF~qgRsgr0N#d@KIinx%<pnyQ!|>hQB(SJyjJtDtIy(%mDm}ZBGN}dV6K~om|=U",
+      "VGkbciQ=^$_14|gT21!YQ)@y*Rd0i_lS6gtPBE9+ah%WIJPwzUTjIr+J1XckkmA!6WE16%",
+      "CVAl{Dn&-)=G$Bjh?bh0$Xt1UDcgXJjXzzojuw0>paV~?Sa`VN3FysqF<S*L0RYSAY3jt(",
+      "8wCD04RfyEcP(RNT%x7k(7m-9H3{zuQ`RZy-Rz%*&dldDVFF+TwSAPO1wRX^5W5@xJ9{vW",
+      "w?rc^NH({%Ie<rxKqSVy!Le-_`U&@W_(D+>xTzfKVAu*ucq#+m=|KSSMvp_#@-lwd+q*ue",
+      "FQ^5<D+|jLr?k{O39i8AX2Qb^zi9A<7XD1y!-W2|0Hk8JVkN;gl><|<0R-u4qYMbRqzSn&",
+      "Q7jSuvc%b+EZc%>nI(+&0Tl1Y>a6v4`uNFD-7$QrhHgS7Wnv~rDgfH;rQw3+m`LJxoM4v#",
+      "gK@?|B{RHJ*VxZgk#!p<_&-sjxOda0YaiJ1UnG41VPv(Et%ElzKRMcO$AfgU+Xnwg5p2_+",
+      "NrnZ1WfEj^fmHd^sx@%JWKkh#zaK0ox%rdP)zUmGZZnqmZ_9L=%6R8ibJH0bOT$AGhDo6{",
+      "fJ?;_U;D|^>5by2ul@i4Zf()InfFN}00EQ=q#FPL>RM>svBYQl0ssI200dcD"
+    ],
+    "Europe/Lisbon": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0=rf*IfWA7KxBg5R*;*X|PN+G3LqthM?xgkNUN_",
+      ")gCt1Sc%YT6^TTomk4yVHXeyvQj8}l<;q&s7K}#Vnc8lII1?)AHh$*>OKUU4S;*h>v*ep0",
+      "xTi1cK2{aY*|2D*-~K<;-{_W+r@NvZ7-|NZv($ek_C%VfP0xjWeZP#CPXD`IKkakjh(kUd",
+      "&H)m;^Q(jGjIyiyrcUMtOP)u3A>sw6ux;Bmp3x$4QvQKMx5TrCx_!$srWQuXNs&`9=^IY1",
+      "yc&C31!sQh7P=Mk*#6x8Z@5^%ehR8UW<EvzdWer9z;R6PrdUaWab3G>$OWw0KMw}P1ycI^",
+      "4eh12oBUOV?S>n*d!+EM@>x#9PZD12iD=zaC;7`8dTfkU_6d}OZvSFSbGgXeKw}XyX@D=(",
+      ")D0!^DBGr8pXWBT$S-yhLP>Z3ys^VW<kSQr?{jhl<+{Fki;mTI=&Stgy$rttN?ulQM$lDr",
+      "G7))C7Dx=J6V-e^(Qk|r;f~TvIw1KqRIC{8f^jPy#blstV{-&2a}ZJe!Zr2c_R4NT)L@bs",
+      "+gRRm6Wn)VWVNHeK*TEV=f#2KZqu%y?mTx#EfRiK0)TG7$$~=LGxx@0D|lS2up|oCON{YQ",
+      "oN5-H$!_n-Kx2*=RO!epEX>3}RQ6{NGGVJG6vf*MH93vvNW6yLjie1;{4tVhg-KnSf|G`!",
+      "Z;j$7gJ1ows~RD=@n7I6aFd8rOR_7Y?E-$clI%1o5gA@O!KPa^(8^iFFeFykI-+z>E$mvp",
+      "E_h`vbHPjqkLs`Dn-0FV`R@z|h!S(Lb;M&|Exr<u8#s-T(>!biY`%bfp$6`hK;GDhdP|^Q",
+      "*Ty*}1d41K>H2B{jrjE9aFK>yAQJBX9CD%-384S;0fw`PlprHGS`^b$oS-`I4VH7ji8ou-",
+      "g|060jfb1XcxiInT0oO<S+<vh^)XY;lr@|IeXj}%k;}|kSlDGaYidk^zB|gEYaet~F%QYd",
+      "f7pbnQKLZ0o7=kso86doS;J@aQ>oeR7#%e5Ug5#KW)nV<Rc;|LjUDdhk8*dYJQwYN?hzH%",
+      "0<XB$!(rpf2nxaL22M`L4pKx>SRvLHNe$SQHM@2)`S9L7>RL@<XAlxVQfb2=%lcu!h+Um0",
+      "Q+Z=itevTFy}-Jl<g5crK55BF`VsoPH~qP3QrG%YtrD#s{=gA7p)QI<i=EwY(cel8`B=#u",
+      "Yq<K;4T(QBF_GvrYueSk*}gfrCSg22+YH-1N<WYkp|DA-P-&va<Xu<}^yafJKlzezB-lS{",
+      "a++P_^gYmgrc9FO-K3s~`jAcqVV!k?NV2IFV^86`cr>Qx%fmm7?3u7P5TywFQ}C@S(pq}|",
+      "eLPT{C^{<0Q?uU&kSVd%!~8q3;Z0s3OqzF`$HRkePL5Ywgiwn{R(<RY8ut&RJ;$?J*w*n)",
+      ">zi+jmOBFrVpW;)@UsU#%$8BcV#h@}m$#!Fglo&bwb78aYqOG_W7h{eb(+39&-mk4EIXq_",
+      "_`30=8sfA3=!3TO_TyS5X22~?6nKngZ|bq=grdq=9X)3xAkA42L!~rmS)n3w-~;lgz%Fhn",
+      "(?rXdp2ho~9?wmVs2JwVt~?@FVD%`tN69{(i3oQa;O0<Hp#T5?$WIy3h`IlL00Hv}jT-;}",
+      "Z2tpNvBYQl0ssI200dcD"
+    ],
+    "Europe/London": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j;0`|pJ6!-O7KxBg5R*;$9DqzW!kQs3DZt(=0_!m1",
+      "4wvE`6N%Vj#u6PS_3S?~(2)&xn8}2}3Wr#kG8n2!x8>$E$lF&~Y#_H6bu6(BiwblJ>;-Fs",
+      "gA$Y$*?=X)n1pFkKn}F~`>=4)+LLQk?L*P!bhAm0;`N~z3QbUIyVrm%kOZ(n1JJsm0pyb8",
+      "!GV{d*C!9KXv;4v<seWRpo=ZZxGf)-5Qsn$3dw`uhF)+6#mgUoNF-Y2jN73pVhdTs*p0`Z",
+      "AbnT1puEtudB{Nul>D4Q>-k#+x(!V5L@w5M>v2V5<gcLskF+p`aGTSn{sY8^@MUc;2o{&V",
+      "R!$180N}BtfYKS)i9w=!<~&l?1Cv^PWs!&a9{s(35^yqGU$72DKX|IkRtDblB>a`B>t(|B",
+      "|Fqr4^-{S*%Ep~ojUtx_CRbSQ(uFwu2=KH)Q@EBs@ZqRXn4mU;B!68;;IQs3Ub=n&UU%*m",
+      "k&zwD36&JSwsN(%k&x?H+tN^6)23c`I0=5^N_R0~1>tsFZ`^`3z~rXSXT&qcwa#n!%+Z#P",
+      "PG}(D^_CCILXnF|GKwabBh*xFS?4rwGo2vtJUwzrbv_$5PO+`?$l{H-jGB@X%S!OAhw;D4",
+      "XFycN3!XqQ&EorJOD3>~^U%Luw!jF<;6_q-f-S|6<EHry?%{@fuyH`_+D%uTA@g0$5e!Yi",
+      "P1vQuevyS;jE(-R>{cQDfZ2(4Xf1MMLr1=SA=MwVf2%Pp%VP;jn)|5Tf!-DbUGn%I-r<KG",
+      "4jJ(Y#L-fJUpUb$yNfvhX*iqWZoG7T*WUfE6iQD9_^EWqExH`rc&jJ<o^E8-mM10WrZ_Vv",
+      "xx9nj<vMlEt*KfP*pyth!c_AKnrKtQTACX08#{pioAFnDq!53+h*hO^f*yrWjg0u2pUcgv",
+      "UlpEZ9G_dlhlW1J^h@gTt7{KPL2mRal;1juJ3Q8-!GXO#IPzT4ciJ-nB+nkphssM}Q7IAT",
+      "pM}AT%y(J!78F?>kYaH7?$$O!t)wwClAisr3eUoeB^~T=U*_P~Y2*KdnO87>B!19sV=xZ5",
+      "yApq26RxgqA|*tmsvtL#OhcF(C<0EGWHP)BF<g*iSWicU6k1<Ps?BQ$IWg-#s2uF-qXgJ_",
+      "!H_mZIMx*L%&a*_6;_trMCULk0ZYM<hfJlYBddHwRyYUDu3!C_lJZWTQ?c-R&@9054pj0k",
+      "kQ{Xi{A$&)&b#^G*}8w^qE5i<@aDxaJQs2E$W)AIqUXO{gQ;U8|FA%BD~sORzq44)AntUu",
+      "QHBO{{Pi<EpK!$x4(~7w)la!dN=M@L_j};6|5G&QfuO~2?Q7996z)78fqW<D#8tKNV(*qc",
+      "mfA>l?h)_*7!{LoJiv%RsOs!q->n+DcV%9~B@Rb<ISu%16c5H-7zQIq+SuS+s<lQOWK5+C",
+      "d*>C_1G_1g6`Yd~8|%-=2l~oGN!~TVv2Bnk>7wW8L@^?vX$f3AiT)(4nrCuTm9%(XC6Nai",
+      "E(;}7&=YZagjAN$O-cN;1u{dTkElmB0GT$|Wa)QMmKrx<|LCJ9qlUoFsUbD^H^6_8(w<0{",
+      "ftj&O1~p_%lh5z;zNV&sP<T$*OgK)_0B#JDtXOkhC;Bo7h)#RUy;vBiVLN-T$*7t*t9@ey",
+      "3Woa&24QZ_z38BQ@A(A<(9n@%R?}B`7%w2wowt~UU;bAlqCzr(H$M5t==jGIqMqCsE=Jwa",
+      "$3P+3^&|~i28@=d_u6Cgthe(Lq(wxKpdSDL|7X6Un<nrt00Gwuz#ISo`BbmvvBYQl0ssI2",
+      "00dcD"
+    ],
+    "Pacific/Kiritimati": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j-~jCaVO;<!7KxBg5R*{K!`A|q%C5j6({{dSEy5>+",
+      "NF2>iK{8KMUf+)<-)VxXbLxD(alL}N$AT-ogNbJSMMYeX+Z{jS)b8TK^PB=FxyBxzfmFto",
+      "eo0R`a(%NO?#aEH9|?Cv00000NIsFh6BW2800DjO0RR918Pu^`vBYQl0ssI200dcD"
+    ],
+    "UTC": [
+      "{Wp48S^xk9=GL@E0stWa761SMbT8$j-~e#|9bEt_7KxBg5R*|3h1|xhHLji!C57qW6L*|H",
+      "pEErm00000ygu;I+>V)?00B92fhY-(AGY&-0RR9100dcD"
+    ]
+  },
+  "metadata": {
+    "version": "2020a"
+  }
+}
\ No newline at end of file
diff --git a/Lib/test/test_zoneinfo/test_zoneinfo.py b/Lib/test/test_zoneinfo/test_zoneinfo.py
new file mode 100644
index 0000000..d4704b7
--- /dev/null
+++ b/Lib/test/test_zoneinfo/test_zoneinfo.py
@@ -0,0 +1,2100 @@
+from __future__ import annotations
+
+import base64
+import contextlib
+import dataclasses
+import importlib.metadata
+import io
+import json
+import os
+import pathlib
+import pickle
+import re
+import shutil
+import struct
+import tempfile
+import unittest
+from datetime import date, datetime, time, timedelta, timezone
+from functools import cached_property
+
+from . import _support as test_support
+from ._support import OS_ENV_LOCK, TZPATH_TEST_LOCK, ZoneInfoTestBase
+from test.support import import_module
+
+lzma = import_module('lzma')
+py_zoneinfo, c_zoneinfo = test_support.get_modules()
+
+try:
+    importlib.metadata.metadata("tzdata")
+    HAS_TZDATA_PKG = True
+except importlib.metadata.PackageNotFoundError:
+    HAS_TZDATA_PKG = False
+
+ZONEINFO_DATA = None
+ZONEINFO_DATA_V1 = None
+TEMP_DIR = None
+DATA_DIR = pathlib.Path(__file__).parent / "data"
+ZONEINFO_JSON = DATA_DIR / "zoneinfo_data.json"
+
+# Useful constants
+ZERO = timedelta(0)
+ONE_H = timedelta(hours=1)
+
+
+def setUpModule():
+    global TEMP_DIR
+    global ZONEINFO_DATA
+    global ZONEINFO_DATA_V1
+
+    TEMP_DIR = pathlib.Path(tempfile.mkdtemp(prefix="zoneinfo"))
+    ZONEINFO_DATA = ZoneInfoData(ZONEINFO_JSON, TEMP_DIR / "v2")
+    ZONEINFO_DATA_V1 = ZoneInfoData(ZONEINFO_JSON, TEMP_DIR / "v1", v1=True)
+
+
+def tearDownModule():
+    shutil.rmtree(TEMP_DIR)
+
+
+class TzPathUserMixin:
+    """
+    Adds a setUp() and tearDown() to make TZPATH manipulations thread-safe.
+
+    Any tests that require manipulation of the TZPATH global are necessarily
+    thread unsafe, so we will acquire a lock and reset the TZPATH variable
+    to the default state before each test and release the lock after the test
+    is through.
+    """
+
+    @property
+    def tzpath(self):  # pragma: nocover
+        return None
+
+    @property
+    def block_tzdata(self):
+        return True
+
+    def setUp(self):
+        with contextlib.ExitStack() as stack:
+            stack.enter_context(
+                self.tzpath_context(
+                    self.tzpath,
+                    block_tzdata=self.block_tzdata,
+                    lock=TZPATH_TEST_LOCK,
+                )
+            )
+            self.addCleanup(stack.pop_all().close)
+
+        super().setUp()
+
+
+class DatetimeSubclassMixin:
+    """
+    Replaces all ZoneTransition transition dates with a datetime subclass.
+    """
+
+    class DatetimeSubclass(datetime):
+        @classmethod
+        def from_datetime(cls, dt):
+            return cls(
+                dt.year,
+                dt.month,
+                dt.day,
+                dt.hour,
+                dt.minute,
+                dt.second,
+                dt.microsecond,
+                tzinfo=dt.tzinfo,
+                fold=dt.fold,
+            )
+
+    def load_transition_examples(self, key):
+        transition_examples = super().load_transition_examples(key)
+        for zt in transition_examples:
+            dt = zt.transition
+            new_dt = self.DatetimeSubclass.from_datetime(dt)
+            new_zt = dataclasses.replace(zt, transition=new_dt)
+            yield new_zt
+
+
+class ZoneInfoTest(TzPathUserMixin, ZoneInfoTestBase):
+    module = py_zoneinfo
+    class_name = "ZoneInfo"
+
+    def setUp(self):
+        super().setUp()
+
+        # This is necessary because various subclasses pull from different
+        # data sources (e.g. tzdata, V1 files, etc).
+        self.klass.clear_cache()
+
+    @property
+    def zoneinfo_data(self):
+        return ZONEINFO_DATA
+
+    @property
+    def tzpath(self):
+        return [self.zoneinfo_data.tzpath]
+
+    def zone_from_key(self, key):
+        return self.klass(key)
+
+    def zones(self):
+        return ZoneDumpData.transition_keys()
+
+    def fixed_offset_zones(self):
+        return ZoneDumpData.fixed_offset_zones()
+
+    def load_transition_examples(self, key):
+        return ZoneDumpData.load_transition_examples(key)
+
+    def test_str(self):
+        # Zones constructed with a key must have str(zone) == key
+        for key in self.zones():
+            with self.subTest(key):
+                zi = self.zone_from_key(key)
+
+                self.assertEqual(str(zi), key)
+
+        # Zones with no key constructed should have str(zone) == repr(zone)
+        file_key = self.zoneinfo_data.keys[0]
+        file_path = self.zoneinfo_data.path_from_key(file_key)
+
+        with open(file_path, "rb") as f:
+            with self.subTest(test_name="Repr test", path=file_path):
+                zi_ff = self.klass.from_file(f)
+                self.assertEqual(str(zi_ff), repr(zi_ff))
+
+    def test_repr(self):
+        # The repr is not guaranteed, but I think we can insist that it at
+        # least contain the name of the class.
+        key = next(iter(self.zones()))
+
+        zi = self.klass(key)
+        class_name = self.class_name
+        with self.subTest(name="from key"):
+            self.assertRegex(repr(zi), class_name)
+
+        file_key = self.zoneinfo_data.keys[0]
+        file_path = self.zoneinfo_data.path_from_key(file_key)
+        with open(file_path, "rb") as f:
+            zi_ff = self.klass.from_file(f, key=file_key)
+
+        with self.subTest(name="from file with key"):
+            self.assertRegex(repr(zi_ff), class_name)
+
+        with open(file_path, "rb") as f:
+            zi_ff_nk = self.klass.from_file(f)
+
+        with self.subTest(name="from file without key"):
+            self.assertRegex(repr(zi_ff_nk), class_name)
+
+    def test_key_attribute(self):
+        key = next(iter(self.zones()))
+
+        def from_file_nokey(key):
+            with open(self.zoneinfo_data.path_from_key(key), "rb") as f:
+                return self.klass.from_file(f)
+
+        constructors = (
+            ("Primary constructor", self.klass, key),
+            ("no_cache", self.klass.no_cache, key),
+            ("from_file", from_file_nokey, None),
+        )
+
+        for msg, constructor, expected in constructors:
+            zi = constructor(key)
+
+            # Ensure that the key attribute is set to the input to ``key``
+            with self.subTest(msg):
+                self.assertEqual(zi.key, expected)
+
+            # Ensure that the key attribute is read-only
+            with self.subTest(f"{msg}: readonly"):
+                with self.assertRaises(AttributeError):
+                    zi.key = "Some/Value"
+
+    def test_bad_keys(self):
+        bad_keys = [
+            "Eurasia/Badzone",  # Plausible but does not exist
+            "BZQ",
+            "America.Los_Angeles",
+            "🇨🇦",  # Non-ascii
+            "America/New\ud800York",  # Contains surrogate character
+        ]
+
+        for bad_key in bad_keys:
+            with self.assertRaises(self.module.ZoneInfoNotFoundError):
+                self.klass(bad_key)
+
+    def test_bad_keys_paths(self):
+        bad_keys = [
+            "/America/Los_Angeles",  # Absolute path
+            "America/Los_Angeles/",  # Trailing slash - not normalized
+            "../zoneinfo/America/Los_Angeles",  # Traverses above TZPATH
+            "America/../America/Los_Angeles",  # Not normalized
+            "America/./Los_Angeles",
+        ]
+
+        for bad_key in bad_keys:
+            with self.assertRaises(ValueError):
+                self.klass(bad_key)
+
+    def test_bad_zones(self):
+        bad_zones = [
+            b"",  # Empty file
+            b"AAAA3" + b" " * 15,  # Bad magic
+        ]
+
+        for bad_zone in bad_zones:
+            fobj = io.BytesIO(bad_zone)
+            with self.assertRaises(ValueError):
+                self.klass.from_file(fobj)
+
+    def test_fromutc_errors(self):
+        key = next(iter(self.zones()))
+        zone = self.zone_from_key(key)
+
+        bad_values = [
+            (datetime(2019, 1, 1, tzinfo=timezone.utc), ValueError),
+            (datetime(2019, 1, 1), ValueError),
+            (date(2019, 1, 1), TypeError),
+            (time(0), TypeError),
+            (0, TypeError),
+            ("2019-01-01", TypeError),
+        ]
+
+        for val, exc_type in bad_values:
+            with self.subTest(val=val):
+                with self.assertRaises(exc_type):
+                    zone.fromutc(val)
+
+    def test_utc(self):
+        zi = self.klass("UTC")
+        dt = datetime(2020, 1, 1, tzinfo=zi)
+
+        self.assertEqual(dt.utcoffset(), ZERO)
+        self.assertEqual(dt.dst(), ZERO)
+        self.assertEqual(dt.tzname(), "UTC")
+
+    def test_unambiguous(self):
+        test_cases = []
+        for key in self.zones():
+            for zone_transition in self.load_transition_examples(key):
+                test_cases.append(
+                    (
+                        key,
+                        zone_transition.transition - timedelta(days=2),
+                        zone_transition.offset_before,
+                    )
+                )
+
+                test_cases.append(
+                    (
+                        key,
+                        zone_transition.transition + timedelta(days=2),
+                        zone_transition.offset_after,
+                    )
+                )
+
+        for key, dt, offset in test_cases:
+            with self.subTest(key=key, dt=dt, offset=offset):
+                tzi = self.zone_from_key(key)
+                dt = dt.replace(tzinfo=tzi)
+
+                self.assertEqual(dt.tzname(), offset.tzname, dt)
+                self.assertEqual(dt.utcoffset(), offset.utcoffset, dt)
+                self.assertEqual(dt.dst(), offset.dst, dt)
+
+    def test_folds_and_gaps(self):
+        test_cases = []
+        for key in self.zones():
+            tests = {"folds": [], "gaps": []}
+            for zt in self.load_transition_examples(key):
+                if zt.fold:
+                    test_group = tests["folds"]
+                elif zt.gap:
+                    test_group = tests["gaps"]
+                else:
+                    # Assign a random variable here to disable the peephole
+                    # optimizer so that coverage can see this line.
+                    # See bpo-2506 for more information.
+                    no_peephole_opt = None
+                    continue
+
+                # Cases are of the form key, dt, fold, offset
+                dt = zt.anomaly_start - timedelta(seconds=1)
+                test_group.append((dt, 0, zt.offset_before))
+                test_group.append((dt, 1, zt.offset_before))
+
+                dt = zt.anomaly_start
+                test_group.append((dt, 0, zt.offset_before))
+                test_group.append((dt, 1, zt.offset_after))
+
+                dt = zt.anomaly_start + timedelta(seconds=1)
+                test_group.append((dt, 0, zt.offset_before))
+                test_group.append((dt, 1, zt.offset_after))
+
+                dt = zt.anomaly_end - timedelta(seconds=1)
+                test_group.append((dt, 0, zt.offset_before))
+                test_group.append((dt, 1, zt.offset_after))
+
+                dt = zt.anomaly_end
+                test_group.append((dt, 0, zt.offset_after))
+                test_group.append((dt, 1, zt.offset_after))
+
+                dt = zt.anomaly_end + timedelta(seconds=1)
+                test_group.append((dt, 0, zt.offset_after))
+                test_group.append((dt, 1, zt.offset_after))
+
+            for grp, test_group in tests.items():
+                test_cases.append(((key, grp), test_group))
+
+        for (key, grp), tests in test_cases:
+            with self.subTest(key=key, grp=grp):
+                tzi = self.zone_from_key(key)
+
+                for dt, fold, offset in tests:
+                    dt = dt.replace(fold=fold, tzinfo=tzi)
+
+                    self.assertEqual(dt.tzname(), offset.tzname, dt)
+                    self.assertEqual(dt.utcoffset(), offset.utcoffset, dt)
+                    self.assertEqual(dt.dst(), offset.dst, dt)
+
+    def test_folds_from_utc(self):
+        for key in self.zones():
+            zi = self.zone_from_key(key)
+            with self.subTest(key=key):
+                for zt in self.load_transition_examples(key):
+                    if not zt.fold:
+                        continue
+
+                    dt_utc = zt.transition_utc
+                    dt_before_utc = dt_utc - timedelta(seconds=1)
+                    dt_after_utc = dt_utc + timedelta(seconds=1)
+
+                    dt_before = dt_before_utc.astimezone(zi)
+                    self.assertEqual(dt_before.fold, 0, (dt_before, dt_utc))
+
+                    dt_after = dt_after_utc.astimezone(zi)
+                    self.assertEqual(dt_after.fold, 1, (dt_after, dt_utc))
+
+    def test_time_variable_offset(self):
+        # self.zones() only ever returns variable-offset zones
+        for key in self.zones():
+            zi = self.zone_from_key(key)
+            t = time(11, 15, 1, 34471, tzinfo=zi)
+
+            with self.subTest(key=key):
+                self.assertIs(t.tzname(), None)
+                self.assertIs(t.utcoffset(), None)
+                self.assertIs(t.dst(), None)
+
+    def test_time_fixed_offset(self):
+        for key, offset in self.fixed_offset_zones():
+            zi = self.zone_from_key(key)
+
+            t = time(11, 15, 1, 34471, tzinfo=zi)
+
+            with self.subTest(key=key):
+                self.assertEqual(t.tzname(), offset.tzname)
+                self.assertEqual(t.utcoffset(), offset.utcoffset)
+                self.assertEqual(t.dst(), offset.dst)
+
+
+class CZoneInfoTest(ZoneInfoTest):
+    module = c_zoneinfo
+
+    def test_fold_mutate(self):
+        """Test that fold isn't mutated when no change is necessary.
+
+        The underlying C API is capable of mutating datetime objects, and
+        may rely on the fact that addition of a datetime object returns a
+        new datetime; this test ensures that the input datetime to fromutc
+        is not mutated.
+        """
+
+        def to_subclass(dt):
+            class SameAddSubclass(type(dt)):
+                def __add__(self, other):
+                    if other == timedelta(0):
+                        return self
+
+                    return super().__add__(other)  # pragma: nocover
+
+            return SameAddSubclass(
+                dt.year,
+                dt.month,
+                dt.day,
+                dt.hour,
+                dt.minute,
+                dt.second,
+                dt.microsecond,
+                fold=dt.fold,
+                tzinfo=dt.tzinfo,
+            )
+
+        subclass = [False, True]
+
+        key = "Europe/London"
+        zi = self.zone_from_key(key)
+        for zt in self.load_transition_examples(key):
+            if zt.fold and zt.offset_after.utcoffset == ZERO:
+                example = zt.transition_utc.replace(tzinfo=zi)
+                break
+
+        for subclass in [False, True]:
+            if subclass:
+                dt = to_subclass(example)
+            else:
+                dt = example
+
+            with self.subTest(subclass=subclass):
+                dt_fromutc = zi.fromutc(dt)
+
+                self.assertEqual(dt_fromutc.fold, 1)
+                self.assertEqual(dt.fold, 0)
+
+
+class ZoneInfoDatetimeSubclassTest(DatetimeSubclassMixin, ZoneInfoTest):
+    pass
+
+
+class CZoneInfoDatetimeSubclassTest(DatetimeSubclassMixin, CZoneInfoTest):
+    pass
+
+
+class ZoneInfoSubclassTest(ZoneInfoTest):
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+
+        class ZISubclass(cls.klass):
+            pass
+
+        cls.class_name = "ZISubclass"
+        cls.parent_klass = cls.klass
+        cls.klass = ZISubclass
+
+    def test_subclass_own_cache(self):
+        base_obj = self.parent_klass("Europe/London")
+        sub_obj = self.klass("Europe/London")
+
+        self.assertIsNot(base_obj, sub_obj)
+        self.assertIsInstance(base_obj, self.parent_klass)
+        self.assertIsInstance(sub_obj, self.klass)
+
+
+class CZoneInfoSubclassTest(ZoneInfoSubclassTest):
+    module = c_zoneinfo
+
+
+class ZoneInfoV1Test(ZoneInfoTest):
+    @property
+    def zoneinfo_data(self):
+        return ZONEINFO_DATA_V1
+
+    def load_transition_examples(self, key):
+        # We will discard zdump examples outside the range epoch +/- 2**31,
+        # because they are not well-supported in Version 1 files.
+        epoch = datetime(1970, 1, 1)
+        max_offset_32 = timedelta(seconds=2 ** 31)
+        min_dt = epoch - max_offset_32
+        max_dt = epoch + max_offset_32
+
+        for zt in ZoneDumpData.load_transition_examples(key):
+            if min_dt <= zt.transition <= max_dt:
+                yield zt
+
+
+class CZoneInfoV1Test(ZoneInfoV1Test):
+    module = c_zoneinfo
+
+
+@unittest.skipIf(
+    not HAS_TZDATA_PKG, "Skipping tzdata-specific tests: tzdata not installed"
+)
+class TZDataTests(ZoneInfoTest):
+    """
+    Runs all the ZoneInfoTest tests, but against the tzdata package
+
+    NOTE: The ZoneDumpData has frozen test data, but tzdata will update, so
+    some of the tests (particularly those related to the far future) may break
+    in the event that the time zone policies in the relevant time zones change.
+    """
+
+    @property
+    def tzpath(self):
+        return []
+
+    @property
+    def block_tzdata(self):
+        return False
+
+    def zone_from_key(self, key):
+        return self.klass(key=key)
+
+
+@unittest.skipIf(
+    not HAS_TZDATA_PKG, "Skipping tzdata-specific tests: tzdata not installed"
+)
+class CTZDataTests(TZDataTests):
+    module = c_zoneinfo
+
+
+class WeirdZoneTest(ZoneInfoTestBase):
+    module = py_zoneinfo
+
+    def test_one_transition(self):
+        LMT = ZoneOffset("LMT", -timedelta(hours=6, minutes=31, seconds=2))
+        STD = ZoneOffset("STD", -timedelta(hours=6))
+
+        transitions = [
+            ZoneTransition(datetime(1883, 6, 9, 14), LMT, STD),
+        ]
+
+        after = "STD6"
+
+        zf = self.construct_zone(transitions, after)
+        zi = self.klass.from_file(zf)
+
+        dt0 = datetime(1883, 6, 9, 1, tzinfo=zi)
+        dt1 = datetime(1883, 6, 10, 1, tzinfo=zi)
+
+        for dt, offset in [(dt0, LMT), (dt1, STD)]:
+            with self.subTest(name="local", dt=dt):
+                self.assertEqual(dt.tzname(), offset.tzname)
+                self.assertEqual(dt.utcoffset(), offset.utcoffset)
+                self.assertEqual(dt.dst(), offset.dst)
+
+        dts = [
+            (
+                datetime(1883, 6, 9, 1, tzinfo=zi),
+                datetime(1883, 6, 9, 7, 31, 2, tzinfo=timezone.utc),
+            ),
+            (
+                datetime(2010, 4, 1, 12, tzinfo=zi),
+                datetime(2010, 4, 1, 18, tzinfo=timezone.utc),
+            ),
+        ]
+
+        for dt_local, dt_utc in dts:
+            with self.subTest(name="fromutc", dt=dt_local):
+                dt_actual = dt_utc.astimezone(zi)
+                self.assertEqual(dt_actual, dt_local)
+
+                dt_utc_actual = dt_local.astimezone(timezone.utc)
+                self.assertEqual(dt_utc_actual, dt_utc)
+
+    def test_one_zone_dst(self):
+        DST = ZoneOffset("DST", ONE_H, ONE_H)
+        transitions = [
+            ZoneTransition(datetime(1970, 1, 1), DST, DST),
+        ]
+
+        after = "STD0DST-1,0/0,J365/25"
+
+        zf = self.construct_zone(transitions, after)
+        zi = self.klass.from_file(zf)
+
+        dts = [
+            datetime(1900, 3, 1),
+            datetime(1965, 9, 12),
+            datetime(1970, 1, 1),
+            datetime(2010, 11, 3),
+            datetime(2040, 1, 1),
+        ]
+
+        for dt in dts:
+            dt = dt.replace(tzinfo=zi)
+            with self.subTest(dt=dt):
+                self.assertEqual(dt.tzname(), DST.tzname)
+                self.assertEqual(dt.utcoffset(), DST.utcoffset)
+                self.assertEqual(dt.dst(), DST.dst)
+
+    def test_no_tz_str(self):
+        STD = ZoneOffset("STD", ONE_H, ZERO)
+        DST = ZoneOffset("DST", 2 * ONE_H, ONE_H)
+
+        transitions = []
+        for year in range(1996, 2000):
+            transitions.append(
+                ZoneTransition(datetime(year, 3, 1, 2), STD, DST)
+            )
+            transitions.append(
+                ZoneTransition(datetime(year, 11, 1, 2), DST, STD)
+            )
+
+        after = ""
+
+        zf = self.construct_zone(transitions, after)
+
+        # According to RFC 8536, local times after the last transition time
+        # with an empty TZ string are unspecified. We will go with "hold the
+        # last transition", but the most we should promise is "doesn't crash."
+        zi = self.klass.from_file(zf)
+
+        cases = [
+            (datetime(1995, 1, 1), STD),
+            (datetime(1996, 4, 1), DST),
+            (datetime(1996, 11, 2), STD),
+            (datetime(2001, 1, 1), STD),
+        ]
+
+        for dt, offset in cases:
+            dt = dt.replace(tzinfo=zi)
+            with self.subTest(dt=dt):
+                self.assertEqual(dt.tzname(), offset.tzname)
+                self.assertEqual(dt.utcoffset(), offset.utcoffset)
+                self.assertEqual(dt.dst(), offset.dst)
+
+        # Test that offsets return None when using a datetime.time
+        t = time(0, tzinfo=zi)
+        with self.subTest("Testing datetime.time"):
+            self.assertIs(t.tzname(), None)
+            self.assertIs(t.utcoffset(), None)
+            self.assertIs(t.dst(), None)
+
+    def test_tz_before_only(self):
+        # From RFC 8536 Section 3.2:
+        #
+        #   If there are no transitions, local time for all timestamps is
+        #   specified by the TZ string in the footer if present and nonempty;
+        #   otherwise, it is specified by time type 0.
+
+        offsets = [
+            ZoneOffset("STD", ZERO, ZERO),
+            ZoneOffset("DST", ONE_H, ONE_H),
+        ]
+
+        for offset in offsets:
+            # Phantom transition to set time type 0.
+            transitions = [
+                ZoneTransition(None, offset, offset),
+            ]
+
+            after = ""
+
+            zf = self.construct_zone(transitions, after)
+            zi = self.klass.from_file(zf)
+
+            dts = [
+                datetime(1900, 1, 1),
+                datetime(1970, 1, 1),
+                datetime(2000, 1, 1),
+            ]
+
+            for dt in dts:
+                dt = dt.replace(tzinfo=zi)
+                with self.subTest(offset=offset, dt=dt):
+                    self.assertEqual(dt.tzname(), offset.tzname)
+                    self.assertEqual(dt.utcoffset(), offset.utcoffset)
+                    self.assertEqual(dt.dst(), offset.dst)
+
+    def test_empty_zone(self):
+        zf = self.construct_zone([], "")
+
+        with self.assertRaises(ValueError):
+            self.klass.from_file(zf)
+
+    def test_zone_very_large_timestamp(self):
+        """Test when a transition is in the far past or future.
+
+        Particularly, this is a concern if something:
+
+            1. Attempts to call ``datetime.timestamp`` for a datetime outside
+               of ``[datetime.min, datetime.max]``.
+            2. Attempts to construct a timedelta outside of
+               ``[timedelta.min, timedelta.max]``.
+
+        This actually occurs "in the wild", as some time zones on Ubuntu (at
+        least as of 2020) have an initial transition added at ``-2**58``.
+        """
+
+        LMT = ZoneOffset("LMT", timedelta(seconds=-968))
+        GMT = ZoneOffset("GMT", ZERO)
+
+        transitions = [
+            (-(1 << 62), LMT, LMT),
+            ZoneTransition(datetime(1912, 1, 1), LMT, GMT),
+            ((1 << 62), GMT, GMT),
+        ]
+
+        after = "GMT0"
+
+        zf = self.construct_zone(transitions, after)
+        zi = self.klass.from_file(zf, key="Africa/Abidjan")
+
+        offset_cases = [
+            (datetime.min, LMT),
+            (datetime.max, GMT),
+            (datetime(1911, 12, 31), LMT),
+            (datetime(1912, 1, 2), GMT),
+        ]
+
+        for dt_naive, offset in offset_cases:
+            dt = dt_naive.replace(tzinfo=zi)
+            with self.subTest(name="offset", dt=dt, offset=offset):
+                self.assertEqual(dt.tzname(), offset.tzname)
+                self.assertEqual(dt.utcoffset(), offset.utcoffset)
+                self.assertEqual(dt.dst(), offset.dst)
+
+        utc_cases = [
+            (datetime.min, datetime.min + timedelta(seconds=968)),
+            (datetime(1898, 12, 31, 23, 43, 52), datetime(1899, 1, 1)),
+            (
+                datetime(1911, 12, 31, 23, 59, 59, 999999),
+                datetime(1912, 1, 1, 0, 16, 7, 999999),
+            ),
+            (datetime(1912, 1, 1, 0, 16, 8), datetime(1912, 1, 1, 0, 16, 8)),
+            (datetime(1970, 1, 1), datetime(1970, 1, 1)),
+            (datetime.max, datetime.max),
+        ]
+
+        for naive_dt, naive_dt_utc in utc_cases:
+            dt = naive_dt.replace(tzinfo=zi)
+            dt_utc = naive_dt_utc.replace(tzinfo=timezone.utc)
+
+            self.assertEqual(dt_utc.astimezone(zi), dt)
+            self.assertEqual(dt, dt_utc)
+
+    def test_fixed_offset_phantom_transition(self):
+        UTC = ZoneOffset("UTC", ZERO, ZERO)
+
+        transitions = [ZoneTransition(datetime(1970, 1, 1), UTC, UTC)]
+
+        after = "UTC0"
+        zf = self.construct_zone(transitions, after)
+        zi = self.klass.from_file(zf, key="UTC")
+
+        dt = datetime(2020, 1, 1, tzinfo=zi)
+        with self.subTest("datetime.datetime"):
+            self.assertEqual(dt.tzname(), UTC.tzname)
+            self.assertEqual(dt.utcoffset(), UTC.utcoffset)
+            self.assertEqual(dt.dst(), UTC.dst)
+
+        t = time(0, tzinfo=zi)
+        with self.subTest("datetime.time"):
+            self.assertEqual(t.tzname(), UTC.tzname)
+            self.assertEqual(t.utcoffset(), UTC.utcoffset)
+            self.assertEqual(t.dst(), UTC.dst)
+
+    def construct_zone(self, transitions, after=None, version=3):
+        # These are not used for anything, so we're not going to include
+        # them for now.
+        isutc = []
+        isstd = []
+        leap_seconds = []
+
+        offset_lists = [[], []]
+        trans_times_lists = [[], []]
+        trans_idx_lists = [[], []]
+
+        v1_range = (-(2 ** 31), 2 ** 31)
+        v2_range = (-(2 ** 63), 2 ** 63)
+        ranges = [v1_range, v2_range]
+
+        def zt_as_tuple(zt):
+            # zt may be a tuple (timestamp, offset_before, offset_after) or
+            # a ZoneTransition object — this is to allow the timestamp to be
+            # values that are outside the valid range for datetimes but still
+            # valid 64-bit timestamps.
+            if isinstance(zt, tuple):
+                return zt
+
+            if zt.transition:
+                trans_time = int(zt.transition_utc.timestamp())
+            else:
+                trans_time = None
+
+            return (trans_time, zt.offset_before, zt.offset_after)
+
+        transitions = sorted(map(zt_as_tuple, transitions), key=lambda x: x[0])
+
+        for zt in transitions:
+            trans_time, offset_before, offset_after = zt
+
+            for v, (dt_min, dt_max) in enumerate(ranges):
+                offsets = offset_lists[v]
+                trans_times = trans_times_lists[v]
+                trans_idx = trans_idx_lists[v]
+
+                if trans_time is not None and not (
+                    dt_min <= trans_time <= dt_max
+                ):
+                    continue
+
+                if offset_before not in offsets:
+                    offsets.append(offset_before)
+
+                if offset_after not in offsets:
+                    offsets.append(offset_after)
+
+                if trans_time is not None:
+                    trans_times.append(trans_time)
+                    trans_idx.append(offsets.index(offset_after))
+
+        isutcnt = len(isutc)
+        isstdcnt = len(isstd)
+        leapcnt = len(leap_seconds)
+
+        zonefile = io.BytesIO()
+
+        time_types = ("l", "q")
+        for v in range(min((version, 2))):
+            offsets = offset_lists[v]
+            trans_times = trans_times_lists[v]
+            trans_idx = trans_idx_lists[v]
+            time_type = time_types[v]
+
+            # Translate the offsets into something closer to the C values
+            abbrstr = bytearray()
+            ttinfos = []
+
+            for offset in offsets:
+                utcoff = int(offset.utcoffset.total_seconds())
+                isdst = bool(offset.dst)
+                abbrind = len(abbrstr)
+
+                ttinfos.append((utcoff, isdst, abbrind))
+                abbrstr += offset.tzname.encode("ascii") + b"\x00"
+            abbrstr = bytes(abbrstr)
+
+            typecnt = len(offsets)
+            timecnt = len(trans_times)
+            charcnt = len(abbrstr)
+
+            # Write the header
+            zonefile.write(b"TZif")
+            zonefile.write(b"%d" % version)
+            zonefile.write(b" " * 15)
+            zonefile.write(
+                struct.pack(
+                    ">6l", isutcnt, isstdcnt, leapcnt, timecnt, typecnt, charcnt
+                )
+            )
+
+            # Now the transition data
+            zonefile.write(struct.pack(f">{timecnt}{time_type}", *trans_times))
+            zonefile.write(struct.pack(f">{timecnt}B", *trans_idx))
+
+            for ttinfo in ttinfos:
+                zonefile.write(struct.pack(">lbb", *ttinfo))
+
+            zonefile.write(bytes(abbrstr))
+
+            # Now the metadata and leap seconds
+            zonefile.write(struct.pack(f"{isutcnt}b", *isutc))
+            zonefile.write(struct.pack(f"{isstdcnt}b", *isstd))
+            zonefile.write(struct.pack(f">{leapcnt}l", *leap_seconds))
+
+            # Finally we write the TZ string if we're writing a Version 2+ file
+            if v > 0:
+                zonefile.write(b"\x0A")
+                zonefile.write(after.encode("ascii"))
+                zonefile.write(b"\x0A")
+
+        zonefile.seek(0)
+        return zonefile
+
+
+class CWeirdZoneTest(WeirdZoneTest):
+    module = c_zoneinfo
+
+
+class TZStrTest(ZoneInfoTestBase):
+    module = py_zoneinfo
+
+    NORMAL = 0
+    FOLD = 1
+    GAP = 2
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+
+        cls._populate_test_cases()
+        cls.populate_tzstr_header()
+
+    @classmethod
+    def populate_tzstr_header(cls):
+        out = bytearray()
+        # The TZif format always starts with a Version 1 file followed by
+        # the Version 2+ file. In this case, we have no transitions, just
+        # the tzstr in the footer, so up to the footer, the files are
+        # identical and we can just write the same file twice in a row.
+        for _ in range(2):
+            out += b"TZif"  # Magic value
+            out += b"3"  # Version
+            out += b" " * 15  # Reserved
+
+            # We will not write any of the manual transition parts
+            out += struct.pack(">6l", 0, 0, 0, 0, 0, 0)
+
+        cls._tzif_header = bytes(out)
+
+    def zone_from_tzstr(self, tzstr):
+        """Creates a zoneinfo file following a POSIX rule."""
+        zonefile = io.BytesIO(self._tzif_header)
+        zonefile.seek(0, 2)
+
+        # Write the footer
+        zonefile.write(b"\x0A")
+        zonefile.write(tzstr.encode("ascii"))
+        zonefile.write(b"\x0A")
+
+        zonefile.seek(0)
+
+        return self.klass.from_file(zonefile, key=tzstr)
+
+    def test_tzstr_localized(self):
+        for tzstr, cases in self.test_cases.items():
+            with self.subTest(tzstr=tzstr):
+                zi = self.zone_from_tzstr(tzstr)
+
+            for dt_naive, offset, _ in cases:
+                dt = dt_naive.replace(tzinfo=zi)
+
+                with self.subTest(tzstr=tzstr, dt=dt, offset=offset):
+                    self.assertEqual(dt.tzname(), offset.tzname)
+                    self.assertEqual(dt.utcoffset(), offset.utcoffset)
+                    self.assertEqual(dt.dst(), offset.dst)
+
+    def test_tzstr_from_utc(self):
+        for tzstr, cases in self.test_cases.items():
+            with self.subTest(tzstr=tzstr):
+                zi = self.zone_from_tzstr(tzstr)
+
+            for dt_naive, offset, dt_type in cases:
+                if dt_type == self.GAP:
+                    continue  # Cannot create a gap from UTC
+
+                dt_utc = (dt_naive - offset.utcoffset).replace(
+                    tzinfo=timezone.utc
+                )
+
+                # Check that we can go UTC -> Our zone
+                dt_act = dt_utc.astimezone(zi)
+                dt_exp = dt_naive.replace(tzinfo=zi)
+
+                self.assertEqual(dt_act, dt_exp)
+
+                if dt_type == self.FOLD:
+                    self.assertEqual(dt_act.fold, dt_naive.fold, dt_naive)
+                else:
+                    self.assertEqual(dt_act.fold, 0)
+
+                # Now check that we can go our zone -> UTC
+                dt_act = dt_exp.astimezone(timezone.utc)
+
+                self.assertEqual(dt_act, dt_utc)
+
+    def test_invalid_tzstr(self):
+        invalid_tzstrs = [
+            "PST8PDT",  # DST but no transition specified
+            "+11",  # Unquoted alphanumeric
+            "GMT,M3.2.0/2,M11.1.0/3",  # Transition rule but no DST
+            "GMT0+11,M3.2.0/2,M11.1.0/3",  # Unquoted alphanumeric in DST
+            "PST8PDT,M3.2.0/2",  # Only one transition rule
+            # Invalid offsets
+            "STD+25",
+            "STD-25",
+            "STD+374",
+            "STD+374DST,M3.2.0/2,M11.1.0/3",
+            "STD+23DST+25,M3.2.0/2,M11.1.0/3",
+            "STD-23DST-25,M3.2.0/2,M11.1.0/3",
+            # Completely invalid dates
+            "AAA4BBB,M1443339,M11.1.0/3",
+            "AAA4BBB,M3.2.0/2,0349309483959c",
+            # Invalid months
+            "AAA4BBB,M13.1.1/2,M1.1.1/2",
+            "AAA4BBB,M1.1.1/2,M13.1.1/2",
+            "AAA4BBB,M0.1.1/2,M1.1.1/2",
+            "AAA4BBB,M1.1.1/2,M0.1.1/2",
+            # Invalid weeks
+            "AAA4BBB,M1.6.1/2,M1.1.1/2",
+            "AAA4BBB,M1.1.1/2,M1.6.1/2",
+            # Invalid weekday
+            "AAA4BBB,M1.1.7/2,M2.1.1/2",
+            "AAA4BBB,M1.1.1/2,M2.1.7/2",
+            # Invalid numeric offset
+            "AAA4BBB,-1/2,20/2",
+            "AAA4BBB,1/2,-1/2",
+            "AAA4BBB,367,20/2",
+            "AAA4BBB,1/2,367/2",
+            # Invalid julian offset
+            "AAA4BBB,J0/2,J20/2",
+            "AAA4BBB,J20/2,J366/2",
+        ]
+
+        for invalid_tzstr in invalid_tzstrs:
+            with self.subTest(tzstr=invalid_tzstr):
+                # Not necessarily a guaranteed property, but we should show
+                # the problematic TZ string if that's the cause of failure.
+                tzstr_regex = re.escape(invalid_tzstr)
+                with self.assertRaisesRegex(ValueError, tzstr_regex):
+                    self.zone_from_tzstr(invalid_tzstr)
+
+    @classmethod
+    def _populate_test_cases(cls):
+        # This method uses a somewhat unusual style in that it populates the
+        # test cases for each tzstr by using a decorator to automatically call
+        # a function that mutates the current dictionary of test cases.
+        #
+        # The population of the test cases is done in individual functions to
+        # give each set of test cases its own namespace in which to define
+        # its offsets (this way we don't have to worry about variable reuse
+        # causing problems if someone makes a typo).
+        #
+        # The decorator for calling is used to make it more obvious that each
+        # function is actually called (if it's not decorated, it's not called).
+        def call(f):
+            """Decorator to call the addition methods.
+
+            This will call a function which adds at least one new entry into
+            the `cases` dictionary. The decorator will also assert that
+            something was added to the dictionary.
+            """
+            prev_len = len(cases)
+            f()
+            assert len(cases) > prev_len, "Function did not add a test case!"
+
+        NORMAL = cls.NORMAL
+        FOLD = cls.FOLD
+        GAP = cls.GAP
+
+        cases = {}
+
+        @call
+        def _add():
+            # Transition to EDT on the 2nd Sunday in March at 4 AM, and
+            # transition back on the first Sunday in November at 3AM
+            tzstr = "EST5EDT,M3.2.0/4:00,M11.1.0/3:00"
+
+            EST = ZoneOffset("EST", timedelta(hours=-5), ZERO)
+            EDT = ZoneOffset("EDT", timedelta(hours=-4), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2019, 3, 9), EST, NORMAL),
+                (datetime(2019, 3, 10, 3, 59), EST, NORMAL),
+                (datetime(2019, 3, 10, 4, 0, fold=0), EST, GAP),
+                (datetime(2019, 3, 10, 4, 0, fold=1), EDT, GAP),
+                (datetime(2019, 3, 10, 4, 1, fold=0), EST, GAP),
+                (datetime(2019, 3, 10, 4, 1, fold=1), EDT, GAP),
+                (datetime(2019, 11, 2), EDT, NORMAL),
+                (datetime(2019, 11, 3, 1, 59, fold=1), EDT, NORMAL),
+                (datetime(2019, 11, 3, 2, 0, fold=0), EDT, FOLD),
+                (datetime(2019, 11, 3, 2, 0, fold=1), EST, FOLD),
+                (datetime(2020, 3, 8, 3, 59), EST, NORMAL),
+                (datetime(2020, 3, 8, 4, 0, fold=0), EST, GAP),
+                (datetime(2020, 3, 8, 4, 0, fold=1), EDT, GAP),
+                (datetime(2020, 11, 1, 1, 59, fold=1), EDT, NORMAL),
+                (datetime(2020, 11, 1, 2, 0, fold=0), EDT, FOLD),
+                (datetime(2020, 11, 1, 2, 0, fold=1), EST, FOLD),
+            )
+
+        @call
+        def _add():
+            # Transition to BST happens on the last Sunday in March at 1 AM GMT
+            # and the transition back happens the last Sunday in October at 2AM BST
+            tzstr = "GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00"
+
+            GMT = ZoneOffset("GMT", ZERO, ZERO)
+            BST = ZoneOffset("BST", ONE_H, ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2019, 3, 30), GMT, NORMAL),
+                (datetime(2019, 3, 31, 0, 59), GMT, NORMAL),
+                (datetime(2019, 3, 31, 2, 0), BST, NORMAL),
+                (datetime(2019, 10, 26), BST, NORMAL),
+                (datetime(2019, 10, 27, 0, 59, fold=1), BST, NORMAL),
+                (datetime(2019, 10, 27, 1, 0, fold=0), BST, GAP),
+                (datetime(2019, 10, 27, 2, 0, fold=1), GMT, GAP),
+                (datetime(2020, 3, 29, 0, 59), GMT, NORMAL),
+                (datetime(2020, 3, 29, 2, 0), BST, NORMAL),
+                (datetime(2020, 10, 25, 0, 59, fold=1), BST, NORMAL),
+                (datetime(2020, 10, 25, 1, 0, fold=0), BST, FOLD),
+                (datetime(2020, 10, 25, 2, 0, fold=1), GMT, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Austrialian time zone - DST start is chronologically first
+            tzstr = "AEST-10AEDT,M10.1.0/2,M4.1.0/3"
+
+            AEST = ZoneOffset("AEST", timedelta(hours=10), ZERO)
+            AEDT = ZoneOffset("AEDT", timedelta(hours=11), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2019, 4, 6), AEDT, NORMAL),
+                (datetime(2019, 4, 7, 1, 59), AEDT, NORMAL),
+                (datetime(2019, 4, 7, 1, 59, fold=1), AEDT, NORMAL),
+                (datetime(2019, 4, 7, 2, 0, fold=0), AEDT, FOLD),
+                (datetime(2019, 4, 7, 2, 1, fold=0), AEDT, FOLD),
+                (datetime(2019, 4, 7, 2, 0, fold=1), AEST, FOLD),
+                (datetime(2019, 4, 7, 2, 1, fold=1), AEST, FOLD),
+                (datetime(2019, 4, 7, 3, 0, fold=0), AEST, NORMAL),
+                (datetime(2019, 4, 7, 3, 0, fold=1), AEST, NORMAL),
+                (datetime(2019, 10, 5, 0), AEST, NORMAL),
+                (datetime(2019, 10, 6, 1, 59), AEST, NORMAL),
+                (datetime(2019, 10, 6, 2, 0, fold=0), AEST, GAP),
+                (datetime(2019, 10, 6, 2, 0, fold=1), AEDT, GAP),
+                (datetime(2019, 10, 6, 3, 0), AEDT, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Irish time zone - negative DST
+            tzstr = "IST-1GMT0,M10.5.0,M3.5.0/1"
+
+            GMT = ZoneOffset("GMT", ZERO, -ONE_H)
+            IST = ZoneOffset("IST", ONE_H, ZERO)
+
+            cases[tzstr] = (
+                (datetime(2019, 3, 30), GMT, NORMAL),
+                (datetime(2019, 3, 31, 0, 59), GMT, NORMAL),
+                (datetime(2019, 3, 31, 2, 0), IST, NORMAL),
+                (datetime(2019, 10, 26), IST, NORMAL),
+                (datetime(2019, 10, 27, 0, 59, fold=1), IST, NORMAL),
+                (datetime(2019, 10, 27, 1, 0, fold=0), IST, FOLD),
+                (datetime(2019, 10, 27, 1, 0, fold=1), GMT, FOLD),
+                (datetime(2019, 10, 27, 2, 0, fold=1), GMT, NORMAL),
+                (datetime(2020, 3, 29, 0, 59), GMT, NORMAL),
+                (datetime(2020, 3, 29, 2, 0), IST, NORMAL),
+                (datetime(2020, 10, 25, 0, 59, fold=1), IST, NORMAL),
+                (datetime(2020, 10, 25, 1, 0, fold=0), IST, FOLD),
+                (datetime(2020, 10, 25, 2, 0, fold=1), GMT, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Pacific/Kosrae: Fixed offset zone with a quoted numerical tzname
+            tzstr = "<+11>-11"
+
+            cases[tzstr] = (
+                (
+                    datetime(2020, 1, 1),
+                    ZoneOffset("+11", timedelta(hours=11)),
+                    NORMAL,
+                ),
+            )
+
+        @call
+        def _add():
+            # Quoted STD and DST, transitions at 24:00
+            tzstr = "<-04>4<-03>,M9.1.6/24,M4.1.6/24"
+
+            M04 = ZoneOffset("-04", timedelta(hours=-4))
+            M03 = ZoneOffset("-03", timedelta(hours=-3), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2020, 5, 1), M04, NORMAL),
+                (datetime(2020, 11, 1), M03, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Permanent daylight saving time is modeled with transitions at 0/0
+            # and J365/25, as mentioned in RFC 8536 Section 3.3.1
+            tzstr = "EST5EDT,0/0,J365/25"
+
+            EDT = ZoneOffset("EDT", timedelta(hours=-4), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2019, 1, 1), EDT, NORMAL),
+                (datetime(2019, 6, 1), EDT, NORMAL),
+                (datetime(2019, 12, 31, 23, 59, 59, 999999), EDT, NORMAL),
+                (datetime(2020, 1, 1), EDT, NORMAL),
+                (datetime(2020, 3, 1), EDT, NORMAL),
+                (datetime(2020, 6, 1), EDT, NORMAL),
+                (datetime(2020, 12, 31, 23, 59, 59, 999999), EDT, NORMAL),
+                (datetime(2400, 1, 1), EDT, NORMAL),
+                (datetime(2400, 3, 1), EDT, NORMAL),
+                (datetime(2400, 12, 31, 23, 59, 59, 999999), EDT, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Transitions on March 1st and November 1st of each year
+            tzstr = "AAA3BBB,J60/12,J305/12"
+
+            AAA = ZoneOffset("AAA", timedelta(hours=-3))
+            BBB = ZoneOffset("BBB", timedelta(hours=-2), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2019, 1, 1), AAA, NORMAL),
+                (datetime(2019, 2, 28), AAA, NORMAL),
+                (datetime(2019, 3, 1, 11, 59), AAA, NORMAL),
+                (datetime(2019, 3, 1, 12, fold=0), AAA, GAP),
+                (datetime(2019, 3, 1, 12, fold=1), BBB, GAP),
+                (datetime(2019, 3, 1, 13), BBB, NORMAL),
+                (datetime(2019, 11, 1, 10, 59), BBB, NORMAL),
+                (datetime(2019, 11, 1, 11, fold=0), BBB, FOLD),
+                (datetime(2019, 11, 1, 11, fold=1), AAA, FOLD),
+                (datetime(2019, 11, 1, 12), AAA, NORMAL),
+                (datetime(2019, 12, 31, 23, 59, 59, 999999), AAA, NORMAL),
+                (datetime(2020, 1, 1), AAA, NORMAL),
+                (datetime(2020, 2, 29), AAA, NORMAL),
+                (datetime(2020, 3, 1, 11, 59), AAA, NORMAL),
+                (datetime(2020, 3, 1, 12, fold=0), AAA, GAP),
+                (datetime(2020, 3, 1, 12, fold=1), BBB, GAP),
+                (datetime(2020, 3, 1, 13), BBB, NORMAL),
+                (datetime(2020, 11, 1, 10, 59), BBB, NORMAL),
+                (datetime(2020, 11, 1, 11, fold=0), BBB, FOLD),
+                (datetime(2020, 11, 1, 11, fold=1), AAA, FOLD),
+                (datetime(2020, 11, 1, 12), AAA, NORMAL),
+                (datetime(2020, 12, 31, 23, 59, 59, 999999), AAA, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Taken from America/Godthab, this rule has a transition on the
+            # Saturday before the last Sunday of March and October, at 22:00
+            # and 23:00, respectively. This is encoded with negative start
+            # and end transition times.
+            tzstr = "<-03>3<-02>,M3.5.0/-2,M10.5.0/-1"
+
+            N03 = ZoneOffset("-03", timedelta(hours=-3))
+            N02 = ZoneOffset("-02", timedelta(hours=-2), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2020, 3, 27), N03, NORMAL),
+                (datetime(2020, 3, 28, 21, 59, 59), N03, NORMAL),
+                (datetime(2020, 3, 28, 22, fold=0), N03, GAP),
+                (datetime(2020, 3, 28, 22, fold=1), N02, GAP),
+                (datetime(2020, 3, 28, 23), N02, NORMAL),
+                (datetime(2020, 10, 24, 21), N02, NORMAL),
+                (datetime(2020, 10, 24, 22, fold=0), N02, FOLD),
+                (datetime(2020, 10, 24, 22, fold=1), N03, FOLD),
+                (datetime(2020, 10, 24, 23), N03, NORMAL),
+            )
+
+        @call
+        def _add():
+            # Transition times with minutes and seconds
+            tzstr = "AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45"
+
+            AAA = ZoneOffset("AAA", timedelta(hours=-3))
+            BBB = ZoneOffset("BBB", timedelta(hours=-2), ONE_H)
+
+            cases[tzstr] = (
+                (datetime(2012, 3, 11, 1, 0), AAA, NORMAL),
+                (datetime(2012, 3, 11, 1, 30, fold=0), AAA, GAP),
+                (datetime(2012, 3, 11, 1, 30, fold=1), BBB, GAP),
+                (datetime(2012, 3, 11, 2, 30), BBB, NORMAL),
+                (datetime(2012, 11, 4, 1, 15, 44, 999999), BBB, NORMAL),
+                (datetime(2012, 11, 4, 1, 15, 45, fold=0), BBB, FOLD),
+                (datetime(2012, 11, 4, 1, 15, 45, fold=1), AAA, FOLD),
+                (datetime(2012, 11, 4, 2, 15, 45), AAA, NORMAL),
+            )
+
+        cls.test_cases = cases
+
+
+class CTZStrTest(TZStrTest):
+    module = c_zoneinfo
+
+
+class ZoneInfoCacheTest(TzPathUserMixin, ZoneInfoTestBase):
+    module = py_zoneinfo
+
+    def setUp(self):
+        self.klass.clear_cache()
+        super().setUp()
+
+    @property
+    def zoneinfo_data(self):
+        return ZONEINFO_DATA
+
+    @property
+    def tzpath(self):
+        return [self.zoneinfo_data.tzpath]
+
+    def test_ephemeral_zones(self):
+        self.assertIs(
+            self.klass("America/Los_Angeles"), self.klass("America/Los_Angeles")
+        )
+
+    def test_strong_refs(self):
+        tz0 = self.klass("Australia/Sydney")
+        tz1 = self.klass("Australia/Sydney")
+
+        self.assertIs(tz0, tz1)
+
+    def test_no_cache(self):
+
+        tz0 = self.klass("Europe/Lisbon")
+        tz1 = self.klass.no_cache("Europe/Lisbon")
+
+        self.assertIsNot(tz0, tz1)
+
+    def test_cache_reset_tzpath(self):
+        """Test that the cache persists when tzpath has been changed.
+
+        The PEP specifies that as long as a reference exists to one zone
+        with a given key, the primary constructor must continue to return
+        the same object.
+        """
+        zi0 = self.klass("America/Los_Angeles")
+        with self.tzpath_context([]):
+            zi1 = self.klass("America/Los_Angeles")
+
+        self.assertIs(zi0, zi1)
+
+    def test_clear_cache_explicit_none(self):
+        la0 = self.klass("America/Los_Angeles")
+        self.klass.clear_cache(only_keys=None)
+        la1 = self.klass("America/Los_Angeles")
+
+        self.assertIsNot(la0, la1)
+
+    def test_clear_cache_one_key(self):
+        """Tests that you can clear a single key from the cache."""
+        la0 = self.klass("America/Los_Angeles")
+        dub0 = self.klass("Europe/Dublin")
+
+        self.klass.clear_cache(only_keys=["America/Los_Angeles"])
+
+        la1 = self.klass("America/Los_Angeles")
+        dub1 = self.klass("Europe/Dublin")
+
+        self.assertIsNot(la0, la1)
+        self.assertIs(dub0, dub1)
+
+    def test_clear_cache_two_keys(self):
+        la0 = self.klass("America/Los_Angeles")
+        dub0 = self.klass("Europe/Dublin")
+        tok0 = self.klass("Asia/Tokyo")
+
+        self.klass.clear_cache(
+            only_keys=["America/Los_Angeles", "Europe/Dublin"]
+        )
+
+        la1 = self.klass("America/Los_Angeles")
+        dub1 = self.klass("Europe/Dublin")
+        tok1 = self.klass("Asia/Tokyo")
+
+        self.assertIsNot(la0, la1)
+        self.assertIsNot(dub0, dub1)
+        self.assertIs(tok0, tok1)
+
+
+class CZoneInfoCacheTest(ZoneInfoCacheTest):
+    module = c_zoneinfo
+
+
+class ZoneInfoPickleTest(TzPathUserMixin, ZoneInfoTestBase):
+    module = py_zoneinfo
+
+    def setUp(self):
+        self.klass.clear_cache()
+
+        with contextlib.ExitStack() as stack:
+            stack.enter_context(test_support.set_zoneinfo_module(self.module))
+            self.addCleanup(stack.pop_all().close)
+
+        super().setUp()
+
+    @property
+    def zoneinfo_data(self):
+        return ZONEINFO_DATA
+
+    @property
+    def tzpath(self):
+        return [self.zoneinfo_data.tzpath]
+
+    def test_cache_hit(self):
+        zi_in = self.klass("Europe/Dublin")
+        pkl = pickle.dumps(zi_in)
+        zi_rt = pickle.loads(pkl)
+
+        with self.subTest(test="Is non-pickled ZoneInfo"):
+            self.assertIs(zi_in, zi_rt)
+
+        zi_rt2 = pickle.loads(pkl)
+        with self.subTest(test="Is unpickled ZoneInfo"):
+            self.assertIs(zi_rt, zi_rt2)
+
+    def test_cache_miss(self):
+        zi_in = self.klass("Europe/Dublin")
+        pkl = pickle.dumps(zi_in)
+
+        del zi_in
+        self.klass.clear_cache()  # Induce a cache miss
+        zi_rt = pickle.loads(pkl)
+        zi_rt2 = pickle.loads(pkl)
+
+        self.assertIs(zi_rt, zi_rt2)
+
+    def test_no_cache(self):
+        zi_no_cache = self.klass.no_cache("Europe/Dublin")
+
+        pkl = pickle.dumps(zi_no_cache)
+        zi_rt = pickle.loads(pkl)
+
+        with self.subTest(test="Not the pickled object"):
+            self.assertIsNot(zi_rt, zi_no_cache)
+
+        zi_rt2 = pickle.loads(pkl)
+        with self.subTest(test="Not a second unpickled object"):
+            self.assertIsNot(zi_rt, zi_rt2)
+
+        zi_cache = self.klass("Europe/Dublin")
+        with self.subTest(test="Not a cached object"):
+            self.assertIsNot(zi_rt, zi_cache)
+
+    def test_from_file(self):
+        key = "Europe/Dublin"
+        with open(self.zoneinfo_data.path_from_key(key), "rb") as f:
+            zi_nokey = self.klass.from_file(f)
+
+            f.seek(0)
+            zi_key = self.klass.from_file(f, key=key)
+
+        test_cases = [
+            (zi_key, "ZoneInfo with key"),
+            (zi_nokey, "ZoneInfo without key"),
+        ]
+
+        for zi, test_name in test_cases:
+            with self.subTest(test_name=test_name):
+                with self.assertRaises(pickle.PicklingError):
+                    pickle.dumps(zi)
+
+    def test_pickle_after_from_file(self):
+        # This may be a bit of paranoia, but this test is to ensure that no
+        # global state is maintained in order to handle the pickle cache and
+        # from_file behavior, and that it is possible to interweave the
+        # constructors of each of these and pickling/unpickling without issues.
+        key = "Europe/Dublin"
+        zi = self.klass(key)
+
+        pkl_0 = pickle.dumps(zi)
+        zi_rt_0 = pickle.loads(pkl_0)
+        self.assertIs(zi, zi_rt_0)
+
+        with open(self.zoneinfo_data.path_from_key(key), "rb") as f:
+            zi_ff = self.klass.from_file(f, key=key)
+
+        pkl_1 = pickle.dumps(zi)
+        zi_rt_1 = pickle.loads(pkl_1)
+        self.assertIs(zi, zi_rt_1)
+
+        with self.assertRaises(pickle.PicklingError):
+            pickle.dumps(zi_ff)
+
+        pkl_2 = pickle.dumps(zi)
+        zi_rt_2 = pickle.loads(pkl_2)
+        self.assertIs(zi, zi_rt_2)
+
+
+class CZoneInfoPickleTest(ZoneInfoPickleTest):
+    module = c_zoneinfo
+
+
+class CallingConventionTest(ZoneInfoTestBase):
+    """Tests for functions with restricted calling conventions."""
+
+    module = py_zoneinfo
+
+    @property
+    def zoneinfo_data(self):
+        return ZONEINFO_DATA
+
+    def test_from_file(self):
+        with open(self.zoneinfo_data.path_from_key("UTC"), "rb") as f:
+            with self.assertRaises(TypeError):
+                self.klass.from_file(fobj=f)
+
+    def test_clear_cache(self):
+        with self.assertRaises(TypeError):
+            self.klass.clear_cache(["UTC"])
+
+
+class CCallingConventionTest(CallingConventionTest):
+    module = c_zoneinfo
+
+
+class TzPathTest(TzPathUserMixin, ZoneInfoTestBase):
+    module = py_zoneinfo
+
+    @staticmethod
+    @contextlib.contextmanager
+    def python_tzpath_context(value):
+        path_var = "PYTHONTZPATH"
+        try:
+            with OS_ENV_LOCK:
+                old_env = os.environ.get(path_var, None)
+                os.environ[path_var] = value
+                yield
+        finally:
+            if old_env is None:
+                del os.environ[path_var]
+            else:
+                os.environ[path_var] = old_env  # pragma: nocover
+
+    def test_env_variable(self):
+        """Tests that the environment variable works with reset_tzpath."""
+        new_paths = [
+            ("", []),
+            ("/etc/zoneinfo", ["/etc/zoneinfo"]),
+            (f"/a/b/c{os.pathsep}/d/e/f", ["/a/b/c", "/d/e/f"]),
+        ]
+
+        for new_path_var, expected_result in new_paths:
+            with self.python_tzpath_context(new_path_var):
+                with self.subTest(tzpath=new_path_var):
+                    self.module.reset_tzpath()
+                    tzpath = self.module.TZPATH
+                    self.assertSequenceEqual(tzpath, expected_result)
+
+    def test_env_variable_relative_paths(self):
+        test_cases = [
+            [("path/to/somewhere",), ()],
+            [
+                ("/usr/share/zoneinfo", "path/to/somewhere",),
+                ("/usr/share/zoneinfo",),
+            ],
+            [("../relative/path",), ()],
+            [
+                ("/usr/share/zoneinfo", "../relative/path",),
+                ("/usr/share/zoneinfo",),
+            ],
+            [("path/to/somewhere", "../relative/path",), ()],
+            [
+                (
+                    "/usr/share/zoneinfo",
+                    "path/to/somewhere",
+                    "../relative/path",
+                ),
+                ("/usr/share/zoneinfo",),
+            ],
+        ]
+
+        for input_paths, expected_paths in test_cases:
+            path_var = os.pathsep.join(input_paths)
+            with self.python_tzpath_context(path_var):
+                with self.subTest("warning", path_var=path_var):
+                    # Note: Per PEP 615 the warning is implementation-defined
+                    # behavior, other implementations need not warn.
+                    with self.assertWarns(self.module.InvalidTZPathWarning):
+                        self.module.reset_tzpath()
+
+                tzpath = self.module.TZPATH
+                with self.subTest("filtered", path_var=path_var):
+                    self.assertSequenceEqual(tzpath, expected_paths)
+
+    def test_reset_tzpath_kwarg(self):
+        self.module.reset_tzpath(to=["/a/b/c"])
+
+        self.assertSequenceEqual(self.module.TZPATH, ("/a/b/c",))
+
+    def test_reset_tzpath_relative_paths(self):
+        bad_values = [
+            ("path/to/somewhere",),
+            ("/usr/share/zoneinfo", "path/to/somewhere",),
+            ("../relative/path",),
+            ("/usr/share/zoneinfo", "../relative/path",),
+            ("path/to/somewhere", "../relative/path",),
+            ("/usr/share/zoneinfo", "path/to/somewhere", "../relative/path",),
+        ]
+        for input_paths in bad_values:
+            with self.subTest(input_paths=input_paths):
+                with self.assertRaises(ValueError):
+                    self.module.reset_tzpath(to=input_paths)
+
+    def test_tzpath_type_error(self):
+        bad_values = [
+            "/etc/zoneinfo:/usr/share/zoneinfo",
+            b"/etc/zoneinfo:/usr/share/zoneinfo",
+            0,
+        ]
+
+        for bad_value in bad_values:
+            with self.subTest(value=bad_value):
+                with self.assertRaises(TypeError):
+                    self.module.reset_tzpath(bad_value)
+
+    def test_tzpath_attribute(self):
+        tzpath_0 = ["/one", "/two"]
+        tzpath_1 = ["/three"]
+
+        with self.tzpath_context(tzpath_0):
+            query_0 = self.module.TZPATH
+
+        with self.tzpath_context(tzpath_1):
+            query_1 = self.module.TZPATH
+
+        self.assertSequenceEqual(tzpath_0, query_0)
+        self.assertSequenceEqual(tzpath_1, query_1)
+
+
+class CTzPathTest(TzPathTest):
+    module = c_zoneinfo
+
+
+class TestModule(ZoneInfoTestBase):
+    module = py_zoneinfo
+
+    @property
+    def zoneinfo_data(self):
+        return ZONEINFO_DATA
+
+    @cached_property
+    def _UTC_bytes(self):
+        zone_file = self.zoneinfo_data.path_from_key("UTC")
+        with open(zone_file, "rb") as f:
+            return f.read()
+
+    def touch_zone(self, key, tz_root):
+        """Creates a valid TZif file at key under the zoneinfo root tz_root.
+
+        tz_root must exist, but all folders below that will be created.
+        """
+        if not os.path.exists(tz_root):
+            raise FileNotFoundError(f"{tz_root} does not exist.")
+
+        root_dir, *tail = key.rsplit("/", 1)
+        if tail:  # If there's no tail, then the first component isn't a dir
+            os.makedirs(os.path.join(tz_root, root_dir), exist_ok=True)
+
+        zonefile_path = os.path.join(tz_root, key)
+        with open(zonefile_path, "wb") as f:
+            f.write(self._UTC_bytes)
+
+    def test_getattr_error(self):
+        with self.assertRaises(AttributeError):
+            self.module.NOATTRIBUTE
+
+    def test_dir_contains_all(self):
+        """dir(self.module) should at least contain everything in __all__."""
+        module_all_set = set(self.module.__all__)
+        module_dir_set = set(dir(self.module))
+
+        difference = module_all_set - module_dir_set
+
+        self.assertFalse(difference)
+
+    def test_dir_unique(self):
+        """Test that there are no duplicates in dir(self.module)"""
+        module_dir = dir(self.module)
+        module_unique = set(module_dir)
+
+        self.assertCountEqual(module_dir, module_unique)
+
+    def test_available_timezones(self):
+        with self.tzpath_context([self.zoneinfo_data.tzpath]):
+            self.assertTrue(self.zoneinfo_data.keys)  # Sanity check
+
+            available_keys = self.module.available_timezones()
+            zoneinfo_keys = set(self.zoneinfo_data.keys)
+
+            # If tzdata is not present, zoneinfo_keys == available_keys,
+            # otherwise it should be a subset.
+            union = zoneinfo_keys & available_keys
+            self.assertEqual(zoneinfo_keys, union)
+
+    def test_available_timezones_weirdzone(self):
+        with tempfile.TemporaryDirectory() as td:
+            # Make a fictional zone at "Mars/Olympus_Mons"
+            self.touch_zone("Mars/Olympus_Mons", td)
+
+            with self.tzpath_context([td]):
+                available_keys = self.module.available_timezones()
+                self.assertIn("Mars/Olympus_Mons", available_keys)
+
+    def test_folder_exclusions(self):
+        expected = {
+            "America/Los_Angeles",
+            "America/Santiago",
+            "America/Indiana/Indianapolis",
+            "UTC",
+            "Europe/Paris",
+            "Europe/London",
+            "Asia/Tokyo",
+            "Australia/Sydney",
+        }
+
+        base_tree = list(expected)
+        posix_tree = [f"posix/{x}" for x in base_tree]
+        right_tree = [f"right/{x}" for x in base_tree]
+
+        cases = [
+            ("base_tree", base_tree),
+            ("base_and_posix", base_tree + posix_tree),
+            ("base_and_right", base_tree + right_tree),
+            ("all_trees", base_tree + right_tree + posix_tree),
+        ]
+
+        with tempfile.TemporaryDirectory() as td:
+            for case_name, tree in cases:
+                tz_root = os.path.join(td, case_name)
+                os.mkdir(tz_root)
+
+                for key in tree:
+                    self.touch_zone(key, tz_root)
+
+                with self.tzpath_context([tz_root]):
+                    with self.subTest(case_name):
+                        actual = self.module.available_timezones()
+                        self.assertEqual(actual, expected)
+
+    def test_exclude_posixrules(self):
+        expected = {
+            "America/New_York",
+            "Europe/London",
+        }
+
+        tree = list(expected) + ["posixrules"]
+
+        with tempfile.TemporaryDirectory() as td:
+            for key in tree:
+                self.touch_zone(key, td)
+
+            with self.tzpath_context([td]):
+                actual = self.module.available_timezones()
+                self.assertEqual(actual, expected)
+
+
+class CTestModule(TestModule):
+    module = c_zoneinfo
+
+
+class ExtensionBuiltTest(unittest.TestCase):
+    """Smoke test to ensure that the C and Python extensions are both tested.
+
+    Because the intention is for the Python and C versions of ZoneInfo to
+    behave identically, these tests necessarily rely on implementation details,
+    so the tests may need to be adjusted if the implementations change. Do not
+    rely on these tests as an indication of stable properties of these classes.
+    """
+
+    def test_cache_location(self):
+        # The pure Python version stores caches on attributes, but the C
+        # extension stores them in C globals (at least for now)
+        self.assertFalse(hasattr(c_zoneinfo.ZoneInfo, "_weak_cache"))
+        self.assertTrue(hasattr(py_zoneinfo.ZoneInfo, "_weak_cache"))
+
+    def test_gc_tracked(self):
+        # The pure Python version is tracked by the GC but (for now) the C
+        # version is not.
+        import gc
+
+        self.assertTrue(gc.is_tracked(py_zoneinfo.ZoneInfo))
+        self.assertFalse(gc.is_tracked(c_zoneinfo.ZoneInfo))
+
+
+@dataclasses.dataclass(frozen=True)
+class ZoneOffset:
+    tzname: str
+    utcoffset: timedelta
+    dst: timedelta = ZERO
+
+
+@dataclasses.dataclass(frozen=True)
+class ZoneTransition:
+    transition: datetime
+    offset_before: ZoneOffset
+    offset_after: ZoneOffset
+
+    @property
+    def transition_utc(self):
+        return (self.transition - self.offset_before.utcoffset).replace(
+            tzinfo=timezone.utc
+        )
+
+    @property
+    def fold(self):
+        """Whether this introduces a fold"""
+        return self.offset_before.utcoffset > self.offset_after.utcoffset
+
+    @property
+    def gap(self):
+        """Whether this introduces a gap"""
+        return self.offset_before.utcoffset < self.offset_after.utcoffset
+
+    @property
+    def delta(self):
+        return self.offset_after.utcoffset - self.offset_before.utcoffset
+
+    @property
+    def anomaly_start(self):
+        if self.fold:
+            return self.transition + self.delta
+        else:
+            return self.transition
+
+    @property
+    def anomaly_end(self):
+        if not self.fold:
+            return self.transition + self.delta
+        else:
+            return self.transition
+
+
+class ZoneInfoData:
+    def __init__(self, source_json, tzpath, v1=False):
+        self.tzpath = pathlib.Path(tzpath)
+        self.keys = []
+        self.v1 = v1
+        self._populate_tzpath(source_json)
+
+    def path_from_key(self, key):
+        return self.tzpath / key
+
+    def _populate_tzpath(self, source_json):
+        with open(source_json, "rb") as f:
+            zoneinfo_dict = json.load(f)
+
+        zoneinfo_data = zoneinfo_dict["data"]
+
+        for key, value in zoneinfo_data.items():
+            self.keys.append(key)
+            raw_data = self._decode_text(value)
+
+            if self.v1:
+                data = self._convert_to_v1(raw_data)
+            else:
+                data = raw_data
+
+            destination = self.path_from_key(key)
+            destination.parent.mkdir(exist_ok=True, parents=True)
+            with open(destination, "wb") as f:
+                f.write(data)
+
+    def _decode_text(self, contents):
+        raw_data = b"".join(map(str.encode, contents))
+        decoded = base64.b85decode(raw_data)
+
+        return lzma.decompress(decoded)
+
+    def _convert_to_v1(self, contents):
+        assert contents[0:4] == b"TZif", "Invalid TZif data found!"
+        version = int(contents[4:5])
+
+        header_start = 4 + 16
+        header_end = header_start + 24  # 6l == 24 bytes
+        assert version >= 2, "Version 1 file found: no conversion necessary"
+        isutcnt, isstdcnt, leapcnt, timecnt, typecnt, charcnt = struct.unpack(
+            ">6l", contents[header_start:header_end]
+        )
+
+        file_size = (
+            timecnt * 5
+            + typecnt * 6
+            + charcnt
+            + leapcnt * 8
+            + isstdcnt
+            + isutcnt
+        )
+        file_size += header_end
+        out = b"TZif" + b"\x00" + contents[5:file_size]
+
+        assert (
+            contents[file_size : (file_size + 4)] == b"TZif"
+        ), "Version 2 file not truncated at Version 2 header"
+
+        return out
+
+
+class ZoneDumpData:
+    @classmethod
+    def transition_keys(cls):
+        return cls._get_zonedump().keys()
+
+    @classmethod
+    def load_transition_examples(cls, key):
+        return cls._get_zonedump()[key]
+
+    @classmethod
+    def fixed_offset_zones(cls):
+        if not cls._FIXED_OFFSET_ZONES:
+            cls._populate_fixed_offsets()
+
+        return cls._FIXED_OFFSET_ZONES.items()
+
+    @classmethod
+    def _get_zonedump(cls):
+        if not cls._ZONEDUMP_DATA:
+            cls._populate_zonedump_data()
+        return cls._ZONEDUMP_DATA
+
+    @classmethod
+    def _populate_fixed_offsets(cls):
+        cls._FIXED_OFFSET_ZONES = {
+            "UTC": ZoneOffset("UTC", ZERO, ZERO),
+        }
+
+    @classmethod
+    def _populate_zonedump_data(cls):
+        def _Africa_Abidjan():
+            LMT = ZoneOffset("LMT", timedelta(seconds=-968))
+            GMT = ZoneOffset("GMT", ZERO)
+
+            return [
+                ZoneTransition(datetime(1912, 1, 1), LMT, GMT),
+            ]
+
+        def _Africa_Casablanca():
+            P00_s = ZoneOffset("+00", ZERO, ZERO)
+            P01_d = ZoneOffset("+01", ONE_H, ONE_H)
+            P00_d = ZoneOffset("+00", ZERO, -ONE_H)
+            P01_s = ZoneOffset("+01", ONE_H, ZERO)
+
+            return [
+                # Morocco sometimes pauses DST during Ramadan
+                ZoneTransition(datetime(2018, 3, 25, 2), P00_s, P01_d),
+                ZoneTransition(datetime(2018, 5, 13, 3), P01_d, P00_s),
+                ZoneTransition(datetime(2018, 6, 17, 2), P00_s, P01_d),
+                # On October 28th Morocco set standard time to +01,
+                # with negative DST only during Ramadan
+                ZoneTransition(datetime(2018, 10, 28, 3), P01_d, P01_s),
+                ZoneTransition(datetime(2019, 5, 5, 3), P01_s, P00_d),
+                ZoneTransition(datetime(2019, 6, 9, 2), P00_d, P01_s),
+            ]
+
+        def _America_Los_Angeles():
+            LMT = ZoneOffset("LMT", timedelta(seconds=-28378), ZERO)
+            PST = ZoneOffset("PST", timedelta(hours=-8), ZERO)
+            PDT = ZoneOffset("PDT", timedelta(hours=-7), ONE_H)
+            PWT = ZoneOffset("PWT", timedelta(hours=-7), ONE_H)
+            PPT = ZoneOffset("PPT", timedelta(hours=-7), ONE_H)
+
+            return [
+                ZoneTransition(datetime(1883, 11, 18, 12, 7, 2), LMT, PST),
+                ZoneTransition(datetime(1918, 3, 31, 2), PST, PDT),
+                ZoneTransition(datetime(1918, 3, 31, 2), PST, PDT),
+                ZoneTransition(datetime(1918, 10, 27, 2), PDT, PST),
+                # Transition to Pacific War Time
+                ZoneTransition(datetime(1942, 2, 9, 2), PST, PWT),
+                # Transition from Pacific War Time to Pacific Peace Time
+                ZoneTransition(datetime(1945, 8, 14, 16), PWT, PPT),
+                ZoneTransition(datetime(1945, 9, 30, 2), PPT, PST),
+                ZoneTransition(datetime(2015, 3, 8, 2), PST, PDT),
+                ZoneTransition(datetime(2015, 11, 1, 2), PDT, PST),
+                # After 2038: Rules continue indefinitely
+                ZoneTransition(datetime(2450, 3, 13, 2), PST, PDT),
+                ZoneTransition(datetime(2450, 11, 6, 2), PDT, PST),
+            ]
+
+        def _America_Santiago():
+            LMT = ZoneOffset("LMT", timedelta(seconds=-16966), ZERO)
+            SMT = ZoneOffset("SMT", timedelta(seconds=-16966), ZERO)
+            N05 = ZoneOffset("-05", timedelta(seconds=-18000), ZERO)
+            N04 = ZoneOffset("-04", timedelta(seconds=-14400), ZERO)
+            N03 = ZoneOffset("-03", timedelta(seconds=-10800), ONE_H)
+
+            return [
+                ZoneTransition(datetime(1890, 1, 1), LMT, SMT),
+                ZoneTransition(datetime(1910, 1, 10), SMT, N05),
+                ZoneTransition(datetime(1916, 7, 1), N05, SMT),
+                ZoneTransition(datetime(2008, 3, 30), N03, N04),
+                ZoneTransition(datetime(2008, 10, 12), N04, N03),
+                ZoneTransition(datetime(2040, 4, 8), N03, N04),
+                ZoneTransition(datetime(2040, 9, 2), N04, N03),
+            ]
+
+        def _Asia_Tokyo():
+            JST = ZoneOffset("JST", timedelta(seconds=32400), ZERO)
+            JDT = ZoneOffset("JDT", timedelta(seconds=36000), ONE_H)
+
+            # Japan had DST from 1948 to 1951, and it was unusual in that
+            # the transition from DST to STD occurred at 25:00, and is
+            # denominated as such in the time zone database
+            return [
+                ZoneTransition(datetime(1948, 5, 2), JST, JDT),
+                ZoneTransition(datetime(1948, 9, 12, 1), JDT, JST),
+                ZoneTransition(datetime(1951, 9, 9, 1), JDT, JST),
+            ]
+
+        def _Australia_Sydney():
+            LMT = ZoneOffset("LMT", timedelta(seconds=36292), ZERO)
+            AEST = ZoneOffset("AEST", timedelta(seconds=36000), ZERO)
+            AEDT = ZoneOffset("AEDT", timedelta(seconds=39600), ONE_H)
+
+            return [
+                ZoneTransition(datetime(1895, 2, 1), LMT, AEST),
+                ZoneTransition(datetime(1917, 1, 1, 0, 1), AEST, AEDT),
+                ZoneTransition(datetime(1917, 3, 25, 2), AEDT, AEST),
+                ZoneTransition(datetime(2012, 4, 1, 3), AEDT, AEST),
+                ZoneTransition(datetime(2012, 10, 7, 2), AEST, AEDT),
+                ZoneTransition(datetime(2040, 4, 1, 3), AEDT, AEST),
+                ZoneTransition(datetime(2040, 10, 7, 2), AEST, AEDT),
+            ]
+
+        def _Europe_Dublin():
+            LMT = ZoneOffset("LMT", timedelta(seconds=-1500), ZERO)
+            DMT = ZoneOffset("DMT", timedelta(seconds=-1521), ZERO)
+            IST_0 = ZoneOffset("IST", timedelta(seconds=2079), ONE_H)
+            GMT_0 = ZoneOffset("GMT", ZERO, ZERO)
+            BST = ZoneOffset("BST", ONE_H, ONE_H)
+            GMT_1 = ZoneOffset("GMT", ZERO, -ONE_H)
+            IST_1 = ZoneOffset("IST", ONE_H, ZERO)
+
+            return [
+                ZoneTransition(datetime(1880, 8, 2, 0), LMT, DMT),
+                ZoneTransition(datetime(1916, 5, 21, 2), DMT, IST_0),
+                ZoneTransition(datetime(1916, 10, 1, 3), IST_0, GMT_0),
+                ZoneTransition(datetime(1917, 4, 8, 2), GMT_0, BST),
+                ZoneTransition(datetime(2016, 3, 27, 1), GMT_1, IST_1),
+                ZoneTransition(datetime(2016, 10, 30, 2), IST_1, GMT_1),
+                ZoneTransition(datetime(2487, 3, 30, 1), GMT_1, IST_1),
+                ZoneTransition(datetime(2487, 10, 26, 2), IST_1, GMT_1),
+            ]
+
+        def _Europe_Lisbon():
+            WET = ZoneOffset("WET", ZERO, ZERO)
+            WEST = ZoneOffset("WEST", ONE_H, ONE_H)
+            CET = ZoneOffset("CET", ONE_H, ZERO)
+            CEST = ZoneOffset("CEST", timedelta(seconds=7200), ONE_H)
+
+            return [
+                ZoneTransition(datetime(1992, 3, 29, 1), WET, WEST),
+                ZoneTransition(datetime(1992, 9, 27, 2), WEST, CET),
+                ZoneTransition(datetime(1993, 3, 28, 2), CET, CEST),
+                ZoneTransition(datetime(1993, 9, 26, 3), CEST, CET),
+                ZoneTransition(datetime(1996, 3, 31, 2), CET, WEST),
+                ZoneTransition(datetime(1996, 10, 27, 2), WEST, WET),
+            ]
+
+        def _Europe_London():
+            LMT = ZoneOffset("LMT", timedelta(seconds=-75), ZERO)
+            GMT = ZoneOffset("GMT", ZERO, ZERO)
+            BST = ZoneOffset("BST", ONE_H, ONE_H)
+
+            return [
+                ZoneTransition(datetime(1847, 12, 1), LMT, GMT),
+                ZoneTransition(datetime(2005, 3, 27, 1), GMT, BST),
+                ZoneTransition(datetime(2005, 10, 30, 2), BST, GMT),
+                ZoneTransition(datetime(2043, 3, 29, 1), GMT, BST),
+                ZoneTransition(datetime(2043, 10, 25, 2), BST, GMT),
+            ]
+
+        def _Pacific_Kiritimati():
+            LMT = ZoneOffset("LMT", timedelta(seconds=-37760), ZERO)
+            N1040 = ZoneOffset("-1040", timedelta(seconds=-38400), ZERO)
+            N10 = ZoneOffset("-10", timedelta(seconds=-36000), ZERO)
+            P14 = ZoneOffset("+14", timedelta(seconds=50400), ZERO)
+
+            # This is literally every transition in Christmas Island history
+            return [
+                ZoneTransition(datetime(1901, 1, 1), LMT, N1040),
+                ZoneTransition(datetime(1979, 10, 1), N1040, N10),
+                # They skipped December 31, 1994
+                ZoneTransition(datetime(1994, 12, 31), N10, P14),
+            ]
+
+        cls._ZONEDUMP_DATA = {
+            "Africa/Abidjan": _Africa_Abidjan(),
+            "Africa/Casablanca": _Africa_Casablanca(),
+            "America/Los_Angeles": _America_Los_Angeles(),
+            "America/Santiago": _America_Santiago(),
+            "Australia/Sydney": _Australia_Sydney(),
+            "Asia/Tokyo": _Asia_Tokyo(),
+            "Europe/Dublin": _Europe_Dublin(),
+            "Europe/Lisbon": _Europe_Lisbon(),
+            "Europe/London": _Europe_London(),
+            "Pacific/Kiritimati": _Pacific_Kiritimati(),
+        }
+
+    _ZONEDUMP_DATA = None
+    _FIXED_OFFSET_ZONES = None
diff --git a/Lib/threading.py b/Lib/threading.py
index 813dae2..d96d99a 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -3,6 +3,7 @@
 import os as _os
 import sys as _sys
 import _thread
+import functools
 
 from time import monotonic as _time
 from _weakrefset import WeakSet
@@ -121,6 +122,11 @@
             hex(id(self))
         )
 
+    def _at_fork_reinit(self):
+        self._block._at_fork_reinit()
+        self._owner = None
+        self._count = 0
+
     def acquire(self, blocking=True, timeout=-1):
         """Acquire a lock, blocking or non-blocking.
 
@@ -243,6 +249,10 @@
             pass
         self._waiters = _deque()
 
+    def _at_fork_reinit(self):
+        self._lock._at_fork_reinit()
+        self._waiters.clear()
+
     def __enter__(self):
         return self._lock.__enter__()
 
@@ -261,7 +271,7 @@
     def _is_owned(self):
         # Return True if lock is owned by current_thread.
         # This method is called only if _lock doesn't have _is_owned().
-        if self._lock.acquire(0):
+        if self._lock.acquire(False):
             self._lock.release()
             return False
         else:
@@ -438,16 +448,19 @@
 
     __enter__ = acquire
 
-    def release(self):
-        """Release a semaphore, incrementing the internal counter by one.
+    def release(self, n=1):
+        """Release a semaphore, incrementing the internal counter by one or more.
 
         When the counter is zero on entry and another thread is waiting for it
         to become larger than zero again, wake up that thread.
 
         """
+        if n < 1:
+            raise ValueError('n must be one or more')
         with self._cond:
-            self._value += 1
-            self._cond.notify()
+            self._value += n
+            for i in range(n):
+                self._cond.notify()
 
     def __exit__(self, t, v, tb):
         self.release()
@@ -474,8 +487,8 @@
         Semaphore.__init__(self, value)
         self._initial_value = value
 
-    def release(self):
-        """Release a semaphore, incrementing the internal counter by one.
+    def release(self, n=1):
+        """Release a semaphore, incrementing the internal counter by one or more.
 
         When the counter is zero on entry and another thread is waiting for it
         to become larger than zero again, wake up that thread.
@@ -484,11 +497,14 @@
         raise a ValueError.
 
         """
+        if n < 1:
+            raise ValueError('n must be one or more')
         with self._cond:
-            if self._value >= self._initial_value:
+            if self._value + n > self._initial_value:
                 raise ValueError("Semaphore released too many times")
-            self._value += 1
-            self._cond.notify()
+            self._value += n
+            for i in range(n):
+                self._cond.notify()
 
 
 class Event:
@@ -506,9 +522,9 @@
         self._cond = Condition(Lock())
         self._flag = False
 
-    def _reset_internal_locks(self):
-        # private!  called by Thread._reset_internal_locks by _after_fork()
-        self._cond.__init__(Lock())
+    def _at_fork_reinit(self):
+        # Private method called by Thread._reset_internal_locks()
+        self._cond._at_fork_reinit()
 
     def is_set(self):
         """Return true if and only if the internal flag is true."""
@@ -808,9 +824,14 @@
     def _reset_internal_locks(self, is_alive):
         # private!  Called by _after_fork() to reset our internal locks as
         # they may be in an invalid state leading to a deadlock or crash.
-        self._started._reset_internal_locks()
+        self._started._at_fork_reinit()
         if is_alive:
-            self._set_tstate_lock()
+            # bpo-42350: If the fork happens when the thread is already stopped
+            # (ex: after threading._shutdown() has been called), _tstate_lock
+            # is None. Do nothing in this case.
+            if self._tstate_lock is not None:
+                self._tstate_lock._at_fork_reinit()
+                self._tstate_lock.acquire()
         else:
             # The thread isn't alive after fork: it doesn't have a tstate
             # anymore.
@@ -846,6 +867,7 @@
 
         if self._started.is_set():
             raise RuntimeError("threads can only be started once")
+
         with _active_limbo_lock:
             _limbo[self] = self
         try:
@@ -1082,16 +1104,6 @@
         self._wait_for_tstate_lock(False)
         return not self._is_stopped
 
-    def isAlive(self):
-        """Return whether the thread is alive.
-
-        This method is deprecated, use is_alive() instead.
-        """
-        import warnings
-        warnings.warn('isAlive() is deprecated, use is_alive() instead',
-                      DeprecationWarning, stacklevel=2)
-        return self.is_alive()
-
     @property
     def daemon(self):
         """A boolean value indicating whether this thread is a daemon thread.
@@ -1344,6 +1356,27 @@
     with _active_limbo_lock:
         return list(_active.values()) + list(_limbo.values())
 
+
+_threading_atexits = []
+_SHUTTING_DOWN = False
+
+def _register_atexit(func, *arg, **kwargs):
+    """CPython internal: register *func* to be called before joining threads.
+
+    The registered *func* is called with its arguments just before all
+    non-daemon threads are joined in `_shutdown()`. It provides a similar
+    purpose to `atexit.register()`, but its functions are called prior to
+    threading shutdown instead of interpreter shutdown.
+
+    For similarity to atexit, the registered functions are called in reverse.
+    """
+    if _SHUTTING_DOWN:
+        raise RuntimeError("can't register atexit after shutdown")
+
+    call = functools.partial(func, *arg, **kwargs)
+    _threading_atexits.append(call)
+
+
 from _thread import stack_size
 
 # Create the main thread object,
@@ -1365,6 +1398,8 @@
         # _shutdown() was already called
         return
 
+    global _SHUTTING_DOWN
+    _SHUTTING_DOWN = True
     # Main thread
     tlock = _main_thread._tstate_lock
     # The main thread isn't finished yet, so its thread state lock can't have
@@ -1374,6 +1409,11 @@
     tlock.release()
     _main_thread._stop()
 
+    # Call registered threading atexit functions before threads are joined.
+    # Order is reversed, similar to atexit.
+    for atexit_call in reversed(_threading_atexits):
+        atexit_call()
+
     # Join all non-deamon threads
     while True:
         with _shutdown_locks_lock:
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 9f0e2e5..2175afc 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -32,13 +32,13 @@
 
 import enum
 import sys
+import types
 
 import _tkinter # If this fails your Python may not be configured for Tk
 TclError = _tkinter.TclError
 from tkinter.constants import *
 import re
 
-
 wantobjects = 1
 
 TkVersion = float(_tkinter.TK_VERSION)
@@ -146,10 +146,10 @@
 
 class EventType(str, enum.Enum):
     KeyPress = '2'
-    Key = KeyPress,
+    Key = KeyPress
     KeyRelease = '3'
     ButtonPress = '4'
-    Button = ButtonPress,
+    Button = ButtonPress
     ButtonRelease = '5'
     Motion = '6'
     Enter = '7'
@@ -180,13 +180,12 @@
     Colormap = '32'
     ClientMessage = '33'    # undocumented
     Mapping = '34'          # undocumented
-    VirtualEvent = '35',    # undocumented
-    Activate = '36',
-    Deactivate = '37',
-    MouseWheel = '38',
+    VirtualEvent = '35'     # undocumented
+    Activate = '36'
+    Deactivate = '37'
+    MouseWheel = '38'
 
-    def __str__(self):
-        return self.name
+    __str__ = str.__str__
 
 
 class Event:
@@ -266,7 +265,7 @@
                 'num', 'delta', 'focus',
                 'x', 'y', 'width', 'height')
         return '<%s event%s>' % (
-            self.type,
+            getattr(self.type, 'name', self.type),
             ''.join(' %s=%s' % (k, attrs[k]) for k in keys if k in attrs)
         )
 
@@ -484,6 +483,8 @@
         Note: if the Variable's master matters to behavior
         also compare self._master == other._master
         """
+        if not isinstance(other, Variable):
+            return NotImplemented
         return self.__class__.__name__ == other.__class__.__name__ \
             and self._name == other._name
 
@@ -2239,7 +2240,7 @@
     _w = '.'
 
     def __init__(self, screenName=None, baseName=None, className='Tk',
-                 useTk=1, sync=0, use=None):
+                 useTk=True, sync=False, use=None):
         """Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will
         be created. BASENAME will be used for the identification of the profile file (see
         readprofile).
@@ -2257,7 +2258,7 @@
             baseName, ext = os.path.splitext(baseName)
             if ext not in ('.py', '.pyc'):
                 baseName = baseName + ext
-        interactive = 0
+        interactive = False
         self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
         if useTk:
             self._loadtk()
@@ -2359,7 +2360,7 @@
 # copied into the Pack, Place or Grid class.
 
 
-def Tcl(screenName=None, baseName=None, className='Tk', useTk=0):
+def Tcl(screenName=None, baseName=None, className='Tk', useTk=False):
     return Tk(screenName, baseName, className, useTk)
 
 
@@ -3963,7 +3964,7 @@
         if 'command' in kwargs:
             del kwargs['command']
         if kwargs:
-            raise TclError('unknown option -'+kwargs.keys()[0])
+            raise TclError('unknown option -'+next(iter(kwargs)))
         menu.add_command(label=value,
                  command=_setit(variable, value, callback))
         for v in values:
@@ -4569,5 +4570,9 @@
     root.mainloop()
 
 
+__all__ = [name for name, obj in globals().items()
+           if not name.startswith('_') and not isinstance(obj, types.ModuleType)
+           and name not in {'wantobjects'}]
+
 if __name__ == '__main__':
     _test()
diff --git a/Lib/tkinter/colorchooser.py b/Lib/tkinter/colorchooser.py
index 9dc9671..3cfc06f 100644
--- a/Lib/tkinter/colorchooser.py
+++ b/Lib/tkinter/colorchooser.py
@@ -21,6 +21,8 @@
 
 from tkinter.commondialog import Dialog
 
+__all__ = ["Chooser", "askcolor"]
+
 
 #
 # color chooser class
diff --git a/Lib/tkinter/commondialog.py b/Lib/tkinter/commondialog.py
index c4ec010..e56b5ba 100644
--- a/Lib/tkinter/commondialog.py
+++ b/Lib/tkinter/commondialog.py
@@ -8,15 +8,17 @@
 # written by Fredrik Lundh, May 1997
 #
 
-from tkinter import *
+__all__ = ["Dialog"]
+
+from tkinter import Frame
 
 
 class Dialog:
 
-    command  = None
+    command = None
 
     def __init__(self, master=None, **options):
-        self.master  = master
+        self.master = master
         self.options = options
         if not master and options.get('parent'):
             self.master = options['parent']
diff --git a/Lib/tkinter/dialog.py b/Lib/tkinter/dialog.py
index cb463f7..8ae2140 100644
--- a/Lib/tkinter/dialog.py
+++ b/Lib/tkinter/dialog.py
@@ -1,7 +1,8 @@
 # dialog.py -- Tkinter interface to the tk_dialog script.
 
-from tkinter import *
-from tkinter import _cnfmerge
+from tkinter import _cnfmerge, Widget, TclError, Button, Pack
+
+__all__ = ["Dialog"]
 
 DIALOG_ICON = 'questhead'
 
diff --git a/Lib/tkinter/dnd.py b/Lib/tkinter/dnd.py
index 4de2331..3120ff3 100644
--- a/Lib/tkinter/dnd.py
+++ b/Lib/tkinter/dnd.py
@@ -99,9 +99,10 @@
 
 """
 
-
 import tkinter
 
+__all__ = ["dnd_start", "DndHandler"]
+
 
 # The factory function
 
diff --git a/Lib/tkinter/filedialog.py b/Lib/tkinter/filedialog.py
index 88d2347..3ed93eb 100644
--- a/Lib/tkinter/filedialog.py
+++ b/Lib/tkinter/filedialog.py
@@ -11,14 +11,20 @@
 directory dialogue available in Tk 8.3 and newer.
 These interfaces were written by Fredrik Lundh, May 1997.
 """
+__all__ = ["FileDialog", "LoadFileDialog", "SaveFileDialog",
+           "Open", "SaveAs", "Directory",
+           "askopenfilename", "asksaveasfilename", "askopenfilenames",
+           "askopenfile", "askopenfiles", "asksaveasfile", "askdirectory"]
 
-from tkinter import *
+import fnmatch
+import os
+from tkinter import (
+    Frame, LEFT, YES, BOTTOM, Entry, TOP, Button, Tk, X,
+    Toplevel, RIGHT, Y, END, Listbox, BOTH, Scrollbar,
+)
 from tkinter.dialog import Dialog
 from tkinter import commondialog
 
-import os
-import fnmatch
-
 
 dialogstates = {}
 
diff --git a/Lib/tkinter/font.py b/Lib/tkinter/font.py
index 1364257..15ad7ab 100644
--- a/Lib/tkinter/font.py
+++ b/Lib/tkinter/font.py
@@ -3,11 +3,12 @@
 # written by Fredrik Lundh, February 1998
 #
 
-__version__ = "0.9"
-
 import itertools
 import tkinter
 
+__version__ = "0.9"
+__all__ = ["NORMAL", "ROMAN", "BOLD", "ITALIC",
+           "nametofont", "Font", "families", "names"]
 
 # weight/slant
 NORMAL = "normal"
@@ -100,7 +101,9 @@
         return self.name
 
     def __eq__(self, other):
-        return isinstance(other, Font) and self.name == other.name
+        if not isinstance(other, Font):
+            return NotImplemented
+        return self.name == other.name
 
     def __getitem__(self, key):
         return self.cget(key)
diff --git a/Lib/tkinter/messagebox.py b/Lib/tkinter/messagebox.py
index 4a711fa..5f0343b 100644
--- a/Lib/tkinter/messagebox.py
+++ b/Lib/tkinter/messagebox.py
@@ -24,6 +24,10 @@
 
 from tkinter.commondialog import Dialog
 
+__all__ = ["showinfo", "showwarning", "showerror",
+           "askquestion", "askokcancel", "askyesno",
+           "askyesnocancel", "askretrycancel"]
+
 #
 # constants
 
diff --git a/Lib/tkinter/scrolledtext.py b/Lib/tkinter/scrolledtext.py
index 749a06a6..4f9a881 100644
--- a/Lib/tkinter/scrolledtext.py
+++ b/Lib/tkinter/scrolledtext.py
@@ -11,11 +11,11 @@
 Place methods are redirected to the Frame widget however.
 """
 
-__all__ = ['ScrolledText']
-
 from tkinter import Frame, Text, Scrollbar, Pack, Grid, Place
 from tkinter.constants import RIGHT, LEFT, Y, BOTH
 
+__all__ = ['ScrolledText']
+
 
 class ScrolledText(Text):
     def __init__(self, master=None, **kw):
diff --git a/Lib/tkinter/test/test_tkinter/test_font.py b/Lib/tkinter/test/test_tkinter/test_font.py
index 97cd87c..a021ea3 100644
--- a/Lib/tkinter/test/test_tkinter/test_font.py
+++ b/Lib/tkinter/test/test_tkinter/test_font.py
@@ -1,7 +1,7 @@
 import unittest
 import tkinter
 from tkinter import font
-from test.support import requires, run_unittest, gc_collect
+from test.support import requires, run_unittest, gc_collect, ALWAYS_EQ
 from tkinter.test.support import AbstractTkTest
 
 requires('gui')
@@ -70,6 +70,7 @@
         self.assertEqual(font1, font2)
         self.assertNotEqual(font1, font1.copy())
         self.assertNotEqual(font1, 0)
+        self.assertEqual(font1, ALWAYS_EQ)
 
     def test_measure(self):
         self.assertIsInstance(self.font.measure('abc'), int)
diff --git a/Lib/tkinter/test/test_tkinter/test_misc.py b/Lib/tkinter/test/test_tkinter/test_misc.py
index 236cae0..b8eea25 100644
--- a/Lib/tkinter/test/test_tkinter/test_misc.py
+++ b/Lib/tkinter/test/test_tkinter/test_misc.py
@@ -7,6 +7,20 @@
 
 class MiscTest(AbstractTkTest, unittest.TestCase):
 
+    def test_all(self):
+        self.assertIn("Widget", tkinter.__all__)
+        # Check that variables from tkinter.constants are also in tkinter.__all__
+        self.assertIn("CASCADE", tkinter.__all__)
+        self.assertIsNotNone(tkinter.CASCADE)
+        # Check that sys, re, and constants are not in tkinter.__all__
+        self.assertNotIn("re", tkinter.__all__)
+        self.assertNotIn("sys", tkinter.__all__)
+        self.assertNotIn("constants", tkinter.__all__)
+        # Check that an underscored functions is not in tkinter.__all__
+        self.assertNotIn("_tkerror", tkinter.__all__)
+        # Check that wantobjects is not in tkinter.__all__
+        self.assertNotIn("wantobjects", tkinter.__all__)
+
     def test_repr(self):
         t = tkinter.Toplevel(self.root, name='top')
         f = tkinter.Frame(t, name='child')
@@ -178,6 +192,54 @@
         with self.assertRaises(tkinter.TclError):
             root.clipboard_get()
 
+    def test_event_repr_defaults(self):
+        e = tkinter.Event()
+        e.serial = 12345
+        e.num = '??'
+        e.height = '??'
+        e.keycode = '??'
+        e.state = 0
+        e.time = 123456789
+        e.width = '??'
+        e.x = '??'
+        e.y = '??'
+        e.char = ''
+        e.keysym = '??'
+        e.keysym_num = '??'
+        e.type = '100'
+        e.widget = '??'
+        e.x_root = '??'
+        e.y_root = '??'
+        e.delta = 0
+        self.assertEqual(repr(e), '<100 event>')
+
+    def test_event_repr(self):
+        e = tkinter.Event()
+        e.serial = 12345
+        e.num = 3
+        e.focus = True
+        e.height = 200
+        e.keycode = 65
+        e.state = 0x30405
+        e.time = 123456789
+        e.width = 300
+        e.x = 10
+        e.y = 20
+        e.char = 'A'
+        e.send_event = True
+        e.keysym = 'Key-A'
+        e.keysym_num = ord('A')
+        e.type = tkinter.EventType.Configure
+        e.widget = '.text'
+        e.x_root = 1010
+        e.y_root = 1020
+        e.delta = -1
+        self.assertEqual(repr(e),
+                         "<Configure event send_event=True"
+                         " state=Shift|Control|Button3|0x30000"
+                         " keysym=Key-A keycode=65 char='A'"
+                         " num=3 delta=-1 focus=True"
+                         " x=10 y=20 width=300 height=200>")
 
 tests_gui = (MiscTest, )
 
diff --git a/Lib/tkinter/test/test_tkinter/test_variables.py b/Lib/tkinter/test/test_tkinter/test_variables.py
index 2eb1e12..08b7ded 100644
--- a/Lib/tkinter/test/test_tkinter/test_variables.py
+++ b/Lib/tkinter/test/test_tkinter/test_variables.py
@@ -2,6 +2,7 @@
 import gc
 from tkinter import (Variable, StringVar, IntVar, DoubleVar, BooleanVar, Tcl,
                      TclError)
+from test.support import ALWAYS_EQ
 
 
 class Var(Variable):
@@ -59,11 +60,17 @@
         # values doesn't matter, only class and name are checked
         v1 = Variable(self.root, name="abc")
         v2 = Variable(self.root, name="abc")
+        self.assertIsNot(v1, v2)
         self.assertEqual(v1, v2)
 
-        v3 = Variable(self.root, name="abc")
-        v4 = StringVar(self.root, name="abc")
-        self.assertNotEqual(v3, v4)
+        v3 = StringVar(self.root, name="abc")
+        self.assertNotEqual(v1, v3)
+
+        V = type('Variable', (), {})
+        self.assertNotEqual(v1, V())
+
+        self.assertNotEqual(v1, object())
+        self.assertEqual(v1, ALWAYS_EQ)
 
     def test_invalid_name(self):
         with self.assertRaises(TypeError):
diff --git a/Lib/tkinter/test/test_tkinter/test_widgets.py b/Lib/tkinter/test/test_tkinter/test_widgets.py
index 16e9d93..b6f792d 100644
--- a/Lib/tkinter/test/test_tkinter/test_widgets.py
+++ b/Lib/tkinter/test/test_tkinter/test_widgets.py
@@ -307,6 +307,10 @@
     def create(self, default='b', values=('a', 'b', 'c'), **kwargs):
         return tkinter.OptionMenu(self.root, None, default, *values, **kwargs)
 
+    def test_bad_kwarg(self):
+        with self.assertRaisesRegex(TclError, r"^unknown option -image$"):
+            tkinter.OptionMenu(self.root, None, 'b', image='')
+
 
 @add_standard_options(IntegerSizeTests, StandardOptionsTests)
 class EntryTest(AbstractWidgetTest, unittest.TestCase):
@@ -936,7 +940,8 @@
 
     def test_from(self):
         widget = self.create()
-        self.checkFloatParam(widget, 'from', 100, 14.9, 15.1, conv=float_round)
+        conv = False if get_tk_patchlevel() >= (8, 6, 10) else float_round
+        self.checkFloatParam(widget, 'from', 100, 14.9, 15.1, conv=conv)
 
     def test_label(self):
         widget = self.create()
diff --git a/Lib/tkinter/test/test_ttk/test_extensions.py b/Lib/tkinter/test/test_ttk/test_extensions.py
index a45f882..6937ba1 100644
--- a/Lib/tkinter/test/test_ttk/test_extensions.py
+++ b/Lib/tkinter/test/test_ttk/test_extensions.py
@@ -114,7 +114,6 @@
     def test_horizontal_range(self):
         lscale = ttk.LabeledScale(self.root, from_=0, to=10)
         lscale.pack()
-        lscale.wait_visibility()
         lscale.update()
 
         linfo_1 = lscale.label.place_info()
@@ -144,7 +143,6 @@
     def test_variable_change(self):
         x = ttk.LabeledScale(self.root)
         x.pack()
-        x.wait_visibility()
         x.update()
 
         curr_xcoord = x.scale.coords()[0]
@@ -187,7 +185,6 @@
     def test_resize(self):
         x = ttk.LabeledScale(self.root)
         x.pack(expand=True, fill='both')
-        x.wait_visibility()
         x.update()
 
         width, height = x.master.winfo_width(), x.master.winfo_height()
@@ -268,7 +265,6 @@
 
         # check that variable is updated correctly
         optmenu.pack()
-        optmenu.wait_visibility()
         optmenu['menu'].invoke(0)
         self.assertEqual(optmenu._variable.get(), items[0])
 
@@ -299,9 +295,7 @@
         textvar2 = tkinter.StringVar(self.root)
         optmenu2 = ttk.OptionMenu(self.root, textvar2, default, *items)
         optmenu.pack()
-        optmenu.wait_visibility()
         optmenu2.pack()
-        optmenu2.wait_visibility()
         optmenu['menu'].invoke(1)
         optmenu2['menu'].invoke(2)
         optmenu_stringvar_name = optmenu['menu'].entrycget(0, 'variable')
diff --git a/Lib/tkinter/test/test_ttk/test_functions.py b/Lib/tkinter/test/test_ttk/test_functions.py
index f8e69a9..5c23d6f 100644
--- a/Lib/tkinter/test/test_ttk/test_functions.py
+++ b/Lib/tkinter/test/test_ttk/test_functions.py
@@ -137,6 +137,9 @@
         result = ttk._format_mapdict(opts)
         self.assertEqual(result, ('-üñíćódè', 'á vãl'))
 
+        self.assertEqual(ttk._format_mapdict({'opt': [('value',)]}),
+                         ('-opt', '{} value'))
+
         # empty states
         valid = {'opt': [('', '', 'hi')]}
         self.assertEqual(ttk._format_mapdict(valid), ('-opt', '{ } hi'))
@@ -159,10 +162,6 @@
         opts = {'a': None}
         self.assertRaises(TypeError, ttk._format_mapdict, opts)
 
-        # items in the value must have size >= 2
-        self.assertRaises(IndexError, ttk._format_mapdict,
-            {'a': [('invalid', )]})
-
 
     def test_format_elemcreate(self):
         self.assertTrue(ttk._format_elemcreate(None), (None, ()))
diff --git a/Lib/tkinter/test/test_ttk/test_style.py b/Lib/tkinter/test/test_ttk/test_style.py
index 3537536..38d70d7 100644
--- a/Lib/tkinter/test/test_ttk/test_style.py
+++ b/Lib/tkinter/test/test_ttk/test_style.py
@@ -1,11 +1,23 @@
 import unittest
+import sys
 import tkinter
 from tkinter import ttk
+from test import support
 from test.support import requires, run_unittest
 from tkinter.test.support import AbstractTkTest
 
 requires('gui')
 
+CLASS_NAMES = [
+    '.', 'ComboboxPopdownFrame', 'Heading',
+    'Horizontal.TProgressbar', 'Horizontal.TScale', 'Item', 'Sash',
+    'TButton', 'TCheckbutton', 'TCombobox', 'TEntry',
+    'TLabelframe', 'TLabelframe.Label', 'TMenubutton',
+    'TNotebook', 'TNotebook.Tab', 'Toolbutton', 'TProgressbar',
+    'TRadiobutton', 'Treeview', 'TScale', 'TScrollbar', 'TSpinbox',
+    'Vertical.TProgressbar', 'Vertical.TScale'
+]
+
 class StyleTest(AbstractTkTest, unittest.TestCase):
 
     def setUp(self):
@@ -23,11 +35,36 @@
 
     def test_map(self):
         style = self.style
-        style.map('TButton', background=[('active', 'background', 'blue')])
-        self.assertEqual(style.map('TButton', 'background'),
-            [('active', 'background', 'blue')] if self.wantobjects else
-            [('active background', 'blue')])
-        self.assertIsInstance(style.map('TButton'), dict)
+
+        # Single state
+        for states in ['active'], [('active',)]:
+            with self.subTest(states=states):
+                style.map('TButton', background=[(*states, 'white')])
+                expected = [('active', 'white')]
+                self.assertEqual(style.map('TButton', 'background'), expected)
+                m = style.map('TButton')
+                self.assertIsInstance(m, dict)
+                self.assertEqual(m['background'], expected)
+
+        # Multiple states
+        for states in ['pressed', '!disabled'], ['pressed !disabled'], [('pressed', '!disabled')]:
+            with self.subTest(states=states):
+                style.map('TButton', background=[(*states, 'black')])
+                expected = [('pressed', '!disabled', 'black')]
+                self.assertEqual(style.map('TButton', 'background'), expected)
+                m = style.map('TButton')
+                self.assertIsInstance(m, dict)
+                self.assertEqual(m['background'], expected)
+
+        # Default state
+        for states in [], [''], [()]:
+            with self.subTest(states=states):
+                style.map('TButton', background=[(*states, 'grey')])
+                expected = [('grey',)]
+                self.assertEqual(style.map('TButton', 'background'), expected)
+                m = style.map('TButton')
+                self.assertIsInstance(m, dict)
+                self.assertEqual(m['background'], expected)
 
 
     def test_lookup(self):
@@ -86,6 +123,58 @@
         self.style.theme_use(curr_theme)
 
 
+    def test_configure_custom_copy(self):
+        style = self.style
+
+        curr_theme = self.style.theme_use()
+        self.addCleanup(self.style.theme_use, curr_theme)
+        for theme in self.style.theme_names():
+            self.style.theme_use(theme)
+            for name in CLASS_NAMES:
+                default = style.configure(name)
+                if not default:
+                    continue
+                with self.subTest(theme=theme, name=name):
+                    if support.verbose >= 2:
+                        print('configure', theme, name, default)
+                    if (theme in ('vista', 'xpnative')
+                            and sys.getwindowsversion()[:2] == (6, 1)):
+                        # Fails on the Windows 7 buildbot
+                        continue
+                    newname = f'C.{name}'
+                    self.assertEqual(style.configure(newname), None)
+                    style.configure(newname, **default)
+                    self.assertEqual(style.configure(newname), default)
+                    for key, value in default.items():
+                        self.assertEqual(style.configure(newname, key), value)
+
+
+    def test_map_custom_copy(self):
+        style = self.style
+
+        curr_theme = self.style.theme_use()
+        self.addCleanup(self.style.theme_use, curr_theme)
+        for theme in self.style.theme_names():
+            self.style.theme_use(theme)
+            for name in CLASS_NAMES:
+                default = style.map(name)
+                if not default:
+                    continue
+                with self.subTest(theme=theme, name=name):
+                    if support.verbose >= 2:
+                        print('map', theme, name, default)
+                    if (theme in ('vista', 'xpnative')
+                            and sys.getwindowsversion()[:2] == (6, 1)):
+                        # Fails on the Windows 7 buildbot
+                        continue
+                    newname = f'C.{name}'
+                    self.assertEqual(style.map(newname), {})
+                    style.map(newname, **default)
+                    self.assertEqual(style.map(newname), default)
+                    for key, value in default.items():
+                        self.assertEqual(style.map(newname, key), value)
+
+
 tests_gui = (StyleTest, )
 
 if __name__ == "__main__":
diff --git a/Lib/tkinter/test/test_ttk/test_widgets.py b/Lib/tkinter/test/test_ttk/test_widgets.py
index 2598bc6..157ef0e 100644
--- a/Lib/tkinter/test/test_ttk/test_widgets.py
+++ b/Lib/tkinter/test/test_ttk/test_widgets.py
@@ -60,11 +60,10 @@
         super().setUp()
         self.widget = ttk.Button(self.root, width=0, text="Text")
         self.widget.pack()
-        self.widget.wait_visibility()
 
 
     def test_identify(self):
-        self.widget.update_idletasks()
+        self.widget.update()
         self.assertEqual(self.widget.identify(
             int(self.widget.winfo_width() / 2),
             int(self.widget.winfo_height() / 2)
@@ -326,8 +325,7 @@
 
     def test_identify(self):
         self.entry.pack()
-        self.entry.wait_visibility()
-        self.entry.update_idletasks()
+        self.entry.update()
 
         # bpo-27313: macOS Cocoa widget differs from X, allow either
         if sys.platform == 'darwin':
@@ -437,11 +435,12 @@
 
     def _show_drop_down_listbox(self):
         width = self.combo.winfo_width()
-        self.combo.event_generate('<ButtonPress-1>', x=width - 5, y=5)
-        self.combo.event_generate('<ButtonRelease-1>', x=width - 5, y=5)
+        x, y = width - 5, 5
+        self.assertRegex(self.combo.identify(x, y), r'.*downarrow\Z')
+        self.combo.event_generate('<ButtonPress-1>', x=x, y=y)
+        self.combo.event_generate('<ButtonRelease-1>', x=x, y=y)
         self.combo.update_idletasks()
 
-
     def test_virtual_event(self):
         success = []
 
@@ -449,7 +448,7 @@
         self.combo.bind('<<ComboboxSelected>>',
             lambda evt: success.append(True))
         self.combo.pack()
-        self.combo.wait_visibility()
+        self.combo.update()
 
         height = self.combo.winfo_height()
         self._show_drop_down_listbox()
@@ -465,7 +464,7 @@
 
         self.combo['postcommand'] = lambda: success.append(True)
         self.combo.pack()
-        self.combo.wait_visibility()
+        self.combo.update()
 
         self._show_drop_down_listbox()
         self.assertTrue(success)
@@ -665,7 +664,6 @@
         self.assertRaises(tkinter.TclError, self.paned.sashpos, 1)
 
         self.paned.pack(expand=True, fill='both')
-        self.paned.wait_visibility()
 
         curr_pos = self.paned.sashpos(0)
         self.paned.sashpos(0, 1000)
@@ -933,7 +931,7 @@
         self.nb.add(self.child1, text='a')
 
         self.nb.pack()
-        self.nb.wait_visibility()
+        self.nb.update()
         if sys.platform == 'darwin':
             tb_idx = "@20,5"
         else:
@@ -1041,7 +1039,7 @@
 
     def test_select(self):
         self.nb.pack()
-        self.nb.wait_visibility()
+        self.nb.update()
 
         success = []
         tab_changed = []
@@ -1084,10 +1082,11 @@
 
     def test_traversal(self):
         self.nb.pack()
-        self.nb.wait_visibility()
+        self.nb.update()
 
         self.nb.select(0)
 
+        self.assertEqual(self.nb.identify(5, 5), 'focus')
         simulate_mouse_click(self.nb, 5, 5)
         self.nb.focus_force()
         self.nb.event_generate('<Control-Tab>')
@@ -1102,6 +1101,7 @@
         self.nb.tab(self.child1, text='a', underline=0)
         self.nb.enable_traversal()
         self.nb.focus_force()
+        self.assertEqual(self.nb.identify(5, 5), 'focus')
         simulate_mouse_click(self.nb, 5, 5)
         if sys.platform == 'darwin':
             self.nb.event_generate('<Option-a>')
@@ -1132,6 +1132,7 @@
         height = self.spin.winfo_height()
         x = width - 5
         y = height//2 - 5
+        self.assertRegex(self.spin.identify(x, y), r'.*uparrow\Z')
         self.spin.event_generate('<ButtonPress-1>', x=x, y=y)
         self.spin.event_generate('<ButtonRelease-1>', x=x, y=y)
         self.spin.update_idletasks()
@@ -1141,6 +1142,7 @@
         height = self.spin.winfo_height()
         x = width - 5
         y = height//2 + 4
+        self.assertRegex(self.spin.identify(x, y), r'.*downarrow\Z')
         self.spin.event_generate('<ButtonPress-1>', x=x, y=y)
         self.spin.event_generate('<ButtonRelease-1>', x=x, y=y)
         self.spin.update_idletasks()
@@ -1342,7 +1344,6 @@
     def test_bbox(self):
         self.tv.pack()
         self.assertEqual(self.tv.bbox(''), '')
-        self.tv.wait_visibility()
         self.tv.update()
 
         item_id = self.tv.insert('', 'end')
@@ -1530,13 +1531,15 @@
 
     def test_heading_callback(self):
         def simulate_heading_click(x, y):
+            if tcl_version >= (8, 6):
+                self.assertEqual(self.tv.identify_column(x), '#0')
+                self.assertEqual(self.tv.identify_region(x, y), 'heading')
             simulate_mouse_click(self.tv, x, y)
             self.tv.update()
 
         success = [] # no success for now
 
         self.tv.pack()
-        self.tv.wait_visibility()
         self.tv.heading('#0', command=lambda: success.append(True))
         self.tv.column('#0', width=100)
         self.tv.update()
@@ -1784,7 +1787,6 @@
             lambda evt: events.append(2))
 
         self.tv.pack()
-        self.tv.wait_visibility()
         self.tv.update()
 
         pos_y = set()
diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py
index c7c71cd..968fd54 100644
--- a/Lib/tkinter/ttk.py
+++ b/Lib/tkinter/ttk.py
@@ -81,8 +81,6 @@
     #   ['active selected', 'grey', 'focus', [1, 2, 3, 4]]
     opt_val = []
     for *state, val in items:
-        # hacks for backward compatibility
-        state[0] # raise IndexError if empty
         if len(state) == 1:
             # if it is empty (something that evaluates to False), then
             # format it to Tcl code to denote the "normal" state
@@ -243,19 +241,22 @@
 def _list_from_statespec(stuple):
     """Construct a list from the given statespec tuple according to the
     accepted statespec accepted by _format_mapdict."""
-    nval = []
-    for val in stuple:
-        typename = getattr(val, 'typename', None)
-        if typename is None:
-            nval.append(val)
-        else: # this is a Tcl object
+    if isinstance(stuple, str):
+        return stuple
+    result = []
+    it = iter(stuple)
+    for state, val in zip(it, it):
+        if hasattr(state, 'typename'):  # this is a Tcl object
+            state = str(state).split()
+        elif isinstance(state, str):
+            state = state.split()
+        elif not isinstance(state, (tuple, list)):
+            state = (state,)
+        if hasattr(val, 'typename'):
             val = str(val)
-            if typename == 'StateSpec':
-                val = val.split()
-            nval.append(val)
+        result.append((*state, val))
 
-    it = iter(nval)
-    return [_flatten(spec) for spec in zip(it, it)]
+    return result
 
 def _list_from_layouttuple(tk, ltuple):
     """Construct a list from the tuple returned by ttk::layout, this is
@@ -395,13 +396,12 @@
         or something else of your preference. A statespec is compound of
         one or more states and then a value."""
         if query_opt is not None:
-            return _list_from_statespec(self.tk.splitlist(
-                self.tk.call(self._name, "map", style, '-%s' % query_opt)))
+            result = self.tk.call(self._name, "map", style, '-%s' % query_opt)
+            return _list_from_statespec(self.tk.splitlist(result))
 
-        return _splitdict(
-            self.tk,
-            self.tk.call(self._name, "map", style, *_format_mapdict(kw)),
-            conv=_tclobj_to_py)
+        result = self.tk.call(self._name, "map", style, *_format_mapdict(kw))
+        return {k: _list_from_statespec(self.tk.splitlist(v))
+                for k, v in _splitdict(self.tk, result).items()}
 
 
     def lookup(self, style, option, state=None, default=None):
diff --git a/Lib/trace.py b/Lib/trace.py
index 89f17d4..c505d8b 100755
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -453,22 +453,7 @@
                 sys.settrace(None)
                 threading.settrace(None)
 
-    def runfunc(*args, **kw):
-        if len(args) >= 2:
-            self, func, *args = args
-        elif not args:
-            raise TypeError("descriptor 'runfunc' of 'Trace' object "
-                            "needs an argument")
-        elif 'func' in kw:
-            func = kw.pop('func')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'func' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('runfunc expected at least 1 positional argument, '
-                            'got %d' % (len(args)-1))
-
+    def runfunc(self, func, /, *args, **kw):
         result = None
         if not self.donothing:
             sys.settrace(self.globaltrace)
@@ -478,7 +463,6 @@
             if not self.donothing:
                 sys.settrace(None)
         return result
-    runfunc.__text_signature__ = '($self, func, /, *args, **kw)'
 
     def file_module_function_of(self, frame):
         code = frame.f_code
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 5ef3be7..fb34de9 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -500,7 +500,6 @@
                 _seen=_seen)
         else:
             context = None
-        self.exc_traceback = exc_traceback
         self.__cause__ = cause
         self.__context__ = context
         self.__suppress_context__ = \
@@ -538,7 +537,9 @@
             self.__cause__._load_lines()
 
     def __eq__(self, other):
-        return self.__dict__ == other.__dict__
+        if isinstance(other, TracebackException):
+            return self.__dict__ == other.__dict__
+        return NotImplemented
 
     def __str__(self):
         return self._str
@@ -567,23 +568,30 @@
 
         if not issubclass(self.exc_type, SyntaxError):
             yield _format_final_exc_line(stype, self._str)
-            return
+        else:
+            yield from self._format_syntax_error(stype)
 
-        # It was a syntax error; show exactly where the problem was found.
+    def _format_syntax_error(self, stype):
+        """Format SyntaxError exceptions (internal helper)."""
+        # Show exactly where the problem was found.
         filename = self.filename or "<string>"
         lineno = str(self.lineno) or '?'
         yield '  File "{}", line {}\n'.format(filename, lineno)
 
-        badline = self.text
-        offset = self.offset
-        if badline is not None:
-            yield '    {}\n'.format(badline.strip())
-            if offset is not None:
-                caretspace = badline.rstrip('\n')
-                offset = min(len(caretspace), offset) - 1
-                caretspace = caretspace[:offset].lstrip()
+        text = self.text
+        if text is not None:
+            # text  = "   foo\n"
+            # rtext = "   foo"
+            # ltext =    "foo"
+            rtext = text.rstrip('\n')
+            ltext = rtext.lstrip(' \n\f')
+            spaces = len(rtext) - len(ltext)
+            yield '    {}\n'.format(ltext)
+            # Convert 1-based column offset to 0-based index into stripped text
+            caret = (self.offset or 0) - 1 - spaces
+            if caret >= 0:
                 # non-space whitespace (likes tabs) must be kept for alignment
-                caretspace = ((c.isspace() and c or ' ') for c in caretspace)
+                caretspace = ((c if c.isspace() else ' ') for c in ltext[:caret])
                 yield '    {}^\n'.format(''.join(caretspace))
         msg = self.msg or "<no detail available>"
         yield "{}: {}\n".format(stype, msg)
@@ -608,7 +616,7 @@
                 not self.__suppress_context__):
                 yield from self.__context__.format(chain=chain)
                 yield _context_message
-        if self.exc_traceback is not None:
+        if self.stack:
             yield 'Traceback (most recent call last):\n'
-        yield from self.stack.format()
+            yield from self.stack.format()
         yield from self.format_exception_only()
diff --git a/Lib/tracemalloc.py b/Lib/tracemalloc.py
index 2c1ac3b..69b4170 100644
--- a/Lib/tracemalloc.py
+++ b/Lib/tracemalloc.py
@@ -43,6 +43,8 @@
         return hash((self.traceback, self.size, self.count))
 
     def __eq__(self, other):
+        if not isinstance(other, Statistic):
+            return NotImplemented
         return (self.traceback == other.traceback
                 and self.size == other.size
                 and self.count == other.count)
@@ -84,6 +86,8 @@
                      self.count, self.count_diff))
 
     def __eq__(self, other):
+        if not isinstance(other, StatisticDiff):
+            return NotImplemented
         return (self.traceback == other.traceback
                 and self.size == other.size
                 and self.size_diff == other.size_diff
@@ -153,9 +157,13 @@
         return self._frame[1]
 
     def __eq__(self, other):
+        if not isinstance(other, Frame):
+            return NotImplemented
         return (self._frame == other._frame)
 
     def __lt__(self, other):
+        if not isinstance(other, Frame):
+            return NotImplemented
         return (self._frame < other._frame)
 
     def __hash__(self):
@@ -174,15 +182,20 @@
     Sequence of Frame instances sorted from the oldest frame
     to the most recent frame.
     """
-    __slots__ = ("_frames",)
+    __slots__ = ("_frames", '_total_nframe')
 
-    def __init__(self, frames):
+    def __init__(self, frames, total_nframe=None):
         Sequence.__init__(self)
         # frames is a tuple of frame tuples: see Frame constructor for the
         # format of a frame tuple; it is reversed, because _tracemalloc
         # returns frames sorted from most recent to oldest, but the
         # Python API expects oldest to most recent
         self._frames = tuple(reversed(frames))
+        self._total_nframe = total_nframe
+
+    @property
+    def total_nframe(self):
+        return self._total_nframe
 
     def __len__(self):
         return len(self._frames)
@@ -200,16 +213,25 @@
         return hash(self._frames)
 
     def __eq__(self, other):
+        if not isinstance(other, Traceback):
+            return NotImplemented
         return (self._frames == other._frames)
 
     def __lt__(self, other):
+        if not isinstance(other, Traceback):
+            return NotImplemented
         return (self._frames < other._frames)
 
     def __str__(self):
         return str(self[0])
 
     def __repr__(self):
-        return "<Traceback %r>" % (tuple(self),)
+        s = "<Traceback %r" % tuple(self)
+        if self._total_nframe is None:
+            s += ">"
+        else:
+            s += f" total_nframe={self.total_nframe}>"
+        return s
 
     def format(self, limit=None, most_recent_first=False):
         lines = []
@@ -268,9 +290,11 @@
 
     @property
     def traceback(self):
-        return Traceback(self._trace[2])
+        return Traceback(*self._trace[2:])
 
     def __eq__(self, other):
+        if not isinstance(other, Trace):
+            return NotImplemented
         return (self._trace == other._trace)
 
     def __hash__(self):
@@ -303,6 +327,8 @@
         return trace._trace in self._traces
 
     def __eq__(self, other):
+        if not isinstance(other, _Traces):
+            return NotImplemented
         return (self._traces == other._traces)
 
     def __repr__(self):
@@ -362,7 +388,7 @@
             return self._match_frame(filename, lineno)
 
     def _match(self, trace):
-        domain, size, traceback = trace
+        domain, size, traceback, total_nframe = trace
         res = self._match_traceback(traceback)
         if self.domain is not None:
             if self.inclusive:
@@ -382,7 +408,7 @@
         return self._domain
 
     def _match(self, trace):
-        domain, size, traceback = trace
+        domain, size, traceback, total_nframe = trace
         return (domain == self.domain) ^ (not self.inclusive)
 
 
@@ -459,7 +485,7 @@
         tracebacks = {}
         if not cumulative:
             for trace in self.traces._traces:
-                domain, size, trace_traceback = trace
+                domain, size, trace_traceback, total_nframe = trace
                 try:
                     traceback = tracebacks[trace_traceback]
                 except KeyError:
@@ -480,7 +506,7 @@
         else:
             # cumulative statistics
             for trace in self.traces._traces:
-                domain, size, trace_traceback = trace
+                domain, size, trace_traceback, total_nframe = trace
                 for frame in trace_traceback:
                     try:
                         traceback = tracebacks[frame]
diff --git a/Lib/turtle.py b/Lib/turtle.py
index ee67a35..ba8288d 100644
--- a/Lib/turtle.py
+++ b/Lib/turtle.py
@@ -258,6 +258,7 @@
     def __rmul__(self, other):
         if isinstance(other, int) or isinstance(other, float):
             return Vec2D(self[0]*other, self[1]*other)
+        return NotImplemented
     def __sub__(self, other):
         return Vec2D(self[0]-other[0], self[1]-other[1])
     def __neg__(self):
diff --git a/Lib/turtledemo/__main__.py b/Lib/turtledemo/__main__.py
old mode 100644
new mode 100755
diff --git a/Lib/turtledemo/sorting_animate.py b/Lib/turtledemo/sorting_animate.py
old mode 100644
new mode 100755
diff --git a/Lib/turtledemo/two_canvases.py b/Lib/turtledemo/two_canvases.py
old mode 100755
new mode 100644
diff --git a/Lib/types.py b/Lib/types.py
index ea3c0b29..ad2020e 100644
--- a/Lib/types.py
+++ b/Lib/types.py
@@ -293,4 +293,7 @@
     return wrapped
 
 
+GenericAlias = type(list[int])
+
+
 __all__ = [n for n in globals() if n[:1] != '_']
diff --git a/Lib/typing.py b/Lib/typing.py
index 589eea9..f5316ab 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -26,11 +26,12 @@
 import re as stdlib_re  # Avoid confusion with the re we export.
 import sys
 import types
-from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType
+from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType, GenericAlias
 
 # Please keep __all__ alphabetized within each category.
 __all__ = [
     # Super-special typing primitives.
+    'Annotated',
     'Any',
     'Callable',
     'ClassVar',
@@ -140,8 +141,9 @@
     if (isinstance(arg, _GenericAlias) and
             arg.__origin__ in invalid_generic_forms):
         raise TypeError(f"{arg} is not valid as type argument")
-    if (isinstance(arg, _SpecialForm) and arg not in (Any, NoReturn) or
-            arg in (Generic, Protocol)):
+    if arg in (Any, NoReturn):
+        return arg
+    if isinstance(arg, _SpecialForm) or arg in (Generic, Protocol):
         raise TypeError(f"Plain {arg} is not valid as type argument")
     if isinstance(arg, (type, TypeVar, ForwardRef)):
         return arg
@@ -158,6 +160,8 @@
     typically enough to uniquely identify a type.  For everything
     else, we fall back on repr(obj).
     """
+    if isinstance(obj, types.GenericAlias):
+        return repr(obj)
     if isinstance(obj, type):
         if obj.__module__ == 'builtins':
             return obj.__qualname__
@@ -179,56 +183,24 @@
     for t in types:
         if isinstance(t, TypeVar) and t not in tvars:
             tvars.append(t)
-        if isinstance(t, _GenericAlias) and not t._special:
+        if isinstance(t, (_GenericAlias, GenericAlias)):
             tvars.extend([t for t in t.__parameters__ if t not in tvars])
     return tuple(tvars)
 
 
-def _subs_tvars(tp, tvars, subs):
-    """Substitute type variables 'tvars' with substitutions 'subs'.
-    These two must have the same length.
-    """
-    if not isinstance(tp, _GenericAlias):
-        return tp
-    new_args = list(tp.__args__)
-    for a, arg in enumerate(tp.__args__):
-        if isinstance(arg, TypeVar):
-            for i, tvar in enumerate(tvars):
-                if arg == tvar:
-                    new_args[a] = subs[i]
-        else:
-            new_args[a] = _subs_tvars(arg, tvars, subs)
-    if tp.__origin__ is Union:
-        return Union[tuple(new_args)]
-    return tp.copy_with(tuple(new_args))
-
-
-def _check_generic(cls, parameters):
+def _check_generic(cls, parameters, elen):
     """Check correct count for parameters of a generic cls (internal helper).
     This gives a nice error message in case of count mismatch.
     """
-    if not cls.__parameters__:
+    if not elen:
         raise TypeError(f"{cls} is not a generic class")
     alen = len(parameters)
-    elen = len(cls.__parameters__)
     if alen != elen:
         raise TypeError(f"Too {'many' if alen > elen else 'few'} parameters for {cls};"
                         f" actual {alen}, expected {elen}")
 
 
-def _remove_dups_flatten(parameters):
-    """An internal helper for Union creation and substitution: flatten Unions
-    among parameters, then remove duplicates.
-    """
-    # Flatten out Union[Union[...], ...].
-    params = []
-    for p in parameters:
-        if isinstance(p, _GenericAlias) and p.__origin__ is Union:
-            params.extend(p.__args__)
-        elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:
-            params.extend(p[1:])
-        else:
-            params.append(p)
+def _deduplicate(params):
     # Weed out strict duplicates, preserving the first of each occurrence.
     all_params = set(params)
     if len(all_params) < len(params):
@@ -239,42 +211,78 @@
                 all_params.remove(t)
         params = new_params
         assert not all_params, all_params
+    return params
+
+
+def _remove_dups_flatten(parameters):
+    """An internal helper for Union creation and substitution: flatten Unions
+    among parameters, then remove duplicates.
+    """
+    # Flatten out Union[Union[...], ...].
+    params = []
+    for p in parameters:
+        if isinstance(p, _UnionGenericAlias):
+            params.extend(p.__args__)
+        elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:
+            params.extend(p[1:])
+        else:
+            params.append(p)
+
+    return tuple(_deduplicate(params))
+
+
+def _flatten_literal_params(parameters):
+    """An internal helper for Literal creation: flatten Literals among parameters"""
+    params = []
+    for p in parameters:
+        if isinstance(p, _LiteralGenericAlias):
+            params.extend(p.__args__)
+        else:
+            params.append(p)
     return tuple(params)
 
 
 _cleanups = []
 
 
-def _tp_cache(func):
+def _tp_cache(func=None, /, *, typed=False):
     """Internal wrapper caching __getitem__ of generic types with a fallback to
     original function for non-hashable arguments.
     """
-    cached = functools.lru_cache()(func)
-    _cleanups.append(cached.cache_clear)
+    def decorator(func):
+        cached = functools.lru_cache(typed=typed)(func)
+        _cleanups.append(cached.cache_clear)
 
-    @functools.wraps(func)
-    def inner(*args, **kwds):
-        try:
-            return cached(*args, **kwds)
-        except TypeError:
-            pass  # All real errors (not unhashable args) are raised below.
-        return func(*args, **kwds)
-    return inner
+        @functools.wraps(func)
+        def inner(*args, **kwds):
+            try:
+                return cached(*args, **kwds)
+            except TypeError:
+                pass  # All real errors (not unhashable args) are raised below.
+            return func(*args, **kwds)
+        return inner
 
+    if func is not None:
+        return decorator(func)
 
-def _eval_type(t, globalns, localns):
-    """Evaluate all forward reverences in the given type t.
+    return decorator
+
+def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
+    """Evaluate all forward references in the given type t.
     For use of globalns and localns see the docstring for get_type_hints().
+    recursive_guard is used to prevent prevent infinite recursion
+    with recursive ForwardRef.
     """
     if isinstance(t, ForwardRef):
-        return t._evaluate(globalns, localns)
-    if isinstance(t, _GenericAlias):
-        ev_args = tuple(_eval_type(a, globalns, localns) for a in t.__args__)
+        return t._evaluate(globalns, localns, recursive_guard)
+    if isinstance(t, (_GenericAlias, GenericAlias)):
+        ev_args = tuple(_eval_type(a, globalns, localns, recursive_guard) for a in t.__args__)
         if ev_args == t.__args__:
             return t
-        res = t.copy_with(ev_args)
-        res._special = t._special
-        return res
+        if isinstance(t, GenericAlias):
+            return GenericAlias(t.__origin__, ev_args)
+        else:
+            return t.copy_with(ev_args)
     return t
 
 
@@ -289,6 +297,7 @@
 
 class _Immutable:
     """Mixin to indicate that object should not be copied."""
+    __slots__ = ()
 
     def __copy__(self):
         return self
@@ -297,37 +306,18 @@
         return self
 
 
-class _SpecialForm(_Final, _Immutable, _root=True):
-    """Internal indicator of special typing constructs.
-    See _doc instance attribute for specific docs.
-    """
+# Internal indicator of special typing constructs.
+# See __doc__ instance attribute for specific docs.
+class _SpecialForm(_Final, _root=True):
+    __slots__ = ('_name', '__doc__', '_getitem')
 
-    __slots__ = ('_name', '_doc')
+    def __init__(self, getitem):
+        self._getitem = getitem
+        self._name = getitem.__name__
+        self.__doc__ = getitem.__doc__
 
-    def __new__(cls, *args, **kwds):
-        """Constructor.
-
-        This only exists to give a better error message in case
-        someone tries to subclass a special typing object (not a good idea).
-        """
-        if (len(args) == 3 and
-                isinstance(args[0], str) and
-                isinstance(args[1], tuple)):
-            # Close enough.
-            raise TypeError(f"Cannot subclass {cls!r}")
-        return super().__new__(cls)
-
-    def __init__(self, name, doc):
-        self._name = name
-        self._doc = doc
-
-    def __eq__(self, other):
-        if not isinstance(other, _SpecialForm):
-            return NotImplemented
-        return self._name == other._name
-
-    def __hash__(self):
-        return hash((self._name,))
+    def __mro_entries__(self, bases):
+        raise TypeError(f"Cannot subclass {self!r}")
 
     def __repr__(self):
         return 'typing.' + self._name
@@ -346,31 +336,17 @@
 
     @_tp_cache
     def __getitem__(self, parameters):
-        if self._name in ('ClassVar', 'Final'):
-            item = _type_check(parameters, f'{self._name} accepts only single type.')
-            return _GenericAlias(self, (item,))
-        if self._name == 'Union':
-            if parameters == ():
-                raise TypeError("Cannot take a Union of no types.")
-            if not isinstance(parameters, tuple):
-                parameters = (parameters,)
-            msg = "Union[arg, ...]: each arg must be a type."
-            parameters = tuple(_type_check(p, msg) for p in parameters)
-            parameters = _remove_dups_flatten(parameters)
-            if len(parameters) == 1:
-                return parameters[0]
-            return _GenericAlias(self, parameters)
-        if self._name == 'Optional':
-            arg = _type_check(parameters, "Optional[t] requires a single type.")
-            return Union[arg, type(None)]
-        if self._name == 'Literal':
-            # There is no '_type_check' call because arguments to Literal[...] are
-            # values, not types.
-            return _GenericAlias(self, parameters)
-        raise TypeError(f"{self} is not subscriptable")
+        return self._getitem(self, parameters)
 
 
-Any = _SpecialForm('Any', doc=
+class _LiteralSpecialForm(_SpecialForm, _root=True):
+    @_tp_cache(typed=True)
+    def __getitem__(self, parameters):
+        return self._getitem(self, parameters)
+
+
+@_SpecialForm
+def Any(self, parameters):
     """Special type indicating an unconstrained type.
 
     - Any is compatible with every type.
@@ -380,9 +356,11 @@
     Note that all the above statements are true from the point of view of
     static type checkers. At runtime, Any should not be used with instance
     or class checks.
-    """)
+    """
+    raise TypeError(f"{self} is not subscriptable")
 
-NoReturn = _SpecialForm('NoReturn', doc=
+@_SpecialForm
+def NoReturn(self, parameters):
     """Special type indicating functions that never return.
     Example::
 
@@ -393,9 +371,11 @@
 
     This type is invalid in other positions, e.g., ``List[NoReturn]``
     will fail in static type checkers.
-    """)
+    """
+    raise TypeError(f"{self} is not subscriptable")
 
-ClassVar = _SpecialForm('ClassVar', doc=
+@_SpecialForm
+def ClassVar(self, parameters):
     """Special type construct to mark class variables.
 
     An annotation wrapped in ClassVar indicates that a given
@@ -410,9 +390,12 @@
 
     Note that ClassVar is not a class itself, and should not
     be used with isinstance() or issubclass().
-    """)
+    """
+    item = _type_check(parameters, f'{self} accepts only single type.')
+    return _GenericAlias(self, (item,))
 
-Final = _SpecialForm('Final', doc=
+@_SpecialForm
+def Final(self, parameters):
     """Special typing construct to indicate final names to type checkers.
 
     A final name cannot be re-assigned or overridden in a subclass.
@@ -428,9 +411,12 @@
           TIMEOUT = 1  # Error reported by type checker
 
     There is no runtime checking of these properties.
-    """)
+    """
+    item = _type_check(parameters, f'{self} accepts only single type.')
+    return _GenericAlias(self, (item,))
 
-Union = _SpecialForm('Union', doc=
+@_SpecialForm
+def Union(self, parameters):
     """Union type; Union[X, Y] means either X or Y.
 
     To define a union, use e.g. Union[int, str].  Details:
@@ -455,15 +441,29 @@
 
     - You cannot subclass or instantiate a union.
     - You can use Optional[X] as a shorthand for Union[X, None].
-    """)
+    """
+    if parameters == ():
+        raise TypeError("Cannot take a Union of no types.")
+    if not isinstance(parameters, tuple):
+        parameters = (parameters,)
+    msg = "Union[arg, ...]: each arg must be a type."
+    parameters = tuple(_type_check(p, msg) for p in parameters)
+    parameters = _remove_dups_flatten(parameters)
+    if len(parameters) == 1:
+        return parameters[0]
+    return _UnionGenericAlias(self, parameters)
 
-Optional = _SpecialForm('Optional', doc=
+@_SpecialForm
+def Optional(self, parameters):
     """Optional type.
 
     Optional[X] is equivalent to Union[X, None].
-    """)
+    """
+    arg = _type_check(parameters, f"{self} requires a single type.")
+    return Union[arg, type(None)]
 
-Literal = _SpecialForm('Literal', doc=
+@_LiteralSpecialForm
+def Literal(self, parameters):
     """Special typing form to define literal types (a.k.a. value types).
 
     This form can be used to indicate to type checkers that the corresponding
@@ -480,10 +480,23 @@
       open_helper('/some/path', 'r')  # Passes type check
       open_helper('/other/path', 'typo')  # Error in type checker
 
-   Literal[...] cannot be subclassed. At runtime, an arbitrary value
-   is allowed as type argument to Literal[...], but type checkers may
-   impose restrictions.
-    """)
+    Literal[...] cannot be subclassed. At runtime, an arbitrary value
+    is allowed as type argument to Literal[...], but type checkers may
+    impose restrictions.
+    """
+    # There is no '_type_check' call because arguments to Literal[...] are
+    # values, not types.
+    if not isinstance(parameters, tuple):
+        parameters = (parameters,)
+
+    parameters = _flatten_literal_params(parameters)
+
+    try:
+        parameters = tuple(p for p, _ in _deduplicate(list(_value_and_type_iter(parameters))))
+    except TypeError:  # unhashable parameters
+        pass
+
+    return _LiteralGenericAlias(self, parameters)
 
 
 class ForwardRef(_Final, _root=True):
@@ -506,7 +519,9 @@
         self.__forward_value__ = None
         self.__forward_is_argument__ = is_argument
 
-    def _evaluate(self, globalns, localns):
+    def _evaluate(self, globalns, localns, recursive_guard):
+        if self.__forward_arg__ in recursive_guard:
+            return self
         if not self.__forward_evaluated__ or localns is not globalns:
             if globalns is None and localns is None:
                 globalns = localns = {}
@@ -514,10 +529,14 @@
                 globalns = localns
             elif localns is None:
                 localns = globalns
-            self.__forward_value__ = _type_check(
+            type_ =_type_check(
                 eval(self.__forward_code__, globalns, localns),
                 "Forward references must evaluate to types.",
-                is_argument=self.__forward_is_argument__)
+                is_argument=self.__forward_is_argument__,
+            )
+            self.__forward_value__ = _eval_type(
+                type_, globalns, localns, recursive_guard | {self.__forward_arg__}
+            )
             self.__forward_evaluated__ = True
         return self.__forward_value__
 
@@ -581,7 +600,7 @@
     """
 
     __slots__ = ('__name__', '__bound__', '__constraints__',
-                 '__covariant__', '__contravariant__')
+                 '__covariant__', '__contravariant__', '__dict__')
 
     def __init__(self, name, *constraints, bound=None,
                  covariant=False, contravariant=False):
@@ -620,6 +639,68 @@
         return self.__name__
 
 
+def _is_dunder(attr):
+    return attr.startswith('__') and attr.endswith('__')
+
+class _BaseGenericAlias(_Final, _root=True):
+    """The central part of internal API.
+
+    This represents a generic version of type 'origin' with type arguments 'params'.
+    There are two kind of these aliases: user defined and special. The special ones
+    are wrappers around builtin collections and ABCs in collections.abc. These must
+    have 'name' always set. If 'inst' is False, then the alias can't be instantiated,
+    this is used by e.g. typing.List and typing.Dict.
+    """
+    def __init__(self, origin, *, inst=True, name=None):
+        self._inst = inst
+        self._name = name
+        self.__origin__ = origin
+        self.__slots__ = None  # This is not documented.
+
+    def __call__(self, *args, **kwargs):
+        if not self._inst:
+            raise TypeError(f"Type {self._name} cannot be instantiated; "
+                            f"use {self.__origin__.__name__}() instead")
+        result = self.__origin__(*args, **kwargs)
+        try:
+            result.__orig_class__ = self
+        except AttributeError:
+            pass
+        return result
+
+    def __mro_entries__(self, bases):
+        res = []
+        if self.__origin__ not in bases:
+            res.append(self.__origin__)
+        i = bases.index(self)
+        for b in bases[i+1:]:
+            if isinstance(b, _BaseGenericAlias) or issubclass(b, Generic):
+                break
+        else:
+            res.append(Generic)
+        return tuple(res)
+
+    def __getattr__(self, attr):
+        # We are careful for copy and pickle.
+        # Also for simplicity we just don't relay all dunder names
+        if '__origin__' in self.__dict__ and not _is_dunder(attr):
+            return getattr(self.__origin__, attr)
+        raise AttributeError(attr)
+
+    def __setattr__(self, attr, val):
+        if _is_dunder(attr) or attr in ('_name', '_inst', '_nparams'):
+            super().__setattr__(attr, val)
+        else:
+            setattr(self.__origin__, attr, val)
+
+    def __instancecheck__(self, obj):
+        return self.__subclasscheck__(type(obj))
+
+    def __subclasscheck__(self, cls):
+        raise TypeError("Subscripted generics cannot be used with"
+                        " class and instance checks")
+
+
 # Special typing constructs Union, Optional, Generic, Callable and Tuple
 # use three special attributes for internal bookkeeping of generic types:
 # * __parameters__ is a tuple of unique free type parameters of a generic
@@ -631,49 +712,27 @@
 #   e.g., Dict[T, int].__args__ == (T, int).
 
 
-# Mapping from non-generic type names that have a generic alias in typing
-# but with a different name.
-_normalize_alias = {'list': 'List',
-                    'tuple': 'Tuple',
-                    'dict': 'Dict',
-                    'set': 'Set',
-                    'frozenset': 'FrozenSet',
-                    'deque': 'Deque',
-                    'defaultdict': 'DefaultDict',
-                    'type': 'Type',
-                    'Set': 'AbstractSet'}
-
-def _is_dunder(attr):
-    return attr.startswith('__') and attr.endswith('__')
-
-
-class _GenericAlias(_Final, _root=True):
-    """The central part of internal API.
-
-    This represents a generic version of type 'origin' with type arguments 'params'.
-    There are two kind of these aliases: user defined and special. The special ones
-    are wrappers around builtin collections and ABCs in collections.abc. These must
-    have 'name' always set. If 'inst' is False, then the alias can't be instantiated,
-    this is used by e.g. typing.List and typing.Dict.
-    """
-    def __init__(self, origin, params, *, inst=True, special=False, name=None):
-        self._inst = inst
-        self._special = special
-        if special and name is None:
-            orig_name = origin.__name__
-            name = _normalize_alias.get(orig_name, orig_name)
-        self._name = name
+class _GenericAlias(_BaseGenericAlias, _root=True):
+    def __init__(self, origin, params, *, inst=True, name=None):
+        super().__init__(origin, inst=inst, name=name)
         if not isinstance(params, tuple):
             params = (params,)
-        self.__origin__ = origin
         self.__args__ = tuple(... if a is _TypingEllipsis else
                               () if a is _TypingEmpty else
                               a for a in params)
         self.__parameters__ = _collect_type_vars(params)
-        self.__slots__ = None  # This is not documented.
         if not name:
             self.__module__ = origin.__module__
 
+    def __eq__(self, other):
+        if not isinstance(other, _GenericAlias):
+            return NotImplemented
+        return (self.__origin__ == other.__origin__
+                and self.__args__ == other.__args__)
+
+    def __hash__(self):
+        return hash((self.__origin__, self.__args__))
+
     @_tp_cache
     def __getitem__(self, params):
         if self.__origin__ in (Generic, Protocol):
@@ -683,125 +742,119 @@
             params = (params,)
         msg = "Parameters to generic types must be types."
         params = tuple(_type_check(p, msg) for p in params)
-        _check_generic(self, params)
-        return _subs_tvars(self, self.__parameters__, params)
+        _check_generic(self, params, len(self.__parameters__))
+
+        subst = dict(zip(self.__parameters__, params))
+        new_args = []
+        for arg in self.__args__:
+            if isinstance(arg, TypeVar):
+                arg = subst[arg]
+            elif isinstance(arg, (_GenericAlias, GenericAlias)):
+                subparams = arg.__parameters__
+                if subparams:
+                    subargs = tuple(subst[x] for x in subparams)
+                    arg = arg[subargs]
+            new_args.append(arg)
+        return self.copy_with(tuple(new_args))
 
     def copy_with(self, params):
-        # We don't copy self._special.
-        return _GenericAlias(self.__origin__, params, name=self._name, inst=self._inst)
+        return self.__class__(self.__origin__, params, name=self._name, inst=self._inst)
 
     def __repr__(self):
-        if (self._name != 'Callable' or
-                len(self.__args__) == 2 and self.__args__[0] is Ellipsis):
-            if self._name:
-                name = 'typing.' + self._name
-            else:
-                name = _type_repr(self.__origin__)
-            if not self._special:
-                args = f'[{", ".join([_type_repr(a) for a in self.__args__])}]'
-            else:
-                args = ''
-            return (f'{name}{args}')
-        if self._special:
-            return 'typing.Callable'
-        return (f'typing.Callable'
-                f'[[{", ".join([_type_repr(a) for a in self.__args__[:-1]])}], '
-                f'{_type_repr(self.__args__[-1])}]')
+        if self._name:
+            name = 'typing.' + self._name
+        else:
+            name = _type_repr(self.__origin__)
+        args = ", ".join([_type_repr(a) for a in self.__args__])
+        return f'{name}[{args}]'
 
-    def __eq__(self, other):
-        if not isinstance(other, _GenericAlias):
-            return NotImplemented
-        if self.__origin__ != other.__origin__:
-            return False
-        if self.__origin__ is Union and other.__origin__ is Union:
-            return frozenset(self.__args__) == frozenset(other.__args__)
-        return self.__args__ == other.__args__
-
-    def __hash__(self):
-        if self.__origin__ is Union:
-            return hash((Union, frozenset(self.__args__)))
-        return hash((self.__origin__, self.__args__))
-
-    def __call__(self, *args, **kwargs):
-        if not self._inst:
-            raise TypeError(f"Type {self._name} cannot be instantiated; "
-                            f"use {self._name.lower()}() instead")
-        result = self.__origin__(*args, **kwargs)
-        try:
-            result.__orig_class__ = self
-        except AttributeError:
-            pass
-        return result
+    def __reduce__(self):
+        if self._name:
+            origin = globals()[self._name]
+        else:
+            origin = self.__origin__
+        args = tuple(self.__args__)
+        if len(args) == 1 and not isinstance(args[0], tuple):
+            args, = args
+        return operator.getitem, (origin, args)
 
     def __mro_entries__(self, bases):
         if self._name:  # generic version of an ABC or built-in class
-            res = []
-            if self.__origin__ not in bases:
-                res.append(self.__origin__)
-            i = bases.index(self)
-            if not any(isinstance(b, _GenericAlias) or issubclass(b, Generic)
-                       for b in bases[i+1:]):
-                res.append(Generic)
-            return tuple(res)
+            return super().__mro_entries__(bases)
         if self.__origin__ is Generic:
             if Protocol in bases:
                 return ()
             i = bases.index(self)
             for b in bases[i+1:]:
-                if isinstance(b, _GenericAlias) and b is not self:
+                if isinstance(b, _BaseGenericAlias) and b is not self:
                     return ()
         return (self.__origin__,)
 
-    def __getattr__(self, attr):
-        # We are careful for copy and pickle.
-        # Also for simplicity we just don't relay all dunder names
-        if '__origin__' in self.__dict__ and not _is_dunder(attr):
-            return getattr(self.__origin__, attr)
-        raise AttributeError(attr)
 
-    def __setattr__(self, attr, val):
-        if _is_dunder(attr) or attr in ('_name', '_inst', '_special'):
-            super().__setattr__(attr, val)
+# _nparams is the number of accepted parameters, e.g. 0 for Hashable,
+# 1 for List and 2 for Dict.  It may be -1 if variable number of
+# parameters are accepted (needs custom __getitem__).
+
+class _SpecialGenericAlias(_BaseGenericAlias, _root=True):
+    def __init__(self, origin, nparams, *, inst=True, name=None):
+        if name is None:
+            name = origin.__name__
+        super().__init__(origin, inst=inst, name=name)
+        self._nparams = nparams
+        if origin.__module__ == 'builtins':
+            self.__doc__ = f'A generic version of {origin.__qualname__}.'
         else:
-            setattr(self.__origin__, attr, val)
+            self.__doc__ = f'A generic version of {origin.__module__}.{origin.__qualname__}.'
 
-    def __instancecheck__(self, obj):
-        return self.__subclasscheck__(type(obj))
+    @_tp_cache
+    def __getitem__(self, params):
+        if not isinstance(params, tuple):
+            params = (params,)
+        msg = "Parameters to generic types must be types."
+        params = tuple(_type_check(p, msg) for p in params)
+        _check_generic(self, params, self._nparams)
+        return self.copy_with(params)
+
+    def copy_with(self, params):
+        return _GenericAlias(self.__origin__, params,
+                             name=self._name, inst=self._inst)
+
+    def __repr__(self):
+        return 'typing.' + self._name
 
     def __subclasscheck__(self, cls):
-        if self._special:
-            if not isinstance(cls, _GenericAlias):
-                return issubclass(cls, self.__origin__)
-            if cls._special:
-                return issubclass(cls.__origin__, self.__origin__)
-        raise TypeError("Subscripted generics cannot be used with"
-                        " class and instance checks")
+        if isinstance(cls, _SpecialGenericAlias):
+            return issubclass(cls.__origin__, self.__origin__)
+        if not isinstance(cls, _GenericAlias):
+            return issubclass(cls, self.__origin__)
+        return super().__subclasscheck__(cls)
 
     def __reduce__(self):
-        if self._special:
-            return self._name
-
-        if self._name:
-            origin = globals()[self._name]
-        else:
-            origin = self.__origin__
-        if (origin is Callable and
-            not (len(self.__args__) == 2 and self.__args__[0] is Ellipsis)):
-            args = list(self.__args__[:-1]), self.__args__[-1]
-        else:
-            args = tuple(self.__args__)
-            if len(args) == 1 and not isinstance(args[0], tuple):
-                args, = args
-        return operator.getitem, (origin, args)
+        return self._name
 
 
-class _VariadicGenericAlias(_GenericAlias, _root=True):
-    """Same as _GenericAlias above but for variadic aliases. Currently,
-    this is used only by special internal aliases: Tuple and Callable.
-    """
+class _CallableGenericAlias(_GenericAlias, _root=True):
+    def __repr__(self):
+        assert self._name == 'Callable'
+        if len(self.__args__) == 2 and self.__args__[0] is Ellipsis:
+            return super().__repr__()
+        return (f'typing.Callable'
+                f'[[{", ".join([_type_repr(a) for a in self.__args__[:-1]])}], '
+                f'{_type_repr(self.__args__[-1])}]')
+
+    def __reduce__(self):
+        args = self.__args__
+        if not (len(args) == 2 and args[0] is ...):
+            args = list(args[:-1]), args[-1]
+        return operator.getitem, (Callable, args)
+
+
+class _CallableType(_SpecialGenericAlias, _root=True):
+    def copy_with(self, params):
+        return _CallableGenericAlias(self.__origin__, params,
+                                     name=self._name, inst=self._inst)
+
     def __getitem__(self, params):
-        if self._name != 'Callable' or not self._special:
-            return self.__getitem_inner__(params)
         if not isinstance(params, tuple) or len(params) != 2:
             raise TypeError("Callable must be used as "
                             "Callable[[arg, ...], result].")
@@ -817,29 +870,69 @@
 
     @_tp_cache
     def __getitem_inner__(self, params):
-        if self.__origin__ is tuple and self._special:
-            if params == ():
-                return self.copy_with((_TypingEmpty,))
-            if not isinstance(params, tuple):
-                params = (params,)
-            if len(params) == 2 and params[1] is ...:
-                msg = "Tuple[t, ...]: t must be a type."
-                p = _type_check(params[0], msg)
-                return self.copy_with((p, _TypingEllipsis))
-            msg = "Tuple[t0, t1, ...]: each t must be a type."
-            params = tuple(_type_check(p, msg) for p in params)
-            return self.copy_with(params)
-        if self.__origin__ is collections.abc.Callable and self._special:
-            args, result = params
-            msg = "Callable[args, result]: result must be a type."
-            result = _type_check(result, msg)
-            if args is Ellipsis:
-                return self.copy_with((_TypingEllipsis, result))
-            msg = "Callable[[arg, ...], result]: each arg must be a type."
-            args = tuple(_type_check(arg, msg) for arg in args)
-            params = args + (result,)
-            return self.copy_with(params)
-        return super().__getitem__(params)
+        args, result = params
+        msg = "Callable[args, result]: result must be a type."
+        result = _type_check(result, msg)
+        if args is Ellipsis:
+            return self.copy_with((_TypingEllipsis, result))
+        msg = "Callable[[arg, ...], result]: each arg must be a type."
+        args = tuple(_type_check(arg, msg) for arg in args)
+        params = args + (result,)
+        return self.copy_with(params)
+
+
+class _TupleType(_SpecialGenericAlias, _root=True):
+    @_tp_cache
+    def __getitem__(self, params):
+        if params == ():
+            return self.copy_with((_TypingEmpty,))
+        if not isinstance(params, tuple):
+            params = (params,)
+        if len(params) == 2 and params[1] is ...:
+            msg = "Tuple[t, ...]: t must be a type."
+            p = _type_check(params[0], msg)
+            return self.copy_with((p, _TypingEllipsis))
+        msg = "Tuple[t0, t1, ...]: each t must be a type."
+        params = tuple(_type_check(p, msg) for p in params)
+        return self.copy_with(params)
+
+
+class _UnionGenericAlias(_GenericAlias, _root=True):
+    def copy_with(self, params):
+        return Union[params]
+
+    def __eq__(self, other):
+        if not isinstance(other, _UnionGenericAlias):
+            return NotImplemented
+        return set(self.__args__) == set(other.__args__)
+
+    def __hash__(self):
+        return hash(frozenset(self.__args__))
+
+    def __repr__(self):
+        args = self.__args__
+        if len(args) == 2:
+            if args[0] is type(None):
+                return f'typing.Optional[{_type_repr(args[1])}]'
+            elif args[1] is type(None):
+                return f'typing.Optional[{_type_repr(args[0])}]'
+        return super().__repr__()
+
+
+def _value_and_type_iter(parameters):
+    return ((p, type(p)) for p in parameters)
+
+
+class _LiteralGenericAlias(_GenericAlias, _root=True):
+
+    def __eq__(self, other):
+        if not isinstance(other, _LiteralGenericAlias):
+            return NotImplemented
+
+        return set(_value_and_type_iter(self.__args__)) == set(_value_and_type_iter(other.__args__))
+
+    def __hash__(self):
+        return hash(frozenset(_value_and_type_iter(self.__args__)))
 
 
 class Generic:
@@ -865,16 +958,6 @@
     __slots__ = ()
     _is_protocol = False
 
-    def __new__(cls, *args, **kwds):
-        if cls in (Generic, Protocol):
-            raise TypeError(f"Type {cls.__name__} cannot be instantiated; "
-                            "it can be used only as a base class")
-        if super().__new__ is object.__new__ and cls.__init__ is not object.__init__:
-            obj = super().__new__(cls)
-        else:
-            obj = super().__new__(cls, *args, **kwds)
-        return obj
-
     @_tp_cache
     def __class_getitem__(cls, params):
         if not isinstance(params, tuple):
@@ -894,7 +977,7 @@
                     f"Parameters to {cls.__name__}[...] must all be unique")
         else:
             # Subscripting a regular Generic subclass.
-            _check_generic(cls, params)
+            _check_generic(cls, params, len(cls.__parameters__))
         return _GenericAlias(cls, params)
 
     def __init_subclass__(cls, *args, **kwargs):
@@ -949,7 +1032,7 @@
 
 _SPECIAL_NAMES = ['__abstractmethods__', '__annotations__', '__dict__', '__doc__',
                   '__init__', '__module__', '__new__', '__slots__',
-                  '__subclasshook__', '__weakref__']
+                  '__subclasshook__', '__weakref__', '__class_getitem__']
 
 # These special attributes will be not collected as protocol members.
 EXCLUDED_ATTRIBUTES = _TYPING_INTERNALS + _SPECIAL_NAMES + ['_MutableMapping__marker']
@@ -983,7 +1066,7 @@
 
 
 def _allow_reckless_class_cheks():
-    """Allow instnance and class checks for special stdlib modules.
+    """Allow instance and class checks for special stdlib modules.
 
     The abc and functools modules indiscriminately call isinstance() and
     issubclass() on the whole MRO of a user class, which may contain protocols.
@@ -1121,6 +1204,100 @@
         cls.__init__ = _no_init
 
 
+class _AnnotatedAlias(_GenericAlias, _root=True):
+    """Runtime representation of an annotated type.
+
+    At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't'
+    with extra annotations. The alias behaves like a normal typing alias,
+    instantiating is the same as instantiating the underlying type, binding
+    it to types is also the same.
+    """
+    def __init__(self, origin, metadata):
+        if isinstance(origin, _AnnotatedAlias):
+            metadata = origin.__metadata__ + metadata
+            origin = origin.__origin__
+        super().__init__(origin, origin)
+        self.__metadata__ = metadata
+
+    def copy_with(self, params):
+        assert len(params) == 1
+        new_type = params[0]
+        return _AnnotatedAlias(new_type, self.__metadata__)
+
+    def __repr__(self):
+        return "typing.Annotated[{}, {}]".format(
+            _type_repr(self.__origin__),
+            ", ".join(repr(a) for a in self.__metadata__)
+        )
+
+    def __reduce__(self):
+        return operator.getitem, (
+            Annotated, (self.__origin__,) + self.__metadata__
+        )
+
+    def __eq__(self, other):
+        if not isinstance(other, _AnnotatedAlias):
+            return NotImplemented
+        return (self.__origin__ == other.__origin__
+                and self.__metadata__ == other.__metadata__)
+
+    def __hash__(self):
+        return hash((self.__origin__, self.__metadata__))
+
+
+class Annotated:
+    """Add context specific metadata to a type.
+
+    Example: Annotated[int, runtime_check.Unsigned] indicates to the
+    hypothetical runtime_check module that this type is an unsigned int.
+    Every other consumer of this type can ignore this metadata and treat
+    this type as int.
+
+    The first argument to Annotated must be a valid type.
+
+    Details:
+
+    - It's an error to call `Annotated` with less than two arguments.
+    - Nested Annotated are flattened::
+
+        Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
+
+    - Instantiating an annotated type is equivalent to instantiating the
+    underlying type::
+
+        Annotated[C, Ann1](5) == C(5)
+
+    - Annotated can be used as a generic type alias::
+
+        Optimized = Annotated[T, runtime.Optimize()]
+        Optimized[int] == Annotated[int, runtime.Optimize()]
+
+        OptimizedList = Annotated[List[T], runtime.Optimize()]
+        OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
+    """
+
+    __slots__ = ()
+
+    def __new__(cls, *args, **kwargs):
+        raise TypeError("Type Annotated cannot be instantiated.")
+
+    @_tp_cache
+    def __class_getitem__(cls, params):
+        if not isinstance(params, tuple) or len(params) < 2:
+            raise TypeError("Annotated[...] should be used "
+                            "with at least two arguments (a type and an "
+                            "annotation).")
+        msg = "Annotated[t, ...]: t must be a type."
+        origin = _type_check(params[0], msg)
+        metadata = tuple(params[1:])
+        return _AnnotatedAlias(origin, metadata)
+
+    def __init_subclass__(cls, *args, **kwargs):
+        raise TypeError(
+            "Cannot subclass {}.Annotated".format(cls.__module__)
+        )
+
+
 def runtime_checkable(cls):
     """Mark a protocol class as a runtime protocol.
 
@@ -1182,12 +1359,13 @@
                   WrapperDescriptorType, MethodWrapperType, MethodDescriptorType)
 
 
-def get_type_hints(obj, globalns=None, localns=None):
+def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
     """Return type hints for an object.
 
     This is often the same as obj.__annotations__, but it handles
-    forward references encoded as string literals, and if necessary
-    adds Optional[t] if a default value equal to None is set.
+    forward references encoded as string literals, adds Optional[t] if a
+    default value equal to None is set and recursively replaces all
+    'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
 
     The argument may be a module, class, method, or function. The annotations
     are returned as a dictionary. For classes, annotations include also
@@ -1231,7 +1409,7 @@
                     value = ForwardRef(value, is_argument=False)
                 value = _eval_type(value, base_globals, localns)
                 hints[name] = value
-        return hints
+        return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
 
     if globalns is None:
         if isinstance(obj, types.ModuleType):
@@ -1265,14 +1443,32 @@
         if name in defaults and defaults[name] is None:
             value = Optional[value]
         hints[name] = value
-    return hints
+    return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
+
+
+def _strip_annotations(t):
+    """Strips the annotations from a given type.
+    """
+    if isinstance(t, _AnnotatedAlias):
+        return _strip_annotations(t.__origin__)
+    if isinstance(t, _GenericAlias):
+        stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
+        if stripped_args == t.__args__:
+            return t
+        return t.copy_with(stripped_args)
+    if isinstance(t, GenericAlias):
+        stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
+        if stripped_args == t.__args__:
+            return t
+        return GenericAlias(t.__origin__, stripped_args)
+    return t
 
 
 def get_origin(tp):
     """Get the unsubscripted version of a type.
 
-    This supports generic types, Callable, Tuple, Union, Literal, Final and ClassVar.
-    Return None for unsupported types. Examples::
+    This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar
+    and Annotated. Return None for unsupported types. Examples::
 
         get_origin(Literal[42]) is Literal
         get_origin(int) is None
@@ -1282,7 +1478,9 @@
         get_origin(Union[T, int]) is Union
         get_origin(List[Tuple[T, T]][int]) == list
     """
-    if isinstance(tp, _GenericAlias):
+    if isinstance(tp, _AnnotatedAlias):
+        return Annotated
+    if isinstance(tp, (_BaseGenericAlias, GenericAlias)):
         return tp.__origin__
     if tp is Generic:
         return Generic
@@ -1300,11 +1498,15 @@
         get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
         get_args(Callable[[], T][int]) == ([], int)
     """
-    if isinstance(tp, _GenericAlias) and not tp._special:
+    if isinstance(tp, _AnnotatedAlias):
+        return (tp.__origin__,) + tp.__metadata__
+    if isinstance(tp, _GenericAlias):
         res = tp.__args__
-        if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis:
+        if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
             res = (list(res[:-1]), res[-1])
         return res
+    if isinstance(tp, GenericAlias):
+        return tp.__args__
     return ()
 
 
@@ -1432,21 +1634,20 @@
 
 
 # Various ABCs mimicking those in collections.abc.
-def _alias(origin, params, inst=True):
-    return _GenericAlias(origin, params, special=True, inst=inst)
+_alias = _SpecialGenericAlias
 
-Hashable = _alias(collections.abc.Hashable, ())  # Not generic.
-Awaitable = _alias(collections.abc.Awaitable, T_co)
-Coroutine = _alias(collections.abc.Coroutine, (T_co, T_contra, V_co))
-AsyncIterable = _alias(collections.abc.AsyncIterable, T_co)
-AsyncIterator = _alias(collections.abc.AsyncIterator, T_co)
-Iterable = _alias(collections.abc.Iterable, T_co)
-Iterator = _alias(collections.abc.Iterator, T_co)
-Reversible = _alias(collections.abc.Reversible, T_co)
-Sized = _alias(collections.abc.Sized, ())  # Not generic.
-Container = _alias(collections.abc.Container, T_co)
-Collection = _alias(collections.abc.Collection, T_co)
-Callable = _VariadicGenericAlias(collections.abc.Callable, (), special=True)
+Hashable = _alias(collections.abc.Hashable, 0)  # Not generic.
+Awaitable = _alias(collections.abc.Awaitable, 1)
+Coroutine = _alias(collections.abc.Coroutine, 3)
+AsyncIterable = _alias(collections.abc.AsyncIterable, 1)
+AsyncIterator = _alias(collections.abc.AsyncIterator, 1)
+Iterable = _alias(collections.abc.Iterable, 1)
+Iterator = _alias(collections.abc.Iterator, 1)
+Reversible = _alias(collections.abc.Reversible, 1)
+Sized = _alias(collections.abc.Sized, 0)  # Not generic.
+Container = _alias(collections.abc.Container, 1)
+Collection = _alias(collections.abc.Collection, 1)
+Callable = _CallableType(collections.abc.Callable, 2)
 Callable.__doc__ = \
     """Callable type; Callable[[int], str] is a function of (int) -> str.
 
@@ -1457,15 +1658,16 @@
     There is no syntax to indicate optional or keyword arguments,
     such function types are rarely used as callback types.
     """
-AbstractSet = _alias(collections.abc.Set, T_co)
-MutableSet = _alias(collections.abc.MutableSet, T)
+AbstractSet = _alias(collections.abc.Set, 1, name='AbstractSet')
+MutableSet = _alias(collections.abc.MutableSet, 1)
 # NOTE: Mapping is only covariant in the value type.
-Mapping = _alias(collections.abc.Mapping, (KT, VT_co))
-MutableMapping = _alias(collections.abc.MutableMapping, (KT, VT))
-Sequence = _alias(collections.abc.Sequence, T_co)
-MutableSequence = _alias(collections.abc.MutableSequence, T)
-ByteString = _alias(collections.abc.ByteString, ())  # Not generic
-Tuple = _VariadicGenericAlias(tuple, (), inst=False, special=True)
+Mapping = _alias(collections.abc.Mapping, 2)
+MutableMapping = _alias(collections.abc.MutableMapping, 2)
+Sequence = _alias(collections.abc.Sequence, 1)
+MutableSequence = _alias(collections.abc.MutableSequence, 1)
+ByteString = _alias(collections.abc.ByteString, 0)  # Not generic
+# Tuple accepts variable number of parameters.
+Tuple = _TupleType(tuple, -1, inst=False, name='Tuple')
 Tuple.__doc__ = \
     """Tuple type; Tuple[X, Y] is the cross-product type of X and Y.
 
@@ -1475,24 +1677,24 @@
 
     To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].
     """
-List = _alias(list, T, inst=False)
-Deque = _alias(collections.deque, T)
-Set = _alias(set, T, inst=False)
-FrozenSet = _alias(frozenset, T_co, inst=False)
-MappingView = _alias(collections.abc.MappingView, T_co)
-KeysView = _alias(collections.abc.KeysView, KT)
-ItemsView = _alias(collections.abc.ItemsView, (KT, VT_co))
-ValuesView = _alias(collections.abc.ValuesView, VT_co)
-ContextManager = _alias(contextlib.AbstractContextManager, T_co)
-AsyncContextManager = _alias(contextlib.AbstractAsyncContextManager, T_co)
-Dict = _alias(dict, (KT, VT), inst=False)
-DefaultDict = _alias(collections.defaultdict, (KT, VT))
-OrderedDict = _alias(collections.OrderedDict, (KT, VT))
-Counter = _alias(collections.Counter, T)
-ChainMap = _alias(collections.ChainMap, (KT, VT))
-Generator = _alias(collections.abc.Generator, (T_co, T_contra, V_co))
-AsyncGenerator = _alias(collections.abc.AsyncGenerator, (T_co, T_contra))
-Type = _alias(type, CT_co, inst=False)
+List = _alias(list, 1, inst=False, name='List')
+Deque = _alias(collections.deque, 1, name='Deque')
+Set = _alias(set, 1, inst=False, name='Set')
+FrozenSet = _alias(frozenset, 1, inst=False, name='FrozenSet')
+MappingView = _alias(collections.abc.MappingView, 1)
+KeysView = _alias(collections.abc.KeysView, 1)
+ItemsView = _alias(collections.abc.ItemsView, 2)
+ValuesView = _alias(collections.abc.ValuesView, 1)
+ContextManager = _alias(contextlib.AbstractContextManager, 1, name='ContextManager')
+AsyncContextManager = _alias(contextlib.AbstractAsyncContextManager, 1, name='AsyncContextManager')
+Dict = _alias(dict, 2, inst=False, name='Dict')
+DefaultDict = _alias(collections.defaultdict, 2, name='DefaultDict')
+OrderedDict = _alias(collections.OrderedDict, 2)
+Counter = _alias(collections.Counter, 1)
+ChainMap = _alias(collections.ChainMap, 2)
+Generator = _alias(collections.abc.Generator, 3)
+AsyncGenerator = _alias(collections.abc.AsyncGenerator, 2)
+Type = _alias(type, 1, inst=False, name='Type')
 Type.__doc__ = \
     """A special construct usable to annotate class objects.
 
@@ -1588,50 +1790,41 @@
         pass
 
 
-def _make_nmtuple(name, types):
-    msg = "NamedTuple('Name', [(f0, t0), (f1, t1), ...]); each t must be a type"
-    types = [(n, _type_check(t, msg)) for n, t in types]
-    nm_tpl = collections.namedtuple(name, [n for n, t in types])
-    # Prior to PEP 526, only _field_types attribute was assigned.
-    # Now __annotations__ are used and _field_types is deprecated (remove in 3.9)
-    nm_tpl.__annotations__ = nm_tpl._field_types = dict(types)
-    try:
-        nm_tpl.__module__ = sys._getframe(2).f_globals.get('__name__', '__main__')
-    except (AttributeError, ValueError):
-        pass
+def _make_nmtuple(name, types, module, defaults = ()):
+    fields = [n for n, t in types]
+    types = {n: _type_check(t, f"field {n} annotation must be a type")
+             for n, t in types}
+    nm_tpl = collections.namedtuple(name, fields,
+                                    defaults=defaults, module=module)
+    nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = types
     return nm_tpl
 
 
 # attributes prohibited to set in NamedTuple class syntax
-_prohibited = ('__new__', '__init__', '__slots__', '__getnewargs__',
-               '_fields', '_field_defaults', '_field_types',
-               '_make', '_replace', '_asdict', '_source')
+_prohibited = frozenset({'__new__', '__init__', '__slots__', '__getnewargs__',
+                         '_fields', '_field_defaults',
+                         '_make', '_replace', '_asdict', '_source'})
 
-_special = ('__module__', '__name__', '__annotations__')
+_special = frozenset({'__module__', '__name__', '__annotations__'})
 
 
 class NamedTupleMeta(type):
 
     def __new__(cls, typename, bases, ns):
-        if ns.get('_root', False):
-            return super().__new__(cls, typename, bases, ns)
+        assert bases[0] is _NamedTuple
         types = ns.get('__annotations__', {})
-        nm_tpl = _make_nmtuple(typename, types.items())
-        defaults = []
-        defaults_dict = {}
+        default_names = []
         for field_name in types:
             if field_name in ns:
-                default_value = ns[field_name]
-                defaults.append(default_value)
-                defaults_dict[field_name] = default_value
-            elif defaults:
-                raise TypeError("Non-default namedtuple field {field_name} cannot "
-                                "follow default field(s) {default_names}"
-                                .format(field_name=field_name,
-                                        default_names=', '.join(defaults_dict.keys())))
-        nm_tpl.__new__.__annotations__ = dict(types)
-        nm_tpl.__new__.__defaults__ = tuple(defaults)
-        nm_tpl._field_defaults = defaults_dict
+                default_names.append(field_name)
+            elif default_names:
+                raise TypeError(f"Non-default namedtuple field {field_name} "
+                                f"cannot follow default field"
+                                f"{'s' if len(default_names) > 1 else ''} "
+                                f"{', '.join(default_names)}")
+        nm_tpl = _make_nmtuple(typename, types.items(),
+                               defaults=[ns[n] for n in default_names],
+                               module=ns['__module__'])
         # update from user namespace without overriding special namedtuple attributes
         for key in ns:
             if key in _prohibited:
@@ -1641,7 +1834,7 @@
         return nm_tpl
 
 
-class NamedTuple(metaclass=NamedTupleMeta):
+def NamedTuple(typename, fields=None, /, **kwargs):
     """Typed version of namedtuple.
 
     Usage in Python versions >= 3.6::
@@ -1665,99 +1858,81 @@
 
         Employee = NamedTuple('Employee', [('name', str), ('id', int)])
     """
-    _root = True
-
-    def __new__(*args, **kwargs):
-        if not args:
-            raise TypeError('NamedTuple.__new__(): not enough arguments')
-        cls, *args = args  # allow the "cls" keyword be passed
-        if args:
-            typename, *args = args # allow the "typename" keyword be passed
-        elif 'typename' in kwargs:
-            typename = kwargs.pop('typename')
-            import warnings
-            warnings.warn("Passing 'typename' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError("NamedTuple.__new__() missing 1 required positional "
-                            "argument: 'typename'")
-        if args:
-            try:
-                fields, = args # allow the "fields" keyword be passed
-            except ValueError:
-                raise TypeError(f'NamedTuple.__new__() takes from 2 to 3 '
-                                f'positional arguments but {len(args) + 2} '
-                                f'were given') from None
-        elif 'fields' in kwargs and len(kwargs) == 1:
-            fields = kwargs.pop('fields')
-            import warnings
-            warnings.warn("Passing 'fields' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            fields = None
-
-        if fields is None:
-            fields = kwargs.items()
-        elif kwargs:
-            raise TypeError("Either list of fields or keywords"
-                            " can be provided to NamedTuple, not both")
-        return _make_nmtuple(typename, fields)
-    __new__.__text_signature__ = '($cls, typename, fields=None, /, **kwargs)'
-
-
-def _dict_new(cls, /, *args, **kwargs):
-    return dict(*args, **kwargs)
-
-
-def _typeddict_new(cls, typename, fields=None, /, *, total=True, **kwargs):
     if fields is None:
-        fields = kwargs
+        fields = kwargs.items()
     elif kwargs:
-        raise TypeError("TypedDict takes either a dict or keyword arguments,"
-                        " but not both")
-
-    ns = {'__annotations__': dict(fields), '__total__': total}
+        raise TypeError("Either list of fields or keywords"
+                        " can be provided to NamedTuple, not both")
     try:
-        # Setting correct module is necessary to make typed dict classes pickleable.
-        ns['__module__'] = sys._getframe(1).f_globals.get('__name__', '__main__')
+        module = sys._getframe(1).f_globals.get('__name__', '__main__')
     except (AttributeError, ValueError):
-        pass
+        module = None
+    return _make_nmtuple(typename, fields, module=module)
 
-    return _TypedDictMeta(typename, (), ns)
+_NamedTuple = type.__new__(NamedTupleMeta, 'NamedTuple', (), {})
 
+def _namedtuple_mro_entries(bases):
+    if len(bases) > 1:
+        raise TypeError("Multiple inheritance with NamedTuple is not supported")
+    assert bases[0] is NamedTuple
+    return (_NamedTuple,)
 
-def _check_fails(cls, other):
-    # Typed dicts are only for static structural subtyping.
-    raise TypeError('TypedDict does not support instance and class checks')
+NamedTuple.__mro_entries__ = _namedtuple_mro_entries
 
 
 class _TypedDictMeta(type):
     def __new__(cls, name, bases, ns, total=True):
         """Create new typed dict class object.
 
-        This method is called directly when TypedDict is subclassed,
-        or via _typeddict_new when TypedDict is instantiated. This way
+        This method is called when TypedDict is subclassed,
+        or when TypedDict is instantiated. This way
         TypedDict supports all three syntax forms described in its docstring.
-        Subclasses and instances of TypedDict return actual dictionaries
-        via _dict_new.
+        Subclasses and instances of TypedDict return actual dictionaries.
         """
-        ns['__new__'] = _typeddict_new if name == 'TypedDict' else _dict_new
-        tp_dict = super(_TypedDictMeta, cls).__new__(cls, name, (dict,), ns)
-
-        anns = ns.get('__annotations__', {})
-        msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
-        anns = {n: _type_check(tp, msg) for n, tp in anns.items()}
         for base in bases:
-            anns.update(base.__dict__.get('__annotations__', {}))
-        tp_dict.__annotations__ = anns
+            if type(base) is not _TypedDictMeta:
+                raise TypeError('cannot inherit from both a TypedDict type '
+                                'and a non-TypedDict base class')
+        tp_dict = type.__new__(_TypedDictMeta, name, (dict,), ns)
+
+        annotations = {}
+        own_annotations = ns.get('__annotations__', {})
+        own_annotation_keys = set(own_annotations.keys())
+        msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
+        own_annotations = {
+            n: _type_check(tp, msg) for n, tp in own_annotations.items()
+        }
+        required_keys = set()
+        optional_keys = set()
+
+        for base in bases:
+            annotations.update(base.__dict__.get('__annotations__', {}))
+            required_keys.update(base.__dict__.get('__required_keys__', ()))
+            optional_keys.update(base.__dict__.get('__optional_keys__', ()))
+
+        annotations.update(own_annotations)
+        if total:
+            required_keys.update(own_annotation_keys)
+        else:
+            optional_keys.update(own_annotation_keys)
+
+        tp_dict.__annotations__ = annotations
+        tp_dict.__required_keys__ = frozenset(required_keys)
+        tp_dict.__optional_keys__ = frozenset(optional_keys)
         if not hasattr(tp_dict, '__total__'):
             tp_dict.__total__ = total
         return tp_dict
 
-    __instancecheck__ = __subclasscheck__ = _check_fails
+    __call__ = dict  # static method
+
+    def __subclasscheck__(cls, other):
+        # Typed dicts are only for static structural subtyping.
+        raise TypeError('TypedDict does not support instance and class checks')
+
+    __instancecheck__ = __subclasscheck__
 
 
-class TypedDict(dict, metaclass=_TypedDictMeta):
+def TypedDict(typename, fields=None, /, *, total=True, **kwargs):
     """A simple typed namespace. At runtime it is equivalent to a plain dict.
 
     TypedDict creates a dictionary type that expects all of its
@@ -1776,8 +1951,9 @@
 
         assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
 
-    The type info can be accessed via Point2D.__annotations__. TypedDict
-    supports two additional equivalent forms::
+    The type info can be accessed via the Point2D.__annotations__ dict, and
+    the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
+    TypedDict supports two additional equivalent forms::
 
         Point2D = TypedDict('Point2D', x=int, y=int, label=str)
         Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
@@ -1798,6 +1974,23 @@
     The class syntax is only supported in Python 3.6+, while two other
     syntax forms work for Python 2.7 and 3.2+
     """
+    if fields is None:
+        fields = kwargs
+    elif kwargs:
+        raise TypeError("TypedDict takes either a dict or keyword arguments,"
+                        " but not both")
+
+    ns = {'__annotations__': dict(fields), '__total__': total}
+    try:
+        # Setting correct module is necessary to make typed dict classes pickleable.
+        ns['__module__'] = sys._getframe(1).f_globals.get('__name__', '__main__')
+    except (AttributeError, ValueError):
+        pass
+
+    return _TypedDictMeta(typename, (), ns)
+
+_TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {})
+TypedDict.__mro_entries__ = lambda bases: (_TypedDict,)
 
 
 def NewType(name, tp):
@@ -1995,8 +2188,8 @@
 io.__name__ = __name__ + '.io'
 sys.modules[io.__name__] = io
 
-Pattern = _alias(stdlib_re.Pattern, AnyStr)
-Match = _alias(stdlib_re.Match, AnyStr)
+Pattern = _alias(stdlib_re.Pattern, 1)
+Match = _alias(stdlib_re.Match, 1)
 
 class re:
     """Wrapper namespace for re type aliases."""
diff --git a/Lib/unittest/__init__.py b/Lib/unittest/__init__.py
index ace3a6f..348dc47 100644
--- a/Lib/unittest/__init__.py
+++ b/Lib/unittest/__init__.py
@@ -57,7 +57,6 @@
 __unittest = True
 
 from .result import TestResult
-from .async_case import IsolatedAsyncioTestCase
 from .case import (addModuleCleanup, TestCase, FunctionTestCase, SkipTest, skip,
                    skipIf, skipUnless, expectedFailure)
 from .suite import BaseTestSuite, TestSuite
@@ -66,6 +65,7 @@
 from .main import TestProgram, main
 from .runner import TextTestRunner, TextTestResult
 from .signals import installHandler, registerResult, removeResult, removeHandler
+# IsolatedAsyncioTestCase will be imported lazily.
 
 # deprecated
 _TextTestResult = TextTestResult
@@ -78,3 +78,18 @@
     # top level directory cached on loader instance
     this_dir = os.path.dirname(__file__)
     return loader.discover(start_dir=this_dir, pattern=pattern)
+
+
+# Lazy import of IsolatedAsyncioTestCase from .async_case
+# It imports asyncio, which is relatively heavy, but most tests
+# do not need it.
+
+def __dir__():
+    return globals().keys() | {'IsolatedAsyncioTestCase'}
+
+def __getattr__(name):
+    if name == 'IsolatedAsyncioTestCase':
+        global IsolatedAsyncioTestCase
+        from .async_case import IsolatedAsyncioTestCase
+        return IsolatedAsyncioTestCase
+    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
diff --git a/Lib/unittest/_log.py b/Lib/unittest/_log.py
new file mode 100644
index 0000000..94e7e75
--- /dev/null
+++ b/Lib/unittest/_log.py
@@ -0,0 +1,69 @@
+import logging
+import collections
+
+from .case import _BaseTestCaseContext
+
+
+_LoggingWatcher = collections.namedtuple("_LoggingWatcher",
+                                         ["records", "output"])
+
+class _CapturingHandler(logging.Handler):
+    """
+    A logging handler capturing all (raw and formatted) logging output.
+    """
+
+    def __init__(self):
+        logging.Handler.__init__(self)
+        self.watcher = _LoggingWatcher([], [])
+
+    def flush(self):
+        pass
+
+    def emit(self, record):
+        self.watcher.records.append(record)
+        msg = self.format(record)
+        self.watcher.output.append(msg)
+
+
+class _AssertLogsContext(_BaseTestCaseContext):
+    """A context manager used to implement TestCase.assertLogs()."""
+
+    LOGGING_FORMAT = "%(levelname)s:%(name)s:%(message)s"
+
+    def __init__(self, test_case, logger_name, level):
+        _BaseTestCaseContext.__init__(self, test_case)
+        self.logger_name = logger_name
+        if level:
+            self.level = logging._nameToLevel.get(level, level)
+        else:
+            self.level = logging.INFO
+        self.msg = None
+
+    def __enter__(self):
+        if isinstance(self.logger_name, logging.Logger):
+            logger = self.logger = self.logger_name
+        else:
+            logger = self.logger = logging.getLogger(self.logger_name)
+        formatter = logging.Formatter(self.LOGGING_FORMAT)
+        handler = _CapturingHandler()
+        handler.setFormatter(formatter)
+        self.watcher = handler.watcher
+        self.old_handlers = logger.handlers[:]
+        self.old_level = logger.level
+        self.old_propagate = logger.propagate
+        logger.handlers = [handler]
+        logger.setLevel(self.level)
+        logger.propagate = False
+        return handler.watcher
+
+    def __exit__(self, exc_type, exc_value, tb):
+        self.logger.handlers = self.old_handlers
+        self.logger.propagate = self.old_propagate
+        self.logger.setLevel(self.old_level)
+        if exc_type is not None:
+            # let unexpected exceptions pass through
+            return False
+        if len(self.watcher.records) == 0:
+            self._raiseFailure(
+                "no logs of level {} or higher triggered on {}"
+                .format(logging.getLevelName(self.level), self.logger.name))
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 3223c0b..f8bc865 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -3,7 +3,6 @@
 import sys
 import functools
 import difflib
-import logging
 import pprint
 import re
 import warnings
@@ -241,6 +240,8 @@
                      expected_regex.pattern, str(exc_value)))
         return True
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 class _AssertWarnsContext(_AssertRaisesBaseContext):
     """A context manager used to implement TestCase.assertWarns* methods."""
@@ -251,7 +252,7 @@
     def __enter__(self):
         # The __warningregistry__'s need to be in a pristine state for tests
         # to work properly.
-        for v in list(sys.modules.values()):
+        for v in sys.modules.values():
             if getattr(v, '__warningregistry__', None):
                 v.__warningregistry__ = {}
         self.warnings_manager = warnings.catch_warnings(record=True)
@@ -295,73 +296,6 @@
 
 
 
-_LoggingWatcher = collections.namedtuple("_LoggingWatcher",
-                                         ["records", "output"])
-
-
-class _CapturingHandler(logging.Handler):
-    """
-    A logging handler capturing all (raw and formatted) logging output.
-    """
-
-    def __init__(self):
-        logging.Handler.__init__(self)
-        self.watcher = _LoggingWatcher([], [])
-
-    def flush(self):
-        pass
-
-    def emit(self, record):
-        self.watcher.records.append(record)
-        msg = self.format(record)
-        self.watcher.output.append(msg)
-
-
-
-class _AssertLogsContext(_BaseTestCaseContext):
-    """A context manager used to implement TestCase.assertLogs()."""
-
-    LOGGING_FORMAT = "%(levelname)s:%(name)s:%(message)s"
-
-    def __init__(self, test_case, logger_name, level):
-        _BaseTestCaseContext.__init__(self, test_case)
-        self.logger_name = logger_name
-        if level:
-            self.level = logging._nameToLevel.get(level, level)
-        else:
-            self.level = logging.INFO
-        self.msg = None
-
-    def __enter__(self):
-        if isinstance(self.logger_name, logging.Logger):
-            logger = self.logger = self.logger_name
-        else:
-            logger = self.logger = logging.getLogger(self.logger_name)
-        formatter = logging.Formatter(self.LOGGING_FORMAT)
-        handler = _CapturingHandler()
-        handler.setFormatter(formatter)
-        self.watcher = handler.watcher
-        self.old_handlers = logger.handlers[:]
-        self.old_level = logger.level
-        self.old_propagate = logger.propagate
-        logger.handlers = [handler]
-        logger.setLevel(self.level)
-        logger.propagate = False
-        return handler.watcher
-
-    def __exit__(self, exc_type, exc_value, tb):
-        self.logger.handlers = self.old_handlers
-        self.logger.propagate = self.old_propagate
-        self.logger.setLevel(self.old_level)
-        if exc_type is not None:
-            # let unexpected exceptions pass through
-            return False
-        if len(self.watcher.records) == 0:
-            self._raiseFailure(
-                "no logs of level {} or higher triggered on {}"
-                .format(logging.getLevelName(self.level), self.logger.name))
-
-
 class _OrderedChainMap(collections.ChainMap):
     def __iter__(self):
         seen = set()
@@ -468,30 +402,13 @@
         """
         self._type_equality_funcs[typeobj] = function
 
-    def addCleanup(*args, **kwargs):
+    def addCleanup(self, function, /, *args, **kwargs):
         """Add a function, with arguments, to be called when the test is
         completed. Functions added are called on a LIFO basis and are
         called after tearDown on test failure or success.
 
         Cleanup items are called even if setUp fails (unlike tearDown)."""
-        if len(args) >= 2:
-            self, function, *args = args
-        elif not args:
-            raise TypeError("descriptor 'addCleanup' of 'TestCase' object "
-                            "needs an argument")
-        elif 'function' in kwargs:
-            function = kwargs.pop('function')
-            self, *args = args
-            import warnings
-            warnings.warn("Passing 'function' as keyword argument is deprecated",
-                          DeprecationWarning, stacklevel=2)
-        else:
-            raise TypeError('addCleanup expected at least 1 positional '
-                            'argument, got %d' % (len(args)-1))
-        args = tuple(args)
-
         self._cleanups.append((function, args, kwargs))
-    addCleanup.__text_signature__ = '($self, function, /, *args, **kwargs)'
 
     @classmethod
     def addClassCleanup(cls, function, /, *args, **kwargs):
@@ -729,7 +646,7 @@
             function, args, kwargs = cls._class_cleanups.pop()
             try:
                 function(*args, **kwargs)
-            except Exception as exc:
+            except Exception:
                 cls.tearDown_exceptions.append(sys.exc_info())
 
     def __call__(self, *args, **kwds):
@@ -869,6 +786,8 @@
             self.assertEqual(cm.output, ['INFO:foo:first message',
                                          'ERROR:foo.bar:second message'])
         """
+        # Lazy import to avoid importing logging if it is not needed.
+        from ._log import _AssertLogsContext
         return _AssertLogsContext(self, logger, level)
 
     def _getAssertEqualityFunc(self, first, second):
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 3629cf6..b495a5f 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -23,8 +23,6 @@
 )
 
 
-__version__ = '1.0'
-
 import asyncio
 import contextlib
 import io
@@ -32,6 +30,7 @@
 import pprint
 import sys
 import builtins
+from asyncio import iscoroutinefunction
 from types import CodeType, ModuleType, MethodType
 from unittest.util import safe_repr
 from functools import wraps, partial
@@ -50,12 +49,12 @@
         return False
     if hasattr(obj, '__func__'):
         obj = getattr(obj, '__func__')
-    return asyncio.iscoroutinefunction(obj) or inspect.isawaitable(obj)
+    return iscoroutinefunction(obj) or inspect.isawaitable(obj)
 
 
 def _is_async_func(func):
     if getattr(func, '__code__', None):
-        return asyncio.iscoroutinefunction(func)
+        return iscoroutinefunction(func)
     else:
         return False
 
@@ -403,18 +402,12 @@
         # so we can create magic methods on the
         # class without stomping on other mocks
         bases = (cls,)
-        if not issubclass(cls, AsyncMock):
+        if not issubclass(cls, AsyncMockMixin):
             # Check if spec is an async object or function
-            sig = inspect.signature(NonCallableMock.__init__)
-            bound_args = sig.bind_partial(cls, *args, **kw).arguments
-            spec_arg = [
-                arg for arg in bound_args.keys()
-                if arg.startswith('spec')
-            ]
-            if spec_arg:
-                # what if spec_set is different than spec?
-                if _is_async_obj(bound_args[spec_arg[0]]):
-                    bases = (AsyncMockMixin, cls,)
+            bound_args = _MOCK_SIG.bind_partial(cls, *args, **kw).arguments
+            spec_arg = bound_args.get('spec_set', bound_args.get('spec'))
+            if spec_arg and _is_async_obj(spec_arg):
+                bases = (AsyncMockMixin, cls)
         new = type(cls.__name__, bases, {'__doc__': cls.__doc__})
         instance = _safe_super(NonCallableMock, cls).__new__(new)
         return instance
@@ -496,7 +489,7 @@
         _spec_asyncs = []
 
         for attr in dir(spec):
-            if asyncio.iscoroutinefunction(getattr(spec, attr, None)):
+            if iscoroutinefunction(getattr(spec, attr, None)):
                 _spec_asyncs.append(attr)
 
         if spec is not None and not _is_list(spec):
@@ -600,7 +593,7 @@
         for child in self._mock_children.values():
             if isinstance(child, _SpecState) or child is _deleted:
                 continue
-            child.reset_mock(visited)
+            child.reset_mock(visited, return_value=return_value, side_effect=side_effect)
 
         ret = self._mock_return_value
         if _is_instance_mock(ret) and ret is not self:
@@ -857,7 +850,8 @@
             else:
                 name, args, kwargs = _call
             try:
-                return name, sig.bind(*args, **kwargs)
+                bound_call = sig.bind(*args, **kwargs)
+                return call(name, bound_call.args, bound_call.kwargs)
             except TypeError as e:
                 return e.with_traceback(None)
         else:
@@ -906,9 +900,9 @@
         def _error_message():
             msg = self._format_mock_failure_message(args, kwargs)
             return msg
-        expected = self._call_matcher((args, kwargs))
+        expected = self._call_matcher(_Call((args, kwargs), two=True))
         actual = self._call_matcher(self.call_args)
-        if expected != actual:
+        if actual != expected:
             cause = expected if isinstance(expected, Exception) else None
             raise AssertionError(_error_message()) from cause
 
@@ -976,10 +970,10 @@
         The assert passes if the mock has *ever* been called, unlike
         `assert_called_with` and `assert_called_once_with` that only pass if
         the call is the most recent one."""
-        expected = self._call_matcher((args, kwargs))
+        expected = self._call_matcher(_Call((args, kwargs), two=True))
+        cause = expected if isinstance(expected, Exception) else None
         actual = [self._call_matcher(c) for c in self.call_args_list]
-        if expected not in actual:
-            cause = expected if isinstance(expected, Exception) else None
+        if cause or expected not in _AnyComparer(actual):
             expected_string = self._format_mock_call_signature(args, kwargs)
             raise AssertionError(
                 '%s call not found' % expected_string
@@ -1038,6 +1032,24 @@
         return f"\n{prefix}: {safe_repr(self.mock_calls)}."
 
 
+_MOCK_SIG = inspect.signature(NonCallableMock.__init__)
+
+
+class _AnyComparer(list):
+    """A list which checks if it contains a call which may have an
+    argument of ANY, flipping the components of item and self from
+    their traditional locations so that ANY is guaranteed to be on
+    the left."""
+    def __contains__(self, item):
+        for _call in self:
+            assert len(item) == len(_call)
+            if all([
+                expected == actual
+                for expected, actual in zip(item, _call)
+            ]):
+                return True
+        return False
+
 
 def _try_iter(obj):
     if obj is None:
@@ -1696,7 +1708,8 @@
     "as"; very useful if `patch` is creating a mock object for you.
 
     `patch` takes arbitrary keyword arguments. These will be passed to
-    the `Mock` (or `new_callable`) on construction.
+    `AsyncMock` if the patched object is asynchronous, to `MagicMock`
+    otherwise or to `new_callable` if specified.
 
     `patch.dict(...)`, `patch.multiple(...)` and `patch.object(...)` are
     available for alternate use-cases.
@@ -1820,11 +1833,27 @@
 
     def __exit__(self, *args):
         """Unpatch the dict."""
-        self._unpatch_dict()
+        if self._original is not None:
+            self._unpatch_dict()
         return False
 
-    start = __enter__
-    stop = __exit__
+
+    def start(self):
+        """Activate a patch, returning any created mock."""
+        result = self.__enter__()
+        _patch._active_patches.append(self)
+        return result
+
+
+    def stop(self):
+        """Stop an active patch."""
+        try:
+            _patch._active_patches.remove(self)
+        except ValueError:
+            # If the patch hasn't been started this will fail
+            return None
+
+        return self.__exit__(None, None, None)
 
 
 def _clear_dict(in_dict):
@@ -2096,7 +2125,7 @@
 
     def __init__(self, /, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        # asyncio.iscoroutinefunction() checks _is_coroutine property to say if an
+        # iscoroutinefunction() checks _is_coroutine property to say if an
         # object is a coroutine. Without this check it looks to see if it is a
         # function/method, which in this case it is not (since it is an
         # AsyncMock).
@@ -2111,7 +2140,7 @@
         self.__dict__['__code__'] = code_mock
 
     async def _execute_mock_call(self, /, *args, **kwargs):
-        # This is nearly just like super(), except for sepcial handling
+        # This is nearly just like super(), except for special handling
         # of coroutines
 
         _call = _Call((args, kwargs), two=True)
@@ -2132,7 +2161,7 @@
                     raise StopAsyncIteration
                 if _is_exception(result):
                     raise result
-            elif asyncio.iscoroutinefunction(effect):
+            elif iscoroutinefunction(effect):
                 result = await effect(*args, **kwargs)
             else:
                 result = effect(*args, **kwargs)
@@ -2144,7 +2173,7 @@
             return self.return_value
 
         if self._mock_wraps is not None:
-            if asyncio.iscoroutinefunction(self._mock_wraps):
+            if iscoroutinefunction(self._mock_wraps):
                 return await self._mock_wraps(*args, **kwargs)
             return self._mock_wraps(*args, **kwargs)
 
@@ -2179,9 +2208,9 @@
             msg = self._format_mock_failure_message(args, kwargs, action='await')
             return msg
 
-        expected = self._call_matcher((args, kwargs))
+        expected = self._call_matcher(_Call((args, kwargs), two=True))
         actual = self._call_matcher(self.await_args)
-        if expected != actual:
+        if actual != expected:
             cause = expected if isinstance(expected, Exception) else None
             raise AssertionError(_error_message()) from cause
 
@@ -2200,10 +2229,10 @@
         """
         Assert the mock has ever been awaited with the specified arguments.
         """
-        expected = self._call_matcher((args, kwargs))
+        expected = self._call_matcher(_Call((args, kwargs), two=True))
+        cause = expected if isinstance(expected, Exception) else None
         actual = [self._call_matcher(c) for c in self.await_args_list]
-        if expected not in actual:
-            cause = expected if isinstance(expected, Exception) else None
+        if cause or expected not in _AnyComparer(actual):
             expected_string = self._format_mock_call_signature(args, kwargs)
             raise AssertionError(
                 '%s await not found' % expected_string
@@ -2281,7 +2310,7 @@
     recognized as an async function, and the result of a call is an awaitable:
 
     >>> mock = AsyncMock()
-    >>> asyncio.iscoroutinefunction(mock)
+    >>> iscoroutinefunction(mock)
     True
     >>> inspect.isawaitable(mock())
     True
@@ -2408,12 +2437,10 @@
 
 
     def __eq__(self, other):
-        if other is ANY:
-            return True
         try:
             len_other = len(other)
         except TypeError:
-            return False
+            return NotImplemented
 
         self_name = ''
         if len(self) == 2:
@@ -2486,12 +2513,6 @@
         return tuple.__getattribute__(self, attr)
 
 
-    def count(self, /, *args, **kwargs):
-        return self.__getattr__('count')(*args, **kwargs)
-
-    def index(self, /, *args, **kwargs):
-        return self.__getattr__('index')(*args, **kwargs)
-
     def _get_call_arguments(self):
         if len(self) == 2:
             args, kwargs = self
@@ -2656,7 +2677,7 @@
 
             skipfirst = _must_skip(spec, entry, is_type)
             kwargs['_eat_self'] = skipfirst
-            if asyncio.iscoroutinefunction(original):
+            if iscoroutinefunction(original):
                 child_klass = AsyncMock
             else:
                 child_klass = MagicMock
@@ -2862,9 +2883,6 @@
         code_mock.co_flags = inspect.CO_ITERABLE_COROUTINE
         self.__dict__['__code__'] = code_mock
 
-    def __aiter__(self):
-        return self
-
     async def __anext__(self):
         try:
             return next(self.iterator)
diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py
index c7e3206..111317b 100644
--- a/Lib/unittest/result.py
+++ b/Lib/unittest/result.py
@@ -161,7 +161,7 @@
         """Tells whether or not this result was a success."""
         # The hasattr check is for test_result's OldResult test.  That
         # way this method works on objects that lack the attribute.
-        # (where would such result intances come from? old stored pickles?)
+        # (where would such result instances come from? old stored pickles?)
         return ((len(self.failures) == len(self.errors) == 0) and
                 (not hasattr(self, 'unexpectedSuccesses') or
                  len(self.unexpectedSuccesses) == 0))
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
index 3dedcbe..f855c4d 100644
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -8,7 +8,6 @@
 import warnings
 import weakref
 import inspect
-import types
 
 from copy import deepcopy
 from test import support
@@ -1351,20 +1350,6 @@
             pass
         self.assertRaises(TypeError, self.assertWarnsRegex, MyWarn, lambda: True)
 
-    def testAssertWarnsModifySysModules(self):
-        # bpo-29620: handle modified sys.modules during iteration
-        class Foo(types.ModuleType):
-            @property
-            def __warningregistry__(self):
-                sys.modules['@bar@'] = 'bar'
-
-        sys.modules['@foo@'] = Foo('foo')
-        try:
-            self.assertWarns(UserWarning, warnings.warn, 'expected')
-        finally:
-            del sys.modules['@foo@']
-            del sys.modules['@bar@']
-
     def testAssertRaisesRegexMismatch(self):
         def Stub():
             raise Exception('Unexpected')
diff --git a/Lib/unittest/test/test_program.py b/Lib/unittest/test/test_program.py
index 4a62ae1..eef82ff 100644
--- a/Lib/unittest/test/test_program.py
+++ b/Lib/unittest/test/test_program.py
@@ -188,8 +188,6 @@
         program = self.program
         for arg, attr in (('buffer', 'buffer'), ('failfast', 'failfast'),
                       ('catch', 'catchbreak')):
-            if attr == 'catch' and not hasInstallHandler:
-                continue
 
             setattr(program, attr, None)
             program.parseArgs([None])
diff --git a/Lib/unittest/test/test_runner.py b/Lib/unittest/test/test_runner.py
index 7d36340..dd9a1b6 100644
--- a/Lib/unittest/test/test_runner.py
+++ b/Lib/unittest/test/test_runner.py
@@ -592,7 +592,7 @@
         class TestableTest(unittest.TestCase):
             def setUp(self2):
                 self2.addCleanup(cleanup, 1, 2, function=3, self=4)
-                with self.assertWarns(DeprecationWarning):
+                with self.assertRaises(TypeError):
                     self2.addCleanup(function=cleanup, arg='hello')
             def testNothing(self):
                 pass
@@ -603,8 +603,7 @@
             unittest.TestCase.addCleanup(self=TestableTest(), function=cleanup)
         runTests(TestableTest)
         self.assertEqual(cleanups,
-                         [((), {'arg': 'hello'}),
-                          ((1, 2), {'function': 3, 'self': 4})])
+                         [((1, 2), {'function': 3, 'self': 4})])
 
     def test_with_errors_in_addClassCleanup(self):
         ordering = []
diff --git a/Lib/unittest/test/testmock/testasync.py b/Lib/unittest/test/testmock/testasync.py
index e84c66c..690ca4f 100644
--- a/Lib/unittest/test/testmock/testasync.py
+++ b/Lib/unittest/test/testmock/testasync.py
@@ -1,8 +1,12 @@
 import asyncio
+import gc
 import inspect
 import re
 import unittest
+from contextlib import contextmanager
 
+from asyncio import run, iscoroutinefunction
+from unittest import IsolatedAsyncioTestCase
 from unittest.mock import (ANY, call, AsyncMock, patch, MagicMock, Mock,
                            create_autospec, sentinel, _CallList)
 
@@ -12,49 +16,48 @@
 
 
 class AsyncClass:
-    def __init__(self):
-        pass
-    async def async_method(self):
-        pass
-    def normal_method(self):
-        pass
+    def __init__(self): pass
+    async def async_method(self): pass
+    def normal_method(self): pass
 
     @classmethod
-    async def async_class_method(cls):
-        pass
+    async def async_class_method(cls): pass
 
     @staticmethod
-    async def async_static_method():
-        pass
+    async def async_static_method(): pass
 
 
 class AwaitableClass:
-    def __await__(self):
-        yield
+    def __await__(self): yield
 
-async def async_func():
-    pass
+async def async_func(): pass
 
-async def async_func_args(a, b, *, c):
-    pass
+async def async_func_args(a, b, *, c): pass
 
-def normal_func():
-    pass
+def normal_func(): pass
 
 class NormalClass(object):
-    def a(self):
-        pass
+    def a(self): pass
 
 
 async_foo_name = f'{__name__}.AsyncClass'
 normal_foo_name = f'{__name__}.NormalClass'
 
 
+@contextmanager
+def assertNeverAwaited(test):
+    with test.assertWarnsRegex(RuntimeWarning, "was never awaited$"):
+        yield
+        # In non-CPython implementations of Python, this is needed because timely
+        # deallocation is not guaranteed by the garbage collector.
+        gc.collect()
+
+
 class AsyncPatchDecoratorTest(unittest.TestCase):
     def test_is_coroutine_function_patch(self):
         @patch.object(AsyncClass, 'async_method')
         def test_async(mock_method):
-            self.assertTrue(asyncio.iscoroutinefunction(mock_method))
+            self.assertTrue(iscoroutinefunction(mock_method))
         test_async()
 
     def test_is_async_patch(self):
@@ -62,13 +65,13 @@
         def test_async(mock_method):
             m = mock_method()
             self.assertTrue(inspect.isawaitable(m))
-            asyncio.run(m)
+            run(m)
 
         @patch(f'{async_foo_name}.async_method')
         def test_no_parent_attribute(mock_method):
             m = mock_method()
             self.assertTrue(inspect.isawaitable(m))
-            asyncio.run(m)
+            run(m)
 
         test_async()
         test_no_parent_attribute()
@@ -107,7 +110,7 @@
             self.assertEqual(await async_func(), 1)
             self.assertEqual(await async_func_args(1, 2, c=3), 2)
 
-        asyncio.run(test_async())
+        run(test_async())
         self.assertTrue(inspect.iscoroutinefunction(async_func))
 
 
@@ -115,7 +118,7 @@
     def test_is_async_function_cm(self):
         def test_async():
             with patch.object(AsyncClass, 'async_method') as mock_method:
-                self.assertTrue(asyncio.iscoroutinefunction(mock_method))
+                self.assertTrue(iscoroutinefunction(mock_method))
 
         test_async()
 
@@ -124,7 +127,7 @@
             with patch.object(AsyncClass, 'async_method') as mock_method:
                 m = mock_method()
                 self.assertTrue(inspect.isawaitable(m))
-                asyncio.run(m)
+                run(m)
 
         test_async()
 
@@ -141,31 +144,31 @@
                 self.assertIsInstance(async_func, AsyncMock)
             self.assertTrue(inspect.iscoroutinefunction(async_func))
 
-        asyncio.run(test_async())
+        run(test_async())
 
 
 class AsyncMockTest(unittest.TestCase):
     def test_iscoroutinefunction_default(self):
         mock = AsyncMock()
-        self.assertTrue(asyncio.iscoroutinefunction(mock))
+        self.assertTrue(iscoroutinefunction(mock))
 
     def test_iscoroutinefunction_function(self):
         async def foo(): pass
         mock = AsyncMock(foo)
-        self.assertTrue(asyncio.iscoroutinefunction(mock))
+        self.assertTrue(iscoroutinefunction(mock))
         self.assertTrue(inspect.iscoroutinefunction(mock))
 
     def test_isawaitable(self):
         mock = AsyncMock()
         m = mock()
         self.assertTrue(inspect.isawaitable(m))
-        asyncio.run(m)
+        run(m)
         self.assertIn('assert_awaited', dir(mock))
 
     def test_iscoroutinefunction_normal_function(self):
         def foo(): pass
         mock = AsyncMock(foo)
-        self.assertTrue(asyncio.iscoroutinefunction(mock))
+        self.assertTrue(iscoroutinefunction(mock))
         self.assertTrue(inspect.iscoroutinefunction(mock))
 
     def test_future_isfuture(self):
@@ -211,9 +214,9 @@
         self.assertEqual(spec.await_args_list, [])
         spec.assert_not_awaited()
 
-        asyncio.run(main())
+        run(main())
 
-        self.assertTrue(asyncio.iscoroutinefunction(spec))
+        self.assertTrue(iscoroutinefunction(spec))
         self.assertTrue(asyncio.iscoroutine(awaitable))
         self.assertEqual(spec.await_count, 1)
         self.assertEqual(spec.await_args, call(1, 2, c=3))
@@ -223,6 +226,10 @@
         spec.assert_awaited_with(1, 2, c=3)
         spec.assert_awaited()
 
+        with self.assertRaises(AssertionError):
+            spec.assert_any_await(e=1)
+
+
     def test_patch_with_autospec(self):
 
         async def test_async():
@@ -230,7 +237,7 @@
                 awaitable = mock_method(1, 2, c=3)
                 self.assertIsInstance(mock_method.mock, AsyncMock)
 
-                self.assertTrue(asyncio.iscoroutinefunction(mock_method))
+                self.assertTrue(iscoroutinefunction(mock_method))
                 self.assertTrue(asyncio.iscoroutine(awaitable))
                 self.assertTrue(inspect.isawaitable(awaitable))
 
@@ -255,7 +262,7 @@
             self.assertIsNone(mock_method.await_args)
             self.assertEqual(mock_method.await_args_list, [])
 
-        asyncio.run(test_async())
+        run(test_async())
 
 
 class AsyncSpecTest(unittest.TestCase):
@@ -278,8 +285,7 @@
         def inner_test(mock_type):
             async_mock = mock_type(spec=async_func)
             self.assertIsInstance(async_mock, mock_type)
-            with self.assertWarns(RuntimeWarning):
-                # Will raise a warning because never awaited
+            with assertNeverAwaited(self):
                 self.assertTrue(inspect.isawaitable(async_mock()))
 
             sync_mock = mock_type(spec=normal_func)
@@ -293,8 +299,7 @@
         def inner_test(mock_type):
             async_mock = mock_type(async_func)
             self.assertIsInstance(async_mock, mock_type)
-            with self.assertWarns(RuntimeWarning):
-                # Will raise a warning because never awaited
+            with assertNeverAwaited(self):
                 self.assertTrue(inspect.isawaitable(async_mock()))
 
             sync_mock = mock_type(normal_func)
@@ -309,14 +314,14 @@
         self.assertIsInstance(mock, AsyncMock)
         m = mock()
         self.assertTrue(inspect.isawaitable(m))
-        asyncio.run(m)
+        run(m)
 
     def test_spec_as_normal_positional_AsyncMock(self):
         mock = AsyncMock(normal_func)
         self.assertIsInstance(mock, AsyncMock)
         m = mock()
         self.assertTrue(inspect.isawaitable(m))
-        asyncio.run(m)
+        run(m)
 
     def test_spec_async_mock(self):
         @patch.object(AsyncClass, 'async_method', spec=True)
@@ -362,16 +367,17 @@
         @patch.object(AsyncClass, 'async_method', spec_set=True)
         def test_async(async_method):
             self.assertIsInstance(async_method, AsyncMock)
+        test_async()
 
     def test_is_async_AsyncMock(self):
         mock = AsyncMock(spec_set=AsyncClass.async_method)
-        self.assertTrue(asyncio.iscoroutinefunction(mock))
+        self.assertTrue(iscoroutinefunction(mock))
         self.assertIsInstance(mock, AsyncMock)
 
     def test_is_child_AsyncMock(self):
         mock = MagicMock(spec_set=AsyncClass)
-        self.assertTrue(asyncio.iscoroutinefunction(mock.async_method))
-        self.assertFalse(asyncio.iscoroutinefunction(mock.normal_method))
+        self.assertTrue(iscoroutinefunction(mock.async_method))
+        self.assertFalse(iscoroutinefunction(mock.normal_method))
         self.assertIsInstance(mock.async_method, AsyncMock)
         self.assertIsInstance(mock.normal_method, MagicMock)
         self.assertIsInstance(mock, MagicMock)
@@ -384,10 +390,9 @@
             self.assertIsInstance(cm, MagicMock)
 
 
-class AsyncArguments(unittest.IsolatedAsyncioTestCase):
+class AsyncArguments(IsolatedAsyncioTestCase):
     async def test_add_return_value(self):
-        async def addition(self, var):
-            return var + 1
+        async def addition(self, var): pass
 
         mock = AsyncMock(addition, return_value=10)
         output = await mock(5)
@@ -395,8 +400,7 @@
         self.assertEqual(output, 10)
 
     async def test_add_side_effect_exception(self):
-        async def addition(var):
-            return var + 1
+        async def addition(var): pass
         mock = AsyncMock(addition, side_effect=Exception('err'))
         with self.assertRaises(Exception):
             await mock(5)
@@ -542,24 +546,20 @@
         self.assertIsInstance(m_mock.__aenter__, AsyncMock)
         self.assertIsInstance(m_mock.__aexit__, AsyncMock)
         # AsyncMocks are also coroutine functions
-        self.assertTrue(asyncio.iscoroutinefunction(m_mock.__aenter__))
-        self.assertTrue(asyncio.iscoroutinefunction(m_mock.__aexit__))
+        self.assertTrue(iscoroutinefunction(m_mock.__aenter__))
+        self.assertTrue(iscoroutinefunction(m_mock.__aexit__))
 
 class AsyncContextManagerTest(unittest.TestCase):
-    class WithAsyncContextManager:
-        async def __aenter__(self, *args, **kwargs):
-            self.entered = True
-            return self
 
-        async def __aexit__(self, *args, **kwargs):
-            self.exited = True
+    class WithAsyncContextManager:
+        async def __aenter__(self, *args, **kwargs): pass
+
+        async def __aexit__(self, *args, **kwargs): pass
 
     class WithSyncContextManager:
-        def __enter__(self, *args, **kwargs):
-            return self
+        def __enter__(self, *args, **kwargs): pass
 
-        def __exit__(self, *args, **kwargs):
-            pass
+        def __exit__(self, *args, **kwargs): pass
 
     class ProductionCode:
         # Example real-world(ish) code
@@ -580,7 +580,7 @@
             response.json = AsyncMock(return_value={'json': 123})
             cm.__aenter__.return_value = response
             pc.session.post.return_value = cm
-            result = asyncio.run(pc.main())
+            result = run(pc.main())
             self.assertEqual(result, {'json': 123})
 
         for mock_type in [AsyncMock, MagicMock]:
@@ -599,7 +599,7 @@
                     called = True
                 return result
 
-            cm_result = asyncio.run(use_context_manager())
+            cm_result = run(use_context_manager())
             self.assertTrue(called)
             self.assertTrue(cm_mock.__aenter__.called)
             self.assertTrue(cm_mock.__aexit__.called)
@@ -612,6 +612,7 @@
             with self.subTest(f"test context manager magics with {mock_type}"):
                 inner_test(mock_type)
 
+
     def test_mock_customize_async_context_manager(self):
         instance = self.WithAsyncContextManager()
         mock_instance = MagicMock(instance)
@@ -623,7 +624,7 @@
             async with mock_instance as result:
                 return result
 
-        self.assertIs(asyncio.run(use_context_manager()), expected_result)
+        self.assertIs(run(use_context_manager()), expected_result)
 
     def test_mock_customize_async_context_manager_with_coroutine(self):
         enter_called = False
@@ -647,7 +648,7 @@
             async with mock_instance:
                 pass
 
-        asyncio.run(use_context_manager())
+        run(use_context_manager())
         self.assertTrue(enter_called)
         self.assertTrue(exit_called)
 
@@ -659,7 +660,7 @@
         instance = self.WithAsyncContextManager()
         mock_instance = MagicMock(instance)
         with self.assertRaises(TypeError):
-            asyncio.run(raise_in(mock_instance))
+            run(raise_in(mock_instance))
 
 
 class AsyncIteratorTest(unittest.TestCase):
@@ -667,23 +668,16 @@
         def __init__(self):
             self.items = ["foo", "NormalFoo", "baz"]
 
-        def __aiter__(self):
-            return self
+        def __aiter__(self): pass
 
-        async def __anext__(self):
-            try:
-                return self.items.pop()
-            except IndexError:
-                pass
-
-            raise StopAsyncIteration
+        async def __anext__(self): pass
 
     def test_aiter_set_return_value(self):
         mock_iter = AsyncMock(name="tester")
         mock_iter.__aiter__.return_value = [1, 2, 3]
         async def main():
             return [i async for i in mock_iter]
-        result = asyncio.run(main())
+        result = run(main())
         self.assertEqual(result, [1, 2, 3])
 
     def test_mock_aiter_and_anext_asyncmock(self):
@@ -692,11 +686,11 @@
             mock_instance = mock_type(instance)
             # Check that the mock and the real thing bahave the same
             # __aiter__ is not actually async, so not a coroutinefunction
-            self.assertFalse(asyncio.iscoroutinefunction(instance.__aiter__))
-            self.assertFalse(asyncio.iscoroutinefunction(mock_instance.__aiter__))
+            self.assertFalse(iscoroutinefunction(instance.__aiter__))
+            self.assertFalse(iscoroutinefunction(mock_instance.__aiter__))
             # __anext__ is async
-            self.assertTrue(asyncio.iscoroutinefunction(instance.__anext__))
-            self.assertTrue(asyncio.iscoroutinefunction(mock_instance.__anext__))
+            self.assertTrue(iscoroutinefunction(instance.__anext__))
+            self.assertTrue(iscoroutinefunction(mock_instance.__anext__))
 
         for mock_type in [AsyncMock, MagicMock]:
             with self.subTest(f"test aiter and anext corourtine with {mock_type}"):
@@ -714,18 +708,18 @@
         expected = ["FOO", "BAR", "BAZ"]
         def test_default(mock_type):
             mock_instance = mock_type(self.WithAsyncIterator())
-            self.assertEqual(asyncio.run(iterate(mock_instance)), [])
+            self.assertEqual(run(iterate(mock_instance)), [])
 
 
         def test_set_return_value(mock_type):
             mock_instance = mock_type(self.WithAsyncIterator())
             mock_instance.__aiter__.return_value = expected[:]
-            self.assertEqual(asyncio.run(iterate(mock_instance)), expected)
+            self.assertEqual(run(iterate(mock_instance)), expected)
 
         def test_set_return_value_iter(mock_type):
             mock_instance = mock_type(self.WithAsyncIterator())
             mock_instance.__aiter__.return_value = iter(expected[:])
-            self.assertEqual(asyncio.run(iterate(mock_instance)), expected)
+            self.assertEqual(run(iterate(mock_instance)), expected)
 
         for mock_type in [AsyncMock, MagicMock]:
             with self.subTest(f"default value with {mock_type}"):
@@ -750,10 +744,9 @@
 
     def test_assert_called_but_not_awaited(self):
         mock = AsyncMock(AsyncClass)
-        with self.assertWarns(RuntimeWarning):
-            # Will raise a warning because never awaited
+        with assertNeverAwaited(self):
             mock.async_method()
-        self.assertTrue(asyncio.iscoroutinefunction(mock.async_method))
+        self.assertTrue(iscoroutinefunction(mock.async_method))
         mock.async_method.assert_called()
         mock.async_method.assert_called_once()
         mock.async_method.assert_called_once_with()
@@ -771,7 +764,7 @@
         with self.assertRaises(AssertionError):
             mock.async_method.assert_awaited()
 
-        asyncio.run(self._await_coroutine(mock_coroutine))
+        run(self._await_coroutine(mock_coroutine))
         # Assert we haven't re-called the function
         mock.async_method.assert_called_once()
         mock.async_method.assert_awaited()
@@ -785,21 +778,21 @@
         with self.assertRaises(AssertionError):
             self.mock.assert_called()
 
-        asyncio.run(self._runnable_test())
+        run(self._runnable_test())
         self.mock.assert_called_once()
         self.mock.assert_awaited_once()
 
     def test_assert_called_twice_and_awaited_once(self):
         mock = AsyncMock(AsyncClass)
         coroutine = mock.async_method()
-        with self.assertWarns(RuntimeWarning):
-            # The first call will be awaited so no warning there
-            # But this call will never get awaited, so it will warn here
+        # The first call will be awaited so no warning there
+        # But this call will never get awaited, so it will warn here
+        with assertNeverAwaited(self):
             mock.async_method()
         with self.assertRaises(AssertionError):
             mock.async_method.assert_awaited()
         mock.async_method.assert_called()
-        asyncio.run(self._await_coroutine(coroutine))
+        run(self._await_coroutine(coroutine))
         mock.async_method.assert_awaited()
         mock.async_method.assert_awaited_once()
 
@@ -807,10 +800,10 @@
         mock = AsyncMock(AsyncClass)
         coroutine = mock.async_method()
         mock.async_method.assert_called_once()
-        asyncio.run(self._await_coroutine(coroutine))
+        run(self._await_coroutine(coroutine))
         with self.assertRaises(RuntimeError):
             # Cannot reuse already awaited coroutine
-            asyncio.run(self._await_coroutine(coroutine))
+            run(self._await_coroutine(coroutine))
         mock.async_method.assert_awaited()
 
     def test_assert_awaited_but_not_called(self):
@@ -820,7 +813,7 @@
             self.mock.assert_called()
         with self.assertRaises(TypeError):
             # You cannot await an AsyncMock, it must be a coroutine
-            asyncio.run(self._await_coroutine(self.mock))
+            run(self._await_coroutine(self.mock))
 
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited()
@@ -829,38 +822,34 @@
 
     def test_assert_has_calls_not_awaits(self):
         kalls = [call('foo')]
-        with self.assertWarns(RuntimeWarning):
-            # Will raise a warning because never awaited
+        with assertNeverAwaited(self):
             self.mock('foo')
         self.mock.assert_has_calls(kalls)
         with self.assertRaises(AssertionError):
             self.mock.assert_has_awaits(kalls)
 
     def test_assert_has_mock_calls_on_async_mock_no_spec(self):
-        with self.assertWarns(RuntimeWarning):
-            # Will raise a warning because never awaited
+        with assertNeverAwaited(self):
             self.mock()
         kalls_empty = [('', (), {})]
         self.assertEqual(self.mock.mock_calls, kalls_empty)
 
-        with self.assertWarns(RuntimeWarning):
-            # Will raise a warning because never awaited
+        with assertNeverAwaited(self):
             self.mock('foo')
+        with assertNeverAwaited(self):
             self.mock('baz')
         mock_kalls = ([call(), call('foo'), call('baz')])
         self.assertEqual(self.mock.mock_calls, mock_kalls)
 
     def test_assert_has_mock_calls_on_async_mock_with_spec(self):
         a_class_mock = AsyncMock(AsyncClass)
-        with self.assertWarns(RuntimeWarning):
-            # Will raise a warning because never awaited
+        with assertNeverAwaited(self):
             a_class_mock.async_method()
         kalls_empty = [('', (), {})]
         self.assertEqual(a_class_mock.async_method.mock_calls, kalls_empty)
         self.assertEqual(a_class_mock.mock_calls, [call.async_method()])
 
-        with self.assertWarns(RuntimeWarning):
-            # Will raise a warning because never awaited
+        with assertNeverAwaited(self):
             a_class_mock.async_method(1, 2, 3, a=4, b=5)
         method_kalls = [call(), call(1, 2, 3, a=4, b=5)]
         mock_kalls = [call.async_method(), call.async_method(1, 2, 3, a=4, b=5)]
@@ -868,9 +857,9 @@
         self.assertEqual(a_class_mock.mock_calls, mock_kalls)
 
     def test_async_method_calls_recorded(self):
-        with self.assertWarns(RuntimeWarning):
-            # Will raise warnings because never awaited
+        with assertNeverAwaited(self):
             self.mock.something(3, fish=None)
+        with assertNeverAwaited(self):
             self.mock.something_else.something(6, cake=sentinel.Cake)
 
         self.assertEqual(self.mock.method_calls, [
@@ -892,19 +881,20 @@
                 self.assertEqual(attr, [])
 
         assert_attrs(self.mock)
-        with self.assertWarns(RuntimeWarning):
-            # Will raise warnings because never awaited
+        with assertNeverAwaited(self):
             self.mock()
+        with assertNeverAwaited(self):
             self.mock(1, 2)
+        with assertNeverAwaited(self):
             self.mock(a=3)
 
         self.mock.reset_mock()
         assert_attrs(self.mock)
 
         a_mock = AsyncMock(AsyncClass)
-        with self.assertWarns(RuntimeWarning):
-            # Will raise warnings because never awaited
+        with assertNeverAwaited(self):
             a_mock.async_method()
+        with assertNeverAwaited(self):
             a_mock.async_method(1, a=3)
 
         a_mock.reset_mock()
@@ -914,17 +904,17 @@
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited()
 
-        asyncio.run(self._runnable_test())
+        run(self._runnable_test())
         self.mock.assert_awaited()
 
     def test_assert_awaited_once(self):
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited_once()
 
-        asyncio.run(self._runnable_test())
+        run(self._runnable_test())
         self.mock.assert_awaited_once()
 
-        asyncio.run(self._runnable_test())
+        run(self._runnable_test())
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited_once()
 
@@ -933,15 +923,15 @@
         with self.assertRaisesRegex(AssertionError, msg):
             self.mock.assert_awaited_with('foo')
 
-        asyncio.run(self._runnable_test())
+        run(self._runnable_test())
         msg = 'expected await not found'
         with self.assertRaisesRegex(AssertionError, msg):
             self.mock.assert_awaited_with('foo')
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         self.mock.assert_awaited_with('foo')
 
-        asyncio.run(self._runnable_test('SomethingElse'))
+        run(self._runnable_test('SomethingElse'))
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited_with('foo')
 
@@ -949,10 +939,10 @@
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited_once_with('foo')
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         self.mock.assert_awaited_once_with('foo')
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         with self.assertRaises(AssertionError):
             self.mock.assert_awaited_once_with('foo')
 
@@ -960,14 +950,14 @@
         with self.assertRaises(AssertionError):
             self.mock.assert_any_await('foo')
 
-        asyncio.run(self._runnable_test('baz'))
+        run(self._runnable_test('baz'))
         with self.assertRaises(AssertionError):
             self.mock.assert_any_await('foo')
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         self.mock.assert_any_await('foo')
 
-        asyncio.run(self._runnable_test('SomethingElse'))
+        run(self._runnable_test('SomethingElse'))
         self.mock.assert_any_await('foo')
 
     def test_assert_has_awaits_no_order(self):
@@ -977,43 +967,67 @@
             self.mock.assert_has_awaits(calls)
         self.assertEqual(len(cm.exception.args), 1)
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         with self.assertRaises(AssertionError):
             self.mock.assert_has_awaits(calls)
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         with self.assertRaises(AssertionError):
             self.mock.assert_has_awaits(calls)
 
-        asyncio.run(self._runnable_test('baz'))
+        run(self._runnable_test('baz'))
         self.mock.assert_has_awaits(calls)
 
-        asyncio.run(self._runnable_test('SomethingElse'))
+        run(self._runnable_test('SomethingElse'))
         self.mock.assert_has_awaits(calls)
 
+    def test_awaits_asserts_with_any(self):
+        class Foo:
+            def __eq__(self, other): pass
+
+        run(self._runnable_test(Foo(), 1))
+
+        self.mock.assert_has_awaits([call(ANY, 1)])
+        self.mock.assert_awaited_with(ANY, 1)
+        self.mock.assert_any_await(ANY, 1)
+
+    def test_awaits_asserts_with_spec_and_any(self):
+        class Foo:
+            def __eq__(self, other): pass
+
+        mock_with_spec = AsyncMock(spec=Foo)
+
+        async def _custom_mock_runnable_test(*args):
+            await mock_with_spec(*args)
+
+        run(_custom_mock_runnable_test(Foo(), 1))
+        mock_with_spec.assert_has_awaits([call(ANY, 1)])
+        mock_with_spec.assert_awaited_with(ANY, 1)
+        mock_with_spec.assert_any_await(ANY, 1)
+
     def test_assert_has_awaits_ordered(self):
         calls = [call('foo'), call('baz')]
         with self.assertRaises(AssertionError):
             self.mock.assert_has_awaits(calls, any_order=True)
 
-        asyncio.run(self._runnable_test('baz'))
+        run(self._runnable_test('baz'))
         with self.assertRaises(AssertionError):
             self.mock.assert_has_awaits(calls, any_order=True)
 
-        asyncio.run(self._runnable_test('bamf'))
+        run(self._runnable_test('bamf'))
         with self.assertRaises(AssertionError):
             self.mock.assert_has_awaits(calls, any_order=True)
 
-        asyncio.run(self._runnable_test('foo'))
+        run(self._runnable_test('foo'))
         self.mock.assert_has_awaits(calls, any_order=True)
 
-        asyncio.run(self._runnable_test('qux'))
+        run(self._runnable_test('qux'))
         self.mock.assert_has_awaits(calls, any_order=True)
 
     def test_assert_not_awaited(self):
         self.mock.assert_not_awaited()
 
-        asyncio.run(self._runnable_test())
+        run(self._runnable_test())
         with self.assertRaises(AssertionError):
             self.mock.assert_not_awaited()
 
@@ -1021,7 +1035,7 @@
         async def f(x=None): pass
 
         self.mock = AsyncMock(spec=f)
-        asyncio.run(self._runnable_test(1))
+        run(self._runnable_test(1))
 
         with self.assertRaisesRegex(
                 AssertionError,
diff --git a/Lib/unittest/test/testmock/testhelpers.py b/Lib/unittest/test/testmock/testhelpers.py
index f3c7acb..9e7ec5d 100644
--- a/Lib/unittest/test/testmock/testhelpers.py
+++ b/Lib/unittest/test/testmock/testhelpers.py
@@ -64,7 +64,28 @@
             self.assertEqual(expected, mock.mock_calls)
             self.assertEqual(mock.mock_calls, expected)
 
+    def test_any_no_spec(self):
+        # This is a regression test for bpo-37555
+        class Foo:
+            def __eq__(self, other): pass
 
+        mock = Mock()
+        mock(Foo(), 1)
+        mock.assert_has_calls([call(ANY, 1)])
+        mock.assert_called_with(ANY, 1)
+        mock.assert_any_call(ANY, 1)
+
+    def test_any_and_spec_set(self):
+        # This is a regression test for bpo-37555
+        class Foo:
+            def __eq__(self, other): pass
+
+        mock = Mock(spec=Foo)
+
+        mock(Foo(), 1)
+        mock.assert_has_calls([call(ANY, 1)])
+        mock.assert_called_with(ANY, 1)
+        mock.assert_any_call(ANY, 1)
 
 class CallTest(unittest.TestCase):
 
diff --git a/Lib/unittest/test/testmock/testmagicmethods.py b/Lib/unittest/test/testmock/testmagicmethods.py
index 76b3a56..a4feae7 100644
--- a/Lib/unittest/test/testmock/testmagicmethods.py
+++ b/Lib/unittest/test/testmock/testmagicmethods.py
@@ -1,8 +1,7 @@
-import asyncio
 import math
 import unittest
 import os
-import sys
+from asyncio import iscoroutinefunction
 from unittest.mock import AsyncMock, Mock, MagicMock, _magics
 
 
@@ -286,8 +285,8 @@
         self.assertEqual(math.trunc(mock), mock.__trunc__())
         self.assertEqual(math.floor(mock), mock.__floor__())
         self.assertEqual(math.ceil(mock), mock.__ceil__())
-        self.assertTrue(asyncio.iscoroutinefunction(mock.__aexit__))
-        self.assertTrue(asyncio.iscoroutinefunction(mock.__aenter__))
+        self.assertTrue(iscoroutinefunction(mock.__aexit__))
+        self.assertTrue(iscoroutinefunction(mock.__aenter__))
         self.assertIsInstance(mock.__aenter__, AsyncMock)
         self.assertIsInstance(mock.__aexit__, AsyncMock)
 
@@ -312,8 +311,8 @@
         self.assertEqual(math.trunc(mock), mock.__trunc__())
         self.assertEqual(math.floor(mock), mock.__floor__())
         self.assertEqual(math.ceil(mock), mock.__ceil__())
-        self.assertTrue(asyncio.iscoroutinefunction(mock.__aexit__))
-        self.assertTrue(asyncio.iscoroutinefunction(mock.__aenter__))
+        self.assertTrue(iscoroutinefunction(mock.__aexit__))
+        self.assertTrue(iscoroutinefunction(mock.__aenter__))
         self.assertIsInstance(mock.__aenter__, AsyncMock)
         self.assertIsInstance(mock.__aexit__, AsyncMock)
 
@@ -429,7 +428,6 @@
             self.assertEqual(dir(mock), ['foo'])
 
 
-    @unittest.skipIf('PyPy' in sys.version, "This fails differently on pypy")
     def test_bound_methods(self):
         m = Mock()
 
diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py
index 1cde45e..ce674e7 100644
--- a/Lib/unittest/test/testmock/testmock.py
+++ b/Lib/unittest/test/testmock/testmock.py
@@ -3,6 +3,7 @@
 import sys
 import tempfile
 
+from test.support import ALWAYS_EQ
 import unittest
 from unittest.test.testmock.support import is_instance
 from unittest import mock
@@ -262,7 +263,7 @@
 
         ret_val = mock(sentinel.Arg)
         self.assertTrue(mock.called, "called not set")
-        self.assertEqual(mock.call_count, 1, "call_count incoreect")
+        self.assertEqual(mock.call_count, 1, "call_count incorrect")
         self.assertEqual(mock.call_args, ((sentinel.Arg,), {}),
                          "call_args not set")
         self.assertEqual(mock.call_args.args, (sentinel.Arg,),
@@ -322,6 +323,8 @@
         self.assertFalse(mm != mock.ANY)
         self.assertTrue(mock.ANY == mm)
         self.assertFalse(mock.ANY != mm)
+        self.assertTrue(mm == ALWAYS_EQ)
+        self.assertFalse(mm != ALWAYS_EQ)
 
         call1 = mock.call(mock.MagicMock())
         call2 = mock.call(mock.ANY)
@@ -330,6 +333,11 @@
         self.assertTrue(call2 == call1)
         self.assertFalse(call2 != call1)
 
+        self.assertTrue(call1 == ALWAYS_EQ)
+        self.assertFalse(call1 != ALWAYS_EQ)
+        self.assertFalse(call1 == 1)
+        self.assertTrue(call1 != 1)
+
 
     def test_assert_called_with(self):
         mock = Mock()
@@ -707,6 +715,57 @@
         self.assertRaises(StopIteration, mock.method)
 
 
+    def test_magic_method_wraps_dict(self):
+        # bpo-25597: MagicMock with wrap doesn't call wrapped object's
+        # method for magic methods with default values.
+        data = {'foo': 'bar'}
+
+        wrapped_dict = MagicMock(wraps=data)
+        self.assertEqual(wrapped_dict.get('foo'), 'bar')
+        # Accessing key gives a MagicMock
+        self.assertIsInstance(wrapped_dict['foo'], MagicMock)
+        # __contains__ method has a default value of False
+        self.assertFalse('foo' in wrapped_dict)
+
+        # return_value is non-sentinel and takes precedence over wrapped value.
+        wrapped_dict.get.return_value = 'return_value'
+        self.assertEqual(wrapped_dict.get('foo'), 'return_value')
+
+        # return_value is sentinel and hence wrapped value is returned.
+        wrapped_dict.get.return_value = sentinel.DEFAULT
+        self.assertEqual(wrapped_dict.get('foo'), 'bar')
+
+        self.assertEqual(wrapped_dict.get('baz'), None)
+        self.assertIsInstance(wrapped_dict['baz'], MagicMock)
+        self.assertFalse('bar' in wrapped_dict)
+
+        data['baz'] = 'spam'
+        self.assertEqual(wrapped_dict.get('baz'), 'spam')
+        self.assertIsInstance(wrapped_dict['baz'], MagicMock)
+        self.assertFalse('bar' in wrapped_dict)
+
+        del data['baz']
+        self.assertEqual(wrapped_dict.get('baz'), None)
+
+
+    def test_magic_method_wraps_class(self):
+
+        class Foo:
+
+            def __getitem__(self, index):
+                return index
+
+            def __custom_method__(self):
+                return "foo"
+
+
+        klass = MagicMock(wraps=Foo)
+        obj = klass()
+        self.assertEqual(obj.__getitem__(2), 2)
+        self.assertEqual(obj[2], 2)
+        self.assertEqual(obj.__custom_method__(), "foo")
+
+
     def test_exceptional_side_effect(self):
         mock = Mock(side_effect=AttributeError)
         self.assertRaises(AttributeError, mock)
@@ -1628,11 +1687,23 @@
         self.assertNotEqual(m.side_effect, None)
 
     def test_reset_sideeffect(self):
-        m = Mock(return_value=10, side_effect=[2,3])
+        m = Mock(return_value=10, side_effect=[2, 3])
         m.reset_mock(side_effect=True)
         self.assertEqual(m.return_value, 10)
         self.assertEqual(m.side_effect, None)
 
+    def test_reset_return_with_children(self):
+        m = MagicMock(f=MagicMock(return_value=1))
+        self.assertEqual(m.f(), 1)
+        m.reset_mock(return_value=True)
+        self.assertNotEqual(m.f(), 1)
+
+    def test_reset_return_with_children_side_effect(self):
+        m = MagicMock(f=MagicMock(side_effect=[2, 3]))
+        self.assertNotEqual(m.f.side_effect, None)
+        m.reset_mock(side_effect=True)
+        self.assertEqual(m.f.side_effect, None)
+
     def test_mock_add_spec(self):
         class _One(object):
             one = 1
@@ -1801,6 +1872,11 @@
         with self.assertRaises(StopIteration):
             next(f1)
 
+    def test_mock_open_next_with_readline_with_return_value(self):
+        mopen = mock.mock_open(read_data='foo\nbarn')
+        mopen.return_value.readline.return_value = 'abc'
+        self.assertEqual('abc', next(mopen()))
+
     def test_mock_open_write(self):
         # Test exception in file writing write()
         mock_namedtemp = mock.mock_open(mock.MagicMock(name='JLV'))
diff --git a/Lib/unittest/test/testmock/testpatch.py b/Lib/unittest/test/testmock/testpatch.py
index e065a2c..d8c1515 100644
--- a/Lib/unittest/test/testmock/testpatch.py
+++ b/Lib/unittest/test/testmock/testpatch.py
@@ -4,6 +4,7 @@
 
 import os
 import sys
+from collections import OrderedDict
 
 import unittest
 from unittest.test.testmock import support
@@ -769,6 +770,14 @@
         self.assertEqual(d, original)
 
 
+    def test_patch_dict_stop_without_start(self):
+        d = {'foo': 'bar'}
+        original = d.copy()
+        patcher = patch.dict(d, [('spam', 'eggs')], clear=True)
+        self.assertFalse(patcher.stop())
+        self.assertEqual(d, original)
+
+
     def test_patch_dict_class_decorator(self):
         this = self
         d = {'spam': 'eggs'}
@@ -1807,6 +1816,56 @@
 
         self.assertEqual(stopped, ["three", "two", "one"])
 
+    def test_patch_dict_stopall(self):
+        dic1 = {}
+        dic2 = {1: 'a'}
+        dic3 = {1: 'A', 2: 'B'}
+        origdic1 = dic1.copy()
+        origdic2 = dic2.copy()
+        origdic3 = dic3.copy()
+        patch.dict(dic1, {1: 'I', 2: 'II'}).start()
+        patch.dict(dic2, {2: 'b'}).start()
+
+        @patch.dict(dic3)
+        def patched():
+            del dic3[1]
+
+        patched()
+        self.assertNotEqual(dic1, origdic1)
+        self.assertNotEqual(dic2, origdic2)
+        self.assertEqual(dic3, origdic3)
+
+        patch.stopall()
+
+        self.assertEqual(dic1, origdic1)
+        self.assertEqual(dic2, origdic2)
+        self.assertEqual(dic3, origdic3)
+
+
+    def test_patch_and_patch_dict_stopall(self):
+        original_unlink = os.unlink
+        original_chdir = os.chdir
+        dic1 = {}
+        dic2 = {1: 'A', 2: 'B'}
+        origdic1 = dic1.copy()
+        origdic2 = dic2.copy()
+
+        patch('os.unlink', something).start()
+        patch('os.chdir', something_else).start()
+        patch.dict(dic1, {1: 'I', 2: 'II'}).start()
+        patch.dict(dic2).start()
+        del dic2[1]
+
+        self.assertIsNot(os.unlink, original_unlink)
+        self.assertIsNot(os.chdir, original_chdir)
+        self.assertNotEqual(dic1, origdic1)
+        self.assertNotEqual(dic2, origdic2)
+        patch.stopall()
+        self.assertIs(os.unlink, original_unlink)
+        self.assertIs(os.chdir, original_chdir)
+        self.assertEqual(dic1, origdic1)
+        self.assertEqual(dic2, origdic2)
+
 
     def test_special_attrs(self):
         def foo(x=0):
@@ -1834,6 +1893,25 @@
             self.assertEqual(foo(), 1)
         self.assertEqual(foo(), 0)
 
+    def test_patch_orderdict(self):
+        foo = OrderedDict()
+        foo['a'] = object()
+        foo['b'] = 'python'
+
+        original = foo.copy()
+        update_values = list(zip('cdefghijklmnopqrstuvwxyz', range(26)))
+        patched_values = list(foo.items()) + update_values
+
+        with patch.dict(foo, OrderedDict(update_values)):
+            self.assertEqual(list(foo.items()), patched_values)
+
+        self.assertEqual(foo, original)
+
+        with patch.dict(foo, update_values):
+            self.assertEqual(list(foo.items()), patched_values)
+
+        self.assertEqual(foo, original)
+
     def test_dotted_but_module_not_loaded(self):
         # This exercises the AttributeError branch of _dot_lookup.
 
diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
index e2b6f13..ea897c3 100644
--- a/Lib/urllib/parse.py
+++ b/Lib/urllib/parse.py
@@ -29,6 +29,7 @@
 
 import re
 import sys
+import types
 import collections
 import warnings
 
@@ -176,6 +177,8 @@
                 raise ValueError("Port out of range 0-65535")
         return port
 
+    __class_getitem__ = classmethod(types.GenericAlias)
+
 
 class _NetlocResultMixinStr(_NetlocResultMixinBase, _ResultMixinStr):
     __slots__ = ()
@@ -366,9 +369,23 @@
 def urlparse(url, scheme='', allow_fragments=True):
     """Parse a URL into 6 components:
     <scheme>://<netloc>/<path>;<params>?<query>#<fragment>
-    Return a 6-tuple: (scheme, netloc, path, params, query, fragment).
-    Note that we don't break the components up in smaller bits
-    (e.g. netloc is a single string) and we don't expand % escapes."""
+
+    The result is a named 6-tuple with fields corresponding to the
+    above. It is either a ParseResult or ParseResultBytes object,
+    depending on the type of the url parameter.
+
+    The username, password, hostname, and port sub-components of netloc
+    can also be accessed as attributes of the returned object.
+
+    The scheme argument provides the default value of the scheme
+    component when no scheme is found in url.
+
+    If allow_fragments is False, no attempt is made to separate the
+    fragment component from the previous component, which can be either
+    path or query.
+
+    Note that % escapes are not expanded.
+    """
     url, scheme, _coerce_result = _coerce_args(url, scheme)
     splitresult = urlsplit(url, scheme, allow_fragments)
     scheme, netloc, url, query, fragment = splitresult
@@ -417,9 +434,24 @@
 def urlsplit(url, scheme='', allow_fragments=True):
     """Parse a URL into 5 components:
     <scheme>://<netloc>/<path>?<query>#<fragment>
-    Return a 5-tuple: (scheme, netloc, path, query, fragment).
-    Note that we don't break the components up in smaller bits
-    (e.g. netloc is a single string) and we don't expand % escapes."""
+
+    The result is a named 5-tuple with fields corresponding to the
+    above. It is either a SplitResult or SplitResultBytes object,
+    depending on the type of the url parameter.
+
+    The username, password, hostname, and port sub-components of netloc
+    can also be accessed as attributes of the returned object.
+
+    The scheme argument provides the default value of the scheme
+    component when no scheme is found in url.
+
+    If allow_fragments is False, no attempt is made to separate the
+    fragment component from the previous component, which can be either
+    path or query.
+
+    Note that % escapes are not expanded.
+    """
+
     url, scheme, _coerce_result = _coerce_args(url, scheme)
     allow_fragments = bool(allow_fragments)
     key = url, scheme, allow_fragments, type(url), type(scheme)
@@ -431,31 +463,11 @@
     netloc = query = fragment = ''
     i = url.find(':')
     if i > 0:
-        if url[:i] == 'http': # optimize the common case
-            url = url[i+1:]
-            if url[:2] == '//':
-                netloc, url = _splitnetloc(url, 2)
-                if (('[' in netloc and ']' not in netloc) or
-                        (']' in netloc and '[' not in netloc)):
-                    raise ValueError("Invalid IPv6 URL")
-            if allow_fragments and '#' in url:
-                url, fragment = url.split('#', 1)
-            if '?' in url:
-                url, query = url.split('?', 1)
-            _checknetloc(netloc)
-            v = SplitResult('http', netloc, url, query, fragment)
-            _parse_cache[key] = v
-            return _coerce_result(v)
         for c in url[:i]:
             if c not in scheme_chars:
                 break
         else:
-            # make sure "url" is not actually a port number (in which case
-            # "scheme" is really part of the path)
-            rest = url[i+1:]
-            if not rest or any(c not in '0123456789' for c in rest):
-                # not a port number
-                scheme, url = url[:i].lower(), rest
+            scheme, url = url[:i].lower(), url[i+1:]
 
     if url[:2] == '//':
         netloc, url = _splitnetloc(url, 2)
@@ -631,6 +643,8 @@
 
     unquote('abc%20def') -> 'abc def'.
     """
+    if isinstance(string, bytes):
+        return unquote_to_bytes(string).decode(encoding, errors)
     if '%' not in string:
         string.split
         return string
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index e440738..a8c870b 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -163,18 +163,10 @@
 
     The *cadefault* parameter is ignored.
 
-    This function always returns an object which can work as a context
-    manager and has methods such as
 
-    * geturl() - return the URL of the resource retrieved, commonly used to
-      determine if a redirect was followed
-
-    * info() - return the meta-information of the page, such as headers, in the
-      form of an email.message_from_string() instance (see Quick Reference to
-      HTTP Headers)
-
-    * getcode() - return the HTTP status code of the response.  Raises URLError
-      on errors.
+    This function always returns an object which can work as a
+    context manager and has the properties url, headers, and status.
+    See urllib.response.addinfourl for more detail on these properties.
 
     For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse
     object slightly modified. In addition to the three new methods above, the
@@ -1819,7 +1811,7 @@
                 hdrs = fp.info()
                 fp.close()
                 return url2pathname(_splithost(url1)[1]), hdrs
-            except OSError as msg:
+            except OSError:
                 pass
         fp = self.open(url, data)
         try:
@@ -2604,6 +2596,11 @@
                 mask = 8 * (m.group(1).count('.') + 1)
             else:
                 mask = int(mask[1:])
+
+            if mask < 0 or mask > 32:
+                # System libraries ignore invalid prefix lengths
+                continue
+
             mask = 32 - mask
 
             if (hostIP >> mask) == (base >> mask):
diff --git a/Lib/urllib/response.py b/Lib/urllib/response.py
index 4778118..5a2c3cc 100644
--- a/Lib/urllib/response.py
+++ b/Lib/urllib/response.py
@@ -73,6 +73,10 @@
         self.url = url
         self.code = code
 
+    @property
+    def status(self):
+        return self.code
+
     def getcode(self):
         return self.code
 
diff --git a/Lib/uuid.py b/Lib/uuid.py
index 188e16b..5ae0a3e 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -45,7 +45,6 @@
 """
 
 import os
-import platform
 import sys
 
 from enum import Enum
@@ -54,10 +53,19 @@
 __author__ = 'Ka-Ping Yee <ping@zesty.ca>'
 
 # The recognized platforms - known behaviors
-_AIX     = platform.system() == 'AIX'
-_DARWIN  = platform.system() == 'Darwin'
-_LINUX   = platform.system() == 'Linux'
-_WINDOWS = platform.system() == 'Windows'
+if sys.platform in ('win32', 'darwin'):
+    _AIX = _LINUX = False
+else:
+    import platform
+    _platform_system = platform.system()
+    _AIX     = _platform_system == 'AIX'
+    _LINUX   = _platform_system == 'Linux'
+
+_MAC_DELIM = b':'
+_MAC_OMITS_LEADING_ZEROES = False
+if _AIX:
+    _MAC_DELIM = b'.'
+    _MAC_OMITS_LEADING_ZEROES = True
 
 RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [
     'reserved for NCS compatibility', 'specified in RFC 4122',
@@ -347,24 +355,32 @@
         if self.variant == RFC_4122:
             return int((self.int >> 76) & 0xf)
 
-def _popen(command, *args):
-    import os, shutil, subprocess
-    executable = shutil.which(command)
-    if executable is None:
-        path = os.pathsep.join(('/sbin', '/usr/sbin'))
-        executable = shutil.which(command, path=path)
+
+def _get_command_stdout(command, *args):
+    import io, os, shutil, subprocess
+
+    try:
+        path_dirs = os.environ.get('PATH', os.defpath).split(os.pathsep)
+        path_dirs.extend(['/sbin', '/usr/sbin'])
+        executable = shutil.which(command, path=os.pathsep.join(path_dirs))
         if executable is None:
             return None
-    # LC_ALL=C to ensure English output, stderr=DEVNULL to prevent output
-    # on stderr (Note: we don't have an example where the words we search
-    # for are actually localized, but in theory some system could do so.)
-    env = dict(os.environ)
-    env['LC_ALL'] = 'C'
-    proc = subprocess.Popen((executable,) + args,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.DEVNULL,
-                            env=env)
-    return proc
+        # LC_ALL=C to ensure English output, stderr=DEVNULL to prevent output
+        # on stderr (Note: we don't have an example where the words we search
+        # for are actually localized, but in theory some system could do so.)
+        env = dict(os.environ)
+        env['LC_ALL'] = 'C'
+        proc = subprocess.Popen((executable,) + args,
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.DEVNULL,
+                                env=env)
+        if not proc:
+            return None
+        stdout, stderr = proc.communicate()
+        return io.BytesIO(stdout)
+    except (OSError, subprocess.SubprocessError):
+        return None
+
 
 # For MAC (a.k.a. IEEE 802, or EUI-48) addresses, the second least significant
 # bit of the first octet signifies whether the MAC address is universally (0)
@@ -384,40 +400,114 @@
 def _is_universal(mac):
     return not (mac & (1 << 41))
 
-def _find_mac(command, args, hw_identifiers, get_index):
+
+def _find_mac_near_keyword(command, args, keywords, get_word_index):
+    """Searches a command's output for a MAC address near a keyword.
+
+    Each line of words in the output is case-insensitively searched for
+    any of the given keywords.  Upon a match, get_word_index is invoked
+    to pick a word from the line, given the index of the match.  For
+    example, lambda i: 0 would get the first word on the line, while
+    lambda i: i - 1 would get the word preceding the keyword.
+    """
+    stdout = _get_command_stdout(command, args)
+    if stdout is None:
+        return None
+
     first_local_mac = None
-    try:
-        proc = _popen(command, *args.split())
-        if not proc:
-            return None
-        with proc:
-            for line in proc.stdout:
-                words = line.lower().rstrip().split()
-                for i in range(len(words)):
-                    if words[i] in hw_identifiers:
-                        try:
-                            word = words[get_index(i)]
-                            mac = int(word.replace(b':', b''), 16)
-                            if _is_universal(mac):
-                                return mac
-                            first_local_mac = first_local_mac or mac
-                        except (ValueError, IndexError):
-                            # Virtual interfaces, such as those provided by
-                            # VPNs, do not have a colon-delimited MAC address
-                            # as expected, but a 16-byte HWAddr separated by
-                            # dashes. These should be ignored in favor of a
-                            # real MAC address
-                            pass
-    except OSError:
-        pass
+    for line in stdout:
+        words = line.lower().rstrip().split()
+        for i in range(len(words)):
+            if words[i] in keywords:
+                try:
+                    word = words[get_word_index(i)]
+                    mac = int(word.replace(_MAC_DELIM, b''), 16)
+                except (ValueError, IndexError):
+                    # Virtual interfaces, such as those provided by
+                    # VPNs, do not have a colon-delimited MAC address
+                    # as expected, but a 16-byte HWAddr separated by
+                    # dashes. These should be ignored in favor of a
+                    # real MAC address
+                    pass
+                else:
+                    if _is_universal(mac):
+                        return mac
+                    first_local_mac = first_local_mac or mac
     return first_local_mac or None
 
+
+def _parse_mac(word):
+    # Accept 'HH:HH:HH:HH:HH:HH' MAC address (ex: '52:54:00:9d:0e:67'),
+    # but reject IPv6 address (ex: 'fe80::5054:ff:fe9' or '123:2:3:4:5:6:7:8').
+    #
+    # Virtual interfaces, such as those provided by VPNs, do not have a
+    # colon-delimited MAC address as expected, but a 16-byte HWAddr separated
+    # by dashes. These should be ignored in favor of a real MAC address
+    parts = word.split(_MAC_DELIM)
+    if len(parts) != 6:
+        return
+    if _MAC_OMITS_LEADING_ZEROES:
+        # (Only) on AIX the macaddr value given is not prefixed by 0, e.g.
+        # en0   1500  link#2      fa.bc.de.f7.62.4 110854824     0 160133733     0     0
+        # not
+        # en0   1500  link#2      fa.bc.de.f7.62.04 110854824     0 160133733     0     0
+        if not all(1 <= len(part) <= 2 for part in parts):
+            return
+        hexstr = b''.join(part.rjust(2, b'0') for part in parts)
+    else:
+        if not all(len(part) == 2 for part in parts):
+            return
+        hexstr = b''.join(parts)
+    try:
+        return int(hexstr, 16)
+    except ValueError:
+        return
+
+
+def _find_mac_under_heading(command, args, heading):
+    """Looks for a MAC address under a heading in a command's output.
+
+    The first line of words in the output is searched for the given
+    heading. Words at the same word index as the heading in subsequent
+    lines are then examined to see if they look like MAC addresses.
+    """
+    stdout = _get_command_stdout(command, args)
+    if stdout is None:
+        return None
+
+    keywords = stdout.readline().rstrip().split()
+    try:
+        column_index = keywords.index(heading)
+    except ValueError:
+        return None
+
+    first_local_mac = None
+    for line in stdout:
+        words = line.rstrip().split()
+        try:
+            word = words[column_index]
+        except IndexError:
+            continue
+
+        mac = _parse_mac(word)
+        if mac is None:
+            continue
+        if _is_universal(mac):
+            return mac
+        if first_local_mac is None:
+            first_local_mac = mac
+
+    return first_local_mac
+
+
+# The following functions call external programs to 'get' a macaddr value to
+# be used as basis for an uuid
 def _ifconfig_getnode():
     """Get the hardware address on Unix by running ifconfig."""
     # This works on Linux ('' or '-a'), Tru64 ('-av'), but not all Unixes.
     keywords = (b'hwaddr', b'ether', b'address:', b'lladdr')
     for args in ('', '-a', '-av'):
-        mac = _find_mac('ifconfig', args, keywords, lambda i: i+1)
+        mac = _find_mac_near_keyword('ifconfig', args, keywords, lambda i: i+1)
         if mac:
             return mac
         return None
@@ -425,7 +515,7 @@
 def _ip_getnode():
     """Get the hardware address on Unix by running ip."""
     # This works on Linux with iproute2.
-    mac = _find_mac('ip', 'link', [b'link/ether'], lambda i: i+1)
+    mac = _find_mac_near_keyword('ip', 'link', [b'link/ether'], lambda i: i+1)
     if mac:
         return mac
     return None
@@ -439,17 +529,17 @@
         return None
 
     # Try getting the MAC addr from arp based on our IP address (Solaris).
-    mac = _find_mac('arp', '-an', [os.fsencode(ip_addr)], lambda i: -1)
+    mac = _find_mac_near_keyword('arp', '-an', [os.fsencode(ip_addr)], lambda i: -1)
     if mac:
         return mac
 
     # This works on OpenBSD
-    mac = _find_mac('arp', '-an', [os.fsencode(ip_addr)], lambda i: i+1)
+    mac = _find_mac_near_keyword('arp', '-an', [os.fsencode(ip_addr)], lambda i: i+1)
     if mac:
         return mac
 
     # This works on Linux, FreeBSD and NetBSD
-    mac = _find_mac('arp', '-an', [os.fsencode('(%s)' % ip_addr)],
+    mac = _find_mac_near_keyword('arp', '-an', [os.fsencode('(%s)' % ip_addr)],
                     lambda i: i+2)
     # Return None instead of 0.
     if mac:
@@ -459,210 +549,52 @@
 def _lanscan_getnode():
     """Get the hardware address on Unix by running lanscan."""
     # This might work on HP-UX.
-    return _find_mac('lanscan', '-ai', [b'lan0'], lambda i: 0)
+    return _find_mac_near_keyword('lanscan', '-ai', [b'lan0'], lambda i: 0)
 
 def _netstat_getnode():
     """Get the hardware address on Unix by running netstat."""
-    # This might work on AIX, Tru64 UNIX.
-    first_local_mac = None
-    try:
-        proc = _popen('netstat', '-ia')
-        if not proc:
-            return None
-        with proc:
-            words = proc.stdout.readline().rstrip().split()
-            try:
-                i = words.index(b'Address')
-            except ValueError:
-                return None
-            for line in proc.stdout:
-                try:
-                    words = line.rstrip().split()
-                    word = words[i]
-                    if len(word) == 17 and word.count(b':') == 5:
-                        mac = int(word.replace(b':', b''), 16)
-                        if _is_universal(mac):
-                            return mac
-                        first_local_mac = first_local_mac or mac
-                except (ValueError, IndexError):
-                    pass
-    except OSError:
-        pass
-    return first_local_mac or None
+    # This works on AIX and might work on Tru64 UNIX.
+    return _find_mac_under_heading('netstat', '-ian', b'Address')
 
 def _ipconfig_getnode():
-    """Get the hardware address on Windows by running ipconfig.exe."""
-    import os, re, subprocess
-    first_local_mac = None
-    dirs = ['', r'c:\windows\system32', r'c:\winnt\system32']
-    try:
-        import ctypes
-        buffer = ctypes.create_string_buffer(300)
-        ctypes.windll.kernel32.GetSystemDirectoryA(buffer, 300)
-        dirs.insert(0, buffer.value.decode('mbcs'))
-    except:
-        pass
-    for dir in dirs:
-        try:
-            proc = subprocess.Popen([os.path.join(dir, 'ipconfig'), '/all'],
-                                    stdout=subprocess.PIPE,
-                                    encoding="oem")
-        except OSError:
-            continue
-        with proc:
-            for line in proc.stdout:
-                value = line.split(':')[-1].strip().lower()
-                if re.fullmatch('(?:[0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]', value):
-                    mac = int(value.replace('-', ''), 16)
-                    if _is_universal(mac):
-                        return mac
-                    first_local_mac = first_local_mac or mac
-    return first_local_mac or None
+    """[DEPRECATED] Get the hardware address on Windows."""
+    # bpo-40501: UuidCreateSequential() is now the only supported approach
+    return _windll_getnode()
 
 def _netbios_getnode():
-    """Get the hardware address on Windows using NetBIOS calls.
-    See http://support.microsoft.com/kb/118623 for details."""
-    import win32wnet, netbios
-    first_local_mac = None
-    ncb = netbios.NCB()
-    ncb.Command = netbios.NCBENUM
-    ncb.Buffer = adapters = netbios.LANA_ENUM()
-    adapters._pack()
-    if win32wnet.Netbios(ncb) != 0:
-        return None
-    adapters._unpack()
-    for i in range(adapters.length):
-        ncb.Reset()
-        ncb.Command = netbios.NCBRESET
-        ncb.Lana_num = ord(adapters.lana[i])
-        if win32wnet.Netbios(ncb) != 0:
-            continue
-        ncb.Reset()
-        ncb.Command = netbios.NCBASTAT
-        ncb.Lana_num = ord(adapters.lana[i])
-        ncb.Callname = '*'.ljust(16)
-        ncb.Buffer = status = netbios.ADAPTER_STATUS()
-        if win32wnet.Netbios(ncb) != 0:
-            continue
-        status._unpack()
-        bytes = status.adapter_address[:6]
-        if len(bytes) != 6:
-            continue
-        mac = int.from_bytes(bytes, 'big')
-        if _is_universal(mac):
-            return mac
-        first_local_mac = first_local_mac or mac
-    return first_local_mac or None
+    """[DEPRECATED] Get the hardware address on Windows."""
+    # bpo-40501: UuidCreateSequential() is now the only supported approach
+    return _windll_getnode()
 
 
-_generate_time_safe = _UuidCreate = None
-_has_uuid_generate_time_safe = None
-
 # Import optional C extension at toplevel, to help disabling it when testing
 try:
     import _uuid
+    _generate_time_safe = getattr(_uuid, "generate_time_safe", None)
+    _UuidCreate = getattr(_uuid, "UuidCreate", None)
+    _has_uuid_generate_time_safe = _uuid.has_uuid_generate_time_safe
 except ImportError:
     _uuid = None
+    _generate_time_safe = None
+    _UuidCreate = None
+    _has_uuid_generate_time_safe = None
 
 
 def _load_system_functions():
-    """
-    Try to load platform-specific functions for generating uuids.
-    """
-    global _generate_time_safe, _UuidCreate, _has_uuid_generate_time_safe
-
-    if _has_uuid_generate_time_safe is not None:
-        return
-
-    _has_uuid_generate_time_safe = False
-
-    if sys.platform == "darwin" and int(os.uname().release.split('.')[0]) < 9:
-        # The uuid_generate_* functions are broken on MacOS X 10.5, as noted
-        # in issue #8621 the function generates the same sequence of values
-        # in the parent process and all children created using fork (unless
-        # those children use exec as well).
-        #
-        # Assume that the uuid_generate functions are broken from 10.5 onward,
-        # the test can be adjusted when a later version is fixed.
-        pass
-    elif _uuid is not None:
-        _generate_time_safe = _uuid.generate_time_safe
-        _has_uuid_generate_time_safe = _uuid.has_uuid_generate_time_safe
-        return
-
-    try:
-        # If we couldn't find an extension module, try ctypes to find
-        # system routines for UUID generation.
-        # Thanks to Thomas Heller for ctypes and for his help with its use here.
-        import ctypes
-        import ctypes.util
-
-        # The uuid_generate_* routines are provided by libuuid on at least
-        # Linux and FreeBSD, and provided by libc on Mac OS X.
-        _libnames = ['uuid']
-        if not sys.platform.startswith('win'):
-            _libnames.append('c')
-        for libname in _libnames:
-            try:
-                lib = ctypes.CDLL(ctypes.util.find_library(libname))
-            except Exception:                           # pragma: nocover
-                continue
-            # Try to find the safe variety first.
-            if hasattr(lib, 'uuid_generate_time_safe'):
-                _uuid_generate_time_safe = lib.uuid_generate_time_safe
-                # int uuid_generate_time_safe(uuid_t out);
-                def _generate_time_safe():
-                    _buffer = ctypes.create_string_buffer(16)
-                    res = _uuid_generate_time_safe(_buffer)
-                    return bytes(_buffer.raw), res
-                _has_uuid_generate_time_safe = True
-                break
-
-            elif hasattr(lib, 'uuid_generate_time'):    # pragma: nocover
-                _uuid_generate_time = lib.uuid_generate_time
-                # void uuid_generate_time(uuid_t out);
-                _uuid_generate_time.restype = None
-                def _generate_time_safe():
-                    _buffer = ctypes.create_string_buffer(16)
-                    _uuid_generate_time(_buffer)
-                    return bytes(_buffer.raw), None
-                break
-
-        # On Windows prior to 2000, UuidCreate gives a UUID containing the
-        # hardware address.  On Windows 2000 and later, UuidCreate makes a
-        # random UUID and UuidCreateSequential gives a UUID containing the
-        # hardware address.  These routines are provided by the RPC runtime.
-        # NOTE:  at least on Tim's WinXP Pro SP2 desktop box, while the last
-        # 6 bytes returned by UuidCreateSequential are fixed, they don't appear
-        # to bear any relationship to the MAC address of any network device
-        # on the box.
-        try:
-            lib = ctypes.windll.rpcrt4
-        except:
-            lib = None
-        _UuidCreate = getattr(lib, 'UuidCreateSequential',
-                              getattr(lib, 'UuidCreate', None))
-
-    except Exception as exc:
-        import warnings
-        warnings.warn(f"Could not find fallback ctypes uuid functions: {exc}",
-                      ImportWarning)
+    """[DEPRECATED] Platform-specific functions loaded at import time"""
 
 
 def _unix_getnode():
-    """Get the hardware address on Unix using the _uuid extension module
-    or ctypes."""
-    _load_system_functions()
-    uuid_time, _ = _generate_time_safe()
-    return UUID(bytes=uuid_time).node
+    """Get the hardware address on Unix using the _uuid extension module."""
+    if _generate_time_safe:
+        uuid_time, _ = _generate_time_safe()
+        return UUID(bytes=uuid_time).node
 
 def _windll_getnode():
-    """Get the hardware address on Windows using ctypes."""
-    import ctypes
-    _load_system_functions()
-    _buffer = ctypes.create_string_buffer(16)
-    if _UuidCreate(_buffer) == 0:
-        return UUID(bytes=bytes_(_buffer.raw)).node
+    """Get the hardware address on Windows using the _uuid extension module."""
+    if _UuidCreate:
+        uuid_bytes = _UuidCreate()
+        return UUID(bytes_le=uuid_bytes).node
 
 def _random_getnode():
     """Get a random node ID."""
@@ -688,10 +620,11 @@
 #     @unittest.skipUnless(_uuid._ifconfig_getnode in _uuid._GETTERS, ...)
 if _LINUX:
     _OS_GETTERS = [_ip_getnode, _ifconfig_getnode]
-elif _DARWIN:
+elif sys.platform == 'darwin':
     _OS_GETTERS = [_ifconfig_getnode, _arp_getnode, _netstat_getnode]
-elif _WINDOWS:
-    _OS_GETTERS = [_netbios_getnode, _ipconfig_getnode]
+elif sys.platform == 'win32':
+    # bpo-40201: _windll_getnode will always succeed, so these are not needed
+    _OS_GETTERS = []
 elif _AIX:
     _OS_GETTERS = [_netstat_getnode]
 else:
@@ -706,7 +639,7 @@
 
 _node = None
 
-def getnode(*, getters=None):
+def getnode():
     """Get the hardware address as a 48-bit positive integer.
 
     The first time this runs, it may launch a separate program, which could
@@ -738,7 +671,6 @@
 
     # When the system provides a version-1 UUID generator, use it (but don't
     # use UuidCreate here because its UUIDs don't conform to RFC 4122).
-    _load_system_functions()
     if _generate_time_safe is not None and node is clock_seq is None:
         uuid_time, safely_generated = _generate_time_safe()
         try:
@@ -772,8 +704,11 @@
 def uuid3(namespace, name):
     """Generate a UUID from the MD5 hash of a namespace UUID and a name."""
     from hashlib import md5
-    hash = md5(namespace.bytes + bytes(name, "utf-8")).digest()
-    return UUID(bytes=hash[:16], version=3)
+    digest = md5(
+        namespace.bytes + bytes(name, "utf-8"),
+        usedforsecurity=False
+    ).digest()
+    return UUID(bytes=digest[:16], version=3)
 
 def uuid4():
     """Generate a random UUID."""
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index caa7285..8009deb 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -12,6 +12,8 @@
 import sysconfig
 import types
 
+
+CORE_VENV_DEPS = ('pip', 'setuptools')
 logger = logging.getLogger(__name__)
 
 
@@ -38,16 +40,21 @@
     :param with_pip: If True, ensure pip is installed in the virtual
                      environment
     :param prompt: Alternative terminal prefix for the environment.
+    :param upgrade_deps: Update the base venv modules to the latest on PyPI
     """
 
     def __init__(self, system_site_packages=False, clear=False,
-                 symlinks=False, upgrade=False, with_pip=False, prompt=None):
+                 symlinks=False, upgrade=False, with_pip=False, prompt=None,
+                 upgrade_deps=False):
         self.system_site_packages = system_site_packages
         self.clear = clear
         self.symlinks = symlinks
         self.upgrade = upgrade
         self.with_pip = with_pip
+        if prompt == '.':  # see bpo-38901
+            prompt = os.path.basename(os.getcwd())
         self.prompt = prompt
+        self.upgrade_deps = upgrade_deps
 
     def create(self, env_dir):
         """
@@ -74,6 +81,8 @@
             # restore it and rewrite the configuration
             self.system_site_packages = True
             self.create_configuration(context)
+        if self.upgrade_deps:
+            self.upgrade_dependencies(context)
 
     def clear_directory(self, path):
         for fn in os.listdir(path):
@@ -234,7 +243,7 @@
             copier(context.executable, path)
             if not os.path.islink(path):
                 os.chmod(path, 0o755)
-            for suffix in ('python', 'python3'):
+            for suffix in ('python', 'python3', f'python3.{sys.version_info[1]}'):
                 path = os.path.join(binpath, suffix)
                 if not os.path.exists(path):
                     # Issue 18807: make copies if
@@ -381,13 +390,25 @@
                         f.write(data)
                     shutil.copymode(srcfile, dstfile)
 
+    def upgrade_dependencies(self, context):
+        logger.debug(
+            f'Upgrading {CORE_VENV_DEPS} packages in {context.bin_path}'
+        )
+        if sys.platform == 'win32':
+            python_exe = os.path.join(context.bin_path, 'python.exe')
+        else:
+            python_exe = os.path.join(context.bin_path, 'python')
+        cmd = [python_exe, '-m', 'pip', 'install', '--upgrade']
+        cmd.extend(CORE_VENV_DEPS)
+        subprocess.check_call(cmd)
+
 
 def create(env_dir, system_site_packages=False, clear=False,
-                    symlinks=False, with_pip=False, prompt=None):
+           symlinks=False, with_pip=False, prompt=None, upgrade_deps=False):
     """Create a virtual environment in a directory."""
     builder = EnvBuilder(system_site_packages=system_site_packages,
                          clear=clear, symlinks=symlinks, with_pip=with_pip,
-                         prompt=prompt)
+                         prompt=prompt, upgrade_deps=upgrade_deps)
     builder.create(env_dir)
 
 def main(args=None):
@@ -450,6 +471,11 @@
         parser.add_argument('--prompt',
                             help='Provides an alternative prompt prefix for '
                                  'this environment.')
+        parser.add_argument('--upgrade-deps', default=False, action='store_true',
+                            dest='upgrade_deps',
+                            help='Upgrade core dependencies: {} to the latest '
+                                 'version in PyPI'.format(
+                                 ' '.join(CORE_VENV_DEPS)))
         options = parser.parse_args(args)
         if options.upgrade and options.clear:
             raise ValueError('you cannot supply --upgrade and --clear together.')
@@ -458,7 +484,8 @@
                              symlinks=options.symlinks,
                              upgrade=options.upgrade,
                              with_pip=options.with_pip,
-                             prompt=options.prompt)
+                             prompt=options.prompt,
+                             upgrade_deps=options.upgrade_deps)
         for d in options.dirs:
             builder.create(d)
 
diff --git a/Lib/venv/scripts/common/activate b/Lib/venv/scripts/common/activate
index b9d498f..45af353 100644
--- a/Lib/venv/scripts/common/activate
+++ b/Lib/venv/scripts/common/activate
@@ -18,7 +18,7 @@
     # be called to get it to forget past commands.  Without forgetting
     # past commands the $PATH changes we made may not be respected
     if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
-        hash -r
+        hash -r 2> /dev/null
     fi
 
     if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
@@ -54,17 +54,7 @@
 
 if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
     _OLD_VIRTUAL_PS1="${PS1:-}"
-    if [ "x__VENV_PROMPT__" != x ] ; then
-	PS1="__VENV_PROMPT__${PS1:-}"
-    else
-    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
-        # special case for Aspen magic directories
-        # see http://www.zetadev.com/software/aspen/
-        PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
-    else
-        PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
-    fi
-    fi
+    PS1="__VENV_PROMPT__${PS1:-}"
     export PS1
 fi
 
@@ -72,5 +62,5 @@
 # be called to get it to forget past commands.  Without forgetting
 # past commands the $PATH changes we made may not be respected
 if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
-    hash -r
+    hash -r 2> /dev/null
 fi
diff --git a/Lib/venv/scripts/posix/activate.csh b/Lib/venv/scripts/posix/activate.csh
index b0c7028..68a0dc7 100644
--- a/Lib/venv/scripts/posix/activate.csh
+++ b/Lib/venv/scripts/posix/activate.csh
@@ -17,19 +17,7 @@
 set _OLD_VIRTUAL_PROMPT="$prompt"
 
 if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
-    if ("__VENV_NAME__" != "") then
-        set env_name = "__VENV_NAME__"
-    else
-        if (`basename "VIRTUAL_ENV"` == "__") then
-            # special case for Aspen magic directories
-            # see http://www.zetadev.com/software/aspen/
-            set env_name = `basename \`dirname "$VIRTUAL_ENV"\``
-        else
-            set env_name = `basename "$VIRTUAL_ENV"`
-        endif
-    endif
-    set prompt = "[$env_name] $prompt"
-    unset env_name
+    set prompt = "__VENV_PROMPT__$prompt"
 endif
 
 alias pydoc python -m pydoc
diff --git a/Lib/venv/scripts/posix/activate.fish b/Lib/venv/scripts/posix/activate.fish
index b401058..54b9ea5 100644
--- a/Lib/venv/scripts/posix/activate.fish
+++ b/Lib/venv/scripts/posix/activate.fish
@@ -1,7 +1,7 @@
-# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org)
-# you cannot run it directly
+# This file must be used with "source <venv>/bin/activate.fish" *from fish*
+# (https://fishshell.com/); you cannot run it directly.
 
-function deactivate  -d "Exit virtualenv and return to normal shell environment"
+function deactivate  -d "Exit virtual environment and return to normal shell environment"
     # reset old environment variables
     if test -n "$_OLD_VIRTUAL_PATH"
         set -gx PATH $_OLD_VIRTUAL_PATH
@@ -21,12 +21,12 @@
 
     set -e VIRTUAL_ENV
     if test "$argv[1]" != "nondestructive"
-        # Self destruct!
+        # Self-destruct!
         functions -e deactivate
     end
 end
 
-# unset irrelevant variables
+# Unset irrelevant variables.
 deactivate nondestructive
 
 set -gx VIRTUAL_ENV "__VENV_DIR__"
@@ -34,7 +34,7 @@
 set -gx _OLD_VIRTUAL_PATH $PATH
 set -gx PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__" $PATH
 
-# unset PYTHONHOME if set
+# Unset PYTHONHOME if set.
 if set -q PYTHONHOME
     set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
     set -e PYTHONHOME
@@ -43,31 +43,20 @@
 if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
     # fish uses a function instead of an env var to generate the prompt.
 
-    # save the current fish_prompt function as the function _old_fish_prompt
+    # Save the current fish_prompt function as the function _old_fish_prompt.
     functions -c fish_prompt _old_fish_prompt
 
-    # with the original prompt function renamed, we can override with our own.
+    # With the original prompt function renamed, we can override with our own.
     function fish_prompt
-        # Save the return status of the last command
+        # Save the return status of the last command.
         set -l old_status $status
 
-        # Prompt override?
-        if test -n "__VENV_PROMPT__"
-            printf "%s%s" "__VENV_PROMPT__" (set_color normal)
-        else
-            # ...Otherwise, prepend env
-            set -l _checkbase (basename "$VIRTUAL_ENV")
-            if test $_checkbase = "__"
-                # special case for Aspen magic directories
-                # see http://www.zetadev.com/software/aspen/
-                printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal)
-            else
-                printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal)
-            end
-        end
+        # Output the venv prompt; color taken from the blue of the Python logo.
+        printf "%s%s%s" (set_color 4B8BBE) "__VENV_PROMPT__" (set_color normal)
 
         # Restore the return status of the previous command.
         echo "exit $old_status" | .
+        # Output the original/"old" prompt.
         _old_fish_prompt
     end
 
diff --git a/Lib/wave.py b/Lib/wave.py
index 823f091..b707119 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -71,9 +71,15 @@
 is destroyed.
 """
 
+from chunk import Chunk
+from collections import namedtuple
+import audioop
 import builtins
+import struct
+import sys
 
-__all__ = ["open", "openfp", "Error", "Wave_read", "Wave_write"]
+
+__all__ = ["open", "Error", "Wave_read", "Wave_write"]
 
 class Error(Exception):
     pass
@@ -82,13 +88,6 @@
 
 _array_fmts = None, 'b', 'h', None, 'i'
 
-import audioop
-import struct
-import sys
-from chunk import Chunk
-from collections import namedtuple
-import warnings
-
 _wave_params = namedtuple('_wave_params',
                      'nchannels sampwidth framerate nframes comptype compname')
 
@@ -512,8 +511,3 @@
         return Wave_write(f)
     else:
         raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
-
-def openfp(f, mode=None):
-    warnings.warn("wave.openfp is deprecated since Python 3.7. "
-                  "Use wave.open instead.", DeprecationWarning, stacklevel=2)
-    return open(f, mode=mode)
diff --git a/Lib/weakref.py b/Lib/weakref.py
index 9d70089..5fa851d 100644
--- a/Lib/weakref.py
+++ b/Lib/weakref.py
@@ -33,6 +33,9 @@
            "WeakSet", "WeakMethod", "finalize"]
 
 
+_collections_abc.Set.register(WeakSet)
+_collections_abc.MutableSet.register(WeakSet)
+
 class WeakMethod(ref):
     """
     A custom `weakref.ref` subclass which simulates a weak reference to
@@ -75,14 +78,14 @@
             if not self._alive or not other._alive:
                 return self is other
             return ref.__eq__(self, other) and self._func_ref == other._func_ref
-        return False
+        return NotImplemented
 
     def __ne__(self, other):
         if isinstance(other, WeakMethod):
             if not self._alive or not other._alive:
                 return self is not other
             return ref.__ne__(self, other) or self._func_ref != other._func_ref
-        return True
+        return NotImplemented
 
     __hash__ = ref.__hash__
 
@@ -307,6 +310,25 @@
             self._commit_removals()
         return list(self.data.values())
 
+    def __ior__(self, other):
+        self.update(other)
+        return self
+
+    def __or__(self, other):
+        if isinstance(other, _collections_abc.Mapping):
+            c = self.copy()
+            c.update(other)
+            return c
+        return NotImplemented
+
+    def __ror__(self, other):
+        if isinstance(other, _collections_abc.Mapping):
+            c = self.__class__()
+            c.update(other)
+            c.update(self)
+            return c
+        return NotImplemented
+
 
 class KeyedRef(ref):
     """Specialized reference that includes a key corresponding to the value.
@@ -485,6 +507,25 @@
         if len(kwargs):
             self.update(kwargs)
 
+    def __ior__(self, other):
+        self.update(other)
+        return self
+
+    def __or__(self, other):
+        if isinstance(other, _collections_abc.Mapping):
+            c = self.copy()
+            c.update(other)
+            return c
+        return NotImplemented
+
+    def __ror__(self, other):
+        if isinstance(other, _collections_abc.Mapping):
+            c = self.__class__()
+            c.update(other)
+            c.update(self)
+            return c
+        return NotImplemented
+
 
 class finalize:
     """Class for finalization of weakrefable objects
@@ -514,33 +555,7 @@
     class _Info:
         __slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index")
 
-    def __init__(*args, **kwargs):
-        if len(args) >= 3:
-            self, obj, func, *args = args
-        elif not args:
-            raise TypeError("descriptor '__init__' of 'finalize' object "
-                            "needs an argument")
-        else:
-            if 'func' not in kwargs:
-                raise TypeError('finalize expected at least 2 positional '
-                                'arguments, got %d' % (len(args)-1))
-            func = kwargs.pop('func')
-            if len(args) >= 2:
-                self, obj, *args = args
-                import warnings
-                warnings.warn("Passing 'func' as keyword argument is deprecated",
-                              DeprecationWarning, stacklevel=2)
-            else:
-                if 'obj' not in kwargs:
-                    raise TypeError('finalize expected at least 2 positional '
-                                    'arguments, got %d' % (len(args)-1))
-                obj = kwargs.pop('obj')
-                self, *args = args
-                import warnings
-                warnings.warn("Passing 'obj' as keyword argument is deprecated",
-                              DeprecationWarning, stacklevel=2)
-        args = tuple(args)
-
+    def __init__(self, obj, func, /, *args, **kwargs):
         if not self._registered_with_atexit:
             # We may register the exit function more than once because
             # of a thread race, but that is harmless
@@ -556,7 +571,6 @@
         info.index = next(self._index_iter)
         self._registry[self] = info
         finalize._dirty = True
-    __init__.__text_signature__ = '($self, obj, func, /, *args, **kwargs)'
 
     def __call__(self, _=None):
         """If alive then mark as dead and return func(*args, **kwargs);
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
index cea9130..6023c1e 100755
--- a/Lib/webbrowser.py
+++ b/Lib/webbrowser.py
@@ -550,7 +550,7 @@
                 cmd = "xdg-settings get default-web-browser".split()
                 raw_result = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
                 result = raw_result.decode().strip()
-            except (FileNotFoundError, subprocess.CalledProcessError, PermissionError) :
+            except (FileNotFoundError, subprocess.CalledProcessError, PermissionError, NotADirectoryError) :
                 pass
             else:
                 global _os_preferred_browser
diff --git a/Lib/xml/dom/expatbuilder.py b/Lib/xml/dom/expatbuilder.py
index 2bd835b..199c22d 100644
--- a/Lib/xml/dom/expatbuilder.py
+++ b/Lib/xml/dom/expatbuilder.py
@@ -204,11 +204,11 @@
                 buffer = file.read(16*1024)
                 if not buffer:
                     break
-                parser.Parse(buffer, 0)
+                parser.Parse(buffer, False)
                 if first_buffer and self.document.documentElement:
                     self._setup_subset(buffer)
                 first_buffer = False
-            parser.Parse("", True)
+            parser.Parse(b"", True)
         except ParseEscape:
             pass
         doc = self.document
@@ -637,7 +637,7 @@
         nsattrs = self._getNSattrs() # get ns decls from node's ancestors
         document = _FRAGMENT_BUILDER_TEMPLATE % (ident, subset, nsattrs)
         try:
-            parser.Parse(document, 1)
+            parser.Parse(document, True)
         except:
             self.reset()
             raise
@@ -697,7 +697,7 @@
             self.fragment = self.document.createDocumentFragment()
             self.curNode = self.fragment
             try:
-                parser.Parse(self._source, 1)
+                parser.Parse(self._source, True)
             finally:
                 self.curNode = old_cur_node
                 self.document = old_document
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 464420b..d09ef5e 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -43,10 +43,11 @@
     def __bool__(self):
         return True
 
-    def toxml(self, encoding=None):
-        return self.toprettyxml("", "", encoding)
+    def toxml(self, encoding=None, standalone=None):
+        return self.toprettyxml("", "", encoding, standalone)
 
-    def toprettyxml(self, indent="\t", newl="\n", encoding=None):
+    def toprettyxml(self, indent="\t", newl="\n", encoding=None,
+                    standalone=None):
         if encoding is None:
             writer = io.StringIO()
         else:
@@ -56,7 +57,7 @@
                                       newline='\n')
         if self.nodeType == Node.DOCUMENT_NODE:
             # Can pass encoding only to document, to put it into XML header
-            self.writexml(writer, "", indent, newl, encoding)
+            self.writexml(writer, "", indent, newl, encoding, standalone)
         else:
             self.writexml(writer, "", indent, newl)
         if encoding is None:
@@ -718,6 +719,14 @@
         Node.unlink(self)
 
     def getAttribute(self, attname):
+        """Returns the value of the specified attribute.
+
+        Returns the value of the element's attribute named attname as
+        a string. An empty string is returned if the element does not
+        have such an attribute. Note that an empty string may also be
+        returned as an explicitly given attribute value, use the
+        hasAttribute method to distinguish these two cases.
+        """
         if self._attrs is None:
             return ""
         try:
@@ -828,6 +837,11 @@
     removeAttributeNodeNS = removeAttributeNode
 
     def hasAttribute(self, name):
+        """Checks whether the element has an attribute with the specified name.
+
+        Returns True if the element has an attribute with the specified name.
+        Otherwise, returns False.
+        """
         if self._attrs is None:
             return False
         return name in self._attrs
@@ -838,6 +852,11 @@
         return (namespaceURI, localName) in self._attrsNS
 
     def getElementsByTagName(self, name):
+        """Returns all descendant elements with the given tag name.
+
+        Returns the list of all descendant elements (not direct children
+        only) with the specified tag name.
+        """
         return _get_elements_by_tagName_helper(self, name, NodeList())
 
     def getElementsByTagNameNS(self, namespaceURI, localName):
@@ -848,6 +867,11 @@
         return "<DOM Element: %s at %#x>" % (self.tagName, id(self))
 
     def writexml(self, writer, indent="", addindent="", newl=""):
+        """Write an XML element to a file-like object
+
+        Write the element to the writer object that must provide
+        a write method (e.g. a file or StringIO object).
+        """
         # indent = current indentation
         # addindent = indentation to add to higher levels
         # newl = newline string
@@ -1787,12 +1811,17 @@
             raise xml.dom.NotSupportedErr("cannot import document type nodes")
         return _clone_node(node, deep, self)
 
-    def writexml(self, writer, indent="", addindent="", newl="", encoding=None):
-        if encoding is None:
-            writer.write('<?xml version="1.0" ?>'+newl)
-        else:
-            writer.write('<?xml version="1.0" encoding="%s"?>%s' % (
-                encoding, newl))
+    def writexml(self, writer, indent="", addindent="", newl="", encoding=None,
+                 standalone=None):
+        declarations = []
+
+        if encoding:
+            declarations.append(f'encoding="{encoding}"')
+        if standalone is not None:
+            declarations.append(f'standalone="{"yes" if standalone else "no"}"')
+
+        writer.write(f'<?xml version="1.0" {" ".join(declarations)}?>{newl}')
+
         for node in self.childNodes:
             node.writexml(writer, indent, addindent, newl)
 
diff --git a/Lib/xml/dom/xmlbuilder.py b/Lib/xml/dom/xmlbuilder.py
index 213ab14..8a20026 100644
--- a/Lib/xml/dom/xmlbuilder.py
+++ b/Lib/xml/dom/xmlbuilder.py
@@ -1,7 +1,6 @@
 """Implementation of the DOM Level 3 'LS-Load' feature."""
 
 import copy
-import warnings
 import xml.dom
 
 from xml.dom.NodeFilter import NodeFilter
diff --git a/Lib/xml/etree/ElementInclude.py b/Lib/xml/etree/ElementInclude.py
index 963470e..5303062 100644
--- a/Lib/xml/etree/ElementInclude.py
+++ b/Lib/xml/etree/ElementInclude.py
@@ -50,18 +50,28 @@
 
 import copy
 from . import ElementTree
+from urllib.parse import urljoin
 
 XINCLUDE = "{http://www.w3.org/2001/XInclude}"
 
 XINCLUDE_INCLUDE = XINCLUDE + "include"
 XINCLUDE_FALLBACK = XINCLUDE + "fallback"
 
+# For security reasons, the inclusion depth is limited to this read-only value by default.
+DEFAULT_MAX_INCLUSION_DEPTH = 6
+
+
 ##
 # Fatal include error.
 
 class FatalIncludeError(SyntaxError):
     pass
 
+
+class LimitedRecursiveIncludeError(FatalIncludeError):
+    pass
+
+
 ##
 # Default loader.  This loader reads an included resource from disk.
 #
@@ -92,13 +102,33 @@
 # @param loader Optional resource loader.  If omitted, it defaults
 #     to {@link default_loader}.  If given, it should be a callable
 #     that implements the same interface as <b>default_loader</b>.
+# @param base_url The base URL of the original file, to resolve
+#     relative include file references.
+# @param max_depth The maximum number of recursive inclusions.
+#     Limited to reduce the risk of malicious content explosion.
+#     Pass a negative value to disable the limitation.
+# @throws LimitedRecursiveIncludeError If the {@link max_depth} was exceeded.
 # @throws FatalIncludeError If the function fails to include a given
 #     resource, or if the tree contains malformed XInclude elements.
-# @throws OSError If the function fails to load a given resource.
+# @throws IOError If the function fails to load a given resource.
+# @returns the node or its replacement if it was an XInclude node
 
-def include(elem, loader=None):
+def include(elem, loader=None, base_url=None,
+            max_depth=DEFAULT_MAX_INCLUSION_DEPTH):
+    if max_depth is None:
+        max_depth = -1
+    elif max_depth < 0:
+        raise ValueError("expected non-negative depth or None for 'max_depth', got %r" % max_depth)
+
+    if hasattr(elem, 'getroot'):
+        elem = elem.getroot()
     if loader is None:
         loader = default_loader
+
+    _include(elem, loader, base_url, max_depth, set())
+
+
+def _include(elem, loader, base_url, max_depth, _parent_hrefs):
     # look for xinclude elements
     i = 0
     while i < len(elem):
@@ -106,14 +136,24 @@
         if e.tag == XINCLUDE_INCLUDE:
             # process xinclude directive
             href = e.get("href")
+            if base_url:
+                href = urljoin(base_url, href)
             parse = e.get("parse", "xml")
             if parse == "xml":
+                if href in _parent_hrefs:
+                    raise FatalIncludeError("recursive include of %s" % href)
+                if max_depth == 0:
+                    raise LimitedRecursiveIncludeError(
+                        "maximum xinclude depth reached when including file %s" % href)
+                _parent_hrefs.add(href)
                 node = loader(href, parse)
                 if node is None:
                     raise FatalIncludeError(
                         "cannot load %r as %r" % (href, parse)
                         )
-                node = copy.copy(node)
+                node = copy.copy(node)  # FIXME: this makes little sense with recursive includes
+                _include(node, loader, href, max_depth - 1, _parent_hrefs)
+                _parent_hrefs.remove(href)
                 if e.tail:
                     node.tail = (node.tail or "") + e.tail
                 elem[i] = node
@@ -123,11 +163,13 @@
                     raise FatalIncludeError(
                         "cannot load %r as %r" % (href, parse)
                         )
+                if e.tail:
+                    text += e.tail
                 if i:
                     node = elem[i-1]
-                    node.tail = (node.tail or "") + text + (e.tail or "")
+                    node.tail = (node.tail or "") + text
                 else:
-                    elem.text = (elem.text or "") + text + (e.tail or "")
+                    elem.text = (elem.text or "") + text
                 del elem[i]
                 continue
             else:
@@ -139,5 +181,5 @@
                 "xi:fallback tag must be child of xi:include (%r)" % e.tag
                 )
         else:
-            include(e, loader)
-        i = i + 1
+            _include(e, loader, base_url, max_depth, _parent_hrefs)
+        i += 1
diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
index 645e999..7a26900 100644
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -76,7 +76,7 @@
     "dump",
     "Element", "ElementTree",
     "fromstring", "fromstringlist",
-    "iselement", "iterparse",
+    "indent", "iselement", "iterparse",
     "parse", "ParseError",
     "PI", "ProcessingInstruction",
     "QName",
@@ -195,6 +195,13 @@
         original tree.
 
         """
+        warnings.warn(
+            "elem.copy() is deprecated. Use copy.copy(elem) instead.",
+            DeprecationWarning
+            )
+        return self.__copy__()
+
+    def __copy__(self):
         elem = self.makeelement(self.tag, self.attrib)
         elem.text = self.text
         elem.tail = self.tail
@@ -273,19 +280,6 @@
         # assert iselement(element)
         self._children.remove(subelement)
 
-    def getchildren(self):
-        """(Deprecated) Return all subelements.
-
-        Elements are returned in document order.
-
-        """
-        warnings.warn(
-            "This method will be removed in future versions.  "
-            "Use 'list(elem)' or iteration over elem instead.",
-            DeprecationWarning, stacklevel=2
-            )
-        return self._children
-
     def find(self, path, namespaces=None):
         """Find first matching element by tag name or path.
 
@@ -409,15 +403,6 @@
         for e in self._children:
             yield from e.iter(tag)
 
-    # compatibility
-    def getiterator(self, tag=None):
-        warnings.warn(
-            "This method will be removed in future versions.  "
-            "Use 'elem.iter()' or 'list(elem.iter())' instead.",
-            DeprecationWarning, stacklevel=2
-        )
-        return list(self.iter(tag))
-
     def itertext(self):
         """Create text iterator.
 
@@ -617,15 +602,6 @@
         # assert self._root is not None
         return self._root.iter(tag)
 
-    # compatibility
-    def getiterator(self, tag=None):
-        warnings.warn(
-            "This method will be removed in future versions.  "
-            "Use 'tree.iter()' or 'list(tree.iter())' instead.",
-            DeprecationWarning, stacklevel=2
-        )
-        return list(self.iter(tag))
-
     def find(self, path, namespaces=None):
         """Find first matching element by tag name or path.
 
@@ -1081,15 +1057,15 @@
             text = text.replace(">", "&gt;")
         if "\"" in text:
             text = text.replace("\"", "&quot;")
-        # The following business with carriage returns is to satisfy
-        # Section 2.11 of the XML specification, stating that
-        # CR or CR LN should be replaced with just LN
+        # Although section 2.11 of the XML specification states that CR or
+        # CR LN should be replaced with just LN, it applies only to EOLNs
+        # which take part of organizing file into lines. Within attributes,
+        # we are replacing these with entity numbers, so they do not count.
         # http://www.w3.org/TR/REC-xml/#sec-line-ends
-        if "\r\n" in text:
-            text = text.replace("\r\n", "\n")
+        # The current solution, contained in following six lines, was
+        # discussed in issue 17582 and 39011.
         if "\r" in text:
-            text = text.replace("\r", "\n")
-        #The following four lines are issue 17582
+            text = text.replace("\r", "&#13;")
         if "\n" in text:
             text = text.replace("\n", "&#10;")
         if "\t" in text:
@@ -1185,6 +1161,57 @@
     if not tail or tail[-1] != "\n":
         sys.stdout.write("\n")
 
+
+def indent(tree, space="  ", level=0):
+    """Indent an XML document by inserting newlines and indentation space
+    after elements.
+
+    *tree* is the ElementTree or Element to modify.  The (root) element
+    itself will not be changed, but the tail text of all elements in its
+    subtree will be adapted.
+
+    *space* is the whitespace to insert for each indentation level, two
+    space characters by default.
+
+    *level* is the initial indentation level. Setting this to a higher
+    value than 0 can be used for indenting subtrees that are more deeply
+    nested inside of a document.
+    """
+    if isinstance(tree, ElementTree):
+        tree = tree.getroot()
+    if level < 0:
+        raise ValueError(f"Initial indentation level must be >= 0, got {level}")
+    if not len(tree):
+        return
+
+    # Reduce the memory consumption by reusing indentation strings.
+    indentations = ["\n" + level * space]
+
+    def _indent_children(elem, level):
+        # Start a new indentation level for the first child.
+        child_level = level + 1
+        try:
+            child_indentation = indentations[child_level]
+        except IndexError:
+            child_indentation = indentations[level] + space
+            indentations.append(child_indentation)
+
+        if not elem.text or not elem.text.strip():
+            elem.text = child_indentation
+
+        for child in elem:
+            if len(child):
+                _indent_children(child, child_level)
+            if not child.tail or not child.tail.strip():
+                child.tail = child_indentation
+
+        # Dedent after the last child by overwriting the previous indentation.
+        if not child.tail.strip():
+            child.tail = indentations[level]
+
+    _indent_children(tree, 0)
+
+
 # --------------------------------------------------------------------
 # parsing
 
@@ -1690,14 +1717,14 @@
     def feed(self, data):
         """Feed encoded data to parser."""
         try:
-            self.parser.Parse(data, 0)
+            self.parser.Parse(data, False)
         except self._error as v:
             self._raiseerror(v)
 
     def close(self):
         """Finish feeding data to parser and return element structure."""
         try:
-            self.parser.Parse("", 1) # end of data
+            self.parser.Parse(b"", True) # end of data
         except self._error as v:
             self._raiseerror(v)
         try:
@@ -1849,6 +1876,11 @@
                 self._declared_ns_stack[-1].append((uri, prefix))
                 return f'{prefix}:{tag}' if prefix else tag, tag, uri
 
+        if not uri:
+            # As soon as a default namespace is defined,
+            # anything that has no namespace (and thus, no prefix) goes there.
+            return tag, tag, uri
+
         raise ValueError(f'Namespace "{uri}" is not declared in scope')
 
     def data(self, data):
diff --git a/Lib/xml/sax/__init__.py b/Lib/xml/sax/__init__.py
index a0f5d40..17b7587 100644
--- a/Lib/xml/sax/__init__.py
+++ b/Lib/xml/sax/__init__.py
@@ -78,7 +78,7 @@
     for parser_name in list(parser_list) + default_parser_list:
         try:
             return _create_parser(parser_name)
-        except ImportError as e:
+        except ImportError:
             import sys
             if parser_name in sys.modules:
                 # The parser module was found, but importing it
diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py
index 5066ffc..e334ac9 100644
--- a/Lib/xml/sax/expatreader.py
+++ b/Lib/xml/sax/expatreader.py
@@ -93,7 +93,7 @@
         self._parser = None
         self._namespaces = namespaceHandling
         self._lex_handler_prop = None
-        self._parsing = 0
+        self._parsing = False
         self._entity_stack = []
         self._external_ges = 0
         self._interning = None
@@ -203,10 +203,10 @@
 
     # IncrementalParser methods
 
-    def feed(self, data, isFinal = 0):
+    def feed(self, data, isFinal=False):
         if not self._parsing:
             self.reset()
-            self._parsing = 1
+            self._parsing = True
             self._cont_handler.startDocument()
 
         try:
@@ -237,13 +237,13 @@
             # If we are completing an external entity, do nothing here
             return
         try:
-            self.feed("", isFinal = 1)
+            self.feed(b"", isFinal=True)
             self._cont_handler.endDocument()
-            self._parsing = 0
+            self._parsing = False
             # break cycle created by expat handlers pointing to our methods
             self._parser = None
         finally:
-            self._parsing = 0
+            self._parsing = False
             if self._parser is not None:
                 # Keep ErrorColumnNumber and ErrorLineNumber after closing.
                 parser = _ClosedParser()
@@ -307,7 +307,7 @@
         self._parser.SetParamEntityParsing(
             expat.XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
 
-        self._parsing = 0
+        self._parsing = False
         self._entity_stack = []
 
     # Locator methods
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py
index b987574..d15d60d 100644
--- a/Lib/xmlrpc/client.py
+++ b/Lib/xmlrpc/client.py
@@ -313,31 +313,38 @@
             s = self.timetuple()
             o = other.timetuple()
         else:
-            otype = (hasattr(other, "__class__")
-                     and other.__class__.__name__
-                     or type(other))
-            raise TypeError("Can't compare %s and %s" %
-                            (self.__class__.__name__, otype))
+            s = self
+            o = NotImplemented
         return s, o
 
     def __lt__(self, other):
         s, o = self.make_comparable(other)
+        if o is NotImplemented:
+            return NotImplemented
         return s < o
 
     def __le__(self, other):
         s, o = self.make_comparable(other)
+        if o is NotImplemented:
+            return NotImplemented
         return s <= o
 
     def __gt__(self, other):
         s, o = self.make_comparable(other)
+        if o is NotImplemented:
+            return NotImplemented
         return s > o
 
     def __ge__(self, other):
         s, o = self.make_comparable(other)
+        if o is NotImplemented:
+            return NotImplemented
         return s >= o
 
     def __eq__(self, other):
         s, o = self.make_comparable(other)
+        if o is NotImplemented:
+            return NotImplemented
         return s == o
 
     def timetuple(self):
@@ -435,7 +442,7 @@
         target.xml(encoding, None)
 
     def feed(self, data):
-        self._parser.Parse(data, 0)
+        self._parser.Parse(data, False)
 
     def close(self):
         try:
@@ -1414,15 +1421,14 @@
         # establish a "logical" server connection
 
         # get the url
-        type, uri = urllib.parse._splittype(uri)
-        if type not in ("http", "https"):
+        p = urllib.parse.urlparse(uri)
+        if p.scheme not in ("http", "https"):
             raise OSError("unsupported XML-RPC protocol")
-        self.__host, self.__handler = urllib.parse._splithost(uri)
-        if not self.__handler:
-            self.__handler = "/RPC2"
+        self.__host = p.netloc
+        self.__handler = p.path or "/RPC2"
 
         if transport is None:
-            if type == "https":
+            if p.scheme == "https":
                 handler = SafeTransport
                 extra_kwargs = {"context": context}
             else:
diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py
index 32aba4d..287e324 100644
--- a/Lib/xmlrpc/server.py
+++ b/Lib/xmlrpc/server.py
@@ -732,7 +732,7 @@
         # hyperlinking of arbitrary strings being used as method
         # names. Only methods with names consisting of word characters
         # and '.'s are hyperlinked.
-        pattern = re.compile(r'\b((http|ftp)://\S+[\w/]|'
+        pattern = re.compile(r'\b((http|https|ftp)://\S+[\w/]|'
                                 r'RFC[- ]?(\d+)|'
                                 r'PEP[- ]?(\d+)|'
                                 r'(self\.)?((?:\w|\.)+))\b')
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 73e8966..816f858 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -4,7 +4,6 @@
 XXX references to utf-8 need further investigation.
 """
 import binascii
-import functools
 import importlib.util
 import io
 import itertools
@@ -378,11 +377,11 @@
         self.volume = 0                 # Volume number of file header
         self.internal_attr = 0          # Internal attributes
         self.external_attr = 0          # External file attributes
+        self.compress_size = 0          # Size of the compressed file
+        self.file_size = 0              # Size of the uncompressed file
         # Other attributes are set by class ZipFile:
         # header_offset         Byte offset to the file header
         # CRC                   CRC-32 of the uncompressed file
-        # compress_size         Size of the compressed file
-        # file_size             Size of the uncompressed file
 
     def __repr__(self):
         result = ['<%s filename=%r' % (self.__class__.__name__, self.filename)]
@@ -467,44 +466,23 @@
             if ln+4 > len(extra):
                 raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln))
             if tp == 0x0001:
-                if ln >= 24:
-                    counts = unpack('<QQQ', extra[4:28])
-                elif ln == 16:
-                    counts = unpack('<QQ', extra[4:20])
-                elif ln == 8:
-                    counts = unpack('<Q', extra[4:12])
-                elif ln == 0:
-                    counts = ()
-                else:
-                    raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln))
-
-                idx = 0
-
+                data = extra[4:ln+4]
                 # ZIP64 extension (large files and/or large archives)
-                if self.file_size in (0xffffffffffffffff, 0xffffffff):
-                    if len(counts) <= idx:
-                        raise BadZipFile(
-                            "Corrupt zip64 extra field. File size not found."
-                        )
-                    self.file_size = counts[idx]
-                    idx += 1
-
-                if self.compress_size == 0xFFFFFFFF:
-                    if len(counts) <= idx:
-                        raise BadZipFile(
-                            "Corrupt zip64 extra field. Compress size not found."
-                        )
-                    self.compress_size = counts[idx]
-                    idx += 1
-
-                if self.header_offset == 0xffffffff:
-                    if len(counts) <= idx:
-                        raise BadZipFile(
-                            "Corrupt zip64 extra field. Header offset not found."
-                        )
-                    old = self.header_offset
-                    self.header_offset = counts[idx]
-                    idx+=1
+                try:
+                    if self.file_size in (0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF):
+                        field = "File size"
+                        self.file_size, = unpack('<Q', data[:8])
+                        data = data[8:]
+                    if self.compress_size == 0xFFFF_FFFF:
+                        field = "Compress size"
+                        self.compress_size, = unpack('<Q', data[:8])
+                        data = data[8:]
+                    if self.header_offset == 0xFFFF_FFFF:
+                        field = "Header offset"
+                        self.header_offset, = unpack('<Q', data[:8])
+                except struct.error:
+                    raise BadZipFile(f"Corrupt zip64 extra field. "
+                                     f"{field} not found.") from None
 
             extra = extra[ln+4:]
 
@@ -912,12 +890,16 @@
         return self._readbuffer[self._offset: self._offset + 512]
 
     def readable(self):
+        if self.closed:
+            raise ValueError("I/O operation on closed file.")
         return True
 
     def read(self, n=-1):
         """Read and return up to n bytes.
         If the argument is omitted, None, or negative, data is read and returned until EOF is reached.
         """
+        if self.closed:
+            raise ValueError("read from closed file.")
         if n is None or n < 0:
             buf = self._readbuffer[self._offset:]
             self._readbuffer = b''
@@ -1054,9 +1036,13 @@
             super().close()
 
     def seekable(self):
+        if self.closed:
+            raise ValueError("I/O operation on closed file.")
         return self._seekable
 
     def seek(self, offset, whence=0):
+        if self.closed:
+            raise ValueError("seek on closed file.")
         if not self._seekable:
             raise io.UnsupportedOperation("underlying stream is not seekable")
         curr_pos = self.tell()
@@ -1105,6 +1091,8 @@
         return self.tell()
 
     def tell(self):
+        if self.closed:
+            raise ValueError("tell on closed file.")
         if not self._seekable:
             raise io.UnsupportedOperation("underlying stream is not seekable")
         filepos = self._orig_file_size - self._left - len(self._readbuffer) + self._offset
@@ -1584,9 +1572,7 @@
                              "another write handle open on it. "
                              "Close the first handle before opening another.")
 
-        # Sizes and CRC are overwritten with correct data after processing the file
-        if not hasattr(zinfo, 'file_size'):
-            zinfo.file_size = 0
+        # Size and CRC are overwritten with correct data after processing the file
         zinfo.compress_size = 0
         zinfo.CRC = 0
 
@@ -1882,25 +1868,15 @@
 
             extract_version = max(min_version, zinfo.extract_version)
             create_version = max(min_version, zinfo.create_version)
-            try:
-                filename, flag_bits = zinfo._encodeFilenameFlags()
-                centdir = struct.pack(structCentralDir,
-                                      stringCentralDir, create_version,
-                                      zinfo.create_system, extract_version, zinfo.reserved,
-                                      flag_bits, zinfo.compress_type, dostime, dosdate,
-                                      zinfo.CRC, compress_size, file_size,
-                                      len(filename), len(extra_data), len(zinfo.comment),
-                                      0, zinfo.internal_attr, zinfo.external_attr,
-                                      header_offset)
-            except DeprecationWarning:
-                print((structCentralDir, stringCentralDir, create_version,
-                       zinfo.create_system, extract_version, zinfo.reserved,
-                       zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
-                       zinfo.CRC, compress_size, file_size,
-                       len(zinfo.filename), len(extra_data), len(zinfo.comment),
-                       0, zinfo.internal_attr, zinfo.external_attr,
-                       header_offset), file=sys.stderr)
-                raise
+            filename, flag_bits = zinfo._encodeFilenameFlags()
+            centdir = struct.pack(structCentralDir,
+                                  stringCentralDir, create_version,
+                                  zinfo.create_system, extract_version, zinfo.reserved,
+                                  flag_bits, zinfo.compress_type, dostime, dosdate,
+                                  zinfo.CRC, compress_size, file_size,
+                                  len(filename), len(extra_data), len(zinfo.comment),
+                                  0, zinfo.internal_attr, zinfo.external_attr,
+                                  header_offset)
             self.fp.write(centdir)
             self.fp.write(filename)
             self.fp.write(extra_data)
@@ -1942,6 +1918,8 @@
                              centDirSize, centDirOffset, len(self._comment))
         self.fp.write(endrec)
         self.fp.write(self._comment)
+        if self.mode == "a":
+            self.fp.truncate()
         self.fp.flush()
 
     def _fpclose(self, fp):
@@ -2317,20 +2295,31 @@
         self.root = FastLookup.make(root)
         self.at = at
 
-    @property
-    def open(self):
-        return functools.partial(self.root.open, self.at)
+    def open(self, mode='r', *args, **kwargs):
+        """
+        Open this entry as text or binary following the semantics
+        of ``pathlib.Path.open()`` by passing arguments through
+        to io.TextIOWrapper().
+        """
+        pwd = kwargs.pop('pwd', None)
+        zip_mode = mode[0]
+        stream = self.root.open(self.at, zip_mode, pwd=pwd)
+        if 'b' in mode:
+            if args or kwargs:
+                raise ValueError("encoding args invalid for binary operation")
+            return stream
+        return io.TextIOWrapper(stream, *args, **kwargs)
 
     @property
     def name(self):
         return posixpath.basename(self.at.rstrip("/"))
 
     def read_text(self, *args, **kwargs):
-        with self.open() as strm:
-            return io.TextIOWrapper(strm, *args, **kwargs).read()
+        with self.open('r', *args, **kwargs) as strm:
+            return strm.read()
 
     def read_bytes(self):
-        with self.open() as strm:
+        with self.open('rb') as strm:
             return strm.read()
 
     def _is_child(self, path):
diff --git a/Lib/zoneinfo/__init__.py b/Lib/zoneinfo/__init__.py
new file mode 100644
index 0000000..f5510ee
--- /dev/null
+++ b/Lib/zoneinfo/__init__.py
@@ -0,0 +1,31 @@
+__all__ = [
+    "ZoneInfo",
+    "reset_tzpath",
+    "available_timezones",
+    "TZPATH",
+    "ZoneInfoNotFoundError",
+    "InvalidTZPathWarning",
+]
+
+from . import _tzpath
+from ._common import ZoneInfoNotFoundError
+
+try:
+    from _zoneinfo import ZoneInfo
+except ImportError:  # pragma: nocover
+    from ._zoneinfo import ZoneInfo
+
+reset_tzpath = _tzpath.reset_tzpath
+available_timezones = _tzpath.available_timezones
+InvalidTZPathWarning = _tzpath.InvalidTZPathWarning
+
+
+def __getattr__(name):
+    if name == "TZPATH":
+        return _tzpath.TZPATH
+    else:
+        raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
+
+
+def __dir__():
+    return sorted(list(globals()) + ["TZPATH"])
diff --git a/Lib/zoneinfo/_common.py b/Lib/zoneinfo/_common.py
new file mode 100644
index 0000000..41c898f
--- /dev/null
+++ b/Lib/zoneinfo/_common.py
@@ -0,0 +1,165 @@
+import struct
+
+
+def load_tzdata(key):
+    import importlib.resources
+
+    components = key.split("/")
+    package_name = ".".join(["tzdata.zoneinfo"] + components[:-1])
+    resource_name = components[-1]
+
+    try:
+        return importlib.resources.open_binary(package_name, resource_name)
+    except (ImportError, FileNotFoundError, UnicodeEncodeError):
+        # There are three types of exception that can be raised that all amount
+        # to "we cannot find this key":
+        #
+        # ImportError: If package_name doesn't exist (e.g. if tzdata is not
+        #   installed, or if there's an error in the folder name like
+        #   Amrica/New_York)
+        # FileNotFoundError: If resource_name doesn't exist in the package
+        #   (e.g. Europe/Krasnoy)
+        # UnicodeEncodeError: If package_name or resource_name are not UTF-8,
+        #   such as keys containing a surrogate character.
+        raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
+
+
+def load_data(fobj):
+    header = _TZifHeader.from_file(fobj)
+
+    if header.version == 1:
+        time_size = 4
+        time_type = "l"
+    else:
+        # Version 2+ has 64-bit integer transition times
+        time_size = 8
+        time_type = "q"
+
+        # Version 2+ also starts with a Version 1 header and data, which
+        # we need to skip now
+        skip_bytes = (
+            header.timecnt * 5  # Transition times and types
+            + header.typecnt * 6  # Local time type records
+            + header.charcnt  # Time zone designations
+            + header.leapcnt * 8  # Leap second records
+            + header.isstdcnt  # Standard/wall indicators
+            + header.isutcnt  # UT/local indicators
+        )
+
+        fobj.seek(skip_bytes, 1)
+
+        # Now we need to read the second header, which is not the same
+        # as the first
+        header = _TZifHeader.from_file(fobj)
+
+    typecnt = header.typecnt
+    timecnt = header.timecnt
+    charcnt = header.charcnt
+
+    # The data portion starts with timecnt transitions and indices
+    if timecnt:
+        trans_list_utc = struct.unpack(
+            f">{timecnt}{time_type}", fobj.read(timecnt * time_size)
+        )
+        trans_idx = struct.unpack(f">{timecnt}B", fobj.read(timecnt))
+    else:
+        trans_list_utc = ()
+        trans_idx = ()
+
+    # Read the ttinfo struct, (utoff, isdst, abbrind)
+    if typecnt:
+        utcoff, isdst, abbrind = zip(
+            *(struct.unpack(">lbb", fobj.read(6)) for i in range(typecnt))
+        )
+    else:
+        utcoff = ()
+        isdst = ()
+        abbrind = ()
+
+    # Now read the abbreviations. They are null-terminated strings, indexed
+    # not by position in the array but by position in the unsplit
+    # abbreviation string. I suppose this makes more sense in C, which uses
+    # null to terminate the strings, but it's inconvenient here...
+    abbr_vals = {}
+    abbr_chars = fobj.read(charcnt)
+
+    def get_abbr(idx):
+        # Gets a string starting at idx and running until the next \x00
+        #
+        # We cannot pre-populate abbr_vals by splitting on \x00 because there
+        # are some zones that use subsets of longer abbreviations, like so:
+        #
+        #  LMT\x00AHST\x00HDT\x00
+        #
+        # Where the idx to abbr mapping should be:
+        #
+        # {0: "LMT", 4: "AHST", 5: "HST", 9: "HDT"}
+        if idx not in abbr_vals:
+            span_end = abbr_chars.find(b"\x00", idx)
+            abbr_vals[idx] = abbr_chars[idx:span_end].decode()
+
+        return abbr_vals[idx]
+
+    abbr = tuple(get_abbr(idx) for idx in abbrind)
+
+    # The remainder of the file consists of leap seconds (currently unused) and
+    # the standard/wall and ut/local indicators, which are metadata we don't need.
+    # In version 2 files, we need to skip the unnecessary data to get at the TZ string:
+    if header.version >= 2:
+        # Each leap second record has size (time_size + 4)
+        skip_bytes = header.isutcnt + header.isstdcnt + header.leapcnt * 12
+        fobj.seek(skip_bytes, 1)
+
+        c = fobj.read(1)  # Should be \n
+        assert c == b"\n", c
+
+        tz_bytes = b""
+        while (c := fobj.read(1)) != b"\n":
+            tz_bytes += c
+
+        tz_str = tz_bytes
+    else:
+        tz_str = None
+
+    return trans_idx, trans_list_utc, utcoff, isdst, abbr, tz_str
+
+
+class _TZifHeader:
+    __slots__ = [
+        "version",
+        "isutcnt",
+        "isstdcnt",
+        "leapcnt",
+        "timecnt",
+        "typecnt",
+        "charcnt",
+    ]
+
+    def __init__(self, *args):
+        assert len(self.__slots__) == len(args)
+        for attr, val in zip(self.__slots__, args):
+            setattr(self, attr, val)
+
+    @classmethod
+    def from_file(cls, stream):
+        # The header starts with a 4-byte "magic" value
+        if stream.read(4) != b"TZif":
+            raise ValueError("Invalid TZif file: magic not found")
+
+        _version = stream.read(1)
+        if _version == b"\x00":
+            version = 1
+        else:
+            version = int(_version)
+        stream.read(15)
+
+        args = (version,)
+
+        # Slots are defined in the order that the bytes are arranged
+        args = args + struct.unpack(">6l", stream.read(24))
+
+        return cls(*args)
+
+
+class ZoneInfoNotFoundError(KeyError):
+    """Exception raised when a ZoneInfo key is not found."""
diff --git a/Lib/zoneinfo/_tzpath.py b/Lib/zoneinfo/_tzpath.py
new file mode 100644
index 0000000..9513611
--- /dev/null
+++ b/Lib/zoneinfo/_tzpath.py
@@ -0,0 +1,175 @@
+import os
+import sysconfig
+
+
+def reset_tzpath(to=None):
+    global TZPATH
+
+    tzpaths = to
+    if tzpaths is not None:
+        if isinstance(tzpaths, (str, bytes)):
+            raise TypeError(
+                f"tzpaths must be a list or tuple, "
+                + f"not {type(tzpaths)}: {tzpaths!r}"
+            )
+
+        if not all(map(os.path.isabs, tzpaths)):
+            raise ValueError(_get_invalid_paths_message(tzpaths))
+        base_tzpath = tzpaths
+    else:
+        env_var = os.environ.get("PYTHONTZPATH", None)
+        if env_var is not None:
+            base_tzpath = _parse_python_tzpath(env_var)
+        else:
+            base_tzpath = _parse_python_tzpath(
+                sysconfig.get_config_var("TZPATH")
+            )
+
+    TZPATH = tuple(base_tzpath)
+
+
+def _parse_python_tzpath(env_var):
+    if not env_var:
+        return ()
+
+    raw_tzpath = env_var.split(os.pathsep)
+    new_tzpath = tuple(filter(os.path.isabs, raw_tzpath))
+
+    # If anything has been filtered out, we will warn about it
+    if len(new_tzpath) != len(raw_tzpath):
+        import warnings
+
+        msg = _get_invalid_paths_message(raw_tzpath)
+
+        warnings.warn(
+            "Invalid paths specified in PYTHONTZPATH environment variable."
+            + msg,
+            InvalidTZPathWarning,
+        )
+
+    return new_tzpath
+
+
+def _get_invalid_paths_message(tzpaths):
+    invalid_paths = (path for path in tzpaths if not os.path.isabs(path))
+
+    prefix = "\n    "
+    indented_str = prefix + prefix.join(invalid_paths)
+
+    return (
+        "Paths should be absolute but found the following relative paths:"
+        + indented_str
+    )
+
+
+def find_tzfile(key):
+    """Retrieve the path to a TZif file from a key."""
+    _validate_tzfile_path(key)
+    for search_path in TZPATH:
+        filepath = os.path.join(search_path, key)
+        if os.path.isfile(filepath):
+            return filepath
+
+    return None
+
+
+_TEST_PATH = os.path.normpath(os.path.join("_", "_"))[:-1]
+
+
+def _validate_tzfile_path(path, _base=_TEST_PATH):
+    if os.path.isabs(path):
+        raise ValueError(
+            f"ZoneInfo keys may not be absolute paths, got: {path}"
+        )
+
+    # We only care about the kinds of path normalizations that would change the
+    # length of the key - e.g. a/../b -> a/b, or a/b/ -> a/b. On Windows,
+    # normpath will also change from a/b to a\b, but that would still preserve
+    # the length.
+    new_path = os.path.normpath(path)
+    if len(new_path) != len(path):
+        raise ValueError(
+            f"ZoneInfo keys must be normalized relative paths, got: {path}"
+        )
+
+    resolved = os.path.normpath(os.path.join(_base, new_path))
+    if not resolved.startswith(_base):
+        raise ValueError(
+            f"ZoneInfo keys must refer to subdirectories of TZPATH, got: {path}"
+        )
+
+
+del _TEST_PATH
+
+
+def available_timezones():
+    """Returns a set containing all available time zones.
+
+    .. caution::
+
+        This may attempt to open a large number of files, since the best way to
+        determine if a given file on the time zone search path is to open it
+        and check for the "magic string" at the beginning.
+    """
+    from importlib import resources
+
+    valid_zones = set()
+
+    # Start with loading from the tzdata package if it exists: this has a
+    # pre-assembled list of zones that only requires opening one file.
+    try:
+        with resources.open_text("tzdata", "zones") as f:
+            for zone in f:
+                zone = zone.strip()
+                if zone:
+                    valid_zones.add(zone)
+    except (ImportError, FileNotFoundError):
+        pass
+
+    def valid_key(fpath):
+        try:
+            with open(fpath, "rb") as f:
+                return f.read(4) == b"TZif"
+        except Exception:  # pragma: nocover
+            return False
+
+    for tz_root in TZPATH:
+        if not os.path.exists(tz_root):
+            continue
+
+        for root, dirnames, files in os.walk(tz_root):
+            if root == tz_root:
+                # right/ and posix/ are special directories and shouldn't be
+                # included in the output of available zones
+                if "right" in dirnames:
+                    dirnames.remove("right")
+                if "posix" in dirnames:
+                    dirnames.remove("posix")
+
+            for file in files:
+                fpath = os.path.join(root, file)
+
+                key = os.path.relpath(fpath, start=tz_root)
+                if os.sep != "/":  # pragma: nocover
+                    key = key.replace(os.sep, "/")
+
+                if not key or key in valid_zones:
+                    continue
+
+                if valid_key(fpath):
+                    valid_zones.add(key)
+
+    if "posixrules" in valid_zones:
+        # posixrules is a special symlink-only time zone where it exists, it
+        # should not be included in the output
+        valid_zones.remove("posixrules")
+
+    return valid_zones
+
+
+class InvalidTZPathWarning(RuntimeWarning):
+    """Warning raised if an invalid path is specified in PYTHONTZPATH."""
+
+
+TZPATH = ()
+reset_tzpath()
diff --git a/Lib/zoneinfo/_zoneinfo.py b/Lib/zoneinfo/_zoneinfo.py
new file mode 100644
index 0000000..9810637
--- /dev/null
+++ b/Lib/zoneinfo/_zoneinfo.py
@@ -0,0 +1,752 @@
+import bisect
+import calendar
+import collections
+import functools
+import re
+import weakref
+from datetime import datetime, timedelta, tzinfo
+
+from . import _common, _tzpath
+
+EPOCH = datetime(1970, 1, 1)
+EPOCHORDINAL = datetime(1970, 1, 1).toordinal()
+
+# It is relatively expensive to construct new timedelta objects, and in most
+# cases we're looking at the same deltas, like integer numbers of hours, etc.
+# To improve speed and memory use, we'll keep a dictionary with references
+# to the ones we've already used so far.
+#
+# Loading every time zone in the 2020a version of the time zone database
+# requires 447 timedeltas, which requires approximately the amount of space
+# that ZoneInfo("America/New_York") with 236 transitions takes up, so we will
+# set the cache size to 512 so that in the common case we always get cache
+# hits, but specifically crafted ZoneInfo objects don't leak arbitrary amounts
+# of memory.
+@functools.lru_cache(maxsize=512)
+def _load_timedelta(seconds):
+    return timedelta(seconds=seconds)
+
+
+class ZoneInfo(tzinfo):
+    _strong_cache_size = 8
+    _strong_cache = collections.OrderedDict()
+    _weak_cache = weakref.WeakValueDictionary()
+    __module__ = "zoneinfo"
+
+    def __init_subclass__(cls):
+        cls._strong_cache = collections.OrderedDict()
+        cls._weak_cache = weakref.WeakValueDictionary()
+
+    def __new__(cls, key):
+        instance = cls._weak_cache.get(key, None)
+        if instance is None:
+            instance = cls._weak_cache.setdefault(key, cls._new_instance(key))
+            instance._from_cache = True
+
+        # Update the "strong" cache
+        cls._strong_cache[key] = cls._strong_cache.pop(key, instance)
+
+        if len(cls._strong_cache) > cls._strong_cache_size:
+            cls._strong_cache.popitem(last=False)
+
+        return instance
+
+    @classmethod
+    def no_cache(cls, key):
+        obj = cls._new_instance(key)
+        obj._from_cache = False
+
+        return obj
+
+    @classmethod
+    def _new_instance(cls, key):
+        obj = super().__new__(cls)
+        obj._key = key
+        obj._file_path = obj._find_tzfile(key)
+
+        if obj._file_path is not None:
+            file_obj = open(obj._file_path, "rb")
+        else:
+            file_obj = _common.load_tzdata(key)
+
+        with file_obj as f:
+            obj._load_file(f)
+
+        return obj
+
+    @classmethod
+    def from_file(cls, fobj, /, key=None):
+        obj = super().__new__(cls)
+        obj._key = key
+        obj._file_path = None
+        obj._load_file(fobj)
+        obj._file_repr = repr(fobj)
+
+        # Disable pickling for objects created from files
+        obj.__reduce__ = obj._file_reduce
+
+        return obj
+
+    @classmethod
+    def clear_cache(cls, *, only_keys=None):
+        if only_keys is not None:
+            for key in only_keys:
+                cls._weak_cache.pop(key, None)
+                cls._strong_cache.pop(key, None)
+
+        else:
+            cls._weak_cache.clear()
+            cls._strong_cache.clear()
+
+    @property
+    def key(self):
+        return self._key
+
+    def utcoffset(self, dt):
+        return self._find_trans(dt).utcoff
+
+    def dst(self, dt):
+        return self._find_trans(dt).dstoff
+
+    def tzname(self, dt):
+        return self._find_trans(dt).tzname
+
+    def fromutc(self, dt):
+        """Convert from datetime in UTC to datetime in local time"""
+
+        if not isinstance(dt, datetime):
+            raise TypeError("fromutc() requires a datetime argument")
+        if dt.tzinfo is not self:
+            raise ValueError("dt.tzinfo is not self")
+
+        timestamp = self._get_local_timestamp(dt)
+        num_trans = len(self._trans_utc)
+
+        if num_trans >= 1 and timestamp < self._trans_utc[0]:
+            tti = self._tti_before
+            fold = 0
+        elif (
+            num_trans == 0 or timestamp > self._trans_utc[-1]
+        ) and not isinstance(self._tz_after, _ttinfo):
+            tti, fold = self._tz_after.get_trans_info_fromutc(
+                timestamp, dt.year
+            )
+        elif num_trans == 0:
+            tti = self._tz_after
+            fold = 0
+        else:
+            idx = bisect.bisect_right(self._trans_utc, timestamp)
+
+            if num_trans > 1 and timestamp >= self._trans_utc[1]:
+                tti_prev, tti = self._ttinfos[idx - 2 : idx]
+            elif timestamp > self._trans_utc[-1]:
+                tti_prev = self._ttinfos[-1]
+                tti = self._tz_after
+            else:
+                tti_prev = self._tti_before
+                tti = self._ttinfos[0]
+
+            # Detect fold
+            shift = tti_prev.utcoff - tti.utcoff
+            fold = shift.total_seconds() > timestamp - self._trans_utc[idx - 1]
+        dt += tti.utcoff
+        if fold:
+            return dt.replace(fold=1)
+        else:
+            return dt
+
+    def _find_trans(self, dt):
+        if dt is None:
+            if self._fixed_offset:
+                return self._tz_after
+            else:
+                return _NO_TTINFO
+
+        ts = self._get_local_timestamp(dt)
+
+        lt = self._trans_local[dt.fold]
+
+        num_trans = len(lt)
+
+        if num_trans and ts < lt[0]:
+            return self._tti_before
+        elif not num_trans or ts > lt[-1]:
+            if isinstance(self._tz_after, _TZStr):
+                return self._tz_after.get_trans_info(ts, dt.year, dt.fold)
+            else:
+                return self._tz_after
+        else:
+            # idx is the transition that occurs after this timestamp, so we
+            # subtract off 1 to get the current ttinfo
+            idx = bisect.bisect_right(lt, ts) - 1
+            assert idx >= 0
+            return self._ttinfos[idx]
+
+    def _get_local_timestamp(self, dt):
+        return (
+            (dt.toordinal() - EPOCHORDINAL) * 86400
+            + dt.hour * 3600
+            + dt.minute * 60
+            + dt.second
+        )
+
+    def __str__(self):
+        if self._key is not None:
+            return f"{self._key}"
+        else:
+            return repr(self)
+
+    def __repr__(self):
+        if self._key is not None:
+            return f"{self.__class__.__name__}(key={self._key!r})"
+        else:
+            return f"{self.__class__.__name__}.from_file({self._file_repr})"
+
+    def __reduce__(self):
+        return (self.__class__._unpickle, (self._key, self._from_cache))
+
+    def _file_reduce(self):
+        import pickle
+
+        raise pickle.PicklingError(
+            "Cannot pickle a ZoneInfo file created from a file stream."
+        )
+
+    @classmethod
+    def _unpickle(cls, key, from_cache, /):
+        if from_cache:
+            return cls(key)
+        else:
+            return cls.no_cache(key)
+
+    def _find_tzfile(self, key):
+        return _tzpath.find_tzfile(key)
+
+    def _load_file(self, fobj):
+        # Retrieve all the data as it exists in the zoneinfo file
+        trans_idx, trans_utc, utcoff, isdst, abbr, tz_str = _common.load_data(
+            fobj
+        )
+
+        # Infer the DST offsets (needed for .dst()) from the data
+        dstoff = self._utcoff_to_dstoff(trans_idx, utcoff, isdst)
+
+        # Convert all the transition times (UTC) into "seconds since 1970-01-01 local time"
+        trans_local = self._ts_to_local(trans_idx, trans_utc, utcoff)
+
+        # Construct `_ttinfo` objects for each transition in the file
+        _ttinfo_list = [
+            _ttinfo(
+                _load_timedelta(utcoffset), _load_timedelta(dstoffset), tzname
+            )
+            for utcoffset, dstoffset, tzname in zip(utcoff, dstoff, abbr)
+        ]
+
+        self._trans_utc = trans_utc
+        self._trans_local = trans_local
+        self._ttinfos = [_ttinfo_list[idx] for idx in trans_idx]
+
+        # Find the first non-DST transition
+        for i in range(len(isdst)):
+            if not isdst[i]:
+                self._tti_before = _ttinfo_list[i]
+                break
+        else:
+            if self._ttinfos:
+                self._tti_before = self._ttinfos[0]
+            else:
+                self._tti_before = None
+
+        # Set the "fallback" time zone
+        if tz_str is not None and tz_str != b"":
+            self._tz_after = _parse_tz_str(tz_str.decode())
+        else:
+            if not self._ttinfos and not _ttinfo_list:
+                raise ValueError("No time zone information found.")
+
+            if self._ttinfos:
+                self._tz_after = self._ttinfos[-1]
+            else:
+                self._tz_after = _ttinfo_list[-1]
+
+        # Determine if this is a "fixed offset" zone, meaning that the output
+        # of the utcoffset, dst and tzname functions does not depend on the
+        # specific datetime passed.
+        #
+        # We make three simplifying assumptions here:
+        #
+        # 1. If _tz_after is not a _ttinfo, it has transitions that might
+        #    actually occur (it is possible to construct TZ strings that
+        #    specify STD and DST but no transitions ever occur, such as
+        #    AAA0BBB,0/0,J365/25).
+        # 2. If _ttinfo_list contains more than one _ttinfo object, the objects
+        #    represent different offsets.
+        # 3. _ttinfo_list contains no unused _ttinfos (in which case an
+        #    otherwise fixed-offset zone with extra _ttinfos defined may
+        #    appear to *not* be a fixed offset zone).
+        #
+        # Violations to these assumptions would be fairly exotic, and exotic
+        # zones should almost certainly not be used with datetime.time (the
+        # only thing that would be affected by this).
+        if len(_ttinfo_list) > 1 or not isinstance(self._tz_after, _ttinfo):
+            self._fixed_offset = False
+        elif not _ttinfo_list:
+            self._fixed_offset = True
+        else:
+            self._fixed_offset = _ttinfo_list[0] == self._tz_after
+
+    @staticmethod
+    def _utcoff_to_dstoff(trans_idx, utcoffsets, isdsts):
+        # Now we must transform our ttis and abbrs into `_ttinfo` objects,
+        # but there is an issue: .dst() must return a timedelta with the
+        # difference between utcoffset() and the "standard" offset, but
+        # the "base offset" and "DST offset" are not encoded in the file;
+        # we can infer what they are from the isdst flag, but it is not
+        # sufficient to to just look at the last standard offset, because
+        # occasionally countries will shift both DST offset and base offset.
+
+        typecnt = len(isdsts)
+        dstoffs = [0] * typecnt  # Provisionally assign all to 0.
+        dst_cnt = sum(isdsts)
+        dst_found = 0
+
+        for i in range(1, len(trans_idx)):
+            if dst_cnt == dst_found:
+                break
+
+            idx = trans_idx[i]
+
+            dst = isdsts[idx]
+
+            # We're only going to look at daylight saving time
+            if not dst:
+                continue
+
+            # Skip any offsets that have already been assigned
+            if dstoffs[idx] != 0:
+                continue
+
+            dstoff = 0
+            utcoff = utcoffsets[idx]
+
+            comp_idx = trans_idx[i - 1]
+
+            if not isdsts[comp_idx]:
+                dstoff = utcoff - utcoffsets[comp_idx]
+
+            if not dstoff and idx < (typecnt - 1):
+                comp_idx = trans_idx[i + 1]
+
+                # If the following transition is also DST and we couldn't
+                # find the DST offset by this point, we're going ot have to
+                # skip it and hope this transition gets assigned later
+                if isdsts[comp_idx]:
+                    continue
+
+                dstoff = utcoff - utcoffsets[comp_idx]
+
+            if dstoff:
+                dst_found += 1
+                dstoffs[idx] = dstoff
+        else:
+            # If we didn't find a valid value for a given index, we'll end up
+            # with dstoff = 0 for something where `isdst=1`. This is obviously
+            # wrong - one hour will be a much better guess than 0
+            for idx in range(typecnt):
+                if not dstoffs[idx] and isdsts[idx]:
+                    dstoffs[idx] = 3600
+
+        return dstoffs
+
+    @staticmethod
+    def _ts_to_local(trans_idx, trans_list_utc, utcoffsets):
+        """Generate number of seconds since 1970 *in the local time*.
+
+        This is necessary to easily find the transition times in local time"""
+        if not trans_list_utc:
+            return [[], []]
+
+        # Start with the timestamps and modify in-place
+        trans_list_wall = [list(trans_list_utc), list(trans_list_utc)]
+
+        if len(utcoffsets) > 1:
+            offset_0 = utcoffsets[0]
+            offset_1 = utcoffsets[trans_idx[0]]
+            if offset_1 > offset_0:
+                offset_1, offset_0 = offset_0, offset_1
+        else:
+            offset_0 = offset_1 = utcoffsets[0]
+
+        trans_list_wall[0][0] += offset_0
+        trans_list_wall[1][0] += offset_1
+
+        for i in range(1, len(trans_idx)):
+            offset_0 = utcoffsets[trans_idx[i - 1]]
+            offset_1 = utcoffsets[trans_idx[i]]
+
+            if offset_1 > offset_0:
+                offset_1, offset_0 = offset_0, offset_1
+
+            trans_list_wall[0][i] += offset_0
+            trans_list_wall[1][i] += offset_1
+
+        return trans_list_wall
+
+
+class _ttinfo:
+    __slots__ = ["utcoff", "dstoff", "tzname"]
+
+    def __init__(self, utcoff, dstoff, tzname):
+        self.utcoff = utcoff
+        self.dstoff = dstoff
+        self.tzname = tzname
+
+    def __eq__(self, other):
+        return (
+            self.utcoff == other.utcoff
+            and self.dstoff == other.dstoff
+            and self.tzname == other.tzname
+        )
+
+    def __repr__(self):  # pragma: nocover
+        return (
+            f"{self.__class__.__name__}"
+            + f"({self.utcoff}, {self.dstoff}, {self.tzname})"
+        )
+
+
+_NO_TTINFO = _ttinfo(None, None, None)
+
+
+class _TZStr:
+    __slots__ = (
+        "std",
+        "dst",
+        "start",
+        "end",
+        "get_trans_info",
+        "get_trans_info_fromutc",
+        "dst_diff",
+    )
+
+    def __init__(
+        self, std_abbr, std_offset, dst_abbr, dst_offset, start=None, end=None
+    ):
+        self.dst_diff = dst_offset - std_offset
+        std_offset = _load_timedelta(std_offset)
+        self.std = _ttinfo(
+            utcoff=std_offset, dstoff=_load_timedelta(0), tzname=std_abbr
+        )
+
+        self.start = start
+        self.end = end
+
+        dst_offset = _load_timedelta(dst_offset)
+        delta = _load_timedelta(self.dst_diff)
+        self.dst = _ttinfo(utcoff=dst_offset, dstoff=delta, tzname=dst_abbr)
+
+        # These are assertions because the constructor should only be called
+        # by functions that would fail before passing start or end
+        assert start is not None, "No transition start specified"
+        assert end is not None, "No transition end specified"
+
+        self.get_trans_info = self._get_trans_info
+        self.get_trans_info_fromutc = self._get_trans_info_fromutc
+
+    def transitions(self, year):
+        start = self.start.year_to_epoch(year)
+        end = self.end.year_to_epoch(year)
+        return start, end
+
+    def _get_trans_info(self, ts, year, fold):
+        """Get the information about the current transition - tti"""
+        start, end = self.transitions(year)
+
+        # With fold = 0, the period (denominated in local time) with the
+        # smaller offset starts at the end of the gap and ends at the end of
+        # the fold; with fold = 1, it runs from the start of the gap to the
+        # beginning of the fold.
+        #
+        # So in order to determine the DST boundaries we need to know both
+        # the fold and whether DST is positive or negative (rare), and it
+        # turns out that this boils down to fold XOR is_positive.
+        if fold == (self.dst_diff >= 0):
+            end -= self.dst_diff
+        else:
+            start += self.dst_diff
+
+        if start < end:
+            isdst = start <= ts < end
+        else:
+            isdst = not (end <= ts < start)
+
+        return self.dst if isdst else self.std
+
+    def _get_trans_info_fromutc(self, ts, year):
+        start, end = self.transitions(year)
+        start -= self.std.utcoff.total_seconds()
+        end -= self.dst.utcoff.total_seconds()
+
+        if start < end:
+            isdst = start <= ts < end
+        else:
+            isdst = not (end <= ts < start)
+
+        # For positive DST, the ambiguous period is one dst_diff after the end
+        # of DST; for negative DST, the ambiguous period is one dst_diff before
+        # the start of DST.
+        if self.dst_diff > 0:
+            ambig_start = end
+            ambig_end = end + self.dst_diff
+        else:
+            ambig_start = start
+            ambig_end = start - self.dst_diff
+
+        fold = ambig_start <= ts < ambig_end
+
+        return (self.dst if isdst else self.std, fold)
+
+
+def _post_epoch_days_before_year(year):
+    """Get the number of days between 1970-01-01 and YEAR-01-01"""
+    y = year - 1
+    return y * 365 + y // 4 - y // 100 + y // 400 - EPOCHORDINAL
+
+
+class _DayOffset:
+    __slots__ = ["d", "julian", "hour", "minute", "second"]
+
+    def __init__(self, d, julian, hour=2, minute=0, second=0):
+        if not (0 + julian) <= d <= 365:
+            min_day = 0 + julian
+            raise ValueError(f"d must be in [{min_day}, 365], not: {d}")
+
+        self.d = d
+        self.julian = julian
+        self.hour = hour
+        self.minute = minute
+        self.second = second
+
+    def year_to_epoch(self, year):
+        days_before_year = _post_epoch_days_before_year(year)
+
+        d = self.d
+        if self.julian and d >= 59 and calendar.isleap(year):
+            d += 1
+
+        epoch = (days_before_year + d) * 86400
+        epoch += self.hour * 3600 + self.minute * 60 + self.second
+
+        return epoch
+
+
+class _CalendarOffset:
+    __slots__ = ["m", "w", "d", "hour", "minute", "second"]
+
+    _DAYS_BEFORE_MONTH = (
+        -1,
+        0,
+        31,
+        59,
+        90,
+        120,
+        151,
+        181,
+        212,
+        243,
+        273,
+        304,
+        334,
+    )
+
+    def __init__(self, m, w, d, hour=2, minute=0, second=0):
+        if not 0 < m <= 12:
+            raise ValueError("m must be in (0, 12]")
+
+        if not 0 < w <= 5:
+            raise ValueError("w must be in (0, 5]")
+
+        if not 0 <= d <= 6:
+            raise ValueError("d must be in [0, 6]")
+
+        self.m = m
+        self.w = w
+        self.d = d
+        self.hour = hour
+        self.minute = minute
+        self.second = second
+
+    @classmethod
+    def _ymd2ord(cls, year, month, day):
+        return (
+            _post_epoch_days_before_year(year)
+            + cls._DAYS_BEFORE_MONTH[month]
+            + (month > 2 and calendar.isleap(year))
+            + day
+        )
+
+    # TODO: These are not actually epoch dates as they are expressed in local time
+    def year_to_epoch(self, year):
+        """Calculates the datetime of the occurrence from the year"""
+        # We know year and month, we need to convert w, d into day of month
+        #
+        # Week 1 is the first week in which day `d` (where 0 = Sunday) appears.
+        # Week 5 represents the last occurrence of day `d`, so we need to know
+        # the range of the month.
+        first_day, days_in_month = calendar.monthrange(year, self.m)
+
+        # This equation seems magical, so I'll break it down:
+        # 1. calendar says 0 = Monday, POSIX says 0 = Sunday
+        #    so we need first_day + 1 to get 1 = Monday -> 7 = Sunday,
+        #    which is still equivalent because this math is mod 7
+        # 2. Get first day - desired day mod 7: -1 % 7 = 6, so we don't need
+        #    to do anything to adjust negative numbers.
+        # 3. Add 1 because month days are a 1-based index.
+        month_day = (self.d - (first_day + 1)) % 7 + 1
+
+        # Now use a 0-based index version of `w` to calculate the w-th
+        # occurrence of `d`
+        month_day += (self.w - 1) * 7
+
+        # month_day will only be > days_in_month if w was 5, and `w` means
+        # "last occurrence of `d`", so now we just check if we over-shot the
+        # end of the month and if so knock off 1 week.
+        if month_day > days_in_month:
+            month_day -= 7
+
+        ordinal = self._ymd2ord(year, self.m, month_day)
+        epoch = ordinal * 86400
+        epoch += self.hour * 3600 + self.minute * 60 + self.second
+        return epoch
+
+
+def _parse_tz_str(tz_str):
+    # The tz string has the format:
+    #
+    # std[offset[dst[offset],start[/time],end[/time]]]
+    #
+    # std and dst must be 3 or more characters long and must not contain
+    # a leading colon, embedded digits, commas, nor a plus or minus signs;
+    # The spaces between "std" and "offset" are only for display and are
+    # not actually present in the string.
+    #
+    # The format of the offset is ``[+|-]hh[:mm[:ss]]``
+
+    offset_str, *start_end_str = tz_str.split(",", 1)
+
+    # fmt: off
+    parser_re = re.compile(
+        r"(?P<std>[^<0-9:.+-]+|<[a-zA-Z0-9+\-]+>)" +
+        r"((?P<stdoff>[+-]?\d{1,2}(:\d{2}(:\d{2})?)?)" +
+            r"((?P<dst>[^0-9:.+-]+|<[a-zA-Z0-9+\-]+>)" +
+                r"((?P<dstoff>[+-]?\d{1,2}(:\d{2}(:\d{2})?)?))?" +
+            r")?" + # dst
+        r")?$" # stdoff
+    )
+    # fmt: on
+
+    m = parser_re.match(offset_str)
+
+    if m is None:
+        raise ValueError(f"{tz_str} is not a valid TZ string")
+
+    std_abbr = m.group("std")
+    dst_abbr = m.group("dst")
+    dst_offset = None
+
+    std_abbr = std_abbr.strip("<>")
+
+    if dst_abbr:
+        dst_abbr = dst_abbr.strip("<>")
+
+    if std_offset := m.group("stdoff"):
+        try:
+            std_offset = _parse_tz_delta(std_offset)
+        except ValueError as e:
+            raise ValueError(f"Invalid STD offset in {tz_str}") from e
+    else:
+        std_offset = 0
+
+    if dst_abbr is not None:
+        if dst_offset := m.group("dstoff"):
+            try:
+                dst_offset = _parse_tz_delta(dst_offset)
+            except ValueError as e:
+                raise ValueError(f"Invalid DST offset in {tz_str}") from e
+        else:
+            dst_offset = std_offset + 3600
+
+        if not start_end_str:
+            raise ValueError(f"Missing transition rules: {tz_str}")
+
+        start_end_strs = start_end_str[0].split(",", 1)
+        try:
+            start, end = (_parse_dst_start_end(x) for x in start_end_strs)
+        except ValueError as e:
+            raise ValueError(f"Invalid TZ string: {tz_str}") from e
+
+        return _TZStr(std_abbr, std_offset, dst_abbr, dst_offset, start, end)
+    elif start_end_str:
+        raise ValueError(f"Transition rule present without DST: {tz_str}")
+    else:
+        # This is a static ttinfo, don't return _TZStr
+        return _ttinfo(
+            _load_timedelta(std_offset), _load_timedelta(0), std_abbr
+        )
+
+
+def _parse_dst_start_end(dststr):
+    date, *time = dststr.split("/")
+    if date[0] == "M":
+        n_is_julian = False
+        m = re.match(r"M(\d{1,2})\.(\d).(\d)$", date)
+        if m is None:
+            raise ValueError(f"Invalid dst start/end date: {dststr}")
+        date_offset = tuple(map(int, m.groups()))
+        offset = _CalendarOffset(*date_offset)
+    else:
+        if date[0] == "J":
+            n_is_julian = True
+            date = date[1:]
+        else:
+            n_is_julian = False
+
+        doy = int(date)
+        offset = _DayOffset(doy, n_is_julian)
+
+    if time:
+        time_components = list(map(int, time[0].split(":")))
+        n_components = len(time_components)
+        if n_components < 3:
+            time_components.extend([0] * (3 - n_components))
+        offset.hour, offset.minute, offset.second = time_components
+
+    return offset
+
+
+def _parse_tz_delta(tz_delta):
+    match = re.match(
+        r"(?P<sign>[+-])?(?P<h>\d{1,2})(:(?P<m>\d{2})(:(?P<s>\d{2}))?)?",
+        tz_delta,
+    )
+    # Anything passed to this function should already have hit an equivalent
+    # regular expression to find the section to parse.
+    assert match is not None, tz_delta
+
+    h, m, s = (
+        int(v) if v is not None else 0
+        for v in map(match.group, ("h", "m", "s"))
+    )
+
+    total = h * 3600 + m * 60 + s
+
+    if not -86400 < total < 86400:
+        raise ValueError(
+            f"Offset must be strictly between -24h and +24h: {tz_delta}"
+        )
+
+    # Yes, +5 maps to an offset of -5h
+    if match.group("sign") != "-":
+        total *= -1
+
+    return total
diff --git a/METADATA b/METADATA
index 7022d18..8b18b70 100644
--- a/METADATA
+++ b/METADATA
@@ -9,11 +9,12 @@
     type: GIT
     value: "https://github.com/python/cpython"
   }
-  version: "v3.8.5"
+  version: "v3.9.1"
   license_type: NOTICE
   last_upgrade_date {
-    year: 2020
-    month: 7
-    day: 20
+    year: 2021
+    month: 1
+    day: 13
   }
 }
+
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index a58b922..16816d1 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -116,7 +116,8 @@
 DEPSRC = os.path.join(WORKDIR, 'third-party')
 DEPSRC = os.path.expanduser('~/Universal/other-sources')
 
-universal_opts_map = { '32-bit': ('i386', 'ppc',),
+universal_opts_map = { 'universal2': ('arm64', 'x86_64'),
+                       '32-bit': ('i386', 'ppc',),
                        '64-bit': ('x86_64', 'ppc64',),
                        'intel':  ('i386', 'x86_64'),
                        'intel-32':  ('i386',),
@@ -124,6 +125,7 @@
                        '3-way':  ('ppc', 'i386', 'x86_64'),
                        'all':    ('i386', 'ppc', 'x86_64', 'ppc64',) }
 default_target_map = {
+        'universal2': '10.9',
         '64-bit': '10.5',
         '3-way': '10.5',
         'intel': '10.5',
@@ -151,6 +153,9 @@
 def getDeptargetTuple():
     return tuple([int(n) for n in DEPTARGET.split('.')[0:2]])
 
+def getBuildTuple():
+    return tuple([int(n) for n in platform.mac_ver()[0].split('.')[0:2]])
+
 def getTargetCompilers():
     target_cc_map = {
         '10.4': ('gcc-4.0', 'g++-4.0'),
@@ -190,6 +195,34 @@
 def internalTk():
     return getDeptargetTuple() >= (10, 6)
 
+# Do we use 8.6.8 when building our own copy
+# of Tcl/Tk or a modern version.
+#   We use the old version when buildin on
+#   old versions of macOS due to build issues.
+def useOldTk():
+    return getBuildTuple() < (10, 15)
+
+
+def tweak_tcl_build(basedir, archList):
+    with open("Makefile", "r") as fp:
+        contents = fp.readlines()
+
+    # For reasons I don't understand the tcl configure script
+    # decides that some stdlib symbols aren't present, before
+    # deciding that strtod is broken.
+    new_contents = []
+    for line in contents:
+        if line.startswith("COMPAT_OBJS"):
+            # note: the space before strtod.o is intentional,
+            # the detection of a broken strtod results in
+            # "fixstrod.o" on this line.
+            for nm in ("strstr.o", "strtoul.o", " strtod.o"):
+                line = line.replace(nm, "")
+        new_contents.append(line)
+
+    with open("Makefile", "w") as fp:
+        fp.writelines(new_contents)
+
 # List of names of third party software built with this installer.
 # The names will be inserted into the rtf version of the License.
 THIRD_PARTY_LIBS = []
@@ -215,15 +248,33 @@
               buildrecipe=build_universal_openssl,
               configure=None,
               install=None,
+              patches=[
+                  "openssl-mac-arm64.patch",
+                   ],
           ),
     ])
 
     if internalTk():
+        if useOldTk():
+            tcl_tk_ver='8.6.8'
+            tcl_checksum='81656d3367af032e0ae6157eff134f89'
+
+            tk_checksum='5e0faecba458ee1386078fb228d008ba'
+            tk_patches = ['tk868_on_10_8_10_9.patch']
+
+        else:
+            tcl_tk_ver='8.6.10'
+            tcl_checksum='97c55573f8520bcab74e21bfd8d0aadc'
+
+            tk_checksum='602a47ad9ecac7bf655ada729d140a94'
+            tk_patches = [ ]
+
+
         result.extend([
           dict(
-              name="Tcl 8.6.8",
-              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tcl8.6.8-src.tar.gz",
-              checksum='81656d3367af032e0ae6157eff134f89',
+              name="Tcl %s"%(tcl_tk_ver,),
+              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tcl%s-src.tar.gz"%(tcl_tk_ver,),
+              checksum=tcl_checksum,
               buildDir="unix",
               configure_pre=[
                     '--enable-shared',
@@ -231,18 +282,17 @@
                     '--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib'%(getVersion(),),
               ],
               useLDFlags=False,
+              buildrecipe=tweak_tcl_build,
               install='make TCL_LIBRARY=%(TCL_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s DESTDIR=%(DESTDIR)s'%{
                   "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')),
                   "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.6'%(getVersion())),
                   },
               ),
           dict(
-              name="Tk 8.6.8",
-              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tk8.6.8-src.tar.gz",
-              checksum='5e0faecba458ee1386078fb228d008ba',
-              patches=[
-                  "tk868_on_10_8_10_9.patch",
-                   ],
+              name="Tk %s"%(tcl_tk_ver,),
+              url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tk%s-src.tar.gz"%(tcl_tk_ver,),
+              checksum=tk_checksum,
+              patches=tk_patches,
               buildDir="unix",
               configure_pre=[
                     '--enable-aqua',
@@ -307,9 +357,9 @@
                   ),
           ),
           dict(
-              name="SQLite 3.32.3",
-              url="https://sqlite.org/2020/sqlite-autoconf-3320300.tar.gz",
-              checksum='2e3911a3c15e85c2f2d040154bbe5ce3',
+              name="SQLite 3.33.0",
+              url="https://sqlite.org/2020/sqlite-autoconf-3330000.tar.gz",
+              checksum='842a8a100d7b01b09e543deb2b7951dd',
               extra_cflags=('-Os '
                             '-DSQLITE_ENABLE_FTS5 '
                             '-DSQLITE_ENABLE_FTS4 '
@@ -537,8 +587,8 @@
     Check that we're running on a supported system.
     """
 
-    if sys.version_info[0:2] < (2, 5):
-        fatal("This script must be run with Python 2.5 (or later)")
+    if sys.version_info[0:2] < (2, 7):
+        fatal("This script must be run with Python 2.7 (or later)")
 
     if platform.system() != 'Darwin':
         fatal("This script should be run on a macOS 10.5 (or later) system")
@@ -606,9 +656,6 @@
         base_path = base_path + ':' + OLD_DEVELOPER_TOOLS
     os.environ['PATH'] = base_path
     print("Setting default PATH: %s"%(os.environ['PATH']))
-    # Ensure we have access to sphinx-build.
-    # You may have to create a link in /usr/bin for it.
-    runCommand('sphinx-build --version')
 
 def parseOptions(args=None):
     """
@@ -801,6 +848,7 @@
         arch_opts = {
             "i386": ["darwin-i386-cc"],
             "x86_64": ["darwin64-x86_64-cc", "enable-ec_nistp_64_gcc_128"],
+            "arm64": ["darwin64-arm64-cc"],
             "ppc": ["darwin-ppc-cc"],
             "ppc64": ["darwin64-ppc-cc"],
         }
@@ -1567,8 +1615,17 @@
     if os.path.exists(outdir):
         shutil.rmtree(outdir)
 
+    # We used to use the deployment target as the last characters of the 
+    # installer file name. With the introduction of weaklinked installer
+    # variants, we may have two variants with the same file name, i.e.
+    # both ending in '10.9'.  To avoid this, we now use the major/minor
+    # version numbers of the macOS version we are building on, i.e.
+    # '10.9' as before for 10.9+ variant, '11.0' for universal2 11.0-.
+    # it's not ideal but should cause the least disruption to packaging
+    # workflows.
+    build_system_version = '.'.join(platform.mac_ver()[0].split('.')[0:2])
     imagepath = os.path.join(outdir,
-                    'python-%s-macosx%s'%(getFullVersion(),DEPTARGET))
+                    'python-%s-macosx%s'%(getFullVersion(),build_system_version))
     if INCLUDE_TIMESTAMP:
         imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3])
     imagepath = imagepath + '.dmg'
diff --git a/Mac/BuildScript/openssl-mac-arm64.patch b/Mac/BuildScript/openssl-mac-arm64.patch
new file mode 100644
index 0000000..11267fb
--- /dev/null
+++ b/Mac/BuildScript/openssl-mac-arm64.patch
@@ -0,0 +1,41 @@
+diff -ur openssl-1.1.1g-orig/Configurations/10-main.conf openssl-1.1.1g/Configurations/10-main.conf
+--- openssl-1.1.1g-orig/Configurations/10-main.conf	2020-04-21 14:22:39.000000000 +0200
++++ openssl-1.1.1g/Configurations/10-main.conf	2020-07-26 12:21:32.000000000 +0200
+@@ -1557,6 +1557,14 @@
+         bn_ops           => "SIXTY_FOUR_BIT_LONG",
+         perlasm_scheme   => "macosx",
+     },
++    "darwin64-arm64-cc" => {
++        inherit_from     => [ "darwin-common", asm("aarch64_asm") ],
++        CFLAGS           => add("-Wall"),
++        cflags           => add("-arch arm64"),
++        lib_cppflags     => add("-DL_ENDIAN"),
++        bn_ops           => "SIXTY_FOUR_BIT_LONG",
++        perlasm_scheme   => "ios64",
++    },
+ 
+ ##### GNU Hurd
+     "hurd-x86" => {
+diff -ur openssl-1.1.1g-orig/config openssl-1.1.1g/config
+--- openssl-1.1.1g-orig/config	2020-04-21 14:22:39.000000000 +0200
++++ openssl-1.1.1g/config	2020-07-26 12:21:59.000000000 +0200
+@@ -255,6 +255,9 @@
+ 		;;
+ 	    x86_64)
+ 		echo "x86_64-apple-darwin${VERSION}"
++                ;;
++	    arm64)
++		echo "arm64-apple-darwin${VERSION}"
+ 		;;
+ 	    *)
+ 		echo "i686-apple-darwin${VERSION}"
+@@ -497,6 +500,9 @@
+ 	else
+ 	    OUT="darwin64-x86_64-cc"
+ 	fi ;;
++  x86_64-apple-darwin*)
++	OUT="darwin64-arm64-cc"
++        ;;
+   armv6+7-*-iphoneos)
+ 	__CNF_CFLAGS="$__CNF_CFLAGS -arch armv6 -arch armv7"
+ 	__CNF_CXXFLAGS="$__CNF_CXXFLAGS -arch armv6 -arch armv7"
diff --git a/Mac/BuildScript/resources/License.rtf b/Mac/BuildScript/resources/License.rtf
index 25d5338..1dfdc1e 100644
--- a/Mac/BuildScript/resources/License.rtf
+++ b/Mac/BuildScript/resources/License.rtf
@@ -1,9 +1,9 @@
-{\rtf1\ansi\ansicpg1252\cocoartf2511
+{\rtf1\ansi\ansicpg1252\cocoartf2513
 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fmodern\fcharset0 CourierNewPS-BoldMT;
 \f3\fmodern\fcharset0 CourierNewPSMT;}
 {\colortbl;\red255\green255\blue255;}
 {\*\expandedcolortbl;;}
-\margl1440\margr1440\vieww14620\viewh13380\viewkind0
+\margl1440\margr1440\vieww18500\viewh13520\viewkind0
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
 \f0\b\fs36 \cf0 \ul \ulc0 HISTORY AND LICENSE\
@@ -47,8 +47,17 @@
 \
 
 \f0\b \ul TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON\
+\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
-\f1\b0 \ulnone \
+\f1\b0 \cf0 \ulnone Python software and documentation are licensed under the Python Software Foundation License Version 2.\
+\
+Starting with Python 3.8.6, examples, recipes, and other code in the documentation are dual licensed under the PSF License Version 2 and the Zero-Clause BSD license.\
+\
+Some software incorporated into Python is under different licenses. The licenses are listed with code falling under that license.\
+\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+\cf0 \
 
 \f0\b PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2\
 
@@ -125,6 +134,18 @@
 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\
 \
 \
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+
+\f0\b \cf0 ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+
+\f1\b0 \cf0 \
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.\
+\
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+\cf0 \
+\
 
 \f0\b \ul LICENSES AND ACKNOWLEDGEMENTS FOR INCORPORATED SOFTWARE\
 
diff --git a/Mac/BuildScript/resources/ReadMe.rtf b/Mac/BuildScript/resources/ReadMe.rtf
index b1e972e..2c0c3d5 100644
--- a/Mac/BuildScript/resources/ReadMe.rtf
+++ b/Mac/BuildScript/resources/ReadMe.rtf
@@ -3,7 +3,7 @@
 \f3\fmodern\fcharset0 CourierNewPSMT;}
 {\colortbl;\red255\green255\blue255;}
 {\*\expandedcolortbl;;}
-\margl1440\margr1440\vieww13380\viewh14600\viewkind0
+\margl1440\margr1440\vieww13380\viewh14580\viewkind0
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
 
 \f0\fs24 \cf0 This package will install Python $FULL_VERSION for macOS $MACOSX_DEPLOYMENT_TARGET for the following architecture(s): $ARCHITECTURES.\
@@ -20,7 +20,7 @@
 \f0\i0  command line utility are not used as defaults by the Python 
 \f3 ssl
 \f0  module.  A sample command script is included in 
-\f3 /Applications/Python 3.8
+\f3 /Applications/Python 3.9
 \f0  to install a curated bundle of default root certificates from the third-party 
 \f3 certifi
 \f0  package ({\field{\*\fldinst{HYPERLINK "https://pypi.org/project/certifi/"}}{\fldrslt https://pypi.org/project/certifi/}}).  Double-click on 
@@ -48,30 +48,20 @@
 \f0\b0  file dialog windows.  Click on the 
 \f1\b OK
 \f0\b0  button to proceed.\
-
-\f1\b \ul \
-macOS 10.15 (Catalina) Gatekeeper Requirements [changed in 3.8.2]\
-
-\f0\b0 \ulnone \
-As of 2020-02-03, Apple has changed how third-party installer packages, like those provided by python.org, are notarized for verification by Gatekeeper and begun enforcing additional requirements such as code signing and use of the hardened runtime.  As of 3.8.2, python.org installer packages now meet those additional notarization requirements.  The necessary changes in packaging should be transparent to your use of Python but, in the unlikely event that you encounter changes in behavior between 3.8.1 and newer 3.8.x releases in areas like ctypes, importlib, or mmap, please check bugs.python.org for existing reports and, if necessary, open a new issue.\
-
-\f1\b \ul \
-Python 2.7 end-of-life [changed in 3.8.4]\
 \
 
-\f0\b0 \ulnone Python 2.7 has now reached end-of-life. As of Python 3.8.4, the 
-\f3 Python Launcher
-\f0  app now has 
-\f3 python3
-\f0  factory defaults.  Also, the 
-\f3 Current
-\f0  link in the 
-\f3 /Library/Frameworks/Python.framework/Versions
-\f0  directory is now updated to point to the Python 3 being installed; previously, only Python 2 installs updated 
-\f3 Current
-\f0 .  This change might affect developers using the framework to embed Python in their applications.  If another version is desired for embedding, the 
-\f3 Current
-\f0  symlink can be changed manually without affecting 3.8.x behavior.\
+\f1\b \ul macOS 11.0 (Big Sur) and Apple Silicon Mac support [new in 3.9.1]\
+
+\f0\b0 \ulnone \
+As of 2020-11, macOS 11.0 (Big Sur) is the latest release of macOS and one of its major features is the support of new Apple Silicon Macs that are based on the ARM64 CPU architecture specification rather than the Intel 64 (x86_64) architecture used previously. There are other changes in Big Sur that affect Python operation regardless of CPU architecture. As of 3.9.1, Python binaries from python.org fully support Big Sur. \
+\
+python.org binaries for macOS have been provided via a downloadable installer that supports the Intel 64 architecture on macOS 10.9 and newer.  This installer variant remains the default download for 3.9.1;  it will install and run on all Macs that run macOS 10.9 or later, including 11.0 (Big Sur). This variant should run transparently on new Apple Silicon Macs using Apple's Rosetta 2 emulation. \
+\
+Beginning with 3.9.1, we also provide a new "universal2" installer variant that provides universal binaries for both ARM64 and Intel 64 architectures and is also supported on all Macs that support macOS 10.9 or later.  Some of the advantages of the new installer variant: native ARM64 code on Apple Silicon Macs should run significantly faster than Rosetta2-emulated code; some operating system functions and options introduced in macOS releases since 10.9 are now exposed when available (primarily in the os module); binary wheels built for use with the current 10.9 variant *should* also work with the new variant; the new installer variant includes Tcl/Tk 8.6.10 rather than 8.6.8.\
+\
+Because of the scope of changes needed to fully support 11.0 and Apple Silicon Macs, the new "universal2" variant should be considered 
+\f2\i experimental
+\f0\i0  in the 3.9.1 release. You may need to upgrade third-party components, like pip, to later versions once they are released. You may experience differences in behavior in IDLE and other Tk-based applications due to using the newer version of Tk.  As always, if you encounter problems when using this installer variant, please check {\field{\*\fldinst{HYPERLINK "https://bugs.python.org"}}{\fldrslt https://bugs.python.org}} for existing reports and for opening new issues.\
 
 \f1\b \ul \
 Other changes\
diff --git a/Mac/BuildScript/resources/Welcome.rtf b/Mac/BuildScript/resources/Welcome.rtf
index ce53bd7..407c225 100644
--- a/Mac/BuildScript/resources/Welcome.rtf
+++ b/Mac/BuildScript/resources/Welcome.rtf
@@ -1,5 +1,5 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf600
-\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fmodern\fcharset0 CourierNewPSMT;
+{\rtf1\ansi\ansicpg1252\cocoartf2513
+\cocoascreenfonts1\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fmodern\fcharset0 CourierNewPSMT;
 }
 {\colortbl;\red255\green255\blue255;}
 {\*\expandedcolortbl;;}
diff --git a/Mac/README.rst b/Mac/README.rst
index ec7d873..f3638aa 100644
--- a/Mac/README.rst
+++ b/Mac/README.rst
@@ -120,6 +120,8 @@
 using the configure option ``--with-universal-archs=VALUE``. The following
 values are available:
 
+  * ``universal2``: ``arm64``, ``x86_64``
+
   * ``intel``:	  ``i386``, ``x86_64``
 
   * ``intel-32``: ``i386``
@@ -155,6 +157,8 @@
 
   * 10.15 and later SDKs support ``intel-64`` only
 
+  * 11.0 and later SDKs support ``universal2``
+
 The makefile for a framework build will also install ``python3.x-32``
 binaries when the universal architecture includes at least one 32-bit
 architecture (that is, for all flavors but ``64-bit`` and ``intel-64``).
@@ -352,6 +356,39 @@
 And lastly a framework installation installs files in ``/usr/local/bin``, all of
 them symbolic links to files in ``/Library/Frameworks/Python.framework/Versions/X.Y/bin``.
 
+Weak linking support
+====================
+
+The CPython sources support building with the latest SDK while targetting deployment
+to macOS 10.9. This is done through weak linking of symbols introduced in macOS
+10.10 or later and checking for their availability at runtime.
+
+This requires the use of Apple's compiler toolchain on macOS 10.13 or later.
+
+The basic implementation pattern is:
+
+* ``HAVE_<FUNCTION>`` is a macro defined (or not) by the configure script
+
+* ``HAVE_<FUNCTION>_RUNTIME`` is a macro defined in the relevant source
+  files. This expands to a call to ``__builtin_available`` when using
+  a new enough Apple compiler, and to a true value otherwise.
+
+* Use ``HAVE_<FUNCTION>_RUNTIME`` before calling ``<function>``. This macro
+  *must* be used a the sole expression in an if statement::
+
+   if (HAVE_<FUNCTION>_RUNTIME) {
+     /* <function> is available */
+   }
+
+  Or:
+
+   if (HAVE_<FUNCTION>_RUNTIME) {} else {
+     /* <function> is not available */
+   }
+
+  Using other patterns (such as ``!HAVE_<FUNCTION>_RUNTIME``) is not supported
+  by Apple's compilers.
+
 
 Resources
 =========
diff --git a/Mac/Resources/iconsrc/PythonCompiled.psd b/Mac/Resources/iconsrc/PythonCompiled.psd
old mode 100755
new mode 100644
Binary files differ
diff --git a/Mac/Resources/iconsrc/PythonIcon.psd b/Mac/Resources/iconsrc/PythonIcon.psd
old mode 100755
new mode 100644
Binary files differ
diff --git a/Mac/Resources/iconsrc/PythonSource.psd b/Mac/Resources/iconsrc/PythonSource.psd
old mode 100755
new mode 100644
Binary files differ
diff --git a/Mac/Tools/pythonw.c b/Mac/Tools/pythonw.c
index c8bd3ba..78813e8 100644
--- a/Mac/Tools/pythonw.c
+++ b/Mac/Tools/pythonw.c
@@ -95,9 +95,6 @@
     size_t count;
     cpu_type_t cpu_types[1];
     short flags = 0;
-#ifdef __LP64__
-    int   ch;
-#endif
 
     if ((errno = posix_spawnattr_init(spawnattr)) != 0) {
         err(2, "posix_spawnattr_int");
@@ -119,10 +116,16 @@
 
 #elif defined(__ppc__)
     cpu_types[0] = CPU_TYPE_POWERPC;
+
 #elif defined(__i386__)
     cpu_types[0] = CPU_TYPE_X86;
+
+#elif defined(__arm64__)
+    cpu_types[0] = CPU_TYPE_ARM64;
+
 #else
 #       error "Unknown CPU"
+
 #endif
 
     if (posix_spawnattr_setbinpref_np(spawnattr, count,
@@ -220,7 +223,8 @@
     /* We're weak-linking to posix-spawnv to ensure that
      * an executable build on 10.5 can work on 10.4.
      */
-    if (posix_spawn != NULL) {
+
+    if (&posix_spawn != NULL) {
         posix_spawnattr_t spawnattr = NULL;
 
         setup_spawnattr(&spawnattr);
diff --git a/Makefile.pre.in b/Makefile.pre.in
index a914a9c..f128444 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -143,11 +143,12 @@
 MANDIR=		@mandir@
 INCLUDEDIR=	@includedir@
 CONFINCLUDEDIR=	$(exec_prefix)/include
-SCRIPTDIR=	$(prefix)/lib
+PLATLIBDIR=	@PLATLIBDIR@
+SCRIPTDIR=	$(prefix)/$(PLATLIBDIR)
 ABIFLAGS=	@ABIFLAGS@
 
 # Detailed destination directories
-BINLIBDEST=	$(LIBDIR)/python$(VERSION)
+BINLIBDEST=	@BINLIBDEST@
 LIBDEST=	$(SCRIPTDIR)/python$(VERSION)
 INCLUDEPY=	$(INCLUDEDIR)/python$(LDVERSION)
 CONFINCLUDEPY=	$(CONFINCLUDEDIR)/python$(LDVERSION)
@@ -160,6 +161,10 @@
 LDCXXSHARED=	@LDCXXSHARED@
 DESTSHARED=	$(BINLIBDEST)/lib-dynload
 
+# List of exported symbols for AIX
+EXPORTSYMS=	@EXPORTSYMS@
+EXPORTSFROM=	@EXPORTSFROM@
+
 # Executable suffix (.exe on Windows and Mac OS X)
 EXE=		@EXEEXT@
 BUILDEXE=	@BUILDEXEEXT@
@@ -196,6 +201,9 @@
 OPENSSL_LIBS=@OPENSSL_LIBS@
 OPENSSL_LDFLAGS=@OPENSSL_LDFLAGS@
 
+# Default zoneinfo.TZPATH. Added here to expose it in sysconfig.get_config_var
+TZPATH=@TZPATH@
+
 # Modes for directories, executables and data files created by the
 # install process.  Default to user-only-writable for all file types.
 DIRMODE=	755
@@ -243,7 +251,7 @@
 PYTHON=		python$(EXE)
 BUILDPYTHON=	python$(BUILDEXE)
 
-PYTHON_FOR_REGEN=@PYTHON_FOR_REGEN@
+PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@
 UPDATE_FILE=@PYTHON_FOR_REGEN@ $(srcdir)/Tools/scripts/update_file.py
 PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@
 _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@
@@ -294,6 +302,19 @@
 
 ##########################################################################
 # Parser
+
+PEGEN_OBJS=		\
+		Parser/pegen/pegen.o \
+		Parser/pegen/parse.o \
+		Parser/pegen/parse_string.o \
+		Parser/pegen/peg_api.o
+
+
+PEGEN_HEADERS= \
+		$(srcdir)/Include/internal/pegen_interface.h \
+		$(srcdir)/Parser/pegen/pegen.h \
+		$(srcdir)/Parser/pegen/parse_string.h
+
 POBJS=		\
 		Parser/acceler.o \
 		Parser/grammar1.o \
@@ -302,9 +323,10 @@
 		Parser/parser.o \
 		Parser/token.o \
 
-PARSER_OBJS=	$(POBJS) Parser/myreadline.o Parser/parsetok.o Parser/tokenizer.o
+PARSER_OBJS=	$(POBJS) $(PEGEN_OBJS) Parser/myreadline.o Parser/parsetok.o Parser/tokenizer.o
 
 PARSER_HEADERS= \
+		$(PEGEN_HEADERS) \
 		$(srcdir)/Include/grammar.h \
 		$(srcdir)/Include/parsetok.h \
 		$(srcdir)/Parser/parser.h \
@@ -336,6 +358,7 @@
 		Python/getversion.o \
 		Python/graminit.o \
 		Python/hamt.o \
+		Python/hashtable.o \
 		Python/import.o \
 		Python/importdl.o \
 		Python/initconfig.o \
@@ -392,6 +415,7 @@
 		Objects/descrobject.o \
 		Objects/enumobject.o \
 		Objects/exceptions.o \
+		Objects/genericaliasobject.o \
 		Objects/genobject.o \
 		Objects/fileobject.o \
 		Objects/floatobject.o \
@@ -461,7 +485,7 @@
 
 # Profile generation build must start from a clean tree.
 profile-clean-stamp:
-	$(MAKE) clean profile-removal
+	$(MAKE) clean
 	touch $@
 
 # Compile with profile generation enabled.
@@ -485,7 +509,7 @@
 	$(MAKE) run_profile_task
 	$(MAKE) build_all_merge_profile
 	# Remove profile generation binary since we are done with it.
-	$(MAKE) clean
+	$(MAKE) clean-retain-profile
 	# This is an expensive target to build and it does not have proper
 	# makefile dependency information.  So, we create a "stamp" file
 	# to record its completion and avoid re-running it.
@@ -512,8 +536,8 @@
 .PHONY=coverage coverage-lcov coverage-report
 coverage:
 	@echo "Building with support for coverage checking:"
-	$(MAKE) clean profile-removal
-	$(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
+	$(MAKE) clean
+	$(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg --coverage" LIBS="$(LIBS) --coverage"
 
 coverage-lcov:
 	@echo "Creating Coverage HTML report with LCOV:"
@@ -562,7 +586,7 @@
 	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
 
 # Build the interpreter
-$(BUILDPYTHON):	Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
+$(BUILDPYTHON):	Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
 
 platform: $(BUILDPYTHON) pybuilddir.txt
@@ -634,6 +658,10 @@
 libpython$(VERSION).sl: $(LIBRARY_OBJS)
 	$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM)
 
+# List of exported symbols for AIX
+Modules/python.exp: $(LIBRARY)
+	$(srcdir)/Modules/makexp_aix $@ "$(EXPORTSFROM)" $?
+
 # Copy up the gdb python hooks into a position where they can be automatically
 # loaded by gdb during Lib/test/test_gdb.py
 #
@@ -693,7 +721,7 @@
 	@echo "The Makefile was updated, you may need to re-run make."
 
 
-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
+Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS)
 	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
 
 ############################################################################
@@ -730,7 +758,8 @@
 # Regenerate all generated files
 
 regen-all: regen-opcode regen-opcode-targets regen-typeslots regen-grammar \
-	regen-token regen-keyword regen-symbol regen-ast regen-importlib clinic
+	regen-token regen-keyword regen-symbol regen-ast regen-importlib clinic \
+	regen-pegen-metaparser regen-pegen
 
 ############################################################################
 # Special rules for object files
@@ -788,6 +817,11 @@
 		$(MULTIARCH_CPPFLAGS) \
 		-o $@ $(srcdir)/Python/sysmodule.c
 
+Python/initconfig.o: $(srcdir)/Python/initconfig.c
+	$(CC) -c $(PY_CORE_CFLAGS) \
+		-DPLATLIBDIR='"$(PLATLIBDIR)"' \
+		-o $@ $(srcdir)/Python/initconfig.c
+
 $(IO_OBJS): $(IO_H)
 
 .PHONY: regen-grammar
@@ -802,19 +836,35 @@
 	$(UPDATE_FILE) $(srcdir)/Include/graminit.h $(srcdir)/Include/graminit.h.new
 	$(UPDATE_FILE) $(srcdir)/Python/graminit.c $(srcdir)/Python/graminit.c.new
 
+.PHONY: regen-pegen-metaparser
+regen-pegen-metaparser:
+	@$(MKDIR_P) $(srcdir)/Tools/peg_generator/pegen
+	PYTHONPATH=$(srcdir)/Tools/peg_generator $(PYTHON_FOR_REGEN) -m pegen -q python \
+	$(srcdir)/Tools/peg_generator/pegen/metagrammar.gram \
+	-o $(srcdir)/Tools/peg_generator/pegen/grammar_parser.py.new
+	$(UPDATE_FILE) $(srcdir)/Tools/peg_generator/pegen/grammar_parser.py \
+	$(srcdir)/Tools/peg_generator/pegen/grammar_parser.py.new
+
+.PHONY: regen-pegen
+regen-pegen:
+	@$(MKDIR_P) $(srcdir)/Parser/pegen
+	PYTHONPATH=$(srcdir)/Tools/peg_generator $(PYTHON_FOR_REGEN) -m pegen -q c \
+		$(srcdir)/Grammar/python.gram \
+		$(srcdir)/Grammar/Tokens \
+		-o $(srcdir)/Parser/pegen/parse.new.c
+	$(UPDATE_FILE) $(srcdir)/Parser/pegen/parse.c $(srcdir)/Parser/pegen/parse.new.c
+
 .PHONY=regen-ast
 regen-ast:
-	# Regenerate Include/Python-ast.h using Parser/asdl_c.py -h
+	# Regenerate Include/Python-ast.h and Python/Python-ast.c using Parser/asdl_c.py
 	$(MKDIR_P) $(srcdir)/Include
-	$(PYTHON_FOR_REGEN) $(srcdir)/Parser/asdl_c.py \
-		-h $(srcdir)/Include/Python-ast.h.new \
-		$(srcdir)/Parser/Python.asdl
-	$(UPDATE_FILE) $(srcdir)/Include/Python-ast.h $(srcdir)/Include/Python-ast.h.new
-	# Regenerate Python/Python-ast.c using Parser/asdl_c.py -c
 	$(MKDIR_P) $(srcdir)/Python
 	$(PYTHON_FOR_REGEN) $(srcdir)/Parser/asdl_c.py \
-		-c $(srcdir)/Python/Python-ast.c.new \
-		$(srcdir)/Parser/Python.asdl
+		$(srcdir)/Parser/Python.asdl \
+		-H $(srcdir)/Include/Python-ast.h.new \
+		-C $(srcdir)/Python/Python-ast.c.new
+
+	$(UPDATE_FILE) $(srcdir)/Include/Python-ast.h $(srcdir)/Include/Python-ast.h.new
 	$(UPDATE_FILE) $(srcdir)/Python/Python-ast.c $(srcdir)/Python/Python-ast.c.new
 
 .PHONY: regen-opcode
@@ -851,9 +901,10 @@
 
 .PHONY: regen-keyword
 regen-keyword:
-	# Regenerate Lib/keyword.py from Grammar/Grammar and Grammar/Tokens
-	# using Parser/pgen
-	PYTHONPATH=$(srcdir) $(PYTHON_FOR_REGEN) -m Parser.pgen.keywordgen $(srcdir)/Grammar/Grammar \
+	# Regenerate Lib/keyword.py from Grammar/python.gram and Grammar/Tokens
+	# using Tools/peg_generator/pegen
+	PYTHONPATH=$(srcdir)/Tools/peg_generator $(PYTHON_FOR_REGEN) -m pegen.keywordgen \
+		$(srcdir)/Grammar/python.gram \
 		$(srcdir)/Grammar/Tokens \
 		$(srcdir)/Lib/keyword.py.new
 	$(UPDATE_FILE) $(srcdir)/Lib/keyword.py $(srcdir)/Lib/keyword.py.new
@@ -970,7 +1021,6 @@
 		$(srcdir)/Include/bltinmodule.h \
 		$(srcdir)/Include/boolobject.h \
 		$(srcdir)/Include/bytearrayobject.h \
-		$(srcdir)/Include/bytes_methods.h \
 		$(srcdir)/Include/bytesobject.h \
 		$(srcdir)/Include/cellobject.h \
 		$(srcdir)/Include/ceval.h \
@@ -982,7 +1032,6 @@
 		$(srcdir)/Include/context.h \
 		$(srcdir)/Include/descrobject.h \
 		$(srcdir)/Include/dictobject.h \
-		$(srcdir)/Include/dtoa.h \
 		$(srcdir)/Include/dynamic_annotations.h \
 		$(srcdir)/Include/enumobject.h \
 		$(srcdir)/Include/errcode.h \
@@ -1022,6 +1071,7 @@
 		$(srcdir)/Include/pydtrace.h \
 		$(srcdir)/Include/pyerrors.h \
 		$(srcdir)/Include/pyfpe.h \
+		$(srcdir)/Include/pyframe.h \
 		$(srcdir)/Include/pyhash.h \
 		$(srcdir)/Include/pylifecycle.h \
 		$(srcdir)/Include/pymacconfig.h \
@@ -1057,10 +1107,19 @@
 		$(srcdir)/Include/Python-ast.h \
 		\
 		$(srcdir)/Include/cpython/abstract.h \
+		$(srcdir)/Include/cpython/bytearrayobject.h \
+		$(srcdir)/Include/cpython/bytesobject.h \
+		$(srcdir)/Include/cpython/ceval.h \
+		$(srcdir)/Include/cpython/code.h \
 		$(srcdir)/Include/cpython/dictobject.h \
 		$(srcdir)/Include/cpython/fileobject.h \
+		$(srcdir)/Include/cpython/fileutils.h \
+		$(srcdir)/Include/cpython/frameobject.h \
+		$(srcdir)/Include/cpython/import.h \
 		$(srcdir)/Include/cpython/initconfig.h \
 		$(srcdir)/Include/cpython/interpreteridobject.h \
+		$(srcdir)/Include/cpython/listobject.h \
+		$(srcdir)/Include/cpython/methodobject.h \
 		$(srcdir)/Include/cpython/object.h \
 		$(srcdir)/Include/cpython/objimpl.h \
 		$(srcdir)/Include/cpython/pyerrors.h \
@@ -1072,17 +1131,25 @@
 		$(srcdir)/Include/cpython/tupleobject.h \
 		$(srcdir)/Include/cpython/unicodeobject.h \
 		\
+		$(srcdir)/Include/internal/pycore_abstract.h \
 		$(srcdir)/Include/internal/pycore_accu.h \
 		$(srcdir)/Include/internal/pycore_atomic.h \
+		$(srcdir)/Include/internal/pycore_byteswap.h \
+		$(srcdir)/Include/internal/pycore_bytes_methods.h \
+		$(srcdir)/Include/internal/pycore_call.h \
 		$(srcdir)/Include/internal/pycore_ceval.h \
 		$(srcdir)/Include/internal/pycore_code.h \
 		$(srcdir)/Include/internal/pycore_condvar.h \
 		$(srcdir)/Include/internal/pycore_context.h \
+		$(srcdir)/Include/internal/pycore_dtoa.h \
 		$(srcdir)/Include/internal/pycore_fileutils.h \
 		$(srcdir)/Include/internal/pycore_getopt.h \
 		$(srcdir)/Include/internal/pycore_gil.h \
 		$(srcdir)/Include/internal/pycore_hamt.h \
+		$(srcdir)/Include/internal/pycore_hashtable.h \
+		$(srcdir)/Include/internal/pycore_import.h \
 		$(srcdir)/Include/internal/pycore_initconfig.h \
+		$(srcdir)/Include/internal/pycore_interp.h \
 		$(srcdir)/Include/internal/pycore_object.h \
 		$(srcdir)/Include/internal/pycore_pathconfig.h \
 		$(srcdir)/Include/internal/pycore_pyerrors.h \
@@ -1090,6 +1157,8 @@
 		$(srcdir)/Include/internal/pycore_pylifecycle.h \
 		$(srcdir)/Include/internal/pycore_pymem.h \
 		$(srcdir)/Include/internal/pycore_pystate.h \
+		$(srcdir)/Include/internal/pycore_runtime.h \
+		$(srcdir)/Include/internal/pycore_sysmodule.h \
 		$(srcdir)/Include/internal/pycore_traceback.h \
 		$(srcdir)/Include/internal/pycore_tupleobject.h \
 		$(srcdir)/Include/internal/pycore_warnings.h \
@@ -1332,6 +1401,7 @@
 		test/test_import/data/circular_imports/subpkg \
 		test/test_import/data/package \
 		test/test_import/data/package2 \
+		test/test_import/data/unwritable \
 		importlib \
 		importlib/metadata \
 		test/test_importlib \
@@ -1372,6 +1442,7 @@
 		test/test_importlib/source \
 		test/test_importlib/zipdata01 \
 		test/test_importlib/zipdata02 \
+		test/test_zoneinfo test/test_zoneinfo/data \
 		test/ziptestdata \
 		asyncio \
 		test/test_asyncio \
@@ -1387,12 +1458,14 @@
 		ctypes ctypes/test ctypes/macholib \
 		idlelib idlelib/Icons idlelib/idle_test \
 		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
+		test/test_peg_generator \
 		test/test_tools test/test_warnings test/test_warnings/data \
 		turtledemo \
 		multiprocessing multiprocessing/dummy \
 		unittest unittest/test unittest/test/testmock \
 		venv venv/scripts venv/scripts/common venv/scripts/posix \
-		curses pydoc_data
+		curses pydoc_data \
+		zoneinfo
 libinstall:	build_all $(srcdir)/Modules/xxmodule.c
 	@for i in $(SCRIPTDIR) $(LIBDEST); \
 	do \
@@ -1435,6 +1508,7 @@
 			*CVS) ;; \
 			*.py[co]) ;; \
 			*.orig) ;; \
+			*wininst-*.exe) ;; \
 			*~) ;; \
 			*) \
 				if test -d $$i; then continue; fi; \
@@ -1753,10 +1827,13 @@
 	-rm -rf Doc/build
 	-rm -rf Doc/tools/sphinx Doc/tools/pygments Doc/tools/docutils
 
-clean: pycremoval
+# like the 'clean' target but retain the profile guided optimization (PGO)
+# data.  The PGO data is only valid if source code remains unchanged.
+clean-retain-profile: pycremoval
 	find . -name '*.[oa]' -exec rm -f {} ';'
 	find . -name '*.s[ol]' -exec rm -f {} ';'
 	find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
+	find . -name '*.lst' -exec rm -f {} ';'
 	find build -name 'fficonfig.h' -exec rm -f {} ';' || true
 	find build -name '*.py' -exec rm -f {} ';' || true
 	find build -name '*.py[co]' -exec rm -f {} ';' || true
@@ -1775,14 +1852,19 @@
 	rm -rf $(COVERAGE_REPORT)
 	rm -f profile-run-stamp
 
-clobber: clean profile-removal
+clean: clean-retain-profile
+	@if test @DEF_MAKE_ALL_RULE@ = profile-opt; then \
+		rm -f profile-gen-stamp profile-clean-stamp; \
+		$(MAKE) profile-removal; \
+	fi
+
+clobber: clean
 	-rm -f $(BUILDPYTHON) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
 		tags TAGS \
 		config.cache config.log pyconfig.h Modules/config.c
 	-rm -rf build platform
 	-rm -rf $(PYTHONFRAMEWORKDIR)
 	-rm -f python-config.py python-config
-	-rm -f profile-gen-stamp profile-clean-stamp
 
 # Make things extra clean, before making a distribution:
 # remove all generated files, even Makefile[.pre]
@@ -1856,6 +1938,8 @@
 .PHONY: frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools
 .PHONY: frameworkaltinstallunixtools recheck clean clobber distclean
 .PHONY: smelly funny patchcheck touch altmaninstall commoninstall
+.PHONY: clean-retain-profile profile-removal run_profile_task
+.PHONY: build_all_generate_profile build_all_merge_profile
 .PHONY: gdbhooks
 
 # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/Misc/ACKS b/Misc/ACKS
index a08e917..12a5ac1 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -12,6 +12,7 @@
 and the list is in rough alphabetical order by last names.
 
 Aahz
+Erlend Egeberg Aasland
 Edison Abahurire
 Michael Abbott
 Rajiv Abraham
@@ -23,6 +24,7 @@
 Anton Afanasyev
 Ali Afshar
 Nitika Agarwal
+Anjani Agrawal
 Pablo S. Blum de Aguiar
 Jim Ahlstrom
 Farhan Ahmad
@@ -45,6 +47,7 @@
 A. Amoroso
 Mark Anacker
 Shashwat Anand
+Ananthakrishnan
 Anders Andersen
 Tycho Andersen
 John Anderson
@@ -67,6 +70,7 @@
 Emmanuel Arias
 Alicia Arlen
 Jeffrey Armstrong
+Justin Turner Arthur
 Jason Asbahr
 David Ascher
 Ammar Askar
@@ -84,8 +88,10 @@
 Alfonso Baciero
 Dwayne Bailey
 Stig Bakken
+Lumír Balhar
 Aleksandr Balezin
 Greg Ball
+Lewis Ball
 Luigi Ballabio
 Thomas Ballinger
 Jeff Balogh
@@ -232,13 +238,16 @@
 Matt Bryant
 Stan Bubrouski
 Brandt Bucher
+Curtis Bucher
 Colm Buckley
 Erik de Bueger
 Jan-Hein Bührman
 Lars Buitinck
+Artem Bulgakov
 Dick Bulterman
 Bill Bumgarner
 Jimmy Burgett
+Charles Burkland
 Edmond Burnett
 Tommy Burnette
 Roger Burnham
@@ -257,6 +266,7 @@
 Arnaud Calmettes
 Daniel Calvelo
 Tony Campbell
+Giovanni Cappellotto
 Brett Cannon
 Tristan Carel
 Mike Carlton
@@ -285,6 +295,7 @@
 Greg Chapman
 Mitch Chapman
 Matt Chaput
+William Chargin
 Yogesh Chaudhari
 David Chaum
 Nicolas Chauvat
@@ -309,6 +320,7 @@
 Chris Clark
 Diana Clarke
 Laurie Clark-Michalek
+Alexander Clarkson
 Mike Clarkson
 Andrew Clegg
 Brad Clements
@@ -324,6 +336,7 @@
 Jeffery Collins
 Robert Collins
 Paul Colomiets
+Samuel Colvin
 Christophe Combelles
 Geremy Condra
 Denver Coneybeare
@@ -363,8 +376,10 @@
 Raúl Cumplido
 Antonio Cuni
 Brian Curtin
+Jason Curtis
 Hakan Celik
 Paul Dagnelie
+Florian Dahlitz 
 Lisandro Dalcin
 Darren Dale
 Andrew Dalke
@@ -420,6 +435,7 @@
 Dima Dorfman
 Yves Dorfsman
 Michael Dorman
+Andrey Doroschenko
 Steve Dower
 Allen Downey
 Cesar Douady
@@ -447,6 +463,7 @@
 Ulrich Eckhardt
 David Edelsohn
 John Edmonds
+Benjamin Edwards
 Grant Edwards
 Zvi Effron
 John Ehresman
@@ -465,6 +482,7 @@
 Gökcen Eraslan
 Stoffel Erasmus
 Jürgen A. Erhard
+Florian Ernst
 Michael Ernst
 Ben Escoto
 Andy Eskilsson
@@ -506,6 +524,7 @@
 Segev Finer
 Jeffrey Finkelstein
 Russell Finn
+Neal Finne
 Dan Finnie
 Nils Fischbeck
 Frederik Fix
@@ -553,11 +572,13 @@
 Raymund Galvin
 Nitin Ganatra
 Fred Gansevles
+Paul Ganssle
 Lars Marius Garshol
 Jake Garver
 Dan Gass
 Tim Gates
 Andrew Gaul
+Lewis Gaul
 Matthieu Gautier
 Stephen M. Gava
 Xavier de Gaye
@@ -641,6 +662,7 @@
 Harald Hanche-Olsen
 Manus Hand
 Milton L. Hankins
+Carl Bordum Hansen
 Stephen Hansen
 Barry Hantman
 Lynda Hardman
@@ -651,6 +673,7 @@
 Brian Harring
 Jonathan Hartley
 Travis B. Hartwell
+Henrik Harutyunyan
 Shane Harvey
 Larry Hastings
 Tim Hatch
@@ -658,6 +681,7 @@
 Shane Hathaway
 Michael Haubenwallner
 Janko Hauser
+Flavian Hautbois
 Rycharde Hawkes
 Ben Hayden
 Jochen Hayek
@@ -719,6 +743,7 @@
 Michiel de Hoon
 Brian Hooper
 Randall Hopper
+Tim Hopper
 Nadav Horesh
 Alon Horev
 Jan Hosang
@@ -737,6 +762,7 @@
 Michael Hudson
 Jim Hugunin
 Greg Humphreys
+Chris Hunt
 Eric Huss
 Nehal Hussain
 Taihyun Hwang
@@ -745,6 +771,7 @@
 Gerhard Häring
 Fredrik Håård
 Florian Höch
+Oleg Höfling
 Robert Hölzl
 Catalin Iacob
 Mihai Ibanescu
@@ -757,6 +784,7 @@
 Peter Ingebretson
 Tony Ingraldi
 John Interrante
+Dean Inwood
 Bob Ippolito
 Roger Irwin
 Atsuo Ishimoto
@@ -827,6 +855,7 @@
 Rafe Kaplan
 Jacob Kaplan-Moss
 Allison Kaptur
+Yurii Karabas
 Janne Karila
 Per Øyvind Karlsen
 Anton Kasyanov
@@ -837,6 +866,7 @@
 Brian Kearns
 Sebastien Keim
 Ryan Kelly
+Hugo van Kemenade
 Dan Kenigsberg
 Randall Kern
 Robert Kern
@@ -849,6 +879,7 @@
 Artem Khramov
 Akshit Khurana
 Sanyam Khurana
+Tyler Kieft
 Mads Kiilerich
 Jason Killen
 Jan Kim
@@ -991,6 +1022,7 @@
 Xuanji Li
 Zekun Li
 Zheao Li
+Dan Lidral-Porter
 Robert van Liere
 Ross Light
 Shawn Ligocki
@@ -1099,6 +1131,7 @@
 Doug Mennella
 Dimitri Merejkowsky
 Brian Merrell
+Bruce Merry
 Alexis Métaireau
 Luke Mewburn
 Carl Meyer
@@ -1213,10 +1246,12 @@
 Jon Oberheide
 Milan Oberkirch
 Pascal Oberndoerfer
+Géry Ogam
 Jeffrey Ollie
 Adam Olsen
 Bryan Olson
 Grant Olson
+Furkan Onder
 Koray Oner
 Ethan Onstott
 Piet van Oostrum
@@ -1417,6 +1452,7 @@
 Armin Ronacher
 Case Roole
 Timothy Roscoe
+Joel Rosdahl
 Erik Rose
 Mark Roseman
 Josh Rosenberg
@@ -1505,6 +1541,7 @@
 Nick Seidenman
 Michael Seifert
 Žiga Seilnacht
+Jendrik Seipp
 Michael Selik
 Yury Selivanov
 Fred Sells
@@ -1553,6 +1590,7 @@
 Nathan Paul Simons
 Guilherme Simões
 Adam Simpkins
+Karthikeyan Singaravelan
 Mandeep Singh
 Ravi Sinha
 Janne Sinkkonen
@@ -1563,6 +1601,7 @@
 Ngalim Siregar
 Kragen Sitaker
 Kaartic Sivaraam
+Roman Skurikhin
 Ville Skyttä
 Michael Sloan
 Nick Sloan
@@ -1600,6 +1639,7 @@
 Quentin Stafford-Fraser
 Frank Stajano
 Joel Stanley
+Kyle Stanley
 Anthony Starks
 David Steele
 Oliver Steele
@@ -1636,6 +1676,7 @@
 Kalle Svensson
 Andrew Svetlov
 Paul Swartz
+Dennis Sweeney
 Al Sweigart
 Sviatoslav Sydorenko
 Thenault Sylvain
@@ -1658,6 +1699,7 @@
 Christian Tanzer
 Steven Taschuk
 Batuhan Taskaya
+Stefan Tatschner
 Amy Taylor
 Julian Taylor
 Monty Taylor
@@ -1676,6 +1718,7 @@
 Lowe Thiderman
 Nicolas M. Thiéry
 James Thomas
+Reuben Thomas
 Robin Thomas
 Brian Thorne
 Christopher Thorne
@@ -1728,6 +1771,7 @@
 Daniel Urban
 Michael Urman
 Hector Urtubia
+Elizabeth Uselton
 Lukas Vacek
 Ville Vainio
 Yann Vaginay
@@ -1792,6 +1836,7 @@
 Corran Webster
 Glyn Webster
 Phil Webster
+Antoine Wecxsteen
 Stefan Wehr
 Zack Weinberg
 Bob Weiner
@@ -1803,6 +1848,7 @@
 Christopher White
 David White
 Mats Wichmann
+Pete Wicken
 Marcel Widjaja
 Truida Wiedijk
 Felix Wiemann
@@ -1826,6 +1872,7 @@
 David Wilson
 Geoff Wilson
 Greg V. Wilson
+Huon Wilson
 J Derek Wilson
 Paul Winkler
 Jody Winston
@@ -1846,6 +1893,7 @@
 Dan Wolfe
 Richard Wolff
 Adam Woodbeck
+William Woodruff
 Steven Work
 Gordon Worley
 Darren Worrall
@@ -1869,6 +1917,7 @@
 Bob Yodlowski
 Danny Yoo
 Wonsup Yoon
+Andrew York
 Rory Yorke
 George Yoshida
 Kazuhiro Yoshida
@@ -1894,5 +1943,7 @@
 Gennadiy Zlobin
 Doug Zongker
 Peter Åstrand
+Vlad Emelianov
+Andrey Doroschenko
 
 (Entries should be added in rough alphabetical order by last names)
diff --git a/Misc/HISTORY b/Misc/HISTORY
index fa5a05f..32b2a37 100644
--- a/Misc/HISTORY
+++ b/Misc/HISTORY
@@ -2113,7 +2113,7 @@
 - Issue #21285: Refactor and fix curses configure check to always search
   in a ncursesw directory.
 
-- Issue #15234: For BerkelyDB and Sqlite, only add the found library and
+- Issue #15234: For BerkeleyDB and Sqlite, only add the found library and
   include directories if they aren't already being searched. This avoids
   an explicit runtime library dependency.
 
diff --git a/Misc/NEWS.d/3.5.0a1.rst b/Misc/NEWS.d/3.5.0a1.rst
index 376cb02..56d0d33 100644
--- a/Misc/NEWS.d/3.5.0a1.rst
+++ b/Misc/NEWS.d/3.5.0a1.rst
@@ -4992,7 +4992,7 @@
 .. nonce: vlM720
 .. section: Build
 
-For BerkelyDB and Sqlite, only add the found library and include directories
+For BerkeleyDB and Sqlite, only add the found library and include directories
 if they aren't already being searched. This avoids an explicit runtime
 library dependency.
 
diff --git a/Misc/NEWS.d/3.7.0a1.rst b/Misc/NEWS.d/3.7.0a1.rst
index 8a304e8..244bb37 100644
--- a/Misc/NEWS.d/3.7.0a1.rst
+++ b/Misc/NEWS.d/3.7.0a1.rst
@@ -3067,7 +3067,7 @@
 .. section: Library
 
 Element.getiterator() and the html parameter of XMLParser() were deprecated
-only in the documentation (since Python 3.2 and 3.4 correspondintly). Now
+only in the documentation (since Python 3.2 and 3.4 correspondingly). Now
 using them emits a deprecation warning.
 
 ..
diff --git a/Misc/NEWS.d/3.8.0.rst b/Misc/NEWS.d/3.8.0.rst
deleted file mode 100644
index e72025c..0000000
--- a/Misc/NEWS.d/3.8.0.rst
+++ /dev/null
@@ -1,186 +0,0 @@
-.. bpo: 38469
-.. date: 2019-10-13-23-41-38
-.. nonce: 9kmuQj
-.. release date: 2019-10-14
-.. section: Core and Builtins
-
-Fixed a bug where the scope of named expressions was not being resolved
-correctly in the presence of the *global* keyword. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 38379
-.. date: 2019-10-09-16-50-52
-.. nonce: oz5qZx
-.. section: Core and Builtins
-
-When cyclic garbage collection (gc) runs finalizers that resurrect
-unreachable objects, the current gc run ends, without collecting any cyclic
-trash.  However, the statistics reported by ``collect()`` and
-``get_stats()`` claimed that all cyclic trash found was collected, and that
-the resurrected objects were collected.   Changed the stats to report that
-none were collected.
-
-..
-
-.. bpo: 38449
-.. date: 2019-10-11-18-49-00
-.. nonce: 9TWMlz
-.. section: Library
-
-Revert GH-15522, which introduces a regression in
-:meth:`mimetypes.guess_type` due to improper handling of filenames as urls.
-
-..
-
-.. bpo: 38431
-.. date: 2019-10-10-16-53-00
-.. nonce: d5wzNp
-.. section: Library
-
-Fix ``__repr__`` method for :class:`dataclasses.InitVar` to support typing
-objects, patch by Samuel Colvin.
-
-..
-
-.. bpo: 38109
-.. date: 2019-10-10-00-25-28
-.. nonce: 9w-IGF
-.. section: Library
-
-Add missing :data:`stat.S_IFDOOR`, :data:`stat.S_IFPORT`,
-:data:`stat.S_IFWHT`, :func:`stat.S_ISDOOR`, :func:`stat.S_ISPORT`, and
-:func:`stat.S_ISWHT` values to the Python implementation of :mod:`stat`.
-
-..
-
-.. bpo: 38405
-.. date: 2019-10-08-11-18-40
-.. nonce: 0-7e7s
-.. section: Library
-
-Nested subclasses of :class:`typing.NamedTuple` are now pickleable.
-
-..
-
-.. bpo: 38332
-.. date: 2019-10-05-02-07-52
-.. nonce: hwrPN7
-.. section: Library
-
-Prevent :exc:`KeyError` thrown by :func:`_encoded_words.decode` when given
-an encoded-word with invalid content-type encoding from propagating all the
-way to :func:`email.message.get`.
-
-..
-
-.. bpo: 38341
-.. date: 2019-10-01-21-06-18
-.. nonce: uqwgU_
-.. section: Library
-
-Add :exc:`smtplib.SMTPNotSupportedError` to the :mod:`smtplib` exported
-names.
-
-..
-
-.. bpo: 13153
-.. date: 2019-09-29-22-47-37
-.. nonce: 0mO9qR
-.. section: Library
-
-OS native encoding is now used for converting between Python strings and Tcl
-objects.  This allows to display, copy and paste to clipboard emoji and
-other non-BMP characters.  Converting strings from Tcl to Python and back
-now never fails (except MemoryError).
-
-..
-
-.. bpo: 38294
-.. date: 2019-09-27-23-37-41
-.. nonce: go_jFf
-.. section: Documentation
-
-Add list of no-longer-escaped chars to re.escape documentation.
-
-..
-
-.. bpo: 37531
-.. date: 2019-10-08-16-42-05
-.. nonce: 7v-_Ca
-.. section: Tests
-
-On timeout, regrtest no longer attempts to call ``popen.communicate()``
-again: it can hang until all child processes using stdout and stderr pipes
-completes. Kill the worker process and ignores its output. Change also the
-faulthandler timeout of the main process from 1 minute to 5 minutes, for
-Python slowest buildbots.
-
-..
-
-.. bpo: 38344
-.. date: 2019-10-05-05-50-58
-.. nonce: scr2LO
-.. section: Windows
-
-Fix error message in activate.bat.
-
-..
-
-.. bpo: 38359
-.. date: 2019-10-03-08-04-14
-.. nonce: wzwsl_
-.. section: Windows
-
-Ensures ``pyw.exe`` launcher reads correct registry key.
-
-..
-
-.. bpo: 38355
-.. date: 2019-10-02-15-38-49
-.. nonce: n3AWX6
-.. section: Windows
-
-Fixes ``ntpath.realpath`` failing on ``sys.executable``.
-
-..
-
-.. bpo: 36698
-.. date: 2019-10-04-18-03-09
-.. nonce: BKcmom
-.. section: IDLE
-
-IDLE no longer fails when write non-encodable characters to stderr.  It now
-escapes them with a backslash, as the regular Python interpreter. Added the
-``errors`` field to the standard streams.
-
-..
-
-.. bpo: 38118
-.. date: 2019-10-08-15-07-52
-.. nonce: pIZD6H
-.. section: Tools/Demos
-
-Update Valgrind suppression file to ignore a false alarm in
-:c:func:`PyUnicode_Decode` when using GCC builtin strcmp().
-
-..
-
-.. bpo: 38347
-.. date: 2019-10-02-09-48-42
-.. nonce: 2Tq5D1
-.. section: Tools/Demos
-
-pathfix.py: Assume all files that end on '.py' are Python scripts when
-working recursively.
-
-..
-
-.. bpo: 38395
-.. date: 2019-10-08-01-23-24
-.. nonce: MJ6Ey9
-.. section: C API
-
-Fix a crash in :class:`weakref.proxy` objects due to incorrect lifetime
-management when calling some associated methods that may delete the last
-reference to object being referenced by the proxy. Patch by Pablo Galindo.
diff --git a/Misc/NEWS.d/3.8.0a1.rst b/Misc/NEWS.d/3.8.0a1.rst
index 96208c8..b7164a5 100644
--- a/Misc/NEWS.d/3.8.0a1.rst
+++ b/Misc/NEWS.d/3.8.0a1.rst
@@ -2054,7 +2054,7 @@
 .. section: Library
 
 random.gammavariate(1.0, beta) now computes the same result as
-random.expovariate(1.0 / beta).  This synchonizes the two algorithms and
+random.expovariate(1.0 / beta).  This synchronizes the two algorithms and
 eliminates some idiosyncrasies in the old implementation.  It does however
 produce a difference stream of random variables than it used to.
 
@@ -7034,7 +7034,7 @@
 .. nonce: g7TwYm
 .. section: Tests
 
-Fix `test_socket` on AIX AIX 6.1 and later IPv6 zone id supports only
+Fix `test_socket` on AIX 6.1 and later IPv6 zone id supports only
 supported by inet_pton6_zone() Switch to runtime-based platform.system() to
 establish current platform  rather than build-time based sys.platform()
 
diff --git a/Misc/NEWS.d/3.8.0a4.rst b/Misc/NEWS.d/3.8.0a4.rst
index 995aa94..fc952fa 100644
--- a/Misc/NEWS.d/3.8.0a4.rst
+++ b/Misc/NEWS.d/3.8.0a4.rst
@@ -904,7 +904,7 @@
 .. nonce: B8-ghi
 .. section: Tests
 
-When using mulitprocessing mode (-jN), regrtest now better reports errors if
+When using multiprocessing mode (-jN), regrtest now better reports errors if
 a worker process fails, and it exits immediately on a worker thread failure
 or when interrupted.
 
diff --git a/Misc/NEWS.d/3.8.0b1.rst b/Misc/NEWS.d/3.8.0b1.rst
index 43a88a3..5400c07 100644
--- a/Misc/NEWS.d/3.8.0b1.rst
+++ b/Misc/NEWS.d/3.8.0b1.rst
@@ -1612,7 +1612,7 @@
 .. nonce: Zot4sx
 .. section: Documentation
 
-Improve documentation of the stdin, stdout, and stderr arguments of of the
+Improve documentation of the stdin, stdout, and stderr arguments of the
 ``asyncio.subprocess_exec`` function to specify which values are supported.
 Also mention that decoding as text is not supported.
 
diff --git a/Misc/NEWS.d/3.8.0b2.rst b/Misc/NEWS.d/3.8.0b2.rst
deleted file mode 100644
index f462e75..0000000
--- a/Misc/NEWS.d/3.8.0b2.rst
+++ /dev/null
@@ -1,933 +0,0 @@
-.. bpo: 37363
-.. date: 2019-07-01-10-31-14
-.. nonce: fSjatj
-.. release date: 2019-07-04
-.. section: Security
-
-Adds audit events for the range of supported run commands (see
-:ref:`using-on-general`).
-
-..
-
-.. bpo: 37463
-.. date: 2019-07-01-08-46-14
-.. nonce: 1CHwjE
-.. section: Security
-
-ssl.match_hostname() no longer accepts IPv4 addresses with additional text
-after the address and only quad-dotted notation without trailing
-whitespaces. Some inet_aton() implementations ignore whitespace and all data
-after whitespace, e.g. '127.0.0.1 whatever'.
-
-..
-
-.. bpo: 37363
-.. date: 2019-06-21-15-58-59
-.. nonce: diouyl
-.. section: Security
-
-Adds audit events for :mod:`ensurepip`, :mod:`ftplib`, :mod:`glob`,
-:mod:`imaplib`, :mod:`nntplib`, :mod:`pdb`, :mod:`poplib`, :mod:`shutil`,
-:mod:`smtplib`, :mod:`sqlite3`, :mod:`subprocess`, :mod:`telnetlib`,
-:mod:`tempfile` and :mod:`webbrowser`, as well as :func:`os.listdir`,
-:func:`os.scandir` and :func:`breakpoint`.
-
-..
-
-.. bpo: 37364
-.. date: 2019-06-21-14-42-53
-.. nonce: IIRc2s
-.. section: Security
-
-:func:`io.open_code` is now used when reading :file:`.pth` files.
-
-..
-
-.. bpo: 34631
-.. date: 2019-06-17-09-34-25
-.. nonce: DBfM4j
-.. section: Security
-
-Updated OpenSSL to 1.1.1c in Windows installer
-
-..
-
-.. bpo: 37467
-.. date: 2019-07-01-12-22-44
-.. nonce: u-XyEu
-.. section: Core and Builtins
-
-Fix :func:`sys.excepthook` and :c:func:`PyErr_Display` if a filename is a
-bytes string. For example, for a SyntaxError exception where the filename
-attribute is a bytes string.
-
-..
-
-.. bpo: 37417
-.. date: 2019-06-26-18-41-00
-.. nonce: VsZeHL
-.. section: Core and Builtins
-
-:meth:`bytearray.extend` now correctly handles errors that arise during
-iteration. Patch by Brandt Bucher.
-
-..
-
-.. bpo: 24214
-.. date: 2019-06-22-12-45-20
-.. nonce: hIiHeD
-.. section: Core and Builtins
-
-Improved support of the surrogatepass error handler in the UTF-8 and UTF-16
-incremental decoders.
-
-..
-
-.. bpo: 35224
-.. date: 2019-06-17-06-03-55
-.. nonce: FHWPGv
-.. section: Core and Builtins
-
-Reverse evaluation order of key: value in dict comprehensions as proposed in
-PEP 572. I.e. in ``{k: v for ...}``, ``k`` will be evaluated before ``v``.
-
-..
-
-.. bpo: 37316
-.. date: 2019-06-17-03-53-16
-.. nonce: LytDX_
-.. section: Core and Builtins
-
-Fix the :c:func:`PySys_Audit` call in :class:`mmap.mmap`.
-
-..
-
-.. bpo: 37269
-.. date: 2019-06-14-06-32-33
-.. nonce: SjVVAe
-.. section: Core and Builtins
-
-Fix a bug in the peephole optimizer that was not treating correctly constant
-conditions with binary operators. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 37213
-.. date: 2019-06-11-11-15-19
-.. nonce: UPii5K
-.. section: Core and Builtins
-
-Handle correctly negative line offsets in the peephole optimizer. Patch by
-Pablo Galindo.
-
-..
-
-.. bpo: 37219
-.. date: 2019-06-10-23-18-31
-.. nonce: jPSufq
-.. section: Core and Builtins
-
-Remove errorneous optimization for empty set differences.
-
-..
-
-.. bpo: 36922
-.. date: 2019-06-06-13-59-52
-.. nonce: EMZ3TF
-.. section: Core and Builtins
-
-Slot functions optimize any callable with ``Py_TPFLAGS_METHOD_DESCRIPTOR``
-instead of only instances of ``function``.
-
-..
-
-.. bpo: 36974
-.. date: 2019-06-06-11-00-55
-.. nonce: wdzzym
-.. section: Core and Builtins
-
-The slot ``tp_vectorcall_offset`` is inherited unconditionally to support
-``super().__call__()`` when the base class uses vectorcall.
-
-..
-
-.. bpo: 37160
-.. date: 2019-06-05-09-24-17
-.. nonce: O3IAY3
-.. section: Core and Builtins
-
-:func:`threading.get_native_id` now also supports NetBSD.
-
-..
-
-.. bpo: 37077
-.. date: 2019-05-28-11-47-44
-.. nonce: S1h0Fc
-.. section: Core and Builtins
-
-Add :func:`threading.get_native_id` support for AIX. Patch by M. Felt
-
-..
-
-.. bpo: 37440
-.. date: 2019-06-28-16-40-17
-.. nonce: t3wX-N
-.. section: Library
-
-http.client now enables TLS 1.3 post-handshake authentication for default
-context or if a cert_file is passed to HTTPSConnection.
-
-..
-
-.. bpo: 37437
-.. date: 2019-06-27-20-33-50
-.. nonce: du39_A
-.. section: Library
-
-Update vendorized expat version to 2.2.7.
-
-..
-
-.. bpo: 37428
-.. date: 2019-06-27-13-27-02
-.. nonce: _wcwUd
-.. section: Library
-
-SSLContext.post_handshake_auth = True no longer sets
-SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the
-option is documented as ignored for clients, OpenSSL implicitly enables cert
-chain validation when the flag is set.
-
-..
-
-.. bpo: 37420
-.. date: 2019-06-26-22-25-05
-.. nonce: CxFJ09
-.. section: Library
-
-:func:`os.sched_setaffinity` now correctly handles errors that arise during
-iteration over its ``mask`` argument. Patch by Brandt Bucher.
-
-..
-
-.. bpo: 37412
-.. date: 2019-06-26-16-28-59
-.. nonce: lx0VjC
-.. section: Library
-
-The :func:`os.getcwdb` function now uses the UTF-8 encoding on Windows,
-rather than the ANSI code page: see :pep:`529` for the rationale. The
-function is no longer deprecated on Windows.
-
-..
-
-.. bpo: 29412
-.. date: 2019-06-25-19-27-25
-.. nonce: n4Zqdh
-.. section: Library
-
-Fix IndexError in parsing a header value ending unexpectedly. Patch by
-Abhilash Raj.
-
-..
-
-.. bpo: 36546
-.. date: 2019-06-25-05-07-48
-.. nonce: RUcxaK
-.. section: Library
-
-The *dist* argument for statistics.quantiles() is now positional only. The
-current name doesn't reflect that the argument can be either a dataset or a
-distribution.  Marking the parameter as positional avoids confusion and
-makes it possible to change the name later.
-
-..
-
-.. bpo: 37394
-.. date: 2019-06-25-02-10-00
-.. nonce: srZ1zx
-.. section: Library
-
-Fix a bug that was causing the :mod:`queue` module to fail if the
-accelerator module was not available. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 33972
-.. date: 2019-06-15-14-39-50
-.. nonce: XxnNPw
-.. section: Library
-
-Email with single part but content-type set to ``multipart/*`` doesn't raise
-AttributeError anymore.
-
-..
-
-.. bpo: 37280
-.. date: 2019-06-14-13-30-47
-.. nonce: Fxur0F
-.. section: Library
-
-Use threadpool for reading from file for sendfile fallback mode.
-
-..
-
-.. bpo: 37279
-.. date: 2019-06-14-13-25-56
-.. nonce: OHlW6l
-.. section: Library
-
-Fix asyncio sendfile support when sendfile sends extra data in fallback
-mode.
-
-..
-
-.. bpo: 19865
-.. date: 2019-06-14-08-30-16
-.. nonce: FRGH4I
-.. section: Library
-
-:func:`ctypes.create_unicode_buffer()` now also supports non-BMP characters
-on platforms with 16-bit :c:type:`wchar_t` (for example, Windows and AIX).
-
-..
-
-.. bpo: 37210
-.. date: 2019-06-12-16-10-50
-.. nonce: r4yMg6
-.. section: Library
-
-Allow pure Python implementation of :mod:`pickle` to work even when the C
-:mod:`_pickle` module is unavailable.
-
-..
-
-.. bpo: 35922
-.. date: 2019-06-11-19-34-29
-.. nonce: rxpzWr
-.. section: Library
-
-Fix :meth:`RobotFileParser.crawl_delay` and
-:meth:`RobotFileParser.request_rate` to return ``None`` rather than raise
-:exc:`AttributeError` when no relevant rule is defined in the robots.txt
-file.  Patch by Rémi Lapeyre.
-
-..
-
-.. bpo: 35766
-.. date: 2019-06-11-16-41-40
-.. nonce: v1Kj-T
-.. section: Library
-
-Change the format of feature_version to be a (major, minor) tuple.
-
-..
-
-.. bpo: 36607
-.. date: 2019-06-11-13-52-04
-.. nonce: 5_mJkQ
-.. section: Library
-
-Eliminate :exc:`RuntimeError` raised by :func:`asyncio.all_tasks()` if
-internal tasks weak set is changed by another thread during iteration.
-
-..
-
-.. bpo: 18748
-.. date: 2019-06-11-01-54-19
-.. nonce: ADqCkq
-.. section: Library
-
-:class:`_pyio.IOBase` destructor now does nothing if getting the ``closed``
-attribute fails to better mimick :class:`_io.IOBase` finalizer.
-
-..
-
-.. bpo: 36402
-.. date: 2019-06-11-00-35-02
-.. nonce: b0IJVp
-.. section: Library
-
-Fix a race condition at Python shutdown when waiting for threads. Wait until
-the Python thread state of all non-daemon threads get deleted (join all
-non-daemon threads), rather than just wait until non-daemon Python threads
-complete.
-
-..
-
-.. bpo: 34886
-.. date: 2019-06-08-16-03-19
-.. nonce: Ov-pc9
-.. section: Library
-
-Fix an unintended ValueError from :func:`subprocess.run` when checking for
-conflicting `input` and `stdin` or `capture_output` and `stdout` or `stderr`
-args when they were explicitly provided but with `None` values within a
-passed in `**kwargs` dict rather than as passed directly by name. Patch
-contributed by Rémi Lapeyre.
-
-..
-
-.. bpo: 37173
-.. date: 2019-06-08-11-33-48
-.. nonce: 0e_8gS
-.. section: Library
-
-The exception message for ``inspect.getfile()`` now correctly reports the
-passed class rather than the builtins module.
-
-..
-
-.. bpo: 37178
-.. date: 2019-06-07-17-16-09
-.. nonce: Day_oB
-.. section: Library
-
-Give math.perm() a one argument form that means the same as
-math.factorial().
-
-..
-
-.. bpo: 37178
-.. date: 2019-06-07-17-11-34
-.. nonce: b1StSv
-.. section: Library
-
-For math.perm(n, k), let k default to n, giving the same result as
-factorial.
-
-..
-
-.. bpo: 37163
-.. date: 2019-06-07-08-18-05
-.. nonce: 36JkUh
-.. section: Library
-
-Deprecated passing ``obj`` argument of :func:`dataclasses.replace` as
-keyword argument.
-
-..
-
-.. bpo: 37165
-.. date: 2019-06-05-11-48-19
-.. nonce: V_rwfE
-.. section: Library
-
-Converted _collections._count_elements to use the Argument Clinic.
-
-..
-
-.. bpo: 34767
-.. date: 2019-06-04-23-44-52
-.. nonce: BpDShN
-.. section: Library
-
-Do not always create a :class:`collections.deque` in :class:`asyncio.Lock`.
-
-..
-
-.. bpo: 37158
-.. date: 2019-06-04-22-25-38
-.. nonce: JKm15S
-.. section: Library
-
-Speed-up statistics.fmean() by switching from a function to a generator.
-
-..
-
-.. bpo: 37150
-.. date: 2019-06-04-14-44-41
-.. nonce: TTzHxj
-.. section: Library
-
-`argparse._ActionsContainer.add_argument` now throws error, if someone
-accidentally pass FileType class object instead of instance of FileType as
-`type` argument
-
-..
-
-.. bpo: 35621
-.. date: 2019-05-28-19-03-46
-.. nonce: Abc1lf
-.. section: Library
-
-Support running asyncio subprocesses when execution event loop in a thread
-on UNIX.
-
-..
-
-.. bpo: 36520
-.. date: 2019-05-28-02-37-00
-.. nonce: W4tday
-.. section: Library
-
-Lengthy email headers with UTF-8 characters are now properly encoded when
-they are folded. Patch by Jeffrey Kintscher.
-
-..
-
-.. bpo: 30835
-.. date: 2019-05-27-15-29-46
-.. nonce: 3FoaWH
-.. section: Library
-
-Fixed a bug in email parsing where a message with invalid bytes in
-content-transfer-encoding of a multipart message can cause an
-AttributeError. Patch by Andrew Donnellan.
-
-..
-
-.. bpo: 35805
-.. date: 2019-05-17-15-11-08
-.. nonce: E4YwYz
-.. section: Library
-
-Add parser for Message-ID header and add it to default HeaderRegistry. This
-should prevent folding of Message-ID using RFC 2048 encoded words.
-
-..
-
-.. bpo: 35070
-.. date: 2019-05-09-18-50-55
-.. nonce: 4vaqNL
-.. section: Library
-
-posix.getgrouplist() now works correctly when the user belongs to
-NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher.
-
-..
-
-.. bpo: 32627
-.. date: 2019-02-03-19-13-08
-.. nonce: b68f64
-.. section: Library
-
-Fix compile error when ``_uuid`` headers conflicting included.
-
-..
-
-.. bpo: 11122
-.. date: 2018-11-12-19-08-50
-.. nonce: Gj7BQn
-.. section: Library
-
-Distutils won't check for rpmbuild in specified paths only.
-
-..
-
-.. bpo: 4963
-.. date: 2017-08-15-11-24-41
-.. nonce: LRYres
-.. section: Library
-
-Fixed non-deterministic behavior related to mimetypes extension mapping and
-module reinitialization.
-
-..
-
-.. bpo: 34903
-.. date: 2019-06-17-09-36-46
-.. nonce: r_wGRc
-.. section: Documentation
-
-Documented that in :meth:`datetime.datetime.strptime()`, the leading zero in
-some two-digit formats is optional. Patch by Mike Gleen.
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-03-00-05-28
-.. nonce: ORGRSG
-.. section: Tests
-
-test_distutils.test_build_ext() is now able to remove the temporary
-directory on Windows: don't import the newly built C extension ("xx") in the
-current process, but test it in a separated process.
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-02-23-29-06
-.. nonce: WEfc5A
-.. section: Tests
-
-test_concurrent_futures now cleans up multiprocessing to remove immediately
-temporary directories created by multiprocessing.util.get_temp_dir().
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-02-23-20-35
-.. nonce: HCkKWz
-.. section: Tests
-
-test_winconsoleio doesn't leak a temporary file anymore: use
-tempfile.TemporaryFile() to remove it when the test completes.
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-01-19-57-26
-.. nonce: NFH1f0
-.. section: Tests
-
-multiprocessing tests now explicitly call ``_run_finalizers()`` to
-immediately remove temporary directories created by tests.
-
-..
-
-.. bpo: 37199
-.. date: 2019-06-29-23-56-28
-.. nonce: FHDsLf
-.. section: Tests
-
-Fix test failures when IPv6 is unavailable or disabled.
-
-..
-
-.. bpo: 37335
-.. date: 2019-06-28-16-37-52
-.. nonce: o5S2hY
-.. section: Tests
-
-Remove no longer necessary code from c locale coercion tests
-
-..
-
-.. bpo: 37421
-.. date: 2019-06-27-00-37-59
-.. nonce: rVJb3x
-.. section: Tests
-
-Fix test_shutil to no longer leak temporary files.
-
-..
-
-.. bpo: 37411
-.. date: 2019-06-26-15-28-45
-.. nonce: 5lGNhM
-.. section: Tests
-
-Fix test_wsgiref.testEnviron() to no longer depend on the environment
-variables (don't fail if "X" variable is set).
-
-..
-
-.. bpo: 37400
-.. date: 2019-06-25-16-02-43
-.. nonce: cx_EWv
-.. section: Tests
-
-Fix test_os.test_chown(): use os.getgroups() rather than grp.getgrall() to
-get groups. Rename also the test to test_chown_gid().
-
-..
-
-.. bpo: 37359
-.. date: 2019-06-24-10-47-07
-.. nonce: CkdtyO
-.. section: Tests
-
-Add --cleanup option to python3 -m test to remove ``test_python_*``
-directories of previous failed jobs. Add "make cleantest" to run ``python3
--m test --cleanup``.
-
-..
-
-.. bpo: 37362
-.. date: 2019-06-21-15-47-33
-.. nonce: D3xppx
-.. section: Tests
-
-test_gdb no longer fails if it gets an "unexpected" message on stderr: it
-now ignores stderr. The purpose of test_gdb is to test that python-gdb.py
-commands work as expected, not to test gdb.
-
-..
-
-.. bpo: 35998
-.. date: 2019-06-14-17-05-49
-.. nonce: yX82oD
-.. section: Tests
-
-Avoid TimeoutError in test_asyncio: test_start_tls_server_1()
-
-..
-
-.. bpo: 37278
-.. date: 2019-06-14-12-21-47
-.. nonce: z0HUOr
-.. section: Tests
-
-Fix test_asyncio ProactorLoopCtrlC: join the thread to prevent leaking a
-running thread and leaking a reference.
-
-..
-
-.. bpo: 37261
-.. date: 2019-06-13-12-19-56
-.. nonce: NuKFVo
-.. section: Tests
-
-Fix :func:`test.support.catch_unraisable_exception`: its __exit__() method
-now ignores unraisable exception raised when clearing its ``unraisable``
-attribute.
-
-..
-
-.. bpo: 37169
-.. date: 2019-06-07-12-23-15
-.. nonce: yfXTFg
-.. section: Tests
-
-Rewrite ``_PyObject_IsFreed()`` unit tests.
-
-..
-
-.. bpo: 37153
-.. date: 2019-06-04-18-30-39
-.. nonce: 711INB
-.. section: Tests
-
-``test_venv.test_mutiprocessing()`` now explicitly calls
-``pool.terminate()`` to wait until the pool completes.
-
-..
-
-.. bpo: 28009
-.. date: 2019-04-11-07-59-43
-.. nonce: s85urF
-.. section: Tests
-
-Modify the test_uuid logic to test when a program is available AND can be
-used to obtain a MACADDR as basis for an UUID. Patch by M. Felt
-
-..
-
-.. bpo: 37189
-.. date: 2019-06-17-09-40-59
-.. nonce: j5ebdT
-.. section: Build
-
-Many ``PyRun_XXX()`` functions like :c:func:`PyRun_String` were no longer
-exported in ``libpython38.dll`` by mistake. Export them again to fix the ABI
-compatibiliy.
-
-..
-
-.. bpo: 10945
-.. date: 2019-07-01-12-38-48
-.. nonce: s0YBHG
-.. section: Windows
-
-Officially drop support for creating bdist_wininst installers on non-Windows
-systems.
-
-..
-
-.. bpo: 37369
-.. date: 2019-06-28-09-44-08
-.. nonce: 1iVpxq
-.. section: Windows
-
-Fixes path for :data:`sys.executable` when running from the Microsoft Store.
-
-..
-
-.. bpo: 37351
-.. date: 2019-06-20-12-50-32
-.. nonce: asTnVW
-.. section: Windows
-
-Removes libpython38.a from standard Windows distribution.
-
-..
-
-.. bpo: 35360
-.. date: 2019-06-18-09-05-08
-.. nonce: tdqSmo
-.. section: Windows
-
-Update Windows builds to use SQLite 3.28.0.
-
-..
-
-.. bpo: 37267
-.. date: 2019-06-13-04-15-51
-.. nonce: Ygo5ef
-.. section: Windows
-
-On Windows, :func:`os.dup` no longer creates an inheritable fd when handling
-a character file.
-
-..
-
-.. bpo: 36779
-.. date: 2019-06-11-15-41-34
-.. nonce: 0TMw6f
-.. section: Windows
-
-Ensure ``time.tzname`` is correct on Windows when the active code page is
-set to CP_UTF7 or CP_UTF8.
-
-..
-
-.. bpo: 34602
-.. date: 2019-07-02-01-06-47
-.. nonce: 10d4wl
-.. section: macOS
-
-Avoid test suite failures on macOS by no longer calling resource.setrlimit
-to increase the process stack size limit at runtime.  The runtime change is
-no longer needed since the interpreter is being built with a larger default
-stack size.
-
-..
-
-.. bpo: 35360
-.. date: 2019-06-18-08-58-30
-.. nonce: -CWbfy
-.. section: macOS
-
-Update macOS installer to use SQLite 3.28.0.
-
-..
-
-.. bpo: 34631
-.. date: 2019-06-18-00-30-40
-.. nonce: vSifcv
-.. section: macOS
-
-Updated OpenSSL to 1.1.1c in macOS installer.
-
-..
-
-.. bpo: 37325
-.. date: 2019-06-18-16-40-05
-.. nonce: GssOf1
-.. section: IDLE
-
-Fix tab focus traversal order for help source and custom run dialogs.
-
-..
-
-.. bpo: 37321
-.. date: 2019-06-17-16-35-30
-.. nonce: zVTTGS
-.. section: IDLE
-
-Both subprocess connection error messages now refer to the 'Startup failure'
-section of the IDLE doc.
-
-..
-
-.. bpo: 37177
-.. date: 2019-06-07-00-17-41
-.. nonce: voU6pQ
-.. section: IDLE
-
-Properly 'attach' search dialogs to their main window so that they behave
-like other dialogs and do not get hidden behind their main window.
-
-..
-
-.. bpo: 37039
-.. date: 2019-06-04-23-27-33
-.. nonce: FN_fBf
-.. section: IDLE
-
-Adjust "Zoom Height" to individual screens by momemtarily maximizing the
-window on first use with a particular screen.  Changing screen settings may
-invalidate the saved height.  While a window is maximized, "Zoom Height" has
-no effect.
-
-..
-
-.. bpo: 35763
-.. date: 2019-06-04-20-36-24
-.. nonce: 7XdoWz
-.. section: IDLE
-
-Make calltip reminder about '/' meaning positional-only less obtrusive by
-only adding it when there is room on the first line.
-
-..
-
-.. bpo: 5680
-.. date: 2019-06-03-00-39-29
-.. nonce: VCQfOO
-.. section: IDLE
-
-Add 'Run... Customized' to the Run menu to run a module with customized
-settings.  Any 'command line arguments' entered are added to sys.argv. One
-can suppress the normal Shell main module restart.
-
-..
-
-.. bpo: 36763
-.. date: 2019-06-28-15-49-16
-.. nonce: zrmgki
-.. section: C API
-
-Add :func:`PyConfig_SetWideStringList` function.
-
-..
-
-.. bpo: 28805
-.. date: 2019-06-14-14-03-51
-.. nonce: qZC0N_
-.. section: C API
-
-The :const:`METH_FASTCALL` calling convention has been documented.
-
-..
-
-.. bpo: 37221
-.. date: 2019-06-12-11-45-36
-.. nonce: RhP1E7
-.. section: C API
-
-``tp_print`` is put back at the end of the ``PyTypeObject`` structure to
-restore support for old code (in particular generated by Cython) setting
-``tp_print = 0``. Note that ``tp_print`` will be removed entirely in Python
-3.9.
-
-..
-
-.. bpo: 37221
-.. date: 2019-06-11-02-50-38
-.. nonce: 4tClQT
-.. section: C API
-
-The new function :c:func:`PyCode_NewWithPosOnlyArgs` allows to create code
-objects like :c:func:`PyCode_New`, but with an extra *posonlyargcount*
-parameter for indicating the number of positonal-only arguments.
-
-..
-
-.. bpo: 37215
-.. date: 2019-06-10-15-32-34
-.. nonce: yzoNyU
-.. section: C API
-
-Fix dtrace issue introduce by bpo-36842
-
-..
-
-.. bpo: 37191
-.. date: 2019-06-07-10-47-37
-.. nonce: iGL1_K
-.. section: C API
-
-Python.h does not need compiler support for intermingled declarations (GCC's
-``-Wdeclaration-after-statement``), which were added in 3.8.0 Beta 1. Note
-that in Python 3.9, intermingled declarations will be needed again.
-
-..
-
-.. bpo: 37170
-.. date: 2019-06-06-08-47-04
-.. nonce: hO_fpM
-.. section: C API
-
-Fix the cast on error in :c:func:`PyLong_AsUnsignedLongLongMask()`.
diff --git a/Misc/NEWS.d/3.8.0b3.rst b/Misc/NEWS.d/3.8.0b3.rst
deleted file mode 100644
index 5e52252..0000000
--- a/Misc/NEWS.d/3.8.0b3.rst
+++ /dev/null
@@ -1,437 +0,0 @@
-.. bpo: 37461
-.. date: 2019-07-16-08-11-00
-.. nonce: 1Ahz7O
-.. release date: 2019-07-29
-.. section: Security
-
-Fix an infinite loop when parsing specially crafted email headers. Patch by
-Abhilash Raj.
-
-..
-
-.. bpo: 37593
-.. date: 2019-07-14-23-57-27
-.. nonce: yHSTwH
-.. section: Core and Builtins
-
-Swap the positions of the *posonlyargs* and *args* parameters in the
-constructor of :class:`ast.parameters` nodes.
-
-..
-
-.. bpo: 36974
-.. date: 2019-06-11-12-59-38
-.. nonce: bVYmSA
-.. section: Core and Builtins
-
-Implemented separate vectorcall functions for every calling convention of
-builtin functions and methods. This improves performance for calls.
-
-..
-
-.. bpo: 37697
-.. date: 2019-07-28-17-44-21
-.. nonce: 7UV5d0
-.. section: Library
-
-Syncronize ``importlib.metadata`` with `importlib_metadata 0.19
-<https://gitlab.com/python-devs/importlib_metadata/-/milestones/20>`_,
-improving handling of EGG-INFO files and fixing a crash when entry point
-names contained colons.
-
-..
-
-.. bpo: 37691
-.. date: 2019-07-26-22-30-01
-.. nonce: 1Li3rx
-.. section: Library
-
-Let math.dist() accept coordinates as sequences (or iterables) rather than
-just tuples.
-
-..
-
-.. bpo: 37664
-.. date: 2019-07-24-18-27-44
-.. nonce: o-GYZC
-.. section: Library
-
-Update wheels bundled with ensurepip (pip 19.2.1 and setuptools 41.0.1)
-
-..
-
-.. bpo: 36324
-.. date: 2019-07-19-22-44-41
-.. nonce: 1VjywS
-.. section: Library
-
-Make internal attributes for statistics.NormalDist() private.
-
-..
-
-.. bpo: 37491
-.. date: 2019-07-17-06-54-43
-.. nonce: op0aMs
-.. section: Library
-
-Fix ``IndexError`` when parsing email headers with unexpectedly ending
-bare-quoted string value. Patch by Abhilash Raj.
-
-..
-
-.. bpo: 37579
-.. date: 2019-07-13-10-59-43
-.. nonce: B1Tq9i
-.. section: Library
-
-Return :exc:`NotImplemented` in Python implementation of ``__eq__`` for
-:class:`~datetime.timedelta` and :class:`~datetime.time` when the other
-object being compared is not of the same type to match C implementation.
-Patch by Karthikeyan Singaravelan.
-
-..
-
-.. bpo: 21478
-.. date: 2019-07-10-23-07-11
-.. nonce: cCw9rF
-.. section: Library
-
-Record calls to parent when autospecced object is attached to a mock using
-:func:`unittest.mock.attach_mock`. Patch by Karthikeyan Singaravelan.
-
-..
-
-.. bpo: 37502
-.. date: 2019-07-08-03-15-04
-.. nonce: qZGC4g
-.. section: Library
-
-pickle.loads() no longer raises TypeError when the buffers argument is set
-to None
-
-..
-
-.. bpo: 37520
-.. date: 2019-07-07-21-09-08
-.. nonce: Gg0KD6
-.. section: Library
-
-Correct behavior for zipfile.Path.parent when the path object identifies a
-subdirectory.
-
-..
-
-.. bpo: 18374
-.. date: 2019-07-05-21-46-45
-.. nonce: qgE0H3
-.. section: Library
-
-Fix the ``.col_offset`` attribute of nested :class:`ast.BinOp` instances
-which had a too large value in some situations.
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-03-12-47-52
-.. nonce: gR5hC8
-.. section: Library
-
-Fix :func:`multiprocessing.util.get_temp_dir` finalizer: clear also the
-'tempdir' configuration of the current process, so next call to
-``get_temp_dir()`` will create a new temporary directory, rather than
-reusing the removed temporary directory.
-
-..
-
-.. bpo: 37481
-.. date: 2019-07-02-13-08-30
-.. nonce: hd5k09
-.. section: Library
-
-The distutils ``bdist_wininst`` command is deprecated in Python 3.8, use
-``bdist_wheel`` (wheel packages) instead.
-
-..
-
-.. bpo: 26967
-.. date: 2019-06-23-12-46-10
-.. nonce: xEuem1
-.. section: Library
-
-An :class:`~argparse.ArgumentParser` with ``allow_abbrev=False`` no longer
-disables grouping of short flags, such as ``-vv``, but only disables
-abbreviation of long flags as documented. Patch by Zac Hatfield-Dodds.
-
-..
-
-.. bpo: 37347
-.. date: 2019-06-20-14-23-48
-.. nonce: Gf9yYI
-.. section: Library
-
-:meth:`sqlite3.Connection.create_aggregate`,
-:meth:`sqlite3.Connection.create_function`,
-:meth:`sqlite3.Connection.set_authorizer`,
-:meth:`sqlite3.Connection.set_progress_handler`
-:meth:`sqlite3.Connection.set_trace_callback` methods lead to segfaults if
-some of these methods are called twice with an equal object but not the
-same. Now callbacks are stored more carefully. Patch by Aleksandr Balezin.
-
-..
-
-.. bpo: 36564
-.. date: 2019-04-08-13-00-13
-.. nonce: _n67m_
-.. section: Library
-
-Fix infinite loop in email header folding logic that would be triggered when
-an email policy's max_line_length is not long enough to include the required
-markup and any values in the message. Patch by Paul Ganssle
-
-..
-
-.. bpo: 32910
-.. date: 2019-07-25-10-30-32
-.. nonce: caLLAe
-.. section: Documentation
-
-Remove implementation-specific behaviour of how venv's Deactivate works.
-
-..
-
-.. bpo: 37284
-.. date: 2019-07-13-12-58-20
-.. nonce: rP8WpB
-.. section: Documentation
-
-Add a brief note to indicate that any new ``sys.implementation`` required
-attributes must go through the PEP process.
-
-..
-
-.. bpo: 30088
-.. date: 2019-07-13-12-43-01
-.. nonce: CIcBjy
-.. section: Documentation
-
-Documented that :class:`mailbox.Maildir` constructor doesn't attempt to
-verify the maildir folder layout correctness. Patch by Sviatoslav Sydorenko.
-
-..
-
-.. bpo: 37521
-.. date: 2019-07-12-15-09-56
-.. nonce: 7tiFR-
-.. section: Documentation
-
-Fix `importlib` examples to insert any newly created modules via
-importlib.util.module_from_spec() immediately into sys.modules instead of
-after calling loader.exec_module().
-
-Thanks to Benjamin Mintz for finding the bug.
-
-..
-
-.. bpo: 37456
-.. date: 2019-07-06-17-51-36
-.. nonce: lgAQHn
-.. section: Documentation
-
-Slash ('/') is now part of syntax.
-
-..
-
-.. bpo: 37487
-.. date: 2019-07-06-17-19-26
-.. nonce: QagfZ5
-.. section: Documentation
-
-Fix PyList_GetItem index description to include 0.
-
-..
-
-.. bpo: 37149
-.. date: 2019-07-06-02-19-02
-.. nonce: NumHn3
-.. section: Documentation
-
-Replace the dead link to the Tkinter 8.5 reference by John Shipman, New
-Mexico Tech, with a link to the archive.org copy.
-
-..
-
-.. bpo: 37478
-.. date: 2019-07-06-00-57-27
-.. nonce: B0ioLw
-.. section: Documentation
-
-Added possible exceptions to the description of os.chdir().
-
-..
-
-.. bpo: 37558
-.. date: 2019-07-11-10-33-56
-.. nonce: SKHRsL
-.. section: Tests
-
-Fix test_shared_memory_cleaned_after_process_termination name handling
-
-..
-
-.. bpo: 37526
-.. date: 2019-07-09-12-33-18
-.. nonce: vmm5y7
-.. section: Tests
-
-Add :func:`test.support.catch_threading_exception`: context manager catching
-:class:`threading.Thread` exception using :func:`threading.excepthook`.
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-08-10-11-36
-.. nonce: OY77go
-.. section: Tests
-
-test_concurrent_futures now explicitly stops the ForkServer instance if it's
-running.
-
-..
-
-.. bpo: 37421
-.. date: 2019-07-05-14-47-55
-.. nonce: n8o2to
-.. section: Tests
-
-multiprocessing tests now stop the ForkServer instance if it's running:
-close the "alive" file descriptor to ask the server to stop and then remove
-its UNIX address.
-
-..
-
-.. bpo: 36044
-.. date: 2019-07-11-01-28-24
-.. nonce: gIgfiJ
-.. section: Build
-
-Reduce the number of unit tests run for the PGO generation task.  This
-speeds up the task by a factor of about 15x.  Running the full unit test
-suite is slow.  This change may result in a slightly less optimized build
-since not as many code branches will be executed.  If you are willing to
-wait for the much slower build, the old behavior can be restored using
-'./configure [..] PROFILE_TASK="-m test --pgo-extended"'.  We make no
-guarantees as to which PGO task set produces a faster build.  Users who care
-should run their own relevant benchmarks as results can depend on the
-environment, workload, and compiler tool chain.
-
-..
-
-.. bpo: 37672
-.. date: 2019-07-24-14-36-28
-.. nonce: uKEVHN
-.. section: Windows
-
-Switch Windows Store package's pip to use bundled :file:`pip.ini` instead of
-:envvar:`PIP_USER` variable.
-
-..
-
-.. bpo: 37692
-.. date: 2019-07-27-15-14-20
-.. nonce: TRHGjD
-.. section: IDLE
-
-Improve highlight config sample with example shell interaction and better
-labels for shell elements.
-
-..
-
-.. bpo: 37628
-.. date: 2019-07-26-17-51-13
-.. nonce: kX4AUF
-.. section: IDLE
-
-Settings dialog no longer expands with font size.
-
-..
-
-.. bpo: 37627
-.. date: 2019-07-20-23-33-53
-.. nonce: dQhUNB
-.. section: IDLE
-
-Initialize the Customize Run dialog with the command line arguments most
-recently entered before.  The user can optionally edit before submitting
-them.
-
-..
-
-.. bpo: 33610
-.. date: 2019-07-18-10-11-36
-.. nonce: xYqMLg
-.. section: IDLE
-
-Fix code context not showing the correct context when first toggled on.
-
-..
-
-.. bpo: 37530
-.. date: 2019-07-11-00-05-31
-.. nonce: AuyCyD
-.. section: IDLE
-
-Optimize code context to reduce unneeded background activity. Font and
-highlight changes now occur along with text changes instead of after a
-random delay.
-
-..
-
-.. bpo: 27452
-.. date: 2019-07-03-22-47-44
-.. nonce: nePPLi
-.. section: IDLE
-
-Cleanup ``config.py`` by inlining ``RemoveFile`` and simplifying the
-handling of ``file`` in ``CreateConfigHandlers``.
-
-..
-
-.. bpo: 17535
-.. date: 2019-06-13-01-07-20
-.. nonce: K8i2St
-.. section: IDLE
-
-Add optional line numbers for IDLE editor windows.  Windows open without
-line numbers unless set otherwise in the General tab of the configuration
-dialog.
-
-..
-
-.. bpo: 26806
-.. date: 2019-06-10-22-48-50
-.. nonce: Zltkum
-.. section: IDLE
-
-To compensate for stack frames added by IDLE and avoid possible problems
-with low recursion limits, add 30 to limits in the user code execution
-process.  Subtract 30 when reporting recursion limits to make this addition
-mostly transparent.
-
-..
-
-.. bpo: 36390
-.. date: 2019-03-21-08-35-00
-.. nonce: OdDCGk
-.. section: IDLE
-
-Gather Format menu functions into format.py.  Combine paragraph.py,
-rstrip.py, and format methods from editor.py.
-
-..
-
-.. bpo: 37675
-.. date: 2019-07-24-16-20-54
-.. nonce: 951Cvf
-.. section: Tools/Demos
-
-2to3 now works when run from a zipped standard library.
diff --git a/Misc/NEWS.d/3.8.0b4.rst b/Misc/NEWS.d/3.8.0b4.rst
deleted file mode 100644
index 99c9148..0000000
--- a/Misc/NEWS.d/3.8.0b4.rst
+++ /dev/null
@@ -1,733 +0,0 @@
-.. bpo: 34155
-.. date: 2019-05-04-13-33-37
-.. nonce: MJll68
-.. release date: 2019-08-29
-.. section: Security
-
-Fix parsing of invalid email addresses with more than one ``@`` (e.g.
-a@b@c.com.) to not return the part before 2nd ``@`` as valid email address.
-Patch by maxking & jpic.
-
-..
-
-.. bpo: 37947
-.. date: 2019-08-26-04-09-57
-.. nonce: mzAQtB
-.. section: Core and Builtins
-
-Adjust correctly the recursion level in the symtable generation for named
-expressions. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 37830
-.. date: 2019-08-17-18-41-59
-.. nonce: fNfMbz
-.. section: Core and Builtins
-
-Fixed compilation of :keyword:`break` and :keyword:`continue` in the
-:keyword:`finally` block when the corresponding :keyword:`try` block
-contains :keyword:`return` with a non-constant value.
-
-..
-
-.. bpo: 32912
-.. date: 2019-08-06-14-03-59
-.. nonce: UDwSMJ
-.. section: Core and Builtins
-
-Reverted :issue:`32912`: emitting :exc:`SyntaxWarning` instead of
-:exc:`DeprecationWarning` for invalid escape sequences in string and bytes
-literals.
-
-..
-
-.. bpo: 37757
-.. date: 2019-08-05-14-22-59
-.. nonce: lRv5HX
-.. section: Core and Builtins
-
-:pep:`572`: As described in the PEP, assignment expressions now raise
-:exc:`SyntaxError` when their interaction with comprehension scoping results
-in an ambiguous target scope.
-
-The ``TargetScopeError`` subclass originally proposed by the PEP has been
-removed in favour of just raising regular syntax errors for the disallowed
-cases.
-
-..
-
-.. bpo: 36311
-.. date: 2019-08-02-15-01-33
-.. nonce: uY5vt-
-.. section: Core and Builtins
-
-Decoding bytes objects larger than 2GiB is faster and no longer fails when a
-multibyte characters spans a chunk boundary.
-
-..
-
-.. bpo: 37433
-.. date: 2019-06-27-15-01-14
-.. nonce: amNGqr
-.. section: Core and Builtins
-
-Fix ``SyntaxError`` indicator printing too many spaces for multi-line
-strings - by Anthony Sottile.
-
-..
-
-.. bpo: 20523
-.. date: 2019-02-15-20-42-36
-.. nonce: rRLrvr
-.. section: Core and Builtins
-
-``pdb.Pdb`` supports ~/.pdbrc in Windows 7. Patch by Tim Hopper and Dan
-Lidral-Porter.
-
-..
-
-.. bpo: 37834
-.. date: 2019-08-29-16-41-36
-.. nonce: FThnsh
-.. section: Library
-
-Prevent shutil.rmtree exception when built on non-Windows system without fd
-system call support, like older versions of macOS.
-
-..
-
-.. bpo: 37965
-.. date: 2019-08-28-14-04-18
-.. nonce: 7xGE-C
-.. section: Library
-
-Fix C compiler warning caused by distutils.ccompiler.CCompiler.has_function.
-
-..
-
-.. bpo: 37960
-.. date: 2019-08-27-10-52-13
-.. nonce: CTY7Lw
-.. section: Library
-
-``repr()`` of buffered and text streams now silences only expected
-exceptions when get the value of "name" and "mode" attributes.
-
-..
-
-.. bpo: 37951
-.. date: 2019-08-27-10-03-48
-.. nonce: MfRQgL
-.. section: Library
-
-Most features of the subprocess module now work again in subinterpreters.
-Only *preexec_fn* is restricted in subinterpreters.
-
-..
-
-.. bpo: 36205
-.. date: 2019-08-27-03-53-26
-.. nonce: AfkGRl
-.. section: Library
-
-Fix the rusage implementation of time.process_time() to correctly report the
-sum of the system and user CPU time.
-
-..
-
-.. bpo: 37950
-.. date: 2019-08-26-10-45-51
-.. nonce: -K1IKT
-.. section: Library
-
-Fix :func:`ast.dump` when call with incompletely initialized node.
-
-..
-
-.. bpo: 34679
-.. date: 2019-08-25-18-07-48
-.. nonce: HECzL7
-.. section: Library
-
-Restores instantiation of Windows IOCP event loops from the non-main thread.
-
-..
-
-.. bpo: 36917
-.. date: 2019-08-25-14-56-42
-.. nonce: GBxdw2
-.. section: Library
-
-Add default implementation of the :meth:`ast.NodeVisitor.visit_Constant`
-method which emits a deprecation warning and calls corresponding methody
-``visit_Num()``, ``visit_Str()``, etc.
-
-..
-
-.. bpo: 37798
-.. date: 2019-08-24-16-54-49
-.. nonce: 7mRQCk
-.. section: Library
-
-Update test_statistics.py to verify that the statistics module works well
-for both C and Python implementations. Patch by Dong-hee Na
-
-..
-
-.. bpo: 26589
-.. date: 2019-08-23-00-55-19
-.. nonce: M1xyxG
-.. section: Library
-
-Added a new status code to the http module: 451
-UNAVAILABLE_FOR_LEGAL_REASONS
-
-..
-
-.. bpo: 37915
-.. date: 2019-08-22-16-13-27
-.. nonce: xyoZI5
-.. section: Library
-
-Fix a segmentation fault that appeared when comparing instances of
-``datetime.timezone`` and ``datetime.tzinfo`` objects. Patch by Pablo
-Galindo.
-
-..
-
-.. bpo: 37868
-.. date: 2019-08-17-22-33-54
-.. nonce: hp64fi
-.. section: Library
-
-Fix dataclasses.is_dataclass when given an instance that never raises
-AttributeError in __getattr__.  That is, an object that returns something
-for __dataclass_fields__ even if it's not a dataclass.
-
-..
-
-.. bpo: 37811
-.. date: 2019-08-14-21-41-07
-.. nonce: d1xYj7
-.. section: Library
-
-Fix ``socket`` module's ``socket.connect(address)`` function being unable to
-establish connection in case of interrupted system call. The problem was
-observed on all OSes which ``poll(2)`` system call can take only
-non-negative integers and -1 as a timeout value.
-
-..
-
-.. bpo: 21131
-.. date: 2019-08-14-15-34-23
-.. nonce: 0MMQRi
-.. section: Library
-
-Fix ``faulthandler.register(chain=True)`` stack. faulthandler now allocates
-a dedicated stack of ``SIGSTKSZ*2`` bytes, instead of just ``SIGSTKSZ``
-bytes. Calling the previous signal handler in faulthandler signal handler
-uses more than ``SIGSTKSZ`` bytes of stack memory on some platforms.
-
-..
-
-.. bpo: 37798
-.. date: 2019-08-14-13-51-24
-.. nonce: AmXrik
-.. section: Library
-
-Add C fastpath for statistics.NormalDist.inv_cdf() Patch by Dong-hee Na
-
-..
-
-.. bpo: 37819
-.. date: 2019-08-11-10-34-19
-.. nonce: LVJls-
-.. section: Library
-
-Add Fraction.as_integer_ratio() to match the corresponding methods in bool,
-int, float, and decimal.
-
-..
-
-.. bpo: 37810
-.. date: 2019-08-10-12-33-27
-.. nonce: d4zbvB
-.. section: Library
-
-Fix :mod:`difflib` ``?`` hint in diff output when dealing with tabs.  Patch
-by Anthony Sottile.
-
-..
-
-.. bpo: 37772
-.. date: 2019-08-07-23-48-09
-.. nonce: hLCvdn
-.. section: Library
-
-In ``zipfile.Path``, when adding implicit dirs, ensure that ancestral
-directories are added and that duplicates are excluded.
-
-..
-
-.. bpo: 28292
-.. date: 2019-08-04-11-47-58
-.. nonce: vkihH5
-.. section: Library
-
-Mark calendar.py helper functions as being private.  The follows PEP 8
-guidance to maintain the style conventions in the module and it addresses a
-known case of user confusion.
-
-..
-
-.. bpo: 18049
-.. date: 2019-08-02-16-44-42
-.. nonce: OA4qBL
-.. section: Library
-
-Add definition of THREAD_STACK_SIZE for AIX in Python/thread_pthread.h The
-default thread stacksize caused crashes with the default recursion limit
-Patch by M Felt
-
-..
-
-.. bpo: 37738
-.. date: 2019-08-01-17-11-16
-.. nonce: A3WWcT
-.. section: Library
-
-Fix the implementation of curses ``addch(str, color_pair)``: pass the color
-pair to ``setcchar()``, instead of always passing 0 as the color pair.
-
-..
-
-.. bpo: 37723
-.. date: 2019-07-31-16-49-01
-.. nonce: zq6tw8
-.. section: Library
-
-Fix performance regression on regular expression parsing with huge character
-sets. Patch by Yann Vaginay.
-
-..
-
-.. bpo: 32178
-.. date: 2019-07-30-22-41-05
-.. nonce: X-IFLe
-.. section: Library
-
-Fix IndexError in :mod:`email` package when trying to parse invalid address
-fields starting with ``:``.
-
-..
-
-.. bpo: 37685
-.. date: 2019-07-28-22-25-25
-.. nonce: _3bN9f
-.. section: Library
-
-Fixed comparisons of :class:`datetime.timedelta` and
-:class:`datetime.timezone`.
-
-..
-
-.. bpo: 37695
-.. date: 2019-07-27-20-21-03
-.. nonce: QANdvg
-.. section: Library
-
-Correct :func:`curses.unget_wch` error message.  Patch by Anthony Sottile.
-
-..
-
-.. bpo: 37354
-.. date: 2019-07-25-10-28-40
-.. nonce: RT3_3H
-.. section: Library
-
-Make Activate.ps1 Powershell script static to allow for signing it.
-
-..
-
-.. bpo: 37664
-.. date: 2019-07-24-18-27-44
-.. nonce: o-GYZC
-.. section: Library
-
-Update wheels bundled with ensurepip (pip 19.2.3 and setuptools 41.2.0)
-
-..
-
-.. bpo: 37642
-.. date: 2019-07-21-20-59-31
-.. nonce: L61Bvy
-.. section: Library
-
-Allowed the pure Python implementation of :class:`datetime.timezone` to
-represent sub-minute offsets close to minimum and maximum boundaries,
-specifically in the ranges (23:59, 24:00) and (-23:59, 24:00). Patch by
-Ngalim Siregar
-
-..
-
-.. bpo: 16970
-.. date: 2019-07-19-01-46-56
-.. nonce: GEASf5
-.. section: Library
-
-Adding a value error when an invalid value in passed to nargs Patch by
-Robert Leenders
-
-..
-
-.. bpo: 37587
-.. date: 2019-07-13-16-02-48
-.. nonce: fd-1aF
-.. section: Library
-
-Make json.loads faster for long strings. (Patch by Marco Paolini)
-
-..
-
-.. bpo: 18378
-.. date: 2019-07-13-13-40-12
-.. nonce: NHcojp
-.. section: Library
-
-Recognize "UTF-8" as a valid value for LC_CTYPE in locale._parse_localename.
-
-..
-
-.. bpo: 37531
-.. date: 2019-07-09-19-38-26
-.. nonce: GX7s8S
-.. section: Library
-
-"python3 -m test -jN --timeout=TIMEOUT" now kills a worker process if it
-runs longer than *TIMEOUT* seconds.
-
-..
-
-.. bpo: 37482
-.. date: 2019-07-09-11-20-21
-.. nonce: auzvev
-.. section: Library
-
-Fix serialization of display name in originator or destination address
-fields with both encoded words and special chars.
-
-..
-
-.. bpo: 37372
-.. date: 2019-06-22-12-30-00
-.. nonce: kIKqZ6
-.. section: Library
-
-Fix error unpickling datetime.time objects from Python 2 with seconds>=24.
-Patch by Justin Blanchard.
-
-..
-
-.. bpo: 37085
-.. date: 2019-06-18-16-29-31
-.. nonce: GeYaD6
-.. section: Library
-
-Add the optional Linux SocketCAN Broadcast Manager constants, used as flags
-to configure the BCM behaviour, in the socket module.  Patch by Karl Ding.
-
-..
-
-.. bpo: 36871
-.. date: 2019-05-12-12-58-37
-.. nonce: 6xiEHZ
-.. section: Library
-
-Ensure method signature is used instead of constructor signature of a class
-while asserting mock object against method calls. Patch by Karthikeyan
-Singaravelan.
-
-..
-
-.. bpo: 36582
-.. date: 2019-05-07-17-42-36
-.. nonce: L_dxR6
-.. section: Library
-
-Fix ``UserString.encode()`` to correctly return ``bytes`` rather than a
-``UserString`` instance.
-
-..
-
-.. bpo: 34775
-.. date: 2018-09-23-03-18-52
-.. nonce: vHeuHk
-.. section: Library
-
-Division handling of PurePath now returns NotImplemented instead of raising
-a TypeError when passed something other than an instance of str or PurePath.
-Patch by Roger Aiudi.
-
-..
-
-.. bpo: 37979
-.. date: 2019-08-29-10-40-05
-.. nonce: TAUx_E
-.. section: Documentation
-
-Added a link to dateutil.parser.isoparse in the datetime.fromisoformat
-documentation. Patch by Paul Ganssle
-
-..
-
-.. bpo: 37759
-.. date: 2019-08-04-19-20-58
-.. nonce: EHRF4i
-.. section: Documentation
-
-Beginning edits to Whatsnew 3.8
-
-..
-
-.. bpo: 37726
-.. date: 2019-07-31-11-40-06
-.. nonce: h-3o9a
-.. section: Documentation
-
-Stop recommending getopt in the tutorial for command line argument parsing
-and promote argparse.
-
-..
-
-.. bpo: 37256
-.. date: 2019-07-16-14-48-12
-.. nonce: qJTrBb
-.. section: Documentation
-
-Fix wording of arguments for :class:`Request` in :mod:`urllib.request`
-
-..
-
-.. bpo: 37004
-.. date: 2019-05-22-04-30-07
-.. nonce: BRgxrt
-.. section: Documentation
-
-In the documentation for difflib, a note was added explicitly warning that
-the results of SequenceMatcher's ratio method may depend on the order of the
-input strings.
-
-..
-
-.. bpo: 36487
-.. date: 2019-04-02-19-23-00
-.. nonce: Jg6-MG
-.. section: Documentation
-
-Make C-API docs clear about what the "main" interpreter is.
-
-..
-
-.. bpo: 37805
-.. date: 2019-08-25-19-51-46
-.. nonce: Kl1sti
-.. section: Tests
-
-Add tests for json.dump(..., skipkeys=True). Patch by Dong-hee Na.
-
-..
-
-.. bpo: 37707
-.. date: 2019-07-29-11-36-16
-.. nonce: Sm-dGk
-.. section: Build
-
-Mark some individual tests to skip when --pgo is used.  The tests marked
-increase the PGO task time significantly and likely don't help improve
-optimization of the final executable.
-
-..
-
-.. bpo: 37549
-.. date: 2019-08-22-09-04-44
-.. nonce: TpKI3M
-.. section: Windows
-
-:func:`os.dup` no longer fails for standard streams on Windows 7.
-
-..
-
-.. bpo: 1311
-.. date: 2019-08-21-12-58-18
-.. nonce: BoW1wU
-.. section: Windows
-
-The ``nul`` file on Windows now returns True from :func:`~os.path.exists`
-and a valid result from :func:`os.stat` with ``S_IFCHR`` set.
-
-..
-
-.. bpo: 9949
-.. date: 2019-08-14-13-40-15
-.. nonce: zW45Ks
-.. section: Windows
-
-Enable support for following symlinks in :func:`os.realpath`.
-
-..
-
-.. bpo: 37834
-.. date: 2019-08-12-12-00-24
-.. nonce: VB2QVj
-.. section: Windows
-
-Treat all name surrogate reparse points on Windows in :func:`os.lstat` and
-other reparse points as regular files in :func:`os.stat`.
-
-..
-
-.. bpo: 36266
-.. date: 2019-08-08-18-05-27
-.. nonce: x4eZU3
-.. section: Windows
-
-Add the module name in the formatted error message when DLL load fail
-happens during module import in ``_PyImport_FindSharedFuncptrWindows()``.
-Patch by Srinivas Nyayapati.
-
-..
-
-.. bpo: 25172
-.. date: 2019-08-06-18-09-18
-.. nonce: Akreij
-.. section: Windows
-
-Trying to import the :mod:`crypt` module on Windows will result in an
-:exc:`ImportError` with a message explaining that the module isn't supported
-on Windows. On other platforms, if the underlying ``_crypt`` module is not
-available, the ImportError will include a message explaining the problem.
-
-..
-
-.. bpo: 37778
-.. date: 2019-08-06-13-54-12
-.. nonce: AY1XhH
-.. section: Windows
-
-Fixes the icons used for file associations to the Microsoft Store package.
-
-..
-
-.. bpo: 37734
-.. date: 2019-08-06-09-35-12
-.. nonce: EoJ9Nh
-.. section: Windows
-
-Fix use of registry values to launch Python from Microsoft Store app.
-
-..
-
-.. bpo: 28269
-.. date: 2019-05-05-05-23-34
-.. nonce: -MOHI7
-.. section: Windows
-
-Replace use of :c:func:`strcasecmp` for the system function
-:c:func:`_stricmp`. Patch by Minmin Gong.
-
-..
-
-.. bpo: 18049
-.. date: 2019-07-13-15-58-18
-.. nonce: MklhQQ
-.. section: macOS
-
-Increase the default stack size of threads from 5MB to 16MB on macOS, to
-match the stack size of the main thread. This avoids crashes on deep
-recursion in threads.
-
-..
-
-.. bpo: 37824
-.. date: 2019-08-26-00-41-53
-.. nonce: YY5jAI
-.. section: IDLE
-
-Properly handle user input warnings in IDLE shell. Cease turning
-SyntaxWarnings into SyntaxErrors.
-
-..
-
-.. bpo: 37929
-.. date: 2019-08-24-22-00-33
-.. nonce: jb7523
-.. section: IDLE
-
-IDLE Settings dialog now closes properly when there is no shell window.
-
-..
-
-.. bpo: 37849
-.. date: 2019-08-14-09-43-15
-.. nonce: -bcYF3
-.. section: IDLE
-
-Fixed completions list appearing too high or low when shown above the
-current line.
-
-..
-
-.. bpo: 36419
-.. date: 2019-08-04-17-10-01
-.. nonce: TJZqOc
-.. section: IDLE
-
-Refactor IDLE autocomplete and improve testing.
-
-..
-
-.. bpo: 37748
-.. date: 2019-08-04-15-27-50
-.. nonce: 0vf6pg
-.. section: IDLE
-
-Reorder the Run menu.  Put the most common choice, Run Module, at the top.
-
-..
-
-.. bpo: 37942
-.. date: 2019-08-24-12-11-30
-.. nonce: 7H8N9a
-.. section: Tools/Demos
-
-Improve ArgumentClinic converter for floats.
-
-..
-
-.. bpo: 37034
-.. date: 2019-05-27-16-13-08
-.. nonce: zbTgy8
-.. section: Tools/Demos
-
-Argument Clinic now uses the argument name on errors with keyword-only
-argument instead of their position. Patch contributed by Rémi Lapeyre.
-
-..
-
-.. bpo: 36763
-.. date: 2019-08-23-18-45-11
-.. nonce: q3Kh8Z
-.. section: C API
-
-Options added by ``PySys_AddXOption()`` are now handled the same way than
-``PyConfig.xoptions`` and command line ``-X`` options.
-
-..
-
-.. bpo: 37926
-.. date: 2019-08-23-11-35-55
-.. nonce: hnI5IQ
-.. section: C API
-
-Fix a crash in ``PySys_SetArgvEx(0, NULL, 0)``.
diff --git a/Misc/NEWS.d/3.8.0rc1.rst b/Misc/NEWS.d/3.8.0rc1.rst
deleted file mode 100644
index f7c3c99..0000000
--- a/Misc/NEWS.d/3.8.0rc1.rst
+++ /dev/null
@@ -1,1349 +0,0 @@
-.. bpo: 38243
-.. date: 2019-09-25-13-21-09
-.. nonce: 1pfz24
-.. release date: 2019-10-01
-.. section: Security
-
-Escape the server title of :class:`xmlrpc.server.DocXMLRPCServer` when
-rendering the document page as HTML. (Contributed by Dong-hee Na in
-:issue:`38243`.)
-
-..
-
-.. bpo: 38174
-.. date: 2019-09-23-21-02-46
-.. nonce: MeWuJd
-.. section: Security
-
-Update vendorized expat library version to 2.2.8, which resolves
-CVE-2019-15903.
-
-..
-
-.. bpo: 37764
-.. date: 2019-08-27-01-13-05
-.. nonce: qv67PQ
-.. section: Security
-
-Fixes email._header_value_parser.get_unstructured going into an infinite
-loop for a specific case in which the email header does not have trailing
-whitespace, and the case in which it contains an invalid encoded word. Patch
-by Ashwin Ramaswami.
-
-..
-
-.. bpo: 38006
-.. date: 2019-09-30-09-33-21
-.. nonce: UYlJum
-.. section: Core and Builtins
-
-Fix a bug due to the interaction of weakrefs and the cyclic garbage
-collector. We must clear any weakrefs in garbage in order to prevent their
-callbacks from executing and causing a crash.
-
-..
-
-.. bpo: 38317
-.. date: 2019-09-30-00-56-21
-.. nonce: pmqlIQ
-.. section: Core and Builtins
-
-Fix warnings options priority: ``PyConfig.warnoptions`` has the highest
-priority, as stated in the :pep:`587`.
-
-..
-
-.. bpo: 36871
-.. date: 2019-09-24-18-45-46
-.. nonce: p47knk
-.. section: Core and Builtins
-
-Improve error handling for the assert_has_calls and assert_has_awaits
-methods of mocks. Fixed a bug where any errors encountered while binding the
-expected calls to the mock's spec were silently swallowed, leading to
-misleading error output.
-
-..
-
-.. bpo: 38236
-.. date: 2019-09-20-19-06-23
-.. nonce: eQ0Tmj
-.. section: Core and Builtins
-
-Python now dumps path configuration if it fails to import the Python codecs
-of the filesystem and stdio encodings.
-
-..
-
-.. bpo: 38013
-.. date: 2019-09-12-19-50-01
-.. nonce: I7btD0
-.. section: Core and Builtins
-
-Allow to call ``async_generator_athrow().throw(...)`` even for non-started
-async generator helper. It fixes annoying warning at the end of
-:func:`asyncio.run` call.
-
-..
-
-.. bpo: 38124
-.. date: 2019-09-12-00-14-01
-.. nonce: n6E0H7
-.. section: Core and Builtins
-
-Fix an off-by-one error in PyState_AddModule that could cause out-of-bounds
-memory access.
-
-..
-
-.. bpo: 38005
-.. date: 2019-09-02-20-00-31
-.. nonce: e7VsTA
-.. section: Core and Builtins
-
-Fixed comparing and creating of InterpreterID and ChannelID.
-
-..
-
-.. bpo: 37994
-.. date: 2019-08-31-11-13-25
-.. nonce: Rj6S4j
-.. section: Core and Builtins
-
-Fixed silencing arbitrary errors if an attribute lookup fails in several
-sites. Only AttributeError should be silenced.
-
-..
-
-.. bpo: 37990
-.. date: 2019-08-31-09-22-33
-.. nonce: WDY2f-
-.. section: Core and Builtins
-
-Fix elapsed time in gc stats was not printed correctly.  This bug was a
-regression in 3.8b4.
-
-..
-
-.. bpo: 37966
-.. date: 2019-08-27-21-21-36
-.. nonce: 5OBLez
-.. section: Core and Builtins
-
-The implementation of :func:`~unicodedata.is_normalized` has been greatly
-sped up on strings that aren't normalized, by implementing the full
-normalization-quick-check algorithm from the Unicode standard.
-
-..
-
-.. bpo: 20490
-.. date: 2019-08-15-12-48-36
-.. nonce: -hXeEn
-.. section: Core and Builtins
-
-Improve import error message for partially initialized module on circular
-``from`` imports - by Anthony Sottile.
-
-..
-
-.. bpo: 37409
-.. date: 2019-08-06-23-39-05
-.. nonce: 1qwzn2
-.. section: Core and Builtins
-
-Ensure explicit relative imports from interactive sessions and scripts
-(having no parent package) always raise ImportError, rather than treating
-the current module as the package. Patch by Ben Lewis.
-
-..
-
-.. bpo: 37619
-.. date: 2019-07-18-11-50-49
-.. nonce: X6Lulo
-.. section: Core and Builtins
-
-When adding a wrapper descriptor from one class to a different class (for
-example, setting ``__add__ = str.__add__`` on an ``int`` subclass), an
-exception is correctly raised when the operator is called.
-
-..
-
-.. bpo: 30773
-.. date: 2018-06-07-01-01-20
-.. nonce: C31rVE
-.. section: Core and Builtins
-
-Prohibit parallel running of aclose() / asend() / athrow(). Fix ag_running
-to reflect the actual running status of the AG.
-
-..
-
-.. bpo: 38319
-.. date: 2019-09-30-22-06-33
-.. nonce: 5QjiDa
-.. section: Library
-
-sendfile() used in socket and shutil modules was raising OverflowError for
-files >= 2GiB on 32-bit architectures.  (patch by Giampaolo Rodola)
-
-..
-
-.. bpo: 38242
-.. date: 2019-09-30-00-15-27
-.. nonce: uPIyAc
-.. section: Library
-
-Revert the new asyncio Streams API
-
-..
-
-.. bpo: 38019
-.. date: 2019-09-29-13-50-24
-.. nonce: 6MoOE3
-.. section: Library
-
-Correctly handle pause/resume reading of closed asyncio unix pipe.
-
-..
-
-.. bpo: 38163
-.. date: 2019-09-28-20-16-40
-.. nonce: x51-vK
-.. section: Library
-
-Child mocks will now detect their type as either synchronous or
-asynchronous, asynchronous child mocks will be AsyncMocks and synchronous
-child mocks will be either MagicMock or Mock (depending on their parent
-type).
-
-..
-
-.. bpo: 38161
-.. date: 2019-09-27-16-31-28
-.. nonce: zehai1
-.. section: Library
-
-Removes _AwaitEvent from AsyncMock.
-
-..
-
-.. bpo: 38216
-.. date: 2019-09-27-15-24-45
-.. nonce: -7yvZR
-.. section: Library
-
-Allow the rare code that wants to send invalid http requests from the
-`http.client` library a way to do so.  The fixes for bpo-30458 led to
-breakage for some projects that were relying on this ability to test their
-own behavior in the face of bad requests.
-
-..
-
-.. bpo: 38108
-.. date: 2019-09-25-21-37-02
-.. nonce: Jr9HU6
-.. section: Library
-
-Any synchronous magic methods on an AsyncMock now return a MagicMock. Any
-asynchronous magic methods on a MagicMock now return an AsyncMock.
-
-..
-
-.. bpo: 38248
-.. date: 2019-09-22-13-05-36
-.. nonce: Yo3N_1
-.. section: Library
-
-asyncio: Fix inconsistent immediate Task cancellation
-
-..
-
-.. bpo: 38237
-.. date: 2019-09-20-14-27-17
-.. nonce: xRUZbx
-.. section: Library
-
-The arguments for the builtin pow function are more descriptive. They can
-now also be passed in as keywords.
-
-..
-
-.. bpo: 38191
-.. date: 2019-09-17-12-28-27
-.. nonce: 1TU0HV
-.. section: Library
-
-Constructors of :class:`~typing.NamedTuple` and :class:`~typing.TypedDict`
-types now accept arbitrary keyword argument names, including "cls", "self",
-"typename", "_typename", "fields" and "_fields".  Passing positional
-arguments by keyword is deprecated.
-
-..
-
-.. bpo: 38185
-.. date: 2019-09-16-19-12-57
-.. nonce: zYWppY
-.. section: Library
-
-Fixed case-insensitive string comparison in :class:`sqlite3.Row` indexing.
-
-..
-
-.. bpo: 38136
-.. date: 2019-09-16-09-54-42
-.. nonce: MdI-Zb
-.. section: Library
-
-Changes AsyncMock call count and await count to be two different counters.
-Now await count only counts when a coroutine has been awaited, not when it
-has been called, and vice-versa. Update the documentation around this.
-
-..
-
-.. bpo: 37828
-.. date: 2019-09-15-21-31-18
-.. nonce: gLLDX7
-.. section: Library
-
-Fix default mock name in :meth:`unittest.mock.Mock.assert_called`
-exceptions. Patch by Abraham Toriz Cruz.
-
-..
-
-.. bpo: 38175
-.. date: 2019-09-15-10-30-33
-.. nonce: 61XlUv
-.. section: Library
-
-Fix a memory leak in comparison of :class:`sqlite3.Row` objects.
-
-..
-
-.. bpo: 33936
-.. date: 2019-09-14-10-34-00
-.. nonce: 8wCI_n
-.. section: Library
-
-_hashlib no longer calls obsolete OpenSSL initialization function with
-OpenSSL 1.1.0+.
-
-..
-
-.. bpo: 34706
-.. date: 2019-09-13-14-54-33
-.. nonce: HWVpOY
-.. section: Library
-
-Preserve subclassing in inspect.Signature.from_callable.
-
-..
-
-.. bpo: 38153
-.. date: 2019-09-13-12-18-51
-.. nonce: nHAbuJ
-.. section: Library
-
-Names of hashing algorithms frome OpenSSL are now normalized to follow
-Python's naming conventions. For example OpenSSL uses sha3-512 instead of
-sha3_512 or blake2b512 instead of blake2b.
-
-..
-
-.. bpo: 38115
-.. date: 2019-09-13-09-24-58
-.. nonce: BOO-Y1
-.. section: Library
-
-Fix a bug in dis.findlinestarts() where it would return invalid bytecode
-offsets. Document that a code object's co_lnotab can contain invalid
-bytecode offsets.
-
-..
-
-.. bpo: 38148
-.. date: 2019-09-13-08-55-43
-.. nonce: Lnww6D
-.. section: Library
-
-Add slots to :mod:`asyncio` transport classes, which can reduce memory
-usage.
-
-..
-
-.. bpo: 36991
-.. date: 2019-09-12-14-52-38
-.. nonce: 1OcSm8
-.. section: Library
-
-Fixes a potential incorrect AttributeError exception escaping
-ZipFile.extract() in some unsupported input error situations.
-
-..
-
-.. bpo: 38134
-.. date: 2019-09-12-13-18-55
-.. nonce: gXJTbP
-.. section: Library
-
-Remove obsolete copy of PBKDF2_HMAC_fast. All supported OpenSSL versions
-contain a fast implementation.
-
-..
-
-.. bpo: 38132
-.. date: 2019-09-12-12-47-35
-.. nonce: KSFx1F
-.. section: Library
-
-The OpenSSL hashlib wrapper uses a simpler implementation. Several Macros
-and pointless caches are gone. The hash name now comes from OpenSSL's EVP.
-The algorithm name stays the same, except it is now always lower case.
-
-..
-
-.. bpo: 38008
-.. date: 2019-09-12-10-47-34
-.. nonce: sH74Iy
-.. section: Library
-
-Fix parent class check in protocols to correctly identify the module that
-provides a builtin protocol, instead of assuming they all come from the
-:mod:`collections.abc` module
-
-..
-
-.. bpo: 37405
-.. date: 2019-09-11-20-27-41
-.. nonce: MG5xiY
-.. section: Library
-
-Fixed regression bug for socket.getsockname() for non-CAN_ISOTP AF_CAN
-address family sockets by returning a 1-tuple instead of string.
-
-..
-
-.. bpo: 38121
-.. date: 2019-09-11-16-54-57
-.. nonce: SrSDzB
-.. section: Library
-
-Update parameter names on functions in importlib.metadata matching the
-changes in the 0.22 release of importlib_metadata.
-
-..
-
-.. bpo: 38110
-.. date: 2019-09-11-14-49-20
-.. nonce: A19Y-q
-.. section: Library
-
-The os.closewalk() implementation now uses the libc fdwalk() API on
-platforms where it is available.
-
-..
-
-.. bpo: 38093
-.. date: 2019-09-11-14-45-30
-.. nonce: yQ6k7y
-.. section: Library
-
-Fixes AsyncMock so it doesn't crash when used with AsyncContextManagers or
-AsyncIterators.
-
-..
-
-.. bpo: 37488
-.. date: 2019-09-11-11-44-16
-.. nonce: S8CJUL
-.. section: Library
-
-Add warning to :meth:`datetime.utctimetuple`,  :meth:`datetime.utcnow` and
-:meth:`datetime.utcfromtimestamp` .
-
-..
-
-.. bpo: 38086
-.. date: 2019-09-10-11-42-59
-.. nonce: w5TlG-
-.. section: Library
-
-Update importlib.metadata with changes from `importlib_metadata 0.21
-<https://gitlab.com/python-devs/importlib_metadata/blob/0.21/importlib_metadata/docs/changelog.rst>`_.
-
-..
-
-.. bpo: 37251
-.. date: 2019-09-10-10-59-50
-.. nonce: 8zn2o3
-.. section: Library
-
-Remove `__code__` check in AsyncMock that incorrectly evaluated function
-specs as async objects but failed to evaluate classes with `__await__` but
-no `__code__` attribute defined as async objects.
-
-..
-
-.. bpo: 38037
-.. date: 2019-09-09-18-39-23
-.. nonce: B0UgFU
-.. section: Library
-
-Fix reference counters in the :mod:`signal` module.
-
-..
-
-.. bpo: 38066
-.. date: 2019-09-09-14-39-47
-.. nonce: l9mWv-
-.. section: Library
-
-Hide internal asyncio.Stream methods: feed_eof(), feed_data(),
-set_exception() and set_transport().
-
-..
-
-.. bpo: 38059
-.. date: 2019-09-08-11-36-50
-.. nonce: 8SA6co
-.. section: Library
-
-inspect.py now uses sys.exit() instead of exit()
-
-..
-
-.. bpo: 37953
-.. date: 2019-09-06-17-40-34
-.. nonce: db5FQq
-.. section: Library
-
-In :mod:`typing`, improved the ``__hash__`` and ``__eq__`` methods for
-:class:`ForwardReferences`.
-
-..
-
-.. bpo: 38026
-.. date: 2019-09-04-20-34-14
-.. nonce: 0LLRX-
-.. section: Library
-
-Fixed :func:`inspect.getattr_static` used ``isinstance`` while it should
-avoid dynamic lookup.
-
-..
-
-.. bpo: 38010
-.. date: 2019-09-02-14-30-39
-.. nonce: JOnz9Z
-.. section: Library
-
-In ``importlib.metadata`` sync with ``importlib_metadata`` 0.20, clarifying
-behavior of ``files()`` and fixing issue where only one requirement was
-returned for ``requires()`` on ``dist-info`` packages.
-
-..
-
-.. bpo: 38006
-.. date: 2019-09-02-13-37-27
-.. nonce: Y7vA0Q
-.. section: Library
-
-weakref.WeakValueDictionary defines a local remove() function used as
-callback for weak references. This function was created with a closure.
-Modify the implementation to avoid the closure.
-
-..
-
-.. bpo: 34410
-.. date: 2019-08-31-01-52-59
-.. nonce: 7KbWZQ
-.. section: Library
-
-Fixed a crash in the :func:`tee` iterator when re-enter it. RuntimeError is
-now raised in this case.
-
-..
-
-.. bpo: 37140
-.. date: 2019-08-30-11-21-10
-.. nonce: cFAX-a
-.. section: Library
-
-Fix a ctypes regression of Python 3.8. When a ctypes.Structure is passed by
-copy to a function, ctypes internals created a temporary object which had
-the side effect of calling the structure finalizer (__del__) twice. The
-Python semantics requires a finalizer to be called exactly once. Fix ctypes
-internals to no longer call the finalizer twice.
-
-..
-
-.. bpo: 37972
-.. date: 2019-08-28-21-40-12
-.. nonce: kP-n4L
-.. section: Library
-
-Subscripts to the `unittest.mock.call` objects now receive the same chaining
-mechanism as any other custom attributes, so that the following usage no
-longer raises a `TypeError`:
-
-call().foo().__getitem__('bar')
-
-Patch by blhsing
-
-..
-
-.. bpo: 22347
-.. date: 2019-08-27-01-03-26
-.. nonce: _TRpYr
-.. section: Library
-
-Update mimetypes.guess_type to allow proper parsing of URLs with only a host
-name. Patch by Dong-hee Na.
-
-..
-
-.. bpo: 37885
-.. date: 2019-08-19-10-31-41
-.. nonce: 4Nc9sp
-.. section: Library
-
-venv: Don't generate unset variable warning on deactivate.
-
-..
-
-.. bpo: 37785
-.. date: 2019-08-07-14-49-22
-.. nonce: y7OlT8
-.. section: Library
-
-Fix xgettext warnings in :mod:`argparse`.
-
-..
-
-.. bpo: 11953
-.. date: 2019-07-29-21-39-45
-.. nonce: 4Hpwf9
-.. section: Library
-
-Completing WSA* error codes in :mod:`socket`.
-
-..
-
-.. bpo: 37424
-.. date: 2019-07-04-13-00-20
-.. nonce: 0i1MR-
-.. section: Library
-
-Fixes a possible hang when using a timeout on `subprocess.run()` while
-capturing output.  If the child process spawned its own children or
-otherwise connected its stdout or stderr handles with another process, we
-could hang after the timeout was reached and our child was killed when
-attempting to read final output from the pipes.
-
-..
-
-.. bpo: 37212
-.. date: 2019-06-22-22-00-35
-.. nonce: Zhv-tq
-.. section: Library
-
-:func:`unittest.mock.call` now preserves the order of keyword arguments in
-repr output. Patch by Karthikeyan Singaravelan.
-
-..
-
-.. bpo: 37305
-.. date: 2019-06-18-13-59-55
-.. nonce: fGzWlP
-.. section: Library
-
-Add .webmanifest -> application/manifest+json to list of recognized file
-types and content type headers
-
-..
-
-.. bpo: 21872
-.. date: 2019-06-12-08-56-22
-.. nonce: V9QGGN
-.. section: Library
-
-Fix :mod:`lzma`: module decompresses data incompletely. When decompressing a
-FORMAT_ALONE format file, and it doesn't have the end marker, sometimes the
-last one to dozens bytes can't be output. Patch by Ma Lin.
-
-..
-
-.. bpo: 37206
-.. date: 2019-06-09-22-25-03
-.. nonce: 2WBg4q
-.. section: Library
-
-Default values which cannot be represented as Python objects no longer
-improperly represented as ``None`` in function signatures.
-
-..
-
-.. bpo: 12144
-.. date: 2019-06-08-23-26-58
-.. nonce: Z7mz-q
-.. section: Library
-
-Ensure cookies with ``expires`` attribute are handled in
-:meth:`CookieJar.make_cookies`.
-
-..
-
-.. bpo: 31163
-.. date: 2019-05-26-16-34-53
-.. nonce: 21A802
-.. section: Library
-
-pathlib.Path instance's rename and replace methods now return the new Path
-instance.
-
-..
-
-.. bpo: 25068
-.. date: 2019-05-22-04-52-35
-.. nonce: vR_rC-
-.. section: Library
-
-:class:`urllib.request.ProxyHandler` now lowercases the keys of the passed
-dictionary.
-
-..
-
-.. bpo: 21315
-.. date: 2019-05-19-10-48-46
-.. nonce: PgXVqF
-.. section: Library
-
-Email headers containing RFC2047 encoded words are parsed despite the
-missing whitespace, and a defect registered. Also missing trailing
-whitespace after encoded words is now registered as a defect.
-
-..
-
-.. bpo: 36250
-.. date: 2019-03-09-16-04-12
-.. nonce: tSK4N1
-.. section: Library
-
-Ignore ``ValueError`` from ``signal`` with ``interaction`` in non-main
-thread.
-
-..
-
-.. bpo: 35168
-.. date: 2019-01-22-09-23-20
-.. nonce: UGv2yW
-.. section: Library
-
-:attr:`shlex.shlex.punctuation_chars` is now a read-only property.
-
-..
-
-.. bpo: 20504
-.. date: 2018-11-21-18-05-50
-.. nonce: kG0ub5
-.. section: Library
-
-Fixes a bug in :mod:`cgi` module when a multipart/form-data request has no
-`Content-Length` header.
-
-..
-
-.. bpo: 34519
-.. date: 2018-08-27-15-44-50
-.. nonce: cPlH1h
-.. section: Library
-
-Add additional aliases for HP Roman 8. Patch by Michael Osipov.
-
-..
-
-.. bpo: 26868
-.. date: 2019-09-07-15-55-46
-.. nonce: Raw0Gd
-.. section: Documentation
-
-Fix example usage of :c:func:`PyModule_AddObject` to properly handle errors.
-
-..
-
-.. bpo: 36797
-.. date: 2019-09-05-14-47-51
-.. nonce: KN9Ga5
-.. section: Documentation
-
-Fix a dead link in the distutils API Reference.
-
-..
-
-.. bpo: 37977
-.. date: 2019-08-29-14-38-01
-.. nonce: pML-UI
-.. section: Documentation
-
-Warn more strongly and clearly about pickle insecurity
-
-..
-
-.. bpo: 37937
-.. date: 2019-08-24-12-59-06
-.. nonce: F7fHbt
-.. section: Documentation
-
-Mention ``frame.f_trace`` in :func:`sys.settrace` docs.
-
-..
-
-.. bpo: 36260
-.. date: 2019-06-04-09-29-00
-.. nonce: WrGuc-
-.. section: Documentation
-
-Add decompression pitfalls to zipfile module documentation.
-
-..
-
-.. bpo: 36960
-.. date: 2019-05-18-16-25-44
-.. nonce: xEKHXj
-.. section: Documentation
-
-Restructured the :mod:`datetime` docs in the interest of making them more
-user-friendly and improving readability. Patch by Brad Solomon.
-
-..
-
-.. bpo: 23460
-.. date: 2019-02-14-07-12-48
-.. nonce: Iqiqtm
-.. section: Documentation
-
-The documentation for decimal string formatting using the `:g` specifier has
-been updated to reflect the correct exponential notation cutoff point.
-Original patch contributed by Tuomas Suutari.
-
-..
-
-.. bpo: 35803
-.. date: 2019-01-21-14-30-59
-.. nonce: yae6Lq
-.. section: Documentation
-
-Document and test that ``tempfile`` functions may accept a :term:`path-like
-object` for the ``dir`` argument.  Patch by Anthony Sottile.
-
-..
-
-.. bpo: 33944
-.. date: 2018-10-26-18-10-29
-.. nonce: V1YeOA
-.. section: Documentation
-
-Added a note about the intended use of code in .pth files.
-
-..
-
-.. bpo: 34293
-.. date: 2018-07-31-15-38-26
-.. nonce: yHupAL
-.. section: Documentation
-
-Fix the Doc/Makefile regarding PAPER environment variable and PDF builds
-
-..
-
-.. bpo: 38239
-.. date: 2019-09-26-15-48-36
-.. nonce: MfoVzY
-.. section: Tests
-
-Fix test_gdb for Link Time Optimization (LTO) builds.
-
-..
-
-.. bpo: 38275
-.. date: 2019-09-25-14-40-57
-.. nonce: -kdveI
-.. section: Tests
-
-test_ssl now handles disabled TLS/SSL versions better. OpenSSL's crypto
-policy and run-time settings are recognized and tests for disabled versions
-are skipped. Tests also accept more TLS minimum_versions for platforms that
-override OpenSSL's default with strict settings.
-
-..
-
-.. bpo: 38271
-.. date: 2019-09-25-13-11-29
-.. nonce: iHXNIg
-.. section: Tests
-
-The private keys for test_ssl were encrypted with 3DES in traditional PKCS#5
-format. 3DES and the digest algorithm of PKCS#5 are blocked by some strict
-crypto policies. Use PKCS#8 format with AES256 encryption instead.
-
-..
-
-.. bpo: 38270
-.. date: 2019-09-25-12-18-31
-.. nonce: _x-9uH
-.. section: Tests
-
-test.support now has a helper function to check for availibility of a hash
-digest function. Several tests are refactored avoid MD5 and use SHA256
-instead. Other tests are marked to use MD5 and skipped when MD5 is disabled.
-
-..
-
-.. bpo: 37123
-.. date: 2019-09-24-12-30-55
-.. nonce: IoutBn
-.. section: Tests
-
-Multiprocessing test test_mymanager() now also expects -SIGTERM, not only
-exitcode 0. BaseManager._finalize_manager() sends SIGTERM to the manager
-process if it takes longer than 1 second to stop, which happens on slow
-buildbots.
-
-..
-
-.. bpo: 38212
-.. date: 2019-09-24-12-24-05
-.. nonce: IWbhWz
-.. section: Tests
-
-Multiprocessing tests: increase test_queue_feeder_donot_stop_onexc() timeout
-from 1 to 60 seconds.
-
-..
-
-.. bpo: 38117
-.. date: 2019-09-11-17-22-32
-.. nonce: X7LgGY
-.. section: Tests
-
-Test with OpenSSL 1.1.1d
-
-..
-
-.. bpo: 37531
-.. date: 2019-08-20-19-24-19
-.. nonce: wRoXfU
-.. section: Tests
-
-Enhance regrtest multiprocess timeout: write a message when killing a worker
-process, catch popen.kill() and popen.wait() exceptions, put a timeout on
-the second call to popen.communicate().
-
-..
-
-.. bpo: 37876
-.. date: 2019-08-16-16-15-14
-.. nonce: m3k1w3
-.. section: Tests
-
-Add tests for ROT-13 codec.
-
-..
-
-.. bpo: 37252
-.. date: 2019-06-12-14-30-29
-.. nonce: 4o-uLs
-.. section: Tests
-
-Fix assertions in ``test_close`` and ``test_events_mask_overflow`` devpoll
-tests.
-
-..
-
-.. bpo: 34001
-.. date: 2019-06-03-20-47-10
-.. nonce: KvYx9z
-.. section: Tests
-
-Make test_ssl pass with LibreSSL. LibreSSL handles minimum and maximum TLS
-version differently than OpenSSL.
-
-..
-
-.. bpo: 36919
-.. date: 2019-05-28-15-41-34
-.. nonce: -vGt_m
-.. section: Tests
-
-Make ``test_source_encoding.test_issue2301`` implementation independent. The
-test will work now for both CPython and IronPython.
-
-..
-
-.. bpo: 34596
-.. date: 2018-09-07-01-18-27
-.. nonce: r2-EGd
-.. section: Tests
-
-Fallback to a default reason when :func:`unittest.skip` is uncalled. Patch
-by Naitree Zhu.
-
-..
-
-.. bpo: 38301
-.. date: 2019-09-28-02-37-11
-.. nonce: 123456
-.. section: Build
-
-In Solaris family, we must be sure to use ``-D_REENTRANT``. Patch by Jesús
-Cea Avión.
-
-..
-
-.. bpo: 36210
-.. date: 2019-09-24-22-47-47
-.. nonce: EmL9X1
-.. section: Build
-
-Update optional extension module detection for AIX. ossaudiodev and spwd are
-not applicable for AIX, and are no longer reported as missing. 3rd-party
-packaging of ncurses (with ASIS support) conflicts with officially supported
-AIX curses library, so configure AIX to use libcurses.a. However, skip
-trying to build _curses_panel.
-
-patch by M Felt
-
-..
-
-.. bpo: 36002
-.. date: 2019-09-13-14-12-36
-.. nonce: Bcl4oe
-.. section: Build
-
-Locate ``llvm-profdata`` and ``llvm-ar`` binaries using ``AC_PATH_TOOL``
-rather than ``AC_PATH_TARGET_TOOL``.
-
-..
-
-.. bpo: 37936
-.. date: 2019-09-10-00-54-48
-.. nonce: E7XEwu
-.. section: Build
-
-The :file:`.gitignore` file systematically keeps "rooted", with a
-non-trailing slash, all the rules that are meant to apply to files in a
-specific place in the repo.  Previously, when the intended file to ignore
-happened to be at the root of the repo, we'd most often accidentally also
-ignore files and directories with the same name anywhere in the tree.
-
-..
-
-.. bpo: 37936
-.. date: 2019-08-24-00-29-40
-.. nonce: QrORqA
-.. section: Build
-
-The :file:`.gitignore` file no longer applies to any files that are in fact
-tracked in the Git repository.  Patch by Greg Price.
-
-..
-
-.. bpo: 38117
-.. date: 2019-09-16-14-07-11
-.. nonce: hJVf0C
-.. section: Windows
-
-Update bundled OpenSSL to 1.1.1d
-
-..
-
-.. bpo: 38092
-.. date: 2019-09-13-14-11-42
-.. nonce: x31ehI
-.. section: Windows
-
-Reduce overhead when using multiprocessing in a Windows virtual environment.
-
-..
-
-.. bpo: 38133
-.. date: 2019-09-12-12-05-55
-.. nonce: yFeRGS
-.. section: Windows
-
-Allow py.exe launcher to locate installations from the Microsoft Store and
-improve display of active virtual environments.
-
-..
-
-.. bpo: 38114
-.. date: 2019-09-11-15-24-04
-.. nonce: cc0E5E
-.. section: Windows
-
-The ``pip.ini`` is no longer included in the Nuget package.
-
-..
-
-.. bpo: 36634
-.. date: 2019-09-11-14-42-04
-.. nonce: 8Un8ih
-.. section: Windows
-
-:func:`os.cpu_count` now returns active processors rather than maximum
-processors.
-
-..
-
-.. bpo: 36634
-.. date: 2019-09-11-12-34-31
-.. nonce: xLaGgb
-.. section: Windows
-
-venv activate.bat now works when the existing variables contain double quote
-characters.
-
-..
-
-.. bpo: 38081
-.. date: 2019-09-11-10-22-01
-.. nonce: 8JhzjD
-.. section: Windows
-
-Prevent error calling :func:`os.path.realpath` on ``'NUL'``.
-
-..
-
-.. bpo: 38087
-.. date: 2019-09-10-14-21-40
-.. nonce: --eIib
-.. section: Windows
-
-Fix case sensitivity in test_pathlib and test_ntpath.
-
-..
-
-.. bpo: 38088
-.. date: 2019-09-10-14-17-25
-.. nonce: FOvWSM
-.. section: Windows
-
-Fixes distutils not finding vcruntime140.dll with only the v142 toolset
-installed.
-
-..
-
-.. bpo: 37283
-.. date: 2019-09-09-12-22-23
-.. nonce: 8NvOkU
-.. section: Windows
-
-Ensure command-line and unattend.xml setting override previously detected
-states in Windows installer.
-
-..
-
-.. bpo: 38030
-.. date: 2019-09-04-14-01-08
-.. nonce: _USdtk
-.. section: Windows
-
-Fixes :func:`os.stat` failing for block devices on Windows
-
-..
-
-.. bpo: 38020
-.. date: 2019-09-03-11-47-37
-.. nonce: xFZ2j0
-.. section: Windows
-
-Fixes potential crash when calling :func:`os.readlink` (or indirectly
-through :func:`~os.path.realpath`) on a file that is not a supported link.
-
-..
-
-.. bpo: 37705
-.. date: 2019-08-30-15-15-22
-.. nonce: 2o4NWW
-.. section: Windows
-
-Improve the implementation of ``winerror_to_errno()``.
-
-..
-
-.. bpo: 37702
-.. date: 2019-07-29-16-49-31
-.. nonce: Lj2f5e
-.. section: Windows
-
-Fix memory leak on Windows in creating an SSLContext object or running
-urllib.request.urlopen('https://...').
-
-..
-
-.. bpo: 37445
-.. date: 2019-06-28-18-10-29
-.. nonce: LsdYO6
-.. section: Windows
-
-Include the ``FORMAT_MESSAGE_IGNORE_INSERTS`` flag in ``FormatMessageW()``
-calls.
-
-..
-
-.. bpo: 37380
-.. date: 2019-06-25-04-15-22
-.. nonce: tPxjuz
-.. section: Windows
-
-Don't collect unfinished processes with ``subprocess._active`` on Windows to
-cleanup later. Patch by Ruslan Kuprieiev.
-
-..
-
-.. bpo: 32587
-.. date: 2019-05-10-15-25-44
-.. nonce: -0g2O3
-.. section: Windows
-
-Make :data:`winreg.REG_MULTI_SZ` support zero-length strings.
-
-..
-
-.. bpo: 38117
-.. date: 2019-09-15-21-29-13
-.. nonce: ZLsoAZ
-.. section: macOS
-
-Updated OpenSSL to 1.1.1d in macOS installer.
-
-..
-
-.. bpo: 38089
-.. date: 2019-09-10-14-24-35
-.. nonce: eedgyD
-.. section: macOS
-
-Move Azure Pipelines to latest VM versions and make macOS tests optional
-
-..
-
-.. bpo: 35379
-.. date: 2019-09-17-01-28-56
-.. nonce: yAECDr
-.. section: IDLE
-
-When exiting IDLE, catch any AttributeError.  One happens when
-EditorWindow.close is called twice.  Printing a traceback, when IDLE is run
-from a terminal, is useless and annoying.
-
-..
-
-.. bpo: 38183
-.. date: 2019-09-16-15-04-29
-.. nonce: eudCN1
-.. section: IDLE
-
-To avoid problems, test_idle ignores the user config directory. It no longer
-tries to create or access .idlerc or any files within. Users must run IDLE
-to discover problems with saving settings.
-
-..
-
-.. bpo: 38077
-.. date: 2019-09-09-22-08-36
-.. nonce: Mzpfe2
-.. section: IDLE
-
-IDLE no longer adds 'argv' to the user namespace when initializing it.  This
-bug only affected 3.7.4 and 3.8.0b2 to 3.8.0b4.
-
-..
-
-.. bpo: 38041
-.. date: 2019-09-05-23-12-13
-.. nonce: nxmGGK
-.. section: IDLE
-
-Shell restart lines now fill the window width, always start with '=', and
-avoid wrapping unnecessarily. The line will still wrap if the included file
-name is long relative to the width.
-
-..
-
-.. bpo: 35771
-.. date: 2019-09-01-10-22-55
-.. nonce: tdbmbP
-.. section: IDLE
-
-To avoid occasional spurious test_idle failures on slower machines, increase
-the ``hover_delay`` in test_tooltip.
-
-..
-
-.. bpo: 37902
-.. date: 2019-08-21-16-02-49
-.. nonce: _R_adE
-.. section: IDLE
-
-Add mousewheel scrolling for IDLE module, path, and stack browsers. Patch by
-George Zhang.
-
-..
-
-.. bpo: 37803
-.. date: 2019-09-12-16-15-55
-.. nonce: chEizy
-.. section: Tools/Demos
-
-pdb's ``--help`` and ``--version`` long options now work.
-
-..
-
-.. bpo: 37064
-.. date: 2019-05-27-15-26-12
-.. nonce: k_SPW2
-.. section: Tools/Demos
-
-Add option -k to pathscript.py script: preserve shebang flags. Add option -a
-to pathscript.py script: add flags.
-
-..
-
-.. bpo: 38234
-.. date: 2019-09-24-17-09-48
-.. nonce: d0bhEA
-.. section: C API
-
-:c:func:`Py_SetPath` now sets :data:`sys.executable` to the program full
-path (:c:func:`Py_GetProgramFullPath`) rather than to the program name
-(:c:func:`Py_GetProgramName`).
-
-..
-
-.. bpo: 38234
-.. date: 2019-09-20-17-22-41
-.. nonce: ZbquVK
-.. section: C API
-
-Python ignored arguments passed to :c:func:`Py_SetPath`,
-:c:func:`Py_SetPythonHome` and :c:func:`Py_SetProgramName`: fix Python
-initialization to use specified arguments.
-
-..
-
-.. bpo: 38205
-.. date: 2019-09-19-18-26-29
-.. nonce: Db1OJL
-.. section: C API
-
-The :c:func:`Py_UNREACHABLE` macro now calls :c:func:`Py_FatalError`.
-
-..
-
-.. bpo: 37879
-.. date: 2019-08-17-13-50-21
-.. nonce: CZeUem
-.. section: C API
-
-Fix subtype_dealloc to suppress the type decref when the base type is a C
-heap type
diff --git a/Misc/NEWS.d/3.8.1.rst b/Misc/NEWS.d/3.8.1.rst
deleted file mode 100644
index 55d23dd..0000000
--- a/Misc/NEWS.d/3.8.1.rst
+++ /dev/null
@@ -1,108 +0,0 @@
-.. bpo: 39080
-.. date: 2019-12-17-21-45-36
-.. nonce: OrxEVS
-.. release date: 2019-12-18
-.. section: Core and Builtins
-
-Fix the value of *end_col_offset* for Starred Expression AST nodes when they
-are among the elements in the *args* attribute of Call AST nodes.
-
-..
-
-.. bpo: 39031
-.. date: 2019-12-12-21-05-43
-.. nonce: imlCYZ
-.. section: Core and Builtins
-
-When parsing an "elif" node, lineno and col_offset of the node now point to
-the "elif" keyword and not to its condition, making it consistent with the
-"if" node. Patch by Lysandros Nikolaou.
-
-..
-
-.. bpo: 39008
-.. date: 2019-12-09-10-38-51
-.. nonce: Rrp6f1
-.. section: Core and Builtins
-
-:c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used for size
-arguments in the format string, regardless of whether ``PY_SSIZE_T_CLEAN``
-was defined at include time.
-
-..
-
-.. bpo: 39022
-.. date: 2019-12-10-23-34-48
-.. nonce: QDtIxI
-.. section: Library
-
-Update importlib.metadata to include improvements from importlib_metadata
-1.3 including better serialization of EntryPoints and improved documentation
-for custom finders.
-
-..
-
-.. bpo: 38811
-.. date: 2019-11-15-18-06-04
-.. nonce: AmdQ6M
-.. section: Library
-
-Fix an unhandled exception in :mod:`pathlib` when :meth:`os.link` is
-missing. Patch by Toke Høiland-Jørgensen.
-
-..
-
-.. bpo: 36406
-.. date: 2019-03-24-12-12-27
-.. nonce: mCEkOl
-.. section: Library
-
-Handle namespace packages in :mod:`doctest`. Patch by Karthikeyan
-Singaravelan.
-
-..
-
-.. bpo: 38546
-.. date: 2019-12-17-15-27-07
-.. nonce: 82JwN2
-.. section: Tests
-
-Multiprocessing and concurrent.futures tests now stop the resource tracker
-process when tests complete.
-
-..
-
-.. bpo: 39007
-.. date: 2019-12-09-10-40-34
-.. nonce: vtarxo
-.. section: Windows
-
-Add auditing events to functions in :mod:`winreg`.
-
-..
-
-.. bpo: 38295
-.. date: 2019-12-17-03-43-04
-.. nonce: hgDvlB
-.. section: macOS
-
-Prevent failure of test_relative_path in test_py_compile on macOS Catalina.
-
-..
-
-.. bpo: 38944
-.. date: 2019-11-30-12-10-36
-.. nonce: _3xjKG
-.. section: IDLE
-
-Escape key now closes IDLE completion windows.  Patch by Johnny Najera.
-
-..
-
-.. bpo: 38943
-.. date: 2019-11-29-23-44-11
-.. nonce: 8pUKKs
-.. section: IDLE
-
-Fix IDLE autocomplete windows not always appearing on some systems. Patch by
-Johnny Najera.
diff --git a/Misc/NEWS.d/3.8.1rc1.rst b/Misc/NEWS.d/3.8.1rc1.rst
deleted file mode 100644
index 3519964..0000000
--- a/Misc/NEWS.d/3.8.1rc1.rst
+++ /dev/null
@@ -1,778 +0,0 @@
-.. bpo: 38945
-.. date: 2019-12-01-22-44-40
-.. nonce: ztmNXc
-.. release date: 2019-12-09
-.. section: Security
-
-Newline characters have been escaped when performing uu encoding to prevent
-them from overflowing into to content section of the encoded file. This
-prevents malicious or accidental modification of data during the decoding
-process.
-
-..
-
-.. bpo: 37228
-.. date: 2019-11-21-21-36-54
-.. nonce: yBZnFG
-.. section: Security
-
-Due to significant security concerns, the *reuse_address* parameter of
-:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This
-is because of the behavior of ``SO_REUSEADDR`` in UDP. For more details, see
-the documentation for ``loop.create_datagram_endpoint()``. (Contributed by
-Kyle Stanley, Antoine Pitrou, and Yury Selivanov in :issue:`37228`.)
-
-..
-
-.. bpo: 38722
-.. date: 2019-11-18-16-17-56
-.. nonce: x3mECW
-.. section: Security
-
-:mod:`runpy` now uses :meth:`io.open_code` to open code files. Patch by
-Jason Killen.
-
-..
-
-.. bpo: 38804
-.. date: 2019-11-15-00-54-42
-.. nonce: vjbM8V
-.. section: Security
-
-Fixes a ReDoS vulnerability in :mod:`http.cookiejar`. Patch by Ben Caller.
-
-..
-
-.. bpo: 38622
-.. date: 2019-11-14-16-13-23
-.. nonce: 3DYkfb
-.. section: Security
-
-Add additional audit events for the :mod:`ctypes` module.
-
-..
-
-.. bpo: 38418
-.. date: 2019-10-08-19-29-55
-.. nonce: QL7s0-
-.. section: Security
-
-Fixes audit event for :func:`os.system` to be named ``os.system``.
-
-..
-
-.. bpo: 38673
-.. date: 2019-12-01-00-17-44
-.. nonce: K_Tze-
-.. section: Core and Builtins
-
-In REPL mode, don't switch to PS2 if the line starts with comment or
-whitespace. Based on work by Batuhan Taşkaya.
-
-..
-
-.. bpo: 38922
-.. date: 2019-11-26-12-20-34
-.. nonce: i6ja-i
-.. section: Core and Builtins
-
-Calling ``replace`` on a code object now raises the ``code.__new__`` audit
-event.
-
-..
-
-.. bpo: 38920
-.. date: 2019-11-26-09-16-47
-.. nonce: Vx__sT
-.. section: Core and Builtins
-
-Add audit hooks for when :func:`sys.excepthook` and
-:func:`sys.unraisablehook` are invoked
-
-..
-
-.. bpo: 38892
-.. date: 2019-11-22-22-18-50
-.. nonce: LS586s
-.. section: Core and Builtins
-
-Improve documentation for audit events table and functions.
-
-..
-
-.. bpo: 38707
-.. date: 2019-11-08-00-36-10
-.. nonce: SZL036
-.. section: Core and Builtins
-
-``MainThread.native_id`` is now correctly reset in child processes spawned
-using :class:`multiprocessing.Process`, instead of retaining the parent's
-value.
-
-..
-
-.. bpo: 38640
-.. date: 2019-10-30-11-25-25
-.. nonce: 4sAFh5
-.. section: Core and Builtins
-
-Fixed a bug in the compiler that was causing to raise in the presence of
-break statements and continue statements inside always false while loops.
-Patch by Pablo Galindo.
-
-..
-
-.. bpo: 38535
-.. date: 2019-10-20-12-43-48
-.. nonce: ESMkVN
-.. section: Core and Builtins
-
-Fixed line numbers and column offsets for AST nodes for calls without
-arguments in decorators.
-
-..
-
-.. bpo: 38525
-.. date: 2019-10-20-00-36-18
-.. nonce: Vty1cA
-.. section: Core and Builtins
-
-Fix a segmentation fault when using reverse iterators of empty ``dict``
-objects. Patch by Dong-hee Na and Inada Naoki.
-
-..
-
-.. bpo: 35409
-.. date: 2019-07-13-18-01-13
-.. nonce: ozbcsR
-.. section: Core and Builtins
-
-Ignore GeneratorExit exceptions when throwing an exception into the aclose
-coroutine of an asynchronous generator.
-
-..
-
-.. bpo: 39006
-.. date: 2019-12-09-14-40-09
-.. nonce: v4VsPg
-.. section: Library
-
-Fix asyncio when the ssl module is missing: only check for ssl.SSLSocket
-instance if the ssl module is available.
-
-..
-
-.. bpo: 38708
-.. date: 2019-12-07-22-25-39
-.. nonce: rZTUfk
-.. section: Library
-
-Fix a potential IndexError in email parser when parsing an empty msg-id.
-
-..
-
-.. bpo: 38698
-.. date: 2019-12-07-21-49-50
-.. nonce: HxoSym
-.. section: Library
-
-Add a new ``InvalidMessageID`` token to email parser to represent invalid
-Message-ID headers.  Also, add defects when there is remaining value after
-parsing the header.
-
-..
-
-.. bpo: 38979
-.. date: 2019-12-07-16-32-42
-.. nonce: q0sIHy
-.. section: Library
-
-Return class from ``ContextVar.__class_getitem__`` to simplify subclassing.
-
-..
-
-.. bpo: 38986
-.. date: 2019-12-06-15-11-42
-.. nonce: bg6iZt
-.. section: Library
-
-Make repr of C accelerated TaskWakeupMethWrapper the same as of pure Python
-version.
-
-..
-
-.. bpo: 38529
-.. date: 2019-12-05-16-13-25
-.. nonce: yvQgx3
-.. section: Library
-
-Drop too noisy asyncio warning about deletion of a stream without explicit
-``.close()`` call.
-
-..
-
-.. bpo: 38634
-.. date: 2019-12-04-15-56-28
-.. nonce: pq0ZWa
-.. section: Library
-
-The :mod:`readline` module now detects if Python is linked to libedit at
-runtime on all platforms.  Previously, the check was only done on macOS.
-
-..
-
-.. bpo: 33684
-.. date: 2019-12-04-15-28-40
-.. nonce: QeSmQP
-.. section: Library
-
-Fix ``json.tool`` failed to read a JSON file with non-ASCII characters when
-locale encoding is not UTF-8.
-
-..
-
-.. bpo: 38698
-.. date: 2019-12-02-10-35-19
-.. nonce: WZnAPQ
-.. section: Library
-
-Prevent UnboundLocalError to pop up in parse_message_id
-
-parse_message_id() was improperly using a token defined inside an exception
-handler, which was raising `UnboundLocalError` on parsing an invalid value.
-Patch by Claudiu Popa.
-
-..
-
-.. bpo: 26730
-.. date: 2019-11-27-16-30-02
-.. nonce: 56cdBn
-.. section: Library
-
-Fix ``SpooledTemporaryFile.rollover()`` might corrupt the file when it is in
-text mode. Patch by Serhiy Storchaka.
-
-..
-
-.. bpo: 38668
-.. date: 2019-11-22-10-45-03
-.. nonce: iKx23z
-.. section: Library
-
-Calling func:`shutil.copytree` to copy a directory tree from one directory
-to another subdirectory resulted in an endless loop and a RecursionError. A
-fix was added to consume an iterator and create the list of the entries to
-be copied, avoiding the recursion for newly created directories. Patch by
-Bruno P. Kinoshita.
-
-..
-
-.. bpo: 37838
-.. date: 2019-11-21-11-39-17
-.. nonce: lRFcEC
-.. section: Library
-
-:meth:`typing.get_type_hints` properly handles functions decorated with
-:meth:`functools.wraps`.
-
-..
-
-.. bpo: 38859
-.. date: 2019-11-19-16-30-46
-.. nonce: AZUzL8
-.. section: Library
-
-AsyncMock now returns StopAsyncIteration on the exaustion of a side_effects
-iterable. Since PEP-479 its Impossible to raise a StopIteration exception
-from a coroutine.
-
-..
-
-.. bpo: 38857
-.. date: 2019-11-19-16-28-25
-.. nonce: YPUkU9
-.. section: Library
-
-AsyncMock fix for return values that are awaitable types.  This also covers
-side_effect iterable values that happend to be awaitable, and wraps
-callables that return an awaitable type. Before these awaitables were being
-awaited instead of being returned as is.
-
-..
-
-.. bpo: 38821
-.. date: 2019-11-16-23-26-25
-.. nonce: -albNN
-.. section: Library
-
-Fix unhandled exceptions in :mod:`argparse` when internationalizing error
-messages for arguments with ``nargs`` set to special (non-integer) values.
-Patch by Federico Bond.
-
-..
-
-.. bpo: 38820
-.. date: 2019-11-16-16-09-07
-.. nonce: ivhUSV
-.. section: Library
-
-Make Python compatible with OpenSSL 3.0.0. :func:`ssl.SSLSocket.getpeercert`
-no longer returns IPv6 addresses with a trailing new line.
-
-..
-
-.. bpo: 38807
-.. date: 2019-11-15-09-30-29
-.. nonce: PsmRog
-.. section: Library
-
-Update :exc:`TypeError` messages for :meth:`os.path.join` to include
-:class:`os.PathLike` objects as acceptable input types.
-
-..
-
-.. bpo: 38785
-.. date: 2019-11-13-16-17-43
-.. nonce: NEOEfk
-.. section: Library
-
-Prevent asyncio from crashing if parent ``__init__`` is not called from a
-constructor of object derived from ``asyncio.Future``.
-
-..
-
-.. bpo: 38723
-.. date: 2019-11-12-15-46-28
-.. nonce: gcdMFn
-.. section: Library
-
-:mod:`pdb` now uses :meth:`io.open_code` to trigger auditing events.
-
-..
-
-.. bpo: 27805
-.. date: 2019-11-11-21-43-06
-.. nonce: D3zl1_
-.. section: Library
-
-Allow opening pipes and other non-seekable files in append mode with
-:func:`open`.
-
-..
-
-.. bpo: 38686
-.. date: 2019-11-06-15-26-15
-.. nonce: HNFBce
-.. section: Library
-
-Added support for multiple ``qop`` values in
-:class:`urllib.request.AbstractDigestAuthHandler`.
-
-..
-
-.. bpo: 38334
-.. date: 2019-10-27-00-08-49
-.. nonce: pfLLmc
-.. section: Library
-
-Fixed seeking backward on an encrypted :class:`zipfile.ZipExtFile`.
-
-..
-
-.. bpo: 34679
-.. date: 2019-10-23-16-25-12
-.. nonce: Bnw8o3
-.. section: Library
-
-asynci.ProactorEventLoop.close() now only calls signal.set_wakeup_fd() in
-the main thread.
-
-..
-
-.. bpo: 31202
-.. date: 2019-10-20-12-04-48
-.. nonce: NfdIus
-.. section: Library
-
-The case the result of :func:`pathlib.WindowsPath.glob` matches now the case
-of the pattern for literal parts.
-
-..
-
-.. bpo: 38521
-.. date: 2019-10-18-13-57-31
-.. nonce: U-7aaM
-.. section: Library
-
-Fixed erroneous equality comparison in statistics.NormalDist().
-
-..
-
-.. bpo: 38478
-.. date: 2019-10-15-11-37-57
-.. nonce: A87OPO
-.. section: Library
-
-Fixed a bug in :meth:`inspect.signature.bind` that was causing it to fail
-when handling a keyword argument with same name as positional-only
-parameter. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 33604
-.. date: 2019-10-15-09-47-40
-.. nonce: J12cWT
-.. section: Library
-
-Fixed `hmac.new` and `hmac.HMAC` to raise TypeError instead of ValueError
-when the digestmod parameter, now required in 3.8, is omitted.  Also
-clarified the hmac module documentation and docstrings.
-
-..
-
-.. bpo: 38422
-.. date: 2019-10-09-18-16-51
-.. nonce: aiM5bq
-.. section: Library
-
-Clarify docstrings of pathlib suffix(es)
-
-..
-
-.. bpo: 36993
-.. date: 2019-07-09-05-44-39
-.. nonce: 4javqu
-.. section: Library
-
-Improve error reporting for corrupt zip files with bad zip64 extra data.
-Patch by Daniel Hillier.
-
-..
-
-.. bpo: 36820
-.. date: 2019-05-06-15-34-17
-.. nonce: Eh5mIB
-.. section: Library
-
-Break cycle generated when saving an exception in socket.py, codeop.py and
-dyld.py as they keep alive not only the exception but user objects through
-the ``__traceback__`` attribute. Patch by Mario Corchero.
-
-..
-
-.. bpo: 34776
-.. date: 2018-09-23-14-24-37
-.. nonce: 1SrQe3
-.. section: Library
-
-Fix dataclasses to support forward references in type annotations
-
-..
-
-.. bpo: 33348
-.. date: 2018-04-24-13-18-48
-.. nonce: XaJDei
-.. section: Library
-
-lib2to3 now recognizes expressions after ``*`` and `**` like in ``f(*[] or
-[])``.
-
-..
-
-.. bpo: 27657
-.. date: 2017-12-26-14-32-23
-.. nonce: 6BhyVK
-.. section: Library
-
-Fix urllib.parse.urlparse() with numeric paths. A string like "path:80" is
-no longer parsed as a path but as a scheme ("path") and a path ("80").
-
-..
-
-.. bpo: 38816
-.. date: 2019-11-15-11-39-13
-.. nonce: vUaSVL
-.. section: Documentation
-
-Provides more details about the interaction between :c:func:`fork` and
-CPython's runtime, focusing just on the C-API.  This includes cautions about
-where :c:func:`fork` should and shouldn't be called.
-
-..
-
-.. bpo: 38351
-.. date: 2019-11-15-09-22-28
-.. nonce: xwhlse
-.. section: Documentation
-
-Modernize :mod:`email` examples from %-formatting to f-strings.
-
-..
-
-.. bpo: 38778
-.. date: 2019-11-12-15-31-09
-.. nonce: PHhTlv
-.. section: Documentation
-
-Document the fact that :exc:`RuntimeError` is raised if :meth:`os.fork` is
-called in a subinterpreter.
-
-..
-
-.. bpo: 38592
-.. date: 2019-10-26-13-19-07
-.. nonce: Y96BYO
-.. section: Documentation
-
-Add Brazilian Portuguese to the language switcher at Python Documentation
-website.
-
-..
-
-.. bpo: 38547
-.. date: 2019-12-09-11-32-34
-.. nonce: Juw54e
-.. section: Tests
-
-Fix test_pty: if the process is the session leader, closing the master file
-descriptor raises a SIGHUP signal: simply ignore SIGHUP when running the
-tests.
-
-..
-
-.. bpo: 38992
-.. date: 2019-12-08-15-11-06
-.. nonce: cVoHOZ
-.. section: Tests
-
-Fix a test for :func:`math.fsum` that was failing due to constant folding.
-
-..
-
-.. bpo: 38965
-.. date: 2019-12-04-17-08-55
-.. nonce: yqax3m
-.. section: Tests
-
-Fix test_faulthandler on GCC 10. Use the "volatile" keyword in
-``faulthandler._stack_overflow()`` to prevent tail call optimization on any
-compiler, rather than relying on compiler specific pragma.
-
-..
-
-.. bpo: 38875
-.. date: 2019-11-21-09-11-06
-.. nonce: wSZJal
-.. section: Tests
-
-test_capi: trashcan tests now require the test "cpu" resource.
-
-..
-
-.. bpo: 38841
-.. date: 2019-11-20-16-08-19
-.. nonce: 5F5Lbw
-.. section: Tests
-
-Skip asyncio test_create_datagram_endpoint_existing_sock_unix on platforms
-lacking a functional bind() for named unix domain sockets.
-
-..
-
-.. bpo: 38669
-.. date: 2019-11-04-02-54-16
-.. nonce: pazXZ8
-.. section: Tests
-
-Raise :exc:`TypeError` when passing target as a string with
-:meth:`unittest.mock.patch.object`.
-
-..
-
-.. bpo: 35998
-.. date: 2019-10-16-01-36-15
-.. nonce: G305Bf
-.. section: Tests
-
-Fix a race condition in test_asyncio.test_start_tls_server_1(). Previously,
-there was a race condition between the test main() function which replaces
-the protocol and the test ServerProto protocol which sends ANSWER once it
-gets HELLO. Now, only the test main() function is responsible to send data,
-ServerProto no longer sends data.
-
-..
-
-.. bpo: 37404
-.. date: 2019-12-01-21-45-24
-.. nonce: cNsA7S
-.. section: Build
-
-:mod:`asyncio` now raises :exc:`TyperError` when calling incompatible
-methods with an :class:`ssl.SSLSocket` socket.  Patch by Ido Michael.
-
-..
-
-.. bpo: 38809
-.. date: 2019-11-15-09-25-44
-.. nonce: 9jwta6
-.. section: Build
-
-On Windows, build scripts will now recognize and use python.exe from an
-active virtual env.
-
-..
-
-.. bpo: 38684
-.. date: 2019-11-04-14-30-37
-.. nonce: aed593
-.. section: Build
-
-Fix _hashlib build when Blake2 is disabled, but OpenSSL supports it.
-
-..
-
-.. bpo: 37415
-.. date: 2019-10-11-15-32-58
-.. nonce: D9RXrq
-.. section: Build
-
-Fix stdatomic.h header check for ICC compiler: the ICC implementation lacks
-atomic_uintptr_t type which is needed by Python.
-
-..
-
-.. bpo: 33125
-.. date: 2019-11-14-08-57-50
-.. nonce: EN5MWS
-.. section: Windows
-
-Add support for building and releasing Windows ARM64 packages.
-
-..
-
-.. bpo: 38589
-.. date: 2019-10-28-10-48-16
-.. nonce: V69Q1a
-.. section: Windows
-
-Fixes HTML Help shortcut when Windows is not installed to C drive
-
-..
-
-.. bpo: 38453
-.. date: 2019-10-28-10-32-43
-.. nonce: NwwatW
-.. section: Windows
-
-Ensure ntpath.realpath() correctly resolves relative paths.
-
-..
-
-.. bpo: 38519
-.. date: 2019-10-28-05-01-29
-.. nonce: dCkY66
-.. section: Windows
-
-Restores the internal C headers that were missing from the nuget.org and
-Microsoft Store packages.
-
-..
-
-.. bpo: 38492
-.. date: 2019-10-16-09-49-09
-.. nonce: Te1LxC
-.. section: Windows
-
-Remove ``pythonw.exe`` dependency on the Microsoft C++ runtime.
-
-..
-
-.. bpo: 37931
-.. date: 2019-08-23-12-14-34
-.. nonce: goYgQj
-.. section: macOS
-
-Fixed a crash on OSX dynamic builds that occurred when re-initializing the
-posix module after a Py_Finalize if the environment had changed since the
-previous `import posix`. Patch by Benoît Hudson.
-
-..
-
-.. bpo: 38862
-.. date: 2019-11-23-21-50-57
-.. nonce: KQ9A0m
-.. section: IDLE
-
-'Strip Trailing Whitespace' on the Format menu removes extra newlines at the
-end of non-shell files.
-
-..
-
-.. bpo: 26353
-.. date: 2019-11-09-23-55-59
-.. nonce: duYZiF
-.. section: IDLE
-
-Stop adding newline when saving an IDLE shell window.
-
-..
-
-.. bpo: 38636
-.. date: 2019-10-30-22-11-16
-.. nonce: hUhDeB
-.. section: IDLE
-
-Fix IDLE Format menu tab toggle and file indent width. These functions
-(default shortcuts Alt-T and Alt-U) were mistakenly disabled in 3.7.5 and
-3.8.0.
-
-..
-
-.. bpo: 4630
-.. date: 2019-10-28-04-48-03
-.. nonce: upgjiV
-.. section: IDLE
-
-Add an option to toggle IDLE's cursor blink for shell, editor, and output
-windows.  See Settings, General, Window Preferences, Cursor Blink. Patch by
-Zachary Spytz.
-
-..
-
-.. bpo: 38598
-.. date: 2019-10-26-18-16-24
-.. nonce: 6kH9FY
-.. section: IDLE
-
-Do not try to compile IDLE shell or output windows
-
-..
-
-.. bpo: 37633
-.. date: 2019-11-04-21-10-47
-.. nonce: oOGVdo
-.. section: C API
-
-Re-export some function compatibility wrappers for macros in ``pythonrun.h``.
-
-..
-
-.. bpo: 38540
-.. date: 2019-10-21-09-24-03
-.. nonce: 314N_T
-.. section: C API
-
-Fixed possible leak in :c:func:`PyArg_Parse` and similar functions for
-format units ``"es#"`` and ``"et#"`` when the macro
-:c:macro:`PY_SSIZE_T_CLEAN` is not defined.
-
-..
-
-.. bpo: 36389
-.. date: 2019-10-07-17-15-09
-.. nonce: hFX_jD
-.. section: C API
-
-The ``_PyObject_CheckConsistency()`` function is now also available in
-release mode. For example, it can be used to debug a crash in the
-``visit_decref()`` function of the GC.
diff --git a/Misc/NEWS.d/3.8.2.rst b/Misc/NEWS.d/3.8.2.rst
deleted file mode 100644
index bde6812..0000000
--- a/Misc/NEWS.d/3.8.2.rst
+++ /dev/null
@@ -1,97 +0,0 @@
-.. bpo: 39382
-.. date: 2020-02-18-01-40-13
-.. nonce: OLSJu9
-.. release date: 2020-02-24
-.. section: Core and Builtins
-
-Fix a use-after-free in the single inheritance path of ``issubclass()``,
-when the ``__bases__`` of an object has a single reference, and so does its
-first item. Patch by Yonatan Goldschmidt.
-
-..
-
-.. bpo: 39427
-.. date: 2020-01-22-22-28-04
-.. nonce: LiO-Eo
-.. section: Core and Builtins
-
-Document all possibilities for the ``-X`` options in the command line help
-section. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 39649
-.. date: 2020-02-23-21-27-10
-.. nonce: qiubSp
-.. section: Library
-
-Remove obsolete check for `__args__` in bdb.Bdb.format_stack_entry.
-
-..
-
-.. bpo: 39681
-.. date: 2020-02-21-13-58-40
-.. nonce: zN8hf0
-.. section: Library
-
-Fix a regression where the C pickle module wouldn't allow unpickling from a
-file-like object that doesn't expose a readinto() method.
-
-..
-
-.. bpo: 39546
-.. date: 2020-02-03-15-12-51
-.. nonce: _Kj0Pn
-.. section: Library
-
-Fix a regression in :class:`~argparse.ArgumentParser` where
-``allow_abbrev=False`` was ignored for long options that used a prefix
-character other than "-".
-
-..
-
-.. bpo: 39432
-.. date: 2020-01-23-16-08-58
-.. nonce: Cee6mi
-.. section: Library
-
-Implement PEP-489 algorithm for non-ascii "PyInit\_..." symbol names in
-distutils to make it export the correct init symbol also on Windows.
-
-..
-
-.. bpo: 17422
-.. date: 2020-02-19-11-13-47
-.. nonce: g7_9zz
-.. section: Documentation
-
-The language reference now specifies restrictions on class namespaces.
-Adapted from a patch by Ethan Furman.
-
-..
-
-.. bpo: 39572
-.. date: 2020-02-18-18-37-07
-.. nonce: CCtzy1
-.. section: Documentation
-
-Updated documentation of ``total`` flag of TypeDict.
-
-..
-
-.. bpo: 39654
-.. date: 2020-02-18-07-42-20
-.. nonce: MoT1jI
-.. section: Documentation
-
-In pyclbr doc, update 'class' to 'module' where appropriate and add
-readmodule comment. Patch by Hakan Çelik.
-
-..
-
-.. bpo: 39663
-.. date: 2020-02-17-21-09-03
-.. nonce: wexcsH
-.. section: IDLE
-
-Add tests for pyparse find_good_parse_start().
diff --git a/Misc/NEWS.d/3.8.2rc1.rst b/Misc/NEWS.d/3.8.2rc1.rst
deleted file mode 100644
index a4b8a1e..0000000
--- a/Misc/NEWS.d/3.8.2rc1.rst
+++ /dev/null
@@ -1,580 +0,0 @@
-.. bpo: 39401
-.. date: 2020-01-28-20-54-09
-.. nonce: he7h_A
-.. release date: 2020-02-10
-.. section: Security
-
-Avoid unsafe load of ``api-ms-win-core-path-l1-1-0.dll`` at startup on
-Windows 7.
-
-..
-
-.. bpo: 39184
-.. date: 2020-01-07-00-42-08
-.. nonce: fe7NgK
-.. section: Security
-
-Add audit events to command execution functions in os and pty modules.
-
-..
-
-.. bpo: 39579
-.. date: 2020-02-07-15-18-35
-.. nonce: itNmC0
-.. section: Core and Builtins
-
-Change the ending column offset of `Attribute` nodes constructed in
-`ast_for_dotted_name` to point at the end of the current node and not at the
-end of the last `NAME` node.
-
-..
-
-.. bpo: 39510
-.. date: 2020-02-04-10-27-41
-.. nonce: PMIh-f
-.. section: Core and Builtins
-
-Fix segfault in ``readinto()`` method on closed BufferedReader.
-
-..
-
-.. bpo: 39492
-.. date: 2020-01-30-01-14-42
-.. nonce: eTuy0F
-.. section: Core and Builtins
-
-Fix a reference cycle in the C Pickler that was preventing the garbage
-collection of deleted, pickled objects.
-
-..
-
-.. bpo: 39421
-.. date: 2020-01-22-15-53-37
-.. nonce: O3nG7u
-.. section: Core and Builtins
-
-Fix possible crashes when operating with the functions in the :mod:`heapq`
-module and custom comparison operators.
-
-..
-
-.. bpo: 39386
-.. date: 2020-01-20-21-40-57
-.. nonce: ULqD8t
-.. section: Core and Builtins
-
-Prevent double awaiting of async iterator.
-
-..
-
-.. bpo: 39235
-.. date: 2020-01-09-10-01-18
-.. nonce: RYwjoc
-.. section: Core and Builtins
-
-Fix AST end location for lone generator expression in function call, e.g.
-f(i for i in a).
-
-..
-
-.. bpo: 39209
-.. date: 2020-01-06-10-29-16
-.. nonce: QHAONe
-.. section: Core and Builtins
-
-Correctly handle multi-line tokens in interactive mode. Patch by Pablo
-Galindo.
-
-..
-
-.. bpo: 39216
-.. date: 2020-01-05-06-55-52
-.. nonce: 74jLh9
-.. section: Core and Builtins
-
-Fix constant folding optimization for positional only arguments - by Anthony
-Sottile.
-
-..
-
-.. bpo: 39215
-.. date: 2020-01-04-17-25-34
-.. nonce: xiqiIz
-.. section: Core and Builtins
-
-Fix ``SystemError`` when nested function has annotation on positional-only
-argument - by Anthony Sottile.
-
-..
-
-.. bpo: 38588
-.. date: 2019-12-29-19-13-54
-.. nonce: pgXnNS
-.. section: Core and Builtins
-
-Fix possible crashes in dict and list when calling
-:c:func:`PyObject_RichCompareBool`.
-
-..
-
-.. bpo: 38610
-.. date: 2019-10-31-14-30-39
-.. nonce: fHdVMS
-.. section: Core and Builtins
-
-Fix possible crashes in several list methods by holding strong references to
-list elements when calling :c:func:`PyObject_RichCompareBool`.
-
-..
-
-.. bpo: 39590
-.. date: 2020-02-09-05-51-05
-.. nonce: rf98GU
-.. section: Library
-
-Collections.deque now holds strong references during deque.__contains__ and
-deque.count, fixing crashes.
-
-..
-
-.. bpo: 38149
-.. date: 2020-02-05-11-24-16
-.. nonce: GWsjHE
-.. section: Library
-
-:func:`sys.audit` is now called only once per call of :func:`glob.glob` and
-:func:`glob.iglob`.
-
-..
-
-.. bpo: 39450
-.. date: 2020-02-02-14-46-34
-.. nonce: 48R274
-.. section: Library
-
-Striped whitespace from docstring before returning it from
-:func:`unittest.case.shortDescription`.
-
-..
-
-.. bpo: 39493
-.. date: 2020-01-30-01-13-19
-.. nonce: CbFRi7
-.. section: Library
-
-Mark ``typing.IO.closed`` as a property
-
-..
-
-.. bpo: 39485
-.. date: 2020-01-29-14-58-27
-.. nonce: Zy3ot6
-.. section: Library
-
-Fix a bug in :func:`unittest.mock.create_autospec` that would complain about
-the wrong number of arguments for custom descriptors defined in an extension
-module returning functions.
-
-..
-
-.. bpo: 39082
-.. date: 2020-01-24-13-24-35
-.. nonce: qKgrq_
-.. section: Library
-
-Allow AsyncMock to correctly patch static/class methods
-
-..
-
-.. bpo: 39430
-.. date: 2020-01-24-11-05-21
-.. nonce: I0UQzM
-.. section: Library
-
-Fixed race condition in lazy imports in :mod:`tarfile`.
-
-..
-
-.. bpo: 39390
-.. date: 2020-01-23-21-34-29
-.. nonce: D2tSXk
-.. section: Library
-
-Fixed a regression with the `ignore` callback of :func:`shutil.copytree`.
-The argument types are now str and List[str] again.
-
-..
-
-.. bpo: 39389
-.. date: 2020-01-20-00-56-01
-.. nonce: fEirIS
-.. section: Library
-
-Write accurate compression level metadata in :mod:`gzip` archives, rather
-than always signaling maximum compression.
-
-..
-
-.. bpo: 39274
-.. date: 2020-01-15-23-13-03
-.. nonce: lpc0-n
-.. section: Library
-
-``bool(fraction.Fraction)`` now returns a boolean even if (numerator != 0)
-does not return a boolean (ex: numpy number).
-
-..
-
-.. bpo: 39297
-.. date: 2020-01-11-01-15-37
-.. nonce: y98Z6Q
-.. section: Library
-
-Improved performance of importlib.metadata distribution discovery and
-resilients to inaccessible sys.path entries (importlib_metadata v1.4.0).
-
-..
-
-.. bpo: 39242
-.. date: 2020-01-08-23-25-27
-.. nonce: bnL65N
-.. section: Library
-
-Updated the Gmane domain from news.gmane.org to news.gmane.io which is used
-for examples of :class:`~nntplib.NNTP` news reader server and nntplib tests.
-
-..
-
-.. bpo: 38907
-.. date: 2020-01-06-02-14-38
-.. nonce: F1RkCR
-.. section: Library
-
-In http.server script, restore binding to IPv4 on Windows.
-
-..
-
-.. bpo: 39152
-.. date: 2020-01-03-18-02-50
-.. nonce: JgPjCC
-.. section: Library
-
-Fix ttk.Scale.configure([name]) to return configuration tuple for name or
-all options.  Giovanni Lombardo contributed part of the patch.
-
-..
-
-.. bpo: 39198
-.. date: 2020-01-02-20-21-03
-.. nonce: nzwGyG
-.. section: Library
-
-If an exception were to be thrown in `Logger.isEnabledFor` (say, by asyncio
-timeouts or stopit) , the `logging` global lock may not be released
-appropriately, resulting in deadlock.  This change wraps that block of code
-with `try...finally` to ensure the lock is released.
-
-..
-
-.. bpo: 39191
-.. date: 2020-01-02-17-28-03
-.. nonce: ur_scy
-.. section: Library
-
-Perform a check for running loop before starting a new task in
-``loop.run_until_complete()`` to fail fast; it prevents the side effect of
-new task spawning before exception raising.
-
-..
-
-.. bpo: 38871
-.. date: 2020-01-01-18-44-52
-.. nonce: 3EEOLg
-.. section: Library
-
-Correctly parenthesize filter-based statements that contain lambda
-expressions in mod:`lib2to3`. Patch by Dong-hee Na.
-
-..
-
-.. bpo: 39142
-.. date: 2019-12-31-19-27-23
-.. nonce: oqU5iD
-.. section: Library
-
-A change was made to logging.config.dictConfig to avoid converting instances
-of named tuples to ConvertingTuple. It's assumed that named tuples are too
-specialised to be treated like ordinary tuples; if a user of named tuples
-requires ConvertingTuple functionality, they will have to implement that
-themselves in their named tuple class.
-
-..
-
-.. bpo: 39129
-.. date: 2019-12-24-10-43-13
-.. nonce: jVx5rW
-.. section: Library
-
-Fix import path for ``asyncio.TimeoutError``
-
-..
-
-.. bpo: 39057
-.. date: 2019-12-15-21-47-54
-.. nonce: FOxn-w
-.. section: Library
-
-:func:`urllib.request.proxy_bypass_environment` now ignores leading dots and
-no longer ignores a trailing newline.
-
-..
-
-.. bpo: 39056
-.. date: 2019-12-15-21-05-16
-.. nonce: nEfUM9
-.. section: Library
-
-Fixed handling invalid warning category in the -W option.  No longer import
-the re module if it is not needed.
-
-..
-
-.. bpo: 39055
-.. date: 2019-12-15-19-23-23
-.. nonce: FmN3un
-.. section: Library
-
-:func:`base64.b64decode` with ``validate=True`` raises now a binascii.Error
-if the input ends with a single ``\n``.
-
-..
-
-.. bpo: 39033
-.. date: 2019-12-13-18-54-49
-.. nonce: cepuyD
-.. section: Library
-
-Fix :exc:`NameError` in :mod:`zipimport`. Patch by Karthikeyan Singaravelan.
-
-..
-
-.. bpo: 38878
-.. date: 2019-11-22-12-08-52
-.. nonce: EJ0cFf
-.. section: Library
-
-Fixed __subclasshook__ of :class:`os.PathLike` to return a correct result
-upon inheritence. Patch by Bar Harel.
-
-..
-
-.. bpo: 35182
-.. date: 2019-10-31-19-23-25
-.. nonce: hzeNl9
-.. section: Library
-
-Fixed :func:`Popen.communicate` subsequent call crash when the child process
-has already closed any piped standard stream, but still continues to be
-running. Patch by Andriy Maletsky.
-
-..
-
-.. bpo: 38473
-.. date: 2019-10-14-21-14-55
-.. nonce: uXpVld
-.. section: Library
-
-Use signature from inner mock for autospecced methods attached with
-:func:`unittest.mock.attach_mock`. Patch by Karthikeyan Singaravelan.
-
-..
-
-.. bpo: 38293
-.. date: 2019-09-29-08-17-03
-.. nonce: wls5s3
-.. section: Library
-
-Add :func:`copy.copy` and :func:`copy.deepcopy` support to :func:`property`
-objects.
-
-..
-
-.. bpo: 39153
-.. date: 2020-01-27-22-24-51
-.. nonce: Pjl8jV
-.. section: Documentation
-
-Clarify refcounting semantics for the following functions: -
-PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem -
-PyDict_SetItemString
-
-..
-
-.. bpo: 39392
-.. date: 2020-01-27-18-18-42
-.. nonce: oiqcLO
-.. section: Documentation
-
-Explain that when filling with turtle, overlap regions may be left unfilled.
-
-..
-
-.. bpo: 39381
-.. date: 2020-01-18-15-37-56
-.. nonce: wTWe8d
-.. section: Documentation
-
-Mention in docs that :func:`asyncio.get_event_loop` implicitly creates new
-event loop only if called from the main thread.
-
-..
-
-.. bpo: 38918
-.. date: 2019-12-15-22-04-41
-.. nonce: 8JnDTS
-.. section: Documentation
-
-Add an entry for ``__module__`` in the "function" & "method" sections of the
-`inspect docs types and members table
-<https://docs.python.org/3/library/inspect.html#types-and-members>`_
-
-..
-
-.. bpo: 3530
-.. date: 2019-11-17-11-53-10
-.. nonce: 8zFUMc
-.. section: Documentation
-
-In the :mod:`ast` module documentation, fix a misleading ``NodeTransformer``
-example and add advice on when to use the ``fix_missing_locations``
-function.
-
-..
-
-.. bpo: 39502
-.. date: 2020-01-30-15-04-54
-.. nonce: chbpII
-.. section: Tests
-
-Skip test_zipfile.test_add_file_after_2107() if :func:`time.localtime` fails
-with :exc:`OverflowError`. It is the case on AIX 6.1 for example.
-
-..
-
-.. bpo: 38546
-.. date: 2019-12-18-14-52-08
-.. nonce: 2kxNuM
-.. section: Tests
-
-Fix test_ressources_gced_in_workers() of test_concurrent_futures: explicitly
-stop the manager to prevent leaking a child process running in the
-background after the test completes.
-
-..
-
-.. bpo: 39144
-.. date: 2019-12-27-22-18-26
-.. nonce: dwHMlR
-.. section: Build
-
-The ctags and etags build targets both include Modules/_ctypes and Python
-standard library source files.
-
-..
-
-.. bpo: 39439
-.. date: 2020-01-24-03-15-05
-.. nonce: sFxGfR
-.. section: Windows
-
-Honor the Python path when a virtualenv is active on Windows.
-
-..
-
-.. bpo: 39393
-.. date: 2020-01-20-23-42-53
-.. nonce: gWlJDG
-.. section: Windows
-
-Improve the error message when attempting to load a DLL with unresolved
-dependencies.
-
-..
-
-.. bpo: 38883
-.. date: 2020-01-11-22-53-55
-.. nonce: X7FRaN
-.. section: Windows
-
-:meth:`~pathlib.Path.home()` and :meth:`~pathlib.Path.expanduser()` on
-Windows now prefer :envvar:`USERPROFILE` and no longer use :envvar:`HOME`,
-which is not normally set for regular user accounts. This makes them again
-behave like :func:`os.path.expanduser`, which was changed to ignore
-:envvar:`HOME` in 3.8, see :issue:`36264`.
-
-..
-
-.. bpo: 39185
-.. date: 2020-01-02-01-11-53
-.. nonce: T4herN
-.. section: Windows
-
-The build.bat script has additional options for very-quiet output (-q) and
-very-verbose output (-vv)
-
-..
-
-.. bpo: 30780
-.. date: 2020-01-27-16-44-29
-.. nonce: nR80qu
-.. section: IDLE
-
-Add remaining configdialog tests for buttons and highlights and keys tabs.
-
-..
-
-.. bpo: 39388
-.. date: 2020-01-25-02-26-45
-.. nonce: x4TQNh
-.. section: IDLE
-
-IDLE Settings Cancel button now cancels pending changes
-
-..
-
-.. bpo: 39050
-.. date: 2020-01-22-22-28-06
-.. nonce: zkn0FO
-.. section: IDLE
-
-Make IDLE Settings dialog Help button work again.
-
-..
-
-.. bpo: 34118
-.. date: 2019-12-30-16-44-07
-.. nonce: FaNW0a
-.. section: IDLE
-
-Tag memoryview, range, and tuple as classes, the same as list, etcetera, in
-the library manual built-in functions list.
-
-..
-
-.. bpo: 38792
-.. date: 2019-11-13-23-51-39
-.. nonce: xhTC5a
-.. section: IDLE
-
-Close an IDLE shell calltip if a :exc:`KeyboardInterrupt` or shell restart
-occurs.  Patch by Zackery Spytz.
-
-..
-
-.. bpo: 32989
-.. date: 2018-03-03-12-56-26
-.. nonce: FVhmhH
-.. section: IDLE
-
-Add tests for editor newline_and_indent_event method. Remove dead code from
-pyparse find_good_parse_start method.
diff --git a/Misc/NEWS.d/3.8.2rc2.rst b/Misc/NEWS.d/3.8.2rc2.rst
deleted file mode 100644
index fed6cea..0000000
--- a/Misc/NEWS.d/3.8.2rc2.rst
+++ /dev/null
@@ -1,103 +0,0 @@
-.. bpo: 39184
-.. date: 2020-02-07-23-54-18
-.. nonce: v-ue-v
-.. release date: 2020-02-17
-.. section: Security
-
-Add audit events to functions in `fcntl`, `msvcrt`, `os`, `resource`,
-`shutil`, `signal` and `syslog`.
-
-..
-
-.. bpo: 39619
-.. date: 2020-02-13-07-35-00
-.. nonce: inb_master_chroot
-.. section: Core and Builtins
-
-Enable use of :func:`os.chroot` on HP-UX systems.
-
-..
-
-.. bpo: 39606
-.. date: 2020-02-11-23-59-07
-.. nonce: a72Sxc
-.. section: Core and Builtins
-
-Fix regression caused by fix for bpo-39386, that prevented calling
-``aclose`` on an async generator that had already been closed or exhausted.
-
-..
-
-.. bpo: 39453
-.. date: 2020-01-25-23-51-17
-.. nonce: xCOkYk
-.. section: Core and Builtins
-
-Fixed a possible crash in :meth:`list.__contains__` when a list is changed
-during comparing items. Patch by Dong-hee Na.
-
-..
-
-.. bpo: 39219
-.. date: 2020-01-05-13-36-08
-.. nonce: uHtKd4
-.. section: Core and Builtins
-
-Syntax errors raised in the tokenizer now always set correct "text" and
-"offset" attributes.
-
-..
-
-.. bpo: 27657
-.. date: 2020-02-16-07-08-54
-.. nonce: 9atgcz
-.. section: Library
-
-The original fix for bpo-27657, "Fix urlparse() with numeric paths"
-(GH-16839) included in 3.8.1, inadvertently introduced a behavior change
-that broke several third-party packages relying on the original undefined
-parsing behavior. The change is reverted in 3.8.2, restoring the behavior of
-3.8.0 and earlier releases.
-
-..
-
-.. bpo: 39474
-.. date: 2020-02-12-12-01-26
-.. nonce: RZMEUH
-.. section: Library
-
-Fixed starting position of AST for expressions like ``(a)(b)``, ``(a)[b]``
-and ``(a).b``.
-
-..
-
-.. bpo: 21016
-.. date: 2020-02-12-10-04-39
-.. nonce: bFXPH7
-.. section: Library
-
-The :mod:`pydoc` and :mod:`trace` modules now use the :mod:`sysconfig`
-module to get the path to the Python standard library, to support uncommon
-installation path like ``/usr/lib64/python3.9/`` on Fedora. Patch by Jan
-Matějek.
-
-..
-
-.. bpo: 39595
-.. date: 2020-02-07-23-14-14
-.. nonce: DHwddE
-.. section: Library
-
-Improved performance of zipfile.Path for files with a large number of
-entries. Also improved performance and fixed minor issue as published with
-`importlib_metadata 1.5
-<https://importlib-metadata.readthedocs.io/en/latest/changelog%20(links).html#v1-5-0>`_.
-
-..
-
-.. bpo: 39600
-.. date: 2020-02-10-17-09-48
-.. nonce: X6NsyM
-.. section: IDLE
-
-In the font configuration window, remove duplicated font names.
diff --git a/Misc/NEWS.d/3.8.3.rst b/Misc/NEWS.d/3.8.3.rst
deleted file mode 100644
index 39a4417..0000000
--- a/Misc/NEWS.d/3.8.3.rst
+++ /dev/null
@@ -1,107 +0,0 @@
-.. bpo: 40527
-.. date: 2020-05-06-14-52-35
-.. nonce: gTNKuy
-.. release date: 2020-05-13
-.. section: Core and Builtins
-
-Fix command line argument parsing: no longer write errors multiple times
-into stderr.
-
-..
-
-.. bpo: 40417
-.. date: 2020-05-01-19-04-52
-.. nonce: Sti2lJ
-.. section: Core and Builtins
-
-Fix imp module deprecation warning when PyImport_ReloadModule is called.
-Patch by Robert Rouhani.
-
-..
-
-.. bpo: 39562
-.. date: 2020-05-01-14-58-16
-.. nonce: KCsX8n
-.. section: Core and Builtins
-
-The constant values of future flags in the :mod:`__future__` module are
-updated in order to prevent collision with compiler flags. Previously
-``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``.
-
-..
-
-.. bpo: 40559
-.. date: 2020-05-05-08-12-51
-.. nonce: 112wwa
-.. section: Library
-
-Fix possible memory leak in the C implementation of :class:`asyncio.Task`.
-
-..
-
-.. bpo: 40355
-.. date: 2020-05-02-14-24-48
-.. nonce: xTujaB
-.. section: Library
-
-Improve error reporting in :func:`ast.literal_eval` in the presence of
-malformed :class:`ast.Dict` nodes instead of silently ignoring any
-non-conforming elements. Patch by Curtis Bucher.
-
-..
-
-.. bpo: 40459
-.. date: 2020-05-02-04-29-31
-.. nonce: fSAYVD
-.. section: Library
-
-:func:`platform.win32_ver` now produces correct *ptype* strings instead of
-empty strings.
-
-..
-
-.. bpo: 40398
-.. date: 2020-04-26-22-25-36
-.. nonce: OdXnR3
-.. section: Library
-
-:func:`typing.get_args` now always returns an empty tuple for special
-generic aliases.
-
-..
-
-.. bpo: 40561
-.. date: 2020-05-08-08-39-40
-.. nonce: ZMB_2i
-.. section: Documentation
-
-Provide docstrings for webbrowser open functions.
-
-..
-
-.. bpo: 39435
-.. date: 2020-01-24-05-42-57
-.. nonce: EFcdFU
-.. section: Documentation
-
-Fix an incorrect signature for :func:`pickle.loads` in the docs
-
-..
-
-.. bpo: 40458
-.. date: 2020-05-01-20-57-57
-.. nonce: Eb0ueI
-.. section: Windows
-
-Increase reserved stack space to prevent overflow crash on Windows.
-
-..
-
-.. bpo: 40412
-.. date: 2020-05-01-17-28-04
-.. nonce: dE0D8N
-.. section: C API
-
-Nullify inittab_copy during finalization, preventing future interpreter
-initializations in an embedded situation from crashing. Patch by Gregory
-Szorc.
diff --git a/Misc/NEWS.d/3.8.3rc1.rst b/Misc/NEWS.d/3.8.3rc1.rst
deleted file mode 100644
index f07bf90..0000000
--- a/Misc/NEWS.d/3.8.3rc1.rst
+++ /dev/null
@@ -1,884 +0,0 @@
-.. bpo: 40121
-.. date: 2020-03-30-23-16-25
-.. nonce: p2LIio
-.. release date: 2020-04-29
-.. section: Security
-
-Fixes audit events raised on creating a new socket.
-
-..
-
-.. bpo: 38576
-.. date: 2020-03-14-14-57-44
-.. nonce: OowwQn
-.. section: Security
-
-Disallow control characters in hostnames in http.client, addressing
-CVE-2019-18348. Such potentially malicious header injection URLs now cause a
-InvalidURL to be raised.
-
-..
-
-.. bpo: 39503
-.. date: 2020-01-30-16-15-29
-.. nonce: B299Yq
-.. section: Security
-
-CVE-2020-8492: The :class:`~urllib.request.AbstractBasicAuthHandler` class
-of the :mod:`urllib.request` module uses an inefficient regular expression
-which can be exploited by an attacker to cause a denial of service. Fix the
-regex to prevent the catastrophic backtracking. Vulnerability reported by
-Ben Caller and Matt Schwager.
-
-..
-
-.. bpo: 20526
-.. date: 2020-03-23-18-08-34
-.. nonce: NHNZIv
-.. section: Core and Builtins
-
-Fix :c:func:`PyThreadState_Clear()`. ``PyThreadState.frame`` is a borrowed
-reference, not a strong reference: ``PyThreadState_Clear()`` must not call
-``Py_CLEAR(tstate->frame)``.
-
-..
-
-.. bpo: 39965
-.. date: 2020-03-15-03-52-01
-.. nonce: Od3ZdP
-.. section: Core and Builtins
-
-Correctly raise ``SyntaxError`` if *await* is used inside non-async
-functions and ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` is set (like in the asyncio
-REPL). Patch by Pablo Galindo.
-
-..
-
-.. bpo: 39562
-.. date: 2020-03-12-22-13-50
-.. nonce: E2u273
-.. section: Core and Builtins
-
-Allow executing asynchronous comprehensions on the top level when the
-``PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag is given. Patch by Batuhan Taskaya.
-
-..
-
-.. bpo: 38894
-.. date: 2020-03-06-21-04-39
-.. nonce: nfcGKv
-.. section: Core and Builtins
-
-Fix a bug that was causing incomplete results when calling
-``pathlib.Path.glob`` in the presence of symlinks that point to files where
-the user does not have read access. Patch by Pablo Galindo and Matt
-Wozniski.
-
-..
-
-.. bpo: 39871
-.. date: 2020-03-06-06-12-37
-.. nonce: dCAj_2
-.. section: Core and Builtins
-
-Fix a possible :exc:`SystemError` in ``math.{atan2,copysign,remainder}()``
-when the first argument cannot be converted to a :class:`float`. Patch by
-Zachary Spytz.
-
-..
-
-.. bpo: 39776
-.. date: 2020-03-02-20-12-33
-.. nonce: fNaxi_
-.. section: Core and Builtins
-
-Fix race condition where threads created by PyGILState_Ensure() could get a
-duplicate id.
-
-This affects consumers of tstate->id like the contextvar caching machinery,
-which could return invalid cached objects under heavy thread load (observed
-in embedded scenarios).
-
-..
-
-.. bpo: 39778
-.. date: 2020-03-02-19-21-21
-.. nonce: _YGLEc
-.. section: Core and Builtins
-
-Fixed a crash due to incorrect handling of weak references in
-``collections.OrderedDict`` classes. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 39520
-.. date: 2020-02-02-00-12-07
-.. nonce: uicBq6
-.. section: Core and Builtins
-
-Fix unparsing of ext slices with no items (``foo[:,]``). Patch by Batuhan
-Taskaya.
-
-..
-
-.. bpo: 22490
-.. date: 2018-09-23-16-32-58
-.. nonce: 8e0YDf
-.. section: Core and Builtins
-
-Don't leak environment variable ``__PYVENV_LAUNCHER__`` into the interpreter
-session on macOS.
-
-..
-
-.. bpo: 40138
-.. date: 2020-04-22-00-05-10
-.. nonce: i_oGqa
-.. section: Library
-
-Fix the Windows implementation of :func:`os.waitpid` for exit code larger
-than ``INT_MAX >> 8``. The exit status is now interpreted as an unsigned
-number.
-
-..
-
-.. bpo: 39942
-.. date: 2020-04-20-20-16-02
-.. nonce: NvGnTc
-.. section: Library
-
-Set "__main__" as the default module name when "__name__" is missing in
-:class:`typing.TypeVar`. Patch by Weipeng Hong.
-
-..
-
-.. bpo: 40330
-.. date: 2020-04-19-17-31-29
-.. nonce: DGjoIS
-.. section: Library
-
-In :meth:`ShareableList.__setitem__`, check the size of a new string item
-after encoding it to utf-8, not before.
-
-..
-
-.. bpo: 40287
-.. date: 2020-04-15-17-21-48
-.. nonce: -mkEJH
-.. section: Library
-
-Fixed ``SpooledTemporaryFile.seek()`` to return the position.
-
-..
-
-.. bpo: 40260
-.. date: 2020-04-12-21-18-56
-.. nonce: F6VWaE
-.. section: Library
-
-Ensure :mod:`modulefinder` uses :func:`io.open_code` and respects coding
-comments.
-
-..
-
-.. bpo: 40196
-.. date: 2020-04-06-11-05-13
-.. nonce: Jqowse
-.. section: Library
-
-Fix a bug in the :mod:`symtable` module that was causing incorrectly report
-global variables as local. Patch by Pablo Galindo.
-
-..
-
-.. bpo: 40126
-.. date: 2020-04-04-00-47-40
-.. nonce: Y-bTNP
-.. section: Library
-
-Fixed reverting multiple patches in unittest.mock. Patcher's ``__exit__()``
-is now never called if its ``__enter__()`` is failed. Returning true from
-``__exit__()`` silences now the exception.
-
-..
-
-.. bpo: 40089
-.. date: 2020-03-27-17-22-34
-.. nonce: -lFsD0
-.. section: Library
-
-Fix threading._after_fork(): if fork was not called by a thread spawned by
-threading.Thread, threading._after_fork() now creates a _MainThread instance
-for _main_thread, instead of a _DummyThread instance.
-
-..
-
-.. bpo: 39503
-.. date: 2020-03-25-16-02-16
-.. nonce: YmMbYn
-.. section: Library
-
-:class:`~urllib.request.AbstractBasicAuthHandler` of :mod:`urllib.request`
-now parses all WWW-Authenticate HTTP headers and accepts multiple challenges
-per header: use the realm of the first Basic challenge.
-
-..
-
-.. bpo: 40014
-.. date: 2020-03-23-17-52-00
-.. nonce: Ya70VG
-.. section: Library
-
-Fix ``os.getgrouplist()``: if ``getgrouplist()`` function fails because the
-group list is too small, retry with a larger group list. On failure, the
-glibc implementation of ``getgrouplist()`` sets ``ngroups`` to the total
-number of groups. For other implementations, double the group list size.
-
-..
-
-.. bpo: 40016
-.. date: 2020-03-19-19-40-27
-.. nonce: JWtxqJ
-.. section: Library
-
-In re docstring, clarify the relationship between inline and argument
-compile flags.
-
-..
-
-.. bpo: 39953
-.. date: 2020-03-19-16-33-03
-.. nonce: yy5lC_
-.. section: Library
-
-Update internal table of OpenSSL error codes in the ``ssl`` module.
-
-..
-
-.. bpo: 39360
-.. date: 2020-03-15-05-41-05
-.. nonce: cmcU5p
-.. section: Library
-
-Ensure all workers exit when finalizing a :class:`multiprocessing.Pool`
-implicitly via the module finalization handlers of multiprocessing. This
-fixes a deadlock situation that can be experienced when the Pool is not
-properly finalized via the context manager or a call to
-``multiprocessing.Pool.terminate``. Patch by Batuhan Taskaya and Pablo
-Galindo.
-
-..
-
-.. bpo: 39652
-.. date: 2020-03-11-23-08-25
-.. nonce: gbasrk
-.. section: Library
-
-The column name found in ``sqlite3.Cursor.description`` is now truncated on
-the first '[' only if the PARSE_COLNAMES option is set.
-
-..
-
-.. bpo: 39915
-.. date: 2020-03-10-19-38-47
-.. nonce: CjPeiY
-.. section: Library
-
-Ensure :attr:`unittest.mock.AsyncMock.await_args_list` has call objects in
-the order of awaited arguments instead of using
-:attr:`unittest.mock.Mock.call_args` which has the last value of the call.
-Patch by Karthikeyan Singaravelan.
-
-..
-
-.. bpo: 38662
-.. date: 2020-03-10-15-32-31
-.. nonce: o1DMXj
-.. section: Library
-
-The ``ensurepip`` module now invokes ``pip`` via the ``runpy`` module. Hence
-it is no longer tightly coupled with the internal API of the bundled ``pip``
-version, allowing easier updates to a newer ``pip`` version both internally
-and for distributors.
-
-..
-
-.. bpo: 39916
-.. date: 2020-03-09-18-56-27
-.. nonce: BHHyp3
-.. section: Library
-
-More reliable use of ``os.scandir()`` in ``Path.glob()``. It no longer emits
-a ResourceWarning when interrupted.
-
-..
-
-.. bpo: 39850
-.. date: 2020-03-09-01-45-06
-.. nonce: eaJNIE
-.. section: Library
-
-:mod:`multiprocessing` now supports abstract socket addresses (if abstract
-sockets are supported in the running platform). Patch by Pablo Galindo.
-
-..
-
-.. bpo: 39828
-.. date: 2020-03-05-00-57-49
-.. nonce: yWq9NJ
-.. section: Library
-
-Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Dong-hee Na.
-
-..
-
-.. bpo: 13487
-.. date: 2020-03-04-16-10-59
-.. nonce: gqe4Fb
-.. section: Library
-
-Avoid a possible *"RuntimeError: dictionary changed size during iteration"*
-from :func:`inspect.getmodule` when it tried to loop through
-:attr:`sys.modules`.
-
-..
-
-.. bpo: 39794
-.. date: 2020-02-29-19-17-39
-.. nonce: 7VjatS
-.. section: Library
-
-Add --without-decimal-contextvar build option.  This enables a thread-local
-rather than a coroutine local context.
-
-..
-
-.. bpo: 39769
-.. date: 2020-02-29-13-20-33
-.. nonce: hJmxu4
-.. section: Library
-
-The :func:`compileall.compile_dir` function's *ddir* parameter and the
-compileall command line flag `-d` no longer write the wrong pathname to the
-generated pyc file for submodules beneath the root of the directory tree
-being compiled.  This fixes a regression introduced with Python 3.5.
-
-..
-
-.. bpo: 39517
-.. date: 2020-02-29-11-20-50
-.. nonce: voQZb8
-.. section: Library
-
-Fix runpy.run_path() when using pathlike objects
-
-..
-
-.. bpo: 39764
-.. date: 2020-02-27-18-21-07
-.. nonce: wqPk68
-.. section: Library
-
-Fix AttributeError when calling get_stack on a PyAsyncGenObject Task
-
-..
-
-.. bpo: 30566
-.. date: 2020-02-24-03-45-28
-.. nonce: qROxty
-.. section: Library
-
-Fix :exc:`IndexError` when trying to decode an invalid string with punycode
-codec.
-
-..
-
-.. bpo: 39667
-.. date: 2020-02-17-22-38-15
-.. nonce: QuzEHH
-.. section: Library
-
-Correct performance degradation in ``zipfile.Path`` as found in zipp 3.0.
-While retaining compatibility, this change discourages the use of
-``zipfile.Path.open`` due to the signature change in Python 3.9. For
-compatibility across Python 3.8 and later versions, consider using
-``zipp.Path`` on Python 3.8.x and earlier.
-
-..
-
-.. bpo: 39548
-.. date: 2020-02-06-05-33-52
-.. nonce: DF4FFe
-.. section: Library
-
-Fix handling of header in :class:`urllib.request.AbstractDigestAuthHandler`
-when the optional ``qop`` parameter is not present.
-
-..
-
-.. bpo: 38971
-.. date: 2019-12-20-16-06-28
-.. nonce: fKRYlF
-.. section: Library
-
-Open issue in the BPO indicated a desire to make the implementation of
-codecs.open() at parity with io.open(), which implements a try/except to
-assure file stream gets closed before an exception is raised.
-
-..
-
-.. bpo: 38410
-.. date: 2019-10-09-08-14-25
-.. nonce: _YyoMV
-.. section: Library
-
-Properly handle :func:`sys.audit` failures in
-:func:`sys.set_asyncgen_hooks`. Based on patch by Zackery Spytz.
-
-..
-
-.. bpo: 36541
-.. date: 2019-06-18-19-38-27
-.. nonce: XI8mi1
-.. section: Library
-
-lib2to3 now recognizes named assignment expressions (the walrus operator,
-``:=``)
-
-..
-
-.. bpo: 31758
-.. date: 2017-10-14-21-02-40
-.. nonce: 563ZZb
-.. section: Library
-
-Prevent crashes when using an uninitialized ``_elementtree.XMLParser``
-object. Patch by Oren Milman.
-
-..
-
-.. bpo: 27635
-.. date: 2020-04-01-00-27-03
-.. nonce: VwxUty
-.. section: Documentation
-
-The pickle documentation incorrectly claimed that ``__new__`` isn't called
-by default when unpickling.
-
-..
-
-.. bpo: 39879
-.. date: 2020-03-16-18-12-02
-.. nonce: CnQ7Cv
-.. section: Documentation
-
-Updated :ref:`datamodel` docs to include :func:`dict` insertion order
-preservation. Patch by Furkan Onder and Samy Lahfa.
-
-..
-
-.. bpo: 39868
-.. date: 2020-03-05-16-29-03
-.. nonce: JQoHhO
-.. section: Documentation
-
-Updated the Language Reference for :pep:`572`.
-
-..
-
-.. bpo: 13790
-.. date: 2020-02-28-14-39-25
-.. nonce: hvLaRI
-.. section: Documentation
-
-Change 'string' to 'specification' in format doc.
-
-..
-
-.. bpo: 17422
-.. date: 2020-02-27-17-35-27
-.. nonce: eS1hVh
-.. section: Documentation
-
-The language reference no longer restricts default class namespaces to dicts
-only.
-
-..
-
-.. bpo: 39530
-.. date: 2020-02-23-13-26-40
-.. nonce: _bCvzQ
-.. section: Documentation
-
-Fix misleading documentation about mixed-type numeric comparisons.
-
-..
-
-.. bpo: 39718
-.. date: 2020-02-21-22-05-20
-.. nonce: xtBoSi
-.. section: Documentation
-
-Update :mod:`token` documentation to reflect additions in Python 3.8
-
-..
-
-.. bpo: 39677
-.. date: 2020-02-18-14-28-31
-.. nonce: vNHqoX
-.. section: Documentation
-
-Changed operand name of **MAKE_FUNCTION** from *argc* to *flags* for module
-:mod:`dis`
-
-..
-
-.. bpo: 38387
-.. date: 2019-10-06-23-44-15
-.. nonce: fZoq0S
-.. section: Documentation
-
-Document :c:macro:`PyDoc_STRVAR` macro in the C-API reference.
-
-..
-
-.. bpo: 40436
-.. date: 2020-04-29-16-08-24
-.. nonce: gDMnYl
-.. section: Tests
-
-test_gdb and test.pythoninfo now check gdb command exit code.
-
-..
-
-.. bpo: 40162
-.. date: 2020-04-03-02-40-16
-.. nonce: v3pQW_
-.. section: Tests
-
-Update Travis CI configuration to OpenSSL 1.1.1f.
-
-..
-
-.. bpo: 40146
-.. date: 2020-04-02-02-14-37
-.. nonce: J-Yo9G
-.. section: Tests
-
-Update OpenSSL to 1.1.1f in Azure Pipelines.
-
-..
-
-.. bpo: 40019
-.. date: 2020-03-20-00-30-36
-.. nonce: zOqHpQ
-.. section: Tests
-
-test_gdb now skips tests if it detects that gdb failed to read debug
-information because the Python binary is optimized.
-
-..
-
-.. bpo: 27807
-.. date: 2020-03-18-16-04-33
-.. nonce: 9gKjET
-.. section: Tests
-
-``test_site.test_startup_imports()`` is now skipped if a path of
-:data:`sys.path` contains a ``.pth`` file.
-
-..
-
-.. bpo: 39793
-.. date: 2020-02-29-12-58-17
-.. nonce: Og2SUN
-.. section: Tests
-
-Use the same domain when testing ``make_msgid``. Patch by Batuhan Taskaya.
-
-..
-
-.. bpo: 1812
-.. date: 2019-11-25-21-46-47
-.. nonce: sAbTbY
-.. section: Tests
-
-Fix newline handling in doctest.testfile when loading from a package whose
-loader has a get_data method. Patch by Peter Donis.
-
-..
-
-.. bpo: 37957
-.. date: 2019-10-30-00-01-43
-.. nonce: X1r78F
-.. section: Tests
-
-test.regrtest now can receive a list of test patterns to ignore (using the
--i/--ignore argument) or a file with a list of patterns to ignore (using the
---ignore-file argument). Patch by Pablo Galindo.
-
-..
-
-.. bpo: 38502
-.. date: 2019-10-17-00-49-38
-.. nonce: vUEic7
-.. section: Tests
-
-test.regrtest now uses process groups in the multiprocessing mode (-jN
-command line option) if process groups are available: if :func:`os.setsid`
-and :func:`os.killpg` functions are available.
-
-..
-
-.. bpo: 38360
-.. date: 2020-04-22-02-33-54
-.. nonce: 74C68u
-.. section: Build
-
-Support single-argument form of macOS -isysroot flag.
-
-..
-
-.. bpo: 40204
-.. date: 2020-04-09-00-19-10
-.. nonce: K-S6RZ
-.. section: Build
-
-Pin Sphinx version to 1.8.2 in ``Doc/Makefile``.
-
-..
-
-.. bpo: 40158
-.. date: 2020-04-03-17-54-33
-.. nonce: MWUTs4
-.. section: Build
-
-Fix CPython MSBuild Properties in NuGet Package (build/native/python.props)
-
-..
-
-.. bpo: 38527
-.. date: 2020-03-28-10-43-09
-.. nonce: fqCRgD
-.. section: Build
-
-Fix configure check on Solaris for "float word ordering": sometimes, the
-correct "grep" command was not being used. Patch by Arnon Yaari.
-
-..
-
-.. bpo: 40164
-.. date: 2020-04-04-13-13-44
-.. nonce: SPrSn5
-.. section: Windows
-
-Updates Windows to OpenSSL 1.1.1f
-
-..
-
-.. bpo: 39930
-.. date: 2020-03-11-10-15-56
-.. nonce: LGHw1j
-.. section: Windows
-
-Ensures the required :file:`vcruntime140.dll` is included in install
-packages.
-
-..
-
-.. bpo: 39847
-.. date: 2020-03-04-17-05-11
-.. nonce: C3N2m3
-.. section: Windows
-
-Avoid hang when computer is hibernated whilst waiting for a mutex (for
-lock-related objects from :mod:`threading`) around 49-day uptime.
-
-..
-
-.. bpo: 38597
-.. date: 2020-03-01-15-04-54
-.. nonce: MnHdYl
-.. section: Windows
-
-:mod:`distutils` will no longer statically link :file:`vcruntime140.dll`
-when a redistributable version is unavailable. All future releases of
-CPython will include a copy of this DLL to ensure distributed extensions can
-continue to load.
-
-..
-
-.. bpo: 38380
-.. date: 2020-02-28-23-51-27
-.. nonce: TpOBCj
-.. section: Windows
-
-Update Windows builds to use SQLite 3.31.1
-
-..
-
-.. bpo: 39789
-.. date: 2020-02-28-22-46-09
-.. nonce: 67XRoP
-.. section: Windows
-
-Update Windows release build machines to Visual Studio 2019 (MSVC 14.2).
-
-..
-
-.. bpo: 34803
-.. date: 2020-02-25-18-43-34
-.. nonce: S3VcS0
-.. section: Windows
-
-Package for nuget.org now includes repository reference and bundled icon
-image.
-
-..
-
-.. bpo: 40164
-.. date: 2020-04-21-19-46-35
-.. nonce: 6HA6IC
-.. section: macOS
-
-Update macOS installer builds to use OpenSSL 1.1.1g.
-
-..
-
-.. bpo: 38380
-.. date: 2020-02-28-23-51-47
-.. nonce: u-ySyA
-.. section: macOS
-
-Update macOS builds to use SQLite 3.31.1
-
-..
-
-.. bpo: 27115
-.. date: 2020-03-09-02-45-12
-.. nonce: 8hSHMo
-.. section: IDLE
-
-For 'Go to Line', use a Query box subclass with IDLE standard behavior and
-improved error checking.
-
-..
-
-.. bpo: 39885
-.. date: 2020-03-08-14-27-36
-.. nonce: 29ERiR
-.. section: IDLE
-
-Since clicking to get an IDLE context menu moves the cursor, any text
-selection should be and now is cleared.
-
-..
-
-.. bpo: 39852
-.. date: 2020-03-06-01-55-14
-.. nonce: QjA1qF
-.. section: IDLE
-
-Edit "Go to line" now clears any selection, preventing accidental deletion.
-It also updates Ln and Col on the status bar.
-
-..
-
-.. bpo: 39781
-.. date: 2020-02-27-22-17-09
-.. nonce: bbYBeL
-.. section: IDLE
-
-Selecting code context lines no longer causes a jump.
-
-..
-
-.. bpo: 38439
-.. date: 2019-12-05-14-20-53
-.. nonce: j_L2PI
-.. section: IDLE
-
-Add a 256×256 pixel IDLE icon to support more modern environments. Created
-by Andrew Clover. Delete the unused macOS idle.icns icon file.
-
-..
-
-.. bpo: 38689
-.. date: 2019-11-14-12-59-19
-.. nonce: Lgfxva
-.. section: IDLE
-
-IDLE will no longer freeze when inspect.signature fails when fetching a
-calltip.
-
-..
-
-.. bpo: 40179
-.. date: 2020-04-04-19-35-22
-.. nonce: u9FH10
-.. section: Tools/Demos
-
-Fixed translation of ``#elif`` in Argument Clinic.
-
-..
-
-.. bpo: 36184
-.. date: 2020-03-09-13-28-13
-.. nonce: BMPJ0D
-.. section: Tools/Demos
-
-Port python-gdb.py to FreeBSD. python-gdb.py now checks for "take_gil"
-function name to check if a frame tries to acquire the GIL, instead of
-checking for "pthread_cond_timedwait" which is specific to Linux and can be
-a different condition than the GIL.
-
-..
-
-.. bpo: 39889
-.. date: 2020-03-07-18-01-30
-.. nonce: l1czT6
-.. section: Tools/Demos
-
-Fixed ``unparse.py`` for extended slices containing a single element (e.g.
-``a[i:j,]``). Remove redundant tuples when index with a tuple (e.g. ``a[i,
-j]``).
-
-..
-
-.. bpo: 35370
-.. date: 2020-03-13-16-44-23
-.. nonce: sXRA-r
-.. section: C API
-
-If :c:func:`PySys_Audit` fails in :c:func:`PyEval_SetProfile` or
-:c:func:`PyEval_SetTrace`, log the error as an unraisable exception.
-
-..
-
-.. bpo: 39884
-.. date: 2020-03-12-00-27-26
-.. nonce: CGOJBO
-.. section: C API
-
-:c:func:`PyDescr_NewMethod` and :c:func:`PyCFunction_NewEx` now include the
-method name in the SystemError "bad call flags" error message to ease debug.
-
-..
-
-.. bpo: 38643
-.. date: 2020-03-08-22-56-22
-.. nonce: k2ixx6
-.. section: C API
-
-:c:func:`PyNumber_ToBase` now raises a :exc:`SystemError` instead of
-crashing when called with invalid base.
-
-..
-
-.. bpo: 38913
-.. date: 2020-02-25-20-10-34
-.. nonce: siF1lS
-.. section: C API
-
-Fixed segfault in ``Py_BuildValue()`` called with a format containing "#"
-and undefined PY_SSIZE_T_CLEAN whwn an exception is set.
diff --git a/Misc/NEWS.d/3.8.4.rst b/Misc/NEWS.d/3.8.4.rst
deleted file mode 100644
index 4e0c372..0000000
--- a/Misc/NEWS.d/3.8.4.rst
+++ /dev/null
@@ -1,130 +0,0 @@
-.. bpo: 41162
-.. date: 2020-07-03-20-41-29
-.. nonce: tb8pVj
-.. release date: 2020-07-13
-.. section: Security
-
-Audit hooks are now cleared later during finalization to avoid missing
-events.
-
-..
-
-.. bpo: 29778
-.. date: 2020-07-03-17-21-37
-.. nonce: cR_fGS
-.. section: Security
-
-Ensure :file:`python3.dll` is loaded from correct locations when Python is
-embedded (CVE-2020-15523).
-
-..
-
-.. bpo: 41247
-.. date: 2020-07-08-22-03-54
-.. nonce: PndYIk
-.. section: Core and Builtins
-
-Always cache the running loop holder when running
-``asyncio.set_running_loop``.
-
-..
-
-.. bpo: 41252
-.. date: 2020-07-08-21-55-23
-.. nonce: nBWL-Y
-.. section: Core and Builtins
-
-Fix incorrect refcounting in _ssl.c's ``_servername_callback()``.
-
-..
-
-.. bpo: 41218
-.. date: 2020-07-06-13-35-17
-.. nonce: oKnSr2
-.. section: Core and Builtins
-
-Python 3.8.3 had a regression where compiling with
-ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list comprehension
-with CO_COROUTINE. Now only list comprehension making use of async/await
-will tagged as so.
-
-..
-
-.. bpo: 41175
-.. date: 2020-06-30-20-17-31
-.. nonce: acJoXB
-.. section: Core and Builtins
-
-Guard against a NULL pointer dereference within bytearrayobject triggered by
-the ``bytearray() + bytearray()`` operation.
-
-..
-
-.. bpo: 39960
-.. date: 2020-06-23-18-32-41
-.. nonce: Kez3fP
-.. section: Core and Builtins
-
-The "hackcheck" that prevents sneaking around a type's __setattr__() by
-calling the superclass method was rewritten to allow C implemented heap
-types.
-
-..
-
-.. bpo: 41235
-.. date: 2020-07-07-21-56-26
-.. nonce: H2csMU
-.. section: Library
-
-Fix the error handling in :meth:`ssl.SSLContext.load_dh_params`.
-
-..
-
-.. bpo: 41193
-.. date: 2020-07-02-11-53-45
-.. nonce: 8-Tnql
-.. section: Library
-
-The ``write_history()`` atexit function of the readline completer now
-ignores any :exc:`OSError` to ignore error if the filesystem is read-only,
-instead of only ignoring :exc:`FileNotFoundError` and
-:exc:`PermissionError`.
-
-..
-
-.. bpo: 41043
-.. date: 2020-06-20-00-19-30
-.. nonce: p-Pk-H
-.. section: Library
-
-Fixed the use of :func:`~glob.glob` in the stdlib: literal part of the path
-is now always correctly escaped.
-
-..
-
-.. bpo: 39384
-.. date: 2020-05-30-12-44-29
-.. nonce: Iqxy3q
-.. section: Library
-
-Fixed email.contentmanager to allow set_content() to set a null string.
-
-..
-
-.. bpo: 37765
-.. date: 2020-07-07-18-44-30
-.. nonce: umc1o8
-.. section: IDLE
-
-Add keywords to module name completion list.  Rewrite Completions section of
-IDLE doc.
-
-..
-
-.. bpo: 41152
-.. date: 2020-06-29-14-51-15
-.. nonce: d6mV0C
-.. section: IDLE
-
-The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE is now always
-UTF-8.
diff --git a/Misc/NEWS.d/3.8.4rc1.rst b/Misc/NEWS.d/3.8.4rc1.rst
deleted file mode 100644
index 1f7cb96..0000000
--- a/Misc/NEWS.d/3.8.4rc1.rst
+++ /dev/null
@@ -1,637 +0,0 @@
-.. bpo: 41004
-.. date: 2020-06-29-16-02-29
-.. nonce: ovF0KZ
-.. release date: 2020-06-29
-.. section: Security
-
-The __hash__() methods of  ipaddress.IPv4Interface and
-ipaddress.IPv6Interface incorrectly generated constant hash values of 32 and
-128 respectively. This resulted in always causing hash collisions. The fix
-uses hash() to generate hash values for the tuple of (address, mask length,
-network address).
-
-..
-
-.. bpo: 39073
-.. date: 2020-03-15-01-28-36
-.. nonce: 6Szd3i
-.. section: Security
-
-Disallow CR or LF in email.headerregistry.Address arguments to guard against
-header injection attacks.
-
-..
-
-.. bpo: 41094
-.. date: 2020-06-23-23-26-42
-.. nonce: zEIJse
-.. section: Core and Builtins
-
-Fix decoding errors with audit when open files with non-ASCII names on
-non-UTF-8 locale.
-
-..
-
-.. bpo: 41056
-.. date: 2020-06-21-19-53-33
-.. nonce: IDu_EK
-.. section: Core and Builtins
-
-Fixes a reference to deallocated stack space during startup when
-constructing sys.path involving a relative symlink when code was supplied
-via -c.  (discovered via Coverity)
-
-..
-
-.. bpo: 35975
-.. date: 2020-06-20-17-21-07
-.. nonce: UDHCHp
-.. section: Core and Builtins
-
-Stefan Behnel reported that cf_feature_version is used even when
-PyCF_ONLY_AST is not set. This is against the intention and against the
-documented behavior, so it's been fixed.
-
-..
-
-.. bpo: 40957
-.. date: 2020-06-12-12-21-54
-.. nonce: Z8n6I6
-.. section: Core and Builtins
-
-Fix refleak in _Py_fopen_obj() when PySys_Audit() fails
-
-..
-
-.. bpo: 40870
-.. date: 2020-06-05-12-48-28
-.. nonce: 9cd2sk
-.. section: Core and Builtins
-
-Raise :exc:`ValueError` when validating custom AST's where the constants
-``True``, ``False`` and ``None`` are used within a :class:`ast.Name` node.
-
-..
-
-.. bpo: 40826
-.. date: 2020-06-01-20-31-07
-.. nonce: XCI4M2
-.. section: Core and Builtins
-
-Fix GIL usage in :c:func:`PyOS_Readline`: lock the GIL to set an exception
-and pass the Python thread state when checking if there is a pending signal.
-
-..
-
-.. bpo: 40824
-.. date: 2020-05-30-14-37-18
-.. nonce: XR3V5s
-.. section: Core and Builtins
-
-Unexpected errors in calling the ``__iter__`` method are no longer masked by
-``TypeError`` in the :keyword:`in` operator and functions
-:func:`~operator.contains`, :func:`~operator.indexOf` and
-:func:`~operator.countOf` of the :mod:`operator` module.
-
-..
-
-.. bpo: 40663
-.. date: 2020-05-17-20-38-12
-.. nonce: u2aiZf
-.. section: Core and Builtins
-
-Correctly generate annotations where parentheses are omitted but required
-(e.g: ``Type[(str, int, *other))]``.
-
-..
-
-.. bpo: 41138
-.. date: 2020-06-27-13-51-36
-.. nonce: bIpf7g
-.. section: Library
-
-Fixed the :mod:`trace` module CLI for Python source files with non-UTF-8
-encoding.
-
-..
-
-.. bpo: 31938
-.. date: 2020-06-22-20-08-40
-.. nonce: EVuko9
-.. section: Library
-
-Fix default-value signatures of several functions in the :mod:`select`
-module - by Anthony Sottile.
-
-..
-
-.. bpo: 41068
-.. date: 2020-06-22-10-25-39
-.. nonce: _bX2BW
-.. section: Library
-
-Fixed reading files with non-ASCII names from ZIP archive directly after
-writing them.
-
-..
-
-.. bpo: 41058
-.. date: 2020-06-20-21-03-55
-.. nonce: gztdZy
-.. section: Library
-
-:func:`pdb.find_function` now correctly determines the source file encoding.
-
-..
-
-.. bpo: 41056
-.. date: 2020-06-20-18-35-43
-.. nonce: Garcle
-.. section: Library
-
-Fix a NULL pointer dereference within the ssl module during a MemoryError in
-the keylog callback. (discovered by Coverity)
-
-..
-
-.. bpo: 41048
-.. date: 2020-06-20-10-16-57
-.. nonce: hEXB-B
-.. section: Library
-
-:func:`mimetypes.read_mime_types` function reads the rule file using UTF-8
-encoding, not the locale encoding. Patch by Srinivas Reddy Thatiparthy.
-
-..
-
-.. bpo: 40448
-.. date: 2020-06-15-12-22-53
-.. nonce: 1dk8Bu
-.. section: Library
-
-:mod:`ensurepip` now disables the use of `pip` cache when installing the
-bundled versions of `pip` and `setuptools`.  Patch by Krzysztof Konopko.
-
-..
-
-.. bpo: 40855
-.. date: 2020-06-12-10-44-15
-.. nonce: jSot83
-.. section: Library
-
-The standard deviation and variance functions in the statistics module were
-ignoring their mu and xbar arguments.
-
-..
-
-.. bpo: 40807
-.. date: 2020-06-04-16-25-15
-.. nonce: yYyLWx
-.. section: Library
-
-Stop codeop._maybe_compile, used by code.InteractiveInterpreter (and IDLE).
-from from emitting each warning three times.
-
-..
-
-.. bpo: 40834
-.. date: 2020-05-31-15-52-18
-.. nonce: MO9_hb
-.. section: Library
-
-Fix truncate when sending str object with_xxsubinterpreters.channel_send.
-
-..
-
-.. bpo: 38488
-.. date: 2020-05-28-16-51-00
-.. nonce: hFQNgA
-.. section: Library
-
-Update ensurepip to install pip 20.1.1 and setuptools 47.1.0.
-
-..
-
-.. bpo: 40767
-.. date: 2020-05-27-21-27-01
-.. nonce: L5MnVV
-.. section: Library
-
-:mod:`webbrowser` now properly finds the default browser in pure Wayland
-systems by checking the WAYLAND_DISPLAY environment variable. Patch
-contributed by Jérémy Attali.
-
-..
-
-.. bpo: 40795
-.. date: 2020-05-27-17-00-18
-.. nonce: eZSnHA
-.. section: Library
-
-:mod:`ctypes` module: If ctypes fails to convert the result of a callback or
-if a ctypes callback function raises an exception, sys.unraisablehook is now
-called with an exception set. Previously, the error was logged into stderr
-by :c:func:`PyErr_Print`.
-
-..
-
-.. bpo: 30008
-.. date: 2020-05-25-22-18-38
-.. nonce: CKC3td
-.. section: Library
-
-Fix :mod:`ssl` code to be compatible with OpenSSL 1.1.x builds that use
-``no-deprecated`` and ``--api=1.1.0``.
-
-..
-
-.. bpo: 40614
-.. date: 2020-05-18-22-41-02
-.. nonce: 8j3kmq
-.. section: Library
-
-:func:`ast.parse` will not parse self documenting expressions in f-strings
-when passed ``feature_version`` is less than ``(3, 8)``.
-
-..
-
-.. bpo: 40626
-.. date: 2020-05-18-17-29-30
-.. nonce: NeZufF
-.. section: Library
-
-Add h5 file extension as MIME Type application/x-hdf5, as per HDF Group
-recommendation for HDF5 formatted data files. Patch contributed by Mark
-Schwab.
-
-..
-
-.. bpo: 25872
-.. date: 2020-05-14-13-25-36
-.. nonce: 5D5538
-.. section: Library
-
-:mod:`linecache` could crash with a :exc:`KeyError` when accessed from
-multiple threads. Fix by Michael Graczyk.
-
-..
-
-.. bpo: 40597
-.. date: 2020-05-11-19-17-23
-.. nonce: 4SGfgm
-.. section: Library
-
-If text content lines are longer than policy.max_line_length, always use a
-content-encoding to make sure they are wrapped.
-
-..
-
-.. bpo: 40515
-.. date: 2020-05-06-13-51-19
-.. nonce: TUCvYB
-.. section: Library
-
-The :mod:`ssl` and :mod:`hashlib` modules now actively check that OpenSSL is
-build with thread support. Python 3.7.0 made thread support mandatory and no
-longer works safely with a no-thread builds.
-
-..
-
-.. bpo: 13097
-.. date: 2020-05-06-02-01-25
-.. nonce: Wh5xSK
-.. section: Library
-
-``ctypes`` now raises an ``ArgumentError`` when a callback is invoked with
-more than 1024 arguments.
-
-..
-
-.. bpo: 40457
-.. date: 2020-05-02-17-17-37
-.. nonce: EXReI1
-.. section: Library
-
-The ssl module now support OpenSSL builds without TLS 1.0 and 1.1 methods.
-
-..
-
-.. bpo: 39830
-.. date: 2020-03-23-05-21-13
-.. nonce: IkqU1Y
-.. section: Library
-
-Add :class:`zipfile.Path` to ``__all__`` in the :mod:`zipfile` module.
-
-..
-
-.. bpo: 40025
-.. date: 2020-03-21-05-26-38
-.. nonce: DTLtyq
-.. section: Library
-
-Raise TypeError when _generate_next_value_ is defined after members. Patch
-by Ethan Onstott.
-
-..
-
-.. bpo: 39244
-.. date: 2020-02-23-15-09-47
-.. nonce: aBK5IM
-.. section: Library
-
-Fixed :class:`multiprocessing.context.get_all_start_methods` to properly
-return the default method first on macOS.
-
-..
-
-.. bpo: 39040
-.. date: 2019-12-15-18-47-20
-.. nonce: tKa0Qs
-.. section: Library
-
-Fix parsing of invalid mime headers parameters by collapsing whitespace
-between encoded words in a bare-quote-string.
-
-..
-
-.. bpo: 35714
-.. date: 2019-10-25-23-45-49
-.. nonce: fw3xb7
-.. section: Library
-
-:exc:`struct.error` is now raised if there is a null character in a
-:mod:`struct` format string.
-
-..
-
-.. bpo: 36290
-.. date: 2019-03-17-19-01-53
-.. nonce: 7VXo_K
-.. section: Library
-
-AST nodes are now raising :exc:`TypeError` on conflicting keyword arguments.
-Patch contributed by Rémi Lapeyre.
-
-..
-
-.. bpo: 29620
-.. date: 2018-08-21-16-20-33
-.. nonce: xxx666
-.. section: Library
-
-:func:`~unittest.TestCase.assertWarns` no longer raises a
-``RuntimeException`` when accessing a module's ``__warningregistry__``
-causes importation of a new module, or when a new module is imported in
-another thread. Patch by Kernc.
-
-..
-
-.. bpo: 34226
-.. date: 2018-07-29-12-14-54
-.. nonce: BE7zbu
-.. section: Library
-
-Fix `cgi.parse_multipart` without content_length. Patch by Roger Duran
-
-..
-
-.. bpo: 41085
-.. date: 2020-06-23-12-02-45
-.. nonce: JZKsyz
-.. section: Tests
-
-Fix integer overflow in the :meth:`array.array.index` method on 64-bit
-Windows for index larger than ``2**31``.
-
-..
-
-.. bpo: 38377
-.. date: 2020-06-17-18-00-21
-.. nonce: jfg4TH
-.. section: Tests
-
-On Linux, skip tests using multiprocessing if the current user cannot create
-a file in ``/dev/shm/`` directory. Add the
-:func:`~test.support.skip_if_broken_multiprocessing_synchronize` function to
-the :mod:`test.support` module.
-
-..
-
-.. bpo: 41009
-.. date: 2020-06-17-17-27-07
-.. nonce: Rvn6OQ
-.. section: Tests
-
-Fix use of ``support.require_{linux|mac|freebsd}_version()`` decorators as
-class decorator.
-
-..
-
-.. bpo: 41003
-.. date: 2020-06-17-15-07-14
-.. nonce: tiH_Fy
-.. section: Tests
-
-Fix ``test_copyreg`` when ``numpy`` is installed: ``test.pickletester`` now
-saves/restores warnings filters when importing ``numpy``, to ignore filters
-installed by ``numpy``.
-
-..
-
-.. bpo: 40964
-.. date: 2020-06-12-20-46-23
-.. nonce: OBzf2c
-.. section: Tests
-
-Disable remote :mod:`imaplib` tests, host cyrus.andrew.cmu.edu is blocking
-incoming connections.
-
-..
-
-.. bpo: 40055
-.. date: 2020-05-15-01-21-44
-.. nonce: Xp4aP9
-.. section: Tests
-
-distutils.tests now saves/restores warnings filters to leave them unchanged.
-Importing tests imports docutils which imports pkg_resources which adds a
-warnings filter.
-
-..
-
-.. bpo: 34401
-.. date: 2018-08-20-09-38-52
-.. nonce: eGxMPm
-.. section: Tests
-
-Make test_gdb properly run on HP-UX. Patch by Michael Osipov.
-
-..
-
-.. bpo: 40204
-.. date: 2020-06-25-06-59-13
-.. nonce: GpD04D
-.. section: Build
-
-Pin Sphinx version to 2.3.1 in ``Doc/Makefile``.
-
-..
-
-.. bpo: 40653
-.. date: 2020-05-17-03-33-00
-.. nonce: WI8UGn
-.. section: Build
-
-Move _dirnameW out of HAVE_SYMLINK to fix a potential compiling issue.
-
-..
-
-.. bpo: 41074
-.. date: 2020-06-24-21-30-42
-.. nonce: gaQc3C
-.. section: Windows
-
-Fixed support of non-ASCII names in functions :func:`msilib.OpenDatabase`
-and :func:`msilib.init_database` and non-ASCII SQL in method
-:meth:`msilib.Database.OpenView`.
-
-..
-
-.. bpo: 40164
-.. date: 2020-06-12-13-13-44
-.. nonce: SPrSn5
-.. section: Windows
-
-Updates Windows OpenSSL to 1.1.1g
-
-..
-
-.. bpo: 39631
-.. date: 2020-05-19-14-43-33
-.. nonce: Z5yXam
-.. section: Windows
-
-Changes the registered MIME type for ``.py`` files on Windows to
-``text/x-python`` instead of ``text/plain``.
-
-..
-
-.. bpo: 40677
-.. date: 2020-05-19-04-11-12
-.. nonce: qQbLW8
-.. section: Windows
-
-Manually define IO_REPARSE_TAG_APPEXECLINK in case some old Windows SDK
-doesn't have it.
-
-..
-
-.. bpo: 40650
-.. date: 2020-05-17-00-08-13
-.. nonce: 4euMtU
-.. section: Windows
-
-Include winsock2.h in pytime.c for timeval.
-
-..
-
-.. bpo: 39148
-.. date: 2020-03-23-19-07-55
-.. nonce: W1YJEb
-.. section: Windows
-
-Add IPv6 support to :mod:`asyncio` datagram endpoints in ProactorEventLoop.
-Change the raised exception for unknown address families to ValueError as
-it's not coming from Windows API.
-
-..
-
-.. bpo: 39580
-.. date: 2020-06-25-06-09-00
-.. nonce: N_vJ9h
-.. section: macOS
-
-Avoid opening Finder window if running installer from the command line.
-Patch contributed by Rick Heil.
-
-..
-
-.. bpo: 41100
-.. date: 2020-06-24-13-51-57
-.. nonce: mcHdc5
-.. section: macOS
-
-Fix configure error when building on macOS 11. Note that the current Python
-release was released shortly after the first developer preview of macOS 11
-(Big Sur); there are other known issues with building and running on the
-developer preview. Big Sur is expected to be fully supported in a future
-bugfix release of Python 3.8.x and with 3.9.0.
-
-..
-
-.. bpo: 41005
-.. date: 2020-06-17-13-45-15
-.. nonce: zZegdV
-.. section: macOS
-
-fixed an XDG settings issue not allowing macos to open browser in
-webbrowser.py
-
-..
-
-.. bpo: 40741
-.. date: 2020-06-07-20-10-56
-.. nonce: 80A2BW
-.. section: macOS
-
-Update macOS installer to use SQLite 3.32.2.
-
-..
-
-.. bpo: 41144
-.. date: 2020-06-27-17-02-00
-.. nonce: JoFGIX
-.. section: IDLE
-
-Make Open Module open a special module such as os.path.
-
-..
-
-.. bpo: 39885
-.. date: 2020-05-29-18-21-58
-.. nonce: zB_-bN
-.. section: IDLE
-
-Make context menu Cut and Copy work again when right-clicking within a
-selection.
-
-..
-
-.. bpo: 40723
-.. date: 2020-05-24-06-19-43
-.. nonce: AJLd4U
-.. section: IDLE
-
-Make test_idle pass when run after import.
-
-..
-
-.. bpo: 40479
-.. date: 2020-05-15-17-48-25
-.. nonce: B1gBl-
-.. section: Tools/Demos
-
-Update multissltest helper to test with latest OpenSSL 1.0.2, 1.1.0, 1.1.1,
-and 3.0.0-alpha.
-
-..
-
-.. bpo: 40163
-.. date: 2020-04-03-08-32-31
-.. nonce: lX8K4B
-.. section: Tools/Demos
-
-Fix multissltest tool. OpenSSL has changed download URL for old releases.
-The multissltest tool now tries to download from current and old download
-URLs.
diff --git a/Misc/NEWS.d/3.8.5.rst b/Misc/NEWS.d/3.8.5.rst
deleted file mode 100644
index e7ca483..0000000
--- a/Misc/NEWS.d/3.8.5.rst
+++ /dev/null
@@ -1,88 +0,0 @@
-.. bpo: 41304
-.. date: 2020-07-15-20-15-08
-.. nonce: vNEeYA
-.. release date: 2020-07-20
-.. section: Security
-
-Fixes `python3x._pth` being ignored on Windows, caused by the fix for
-:issue:`29778` (CVE-2020-15801).
-
-..
-
-.. bpo: 39603
-.. date: 2020-02-12-14-17-39
-.. nonce: Gt3RSg
-.. section: Security
-
-Prevent http header injection by rejecting control characters in
-http.client.putrequest(...).
-
-..
-
-.. bpo: 41295
-.. date: 2020-07-18-08-15-32
-.. nonce: pu8Ezo
-.. section: Core and Builtins
-
-Resolve a regression in CPython 3.8.4 where defining "__setattr__" in a
-multi-inheritance setup and calling up the hierarchy chain could fail if
-builtins/extension types were involved in the base types.
-
-..
-
-.. bpo: 41288
-.. date: 2020-07-13-15-06-35
-.. nonce: 8mn5P-
-.. section: Library
-
-Unpickling invalid NEWOBJ_EX opcode with the C implementation raises now
-UnpicklingError instead of crashing.
-
-..
-
-.. bpo: 39017
-.. date: 2020-07-12-22-16-58
-.. nonce: x3Cg-9
-.. section: Library
-
-Avoid infinite loop when reading specially crafted TAR files using the
-tarfile module (CVE-2019-20907).
-
-..
-
-.. bpo: 37703
-.. date: 2019-08-16-20-25-42
-.. nonce: Qm_l_H
-.. section: Documentation
-
-Updated Documentation to comprehensively elaborate on the behaviour of
-gather.cancel()
-
-..
-
-.. bpo: 41302
-.. date: 2020-07-15-17-56-32
-.. nonce: S3o-x9
-.. section: Build
-
-Enable building Python 3.8 with libmpdec-2.5.0 to ease maintenance for Linux
-distributions. Patch by Felix Yan.
-
-..
-
-.. bpo: 40741
-.. date: 2020-06-19-14-19-08
-.. nonce: L7yTbm
-.. section: macOS
-
-Update macOS installer to use SQLite 3.32.3.
-
-..
-
-.. bpo: 41300
-.. date: 2020-07-16-17-39-06
-.. nonce: wRixNb
-.. section: IDLE
-
-Save files with non-ascii chars. Fix regression released in 3.9.0b4 and
-3.8.4.
diff --git a/Misc/NEWS.d/3.9.0.rst b/Misc/NEWS.d/3.9.0.rst
new file mode 100644
index 0000000..5358b01
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0.rst
@@ -0,0 +1,57 @@
+.. bpo: 41815
+.. date: 2020-09-19-23-14-54
+.. nonce: RNpuX3
+.. release date: 2020-10-04
+.. section: Library
+
+Fix SQLite3 segfault when backing up closed database. Patch contributed by
+Peter David McCormick.
+
+..
+
+.. bpo: 41662
+.. date: 2020-08-30-21-38-57
+.. nonce: 6e9iZn
+.. section: Library
+
+No longer override exceptions raised in ``__len__()`` of a sequence of
+parameters in :mod:`sqlite3` with :exc:`~sqlite3.ProgrammingError`.
+
+..
+
+.. bpo: 41662
+.. date: 2020-08-29-16-07-36
+.. nonce: Mn79zh
+.. section: Library
+
+Fixed crash when mutate list of parameters during iteration in
+:mod:`sqlite3`.
+
+..
+
+.. bpo: 39728
+.. date: 2020-02-24-10-58-34
+.. nonce: kOOaHn
+.. section: Library
+
+fix default `_missing_` so a duplicate `ValueError` is not set as the
+`__context__` of the original `ValueError`
+
+..
+
+.. bpo: 41602
+.. date: 2020-08-25-19-25-36
+.. nonce: Z64s0I
+.. section: Tests
+
+Add tests for SIGINT handling in the runpy module.
+
+..
+
+.. bpo: 38249
+.. date: 2020-09-28-21-56-51
+.. nonce: uzMCaZ
+.. section: Build
+
+Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() if only the
+compiler is able to use it. Patch by Dong-hee Na.
diff --git a/Misc/NEWS.d/3.9.0a1.rst b/Misc/NEWS.d/3.9.0a1.rst
new file mode 100644
index 0000000..fe9fc58
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a1.rst
@@ -0,0 +1,5772 @@
+.. bpo: 38722
+.. date: 2019-11-18-16-17-56
+.. nonce: x3mECW
+.. release date: 2019-11-19
+.. section: Security
+
+:mod:`runpy` now uses :meth:`io.open_code` to open code files. Patch by
+Jason Killen.
+
+..
+
+.. bpo: 38622
+.. date: 2019-11-14-16-13-23
+.. nonce: 3DYkfb
+.. section: Security
+
+Add additional audit events for the :mod:`ctypes` module.
+
+..
+
+.. bpo: 38418
+.. date: 2019-10-08-19-29-55
+.. nonce: QL7s0-
+.. section: Security
+
+Fixes audit event for :func:`os.system` to be named ``os.system``.
+
+..
+
+.. bpo: 38243
+.. date: 2019-09-25-13-21-09
+.. nonce: 1pfz24
+.. section: Security
+
+Escape the server title of :class:`xmlrpc.server.DocXMLRPCServer` when
+rendering the document page as HTML. (Contributed by Dong-hee Na in
+:issue:`38243`.)
+
+..
+
+.. bpo: 38174
+.. date: 2019-09-23-21-02-46
+.. nonce: MeWuJd
+.. section: Security
+
+Update vendorized expat library version to 2.2.8, which resolves
+CVE-2019-15903.
+
+..
+
+.. bpo: 37764
+.. date: 2019-08-27-01-13-05
+.. nonce: qv67PQ
+.. section: Security
+
+Fixes email._header_value_parser.get_unstructured going into an infinite
+loop for a specific case in which the email header does not have trailing
+whitespace, and the case in which it contains an invalid encoded word. Patch
+by Ashwin Ramaswami.
+
+..
+
+.. bpo: 37461
+.. date: 2019-07-16-08-11-00
+.. nonce: 1Ahz7O
+.. section: Security
+
+Fix an infinite loop when parsing specially crafted email headers. Patch by
+Abhilash Raj.
+
+..
+
+.. bpo: 37363
+.. date: 2019-07-01-10-31-14
+.. nonce: fSjatj
+.. section: Security
+
+Adds audit events for the range of supported run commands (see
+:ref:`using-on-general`).
+
+..
+
+.. bpo: 37463
+.. date: 2019-07-01-08-46-14
+.. nonce: 1CHwjE
+.. section: Security
+
+ssl.match_hostname() no longer accepts IPv4 addresses with additional text
+after the address and only quad-dotted notation without trailing
+whitespaces. Some inet_aton() implementations ignore whitespace and all data
+after whitespace, e.g. '127.0.0.1 whatever'.
+
+..
+
+.. bpo: 37363
+.. date: 2019-06-21-15-58-59
+.. nonce: diouyl
+.. section: Security
+
+Adds audit events for :mod:`ensurepip`, :mod:`ftplib`, :mod:`glob`,
+:mod:`imaplib`, :mod:`nntplib`, :mod:`pdb`, :mod:`poplib`, :mod:`shutil`,
+:mod:`smtplib`, :mod:`sqlite3`, :mod:`subprocess`, :mod:`telnetlib`,
+:mod:`tempfile` and :mod:`webbrowser`, as well as :func:`os.listdir`,
+:func:`os.scandir` and :func:`breakpoint`.
+
+..
+
+.. bpo: 37364
+.. date: 2019-06-21-14-42-53
+.. nonce: IIRc2s
+.. section: Security
+
+:func:`io.open_code` is now used when reading :file:`.pth` files.
+
+..
+
+.. bpo: 34631
+.. date: 2019-06-17-09-34-25
+.. nonce: DBfM4j
+.. section: Security
+
+Updated OpenSSL to 1.1.1c in Windows installer
+
+..
+
+.. bpo: 34155
+.. date: 2019-05-04-13-33-37
+.. nonce: MJll68
+.. section: Security
+
+Fix parsing of invalid email addresses with more than one ``@`` (e.g.
+a@b@c.com.) to not return the part before 2nd ``@`` as valid email address.
+Patch by maxking & jpic.
+
+..
+
+.. bpo: 38631
+.. date: 2019-11-18-17-10-20
+.. nonce: tRHaAk
+.. section: Core and Builtins
+
+Replace ``Py_FatalError()`` call with a regular :exc:`RuntimeError`
+exception in :meth:`float.__getformat__`.
+
+..
+
+.. bpo: 38639
+.. date: 2019-10-30-11-31-47
+.. nonce: 9-vKtO
+.. section: Core and Builtins
+
+Optimized :func:`math.floor()`, :func:`math.ceil()` and :func:`math.trunc()`
+for floats.
+
+..
+
+.. bpo: 38640
+.. date: 2019-10-30-11-25-25
+.. nonce: 4sAFh5
+.. section: Core and Builtins
+
+Fixed a bug in the compiler that was causing to raise in the presence of
+break statements and continue statements inside always false while loops.
+Patch by Pablo Galindo.
+
+..
+
+.. bpo: 38613
+.. date: 2019-10-29-15-44-24
+.. nonce: V_R3NC
+.. section: Core and Builtins
+
+Optimized some set operations (e.g. ``|``, ``^``, and ``-``) of
+``dict_keys``. ``d.keys() | other`` was slower than ``set(d) | other`` but
+they are almost same performance for now.
+
+..
+
+.. bpo: 28029
+.. date: 2019-10-29-09-38-54
+.. nonce: AmRMEF
+.. section: Core and Builtins
+
+``"".replace("", s, n)`` now returns ``s`` instead of an empty string for
+all non-zero ``n``.  There are similar changes for :class:`bytes` and
+:class:`bytearray` objects.
+
+..
+
+.. bpo: 38535
+.. date: 2019-10-20-12-43-48
+.. nonce: ESMkVN
+.. section: Core and Builtins
+
+Fixed line numbers and column offsets for AST nodes for calls without
+arguments in decorators.
+
+..
+
+.. bpo: 38525
+.. date: 2019-10-20-00-36-18
+.. nonce: Vty1cA
+.. section: Core and Builtins
+
+Fix a segmentation fault when using reverse iterators of empty ``dict``
+objects. Patch by Dong-hee Na and Inada Naoki.
+
+..
+
+.. bpo: 38465
+.. date: 2019-10-19-12-44-13
+.. nonce: V1L8c4
+.. section: Core and Builtins
+
+:class:`bytearray`, :class:`~array.array` and :class:`~mmap.mmap` objects
+allow now to export more than 2**31 buffers at a time.
+
+..
+
+.. bpo: 38469
+.. date: 2019-10-13-23-41-38
+.. nonce: 9kmuQj
+.. section: Core and Builtins
+
+Fixed a bug where the scope of named expressions was not being resolved
+correctly in the presence of the *global* keyword. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 38437
+.. date: 2019-10-10-20-42-09
+.. nonce: z_0mZp
+.. section: Core and Builtins
+
+Activate the ``GC_DEBUG`` macro for debug builds of the interpreter (when
+``Py_DEBUG`` is set). Patch by Pablo Galindo.
+
+..
+
+.. bpo: 38379
+.. date: 2019-10-10-01-41-02
+.. nonce: _q4dhn
+.. section: Core and Builtins
+
+When the garbage collector makes a collection in which some objects
+resurrect (they are reachable from outside the isolated cycles after the
+finalizers have been executed), do not block the collection of all objects
+that are still unreachable. Patch by Pablo Galindo and Tim Peters.
+
+..
+
+.. bpo: 38379
+.. date: 2019-10-09-16-50-52
+.. nonce: oz5qZx
+.. section: Core and Builtins
+
+When cyclic garbage collection (gc) runs finalizers that resurrect
+unreachable objects, the current gc run ends, without collecting any cyclic
+trash.  However, the statistics reported by ``collect()`` and
+``get_stats()`` claimed that all cyclic trash found was collected, and that
+the resurrected objects were collected.   Changed the stats to report that
+none were collected.
+
+..
+
+.. bpo: 38392
+.. date: 2019-10-07-22-51-39
+.. nonce: KaXXps
+.. section: Core and Builtins
+
+In debug mode, :c:func:`PyObject_GC_Track` now calls ``tp_traverse()`` of
+the object type to ensure that the object is valid: test that objects
+visited by ``tp_traverse()`` are valid.
+
+..
+
+.. bpo: 38210
+.. date: 2019-10-06-15-01-57
+.. nonce: Xgc6F_
+.. section: Core and Builtins
+
+Remove unecessary intersection and update set operation in dictview with
+empty set. (Contributed by Dong-hee Na in :issue:`38210`.)
+
+..
+
+.. bpo: 38402
+.. date: 2019-10-05-19-36-16
+.. nonce: EZuzgK
+.. section: Core and Builtins
+
+Check the error from the system's underlying ``crypt`` or ``crypt_r``.
+
+..
+
+.. bpo: 37474
+.. date: 2019-10-01-12-46-30
+.. nonce: cB3se1
+.. section: Core and Builtins
+
+On FreeBSD, Python no longer calls ``fedisableexcept()`` at startup to
+control the floating point control mode. The call became useless since
+FreeBSD 6: it became the default mode.
+
+..
+
+.. bpo: 38006
+.. date: 2019-09-30-09-33-21
+.. nonce: UYlJum
+.. section: Core and Builtins
+
+Fix a bug due to the interaction of weakrefs and the cyclic garbage
+collector. We must clear any weakrefs in garbage in order to prevent their
+callbacks from executing and causing a crash.
+
+..
+
+.. bpo: 38317
+.. date: 2019-09-30-00-56-21
+.. nonce: pmqlIQ
+.. section: Core and Builtins
+
+Fix warnings options priority: ``PyConfig.warnoptions`` has the highest
+priority, as stated in the :pep:`587`.
+
+..
+
+.. bpo: 38310
+.. date: 2019-09-28-22-54-25
+.. nonce: YDTbEo
+.. section: Core and Builtins
+
+Predict ``BUILD_MAP_UNPACK_WITH_CALL`` -> ``CALL_FUNCTION_EX`` opcode pairs
+in the main interpreter loop. Patch by Brandt Bucher.
+
+..
+
+.. bpo: 36871
+.. date: 2019-09-24-18-45-46
+.. nonce: p47knk
+.. section: Core and Builtins
+
+Improve error handling for the assert_has_calls and assert_has_awaits
+methods of mocks. Fixed a bug where any errors encountered while binding the
+expected calls to the mock's spec were silently swallowed, leading to
+misleading error output.
+
+..
+
+.. bpo: 11410
+.. date: 2019-09-24-05-32-27
+.. nonce: vS182p
+.. section: Core and Builtins
+
+Better control over symbol visibility is provided through use of the
+visibility attributes available in gcc >= 4.0, provided in a uniform way
+across POSIX and Windows. The POSIX build files have been updated to compile
+with -fvisibility=hidden, minimising exported symbols.
+
+..
+
+.. bpo: 38219
+.. date: 2019-09-22-13-56-18
+.. nonce: rFl7JD
+.. section: Core and Builtins
+
+Optimized the :class:`dict` constructor and the :meth:`~dict.update` method
+for the case when the argument is a dict.
+
+..
+
+.. bpo: 38236
+.. date: 2019-09-20-19-06-23
+.. nonce: eQ0Tmj
+.. section: Core and Builtins
+
+Python now dumps path configuration if it fails to import the Python codecs
+of the filesystem and stdio encodings.
+
+..
+
+.. bpo: 38013
+.. date: 2019-09-12-19-50-01
+.. nonce: I7btD0
+.. section: Core and Builtins
+
+Allow to call ``async_generator_athrow().throw(...)`` even for non-started
+async generator helper. It fixes annoying warning at the end of
+:func:`asyncio.run` call.
+
+..
+
+.. bpo: 38124
+.. date: 2019-09-12-00-14-01
+.. nonce: n6E0H7
+.. section: Core and Builtins
+
+Fix an off-by-one error in PyState_AddModule that could cause out-of-bounds
+memory access.
+
+..
+
+.. bpo: 38116
+.. date: 2019-09-11-14-49-42
+.. nonce: KDwmwt
+.. section: Core and Builtins
+
+The select module is now PEP-384 compliant and no longer has static state
+
+..
+
+.. bpo: 38113
+.. date: 2019-09-11-14-10-02
+.. nonce: yZXC3P
+.. section: Core and Builtins
+
+ast module updated to PEP-384 and all statics removed
+
+..
+
+.. bpo: 38076
+.. date: 2019-09-09-16-36-37
+.. nonce: C5dVBl
+.. section: Core and Builtins
+
+The struct module is now PEP-384 compatible
+
+..
+
+.. bpo: 38075
+.. date: 2019-09-09-15-59-50
+.. nonce: N8OZKF
+.. section: Core and Builtins
+
+The random module is now PEP-384 compatible
+
+..
+
+.. bpo: 38074
+.. date: 2019-09-09-15-40-57
+.. nonce: MsVbeI
+.. section: Core and Builtins
+
+zlib module made PEP-384 compatible
+
+..
+
+.. bpo: 38073
+.. date: 2019-09-09-15-17-58
+.. nonce: ZoKYOU
+.. section: Core and Builtins
+
+Make pwd extension module PEP-384 compatible
+
+..
+
+.. bpo: 38072
+.. date: 2019-09-09-15-00-42
+.. nonce: Y1xpDO
+.. section: Core and Builtins
+
+grp module made PEP-384 compatible
+
+..
+
+.. bpo: 38069
+.. date: 2019-09-09-14-46-05
+.. nonce: cn8XLv
+.. section: Core and Builtins
+
+Make _posixsubprocess PEP-384 compatible
+
+..
+
+.. bpo: 38071
+.. date: 2019-09-09-14-44-17
+.. nonce: bLwkBJ
+.. section: Core and Builtins
+
+Make termios extension module PEP-384 compatible
+
+..
+
+.. bpo: 38005
+.. date: 2019-09-02-20-00-31
+.. nonce: e7VsTA
+.. section: Core and Builtins
+
+Fixed comparing and creating of InterpreterID and ChannelID.
+
+..
+
+.. bpo: 36946
+.. date: 2019-09-02-16-17-42
+.. nonce: _lAuSR
+.. section: Core and Builtins
+
+Fix possible signed integer overflow when handling slices. Patch by
+hongweipeng.
+
+..
+
+.. bpo: 37994
+.. date: 2019-08-31-11-13-25
+.. nonce: Rj6S4j
+.. section: Core and Builtins
+
+Fixed silencing arbitrary errors if an attribute lookup fails in several
+sites. Only AttributeError should be silenced.
+
+..
+
+.. bpo: 8425
+.. date: 2019-08-29-01-55-38
+.. nonce: FTq4A8
+.. section: Core and Builtins
+
+Optimize set difference_update for the case when the other set is much
+larger than the base set.  (Suggested by Evgeny Kapun with code contributed
+by Michele Orrù).
+
+..
+
+.. bpo: 37966
+.. date: 2019-08-27-21-21-36
+.. nonce: 5OBLez
+.. section: Core and Builtins
+
+The implementation of :func:`~unicodedata.is_normalized` has been greatly
+sped up on strings that aren't normalized, by implementing the full
+normalization-quick-check algorithm from the Unicode standard.
+
+..
+
+.. bpo: 37947
+.. date: 2019-08-26-04-09-57
+.. nonce: mzAQtB
+.. section: Core and Builtins
+
+Adjust correctly the recursion level in the symtable generation for named
+expressions. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 37812
+.. date: 2019-08-23-22-46-25
+.. nonce: vsWZwS
+.. section: Core and Builtins
+
+The ``CHECK_SMALL_INT`` macro used inside :file:`Object/longobject.c` has
+been replaced with an explicit ``return`` at each call site.
+
+..
+
+.. bpo: 37751
+.. date: 2019-08-20-04-36-37
+.. nonce: CSFzUd
+.. section: Core and Builtins
+
+Fix :func:`codecs.lookup` to normalize the encoding name the same way than
+:func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` also
+converts the name to lower case.
+
+..
+
+.. bpo: 37830
+.. date: 2019-08-17-18-41-59
+.. nonce: fNfMbz
+.. section: Core and Builtins
+
+Fixed compilation of :keyword:`break` and :keyword:`continue` in the
+:keyword:`finally` block when the corresponding :keyword:`try` block
+contains :keyword:`return` with a non-constant value.
+
+..
+
+.. bpo: 20490
+.. date: 2019-08-15-12-48-36
+.. nonce: -hXeEn
+.. section: Core and Builtins
+
+Improve import error message for partially initialized module on circular
+``from`` imports - by Anthony Sottile.
+
+..
+
+.. bpo: 37840
+.. date: 2019-08-13-18-05-20
+.. nonce: elLCci
+.. section: Core and Builtins
+
+Fix handling of negative indices in :c:member:`~PySequenceMethods.sq_item`
+of :class:`bytearray`. Patch by Sergey Fedoseev.
+
+..
+
+.. bpo: 37802
+.. date: 2019-08-09-18-28-57
+.. nonce: pKxcAW
+.. section: Core and Builtins
+
+Slightly improve performance of :c:func:`PyLong_FromUnsignedLong`,
+:c:func:`PyLong_FromUnsignedLongLong` and :c:func:`PyLong_FromSize_t`. Patch
+by Sergey Fedoseev.
+
+..
+
+.. bpo: 37409
+.. date: 2019-08-06-23-39-05
+.. nonce: 1qwzn2
+.. section: Core and Builtins
+
+Ensure explicit relative imports from interactive sessions and scripts
+(having no parent package) always raise ImportError, rather than treating
+the current module as the package. Patch by Ben Lewis.
+
+..
+
+.. bpo: 32912
+.. date: 2019-08-06-14-03-59
+.. nonce: UDwSMJ
+.. section: Core and Builtins
+
+Reverted :issue:`32912`: emitting :exc:`SyntaxWarning` instead of
+:exc:`DeprecationWarning` for invalid escape sequences in string and bytes
+literals.
+
+..
+
+.. bpo: 37757
+.. date: 2019-08-05-14-22-59
+.. nonce: lRv5HX
+.. section: Core and Builtins
+
+:pep:`572`: As described in the PEP, assignment expressions now raise
+:exc:`SyntaxError` when their interaction with comprehension scoping results
+in an ambiguous target scope.
+
+The ``TargetScopeError`` subclass originally proposed by the PEP has been
+removed in favour of just raising regular syntax errors for the disallowed
+cases.
+
+..
+
+.. bpo: 36279
+.. date: 2019-08-04-12-24-18
+.. nonce: 8Zy7jZ
+.. section: Core and Builtins
+
+Fix potential use of uninitialized memory in :func:`os.wait3`.
+
+..
+
+.. bpo: 36311
+.. date: 2019-08-02-15-01-33
+.. nonce: uY5vt-
+.. section: Core and Builtins
+
+Decoding bytes objects larger than 2GiB is faster and no longer fails when a
+multibyte characters spans a chunk boundary.
+
+..
+
+.. bpo: 34880
+.. date: 2019-08-01-10-45-51
+.. nonce: u_x_CG
+.. section: Core and Builtins
+
+The :keyword:`assert` statement now works properly if the
+:exc:`AssertionError` exception is being shadowed. Patch by Zackery Spytz.
+
+..
+
+.. bpo: 37340
+.. date: 2019-07-25-11-06-57
+.. nonce: 5ktLEg
+.. section: Core and Builtins
+
+Removed object cache (``free_list``) for bound method objects.  Temporary
+bound method objects are less used than before thanks to the ``LOAD_METHOD``
+opcode and the ``_PyObject_VectorcallMethod`` C API.
+
+..
+
+.. bpo: 37648
+.. date: 2019-07-22-11-05-05
+.. nonce: 6TY2L-
+.. section: Core and Builtins
+
+Fixed minor inconsistency in :meth:`list.__contains__`,
+:meth:`tuple.__contains__` and a few other places. The collection's item is
+now always at the left and the needle is on the right of ``==``.
+
+..
+
+.. bpo: 37444
+.. date: 2019-07-20-22-34-42
+.. nonce: UOd3Xs
+.. section: Core and Builtins
+
+Update differing exception between :meth:`builtins.__import__` and
+:meth:`importlib.__import__`.
+
+..
+
+.. bpo: 37619
+.. date: 2019-07-18-11-50-49
+.. nonce: X6Lulo
+.. section: Core and Builtins
+
+When adding a wrapper descriptor from one class to a different class (for
+example, setting ``__add__ = str.__add__`` on an ``int`` subclass), an
+exception is correctly raised when the operator is called.
+
+..
+
+.. bpo: 37593
+.. date: 2019-07-14-23-57-27
+.. nonce: yHSTwH
+.. section: Core and Builtins
+
+Swap the positions of the *posonlyargs* and *args* parameters in the
+constructor of :class:`ast.parameters` nodes.
+
+..
+
+.. bpo: 37543
+.. date: 2019-07-10-20-33-53
+.. nonce: EvI19D
+.. section: Core and Builtins
+
+Optimized pymalloc for non PGO build.
+
+..
+
+.. bpo: 37537
+.. date: 2019-07-10-09-56-47
+.. nonce: OkB0wd
+.. section: Core and Builtins
+
+Compute allocated pymalloc blocks inside _Py_GetAllocatedBlocks().  This
+slows down _Py_GetAllocatedBlocks() but gives a small speedup to
+_PyObject_Malloc() and _PyObject_Free().
+
+..
+
+.. bpo: 37467
+.. date: 2019-07-01-12-22-44
+.. nonce: u-XyEu
+.. section: Core and Builtins
+
+Fix :func:`sys.excepthook` and :c:func:`PyErr_Display` if a filename is a
+bytes string. For example, for a SyntaxError exception where the filename
+attribute is a bytes string.
+
+..
+
+.. bpo: 37433
+.. date: 2019-06-27-15-01-14
+.. nonce: amNGqr
+.. section: Core and Builtins
+
+Fix ``SyntaxError`` indicator printing too many spaces for multi-line
+strings - by Anthony Sottile.
+
+..
+
+.. bpo: 37417
+.. date: 2019-06-26-18-41-00
+.. nonce: VsZeHL
+.. section: Core and Builtins
+
+:meth:`bytearray.extend` now correctly handles errors that arise during
+iteration. Patch by Brandt Bucher.
+
+..
+
+.. bpo: 37414
+.. date: 2019-06-26-17-27-26
+.. nonce: o6Lnbc
+.. section: Core and Builtins
+
+The undocumented ``sys.callstats()`` function has been removed. Since Python
+3.7, it was deprecated and always returned ``None``. It required a special
+build option ``CALL_PROFILE`` which was already removed in Python 3.7.
+
+..
+
+.. bpo: 37392
+.. date: 2019-06-25-01-45-06
+.. nonce: J3JhIx
+.. section: Core and Builtins
+
+Remove ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions.
+They were deprecated since Python 3.2. Use :func:`sys.getswitchinterval` and
+:func:`sys.setswitchinterval` instead. Remove also ``check_interval`` field
+of the ``PyInterpreterState`` structure.
+
+..
+
+.. bpo: 37388
+.. date: 2019-06-24-21-53-52
+.. nonce: 0XTZmW
+.. section: Core and Builtins
+
+In development mode and in debug build, *encoding* and *errors* arguments
+are now checked on string encoding and decoding operations. Examples:
+:func:`open`, :meth:`str.encode` and :meth:`bytes.decode`.
+
+By default, for best performances, the *errors* argument is only checked at
+the first encoding/decoding error, and the *encoding* argument is sometimes
+ignored for empty strings.
+
+..
+
+.. bpo: 37348
+.. date: 2019-06-23-00-26-30
+.. nonce: pp8P-x
+.. section: Core and Builtins
+
+Optimized decoding short ASCII string with UTF-8 and ascii codecs.
+``b"foo".decode()`` is about 15% faster.  Patch by Inada Naoki.
+
+..
+
+.. bpo: 24214
+.. date: 2019-06-22-12-45-20
+.. nonce: hIiHeD
+.. section: Core and Builtins
+
+Improved support of the surrogatepass error handler in the UTF-8 and UTF-16
+incremental decoders.
+
+..
+
+.. bpo: 37330
+.. date: 2019-06-18-17-53-06
+.. nonce: wAvHmz
+.. section: Core and Builtins
+
+:func:`open`, :func:`io.open`, :func:`codecs.open` and
+:class:`fileinput.FileInput` no longer accept ``'U'`` ("universal newline")
+in the file mode. This flag was deprecated since Python 3.3.
+
+..
+
+.. bpo: 35224
+.. date: 2019-06-17-06-03-55
+.. nonce: FHWPGv
+.. section: Core and Builtins
+
+Reverse evaluation order of key: value in dict comprehensions as proposed in
+PEP 572. I.e. in ``{k: v for ...}``, ``k`` will be evaluated before ``v``.
+
+..
+
+.. bpo: 37316
+.. date: 2019-06-17-03-53-16
+.. nonce: LytDX_
+.. section: Core and Builtins
+
+Fix the :c:func:`PySys_Audit` call in :class:`mmap.mmap`.
+
+..
+
+.. bpo: 37300
+.. date: 2019-06-16-02-38-25
+.. nonce: WJkgKV
+.. section: Core and Builtins
+
+Remove an unnecssary Py_XINCREF in classobject.c.
+
+..
+
+.. bpo: 37269
+.. date: 2019-06-14-06-32-33
+.. nonce: SjVVAe
+.. section: Core and Builtins
+
+Fix a bug in the peephole optimizer that was not treating correctly constant
+conditions with binary operators. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 20443
+.. date: 2019-06-13-12-55-38
+.. nonce: bQWAxg
+.. section: Core and Builtins
+
+Python now gets the absolute path of the script filename specified on the
+command line (ex: "python3 script.py"): the __file__ attribute of the
+__main__ module and sys.path[0] become an absolute path, rather than a
+relative path.
+
+..
+
+.. bpo: 37257
+.. date: 2019-06-13-02-27-12
+.. nonce: IMxDvT
+.. section: Core and Builtins
+
+Python's small object allocator (``obmalloc.c``) now allows (no more than)
+one empty arena to remain available for immediate reuse, without returning
+it to the OS.  This prevents thrashing in simple loops where an arena could
+be created and destroyed anew on each iteration.
+
+..
+
+.. bpo: 37231
+.. date: 2019-06-12-14-39-16
+.. nonce: LF41Es
+.. section: Core and Builtins
+
+The dispatching of type slots to special methods (for example calling
+``__mul__`` when doing ``x * y``) has been made faster.
+
+..
+
+.. bpo: 36974
+.. date: 2019-06-11-12-59-38
+.. nonce: bVYmSA
+.. section: Core and Builtins
+
+Implemented separate vectorcall functions for every calling convention of
+builtin functions and methods. This improves performance for calls.
+
+..
+
+.. bpo: 37213
+.. date: 2019-06-11-11-15-19
+.. nonce: UPii5K
+.. section: Core and Builtins
+
+Handle correctly negative line offsets in the peephole optimizer. Patch by
+Pablo Galindo.
+
+..
+
+.. bpo: 37219
+.. date: 2019-06-10-23-18-31
+.. nonce: jPSufq
+.. section: Core and Builtins
+
+Remove erroneous optimization for empty set differences.
+
+..
+
+.. bpo: 15913
+.. date: 2019-06-06-20-52-38
+.. nonce: 5Sg5cv
+.. section: Core and Builtins
+
+Implement :c:func:`PyBuffer_SizeFromFormat()` function (previously
+documented but not implemented): call :func:`struct.calcsize`. Patch by
+Joannah Nanjekye.
+
+..
+
+.. bpo: 36922
+.. date: 2019-06-06-13-59-52
+.. nonce: EMZ3TF
+.. section: Core and Builtins
+
+Slot functions optimize any callable with ``Py_TPFLAGS_METHOD_DESCRIPTOR``
+instead of only instances of ``function``.
+
+..
+
+.. bpo: 36974
+.. date: 2019-06-06-11-00-55
+.. nonce: wdzzym
+.. section: Core and Builtins
+
+The slot ``tp_vectorcall_offset`` is inherited unconditionally to support
+``super().__call__()`` when the base class uses vectorcall.
+
+..
+
+.. bpo: 37160
+.. date: 2019-06-05-09-24-17
+.. nonce: O3IAY3
+.. section: Core and Builtins
+
+:func:`threading.get_native_id` now also supports NetBSD.
+
+..
+
+.. bpo: 37077
+.. date: 2019-05-28-11-47-44
+.. nonce: S1h0Fc
+.. section: Core and Builtins
+
+Add :func:`threading.get_native_id` support for AIX. Patch by M. Felt
+
+..
+
+.. bpo: 36781
+.. date: 2019-05-06-09-59-31
+.. nonce: uocWt6
+.. section: Core and Builtins
+
+:func:`sum` has been optimized for boolean values.
+
+..
+
+.. bpo: 34556
+.. date: 2019-05-05-18-09-40
+.. nonce: o9kfpu
+.. section: Core and Builtins
+
+Add ``--upgrade-deps`` to venv module. Patch by Cooper Ry Lees
+
+..
+
+.. bpo: 20523
+.. date: 2019-02-15-20-42-36
+.. nonce: rRLrvr
+.. section: Core and Builtins
+
+``pdb.Pdb`` supports ~/.pdbrc in Windows 7. Patch by Tim Hopper and Dan
+Lidral-Porter.
+
+..
+
+.. bpo: 35551
+.. date: 2019-01-18-16-16-27
+.. nonce: oF5pbO
+.. section: Core and Builtins
+
+Updated encodings: - Removed the "tis260" encoding, which was an alias for
+the nonexistent "tactis" codec. - Added "mac_centeuro" as an alias for the
+mac_latin2 encoding.
+
+..
+
+.. bpo: 19072
+.. date: 2018-07-23-13-09-54
+.. nonce: Gc59GS
+.. section: Core and Builtins
+
+The :class:`classmethod` decorator can now wrap other descriptors such as
+property objects.  Adapted from a patch written by Graham Dumpleton.
+
+..
+
+.. bpo: 27575
+.. date: 2018-06-14-13-55-45
+.. nonce: mMYgzv
+.. section: Core and Builtins
+
+Improve speed of dictview intersection by directly using set intersection
+logic. Patch by David Su.
+
+..
+
+.. bpo: 30773
+.. date: 2018-06-07-01-01-20
+.. nonce: C31rVE
+.. section: Core and Builtins
+
+Prohibit parallel running of aclose() / asend() / athrow(). Fix ag_running
+to reflect the actual running status of the AG.
+
+..
+
+.. bpo: 36589
+.. date: 2019-11-16-22-56-51
+.. nonce: 0Io76D
+.. section: Library
+
+The :func:`curses.update_lines_cols` function now returns ``None`` instead
+of ``1`` on success.
+
+..
+
+.. bpo: 38807
+.. date: 2019-11-15-09-30-29
+.. nonce: PsmRog
+.. section: Library
+
+Update :exc:`TypeError` messages for :meth:`os.path.join` to include
+:class:`os.PathLike` objects as acceptable input types.
+
+..
+
+.. bpo: 38724
+.. date: 2019-11-14-14-13-29
+.. nonce: T5ySfR
+.. section: Library
+
+Add a repr for ``subprocess.Popen`` objects. Patch by Andrey Doroschenko.
+
+..
+
+.. bpo: 38786
+.. date: 2019-11-13-16-49-03
+.. nonce: gNOwKh
+.. section: Library
+
+pydoc now recognizes and parses HTTPS URLs. Patch by python273.
+
+..
+
+.. bpo: 38785
+.. date: 2019-11-13-16-17-43
+.. nonce: NEOEfk
+.. section: Library
+
+Prevent asyncio from crashing if parent ``__init__`` is not called from a
+constructor of object derived from ``asyncio.Future``.
+
+..
+
+.. bpo: 38723
+.. date: 2019-11-12-15-46-28
+.. nonce: gcdMFn
+.. section: Library
+
+:mod:`pdb` now uses :meth:`io.open_code` to trigger auditing events.
+
+..
+
+.. bpo: 27805
+.. date: 2019-11-11-21-43-06
+.. nonce: D3zl1_
+.. section: Library
+
+Allow opening pipes and other non-seekable files in append mode with
+:func:`open`.
+
+..
+
+.. bpo: 38438
+.. date: 2019-11-11-06-14-25
+.. nonce: vSVeHN
+.. section: Library
+
+Simplify the :mod:`argparse` usage message for ``nargs="*"``.
+
+..
+
+.. bpo: 38761
+.. date: 2019-11-10-13-40-33
+.. nonce: P1UUIZ
+.. section: Library
+
+WeakSet is now registered as a collections.abc.MutableSet.
+
+..
+
+.. bpo: 38716
+.. date: 2019-11-06-15-58-07
+.. nonce: R3uMLT
+.. section: Library
+
+logging: change RotatingHandler namer and rotator to class-level attributes.
+This stops __init__ from setting them to None in the case where a subclass
+defines them with eponymous methods.
+
+..
+
+.. bpo: 38713
+.. date: 2019-11-05-21-22-22
+.. nonce: bmhquU
+.. section: Library
+
+Add :data:`os.P_PIDFD` constant, which may be passed to :func:`os.waitid` to
+wait on a Linux process file descriptor.
+
+..
+
+.. bpo: 38692
+.. date: 2019-11-05-19-15-57
+.. nonce: 2DCDA-
+.. section: Library
+
+Add :class:`asyncio.PidfdChildWatcher`, a Linux-specific child watcher
+implementation that polls process file descriptors.
+
+..
+
+.. bpo: 38692
+.. date: 2019-11-05-07-18-24
+.. nonce: UpatA7
+.. section: Library
+
+Expose the Linux ``pidfd_open`` syscall as :func:`os.pidfd_open`.
+
+..
+
+.. bpo: 38602
+.. date: 2019-10-27-22-29-45
+.. nonce: 7jvYFA
+.. section: Library
+
+Added constants :data:`~fcntl.F_OFD_GETLK`, :data:`~fcntl.F_OFD_SETLK` and
+:data:`~fcntl.F_OFD_SETLKW` to the :mod:`fcntl` module. Patch by Dong-hee
+Na.
+
+..
+
+.. bpo: 38334
+.. date: 2019-10-27-00-08-49
+.. nonce: pfLLmc
+.. section: Library
+
+Fixed seeking backward on an encrypted :class:`zipfile.ZipExtFile`.
+
+..
+
+.. bpo: 38312
+.. date: 2019-10-26-14-42-20
+.. nonce: e_FVWh
+.. section: Library
+
+Add :func:`curses.get_escdelay`, :func:`curses.set_escdelay`,
+:func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions - by
+Anthony Sottile.
+
+..
+
+.. bpo: 38586
+.. date: 2019-10-24-17-26-39
+.. nonce: cyq5nr
+.. section: Library
+
+Now :func:`~logging.config.fileConfig` correcty sets the .name of handlers
+loaded.
+
+..
+
+.. bpo: 38565
+.. date: 2019-10-24-08-10-30
+.. nonce: SWSUst
+.. section: Library
+
+Add new cache_parameters() method for functools.lru_cache() to better
+support pickling.
+
+..
+
+.. bpo: 34679
+.. date: 2019-10-23-16-25-12
+.. nonce: Bnw8o3
+.. section: Library
+
+asynci.ProactorEventLoop.close() now only calls signal.set_wakeup_fd() in
+the main thread.
+
+..
+
+.. bpo: 31202
+.. date: 2019-10-20-12-04-48
+.. nonce: NfdIus
+.. section: Library
+
+The case the result of :func:`pathlib.WindowsPath.glob` matches now the case
+of the pattern for literal parts.
+
+..
+
+.. bpo: 36321
+.. date: 2019-10-19-21-41-20
+.. nonce: CFlxfy
+.. section: Library
+
+Remove misspelled attribute.  The 3.8 changelog noted that this would be
+removed in 3.9.
+
+..
+
+.. bpo: 38521
+.. date: 2019-10-18-13-57-31
+.. nonce: U-7aaM
+.. section: Library
+
+Fixed erroneous equality comparison in statistics.NormalDist().
+
+..
+
+.. bpo: 38493
+.. date: 2019-10-16-19-56-51
+.. nonce: 86ExWB
+.. section: Library
+
+Added :data:`~os.CLD_KILLED` and :data:`~os.CLD_STOPPED` for
+:attr:`si_code`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 38478
+.. date: 2019-10-15-11-37-57
+.. nonce: A87OPO
+.. section: Library
+
+Fixed a bug in :meth:`inspect.signature.bind` that was causing it to fail
+when handling a keyword argument with same name as positional-only
+parameter. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 33604
+.. date: 2019-10-15-09-47-40
+.. nonce: J12cWT
+.. section: Library
+
+Fixed `hmac.new` and `hmac.HMAC` to raise TypeError instead of ValueError
+when the digestmod parameter, now required in 3.8, is omitted.  Also
+clarified the hmac module documentation and docstrings.
+
+..
+
+.. bpo: 38378
+.. date: 2019-10-13-11-00-03
+.. nonce: yYNpSm
+.. section: Library
+
+Parameters *out* and *in* of :func:`os.sendfile` was renamed to *out_fd* and
+*in_fd*.
+
+..
+
+.. bpo: 38417
+.. date: 2019-10-12-00-13-47
+.. nonce: W7x_aS
+.. section: Library
+
+Added support for setting the umask in the child process to the subprocess
+module on POSIX systems.
+
+..
+
+.. bpo: 38449
+.. date: 2019-10-11-18-49-00
+.. nonce: 9TWMlz
+.. section: Library
+
+Revert GH-15522, which introduces a regression in
+:meth:`mimetypes.guess_type` due to improper handling of filenames as urls.
+
+..
+
+.. bpo: 38431
+.. date: 2019-10-10-16-53-00
+.. nonce: d5wzNp
+.. section: Library
+
+Fix ``__repr__`` method for :class:`dataclasses.InitVar` to support typing
+objects, patch by Samuel Colvin.
+
+..
+
+.. bpo: 38109
+.. date: 2019-10-10-00-25-28
+.. nonce: 9w-IGF
+.. section: Library
+
+Add missing :data:`stat.S_IFDOOR`, :data:`stat.S_IFPORT`,
+:data:`stat.S_IFWHT`, :func:`stat.S_ISDOOR`, :func:`stat.S_ISPORT`, and
+:func:`stat.S_ISWHT` values to the Python implementation of :mod:`stat`.
+
+..
+
+.. bpo: 38422
+.. date: 2019-10-09-18-16-51
+.. nonce: aiM5bq
+.. section: Library
+
+Clarify docstrings of pathlib suffix(es)
+
+..
+
+.. bpo: 38405
+.. date: 2019-10-08-11-18-40
+.. nonce: 0-7e7s
+.. section: Library
+
+Nested subclasses of :class:`typing.NamedTuple` are now pickleable.
+
+..
+
+.. bpo: 38332
+.. date: 2019-10-05-02-07-52
+.. nonce: hwrPN7
+.. section: Library
+
+Prevent :exc:`KeyError` thrown by :func:`_encoded_words.decode` when given
+an encoded-word with invalid content-type encoding from propagating all the
+way to :func:`email.message.get`.
+
+..
+
+.. bpo: 38371
+.. date: 2019-10-04-18-39-59
+.. nonce: S6Klvm
+.. section: Library
+
+Deprecated the ``split()`` method in :class:`_tkinter.TkappType` in favour
+of the ``splitlist()`` method which has more consistent and predicable
+behavior.
+
+..
+
+.. bpo: 38341
+.. date: 2019-10-01-21-06-18
+.. nonce: uqwgU_
+.. section: Library
+
+Add :exc:`smtplib.SMTPNotSupportedError` to the :mod:`smtplib` exported
+names.
+
+..
+
+.. bpo: 38319
+.. date: 2019-09-30-22-06-33
+.. nonce: 5QjiDa
+.. section: Library
+
+sendfile() used in socket and shutil modules was raising OverflowError for
+files >= 2GiB on 32-bit architectures.  (patch by Giampaolo Rodola)
+
+..
+
+.. bpo: 38242
+.. date: 2019-09-30-00-15-27
+.. nonce: uPIyAc
+.. section: Library
+
+Revert the new asyncio Streams API
+
+..
+
+.. bpo: 13153
+.. date: 2019-09-29-22-47-37
+.. nonce: 0mO9qR
+.. section: Library
+
+OS native encoding is now used for converting between Python strings and Tcl
+objects.  This allows to display, copy and paste to clipboard emoji and
+other non-BMP characters.  Converting strings from Tcl to Python and back
+now never fails (except MemoryError).
+
+..
+
+.. bpo: 38019
+.. date: 2019-09-29-13-50-24
+.. nonce: 6MoOE3
+.. section: Library
+
+Correctly handle pause/resume reading of closed asyncio unix pipe.
+
+..
+
+.. bpo: 38163
+.. date: 2019-09-28-20-16-40
+.. nonce: x51-vK
+.. section: Library
+
+Child mocks will now detect their type as either synchronous or
+asynchronous, asynchronous child mocks will be AsyncMocks and synchronous
+child mocks will be either MagicMock or Mock (depending on their parent
+type).
+
+..
+
+.. bpo: 38161
+.. date: 2019-09-27-16-31-28
+.. nonce: zehai1
+.. section: Library
+
+Removes _AwaitEvent from AsyncMock.
+
+..
+
+.. bpo: 38216
+.. date: 2019-09-27-15-24-45
+.. nonce: -7yvZR
+.. section: Library
+
+Allow the rare code that wants to send invalid http requests from the
+`http.client` library a way to do so.  The fixes for bpo-30458 led to
+breakage for some projects that were relying on this ability to test their
+own behavior in the face of bad requests.
+
+..
+
+.. bpo: 28286
+.. date: 2019-09-26-12-16-30
+.. nonce: LdSsrN
+.. section: Library
+
+Deprecate opening :class:`~gzip.GzipFile` for writing implicitly.  Always
+specify the *mode* argument for writing.
+
+..
+
+.. bpo: 38108
+.. date: 2019-09-25-21-37-02
+.. nonce: Jr9HU6
+.. section: Library
+
+Any synchronous magic methods on an AsyncMock now return a MagicMock. Any
+asynchronous magic methods on a MagicMock now return an AsyncMock.
+
+..
+
+.. bpo: 38265
+.. date: 2019-09-25-05-16-19
+.. nonce: X6-gsT
+.. section: Library
+
+Update the *length* parameter of :func:`os.pread` to accept
+:c:type:`Py_ssize_t` instead of :c:type:`int`.
+
+..
+
+.. bpo: 38112
+.. date: 2019-09-24-10-55-01
+.. nonce: 2EinX9
+.. section: Library
+
+:mod:`compileall` has a higher default recursion limit and new command-line
+arguments for path manipulation, symlinks handling, and multiple
+optimization levels.
+
+..
+
+.. bpo: 38248
+.. date: 2019-09-22-13-05-36
+.. nonce: Yo3N_1
+.. section: Library
+
+asyncio: Fix inconsistent immediate Task cancellation
+
+..
+
+.. bpo: 38237
+.. date: 2019-09-20-14-27-17
+.. nonce: xRUZbx
+.. section: Library
+
+The arguments for the builtin pow function are more descriptive. They can
+now also be passed in as keywords.
+
+..
+
+.. bpo: 34002
+.. date: 2019-09-19-19-58-33
+.. nonce: KBnaVX
+.. section: Library
+
+Improve efficiency in parts of email package by changing while-pop to a for
+loop, using isdisjoint instead of set intersections.
+
+..
+
+.. bpo: 38191
+.. date: 2019-09-17-12-28-27
+.. nonce: 1TU0HV
+.. section: Library
+
+Constructors of :class:`~typing.NamedTuple` and :class:`~typing.TypedDict`
+types now accept arbitrary keyword argument names, including "cls", "self",
+"typename", "_typename", "fields" and "_fields".
+
+..
+
+.. bpo: 38155
+.. date: 2019-09-16-21-47-48
+.. nonce: d92lRc
+.. section: Library
+
+Add ``__all__`` to  :mod:`datetime`. Patch by Tahia Khan.
+
+..
+
+.. bpo: 38185
+.. date: 2019-09-16-19-12-57
+.. nonce: zYWppY
+.. section: Library
+
+Fixed case-insensitive string comparison in :class:`sqlite3.Row` indexing.
+
+..
+
+.. bpo: 38136
+.. date: 2019-09-16-09-54-42
+.. nonce: MdI-Zb
+.. section: Library
+
+Changes AsyncMock call count and await count to be two different counters.
+Now await count only counts when a coroutine has been awaited, not when it
+has been called, and vice-versa. Update the documentation around this.
+
+..
+
+.. bpo: 37828
+.. date: 2019-09-15-21-31-18
+.. nonce: gLLDX7
+.. section: Library
+
+Fix default mock name in :meth:`unittest.mock.Mock.assert_called`
+exceptions. Patch by Abraham Toriz Cruz.
+
+..
+
+.. bpo: 38175
+.. date: 2019-09-15-10-30-33
+.. nonce: 61XlUv
+.. section: Library
+
+Fix a memory leak in comparison of :class:`sqlite3.Row` objects.
+
+..
+
+.. bpo: 33936
+.. date: 2019-09-14-10-34-00
+.. nonce: 8wCI_n
+.. section: Library
+
+_hashlib no longer calls obsolete OpenSSL initialization function with
+OpenSSL 1.1.0+.
+
+..
+
+.. bpo: 34706
+.. date: 2019-09-13-14-54-33
+.. nonce: HWVpOY
+.. section: Library
+
+Preserve subclassing in inspect.Signature.from_callable.
+
+..
+
+.. bpo: 38153
+.. date: 2019-09-13-12-18-51
+.. nonce: nHAbuJ
+.. section: Library
+
+Names of hashing algorithms frome OpenSSL are now normalized to follow
+Python's naming conventions. For example OpenSSL uses sha3-512 instead of
+sha3_512 or blake2b512 instead of blake2b.
+
+..
+
+.. bpo: 38115
+.. date: 2019-09-13-09-24-58
+.. nonce: BOO-Y1
+.. section: Library
+
+Fix a bug in dis.findlinestarts() where it would return invalid bytecode
+offsets. Document that a code object's co_lnotab can contain invalid
+bytecode offsets.
+
+..
+
+.. bpo: 38148
+.. date: 2019-09-13-08-55-43
+.. nonce: Lnww6D
+.. section: Library
+
+Add slots to :mod:`asyncio` transport classes, which can reduce memory
+usage.
+
+..
+
+.. bpo: 38142
+.. date: 2019-09-12-18-41-35
+.. nonce: 1I0Ch0
+.. section: Library
+
+The _hashlib OpenSSL wrapper extension module is now PEP-384 compliant.
+
+..
+
+.. bpo: 9216
+.. date: 2019-09-12-14-54-45
+.. nonce: W7QMpC
+.. section: Library
+
+hashlib constructors now support usedforsecurity flag to signal that a
+hashing algorithm is not used in a security context.
+
+..
+
+.. bpo: 36991
+.. date: 2019-09-12-14-52-38
+.. nonce: 1OcSm8
+.. section: Library
+
+Fixes a potential incorrect AttributeError exception escaping
+ZipFile.extract() in some unsupported input error situations.
+
+..
+
+.. bpo: 38134
+.. date: 2019-09-12-13-18-55
+.. nonce: gXJTbP
+.. section: Library
+
+Remove obsolete copy of PBKDF2_HMAC_fast. All supported OpenSSL versions
+contain a fast implementation.
+
+..
+
+.. bpo: 38132
+.. date: 2019-09-12-12-47-35
+.. nonce: KSFx1F
+.. section: Library
+
+The OpenSSL hashlib wrapper uses a simpler implementation. Several Macros
+and pointless caches are gone. The hash name now comes from OpenSSL's EVP.
+The algorithm name stays the same, except it is now always lower case.
+
+..
+
+.. bpo: 38008
+.. date: 2019-09-12-10-47-34
+.. nonce: sH74Iy
+.. section: Library
+
+Fix parent class check in protocols to correctly identify the module that
+provides a builtin protocol, instead of assuming they all come from the
+:mod:`collections.abc` module
+
+..
+
+.. bpo: 34037
+.. date: 2019-09-11-21-38-41
+.. nonce: LIAS_3
+.. section: Library
+
+For :mod:`asyncio`, add a new coroutine
+:meth:`loop.shutdown_default_executor`. The new coroutine provides an API to
+schedule an executor shutdown that waits on the threadpool to finish
+closing. Also, :func:`asyncio.run` has been updated to utilize the new
+coroutine. Patch by Kyle Stanley.
+
+..
+
+.. bpo: 37405
+.. date: 2019-09-11-20-27-41
+.. nonce: MG5xiY
+.. section: Library
+
+Fixed regression bug for socket.getsockname() for non-CAN_ISOTP AF_CAN
+address family sockets by returning a 1-tuple instead of string.
+
+..
+
+.. bpo: 38121
+.. date: 2019-09-11-16-54-57
+.. nonce: SrSDzB
+.. section: Library
+
+Update parameter names on functions in importlib.metadata matching the
+changes in the 0.22 release of importlib_metadata.
+
+..
+
+.. bpo: 38110
+.. date: 2019-09-11-14-49-20
+.. nonce: A19Y-q
+.. section: Library
+
+The os.closewalk() implementation now uses the libc fdwalk() API on
+platforms where it is available.
+
+..
+
+.. bpo: 38093
+.. date: 2019-09-11-14-45-30
+.. nonce: yQ6k7y
+.. section: Library
+
+Fixes AsyncMock so it doesn't crash when used with AsyncContextManagers or
+AsyncIterators.
+
+..
+
+.. bpo: 37488
+.. date: 2019-09-11-11-44-16
+.. nonce: S8CJUL
+.. section: Library
+
+Add warning to :meth:`datetime.utctimetuple`,  :meth:`datetime.utcnow` and
+:meth:`datetime.utcfromtimestamp` .
+
+..
+
+.. bpo: 35640
+.. date: 2019-09-10-15-52-55
+.. nonce: X0lp5f
+.. section: Library
+
+Allow passing a :term:`path-like object` as ``directory`` argument to the
+:class:`http.server.SimpleHTTPRequestHandler` class. Patch by Géry Ogam.
+
+..
+
+.. bpo: 38086
+.. date: 2019-09-10-11-42-59
+.. nonce: w5TlG-
+.. section: Library
+
+Update importlib.metadata with changes from `importlib_metadata 0.21
+<https://gitlab.com/python-devs/importlib_metadata/blob/0.21/importlib_metadata/docs/changelog.rst>`_.
+
+..
+
+.. bpo: 37251
+.. date: 2019-09-10-10-59-50
+.. nonce: 8zn2o3
+.. section: Library
+
+Remove `__code__` check in AsyncMock that incorrectly evaluated function
+specs as async objects but failed to evaluate classes with `__await__` but
+no `__code__` attribute defined as async objects.
+
+..
+
+.. bpo: 38037
+.. date: 2019-09-09-18-39-23
+.. nonce: B0UgFU
+.. section: Library
+
+Fix reference counters in the :mod:`signal` module.
+
+..
+
+.. bpo: 38066
+.. date: 2019-09-09-14-39-47
+.. nonce: l9mWv-
+.. section: Library
+
+Hide internal asyncio.Stream methods: feed_eof(), feed_data(),
+set_exception() and set_transport().
+
+..
+
+.. bpo: 38059
+.. date: 2019-09-08-11-36-50
+.. nonce: 8SA6co
+.. section: Library
+
+inspect.py now uses sys.exit() instead of exit()
+
+..
+
+.. bpo: 38049
+.. date: 2019-09-07-12-32-50
+.. nonce: xKP4tf
+.. section: Library
+
+Added command-line interface for the :mod:`ast` module.
+
+..
+
+.. bpo: 37953
+.. date: 2019-09-06-17-40-34
+.. nonce: db5FQq
+.. section: Library
+
+In :mod:`typing`, improved the ``__hash__`` and ``__eq__`` methods for
+:class:`ForwardReferences`.
+
+..
+
+.. bpo: 38026
+.. date: 2019-09-04-20-34-14
+.. nonce: 0LLRX-
+.. section: Library
+
+Fixed :func:`inspect.getattr_static` used ``isinstance`` while it should
+avoid dynamic lookup.
+
+..
+
+.. bpo: 35923
+.. date: 2019-09-03-01-41-35
+.. nonce: lYpKbY
+.. section: Library
+
+Update :class:`importlib.machinery.BuiltinImporter` to use
+``loader._ORIGIN`` instead of a hardcoded value. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 38010
+.. date: 2019-09-02-14-30-39
+.. nonce: JOnz9Z
+.. section: Library
+
+In ``importlib.metadata`` sync with ``importlib_metadata`` 0.20, clarifying
+behavior of ``files()`` and fixing issue where only one requirement was
+returned for ``requires()`` on ``dist-info`` packages.
+
+..
+
+.. bpo: 38006
+.. date: 2019-09-02-13-37-27
+.. nonce: Y7vA0Q
+.. section: Library
+
+weakref.WeakValueDictionary defines a local remove() function used as
+callback for weak references. This function was created with a closure.
+Modify the implementation to avoid the closure.
+
+..
+
+.. bpo: 37995
+.. date: 2019-08-31-13-36-09
+.. nonce: rS8HzT
+.. section: Library
+
+Added the *indent* option to :func:`ast.dump` which allows it to produce a
+multiline indented output.
+
+..
+
+.. bpo: 34410
+.. date: 2019-08-31-01-52-59
+.. nonce: 7KbWZQ
+.. section: Library
+
+Fixed a crash in the :func:`tee` iterator when re-enter it. RuntimeError is
+now raised in this case.
+
+..
+
+.. bpo: 37140
+.. date: 2019-08-30-11-21-10
+.. nonce: cFAX-a
+.. section: Library
+
+Fix a ctypes regression of Python 3.8. When a ctypes.Structure is passed by
+copy to a function, ctypes internals created a temporary object which had
+the side effect of calling the structure finalizer (__del__) twice. The
+Python semantics requires a finalizer to be called exactly once. Fix ctypes
+internals to no longer call the finalizer twice.
+
+..
+
+.. bpo: 37587
+.. date: 2019-08-29-18-48-48
+.. nonce: N7TGTC
+.. section: Library
+
+``_json.scanstring`` is now up to 3x faster when there are many backslash
+escaped characters in the JSON string.
+
+..
+
+.. bpo: 37834
+.. date: 2019-08-29-16-41-36
+.. nonce: FThnsh
+.. section: Library
+
+Prevent shutil.rmtree exception when built on non-Windows system without fd
+system call support, like older versions of macOS.
+
+..
+
+.. bpo: 10978
+.. date: 2019-08-29-01-19-13
+.. nonce: J6FQYY
+.. section: Library
+
+Semaphores and BoundedSemaphores can now release more than one waiting
+thread at a time.
+
+..
+
+.. bpo: 37972
+.. date: 2019-08-28-21-40-12
+.. nonce: kP-n4L
+.. section: Library
+
+Subscripts to the `unittest.mock.call` objects now receive the same chaining
+mechanism as any other custom attributes, so that the following usage no
+longer raises a `TypeError`:
+
+call().foo().__getitem__('bar')
+
+Patch by blhsing
+
+..
+
+.. bpo: 37965
+.. date: 2019-08-28-14-04-18
+.. nonce: 7xGE-C
+.. section: Library
+
+Fix C compiler warning caused by distutils.ccompiler.CCompiler.has_function.
+
+..
+
+.. bpo: 37964
+.. date: 2019-08-27-21-19-28
+.. nonce: SxdnsF
+.. section: Library
+
+Add ``F_GETPATH`` command to :mod:`fcntl`.
+
+..
+
+.. bpo: 37960
+.. date: 2019-08-27-10-52-13
+.. nonce: CTY7Lw
+.. section: Library
+
+``repr()`` of buffered and text streams now silences only expected
+exceptions when get the value of "name" and "mode" attributes.
+
+..
+
+.. bpo: 37961
+.. date: 2019-08-27-10-30-44
+.. nonce: 4nm0zZ
+.. section: Library
+
+Add a ``total_nframe`` field to the traces collected by the tracemalloc
+module. This field indicates the original number of frames before it was
+truncated.
+
+..
+
+.. bpo: 37951
+.. date: 2019-08-27-10-03-48
+.. nonce: MfRQgL
+.. section: Library
+
+Most features of the subprocess module now work again in subinterpreters.
+Only *preexec_fn* is restricted in subinterpreters.
+
+..
+
+.. bpo: 36205
+.. date: 2019-08-27-03-53-26
+.. nonce: AfkGRl
+.. section: Library
+
+Fix the rusage implementation of time.process_time() to correctly report the
+sum of the system and user CPU time.
+
+..
+
+.. bpo: 37950
+.. date: 2019-08-26-10-45-51
+.. nonce: -K1IKT
+.. section: Library
+
+Fix :func:`ast.dump` when call with incompletely initialized node.
+
+..
+
+.. bpo: 34679
+.. date: 2019-08-25-18-07-48
+.. nonce: HECzL7
+.. section: Library
+
+Restores instantiation of Windows IOCP event loops from the non-main thread.
+
+..
+
+.. bpo: 36917
+.. date: 2019-08-25-14-56-42
+.. nonce: GBxdw2
+.. section: Library
+
+Add default implementation of the :meth:`ast.NodeVisitor.visit_Constant`
+method which emits a deprecation warning and calls corresponding methody
+``visit_Num()``, ``visit_Str()``, etc.
+
+..
+
+.. bpo: 37798
+.. date: 2019-08-24-16-54-49
+.. nonce: 7mRQCk
+.. section: Library
+
+Update test_statistics.py to verify that the statistics module works well
+for both C and Python implementations. Patch by Dong-hee Na
+
+..
+
+.. bpo: 26589
+.. date: 2019-08-23-00-55-19
+.. nonce: M1xyxG
+.. section: Library
+
+Added a new status code to the http module: 451
+UNAVAILABLE_FOR_LEGAL_REASONS
+
+..
+
+.. bpo: 37915
+.. date: 2019-08-22-16-13-27
+.. nonce: xyoZI5
+.. section: Library
+
+Fix a segmentation fault that appeared when comparing instances of
+``datetime.timezone`` and ``datetime.tzinfo`` objects. Patch by Pablo
+Galindo.
+
+..
+
+.. bpo: 32554
+.. date: 2019-08-22-01-49-05
+.. nonce: 4xiXyM
+.. section: Library
+
+Deprecate having random.seed() call hash on arbitrary types.
+
+..
+
+.. bpo: 9938
+.. date: 2019-08-21-16-38-56
+.. nonce: t3G7N9
+.. section: Library
+
+Add optional keyword argument ``exit_on_error`` for :class:`ArgumentParser`.
+
+..
+
+.. bpo: 37851
+.. date: 2019-08-21-13-43-04
+.. nonce: mIIfD_
+.. section: Library
+
+The :mod:`faulthandler` module no longer allocates its alternative stack at
+Python startup. Now the stack is only allocated at the first faulthandler
+usage.
+
+..
+
+.. bpo: 32793
+.. date: 2019-08-20-05-17-32
+.. nonce: cgpXl6
+.. section: Library
+
+Fix a duplicated debug message when :meth:`smtplib.SMTP.connect` is called.
+
+..
+
+.. bpo: 37885
+.. date: 2019-08-19-10-31-41
+.. nonce: 4Nc9sp
+.. section: Library
+
+venv: Don't generate unset variable warning on deactivate.
+
+..
+
+.. bpo: 37868
+.. date: 2019-08-17-22-33-54
+.. nonce: hp64fi
+.. section: Library
+
+Fix dataclasses.is_dataclass when given an instance that never raises
+AttributeError in __getattr__.  That is, an object that returns something
+for __dataclass_fields__ even if it's not a dataclass.
+
+..
+
+.. bpo: 37811
+.. date: 2019-08-14-21-41-07
+.. nonce: d1xYj7
+.. section: Library
+
+Fix ``socket`` module's ``socket.connect(address)`` function being unable to
+establish connection in case of interrupted system call. The problem was
+observed on all OSes which ``poll(2)`` system call can take only
+non-negative integers and -1 as a timeout value.
+
+..
+
+.. bpo: 37863
+.. date: 2019-08-14-20-46-39
+.. nonce: CkXqgX
+.. section: Library
+
+Optimizations for Fraction.__hash__ suggested by Tim Peters.
+
+..
+
+.. bpo: 21131
+.. date: 2019-08-14-15-34-23
+.. nonce: 0MMQRi
+.. section: Library
+
+Fix ``faulthandler.register(chain=True)`` stack. faulthandler now allocates
+a dedicated stack of ``SIGSTKSZ*2`` bytes, instead of just ``SIGSTKSZ``
+bytes. Calling the previous signal handler in faulthandler signal handler
+uses more than ``SIGSTKSZ`` bytes of stack memory on some platforms.
+
+..
+
+.. bpo: 37798
+.. date: 2019-08-14-13-51-24
+.. nonce: AmXrik
+.. section: Library
+
+Add C fastpath for statistics.NormalDist.inv_cdf() Patch by Dong-hee Na
+
+..
+
+.. bpo: 37804
+.. date: 2019-08-12-23-07-47
+.. nonce: Ene6L-
+.. section: Library
+
+Remove the deprecated method `threading.Thread.isAlive()`. Patch by Dong-hee
+Na.
+
+..
+
+.. bpo: 37819
+.. date: 2019-08-11-10-34-19
+.. nonce: LVJls-
+.. section: Library
+
+Add Fraction.as_integer_ratio() to match the corresponding methods in bool,
+int, float, and decimal.
+
+..
+
+.. bpo: 14465
+.. date: 2019-08-10-18-50-04
+.. nonce: qZGC4g
+.. section: Library
+
+Add an xml.etree.ElementTree.indent() function for pretty-printing XML
+trees. Contributed by Stefan Behnel.
+
+..
+
+.. bpo: 37810
+.. date: 2019-08-10-12-33-27
+.. nonce: d4zbvB
+.. section: Library
+
+Fix :mod:`difflib` ``?`` hint in diff output when dealing with tabs.  Patch
+by Anthony Sottile.
+
+..
+
+.. bpo: 37772
+.. date: 2019-08-07-23-48-09
+.. nonce: hLCvdn
+.. section: Library
+
+In ``zipfile.Path``, when adding implicit dirs, ensure that ancestral
+directories are added and that duplicates are excluded.
+
+..
+
+.. bpo: 18578
+.. date: 2019-08-07-19-34-07
+.. nonce: xfvdb_
+.. section: Library
+
+Renamed and documented `test.bytecode_helper` as
+`test.support.bytecode_helper`. Patch by Joannah Nanjekye.
+
+..
+
+.. bpo: 37785
+.. date: 2019-08-07-14-49-22
+.. nonce: y7OlT8
+.. section: Library
+
+Fix xgettext warnings in :mod:`argparse`.
+
+..
+
+.. bpo: 34488
+.. date: 2019-08-06-21-30-58
+.. nonce: OqxVo8
+.. section: Library
+
+:meth:`writelines` method of :class:`io.BytesIO` is now slightly faster when
+many small lines are passed. Patch by Sergey Fedoseev.
+
+..
+
+.. bpo: 37449
+.. date: 2019-08-04-17-22-33
+.. nonce: ycbL2z
+.. section: Library
+
+`ensurepip` now uses `importlib.resources.read_binary()` to read data
+instead of `pkgutil.get_data()`. Patch by Joannah Nanjekye.
+
+..
+
+.. bpo: 28292
+.. date: 2019-08-04-11-47-58
+.. nonce: vkihH5
+.. section: Library
+
+Mark calendar.py helper functions as being private.  The follows PEP 8
+guidance to maintain the style conventions in the module and it addresses a
+known case of user confusion.
+
+..
+
+.. bpo: 18049
+.. date: 2019-08-02-16-44-42
+.. nonce: OA4qBL
+.. section: Library
+
+Add definition of THREAD_STACK_SIZE for AIX in Python/thread_pthread.h The
+default thread stacksize caused crashes with the default recursion limit
+Patch by M Felt
+
+..
+
+.. bpo: 37742
+.. date: 2019-08-02-14-01-25
+.. nonce: f4Xn9S
+.. section: Library
+
+The logging.getLogger() API now returns the root logger when passed the name
+'root', whereas previously it returned a non-root logger named 'root'. This
+could affect cases where user code explicitly wants a non-root logger named
+'root', or instantiates a logger using logging.getLogger(__name__) in some
+top-level module called 'root.py'.
+
+..
+
+.. bpo: 37738
+.. date: 2019-08-01-17-11-16
+.. nonce: A3WWcT
+.. section: Library
+
+Fix the implementation of curses ``addch(str, color_pair)``: pass the color
+pair to ``setcchar()``, instead of always passing 0 as the color pair.
+
+..
+
+.. bpo: 37723
+.. date: 2019-07-31-16-49-01
+.. nonce: zq6tw8
+.. section: Library
+
+Fix performance regression on regular expression parsing with huge character
+sets. Patch by Yann Vaginay.
+
+..
+
+.. bpo: 35943
+.. date: 2019-07-31-15-52-51
+.. nonce: -KswoB
+.. section: Library
+
+The function :c:func:`PyImport_GetModule` now ensures any module it returns
+is fully initialized. Patch by Joannah Nanjekye.
+
+..
+
+.. bpo: 32178
+.. date: 2019-07-30-22-41-05
+.. nonce: X-IFLe
+.. section: Library
+
+Fix IndexError in :mod:`email` package when trying to parse invalid address
+fields starting with ``:``.
+
+..
+
+.. bpo: 37268
+.. date: 2019-07-30-01-27-29
+.. nonce: QDmA44
+.. section: Library
+
+The :mod:`parser` module is deprecated and will be removed in future
+versions of Python.
+
+..
+
+.. bpo: 11953
+.. date: 2019-07-29-21-39-45
+.. nonce: 4Hpwf9
+.. section: Library
+
+Completing WSA* error codes in :mod:`socket`.
+
+..
+
+.. bpo: 37685
+.. date: 2019-07-28-22-25-25
+.. nonce: _3bN9f
+.. section: Library
+
+Fixed comparisons of :class:`datetime.timedelta` and
+:class:`datetime.timezone`.
+
+..
+
+.. bpo: 37697
+.. date: 2019-07-28-17-44-21
+.. nonce: 7UV5d0
+.. section: Library
+
+Syncronize ``importlib.metadata`` with `importlib_metadata 0.19
+<https://gitlab.com/python-devs/importlib_metadata/-/milestones/20>`_,
+improving handling of EGG-INFO files and fixing a crash when entry point
+names contained colons.
+
+..
+
+.. bpo: 37695
+.. date: 2019-07-27-20-21-03
+.. nonce: QANdvg
+.. section: Library
+
+Correct :func:`curses.unget_wch` error message.  Patch by Anthony Sottile.
+
+..
+
+.. bpo: 37689
+.. date: 2019-07-27-18-00-43
+.. nonce: glEmZi
+.. section: Library
+
+Add :meth:`is_relative_to` in :class:`PurePath` to determine whether or not
+one path is relative to another.
+
+..
+
+.. bpo: 29553
+.. date: 2019-07-27-10-14-45
+.. nonce: TVeIDe
+.. section: Library
+
+Fixed :meth:`argparse.ArgumentParser.format_usage` for mutually exclusive
+groups. Patch by Andrew Nester.
+
+..
+
+.. bpo: 37691
+.. date: 2019-07-26-22-30-01
+.. nonce: 1Li3rx
+.. section: Library
+
+Let math.dist() accept coordinates as sequences (or iterables) rather than
+just tuples.
+
+..
+
+.. bpo: 37685
+.. date: 2019-07-26-00-12-29
+.. nonce: TqckMZ
+.. section: Library
+
+Fixed ``__eq__``, ``__lt__`` etc implementations in some classes. They now
+return :data:`NotImplemented` for unsupported type of the other operand.
+This allows the other operand to play role (for example the equality
+comparison with :data:`~unittest.mock.ANY` will return ``True``).
+
+..
+
+.. bpo: 37354
+.. date: 2019-07-25-10-28-40
+.. nonce: RT3_3H
+.. section: Library
+
+Make Activate.ps1 Powershell script static to allow for signing it.
+
+..
+
+.. bpo: 37664
+.. date: 2019-07-24-18-27-44
+.. nonce: o-GYZC
+.. section: Library
+
+Update wheels bundled with ensurepip (pip 19.2.3 and setuptools 41.2.0)
+
+..
+
+.. bpo: 37663
+.. date: 2019-07-24-14-38-53
+.. nonce: h4-9-1
+.. section: Library
+
+Bring consistency to venv shell activation scripts by always using
+__VENV_PROMPT__.
+
+..
+
+.. bpo: 37642
+.. date: 2019-07-21-20-59-31
+.. nonce: L61Bvy
+.. section: Library
+
+Allowed the pure Python implementation of :class:`datetime.timezone` to
+represent sub-minute offsets close to minimum and maximum boundaries,
+specifically in the ranges (23:59, 24:00) and (-23:59, 24:00). Patch by
+Ngalim Siregar
+
+..
+
+.. bpo: 36161
+.. date: 2019-07-20-01-17-43
+.. nonce: Fzf-f9
+.. section: Library
+
+In :mod:`posix`, use ``ttyname_r`` instead of ``ttyname`` for thread safety.
+
+..
+
+.. bpo: 36324
+.. date: 2019-07-19-22-44-41
+.. nonce: 1VjywS
+.. section: Library
+
+Make internal attributes for statistics.NormalDist() private.
+
+..
+
+.. bpo: 37555
+.. date: 2019-07-19-20-13-48
+.. nonce: S5am28
+.. section: Library
+
+Fix `NonCallableMock._call_matcher` returning tuple instead of `_Call`
+object when `self._spec_signature` exists. Patch by Elizabeth Uselton
+
+..
+
+.. bpo: 29446
+.. date: 2019-07-19-16-06-48
+.. nonce: iXGuoi
+.. section: Library
+
+Make `from tkinter import *` import only the expected objects.
+
+..
+
+.. bpo: 16970
+.. date: 2019-07-19-01-46-56
+.. nonce: GEASf5
+.. section: Library
+
+Adding a value error when an invalid value in passed to nargs Patch by
+Robert Leenders
+
+..
+
+.. bpo: 34443
+.. date: 2019-07-17-11-10-08
+.. nonce: OFnGqz
+.. section: Library
+
+Exceptions from :mod:`enum` now use the ``__qualname`` of the enum class in
+the exception message instead of the ``__name__``.
+
+..
+
+.. bpo: 37491
+.. date: 2019-07-17-06-54-43
+.. nonce: op0aMs
+.. section: Library
+
+Fix ``IndexError`` when parsing email headers with unexpectedly ending
+bare-quoted string value. Patch by Abhilash Raj.
+
+..
+
+.. bpo: 37587
+.. date: 2019-07-13-16-02-48
+.. nonce: fd-1aF
+.. section: Library
+
+Make json.loads faster for long strings. (Patch by Marco Paolini)
+
+..
+
+.. bpo: 18378
+.. date: 2019-07-13-13-40-12
+.. nonce: NHcojp
+.. section: Library
+
+Recognize "UTF-8" as a valid value for LC_CTYPE in locale._parse_localename.
+
+..
+
+.. bpo: 37579
+.. date: 2019-07-13-10-59-43
+.. nonce: B1Tq9i
+.. section: Library
+
+Return :exc:`NotImplemented` in Python implementation of ``__eq__`` for
+:class:`~datetime.timedelta` and :class:`~datetime.time` when the other
+object being compared is not of the same type to match C implementation.
+Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 21478
+.. date: 2019-07-10-23-07-11
+.. nonce: cCw9rF
+.. section: Library
+
+Record calls to parent when autospecced object is attached to a mock using
+:func:`unittest.mock.attach_mock`. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 37531
+.. date: 2019-07-09-19-38-26
+.. nonce: GX7s8S
+.. section: Library
+
+"python3 -m test -jN --timeout=TIMEOUT" now kills a worker process if it
+runs longer than *TIMEOUT* seconds.
+
+..
+
+.. bpo: 37482
+.. date: 2019-07-09-11-20-21
+.. nonce: auzvev
+.. section: Library
+
+Fix serialization of display name in originator or destination address
+fields with both encoded words and special chars.
+
+..
+
+.. bpo: 36993
+.. date: 2019-07-09-05-44-39
+.. nonce: 4javqu
+.. section: Library
+
+Improve error reporting for corrupt zip files with bad zip64 extra data.
+Patch by Daniel Hillier.
+
+..
+
+.. bpo: 37502
+.. date: 2019-07-08-03-15-04
+.. nonce: qZGC4g
+.. section: Library
+
+pickle.loads() no longer raises TypeError when the buffers argument is set
+to None
+
+..
+
+.. bpo: 37520
+.. date: 2019-07-07-21-09-08
+.. nonce: Gg0KD6
+.. section: Library
+
+Correct behavior for zipfile.Path.parent when the path object identifies a
+subdirectory.
+
+..
+
+.. bpo: 18374
+.. date: 2019-07-05-21-46-45
+.. nonce: qgE0H3
+.. section: Library
+
+Fix the ``.col_offset`` attribute of nested :class:`ast.BinOp` instances
+which had a too large value in some situations.
+
+..
+
+.. bpo: 37424
+.. date: 2019-07-04-13-00-20
+.. nonce: 0i1MR-
+.. section: Library
+
+Fixes a possible hang when using a timeout on `subprocess.run()` while
+capturing output.  If the child process spawned its own children or
+otherwise connected its stdout or stderr handles with another process, we
+could hang after the timeout was reached and our child was killed when
+attempting to read final output from the pipes.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-03-12-47-52
+.. nonce: gR5hC8
+.. section: Library
+
+Fix :func:`multiprocessing.util.get_temp_dir` finalizer: clear also the
+'tempdir' configuration of the current process, so next call to
+``get_temp_dir()`` will create a new temporary directory, rather than
+reusing the removed temporary directory.
+
+..
+
+.. bpo: 37481
+.. date: 2019-07-02-13-08-30
+.. nonce: hd5k09
+.. section: Library
+
+The distutils ``bdist_wininst`` command is deprecated in Python 3.8, use
+``bdist_wheel`` (wheel packages) instead.
+
+..
+
+.. bpo: 37479
+.. date: 2019-07-02-12-43-57
+.. nonce: O53a5S
+.. section: Library
+
+When `Enum.__str__` is overridden in a derived class, the override will be
+used by `Enum.__format__` regardless of whether mixin classes are present.
+
+..
+
+.. bpo: 37440
+.. date: 2019-06-28-16-40-17
+.. nonce: t3wX-N
+.. section: Library
+
+http.client now enables TLS 1.3 post-handshake authentication for default
+context or if a cert_file is passed to HTTPSConnection.
+
+..
+
+.. bpo: 37437
+.. date: 2019-06-27-20-33-50
+.. nonce: du39_A
+.. section: Library
+
+Update vendorized expat version to 2.2.7.
+
+..
+
+.. bpo: 37428
+.. date: 2019-06-27-13-27-02
+.. nonce: _wcwUd
+.. section: Library
+
+SSLContext.post_handshake_auth = True no longer sets
+SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the
+option is documented as ignored for clients, OpenSSL implicitly enables cert
+chain validation when the flag is set.
+
+..
+
+.. bpo: 37420
+.. date: 2019-06-26-22-25-05
+.. nonce: CxFJ09
+.. section: Library
+
+:func:`os.sched_setaffinity` now correctly handles errors that arise during
+iteration over its ``mask`` argument. Patch by Brandt Bucher.
+
+..
+
+.. bpo: 37412
+.. date: 2019-06-26-16-28-59
+.. nonce: lx0VjC
+.. section: Library
+
+The :func:`os.getcwdb` function now uses the UTF-8 encoding on Windows,
+rather than the ANSI code page: see :pep:`529` for the rationale. The
+function is no longer deprecated on Windows.
+
+..
+
+.. bpo: 37406
+.. date: 2019-06-26-03-00-06
+.. nonce: uovkpq
+.. section: Library
+
+The sqlite3 module now raises TypeError, rather than ValueError, if
+operation argument type is not str: execute(), executemany() and calling a
+connection.
+
+..
+
+.. bpo: 29412
+.. date: 2019-06-25-19-27-25
+.. nonce: n4Zqdh
+.. section: Library
+
+Fix IndexError in parsing a header value ending unexpectedly. Patch by
+Abhilash Raj.
+
+..
+
+.. bpo: 36546
+.. date: 2019-06-25-05-07-48
+.. nonce: RUcxaK
+.. section: Library
+
+The *dist* argument for statistics.quantiles() is now positional only. The
+current name doesn't reflect that the argument can be either a dataset or a
+distribution.  Marking the parameter as positional avoids confusion and
+makes it possible to change the name later.
+
+..
+
+.. bpo: 37394
+.. date: 2019-06-25-02-10-00
+.. nonce: srZ1zx
+.. section: Library
+
+Fix a bug that was causing the :mod:`queue` module to fail if the
+accelerator module was not available. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 37376
+.. date: 2019-06-24-11-26-34
+.. nonce: SwSUQ4
+.. section: Library
+
+:mod:`pprint` now has support for :class:`types.SimpleNamespace`. Patch by
+Carl Bordum Hansen.
+
+..
+
+.. bpo: 26967
+.. date: 2019-06-23-12-46-10
+.. nonce: xEuem1
+.. section: Library
+
+An :class:`~argparse.ArgumentParser` with ``allow_abbrev=False`` no longer
+disables grouping of short flags, such as ``-vv``, but only disables
+abbreviation of long flags as documented. Patch by Zac Hatfield-Dodds.
+
+..
+
+.. bpo: 37212
+.. date: 2019-06-22-22-00-35
+.. nonce: Zhv-tq
+.. section: Library
+
+:func:`unittest.mock.call` now preserves the order of keyword arguments in
+repr output. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 37372
+.. date: 2019-06-22-12-30-00
+.. nonce: kIKqZ6
+.. section: Library
+
+Fix error unpickling datetime.time objects from Python 2 with seconds>=24.
+Patch by Justin Blanchard.
+
+..
+
+.. bpo: 37345
+.. date: 2019-06-22-08-51-44
+.. nonce: o8XABX
+.. section: Library
+
+Add formal support for UDPLITE sockets. Support was present before, but it
+is now easier to detect support with ``hasattr(socket, 'IPPROTO_UDPLITE')``
+and there are constants defined for each of the values needed:
+:py:obj:`socket.IPPROTO_UDPLITE`, :py:obj:`UDPLITE_SEND_CSCOV`, and
+:py:obj:`UDPLITE_RECV_CSCOV`. Patch by Gabe Appleton.
+
+..
+
+.. bpo: 37358
+.. date: 2019-06-21-14-54-02
+.. nonce: RsASpn
+.. section: Library
+
+Optimized ``functools.partial`` by using vectorcall.
+
+..
+
+.. bpo: 37347
+.. date: 2019-06-20-14-23-48
+.. nonce: Gf9yYI
+.. section: Library
+
+:meth:`sqlite3.Connection.create_aggregate`,
+:meth:`sqlite3.Connection.create_function`,
+:meth:`sqlite3.Connection.set_authorizer`,
+:meth:`sqlite3.Connection.set_progress_handler`
+:meth:`sqlite3.Connection.set_trace_callback` methods lead to segfaults if
+some of these methods are called twice with an equal object but not the
+same. Now callbacks are stored more carefully. Patch by Aleksandr Balezin.
+
+..
+
+.. bpo: 37163
+.. date: 2019-06-19-10-35-53
+.. nonce: 9pPg2F
+.. section: Library
+
+The *obj* argument of :func:`dataclasses.replace` is positional-only now.
+
+..
+
+.. bpo: 37085
+.. date: 2019-06-18-16-29-31
+.. nonce: GeYaD6
+.. section: Library
+
+Add the optional Linux SocketCAN Broadcast Manager constants, used as flags
+to configure the BCM behaviour, in the socket module.  Patch by Karl Ding.
+
+..
+
+.. bpo: 37328
+.. date: 2019-06-18-15-31-33
+.. nonce: 2PW1-l
+.. section: Library
+
+``HTMLParser.unescape`` is removed.  It was undocumented and deprecated
+since Python 3.4.
+
+..
+
+.. bpo: 37305
+.. date: 2019-06-18-13-59-55
+.. nonce: fGzWlP
+.. section: Library
+
+Add .webmanifest -> application/manifest+json to list of recognized file
+types and content type headers
+
+..
+
+.. bpo: 37320
+.. date: 2019-06-17-22-10-37
+.. nonce: ffieYa
+.. section: Library
+
+``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to
+``sunau.open()``, and ``wave.openfp()`` alias to ``wave.open()`` have been
+removed. They were deprecated since Python 3.7.
+
+..
+
+.. bpo: 37315
+.. date: 2019-06-17-11-59-52
+.. nonce: o1xFC0
+.. section: Library
+
+Deprecated accepting floats with integral value (like ``5.0``) in
+:func:`math.factorial`.
+
+..
+
+.. bpo: 37312
+.. date: 2019-06-17-10-03-52
+.. nonce: qKvBfF
+.. section: Library
+
+``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
+modules were deprecated since Python 3.7 which requires threading support.
+
+..
+
+.. bpo: 33972
+.. date: 2019-06-15-14-39-50
+.. nonce: XxnNPw
+.. section: Library
+
+Email with single part but content-type set to ``multipart/*`` doesn't raise
+AttributeError anymore.
+
+..
+
+.. bpo: 37280
+.. date: 2019-06-14-13-30-47
+.. nonce: Fxur0F
+.. section: Library
+
+Use threadpool for reading from file for sendfile fallback mode.
+
+..
+
+.. bpo: 37279
+.. date: 2019-06-14-13-25-56
+.. nonce: OHlW6l
+.. section: Library
+
+Fix asyncio sendfile support when sendfile sends extra data in fallback
+mode.
+
+..
+
+.. bpo: 19865
+.. date: 2019-06-14-08-30-16
+.. nonce: FRGH4I
+.. section: Library
+
+:func:`ctypes.create_unicode_buffer()` now also supports non-BMP characters
+on platforms with 16-bit :c:type:`wchar_t` (for example, Windows and AIX).
+
+..
+
+.. bpo: 37266
+.. date: 2019-06-13-11-59-52
+.. nonce: goLjef
+.. section: Library
+
+In a subinterpreter, spawning a daemon thread now raises an exception.
+Daemon threads were never supported in subinterpreters. Previously, the
+subinterpreter finalization crashed with a Pyton fatal error if a daemon
+thread was still running.
+
+..
+
+.. bpo: 37210
+.. date: 2019-06-12-16-10-50
+.. nonce: r4yMg6
+.. section: Library
+
+Allow pure Python implementation of :mod:`pickle` to work even when the C
+:mod:`_pickle` module is unavailable.
+
+..
+
+.. bpo: 21872
+.. date: 2019-06-12-08-56-22
+.. nonce: V9QGGN
+.. section: Library
+
+Fix :mod:`lzma`: module decompresses data incompletely. When decompressing a
+FORMAT_ALONE format file, and it doesn't have the end marker, sometimes the
+last one to dozens bytes can't be output. Patch by Ma Lin.
+
+..
+
+.. bpo: 35922
+.. date: 2019-06-11-19-34-29
+.. nonce: rxpzWr
+.. section: Library
+
+Fix :meth:`RobotFileParser.crawl_delay` and
+:meth:`RobotFileParser.request_rate` to return ``None`` rather than raise
+:exc:`AttributeError` when no relevant rule is defined in the robots.txt
+file.  Patch by Rémi Lapeyre.
+
+..
+
+.. bpo: 35766
+.. date: 2019-06-11-16-41-40
+.. nonce: v1Kj-T
+.. section: Library
+
+Change the format of feature_version to be a (major, minor) tuple.
+
+..
+
+.. bpo: 36607
+.. date: 2019-06-11-13-52-04
+.. nonce: 5_mJkQ
+.. section: Library
+
+Eliminate :exc:`RuntimeError` raised by :func:`asyncio.all_tasks()` if
+internal tasks weak set is changed by another thread during iteration.
+
+..
+
+.. bpo: 18748
+.. date: 2019-06-11-01-54-19
+.. nonce: ADqCkq
+.. section: Library
+
+:class:`_pyio.IOBase` destructor now does nothing if getting the ``closed``
+attribute fails to better mimick :class:`_io.IOBase` finalizer.
+
+..
+
+.. bpo: 36402
+.. date: 2019-06-11-00-35-02
+.. nonce: b0IJVp
+.. section: Library
+
+Fix a race condition at Python shutdown when waiting for threads. Wait until
+the Python thread state of all non-daemon threads get deleted (join all
+non-daemon threads), rather than just wait until non-daemon Python threads
+complete.
+
+..
+
+.. bpo: 37206
+.. date: 2019-06-09-22-25-03
+.. nonce: 2WBg4q
+.. section: Library
+
+Default values which cannot be represented as Python objects no longer
+improperly represented as ``None`` in function signatures.
+
+..
+
+.. bpo: 37111
+.. date: 2019-06-09-17-22-33
+.. nonce: 2I0z2k
+.. section: Library
+
+Added ``encoding`` and ``errors`` keyword parameters to
+``logging.basicConfig``.
+
+..
+
+.. bpo: 12144
+.. date: 2019-06-08-23-26-58
+.. nonce: Z7mz-q
+.. section: Library
+
+Ensure cookies with ``expires`` attribute are handled in
+:meth:`CookieJar.make_cookies`.
+
+..
+
+.. bpo: 34886
+.. date: 2019-06-08-16-03-19
+.. nonce: Ov-pc9
+.. section: Library
+
+Fix an unintended ValueError from :func:`subprocess.run` when checking for
+conflicting `input` and `stdin` or `capture_output` and `stdout` or `stderr`
+args when they were explicitly provided but with `None` values within a
+passed in `**kwargs` dict rather than as passed directly by name. Patch
+contributed by Rémi Lapeyre.
+
+..
+
+.. bpo: 37173
+.. date: 2019-06-08-11-33-48
+.. nonce: 0e_8gS
+.. section: Library
+
+The exception message for ``inspect.getfile()`` now correctly reports the
+passed class rather than the builtins module.
+
+..
+
+.. bpo: 37178
+.. date: 2019-06-07-17-16-09
+.. nonce: Day_oB
+.. section: Library
+
+Give math.perm() a one argument form that means the same as
+math.factorial().
+
+..
+
+.. bpo: 37178
+.. date: 2019-06-07-17-11-34
+.. nonce: b1StSv
+.. section: Library
+
+For math.perm(n, k), let k default to n, giving the same result as
+factorial.
+
+..
+
+.. bpo: 37165
+.. date: 2019-06-05-11-48-19
+.. nonce: V_rwfE
+.. section: Library
+
+Converted _collections._count_elements to use the Argument Clinic.
+
+..
+
+.. bpo: 34767
+.. date: 2019-06-04-23-44-52
+.. nonce: BpDShN
+.. section: Library
+
+Do not always create a :class:`collections.deque` in :class:`asyncio.Lock`.
+
+..
+
+.. bpo: 37158
+.. date: 2019-06-04-22-25-38
+.. nonce: JKm15S
+.. section: Library
+
+Speed-up statistics.fmean() by switching from a function to a generator.
+
+..
+
+.. bpo: 34282
+.. date: 2019-06-04-15-39-14
+.. nonce: aAK54n
+.. section: Library
+
+Remove ``Enum._convert`` method, deprecated in 3.8.
+
+..
+
+.. bpo: 37150
+.. date: 2019-06-04-14-44-41
+.. nonce: TTzHxj
+.. section: Library
+
+`argparse._ActionsContainer.add_argument` now throws error, if someone
+accidentally pass FileType class object instead of instance of FileType as
+`type` argument
+
+..
+
+.. bpo: 28724
+.. date: 2019-05-30-15-51-42
+.. nonce: 34TrS8
+.. section: Library
+
+The socket module now has the :func:`socket.send_fds` and
+:func:`socket.recv.fds` methods. Contributed by Joannah Nanjekye, Shinya
+Okano and Victor Stinner.
+
+..
+
+.. bpo: 35621
+.. date: 2019-05-28-19-03-46
+.. nonce: Abc1lf
+.. section: Library
+
+Support running asyncio subprocesses when execution event loop in a thread
+on UNIX.
+
+..
+
+.. bpo: 36520
+.. date: 2019-05-28-02-37-00
+.. nonce: W4tday
+.. section: Library
+
+Lengthy email headers with UTF-8 characters are now properly encoded when
+they are folded. Patch by Jeffrey Kintscher.
+
+..
+
+.. bpo: 30835
+.. date: 2019-05-27-15-29-46
+.. nonce: 3FoaWH
+.. section: Library
+
+Fixed a bug in email parsing where a message with invalid bytes in
+content-transfer-encoding of a multipart message can cause an
+AttributeError. Patch by Andrew Donnellan.
+
+..
+
+.. bpo: 31163
+.. date: 2019-05-26-16-34-53
+.. nonce: 21A802
+.. section: Library
+
+pathlib.Path instance's rename and replace methods now return the new Path
+instance.
+
+..
+
+.. bpo: 25068
+.. date: 2019-05-22-04-52-35
+.. nonce: vR_rC-
+.. section: Library
+
+:class:`urllib.request.ProxyHandler` now lowercases the keys of the passed
+dictionary.
+
+..
+
+.. bpo: 26185
+.. date: 2019-05-20-14-17-29
+.. nonce: pQW4mI
+.. section: Library
+
+Fix :func:`repr` on empty :class:`ZipInfo` object. Patch by Mickaël
+Schoentgen.
+
+..
+
+.. bpo: 21315
+.. date: 2019-05-19-10-48-46
+.. nonce: PgXVqF
+.. section: Library
+
+Email headers containing RFC2047 encoded words are parsed despite the
+missing whitespace, and a defect registered. Also missing trailing
+whitespace after encoded words is now registered as a defect.
+
+..
+
+.. bpo: 31904
+.. date: 2019-05-17-16-50-02
+.. nonce: 4a5ggm
+.. section: Library
+
+Port test_datetime to VxWorks: skip zoneinfo tests on VxWorks
+
+..
+
+.. bpo: 35805
+.. date: 2019-05-17-15-11-08
+.. nonce: E4YwYz
+.. section: Library
+
+Add parser for Message-ID header and add it to default HeaderRegistry. This
+should prevent folding of Message-ID using RFC 2048 encoded words.
+
+..
+
+.. bpo: 36871
+.. date: 2019-05-12-12-58-37
+.. nonce: 6xiEHZ
+.. section: Library
+
+Ensure method signature is used instead of constructor signature of a class
+while asserting mock object against method calls. Patch by Karthikeyan
+Singaravelan.
+
+..
+
+.. bpo: 35070
+.. date: 2019-05-09-18-50-55
+.. nonce: 4vaqNL
+.. section: Library
+
+posix.getgrouplist() now works correctly when the user belongs to
+NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher.
+
+..
+
+.. bpo: 31783
+.. date: 2019-05-07-19-25-55
+.. nonce: lgLo69
+.. section: Library
+
+Fix race condition in ThreadPoolExecutor when worker threads are created
+during interpreter shutdown.
+
+..
+
+.. bpo: 36582
+.. date: 2019-05-07-17-42-36
+.. nonce: L_dxR6
+.. section: Library
+
+Fix ``UserString.encode()`` to correctly return ``bytes`` rather than a
+``UserString`` instance.
+
+..
+
+.. bpo: 32424
+.. date: 2019-04-28-10-34-19
+.. nonce: eqNPhM
+.. section: Library
+
+Deprecate xml.etree.ElementTree.Element.copy() in favor of copy.copy().
+
+Patch by Gordon P. Hemsley
+
+..
+
+.. bpo: 36564
+.. date: 2019-04-08-13-00-13
+.. nonce: _n67m_
+.. section: Library
+
+Fix infinite loop in email header folding logic that would be triggered when
+an email policy's max_line_length is not long enough to include the required
+markup and any values in the message. Patch by Paul Ganssle
+
+..
+
+.. bpo: 36543
+.. date: 2019-04-06-20-08-12
+.. nonce: RPjmUz
+.. section: Library
+
+Removed methods Element.getchildren(), Element.getiterator() and
+ElementTree.getiterator() and the xml.etree.cElementTree module.
+
+..
+
+.. bpo: 36409
+.. date: 2019-03-23-16-42-46
+.. nonce: ZYVKao
+.. section: Library
+
+Remove the old plistlib API deprecated in Python 3.4
+
+..
+
+.. bpo: 36302
+.. date: 2019-03-21-19-23-46
+.. nonce: Yc591g
+.. section: Library
+
+distutils sorts source file lists so that Extension .so files build more
+reproducibly by default
+
+..
+
+.. bpo: 36250
+.. date: 2019-03-09-16-04-12
+.. nonce: tSK4N1
+.. section: Library
+
+Ignore ``ValueError`` from ``signal`` with ``interaction`` in non-main
+thread.
+
+..
+
+.. bpo: 36046
+.. date: 2019-02-19-17-32-45
+.. nonce: fX9OPj
+.. section: Library
+
+Added ``user``, ``group`` and ``extra_groups`` parameters to the
+subprocess.Popen constructor. Patch by Patrick McLean.
+
+..
+
+.. bpo: 32627
+.. date: 2019-02-03-19-13-08
+.. nonce: b68f64
+.. section: Library
+
+Fix compile error when ``_uuid`` headers conflicting included.
+
+..
+
+.. bpo: 35800
+.. date: 2019-01-25-17-12-17
+.. nonce: MCGJdQ
+.. section: Library
+
+Deprecate ``smtpd.MailmanProxy`` ready for future removal.
+
+..
+
+.. bpo: 35168
+.. date: 2019-01-22-09-23-20
+.. nonce: UGv2yW
+.. section: Library
+
+:attr:`shlex.shlex.punctuation_chars` is now a read-only property.
+
+..
+
+.. bpo: 8538
+.. date: 2019-01-09-16-18-52
+.. nonce: PfVZia
+.. section: Library
+
+Add support for boolean actions like ``--foo`` and ``--no-foo`` to argparse.
+Patch contributed by Rémi Lapeyre.
+
+..
+
+.. bpo: 20504
+.. date: 2018-11-21-18-05-50
+.. nonce: kG0ub5
+.. section: Library
+
+Fixes a bug in :mod:`cgi` module when a multipart/form-data request has no
+`Content-Length` header.
+
+..
+
+.. bpo: 25988
+.. date: 2018-11-19-10-23-58
+.. nonce: 6o7gGK
+.. section: Library
+
+The abstract base classes in :mod:`collections.abc` no longer are exposed in
+the regular :mod:`collections` module.
+
+..
+
+.. bpo: 11122
+.. date: 2018-11-12-19-08-50
+.. nonce: Gj7BQn
+.. section: Library
+
+Distutils won't check for rpmbuild in specified paths only.
+
+..
+
+.. bpo: 34775
+.. date: 2018-09-23-03-18-52
+.. nonce: vHeuHk
+.. section: Library
+
+Division handling of PurePath now returns NotImplemented instead of raising
+a TypeError when passed something other than an instance of str or PurePath.
+Patch by Roger Aiudi.
+
+..
+
+.. bpo: 34749
+.. date: 2018-09-21-13-23-29
+.. nonce: B0k819
+.. section: Library
+
+:func:`binascii.a2b_base64` is now up to 2 times faster. Patch by Sergey
+Fedoseev.
+
+..
+
+.. bpo: 34519
+.. date: 2018-08-27-15-44-50
+.. nonce: cPlH1h
+.. section: Library
+
+Add additional aliases for HP Roman 8. Patch by Michael Osipov.
+
+..
+
+.. bpo: 28009
+.. date: 2018-08-04-12-26-11
+.. nonce: 4JcHZb
+.. section: Library
+
+Fix uuid.getnode() on platforms with '.' as MAC Addr delimiter as well fix
+for MAC Addr format that omits a leading 0 in MAC Addr values. Currently,
+AIX is the only know platform with these settings. Patch by Michael Felt.
+
+..
+
+.. bpo: 30618
+.. date: 2018-07-14-13-48-56
+.. nonce: T5AUF6
+.. section: Library
+
+Add :meth:`~pathlib.Path.readlink`. Patch by Girts Folkmanis.
+
+..
+
+.. bpo: 32498
+.. date: 2018-06-17-21-02-25
+.. nonce: La3TZz
+.. section: Library
+
+Made :func:`urllib.parse.unquote()` accept bytes in addition to strings.
+Patch by Stein Karlsen.
+
+..
+
+.. bpo: 33348
+.. date: 2018-04-24-13-18-48
+.. nonce: XaJDei
+.. section: Library
+
+lib2to3 now recognizes expressions after ``*`` and `**` like in ``f(*[] or
+[])``.
+
+..
+
+.. bpo: 32689
+.. date: 2018-02-13-17-58-30
+.. nonce: a-3SnH
+.. section: Library
+
+Update :func:`shutil.move` function to allow for Path objects to be used as
+source argument. Patch by Emily Morehouse and Maxwell "5.13b" McKinnon.
+
+..
+
+.. bpo: 32820
+.. date: 2018-02-13-12-25-43
+.. nonce: 0stF0u
+.. section: Library
+
+Added __format__ to IPv4 and IPv6 classes.  Always outputs a fully zero-
+padded string. Supports b/x/n modifiers (bin/hex/native format).  Native
+format for IPv4 is bin, native format for IPv6 is hex. Also supports '#' and
+'_' modifiers.
+
+..
+
+.. bpo: 27657
+.. date: 2017-12-26-14-32-23
+.. nonce: 6BhyVK
+.. section: Library
+
+Fix urllib.parse.urlparse() with numeric paths. A string like "path:80" is
+no longer parsed as a path but as a scheme ("path") and a path ("80").
+
+..
+
+.. bpo: 4963
+.. date: 2017-08-15-11-24-41
+.. nonce: LRYres
+.. section: Library
+
+Fixed non-deterministic behavior related to mimetypes extension mapping and
+module reinitialization.
+
+..
+
+.. bpo: 21767
+.. date: 2019-11-17-11-54-57
+.. nonce: Qq3Dos
+.. section: Documentation
+
+Explicitly mention abc support in functools.singledispatch
+
+..
+
+.. bpo: 38816
+.. date: 2019-11-15-11-39-13
+.. nonce: vUaSVL
+.. section: Documentation
+
+Provides more details about the interaction between :c:func:`fork` and
+CPython's runtime, focusing just on the C-API.  This includes cautions about
+where :c:func:`fork` should and shouldn't be called.
+
+..
+
+.. bpo: 38351
+.. date: 2019-11-15-09-22-28
+.. nonce: xwhlse
+.. section: Documentation
+
+Modernize :mod:`email` examples from %-formatting to f-strings.
+
+..
+
+.. bpo: 38778
+.. date: 2019-11-12-15-31-09
+.. nonce: PHhTlv
+.. section: Documentation
+
+Document the fact that :exc:`RuntimeError` is raised if :meth:`os.fork` is
+called in a subinterpreter.
+
+..
+
+.. bpo: 38592
+.. date: 2019-10-26-13-19-07
+.. nonce: Y96BYO
+.. section: Documentation
+
+Add Brazilian Portuguese to the language switcher at Python Documentation
+website.
+
+..
+
+.. bpo: 38294
+.. date: 2019-09-27-23-37-41
+.. nonce: go_jFf
+.. section: Documentation
+
+Add list of no-longer-escaped chars to re.escape documentation
+
+..
+
+.. bpo: 38053
+.. date: 2019-09-07-19-09-01
+.. nonce: lttibE
+.. section: Documentation
+
+Modernized the plistlib documentation
+
+..
+
+.. bpo: 26868
+.. date: 2019-09-07-15-55-46
+.. nonce: Raw0Gd
+.. section: Documentation
+
+Fix example usage of :c:func:`PyModule_AddObject` to properly handle errors.
+
+..
+
+.. bpo: 36797
+.. date: 2019-09-05-14-47-51
+.. nonce: KN9Ga5
+.. section: Documentation
+
+Fix a dead link in the distutils API Reference.
+
+..
+
+.. bpo: 37977
+.. date: 2019-08-29-14-38-01
+.. nonce: pML-UI
+.. section: Documentation
+
+Warn more strongly and clearly about pickle insecurity
+
+..
+
+.. bpo: 37979
+.. date: 2019-08-29-10-40-05
+.. nonce: TAUx_E
+.. section: Documentation
+
+Added a link to dateutil.parser.isoparse in the datetime.fromisoformat
+documentation. Patch by Paul Ganssle
+
+..
+
+.. bpo: 12707
+.. date: 2019-08-27-01-14-59
+.. nonce: Yj3_7_
+.. section: Documentation
+
+Deprecate info(), geturl(), getcode() methods in favor of the headers, url,
+and status properties, respectively, for HTTPResponse and addinfourl. Also
+deprecate the code attribute of addinfourl in favor of the status attribute.
+Patch by Ashwin Ramaswami
+
+..
+
+.. bpo: 37937
+.. date: 2019-08-24-12-59-06
+.. nonce: F7fHbt
+.. section: Documentation
+
+Mention ``frame.f_trace`` in :func:`sys.settrace` docs.
+
+..
+
+.. bpo: 37878
+.. date: 2019-08-16-20-01-10
+.. nonce: MvA6rZ
+.. section: Documentation
+
+Make :c:func:`PyThreadState_DeleteCurrent` Internal.
+
+..
+
+.. bpo: 37759
+.. date: 2019-08-04-19-20-58
+.. nonce: EHRF4i
+.. section: Documentation
+
+Beginning edits to Whatsnew 3.8
+
+..
+
+.. bpo: 37726
+.. date: 2019-07-31-11-40-06
+.. nonce: h-3o9a
+.. section: Documentation
+
+Stop recommending getopt in the tutorial for command line argument parsing
+and promote argparse.
+
+..
+
+.. bpo: 32910
+.. date: 2019-07-25-10-30-32
+.. nonce: caLLAe
+.. section: Documentation
+
+Remove implementation-specific behaviour of how venv's Deactivate works.
+
+..
+
+.. bpo: 37256
+.. date: 2019-07-16-14-48-12
+.. nonce: qJTrBb
+.. section: Documentation
+
+Fix wording of arguments for :class:`Request` in :mod:`urllib.request`
+
+..
+
+.. bpo: 37284
+.. date: 2019-07-13-12-58-20
+.. nonce: rP8WpB
+.. section: Documentation
+
+Add a brief note to indicate that any new ``sys.implementation`` required
+attributes must go through the PEP process.
+
+..
+
+.. bpo: 30088
+.. date: 2019-07-13-12-43-01
+.. nonce: CIcBjy
+.. section: Documentation
+
+Documented that :class:`mailbox.Maildir` constructor doesn't attempt to
+verify the maildir folder layout correctness. Patch by Sviatoslav Sydorenko.
+
+..
+
+.. bpo: 37521
+.. date: 2019-07-12-15-09-56
+.. nonce: 7tiFR-
+.. section: Documentation
+
+Fix `importlib` examples to insert any newly created modules via
+importlib.util.module_from_spec() immediately into sys.modules instead of
+after calling loader.exec_module().
+
+Thanks to Benjamin Mintz for finding the bug.
+
+..
+
+.. bpo: 37456
+.. date: 2019-07-06-17-51-36
+.. nonce: lgAQHn
+.. section: Documentation
+
+Slash ('/') is now part of syntax.
+
+..
+
+.. bpo: 37487
+.. date: 2019-07-06-17-19-26
+.. nonce: QagfZ5
+.. section: Documentation
+
+Fix PyList_GetItem index description to include 0.
+
+..
+
+.. bpo: 37149
+.. date: 2019-07-06-02-19-02
+.. nonce: NumHn3
+.. section: Documentation
+
+Replace the dead link to the Tkinter 8.5 reference by John Shipman, New
+Mexico Tech, with a link to the archive.org copy.
+
+..
+
+.. bpo: 37478
+.. date: 2019-07-06-00-57-27
+.. nonce: B0ioLw
+.. section: Documentation
+
+Added possible exceptions to the description of os.chdir().
+
+..
+
+.. bpo: 34903
+.. date: 2019-06-17-09-36-46
+.. nonce: r_wGRc
+.. section: Documentation
+
+Documented that in :meth:`datetime.datetime.strptime()`, the leading zero in
+some two-digit formats is optional. Patch by Mike Gleen.
+
+..
+
+.. bpo: 36260
+.. date: 2019-06-04-09-29-00
+.. nonce: WrGuc-
+.. section: Documentation
+
+Add decompression pitfalls to zipfile module documentation.
+
+..
+
+.. bpo: 37004
+.. date: 2019-05-22-04-30-07
+.. nonce: BRgxrt
+.. section: Documentation
+
+In the documentation for difflib, a note was added explicitly warning that
+the results of SequenceMatcher's ratio method may depend on the order of the
+input strings.
+
+..
+
+.. bpo: 36960
+.. date: 2019-05-18-16-25-44
+.. nonce: xEKHXj
+.. section: Documentation
+
+Restructured the :mod:`datetime` docs in the interest of making them more
+user-friendly and improving readability. Patch by Brad Solomon.
+
+..
+
+.. bpo: 36487
+.. date: 2019-04-02-19-23-00
+.. nonce: Jg6-MG
+.. section: Documentation
+
+Make C-API docs clear about what the "main" interpreter is.
+
+..
+
+.. bpo: 23460
+.. date: 2019-02-14-07-12-48
+.. nonce: Iqiqtm
+.. section: Documentation
+
+The documentation for decimal string formatting using the `:g` specifier has
+been updated to reflect the correct exponential notation cutoff point.
+Original patch contributed by Tuomas Suutari.
+
+..
+
+.. bpo: 35803
+.. date: 2019-01-21-14-30-59
+.. nonce: yae6Lq
+.. section: Documentation
+
+Document and test that ``tempfile`` functions may accept a :term:`path-like
+object` for the ``dir`` argument.  Patch by Anthony Sottile.
+
+..
+
+.. bpo: 33944
+.. date: 2018-10-26-18-10-29
+.. nonce: V1YeOA
+.. section: Documentation
+
+Added a note about the intended use of code in .pth files.
+
+..
+
+.. bpo: 34293
+.. date: 2018-07-31-15-38-26
+.. nonce: yHupAL
+.. section: Documentation
+
+Fix the Doc/Makefile regarding PAPER environment variable and PDF builds
+
+..
+
+.. bpo: 25237
+.. date: 2018-06-02-12-55-23
+.. nonce: m8-JMu
+.. section: Documentation
+
+Add documentation for tkinter modules
+
+..
+
+.. bpo: 38614
+.. date: 2019-10-30-15-12-32
+.. nonce: M6UnLB
+.. section: Tests
+
+Fix test_communicate() of test_asyncio.test_subprocess: use
+``support.LONG_TIMEOUT`` (5 minutes), instead of just 1 minute.
+
+..
+
+.. bpo: 38614
+.. date: 2019-10-28-15-56-02
+.. nonce: aDdDYE
+.. section: Tests
+
+Add timeout constants to :mod:`test.support`:
+:data:`~test.support.LOOPBACK_TIMEOUT`,
+:data:`~test.support.INTERNET_TIMEOUT`, :data:`~test.support.SHORT_TIMEOUT`
+and :data:`~test.support.LONG_TIMEOUT`.
+
+..
+
+.. bpo: 38502
+.. date: 2019-10-17-00-49-38
+.. nonce: vUEic7
+.. section: Tests
+
+test.regrtest now uses process groups in the multiprocessing mode (-jN
+command line option) if process groups are available: if :func:`os.setsid`
+and :func:`os.killpg` functions are available.
+
+..
+
+.. bpo: 35998
+.. date: 2019-10-16-01-36-15
+.. nonce: G305Bf
+.. section: Tests
+
+Fix a race condition in test_asyncio.test_start_tls_server_1(). Previously,
+there was a race condition between the test main() function which replaces
+the protocol and the test ServerProto protocol which sends ANSWER once it
+gets HELLO. Now, only the test main() function is responsible to send data,
+ServerProto no longer sends data.
+
+..
+
+.. bpo: 38470
+.. date: 2019-10-14-22-46-35
+.. nonce: NHtzpy
+.. section: Tests
+
+Fix ``test_compileall.test_compile_dir_maxlevels()`` on Windows without long
+path support: only create 3 subdirectories instead of between 20 and 100
+subdirectories.
+
+..
+
+.. bpo: 37531
+.. date: 2019-10-08-16-42-05
+.. nonce: 7v-_Ca
+.. section: Tests
+
+On timeout, regrtest no longer attempts to call ``popen.communicate()``
+again: it can hang until all child processes using stdout and stderr pipes
+completes. Kill the worker process and ignores its output. Change also the
+faulthandler timeout of the main process from 1 minute to 5 minutes, for
+Python slowest buildbots.
+
+..
+
+.. bpo: 38239
+.. date: 2019-09-26-15-48-36
+.. nonce: MfoVzY
+.. section: Tests
+
+Fix test_gdb for Link Time Optimization (LTO) builds.
+
+..
+
+.. bpo: 38275
+.. date: 2019-09-25-14-40-57
+.. nonce: -kdveI
+.. section: Tests
+
+test_ssl now handles disabled TLS/SSL versions better. OpenSSL's crypto
+policy and run-time settings are recognized and tests for disabled versions
+are skipped. Tests also accept more TLS minimum_versions for platforms that
+override OpenSSL's default with strict settings.
+
+..
+
+.. bpo: 38271
+.. date: 2019-09-25-13-11-29
+.. nonce: iHXNIg
+.. section: Tests
+
+The private keys for test_ssl were encrypted with 3DES in traditional PKCS#5
+format. 3DES and the digest algorithm of PKCS#5 are blocked by some strict
+crypto policies. Use PKCS#8 format with AES256 encryption instead.
+
+..
+
+.. bpo: 38270
+.. date: 2019-09-25-12-18-31
+.. nonce: _x-9uH
+.. section: Tests
+
+test.support now has a helper function to check for availibility of a hash
+digest function. Several tests are refactored avoid MD5 and use SHA256
+instead. Other tests are marked to use MD5 and skipped when MD5 is disabled.
+
+..
+
+.. bpo: 37123
+.. date: 2019-09-24-12-30-55
+.. nonce: IoutBn
+.. section: Tests
+
+Multiprocessing test test_mymanager() now also expects -SIGTERM, not only
+exitcode 0. BaseManager._finalize_manager() sends SIGTERM to the manager
+process if it takes longer than 1 second to stop, which happens on slow
+buildbots.
+
+..
+
+.. bpo: 38212
+.. date: 2019-09-24-12-24-05
+.. nonce: IWbhWz
+.. section: Tests
+
+Multiprocessing tests: increase test_queue_feeder_donot_stop_onexc() timeout
+from 1 to 60 seconds.
+
+..
+
+.. bpo: 38117
+.. date: 2019-09-11-17-22-32
+.. nonce: X7LgGY
+.. section: Tests
+
+Test with OpenSSL 1.1.1d
+
+..
+
+.. bpo: 38018
+.. date: 2019-09-03-19-33-10
+.. nonce: zTrMu7
+.. section: Tests
+
+Increase code coverage for multiprocessing.shared_memory.
+
+..
+
+.. bpo: 37805
+.. date: 2019-08-25-19-51-46
+.. nonce: Kl1sti
+.. section: Tests
+
+Add tests for json.dump(..., skipkeys=True). Patch by Dong-hee Na.
+
+..
+
+.. bpo: 37531
+.. date: 2019-08-20-19-24-19
+.. nonce: wRoXfU
+.. section: Tests
+
+Enhance regrtest multiprocess timeout: write a message when killing a worker
+process, catch popen.kill() and popen.wait() exceptions, put a timeout on
+the second call to popen.communicate().
+
+..
+
+.. bpo: 37876
+.. date: 2019-08-16-16-15-14
+.. nonce: m3k1w3
+.. section: Tests
+
+Add tests for ROT-13 codec.
+
+..
+
+.. bpo: 36833
+.. date: 2019-07-18-14-52-58
+.. nonce: Zoe9ek
+.. section: Tests
+
+Added tests for PyDateTime_xxx_GET_xxx() macros of the C API of the
+:mod:`datetime` module. Patch by Joannah Nanjekye.
+
+..
+
+.. bpo: 37558
+.. date: 2019-07-11-10-33-56
+.. nonce: SKHRsL
+.. section: Tests
+
+Fix test_shared_memory_cleaned_after_process_termination name handling
+
+..
+
+.. bpo: 37526
+.. date: 2019-07-09-12-33-18
+.. nonce: vmm5y7
+.. section: Tests
+
+Add :func:`test.support.catch_threading_exception`: context manager catching
+:class:`threading.Thread` exception using :func:`threading.excepthook`.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-08-10-11-36
+.. nonce: OY77go
+.. section: Tests
+
+test_concurrent_futures now explicitly stops the ForkServer instance if it's
+running.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-05-14-47-55
+.. nonce: n8o2to
+.. section: Tests
+
+multiprocessing tests now stop the ForkServer instance if it's running:
+close the "alive" file descriptor to ask the server to stop and then remove
+its UNIX address.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-03-00-05-28
+.. nonce: ORGRSG
+.. section: Tests
+
+test_distutils.test_build_ext() is now able to remove the temporary
+directory on Windows: don't import the newly built C extension ("xx") in the
+current process, but test it in a separated process.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-02-23-29-06
+.. nonce: WEfc5A
+.. section: Tests
+
+test_concurrent_futures now cleans up multiprocessing to remove immediately
+temporary directories created by multiprocessing.util.get_temp_dir().
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-02-23-20-35
+.. nonce: HCkKWz
+.. section: Tests
+
+test_winconsoleio doesn't leak a temporary file anymore: use
+tempfile.TemporaryFile() to remove it when the test completes.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-01-19-57-26
+.. nonce: NFH1f0
+.. section: Tests
+
+multiprocessing tests now explicitly call ``_run_finalizers()`` to
+immediately remove temporary directories created by tests.
+
+..
+
+.. bpo: 37421
+.. date: 2019-07-01-19-56-17
+.. nonce: bOe350
+.. section: Tests
+
+urllib.request tests now call :func:`~urllib.request.urlcleanup` to remove
+temporary files created by ``urlretrieve()`` tests and to clear the
+``_opener`` global variable set by ``urlopen()`` and functions calling
+indirectly ``urlopen()``.
+
+..
+
+.. bpo: 37472
+.. date: 2019-07-01-17-19-47
+.. nonce: WzkEAx
+.. section: Tests
+
+Remove ``Lib/test/outstanding_bugs.py``.
+
+..
+
+.. bpo: 37199
+.. date: 2019-06-29-23-56-28
+.. nonce: FHDsLf
+.. section: Tests
+
+Fix test failures when IPv6 is unavailable or disabled.
+
+..
+
+.. bpo: 19696
+.. date: 2019-06-29-16-02-21
+.. nonce: 05ijhN
+.. section: Tests
+
+Replace deprecated method "random.choose" with "random.choice" in
+"test_pkg_import.py".
+
+..
+
+.. bpo: 37335
+.. date: 2019-06-28-16-37-52
+.. nonce: o5S2hY
+.. section: Tests
+
+Remove no longer necessary code from c locale coercion tests
+
+..
+
+.. bpo: 37421
+.. date: 2019-06-27-00-37-59
+.. nonce: rVJb3x
+.. section: Tests
+
+Fix test_shutil to no longer leak temporary files.
+
+..
+
+.. bpo: 37411
+.. date: 2019-06-26-15-28-45
+.. nonce: 5lGNhM
+.. section: Tests
+
+Fix test_wsgiref.testEnviron() to no longer depend on the environment
+variables (don't fail if "X" variable is set).
+
+..
+
+.. bpo: 37400
+.. date: 2019-06-25-16-02-43
+.. nonce: cx_EWv
+.. section: Tests
+
+Fix test_os.test_chown(): use os.getgroups() rather than grp.getgrall() to
+get groups. Rename also the test to test_chown_gid().
+
+..
+
+.. bpo: 37359
+.. date: 2019-06-24-10-47-07
+.. nonce: CkdtyO
+.. section: Tests
+
+Add --cleanup option to python3 -m test to remove ``test_python_*``
+directories of previous failed jobs. Add "make cleantest" to run ``python3
+-m test --cleanup``.
+
+..
+
+.. bpo: 37362
+.. date: 2019-06-21-15-47-33
+.. nonce: D3xppx
+.. section: Tests
+
+test_gdb no longer fails if it gets an "unexpected" message on stderr: it
+now ignores stderr. The purpose of test_gdb is to test that python-gdb.py
+commands work as expected, not to test gdb.
+
+..
+
+.. bpo: 35998
+.. date: 2019-06-14-17-05-49
+.. nonce: yX82oD
+.. section: Tests
+
+Avoid TimeoutError in test_asyncio: test_start_tls_server_1()
+
+..
+
+.. bpo: 37278
+.. date: 2019-06-14-12-21-47
+.. nonce: z0HUOr
+.. section: Tests
+
+Fix test_asyncio ProactorLoopCtrlC: join the thread to prevent leaking a
+running thread and leaking a reference.
+
+..
+
+.. bpo: 37261
+.. date: 2019-06-13-12-19-56
+.. nonce: NuKFVo
+.. section: Tests
+
+Fix :func:`test.support.catch_unraisable_exception`: its __exit__() method
+now ignores unraisable exception raised when clearing its ``unraisable``
+attribute.
+
+..
+
+.. bpo: 37069
+.. date: 2019-06-13-00-46-25
+.. nonce: wdktFo
+.. section: Tests
+
+regrtest now uses :func:`sys.unraisablehook` to mark a test as "environment
+altered" (ENV_CHANGED) if it emits an "unraisable exception". Moreover,
+regrtest logs a warning in this case.
+
+Use ``python3 -m test --fail-env-changed`` to catch unraisable exceptions in
+tests.
+
+..
+
+.. bpo: 37252
+.. date: 2019-06-12-14-30-29
+.. nonce: 4o-uLs
+.. section: Tests
+
+Fix assertions in ``test_close`` and ``test_events_mask_overflow`` devpoll
+tests.
+
+..
+
+.. bpo: 37169
+.. date: 2019-06-07-12-23-15
+.. nonce: yfXTFg
+.. section: Tests
+
+Rewrite ``_PyObject_IsFreed()`` unit tests.
+
+..
+
+.. bpo: 37153
+.. date: 2019-06-04-18-30-39
+.. nonce: 711INB
+.. section: Tests
+
+``test_venv.test_multiprocessing()`` now explicitly calls
+``pool.terminate()`` to wait until the pool completes.
+
+..
+
+.. bpo: 34001
+.. date: 2019-06-03-20-47-10
+.. nonce: KvYx9z
+.. section: Tests
+
+Make test_ssl pass with LibreSSL. LibreSSL handles minimum and maximum TLS
+version differently than OpenSSL.
+
+..
+
+.. bpo: 36919
+.. date: 2019-05-28-15-41-34
+.. nonce: -vGt_m
+.. section: Tests
+
+Make ``test_source_encoding.test_issue2301`` implementation independent. The
+test will work now for both CPython and IronPython.
+
+..
+
+.. bpo: 30202
+.. date: 2019-04-15-19-05-35
+.. nonce: Wt7INj
+.. section: Tests
+
+Update ``test.test_importlib.test_abc`` to test ``find_spec()``.
+
+..
+
+.. bpo: 28009
+.. date: 2019-04-11-07-59-43
+.. nonce: s85urF
+.. section: Tests
+
+Modify the test_uuid logic to test when a program is available AND can be
+used to obtain a MACADDR as basis for an UUID. Patch by M. Felt
+
+..
+
+.. bpo: 34596
+.. date: 2018-09-07-01-18-27
+.. nonce: r2-EGd
+.. section: Tests
+
+Fallback to a default reason when :func:`unittest.skip` is uncalled. Patch
+by Naitree Zhu.
+
+..
+
+.. bpo: 38809
+.. date: 2019-11-15-09-25-44
+.. nonce: 9jwta6
+.. section: Build
+
+On Windows, build scripts will now recognize and use python.exe from an
+active virtual env.
+
+..
+
+.. bpo: 38684
+.. date: 2019-11-04-14-30-37
+.. nonce: aed593
+.. section: Build
+
+Fix _hashlib build when Blake2 is disabled, but OpenSSL supports it.
+
+..
+
+.. bpo: 38468
+.. date: 2019-10-13-16-18-24
+.. nonce: buCO84
+.. section: Build
+
+Misc/python-config.in now uses `getvar()` for all still existing
+`sysconfig.get_config_var()` calls. Patch by Joannah Nanjekye.
+
+..
+
+.. bpo: 37415
+.. date: 2019-10-11-15-32-58
+.. nonce: D9RXrq
+.. section: Build
+
+Fix stdatomic.h header check for ICC compiler: the ICC implementation lacks
+atomic_uintptr_t type which is needed by Python.
+
+..
+
+.. bpo: 38301
+.. date: 2019-09-28-02-37-11
+.. nonce: 123456
+.. section: Build
+
+In Solaris family, we must be sure to use ``-D_REENTRANT``. Patch by Jesús
+Cea Avión.
+
+..
+
+.. bpo: 36002
+.. date: 2019-09-13-14-12-36
+.. nonce: Bcl4oe
+.. section: Build
+
+Locate ``llvm-profdata`` and ``llvm-ar`` binaries using ``AC_PATH_TOOL``
+rather than ``AC_PATH_TARGET_TOOL``.
+
+..
+
+.. bpo: 37936
+.. date: 2019-09-10-00-54-48
+.. nonce: E7XEwu
+.. section: Build
+
+The :file:`.gitignore` file systematically keeps "rooted", with a
+non-trailing slash, all the rules that are meant to apply to files in a
+specific place in the repo.  Previously, when the intended file to ignore
+happened to be at the root of the repo, we'd most often accidentally also
+ignore files and directories with the same name anywhere in the tree.
+
+..
+
+.. bpo: 37760
+.. date: 2019-08-24-17-39-09
+.. nonce: f3jXuH
+.. section: Build
+
+The :file:`Tools/unicode/makeunicodedata.py` script, which is used for
+converting information from the Unicode Character Database into generated
+code and data used by the methods of :class:`str` and by the
+:mod:`unicodedata` module, now handles each character's data as a
+``dataclass`` with named attributes, rather than a length-18 list of
+different fields.
+
+..
+
+.. bpo: 37936
+.. date: 2019-08-24-00-29-40
+.. nonce: QrORqA
+.. section: Build
+
+The :file:`.gitignore` file no longer applies to any files that are in fact
+tracked in the Git repository.  Patch by Greg Price.
+
+..
+
+.. bpo: 37725
+.. date: 2019-07-30-16-26-11
+.. nonce: MkG1TT
+.. section: Build
+
+Change "clean" makefile target to also clean the program guided optimization
+(PGO) data.  Previously you would have to use "make clean" and "make
+profile-removal", or "make clobber".
+
+..
+
+.. bpo: 37707
+.. date: 2019-07-29-11-36-16
+.. nonce: Sm-dGk
+.. section: Build
+
+Mark some individual tests to skip when --pgo is used.  The tests marked
+increase the PGO task time significantly and likely don't help improve
+optimization of the final executable.
+
+..
+
+.. bpo: 36044
+.. date: 2019-07-11-01-28-24
+.. nonce: gIgfiJ
+.. section: Build
+
+Reduce the number of unit tests run for the PGO generation task.  This
+speeds up the task by a factor of about 15x.  Running the full unit test
+suite is slow.  This change may result in a slightly less optimized build
+since not as many code branches will be executed.  If you are willing to
+wait for the much slower build, the old behavior can be restored using
+'./configure [..] PROFILE_TASK="-m test --pgo-extended"'.  We make no
+guarantees as to which PGO task set produces a faster build.  Users who care
+should run their own relevant benchmarks as results can depend on the
+environment, workload, and compiler tool chain.
+
+..
+
+.. bpo: 37468
+.. date: 2019-07-01-14-39-40
+.. nonce: trbQ-_
+.. section: Build
+
+``make install`` no longer installs ``wininst-*.exe`` files used by
+distutils bdist_wininst: bdist_wininst only works on Windows.
+
+..
+
+.. bpo: 37189
+.. date: 2019-06-17-09-40-59
+.. nonce: j5ebdT
+.. section: Build
+
+Many ``PyRun_XXX()`` functions like :c:func:`PyRun_String` were no longer
+exported in ``libpython38.dll`` by mistake. Export them again to fix the ABI
+compatibility.
+
+..
+
+.. bpo: 25361
+.. date: 2019-03-19-22-07-37
+.. nonce: XO9Bfr
+.. section: Build
+
+Enables use of SSE2 instructions in Windows 32-bit build.
+
+..
+
+.. bpo: 36210
+.. date: 2019-03-06-18-55-10
+.. nonce: fup9H2
+.. section: Build
+
+Update optional extension module detection for AIX. ossaudiodev and spwd are
+not applicable for AIX, and are no longer reported as missing. 3rd-party
+packaging of ncurses (with ASIS support) conflicts with officially supported
+AIX curses library, so configure AIX to use libcurses.a. However, skip
+trying to build _curses_panel.
+
+patch by M Felt
+
+..
+
+.. bpo: 38589
+.. date: 2019-10-28-10-48-16
+.. nonce: V69Q1a
+.. section: Windows
+
+Fixes HTML Help shortcut when Windows is not installed to C drive
+
+..
+
+.. bpo: 38453
+.. date: 2019-10-28-10-32-43
+.. nonce: NwwatW
+.. section: Windows
+
+Ensure ntpath.realpath() correctly resolves relative paths.
+
+..
+
+.. bpo: 38519
+.. date: 2019-10-28-05-01-29
+.. nonce: dCkY66
+.. section: Windows
+
+Restores the internal C headers that were missing from the nuget.org and
+Microsoft Store packages.
+
+..
+
+.. bpo: 38492
+.. date: 2019-10-16-09-49-09
+.. nonce: Te1LxC
+.. section: Windows
+
+Remove ``pythonw.exe`` dependency on the Microsoft C++ runtime.
+
+..
+
+.. bpo: 38344
+.. date: 2019-10-05-05-50-58
+.. nonce: scr2LO
+.. section: Windows
+
+Fix error message in activate.bat
+
+..
+
+.. bpo: 38359
+.. date: 2019-10-03-08-04-14
+.. nonce: wzwsl_
+.. section: Windows
+
+Ensures ``pyw.exe`` launcher reads correct registry key.
+
+..
+
+.. bpo: 38355
+.. date: 2019-10-02-15-38-49
+.. nonce: n3AWX6
+.. section: Windows
+
+Fixes ``ntpath.realpath`` failing on ``sys.executable``.
+
+..
+
+.. bpo: 38117
+.. date: 2019-09-16-14-07-11
+.. nonce: hJVf0C
+.. section: Windows
+
+Update bundled OpenSSL to 1.1.1d
+
+..
+
+.. bpo: 38092
+.. date: 2019-09-13-14-11-42
+.. nonce: x31ehI
+.. section: Windows
+
+Reduce overhead when using multiprocessing in a Windows virtual environment.
+
+..
+
+.. bpo: 38133
+.. date: 2019-09-12-12-05-55
+.. nonce: yFeRGS
+.. section: Windows
+
+Allow py.exe launcher to locate installations from the Microsoft Store and
+improve display of active virtual environments.
+
+..
+
+.. bpo: 38114
+.. date: 2019-09-11-15-24-04
+.. nonce: cc0E5E
+.. section: Windows
+
+The ``pip.ini`` is no longer included in the Nuget package.
+
+..
+
+.. bpo: 32592
+.. date: 2019-09-11-14-51-56
+.. nonce: jvQMD9
+.. section: Windows
+
+Set Windows 8 as the minimum required version for API support
+
+..
+
+.. bpo: 36634
+.. date: 2019-09-11-14-42-04
+.. nonce: 8Un8ih
+.. section: Windows
+
+:func:`os.cpu_count` now returns active processors rather than maximum
+processors.
+
+..
+
+.. bpo: 36634
+.. date: 2019-09-11-12-34-31
+.. nonce: xLaGgb
+.. section: Windows
+
+venv activate.bat now works when the existing variables contain double quote
+characters.
+
+..
+
+.. bpo: 38081
+.. date: 2019-09-11-10-22-01
+.. nonce: 8JhzjD
+.. section: Windows
+
+Prevent error calling :func:`os.path.realpath` on ``'NUL'``.
+
+..
+
+.. bpo: 38087
+.. date: 2019-09-10-14-21-40
+.. nonce: --eIib
+.. section: Windows
+
+Fix case sensitivity in test_pathlib and test_ntpath.
+
+..
+
+.. bpo: 38088
+.. date: 2019-09-10-14-17-25
+.. nonce: FOvWSM
+.. section: Windows
+
+Fixes distutils not finding vcruntime140.dll with only the v142 toolset
+installed.
+
+..
+
+.. bpo: 37283
+.. date: 2019-09-09-12-22-23
+.. nonce: 8NvOkU
+.. section: Windows
+
+Ensure command-line and unattend.xml setting override previously detected
+states in Windows installer.
+
+..
+
+.. bpo: 38030
+.. date: 2019-09-04-14-01-08
+.. nonce: _USdtk
+.. section: Windows
+
+Fixes :func:`os.stat` failing for block devices on Windows
+
+..
+
+.. bpo: 38020
+.. date: 2019-09-03-11-47-37
+.. nonce: xFZ2j0
+.. section: Windows
+
+Fixes potential crash when calling :func:`os.readlink` (or indirectly
+through :func:`~os.path.realpath`) on a file that is not a supported link.
+
+..
+
+.. bpo: 37705
+.. date: 2019-08-30-15-15-22
+.. nonce: 2o4NWW
+.. section: Windows
+
+Improve the implementation of ``winerror_to_errno()``.
+
+..
+
+.. bpo: 37549
+.. date: 2019-08-22-09-04-44
+.. nonce: TpKI3M
+.. section: Windows
+
+:func:`os.dup` no longer fails for standard streams on Windows 7.
+
+..
+
+.. bpo: 1311
+.. date: 2019-08-21-12-58-18
+.. nonce: BoW1wU
+.. section: Windows
+
+The ``nul`` file on Windows now returns True from :func:`~os.path.exists`
+and a valid result from :func:`os.stat` with ``S_IFCHR`` set.
+
+..
+
+.. bpo: 9949
+.. date: 2019-08-14-13-40-15
+.. nonce: zW45Ks
+.. section: Windows
+
+Enable support for following symlinks in :func:`os.realpath`.
+
+..
+
+.. bpo: 37834
+.. date: 2019-08-12-12-00-24
+.. nonce: VB2QVj
+.. section: Windows
+
+Treat all name surrogate reparse points on Windows in :func:`os.lstat` and
+other reparse points as regular files in :func:`os.stat`.
+
+..
+
+.. bpo: 36266
+.. date: 2019-08-08-18-05-27
+.. nonce: x4eZU3
+.. section: Windows
+
+Add the module name in the formatted error message when DLL load fail
+happens during module import in ``_PyImport_FindSharedFuncptrWindows()``.
+Patch by Srinivas Nyayapati.
+
+..
+
+.. bpo: 25172
+.. date: 2019-08-06-18-09-18
+.. nonce: Akreij
+.. section: Windows
+
+Trying to import the :mod:`crypt` module on Windows will result in an
+:exc:`ImportError` with a message explaining that the module isn't supported
+on Windows. On other platforms, if the underlying ``_crypt`` module is not
+available, the ImportError will include a message explaining the problem.
+
+..
+
+.. bpo: 37778
+.. date: 2019-08-06-13-54-12
+.. nonce: AY1XhH
+.. section: Windows
+
+Fixes the icons used for file associations to the Microsoft Store package.
+
+..
+
+.. bpo: 37734
+.. date: 2019-08-06-09-35-12
+.. nonce: EoJ9Nh
+.. section: Windows
+
+Fix use of registry values to launch Python from Microsoft Store app.
+
+..
+
+.. bpo: 37702
+.. date: 2019-07-29-16-49-31
+.. nonce: Lj2f5e
+.. section: Windows
+
+Fix memory leak on Windows in creating an SSLContext object or running
+urllib.request.urlopen('https://...').
+
+..
+
+.. bpo: 37672
+.. date: 2019-07-24-14-36-28
+.. nonce: uKEVHN
+.. section: Windows
+
+Switch Windows Store package's pip to use bundled :file:`pip.ini` instead of
+:envvar:`PIP_USER` variable.
+
+..
+
+.. bpo: 10945
+.. date: 2019-07-01-12-38-48
+.. nonce: s0YBHG
+.. section: Windows
+
+Officially drop support for creating bdist_wininst installers on non-Windows
+systems.
+
+..
+
+.. bpo: 37445
+.. date: 2019-06-28-18-10-29
+.. nonce: LsdYO6
+.. section: Windows
+
+Include the ``FORMAT_MESSAGE_IGNORE_INSERTS`` flag in ``FormatMessageW()``
+calls.
+
+..
+
+.. bpo: 37369
+.. date: 2019-06-28-09-44-08
+.. nonce: 1iVpxq
+.. section: Windows
+
+Fixes path for :data:`sys.executable` when running from the Microsoft Store.
+
+..
+
+.. bpo: 37380
+.. date: 2019-06-25-04-15-22
+.. nonce: tPxjuz
+.. section: Windows
+
+Don't collect unfinished processes with ``subprocess._active`` on Windows to
+cleanup later. Patch by Ruslan Kuprieiev.
+
+..
+
+.. bpo: 37351
+.. date: 2019-06-20-12-50-32
+.. nonce: asTnVW
+.. section: Windows
+
+Removes libpython38.a from standard Windows distribution.
+
+..
+
+.. bpo: 35360
+.. date: 2019-06-18-09-05-08
+.. nonce: tdqSmo
+.. section: Windows
+
+Update Windows builds to use SQLite 3.28.0.
+
+..
+
+.. bpo: 37267
+.. date: 2019-06-13-04-15-51
+.. nonce: Ygo5ef
+.. section: Windows
+
+On Windows, :func:`os.dup` no longer creates an inheritable fd when handling
+a character file.
+
+..
+
+.. bpo: 36779
+.. date: 2019-06-11-15-41-34
+.. nonce: 0TMw6f
+.. section: Windows
+
+Ensure ``time.tzname`` is correct on Windows when the active code page is
+set to CP_UTF7 or CP_UTF8.
+
+..
+
+.. bpo: 32587
+.. date: 2019-05-10-15-25-44
+.. nonce: -0g2O3
+.. section: Windows
+
+Make :data:`winreg.REG_MULTI_SZ` support zero-length strings.
+
+..
+
+.. bpo: 28269
+.. date: 2019-05-05-05-23-34
+.. nonce: -MOHI7
+.. section: Windows
+
+Replace use of :c:func:`strcasecmp` for the system function
+:c:func:`_stricmp`. Patch by Minmin Gong.
+
+..
+
+.. bpo: 36590
+.. date: 2019-04-10-21-13-26
+.. nonce: ZTaKcu
+.. section: Windows
+
+Add native Bluetooth RFCOMM support to socket module.
+
+..
+
+.. bpo: 38117
+.. date: 2019-09-15-21-29-13
+.. nonce: ZLsoAZ
+.. section: macOS
+
+Updated OpenSSL to 1.1.1d in macOS installer.
+
+..
+
+.. bpo: 38089
+.. date: 2019-09-10-14-24-35
+.. nonce: eedgyD
+.. section: macOS
+
+Move Azure Pipelines to latest VM versions and make macOS tests optional
+
+..
+
+.. bpo: 18049
+.. date: 2019-07-13-15-58-18
+.. nonce: MklhQQ
+.. section: macOS
+
+Increase the default stack size of threads from 5MB to 16MB on macOS, to
+match the stack size of the main thread. This avoids crashes on deep
+recursion in threads.
+
+..
+
+.. bpo: 34602
+.. date: 2019-07-02-01-06-47
+.. nonce: 10d4wl
+.. section: macOS
+
+Avoid test suite failures on macOS by no longer calling resource.setrlimit
+to increase the process stack size limit at runtime.  The runtime change is
+no longer needed since the interpreter is being built with a larger default
+stack size.
+
+..
+
+.. bpo: 35360
+.. date: 2019-06-18-08-58-30
+.. nonce: -CWbfy
+.. section: macOS
+
+Update macOS installer to use SQLite 3.28.0.
+
+..
+
+.. bpo: 34631
+.. date: 2019-06-18-00-30-40
+.. nonce: vSifcv
+.. section: macOS
+
+Updated OpenSSL to 1.1.1c in macOS installer.
+
+..
+
+.. bpo: 26353
+.. date: 2019-11-09-23-55-59
+.. nonce: duYZiF
+.. section: IDLE
+
+Stop adding newline when saving an IDLE shell window.
+
+..
+
+.. bpo: 4630
+.. date: 2019-10-28-04-48-03
+.. nonce: upgjiV
+.. section: IDLE
+
+Add an option to toggle IDLE's cursor blink for shell, editor, and output
+windows.  See Settings, General, Window Preferences, Cursor Blink. Patch by
+Zackery Spytz.
+
+..
+
+.. bpo: 38598
+.. date: 2019-10-26-18-16-24
+.. nonce: 6kH9FY
+.. section: IDLE
+
+Do not try to compile IDLE shell or output windows
+
+..
+
+.. bpo: 36698
+.. date: 2019-10-04-18-03-09
+.. nonce: BKcmom
+.. section: IDLE
+
+IDLE no longer fails when write non-encodable characters to stderr.  It now
+escapes them with a backslash, as the regular Python interpreter. Added the
+``errors`` field to the standard streams.
+
+..
+
+.. bpo: 35379
+.. date: 2019-09-17-01-28-56
+.. nonce: yAECDr
+.. section: IDLE
+
+When exiting IDLE, catch any AttributeError.  One happens when
+EditorWindow.close is called twice.  Printing a traceback, when IDLE is run
+from a terminal, is useless and annoying.
+
+..
+
+.. bpo: 38183
+.. date: 2019-09-16-15-04-29
+.. nonce: eudCN1
+.. section: IDLE
+
+To avoid problems, test_idle ignores the user config directory. It no longer
+tries to create or access .idlerc or any files within. Users must run IDLE
+to discover problems with saving settings.
+
+..
+
+.. bpo: 38077
+.. date: 2019-09-09-22-08-36
+.. nonce: Mzpfe2
+.. section: IDLE
+
+IDLE no longer adds 'argv' to the user namespace when initializing it.  This
+bug only affected 3.7.4 and 3.8.0b2 to 3.8.0b4.
+
+..
+
+.. bpo: 38041
+.. date: 2019-09-05-23-12-13
+.. nonce: nxmGGK
+.. section: IDLE
+
+Shell restart lines now fill the window width, always start with '=', and
+avoid wrapping unnecessarily. The line will still wrap if the included file
+name is long relative to the width.
+
+..
+
+.. bpo: 35771
+.. date: 2019-09-01-10-22-55
+.. nonce: tdbmbP
+.. section: IDLE
+
+To avoid occasional spurious test_idle failures on slower machines, increase
+the ``hover_delay`` in test_tooltip.
+
+..
+
+.. bpo: 37824
+.. date: 2019-08-26-00-41-53
+.. nonce: YY5jAI
+.. section: IDLE
+
+Properly handle user input warnings in IDLE shell. Cease turning
+SyntaxWarnings into SyntaxErrors.
+
+..
+
+.. bpo: 37929
+.. date: 2019-08-24-22-00-33
+.. nonce: jb7523
+.. section: IDLE
+
+IDLE Settings dialog now closes properly when there is no shell window.
+
+..
+
+.. bpo: 37902
+.. date: 2019-08-21-16-02-49
+.. nonce: _R_adE
+.. section: IDLE
+
+Add mousewheel scrolling for IDLE module, path, and stack browsers. Patch by
+George Zhang.
+
+..
+
+.. bpo: 37849
+.. date: 2019-08-14-09-43-15
+.. nonce: -bcYF3
+.. section: IDLE
+
+Fixed completions list appearing too high or low when shown above the
+current line.
+
+..
+
+.. bpo: 36419
+.. date: 2019-08-04-17-10-01
+.. nonce: TJZqOc
+.. section: IDLE
+
+Refactor IDLE autocomplete and improve testing.
+
+..
+
+.. bpo: 37748
+.. date: 2019-08-04-15-27-50
+.. nonce: 0vf6pg
+.. section: IDLE
+
+Reorder the Run menu.  Put the most common choice, Run Module, at the top.
+
+..
+
+.. bpo: 37692
+.. date: 2019-07-27-15-14-20
+.. nonce: TRHGjD
+.. section: IDLE
+
+Improve highlight config sample with example shell interaction and better
+labels for shell elements.
+
+..
+
+.. bpo: 37628
+.. date: 2019-07-26-17-51-13
+.. nonce: kX4AUF
+.. section: IDLE
+
+Settings dialog no longer expands with font size.
+
+..
+
+.. bpo: 37627
+.. date: 2019-07-20-23-33-53
+.. nonce: dQhUNB
+.. section: IDLE
+
+Initialize the Customize Run dialog with the command line arguments most
+recently entered before.  The user can optionally edit before submitting
+them.
+
+..
+
+.. bpo: 33610
+.. date: 2019-07-18-10-11-36
+.. nonce: xYqMLg
+.. section: IDLE
+
+Fix code context not showing the correct context when first toggled on.
+
+..
+
+.. bpo: 37530
+.. date: 2019-07-11-00-05-31
+.. nonce: AuyCyD
+.. section: IDLE
+
+Optimize code context to reduce unneeded background activity. Font and
+highlight changes now occur along with text changes instead of after a
+random delay.
+
+..
+
+.. bpo: 27452
+.. date: 2019-07-03-22-47-44
+.. nonce: nePPLi
+.. section: IDLE
+
+Cleanup ``config.py`` by inlining ``RemoveFile`` and simplifying the
+handling of ``file`` in ``CreateConfigHandlers``.
+
+..
+
+.. bpo: 37325
+.. date: 2019-06-18-16-40-05
+.. nonce: GssOf1
+.. section: IDLE
+
+Fix tab focus traversal order for help source and custom run dialogs.
+
+..
+
+.. bpo: 37321
+.. date: 2019-06-17-16-35-30
+.. nonce: zVTTGS
+.. section: IDLE
+
+Both subprocess connection error messages now refer to the 'Startup failure'
+section of the IDLE doc.
+
+..
+
+.. bpo: 17535
+.. date: 2019-06-13-01-07-20
+.. nonce: K8i2St
+.. section: IDLE
+
+Add optional line numbers for IDLE editor windows.  Windows open without
+line numbers unless set otherwise in the General tab of the configuration
+dialog.
+
+..
+
+.. bpo: 26806
+.. date: 2019-06-10-22-48-50
+.. nonce: Zltkum
+.. section: IDLE
+
+To compensate for stack frames added by IDLE and avoid possible problems
+with low recursion limits, add 30 to limits in the user code execution
+process.  Subtract 30 when reporting recursion limits to make this addition
+mostly transparent.
+
+..
+
+.. bpo: 37177
+.. date: 2019-06-07-00-17-41
+.. nonce: voU6pQ
+.. section: IDLE
+
+Properly 'attach' search dialogs to their main window so that they behave
+like other dialogs and do not get hidden behind their main window.
+
+..
+
+.. bpo: 37039
+.. date: 2019-06-04-23-27-33
+.. nonce: FN_fBf
+.. section: IDLE
+
+Adjust "Zoom Height" to individual screens by momentarily maximizing the
+window on first use with a particular screen.  Changing screen settings may
+invalidate the saved height.  While a window is maximized, "Zoom Height" has
+no effect.
+
+..
+
+.. bpo: 35763
+.. date: 2019-06-04-20-36-24
+.. nonce: 7XdoWz
+.. section: IDLE
+
+Make calltip reminder about '/' meaning positional-only less obtrusive by
+only adding it when there is room on the first line.
+
+..
+
+.. bpo: 5680
+.. date: 2019-06-03-00-39-29
+.. nonce: VCQfOO
+.. section: IDLE
+
+Add 'Run... Customized' to the Run menu to run a module with customized
+settings.  Any 'command line arguments' entered are added to sys.argv. One
+can suppress the normal Shell main module restart.
+
+..
+
+.. bpo: 36390
+.. date: 2019-03-21-08-35-00
+.. nonce: OdDCGk
+.. section: IDLE
+
+Gather Format menu functions into format.py.  Combine paragraph.py,
+rstrip.py, and format methods from editor.py.
+
+..
+
+.. bpo: 38118
+.. date: 2019-10-08-15-07-52
+.. nonce: pIZD6H
+.. section: Tools/Demos
+
+Update Valgrind suppression file to ignore a false alarm in
+:c:func:`PyUnicode_Decode` when using GCC builtin strcmp().
+
+..
+
+.. bpo: 38347
+.. date: 2019-10-02-09-48-42
+.. nonce: 2Tq5D1
+.. section: Tools/Demos
+
+pathfix.py: Assume all files that end on '.py' are Python scripts when
+working recursively.
+
+..
+
+.. bpo: 37803
+.. date: 2019-09-12-16-15-55
+.. nonce: chEizy
+.. section: Tools/Demos
+
+pdb's ``--help`` and ``--version`` long options now work.
+
+..
+
+.. bpo: 37942
+.. date: 2019-08-24-12-11-30
+.. nonce: 7H8N9a
+.. section: Tools/Demos
+
+Improve ArgumentClinic converter for floats.
+
+..
+
+.. bpo: 37704
+.. date: 2019-07-29-13-59-19
+.. nonce: xxGUz_
+.. section: Tools/Demos
+
+Remove ``Tools/scripts/h2py.py``: use cffi to access a C API in Python.
+
+..
+
+.. bpo: 37675
+.. date: 2019-07-24-16-20-54
+.. nonce: 951Cvf
+.. section: Tools/Demos
+
+2to3 now works when run from a zipped standard library.
+
+..
+
+.. bpo: 37034
+.. date: 2019-05-27-16-13-08
+.. nonce: zbTgy8
+.. section: Tools/Demos
+
+Argument Clinic now uses the argument name on errors with keyword-only
+argument instead of their position. Patch contributed by Rémi Lapeyre.
+
+..
+
+.. bpo: 37064
+.. date: 2019-05-27-15-26-12
+.. nonce: k_SPW2
+.. section: Tools/Demos
+
+Add option -k to pathscript.py script: preserve shebang flags. Add option -a
+to pathscript.py script: add flags.
+
+..
+
+.. bpo: 37633
+.. date: 2019-11-04-21-10-47
+.. nonce: oOGVdo
+.. section: C API
+
+Re-export some function compatibility wrappers for macros in ``pythonrun.h``.
+
+..
+
+.. bpo: 38644
+.. date: 2019-11-04-17-59-46
+.. nonce: euO_RR
+.. section: C API
+
+Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall`
+as regular functions for the limited API. Previously, there were defined as
+macros, but these macros didn't work with the limited API which cannot
+access ``PyThreadState.recursion_depth`` field. Remove
+``_Py_CheckRecursionLimit`` from the stable ABI.
+
+..
+
+.. bpo: 38650
+.. date: 2019-10-30-22-03-03
+.. nonce: 0pi8zt
+.. section: C API
+
+The global variable :c:data:`PyStructSequence_UnnamedField` is now a
+constant and refers to a constant string.
+
+..
+
+.. bpo: 38540
+.. date: 2019-10-21-09-24-03
+.. nonce: 314N_T
+.. section: C API
+
+Fixed possible leak in :c:func:`PyArg_Parse` and similar functions for
+format units ``"es#"`` and ``"et#"`` when the macro
+:c:macro:`PY_SSIZE_T_CLEAN` is not defined.
+
+..
+
+.. bpo: 38395
+.. date: 2019-10-08-01-23-24
+.. nonce: MJ6Ey9
+.. section: C API
+
+Fix a crash in :class:`weakref.proxy` objects due to incorrect lifetime
+management when calling some associated methods that may delete the last
+reference to object being referenced by the proxy. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 36389
+.. date: 2019-10-07-17-15-09
+.. nonce: hFX_jD
+.. section: C API
+
+The ``_PyObject_CheckConsistency()`` function is now also available in
+release mode. For example, it can be used to debug a crash in the
+``visit_decref()`` function of the GC.
+
+..
+
+.. bpo: 38266
+.. date: 2019-10-03-12-53-53
+.. nonce: 0FIC1q
+.. section: C API
+
+Revert the removal of PyThreadState_DeleteCurrent() with documentation.
+
+..
+
+.. bpo: 38303
+.. date: 2019-09-30-16-53-30
+.. nonce: YoIs0M
+.. section: C API
+
+Update audioop extension module to use the stable ABI (PEP-384). Patch by
+Tyler Kieft.
+
+..
+
+.. bpo: 38234
+.. date: 2019-09-24-17-09-48
+.. nonce: d0bhEA
+.. section: C API
+
+:c:func:`Py_SetPath` now sets :data:`sys.executable` to the program full
+path (:c:func:`Py_GetProgramFullPath`) rather than to the program name
+(:c:func:`Py_GetProgramName`).
+
+..
+
+.. bpo: 38234
+.. date: 2019-09-20-17-22-41
+.. nonce: ZbquVK
+.. section: C API
+
+Python ignored arguments passed to :c:func:`Py_SetPath`,
+:c:func:`Py_SetPythonHome` and :c:func:`Py_SetProgramName`: fix Python
+initialization to use specified arguments.
+
+..
+
+.. bpo: 38205
+.. date: 2019-09-19-18-26-29
+.. nonce: Db1OJL
+.. section: C API
+
+The :c:func:`Py_UNREACHABLE` macro now calls :c:func:`Py_FatalError`.
+
+..
+
+.. bpo: 38140
+.. date: 2019-09-13-01-24-47
+.. nonce: y59qaO
+.. section: C API
+
+Make dict and weakref offsets opaque for C heap types by passing the offsets
+through PyMemberDef
+
+..
+
+.. bpo: 15088
+.. date: 2019-09-05-14-17-21
+.. nonce: plt8Em
+.. section: C API
+
+The C function ``PyGen_NeedsFinalizing`` has been removed. It was not
+documented, tested or used anywhere within CPython after the implementation
+of :pep:`442`. Patch by Joannah Nanjekye. (Patch by Joannah Nanjekye)
+
+..
+
+.. bpo: 36763
+.. date: 2019-08-23-18-45-11
+.. nonce: q3Kh8Z
+.. section: C API
+
+Options added by ``PySys_AddXOption()`` are now handled the same way than
+``PyConfig.xoptions`` and command line ``-X`` options.
+
+..
+
+.. bpo: 37926
+.. date: 2019-08-23-11-35-55
+.. nonce: hnI5IQ
+.. section: C API
+
+Fix a crash in ``PySys_SetArgvEx(0, NULL, 0)``.
+
+..
+
+.. bpo: 37879
+.. date: 2019-08-17-13-50-21
+.. nonce: CZeUem
+.. section: C API
+
+Fix subtype_dealloc to suppress the type decref when the base type is a C
+heap type
+
+..
+
+.. bpo: 37645
+.. date: 2019-07-21-21-08-47
+.. nonce: 4DcUaI
+.. section: C API
+
+Add :c:func:`_PyObject_FunctionStr` to get a user-friendly string
+representation of a function-like object. Patch by Jeroen Demeyer.
+
+..
+
+.. bpo: 29548
+.. date: 2019-07-17-09-50-50
+.. nonce: 5wIptQ
+.. section: C API
+
+The functions ``PyEval_CallObject``, ``PyEval_CallFunction``,
+``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated.
+Use :c:func:`PyObject_Call` and its variants instead.
+
+..
+
+.. bpo: 37151
+.. date: 2019-07-16-11-02-00
+.. nonce: YKfuNA
+.. section: C API
+
+``PyCFunction_Call`` is now a deprecated alias of :c:func:`PyObject_Call`.
+
+..
+
+.. bpo: 37540
+.. date: 2019-07-10-12-27-28
+.. nonce: E8Z773
+.. section: C API
+
+The vectorcall protocol now requires that the caller passes only strings as
+keyword names.
+
+..
+
+.. bpo: 37207
+.. date: 2019-07-07-10-37-07
+.. nonce: SlVNky
+.. section: C API
+
+The vectorcall protocol is now enabled for ``type`` objects: set
+``tp_vectorcall`` to a vectorcall function to be used instead of ``tp_new``
+and ``tp_init`` when calling the class itself.
+
+..
+
+.. bpo: 21120
+.. date: 2019-07-06-23-56-47
+.. nonce: lXHqlT
+.. section: C API
+
+Exclude Python-ast.h, ast.h and asdl.h from the limited API.
+
+..
+
+.. bpo: 37483
+.. date: 2019-07-02-15-42-37
+.. nonce: vftT4f
+.. section: C API
+
+Add new function ``_PyObject_CallOneArg`` for calling an object with one
+positional argument.
+
+..
+
+.. bpo: 36763
+.. date: 2019-06-28-15-49-16
+.. nonce: zrmgki
+.. section: C API
+
+Add :func:`PyConfig_SetWideStringList` function.
+
+..
+
+.. bpo: 37337
+.. date: 2019-06-19-12-06-31
+.. nonce: gXIGyU
+.. section: C API
+
+Add fast functions for calling methods:
+:c:func:`_PyObject_VectorcallMethod`, :c:func:`_PyObject_CallMethodNoArgs`
+and :c:func:`_PyObject_CallMethodOneArg`.
+
+..
+
+.. bpo: 28805
+.. date: 2019-06-14-14-03-51
+.. nonce: qZC0N_
+.. section: C API
+
+The :const:`METH_FASTCALL` calling convention has been documented.
+
+..
+
+.. bpo: 37221
+.. date: 2019-06-11-02-50-38
+.. nonce: 4tClQT
+.. section: C API
+
+The new function :c:func:`PyCode_NewWithPosOnlyArgs` allows to create code
+objects like :c:func:`PyCode_New`, but with an extra *posonlyargcount*
+parameter for indicating the number of positonal-only arguments.
+
+..
+
+.. bpo: 37215
+.. date: 2019-06-10-15-32-34
+.. nonce: yzoNyU
+.. section: C API
+
+Fix dtrace issue introduce by bpo-36842
+
+..
+
+.. bpo: 37194
+.. date: 2019-06-07-14-03-52
+.. nonce: uck7MD
+.. section: C API
+
+Add a new public :c:func:`PyObject_CallNoArgs` function to the C API: call a
+callable Python object without any arguments. It is the most efficient way
+to call a callback without any argument. On x86-64, for example,
+``PyObject_CallFunctionObjArgs(func, NULL)`` allocates 960 bytes on the
+stack per call, whereas ``PyObject_CallNoArgs(func)`` only allocates 624
+bytes per call.
+
+..
+
+.. bpo: 37170
+.. date: 2019-06-06-08-47-04
+.. nonce: hO_fpM
+.. section: C API
+
+Fix the cast on error in :c:func:`PyLong_AsUnsignedLongLongMask()`.
+
+..
+
+.. bpo: 35381
+.. date: 2019-01-18-17-05-26
+.. nonce: 9CbeW3
+.. section: C API
+
+Convert posixmodule.c statically allocated types ``DirEntryType`` and
+``ScandirIteratorType`` to heap-allocated types.
+
+..
+
+.. bpo: 34331
+.. date: 2018-08-04-00-59-44
+.. nonce: iaUkmU
+.. section: C API
+
+Use singular/plural noun in error message when instantiating an abstract
+class with non-overriden abstract method(s).
diff --git a/Misc/NEWS.d/3.9.0a2.rst b/Misc/NEWS.d/3.9.0a2.rst
new file mode 100644
index 0000000..226ea0d
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a2.rst
@@ -0,0 +1,957 @@
+.. bpo: 38945
+.. date: 2019-12-01-22-44-40
+.. nonce: ztmNXc
+.. release date: 2019-12-18
+.. section: Security
+
+Newline characters have been escaped when performing uu encoding to prevent
+them from overflowing into to content section of the encoded file. This
+prevents malicious or accidental modification of data during the decoding
+process.
+
+..
+
+.. bpo: 37228
+.. date: 2019-11-21-21-36-54
+.. nonce: yBZnFG
+.. section: Security
+
+Due to significant security concerns, the *reuse_address* parameter of
+:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This
+is because of the behavior of ``SO_REUSEADDR`` in UDP. For more details, see
+the documentation for ``loop.create_datagram_endpoint()``. (Contributed by
+Kyle Stanley, Antoine Pitrou, and Yury Selivanov in :issue:`37228`.)
+
+..
+
+.. bpo: 38804
+.. date: 2019-11-15-00-54-42
+.. nonce: vjbM8V
+.. section: Security
+
+Fixes a ReDoS vulnerability in :mod:`http.cookiejar`. Patch by Ben Caller.
+
+..
+
+.. bpo: 39028
+.. date: 2019-12-17-23-20-51
+.. nonce: SND4TB
+.. section: Core and Builtins
+
+Slightly improve the speed of keyword argument parsing with many kwargs by
+strengthening the assumption that kwargs are interned strings.
+
+..
+
+.. bpo: 39080
+.. date: 2019-12-17-21-45-36
+.. nonce: OrxEVS
+.. section: Core and Builtins
+
+Fix the value of *end_col_offset* for Starred Expression AST nodes when they
+are among the elements in the *args* attribute of Call AST nodes.
+
+..
+
+.. bpo: 39031
+.. date: 2019-12-12-21-05-43
+.. nonce: imlCYZ
+.. section: Core and Builtins
+
+When parsing an "elif" node, lineno and col_offset of the node now point to
+the "elif" keyword and not to its condition, making it consistent with the
+"if" node. Patch by Lysandros Nikolaou.
+
+..
+
+.. bpo: 20443
+.. date: 2019-12-09-17-05-53
+.. nonce: 8OyT5P
+.. section: Core and Builtins
+
+In Python 3.9.0a1, sys.argv[0] was made an absolute path if a filename was
+specified on the command line. Revert this change, since most users expect
+sys.argv to be unmodified.
+
+..
+
+.. bpo: 39008
+.. date: 2019-12-09-10-38-51
+.. nonce: Rrp6f1
+.. section: Core and Builtins
+
+:c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used for size
+arguments in the format string, regardless of whether ``PY_SSIZE_T_CLEAN``
+was defined at include time.
+
+..
+
+.. bpo: 38673
+.. date: 2019-12-01-00-17-44
+.. nonce: K_Tze-
+.. section: Core and Builtins
+
+In REPL mode, don't switch to PS2 if the line starts with comment or
+whitespace. Based on work by Batuhan Taşkaya.
+
+..
+
+.. bpo: 38922
+.. date: 2019-11-26-12-20-34
+.. nonce: i6ja-i
+.. section: Core and Builtins
+
+Calling ``replace`` on a code object now raises the ``code.__new__`` audit
+event.
+
+..
+
+.. bpo: 38920
+.. date: 2019-11-26-09-16-47
+.. nonce: Vx__sT
+.. section: Core and Builtins
+
+Add audit hooks for when :func:`sys.excepthook` and
+:func:`sys.unraisablehook` are invoked.
+
+..
+
+.. bpo: 38892
+.. date: 2019-11-22-22-18-50
+.. nonce: LS586s
+.. section: Core and Builtins
+
+Improve documentation for audit events table and functions.
+
+..
+
+.. bpo: 38852
+.. date: 2019-11-22-09-55-21
+.. nonce: y7oPEa
+.. section: Core and Builtins
+
+Set the thread stack size to 8 Mb for debug builds on android platforms.
+
+..
+
+.. bpo: 38858
+.. date: 2019-11-21-09-02-49
+.. nonce: bDLH04
+.. section: Core and Builtins
+
+Each Python subinterpreter now has its own "small integer singletons":
+numbers in [-5; 257] range. It is no longer possible to change the number of
+small integers at build time by overriding ``NSMALLNEGINTS`` and
+``NSMALLPOSINTS`` macros: macros should now be modified manually in
+``pycore_pystate.h`` header file.
+
+..
+
+.. bpo: 36854
+.. date: 2019-11-20-12-01-37
+.. nonce: Zga_md
+.. section: Core and Builtins
+
+The garbage collector state becomes per interpreter
+(``PyInterpreterState.gc``), rather than being global
+(``_PyRuntimeState.gc``).
+
+..
+
+.. bpo: 38835
+.. date: 2019-11-18-16-37-49
+.. nonce: -U4se1
+.. section: Core and Builtins
+
+The ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros are empty:
+they have been doing nothing for the last year, so stop using them.
+
+..
+
+.. bpo: 38328
+.. date: 2019-11-11-23-44-15
+.. nonce: IFrrjq
+.. section: Core and Builtins
+
+Sped up the creation time of constant :class:`list` and :class:`set`
+displays. Patch by Brandt Bucher.
+
+..
+
+.. bpo: 38707
+.. date: 2019-11-08-00-36-10
+.. nonce: SZL036
+.. section: Core and Builtins
+
+``MainThread.native_id`` is now correctly reset in child processes spawned
+using :class:`multiprocessing.Process`, instead of retaining the parent's
+value.
+
+..
+
+.. bpo: 38629
+.. date: 2019-10-29-17-11-15
+.. nonce: 3qinhF
+.. section: Core and Builtins
+
+Added ``__floor__`` and ``__ceil__`` methods to float object. Patch by
+Batuhan Taşkaya.
+
+..
+
+.. bpo: 27145
+.. date: 2019-09-06-16-40-12
+.. nonce: njuCXU
+.. section: Core and Builtins
+
+int + int and int - int operators can now return small integer singletons.
+Patch by hongweipeng.
+
+..
+
+.. bpo: 38021
+.. date: 2019-09-03-19-16-57
+.. nonce: KnUhdB
+.. section: Core and Builtins
+
+Provide a platform tag for AIX that is sufficient for PEP425 binary
+distribution identification. Patch by Michael Felt.
+
+..
+
+.. bpo: 35409
+.. date: 2019-07-13-18-01-13
+.. nonce: ozbcsR
+.. section: Core and Builtins
+
+Ignore GeneratorExit exceptions when throwing an exception into the aclose
+coroutine of an asynchronous generator.
+
+..
+
+.. bpo: 33387
+.. date: 2018-03-13-14-46-03
+.. nonce: v821M7
+.. section: Core and Builtins
+
+Removed WITH_CLEANUP_START, WITH_CLEANUP_FINISH, BEGIN_FINALLY, END_FINALLY,
+CALL_FINALLY and POP_FINALLY bytecodes. Replaced with RERAISE and
+WITH_EXCEPT_START bytecodes. The compiler now generates different code for
+exceptional and non-exceptional branches for 'with' and 'try-except'
+statements. For 'try-finally' statements the 'finally' block is replicated
+for each exit from the 'try' body.
+
+..
+
+.. bpo: 39033
+.. date: 2019-12-13-18-54-49
+.. nonce: cepuyD
+.. section: Library
+
+Fix :exc:`NameError` in :mod:`zipimport`. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 39022
+.. date: 2019-12-10-23-34-48
+.. nonce: QDtIxI
+.. section: Library
+
+Update importlib.metadata to include improvements from importlib_metadata
+1.3 including better serialization of EntryPoints and improved documentation
+for custom finders.
+
+..
+
+.. bpo: 39006
+.. date: 2019-12-09-14-40-09
+.. nonce: v4VsPg
+.. section: Library
+
+Fix asyncio when the ssl module is missing: only check for ssl.SSLSocket
+instance if the ssl module is available.
+
+..
+
+.. bpo: 38708
+.. date: 2019-12-07-22-25-39
+.. nonce: rZTUfk
+.. section: Library
+
+Fix a potential IndexError in email parser when parsing an empty msg-id.
+
+..
+
+.. bpo: 38698
+.. date: 2019-12-07-21-49-50
+.. nonce: HxoSym
+.. section: Library
+
+Add a new ``InvalidMessageID`` token to email parser to represent invalid
+Message-ID headers.  Also, add defects when there is remaining value after
+parsing the header.
+
+..
+
+.. bpo: 38994
+.. date: 2019-12-07-18-58-44
+.. nonce: IJYhz_
+.. section: Library
+
+Implement ``__class_getitem__`` for ``os.PathLike``, ``pathlib.Path``.
+
+..
+
+.. bpo: 38979
+.. date: 2019-12-07-16-32-42
+.. nonce: q0sIHy
+.. section: Library
+
+Return class from ``ContextVar.__class_getitem__`` to simplify subclassing.
+
+..
+
+.. bpo: 38978
+.. date: 2019-12-07-13-40-52
+.. nonce: R3gHZI
+.. section: Library
+
+Implement ``__class_getitem__`` on asyncio objects (Future, Task, Queue).
+Patch by Batuhan Taskaya.
+
+..
+
+.. bpo: 38916
+.. date: 2019-12-06-18-47-56
+.. nonce: K-raU8
+.. section: Library
+
+:class:`array.array`: Remove ``tostring()`` and ``fromstring()`` methods.
+They were aliases to ``tobytes()`` and ``frombytes()``, deprecated since
+Python 3.2.
+
+..
+
+.. bpo: 38986
+.. date: 2019-12-06-15-11-42
+.. nonce: bg6iZt
+.. section: Library
+
+Make repr of C accelerated TaskWakeupMethWrapper the same as of pure Python
+version.
+
+..
+
+.. bpo: 38982
+.. date: 2019-12-05-18-21-26
+.. nonce: W3u-03
+.. section: Library
+
+Fix asyncio ``PidfdChildWatcher``: handle ``waitpid()`` error. If
+``waitpid()`` is called elsewhere, ``waitpid()`` call fails with
+:exc:`ChildProcessError`: use return code 255 in this case, and log a
+warning. It ensures that the pidfd file descriptor is closed if this error
+occurs.
+
+..
+
+.. bpo: 38529
+.. date: 2019-12-05-16-13-25
+.. nonce: yvQgx3
+.. section: Library
+
+Drop too noisy asyncio warning about deletion of a stream without explicit
+``.close()`` call.
+
+..
+
+.. bpo: 27413
+.. date: 2019-12-05-02-02-58
+.. nonce: 212Th2
+.. section: Library
+
+Added ability to pass through ``ensure_ascii`` options to json.dumps in the
+``json.tool`` command-line interface.
+
+..
+
+.. bpo: 38634
+.. date: 2019-12-04-15-56-28
+.. nonce: pq0ZWa
+.. section: Library
+
+The :mod:`readline` module now detects if Python is linked to libedit at
+runtime on all platforms.  Previously, the check was only done on macOS.
+
+..
+
+.. bpo: 33684
+.. date: 2019-12-04-15-28-40
+.. nonce: QeSmQP
+.. section: Library
+
+Fix ``json.tool`` failed to read a JSON file with non-ASCII characters when
+locale encoding is not UTF-8.
+
+..
+
+.. bpo: 38698
+.. date: 2019-12-02-10-35-19
+.. nonce: WZnAPQ
+.. section: Library
+
+Prevent UnboundLocalError to pop up in parse_message_id.
+
+parse_message_id() was improperly using a token defined inside an exception
+handler, which was raising `UnboundLocalError` on parsing an invalid value.
+Patch by Claudiu Popa.
+
+..
+
+.. bpo: 38927
+.. date: 2019-11-27-17-47-00
+.. nonce: qT7xKY
+.. section: Library
+
+Use ``python -m pip`` instead of ``pip`` to upgrade dependencies in venv.
+
+..
+
+.. bpo: 26730
+.. date: 2019-11-27-16-30-02
+.. nonce: 56cdBn
+.. section: Library
+
+Fix ``SpooledTemporaryFile.rollover()`` might corrupt the file when it is in
+text mode. Patch by Serhiy Storchaka.
+
+..
+
+.. bpo: 38881
+.. date: 2019-11-22-20-03-46
+.. nonce: 7HV1Q0
+.. section: Library
+
+random.choices() now raises a ValueError when all the weights are zero.
+
+..
+
+.. bpo: 38876
+.. date: 2019-11-22-10-58-58
+.. nonce: qqy1Vp
+.. section: Library
+
+Raise pickle.UnpicklingError when loading an item from memo for invalid
+input.
+
+The previous code was raising a `KeyError` for both the Python and C
+implementation. This was caused by the specified index of an invalid input
+which did not exist in the memo structure, where the pickle stores what
+objects it has seen. The malformed input would have caused either a `BINGET`
+or `LONG_BINGET` load from the memo, leading to a `KeyError` as the
+determined index was bogus. Patch by Claudiu Popa
+
+..
+
+.. bpo: 38688
+.. date: 2019-11-22-10-45-03
+.. nonce: iKx23z
+.. section: Library
+
+Calling func:`shutil.copytree` to copy a directory tree from one directory
+to another subdirectory resulted in an endless loop and a RecursionError. A
+fix was added to consume an iterator and create the list of the entries to
+be copied, avoiding the recursion for newly created directories. Patch by
+Bruno P. Kinoshita.
+
+..
+
+.. bpo: 38863
+.. date: 2019-11-21-16-30-00
+.. nonce: RkdTjf
+.. section: Library
+
+Improve :func:`is_cgi` function in :mod:`http.server`, which enables
+processing the case that cgi directory is a child of another directory other
+than root.
+
+..
+
+.. bpo: 37838
+.. date: 2019-11-21-11-39-17
+.. nonce: lRFcEC
+.. section: Library
+
+:meth:`typing.get_type_hints` properly handles functions decorated with
+:meth:`functools.wraps`.
+
+..
+
+.. bpo: 38870
+.. date: 2019-11-20-22-43-48
+.. nonce: rLVZEv
+.. section: Library
+
+Expose :func:`ast.unparse` as a function of the :mod:`ast` module that can
+be used to unparse an :class:`ast.AST` object and produce a string with code
+that would produce an equivalent :class:`ast.AST` object when parsed. Patch
+by Pablo Galindo and Batuhan Taskaya.
+
+..
+
+.. bpo: 38859
+.. date: 2019-11-19-16-30-46
+.. nonce: AZUzL8
+.. section: Library
+
+AsyncMock now returns StopAsyncIteration on the exhaustion of a side_effects
+iterable. Since PEP-479 its Impossible to raise a StopIteration exception
+from a coroutine.
+
+..
+
+.. bpo: 38857
+.. date: 2019-11-19-16-28-25
+.. nonce: YPUkU9
+.. section: Library
+
+AsyncMock fix for return values that are awaitable types.  This also covers
+side_effect iterable values that happened to be awaitable, and wraps
+callables that return an awaitable type. Before these awaitables were being
+awaited instead of being returned as is.
+
+..
+
+.. bpo: 38834
+.. date: 2019-11-18-17-08-23
+.. nonce: abcdef
+.. section: Library
+
+:class:`typing.TypedDict` subclasses now track which keys are optional using
+the ``__required_keys__`` and ``__optional_keys__`` attributes, to enable
+runtime validation by downstream projects.  Patch by Zac Hatfield-Dodds.
+
+..
+
+.. bpo: 38821
+.. date: 2019-11-16-23-26-25
+.. nonce: -albNN
+.. section: Library
+
+Fix unhandled exceptions in :mod:`argparse` when internationalizing error
+messages for arguments with ``nargs`` set to special (non-integer) values.
+Patch by Federico Bond.
+
+..
+
+.. bpo: 38820
+.. date: 2019-11-16-16-09-07
+.. nonce: ivhUSV
+.. section: Library
+
+Make Python compatible with OpenSSL 3.0.0. :func:`ssl.SSLSocket.getpeercert`
+no longer returns IPv6 addresses with a trailing new line.
+
+..
+
+.. bpo: 38811
+.. date: 2019-11-15-18-06-04
+.. nonce: AmdQ6M
+.. section: Library
+
+Fix an unhandled exception in :mod:`pathlib` when :meth:`os.link` is
+missing. Patch by Toke Høiland-Jørgensen.
+
+..
+
+.. bpo: 38686
+.. date: 2019-11-06-15-26-15
+.. nonce: HNFBce
+.. section: Library
+
+Added support for multiple ``qop`` values in
+:class:`urllib.request.AbstractDigestAuthHandler`.
+
+..
+
+.. bpo: 38712
+.. date: 2019-11-05-21-10-12
+.. nonce: ezJ0TP
+.. section: Library
+
+Add the Linux-specific :func:`signal.pidfd_send_signal` function, which
+allows sending a signal to a process identified by a file descriptor rather
+than a pid.
+
+..
+
+.. bpo: 38348
+.. date: 2019-10-02-18-15-28
+.. nonce: _-5eq2
+.. section: Library
+
+Add ``-i`` and ``--indent`` (indentation level), and ``--no-type-comments``
+(type comments) command line options to ast parsing tool.
+
+..
+
+.. bpo: 37523
+.. date: 2019-10-02-02-55-37
+.. nonce: GguwJ6
+.. section: Library
+
+Change :class:`zipfile.ZipExtFile` to raise ``ValueError`` when trying to
+access the underlying file object after it has been closed. This new
+behavior is consistent with how accessing closed files is handled in other
+parts of Python.
+
+..
+
+.. bpo: 38045
+.. date: 2019-09-30-12-09-41
+.. nonce: VDRtd3
+.. section: Library
+
+Improve the performance of :func:`enum._decompose` in :mod:`enum`. Patch by
+hongweipeng.
+
+..
+
+.. bpo: 36820
+.. date: 2019-05-06-15-34-17
+.. nonce: Eh5mIB
+.. section: Library
+
+Break cycle generated when saving an exception in socket.py, codeop.py and
+dyld.py as they keep alive not only the exception but user objects through
+the ``__traceback__`` attribute. Patch by Mario Corchero.
+
+..
+
+.. bpo: 36406
+.. date: 2019-03-24-12-12-27
+.. nonce: mCEkOl
+.. section: Library
+
+Handle namespace packages in :mod:`doctest`. Patch by Karthikeyan
+Singaravelan.
+
+..
+
+.. bpo: 34776
+.. date: 2018-09-23-14-24-37
+.. nonce: 1SrQe3
+.. section: Library
+
+Fix dataclasses to support forward references in type annotations
+
+..
+
+.. bpo: 20928
+.. date: 2018-03-30-16-18-12
+.. nonce: ieXu6I
+.. section: Library
+
+ElementTree supports recursive XInclude processing.  Patch by Stefan Behnel.
+
+..
+
+.. bpo: 29636
+.. date: 2018-02-22-11-24-33
+.. nonce: ogGRE2
+.. section: Library
+
+Add whitespace options for formatting JSON with the ``json.tool`` CLI. The
+following mutually exclusive options are now supported: ``--indent`` for
+setting the indent level in spaces; ``--tab`` for indenting with tabs;
+``--no-indent`` for suppressing newlines; and ``--compact`` for suppressing
+all whitespace. The default behavior remains the same as ``--indent=4``.
+
+..
+
+.. bpo: 38928
+.. date: 2019-11-27-17-51-27
+.. nonce: AfgvfO
+.. section: Documentation
+
+Correct when venv's ``upgrade_dependencies()`` and ``--upgrade-deps`` are
+added.
+
+..
+
+.. bpo: 38899
+.. date: 2019-11-22-15-57-29
+.. nonce: 4aYPW2
+.. section: Documentation
+
+Update documentation to state that to activate virtual environments under
+fish one should use `source`, not `.` as documented at
+https://fishshell.com/docs/current/commands.html#source.
+
+..
+
+.. bpo: 22377
+.. date: 2019-10-01-10-53-46
+.. nonce: 5ni-iC
+.. section: Documentation
+
+Improves documentation of the values that :meth:`datetime.datetime.strptime`
+accepts for ``%Z``. Patch by Karl Dubost.
+
+..
+
+.. bpo: 38546
+.. date: 2019-12-18-14-52-08
+.. nonce: 2kxNuM
+.. section: Tests
+
+Fix test_ressources_gced_in_workers() of test_concurrent_futures: explicitly
+stop the manager to prevent leaking a child process running in the
+background after the test completes.
+
+..
+
+.. bpo: 38546
+.. date: 2019-12-17-15-27-07
+.. nonce: 82JwN2
+.. section: Tests
+
+Multiprocessing and concurrent.futures tests now stop the resource tracker
+process when tests complete.
+
+..
+
+.. bpo: 38614
+.. date: 2019-12-10-14-26-23
+.. nonce: 89JpNh
+.. section: Tests
+
+Replace hardcoded timeout constants in tests with new :mod:`test.support`
+constants: :data:`~test.support.LOOPBACK_TIMEOUT`,
+:data:`~test.support.INTERNET_TIMEOUT`, :data:`~test.support.SHORT_TIMEOUT`
+and :data:`~test.support.LONG_TIMEOUT`. It becomes easier to adjust these
+four timeout constants for all tests at once, rather than having to adjust
+every single test file.
+
+..
+
+.. bpo: 38547
+.. date: 2019-12-09-11-32-34
+.. nonce: Juw54e
+.. section: Tests
+
+Fix test_pty: if the process is the session leader, closing the master file
+descriptor raises a SIGHUP signal: simply ignore SIGHUP when running the
+tests.
+
+..
+
+.. bpo: 38992
+.. date: 2019-12-08-15-11-06
+.. nonce: cVoHOZ
+.. section: Tests
+
+Fix a test for :func:`math.fsum` that was failing due to constant folding.
+
+..
+
+.. bpo: 38991
+.. date: 2019-12-07-00-52-09
+.. nonce: JE3_o-
+.. section: Tests
+
+:mod:`test.support`: :func:`~test.support.run_python_until_end`,
+:func:`~test.support.assert_python_ok` and
+:func:`~test.support.assert_python_failure` functions no longer strip
+whitespaces from stderr. Remove ``test.support.strip_python_stderr()``
+function.
+
+..
+
+.. bpo: 38965
+.. date: 2019-12-04-17-08-55
+.. nonce: yqax3m
+.. section: Tests
+
+Fix test_faulthandler on GCC 10. Use the "volatile" keyword in
+``faulthandler._stack_overflow()`` to prevent tail call optimization on any
+compiler, rather than relying on compiler specific pragma.
+
+..
+
+.. bpo: 38875
+.. date: 2019-11-21-09-11-06
+.. nonce: wSZJal
+.. section: Tests
+
+test_capi: trashcan tests now require the test "cpu" resource.
+
+..
+
+.. bpo: 38841
+.. date: 2019-11-20-16-08-19
+.. nonce: 5F5Lbw
+.. section: Tests
+
+Skip asyncio test_create_datagram_endpoint_existing_sock_unix on platforms
+lacking a functional bind() for named unix domain sockets.
+
+..
+
+.. bpo: 38692
+.. date: 2019-11-20-15-42-06
+.. nonce: aqAvyF
+.. section: Tests
+
+Skip the test_posix.test_pidfd_open() test if ``os.pidfd_open()`` fails with
+a :exc:`PermissionError`. This situation can happen in a Linux sandbox using
+a syscall whitelist which doesn't allow the ``pidfd_open()`` syscall yet.
+
+..
+
+.. bpo: 38839
+.. date: 2019-11-18-22-10-55
+.. nonce: di6tXv
+.. section: Tests
+
+Fix some unused functions in tests. Patch by Adam Johnson.
+
+..
+
+.. bpo: 38669
+.. date: 2019-11-04-02-54-16
+.. nonce: pazXZ8
+.. section: Tests
+
+Raise :exc:`TypeError` when passing target as a string with
+:meth:`unittest.mock.patch.object`.
+
+..
+
+.. bpo: 37957
+.. date: 2019-10-30-00-01-43
+.. nonce: X1r78F
+.. section: Tests
+
+test.regrtest now can receive a list of test patterns to ignore (using the
+-i/--ignore argument) or a file with a list of patterns to ignore (using the
+--ignore-file argument). Patch by Pablo Galindo.
+
+..
+
+.. bpo: 37404
+.. date: 2019-12-01-21-45-24
+.. nonce: cNsA7S
+.. section: Build
+
+:mod:`asyncio` now raises :exc:`TyperError` when calling incompatible
+methods with an :class:`ssl.SSLSocket` socket.  Patch by Ido Michael.
+
+..
+
+.. bpo: 36500
+.. date: 2019-04-02-01-59-26
+.. nonce: fyG6_U
+.. section: Build
+
+Added an optional "regen" project to the Visual Studio solution that will
+regenerate all grammar, tokens, and opcodes.
+
+..
+
+.. bpo: 39007
+.. date: 2019-12-09-10-40-34
+.. nonce: vtarxo
+.. section: Windows
+
+Add auditing events to functions in :mod:`winreg`.
+
+..
+
+.. bpo: 33125
+.. date: 2019-11-14-08-57-50
+.. nonce: EN5MWS
+.. section: Windows
+
+Add support for building and releasing Windows ARM64 packages.
+
+..
+
+.. bpo: 37931
+.. date: 2019-08-23-12-14-34
+.. nonce: goYgQj
+.. section: macOS
+
+Fixed a crash on OSX dynamic builds that occurred when re-initializing the
+posix module after a Py_Finalize if the environment had changed since the
+previous `import posix`. Patch by Benoît Hudson.
+
+..
+
+.. bpo: 38944
+.. date: 2019-11-30-12-10-36
+.. nonce: _3xjKG
+.. section: IDLE
+
+Escape key now closes IDLE completion windows.  Patch by Johnny Najera.
+
+..
+
+.. bpo: 38943
+.. date: 2019-11-29-23-44-11
+.. nonce: 8pUKKs
+.. section: IDLE
+
+Fix IDLE autocomplete windows not always appearing on some systems. Patch by
+Johnny Najera.
+
+..
+
+.. bpo: 38862
+.. date: 2019-11-23-21-50-57
+.. nonce: KQ9A0m
+.. section: IDLE
+
+'Strip Trailing Whitespace' on the Format menu removes extra newlines at the
+end of non-shell files.
+
+..
+
+.. bpo: 38636
+.. date: 2019-10-30-22-11-16
+.. nonce: hUhDeB
+.. section: IDLE
+
+Fix IDLE Format menu tab toggle and file indent width. These functions
+(default shortcuts Alt-T and Alt-U) were mistakenly disabled in 3.7.5 and
+3.8.0.
+
+..
+
+.. bpo: 38896
+.. date: 2019-11-22-19-43-43
+.. nonce: 6wvNMJ
+.. section: C API
+
+Remove ``PyUnicode_ClearFreeList()`` function: the Unicode free list has
+been removed in Python 3.3.
+
+..
+
+.. bpo: 37340
+.. date: 2019-11-20-11-08-06
+.. nonce: JBQJMS
+.. section: C API
+
+Remove ``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``
+functions: the free lists of bound method objects have been removed.
+
+..
+
+.. bpo: 38835
+.. date: 2019-11-18-15-38-23
+.. nonce: II8Szd
+.. section: C API
+
+Exclude ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of
+``pyfpe.h`` from ``Py_LIMITED_API`` (stable API).
diff --git a/Misc/NEWS.d/3.9.0a3.rst b/Misc/NEWS.d/3.9.0a3.rst
new file mode 100644
index 0000000..6c71d7e
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a3.rst
@@ -0,0 +1,906 @@
+.. bpo: 39427
+.. date: 2020-01-22-22-28-04
+.. nonce: LiO-Eo
+.. release date: 2020-01-24
+.. section: Core and Builtins
+
+Document all possibilities for the ``-X`` options in the command line help
+section. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39421
+.. date: 2020-01-22-15-53-37
+.. nonce: O3nG7u
+.. section: Core and Builtins
+
+Fix possible crashes when operating with the functions in the :mod:`heapq`
+module and custom comparison operators.
+
+..
+
+.. bpo: 39386
+.. date: 2020-01-20-21-40-57
+.. nonce: ULqD8t
+.. section: Core and Builtins
+
+Prevent double awaiting of async iterator.
+
+..
+
+.. bpo: 17005
+.. date: 2020-01-17-00-00-58
+.. nonce: nTSxsy
+.. section: Core and Builtins
+
+Add :class:`functools.TopologicalSorter` to the :mod:`functools` module to
+offers functionality to perform topological sorting of graphs. Patch by
+Pablo Galindo, Tim Peters and Larry Hastings.
+
+..
+
+.. bpo: 39320
+.. date: 2020-01-15-15-33-44
+.. nonce: b4hnJW
+.. section: Core and Builtins
+
+Replace four complex bytecodes for building sequences with three simpler
+ones.
+
+The following four bytecodes have been removed:
+
+* BUILD_LIST_UNPACK
+* BUILD_TUPLE_UNPACK
+* BUILD_SET_UNPACK
+* BUILD_TUPLE_UNPACK_WITH_CALL
+
+The following three bytecodes have been added:
+
+* LIST_TO_TUPLE
+* LIST_EXTEND
+* SET_UPDATE
+
+..
+
+.. bpo: 39336
+.. date: 2020-01-15-01-39-29
+.. nonce: nJ7W9I
+.. section: Core and Builtins
+
+Import loaders which publish immutable module objects can now publish
+immutable packages in addition to individual modules.
+
+..
+
+.. bpo: 39322
+.. date: 2020-01-13-15-18-13
+.. nonce: aAs-1T
+.. section: Core and Builtins
+
+Added a new function :func:`gc.is_finalized` to check if an object has been
+finalized by the garbage collector. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39048
+.. date: 2020-01-13-14-45-22
+.. nonce: iPsj81
+.. section: Core and Builtins
+
+Improve the displayed error message when incorrect types are passed to
+``async with`` statements by looking up the :meth:`__aenter__` special
+method before the :meth:`__aexit__` special method when entering an
+asynchronous context manager. Patch by Géry Ogam.
+
+..
+
+.. bpo: 39235
+.. date: 2020-01-09-10-01-18
+.. nonce: RYwjoc
+.. section: Core and Builtins
+
+Fix AST end location for lone generator expression in function call, e.g.
+f(i for i in a).
+
+..
+
+.. bpo: 39209
+.. date: 2020-01-06-10-29-16
+.. nonce: QHAONe
+.. section: Core and Builtins
+
+Correctly handle multi-line tokens in interactive mode. Patch by Pablo
+Galindo.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-01-05-13-40-08
+.. nonce: QRTJVC
+.. section: Core and Builtins
+
+Port _json extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 39216
+.. date: 2020-01-05-06-55-52
+.. nonce: 74jLh9
+.. section: Core and Builtins
+
+Fix constant folding optimization for positional only arguments - by Anthony
+Sottile.
+
+..
+
+.. bpo: 39215
+.. date: 2020-01-04-17-25-34
+.. nonce: xiqiIz
+.. section: Core and Builtins
+
+Fix ``SystemError`` when nested function has annotation on positional-only
+argument - by Anthony Sottile.
+
+..
+
+.. bpo: 39200
+.. date: 2020-01-04-01-14-32
+.. nonce: 8Z9DYp
+.. section: Core and Builtins
+
+Correct the error message when calling the :func:`min` or :func:`max` with
+no arguments. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39200
+.. date: 2020-01-03-14-50-14
+.. nonce: Ip2_iI
+.. section: Core and Builtins
+
+Correct the error message when trying to construct :class:`range` objects
+with no arguments. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39166
+.. date: 2020-01-02-22-22-03
+.. nonce: Qt-UeD
+.. section: Core and Builtins
+
+Fix incorrect line execution reporting in trace functions when tracing the
+last iteration of asynchronous for loops. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39114
+.. date: 2019-12-31-18-25-45
+.. nonce: WG9alt
+.. section: Core and Builtins
+
+Fix incorrent line execution reporting in trace functions when tracing
+exception handlers with name binding. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39156
+.. date: 2019-12-30-10-53-59
+.. nonce: veT-CB
+.. section: Core and Builtins
+
+Split the COMPARE_OP bytecode instruction into four distinct instructions.
+
+*  COMPARE_OP for rich comparisons
+*  IS_OP for 'is' and 'is not' tests
+*  CONTAINS_OP for 'in' and 'is not' tests
+*  JUMP_IF_NOT_EXC_MATCH for checking exceptions in 'try-except' statements.
+
+This improves the clarity of the interpreter and should provide a modest
+speedup.
+
+..
+
+.. bpo: 38588
+.. date: 2019-12-29-19-13-54
+.. nonce: pgXnNS
+.. section: Core and Builtins
+
+Fix possible crashes in dict and list when calling
+:c:func:`PyObject_RichCompareBool`.
+
+..
+
+.. bpo: 13601
+.. date: 2019-12-17-22-32-11
+.. nonce: vNP4LC
+.. section: Core and Builtins
+
+By default, ``sys.stderr`` is line-buffered now, even if ``stderr`` is
+redirected to a file. You can still make ``sys.stderr`` unbuffered by
+passing the :option:`-u` command-line option or setting the
+:envvar:`PYTHONUNBUFFERED` environment variable.
+
+(Contributed by Jendrik Seipp in bpo-13601.)
+
+..
+
+.. bpo: 38610
+.. date: 2019-10-31-14-30-39
+.. nonce: fHdVMS
+.. section: Core and Builtins
+
+Fix possible crashes in several list methods by holding strong references to
+list elements when calling :c:func:`PyObject_RichCompareBool`.
+
+..
+
+.. bpo: 32021
+.. date: 2019-03-11-13-30-40
+.. nonce: dpbtkP
+.. section: Core and Builtins
+
+Include brotli .br encoding in mimetypes encodings_map
+
+..
+
+.. bpo: 39430
+.. date: 2020-01-24-11-05-21
+.. nonce: I0UQzM
+.. section: Library
+
+Fixed race condition in lazy imports in :mod:`tarfile`.
+
+..
+
+.. bpo: 39413
+.. date: 2020-01-24-10-10-25
+.. nonce: 7XYDM8
+.. section: Library
+
+The :func:`os.unsetenv` function is now also available on Windows.
+
+..
+
+.. bpo: 39390
+.. date: 2020-01-23-21-34-29
+.. nonce: D2tSXk
+.. section: Library
+
+Fixed a regression with the `ignore` callback of :func:`shutil.copytree`.
+The argument types are now str and List[str] again.
+
+..
+
+.. bpo: 39395
+.. date: 2020-01-23-03-05-41
+.. nonce: 4dda42
+.. section: Library
+
+The :func:`os.putenv` and :func:`os.unsetenv` functions are now always
+available.
+
+..
+
+.. bpo: 39406
+.. date: 2020-01-22-21-18-58
+.. nonce: HMpe8x
+.. section: Library
+
+If ``setenv()`` C function is available, :func:`os.putenv` is now
+implemented with ``setenv()`` instead of ``putenv()``, so Python doesn't
+have to handle the environment variable memory.
+
+..
+
+.. bpo: 39396
+.. date: 2020-01-21-09-00-42
+.. nonce: 6UXQXE
+.. section: Library
+
+Fix ``math.nextafter(-0.0, +0.0)`` on AIX 7.1.
+
+..
+
+.. bpo: 29435
+.. date: 2020-01-20-18-48-00
+.. nonce: qqJ2Ax
+.. section: Library
+
+Allow :func:`tarfile.is_tarfile` to be used with file and file-like objects,
+like :func:`zipfile.is_zipfile`. Patch by William Woodruff.
+
+..
+
+.. bpo: 39377
+.. date: 2020-01-20-13-00-35
+.. nonce: QSFdaU
+.. section: Library
+
+Removed ``encoding`` option from :func:`json.loads`.  It has been deprecated
+since Python 3.1.
+
+..
+
+.. bpo: 39389
+.. date: 2020-01-20-00-56-01
+.. nonce: fEirIS
+.. section: Library
+
+Write accurate compression level metadata in :mod:`gzip` archives, rather
+than always signaling maximum compression.
+
+..
+
+.. bpo: 39366
+.. date: 2020-01-17-18-14-51
+.. nonce: Cv3NQS
+.. section: Library
+
+The previously deprecated ``xpath()`` and ``xgtitle()`` methods of
+:class:`nntplib.NNTP` have been removed.
+
+..
+
+.. bpo: 39357
+.. date: 2020-01-16-11-24-00
+.. nonce: bCwx-h
+.. section: Library
+
+Remove the *buffering* parameter of :class:`bz2.BZ2File`. Since Python 3.0,
+it was ignored and using it was emitting :exc:`DeprecationWarning`. Pass an
+open file object, to control how the file is opened. The *compresslevel*
+parameter becomes keyword-only.
+
+..
+
+.. bpo: 39353
+.. date: 2020-01-16-10-21-48
+.. nonce: ntp7Ql
+.. section: Library
+
+Deprecate binhex4 and hexbin4 standards. Deprecate the :mod:`binhex` module
+and the following :mod:`binascii` functions: :func:`~binascii.b2a_hqx`,
+:func:`~binascii.a2b_hqx`, :func:`~binascii.rlecode_hqx`,
+:func:`~binascii.rledecode_hqx`, :func:`~binascii.crc_hqx`.
+
+..
+
+.. bpo: 39351
+.. date: 2020-01-16-09-27-28
+.. nonce: a-FQdv
+.. section: Library
+
+Remove ``base64.encodestring()`` and ``base64.decodestring()``, aliases
+deprecated since Python 3.1: use :func:`base64.encodebytes` and
+:func:`base64.decodebytes` instead.
+
+..
+
+.. bpo: 39350
+.. date: 2020-01-16-09-15-40
+.. nonce: ZQx0uY
+.. section: Library
+
+Remove ``fractions.gcd()`` function, deprecated since Python 3.5
+(:issue:`22486`): use :func:`math.gcd` instead.
+
+..
+
+.. bpo: 39329
+.. date: 2020-01-14-22-16-07
+.. nonce: 6OKGBn
+.. section: Library
+
+:class:`~smtplib.LMTP` constructor now has an optional *timeout* parameter.
+Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39313
+.. date: 2020-01-12-18-17-00
+.. nonce: DCTsnm
+.. section: Library
+
+Add a new ``exec_function`` option (*--exec-function* in the CLI) to
+``RefactoringTool`` for making ``exec`` a function. Patch by Batuhan
+Taskaya.
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-12-17-19-40
+.. nonce: iax06r
+.. section: Library
+
+:class:`~ftplib.FTP_TLS` and :class:`~ftplib.FTP_TLS` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-12-16-34-28
+.. nonce: J_yBVq
+.. section: Library
+
+:class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39310
+.. date: 2020-01-12-13-34-42
+.. nonce: YMRdcj
+.. section: Library
+
+Add :func:`math.ulp`: return the value of the least significant bit of a
+float.
+
+..
+
+.. bpo: 39297
+.. date: 2020-01-11-01-15-37
+.. nonce: y98Z6Q
+.. section: Library
+
+Improved performance of importlib.metadata distribution discovery and
+resilients to inaccessible sys.path entries (importlib_metadata v1.4.0).
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-11-00-32-45
+.. nonce: _S5VjC
+.. section: Library
+
+:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 38901
+.. date: 2020-01-10-22-30-48
+.. nonce: OdVIIb
+.. section: Library
+
+When you specify prompt='.' or equivalently python -m venv --prompt . ...
+the basename of the current directory is used to set the created venv's
+prompt when it's activated.
+
+..
+
+.. bpo: 39288
+.. date: 2020-01-10-16-52-09
+.. nonce: IB-aQX
+.. section: Library
+
+Add :func:`math.nextafter`: return the next floating-point value after *x*
+towards *y*.
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-09-10-58-58
+.. nonce: RmDgCC
+.. section: Library
+
+:class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39242
+.. date: 2020-01-08-23-25-27
+.. nonce: bnL65N
+.. section: Library
+
+Updated the Gmane domain from news.gmane.org to news.gmane.io which is used
+for examples of :class:`~nntplib.NNTP` news reader server and nntplib tests.
+
+..
+
+.. bpo: 35292
+.. date: 2020-01-08-14-39-19
+.. nonce: ihRT1z
+.. section: Library
+
+Proxy the `SimpleHTTPRequestHandler.guess_type` to `mimetypes.guess_type` so
+the `mimetypes.init` is called lazily to avoid unnecessary costs when
+:mod:`http.server` module is imported.
+
+..
+
+.. bpo: 39239
+.. date: 2020-01-07-01-02-44
+.. nonce: r7vecs
+.. section: Library
+
+The :meth:`select.epoll.unregister` method no longer ignores the
+:data:`~errno.EBADF` error.
+
+..
+
+.. bpo: 38907
+.. date: 2020-01-06-02-14-38
+.. nonce: F1RkCR
+.. section: Library
+
+In http.server script, restore binding to IPv4 on Windows.
+
+..
+
+.. bpo: 39152
+.. date: 2020-01-03-18-02-50
+.. nonce: JgPjCC
+.. section: Library
+
+Fix ttk.Scale.configure([name]) to return configuration tuple for name or
+all options.  Giovanni Lombardo contributed part of the patch.
+
+..
+
+.. bpo: 39198
+.. date: 2020-01-02-20-21-03
+.. nonce: nzwGyG
+.. section: Library
+
+If an exception were to be thrown in `Logger.isEnabledFor` (say, by asyncio
+timeouts or stopit) , the `logging` global lock may not be released
+appropriately, resulting in deadlock.  This change wraps that block of code
+with `try...finally` to ensure the lock is released.
+
+..
+
+.. bpo: 39191
+.. date: 2020-01-02-17-28-03
+.. nonce: ur_scy
+.. section: Library
+
+Perform a check for running loop before starting a new task in
+``loop.run_until_complete()`` to fail fast; it prevents the side effect of
+new task spawning before exception raising.
+
+..
+
+.. bpo: 38871
+.. date: 2020-01-01-18-44-52
+.. nonce: 3EEOLg
+.. section: Library
+
+Correctly parenthesize filter-based statements that contain lambda
+expressions in mod:`lib2to3`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39142
+.. date: 2019-12-31-19-27-23
+.. nonce: oqU5iD
+.. section: Library
+
+A change was made to logging.config.dictConfig to avoid converting instances
+of named tuples to ConvertingTuple. It's assumed that named tuples are too
+specialised to be treated like ordinary tuples; if a user of named tuples
+requires ConvertingTuple functionality, they will have to implement that
+themselves in their named tuple class.
+
+..
+
+.. bpo: 39158
+.. date: 2019-12-29-15-44-38
+.. nonce: cxVoOR
+.. section: Library
+
+ast.literal_eval() now supports empty sets.
+
+..
+
+.. bpo: 39129
+.. date: 2019-12-24-10-43-13
+.. nonce: jVx5rW
+.. section: Library
+
+Fix import path for ``asyncio.TimeoutError``
+
+..
+
+.. bpo: 39057
+.. date: 2019-12-15-21-47-54
+.. nonce: FOxn-w
+.. section: Library
+
+:func:`urllib.request.proxy_bypass_environment` now ignores leading dots and
+no longer ignores a trailing newline.
+
+..
+
+.. bpo: 39056
+.. date: 2019-12-15-21-05-16
+.. nonce: nEfUM9
+.. section: Library
+
+Fixed handling invalid warning category in the -W option.  No longer import
+the re module if it is not needed.
+
+..
+
+.. bpo: 39055
+.. date: 2019-12-15-19-23-23
+.. nonce: FmN3un
+.. section: Library
+
+:func:`base64.b64decode` with ``validate=True`` raises now a binascii.Error
+if the input ends with a single ``\n``.
+
+..
+
+.. bpo: 21600
+.. date: 2019-12-14-14-38-40
+.. nonce: kC4Cgh
+.. section: Library
+
+Fix :func:`mock.patch.stopall` to stop active patches that were created with
+:func:`mock.patch.dict`.
+
+..
+
+.. bpo: 39019
+.. date: 2019-12-10-21-11-05
+.. nonce: YIlgZ7
+.. section: Library
+
+Implement dummy ``__class_getitem__`` for
+:class:`tempfile.SpooledTemporaryFile`.
+
+..
+
+.. bpo: 39019
+.. date: 2019-12-10-21-03-34
+.. nonce: i8RpMZ
+.. section: Library
+
+Implement dummy ``__class_getitem__`` for ``subprocess.Popen``,
+``subprocess.CompletedProcess``
+
+..
+
+.. bpo: 38914
+.. date: 2019-11-26-23-21-56
+.. nonce: 8l-g-T
+.. section: Library
+
+Adjusted the wording of the warning issued by distutils' ``check`` command
+when the ``author`` and ``maintainer`` fields are supplied but no
+corresponding e-mail field (``author_email`` or ``maintainer_email``) is
+found. The wording now reflects the fact that these fields are suggested,
+but not required. Patch by Juergen Gmach.
+
+..
+
+.. bpo: 38878
+.. date: 2019-11-22-12-08-52
+.. nonce: EJ0cFf
+.. section: Library
+
+Fixed __subclasshook__ of :class:`os.PathLike` to return a correct result
+upon inheritence. Patch by Bar Harel.
+
+..
+
+.. bpo: 38615
+.. date: 2019-11-17-17-32-35
+.. nonce: OVyaNX
+.. section: Library
+
+:class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have an optional
+*timeout* parameter for their constructors. Also, the
+:meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter
+with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and
+:class:`~imaplib.IMAP4_stream` were applied to this change. Patch by
+Dong-hee Na.
+
+..
+
+.. bpo: 35182
+.. date: 2019-10-31-19-23-25
+.. nonce: hzeNl9
+.. section: Library
+
+Fixed :func:`Popen.communicate` subsequent call crash when the child process
+has already closed any piped standard stream, but still continues to be
+running. Patch by Andriy Maletsky.
+
+..
+
+.. bpo: 38630
+.. date: 2019-10-29-12-21-10
+.. nonce: Dv6Xrm
+.. section: Library
+
+On Unix, :meth:`subprocess.Popen.send_signal` now polls the process status.
+Polling reduces the risk of sending a signal to the wrong process if the
+process completed, the :attr:`subprocess.Popen.returncode` attribute is
+still ``None``, and the pid has been reassigned (recycled) to a new
+different process.
+
+..
+
+.. bpo: 38536
+.. date: 2019-10-21-20-24-51
+.. nonce: beZ0Sk
+.. section: Library
+
+Removes trailing space in formatted currency with `international=True` and a
+locale with symbol following value. E.g. `locale.currency(12.34,
+international=True)` returned `'12,34 EUR '` instead of `'12,34 EUR'`.
+
+..
+
+.. bpo: 38473
+.. date: 2019-10-14-21-14-55
+.. nonce: uXpVld
+.. section: Library
+
+Use signature from inner mock for autospecced methods attached with
+:func:`unittest.mock.attach_mock`. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 38361
+.. date: 2019-10-04-09-49-56
+.. nonce: LM4u4T
+.. section: Library
+
+Fixed an issue where ``ident`` could include a leading path separator when
+:func:`syslog.openlog` was called without arguments.
+
+..
+
+.. bpo: 38293
+.. date: 2019-09-29-08-17-03
+.. nonce: wls5s3
+.. section: Library
+
+Add :func:`copy.copy` and :func:`copy.deepcopy` support to :func:`property`
+objects.
+
+..
+
+.. bpo: 37958
+.. date: 2019-08-27-03-57-25
+.. nonce: lRORI3
+.. section: Library
+
+Added the pstats.Stats.get_profile_dict() method to return the profile data
+as a StatsProfile instance.
+
+..
+
+.. bpo: 28367
+.. date: 2019-05-06-22-38-47
+.. nonce: 2AKen5
+.. section: Library
+
+Termios magic constants for the following baud rates:   - B500000   -
+B576000   - B921600   - B1000000   - B1152000   - B1500000   - B2000000   -
+B2500000   - B3000000   - B3500000   - B4000000 Patch by Andrey Smirnov
+
+..
+
+.. bpo: 39381
+.. date: 2020-01-18-15-37-56
+.. nonce: wTWe8d
+.. section: Documentation
+
+Mention in docs that :func:`asyncio.get_event_loop` implicitly creates new
+event loop only if called from the main thread.
+
+..
+
+.. bpo: 38918
+.. date: 2019-12-15-22-04-41
+.. nonce: 8JnDTS
+.. section: Documentation
+
+Add an entry for ``__module__`` in the "function" & "method" sections of the
+`inspect docs types and members table
+<https://docs.python.org/3/library/inspect.html#types-and-members>`_
+
+..
+
+.. bpo: 3530
+.. date: 2019-11-17-11-53-10
+.. nonce: 8zFUMc
+.. section: Documentation
+
+In the :mod:`ast` module documentation, fix a misleading ``NodeTransformer``
+example and add advice on when to use the ``fix_missing_locations``
+function.
+
+..
+
+.. bpo: 39395
+.. date: 2020-01-23-03-05-13
+.. nonce: RoArIZ
+.. section: Build
+
+On non-Windows platforms, the :c:func:`setenv` and :c:func:`unsetenv`
+functions are now required to build Python.
+
+..
+
+.. bpo: 39160
+.. date: 2019-12-30-03-54-24
+.. nonce: aBmj13
+.. section: Build
+
+Updated the documentation in `./configure --help` to show default values,
+reference documentation where required and add additional explanation where
+needed.
+
+..
+
+.. bpo: 39144
+.. date: 2019-12-27-22-18-26
+.. nonce: dwHMlR
+.. section: Build
+
+The ctags and etags build targets both include Modules/_ctypes and Python
+standard library source files.
+
+..
+
+.. bpo: 39050
+.. date: 2020-01-22-22-28-06
+.. nonce: zkn0FO
+.. section: IDLE
+
+Make IDLE Settings dialog Help button work again.
+
+..
+
+.. bpo: 34118
+.. date: 2019-12-30-16-44-07
+.. nonce: FaNW0a
+.. section: IDLE
+
+Tag memoryview, range, and tuple as classes, the same as list, etcetera, in
+the library manual built-in functions list.
+
+..
+
+.. bpo: 32989
+.. date: 2018-03-03-12-56-26
+.. nonce: FVhmhH
+.. section: IDLE
+
+Add tests for editor newline_and_indent_event method. Remove dead code from
+pyparse find_good_parse_start method.
+
+..
+
+.. bpo: 39372
+.. date: 2020-01-17-19-25-48
+.. nonce: hGJMY6
+.. section: C API
+
+Clean header files of interfaces defined but with no implementation. The
+public API symbols being removed are:
+``_PyBytes_InsertThousandsGroupingLocale``,
+``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``,
+``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``,
+``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``,
+``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``,
+``PyNoArgsFunction``.
+
+..
+
+.. bpo: 39164
+.. date: 2019-12-30-10-43-52
+.. nonce: WEV0uu
+.. section: C API
+
+Add a private ``_PyErr_GetExcInfo()`` function to retrieve exception
+information of the specified Python thread state.
diff --git a/Misc/NEWS.d/3.9.0a4.rst b/Misc/NEWS.d/3.9.0a4.rst
new file mode 100644
index 0000000..e91135d
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a4.rst
@@ -0,0 +1,949 @@
+.. bpo: 39184
+.. date: 2020-02-07-23-54-18
+.. nonce: v-ue-v
+.. release date: 2020-02-25
+.. section: Security
+
+Add audit events to functions in `fcntl`, `msvcrt`, `os`, `resource`,
+`shutil`, `signal` and `syslog`.
+
+..
+
+.. bpo: 39401
+.. date: 2020-01-28-20-54-09
+.. nonce: he7h_A
+.. section: Security
+
+Avoid unsafe DLL load at startup on Windows 7 and earlier.
+
+..
+
+.. bpo: 39184
+.. date: 2020-01-07-00-42-08
+.. nonce: fe7NgK
+.. section: Security
+
+Add audit events to command execution functions in os and pty modules.
+
+..
+
+.. bpo: 39382
+.. date: 2020-02-18-01-40-13
+.. nonce: OLSJu9
+.. section: Core and Builtins
+
+Fix a use-after-free in the single inheritance path of ``issubclass()``,
+when the ``__bases__`` of an object has a single reference, and so does its
+first item. Patch by Yonatan Goldschmidt.
+
+..
+
+.. bpo: 39573
+.. date: 2020-02-14-10-08-53
+.. nonce: BIIX2M
+.. section: Core and Builtins
+
+Update clinic tool to use :c:func:`Py_IS_TYPE`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39619
+.. date: 2020-02-13-07-35-00
+.. nonce: inb_master_chroot
+.. section: Core and Builtins
+
+Enable use of :func:`os.chroot` on HP-UX systems.
+
+..
+
+.. bpo: 39573
+.. date: 2020-02-13-01-30-22
+.. nonce: uTFj1m
+.. section: Core and Builtins
+
+Add :c:func:`Py_IS_TYPE` static inline function to check whether the object
+*o* type is *type*.
+
+..
+
+.. bpo: 39606
+.. date: 2020-02-11-23-59-07
+.. nonce: a72Sxc
+.. section: Core and Builtins
+
+Fix regression caused by fix for bpo-39386, that prevented calling
+``aclose`` on an async generator that had already been closed or exhausted.
+
+..
+
+.. bpo: 39579
+.. date: 2020-02-07-15-18-35
+.. nonce: itNmC0
+.. section: Core and Builtins
+
+Change the ending column offset of `Attribute` nodes constructed in
+`ast_for_dotted_name` to point at the end of the current node and not at the
+end of the last `NAME` node.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-02-07-12-57-40
+.. nonce: ySW6gq
+.. section: Core and Builtins
+
+Port _crypt extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-02-06-09-00-35
+.. nonce: oaxe1j
+.. section: Core and Builtins
+
+Port _contextvars extension module to multiphase initialization
+(:pep:`489`).
+
+..
+
+.. bpo: 39510
+.. date: 2020-02-04-10-27-41
+.. nonce: PMIh-f
+.. section: Core and Builtins
+
+Fix segfault in ``readinto()`` method on closed BufferedReader.
+
+..
+
+.. bpo: 39502
+.. date: 2020-01-30-14-36-31
+.. nonce: IJu0rl
+.. section: Core and Builtins
+
+Fix :func:`time.localtime` on 64-bit AIX  to support years before 1902 and
+after 2038. Patch by M Felt.
+
+..
+
+.. bpo: 39492
+.. date: 2020-01-30-01-14-42
+.. nonce: eTuy0F
+.. section: Core and Builtins
+
+Fix a reference cycle in the C Pickler that was preventing the garbage
+collection of deleted, pickled objects.
+
+..
+
+.. bpo: 39453
+.. date: 2020-01-25-23-51-17
+.. nonce: xCOkYk
+.. section: Core and Builtins
+
+Fixed a possible crash in :meth:`list.__contains__` when a list is changed
+during comparing items. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39434
+.. date: 2020-01-24-01-07-04
+.. nonce: S5ehj9
+.. section: Core and Builtins
+
+:term:`floor division` of float operation now has a better performance. Also
+the message of :exc:`ZeroDivisionError` for this operation is updated. Patch
+by Dong-hee Na.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-01-19-11-06-30
+.. nonce: 0mjsfm
+.. section: Core and Builtins
+
+Port _codecs extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-01-18-11-06-28
+.. nonce: OKROOt
+.. section: Core and Builtins
+
+Port _bz2 extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-01-16-12-00-04
+.. nonce: fuqoBG
+.. section: Core and Builtins
+
+Port _abc extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 39320
+.. date: 2020-01-15-15-50-22
+.. nonce: oWARyk
+.. section: Core and Builtins
+
+Replace two complex bytecodes for building dicts with two simpler ones. The
+new bytecodes ``DICT_MERGE`` and ``DICT_UPDATE`` have been added The old
+bytecodes ``BUILD_MAP_UNPACK`` and ``BUILD_MAP_UNPACK_WITH_CALL`` have been
+removed.
+
+..
+
+.. bpo: 39219
+.. date: 2020-01-05-13-36-08
+.. nonce: uHtKd4
+.. section: Core and Builtins
+
+Syntax errors raised in the tokenizer now always set correct "text" and
+"offset" attributes.
+
+..
+
+.. bpo: 36051
+.. date: 2019-12-30-15-56-07
+.. nonce: imaVlq
+.. section: Core and Builtins
+
+Drop the GIL during large ``bytes.join`` operations. Patch by Bruce Merry.
+
+..
+
+.. bpo: 38960
+.. date: 2019-12-03-16-41-22
+.. nonce: kvoFM0
+.. section: Core and Builtins
+
+Fix DTrace build issues on FreeBSD. Patch by David Carlier.
+
+..
+
+.. bpo: 37207
+.. date: 2019-06-09-10-54-31
+.. nonce: bLjgLR
+.. section: Core and Builtins
+
+Speed up calls to ``range()`` by about 30%, by using the PEP 590
+``vectorcall`` calling convention. Patch by Mark Shannon.
+
+..
+
+.. bpo: 36144
+.. date: 2019-03-02-23-03-34
+.. nonce: LRl4LS
+.. section: Core and Builtins
+
+:class:`dict` (and :class:`collections.UserDict`) objects now support PEP
+584's merge (``|``) and update (``|=``) operators. Patch by Brandt Bucher.
+
+..
+
+.. bpo: 32856
+.. date: 2018-02-16-10-44-24
+.. nonce: UjR8SD
+.. section: Core and Builtins
+
+Optimized the idiom for assignment a temporary variable in comprehensions.
+Now ``for y in [expr]`` in comprehensions is as fast as a simple assignment
+``y = expr``.
+
+..
+
+.. bpo: 30566
+.. date: 2020-02-24-03-45-28
+.. nonce: qROxty
+.. section: Library
+
+Fix :exc:`IndexError` when trying to decode an invalid string with punycode
+codec.
+
+..
+
+.. bpo: 39649
+.. date: 2020-02-23-21-27-10
+.. nonce: qiubSp
+.. section: Library
+
+Remove obsolete check for `__args__` in bdb.Bdb.format_stack_entry.
+
+..
+
+.. bpo: 39648
+.. date: 2020-02-22-12-49-04
+.. nonce: Y-9N7F
+.. section: Library
+
+Expanded :func:`math.gcd` and :func:`math.lcm` to handle multiple arguments.
+
+..
+
+.. bpo: 39681
+.. date: 2020-02-21-13-58-40
+.. nonce: zN8hf0
+.. section: Library
+
+Fix a regression where the C pickle module wouldn't allow unpickling from a
+file-like object that doesn't expose a readinto() method.
+
+..
+
+.. bpo: 35950
+.. date: 2020-02-21-02-42-41
+.. nonce: 9G3-wl
+.. section: Library
+
+Raise :exc:`io.UnsupportedOperation` in :meth:`io.BufferedReader.truncate`
+when it is called on a read-only :class:`io.BufferedReader` instance.
+
+..
+
+.. bpo: 39479
+.. date: 2020-02-18-12-37-16
+.. nonce: j3UcCq
+.. section: Library
+
+Add :func:`math.lcm` function: least common multiple.
+
+..
+
+.. bpo: 39674
+.. date: 2020-02-18-12-31-24
+.. nonce: S_zqVM
+.. section: Library
+
+Revert "Do not expose abstract collection classes in the collections module"
+change (bpo-25988). Aliases to ABC like collections.Mapping are kept in
+Python 3.9 to ease transition from Python 2.7, but will be removed in Python
+3.10.
+
+..
+
+.. bpo: 39104
+.. date: 2020-02-16-18-49-16
+.. nonce: cI5MJY
+.. section: Library
+
+Fix hanging ProcessPoolExcutor on ``shutdown(wait=False)`` when a task has
+failed pickling.
+
+..
+
+.. bpo: 39627
+.. date: 2020-02-13-18-14-15
+.. nonce: Q0scyQ
+.. section: Library
+
+Fixed TypedDict totality check for inherited keys.
+
+..
+
+.. bpo: 39474
+.. date: 2020-02-12-12-01-26
+.. nonce: RZMEUH
+.. section: Library
+
+Fixed starting position of AST for expressions like ``(a)(b)``, ``(a)[b]``
+and ``(a).b``.
+
+..
+
+.. bpo: 21016
+.. date: 2020-02-12-10-04-39
+.. nonce: bFXPH7
+.. section: Library
+
+The :mod:`pydoc` and :mod:`trace` modules now use the :mod:`sysconfig`
+module to get the path to the Python standard library, to support uncommon
+installation path like ``/usr/lib64/python3.9/`` on Fedora. Patch by Jan
+Matějek.
+
+..
+
+.. bpo: 39590
+.. date: 2020-02-09-05-51-05
+.. nonce: rf98GU
+.. section: Library
+
+Collections.deque now holds strong references during deque.__contains__ and
+deque.count, fixing crashes.
+
+..
+
+.. bpo: 39586
+.. date: 2020-02-08-13-37-00
+.. nonce: nfTPxX
+.. section: Library
+
+The distutils ``bdist_msi`` command is deprecated in Python 3.9, use
+``bdist_wheel`` (wheel packages) instead.
+
+..
+
+.. bpo: 39595
+.. date: 2020-02-07-23-14-14
+.. nonce: DHwddE
+.. section: Library
+
+Improved performance of zipfile.Path for files with a large number of
+entries. Also improved performance and fixed minor issue as published with
+`importlib_metadata 1.5
+<https://importlib-metadata.readthedocs.io/en/latest/changelog%20(links).html#v1-5-0>`_.
+
+..
+
+.. bpo: 39350
+.. date: 2020-02-06-13-34-52
+.. nonce: wRwup1
+.. section: Library
+
+Fix regression in :class:`fractions.Fraction` if the numerator and/or the
+denominator is an :class:`int` subclass. The :func:`math.gcd` function is
+now used to normalize the *numerator* and *denominator*. :func:`math.gcd`
+always return a :class:`int` type. Previously, the GCD type depended on
+*numerator* and *denominator*.
+
+..
+
+.. bpo: 39567
+.. date: 2020-02-06-10-23-32
+.. nonce: VpFBxt
+.. section: Library
+
+Added audit for :func:`os.walk`, :func:`os.fwalk`, :meth:`pathlib.Path.glob`
+and :meth:`pathlib.Path.rglob`.
+
+..
+
+.. bpo: 39559
+.. date: 2020-02-05-18-29-14
+.. nonce: L8i5YB
+.. section: Library
+
+Remove unused, undocumented argument ``getters`` from :func:`uuid.getnode`
+
+..
+
+.. bpo: 38149
+.. date: 2020-02-05-11-24-16
+.. nonce: GWsjHE
+.. section: Library
+
+:func:`sys.audit` is now called only once per call of :func:`glob.glob` and
+:func:`glob.iglob`.
+
+..
+
+.. bpo: 39546
+.. date: 2020-02-03-15-12-51
+.. nonce: _Kj0Pn
+.. section: Library
+
+Fix a regression in :class:`~argparse.ArgumentParser` where
+``allow_abbrev=False`` was ignored for long options that used a prefix
+character other than "-".
+
+..
+
+.. bpo: 39450
+.. date: 2020-02-02-14-46-34
+.. nonce: 48R274
+.. section: Library
+
+Striped whitespace from docstring before returning it from
+:func:`unittest.case.shortDescription`.
+
+..
+
+.. bpo: 12915
+.. date: 2020-02-02-10-08-25
+.. nonce: d6r50-
+.. section: Library
+
+A new function ``resolve_name`` has been added to the ``pkgutil`` module.
+This resolves a string of the form ``'a.b.c.d'`` or ``'a.b:c.d'`` to an
+object. In the example, ``a.b`` is a package/module and ``c.d`` is an object
+within that package/module reached via recursive attribute access.
+
+..
+
+.. bpo: 39353
+.. date: 2020-01-30-09-07-16
+.. nonce: wTl9hc
+.. section: Library
+
+The :func:`binascii.crc_hqx` function is no longer deprecated.
+
+..
+
+.. bpo: 39493
+.. date: 2020-01-30-01-13-19
+.. nonce: CbFRi7
+.. section: Library
+
+Mark ``typing.IO.closed`` as a property
+
+..
+
+.. bpo: 39491
+.. date: 2020-01-29-22-47-12
+.. nonce: tdl17b
+.. section: Library
+
+Add :data:`typing.Annotated` and ``include_extras`` parameter to
+:func:`typing.get_type_hints` as part of :pep:`593`. Patch by Till
+Varoquaux, documentation by Till Varoquaux and Konstantin Kashin.
+
+..
+
+.. bpo: 39485
+.. date: 2020-01-29-14-58-27
+.. nonce: Zy3ot6
+.. section: Library
+
+Fix a bug in :func:`unittest.mock.create_autospec` that would complain about
+the wrong number of arguments for custom descriptors defined in an extension
+module returning functions.
+
+..
+
+.. bpo: 38932
+.. date: 2020-01-25-13-41-27
+.. nonce: 1pu_8I
+.. section: Library
+
+Mock fully resets child objects on reset_mock(). Patch by Vegard Stikbakke
+
+..
+
+.. bpo: 39082
+.. date: 2020-01-24-13-24-35
+.. nonce: qKgrq_
+.. section: Library
+
+Allow AsyncMock to correctly patch static/class methods
+
+..
+
+.. bpo: 39432
+.. date: 2020-01-23-16-08-58
+.. nonce: Cee6mi
+.. section: Library
+
+Implement PEP-489 algorithm for non-ascii "PyInit\_..." symbol names in
+distutils to make it export the correct init symbol also on Windows.
+
+..
+
+.. bpo: 18819
+.. date: 2020-01-20-10-06-19
+.. nonce: H4qsoS
+.. section: Library
+
+Omit ``devmajor`` and ``devminor`` fields for non-device files in
+:mod:`tarfile` archives, enabling bit-for-bit compatibility with GNU
+``tar(1)``.
+
+..
+
+.. bpo: 39349
+.. date: 2020-01-19-04-12-34
+.. nonce: 7CV-LC
+.. section: Library
+
+Added a new *cancel_futures* parameter to
+:meth:`concurrent.futures.Executor.shutdown` that cancels all pending
+futures which have not started running, instead of waiting for them to
+complete before shutting down the executor.
+
+..
+
+.. bpo: 39274
+.. date: 2020-01-15-23-13-03
+.. nonce: lpc0-n
+.. section: Library
+
+``bool(fraction.Fraction)`` now returns a boolean even if (numerator != 0)
+does not return a boolean (ex: numpy number).
+
+..
+
+.. bpo: 34793
+.. date: 2019-12-09-17-24-29
+.. nonce: D82Dyu
+.. section: Library
+
+Remove support for ``with (await asyncio.lock):`` and ``with (yield from
+asyncio.lock):``.  The same is correct for ``asyncio.Condition`` and
+``asyncio.Semaphore``.
+
+..
+
+.. bpo: 25597
+.. date: 2019-09-12-12-11-05
+.. nonce: mPMzVx
+.. section: Library
+
+Ensure, if ``wraps`` is supplied to :class:`unittest.mock.MagicMock`, it is
+used to calculate return values for the magic methods instead of using the
+default return values. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 36350
+.. date: 2019-03-18-16-17-59
+.. nonce: udRSWE
+.. section: Library
+
+`inspect.Signature.parameters` and `inspect.BoundArguments.arguments` are
+now dicts instead of OrderedDicts. Patch contributed by Rémi Lapeyre.
+
+..
+
+.. bpo: 35727
+.. date: 2019-01-12-20-39-34
+.. nonce: FWrbHn
+.. section: Library
+
+Fix sys.exit() and sys.exit(None) exit code propagation when used in
+multiprocessing.Process.
+
+..
+
+.. bpo: 32173
+.. date: 2017-12-04-10-14-23
+.. nonce: e0C5dF
+.. section: Library
+
+* Add `lazycache` function to `__all__`.
+* Use `dict.clear` to clear the cache.
+* Refactoring `getline` function and `checkcache` function.
+
+..
+
+.. bpo: 17422
+.. date: 2020-02-19-11-13-47
+.. nonce: g7_9zz
+.. section: Documentation
+
+The language reference now specifies restrictions on class namespaces.
+Adapted from a patch by Ethan Furman.
+
+..
+
+.. bpo: 39572
+.. date: 2020-02-18-18-37-07
+.. nonce: CCtzy1
+.. section: Documentation
+
+Updated documentation of ``total`` flag of TypeDict.
+
+..
+
+.. bpo: 39654
+.. date: 2020-02-18-07-42-20
+.. nonce: MoT1jI
+.. section: Documentation
+
+In pyclbr doc, update 'class' to 'module' where appropriate and add
+readmodule comment. Patch by Hakan Çelik.
+
+..
+
+.. bpo: 39153
+.. date: 2020-01-27-22-24-51
+.. nonce: Pjl8jV
+.. section: Documentation
+
+Clarify refcounting semantics for the following functions: -
+PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem -
+PyDict_SetItemString
+
+..
+
+.. bpo: 39392
+.. date: 2020-01-27-18-18-42
+.. nonce: oiqcLO
+.. section: Documentation
+
+Explain that when filling with turtle, overlap regions may be left unfilled.
+
+..
+
+.. bpo: 39369
+.. date: 2020-01-17-13-59-21
+.. nonce: Bx5yE3
+.. section: Documentation
+
+Update mmap readline method description. The fact that the readline method
+does update the file position should not be ignored since this might give
+the impression for the programmer that it doesn't update it.
+
+..
+
+.. bpo: 9056
+.. date: 2018-09-28-18-13-08
+.. nonce: -sFOwU
+.. section: Documentation
+
+Include subsection in TOC for PDF version of docs.
+
+..
+
+.. bpo: 38325
+.. date: 2020-02-11-00-38-32
+.. nonce: HgmfoE
+.. section: Tests
+
+Skip tests on non-BMP characters of test_winconsoleio.
+
+..
+
+.. bpo: 39502
+.. date: 2020-01-30-15-04-54
+.. nonce: chbpII
+.. section: Tests
+
+Skip test_zipfile.test_add_file_after_2107() if :func:`time.localtime` fails
+with :exc:`OverflowError`. It is the case on AIX 6.1 for example.
+
+..
+
+.. bpo: 39489
+.. date: 2020-01-29-19-17-02
+.. nonce: HKPzv-
+.. section: Build
+
+Remove ``COUNT_ALLOCS`` special build.
+
+..
+
+.. bpo: 39553
+.. date: 2020-02-04-19-50-53
+.. nonce: _EnweA
+.. section: Windows
+
+Delete unused code related to SxS manifests.
+
+..
+
+.. bpo: 39439
+.. date: 2020-01-24-03-15-05
+.. nonce: sFxGfR
+.. section: Windows
+
+Honor the Python path when a virtualenv is active on Windows.
+
+..
+
+.. bpo: 39393
+.. date: 2020-01-20-23-42-53
+.. nonce: gWlJDG
+.. section: Windows
+
+Improve the error message when attempting to load a DLL with unresolved
+dependencies.
+
+..
+
+.. bpo: 38883
+.. date: 2020-01-11-22-53-55
+.. nonce: X7FRaN
+.. section: Windows
+
+:meth:`~pathlib.Path.home()` and :meth:`~pathlib.Path.expanduser()` on
+Windows now prefer :envvar:`USERPROFILE` and no longer use :envvar:`HOME`,
+which is not normally set for regular user accounts. This makes them again
+behave like :func:`os.path.expanduser`, which was changed to ignore
+:envvar:`HOME` in 3.8, see :issue:`36264`.
+
+..
+
+.. bpo: 39185
+.. date: 2020-01-02-01-11-53
+.. nonce: T4herN
+.. section: Windows
+
+The build.bat script has additional options for very-quiet output (-q) and
+very-verbose output (-vv)
+
+..
+
+.. bpo: 39663
+.. date: 2020-02-17-21-09-03
+.. nonce: wexcsH
+.. section: IDLE
+
+Add tests for pyparse find_good_parse_start().
+
+..
+
+.. bpo: 39600
+.. date: 2020-02-10-17-09-48
+.. nonce: X6NsyM
+.. section: IDLE
+
+In the font configuration window, remove duplicated font names.
+
+..
+
+.. bpo: 30780
+.. date: 2020-01-27-16-44-29
+.. nonce: nR80qu
+.. section: IDLE
+
+Add remaining configdialog tests for buttons and highlights and keys tabs.
+
+..
+
+.. bpo: 39388
+.. date: 2020-01-25-02-26-45
+.. nonce: x4TQNh
+.. section: IDLE
+
+IDLE Settings Cancel button now cancels pending changes
+
+..
+
+.. bpo: 38792
+.. date: 2019-11-13-23-51-39
+.. nonce: xhTC5a
+.. section: IDLE
+
+Close an IDLE shell calltip if a :exc:`KeyboardInterrupt` or shell restart
+occurs.  Patch by Zackery Spytz.
+
+..
+
+.. bpo: 35081
+.. date: 2020-02-12-21-38-49
+.. nonce: 5tj1yC
+.. section: C API
+
+Move the ``bytes_methods.h`` header file to the internal C API as
+``pycore_bytes_methods.h``: it only contains private symbols (prefixed by
+``_Py``), except of the ``PyDoc_STRVAR_shared()`` macro.
+
+..
+
+.. bpo: 35081
+.. date: 2020-02-12-21-24-02
+.. nonce: at7BjN
+.. section: C API
+
+Move the ``dtoa.h`` header file to the internal C API as ``pycore_dtoa.h``:
+it only contains private functions (prefixed by ``_Py``). The :mod:`math`
+and :mod:`cmath` modules must now be compiled with the ``Py_BUILD_CORE``
+macro defined.
+
+..
+
+.. bpo: 39573
+.. date: 2020-02-07-10-41-53
+.. nonce: EG9VDI
+.. section: C API
+
+Add :c:func:`Py_SET_SIZE` function to set the size of an object.
+
+..
+
+.. bpo: 39500
+.. date: 2020-02-07-09-35-43
+.. nonce: xRAEgX
+.. section: C API
+
+:c:func:`PyUnicode_IsIdentifier` does not call :c:func:`Py_FatalError`
+anymore if the string is not ready.
+
+..
+
+.. bpo: 39573
+.. date: 2020-02-07-03-39-03
+.. nonce: Oa8cL1
+.. section: C API
+
+Add :c:func:`Py_SET_TYPE` function to set the type of an object.
+
+..
+
+.. bpo: 39573
+.. date: 2020-02-07-00-23-44
+.. nonce: nRD1q7
+.. section: C API
+
+Add a :c:func:`Py_SET_REFCNT` function to set the reference counter of an
+object.
+
+..
+
+.. bpo: 39542
+.. date: 2020-02-05-13-14-20
+.. nonce: 5mleGX
+.. section: C API
+
+Convert :c:func:`PyType_HasFeature`, :c:func:`PyType_Check` and
+:c:func:`PyType_CheckExact` macros to static inline functions.
+
+..
+
+.. bpo: 39542
+.. date: 2020-02-05-12-40-51
+.. nonce: si-_Zq
+.. section: C API
+
+In the limited C API, ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` are
+now defined as aliases to :c:func:`PyObject_Init` and
+:c:func:`PyObject_InitVar` to make their implementation opaque. It avoids to
+leak implementation details in the limited C API. Exclude the following
+functions from the limited C API: ``_Py_NewReference()``,
+``_Py_ForgetReference()``, ``_PyTraceMalloc_NewReference()`` and
+``_Py_GetRefTotal()``.
+
+..
+
+.. bpo: 39542
+.. date: 2020-02-05-12-00-18
+.. nonce: RJCUKR
+.. section: C API
+
+Exclude trashcan mechanism from the limited C API: it requires access to
+PyTypeObject and PyThreadState structure fields, whereas these structures
+are opaque in the limited C API.
+
+..
+
+.. bpo: 39511
+.. date: 2020-01-31-16-35-21
+.. nonce: nv9yEn
+.. section: C API
+
+The :c:func:`PyThreadState_Clear` function now calls the
+:c:member:`PyThreadState.on_delete` callback. Previously, that happened in
+:c:func:`PyThreadState_Delete`.
+
+..
+
+.. bpo: 38076
+.. date: 2020-01-17-11-37-05
+.. nonce: cxfw2x
+.. section: C API
+
+Fix to clear the interpreter state only after clearing module globals to
+guarantee module state access from C Extensions during runtime destruction
+
+..
+
+.. bpo: 39245
+.. date: 2020-01-07-13-46-40
+.. nonce: G7wog6
+.. section: C API
+
+The Vectorcall API (PEP 590) was made public, adding the functions
+``PyObject_Vectorcall``, ``PyObject_VectorcallMethod``,
+``PyVectorcall_Function``, ``PyObject_CallOneArg``,
+``PyObject_CallMethodNoArgs``, ``PyObject_CallMethodOneArg``,
+``PyObject_FastCallDict``, and the flag ``Py_TPFLAGS_HAVE_VECTORCALL``.
diff --git a/Misc/NEWS.d/3.9.0a5.rst b/Misc/NEWS.d/3.9.0a5.rst
new file mode 100644
index 0000000..ede281b
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a5.rst
@@ -0,0 +1,1310 @@
+.. bpo: 38576
+.. date: 2020-03-14-14-57-44
+.. nonce: OowwQn
+.. release date: 2020-03-23
+.. section: Security
+
+Disallow control characters in hostnames in http.client, addressing
+CVE-2019-18348. Such potentially malicious header injection URLs now cause a
+InvalidURL to be raised.
+
+..
+
+.. bpo: 40010
+.. date: 2020-03-20-13-51-55
+.. nonce: QGf5s8
+.. section: Core and Builtins
+
+Optimize pending calls in multithreaded applications. If a thread different
+than the main thread schedules a pending call (:c:func:`Py_AddPendingCall`),
+the bytecode evaluation loop is no longer interrupted at each bytecode
+instruction to check for pending calls which cannot be executed. Only the
+main thread can execute pending calls.
+
+Previously, the bytecode evaluation loop was interrupted at each instruction
+until the main thread executes pending calls.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-20-13-42-35
+.. nonce: bhIu5M
+.. section: Core and Builtins
+
+Port _weakref extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-19-23-34-22
+.. nonce: ayunLM
+.. section: Core and Builtins
+
+Port _collections module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 40010
+.. date: 2020-03-19-02-26-13
+.. nonce: Y-LIR0
+.. section: Core and Builtins
+
+Optimize signal handling in multithreaded applications. If a thread
+different than the main thread gets a signal, the bytecode evaluation loop
+is no longer interrupted at each bytecode instruction to check for pending
+signals which cannot be handled. Only the main thread of the main
+interpreter can handle signals.
+
+Previously, the bytecode evaluation loop was interrupted at each instruction
+until the main thread handles signals.
+
+..
+
+.. bpo: 39984
+.. date: 2020-03-19-00-45-37
+.. nonce: u-bHIq
+.. section: Core and Builtins
+
+If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function
+is now scheduled to be called from the subinterpreter, rather than being
+called from the main interpreter. Each subinterpreter now has its own list
+of scheduled calls.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-18-19-48-53
+.. nonce: ELEihr
+.. section: Core and Builtins
+
+Port _heapq module to multiphase initialization.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-18-00-17-26
+.. nonce: 7AtdhP
+.. section: Core and Builtins
+
+Port itertools module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 37207
+.. date: 2020-03-17-22-35-29
+.. nonce: sBAV1j
+.. section: Core and Builtins
+
+Speed up calls to ``frozenset()`` by using the :pep:`590` ``vectorcall``
+calling convention. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39984
+.. date: 2020-03-17-01-55-33
+.. nonce: y5Chgb
+.. section: Core and Builtins
+
+subinterpreters: Move ``_PyRuntimeState.ceval.tracing_possible`` to
+``PyInterpreterState.ceval.tracing_possible``: each interpreter now has its
+own variable.
+
+..
+
+.. bpo: 37207
+.. date: 2020-03-15-23-16-00
+.. nonce: 6XbnQA
+.. section: Core and Builtins
+
+Speed up calls to ``set()`` by using the :pep:`590` ``vectorcall`` calling
+convention. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-15-20-51-15
+.. nonce: iH0JND
+.. section: Core and Builtins
+
+Port _statistics module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 39968
+.. date: 2020-03-15-13-51-10
+.. nonce: f-Xi39
+.. section: Core and Builtins
+
+Use inline function to replace extension modules' get_module_state macros.
+
+..
+
+.. bpo: 39965
+.. date: 2020-03-15-03-52-01
+.. nonce: Od3ZdP
+.. section: Core and Builtins
+
+Correctly raise ``SyntaxError`` if *await* is used inside non-async
+functions and ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` is set (like in the asyncio
+REPL). Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39562
+.. date: 2020-03-12-22-13-50
+.. nonce: E2u273
+.. section: Core and Builtins
+
+Allow executing asynchronous comprehensions on the top level when the
+``PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag is given. Patch by Batuhan Taskaya.
+
+..
+
+.. bpo: 37207
+.. date: 2020-03-12-02-41-12
+.. nonce: ye7OM3
+.. section: Core and Builtins
+
+Speed up calls to ``tuple()`` by using the :pep:`590` ``vectorcall`` calling
+convention. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 38373
+.. date: 2020-03-11-12-28-16
+.. nonce: FE9S21
+.. section: Core and Builtins
+
+Chaged list overallocation strategy. It no longer overallocates if the new
+size is closer to overalocated size than to the old size and adds padding.
+
+..
+
+.. bpo: 39926
+.. date: 2020-03-10-19-14-42
+.. nonce: H19bAa
+.. section: Core and Builtins
+
+Update Unicode database to Unicode version 13.0.0.
+
+..
+
+.. bpo: 19466
+.. date: 2020-03-08-12-11-38
+.. nonce: OdOpXP
+.. section: Core and Builtins
+
+Clear the frames of daemon threads earlier during the Python shutdown to
+call objects destructors. So "unclosed file" resource warnings are now
+emitted for daemon threads in a more reliable way.
+
+..
+
+.. bpo: 38894
+.. date: 2020-03-06-21-04-39
+.. nonce: nfcGKv
+.. section: Core and Builtins
+
+Fix a bug that was causing incomplete results when calling
+``pathlib.Path.glob`` in the presence of symlinks that point to files where
+the user does not have read access. Patch by Pablo Galindo and Matt
+Wozniski.
+
+..
+
+.. bpo: 39877
+.. date: 2020-03-06-18-30-00
+.. nonce: bzd1y0
+.. section: Core and Builtins
+
+Fix :c:func:`PyEval_RestoreThread` random crash at exit with daemon threads.
+It now accesses the ``_PyRuntime`` variable directly instead of using
+``tstate->interp->runtime``, since ``tstate`` can be a dangling pointer
+after :c:func:`Py_Finalize` has been called. Moreover, the daemon thread now
+exits before trying to take the GIL.
+
+..
+
+.. bpo: 39871
+.. date: 2020-03-06-06-12-37
+.. nonce: dCAj_2
+.. section: Core and Builtins
+
+Fix a possible :exc:`SystemError` in ``math.{atan2,copysign,remainder}()``
+when the first argument cannot be converted to a :class:`float`. Patch by
+Zackery Spytz.
+
+..
+
+.. bpo: 39776
+.. date: 2020-03-02-20-12-33
+.. nonce: fNaxi_
+.. section: Core and Builtins
+
+Fix race condition where threads created by PyGILState_Ensure() could get a
+duplicate id.
+
+This affects consumers of tstate->id like the contextvar caching machinery,
+which could return invalid cached objects under heavy thread load (observed
+in embedded scenarios).
+
+..
+
+.. bpo: 39778
+.. date: 2020-03-02-19-21-21
+.. nonce: _YGLEc
+.. section: Core and Builtins
+
+Fixed a crash due to incorrect handling of weak references in
+``collections.OrderedDict`` classes. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-02-22-14-33-59
+.. nonce: BTJ0cX
+.. section: Core and Builtins
+
+Port audioop extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 39702
+.. date: 2020-02-20-08-12-52
+.. nonce: 4_AmyF
+.. section: Core and Builtins
+
+Relax :term:`decorator` grammar restrictions to allow any valid expression
+(:pep:`614`).
+
+..
+
+.. bpo: 38091
+.. date: 2020-02-14-23-10-07
+.. nonce: pwR0K7
+.. section: Core and Builtins
+
+Tweak import deadlock detection code to not deadlock itself.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-02-05-07-55-57
+.. nonce: H_tCC9
+.. section: Core and Builtins
+
+Port _locale extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 39087
+.. date: 2020-02-03-21-12-39
+.. nonce: YnbUpL
+.. section: Core and Builtins
+
+Optimize :c:func:`PyUnicode_AsUTF8` and :c:func:`PyUnicode_AsUTF8AndSize`
+slightly when they need to create internal UTF-8 cache.
+
+..
+
+.. bpo: 39520
+.. date: 2020-02-02-00-12-07
+.. nonce: uicBq6
+.. section: Core and Builtins
+
+Fix unparsing of ext slices with no items (``foo[:,]``). Patch by Batuhan
+Taskaya.
+
+..
+
+.. bpo: 39220
+.. date: 2020-01-06-13-58-37
+.. nonce: KGFovE
+.. section: Core and Builtins
+
+Do not optimize annotations if 'from __future__ import annotations' is used.
+Patch by Pablo Galindo.
+
+..
+
+.. bpo: 35712
+.. date: 2019-05-08-11-11-45
+.. nonce: KJthus
+.. section: Core and Builtins
+
+Using :data:`NotImplemented` in a boolean context has been deprecated. Patch
+contributed by Josh Rosenberg.
+
+..
+
+.. bpo: 22490
+.. date: 2018-09-23-16-32-58
+.. nonce: 8e0YDf
+.. section: Core and Builtins
+
+Don't leak environment variable ``__PYVENV_LAUNCHER__`` into the interpreter
+session on macOS.
+
+..
+
+.. bpo: 39830
+.. date: 2020-03-23-05-21-13
+.. nonce: IkqU1Y
+.. section: Library
+
+Add :class:`zipfile.Path` to ``__all__`` in the :mod:`zipfile` module.
+
+..
+
+.. bpo: 40000
+.. date: 2020-03-18-12-54-25
+.. nonce: FnsPZC
+.. section: Library
+
+Improved error messages for validation of ``ast.Constant`` nodes. Patch by
+Batuhan Taskaya.
+
+..
+
+.. bpo: 39999
+.. date: 2020-03-18-11-50-25
+.. nonce: 8aOXDT
+.. section: Library
+
+``__module__`` of the AST node classes is now set to "ast" instead of
+"_ast". Added docstrings for dummy AST node classes and deprecated
+attributes.
+
+..
+
+.. bpo: 39991
+.. date: 2020-03-17-12-40-38
+.. nonce: hLPPs4
+.. section: Library
+
+:func:`uuid.getnode` now skips IPv6 addresses with the same string length
+than a MAC address (17 characters): only use MAC addresses.
+
+..
+
+.. bpo: 39988
+.. date: 2020-03-17-09-35-00
+.. nonce: kXGl35
+.. section: Library
+
+Deprecated ``ast.AugLoad`` and ``ast.AugStore`` node classes because they
+are no longer used.
+
+..
+
+.. bpo: 39656
+.. date: 2020-03-16-11-38-45
+.. nonce: MaNOgm
+.. section: Library
+
+Ensure ``bin/python3.#`` is always present in virtual environments on POSIX
+platforms - by Anthony Sottile.
+
+..
+
+.. bpo: 39969
+.. date: 2020-03-15-17-56-48
+.. nonce: 6snm0c
+.. section: Library
+
+Deprecated ``ast.Param`` node class because it's no longer used. Patch by
+Batuhan Taskaya.
+
+..
+
+.. bpo: 39360
+.. date: 2020-03-15-05-41-05
+.. nonce: cmcU5p
+.. section: Library
+
+Ensure all workers exit when finalizing a :class:`multiprocessing.Pool`
+implicitly via the module finalization handlers of multiprocessing. This
+fixes a deadlock situation that can be experienced when the Pool is not
+properly finalized via the context manager or a call to
+``multiprocessing.Pool.terminate``. Patch by Batuhan Taskaya and Pablo
+Galindo.
+
+..
+
+.. bpo: 35370
+.. date: 2020-03-13-14-41-28
+.. nonce: df50Q7
+.. section: Library
+
+sys.settrace(), sys.setprofile() and _lsprof.Profiler.enable() now properly
+report :c:func:`PySys_Audit` error if "sys.setprofile" or "sys.settrace"
+audit event is denied.
+
+..
+
+.. bpo: 39936
+.. date: 2020-03-12-21-59-47
+.. nonce: Ca9IKe
+.. section: Library
+
+AIX: Fix _aix_support module when the subprocess is not available, when
+building Python from scratch. It now uses new private _bootsubprocess
+module, rather than having two implementations depending if subprocess is
+available or not. So _aix_support.aix_platform() result is now the same if
+subprocess is available or not.
+
+..
+
+.. bpo: 36144
+.. date: 2020-03-12-11-55-16
+.. nonce: 9bxGH_
+.. section: Library
+
+:class:`collections.OrderedDict` now implements ``|`` and ``|=``
+(:pep:`584`).
+
+..
+
+.. bpo: 39652
+.. date: 2020-03-11-23-08-25
+.. nonce: gbasrk
+.. section: Library
+
+The column name found in ``sqlite3.Cursor.description`` is now truncated on
+the first '[' only if the PARSE_COLNAMES option is set.
+
+..
+
+.. bpo: 39915
+.. date: 2020-03-10-19-38-47
+.. nonce: CjPeiY
+.. section: Library
+
+Ensure :attr:`unittest.mock.AsyncMock.await_args_list` has call objects in
+the order of awaited arguments instead of using
+:attr:`unittest.mock.Mock.call_args` which has the last value of the call.
+Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 36144
+.. date: 2020-03-10-19-22-31
+.. nonce: LABm7W
+.. section: Library
+
+Updated :data:`os.environ` and :data:`os.environb` to support :pep:`584`'s
+merge (``|``) and update (``|=``) operators.
+
+..
+
+.. bpo: 38662
+.. date: 2020-03-10-15-32-31
+.. nonce: o1DMXj
+.. section: Library
+
+The ``ensurepip`` module now invokes ``pip`` via the ``runpy`` module. Hence
+it is no longer tightly coupled with the internal API of the bundled ``pip``
+version, allowing easier updates to a newer ``pip`` version both internally
+and for distributors.
+
+..
+
+.. bpo: 38075
+.. date: 2020-03-10-12-52-06
+.. nonce: qbESAF
+.. section: Library
+
+Fix the :meth:`random.Random.seed` method when a :class:`bool` is passed as
+the seed.
+
+..
+
+.. bpo: 39916
+.. date: 2020-03-09-18-56-27
+.. nonce: BHHyp3
+.. section: Library
+
+More reliable use of ``os.scandir()`` in ``Path.glob()``. It no longer emits
+a ResourceWarning when interrupted.
+
+..
+
+.. bpo: 39850
+.. date: 2020-03-09-01-45-06
+.. nonce: eaJNIE
+.. section: Library
+
+:mod:`multiprocessing` now supports abstract socket addresses (if abstract
+sockets are supported in the running platform). When creating arbitrary
+addresses (like when default-constructing
+:class:`multiprocessing.connection.Listener` objects) abstract sockets are
+preferred to avoid the case when the temporary-file-generated address is too
+large for an AF_UNIX socket address. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 36287
+.. date: 2020-03-08-09-53-55
+.. nonce: mxr5m8
+.. section: Library
+
+:func:`ast.dump()` no longer outputs optional fields and attributes with
+default values. The default values for optional fields and attributes of AST
+nodes are now set as class attributes (e.g. ``Constant.kind`` is set to
+``None``).
+
+..
+
+.. bpo: 39889
+.. date: 2020-03-07-16-44-51
+.. nonce: 3RYqeX
+.. section: Library
+
+Fixed :func:`ast.unparse` for extended slices containing a single element
+(e.g. ``a[i:j,]``). Remove redundant tuples when index with a tuple (e.g.
+``a[i, j]``).
+
+..
+
+.. bpo: 39828
+.. date: 2020-03-05-00-57-49
+.. nonce: yWq9NJ
+.. section: Library
+
+Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 13487
+.. date: 2020-03-04-16-10-59
+.. nonce: gqe4Fb
+.. section: Library
+
+Avoid a possible *"RuntimeError: dictionary changed size during iteration"*
+from :func:`inspect.getmodule` when it tried to loop through
+:attr:`sys.modules`.
+
+..
+
+.. bpo: 39674
+.. date: 2020-03-03-16-21-41
+.. nonce: HJVkD5
+.. section: Library
+
+Revert "bpo-37330: open() no longer accept 'U' in file mode". The "U" mode
+of open() is kept in Python 3.9 to ease transition from Python 2.7, but will
+be removed in Python 3.10.
+
+..
+
+.. bpo: 28577
+.. date: 2020-03-02-23-52-38
+.. nonce: EK91ae
+.. section: Library
+
+The hosts method on 32-bit prefix length IPv4Networks and 128-bit prefix
+IPv6Networks now returns a list containing the single Address instead of an
+empty list.
+
+..
+
+.. bpo: 39826
+.. date: 2020-03-02-15-15-01
+.. nonce: DglHk7
+.. section: Library
+
+Add getConnection method to logging HTTPHandler to enable custom
+connections.
+
+..
+
+.. bpo: 39763
+.. date: 2020-03-02-14-43-19
+.. nonce: 5a822c
+.. section: Library
+
+Reimplement :func:`distutils.spawn.spawn` function with the
+:mod:`subprocess` module.
+
+..
+
+.. bpo: 39794
+.. date: 2020-02-29-19-17-39
+.. nonce: 7VjatS
+.. section: Library
+
+Add --without-decimal-contextvar build option.  This enables a thread-local
+rather than a coroutine local context.
+
+..
+
+.. bpo: 36144
+.. date: 2020-02-29-15-54-08
+.. nonce: 4GgTZs
+.. section: Library
+
+:class:`collections.defaultdict` now implements ``|`` (:pep:`584`).
+
+..
+
+.. bpo: 39517
+.. date: 2020-02-29-11-20-50
+.. nonce: voQZb8
+.. section: Library
+
+Fix runpy.run_path() when using pathlike objects
+
+..
+
+.. bpo: 39775
+.. date: 2020-02-28-16-42-16
+.. nonce: IuSvVb
+.. section: Library
+
+Change ``inspect.Signature.parameters`` back to ``collections.OrderedDict``.
+This was changed to ``dict`` in Python 3.9.0a4.
+
+..
+
+.. bpo: 39678
+.. date: 2020-02-28-12-59-30
+.. nonce: 3idfxM
+.. section: Library
+
+Refactor queue_manager in :class:`concurrent.futures.ProcessPoolExecutor` to
+make it easier to maintain.
+
+..
+
+.. bpo: 39764
+.. date: 2020-02-27-18-21-07
+.. nonce: wqPk68
+.. section: Library
+
+Fix AttributeError when calling get_stack on a PyAsyncGenObject Task
+
+..
+
+.. bpo: 39769
+.. date: 2020-02-27-00-40-21
+.. nonce: hJmxu4
+.. section: Library
+
+The :func:`compileall.compile_dir` function's *ddir* parameter and the
+compileall command line flag `-d` no longer write the wrong pathname to the
+generated pyc file for submodules beneath the root of the directory tree
+being compiled.  This fixes a regression introduced with Python 3.5.
+
+..
+
+.. bpo: 36144
+.. date: 2020-02-25-09-28-06
+.. nonce: Rbvvi7
+.. section: Library
+
+:class:`types.MappingProxyType` objects now support the merge (``|``)
+operator from :pep:`584`.
+
+..
+
+.. bpo: 38691
+.. date: 2020-02-23-02-09-03
+.. nonce: oND8Sk
+.. section: Library
+
+The :mod:`importlib` module now ignores the :envvar:`PYTHONCASEOK`
+environment variable when the :option:`-E` or :option:`-I` command line
+options are being used.
+
+..
+
+.. bpo: 39719
+.. date: 2020-02-21-22-35-57
+.. nonce: 2jLy1C
+.. section: Library
+
+Remove :meth:`tempfile.SpooledTemporaryFile.softspace` as files no longer
+have the ``softspace`` attribute in Python 3. Patch by Shantanu.
+
+..
+
+.. bpo: 39667
+.. date: 2020-02-17-22-38-15
+.. nonce: QuzEHH
+.. section: Library
+
+Improve pathlib.Path compatibility on zipfile.Path and correct performance
+degradation as found in zipp 3.0.
+
+..
+
+.. bpo: 39638
+.. date: 2020-02-15-20-38-11
+.. nonce: wm_RS3
+.. section: Library
+
+Keep ASDL signatures in the docstrings for ``AST`` nodes. Patch by Batuhan
+Taskaya
+
+..
+
+.. bpo: 39639
+.. date: 2020-02-15-15-29-34
+.. nonce: 3mqJjm
+.. section: Library
+
+Deprecated ``ast.Suite`` node class because it's no longer used. Patch by
+Batuhan Taskaya.
+
+..
+
+.. bpo: 39609
+.. date: 2020-02-11-19-45-31
+.. nonce: dk40Uw
+.. section: Library
+
+Add thread_name_prefix to default asyncio executor
+
+..
+
+.. bpo: 39548
+.. date: 2020-02-06-05-33-52
+.. nonce: DF4FFe
+.. section: Library
+
+Fix handling of header in :class:`urllib.request.AbstractDigestAuthHandler`
+when the optional ``qop`` parameter is not present.
+
+..
+
+.. bpo: 39509
+.. date: 2020-02-01-00-03-06
+.. nonce: -YxUSf
+.. section: Library
+
+HTTP status codes ``103 EARLY_HINTS`` and ``425 TOO_EARLY`` are added to
+:class:`http.HTTPStatus`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39507
+.. date: 2020-01-31-14-24-05
+.. nonce: 3oln1a
+.. section: Library
+
+Adding HTTP status 418 "I'm a Teapot" to HTTPStatus in http library. Patch
+by Ross Rhodes.
+
+..
+
+.. bpo: 39495
+.. date: 2020-01-30-07-02-02
+.. nonce: 8LsIRN
+.. section: Library
+
+Remove default value from *attrs* parameter of
+:meth:`xml.etree.ElementTree.TreeBuilder.start` for consistency between
+Python and C implementations.
+
+..
+
+.. bpo: 38971
+.. date: 2019-12-20-16-06-28
+.. nonce: fKRYlF
+.. section: Library
+
+Open issue in the BPO indicated a desire to make the implementation of
+codecs.open() at parity with io.open(), which implements a try/except to
+assure file stream gets closed before an exception is raised.
+
+..
+
+.. bpo: 38641
+.. date: 2019-10-30-15-31-09
+.. nonce: HrTL9k
+.. section: Library
+
+Added starred expressions support to ``return`` and ``yield`` statements for
+``lib2to3``. Patch by Vlad Emelianov.
+
+..
+
+.. bpo: 37534
+.. date: 2019-08-20-00-02-37
+.. nonce: TvjAUi
+.. section: Library
+
+When using minidom module to generate XML documents the ability to add
+Standalone Document Declaration is added. All the changes are made to
+generate a document in compliance with Extensible Markup Language (XML) 1.0
+(Fifth Edition) W3C Recommendation (available here:
+https://www.w3.org/TR/xml/#sec-prolog-dtd).
+
+..
+
+.. bpo: 34788
+.. date: 2019-07-17-08-26-14
+.. nonce: pwV1OK
+.. section: Library
+
+Add support for scoped IPv6 addresses to :mod:`ipaddress`. Patch by
+Oleksandr Pavliuk.
+
+..
+
+.. bpo: 34822
+.. date: 2018-09-27-19-31-47
+.. nonce: EztBhL
+.. section: Library
+
+Simplified AST for subscription. Simple indices are now represented by their
+value, extended slices are represented as tuples.  :mod:`ast` classes
+``Index`` and ``ExtSlice`` are considered deprecated and will be removed in
+future Python versions. In the meantime, ``Index(value)`` now returns a
+``value`` itself, ``ExtSlice(slices)`` returns ``Tuple(slices, Load())``.
+
+..
+
+.. bpo: 39868
+.. date: 2020-03-05-16-29-03
+.. nonce: JQoHhO
+.. section: Documentation
+
+Updated the Language Reference for :pep:`572`.
+
+..
+
+.. bpo: 13790
+.. date: 2020-02-28-14-39-25
+.. nonce: hvLaRI
+.. section: Documentation
+
+Change 'string' to 'specification' in format doc.
+
+..
+
+.. bpo: 17422
+.. date: 2020-02-27-17-35-27
+.. nonce: eS1hVh
+.. section: Documentation
+
+The language reference no longer restricts default class namespaces to dicts
+only.
+
+..
+
+.. bpo: 39530
+.. date: 2020-02-23-13-26-40
+.. nonce: _bCvzQ
+.. section: Documentation
+
+Fix misleading documentation about mixed-type numeric comparisons.
+
+..
+
+.. bpo: 39718
+.. date: 2020-02-21-22-05-20
+.. nonce: xtBoSi
+.. section: Documentation
+
+Update :mod:`token` documentation to reflect additions in Python 3.8
+
+..
+
+.. bpo: 39677
+.. date: 2020-02-18-14-28-31
+.. nonce: vNHqoX
+.. section: Documentation
+
+Changed operand name of **MAKE_FUNCTION** from *argc* to *flags* for module
+:mod:`dis`
+
+..
+
+.. bpo: 40019
+.. date: 2020-03-20-00-30-36
+.. nonce: zOqHpQ
+.. section: Tests
+
+test_gdb now skips tests if it detects that gdb failed to read debug
+information because the Python binary is optimized.
+
+..
+
+.. bpo: 27807
+.. date: 2020-03-18-16-04-33
+.. nonce: 9gKjET
+.. section: Tests
+
+``test_site.test_startup_imports()`` is now skipped if a path of
+:data:`sys.path` contains a ``.pth`` file.
+
+..
+
+.. bpo: 26067
+.. date: 2020-03-16-20-54-55
+.. nonce: m18_VV
+.. section: Tests
+
+Do not fail test_shutil test_chown test when uid or gid of user cannot be
+resolved to a name.
+
+..
+
+.. bpo: 39855
+.. date: 2020-03-04-23-03-01
+.. nonce: Ql5xv8
+.. section: Tests
+
+test_subprocess.test_user() now skips the test on an user name if the user
+name doesn't exist. For example, skip the test if the user "nobody" doesn't
+exist on Linux.
+
+..
+
+.. bpo: 39761
+.. date: 2020-03-03-15-56-07
+.. nonce: k10aGe
+.. section: Build
+
+Fix build with DTrace but without additional DFLAGS.
+
+..
+
+.. bpo: 39763
+.. date: 2020-03-02-14-44-09
+.. nonce: GGEwhH
+.. section: Build
+
+setup.py now uses a basic implementation of the :mod:`subprocess` module if
+the :mod:`subprocess` module is not available: before required C extension
+modules are built.
+
+..
+
+.. bpo: 1294959
+.. date: 2020-02-06-18-08-25
+.. nonce: AZPg4R
+.. section: Build
+
+Add ``--with-platlibdir`` option to the configure script: name of the
+platform-specific library directory, stored in the new
+:attr:`sys.platlibdir` attribute. It is used to build the path of
+platform-specific extension modules and the path of the standard library. It
+is equal to ``"lib"`` on most platforms. On Fedora and SuSE, it is equal to
+``"lib64"`` on 64-bit platforms. Patch by Jan Matějek, Matěj Cepl,
+Charalampos Stratakis and Victor Stinner.
+
+..
+
+.. bpo: 39930
+.. date: 2020-03-11-10-15-56
+.. nonce: LGHw1j
+.. section: Windows
+
+Ensures the required :file:`vcruntime140.dll` is included in install
+packages.
+
+..
+
+.. bpo: 39847
+.. date: 2020-03-04-17-05-11
+.. nonce: C3N2m3
+.. section: Windows
+
+Avoid hang when computer is hibernated whilst waiting for a mutex (for
+lock-related objects from :mod:`threading`) around 49-day uptime.
+
+..
+
+.. bpo: 38597
+.. date: 2020-03-01-15-04-54
+.. nonce: MnHdYl
+.. section: Windows
+
+:mod:`distutils` will no longer statically link :file:`vcruntime140.dll`
+when a redistributable version is unavailable. All future releases of
+CPython will include a copy of this DLL to ensure distributed extensions can
+continue to load.
+
+..
+
+.. bpo: 38380
+.. date: 2020-02-28-23-51-27
+.. nonce: TpOBCj
+.. section: Windows
+
+Update Windows builds to use SQLite 3.31.1
+
+..
+
+.. bpo: 39789
+.. date: 2020-02-28-22-46-09
+.. nonce: 67XRoP
+.. section: Windows
+
+Update Windows release build machines to Visual Studio 2019 (MSVC 14.2).
+
+..
+
+.. bpo: 34803
+.. date: 2020-02-25-18-43-34
+.. nonce: S3VcS0
+.. section: Windows
+
+Package for nuget.org now includes repository reference and bundled icon
+image.
+
+..
+
+.. bpo: 38380
+.. date: 2020-02-28-23-51-47
+.. nonce: u-ySyA
+.. section: macOS
+
+Update macOS builds to use SQLite 3.31.1
+
+..
+
+.. bpo: 27115
+.. date: 2020-03-09-02-45-12
+.. nonce: 8hSHMo
+.. section: IDLE
+
+For 'Go to Line', use a Query box subclass with IDLE standard behavior and
+improved error checking.
+
+..
+
+.. bpo: 39885
+.. date: 2020-03-08-14-27-36
+.. nonce: 29ERiR
+.. section: IDLE
+
+Since clicking to get an IDLE context menu moves the cursor, any text
+selection should be and now is cleared.
+
+..
+
+.. bpo: 39852
+.. date: 2020-03-06-01-55-14
+.. nonce: QjA1qF
+.. section: IDLE
+
+Edit "Go to line" now clears any selection, preventing accidental deletion.
+It also updates Ln and Col on the status bar.
+
+..
+
+.. bpo: 39781
+.. date: 2020-02-27-22-17-09
+.. nonce: bbYBeL
+.. section: IDLE
+
+Selecting code context lines no longer causes a jump.
+
+..
+
+.. bpo: 36184
+.. date: 2020-03-09-13-28-13
+.. nonce: BMPJ0D
+.. section: Tools/Demos
+
+Port python-gdb.py to FreeBSD. python-gdb.py now checks for "take_gil"
+function name to check if a frame tries to acquire the GIL, instead of
+checking for "pthread_cond_timedwait" which is specific to Linux and can be
+a different condition than the GIL.
+
+..
+
+.. bpo: 38080
+.. date: 2019-09-18-13-49-56
+.. nonce: Nbl7lF
+.. section: Tools/Demos
+
+Added support to fix ``getproxies`` in the :mod:`lib2to3.fixes.fix_urllib`
+module. Patch by José Roberto Meza Cabrera.
+
+..
+
+.. bpo: 40024
+.. date: 2020-03-20-18-41-33
+.. nonce: 9zHpve
+.. section: C API
+
+Add :c:func:`PyModule_AddType` helper function: add a type to a module.
+Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39946
+.. date: 2020-03-20-17-05-52
+.. nonce: 3NS-Ls
+.. section: C API
+
+Remove ``_PyRuntime.getframe`` hook and remove ``_PyThreadState_GetFrame``
+macro which was an alias to ``_PyRuntime.getframe``. They were only exposed
+by the internal C API. Remove also ``PyThreadFrameGetter`` type.
+
+..
+
+.. bpo: 39947
+.. date: 2020-03-20-14-55-09
+.. nonce: W7uCJ3
+.. section: C API
+
+Add :c:func:`PyThreadState_GetFrame` function: get the current frame of a
+Python thread state.
+
+..
+
+.. bpo: 37207
+.. date: 2020-03-14-01-56-03
+.. nonce: R3jaTy
+.. section: C API
+
+Add _PyArg_NoKwnames helper function. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39947
+.. date: 2020-03-13-18-10-58
+.. nonce: gmEAaU
+.. section: C API
+
+Add :c:func:`PyThreadState_GetInterpreter`: get the interpreter of a Python
+thread state.
+
+..
+
+.. bpo: 39947
+.. date: 2020-03-13-17-43-00
+.. nonce: 1Cu_d2
+.. section: C API
+
+Add :c:func:`PyInterpreterState_Get` function to the limited C API.
+
+..
+
+.. bpo: 35370
+.. date: 2020-03-13-16-44-23
+.. nonce: sXRA-r
+.. section: C API
+
+If :c:func:`PySys_Audit` fails in :c:func:`PyEval_SetProfile` or
+:c:func:`PyEval_SetTrace`, log the error as an unraisable exception.
+
+..
+
+.. bpo: 39947
+.. date: 2020-03-13-00-15-19
+.. nonce: w3dIru
+.. section: C API
+
+Move the static inline function flavor of Py_EnterRecursiveCall() and
+Py_LeaveRecursiveCall() to the internal C API: they access PyThreadState
+attributes. The limited C API provides regular functions which hide
+implementation details.
+
+..
+
+.. bpo: 39947
+.. date: 2020-03-12-23-47-57
+.. nonce: -nCdFV
+.. section: C API
+
+Py_TRASHCAN_BEGIN_CONDITION and Py_TRASHCAN_END macro no longer access
+PyThreadState attributes, but call new private _PyTrash_begin() and
+_PyTrash_end() functions which hide implementation details.
+
+..
+
+.. bpo: 39884
+.. date: 2020-03-12-00-27-26
+.. nonce: CGOJBO
+.. section: C API
+
+:c:func:`PyDescr_NewMethod` and :c:func:`PyCFunction_NewEx` now include the
+method name in the SystemError "bad call flags" error message to ease debug.
+
+..
+
+.. bpo: 39877
+.. date: 2020-03-10-00-18-16
+.. nonce: GOYtIm
+.. section: C API
+
+Deprecated :c:func:`PyEval_InitThreads` and
+:c:func:`PyEval_ThreadsInitialized`. Calling :c:func:`PyEval_InitThreads`
+now does nothing.
+
+..
+
+.. bpo: 38249
+.. date: 2020-03-09-20-27-19
+.. nonce: IxYbQy
+.. section: C API
+
+:c:macro:`Py_UNREACHABLE` is now implemented with
+``__builtin_unreachable()`` and analogs in release mode.
+
+..
+
+.. bpo: 38643
+.. date: 2020-03-08-22-56-22
+.. nonce: k2ixx6
+.. section: C API
+
+:c:func:`PyNumber_ToBase` now raises a :exc:`SystemError` instead of
+crashing when called with invalid base.
+
+..
+
+.. bpo: 39882
+.. date: 2020-03-06-23-56-04
+.. nonce: Iqhcqm
+.. section: C API
+
+The :c:func:`Py_FatalError` function is replaced with a macro which logs
+automatically the name of the current function, unless the
+``Py_LIMITED_API`` macro is defined.
+
+..
+
+.. bpo: 39824
+.. date: 2020-03-02-11-29-45
+.. nonce: 71_ZMn
+.. section: C API
+
+Extension modules: :c:member:`~PyModuleDef.m_traverse`,
+:c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free`
+functions of :c:type:`PyModuleDef` are no longer called if the module state
+was requested but is not allocated yet. This is the case immediately after
+the module is created and before the module is executed
+(:c:data:`Py_mod_exec` function). More precisely, these functions are not
+called if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module
+state (as returned by :c:func:`PyModule_GetState`) is ``NULL``.
+
+Extension modules without module state (``m_size <= 0``) are not affected.
+
+..
+
+.. bpo: 38913
+.. date: 2020-02-25-20-10-34
+.. nonce: siF1lS
+.. section: C API
+
+Fixed segfault in ``Py_BuildValue()`` called with a format containing "#"
+and undefined PY_SSIZE_T_CLEAN whwn an exception is set.
+
+..
+
+.. bpo: 38500
+.. date: 2019-11-22-14-06-28
+.. nonce: nPEdjH
+.. section: C API
+
+Add a private API to get and set the frame evaluation function: add
+:c:func:`_PyInterpreterState_GetEvalFrameFunc` and
+:c:func:`_PyInterpreterState_SetEvalFrameFunc` C functions. The
+:c:type:`_PyFrameEvalFunction` function type now takes a *tstate* parameter.
diff --git a/Misc/NEWS.d/3.9.0a6.rst b/Misc/NEWS.d/3.9.0a6.rst
new file mode 100644
index 0000000..af2cc7c
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a6.rst
@@ -0,0 +1,1211 @@
+.. bpo: 40121
+.. date: 2020-03-30-23-16-25
+.. nonce: p2LIio
+.. release date: 2020-04-27
+.. section: Security
+
+Fixes audit events raised on creating a new socket.
+
+..
+
+.. bpo: 39073
+.. date: 2020-03-15-01-28-36
+.. nonce: 6Szd3i
+.. section: Security
+
+Disallow CR or LF in email.headerregistry.Address arguments to guard against
+header injection attacks.
+
+..
+
+.. bpo: 39503
+.. date: 2020-01-30-16-15-29
+.. nonce: B299Yq
+.. section: Security
+
+CVE-2020-8492: The :class:`~urllib.request.AbstractBasicAuthHandler` class
+of the :mod:`urllib.request` module uses an inefficient regular expression
+which can be exploited by an attacker to cause a denial of service. Fix the
+regex to prevent the catastrophic backtracking. Vulnerability reported by
+Ben Caller and Matt Schwager.
+
+..
+
+.. bpo: 40313
+.. date: 2020-04-20-23-58-35
+.. nonce: USVRW8
+.. section: Core and Builtins
+
+Improve the performance of bytes.hex().
+
+..
+
+.. bpo: 40334
+.. date: 2020-04-20-14-06-19
+.. nonce: CTLGEp
+.. section: Core and Builtins
+
+Switch to a new parser, based on PEG.  For more details see PEP 617. To
+temporarily switch back to the old parser, use ``-X oldparser`` or
+``PYTHONOLDPARSER=1``.  In Python 3.10 we will remove the old parser
+completely, including the ``parser`` module (already deprecated) and
+anything that depends on it.
+
+..
+
+.. bpo: 40267
+.. date: 2020-04-14-18-54-50
+.. nonce: Q2N6Bw
+.. section: Core and Builtins
+
+Fix the tokenizer to display the correct error message, when there is a
+SyntaxError on the last input character and no newline follows. It used to
+be `unexpected EOF while parsing`, while it should be `invalid syntax`.
+
+..
+
+.. bpo: 39522
+.. date: 2020-04-14-18-47-00
+.. nonce: uVeIV_
+.. section: Core and Builtins
+
+Correctly unparse explicit ``u`` prefix for strings when postponed
+evaluation for annotations activated. Patch by Batuhan Taskaya.
+
+..
+
+.. bpo: 40246
+.. date: 2020-04-11-17-52-03
+.. nonce: vXPze5
+.. section: Core and Builtins
+
+Report a specialized error message, `invalid string prefix`, when the
+tokenizer encounters a string with an invalid prefix.
+
+..
+
+.. bpo: 40082
+.. date: 2020-04-08-22-33-24
+.. nonce: WI3-lu
+.. section: Core and Builtins
+
+Fix the signal handler: it now always uses the main interpreter, rather than
+trying to get the current Python thread state.
+
+..
+
+.. bpo: 37388
+.. date: 2020-04-07-15-44-29
+.. nonce: stlxBq
+.. section: Core and Builtins
+
+str.encode() and str.decode() no longer check the encoding and errors in
+development mode or in debug mode during Python finalization. The codecs
+machinery can no longer work on very late calls to str.encode() and
+str.decode().
+
+..
+
+.. bpo: 40077
+.. date: 2020-04-04-12-43-19
+.. nonce: m15TTX
+.. section: Core and Builtins
+
+Fix possible refleaks in :mod:`_json`, memo of PyScannerObject should be
+traversed.
+
+..
+
+.. bpo: 37207
+.. date: 2020-04-02-00-25-19
+.. nonce: ZTPmKJ
+.. section: Core and Builtins
+
+Speed up calls to ``dict()`` by using the :pep:`590` ``vectorcall`` calling
+convention.
+
+..
+
+.. bpo: 40141
+.. date: 2020-04-01-21-50-37
+.. nonce: 8fCRVj
+.. section: Core and Builtins
+
+Add column and line information to ``ast.keyword`` nodes. Patch by Pablo
+Galindo.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-04-01-00-08-18
+.. nonce: bhGWam
+.. section: Core and Builtins
+
+Port :mod:`resource` to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-31-22-15-04
+.. nonce: 8Ir1a0
+.. section: Core and Builtins
+
+Port :mod:`math` to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-31-21-12-27
+.. nonce: S2nkF3
+.. section: Core and Builtins
+
+Port _uuid module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 40077
+.. date: 2020-03-27-01-11-08
+.. nonce: wT002V
+.. section: Core and Builtins
+
+Convert json module to use :c:func:`PyType_FromSpec`.
+
+..
+
+.. bpo: 40067
+.. date: 2020-03-25-20-34-01
+.. nonce: 0bFda2
+.. section: Core and Builtins
+
+Improve the error message for multiple star expressions in an assignment.
+Patch by Furkan Onder
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-24-22-26-26
+.. nonce: AB38ot
+.. section: Core and Builtins
+
+Port _functools module to multiphase initialization (PEP 489). Patch by
+Paulo Henrique Silva.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-24-22-17-12
+.. nonce: jWaMRV
+.. section: Core and Builtins
+
+Port operator module to multiphase initialization (PEP 489). Patch by Paulo
+Henrique Silva.
+
+..
+
+.. bpo: 20526
+.. date: 2020-03-23-18-08-34
+.. nonce: NHNZIv
+.. section: Core and Builtins
+
+Fix :c:func:`PyThreadState_Clear()`. ``PyThreadState.frame`` is a borrowed
+reference, not a strong reference: ``PyThreadState_Clear()`` must not call
+``Py_CLEAR(tstate->frame)``.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-22-01-01-41
+.. nonce: gR7Igp
+.. section: Core and Builtins
+
+Port time module to multiphase initialization (:pep:`489`). Patch by Paulo
+Henrique Silva.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-03-20-13-42-35
+.. nonce: bhIu5M
+.. section: Core and Builtins
+
+Port _weakref extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 40020
+.. date: 2020-03-19-21-53-41
+.. nonce: n-26G7
+.. section: Core and Builtins
+
+Fix a leak and subsequent crash in parsetok.c caused by realloc misuse on a
+rare codepath.
+
+..
+
+.. bpo: 39939
+.. date: 2020-03-11-19-17-36
+.. nonce: NwCnAM
+.. section: Core and Builtins
+
+Added str.removeprefix and str.removesuffix methods and corresponding bytes,
+bytearray, and collections.UserString methods to remove affixes from a
+string if present. See :pep:`616` for a full description. Patch by Dennis
+Sweeney.
+
+..
+
+.. bpo: 39481
+.. date: 2020-01-28-17-19-18
+.. nonce: rqSeGl
+.. section: Core and Builtins
+
+Implement PEP 585. This supports list[int], tuple[str, ...] etc.
+
+..
+
+.. bpo: 32894
+.. date: 2019-12-01-21-36-49
+.. nonce: 5g_UQr
+.. section: Core and Builtins
+
+Support unparsing of infinity numbers in postponed annotations. Patch by
+Batuhan Taşkaya.
+
+..
+
+.. bpo: 37207
+.. date: 2019-06-09-10-54-31
+.. nonce: bLjgLS
+.. section: Core and Builtins
+
+Speed up calls to ``list()`` by using the :pep:`590` ``vectorcall`` calling
+convention. Patch by Mark Shannon.
+
+..
+
+.. bpo: 40398
+.. date: 2020-04-26-22-25-36
+.. nonce: OdXnR3
+.. section: Library
+
+:func:`typing.get_args` now always returns an empty tuple for special
+generic aliases.
+
+..
+
+.. bpo: 40396
+.. date: 2020-04-26-19-07-40
+.. nonce: Fn-is1
+.. section: Library
+
+Functions :func:`typing.get_origin`, :func:`typing.get_args` and
+:func:`typing.get_type_hints` support now generic aliases like
+``list[int]``.
+
+..
+
+.. bpo: 38061
+.. date: 2020-04-24-01-55-00
+.. nonce: XmULB3
+.. section: Library
+
+Optimize the :mod:`subprocess` module on FreeBSD using ``closefrom()``. A
+single ``close(fd)`` syscall is cheap, but when ``sysconf(_SC_OPEN_MAX)`` is
+high, the loop calling ``close(fd)`` on each file descriptor can take
+several milliseconds.
+
+The workaround on FreeBSD to improve performance was to load and mount the
+fdescfs kernel module, but this is not enabled by default.
+
+Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans (kevans)
+and Kubilay Kocak (koobs):
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
+
+..
+
+.. bpo: 38061
+.. date: 2020-04-24-01-27-08
+.. nonce: cdlkMz
+.. section: Library
+
+On FreeBSD, ``os.closerange(fd_low, fd_high)`` now calls
+``closefrom(fd_low)`` if *fd_high* is greater than or equal to
+``sysconf(_SC_OPEN_MAX)``.
+
+Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans (kevans)
+and Kubilay Kocak (koobs):
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
+
+..
+
+.. bpo: 40360
+.. date: 2020-04-22-20-55-17
+.. nonce: Er8sv-
+.. section: Library
+
+The :mod:`lib2to3` module is pending deprecation due to :pep:`617`.
+
+..
+
+.. bpo: 40138
+.. date: 2020-04-22-00-05-10
+.. nonce: i_oGqa
+.. section: Library
+
+Fix the Windows implementation of :func:`os.waitpid` for exit code larger
+than ``INT_MAX >> 8``. The exit status is now interpreted as an unsigned
+number.
+
+..
+
+.. bpo: 39942
+.. date: 2020-04-20-20-16-02
+.. nonce: NvGnTc
+.. section: Library
+
+Set "__main__" as the default module name when "__name__" is missing in
+:class:`typing.TypeVar`. Patch by Weipeng Hong.
+
+..
+
+.. bpo: 40275
+.. date: 2020-04-20-19-06-55
+.. nonce: 9UcN2g
+.. section: Library
+
+The :mod:`logging` package is now imported lazily in :mod:`unittest` only
+when the :meth:`~unittest.TestCase.assertLogs` assertion is used.
+
+..
+
+.. bpo: 40275
+.. date: 2020-04-20-18-50-25
+.. nonce: Ofk6J8
+.. section: Library
+
+The :mod:`asyncio` package is now imported lazily in :mod:`unittest` only
+when the :class:`~unittest.IsolatedAsyncioTestCase` class is used.
+
+..
+
+.. bpo: 40330
+.. date: 2020-04-19-17-31-29
+.. nonce: DGjoIS
+.. section: Library
+
+In :meth:`ShareableList.__setitem__`, check the size of a new string item
+after encoding it to utf-8, not before.
+
+..
+
+.. bpo: 40148
+.. date: 2020-04-19-14-16-43
+.. nonce: pDZR6V
+.. section: Library
+
+Added :meth:`pathlib.Path.with_stem()` to create a new Path with the stem
+replaced.
+
+..
+
+.. bpo: 40325
+.. date: 2020-04-18-19-40-00
+.. nonce: KWSvix
+.. section: Library
+
+Deprecated support for set objects in random.sample().
+
+..
+
+.. bpo: 40257
+.. date: 2020-04-18-10-52-15
+.. nonce: lv4WTq
+.. section: Library
+
+Improved help for the :mod:`typing` module. Docstrings are now shown for all
+special forms and special generic aliases (like ``Union`` and ``List``).
+Using ``help()`` with generic alias like ``List[int]`` will show the help
+for the correspondent concrete type (``list`` in this case).
+
+..
+
+.. bpo: 40257
+.. date: 2020-04-15-19-34-11
+.. nonce: ux8FUr
+.. section: Library
+
+func:`inspect.getdoc` no longer returns docstring inherited from the type of
+the object or from parent class if it is a class if it is not defined in the
+object itself. In :mod:`pydoc` the documentation string is now shown not
+only for class, function, method etc, but for any object that has its own
+``__doc__`` attribute.
+
+..
+
+.. bpo: 40287
+.. date: 2020-04-15-17-21-48
+.. nonce: -mkEJH
+.. section: Library
+
+Fixed ``SpooledTemporaryFile.seek()`` to return the position.
+
+..
+
+.. bpo: 40290
+.. date: 2020-04-15-16-43-48
+.. nonce: eqCMGJ
+.. section: Library
+
+Added zscore() to statistics.NormalDist().
+
+..
+
+.. bpo: 40282
+.. date: 2020-04-15-10-23-52
+.. nonce: rIYJmu
+.. section: Library
+
+Allow ``random.getrandbits(0)`` to succeed and to return 0.
+
+..
+
+.. bpo: 40286
+.. date: 2020-04-15-00-39-25
+.. nonce: ai80FA
+.. section: Library
+
+Add :func:`random.randbytes` function and :meth:`random.Random.randbytes`
+method to generate random bytes.
+
+..
+
+.. bpo: 40277
+.. date: 2020-04-14-21-53-18
+.. nonce: NknSaf
+.. section: Library
+
+:func:`collections.namedtuple` now provides a human-readable repr for its
+field accessors.
+
+..
+
+.. bpo: 40270
+.. date: 2020-04-14-16-18-49
+.. nonce: XVJzeG
+.. section: Library
+
+The included copy of sqlite3 on Windows is now compiled with the json
+extension. This allows the use of functions such as ``json_object``.
+
+..
+
+.. bpo: 29255
+.. date: 2020-04-14-11-31-07
+.. nonce: 4EcyIN
+.. section: Library
+
+Wait in `KqueueSelector.select` when no fds are registered
+
+..
+
+.. bpo: 40260
+.. date: 2020-04-12-21-18-56
+.. nonce: F6VWaE
+.. section: Library
+
+Ensure :mod:`modulefinder` uses :func:`io.open_code` and respects coding
+comments.
+
+..
+
+.. bpo: 40234
+.. date: 2020-04-10-16-13-47
+.. nonce: tar4d_
+.. section: Library
+
+Allow again to spawn daemon threads in subinterpreters (revert change which
+denied them).
+
+..
+
+.. bpo: 39207
+.. date: 2020-04-10-01-24-58
+.. nonce: 2dE5Ox
+.. section: Library
+
+Workers in :class:`~concurrent.futures.ProcessPoolExecutor` are now spawned
+on demand, only when there are no available idle workers to reuse. This
+optimizes startup overhead and reduces the amount of lost CPU time to idle
+workers. Patch by Kyle Stanley.
+
+..
+
+.. bpo: 40091
+.. date: 2020-04-07-23-26-25
+.. nonce: 5M9AW5
+.. section: Library
+
+Fix a hang at fork in the logging module: the new private _at_fork_reinit()
+method is now used to reinitialize locks at fork in the child process.
+
+..
+
+.. bpo: 40149
+.. date: 2020-04-07-18-06-38
+.. nonce: mMU2iu
+.. section: Library
+
+Implement traverse and clear slots in _abc._abc_data type.
+
+..
+
+.. bpo: 40208
+.. date: 2020-04-06-20-09-33
+.. nonce: 3rO_q7
+.. section: Library
+
+Remove deprecated :meth:`symtable.SymbolTable.has_exec`.
+
+..
+
+.. bpo: 40196
+.. date: 2020-04-06-11-05-13
+.. nonce: Jqowse
+.. section: Library
+
+Fix a bug in the :mod:`symtable` module that was causing incorrectly report
+global variables as local. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 40190
+.. date: 2020-04-05-02-58-17
+.. nonce: HF3OWo
+.. section: Library
+
+Add support for ``_SC_AIX_REALMEM`` to :func:`posix.sysconf`.
+
+..
+
+.. bpo: 40182
+.. date: 2020-04-04-23-44-09
+.. nonce: Bf_kFN
+.. section: Library
+
+Removed the ``_field_types`` attribute of the :class:`typing.NamedTuple`
+class.
+
+..
+
+.. bpo: 36517
+.. date: 2020-04-04-17-49-39
+.. nonce: Ilj1IJ
+.. section: Library
+
+Multiple inheritance with :class:`typing.NamedTuple` now raises an error
+instead of silently ignoring other types.
+
+..
+
+.. bpo: 40126
+.. date: 2020-04-04-00-47-40
+.. nonce: Y-bTNP
+.. section: Library
+
+Fixed reverting multiple patches in unittest.mock. Patcher's ``__exit__()``
+is now never called if its ``__enter__()`` is failed. Returning true from
+``__exit__()`` silences now the exception.
+
+..
+
+.. bpo: 40094
+.. date: 2020-04-02-01-13-28
+.. nonce: AeZ34K
+.. section: Library
+
+CGIHTTPRequestHandler of http.server now logs the CGI script exit code,
+rather than the CGI script exit status of os.waitpid(). For example, if the
+script is killed by signal 11, it now logs: "CGI script exit code -11."
+
+..
+
+.. bpo: 40108
+.. date: 2020-03-31-01-11-20
+.. nonce: EGDVQ_
+.. section: Library
+
+Improve the error message when triying to import a module using :mod:`runpy`
+and incorrently use the ".py" extension at the end of the module name. Patch
+by Pablo Galindo.
+
+..
+
+.. bpo: 40094
+.. date: 2020-03-28-18-25-49
+.. nonce: v-wQIU
+.. section: Library
+
+Add :func:`os.waitstatus_to_exitcode` function: convert a wait status to an
+exit code.
+
+..
+
+.. bpo: 40089
+.. date: 2020-03-27-17-22-34
+.. nonce: -lFsD0
+.. section: Library
+
+Fix threading._after_fork(): if fork was not called by a thread spawned by
+threading.Thread, threading._after_fork() now creates a _MainThread instance
+for _main_thread, instead of a _DummyThread instance.
+
+..
+
+.. bpo: 40089
+.. date: 2020-03-27-16-54-29
+.. nonce: VTq_8s
+.. section: Library
+
+Add a private ``_at_fork_reinit()`` method to :class:`_thread.Lock`,
+:class:`_thread.RLock`, :class:`threading.RLock` and
+:class:`threading.Condition` classes: reinitialize the lock at fork in the
+child process, reset the lock to the unlocked state. Rename also the private
+``_reset_internal_locks()`` method of :class:`threading.Event` to
+``_at_fork_reinit()``.
+
+..
+
+.. bpo: 25780
+.. date: 2020-03-27-08-57-46
+.. nonce: kIjVge
+.. section: Library
+
+Expose :data:`~socket.CAN_RAW_JOIN_FILTERS` in the :mod:`socket` module.
+
+..
+
+.. bpo: 39503
+.. date: 2020-03-25-16-02-16
+.. nonce: YmMbYn
+.. section: Library
+
+:class:`~urllib.request.AbstractBasicAuthHandler` of :mod:`urllib.request`
+now parses all WWW-Authenticate HTTP headers and accepts multiple challenges
+per header: use the realm of the first Basic challenge.
+
+..
+
+.. bpo: 39812
+.. date: 2020-03-25-00-35-48
+.. nonce: rIKnms
+.. section: Library
+
+Removed daemon threads from :mod:`concurrent.futures` by adding an internal
+`threading._register_atexit()`, which calls registered functions prior to
+joining all non-daemon threads. This allows for compatibility with
+subinterpreters, which don't support daemon threads.
+
+..
+
+.. bpo: 40050
+.. date: 2020-03-24-16-17-20
+.. nonce: 6GrOlz
+.. section: Library
+
+Fix ``importlib._bootstrap_external``: avoid creating a new ``winreg``
+builtin module if it's already available in :data:`sys.modules`, and remove
+redundant imports.
+
+..
+
+.. bpo: 40014
+.. date: 2020-03-23-17-52-00
+.. nonce: Ya70VG
+.. section: Library
+
+Fix ``os.getgrouplist()``: if ``getgrouplist()`` function fails because the
+group list is too small, retry with a larger group list. On failure, the
+glibc implementation of ``getgrouplist()`` sets ``ngroups`` to the total
+number of groups. For other implementations, double the group list size.
+
+..
+
+.. bpo: 40017
+.. date: 2020-03-21-00-46-18
+.. nonce: HFpHZS
+.. section: Library
+
+Add :data:`time.CLOCK_TAI` constant if the operating system support it.
+
+..
+
+.. bpo: 40016
+.. date: 2020-03-19-19-40-27
+.. nonce: JWtxqJ
+.. section: Library
+
+In re docstring, clarify the relationship between inline and argument
+compile flags.
+
+..
+
+.. bpo: 39953
+.. date: 2020-03-19-16-33-03
+.. nonce: yy5lC_
+.. section: Library
+
+Update internal table of OpenSSL error codes in the ``ssl`` module.
+
+..
+
+.. bpo: 36144
+.. date: 2020-03-18-14-51-41
+.. nonce: lQm_RK
+.. section: Library
+
+Added :pep:`584` operators to :class:`weakref.WeakValueDictionary`.
+
+..
+
+.. bpo: 36144
+.. date: 2020-03-18-14-02-58
+.. nonce: ooyn6Z
+.. section: Library
+
+Added :pep:`584` operators to :class:`weakref.WeakKeyDictionary`.
+
+..
+
+.. bpo: 38891
+.. date: 2020-03-15-08-06-05
+.. nonce: 56Yokh
+.. section: Library
+
+Fix linear runtime behaviour of the `__getitem__` and `__setitem__` methods
+in :class:`multiprocessing.shared_memory.ShareableList`. This avoids
+quadratic performance when iterating a `ShareableList`. Patch by Thomas
+Krennwallner.
+
+..
+
+.. bpo: 39682
+.. date: 2020-03-08-11-00-01
+.. nonce: AxXZNz
+.. section: Library
+
+Remove undocumented support for *closing* a `pathlib.Path` object via its
+context manager. The context manager magic methods remain, but they are now
+a no-op, making `Path` objects immutable.
+
+..
+
+.. bpo: 36144
+.. date: 2020-03-07-11-26-08
+.. nonce: FG9jqy
+.. section: Library
+
+Added :pep:`584` operators (``|`` and ``|=``) to
+:class:`collections.ChainMap`.
+
+..
+
+.. bpo: 39011
+.. date: 2020-02-12-01-48-51
+.. nonce: hGve_t
+.. section: Library
+
+Normalization of line endings in ElementTree attributes was removed, as line
+endings which were replaced by entity numbers should be preserved in
+original form.
+
+..
+
+.. bpo: 38410
+.. date: 2019-10-09-08-14-25
+.. nonce: _YyoMV
+.. section: Library
+
+Properly handle :func:`sys.audit` failures in
+:func:`sys.set_asyncgen_hooks`.
+
+..
+
+.. bpo: 36541
+.. date: 2019-06-18-19-38-27
+.. nonce: XI8mi1
+.. section: Library
+
+lib2to3 now recognizes named assignment expressions (the walrus operator,
+``:=``)
+
+..
+
+.. bpo: 35967
+.. date: 2019-04-14-14-11-07
+.. nonce: KUMT9E
+.. section: Library
+
+In platform, delay the invocation of 'uname -p' until the processor
+attribute is requested.
+
+..
+
+.. bpo: 35113
+.. date: 2018-11-03-16-18-20
+.. nonce: vwvWKG
+.. section: Library
+
+:meth:`inspect.getsource` now returns correct source code for inner class
+with same name as module level class. Decorators are also returned as part
+of source of the class. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 33262
+.. date: 2018-04-17-13-23-29
+.. nonce: vHC7YQ
+.. section: Library
+
+Deprecate passing None as an argument for :func:`shlex.split()`'s ``s``
+parameter.  Patch by Zackery Spytz.
+
+..
+
+.. bpo: 31758
+.. date: 2017-10-14-21-02-40
+.. nonce: 563ZZb
+.. section: Library
+
+Prevent crashes when using an uninitialized ``_elementtree.XMLParser``
+object. Patch by Oren Milman.
+
+..
+
+.. bpo: 27635
+.. date: 2020-04-01-00-27-03
+.. nonce: VwxUty
+.. section: Documentation
+
+The pickle documentation incorrectly claimed that ``__new__`` isn't called
+by default when unpickling.
+
+..
+
+.. bpo: 39879
+.. date: 2020-03-16-18-12-02
+.. nonce: CnQ7Cv
+.. section: Documentation
+
+Updated :ref:`datamodel` docs to include :func:`dict` insertion order
+preservation. Patch by Furkan Onder and Samy Lahfa.
+
+..
+
+.. bpo: 38387
+.. date: 2019-10-06-23-44-15
+.. nonce: fZoq0S
+.. section: Documentation
+
+Document :c:macro:`PyDoc_STRVAR` macro in the C-API reference.
+
+..
+
+.. bpo: 13743
+.. date: 2019-09-25-23-20-55
+.. nonce: 5ToLDy
+.. section: Documentation
+
+Some methods within xml.dom.minidom.Element class are now better documented.
+
+..
+
+.. bpo: 31904
+.. date: 2020-04-09-16-29-18
+.. nonce: ej348T
+.. section: Tests
+
+Set expected default encoding in test_c_locale_coercion.py for VxWorks RTOS.
+
+..
+
+.. bpo: 40162
+.. date: 2020-04-03-02-40-16
+.. nonce: v3pQW_
+.. section: Tests
+
+Update Travis CI configuration to OpenSSL 1.1.1f.
+
+..
+
+.. bpo: 40146
+.. date: 2020-04-02-02-14-37
+.. nonce: J-Yo9G
+.. section: Tests
+
+Update OpenSSL to 1.1.1f in Azure Pipelines.
+
+..
+
+.. bpo: 40094
+.. date: 2020-03-31-18-57-52
+.. nonce: m3fTJe
+.. section: Tests
+
+Add :func:`test.support.wait_process` function.
+
+..
+
+.. bpo: 40003
+.. date: 2020-03-31-16-07-15
+.. nonce: SOruLY
+.. section: Tests
+
+``test.bisect_cmd`` now copies Python command line options like ``-O`` or
+``-W``. Moreover, emit a warning if ``test.bisect_cmd`` is used with
+``-w``/``--verbose2`` option.
+
+..
+
+.. bpo: 39380
+.. date: 2020-03-22-20-00-04
+.. nonce: ZXlRQU
+.. section: Tests
+
+Add the encoding in :class:`ftplib.FTP` and :class:`ftplib.FTP_TLS` to the
+constructor as keyword-only and change the default from ``latin-1`` to
+``utf-8`` to follow :rfc:`2640`.
+
+..
+
+.. bpo: 39793
+.. date: 2020-02-29-12-58-17
+.. nonce: Og2SUN
+.. section: Tests
+
+Use the same domain when testing ``make_msgid``. Patch by Batuhan Taskaya.
+
+..
+
+.. bpo: 1812
+.. date: 2019-11-25-21-46-47
+.. nonce: sAbTbY
+.. section: Tests
+
+Fix newline handling in doctest.testfile when loading from a package whose
+loader has a get_data method. Patch by Peter Donis.
+
+..
+
+.. bpo: 38360
+.. date: 2020-04-22-02-33-54
+.. nonce: 74C68u
+.. section: Build
+
+Support single-argument form of macOS -isysroot flag.
+
+..
+
+.. bpo: 40158
+.. date: 2020-04-03-17-54-33
+.. nonce: MWUTs4
+.. section: Build
+
+Fix CPython MSBuild Properties in NuGet Package (build/native/python.props)
+
+..
+
+.. bpo: 38527
+.. date: 2020-03-28-10-43-09
+.. nonce: fqCRgD
+.. section: Build
+
+Fix configure check on Solaris for "float word ordering": sometimes, the
+correct "grep" command was not being used. Patch by Arnon Yaari.
+
+..
+
+.. bpo: 40164
+.. date: 2020-04-04-13-13-44
+.. nonce: SPrSn5
+.. section: Windows
+
+Updates Windows to OpenSSL 1.1.1f
+
+..
+
+.. bpo: 8901
+.. date: 2020-01-24-09-15-41
+.. nonce: hVnhGO
+.. section: Windows
+
+Ignore the Windows registry when the ``-E`` option is used.
+
+..
+
+.. bpo: 38329
+.. date: 2020-04-22-03-39-22
+.. nonce: H0a8JV
+.. section: macOS
+
+python.org macOS installers now update the Current version symlink of
+/Library/Frameworks/Python.framework/Versions for 3.9 installs. Previously,
+Current was only updated for Python 2.x installs. This should make it easier
+to embed Python 3 into other macOS applications.
+
+..
+
+.. bpo: 40164
+.. date: 2020-04-21-19-46-35
+.. nonce: 6HA6IC
+.. section: macOS
+
+Update macOS installer builds to use OpenSSL 1.1.1g.
+
+..
+
+.. bpo: 38439
+.. date: 2019-12-05-14-20-53
+.. nonce: j_L2PI
+.. section: IDLE
+
+Add a 256×256 pixel IDLE icon to support more modern environments. Created
+by Andrew Clover. Delete the unused macOS idle.icns icon file.
+
+..
+
+.. bpo: 38689
+.. date: 2019-11-14-12-59-19
+.. nonce: Lgfxva
+.. section: IDLE
+
+IDLE will no longer freeze when inspect.signature fails when fetching a
+calltip.
+
+..
+
+.. bpo: 40385
+.. date: 2020-04-24-21-08-19
+.. nonce: nWIQdq
+.. section: Tools/Demos
+
+Removed the checkpyc.py tool. Please see compileall without force mode as a
+potential alternative.
+
+..
+
+.. bpo: 40179
+.. date: 2020-04-04-19-35-22
+.. nonce: u9FH10
+.. section: Tools/Demos
+
+Fixed translation of ``#elif`` in Argument Clinic.
+
+..
+
+.. bpo: 40094
+.. date: 2020-04-02-01-22-21
+.. nonce: 1XQQF6
+.. section: Tools/Demos
+
+Fix ``which.py`` script exit code: it now uses
+:func:`os.waitstatus_to_exitcode` to convert :func:`os.system` exit status
+into an exit code.
+
+..
+
+.. bpo: 40241
+.. date: 2020-04-13-02-56-24
+.. nonce: _FOf7E
+.. section: C API
+
+Move the :c:type:`PyGC_Head` structure to the internal C API.
+
+..
+
+.. bpo: 40170
+.. date: 2020-04-11-06-12-44
+.. nonce: cmM9oK
+.. section: C API
+
+Convert :c:func:`PyObject_IS_GC` macro to a function to hide implementation
+details.
+
+..
+
+.. bpo: 40241
+.. date: 2020-04-10-19-43-04
+.. nonce: Xm3w-1
+.. section: C API
+
+Add the functions :c:func:`PyObject_GC_IsTracked` and
+:c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if
+Python objects are being currently tracked or have been already finalized by
+the garbage collector respectively. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 40170
+.. date: 2020-04-05-00-37-34
+.. nonce: Seuh3D
+.. section: C API
+
+The :c:func:`PyObject_NEW` macro becomes an alias to the
+:c:func:`PyObject_New` macro, and the :c:func:`PyObject_NEW_VAR` macro
+becomes an alias to the :c:func:`PyObject_NewVar` macro, to hide
+implementation details. They no longer access directly the
+:c:member:`PyTypeObject.tp_basicsize` member.
+
+..
+
+.. bpo: 40170
+.. date: 2020-04-05-00-21-38
+.. nonce: Tx0vy6
+.. section: C API
+
+:c:func:`PyType_HasFeature` now always calls :c:func:`PyType_GetFlags` to
+hide implementation details. Previously, it accessed directly the
+:c:member:`PyTypeObject.tp_flags` member when the limited C API was not
+used.
+
+..
+
+.. bpo: 40170
+.. date: 2020-04-05-00-10-45
+.. nonce: 6nFYbY
+.. section: C API
+
+Convert the :c:func:`PyObject_GET_WEAKREFS_LISTPTR` macro to a function to
+hide implementation details: the macro accessed directly to the
+:c:member:`PyTypeObject.tp_weaklistoffset` member.
+
+..
+
+.. bpo: 40170
+.. date: 2020-04-05-00-02-13
+.. nonce: IFsGZ-
+.. section: C API
+
+Convert :c:func:`PyObject_CheckBuffer` macro to a function to hide
+implementation details: the macro accessed directly the
+:c:member:`PyTypeObject.tp_as_buffer` member.
+
+..
+
+.. bpo: 40170
+.. date: 2020-04-04-23-51-59
+.. nonce: uXQ701
+.. section: C API
+
+Always declare :c:func:`PyIndex_Check` as an opaque function to hide
+implementation details: remove ``PyIndex_Check()`` macro. The macro accessed
+directly the :c:member:`PyTypeObject.tp_as_number` member.
+
+..
+
+.. bpo: 39947
+.. date: 2020-03-25-19-44-55
+.. nonce: 2OxvPt
+.. section: C API
+
+Add :c:func:`PyThreadState_GetID` function: get the unique identifier of a
+Python thread state.
diff --git a/Misc/NEWS.d/3.9.0b1.rst b/Misc/NEWS.d/3.9.0b1.rst
new file mode 100644
index 0000000..51dc9ce
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0b1.rst
@@ -0,0 +1,961 @@
+.. bpo: 40501
+.. date: 2020-05-06-00-41-11
+.. nonce: _61wv_
+.. release date: 2020-05-19
+.. section: Security
+
+:mod:`uuid` no longer uses :mod:`ctypes` to load :file:`libuuid` or
+:file:`rpcrt4.dll` at runtime.
+
+..
+
+.. bpo: 40663
+.. date: 2020-05-17-20-38-12
+.. nonce: u2aiZf
+.. section: Core and Builtins
+
+Correctly generate annotations where parentheses are omitted but required
+(e.g: ``Type[(str, int, *other))]``.
+
+..
+
+.. bpo: 40596
+.. date: 2020-05-11-20-53-52
+.. nonce: dwOH_X
+.. section: Core and Builtins
+
+Fixed :meth:`str.isidentifier` for non-canonicalized strings containing
+non-BMP characters on Windows.
+
+..
+
+.. bpo: 40593
+.. date: 2020-05-11-13-50-52
+.. nonce: yuOXj3
+.. section: Core and Builtins
+
+Improved syntax errors for invalid characters in source code.
+
+..
+
+.. bpo: 40585
+.. date: 2020-05-11-00-19-42
+.. nonce: yusknY
+.. section: Core and Builtins
+
+Fixed a bug when using :func:`codeop.compile_command` that was causing
+exceptions to be swallowed with the new parser. Patch by Pablo Galindo
+
+..
+
+.. bpo: 40566
+.. date: 2020-05-09-01-39-16
+.. nonce: wlcjW_
+.. section: Core and Builtins
+
+Apply :pep:`573` to :mod:`abc`.
+
+..
+
+.. bpo: 40502
+.. date: 2020-05-08-03-25-26
+.. nonce: e-VCyL
+.. section: Core and Builtins
+
+Initialize ``n->n_col_offset``. (Patch by Joannah Nanjekye)
+
+..
+
+.. bpo: 40527
+.. date: 2020-05-06-14-52-35
+.. nonce: gTNKuy
+.. section: Core and Builtins
+
+Fix command line argument parsing: no longer write errors multiple times
+into stderr.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-05-05-21-11-35
+.. nonce: ggwD3C
+.. section: Core and Builtins
+
+Port :mod:`errno` to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 40523
+.. date: 2020-05-05-20-36-15
+.. nonce: hKZVTB
+.. section: Core and Builtins
+
+Add pass-throughs for :func:`hash` and :func:`reversed` to
+:class:`weakref.proxy` objects. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-05-05-03-36-27
+.. nonce: ARv1YV
+.. section: Core and Builtins
+
+Port :mod:`syslog` to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 40246
+.. date: 2020-05-03-23-28-11
+.. nonce: c1D7x8
+.. section: Core and Builtins
+
+Reporting a specialised error message for invalid string prefixes, which was
+introduced in :issue:`40246`, is being reverted due to backwards
+compatibility concerns for strings that immediately follow a reserved
+keyword without whitespace between them. Constructs like `bg="#d00" if clear
+else"#fca"` were failing to parse, which is not an acceptable breakage on
+such short notice.
+
+..
+
+.. bpo: 40417
+.. date: 2020-05-01-19-04-52
+.. nonce: Sti2lJ
+.. section: Core and Builtins
+
+Fix imp module deprecation warning when PyImport_ReloadModule is called.
+Patch by Robert Rouhani.
+
+..
+
+.. bpo: 40408
+.. date: 2020-05-01-15-36-14
+.. nonce: XzQI59
+.. section: Core and Builtins
+
+Fixed support of nested type variables in GenericAlias (e.g.
+``list[list[T]]``).
+
+..
+
+.. bpo: 1635741
+.. date: 2020-04-30-01-44-42
+.. nonce: GKtjqr
+.. section: Core and Builtins
+
+Port _stat module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 29587
+.. date: 2020-04-30-00-50-25
+.. nonce: oEwSq
+.. section: Core and Builtins
+
+Enable implicit exception chaining when calling :meth:`generator.throw`.
+
+..
+
+.. bpo: 40328
+.. date: 2020-04-19-22-23-32
+.. nonce: gWJ53f
+.. section: Core and Builtins
+
+Add tools for generating mappings headers for CJKCodecs.
+
+..
+
+.. bpo: 40228
+.. date: 2020-04-08-17-02-35
+.. nonce: bRaaJ-
+.. section: Core and Builtins
+
+Setting frame.f_lineno is now robust w.r.t. changes in the
+source-to-bytecode compiler
+
+..
+
+.. bpo: 38880
+.. date: 2019-11-22-14-34-47
+.. nonce: evcCPa
+.. section: Core and Builtins
+
+Added the ability to list interpreters associated with channel ends in the
+internal subinterpreters module.
+
+..
+
+.. bpo: 37986
+.. date: 2019-11-20-09-50-58
+.. nonce: o0lmA7
+.. section: Core and Builtins
+
+Improve performance of :c:func:`PyLong_FromDouble` for values that fit into
+:c:type:`long`.
+
+..
+
+.. bpo: 40662
+.. date: 2020-05-18-12-56-45
+.. nonce: dfornR
+.. section: Library
+
+Fixed :func:`ast.get_source_segment` for ast nodes that have incomplete
+location information. Patch by Irit Katriel.
+
+..
+
+.. bpo: 40665
+.. date: 2020-05-17-21-56-38
+.. nonce: msB7u5
+.. section: Library
+
+Convert :mod:`bisect` to use Argument Clinic.
+
+..
+
+.. bpo: 40536
+.. date: 2020-05-17-14-00-12
+.. nonce: FCpoRA
+.. section: Library
+
+Added the :func:`~zoneinfo.available_timezones` function to the
+:mod:`zoneinfo` module. Patch by Paul Ganssle.
+
+..
+
+.. bpo: 40645
+.. date: 2020-05-16-19-34-38
+.. nonce: 7ibMt-
+.. section: Library
+
+The :class:`hmac.HMAC` exposes internal implementation details. The
+attributes ``digest_cons``, ``inner``, and ``outer`` are deprecated and will
+be removed in the future.
+
+..
+
+.. bpo: 40645
+.. date: 2020-05-16-17-05-02
+.. nonce: wYSkjT
+.. section: Library
+
+The internal module ``_hashlib`` wraps and exposes OpenSSL's HMAC API. The
+new code will be used in Python 3.10 after the internal implementation
+details of the pure Python HMAC module are no longer part of the public API.
+
+..
+
+.. bpo: 40637
+.. date: 2020-05-15-21-57-10
+.. nonce: lb3Bnp
+.. section: Library
+
+Builtin hash modules can now be disabled or selectively enabled with
+``configure --with-builtin-hashlib-hashes=sha3,blake1`` or
+``--without-builtin-hashlib-hashes``.
+
+..
+
+.. bpo: 37630
+.. date: 2020-05-15-19-53-18
+.. nonce: O5kgAw
+.. section: Library
+
+The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF from OpenSSL
+when available.
+
+..
+
+.. bpo: 40479
+.. date: 2020-05-15-17-38-21
+.. nonce: yamSCh
+.. section: Library
+
+The :mod:`hashlib` now compiles with OpenSSL 3.0.0-alpha2.
+
+..
+
+.. bpo: 40257
+.. date: 2020-05-13-23-10-25
+.. nonce: aR4TGp
+.. section: Library
+
+Revert changes to :func:`inspect.getdoc`.
+
+..
+
+.. bpo: 40607
+.. date: 2020-05-13-15-32-13
+.. nonce: uSPFCi
+.. section: Library
+
+When cancelling a task due to timeout, :meth:`asyncio.wait_for` will now
+propagate the exception if an error happens during cancellation. Patch by
+Roman Skurikhin.
+
+..
+
+.. bpo: 40612
+.. date: 2020-05-13-10-23-29
+.. nonce: gOIreM
+.. section: Library
+
+Fix edge cases in SyntaxError formatting. If the offset is <= 0, no caret is
+printed. If the offset is > line length, the caret is printed pointing just
+after the last character.
+
+..
+
+.. bpo: 40597
+.. date: 2020-05-11-19-17-23
+.. nonce: 4SGfgm
+.. section: Library
+
+If text content lines are longer than policy.max_line_length, always use a
+content-encoding to make sure they are wrapped.
+
+..
+
+.. bpo: 40571
+.. date: 2020-05-09-15-38-25
+.. nonce: kOXZGC
+.. section: Library
+
+Added functools.cache() as a simpler, more discoverable way to access the
+unbounded cache variant of lru_cache(maxsize=None).
+
+..
+
+.. bpo: 40503
+.. date: 2020-05-08-15-48-39
+.. nonce: elZyxc
+.. section: Library
+
+:pep:`615`, the :mod:`zoneinfo` module. Adds support for the IANA time zone
+database.
+
+..
+
+.. bpo: 40397
+.. date: 2020-05-07-21-22-04
+.. nonce: PVWFAn
+.. section: Library
+
+Removed attributes ``__args__`` and ``__parameters__`` from special generic
+aliases like ``typing.List`` (not subscripted).
+
+..
+
+.. bpo: 40549
+.. date: 2020-05-07-20-11-51
+.. nonce: 6FiRSV
+.. section: Library
+
+Convert posixmodule.c ("posix" or "nt" module) to the multiphase
+initialization (PEP 489).
+
+..
+
+.. bpo: 31033
+.. date: 2020-05-07-06-41-20
+.. nonce: waCj3n
+.. section: Library
+
+Add a ``msg`` argument to :meth:`Future.cancel` and :meth:`Task.cancel`.
+
+..
+
+.. bpo: 40541
+.. date: 2020-05-06-15-36-47
+.. nonce: LlYghL
+.. section: Library
+
+Added an optional *counts* parameter to random.sample().
+
+..
+
+.. bpo: 40515
+.. date: 2020-05-06-13-51-19
+.. nonce: TUCvYB
+.. section: Library
+
+The :mod:`ssl` and :mod:`hashlib` modules now actively check that OpenSSL is
+build with thread support. Python 3.7.0 made thread support mandatory and no
+longer works safely with a no-thread builds.
+
+..
+
+.. bpo: 31033
+.. date: 2020-05-06-02-33-00
+.. nonce: aX12pw
+.. section: Library
+
+When a :class:`asyncio.Task` is cancelled, the exception traceback now
+chains all the way back to where the task was first interrupted.
+
+..
+
+.. bpo: 40504
+.. date: 2020-05-05-17-12-47
+.. nonce: EX6wPn
+.. section: Library
+
+:func:`functools.lru_cache` objects can now be the targets of weakrefs.
+
+..
+
+.. bpo: 40559
+.. date: 2020-05-05-08-12-51
+.. nonce: 112wwa
+.. section: Library
+
+Fix possible memory leak in the C implementation of :class:`asyncio.Task`.
+
+..
+
+.. bpo: 40480
+.. date: 2020-05-04-21-21-43
+.. nonce: mjldWa
+.. section: Library
+
+``fnmatch.fnmatch()`` could take exponential time in the presence of
+multiple ``*`` pattern characters.  This was repaired by generating more
+elaborate regular expressions to avoid futile backtracking.
+
+..
+
+.. bpo: 40495
+.. date: 2020-05-04-11-20-49
+.. nonce: TyTc2O
+.. section: Library
+
+:mod:`compileall` is now able to use hardlinks to prevent duplicates in a
+case when ``.pyc`` files for different optimization levels have the same
+content.
+
+..
+
+.. bpo: 40457
+.. date: 2020-05-02-17-17-37
+.. nonce: EXReI1
+.. section: Library
+
+The ssl module now support OpenSSL builds without TLS 1.0 and 1.1 methods.
+
+..
+
+.. bpo: 40355
+.. date: 2020-05-02-14-24-48
+.. nonce: xTujaB
+.. section: Library
+
+Improve error reporting in :func:`ast.literal_eval` in the presence of
+malformed :class:`ast.Dict` nodes instead of silently ignoring any
+non-conforming elements. Patch by Curtis Bucher.
+
+..
+
+.. bpo: 40465
+.. date: 2020-05-02-12-00-28
+.. nonce: qfCjOD
+.. section: Library
+
+Deprecated the optional *random* argument to *random.shuffle()*.
+
+..
+
+.. bpo: 40459
+.. date: 2020-05-02-04-29-31
+.. nonce: fSAYVD
+.. section: Library
+
+:func:`platform.win32_ver` now produces correct *ptype* strings instead of
+empty strings.
+
+..
+
+.. bpo: 39435
+.. date: 2020-05-01-23-24-25
+.. nonce: mgb6ib
+.. section: Library
+
+The first argument of :func:`pickle.loads` is now positional-only.
+
+..
+
+.. bpo: 39305
+.. date: 2020-05-01-00-22-58
+.. nonce: Cuwu_H
+.. section: Library
+
+Update :mod:`nntplib` to merge :class:`nntplib.NNTP` and
+:class:`nntplib._NNTPBase`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 32494
+.. date: 2020-04-30-22-25-08
+.. nonce: 1xaU5l
+.. section: Library
+
+Update :mod:`dbm.gnu` to use gdbm_count if possible when calling
+:func:`len`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 40453
+.. date: 2020-04-30-22-04-58
+.. nonce: ggz7sl
+.. section: Library
+
+Add ``isolated=True`` keyword-only parameter to
+``_xxsubinterpreters.create()``. An isolated subinterpreter cannot spawn
+threads, spawn a child process or call ``os.fork()``.
+
+..
+
+.. bpo: 40286
+.. date: 2020-04-29-18-02-16
+.. nonce: txbQNx
+.. section: Library
+
+Remove ``_random.Random.randbytes()``: the C implementation of
+``randbytes()``. Implement the method in Python to ease subclassing:
+``randbytes()`` now directly reuses ``getrandbits()``.
+
+..
+
+.. bpo: 40394
+.. date: 2020-04-28-18-59-48
+.. nonce: Yi5uuM
+.. section: Library
+
+Added default arguments to
+:meth:`difflib.SequenceMatcher.find_longest_match()`.
+
+..
+
+.. bpo: 39995
+.. date: 2020-04-28-18-25-27
+.. nonce: WmA3Gk
+.. section: Library
+
+Fix a race condition in concurrent.futures._ThreadWakeup: access to
+_ThreadWakeup is now protected with the shutdown lock.
+
+..
+
+.. bpo: 30966
+.. date: 2020-04-27-20-27-39
+.. nonce: Xmtlqu
+.. section: Library
+
+``Process.shutdown(wait=True)`` of :mod:`concurrent.futures` now closes
+explicitly the result queue.
+
+..
+
+.. bpo: 30966
+.. date: 2020-04-27-17-19-09
+.. nonce: _5lDx-
+.. section: Library
+
+Add a new :meth:`~multiprocessing.SimpleQueue.close` method to the
+:class:`~multiprocessing.SimpleQueue` class to explicitly close the queue.
+
+..
+
+.. bpo: 39966
+.. date: 2020-04-27-14-48-43
+.. nonce: N5yXUe
+.. section: Library
+
+Revert bpo-25597. :class:`unittest.mock.MagicMock` with wraps' set uses
+default return values for magic methods.
+
+..
+
+.. bpo: 39791
+.. date: 2020-04-27-00-51-40
+.. nonce: wv8Dxn
+.. section: Library
+
+Added ``files()`` function to importlib.resources with support for
+subdirectories in package data, matching backport in importlib_resources
+1.5.
+
+..
+
+.. bpo: 40375
+.. date: 2020-04-25-23-14-11
+.. nonce: 5GuK2A
+.. section: Library
+
+:meth:`imaplib.IMAP4.unselect` is added. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 40389
+.. date: 2020-04-25-20-00-58
+.. nonce: FPA6f0
+.. section: Library
+
+``repr()`` now returns ``typing.Optional[T]`` when called for
+``typing.Union`` of two types, one of which is ``NoneType``.
+
+..
+
+.. bpo: 40291
+.. date: 2020-04-14-22-31-27
+.. nonce: _O8hXn
+.. section: Library
+
+Add support for CAN_J1939 sockets (available on Linux 5.4+)
+
+..
+
+.. bpo: 40273
+.. date: 2020-04-14-09-54-35
+.. nonce: IN73Ks
+.. section: Library
+
+:class:`types.MappingProxyType` is now reversible.
+
+..
+
+.. bpo: 39075
+.. date: 2020-04-07-23-44-06
+.. nonce: hgck3j
+.. section: Library
+
+The repr for :class:`types.SimpleNamespace` is now insertion ordered rather
+than alphabetical.
+
+..
+
+.. bpo: 40192
+.. date: 2020-04-05-04-16-14
+.. nonce: nk8uRJ
+.. section: Library
+
+On AIX, :func:`~time.thread_time` is now implemented with
+``thread_cputime()`` which has nanosecond resolution, rather than
+``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms.
+Patch by Batuhan Taskaya.
+
+..
+
+.. bpo: 40025
+.. date: 2020-03-21-05-26-38
+.. nonce: DTLtyq
+.. section: Library
+
+Raise TypeError when _generate_next_value_ is defined after members. Patch
+by Ethan Onstott.
+
+..
+
+.. bpo: 39058
+.. date: 2019-12-15-19-17-10
+.. nonce: 7ci-vd
+.. section: Library
+
+In the argparse module, the repr for Namespace() and other argument holders
+now displayed in the order attributes were added.  Formerly, it displayed in
+alphabetical order even though argument order is preserved the user visible
+parts of the module.
+
+..
+
+.. bpo: 24416
+.. date: 2019-09-01-15-17-49
+.. nonce: G8Ww1U
+.. section: Library
+
+The ``isocalendar()`` methods of :class:`datetime.date` and
+:class:`datetime.datetime` now return a :term:`named tuple` instead of a
+:class:`tuple`.
+
+..
+
+.. bpo: 34790
+.. date: 2020-05-08-20-18-55
+.. nonce: t6kW_1
+.. section: Documentation
+
+Add version of removal for explicit passing of coros to `asyncio.wait()`'s
+documentation
+
+..
+
+.. bpo: 40561
+.. date: 2020-05-08-08-39-40
+.. nonce: ZMB_2i
+.. section: Documentation
+
+Provide docstrings for webbrowser open functions.
+
+..
+
+.. bpo: 40499
+.. date: 2020-05-04-14-20-02
+.. nonce: tjLSo8
+.. section: Documentation
+
+Mention that :func:`asyncio.wait` requires a non-empty set of awaitables.
+
+..
+
+.. bpo: 39705
+.. date: 2020-03-14-18-37-06
+.. nonce: nQVqig
+.. section: Documentation
+
+Tutorial example for sorted() in the Loop Techniques section is given a
+better explanation. Also a new example is included to explain sorted()'s
+basic behavior.
+
+..
+
+.. bpo: 39435
+.. date: 2020-01-24-05-42-57
+.. nonce: EFcdFU
+.. section: Documentation
+
+Fix an incorrect signature for :func:`pickle.loads` in the docs
+
+..
+
+.. bpo: 40055
+.. date: 2020-05-15-01-21-44
+.. nonce: Xp4aP9
+.. section: Tests
+
+distutils.tests now saves/restores warnings filters to leave them unchanged.
+Importing tests imports docutils which imports pkg_resources which adds a
+warnings filter.
+
+..
+
+.. bpo: 40436
+.. date: 2020-04-29-16-08-24
+.. nonce: gDMnYl
+.. section: Tests
+
+test_gdb and test.pythoninfo now check gdb command exit code.
+
+..
+
+.. bpo: 40653
+.. date: 2020-05-17-03-33-00
+.. nonce: WI8UGn
+.. section: Build
+
+Move _dirnameW out of HAVE_SYMLINK to fix a potential compiling issue.
+
+..
+
+.. bpo: 40514
+.. date: 2020-05-05-15-39-11
+.. nonce: bZZmuS
+.. section: Build
+
+Add ``--with-experimental-isolated-subinterpreters`` build option to
+``configure``: better isolate subinterpreters, experimental build mode.
+
+..
+
+.. bpo: 40650
+.. date: 2020-05-17-00-08-13
+.. nonce: 4euMtU
+.. section: Windows
+
+Include winsock2.h in pytime.c for timeval.
+
+..
+
+.. bpo: 40458
+.. date: 2020-05-01-20-57-57
+.. nonce: Eb0ueI
+.. section: Windows
+
+Increase reserved stack space to prevent overflow crash on Windows.
+
+..
+
+.. bpo: 39148
+.. date: 2020-03-23-19-07-55
+.. nonce: W1YJEb
+.. section: Windows
+
+Add IPv6 support to :mod:`asyncio` datagram endpoints in ProactorEventLoop.
+Change the raised exception for unknown address families to ValueError as
+it's not coming from Windows API.
+
+..
+
+.. bpo: 34956
+.. date: 2020-05-18-02-43-11
+.. nonce: 35IcGF
+.. section: macOS
+
+When building Python on macOS from source, ``_tkinter`` now links with
+non-system Tcl and Tk frameworks if they are installed in
+``/Library/Frameworks``, as had been the case on older releases
+of macOS. If a macOS SDK is explicitly configured, by using
+``--enable-universalsdk=`` or ``-isysroot``, only the SDK itself is
+searched. The default behavior can still be overridden with
+``--with-tcltk-includes`` and ``--with-tcltk-libs``.
+
+..
+
+.. bpo: 35569
+.. date: 2020-04-15-00-02-47
+.. nonce: 02_1MV
+.. section: macOS
+
+Expose RFC 3542 IPv6 socket options.
+
+..
+
+.. bpo: 40479
+.. date: 2020-05-15-17-48-25
+.. nonce: B1gBl-
+.. section: Tools/Demos
+
+Update multissltest helper to test with latest OpenSSL 1.0.2, 1.1.0, 1.1.1,
+and 3.0.0-alpha.
+
+..
+
+.. bpo: 40431
+.. date: 2020-04-29-01-32-17
+.. nonce: B_aEZ0
+.. section: Tools/Demos
+
+Fix a syntax typo in ``turtledemo`` that now raises a ``SyntaxError``.
+
+..
+
+.. bpo: 40163
+.. date: 2020-04-03-08-32-31
+.. nonce: lX8K4B
+.. section: Tools/Demos
+
+Fix multissltest tool. OpenSSL has changed download URL for old releases.
+The multissltest tool now tries to download from current and old download
+URLs.
+
+..
+
+.. bpo: 39465
+.. date: 2020-05-14-00-36-19
+.. nonce: 3a5g-X
+.. section: C API
+
+Remove the ``_PyUnicode_ClearStaticStrings()`` function from the C API.
+
+..
+
+.. bpo: 38787
+.. date: 2020-05-10-16-39-08
+.. nonce: XzQ59O
+.. section: C API
+
+Add PyCFunction_CheckExact() macro for exact type checks now that we allow
+subtypes of PyCFunction, as well as PyCMethod_CheckExact() and
+PyCMethod_Check() for the new PyCMethod subtype.
+
+..
+
+.. bpo: 40545
+.. date: 2020-05-07-11-41-13
+.. nonce: 51DzF1
+.. section: C API
+
+Declare ``_PyErr_GetTopmostException()`` with ``PyAPI_FUNC()`` to properly
+export the function in the C API. The function remains private (``_Py``)
+prefix.
+
+..
+
+.. bpo: 40412
+.. date: 2020-05-01-17-28-04
+.. nonce: dE0D8N
+.. section: C API
+
+Nullify inittab_copy during finalization, preventing future interpreter
+initializations in an embedded situation from crashing. Patch by Gregory
+Szorc.
+
+..
+
+.. bpo: 40429
+.. date: 2020-04-29-01-39-41
+.. nonce: VQfvta
+.. section: C API
+
+The :c:func:`PyThreadState_GetFrame` function now returns a strong reference
+to the frame.
+
+..
+
+.. bpo: 40428
+.. date: 2020-04-28-23-17-27
+.. nonce: rmtpru
+.. section: C API
+
+Remove the following functions from the C API. Call :c:func:`PyGC_Collect`
+explicitly to free all free lists.
+
+* ``PyAsyncGen_ClearFreeLists()``
+* ``PyContext_ClearFreeList()``
+* ``PyDict_ClearFreeList()``
+* ``PyFloat_ClearFreeList()``
+* ``PyFrame_ClearFreeList()``
+* ``PyList_ClearFreeList()``
+* ``PySet_ClearFreeList()``
+* ``PyTuple_ClearFreeList()``
+
+..
+
+.. bpo: 40421
+.. date: 2020-04-28-19-29-36
+.. nonce: 3uIIaB
+.. section: C API
+
+New :c:func:`PyFrame_GetBack` function: get the frame next outer frame.
+
+..
+
+.. bpo: 40421
+.. date: 2020-04-28-15-47-58
+.. nonce: ZIzOV0
+.. section: C API
+
+New :c:func:`PyFrame_GetCode` function: return a borrowed reference to the
+frame code.
+
+..
+
+.. bpo: 40217
+.. date: 2020-04-27-14-00-38
+.. nonce: sgn6c8
+.. section: C API
+
+Ensure that instances of types created with
+:c:func:`PyType_FromSpecWithBases` will visit its class object when
+traversing references in the garbage collector (implemented as an extension
+of the provided :c:member:`~PyTypeObject.tp_traverse`). Patch by Pablo
+Galindo.
+
+..
+
+.. bpo: 38787
+.. date: 2020-01-22-12-38-59
+.. nonce: HUH6hd
+.. section: C API
+
+Module C state is now accessible from C-defined heap type methods
+(:pep:`573`). Patch by Marcel Plch and Petr Viktorin.
diff --git a/Misc/NEWS.d/3.9.0b2.rst b/Misc/NEWS.d/3.9.0b2.rst
new file mode 100644
index 0000000..2aa6de3
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0b2.rst
@@ -0,0 +1,485 @@
+.. bpo: 40904
+.. date: 2020-06-08-01-08-57
+.. nonce: 76qQzo
+.. release date: 2020-06-08
+.. section: Core and Builtins
+
+Fix possible segfault in the new PEG parser when parsing f-string containing
+yield statements with no value (:code:`f"{yield}"`). Patch by Pablo Galindo
+
+..
+
+.. bpo: 40903
+.. date: 2020-06-07-22-50-10
+.. nonce: 7dWejS
+.. section: Core and Builtins
+
+Fixed a possible segfault in the new PEG parser when producing error
+messages for invalid assignments of the form :code:`p=p=`. Patch by Pablo
+Galindo
+
+..
+
+.. bpo: 40880
+.. date: 2020-06-06-00-23-19
+.. nonce: fjdzSh
+.. section: Core and Builtins
+
+Fix invalid memory read in the new parser when checking newlines in string
+literals. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 40883
+.. date: 2020-06-05-23-25-00
+.. nonce: M6sQ-Q
+.. section: Core and Builtins
+
+Fix memory leak in when parsing f-strings in the new parser. Patch by Pablo
+Galindo
+
+..
+
+.. bpo: 40870
+.. date: 2020-06-05-12-48-28
+.. nonce: 9cd2sk
+.. section: Core and Builtins
+
+Raise :exc:`ValueError` when validating custom AST's where the constants
+``True``, ``False`` and ``None`` are used within a :class:`ast.Name` node.
+
+..
+
+.. bpo: 40854
+.. date: 2020-06-03-13-53-24
+.. nonce: O6vfQU
+.. section: Core and Builtins
+
+Allow overriding :data:`sys.platlibdir` via a new :envvar:`PYTHONPLATLIBDIR`
+environment variable.
+
+..
+
+.. bpo: 40826
+.. date: 2020-06-01-20-31-07
+.. nonce: XCI4M2
+.. section: Core and Builtins
+
+Fix GIL usage in :c:func:`PyOS_Readline`: lock the GIL to set an exception
+and pass the Python thread state when checking if there is a pending signal.
+
+..
+
+.. bpo: 40780
+.. date: 2020-05-26-17-43-58
+.. nonce: 3Ckdgm
+.. section: Core and Builtins
+
+Fix a corner case where g-style string formatting of a float failed to
+remove trailing zeros.
+
+..
+
+.. bpo: 38964
+.. date: 2020-05-25-21-49-11
+.. nonce: lrml90
+.. section: Core and Builtins
+
+When there's a :exc:`SyntaxError` in the expression part of an fstring, the
+filename attribute of the :exc:`SyntaxError` gets correctly set to the name
+of the file the fstring resides in.
+
+..
+
+.. bpo: 40750
+.. date: 2020-05-24-02-42-26
+.. nonce: ZmO9Ev
+.. section: Core and Builtins
+
+Support the "-d" debug flag in the new PEG parser. Patch by Pablo Galindo
+
+..
+
+.. bpo: 40217
+.. date: 2020-05-23-01-15-51
+.. nonce: jZsHTc
+.. section: Core and Builtins
+
+Instances of types created with :c:func:`PyType_FromSpecWithBases` will no
+longer automatically visit their class object when traversing references in
+the garbage collector. The user is expected to manually visit the object's
+class. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 40696
+.. date: 2020-05-21-01-54-00
+.. nonce: u3n8Wx
+.. section: Core and Builtins
+
+Fix a hang that can arise after :meth:`generator.throw` due to a cycle in
+the exception context chain.
+
+..
+
+.. bpo: 39791
+.. date: 2020-06-05-19-29-10
+.. nonce: _CcO3d
+.. section: Library
+
+Refresh importlib.metadata from importlib_metadata 1.6.1.
+
+..
+
+.. bpo: 40807
+.. date: 2020-06-04-16-25-15
+.. nonce: yYyLWx
+.. section: Library
+
+Stop codeop._maybe_compile, used by code.InteractiveInterpreter (and IDLE).
+from from emitting each warning three times.
+
+..
+
+.. bpo: 39791
+.. date: 2020-06-02-02-16-02
+.. nonce: StCJlA
+.. section: Library
+
+Built-in loaders (SourceFileLoader and ZipImporter) now supply
+``TraversableResources`` implementations for ``ResourceReader``, and the
+fallback function has been removed.
+
+..
+
+.. bpo: 17005
+.. date: 2020-05-31-23-32-36
+.. nonce: JlRUGB
+.. section: Library
+
+The topological sort functionality that was introduced initially in the
+:mod:`functools` module has been moved to a new :mod:`graphlib` module to
+better accommodate the new tools and keep the original scope of the
+:mod:`functools` module. Patch by Pablo Galindo
+
+..
+
+.. bpo: 40777
+.. date: 2020-05-28-17-32-29
+.. nonce: 1kJU6N
+.. section: Library
+
+Initialize PyDateTime_IsoCalendarDateType.tp_base at run-time to avoid
+errors on some compilers.
+
+..
+
+.. bpo: 40767
+.. date: 2020-05-27-21-27-01
+.. nonce: L5MnVV
+.. section: Library
+
+:mod:`webbrowser` now properly finds the default browser in pure Wayland
+systems by checking the WAYLAND_DISPLAY environment variable. Patch
+contributed by Jérémy Attali.
+
+..
+
+.. bpo: 40791
+.. date: 2020-05-27-18-04-52
+.. nonce: IzpNor
+.. section: Library
+
+:func:`hashlib.compare_digest` uses OpenSSL's ``CRYPTO_memcmp()`` function
+when OpenSSL is available.
+
+..
+
+.. bpo: 40795
+.. date: 2020-05-27-17-00-18
+.. nonce: eZSnHA
+.. section: Library
+
+:mod:`ctypes` module: If ctypes fails to convert the result of a callback or
+if a ctypes callback function raises an exception, sys.unraisablehook is now
+called with an exception set. Previously, the error was logged into stderr
+by :c:func:`PyErr_Print`.
+
+..
+
+.. bpo: 30008
+.. date: 2020-05-25-22-18-38
+.. nonce: CKC3td
+.. section: Library
+
+Fix :mod:`ssl` code to be compatible with OpenSSL 1.1.x builds that use
+``no-deprecated`` and ``--api=1.1.0``.
+
+..
+
+.. bpo: 30064
+.. date: 2020-05-25-11-52-23
+.. nonce: 6CICsH
+.. section: Library
+
+Fix asyncio ``loop.sock_*`` race condition issue
+
+..
+
+.. bpo: 40759
+.. date: 2020-05-24-23-52-35
+.. nonce: DdZdaw
+.. section: Library
+
+Deprecate the :mod:`symbol` module.
+
+..
+
+.. bpo: 40737
+.. date: 2020-05-23-00-22-11
+.. nonce: iph-CM
+.. section: Library
+
+Fix possible reference leak for :mod:`sqlite3` initialization.
+
+..
+
+.. bpo: 40698
+.. date: 2020-05-20-14-38-04
+.. nonce: zwl5Hc
+.. section: Library
+
+:mod:`distutils` upload creates SHA2-256 and Blake2b-256 digests. MD5
+digests is skipped if platform blocks MD5.
+
+..
+
+.. bpo: 40695
+.. date: 2020-05-20-13-03-28
+.. nonce: lr4aIS
+.. section: Library
+
+:mod:`hashlib` no longer falls back to builtin hash implementations when
+OpenSSL provides a hash digest and the algorithm is blocked by security
+policy.
+
+..
+
+.. bpo: 9216
+.. date: 2020-05-20-12-53-20
+.. nonce: ps7Yf1
+.. section: Library
+
+func:`hashlib.new` passed ``usedforsecurity`` to OpenSSL EVP constructor
+``_hashlib.new()``. test_hashlib and test_smtplib handle strict security
+policy better.
+
+..
+
+.. bpo: 40614
+.. date: 2020-05-18-22-41-02
+.. nonce: 8j3kmq
+.. section: Library
+
+:func:`ast.parse` will not parse self documenting expressions in f-strings
+when passed ``feature_version`` is less than ``(3, 8)``.
+
+..
+
+.. bpo: 40671
+.. date: 2020-05-18-15-26-31
+.. nonce: NeZ9Cy
+.. section: Library
+
+Prepare ``_hashlib`` for :pep:`489` and use :c:func:`PyModule_AddType`.
+
+..
+
+.. bpo: 32309
+.. date: 2020-05-17-02-03-09
+.. nonce: KM9psl
+.. section: Library
+
+Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is mainly used
+for running IO-bound functions in a separate thread to avoid blocking the
+event loop, and essentially works as a high-level version of
+:meth:`~asyncio.loop.run_in_executor` that can directly take keyword
+arguments.
+
+..
+
+.. bpo: 40630
+.. date: 2020-05-15-13-40-15
+.. nonce: YXEX_M
+.. section: Library
+
+Added :func:`tracemalloc.reset_peak` to set the peak size of traced memory
+blocks to the current size, to measure the peak of specific pieces of code.
+
+..
+
+.. bpo: 13097
+.. date: 2020-05-06-02-01-25
+.. nonce: Wh5xSK
+.. section: Library
+
+``ctypes`` now raises an ``ArgumentError`` when a callback is invoked with
+more than 1024 arguments.
+
+..
+
+.. bpo: 23082
+.. date: 2020-04-20-22-08-36
+.. nonce: iX90Id
+.. section: Library
+
+Updated the error message and docs of PurePath.relative_to() to better
+reflect the function behaviour.
+
+..
+
+.. bpo: 39244
+.. date: 2020-02-23-15-09-47
+.. nonce: aBK5IM
+.. section: Library
+
+Fixed :class:`multiprocessing.context.get_all_start_methods` to properly
+return the default method first on macOS.
+
+..
+
+.. bpo: 39040
+.. date: 2019-12-15-18-47-20
+.. nonce: tKa0Qs
+.. section: Library
+
+Fix parsing of invalid mime headers parameters by collapsing whitespace
+between encoded words in a bare-quote-string.
+
+..
+
+.. bpo: 35714
+.. date: 2019-10-25-23-45-49
+.. nonce: fw3xb7
+.. section: Library
+
+:exc:`struct.error` is now raised if there is a null character in a
+:mod:`struct` format string.
+
+..
+
+.. bpo: 36290
+.. date: 2019-03-17-19-01-53
+.. nonce: 7VXo_K
+.. section: Library
+
+AST nodes are now raising :exc:`TypeError` on conflicting keyword arguments.
+Patch contributed by Rémi Lapeyre.
+
+..
+
+.. bpo: 17258
+.. date: 2020-05-26-07-53-31
+.. nonce: X_IKTQ
+.. section: Tests
+
+Skip some :mod:`multiprocessing` tests when MD5 hash digest is blocked.
+
+..
+
+.. bpo: 40514
+.. date: 2020-05-19-17-43-38
+.. nonce: gW-66U
+.. section: Build
+
+Remove ``--with-experimental-isolated-subinterpreters`` configure option in
+Python 3.9: the experiment continues in the master branch, but it's no
+longer needed in 3.9.
+
+..
+
+.. bpo: 40683
+.. date: 2020-05-19-10-54-08
+.. nonce: W8JHrr
+.. section: Build
+
+Fixed an issue where the :mod:`zoneinfo` module and its tests were not
+included when Python is installed with ``make``.
+
+..
+
+.. bpo: 39631
+.. date: 2020-05-19-14-43-33
+.. nonce: Z5yXam
+.. section: Windows
+
+Changes the registered MIME type for ``.py`` files on Windows to
+``text/x-python`` instead of ``text/plain``.
+
+..
+
+.. bpo: 40677
+.. date: 2020-05-19-04-11-12
+.. nonce: qQbLW8
+.. section: Windows
+
+Manually define IO_REPARSE_TAG_APPEXECLINK in case some old Windows SDK
+doesn't have it.
+
+..
+
+.. bpo: 40741
+.. date: 2020-06-07-20-10-56
+.. nonce: 80A2BW
+.. section: macOS
+
+Update macOS installer to use SQLite 3.32.2.
+
+..
+
+.. bpo: 39885
+.. date: 2020-05-29-18-21-58
+.. nonce: zB_-bN
+.. section: IDLE
+
+Make context menu Cut and Copy work again when right-clicking within a
+selection.
+
+..
+
+.. bpo: 40723
+.. date: 2020-05-24-06-19-43
+.. nonce: AJLd4U
+.. section: IDLE
+
+Make test_idle pass when run after import.
+
+..
+
+.. bpo: 40910
+.. date: 2020-06-08-15-59-06
+.. nonce: L56oI0
+.. section: C API
+
+Export explicitly the :c:func:`Py_GetArgcArgv` function to the C API and
+document the function. Previously, it was exported implicitly which no
+longer works since Python is built with ``-fvisibility=hidden``.
+
+..
+
+.. bpo: 40724
+.. date: 2020-06-04-08-01-23
+.. nonce: qIIdSi
+.. section: C API
+
+Allow defining buffer slots in type specs.
+
+..
+
+.. bpo: 40826
+.. date: 2020-06-01-16-12-37
+.. nonce: zQzFoK
+.. section: C API
+
+:c:func:`PyOS_InterruptOccurred` now fails with a fatal error if it is
+called with the GIL released.
diff --git a/Misc/NEWS.d/3.9.0b3.rst b/Misc/NEWS.d/3.9.0b3.rst
new file mode 100644
index 0000000..f43243e
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0b3.rst
@@ -0,0 +1,20 @@
+.. bpo: 40924
+.. date: 2020-06-09-18-59-34
+.. nonce: qR_YYG
+.. release date: 2020-06-09
+.. section: Library
+
+`importlib.resources`: Reverted ``TraversableResources`` implementations
+from the built-in loaders (SourceFileLoader and ZipImporter) as it was an
+incompatible change introduced in 3.9.0 beta 2 causing through a chain of
+events for root TLS certificates to be missing.
+
+..
+
+.. bpo: 40684
+.. date: 2020-06-08-19-57-05
+.. nonce: WIY2-i
+.. section: Build
+
+``make install`` now uses the ``PLATLIBDIR`` variable for the destination
+``lib-dynload/`` directory when ``./configure --with-platlibdir`` is used.
diff --git a/Misc/NEWS.d/3.9.0b4.rst b/Misc/NEWS.d/3.9.0b4.rst
new file mode 100644
index 0000000..95367a0
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0b4.rst
@@ -0,0 +1,600 @@
+.. bpo: 41004
+.. date: 2020-06-29-16-02-29
+.. nonce: ovF0KZ
+.. release date: 2020-07-02
+.. section: Security
+
+The __hash__() methods of  ipaddress.IPv4Interface and
+ipaddress.IPv6Interface incorrectly generated constant hash values of 32 and
+128 respectively. This resulted in always causing hash collisions. The fix
+uses hash() to generate hash values for the tuple of (address, mask length,
+network address).
+
+..
+
+.. bpo: 41094
+.. date: 2020-06-23-23-26-42
+.. nonce: zEIJse
+.. section: Core and Builtins
+
+Fix decoding errors with audit when open files with non-ASCII names on
+non-UTF-8 locale.
+
+..
+
+.. bpo: 41084
+.. date: 2020-06-23-15-10-19
+.. nonce: pt3y7F
+.. section: Core and Builtins
+
+Prefix the error message with 'f-string: ', when parsing an f-string
+expression which throws a :exc:`SyntaxError`.
+
+..
+
+.. bpo: 41076
+.. date: 2020-06-22-13-22-30
+.. nonce: eWYw2N
+.. section: Core and Builtins
+
+Pre-feed the parser with the location of the f-string expression, not the
+f-string itself, which allows us to skip the shifting of the AST node
+locations after the parsing is completed.
+
+..
+
+.. bpo: 40939
+.. date: 2020-06-21-23-48-12
+.. nonce: RjLl6C
+.. section: Core and Builtins
+
+Deprecate :c:func:`PyNode_Compile`.
+
+..
+
+.. bpo: 41056
+.. date: 2020-06-21-19-53-33
+.. nonce: IDu_EK
+.. section: Core and Builtins
+
+Fixes a reference to deallocated stack space during startup when
+constructing sys.path involving a relative symlink when code was supplied
+via -c.  (discovered via Coverity)
+
+..
+
+.. bpo: 41061
+.. date: 2020-06-21-10-54-02
+.. nonce: AHf9MU
+.. section: Core and Builtins
+
+Fix incorrect expressions and asserts in hashtable code and tests.
+
+..
+
+.. bpo: 41052
+.. date: 2020-06-20-22-46-18
+.. nonce: 46MPeF
+.. section: Core and Builtins
+
+Opt out serialization/deserialization for _random.Random
+
+..
+
+.. bpo: 40939
+.. date: 2020-06-20-18-36-05
+.. nonce: V3eiAZ
+.. section: Core and Builtins
+
+Deprecate :c:func:`PyParser_SimpleParseStringFlags`,
+:c:func:`PyParser_SimpleParseStringFlagsFilename` and
+:c:func:`PyParser_SimpleParseFileFlags`.
+
+..
+
+.. bpo: 35975
+.. date: 2020-06-20-17-16-25
+.. nonce: UDHCHp
+.. section: Core and Builtins
+
+Stefan Behnel reported that cf_feature_version is used even when
+PyCF_ONLY_AST is not set. This is against the intention and against the
+documented behavior, so it's been fixed.
+
+..
+
+.. bpo: 40985
+.. date: 2020-06-15-16-29-55
+.. nonce: IIN_xX
+.. section: Core and Builtins
+
+Fix a bug that caused the :exc:`SyntaxError` text to be empty when a file
+ends with a line ending in a line continuation character (i.e. backslash).
+The error text should contain the text of the last line.
+
+..
+
+.. bpo: 40958
+.. date: 2020-06-15-01-20-44
+.. nonce: 7O2Wh1
+.. section: Core and Builtins
+
+Fix a possible buffer overflow in the PEG parser when gathering information
+for emitting syntax errors. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 40957
+.. date: 2020-06-12-12-21-54
+.. nonce: Z8n6I6
+.. section: Core and Builtins
+
+Fix refleak in _Py_fopen_obj() when PySys_Audit() fails
+
+..
+
+.. bpo: 40947
+.. date: 2020-06-11-16-06-49
+.. nonce: 72cZcR
+.. section: Core and Builtins
+
+The Python :ref:`Path Configuration <init-path-config>` now takes
+:c:member:`PyConfig.platlibdir` in account.
+
+..
+
+.. bpo: 40847
+.. date: 2020-06-09-23-52-32
+.. nonce: 4XAACw
+.. section: Core and Builtins
+
+Fix a bug where a line with only a line continuation character is not
+considered a blank line at tokenizer level. In such cases, more than a
+single `NEWLINE` token was emitted. The old parser was working around the
+issue, but the new parser threw a :exc:`SyntaxError` for valid input due to
+this. For example, an empty line following a line continuation character was
+interpreted as a :exc:`SyntaxError`.
+
+..
+
+.. bpo: 40824
+.. date: 2020-05-30-14-37-18
+.. nonce: XR3V5s
+.. section: Core and Builtins
+
+Unexpected errors in calling the ``__iter__`` method are no longer masked by
+``TypeError`` in the :keyword:`in` operator and functions
+:func:`~operator.contains`, :func:`~operator.indexOf` and
+:func:`~operator.countOf` of the :mod:`operator` module.
+
+..
+
+.. bpo: 19569
+.. date: 2018-08-29-15-57-07
+.. nonce: RGu2Kb
+.. section: Core and Builtins
+
+Add the private macros ``_Py_COMP_DIAG_PUSH``,
+``_Py_COMP_DIAG_IGNORE_DEPR_DECLS``, and ``_Py_COMP_DIAG_POP``.
+
+..
+
+.. bpo: 41193
+.. date: 2020-07-02-11-53-45
+.. nonce: 8-Tnql
+.. section: Library
+
+The ``write_history()`` atexit function of the readline completer now
+ignores any :exc:`OSError` to ignore error if the filesystem is read-only,
+instead of only ignoring :exc:`FileNotFoundError` and
+:exc:`PermissionError`.
+
+..
+
+.. bpo: 41161
+.. date: 2020-06-30-20-50-51
+.. nonce: QTdJjz
+.. section: Library
+
+The decimal module now requires libmpdec-2.5.0. Users of
+--with-system-libmpdec should update their system library.
+
+..
+
+.. bpo: 40874
+.. date: 2020-06-28-21-16-51
+.. nonce: YImvzA
+.. section: Library
+
+The decimal module now requires libmpdec-2.5.0.
+
+..
+
+.. bpo: 41138
+.. date: 2020-06-27-13-51-36
+.. nonce: bIpf7g
+.. section: Library
+
+Fixed the :mod:`trace` module CLI for Python source files with non-UTF-8
+encoding.
+
+..
+
+.. bpo: 31938
+.. date: 2020-06-22-20-08-40
+.. nonce: EVuko9
+.. section: Library
+
+Fix default-value signatures of several functions in the :mod:`select`
+module - by Anthony Sottile.
+
+..
+
+.. bpo: 41068
+.. date: 2020-06-22-10-25-39
+.. nonce: _bX2BW
+.. section: Library
+
+Fixed reading files with non-ASCII names from ZIP archive directly after
+writing them.
+
+..
+
+.. bpo: 41058
+.. date: 2020-06-20-21-03-55
+.. nonce: gztdZy
+.. section: Library
+
+:func:`pdb.find_function` now correctly determines the source file encoding.
+
+..
+
+.. bpo: 41056
+.. date: 2020-06-20-18-35-43
+.. nonce: Garcle
+.. section: Library
+
+Fix a NULL pointer dereference within the ssl module during a MemoryError in
+the keylog callback. (discovered by Coverity)
+
+..
+
+.. bpo: 41056
+.. date: 2020-06-20-18-33-03
+.. nonce: gTH4Bq
+.. section: Library
+
+Fixed an instance where a MemoryError within the zoneinfo module might not
+be reported or not reported at its source. (found by Coverity)
+
+..
+
+.. bpo: 41048
+.. date: 2020-06-20-10-16-57
+.. nonce: hEXB-B
+.. section: Library
+
+:func:`mimetypes.read_mime_types` function reads the rule file using UTF-8
+encoding, not the locale encoding. Patch by Srinivas Reddy Thatiparthy.
+
+..
+
+.. bpo: 41043
+.. date: 2020-06-20-00-19-30
+.. nonce: p-Pk-H
+.. section: Library
+
+Fixed the use of :func:`~glob.glob` in the stdlib: literal part of the path
+is now always correctly escaped.
+
+..
+
+.. bpo: 40448
+.. date: 2020-06-15-12-22-53
+.. nonce: 1dk8Bu
+.. section: Library
+
+:mod:`ensurepip` now disables the use of `pip` cache when installing the
+bundled versions of `pip` and `setuptools`.  Patch by Krzysztof Konopko.
+
+..
+
+.. bpo: 40967
+.. date: 2020-06-15-00-13-57
+.. nonce: _dx3OO
+.. section: Library
+
+Removed :meth:`asyncio.Task.current_task` and
+:meth:`asyncio.Task.all_tasks`. Patch contributed by Rémi Lapeyre.
+
+..
+
+.. bpo: 40955
+.. date: 2020-06-12-11-55-30
+.. nonce: huixCg
+.. section: Library
+
+Fix a minor memory leak in :mod:`subprocess` module when extra_groups was
+specified.
+
+..
+
+.. bpo: 40855
+.. date: 2020-06-12-10-44-15
+.. nonce: jSot83
+.. section: Library
+
+The standard deviation and variance functions in the statistics module were
+ignoring their mu and xbar arguments.
+
+..
+
+.. bpo: 40924
+.. date: 2020-06-11-23-41-50
+.. nonce: m17Fkm
+.. section: Library
+
+Removed support for loaders implementing .files and supplying
+TraversableResources.
+
+..
+
+.. bpo: 40939
+.. date: 2020-06-11-11-07-10
+.. nonce: -D5Asl
+.. section: Library
+
+Use the new PEG parser when generating the stdlib :mod:`keyword` module.
+
+..
+
+.. bpo: 40834
+.. date: 2020-05-31-15-52-18
+.. nonce: MO9_hb
+.. section: Library
+
+Fix truncate when sending str object with_xxsubinterpreters.channel_send.
+
+..
+
+.. bpo: 26407
+.. date: 2020-05-30-14-19-47
+.. nonce: MjWLO1
+.. section: Library
+
+Unexpected errors in calling the ``__iter__`` method are no longer masked by
+``TypeError`` in :func:`csv.reader`, :func:`csv.writer.writerow` and
+:meth:`csv.writer.writerows`.
+
+..
+
+.. bpo: 38488
+.. date: 2020-05-28-16-51-00
+.. nonce: hFQNgA
+.. section: Library
+
+Update ensurepip to install pip 20.1.1 and setuptools 47.1.0.
+
+..
+
+.. bpo: 36543
+.. date: 2020-05-15-21-14-45
+.. nonce: Jt-eSX
+.. section: Library
+
+Restored the deprecated :mod:`xml.etree.cElementTree` module.
+
+..
+
+.. bpo: 34226
+.. date: 2018-07-29-12-14-54
+.. nonce: BE7zbu
+.. section: Library
+
+Fix `cgi.parse_multipart` without content_length. Patch by Roger Duran
+
+..
+
+.. bpo: 41085
+.. date: 2020-06-23-12-02-45
+.. nonce: JZKsyz
+.. section: Tests
+
+Fix integer overflow in the :meth:`array.array.index` method on 64-bit
+Windows for index larger than ``2**31``.
+
+..
+
+.. bpo: 41069
+.. date: 2020-06-22-00-21-12
+.. nonce: bLZkX-
+.. section: Tests
+
+:data:`test.support.TESTFN` and the current directory for tests when run via
+``test.regrtest`` contain now non-ascii characters if possible.
+
+..
+
+.. bpo: 38377
+.. date: 2020-06-17-18-00-21
+.. nonce: jfg4TH
+.. section: Tests
+
+On Linux, skip tests using multiprocessing if the current user cannot create
+a file in ``/dev/shm/`` directory. Add the
+:func:`~test.support.skip_if_broken_multiprocessing_synchronize` function to
+the :mod:`test.support` module.
+
+..
+
+.. bpo: 41009
+.. date: 2020-06-17-17-27-07
+.. nonce: Rvn6OQ
+.. section: Tests
+
+Fix use of ``support.require_{linux|mac|freebsd}_version()`` decorators as
+class decorator.
+
+..
+
+.. bpo: 41003
+.. date: 2020-06-17-15-07-14
+.. nonce: tiH_Fy
+.. section: Tests
+
+Fix ``test_copyreg`` when ``numpy`` is installed: ``test.pickletester`` now
+saves/restores warnings filters when importing ``numpy``, to ignore filters
+installed by ``numpy``.
+
+..
+
+.. bpo: 40964
+.. date: 2020-06-12-20-46-23
+.. nonce: OBzf2c
+.. section: Tests
+
+Disable remote :mod:`imaplib` tests, host cyrus.andrew.cmu.edu is blocking
+incoming connections.
+
+..
+
+.. bpo: 40927
+.. date: 2020-06-09-18-48-18
+.. nonce: 67ylLg
+.. section: Tests
+
+Fix test_binhex when run twice: it now uses import_fresh_module() to ensure
+that it raises DeprecationWarning each time.
+
+..
+
+.. bpo: 34401
+.. date: 2018-08-20-09-38-52
+.. nonce: eGxMPm
+.. section: Tests
+
+Make test_gdb properly run on HP-UX. Patch by Michael Osipov.
+
+..
+
+.. bpo: 40204
+.. date: 2020-06-25-06-59-13
+.. nonce: GpD04D
+.. section: Build
+
+Pin Sphinx version to 2.3.1 in ``Doc/Makefile``.
+
+..
+
+.. bpo: 41074
+.. date: 2020-06-24-21-30-42
+.. nonce: gaQc3C
+.. section: Windows
+
+Fixed support of non-ASCII names in functions :func:`msilib.OpenDatabase`
+and :func:`msilib.init_database` and non-ASCII SQL in method
+:meth:`msilib.Database.OpenView`.
+
+..
+
+.. bpo: 40164
+.. date: 2020-06-12-13-13-44
+.. nonce: SPrSn5
+.. section: Windows
+
+Updates Windows OpenSSL to 1.1.1g
+
+..
+
+.. bpo: 37556
+.. date: 2019-07-11-06-11-09
+.. nonce: sygMUU
+.. section: Windows
+
+Extend py.exe help to mention overrides via venv, shebang, environmental
+variables & ini files.
+
+..
+
+.. bpo: 39580
+.. date: 2020-06-25-06-09-00
+.. nonce: N_vJ9h
+.. section: macOS
+
+Avoid opening Finder window if running installer from the command line.
+Patch contributed by Rick Heil.
+
+..
+
+.. bpo: 41100
+.. date: 2020-06-24-13-51-57
+.. nonce: mcHdc5
+.. section: macOS
+
+Fix configure error when building on macOS 11. Note that the current Python
+release was released shortly after the first developer preview of macOS 11
+(Big Sur); there are other known issues with building and running on the
+developer preview. Big Sur is expected to be fully supported in a future
+bugfix release of Python 3.8.x and with 3.9.0.
+
+..
+
+.. bpo: 41005
+.. date: 2020-06-17-13-45-15
+.. nonce: zZegdV
+.. section: macOS
+
+fixed an XDG settings issue not allowing macos to open browser in
+webbrowser.py
+
+..
+
+.. bpo: 41152
+.. date: 2020-06-29-14-51-15
+.. nonce: d6mV0C
+.. section: IDLE
+
+The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE is now always
+UTF-8.
+
+..
+
+.. bpo: 41144
+.. date: 2020-06-27-17-02-00
+.. nonce: JoFGIX
+.. section: IDLE
+
+Make Open Module open a special module such as os.path.
+
+..
+
+.. bpo: 36346
+.. date: 2020-06-17-11-24-00
+.. nonce: fTMr3S
+.. section: C API
+
+Mark ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``,
+``PyUnicode_FromUnicode``, ``PyUnicode_AsUnicode``,
+``_PyUnicode_AsUnicode``, and ``PyUnicode_AsUnicodeAndSize`` as deprecated
+in C. Remove ``Py_UNICODE_MATCH`` which was deprecated and broken since
+Python 3.3.
+
+..
+
+.. bpo: 36020
+.. date: 2020-06-15-16-46-01
+.. nonce: djI6jw
+.. section: C API
+
+On Windows, ``#include "pyerrors.h"`` no longer defines ``snprintf`` and
+``vsnprintf`` macros.
+
+..
+
+.. bpo: 40703
+.. date: 2020-05-20-19-11-12
+.. nonce: qQXfW8
+.. section: C API
+
+The PyType_FromSpec*() functions no longer overwrite the type's "__module__"
+attribute if it is set via "Py_tp_members" or "Py_tp_getset".
diff --git a/Misc/NEWS.d/3.9.0b5.rst b/Misc/NEWS.d/3.9.0b5.rst
new file mode 100644
index 0000000..f870d83
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0b5.rst
@@ -0,0 +1,230 @@
+.. bpo: 41304
+.. date: 2020-07-15-20-15-08
+.. nonce: vNEeYA
+.. release date: 2020-07-20
+.. section: Security
+
+Fixes `python3x._pth` being ignored on Windows, caused by the fix for
+:issue:`29778` (CVE-2020-15801).
+
+..
+
+.. bpo: 41162
+.. date: 2020-07-03-20-41-29
+.. nonce: tb8pVj
+.. section: Security
+
+Audit hooks are now cleared later during finalization to avoid missing
+events.
+
+..
+
+.. bpo: 29778
+.. date: 2020-07-03-17-21-37
+.. nonce: cR_fGS
+.. section: Security
+
+Ensure :file:`python3.dll` is loaded from correct locations when Python is
+embedded (CVE-2020-15523).
+
+..
+
+.. bpo: 39603
+.. date: 2020-02-12-14-17-39
+.. nonce: Gt3RSg
+.. section: Security
+
+Prevent http header injection by rejecting control characters in
+http.client.putrequest(...).
+
+..
+
+.. bpo: 41295
+.. date: 2020-07-18-08-15-32
+.. nonce: pu8Ezo
+.. section: Core and Builtins
+
+Resolve a regression in CPython 3.8.4 where defining "__setattr__" in a
+multi-inheritance setup and calling up the hierarchy chain could fail if
+builtins/extension types were involved in the base types.
+
+..
+
+.. bpo: 41247
+.. date: 2020-07-08-22-03-54
+.. nonce: PndYIk
+.. section: Core and Builtins
+
+Always cache the running loop holder when running
+``asyncio.set_running_loop``.
+
+..
+
+.. bpo: 41252
+.. date: 2020-07-08-21-55-23
+.. nonce: nBWL-Y
+.. section: Core and Builtins
+
+Fix incorrect refcounting in _ssl.c's ``_servername_callback()``.
+
+..
+
+.. bpo: 41215
+.. date: 2020-07-06-18-36-33
+.. nonce: vFGFIz
+.. section: Core and Builtins
+
+Use non-NULL default values in the PEG parser keyword list to overcome a bug
+that was preventing Python from being properly compiled when using the XLC
+compiler. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 41218
+.. date: 2020-07-06-13-35-17
+.. nonce: oKnSr2
+.. section: Core and Builtins
+
+Python 3.8.3 had a regression where compiling with
+ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list comprehension
+with CO_COROUTINE. Now only list comprehension making use of async/await
+will tagged as so.
+
+..
+
+.. bpo: 41175
+.. date: 2020-06-30-20-17-31
+.. nonce: acJoXB
+.. section: Core and Builtins
+
+Guard against a NULL pointer dereference within bytearrayobject triggered by
+the ``bytearray() + bytearray()`` operation.
+
+..
+
+.. bpo: 39960
+.. date: 2020-06-23-18-32-41
+.. nonce: Kez3fP
+.. section: Core and Builtins
+
+The "hackcheck" that prevents sneaking around a type's __setattr__() by
+calling the superclass method was rewritten to allow C implemented heap
+types.
+
+..
+
+.. bpo: 41288
+.. date: 2020-07-13-15-06-35
+.. nonce: 8mn5P-
+.. section: Library
+
+Unpickling invalid NEWOBJ_EX opcode with the C implementation raises now
+UnpicklingError instead of crashing.
+
+..
+
+.. bpo: 39017
+.. date: 2020-07-12-22-16-58
+.. nonce: x3Cg-9
+.. section: Library
+
+Avoid infinite loop when reading specially crafted TAR files using the
+tarfile module (CVE-2019-20907).
+
+..
+
+.. bpo: 41235
+.. date: 2020-07-07-21-56-26
+.. nonce: H2csMU
+.. section: Library
+
+Fix the error handling in :meth:`ssl.SSLContext.load_dh_params`.
+
+..
+
+.. bpo: 41207
+.. date: 2020-07-06-16-58-53
+.. nonce: Emw7Nk
+.. section: Library
+
+In distutils.spawn, restore expectation that DistutilsExecError is raised
+when the command is not found.
+
+..
+
+.. bpo: 39168
+.. date: 2020-07-04-21-56-46
+.. nonce: DQWsXj
+.. section: Library
+
+Remove the ``__new__`` method of :class:`typing.Generic`.
+
+..
+
+.. bpo: 41194
+.. date: 2020-07-03-13-15-08
+.. nonce: djrKjs
+.. section: Library
+
+Fix a crash in the ``_ast`` module: it can no longer be loaded more than
+once. It now uses a global state rather than a module state.
+
+..
+
+.. bpo: 39384
+.. date: 2020-05-30-12-44-29
+.. nonce: Iqxy3q
+.. section: Library
+
+Fixed email.contentmanager to allow set_content() to set a null string.
+
+..
+
+.. bpo: 37703
+.. date: 2019-08-16-20-25-42
+.. nonce: Qm_l_H
+.. section: Documentation
+
+Updated Documentation to comprehensively elaborate on the behaviour of
+gather.cancel()
+
+..
+
+.. bpo: 40741
+.. date: 2020-06-19-14-19-08
+.. nonce: L7yTbm
+.. section: macOS
+
+Update macOS installer to use SQLite 3.32.3.
+
+..
+
+.. bpo: 41300
+.. date: 2020-07-16-17-39-06
+.. nonce: wRixNb
+.. section: IDLE
+
+Save files with non-ascii chars. Fix regression released in 3.9.0b4 and
+3.8.4.
+
+..
+
+.. bpo: 37765
+.. date: 2020-07-07-18-44-30
+.. nonce: umc1o8
+.. section: IDLE
+
+Add keywords to module name completion list.  Rewrite Completions section of
+IDLE doc.
+
+..
+
+.. bpo: 40170
+.. date: 2020-07-08-10-14-52
+.. nonce: N6Qx1i
+.. section: C API
+
+Revert :c:func:`PyType_HasFeature` change: it reads again directly the
+:c:member:`PyTypeObject.tp_flags` member when the limited C API is not used,
+rather than always calling :c:func:`PyType_GetFlags` which hides
+implementation details.
diff --git a/Misc/NEWS.d/3.9.0rc1.rst b/Misc/NEWS.d/3.9.0rc1.rst
new file mode 100644
index 0000000..667a6f9
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0rc1.rst
@@ -0,0 +1,187 @@
+.. bpo: 38156
+.. date: 2020-07-20-17-01-17
+.. nonce: ptcdRy
+.. release date: 2020-08-11
+.. section: Core and Builtins
+
+Handle interrupts that come after EOF correctly in ``PyOS_StdioReadline``.
+
+..
+
+.. bpo: 41497
+.. date: 2020-08-07-06-06-29
+.. nonce: aBtsWz
+.. section: Library
+
+Fix potential UnicodeDecodeError in dis module.
+
+..
+
+.. bpo: 41490
+.. date: 2020-08-05-23-16-39
+.. nonce: 6z47A_
+.. section: Library
+
+Update :mod:`ensurepip` to install pip 20.2.1 and setuptools 49.2.1.
+
+..
+
+.. bpo: 41467
+.. date: 2020-08-04-00-20-30
+.. nonce: Z8DgTL
+.. section: Library
+
+On Windows, fix asyncio ``recv_into()`` return value when the socket/pipe is
+closed (:exc:`BrokenPipeError`): return ``0`` rather than an empty byte
+string (``b''``).
+
+..
+
+.. bpo: 41425
+.. date: 2020-08-03-01-59-48
+.. nonce: KJo6zF
+.. section: Library
+
+Make tkinter doc example runnable.
+
+..
+
+.. bpo: 41384
+.. date: 2020-07-26-21-18-43
+.. nonce: MlzIgV
+.. section: Library
+
+Raise TclError instead of TypeError when an unknown option is passed to
+tkinter.OptionMenu.
+
+..
+
+.. bpo: 38731
+.. date: 2020-07-25-23-18-51
+.. nonce: Am4wp2
+.. section: Library
+
+Fix :exc:`NameError` in command-line interface of :mod:`py_compile`.
+
+..
+
+.. bpo: 41317
+.. date: 2020-07-23-01-18-34
+.. nonce: O17Z6x
+.. section: Library
+
+Use add_done_callback() in asyncio.loop.sock_accept() to unsubscribe reader
+early on cancellation.
+
+..
+
+.. bpo: 41364
+.. date: 2020-07-21-21-45-55
+.. nonce: 5O-k7A
+.. section: Library
+
+Reduce import overhead of :mod:`uuid`.
+
+..
+
+.. bpo: 41341
+.. date: 2020-07-20-19-13-17
+.. nonce: wqrj8C
+.. section: Library
+
+Recursive evaluation of `typing.ForwardRef` in `get_type_hints`.
+
+..
+
+.. bpo: 41182
+.. date: 2020-07-01-17-33-50
+.. nonce: FPFI0N
+.. section: Library
+
+selector: use DefaultSelector based upon implementation
+
+..
+
+.. bpo: 40726
+.. date: 2020-05-22-12-45-58
+.. nonce: 7oBdMw
+.. section: Library
+
+Handle cases where the ``end_lineno`` is ``None`` on
+:func:`ast.increment_lineno`.
+
+..
+
+.. bpo: 41045
+.. date: 2020-07-27-20-46-17
+.. nonce: GFF6Ul
+.. section: Documentation
+
+Add documentation for debug feature of f-strings.
+
+..
+
+.. bpo: 41314
+.. date: 2020-07-25-14-20-00
+.. nonce: yrjko0
+.. section: Documentation
+
+Changed the release when ``from __future__ import annotations`` becomes the
+default from ``4.0`` to ``3.10`` (following a change in PEP 563).
+
+..
+
+.. bpo: 41492
+.. date: 2020-08-06-16-59-10
+.. nonce: 2FQ9cM
+.. section: Windows
+
+Fixes the description that appears in UAC prompts.
+
+..
+
+.. bpo: 40948
+.. date: 2020-07-28-12-39-32
+.. nonce: ISUFO6
+.. section: Windows
+
+Improve post-install message to direct people to the "py" command.
+
+..
+
+.. bpo: 41412
+.. date: 2020-07-28-11-55-43
+.. nonce: ME20KB
+.. section: Windows
+
+The installer will now fail to install on Windows 7 and Windows 8. Further,
+the UCRT dependency is now always downloaded on demand.
+
+..
+
+.. bpo: 40741
+.. date: 2020-07-20-23-26-26
+.. nonce: C9sc_d
+.. section: Windows
+
+Update Windows release to include SQLite 3.32.3.
+
+..
+
+.. bpo: 41468
+.. date: 2020-08-09-13-42-55
+.. nonce: zkP0_Y
+.. section: IDLE
+
+Improve IDLE run crash error message (which users should never see).
+
+..
+
+.. bpo: 41373
+.. date: 2020-07-24-17-49-58
+.. nonce: YQIPu_
+.. section: IDLE
+
+Save files loaded with no line ending, as when blank, or different line
+endings, by setting its line ending to the system default. Fix regression in
+3.8.4 and 3.9.0b4.
diff --git a/Misc/NEWS.d/3.9.0rc2.rst b/Misc/NEWS.d/3.9.0rc2.rst
new file mode 100644
index 0000000..3da8441
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0rc2.rst
@@ -0,0 +1,360 @@
+.. bpo: 41780
+.. date: 2020-09-15-23-29-49
+.. nonce: bOBUIH
+.. release date: 2020-09-16
+.. section: Core and Builtins
+
+Fix :meth:`__dir__` of :class:`types.GenericAlias`. Patch by Batuhan
+Taskaya.
+
+..
+
+.. bpo: 41690
+.. date: 2020-09-02-12-00-57
+.. nonce: Ny-Sfy
+.. section: Core and Builtins
+
+Fix a possible stack overflow in the parser when parsing functions and
+classes with a huge ammount of arguments. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 41681
+.. date: 2020-08-31-17-49-02
+.. nonce: 3-VJiH
+.. section: Core and Builtins
+
+Fixes the wrong error description in the error raised by using 2 `,` in
+format string in f-string and :meth:`str.format`.
+
+..
+
+.. bpo: 41654
+.. date: 2020-08-30-20-38-33
+.. nonce: HtnhAM
+.. section: Core and Builtins
+
+Fix a crash that occurred when destroying subclasses of
+:class:`MemoryError`. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 41631
+.. date: 2020-08-26-11-23-31
+.. nonce: 3jZcd9
+.. section: Core and Builtins
+
+The ``_ast`` module uses again a global state. Using a module state per
+module instance is causing subtle practical problems. For example, the
+Mercurial project replaces the ``__import__()`` function to implement lazy
+import, whereas Python expected that ``import _ast`` always return a fully
+initialized ``_ast`` module.
+
+..
+
+.. bpo: 41533
+.. date: 2020-08-12-20-29-57
+.. nonce: 4pcVAc
+.. section: Core and Builtins
+
+Free the stack allocated in ``va_build_stack`` if ``do_mkstack`` fails and
+the stack is not a ``small_stack``.
+
+..
+
+.. bpo: 41531
+.. date: 2020-08-12-19-32-15
+.. nonce: WgPzjT
+.. section: Core and Builtins
+
+Fix a bug that was dropping keys when compiling dict literals with more than
+0xFFFF elements. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 41525
+.. date: 2020-08-12-07-35-07
+.. nonce: d9q3XL
+.. section: Core and Builtins
+
+The output of ``python --help`` contains now only ASCII characters.
+
+..
+
+.. bpo: 29590
+.. date: 2020-05-03-22-26-00
+.. nonce: aRz3l7
+.. section: Core and Builtins
+
+Make the stack trace correct after calling :meth:`generator.throw` on a
+generator that has yielded from a ``yield from``.
+
+..
+
+.. bpo: 41517
+.. date: 2020-09-15-22-43-30
+.. nonce: sLBH7g
+.. section: Library
+
+fix bug allowing Enums to be extended via multiple inheritance
+
+..
+
+.. bpo: 39587
+.. date: 2020-09-15-14-56-13
+.. nonce: 69xzuh
+.. section: Library
+
+use the correct mix-in data type when constructing Enums
+
+..
+
+.. bpo: 41789
+.. date: 2020-09-14-19-27-46
+.. nonce: pI_uZQ
+.. section: Library
+
+Honor `object` overrides in `Enum` class creation (specifically, `__str__`,
+`__repr__`, `__format__`, and `__reduce_ex__`).
+
+..
+
+.. bpo: 39651
+.. date: 2020-09-11-12-38-55
+.. nonce: JMp9l2
+.. section: Library
+
+Fix a race condition in the ``call_soon_threadsafe()`` method of
+``asyncio.ProactorEventLoop``: do nothing if the self-pipe socket has been
+closed.
+
+..
+
+.. bpo: 41720
+.. date: 2020-09-04-20-45-38
+.. nonce: PW9MzZ
+.. section: Library
+
+Fixed :meth:`turtle.Vec2D.__rmul__` for arguments which are not int or
+float.
+
+..
+
+.. bpo: 41696
+.. date: 2020-09-03-01-35-32
+.. nonce: zkYGre
+.. section: Library
+
+Fix handling of debug mode in :func:`asyncio.run`. This allows setting
+``PYTHONASYNCIODEBUG`` or ``-X dev`` to enable asyncio debug mode when using
+:func:`asyncio.run`.
+
+..
+
+.. bpo: 41687
+.. date: 2020-09-01-15-57-51
+.. nonce: m1b1KA
+.. section: Library
+
+Fix implementation of sendfile to be compatible with Solaris.
+
+..
+
+.. bpo: 39010
+.. date: 2020-08-30-10-24-26
+.. nonce: _mzXJW
+.. section: Library
+
+Restarting a ``ProactorEventLoop`` on Windows no longer logs spurious
+``ConnectionResetErrors``.
+
+..
+
+.. bpo: 41609
+.. date: 2020-08-21-15-51-15
+.. nonce: JmiUKG
+.. section: Library
+
+The pdb whatis command correctly reports instance methods as 'Method' rather
+than 'Function'.
+
+..
+
+.. bpo: 32751
+.. date: 2020-08-15-15-50-12
+.. nonce: 85je5X
+.. section: Library
+
+When cancelling the task due to a timeout, :meth:`asyncio.wait_for` will now
+wait until the cancellation is complete also in the case when *timeout* is
+<= 0, like it does with positive timeouts.
+
+..
+
+.. bpo: 37658
+.. date: 2020-08-15-15-21-40
+.. nonce: f9nivB
+.. section: Library
+
+:meth:`asyncio.wait_for` now properly handles races between cancellation of
+itself and the completion of the wrapped awaitable.
+
+..
+
+.. bpo: 40782
+.. date: 2020-08-13-08-07-25
+.. nonce: aGZqmB
+.. section: Library
+
+Change the method asyncio.AbstractEventLoop.run_in_executor to not be a
+coroutine.
+
+..
+
+.. bpo: 41520
+.. date: 2020-08-12-13-25-16
+.. nonce: BEUWa4
+.. section: Library
+
+Fix :mod:`codeop` regression that prevented turning compile warnings into
+errors.
+
+..
+
+.. bpo: 41503
+.. date: 2020-08-07-15-18-16
+.. nonce: IYftcu
+.. section: Library
+
+Fixed a race between setTarget and flush in logging.handlers.MemoryHandler.
+
+..
+
+.. bpo: 41344
+.. date: 2020-07-20-13-27-48
+.. nonce: iKipNd
+.. section: Library
+
+Prevent creating :class:`shared_memory.SharedMemory` objects with
+:code:`size=0`.
+
+..
+
+.. bpo: 41025
+.. date: 2020-06-18-10-34-59
+.. nonce: elf_nz
+.. section: Library
+
+Fixed an issue preventing the C implementation of :class:`zoneinfo.ZoneInfo`
+from being subclassed.
+
+..
+
+.. bpo: 31122
+.. date: 2020-03-11-07-44-06
+.. nonce: zIQ80l
+.. section: Library
+
+ssl.wrap_socket() now raises ssl.SSLEOFError rather than OSError when peer
+closes connection during TLS negotiation
+
+..
+
+.. bpo: 33660
+.. date: 2018-06-12-23-30-41
+.. nonce: AdDn5Z
+.. section: Library
+
+Fix pathlib.PosixPath to resolve a relative path located on the root
+directory properly.
+
+..
+
+.. bpo: 37149
+.. date: 2020-09-10-07-48-02
+.. nonce: VD0rCv
+.. section: Documentation
+
+Change Shipman tkinter doc link from archive.org to TkDocs. (The doc has
+been removed from the NMT server.)  The new link responds much faster and
+includes a short explanatory note.
+
+..
+
+.. bpo: 41624
+.. date: 2020-08-25-15-11-23
+.. nonce: ddjJlN
+.. section: Documentation
+
+Fix the signature of :class:`typing.Coroutine`.
+
+..
+
+.. bpo: 40204
+.. date: 2020-08-12-18-35-40
+.. nonce: C8A_pe
+.. section: Documentation
+
+Enable Sphinx 3.2 ``c_allow_pre_v3`` option and disable
+``c_warn_on_allowed_pre_v3`` option to make the documentation compatible
+with Sphinx 2 and Sphinx 3.
+
+..
+
+.. bpo: 40979
+.. date: 2020-07-21-15-23-30
+.. nonce: pLA8rO
+.. section: Documentation
+
+Refactored typing.rst, arranging more than 70 classes, functions, and
+decorators into new sub-sections.
+
+..
+
+.. bpo: 39883
+.. date: 2020-03-07-03-53-39
+.. nonce: 1tnb4-
+.. section: Documentation
+
+Make code, examples, and recipes in the Python documentation be licensed
+under the more permissive BSD0 license in addition to the existing Python
+2.0 license.
+
+..
+
+.. bpo: 41731
+.. date: 2020-09-11-19-12-31
+.. nonce: Ivxh4U
+.. section: Tests
+
+Make test_cmd_line_script pass with option '-vv'.
+
+..
+
+.. bpo: 41617
+.. date: 2020-08-24-18-34-01
+.. nonce: sKKXz7
+.. section: Build
+
+Fix ``pycore_byteswap.h`` header file to support old clang versions:
+``__builtin_bswap16()`` is not available in LLVM clang 3.0.
+
+..
+
+.. bpo: 41526
+.. date: 2020-08-13-22-40-58
+.. nonce: -i2bwb
+.. section: Windows
+
+Fixed layout of final page of the installer by removing the special thanks
+to Mark Hammond (with his permission).
+
+..
+
+.. bpo: 41524
+.. date: 2020-08-12-17-09-06
+.. nonce: u6Xfr2
+.. section: C API
+
+Fix bug in PyOS_mystrnicmp and PyOS_mystricmp that incremented pointers
+beyond the end of a string.
diff --git a/Misc/NEWS.d/3.9.1.rst b/Misc/NEWS.d/3.9.1.rst
new file mode 100644
index 0000000..3942753
--- /dev/null
+++ b/Misc/NEWS.d/3.9.1.rst
@@ -0,0 +1,150 @@
+.. bpo: 42576
+.. date: 2020-12-05-22-34-47
+.. nonce: lEeEl7
+.. release date: 2020-12-07
+.. section: Core and Builtins
+
+``types.GenericAlias`` will now raise a ``TypeError`` when attempting to
+initialize with a keyword argument.  Previously, this would cause the
+interpreter to crash if the interpreter was compiled with debug symbols.
+This does not affect interpreters compiled for release.  Patch by Ken Jin.
+
+..
+
+.. bpo: 5054
+.. date: 2020-12-04-03-51-12
+.. nonce: 53StYZ
+.. section: Library
+
+CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly parsed. Replace the
+special purpose getallmatchingheaders with generic get_all method and add
+relevant tests.
+
+Original Patch by Martin Panter. Modified by Senthil Kumaran.
+
+..
+
+.. bpo: 17735
+.. date: 2020-12-03-22-22-24
+.. nonce: Qsaaue
+.. section: Library
+
+:func:`inspect.findsource` now raises :exc:`OSError` instead of
+:exc:`IndexError` when :attr:`co_lineno` of a code object is greater than
+the file length. This can happen, for example, when a file is edited after
+it was imported.  PR by Irit Katriel.
+
+..
+
+.. bpo: 42116
+.. date: 2020-12-03-15-42-32
+.. nonce: yIwroP
+.. section: Library
+
+Fix handling of trailing comments by :func:`inspect.getsource`.
+
+..
+
+.. bpo: 42487
+.. date: 2020-11-28-04-31-20
+.. nonce: iqtC4L
+.. section: Library
+
+ChainMap.__iter__ no longer calls __getitem__ on underlying maps
+
+..
+
+.. bpo: 42482
+.. date: 2020-11-27-16-46-58
+.. nonce: EJC3sd
+.. section: Library
+
+:class:`~traceback.TracebackException` no longer holds a reference to the
+exception's traceback object. Consequently, instances of TracebackException
+for equivalent but non-equal exceptions now compare as equal.
+
+..
+
+.. bpo: 42406
+.. date: 2020-11-19-10-44-41
+.. nonce: r9rNCj
+.. section: Library
+
+We fixed an issue in `pickle.whichmodule` in which importing
+`multiprocessing` could change the how pickle identifies which module an
+object belongs to, potentially breaking the unpickling of those objects.
+
+..
+
+.. bpo: 34215
+.. date: 2020-08-19-20-17-51
+.. nonce: _Cv8c-
+.. section: Library
+
+Clarify the error message for :exc:`asyncio.IncompleteReadError` when
+``expected`` is ``None``.
+
+..
+
+.. bpo: 12800
+.. date: 2020-07-09-11-32-28
+.. nonce: fNgWwx
+.. section: Library
+
+Extracting a symlink from a tarball should succeed and overwrite the symlink
+if it already exists. The fix is to remove the existing file or symlink
+before extraction. Based on patch by Chris AtLee, Jeffrey Kintscher, and
+Senthil Kumaran.
+
+..
+
+.. bpo: 41473
+.. date: 2020-12-04-11-47-09
+.. nonce: W_updK
+.. section: Tests
+
+Reenable test_gdb on gdb 9.2 and newer:
+https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb
+10.1.
+
+..
+
+.. bpo: 42553
+.. date: 2020-12-03-13-32-44
+.. nonce: 2TRE2N
+.. section: Tests
+
+Fix ``test_asyncio.test_call_later()`` race condition: don't measure asyncio
+performance in the ``call_later()`` unit test. The test failed randomly on
+the CI.
+
+..
+
+.. bpo: 41116
+.. date: 2020-12-04-23-09-11
+.. nonce: mSbXyV
+.. section: macOS
+
+If no explicit macOS SDK was specified, setup.py should check for Tcl and TK
+frameworks in /Library/Frameworks; the previous commit inadvertently broke
+that test.
+
+..
+
+.. bpo: 42504
+.. date: 2020-12-02-15-48-40
+.. nonce: RQmMOR
+.. section: macOS
+
+Fix build on macOS Big Sur when MACOSX_DEPLOYMENT_TARGET=11
+
+..
+
+.. bpo: 42508
+.. date: 2020-11-30-19-46-05
+.. nonce: fE7w4M
+.. section: IDLE
+
+Keep IDLE running on macOS.  Remove obsolete workaround that prevented
+running files with shortcuts when using new universal2 installers built on
+macOS 11.
diff --git a/Misc/NEWS.d/3.9.1rc1.rst b/Misc/NEWS.d/3.9.1rc1.rst
new file mode 100644
index 0000000..0524f85
--- /dev/null
+++ b/Misc/NEWS.d/3.9.1rc1.rst
@@ -0,0 +1,948 @@
+.. bpo: 42103
+.. date: 2020-10-23-19-19-30
+.. nonce: cILT66
+.. release date: 2020-11-24
+.. section: Security
+
+Prevented potential DoS attack via CPU and RAM exhaustion when processing
+malformed Apple Property List files in binary format.
+
+..
+
+.. bpo: 42051
+.. date: 2020-10-19-10-56-27
+.. nonce: EU_B7u
+.. section: Security
+
+The :mod:`plistlib` module no longer accepts entity declarations in XML
+plist files to avoid XML vulnerabilities. This should not affect users as
+entity declarations are not used in regular plist files.
+
+..
+
+.. bpo: 40791
+.. date: 2020-05-28-06-06-47
+.. nonce: QGZClX
+.. section: Security
+
+Add ``volatile`` to the accumulator variable in ``hmac.compare_digest``,
+making constant-time-defeating optimizations less likely.
+
+..
+
+.. bpo: 41686
+.. date: 2020-11-17-16-25-50
+.. nonce: hX77kL
+.. section: Core and Builtins
+
+On Windows, the ``SIGINT`` event, ``_PyOS_SigintEvent()``, is now created
+even if Python is configured to not install signal handlers (if
+:c:member:`PyConfig.install_signal_handlers` equals to 0, or
+``Py_InitializeEx(0)``).
+
+..
+
+.. bpo: 42381
+.. date: 2020-11-16-23-45-56
+.. nonce: G4AWxL
+.. section: Core and Builtins
+
+Allow assignment expressions in set literals and set comprehensions as per
+PEP 572. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 42374
+.. date: 2020-11-16-17-57-09
+.. nonce: t7np1E
+.. section: Core and Builtins
+
+Fix a regression introduced by the new parser, where an unparenthesized
+walrus operator was not allowed within generator expressions.
+
+..
+
+.. bpo: 42296
+.. date: 2020-11-13-13-53-11
+.. nonce: DuGrLJ
+.. section: Core and Builtins
+
+On Windows, fix a regression in signal handling which prevented to interrupt
+a program using CTRL+C. The signal handler can be run in a thread different
+than the Python thread, in which case the test deciding if the thread can
+handle signals is wrong.
+
+..
+
+.. bpo: 42332
+.. date: 2020-11-12-23-16-14
+.. nonce: fEQIdk
+.. section: Core and Builtins
+
+:class:`types.GenericAlias` objects can now be the targets of weakrefs.
+
+..
+
+.. bpo: 42218
+.. date: 2020-10-31-17-50-23
+.. nonce: Dp_Z3v
+.. section: Core and Builtins
+
+Fixed a bug in the PEG parser that was causing crashes in debug mode. Now
+errors are checked in left-recursive rules to avoid cases where such errors
+do not get handled in time and appear as long-distance crashes in other
+places.
+
+..
+
+.. bpo: 42214
+.. date: 2020-10-30-22-16-30
+.. nonce: lXskM_
+.. section: Core and Builtins
+
+Fixed a possible crash in the PEG parser when checking for the '!=' token in
+the ``barry_as_flufl`` rule. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 42143
+.. date: 2020-10-27-21-34-05
+.. nonce: N6KXUO
+.. section: Core and Builtins
+
+Fix handling of errors during creation of ``PyFunctionObject``, which
+resulted in operations on uninitialized memory. Patch by Yonatan
+Goldschmidt.
+
+..
+
+.. bpo: 41659
+.. date: 2020-10-27-18-32-49
+.. nonce: d4a-8o
+.. section: Core and Builtins
+
+Fix a bug in the parser, where a curly brace following a `primary` didn't
+fail immediately. This led to invalid expressions like `a {b}` to throw a
+:exc:`SyntaxError` with a wrong offset, or invalid expressions ending with a
+curly brace like `a {` to not fail immediately in the REPL.
+
+..
+
+.. bpo: 42150
+.. date: 2020-10-25-21-14-18
+.. nonce: b70u_T
+.. section: Core and Builtins
+
+Fix possible buffer overflow in the new parser when checking for
+continuation lines. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 42123
+.. date: 2020-10-23-02-43-24
+.. nonce: 64gJWC
+.. section: Core and Builtins
+
+Run the parser two times. On the first run, disable all the rules that only
+generate better error messages to gain performance. If there's a parse
+failure, run the parser a second time with those enabled.
+
+..
+
+.. bpo: 41910
+.. date: 2020-10-21-14-40-54
+.. nonce: CzBMit
+.. section: Core and Builtins
+
+Document the default implementation of `object.__eq__`.
+
+..
+
+.. bpo: 42057
+.. date: 2020-10-20-11-36-14
+.. nonce: BI-OoV
+.. section: Core and Builtins
+
+Fix peephole optimizer misoptimize conditional jump + JUMP_IF_NOT_EXC_MATCH
+pair.
+
+..
+
+.. bpo: 41984
+.. date: 2020-10-14-16-19-43
+.. nonce: SEtKMr
+.. section: Core and Builtins
+
+The garbage collector now tracks all user-defined classes. Patch by Brandt
+Bucher.
+
+..
+
+.. bpo: 41993
+.. date: 2020-10-10-13-53-52
+.. nonce: YMzixQ
+.. section: Core and Builtins
+
+Fixed potential issues with removing not completely initialized module from
+``sys.modules`` when import fails.
+
+..
+
+.. bpo: 41979
+.. date: 2020-10-09-10-55-50
+.. nonce: ImXIk2
+.. section: Core and Builtins
+
+Star-unpacking is now allowed for with item's targets in the PEG parser.
+
+..
+
+.. bpo: 41909
+.. date: 2020-10-04-10-55-12
+.. nonce: BqHPcm
+.. section: Core and Builtins
+
+Fixed stack overflow in :func:`issubclass` and :func:`isinstance` when
+getting the ``__bases__`` attribute leads to infinite recursion.
+
+..
+
+.. bpo: 41894
+.. date: 2020-10-02-11-35-33
+.. nonce: ffmtOt
+.. section: Core and Builtins
+
+When loading a native module and a load failure occurs, prevent a possible
+UnicodeDecodeError when not running in a UTF-8 locale by decoding the load
+error message using the current locale's encoding.
+
+..
+
+.. bpo: 39934
+.. date: 2020-09-24-12-15-45
+.. nonce: YVHTCF
+.. section: Core and Builtins
+
+Correctly count control blocks in 'except' in compiler. Ensures that a
+syntax error, rather a fatal error, occurs for deeply nested, named
+exception handlers.
+
+..
+
+.. bpo: 42328
+.. date: 2020-11-15-17-02-00
+.. nonce: bqpPlR
+.. section: Library
+
+Fixed :meth:`tkinter.ttk.Style.map`. The function accepts now the
+representation of the default state as empty sequence (as returned by
+``Style.map()``). The structure of the result is now the same on all
+platform and does not depend on the value of ``wantobjects``.
+
+..
+
+.. bpo: 42345
+.. date: 2020-11-15-15-23-34
+.. nonce: hiIR7x
+.. section: Library
+
+Fix various issues with ``typing.Literal`` parameter handling (flatten,
+deduplicate, use type to cache key). Patch provided by Yurii Karabas.
+
+..
+
+.. bpo: 42350
+.. date: 2020-11-13-18-53-50
+.. nonce: rsql7V
+.. section: Library
+
+Fix the :class:`threading.Thread` class at fork: do nothing if the thread is
+already stopped (ex: fork called at Python exit). Previously, an error was
+logged in the child process.
+
+..
+
+.. bpo: 42014
+.. date: 2020-11-10-15-40-56
+.. nonce: ShM37l
+.. section: Library
+
+The ``onerror`` callback from ``shutil.rmtree`` now receives correct
+function when ``os.open`` fails.
+
+..
+
+.. bpo: 42237
+.. date: 2020-11-10-14-27-49
+.. nonce: F363jO
+.. section: Library
+
+Fix `os.sendfile()` on illumos.
+
+..
+
+.. bpo: 42249
+.. date: 2020-11-03-09-22-56
+.. nonce: vfNO2u
+.. section: Library
+
+Fixed writing binary Plist files larger than 4 GiB.
+
+..
+
+.. bpo: 35455
+.. date: 2020-11-02-14-10-48
+.. nonce: Q1xTIo
+.. section: Library
+
+On Solaris, :func:`~time.thread_time` is now implemented with
+``gethrvtime()`` because ``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` is not
+always available. Patch by Jakub Kulik.
+
+..
+
+.. bpo: 42233
+.. date: 2020-11-02-01-31-15
+.. nonce: YxRj-h
+.. section: Library
+
+The :func:`repr` of :mod:`typing` types containing :ref:`Generic Alias Types
+<types-genericalias>` previously did not show the parameterized types in the
+``GenericAlias``.  They have now been changed to do so.
+
+..
+
+.. bpo: 41754
+.. date: 2020-11-01-15-07-20
+.. nonce: DraSZh
+.. section: Library
+
+webbrowser: Ignore *NotADirectoryError* when calling ``xdg-settings``.
+
+..
+
+.. bpo: 29566
+.. date: 2020-10-31-13-28-36
+.. nonce: 6aDbty
+.. section: Library
+
+``binhex.binhex()`` consisently writes macOS 9 line endings.
+
+..
+
+.. bpo: 42183
+.. date: 2020-10-29-11-17-35
+.. nonce: 50ZcIi
+.. section: Library
+
+Fix a stack overflow error for asyncio Task or Future repr().
+
+The overflow occurs under some circumstances when a Task or Future
+recursively returns itself.
+
+..
+
+.. bpo: 42146
+.. date: 2020-10-25-19-25-02
+.. nonce: 6A8uvS
+.. section: Library
+
+Fix memory leak in :func:`subprocess.Popen` in case an uid (gid) specified
+in `user` (`group`, `extra_groups`) overflows `uid_t` (`gid_t`).
+
+..
+
+.. bpo: 42140
+.. date: 2020-10-24-04-02-36
+.. nonce: miLqvb
+.. section: Library
+
+Improve asyncio.wait function to create the futures set just one time.
+
+..
+
+.. bpo: 42103
+.. date: 2020-10-23-19-20-14
+.. nonce: C5obK2
+.. section: Library
+
+:exc:`~plistlib.InvalidFileException` and :exc:`RecursionError` are now the
+only errors caused by loading malformed binary Plist file (previously
+ValueError and TypeError could be raised in some specific cases).
+
+..
+
+.. bpo: 41052
+.. date: 2020-10-21-23-45-02
+.. nonce: 3N7J2J
+.. section: Library
+
+Pickling heap types implemented in C with protocols 0 and 1 raises now an
+error instead of producing incorrect data.
+
+..
+
+.. bpo: 41491
+.. date: 2020-10-19-14-02-09
+.. nonce: d1BUWH
+.. section: Library
+
+plistlib: fix parsing XML plists with hexadecimal integer values
+
+..
+
+.. bpo: 42065
+.. date: 2020-10-17-23-17-18
+.. nonce: 85BsRA
+.. section: Library
+
+Fix an incorrectly formatted error from :meth:`_codecs.charmap_decode` when
+called with a mapped value outside the range of valid Unicode code points.
+PR by Max Bernstein.
+
+..
+
+.. bpo: 41966
+.. date: 2020-10-17-07-52-53
+.. nonce: gwEQRZ
+.. section: Library
+
+Fix pickling pure Python :class:`datetime.time` subclasses. Patch by Dean
+Inwood.
+
+..
+
+.. bpo: 41976
+.. date: 2020-10-08-18-22-28
+.. nonce: Svm0wb
+.. section: Library
+
+Fixed a bug that was causing :func:`ctypes.util.find_library` to return
+``None`` when triying to locate a library in an environment when gcc>=9 is
+available and ``ldconfig`` is not. Patch by Pablo Galindo
+
+..
+
+.. bpo: 41900
+.. date: 2020-10-01-10-50-12
+.. nonce: Cho7oh
+.. section: Library
+
+C14N 2.0 serialisation in xml.etree.ElementTree failed for unprefixed
+attributes when a default namespace was defined.
+
+..
+
+.. bpo: 41840
+.. date: 2020-09-23-23-17-59
+.. nonce: QRFr4L
+.. section: Library
+
+Fix a bug in the :mod:`symtable` module that was causing module-scope global
+variables to not be reported as both local and global. Patch by Pablo
+Galindo.
+
+..
+
+.. bpo: 41831
+.. date: 2020-09-22-11-07-50
+.. nonce: k-Eop_
+.. section: Library
+
+``str()`` for the ``type`` attribute of the ``tkinter.Event`` object always
+returns now the numeric code returned by Tk instead of the name of the event
+type.
+
+..
+
+.. bpo: 41817
+.. date: 2020-09-22-00-23-30
+.. nonce: bnh-VG
+.. section: Library
+
+fix `tkinter.EventType` Enum so all members are strings, and none are tuples
+
+..
+
+.. bpo: 41815
+.. date: 2020-09-19-23-14-54
+.. nonce: RNpuX3
+.. section: Library
+
+Fix SQLite3 segfault when backing up closed database. Patch contributed by
+Peter David McCormick.
+
+..
+
+.. bpo: 41316
+.. date: 2020-07-28-12-08-58
+.. nonce: bSCbK4
+.. section: Library
+
+Fix the :mod:`tarfile` module to write only basename of TAR file to GZIP
+compression header.
+
+..
+
+.. bpo: 16936
+.. date: 2020-07-08-09-45-00
+.. nonce: z8o8Pn
+.. section: Library
+
+Allow ``ctypes.wintypes`` to be imported on non-Windows systems.
+
+..
+
+.. bpo: 40592
+.. date: 2020-05-14-16-01-34
+.. nonce: Cmk855
+.. section: Library
+
+:func:`shutil.which` now ignores empty entries in :envvar:`PATHEXT` instead
+of treating them as a match.
+
+..
+
+.. bpo: 40550
+.. date: 2020-05-08-21-30-54
+.. nonce: i7GWkb
+.. section: Library
+
+Fix time-of-check/time-of-action issue in subprocess.Popen.send_signal.
+
+..
+
+.. bpo: 40492
+.. date: 2020-05-04-12-16-00
+.. nonce: ONk9Na
+.. section: Library
+
+Fix ``--outfile`` for :mod:`cProfile` / :mod:`profile` not writing the
+output file in the original directory when the program being profiled
+changes the working directory.  PR by Anthony Sottile.
+
+..
+
+.. bpo: 40105
+.. date: 2020-04-03-16-13-59
+.. nonce: hfM2c0
+.. section: Library
+
+ZipFile truncates files to avoid corruption when a shorter comment is
+provided in append ("a") mode. Patch by Jan Mazur.
+
+..
+
+.. bpo: 27321
+.. date: 2020-01-19-18-40-26
+.. nonce: 8e6SpM
+.. section: Library
+
+Fixed KeyError exception when flattening an email to a string attempts to
+replace a non-existent Content-Transfer-Encoding header.
+
+..
+
+.. bpo: 42153
+.. date: 2020-11-15-13-46-31
+.. nonce: KjBhx3
+.. section: Documentation
+
+Fix the URL for the IMAP protocol documents.
+
+..
+
+.. bpo: 42061
+.. date: 2020-10-28-21-39-45
+.. nonce: _x-0sg
+.. section: Documentation
+
+Document __format__ functionality for IP addresses.
+
+..
+
+.. bpo: 42010
+.. date: 2020-10-21-02-21-14
+.. nonce: 76vJ0u
+.. section: Documentation
+
+Clarify that subscription expressions are also valid for certain
+:term:`classes <class>` and :term:`types <type>` in the standard library,
+and for user-defined classes and types if the classmethod
+:meth:`__class_getitem__` is provided.
+
+..
+
+.. bpo: 41805
+.. date: 2020-10-10-01-36-37
+.. nonce: l-CGv5
+.. section: Documentation
+
+Documented :ref:`generic alias type <types-genericalias>` and
+:data:`types.GenericAlias`. Also added an entry in glossary for
+:term:`generic types <generic type>`.
+
+..
+
+.. bpo: 41774
+.. date: 2020-09-24-15-35-13
+.. nonce: 5IqdGP
+.. section: Documentation
+
+In Programming FAQ "Sequences (Tuples/Lists)" section, add "How do you
+remove multiple items from a list".
+
+..
+
+.. bpo: 35293
+.. date: 2020-09-12-17-37-13
+.. nonce: _cOwPD
+.. section: Documentation
+
+Fix RemovedInSphinx40Warning when building the documentation. Patch by
+Dong-hee Na.
+
+..
+
+.. bpo: 41726
+.. date: 2020-09-08-16-57-09
+.. nonce: g0UXrn
+.. section: Documentation
+
+Update the refcounts info of ``PyType_FromModuleAndSpec``.
+
+..
+
+.. bpo: 39693
+.. date: 2020-02-24-09-02-05
+.. nonce: QXw0Fm
+.. section: Documentation
+
+Fix tarfile's extractfile documentation
+
+..
+
+.. bpo: 39416
+.. date: 2020-01-22-05-14-53
+.. nonce: uYjhEm
+.. section: Documentation
+
+Document some restrictions on the default string representations of numeric
+classes.
+
+..
+
+.. bpo: 40754
+.. date: 2020-11-13-21-51-34
+.. nonce: Ekoxkg
+.. section: Tests
+
+Include ``_testinternalcapi`` module in Windows installer for test suite
+
+..
+
+.. bpo: 41739
+.. date: 2020-10-12-00-11-47
+.. nonce: wSCc4K
+.. section: Tests
+
+Fix test_logging.test_race_between_set_target_and_flush(): the test now
+waits until all threads complete to avoid leaking running threads.
+
+..
+
+.. bpo: 41970
+.. date: 2020-10-08-14-00-17
+.. nonce: aZ8QFf
+.. section: Tests
+
+Avoid a test failure in ``test_lib2to3`` if the module has already imported
+at the time the test executes. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 41944
+.. date: 2020-10-05-17-43-46
+.. nonce: rf1dYb
+.. section: Tests
+
+Tests for CJK codecs no longer call ``eval()`` on content received via HTTP.
+
+..
+
+.. bpo: 41939
+.. date: 2020-10-05-09-37-43
+.. nonce: P4OlbA
+.. section: Tests
+
+Fix test_site.test_license_exists_at_url(): call
+``urllib.request.urlcleanup()`` to reset the global
+``urllib.request._opener``. Patch by Victor Stinner.
+
+..
+
+.. bpo: 41561
+.. date: 2020-09-18-16-14-03
+.. nonce: uPnwrW
+.. section: Tests
+
+test_ssl: skip test_min_max_version_mismatch when TLS 1.0 is not available
+
+..
+
+.. bpo: 41602
+.. date: 2020-08-25-19-25-36
+.. nonce: Z64s0I
+.. section: Tests
+
+Add tests for SIGINT handling in the runpy module.
+
+..
+
+.. bpo: 41306
+.. date: 2020-08-03-13-44-37
+.. nonce: VDoWXI
+.. section: Tests
+
+Fixed a failure in ``test_tk.test_widgets.ScaleTest`` happening when
+executing the test with Tk 8.6.10.
+
+..
+
+.. bpo: 42398
+.. date: 2020-11-18-11-58-44
+.. nonce: Yt5wO8
+.. section: Build
+
+Fix a race condition in "make regen-all" when make -jN option is used to run
+jobs in parallel. The clinic.py script now only use atomic write to write
+files. Moveover, generated files are now left unchanged if the content does
+not change, to not change the file modification time.
+
+..
+
+.. bpo: 41617
+.. date: 2020-11-13-15-04-53
+.. nonce: 98_oaE
+.. section: Build
+
+Fix building ``pycore_bitutils.h`` internal header on old clang version
+without ``__builtin_bswap16()`` (ex: Xcode 4.6.3 on Mac OS X 10.7). Patch by
+Joshua Root and Victor Stinner.
+
+..
+
+.. bpo: 38249
+.. date: 2020-09-28-21-56-51
+.. nonce: uzMCaZ
+.. section: Build
+
+Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() if only the
+compiler is able to use it. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 40998
+.. date: 2020-06-17-09-05-02
+.. nonce: sgqmg9
+.. section: Build
+
+Addressed three compiler warnings found by undefined behavior sanitizer
+(ubsan).
+
+..
+
+.. bpo: 42120
+.. date: 2020-11-16-22-41-02
+.. nonce: 9scgko
+.. section: Windows
+
+Remove macro definition of ``copysign`` (to ``_copysign``) in headers.
+
+..
+
+.. bpo: 38439
+.. date: 2020-10-20-13-19-42
+.. nonce: eMLi-t
+.. section: Windows
+
+Updates the icons for IDLE in the Windows Store package.
+
+..
+
+.. bpo: 41744
+.. date: 2020-09-11-17-59-33
+.. nonce: e_ugDQ
+.. section: Windows
+
+Fixes automatic import of props file when using the Nuget package.
+
+..
+
+.. bpo: 41557
+.. date: 2020-08-26-09-35-06
+.. nonce: vt00cQ
+.. section: Windows
+
+Update Windows installer to use SQLite 3.33.0.
+
+..
+
+.. bpo: 38324
+.. date: 2020-05-30-02-46-43
+.. nonce: 476M-5
+.. section: Windows
+
+Avoid Unicode errors when accessing certain locale data on Windows.
+
+..
+
+.. bpo: 41116
+.. date: 2020-11-15-16-43-45
+.. nonce: oCkbrF
+.. section: macOS
+
+Ensure distutils.unixxcompiler.find_library_file can find system provided
+libraries on macOS 11.
+
+..
+
+.. bpo: 41100
+.. date: 2020-11-01-16-40-23
+.. nonce: BApztP
+.. section: macOS
+
+Add support for macOS 11 and Apple Silicon systems.
+
+It is now possible to build "Universal 2" binaries using
+"--enable-universalsdk --with-universal-archs=universal2".
+
+Binaries build on later macOS versions can be deployed back to older
+versions (tested up to macOS 10.9), when using the correct deployment
+target. This is tested using Xcode 11 and later.
+
+..
+
+.. bpo: 38443
+.. date: 2020-10-23-10-26-53
+.. nonce: vu64tl
+.. section: macOS
+
+The ``--enable-universalsdk`` and ``--with-universal-archs`` options for the
+configure script now check that the specified architectures can be used.
+
+..
+
+.. bpo: 41471
+.. date: 2020-10-19-12-25-19
+.. nonce: gwA7un
+.. section: macOS
+
+Ignore invalid prefix lengths in system proxy excludes.
+
+..
+
+.. bpo: 41557
+.. date: 2020-08-26-09-31-37
+.. nonce: mcQ75z
+.. section: macOS
+
+Update macOS installer to use SQLite 3.33.0.
+
+..
+
+.. bpo: 42426
+.. date: 2020-11-21-17-21-21
+.. nonce: kNnPoC
+.. section: IDLE
+
+Fix reporting offset of the RE error in searchengine.
+
+..
+
+.. bpo: 42415
+.. date: 2020-11-20-01-30-27
+.. nonce: CyD-va
+.. section: IDLE
+
+Get docstrings for IDLE calltips more often by using inspect.getdoc.
+
+..
+
+.. bpo: 33987
+.. date: 2020-10-24-21-27-37
+.. nonce: fIh9JL
+.. section: IDLE
+
+Mostly finish using ttk widgets, mainly for editor, settings, and searches.
+Some patches by Mark Roseman.
+
+..
+
+.. bpo: 41775
+.. date: 2020-09-24-14-31-16
+.. nonce: sB8Vre
+.. section: IDLE
+
+Use 'IDLE Shell' as shell title
+
+..
+
+.. bpo: 35764
+.. date: 2020-09-22-11-13-45
+.. nonce: VoNa8y
+.. section: IDLE
+
+Rewrite the Calltips doc section.
+
+..
+
+.. bpo: 40181
+.. date: 2020-09-22-00-45-40
+.. nonce: hhQi3z
+.. section: IDLE
+
+In calltips, stop reminding that '/' marks the end of positional-only
+arguments.
+
+..
+
+.. bpo: 40511
+.. date: 2020-06-16-12-16-13
+.. nonce: XkihpM
+.. section: IDLE
+
+Typing opening and closing parentheses inside the parentheses of a function
+call will no longer cause unnecessary "flashing" off and on of an existing
+open call-tip, e.g. when typed in a string literal.
+
+..
+
+.. bpo: 38439
+.. date: 2020-04-22-09-37-40
+.. nonce: ieXL-c
+.. section: IDLE
+
+Add a 256×256 pixel IDLE icon to the Windows .ico file. Created by Andrew
+Clover. Remove the low-color gif variations from the .ico file.
+
+..
+
+.. bpo: 42015
+.. date: 2020-10-12-20-13-58
+.. nonce: X4H2_V
+.. section: C API
+
+Fix potential crash in deallocating method objects when dynamically
+allocated `PyMethodDef`'s lifetime is managed through the ``self`` argument
+of a `PyCFunction`.
+
+..
+
+.. bpo: 41986
+.. date: 2020-10-09-22-50-46
+.. nonce: JUPE59
+.. section: C API
+
+:c:data:`Py_FileSystemDefaultEncodeErrors` and :c:data:`Py_UTF8Mode` are
+available again in limited API.
diff --git a/Misc/SpecialBuilds.txt b/Misc/SpecialBuilds.txt
index d1a0321..27369ab 100644
--- a/Misc/SpecialBuilds.txt
+++ b/Misc/SpecialBuilds.txt
@@ -46,9 +46,7 @@
 Turn on heavy reference debugging.  This is major surgery.  Every PyObject grows
 two more pointers, to maintain a doubly-linked list of all live heap-allocated
 objects.  Most built-in type objects are not in this list, as they're statically
-allocated.  Starting in Python 2.3, if COUNT_ALLOCS (see below) is also defined,
-a static type object T does appear in this list if at least one object of type T
-has been created.
+allocated.
 
 Note that because the fundamental PyObject layout changes, Python modules
 compiled with Py_TRACE_REFS are incompatible with modules compiled without it.
@@ -165,55 +163,6 @@
 "#ifdef Py_DEBUG" blocks.
 
 
-COUNT_ALLOCS
-------------
-
-Each type object grows three new members:
-
-    /* Number of times an object of this type was allocated. */
-    int tp_allocs;
-
-    /* Number of times an object of this type was deallocated. */
-    int tp_frees;
-
-    /* Highwater mark:  the maximum value of tp_allocs - tp_frees so
-     * far; or, IOW, the largest number of objects of this type alive at
-     * the same time.
-     */
-    int tp_maxalloc;
-
-Allocation and deallocation code keeps these counts up to date.  Py_FinalizeEx()
-displays a summary of the info returned by sys.getcounts() (see below), along
-with assorted other special allocation counts (like the number of tuple
-allocations satisfied by a tuple free-list, the number of 1-character strings
-allocated, etc).
-
-Before Python 2.2, type objects were immortal, and the COUNT_ALLOCS
-implementation relies on that.  As of Python 2.2, heap-allocated type/ class
-objects can go away.  COUNT_ALLOCS can blow up in 2.2 and 2.2.1 because of this;
-this was fixed in 2.2.2.  Use of COUNT_ALLOCS makes all heap-allocated type
-objects immortal, except for those for which no object of that type is ever
-allocated.
-
-Starting with Python 2.3, If Py_TRACE_REFS is also defined, COUNT_ALLOCS
-arranges to ensure that the type object for each allocated object appears in the
-doubly-linked list of all objects maintained by Py_TRACE_REFS.
-
-Special gimmicks:
-
-sys.getcounts()
-    Return a list of 4-tuples, one entry for each type object for which at least
-    one object of that type was allocated.  Each tuple is of the form:
-
-        (tp_name, tp_allocs, tp_frees, tp_maxalloc)
-
-    Each distinct type object gets a distinct entry in this list, even if two or
-    more type objects have the same tp_name (in which case there's no way to
-    distinguish them by looking at this list).  The list is ordered by time of
-    first object allocation: the type object for which the first allocation of
-    an object of that type occurred most recently is at the front of the list.
-
-
 LLTRACE
 -------
 
diff --git a/Misc/python-config.in b/Misc/python-config.in
index 727c4a8..ebd99da 100644
--- a/Misc/python-config.in
+++ b/Misc/python-config.in
@@ -25,8 +25,8 @@
 if not opts:
     exit_with_usage()
 
-pyver = sysconfig.get_config_var('VERSION')
 getvar = sysconfig.get_config_var
+pyver = getvar('VERSION')
 
 opt_flags = [flag for (flag, val) in opts]
 
@@ -35,10 +35,10 @@
 
 for opt in opt_flags:
     if opt == '--prefix':
-        print(sysconfig.get_config_var('prefix'))
+        print(getvar('prefix'))
 
     elif opt == '--exec-prefix':
-        print(sysconfig.get_config_var('exec_prefix'))
+        print(getvar('exec_prefix'))
 
     elif opt in ('--includes', '--cflags'):
         flags = ['-I' + sysconfig.get_path('include'),
@@ -65,10 +65,10 @@
         print(' '.join(libs))
 
     elif opt == '--extension-suffix':
-        print(sysconfig.get_config_var('EXT_SUFFIX'))
+        print(getvar('EXT_SUFFIX'))
 
     elif opt == '--abiflags':
         print(sys.abiflags)
 
     elif opt == '--configdir':
-        print(sysconfig.get_config_var('LIBPL'))
+        print(getvar('LIBPL'))
diff --git a/Misc/python-wing3.wpr b/Misc/python-wing3.wpr
old mode 100644
new mode 100755
diff --git a/Misc/python-wing4.wpr b/Misc/python-wing4.wpr
old mode 100644
new mode 100755
diff --git a/Misc/python-wing5.wpr b/Misc/python-wing5.wpr
old mode 100644
new mode 100755
diff --git a/Misc/python.man b/Misc/python.man
index 3645b02..2253765 100644
--- a/Misc/python.man
+++ b/Misc/python.man
@@ -286,16 +286,12 @@
         traceback of a trace. Use -X tracemalloc=NFRAME to start tracing with a
         traceback limit of NFRAME frames
 
-    -X showalloccount: output the total count of allocated objects for each
-        type when the program finishes. This only works when Python was built with
-        COUNT_ALLOCS defined
-
     -X importtime: show how long each import takes. It shows module name,
         cumulative time (including nested imports) and self time (excluding
         nested imports). Note that its output may be broken in multi-threaded
         application. Typical usage is python3 -X importtime -c 'import asyncio'
 
-    -X dev: enable CPython’s “development mode”, introducing additional runtime
+    -X dev: enable CPython's "development mode", introducing additional runtime
         checks which are too expensive to be enabled by default. It will not be
         more verbose than the default if the code is correct: new warnings are
         only emitted when an issue is detected. Effect of the developer mode:
@@ -417,6 +413,8 @@
 The search path can be manipulated from within a Python program as the
 variable
 .IR sys.path .
+.IP PYTHONPLATLIBDIR
+Override sys.platlibdir.
 .IP PYTHONSTARTUP
 If this is the name of a readable file, the Python commands in that
 file are executed before the first prompt is displayed in interactive
diff --git a/Misc/requirements-test.txt b/Misc/requirements-test.txt
new file mode 100644
index 0000000..6e46c12
--- /dev/null
+++ b/Misc/requirements-test.txt
@@ -0,0 +1 @@
+tzdata==2020.1rc0
diff --git a/Modules/Setup b/Modules/Setup
index 983fa01..02cfb67 100644
--- a/Modules/Setup
+++ b/Modules/Setup
@@ -132,7 +132,10 @@
 #
 # bpo-35053: The module must be builtin since _Py_NewReference()
 # can call _PyTraceMalloc_NewReference().
-_tracemalloc _tracemalloc.c hashtable.c
+_tracemalloc _tracemalloc.c
+
+# PEG-based parser module -- slated to be *the* parser
+_peg_parser _peg_parser.c
 
 # The rest of the modules listed in this file are all commented out by
 # default.  Usually they can be detected and built as dynamically
@@ -167,17 +170,18 @@
 # Modules that should always be present (non UNIX dependent):
 
 #array arraymodule.c	# array objects
-#cmath cmathmodule.c _math.c # -lm # complex math library functions
-#math mathmodule.c _math.c # -lm # math library functions, e.g. sin()
+#cmath cmathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # complex math library functions
+#math mathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # math library functions, e.g. sin()
 #_contextvars _contextvarsmodule.c  # Context Variables
 #_struct _struct.c	# binary structure packing/unpacking
 #_weakref _weakref.c	# basic weak reference support
 #_testcapi _testcapimodule.c    # Python C API test module
 #_testinternalcapi _testinternalcapi.c -I$(srcdir)/Include/internal -DPy_BUILD_CORE_MODULE  # Python internal C API test module
-#_random _randommodule.c	# Random number generator
+#_random _randommodule.c -DPy_BUILD_CORE_MODULE	# Random number generator
 #_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c	# elementtree accelerator
 #_pickle _pickle.c	# pickle accelerator
 #_datetime _datetimemodule.c	# datetime accelerator
+#_zoneinfo _zoneinfo.c	# zoneinfo accelerator
 #_bisect _bisectmodule.c	# Bisection algorithms
 #_heapq _heapqmodule.c	# Heap queue algorithm
 #_asyncio _asynciomodule.c  # Fast asyncio Future
@@ -247,8 +251,8 @@
 # The _sha module implements the SHA checksum algorithms.
 # (NIST's Secure Hash Algorithms.)
 #_sha1 sha1module.c
-#_sha256 sha256module.c
-#_sha512 sha512module.c
+#_sha256 sha256module.c -DPy_BUILD_CORE_BUILTIN
+#_sha512 sha512module.c -DPy_BUILD_CORE_BUILTIN
 #_sha3 _sha3/sha3module.c
 
 # _blake module
diff --git a/Modules/_abc.c b/Modules/_abc.c
index de938dd..709b52f 100644
--- a/Modules/_abc.c
+++ b/Modules/_abc.c
@@ -1,7 +1,6 @@
 /* ABCMeta implementation */
 
 #include "Python.h"
-#include "structmember.h"
 #include "clinic/_abc.c.h"
 
 /*[clinic input]
@@ -20,12 +19,18 @@
 _Py_IDENTIFIER(__subclasscheck__);
 _Py_IDENTIFIER(__subclasshook__);
 
-/* A global counter that is incremented each time a class is
-   registered as a virtual subclass of anything.  It forces the
-   negative cache to be cleared before its next use.
-   Note: this counter is private. Use `abc.get_cache_token()` for
-   external code. */
-static unsigned long long abc_invalidation_counter = 0;
+typedef struct {
+    PyTypeObject *_abc_data_type;
+    unsigned long long abc_invalidation_counter;
+} _abcmodule_state;
+
+static inline _abcmodule_state*
+get_abc_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_abcmodule_state *)state;
+}
 
 /* This object stores internal state for ABCs.
    Note that we can use normal sets for caches,
@@ -38,51 +43,84 @@
     unsigned long long _abc_negative_cache_version;
 } _abc_data;
 
+static int
+abc_data_traverse(_abc_data *self, visitproc visit, void *arg)
+{
+    Py_VISIT(Py_TYPE(self));
+    Py_VISIT(self->_abc_registry);
+    Py_VISIT(self->_abc_cache);
+    Py_VISIT(self->_abc_negative_cache);
+    return 0;
+}
+
+static int
+abc_data_clear(_abc_data *self)
+{
+    Py_CLEAR(self->_abc_registry);
+    Py_CLEAR(self->_abc_cache);
+    Py_CLEAR(self->_abc_negative_cache);
+    return 0;
+}
+
 static void
 abc_data_dealloc(_abc_data *self)
 {
-    Py_XDECREF(self->_abc_registry);
-    Py_XDECREF(self->_abc_cache);
-    Py_XDECREF(self->_abc_negative_cache);
-    Py_TYPE(self)->tp_free(self);
+    PyTypeObject *tp = Py_TYPE(self);
+    (void)abc_data_clear(self);
+    tp->tp_free(self);
+    Py_DECREF(tp);
 }
 
 static PyObject *
 abc_data_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
     _abc_data *self = (_abc_data *) type->tp_alloc(type, 0);
+    _abcmodule_state *state = NULL;
     if (self == NULL) {
         return NULL;
     }
 
+    state = PyType_GetModuleState(type);
+    if (state == NULL) {
+        Py_DECREF(self);
+        return NULL;
+    }
+
     self->_abc_registry = NULL;
     self->_abc_cache = NULL;
     self->_abc_negative_cache = NULL;
-    self->_abc_negative_cache_version = abc_invalidation_counter;
+    self->_abc_negative_cache_version = state->abc_invalidation_counter;
     return (PyObject *) self;
 }
 
 PyDoc_STRVAR(abc_data_doc,
 "Internal state held by ABC machinery.");
 
-static PyTypeObject _abc_data_type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "_abc_data",                        /*tp_name*/
-    sizeof(_abc_data),                  /*tp_basicsize*/
-    .tp_dealloc = (destructor)abc_data_dealloc,
-    .tp_flags = Py_TPFLAGS_DEFAULT,
-    .tp_alloc = PyType_GenericAlloc,
-    .tp_new = abc_data_new,
+static PyType_Slot _abc_data_type_spec_slots[] = {
+    {Py_tp_doc, (void *)abc_data_doc},
+    {Py_tp_new, abc_data_new},
+    {Py_tp_dealloc, abc_data_dealloc},
+    {Py_tp_traverse, abc_data_traverse},
+    {Py_tp_clear, abc_data_clear},
+    {0, 0}
+};
+
+static PyType_Spec _abc_data_type_spec = {
+    .name = "_abc._abc_data",
+    .basicsize = sizeof(_abc_data),
+    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    .slots = _abc_data_type_spec_slots,
 };
 
 static _abc_data *
-_get_impl(PyObject *self)
+_get_impl(PyObject *module, PyObject *self)
 {
+    _abcmodule_state *state = get_abc_state(module);
     PyObject *impl = _PyObject_GetAttrId(self, &PyId__abc_impl);
     if (impl == NULL) {
         return NULL;
     }
-    if (Py_TYPE(impl) != &_abc_data_type) {
+    if (!Py_IS_TYPE(impl, state->_abc_data_type)) {
         PyErr_SetString(PyExc_TypeError, "_abc_impl is set to a wrong type");
         Py_DECREF(impl);
         return NULL;
@@ -179,7 +217,7 @@
 _abc__reset_registry(PyObject *module, PyObject *self)
 /*[clinic end generated code: output=92d591a43566cc10 input=12a0b7eb339ac35c]*/
 {
-    _abc_data *impl = _get_impl(self);
+    _abc_data *impl = _get_impl(module, self);
     if (impl == NULL) {
         return NULL;
     }
@@ -206,7 +244,7 @@
 _abc__reset_caches(PyObject *module, PyObject *self)
 /*[clinic end generated code: output=f296f0d5c513f80c input=c0ac616fd8acfb6f]*/
 {
-    _abc_data *impl = _get_impl(self);
+    _abc_data *impl = _get_impl(module, self);
     if (impl == NULL) {
         return NULL;
     }
@@ -241,7 +279,7 @@
 _abc__get_dump(PyObject *module, PyObject *self)
 /*[clinic end generated code: output=9d9569a8e2c1c443 input=2c5deb1bfe9e3c79]*/
 {
-    _abc_data *impl = _get_impl(self);
+    _abc_data *impl = _get_impl(module, self);
     if (impl == NULL) {
         return NULL;
     }
@@ -391,13 +429,14 @@
 _abc__abc_init(PyObject *module, PyObject *self)
 /*[clinic end generated code: output=594757375714cda1 input=8d7fe470ff77f029]*/
 {
+    _abcmodule_state *state = get_abc_state(module);
     PyObject *data;
     if (compute_abstract_methods(self) < 0) {
         return NULL;
     }
 
     /* Set up inheritance registry. */
-    data = abc_data_new(&_abc_data_type, NULL, NULL);
+    data = abc_data_new(state->_abc_data_type, NULL, NULL);
     if (data == NULL) {
         return NULL;
     }
@@ -446,7 +485,7 @@
     if (result < 0) {
         return NULL;
     }
-    _abc_data *impl = _get_impl(self);
+    _abc_data *impl = _get_impl(module, self);
     if (impl == NULL) {
         return NULL;
     }
@@ -457,7 +496,7 @@
     Py_DECREF(impl);
 
     /* Invalidate negative cache */
-    abc_invalidation_counter++;
+    get_abc_state(module)->abc_invalidation_counter++;
 
     Py_INCREF(subclass);
     return subclass;
@@ -480,7 +519,7 @@
 /*[clinic end generated code: output=b8b5148f63b6b56f input=a4f4525679261084]*/
 {
     PyObject *subtype, *result = NULL, *subclass = NULL;
-    _abc_data *impl = _get_impl(self);
+    _abc_data *impl = _get_impl(module, self);
     if (impl == NULL) {
         return NULL;
     }
@@ -502,7 +541,7 @@
     }
     subtype = (PyObject *)Py_TYPE(instance);
     if (subtype == subclass) {
-        if (impl->_abc_negative_cache_version == abc_invalidation_counter) {
+        if (impl->_abc_negative_cache_version == get_abc_state(module)->abc_invalidation_counter) {
             incache = _in_weak_set(impl->_abc_negative_cache, subclass);
             if (incache < 0) {
                 goto end;
@@ -514,12 +553,12 @@
             }
         }
         /* Fall back to the subclass check. */
-        result = _PyObject_CallMethodIdObjArgs(self, &PyId___subclasscheck__,
-                                               subclass, NULL);
+        result = _PyObject_CallMethodIdOneArg(self, &PyId___subclasscheck__,
+                                              subclass);
         goto end;
     }
-    result = _PyObject_CallMethodIdObjArgs(self, &PyId___subclasscheck__,
-                                           subclass, NULL);
+    result = _PyObject_CallMethodIdOneArg(self, &PyId___subclasscheck__,
+                                          subclass);
     if (result == NULL) {
         goto end;
     }
@@ -531,8 +570,8 @@
         break;
     case 0:
         Py_DECREF(result);
-        result = _PyObject_CallMethodIdObjArgs(self, &PyId___subclasscheck__,
-                                               subtype, NULL);
+        result = _PyObject_CallMethodIdOneArg(self, &PyId___subclasscheck__,
+                                              subtype);
         break;
     case 1:  // Nothing to do.
         break;
@@ -574,9 +613,10 @@
     }
 
     PyObject *ok, *subclasses = NULL, *result = NULL;
+    _abcmodule_state *state = NULL;
     Py_ssize_t pos;
     int incache;
-    _abc_data *impl = _get_impl(self);
+    _abc_data *impl = _get_impl(module, self);
     if (impl == NULL) {
         return NULL;
     }
@@ -591,15 +631,16 @@
         goto end;
     }
 
+    state = get_abc_state(module);
     /* 2. Check negative cache; may have to invalidate. */
-    if (impl->_abc_negative_cache_version < abc_invalidation_counter) {
+    if (impl->_abc_negative_cache_version < state->abc_invalidation_counter) {
         /* Invalidate the negative cache. */
         if (impl->_abc_negative_cache != NULL &&
                 PySet_Clear(impl->_abc_negative_cache) < 0)
         {
             goto end;
         }
-        impl->_abc_negative_cache_version = abc_invalidation_counter;
+        impl->_abc_negative_cache_version = state->abc_invalidation_counter;
     }
     else {
         incache = _in_weak_set(impl->_abc_negative_cache, subclass);
@@ -613,8 +654,8 @@
     }
 
     /* 3. Check the subclass hook. */
-    ok = _PyObject_CallMethodIdObjArgs((PyObject *)self, &PyId___subclasshook__,
-                                       subclass, NULL);
+    ok = _PyObject_CallMethodIdOneArg((PyObject *)self, &PyId___subclasshook__,
+                                      subclass);
     if (ok == NULL) {
         goto end;
     }
@@ -792,10 +833,11 @@
 _abc_get_cache_token_impl(PyObject *module)
 /*[clinic end generated code: output=c7d87841e033dacc input=70413d1c423ad9f9]*/
 {
-    return PyLong_FromUnsignedLongLong(abc_invalidation_counter);
+    _abcmodule_state *state = get_abc_state(module);
+    return PyLong_FromUnsignedLongLong(state->abc_invalidation_counter);
 }
 
-static struct PyMethodDef module_functions[] = {
+static struct PyMethodDef _abcmodule_methods[] = {
     _ABC_GET_CACHE_TOKEN_METHODDEF
     _ABC__ABC_INIT_METHODDEF
     _ABC__RESET_REGISTRY_METHODDEF
@@ -807,26 +849,60 @@
     {NULL,       NULL}          /* sentinel */
 };
 
+static int
+_abcmodule_exec(PyObject *module)
+{
+    _abcmodule_state *state = get_abc_state(module);
+    state->abc_invalidation_counter = 0;
+    state->_abc_data_type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &_abc_data_type_spec, NULL);
+    if (state->_abc_data_type == NULL) {
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+_abcmodule_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    _abcmodule_state *state = get_abc_state(module);
+    Py_VISIT(state->_abc_data_type);
+    return 0;
+}
+
+static int
+_abcmodule_clear(PyObject *module)
+{
+    _abcmodule_state *state = get_abc_state(module);
+    Py_CLEAR(state->_abc_data_type);
+    return 0;
+}
+
+static void
+_abcmodule_free(void *module)
+{
+    _abcmodule_clear((PyObject *)module);
+}
+
+static PyModuleDef_Slot _abcmodule_slots[] = {
+    {Py_mod_exec, _abcmodule_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef _abcmodule = {
     PyModuleDef_HEAD_INIT,
     "_abc",
     _abc__doc__,
-    -1,
-    module_functions,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    sizeof(_abcmodule_state),
+    _abcmodule_methods,
+    _abcmodule_slots,
+    _abcmodule_traverse,
+    _abcmodule_clear,
+    _abcmodule_free,
 };
 
-
 PyMODINIT_FUNC
 PyInit__abc(void)
 {
-    if (PyType_Ready(&_abc_data_type) < 0) {
-        return NULL;
-    }
-    _abc_data_type.tp_doc = abc_data_doc;
-
-    return PyModule_Create(&_abcmodule);
+    return PyModuleDef_Init(&_abcmodule);
 }
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 4ed2af5..b615c48 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -1,5 +1,6 @@
 #include "Python.h"
-#include "structmember.h"
+#include "pycore_pyerrors.h"      // _PyErr_ClearExcState()
+#include <stddef.h>               // offsetof()
 
 
 /*[clinic input]
@@ -12,10 +13,8 @@
 _Py_IDENTIFIER(__asyncio_running_event_loop__);
 _Py_IDENTIFIER(_asyncio_future_blocking);
 _Py_IDENTIFIER(add_done_callback);
-_Py_IDENTIFIER(_all_tasks_compat);
 _Py_IDENTIFIER(call_soon);
 _Py_IDENTIFIER(cancel);
-_Py_IDENTIFIER(current_task);
 _Py_IDENTIFIER(get_event_loop);
 _Py_IDENTIFIER(send);
 _Py_IDENTIFIER(throw);
@@ -67,11 +66,13 @@
     PyObject *prefix##_exception;                                           \
     PyObject *prefix##_result;                                              \
     PyObject *prefix##_source_tb;                                           \
+    PyObject *prefix##_cancel_msg;                                          \
     fut_state prefix##_state;                                               \
     int prefix##_log_tb;                                                    \
     int prefix##_blocking;                                                  \
     PyObject *dict;                                                         \
-    PyObject *prefix##_weakreflist;
+    PyObject *prefix##_weakreflist;                                         \
+    _PyErr_StackItem prefix##_cancelled_exc_state;
 
 typedef struct {
     FutureObj_HEAD(fut)
@@ -112,8 +113,8 @@
 static PyTypeObject PyRunningLoopHolder_Type;
 
 
-#define Future_CheckExact(obj) (Py_TYPE(obj) == &FutureType)
-#define Task_CheckExact(obj) (Py_TYPE(obj) == &TaskType)
+#define Future_CheckExact(obj) Py_IS_TYPE(obj, &FutureType)
+#define Task_CheckExact(obj) Py_IS_TYPE(obj, &TaskType)
 
 #define Future_Check(obj) PyObject_TypeCheck(obj, &FutureType)
 #define Task_Check(obj) PyObject_TypeCheck(obj, &TaskType)
@@ -142,8 +143,7 @@
        Do this check after 'future_init()'; in case we need to raise
        an error, __del__ needs a properly initialized object.
     */
-    PyObject *res = PyObject_CallFunctionObjArgs(
-        asyncio_iscoroutine_func, coro, NULL);
+    PyObject *res = PyObject_CallOneArg(asyncio_iscoroutine_func, coro);
     if (res == NULL) {
         return -1;
     }
@@ -217,7 +217,7 @@
         return NULL;
     }
     if (getloop != NULL) {
-        PyObject *res = _PyObject_CallNoArg(getloop);
+        PyObject *res = PyObject_CallNoArgs(getloop);
         Py_DECREF(getloop);
         return res;
     }
@@ -232,17 +232,19 @@
     PyObject *rl;
 
     PyThreadState *ts = PyThreadState_Get();
-    if (ts->id == cached_running_holder_tsid && cached_running_holder != NULL) {
+    uint64_t ts_id = PyThreadState_GetID(ts);
+    if (ts_id == cached_running_holder_tsid && cached_running_holder != NULL) {
         // Fast path, check the cache.
         rl = cached_running_holder;  // borrowed
     }
     else {
-        if (ts->dict == NULL) {
+        PyObject *ts_dict = _PyThreadState_GetDict(ts);  // borrowed
+        if (ts_dict == NULL) {
             goto not_found;
         }
 
         rl = _PyDict_GetItemIdWithError(
-            ts->dict, &PyId___asyncio_running_event_loop__);  // borrowed
+            ts_dict, &PyId___asyncio_running_event_loop__);  // borrowed
         if (rl == NULL) {
             if (PyErr_Occurred()) {
                 goto error;
@@ -253,10 +255,10 @@
         }
 
         cached_running_holder = rl;  // borrowed
-        cached_running_holder_tsid = ts->id;
+        cached_running_holder_tsid = ts_id;
     }
 
-    assert(Py_TYPE(rl) == &PyRunningLoopHolder_Type);
+    assert(Py_IS_TYPE(rl, &PyRunningLoopHolder_Type));
     PyObject *running_loop = ((PyRunningLoopHolder *)rl)->rl_loop;
 
     if (running_loop == Py_None) {
@@ -289,7 +291,13 @@
 static int
 set_running_loop(PyObject *loop)
 {
-    PyObject *ts_dict = PyThreadState_GetDict();  // borrowed
+    PyObject *ts_dict = NULL;
+
+    PyThreadState *tstate = PyThreadState_Get();
+    if (tstate != NULL) {
+        ts_dict = _PyThreadState_GetDict(tstate);  // borrowed
+    }
+
     if (ts_dict == NULL) {
         PyErr_SetString(
             PyExc_RuntimeError, "thread-local storage is not available");
@@ -310,10 +318,7 @@
     Py_DECREF(rl);
 
     cached_running_holder = (PyObject *)rl;
-
-    /* safe to assume state is not NULL as the call to PyThreadState_GetDict()
-       above already checks if state is NULL */
-    cached_running_holder_tsid = PyThreadState_Get()->id;
+    cached_running_holder_tsid = PyThreadState_GetID(tstate);
 
     return 0;
 }
@@ -332,12 +337,12 @@
         return loop;
     }
 
-    policy = _PyObject_CallNoArg(asyncio_get_event_loop_policy);
+    policy = PyObject_CallNoArgs(asyncio_get_event_loop_policy);
     if (policy == NULL) {
         return NULL;
     }
 
-    loop = _PyObject_CallMethodId(policy, &PyId_get_event_loop, NULL);
+    loop = _PyObject_CallMethodIdNoArgs(policy, &PyId_get_event_loop);
     Py_DECREF(policy);
     return loop;
 }
@@ -371,7 +376,7 @@
         }
         stack[nargs] = (PyObject *)ctx;
 
-        handle = _PyObject_Vectorcall(callable, stack, nargs, context_kwname);
+        handle = PyObject_Vectorcall(callable, stack, nargs, context_kwname);
         Py_DECREF(callable);
     }
 
@@ -482,6 +487,8 @@
     Py_CLEAR(fut->fut_result);
     Py_CLEAR(fut->fut_exception);
     Py_CLEAR(fut->fut_source_tb);
+    Py_CLEAR(fut->fut_cancel_msg);
+    _PyErr_ClearExcState(&fut->fut_cancelled_exc_state);
 
     fut->fut_state = STATE_PENDING;
     fut->fut_log_tb = 0;
@@ -498,7 +505,7 @@
     }
     fut->fut_loop = loop;
 
-    res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, NULL);
+    res = _PyObject_CallMethodIdNoArgs(fut->fut_loop, &PyId_get_debug);
     if (res == NULL) {
         return -1;
     }
@@ -514,7 +521,7 @@
            method, which is called during the interpreter shutdown and the
            traceback module is already unloaded.
         */
-        fut->fut_source_tb = _PyObject_CallNoArg(traceback_extract_stack);
+        fut->fut_source_tb = PyObject_CallNoArgs(traceback_extract_stack);
         if (fut->fut_source_tb == NULL) {
             return -1;
         }
@@ -557,7 +564,7 @@
     }
 
     if (PyExceptionClass_Check(exc)) {
-        exc_val = _PyObject_CallNoArg(exc);
+        exc_val = PyObject_CallNoArgs(exc);
         if (exc_val == NULL) {
             return NULL;
         }
@@ -576,7 +583,7 @@
         PyErr_SetString(PyExc_TypeError, "invalid exception object");
         return NULL;
     }
-    if ((PyObject*)Py_TYPE(exc_val) == PyExc_StopIteration) {
+    if (Py_IS_TYPE(exc_val, (PyTypeObject *)PyExc_StopIteration)) {
         Py_DECREF(exc_val);
         PyErr_SetString(PyExc_TypeError,
                         "StopIteration interacts badly with generators "
@@ -596,11 +603,33 @@
     Py_RETURN_NONE;
 }
 
+static PyObject *
+create_cancelled_error(PyObject *msg)
+{
+    PyObject *exc;
+    if (msg == NULL || msg == Py_None) {
+        exc = PyObject_CallNoArgs(asyncio_CancelledError);
+    } else {
+        exc = PyObject_CallOneArg(asyncio_CancelledError, msg);
+    }
+    return exc;
+}
+
+static void
+future_set_cancelled_error(FutureObj *fut)
+{
+    PyObject *exc = create_cancelled_error(fut->fut_cancel_msg);
+    PyErr_SetObject(asyncio_CancelledError, exc);
+    Py_DECREF(exc);
+
+    _PyErr_ChainStackItem(&fut->fut_cancelled_exc_state);
+}
+
 static int
 future_get_result(FutureObj *fut, PyObject **result)
 {
     if (fut->fut_state == STATE_CANCELLED) {
-        PyErr_SetNone(asyncio_CancelledError);
+        future_set_cancelled_error(fut);
         return -1;
     }
 
@@ -697,7 +726,7 @@
 }
 
 static PyObject *
-future_cancel(FutureObj *fut)
+future_cancel(FutureObj *fut, PyObject *msg)
 {
     fut->fut_log_tb = 0;
 
@@ -706,6 +735,9 @@
     }
     fut->fut_state = STATE_CANCELLED;
 
+    Py_XINCREF(msg);
+    Py_XSETREF(fut->fut_cancel_msg, msg);
+
     if (future_schedule_callbacks(fut) == -1) {
         return NULL;
     }
@@ -751,6 +783,8 @@
     Py_CLEAR(fut->fut_result);
     Py_CLEAR(fut->fut_exception);
     Py_CLEAR(fut->fut_source_tb);
+    Py_CLEAR(fut->fut_cancel_msg);
+    _PyErr_ClearExcState(&fut->fut_cancelled_exc_state);
     Py_CLEAR(fut->dict);
     return 0;
 }
@@ -765,7 +799,14 @@
     Py_VISIT(fut->fut_result);
     Py_VISIT(fut->fut_exception);
     Py_VISIT(fut->fut_source_tb);
+    Py_VISIT(fut->fut_cancel_msg);
     Py_VISIT(fut->dict);
+
+    _PyErr_StackItem *exc_state = &fut->fut_cancelled_exc_state;
+    Py_VISIT(exc_state->exc_type);
+    Py_VISIT(exc_state->exc_value);
+    Py_VISIT(exc_state->exc_traceback);
+
     return 0;
 }
 
@@ -830,7 +871,7 @@
     }
 
     if (self->fut_state == STATE_CANCELLED) {
-        PyErr_SetNone(asyncio_CancelledError);
+        future_set_cancelled_error(self);
         return NULL;
     }
 
@@ -942,7 +983,7 @@
     ENSURE_FUTURE_ALIVE(self)
 
     if (self->fut_callback0 != NULL) {
-        int cmp = PyObject_RichCompareBool(fn, self->fut_callback0, Py_EQ);
+        int cmp = PyObject_RichCompareBool(self->fut_callback0, fn, Py_EQ);
         if (cmp == -1) {
             return NULL;
         }
@@ -967,7 +1008,7 @@
     if (len == 1) {
         PyObject *cb_tup = PyList_GET_ITEM(self->fut_callbacks, 0);
         int cmp = PyObject_RichCompareBool(
-            fn, PyTuple_GET_ITEM(cb_tup, 0), Py_EQ);
+            PyTuple_GET_ITEM(cb_tup, 0), fn, Py_EQ);
         if (cmp == -1) {
             return NULL;
         }
@@ -989,7 +1030,7 @@
         int ret;
         PyObject *item = PyList_GET_ITEM(self->fut_callbacks, i);
         Py_INCREF(item);
-        ret = PyObject_RichCompareBool(fn, PyTuple_GET_ITEM(item, 0), Py_EQ);
+        ret = PyObject_RichCompareBool(PyTuple_GET_ITEM(item, 0), fn, Py_EQ);
         if (ret == 0) {
             if (j < len) {
                 PyList_SET_ITEM(newlist, j, item);
@@ -1011,7 +1052,7 @@
     }
 
     if (j < len) {
-        Py_SIZE(newlist) = j;
+        Py_SET_SIZE(newlist, j);
     }
     j = PyList_GET_SIZE(newlist);
     len = PyList_GET_SIZE(self->fut_callbacks);
@@ -1031,6 +1072,8 @@
 /*[clinic input]
 _asyncio.Future.cancel
 
+    msg: object = None
+
 Cancel the future and schedule callbacks.
 
 If the future is already done or cancelled, return False.  Otherwise,
@@ -1039,11 +1082,11 @@
 [clinic start generated code]*/
 
 static PyObject *
-_asyncio_Future_cancel_impl(FutureObj *self)
-/*[clinic end generated code: output=e45b932ba8bd68a1 input=515709a127995109]*/
+_asyncio_Future_cancel_impl(FutureObj *self, PyObject *msg)
+/*[clinic end generated code: output=3edebbc668e5aba3 input=925eb545251f2c5a]*/
 {
     ENSURE_FUTURE_ALIVE(self)
-    return future_cancel(self);
+    return future_cancel(self, msg);
 }
 
 /*[clinic input]
@@ -1257,6 +1300,29 @@
 }
 
 static PyObject *
+FutureObj_get_cancel_message(FutureObj *fut, void *Py_UNUSED(ignored))
+{
+    if (fut->fut_cancel_msg == NULL) {
+        Py_RETURN_NONE;
+    }
+    Py_INCREF(fut->fut_cancel_msg);
+    return fut->fut_cancel_msg;
+}
+
+static int
+FutureObj_set_cancel_message(FutureObj *fut, PyObject *msg,
+                             void *Py_UNUSED(ignored))
+{
+    if (msg == NULL) {
+        PyErr_SetString(PyExc_AttributeError, "cannot delete attribute");
+        return -1;
+    }
+    Py_INCREF(msg);
+    Py_XSETREF(fut->fut_cancel_msg, msg);
+    return 0;
+}
+
+static PyObject *
 FutureObj_get_state(FutureObj *fut, void *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(PENDING);
@@ -1284,6 +1350,29 @@
 }
 
 /*[clinic input]
+_asyncio.Future._make_cancelled_error
+
+Create the CancelledError to raise if the Future is cancelled.
+
+This should only be called once when handling a cancellation since
+it erases the context exception value.
+[clinic start generated code]*/
+
+static PyObject *
+_asyncio_Future__make_cancelled_error_impl(FutureObj *self)
+/*[clinic end generated code: output=a5df276f6c1213de input=ac6effe4ba795ecc]*/
+{
+    PyObject *exc = create_cancelled_error(self->fut_cancel_msg);
+    _PyErr_StackItem *exc_state = &self->fut_cancelled_exc_state;
+    /* Transfer ownership of exc_value from exc_state to exc since we are
+       done with it. */
+    PyException_SetContext(exc, exc_state->exc_value);
+    exc_state->exc_value = NULL;
+
+    return exc;
+}
+
+/*[clinic input]
 _asyncio.Future._repr_info
 [clinic start generated code]*/
 
@@ -1291,8 +1380,7 @@
 _asyncio_Future__repr_info_impl(FutureObj *self)
 /*[clinic end generated code: output=fa69e901bd176cfb input=f21504d8e2ae1ca2]*/
 {
-    return PyObject_CallFunctionObjArgs(
-        asyncio_future_repr_info_func, self, NULL);
+    return PyObject_CallOneArg(asyncio_future_repr_info_func, (PyObject *)self);
 }
 
 static PyObject *
@@ -1302,9 +1390,8 @@
 
     ENSURE_FUTURE_ALIVE(fut)
 
-    PyObject *rinfo = _PyObject_CallMethodIdObjArgs((PyObject*)fut,
-                                                    &PyId__repr_info,
-                                                    NULL);
+    PyObject *rinfo = _PyObject_CallMethodIdNoArgs((PyObject*)fut,
+                                                   &PyId__repr_info);
     if (rinfo == NULL) {
         return NULL;
     }
@@ -1369,7 +1456,7 @@
 
     func = _PyObject_GetAttrId(fut->fut_loop, &PyId_call_exception_handler);
     if (func != NULL) {
-        PyObject *res = PyObject_CallFunctionObjArgs(func, context, NULL);
+        PyObject *res = PyObject_CallOneArg(func, context);
         if (res == NULL) {
             PyErr_WriteUnraisable(func);
         }
@@ -1387,6 +1474,12 @@
     PyErr_Restore(error_type, error_value, error_traceback);
 }
 
+static PyObject *
+future_cls_getitem(PyObject *cls, PyObject *type)
+{
+    Py_INCREF(cls);
+    return cls;
+}
 
 static PyAsyncMethods FutureType_as_async = {
     (unaryfunc)future_new_iter,         /* am_await */
@@ -1405,7 +1498,9 @@
     _ASYNCIO_FUTURE_CANCELLED_METHODDEF
     _ASYNCIO_FUTURE_DONE_METHODDEF
     _ASYNCIO_FUTURE_GET_LOOP_METHODDEF
+    _ASYNCIO_FUTURE__MAKE_CANCELLED_ERROR_METHODDEF
     _ASYNCIO_FUTURE__REPR_INFO_METHODDEF
+    {"__class_getitem__", future_cls_getitem, METH_O|METH_CLASS, NULL},
     {NULL, NULL}        /* Sentinel */
 };
 
@@ -1419,7 +1514,10 @@
     {"_exception", (getter)FutureObj_get_exception, NULL, NULL},              \
     {"_log_traceback", (getter)FutureObj_get_log_traceback,                   \
                        (setter)FutureObj_set_log_traceback, NULL},            \
-    {"_source_traceback", (getter)FutureObj_get_source_traceback, NULL, NULL},
+    {"_source_traceback", (getter)FutureObj_get_source_traceback,             \
+                          NULL, NULL},                                        \
+    {"_cancel_message", (getter)FutureObj_get_cancel_message,                 \
+                        (setter)FutureObj_set_cancel_message, NULL},
 
 static PyGetSetDef FutureType_getsetlist[] = {
     FUTURE_COMMON_GETSETLIST
@@ -1866,8 +1964,8 @@
 {
     _Py_IDENTIFIER(add);
 
-    PyObject *res = _PyObject_CallMethodIdObjArgs(
-        all_tasks, &PyId_add, task, NULL);
+    PyObject *res = _PyObject_CallMethodIdOneArg(all_tasks,
+                                                 &PyId_add, task);
     if (res == NULL) {
         return -1;
     }
@@ -1881,8 +1979,8 @@
 {
     _Py_IDENTIFIER(discard);
 
-    PyObject *res = _PyObject_CallMethodIdObjArgs(
-        all_tasks, &PyId_discard, task, NULL);
+    PyObject *res = _PyObject_CallMethodIdOneArg(all_tasks,
+                                                 &PyId_discard, task);
     if (res == NULL) {
         return -1;
     }
@@ -2088,89 +2186,22 @@
 }
 
 /*[clinic input]
-@classmethod
-_asyncio.Task.current_task
+_asyncio.Task._make_cancelled_error
 
-    loop: object = None
+Create the CancelledError to raise if the Task is cancelled.
 
-Return the currently running task in an event loop or None.
-
-By default the current task for the current event loop is returned.
-
-None is returned when called not in the context of a Task.
+This should only be called once when handling a cancellation since
+it erases the context exception value.
 [clinic start generated code]*/
 
 static PyObject *
-_asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop)
-/*[clinic end generated code: output=99fbe7332c516e03 input=cd14770c5b79c7eb]*/
+_asyncio_Task__make_cancelled_error_impl(TaskObj *self)
+/*[clinic end generated code: output=55a819e8b4276fab input=52c0e32de8e2f840]*/
 {
-    PyObject *ret;
-    PyObject *current_task_func;
-
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "Task.current_task() is deprecated, " \
-                     "use asyncio.current_task() instead",
-                     1) < 0) {
-        return NULL;
-    }
-
-    current_task_func = _PyObject_GetAttrId(asyncio_mod, &PyId_current_task);
-    if (current_task_func == NULL) {
-        return NULL;
-    }
-
-    if (loop == Py_None) {
-        loop = get_event_loop();
-        if (loop == NULL) {
-            Py_DECREF(current_task_func);
-            return NULL;
-        }
-        ret = PyObject_CallFunctionObjArgs(current_task_func, loop, NULL);
-        Py_DECREF(current_task_func);
-        Py_DECREF(loop);
-        return ret;
-    }
-    else {
-        ret = PyObject_CallFunctionObjArgs(current_task_func, loop, NULL);
-        Py_DECREF(current_task_func);
-        return ret;
-    }
+    FutureObj *fut = (FutureObj*)self;
+    return _asyncio_Future__make_cancelled_error_impl(fut);
 }
 
-/*[clinic input]
-@classmethod
-_asyncio.Task.all_tasks
-
-    loop: object = None
-
-Return a set of all tasks for an event loop.
-
-By default all tasks for the current event loop are returned.
-[clinic start generated code]*/
-
-static PyObject *
-_asyncio_Task_all_tasks_impl(PyTypeObject *type, PyObject *loop)
-/*[clinic end generated code: output=11f9b20749ccca5d input=497f80bc9ce726b5]*/
-{
-    PyObject *res;
-    PyObject *all_tasks_func;
-
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "Task.all_tasks() is deprecated, " \
-                     "use asyncio.all_tasks() instead",
-                     1) < 0) {
-        return NULL;
-    }
-
-    all_tasks_func = _PyObject_GetAttrId(asyncio_mod, &PyId__all_tasks_compat);
-    if (all_tasks_func == NULL) {
-        return NULL;
-    }
-
-    res = PyObject_CallFunctionObjArgs(all_tasks_func, loop, NULL);
-    Py_DECREF(all_tasks_func);
-    return res;
-}
 
 /*[clinic input]
 _asyncio.Task._repr_info
@@ -2180,13 +2211,14 @@
 _asyncio_Task__repr_info_impl(TaskObj *self)
 /*[clinic end generated code: output=6a490eb66d5ba34b input=3c6d051ed3ddec8b]*/
 {
-    return PyObject_CallFunctionObjArgs(
-        asyncio_task_repr_info_func, self, NULL);
+    return PyObject_CallOneArg(asyncio_task_repr_info_func, (PyObject *)self);
 }
 
 /*[clinic input]
 _asyncio.Task.cancel
 
+    msg: object = None
+
 Request that this task cancel itself.
 
 This arranges for a CancelledError to be thrown into the
@@ -2208,8 +2240,8 @@
 [clinic start generated code]*/
 
 static PyObject *
-_asyncio_Task_cancel_impl(TaskObj *self)
-/*[clinic end generated code: output=6bfc0479da9d5757 input=13f9bf496695cb52]*/
+_asyncio_Task_cancel_impl(TaskObj *self, PyObject *msg)
+/*[clinic end generated code: output=c66b60d41c74f9f1 input=f4ff8e8ffc5f1c00]*/
 {
     self->task_log_tb = 0;
 
@@ -2221,8 +2253,8 @@
         PyObject *res;
         int is_true;
 
-        res = _PyObject_CallMethodId(
-            self->task_fut_waiter, &PyId_cancel, NULL);
+        res = _PyObject_CallMethodIdOneArg(self->task_fut_waiter,
+                                           &PyId_cancel, msg);
         if (res == NULL) {
             return NULL;
         }
@@ -2239,6 +2271,8 @@
     }
 
     self->task_must_cancel = 1;
+    Py_XINCREF(msg);
+    Py_XSETREF(self->task_cancel_msg, msg);
     Py_RETURN_TRUE;
 }
 
@@ -2432,7 +2466,7 @@
 
     func = _PyObject_GetAttrId(task->task_loop, &PyId_call_exception_handler);
     if (func != NULL) {
-        PyObject *res = PyObject_CallFunctionObjArgs(func, context, NULL);
+        PyObject *res = PyObject_CallOneArg(func, context);
         if (res == NULL) {
             PyErr_WriteUnraisable(func);
         }
@@ -2453,6 +2487,13 @@
     FutureObj_finalize((FutureObj*)task);
 }
 
+static PyObject *
+task_cls_getitem(PyObject *cls, PyObject *type)
+{
+    Py_INCREF(cls);
+    return cls;
+}
+
 static void TaskObj_dealloc(PyObject *);  /* Needs Task_CheckExact */
 
 static PyMethodDef TaskType_methods[] = {
@@ -2464,15 +2505,15 @@
     _ASYNCIO_FUTURE_DONE_METHODDEF
     _ASYNCIO_TASK_SET_RESULT_METHODDEF
     _ASYNCIO_TASK_SET_EXCEPTION_METHODDEF
-    _ASYNCIO_TASK_CURRENT_TASK_METHODDEF
-    _ASYNCIO_TASK_ALL_TASKS_METHODDEF
     _ASYNCIO_TASK_CANCEL_METHODDEF
     _ASYNCIO_TASK_GET_STACK_METHODDEF
     _ASYNCIO_TASK_PRINT_STACK_METHODDEF
+    _ASYNCIO_TASK__MAKE_CANCELLED_ERROR_METHODDEF
     _ASYNCIO_TASK__REPR_INFO_METHODDEF
     _ASYNCIO_TASK_GET_NAME_METHODDEF
     _ASYNCIO_TASK_SET_NAME_METHODDEF
     _ASYNCIO_TASK_GET_CORO_METHODDEF
+    {"__class_getitem__", task_cls_getitem, METH_O|METH_CLASS, NULL},
     {NULL, NULL}        /* Sentinel */
 };
 
@@ -2564,7 +2605,7 @@
         return NULL;
     }
 
-    PyObject *e = PyObject_CallFunctionObjArgs(et, msg, NULL);
+    PyObject *e = PyObject_CallOneArg(et, msg);
     Py_DECREF(msg);
     if (e == NULL) {
         return NULL;
@@ -2614,7 +2655,8 @@
 
         if (!exc) {
             /* exc was not a CancelledError */
-            exc = _PyObject_CallNoArg(asyncio_CancelledError);
+            exc = create_cancelled_error(task->task_cancel_msg);
+
             if (!exc) {
                 goto fail;
             }
@@ -2641,13 +2683,11 @@
             result = _PyGen_Send((PyGenObject*)coro, Py_None);
         }
         else {
-            result = _PyObject_CallMethodIdObjArgs(coro, &PyId_send,
-                                                   Py_None, NULL);
+            result = _PyObject_CallMethodIdOneArg(coro, &PyId_send, Py_None);
         }
     }
     else {
-        result = _PyObject_CallMethodIdObjArgs(coro, &PyId_throw,
-                                               exc, NULL);
+        result = _PyObject_CallMethodIdOneArg(coro, &PyId_throw, exc);
         if (clear_exc) {
             /* We created 'exc' during this call */
             Py_DECREF(exc);
@@ -2665,7 +2705,7 @@
             if (task->task_must_cancel) {
                 // Task is cancelled right before coro stops.
                 task->task_must_cancel = 0;
-                res = future_cancel((FutureObj*)task);
+                res = future_cancel((FutureObj*)task, task->task_cancel_msg);
             }
             else {
                 res = future_set_result((FutureObj*)task, o);
@@ -2682,8 +2722,15 @@
 
         if (PyErr_ExceptionMatches(asyncio_CancelledError)) {
             /* CancelledError */
-            PyErr_Clear();
-            return future_cancel((FutureObj*)task);
+            PyErr_Fetch(&et, &ev, &tb);
+
+            FutureObj *fut = (FutureObj*)task;
+            _PyErr_StackItem *exc_state = &fut->fut_cancelled_exc_state;
+            exc_state->exc_type = et;
+            exc_state->exc_value = ev;
+            exc_state->exc_traceback = tb;
+
+            return future_cancel(fut, NULL);
         }
 
         /* Some other exception; pop it and call Task.set_exception() */
@@ -2763,7 +2810,8 @@
         if (task->task_must_cancel) {
             PyObject *r;
             int is_true;
-            r = _PyObject_CallMethodId(result, &PyId_cancel, NULL);
+            r = _PyObject_CallMethodIdOneArg(result, &PyId_cancel,
+                                             task->task_cancel_msg);
             if (r == NULL) {
                 return NULL;
             }
@@ -2840,7 +2888,7 @@
         PyObject *stack[2];
         stack[0] = wrapper;
         stack[1] = (PyObject *)task->task_context;
-        res = _PyObject_Vectorcall(add_cb, stack, 1, context_kwname);
+        res = PyObject_Vectorcall(add_cb, stack, 1, context_kwname);
         Py_DECREF(add_cb);
         Py_DECREF(wrapper);
         if (res == NULL) {
@@ -2854,7 +2902,8 @@
         if (task->task_must_cancel) {
             PyObject *r;
             int is_true;
-            r = _PyObject_CallMethodId(result, &PyId_cancel, NULL);
+            r = _PyObject_CallMethodIdOneArg(result, &PyId_cancel,
+                                             task->task_cancel_msg);
             if (r == NULL) {
                 return NULL;
             }
@@ -3341,7 +3390,7 @@
     PyObject *weak_set;
     WITH_MOD("weakref")
     GET_MOD_ATTR(weak_set, "WeakSet");
-    all_tasks = _PyObject_CallNoArg(weak_set);
+    all_tasks = PyObject_CallNoArgs(weak_set);
     Py_CLEAR(weak_set);
     if (all_tasks == NULL) {
         goto fail;
@@ -3392,9 +3441,6 @@
     if (module_init() < 0) {
         return NULL;
     }
-    if (PyType_Ready(&FutureType) < 0) {
-        return NULL;
-    }
     if (PyType_Ready(&FutureIterType) < 0) {
         return NULL;
     }
@@ -3404,9 +3450,6 @@
     if (PyType_Ready(&TaskWakeupMethWrapper_Type) < 0) {
         return NULL;
     }
-    if (PyType_Ready(&TaskType) < 0) {
-        return NULL;
-    }
     if (PyType_Ready(&PyRunningLoopHolder_Type) < 0) {
         return NULL;
     }
@@ -3416,16 +3459,13 @@
         return NULL;
     }
 
-    Py_INCREF(&FutureType);
-    if (PyModule_AddObject(m, "Future", (PyObject *)&FutureType) < 0) {
-        Py_DECREF(&FutureType);
+    /* FutureType and TaskType are made ready by PyModule_AddType() calls below. */
+    if (PyModule_AddType(m, &FutureType) < 0) {
         Py_DECREF(m);
         return NULL;
     }
 
-    Py_INCREF(&TaskType);
-    if (PyModule_AddObject(m, "Task", (PyObject *)&TaskType) < 0) {
-        Py_DECREF(&TaskType);
+    if (PyModule_AddType(m, &TaskType) < 0) {
         Py_DECREF(m);
         return NULL;
     }
diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c
index 461a11f..82d800d 100644
--- a/Modules/_bisectmodule.c
+++ b/Modules/_bisectmodule.c
@@ -6,6 +6,13 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 
+/*[clinic input]
+module _bisect
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=4d56a2b2033b462b]*/
+
+#include "clinic/_bisectmodule.c.h"
+
 _Py_IDENTIFIER(insert);
 
 static inline Py_ssize_t
@@ -44,69 +51,63 @@
     return lo;
 }
 
-static PyObject *
-bisect_right(PyObject *self, PyObject *args, PyObject *kw)
-{
-    PyObject *list, *item;
-    Py_ssize_t lo = 0;
-    Py_ssize_t hi = -1;
-    Py_ssize_t index;
-    static char *keywords[] = {"a", "x", "lo", "hi", NULL};
+/*[clinic input]
+_bisect.bisect_right -> Py_ssize_t
 
-    if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
-        list = PyTuple_GET_ITEM(args, 0);
-        item = PyTuple_GET_ITEM(args, 1);
-    }
-    else {
-        if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:bisect_right",
-                                         keywords, &list, &item, &lo, &hi))
-            return NULL;
-    }
-    index = internal_bisect_right(list, item, lo, hi);
-    if (index < 0)
-        return NULL;
-    return PyLong_FromSsize_t(index);
+    a: object
+    x: object
+    lo: Py_ssize_t = 0
+    hi: Py_ssize_t(c_default='-1', accept={int, NoneType}) = None
+
+Return the index where to insert item x in list a, assuming a is sorted.
+
+The return value i is such that all e in a[:i] have e <= x, and all e in
+a[i:] have e > x.  So if x already appears in the list, i points just
+beyond the rightmost x already there
+
+Optional args lo (default 0) and hi (default len(a)) bound the
+slice of a to be searched.
+[clinic start generated code]*/
+
+static Py_ssize_t
+_bisect_bisect_right_impl(PyObject *module, PyObject *a, PyObject *x,
+                          Py_ssize_t lo, Py_ssize_t hi)
+/*[clinic end generated code: output=419e150cf1d2a235 input=e72212b282c83375]*/
+{
+    return internal_bisect_right(a, x, lo, hi);
 }
 
-PyDoc_STRVAR(bisect_right_doc,
-"bisect_right(a, x[, lo[, hi]]) -> index\n\
-\n\
-Return the index where to insert item x in list a, assuming a is sorted.\n\
-\n\
-The return value i is such that all e in a[:i] have e <= x, and all e in\n\
-a[i:] have e > x.  So if x already appears in the list, i points just\n\
-beyond the rightmost x already there\n\
-\n\
-Optional args lo (default 0) and hi (default len(a)) bound the\n\
-slice of a to be searched.\n");
+/*[clinic input]
+_bisect.insort_right
+
+    a: object
+    x: object
+    lo: Py_ssize_t = 0
+    hi: Py_ssize_t(c_default='-1', accept={int, NoneType}) = None
+
+Insert item x in list a, and keep it sorted assuming a is sorted.
+
+If x is already in a, insert it to the right of the rightmost x.
+
+Optional args lo (default 0) and hi (default len(a)) bound the
+slice of a to be searched.
+[clinic start generated code]*/
 
 static PyObject *
-insort_right(PyObject *self, PyObject *args, PyObject *kw)
+_bisect_insort_right_impl(PyObject *module, PyObject *a, PyObject *x,
+                          Py_ssize_t lo, Py_ssize_t hi)
+/*[clinic end generated code: output=c2caa3d4cd02035a input=d1c45bfa68182669]*/
 {
-    PyObject *list, *item, *result;
-    Py_ssize_t lo = 0;
-    Py_ssize_t hi = -1;
-    Py_ssize_t index;
-    static char *keywords[] = {"a", "x", "lo", "hi", NULL};
-
-    if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
-        list = PyTuple_GET_ITEM(args, 0);
-        item = PyTuple_GET_ITEM(args, 1);
-    }
-    else {
-        if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:insort_right",
-                                         keywords, &list, &item, &lo, &hi))
-            return NULL;
-    }
-    index = internal_bisect_right(list, item, lo, hi);
+    PyObject *result;
+    Py_ssize_t index = internal_bisect_right(a, x, lo, hi);
     if (index < 0)
         return NULL;
-    if (PyList_CheckExact(list)) {
-        if (PyList_Insert(list, index, item) < 0)
+    if (PyList_CheckExact(a)) {
+        if (PyList_Insert(a, index, x) < 0)
             return NULL;
     }
     else {
-        result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
+        result = _PyObject_CallMethodId(a, &PyId_insert, "nO", index, x);
         if (result == NULL)
             return NULL;
         Py_DECREF(result);
@@ -115,16 +116,6 @@
     Py_RETURN_NONE;
 }
 
-PyDoc_STRVAR(insort_right_doc,
-"insort_right(a, x[, lo[, hi]])\n\
-\n\
-Insert item x in list a, and keep it sorted assuming a is sorted.\n\
-\n\
-If x is already in a, insert it to the right of the rightmost x.\n\
-\n\
-Optional args lo (default 0) and hi (default len(a)) bound the\n\
-slice of a to be searched.\n");
-
 static inline Py_ssize_t
 internal_bisect_left(PyObject *list, PyObject *item, Py_ssize_t lo, Py_ssize_t hi)
 {
@@ -161,67 +152,64 @@
     return lo;
 }
 
-static PyObject *
-bisect_left(PyObject *self, PyObject *args, PyObject *kw)
-{
-    PyObject *list, *item;
-    Py_ssize_t lo = 0;
-    Py_ssize_t hi = -1;
-    Py_ssize_t index;
-    static char *keywords[] = {"a", "x", "lo", "hi", NULL};
 
-    if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
-        list = PyTuple_GET_ITEM(args, 0);
-        item = PyTuple_GET_ITEM(args, 1);
-    }
-    else {
-        if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:bisect_left",
-                                         keywords, &list, &item, &lo, &hi))
-            return NULL;
-    }
-    index = internal_bisect_left(list, item, lo, hi);
-    if (index < 0)
-        return NULL;
-    return PyLong_FromSsize_t(index);
+/*[clinic input]
+_bisect.bisect_left -> Py_ssize_t
+
+    a: object
+    x: object
+    lo: Py_ssize_t = 0
+    hi: Py_ssize_t(c_default='-1', accept={int, NoneType}) = None
+
+Return the index where to insert item x in list a, assuming a is sorted.
+
+The return value i is such that all e in a[:i] have e < x, and all e in
+a[i:] have e >= x.  So if x already appears in the list, i points just
+before the leftmost x already there.
+
+Optional args lo (default 0) and hi (default len(a)) bound the
+slice of a to be searched.
+[clinic start generated code]*/
+
+static Py_ssize_t
+_bisect_bisect_left_impl(PyObject *module, PyObject *a, PyObject *x,
+                         Py_ssize_t lo, Py_ssize_t hi)
+/*[clinic end generated code: output=af82168bc2856f24 input=2bd90f34afe5609f]*/
+{
+    return internal_bisect_left(a, x, lo, hi);
 }
 
-PyDoc_STRVAR(bisect_left_doc,
-"bisect_left(a, x[, lo[, hi]]) -> index\n\
-\n\
-Return the index where to insert item x in list a, assuming a is sorted.\n\
-\n\
-The return value i is such that all e in a[:i] have e < x, and all e in\n\
-a[i:] have e >= x.  So if x already appears in the list, i points just\n\
-before the leftmost x already there.\n\
-\n\
-Optional args lo (default 0) and hi (default len(a)) bound the\n\
-slice of a to be searched.\n");
+
+/*[clinic input]
+_bisect.insort_left
+
+    a: object
+    x: object
+    lo: Py_ssize_t = 0
+    hi: Py_ssize_t(c_default='-1', accept={int, NoneType}) = None
+
+Insert item x in list a, and keep it sorted assuming a is sorted.
+
+If x is already in a, insert it to the left of the leftmost x.
+
+Optional args lo (default 0) and hi (default len(a)) bound the
+slice of a to be searched.
+[clinic start generated code]*/
 
 static PyObject *
-insort_left(PyObject *self, PyObject *args, PyObject *kw)
+_bisect_insort_left_impl(PyObject *module, PyObject *a, PyObject *x,
+                         Py_ssize_t lo, Py_ssize_t hi)
+/*[clinic end generated code: output=9e8356c0844a182b input=bc4583308bce00cc]*/
 {
-    PyObject *list, *item, *result;
-    Py_ssize_t lo = 0;
-    Py_ssize_t hi = -1;
-    Py_ssize_t index;
-    static char *keywords[] = {"a", "x", "lo", "hi", NULL};
-
-    if (kw == NULL && PyTuple_GET_SIZE(args) == 2) {
-        list = PyTuple_GET_ITEM(args, 0);
-        item = PyTuple_GET_ITEM(args, 1);
-    } else {
-        if (!PyArg_ParseTupleAndKeywords(args, kw, "OO|nn:insort_left",
-                                         keywords, &list, &item, &lo, &hi))
-            return NULL;
-    }
-    index = internal_bisect_left(list, item, lo, hi);
+    PyObject *result;
+    Py_ssize_t index = internal_bisect_left(a, x, lo, hi);
     if (index < 0)
         return NULL;
-    if (PyList_CheckExact(list)) {
-        if (PyList_Insert(list, index, item) < 0)
+    if (PyList_CheckExact(a)) {
+        if (PyList_Insert(a, index, x) < 0)
             return NULL;
     } else {
-        result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
+        result = _PyObject_CallMethodId(a, &PyId_insert, "nO", index, x);
         if (result == NULL)
             return NULL;
         Py_DECREF(result);
@@ -230,25 +218,11 @@
     Py_RETURN_NONE;
 }
 
-PyDoc_STRVAR(insort_left_doc,
-"insort_left(a, x[, lo[, hi]])\n\
-\n\
-Insert item x in list a, and keep it sorted assuming a is sorted.\n\
-\n\
-If x is already in a, insert it to the left of the leftmost x.\n\
-\n\
-Optional args lo (default 0) and hi (default len(a)) bound the\n\
-slice of a to be searched.\n");
-
 static PyMethodDef bisect_methods[] = {
-    {"bisect_right", (PyCFunction)(void(*)(void))bisect_right,
-        METH_VARARGS|METH_KEYWORDS, bisect_right_doc},
-    {"insort_right", (PyCFunction)(void(*)(void))insort_right,
-        METH_VARARGS|METH_KEYWORDS, insort_right_doc},
-    {"bisect_left", (PyCFunction)(void(*)(void))bisect_left,
-        METH_VARARGS|METH_KEYWORDS, bisect_left_doc},
-    {"insort_left", (PyCFunction)(void(*)(void))insort_left,
-        METH_VARARGS|METH_KEYWORDS, insort_left_doc},
+    _BISECT_BISECT_RIGHT_METHODDEF
+    _BISECT_INSORT_RIGHT_METHODDEF
+    _BISECT_BISECT_LEFT_METHODDEF
+    _BISECT_INSORT_LEFT_METHODDEF
     {NULL, NULL} /* sentinel */
 };
 
diff --git a/Modules/_blake2/blake2b_impl.c b/Modules/_blake2/blake2b_impl.c
index edab31e..7fb1296 100644
--- a/Modules/_blake2/blake2b_impl.c
+++ b/Modules/_blake2/blake2b_impl.c
@@ -15,7 +15,6 @@
 
 #include "Python.h"
 #include "pystrhex.h"
-#include "pythread.h"
 
 #include "../hashlib.h"
 #include "blake2ns.h"
@@ -81,6 +80,7 @@
     node_depth: int = 0
     inner_size: int = 0
     last_node: bool = False
+    usedforsecurity: bool = True
 
 Return a new BLAKE2b hash object.
 [clinic start generated code]*/
@@ -90,8 +90,8 @@
                     Py_buffer *key, Py_buffer *salt, Py_buffer *person,
                     int fanout, int depth, unsigned long leaf_size,
                     unsigned long long node_offset, int node_depth,
-                    int inner_size, int last_node)
-/*[clinic end generated code: output=65e732c66c2297a0 input=82be35a4e6a9daa2]*/
+                    int inner_size, int last_node, int usedforsecurity)
+/*[clinic end generated code: output=32bfd8f043c6896f input=b947312abff46977]*/
 {
     BLAKE2bObject *self = NULL;
     Py_buffer buf;
diff --git a/Modules/_blake2/blake2module.c b/Modules/_blake2/blake2module.c
index e2a3d42..ff142c9 100644
--- a/Modules/_blake2/blake2module.c
+++ b/Modules/_blake2/blake2module.c
@@ -62,14 +62,11 @@
         return NULL;
 
     /* BLAKE2b */
-    Py_TYPE(&PyBlake2_BLAKE2bType) = &PyType_Type;
-    if (PyType_Ready(&PyBlake2_BLAKE2bType) < 0) {
+    Py_SET_TYPE(&PyBlake2_BLAKE2bType, &PyType_Type);
+    if (PyModule_AddType(m, &PyBlake2_BLAKE2bType) < 0) {
         return NULL;
     }
 
-    Py_INCREF(&PyBlake2_BLAKE2bType);
-    PyModule_AddObject(m, "blake2b", (PyObject *)&PyBlake2_BLAKE2bType);
-
     d = PyBlake2_BLAKE2bType.tp_dict;
     ADD_INT(d, "SALT_SIZE", BLAKE2B_SALTBYTES);
     ADD_INT(d, "PERSON_SIZE", BLAKE2B_PERSONALBYTES);
@@ -82,14 +79,11 @@
     PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
 
     /* BLAKE2s */
-    Py_TYPE(&PyBlake2_BLAKE2sType) = &PyType_Type;
-    if (PyType_Ready(&PyBlake2_BLAKE2sType) < 0) {
+    Py_SET_TYPE(&PyBlake2_BLAKE2sType, &PyType_Type);
+    if (PyModule_AddType(m, &PyBlake2_BLAKE2sType) < 0) {
         return NULL;
     }
 
-    Py_INCREF(&PyBlake2_BLAKE2sType);
-    PyModule_AddObject(m, "blake2s", (PyObject *)&PyBlake2_BLAKE2sType);
-
     d = PyBlake2_BLAKE2sType.tp_dict;
     ADD_INT(d, "SALT_SIZE", BLAKE2S_SALTBYTES);
     ADD_INT(d, "PERSON_SIZE", BLAKE2S_PERSONALBYTES);
diff --git a/Modules/_blake2/blake2s_impl.c b/Modules/_blake2/blake2s_impl.c
index ef2f7e1..e3e90d0 100644
--- a/Modules/_blake2/blake2s_impl.c
+++ b/Modules/_blake2/blake2s_impl.c
@@ -15,7 +15,6 @@
 
 #include "Python.h"
 #include "pystrhex.h"
-#include "pythread.h"
 
 #include "../hashlib.h"
 #include "blake2ns.h"
@@ -81,6 +80,7 @@
     node_depth: int = 0
     inner_size: int = 0
     last_node: bool = False
+    usedforsecurity: bool = True
 
 Return a new BLAKE2s hash object.
 [clinic start generated code]*/
@@ -90,8 +90,8 @@
                     Py_buffer *key, Py_buffer *salt, Py_buffer *person,
                     int fanout, int depth, unsigned long leaf_size,
                     unsigned long long node_offset, int node_depth,
-                    int inner_size, int last_node)
-/*[clinic end generated code: output=b95806be0514dcf7 input=641c0509debf714d]*/
+                    int inner_size, int last_node, int usedforsecurity)
+/*[clinic end generated code: output=556181f73905c686 input=4dda87723f23abb0]*/
 {
     BLAKE2sObject *self = NULL;
     Py_buffer buf;
diff --git a/Modules/_blake2/clinic/blake2b_impl.c.h b/Modules/_blake2/clinic/blake2b_impl.c.h
index cd329c0..07258c3 100644
--- a/Modules/_blake2/clinic/blake2b_impl.c.h
+++ b/Modules/_blake2/clinic/blake2b_impl.c.h
@@ -5,7 +5,8 @@
 PyDoc_STRVAR(py_blake2b_new__doc__,
 "blake2b(data=b\'\', /, *, digest_size=_blake2.blake2b.MAX_DIGEST_SIZE,\n"
 "        key=b\'\', salt=b\'\', person=b\'\', fanout=1, depth=1, leaf_size=0,\n"
-"        node_offset=0, node_depth=0, inner_size=0, last_node=False)\n"
+"        node_offset=0, node_depth=0, inner_size=0, last_node=False,\n"
+"        usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new BLAKE2b hash object.");
@@ -15,15 +16,15 @@
                     Py_buffer *key, Py_buffer *salt, Py_buffer *person,
                     int fanout, int depth, unsigned long leaf_size,
                     unsigned long long node_offset, int node_depth,
-                    int inner_size, int last_node);
+                    int inner_size, int last_node, int usedforsecurity);
 
 static PyObject *
 py_blake2b_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", NULL};
+    static const char * const _keywords[] = {"", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "blake2b", 0};
-    PyObject *argsbuf[12];
+    PyObject *argsbuf[13];
     PyObject * const *fastargs;
     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
@@ -39,6 +40,7 @@
     int node_depth = 0;
     int inner_size = 0;
     int last_node = 0;
+    int usedforsecurity = 1;
 
     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 1, 0, argsbuf);
     if (!fastargs) {
@@ -175,12 +177,21 @@
             goto skip_optional_kwonly;
         }
     }
-    last_node = PyObject_IsTrue(fastargs[11]);
-    if (last_node < 0) {
+    if (fastargs[11]) {
+        last_node = PyObject_IsTrue(fastargs[11]);
+        if (last_node < 0) {
+            goto exit;
+        }
+        if (!--noptargs) {
+            goto skip_optional_kwonly;
+        }
+    }
+    usedforsecurity = PyObject_IsTrue(fastargs[12]);
+    if (usedforsecurity < 0) {
         goto exit;
     }
 skip_optional_kwonly:
-    return_value = py_blake2b_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size, node_offset, node_depth, inner_size, last_node);
+    return_value = py_blake2b_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size, node_offset, node_depth, inner_size, last_node, usedforsecurity);
 
 exit:
     /* Cleanup for key */
@@ -261,4 +272,4 @@
 {
     return _blake2_blake2b_hexdigest_impl(self);
 }
-/*[clinic end generated code: output=cbb625d7f60c288c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2d6d0fe9aa42a42a input=a9049054013a1b77]*/
diff --git a/Modules/_blake2/clinic/blake2s_impl.c.h b/Modules/_blake2/clinic/blake2s_impl.c.h
index 560bd68..71c5706 100644
--- a/Modules/_blake2/clinic/blake2s_impl.c.h
+++ b/Modules/_blake2/clinic/blake2s_impl.c.h
@@ -5,7 +5,8 @@
 PyDoc_STRVAR(py_blake2s_new__doc__,
 "blake2s(data=b\'\', /, *, digest_size=_blake2.blake2s.MAX_DIGEST_SIZE,\n"
 "        key=b\'\', salt=b\'\', person=b\'\', fanout=1, depth=1, leaf_size=0,\n"
-"        node_offset=0, node_depth=0, inner_size=0, last_node=False)\n"
+"        node_offset=0, node_depth=0, inner_size=0, last_node=False,\n"
+"        usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new BLAKE2s hash object.");
@@ -15,15 +16,15 @@
                     Py_buffer *key, Py_buffer *salt, Py_buffer *person,
                     int fanout, int depth, unsigned long leaf_size,
                     unsigned long long node_offset, int node_depth,
-                    int inner_size, int last_node);
+                    int inner_size, int last_node, int usedforsecurity);
 
 static PyObject *
 py_blake2s_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", NULL};
+    static const char * const _keywords[] = {"", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "blake2s", 0};
-    PyObject *argsbuf[12];
+    PyObject *argsbuf[13];
     PyObject * const *fastargs;
     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
@@ -39,6 +40,7 @@
     int node_depth = 0;
     int inner_size = 0;
     int last_node = 0;
+    int usedforsecurity = 1;
 
     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 1, 0, argsbuf);
     if (!fastargs) {
@@ -175,12 +177,21 @@
             goto skip_optional_kwonly;
         }
     }
-    last_node = PyObject_IsTrue(fastargs[11]);
-    if (last_node < 0) {
+    if (fastargs[11]) {
+        last_node = PyObject_IsTrue(fastargs[11]);
+        if (last_node < 0) {
+            goto exit;
+        }
+        if (!--noptargs) {
+            goto skip_optional_kwonly;
+        }
+    }
+    usedforsecurity = PyObject_IsTrue(fastargs[12]);
+    if (usedforsecurity < 0) {
         goto exit;
     }
 skip_optional_kwonly:
-    return_value = py_blake2s_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size, node_offset, node_depth, inner_size, last_node);
+    return_value = py_blake2s_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size, node_offset, node_depth, inner_size, last_node, usedforsecurity);
 
 exit:
     /* Cleanup for key */
@@ -261,4 +272,4 @@
 {
     return _blake2_blake2s_hexdigest_impl(self);
 }
-/*[clinic end generated code: output=39af5a74c8805b36 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c80d8d06ce40a192 input=a9049054013a1b77]*/
diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c
index 31bbf66..880632c 100644
--- a/Modules/_bz2module.c
+++ b/Modules/_bz2module.c
@@ -3,9 +3,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
-
-#include "pythread.h"
+#include "structmember.h"         // PyMemberDef
 
 #include <bzlib.h>
 #include <stdio.h>
@@ -728,13 +726,32 @@
 
 /* Module initialization. */
 
+static int
+_bz2_exec(PyObject *module)
+{
+    if (PyModule_AddType(module, &BZ2Compressor_Type) < 0) {
+        return -1;
+    }
+
+    if (PyModule_AddType(module, &BZ2Decompressor_Type) < 0) {
+        return -1;
+    }
+
+    return 0;
+}
+
+static struct PyModuleDef_Slot _bz2_slots[] = {
+    {Py_mod_exec, _bz2_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef _bz2module = {
     PyModuleDef_HEAD_INIT,
     "_bz2",
     NULL,
-    -1,
+    0,
     NULL,
-    NULL,
+    _bz2_slots,
     NULL,
     NULL,
     NULL
@@ -743,23 +760,5 @@
 PyMODINIT_FUNC
 PyInit__bz2(void)
 {
-    PyObject *m;
-
-    if (PyType_Ready(&BZ2Compressor_Type) < 0)
-        return NULL;
-    if (PyType_Ready(&BZ2Decompressor_Type) < 0)
-        return NULL;
-
-    m = PyModule_Create(&_bz2module);
-    if (m == NULL)
-        return NULL;
-
-    Py_INCREF(&BZ2Compressor_Type);
-    PyModule_AddObject(m, "BZ2Compressor", (PyObject *)&BZ2Compressor_Type);
-
-    Py_INCREF(&BZ2Decompressor_Type);
-    PyModule_AddObject(m, "BZ2Decompressor",
-                       (PyObject *)&BZ2Decompressor_Type);
-
-    return m;
+    return PyModuleDef_Init(&_bz2module);
 }
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index a8ffb69..9520721 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -1039,13 +1039,17 @@
     {NULL, NULL}                /* sentinel */
 };
 
+static PyModuleDef_Slot _codecs_slots[] = {
+    {0, NULL}
+};
+
 static struct PyModuleDef codecsmodule = {
         PyModuleDef_HEAD_INIT,
         "_codecs",
         NULL,
-        -1,
+        0,
         _codecs_functions,
-        NULL,
+        _codecs_slots,
         NULL,
         NULL,
         NULL
@@ -1054,5 +1058,5 @@
 PyMODINIT_FUNC
 PyInit__codecs(void)
 {
-        return PyModule_Create(&codecsmodule);
+    return PyModuleDef_Init(&codecsmodule);
 }
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index cc2b90e..7120e4d 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -1,10 +1,10 @@
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #ifdef STDC_HEADERS
 #include <stddef.h>
 #else
-#include <sys/types.h>          /* For size_t */
+#include <sys/types.h>            // size_t
 #endif
 
 /*[clinic input]
@@ -172,7 +172,7 @@
     MARK_END(b->rightlink);
 
     assert(BLOCKLEN >= 2);
-    Py_SIZE(deque) = 0;
+    Py_SET_SIZE(deque, 0);
     deque->leftblock = b;
     deque->rightblock = b;
     deque->leftindex = CENTER + 1;
@@ -196,7 +196,7 @@
     }
     item = deque->rightblock->data[deque->rightindex];
     deque->rightindex--;
-    Py_SIZE(deque)--;
+    Py_SET_SIZE(deque, Py_SIZE(deque) - 1);
     deque->state++;
 
     if (deque->rightindex < 0) {
@@ -234,7 +234,7 @@
     assert(deque->leftblock != NULL);
     item = deque->leftblock->data[deque->leftindex];
     deque->leftindex++;
-    Py_SIZE(deque)--;
+    Py_SET_SIZE(deque, Py_SIZE(deque) - 1);
     deque->state++;
 
     if (deque->leftindex == BLOCKLEN) {
@@ -287,7 +287,7 @@
         MARK_END(b->rightlink);
         deque->rightindex = -1;
     }
-    Py_SIZE(deque)++;
+    Py_SET_SIZE(deque, Py_SIZE(deque) + 1);
     deque->rightindex++;
     deque->rightblock->data[deque->rightindex] = item;
     if (NEEDS_TRIM(deque, maxlen)) {
@@ -324,7 +324,7 @@
         MARK_END(b->leftlink);
         deque->leftindex = BLOCKLEN;
     }
-    Py_SIZE(deque)++;
+    Py_SET_SIZE(deque, Py_SIZE(deque) + 1);
     deque->leftindex--;
     deque->leftblock->data[deque->leftindex] = item;
     if (NEEDS_TRIM(deque, deque->maxlen)) {
@@ -489,7 +489,7 @@
 {
     PyObject *result;
     dequeobject *old_deque = (dequeobject *)deque;
-    if (Py_TYPE(deque) == &deque_type) {
+    if (Py_IS_TYPE(deque, &deque_type)) {
         dequeobject *new_deque;
         PyObject *rv;
 
@@ -512,8 +512,7 @@
         return NULL;
     }
     if (old_deque->maxlen < 0)
-        result = PyObject_CallFunctionObjArgs((PyObject *)(Py_TYPE(deque)),
-                                              deque, NULL);
+        result = PyObject_CallOneArg((PyObject *)(Py_TYPE(deque)), deque);
     else
         result = PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi",
                                        deque, old_deque->maxlen, NULL);
@@ -540,7 +539,7 @@
         if (rv == 0) {
             PyErr_Format(PyExc_TypeError,
                          "can only concatenate deque (not \"%.200s\") to deque",
-                         other->ob_type->tp_name);
+                         Py_TYPE(other)->tp_name);
         }
         return NULL;
     }
@@ -598,7 +597,7 @@
     /* Set the deque to be empty using the newly allocated block */
     MARK_END(b->leftlink);
     MARK_END(b->rightlink);
-    Py_SIZE(deque) = 0;
+    Py_SET_SIZE(deque, 0);
     deque->leftblock = b;
     deque->rightblock = b;
     deque->leftindex = CENTER + 1;
@@ -681,7 +680,7 @@
             if (deque->rightindex == BLOCKLEN - 1) {
                 block *b = newblock();
                 if (b == NULL) {
-                    Py_SIZE(deque) += i;
+                    Py_SET_SIZE(deque, Py_SIZE(deque) + i);
                     return NULL;
                 }
                 b->leftlink = deque->rightblock;
@@ -701,7 +700,7 @@
                 deque->rightblock->data[deque->rightindex] = item;
             }
         }
-        Py_SIZE(deque) += i;
+        Py_SET_SIZE(deque, Py_SIZE(deque) + i);
         Py_INCREF(deque);
         return (PyObject *)deque;
     }
@@ -1610,6 +1609,8 @@
         METH_FASTCALL,            rotate_doc},
     {"__sizeof__",              (PyCFunction)deque_sizeof,
         METH_NOARGS,             sizeof_doc},
+    {"__class_getitem__",       (PyCFunction)Py_GenericAlias,
+        METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL,              NULL}   /* sentinel */
 };
 
@@ -1981,7 +1982,7 @@
         Py_DECREF(tup);
         return NULL;
     }
-    value = PyEval_CallObject(factory, NULL);
+    value = _PyObject_CallNoArg(factory);
     if (value == NULL)
         return value;
     if (PyObject_SetItem((PyObject *)dd, key, value) < 0) {
@@ -1991,6 +1992,13 @@
     return value;
 }
 
+static inline PyObject*
+new_defdict(defdictobject *dd, PyObject *arg)
+{
+    return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd),
+        dd->default_factory ? dd->default_factory : Py_None, arg, NULL);
+}
+
 PyDoc_STRVAR(defdict_copy_doc, "D.copy() -> a shallow copy of D.");
 
 static PyObject *
@@ -2000,11 +2008,7 @@
        whose class constructor has the same signature.  Subclasses that
        define a different constructor signature must override copy().
     */
-
-    if (dd->default_factory == NULL)
-        return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd), Py_None, dd, NULL);
-    return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd),
-                                        dd->default_factory, dd, NULL);
+    return new_defdict(dd, (PyObject*)dd);
 }
 
 static PyObject *
@@ -2044,7 +2048,7 @@
         args = PyTuple_Pack(1, dd->default_factory);
     if (args == NULL)
         return NULL;
-    items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, NULL);
+    items = _PyObject_CallMethodIdNoArgs((PyObject *)dd, &PyId_items);
     if (items == NULL) {
         Py_DECREF(args);
         return NULL;
@@ -2072,6 +2076,8 @@
      defdict_copy_doc},
     {"__reduce__", (PyCFunction)defdict_reduce, METH_NOARGS,
      reduce_doc},
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS,
+     PyDoc_STR("See PEP 585")},
     {NULL}
 };
 
@@ -2128,6 +2134,38 @@
     return result;
 }
 
+static PyObject*
+defdict_or(PyObject* left, PyObject* right)
+{
+    PyObject *self, *other;
+    if (PyObject_TypeCheck(left, &defdict_type)) {
+        self = left;
+        other = right;
+    }
+    else {
+        self = right;
+        other = left;
+    }
+    if (!PyDict_Check(other)) {
+        Py_RETURN_NOTIMPLEMENTED;
+    }
+    // Like copy(), this calls the object's class.
+    // Override __or__/__ror__ for subclasses with different constructors.
+    PyObject *new = new_defdict((defdictobject*)self, left);
+    if (!new) {
+        return NULL;
+    }
+    if (PyDict_Update(new, right)) {
+        Py_DECREF(new);
+        return NULL;
+    }
+    return new;
+}
+
+static PyNumberMethods defdict_as_number = {
+    .nb_or = defdict_or,
+};
+
 static int
 defdict_traverse(PyObject *self, visitproc visit, void *arg)
 {
@@ -2199,7 +2237,7 @@
     0,                                  /* tp_setattr */
     0,                                  /* tp_as_async */
     (reprfunc)defdict_repr,             /* tp_repr */
-    0,                                  /* tp_as_number */
+    &defdict_as_number,                 /* tp_as_number */
     0,                                  /* tp_as_sequence */
     0,                                  /* tp_as_mapping */
     0,                                  /* tp_hash */
@@ -2400,7 +2438,7 @@
                      "descriptor for index '%zd' for tuple subclasses "
                      "doesn't apply to '%s' object",
                      index,
-                     obj->ob_type->tp_name);
+                     Py_TYPE(obj)->tp_name);
         return NULL;
     }
 
@@ -2455,6 +2493,14 @@
     return Py_BuildValue("(O(nO))", (PyObject*) Py_TYPE(self), self->index, self->doc);
 }
 
+static PyObject*
+tuplegetter_repr(_tuplegetterobject *self)
+{
+    return PyUnicode_FromFormat("%s(%zd, %R)",
+                                _PyType_Name(Py_TYPE(self)),
+                                self->index, self->doc);
+}
+
 
 static PyMemberDef tuplegetter_members[] = {
     {"__doc__",  T_OBJECT, offsetof(_tuplegetterobject, doc), 0},
@@ -2477,7 +2523,7 @@
     0,                                          /* tp_getattr */
     0,                                          /* tp_setattr */
     0,                                          /* tp_as_async */
-    0,                                          /* tp_repr */
+    (reprfunc)tuplegetter_repr,                 /* tp_repr */
     0,                                          /* tp_as_number */
     0,                                          /* tp_as_sequence */
     0,                                          /* tp_as_mapping */
@@ -2512,24 +2558,51 @@
 
 /* module level code ********************************************************/
 
-PyDoc_STRVAR(module_doc,
+PyDoc_STRVAR(collections_doc,
 "High performance data structures.\n\
 - deque:        ordered collection accessible from endpoints only\n\
 - defaultdict:  dict subclass with a default value factory\n\
 ");
 
-static struct PyMethodDef module_functions[] = {
+static struct PyMethodDef collections_methods[] = {
     _COLLECTIONS__COUNT_ELEMENTS_METHODDEF
     {NULL,       NULL}          /* sentinel */
 };
 
+static int
+collections_exec(PyObject *module) {
+    PyTypeObject *typelist[] = {
+        &deque_type,
+        &defdict_type,
+        &PyODict_Type,
+        &dequeiter_type,
+        &dequereviter_type,
+        &tuplegetter_type
+    };
+
+    defdict_type.tp_base = &PyDict_Type;
+
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(typelist); i++) {
+        if (PyModule_AddType(module, typelist[i]) < 0) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+static struct PyModuleDef_Slot collections_slots[] = {
+    {Py_mod_exec, collections_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef _collectionsmodule = {
     PyModuleDef_HEAD_INIT,
     "_collections",
-    module_doc,
-    -1,
-    module_functions,
-    NULL,
+    collections_doc,
+    0,
+    collections_methods,
+    collections_slots,
     NULL,
     NULL,
     NULL
@@ -2538,40 +2611,5 @@
 PyMODINIT_FUNC
 PyInit__collections(void)
 {
-    PyObject *m;
-
-    m = PyModule_Create(&_collectionsmodule);
-    if (m == NULL)
-        return NULL;
-
-    if (PyType_Ready(&deque_type) < 0)
-        return NULL;
-    Py_INCREF(&deque_type);
-    PyModule_AddObject(m, "deque", (PyObject *)&deque_type);
-
-    defdict_type.tp_base = &PyDict_Type;
-    if (PyType_Ready(&defdict_type) < 0)
-        return NULL;
-    Py_INCREF(&defdict_type);
-    PyModule_AddObject(m, "defaultdict", (PyObject *)&defdict_type);
-
-    Py_INCREF(&PyODict_Type);
-    PyModule_AddObject(m, "OrderedDict", (PyObject *)&PyODict_Type);
-
-    if (PyType_Ready(&dequeiter_type) < 0)
-        return NULL;
-    Py_INCREF(&dequeiter_type);
-    PyModule_AddObject(m, "_deque_iterator", (PyObject *)&dequeiter_type);
-
-    if (PyType_Ready(&dequereviter_type) < 0)
-        return NULL;
-    Py_INCREF(&dequereviter_type);
-    PyModule_AddObject(m, "_deque_reverse_iterator", (PyObject *)&dequereviter_type);
-
-    if (PyType_Ready(&tuplegetter_type) < 0)
-        return NULL;
-    Py_INCREF(&tuplegetter_type);
-    PyModule_AddObject(m, "_tuplegetter", (PyObject *)&tuplegetter_type);
-
-    return m;
+    return PyModuleDef_Init(&_collectionsmodule);
 }
diff --git a/Modules/_contextvarsmodule.c b/Modules/_contextvarsmodule.c
index 1abcdbf..d6d7f37 100644
--- a/Modules/_contextvarsmodule.c
+++ b/Modules/_contextvarsmodule.c
@@ -27,13 +27,48 @@
     {NULL, NULL}
 };
 
+static int
+_contextvars_exec(PyObject *m)
+{
+    Py_INCREF(&PyContext_Type);
+    if (PyModule_AddObject(m, "Context",
+                           (PyObject *)&PyContext_Type) < 0)
+    {
+        Py_DECREF(&PyContext_Type);
+        return -1;
+    }
+
+    Py_INCREF(&PyContextVar_Type);
+    if (PyModule_AddObject(m, "ContextVar",
+                           (PyObject *)&PyContextVar_Type) < 0)
+    {
+        Py_DECREF(&PyContextVar_Type);
+        return -1;
+    }
+
+    Py_INCREF(&PyContextToken_Type);
+    if (PyModule_AddObject(m, "Token",
+                           (PyObject *)&PyContextToken_Type) < 0)
+    {
+        Py_DECREF(&PyContextToken_Type);
+        return -1;
+    }
+
+    return 0;
+}
+
+static struct PyModuleDef_Slot _contextvars_slots[] = {
+    {Py_mod_exec, _contextvars_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef _contextvarsmodule = {
     PyModuleDef_HEAD_INIT,      /* m_base */
     "_contextvars",             /* m_name */
     module_doc,                 /* m_doc */
-    -1,                         /* m_size */
+    0,                          /* m_size */
     _contextvars_methods,       /* m_methods */
-    NULL,                       /* m_slots */
+    _contextvars_slots,         /* m_slots */
     NULL,                       /* m_traverse */
     NULL,                       /* m_clear */
     NULL,                       /* m_free */
@@ -42,37 +77,5 @@
 PyMODINIT_FUNC
 PyInit__contextvars(void)
 {
-    PyObject *m = PyModule_Create(&_contextvarsmodule);
-    if (m == NULL) {
-        return NULL;
-    }
-
-    Py_INCREF(&PyContext_Type);
-    if (PyModule_AddObject(m, "Context",
-                           (PyObject *)&PyContext_Type) < 0)
-    {
-        Py_DECREF(&PyContext_Type);
-        Py_DECREF(m);
-        return NULL;
-    }
-
-    Py_INCREF(&PyContextVar_Type);
-    if (PyModule_AddObject(m, "ContextVar",
-                           (PyObject *)&PyContextVar_Type) < 0)
-    {
-        Py_DECREF(&PyContextVar_Type);
-        Py_DECREF(m);
-        return NULL;
-    }
-
-    Py_INCREF(&PyContextToken_Type);
-    if (PyModule_AddObject(m, "Token",
-                           (PyObject *)&PyContextToken_Type) < 0)
-    {
-        Py_DECREF(&PyContextToken_Type);
-        Py_DECREF(m);
-        return NULL;
-    }
-
-    return m;
+    return PyModuleDef_Init(&_contextvarsmodule);
 }
diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c
index 5d03f45..a95f55a 100644
--- a/Modules/_cryptmodule.c
+++ b/Modules/_cryptmodule.c
@@ -42,6 +42,9 @@
 #else
     crypt_result = crypt(word, salt);
 #endif
+    if (crypt_result == NULL) {
+        return PyErr_SetFromErrno(PyExc_OSError);
+    }
     return Py_BuildValue("s", crypt_result);
 }
 
@@ -51,14 +54,17 @@
     {NULL,              NULL}           /* sentinel */
 };
 
+static PyModuleDef_Slot _crypt_slots[] = {
+    {0, NULL}
+};
 
 static struct PyModuleDef cryptmodule = {
     PyModuleDef_HEAD_INIT,
     "_crypt",
     NULL,
-    -1,
+    0,
     crypt_methods,
-    NULL,
+    _crypt_slots,
     NULL,
     NULL,
     NULL
@@ -67,5 +73,5 @@
 PyMODINIT_FUNC
 PyInit__crypt(void)
 {
-    return PyModule_Create(&cryptmodule);
+    return PyModuleDef_Init(&cryptmodule);
 }
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 46d4143..59109b0 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -11,7 +11,7 @@
 #define MODULE_VERSION "1.0"
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include <stdbool.h>
 
 
@@ -21,21 +21,27 @@
     long field_limit;   /* max parsed field size */
 } _csvstate;
 
-#define _csvstate(o) ((_csvstate *)PyModule_GetState(o))
+static inline _csvstate*
+get_csv_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_csvstate *)state;
+}
 
 static int
 _csv_clear(PyObject *m)
 {
-    Py_CLEAR(_csvstate(m)->error_obj);
-    Py_CLEAR(_csvstate(m)->dialects);
+    Py_CLEAR(get_csv_state(m)->error_obj);
+    Py_CLEAR(get_csv_state(m)->dialects);
     return 0;
 }
 
 static int
 _csv_traverse(PyObject *m, visitproc visit, void *arg)
 {
-    Py_VISIT(_csvstate(m)->error_obj);
-    Py_VISIT(_csvstate(m)->dialects);
+    Py_VISIT(get_csv_state(m)->error_obj);
+    Py_VISIT(get_csv_state(m)->dialects);
     return 0;
 }
 
@@ -106,7 +112,7 @@
 
 static PyTypeObject Reader_Type;
 
-#define ReaderObject_Check(v)   (Py_TYPE(v) == &Reader_Type)
+#define ReaderObject_Check(v)   Py_IS_TYPE(v, &Reader_Type)
 
 typedef struct {
     PyObject_HEAD
@@ -236,7 +242,7 @@
             if (!PyUnicode_Check(src)) {
                 PyErr_Format(PyExc_TypeError,
                     "\"%s\" must be string, not %.200s", name,
-                    src->ob_type->tp_name);
+                    Py_TYPE(src)->tp_name);
                 return -1;
             }
             len = PyUnicode_GetLength(src);
@@ -514,10 +520,10 @@
 {
     PyObject *type = (PyObject *)&Dialect_Type;
     if (dialect_inst) {
-        return _PyObject_FastCallDict(type, &dialect_inst, 1, kwargs);
+        return PyObject_VectorcallDict(type, &dialect_inst, 1, kwargs);
     }
     else {
-        return _PyObject_FastCallDict(type, NULL, 0, kwargs);
+        return PyObject_VectorcallDict(type, NULL, 0, kwargs);
     }
 }
 
@@ -783,7 +789,7 @@
     Py_UCS4 c;
     Py_ssize_t pos, linelen;
     unsigned int kind;
-    void *data;
+    const void *data;
     PyObject *lineobj;
 
     if (parse_reset(self) < 0)
@@ -807,7 +813,7 @@
                          "iterator should return strings, "
                          "not %.200s "
                          "(did you open the file in text mode?)",
-                         lineobj->ob_type->tp_name
+                         Py_TYPE(lineobj)->tp_name
                 );
             Py_DECREF(lineobj);
             return NULL;
@@ -958,8 +964,6 @@
     }
     self->input_iter = PyObject_GetIter(iterator);
     if (self->input_iter == NULL) {
-        PyErr_SetString(PyExc_TypeError,
-                        "argument 1 must be an iterator");
         Py_DECREF(self);
         return NULL;
     }
@@ -990,7 +994,7 @@
  * record length.
  */
 static Py_ssize_t
-join_append_data(WriterObj *self, unsigned int field_kind, void *field_data,
+join_append_data(WriterObj *self, unsigned int field_kind, const void *field_data,
                  Py_ssize_t field_len, int *quoted,
                  int copy_phase)
 {
@@ -1101,7 +1105,7 @@
 join_append(WriterObj *self, PyObject *field, int quoted)
 {
     unsigned int field_kind = -1;
-    void *field_data = NULL;
+    const void *field_data = NULL;
     Py_ssize_t field_len = 0;
     Py_ssize_t rec_len;
 
@@ -1133,7 +1137,7 @@
 {
     Py_ssize_t terminator_len, i;
     unsigned int term_kind;
-    void *term_data;
+    const void *term_data;
 
     terminator_len = PyUnicode_GET_LENGTH(self->dialect->lineterminator);
     if (terminator_len == -1)
@@ -1165,10 +1169,14 @@
     PyObject *iter, *field, *line, *result;
 
     iter = PyObject_GetIter(seq);
-    if (iter == NULL)
-        return PyErr_Format(_csvstate_global->error_obj,
-                            "iterable expected, not %.200s",
-                            seq->ob_type->tp_name);
+    if (iter == NULL) {
+        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
+            PyErr_Format(_csvstate_global->error_obj,
+                         "iterable expected, not %.200s",
+                         Py_TYPE(seq)->tp_name);
+        }
+        return NULL;
+    }
 
     /* Join all fields in internal buffer.
      */
@@ -1240,7 +1248,7 @@
     if (line == NULL) {
         return NULL;
     }
-    result = PyObject_CallFunctionObjArgs(self->write, line, NULL);
+    result = PyObject_CallOneArg(self->write, line);
     Py_DECREF(line);
     return result;
 }
@@ -1258,8 +1266,6 @@
 
     row_iter = PyObject_GetIter(seqseq);
     if (row_iter == NULL) {
-        PyErr_SetString(PyExc_TypeError,
-                        "writerows() argument must be iterable");
         return NULL;
     }
     while ((row_obj = PyIter_Next(row_iter))) {
@@ -1627,9 +1633,6 @@
     PyObject *module;
     const StyleDesc *style;
 
-    if (PyType_Ready(&Dialect_Type) < 0)
-        return NULL;
-
     if (PyType_Ready(&Reader_Type) < 0)
         return NULL;
 
@@ -1647,15 +1650,15 @@
         return NULL;
 
     /* Set the field limit */
-    _csvstate(module)->field_limit = 128 * 1024;
+    get_csv_state(module)->field_limit = 128 * 1024;
     /* Do I still need to add this var to the Module Dict? */
 
     /* Add _dialects dictionary */
-    _csvstate(module)->dialects = PyDict_New();
-    if (_csvstate(module)->dialects == NULL)
+    get_csv_state(module)->dialects = PyDict_New();
+    if (get_csv_state(module)->dialects == NULL)
         return NULL;
-    Py_INCREF(_csvstate(module)->dialects);
-    if (PyModule_AddObject(module, "_dialects", _csvstate(module)->dialects))
+    Py_INCREF(get_csv_state(module)->dialects);
+    if (PyModule_AddObject(module, "_dialects", get_csv_state(module)->dialects))
         return NULL;
 
     /* Add quote styles into dictionary */
@@ -1665,16 +1668,15 @@
             return NULL;
     }
 
-    /* Add the Dialect type */
-    Py_INCREF(&Dialect_Type);
-    if (PyModule_AddObject(module, "Dialect", (PyObject *)&Dialect_Type))
+    if (PyModule_AddType(module, &Dialect_Type)) {
         return NULL;
+    }
 
     /* Add the CSV exception object to the module. */
-    _csvstate(module)->error_obj = PyErr_NewException("_csv.Error", NULL, NULL);
-    if (_csvstate(module)->error_obj == NULL)
+    get_csv_state(module)->error_obj = PyErr_NewException("_csv.Error", NULL, NULL);
+    if (get_csv_state(module)->error_obj == NULL)
         return NULL;
-    Py_INCREF(_csvstate(module)->error_obj);
-    PyModule_AddObject(module, "Error", _csvstate(module)->error_obj);
+    Py_INCREF(get_csv_state(module)->error_obj);
+    PyModule_AddObject(module, "Error", get_csv_state(module)->error_obj);
     return module;
 }
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index b10b867..ceae67e 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -102,7 +102,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #include <ffi.h>
 #ifdef MS_WIN32
@@ -1060,8 +1060,8 @@
   stgdict items size, align, length contain info about pointers itself,
   stgdict->proto has info about the pointed to type!
 */
-    stgdict = (StgDictObject *)PyObject_CallObject(
-        (PyObject *)&PyCStgDict_Type, NULL);
+    stgdict = (StgDictObject *)_PyObject_CallNoArg(
+        (PyObject *)&PyCStgDict_Type);
     if (!stgdict)
         return NULL;
     stgdict->size = sizeof(void *);
@@ -1310,7 +1310,7 @@
 static int
 CharArray_set_value(CDataObject *self, PyObject *value, void *Py_UNUSED(ignored))
 {
-    char *ptr;
+    const char *ptr;
     Py_ssize_t size;
 
     if (value == NULL) {
@@ -1552,8 +1552,8 @@
         goto error;
     }
 
-    stgdict = (StgDictObject *)PyObject_CallObject(
-        (PyObject *)&PyCStgDict_Type, NULL);
+    stgdict = (StgDictObject *)_PyObject_CallNoArg(
+        (PyObject *)&PyCStgDict_Type);
     if (!stgdict)
         goto error;
 
@@ -2009,8 +2009,8 @@
     if (result == NULL)
         return NULL;
 
-    stgdict = (StgDictObject *)PyObject_CallObject(
-        (PyObject *)&PyCStgDict_Type, NULL);
+    stgdict = (StgDictObject *)_PyObject_CallNoArg(
+        (PyObject *)&PyCStgDict_Type);
     if (!stgdict) {
         Py_DECREF(result);
         return NULL;
@@ -2123,8 +2123,8 @@
         goto error;
     }
 
-    stgdict = (StgDictObject *)PyObject_CallObject(
-        (PyObject *)&PyCStgDict_Type, NULL);
+    stgdict = (StgDictObject *)_PyObject_CallNoArg(
+        (PyObject *)&PyCStgDict_Type);
     if (!stgdict)
         goto error;
 
@@ -2563,8 +2563,8 @@
     PyTypeObject *result;
     StgDictObject *stgdict;
 
-    stgdict = (StgDictObject *)PyObject_CallObject(
-        (PyObject *)&PyCStgDict_Type, NULL);
+    stgdict = (StgDictObject *)_PyObject_CallNoArg(
+        (PyObject *)&PyCStgDict_Type);
     if (!stgdict)
         return NULL;
 
@@ -4085,7 +4085,7 @@
             _Py_IDENTIFIER(__ctypes_from_outparam__);
 
             v = PyTuple_GET_ITEM(callargs, i);
-            v = _PyObject_CallMethodId(v, &PyId___ctypes_from_outparam__, NULL);
+            v = _PyObject_CallMethodIdNoArgs(v, &PyId___ctypes_from_outparam__);
             if (v == NULL || numretvals == 1) {
                 Py_DECREF(callargs);
                 return v;
@@ -4798,6 +4798,12 @@
     return self->b_length;
 }
 
+static PyMethodDef Array_methods[] = {
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
+    { NULL, NULL }
+};
+
 static PySequenceMethods Array_as_sequence = {
     Array_length,                               /* sq_length; */
     0,                                          /* sq_concat; */
@@ -4846,7 +4852,7 @@
     0,                                          /* tp_weaklistoffset */
     0,                                          /* tp_iter */
     0,                                          /* tp_iternext */
-    0,                                          /* tp_methods */
+    Array_methods,                              /* tp_methods */
     0,                                          /* tp_members */
     0,                                          /* tp_getset */
     0,                                          /* tp_base */
@@ -5265,7 +5271,8 @@
         PyObject *np;
         StgDictObject *stgdict, *itemdict;
         PyObject *proto;
-        Py_ssize_t i, len, cur;
+        Py_ssize_t i, len;
+        size_t cur;
 
         /* Since pointers have no length, and we want to apply
            different semantics to negative indices than normal
@@ -5694,7 +5701,6 @@
    ob_type is the metatype (the 'type'), defaults to PyType_Type,
    tp_base is the base type, defaults to 'object' aka PyBaseObject_Type.
 */
-    PyEval_InitThreads();
     m = PyModule_Create(&_ctypesmodule);
     if (!m)
         return NULL;
@@ -5757,42 +5763,42 @@
     if (PyType_Ready(&PyCData_Type) < 0)
         return NULL;
 
-    Py_TYPE(&Struct_Type) = &PyCStructType_Type;
+    Py_SET_TYPE(&Struct_Type, &PyCStructType_Type);
     Struct_Type.tp_base = &PyCData_Type;
     if (PyType_Ready(&Struct_Type) < 0)
         return NULL;
     Py_INCREF(&Struct_Type);
     PyModule_AddObject(m, "Structure", (PyObject *)&Struct_Type);
 
-    Py_TYPE(&Union_Type) = &UnionType_Type;
+    Py_SET_TYPE(&Union_Type, &UnionType_Type);
     Union_Type.tp_base = &PyCData_Type;
     if (PyType_Ready(&Union_Type) < 0)
         return NULL;
     Py_INCREF(&Union_Type);
     PyModule_AddObject(m, "Union", (PyObject *)&Union_Type);
 
-    Py_TYPE(&PyCPointer_Type) = &PyCPointerType_Type;
+    Py_SET_TYPE(&PyCPointer_Type, &PyCPointerType_Type);
     PyCPointer_Type.tp_base = &PyCData_Type;
     if (PyType_Ready(&PyCPointer_Type) < 0)
         return NULL;
     Py_INCREF(&PyCPointer_Type);
     PyModule_AddObject(m, "_Pointer", (PyObject *)&PyCPointer_Type);
 
-    Py_TYPE(&PyCArray_Type) = &PyCArrayType_Type;
+    Py_SET_TYPE(&PyCArray_Type, &PyCArrayType_Type);
     PyCArray_Type.tp_base = &PyCData_Type;
     if (PyType_Ready(&PyCArray_Type) < 0)
         return NULL;
     Py_INCREF(&PyCArray_Type);
     PyModule_AddObject(m, "Array", (PyObject *)&PyCArray_Type);
 
-    Py_TYPE(&Simple_Type) = &PyCSimpleType_Type;
+    Py_SET_TYPE(&Simple_Type, &PyCSimpleType_Type);
     Simple_Type.tp_base = &PyCData_Type;
     if (PyType_Ready(&Simple_Type) < 0)
         return NULL;
     Py_INCREF(&Simple_Type);
     PyModule_AddObject(m, "_SimpleCData", (PyObject *)&Simple_Type);
 
-    Py_TYPE(&PyCFuncPtr_Type) = &PyCFuncPtrType_Type;
+    Py_SET_TYPE(&PyCFuncPtr_Type, &PyCFuncPtrType_Type);
     PyCFuncPtr_Type.tp_base = &PyCData_Type;
     if (PyType_Ready(&PyCFuncPtr_Type) < 0)
         return NULL;
diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c
index 3392208..1ccad8e 100644
--- a/Modules/_ctypes/_ctypes_test.c
+++ b/Modules/_ctypes/_ctypes_test.c
@@ -4,11 +4,7 @@
 #include <windows.h>
 #endif
 
-#if defined(MS_WIN32) || defined(__CYGWIN__)
-#define EXPORT(x) __declspec(dllexport) x
-#else
-#define EXPORT(x) x
-#endif
+#define EXPORT(x) Py_EXPORTED_SYMBOL x
 
 /* some functions handy for testing */
 
@@ -598,30 +594,6 @@
 #endif
 };
 
-EXPORT(void) set_bitfields(struct BITS *bits, char name, int value)
-{
-    switch (name) {
-    case 'A': bits->A = value; break;
-    case 'B': bits->B = value; break;
-    case 'C': bits->C = value; break;
-    case 'D': bits->D = value; break;
-    case 'E': bits->E = value; break;
-    case 'F': bits->F = value; break;
-    case 'G': bits->G = value; break;
-    case 'H': bits->H = value; break;
-    case 'I': bits->I = value; break;
-#ifdef SIGNED_SHORT_BITFIELDS
-    case 'M': bits->M = value; break;
-    case 'N': bits->N = value; break;
-    case 'O': bits->O = value; break;
-    case 'P': bits->P = value; break;
-    case 'Q': bits->Q = value; break;
-    case 'R': bits->R = value; break;
-    case 'S': bits->S = value; break;
-#endif
-    }
-}
-
 EXPORT(int) unpack_bitfields(struct BITS *bits, char name)
 {
     switch (name) {
@@ -1060,14 +1032,17 @@
 
 #endif
 
+static struct PyModuleDef_Slot _ctypes_test_slots[] = {
+    {0, NULL}
+}; 
 
 static struct PyModuleDef _ctypes_testmodule = {
     PyModuleDef_HEAD_INIT,
     "_ctypes_test",
     NULL,
-    -1,
+    0,
     module_methods,
-    NULL,
+    _ctypes_test_slots,
     NULL,
     NULL,
     NULL
@@ -1076,5 +1051,5 @@
 PyMODINIT_FUNC
 PyInit__ctypes_test(void)
 {
-    return PyModule_Create(&_ctypes_testmodule);
+    return PyModuleDef_Init(&_ctypes_testmodule);
 }
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 2a364d6..19c77f4 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -1,6 +1,8 @@
 #include "Python.h"
 #include "frameobject.h"
 
+#include <stdbool.h>
+
 #include <ffi.h>
 #ifdef MS_WIN32
 #include <windows.h>
@@ -18,7 +20,7 @@
     Py_XDECREF(self->callable);
     Py_XDECREF(self->restype);
     if (self->pcl_write)
-        ffi_closure_free(self->pcl_write);
+        Py_ffi_closure_free(self->pcl_write);
     PyObject_GC_Del(self);
 }
 
@@ -84,7 +86,7 @@
     va_list marker;
 
     va_start(marker, msg);
-    vsnprintf(buf, sizeof(buf), msg, marker);
+    PyOS_vsnprintf(buf, sizeof(buf), msg, marker);
     va_end(marker);
     if (f != NULL && f != Py_None)
         PyFile_WriteString(buf, f);
@@ -361,8 +363,7 @@
 
     assert(CThunk_CheckExact((PyObject *)p));
 
-    p->pcl_write = ffi_closure_alloc(sizeof(ffi_closure),
-                                                                         &p->pcl_exec);
+    p->pcl_write = Py_ffi_closure_alloc(sizeof(ffi_closure), &p->pcl_exec);
     if (p->pcl_write == NULL) {
         PyErr_NoMemory();
         goto error;
@@ -408,13 +409,42 @@
                      "ffi_prep_cif failed with %d", result);
         goto error;
     }
-#if defined(X86_DARWIN) || defined(POWERPC_DARWIN)
-    result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
-#else
-    result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn,
-                                  p,
-                                  p->pcl_exec);
+#if HAVE_FFI_PREP_CLOSURE_LOC
+#   if USING_APPLE_OS_LIBFFI
+#      define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
+#   else
+#      define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME 1
+#   endif
+    if (HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME) {
+        result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn,
+                                    p,
+                                    p->pcl_exec);
+    } else
 #endif
+    {
+#if USING_APPLE_OS_LIBFFI && defined(__arm64__)
+        PyErr_Format(PyExc_NotImplementedError, "ffi_prep_closure_loc() is missing");
+        goto error;
+#else
+#if defined(__clang__) || defined(MACOSX)
+        #pragma clang diagnostic push
+        #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif
+#if defined(__GNUC__)
+        #pragma GCC diagnostic push
+        #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+        result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
+
+#if defined(__clang__) || defined(MACOSX)
+        #pragma clang diagnostic pop
+#endif
+#if defined(__GNUC__)
+        #pragma GCC diagnostic pop
+#endif
+
+#endif
+    }
     if (result != FFI_OK) {
         PyErr_Format(PyExc_RuntimeError,
                      "ffi_prep_closure failed with %d", result);
@@ -438,7 +468,6 @@
 {
     if (!Py_IsInitialized()) {
         Py_Initialize();
-        PyEval_InitThreads();
     }
 }
 
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index a9b8675..b0a36a3 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -55,7 +55,9 @@
  */
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
+
+#include <stdbool.h>
 
 #ifdef MS_WIN32
 #include <windows.h>
@@ -64,6 +66,10 @@
 #include "ctypes_dlfcn.h"
 #endif
 
+#ifdef __APPLE__
+#include <mach-o/dyld.h>
+#endif
+
 #ifdef MS_WIN32
 #include <malloc.h>
 #endif
@@ -156,10 +162,9 @@
         Py_INCREF(errobj);
     }
     else if (!PyErr_Occurred()) {
-        void *space = PyMem_Malloc(sizeof(int) * 2);
+        void *space = PyMem_Calloc(2, sizeof(int));
         if (space == NULL)
             return NULL;
-        memset(space, 0, sizeof(int) * 2);
         errobj = PyCapsule_New(space, CTYPES_CAPSULE_NAME_PYMEM, pymem_destructor);
         if (errobj == NULL) {
             PyMem_Free(space);
@@ -752,7 +757,7 @@
 #if defined(MS_WIN32) && !defined(_WIN32_WCE)
 /*
 Per: https://msdn.microsoft.com/en-us/library/7572ztz4.aspx
-To be returned by value in RAX, user-defined types must have a length 
+To be returned by value in RAX, user-defined types must have a length
 of 1, 2, 4, 8, 16, 32, or 64 bits
 */
 int can_return_struct_as_int(size_t s)
@@ -813,7 +818,8 @@
                                   ffi_type **atypes,
                                   ffi_type *restype,
                                   void *resmem,
-                                  int argcount)
+                                  int argcount,
+                                  int argtypecount)
 {
     PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */
     PyObject *error_object = NULL;
@@ -836,14 +842,70 @@
     if ((flags & FUNCFLAG_CDECL) == 0)
         cc = FFI_STDCALL;
 #endif
-    if (FFI_OK != ffi_prep_cif(&cif,
-                               cc,
-                               argcount,
-                               restype,
-                               atypes)) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        "ffi_prep_cif failed");
-        return -1;
+
+#   if USING_APPLE_OS_LIBFFI
+#      define HAVE_FFI_PREP_CIF_VAR_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
+#   elif HAVE_FFI_PREP_CIF_VAR
+#      define HAVE_FFI_PREP_CIF_VAR_RUNTIME true
+#   else
+#      define HAVE_FFI_PREP_CIF_VAR_RUNTIME false
+#   endif
+
+    /* Even on Apple-arm64 the calling convention for variadic functions conincides
+     * with the standard calling convention in the case that the function called
+     * only with its fixed arguments.   Thus, we do not need a special flag to be
+     * set on variadic functions.   We treat a function as variadic if it is called
+     * with a nonzero number of variadic arguments */
+    bool is_variadic = (argtypecount != 0 && argcount > argtypecount);
+    (void) is_variadic;
+
+#if defined(__APPLE__) && defined(__arm64__)
+    if (is_variadic) {
+        if (HAVE_FFI_PREP_CIF_VAR_RUNTIME) {
+        } else {
+            PyErr_SetString(PyExc_NotImplementedError, "ffi_prep_cif_var() is missing");
+            return -1;
+        }
+    }
+#endif
+
+#if HAVE_FFI_PREP_CIF_VAR
+    if (is_variadic) {
+        if (HAVE_FFI_PREP_CIF_VAR_RUNTIME) {
+            if (FFI_OK != ffi_prep_cif_var(&cif,
+                                        cc,
+                                        argtypecount,
+                                        argcount,
+                                        restype,
+                                        atypes)) {
+                PyErr_SetString(PyExc_RuntimeError,
+                                "ffi_prep_cif_var failed");
+                return -1;
+            }
+        } else {
+            if (FFI_OK != ffi_prep_cif(&cif,
+                                       cc,
+                                       argcount,
+                                       restype,
+                                       atypes)) {
+                PyErr_SetString(PyExc_RuntimeError,
+                                "ffi_prep_cif failed");
+                return -1;
+            }
+        }
+    } else
+#endif
+
+    {
+        if (FFI_OK != ffi_prep_cif(&cif,
+                                   cc,
+                                   argcount,
+                                   restype,
+                                   atypes)) {
+            PyErr_SetString(PyExc_RuntimeError,
+                            "ffi_prep_cif failed");
+            return -1;
+        }
     }
 
     if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) {
@@ -945,7 +1007,7 @@
     if (!checker || !retval)
         return retval;
 
-    v = PyObject_CallFunctionObjArgs(checker, retval, NULL);
+    v = PyObject_CallOneArg(checker, retval);
     if (v == NULL)
         _PyTraceback_Add("GetResult", "_ctypes/callproc.c", __LINE__-2);
     Py_DECREF(retval);
@@ -1153,7 +1215,7 @@
         if (argtypes && argtype_count > i) {
             PyObject *v;
             converter = PyTuple_GET_ITEM(argtypes, i);
-            v = PyObject_CallFunctionObjArgs(converter, arg, NULL);
+            v = PyObject_CallOneArg(converter, arg);
             if (v == NULL) {
                 _ctypes_extend_error(PyExc_ArgError, "argument %zd: ", i+1);
                 goto cleanup;
@@ -1213,9 +1275,8 @@
 
     if (-1 == _call_function_pointer(flags, pProc, avalues, atypes,
                                      rtype, resbuf,
-                                     Py_SAFE_DOWNCAST(argcount,
-                                                      Py_ssize_t,
-                                                      int)))
+                                     Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int),
+                                     Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int)))
         goto cleanup;
 
 #ifdef WORDS_BIGENDIAN
@@ -1399,10 +1460,46 @@
 }
 #else
 
+#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
+static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args)
+{
+     PyObject *name, *name2;
+     char *name_str;
+
+     if (__builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)) {
+         int r;
+
+         if (!PyArg_ParseTuple(args, "O", &name))
+             return NULL;
+    
+         if (name == Py_None)
+             Py_RETURN_FALSE;
+    
+         if (PyUnicode_FSConverter(name, &name2) == 0)
+             return NULL;
+         name_str = PyBytes_AS_STRING(name2);
+    
+         r = _dyld_shared_cache_contains_path(name_str);
+         Py_DECREF(name2);
+
+         if (r) {
+             Py_RETURN_TRUE;
+         } else {
+             Py_RETURN_FALSE;
+         }
+
+     } else {
+         PyErr_SetString(PyExc_NotImplementedError, "_dyld_shared_cache_contains_path symbol is missing");
+         return NULL;
+     }
+
+ }
+#endif
+
 static PyObject *py_dl_open(PyObject *self, PyObject *args)
 {
     PyObject *name, *name2;
-    char *name_str;
+    const char *name_str;
     void * handle;
 #if HAVE_DECL_RTLD_LOCAL
     int mode = RTLD_NOW | RTLD_LOCAL;
@@ -1726,10 +1823,9 @@
     if (!_CDataObject_HasExternalBuffer(obj)) {
         /* We are currently using the objects default buffer, but it
            isn't large enough any more. */
-        void *ptr = PyMem_Malloc(size);
+        void *ptr = PyMem_Calloc(1, size);
         if (ptr == NULL)
             return PyErr_NoMemory();
-        memset(ptr, 0, size);
         memmove(ptr, obj->b_ptr, obj->b_size);
         obj->b_ptr = ptr;
         obj->b_size = size;
@@ -1753,7 +1849,7 @@
 
     if (!PyArg_ParseTuple(args, "OO!", &typ, &PyTuple_Type, &state))
         return NULL;
-    obj = _PyObject_CallMethodIdObjArgs(typ, &PyId___new__, typ, NULL);
+    obj = _PyObject_CallMethodIdOneArg(typ, &PyId___new__, typ);
     if (obj == NULL)
         return NULL;
 
@@ -1849,7 +1945,7 @@
 
     typ = PyDict_GetItemWithError(_ctypes_ptrtype_cache, (PyObject *)Py_TYPE(arg));
     if (typ) {
-        return PyObject_CallFunctionObjArgs(typ, arg, NULL);
+        return PyObject_CallOneArg(typ, arg);
     }
     else if (PyErr_Occurred()) {
         return NULL;
@@ -1857,7 +1953,7 @@
     typ = POINTER(NULL, (PyObject *)Py_TYPE(arg));
     if (typ == NULL)
         return NULL;
-    result = PyObject_CallFunctionObjArgs(typ, arg, NULL);
+    result = PyObject_CallOneArg(typ, arg);
     Py_DECREF(typ);
     return result;
 }
@@ -1889,6 +1985,8 @@
     return Py_BuildValue("siN", dict->format, dict->ndim, shape);
 }
 
+
+
 PyMethodDef _ctypes_module_methods[] = {
     {"get_errno", get_errno, METH_NOARGS},
     {"set_errno", set_errno, METH_VARARGS},
@@ -1911,6 +2009,9 @@
     {"dlclose", py_dl_close, METH_VARARGS, "dlclose a library"},
     {"dlsym", py_dl_sym, METH_VARARGS, "find symbol in shared library"},
 #endif
+#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
+     {"_dyld_shared_cache_contains_path", py_dyld_shared_cache_contains_path, METH_VARARGS, "check if path is in the shared cache"},
+#endif
     {"alignment", align_func, METH_O, alignment_doc},
     {"sizeof", sizeof_func, METH_O, sizeof_doc},
     {"byref", byref, METH_VARARGS, byref_doc},
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index 95367d5..2261a59 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -1,4 +1,5 @@
 #include "Python.h"
+#include "pycore_byteswap.h"      // _Py_bswap32()
 
 #include <ffi.h>
 #ifdef MS_WIN32
@@ -60,8 +61,7 @@
 #define CONT_BITFIELD 2
 #define EXPAND_BITFIELD 3
 
-    self = (CFieldObject *)PyObject_CallObject((PyObject *)&PyCField_Type,
-                                               NULL);
+    self = (CFieldObject *)_PyObject_CallNoArg((PyObject *)&PyCField_Type);
     if (self == NULL)
         return NULL;
     dict = PyType_stgdict(desc);
@@ -275,7 +275,7 @@
 PyCField_dealloc(PyObject *self)
 {
     PyCField_clear((CFieldObject *)self);
-    self->ob_type->tp_free((PyObject *)self);
+    Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
 static PyObject *
@@ -449,46 +449,32 @@
      ( ( (type)x & ~(BIT_MASK(type, size) << LOW_BIT(size)) ) | ( ((type)v & BIT_MASK(type, size)) << LOW_BIT(size) ) ) \
      : (type)v)
 
-/* byte swapping macros */
-#define SWAP_2(v)                               \
-    ( ( (v >> 8) & 0x00FF) |                    \
-      ( (v << 8) & 0xFF00) )
-
-#define SWAP_4(v)                       \
-    ( ( (v & 0x000000FF) << 24 ) |  \
-      ( (v & 0x0000FF00) <<  8 ) |  \
-      ( (v & 0x00FF0000) >>  8 ) |  \
-      ( ((v >> 24) & 0xFF)) )
-
-#ifdef _MSC_VER
-#define SWAP_8(v)                               \
-    ( ( (v & 0x00000000000000FFL) << 56 ) |  \
-      ( (v & 0x000000000000FF00L) << 40 ) |  \
-      ( (v & 0x0000000000FF0000L) << 24 ) |  \
-      ( (v & 0x00000000FF000000L) <<  8 ) |  \
-      ( (v & 0x000000FF00000000L) >>  8 ) |  \
-      ( (v & 0x0000FF0000000000L) >> 24 ) |  \
-      ( (v & 0x00FF000000000000L) >> 40 ) |  \
-      ( ((v >> 56) & 0xFF)) )
+#if SIZEOF_SHORT == 2
+#  define SWAP_SHORT _Py_bswap16
 #else
-#define SWAP_8(v)                               \
-    ( ( (v & 0x00000000000000FFLL) << 56 ) |  \
-      ( (v & 0x000000000000FF00LL) << 40 ) |  \
-      ( (v & 0x0000000000FF0000LL) << 24 ) |  \
-      ( (v & 0x00000000FF000000LL) <<  8 ) |  \
-      ( (v & 0x000000FF00000000LL) >>  8 ) |  \
-      ( (v & 0x0000FF0000000000LL) >> 24 ) |  \
-      ( (v & 0x00FF000000000000LL) >> 40 ) |  \
-      ( ((v >> 56) & 0xFF)) )
+#  error "unsupported short size"
 #endif
 
-#define SWAP_INT SWAP_4
+#if SIZEOF_INT == 4
+#  define SWAP_INT _Py_bswap32
+#else
+#  error "unsupported int size"
+#endif
 
 #if SIZEOF_LONG == 4
-# define SWAP_LONG SWAP_4
+#  define SWAP_LONG _Py_bswap32
 #elif SIZEOF_LONG == 8
-# define SWAP_LONG SWAP_8
+#  define SWAP_LONG _Py_bswap64
+#else
+#  error "unsupported long size"
 #endif
+
+#if SIZEOF_LONG_LONG == 8
+#  define SWAP_LONG_LONG _Py_bswap64
+#else
+#  error "unsupported long long size"
+#endif
+
 /*****************************************************************
  * The setter methods return an object which must be kept alive, to keep the
  * data valid which has been stored in the memory block.  The ctypes object
@@ -570,12 +556,13 @@
 {
     long val;
     short field;
-    if (get_long(value, &val) < 0)
+    if (get_long(value, &val) < 0) {
         return NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
-    field = SWAP_2(field);
+    field = SWAP_SHORT(field);
     field = SET(short, field, val, size);
-    field = SWAP_2(field);
+    field = SWAP_SHORT(field);
     memcpy(ptr, &field, sizeof(field));
     _RET(value);
 }
@@ -594,7 +581,7 @@
 {
     short val;
     memcpy(&val, ptr, sizeof(val));
-    val = SWAP_2(val);
+    val = SWAP_SHORT(val);
     GET_BITFIELD(val, size);
     return PyLong_FromLong(val);
 }
@@ -617,12 +604,13 @@
 {
     unsigned long val;
     unsigned short field;
-    if (get_ulong(value, &val) < 0)
+    if (get_ulong(value, &val) < 0) {
         return NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
-    field = SWAP_2(field);
+    field = SWAP_SHORT(field);
     field = SET(unsigned short, field, val, size);
-    field = SWAP_2(field);
+    field = SWAP_SHORT(field);
     memcpy(ptr, &field, sizeof(field));
     _RET(value);
 }
@@ -642,7 +630,7 @@
 {
     unsigned short val;
     memcpy(&val, ptr, sizeof(val));
-    val = SWAP_2(val);
+    val = SWAP_SHORT(val);
     GET_BITFIELD(val, size);
     return PyLong_FromLong(val);
 }
@@ -665,8 +653,9 @@
 {
     long val;
     int field;
-    if (get_long(value, &val) < 0)
+    if (get_long(value, &val) < 0) {
         return NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
     field = SWAP_INT(field);
     field = SET(int, field, val, size);
@@ -695,7 +684,11 @@
     return PyLong_FromLong(val);
 }
 
-#ifdef MS_WIN32
+#ifndef MS_WIN32
+/* http://msdn.microsoft.com/en-us/library/cc237864.aspx */
+#define VARIANT_FALSE 0x0000
+#define VARIANT_TRUE 0xFFFF
+#endif
 /* short BOOL - VARIANT_BOOL */
 static PyObject *
 vBOOL_set(void *ptr, PyObject *value, Py_ssize_t size)
@@ -717,7 +710,6 @@
 {
     return PyBool_FromLong((long)*(short int *)ptr);
 }
-#endif
 
 static PyObject *
 bool_set(void *ptr, PyObject *value, Py_ssize_t size)
@@ -758,8 +750,9 @@
 {
     unsigned long val;
     unsigned int field;
-    if (get_ulong(value, &val) < 0)
+    if (get_ulong(value, &val) < 0) {
         return  NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
     field = SWAP_INT(field);
     field = SET(unsigned int, field, (unsigned int)val, size);
@@ -806,8 +799,9 @@
 {
     long val;
     long field;
-    if (get_long(value, &val) < 0)
+    if (get_long(value, &val) < 0) {
         return NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
     field = SWAP_LONG(field);
     field = SET(long, field, val, size);
@@ -854,8 +848,9 @@
 {
     unsigned long val;
     unsigned long field;
-    if (get_ulong(value, &val) < 0)
+    if (get_ulong(value, &val) < 0) {
         return  NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
     field = SWAP_LONG(field);
     field = SET(unsigned long, field, val, size);
@@ -902,12 +897,13 @@
 {
     long long val;
     long long field;
-    if (get_longlong(value, &val) < 0)
+    if (get_longlong(value, &val) < 0) {
         return NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
-    field = SWAP_8(field);
+    field = SWAP_LONG_LONG(field);
     field = SET(long long, field, val, size);
-    field = SWAP_8(field);
+    field = SWAP_LONG_LONG(field);
     memcpy(ptr, &field, sizeof(field));
     _RET(value);
 }
@@ -926,7 +922,7 @@
 {
     long long val;
     memcpy(&val, ptr, sizeof(val));
-    val = SWAP_8(val);
+    val = SWAP_LONG_LONG(val);
     GET_BITFIELD(val, size);
     return PyLong_FromLongLong(val);
 }
@@ -949,12 +945,13 @@
 {
     unsigned long long val;
     unsigned long long field;
-    if (get_ulonglong(value, &val) < 0)
+    if (get_ulonglong(value, &val) < 0) {
         return NULL;
+    }
     memcpy(&field, ptr, sizeof(field));
-    field = SWAP_8(field);
+    field = SWAP_LONG_LONG(field);
     field = SET(unsigned long long, field, val, size);
-    field = SWAP_8(field);
+    field = SWAP_LONG_LONG(field);
     memcpy(ptr, &field, sizeof(field));
     _RET(value);
 }
@@ -973,7 +970,7 @@
 {
     unsigned long long val;
     memcpy(&val, ptr, sizeof(val));
-    val = SWAP_8(val);
+    val = SWAP_LONG_LONG(val);
     GET_BITFIELD(val, size);
     return PyLong_FromUnsignedLongLong(val);
 }
@@ -1176,7 +1173,7 @@
     if (!PyUnicode_Check(value)) {
         PyErr_Format(PyExc_TypeError,
                         "unicode string expected instead of %s instance",
-                        value->ob_type->tp_name);
+                        Py_TYPE(value)->tp_name);
         return NULL;
     } else
         Py_INCREF(value);
@@ -1235,7 +1232,7 @@
     if (!PyUnicode_Check(value)) {
         PyErr_Format(PyExc_TypeError,
                         "unicode string expected instead of %s instance",
-                        value->ob_type->tp_name);
+                        Py_TYPE(value)->tp_name);
         return NULL;
     }
 
@@ -1284,13 +1281,13 @@
 static PyObject *
 s_set(void *ptr, PyObject *value, Py_ssize_t length)
 {
-    char *data;
+    const char *data;
     Py_ssize_t size;
 
     if(!PyBytes_Check(value)) {
         PyErr_Format(PyExc_TypeError,
                      "expected bytes, %s found",
-                     value->ob_type->tp_name);
+                     Py_TYPE(value)->tp_name);
         return NULL;
     }
 
@@ -1322,7 +1319,7 @@
         return value;
     }
     if (PyBytes_Check(value)) {
-        *(char **)ptr = PyBytes_AsString(value);
+        *(const char **)ptr = PyBytes_AsString(value);
         Py_INCREF(value);
         return value;
     } else if (PyLong_Check(value)) {
@@ -1335,7 +1332,7 @@
     }
     PyErr_Format(PyExc_TypeError,
                  "bytes or integer address expected instead of %s instance",
-                 value->ob_type->tp_name);
+                 Py_TYPE(value)->tp_name);
     return NULL;
 }
 
@@ -1374,7 +1371,7 @@
     if (!PyUnicode_Check(value)) {
         PyErr_Format(PyExc_TypeError,
                      "unicode string or integer address expected instead of %s instance",
-                     value->ob_type->tp_name);
+                     Py_TYPE(value)->tp_name);
         return NULL;
     }
 
@@ -1417,7 +1414,7 @@
     } else if (!PyUnicode_Check(value)) {
         PyErr_Format(PyExc_TypeError,
                         "unicode string expected instead of %s instance",
-                        value->ob_type->tp_name);
+                        Py_TYPE(value)->tp_name);
         return NULL;
     }
 
@@ -1544,8 +1541,8 @@
 #endif
 #ifdef MS_WIN32
     { 'X', BSTR_set, BSTR_get, &ffi_type_pointer},
-    { 'v', vBOOL_set, vBOOL_get, &ffi_type_sshort},
 #endif
+    { 'v', vBOOL_set, vBOOL_get, &ffi_type_sshort},
 #if SIZEOF__BOOL == 1
     { '?', bool_set, bool_get, &ffi_type_uchar}, /* Also fallback for no native _Bool support */
 #elif SIZEOF__BOOL == SIZEOF_SHORT
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index e58f852..3f20031 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -68,7 +68,7 @@
     ffi_type *atypes[1];
 } CThunkObject;
 extern PyTypeObject PyCThunk_Type;
-#define CThunk_CheckExact(v)        ((v)->ob_type == &PyCThunk_Type)
+#define CThunk_CheckExact(v)        Py_IS_TYPE(v, &PyCThunk_Type)
 
 typedef struct {
     /* First part identical to tagCDataObject */
@@ -102,7 +102,7 @@
 } PyCFuncPtrObject;
 
 extern PyTypeObject PyCStgDict_Type;
-#define PyCStgDict_CheckExact(v)            ((v)->ob_type == &PyCStgDict_Type)
+#define PyCStgDict_CheckExact(v)            Py_IS_TYPE(v, &PyCStgDict_Type)
 #define PyCStgDict_Check(v)         PyObject_TypeCheck(v, &PyCStgDict_Type)
 
 extern int PyCStructUnionType_update_stgdict(PyObject *fields, PyObject *type, int isStruct);
@@ -112,12 +112,12 @@
 
 
 extern PyTypeObject PyCData_Type;
-#define CDataObject_CheckExact(v)       ((v)->ob_type == &PyCData_Type)
+#define CDataObject_CheckExact(v)       Py_IS_TYPE(v, &PyCData_Type)
 #define CDataObject_Check(v)            PyObject_TypeCheck(v, &PyCData_Type)
 #define _CDataObject_HasExternalBuffer(v)  ((v)->b_ptr != (char *)&(v)->b_value)
 
 extern PyTypeObject PyCSimpleType_Type;
-#define PyCSimpleTypeObject_CheckExact(v)       ((v)->ob_type == &PyCSimpleType_Type)
+#define PyCSimpleTypeObject_CheckExact(v)       Py_IS_TYPE(v, &PyCSimpleType_Type)
 #define PyCSimpleTypeObject_Check(v)    PyObject_TypeCheck(v, &PyCSimpleType_Type)
 
 extern PyTypeObject PyCField_Type;
@@ -314,7 +314,7 @@
 };
 
 extern PyTypeObject PyCArg_Type;
-#define PyCArg_CheckExact(v)        ((v)->ob_type == &PyCArg_Type)
+#define PyCArg_CheckExact(v)        Py_IS_TYPE(v, &PyCArg_Type)
 extern PyCArgObject *PyCArgObject_new(void);
 
 extern PyObject *
@@ -366,6 +366,14 @@
 extern PyObject *ComError;
 #endif
 
+#if USING_MALLOC_CLOSURE_DOT_C
+void Py_ffi_closure_free(void *p);
+void *Py_ffi_closure_alloc(size_t size, void** codeloc);
+#else
+#define Py_ffi_closure_free ffi_closure_free
+#define Py_ffi_closure_alloc ffi_closure_alloc
+#endif
+
 /*
  Local Variables:
  compile-command: "python setup.py -q build install --home ~"
diff --git a/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c b/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c
index f2610c1..8e7d0164 100644
--- a/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c
+++ b/Modules/_ctypes/libffi_osx/x86/x86-ffi64.c
@@ -57,7 +57,7 @@
 	of SSESF, SSEDF classes, that are basically SSE class, just gcc will
 	use SF or DFmode move instead of DImode to avoid reformating penalties.
 
-	Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves
+	Similarly we play games with INTEGERSI_CLASS to use cheaper SImode moves
 	whenever possible (upper half does contain padding).  */
 enum x86_64_reg_class
 {
diff --git a/Modules/_ctypes/malloc_closure.c b/Modules/_ctypes/malloc_closure.c
index f9cdb33..4f220e4 100644
--- a/Modules/_ctypes/malloc_closure.c
+++ b/Modules/_ctypes/malloc_closure.c
@@ -89,16 +89,27 @@
 /******************************************************************/
 
 /* put the item back into the free list */
-void ffi_closure_free(void *p)
+void Py_ffi_closure_free(void *p)
 {
+#if USING_APPLE_OS_LIBFFI && HAVE_FFI_CLOSURE_ALLOC
+    if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) {
+        ffi_closure_free(p);
+        return;
+    }
+#endif
     ITEM *item = (ITEM *)p;
     item->next = free_list;
     free_list = item;
 }
 
 /* return one item from the free list, allocating more if needed */
-void *ffi_closure_alloc(size_t ignored, void** codeloc)
+void *Py_ffi_closure_alloc(size_t size, void** codeloc)
 {
+#if USING_APPLE_OS_LIBFFI && HAVE_FFI_CLOSURE_ALLOC
+    if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) {
+        return ffi_closure_alloc(size, codeloc);
+    }
+#endif
     ITEM *item;
     if (!free_list)
         more_core();
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index 1d45ade..443951a 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -190,7 +190,7 @@
 StgDictObject *
 PyObject_stgdict(PyObject *self)
 {
-    PyTypeObject *type = self->ob_type;
+    PyTypeObject *type = Py_TYPE(self);
     if (!type->tp_dict || !PyCStgDict_CheckExact(type->tp_dict))
         return NULL;
     return (StgDictObject *)type->tp_dict;
@@ -231,7 +231,7 @@
             Py_DECREF(fieldlist);
             return -1;
         }
-        if (Py_TYPE(fdescr) != &PyCField_Type) {
+        if (!Py_IS_TYPE(fdescr, &PyCField_Type)) {
             PyErr_SetString(PyExc_TypeError, "unexpected type");
             Py_DECREF(fdescr);
             Py_DECREF(fieldlist);
@@ -254,7 +254,7 @@
             Py_DECREF(fieldlist);
             return -1;
         }
-        assert(Py_TYPE(new_descr) == &PyCField_Type);
+        assert(Py_IS_TYPE(new_descr, &PyCField_Type));
         new_descr->size = fdescr->size;
         new_descr->offset = fdescr->offset + offset;
         new_descr->index = fdescr->index + index;
@@ -304,7 +304,7 @@
             Py_DECREF(anon_names);
             return -1;
         }
-        if (Py_TYPE(descr) != &PyCField_Type) {
+        if (!Py_IS_TYPE(descr, &PyCField_Type)) {
             PyErr_Format(PyExc_AttributeError,
                          "'%U' is specified in _anonymous_ but not in "
                          "_fields_",
diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c
index 53849e3..f124803 100644
--- a/Modules/_curses_panel.c
+++ b/Modules/_curses_panel.c
@@ -21,19 +21,26 @@
     PyObject *PyCursesPanel_Type;
 } _curses_panelstate;
 
-#define _curses_panelstate(o) ((_curses_panelstate *)PyModule_GetState(o))
+static inline _curses_panelstate*
+get_curses_panelstate(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_curses_panelstate *)state;
+}
 
 static int
 _curses_panel_clear(PyObject *m)
 {
-    Py_CLEAR(_curses_panelstate(m)->PyCursesError);
+    Py_CLEAR(get_curses_panelstate(m)->PyCursesError);
     return 0;
 }
 
 static int
 _curses_panel_traverse(PyObject *m, visitproc visit, void *arg)
 {
-    Py_VISIT(_curses_panelstate(m)->PyCursesError);
+    Py_VISIT(Py_TYPE(m));
+    Py_VISIT(get_curses_panelstate(m)->PyCursesError);
     return 0;
 }
 
@@ -83,7 +90,7 @@
 } PyCursesPanelObject;
 
 #define PyCursesPanel_Check(v)  \
- (Py_TYPE(v) == _curses_panelstate_global->PyCursesPanel_Type)
+ Py_IS_TYPE(v, _curses_panelstate_global->PyCursesPanel_Type)
 
 /* Some helper functions. The problem is that there's always a window
    associated with a panel. To ensure that Python's GC doesn't pull
@@ -233,7 +240,7 @@
 {
     PyCursesPanelObject *po;
 
-    po = PyObject_NEW(PyCursesPanelObject,
+    po = PyObject_New(PyCursesPanelObject,
                       (PyTypeObject *)(_curses_panelstate_global)->PyCursesPanel_Type);
     if (po == NULL) return NULL;
     po->pan = pan;
@@ -645,15 +652,15 @@
     if (v == NULL)
         goto fail;
     ((PyTypeObject *)v)->tp_new = NULL;
-    _curses_panelstate(m)->PyCursesPanel_Type = v;
+    get_curses_panelstate(m)->PyCursesPanel_Type = v;
 
     import_curses();
     if (PyErr_Occurred())
         goto fail;
 
     /* For exception _curses_panel.error */
-    _curses_panelstate(m)->PyCursesError = PyErr_NewException("_curses_panel.error", NULL, NULL);
-    PyDict_SetItemString(d, "error", _curses_panelstate(m)->PyCursesError);
+    get_curses_panelstate(m)->PyCursesError = PyErr_NewException("_curses_panel.error", NULL, NULL);
+    PyDict_SetItemString(d, "error", get_curses_panelstate(m)->PyCursesError);
 
     /* Make the version available */
     v = PyUnicode_FromString(PyCursesVersion);
@@ -661,8 +668,9 @@
     PyDict_SetItemString(d, "__version__", v);
     Py_DECREF(v);
 
-    Py_INCREF(_curses_panelstate(m)->PyCursesPanel_Type);
-    PyModule_AddObject(m, "panel", (PyObject *)_curses_panelstate(m)->PyCursesPanel_Type);
+    Py_INCREF(get_curses_panelstate(m)->PyCursesPanel_Type);
+    PyModule_AddObject(m, "panel",
+                       (PyObject *)get_curses_panelstate(m)->PyCursesPanel_Type);
     return m;
   fail:
     Py_XDECREF(m);
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index b2b1117..c70b0e2 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -547,7 +547,7 @@
             encoding = "utf-8";
     }
 
-    wo = PyObject_NEW(PyCursesWindowObject, &PyCursesWindow_Type);
+    wo = PyObject_New(PyCursesWindowObject, &PyCursesWindow_Type);
     if (wo == NULL) return NULL;
     wo->win = win;
     wo->encoding = _PyMem_Strdup(encoding);
@@ -709,7 +709,7 @@
     else
 #endif
     {
-        char *str = PyBytes_AS_STRING(bytesobj);
+        const char *str = PyBytes_AS_STRING(bytesobj);
         funcname = "addstr";
         if (use_xy)
             rtn = mvwaddstr(self->win,y,x,str);
@@ -792,7 +792,7 @@
     else
 #endif
     {
-        char *str = PyBytes_AS_STRING(bytesobj);
+        const char *str = PyBytes_AS_STRING(bytesobj);
         funcname = "addnstr";
         if (use_xy)
             rtn = mvwaddnstr(self->win,y,x,str,n);
@@ -1710,7 +1710,7 @@
     else
 #endif
     {
-        char *str = PyBytes_AS_STRING(bytesobj);
+        const char *str = PyBytes_AS_STRING(bytesobj);
         funcname = "insstr";
         if (use_xy)
             rtn = mvwinsstr(self->win,y,x,str);
@@ -1795,7 +1795,7 @@
     else
 #endif
     {
-        char *str = PyBytes_AS_STRING(bytesobj);
+        const char *str = PyBytes_AS_STRING(bytesobj);
         funcname = "insnstr";
         if (use_xy)
             rtn = mvwinsnstr(self->win,y,x,str,n);
@@ -2918,13 +2918,13 @@
     if (_Py_set_inheritable(fileno(fp), 0, NULL) < 0)
         goto error;
 
-    data = _PyObject_CallMethodId(file, &PyId_read, NULL);
+    data = _PyObject_CallMethodIdNoArgs(file, &PyId_read);
     if (data == NULL)
         goto error;
     if (!PyBytes_Check(data)) {
         PyErr_Format(PyExc_TypeError,
                      "f.read() returned %.100s instead of bytes",
-                     data->ob_type->tp_name);
+                     Py_TYPE(data)->tp_name);
         Py_DECREF(data);
         goto error;
     }
@@ -3255,6 +3255,90 @@
     Py_RETURN_NONE;
 }
 
+#if defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102
+// https://invisible-island.net/ncurses/NEWS.html#index-t20080119
+
+/*[clinic input]
+_curses.get_escdelay
+
+Gets the curses ESCDELAY setting.
+
+Gets the number of milliseconds to wait after reading an escape character,
+to distinguish between an individual escape character entered on the
+keyboard from escape sequences sent by cursor and function keys.
+[clinic start generated code]*/
+
+static PyObject *
+_curses_get_escdelay_impl(PyObject *module)
+/*[clinic end generated code: output=222fa1a822555d60 input=be2d5b3dd974d0a4]*/
+{
+    return PyLong_FromLong(ESCDELAY);
+}
+/*[clinic input]
+_curses.set_escdelay
+    ms: int
+        length of the delay in milliseconds.
+    /
+
+Sets the curses ESCDELAY setting.
+
+Sets the number of milliseconds to wait after reading an escape character,
+to distinguish between an individual escape character entered on the
+keyboard from escape sequences sent by cursor and function keys.
+[clinic start generated code]*/
+
+static PyObject *
+_curses_set_escdelay_impl(PyObject *module, int ms)
+/*[clinic end generated code: output=43818efbf7980ac4 input=7796fe19f111e250]*/
+{
+    if (ms <= 0) {
+        PyErr_SetString(PyExc_ValueError, "ms must be > 0");
+        return NULL;
+    }
+
+    return PyCursesCheckERR(set_escdelay(ms), "set_escdelay");
+}
+
+/*[clinic input]
+_curses.get_tabsize
+
+Gets the curses TABSIZE setting.
+
+Gets the number of columns used by the curses library when converting a tab
+character to spaces as it adds the tab to a window.
+[clinic start generated code]*/
+
+static PyObject *
+_curses_get_tabsize_impl(PyObject *module)
+/*[clinic end generated code: output=7e9e51fb6126fbdf input=74af86bf6c9f5d7e]*/
+{
+    return PyLong_FromLong(TABSIZE);
+}
+/*[clinic input]
+_curses.set_tabsize
+    size: int
+        rendered cell width of a tab character.
+    /
+
+Sets the curses TABSIZE setting.
+
+Sets the number of columns used by the curses library when converting a tab
+character to spaces as it adds the tab to a window.
+[clinic start generated code]*/
+
+static PyObject *
+_curses_set_tabsize_impl(PyObject *module, int size)
+/*[clinic end generated code: output=c1de5a76c0daab1e input=78cba6a3021ad061]*/
+{
+    if (size <= 0) {
+        PyErr_SetString(PyExc_ValueError, "size must be > 0");
+        return NULL;
+    }
+
+    return PyCursesCheckERR(set_tabsize(size), "set_tabsize");
+}
+#endif
+
 /*[clinic input]
 _curses.intrflush
 
@@ -3730,7 +3814,7 @@
         return 0;
     }
     /* PyId_LINES.object will be initialized here. */
-    if (PyDict_SetItem(ModDict, PyId_LINES.object, o)) {
+    if (PyDict_SetItem(ModDict, _PyUnicode_FromId(&PyId_LINES), o)) {
         Py_DECREF(m);
         Py_DECREF(o);
         return 0;
@@ -3746,7 +3830,7 @@
         Py_DECREF(o);
         return 0;
     }
-    if (PyDict_SetItem(ModDict, PyId_COLS.object, o)) {
+    if (PyDict_SetItem(ModDict, _PyUnicode_FromId(&PyId_COLS), o)) {
         Py_DECREF(m);
         Py_DECREF(o);
         return 0;
@@ -3757,15 +3841,18 @@
 }
 
 /*[clinic input]
-_curses.update_lines_cols -> int
+_curses.update_lines_cols
 
 [clinic start generated code]*/
 
-static int
+static PyObject *
 _curses_update_lines_cols_impl(PyObject *module)
-/*[clinic end generated code: output=0345e7f072ea711a input=3a87760f7d5197f0]*/
+/*[clinic end generated code: output=423f2b1e63ed0f75 input=5f065ab7a28a5d90]*/
 {
-  return update_lines_cols();
+    if (!update_lines_cols()) {
+        return NULL;
+    }
+    Py_RETURN_NONE;
 }
 
 #endif
@@ -3849,8 +3936,10 @@
     result = PyCursesCheckERR(resizeterm(nlines, ncols), "resizeterm");
     if (!result)
         return NULL;
-    if (!update_lines_cols())
+    if (!update_lines_cols()) {
+        Py_DECREF(result);
         return NULL;
+    }
     return result;
 }
 
@@ -3886,8 +3975,10 @@
     result = PyCursesCheckERR(resize_term(nlines, ncols), "resize_term");
     if (!result)
         return NULL;
-    if (!update_lines_cols())
+    if (!update_lines_cols()) {
+        Py_DECREF(result);
         return NULL;
+    }
     return result;
 }
 #endif /* HAVE_CURSES_RESIZE_TERM */
@@ -3958,12 +4049,18 @@
         c = PyLong_FromLong((long) COLORS);
         if (c == NULL)
             return NULL;
-        PyDict_SetItemString(ModDict, "COLORS", c);
+        if (PyDict_SetItemString(ModDict, "COLORS", c) < 0) {
+            Py_DECREF(c);
+            return NULL;
+        }
         Py_DECREF(c);
         cp = PyLong_FromLong((long) COLOR_PAIRS);
         if (cp == NULL)
             return NULL;
-        PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
+        if (PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp) < 0) {
+            Py_DECREF(cp);
+            return NULL;
+        }
         Py_DECREF(cp);
         Py_RETURN_NONE;
     } else {
@@ -4415,6 +4512,12 @@
     _CURSES_RESIZETERM_METHODDEF
     _CURSES_RESIZE_TERM_METHODDEF
     _CURSES_SAVETTY_METHODDEF
+#if defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102
+    _CURSES_GET_ESCDELAY_METHODDEF
+    _CURSES_SET_ESCDELAY_METHODDEF
+#endif
+    _CURSES_GET_TABSIZE_METHODDEF
+    _CURSES_SET_TABSIZE_METHODDEF
     _CURSES_SETSYX_METHODDEF
     _CURSES_SETUPTERM_METHODDEF
     _CURSES_START_COLOR_METHODDEF
@@ -4637,7 +4740,8 @@
         SetDictInt("KEY_MAX", KEY_MAX);
     }
 
-    Py_INCREF(&PyCursesWindow_Type);
-    PyModule_AddObject(m, "window", (PyObject *)&PyCursesWindow_Type);
+    if (PyModule_AddType(m, &PyCursesWindow_Type) < 0) {
+        return NULL;
+    }
     return m;
 }
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index 41c3f34..4e0c378 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -9,7 +9,7 @@
 
 #include "Python.h"
 #include "datetime.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #include <time.h>
 
@@ -18,19 +18,19 @@
 #endif
 
 #define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType)
-#define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType)
+#define PyDate_CheckExact(op) Py_IS_TYPE(op, &PyDateTime_DateType)
 
 #define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType)
-#define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType)
+#define PyDateTime_CheckExact(op) Py_IS_TYPE(op, &PyDateTime_DateTimeType)
 
 #define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType)
-#define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType)
+#define PyTime_CheckExact(op) Py_IS_TYPE(op, &PyDateTime_TimeType)
 
 #define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType)
-#define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType)
+#define PyDelta_CheckExact(op) Py_IS_TYPE(op, &PyDateTime_DeltaType)
 
 #define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType)
-#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType)
+#define PyTZInfo_CheckExact(op) Py_IS_TYPE(op, &PyDateTime_TZInfoType)
 
 #define PyTimezone_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeZoneType)
 
@@ -38,8 +38,9 @@
 module datetime
 class datetime.datetime "PyDateTime_DateTime *" "&PyDateTime_DateTimeType"
 class datetime.date "PyDateTime_Date *" "&PyDateTime_DateType"
+class datetime.IsoCalendarDate "PyDateTime_IsoCalendarDate *" "&PyDateTime_IsoCalendarDateType"
 [clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=25138ad6a696b785]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=81bec0fa19837f63]*/
 
 #include "clinic/_datetimemodule.c.h"
 
@@ -131,6 +132,7 @@
 static PyTypeObject PyDateTime_DateType;
 static PyTypeObject PyDateTime_DateTimeType;
 static PyTypeObject PyDateTime_DeltaType;
+static PyTypeObject PyDateTime_IsoCalendarDateType;
 static PyTypeObject PyDateTime_TimeType;
 static PyTypeObject PyDateTime_TZInfoType;
 static PyTypeObject PyDateTime_TimeZoneType;
@@ -1242,8 +1244,7 @@
     if (tzinfo == Py_None)
         Py_RETURN_NONE;
 
-    result = _PyObject_CallMethodIdObjArgs(tzinfo, &PyId_tzname,
-                                           tzinfoarg, NULL);
+    result = _PyObject_CallMethodIdOneArg(tzinfo, &PyId_tzname, tzinfoarg);
 
     if (result == NULL || result == Py_None)
         return result;
@@ -1533,8 +1534,8 @@
             ntoappend = 1;
         }
         else if ((ch = *pin++) == '\0') {
-        /* Null byte follows %, copy only '%'. 
-         * 
+        /* Null byte follows %, copy only '%'.
+         *
          * Back the pin up one char so that we catch the null check
          * the next time through the loop.*/
             pin--;
@@ -1624,7 +1625,7 @@
         usednew += ntoappend;
         assert(usednew <= totalnew);
     }  /* end while() */
-    
+
     if (_PyBytes_Resize(&newfmt, usednew) < 0)
         goto Done;
     {
@@ -1664,7 +1665,7 @@
     if (time != NULL) {
         _Py_IDENTIFIER(time);
 
-        result = _PyObject_CallMethodId(time, &PyId_time, NULL);
+        result = _PyObject_CallMethodIdNoArgs(time, &PyId_time);
         Py_DECREF(time);
     }
     return result;
@@ -1698,8 +1699,7 @@
         return NULL;
     }
 
-    result = _PyObject_CallMethodIdObjArgs(time, &PyId_struct_time,
-                                           args, NULL);
+    result = _PyObject_CallMethodIdOneArg(time, &PyId_struct_time, args);
     Py_DECREF(time);
     Py_DECREF(args);
     return result;
@@ -1812,7 +1812,7 @@
         if (!PyTuple_Check(result)) {
             PyErr_Format(PyExc_TypeError,
                          "divmod() returned non-tuple (type %.200s)",
-                         result->ob_type->tp_name);
+                         Py_TYPE(result)->tp_name);
             Py_DECREF(result);
             return NULL;
         }
@@ -1923,7 +1923,7 @@
     PyObject *ratio;
 
     assert(floatobj && PyFloat_Check(floatobj));
-    ratio = _PyObject_CallMethodId(floatobj, &PyId_as_integer_ratio, NULL);
+    ratio = _PyObject_CallMethodIdNoArgs(floatobj, &PyId_as_integer_ratio);
     if (ratio == NULL) {
         return NULL;
     }
@@ -2491,7 +2491,6 @@
         int x_is_odd;
         PyObject *temp;
 
-        whole_us = round(leftover_us);
         if (fabs(whole_us - leftover_us) == 0.5) {
             /* We're exactly halfway between two integers.  In order
              * to do round-half-to-even, we must determine whether x
@@ -2899,8 +2898,7 @@
      * time.time() delivers; if someone were gonzo about optimization,
      * date.today() could get away with plain C time().
      */
-    result = _PyObject_CallMethodIdObjArgs(cls, &PyId_fromtimestamp,
-                                           time, NULL);
+    result = _PyObject_CallMethodIdOneArg(cls, &PyId_fromtimestamp, time);
     Py_DECREF(time);
     return result;
 }
@@ -3167,7 +3165,7 @@
 static PyObject *
 date_str(PyDateTime_Date *self)
 {
-    return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL);
+    return _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_isoformat);
 }
 
 
@@ -3193,7 +3191,7 @@
                                       &format))
         return NULL;
 
-    tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, NULL);
+    tuple = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_timetuple);
     if (tuple == NULL)
         return NULL;
     result = wrap_strftime((PyObject *)self, format, tuple,
@@ -3214,8 +3212,8 @@
     if (PyUnicode_GetLength(format) == 0)
         return PyObject_Str((PyObject *)self);
 
-    return _PyObject_CallMethodIdObjArgs((PyObject *)self, &PyId_strftime,
-                                         format, NULL);
+    return _PyObject_CallMethodIdOneArg((PyObject *)self, &PyId_strftime,
+                                        format);
 }
 
 /* ISO methods. */
@@ -3228,6 +3226,136 @@
     return PyLong_FromLong(dow + 1);
 }
 
+PyDoc_STRVAR(iso_calendar_date__doc__,
+"The result of date.isocalendar() or datetime.isocalendar()\n\n\
+This object may be accessed either as a tuple of\n\
+  ((year, week, weekday)\n\
+or via the object attributes as named in the above tuple.");
+
+typedef struct {
+    PyTupleObject tuple;
+} PyDateTime_IsoCalendarDate;
+
+static PyObject *
+iso_calendar_date_repr(PyDateTime_IsoCalendarDate *self)
+{
+    PyObject* year = PyTuple_GetItem((PyObject *)self, 0);
+    if (year == NULL) {
+        return NULL;
+    }
+    PyObject* week = PyTuple_GetItem((PyObject *)self, 1);
+    if (week == NULL) {
+        return NULL;
+    }
+    PyObject* weekday = PyTuple_GetItem((PyObject *)self, 2);
+    if (weekday == NULL) {
+        return NULL;
+    }
+
+    return PyUnicode_FromFormat("%.200s(year=%S, week=%S, weekday=%S)",
+                               Py_TYPE(self)->tp_name, year, week, weekday);
+}
+
+static PyObject *
+iso_calendar_date_reduce(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    // Construct the tuple that this reduces to
+    PyObject * reduce_tuple = Py_BuildValue(
+        "O((OOO))", &PyTuple_Type,
+        PyTuple_GET_ITEM(self, 0),
+        PyTuple_GET_ITEM(self, 1),
+        PyTuple_GET_ITEM(self, 2)
+    );
+
+    return reduce_tuple;
+}
+
+static PyObject *
+iso_calendar_date_year(PyDateTime_IsoCalendarDate *self, void *unused)
+{
+    PyObject *year = PyTuple_GetItem((PyObject *)self, 0);
+    if (year == NULL) {
+        return NULL;
+    }
+    Py_INCREF(year);
+    return year;
+}
+
+static PyObject *
+iso_calendar_date_week(PyDateTime_IsoCalendarDate *self, void *unused)
+{
+    PyObject *week = PyTuple_GetItem((PyObject *)self, 1);
+    if (week == NULL) {
+        return NULL;
+    }
+    Py_INCREF(week);
+    return week;
+}
+
+static PyObject *
+iso_calendar_date_weekday(PyDateTime_IsoCalendarDate *self, void *unused)
+{
+    PyObject *weekday = PyTuple_GetItem((PyObject *)self, 2);
+    if (weekday == NULL) {
+        return NULL;
+    }
+    Py_INCREF(weekday);
+    return weekday;
+}
+
+static PyGetSetDef iso_calendar_date_getset[] = {
+    {"year",        (getter)iso_calendar_date_year},
+    {"week",      (getter)iso_calendar_date_week},
+    {"weekday",      (getter)iso_calendar_date_weekday},
+    {NULL}
+};
+
+static PyMethodDef iso_calendar_date_methods[] = {
+    {"__reduce__", (PyCFunction)iso_calendar_date_reduce, METH_NOARGS,
+     PyDoc_STR("__reduce__() -> (cls, state)")},
+    {NULL, NULL},
+};
+
+static PyTypeObject PyDateTime_IsoCalendarDateType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    .tp_name = "datetime.IsoCalendarDate",
+    .tp_basicsize = sizeof(PyDateTime_IsoCalendarDate),
+    .tp_repr = (reprfunc) iso_calendar_date_repr,
+    .tp_flags = Py_TPFLAGS_DEFAULT,
+    .tp_doc = iso_calendar_date__doc__,
+    .tp_methods = iso_calendar_date_methods,
+    .tp_getset = iso_calendar_date_getset,
+    // .tp_base = &PyTuple_Type,  // filled in PyInit__datetime
+    .tp_new = iso_calendar_date_new,
+};
+
+/*[clinic input]
+@classmethod
+datetime.IsoCalendarDate.__new__ as iso_calendar_date_new
+    year: int
+    week: int
+    weekday: int
+[clinic start generated code]*/
+
+static PyObject *
+iso_calendar_date_new_impl(PyTypeObject *type, int year, int week,
+                           int weekday)
+/*[clinic end generated code: output=383d33d8dc7183a2 input=4f2c663c9d19c4ee]*/
+
+{
+    PyDateTime_IsoCalendarDate *self;
+    self = (PyDateTime_IsoCalendarDate *) type->tp_alloc(type, 3);
+    if (self == NULL) {
+        return NULL;
+    }
+
+    PyTuple_SET_ITEM(self, 0, PyLong_FromLong(year));
+    PyTuple_SET_ITEM(self, 1, PyLong_FromLong(week));
+    PyTuple_SET_ITEM(self, 2, PyLong_FromLong(weekday));
+
+    return (PyObject *)self;
+}
+
 static PyObject *
 date_isocalendar(PyDateTime_Date *self, PyObject *Py_UNUSED(ignored))
 {
@@ -3247,7 +3375,13 @@
         ++year;
         week = 0;
     }
-    return Py_BuildValue("iii", year, week + 1, day + 1);
+
+    PyObject* v = iso_calendar_date_new_impl(&PyDateTime_IsoCalendarDateType,
+                    year, week + 1, day + 1);
+    if (v == NULL) {
+        return NULL;
+    }
+    return v;
 }
 
 /* Miscellaneous methods. */
@@ -3386,7 +3520,7 @@
      PyDoc_STR("Return time tuple, compatible with time.localtime().")},
 
     {"isocalendar", (PyCFunction)date_isocalendar,  METH_NOARGS,
-     PyDoc_STR("Return a 3-tuple containing ISO year, week number, and "
+     PyDoc_STR("Return a named tuple containing ISO year, week number, and "
                "weekday.")},
 
     {"isoformat",   (PyCFunction)date_isoformat,        METH_NOARGS,
@@ -3614,7 +3748,7 @@
         return NULL;
     }
     if (getinitargs != NULL) {
-        args = _PyObject_CallNoArg(getinitargs);
+        args = PyObject_CallNoArgs(getinitargs);
         Py_DECREF(getinitargs);
     }
     else {
@@ -3629,7 +3763,7 @@
         return NULL;
     }
     if (getstate != NULL) {
-        state = _PyObject_CallNoArg(getstate);
+        state = PyObject_CallNoArgs(getstate);
         Py_DECREF(getstate);
         if (state == NULL) {
             Py_DECREF(args);
@@ -3945,7 +4079,7 @@
     timezone_methods,                 /* tp_methods */
     0,                                /* tp_members */
     0,                                /* tp_getset */
-    &PyDateTime_TZInfoType,           /* tp_base */
+    0,                                /* tp_base; filled in PyInit__datetime */
     0,                                /* tp_dict */
     0,                                /* tp_descr_get */
     0,                                /* tp_descr_set */
@@ -4176,18 +4310,18 @@
 static PyObject *
 time_str(PyDateTime_Time *self)
 {
-    return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL);
+    return _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_isoformat);
 }
 
 static PyObject *
 time_isoformat(PyDateTime_Time *self, PyObject *args, PyObject *kw)
 {
     char buf[100];
-    char *timespec = NULL;
+    const char *timespec = NULL;
     static char *keywords[] = {"timespec", NULL};
     PyObject *result;
     int us = TIME_GET_MICROSECOND(self);
-    static char *specs[][2] = {
+    static const char *specs[][2] = {
         {"hours", "%02d"},
         {"minutes", "%02d:%02d"},
         {"seconds", "%02d:%02d:%02d"},
@@ -4539,7 +4673,10 @@
     {"isoformat",   (PyCFunction)(void(*)(void))time_isoformat,        METH_VARARGS | METH_KEYWORDS,
      PyDoc_STR("Return string in ISO 8601 format, [HH[:MM[:SS[.mmm[uuu]]]]]"
                "[+HH:MM].\n\n"
-               "timespec specifies what components of the time to include.\n")},
+               "The optional argument timespec specifies the number "
+               "of additional terms\nof the time to include. Valid "
+               "options are 'auto', 'hours', 'minutes',\n'seconds', "
+               "'milliseconds' and 'microseconds'.\n")},
 
     {"strftime",        (PyCFunction)(void(*)(void))time_strftime,     METH_VARARGS | METH_KEYWORDS,
      PyDoc_STR("format -> strftime() style string.")},
@@ -5419,7 +5556,7 @@
     char buffer[100];
     PyObject *result = NULL;
     int us = DATE_GET_MICROSECOND(self);
-    static char *specs[][2] = {
+    static const char *specs[][2] = {
         {"hours", "%04d-%02d-%02d%c%02d"},
         {"minutes", "%04d-%02d-%02d%c%02d:%02d"},
         {"seconds", "%04d-%02d-%02d%c%02d:%02d:%02d"},
@@ -5961,7 +6098,7 @@
 
     temp = (PyObject *)result;
     result = (PyDateTime_DateTime *)
-        _PyObject_CallMethodIdObjArgs(tzinfo, &PyId_fromutc, temp, NULL);
+        _PyObject_CallMethodIdOneArg(tzinfo, &PyId_fromutc, temp);
     Py_DECREF(temp);
 
     return result;
@@ -6246,9 +6383,10 @@
                "YYYY-MM-DDT[HH[:MM[:SS[.mmm[uuu]]]]][+HH:MM].\n"
                "sep is used to separate the year from the time, and "
                "defaults to 'T'.\n"
-               "timespec specifies what components of the time to include"
-               " (allowed values are 'auto', 'hours', 'minutes', 'seconds',"
-               " 'milliseconds', and 'microseconds').\n")},
+               "The optional argument timespec specifies the number "
+               "of additional terms\nof the time to include. Valid "
+               "options are 'auto', 'hours', 'minutes',\n'seconds', "
+               "'milliseconds' and 'microseconds'.\n")},
 
     {"utcoffset",       (PyCFunction)datetime_utcoffset, METH_NOARGS,
      PyDoc_STR("Return self.tzinfo.utcoffset(self).")},
@@ -6324,7 +6462,8 @@
     datetime_methods,                           /* tp_methods */
     0,                                          /* tp_members */
     datetime_getset,                            /* tp_getset */
-    &PyDateTime_DateType,                       /* tp_base */
+    0,                                          /* tp_base; filled in
+                                                   PyInit__datetime */
     0,                                          /* tp_dict */
     0,                                          /* tp_descr_get */
     0,                                          /* tp_descr_set */
@@ -6390,18 +6529,32 @@
     if (m == NULL)
         return NULL;
 
-    if (PyType_Ready(&PyDateTime_DateType) < 0)
+    // `&...` is not a constant expression according to a strict reading
+    // of C standards. Fill tp_base at run-time rather than statically.
+    // See https://bugs.python.org/issue40777
+    PyDateTime_IsoCalendarDateType.tp_base = &PyTuple_Type;
+    PyDateTime_TimeZoneType.tp_base = &PyDateTime_TZInfoType;
+    PyDateTime_DateTimeType.tp_base = &PyDateTime_DateType;
+
+    PyTypeObject *types[] = {
+        &PyDateTime_DateType,
+        &PyDateTime_DateTimeType,
+        &PyDateTime_TimeType,
+        &PyDateTime_DeltaType,
+        &PyDateTime_TZInfoType,
+        &PyDateTime_TimeZoneType,
+    };
+
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(types); i++) {
+        if (PyModule_AddType(m, types[i]) < 0) {
+            return NULL;
+        }
+    }
+
+    if (PyType_Ready(&PyDateTime_IsoCalendarDateType) < 0) {
         return NULL;
-    if (PyType_Ready(&PyDateTime_DateTimeType) < 0)
-        return NULL;
-    if (PyType_Ready(&PyDateTime_DeltaType) < 0)
-        return NULL;
-    if (PyType_Ready(&PyDateTime_TimeType) < 0)
-        return NULL;
-    if (PyType_Ready(&PyDateTime_TZInfoType) < 0)
-        return NULL;
-    if (PyType_Ready(&PyDateTime_TimeZoneType) < 0)
-        return NULL;
+    }
+    Py_INCREF(&PyDateTime_IsoCalendarDateType);
 
     /* timedelta values */
     d = PyDateTime_DeltaType.tp_dict;
@@ -6519,25 +6672,6 @@
     PyModule_AddIntMacro(m, MINYEAR);
     PyModule_AddIntMacro(m, MAXYEAR);
 
-    Py_INCREF(&PyDateTime_DateType);
-    PyModule_AddObject(m, "date", (PyObject *) &PyDateTime_DateType);
-
-    Py_INCREF(&PyDateTime_DateTimeType);
-    PyModule_AddObject(m, "datetime",
-                       (PyObject *)&PyDateTime_DateTimeType);
-
-    Py_INCREF(&PyDateTime_TimeType);
-    PyModule_AddObject(m, "time", (PyObject *) &PyDateTime_TimeType);
-
-    Py_INCREF(&PyDateTime_DeltaType);
-    PyModule_AddObject(m, "timedelta", (PyObject *) &PyDateTime_DeltaType);
-
-    Py_INCREF(&PyDateTime_TZInfoType);
-    PyModule_AddObject(m, "tzinfo", (PyObject *) &PyDateTime_TZInfoType);
-
-    Py_INCREF(&PyDateTime_TimeZoneType);
-    PyModule_AddObject(m, "timezone", (PyObject *) &PyDateTime_TimeZoneType);
-
     x = PyCapsule_New(&CAPI, PyDateTime_CAPSULE_NAME, NULL);
     if (x == NULL)
         return NULL;
diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c
index ea0a9d6..80a0503 100644
--- a/Modules/_dbmmodule.c
+++ b/Modules/_dbmmodule.c
@@ -45,7 +45,7 @@
 
 static PyTypeObject Dbmtype;
 
-#define is_dbmobject(v) (Py_TYPE(v) == &Dbmtype)
+#define is_dbmobject(v) Py_IS_TYPE(v, &Dbmtype)
 #define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
                { PyErr_SetString(DbmError, "DBM object has already been closed"); \
                  return NULL; }
@@ -255,7 +255,7 @@
     else if (!PyBytes_Check(arg)) {
         PyErr_Format(PyExc_TypeError,
                      "dbm key must be bytes or string, not %.100s",
-                     arg->ob_type->tp_name);
+                     Py_TYPE(arg)->tp_name);
         return -1;
     }
     else {
@@ -370,7 +370,7 @@
 dbm__exit__(PyObject *self, PyObject *args)
 {
     _Py_IDENTIFIER(close);
-    return _PyObject_CallMethodId(self, &PyId_close, NULL);
+    return _PyObject_CallMethodIdNoArgs(self, &PyId_close);
 }
 
 
diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c
index eb1f1a0..fb4e020 100644
--- a/Modules/_decimal/_decimal.c
+++ b/Modules/_decimal/_decimal.c
@@ -28,8 +28,6 @@
 
 #include <Python.h>
 #include "longintrepr.h"
-#include "pythread.h"
-#include "structmember.h"
 #include "complexobject.h"
 #include "mpdecimal.h"
 
@@ -38,8 +36,8 @@
 #include "docstrings.h"
 
 
-#if !defined(MPD_VERSION_HEX) || MPD_VERSION_HEX < 0x02040100
-  #error "libmpdec version >= 2.4.1 required"
+#if !defined(MPD_VERSION_HEX) || MPD_VERSION_HEX < 0x02050000
+  #error "libmpdec version >= 2.5.0 required"
 #endif
 
 
@@ -58,13 +56,11 @@
 
 #define BOUNDS_CHECK(x, MIN, MAX) x = (x < MIN || MAX < x) ? MAX : x
 
-#ifndef UNUSED
 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
   #define UNUSED __attribute__((unused))
 #else
   #define UNUSED
 #endif
-#endif
 
 /* _Py_DEC_MINALLOC >= MPD_MINALLOC */
 #define _Py_DEC_MINALLOC 4
@@ -103,9 +99,9 @@
 static PyTypeObject *PyDecSignalDict_Type;
 static PyTypeObject PyDecContext_Type;
 static PyTypeObject PyDecContextManager_Type;
-#define PyDec_CheckExact(v) (Py_TYPE(v) == &PyDec_Type)
+#define PyDec_CheckExact(v) Py_IS_TYPE(v, &PyDec_Type)
 #define PyDec_Check(v) PyObject_TypeCheck(v, &PyDec_Type)
-#define PyDecSignalDict_Check(v) (Py_TYPE(v) == PyDecSignalDict_Type)
+#define PyDecSignalDict_Check(v) Py_IS_TYPE(v, PyDecSignalDict_Type)
 #define PyDecContext_Check(v) PyObject_TypeCheck(v, &PyDecContext_Type)
 #define MPD(v) (&((PyDecObject *)v)->dec)
 #define SdFlagAddr(v) (((PyDecSignalDictObject *)v)->flags)
@@ -1885,7 +1881,7 @@
 /******************************************************************************/
 
 Py_LOCAL_INLINE(int)
-is_space(enum PyUnicode_Kind kind, void *data, Py_ssize_t pos)
+is_space(enum PyUnicode_Kind kind, const void *data, Py_ssize_t pos)
 {
     Py_UCS4 ch = PyUnicode_READ(kind, data, pos);
     return Py_UNICODE_ISSPACE(ch);
@@ -1903,7 +1899,7 @@
 numeric_as_ascii(const PyObject *u, int strip_ws, int ignore_underscores)
 {
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
     Py_UCS4 ch;
     char *res, *cp;
     Py_ssize_t j, len;
@@ -2733,7 +2729,7 @@
     else {
         PyErr_Format(PyExc_TypeError,
             "conversion from %s to Decimal is not supported",
-            v->ob_type->tp_name);
+            Py_TYPE(v)->tp_name);
         return NULL;
     }
 }
@@ -2782,7 +2778,7 @@
     else {
         PyErr_Format(PyExc_TypeError,
             "conversion from %s to Decimal is not supported",
-            v->ob_type->tp_name);
+            Py_TYPE(v)->tp_name);
         return NULL;
     }
 }
@@ -2845,7 +2841,7 @@
     if (type_err) {
         PyErr_Format(PyExc_TypeError,
             "conversion from %s to Decimal is not supported",
-            v->ob_type->tp_name);
+            Py_TYPE(v)->tp_name);
     }
     else {
         Py_INCREF(Py_NotImplemented);
@@ -3402,9 +3398,9 @@
         i--;
     }
 
-    Py_SIZE(pylong) = i;
+    Py_SET_SIZE(pylong, i);
     if (mpd_isnegative(x) && !mpd_iszero(x)) {
-        Py_SIZE(pylong) = -i;
+        Py_SET_SIZE(pylong, -i);
     }
 
     mpd_del(x);
diff --git a/Modules/_decimal/libmpdec/README.txt b/Modules/_decimal/libmpdec/README.txt
index 96b7223..dc97820 100644
--- a/Modules/_decimal/libmpdec/README.txt
+++ b/Modules/_decimal/libmpdec/README.txt
@@ -20,7 +20,7 @@
     context.c        ->  Context functions.
     io.{c,h}         ->  Conversions between mpd_t and ASCII strings,
                          mpd_t formatting (allows UTF-8 fill character).
-    memory.{c,h}     ->  Allocation handlers with overflow detection
+    mpalloc.{c,h}    ->  Allocation handlers with overflow detection
                          and functions for switching between static
                          and dynamic mpd_t.
     mpdecimal.{c,h}  ->  All (quiet) functions of the specification.
@@ -30,7 +30,6 @@
     Visual Studio only:
     ~~~~~~~~~~~~~~~~~~~
       vccompat.h    ->  snprintf <==> sprintf_s and similar things.
-      vcstdint.h    ->  stdint.h (included in VS 2010 but not in VS 2008).
       vcdiv64.asm   ->  Double word division used in typearith.h. VS 2008 does
                         not allow inline asm for x64. Also, it does not provide
                         an intrinsic for double word division.
diff --git a/Modules/_decimal/libmpdec/basearith.c b/Modules/_decimal/libmpdec/basearith.c
index dfe1523..85c608f 100644
--- a/Modules/_decimal/libmpdec/basearith.c
+++ b/Modules/_decimal/libmpdec/basearith.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,13 +27,13 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+
 #include <assert.h>
+#include <stdio.h>
+
+#include "basearith.h"
 #include "constants.h"
 #include "typearith.h"
-#include "basearith.h"
 
 
 /*********************************************************************/
@@ -337,6 +337,7 @@
 
     /* D2: loop */
     for (j=m; j != MPD_SIZE_MAX; j--) {
+        assert(2 <= j+n && j+n <= nplusm); /* annotation for scan-build */
 
         /* D3: calculate qhat and rhat */
         rhat = _mpd_shortdiv(w2, u+j+n-1, 2, v[n-1]);
@@ -652,6 +653,3 @@
 
     return rem;
 }
-
-
-
diff --git a/Modules/_decimal/libmpdec/basearith.h b/Modules/_decimal/libmpdec/basearith.h
index 976358a..d35925a 100644
--- a/Modules/_decimal/libmpdec/basearith.h
+++ b/Modules/_decimal/libmpdec/basearith.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef BASEARITH_H
-#define BASEARITH_H
+#ifndef LIBMPDEC_BASEARITH_H_
+#define LIBMPDEC_BASEARITH_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 #include "typearith.h"
 
 
@@ -216,7 +215,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif /* BASEARITH_H */
-
-
-
+#endif /* LIBMPDEC_BASEARITH_H_ */
diff --git a/Modules/_decimal/libmpdec/bits.h b/Modules/_decimal/libmpdec/bits.h
index b5eaa24..aa9c3e7 100644
--- a/Modules/_decimal/libmpdec/bits.h
+++ b/Modules/_decimal/libmpdec/bits.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef BITS_H
-#define BITS_H
+#ifndef LIBMPDEC_BITS_H_
+#define LIBMPDEC_BITS_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Check if n is a power of 2. */
@@ -186,7 +185,4 @@
 #endif /* BSR/BSF */
 
 
-#endif /* BITS_H */
-
-
-
+#endif /* LIBMPDEC_BITS_H_ */
diff --git a/Modules/_decimal/libmpdec/constants.c b/Modules/_decimal/libmpdec/constants.c
index 2c2d5ea..4c4de62 100644
--- a/Modules/_decimal/libmpdec/constants.c
+++ b/Modules/_decimal/libmpdec/constants.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,7 +27,6 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 #include "constants.h"
 
 
@@ -128,5 +127,3 @@
     "CLAMP_DEFAULT",
     "CLAMP_IEEE_754"
 };
-
-
diff --git a/Modules/_decimal/libmpdec/constants.h b/Modules/_decimal/libmpdec/constants.h
index c0febfc..7c1db83 100644
--- a/Modules/_decimal/libmpdec/constants.h
+++ b/Modules/_decimal/libmpdec/constants.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,14 @@
  */
 
 
-#ifndef CONSTANTS_H
-#define CONSTANTS_H
+#ifndef LIBMPDEC_CONSTANTS_H_
+#define LIBMPDEC_CONSTANTS_H_
 
 
 #include "mpdecimal.h"
 
+#include <stdint.h>
+
 
 /* Internal header file: all symbols have local scope in the DSO */
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
@@ -84,7 +86,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif /* CONSTANTS_H */
-
-
-
+#endif /* LIBMPDEC_CONSTANTS_H_ */
diff --git a/Modules/_decimal/libmpdec/context.c b/Modules/_decimal/libmpdec/context.c
index 24c7b89..9cbc205 100644
--- a/Modules/_decimal/libmpdec/context.c
+++ b/Modules/_decimal/libmpdec/context.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,14 +27,16 @@
 
 
 #include "mpdecimal.h"
+
+#include <signal.h>
 #include <stdio.h>
 #include <string.h>
-#include <signal.h>
 
 
 void
-mpd_dflt_traphandler(mpd_context_t *ctx UNUSED)
+mpd_dflt_traphandler(mpd_context_t *ctx)
 {
+    (void)ctx;
     raise(SIGFPE);
 }
 
@@ -282,5 +284,3 @@
         mpd_traphandler(ctx);
     }
 }
-
-
diff --git a/Modules/_decimal/libmpdec/convolute.c b/Modules/_decimal/libmpdec/convolute.c
index 4c62e8b..4bc8e8b 100644
--- a/Modules/_decimal/libmpdec/convolute.c
+++ b/Modules/_decimal/libmpdec/convolute.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,15 +27,14 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 #include "bits.h"
 #include "constants.h"
+#include "convolute.h"
 #include "fnt.h"
 #include "fourstep.h"
 #include "numbertheory.h"
 #include "sixstep.h"
 #include "umodarith.h"
-#include "convolute.h"
 
 
 /* Bignum: Fast convolution using the Number Theoretic Transform. Used for
@@ -170,5 +169,3 @@
 
     return 1;
 }
-
-
diff --git a/Modules/_decimal/libmpdec/convolute.h b/Modules/_decimal/libmpdec/convolute.h
index f30a177..62edb3e 100644
--- a/Modules/_decimal/libmpdec/convolute.h
+++ b/Modules/_decimal/libmpdec/convolute.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef CONVOLUTE_H
-#define CONVOLUTE_H
+#ifndef LIBMPDEC_CONVOLUTE_H_
+#define LIBMPDEC_CONVOLUTE_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -47,4 +46,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
+#endif /* LIBMPDEC_CONVOLUTE_H_ */
diff --git a/Modules/_decimal/libmpdec/crt.c b/Modules/_decimal/libmpdec/crt.c
index 4a1e80a..613274e 100644
--- a/Modules/_decimal/libmpdec/crt.c
+++ b/Modules/_decimal/libmpdec/crt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,11 +27,14 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
+
 #include <assert.h>
+
+#include "constants.h"
+#include "crt.h"
 #include "numbertheory.h"
 #include "umodarith.h"
-#include "crt.h"
+#include "typearith.h"
 
 
 /* Bignum: Chinese Remainder Theorem, extends the maximum transform length. */
@@ -175,5 +178,3 @@
 
     assert(carry[0] == 0 && carry[1] == 0 && carry[2] == 0);
 }
-
-
diff --git a/Modules/_decimal/libmpdec/crt.h b/Modules/_decimal/libmpdec/crt.h
index f61e772..15a347d 100644
--- a/Modules/_decimal/libmpdec/crt.h
+++ b/Modules/_decimal/libmpdec/crt.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef CRT_H
-#define CRT_H
+#ifndef LIBMPDEC_CRT_H_
+#define LIBMPDEC_CRT_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -44,4 +43,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
+#endif /* LIBMPDEC_CRT_H_ */
diff --git a/Modules/_decimal/libmpdec/difradix2.c b/Modules/_decimal/libmpdec/difradix2.c
index 06e5ab5..049ecff 100644
--- a/Modules/_decimal/libmpdec/difradix2.c
+++ b/Modules/_decimal/libmpdec/difradix2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,12 +27,14 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
+
 #include <assert.h>
+
 #include "bits.h"
+#include "constants.h"
+#include "difradix2.h"
 #include "numbertheory.h"
 #include "umodarith.h"
-#include "difradix2.h"
 
 
 /* Bignum: The actual transform routine (decimation in frequency). */
@@ -169,5 +171,3 @@
 
     bitreverse_permute(a, n);
 }
-
-
diff --git a/Modules/_decimal/libmpdec/difradix2.h b/Modules/_decimal/libmpdec/difradix2.h
index 5e22bcf..cdcbcf9 100644
--- a/Modules/_decimal/libmpdec/difradix2.h
+++ b/Modules/_decimal/libmpdec/difradix2.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef DIF_RADIX2_H
-#define DIF_RADIX2_H
+#ifndef LIBMPDEC_DIFRADIX2_H_
+#define LIBMPDEC_DIFRADIX2_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 #include "numbertheory.h"
 
 
@@ -45,4 +44,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
+#endif /* LIBMPDEC_DIFRADIX2_H_ */
diff --git a/Modules/_decimal/libmpdec/fnt.c b/Modules/_decimal/libmpdec/fnt.c
index 7e924c8..0dbe98f 100644
--- a/Modules/_decimal/libmpdec/fnt.c
+++ b/Modules/_decimal/libmpdec/fnt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,13 +27,14 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
-#include <stdlib.h>
+
 #include <assert.h>
+#include <stdio.h>
+
 #include "bits.h"
 #include "difradix2.h"
-#include "numbertheory.h"
 #include "fnt.h"
+#include "numbertheory.h"
 
 
 /* Bignum: Fast transform for medium-sized coefficients. */
@@ -76,6 +77,3 @@
     mpd_free(tparams);
     return 1;
 }
-
-
-
diff --git a/Modules/_decimal/libmpdec/fnt.h b/Modules/_decimal/libmpdec/fnt.h
index fa2154a..5222c47 100644
--- a/Modules/_decimal/libmpdec/fnt.h
+++ b/Modules/_decimal/libmpdec/fnt.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef FNT_H
-#define FNT_H
+#ifndef LIBMPDEC_FNT_H_
+#define LIBMPDEC_FNT_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -45,5 +44,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
-
+#endif /* LIBMPDEC_FNT_H_ */
diff --git a/Modules/_decimal/libmpdec/fourstep.c b/Modules/_decimal/libmpdec/fourstep.c
index 21d3e74..fb173ed 100644
--- a/Modules/_decimal/libmpdec/fourstep.c
+++ b/Modules/_decimal/libmpdec/fourstep.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,12 +27,14 @@
 
 
 #include "mpdecimal.h"
+
 #include <assert.h>
+
+#include "constants.h"
+#include "fourstep.h"
 #include "numbertheory.h"
 #include "sixstep.h"
-#include "transpose.h"
 #include "umodarith.h"
-#include "fourstep.h"
 
 
 /* Bignum: Cache efficient Matrix Fourier Transform for arrays of the
@@ -187,6 +189,7 @@
 #if 0
     /* An unordered transform is sufficient for convolution. */
     /* Transpose the matrix. */
+    #include "transpose.h"
     transpose_3xpow2(a, R, C);
 #endif
 
@@ -217,6 +220,7 @@
 #if 0
     /* An unordered transform is sufficient for convolution. */
     /* Transpose the matrix, producing an R*C matrix. */
+    #include "transpose.h"
     transpose_3xpow2(a, C, R);
 #endif
 
@@ -253,5 +257,3 @@
 
     return 1;
 }
-
-
diff --git a/Modules/_decimal/libmpdec/fourstep.h b/Modules/_decimal/libmpdec/fourstep.h
index 80dcd4b..5ffb6fc 100644
--- a/Modules/_decimal/libmpdec/fourstep.h
+++ b/Modules/_decimal/libmpdec/fourstep.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef FOUR_STEP_H
-#define FOUR_STEP_H
+#ifndef LIBMPDEC_FOURSTEP_H_
+#define LIBMPDEC_FOURSTEP_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -45,4 +44,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
+#endif /* LIBMPDEC_FOURSTEP_H_ */
diff --git a/Modules/_decimal/libmpdec/io.c b/Modules/_decimal/libmpdec/io.c
index f45e558..9513a68 100644
--- a/Modules/_decimal/libmpdec/io.c
+++ b/Modules/_decimal/libmpdec/io.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,16 +27,16 @@
 
 
 #include "mpdecimal.h"
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <locale.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include <assert.h>
-#include <errno.h>
-#include <locale.h>
-#include "bits.h"
-#include "constants.h"
+
 #include "typearith.h"
 #include "io.h"
 
@@ -277,7 +277,7 @@
             }
         }
 
-            digits = end - coeff;
+        digits = end - coeff;
         if (dpoint) {
             size_t fracdigits = end-dpoint-1;
             if (dpoint > coeff) digits--;
@@ -326,6 +326,22 @@
     mpd_seterror(dec, MPD_Conversion_syntax, status);
 }
 
+/* convert a character string to a decimal, use a maxcontext for conversion */
+void
+mpd_qset_string_exact(mpd_t *dec, const char *s, uint32_t *status)
+{
+    mpd_context_t maxcontext;
+
+    mpd_maxcontext(&maxcontext);
+    mpd_qset_string(dec, s, &maxcontext, status);
+
+    if (*status & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+        /* we want exact results */
+        mpd_seterror(dec, MPD_Invalid_operation, status);
+    }
+    *status &= MPD_Errors;
+}
+
 /* Print word x with n decimal digits to string s. dot is either NULL
    or the location of a decimal point. */
 #define EXTRACT_DIGIT(s, x, d, dot) \
@@ -539,8 +555,8 @@
                 dplace = -1 + mod_mpd_ssize_t(dec->exp+2, 3);
             }
             else { /* ldigits-1 is the adjusted exponent, which
-                * should be divisible by three. If not, move
-                * dplace one or two places to the right. */
+                    * should be divisible by three. If not, move
+                    * dplace one or two places to the right. */
                 dplace += mod_mpd_ssize_t(ldigits-1, 3);
             }
         }
@@ -1247,7 +1263,7 @@
     }
 
     if (isupper((uchar)type)) {
-        type = tolower((uchar)type);
+        type = (char)tolower((uchar)type);
         flags |= MPD_FMT_UPPER;
     }
     if (spec->sign == ' ') {
@@ -1265,6 +1281,7 @@
             stackspec.align = '>';
             spec = &stackspec;
         }
+        assert(strlen(spec->fill) == 1); /* annotation for scan-build */
         if (type == '%') {
             flags |= MPD_FMT_PERCENT;
         }
@@ -1579,5 +1596,3 @@
         fputs("mpd_fprint: output error\n", stderr); /* GCOV_NOT_REACHED */
     }
 }
-
-
diff --git a/Modules/_decimal/libmpdec/io.h b/Modules/_decimal/libmpdec/io.h
index de5486a..79d7c05 100644
--- a/Modules/_decimal/libmpdec/io.h
+++ b/Modules/_decimal/libmpdec/io.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,17 +26,20 @@
  */
 
 
-#ifndef IO_H
-#define IO_H
+#ifndef LIBMPDEC_IO_H_
+#define LIBMPDEC_IO_H_
 
 
-#include <errno.h>
 #include "mpdecimal.h"
 
+#include <stdint.h>
+
 
 #if SIZE_MAX == MPD_SIZE_MAX
   #define mpd_strtossize _mpd_strtossize
 #else
+#include <errno.h>
+
 static inline mpd_ssize_t
 mpd_strtossize(const char *s, char **end, int base)
 {
@@ -56,4 +59,4 @@
 #endif
 
 
-#endif
+#endif /* LIBMPDEC_IO_H_ */
diff --git a/Modules/_decimal/libmpdec/literature/fnt.py b/Modules/_decimal/libmpdec/literature/fnt.py
index 6363536..c1285a5 100644
--- a/Modules/_decimal/libmpdec/literature/fnt.py
+++ b/Modules/_decimal/libmpdec/literature/fnt.py
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+# Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
diff --git a/Modules/_decimal/libmpdec/literature/matrix-transform.txt b/Modules/_decimal/libmpdec/literature/matrix-transform.txt
index 701d85d..6e7ad74 100644
--- a/Modules/_decimal/libmpdec/literature/matrix-transform.txt
+++ b/Modules/_decimal/libmpdec/literature/matrix-transform.txt
@@ -1,6 +1,6 @@
 
 
-(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+(* Copyright (c) 2011-2020 Stefan Krah. All rights reserved. *)
 
 
 The Matrix Fourier Transform:
diff --git a/Modules/_decimal/libmpdec/literature/mulmod-64.txt b/Modules/_decimal/libmpdec/literature/mulmod-64.txt
index 029b8de..fa967bf 100644
--- a/Modules/_decimal/libmpdec/literature/mulmod-64.txt
+++ b/Modules/_decimal/libmpdec/literature/mulmod-64.txt
@@ -1,6 +1,6 @@
 
 
-(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+(* Copyright (c) 2011-2020 Stefan Krah. All rights reserved. *)
 
 
 ==========================================================================
diff --git a/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt b/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt
index 4d17a92..ba804e4 100644
--- a/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt
+++ b/Modules/_decimal/libmpdec/literature/mulmod-ppro.txt
@@ -1,6 +1,6 @@
 
 
-(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+(* Copyright (c) 2011-2020 Stefan Krah. All rights reserved. *)
 
 
 ========================================================================
diff --git a/Modules/_decimal/libmpdec/literature/six-step.txt b/Modules/_decimal/libmpdec/literature/six-step.txt
index 8e45f48..852d5b0 100644
--- a/Modules/_decimal/libmpdec/literature/six-step.txt
+++ b/Modules/_decimal/libmpdec/literature/six-step.txt
@@ -1,6 +1,6 @@
 
 
-(* Copyright (c) 2011 Stefan Krah. All rights reserved. *)
+(* Copyright (c) 2011-2020 Stefan Krah. All rights reserved. *)
 
 
 The Six Step Transform:
diff --git a/Modules/_decimal/libmpdec/literature/umodarith.lisp b/Modules/_decimal/libmpdec/literature/umodarith.lisp
index 99d71c3..d71f074 100644
--- a/Modules/_decimal/libmpdec/literature/umodarith.lisp
+++ b/Modules/_decimal/libmpdec/literature/umodarith.lisp
@@ -1,5 +1,5 @@
 ;
-; Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+; Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
 ;
 ; Redistribution and use in source and binary forms, with or without
 ; modification, are permitted provided that the following conditions
@@ -149,7 +149,7 @@
 
 (defthmd addmod-correct
   (implies (and (< 0 m) (< m base)
-		(< a m) (<= b m)
+                (< a m) (<= b m)
                 (natp m) (natp base)
                 (natp a) (natp b))
            (equal (addmod a b m base)
@@ -179,7 +179,7 @@
 
 (defthmd submod-correct
   (implies (and (< 0 m) (< m base)
-		(< a m) (<= b m)
+                (< a m) (<= b m)
                 (natp m) (natp base)
                 (natp a) (natp b))
            (equal (submod a b m base)
@@ -200,7 +200,7 @@
 
 (defthm submod-2-correct
   (implies (and (< 0 m) (< m base)
-		(< a m) (<= b m)
+                (< a m) (<= b m)
                 (natp m) (natp base)
                 (natp a) (natp b))
            (equal (submod-2 a b m base)
@@ -231,7 +231,7 @@
 
 (defthmd ext-submod-ext-submod-2-equal
   (implies (and (< 0 m) (< m base)
-		(< a (* 2 m)) (< b (* 2 m))
+                (< a (* 2 m)) (< b (* 2 m))
                 (natp m) (natp base)
                 (natp a) (natp b))
            (equal (ext-submod a b m base)
@@ -239,7 +239,7 @@
 
 (defthmd ext-submod-2-correct
   (implies (and (< 0 m) (< m base)
-		(< a (* 2 m)) (< b (* 2 m))
+                (< a (* 2 m)) (< b (* 2 m))
                 (natp m) (natp base)
                 (natp a) (natp b))
            (equal (ext-submod-2 a b m base)
@@ -257,7 +257,7 @@
 
 (defthmd dw-reduce-correct
   (implies (and (< 0 m) (< m base)
-		(< hi base) (< lo base)
+                (< hi base) (< lo base)
                 (natp m) (natp base)
                 (natp hi) (natp lo))
            (equal (dw-reduce hi lo m base)
@@ -322,7 +322,7 @@
 (defthmd dw-submod-correct
   (implies (and (< 0 m) (< m base)
                 (natp a) (< a m)
-		(< hi base) (< lo base)
+                (< hi base) (< lo base)
                 (natp m) (natp base)
                 (natp hi) (natp lo))
            (equal (dw-submod a hi lo m base)
diff --git a/Modules/_decimal/libmpdec/memory.c b/Modules/_decimal/libmpdec/mpalloc.c
similarity index 81%
rename from Modules/_decimal/libmpdec/memory.c
rename to Modules/_decimal/libmpdec/mpalloc.c
index a854e09..eb5ee7a 100644
--- a/Modules/_decimal/libmpdec/memory.c
+++ b/Modules/_decimal/libmpdec/mpalloc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,10 +27,14 @@
 
 
 #include "mpdecimal.h"
+
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include "typearith.h"
+#include <string.h>
+
 #include "mpalloc.h"
+#include "typearith.h"
 
 
 #if defined(_MSC_VER)
@@ -294,4 +298,59 @@
     return 1;
 }
 
+/*
+ * Input: 'result' is a static mpd_t with a static coefficient.
+ * Assumption: 'nwords' >= result->alloc.
+ *
+ * Resize the static coefficient to a larger dynamic one and copy the
+ * existing data.
+ *
+ * On failure the value of 'result' is unchanged.
+ */
+int
+mpd_switch_to_dyn_cxx(mpd_t *result, mpd_ssize_t nwords)
+{
+    assert(nwords >= result->alloc);
 
+    mpd_uint_t *data = mpd_alloc(nwords, sizeof *result->data);
+    if (data == NULL) {
+        return 0;
+    }
+
+    memcpy(data, result->data, result->alloc * (sizeof *result->data));
+    result->data = data;
+    result->alloc = nwords;
+    mpd_set_dynamic_data(result);
+    return 1;
+}
+
+/*
+ * Input: 'result' is a static or a dynamic mpd_t with a dynamic coefficient.
+ * Resize the coefficient to length 'nwords':
+ *   Case nwords > result->alloc:
+ *     If realloc is successful:
+ *       'result' has a larger coefficient but the same value. Return 1.
+ *     Otherwise:
+ *       'result' has a the same coefficient. Return 0.
+ *   Case nwords < result->alloc:
+ *     If realloc is successful:
+ *       'result' has a smaller coefficient. result->len is undefined. Return 1.
+ *     Otherwise (unlikely):
+ *       'result' is unchanged. Reuse the now oversized coefficient. Return 1.
+ */
+int
+mpd_realloc_dyn_cxx(mpd_t *result, mpd_ssize_t nwords)
+{
+    uint8_t err = 0;
+
+    mpd_uint_t *p = mpd_realloc(result->data, nwords, sizeof *result->data, &err);
+    if (!err) {
+        result->data = p;
+        result->alloc = nwords;
+    }
+    else if (nwords > result->alloc) {
+        return 0;
+    }
+
+    return 1;
+}
diff --git a/Modules/_decimal/libmpdec/mpalloc.h b/Modules/_decimal/libmpdec/mpalloc.h
index efd7119..1868084 100644
--- a/Modules/_decimal/libmpdec/mpalloc.h
+++ b/Modules/_decimal/libmpdec/mpalloc.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,14 @@
  */
 
 
-#ifndef MPALLOC_H
-#define MPALLOC_H
+#ifndef LIBMPDEC_MPALLOC_H_
+#define LIBMPDEC_MPALLOC_H_
 
 
 #include "mpdecimal.h"
 
+#include <stdint.h>
+
 
 /* Internal header file: all symbols have local scope in the DSO */
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_START)
@@ -41,11 +43,11 @@
 int mpd_switch_to_dyn_zero(mpd_t *result, mpd_ssize_t size, uint32_t *status);
 int mpd_realloc_dyn(mpd_t *result, mpd_ssize_t size, uint32_t *status);
 
+int mpd_switch_to_dyn_cxx(mpd_t *result, mpd_ssize_t size);
+int mpd_realloc_dyn_cxx(mpd_t *result, mpd_ssize_t size);
+
 
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
-
-
-
+#endif /* LIBMPDEC_MPALLOC_H_ */
diff --git a/Modules/_decimal/libmpdec/mpdecimal.c b/Modules/_decimal/libmpdec/mpdecimal.c
index bfa8bb3..28b639c 100644
--- a/Modules/_decimal/libmpdec/mpdecimal.c
+++ b/Modules/_decimal/libmpdec/mpdecimal.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,18 +27,21 @@
 
 
 #include "mpdecimal.h"
+
+#include <assert.h>
+#include <limits.h>
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <limits.h>
-#include <math.h>
+
 #include "basearith.h"
 #include "bits.h"
+#include "constants.h"
 #include "convolute.h"
 #include "crt.h"
 #include "mpalloc.h"
 #include "typearith.h"
-#include "umodarith.h"
 
 #ifdef PPRO
   #if defined(_MSC_VER)
@@ -61,7 +64,7 @@
 
 #if defined(_MSC_VER)
   #define ALWAYS_INLINE __forceinline
-#elif defined(LEGACY_COMPILER)
+#elif defined(__IBMC__) || defined(LEGACY_COMPILER)
   #define ALWAYS_INLINE
   #undef inline
   #define inline
@@ -241,7 +244,7 @@
 }
 
 /* Coefficient size needed to store 'digits' */
-ALWAYS_INLINE mpd_ssize_t
+mpd_ssize_t
 mpd_digits_to_size(mpd_ssize_t digits)
 {
     mpd_ssize_t q, r;
@@ -260,8 +263,9 @@
 
 /* Canonical */
 ALWAYS_INLINE int
-mpd_iscanonical(const mpd_t *dec UNUSED)
+mpd_iscanonical(const mpd_t *dec)
 {
+    (void)dec;
     return 1;
 }
 
@@ -512,6 +516,28 @@
     return mpd_realloc_dyn(result, nwords, status);
 }
 
+/* Same as mpd_qresize, but do not set the result no NaN on failure. */
+static ALWAYS_INLINE int
+mpd_qresize_cxx(mpd_t *result, mpd_ssize_t nwords)
+{
+    assert(!mpd_isconst_data(result)); /* illegal operation for a const */
+    assert(!mpd_isshared_data(result)); /* illegal operation for a shared */
+    assert(MPD_MINALLOC <= result->alloc);
+
+    nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords;
+    if (nwords == result->alloc) {
+        return 1;
+    }
+    if (mpd_isstatic_data(result)) {
+        if (nwords > result->alloc) {
+            return mpd_switch_to_dyn_cxx(result, nwords);
+        }
+        return 1;
+    }
+
+    return mpd_realloc_dyn_cxx(result, nwords);
+}
+
 /* Same as mpd_qresize, but the complete coefficient (including the old
  * memory area!) is initialized to zero. */
 ALWAYS_INLINE int
@@ -1192,7 +1218,7 @@
         result->data[i] = w[i];
     }
 
-    mpd_set_sign(result, sign);
+    mpd_set_flags(result, sign);
     result->exp = 0;
     result->len = len;
     mpd_setdigits(result);
@@ -1244,6 +1270,26 @@
 #endif
 }
 
+/* quietly set a decimal from an int64_t, use a maxcontext for conversion */
+void
+mpd_qset_i64_exact(mpd_t *result, int64_t a, uint32_t *status)
+{
+    mpd_context_t maxcontext;
+
+    mpd_maxcontext(&maxcontext);
+#ifdef CONFIG_64
+    mpd_qset_ssize(result, a, &maxcontext, status);
+#else
+    _c32_qset_i64(result, a, &maxcontext, status);
+#endif
+
+    if (*status & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+        /* we want exact results */
+        mpd_seterror(result, MPD_Invalid_operation, status);
+    }
+    *status &= MPD_Errors;
+}
+
 /* quietly set a decimal from a uint64_t */
 void
 mpd_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx,
@@ -1255,8 +1301,27 @@
     _c32_qset_u64(result, a, ctx, status);
 #endif
 }
-#endif /* !LEGACY_COMPILER */
 
+/* quietly set a decimal from a uint64_t, use a maxcontext for conversion */
+void
+mpd_qset_u64_exact(mpd_t *result, uint64_t a, uint32_t *status)
+{
+    mpd_context_t maxcontext;
+
+    mpd_maxcontext(&maxcontext);
+#ifdef CONFIG_64
+    mpd_qset_uint(result, a, &maxcontext, status);
+#else
+    _c32_qset_u64(result, a, &maxcontext, status);
+#endif
+
+    if (*status & (MPD_Inexact|MPD_Rounded|MPD_Clamped)) {
+        /* we want exact results */
+        mpd_seterror(result, MPD_Invalid_operation, status);
+    }
+    *status &= MPD_Errors;
+}
+#endif /* !LEGACY_COMPILER */
 
 /*
  * Quietly get an mpd_uint_t from a decimal. Assumes
@@ -1345,11 +1410,13 @@
 mpd_ssize_t
 mpd_qget_ssize(const mpd_t *a, uint32_t *status)
 {
+    uint32_t workstatus = 0;
     mpd_uint_t u;
     int isneg;
 
-    u = mpd_qabs_uint(a, status);
-    if (*status&MPD_Invalid_operation) {
+    u = mpd_qabs_uint(a, &workstatus);
+    if (workstatus&MPD_Invalid_operation) {
+        *status |= workstatus;
         return MPD_SSIZE_MAX;
     }
 
@@ -1469,9 +1536,11 @@
 uint32_t
 mpd_qget_u32(const mpd_t *a, uint32_t *status)
 {
-    uint64_t x = mpd_qget_uint(a, status);
+    uint32_t workstatus = 0;
+    uint64_t x = mpd_qget_uint(a, &workstatus);
 
-    if (*status&MPD_Invalid_operation) {
+    if (workstatus&MPD_Invalid_operation) {
+        *status |= workstatus;
         return UINT32_MAX;
     }
     if (x > UINT32_MAX) {
@@ -1486,9 +1555,11 @@
 int32_t
 mpd_qget_i32(const mpd_t *a, uint32_t *status)
 {
-    int64_t x = mpd_qget_ssize(a, status);
+    uint32_t workstatus = 0;
+    int64_t x = mpd_qget_ssize(a, &workstatus);
 
-    if (*status&MPD_Invalid_operation) {
+    if (workstatus&MPD_Invalid_operation) {
+        *status |= workstatus;
         return INT32_MAX;
     }
     if (x < INT32_MIN || x > INT32_MAX) {
@@ -1504,14 +1575,20 @@
 uint64_t
 mpd_qget_u64(const mpd_t *a, uint32_t *status)
 {
-    return _c32_qget_u64(1, a, status);
+    uint32_t workstatus = 0;
+    uint64_t x = _c32_qget_u64(1, a, &workstatus);
+    *status |= workstatus;
+    return x;
 }
 
 /* quietly get an int64_t from a decimal */
 int64_t
 mpd_qget_i64(const mpd_t *a, uint32_t *status)
 {
-    return _c32_qget_i64(a, status);
+    uint32_t workstatus = 0;
+    int64_t x = _c32_qget_i64(a, &workstatus);
+    *status |= workstatus;
+    return x;
 }
 #endif
 
@@ -1937,6 +2014,25 @@
     return 1;
 }
 
+/* Same as mpd_qcopy, but do not set the result to NaN on failure. */
+int
+mpd_qcopy_cxx(mpd_t *result, const mpd_t *a)
+{
+    if (result == a) return 1;
+
+    if (!mpd_qresize_cxx(result, a->len)) {
+        return 0;
+    }
+
+    mpd_copy_flags(result, a);
+    result->exp = a->exp;
+    result->digits = a->digits;
+    result->len = a->len;
+    memcpy(result->data, a->data, a->len * (sizeof *result->data));
+
+    return 1;
+}
+
 /*
  * Copy to a decimal with a static buffer. The caller has to make sure that
  * the buffer is big enough. Cannot fail.
@@ -3780,7 +3876,72 @@
 mpd_qdiv(mpd_t *q, const mpd_t *a, const mpd_t *b,
          const mpd_context_t *ctx, uint32_t *status)
 {
-    _mpd_qdiv(SET_IDEAL_EXP, q, a, b, ctx, status);
+    MPD_NEW_STATIC(aa,0,0,0,0);
+    MPD_NEW_STATIC(bb,0,0,0,0);
+    uint32_t xstatus = 0;
+
+    if (q == a) {
+        if (!mpd_qcopy(&aa, a, status)) {
+            mpd_seterror(q, MPD_Malloc_error, status);
+            goto out;
+        }
+        a = &aa;
+    }
+
+    if (q == b) {
+        if (!mpd_qcopy(&bb, b, status)) {
+            mpd_seterror(q, MPD_Malloc_error, status);
+            goto out;
+        }
+        b = &bb;
+    }
+
+    _mpd_qdiv(SET_IDEAL_EXP, q, a, b, ctx, &xstatus);
+
+    if (xstatus & (MPD_Malloc_error|MPD_Division_impossible)) {
+        /* Inexact quotients (the usual case) fill the entire context precision,
+         * which can lead to the above errors for very high precisions. Retry
+         * the operation with a lower precision in case the result is exact.
+         *
+         * We need an upper bound for the number of digits of a_coeff / b_coeff
+         * when the result is exact.  If a_coeff' * 1 / b_coeff' is in lowest
+         * terms, then maxdigits(a_coeff') + maxdigits(1 / b_coeff') is a suitable
+         * bound.
+         *
+         * 1 / b_coeff' is exact iff b_coeff' exclusively has prime factors 2 or 5.
+         * The largest amount of digits is generated if b_coeff' is a power of 2 or
+         * a power of 5 and is less than or equal to log5(b_coeff') <= log2(b_coeff').
+         *
+         * We arrive at a total upper bound:
+         *
+         *   maxdigits(a_coeff') + maxdigits(1 / b_coeff') <=
+         *   log10(a_coeff) + log2(b_coeff) =
+         *   log10(a_coeff) + log10(b_coeff) / log10(2) <=
+         *   a->digits + b->digits * 4;
+         */
+        mpd_context_t workctx = *ctx;
+        uint32_t ystatus = 0;
+
+        workctx.prec = a->digits + b->digits * 4;
+        if (workctx.prec >= ctx->prec) {
+            *status |= (xstatus&MPD_Errors);
+            goto out;  /* No point in retrying, keep the original error. */
+        }
+
+        _mpd_qdiv(SET_IDEAL_EXP, q, a, b, &workctx, &ystatus);
+        if (ystatus != 0) {
+            ystatus = *status | ((ystatus|xstatus)&MPD_Errors);
+            mpd_seterror(q, ystatus, status);
+        }
+    }
+    else {
+        *status |= xstatus;
+    }
+
+
+out:
+    mpd_del(&aa);
+    mpd_del(&bb);
 }
 
 /* Internal function. */
@@ -3870,6 +4031,7 @@
     }
 
     if (b->len == 1) {
+        assert(b->data[0] != 0); /* annotation for scan-build */
         if (a->len == 1) {
             _mpd_div_word(&q->data[0], &r->data[0], a->data[0], b->data[0]);
         }
@@ -6214,9 +6376,11 @@
     workctx.round = MPD_ROUND_HALF_EVEN;
     workctx.clamp = 0;
     if (mpd_isnegative(exp)) {
+        uint32_t workstatus = 0;
         workctx.prec += 1;
-        mpd_qdiv(&tbase, &one, base, &workctx, status);
-        if (*status&MPD_Errors) {
+        mpd_qdiv(&tbase, &one, base, &workctx, &workstatus);
+        *status |= workstatus;
+        if (workstatus&MPD_Errors) {
             mpd_setspecial(result, MPD_POS, MPD_NAN);
             goto finish;
         }
@@ -6951,6 +7115,8 @@
     mpd_ssize_t expdiff, qdigits;
     int cmp, isodd, allnine;
 
+    assert(r != NULL); /* annotation for scan-build */
+
     if (mpd_isspecial(a) || mpd_isspecial(b)) {
         if (mpd_qcheck_nans(r, a, b, ctx, status)) {
             return;
@@ -7181,6 +7347,11 @@
 mpd_qtrunc(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
            uint32_t *status)
 {
+    if (mpd_isspecial(a)) {
+        mpd_seterror(result, MPD_Invalid_operation, status);
+        return;
+    }
+
     (void)_mpd_qround_to_integral(TO_INT_TRUNC, result, a, ctx, status);
 }
 
@@ -7189,6 +7360,12 @@
            uint32_t *status)
 {
     mpd_context_t workctx = *ctx;
+
+    if (mpd_isspecial(a)) {
+        mpd_seterror(result, MPD_Invalid_operation, status);
+        return;
+    }
+
     workctx.round = MPD_ROUND_FLOOR;
     (void)_mpd_qround_to_integral(TO_INT_SILENT, result, a,
                                   &workctx, status);
@@ -7199,6 +7376,12 @@
           uint32_t *status)
 {
     mpd_context_t workctx = *ctx;
+
+    if (mpd_isspecial(a)) {
+        mpd_seterror(result, MPD_Invalid_operation, status);
+        return;
+    }
+
     workctx.round = MPD_ROUND_CEILING;
     (void)_mpd_qround_to_integral(TO_INT_SILENT, result, a,
                                   &workctx, status);
@@ -7702,9 +7885,9 @@
 /* END LIBMPDEC_ONLY */
 
 /* Algorithm from decimal.py */
-void
-mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
-          uint32_t *status)
+static void
+_mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+           uint32_t *status)
 {
     mpd_context_t maxcontext;
     MPD_NEW_STATIC(c,0,0,0,0);
@@ -7836,6 +8019,56 @@
     goto out;
 }
 
+void
+mpd_qsqrt(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
+          uint32_t *status)
+{
+    MPD_NEW_STATIC(aa,0,0,0,0);
+    uint32_t xstatus = 0;
+
+    if (result == a) {
+        if (!mpd_qcopy(&aa, a, status)) {
+            mpd_seterror(result, MPD_Malloc_error, status);
+            goto out;
+        }
+        a = &aa;
+    }
+
+    _mpd_qsqrt(result, a, ctx, &xstatus);
+
+    if (xstatus & (MPD_Malloc_error|MPD_Division_impossible)) {
+        /* The above conditions can occur at very high context precisions
+         * if intermediate values get too large. Retry the operation with
+         * a lower context precision in case the result is exact.
+         *
+         * If the result is exact, an upper bound for the number of digits
+         * is the number of digits in the input.
+         *
+         * NOTE: sqrt(40e9) = 2.0e+5 /\ digits(40e9) = digits(2.0e+5) = 2
+         */
+        uint32_t ystatus = 0;
+        mpd_context_t workctx = *ctx;
+
+        workctx.prec = a->digits;
+        if (workctx.prec >= ctx->prec) {
+            *status |= (xstatus|MPD_Errors);
+            goto out; /* No point in repeating this, keep the original error. */
+        }
+
+        _mpd_qsqrt(result, a, &workctx, &ystatus);
+        if (ystatus != 0) {
+            ystatus = *status | ((xstatus|ystatus)&MPD_Errors);
+            mpd_seterror(result, ystatus, status);
+        }
+    }
+    else {
+        *status |= xstatus;
+    }
+
+out:
+    mpd_del(&aa);
+}
+
 
 /******************************************************************************/
 /*                              Base conversions                              */
@@ -7847,6 +8080,7 @@
 {
     double x;
     size_t digits;
+    double upper_bound;
 
     assert(mpd_isinteger(a));
     assert(base >= 2);
@@ -7863,10 +8097,14 @@
     if (digits > 2711437152599294ULL) {
         return SIZE_MAX;
     }
+
+    upper_bound = (double)((1ULL<<53)-1);
+#else
+    upper_bound = (double)(SIZE_MAX-1);
 #endif
 
     x = (double)digits / log10(base);
-    return (x > SIZE_MAX-1) ? SIZE_MAX : (size_t)x + 1;
+    return (x > upper_bound) ? SIZE_MAX : (size_t)x + 1;
 }
 
 /* Space needed to import a base 'base' integer of length 'srclen'. */
@@ -7874,6 +8112,7 @@
 _mpd_importsize(size_t srclen, uint32_t base)
 {
     double x;
+    double upper_bound;
 
     assert(srclen > 0);
     assert(base >= 2);
@@ -7882,10 +8121,15 @@
     if (srclen > (1ULL<<53)) {
         return MPD_SSIZE_MAX;
     }
+
+    assert((1ULL<<53) <= MPD_MAXIMPORT);
+    upper_bound = (double)((1ULL<<53)-1);
+#else
+    upper_bound = MPD_MAXIMPORT-1;
 #endif
 
     x = (double)srclen * (log10(base)/MPD_RDIGITS);
-    return (x >= MPD_MAXIMPORT) ? MPD_SSIZE_MAX : (mpd_ssize_t)x + 1;
+    return (x > upper_bound) ? MPD_SSIZE_MAX : (mpd_ssize_t)x + 1;
 }
 
 static uint8_t
@@ -8412,6 +8656,3 @@
     mpd_qresize(result, result->len, status);
     mpd_qfinalize(result, ctx, status);
 }
-
-
-
diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h
index a67dd9b..5a24396 100644
--- a/Modules/_decimal/libmpdec/mpdecimal.h
+++ b/Modules/_decimal/libmpdec/mpdecimal.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,59 +26,45 @@
  */
 
 
-#ifndef MPDECIMAL_H
-#define MPDECIMAL_H
-
-
-#ifdef __cplusplus
-extern "C" {
-  #ifndef __STDC_LIMIT_MACROS
-    #define __STDC_LIMIT_MACROS
-    #define MPD_CLEAR_STDC_LIMIT_MACROS
-  #endif
-#endif
+#ifndef LIBMPDEC_MPDECIMAL_H_
+#define LIBMPDEC_MPDECIMAL_H_
 
 
 #ifndef _MSC_VER
   #include "pyconfig.h"
 #endif
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <assert.h>
-#include <stdint.h>
-#include <inttypes.h>
+#ifdef __cplusplus
+  #include <cinttypes>
+  #include <climits>
+  #include <cstdint>
+  #include <cstdio>
+  #include <cstdlib>
+extern "C" {
+#else
+  #include <inttypes.h>
+  #include <limits.h>
+  #include <stdint.h>
+  #include <stdio.h>
+  #include <stdlib.h>
+#endif
 
-#ifdef _MSC_VER
-  #include "vccompat.h"
-  #ifndef UNUSED
-    #define UNUSED
-  #endif
+
+#if (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) && \
+    defined(__GNUC__) && __GNUC__ >= 4 && !defined(__INTEL_COMPILER)
+  #define MPD_PRAGMA(x) _Pragma(x)
+  #define MPD_HIDE_SYMBOLS_START "GCC visibility push(hidden)"
+  #define MPD_HIDE_SYMBOLS_END "GCC visibility pop"
+#else
   #define MPD_PRAGMA(x)
   #define MPD_HIDE_SYMBOLS_START
   #define MPD_HIDE_SYMBOLS_END
+#endif
+
+#if defined(_MSC_VER)
+  #include "vccompat.h"
   #define EXTINLINE extern inline
 #else
-  #ifndef __GNUC_STDC_INLINE__
-    #define __GNUC_STDC_INLINE__ 1
-  #endif
-  #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
-    #define UNUSED __attribute__((unused))
-  #else
-    #define UNUSED
-  #endif
-  #if (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) && \
-      defined(__GNUC__) && __GNUC__ >= 4 && !defined(__INTEL_COMPILER)
-    #define MPD_PRAGMA(x) _Pragma(x)
-    #define MPD_HIDE_SYMBOLS_START "GCC visibility push(hidden)"
-    #define MPD_HIDE_SYMBOLS_END "GCC visibility pop"
-  #else
-    #define MPD_PRAGMA(x)
-    #define MPD_HIDE_SYMBOLS_START
-    #define MPD_HIDE_SYMBOLS_END
-  #endif
   #define EXTINLINE
 #endif
 
@@ -103,10 +89,10 @@
 /******************************************************************************/
 
 #define MPD_MAJOR_VERSION 2
-#define MPD_MINOR_VERSION 4
-#define MPD_MICRO_VERSION 2
+#define MPD_MINOR_VERSION 5
+#define MPD_MICRO_VERSION 0
 
-#define MPD_VERSION "2.4.2"
+#define MPD_VERSION "2.5.0"
 
 #define MPD_VERSION_HEX ((MPD_MAJOR_VERSION << 24) | \
                          (MPD_MINOR_VERSION << 16) | \
@@ -135,6 +121,9 @@
   #elif defined(__x86_64__)
     #define CONFIG_64
     #define ASM
+  #elif defined(__arm64__)
+    #define CONFIG_64
+    #define ANSI
   #else
     #error "unknown architecture for universal build."
   #endif
@@ -423,6 +412,7 @@
 
 /* assignment from a string */
 void mpd_qset_string(mpd_t *dec, const char *s, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qset_string_exact(mpd_t *dec, const char *s, uint32_t *status);
 
 /* set to NaN with error flags */
 void mpd_seterror(mpd_t *result, uint32_t flags, uint32_t *status);
@@ -440,6 +430,8 @@
 #ifndef LEGACY_COMPILER
 void mpd_qset_i64(mpd_t *result, int64_t a, const mpd_context_t *ctx, uint32_t *status);
 void mpd_qset_u64(mpd_t *result, uint64_t a, const mpd_context_t *ctx, uint32_t *status);
+void mpd_qset_i64_exact(mpd_t *result, int64_t a, uint32_t *status);
+void mpd_qset_u64_exact(mpd_t *result, uint64_t a, uint32_t *status);
 #endif
 
 /* quietly assign a C integer type to an mpd_t with a static coefficient */
@@ -467,7 +459,8 @@
 
 const char *mpd_class(const mpd_t *a, const mpd_context_t *ctx);
 
-int mpd_qcopy(mpd_t *result, const mpd_t *a,  uint32_t *status);
+int mpd_qcopy(mpd_t *result, const mpd_t *a, uint32_t *status);
+int mpd_qcopy_cxx(mpd_t *result, const mpd_t *a);
 mpd_t *mpd_qncopy(const mpd_t *a);
 int mpd_qcopy_abs(mpd_t *result, const mpd_t *a, uint32_t *status);
 int mpd_qcopy_negate(mpd_t *result, const mpd_t *a, uint32_t *status);
@@ -721,7 +714,7 @@
 EXTINLINE mpd_ssize_t mpd_digits_to_size(mpd_ssize_t digits);
 /* number of digits in the exponent, undefined for MPD_SSIZE_MIN */
 EXTINLINE int mpd_exp_digits(mpd_ssize_t exp);
-EXTINLINE int mpd_iscanonical(const mpd_t *dec UNUSED);
+EXTINLINE int mpd_iscanonical(const mpd_t *dec);
 EXTINLINE int mpd_isfinite(const mpd_t *dec);
 EXTINLINE int mpd_isinfinite(const mpd_t *dec);
 EXTINLINE int mpd_isinteger(const mpd_t *dec);
@@ -833,15 +826,8 @@
 
 
 #ifdef __cplusplus
-  #ifdef MPD_CLEAR_STDC_LIMIT_MACROS
-    #undef MPD_CLEAR_STDC_LIMIT_MACROS
-    #undef __STDC_LIMIT_MACROS
-  #endif
 } /* END extern "C" */
 #endif
 
 
-#endif /* MPDECIMAL_H */
-
-
-
+#endif /* LIBMPDEC_MPDECIMAL_H_ */
diff --git a/Modules/_decimal/libmpdec/numbertheory.c b/Modules/_decimal/libmpdec/numbertheory.c
index 4e03547..210e0de 100644
--- a/Modules/_decimal/libmpdec/numbertheory.c
+++ b/Modules/_decimal/libmpdec/numbertheory.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,11 +27,13 @@
 
 
 #include "mpdecimal.h"
-#include <stdlib.h>
+
 #include <assert.h>
+#include <stdlib.h>
+
 #include "bits.h"
-#include "umodarith.h"
 #include "numbertheory.h"
+#include "umodarith.h"
 
 
 /* Bignum: Initialize the Number Theoretic Transform. */
@@ -128,5 +130,3 @@
     w3table[1] = kernel;
     w3table[2] = POWMOD(kernel, 2);
 }
-
-
diff --git a/Modules/_decimal/libmpdec/numbertheory.h b/Modules/_decimal/libmpdec/numbertheory.h
index e94c157..47b7753 100644
--- a/Modules/_decimal/libmpdec/numbertheory.h
+++ b/Modules/_decimal/libmpdec/numbertheory.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,12 @@
  */
 
 
-#ifndef NUMBER_THEORY_H
-#define NUMBER_THEORY_H
+#ifndef LIBMPDEC_NUMBERTHEORY_H_
+#define LIBMPDEC_NUMBERTHEORY_H_
 
 
-#include "constants.h"
 #include "mpdecimal.h"
+#include "constants.h"
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -73,6 +73,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
-
-
+#endif /* LIBMPDEC_NUMBERTHEORY_H_ */
diff --git a/Modules/_decimal/libmpdec/sixstep.c b/Modules/_decimal/libmpdec/sixstep.c
index 92d513e..a4d1dbe 100644
--- a/Modules/_decimal/libmpdec/sixstep.c
+++ b/Modules/_decimal/libmpdec/sixstep.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,15 +27,17 @@
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
-#include <stdlib.h>
+
 #include <assert.h>
+#include <stdio.h>
+
 #include "bits.h"
+#include "constants.h"
 #include "difradix2.h"
 #include "numbertheory.h"
+#include "sixstep.h"
 #include "transpose.h"
 #include "umodarith.h"
-#include "sixstep.h"
 
 
 /* Bignum: Cache efficient Matrix Fourier Transform for arrays of the
@@ -210,5 +212,3 @@
 
     return 1;
 }
-
-
diff --git a/Modules/_decimal/libmpdec/sixstep.h b/Modules/_decimal/libmpdec/sixstep.h
index 4a8b015..89b4a33 100644
--- a/Modules/_decimal/libmpdec/sixstep.h
+++ b/Modules/_decimal/libmpdec/sixstep.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef SIX_STEP_H
-#define SIX_STEP_H
+#ifndef LIBMPDEC_SIXSTEP_H_
+#define LIBMPDEC_SIXSTEP_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -45,4 +44,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
+#endif /* LIBMPDEC_SIXSTEP_H_ */
diff --git a/Modules/_decimal/libmpdec/transpose.c b/Modules/_decimal/libmpdec/transpose.c
index 55d6d89..56321b5 100644
--- a/Modules/_decimal/libmpdec/transpose.c
+++ b/Modules/_decimal/libmpdec/transpose.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,15 +27,17 @@
 
 
 #include "mpdecimal.h"
+
+#include <assert.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <limits.h>
-#include <assert.h>
+
 #include "bits.h"
 #include "constants.h"
-#include "typearith.h"
 #include "transpose.h"
+#include "typearith.h"
 
 
 #define BUFSIZE 4096
@@ -272,5 +274,3 @@
 
     return 1;
 }
-
-
diff --git a/Modules/_decimal/libmpdec/transpose.h b/Modules/_decimal/libmpdec/transpose.h
index e1cd1fa..e91c18d 100644
--- a/Modules/_decimal/libmpdec/transpose.h
+++ b/Modules/_decimal/libmpdec/transpose.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,11 @@
  */
 
 
-#ifndef TRANSPOSE_H
-#define TRANSPOSE_H
+#ifndef LIBMPDEC_TRANSPOSE_H_
+#define LIBMPDEC_TRANSPOSE_H_
 
 
 #include "mpdecimal.h"
-#include <stdio.h>
 
 
 /* Internal header file: all symbols have local scope in the DSO */
@@ -59,4 +58,4 @@
 MPD_PRAGMA(MPD_HIDE_SYMBOLS_END) /* restore previous scope rules */
 
 
-#endif
+#endif /* LIBMPDEC_TRANSPOSE_H_ */
diff --git a/Modules/_decimal/libmpdec/typearith.h b/Modules/_decimal/libmpdec/typearith.h
index 405237d..4796178 100644
--- a/Modules/_decimal/libmpdec/typearith.h
+++ b/Modules/_decimal/libmpdec/typearith.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,14 @@
  */
 
 
-#ifndef TYPEARITH_H
-#define TYPEARITH_H
+#ifndef LIBMPDEC_TYPEARITH_H_
+#define LIBMPDEC_TYPEARITH_H_
 
 
 #include "mpdecimal.h"
 
+#include <assert.h>
+
 
 /*****************************************************************************/
 /*                 Low level native arithmetic on basic types                */
@@ -663,7 +665,4 @@
 }
 
 
-#endif /* TYPEARITH_H */
-
-
-
+#endif /* LIBMPDEC_TYPEARITH_H_ */
diff --git a/Modules/_decimal/libmpdec/umodarith.h b/Modules/_decimal/libmpdec/umodarith.h
index 68d1518..d7dbbbe 100644
--- a/Modules/_decimal/libmpdec/umodarith.h
+++ b/Modules/_decimal/libmpdec/umodarith.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,12 +26,13 @@
  */
 
 
-#ifndef UMODARITH_H
-#define UMODARITH_H
+#ifndef LIBMPDEC_UMODARITH_H_
+#define LIBMPDEC_UMODARITH_H_
 
 
+#include "mpdecimal.h"
+
 #include "constants.h"
-#include "mpdecimal.h"
 #include "typearith.h"
 
 
@@ -644,7 +645,4 @@
 #endif /* CONFIG_32 */
 
 
-#endif /* UMODARITH_H */
-
-
-
+#endif /* LIBMPDEC_UMODARITH_H_ */
diff --git a/Modules/_decimal/libmpdec/vccompat.h b/Modules/_decimal/libmpdec/vccompat.h
index dd131d8..e2e1c42 100644
--- a/Modules/_decimal/libmpdec/vccompat.h
+++ b/Modules/_decimal/libmpdec/vccompat.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+ * Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,14 +26,16 @@
  */
 
 
-#ifndef VCCOMPAT_H
-#define VCCOMPAT_H
+#ifndef LIBMPDEC_VCCOMPAT_H_
+#define LIBMPDEC_VCCOMPAT_H_
 
 
-/* Visual C fixes: no stdint.h, no snprintf ... */
+/* Visual C fixes: no snprintf ... */
 #ifdef _MSC_VER
-  #undef inline
-  #define inline __inline
+  #ifndef __cplusplus
+    #undef inline
+    #define inline __inline
+  #endif
   #undef random
   #define random rand
   #undef srandom
@@ -51,7 +53,4 @@
 #endif
 
 
-#endif /* VCCOMPAT_H */
-
-
-
+#endif /* LIBMPDEC_VCCOMPAT_H_ */
diff --git a/Modules/_decimal/libmpdec/vcdiv64.asm b/Modules/_decimal/libmpdec/vcdiv64.asm
index 6b66456..597e9ba 100644
--- a/Modules/_decimal/libmpdec/vcdiv64.asm
+++ b/Modules/_decimal/libmpdec/vcdiv64.asm
@@ -1,5 +1,5 @@
 ;
-; Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
+; Copyright (c) 2008-2020 Stefan Krah. All rights reserved.
 ;
 ; Redistribution and use in source and binary forms, with or without
 ; modification, are permitted provided that the following conditions
@@ -44,5 +44,3 @@
 _mpd_div_words ENDP
 _TEXT    ENDS
 END
-
-
diff --git a/Modules/_decimal/libmpdec/vcstdint.h b/Modules/_decimal/libmpdec/vcstdint.h
deleted file mode 100644
index 17dcad4..0000000
--- a/Modules/_decimal/libmpdec/vcstdint.h
+++ /dev/null
@@ -1,232 +0,0 @@
-// ISO C9x  compliant stdint.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-//  Copyright (c) 2006-2008 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-//   1. Redistributions of source code must retain the above copyright notice,
-//      this list of conditions and the following disclaimer.
-//
-//   2. Redistributions in binary form must reproduce the above copyright
-//      notice, this list of conditions and the following disclaimer in the
-//      documentation and/or other materials provided with the distribution.
-//
-//   3. The name of the author may be used to endorse or promote products
-//      derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef _MSC_STDINT_H_ // [
-#define _MSC_STDINT_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <limits.h>
-
-// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
-// or compiler give many errors like this:
-//   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
-#if (_MSC_VER < 1300) && defined(__cplusplus)
-   extern "C++" {
-#endif
-#     include <wchar.h>
-#if (_MSC_VER < 1300) && defined(__cplusplus)
-   }
-#endif
-
-// Define _W64 macros to mark types changing their size, like intptr_t.
-#ifndef _W64
-#  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-#     define _W64 __w64
-#  else
-#     define _W64
-#  endif
-#endif
-
-
-// 7.18.1 Integer types
-
-// 7.18.1.1 Exact-width integer types
-typedef __int8            int8_t;
-typedef __int16           int16_t;
-typedef __int32           int32_t;
-typedef __int64           int64_t;
-typedef unsigned __int8   uint8_t;
-typedef unsigned __int16  uint16_t;
-typedef unsigned __int32  uint32_t;
-typedef unsigned __int64  uint64_t;
-
-// 7.18.1.2 Minimum-width integer types
-typedef int8_t    int_least8_t;
-typedef int16_t   int_least16_t;
-typedef int32_t   int_least32_t;
-typedef int64_t   int_least64_t;
-typedef uint8_t   uint_least8_t;
-typedef uint16_t  uint_least16_t;
-typedef uint32_t  uint_least32_t;
-typedef uint64_t  uint_least64_t;
-
-// 7.18.1.3 Fastest minimum-width integer types
-typedef int8_t    int_fast8_t;
-typedef int16_t   int_fast16_t;
-typedef int32_t   int_fast32_t;
-typedef int64_t   int_fast64_t;
-typedef uint8_t   uint_fast8_t;
-typedef uint16_t  uint_fast16_t;
-typedef uint32_t  uint_fast32_t;
-typedef uint64_t  uint_fast64_t;
-
-// 7.18.1.4 Integer types capable of holding object pointers
-#ifdef _WIN64 // [
-   typedef __int64           intptr_t;
-   typedef unsigned __int64  uintptr_t;
-#else // _WIN64 ][
-   typedef _W64 int               intptr_t;
-   typedef _W64 unsigned int      uintptr_t;
-#endif // _WIN64 ]
-
-// 7.18.1.5 Greatest-width integer types
-typedef int64_t   intmax_t;
-typedef uint64_t  uintmax_t;
-
-
-// 7.18.2 Limits of specified-width integer types
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
-
-// 7.18.2.1 Limits of exact-width integer types
-#define INT8_MIN     ((int8_t)_I8_MIN)
-#define INT8_MAX     _I8_MAX
-#define INT16_MIN    ((int16_t)_I16_MIN)
-#define INT16_MAX    _I16_MAX
-#define INT32_MIN    ((int32_t)_I32_MIN)
-#define INT32_MAX    _I32_MAX
-#define INT64_MIN    ((int64_t)_I64_MIN)
-#define INT64_MAX    _I64_MAX
-#define UINT8_MAX    _UI8_MAX
-#define UINT16_MAX   _UI16_MAX
-#define UINT32_MAX   _UI32_MAX
-#define UINT64_MAX   _UI64_MAX
-
-// 7.18.2.2 Limits of minimum-width integer types
-#define INT_LEAST8_MIN    INT8_MIN
-#define INT_LEAST8_MAX    INT8_MAX
-#define INT_LEAST16_MIN   INT16_MIN
-#define INT_LEAST16_MAX   INT16_MAX
-#define INT_LEAST32_MIN   INT32_MIN
-#define INT_LEAST32_MAX   INT32_MAX
-#define INT_LEAST64_MIN   INT64_MIN
-#define INT_LEAST64_MAX   INT64_MAX
-#define UINT_LEAST8_MAX   UINT8_MAX
-#define UINT_LEAST16_MAX  UINT16_MAX
-#define UINT_LEAST32_MAX  UINT32_MAX
-#define UINT_LEAST64_MAX  UINT64_MAX
-
-// 7.18.2.3 Limits of fastest minimum-width integer types
-#define INT_FAST8_MIN    INT8_MIN
-#define INT_FAST8_MAX    INT8_MAX
-#define INT_FAST16_MIN   INT16_MIN
-#define INT_FAST16_MAX   INT16_MAX
-#define INT_FAST32_MIN   INT32_MIN
-#define INT_FAST32_MAX   INT32_MAX
-#define INT_FAST64_MIN   INT64_MIN
-#define INT_FAST64_MAX   INT64_MAX
-#define UINT_FAST8_MAX   UINT8_MAX
-#define UINT_FAST16_MAX  UINT16_MAX
-#define UINT_FAST32_MAX  UINT32_MAX
-#define UINT_FAST64_MAX  UINT64_MAX
-
-// 7.18.2.4 Limits of integer types capable of holding object pointers
-#ifdef _WIN64 // [
-#  define INTPTR_MIN   INT64_MIN
-#  define INTPTR_MAX   INT64_MAX
-#  define UINTPTR_MAX  UINT64_MAX
-#else // _WIN64 ][
-#  define INTPTR_MIN   INT32_MIN
-#  define INTPTR_MAX   INT32_MAX
-#  define UINTPTR_MAX  UINT32_MAX
-#endif // _WIN64 ]
-
-// 7.18.2.5 Limits of greatest-width integer types
-#define INTMAX_MIN   INT64_MIN
-#define INTMAX_MAX   INT64_MAX
-#define UINTMAX_MAX  UINT64_MAX
-
-// 7.18.3 Limits of other integer types
-
-#ifdef _WIN64 // [
-#  define PTRDIFF_MIN  _I64_MIN
-#  define PTRDIFF_MAX  _I64_MAX
-#else  // _WIN64 ][
-#  define PTRDIFF_MIN  _I32_MIN
-#  define PTRDIFF_MAX  _I32_MAX
-#endif  // _WIN64 ]
-
-#define SIG_ATOMIC_MIN  INT_MIN
-#define SIG_ATOMIC_MAX  INT_MAX
-
-#ifndef SIZE_MAX // [
-#  ifdef _WIN64 // [
-#     define SIZE_MAX  _UI64_MAX
-#  else // _WIN64 ][
-#     define SIZE_MAX  _UI32_MAX
-#  endif // _WIN64 ]
-#endif // SIZE_MAX ]
-
-// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
-#ifndef WCHAR_MIN // [
-#  define WCHAR_MIN  0
-#endif  // WCHAR_MIN ]
-#ifndef WCHAR_MAX // [
-#  define WCHAR_MAX  _UI16_MAX
-#endif  // WCHAR_MAX ]
-
-#define WINT_MIN  0
-#define WINT_MAX  _UI16_MAX
-
-#endif // __STDC_LIMIT_MACROS ]
-
-
-// 7.18.4 Limits of other integer types
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
-
-// 7.18.4.1 Macros for minimum-width integer constants
-
-#define INT8_C(val)  val##i8
-#define INT16_C(val) val##i16
-#define INT32_C(val) val##i32
-#define INT64_C(val) val##i64
-
-#define UINT8_C(val)  val##ui8
-#define UINT16_C(val) val##ui16
-#define UINT32_C(val) val##ui32
-#define UINT64_C(val) val##ui64
-
-// 7.18.4.2 Macros for greatest-width integer constants
-#define INTMAX_C   INT64_C
-#define UINTMAX_C  UINT64_C
-
-#endif // __STDC_CONSTANT_MACROS ]
-
-
-#endif // _MSC_STDINT_H_ ]
diff --git a/Modules/_decimal/tests/deccheck.py b/Modules/_decimal/tests/deccheck.py
index f907531..5d9179e 100644
--- a/Modules/_decimal/tests/deccheck.py
+++ b/Modules/_decimal/tests/deccheck.py
@@ -29,9 +29,20 @@
 # Usage: python deccheck.py [--short|--medium|--long|--all]
 #
 
-import sys, random
+
+import sys
+import os
+import time
+import random
 from copy import copy
 from collections import defaultdict
+
+import argparse
+import subprocess
+from subprocess import PIPE, STDOUT
+from queue import Queue, Empty
+from threading import Thread, Event, Lock
+
 from test.support import import_fresh_module
 from randdec import randfloat, all_unary, all_binary, all_ternary
 from randdec import unary_optarg, binary_optarg, ternary_optarg
@@ -125,6 +136,12 @@
     'special': ('context.__reduce_ex__', 'context.create_decimal_from_float')
 }
 
+# Functions that set no context flags but whose result can differ depending
+# on prec, Emin and Emax.
+MaxContextSkip = ['is_normal', 'is_subnormal', 'logical_invert', 'next_minus',
+                  'next_plus', 'number_class', 'logical_and', 'logical_or',
+                  'logical_xor', 'next_toward', 'rotate', 'shift']
+
 # Functions that require a restricted exponent range for reasonable runtimes.
 UnaryRestricted = [
   '__ceil__', '__floor__', '__int__', '__trunc__',
@@ -344,6 +361,20 @@
         self.pex = RestrictedList()      # Python exceptions for P.Decimal
         self.presults = RestrictedList() # P.Decimal results
 
+        # If the above results are exact, unrounded and not clamped, repeat
+        # the operation with a maxcontext to ensure that huge intermediate
+        # values do not cause a MemoryError.
+        self.with_maxcontext = False
+        self.maxcontext = context.c.copy()
+        self.maxcontext.prec = C.MAX_PREC
+        self.maxcontext.Emax = C.MAX_EMAX
+        self.maxcontext.Emin = C.MIN_EMIN
+        self.maxcontext.clear_flags()
+
+        self.maxop = RestrictedList()       # converted C.Decimal operands
+        self.maxex = RestrictedList()       # Python exceptions for C.Decimal
+        self.maxresults = RestrictedList()  # C.Decimal results
+
 
 # ======================================================================
 #                SkipHandler: skip known discrepancies
@@ -545,13 +576,17 @@
     if t.contextfunc:
         cargs = t.cop
         pargs = t.pop
+        maxargs = t.maxop
         cfunc = "c_func: %s(" % t.funcname
         pfunc = "p_func: %s(" % t.funcname
+        maxfunc = "max_func: %s(" % t.funcname
     else:
         cself, cargs = t.cop[0], t.cop[1:]
         pself, pargs = t.pop[0], t.pop[1:]
+        maxself, maxargs = t.maxop[0], t.maxop[1:]
         cfunc = "c_func: %s.%s(" % (repr(cself), t.funcname)
         pfunc = "p_func: %s.%s(" % (repr(pself), t.funcname)
+        maxfunc = "max_func: %s.%s(" % (repr(maxself), t.funcname)
 
     err = cfunc
     for arg in cargs:
@@ -565,6 +600,14 @@
     err = err.rstrip(", ")
     err += ")"
 
+    if t.with_maxcontext:
+        err += "\n"
+        err += maxfunc
+        for arg in maxargs:
+            err += "%s, " % repr(arg)
+        err = err.rstrip(", ")
+        err += ")"
+
     return err
 
 def raise_error(t):
@@ -577,9 +620,24 @@
     err = "Error in %s:\n\n" % t.funcname
     err += "input operands: %s\n\n" % (t.op,)
     err += function_as_string(t)
-    err += "\n\nc_result: %s\np_result: %s\n\n" % (t.cresults, t.presults)
-    err += "c_exceptions: %s\np_exceptions: %s\n\n" % (t.cex, t.pex)
-    err += "%s\n\n" % str(t.context)
+
+    err += "\n\nc_result: %s\np_result: %s\n" % (t.cresults, t.presults)
+    if t.with_maxcontext:
+        err += "max_result: %s\n\n" % (t.maxresults)
+    else:
+        err += "\n"
+
+    err += "c_exceptions: %s\np_exceptions: %s\n" % (t.cex, t.pex)
+    if t.with_maxcontext:
+        err += "max_exceptions: %s\n\n" % t.maxex
+    else:
+        err += "\n"
+
+    err += "%s\n" % str(t.context)
+    if t.with_maxcontext:
+        err += "%s\n" % str(t.maxcontext)
+    else:
+        err += "\n"
 
     raise VerifyError(err)
 
@@ -603,6 +661,13 @@
 #                are printed to stdout.
 # ======================================================================
 
+def all_nan(a):
+    if isinstance(a, C.Decimal):
+        return a.is_nan()
+    elif isinstance(a, tuple):
+        return all(all_nan(v) for v in a)
+    return False
+
 def convert(t, convstr=True):
     """ t is the testset. At this stage the testset contains a tuple of
         operands t.op of various types. For decimal methods the first
@@ -617,10 +682,12 @@
     for i, op in enumerate(t.op):
 
         context.clear_status()
+        t.maxcontext.clear_flags()
 
         if op in RoundModes:
             t.cop.append(op)
             t.pop.append(op)
+            t.maxop.append(op)
 
         elif not t.contextfunc and i == 0 or \
              convstr and isinstance(op, str):
@@ -638,11 +705,25 @@
                 p = None
                 pex = e.__class__
 
+            try:
+                C.setcontext(t.maxcontext)
+                maxop = C.Decimal(op)
+                maxex = None
+            except (TypeError, ValueError, OverflowError) as e:
+                maxop = None
+                maxex = e.__class__
+            finally:
+                C.setcontext(context.c)
+
             t.cop.append(c)
             t.cex.append(cex)
+
             t.pop.append(p)
             t.pex.append(pex)
 
+            t.maxop.append(maxop)
+            t.maxex.append(maxex)
+
             if cex is pex:
                 if str(c) != str(p) or not context.assert_eq_status():
                     raise_error(t)
@@ -652,14 +733,21 @@
             else:
                 raise_error(t)
 
+            # The exceptions in the maxcontext operation can legitimately
+            # differ, only test that maxex implies cex:
+            if maxex is not None and cex is not maxex:
+                raise_error(t)
+
         elif isinstance(op, Context):
             t.context = op
             t.cop.append(op.c)
             t.pop.append(op.p)
+            t.maxop.append(t.maxcontext)
 
         else:
             t.cop.append(op)
             t.pop.append(op)
+            t.maxop.append(op)
 
     return 1
 
@@ -673,6 +761,7 @@
         t.rc and t.rp are the results of the operation.
     """
     context.clear_status()
+    t.maxcontext.clear_flags()
 
     try:
         if t.contextfunc:
@@ -700,6 +789,35 @@
         t.rp = None
         t.pex.append(e.__class__)
 
+    # If the above results are exact, unrounded, normal etc., repeat the
+    # operation with a maxcontext to ensure that huge intermediate values
+    # do not cause a MemoryError.
+    if (t.funcname not in MaxContextSkip and
+        not context.c.flags[C.InvalidOperation] and
+        not context.c.flags[C.Inexact] and
+        not context.c.flags[C.Rounded] and
+        not context.c.flags[C.Subnormal] and
+        not context.c.flags[C.Clamped] and
+        not context.clamp and # results are padded to context.prec if context.clamp==1.
+        not any(isinstance(v, C.Context) for v in t.cop)): # another context is used.
+        t.with_maxcontext = True
+        try:
+            if t.contextfunc:
+                maxargs = t.maxop
+                t.rmax = getattr(t.maxcontext, t.funcname)(*maxargs)
+            else:
+                maxself = t.maxop[0]
+                maxargs = t.maxop[1:]
+                try:
+                    C.setcontext(t.maxcontext)
+                    t.rmax = getattr(maxself, t.funcname)(*maxargs)
+                finally:
+                    C.setcontext(context.c)
+            t.maxex.append(None)
+        except (TypeError, ValueError, OverflowError, MemoryError) as e:
+            t.rmax = None
+            t.maxex.append(e.__class__)
+
 def verify(t, stat):
     """ t is the testset. At this stage the testset contains the following
         tuples:
@@ -714,6 +832,9 @@
     """
     t.cresults.append(str(t.rc))
     t.presults.append(str(t.rp))
+    if t.with_maxcontext:
+        t.maxresults.append(str(t.rmax))
+
     if isinstance(t.rc, C.Decimal) and isinstance(t.rp, P.Decimal):
         # General case: both results are Decimals.
         t.cresults.append(t.rc.to_eng_string())
@@ -725,6 +846,12 @@
         t.presults.append(str(t.rp.imag))
         t.presults.append(str(t.rp.real))
 
+        if t.with_maxcontext and isinstance(t.rmax, C.Decimal):
+            t.maxresults.append(t.rmax.to_eng_string())
+            t.maxresults.append(t.rmax.as_tuple())
+            t.maxresults.append(str(t.rmax.imag))
+            t.maxresults.append(str(t.rmax.real))
+
         nc = t.rc.number_class().lstrip('+-s')
         stat[nc] += 1
     else:
@@ -732,6 +859,9 @@
         if not isinstance(t.rc, tuple) and not isinstance(t.rp, tuple):
             if t.rc != t.rp:
                 raise_error(t)
+            if t.with_maxcontext and not isinstance(t.rmax, tuple):
+                if t.rmax != t.rc:
+                    raise_error(t)
         stat[type(t.rc).__name__] += 1
 
     # The return value lists must be equal.
@@ -744,6 +874,20 @@
     if not t.context.assert_eq_status():
         raise_error(t)
 
+    if t.with_maxcontext:
+        # NaN payloads etc. depend on precision and clamp.
+        if all_nan(t.rc) and all_nan(t.rmax):
+            return
+        # The return value lists must be equal.
+        if t.maxresults != t.cresults:
+            raise_error(t)
+        # The Python exception lists (TypeError, etc.) must be equal.
+        if t.maxex != t.cex:
+            raise_error(t)
+        # The context flags must be equal.
+        if t.maxcontext.flags != t.context.c.flags:
+            raise_error(t)
+
 
 # ======================================================================
 #                           Main test loops
@@ -991,18 +1135,35 @@
 
     funcdict['untested'] = tuple(sorted(intersect-tested))
 
-    #for key in ('untested', 'c_only', 'p_only'):
-    #    s = 'Context' if c_cls == C.Context else 'Decimal'
-    #    print("\n%s %s:\n%s" % (s, key, funcdict[key]))
+    # for key in ('untested', 'c_only', 'p_only'):
+    #     s = 'Context' if c_cls == C.Context else 'Decimal'
+    #     print("\n%s %s:\n%s" % (s, key, funcdict[key]))
 
 
 if __name__ == '__main__':
 
-    import time
+    parser = argparse.ArgumentParser(prog="deccheck.py")
+
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument('--short', dest='time', action="store_const", const='short', default='short', help="short test (default)")
+    group.add_argument('--medium', dest='time', action="store_const", const='medium', default='short', help="medium test (reasonable run time)")
+    group.add_argument('--long', dest='time', action="store_const", const='long', default='short', help="long test (long run time)")
+    group.add_argument('--all', dest='time', action="store_const", const='all', default='short', help="all tests (excessive run time)")
+
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument('--single', dest='single', nargs=1, default=False, metavar="TEST", help="run a single test")
+    group.add_argument('--multicore', dest='multicore', action="store_true", default=False, help="use all available cores")
+
+    args = parser.parse_args()
+    assert args.single is False or args.multicore is False
+    if args.single:
+        args.single = args.single[0]
+
 
     randseed = int(time.time())
     random.seed(randseed)
 
+
     # Set up the testspecs list. A testspec is simply a dictionary
     # that determines the amount of different contexts that 'test_method'
     # will generate.
@@ -1035,17 +1196,17 @@
         {'prec': [34], 'expts': [(-6143, 6144)], 'clamp': 1, 'iter': None}
     ]
 
-    if '--medium' in sys.argv:
+    if args.time == 'medium':
         base['expts'].append(('rand', 'rand'))
         # 5 random precisions
         base['samples'] = 5
         testspecs = [small] + ieee + [base]
-    if '--long' in sys.argv:
+    elif args.time == 'long':
         base['expts'].append(('rand', 'rand'))
         # 10 random precisions
         base['samples'] = 10
         testspecs = [small] + ieee + [base]
-    elif '--all' in sys.argv:
+    elif args.time == 'all':
         base['expts'].append(('rand', 'rand'))
         # All precisions in [1, 100]
         base['samples'] = 100
@@ -1062,39 +1223,100 @@
         small['expts'] = [(-prec, prec)]
         testspecs = [small, rand_ieee, base]
 
+
     check_untested(Functions, C.Decimal, P.Decimal)
     check_untested(ContextFunctions, C.Context, P.Context)
 
 
-    log("\n\nRandom seed: %d\n\n", randseed)
+    if args.multicore:
+        q = Queue()
+    elif args.single:
+        log("Random seed: %d", randseed)
+    else:
+        log("\n\nRandom seed: %d\n\n", randseed)
+
+
+    FOUND_METHOD = False
+    def do_single(method, f):
+        global FOUND_METHOD
+        if args.multicore:
+            q.put(method)
+        elif not args.single or args.single == method:
+            FOUND_METHOD = True
+            f()
 
     # Decimal methods:
     for method in Functions['unary'] + Functions['unary_ctx'] + \
                   Functions['unary_rnd_ctx']:
-        test_method(method, testspecs, test_unary)
+        do_single(method, lambda: test_method(method, testspecs, test_unary))
 
     for method in Functions['binary'] + Functions['binary_ctx']:
-        test_method(method, testspecs, test_binary)
+        do_single(method, lambda: test_method(method, testspecs, test_binary))
 
     for method in Functions['ternary'] + Functions['ternary_ctx']:
-        test_method(method, testspecs, test_ternary)
+        name = '__powmod__' if method == '__pow__' else method
+        do_single(name, lambda: test_method(method, testspecs, test_ternary))
 
-    test_method('__format__', testspecs, test_format)
-    test_method('__round__', testspecs, test_round)
-    test_method('from_float', testspecs, test_from_float)
-    test_method('quantize', testspecs, test_quantize_api)
+    do_single('__format__', lambda: test_method('__format__', testspecs, test_format))
+    do_single('__round__', lambda: test_method('__round__', testspecs, test_round))
+    do_single('from_float', lambda: test_method('from_float', testspecs, test_from_float))
+    do_single('quantize_api', lambda: test_method('quantize', testspecs, test_quantize_api))
 
     # Context methods:
     for method in ContextFunctions['unary']:
-        test_method(method, testspecs, test_unary)
+        do_single(method, lambda: test_method(method, testspecs, test_unary))
 
     for method in ContextFunctions['binary']:
-        test_method(method, testspecs, test_binary)
+        do_single(method, lambda: test_method(method, testspecs, test_binary))
 
     for method in ContextFunctions['ternary']:
-        test_method(method, testspecs, test_ternary)
+        name = 'context.powmod' if method == 'context.power' else method
+        do_single(name, lambda: test_method(method, testspecs, test_ternary))
 
-    test_method('context.create_decimal_from_float', testspecs, test_from_float)
+    do_single('context.create_decimal_from_float',
+              lambda: test_method('context.create_decimal_from_float',
+                                   testspecs, test_from_float))
 
+    if args.multicore:
+        error = Event()
+        write_lock = Lock()
 
-    sys.exit(EXIT_STATUS)
+        def write_output(out, returncode):
+            if returncode != 0:
+                error.set()
+
+            with write_lock:
+                sys.stdout.buffer.write(out + b"\n")
+                sys.stdout.buffer.flush()
+
+        def tfunc():
+            while not error.is_set():
+                try:
+                    test = q.get(block=False, timeout=-1)
+                except Empty:
+                    return
+
+                cmd = [sys.executable, "deccheck.py", "--%s" % args.time, "--single", test]
+                p = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT)
+                out, _ = p.communicate()
+                write_output(out, p.returncode)
+
+        N = os.cpu_count()
+        t = N * [None]
+
+        for i in range(N):
+            t[i] = Thread(target=tfunc)
+            t[i].start()
+
+        for i in range(N):
+            t[i].join()
+
+        sys.exit(1 if error.is_set() else 0)
+
+    elif args.single:
+        if not FOUND_METHOD:
+            log("\nerror: cannot find method \"%s\"" % args.single)
+            EXIT_STATUS = 1
+        sys.exit(EXIT_STATUS)
+    else:
+        sys.exit(EXIT_STATUS)
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index a96e3f4..2c92a8a 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -14,7 +14,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 /* -------------------------------------------------------------------- */
 /* configuration */
@@ -101,7 +101,13 @@
 /* Given a module object (assumed to be _elementtree), get its per-module
  * state.
  */
-#define ET_STATE(mod) ((elementtreestate *) PyModule_GetState(mod))
+static inline elementtreestate*
+get_elementtree_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (elementtreestate *)state;
+}
 
 /* Find the module instance imported in the currently running sub-interpreter
  * and get its state.
@@ -112,7 +118,7 @@
 static int
 elementtree_clear(PyObject *m)
 {
-    elementtreestate *st = ET_STATE(m);
+    elementtreestate *st = get_elementtree_state(m);
     Py_CLEAR(st->parseerror_obj);
     Py_CLEAR(st->deepcopy_obj);
     Py_CLEAR(st->elementpath_obj);
@@ -124,7 +130,7 @@
 static int
 elementtree_traverse(PyObject *m, visitproc visit, void *arg)
 {
-    elementtreestate *st = ET_STATE(m);
+    elementtreestate *st = get_elementtree_state(m);
     Py_VISIT(st->parseerror_obj);
     Py_VISIT(st->deepcopy_obj);
     Py_VISIT(st->elementpath_obj);
@@ -170,7 +176,7 @@
 
 typedef struct {
 
-    /* attributes (a dictionary object), or None if no attributes */
+    /* attributes (a dictionary object), or NULL if no attributes */
     PyObject* attrib;
 
     /* child elements */
@@ -209,7 +215,7 @@
 } ElementObject;
 
 
-#define Element_CheckExact(op) (Py_TYPE(op) == &Element_Type)
+#define Element_CheckExact(op) Py_IS_TYPE(op, &Element_Type)
 #define Element_Check(op) PyObject_TypeCheck(op, &Element_Type)
 
 
@@ -225,10 +231,7 @@
         return -1;
     }
 
-    if (!attrib)
-        attrib = Py_None;
-
-    Py_INCREF(attrib);
+    Py_XINCREF(attrib);
     self->extra->attrib = attrib;
 
     self->extra->length = 0;
@@ -246,7 +249,7 @@
     if (!extra)
         return;
 
-    Py_DECREF(extra->attrib);
+    Py_XDECREF(extra->attrib);
 
     for (i = 0; i < extra->length; i++)
         Py_DECREF(extra->children[i]);
@@ -300,7 +303,7 @@
     ALLOC(sizeof(ElementObject), "create element");
     PyObject_GC_Track(self);
 
-    if (attrib != Py_None && !is_empty_dict(attrib)) {
+    if (attrib != NULL && !is_empty_dict(attrib)) {
         if (create_extra(self, attrib) < 0) {
             Py_DECREF(self);
             return NULL;
@@ -530,13 +533,9 @@
 
     PyObject* res = self->extra->attrib;
 
-    if (res == Py_None) {
+    if (!res) {
         /* create missing dictionary */
-        res = PyDict_New();
-        if (!res)
-            return NULL;
-        Py_DECREF(Py_None);
-        self->extra->attrib = res;
+        res = self->extra->attrib = PyDict_New();
     }
 
     return res;
@@ -616,12 +615,10 @@
             return NULL;
     } else {
         /* no attrib arg, no kwds, so no attribute */
-        Py_INCREF(Py_None);
-        attrib = Py_None;
     }
 
     elem = create_new_element(tag, attrib);
-    Py_DECREF(attrib);
+    Py_XDECREF(attrib);
     if (elem == NULL)
         return NULL;
 
@@ -736,7 +733,7 @@
     ElementObject* element;
 
     element = (ElementObject*) create_new_element(
-        self->tag, (self->extra) ? self->extra->attrib : Py_None);
+        self->tag, self->extra ? self->extra->attrib : NULL);
     if (!element)
         return NULL;
 
@@ -792,21 +789,20 @@
     if (!tag)
         return NULL;
 
-    if (self->extra) {
+    if (self->extra && self->extra->attrib) {
         attrib = deepcopy(self->extra->attrib, memo);
         if (!attrib) {
             Py_DECREF(tag);
             return NULL;
         }
     } else {
-        Py_INCREF(Py_None);
-        attrib = Py_None;
+        attrib = NULL;
     }
 
     element = (ElementObject*) create_new_element(tag, attrib);
 
     Py_DECREF(tag);
-    Py_DECREF(attrib);
+    Py_XDECREF(attrib);
 
     if (!element)
         return NULL;
@@ -963,7 +959,7 @@
         PyList_SET_ITEM(children, i, child);
     }
 
-    if (self->extra && self->extra->attrib != Py_None) {
+    if (self->extra && self->extra->attrib) {
         attrib = self->extra->attrib;
         Py_INCREF(attrib);
     }
@@ -1037,9 +1033,9 @@
         assert(self->extra);
         assert(self->extra->allocated >= nchildren);
         if (oldextra) {
-            assert(self->extra->attrib == Py_None);
+            assert(self->extra->attrib == NULL);
             self->extra->attrib = oldextra->attrib;
-            oldextra->attrib = Py_None;
+            oldextra->attrib = NULL;
         }
 
         /* Copy children */
@@ -1065,10 +1061,8 @@
     }
 
     /* Stash attrib. */
-    if (attrib) {
-        Py_INCREF(attrib);
-        Py_XSETREF(self->extra->attrib, attrib);
-    }
+    Py_XINCREF(attrib);
+    Py_XSETREF(self->extra->attrib, attrib);
     dealloc_extra(oldextra);
 
     Py_RETURN_NONE;
@@ -1138,7 +1132,7 @@
 
     if (PyUnicode_Check(tag)) {
         const Py_ssize_t len = PyUnicode_GET_LENGTH(tag);
-        void *data = PyUnicode_DATA(tag);
+        const void *data = PyUnicode_DATA(tag);
         unsigned int kind = PyUnicode_KIND(tag);
         if (len >= 3 && PyUnicode_READ(kind, data, 0) == '{' && (
                 PyUnicode_READ(kind, data, 1) == '}' || (
@@ -1159,7 +1153,7 @@
         return 0;
     }
     if (PyBytes_Check(tag)) {
-        char *p = PyBytes_AS_STRING(tag);
+        const char *p = PyBytes_AS_STRING(tag);
         const Py_ssize_t len = PyBytes_GET_SIZE(tag);
         if (len >= 3 && p[0] == '{' && (
                 p[1] == '}' || (p[1] == '*' && p[2] == '}'))) {
@@ -1401,7 +1395,7 @@
 {
     PyObject* value;
 
-    if (!self->extra || self->extra->attrib == Py_None)
+    if (!self->extra || !self->extra->attrib)
         value = default_value;
     else {
         value = PyDict_GetItemWithError(self->extra->attrib, key);
@@ -1417,42 +1411,6 @@
     return value;
 }
 
-/*[clinic input]
-_elementtree.Element.getchildren
-
-[clinic start generated code]*/
-
-static PyObject *
-_elementtree_Element_getchildren_impl(ElementObject *self)
-/*[clinic end generated code: output=e50ffe118637b14f input=0f754dfded150d5f]*/
-{
-    Py_ssize_t i;
-    PyObject* list;
-
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "This method will be removed in future versions.  "
-                     "Use 'list(elem)' or iteration over elem instead.",
-                     1) < 0) {
-        return NULL;
-    }
-
-    if (!self->extra)
-        return PyList_New(0);
-
-    list = PyList_New(self->extra->length);
-    if (!list)
-        return NULL;
-
-    for (i = 0; i < self->extra->length; i++) {
-        PyObject* item = self->extra->children[i];
-        Py_INCREF(item);
-        PyList_SET_ITEM(list, i, item);
-    }
-
-    return list;
-}
-
-
 static PyObject *
 create_elementiter(ElementObject *self, PyObject *tag, int gettext);
 
@@ -1484,27 +1442,6 @@
 
 
 /*[clinic input]
-_elementtree.Element.getiterator
-
-    tag: object = None
-
-[clinic start generated code]*/
-
-static PyObject *
-_elementtree_Element_getiterator_impl(ElementObject *self, PyObject *tag)
-/*[clinic end generated code: output=cb69ff4a3742dfa1 input=500da1a03f7b9e28]*/
-{
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "This method will be removed in future versions.  "
-                     "Use 'tree.iter()' or 'list(tree.iter())' instead.",
-                     1) < 0) {
-        return NULL;
-    }
-    return _elementtree_Element_iter_impl(self, tag);
-}
-
-
-/*[clinic input]
 _elementtree.Element.itertext
 
 [clinic start generated code]*/
@@ -1586,7 +1523,7 @@
 _elementtree_Element_items_impl(ElementObject *self)
 /*[clinic end generated code: output=6db2c778ce3f5a4d input=adbe09aaea474447]*/
 {
-    if (!self->extra || self->extra->attrib == Py_None)
+    if (!self->extra || !self->extra->attrib)
         return PyList_New(0);
 
     return PyDict_Items(self->extra->attrib);
@@ -1601,7 +1538,7 @@
 _elementtree_Element_keys_impl(ElementObject *self)
 /*[clinic end generated code: output=bc5bfabbf20eeb3c input=f02caf5b496b5b0b]*/
 {
-    if (!self->extra || self->extra->attrib == Py_None)
+    if (!self->extra || !self->extra->attrib)
         return PyList_New(0);
 
     return PyDict_Keys(self->extra->attrib);
@@ -1620,7 +1557,7 @@
 _elementtree.Element.makeelement
 
     tag: object
-    attrib: object
+    attrib: object(subclass_of='&PyDict_Type')
     /
 
 [clinic start generated code]*/
@@ -1628,7 +1565,7 @@
 static PyObject *
 _elementtree_Element_makeelement_impl(ElementObject *self, PyObject *tag,
                                       PyObject *attrib)
-/*[clinic end generated code: output=4109832d5bb789ef input=9480d1d2e3e68235]*/
+/*[clinic end generated code: output=4109832d5bb789ef input=2279d974529c3861]*/
 {
     PyObject* elem;
 
@@ -2100,12 +2037,18 @@
 element_attrib_setter(ElementObject *self, PyObject *value, void *closure)
 {
     _VALIDATE_ATTR_VALUE(value);
+    if (!PyDict_Check(value)) {
+        PyErr_Format(PyExc_TypeError,
+                     "attrib must be dict, not %.200s",
+                     value->ob_type->tp_name);
+        return -1;
+    }
     if (!self->extra) {
         if (create_extra(self, NULL) < 0)
             return -1;
     }
     Py_INCREF(value);
-    Py_SETREF(self->extra->attrib, value);
+    Py_XSETREF(self->extra->attrib, value);
     return 0;
 }
 
@@ -2365,8 +2308,6 @@
     Py_INCREF(self);
     it->root_element = self;
 
-    PyObject_GC_Track(it);
-
     it->parent_stack = PyMem_New(ParentLocator, INIT_PARENT_STACK_SIZE);
     if (it->parent_stack == NULL) {
         Py_DECREF(it);
@@ -2376,6 +2317,8 @@
     it->parent_stack_used = 0;
     it->parent_stack_size = INIT_PARENT_STACK_SIZE;
 
+    PyObject_GC_Track(it);
+
     return (PyObject *)it;
 }
 
@@ -2414,7 +2357,7 @@
     char insert_pis;
 } TreeBuilderObject;
 
-#define TreeBuilder_CheckExact(op) (Py_TYPE(op) == &TreeBuilder_Type)
+#define TreeBuilder_CheckExact(op) Py_IS_TYPE((op), &TreeBuilder_Type)
 
 /* -------------------------------------------------------------------- */
 /* constructor and destructor */
@@ -2702,7 +2645,7 @@
     }
     else {
         PyObject *res;
-        res = _PyObject_CallMethodIdObjArgs(element, &PyId_append, child, NULL);
+        res = _PyObject_CallMethodIdOneArg(element, &PyId_append, child);
         if (res == NULL)
             return -1;
         Py_DECREF(res);
@@ -2719,7 +2662,7 @@
         PyObject *event = PyTuple_Pack(2, action, node);
         if (event == NULL)
             return -1;
-        res = _PyObject_FastCall(self->events_append, &event, 1);
+        res = PyObject_CallOneArg(self->events_append, event);
         Py_DECREF(event);
         if (res == NULL)
             return -1;
@@ -2745,7 +2688,7 @@
 
     if (!self->element_factory) {
         node = create_new_element(tag, attrib);
-    } else if (attrib == Py_None) {
+    } else if (attrib == NULL) {
         attrib = PyDict_New();
         if (!attrib)
             return NULL;
@@ -2885,7 +2828,7 @@
     }
 
     if (self->comment_factory) {
-        comment = _PyObject_FastCall(self->comment_factory, &text, 1);
+        comment = PyObject_CallOneArg(self->comment_factory, text);
         if (!comment)
             return NULL;
 
@@ -3086,7 +3029,7 @@
 _elementtree.TreeBuilder.start
 
     tag: object
-    attrs: object = None
+    attrs: object(subclass_of='&PyDict_Type')
     /
 
 [clinic start generated code]*/
@@ -3094,7 +3037,7 @@
 static PyObject *
 _elementtree_TreeBuilder_start_impl(TreeBuilderObject *self, PyObject *tag,
                                     PyObject *attrs)
-/*[clinic end generated code: output=e7e9dc2861349411 input=95fc1758dd042c65]*/
+/*[clinic end generated code: output=e7e9dc2861349411 input=7288e9e38e63b2b6]*/
 {
     return treebuilder_handle_start(self, tag, attrs);
 }
@@ -3227,7 +3170,7 @@
     if (errmsg == NULL)
         return;
 
-    error = _PyObject_FastCall(st->parseerror_obj, &errmsg, 1);
+    error = PyObject_CallOneArg(st->parseerror_obj, errmsg);
     Py_DECREF(errmsg);
     if (!error)
         return;
@@ -3290,7 +3233,7 @@
                 (TreeBuilderObject*) self->target, value
                 );
         else if (self->handle_data)
-            res = _PyObject_FastCall(self->handle_data, &value, 1);
+            res = PyObject_CallOneArg(self->handle_data, value);
         else
             res = NULL;
         Py_XDECREF(res);
@@ -3354,8 +3297,7 @@
             attrib_in += 2;
         }
     } else {
-        Py_INCREF(Py_None);
-        attrib = Py_None;
+        attrib = NULL;
     }
 
     if (TreeBuilder_CheckExact(self->target)) {
@@ -3364,8 +3306,7 @@
                                        tag, attrib);
     }
     else if (self->handle_start) {
-        if (attrib == Py_None) {
-            Py_DECREF(attrib);
+        if (attrib == NULL) {
             attrib = PyDict_New();
             if (!attrib) {
                 Py_DECREF(tag);
@@ -3378,7 +3319,7 @@
         res = NULL;
 
     Py_DECREF(tag);
-    Py_DECREF(attrib);
+    Py_XDECREF(attrib);
 
     Py_XDECREF(res);
 }
@@ -3401,7 +3342,7 @@
         /* shortcut */
         res = treebuilder_handle_data((TreeBuilderObject*) self->target, data);
     else if (self->handle_data)
-        res = _PyObject_FastCall(self->handle_data, &data, 1);
+        res = PyObject_CallOneArg(self->handle_data, data);
     else
         res = NULL;
 
@@ -3428,7 +3369,7 @@
     else if (self->handle_end) {
         tag = makeuniversal(self, tag_in);
         if (tag) {
-            res = _PyObject_FastCall(self->handle_end, &tag, 1);
+            res = PyObject_CallOneArg(self->handle_end, tag);
             Py_DECREF(tag);
         }
     }
@@ -3515,7 +3456,7 @@
         if (!prefix)
             return;
 
-        res = _PyObject_FastCall(self->handle_end_ns, &prefix, 1);
+        res = PyObject_CallOneArg(self->handle_end_ns, prefix);
         Py_DECREF(prefix);
     }
 
@@ -3547,7 +3488,7 @@
         if (!comment)
             return;
 
-        res = _PyObject_FastCall(self->handle_comment, &comment, 1);
+        res = PyObject_CallOneArg(self->handle_comment, comment);
         Py_XDECREF(res);
         Py_DECREF(comment);
     }
@@ -3938,7 +3879,7 @@
     }
     else if (self->handle_close) {
         Py_DECREF(res);
-        return _PyObject_CallNoArg(self->handle_close);
+        return PyObject_CallNoArgs(self->handle_close);
     }
     else {
         return res;
@@ -4235,9 +4176,6 @@
     _ELEMENTTREE_ELEMENT_ITERTEXT_METHODDEF
     _ELEMENTTREE_ELEMENT_ITERFIND_METHODDEF
 
-    _ELEMENTTREE_ELEMENT_GETITERATOR_METHODDEF
-    _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF
-
     _ELEMENTTREE_ELEMENT_ITEMS_METHODDEF
     _ELEMENTTREE_ELEMENT_KEYS_METHODDEF
 
@@ -4469,7 +4407,7 @@
     m = PyModule_Create(&elementtreemodule);
     if (!m)
         return NULL;
-    st = ET_STATE(m);
+    st = get_elementtree_state(m);
 
     if (!(temp = PyImport_ImportModule("copy")))
         return NULL;
@@ -4505,16 +4443,22 @@
         "xml.etree.ElementTree.ParseError", PyExc_SyntaxError, NULL
         );
     Py_INCREF(st->parseerror_obj);
-    PyModule_AddObject(m, "ParseError", st->parseerror_obj);
+    if (PyModule_AddObject(m, "ParseError", st->parseerror_obj) < 0) {
+        Py_DECREF(st->parseerror_obj);
+        return NULL;
+    }
 
-    Py_INCREF((PyObject *)&Element_Type);
-    PyModule_AddObject(m, "Element", (PyObject *)&Element_Type);
+    PyTypeObject *types[] = {
+        &Element_Type,
+        &TreeBuilder_Type,
+        &XMLParser_Type
+    };
 
-    Py_INCREF((PyObject *)&TreeBuilder_Type);
-    PyModule_AddObject(m, "TreeBuilder", (PyObject *)&TreeBuilder_Type);
-
-    Py_INCREF((PyObject *)&XMLParser_Type);
-    PyModule_AddObject(m, "XMLParser", (PyObject *)&XMLParser_Type);
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(types); i++) {
+        if (PyModule_AddType(m, types[i]) < 0) {
+            return NULL;
+        }
+    }
 
     return m;
 }
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index a101363..d158d3b 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -1,8 +1,7 @@
 #include "Python.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include "pycore_tupleobject.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 /* _functools module written and maintained
    by Hye-Shik Chang <perky@FreeBSD.org>
@@ -18,13 +17,15 @@
     PyObject *fn;
     PyObject *args;
     PyObject *kw;
-    PyObject *dict;
+    PyObject *dict;        /* __dict__ */
     PyObject *weakreflist; /* List of weak references */
-    int use_fastcall;
+    vectorcallfunc vectorcall;
 } partialobject;
 
 static PyTypeObject partial_type;
 
+static void partial_setvectorcall(partialobject *pto);
+
 static PyObject *
 partial_new(PyTypeObject *type, PyObject *args, PyObject *kw)
 {
@@ -39,7 +40,7 @@
 
     pargs = pkw = NULL;
     func = PyTuple_GET_ITEM(args, 0);
-    if (Py_TYPE(func) == &partial_type && type == &partial_type) {
+    if (Py_IS_TYPE(func, &partial_type) && type == &partial_type) {
         partialobject *part = (partialobject *)func;
         if (part->dict == NULL) {
             pargs = part->args;
@@ -107,8 +108,7 @@
         return NULL;
     }
 
-    pto->use_fastcall = (_PyVectorcall_Function(func) != NULL);
-
+    partial_setvectorcall(pto);
     return (PyObject *)pto;
 }
 
@@ -126,77 +126,114 @@
     Py_TYPE(pto)->tp_free(pto);
 }
 
-static PyObject *
-partial_fastcall(partialobject *pto, PyObject **args, Py_ssize_t nargs,
-                 PyObject *kwargs)
+
+/* Merging keyword arguments using the vectorcall convention is messy, so
+ * if we would need to do that, we stop using vectorcall and fall back
+ * to using partial_call() instead. */
+_Py_NO_INLINE static PyObject *
+partial_vectorcall_fallback(PyThreadState *tstate, partialobject *pto,
+                            PyObject *const *args, size_t nargsf,
+                            PyObject *kwnames)
 {
+    pto->vectorcall = NULL;
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    return _PyObject_MakeTpCall(tstate, (PyObject *)pto,
+                                args, nargs, kwnames);
+}
+
+static PyObject *
+partial_vectorcall(partialobject *pto, PyObject *const *args,
+                   size_t nargsf, PyObject *kwnames)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+
+    /* pto->kw is mutable, so need to check every time */
+    if (PyDict_GET_SIZE(pto->kw)) {
+        return partial_vectorcall_fallback(tstate, pto, args, nargsf, kwnames);
+    }
+
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    Py_ssize_t nargs_total = nargs;
+    if (kwnames != NULL) {
+        nargs_total += PyTuple_GET_SIZE(kwnames);
+    }
+
+    PyObject **pto_args = _PyTuple_ITEMS(pto->args);
+    Py_ssize_t pto_nargs = PyTuple_GET_SIZE(pto->args);
+
+    /* Fast path if we're called without arguments */
+    if (nargs_total == 0) {
+        return _PyObject_VectorcallTstate(tstate, pto->fn,
+                                          pto_args, pto_nargs, NULL);
+    }
+
+    /* Fast path using PY_VECTORCALL_ARGUMENTS_OFFSET to prepend a single
+     * positional argument */
+    if (pto_nargs == 1 && (nargsf & PY_VECTORCALL_ARGUMENTS_OFFSET)) {
+        PyObject **newargs = (PyObject **)args - 1;
+        PyObject *tmp = newargs[0];
+        newargs[0] = pto_args[0];
+        PyObject *ret = _PyObject_VectorcallTstate(tstate, pto->fn,
+                                                   newargs, nargs + 1, kwnames);
+        newargs[0] = tmp;
+        return ret;
+    }
+
+    Py_ssize_t newnargs_total = pto_nargs + nargs_total;
+
     PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
     PyObject *ret;
-    PyObject **stack, **stack_buf = NULL;
-    Py_ssize_t nargs2, pto_nargs;
+    PyObject **stack;
 
-    pto_nargs = PyTuple_GET_SIZE(pto->args);
-    nargs2 = pto_nargs + nargs;
-
-    if (pto_nargs == 0) {
-        stack = args;
-    }
-    else if (nargs == 0) {
-        stack = _PyTuple_ITEMS(pto->args);
+    if (newnargs_total <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
+        stack = small_stack;
     }
     else {
-        if (nargs2 <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
-            stack = small_stack;
+        stack = PyMem_Malloc(newnargs_total * sizeof(PyObject *));
+        if (stack == NULL) {
+            PyErr_NoMemory();
+            return NULL;
         }
-        else {
-            stack_buf = PyMem_Malloc(nargs2 * sizeof(PyObject *));
-            if (stack_buf == NULL) {
-                PyErr_NoMemory();
-                return NULL;
-            }
-            stack = stack_buf;
-        }
-
-        /* use borrowed references */
-        memcpy(stack,
-               _PyTuple_ITEMS(pto->args),
-               pto_nargs * sizeof(PyObject*));
-        memcpy(&stack[pto_nargs],
-               args,
-               nargs * sizeof(PyObject*));
     }
 
-    ret = _PyObject_FastCallDict(pto->fn, stack, nargs2, kwargs);
-    PyMem_Free(stack_buf);
+    /* Copy to new stack, using borrowed references */
+    memcpy(stack, pto_args, pto_nargs * sizeof(PyObject*));
+    memcpy(stack + pto_nargs, args, nargs_total * sizeof(PyObject*));
+
+    ret = _PyObject_VectorcallTstate(tstate, pto->fn,
+                                     stack, pto_nargs + nargs, kwnames);
+    if (stack != small_stack) {
+        PyMem_Free(stack);
+    }
     return ret;
 }
 
-static PyObject *
-partial_call_impl(partialobject *pto, PyObject *args, PyObject *kwargs)
+/* Set pto->vectorcall depending on the parameters of the partial object */
+static void
+partial_setvectorcall(partialobject *pto)
 {
-    PyObject *ret, *args2;
-
-    /* Note: tupleconcat() is optimized for empty tuples */
-    args2 = PySequence_Concat(pto->args, args);
-    if (args2 == NULL) {
-        return NULL;
+    if (PyVectorcall_Function(pto->fn) == NULL) {
+        /* Don't use vectorcall if the underlying function doesn't support it */
+        pto->vectorcall = NULL;
     }
-    assert(PyTuple_Check(args2));
-
-    ret = PyObject_Call(pto->fn, args2, kwargs);
-    Py_DECREF(args2);
-    return ret;
+    /* We could have a special case if there are no arguments,
+     * but that is unlikely (why use partial without arguments?),
+     * so we don't optimize that */
+    else {
+        pto->vectorcall = (vectorcallfunc)partial_vectorcall;
+    }
 }
 
+
 static PyObject *
 partial_call(partialobject *pto, PyObject *args, PyObject *kwargs)
 {
-    PyObject *kwargs2, *res;
+    assert(PyCallable_Check(pto->fn));
+    assert(PyTuple_Check(pto->args));
+    assert(PyDict_Check(pto->kw));
 
-    assert (PyCallable_Check(pto->fn));
-    assert (PyTuple_Check(pto->args));
-    assert (PyDict_Check(pto->kw));
-
+    /* Merge keywords */
+    PyObject *kwargs2;
     if (PyDict_GET_SIZE(pto->kw) == 0) {
         /* kwargs can be NULL */
         kwargs2 = kwargs;
@@ -219,16 +256,16 @@
         }
     }
 
+    /* Merge positional arguments */
+    /* Note: tupleconcat() is optimized for empty tuples */
+    PyObject *args2 = PySequence_Concat(pto->args, args);
+    if (args2 == NULL) {
+        Py_XDECREF(kwargs2);
+        return NULL;
+    }
 
-    if (pto->use_fastcall) {
-        res = partial_fastcall(pto,
-                               _PyTuple_ITEMS(args),
-                               PyTuple_GET_SIZE(args),
-                               kwargs2);
-    }
-    else {
-        res = partial_call_impl(pto, args, kwargs2);
-    }
+    PyObject *res = PyObject_Call(pto->fn, args2, kwargs2);
+    Py_DECREF(args2);
     Py_XDECREF(kwargs2);
     return res;
 }
@@ -365,17 +402,19 @@
         Py_INCREF(dict);
 
     Py_INCREF(fn);
-    pto->use_fastcall = (_PyVectorcall_Function(fn) != NULL);
     Py_SETREF(pto->fn, fn);
     Py_SETREF(pto->args, fnargs);
     Py_SETREF(pto->kw, kw);
     Py_XSETREF(pto->dict, dict);
+    partial_setvectorcall(pto);
     Py_RETURN_NONE;
 }
 
 static PyMethodDef partial_methods[] = {
     {"__reduce__", (PyCFunction)partial_reduce, METH_NOARGS},
     {"__setstate__", (PyCFunction)partial_setstate, METH_O},
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL,              NULL}           /* sentinel */
 };
 
@@ -386,7 +425,7 @@
     0,                                  /* tp_itemsize */
     /* methods */
     (destructor)partial_dealloc,        /* tp_dealloc */
-    0,                                  /* tp_vectorcall_offset */
+    offsetof(partialobject, vectorcall),/* tp_vectorcall_offset */
     0,                                  /* tp_getattr */
     0,                                  /* tp_setattr */
     0,                                  /* tp_as_async */
@@ -401,7 +440,8 @@
     PyObject_GenericSetAttr,            /* tp_setattro */
     0,                                  /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-        Py_TPFLAGS_BASETYPE,            /* tp_flags */
+        Py_TPFLAGS_BASETYPE |
+        Py_TPFLAGS_HAVE_VECTORCALL,     /* tp_flags */
     partial_doc,                        /* tp_doc */
     (traverseproc)partial_traverse,     /* tp_traverse */
     0,                                  /* tp_clear */
@@ -534,7 +574,7 @@
     PyObject *answer;
     PyObject* stack[2];
 
-    if (Py_TYPE(other) != &keyobject_type){
+    if (!Py_IS_TYPE(other, &keyobject_type)) {
         PyErr_Format(PyExc_TypeError, "other argument must be K instance");
         return NULL;
     }
@@ -610,7 +650,7 @@
     for (;;) {
         PyObject *op2;
 
-        if (args->ob_refcnt > 1) {
+        if (Py_REFCNT(args) > 1) {
             Py_DECREF(args);
             if ((args = PyTuple_New(2)) == NULL)
                 goto Fail;
@@ -627,7 +667,7 @@
             result = op2;
         else {
             /* Update the args tuple in-place */
-            assert(args->ob_refcnt == 1);
+            assert(Py_REFCNT(args) == 1);
             Py_XSETREF(_PyTuple_ITEMS(args)[0], result);
             Py_XSETREF(_PyTuple_ITEMS(args)[1], op2);
             if ((result = PyObject_Call(func, args, NULL)) == NULL) {
@@ -743,6 +783,7 @@
     Py_ssize_t misses;
     PyObject *cache_info_type;
     PyObject *dict;
+    PyObject *weakreflist;
 } lru_cache_object;
 
 static PyTypeObject lru_cache_type;
@@ -1155,6 +1196,8 @@
     obj->maxsize = maxsize;
     Py_INCREF(cache_info_type);
     obj->cache_info_type = cache_info_type;
+    obj->dict = NULL;
+    obj->weakreflist = NULL;
     return (PyObject *)obj;
 }
 
@@ -1186,6 +1229,8 @@
     lru_list_elem *list;
     /* bpo-31095: UnTrack is needed before calling any callbacks */
     PyObject_GC_UnTrack(obj);
+    if (obj->weakreflist != NULL)
+        PyObject_ClearWeakRefs((PyObject*)obj);
 
     list = lru_cache_unlink_list(obj);
     Py_XDECREF(obj->cache);
@@ -1343,7 +1388,8 @@
     (traverseproc)lru_cache_tp_traverse,/* tp_traverse */
     (inquiry)lru_cache_tp_clear,        /* tp_clear */
     0,                                  /* tp_richcompare */
-    0,                                  /* tp_weaklistoffset */
+    offsetof(lru_cache_object, weakreflist),
+                                        /* tp_weaklistoffset */
     0,                                  /* tp_iter */
     0,                                  /* tp_iternext */
     lru_cache_methods,                  /* tp_methods */
@@ -1361,10 +1407,10 @@
 
 /* module level code ********************************************************/
 
-PyDoc_STRVAR(module_doc,
+PyDoc_STRVAR(_functools_doc,
 "Tools that operate on functions.");
 
-static PyMethodDef module_methods[] = {
+static PyMethodDef _functools_methods[] = {
     {"reduce",          functools_reduce,     METH_VARARGS, functools_reduce_doc},
     {"cmp_to_key",      (PyCFunction)(void(*)(void))functools_cmp_to_key,
      METH_VARARGS | METH_KEYWORDS, functools_cmp_to_key_doc},
@@ -1372,53 +1418,56 @@
 };
 
 static void
-module_free(void *m)
+_functools_free(void *m)
 {
-    Py_CLEAR(kwd_mark);
+    // FIXME: Do not clear kwd_mark to avoid NULL pointer dereferencing if we have
+    //        other modules instances that could use it. Will fix when PEP-573 land
+    //        and we could move kwd_mark to a per-module state.
+    // Py_CLEAR(kwd_mark);
 }
 
-static struct PyModuleDef _functoolsmodule = {
+static int
+_functools_exec(PyObject *module)
+{
+    PyTypeObject *typelist[] = {
+        &partial_type,
+        &lru_cache_type
+    };
+
+    if (!kwd_mark) {
+        kwd_mark = _PyObject_CallNoArg((PyObject *)&PyBaseObject_Type);
+        if (!kwd_mark) {
+            return -1;
+        }
+    }
+
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(typelist); i++) {
+        if (PyModule_AddType(module, typelist[i]) < 0) {
+            return -1;
+        }
+    }
+    return 0;
+}
+
+static struct PyModuleDef_Slot _functools_slots[] = {
+    {Py_mod_exec, _functools_exec},
+    {0, NULL}
+};
+
+static struct PyModuleDef _functools_module = {
     PyModuleDef_HEAD_INIT,
     "_functools",
-    module_doc,
-    -1,
-    module_methods,
+    _functools_doc,
+    0,
+    _functools_methods,
+    _functools_slots,
     NULL,
     NULL,
-    NULL,
-    module_free,
+    _functools_free,
 };
 
 PyMODINIT_FUNC
 PyInit__functools(void)
 {
-    int i;
-    PyObject *m;
-    const char *name;
-    PyTypeObject *typelist[] = {
-        &partial_type,
-        &lru_cache_type,
-        NULL
-    };
-
-    m = PyModule_Create(&_functoolsmodule);
-    if (m == NULL)
-        return NULL;
-
-    kwd_mark = _PyObject_CallNoArg((PyObject *)&PyBaseObject_Type);
-    if (!kwd_mark) {
-        Py_DECREF(m);
-        return NULL;
-    }
-
-    for (i=0 ; typelist[i] != NULL ; i++) {
-        if (PyType_Ready(typelist[i]) < 0) {
-            Py_DECREF(m);
-            return NULL;
-        }
-        name = _PyType_Name(typelist[i]);
-        Py_INCREF(typelist[i]);
-        PyModule_AddObject(m, name, (PyObject *)typelist[i]);
-    }
-    return m;
+    return PyModuleDef_Init(&_functools_module);
 }
diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c
index 77e7887..dd4c6b1 100644
--- a/Modules/_gdbmmodule.c
+++ b/Modules/_gdbmmodule.c
@@ -36,7 +36,7 @@
 
 typedef struct {
     PyObject_HEAD
-    int di_size;        /* -1 means recompute */
+    Py_ssize_t di_size;        /* -1 means recompute */
     GDBM_FILE di_dbm;
 } dbmobject;
 
@@ -44,7 +44,7 @@
 
 #include "clinic/_gdbmmodule.c.h"
 
-#define is_dbmobject(v) (Py_TYPE(v) == &Dbmtype)
+#define is_dbmobject(v) Py_IS_TYPE(v, &Dbmtype)
 #define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
     { PyErr_SetString(DbmError, "GDBM object has already been closed"); \
       return NULL; }
@@ -102,19 +102,39 @@
         return -1;
     }
     if (dp->di_size < 0) {
+#if GDBM_VERSION_MAJOR >= 1 && GDBM_VERSION_MINOR >= 11
+        errno = 0;
+        gdbm_count_t count;
+        if (gdbm_count(dp->di_dbm, &count) == -1) {
+            if (errno != 0) {
+                PyErr_SetFromErrno(DbmError);
+            }
+            else {
+                PyErr_SetString(DbmError, gdbm_strerror(gdbm_errno));
+            }
+            return -1;
+        }
+        if (count > PY_SSIZE_T_MAX) {
+            PyErr_SetString(PyExc_OverflowError, "count exceeds PY_SSIZE_T_MAX");
+            return -1;
+        }
+        dp->di_size = count;
+#else
         datum key,okey;
-        int size;
         okey.dsize=0;
         okey.dptr=NULL;
 
-        size = 0;
-        for (key=gdbm_firstkey(dp->di_dbm); key.dptr;
+        Py_ssize_t size = 0;
+        for (key = gdbm_firstkey(dp->di_dbm); key.dptr;
              key = gdbm_nextkey(dp->di_dbm,okey)) {
             size++;
-            if(okey.dsize) free(okey.dptr);
+            if (okey.dsize) {
+                free(okey.dptr);
+            }
             okey=key;
         }
         dp->di_size = size;
+#endif
     }
     return dp->di_size;
 }
@@ -349,7 +369,7 @@
     else if (!PyBytes_Check(arg)) {
         PyErr_Format(PyExc_TypeError,
                      "gdbm key must be bytes or string, not %.100s",
-                     arg->ob_type->tp_name);
+                     Py_TYPE(arg)->tp_name);
         return -1;
     }
     else {
@@ -497,7 +517,7 @@
 dbm__exit__(PyObject *self, PyObject *args)
 {
     _Py_IDENTIFIER(close);
-    return _PyObject_CallMethodId(self, &PyId_close, NULL);
+    return _PyObject_CallMethodIdNoArgs(self, &PyId_close);
 }
 
 static PyMethodDef dbm_methods[] = {
diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c
index edadbcb..adc8653 100644
--- a/Modules/_hashopenssl.c
+++ b/Modules/_hashopenssl.c
@@ -14,7 +14,6 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
 #include "hashlib.h"
 #include "pystrhex.h"
 
@@ -22,10 +21,13 @@
 /* EVP is the preferred interface to hashing in OpenSSL */
 #include <openssl/evp.h>
 #include <openssl/hmac.h>
+#include <openssl/crypto.h>
 /* We use the object interface to discover what hashes OpenSSL supports. */
 #include <openssl/objects.h>
 #include "openssl/err.h"
 
+#include <openssl/crypto.h>       // FIPS_mode()
+
 #ifndef OPENSSL_THREADS
 #  error "OPENSSL_THREADS is not defined, Python requires thread-safe OpenSSL"
 #endif
@@ -34,6 +36,32 @@
 /* OpenSSL < 1.1.0 */
 #define EVP_MD_CTX_new EVP_MD_CTX_create
 #define EVP_MD_CTX_free EVP_MD_CTX_destroy
+
+HMAC_CTX *
+HMAC_CTX_new(void)
+{
+    HMAC_CTX *ctx = OPENSSL_malloc(sizeof(HMAC_CTX));
+    if (ctx != NULL) {
+        memset(ctx, 0, sizeof(HMAC_CTX));
+        HMAC_CTX_init(ctx);
+    }
+    return ctx;
+}
+
+void
+HMAC_CTX_free(HMAC_CTX *ctx)
+{
+    if (ctx != NULL) {
+        HMAC_CTX_cleanup(ctx);
+        OPENSSL_free(ctx);
+    }
+}
+
+const EVP_MD *
+HMAC_CTX_get_md(const HMAC_CTX *ctx)
+{
+    return ctx->md;
+}
 #endif
 
 #define MUNCH_SIZE INT_MAX
@@ -50,21 +78,44 @@
 #define PY_OPENSSL_HAS_BLAKE2 1
 #endif
 
+static PyModuleDef _hashlibmodule;
+
+typedef struct {
+    PyTypeObject *EVPtype;
+    PyTypeObject *HMACtype;
+#ifdef PY_OPENSSL_HAS_SHAKE
+    PyTypeObject *EVPXOFtype;
+#endif
+} _hashlibstate;
+
+static inline _hashlibstate*
+get_hashlib_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_hashlibstate *)state;
+}
+
 typedef struct {
     PyObject_HEAD
     EVP_MD_CTX          *ctx;   /* OpenSSL message digest context */
     PyThread_type_lock   lock;  /* OpenSSL context lock */
 } EVPobject;
 
-
-static PyTypeObject EVPtype;
+typedef struct {
+    PyObject_HEAD
+    HMAC_CTX *ctx;            /* OpenSSL hmac context */
+    PyThread_type_lock lock;  /* HMAC context lock */
+} HMACobject;
 
 #include "clinic/_hashopenssl.c.h"
 /*[clinic input]
 module _hashlib
-class _hashlib.HASH "EVPobject *" "&EVPtype"
+class _hashlib.HASH "EVPobject *" "((_hashlibstate *)PyModule_GetState(module))->EVPtype"
+class _hashlib.HASHXOF "EVPobject *" "((_hashlibstate *)PyModule_GetState(module))->EVPXOFtype"
+class _hashlib.HMAC "HMACobject *" "((_hashlibstate *)PyModule_GetState(module))->HMACtype"
 [clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=a881a5092eecad28]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7df1bcf6f75cb8ef]*/
 
 
 /* LCOV_EXCL_START */
@@ -98,6 +149,15 @@
 }
 /* LCOV_EXCL_STOP */
 
+/* {Py_tp_new, NULL} doesn't block __new__ */
+static PyObject *
+_disabled_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyErr_Format(PyExc_TypeError,
+        "cannot create '%.100s' instances", _PyType_Name(type));
+    return NULL;
+}
+
 static PyObject*
 py_digest_name(const EVP_MD *md)
 {
@@ -233,9 +293,9 @@
 }
 
 static EVPobject *
-newEVPobject(void)
+newEVPobject(PyTypeObject *type)
 {
-    EVPobject *retval = (EVPobject *)PyObject_New(EVPobject, &EVPtype);
+    EVPobject *retval = (EVPobject *)PyObject_New(EVPobject, type);
     if (retval == NULL) {
         return NULL;
     }
@@ -277,10 +337,12 @@
 static void
 EVP_dealloc(EVPobject *self)
 {
+    PyTypeObject *tp = Py_TYPE(self);
     if (self->lock != NULL)
         PyThread_free_lock(self->lock);
     EVP_MD_CTX_free(self->ctx);
     PyObject_Del(self);
+    Py_DECREF(tp);
 }
 
 static int
@@ -307,7 +369,7 @@
 {
     EVPobject *newobj;
 
-    if ( (newobj = newEVPobject())==NULL)
+    if ((newobj = newEVPobject(Py_TYPE(self))) == NULL)
         return NULL;
 
     if (!locked_EVP_MD_CTX_copy(newobj->ctx, self)) {
@@ -482,7 +544,8 @@
     if (!name_obj) {
         return NULL;
     }
-    repr = PyUnicode_FromFormat("<%U HASH object @ %p>", name_obj, self);
+    repr = PyUnicode_FromFormat("<%U %s object @ %p>",
+                                name_obj, Py_TYPE(self)->tp_name, self);
     Py_DECREF(name_obj);
     return repr;
 }
@@ -505,61 +568,206 @@
 "name -- the hash algorithm being used by this object\n"
 "digest_size -- number of bytes in this hashes output");
 
-static PyTypeObject EVPtype = {
-    PyVarObject_HEAD_INIT(NULL, 0)
+static PyType_Slot EVPtype_slots[] = {
+    {Py_tp_dealloc, EVP_dealloc},
+    {Py_tp_repr, EVP_repr},
+    {Py_tp_doc, (char *)hashtype_doc},
+    {Py_tp_methods, EVP_methods},
+    {Py_tp_getset, EVP_getseters},
+    {Py_tp_new, _disabled_new},
+    {0, 0},
+};
+
+static PyType_Spec EVPtype_spec = {
     "_hashlib.HASH",    /*tp_name*/
     sizeof(EVPobject),  /*tp_basicsize*/
     0,                  /*tp_itemsize*/
-    /* methods */
-    (destructor)EVP_dealloc, /*tp_dealloc*/
-    0,                  /*tp_vectorcall_offset*/
-    0,                  /*tp_getattr*/
-    0,                  /*tp_setattr*/
-    0,                  /*tp_as_async*/
-    (reprfunc)EVP_repr, /*tp_repr*/
-    0,                  /*tp_as_number*/
-    0,                  /*tp_as_sequence*/
-    0,                  /*tp_as_mapping*/
-    0,                  /*tp_hash*/
-    0,                  /*tp_call*/
-    0,                  /*tp_str*/
-    0,                  /*tp_getattro*/
-    0,                  /*tp_setattro*/
-    0,                  /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
-    hashtype_doc,       /*tp_doc*/
-    0,                  /*tp_traverse*/
-    0,                  /*tp_clear*/
-    0,                  /*tp_richcompare*/
-    0,                  /*tp_weaklistoffset*/
-    0,                  /*tp_iter*/
-    0,                  /*tp_iternext*/
-    EVP_methods,        /* tp_methods */
-    NULL,        /* tp_members */
-    EVP_getseters,      /* tp_getset */
-    0,                  /* tp_base */
-    0,                  /* tp_dict */
-    0,                  /* tp_descr_get */
-    0,                  /* tp_descr_set */
-    0,                  /* tp_dictoffset */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    EVPtype_slots
 };
 
-\
+#ifdef PY_OPENSSL_HAS_SHAKE
+
+/*[clinic input]
+_hashlib.HASHXOF.digest as EVPXOF_digest
+
+  length: Py_ssize_t
+
+Return the digest value as a bytes object.
+[clinic start generated code]*/
+
 static PyObject *
-EVPnew(const EVP_MD *digest,
-       const unsigned char *cp, Py_ssize_t len)
+EVPXOF_digest_impl(EVPobject *self, Py_ssize_t length)
+/*[clinic end generated code: output=ef9320c23280efad input=816a6537cea3d1db]*/
+{
+    EVP_MD_CTX *temp_ctx;
+    PyObject *retval = PyBytes_FromStringAndSize(NULL, length);
+
+    if (retval == NULL) {
+        return NULL;
+    }
+
+    temp_ctx = EVP_MD_CTX_new();
+    if (temp_ctx == NULL) {
+        Py_DECREF(retval);
+        PyErr_NoMemory();
+        return NULL;
+    }
+
+    if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
+        Py_DECREF(retval);
+        EVP_MD_CTX_free(temp_ctx);
+        return _setException(PyExc_ValueError);
+    }
+    if (!EVP_DigestFinalXOF(temp_ctx,
+                            (unsigned char*)PyBytes_AS_STRING(retval),
+                            length)) {
+        Py_DECREF(retval);
+        EVP_MD_CTX_free(temp_ctx);
+        _setException(PyExc_ValueError);
+        return NULL;
+    }
+
+    EVP_MD_CTX_free(temp_ctx);
+    return retval;
+}
+
+/*[clinic input]
+_hashlib.HASHXOF.hexdigest as EVPXOF_hexdigest
+
+    length: Py_ssize_t
+
+Return the digest value as a string of hexadecimal digits.
+[clinic start generated code]*/
+
+static PyObject *
+EVPXOF_hexdigest_impl(EVPobject *self, Py_ssize_t length)
+/*[clinic end generated code: output=eb3e6ee7788bf5b2 input=5f9d6a8f269e34df]*/
+{
+    unsigned char *digest;
+    EVP_MD_CTX *temp_ctx;
+    PyObject *retval;
+
+    digest = (unsigned char*)PyMem_Malloc(length);
+    if (digest == NULL) {
+        PyErr_NoMemory();
+        return NULL;
+    }
+
+    temp_ctx = EVP_MD_CTX_new();
+    if (temp_ctx == NULL) {
+        PyMem_Free(digest);
+        PyErr_NoMemory();
+        return NULL;
+    }
+
+    /* Get the raw (binary) digest value */
+    if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
+        PyMem_Free(digest);
+        EVP_MD_CTX_free(temp_ctx);
+        return _setException(PyExc_ValueError);
+    }
+    if (!EVP_DigestFinalXOF(temp_ctx, digest, length)) {
+        PyMem_Free(digest);
+        EVP_MD_CTX_free(temp_ctx);
+        _setException(PyExc_ValueError);
+        return NULL;
+    }
+
+    EVP_MD_CTX_free(temp_ctx);
+
+    retval = _Py_strhex((const char *)digest, length);
+    PyMem_Free(digest);
+    return retval;
+}
+
+static PyMethodDef EVPXOF_methods[] = {
+    EVPXOF_DIGEST_METHODDEF
+    EVPXOF_HEXDIGEST_METHODDEF
+    {NULL, NULL}  /* sentinel */
+};
+
+
+static PyObject *
+EVPXOF_get_digest_size(EVPobject *self, void *closure)
+{
+    return PyLong_FromLong(0);
+}
+
+static PyGetSetDef EVPXOF_getseters[] = {
+    {"digest_size",
+     (getter)EVPXOF_get_digest_size, NULL,
+     NULL,
+     NULL},
+    {NULL}  /* Sentinel */
+};
+
+PyDoc_STRVAR(hashxoftype_doc,
+"HASHXOF(name, string=b\'\')\n"
+"--\n"
+"\n"
+"A hash is an object used to calculate a checksum of a string of information.\n"
+"\n"
+"Methods:\n"
+"\n"
+"update() -- updates the current digest with an additional string\n"
+"digest(length) -- return the current digest value\n"
+"hexdigest(length) -- return the current digest as a string of hexadecimal digits\n"
+"copy() -- return a copy of the current hash object\n"
+"\n"
+"Attributes:\n"
+"\n"
+"name -- the hash algorithm being used by this object\n"
+"digest_size -- number of bytes in this hashes output");
+
+static PyType_Slot EVPXOFtype_slots[] = {
+    {Py_tp_doc, (char *)hashxoftype_doc},
+    {Py_tp_methods, EVPXOF_methods},
+    {Py_tp_getset, EVPXOF_getseters},
+    {Py_tp_new, _disabled_new},
+    {0, 0},
+};
+
+static PyType_Spec EVPXOFtype_spec = {
+    "_hashlib.HASHXOF",    /*tp_name*/
+    sizeof(EVPobject),  /*tp_basicsize*/
+    0,                  /*tp_itemsize*/
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    EVPXOFtype_slots
+};
+
+
+#endif
+
+static PyObject *
+EVPnew(PyObject *module, const EVP_MD *digest,
+       const unsigned char *cp, Py_ssize_t len, int usedforsecurity)
 {
     int result = 0;
     EVPobject *self;
+    PyTypeObject *type = get_hashlib_state(module)->EVPtype;
 
     if (!digest) {
         PyErr_SetString(PyExc_ValueError, "unsupported hash type");
         return NULL;
     }
 
-    if ((self = newEVPobject()) == NULL)
+#ifdef PY_OPENSSL_HAS_SHAKE
+    if ((EVP_MD_flags(digest) & EVP_MD_FLAG_XOF) == EVP_MD_FLAG_XOF) {
+        type = get_hashlib_state(module)->EVPXOFtype;
+    }
+#endif
+
+    if ((self = newEVPobject(type)) == NULL)
         return NULL;
 
+    if (!usedforsecurity) {
+#ifdef EVP_MD_CTX_FLAG_NON_FIPS_ALLOW
+        EVP_MD_CTX_set_flags(self->ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
+#endif
+    }
+
+
     if (!EVP_DigestInit_ex(self->ctx, digest, NULL)) {
         _setException(PyExc_ValueError);
         Py_DECREF(self);
@@ -591,6 +799,8 @@
 
     name as name_obj: object
     string as data_obj: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new hash object using the named algorithm.
 
@@ -601,13 +811,14 @@
 [clinic start generated code]*/
 
 static PyObject *
-EVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj)
-/*[clinic end generated code: output=9e7cf664e04b0226 input=7eb79bf30058bd02]*/
+EVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj,
+             int usedforsecurity)
+/*[clinic end generated code: output=ddd5053f92dffe90 input=c24554d0337be1b0]*/
 {
     Py_buffer view = { 0 };
     PyObject *ret_obj;
     char *name;
-    const EVP_MD *digest;
+    const EVP_MD *digest = NULL;
 
     if (!PyArg_Parse(name_obj, "s", &name)) {
         PyErr_SetString(PyExc_TypeError, "name must be a string");
@@ -619,7 +830,9 @@
 
     digest = py_digest_by_name(name);
 
-    ret_obj = EVPnew(digest, (unsigned char*)view.buf, view.len);
+    ret_obj = EVPnew(module, digest,
+                     (unsigned char*)view.buf, view.len,
+                     usedforsecurity);
 
     if (data_obj)
         PyBuffer_Release(&view);
@@ -627,7 +840,8 @@
 }
 
 static PyObject*
-EVP_fast_new(PyObject *module, PyObject *data_obj, const EVP_MD *digest)
+EVP_fast_new(PyObject *module, PyObject *data_obj, const EVP_MD *digest,
+             int usedforsecurity)
 {
     Py_buffer view = { 0 };
     PyObject *ret_obj;
@@ -635,7 +849,9 @@
     if (data_obj)
         GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view);
 
-    ret_obj = EVPnew(digest, (unsigned char*)view.buf, view.len);
+    ret_obj = EVPnew(module, digest,
+                     (unsigned char*)view.buf, view.len,
+                     usedforsecurity);
 
     if (data_obj)
         PyBuffer_Release(&view);
@@ -647,16 +863,19 @@
 _hashlib.openssl_md5
 
     string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
 
 Returns a md5 hash object; optionally initialized with a string
 
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj)
-/*[clinic end generated code: output=6caae75b73e22c3f input=52010d3869e1b1a7]*/
+_hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj,
+                          int usedforsecurity)
+/*[clinic end generated code: output=87b0186440a44f8c input=990e36d5e689b16e]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_md5());
+    return EVP_fast_new(module, data_obj, EVP_md5(), usedforsecurity);
 }
 
 
@@ -664,16 +883,19 @@
 _hashlib.openssl_sha1
 
     string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
 
 Returns a sha1 hash object; optionally initialized with a string
 
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj)
-/*[clinic end generated code: output=07606d8f75153e61 input=16807d30e4aa8ae9]*/
+_hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj,
+                           int usedforsecurity)
+/*[clinic end generated code: output=6813024cf690670d input=948f2f4b6deabc10]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha1());
+    return EVP_fast_new(module, data_obj, EVP_sha1(), usedforsecurity);
 }
 
 
@@ -681,16 +903,19 @@
 _hashlib.openssl_sha224
 
     string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
 
 Returns a sha224 hash object; optionally initialized with a string
 
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj)
-/*[clinic end generated code: output=55e848761bcef0c9 input=5dbc2f1d84eb459b]*/
+_hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity)
+/*[clinic end generated code: output=a2dfe7cc4eb14ebb input=f9272821fadca505]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha224());
+    return EVP_fast_new(module, data_obj, EVP_sha224(), usedforsecurity);
 }
 
 
@@ -698,16 +923,19 @@
 _hashlib.openssl_sha256
 
     string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
 
 Returns a sha256 hash object; optionally initialized with a string
 
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj)
-/*[clinic end generated code: output=05851d7cce34ac65 input=a68a5d21cda5a80f]*/
+_hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity)
+/*[clinic end generated code: output=1f874a34870f0a68 input=549fad9d2930d4c5]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha256());
+    return EVP_fast_new(module, data_obj, EVP_sha256(), usedforsecurity);
 }
 
 
@@ -715,16 +943,19 @@
 _hashlib.openssl_sha384
 
     string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
 
 Returns a sha384 hash object; optionally initialized with a string
 
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj)
-/*[clinic end generated code: output=5101a4704a932c2f input=6bdfa006622b64ea]*/
+_hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity)
+/*[clinic end generated code: output=58529eff9ca457b2 input=48601a6e3bf14ad7]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha384());
+    return EVP_fast_new(module, data_obj, EVP_sha384(), usedforsecurity);
 }
 
 
@@ -732,19 +963,141 @@
 _hashlib.openssl_sha512
 
     string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
 
 Returns a sha512 hash object; optionally initialized with a string
 
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj)
-/*[clinic end generated code: output=20c8e63ee560a5cb input=ece50182ad4b76a6]*/
+_hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity)
+/*[clinic end generated code: output=2c744c9e4a40d5f6 input=c5c46a2a817aa98f]*/
 {
-    return EVP_fast_new(module, data_obj, EVP_sha512());
+    return EVP_fast_new(module, data_obj, EVP_sha512(), usedforsecurity);
 }
 
 
+#ifdef PY_OPENSSL_HAS_SHA3
+
+/*[clinic input]
+_hashlib.openssl_sha3_224
+
+    string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
+
+Returns a sha3-224 hash object; optionally initialized with a string
+
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_openssl_sha3_224_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity)
+/*[clinic end generated code: output=144641c1d144b974 input=e3a01b2888916157]*/
+{
+    return EVP_fast_new(module, data_obj, EVP_sha3_224(), usedforsecurity);
+}
+
+/*[clinic input]
+_hashlib.openssl_sha3_256
+
+    string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
+
+Returns a sha3-256 hash object; optionally initialized with a string
+
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_openssl_sha3_256_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity)
+/*[clinic end generated code: output=c61f1ab772d06668 input=e2908126c1b6deed]*/
+{
+    return EVP_fast_new(module, data_obj, EVP_sha3_256(), usedforsecurity);
+}
+
+/*[clinic input]
+_hashlib.openssl_sha3_384
+
+    string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
+
+Returns a sha3-384 hash object; optionally initialized with a string
+
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_openssl_sha3_384_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity)
+/*[clinic end generated code: output=f68e4846858cf0ee input=ec0edf5c792f8252]*/
+{
+    return EVP_fast_new(module, data_obj, EVP_sha3_384(), usedforsecurity);
+}
+
+/*[clinic input]
+_hashlib.openssl_sha3_512
+
+    string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
+
+Returns a sha3-512 hash object; optionally initialized with a string
+
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_openssl_sha3_512_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity)
+/*[clinic end generated code: output=2eede478c159354a input=64e2cc0c094d56f4]*/
+{
+    return EVP_fast_new(module, data_obj, EVP_sha3_512(), usedforsecurity);
+}
+#endif /* PY_OPENSSL_HAS_SHA3 */
+
+#ifdef PY_OPENSSL_HAS_SHAKE
+/*[clinic input]
+_hashlib.openssl_shake_128
+
+    string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
+
+Returns a shake-128 variable hash object; optionally initialized with a string
+
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_openssl_shake_128_impl(PyObject *module, PyObject *data_obj,
+                                int usedforsecurity)
+/*[clinic end generated code: output=bc49cdd8ada1fa97 input=6c9d67440eb33ec8]*/
+{
+    return EVP_fast_new(module, data_obj, EVP_shake128(), usedforsecurity);
+}
+
+/*[clinic input]
+_hashlib.openssl_shake_256
+
+    string as data_obj: object(py_default="b''") = NULL
+    *
+    usedforsecurity: bool = True
+
+Returns a shake-256 variable hash object; optionally initialized with a string
+
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_openssl_shake_256_impl(PyObject *module, PyObject *data_obj,
+                                int usedforsecurity)
+/*[clinic end generated code: output=358d213be8852df7 input=479cbe9fefd4a9f8]*/
+{
+    return EVP_fast_new(module, data_obj, EVP_shake256(), usedforsecurity);
+}
+#endif /* PY_OPENSSL_HAS_SHAKE */
+
 /*[clinic input]
 _hashlib.pbkdf2_hmac as pbkdf2_hmac
 
@@ -769,7 +1122,7 @@
     int retval;
     const EVP_MD *digest;
 
-    digest = EVP_get_digestbyname(hash_name);
+    digest = py_digest_by_name(hash_name);
     if (digest == NULL) {
         PyErr_SetString(PyExc_ValueError, "unsupported hash type");
         goto end;
@@ -971,7 +1324,7 @@
  */
 
 /*[clinic input]
-_hashlib.hmac_digest
+_hashlib.hmac_digest as _hashlib_hmac_singleshot
 
     key: Py_buffer
     msg: Py_buffer
@@ -981,16 +1334,16 @@
 [clinic start generated code]*/
 
 static PyObject *
-_hashlib_hmac_digest_impl(PyObject *module, Py_buffer *key, Py_buffer *msg,
-                          const char *digest)
-/*[clinic end generated code: output=75630e684cdd8762 input=562d2f4249511bd3]*/
+_hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
+                              Py_buffer *msg, const char *digest)
+/*[clinic end generated code: output=15658ede5ab98185 input=019dffc571909a46]*/
 {
     unsigned char md[EVP_MAX_MD_SIZE] = {0};
     unsigned int md_len = 0;
     unsigned char *result;
     const EVP_MD *evp;
 
-    evp = EVP_get_digestbyname(digest);
+    evp = py_digest_by_name(digest);
     if (evp == NULL) {
         PyErr_SetString(PyExc_ValueError, "unsupported hash type");
         return NULL;
@@ -1022,6 +1375,360 @@
     return PyBytes_FromStringAndSize((const char*)md, md_len);
 }
 
+/* OpenSSL-based HMAC implementation
+ */
+
+static int _hmac_update(HMACobject*, PyObject*);
+
+/*[clinic input]
+_hashlib.hmac_new
+
+    key: Py_buffer
+    msg as msg_obj: object(c_default="NULL") = b''
+    digestmod: str(c_default="NULL") = None
+
+Return a new hmac object.
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
+                       const char *digestmod)
+/*[clinic end generated code: output=9a35673be0cbea1b input=a0878868eb190134]*/
+{
+    PyTypeObject *type = get_hashlib_state(module)->HMACtype;
+    const EVP_MD *digest;
+    HMAC_CTX *ctx = NULL;
+    HMACobject *self = NULL;
+    int r;
+
+    if (key->len > INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError,
+                        "key is too long.");
+        return NULL;
+    }
+
+    if ((digestmod == NULL) || !strlen(digestmod)) {
+        PyErr_SetString(
+            PyExc_TypeError, "Missing required parameter 'digestmod'.");
+        return NULL;
+    }
+
+    digest = py_digest_by_name(digestmod);
+    if (!digest) {
+        PyErr_SetString(PyExc_ValueError, "unknown hash function");
+        return NULL;
+    }
+
+    ctx = HMAC_CTX_new();
+    if (ctx == NULL) {
+        _setException(PyExc_ValueError);
+        goto error;
+    }
+
+    r = HMAC_Init_ex(
+        ctx,
+        (const char*)key->buf,
+        (int)key->len,
+        digest,
+        NULL /*impl*/);
+    if (r == 0) {
+        _setException(PyExc_ValueError);
+        goto error;
+    }
+
+    self = (HMACobject *)PyObject_New(HMACobject, type);
+    if (self == NULL) {
+        goto error;
+    }
+
+    self->ctx = ctx;
+    self->lock = NULL;
+
+    if ((msg_obj != NULL) && (msg_obj != Py_None)) {
+        if (!_hmac_update(self, msg_obj))
+            goto error;
+    }
+
+    return (PyObject*)self;
+
+error:
+    if (ctx) HMAC_CTX_free(ctx);
+    if (self) PyObject_Del(self);
+    return NULL;
+}
+
+/* helper functions */
+static int
+locked_HMAC_CTX_copy(HMAC_CTX *new_ctx_p, HMACobject *self)
+{
+    int result;
+    ENTER_HASHLIB(self);
+    result = HMAC_CTX_copy(new_ctx_p, self->ctx);
+    LEAVE_HASHLIB(self);
+    return result;
+}
+
+static unsigned int
+_hmac_digest_size(HMACobject *self)
+{
+    unsigned int digest_size = EVP_MD_size(HMAC_CTX_get_md(self->ctx));
+    assert(digest_size <= EVP_MAX_MD_SIZE);
+    return digest_size;
+}
+
+static int
+_hmac_update(HMACobject *self, PyObject *obj)
+{
+    int r;
+    Py_buffer view = {0};
+
+    GET_BUFFER_VIEW_OR_ERROR(obj, &view, return 0);
+
+    if (self->lock == NULL && view.len >= HASHLIB_GIL_MINSIZE) {
+        self->lock = PyThread_allocate_lock();
+        /* fail? lock = NULL and we fail over to non-threaded code. */
+    }
+
+    if (self->lock != NULL) {
+        ENTER_HASHLIB(self);
+        r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len);
+        LEAVE_HASHLIB(self);
+    } else {
+        r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len);
+    }
+
+    PyBuffer_Release(&view);
+
+    if (r == 0) {
+        _setException(PyExc_ValueError);
+        return 0;
+    }
+    return 1;
+}
+
+/*[clinic input]
+_hashlib.HMAC.copy
+
+Return a copy ("clone") of the HMAC object.
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_HMAC_copy_impl(HMACobject *self)
+/*[clinic end generated code: output=29aa28b452833127 input=e2fa6a05db61a4d6]*/
+{
+    HMACobject *retval;
+
+    HMAC_CTX *ctx = HMAC_CTX_new();
+    if (ctx == NULL) {
+        return _setException(PyExc_ValueError);
+    }
+    if (!locked_HMAC_CTX_copy(ctx, self)) {
+        HMAC_CTX_free(ctx);
+        return _setException(PyExc_ValueError);
+    }
+
+    retval = (HMACobject *)PyObject_New(HMACobject, Py_TYPE(self));
+    if (retval == NULL) {
+        HMAC_CTX_free(ctx);
+        return NULL;
+    }
+    retval->ctx = ctx;
+    retval->lock = NULL;
+
+    return (PyObject *)retval;
+}
+
+static void
+_hmac_dealloc(HMACobject *self)
+{
+    PyTypeObject *tp = Py_TYPE(self);
+    if (self->lock != NULL) {
+        PyThread_free_lock(self->lock);
+    }
+    HMAC_CTX_free(self->ctx);
+    PyObject_Del(self);
+    Py_DECREF(tp);
+}
+
+static PyObject *
+_hmac_repr(HMACobject *self)
+{
+    PyObject *digest_name = py_digest_name(HMAC_CTX_get_md(self->ctx));
+    if (digest_name == NULL) {
+        return NULL;
+    }
+    PyObject *repr = PyUnicode_FromFormat(
+        "<%U HMAC object @ %p>", digest_name, self
+    );
+    Py_DECREF(digest_name);
+    return repr;
+}
+
+/*[clinic input]
+_hashlib.HMAC.update
+    msg: object
+
+Update the HMAC object with msg.
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_HMAC_update_impl(HMACobject *self, PyObject *msg)
+/*[clinic end generated code: output=f31f0ace8c625b00 input=1829173bb3cfd4e6]*/
+{
+    if (!_hmac_update(self, msg)) {
+        return NULL;
+    }
+    Py_RETURN_NONE;
+}
+
+static int
+_hmac_digest(HMACobject *self, unsigned char *buf, unsigned int len)
+{
+    HMAC_CTX *temp_ctx = HMAC_CTX_new();
+    if (temp_ctx == NULL) {
+        PyErr_NoMemory();
+        return 0;
+    }
+    if (!locked_HMAC_CTX_copy(temp_ctx, self)) {
+        _setException(PyExc_ValueError);
+        return 0;
+    }
+    int r = HMAC_Final(temp_ctx, buf, &len);
+    HMAC_CTX_free(temp_ctx);
+    if (r == 0) {
+        _setException(PyExc_ValueError);
+        return 0;
+    }
+    return 1;
+}
+
+/*[clinic input]
+_hashlib.HMAC.digest
+Return the digest of the bytes passed to the update() method so far.
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_HMAC_digest_impl(HMACobject *self)
+/*[clinic end generated code: output=1b1424355af7a41e input=bff07f74da318fb4]*/
+{
+    unsigned char digest[EVP_MAX_MD_SIZE];
+    unsigned int digest_size = _hmac_digest_size(self);
+    if (digest_size == 0) {
+        return _setException(PyExc_ValueError);
+    }
+    int r = _hmac_digest(self, digest, digest_size);
+    if (r == 0) {
+        return NULL;
+    }
+    return PyBytes_FromStringAndSize((const char *)digest, digest_size);
+}
+
+/*[clinic input]
+_hashlib.HMAC.hexdigest
+
+Return hexadecimal digest of the bytes passed to the update() method so far.
+
+This may be used to exchange the value safely in email or other non-binary
+environments.
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_HMAC_hexdigest_impl(HMACobject *self)
+/*[clinic end generated code: output=80d825be1eaae6a7 input=5abc42702874ddcf]*/
+{
+    unsigned char digest[EVP_MAX_MD_SIZE];
+    unsigned int digest_size = _hmac_digest_size(self);
+    if (digest_size == 0) {
+        return _setException(PyExc_ValueError);
+    }
+    int r = _hmac_digest(self, digest, digest_size);
+    if (r == 0) {
+        return NULL;
+    }
+    return _Py_strhex((const char *)digest, digest_size);
+}
+
+static PyObject *
+_hashlib_hmac_get_digest_size(HMACobject *self, void *closure)
+{
+    unsigned int digest_size = _hmac_digest_size(self);
+    if (digest_size == 0) {
+        return _setException(PyExc_ValueError);
+    }
+    return PyLong_FromLong(digest_size);
+}
+
+static PyObject *
+_hashlib_hmac_get_block_size(HMACobject *self, void *closure)
+{
+    const EVP_MD *md = HMAC_CTX_get_md(self->ctx);
+    if (md == NULL) {
+        return _setException(PyExc_ValueError);
+    }
+    return PyLong_FromLong(EVP_MD_block_size(md));
+}
+
+static PyObject *
+_hashlib_hmac_get_name(HMACobject *self, void *closure)
+{
+    PyObject *digest_name = py_digest_name(HMAC_CTX_get_md(self->ctx));
+    if (digest_name == NULL) {
+        return NULL;
+    }
+    PyObject *name = PyUnicode_FromFormat("hmac-%U", digest_name);
+    Py_DECREF(digest_name);
+    return name;
+}
+
+static PyMethodDef HMAC_methods[] = {
+    _HASHLIB_HMAC_UPDATE_METHODDEF
+    _HASHLIB_HMAC_DIGEST_METHODDEF
+    _HASHLIB_HMAC_HEXDIGEST_METHODDEF
+    _HASHLIB_HMAC_COPY_METHODDEF
+    {NULL, NULL}  /* sentinel */
+};
+
+static PyGetSetDef HMAC_getset[] = {
+    {"digest_size", (getter)_hashlib_hmac_get_digest_size, NULL, NULL, NULL},
+    {"block_size", (getter)_hashlib_hmac_get_block_size, NULL, NULL, NULL},
+    {"name", (getter)_hashlib_hmac_get_name, NULL, NULL, NULL},
+    {NULL}  /* Sentinel */
+};
+
+
+PyDoc_STRVAR(hmactype_doc,
+"The object used to calculate HMAC of a message.\n\
+\n\
+Methods:\n\
+\n\
+update() -- updates the current digest with an additional string\n\
+digest() -- return the current digest value\n\
+hexdigest() -- return the current digest as a string of hexadecimal digits\n\
+copy() -- return a copy of the current hash object\n\
+\n\
+Attributes:\n\
+\n\
+name -- the name, including the hash algorithm used by this object\n\
+digest_size -- number of bytes in digest() output\n");
+
+static PyType_Slot HMACtype_slots[] = {
+    {Py_tp_doc, (char *)hmactype_doc},
+    {Py_tp_repr, (reprfunc)_hmac_repr},
+    {Py_tp_dealloc,(destructor)_hmac_dealloc},
+    {Py_tp_methods, HMAC_methods},
+    {Py_tp_getset, HMAC_getset},
+    {Py_tp_new, _disabled_new},
+    {0, NULL}
+};
+
+PyType_Spec HMACtype_spec = {
+    "_hashlib.HMAC",    /* name */
+    sizeof(HMACobject),     /* basicsize */
+    .flags = Py_TPFLAGS_DEFAULT,
+    .slots = HMACtype_slots,
+};
+
+
 /* State for our callback function so that it can accumulate a result. */
 typedef struct _internal_name_mapper_state {
     PyObject *set;
@@ -1054,22 +1761,191 @@
 
 
 /* Ask OpenSSL for a list of supported ciphers, filling in a Python set. */
-static PyObject*
-generate_hash_name_list(void)
+static int
+hashlib_md_meth_names(PyObject *module)
 {
-    _InternalNameMapperState state;
-    state.set = PyFrozenSet_New(NULL);
-    if (state.set == NULL)
-        return NULL;
-    state.error = 0;
+    _InternalNameMapperState state = {
+        .set = PyFrozenSet_New(NULL),
+        .error = 0
+    };
+    if (state.set == NULL) {
+        return -1;
+    }
 
     EVP_MD_do_all(&_openssl_hash_name_mapper, &state);
 
     if (state.error) {
         Py_DECREF(state.set);
-        return NULL;
+        return -1;
     }
-    return state.set;
+
+    if (PyModule_AddObject(module, "openssl_md_meth_names", state.set) < 0) {
+        Py_DECREF(state.set);
+        return -1;
+    }
+
+    return 0;
+}
+
+/* LibreSSL doesn't support FIPS:
+   https://marc.info/?l=openbsd-misc&m=139819485423701&w=2
+
+   Ted Unangst wrote: "I figured I should mention our current libressl policy
+   wrt FIPS mode.  It's gone and it's not coming back." */
+#ifndef LIBRESSL_VERSION_NUMBER
+/*[clinic input]
+_hashlib.get_fips_mode -> int
+
+Determine the OpenSSL FIPS mode of operation.
+
+For OpenSSL 3.0.0 and newer it returns the state of the default provider
+in the default OSSL context. It's not quite the same as FIPS_mode() but good
+enough for unittests.
+
+Effectively any non-zero return value indicates FIPS mode;
+values other than 1 may have additional significance.
+[clinic start generated code]*/
+
+static int
+_hashlib_get_fips_mode_impl(PyObject *module)
+/*[clinic end generated code: output=87eece1bab4d3fa9 input=2db61538c41c6fef]*/
+
+{
+    int result;
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+    result = EVP_default_properties_is_fips_enabled(NULL);
+#else
+    ERR_clear_error();
+    result = FIPS_mode();
+    if (result == 0) {
+        // "If the library was built without support of the FIPS Object Module,
+        // then the function will return 0 with an error code of
+        // CRYPTO_R_FIPS_MODE_NOT_SUPPORTED (0x0f06d065)."
+        // But 0 is also a valid result value.
+        unsigned long errcode = ERR_peek_last_error();
+        if (errcode) {
+            _setException(PyExc_ValueError);
+            return -1;
+        }
+    }
+    return result;
+#endif
+}
+#endif  // !LIBRESSL_VERSION_NUMBER
+
+
+static int
+_tscmp(const unsigned char *a, const unsigned char *b,
+        Py_ssize_t len_a, Py_ssize_t len_b)
+{
+    /* loop count depends on length of b. Might leak very little timing
+     * information if sizes are different.
+     */
+    Py_ssize_t length = len_b;
+    const void *left = a;
+    const void *right = b;
+    int result = 0;
+
+    if (len_a != length) {
+        left = b;
+        result = 1;
+    }
+
+    result |= CRYPTO_memcmp(left, right, length);
+
+    return (result == 0);
+}
+
+/* NOTE: Keep in sync with _operator.c implementation. */
+
+/*[clinic input]
+_hashlib.compare_digest
+
+    a: object
+    b: object
+    /
+
+Return 'a == b'.
+
+This function uses an approach designed to prevent
+timing analysis, making it appropriate for cryptography.
+
+a and b must both be of the same type: either str (ASCII only),
+or any bytes-like object.
+
+Note: If a and b are of different lengths, or if an error occurs,
+a timing attack could theoretically reveal information about the
+types and lengths of a and b--but not their values.
+[clinic start generated code]*/
+
+static PyObject *
+_hashlib_compare_digest_impl(PyObject *module, PyObject *a, PyObject *b)
+/*[clinic end generated code: output=6f1c13927480aed9 input=9c40c6e566ca12f5]*/
+{
+    int rc;
+
+    /* ASCII unicode string */
+    if(PyUnicode_Check(a) && PyUnicode_Check(b)) {
+        if (PyUnicode_READY(a) == -1 || PyUnicode_READY(b) == -1) {
+            return NULL;
+        }
+        if (!PyUnicode_IS_ASCII(a) || !PyUnicode_IS_ASCII(b)) {
+            PyErr_SetString(PyExc_TypeError,
+                            "comparing strings with non-ASCII characters is "
+                            "not supported");
+            return NULL;
+        }
+
+        rc = _tscmp(PyUnicode_DATA(a),
+                    PyUnicode_DATA(b),
+                    PyUnicode_GET_LENGTH(a),
+                    PyUnicode_GET_LENGTH(b));
+    }
+    /* fallback to buffer interface for bytes, bytesarray and other */
+    else {
+        Py_buffer view_a;
+        Py_buffer view_b;
+
+        if (PyObject_CheckBuffer(a) == 0 && PyObject_CheckBuffer(b) == 0) {
+            PyErr_Format(PyExc_TypeError,
+                         "unsupported operand types(s) or combination of types: "
+                         "'%.100s' and '%.100s'",
+                         Py_TYPE(a)->tp_name, Py_TYPE(b)->tp_name);
+            return NULL;
+        }
+
+        if (PyObject_GetBuffer(a, &view_a, PyBUF_SIMPLE) == -1) {
+            return NULL;
+        }
+        if (view_a.ndim > 1) {
+            PyErr_SetString(PyExc_BufferError,
+                            "Buffer must be single dimension");
+            PyBuffer_Release(&view_a);
+            return NULL;
+        }
+
+        if (PyObject_GetBuffer(b, &view_b, PyBUF_SIMPLE) == -1) {
+            PyBuffer_Release(&view_a);
+            return NULL;
+        }
+        if (view_b.ndim > 1) {
+            PyErr_SetString(PyExc_BufferError,
+                            "Buffer must be single dimension");
+            PyBuffer_Release(&view_a);
+            PyBuffer_Release(&view_b);
+            return NULL;
+        }
+
+        rc = _tscmp((const unsigned char*)view_a.buf,
+                    (const unsigned char*)view_b.buf,
+                    view_a.len,
+                    view_b.len);
+
+        PyBuffer_Release(&view_a);
+        PyBuffer_Release(&view_b);
+    }
+
+    return PyBool_FromLong(rc);
 }
 
 /* List of functions exported by this module */
@@ -1078,68 +1954,188 @@
     EVP_NEW_METHODDEF
     PBKDF2_HMAC_METHODDEF
     _HASHLIB_SCRYPT_METHODDEF
-    _HASHLIB_HMAC_DIGEST_METHODDEF
+    _HASHLIB_GET_FIPS_MODE_METHODDEF
+    _HASHLIB_COMPARE_DIGEST_METHODDEF
+    _HASHLIB_HMAC_SINGLESHOT_METHODDEF
+    _HASHLIB_HMAC_NEW_METHODDEF
     _HASHLIB_OPENSSL_MD5_METHODDEF
     _HASHLIB_OPENSSL_SHA1_METHODDEF
     _HASHLIB_OPENSSL_SHA224_METHODDEF
     _HASHLIB_OPENSSL_SHA256_METHODDEF
     _HASHLIB_OPENSSL_SHA384_METHODDEF
     _HASHLIB_OPENSSL_SHA512_METHODDEF
+    _HASHLIB_OPENSSL_SHA3_224_METHODDEF
+    _HASHLIB_OPENSSL_SHA3_256_METHODDEF
+    _HASHLIB_OPENSSL_SHA3_384_METHODDEF
+    _HASHLIB_OPENSSL_SHA3_512_METHODDEF
+    _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
+    _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
     {NULL,      NULL}            /* Sentinel */
 };
 
 
 /* Initialize this module. */
 
-
-static struct PyModuleDef _hashlibmodule = {
-    PyModuleDef_HEAD_INIT,
-    "_hashlib",
-    NULL,
-    -1,
-    EVP_functions,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
-
-PyMODINIT_FUNC
-PyInit__hashlib(void)
+static int
+hashlib_traverse(PyObject *m, visitproc visit, void *arg)
 {
-    PyObject *m, *openssl_md_meth_names;
+    _hashlibstate *state = get_hashlib_state(m);
+    Py_VISIT(state->EVPtype);
+    Py_VISIT(state->HMACtype);
+#ifdef PY_OPENSSL_HAS_SHAKE
+    Py_VISIT(state->EVPXOFtype);
+#endif
+    return 0;
+}
 
+static int
+hashlib_clear(PyObject *m)
+{
+    _hashlibstate *state = get_hashlib_state(m);
+    Py_CLEAR(state->EVPtype);
+    Py_CLEAR(state->HMACtype);
+#ifdef PY_OPENSSL_HAS_SHAKE
+    Py_CLEAR(state->EVPXOFtype);
+#endif
+    return 0;
+}
+
+static void
+hashlib_free(void *m)
+{
+    hashlib_clear((PyObject *)m);
+}
+
+/* Py_mod_exec functions */
+static int
+hashlib_openssl_legacy_init(PyObject *module)
+{
 #if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)
     /* Load all digest algorithms and initialize cpuid */
     OPENSSL_add_all_algorithms_noconf();
     ERR_load_crypto_strings();
 #endif
+    return 0;
+}
 
-    /* TODO build EVP_functions openssl_* entries dynamically based
-     * on what hashes are supported rather than listing many
-     * but having some be unsupported.  Only init appropriate
-     * constants. */
+static int
+hashlib_init_evptype(PyObject *module)
+{
+    _hashlibstate *state = get_hashlib_state(module);
 
-    Py_TYPE(&EVPtype) = &PyType_Type;
-    if (PyType_Ready(&EVPtype) < 0)
-        return NULL;
+    state->EVPtype = (PyTypeObject *)PyType_FromSpec(&EVPtype_spec);
+    if (state->EVPtype == NULL) {
+        return -1;
+    }
+    if (PyModule_AddType(module, state->EVPtype) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static int
+hashlib_init_evpxoftype(PyObject *module)
+{
+#ifdef PY_OPENSSL_HAS_SHAKE
+    _hashlibstate *state = get_hashlib_state(module);
+    PyObject *bases;
+
+    if (state->EVPtype == NULL) {
+        return -1;
+    }
+
+    bases = PyTuple_Pack(1, state->EVPtype);
+    if (bases == NULL) {
+        return -1;
+    }
+
+    state->EVPXOFtype = (PyTypeObject *)PyType_FromSpecWithBases(
+        &EVPXOFtype_spec, bases
+    );
+    Py_DECREF(bases);
+    if (state->EVPXOFtype == NULL) {
+        return -1;
+    }
+    if (PyModule_AddType(module, state->EVPXOFtype) < 0) {
+        return -1;
+    }
+#endif
+    return 0;
+}
+
+static int
+hashlib_init_hmactype(PyObject *module)
+{
+    _hashlibstate *state = get_hashlib_state(module);
+
+    state->HMACtype = (PyTypeObject *)PyType_FromSpec(&HMACtype_spec);
+    if (state->HMACtype == NULL) {
+        return -1;
+    }
+    if (PyModule_AddType(module, state->HMACtype) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+#if 0
+static PyModuleDef_Slot hashlib_slots[] = {
+    /* OpenSSL 1.0.2 and LibreSSL */
+    {Py_mod_exec, hashlib_openssl_legacy_init},
+    {Py_mod_exec, hashlib_init_evptype},
+    {Py_mod_exec, hashlib_init_evpxoftype},
+    {Py_mod_exec, hashlib_init_hmactype},
+    {Py_mod_exec, hashlib_md_meth_names},
+    {0, NULL}
+};
+#endif
+
+static struct PyModuleDef _hashlibmodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "_hashlib",
+    .m_doc = "OpenSSL interface for hashlib module",
+    .m_size = sizeof(_hashlibstate),
+    .m_methods = EVP_functions,
+    .m_slots = NULL,
+    .m_traverse = hashlib_traverse,
+    .m_clear = hashlib_clear,
+    .m_free = hashlib_free
+};
+
+PyMODINIT_FUNC
+PyInit__hashlib(void)
+{
+    PyObject *m = PyState_FindModule(&_hashlibmodule);
+    if (m != NULL) {
+        Py_INCREF(m);
+        return m;
+    }
 
     m = PyModule_Create(&_hashlibmodule);
-    if (m == NULL)
-        return NULL;
-
-    openssl_md_meth_names = generate_hash_name_list();
-    if (openssl_md_meth_names == NULL) {
-        Py_DECREF(m);
-        return NULL;
-    }
-    if (PyModule_AddObject(m, "openssl_md_meth_names", openssl_md_meth_names)) {
-        Py_DECREF(m);
+    if (m == NULL) {
         return NULL;
     }
 
-    Py_INCREF((PyObject *)&EVPtype);
-    PyModule_AddObject(m, "HASH", (PyObject *)&EVPtype);
+    if (hashlib_openssl_legacy_init(m) < 0) {
+        Py_DECREF(m);
+        return NULL;
+    }
+    if (hashlib_init_evptype(m) < 0) {
+        Py_DECREF(m);
+        return NULL;
+    }
+    if (hashlib_init_evpxoftype(m) < 0) {
+        Py_DECREF(m);
+        return NULL;
+    }
+    if (hashlib_init_hmactype(m) < 0) {
+        Py_DECREF(m);
+        return NULL;
+    }
+    if (hashlib_md_meth_names(m) == -1) {
+        Py_DECREF(m);
+        return NULL;
+    }
 
     return m;
 }
diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c
index 6bc18b5..4e85e04 100644
--- a/Modules/_heapqmodule.c
+++ b/Modules/_heapqmodule.c
@@ -555,7 +555,6 @@
     return heapify_internal(heap, siftup_max);
 }
 
-
 static PyMethodDef heapq_methods[] = {
     _HEAPQ_HEAPPUSH_METHODDEF
     _HEAPQ_HEAPPUSHPOP_METHODDEF
@@ -694,13 +693,29 @@
 From all times, sorting has always been a Great Art! :-)\n");
 
 
+static int
+heapq_exec(PyObject *m)
+{
+    PyObject *about = PyUnicode_FromString(__about__);
+    if (PyModule_AddObject(m, "__about__", about) < 0) {
+        Py_DECREF(about);
+        return -1;
+    }
+    return 0;
+}
+
+static struct PyModuleDef_Slot heapq_slots[] = {
+    {Py_mod_exec, heapq_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef _heapqmodule = {
     PyModuleDef_HEAD_INIT,
     "_heapq",
     module_doc,
-    -1,
+    0,
     heapq_methods,
-    NULL,
+    heapq_slots,
     NULL,
     NULL,
     NULL
@@ -709,13 +724,5 @@
 PyMODINIT_FUNC
 PyInit__heapq(void)
 {
-    PyObject *m, *about;
-
-    m = PyModule_Create(&_heapqmodule);
-    if (m == NULL)
-        return NULL;
-    about = PyUnicode_DecodeUTF8(__about__, strlen(__about__), NULL);
-    PyModule_AddObject(m, "__about__", about);
-    return m;
+    return PyModuleDef_Init(&_heapqmodule);
 }
-
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index 49ed2cb..d7cadac 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -9,8 +9,6 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "pycore_pystate.h"   /* _PyInterpreterState_GET_UNSAFE() */
-#include "structmember.h"
 #include "_iomodule.h"
 
 #ifdef HAVE_SYS_TYPES_H
@@ -377,14 +375,16 @@
     {
         PyObject *RawIO_class = (PyObject *)&PyFileIO_Type;
 #ifdef MS_WINDOWS
-        PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
+        const PyConfig *config = _Py_GetConfig();
         if (!config->legacy_windows_stdio && _PyIO_get_console_type(path_or_fd) != '\0') {
             RawIO_class = (PyObject *)&PyWindowsConsoleIO_Type;
             encoding = "utf-8";
         }
 #endif
-        raw = PyObject_CallFunction(RawIO_class,
-                                    "OsiO", path_or_fd, rawmode, closefd, opener);
+        raw = PyObject_CallFunction(RawIO_class, "OsOO",
+                                    path_or_fd, rawmode,
+                                    closefd ? Py_True : Py_False,
+                                    opener);
     }
 
     if (raw == NULL)
@@ -400,7 +400,7 @@
 
     /* buffering */
     if (buffering < 0) {
-        PyObject *res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
+        PyObject *res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
         if (res == NULL)
             goto error;
         isatty = PyLong_AsLong(res);
@@ -476,10 +476,10 @@
 
     /* wraps into a TextIOWrapper */
     wrapper = PyObject_CallFunction((PyObject *)&PyTextIOWrapper_Type,
-                                    "Osssi",
+                                    "OsssO",
                                     buffer,
                                     encoding, errors, newline,
-                                    line_buffering);
+                                    line_buffering ? Py_True : Py_False);
     if (wrapper == NULL)
         goto error;
     result = wrapper;
@@ -494,7 +494,7 @@
     if (result != NULL) {
         PyObject *exc, *val, *tb, *close_result;
         PyErr_Fetch(&exc, &val, &tb);
-        close_result = _PyObject_CallMethodId(result, &PyId_close, NULL);
+        close_result = _PyObject_CallMethodIdNoArgs(result, &PyId_close);
         _PyErr_ChainExceptions(exc, val, tb);
         Py_XDECREF(close_result);
         Py_DECREF(result);
@@ -563,7 +563,7 @@
         /* Otherwise replace the error with caller's error object. */
         PyErr_Format(err,
                      "cannot fit '%.200s' into an offset-sized integer",
-                     item->ob_type->tp_name);
+                     Py_TYPE(item)->tp_name);
     }
 
  finish:
@@ -571,13 +571,20 @@
     return result;
 }
 
+static inline _PyIO_State*
+get_io_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_PyIO_State *)state;
+}
 
 _PyIO_State *
 _PyIO_get_module_state(void)
 {
     PyObject *mod = PyState_FindModule(&_PyIO_Module);
     _PyIO_State *state;
-    if (mod == NULL || (state = IO_MOD_STATE(mod)) == NULL) {
+    if (mod == NULL || (state = get_io_state(mod)) == NULL) {
         PyErr_SetString(PyExc_RuntimeError,
                         "could not find io module state "
                         "(interpreter shutdown?)");
@@ -613,7 +620,7 @@
 
 static int
 iomodule_traverse(PyObject *mod, visitproc visit, void *arg) {
-    _PyIO_State *state = IO_MOD_STATE(mod);
+    _PyIO_State *state = get_io_state(mod);
     if (!state->initialized)
         return 0;
     if (state->locale_module != NULL) {
@@ -626,7 +633,7 @@
 
 static int
 iomodule_clear(PyObject *mod) {
-    _PyIO_State *state = IO_MOD_STATE(mod);
+    _PyIO_State *state = get_io_state(mod);
     if (!state->initialized)
         return 0;
     if (state->locale_module != NULL)
@@ -672,15 +679,11 @@
     _PyIO_State *state = NULL;
     if (m == NULL)
         return NULL;
-    state = IO_MOD_STATE(m);
+    state = get_io_state(m);
     state->initialized = 0;
 
-#define ADD_TYPE(type, name) \
-    if (PyType_Ready(type) < 0) \
-        goto fail; \
-    Py_INCREF(type); \
-    if (PyModule_AddObject(m, name, (PyObject *)type) < 0) {  \
-        Py_DECREF(type); \
+#define ADD_TYPE(type) \
+    if (PyModule_AddType(m, type) < 0) {  \
         goto fail; \
     }
 
@@ -708,54 +711,54 @@
     /* Concrete base types of the IO ABCs.
        (the ABCs themselves are declared through inheritance in io.py)
     */
-    ADD_TYPE(&PyIOBase_Type, "_IOBase");
-    ADD_TYPE(&PyRawIOBase_Type, "_RawIOBase");
-    ADD_TYPE(&PyBufferedIOBase_Type, "_BufferedIOBase");
-    ADD_TYPE(&PyTextIOBase_Type, "_TextIOBase");
+    ADD_TYPE(&PyIOBase_Type);
+    ADD_TYPE(&PyRawIOBase_Type);
+    ADD_TYPE(&PyBufferedIOBase_Type);
+    ADD_TYPE(&PyTextIOBase_Type);
 
     /* Implementation of concrete IO objects. */
     /* FileIO */
     PyFileIO_Type.tp_base = &PyRawIOBase_Type;
-    ADD_TYPE(&PyFileIO_Type, "FileIO");
+    ADD_TYPE(&PyFileIO_Type);
 
     /* BytesIO */
     PyBytesIO_Type.tp_base = &PyBufferedIOBase_Type;
-    ADD_TYPE(&PyBytesIO_Type, "BytesIO");
+    ADD_TYPE(&PyBytesIO_Type);
     if (PyType_Ready(&_PyBytesIOBuffer_Type) < 0)
         goto fail;
 
     /* StringIO */
     PyStringIO_Type.tp_base = &PyTextIOBase_Type;
-    ADD_TYPE(&PyStringIO_Type, "StringIO");
+    ADD_TYPE(&PyStringIO_Type);
 
 #ifdef MS_WINDOWS
     /* WindowsConsoleIO */
     PyWindowsConsoleIO_Type.tp_base = &PyRawIOBase_Type;
-    ADD_TYPE(&PyWindowsConsoleIO_Type, "_WindowsConsoleIO");
+    ADD_TYPE(&PyWindowsConsoleIO_Type);
 #endif
 
     /* BufferedReader */
     PyBufferedReader_Type.tp_base = &PyBufferedIOBase_Type;
-    ADD_TYPE(&PyBufferedReader_Type, "BufferedReader");
+    ADD_TYPE(&PyBufferedReader_Type);
 
     /* BufferedWriter */
     PyBufferedWriter_Type.tp_base = &PyBufferedIOBase_Type;
-    ADD_TYPE(&PyBufferedWriter_Type, "BufferedWriter");
+    ADD_TYPE(&PyBufferedWriter_Type);
 
     /* BufferedRWPair */
     PyBufferedRWPair_Type.tp_base = &PyBufferedIOBase_Type;
-    ADD_TYPE(&PyBufferedRWPair_Type, "BufferedRWPair");
+    ADD_TYPE(&PyBufferedRWPair_Type);
 
     /* BufferedRandom */
     PyBufferedRandom_Type.tp_base = &PyBufferedIOBase_Type;
-    ADD_TYPE(&PyBufferedRandom_Type, "BufferedRandom");
+    ADD_TYPE(&PyBufferedRandom_Type);
 
     /* TextIOWrapper */
     PyTextIOWrapper_Type.tp_base = &PyTextIOBase_Type;
-    ADD_TYPE(&PyTextIOWrapper_Type, "TextIOWrapper");
+    ADD_TYPE(&PyTextIOWrapper_Type);
 
     /* IncrementalNewlineDecoder */
-    ADD_TYPE(&PyIncrementalNewlineDecoder_Type, "IncrementalNewlineDecoder");
+    ADD_TYPE(&PyIncrementalNewlineDecoder_Type);
 
     /* Interned strings */
 #define ADD_INTERNED(name) \
diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h
index 4d318ac..a8f3951 100644
--- a/Modules/_io/_iomodule.h
+++ b/Modules/_io/_iomodule.h
@@ -2,6 +2,8 @@
  * Declarations shared between the different parts of the io module
  */
 
+#include "exports.h"
+
 /* ABCs */
 extern PyTypeObject PyIOBase_Type;
 extern PyTypeObject PyRawIOBase_Type;
@@ -183,4 +185,4 @@
 extern PyObject *_PyIO_empty_str;
 extern PyObject *_PyIO_empty_bytes;
 
-extern PyTypeObject _PyBytesIOBuffer_Type;
+extern Py_EXPORTED_SYMBOL PyTypeObject _PyBytesIOBuffer_Type;
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index ad7a8c9..f8e21f2 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -10,9 +10,7 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
-#include "pythread.h"
+#include "structmember.h"         // PyMemberDef
 #include "_iomodule.h"
 
 /*[clinic input]
@@ -292,12 +290,11 @@
     }
     Py_END_ALLOW_THREADS
     if (relax_locking && st != PY_LOCK_ACQUIRED) {
-        PyObject *msgobj = PyUnicode_FromFormat(
-            "could not acquire lock for %A at interpreter "
+        PyObject *ascii = PyObject_ASCII((PyObject*)self);
+        _Py_FatalErrorFormat(__func__,
+            "could not acquire lock for %s at interpreter "
             "shutdown, possibly due to daemon threads",
-            (PyObject *) self);
-        const char *msg = PyUnicode_AsUTF8(msgobj);
-        Py_FatalError(msg);
+            ascii ? PyUnicode_AsUTF8(ascii) : "<ascii(self) failed>");
     }
     return 1;
 }
@@ -439,8 +436,8 @@
 {
     if (self->ok && self->raw) {
         PyObject *r;
-        r = _PyObject_CallMethodIdObjArgs(self->raw, &PyId__dealloc_warn,
-                                          source, NULL);
+        r = _PyObject_CallMethodIdOneArg(self->raw, &PyId__dealloc_warn,
+                                         source);
         if (r)
             Py_DECREF(r);
         else
@@ -461,7 +458,7 @@
 buffered_simple_flush(buffered *self, PyObject *args)
 {
     CHECK_INITIALIZED(self)
-    return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_flush, NULL);
+    return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_flush);
 }
 
 static int
@@ -513,7 +510,7 @@
     }
     /* flush() will most probably re-take the lock, so drop it first */
     LEAVE_BUFFERED(self)
-    res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
+    res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
     if (!ENTER_BUFFERED(self))
         return NULL;
     if (res == NULL)
@@ -521,7 +518,7 @@
     else
         Py_DECREF(res);
 
-    res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_close, NULL);
+    res = PyObject_CallMethodNoArgs(self->raw, _PyIO_str_close);
 
     if (self->buffer) {
         PyMem_Free(self->buffer);
@@ -545,7 +542,7 @@
 {
     PyObject *raw, *res;
     CHECK_INITIALIZED(self)
-    res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
+    res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
     if (res == NULL)
         return NULL;
     Py_DECREF(res);
@@ -562,21 +559,21 @@
 buffered_seekable(buffered *self, PyObject *Py_UNUSED(ignored))
 {
     CHECK_INITIALIZED(self)
-    return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_seekable, NULL);
+    return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_seekable);
 }
 
 static PyObject *
 buffered_readable(buffered *self, PyObject *Py_UNUSED(ignored))
 {
     CHECK_INITIALIZED(self)
-    return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_readable, NULL);
+    return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_readable);
 }
 
 static PyObject *
 buffered_writable(buffered *self, PyObject *Py_UNUSED(ignored))
 {
     CHECK_INITIALIZED(self)
-    return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_writable, NULL);
+    return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_writable);
 }
 
 static PyObject *
@@ -599,14 +596,14 @@
 buffered_fileno(buffered *self, PyObject *Py_UNUSED(ignored))
 {
     CHECK_INITIALIZED(self)
-    return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_fileno, NULL);
+    return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_fileno);
 }
 
 static PyObject *
 buffered_isatty(buffered *self, PyObject *Py_UNUSED(ignored))
 {
     CHECK_INITIALIZED(self)
-    return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_isatty, NULL);
+    return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_isatty);
 }
 
 /* Forward decls */
@@ -670,7 +667,7 @@
 {
     Py_off_t n;
     PyObject *res;
-    res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_tell, NULL);
+    res = PyObject_CallMethodNoArgs(self->raw, _PyIO_str_tell);
     if (res == NULL)
         return -1;
     n = PyNumber_AsOff_t(res, PyExc_ValueError);
@@ -1315,16 +1312,20 @@
     PyObject *res = NULL;
 
     CHECK_INITIALIZED(self)
+    CHECK_CLOSED(self, "truncate of closed file")
+    if (!self->writable) {
+        return bufferediobase_unsupported("truncate");
+    }
     if (!ENTER_BUFFERED(self))
         return NULL;
 
-    if (self->writable) {
-        res = buffered_flush_and_rewind_unlocked(self);
-        if (res == NULL)
-            goto end;
-        Py_CLEAR(res);
+    res = buffered_flush_and_rewind_unlocked(self);
+    if (res == NULL) {
+        goto end;
     }
-    res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_truncate, pos, NULL);
+    Py_CLEAR(res);
+
+    res = PyObject_CallMethodOneArg(self->raw, _PyIO_str_truncate, pos);
     if (res == NULL)
         goto end;
     /* Reset cached position */
@@ -1351,8 +1352,8 @@
         line = _buffered_readline(self, -1);
     }
     else {
-        line = PyObject_CallMethodObjArgs((PyObject *)self,
-                                           _PyIO_str_readline, NULL);
+        line = PyObject_CallMethodNoArgs((PyObject *)self,
+                                             _PyIO_str_readline);
         if (line && !PyBytes_Check(line)) {
             PyErr_Format(PyExc_OSError,
                          "readline() should have returned a bytes object, "
@@ -1445,8 +1446,8 @@
         return -1;
     _bufferedreader_reset_buf(self);
 
-    self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedReader_Type &&
-                                Py_TYPE(raw) == &PyFileIO_Type);
+    self->fast_closed_checks = (Py_IS_TYPE(self, &PyBufferedReader_Type) &&
+                                Py_IS_TYPE(raw, &PyFileIO_Type));
 
     self->ok = 1;
     return 0;
@@ -1470,7 +1471,7 @@
        raised (see issue #10956).
     */
     do {
-        res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_readinto, memobj, NULL);
+        res = PyObject_CallMethodOneArg(self->raw, _PyIO_str_readinto, memobj);
     } while (res == NULL && _PyIO_trap_eintr());
     Py_DECREF(memobj);
     if (res == NULL)
@@ -1569,7 +1570,7 @@
         }
 
         /* Read until EOF or until read() would block. */
-        data = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_read, NULL);
+        data = PyObject_CallMethodNoArgs(self->raw, _PyIO_str_read);
         if (data == NULL)
             goto cleanup;
         if (data != Py_None && !PyBytes_Check(data)) {
@@ -1791,8 +1792,8 @@
     _bufferedwriter_reset_buf(self);
     self->pos = 0;
 
-    self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedWriter_Type &&
-                                Py_TYPE(raw) == &PyFileIO_Type);
+    self->fast_closed_checks = (Py_IS_TYPE(self, &PyBufferedWriter_Type) &&
+                                Py_IS_TYPE(raw, &PyFileIO_Type));
 
     self->ok = 1;
     return 0;
@@ -1818,7 +1819,7 @@
     */
     do {
         errno = 0;
-        res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_write, memobj, NULL);
+        res = PyObject_CallMethodOneArg(self->raw, _PyIO_str_write, memobj);
         errnum = errno;
     } while (res == NULL && _PyIO_trap_eintr());
     Py_DECREF(memobj);
@@ -2305,8 +2306,8 @@
     _bufferedwriter_reset_buf(self);
     self->pos = 0;
 
-    self->fast_closed_checks = (Py_TYPE(self) == &PyBufferedRandom_Type &&
-                                Py_TYPE(raw) == &PyFileIO_Type);
+    self->fast_closed_checks = (Py_IS_TYPE(self, &PyBufferedRandom_Type) &&
+                                Py_IS_TYPE(raw, &PyFileIO_Type));
 
     self->ok = 1;
     return 0;
diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c
index 3cf6402..2468f45 100644
--- a/Modules/_io/bytesio.c
+++ b/Modules/_io/bytesio.c
@@ -1,6 +1,6 @@
 #include "Python.h"
 #include "pycore_object.h"
-#include "structmember.h"       /* for offsetof() */
+#include <stddef.h>               // offsetof()
 #include "_iomodule.h"
 
 /*[clinic input]
@@ -31,17 +31,34 @@
   * exports > 0.  Py_REFCNT(buf) == 1, any modifications are forbidden.
 */
 
+static int
+check_closed(bytesio *self)
+{
+    if (self->buf == NULL) {
+        PyErr_SetString(PyExc_ValueError, "I/O operation on closed file.");
+        return 1;
+    }
+    return 0;
+}
+
+static int
+check_exports(bytesio *self)
+{
+    if (self->exports > 0) {
+        PyErr_SetString(PyExc_BufferError,
+                        "Existing exports of data: object cannot be re-sized");
+        return 1;
+    }
+    return 0;
+}
+
 #define CHECK_CLOSED(self)                                  \
-    if ((self)->buf == NULL) {                              \
-        PyErr_SetString(PyExc_ValueError,                   \
-                        "I/O operation on closed file.");   \
+    if (check_closed(self)) {                               \
         return NULL;                                        \
     }
 
 #define CHECK_EXPORTS(self) \
-    if ((self)->exports > 0) { \
-        PyErr_SetString(PyExc_BufferError, \
-                        "Existing exports of data: object cannot be re-sized"); \
+    if (check_exports(self)) { \
         return NULL; \
     }
 
@@ -156,23 +173,41 @@
 }
 
 /* Internal routine for writing a string of bytes to the buffer of a BytesIO
-   object. Returns the number of bytes written, or -1 on error. */
-static Py_ssize_t
-write_bytes(bytesio *self, const char *bytes, Py_ssize_t len)
+   object. Returns the number of bytes written, or -1 on error.
+   Inlining is disabled because it's significantly decreases performance
+   of writelines() in PGO build. */
+_Py_NO_INLINE static Py_ssize_t
+write_bytes(bytesio *self, PyObject *b)
 {
-    size_t endpos;
-    assert(self->buf != NULL);
-    assert(self->pos >= 0);
-    assert(len >= 0);
+    if (check_closed(self)) {
+        return -1;
+    }
+    if (check_exports(self)) {
+        return -1;
+    }
 
-    endpos = (size_t)self->pos + len;
+    Py_buffer buf;
+    if (PyObject_GetBuffer(b, &buf, PyBUF_CONTIG_RO) < 0) {
+        return -1;
+    }
+    Py_ssize_t len = buf.len;
+    if (len == 0) {
+        goto done;
+    }
+
+    assert(self->pos >= 0);
+    size_t endpos = (size_t)self->pos + len;
     if (endpos > (size_t)PyBytes_GET_SIZE(self->buf)) {
-        if (resize_buffer(self, endpos) < 0)
-            return -1;
+        if (resize_buffer(self, endpos) < 0) {
+            len = -1;
+            goto done;
+        }
     }
     else if (SHARED_BUF(self)) {
-        if (unshare_buffer(self, Py_MAX(endpos, (size_t)self->string_size)) < 0)
-            return -1;
+        if (unshare_buffer(self, Py_MAX(endpos, (size_t)self->string_size)) < 0) {
+            len = -1;
+            goto done;
+        }
     }
 
     if (self->pos > self->string_size) {
@@ -190,7 +225,7 @@
 
     /* Copy the data to the internal buffer, overwriting some of the existing
        data if self->pos < self->string_size. */
-    memcpy(PyBytes_AS_STRING(self->buf) + self->pos, bytes, len);
+    memcpy(PyBytes_AS_STRING(self->buf) + self->pos, buf.buf, len);
     self->pos = endpos;
 
     /* Set the new length of the internal string if it has changed. */
@@ -198,6 +233,8 @@
         self->string_size = endpos;
     }
 
+  done:
+    PyBuffer_Release(&buf);
     return len;
 }
 
@@ -356,7 +393,7 @@
 static PyObject *
 read_bytes(bytesio *self, Py_ssize_t size)
 {
-    char *output;
+    const char *output;
 
     assert(self->buf != NULL);
     assert(size <= self->string_size);
@@ -465,7 +502,7 @@
 {
     Py_ssize_t maxsize, size, n;
     PyObject *result, *line;
-    char *output;
+    const char *output;
 
     CHECK_CLOSED(self);
 
@@ -669,19 +706,7 @@
 _io_BytesIO_write(bytesio *self, PyObject *b)
 /*[clinic end generated code: output=53316d99800a0b95 input=f5ec7c8c64ed720a]*/
 {
-    Py_ssize_t n = 0;
-    Py_buffer buf;
-
-    CHECK_CLOSED(self);
-    CHECK_EXPORTS(self);
-
-    if (PyObject_GetBuffer(b, &buf, PyBUF_CONTIG_RO) < 0)
-        return NULL;
-
-    if (buf.len != 0)
-        n = write_bytes(self, buf.buf, buf.len);
-
-    PyBuffer_Release(&buf);
+    Py_ssize_t n = write_bytes(self, b);
     return n >= 0 ? PyLong_FromSsize_t(n) : NULL;
 }
 
@@ -702,7 +727,6 @@
 /*[clinic end generated code: output=7f33aa3271c91752 input=e972539176fc8fc1]*/
 {
     PyObject *it, *item;
-    PyObject *ret;
 
     CHECK_CLOSED(self);
 
@@ -711,13 +735,12 @@
         return NULL;
 
     while ((item = PyIter_Next(it)) != NULL) {
-        ret = _io_BytesIO_write(self, item);
+        Py_ssize_t ret = write_bytes(self, item);
         Py_DECREF(item);
-        if (ret == NULL) {
+        if (ret < 0) {
             Py_DECREF(it);
             return NULL;
         }
-        Py_DECREF(ret);
     }
     Py_DECREF(it);
 
@@ -1101,7 +1124,7 @@
     (releasebufferproc) bytesiobuf_releasebuffer,
 };
 
-PyTypeObject _PyBytesIOBuffer_Type = {
+Py_EXPORTED_SYMBOL PyTypeObject _PyBytesIOBuffer_Type = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "_io._BytesIOBuffer",                      /*tp_name*/
     sizeof(bytesiobuf),                        /*tp_basicsize*/
diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h
index 72841fc..56d6332 100644
--- a/Modules/_io/clinic/bufferedio.c.h
+++ b/Modules/_io/clinic/bufferedio.c.h
@@ -578,7 +578,7 @@
     PyObject *writer;
     Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
 
-    if ((Py_TYPE(self) == &PyBufferedRWPair_Type) &&
+    if (Py_IS_TYPE(self, &PyBufferedRWPair_Type) &&
         !_PyArg_NoKeywords("BufferedRWPair", kwargs)) {
         goto exit;
     }
@@ -672,4 +672,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=7246104f6c7d3167 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=7d9ad40c95bdd808 input=a9049054013a1b77]*/
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index 482d08f..caf91df 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -3,7 +3,7 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "pycore_object.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include <stdbool.h>
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -146,8 +146,8 @@
     PyObject *exc, *val, *tb;
     int rc;
     _Py_IDENTIFIER(close);
-    res = _PyObject_CallMethodIdObjArgs((PyObject*)&PyRawIOBase_Type,
-                                        &PyId_close, self, NULL);
+    res = _PyObject_CallMethodIdOneArg((PyObject*)&PyRawIOBase_Type,
+                                       &PyId_close, (PyObject *)self);
     if (!self->closefd) {
         self->fd = -1;
         return res;
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index fab4509..a8e55c3 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -11,7 +11,7 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "pycore_object.h"
-#include "structmember.h"
+#include <stddef.h>               // offsetof()
 #include "_iomodule.h"
 
 /*[clinic input]
@@ -235,7 +235,7 @@
         Py_RETURN_NONE;
     }
 
-    res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL);
+    res = PyObject_CallMethodNoArgs(self, _PyIO_str_flush);
 
     PyErr_Fetch(&exc, &val, &tb);
     rc = _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True);
@@ -281,15 +281,13 @@
            finalization process. */
         if (_PyObject_SetAttrId(self, &PyId__finalizing, Py_True))
             PyErr_Clear();
-        res = PyObject_CallMethodObjArgs((PyObject *) self, _PyIO_str_close,
-                                          NULL);
+        res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_close);
         /* Silencing I/O errors is bad, but printing spurious tracebacks is
            equally as bad, and potentially more frequent (because of
            shutdown issues). */
         if (res == NULL) {
 #ifndef Py_DEBUG
-            const PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
-            if (config->dev_mode) {
+            if (_Py_GetConfig()->dev_mode) {
                 PyErr_WriteUnraisable(self);
             }
             else {
@@ -383,7 +381,7 @@
 PyObject *
 _PyIOBase_check_seekable(PyObject *self, PyObject *args)
 {
-    PyObject *res  = PyObject_CallMethodObjArgs(self, _PyIO_str_seekable, NULL);
+    PyObject *res  = PyObject_CallMethodNoArgs(self, _PyIO_str_seekable);
     if (res == NULL)
         return NULL;
     if (res != Py_True) {
@@ -416,7 +414,7 @@
 PyObject *
 _PyIOBase_check_readable(PyObject *self, PyObject *args)
 {
-    PyObject *res  = PyObject_CallMethodObjArgs(self, _PyIO_str_readable, NULL);
+    PyObject *res = PyObject_CallMethodNoArgs(self, _PyIO_str_readable);
     if (res == NULL)
         return NULL;
     if (res != Py_True) {
@@ -449,7 +447,7 @@
 PyObject *
 _PyIOBase_check_writable(PyObject *self, PyObject *args)
 {
-    PyObject *res  = PyObject_CallMethodObjArgs(self, _PyIO_str_writable, NULL);
+    PyObject *res = PyObject_CallMethodNoArgs(self, _PyIO_str_writable);
     if (res == NULL)
         return NULL;
     if (res != Py_True) {
@@ -478,7 +476,7 @@
 static PyObject *
 iobase_exit(PyObject *self, PyObject *args)
 {
-    return PyObject_CallMethodObjArgs(self, _PyIO_str_close, NULL);
+    return PyObject_CallMethodNoArgs(self, _PyIO_str_close);
 }
 
 /* Lower-level APIs */
@@ -557,7 +555,7 @@
         PyObject *b;
 
         if (peek != NULL) {
-            PyObject *readahead = PyObject_CallFunctionObjArgs(peek, _PyLong_One, NULL);
+            PyObject *readahead = PyObject_CallOneArg(peek, _PyLong_One);
             if (readahead == NULL) {
                 /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
                    when EINTR occurs so we needn't do it ourselves. */
@@ -656,7 +654,7 @@
 static PyObject *
 iobase_iternext(PyObject *self)
 {
-    PyObject *line = PyObject_CallMethodObjArgs(self, _PyIO_str_readline, NULL);
+    PyObject *line = PyObject_CallMethodNoArgs(self, _PyIO_str_readline);
 
     if (line == NULL)
         return NULL;
@@ -921,7 +919,7 @@
     if (n < 0) {
         _Py_IDENTIFIER(readall);
 
-        return _PyObject_CallMethodId(self, &PyId_readall, NULL);
+        return _PyObject_CallMethodIdNoArgs(self, &PyId_readall);
     }
 
     /* TODO: allocate a bytes object directly instead and manually construct
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
index 8b5fa7a..e76152e 100644
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -1,6 +1,6 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "structmember.h"
+#include <stddef.h>               // offsetof()
 #include "pycore_accu.h"
 #include "pycore_object.h"
 #include "_iomodule.h"
@@ -402,14 +402,14 @@
     CHECK_CLOSED(self);
     ENSURE_REALIZED(self);
 
-    if (Py_TYPE(self) == &PyStringIO_Type) {
+    if (Py_IS_TYPE(self, &PyStringIO_Type)) {
         /* Skip method call overhead for speed */
         line = _stringio_readline(self, -1);
     }
     else {
         /* XXX is subclassing StringIO really supported? */
-        line = PyObject_CallMethodObjArgs((PyObject *)self,
-                                           _PyIO_str_readline, NULL);
+        line = PyObject_CallMethodNoArgs((PyObject *)self,
+                                             _PyIO_str_readline);
         if (line && !PyUnicode_Check(line)) {
             PyErr_Format(PyExc_OSError,
                          "readline() should have returned a str object, "
@@ -714,9 +714,9 @@
     }
 
     if (self->readuniversal) {
-        self->decoder = PyObject_CallFunction(
+        self->decoder = PyObject_CallFunctionObjArgs(
             (PyObject *)&PyIncrementalNewlineDecoder_Type,
-            "Oi", Py_None, (int) self->readtranslate);
+            Py_None, self->readtranslate ? Py_True : Py_False, NULL);
         if (self->decoder == NULL)
             return -1;
     }
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index a4bf7cd..f2c72eb 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -8,8 +8,10 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
+#include "pycore_interp.h"        // PyInterpreterState.fs_codec
 #include "pycore_object.h"
-#include "structmember.h"
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "structmember.h"         // PyMemberDef
 #include "_iomodule.h"
 
 /*[clinic input]
@@ -340,7 +342,7 @@
             goto error;
         kind = PyUnicode_KIND(modified);
         out = PyUnicode_DATA(modified);
-        PyUnicode_WRITE(kind, PyUnicode_DATA(modified), 0, '\r');
+        PyUnicode_WRITE(kind, out, 0, '\r');
         memcpy(out + kind, PyUnicode_DATA(output), kind * output_len);
         Py_DECREF(output);
         output = modified; /* output remains ready */
@@ -367,7 +369,7 @@
     /* Record which newlines are read and do newline translation if desired,
        all in one pass. */
     {
-        void *in_str;
+        const void *in_str;
         Py_ssize_t len;
         int seennl = self->seennl;
         int only_lf = 0;
@@ -447,7 +449,7 @@
         else {
             void *translated;
             int kind = PyUnicode_KIND(output);
-            void *in_str = PyUnicode_DATA(output);
+            const void *in_str = PyUnicode_DATA(output);
             Py_ssize_t in, out;
             /* XXX: Previous in-place translation here is disabled as
                resizing is not possible anymore */
@@ -527,8 +529,8 @@
     unsigned long long flag;
 
     if (self->decoder != Py_None) {
-        PyObject *state = PyObject_CallMethodObjArgs(self->decoder,
-           _PyIO_str_getstate, NULL);
+        PyObject *state = PyObject_CallMethodNoArgs(self->decoder,
+           _PyIO_str_getstate);
         if (state == NULL)
             return NULL;
         if (!PyTuple_Check(state)) {
@@ -601,7 +603,7 @@
     self->seennl = 0;
     self->pendingcr = 0;
     if (self->decoder != Py_None)
-        return PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_reset, NULL);
+        return PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset);
     else
         Py_RETURN_NONE;
 }
@@ -862,7 +864,7 @@
     PyObject *res;
     int r;
 
-    res = _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL);
+    res = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_readable);
     if (res == NULL)
         return -1;
 
@@ -880,9 +882,9 @@
         return -1;
 
     if (self->readuniversal) {
-        PyObject *incrementalDecoder = PyObject_CallFunction(
+        PyObject *incrementalDecoder = PyObject_CallFunctionObjArgs(
             (PyObject *)&PyIncrementalNewlineDecoder_Type,
-            "Oi", self->decoder, (int)self->readtranslate);
+            self->decoder, self->readtranslate ? Py_True : Py_False, NULL);
         if (incrementalDecoder == NULL)
             return -1;
         Py_CLEAR(self->decoder);
@@ -897,7 +899,7 @@
 {
     PyObject *chars;
 
-    if (Py_TYPE(decoder) == &PyIncrementalNewlineDecoder_Type)
+    if (Py_IS_TYPE(decoder, &PyIncrementalNewlineDecoder_Type))
         chars = _PyIncrementalNewlineDecoder_decode(decoder, bytes, eof);
     else
         chars = PyObject_CallMethodObjArgs(decoder, _PyIO_str_decode, bytes,
@@ -917,7 +919,7 @@
     PyObject *res;
     int r;
 
-    res = _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL);
+    res = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_writable);
     if (res == NULL)
         return -1;
 
@@ -963,8 +965,8 @@
 
     self->encoding_start_of_stream = 1;
 
-    PyObject *cookieObj = PyObject_CallMethodObjArgs(
-        self->buffer, _PyIO_str_tell, NULL);
+    PyObject *cookieObj = PyObject_CallMethodNoArgs(
+        self->buffer, _PyIO_str_tell);
     if (cookieObj == NULL) {
         return -1;
     }
@@ -977,8 +979,8 @@
 
     if (cmp == 0) {
         self->encoding_start_of_stream = 0;
-        PyObject *res = PyObject_CallMethodObjArgs(
-            self->encoder, _PyIO_str_setstate, _PyLong_Zero, NULL);
+        PyObject *res = PyObject_CallMethodOneArg(
+            self->encoder, _PyIO_str_setstate, _PyLong_Zero);
         if (res == NULL) {
             return -1;
         }
@@ -988,6 +990,46 @@
     return 0;
 }
 
+static int
+io_check_errors(PyObject *errors)
+{
+    assert(errors != NULL && errors != Py_None);
+
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+#ifndef Py_DEBUG
+    /* In release mode, only check in development mode (-X dev) */
+    if (!_PyInterpreterState_GetConfig(interp)->dev_mode) {
+        return 0;
+    }
+#else
+    /* Always check in debug mode */
+#endif
+
+    /* Avoid calling PyCodec_LookupError() before the codec registry is ready:
+       before_PyUnicode_InitEncodings() is called. */
+    if (!interp->unicode.fs_codec.encoding) {
+        return 0;
+    }
+
+    Py_ssize_t name_length;
+    const char *name = PyUnicode_AsUTF8AndSize(errors, &name_length);
+    if (name == NULL) {
+        return -1;
+    }
+    if (strlen(name) != (size_t)name_length) {
+        PyErr_SetString(PyExc_ValueError, "embedded null character in errors");
+        return -1;
+    }
+    PyObject *handler = PyCodec_LookupError(name);
+    if (handler != NULL) {
+        Py_DECREF(handler);
+        return 0;
+    }
+    return -1;
+}
+
+
+
 /*[clinic input]
 _io.TextIOWrapper.__init__
     buffer: object
@@ -1054,7 +1096,10 @@
         PyErr_Format(
             PyExc_TypeError,
             "TextIOWrapper() argument 'errors' must be str or None, not %.50s",
-            errors->ob_type->tp_name);
+            Py_TYPE(errors)->tp_name);
+        return -1;
+    }
+    else if (io_check_errors(errors)) {
         return -1;
     }
 
@@ -1083,7 +1128,7 @@
         state = IO_STATE();
         if (state == NULL)
             goto error;
-        fileno = _PyObject_CallMethodId(buffer, &PyId_fileno, NULL);
+        fileno = _PyObject_CallMethodIdNoArgs(buffer, &PyId_fileno);
         /* Ignore only AttributeError and UnsupportedOperation */
         if (fileno == NULL) {
             if (PyErr_ExceptionMatches(PyExc_AttributeError) ||
@@ -1112,8 +1157,8 @@
         PyObject *locale_module = _PyIO_get_locale_module(state);
         if (locale_module == NULL)
             goto catch_ImportError;
-        self->encoding = _PyObject_CallMethodIdObjArgs(
-            locale_module, &PyId_getpreferredencoding, Py_False, NULL);
+        self->encoding = _PyObject_CallMethodIdOneArg(
+            locale_module, &PyId_getpreferredencoding, Py_False);
         Py_DECREF(locale_module);
         if (self->encoding == NULL) {
           catch_ImportError:
@@ -1183,22 +1228,22 @@
     /* Finished sorting out the codec details */
     Py_CLEAR(codec_info);
 
-    if (Py_TYPE(buffer) == &PyBufferedReader_Type ||
-        Py_TYPE(buffer) == &PyBufferedWriter_Type ||
-        Py_TYPE(buffer) == &PyBufferedRandom_Type)
+    if (Py_IS_TYPE(buffer, &PyBufferedReader_Type) ||
+        Py_IS_TYPE(buffer, &PyBufferedWriter_Type) ||
+        Py_IS_TYPE(buffer, &PyBufferedRandom_Type))
     {
         if (_PyObject_LookupAttrId(buffer, &PyId_raw, &raw) < 0)
             goto error;
         /* Cache the raw FileIO object to speed up 'closed' checks */
         if (raw != NULL) {
-            if (Py_TYPE(raw) == &PyFileIO_Type)
+            if (Py_IS_TYPE(raw, &PyFileIO_Type))
                 self->raw = raw;
             else
                 Py_DECREF(raw);
         }
     }
 
-    res = _PyObject_CallMethodId(buffer, &PyId_seekable, NULL);
+    res = _PyObject_CallMethodIdNoArgs(buffer, &PyId_seekable);
     if (res == NULL)
         goto error;
     r = PyObject_IsTrue(res);
@@ -1343,7 +1388,7 @@
         return NULL;
     }
 
-    PyObject *res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
+    PyObject *res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
     if (res == NULL) {
         return NULL;
     }
@@ -1423,7 +1468,7 @@
     do { \
         int r; \
         PyObject *_res; \
-        if (Py_TYPE(self) == &PyTextIOWrapper_Type) { \
+        if (Py_IS_TYPE(self, &PyTextIOWrapper_Type)) { \
             if (self->raw != NULL) \
                 r = _PyFileIO_closed(self->raw); \
             else { \
@@ -1482,7 +1527,7 @@
 {
     PyObject *buffer, *res;
     CHECK_ATTACHED(self);
-    res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
+    res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
     if (res == NULL)
         return NULL;
     Py_DECREF(res);
@@ -1554,8 +1599,7 @@
 
     PyObject *ret;
     do {
-        ret = PyObject_CallMethodObjArgs(self->buffer,
-                                         _PyIO_str_write, b, NULL);
+        ret = PyObject_CallMethodOneArg(self->buffer, _PyIO_str_write, b);
     } while (ret == NULL && _PyIO_trap_eintr());
     Py_DECREF(b);
     if (ret == NULL)
@@ -1625,8 +1669,7 @@
         self->encoding_start_of_stream = 0;
     }
     else
-        b = PyObject_CallMethodObjArgs(self->encoder,
-                                       _PyIO_str_encode, text, NULL);
+        b = PyObject_CallMethodOneArg(self->encoder, _PyIO_str_encode, text);
 
     Py_DECREF(text);
     if (b == NULL)
@@ -1677,7 +1720,7 @@
     }
 
     if (needflush) {
-        ret = PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_flush, NULL);
+        ret = PyObject_CallMethodNoArgs(self->buffer, _PyIO_str_flush);
         if (ret == NULL)
             return NULL;
         Py_DECREF(ret);
@@ -1687,7 +1730,7 @@
     Py_CLEAR(self->snapshot);
 
     if (self->decoder) {
-        ret = _PyObject_CallMethodId(self->decoder, &PyId_reset, NULL);
+        ret = _PyObject_CallMethodIdNoArgs(self->decoder, &PyId_reset);
         if (ret == NULL)
             return NULL;
         Py_DECREF(ret);
@@ -1767,9 +1810,8 @@
         /* To prepare for tell(), we need to snapshot a point in the file
          * where the decoder's input buffer is empty.
          */
-
-        PyObject *state = PyObject_CallMethodObjArgs(self->decoder,
-                                                     _PyIO_str_getstate, NULL);
+        PyObject *state = PyObject_CallMethodNoArgs(self->decoder,
+                                                     _PyIO_str_getstate);
         if (state == NULL)
             return -1;
         /* Given this, we know there was a valid snapshot point
@@ -1809,9 +1851,9 @@
     if (chunk_size == NULL)
         goto fail;
 
-    input_chunk = PyObject_CallMethodObjArgs(self->buffer,
+    input_chunk = PyObject_CallMethodOneArg(self->buffer,
         (self->has_read1 ? _PyIO_str_read1: _PyIO_str_read),
-        chunk_size, NULL);
+        chunk_size);
     Py_DECREF(chunk_size);
     if (input_chunk == NULL)
         goto fail;
@@ -1892,12 +1934,12 @@
 
     if (n < 0) {
         /* Read everything */
-        PyObject *bytes = _PyObject_CallMethodId(self->buffer, &PyId_read, NULL);
+        PyObject *bytes = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_read);
         PyObject *decoded;
         if (bytes == NULL)
             goto fail;
 
-        if (Py_TYPE(self->decoder) == &PyIncrementalNewlineDecoder_Type)
+        if (Py_IS_TYPE(self->decoder, &PyIncrementalNewlineDecoder_Type))
             decoded = _PyIncrementalNewlineDecoder_decode(self->decoder,
                                                           bytes, 1);
         else
@@ -2045,7 +2087,7 @@
     else {
         /* Non-universal mode. */
         Py_ssize_t readnl_len = PyUnicode_GET_LENGTH(readnl);
-        Py_UCS1 *nl = PyUnicode_1BYTE_DATA(readnl);
+        const Py_UCS1 *nl = PyUnicode_1BYTE_DATA(readnl);
         /* Assume that readnl is an ASCII character. */
         assert(PyUnicode_KIND(readnl) == PyUnicode_1BYTE_KIND);
         if (readnl_len == 1) {
@@ -2099,7 +2141,7 @@
     chunked = 0;
 
     while (1) {
-        char *ptr;
+        const char *ptr;
         Py_ssize_t line_len;
         int kind;
         Py_ssize_t consumed = 0;
@@ -2353,7 +2395,7 @@
        utf-16, that we are expecting a BOM).
     */
     if (cookie->start_pos == 0 && cookie->dec_flags == 0)
-        res = PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_reset, NULL);
+        res = PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset);
     else
         res = _PyObject_CallMethodId(self->decoder, &PyId_setstate,
                                      "((yi))", "", cookie->dec_flags);
@@ -2368,12 +2410,12 @@
 {
     PyObject *res;
     if (start_of_stream) {
-        res = PyObject_CallMethodObjArgs(self->encoder, _PyIO_str_reset, NULL);
+        res = PyObject_CallMethodNoArgs(self->encoder, _PyIO_str_reset);
         self->encoding_start_of_stream = 1;
     }
     else {
-        res = PyObject_CallMethodObjArgs(self->encoder, _PyIO_str_setstate,
-                                         _PyLong_Zero, NULL);
+        res = PyObject_CallMethodOneArg(self->encoder, _PyIO_str_setstate,
+                                        _PyLong_Zero);
         self->encoding_start_of_stream = 0;
     }
     if (res == NULL)
@@ -2433,7 +2475,7 @@
          * sync the underlying buffer with the current position.
          */
         Py_DECREF(cookieObj);
-        cookieObj = _PyObject_CallMethodId((PyObject *)self, &PyId_tell, NULL);
+        cookieObj = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_tell);
         if (cookieObj == NULL)
             goto fail;
         break;
@@ -2449,7 +2491,7 @@
             goto fail;
         }
 
-        res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL);
+        res = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_flush);
         if (res == NULL)
             goto fail;
         Py_DECREF(res);
@@ -2457,7 +2499,7 @@
         textiowrapper_set_decoded_chars(self, NULL);
         Py_CLEAR(self->snapshot);
         if (self->decoder) {
-            res = _PyObject_CallMethodId(self->decoder, &PyId_reset, NULL);
+            res = _PyObject_CallMethodIdNoArgs(self->decoder, &PyId_reset);
             if (res == NULL)
                 goto fail;
             Py_DECREF(res);
@@ -2497,7 +2539,7 @@
         goto fail;
     }
 
-    res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
+    res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
     if (res == NULL)
         goto fail;
     Py_DECREF(res);
@@ -2512,8 +2554,7 @@
     posobj = PyLong_FromOff_t(cookie.start_pos);
     if (posobj == NULL)
         goto fail;
-    res = PyObject_CallMethodObjArgs(self->buffer,
-                                     _PyIO_str_seek, posobj, NULL);
+    res = PyObject_CallMethodOneArg(self->buffer, _PyIO_str_seek, posobj);
     Py_DECREF(posobj);
     if (res == NULL)
         goto fail;
@@ -2552,8 +2593,8 @@
         }
         Py_XSETREF(self->snapshot, snapshot);
 
-        decoded = _PyObject_CallMethodId(self->decoder, &PyId_decode,
-            "Oi", input_chunk, (int)cookie.need_eof);
+        decoded = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_decode,
+            input_chunk, cookie.need_eof ? Py_True : Py_False, NULL);
 
         if (check_decoded(decoded) < 0)
             goto fail;
@@ -2601,7 +2642,7 @@
     Py_ssize_t chars_to_skip, chars_decoded;
     Py_ssize_t skip_bytes, skip_back;
     PyObject *saved_state = NULL;
-    char *input, *input_end;
+    const char *input, *input_end;
     Py_ssize_t dec_buffer_len;
     int dec_flags;
 
@@ -2620,12 +2661,12 @@
 
     if (_textiowrapper_writeflush(self) < 0)
         return NULL;
-    res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL);
+    res = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_flush);
     if (res == NULL)
         goto fail;
     Py_DECREF(res);
 
-    posobj = _PyObject_CallMethodId(self->buffer, &PyId_tell, NULL);
+    posobj = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_tell);
     if (posobj == NULL)
         goto fail;
 
@@ -2661,15 +2702,15 @@
     chars_to_skip = self->decoded_chars_used;
 
     /* Decoder state will be restored at the end */
-    saved_state = PyObject_CallMethodObjArgs(self->decoder,
-                                             _PyIO_str_getstate, NULL);
+    saved_state = PyObject_CallMethodNoArgs(self->decoder,
+                                             _PyIO_str_getstate);
     if (saved_state == NULL)
         goto fail;
 
 #define DECODER_GETSTATE() do { \
         PyObject *dec_buffer; \
-        PyObject *_state = PyObject_CallMethodObjArgs(self->decoder, \
-            _PyIO_str_getstate, NULL); \
+        PyObject *_state = PyObject_CallMethodNoArgs(self->decoder, \
+            _PyIO_str_getstate); \
         if (_state == NULL) \
             goto fail; \
         if (!PyTuple_Check(_state)) { \
@@ -2780,7 +2821,7 @@
     if (input == input_end) {
         /* We didn't get enough decoded data; signal EOF to get more. */
         PyObject *decoded = _PyObject_CallMethodId(
-            self->decoder, &PyId_decode, "yi", "", /* final = */ 1);
+            self->decoder, &PyId_decode, "yO", "", /* final = */ Py_True);
         if (check_decoded(decoded) < 0)
             goto fail;
         chars_decoded += PyUnicode_GET_LENGTH(decoded);
@@ -2795,7 +2836,7 @@
     }
 
 finally:
-    res = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_setstate, saved_state, NULL);
+    res = _PyObject_CallMethodIdOneArg(self->decoder, &PyId_setstate, saved_state);
     Py_DECREF(saved_state);
     if (res == NULL)
         return NULL;
@@ -2809,7 +2850,7 @@
     if (saved_state) {
         PyObject *type, *value, *traceback;
         PyErr_Fetch(&type, &value, &traceback);
-        res = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_setstate, saved_state, NULL);
+        res = _PyObject_CallMethodIdOneArg(self->decoder, &PyId_setstate, saved_state);
         _PyErr_ChainExceptions(type, value, traceback);
         Py_DECREF(saved_state);
         Py_XDECREF(res);
@@ -2831,12 +2872,12 @@
 
     CHECK_ATTACHED(self)
 
-    res = PyObject_CallMethodObjArgs((PyObject *) self, _PyIO_str_flush, NULL);
+    res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
     if (res == NULL)
         return NULL;
     Py_DECREF(res);
 
-    return PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_truncate, pos, NULL);
+    return PyObject_CallMethodOneArg(self->buffer, _PyIO_str_truncate, pos);
 }
 
 static PyObject *
@@ -2916,7 +2957,7 @@
 /*[clinic end generated code: output=21490a4c3da13e6c input=c488ca83d0069f9b]*/
 {
     CHECK_ATTACHED(self);
-    return _PyObject_CallMethodId(self->buffer, &PyId_fileno, NULL);
+    return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_fileno);
 }
 
 /*[clinic input]
@@ -2928,7 +2969,7 @@
 /*[clinic end generated code: output=ab223dbbcffc0f00 input=8b005ca06e1fca13]*/
 {
     CHECK_ATTACHED(self);
-    return _PyObject_CallMethodId(self->buffer, &PyId_seekable, NULL);
+    return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_seekable);
 }
 
 /*[clinic input]
@@ -2940,7 +2981,7 @@
 /*[clinic end generated code: output=72ff7ba289a8a91b input=0704ea7e01b0d3eb]*/
 {
     CHECK_ATTACHED(self);
-    return _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL);
+    return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_readable);
 }
 
 /*[clinic input]
@@ -2952,7 +2993,7 @@
 /*[clinic end generated code: output=a728c71790d03200 input=c41740bc9d8636e8]*/
 {
     CHECK_ATTACHED(self);
-    return _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL);
+    return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_writable);
 }
 
 /*[clinic input]
@@ -2964,7 +3005,7 @@
 /*[clinic end generated code: output=12be1a35bace882e input=fb68d9f2c99bbfff]*/
 {
     CHECK_ATTACHED(self);
-    return _PyObject_CallMethodId(self->buffer, &PyId_isatty, NULL);
+    return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_isatty);
 }
 
 /*[clinic input]
@@ -2980,7 +3021,7 @@
     self->telling = self->seekable;
     if (_textiowrapper_writeflush(self) < 0)
         return NULL;
-    return _PyObject_CallMethodId(self->buffer, &PyId_flush, NULL);
+    return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_flush);
 }
 
 /*[clinic input]
@@ -3009,21 +3050,21 @@
     else {
         PyObject *exc = NULL, *val, *tb;
         if (self->finalizing) {
-            res = _PyObject_CallMethodIdObjArgs(self->buffer,
-                                                &PyId__dealloc_warn,
-                                                self, NULL);
+            res = _PyObject_CallMethodIdOneArg(self->buffer,
+                                              &PyId__dealloc_warn,
+                                              (PyObject *)self);
             if (res)
                 Py_DECREF(res);
             else
                 PyErr_Clear();
         }
-        res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL);
+        res = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_flush);
         if (res == NULL)
             PyErr_Fetch(&exc, &val, &tb);
         else
             Py_DECREF(res);
 
-        res = _PyObject_CallMethodId(self->buffer, &PyId_close, NULL);
+        res = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_close);
         if (exc != NULL) {
             _PyErr_ChainExceptions(exc, val, tb);
             Py_CLEAR(res);
@@ -3040,13 +3081,13 @@
     CHECK_ATTACHED(self);
 
     self->telling = 0;
-    if (Py_TYPE(self) == &PyTextIOWrapper_Type) {
+    if (Py_IS_TYPE(self, &PyTextIOWrapper_Type)) {
         /* Skip method call overhead for speed */
         line = _textiowrapper_readline(self, -1);
     }
     else {
-        line = PyObject_CallMethodObjArgs((PyObject *)self,
-                                           _PyIO_str_readline, NULL);
+        line = PyObject_CallMethodNoArgs((PyObject *)self,
+                                          _PyIO_str_readline);
         if (line && !PyUnicode_Check(line)) {
             PyErr_Format(PyExc_OSError,
                          "readline() should have returned a str object, "
diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c
index ea5d24f..a83ef37 100644
--- a/Modules/_io/winconsoleio.c
+++ b/Modules/_io/winconsoleio.c
@@ -12,7 +12,7 @@
 
 #ifdef MS_WINDOWS
 
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -204,8 +204,8 @@
     PyObject *exc, *val, *tb;
     int rc;
     _Py_IDENTIFIER(close);
-    res = _PyObject_CallMethodIdObjArgs((PyObject*)&PyRawIOBase_Type,
-                                        &PyId_close, self, NULL);
+    res = _PyObject_CallMethodIdOneArg((PyObject*)&PyRawIOBase_Type,
+                                       &PyId_close, (PyObject*)self);
     if (!self->closehandle) {
         self->handle = INVALID_HANDLE_VALUE;
         return res;
diff --git a/Modules/_json.c b/Modules/_json.c
index 048a965..faa3944 100644
--- a/Modules/_json.c
+++ b/Modules/_json.c
@@ -9,22 +9,22 @@
 #endif
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "pycore_accu.h"
 
-#ifdef __GNUC__
-#define UNUSED __attribute__((__unused__))
-#else
-#define UNUSED
-#endif
+typedef struct {
+    PyObject *PyScannerType;
+    PyObject *PyEncoderType;
+} _jsonmodulestate;
 
-#define PyScanner_Check(op) PyObject_TypeCheck(op, &PyScannerType)
-#define PyScanner_CheckExact(op) (Py_TYPE(op) == &PyScannerType)
-#define PyEncoder_Check(op) PyObject_TypeCheck(op, &PyEncoderType)
-#define PyEncoder_CheckExact(op) (Py_TYPE(op) == &PyEncoderType)
+static inline _jsonmodulestate*
+get_json_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_jsonmodulestate *)state;
+}
 
-static PyTypeObject PyScannerType;
-static PyTypeObject PyEncoderType;
 
 typedef struct _PyScannerObject {
     PyObject_HEAD
@@ -73,25 +73,12 @@
     {NULL}
 };
 
-static PyObject *
-join_list_unicode(PyObject *lst)
-{
-    /* return u''.join(lst) */
-    static PyObject *sep = NULL;
-    if (sep == NULL) {
-        sep = PyUnicode_FromStringAndSize("", 0);
-        if (sep == NULL)
-            return NULL;
-    }
-    return PyUnicode_Join(sep, lst);
-}
-
 /* Forward decls */
 
 static PyObject *
 ascii_escape_unicode(PyObject *pystr);
 static PyObject *
-py_encode_basestring_ascii(PyObject* self UNUSED, PyObject *pystr);
+py_encode_basestring_ascii(PyObject* Py_UNUSED(self), PyObject *pystr);
 void init_json(void);
 static PyObject *
 scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *next_idx_ptr);
@@ -102,13 +89,13 @@
 static void
 scanner_dealloc(PyObject *self);
 static int
-scanner_clear(PyObject *self);
+scanner_clear(PyScannerObject *self);
 static PyObject *
 encoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 static void
 encoder_dealloc(PyObject *self);
 static int
-encoder_clear(PyObject *self);
+encoder_clear(PyEncoderObject *self);
 static int
 encoder_listencode_list(PyEncoderObject *s, _PyAccu *acc, PyObject *seq, Py_ssize_t indent_level);
 static int
@@ -172,8 +159,8 @@
     Py_ssize_t output_size;
     Py_ssize_t chars;
     PyObject *rval;
-    void *input;
-    unsigned char *output;
+    const void *input;
+    Py_UCS1 *output;
     int kind;
 
     if (PyUnicode_READY(pystr) == -1)
@@ -238,7 +225,7 @@
     Py_ssize_t output_size;
     Py_ssize_t chars;
     PyObject *rval;
-    void *input;
+    const void *input;
     int kind;
     Py_UCS4 maxchar;
 
@@ -385,21 +372,6 @@
     return tpl;
 }
 
-#define APPEND_OLD_CHUNK \
-    if (chunk != NULL) { \
-        if (chunks == NULL) { \
-            chunks = PyList_New(0); \
-            if (chunks == NULL) { \
-                goto bail; \
-            } \
-        } \
-        if (PyList_Append(chunks, chunk)) { \
-            Py_CLEAR(chunk); \
-            goto bail; \
-        } \
-        Py_CLEAR(chunk); \
-    }
-
 static PyObject *
 scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next_end_ptr)
 {
@@ -417,12 +389,14 @@
     Py_ssize_t next /* = begin */;
     const void *buf;
     int kind;
-    PyObject *chunks = NULL;
-    PyObject *chunk = NULL;
 
     if (PyUnicode_READY(pystr) == -1)
         return 0;
 
+    _PyUnicodeWriter writer;
+    _PyUnicodeWriter_Init(&writer);
+    writer.overallocate = 1;
+
     len = PyUnicode_GET_LENGTH(pystr);
     buf = PyUnicode_DATA(pystr);
     kind = PyUnicode_KIND(pystr);
@@ -433,29 +407,42 @@
     }
     while (1) {
         /* Find the end of the string or the next escape */
-        Py_UCS4 c = 0;
-        for (next = end; next < len; next++) {
-            c = PyUnicode_READ(kind, buf, next);
-            if (c == '"' || c == '\\') {
-                break;
+        Py_UCS4 c;
+        {
+            // Use tight scope variable to help register allocation.
+            Py_UCS4 d = 0;
+            for (next = end; next < len; next++) {
+                d = PyUnicode_READ(kind, buf, next);
+                if (d == '"' || d == '\\') {
+                    break;
+                }
+                if (d <= 0x1f && strict) {
+                    raise_errmsg("Invalid control character at", pystr, next);
+                    goto bail;
+                }
             }
-            else if (c <= 0x1f && strict) {
-                raise_errmsg("Invalid control character at", pystr, next);
-                goto bail;
+            c = d;
+        }
+
+        if (c == '"') {
+            // Fast path for simple case.
+            if (writer.buffer == NULL) {
+                PyObject *ret = PyUnicode_Substring(pystr, end, next);
+                if (ret == NULL) {
+                    goto bail;
+                }
+                *next_end_ptr = next + 1;;
+                return ret;
             }
         }
-        if (!(c == '"' || c == '\\')) {
+        else if (c != '\\') {
             raise_errmsg("Unterminated string starting at", pystr, begin);
             goto bail;
         }
+
         /* Pick up this chunk if it's not zero length */
         if (next != end) {
-            APPEND_OLD_CHUNK
-                chunk = PyUnicode_FromKindAndData(
-                    kind,
-                    (char*)buf + kind * end,
-                    next - end);
-            if (chunk == NULL) {
+            if (_PyUnicodeWriter_WriteSubstring(&writer, pystr, end, next) < 0) {
                 goto bail;
             }
         }
@@ -546,34 +533,18 @@
                     end -= 6;
             }
         }
-        APPEND_OLD_CHUNK
-        chunk = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, &c, 1);
-        if (chunk == NULL) {
+        if (_PyUnicodeWriter_WriteChar(&writer, c) < 0) {
             goto bail;
         }
     }
 
-    if (chunks == NULL) {
-        if (chunk != NULL)
-            rval = chunk;
-        else
-            rval = PyUnicode_FromStringAndSize("", 0);
-    }
-    else {
-        APPEND_OLD_CHUNK
-        rval = join_list_unicode(chunks);
-        if (rval == NULL) {
-            goto bail;
-        }
-        Py_CLEAR(chunks);
-    }
-
+    rval = _PyUnicodeWriter_Finish(&writer);
     *next_end_ptr = end;
     return rval;
+
 bail:
     *next_end_ptr = -1;
-    Py_XDECREF(chunks);
-    Py_XDECREF(chunk);
+    _PyUnicodeWriter_Dealloc(&writer);
     return NULL;
 }
 
@@ -591,7 +562,7 @@
 );
 
 static PyObject *
-py_scanstring(PyObject* self UNUSED, PyObject *args)
+py_scanstring(PyObject* Py_UNUSED(self), PyObject *args)
 {
     PyObject *pystr;
     PyObject *rval;
@@ -620,7 +591,7 @@
 );
 
 static PyObject *
-py_encode_basestring_ascii(PyObject* self UNUSED, PyObject *pystr)
+py_encode_basestring_ascii(PyObject* Py_UNUSED(self), PyObject *pystr)
 {
     PyObject *rval;
     /* Return an ASCII-only JSON representation of a Python string */
@@ -645,7 +616,7 @@
 );
 
 static PyObject *
-py_encode_basestring(PyObject* self UNUSED, PyObject *pystr)
+py_encode_basestring(PyObject* Py_UNUSED(self), PyObject *pystr)
 {
     PyObject *rval;
     /* Return a JSON representation of a Python string */
@@ -665,38 +636,36 @@
 static void
 scanner_dealloc(PyObject *self)
 {
+    PyTypeObject *tp = Py_TYPE(self);
     /* bpo-31095: UnTrack is needed before calling any callbacks */
     PyObject_GC_UnTrack(self);
-    scanner_clear(self);
-    Py_TYPE(self)->tp_free(self);
+    scanner_clear((PyScannerObject *)self);
+    tp->tp_free(self);
+    Py_DECREF(tp);
 }
 
 static int
-scanner_traverse(PyObject *self, visitproc visit, void *arg)
+scanner_traverse(PyScannerObject *self, visitproc visit, void *arg)
 {
-    PyScannerObject *s;
-    assert(PyScanner_Check(self));
-    s = (PyScannerObject *)self;
-    Py_VISIT(s->object_hook);
-    Py_VISIT(s->object_pairs_hook);
-    Py_VISIT(s->parse_float);
-    Py_VISIT(s->parse_int);
-    Py_VISIT(s->parse_constant);
+    Py_VISIT(Py_TYPE(self));
+    Py_VISIT(self->object_hook);
+    Py_VISIT(self->object_pairs_hook);
+    Py_VISIT(self->parse_float);
+    Py_VISIT(self->parse_int);
+    Py_VISIT(self->parse_constant);
+    Py_VISIT(self->memo);
     return 0;
 }
 
 static int
-scanner_clear(PyObject *self)
+scanner_clear(PyScannerObject *self)
 {
-    PyScannerObject *s;
-    assert(PyScanner_Check(self));
-    s = (PyScannerObject *)self;
-    Py_CLEAR(s->object_hook);
-    Py_CLEAR(s->object_pairs_hook);
-    Py_CLEAR(s->parse_float);
-    Py_CLEAR(s->parse_int);
-    Py_CLEAR(s->parse_constant);
-    Py_CLEAR(s->memo);
+    Py_CLEAR(self->object_hook);
+    Py_CLEAR(self->object_pairs_hook);
+    Py_CLEAR(self->parse_float);
+    Py_CLEAR(self->parse_int);
+    Py_CLEAR(self->parse_constant);
+    Py_CLEAR(self->memo);
     return 0;
 }
 
@@ -710,7 +679,7 @@
 
     Returns a new PyObject (usually a dict, but object_hook can change that)
     */
-    void *str;
+    const void *str;
     int kind;
     Py_ssize_t end_idx;
     PyObject *val = NULL;
@@ -749,19 +718,13 @@
             key = scanstring_unicode(pystr, idx + 1, s->strict, &next_idx);
             if (key == NULL)
                 goto bail;
-            memokey = PyDict_GetItemWithError(s->memo, key);
-            if (memokey != NULL) {
-                Py_INCREF(memokey);
-                Py_DECREF(key);
-                key = memokey;
-            }
-            else if (PyErr_Occurred()) {
+            memokey = PyDict_SetDefault(s->memo, key, key);
+            if (memokey == NULL) {
                 goto bail;
             }
-            else {
-                if (PyDict_SetItem(s->memo, key, key) < 0)
-                    goto bail;
-            }
+            Py_INCREF(memokey);
+            Py_DECREF(key);
+            key = memokey;
             idx = next_idx;
 
             /* skip whitespace between key and : delimiter, read :, skip whitespace */
@@ -818,14 +781,14 @@
     *next_idx_ptr = idx + 1;
 
     if (has_pairs_hook) {
-        val = PyObject_CallFunctionObjArgs(s->object_pairs_hook, rval, NULL);
+        val = PyObject_CallOneArg(s->object_pairs_hook, rval);
         Py_DECREF(rval);
         return val;
     }
 
     /* if object_hook is not None: rval = object_hook(rval) */
     if (s->object_hook != Py_None) {
-        val = PyObject_CallFunctionObjArgs(s->object_hook, rval, NULL);
+        val = PyObject_CallOneArg(s->object_hook, rval);
         Py_DECREF(rval);
         return val;
     }
@@ -846,7 +809,7 @@
 
     Returns a new PyList
     */
-    void *str;
+    const void *str;
     int kind;
     Py_ssize_t end_idx;
     PyObject *val = NULL;
@@ -931,7 +894,7 @@
         return NULL;
 
     /* rval = parse_constant(constant) */
-    rval = PyObject_CallFunctionObjArgs(s->parse_constant, cstr, NULL);
+    rval = PyObject_CallOneArg(s->parse_constant, cstr);
     idx += PyUnicode_GET_LENGTH(cstr);
     Py_DECREF(cstr);
     *next_idx_ptr = idx;
@@ -949,7 +912,7 @@
         PyLong, or PyFloat.
         May return other types if parse_int or parse_float are set
     */
-    void *str;
+    const void *str;
     int kind;
     Py_ssize_t end_idx;
     Py_ssize_t idx = start;
@@ -1030,7 +993,7 @@
                                            idx - start);
         if (numstr == NULL)
             return NULL;
-        rval = PyObject_CallFunctionObjArgs(custom_func, numstr, NULL);
+        rval = PyObject_CallOneArg(custom_func, numstr);
     }
     else {
         Py_ssize_t i, n;
@@ -1066,7 +1029,7 @@
     Returns a new PyObject representation of the term.
     */
     PyObject *res;
-    void *str;
+    const void *str;
     int kind;
     Py_ssize_t length;
 
@@ -1168,7 +1131,7 @@
 }
 
 static PyObject *
-scanner_call(PyObject *self, PyObject *args, PyObject *kwds)
+scanner_call(PyScannerObject *self, PyObject *args, PyObject *kwds)
 {
     /* Python callable interface to scan_once_{str,unicode} */
     PyObject *pystr;
@@ -1176,14 +1139,11 @@
     Py_ssize_t idx;
     Py_ssize_t next_idx = -1;
     static char *kwlist[] = {"string", "idx", NULL};
-    PyScannerObject *s;
-    assert(PyScanner_Check(self));
-    s = (PyScannerObject *)self;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "On:scan_once", kwlist, &pystr, &idx))
         return NULL;
 
     if (PyUnicode_Check(pystr)) {
-        rval = scan_once_unicode(s, pystr, idx, &next_idx);
+        rval = scan_once_unicode(self, pystr, idx, &next_idx);
     }
     else {
         PyErr_Format(PyExc_TypeError,
@@ -1191,7 +1151,7 @@
                  Py_TYPE(pystr)->tp_name);
         return NULL;
     }
-    PyDict_Clear(s->memo);
+    PyDict_Clear(self->memo);
     if (rval == NULL)
         return NULL;
     return _build_rval_index_tuple(rval, next_idx);
@@ -1250,47 +1210,23 @@
 
 PyDoc_STRVAR(scanner_doc, "JSON scanner object");
 
-static
-PyTypeObject PyScannerType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "_json.Scanner",       /* tp_name */
-    sizeof(PyScannerObject), /* tp_basicsize */
-    0,                    /* tp_itemsize */
-    scanner_dealloc, /* tp_dealloc */
-    0,                    /* tp_vectorcall_offset */
-    0,                    /* tp_getattr */
-    0,                    /* tp_setattr */
-    0,                    /* tp_as_async */
-    0,                    /* tp_repr */
-    0,                    /* tp_as_number */
-    0,                    /* tp_as_sequence */
-    0,                    /* tp_as_mapping */
-    0,                    /* tp_hash */
-    scanner_call,         /* tp_call */
-    0,                    /* tp_str */
-    0,/* PyObject_GenericGetAttr, */                    /* tp_getattro */
-    0,/* PyObject_GenericSetAttr, */                    /* tp_setattro */
-    0,                    /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,   /* tp_flags */
-    scanner_doc,          /* tp_doc */
-    scanner_traverse,                    /* tp_traverse */
-    scanner_clear,                    /* tp_clear */
-    0,                    /* tp_richcompare */
-    0,                    /* tp_weaklistoffset */
-    0,                    /* tp_iter */
-    0,                    /* tp_iternext */
-    0,                    /* tp_methods */
-    scanner_members,                    /* tp_members */
-    0,                    /* tp_getset */
-    0,                    /* tp_base */
-    0,                    /* tp_dict */
-    0,                    /* tp_descr_get */
-    0,                    /* tp_descr_set */
-    0,                    /* tp_dictoffset */
-    0,                    /* tp_init */
-    0,/* PyType_GenericAlloc, */        /* tp_alloc */
-    scanner_new,          /* tp_new */
-    0,/* PyObject_GC_Del, */              /* tp_free */
+static PyType_Slot PyScannerType_slots[] = {
+    {Py_tp_doc, (void *)scanner_doc},
+    {Py_tp_dealloc, scanner_dealloc},
+    {Py_tp_call, scanner_call},
+    {Py_tp_traverse, scanner_traverse},
+    {Py_tp_clear, scanner_clear},
+    {Py_tp_members, scanner_members},
+    {Py_tp_new, scanner_new},
+    {0, 0}
+};
+
+static PyType_Spec PyScannerType_spec = {
+    .name = "_json.Scanner",
+    .basicsize = sizeof(PyScannerObject),
+    .itemsize = 0,
+    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    .slots = PyScannerType_slots,
 };
 
 static PyObject *
@@ -1348,23 +1284,19 @@
 }
 
 static PyObject *
-encoder_call(PyObject *self, PyObject *args, PyObject *kwds)
+encoder_call(PyEncoderObject *self, PyObject *args, PyObject *kwds)
 {
     /* Python callable interface to encode_listencode_obj */
     static char *kwlist[] = {"obj", "_current_indent_level", NULL};
     PyObject *obj;
     Py_ssize_t indent_level;
-    PyEncoderObject *s;
     _PyAccu acc;
-
-    assert(PyEncoder_Check(self));
-    s = (PyEncoderObject *)self;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "On:_iterencode", kwlist,
         &obj, &indent_level))
         return NULL;
     if (_PyAccu_Init(&acc))
         return NULL;
-    if (encoder_listencode_obj(s, &acc, obj, indent_level)) {
+    if (encoder_listencode_obj(self, &acc, obj, indent_level)) {
         _PyAccu_Destroy(&acc);
         return NULL;
     }
@@ -1440,7 +1372,7 @@
     if (s->fast_encode) {
         return s->fast_encode(NULL, obj);
     }
-    encoded = PyObject_CallFunctionObjArgs(s->encoder, obj, NULL);
+    encoded = PyObject_CallOneArg(s->encoder, obj);
     if (encoded != NULL && !PyUnicode_Check(encoded)) {
         PyErr_Format(PyExc_TypeError,
                      "encoder() must return a string, not %.80s",
@@ -1526,7 +1458,7 @@
                 return -1;
             }
         }
-        newobj = PyObject_CallFunctionObjArgs(s->defaultfn, obj, NULL);
+        newobj = PyObject_CallOneArg(s->defaultfn, obj);
         if (newobj == NULL) {
             Py_XDECREF(ident);
             return -1;
@@ -1658,7 +1590,7 @@
         else {
             PyErr_Format(PyExc_TypeError,
                          "keys must be str, int, float, bool or None, "
-                         "not %.100s", key->ob_type->tp_name);
+                         "not %.100s", Py_TYPE(key)->tp_name);
             goto bail;
         }
 
@@ -1803,86 +1735,59 @@
 static void
 encoder_dealloc(PyObject *self)
 {
+    PyTypeObject *tp = Py_TYPE(self);
     /* bpo-31095: UnTrack is needed before calling any callbacks */
     PyObject_GC_UnTrack(self);
-    encoder_clear(self);
-    Py_TYPE(self)->tp_free(self);
+    encoder_clear((PyEncoderObject *)self);
+    tp->tp_free(self);
+    Py_DECREF(tp);
 }
 
 static int
-encoder_traverse(PyObject *self, visitproc visit, void *arg)
+encoder_traverse(PyEncoderObject *self, visitproc visit, void *arg)
 {
-    PyEncoderObject *s;
-    assert(PyEncoder_Check(self));
-    s = (PyEncoderObject *)self;
-    Py_VISIT(s->markers);
-    Py_VISIT(s->defaultfn);
-    Py_VISIT(s->encoder);
-    Py_VISIT(s->indent);
-    Py_VISIT(s->key_separator);
-    Py_VISIT(s->item_separator);
+    Py_VISIT(Py_TYPE(self));
+    Py_VISIT(self->markers);
+    Py_VISIT(self->defaultfn);
+    Py_VISIT(self->encoder);
+    Py_VISIT(self->indent);
+    Py_VISIT(self->key_separator);
+    Py_VISIT(self->item_separator);
     return 0;
 }
 
 static int
-encoder_clear(PyObject *self)
+encoder_clear(PyEncoderObject *self)
 {
     /* Deallocate Encoder */
-    PyEncoderObject *s;
-    assert(PyEncoder_Check(self));
-    s = (PyEncoderObject *)self;
-    Py_CLEAR(s->markers);
-    Py_CLEAR(s->defaultfn);
-    Py_CLEAR(s->encoder);
-    Py_CLEAR(s->indent);
-    Py_CLEAR(s->key_separator);
-    Py_CLEAR(s->item_separator);
+    Py_CLEAR(self->markers);
+    Py_CLEAR(self->defaultfn);
+    Py_CLEAR(self->encoder);
+    Py_CLEAR(self->indent);
+    Py_CLEAR(self->key_separator);
+    Py_CLEAR(self->item_separator);
     return 0;
 }
 
 PyDoc_STRVAR(encoder_doc, "_iterencode(obj, _current_indent_level) -> iterable");
 
-static
-PyTypeObject PyEncoderType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "_json.Encoder",       /* tp_name */
-    sizeof(PyEncoderObject), /* tp_basicsize */
-    0,                    /* tp_itemsize */
-    encoder_dealloc, /* tp_dealloc */
-    0,                    /* tp_vectorcall_offset */
-    0,                    /* tp_getattr */
-    0,                    /* tp_setattr */
-    0,                    /* tp_as_async */
-    0,                    /* tp_repr */
-    0,                    /* tp_as_number */
-    0,                    /* tp_as_sequence */
-    0,                    /* tp_as_mapping */
-    0,                    /* tp_hash */
-    encoder_call,         /* tp_call */
-    0,                    /* tp_str */
-    0,                    /* tp_getattro */
-    0,                    /* tp_setattro */
-    0,                    /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,   /* tp_flags */
-    encoder_doc,          /* tp_doc */
-    encoder_traverse,     /* tp_traverse */
-    encoder_clear,        /* tp_clear */
-    0,                    /* tp_richcompare */
-    0,                    /* tp_weaklistoffset */
-    0,                    /* tp_iter */
-    0,                    /* tp_iternext */
-    0,                    /* tp_methods */
-    encoder_members,      /* tp_members */
-    0,                    /* tp_getset */
-    0,                    /* tp_base */
-    0,                    /* tp_dict */
-    0,                    /* tp_descr_get */
-    0,                    /* tp_descr_set */
-    0,                    /* tp_dictoffset */
-    0,                    /* tp_init */
-    0,                    /* tp_alloc */
-    encoder_new,          /* tp_new */
-    0,                    /* tp_free */
+static PyType_Slot PyEncoderType_slots[] = {
+    {Py_tp_doc, (void *)encoder_doc},
+    {Py_tp_dealloc, encoder_dealloc},
+    {Py_tp_call, encoder_call},
+    {Py_tp_traverse, encoder_traverse},
+    {Py_tp_clear, encoder_clear},
+    {Py_tp_members, encoder_members},
+    {Py_tp_new, encoder_new},
+    {0, 0}
+};
+
+static PyType_Spec PyEncoderType_spec = {
+    .name = "_json.Encoder",
+    .basicsize = sizeof(PyEncoderObject),
+    .itemsize = 0,
+    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    .slots = PyEncoderType_slots
 };
 
 static PyMethodDef speedups_methods[] = {
@@ -1904,40 +1809,77 @@
 PyDoc_STRVAR(module_doc,
 "json speedups\n");
 
+static int
+_json_exec(PyObject *module)
+{
+    _jsonmodulestate *state = get_json_state(module);
+
+    state->PyScannerType = PyType_FromSpec(&PyScannerType_spec);
+    if (state->PyScannerType == NULL) {
+        return -1;
+    }
+    Py_INCREF(state->PyScannerType);
+    if (PyModule_AddObject(module, "make_scanner", state->PyScannerType) < 0) {
+        Py_DECREF(state->PyScannerType);
+        return -1;
+    }
+
+    state->PyEncoderType = PyType_FromSpec(&PyEncoderType_spec);
+    if (state->PyEncoderType == NULL) {
+        return -1;
+    }
+    Py_INCREF(state->PyEncoderType);
+    if (PyModule_AddObject(module, "make_encoder", state->PyEncoderType) < 0) {
+        Py_DECREF(state->PyEncoderType);
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+_jsonmodule_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    _jsonmodulestate *state = get_json_state(module);
+    Py_VISIT(state->PyScannerType);
+    Py_VISIT(state->PyEncoderType);
+    return 0;
+}
+
+static int
+_jsonmodule_clear(PyObject *module)
+{
+    _jsonmodulestate *state = get_json_state(module);
+    Py_CLEAR(state->PyScannerType);
+    Py_CLEAR(state->PyEncoderType);
+    return 0;
+}
+
+static void
+_jsonmodule_free(void *module)
+{
+    _jsonmodule_clear((PyObject *)module);
+}
+
+static PyModuleDef_Slot _json_slots[] = {
+    {Py_mod_exec, _json_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef jsonmodule = {
         PyModuleDef_HEAD_INIT,
         "_json",
         module_doc,
-        -1,
+        sizeof(_jsonmodulestate),
         speedups_methods,
-        NULL,
-        NULL,
-        NULL,
-        NULL
+        _json_slots,
+        _jsonmodule_traverse,
+        _jsonmodule_clear,
+        _jsonmodule_free,
 };
 
 PyMODINIT_FUNC
 PyInit__json(void)
 {
-    PyObject *m = PyModule_Create(&jsonmodule);
-    if (!m)
-        return NULL;
-    if (PyType_Ready(&PyScannerType) < 0)
-        goto fail;
-    if (PyType_Ready(&PyEncoderType) < 0)
-        goto fail;
-    Py_INCREF((PyObject*)&PyScannerType);
-    if (PyModule_AddObject(m, "make_scanner", (PyObject*)&PyScannerType) < 0) {
-        Py_DECREF((PyObject*)&PyScannerType);
-        goto fail;
-    }
-    Py_INCREF((PyObject*)&PyEncoderType);
-    if (PyModule_AddObject(m, "make_encoder", (PyObject*)&PyEncoderType) < 0) {
-        Py_DECREF((PyObject*)&PyEncoderType);
-        goto fail;
-    }
-    return m;
-  fail:
-    Py_DECREF(m);
-    return NULL;
+    return PyModuleDef_Init(&jsonmodule);
 }
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 036bdb3..2e353bb 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -41,7 +41,17 @@
 
 PyDoc_STRVAR(locale__doc__, "Support for POSIX locales.");
 
-static PyObject *Error;
+typedef struct _locale_state {
+    PyObject *Error;
+} _locale_state;
+
+static inline _locale_state*
+get_locale_state(PyObject *m)
+{
+    void *state = PyModule_GetState(m);
+    assert(state != NULL);
+    return (_locale_state *)state;
+}
 
 /* support functions for formatting floating point numbers */
 
@@ -94,7 +104,8 @@
 #if defined(MS_WINDOWS)
     if (category < LC_MIN || category > LC_MAX)
     {
-        PyErr_SetString(Error, "invalid locale category");
+        PyErr_SetString(get_locale_state(self)->Error,
+                        "invalid locale category");
         return NULL;
     }
 #endif
@@ -104,7 +115,8 @@
         result = setlocale(category, locale);
         if (!result) {
             /* operation failed, no setting was changed */
-            PyErr_SetString(Error, "unsupported locale setting");
+            PyErr_SetString(get_locale_state(self)->Error,
+                            "unsupported locale setting");
             return NULL;
         }
         result_object = PyUnicode_DecodeLocale(result, NULL);
@@ -114,7 +126,8 @@
         /* get locale */
         result = setlocale(category, NULL);
         if (!result) {
-            PyErr_SetString(Error, "locale query failed");
+            PyErr_SetString(get_locale_state(self)->Error,
+                            "locale query failed");
             return NULL;
         }
         result_object = PyUnicode_DecodeLocale(result, NULL);
@@ -131,6 +144,7 @@
 static int
 locale_decode_monetary(PyObject *dict, struct lconv *lc)
 {
+#ifndef MS_WINDOWS
     int change_locale;
     change_locale = (!locale_is_ascii(lc->int_curr_symbol)
                      || !locale_is_ascii(lc->currency_symbol)
@@ -166,12 +180,18 @@
         }
     }
 
+#define GET_LOCALE_STRING(ATTR) PyUnicode_DecodeLocale(lc->ATTR, NULL)
+#else  /* MS_WINDOWS */
+/* Use _W_* fields of Windows struct lconv */
+#define GET_LOCALE_STRING(ATTR) PyUnicode_FromWideChar(lc->_W_ ## ATTR, -1)
+#endif /* MS_WINDOWS */
+
     int res = -1;
 
 #define RESULT_STRING(ATTR) \
     do { \
         PyObject *obj; \
-        obj = PyUnicode_DecodeLocale(lc->ATTR, NULL); \
+        obj = GET_LOCALE_STRING(ATTR); \
         if (obj == NULL) { \
             goto done; \
         } \
@@ -187,14 +207,17 @@
     RESULT_STRING(mon_decimal_point);
     RESULT_STRING(mon_thousands_sep);
 #undef RESULT_STRING
+#undef GET_LOCALE_STRING
 
     res = 0;
 
 done:
+#ifndef MS_WINDOWS
     if (loc != NULL) {
         setlocale(LC_CTYPE, oldloc);
     }
     PyMem_Free(oldloc);
+#endif
     return res;
 }
 
@@ -230,9 +253,15 @@
         Py_DECREF(obj); \
     } while (0)
 
+#ifdef MS_WINDOWS
+/* Use _W_* fields of Windows struct lconv */
+#define GET_LOCALE_STRING(ATTR) PyUnicode_FromWideChar(lc->_W_ ## ATTR, -1)
+#else
+#define GET_LOCALE_STRING(ATTR) PyUnicode_DecodeLocale(lc->ATTR, NULL)
+#endif
 #define RESULT_STRING(s)\
     do { \
-        x = PyUnicode_DecodeLocale(lc->s, NULL); \
+        x = GET_LOCALE_STRING(s); \
         RESULT(#s, x); \
     } while (0)
 
@@ -261,8 +290,10 @@
     RESULT_INT(n_sign_posn);
 
     /* Numeric information: LC_NUMERIC encoding */
-    PyObject *decimal_point, *thousands_sep;
+    PyObject *decimal_point = NULL, *thousands_sep = NULL;
     if (_Py_GetLocaleconvNumeric(lc, &decimal_point, &thousands_sep) < 0) {
+        Py_XDECREF(decimal_point);
+        Py_XDECREF(thousands_sep);
         goto failed;
     }
 
@@ -291,6 +322,7 @@
 #undef RESULT
 #undef RESULT_STRING
 #undef RESULT_INT
+#undef GET_LOCALE_STRING
 }
 
 #if defined(HAVE_WCSCOLL)
@@ -622,14 +654,16 @@
 "Bind the C library's domain to dir.");
 
 static PyObject*
-PyIntl_bindtextdomain(PyObject* self,PyObject*args)
+PyIntl_bindtextdomain(PyObject* self, PyObject*args)
 {
-    char *domain, *dirname, *current_dirname;
+    const char *domain, *dirname, *current_dirname;
     PyObject *dirname_obj, *dirname_bytes = NULL, *result;
+
     if (!PyArg_ParseTuple(args, "sO", &domain, &dirname_obj))
         return 0;
     if (!strlen(domain)) {
-        PyErr_SetString(Error, "domain must be a non-empty string");
+        PyErr_SetString(get_locale_state(self)->Error,
+                        "domain must be a non-empty string");
         return 0;
     }
     if (dirname_obj != Py_None) {
@@ -710,63 +744,104 @@
   {NULL, NULL}
 };
 
+static int
+_locale_exec(PyObject *module)
+{
+#ifdef HAVE_LANGINFO_H
+    int i;
+#endif
+#define ADD_INT(module, value)                                    \
+    do {                                                          \
+        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
+            return -1;                                            \
+        }                                                         \
+    } while (0)
+
+    ADD_INT(module, LC_CTYPE);
+    ADD_INT(module, LC_TIME);
+    ADD_INT(module, LC_COLLATE);
+    ADD_INT(module, LC_MONETARY);
+
+#ifdef LC_MESSAGES
+    ADD_INT(module, LC_MESSAGES);
+#endif /* LC_MESSAGES */
+
+    ADD_INT(module, LC_NUMERIC);
+    ADD_INT(module, LC_ALL);
+    ADD_INT(module, CHAR_MAX);
+
+    _locale_state *state = get_locale_state(module);
+    state->Error = PyErr_NewException("locale.Error", NULL, NULL);
+    if (state->Error == NULL) {
+        return -1;
+    }
+    Py_INCREF(get_locale_state(module)->Error);
+    if (PyModule_AddObject(module, "Error", get_locale_state(module)->Error) < 0) {
+        Py_DECREF(get_locale_state(module)->Error);
+        return -1;
+    }
+
+#ifdef HAVE_LANGINFO_H
+    for (i = 0; langinfo_constants[i].name; i++) {
+        if (PyModule_AddIntConstant(module,
+                                    langinfo_constants[i].name,
+                                    langinfo_constants[i].value) < 0) {
+            return -1;
+        }
+    }
+#endif
+
+    if (PyErr_Occurred()) {
+        return -1;
+    }
+    return 0;
+
+#undef ADD_INT
+}
+
+static struct PyModuleDef_Slot _locale_slots[] = {
+    {Py_mod_exec, _locale_exec},
+    {0, NULL}
+};
+
+static int
+locale_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    _locale_state *state = get_locale_state(module);
+    Py_VISIT(state->Error);
+    return 0;
+}
+
+static int
+locale_clear(PyObject *module)
+{
+    _locale_state *state = get_locale_state(module);
+    Py_CLEAR(state->Error);
+    return 0;
+}
+
+static void
+locale_free(PyObject *module)
+{
+    locale_clear(module);
+}
 
 static struct PyModuleDef _localemodule = {
     PyModuleDef_HEAD_INIT,
     "_locale",
     locale__doc__,
-    -1,
+    sizeof(_locale_state),
     PyLocale_Methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    _locale_slots,
+    locale_traverse,
+    locale_clear,
+    (freefunc)locale_free,
 };
 
 PyMODINIT_FUNC
 PyInit__locale(void)
 {
-    PyObject *m;
-#ifdef HAVE_LANGINFO_H
-    int i;
-#endif
-
-    m = PyModule_Create(&_localemodule);
-    if (m == NULL)
-        return NULL;
-
-    PyModule_AddIntMacro(m, LC_CTYPE);
-    PyModule_AddIntMacro(m, LC_TIME);
-    PyModule_AddIntMacro(m, LC_COLLATE);
-    PyModule_AddIntMacro(m, LC_MONETARY);
-
-#ifdef LC_MESSAGES
-    PyModule_AddIntMacro(m, LC_MESSAGES);
-#endif /* LC_MESSAGES */
-
-    PyModule_AddIntMacro(m, LC_NUMERIC);
-    PyModule_AddIntMacro(m, LC_ALL);
-    PyModule_AddIntMacro(m, CHAR_MAX);
-
-    Error = PyErr_NewException("locale.Error", NULL, NULL);
-    if (Error == NULL) {
-        Py_DECREF(m);
-        return NULL;
-    }
-    PyModule_AddObject(m, "Error", Error);
-
-#ifdef HAVE_LANGINFO_H
-    for (i = 0; langinfo_constants[i].name; i++) {
-        PyModule_AddIntConstant(m, langinfo_constants[i].name,
-                                langinfo_constants[i].value);
-    }
-#endif
-
-    if (PyErr_Occurred()) {
-        Py_DECREF(m);
-        return NULL;
-    }
-    return m;
+    return PyModuleDef_Init(&_localemodule);
 }
 
 /*
diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c
index c5a6f44..5e53d83 100644
--- a/Modules/_lsprof.c
+++ b/Modules/_lsprof.c
@@ -1,5 +1,4 @@
 #include "Python.h"
-#include "frameobject.h"
 #include "rotatingtree.h"
 
 /************************************************************/
@@ -54,7 +53,7 @@
 static PyTypeObject PyProfiler_Type;
 
 #define PyProfiler_Check(op) PyObject_TypeCheck(op, &PyProfiler_Type)
-#define PyProfiler_CheckExact(op) (Py_TYPE(op) == &PyProfiler_Type)
+#define PyProfiler_CheckExact(op) Py_IS_TYPE(op, &PyProfiler_Type)
 
 /*** External Timers ***/
 
@@ -388,15 +387,22 @@
 
     /* the 'frame' of a called function is about to start its execution */
     case PyTrace_CALL:
-        ptrace_enter_call(self, (void *)frame->f_code,
-                                (PyObject *)frame->f_code);
+    {
+        PyCodeObject *code = PyFrame_GetCode(frame);
+        ptrace_enter_call(self, (void *)code, (PyObject *)code);
+        Py_DECREF(code);
         break;
+    }
 
     /* the 'frame' of a called function is about to finish
        (either normally or with an exception) */
     case PyTrace_RETURN:
-        ptrace_leave_call(self, (void *)frame->f_code);
+    {
+        PyCodeObject *code = PyFrame_GetCode(frame);
+        ptrace_leave_call(self, (void *)code);
+        Py_DECREF(code);
         break;
+    }
 
     /* case PyTrace_EXCEPTION:
         If the exception results in the function exiting, a
@@ -578,8 +584,9 @@
 profiler_getstats(ProfilerObject *pObj, PyObject* noarg)
 {
     statscollector_t collect;
-    if (pending_exception(pObj))
+    if (pending_exception(pObj)) {
         return NULL;
+    }
     if (!pObj->externalTimer || pObj->externalTimerUnit == 0.0) {
         _PyTime_t onesec = _PyTime_FromSeconds(1);
         collect.factor = (double)1 / onesec;
@@ -639,9 +646,15 @@
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "|ii:enable",
                                      kwlist, &subcalls, &builtins))
         return NULL;
-    if (setSubcalls(self, subcalls) < 0 || setBuiltins(self, builtins) < 0)
+    if (setSubcalls(self, subcalls) < 0 || setBuiltins(self, builtins) < 0) {
         return NULL;
-    PyEval_SetProfile(profiler_callback, (PyObject*)self);
+    }
+
+    PyThreadState *tstate = PyThreadState_GET();
+    if (_PyEval_SetProfile(tstate, profiler_callback, (PyObject*)self) < 0) {
+        return NULL;
+    }
+
     self->flags |= POF_ENABLED;
     Py_RETURN_NONE;
 }
@@ -671,11 +684,16 @@
 static PyObject*
 profiler_disable(ProfilerObject *self, PyObject* noarg)
 {
-    self->flags &= ~POF_ENABLED;
-    PyEval_SetProfile(NULL, NULL);
-    flush_unmatched(self);
-    if (pending_exception(self))
+    PyThreadState *tstate = PyThreadState_GET();
+    if (_PyEval_SetProfile(tstate, NULL, NULL) < 0) {
         return NULL;
+    }
+    self->flags &= ~POF_ENABLED;
+
+    flush_unmatched(self);
+    if (pending_exception(self)) {
+        return NULL;
+    }
     Py_RETURN_NONE;
 }
 
@@ -695,8 +713,13 @@
 static void
 profiler_dealloc(ProfilerObject *op)
 {
-    if (op->flags & POF_ENABLED)
-        PyEval_SetProfile(NULL, NULL);
+    if (op->flags & POF_ENABLED) {
+        PyThreadState *tstate = PyThreadState_GET();
+        if (_PyEval_SetProfile(tstate, NULL, NULL) < 0) {
+            PyErr_WriteUnraisable((PyObject *)op);
+        }
+    }
+
     flush_unmatched(op);
     clearEntries(op);
     Py_XDECREF(op->externalTimer);
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
index 1ab67f3..2a62a68 100644
--- a/Modules/_lzmamodule.c
+++ b/Modules/_lzmamodule.c
@@ -8,8 +8,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
-#include "pythread.h"
+#include "structmember.h"         // PyMemberDef
 
 #include <stdarg.h>
 #include <string.h>
@@ -212,10 +211,9 @@
             return NULL;
     }
 
-    options = (lzma_options_lzma *)PyMem_Malloc(sizeof *options);
+    options = (lzma_options_lzma *)PyMem_Calloc(1, sizeof *options);
     if (options == NULL)
         return PyErr_NoMemory();
-    memset(options, 0, sizeof *options);
 
     if (lzma_lzma_preset(options, preset)) {
         PyMem_Free(options);
@@ -257,10 +255,9 @@
         return NULL;
     }
 
-    options = (lzma_options_delta *)PyMem_Malloc(sizeof *options);
+    options = (lzma_options_delta *)PyMem_Calloc(1, sizeof *options);
     if (options == NULL)
         return PyErr_NoMemory();
-    memset(options, 0, sizeof *options);
     options->type = LZMA_DELTA_TYPE_BYTE;
     options->dist = dist;
     return options;
@@ -281,10 +278,9 @@
         return NULL;
     }
 
-    options = (lzma_options_bcj *)PyMem_Malloc(sizeof *options);
+    options = (lzma_options_bcj *)PyMem_Calloc(1, sizeof *options);
     if (options == NULL)
         return PyErr_NoMemory();
-    memset(options, 0, sizeof *options);
     options->start_offset = start_offset;
     return options;
 }
@@ -1486,19 +1482,13 @@
     if (PyModule_AddObject(m, "LZMAError", Error) == -1)
         return NULL;
 
-    if (PyType_Ready(&Compressor_type) == -1)
+    if (PyModule_AddType(m, &Compressor_type) < 0) {
         return NULL;
-    Py_INCREF(&Compressor_type);
-    if (PyModule_AddObject(m, "LZMACompressor",
-                           (PyObject *)&Compressor_type) == -1)
-        return NULL;
+    }
 
-    if (PyType_Ready(&Decompressor_type) == -1)
+    if (PyModule_AddType(m, &Decompressor_type) < 0) {
         return NULL;
-    Py_INCREF(&Decompressor_type);
-    if (PyModule_AddObject(m, "LZMADecompressor",
-                           (PyObject *)&Decompressor_type) == -1)
-        return NULL;
+    }
 
     return m;
 }
diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h
index 512bc17..fe78135 100644
--- a/Modules/_multiprocessing/multiprocessing.h
+++ b/Modules/_multiprocessing/multiprocessing.h
@@ -27,14 +27,6 @@
 #    include <semaphore.h>
      typedef sem_t *SEM_HANDLE;
 #  endif
-#  define HANDLE int
-#  define SOCKET int
-#  define BOOL int
-#  define UINT32 uint32_t
-#  define INT32 int32_t
-#  define TRUE 1
-#  define FALSE 0
-#  define INVALID_HANDLE_VALUE (-1)
 #endif
 
 /*
@@ -72,8 +64,6 @@
 #  define T_HANDLE T_POINTER
 #  define F_SEM_HANDLE F_HANDLE
 #  define T_SEM_HANDLE T_HANDLE
-#  define F_DWORD "k"
-#  define T_DWORD T_ULONG
 #else
 #  define F_HANDLE "i"
 #  define T_HANDLE T_INT
diff --git a/Modules/_multiprocessing/posixshmem.c b/Modules/_multiprocessing/posixshmem.c
index 2049dbb..436ac6d 100644
--- a/Modules/_multiprocessing/posixshmem.c
+++ b/Modules/_multiprocessing/posixshmem.c
@@ -5,7 +5,6 @@
 #define PY_SSIZE_T_CLEAN
 
 #include <Python.h>
-#include "structmember.h"
 
 // for shm_open() and shm_unlink()
 #ifdef HAVE_SYS_MMAN_H
diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c
index 4be2dea..ee49025 100644
--- a/Modules/_multiprocessing/semaphore.c
+++ b/Modules/_multiprocessing/semaphore.c
@@ -268,11 +268,8 @@
 semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
 {
     int blocking = 1, res, err = 0;
-    double timeout;
     PyObject *timeout_obj = Py_None;
     struct timespec deadline = {0};
-    struct timeval now;
-    long sec, nsec;
 
     static char *kwlist[] = {"block", "timeout", NULL};
 
@@ -285,19 +282,23 @@
         Py_RETURN_TRUE;
     }
 
-    if (timeout_obj != Py_None) {
-        timeout = PyFloat_AsDouble(timeout_obj);
-        if (PyErr_Occurred())
+    int use_deadline = (timeout_obj != Py_None);
+    if (use_deadline) {
+        double timeout = PyFloat_AsDouble(timeout_obj);
+        if (PyErr_Occurred()) {
             return NULL;
-        if (timeout < 0.0)
+        }
+        if (timeout < 0.0) {
             timeout = 0.0;
+        }
 
+        struct timeval now;
         if (gettimeofday(&now, NULL) < 0) {
             PyErr_SetFromErrno(PyExc_OSError);
             return NULL;
         }
-        sec = (long) timeout;
-        nsec = (long) (1e9 * (timeout - sec) + 0.5);
+        long sec = (long) timeout;
+        long nsec = (long) (1e9 * (timeout - sec) + 0.5);
         deadline.tv_sec = now.tv_sec + sec;
         deadline.tv_nsec = now.tv_usec * 1000 + nsec;
         deadline.tv_sec += (deadline.tv_nsec / 1000000000);
@@ -315,7 +316,7 @@
         /* Couldn't acquire immediately, need to block */
         do {
             Py_BEGIN_ALLOW_THREADS
-            if (timeout_obj == Py_None) {
+            if (!use_deadline) {
                 res = sem_wait(self->handle);
             }
             else {
diff --git a/Modules/_operator.c b/Modules/_operator.c
index 5aa229f..6f8f68f 100644
--- a/Modules/_operator.c
+++ b/Modules/_operator.c
@@ -735,7 +735,7 @@
     volatile const unsigned char *left;
     volatile const unsigned char *right;
     Py_ssize_t i;
-    unsigned char result;
+    volatile unsigned char result;
 
     /* loop count depends on length of b */
     length = len_b;
@@ -785,6 +785,8 @@
     return PyObject_LengthHint(obj, default_value);
 }
 
+/* NOTE: Keep in sync with _hashopenssl.c implementation. */
+
 /*[clinic input]
 _operator._compare_digest = _operator.eq
 
@@ -1170,7 +1172,7 @@
     for (idx = 0; idx < nattrs; ++idx) {
         PyObject *item = PyTuple_GET_ITEM(args, idx);
         Py_ssize_t item_len;
-        void *data;
+        const void *data;
         unsigned int kind;
         int dot_count;
 
@@ -1682,7 +1684,7 @@
 
         newargs[0] = (PyObject *)Py_TYPE(mc);
         newargs[1] = mc->name;
-        constructor = _PyObject_FastCallDict(partial, newargs, 2, mc->kwds);
+        constructor = PyObject_VectorcallDict(partial, newargs, 2, mc->kwds);
 
         Py_DECREF(partial);
         return Py_BuildValue("NO", constructor, mc->args);
@@ -1746,16 +1748,38 @@
 };
 
 
-/* Initialization function for the module (*must* be called PyInit__operator) */
+static int
+operator_exec(PyObject *module)
+{
+    PyTypeObject *types[] = {
+        &itemgetter_type,
+        &attrgetter_type,
+        &methodcaller_type
+    };
+
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(types); i++) {
+        if (PyModule_AddType(module, types[i]) < 0) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
+static struct PyModuleDef_Slot operator_slots[] = {
+    {Py_mod_exec, operator_exec},
+    {0, NULL}
+};
 
 
 static struct PyModuleDef operatormodule = {
     PyModuleDef_HEAD_INIT,
     "_operator",
     operator_doc,
-    -1,
+    0,
     operator_methods,
-    NULL,
+    operator_slots,
     NULL,
     NULL,
     NULL
@@ -1764,26 +1788,5 @@
 PyMODINIT_FUNC
 PyInit__operator(void)
 {
-    PyObject *m;
-
-    /* Create the module and add the functions */
-    m = PyModule_Create(&operatormodule);
-    if (m == NULL)
-        return NULL;
-
-    if (PyType_Ready(&itemgetter_type) < 0)
-        return NULL;
-    Py_INCREF(&itemgetter_type);
-    PyModule_AddObject(m, "itemgetter", (PyObject *)&itemgetter_type);
-
-    if (PyType_Ready(&attrgetter_type) < 0)
-        return NULL;
-    Py_INCREF(&attrgetter_type);
-    PyModule_AddObject(m, "attrgetter", (PyObject *)&attrgetter_type);
-
-    if (PyType_Ready(&methodcaller_type) < 0)
-        return NULL;
-    Py_INCREF(&methodcaller_type);
-    PyModule_AddObject(m, "methodcaller", (PyObject *)&methodcaller_type);
-    return m;
+    return PyModuleDef_Init(&operatormodule);
 }
diff --git a/Modules/_peg_parser.c b/Modules/_peg_parser.c
new file mode 100644
index 0000000..ca2a3cf
--- /dev/null
+++ b/Modules/_peg_parser.c
@@ -0,0 +1,153 @@
+#include <Python.h>
+#include "pegen_interface.h"
+
+static int
+_mode_str_to_int(char *mode_str)
+{
+    int mode;
+    if (strcmp(mode_str, "exec") == 0) {
+        mode = Py_file_input;
+    }
+    else if (strcmp(mode_str, "eval") == 0) {
+        mode = Py_eval_input;
+    }
+    else if (strcmp(mode_str, "single") == 0) {
+        mode = Py_single_input;
+    }
+    else {
+        mode = -1;
+    }
+    return mode;
+}
+
+static mod_ty
+_run_parser(char *str, char *filename, int mode, PyCompilerFlags *flags, PyArena *arena, int oldparser)
+{
+    mod_ty mod;
+    if (!oldparser) {
+        mod = PyPegen_ASTFromString(str, filename, mode, flags, arena);
+    }
+    else {
+        mod = PyParser_ASTFromString(str, filename, mode, flags, arena);
+    }
+    return mod;
+}
+
+PyObject *
+_Py_compile_string(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    static char *keywords[] = {"string", "filename", "mode", "oldparser", NULL};
+    char *the_string;
+    char *filename = "<string>";
+    char *mode_str = "exec";
+    int oldparser = 0;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ssp", keywords,
+            &the_string, &filename, &mode_str, &oldparser)) {
+        return NULL;
+    }
+
+    int mode = _mode_str_to_int(mode_str);
+    if (mode == -1) {
+        return PyErr_Format(PyExc_ValueError, "mode must be either 'exec' or 'eval' or 'single'");
+    }
+
+    PyCompilerFlags flags = _PyCompilerFlags_INIT;
+    flags.cf_flags = PyCF_IGNORE_COOKIE;
+
+    PyArena *arena = PyArena_New();
+    if (arena == NULL) {
+        return NULL;
+    }
+
+    mod_ty mod = _run_parser(the_string, filename, mode, &flags, arena, oldparser);
+    if (mod == NULL) {
+        PyArena_Free(arena);
+        return NULL;
+    }
+
+    PyObject *filename_ob = PyUnicode_DecodeFSDefault(filename);
+    if (filename_ob == NULL) {
+        PyArena_Free(arena);
+        return NULL;
+    }
+    PyCodeObject *result = PyAST_CompileObject(mod, filename_ob, &flags, -1, arena);
+    Py_XDECREF(filename_ob);
+    PyArena_Free(arena);
+    return (PyObject *)result;
+}
+
+PyObject *
+_Py_parse_string(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    static char *keywords[] = {"string", "filename", "mode", "oldparser", "ast", NULL};
+    char *the_string;
+    char *filename = "<string>";
+    char *mode_str = "exec";
+    int oldparser = 0;
+    int ast = 1;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|sspp", keywords,
+            &the_string, &filename, &mode_str, &oldparser, &ast)) {
+        return NULL;
+    }
+
+    int mode = _mode_str_to_int(mode_str);
+    if (mode == -1) {
+        return PyErr_Format(PyExc_ValueError, "mode must be either 'exec' or 'eval' or 'single'");
+    }
+
+    PyCompilerFlags flags = _PyCompilerFlags_INIT;
+    flags.cf_flags = PyCF_IGNORE_COOKIE;
+
+    PyArena *arena = PyArena_New();
+    if (arena == NULL) {
+        return NULL;
+    }
+
+    mod_ty mod = _run_parser(the_string, filename, mode, &flags, arena, oldparser);
+    if (mod == NULL) {
+        PyArena_Free(arena);
+        return NULL;
+    }
+
+    PyObject *result;
+    if (ast) {
+        result = PyAST_mod2obj(mod);
+    }
+    else {
+        Py_INCREF(Py_None);
+        result = Py_None;
+    }
+    PyArena_Free(arena);
+    return result;
+}
+
+static PyMethodDef ParseMethods[] = {
+    {
+        "parse_string",
+        (PyCFunction)(void (*)(void))_Py_parse_string,
+        METH_VARARGS|METH_KEYWORDS,
+        "Parse a string, return an AST."
+    },
+    {
+        "compile_string",
+        (PyCFunction)(void (*)(void))_Py_compile_string,
+        METH_VARARGS|METH_KEYWORDS,
+        "Compile a string, return a code object."
+    },
+    {NULL, NULL, 0, NULL} /* Sentinel */
+};
+
+static struct PyModuleDef parsemodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "peg_parser",
+    .m_doc = "A parser.",
+    .m_methods = ParseMethods,
+};
+
+PyMODINIT_FUNC
+PyInit__peg_parser(void)
+{
+    return PyModule_Create(&parsemodule);
+}
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 42ce62f..8dea2c6 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -9,7 +9,7 @@
 #endif
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 PyDoc_STRVAR(pickle_module_doc,
 "Optimized C implementation for the Python pickle module.");
@@ -359,7 +359,7 @@
 {
     PyObject *result;
 
-    result = PyObject_CallFunctionObjArgs(func, obj, NULL);
+    result = PyObject_CallOneArg(func, obj);
     Py_DECREF(obj);
     return result;
 }
@@ -420,7 +420,7 @@
         return PyObject_CallFunctionObjArgs(func, self, obj, NULL);
     }
     else {
-        return PyObject_CallFunctionObjArgs(func, obj, NULL);
+        return PyObject_CallOneArg(func, obj);
     }
 }
 
@@ -461,7 +461,7 @@
 
     if (!(self = PyObject_New(Pdata, &Pdata_Type)))
         return NULL;
-    Py_SIZE(self) = 0;
+    Py_SET_SIZE(self, 0);
     self->mark_set = 0;
     self->fence = 0;
     self->allocated = 8;
@@ -488,7 +488,7 @@
     while (--i >= clearto) {
         Py_CLEAR(self->data[i]);
     }
-    Py_SIZE(self) = clearto;
+    Py_SET_SIZE(self, clearto);
     return 0;
 }
 
@@ -539,7 +539,8 @@
         Pdata_stack_underflow(self);
         return NULL;
     }
-    return self->data[--Py_SIZE(self)];
+    Py_SET_SIZE(self, Py_SIZE(self) - 1);
+    return self->data[Py_SIZE(self)];
 }
 #define PDATA_POP(D, V) do { (V) = Pdata_pop((D)); } while (0)
 
@@ -549,7 +550,8 @@
     if (Py_SIZE(self) == self->allocated && Pdata_grow(self) < 0) {
         return -1;
     }
-    self->data[Py_SIZE(self)++] = obj;
+    self->data[Py_SIZE(self)] = obj;
+    Py_SET_SIZE(self, Py_SIZE(self) + 1);
     return 0;
 }
 
@@ -579,7 +581,7 @@
     for (i = start, j = 0; j < len; i++, j++)
         PyTuple_SET_ITEM(tuple, j, self->data[i]);
 
-    Py_SIZE(self) = start;
+    Py_SET_SIZE(self, start);
     return tuple;
 }
 
@@ -596,7 +598,7 @@
     for (i = start, j = 0; j < len; i++, j++)
         PyList_SET_ITEM(list, j, self->data[i]);
 
-    Py_SIZE(self) = start;
+    Py_SET_SIZE(self, start);
     return list;
 }
 
@@ -1274,7 +1276,7 @@
         return -1;
 
     if (n == READ_WHOLE_LINE) {
-        data = _PyObject_CallNoArg(self->readline);
+        data = PyObject_CallNoArgs(self->readline);
     }
     else {
         PyObject *len;
@@ -2007,7 +2009,7 @@
             PyErr_Format(PyExc_ValueError,
                          "fast mode: can't pickle cyclic objects "
                          "including object type %.200s at %p",
-                         obj->ob_type->tp_name, obj);
+                         Py_TYPE(obj)->tp_name, obj);
             self->fast_nesting = -1;
             return 0;
         }
@@ -2327,7 +2329,7 @@
                 return -1;
             }
         }
-        result = PyObject_CallFunctionObjArgs(self->write, payload, NULL);
+        result = PyObject_CallOneArg(self->write, payload);
         Py_XDECREF(mem);
         if (result == NULL) {
             return -1;
@@ -2535,8 +2537,7 @@
     }
     int in_band = 1;
     if (self->buffer_callback != NULL) {
-        PyObject *ret = PyObject_CallFunctionObjArgs(self->buffer_callback,
-                                                     obj, NULL);
+        PyObject *ret = PyObject_CallOneArg(self->buffer_callback, obj);
         if (ret == NULL) {
             return -1;
         }
@@ -2580,7 +2581,7 @@
 {
     char *p;
     Py_ssize_t i, size;
-    void *data;
+    const void *data;
     unsigned int kind;
     _PyBytesWriter writer;
 
@@ -3337,7 +3338,7 @@
         } else {
             _Py_IDENTIFIER(items);
 
-            items = _PyObject_CallMethodId(obj, &PyId_items, NULL);
+            items = _PyObject_CallMethodIdNoArgs(obj, &PyId_items);
             if (items == NULL)
                 goto error;
             iter = PyObject_GetIter(items);
@@ -4353,8 +4354,7 @@
      * regular reduction mechanism.
      */
     if (self->reducer_override != NULL) {
-        reduce_value = PyObject_CallFunctionObjArgs(self->reducer_override,
-                                                    obj, NULL);
+        reduce_value = PyObject_CallOneArg(self->reducer_override, obj);
         if (reduce_value == NULL) {
             goto error;
         }
@@ -4441,7 +4441,7 @@
                 goto error;
             }
             if (reduce_func != NULL) {
-                reduce_value = _PyObject_CallNoArg(reduce_func);
+                reduce_value = PyObject_CallNoArgs(reduce_func);
             }
             else {
                 PickleState *st = _Pickle_GetGlobalState();
@@ -4974,7 +4974,7 @@
         return -1;
     }
 
-    if (Py_TYPE(obj) == &PicklerMemoProxyType) {
+    if (Py_IS_TYPE(obj, &PicklerMemoProxyType)) {
         PicklerObject *pickler =
             ((PicklerMemoProxyObject *)obj)->pickler;
 
@@ -5821,7 +5821,7 @@
             return NULL;
         }
         if (func == NULL) {
-            return _PyObject_CallMethodIdObjArgs(cls, &PyId___new__, cls, NULL);
+            return _PyObject_CallMethodIdOneArg(cls, &PyId___new__, cls);
         }
         Py_DECREF(func);
     }
@@ -6180,7 +6180,7 @@
     else {
         len--;
         Py_DECREF(self->stack->data[len]);
-        Py_SIZE(self->stack) = len;
+        Py_SET_SIZE(self->stack, len);
     }
     return 0;
 }
@@ -6235,8 +6235,10 @@
 
     value = _Unpickler_MemoGet(self, idx);
     if (value == NULL) {
-        if (!PyErr_Occurred())
-            PyErr_SetObject(PyExc_KeyError, key);
+        if (!PyErr_Occurred()) {
+           PickleState *st = _Pickle_GetGlobalState();
+           PyErr_Format(st->UnpicklingError, "Memo value not found at index %ld", idx);
+        }
         Py_DECREF(key);
         return -1;
     }
@@ -6262,7 +6264,8 @@
     if (value == NULL) {
         PyObject *key = PyLong_FromSsize_t(idx);
         if (key != NULL) {
-            PyErr_SetObject(PyExc_KeyError, key);
+            PickleState *st = _Pickle_GetGlobalState();
+            PyErr_Format(st->UnpicklingError, "Memo value not found at index %ld", idx);
             Py_DECREF(key);
         }
         return -1;
@@ -6288,7 +6291,8 @@
     if (value == NULL) {
         PyObject *key = PyLong_FromSsize_t(idx);
         if (key != NULL) {
-            PyErr_SetObject(PyExc_KeyError, key);
+            PickleState *st = _Pickle_GetGlobalState();
+            PyErr_Format(st->UnpicklingError, "Memo value not found at index %ld", idx);
             Py_DECREF(key);
         }
         return -1;
@@ -6537,13 +6541,13 @@
                 result = _Pickle_FastCall(append_func, value);
                 if (result == NULL) {
                     Pdata_clear(self->stack, i + 1);
-                    Py_SIZE(self->stack) = x;
+                    Py_SET_SIZE(self->stack, x);
                     Py_DECREF(append_func);
                     return -1;
                 }
                 Py_DECREF(result);
             }
-            Py_SIZE(self->stack) = x;
+            Py_SET_SIZE(self->stack, x);
             Py_DECREF(append_func);
         }
     }
@@ -6665,12 +6669,12 @@
             result = _Pickle_FastCall(add_func, item);
             if (result == NULL) {
                 Pdata_clear(self->stack, i + 1);
-                Py_SIZE(self->stack) = mark;
+                Py_SET_SIZE(self->stack, mark);
                 return -1;
             }
             Py_DECREF(result);
         }
-        Py_SIZE(self->stack) = mark;
+        Py_SET_SIZE(self->stack, mark);
     }
 
     return 0;
@@ -7528,7 +7532,7 @@
         return -1;
     }
 
-    if (Py_TYPE(obj) == &UnpicklerMemoProxyType) {
+    if (Py_IS_TYPE(obj, &UnpicklerMemoProxyType)) {
         UnpicklerObject *unpickler =
             ((UnpicklerMemoProxyObject *)obj)->unpickler;
 
@@ -7882,6 +7886,7 @@
 _pickle.loads
 
   data: object
+  /
   *
   fix_imports: bool = True
   encoding: str = 'ASCII'
@@ -7908,7 +7913,7 @@
 _pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports,
                    const char *encoding, const char *errors,
                    PyObject *buffers)
-/*[clinic end generated code: output=82ac1e6b588e6d02 input=9c2ab6a0960185ea]*/
+/*[clinic end generated code: output=82ac1e6b588e6d02 input=b3615540d0535087]*/
 {
     PyObject *result;
     UnpicklerObject *unpickler = _Unpickler_New();
@@ -8002,10 +8007,6 @@
         return m;
     }
 
-    if (PyType_Ready(&Unpickler_Type) < 0)
-        return NULL;
-    if (PyType_Ready(&Pickler_Type) < 0)
-        return NULL;
     if (PyType_Ready(&Pdata_Type) < 0)
         return NULL;
     if (PyType_Ready(&PicklerMemoProxyType) < 0)
@@ -8019,16 +8020,15 @@
         return NULL;
 
     /* Add types */
-    Py_INCREF(&Pickler_Type);
-    if (PyModule_AddObject(m, "Pickler", (PyObject *)&Pickler_Type) < 0)
+    if (PyModule_AddType(m, &Pickler_Type) < 0) {
         return NULL;
-    Py_INCREF(&Unpickler_Type);
-    if (PyModule_AddObject(m, "Unpickler", (PyObject *)&Unpickler_Type) < 0)
+    }
+    if (PyModule_AddType(m, &Unpickler_Type) < 0) {
         return NULL;
-    Py_INCREF(&PyPickleBuffer_Type);
-    if (PyModule_AddObject(m, "PickleBuffer",
-                           (PyObject *)&PyPickleBuffer_Type) < 0)
+    }
+    if (PyModule_AddType(m, &PyPickleBuffer_Type) < 0) {
         return NULL;
+    }
 
     st = _Pickle_GetState(m);
 
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index e693e53..5356417 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -8,7 +8,7 @@
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
-#if defined(HAVE_SYS_STAT_H) && defined(__FreeBSD__)
+#if defined(HAVE_SYS_STAT_H)
 #include <sys/stat.h>
 #endif
 #ifdef HAVE_SYS_SYSCALL_H
@@ -20,6 +20,11 @@
 #ifdef HAVE_DIRENT_H
 #include <dirent.h>
 #endif
+#ifdef HAVE_GRP_H
+#include <grp.h>
+#endif /* HAVE_GRP_H */
+
+#include "posixmodule.h"
 
 #ifdef _Py_MEMORY_SANITIZER
 # include <sanitizer/msan_interface.h>
@@ -47,20 +52,43 @@
 # define FD_DIR "/proc/self/fd"
 #endif
 
+#ifdef NGROUPS_MAX
+#define MAX_GROUPS NGROUPS_MAX
+#else
+#define MAX_GROUPS 64
+#endif
+
 #define POSIX_CALL(call)   do { if ((call) == -1) goto error; } while (0)
 
+typedef struct {
+    PyObject* disable;
+    PyObject* enable;
+    PyObject* isenabled;
+} _posixsubprocessstate;
+
+static struct PyModuleDef _posixsubprocessmodule;
+
+static inline _posixsubprocessstate*
+get_posixsubprocess_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_posixsubprocessstate *)state;
+}
+
+#define _posixsubprocessstate_global get_posixsubprocess_state(PyState_FindModule(&_posixsubprocessmodule))
 
 /* If gc was disabled, call gc.enable().  Return 0 on success. */
 static int
 _enable_gc(int need_to_reenable_gc, PyObject *gc_module)
 {
     PyObject *result;
-    _Py_IDENTIFIER(enable);
     PyObject *exctype, *val, *tb;
 
     if (need_to_reenable_gc) {
         PyErr_Fetch(&exctype, &val, &tb);
-        result = _PyObject_CallMethodId(gc_module, &PyId_enable, NULL);
+        result = PyObject_CallMethodNoArgs(
+            gc_module, _posixsubprocessstate_global->enable);
         if (exctype != NULL) {
             PyErr_Restore(exctype, val, tb);
         }
@@ -236,9 +264,15 @@
         start_fd = keep_fd + 1;
     }
     if (start_fd <= end_fd) {
+#if defined(__FreeBSD__)
+        /* Any errors encountered while closing file descriptors are ignored */
+        closefrom(start_fd);
+#else
         for (fd_num = start_fd; fd_num < end_fd; ++fd_num) {
-            close(fd_num);
+            /* Ignore errors */
+            (void)close(fd_num);
         }
+#endif
     }
 }
 
@@ -405,6 +439,9 @@
            int errpipe_read, int errpipe_write,
            int close_fds, int restore_signals,
            int call_setsid,
+           int call_setgid, gid_t gid,
+           int call_setgroups, size_t groups_size, const gid_t *groups,
+           int call_setuid, uid_t uid, int child_umask,
            PyObject *py_fds_to_keep,
            PyObject *preexec_fn,
            PyObject *preexec_fn_args_tuple)
@@ -474,6 +511,9 @@
     if (cwd)
         POSIX_CALL(chdir(cwd));
 
+    if (child_umask >= 0)
+        umask(child_umask);  /* umask() always succeeds. */
+
     if (restore_signals)
         _Py_RestoreSignals();
 
@@ -482,6 +522,22 @@
         POSIX_CALL(setsid());
 #endif
 
+#ifdef HAVE_SETGROUPS
+    if (call_setgroups)
+        POSIX_CALL(setgroups(groups_size, groups));
+#endif /* HAVE_SETGROUPS */
+
+#ifdef HAVE_SETREGID
+    if (call_setgid)
+        POSIX_CALL(setregid(gid, gid));
+#endif /* HAVE_SETREGID */
+
+#ifdef HAVE_SETREUID
+    if (call_setuid)
+        POSIX_CALL(setreuid(uid, uid));
+#endif /* HAVE_SETREUID */
+
+
     reached_preexec = 1;
     if (preexec_fn != Py_None && preexec_fn_args_tuple) {
         /* This is where the user has asked us to deadlock their program. */
@@ -561,30 +617,38 @@
     PyObject *env_list, *preexec_fn;
     PyObject *process_args, *converted_args = NULL, *fast_args = NULL;
     PyObject *preexec_fn_args_tuple = NULL;
+    PyObject *groups_list;
+    PyObject *uid_object, *gid_object;
     int p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite;
     int errpipe_read, errpipe_write, close_fds, restore_signals;
     int call_setsid;
-    PyObject *cwd_obj, *cwd_obj2;
+    int call_setgid = 0, call_setgroups = 0, call_setuid = 0;
+    uid_t uid;
+    gid_t gid, *groups = NULL;
+    int child_umask;
+    PyObject *cwd_obj, *cwd_obj2 = NULL;
     const char *cwd;
     pid_t pid;
     int need_to_reenable_gc = 0;
     char *const *exec_array, *const *argv = NULL, *const *envp = NULL;
-    Py_ssize_t arg_num;
+    Py_ssize_t arg_num, num_groups = 0;
     int need_after_fork = 0;
     int saved_errno = 0;
 
     if (!PyArg_ParseTuple(
-            args, "OOpO!OOiiiiiiiiiiO:fork_exec",
+            args, "OOpO!OOiiiiiiiiiiOOOiO:fork_exec",
             &process_args, &executable_list,
             &close_fds, &PyTuple_Type, &py_fds_to_keep,
             &cwd_obj, &env_list,
             &p2cread, &p2cwrite, &c2pread, &c2pwrite,
             &errread, &errwrite, &errpipe_read, &errpipe_write,
-            &restore_signals, &call_setsid, &preexec_fn))
+            &restore_signals, &call_setsid,
+            &gid_object, &groups_list, &uid_object, &child_umask,
+            &preexec_fn))
         return NULL;
 
     if ((preexec_fn != Py_None) &&
-            (_PyInterpreterState_Get() != PyInterpreterState_Main())) {
+            (PyInterpreterState_Get() != PyInterpreterState_Main())) {
         PyErr_SetString(PyExc_RuntimeError,
                         "preexec_fn not supported within subinterpreters");
         return NULL;
@@ -599,16 +663,23 @@
         return NULL;
     }
 
+    PyInterpreterState *interp = PyInterpreterState_Get();
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
+    if (config->_isolated_interpreter) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "subprocess not supported for isolated subinterpreters");
+        return NULL;
+    }
+
     /* We need to call gc.disable() when we'll be calling preexec_fn */
     if (preexec_fn != Py_None) {
         PyObject *result;
-        _Py_IDENTIFIER(isenabled);
-        _Py_IDENTIFIER(disable);
 
         gc_module = PyImport_ImportModule("gc");
         if (gc_module == NULL)
             return NULL;
-        result = _PyObject_CallMethodId(gc_module, &PyId_isenabled, NULL);
+        result = PyObject_CallMethodNoArgs(
+            gc_module, _posixsubprocessstate_global->isenabled);
         if (result == NULL) {
             Py_DECREF(gc_module);
             return NULL;
@@ -619,7 +690,8 @@
             Py_DECREF(gc_module);
             return NULL;
         }
-        result = _PyObject_CallMethodId(gc_module, &PyId_disable, NULL);
+        result = PyObject_CallMethodNoArgs(
+            gc_module, _posixsubprocessstate_global->disable);
         if (result == NULL) {
             Py_DECREF(gc_module);
             return NULL;
@@ -676,7 +748,90 @@
         cwd = PyBytes_AsString(cwd_obj2);
     } else {
         cwd = NULL;
-        cwd_obj2 = NULL;
+    }
+
+    if (groups_list != Py_None) {
+#ifdef HAVE_SETGROUPS
+        Py_ssize_t i;
+        unsigned long gid;
+
+        if (!PyList_Check(groups_list)) {
+            PyErr_SetString(PyExc_TypeError,
+                    "setgroups argument must be a list");
+            goto cleanup;
+        }
+        num_groups = PySequence_Size(groups_list);
+
+        if (num_groups < 0)
+            goto cleanup;
+
+        if (num_groups > MAX_GROUPS) {
+            PyErr_SetString(PyExc_ValueError, "too many groups");
+            goto cleanup;
+        }
+
+        if ((groups = PyMem_RawMalloc(num_groups * sizeof(gid_t))) == NULL) {
+            PyErr_SetString(PyExc_MemoryError,
+                    "failed to allocate memory for group list");
+            goto cleanup;
+        }
+
+        for (i = 0; i < num_groups; i++) {
+            PyObject *elem;
+            elem = PySequence_GetItem(groups_list, i);
+            if (!elem)
+                goto cleanup;
+            if (!PyLong_Check(elem)) {
+                PyErr_SetString(PyExc_TypeError,
+                                "groups must be integers");
+                Py_DECREF(elem);
+                goto cleanup;
+            } else {
+                /* In posixmodule.c UnsignedLong is used as a fallback value
+                * if the value provided does not fit in a Long. Since we are
+                * already doing the bounds checking on the Python side, we
+                * can go directly to an UnsignedLong here. */
+                if (!_Py_Gid_Converter(elem, &gid)) {
+                    Py_DECREF(elem);
+                    PyErr_SetString(PyExc_ValueError, "invalid group id");
+                    goto cleanup;
+                }
+                groups[i] = gid;
+            }
+            Py_DECREF(elem);
+        }
+        call_setgroups = 1;
+
+#else /* HAVE_SETGROUPS */
+        PyErr_BadInternalCall();
+        goto cleanup;
+#endif /* HAVE_SETGROUPS */
+    }
+
+    if (gid_object != Py_None) {
+#ifdef HAVE_SETREGID
+        if (!_Py_Gid_Converter(gid_object, &gid))
+            goto cleanup;
+
+        call_setgid = 1;
+
+#else /* HAVE_SETREGID */
+        PyErr_BadInternalCall();
+        goto cleanup;
+#endif /* HAVE_SETREUID */
+    }
+
+    if (uid_object != Py_None) {
+#ifdef HAVE_SETREUID
+        if (!_Py_Uid_Converter(uid_object, &uid))
+            goto cleanup;
+
+        call_setuid = 1;
+
+#else /* HAVE_SETREUID */
+        PyErr_BadInternalCall();
+        goto cleanup;
+#endif /* HAVE_SETREUID */
     }
 
     /* This must be the last thing done before fork() because we do not
@@ -711,6 +866,8 @@
                    p2cread, p2cwrite, c2pread, c2pwrite,
                    errread, errwrite, errpipe_read, errpipe_write,
                    close_fds, restore_signals, call_setsid,
+                   call_setgid, gid, call_setgroups, num_groups, groups,
+                   call_setuid, uid, child_umask,
                    py_fds_to_keep, preexec_fn, preexec_fn_args_tuple);
         _exit(255);
         return NULL;  /* Dead code to avoid a potential compiler warning. */
@@ -735,6 +892,7 @@
     if (_enable_gc(need_to_reenable_gc, gc_module)) {
         pid = -1;
     }
+    PyMem_RawFree(groups);
     Py_XDECREF(preexec_fn_args_tuple);
     Py_XDECREF(gc_module);
 
@@ -749,12 +907,15 @@
     return PyLong_FromPid(pid);
 
 cleanup:
+    Py_XDECREF(cwd_obj2);
     if (envp)
         _Py_FreeCharPArray(envp);
     if (argv)
         _Py_FreeCharPArray(argv);
     if (exec_array)
         _Py_FreeCharPArray(exec_array);
+
+    PyMem_RawFree(groups);
     Py_XDECREF(converted_args);
     Py_XDECREF(fast_args);
     Py_XDECREF(preexec_fn_args_tuple);
@@ -765,16 +926,22 @@
 
 
 PyDoc_STRVAR(subprocess_fork_exec_doc,
-"fork_exec(args, executable_list, close_fds, cwd, env,\n\
+"fork_exec(args, executable_list, close_fds, pass_fds, cwd, env,\n\
           p2cread, p2cwrite, c2pread, c2pwrite,\n\
           errread, errwrite, errpipe_read, errpipe_write,\n\
-          restore_signals, call_setsid, preexec_fn)\n\
+          restore_signals, call_setsid,\n\
+          gid, groups_list, uid,\n\
+          preexec_fn)\n\
 \n\
 Forks a child process, closes parent file descriptors as appropriate in the\n\
 child and dups the few that are needed before calling exec() in the child\n\
 process.\n\
 \n\
-The preexec_fn, if supplied, will be called immediately before exec.\n\
+If close_fds is true, close file descriptors 3 and higher, except those listed\n\
+in the sorted tuple pass_fds.\n\
+\n\
+The preexec_fn, if supplied, will be called immediately before closing file\n\
+descriptors and exec.\n\
 WARNING: preexec_fn is NOT SAFE if your application uses threads.\n\
          It may trigger infrequent, difficult to debug deadlocks.\n\
 \n\
@@ -798,16 +965,56 @@
 };
 
 
+static int _posixsubprocess_traverse(PyObject *m, visitproc visit, void *arg) {
+    Py_VISIT(get_posixsubprocess_state(m)->disable);
+    Py_VISIT(get_posixsubprocess_state(m)->enable);
+    Py_VISIT(get_posixsubprocess_state(m)->isenabled);
+    return 0;
+}
+
+static int _posixsubprocess_clear(PyObject *m) {
+    Py_CLEAR(get_posixsubprocess_state(m)->disable);
+    Py_CLEAR(get_posixsubprocess_state(m)->enable);
+    Py_CLEAR(get_posixsubprocess_state(m)->isenabled);
+    return 0;
+}
+
+static void _posixsubprocess_free(void *m) {
+    _posixsubprocess_clear((PyObject *)m);
+}
+
 static struct PyModuleDef _posixsubprocessmodule = {
         PyModuleDef_HEAD_INIT,
         "_posixsubprocess",
         module_doc,
-        -1,  /* No memory is needed. */
+        sizeof(_posixsubprocessstate),
         module_methods,
+        NULL,
+        _posixsubprocess_traverse,
+        _posixsubprocess_clear,
+        _posixsubprocess_free,
 };
 
 PyMODINIT_FUNC
 PyInit__posixsubprocess(void)
 {
-    return PyModule_Create(&_posixsubprocessmodule);
+    PyObject* m;
+
+    m = PyState_FindModule(&_posixsubprocessmodule);
+    if (m != NULL) {
+      Py_INCREF(m);
+      return m;
+    }
+
+    m = PyModule_Create(&_posixsubprocessmodule);
+    if (m == NULL) {
+      return NULL;
+    }
+
+    get_posixsubprocess_state(m)->disable = PyUnicode_InternFromString("disable");
+    get_posixsubprocess_state(m)->enable = PyUnicode_InternFromString("enable");
+    get_posixsubprocess_state(m)->isenabled = PyUnicode_InternFromString("isenabled");
+
+    PyState_AddModule(m, &_posixsubprocessmodule);
+    return m;
 }
diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c
index e033da5..b155ea9 100644
--- a/Modules/_queuemodule.c
+++ b/Modules/_queuemodule.c
@@ -1,6 +1,5 @@
 #include "Python.h"
-#include "structmember.h" /* offsetof */
-#include "pythread.h"
+#include <stddef.h>               // offsetof()
 
 /*[clinic input]
 module _queue
@@ -302,6 +301,8 @@
     _QUEUE_SIMPLEQUEUE_PUT_METHODDEF
     _QUEUE_SIMPLEQUEUE_PUT_NOWAIT_METHODDEF
     _QUEUE_SIMPLEQUEUE_QSIZE_METHODDEF
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL,           NULL}              /* sentinel */
 };
 
@@ -390,11 +391,9 @@
     if (PyModule_AddObject(m, "Empty", EmptyError) < 0)
         return NULL;
 
-    if (PyType_Ready(&PySimpleQueueType) < 0)
+    if (PyModule_AddType(m, &PySimpleQueueType) < 0) {
         return NULL;
-    Py_INCREF(&PySimpleQueueType);
-    if (PyModule_AddObject(m, "SimpleQueue", (PyObject *)&PySimpleQueueType) < 0)
-        return NULL;
+    }
 
     return m;
 }
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index 4e9ac40..a402b93 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -11,7 +11,7 @@
     * renamed genrand_res53() to random_random() and wrapped
       in python calling/return code.
 
-    * genrand_int32() and the helper functions, init_genrand()
+    * genrand_uint32() and the helper functions, init_genrand()
       and init_by_array(), were declared static, wrapped in
       Python calling/return code.  also, their global data
       references were replaced with structure references.
@@ -67,9 +67,9 @@
 /* ---------------------------------------------------------------*/
 
 #include "Python.h"
-#include <time.h>               /* for seeding to current time */
+#include "pycore_byteswap.h"      // _Py_bswap32()
 #ifdef HAVE_PROCESS_H
-#  include <process.h>          /* needed for getpid() */
+#  include <process.h>            // getpid()
 #endif
 
 /* Period parameters -- These are all magic.  Don't change. */
@@ -80,14 +80,28 @@
 #define LOWER_MASK 0x7fffffffU  /* least significant r bits */
 
 typedef struct {
+    PyObject *Random_Type;
+    PyObject *Long___abs__;
+} _randomstate;
+
+static inline _randomstate*
+get_random_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_randomstate *)state;
+}
+
+static struct PyModuleDef _randommodule;
+
+#define _randomstate_global get_random_state(PyState_FindModule(&_randommodule))
+
+typedef struct {
     PyObject_HEAD
     int index;
     uint32_t state[N];
 } RandomObject;
 
-static PyTypeObject Random_Type;
-
-#define RandomObject_Check(v)      (Py_TYPE(v) == &Random_Type)
 
 #include "clinic/_randommodule.c.h"
 
@@ -102,7 +116,7 @@
 
 /* generates a random number on [0,0xffffffff]-interval */
 static uint32_t
-genrand_int32(RandomObject *self)
+genrand_uint32(RandomObject *self)
 {
     uint32_t y;
     static const uint32_t mag01[2] = {0x0U, MATRIX_A};
@@ -157,7 +171,7 @@
 _random_Random_random_impl(RandomObject *self)
 /*[clinic end generated code: output=117ff99ee53d755c input=afb2a59cbbb00349]*/
 {
-    uint32_t a=genrand_int32(self)>>5, b=genrand_int32(self)>>6;
+    uint32_t a=genrand_uint32(self)>>5, b=genrand_uint32(self)>>6;
     return PyFloat_FromDouble((a*67108864.0+b)*(1.0/9007199254740992.0));
 }
 
@@ -220,7 +234,7 @@
 static int
 random_seed_urandom(RandomObject *self)
 {
-    PY_UINT32_T key[N];
+    uint32_t key[N];
 
     if (_PyOS_URandomNonblock(key, sizeof(key)) < 0) {
         return -1;
@@ -236,14 +250,14 @@
     uint32_t key[5];
 
     now = _PyTime_GetSystemClock();
-    key[0] = (PY_UINT32_T)(now & 0xffffffffU);
-    key[1] = (PY_UINT32_T)(now >> 32);
+    key[0] = (uint32_t)(now & 0xffffffffU);
+    key[1] = (uint32_t)(now >> 32);
 
-    key[2] = (PY_UINT32_T)getpid();
+    key[2] = (uint32_t)getpid();
 
     now = _PyTime_GetMonotonicClock();
-    key[3] = (PY_UINT32_T)(now & 0xffffffffU);
-    key[4] = (PY_UINT32_T)(now >> 32);
+    key[3] = (uint32_t)(now & 0xffffffffU);
+    key[4] = (uint32_t)(now >> 32);
 
     init_by_array(self, key, Py_ARRAY_LENGTH(key));
 }
@@ -272,10 +286,12 @@
      * So: if the arg is a PyLong, use its absolute value.
      * Otherwise use its hash value, cast to unsigned.
      */
-    if (PyLong_Check(arg)) {
+    if (PyLong_CheckExact(arg)) {
+        n = PyNumber_Absolute(arg);
+    } else if (PyLong_Check(arg)) {
         /* Calling int.__abs__() prevents calling arg.__abs__(), which might
            return an invalid value. See issue #31478. */
-        n = PyLong_Type.tp_as_number->nb_absolute(arg);
+        n = PyObject_CallOneArg(_randomstate_global->Long___abs__, arg);
     }
     else {
         Py_hash_t hash = PyObject_Hash(arg);
@@ -458,14 +474,17 @@
     uint32_t *wordarray;
     PyObject *result;
 
-    if (k <= 0) {
+    if (k < 0) {
         PyErr_SetString(PyExc_ValueError,
-                        "number of bits must be greater than zero");
+                        "number of bits must be non-negative");
         return NULL;
     }
 
+    if (k == 0)
+        return PyLong_FromLong(0);
+
     if (k <= 32)  /* Fast path */
-        return PyLong_FromUnsignedLong(genrand_int32(self) >> (32 - k));
+        return PyLong_FromUnsignedLong(genrand_uint32(self) >> (32 - k));
 
     words = (k - 1) / 32 + 1;
     wordarray = (uint32_t *)PyMem_Malloc(words * 4);
@@ -482,7 +501,7 @@
     for (i = words - 1; i >= 0; i--, k -= 32)
 #endif
     {
-        r = genrand_int32(self);
+        r = genrand_uint32(self);
         if (k < 32)
             r >>= (32 - k);  /* Drop least significant bits */
         wordarray[i] = r;
@@ -500,10 +519,12 @@
     RandomObject *self;
     PyObject *tmp;
 
-    if (type == &Random_Type && !_PyArg_NoKeywords("Random", kwds))
+    if (type == (PyTypeObject*)_randomstate_global->Random_Type &&
+        !_PyArg_NoKeywords("Random()", kwds)) {
         return NULL;
+    }
 
-    self = (RandomObject *)type->tp_alloc(type, 0);
+    self = (RandomObject *)PyType_GenericAlloc(type, 0);
     if (self == NULL)
         return NULL;
     tmp = random_seed(self, args);
@@ -515,6 +536,7 @@
     return (PyObject *)self;
 }
 
+
 static PyMethodDef random_methods[] = {
     _RANDOM_RANDOM_RANDOM_METHODDEF
     _RANDOM_RANDOM_SEED_METHODDEF
@@ -527,64 +549,56 @@
 PyDoc_STRVAR(random_doc,
 "Random() -> create a random number generator with its own internal state.");
 
-static PyTypeObject Random_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "_random.Random",                   /*tp_name*/
-    sizeof(RandomObject),               /*tp_basicsize*/
-    0,                                  /*tp_itemsize*/
-    /* methods */
-    0,                                  /*tp_dealloc*/
-    0,                                  /*tp_vectorcall_offset*/
-    0,                                  /*tp_getattr*/
-    0,                                  /*tp_setattr*/
-    0,                                  /*tp_as_async*/
-    0,                                  /*tp_repr*/
-    0,                                  /*tp_as_number*/
-    0,                                  /*tp_as_sequence*/
-    0,                                  /*tp_as_mapping*/
-    0,                                  /*tp_hash*/
-    0,                                  /*tp_call*/
-    0,                                  /*tp_str*/
-    PyObject_GenericGetAttr,            /*tp_getattro*/
-    0,                                  /*tp_setattro*/
-    0,                                  /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,           /*tp_flags*/
-    random_doc,                         /*tp_doc*/
-    0,                                  /*tp_traverse*/
-    0,                                  /*tp_clear*/
-    0,                                  /*tp_richcompare*/
-    0,                                  /*tp_weaklistoffset*/
-    0,                                  /*tp_iter*/
-    0,                                  /*tp_iternext*/
-    random_methods,                     /*tp_methods*/
-    0,                                  /*tp_members*/
-    0,                                  /*tp_getset*/
-    0,                                  /*tp_base*/
-    0,                                  /*tp_dict*/
-    0,                                  /*tp_descr_get*/
-    0,                                  /*tp_descr_set*/
-    0,                                  /*tp_dictoffset*/
-    0,                                  /*tp_init*/
-    0,                                  /*tp_alloc*/
-    random_new,                         /*tp_new*/
-    PyObject_Free,                      /*tp_free*/
-    0,                                  /*tp_is_gc*/
+static PyType_Slot Random_Type_slots[] = {
+    {Py_tp_doc, (void *)random_doc},
+    {Py_tp_methods, random_methods},
+    {Py_tp_new, random_new},
+    {Py_tp_free, PyObject_Free},
+    {0, 0},
+};
+
+static PyType_Spec Random_Type_spec = {
+    "_random.Random",
+    sizeof(RandomObject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    Random_Type_slots
 };
 
 PyDoc_STRVAR(module_doc,
 "Module implements the Mersenne Twister random number generator.");
 
+static int
+_random_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    Py_VISIT(get_random_state(module)->Random_Type);
+    return 0;
+}
+
+static int
+_random_clear(PyObject *module)
+{
+    Py_CLEAR(get_random_state(module)->Random_Type);
+    Py_CLEAR(get_random_state(module)->Long___abs__);
+    return 0;
+}
+
+static void
+_random_free(void *module)
+{
+    _random_clear((PyObject *)module);
+}
 
 static struct PyModuleDef _randommodule = {
     PyModuleDef_HEAD_INIT,
     "_random",
     module_doc,
-    -1,
+    sizeof(_randomstate),
     NULL,
     NULL,
-    NULL,
-    NULL,
-    NULL
+    _random_traverse,
+    _random_clear,
+    _random_free,
 };
 
 PyMODINIT_FUNC
@@ -592,12 +606,41 @@
 {
     PyObject *m;
 
-    if (PyType_Ready(&Random_Type) < 0)
+    PyObject *Random_Type = PyType_FromSpec(&Random_Type_spec);
+    if (Random_Type == NULL) {
         return NULL;
+    }
+
     m = PyModule_Create(&_randommodule);
-    if (m == NULL)
+    if (m == NULL) {
+        Py_DECREF(Random_Type);
         return NULL;
-    Py_INCREF(&Random_Type);
-    PyModule_AddObject(m, "Random", (PyObject *)&Random_Type);
+    }
+    get_random_state(m)->Random_Type = Random_Type;
+
+    Py_INCREF(Random_Type);
+    PyModule_AddObject(m, "Random", Random_Type);
+
+    /* Look up and save int.__abs__, which is needed in random_seed(). */
+    PyObject *longval = NULL, *longtype = NULL;
+    longval = PyLong_FromLong(0);
+    if (longval == NULL) goto fail;
+
+    longtype = PyObject_Type(longval);
+    if (longtype == NULL) goto fail;
+
+    PyObject *abs = PyObject_GetAttrString(longtype, "__abs__");
+    if (abs == NULL) goto fail;
+
+    Py_DECREF(longtype);
+    Py_DECREF(longval);
+    get_random_state(m)->Long___abs__ = abs;
+
     return m;
+
+fail:
+    Py_XDECREF(longtype);
+    Py_XDECREF(longval);
+    Py_DECREF(m);
+    return NULL;
 }
diff --git a/Modules/_sha3/clinic/sha3module.c.h b/Modules/_sha3/clinic/sha3module.c.h
index 554442d..1c79c26 100644
--- a/Modules/_sha3/clinic/sha3module.c.h
+++ b/Modules/_sha3/clinic/sha3module.c.h
@@ -2,6 +2,52 @@
 preserve
 [clinic start generated code]*/
 
+PyDoc_STRVAR(py_sha3_new__doc__,
+"sha3_224(data=b\'\', /, *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Return a new BLAKE2b hash object.");
+
+static PyObject *
+py_sha3_new_impl(PyTypeObject *type, PyObject *data, int usedforsecurity);
+
+static PyObject *
+py_sha3_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "sha3_224", 0};
+    PyObject *argsbuf[2];
+    PyObject * const *fastargs;
+    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
+    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
+    PyObject *data = NULL;
+    int usedforsecurity = 1;
+
+    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 1, 0, argsbuf);
+    if (!fastargs) {
+        goto exit;
+    }
+    if (nargs < 1) {
+        goto skip_optional_posonly;
+    }
+    noptargs--;
+    data = fastargs[0];
+skip_optional_posonly:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(fastargs[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = py_sha3_new_impl(type, data, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
 PyDoc_STRVAR(_sha3_sha3_224_copy__doc__,
 "copy($self, /)\n"
 "--\n"
@@ -118,4 +164,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=5b3e99b9a96471e8 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c8a97b34e80def62 input=a9049054013a1b77]*/
diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c
index c1fb618..c826b42 100644
--- a/Modules/_sha3/sha3module.c
+++ b/Modules/_sha3/sha3module.c
@@ -40,7 +40,7 @@
 #elif PY_BIG_ENDIAN
   /* opt64 is not yet supported on big endian platforms */
   #define KeccakOpt 32
-#elif SIZEOF_VOID_P == 8 && defined(PY_UINT64_T)
+#elif SIZEOF_VOID_P == 8
   /* opt64 works only on little-endian 64bit platforms with unsigned int64 */
   #define KeccakOpt 64
 #else
@@ -48,9 +48,9 @@
   #define KeccakOpt 32
 #endif
 
-#if KeccakOpt == 64 && defined(PY_UINT64_T)
+#if KeccakOpt == 64
   /* 64bit platforms with unsigned int64 */
-  typedef PY_UINT64_T UINT64;
+  typedef uint64_t UINT64;
   typedef unsigned char UINT8;
 #endif
 
@@ -169,21 +169,24 @@
     return newobj;
 }
 
+/*[clinic input]
+@classmethod
+_sha3.sha3_224.__new__ as py_sha3_new
+    data: object(c_default="NULL") = b''
+    /
+    *
+    usedforsecurity: bool = True
+
+Return a new BLAKE2b hash object.
+[clinic start generated code]*/
 
 static PyObject *
-py_sha3_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+py_sha3_new_impl(PyTypeObject *type, PyObject *data, int usedforsecurity)
+/*[clinic end generated code: output=90409addc5d5e8b0 input=bcfcdf2e4368347a]*/
 {
     SHA3object *self = NULL;
     Py_buffer buf = {NULL, NULL};
     HashReturn res;
-    PyObject *data = NULL;
-
-    if (!_PyArg_NoKeywords(_PyType_Name(type), kwargs)) {
-        return NULL;
-    }
-    if (!PyArg_UnpackTuple(args, _PyType_Name(type), 0, 1, &data)) {
-        return NULL;
-    }
 
     self = newSHA3object(type);
     if (self == NULL) {
@@ -529,22 +532,22 @@
     }
 
 PyDoc_STRVAR(sha3_224__doc__,
-"sha3_224([data]) -> SHA3 object\n\
+"sha3_224([data], *, usedforsecurity=True) -> SHA3 object\n\
 \n\
 Return a new SHA3 hash object with a hashbit length of 28 bytes.");
 
 PyDoc_STRVAR(sha3_256__doc__,
-"sha3_256([data]) -> SHA3 object\n\
+"sha3_256([data], *, usedforsecurity=True) -> SHA3 object\n\
 \n\
 Return a new SHA3 hash object with a hashbit length of 32 bytes.");
 
 PyDoc_STRVAR(sha3_384__doc__,
-"sha3_384([data]) -> SHA3 object\n\
+"sha3_384([data], *, usedforsecurity=True) -> SHA3 object\n\
 \n\
 Return a new SHA3 hash object with a hashbit length of 48 bytes.");
 
 PyDoc_STRVAR(sha3_512__doc__,
-"sha3_512([data]) -> SHA3 object\n\
+"sha3_512([data], *, usedforsecurity=True) -> SHA3 object\n\
 \n\
 Return a new SHA3 hash object with a hashbit length of 64 bytes.");
 
@@ -555,22 +558,22 @@
 
 #ifdef PY_WITH_KECCAK
 PyDoc_STRVAR(keccak_224__doc__,
-"keccak_224([data]) -> Keccak object\n\
+"keccak_224([data], *, usedforsecurity=True) -> Keccak object\n\
 \n\
 Return a new Keccak hash object with a hashbit length of 28 bytes.");
 
 PyDoc_STRVAR(keccak_256__doc__,
-"keccak_256([data]) -> Keccak object\n\
+"keccak_256([data], *, usedforsecurity=True) -> Keccak object\n\
 \n\
 Return a new Keccak hash object with a hashbit length of 32 bytes.");
 
 PyDoc_STRVAR(keccak_384__doc__,
-"keccak_384([data]) -> Keccak object\n\
+"keccak_384([data], *, usedforsecurity=True) -> Keccak object\n\
 \n\
 Return a new Keccak hash object with a hashbit length of 48 bytes.");
 
 PyDoc_STRVAR(keccak_512__doc__,
-"keccak_512([data]) -> Keccak object\n\
+"keccak_512([data], *, usedforsecurity=True) -> Keccak object\n\
 \n\
 Return a new Keccak hash object with a hashbit length of 64 bytes.");
 
@@ -672,12 +675,12 @@
 };
 
 PyDoc_STRVAR(shake_128__doc__,
-"shake_128([data]) -> SHAKE object\n\
+"shake_128([data], *, usedforsecurity=True) -> SHAKE object\n\
 \n\
 Return a new SHAKE hash object.");
 
 PyDoc_STRVAR(shake_256__doc__,
-"shake_256([data]) -> SHAKE object\n\
+"shake_256([data], *, usedforsecurity=True) -> SHAKE object\n\
 \n\
 Return a new SHAKE hash object.");
 
@@ -710,7 +713,7 @@
 
 #define init_sha3type(name, type)     \
     do {                              \
-        Py_TYPE(type) = &PyType_Type; \
+        Py_SET_TYPE(type, &PyType_Type); \
         if (PyType_Ready(type) < 0) { \
             goto error;               \
         }                             \
diff --git a/Modules/_sqlite/cache.c b/Modules/_sqlite/cache.c
index 4d41804..758fc02 100644
--- a/Modules/_sqlite/cache.c
+++ b/Modules/_sqlite/cache.c
@@ -112,9 +112,8 @@
     Py_TYPE(self)->tp_free((PyObject*)self);
 }
 
-PyObject* pysqlite_cache_get(pysqlite_Cache* self, PyObject* args)
+PyObject* pysqlite_cache_get(pysqlite_Cache* self, PyObject* key)
 {
-    PyObject* key = args;
     pysqlite_Node* node;
     pysqlite_Node* ptr;
     PyObject* data;
@@ -184,6 +183,9 @@
             }
         }
 
+        /* We cannot replace this by PyObject_CallOneArg() since
+         * PyObject_CallFunction() has a special case when using a
+         * single tuple as argument. */
         data = PyObject_CallFunction(self->factory, "O", key);
 
         if (!data) {
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index ebe073f..b800373 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -23,15 +23,13 @@
 
 #include "cache.h"
 #include "module.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "connection.h"
 #include "statement.h"
 #include "cursor.h"
 #include "prepare_protocol.h"
 #include "util.h"
 
-#include "pythread.h"
-
 #define ACTION_FINALIZE 1
 #define ACTION_RESET 2
 
@@ -79,7 +77,7 @@
         NULL
     };
 
-    char* database;
+    const char* database;
     PyObject* database_obj;
     int detect_types = 0;
     PyObject* isolation_level = NULL;
@@ -308,7 +306,7 @@
         factory = (PyObject*)&pysqlite_CursorType;
     }
 
-    cursor = PyObject_CallFunctionObjArgs(factory, (PyObject *)self, NULL);
+    cursor = PyObject_CallOneArg(factory, (PyObject *)self);
     if (cursor == NULL)
         return NULL;
     if (!PyObject_TypeCheck(cursor, &pysqlite_CursorType)) {
@@ -550,7 +548,7 @@
         cur_value = argv[i];
         switch (sqlite3_value_type(argv[i])) {
             case SQLITE_INTEGER:
-                cur_py_value = _pysqlite_long_from_int64(sqlite3_value_int64(cur_value));
+                cur_py_value = PyLong_FromLongLong(sqlite3_value_int64(cur_value));
                 break;
             case SQLITE_FLOAT:
                 cur_py_value = PyFloat_FromDouble(sqlite3_value_double(cur_value));
@@ -709,7 +707,7 @@
     PyErr_Fetch(&exception, &value, &tb);
     restore = 1;
 
-    function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, NULL);
+    function_result = _PyObject_CallMethodIdNoArgs(*aggregate_instance, &PyId_finalize);
 
     Py_DECREF(*aggregate_instance);
 
@@ -975,7 +973,7 @@
     py_statement = PyUnicode_DecodeUTF8(statement_string,
             strlen(statement_string), "replace");
     if (py_statement) {
-        ret = PyObject_CallFunctionObjArgs((PyObject*)user_arg, py_statement, NULL);
+        ret = PyObject_CallOneArg((PyObject*)user_arg, py_statement);
         Py_DECREF(py_statement);
     }
 
@@ -1192,9 +1190,9 @@
             return -1;
         }
 
-        uppercase_level = _PyObject_CallMethodIdObjArgs(
+        uppercase_level = _PyObject_CallMethodIdOneArg(
                         (PyObject *)&PyUnicode_Type, &PyId_upper,
-                        isolation_level, NULL);
+                        isolation_level);
         if (!uppercase_level) {
             return -1;
         }
@@ -1230,7 +1228,7 @@
     if (!_PyArg_NoKeywords(MODULE_NAME ".Connection", kwargs))
         return NULL;
 
-    if (!PyArg_ParseTuple(args, "O", &sql))
+    if (!PyArg_ParseTuple(args, "U", &sql))
         return NULL;
 
     _pysqlite_drop_unused_statement_references(self);
@@ -1282,7 +1280,7 @@
     PyObject* result = 0;
     PyObject* method = 0;
 
-    cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL);
+    cursor = _PyObject_CallMethodIdNoArgs((PyObject*)self, &PyId_cursor);
     if (!cursor) {
         goto error;
     }
@@ -1311,7 +1309,7 @@
     PyObject* result = 0;
     PyObject* method = 0;
 
-    cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL);
+    cursor = _PyObject_CallMethodIdNoArgs((PyObject*)self, &PyId_cursor);
     if (!cursor) {
         goto error;
     }
@@ -1340,7 +1338,7 @@
     PyObject* result = 0;
     PyObject* method = 0;
 
-    cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL);
+    cursor = _PyObject_CallMethodIdNoArgs((PyObject*)self, &PyId_cursor);
     if (!cursor) {
         goto error;
     }
@@ -1472,16 +1470,9 @@
         goto finally;
     }
 
-    args = PyTuple_New(1);
-    if (!args) {
-        goto finally;
-    }
-    Py_INCREF(self);
-    PyTuple_SetItem(args, 0, (PyObject*)self);
-    retval = PyObject_CallObject(pyfn_iterdump, args);
+    retval = PyObject_CallOneArg(pyfn_iterdump, (PyObject *)self);
 
 finally:
-    Py_XDECREF(args);
     Py_XDECREF(module);
     return retval;
 }
@@ -1523,6 +1514,10 @@
         sleep_ms = (int)ms;
     }
 
+    if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
+        return NULL;
+    }
+
     if (!pysqlite_check_connection((pysqlite_Connection *)target)) {
         return NULL;
     }
@@ -1651,7 +1646,7 @@
     const char *uppercase_name_str;
     int rc;
     unsigned int kind;
-    void *data;
+    const void *data;
 
     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
         goto finally;
@@ -1662,8 +1657,8 @@
         goto finally;
     }
 
-    uppercase_name = _PyObject_CallMethodIdObjArgs((PyObject *)&PyUnicode_Type,
-                                                   &PyId_upper, name, NULL);
+    uppercase_name = _PyObject_CallMethodIdOneArg((PyObject *)&PyUnicode_Type,
+                                                  &PyId_upper, name);
     if (!uppercase_name) {
         goto finally;
     }
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index 8cfa6e5..5cfb4b9 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -106,7 +106,7 @@
     if (!key) {
         return NULL;
     }
-    upcase_key = _PyObject_CallMethodId(key, &PyId_upper, NULL);
+    upcase_key = _PyObject_CallMethodIdNoArgs(key, &PyId_upper);
     Py_DECREF(key);
     if (!upcase_key) {
         return NULL;
@@ -274,7 +274,7 @@
                 item = PyBytes_FromStringAndSize(val_str, nbytes);
                 if (!item)
                     goto error;
-                converted = PyObject_CallFunction(converter, "O", item);
+                converted = PyObject_CallOneArg(converter, item);
                 Py_DECREF(item);
             }
         } else {
@@ -285,7 +285,7 @@
                 Py_INCREF(Py_None);
                 converted = Py_None;
             } else if (coltype == SQLITE_INTEGER) {
-                converted = _pysqlite_long_from_int64(sqlite3_column_int64(self->statement->st, i));
+                converted = PyLong_FromLongLong(sqlite3_column_int64(self->statement->st, i));
             } else if (coltype == SQLITE_FLOAT) {
                 converted = PyFloat_FromDouble(sqlite3_column_double(self->statement->st, i));
             } else if (coltype == SQLITE_TEXT) {
@@ -393,12 +393,7 @@
 
     if (multiple) {
         /* executemany() */
-        if (!PyArg_ParseTuple(args, "OO", &operation, &second_argument)) {
-            goto error;
-        }
-
-        if (!PyUnicode_Check(operation)) {
-            PyErr_SetString(PyExc_ValueError, "operation parameter must be str");
+        if (!PyArg_ParseTuple(args, "UO", &operation, &second_argument)) {
             goto error;
         }
 
@@ -415,12 +410,7 @@
         }
     } else {
         /* execute() */
-        if (!PyArg_ParseTuple(args, "O|O", &operation, &second_argument)) {
-            goto error;
-        }
-
-        if (!PyUnicode_Check(operation)) {
-            PyErr_SetString(PyExc_ValueError, "operation parameter must be str");
+        if (!PyArg_ParseTuple(args, "U|O", &operation, &second_argument)) {
             goto error;
         }
 
@@ -583,7 +573,7 @@
             Py_BEGIN_ALLOW_THREADS
             lastrowid = sqlite3_last_insert_rowid(self->connection->db);
             Py_END_ALLOW_THREADS
-            self->lastrowid = _pysqlite_long_from_int64(lastrowid);
+            self->lastrowid = PyLong_FromLongLong(lastrowid);
         }
 
         if (rc == SQLITE_ROW) {
@@ -636,7 +626,6 @@
 pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args)
 {
     PyObject* script_obj;
-    PyObject* script_str = NULL;
     const char* script_cstr;
     sqlite3_stmt* statement;
     int rc;
@@ -710,8 +699,6 @@
     }
 
 error:
-    Py_XDECREF(script_str);
-
     if (PyErr_Occurred()) {
         return NULL;
     } else {
@@ -798,7 +785,7 @@
 
 PyObject* pysqlite_cursor_fetchmany(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs)
 {
-    static char *kwlist[] = {"size", NULL, NULL};
+    static char *kwlist[] = {"size", NULL};
 
     PyObject* row;
     PyObject* list;
@@ -814,17 +801,9 @@
         return NULL;
     }
 
-    /* just make sure we enter the loop */
-    row = Py_None;
-
-    while (row) {
-        row = pysqlite_cursor_iternext(self);
-        if (row) {
-            PyList_Append(list, row);
-            Py_DECREF(row);
-        } else {
-            break;
-        }
+    while ((row = pysqlite_cursor_iternext(self))) {
+        PyList_Append(list, row);
+        Py_XDECREF(row);
 
         if (++counter == maxrows) {
             break;
@@ -849,15 +828,9 @@
         return NULL;
     }
 
-    /* just make sure we enter the loop */
-    row = (PyObject*)Py_None;
-
-    while (row) {
-        row = pysqlite_cursor_iternext(self);
-        if (row) {
-            PyList_Append(list, row);
-            Py_DECREF(row);
-        }
+    while ((row = pysqlite_cursor_iternext(self))) {
+        PyList_Append(list, row);
+        Py_XDECREF(row);
     }
 
     if (PyErr_Occurred()) {
diff --git a/Modules/_sqlite/microprotocols.c b/Modules/_sqlite/microprotocols.c
index c23b09f..3b2d7f4 100644
--- a/Modules/_sqlite/microprotocols.c
+++ b/Modules/_sqlite/microprotocols.c
@@ -24,7 +24,6 @@
  */
 
 #include <Python.h>
-#include <structmember.h>
 
 #include "cursor.h"
 #include "microprotocols.h"
@@ -84,7 +83,7 @@
        way to get a quotable object to be its instance */
 
     /* look for an adapter in the registry */
-    key = Py_BuildValue("(OO)", (PyObject*)obj->ob_type, proto);
+    key = Py_BuildValue("(OO)", (PyObject*)Py_TYPE(obj), proto);
     if (!key) {
         return NULL;
     }
@@ -92,7 +91,7 @@
     Py_DECREF(key);
     if (adapter) {
         Py_INCREF(adapter);
-        adapted = PyObject_CallFunctionObjArgs(adapter, obj, NULL);
+        adapted = PyObject_CallOneArg(adapter, obj);
         Py_DECREF(adapter);
         return adapted;
     }
@@ -105,7 +104,7 @@
         return NULL;
     }
     if (adapter) {
-        adapted = PyObject_CallFunctionObjArgs(adapter, obj, NULL);
+        adapted = PyObject_CallOneArg(adapter, obj);
         Py_DECREF(adapter);
 
         if (adapted == Py_None) {
@@ -124,7 +123,7 @@
         return NULL;
     }
     if (adapter) {
-        adapted = PyObject_CallFunctionObjArgs(adapter, proto, NULL);
+        adapted = PyObject_CallOneArg(adapter, proto);
         Py_DECREF(adapter);
 
         if (adapted == Py_None) {
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 9fe0dc9..71d951e 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -105,7 +105,7 @@
 static PyObject* module_complete(PyObject* self, PyObject* args, PyObject*
         kwargs)
 {
-    static char *kwlist[] = {"statement", NULL, NULL};
+    static char *kwlist[] = {"statement", NULL};
     char* statement;
 
     PyObject* result;
@@ -135,7 +135,7 @@
 static PyObject* module_enable_shared_cache(PyObject* self, PyObject* args, PyObject*
         kwargs)
 {
-    static char *kwlist[] = {"do_enable", NULL, NULL};
+    static char *kwlist[] = {"do_enable", NULL};
     int do_enable;
     int rc;
 
@@ -203,7 +203,7 @@
     }
 
     /* convert the name to upper case */
-    name = _PyObject_CallMethodId(orig_name, &PyId_upper, NULL);
+    name = _PyObject_CallMethodIdNoArgs(orig_name, &PyId_upper);
     if (!name) {
         goto error;
     }
@@ -346,6 +346,14 @@
         NULL
 };
 
+#define ADD_TYPE(module, type)                 \
+do {                                           \
+    if (PyModule_AddType(module, &type) < 0) { \
+        Py_DECREF(module);                     \
+        return NULL;                           \
+    }                                          \
+} while (0)
+
 PyMODINIT_FUNC PyInit__sqlite3(void)
 {
     PyObject *module, *dict;
@@ -366,14 +374,10 @@
         return NULL;
     }
 
-    Py_INCREF(&pysqlite_ConnectionType);
-    PyModule_AddObject(module, "Connection", (PyObject*) &pysqlite_ConnectionType);
-    Py_INCREF(&pysqlite_CursorType);
-    PyModule_AddObject(module, "Cursor", (PyObject*) &pysqlite_CursorType);
-    Py_INCREF(&pysqlite_PrepareProtocolType);
-    PyModule_AddObject(module, "PrepareProtocol", (PyObject*) &pysqlite_PrepareProtocolType);
-    Py_INCREF(&pysqlite_RowType);
-    PyModule_AddObject(module, "Row", (PyObject*) &pysqlite_RowType);
+    ADD_TYPE(module, pysqlite_ConnectionType);
+    ADD_TYPE(module, pysqlite_CursorType);
+    ADD_TYPE(module, pysqlite_PrepareProtocolType);
+    ADD_TYPE(module, pysqlite_RowType);
 
     if (!(dict = PyModule_GetDict(module))) {
         goto error;
diff --git a/Modules/_sqlite/prepare_protocol.c b/Modules/_sqlite/prepare_protocol.c
index 181c7ed..05a2ca5 100644
--- a/Modules/_sqlite/prepare_protocol.c
+++ b/Modules/_sqlite/prepare_protocol.c
@@ -78,6 +78,6 @@
 extern int pysqlite_prepare_protocol_setup_types(void)
 {
     pysqlite_PrepareProtocolType.tp_new = PyType_GenericNew;
-    Py_TYPE(&pysqlite_PrepareProtocolType)= &PyType_Type;
+    Py_SET_TYPE(&pysqlite_PrepareProtocolType, &PyType_Type);
     return PyType_Ready(&pysqlite_PrepareProtocolType);
 }
diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c
index 491294b..23c204e 100644
--- a/Modules/_sqlite/statement.c
+++ b/Modules/_sqlite/statement.c
@@ -59,6 +59,8 @@
     self->st = NULL;
     self->in_use = 0;
 
+    assert(PyUnicode_Check(sql));
+
     sql_cstr = PyUnicode_AsUTF8AndSize(sql, &sql_cstr_len);
     if (sql_cstr == NULL) {
         rc = PYSQLITE_SQL_WRONG_TYPE;
@@ -225,6 +227,9 @@
             num_params = PyList_GET_SIZE(parameters);
         } else {
             num_params = PySequence_Size(parameters);
+            if (num_params == -1) {
+                return;
+            }
         }
         if (num_params != num_params_needed) {
             PyErr_Format(pysqlite_ProgrammingError,
@@ -236,9 +241,9 @@
         for (i = 0; i < num_params; i++) {
             if (PyTuple_CheckExact(parameters)) {
                 current_param = PyTuple_GET_ITEM(parameters, i);
-                Py_XINCREF(current_param);
+                Py_INCREF(current_param);
             } else if (PyList_CheckExact(parameters)) {
-                current_param = PyList_GET_ITEM(parameters, i);
+                current_param = PyList_GetItem(parameters, i);
                 Py_XINCREF(current_param);
             } else {
                 current_param = PySequence_GetItem(parameters, i);
diff --git a/Modules/_sqlite/util.c b/Modules/_sqlite/util.c
index 3fa671d..1dbabcd 100644
--- a/Modules/_sqlite/util.c
+++ b/Modules/_sqlite/util.c
@@ -103,22 +103,6 @@
 # define IS_LITTLE_ENDIAN 1
 #endif
 
-PyObject *
-_pysqlite_long_from_int64(sqlite_int64 value)
-{
-# if SIZEOF_LONG_LONG < 8
-    if (value > PY_LLONG_MAX || value < PY_LLONG_MIN) {
-        return _PyLong_FromByteArray(&value, sizeof(value),
-                                     IS_LITTLE_ENDIAN, 1 /* signed */);
-    }
-# endif
-# if SIZEOF_LONG < SIZEOF_LONG_LONG
-    if (value > LONG_MAX || value < LONG_MIN)
-        return PyLong_FromLongLong(value);
-# endif
-    return PyLong_FromLong(Py_SAFE_DOWNCAST(value, sqlite_int64, long));
-}
-
 sqlite_int64
 _pysqlite_long_as_int64(PyObject * py_val)
 {
diff --git a/Modules/_sqlite/util.h b/Modules/_sqlite/util.h
index 6261911..c5a220e 100644
--- a/Modules/_sqlite/util.h
+++ b/Modules/_sqlite/util.h
@@ -37,7 +37,6 @@
  */
 int _pysqlite_seterror(sqlite3* db, sqlite3_stmt* st);
 
-PyObject * _pysqlite_long_from_int64(sqlite_int64 value);
 sqlite_int64 _pysqlite_long_as_int64(PyObject * value);
 
 #if SQLITE_VERSION_NUMBER >= 3007014
diff --git a/Modules/_sre.c b/Modules/_sre.c
index d4fe588..244e4f1 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -41,7 +41,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h" /* offsetof */
+#include "structmember.h"         // PyMemberDef
 
 #include "sre.h"
 
@@ -351,7 +351,7 @@
     data_stack_dealloc(state);
 }
 
-static void*
+static const void*
 getstring(PyObject* string, Py_ssize_t* p_length,
           int* p_isbytes, int* p_charsize,
           Py_buffer *view)
@@ -398,11 +398,11 @@
 
     Py_ssize_t length;
     int isbytes, charsize;
-    void* ptr;
+    const void* ptr;
 
     memset(state, 0, sizeof(SRE_STATE));
 
-    state->mark = PyMem_New(void *, pattern->groups * 2);
+    state->mark = PyMem_New(const void *, pattern->groups * 2);
     if (!state->mark) {
         PyErr_NoMemory();
         goto err;
@@ -891,7 +891,7 @@
     Py_ssize_t status;
     Py_ssize_t n;
     Py_ssize_t i;
-    void* last;
+    const void* last;
 
     assert(self->codesize != 0);
 
@@ -984,7 +984,7 @@
     PyObject* item;
     PyObject* filter;
     PyObject* match;
-    void* ptr;
+    const void* ptr;
     Py_ssize_t status;
     Py_ssize_t n;
     Py_ssize_t i, b, e;
@@ -1002,7 +1002,6 @@
         int literal;
         view.buf = NULL;
         ptr = getstring(ptemplate, &n, &isbytes, &charsize, &view);
-        b = charsize;
         if (ptr) {
             if (charsize == 1)
                 literal = memchr(ptr, '\\', n) == NULL;
@@ -1082,7 +1081,7 @@
             match = pattern_new_match(self, &state, 1);
             if (!match)
                 goto error;
-            item = PyObject_CallFunctionObjArgs(filter, match, NULL);
+            item = PyObject_CallOneArg(filter, match);
             Py_DECREF(match);
             if (!item)
                 goto error;
@@ -1339,7 +1338,7 @@
 
     n = PyList_GET_SIZE(code);
     /* coverity[ampersand_in_size] */
-    self = PyObject_NEW_VAR(PatternObject, &Pattern_Type, n);
+    self = PyObject_NewVar(PatternObject, &Pattern_Type, n);
     if (!self)
         return NULL;
     self->weakreflist = NULL;
@@ -1896,7 +1895,7 @@
     int isbytes, charsize;
     Py_buffer view;
     PyObject *result;
-    void* ptr;
+    const void* ptr;
     Py_ssize_t i, j;
 
     assert(0 <= index && index < self->groups);
@@ -2328,8 +2327,8 @@
 
         /* create match object (with room for extra group marks) */
         /* coverity[ampersand_in_size] */
-        match = PyObject_NEW_VAR(MatchObject, &Match_Type,
-                                 2*(pattern->groups+1));
+        match = PyObject_NewVar(MatchObject, &Match_Type,
+                                2*(pattern->groups+1));
         if (!match)
             return NULL;
 
@@ -2469,7 +2468,7 @@
     ScannerObject* scanner;
 
     /* create scanner object */
-    scanner = PyObject_NEW(ScannerObject, &Scanner_Type);
+    scanner = PyObject_New(ScannerObject, &Scanner_Type);
     if (!scanner)
         return NULL;
     scanner->pattern = NULL;
@@ -2519,7 +2518,7 @@
         Py_RETURN_NOTIMPLEMENTED;
     }
 
-    if (Py_TYPE(lefto) != &Pattern_Type || Py_TYPE(righto) != &Pattern_Type) {
+    if (!Py_IS_TYPE(lefto, &Pattern_Type) || !Py_IS_TYPE(righto, &Pattern_Type)) {
         Py_RETURN_NOTIMPLEMENTED;
     }
 
@@ -2569,6 +2568,8 @@
     _SRE_SRE_PATTERN_SCANNER_METHODDEF
     _SRE_SRE_PATTERN___COPY___METHODDEF
     _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS,
+     PyDoc_STR("See PEP 585")},
     {NULL, NULL}
 };
 
@@ -2639,6 +2640,8 @@
     _SRE_SRE_MATCH_EXPAND_METHODDEF
     _SRE_SRE_MATCH___COPY___METHODDEF
     _SRE_SRE_MATCH___DEEPCOPY___METHODDEF
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS,
+     PyDoc_STR("See PEP 585")},
     {NULL, NULL}
 };
 
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 1944393..7bdde45 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -18,8 +18,6 @@
 
 #include "Python.h"
 
-#include "pythread.h"
-
 /* Redefined below for Windows debug builds after important #includes */
 #define _PySSL_FIX_ERRNO
 
@@ -523,9 +521,9 @@
 
 static int PySSL_set_owner(PySSLSocket *, PyObject *, void *);
 static int PySSL_set_session(PySSLSocket *, PyObject *, void *);
-#define PySSLSocket_Check(v)    (Py_TYPE(v) == &PySSLSocket_Type)
-#define PySSLMemoryBIO_Check(v)    (Py_TYPE(v) == &PySSLMemoryBIO_Type)
-#define PySSLSession_Check(v)   (Py_TYPE(v) == &PySSLSession_Type)
+#define PySSLSocket_Check(v)    Py_IS_TYPE(v, &PySSLSocket_Type)
+#define PySSLMemoryBIO_Check(v)    Py_IS_TYPE(v, &PySSLMemoryBIO_Type)
+#define PySSLSession_Check(v)   Py_IS_TYPE(v, &PySSLSession_Type)
 
 typedef enum {
     SOCKET_IS_NONBLOCKING,
@@ -807,10 +805,11 @@
                         errno = err.c;
                         return PyErr_SetFromErrno(PyExc_OSError);
                     }
-                    Py_INCREF(s);
-                    s->errorhandler();
-                    Py_DECREF(s);
-                    return NULL;
+                    else {
+                        p = PY_SSL_ERROR_EOF;
+                        type = PySSLEOFErrorObject;
+                        errstr = "EOF occurred in violation of protocol";
+                    }
                 } else { /* possible? */
                     p = PY_SSL_ERROR_SYSCALL;
                     type = PySSLSyscallErrorObject;
@@ -900,6 +899,7 @@
     if (ip == NULL) {
         if (!SSL_set_tlsext_host_name(self->ssl, server_hostname)) {
             _setSSLError(NULL, 0, __FILE__, __LINE__);
+            goto error;
         }
     }
     if (self->ctx->check_hostname) {
@@ -4068,7 +4068,7 @@
 /* internal helper function, returns -1 on error
  */
 static int
-_add_ca_certs(PySSLContext *self, void *data, Py_ssize_t len,
+_add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len,
               int filetype)
 {
     BIO *biobuf = NULL;
@@ -4254,7 +4254,6 @@
         r = SSL_CTX_load_verify_locations(self->ctx, cafile_buf, capath_buf);
         PySSL_END_ALLOW_THREADS
         if (r != 1) {
-            ok = 0;
             if (errno != 0) {
                 ERR_clear_error();
                 PyErr_SetFromErrno(PyExc_OSError);
diff --git a/Modules/_stat.c b/Modules/_stat.c
index 7a799af..546e6a5 100644
--- a/Modules/_stat.c
+++ b/Modules/_stat.c
@@ -496,113 +496,140 @@
 ");
 
 
+static int
+stat_exec(PyObject *module)
+{
+#define ADD_INT_MACRO(module, macro)                                  \
+    do {                                                              \
+        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
+            return -1;                                                \
+        }                                                             \
+    } while (0)
+
+    ADD_INT_MACRO(module, S_IFDIR);
+    ADD_INT_MACRO(module, S_IFCHR);
+    ADD_INT_MACRO(module, S_IFBLK);
+    ADD_INT_MACRO(module, S_IFREG);
+    ADD_INT_MACRO(module, S_IFIFO);
+    ADD_INT_MACRO(module, S_IFLNK);
+    ADD_INT_MACRO(module, S_IFSOCK);
+    ADD_INT_MACRO(module, S_IFDOOR);
+    ADD_INT_MACRO(module, S_IFPORT);
+    ADD_INT_MACRO(module, S_IFWHT);
+
+    ADD_INT_MACRO(module, S_ISUID);
+    ADD_INT_MACRO(module, S_ISGID);
+    ADD_INT_MACRO(module, S_ISVTX);
+    ADD_INT_MACRO(module, S_ENFMT);
+
+    ADD_INT_MACRO(module, S_IREAD);
+    ADD_INT_MACRO(module, S_IWRITE);
+    ADD_INT_MACRO(module, S_IEXEC);
+
+    ADD_INT_MACRO(module, S_IRWXU);
+    ADD_INT_MACRO(module, S_IRUSR);
+    ADD_INT_MACRO(module, S_IWUSR);
+    ADD_INT_MACRO(module, S_IXUSR);
+
+    ADD_INT_MACRO(module, S_IRWXG);
+    ADD_INT_MACRO(module, S_IRGRP);
+    ADD_INT_MACRO(module, S_IWGRP);
+    ADD_INT_MACRO(module, S_IXGRP);
+
+    ADD_INT_MACRO(module, S_IRWXO);
+    ADD_INT_MACRO(module, S_IROTH);
+    ADD_INT_MACRO(module, S_IWOTH);
+    ADD_INT_MACRO(module, S_IXOTH);
+
+    ADD_INT_MACRO(module, UF_NODUMP);
+    ADD_INT_MACRO(module, UF_IMMUTABLE);
+    ADD_INT_MACRO(module, UF_APPEND);
+    ADD_INT_MACRO(module, UF_OPAQUE);
+    ADD_INT_MACRO(module, UF_NOUNLINK);
+    ADD_INT_MACRO(module, UF_COMPRESSED);
+    ADD_INT_MACRO(module, UF_HIDDEN);
+    ADD_INT_MACRO(module, SF_ARCHIVED);
+    ADD_INT_MACRO(module, SF_IMMUTABLE);
+    ADD_INT_MACRO(module, SF_APPEND);
+    ADD_INT_MACRO(module, SF_NOUNLINK);
+    ADD_INT_MACRO(module, SF_SNAPSHOT);
+
+    const char* st_constants[] = {
+        "ST_MODE",
+        "ST_INO",
+        "ST_DEV",
+        "ST_NLINK",
+        "ST_UID",
+        "ST_GID",
+        "ST_SIZE",
+        "ST_ATIME",
+        "ST_MTIME",
+        "ST_CTIME"
+    };
+
+    for (int i = 0; i < (int)Py_ARRAY_LENGTH(st_constants); i++) {
+        if (PyModule_AddIntConstant(module, st_constants[i], i) < 0) {
+            return -1;
+        }
+    }
+
+#ifdef MS_WINDOWS
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_ARCHIVE);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_COMPRESSED);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_DEVICE);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_DIRECTORY);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_ENCRYPTED);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_HIDDEN);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_INTEGRITY_STREAM);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_NORMAL);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_NO_SCRUB_DATA);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_OFFLINE);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_READONLY);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_REPARSE_POINT);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_SPARSE_FILE);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_SYSTEM);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_TEMPORARY);
+    ADD_INT_MACRO(module, FILE_ATTRIBUTE_VIRTUAL);
+
+    if (PyModule_AddObject(module, "IO_REPARSE_TAG_SYMLINK",
+                           PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK)) < 0) {
+            return -1;
+    }
+    if (PyModule_AddObject(module, "IO_REPARSE_TAG_MOUNT_POINT",
+                           PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT)) < 0) {
+            return -1;
+    }
+    if (PyModule_AddObject(module, "IO_REPARSE_TAG_APPEXECLINK",
+                           PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK)) < 0) {
+            return -1;
+    }
+#endif
+
+    return 0;
+}
+
+
+static PyModuleDef_Slot stat_slots[] = {
+    {Py_mod_exec, stat_exec},
+    {0, NULL}
+};
+
+
 static struct PyModuleDef statmodule = {
     PyModuleDef_HEAD_INIT,
-    "_stat",
-    module_doc,
-    -1,
-    stat_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    .m_name = "_stat",
+    .m_doc = module_doc,
+    .m_size = 0,
+    .m_methods = stat_methods,
+    .m_slots = stat_slots,
 };
 
+
 PyMODINIT_FUNC
 PyInit__stat(void)
 {
-    PyObject *m;
-    m = PyModule_Create(&statmodule);
-    if (m == NULL)
-        return NULL;
-
-    if (PyModule_AddIntMacro(m, S_IFDIR)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFCHR)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFBLK)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFREG)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFIFO)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFLNK)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFSOCK)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFDOOR)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFPORT)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IFWHT)) return NULL;
-
-    if (PyModule_AddIntMacro(m, S_ISUID)) return NULL;
-    if (PyModule_AddIntMacro(m, S_ISGID)) return NULL;
-    if (PyModule_AddIntMacro(m, S_ISVTX)) return NULL;
-    if (PyModule_AddIntMacro(m, S_ENFMT)) return NULL;
-
-    if (PyModule_AddIntMacro(m, S_IREAD)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IWRITE)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IEXEC)) return NULL;
-
-    if (PyModule_AddIntMacro(m, S_IRWXU)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IRUSR)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IWUSR)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IXUSR)) return NULL;
-
-    if (PyModule_AddIntMacro(m, S_IRWXG)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IRGRP)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IWGRP)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IXGRP)) return NULL;
-
-    if (PyModule_AddIntMacro(m, S_IRWXO)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IROTH)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IWOTH)) return NULL;
-    if (PyModule_AddIntMacro(m, S_IXOTH)) return NULL;
-
-    if (PyModule_AddIntMacro(m, UF_NODUMP)) return NULL;
-    if (PyModule_AddIntMacro(m, UF_IMMUTABLE)) return NULL;
-    if (PyModule_AddIntMacro(m, UF_APPEND)) return NULL;
-    if (PyModule_AddIntMacro(m, UF_OPAQUE)) return NULL;
-    if (PyModule_AddIntMacro(m, UF_NOUNLINK)) return NULL;
-    if (PyModule_AddIntMacro(m, UF_COMPRESSED)) return NULL;
-    if (PyModule_AddIntMacro(m, UF_HIDDEN)) return NULL;
-    if (PyModule_AddIntMacro(m, SF_ARCHIVED)) return NULL;
-    if (PyModule_AddIntMacro(m, SF_IMMUTABLE)) return NULL;
-    if (PyModule_AddIntMacro(m, SF_APPEND)) return NULL;
-    if (PyModule_AddIntMacro(m, SF_NOUNLINK)) return NULL;
-    if (PyModule_AddIntMacro(m, SF_SNAPSHOT)) return NULL;
-
-    if (PyModule_AddIntConstant(m, "ST_MODE", 0)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_INO", 1)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_DEV", 2)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_NLINK", 3)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_UID", 4)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_GID", 5)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_SIZE", 6)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_ATIME", 7)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_MTIME", 8)) return NULL;
-    if (PyModule_AddIntConstant(m, "ST_CTIME", 9)) return NULL;
-
-#ifdef MS_WINDOWS
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_ARCHIVE)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_COMPRESSED)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_DEVICE)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_DIRECTORY)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_ENCRYPTED)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_HIDDEN)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_INTEGRITY_STREAM)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_NORMAL)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_NO_SCRUB_DATA)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_OFFLINE)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_READONLY)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_REPARSE_POINT)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_SPARSE_FILE)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_SYSTEM)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_TEMPORARY)) return NULL;
-    if (PyModule_AddIntMacro(m, FILE_ATTRIBUTE_VIRTUAL)) return NULL;
-
-    if (PyModule_AddObject(m, "IO_REPARSE_TAG_SYMLINK",
-        PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK))) return NULL;
-    if (PyModule_AddObject(m, "IO_REPARSE_TAG_MOUNT_POINT",
-        PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT))) return NULL;
-    if (PyModule_AddObject(m, "IO_REPARSE_TAG_APPEXECLINK",
-        PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK))) return NULL;
-#endif
-
-    return m;
+    return PyModuleDef_Init(&statmodule);
 }
 
 #ifdef __cplusplus
diff --git a/Modules/_statisticsmodule.c b/Modules/_statisticsmodule.c
index a646e96..78c0676 100644
--- a/Modules/_statisticsmodule.c
+++ b/Modules/_statisticsmodule.c
@@ -1,7 +1,6 @@
 /* statistics accelerator C extension: _statistics module. */
 
 #include "Python.h"
-#include "structmember.h"
 #include "clinic/_statisticsmodule.c.h"
 
 /*[clinic input]
@@ -129,13 +128,17 @@
 PyDoc_STRVAR(statistics_doc,
 "Accelerators for the statistics module.\n");
 
+static struct PyModuleDef_Slot _statisticsmodule_slots[] = {
+    {0, NULL}
+};
+
 static struct PyModuleDef statisticsmodule = {
         PyModuleDef_HEAD_INIT,
         "_statistics",
         statistics_doc,
-        -1,
+        0,
         statistics_methods,
-        NULL,
+        _statisticsmodule_slots,
         NULL,
         NULL,
         NULL
@@ -144,7 +147,5 @@
 PyMODINIT_FUNC
 PyInit__statistics(void)
 {
-    PyObject *m = PyModule_Create(&statisticsmodule);
-    if (!m) return NULL;
-    return m;
+    return PyModuleDef_Init(&statisticsmodule);
 }
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 64a9827..f759f0b 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -6,7 +6,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include <ctype.h>
 
 /*[clinic input]
@@ -14,7 +14,23 @@
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=9b032058a83ed7c3]*/
 
-static PyTypeObject PyStructType;
+typedef struct {
+    PyObject *PyStructType;
+    PyObject *unpackiter_type;
+    PyObject *StructError;
+} _structmodulestate;
+
+static inline _structmodulestate*
+get_struct_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_structmodulestate *)state;
+}
+
+static struct PyModuleDef _structmodule;
+
+#define _structmodulestate_global get_struct_state(PyState_FindModule(&_structmodule))
 
 /* The translation function for each format character is table driven */
 typedef struct _formatdef {
@@ -46,13 +62,8 @@
 } PyStructObject;
 
 
-#define PyStruct_Check(op) PyObject_TypeCheck(op, &PyStructType)
-#define PyStruct_CheckExact(op) (Py_TYPE(op) == &PyStructType)
-
-
-/* Exception */
-
-static PyObject *StructError;
+#define PyStruct_Check(op) PyObject_TypeCheck(op, (PyTypeObject *)_structmodulestate_global->PyStructType)
+#define PyStruct_CheckExact(op) Py_IS_TYPE(op, (PyTypeObject *)_structmodulestate_global->PyStructType)
 
 
 /* Define various structs to figure out the alignments of types */
@@ -115,7 +126,7 @@
                 return NULL;
         }
         else {
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "required argument is not an integer");
             return NULL;
         }
@@ -143,7 +154,7 @@
     Py_DECREF(v);
     if (x == (long)-1 && PyErr_Occurred()) {
         if (PyErr_ExceptionMatches(PyExc_OverflowError))
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "argument out of range");
         return -1;
     }
@@ -167,7 +178,7 @@
     Py_DECREF(v);
     if (x == (unsigned long)-1 && PyErr_Occurred()) {
         if (PyErr_ExceptionMatches(PyExc_OverflowError))
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "argument out of range");
         return -1;
     }
@@ -190,7 +201,7 @@
     Py_DECREF(v);
     if (x == (long long)-1 && PyErr_Occurred()) {
         if (PyErr_ExceptionMatches(PyExc_OverflowError))
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "argument out of range");
         return -1;
     }
@@ -213,7 +224,7 @@
     Py_DECREF(v);
     if (x == (unsigned long long)-1 && PyErr_Occurred()) {
         if (PyErr_ExceptionMatches(PyExc_OverflowError))
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "argument out of range");
         return -1;
     }
@@ -236,7 +247,7 @@
     Py_DECREF(v);
     if (x == (Py_ssize_t)-1 && PyErr_Occurred()) {
         if (PyErr_ExceptionMatches(PyExc_OverflowError))
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "argument out of range");
         return -1;
     }
@@ -259,7 +270,7 @@
     Py_DECREF(v);
     if (x == (size_t)-1 && PyErr_Occurred()) {
         if (PyErr_ExceptionMatches(PyExc_OverflowError))
-            PyErr_SetString(StructError,
+            PyErr_SetString(_structmodulestate_global->StructError,
                             "argument out of range");
         return -1;
     }
@@ -293,7 +304,7 @@
 {
     double x = PyFloat_AsDouble(v);
     if (x == -1.0 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -339,13 +350,13 @@
     const size_t ulargest = (size_t)-1 >> ((SIZEOF_SIZE_T - f->size)*8);
     assert(f->size >= 1 && f->size <= SIZEOF_SIZE_T);
     if (is_unsigned)
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
             "'%c' format requires 0 <= number <= %zu",
             f->format,
             ulargest);
     else {
         const Py_ssize_t largest = (Py_ssize_t)(ulargest >> 1);
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
             "'%c' format requires %zd <= number <= %zd",
             f->format,
             ~ largest,
@@ -361,8 +372,8 @@
 
    [bln][up]_TYPE
 
-   [bln] distiguishes among big-endian, little-endian and native.
-   [pu] distiguishes between pack (to struct) and unpack (from struct).
+   [bln] distinguishes among big-endian, little-endian and native.
+   [pu] distinguishes between pack (to struct) and unpack (from struct).
    TYPE is one of char, byte, ubyte, etc.
 */
 
@@ -524,7 +535,7 @@
     if (get_long(v, &x) < 0)
         return -1;
     if (x < -128 || x > 127) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "byte format requires -128 <= number <= 127");
         return -1;
     }
@@ -539,7 +550,7 @@
     if (get_long(v, &x) < 0)
         return -1;
     if (x < 0 || x > 255) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "ubyte format requires 0 <= number <= 255");
         return -1;
     }
@@ -550,8 +561,8 @@
 static int
 np_char(char *p, PyObject *v, const formatdef *f)
 {
-    if (!PyBytes_Check(v) || PyBytes_GET_SIZE(v) != 1) {
-        PyErr_SetString(StructError,
+    if (!PyBytes_Check(v) || PyBytes_Size(v) != 1) {
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "char format requires a bytes object of length 1");
         return -1;
     }
@@ -567,7 +578,7 @@
     if (get_long(v, &x) < 0)
         return -1;
     if (x < SHRT_MIN || x > SHRT_MAX) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "short format requires " Py_STRINGIFY(SHRT_MIN)
                         " <= number <= " Py_STRINGIFY(SHRT_MAX));
         return -1;
@@ -585,7 +596,7 @@
     if (get_long(v, &x) < 0)
         return -1;
     if (x < 0 || x > USHRT_MAX) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "ushort format requires 0 <= number <= "
                         Py_STRINGIFY(USHRT_MAX));
         return -1;
@@ -716,7 +727,7 @@
 {
     float x = (float)PyFloat_AsDouble(v);
     if (x == -1 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -729,7 +740,7 @@
 {
     double x = PyFloat_AsDouble(v);
     if (x == -1 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -948,7 +959,7 @@
 {
     double x = PyFloat_AsDouble(v);
     if (x == -1 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -960,7 +971,7 @@
 {
     double x = PyFloat_AsDouble(v);
     if (x == -1 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -1163,7 +1174,7 @@
 {
     double x = PyFloat_AsDouble(v);
     if (x == -1 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -1175,7 +1186,7 @@
 {
     double x = PyFloat_AsDouble(v);
     if (x == -1 && PyErr_Occurred()) {
-        PyErr_SetString(StructError,
+        PyErr_SetString(_structmodulestate_global->StructError,
                         "required argument is not a float");
         return -1;
     }
@@ -1242,7 +1253,7 @@
             return f;
         }
     }
-    PyErr_SetString(StructError, "bad char in struct format");
+    PyErr_SetString(_structmodulestate_global->StructError, "bad char in struct format");
     return NULL;
 }
 
@@ -1286,7 +1297,8 @@
 
     fmt = PyBytes_AS_STRING(self->s_format);
     if (strlen(fmt) != (size_t)PyBytes_GET_SIZE(self->s_format)) {
-        PyErr_SetString(StructError, "embedded null character");
+        PyErr_SetString(_structmodulestate_global->StructError,
+                        "embedded null character");
         return -1;
     }
 
@@ -1297,7 +1309,7 @@
     len = 0;
     ncodes = 0;
     while ((c = *s++) != '\0') {
-        if (Py_ISSPACE(Py_CHARMASK(c)))
+        if (Py_ISSPACE(c))
             continue;
         if ('0' <= c && c <= '9') {
             num = c - '0';
@@ -1311,7 +1323,7 @@
                 num = num*10 + (c - '0');
             }
             if (c == '\0') {
-                PyErr_SetString(StructError,
+                PyErr_SetString(_structmodulestate_global->StructError,
                                 "repeat count given without format specifier");
                 return -1;
             }
@@ -1362,7 +1374,7 @@
     s = fmt;
     size = 0;
     while ((c = *s++) != '\0') {
-        if (Py_ISSPACE(Py_CHARMASK(c)))
+        if (Py_ISSPACE(c))
             continue;
         if ('0' <= c && c <= '9') {
             num = c - '0';
@@ -1401,7 +1413,7 @@
     return 0;
 
   overflow:
-    PyErr_SetString(StructError,
+    PyErr_SetString(_structmodulestate_global->StructError,
                     "total struct size too long");
     return -1;
 }
@@ -1411,9 +1423,11 @@
 {
     PyObject *self;
 
-    assert(type != NULL && type->tp_alloc != NULL);
+    assert(type != NULL);
+    allocfunc alloc_func = PyType_GetSlot(type, Py_tp_alloc);
+    assert(alloc_func != NULL);
 
-    self = type->tp_alloc(type, 0);
+    self = alloc_func(type, 0);
     if (self != NULL) {
         PyStructObject *s = (PyStructObject*)self;
         Py_INCREF(Py_None);
@@ -1459,7 +1473,7 @@
         PyErr_Format(PyExc_TypeError,
                      "Struct() argument 1 must be a str or bytes object, "
                      "not %.200s",
-                     Py_TYPE(format)->tp_name);
+                     _PyType_Name(Py_TYPE(format)));
         return -1;
     }
 
@@ -1472,13 +1486,16 @@
 static void
 s_dealloc(PyStructObject *s)
 {
+    PyTypeObject *tp = Py_TYPE(s);
     if (s->weakreflist != NULL)
         PyObject_ClearWeakRefs((PyObject *)s);
     if (s->s_codes != NULL) {
         PyMem_FREE(s->s_codes);
     }
-    Py_DECREF(s->s_format);
-    Py_TYPE(s)->tp_free((PyObject *)s);
+    Py_XDECREF(s->s_format);
+    freefunc free_func = PyType_GetSlot(Py_TYPE(s), Py_tp_free);
+    free_func(s);
+    Py_DECREF(tp);
 }
 
 static PyObject *
@@ -1539,7 +1556,7 @@
 {
     assert(self->s_codes != NULL);
     if (buffer->len != self->s_size) {
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
                      "unpack requires a buffer of %zd bytes",
                      self->s_size);
         return NULL;
@@ -1572,7 +1589,7 @@
 
     if (offset < 0) {
         if (offset + self->s_size > 0) {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                          "not enough data to unpack %zd bytes at offset %zd",
                          self->s_size,
                          offset);
@@ -1580,7 +1597,7 @@
         }
 
         if (offset + buffer->len < 0) {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                          "offset %zd out of range for %zd-byte buffer",
                          offset,
                          buffer->len);
@@ -1590,7 +1607,7 @@
     }
 
     if ((buffer->len - offset) < self->s_size) {
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
                      "unpack_from requires a buffer of at least %zu bytes for "
                      "unpacking %zd bytes at offset %zd "
                      "(actual buffer size is %zd)",
@@ -1618,15 +1635,18 @@
 unpackiter_dealloc(unpackiterobject *self)
 {
     /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyTypeObject *tp = Py_TYPE(self);
     PyObject_GC_UnTrack(self);
     Py_XDECREF(self->so);
     PyBuffer_Release(&self->buf);
     PyObject_GC_Del(self);
+    Py_DECREF(tp);
 }
 
 static int
 unpackiter_traverse(unpackiterobject *self, visitproc visit, void *arg)
 {
+    Py_VISIT(Py_TYPE(self));
     Py_VISIT(self->so);
     Py_VISIT(self->buf.obj);
     return 0;
@@ -1667,35 +1687,28 @@
     return result;
 }
 
-static PyTypeObject unpackiter_type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "unpack_iterator",                          /* tp_name */
-    sizeof(unpackiterobject),                   /* tp_basicsize */
-    0,                                          /* tp_itemsize */
-    (destructor)unpackiter_dealloc,             /* tp_dealloc */
-    0,                                          /* tp_vectorcall_offset */
-    0,                                          /* tp_getattr */
-    0,                                          /* tp_setattr */
-    0,                                          /* tp_as_async */
-    0,                                          /* tp_repr */
-    0,                                          /* tp_as_number */
-    0,                                          /* tp_as_sequence */
-    0,                                          /* tp_as_mapping */
-    0,                                          /* tp_hash */
-    0,                                          /* tp_call */
-    0,                                          /* tp_str */
-    PyObject_GenericGetAttr,                    /* tp_getattro */
-    0,                                          /* tp_setattro */
-    0,                                          /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,    /* tp_flags */
-    0,                                          /* tp_doc */
-    (traverseproc)unpackiter_traverse,          /* tp_traverse */
-    0,                                          /* tp_clear */
-    0,                                          /* tp_richcompare */
-    0,                                          /* tp_weaklistoffset */
-    PyObject_SelfIter,                          /* tp_iter */
-    (iternextfunc)unpackiter_iternext,          /* tp_iternext */
-    unpackiter_methods                          /* tp_methods */
+PyObject *unpackiter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
+    PyErr_Format(PyExc_TypeError, "Cannot create '%.200s objects", _PyType_Name(type));
+    return NULL;
+}
+
+static PyType_Slot unpackiter_type_slots[] = {
+    {Py_tp_dealloc, unpackiter_dealloc},
+    {Py_tp_getattro, PyObject_GenericGetAttr},
+    {Py_tp_traverse, unpackiter_traverse},
+    {Py_tp_iter, PyObject_SelfIter},
+    {Py_tp_iternext, unpackiter_iternext},
+    {Py_tp_methods, unpackiter_methods},
+    {Py_tp_new, unpackiter_new},
+    {0, 0},
+};
+
+static PyType_Spec unpackiter_type_spec = {
+    "_struct.unpack_iterator",
+    sizeof(unpackiterobject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    unpackiter_type_slots
 };
 
 /*[clinic input]
@@ -1721,12 +1734,12 @@
     assert(self->s_codes != NULL);
 
     if (self->s_size == 0) {
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
                      "cannot iteratively unpack with a struct of length 0");
         return NULL;
     }
 
-    iter = (unpackiterobject *) PyType_GenericAlloc(&unpackiter_type, 0);
+    iter = (unpackiterobject *) PyType_GenericAlloc((PyTypeObject *)_structmodulestate_global->unpackiter_type, 0);
     if (iter == NULL)
         return NULL;
 
@@ -1735,7 +1748,7 @@
         return NULL;
     }
     if (iter->buf.len % self->s_size != 0) {
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
                      "iterative unpacking requires a buffer of "
                      "a multiple of %zd bytes",
                      self->s_size);
@@ -1778,10 +1791,10 @@
             if (e->format == 's') {
                 Py_ssize_t n;
                 int isstring;
-                void *p;
+                const void *p;
                 isstring = PyBytes_Check(v);
                 if (!isstring && !PyByteArray_Check(v)) {
-                    PyErr_SetString(StructError,
+                    PyErr_SetString(_structmodulestate_global->StructError,
                                     "argument for 's' must be a bytes object");
                     return -1;
                 }
@@ -1800,10 +1813,10 @@
             } else if (e->format == 'p') {
                 Py_ssize_t n;
                 int isstring;
-                void *p;
+                const void *p;
                 isstring = PyBytes_Check(v);
                 if (!isstring && !PyByteArray_Check(v)) {
-                    PyErr_SetString(StructError,
+                    PyErr_SetString(_structmodulestate_global->StructError,
                                     "argument for 'p' must be a bytes object");
                     return -1;
                 }
@@ -1825,7 +1838,7 @@
             } else {
                 if (e->pack(res, v, e) < 0) {
                     if (PyLong_Check(v) && PyErr_ExceptionMatches(PyExc_OverflowError))
-                        PyErr_SetString(StructError,
+                        PyErr_SetString(_structmodulestate_global->StructError,
                                         "int too large to convert");
                     return -1;
                 }
@@ -1849,8 +1862,8 @@
 static PyObject *
 s_pack(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
 {
+    char *buf;
     PyStructObject *soself;
-    PyObject *result;
 
     /* Validate arguments. */
     soself = (PyStructObject *)self;
@@ -1858,23 +1871,27 @@
     assert(soself->s_codes != NULL);
     if (nargs != soself->s_len)
     {
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
             "pack expected %zd items for packing (got %zd)", soself->s_len, nargs);
         return NULL;
     }
 
-    /* Allocate a new buffer */
-    result = PyBytes_FromStringAndSize((char *)NULL, soself->s_size);
-    if (result == NULL)
-        return NULL;
-
-    /* Call the guts */
-    if ( s_pack_internal(soself, args, 0, PyBytes_AS_STRING(result)) != 0 ) {
-        Py_DECREF(result);
+    /* Allocate a new string */
+    _PyBytesWriter writer;
+    _PyBytesWriter_Init(&writer);
+    buf = _PyBytesWriter_Alloc(&writer, soself->s_size);
+    if (buf == NULL) {
+        _PyBytesWriter_Dealloc(&writer);
         return NULL;
     }
 
-    return result;
+    /* Call the guts */
+    if ( s_pack_internal(soself, args, 0, buf) != 0 ) {
+        _PyBytesWriter_Dealloc(&writer);
+        return NULL;
+    }
+
+    return _PyBytesWriter_Finish(&writer, buf + soself->s_size);
 }
 
 PyDoc_STRVAR(s_pack_into__doc__,
@@ -1899,15 +1916,15 @@
     if (nargs != (soself->s_len + 2))
     {
         if (nargs == 0) {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                         "pack_into expected buffer argument");
         }
         else if (nargs == 1) {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                         "pack_into expected offset argument");
         }
         else {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                         "pack_into expected %zd items for packing (got %zd)",
                         soself->s_len, (nargs - 2));
         }
@@ -1930,7 +1947,7 @@
     if (offset < 0) {
          /* Check that negative offset is low enough to fit data */
         if (offset + soself->s_size > 0) {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                          "no space to pack %zd bytes at offset %zd",
                          soself->s_size,
                          offset);
@@ -1940,7 +1957,7 @@
 
         /* Check that negative offset is not crossing buffer boundary */
         if (offset + buffer.len < 0) {
-            PyErr_Format(StructError,
+            PyErr_Format(_structmodulestate_global->StructError,
                          "offset %zd out of range for %zd-byte buffer",
                          offset,
                          buffer.len);
@@ -1956,7 +1973,7 @@
         assert(offset >= 0);
         assert(soself->s_size >= 0);
 
-        PyErr_Format(StructError,
+        PyErr_Format(_structmodulestate_global->StructError,
                      "pack_into requires a buffer of at least %zu bytes for "
                      "packing %zd bytes at offset %zd "
                      "(actual buffer size is %zd)",
@@ -2018,6 +2035,11 @@
     {NULL,       NULL}          /* sentinel */
 };
 
+static PyMemberDef s_members[] = {
+    {"__weaklistoffset__", T_PYSSIZET, offsetof(PyStructObject, weakreflist), READONLY},
+    {NULL}  /* sentinel */
+};
+
 #define OFF(x) offsetof(PyStructObject, x)
 
 static PyGetSetDef s_getsetlist[] = {
@@ -2026,47 +2048,32 @@
     {NULL} /* sentinel */
 };
 
-static
-PyTypeObject PyStructType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "Struct",
+PyDoc_STRVAR(s__doc__,
+"Struct(fmt) --> compiled struct object\n"
+"\n"
+);
+
+static PyType_Slot PyStructType_slots[] = {
+    {Py_tp_dealloc, s_dealloc},
+    {Py_tp_getattro, PyObject_GenericGetAttr},
+    {Py_tp_setattro, PyObject_GenericSetAttr},
+    {Py_tp_doc, (void*)s__doc__},
+    {Py_tp_methods, s_methods},
+    {Py_tp_members, s_members},
+    {Py_tp_getset, s_getsetlist},
+    {Py_tp_init, Struct___init__},
+    {Py_tp_alloc, PyType_GenericAlloc},
+    {Py_tp_new, s_new},
+    {Py_tp_free, PyObject_Del},
+    {0, 0},
+};
+
+static PyType_Spec PyStructType_spec = {
+    "_struct.Struct",
     sizeof(PyStructObject),
     0,
-    (destructor)s_dealloc,      /* tp_dealloc */
-    0,                                          /* tp_vectorcall_offset */
-    0,                                          /* tp_getattr */
-    0,                                          /* tp_setattr */
-    0,                                          /* tp_as_async */
-    0,                                          /* tp_repr */
-    0,                                          /* tp_as_number */
-    0,                                          /* tp_as_sequence */
-    0,                                          /* tp_as_mapping */
-    0,                                          /* tp_hash */
-    0,                                          /* tp_call */
-    0,                                          /* tp_str */
-    PyObject_GenericGetAttr,                    /* tp_getattro */
-    PyObject_GenericSetAttr,                    /* tp_setattro */
-    0,                                          /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
-    Struct___init____doc__,                     /* tp_doc */
-    0,                                          /* tp_traverse */
-    0,                                          /* tp_clear */
-    0,                                          /* tp_richcompare */
-    offsetof(PyStructObject, weakreflist),      /* tp_weaklistoffset */
-    0,                                          /* tp_iter */
-    0,                                          /* tp_iternext */
-    s_methods,                                  /* tp_methods */
-    NULL,                                       /* tp_members */
-    s_getsetlist,                               /* tp_getset */
-    0,                                          /* tp_base */
-    0,                                          /* tp_dict */
-    0,                                          /* tp_descr_get */
-    0,                                          /* tp_descr_set */
-    0,                                          /* tp_dictoffset */
-    Struct___init__,                            /* tp_init */
-    PyType_GenericAlloc,                        /* tp_alloc */
-    s_new,                                      /* tp_new */
-    PyObject_Del,                               /* tp_free */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    PyStructType_slots
 };
 
 
@@ -2102,7 +2109,7 @@
         return 0;
     }
 
-    s_object = PyObject_CallFunctionObjArgs((PyObject *)(&PyStructType), fmt, NULL);
+    s_object = PyObject_CallOneArg(_structmodulestate_global->PyStructType, fmt);
     if (s_object != NULL) {
         if (PyDict_GET_SIZE(cache) >= MAXCACHE)
             PyDict_Clear(cache);
@@ -2312,16 +2319,46 @@
 The variable struct.error is an exception raised on errors.\n");
 
 
+static int
+_structmodule_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    _structmodulestate *state = (_structmodulestate *)PyModule_GetState(module);
+    if (state) {
+        Py_VISIT(state->PyStructType);
+        Py_VISIT(state->unpackiter_type);
+        Py_VISIT(state->StructError);
+    }
+    return 0;
+}
+
+static int
+_structmodule_clear(PyObject *module)
+{
+    _structmodulestate *state = (_structmodulestate *)PyModule_GetState(module);
+    if (state) {
+        Py_CLEAR(state->PyStructType);
+        Py_CLEAR(state->unpackiter_type);
+        Py_CLEAR(state->StructError);
+    }
+    return 0;
+}
+
+static void
+_structmodule_free(void *module)
+{
+    _structmodule_clear((PyObject *)module);
+}
+
 static struct PyModuleDef _structmodule = {
     PyModuleDef_HEAD_INIT,
     "_struct",
     module_doc,
-    -1,
+    sizeof(_structmodulestate),
     module_functions,
     NULL,
-    NULL,
-    NULL,
-    NULL
+    _structmodule_traverse,
+    _structmodule_clear,
+    _structmodule_free,
 };
 
 PyMODINIT_FUNC
@@ -2333,12 +2370,19 @@
     if (m == NULL)
         return NULL;
 
-    Py_TYPE(&PyStructType) = &PyType_Type;
-    if (PyType_Ready(&PyStructType) < 0)
+    PyObject *PyStructType = PyType_FromSpec(&PyStructType_spec);
+    if (PyStructType == NULL) {
         return NULL;
+    }
+    Py_INCREF(PyStructType);
+    PyModule_AddObject(m, "Struct", PyStructType);
+    get_struct_state(m)->PyStructType = PyStructType;
 
-    if (PyType_Ready(&unpackiter_type) < 0)
+    PyObject *unpackiter_type = PyType_FromSpec(&unpackiter_type_spec);
+    if (unpackiter_type == NULL) {
         return NULL;
+    }
+    get_struct_state(m)->unpackiter_type = unpackiter_type;
 
     /* Check endian and swap in faster functions */
     {
@@ -2383,17 +2427,12 @@
     }
 
     /* Add some symbolic constants to the module */
-    if (StructError == NULL) {
-        StructError = PyErr_NewException("struct.error", NULL, NULL);
-        if (StructError == NULL)
-            return NULL;
-    }
-
+    PyObject *StructError = PyErr_NewException("struct.error", NULL, NULL);
+    if (StructError == NULL)
+        return NULL;
     Py_INCREF(StructError);
     PyModule_AddObject(m, "error", StructError);
-
-    Py_INCREF((PyObject*)&PyStructType);
-    PyModule_AddObject(m, "Struct", (PyObject*)&PyStructType);
+    get_struct_state(m)->StructError = StructError;
 
     return m;
 }
diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c
index d7d3cc8..d832176 100644
--- a/Modules/_testbuffer.c
+++ b/Modules/_testbuffer.c
@@ -24,7 +24,7 @@
 /**************************************************************************/
 
 static PyTypeObject NDArray_Type;
-#define NDArray_Check(v) (Py_TYPE(v) == &NDArray_Type)
+#define NDArray_Check(v) Py_IS_TYPE(v, &NDArray_Type)
 
 #define CHECK_LIST_OR_TUPLE(v) \
     if (!PyList_Check(v) && !PyTuple_Check(v)) { \
@@ -1854,7 +1854,7 @@
 type_error:
     PyErr_Format(PyExc_TypeError,
         "cannot index memory using \"%.200s\"",
-        key->ob_type->tp_name);
+        Py_TYPE(key)->tp_name);
 err_occurred:
     Py_DECREF(nd);
     return NULL;
@@ -2050,7 +2050,7 @@
 ndarray_get_format(NDArrayObject *self, void *closure)
 {
     Py_buffer *base = &self->head->base;
-    char *fmt = base->format ? base->format : "";
+    const char *fmt = base->format ? base->format : "";
     return PyUnicode_FromString(fmt);
 }
 
@@ -2835,11 +2835,11 @@
     if (m == NULL)
         return NULL;
 
-    Py_TYPE(&NDArray_Type) = &PyType_Type;
+    Py_SET_TYPE(&NDArray_Type, &PyType_Type);
     Py_INCREF(&NDArray_Type);
     PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
 
-    Py_TYPE(&StaticArray_Type) = &PyType_Type;
+    Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
     Py_INCREF(&StaticArray_Type);
     PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
 
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index af28af5..54c1e62 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -5,18 +5,22 @@
  * standard Python regression test, via Lib/test/test_capi.py.
  */
 
-/* The Visual Studio projects builds _testcapi with Py_BUILD_CORE_MODULE
-   define, but we only want to test the public C API, not the internal
-   C API. */
+/* This module tests the public (Include/ and Include/cpython/) C API.
+   The internal C API must not be used here: use _testinternalcapi for that.
+
+   The Visual Studio projects builds _testcapi with Py_BUILD_CORE_MODULE
+   macro defined, but only the public C API must be tested here. */
+
 #undef Py_BUILD_CORE_MODULE
+/* Always enable assertions */
+#undef NDEBUG
 
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
 #include "datetime.h"
 #include "marshal.h"
-#include "pythread.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include <float.h>
 #include <signal.h>
 
@@ -274,7 +278,7 @@
     if (!PyDict_Check(arg)) {
         PyErr_Format(PyExc_TypeError,
                      "dict_hassplittable() argument must be dict, not '%s'",
-                     arg->ob_type->tp_name);
+                     Py_TYPE(arg)->tp_name);
         return NULL;
     }
 
@@ -639,7 +643,7 @@
     int overflow;
 
     /* Test that overflow is set properly for a large value. */
-    /* num is a number larger than PY_LLONG_MAX on a typical machine. */
+    /* num is a number larger than LLONG_MAX on a typical machine. */
     num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
     if (num == NULL)
         return NULL;
@@ -655,8 +659,8 @@
         return raiseTestError("test_long_long_and_overflow",
             "overflow was not set to 1");
 
-    /* Same again, with num = PY_LLONG_MAX + 1 */
-    num = PyLong_FromLongLong(PY_LLONG_MAX);
+    /* Same again, with num = LLONG_MAX + 1 */
+    num = PyLong_FromLongLong(LLONG_MAX);
     if (num == NULL)
         return NULL;
     one = PyLong_FromLong(1L);
@@ -683,7 +687,7 @@
             "overflow was not set to 1");
 
     /* Test that overflow is set properly for a large negative value. */
-    /* num is a number smaller than PY_LLONG_MIN on a typical platform */
+    /* num is a number smaller than LLONG_MIN on a typical platform */
     num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
     if (num == NULL)
         return NULL;
@@ -699,8 +703,8 @@
         return raiseTestError("test_long_long_and_overflow",
             "overflow was not set to -1");
 
-    /* Same again, with num = PY_LLONG_MIN - 1 */
-    num = PyLong_FromLongLong(PY_LLONG_MIN);
+    /* Same again, with num = LLONG_MIN - 1 */
+    num = PyLong_FromLongLong(LLONG_MIN);
     if (num == NULL)
         return NULL;
     one = PyLong_FromLong(1L);
@@ -757,7 +761,7 @@
         return raiseTestError("test_long_long_and_overflow",
             "overflow was set incorrectly");
 
-    num = PyLong_FromLongLong(PY_LLONG_MAX);
+    num = PyLong_FromLongLong(LLONG_MAX);
     if (num == NULL)
         return NULL;
     overflow = 1234;
@@ -765,14 +769,14 @@
     Py_DECREF(num);
     if (value == -1 && PyErr_Occurred())
         return NULL;
-    if (value != PY_LLONG_MAX)
+    if (value != LLONG_MAX)
         return raiseTestError("test_long_long_and_overflow",
-            "expected return value PY_LLONG_MAX");
+            "expected return value LLONG_MAX");
     if (overflow != 0)
         return raiseTestError("test_long_long_and_overflow",
             "overflow was not cleared");
 
-    num = PyLong_FromLongLong(PY_LLONG_MIN);
+    num = PyLong_FromLongLong(LLONG_MIN);
     if (num == NULL)
         return NULL;
     overflow = 0;
@@ -780,9 +784,9 @@
     Py_DECREF(num);
     if (value == -1 && PyErr_Occurred())
         return NULL;
-    if (value != PY_LLONG_MIN)
+    if (value != LLONG_MIN)
         return raiseTestError("test_long_long_and_overflow",
-            "expected return value PY_LLONG_MIN");
+            "expected return value LLONG_MIN");
     if (overflow != 0)
         return raiseTestError("test_long_long_and_overflow",
             "overflow was not cleared");
@@ -1664,6 +1668,10 @@
 
 static volatile int x;
 
+/* Ignore use of deprecated APIs */
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
+
 /* Test the u and u# codes for PyArg_ParseTuple. May leak memory in case
    of an error.
 */
@@ -1840,6 +1848,7 @@
 
     Py_RETURN_NONE;
 }
+_Py_COMP_DIAG_POP
 
 static PyObject *
 unicode_aswidechar(PyObject *self, PyObject *args)
@@ -1924,6 +1933,48 @@
 }
 
 static PyObject *
+unicode_asutf8(PyObject *self, PyObject *args)
+{
+    PyObject *unicode;
+    const char *buffer;
+
+    if (!PyArg_ParseTuple(args, "U", &unicode)) {
+        return NULL;
+    }
+
+    buffer = PyUnicode_AsUTF8(unicode);
+    if (buffer == NULL) {
+        return NULL;
+    }
+
+    return PyBytes_FromString(buffer);
+}
+
+static PyObject *
+unicode_asutf8andsize(PyObject *self, PyObject *args)
+{
+    PyObject *unicode, *result;
+    const char *buffer;
+    Py_ssize_t utf8_len;
+
+    if(!PyArg_ParseTuple(args, "U", &unicode)) {
+        return NULL;
+    }
+
+    buffer = PyUnicode_AsUTF8AndSize(unicode, &utf8_len);
+    if (buffer == NULL) {
+        return NULL;
+    }
+
+    result = PyBytes_FromString(buffer);
+    if (result == NULL) {
+        return NULL;
+    }
+
+    return Py_BuildValue("(Nn)", result, utf8_len);
+}
+
+static PyObject *
 unicode_findchar(PyObject *self, PyObject *args)
 {
     PyObject *str;
@@ -1973,6 +2024,10 @@
     return Py_BuildValue("(Nn)", to_copy, copied);
 }
 
+/* Ignore use of deprecated APIs */
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
+
 static PyObject *
 unicode_encodedecimal(PyObject *self, PyObject *args)
 {
@@ -2040,6 +2095,7 @@
 
     return u;
 }
+_Py_COMP_DIAG_POP
 
 static PyObject *
 getargs_w_star(PyObject *self, PyObject *args)
@@ -2589,6 +2645,55 @@
     return rv;
 }
 
+static PyObject *
+test_PyDateTime_GET(PyObject *self, PyObject *obj)
+{
+    int year, month, day;
+
+    year = PyDateTime_GET_YEAR(obj);
+    month = PyDateTime_GET_MONTH(obj);
+    day = PyDateTime_GET_DAY(obj);
+
+    return Py_BuildValue("(lll)", year, month, day);
+}
+
+static PyObject *
+test_PyDateTime_DATE_GET(PyObject *self, PyObject *obj)
+{
+    int hour, minute, second, microsecond;
+
+    hour = PyDateTime_DATE_GET_HOUR(obj);
+    minute = PyDateTime_DATE_GET_MINUTE(obj);
+    second = PyDateTime_DATE_GET_SECOND(obj);
+    microsecond = PyDateTime_DATE_GET_MICROSECOND(obj);
+
+    return Py_BuildValue("(llll)", hour, minute, second, microsecond);
+}
+
+static PyObject *
+test_PyDateTime_TIME_GET(PyObject *self, PyObject *obj)
+{
+    int hour, minute, second, microsecond;
+
+    hour = PyDateTime_TIME_GET_HOUR(obj);
+    minute = PyDateTime_TIME_GET_MINUTE(obj);
+    second = PyDateTime_TIME_GET_SECOND(obj);
+    microsecond = PyDateTime_TIME_GET_MICROSECOND(obj);
+
+    return Py_BuildValue("(llll)", hour, minute, second, microsecond);
+}
+
+static PyObject *
+test_PyDateTime_DELTA_GET(PyObject *self, PyObject *obj)
+{
+    int days, seconds, microseconds;
+
+    days = PyDateTime_DELTA_GET_DAYS(obj);
+    seconds = PyDateTime_DELTA_GET_SECONDS(obj);
+    microseconds = PyDateTime_DELTA_GET_MICROSECONDS(obj);
+
+    return Py_BuildValue("(lll)", days, seconds, microseconds);
+}
 
 /* test_thread_state spawns a thread of its own, and that thread releases
  * `thread_done` when it's finished.  The driver code has to know when the
@@ -2633,12 +2738,10 @@
 
     if (!PyCallable_Check(fn)) {
         PyErr_Format(PyExc_TypeError, "'%s' object is not callable",
-            fn->ob_type->tp_name);
+            Py_TYPE(fn)->tp_name);
         return NULL;
     }
 
-    /* Ensure Python is set up for threading */
-    PyEval_InitThreads();
     thread_done = PyThread_allocate_lock();
     if (thread_done == NULL)
         return PyErr_NoMemory();
@@ -3323,6 +3426,26 @@
     Py_RETURN_NONE;
 }
 
+/* PyBuffer_SizeFromFormat() */
+static PyObject *
+test_PyBuffer_SizeFromFormat(PyObject *self, PyObject *args)
+{
+    const char *format;
+    Py_ssize_t result;
+
+    if (!PyArg_ParseTuple(args, "s:test_PyBuffer_SizeFromFormat",
+                          &format)) {
+        return NULL;
+    }
+
+    result = PyBuffer_SizeFromFormat(format);
+    if (result == -1) {
+        return NULL;
+    }
+
+    return PyLong_FromSsize_t(result);
+}
+
 /* Test that the fatal error from not having a current thread doesn't
    cause an infinite loop.  Run via Lib/test/test_capi.py */
 static PyObject *
@@ -3441,8 +3564,8 @@
     PyObject *error_type, *error_value, *error_traceback;
 
     /* Temporarily resurrect the object. */
-    assert(self->ob_refcnt == 0);
-    self->ob_refcnt = 1;
+    assert(Py_REFCNT(self) == 0);
+    Py_SET_REFCNT(self, 1);
 
     /* Save the current exception, if any. */
     PyErr_Fetch(&error_type, &error_value, &error_traceback);
@@ -3464,31 +3587,26 @@
     /* Undo the temporary resurrection; can't use DECREF here, it would
      * cause a recursive call.
      */
-    assert(self->ob_refcnt > 0);
-    if (--self->ob_refcnt == 0)
-        return;         /* this is the normal path out */
+    assert(Py_REFCNT(self) > 0);
+    Py_SET_REFCNT(self, Py_REFCNT(self) - 1);
+    if (Py_REFCNT(self) == 0) {
+        /* this is the normal path out */
+        return;
+    }
 
     /* __del__ resurrected it!  Make it look like the original Py_DECREF
      * never happened.
      */
     {
-        Py_ssize_t refcnt = self->ob_refcnt;
+        Py_ssize_t refcnt = Py_REFCNT(self);
         _Py_NewReference(self);
-        self->ob_refcnt = refcnt;
+        Py_SET_REFCNT(self, refcnt);
     }
-    assert(!PyType_IS_GC(Py_TYPE(self)) || _PyObject_GC_IS_TRACKED(self));
-    /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
-     * we need to undo that. */
-    _Py_DEC_REFTOTAL;
-    /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
-     * chain, so no more to do there.
-     * If COUNT_ALLOCS, the original decref bumped tp_frees, and
-     * _Py_NewReference bumped tp_allocs:  both of those need to be
-     * undone.
-     */
-#ifdef COUNT_ALLOCS
-    --Py_TYPE(self)->tp_frees;
-    --Py_TYPE(self)->tp_allocs;
+    assert(!PyType_IS_GC(Py_TYPE(self)) || PyObject_GC_IsTracked(self));
+    /* If Py_REF_DEBUG macro is defined, _Py_NewReference() increased
+       _Py_RefTotal, so we need to undo that. */
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
 #endif
 }
 
@@ -3511,6 +3629,25 @@
     return obj;
 }
 
+static PyObject *
+without_gc(PyObject *Py_UNUSED(self), PyObject *obj)
+{
+    PyTypeObject *tp = (PyTypeObject*)obj;
+    if (!PyType_Check(obj) || !PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) {
+        return PyErr_Format(PyExc_TypeError, "heap type expected, got %R", obj);
+    }
+    if (PyType_IS_GC(tp)) {
+        // Don't try this at home, kids:
+        tp->tp_flags -= Py_TPFLAGS_HAVE_GC;
+        tp->tp_free = PyObject_Del;
+        tp->tp_traverse = NULL;
+        tp->tp_clear = NULL;
+    }
+    assert(!PyType_IS_GC(tp));
+    Py_INCREF(obj);
+    return obj;
+}
+
 static PyMethodDef ml;
 
 static PyObject *
@@ -4071,8 +4208,6 @@
     test_c_thread_t test_c_thread;
     long thread;
 
-    PyEval_InitThreads();
-
     test_c_thread.start_event = PyThread_allocate_lock();
     test_c_thread.exit_event = PyThread_allocate_lock();
     test_c_thread.callback = NULL;
@@ -4121,15 +4256,15 @@
 pymarshal_write_long_to_file(PyObject* self, PyObject *args)
 {
     long value;
-    char *filename;
+    PyObject *filename;
     int version;
     FILE *fp;
 
-    if (!PyArg_ParseTuple(args, "lsi:pymarshal_write_long_to_file",
+    if (!PyArg_ParseTuple(args, "lOi:pymarshal_write_long_to_file",
                           &value, &filename, &version))
         return NULL;
 
-    fp = fopen(filename, "wb");
+    fp = _Py_fopen_obj(filename, "wb");
     if (fp == NULL) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
@@ -4147,15 +4282,15 @@
 pymarshal_write_object_to_file(PyObject* self, PyObject *args)
 {
     PyObject *obj;
-    char *filename;
+    PyObject *filename;
     int version;
     FILE *fp;
 
-    if (!PyArg_ParseTuple(args, "Osi:pymarshal_write_object_to_file",
+    if (!PyArg_ParseTuple(args, "OOi:pymarshal_write_object_to_file",
                           &obj, &filename, &version))
         return NULL;
 
-    fp = fopen(filename, "wb");
+    fp = _Py_fopen_obj(filename, "wb");
     if (fp == NULL) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
@@ -4174,13 +4309,13 @@
 {
     int value;
     long pos;
-    char *filename;
+    PyObject *filename;
     FILE *fp;
 
-    if (!PyArg_ParseTuple(args, "s:pymarshal_read_short_from_file", &filename))
+    if (!PyArg_ParseTuple(args, "O:pymarshal_read_short_from_file", &filename))
         return NULL;
 
-    fp = fopen(filename, "rb");
+    fp = _Py_fopen_obj(filename, "rb");
     if (fp == NULL) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
@@ -4199,13 +4334,13 @@
 pymarshal_read_long_from_file(PyObject* self, PyObject *args)
 {
     long value, pos;
-    char *filename;
+    PyObject *filename;
     FILE *fp;
 
-    if (!PyArg_ParseTuple(args, "s:pymarshal_read_long_from_file", &filename))
+    if (!PyArg_ParseTuple(args, "O:pymarshal_read_long_from_file", &filename))
         return NULL;
 
-    fp = fopen(filename, "rb");
+    fp = _Py_fopen_obj(filename, "rb");
     if (fp == NULL) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
@@ -4225,13 +4360,13 @@
 {
     PyObject *obj;
     long pos;
-    char *filename;
+    PyObject *filename;
     FILE *fp;
 
-    if (!PyArg_ParseTuple(args, "s:pymarshal_read_last_object_from_file", &filename))
+    if (!PyArg_ParseTuple(args, "O:pymarshal_read_last_object_from_file", &filename))
         return NULL;
 
-    fp = fopen(filename, "rb");
+    fp = _Py_fopen_obj(filename, "rb");
     if (fp == NULL) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
@@ -4249,13 +4384,13 @@
 {
     PyObject *obj;
     long pos;
-    char *filename;
+    PyObject *filename;
     FILE *fp;
 
-    if (!PyArg_ParseTuple(args, "s:pymarshal_read_object_from_file", &filename))
+    if (!PyArg_ParseTuple(args, "O:pymarshal_read_object_from_file", &filename))
         return NULL;
 
-    fp = fopen(filename, "rb");
+    fp = _Py_fopen_obj(filename, "rb");
     if (fp == NULL) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
@@ -4424,15 +4559,6 @@
 }
 
 static PyObject*
-get_recursion_depth(PyObject *self, PyObject *args)
-{
-    PyThreadState *tstate = PyThreadState_Get();
-
-    /* subtract one to ignore the frame of the get_recursion_depth() call */
-    return PyLong_FromLong(tstate->recursion_depth - 1);
-}
-
-static PyObject*
 pymem_buffer_overflow(PyObject *self, PyObject *args)
 {
     char *buffer;
@@ -4518,7 +4644,7 @@
         return NULL;
     }
     /* Initialize reference count to avoid early crash in ceval or GC */
-    Py_REFCNT(op) = 1;
+    Py_SET_REFCNT(op, 1);
     /* object fields like ob_type are uninitialized! */
     return test_pyobject_is_freed("check_pyobject_uninitialized_is_freed", op);
 }
@@ -4533,7 +4659,7 @@
         return NULL;
     }
     /* Initialize reference count to avoid early crash in ceval or GC */
-    Py_REFCNT(op) = 1;
+    Py_SET_REFCNT(op, 1);
     /* ob_type field is after the memory block: part of "forbidden bytes"
        when using debug hooks on memory allocators! */
     return test_pyobject_is_freed("check_pyobject_forbidden_bytes_is_freed", op);
@@ -4549,7 +4675,7 @@
     }
     Py_TYPE(op)->tp_dealloc(op);
     /* Reset reference count to avoid early crash in ceval or GC */
-    Py_REFCNT(op) = 1;
+    Py_SET_REFCNT(op, 1);
     /* object memory is freed! */
     return test_pyobject_is_freed("check_pyobject_freed_is_freed", op);
 }
@@ -4654,8 +4780,8 @@
 
     version = dict->ma_version_tag;
 
-    Py_BUILD_ASSERT(sizeof(unsigned PY_LONG_LONG) >= sizeof(version));
-    return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)version);
+    Py_BUILD_ASSERT(sizeof(unsigned long long) >= sizeof(version));
+    return PyLong_FromUnsignedLongLong((unsigned long long)version);
 }
 
 
@@ -4742,7 +4868,7 @@
         return NULL;
     }
 
-    return _PyObject_FastCallDict(func, stack, nargs, kwargs);
+    return PyObject_VectorcallDict(func, stack, nargs, kwargs);
 }
 
 
@@ -4776,7 +4902,7 @@
         PyErr_SetString(PyExc_TypeError, "kwnames must be None or a tuple");
         return NULL;
     }
-    return _PyObject_Vectorcall(func, stack, nargs, kwnames);
+    return PyObject_Vectorcall(func, stack, nargs, kwnames);
 }
 
 
@@ -4919,7 +5045,7 @@
         return NULL;
     }
 
-    PyObject *res = PyObject_CallObject(cls, NULL);
+    PyObject *res = _PyObject_CallNoArg(cls);
     if (res == NULL) {
         return NULL;
     }
@@ -5031,7 +5157,7 @@
     }
     assert(Py_REFCNT(obj) == 1);
 
-    Py_REFCNT(obj) = 0;
+    Py_SET_REFCNT(obj,  0);
     /* Py_DECREF() must call _Py_NegativeRefcount() and abort Python */
     Py_DECREF(obj);
 
@@ -5065,6 +5191,96 @@
 }
 
 
+static PyObject *
+sequence_getitem(PyObject *self, PyObject *args)
+{
+    PyObject *seq;
+    Py_ssize_t i;
+    if (!PyArg_ParseTuple(args, "On", &seq, &i)) {
+        return NULL;
+    }
+    return PySequence_GetItem(seq, i);
+}
+
+
+/* Functions for testing C calling conventions (METH_*) are named meth_*,
+ * e.g. "meth_varargs" for METH_VARARGS.
+ *
+ * They all return a tuple of their C-level arguments, with None instead
+ * of NULL and Python tuples instead of C arrays.
+ */
+
+
+static PyObject*
+_null_to_none(PyObject* obj)
+{
+    if (obj == NULL) {
+        Py_RETURN_NONE;
+    }
+    Py_INCREF(obj);
+    return obj;
+}
+
+static PyObject*
+meth_varargs(PyObject* self, PyObject* args)
+{
+    return Py_BuildValue("NO", _null_to_none(self), args);
+}
+
+static PyObject*
+meth_varargs_keywords(PyObject* self, PyObject* args, PyObject* kwargs)
+{
+    return Py_BuildValue("NON", _null_to_none(self), args, _null_to_none(kwargs));
+}
+
+static PyObject*
+meth_o(PyObject* self, PyObject* obj)
+{
+    return Py_BuildValue("NO", _null_to_none(self), obj);
+}
+
+static PyObject*
+meth_noargs(PyObject* self, PyObject* ignored)
+{
+    return _null_to_none(self);
+}
+
+static PyObject*
+_fastcall_to_tuple(PyObject* const* args, Py_ssize_t nargs)
+{
+    PyObject *tuple = PyTuple_New(nargs);
+    if (tuple == NULL) {
+        return NULL;
+    }
+    for (Py_ssize_t i=0; i < nargs; i++) {
+        Py_INCREF(args[i]);
+        PyTuple_SET_ITEM(tuple, i, args[i]);
+    }
+    return tuple;
+}
+
+static PyObject*
+meth_fastcall(PyObject* self, PyObject* const* args, Py_ssize_t nargs)
+{
+    return Py_BuildValue(
+        "NN", _null_to_none(self), _fastcall_to_tuple(args, nargs)
+    );
+}
+
+static PyObject*
+meth_fastcall_keywords(PyObject* self, PyObject* const* args,
+                       Py_ssize_t nargs, PyObject* kwargs)
+{
+    PyObject *pyargs = _fastcall_to_tuple(args, nargs);
+    if (pyargs == NULL) {
+        return NULL;
+    }
+    PyObject *pykwargs = PyObject_Vectorcall((PyObject*)&PyDict_Type,
+                                              args + nargs, 0, kwargs);
+    return Py_BuildValue("NNN", _null_to_none(self), pyargs, pykwargs);
+}
+
+
 static PyObject*
 pynumber_tobase(PyObject *module, PyObject *args)
 {
@@ -5103,6 +5319,10 @@
     {"get_delta_fromdsu",        get_delta_fromdsu,              METH_VARARGS},
     {"get_date_fromtimestamp",   get_date_fromtimestamp,         METH_VARARGS},
     {"get_datetime_fromtimestamp", get_datetime_fromtimestamp,   METH_VARARGS},
+    {"PyDateTime_GET",             test_PyDateTime_GET,           METH_O},
+    {"PyDateTime_DATE_GET",        test_PyDateTime_DATE_GET,      METH_O},
+    {"PyDateTime_TIME_GET",        test_PyDateTime_TIME_GET,      METH_O},
+    {"PyDateTime_DELTA_GET",       test_PyDateTime_DELTA_GET,     METH_O},
     {"test_list_api",           test_list_api,                   METH_NOARGS},
     {"test_dict_iteration",     test_dict_iteration,             METH_NOARGS},
     {"dict_getitem_knownhash",  dict_getitem_knownhash,          METH_VARARGS},
@@ -5138,6 +5358,7 @@
     {"test_pep3118_obsolete_write_locks", (PyCFunction)test_pep3118_obsolete_write_locks, METH_NOARGS},
 #endif
     {"getbuffer_with_null_view", getbuffer_with_null_view, METH_O},
+    {"PyBuffer_SizeFromFormat",  test_PyBuffer_SizeFromFormat, METH_VARARGS},
     {"test_buildvalue_N",       test_buildvalue_N,               METH_NOARGS},
     {"test_buildvalue_issue38913", test_buildvalue_issue38913,   METH_NOARGS},
     {"get_args", get_args, METH_VARARGS},
@@ -5202,6 +5423,8 @@
     {"unicode_aswidechar",      unicode_aswidechar,              METH_VARARGS},
     {"unicode_aswidecharstring",unicode_aswidecharstring,        METH_VARARGS},
     {"unicode_asucs4",          unicode_asucs4,                  METH_VARARGS},
+    {"unicode_asutf8",          unicode_asutf8,                  METH_VARARGS},
+    {"unicode_asutf8andsize",   unicode_asutf8andsize,           METH_VARARGS},
     {"unicode_findchar",        unicode_findchar,                METH_VARARGS},
     {"unicode_copycharacters",  unicode_copycharacters,          METH_VARARGS},
     {"unicode_encodedecimal",   unicode_encodedecimal,           METH_VARARGS},
@@ -5289,7 +5512,6 @@
 #endif
     {"PyTime_AsMilliseconds", test_PyTime_AsMilliseconds, METH_VARARGS},
     {"PyTime_AsMicroseconds", test_PyTime_AsMicroseconds, METH_VARARGS},
-    {"get_recursion_depth", get_recursion_depth, METH_NOARGS},
     {"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS},
     {"pymem_api_misuse", pymem_api_misuse, METH_NOARGS},
     {"pymem_malloc_without_gil", pymem_malloc_without_gil, METH_NOARGS},
@@ -5324,7 +5546,15 @@
     {"negative_refcount", negative_refcount, METH_NOARGS},
 #endif
     {"write_unraisable_exc", test_write_unraisable_exc, METH_VARARGS},
+    {"sequence_getitem", sequence_getitem, METH_VARARGS},
+    {"meth_varargs", meth_varargs, METH_VARARGS},
+    {"meth_varargs_keywords", (PyCFunction)(void(*)(void))meth_varargs_keywords, METH_VARARGS|METH_KEYWORDS},
+    {"meth_o", meth_o, METH_O},
+    {"meth_noargs", meth_noargs, METH_NOARGS},
+    {"meth_fastcall", (PyCFunction)(void(*)(void))meth_fastcall, METH_FASTCALL},
+    {"meth_fastcall_keywords", (PyCFunction)(void(*)(void))meth_fastcall_keywords, METH_FASTCALL|METH_KEYWORDS},
     {"pynumber_tobase", pynumber_tobase, METH_VARARGS},
+    {"without_gc", without_gc, METH_O},
     {NULL, NULL} /* sentinel */
 };
 
@@ -5943,7 +6173,7 @@
     .tp_call = PyVectorcall_Call,
     .tp_vectorcall_offset = offsetof(MethodDescriptorObject, vectorcall),
     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
-                Py_TPFLAGS_METHOD_DESCRIPTOR | _Py_TPFLAGS_HAVE_VECTORCALL,
+                Py_TPFLAGS_METHOD_DESCRIPTOR | Py_TPFLAGS_HAVE_VECTORCALL,
     .tp_descr_get = func_descr_get,
 };
 
@@ -5982,7 +6212,7 @@
     .tp_new = MethodDescriptor2_new,
     .tp_call = PyVectorcall_Call,
     .tp_vectorcall_offset = offsetof(MethodDescriptor2Object, vectorcall),
-    .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | _Py_TPFLAGS_HAVE_VECTORCALL,
+    .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_VECTORCALL,
 };
 
 PyDoc_STRVAR(heapgctype__doc__,
@@ -6100,6 +6330,47 @@
     HeapCTypeSubclass_slots
 };
 
+PyDoc_STRVAR(heapctypewithbuffer__doc__,
+"Heap type with buffer support.\n\n"
+"The buffer is set to [b'1', b'2', b'3', b'4']");
+
+typedef struct {
+    HeapCTypeObject base;
+    char buffer[4];
+} HeapCTypeWithBufferObject;
+
+static int
+heapctypewithbuffer_getbuffer(HeapCTypeWithBufferObject *self, Py_buffer *view, int flags)
+{
+    self->buffer[0] = '1';
+    self->buffer[1] = '2';
+    self->buffer[2] = '3';
+    self->buffer[3] = '4';
+    return PyBuffer_FillInfo(
+        view, (PyObject*)self, (void *)self->buffer, 4, 1, flags);
+}
+
+static void
+heapctypewithbuffer_releasebuffer(HeapCTypeWithBufferObject *self, Py_buffer *view)
+{
+    assert(view->obj == (void*) self);
+}
+
+static PyType_Slot HeapCTypeWithBuffer_slots[] = {
+    {Py_bf_getbuffer, heapctypewithbuffer_getbuffer},
+    {Py_bf_releasebuffer, heapctypewithbuffer_releasebuffer},
+    {Py_tp_doc, (char*)heapctypewithbuffer__doc__},
+    {0, 0},
+};
+
+static PyType_Spec HeapCTypeWithBuffer_spec = {
+    "_testcapi.HeapCTypeWithBuffer",
+    sizeof(HeapCTypeWithBufferObject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    HeapCTypeWithBuffer_slots
+};
+
 PyDoc_STRVAR(heapctypesubclasswithfinalizer__doc__,
 "Subclass of HeapCType with a finalizer that reassigns __class__.\n\n"
 "__class__ is set to plain HeapCTypeSubclass during finalization.\n"
@@ -6177,6 +6448,106 @@
     HeapCTypeSubclassWithFinalizer_slots
 };
 
+typedef struct {
+    PyObject_HEAD
+    PyObject *dict;
+} HeapCTypeWithDictObject;
+
+static void
+heapctypewithdict_dealloc(HeapCTypeWithDictObject* self)
+{
+
+    PyTypeObject *tp = Py_TYPE(self);
+    Py_XDECREF(self->dict);
+    PyObject_DEL(self);
+    Py_DECREF(tp);
+}
+
+static PyGetSetDef heapctypewithdict_getsetlist[] = {
+    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
+    {NULL} /* Sentinel */
+};
+
+static struct PyMemberDef heapctypewithdict_members[] = {
+    {"dictobj", T_OBJECT, offsetof(HeapCTypeWithDictObject, dict)},
+    {"__dictoffset__", T_PYSSIZET, offsetof(HeapCTypeWithDictObject, dict), READONLY},
+    {NULL} /* Sentinel */
+};
+
+static PyType_Slot HeapCTypeWithDict_slots[] = {
+    {Py_tp_members, heapctypewithdict_members},
+    {Py_tp_getset, heapctypewithdict_getsetlist},
+    {Py_tp_dealloc, heapctypewithdict_dealloc},
+    {0, 0},
+};
+
+static PyType_Spec HeapCTypeWithDict_spec = {
+    "_testcapi.HeapCTypeWithDict",
+    sizeof(HeapCTypeWithDictObject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    HeapCTypeWithDict_slots
+};
+
+static struct PyMemberDef heapctypewithnegativedict_members[] = {
+    {"dictobj", T_OBJECT, offsetof(HeapCTypeWithDictObject, dict)},
+    {"__dictoffset__", T_PYSSIZET, -(Py_ssize_t)sizeof(void*), READONLY},
+    {NULL} /* Sentinel */
+};
+
+static PyType_Slot HeapCTypeWithNegativeDict_slots[] = {
+    {Py_tp_members, heapctypewithnegativedict_members},
+    {Py_tp_getset, heapctypewithdict_getsetlist},
+    {Py_tp_dealloc, heapctypewithdict_dealloc},
+    {0, 0},
+};
+
+static PyType_Spec HeapCTypeWithNegativeDict_spec = {
+    "_testcapi.HeapCTypeWithNegativeDict",
+    sizeof(HeapCTypeWithDictObject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    HeapCTypeWithNegativeDict_slots
+};
+
+typedef struct {
+    PyObject_HEAD
+    PyObject *weakreflist;
+} HeapCTypeWithWeakrefObject;
+
+static struct PyMemberDef heapctypewithweakref_members[] = {
+    {"weakreflist", T_OBJECT, offsetof(HeapCTypeWithWeakrefObject, weakreflist)},
+    {"__weaklistoffset__", T_PYSSIZET,
+      offsetof(HeapCTypeWithWeakrefObject, weakreflist), READONLY},
+    {NULL} /* Sentinel */
+};
+
+static void
+heapctypewithweakref_dealloc(HeapCTypeWithWeakrefObject* self)
+{
+
+    PyTypeObject *tp = Py_TYPE(self);
+    if (self->weakreflist != NULL)
+        PyObject_ClearWeakRefs((PyObject *) self);
+    Py_XDECREF(self->weakreflist);
+    PyObject_DEL(self);
+    Py_DECREF(tp);
+}
+
+static PyType_Slot HeapCTypeWithWeakref_slots[] = {
+    {Py_tp_members, heapctypewithweakref_members},
+    {Py_tp_dealloc, heapctypewithweakref_dealloc},
+    {0, 0},
+};
+
+static PyType_Spec HeapCTypeWithWeakref_spec = {
+    "_testcapi.HeapCTypeWithWeakref",
+    sizeof(HeapCTypeWithWeakrefObject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    HeapCTypeWithWeakref_slots
+};
+
 PyDoc_STRVAR(heapctypesetattr__doc__,
 "A heap type without GC, but with overridden __setattr__.\n\n"
 "The 'value' attribute is set to 10 in __init__ and updated via attribute setting.");
@@ -6251,6 +6622,120 @@
     HeapCTypeSetattr_slots
 };
 
+static PyMethodDef meth_instance_methods[] = {
+    {"meth_varargs", meth_varargs, METH_VARARGS},
+    {"meth_varargs_keywords", (PyCFunction)(void(*)(void))meth_varargs_keywords, METH_VARARGS|METH_KEYWORDS},
+    {"meth_o", meth_o, METH_O},
+    {"meth_noargs", meth_noargs, METH_NOARGS},
+    {"meth_fastcall", (PyCFunction)(void(*)(void))meth_fastcall, METH_FASTCALL},
+    {"meth_fastcall_keywords", (PyCFunction)(void(*)(void))meth_fastcall_keywords, METH_FASTCALL|METH_KEYWORDS},
+    {NULL, NULL} /* sentinel */
+};
+
+
+static PyTypeObject MethInstance_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "MethInstance",
+    sizeof(PyObject),
+    .tp_new = PyType_GenericNew,
+    .tp_flags = Py_TPFLAGS_DEFAULT,
+    .tp_methods = meth_instance_methods,
+    .tp_doc = (char*)PyDoc_STR(
+        "Class with normal (instance) methods to test calling conventions"),
+};
+
+static PyMethodDef meth_class_methods[] = {
+    {"meth_varargs", meth_varargs, METH_VARARGS|METH_CLASS},
+    {"meth_varargs_keywords", (PyCFunction)(void(*)(void))meth_varargs_keywords, METH_VARARGS|METH_KEYWORDS|METH_CLASS},
+    {"meth_o", meth_o, METH_O|METH_CLASS},
+    {"meth_noargs", meth_noargs, METH_NOARGS|METH_CLASS},
+    {"meth_fastcall", (PyCFunction)(void(*)(void))meth_fastcall, METH_FASTCALL|METH_CLASS},
+    {"meth_fastcall_keywords", (PyCFunction)(void(*)(void))meth_fastcall_keywords, METH_FASTCALL|METH_KEYWORDS|METH_CLASS},
+    {NULL, NULL} /* sentinel */
+};
+
+
+static PyTypeObject MethClass_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "MethClass",
+    sizeof(PyObject),
+    .tp_new = PyType_GenericNew,
+    .tp_flags = Py_TPFLAGS_DEFAULT,
+    .tp_methods = meth_class_methods,
+    .tp_doc = PyDoc_STR(
+        "Class with class methods to test calling conventions"),
+};
+
+static PyMethodDef meth_static_methods[] = {
+    {"meth_varargs", meth_varargs, METH_VARARGS|METH_STATIC},
+    {"meth_varargs_keywords", (PyCFunction)(void(*)(void))meth_varargs_keywords, METH_VARARGS|METH_KEYWORDS|METH_STATIC},
+    {"meth_o", meth_o, METH_O|METH_STATIC},
+    {"meth_noargs", meth_noargs, METH_NOARGS|METH_STATIC},
+    {"meth_fastcall", (PyCFunction)(void(*)(void))meth_fastcall, METH_FASTCALL|METH_STATIC},
+    {"meth_fastcall_keywords", (PyCFunction)(void(*)(void))meth_fastcall_keywords, METH_FASTCALL|METH_KEYWORDS|METH_STATIC},
+    {NULL, NULL} /* sentinel */
+};
+
+
+static PyTypeObject MethStatic_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "MethStatic",
+    sizeof(PyObject),
+    .tp_new = PyType_GenericNew,
+    .tp_flags = Py_TPFLAGS_DEFAULT,
+    .tp_methods = meth_static_methods,
+    .tp_doc = PyDoc_STR(
+        "Class with static methods to test calling conventions"),
+};
+
+/* ContainerNoGC -- a simple container without GC methods */
+
+typedef struct {
+    PyObject_HEAD
+    PyObject *value;
+} ContainerNoGCobject;
+
+static PyObject *
+ContainerNoGC_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyObject *value;
+    char *names[] = {"value", NULL};
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O", names, &value)) {
+        return NULL;
+    }
+    PyObject *self = type->tp_alloc(type, 0);
+    if (self == NULL) {
+        return NULL;
+    }
+    Py_INCREF(value);
+    ((ContainerNoGCobject *)self)->value = value;
+    return self;
+}
+
+static void
+ContainerNoGC_dealloc(ContainerNoGCobject *self)
+{
+    Py_DECREF(self->value);
+    Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMemberDef ContainerNoGC_members[] = {
+    {"value", T_OBJECT, offsetof(ContainerNoGCobject, value), READONLY,
+     PyDoc_STR("a container value for test purposes")},
+    {0}
+};
+
+static PyTypeObject ContainerNoGC_type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "_testcapi.ContainerNoGC",
+    sizeof(ContainerNoGCobject),
+    .tp_dealloc = (destructor)ContainerNoGC_dealloc,
+    .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    .tp_members = ContainerNoGC_members,
+    .tp_new = ContainerNoGC_new,
+};
+
+
 static struct PyModuleDef _testcapimodule = {
     PyModuleDef_HEAD_INIT,
     "_testcapi",
@@ -6275,9 +6760,9 @@
     if (m == NULL)
         return NULL;
 
-    Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
+    Py_SET_TYPE(&_HashInheritanceTester_Type, &PyType_Type);
 
-    Py_TYPE(&test_structmembersType)=&PyType_Type;
+    Py_SET_TYPE(&test_structmembersType, &PyType_Type);
     Py_INCREF(&test_structmembersType);
     /* don't use a name starting with "test", since we don't want
        test_capi to automatically call this */
@@ -6303,10 +6788,6 @@
     Py_INCREF(&MyList_Type);
     PyModule_AddObject(m, "MyList", (PyObject *)&MyList_Type);
 
-    /* bpo-37250: old Cython code sets tp_print to 0, we check that
-     * this doesn't break anything. */
-    MyList_Type.tp_print = 0;
-
     if (PyType_Ready(&MethodDescriptorBase_Type) < 0)
         return NULL;
     Py_INCREF(&MethodDescriptorBase_Type);
@@ -6340,6 +6821,21 @@
     Py_INCREF(&Generic_Type);
     PyModule_AddObject(m, "Generic", (PyObject *)&Generic_Type);
 
+    if (PyType_Ready(&MethInstance_Type) < 0)
+        return NULL;
+    Py_INCREF(&MethInstance_Type);
+    PyModule_AddObject(m, "MethInstance", (PyObject *)&MethInstance_Type);
+
+    if (PyType_Ready(&MethClass_Type) < 0)
+        return NULL;
+    Py_INCREF(&MethClass_Type);
+    PyModule_AddObject(m, "MethClass", (PyObject *)&MethClass_Type);
+
+    if (PyType_Ready(&MethStatic_Type) < 0)
+        return NULL;
+    Py_INCREF(&MethStatic_Type);
+    PyModule_AddObject(m, "MethStatic", (PyObject *)&MethStatic_Type);
+
     PyRecursingInfinitelyError_Type.tp_base = (PyTypeObject *)PyExc_Exception;
     if (PyType_Ready(&PyRecursingInfinitelyError_Type) < 0) {
         return NULL;
@@ -6364,12 +6860,11 @@
     PyModule_AddObject(m, "FLT_MIN", PyFloat_FromDouble(FLT_MIN));
     PyModule_AddObject(m, "DBL_MAX", PyFloat_FromDouble(DBL_MAX));
     PyModule_AddObject(m, "DBL_MIN", PyFloat_FromDouble(DBL_MIN));
-    PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(PY_LLONG_MAX));
-    PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(PY_LLONG_MIN));
-    PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(PY_ULLONG_MAX));
+    PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(LLONG_MAX));
+    PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(LLONG_MIN));
+    PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(ULLONG_MAX));
     PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyLong_FromSsize_t(PY_SSIZE_T_MAX));
     PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyLong_FromSsize_t(PY_SSIZE_T_MIN));
-    PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyLong_FromSsize_t(sizeof(PyGC_Head)));
     PyModule_AddObject(m, "SIZEOF_TIME_T", PyLong_FromSsize_t(sizeof(time_t)));
     Py_INCREF(&PyInstanceMethod_Type);
     PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type);
@@ -6409,6 +6904,30 @@
     Py_DECREF(subclass_bases);
     PyModule_AddObject(m, "HeapCTypeSubclass", HeapCTypeSubclass);
 
+    PyObject *HeapCTypeWithDict = PyType_FromSpec(&HeapCTypeWithDict_spec);
+    if (HeapCTypeWithDict == NULL) {
+        return NULL;
+    }
+    PyModule_AddObject(m, "HeapCTypeWithDict", HeapCTypeWithDict);
+
+    PyObject *HeapCTypeWithNegativeDict = PyType_FromSpec(&HeapCTypeWithNegativeDict_spec);
+    if (HeapCTypeWithNegativeDict == NULL) {
+        return NULL;
+    }
+    PyModule_AddObject(m, "HeapCTypeWithNegativeDict", HeapCTypeWithNegativeDict);
+
+    PyObject *HeapCTypeWithWeakref = PyType_FromSpec(&HeapCTypeWithWeakref_spec);
+    if (HeapCTypeWithWeakref == NULL) {
+        return NULL;
+    }
+    PyModule_AddObject(m, "HeapCTypeWithWeakref", HeapCTypeWithWeakref);
+
+    PyObject *HeapCTypeWithBuffer = PyType_FromSpec(&HeapCTypeWithBuffer_spec);
+    if (HeapCTypeWithBuffer == NULL) {
+        return NULL;
+    }
+    PyModule_AddObject(m, "HeapCTypeWithBuffer", HeapCTypeWithBuffer);
+
     PyObject *HeapCTypeSetattr = PyType_FromSpec(&HeapCTypeSetattr_spec);
     if (HeapCTypeSetattr == NULL) {
         return NULL;
@@ -6427,6 +6946,14 @@
     Py_DECREF(subclass_with_finalizer_bases);
     PyModule_AddObject(m, "HeapCTypeSubclassWithFinalizer", HeapCTypeSubclassWithFinalizer);
 
+    if (PyType_Ready(&ContainerNoGC_type) < 0) {
+        return NULL;
+    }
+    Py_INCREF(&ContainerNoGC_type);
+    if (PyModule_AddObject(m, "ContainerNoGC",
+                           (PyObject *) &ContainerNoGC_type) < 0)
+        return NULL;
+
     PyState_AddModule(m, &_testcapimodule);
     return m;
 }
diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c
index 3a931ca..4445d2e 100644
--- a/Modules/_testinternalcapi.c
+++ b/Modules/_testinternalcapi.c
@@ -6,10 +6,16 @@
 #  error "Py_BUILD_CORE_BUILTIN or Py_BUILD_CORE_MODULE must be defined"
 #endif
 
+/* Always enable assertions */
+#undef NDEBUG
+
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "pycore_initconfig.h"
+#include "pycore_byteswap.h"     // _Py_bswap32()
+#include "pycore_initconfig.h"   // _Py_GetConfigsAsDict()
+#include "pycore_hashtable.h"    // _Py_hashtable_new()
+#include "pycore_gc.h"           // PyGC_Head
 
 
 #ifdef MS_WINDOWS
@@ -62,8 +68,139 @@
 }
 
 
+static PyObject*
+get_recursion_depth(PyObject *self, PyObject *Py_UNUSED(args))
+{
+    PyThreadState *tstate = PyThreadState_Get();
+
+    /* subtract one to ignore the frame of the get_recursion_depth() call */
+    return PyLong_FromLong(tstate->recursion_depth - 1);
+}
+
+
+static PyObject*
+test_bswap(PyObject *self, PyObject *Py_UNUSED(args))
+{
+    uint16_t u16 = _Py_bswap16(UINT16_C(0x3412));
+    if (u16 != UINT16_C(0x1234)) {
+        PyErr_Format(PyExc_AssertionError,
+                     "_Py_bswap16(0x3412) returns %u", u16);
+        return NULL;
+    }
+
+    uint32_t u32 = _Py_bswap32(UINT32_C(0x78563412));
+    if (u32 != UINT32_C(0x12345678)) {
+        PyErr_Format(PyExc_AssertionError,
+                     "_Py_bswap32(0x78563412) returns %lu", u32);
+        return NULL;
+    }
+
+    uint64_t u64 = _Py_bswap64(UINT64_C(0xEFCDAB9078563412));
+    if (u64 != UINT64_C(0x1234567890ABCDEF)) {
+        PyErr_Format(PyExc_AssertionError,
+                     "_Py_bswap64(0xEFCDAB9078563412) returns %llu", u64);
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+#define TO_PTR(ch) ((void*)(uintptr_t)ch)
+#define FROM_PTR(ptr) ((uintptr_t)ptr)
+#define VALUE(key) (1 + ((int)(key) - 'a'))
+
+static Py_uhash_t
+hash_char(const void *key)
+{
+    char ch = (char)FROM_PTR(key);
+    return ch;
+}
+
+
+static int
+hashtable_cb(_Py_hashtable_t *table,
+             const void *key_ptr, const void *value_ptr,
+             void *user_data)
+{
+    int *count = (int *)user_data;
+    char key = (char)FROM_PTR(key_ptr);
+    int value = (int)FROM_PTR(value_ptr);
+    assert(value == VALUE(key));
+    *count += 1;
+    return 0;
+}
+
+
+static PyObject*
+test_hashtable(PyObject *self, PyObject *Py_UNUSED(args))
+{
+    _Py_hashtable_t *table = _Py_hashtable_new(hash_char,
+                                               _Py_hashtable_compare_direct);
+    if (table == NULL) {
+        return PyErr_NoMemory();
+    }
+
+    // Using an newly allocated table must not crash
+    assert(table->nentries == 0);
+    assert(table->nbuckets > 0);
+    assert(_Py_hashtable_get(table, TO_PTR('x')) == NULL);
+
+    // Test _Py_hashtable_set()
+    char key;
+    for (key='a'; key <= 'z'; key++) {
+        int value = VALUE(key);
+        if (_Py_hashtable_set(table, TO_PTR(key), TO_PTR(value)) < 0) {
+            _Py_hashtable_destroy(table);
+            return PyErr_NoMemory();
+        }
+    }
+    assert(table->nentries == 26);
+    assert(table->nbuckets > table->nentries);
+
+    // Test _Py_hashtable_get_entry()
+    for (key='a'; key <= 'z'; key++) {
+        _Py_hashtable_entry_t *entry = _Py_hashtable_get_entry(table, TO_PTR(key));
+        assert(entry != NULL);
+        assert(entry->key == TO_PTR(key));
+        assert(entry->value == TO_PTR(VALUE(key)));
+    }
+
+    // Test _Py_hashtable_get()
+    for (key='a'; key <= 'z'; key++) {
+        void *value_ptr = _Py_hashtable_get(table, TO_PTR(key));
+        assert((int)FROM_PTR(value_ptr) == VALUE(key));
+    }
+
+    // Test _Py_hashtable_steal()
+    key = 'p';
+    void *value_ptr = _Py_hashtable_steal(table, TO_PTR(key));
+    assert((int)FROM_PTR(value_ptr) == VALUE(key));
+    assert(table->nentries == 25);
+    assert(_Py_hashtable_get_entry(table, TO_PTR(key)) == NULL);
+
+    // Test _Py_hashtable_foreach()
+    int count = 0;
+    int res = _Py_hashtable_foreach(table, hashtable_cb, &count);
+    assert(res == 0);
+    assert(count == 25);
+
+    // Test _Py_hashtable_clear()
+    _Py_hashtable_clear(table);
+    assert(table->nentries == 0);
+    assert(table->nbuckets > 0);
+    assert(_Py_hashtable_get(table, TO_PTR('x')) == NULL);
+
+    _Py_hashtable_destroy(table);
+    Py_RETURN_NONE;
+}
+
+
 static PyMethodDef TestMethods[] = {
     {"get_configs", get_configs, METH_NOARGS},
+    {"get_recursion_depth", get_recursion_depth, METH_NOARGS},
+    {"test_bswap", test_bswap, METH_NOARGS},
+    {"test_hashtable", test_hashtable, METH_NOARGS},
     {NULL, NULL} /* sentinel */
 };
 
@@ -84,5 +221,19 @@
 PyMODINIT_FUNC
 PyInit__testinternalcapi(void)
 {
-    return PyModule_Create(&_testcapimodule);
+    PyObject *module = PyModule_Create(&_testcapimodule);
+    if (module == NULL) {
+        return NULL;
+    }
+
+    if (PyModule_AddObject(module, "SIZEOF_PYGC_HEAD",
+                           PyLong_FromSsize_t(sizeof(PyGC_Head))) < 0) {
+        goto error;
+    }
+
+    return module;
+
+error:
+    Py_DECREF(module);
+    return NULL;
 }
diff --git a/Modules/_testmultiphase.c b/Modules/_testmultiphase.c
index 4933abb..d69ae62 100644
--- a/Modules/_testmultiphase.c
+++ b/Modules/_testmultiphase.c
@@ -4,6 +4,19 @@
 
 #include "Python.h"
 
+/* State for testing module state access from methods */
+
+typedef struct {
+    int counter;
+} meth_state;
+
+/*[clinic input]
+module _testmultiphase
+
+class _testmultiphase.StateAccessType "StateAccessTypeObject *" "!StateAccessType"
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=bab9f2fe3bd312ff]*/
+
 /* Example objects */
 typedef struct {
     PyObject_HEAD
@@ -14,6 +27,10 @@
     PyObject *integer;
 } testmultiphase_state;
 
+typedef struct {
+    PyObject_HEAD
+} StateAccessTypeObject;
+
 /* Example methods */
 
 static int
@@ -42,6 +59,7 @@
     Py_RETURN_NONE;
 }
 
+#include "clinic/_testmultiphase.c.h"
 
 static PyMethodDef Example_methods[] = {
     {"demo",            (PyCFunction)Example_demo,  METH_VARARGS,
@@ -102,6 +120,150 @@
     Example_Type_slots
 };
 
+
+/*[clinic input]
+_testmultiphase.StateAccessType.get_defining_module
+
+    cls: defining_class
+
+Return the module of the defining class.
+[clinic start generated code]*/
+
+static PyObject *
+_testmultiphase_StateAccessType_get_defining_module_impl(StateAccessTypeObject *self,
+                                                         PyTypeObject *cls)
+/*[clinic end generated code: output=ba2a14284a5d0921 input=946149f91cf72c0d]*/
+{
+    PyObject *retval;
+    retval = PyType_GetModule(cls);
+    if (retval == NULL) {
+        return NULL;
+    }
+    Py_INCREF(retval);
+    return retval;
+}
+
+/*[clinic input]
+_testmultiphase.StateAccessType.increment_count_clinic
+
+    cls: defining_class
+    /
+    n: int = 1
+    *
+    twice: bool = False
+
+Add 'n' from the module-state counter.
+
+Pass 'twice' to double that amount.
+
+This tests Argument Clinic support for defining_class.
+[clinic start generated code]*/
+
+static PyObject *
+_testmultiphase_StateAccessType_increment_count_clinic_impl(StateAccessTypeObject *self,
+                                                            PyTypeObject *cls,
+                                                            int n, int twice)
+/*[clinic end generated code: output=3b34f86bc5473204 input=551d482e1fe0b8f5]*/
+{
+    meth_state *m_state = PyType_GetModuleState(cls);
+    if (twice) {
+        n *= 2;
+    }
+    m_state->counter += n;
+
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(_StateAccessType_decrement_count__doc__,
+"decrement_count($self, /, n=1, *, twice=None)\n"
+"--\n"
+"\n"
+"Add 'n' from the module-state counter.\n"
+"Pass 'twice' to double that amount.\n"
+"(This is to test both positional and keyword arguments.");
+
+// Intentionally does not use Argument Clinic
+static PyObject *
+_StateAccessType_increment_count_noclinic(StateAccessTypeObject *self,
+                                          PyTypeObject *defining_class,
+                                          PyObject *const *args,
+                                          Py_ssize_t nargs,
+                                          PyObject *kwnames)
+{
+    if (!_PyArg_CheckPositional("StateAccessTypeObject.decrement_count", nargs, 0, 1)) {
+        return NULL;
+    }
+    long n = 1;
+    if (nargs) {
+        n = PyLong_AsLong(args[0]);
+        if (PyErr_Occurred()) {
+            return NULL;
+        }
+    }
+    if (kwnames && PyTuple_Check(kwnames)) {
+        if (PyTuple_GET_SIZE(kwnames) > 1 ||
+            PyUnicode_CompareWithASCIIString(
+                PyTuple_GET_ITEM(kwnames, 0),
+                "twice"
+            )) {
+            PyErr_SetString(
+                PyExc_TypeError,
+                "decrement_count only takes 'twice' keyword argument"
+            );
+            return NULL;
+        }
+        n *= 2;
+    }
+    meth_state *m_state = PyType_GetModuleState(defining_class);
+    m_state->counter += n;
+
+    Py_RETURN_NONE;
+}
+
+/*[clinic input]
+_testmultiphase.StateAccessType.get_count
+
+    cls: defining_class
+
+Return the value of the module-state counter.
+[clinic start generated code]*/
+
+static PyObject *
+_testmultiphase_StateAccessType_get_count_impl(StateAccessTypeObject *self,
+                                               PyTypeObject *cls)
+/*[clinic end generated code: output=64600f95b499a319 input=d5d181f12384849f]*/
+{
+    meth_state *m_state = PyType_GetModuleState(cls);
+    return PyLong_FromLong(m_state->counter);
+}
+
+static PyMethodDef StateAccessType_methods[] = {
+    _TESTMULTIPHASE_STATEACCESSTYPE_GET_DEFINING_MODULE_METHODDEF
+    _TESTMULTIPHASE_STATEACCESSTYPE_GET_COUNT_METHODDEF
+    _TESTMULTIPHASE_STATEACCESSTYPE_INCREMENT_COUNT_CLINIC_METHODDEF
+    {
+        "increment_count_noclinic",
+        (PyCFunction)(void(*)(void))_StateAccessType_increment_count_noclinic,
+        METH_METHOD|METH_FASTCALL|METH_KEYWORDS,
+        _StateAccessType_decrement_count__doc__
+    },
+    {NULL,              NULL}           /* sentinel */
+};
+
+static PyType_Slot StateAccessType_Type_slots[] = {
+    {Py_tp_doc, "Type for testing per-module state access from methods."},
+    {Py_tp_methods, StateAccessType_methods},
+    {0, NULL}
+};
+
+static PyType_Spec StateAccessType_spec = {
+    "_testimportexec.StateAccessType",
+    sizeof(StateAccessTypeObject),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_FINALIZE | Py_TPFLAGS_BASETYPE,
+    StateAccessType_Type_slots
+};
+
 /* Function of two integers returning integer */
 
 PyDoc_STRVAR(testexport_foo_doc,
@@ -193,30 +355,39 @@
 
     /* Add a custom type */
     temp = PyType_FromSpec(&Example_Type_spec);
-    if (temp == NULL)
+    if (temp == NULL) {
         goto fail;
-    if (PyModule_AddObject(m, "Example", temp) != 0)
+    }
+    if (PyModule_AddObject(m, "Example", temp) != 0) {
         goto fail;
+    }
+
 
     /* Add an exception type */
     temp = PyErr_NewException("_testimportexec.error", NULL, NULL);
-    if (temp == NULL)
+    if (temp == NULL) {
         goto fail;
-    if (PyModule_AddObject(m, "error", temp) != 0)
+    }
+    if (PyModule_AddObject(m, "error", temp) != 0) {
         goto fail;
+    }
 
     /* Add Str */
     temp = PyType_FromSpec(&Str_Type_spec);
-    if (temp == NULL)
+    if (temp == NULL) {
         goto fail;
-    if (PyModule_AddObject(m, "Str", temp) != 0)
+    }
+    if (PyModule_AddObject(m, "Str", temp) != 0) {
         goto fail;
+    }
 
-    if (PyModule_AddIntConstant(m, "int_const", 1969) != 0)
+    if (PyModule_AddIntConstant(m, "int_const", 1969) != 0) {
         goto fail;
+    }
 
-    if (PyModule_AddStringConstant(m, "str_const", "something different") != 0)
+    if (PyModule_AddStringConstant(m, "str_const", "something different") != 0) {
         goto fail;
+    }
 
     return 0;
  fail:
@@ -225,20 +396,18 @@
 
 /* Helper for module definitions; there'll be a lot of them */
 
-#define TEST_MODULE_DEF_EX(name, slots, methods, statesize, traversefunc) { \
+#define TEST_MODULE_DEF(name, slots, methods) { \
     PyModuleDef_HEAD_INIT,                      /* m_base */ \
     name,                                       /* m_name */ \
     PyDoc_STR("Test module " name),             /* m_doc */ \
-    statesize,                                  /* m_size */ \
+    0,                                          /* m_size */ \
     methods,                                    /* m_methods */ \
     slots,                                      /* m_slots */ \
-    traversefunc,                               /* m_traverse */ \
+    NULL,                                       /* m_traverse */ \
     NULL,                                       /* m_clear */ \
     NULL,                                       /* m_free */ \
 }
 
-#define TEST_MODULE_DEF(name, slots, methods) TEST_MODULE_DEF_EX(name, slots, methods, 0, NULL)
-
 static PyModuleDef_Slot main_slots[] = {
     {Py_mod_exec, execfunc},
     {0, NULL},
@@ -623,51 +792,49 @@
 }
 
 static int
-bad_traverse(PyObject *self, visitproc visit, void *arg) {
-    testmultiphase_state *m_state;
+meth_state_access_exec(PyObject *m)
+{
+    PyObject *temp;
+    meth_state *m_state;
 
-    m_state = PyModule_GetState(self);
-
-    /* The following assertion mimics any traversal function that doesn't correctly handle
-     * the case during module creation where the module state hasn't been created yet.
-     *
-     * The check that it is used to test only runs in debug mode, so it is OK that the
-     * assert() will get compiled out in fully optimised release builds.
-     */
-    assert(m_state != NULL);
-    Py_VISIT(m_state->integer);
-    return 0;
-}
-
-static int
-execfunc_with_bad_traverse(PyObject *mod) {
-    testmultiphase_state *m_state;
-
-    m_state = PyModule_GetState(mod);
+    m_state = PyModule_GetState(m);
     if (m_state == NULL) {
         return -1;
     }
 
-    m_state->integer = PyLong_FromLong(0x7fffffff);
-    Py_INCREF(m_state->integer);
+    temp = PyType_FromModuleAndSpec(m, &StateAccessType_spec, NULL);
+    if (temp == NULL) {
+        return -1;
+    }
+    if (PyModule_AddObject(m, "StateAccessType", temp) != 0) {
+        return -1;
+    }
+
 
     return 0;
 }
 
-static PyModuleDef_Slot slots_with_bad_traverse[] = {
-    {Py_mod_exec, execfunc_with_bad_traverse},
+static PyModuleDef_Slot meth_state_access_slots[] = {
+    {Py_mod_exec, meth_state_access_exec},
     {0, NULL}
 };
 
-static PyModuleDef def_with_bad_traverse = TEST_MODULE_DEF_EX(
-       "_testmultiphase_with_bad_traverse", slots_with_bad_traverse, NULL,
-       sizeof(testmultiphase_state), bad_traverse);
+static PyModuleDef def_meth_state_access = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "_testmultiphase_meth_state_access",
+    .m_doc = PyDoc_STR("Module testing access"
+                       " to state from methods."),
+    .m_size = sizeof(meth_state),
+    .m_slots = meth_state_access_slots,
+};
 
 PyMODINIT_FUNC
-PyInit__testmultiphase_with_bad_traverse(PyObject *spec) {
-    return PyModuleDef_Init(&def_with_bad_traverse);
+PyInit__testmultiphase_meth_state_access(PyObject *spec)
+{
+    return PyModuleDef_Init(&def_meth_state_access);
 }
 
+
 /*** Helper for imp test ***/
 
 static PyModuleDef imp_dummy_def = TEST_MODULE_DEF("imp_dummy", main_slots, testexport_methods);
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index fadf57a..77baba4 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -4,9 +4,9 @@
 
 #include "Python.h"
 #include "pycore_pylifecycle.h"
-#include "pycore_pystate.h"
-#include "structmember.h" /* offsetof */
-#include "pythread.h"
+#include "pycore_interp.h"        // _PyInterpreterState.num_threads
+#include "pycore_pystate.h"       // _PyThreadState_Init()
+#include <stddef.h>               // offsetof()
 
 static PyObject *ThreadError;
 static PyObject *str_dict;
@@ -205,6 +205,22 @@
         self->locked ? "locked" : "unlocked", Py_TYPE(self)->tp_name, self);
 }
 
+#ifdef HAVE_FORK
+static PyObject *
+lock__at_fork_reinit(lockobject *self, PyObject *Py_UNUSED(args))
+{
+    if (_PyThread_at_fork_reinit(&self->lock_lock) < 0) {
+        PyErr_SetString(ThreadError, "failed to reinitialize lock at fork");
+        return NULL;
+    }
+
+    self->locked = 0;
+
+    Py_RETURN_NONE;
+}
+#endif  /* HAVE_FORK */
+
+
 static PyMethodDef lock_methods[] = {
     {"acquire_lock", (PyCFunction)(void(*)(void))lock_PyThread_acquire_lock,
      METH_VARARGS | METH_KEYWORDS, acquire_doc},
@@ -222,6 +238,10 @@
      METH_VARARGS | METH_KEYWORDS, acquire_doc},
     {"__exit__",    (PyCFunction)lock_PyThread_release_lock,
      METH_VARARGS, release_doc},
+#ifdef HAVE_FORK
+    {"_at_fork_reinit",    (PyCFunction)lock__at_fork_reinit,
+     METH_NOARGS, NULL},
+#endif
     {NULL,           NULL}              /* sentinel */
 };
 
@@ -438,22 +458,20 @@
 static PyObject *
 rlock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-    rlockobject *self;
-
-    self = (rlockobject *) type->tp_alloc(type, 0);
-    if (self != NULL) {
-        self->in_weakreflist = NULL;
-        self->rlock_owner = 0;
-        self->rlock_count = 0;
-
-        self->rlock_lock = PyThread_allocate_lock();
-        if (self->rlock_lock == NULL) {
-            Py_DECREF(self);
-            PyErr_SetString(ThreadError, "can't allocate lock");
-            return NULL;
-        }
+    rlockobject *self = (rlockobject *) type->tp_alloc(type, 0);
+    if (self == NULL) {
+        return NULL;
     }
+    self->in_weakreflist = NULL;
+    self->rlock_owner = 0;
+    self->rlock_count = 0;
 
+    self->rlock_lock = PyThread_allocate_lock();
+    if (self->rlock_lock == NULL) {
+        Py_DECREF(self);
+        PyErr_SetString(ThreadError, "can't allocate lock");
+        return NULL;
+    }
     return (PyObject *) self;
 }
 
@@ -467,6 +485,23 @@
 }
 
 
+#ifdef HAVE_FORK
+static PyObject *
+rlock__at_fork_reinit(rlockobject *self, PyObject *Py_UNUSED(args))
+{
+    if (_PyThread_at_fork_reinit(&self->rlock_lock) < 0) {
+        PyErr_SetString(ThreadError, "failed to reinitialize lock at fork");
+        return NULL;
+    }
+
+    self->rlock_owner = 0;
+    self->rlock_count = 0;
+
+    Py_RETURN_NONE;
+}
+#endif  /* HAVE_FORK */
+
+
 static PyMethodDef rlock_methods[] = {
     {"acquire",      (PyCFunction)(void(*)(void))rlock_acquire,
      METH_VARARGS | METH_KEYWORDS, rlock_acquire_doc},
@@ -482,6 +517,10 @@
      METH_VARARGS | METH_KEYWORDS, rlock_acquire_doc},
     {"__exit__",    (PyCFunction)rlock_release,
      METH_VARARGS, rlock_release_doc},
+#ifdef HAVE_FORK
+    {"_at_fork_reinit",    (PyCFunction)rlock__at_fork_reinit,
+     METH_NOARGS, NULL},
+#endif
     {NULL,           NULL}              /* sentinel */
 };
 
@@ -548,8 +587,6 @@
 
 /* Thread-local objects */
 
-#include "structmember.h"
-
 /* Quick overview:
 
    We need to be able to reclaim reference cycles as soon as possible
@@ -836,7 +873,7 @@
         }
     }
     else {
-        assert(Py_TYPE(dummy) == &localdummytype);
+        assert(Py_IS_TYPE(dummy, &localdummytype));
         ldict = ((localdummyobject *) dummy)->localdict;
     }
 
@@ -930,7 +967,7 @@
     if (r == -1)
         return NULL;
 
-    if (Py_TYPE(self) != &localtype)
+    if (!Py_IS_TYPE(self, &localtype))
         /* use generic lookup for subtypes */
         return _PyObject_GenericGetAttrWithDict(
             (PyObject *)self, name, ldict, 0);
@@ -985,6 +1022,7 @@
     PyObject *args;
     PyObject *keyw;
     PyThreadState *tstate;
+    _PyRuntimeState *runtime;
 };
 
 static void
@@ -996,7 +1034,7 @@
 
     tstate = boot->tstate;
     tstate->thread_id = PyThread_get_thread_ident();
-    _PyThreadState_Init(&_PyRuntime, tstate);
+    _PyThreadState_Init(tstate);
     PyEval_AcquireThread(tstate);
     tstate->interp->num_threads++;
     res = PyObject_Call(boot->func, boot->args, boot->keyw);
@@ -1017,13 +1055,14 @@
     PyMem_DEL(boot_raw);
     tstate->interp->num_threads--;
     PyThreadState_Clear(tstate);
-    PyThreadState_DeleteCurrent();
+    _PyThreadState_DeleteCurrent(tstate);
     PyThread_exit_thread();
 }
 
 static PyObject *
 thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs)
 {
+    _PyRuntimeState *runtime = &_PyRuntime;
     PyObject *func, *args, *keyw = NULL;
     struct bootstate *boot;
     unsigned long ident;
@@ -1046,14 +1085,23 @@
                         "optional 3rd arg must be a dictionary");
         return NULL;
     }
+
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    if (interp->config._isolated_interpreter) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "thread is not supported for isolated subinterpreters");
+        return NULL;
+    }
+
     boot = PyMem_NEW(struct bootstate, 1);
     if (boot == NULL)
         return PyErr_NoMemory();
-    boot->interp = _PyInterpreterState_Get();
+    boot->interp = _PyInterpreterState_GET();
     boot->func = func;
     boot->args = args;
     boot->keyw = keyw;
     boot->tstate = _PyThreadState_Prealloc(boot->interp);
+    boot->runtime = runtime;
     if (boot->tstate == NULL) {
         PyMem_DEL(boot);
         return PyErr_NoMemory();
@@ -1061,7 +1109,7 @@
     Py_INCREF(func);
     Py_INCREF(args);
     Py_XINCREF(keyw);
-    PyEval_InitThreads(); /* Start the interpreter's thread-awareness */
+
     ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);
     if (ident == PYTHREAD_INVALID_THREAD_ID) {
         PyErr_SetString(ThreadError, "can't start new thread");
@@ -1170,7 +1218,7 @@
 static PyObject *
 thread__count(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     return PyLong_FromLong(interp->num_threads);
 }
 
@@ -1196,7 +1244,7 @@
     PyObject *obj = PyWeakref_GET_OBJECT(wr);
     lockobject *lock;
     if (obj != Py_None) {
-        assert(Py_TYPE(obj) == &Locktype);
+        assert(Py_IS_TYPE(obj, &Locktype));
         lock = (lockobject *) obj;
         if (lock->locked) {
             PyThread_release_lock(lock->lock_lock);
@@ -1351,7 +1399,7 @@
     _PyErr_Display(file, exc_type, exc_value, exc_traceback);
 
     /* Call file.flush() */
-    PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+    PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
     if (!res) {
         return -1;
     }
@@ -1387,7 +1435,7 @@
 static PyObject *
 thread_excepthook(PyObject *self, PyObject *args)
 {
-    if (Py_TYPE(args) != &ExceptHookArgsType) {
+    if (!Py_IS_TYPE(args, &ExceptHookArgsType)) {
         PyErr_SetString(PyExc_TypeError,
                         "_thread.excepthook argument type "
                         "must be ExceptHookArgs");
@@ -1513,7 +1561,7 @@
     PyObject *m, *d, *v;
     double time_max;
     double timeout_max;
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
 
     /* Initialize types: */
     if (PyType_Ready(&localdummytype) < 0)
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index a1071e5..793c5e7 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -26,8 +26,6 @@
 #include "Python.h"
 #include <ctype.h>
 
-#include "pythread.h"
-
 #ifdef MS_WINDOWS
 #include <windows.h>
 #endif
@@ -56,7 +54,7 @@
 
 #if TK_HEX_VERSION >= 0x08050208 && TK_HEX_VERSION < 0x08060000 || \
     TK_HEX_VERSION >= 0x08060200
-#define HAVE_LIBTOMMAMTH
+#define HAVE_LIBTOMMATH
 #include <tclTomMath.h>
 #endif
 
@@ -574,9 +572,9 @@
     else if (PyBytes_Check(arg)) {
         int argc;
         const char **argv;
-        char *list = PyBytes_AS_STRING(arg);
+        const char *list = PyBytes_AS_STRING(arg);
 
-        if (Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) {
+        if (Tcl_SplitList((Tcl_Interp *)NULL, (char *)list, &argc, &argv) != TCL_OK) {
             Py_INCREF(arg);
             return arg;
         }
@@ -712,8 +710,8 @@
     }
 
     strcpy(argv0, className);
-    if (Py_ISUPPER(Py_CHARMASK(argv0[0])))
-        argv0[0] = Py_TOLOWER(Py_CHARMASK(argv0[0]));
+    if (Py_ISUPPER(argv0[0]))
+        argv0[0] = Py_TOLOWER(argv0[0]);
     Tcl_SetVar(v->interp, "argv0", argv0, TCL_GLOBAL_ONLY);
     PyMem_Free(argv0);
 
@@ -833,7 +831,7 @@
 } PyTclObject;
 
 static PyObject *PyTclObject_Type;
-#define PyTclObject_Check(v) ((v)->ob_type == (PyTypeObject *) PyTclObject_Type)
+#define PyTclObject_Check(v) Py_IS_TYPE(v, (PyTypeObject *) PyTclObject_Type)
 
 static PyObject *
 newPyTclObject(Tcl_Obj *arg)
@@ -967,7 +965,7 @@
 #define CHECK_STRING_LENGTH(s)
 #endif
 
-#ifdef HAVE_LIBTOMMAMTH
+#ifdef HAVE_LIBTOMMATH
 static Tcl_Obj*
 asBignumObj(PyObject *value)
 {
@@ -1047,7 +1045,7 @@
 #endif
         /* If there is an overflow in the wideInt conversion,
            fall through to bignum handling. */
-#ifdef HAVE_LIBTOMMAMTH
+#ifdef HAVE_LIBTOMMATH
         return asBignumObj(value);
 #endif
         /* If there is no wideInt or bignum support,
@@ -1169,7 +1167,7 @@
         return NULL;
 }
 
-#ifdef HAVE_LIBTOMMAMTH
+#ifdef HAVE_LIBTOMMATH
 static PyObject*
 fromBignumObj(TkappObject *tkapp, Tcl_Obj *value)
 {
@@ -1249,7 +1247,7 @@
            fall through to bignum handling. */
     }
 
-#ifdef HAVE_LIBTOMMAMTH
+#ifdef HAVE_LIBTOMMATH
     if (value->typePtr == tkapp->IntType ||
         value->typePtr == tkapp->WideIntType ||
         value->typePtr == tkapp->BignumType) {
@@ -1302,7 +1300,7 @@
     }
 #endif
 
-#ifdef HAVE_LIBTOMMAMTH
+#ifdef HAVE_LIBTOMMATH
     if (tkapp->BignumType == NULL &&
         strcmp(value->typePtr->name, "bignum") == 0) {
         /* bignum type is not registered in Tcl */
@@ -1734,7 +1732,7 @@
     }
     PyErr_Format(PyExc_TypeError,
                  "must be str, bytes or Tcl_Obj, not %.50s",
-                 in->ob_type->tp_name);
+                 Py_TYPE(in)->tp_name);
     return 0;
 }
 
@@ -2003,7 +2001,7 @@
        Prefer bignum because Tcl_GetWideIntFromObj returns ambiguous result for
        value in ranges -2**64..-2**63-1 and 2**63..2**64-1 (on 32-bit platform).
      */
-#ifdef HAVE_LIBTOMMAMTH
+#ifdef HAVE_LIBTOMMATH
     result = fromBignumObj(self, value);
 #else
     result = fromWideIntObj(self, value);
@@ -2166,11 +2164,9 @@
 
     CHECK_STRING_LENGTH(s);
     CHECK_TCL_APPARTMENT;
-    PyFPE_START_PROTECT("Tkapp_ExprDouble", return 0)
     ENTER_TCL
     retval = Tcl_ExprDouble(Tkapp_Interp(self), s, &v);
     ENTER_OVERLAP
-    PyFPE_END_PROTECT(retval)
     if (retval == TCL_ERROR)
         res = Tkinter_Error(self);
     else
@@ -2304,6 +2300,12 @@
     PyObject *v;
     char *list;
 
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+            "split() is deprecated; consider using splitlist() instead", 1))
+    {
+        return NULL;
+    }
+
     if (PyTclObject_Check(arg)) {
         Tcl_Obj *value = ((PyTclObject*)arg)->value;
         int objc;
@@ -2798,7 +2800,7 @@
 
     ENTER_PYTHON
 
-    res = _PyObject_CallNoArg(func);
+    res = PyObject_CallNoArgs(func);
     Py_DECREF(func);
     Py_DECREF(v); /* See Tktt_New() */
 
diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c
index cbcf55f..04f6c24 100644
--- a/Modules/_tracemalloc.c
+++ b/Modules/_tracemalloc.c
@@ -1,9 +1,9 @@
 #include "Python.h"
+#include "pycore_gc.h"            // PyGC_Head
+#include "pycore_pymem.h"         // _Py_tracemalloc_config
 #include "pycore_traceback.h"
-#include "hashtable.h"
-#include "frameobject.h"
-#include "pythread.h"
-#include "osdefs.h"
+#include "pycore_hashtable.h"
+#include "frameobject.h"          // PyFrame_GetBack()
 
 #include "clinic/_tracemalloc.c.h"
 /*[clinic input]
@@ -23,6 +23,9 @@
 #  define TRACE_DEBUG
 #endif
 
+#define TO_PTR(key) ((const void *)(uintptr_t)(key))
+#define FROM_PTR(key) ((uintptr_t)(key))
+
 /* Protected by the GIL */
 static struct {
     PyMemAllocatorEx mem;
@@ -34,7 +37,7 @@
 #if defined(TRACE_RAW_MALLOC)
 /* This lock is needed because tracemalloc_free() is called without
    the GIL held from PyMem_RawFree(). It cannot acquire the lock because it
-   would introduce a deadlock in PyThreadState_DeleteCurrent(). */
+   would introduce a deadlock in _PyThreadState_DeleteCurrent(). */
 static PyThread_type_lock tables_lock;
 #  define TABLES_LOCK() PyThread_acquire_lock(tables_lock, 1)
 #  define TABLES_UNLOCK() PyThread_release_lock(tables_lock)
@@ -47,16 +50,6 @@
 
 #define DEFAULT_DOMAIN 0
 
-/* Pack the frame_t structure to reduce the memory footprint. */
-typedef struct
-#ifdef __GNUC__
-__attribute__((packed))
-#endif
-{
-    uintptr_t ptr;
-    unsigned int domain;
-} pointer_t;
-
 /* Pack the frame_t structure to reduce the memory footprint on 64-bit
    architectures: 12 bytes instead of 16. */
 typedef struct
@@ -78,15 +71,20 @@
 
 typedef struct {
     Py_uhash_t hash;
-    int nframe;
+    /* Number of frames stored */
+    uint16_t nframe;
+    /* Total number of frames the traceback had */
+    uint16_t total_nframe;
     frame_t frames[1];
 } traceback_t;
 
 #define TRACEBACK_SIZE(NFRAME) \
         (sizeof(traceback_t) + sizeof(frame_t) * (NFRAME - 1))
 
-#define MAX_NFRAME \
-        ((INT_MAX - (int)sizeof(traceback_t)) / (int)sizeof(frame_t) + 1)
+/* The maximum number of frames is either:
+ - The maximum number of frames we can store in `traceback_t.nframe`
+ - The maximum memory size_t we can allocate */
+static const unsigned long MAX_NFRAME = Py_MIN(UINT16_MAX, ((SIZE_MAX - sizeof(traceback_t)) / sizeof(frame_t) + 1));
 
 
 static PyObject *unknown_filename = NULL;
@@ -124,10 +122,14 @@
    Protected by the GIL */
 static _Py_hashtable_t *tracemalloc_tracebacks = NULL;
 
-/* pointer (void*) => trace (trace_t).
+/* pointer (void*) => trace (trace_t*).
    Protected by TABLES_LOCK(). */
 static _Py_hashtable_t *tracemalloc_traces = NULL;
 
+/* domain (unsigned int) => traces (_Py_hashtable_t).
+   Protected by TABLES_LOCK(). */
+static _Py_hashtable_t *tracemalloc_domains = NULL;
+
 
 #ifdef TRACE_DEBUG
 static void
@@ -204,69 +206,44 @@
 
 
 static Py_uhash_t
-hashtable_hash_pyobject(_Py_hashtable_t *ht, const void *pkey)
+hashtable_hash_pyobject(const void *key)
 {
-    PyObject *obj;
-
-    _Py_HASHTABLE_READ_KEY(ht, pkey, obj);
+    PyObject *obj = (PyObject *)key;
     return PyObject_Hash(obj);
 }
 
 
 static int
-hashtable_compare_unicode(_Py_hashtable_t *ht, const void *pkey,
-                          const _Py_hashtable_entry_t *entry)
+hashtable_compare_unicode(const void *key1, const void *key2)
 {
-    PyObject *key1, *key2;
-
-    _Py_HASHTABLE_READ_KEY(ht, pkey, key1);
-    _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, key2);
-
-    if (key1 != NULL && key2 != NULL)
-        return (PyUnicode_Compare(key1, key2) == 0);
-    else
-        return key1 == key2;
+    PyObject *obj1 = (PyObject *)key1;
+    PyObject *obj2 = (PyObject *)key2;
+    if (obj1 != NULL && obj2 != NULL) {
+        return (PyUnicode_Compare(obj1, obj2) == 0);
+    }
+    else {
+        return obj1 == obj2;
+    }
 }
 
 
 static Py_uhash_t
-hashtable_hash_pointer_t(_Py_hashtable_t *ht, const void *pkey)
+hashtable_hash_uint(const void *key_raw)
 {
-    pointer_t ptr;
-    Py_uhash_t hash;
-
-    _Py_HASHTABLE_READ_KEY(ht, pkey, ptr);
-
-    hash = (Py_uhash_t)_Py_HashPointer((void*)ptr.ptr);
-    hash ^= ptr.domain;
-    return hash;
-}
-
-
-static int
-hashtable_compare_pointer_t(_Py_hashtable_t *ht, const void *pkey,
-                            const _Py_hashtable_entry_t *entry)
-{
-    pointer_t ptr1, ptr2;
-
-    _Py_HASHTABLE_READ_KEY(ht, pkey, ptr1);
-    _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, ptr2);
-
-    /* compare pointer before domain, because pointer is more likely to be
-       different */
-    return (ptr1.ptr == ptr2.ptr && ptr1.domain == ptr2.domain);
-
+    unsigned int key = (unsigned int)FROM_PTR(key_raw);
+    return (Py_uhash_t)key;
 }
 
 
 static _Py_hashtable_t *
-hashtable_new(size_t key_size, size_t data_size,
-              _Py_hashtable_hash_func hash_func,
-              _Py_hashtable_compare_func compare_func)
+hashtable_new(_Py_hashtable_hash_func hash_func,
+              _Py_hashtable_compare_func compare_func,
+              _Py_hashtable_destroy_func key_destroy_func,
+              _Py_hashtable_destroy_func value_destroy_func)
 {
     _Py_hashtable_allocator_t hashtable_alloc = {malloc, free};
-    return _Py_hashtable_new_full(key_size, data_size, 0,
-                                  hash_func, compare_func,
+    return _Py_hashtable_new_full(hash_func, compare_func,
+                                  key_destroy_func, value_destroy_func,
                                   &hashtable_alloc);
 }
 
@@ -285,36 +262,33 @@
 
 
 static Py_uhash_t
-hashtable_hash_traceback(_Py_hashtable_t *ht, const void *pkey)
+hashtable_hash_traceback(const void *key)
 {
-    traceback_t *traceback;
-
-    _Py_HASHTABLE_READ_KEY(ht, pkey, traceback);
+    const traceback_t *traceback = (const traceback_t *)key;
     return traceback->hash;
 }
 
 
 static int
-hashtable_compare_traceback(_Py_hashtable_t *ht, const void *pkey,
-                            const _Py_hashtable_entry_t *entry)
+hashtable_compare_traceback(const void *key1, const void *key2)
 {
-    traceback_t *traceback1, *traceback2;
-    const frame_t *frame1, *frame2;
-    int i;
+    const traceback_t *traceback1 = (const traceback_t *)key1;
+    const traceback_t *traceback2 = (const traceback_t *)key2;
 
-    _Py_HASHTABLE_READ_KEY(ht, pkey, traceback1);
-    _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, traceback2);
-
-    if (traceback1->nframe != traceback2->nframe)
+    if (traceback1->nframe != traceback2->nframe) {
         return 0;
+    }
+    if (traceback1->total_nframe != traceback2->total_nframe) {
+        return 0;
+    }
 
-    for (i=0; i < traceback1->nframe; i++) {
-        frame1 = &traceback1->frames[i];
-        frame2 = &traceback2->frames[i];
+    for (int i=0; i < traceback1->nframe; i++) {
+        const frame_t *frame1 = &traceback1->frames[i];
+        const frame_t *frame2 = &traceback2->frames[i];
 
-        if (frame1->lineno != frame2->lineno)
+        if (frame1->lineno != frame2->lineno) {
             return 0;
-
+        }
         if (frame1->filename != frame2->filename) {
             assert(PyUnicode_Compare(frame1->filename, frame2->filename) != 0);
             return 0;
@@ -327,37 +301,24 @@
 static void
 tracemalloc_get_frame(PyFrameObject *pyframe, frame_t *frame)
 {
-    PyCodeObject *code;
-    PyObject *filename;
-    _Py_hashtable_entry_t *entry;
-    int lineno;
-
     frame->filename = unknown_filename;
-    lineno = PyFrame_GetLineNumber(pyframe);
-    if (lineno < 0)
+    int lineno = PyFrame_GetLineNumber(pyframe);
+    if (lineno < 0) {
         lineno = 0;
+    }
     frame->lineno = (unsigned int)lineno;
 
-    code = pyframe->f_code;
-    if (code == NULL) {
-#ifdef TRACE_DEBUG
-        tracemalloc_error("failed to get the code object of the frame");
-#endif
-        return;
-    }
+    PyCodeObject *code = PyFrame_GetCode(pyframe);
+    PyObject *filename = code->co_filename;
+    Py_DECREF(code);
 
-    if (code->co_filename == NULL) {
+    if (filename == NULL) {
 #ifdef TRACE_DEBUG
         tracemalloc_error("failed to get the filename of the code object");
 #endif
         return;
     }
 
-    filename = code->co_filename;
-    assert(filename != NULL);
-    if (filename == NULL)
-        return;
-
     if (!PyUnicode_Check(filename)) {
 #ifdef TRACE_DEBUG
         tracemalloc_error("filename is not a unicode string");
@@ -374,15 +335,16 @@
     }
 
     /* intern the filename */
-    entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_filenames, filename);
+    _Py_hashtable_entry_t *entry;
+    entry = _Py_hashtable_get_entry(tracemalloc_filenames, filename);
     if (entry != NULL) {
-        _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_filenames, entry, filename);
+        filename = (PyObject *)entry->key;
     }
     else {
         /* tracemalloc_filenames is responsible to keep a reference
            to the filename */
         Py_INCREF(filename);
-        if (_Py_HASHTABLE_SET_NODATA(tracemalloc_filenames, filename) < 0) {
+        if (_Py_hashtable_set(tracemalloc_filenames, filename, NULL) < 0) {
             Py_DECREF(filename);
 #ifdef TRACE_DEBUG
             tracemalloc_error("failed to intern the filename");
@@ -416,6 +378,7 @@
         /* the cast might truncate len; that doesn't change hash stability */
         mult += (Py_uhash_t)(82520UL + len + len);
     }
+    x ^= traceback->total_nframe;
     x += 97531UL;
     return x;
 }
@@ -424,10 +387,7 @@
 static void
 traceback_get_frames(traceback_t *traceback)
 {
-    PyThreadState *tstate;
-    PyFrameObject *pyframe;
-
-    tstate = PyGILState_GetThisThreadState();
+    PyThreadState *tstate = PyGILState_GetThisThreadState();
     if (tstate == NULL) {
 #ifdef TRACE_DEBUG
         tracemalloc_error("failed to get the current thread state");
@@ -435,12 +395,20 @@
         return;
     }
 
-    for (pyframe = tstate->frame; pyframe != NULL; pyframe = pyframe->f_back) {
-        tracemalloc_get_frame(pyframe, &traceback->frames[traceback->nframe]);
-        assert(traceback->frames[traceback->nframe].filename != NULL);
-        traceback->nframe++;
-        if (traceback->nframe == _Py_tracemalloc_config.max_nframe)
-            break;
+    PyFrameObject *pyframe = PyThreadState_GetFrame(tstate);
+    for (; pyframe != NULL;) {
+        if (traceback->nframe < _Py_tracemalloc_config.max_nframe) {
+            tracemalloc_get_frame(pyframe, &traceback->frames[traceback->nframe]);
+            assert(traceback->frames[traceback->nframe].filename != NULL);
+            traceback->nframe++;
+        }
+        if (traceback->total_nframe < UINT16_MAX) {
+            traceback->total_nframe++;
+        }
+
+        PyFrameObject *back = PyFrame_GetBack(pyframe);
+        Py_DECREF(pyframe);
+        pyframe = back;
     }
 }
 
@@ -456,15 +424,16 @@
     /* get frames */
     traceback = tracemalloc_traceback;
     traceback->nframe = 0;
+    traceback->total_nframe = 0;
     traceback_get_frames(traceback);
     if (traceback->nframe == 0)
         return &tracemalloc_empty_traceback;
     traceback->hash = traceback_hash(traceback);
 
     /* intern the traceback */
-    entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_tracebacks, traceback);
+    entry = _Py_hashtable_get_entry(tracemalloc_tracebacks, traceback);
     if (entry != NULL) {
-        _Py_HASHTABLE_ENTRY_READ_KEY(tracemalloc_tracebacks, entry, traceback);
+        traceback = (traceback_t *)entry->key;
     }
     else {
         traceback_t *copy;
@@ -481,7 +450,7 @@
         }
         memcpy(copy, traceback, traceback_size);
 
-        if (_Py_HASHTABLE_SET_NODATA(tracemalloc_tracebacks, copy) < 0) {
+        if (_Py_hashtable_set(tracemalloc_tracebacks, copy, NULL) < 0) {
             raw_free(copy);
 #ifdef TRACE_DEBUG
             tracemalloc_error("failed to intern the traceback: putdata failed");
@@ -494,79 +463,54 @@
 }
 
 
-static int
-tracemalloc_use_domain_cb(_Py_hashtable_t *old_traces,
-                           _Py_hashtable_entry_t *entry, void *user_data)
+static _Py_hashtable_t*
+tracemalloc_create_traces_table(void)
 {
-    uintptr_t ptr;
-    pointer_t key;
-    _Py_hashtable_t *new_traces = (_Py_hashtable_t *)user_data;
-    const void *pdata = _Py_HASHTABLE_ENTRY_PDATA(old_traces, entry);
-
-    _Py_HASHTABLE_ENTRY_READ_KEY(old_traces, entry, ptr);
-    key.ptr = ptr;
-    key.domain = DEFAULT_DOMAIN;
-
-    return _Py_hashtable_set(new_traces,
-                             sizeof(key), &key,
-                             old_traces->data_size, pdata);
+    return hashtable_new(_Py_hashtable_hash_ptr,
+                         _Py_hashtable_compare_direct,
+                         NULL, raw_free);
 }
 
 
-/* Convert tracemalloc_traces from compact key (uintptr_t) to pointer_t key.
- * Return 0 on success, -1 on error. */
-static int
-tracemalloc_use_domain(void)
+static _Py_hashtable_t*
+tracemalloc_create_domains_table(void)
 {
-    _Py_hashtable_t *new_traces = NULL;
+    return hashtable_new(hashtable_hash_uint,
+                         _Py_hashtable_compare_direct,
+                         NULL,
+                         (_Py_hashtable_destroy_func)_Py_hashtable_destroy);
+}
 
-    assert(!_Py_tracemalloc_config.use_domain);
 
-    new_traces = hashtable_new(sizeof(pointer_t),
-                               sizeof(trace_t),
-                               hashtable_hash_pointer_t,
-                               hashtable_compare_pointer_t);
-    if (new_traces == NULL) {
-        return -1;
+static _Py_hashtable_t*
+tracemalloc_get_traces_table(unsigned int domain)
+{
+    if (domain == DEFAULT_DOMAIN) {
+        return tracemalloc_traces;
     }
-
-    if (_Py_hashtable_foreach(tracemalloc_traces, tracemalloc_use_domain_cb,
-                              new_traces) < 0)
-    {
-        _Py_hashtable_destroy(new_traces);
-        return -1;
+    else {
+        return _Py_hashtable_get(tracemalloc_domains, TO_PTR(domain));
     }
-
-    _Py_hashtable_destroy(tracemalloc_traces);
-    tracemalloc_traces = new_traces;
-
-    _Py_tracemalloc_config.use_domain = 1;
-
-    return 0;
 }
 
 
 static void
 tracemalloc_remove_trace(unsigned int domain, uintptr_t ptr)
 {
-    trace_t trace;
-    int removed;
-
     assert(_Py_tracemalloc_config.tracing);
 
-    if (_Py_tracemalloc_config.use_domain) {
-        pointer_t key = {ptr, domain};
-        removed = _Py_HASHTABLE_POP(tracemalloc_traces, key, trace);
-    }
-    else {
-        removed = _Py_HASHTABLE_POP(tracemalloc_traces, ptr, trace);
-    }
-    if (!removed) {
+    _Py_hashtable_t *traces = tracemalloc_get_traces_table(domain);
+    if (!traces) {
         return;
     }
 
-    assert(tracemalloc_traced_memory >= trace.size);
-    tracemalloc_traced_memory -= trace.size;
+    trace_t *trace = _Py_hashtable_steal(traces, TO_PTR(ptr));
+    if (!trace) {
+        return;
+    }
+    assert(tracemalloc_traced_memory >= trace->size);
+    tracemalloc_traced_memory -= trace->size;
+    raw_free(trace);
 }
 
 #define REMOVE_TRACE(ptr) \
@@ -577,63 +521,55 @@
 tracemalloc_add_trace(unsigned int domain, uintptr_t ptr,
                       size_t size)
 {
-    pointer_t key = {ptr, domain};
-    traceback_t *traceback;
-    trace_t trace;
-    _Py_hashtable_entry_t* entry;
-    int res;
-
     assert(_Py_tracemalloc_config.tracing);
 
-    traceback = traceback_new();
+    traceback_t *traceback = traceback_new();
     if (traceback == NULL) {
         return -1;
     }
 
-    if (!_Py_tracemalloc_config.use_domain && domain != DEFAULT_DOMAIN) {
-        /* first trace using a non-zero domain whereas traces use compact
-           (uintptr_t) keys: switch to pointer_t keys. */
-        if (tracemalloc_use_domain() < 0) {
+    _Py_hashtable_t *traces = tracemalloc_get_traces_table(domain);
+    if (traces == NULL) {
+        traces = tracemalloc_create_traces_table();
+        if (traces == NULL) {
+            return -1;
+        }
+
+        if (_Py_hashtable_set(tracemalloc_domains, TO_PTR(domain), traces) < 0) {
+            _Py_hashtable_destroy(traces);
             return -1;
         }
     }
 
-    if (_Py_tracemalloc_config.use_domain) {
-        entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, key);
-    }
-    else {
-        entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, ptr);
-    }
-
-    if (entry != NULL) {
+    trace_t *trace = _Py_hashtable_get(traces, TO_PTR(ptr));
+    if (trace != NULL) {
         /* the memory block is already tracked */
-        _Py_HASHTABLE_ENTRY_READ_DATA(tracemalloc_traces, entry, trace);
-        assert(tracemalloc_traced_memory >= trace.size);
-        tracemalloc_traced_memory -= trace.size;
+        assert(tracemalloc_traced_memory >= trace->size);
+        tracemalloc_traced_memory -= trace->size;
 
-        trace.size = size;
-        trace.traceback = traceback;
-        _Py_HASHTABLE_ENTRY_WRITE_DATA(tracemalloc_traces, entry, trace);
+        trace->size = size;
+        trace->traceback = traceback;
     }
     else {
-        trace.size = size;
-        trace.traceback = traceback;
+        trace = raw_malloc(sizeof(trace_t));
+        if (trace == NULL) {
+            return -1;
+        }
+        trace->size = size;
+        trace->traceback = traceback;
 
-        if (_Py_tracemalloc_config.use_domain) {
-            res = _Py_HASHTABLE_SET(tracemalloc_traces, key, trace);
-        }
-        else {
-            res = _Py_HASHTABLE_SET(tracemalloc_traces, ptr, trace);
-        }
+        int res = _Py_hashtable_set(traces, TO_PTR(ptr), trace);
         if (res != 0) {
+            raw_free(trace);
             return res;
         }
     }
 
     assert(tracemalloc_traced_memory <= SIZE_MAX - size);
     tracemalloc_traced_memory += size;
-    if (tracemalloc_traced_memory > tracemalloc_peak_traced_memory)
+    if (tracemalloc_traced_memory > tracemalloc_peak_traced_memory) {
         tracemalloc_peak_traced_memory = tracemalloc_traced_memory;
+    }
     return 0;
 }
 
@@ -684,7 +620,7 @@
         TABLES_LOCK();
 
         /* tracemalloc_add_trace() updates the trace if there is already
-           a trace at address (domain, ptr2) */
+           a trace at address ptr2 */
         if (ptr2 != ptr) {
             REMOVE_TRACE(ptr);
         }
@@ -699,7 +635,7 @@
 
                The GIL and the table lock ensures that only one thread is
                allocating memory. */
-            Py_UNREACHABLE();
+            Py_FatalError("tracemalloc_realloc() failed to allocate a trace");
         }
         TABLES_UNLOCK();
     }
@@ -728,7 +664,7 @@
         return;
 
      /* GIL cannot be locked in PyMem_RawFree() because it would introduce
-        a deadlock in PyThreadState_DeleteCurrent(). */
+        a deadlock in _PyThreadState_DeleteCurrent(). */
 
     alloc->free(alloc->ctx, ptr);
 
@@ -888,27 +824,11 @@
 #endif   /* TRACE_RAW_MALLOC */
 
 
-static int
-tracemalloc_clear_filename(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry,
-                           void *user_data)
+static void
+tracemalloc_clear_filename(void *value)
 {
-    PyObject *filename;
-
-    _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, filename);
+    PyObject *filename = (PyObject *)value;
     Py_DECREF(filename);
-    return 0;
-}
-
-
-static int
-traceback_free_traceback(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry,
-                         void *user_data)
-{
-    traceback_t *traceback;
-
-    _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, traceback);
-    raw_free(traceback);
-    return 0;
 }
 
 
@@ -921,14 +841,13 @@
 
     TABLES_LOCK();
     _Py_hashtable_clear(tracemalloc_traces);
+    _Py_hashtable_clear(tracemalloc_domains);
     tracemalloc_traced_memory = 0;
     tracemalloc_peak_traced_memory = 0;
     TABLES_UNLOCK();
 
-    _Py_hashtable_foreach(tracemalloc_tracebacks, traceback_free_traceback, NULL);
     _Py_hashtable_clear(tracemalloc_tracebacks);
 
-    _Py_hashtable_foreach(tracemalloc_filenames, tracemalloc_clear_filename, NULL);
     _Py_hashtable_clear(tracemalloc_filenames);
 }
 
@@ -968,29 +887,19 @@
     }
 #endif
 
-    tracemalloc_filenames = hashtable_new(sizeof(PyObject *), 0,
-                                          hashtable_hash_pyobject,
-                                          hashtable_compare_unicode);
+    tracemalloc_filenames = hashtable_new(hashtable_hash_pyobject,
+                                          hashtable_compare_unicode,
+                                          tracemalloc_clear_filename, NULL);
 
-    tracemalloc_tracebacks = hashtable_new(sizeof(traceback_t *), 0,
-                                           hashtable_hash_traceback,
-                                           hashtable_compare_traceback);
+    tracemalloc_tracebacks = hashtable_new(hashtable_hash_traceback,
+                                           hashtable_compare_traceback,
+                                           NULL, raw_free);
 
-    if (_Py_tracemalloc_config.use_domain) {
-        tracemalloc_traces = hashtable_new(sizeof(pointer_t),
-                                           sizeof(trace_t),
-                                           hashtable_hash_pointer_t,
-                                           hashtable_compare_pointer_t);
-    }
-    else {
-        tracemalloc_traces = hashtable_new(sizeof(uintptr_t),
-                                           sizeof(trace_t),
-                                           _Py_hashtable_hash_ptr,
-                                           _Py_hashtable_compare_direct);
-    }
+    tracemalloc_traces = tracemalloc_create_traces_table();
+    tracemalloc_domains = tracemalloc_create_domains_table();
 
     if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL
-       || tracemalloc_traces == NULL) {
+       || tracemalloc_traces == NULL || tracemalloc_domains == NULL) {
         PyErr_NoMemory();
         return -1;
     }
@@ -1001,6 +910,7 @@
     PyUnicode_InternInPlace(&unknown_filename);
 
     tracemalloc_empty_traceback.nframe = 1;
+    tracemalloc_empty_traceback.total_nframe = 1;
     /* borrowed reference */
     tracemalloc_empty_traceback.frames[0].filename = unknown_filename;
     tracemalloc_empty_traceback.frames[0].lineno = 0;
@@ -1021,9 +931,10 @@
     tracemalloc_stop();
 
     /* destroy hash tables */
+    _Py_hashtable_destroy(tracemalloc_domains);
+    _Py_hashtable_destroy(tracemalloc_traces);
     _Py_hashtable_destroy(tracemalloc_tracebacks);
     _Py_hashtable_destroy(tracemalloc_filenames);
-    _Py_hashtable_destroy(tracemalloc_traces);
 
 #if defined(TRACE_RAW_MALLOC)
     if (tables_lock != NULL) {
@@ -1046,10 +957,10 @@
     PyMemAllocatorEx alloc;
     size_t size;
 
-    if (max_nframe < 1 || max_nframe > MAX_NFRAME) {
+    if (max_nframe < 1 || (unsigned long) max_nframe > MAX_NFRAME) {
         PyErr_Format(PyExc_ValueError,
-                     "the number of frames must be in range [1; %i]",
-                     (int)MAX_NFRAME);
+                     "the number of frames must be in range [1; %lu]",
+                     MAX_NFRAME);
         return -1;
     }
 
@@ -1062,7 +973,6 @@
         return 0;
     }
 
-    assert(1 <= max_nframe && max_nframe <= MAX_NFRAME);
     _Py_tracemalloc_config.max_nframe = max_nframe;
 
     /* allocate a buffer to store a new traceback */
@@ -1191,11 +1101,11 @@
 static PyObject*
 traceback_to_pyobject(traceback_t *traceback, _Py_hashtable_t *intern_table)
 {
-    int i;
-    PyObject *frames, *frame;
+    PyObject *frames;
 
     if (intern_table != NULL) {
-        if (_Py_HASHTABLE_GET(intern_table, traceback, frames)) {
+        frames = _Py_hashtable_get(intern_table, (const void *)traceback);
+        if (frames) {
             Py_INCREF(frames);
             return frames;
         }
@@ -1205,8 +1115,8 @@
     if (frames == NULL)
         return NULL;
 
-    for (i=0; i < traceback->nframe; i++) {
-        frame = frame_to_pyobject(&traceback->frames[i]);
+    for (int i=0; i < traceback->nframe; i++) {
+        PyObject *frame = frame_to_pyobject(&traceback->frames[i]);
         if (frame == NULL) {
             Py_DECREF(frames);
             return NULL;
@@ -1215,7 +1125,7 @@
     }
 
     if (intern_table != NULL) {
-        if (_Py_HASHTABLE_SET(intern_table, traceback, frames) < 0) {
+        if (_Py_hashtable_set(intern_table, traceback, frames) < 0) {
             Py_DECREF(frames);
             PyErr_NoMemory();
             return NULL;
@@ -1228,13 +1138,13 @@
 
 
 static PyObject*
-trace_to_pyobject(unsigned int domain, trace_t *trace,
+trace_to_pyobject(unsigned int domain, const trace_t *trace,
                   _Py_hashtable_t *intern_tracebacks)
 {
     PyObject *trace_obj = NULL;
     PyObject *obj;
 
-    trace_obj = PyTuple_New(3);
+    trace_obj = PyTuple_New(4);
     if (trace_obj == NULL)
         return NULL;
 
@@ -1259,58 +1169,152 @@
     }
     PyTuple_SET_ITEM(trace_obj, 2, obj);
 
+    obj = PyLong_FromUnsignedLong(trace->traceback->total_nframe);
+    if (obj == NULL) {
+        Py_DECREF(trace_obj);
+        return NULL;
+    }
+    PyTuple_SET_ITEM(trace_obj, 3, obj);
+
     return trace_obj;
 }
 
 
 typedef struct {
     _Py_hashtable_t *traces;
+    _Py_hashtable_t *domains;
     _Py_hashtable_t *tracebacks;
     PyObject *list;
+    unsigned int domain;
 } get_traces_t;
 
+
 static int
-tracemalloc_get_traces_fill(_Py_hashtable_t *traces, _Py_hashtable_entry_t *entry,
+tracemalloc_copy_trace(_Py_hashtable_t *traces,
+                       const void *key, const void *value,
+                       void *user_data)
+{
+    _Py_hashtable_t *traces2 = (_Py_hashtable_t *)user_data;
+
+    trace_t *trace = (trace_t *)value;
+
+    trace_t *trace2 = raw_malloc(sizeof(trace_t));
+    if (trace2 == NULL) {
+        return -1;
+    }
+    *trace2 = *trace;
+    if (_Py_hashtable_set(traces2, key, trace2) < 0) {
+        raw_free(trace2);
+        return -1;
+    }
+    return 0;
+}
+
+
+static _Py_hashtable_t*
+tracemalloc_copy_traces(_Py_hashtable_t *traces)
+{
+    _Py_hashtable_t *traces2 = tracemalloc_create_traces_table();
+    if (traces2 == NULL) {
+        return NULL;
+    }
+
+    int err = _Py_hashtable_foreach(traces,
+                                    tracemalloc_copy_trace,
+                                    traces2);
+    if (err) {
+        _Py_hashtable_destroy(traces2);
+        return NULL;
+    }
+    return traces2;
+}
+
+
+static int
+tracemalloc_copy_domain(_Py_hashtable_t *domains,
+                        const void *key, const void *value,
+                        void *user_data)
+{
+    _Py_hashtable_t *domains2 = (_Py_hashtable_t *)user_data;
+
+    unsigned int domain = (unsigned int)FROM_PTR(key);
+    _Py_hashtable_t *traces = (_Py_hashtable_t *)value;
+
+    _Py_hashtable_t *traces2 = tracemalloc_copy_traces(traces);
+    if (_Py_hashtable_set(domains2, TO_PTR(domain), traces2) < 0) {
+        _Py_hashtable_destroy(traces2);
+        return -1;
+    }
+    return 0;
+}
+
+
+static _Py_hashtable_t*
+tracemalloc_copy_domains(_Py_hashtable_t *domains)
+{
+    _Py_hashtable_t *domains2 = tracemalloc_create_domains_table();
+    if (domains2 == NULL) {
+        return NULL;
+    }
+
+    int err = _Py_hashtable_foreach(domains,
+                                    tracemalloc_copy_domain,
+                                    domains2);
+    if (err) {
+        _Py_hashtable_destroy(domains2);
+        return NULL;
+    }
+    return domains2;
+}
+
+
+static int
+tracemalloc_get_traces_fill(_Py_hashtable_t *traces,
+                            const void *key, const void *value,
                             void *user_data)
 {
     get_traces_t *get_traces = user_data;
-    unsigned int domain;
-    trace_t trace;
-    PyObject *tracemalloc_obj;
-    int res;
 
-    if (_Py_tracemalloc_config.use_domain) {
-        pointer_t key;
-        _Py_HASHTABLE_ENTRY_READ_KEY(traces, entry, key);
-        domain = key.domain;
-    }
-    else {
-        domain = DEFAULT_DOMAIN;
-    }
-    _Py_HASHTABLE_ENTRY_READ_DATA(traces, entry, trace);
+    const trace_t *trace = (const trace_t *)value;
 
-    tracemalloc_obj = trace_to_pyobject(domain, &trace, get_traces->tracebacks);
-    if (tracemalloc_obj == NULL)
+    PyObject *tuple = trace_to_pyobject(get_traces->domain, trace,
+                                        get_traces->tracebacks);
+    if (tuple == NULL) {
         return 1;
+    }
 
-    res = PyList_Append(get_traces->list, tracemalloc_obj);
-    Py_DECREF(tracemalloc_obj);
-    if (res < 0)
+    int res = PyList_Append(get_traces->list, tuple);
+    Py_DECREF(tuple);
+    if (res < 0) {
         return 1;
+    }
 
     return 0;
 }
 
 
 static int
-tracemalloc_pyobject_decref_cb(_Py_hashtable_t *tracebacks,
-                               _Py_hashtable_entry_t *entry,
-                               void *user_data)
+tracemalloc_get_traces_domain(_Py_hashtable_t *domains,
+                              const void *key, const void *value,
+                              void *user_data)
 {
-    PyObject *obj;
-    _Py_HASHTABLE_ENTRY_READ_DATA(tracebacks, entry, obj);
+    get_traces_t *get_traces = user_data;
+
+    unsigned int domain = (unsigned int)FROM_PTR(key);
+    _Py_hashtable_t *traces = (_Py_hashtable_t *)value;
+
+    get_traces->domain = domain;
+    return _Py_hashtable_foreach(traces,
+                                 tracemalloc_get_traces_fill,
+                                 get_traces);
+}
+
+
+static void
+tracemalloc_pyobject_decref(void *value)
+{
+    PyObject *obj = (PyObject *)value;
     Py_DECREF(obj);
-    return 0;
 }
 
 
@@ -1331,9 +1335,9 @@
 /*[clinic end generated code: output=e9929876ced4b5cc input=6c7d2230b24255aa]*/
 {
     get_traces_t get_traces;
-    int err;
-
+    get_traces.domain = DEFAULT_DOMAIN;
     get_traces.traces = NULL;
+    get_traces.domains = NULL;
     get_traces.tracebacks = NULL;
     get_traces.list = PyList_New(0);
     if (get_traces.list == NULL)
@@ -1344,45 +1348,65 @@
 
     /* the traceback hash table is used temporarily to intern traceback tuple
        of (filename, lineno) tuples */
-    get_traces.tracebacks = hashtable_new(sizeof(traceback_t *),
-                                          sizeof(PyObject *),
-                                          _Py_hashtable_hash_ptr,
-                                          _Py_hashtable_compare_direct);
+    get_traces.tracebacks = hashtable_new(_Py_hashtable_hash_ptr,
+                                          _Py_hashtable_compare_direct,
+                                          NULL, tracemalloc_pyobject_decref);
     if (get_traces.tracebacks == NULL) {
-        PyErr_NoMemory();
-        goto error;
+        goto no_memory;
     }
 
+    // Copy all traces so tracemalloc_get_traces_fill() doesn't have to disable
+    // temporarily tracemalloc which would impact other threads and so would
+    // miss allocations while get_traces() is called.
     TABLES_LOCK();
-    get_traces.traces = _Py_hashtable_copy(tracemalloc_traces);
+    get_traces.traces = tracemalloc_copy_traces(tracemalloc_traces);
     TABLES_UNLOCK();
 
     if (get_traces.traces == NULL) {
-        PyErr_NoMemory();
+        goto no_memory;
+    }
+
+    TABLES_LOCK();
+    get_traces.domains = tracemalloc_copy_domains(tracemalloc_domains);
+    TABLES_UNLOCK();
+
+    if (get_traces.domains == NULL) {
+        goto no_memory;
+    }
+
+    // Convert traces to a list of tuples
+    set_reentrant(1);
+    int err = _Py_hashtable_foreach(get_traces.traces,
+                                    tracemalloc_get_traces_fill,
+                                    &get_traces);
+    if (!err) {
+        err = _Py_hashtable_foreach(get_traces.domains,
+                                    tracemalloc_get_traces_domain,
+                                    &get_traces);
+    }
+    set_reentrant(0);
+    if (err) {
         goto error;
     }
 
-    set_reentrant(1);
-    err = _Py_hashtable_foreach(get_traces.traces,
-                                tracemalloc_get_traces_fill, &get_traces);
-    set_reentrant(0);
-    if (err)
-        goto error;
-
     goto finally;
 
+no_memory:
+    PyErr_NoMemory();
+
 error:
     Py_CLEAR(get_traces.list);
 
 finally:
     if (get_traces.tracebacks != NULL) {
-        _Py_hashtable_foreach(get_traces.tracebacks,
-                              tracemalloc_pyobject_decref_cb, NULL);
         _Py_hashtable_destroy(get_traces.tracebacks);
     }
     if (get_traces.traces != NULL) {
         _Py_hashtable_destroy(get_traces.traces);
     }
+    if (get_traces.domains != NULL) {
+        _Py_hashtable_destroy(get_traces.domains);
+    }
 
     return get_traces.list;
 }
@@ -1391,26 +1415,26 @@
 static traceback_t*
 tracemalloc_get_traceback(unsigned int domain, uintptr_t ptr)
 {
-    trace_t trace;
-    int found;
 
     if (!_Py_tracemalloc_config.tracing)
         return NULL;
 
+    trace_t *trace;
     TABLES_LOCK();
-    if (_Py_tracemalloc_config.use_domain) {
-        pointer_t key = {ptr, domain};
-        found = _Py_HASHTABLE_GET(tracemalloc_traces, key, trace);
+    _Py_hashtable_t *traces = tracemalloc_get_traces_table(domain);
+    if (traces) {
+        trace = _Py_hashtable_get(traces, TO_PTR(ptr));
     }
     else {
-        found = _Py_HASHTABLE_GET(tracemalloc_traces, ptr, trace);
+        trace = NULL;
     }
     TABLES_UNLOCK();
 
-    if (!found)
+    if (!trace) {
         return NULL;
+    }
 
-    return trace.traceback;
+    return trace->traceback;
 }
 
 
@@ -1550,6 +1574,17 @@
 }
 
 
+static int
+tracemalloc_get_tracemalloc_memory_cb(_Py_hashtable_t *domains,
+                                      const void *key, const void *value,
+                                      void *user_data)
+{
+    const _Py_hashtable_t *traces = value;
+    size_t *size = (size_t*)user_data;
+    *size += _Py_hashtable_size(traces);
+    return 0;
+}
+
 
 /*[clinic input]
 _tracemalloc.get_tracemalloc_memory
@@ -1570,6 +1605,8 @@
 
     TABLES_LOCK();
     size += _Py_hashtable_size(tracemalloc_traces);
+    _Py_hashtable_foreach(tracemalloc_domains,
+                          tracemalloc_get_tracemalloc_memory_cb, &size);
     TABLES_UNLOCK();
 
     return PyLong_FromSize_t(size);
@@ -1602,6 +1639,30 @@
     return Py_BuildValue("nn", size, peak_size);
 }
 
+/*[clinic input]
+_tracemalloc.reset_peak
+
+Set the peak size of memory blocks traced by tracemalloc to the current size.
+
+Do nothing if the tracemalloc module is not tracing memory allocations.
+
+[clinic start generated code]*/
+
+static PyObject *
+_tracemalloc_reset_peak_impl(PyObject *module)
+/*[clinic end generated code: output=140c2870f691dbb2 input=18afd0635066e9ce]*/
+{
+    if (!_Py_tracemalloc_config.tracing) {
+        Py_RETURN_NONE;
+    }
+
+    TABLES_LOCK();
+    tracemalloc_peak_traced_memory = tracemalloc_traced_memory;
+    TABLES_UNLOCK();
+
+    Py_RETURN_NONE;
+}
+
 
 static PyMethodDef module_methods[] = {
     _TRACEMALLOC_IS_TRACING_METHODDEF
@@ -1613,6 +1674,7 @@
     _TRACEMALLOC_GET_TRACEBACK_LIMIT_METHODDEF
     _TRACEMALLOC_GET_TRACEMALLOC_MEMORY_METHODDEF
     _TRACEMALLOC_GET_TRACED_MEMORY_METHODDEF
+    _TRACEMALLOC_RESET_PEAK_METHODDEF
     /* sentinel */
     {NULL, NULL}
 };
@@ -1727,26 +1789,15 @@
         ptr = (uintptr_t)op;
     }
 
-    _Py_hashtable_entry_t* entry;
     int res = -1;
 
     TABLES_LOCK();
-    if (_Py_tracemalloc_config.use_domain) {
-        pointer_t key = {ptr, DEFAULT_DOMAIN};
-        entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, key);
-    }
-    else {
-        entry = _Py_HASHTABLE_GET_ENTRY(tracemalloc_traces, ptr);
-    }
-
-    if (entry != NULL) {
+    trace_t *trace = _Py_hashtable_get(tracemalloc_traces, TO_PTR(ptr));
+    if (trace != NULL) {
         /* update the traceback of the memory block */
         traceback_t *traceback = traceback_new();
         if (traceback != NULL) {
-            trace_t trace;
-            _Py_HASHTABLE_ENTRY_READ_DATA(tracemalloc_traces, entry, trace);
-            trace.traceback = traceback;
-            _Py_HASHTABLE_ENTRY_WRITE_DATA(tracemalloc_traces, entry, trace);
+            trace->traceback = traceback;
             res = 0;
         }
     }
diff --git a/Modules/_uuidmodule.c b/Modules/_uuidmodule.c
index 0b7aa72..3f33e22 100644
--- a/Modules/_uuidmodule.c
+++ b/Modules/_uuidmodule.c
@@ -1,5 +1,5 @@
 /*
- * Python UUID module that wraps libuuid -
+ * Python UUID module that wraps libuuid or Windows rpcrt4.dll.
  * DCE compatible Universally Unique Identifier library.
  */
 
@@ -12,6 +12,12 @@
 #include <uuid.h>
 #endif
 
+#ifdef MS_WINDOWS
+#include <rpc.h>
+#endif
+
+#ifndef MS_WINDOWS
+
 static PyObject *
 py_uuid_generate_time_safe(PyObject *Py_UNUSED(context),
                            PyObject *Py_UNUSED(ignored))
@@ -31,45 +37,86 @@
     return Py_BuildValue("y#i", buf, sizeof(uuid), (int) status);
 # else
     return Py_BuildValue("y#i", (const char *) &uuid, sizeof(uuid), (int) status);
-# endif
-#else
+# endif /* HAVE_UUID_CREATE */
+#else /* HAVE_UUID_GENERATE_TIME_SAFE */
     uuid_generate_time(uuid);
     return Py_BuildValue("y#O", (const char *) uuid, sizeof(uuid), Py_None);
-#endif
+#endif /* HAVE_UUID_GENERATE_TIME_SAFE */
 }
 
+#else /* MS_WINDOWS */
+
+static PyObject *
+py_UuidCreate(PyObject *Py_UNUSED(context),
+              PyObject *Py_UNUSED(ignored))
+{
+    UUID uuid;
+    RPC_STATUS res;
+
+    Py_BEGIN_ALLOW_THREADS
+    res = UuidCreateSequential(&uuid);
+    Py_END_ALLOW_THREADS
+
+    switch (res) {
+    case RPC_S_OK:
+    case RPC_S_UUID_LOCAL_ONLY:
+    case RPC_S_UUID_NO_ADDRESS:
+        /*
+        All success codes, but the latter two indicate that the UUID is random
+        rather than based on the MAC address. If the OS can't figure this out,
+        neither can we, so we'll take it anyway.
+        */
+        return Py_BuildValue("y#", (const char *)&uuid, sizeof(uuid));
+    }
+    PyErr_SetFromWindowsErr(res);
+    return NULL;
+}
+
+#endif /* MS_WINDOWS */
+
+
+static int
+uuid_exec(PyObject *module) {
+    assert(sizeof(uuid_t) == 16);
+#if defined(MS_WINDOWS)
+    int has_uuid_generate_time_safe = 0;
+#elif defined(HAVE_UUID_GENERATE_TIME_SAFE)
+    int has_uuid_generate_time_safe = 1;
+#else
+    int has_uuid_generate_time_safe = 0;
+#endif
+    if (PyModule_AddIntConstant(module, "has_uuid_generate_time_safe",
+                                has_uuid_generate_time_safe) < 0) {
+        return -1;
+    }
+    return 0;
+}
 
 static PyMethodDef uuid_methods[] = {
+#if defined(HAVE_UUID_UUID_H) || defined(HAVE_UUID_H)
     {"generate_time_safe", py_uuid_generate_time_safe, METH_NOARGS, NULL},
+#endif
+#if defined(MS_WINDOWS)
+    {"UuidCreate", py_UuidCreate, METH_NOARGS, NULL},
+#endif
     {NULL, NULL, 0, NULL}           /* sentinel */
 };
 
+static PyModuleDef_Slot uuid_slots[] = {
+    {Py_mod_exec, uuid_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef uuidmodule = {
     PyModuleDef_HEAD_INIT,
     .m_name = "_uuid",
-    .m_size = -1,
+    .m_size = 0,
     .m_methods = uuid_methods,
+    .m_slots = uuid_slots,
 };
 
 PyMODINIT_FUNC
 PyInit__uuid(void)
 {
-    PyObject *mod;
-    assert(sizeof(uuid_t) == 16);
-#ifdef HAVE_UUID_GENERATE_TIME_SAFE
-    int has_uuid_generate_time_safe = 1;
-#else
-    int has_uuid_generate_time_safe = 0;
-#endif
-    mod = PyModule_Create(&uuidmodule);
-    if (mod == NULL) {
-        return NULL;
-    }
-    if (PyModule_AddIntConstant(mod, "has_uuid_generate_time_safe",
-                                has_uuid_generate_time_safe) < 0) {
-        Py_DECREF(mod);
-        return NULL;
-    }
-
-    return mod;
+    return PyModuleDef_Init(&uuidmodule);
 }
diff --git a/Modules/_weakref.c b/Modules/_weakref.c
index c1238e0..e33cba2 100644
--- a/Modules/_weakref.c
+++ b/Modules/_weakref.c
@@ -1,8 +1,9 @@
 #include "Python.h"
+#include "pycore_object.h"   // _PyObject_GET_WEAKREFS_LISTPTR
 
 
 #define GET_WEAKREFS_LISTPTR(o) \
-        ((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))
+        ((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
 
 /*[clinic input]
 module _weakref
@@ -136,14 +137,48 @@
     {NULL, NULL, 0, NULL}
 };
 
+static int
+weakref_exec(PyObject *module)
+{
+    Py_INCREF(&_PyWeakref_RefType);
+    if (PyModule_AddObject(module, "ref", (PyObject *) &_PyWeakref_RefType) < 0) {
+        Py_DECREF(&_PyWeakref_RefType);
+        return -1;
+    }
+    Py_INCREF(&_PyWeakref_RefType);
+    if (PyModule_AddObject(module, "ReferenceType",
+                           (PyObject *) &_PyWeakref_RefType) < 0) {
+        Py_DECREF(&_PyWeakref_RefType);
+        return -1;
+    }
+    Py_INCREF(&_PyWeakref_ProxyType);
+    if (PyModule_AddObject(module, "ProxyType",
+                           (PyObject *) &_PyWeakref_ProxyType) < 0) {
+        Py_DECREF(&_PyWeakref_ProxyType);
+        return -1;
+    }
+    Py_INCREF(&_PyWeakref_CallableProxyType);
+    if (PyModule_AddObject(module, "CallableProxyType",
+                           (PyObject *) &_PyWeakref_CallableProxyType) < 0) {
+        Py_DECREF(&_PyWeakref_CallableProxyType);
+        return -1;
+    }
+
+    return 0;
+}
+
+static struct PyModuleDef_Slot weakref_slots[] = {
+    {Py_mod_exec, weakref_exec},
+    {0, NULL}
+};
 
 static struct PyModuleDef weakrefmodule = {
     PyModuleDef_HEAD_INIT,
     "_weakref",
     "Weak-reference support module.",
-    -1,
+    0,
     weakref_functions,
-    NULL,
+    weakref_slots,
     NULL,
     NULL,
     NULL
@@ -152,23 +187,5 @@
 PyMODINIT_FUNC
 PyInit__weakref(void)
 {
-    PyObject *m;
-
-    m = PyModule_Create(&weakrefmodule);
-
-    if (m != NULL) {
-        Py_INCREF(&_PyWeakref_RefType);
-        PyModule_AddObject(m, "ref",
-                           (PyObject *) &_PyWeakref_RefType);
-        Py_INCREF(&_PyWeakref_RefType);
-        PyModule_AddObject(m, "ReferenceType",
-                           (PyObject *) &_PyWeakref_RefType);
-        Py_INCREF(&_PyWeakref_ProxyType);
-        PyModule_AddObject(m, "ProxyType",
-                           (PyObject *) &_PyWeakref_ProxyType);
-        Py_INCREF(&_PyWeakref_CallableProxyType);
-        PyModule_AddObject(m, "CallableProxyType",
-                           (PyObject *) &_PyWeakref_CallableProxyType);
-    }
-    return m;
+    return PyModuleDef_Init(&weakrefmodule);
 }
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
index 647075c..e1672c4 100644
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -35,7 +35,7 @@
 /* See http://www.python.org/2.4/license for licensing details. */
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #define WINDOWS_LEAN_AND_MEAN
 #include "windows.h"
@@ -603,11 +603,10 @@
         sizeof(rdb->MountPointReparseBuffer.PathBuffer) +
         /* Two +1's for NUL terminators. */
         (prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR);
-    rdb = (_Py_PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size);
+    rdb = (_Py_PREPARSE_DATA_BUFFER)PyMem_RawCalloc(1, rdb_size);
     if (rdb == NULL)
         goto cleanup;
 
-    memset(rdb, 0, rdb_size);
     rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
     rdb->ReparseDataLength = rdb_size - _Py_REPARSE_DATA_BUFFER_HEADER_SIZE;
     rdb->MountPointReparseBuffer.SubstituteNameOffset = 0;
@@ -1081,6 +1080,14 @@
         return NULL;
     }
 
+    PyInterpreterState *interp = PyInterpreterState_Get();
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
+    if (config->_isolated_interpreter) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "subprocess not supported for isolated subinterpreters");
+        return NULL;
+    }
+
     ZeroMemory(&si, sizeof(si));
     si.StartupInfo.cb = sizeof(si);
 
@@ -1111,8 +1118,8 @@
         }
     }
     else if (command_line != Py_None) {
-        PyErr_Format(PyExc_TypeError, 
-                     "CreateProcess() argument 2 must be str or None, not %s", 
+        PyErr_Format(PyExc_TypeError,
+                     "CreateProcess() argument 2 must be str or None, not %s",
                      Py_TYPE(command_line)->tp_name);
         goto cleanup;
     }
diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c
index db1116a..de11c09 100644
--- a/Modules/_xxsubinterpretersmodule.c
+++ b/Modules/_xxsubinterpretersmodule.c
@@ -26,9 +26,9 @@
 static PyInterpreterState *
 _get_current(void)
 {
-    // _PyInterpreterState_Get() aborts if lookup fails, so don't need
+    // PyInterpreterState_Get() aborts if lookup fails, so don't need
     // to check the result for NULL.
-    return _PyInterpreterState_Get();
+    return PyInterpreterState_Get();
 }
 
 
@@ -538,7 +538,7 @@
 
 typedef struct _channelassociations {
     // Note that the list entries are never removed for interpreter
-    // for which the channel is closed.  This should be a problem in
+    // for which the channel is closed.  This should not be a problem in
     // practice.  Also, a channel isn't automatically closed when an
     // interpreter is destroyed.
     int64_t numsendopen;
@@ -1179,11 +1179,6 @@
 {
     int64_t *cids = NULL;
     PyThread_acquire_lock(channels->mutex, WAIT_LOCK);
-    int64_t numopen = channels->numopen;
-    if (numopen >= PY_SSIZE_T_MAX) {
-        PyErr_SetString(PyExc_RuntimeError, "too many channels open");
-        goto done;
-    }
     int64_t *ids = PyMem_NEW(int64_t, (Py_ssize_t)(channels->numopen));
     if (ids == NULL) {
         goto done;
@@ -1350,19 +1345,16 @@
     _PyCrossInterpreterData *data = _channel_next(chan, PyInterpreterState_GetID(interp));
     PyThread_release_lock(mutex);
     if (data == NULL) {
-        if (!PyErr_Occurred()) {
-            PyErr_Format(ChannelEmptyError, "channel %" PRId64 " is empty", id);
-        }
         return NULL;
     }
 
     // Convert the data back to an object.
     PyObject *obj = _PyCrossInterpreterData_NewObject(data);
+    _PyCrossInterpreterData_Release(data);
+    PyMem_Free(data);
     if (obj == NULL) {
         return NULL;
     }
-    _PyCrossInterpreterData_Release(data);
-    PyMem_Free(data);
 
     return obj;
 }
@@ -1395,6 +1387,24 @@
     return _channels_close(channels, id, NULL, end, force);
 }
 
+static int
+_channel_is_associated(_channels *channels, int64_t cid, int64_t interp,
+                       int send)
+{
+    _PyChannelState *chan = _channels_lookup(channels, cid, NULL);
+    if (chan == NULL) {
+        return -1;
+    } else if (send && chan->closing != NULL) {
+        PyErr_Format(ChannelClosedError, "channel %" PRId64 " closed", cid);
+        return -1;
+    }
+
+    _channelend *end = _channelend_find(send ? chan->ends->send : chan->ends->recv,
+                                        interp, NULL);
+
+    return (end != NULL && end->open);
+}
+
 /* ChannelID class */
 
 static PyTypeObject ChannelIDtype;
@@ -1428,7 +1438,7 @@
     else {
         PyErr_Format(PyExc_TypeError,
                      "channel ID must be an int, got %.100s",
-                     arg->ob_type->tp_name);
+                     Py_TYPE(arg)->tp_name);
         return 0;
     }
     *(int64_t *)ptr = cid;
@@ -1830,14 +1840,17 @@
                         "interpreter has more than one thread");
         return -1;
     }
-    PyFrameObject *frame = tstate->frame;
+
+    assert(!PyErr_Occurred());
+    PyFrameObject *frame = PyThreadState_GetFrame(tstate);
     if (frame == NULL) {
-        if (PyErr_Occurred() != NULL) {
-            return -1;
-        }
         return 0;
     }
-    return (int)(frame->f_executing);
+
+    int executing = (int)(frame->f_executing);
+    Py_DECREF(frame);
+
+    return executing;
 }
 
 static int
@@ -1928,7 +1941,7 @@
 
     // Switch to interpreter.
     PyThreadState *save_tstate = NULL;
-    if (interp != _PyInterpreterState_Get()) {
+    if (interp != PyInterpreterState_Get()) {
         // XXX Using the "head" thread isn't strictly correct.
         PyThreadState *tstate = PyInterpreterState_ThreadHead(interp);
         // XXX Possible GILState issues?
@@ -1986,16 +1999,20 @@
 }
 
 static PyObject *
-interp_create(PyObject *self, PyObject *args)
+interp_create(PyObject *self, PyObject *args, PyObject *kwds)
 {
-    if (!PyArg_UnpackTuple(args, "create", 0, 0)) {
+
+    static char *kwlist[] = {"isolated", NULL};
+    int isolated = 1;
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|$i:create", kwlist,
+                                     &isolated)) {
         return NULL;
     }
 
     // Create and initialize the new interpreter.
     PyThreadState *save_tstate = PyThreadState_Swap(NULL);
     // XXX Possible GILState issues?
-    PyThreadState *tstate = Py_NewInterpreter();
+    PyThreadState *tstate = _Py_NewInterpreter(isolated);
     PyThreadState_Swap(save_tstate);
     if (tstate == NULL) {
         /* Since no new thread state was created, there is no exception to
@@ -2004,7 +2021,8 @@
         PyErr_SetString(PyExc_RuntimeError, "interpreter creation failed");
         return NULL;
     }
-    PyObject *idobj = _PyInterpreterState_GetIDObject(tstate->interp);
+    PyInterpreterState *interp = PyThreadState_GetInterpreter(tstate);
+    PyObject *idobj = _PyInterpreterState_GetIDObject(interp);
     if (idobj == NULL) {
         // XXX Possible GILState issues?
         save_tstate = PyThreadState_Swap(tstate);
@@ -2012,7 +2030,7 @@
         PyThreadState_Swap(save_tstate);
         return NULL;
     }
-    _PyInterpreterState_RequireIDRef(tstate->interp, 1);
+    _PyInterpreterState_RequireIDRef(interp, 1);
     return idobj;
 }
 
@@ -2058,7 +2076,6 @@
     }
 
     // Destroy the interpreter.
-    //PyInterpreterState_Delete(interp);
     PyThreadState *tstate = PyInterpreterState_ThreadHead(interp);
     // XXX Possible GILState issues?
     PyThreadState *save_tstate = PyThreadState_Swap(tstate);
@@ -2135,7 +2152,7 @@
 interp_get_main(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
     // Currently, 0 is always the main interpreter.
-    PY_INT64_T id = 0;
+    int64_t id = 0;
     return _PyInterpreterID_New(id);
 }
 
@@ -2327,6 +2344,68 @@
 Return the list of all IDs for active channels.");
 
 static PyObject *
+channel_list_interpreters(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    static char *kwlist[] = {"cid", "send", NULL};
+    int64_t cid;            /* Channel ID */
+    int send = 0;           /* Send or receive end? */
+    int64_t id;
+    PyObject *ids, *id_obj;
+    PyInterpreterState *interp;
+
+    if (!PyArg_ParseTupleAndKeywords(
+            args, kwds, "O&$p:channel_list_interpreters",
+            kwlist, channel_id_converter, &cid, &send)) {
+        return NULL;
+    }
+
+    ids = PyList_New(0);
+    if (ids == NULL) {
+        goto except;
+    }
+
+    interp = PyInterpreterState_Head();
+    while (interp != NULL) {
+        id = PyInterpreterState_GetID(interp);
+        assert(id >= 0);
+        int res = _channel_is_associated(&_globals.channels, cid, id, send);
+        if (res < 0) {
+            goto except;
+        }
+        if (res) {
+            id_obj = _PyInterpreterState_GetIDObject(interp);
+            if (id_obj == NULL) {
+                goto except;
+            }
+            res = PyList_Insert(ids, 0, id_obj);
+            Py_DECREF(id_obj);
+            if (res < 0) {
+                goto except;
+            }
+        }
+        interp = PyInterpreterState_Next(interp);
+    }
+
+    goto finally;
+
+except:
+    Py_XDECREF(ids);
+    ids = NULL;
+
+finally:
+    return ids;
+}
+
+PyDoc_STRVAR(channel_list_interpreters_doc,
+"channel_list_interpreters(cid, *, send) -> [id]\n\
+\n\
+Return the list of all interpreter IDs associated with an end of the channel.\n\
+\n\
+The 'send' argument should be a boolean indicating whether to use the send or\n\
+receive end.");
+
+
+static PyObject *
 channel_send(PyObject *self, PyObject *args, PyObject *kwds)
 {
     static char *kwlist[] = {"cid", "obj", NULL};
@@ -2351,20 +2430,37 @@
 static PyObject *
 channel_recv(PyObject *self, PyObject *args, PyObject *kwds)
 {
-    static char *kwlist[] = {"cid", NULL};
+    static char *kwlist[] = {"cid", "default", NULL};
     int64_t cid;
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&:channel_recv", kwlist,
-                                     channel_id_converter, &cid)) {
+    PyObject *dflt = NULL;
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|O:channel_recv", kwlist,
+                                     channel_id_converter, &cid, &dflt)) {
         return NULL;
     }
+    Py_XINCREF(dflt);
 
-    return _channel_recv(&_globals.channels, cid);
+    PyObject *obj = _channel_recv(&_globals.channels, cid);
+    if (obj != NULL) {
+        Py_XDECREF(dflt);
+        return obj;
+    } else if (PyErr_Occurred()) {
+        Py_XDECREF(dflt);
+        return NULL;
+    } else if (dflt != NULL) {
+        return dflt;
+    } else {
+        PyErr_Format(ChannelEmptyError, "channel %" PRId64 " is empty", cid);
+        return NULL;
+    }
 }
 
 PyDoc_STRVAR(channel_recv_doc,
-"channel_recv(cid) -> obj\n\
+"channel_recv(cid, [default]) -> obj\n\
 \n\
-Return a new object from the data at the from of the channel's queue.");
+Return a new object from the data at the front of the channel's queue.\n\
+\n\
+If there is nothing to receive then raise ChannelEmptyError, unless\n\
+a default value is provided.  In that case return it.");
 
 static PyObject *
 channel_close(PyObject *self, PyObject *args, PyObject *kwds)
@@ -2455,8 +2551,8 @@
 }
 
 static PyMethodDef module_functions[] = {
-    {"create",                    (PyCFunction)interp_create,
-     METH_VARARGS, create_doc},
+    {"create",                    (PyCFunction)(void(*)(void))interp_create,
+     METH_VARARGS | METH_KEYWORDS, create_doc},
     {"destroy",                   (PyCFunction)(void(*)(void))interp_destroy,
      METH_VARARGS | METH_KEYWORDS, destroy_doc},
     {"list_all",                  interp_list_all,
@@ -2479,6 +2575,8 @@
      METH_VARARGS | METH_KEYWORDS, channel_destroy_doc},
     {"channel_list_all",          channel_list_all,
      METH_NOARGS, channel_list_all_doc},
+    {"channel_list_interpreters", (PyCFunction)(void(*)(void))channel_list_interpreters,
+     METH_VARARGS | METH_KEYWORDS, channel_list_interpreters_doc},
     {"channel_send",              (PyCFunction)(void(*)(void))channel_send,
      METH_VARARGS | METH_KEYWORDS, channel_send_doc},
     {"channel_recv",              (PyCFunction)(void(*)(void))channel_recv,
diff --git a/Modules/_xxtestfuzz/_xxtestfuzz.c b/Modules/_xxtestfuzz/_xxtestfuzz.c
index 781dd23..e0694de 100644
--- a/Modules/_xxtestfuzz/_xxtestfuzz.c
+++ b/Modules/_xxtestfuzz/_xxtestfuzz.c
@@ -44,10 +44,5 @@
 PyMODINIT_FUNC
 PyInit__xxtestfuzz(void)
 {
-    PyObject *m = NULL;
-
-    if ((m = PyModule_Create(&_fuzzmodule)) == NULL) {
-        return NULL;
-    }
-    return m;
+    return PyModule_Create(&_fuzzmodule);
 }
diff --git a/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/hello_string b/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/hello_string
new file mode 100644
index 0000000..92d47cd
--- /dev/null
+++ b/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/hello_string
Binary files differ
diff --git a/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/long_zero b/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/long_zero
new file mode 100644
index 0000000..d952225
--- /dev/null
+++ b/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/long_zero
Binary files differ
diff --git a/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/varied_format_string b/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/varied_format_string
new file mode 100644
index 0000000..a150dc0
--- /dev/null
+++ b/Modules/_xxtestfuzz/fuzz_struct_unpack_corpus/varied_format_string
Binary files differ
diff --git a/Modules/_xxtestfuzz/fuzz_tests.txt b/Modules/_xxtestfuzz/fuzz_tests.txt
index 9d330a6..053b77b 100644
--- a/Modules/_xxtestfuzz/fuzz_tests.txt
+++ b/Modules/_xxtestfuzz/fuzz_tests.txt
@@ -5,3 +5,4 @@
 fuzz_sre_compile
 fuzz_sre_match
 fuzz_csv_reader
+fuzz_struct_unpack
diff --git a/Modules/_xxtestfuzz/fuzzer.c b/Modules/_xxtestfuzz/fuzzer.c
index 1821eb2..6bd2c3a 100644
--- a/Modules/_xxtestfuzz/fuzzer.c
+++ b/Modules/_xxtestfuzz/fuzzer.c
@@ -79,6 +79,69 @@
     return 0;
 }
 
+
+PyObject* struct_unpack_method = NULL;
+PyObject* struct_error = NULL;
+/* Called by LLVMFuzzerTestOneInput for initialization */
+static int init_struct_unpack() {
+    /* Import struct.unpack */
+    PyObject* struct_module = PyImport_ImportModule("struct");
+    if (struct_module == NULL) {
+        return 0;
+    }
+    struct_error = PyObject_GetAttrString(struct_module, "error");
+    if (struct_error == NULL) {
+        return 0;
+    }
+    struct_unpack_method = PyObject_GetAttrString(struct_module, "unpack");
+    return struct_unpack_method != NULL;
+}
+/* Fuzz struct.unpack(x, y) */
+static int fuzz_struct_unpack(const char* data, size_t size) {
+    /* Everything up to the first null byte is considered the
+       format. Everything after is the buffer */
+    const char* first_null = memchr(data, '\0', size);
+    if (first_null == NULL) {
+        return 0;
+    }
+
+    size_t format_length = first_null - data;
+    size_t buffer_length = size - format_length - 1;
+
+    PyObject* pattern = PyBytes_FromStringAndSize(data, format_length);
+    if (pattern == NULL) {
+        return 0;
+    }
+    PyObject* buffer = PyBytes_FromStringAndSize(first_null + 1, buffer_length);
+    if (buffer == NULL) {
+        Py_DECREF(pattern);
+        return 0;
+    }
+
+    PyObject* unpacked = PyObject_CallFunctionObjArgs(
+        struct_unpack_method, pattern, buffer, NULL);
+    /* Ignore any overflow errors, these are easily triggered accidentally */
+    if (unpacked == NULL && PyErr_ExceptionMatches(PyExc_OverflowError)) {
+        PyErr_Clear();
+    }
+    /* The pascal format string will throw a negative size when passing 0
+       like: struct.unpack('0p', b'') */
+    if (unpacked == NULL && PyErr_ExceptionMatches(PyExc_SystemError)) {
+        PyErr_Clear();
+    }
+    /* Ignore any struct.error exceptions, these can be caused by invalid
+       formats or incomplete buffers both of which are common. */
+    if (unpacked == NULL && PyErr_ExceptionMatches(struct_error)) {
+        PyErr_Clear();
+    }
+
+    Py_XDECREF(unpacked);
+    Py_DECREF(pattern);
+    Py_DECREF(buffer);
+    return 0;
+}
+
+
 #define MAX_JSON_TEST_SIZE 0x10000
 
 PyObject* json_loads_method = NULL;
@@ -104,7 +167,7 @@
     if (input_bytes == NULL) {
         return 0;
     }
-    PyObject* parsed = PyObject_CallFunctionObjArgs(json_loads_method, input_bytes, NULL);
+    PyObject* parsed = PyObject_CallOneArg(json_loads_method, input_bytes);
     if (parsed == NULL) {
         /* Ignore ValueError as the fuzzer will more than likely
            generate some invalid json and values */
@@ -190,9 +253,10 @@
         PyErr_Clear();
     }
     /* Ignore some common errors thrown by sre_parse:
-       Overflow, Assertion and Index */
+       Overflow, Assertion, Recursion and Index */
     if (compiled == NULL && (PyErr_ExceptionMatches(PyExc_OverflowError) ||
                              PyErr_ExceptionMatches(PyExc_AssertionError) ||
+                             PyErr_ExceptionMatches(PyExc_RecursionError) ||
                              PyErr_ExceptionMatches(PyExc_IndexError))
     ) {
         PyErr_Clear();
@@ -263,7 +327,7 @@
     PyObject* pattern = compiled_patterns[idx];
     PyObject* match_callable = PyObject_GetAttrString(pattern, "match");
 
-    PyObject* matches = PyObject_CallFunctionObjArgs(match_callable, to_match, NULL);
+    PyObject* matches = PyObject_CallOneArg(match_callable, to_match);
 
     Py_XDECREF(matches);
     Py_DECREF(match_callable);
@@ -378,6 +442,16 @@
 #if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_builtin_unicode)
     rv |= _run_fuzz(data, size, fuzz_builtin_unicode);
 #endif
+#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_struct_unpack)
+    static int STRUCT_UNPACK_INITIALIZED = 0;
+    if (!STRUCT_UNPACK_INITIALIZED && !init_struct_unpack()) {
+        PyErr_Print();
+        abort();
+    } else {
+        STRUCT_UNPACK_INITIALIZED = 1;
+    }
+    rv |= _run_fuzz(data, size, fuzz_struct_unpack);
+#endif
 #if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_json_loads)
     static int JSON_LOADS_INITIALIZED = 0;
     if (!JSON_LOADS_INITIALIZED && !init_json_loads()) {
diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c
new file mode 100644
index 0000000..2cee65f
--- /dev/null
+++ b/Modules/_zoneinfo.c
@@ -0,0 +1,2700 @@
+#include "Python.h"
+#include "structmember.h"
+
+#include <ctype.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#include "datetime.h"
+
+// Imports
+static PyObject *io_open = NULL;
+static PyObject *_tzpath_find_tzfile = NULL;
+static PyObject *_common_mod = NULL;
+
+typedef struct TransitionRuleType TransitionRuleType;
+typedef struct StrongCacheNode StrongCacheNode;
+
+typedef struct {
+    PyObject *utcoff;
+    PyObject *dstoff;
+    PyObject *tzname;
+    long utcoff_seconds;
+} _ttinfo;
+
+typedef struct {
+    _ttinfo std;
+    _ttinfo dst;
+    int dst_diff;
+    TransitionRuleType *start;
+    TransitionRuleType *end;
+    unsigned char std_only;
+} _tzrule;
+
+typedef struct {
+    PyDateTime_TZInfo base;
+    PyObject *key;
+    PyObject *file_repr;
+    PyObject *weakreflist;
+    size_t num_transitions;
+    size_t num_ttinfos;
+    int64_t *trans_list_utc;
+    int64_t *trans_list_wall[2];
+    _ttinfo **trans_ttinfos;  // References to the ttinfo for each transition
+    _ttinfo *ttinfo_before;
+    _tzrule tzrule_after;
+    _ttinfo *_ttinfos;  // Unique array of ttinfos for ease of deallocation
+    unsigned char fixed_offset;
+    unsigned char source;
+} PyZoneInfo_ZoneInfo;
+
+struct TransitionRuleType {
+    int64_t (*year_to_timestamp)(TransitionRuleType *, int);
+};
+
+typedef struct {
+    TransitionRuleType base;
+    uint8_t month;
+    uint8_t week;
+    uint8_t day;
+    int8_t hour;
+    int8_t minute;
+    int8_t second;
+} CalendarRule;
+
+typedef struct {
+    TransitionRuleType base;
+    uint8_t julian;
+    unsigned int day;
+    int8_t hour;
+    int8_t minute;
+    int8_t second;
+} DayRule;
+
+struct StrongCacheNode {
+    StrongCacheNode *next;
+    StrongCacheNode *prev;
+    PyObject *key;
+    PyObject *zone;
+};
+
+static PyTypeObject PyZoneInfo_ZoneInfoType;
+
+// Globals
+static PyObject *TIMEDELTA_CACHE = NULL;
+static PyObject *ZONEINFO_WEAK_CACHE = NULL;
+static StrongCacheNode *ZONEINFO_STRONG_CACHE = NULL;
+static size_t ZONEINFO_STRONG_CACHE_MAX_SIZE = 8;
+
+static _ttinfo NO_TTINFO = {NULL, NULL, NULL, 0};
+
+// Constants
+static const int EPOCHORDINAL = 719163;
+static int DAYS_IN_MONTH[] = {
+    -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
+};
+
+static int DAYS_BEFORE_MONTH[] = {
+    -1, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
+};
+
+static const int SOURCE_NOCACHE = 0;
+static const int SOURCE_CACHE = 1;
+static const int SOURCE_FILE = 2;
+
+// Forward declarations
+static int
+load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj);
+static void
+utcoff_to_dstoff(size_t *trans_idx, long *utcoffs, long *dstoffs,
+                 unsigned char *isdsts, size_t num_transitions,
+                 size_t num_ttinfos);
+static int
+ts_to_local(size_t *trans_idx, int64_t *trans_utc, long *utcoff,
+            int64_t *trans_local[2], size_t num_ttinfos,
+            size_t num_transitions);
+
+static int
+parse_tz_str(PyObject *tz_str_obj, _tzrule *out);
+
+static Py_ssize_t
+parse_abbr(const char *const p, PyObject **abbr);
+static Py_ssize_t
+parse_tz_delta(const char *const p, long *total_seconds);
+static Py_ssize_t
+parse_transition_time(const char *const p, int8_t *hour, int8_t *minute,
+                      int8_t *second);
+static Py_ssize_t
+parse_transition_rule(const char *const p, TransitionRuleType **out);
+
+static _ttinfo *
+find_tzrule_ttinfo(_tzrule *rule, int64_t ts, unsigned char fold, int year);
+static _ttinfo *
+find_tzrule_ttinfo_fromutc(_tzrule *rule, int64_t ts, int year,
+                           unsigned char *fold);
+
+static int
+build_ttinfo(long utcoffset, long dstoffset, PyObject *tzname, _ttinfo *out);
+static void
+xdecref_ttinfo(_ttinfo *ttinfo);
+static int
+ttinfo_eq(const _ttinfo *const tti0, const _ttinfo *const tti1);
+
+static int
+build_tzrule(PyObject *std_abbr, PyObject *dst_abbr, long std_offset,
+             long dst_offset, TransitionRuleType *start,
+             TransitionRuleType *end, _tzrule *out);
+static void
+free_tzrule(_tzrule *tzrule);
+
+static PyObject *
+load_timedelta(long seconds);
+
+static int
+get_local_timestamp(PyObject *dt, int64_t *local_ts);
+static _ttinfo *
+find_ttinfo(PyZoneInfo_ZoneInfo *self, PyObject *dt);
+
+static int
+ymd_to_ord(int y, int m, int d);
+static int
+is_leap_year(int year);
+
+static size_t
+_bisect(const int64_t value, const int64_t *arr, size_t size);
+
+static void
+eject_from_strong_cache(const PyTypeObject *const type, PyObject *key);
+static void
+clear_strong_cache(const PyTypeObject *const type);
+static void
+update_strong_cache(const PyTypeObject *const type, PyObject *key,
+                    PyObject *zone);
+static PyObject *
+zone_from_strong_cache(const PyTypeObject *const type, PyObject *key);
+
+static PyObject *
+zoneinfo_new_instance(PyTypeObject *type, PyObject *key)
+{
+    PyObject *file_obj = NULL;
+    PyObject *file_path = NULL;
+
+    file_path = PyObject_CallFunctionObjArgs(_tzpath_find_tzfile, key, NULL);
+    if (file_path == NULL) {
+        return NULL;
+    }
+    else if (file_path == Py_None) {
+        file_obj = PyObject_CallMethod(_common_mod, "load_tzdata", "O", key);
+        if (file_obj == NULL) {
+            Py_DECREF(file_path);
+            return NULL;
+        }
+    }
+
+    PyObject *self = (PyObject *)(type->tp_alloc(type, 0));
+    if (self == NULL) {
+        goto error;
+    }
+
+    if (file_obj == NULL) {
+        file_obj = PyObject_CallFunction(io_open, "Os", file_path, "rb");
+        if (file_obj == NULL) {
+            goto error;
+        }
+    }
+
+    if (load_data((PyZoneInfo_ZoneInfo *)self, file_obj)) {
+        goto error;
+    }
+
+    PyObject *rv = PyObject_CallMethod(file_obj, "close", NULL);
+    Py_DECREF(file_obj);
+    file_obj = NULL;
+    if (rv == NULL) {
+        goto error;
+    }
+    Py_DECREF(rv);
+
+    ((PyZoneInfo_ZoneInfo *)self)->key = key;
+    Py_INCREF(key);
+
+    goto cleanup;
+error:
+    Py_XDECREF(self);
+    self = NULL;
+cleanup:
+    if (file_obj != NULL) {
+        PyObject *exc, *val, *tb;
+        PyErr_Fetch(&exc, &val, &tb);
+        PyObject *tmp = PyObject_CallMethod(file_obj, "close", NULL);
+        _PyErr_ChainExceptions(exc, val, tb);
+        if (tmp == NULL) {
+            Py_CLEAR(self);
+        }
+        Py_XDECREF(tmp);
+        Py_DECREF(file_obj);
+    }
+    Py_DECREF(file_path);
+    return self;
+}
+
+static PyObject *
+get_weak_cache(PyTypeObject *type)
+{
+    if (type == &PyZoneInfo_ZoneInfoType) {
+        return ZONEINFO_WEAK_CACHE;
+    }
+    else {
+        PyObject *cache =
+            PyObject_GetAttrString((PyObject *)type, "_weak_cache");
+        // We are assuming that the type lives at least as long as the function
+        // that calls get_weak_cache, and that it holds a reference to the
+        // cache, so we'll return a "borrowed reference".
+        Py_XDECREF(cache);
+        return cache;
+    }
+}
+
+static PyObject *
+zoneinfo_new(PyTypeObject *type, PyObject *args, PyObject *kw)
+{
+    PyObject *key = NULL;
+    static char *kwlist[] = {"key", NULL};
+    if (PyArg_ParseTupleAndKeywords(args, kw, "O", kwlist, &key) == 0) {
+        return NULL;
+    }
+
+    PyObject *instance = zone_from_strong_cache(type, key);
+    if (instance != NULL) {
+        return instance;
+    }
+
+    PyObject *weak_cache = get_weak_cache(type);
+    instance = PyObject_CallMethod(weak_cache, "get", "O", key, Py_None);
+    if (instance == NULL) {
+        return NULL;
+    }
+
+    if (instance == Py_None) {
+        Py_DECREF(instance);
+        PyObject *tmp = zoneinfo_new_instance(type, key);
+        if (tmp == NULL) {
+            return NULL;
+        }
+
+        instance =
+            PyObject_CallMethod(weak_cache, "setdefault", "OO", key, tmp);
+        Py_DECREF(tmp);
+        if (instance == NULL) {
+            return NULL;
+        }
+        ((PyZoneInfo_ZoneInfo *)instance)->source = SOURCE_CACHE;
+    }
+
+    update_strong_cache(type, key, instance);
+    return instance;
+}
+
+static void
+zoneinfo_dealloc(PyObject *obj_self)
+{
+    PyZoneInfo_ZoneInfo *self = (PyZoneInfo_ZoneInfo *)obj_self;
+
+    if (self->weakreflist != NULL) {
+        PyObject_ClearWeakRefs(obj_self);
+    }
+
+    if (self->trans_list_utc != NULL) {
+        PyMem_Free(self->trans_list_utc);
+    }
+
+    for (size_t i = 0; i < 2; i++) {
+        if (self->trans_list_wall[i] != NULL) {
+            PyMem_Free(self->trans_list_wall[i]);
+        }
+    }
+
+    if (self->_ttinfos != NULL) {
+        for (size_t i = 0; i < self->num_ttinfos; ++i) {
+            xdecref_ttinfo(&(self->_ttinfos[i]));
+        }
+        PyMem_Free(self->_ttinfos);
+    }
+
+    if (self->trans_ttinfos != NULL) {
+        PyMem_Free(self->trans_ttinfos);
+    }
+
+    free_tzrule(&(self->tzrule_after));
+
+    Py_XDECREF(self->key);
+    Py_XDECREF(self->file_repr);
+
+    Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyObject *
+zoneinfo_from_file(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyObject *file_obj = NULL;
+    PyObject *file_repr = NULL;
+    PyObject *key = Py_None;
+    PyZoneInfo_ZoneInfo *self = NULL;
+
+    static char *kwlist[] = {"", "key", NULL};
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O", kwlist, &file_obj,
+                                     &key)) {
+        return NULL;
+    }
+
+    PyObject *obj_self = (PyObject *)(type->tp_alloc(type, 0));
+    self = (PyZoneInfo_ZoneInfo *)obj_self;
+    if (self == NULL) {
+        return NULL;
+    }
+
+    file_repr = PyUnicode_FromFormat("%R", file_obj);
+    if (file_repr == NULL) {
+        goto error;
+    }
+
+    if (load_data(self, file_obj)) {
+        goto error;
+    }
+
+    self->source = SOURCE_FILE;
+    self->file_repr = file_repr;
+    self->key = key;
+    Py_INCREF(key);
+
+    return obj_self;
+error:
+    Py_XDECREF(file_repr);
+    Py_XDECREF(self);
+    return NULL;
+}
+
+static PyObject *
+zoneinfo_no_cache(PyTypeObject *cls, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = {"key", NULL};
+    PyObject *key = NULL;
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O", kwlist, &key)) {
+        return NULL;
+    }
+
+    PyObject *out = zoneinfo_new_instance(cls, key);
+    if (out != NULL) {
+        ((PyZoneInfo_ZoneInfo *)out)->source = SOURCE_NOCACHE;
+    }
+
+    return out;
+}
+
+static PyObject *
+zoneinfo_clear_cache(PyObject *cls, PyObject *args, PyObject *kwargs)
+{
+    PyObject *only_keys = NULL;
+    static char *kwlist[] = {"only_keys", NULL};
+
+    if (!(PyArg_ParseTupleAndKeywords(args, kwargs, "|$O", kwlist,
+                                      &only_keys))) {
+        return NULL;
+    }
+
+    PyTypeObject *type = (PyTypeObject *)cls;
+    PyObject *weak_cache = get_weak_cache(type);
+
+    if (only_keys == NULL || only_keys == Py_None) {
+        PyObject *rv = PyObject_CallMethod(weak_cache, "clear", NULL);
+        if (rv != NULL) {
+            Py_DECREF(rv);
+        }
+
+        clear_strong_cache(type);
+    }
+    else {
+        PyObject *item = NULL;
+        PyObject *pop = PyUnicode_FromString("pop");
+        if (pop == NULL) {
+            return NULL;
+        }
+
+        PyObject *iter = PyObject_GetIter(only_keys);
+        if (iter == NULL) {
+            Py_DECREF(pop);
+            return NULL;
+        }
+
+        while ((item = PyIter_Next(iter))) {
+            // Remove from strong cache
+            eject_from_strong_cache(type, item);
+
+            // Remove from weak cache
+            PyObject *tmp = PyObject_CallMethodObjArgs(weak_cache, pop, item,
+                                                       Py_None, NULL);
+
+            Py_DECREF(item);
+            if (tmp == NULL) {
+                break;
+            }
+            Py_DECREF(tmp);
+        }
+        Py_DECREF(iter);
+        Py_DECREF(pop);
+    }
+
+    if (PyErr_Occurred()) {
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+static PyObject *
+zoneinfo_utcoffset(PyObject *self, PyObject *dt)
+{
+    _ttinfo *tti = find_ttinfo((PyZoneInfo_ZoneInfo *)self, dt);
+    if (tti == NULL) {
+        return NULL;
+    }
+    Py_INCREF(tti->utcoff);
+    return tti->utcoff;
+}
+
+static PyObject *
+zoneinfo_dst(PyObject *self, PyObject *dt)
+{
+    _ttinfo *tti = find_ttinfo((PyZoneInfo_ZoneInfo *)self, dt);
+    if (tti == NULL) {
+        return NULL;
+    }
+    Py_INCREF(tti->dstoff);
+    return tti->dstoff;
+}
+
+static PyObject *
+zoneinfo_tzname(PyObject *self, PyObject *dt)
+{
+    _ttinfo *tti = find_ttinfo((PyZoneInfo_ZoneInfo *)self, dt);
+    if (tti == NULL) {
+        return NULL;
+    }
+    Py_INCREF(tti->tzname);
+    return tti->tzname;
+}
+
+#define HASTZINFO(p) (((_PyDateTime_BaseTZInfo *)(p))->hastzinfo)
+#define GET_DT_TZINFO(p) \
+    (HASTZINFO(p) ? ((PyDateTime_DateTime *)(p))->tzinfo : Py_None)
+
+static PyObject *
+zoneinfo_fromutc(PyObject *obj_self, PyObject *dt)
+{
+    if (!PyDateTime_Check(dt)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "fromutc: argument must be a datetime");
+        return NULL;
+    }
+    if (GET_DT_TZINFO(dt) != obj_self) {
+        PyErr_SetString(PyExc_ValueError,
+                        "fromutc: dt.tzinfo "
+                        "is not self");
+        return NULL;
+    }
+
+    PyZoneInfo_ZoneInfo *self = (PyZoneInfo_ZoneInfo *)obj_self;
+
+    int64_t timestamp;
+    if (get_local_timestamp(dt, &timestamp)) {
+        return NULL;
+    }
+    size_t num_trans = self->num_transitions;
+
+    _ttinfo *tti = NULL;
+    unsigned char fold = 0;
+
+    if (num_trans >= 1 && timestamp < self->trans_list_utc[0]) {
+        tti = self->ttinfo_before;
+    }
+    else if (num_trans == 0 ||
+             timestamp > self->trans_list_utc[num_trans - 1]) {
+        tti = find_tzrule_ttinfo_fromutc(&(self->tzrule_after), timestamp,
+                                         PyDateTime_GET_YEAR(dt), &fold);
+
+        // Immediately after the last manual transition, the fold/gap is
+        // between self->trans_ttinfos[num_transitions - 1] and whatever
+        // ttinfo applies immediately after the last transition, not between
+        // the STD and DST rules in the tzrule_after, so we may need to
+        // adjust the fold value.
+        if (num_trans) {
+            _ttinfo *tti_prev = NULL;
+            if (num_trans == 1) {
+                tti_prev = self->ttinfo_before;
+            }
+            else {
+                tti_prev = self->trans_ttinfos[num_trans - 2];
+            }
+            int64_t diff = tti_prev->utcoff_seconds - tti->utcoff_seconds;
+            if (diff > 0 &&
+                timestamp < (self->trans_list_utc[num_trans - 1] + diff)) {
+                fold = 1;
+            }
+        }
+    }
+    else {
+        size_t idx = _bisect(timestamp, self->trans_list_utc, num_trans);
+        _ttinfo *tti_prev = NULL;
+
+        if (idx >= 2) {
+            tti_prev = self->trans_ttinfos[idx - 2];
+            tti = self->trans_ttinfos[idx - 1];
+        }
+        else {
+            tti_prev = self->ttinfo_before;
+            tti = self->trans_ttinfos[0];
+        }
+
+        // Detect fold
+        int64_t shift =
+            (int64_t)(tti_prev->utcoff_seconds - tti->utcoff_seconds);
+        if (shift > (timestamp - self->trans_list_utc[idx - 1])) {
+            fold = 1;
+        }
+    }
+
+    PyObject *tmp = PyNumber_Add(dt, tti->utcoff);
+    if (tmp == NULL) {
+        return NULL;
+    }
+
+    if (fold) {
+        if (PyDateTime_CheckExact(tmp)) {
+            ((PyDateTime_DateTime *)tmp)->fold = 1;
+            dt = tmp;
+        }
+        else {
+            PyObject *replace = PyObject_GetAttrString(tmp, "replace");
+            PyObject *args = PyTuple_New(0);
+            PyObject *kwargs = PyDict_New();
+
+            Py_DECREF(tmp);
+            if (args == NULL || kwargs == NULL || replace == NULL) {
+                Py_XDECREF(args);
+                Py_XDECREF(kwargs);
+                Py_XDECREF(replace);
+                return NULL;
+            }
+
+            dt = NULL;
+            if (!PyDict_SetItemString(kwargs, "fold", _PyLong_One)) {
+                dt = PyObject_Call(replace, args, kwargs);
+            }
+
+            Py_DECREF(args);
+            Py_DECREF(kwargs);
+            Py_DECREF(replace);
+
+            if (dt == NULL) {
+                return NULL;
+            }
+        }
+    }
+    else {
+        dt = tmp;
+    }
+    return dt;
+}
+
+static PyObject *
+zoneinfo_repr(PyZoneInfo_ZoneInfo *self)
+{
+    PyObject *rv = NULL;
+    const char *type_name = Py_TYPE((PyObject *)self)->tp_name;
+    if (!(self->key == Py_None)) {
+        rv = PyUnicode_FromFormat("%s(key=%R)", type_name, self->key);
+    }
+    else {
+        assert(PyUnicode_Check(self->file_repr));
+        rv = PyUnicode_FromFormat("%s.from_file(%U)", type_name,
+                                  self->file_repr);
+    }
+
+    return rv;
+}
+
+static PyObject *
+zoneinfo_str(PyZoneInfo_ZoneInfo *self)
+{
+    if (!(self->key == Py_None)) {
+        Py_INCREF(self->key);
+        return self->key;
+    }
+    else {
+        return zoneinfo_repr(self);
+    }
+}
+
+/* Pickles the ZoneInfo object by key and source.
+ *
+ * ZoneInfo objects are pickled by reference to the TZif file that they came
+ * from, which means that the exact transitions may be different or the file
+ * may not un-pickle if the data has changed on disk in the interim.
+ *
+ * It is necessary to include a bit indicating whether or not the object
+ * was constructed from the cache, because from-cache objects will hit the
+ * unpickling process's cache, whereas no-cache objects will bypass it.
+ *
+ * Objects constructed from ZoneInfo.from_file cannot be pickled.
+ */
+static PyObject *
+zoneinfo_reduce(PyObject *obj_self, PyObject *unused)
+{
+    PyZoneInfo_ZoneInfo *self = (PyZoneInfo_ZoneInfo *)obj_self;
+    if (self->source == SOURCE_FILE) {
+        // Objects constructed from files cannot be pickled.
+        PyObject *pickle = PyImport_ImportModule("pickle");
+        if (pickle == NULL) {
+            return NULL;
+        }
+
+        PyObject *pickle_error =
+            PyObject_GetAttrString(pickle, "PicklingError");
+        Py_DECREF(pickle);
+        if (pickle_error == NULL) {
+            return NULL;
+        }
+
+        PyErr_Format(pickle_error,
+                     "Cannot pickle a ZoneInfo file from a file stream.");
+        Py_DECREF(pickle_error);
+        return NULL;
+    }
+
+    unsigned char from_cache = self->source == SOURCE_CACHE ? 1 : 0;
+    PyObject *constructor = PyObject_GetAttrString(obj_self, "_unpickle");
+
+    if (constructor == NULL) {
+        return NULL;
+    }
+
+    PyObject *rv = Py_BuildValue("O(OB)", constructor, self->key, from_cache);
+    Py_DECREF(constructor);
+    return rv;
+}
+
+static PyObject *
+zoneinfo__unpickle(PyTypeObject *cls, PyObject *args)
+{
+    PyObject *key;
+    unsigned char from_cache;
+    if (!PyArg_ParseTuple(args, "OB", &key, &from_cache)) {
+        return NULL;
+    }
+
+    if (from_cache) {
+        PyObject *val_args = Py_BuildValue("(O)", key);
+        if (val_args == NULL) {
+            return NULL;
+        }
+
+        PyObject *rv = zoneinfo_new(cls, val_args, NULL);
+
+        Py_DECREF(val_args);
+        return rv;
+    }
+    else {
+        return zoneinfo_new_instance(cls, key);
+    }
+}
+
+/* It is relatively expensive to construct new timedelta objects, and in most
+ * cases we're looking at a relatively small number of timedeltas, such as
+ * integer number of hours, etc. We will keep a cache so that we construct
+ * a minimal number of these.
+ *
+ * Possibly this should be replaced with an LRU cache so that it's not possible
+ * for the memory usage to explode from this, but in order for this to be a
+ * serious problem, one would need to deliberately craft a malicious time zone
+ * file with many distinct offsets. As of tzdb 2019c, loading every single zone
+ * fills the cache with ~450 timedeltas for a total size of ~12kB.
+ *
+ * This returns a new reference to the timedelta.
+ */
+static PyObject *
+load_timedelta(long seconds)
+{
+    PyObject *rv = NULL;
+    PyObject *pyoffset = PyLong_FromLong(seconds);
+    if (pyoffset == NULL) {
+        return NULL;
+    }
+    int contains = PyDict_Contains(TIMEDELTA_CACHE, pyoffset);
+    if (contains == -1) {
+        goto error;
+    }
+
+    if (!contains) {
+        PyObject *tmp = PyDateTimeAPI->Delta_FromDelta(
+            0, seconds, 0, 1, PyDateTimeAPI->DeltaType);
+
+        if (tmp == NULL) {
+            goto error;
+        }
+
+        rv = PyDict_SetDefault(TIMEDELTA_CACHE, pyoffset, tmp);
+        Py_DECREF(tmp);
+    }
+    else {
+        rv = PyDict_GetItem(TIMEDELTA_CACHE, pyoffset);
+    }
+
+    Py_DECREF(pyoffset);
+    Py_INCREF(rv);
+    return rv;
+error:
+    Py_DECREF(pyoffset);
+    return NULL;
+}
+
+/* Constructor for _ttinfo object - this starts by initializing the _ttinfo
+ * to { NULL, NULL, NULL }, so that Py_XDECREF will work on partially
+ * initialized _ttinfo objects.
+ */
+static int
+build_ttinfo(long utcoffset, long dstoffset, PyObject *tzname, _ttinfo *out)
+{
+    out->utcoff = NULL;
+    out->dstoff = NULL;
+    out->tzname = NULL;
+
+    out->utcoff_seconds = utcoffset;
+    out->utcoff = load_timedelta(utcoffset);
+    if (out->utcoff == NULL) {
+        return -1;
+    }
+
+    out->dstoff = load_timedelta(dstoffset);
+    if (out->dstoff == NULL) {
+        return -1;
+    }
+
+    out->tzname = tzname;
+    Py_INCREF(tzname);
+
+    return 0;
+}
+
+/* Decrease reference count on any non-NULL members of a _ttinfo  */
+static void
+xdecref_ttinfo(_ttinfo *ttinfo)
+{
+    if (ttinfo != NULL) {
+        Py_XDECREF(ttinfo->utcoff);
+        Py_XDECREF(ttinfo->dstoff);
+        Py_XDECREF(ttinfo->tzname);
+    }
+}
+
+/* Equality function for _ttinfo. */
+static int
+ttinfo_eq(const _ttinfo *const tti0, const _ttinfo *const tti1)
+{
+    int rv;
+    if ((rv = PyObject_RichCompareBool(tti0->utcoff, tti1->utcoff, Py_EQ)) <
+        1) {
+        goto end;
+    }
+
+    if ((rv = PyObject_RichCompareBool(tti0->dstoff, tti1->dstoff, Py_EQ)) <
+        1) {
+        goto end;
+    }
+
+    if ((rv = PyObject_RichCompareBool(tti0->tzname, tti1->tzname, Py_EQ)) <
+        1) {
+        goto end;
+    }
+end:
+    return rv;
+}
+
+/* Given a file-like object, this populates a ZoneInfo object
+ *
+ * The current version calls into a Python function to read the data from
+ * file into Python objects, and this translates those Python objects into
+ * C values and calculates derived values (e.g. dstoff) in C.
+ *
+ * This returns 0 on success and -1 on failure.
+ *
+ * The function will never return while `self` is partially initialized —
+ * the object only needs to be freed / deallocated if this succeeds.
+ */
+static int
+load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj)
+{
+    PyObject *data_tuple = NULL;
+
+    long *utcoff = NULL;
+    long *dstoff = NULL;
+    size_t *trans_idx = NULL;
+    unsigned char *isdst = NULL;
+
+    self->trans_list_utc = NULL;
+    self->trans_list_wall[0] = NULL;
+    self->trans_list_wall[1] = NULL;
+    self->trans_ttinfos = NULL;
+    self->_ttinfos = NULL;
+    self->file_repr = NULL;
+
+    size_t ttinfos_allocated = 0;
+
+    data_tuple = PyObject_CallMethod(_common_mod, "load_data", "O", file_obj);
+
+    if (data_tuple == NULL) {
+        goto error;
+    }
+
+    if (!PyTuple_CheckExact(data_tuple)) {
+        PyErr_Format(PyExc_TypeError, "Invalid data result type: %r",
+                     data_tuple);
+        goto error;
+    }
+
+    // Unpack the data tuple
+    PyObject *trans_idx_list = PyTuple_GetItem(data_tuple, 0);
+    if (trans_idx_list == NULL) {
+        goto error;
+    }
+
+    PyObject *trans_utc = PyTuple_GetItem(data_tuple, 1);
+    if (trans_utc == NULL) {
+        goto error;
+    }
+
+    PyObject *utcoff_list = PyTuple_GetItem(data_tuple, 2);
+    if (utcoff_list == NULL) {
+        goto error;
+    }
+
+    PyObject *isdst_list = PyTuple_GetItem(data_tuple, 3);
+    if (isdst_list == NULL) {
+        goto error;
+    }
+
+    PyObject *abbr = PyTuple_GetItem(data_tuple, 4);
+    if (abbr == NULL) {
+        goto error;
+    }
+
+    PyObject *tz_str = PyTuple_GetItem(data_tuple, 5);
+    if (tz_str == NULL) {
+        goto error;
+    }
+
+    // Load the relevant sizes
+    Py_ssize_t num_transitions = PyTuple_Size(trans_utc);
+    if (num_transitions < 0) {
+        goto error;
+    }
+
+    Py_ssize_t num_ttinfos = PyTuple_Size(utcoff_list);
+    if (num_ttinfos < 0) {
+        goto error;
+    }
+
+    self->num_transitions = (size_t)num_transitions;
+    self->num_ttinfos = (size_t)num_ttinfos;
+
+    // Load the transition indices and list
+    self->trans_list_utc =
+        PyMem_Malloc(self->num_transitions * sizeof(int64_t));
+    trans_idx = PyMem_Malloc(self->num_transitions * sizeof(Py_ssize_t));
+
+    for (size_t i = 0; i < self->num_transitions; ++i) {
+        PyObject *num = PyTuple_GetItem(trans_utc, i);
+        if (num == NULL) {
+            goto error;
+        }
+        self->trans_list_utc[i] = PyLong_AsLongLong(num);
+        if (self->trans_list_utc[i] == -1 && PyErr_Occurred()) {
+            goto error;
+        }
+
+        num = PyTuple_GetItem(trans_idx_list, i);
+        if (num == NULL) {
+            goto error;
+        }
+
+        Py_ssize_t cur_trans_idx = PyLong_AsSsize_t(num);
+        if (cur_trans_idx == -1) {
+            goto error;
+        }
+
+        trans_idx[i] = (size_t)cur_trans_idx;
+        if (trans_idx[i] > self->num_ttinfos) {
+            PyErr_Format(
+                PyExc_ValueError,
+                "Invalid transition index found while reading TZif: %zd",
+                cur_trans_idx);
+
+            goto error;
+        }
+    }
+
+    // Load UTC offsets and isdst (size num_ttinfos)
+    utcoff = PyMem_Malloc(self->num_ttinfos * sizeof(long));
+    isdst = PyMem_Malloc(self->num_ttinfos * sizeof(unsigned char));
+
+    if (utcoff == NULL || isdst == NULL) {
+        goto error;
+    }
+    for (size_t i = 0; i < self->num_ttinfos; ++i) {
+        PyObject *num = PyTuple_GetItem(utcoff_list, i);
+        if (num == NULL) {
+            goto error;
+        }
+
+        utcoff[i] = PyLong_AsLong(num);
+        if (utcoff[i] == -1 && PyErr_Occurred()) {
+            goto error;
+        }
+
+        num = PyTuple_GetItem(isdst_list, i);
+        if (num == NULL) {
+            goto error;
+        }
+
+        int isdst_with_error = PyObject_IsTrue(num);
+        if (isdst_with_error == -1) {
+            goto error;
+        }
+        else {
+            isdst[i] = (unsigned char)isdst_with_error;
+        }
+    }
+
+    dstoff = PyMem_Calloc(self->num_ttinfos, sizeof(long));
+    if (dstoff == NULL) {
+        goto error;
+    }
+
+    // Derive dstoff and trans_list_wall from the information we've loaded
+    utcoff_to_dstoff(trans_idx, utcoff, dstoff, isdst, self->num_transitions,
+                     self->num_ttinfos);
+
+    if (ts_to_local(trans_idx, self->trans_list_utc, utcoff,
+                    self->trans_list_wall, self->num_ttinfos,
+                    self->num_transitions)) {
+        goto error;
+    }
+
+    // Build _ttinfo objects from utcoff, dstoff and abbr
+    self->_ttinfos = PyMem_Malloc(self->num_ttinfos * sizeof(_ttinfo));
+    for (size_t i = 0; i < self->num_ttinfos; ++i) {
+        PyObject *tzname = PyTuple_GetItem(abbr, i);
+        if (tzname == NULL) {
+            goto error;
+        }
+
+        ttinfos_allocated++;
+        if (build_ttinfo(utcoff[i], dstoff[i], tzname, &(self->_ttinfos[i]))) {
+            goto error;
+        }
+    }
+
+    // Build our mapping from transition to the ttinfo that applies
+    self->trans_ttinfos =
+        PyMem_Calloc(self->num_transitions, sizeof(_ttinfo *));
+    for (size_t i = 0; i < self->num_transitions; ++i) {
+        size_t ttinfo_idx = trans_idx[i];
+        assert(ttinfo_idx < self->num_ttinfos);
+        self->trans_ttinfos[i] = &(self->_ttinfos[ttinfo_idx]);
+    }
+
+    // Set ttinfo_before to the first non-DST transition
+    for (size_t i = 0; i < self->num_ttinfos; ++i) {
+        if (!isdst[i]) {
+            self->ttinfo_before = &(self->_ttinfos[i]);
+            break;
+        }
+    }
+
+    // If there are only DST ttinfos, pick the first one, if there are no
+    // ttinfos at all, set ttinfo_before to NULL
+    if (self->ttinfo_before == NULL && self->num_ttinfos > 0) {
+        self->ttinfo_before = &(self->_ttinfos[0]);
+    }
+
+    if (tz_str != Py_None && PyObject_IsTrue(tz_str)) {
+        if (parse_tz_str(tz_str, &(self->tzrule_after))) {
+            goto error;
+        }
+    }
+    else {
+        if (!self->num_ttinfos) {
+            PyErr_Format(PyExc_ValueError, "No time zone information found.");
+            goto error;
+        }
+
+        size_t idx;
+        if (!self->num_transitions) {
+            idx = self->num_ttinfos - 1;
+        }
+        else {
+            idx = trans_idx[self->num_transitions - 1];
+        }
+
+        _ttinfo *tti = &(self->_ttinfos[idx]);
+        build_tzrule(tti->tzname, NULL, tti->utcoff_seconds, 0, NULL, NULL,
+                     &(self->tzrule_after));
+
+        // We've abused the build_tzrule constructor to construct an STD-only
+        // rule mimicking whatever ttinfo we've picked up, but it's possible
+        // that the one we've picked up is a DST zone, so we need to make sure
+        // that the dstoff is set correctly in that case.
+        if (PyObject_IsTrue(tti->dstoff)) {
+            _ttinfo *tti_after = &(self->tzrule_after.std);
+            Py_DECREF(tti_after->dstoff);
+            tti_after->dstoff = tti->dstoff;
+            Py_INCREF(tti_after->dstoff);
+        }
+    }
+
+    // Determine if this is a "fixed offset" zone, meaning that the output of
+    // the utcoffset, dst and tzname functions does not depend on the specific
+    // datetime passed.
+    //
+    // We make three simplifying assumptions here:
+    //
+    // 1. If tzrule_after is not std_only, it has transitions that might occur
+    //    (it is possible to construct TZ strings that specify STD and DST but
+    //    no transitions ever occur, such as AAA0BBB,0/0,J365/25).
+    // 2. If self->_ttinfos contains more than one _ttinfo object, the objects
+    //    represent different offsets.
+    // 3. self->ttinfos contains no unused _ttinfos (in which case an otherwise
+    //    fixed-offset zone with extra _ttinfos defined may appear to *not* be
+    //    a fixed offset zone).
+    //
+    // Violations to these assumptions would be fairly exotic, and exotic
+    // zones should almost certainly not be used with datetime.time (the
+    // only thing that would be affected by this).
+    if (self->num_ttinfos > 1 || !self->tzrule_after.std_only) {
+        self->fixed_offset = 0;
+    }
+    else if (self->num_ttinfos == 0) {
+        self->fixed_offset = 1;
+    }
+    else {
+        int constant_offset =
+            ttinfo_eq(&(self->_ttinfos[0]), &self->tzrule_after.std);
+        if (constant_offset < 0) {
+            goto error;
+        }
+        else {
+            self->fixed_offset = constant_offset;
+        }
+    }
+
+    int rv = 0;
+    goto cleanup;
+error:
+    // These resources only need to be freed if we have failed, if we succeed
+    // in initializing a PyZoneInfo_ZoneInfo object, we can rely on its dealloc
+    // method to free the relevant resources.
+    if (self->trans_list_utc != NULL) {
+        PyMem_Free(self->trans_list_utc);
+        self->trans_list_utc = NULL;
+    }
+
+    for (size_t i = 0; i < 2; ++i) {
+        if (self->trans_list_wall[i] != NULL) {
+            PyMem_Free(self->trans_list_wall[i]);
+            self->trans_list_wall[i] = NULL;
+        }
+    }
+
+    if (self->_ttinfos != NULL) {
+        for (size_t i = 0; i < ttinfos_allocated; ++i) {
+            xdecref_ttinfo(&(self->_ttinfos[i]));
+        }
+        PyMem_Free(self->_ttinfos);
+        self->_ttinfos = NULL;
+    }
+
+    if (self->trans_ttinfos != NULL) {
+        PyMem_Free(self->trans_ttinfos);
+        self->trans_ttinfos = NULL;
+    }
+
+    rv = -1;
+cleanup:
+    Py_XDECREF(data_tuple);
+
+    if (utcoff != NULL) {
+        PyMem_Free(utcoff);
+    }
+
+    if (dstoff != NULL) {
+        PyMem_Free(dstoff);
+    }
+
+    if (isdst != NULL) {
+        PyMem_Free(isdst);
+    }
+
+    if (trans_idx != NULL) {
+        PyMem_Free(trans_idx);
+    }
+
+    return rv;
+}
+
+/* Function to calculate the local timestamp of a transition from the year. */
+int64_t
+calendarrule_year_to_timestamp(TransitionRuleType *base_self, int year)
+{
+    CalendarRule *self = (CalendarRule *)base_self;
+
+    // We want (year, month, day of month); we have year and month, but we
+    // need to turn (week, day-of-week) into day-of-month
+    //
+    // Week 1 is the first week in which day `day` (where 0 = Sunday) appears.
+    // Week 5 represents the last occurrence of day `day`, so we need to know
+    // the first weekday of the month and the number of days in the month.
+    int8_t first_day = (ymd_to_ord(year, self->month, 1) + 6) % 7;
+    uint8_t days_in_month = DAYS_IN_MONTH[self->month];
+    if (self->month == 2 && is_leap_year(year)) {
+        days_in_month += 1;
+    }
+
+    // This equation seems magical, so I'll break it down:
+    // 1. calendar says 0 = Monday, POSIX says 0 = Sunday so we need first_day
+    //    + 1 to get 1 = Monday -> 7 = Sunday, which is still equivalent
+    //    because this math is mod 7
+    // 2. Get first day - desired day mod 7 (adjusting by 7 for negative
+    //    numbers so that -1 % 7 = 6).
+    // 3. Add 1 because month days are a 1-based index.
+    int8_t month_day = ((int8_t)(self->day) - (first_day + 1)) % 7;
+    if (month_day < 0) {
+        month_day += 7;
+    }
+    month_day += 1;
+
+    // Now use a 0-based index version of `week` to calculate the w-th
+    // occurrence of `day`
+    month_day += ((int8_t)(self->week) - 1) * 7;
+
+    // month_day will only be > days_in_month if w was 5, and `w` means "last
+    // occurrence of `d`", so now we just check if we over-shot the end of the
+    // month and if so knock off 1 week.
+    if (month_day > days_in_month) {
+        month_day -= 7;
+    }
+
+    int64_t ordinal = ymd_to_ord(year, self->month, month_day) - EPOCHORDINAL;
+    return ((ordinal * 86400) + (int64_t)(self->hour * 3600) +
+            (int64_t)(self->minute * 60) + (int64_t)(self->second));
+}
+
+/* Constructor for CalendarRule. */
+int
+calendarrule_new(uint8_t month, uint8_t week, uint8_t day, int8_t hour,
+                 int8_t minute, int8_t second, CalendarRule *out)
+{
+    // These bounds come from the POSIX standard, which describes an Mm.n.d
+    // rule as:
+    //
+    //   The d'th day (0 <= d <= 6) of week n of month m of the year (1 <= n <=
+    //   5, 1 <= m <= 12, where week 5 means "the last d day in month m" which
+    //   may occur in either the fourth or the fifth week). Week 1 is the first
+    //   week in which the d'th day occurs. Day zero is Sunday.
+    if (month <= 0 || month > 12) {
+        PyErr_Format(PyExc_ValueError, "Month must be in (0, 12]");
+        return -1;
+    }
+
+    if (week <= 0 || week > 5) {
+        PyErr_Format(PyExc_ValueError, "Week must be in (0, 5]");
+        return -1;
+    }
+
+    // day is an unsigned integer, so day < 0 should always return false, but
+    // if day's type changes to a signed integer *without* changing this value,
+    // it may create a bug. Considering that the compiler should be able to
+    // optimize out the first comparison if day is an unsigned integer anyway,
+    // we will leave this comparison in place and disable the compiler warning.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wtype-limits"
+    if (day < 0 || day > 6) {
+#pragma GCC diagnostic pop
+        PyErr_Format(PyExc_ValueError, "Day must be in [0, 6]");
+        return -1;
+    }
+
+    TransitionRuleType base = {&calendarrule_year_to_timestamp};
+
+    CalendarRule new_offset = {
+        .base = base,
+        .month = month,
+        .week = week,
+        .day = day,
+        .hour = hour,
+        .minute = minute,
+        .second = second,
+    };
+
+    *out = new_offset;
+    return 0;
+}
+
+/* Function to calculate the local timestamp of a transition from the year.
+ *
+ * This translates the day of the year into a local timestamp — either a
+ * 1-based Julian day, not including leap days, or the 0-based year-day,
+ * including leap days.
+ * */
+int64_t
+dayrule_year_to_timestamp(TransitionRuleType *base_self, int year)
+{
+    // The function signature requires a TransitionRuleType pointer, but this
+    // function is only applicable to DayRule* objects.
+    DayRule *self = (DayRule *)base_self;
+
+    // ymd_to_ord calculates the number of days since 0001-01-01, but we want
+    // to know the number of days since 1970-01-01, so we must subtract off
+    // the equivalent of ymd_to_ord(1970, 1, 1).
+    //
+    // We subtract off an additional 1 day to account for January 1st (we want
+    // the number of full days *before* the date of the transition - partial
+    // days are accounted for in the hour, minute and second portions.
+    int64_t days_before_year = ymd_to_ord(year, 1, 1) - EPOCHORDINAL - 1;
+
+    // The Julian day specification skips over February 29th in leap years,
+    // from the POSIX standard:
+    //
+    //   Leap days shall not be counted. That is, in all years-including leap
+    //   years-February 28 is day 59 and March 1 is day 60. It is impossible to
+    //   refer explicitly to the occasional February 29.
+    //
+    // This is actually more useful than you'd think — if you want a rule that
+    // always transitions on a given calendar day (other than February 29th),
+    // you would use a Julian day, e.g. J91 always refers to April 1st and J365
+    // always refers to December 31st.
+    unsigned int day = self->day;
+    if (self->julian && day >= 59 && is_leap_year(year)) {
+        day += 1;
+    }
+
+    return ((days_before_year + day) * 86400) + (self->hour * 3600) +
+           (self->minute * 60) + self->second;
+}
+
+/* Constructor for DayRule. */
+static int
+dayrule_new(uint8_t julian, unsigned int day, int8_t hour, int8_t minute,
+            int8_t second, DayRule *out)
+{
+    // The POSIX standard specifies that Julian days must be in the range (1 <=
+    // n <= 365) and that non-Julian (they call it "0-based Julian") days must
+    // be in the range (0 <= n <= 365).
+    if (day < julian || day > 365) {
+        PyErr_Format(PyExc_ValueError, "day must be in [%u, 365], not: %u",
+                     julian, day);
+        return -1;
+    }
+
+    TransitionRuleType base = {
+        &dayrule_year_to_timestamp,
+    };
+
+    DayRule tmp = {
+        .base = base,
+        .julian = julian,
+        .day = day,
+        .hour = hour,
+        .minute = minute,
+        .second = second,
+    };
+
+    *out = tmp;
+
+    return 0;
+}
+
+/* Calculate the start and end rules for a _tzrule in the given year. */
+static void
+tzrule_transitions(_tzrule *rule, int year, int64_t *start, int64_t *end)
+{
+    assert(rule->start != NULL);
+    assert(rule->end != NULL);
+    *start = rule->start->year_to_timestamp(rule->start, year);
+    *end = rule->end->year_to_timestamp(rule->end, year);
+}
+
+/* Calculate the _ttinfo that applies at a given local time from a _tzrule.
+ *
+ * This takes a local timestamp and fold for disambiguation purposes; the year
+ * could technically be calculated from the timestamp, but given that the
+ * callers of this function already have the year information accessible from
+ * the datetime struct, it is taken as an additional parameter to reduce
+ * unncessary calculation.
+ * */
+static _ttinfo *
+find_tzrule_ttinfo(_tzrule *rule, int64_t ts, unsigned char fold, int year)
+{
+    if (rule->std_only) {
+        return &(rule->std);
+    }
+
+    int64_t start, end;
+    uint8_t isdst;
+
+    tzrule_transitions(rule, year, &start, &end);
+
+    // With fold = 0, the period (denominated in local time) with the smaller
+    // offset starts at the end of the gap and ends at the end of the fold;
+    // with fold = 1, it runs from the start of the gap to the beginning of the
+    // fold.
+    //
+    // So in order to determine the DST boundaries we need to know both the
+    // fold and whether DST is positive or negative (rare), and it turns out
+    // that this boils down to fold XOR is_positive.
+    if (fold == (rule->dst_diff >= 0)) {
+        end -= rule->dst_diff;
+    }
+    else {
+        start += rule->dst_diff;
+    }
+
+    if (start < end) {
+        isdst = (ts >= start) && (ts < end);
+    }
+    else {
+        isdst = (ts < end) || (ts >= start);
+    }
+
+    if (isdst) {
+        return &(rule->dst);
+    }
+    else {
+        return &(rule->std);
+    }
+}
+
+/* Calculate the ttinfo and fold that applies for a _tzrule at an epoch time.
+ *
+ * This function can determine the _ttinfo that applies at a given epoch time,
+ * (analogous to trans_list_utc), and whether or not the datetime is in a fold.
+ * This is to be used in the .fromutc() function.
+ *
+ * The year is technically a redundant parameter, because it can be calculated
+ * from the timestamp, but all callers of this function should have the year
+ * in the datetime struct anyway, so taking it as a parameter saves unnecessary
+ * calculation.
+ **/
+static _ttinfo *
+find_tzrule_ttinfo_fromutc(_tzrule *rule, int64_t ts, int year,
+                           unsigned char *fold)
+{
+    if (rule->std_only) {
+        *fold = 0;
+        return &(rule->std);
+    }
+
+    int64_t start, end;
+    uint8_t isdst;
+    tzrule_transitions(rule, year, &start, &end);
+    start -= rule->std.utcoff_seconds;
+    end -= rule->dst.utcoff_seconds;
+
+    if (start < end) {
+        isdst = (ts >= start) && (ts < end);
+    }
+    else {
+        isdst = (ts < end) || (ts >= start);
+    }
+
+    // For positive DST, the ambiguous period is one dst_diff after the end of
+    // DST; for negative DST, the ambiguous period is one dst_diff before the
+    // start of DST.
+    int64_t ambig_start, ambig_end;
+    if (rule->dst_diff > 0) {
+        ambig_start = end;
+        ambig_end = end + rule->dst_diff;
+    }
+    else {
+        ambig_start = start;
+        ambig_end = start - rule->dst_diff;
+    }
+
+    *fold = (ts >= ambig_start) && (ts < ambig_end);
+
+    if (isdst) {
+        return &(rule->dst);
+    }
+    else {
+        return &(rule->std);
+    }
+}
+
+/* Parse a TZ string in the format specified by the POSIX standard:
+ *
+ *  std offset[dst[offset],start[/time],end[/time]]
+ *
+ *  std and dst must be 3 or more characters long and must not contain a
+ *  leading colon, embedded digits, commas, nor a plus or minus signs; The
+ *  spaces between "std" and "offset" are only for display and are not actually
+ *  present in the string.
+ *
+ *  The format of the offset is ``[+|-]hh[:mm[:ss]]``
+ *
+ * See the POSIX.1 spec: IEE Std 1003.1-2018 §8.3:
+ *
+ * https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
+ */
+static int
+parse_tz_str(PyObject *tz_str_obj, _tzrule *out)
+{
+    PyObject *std_abbr = NULL;
+    PyObject *dst_abbr = NULL;
+    TransitionRuleType *start = NULL;
+    TransitionRuleType *end = NULL;
+    // Initialize offsets to invalid value (> 24 hours)
+    long std_offset = 1 << 20;
+    long dst_offset = 1 << 20;
+
+    char *tz_str = PyBytes_AsString(tz_str_obj);
+    if (tz_str == NULL) {
+        return -1;
+    }
+    char *p = tz_str;
+
+    // Read the `std` abbreviation, which must be at least 3 characters long.
+    Py_ssize_t num_chars = parse_abbr(p, &std_abbr);
+    if (num_chars < 1) {
+        PyErr_Format(PyExc_ValueError, "Invalid STD format in %R", tz_str_obj);
+        goto error;
+    }
+
+    p += num_chars;
+
+    // Now read the STD offset, which is required
+    num_chars = parse_tz_delta(p, &std_offset);
+    if (num_chars < 0) {
+        PyErr_Format(PyExc_ValueError, "Invalid STD offset in %R", tz_str_obj);
+        goto error;
+    }
+    p += num_chars;
+
+    // If the string ends here, there is no DST, otherwise we must parse the
+    // DST abbreviation and start and end dates and times.
+    if (*p == '\0') {
+        goto complete;
+    }
+
+    num_chars = parse_abbr(p, &dst_abbr);
+    if (num_chars < 1) {
+        PyErr_Format(PyExc_ValueError, "Invalid DST format in %R", tz_str_obj);
+        goto error;
+    }
+    p += num_chars;
+
+    if (*p == ',') {
+        // From the POSIX standard:
+        //
+        // If no offset follows dst, the alternative time is assumed to be one
+        // hour ahead of standard time.
+        dst_offset = std_offset + 3600;
+    }
+    else {
+        num_chars = parse_tz_delta(p, &dst_offset);
+        if (num_chars < 0) {
+            PyErr_Format(PyExc_ValueError, "Invalid DST offset in %R",
+                         tz_str_obj);
+            goto error;
+        }
+
+        p += num_chars;
+    }
+
+    TransitionRuleType **transitions[2] = {&start, &end};
+    for (size_t i = 0; i < 2; ++i) {
+        if (*p != ',') {
+            PyErr_Format(PyExc_ValueError,
+                         "Missing transition rules in TZ string: %R",
+                         tz_str_obj);
+            goto error;
+        }
+        p++;
+
+        num_chars = parse_transition_rule(p, transitions[i]);
+        if (num_chars < 0) {
+            PyErr_Format(PyExc_ValueError,
+                         "Malformed transition rule in TZ string: %R",
+                         tz_str_obj);
+            goto error;
+        }
+        p += num_chars;
+    }
+
+    if (*p != '\0') {
+        PyErr_Format(PyExc_ValueError,
+                     "Extraneous characters at end of TZ string: %R",
+                     tz_str_obj);
+        goto error;
+    }
+
+complete:
+    build_tzrule(std_abbr, dst_abbr, std_offset, dst_offset, start, end, out);
+    Py_DECREF(std_abbr);
+    Py_XDECREF(dst_abbr);
+
+    return 0;
+error:
+    Py_XDECREF(std_abbr);
+    if (dst_abbr != NULL && dst_abbr != Py_None) {
+        Py_DECREF(dst_abbr);
+    }
+
+    if (start != NULL) {
+        PyMem_Free(start);
+    }
+
+    if (end != NULL) {
+        PyMem_Free(end);
+    }
+
+    return -1;
+}
+
+static int
+parse_uint(const char *const p, uint8_t *value)
+{
+    if (!isdigit(*p)) {
+        return -1;
+    }
+
+    *value = (*p) - '0';
+    return 0;
+}
+
+/* Parse the STD and DST abbreviations from a TZ string. */
+static Py_ssize_t
+parse_abbr(const char *const p, PyObject **abbr)
+{
+    const char *ptr = p;
+    char buff = *ptr;
+    const char *str_start;
+    const char *str_end;
+
+    if (*ptr == '<') {
+        ptr++;
+        str_start = ptr;
+        while ((buff = *ptr) != '>') {
+            // From the POSIX standard:
+            //
+            //   In the quoted form, the first character shall be the less-than
+            //   ( '<' ) character and the last character shall be the
+            //   greater-than ( '>' ) character. All characters between these
+            //   quoting characters shall be alphanumeric characters from the
+            //   portable character set in the current locale, the plus-sign (
+            //   '+' ) character, or the minus-sign ( '-' ) character. The std
+            //   and dst fields in this case shall not include the quoting
+            //   characters.
+            if (!isalpha(buff) && !isdigit(buff) && buff != '+' &&
+                buff != '-') {
+                return -1;
+            }
+            ptr++;
+        }
+        str_end = ptr;
+        ptr++;
+    }
+    else {
+        str_start = p;
+        // From the POSIX standard:
+        //
+        //   In the unquoted form, all characters in these fields shall be
+        //   alphabetic characters from the portable character set in the
+        //   current locale.
+        while (isalpha(*ptr)) {
+            ptr++;
+        }
+        str_end = ptr;
+    }
+
+    *abbr = PyUnicode_FromStringAndSize(str_start, str_end - str_start);
+    if (*abbr == NULL) {
+        return -1;
+    }
+
+    return ptr - p;
+}
+
+/* Parse a UTC offset from a TZ str. */
+static Py_ssize_t
+parse_tz_delta(const char *const p, long *total_seconds)
+{
+    // From the POSIX spec:
+    //
+    //   Indicates the value added to the local time to arrive at Coordinated
+    //   Universal Time. The offset has the form:
+    //
+    //   hh[:mm[:ss]]
+    //
+    //   One or more digits may be used; the value is always interpreted as a
+    //   decimal number.
+    //
+    // The POSIX spec says that the values for `hour` must be between 0 and 24
+    // hours, but RFC 8536 §3.3.1 specifies that the hours part of the
+    // transition times may be signed and range from -167 to 167.
+    long sign = -1;
+    long hours = 0;
+    long minutes = 0;
+    long seconds = 0;
+
+    const char *ptr = p;
+    char buff = *ptr;
+    if (buff == '-' || buff == '+') {
+        // Negative numbers correspond to *positive* offsets, from the spec:
+        //
+        //   If preceded by a '-', the timezone shall be east of the Prime
+        //   Meridian; otherwise, it shall be west (which may be indicated by
+        //   an optional preceding '+' ).
+        if (buff == '-') {
+            sign = 1;
+        }
+
+        ptr++;
+    }
+
+    // The hour can be 1 or 2 numeric characters
+    for (size_t i = 0; i < 2; ++i) {
+        buff = *ptr;
+        if (!isdigit(buff)) {
+            if (i == 0) {
+                return -1;
+            }
+            else {
+                break;
+            }
+        }
+
+        hours *= 10;
+        hours += buff - '0';
+        ptr++;
+    }
+
+    if (hours > 24 || hours < 0) {
+        return -1;
+    }
+
+    // Minutes and seconds always of the format ":dd"
+    long *outputs[2] = {&minutes, &seconds};
+    for (size_t i = 0; i < 2; ++i) {
+        if (*ptr != ':') {
+            goto complete;
+        }
+        ptr++;
+
+        for (size_t j = 0; j < 2; ++j) {
+            buff = *ptr;
+            if (!isdigit(buff)) {
+                return -1;
+            }
+            *(outputs[i]) *= 10;
+            *(outputs[i]) += buff - '0';
+            ptr++;
+        }
+    }
+
+complete:
+    *total_seconds = sign * ((hours * 3600) + (minutes * 60) + seconds);
+
+    return ptr - p;
+}
+
+/* Parse the date portion of a transition rule. */
+static Py_ssize_t
+parse_transition_rule(const char *const p, TransitionRuleType **out)
+{
+    // The full transition rule indicates when to change back and forth between
+    // STD and DST, and has the form:
+    //
+    //   date[/time],date[/time]
+    //
+    // This function parses an individual date[/time] section, and returns
+    // the number of characters that contributed to the transition rule. This
+    // does not include the ',' at the end of the first rule.
+    //
+    // The POSIX spec states that if *time* is not given, the default is 02:00.
+    const char *ptr = p;
+    int8_t hour = 2;
+    int8_t minute = 0;
+    int8_t second = 0;
+
+    // Rules come in one of three flavors:
+    //
+    //   1. Jn: Julian day n, with no leap days.
+    //   2. n: Day of year (0-based, with leap days)
+    //   3. Mm.n.d: Specifying by month, week and day-of-week.
+
+    if (*ptr == 'M') {
+        uint8_t month, week, day;
+        ptr++;
+        if (parse_uint(ptr, &month)) {
+            return -1;
+        }
+        ptr++;
+        if (*ptr != '.') {
+            uint8_t tmp;
+            if (parse_uint(ptr, &tmp)) {
+                return -1;
+            }
+
+            month *= 10;
+            month += tmp;
+            ptr++;
+        }
+
+        uint8_t *values[2] = {&week, &day};
+        for (size_t i = 0; i < 2; ++i) {
+            if (*ptr != '.') {
+                return -1;
+            }
+            ptr++;
+
+            if (parse_uint(ptr, values[i])) {
+                return -1;
+            }
+            ptr++;
+        }
+
+        if (*ptr == '/') {
+            ptr++;
+            Py_ssize_t num_chars =
+                parse_transition_time(ptr, &hour, &minute, &second);
+            if (num_chars < 0) {
+                return -1;
+            }
+            ptr += num_chars;
+        }
+
+        CalendarRule *rv = PyMem_Calloc(1, sizeof(CalendarRule));
+        if (rv == NULL) {
+            return -1;
+        }
+
+        if (calendarrule_new(month, week, day, hour, minute, second, rv)) {
+            PyMem_Free(rv);
+            return -1;
+        }
+
+        *out = (TransitionRuleType *)rv;
+    }
+    else {
+        uint8_t julian = 0;
+        unsigned int day = 0;
+        if (*ptr == 'J') {
+            julian = 1;
+            ptr++;
+        }
+
+        for (size_t i = 0; i < 3; ++i) {
+            if (!isdigit(*ptr)) {
+                if (i == 0) {
+                    return -1;
+                }
+                break;
+            }
+            day *= 10;
+            day += (*ptr) - '0';
+            ptr++;
+        }
+
+        if (*ptr == '/') {
+            ptr++;
+            Py_ssize_t num_chars =
+                parse_transition_time(ptr, &hour, &minute, &second);
+            if (num_chars < 0) {
+                return -1;
+            }
+            ptr += num_chars;
+        }
+
+        DayRule *rv = PyMem_Calloc(1, sizeof(DayRule));
+        if (rv == NULL) {
+            return -1;
+        }
+
+        if (dayrule_new(julian, day, hour, minute, second, rv)) {
+            PyMem_Free(rv);
+            return -1;
+        }
+        *out = (TransitionRuleType *)rv;
+    }
+
+    return ptr - p;
+}
+
+/* Parse the time portion of a transition rule (e.g. following an /) */
+static Py_ssize_t
+parse_transition_time(const char *const p, int8_t *hour, int8_t *minute,
+                      int8_t *second)
+{
+    // From the spec:
+    //
+    //   The time has the same format as offset except that no leading sign
+    //   ( '-' or '+' ) is allowed.
+    //
+    // The format for the offset is:
+    //
+    //   h[h][:mm[:ss]]
+    //
+    // RFC 8536 also allows transition times to be signed and to range from
+    // -167 to +167, but the current version only supports [0, 99].
+    //
+    // TODO: Support the full range of transition hours.
+    int8_t *components[3] = {hour, minute, second};
+    const char *ptr = p;
+    int8_t sign = 1;
+
+    if (*ptr == '-' || *ptr == '+') {
+        if (*ptr == '-') {
+            sign = -1;
+        }
+        ptr++;
+    }
+
+    for (size_t i = 0; i < 3; ++i) {
+        if (i > 0) {
+            if (*ptr != ':') {
+                break;
+            }
+            ptr++;
+        }
+
+        uint8_t buff = 0;
+        for (size_t j = 0; j < 2; j++) {
+            if (!isdigit(*ptr)) {
+                if (i == 0 && j > 0) {
+                    break;
+                }
+                return -1;
+            }
+
+            buff *= 10;
+            buff += (*ptr) - '0';
+            ptr++;
+        }
+
+        *(components[i]) = sign * buff;
+    }
+
+    return ptr - p;
+}
+
+/* Constructor for a _tzrule.
+ *
+ * If `dst_abbr` is NULL, this will construct an "STD-only" _tzrule, in which
+ * case `dst_offset` will be ignored and `start` and `end` are expected to be
+ * NULL as well.
+ *
+ * Returns 0 on success.
+ */
+static int
+build_tzrule(PyObject *std_abbr, PyObject *dst_abbr, long std_offset,
+             long dst_offset, TransitionRuleType *start,
+             TransitionRuleType *end, _tzrule *out)
+{
+    _tzrule rv = {{0}};
+
+    rv.start = start;
+    rv.end = end;
+
+    if (build_ttinfo(std_offset, 0, std_abbr, &rv.std)) {
+        goto error;
+    }
+
+    if (dst_abbr != NULL) {
+        rv.dst_diff = dst_offset - std_offset;
+        if (build_ttinfo(dst_offset, rv.dst_diff, dst_abbr, &rv.dst)) {
+            goto error;
+        }
+    }
+    else {
+        rv.std_only = 1;
+    }
+
+    *out = rv;
+
+    return 0;
+error:
+    xdecref_ttinfo(&rv.std);
+    xdecref_ttinfo(&rv.dst);
+    return -1;
+}
+
+/* Destructor for _tzrule. */
+static void
+free_tzrule(_tzrule *tzrule)
+{
+    xdecref_ttinfo(&(tzrule->std));
+    if (!tzrule->std_only) {
+        xdecref_ttinfo(&(tzrule->dst));
+    }
+
+    if (tzrule->start != NULL) {
+        PyMem_Free(tzrule->start);
+    }
+
+    if (tzrule->end != NULL) {
+        PyMem_Free(tzrule->end);
+    }
+}
+
+/* Calculate DST offsets from transitions and UTC offsets
+ *
+ * This is necessary because each C `ttinfo` only contains the UTC offset,
+ * time zone abbreviation and an isdst boolean - it does not include the
+ * amount of the DST offset, but we need the amount for the dst() function.
+ *
+ * Thus function uses heuristics to infer what the offset should be, so it
+ * is not guaranteed that this will work for all zones. If we cannot assign
+ * a value for a given DST offset, we'll assume it's 1H rather than 0H, so
+ * bool(dt.dst()) will always match ttinfo.isdst.
+ */
+static void
+utcoff_to_dstoff(size_t *trans_idx, long *utcoffs, long *dstoffs,
+                 unsigned char *isdsts, size_t num_transitions,
+                 size_t num_ttinfos)
+{
+    size_t dst_count = 0;
+    size_t dst_found = 0;
+    for (size_t i = 0; i < num_ttinfos; ++i) {
+        dst_count++;
+    }
+
+    for (size_t i = 1; i < num_transitions; ++i) {
+        if (dst_count == dst_found) {
+            break;
+        }
+
+        size_t idx = trans_idx[i];
+        size_t comp_idx = trans_idx[i - 1];
+
+        // Only look at DST offsets that have nto been assigned already
+        if (!isdsts[idx] || dstoffs[idx] != 0) {
+            continue;
+        }
+
+        long dstoff = 0;
+        long utcoff = utcoffs[idx];
+
+        if (!isdsts[comp_idx]) {
+            dstoff = utcoff - utcoffs[comp_idx];
+        }
+
+        if (!dstoff && idx < (num_ttinfos - 1)) {
+            comp_idx = trans_idx[i + 1];
+
+            // If the following transition is also DST and we couldn't find
+            // the DST offset by this point, we're going to have to skip it
+            // and hope this transition gets assigned later
+            if (isdsts[comp_idx]) {
+                continue;
+            }
+
+            dstoff = utcoff - utcoffs[comp_idx];
+        }
+
+        if (dstoff) {
+            dst_found++;
+            dstoffs[idx] = dstoff;
+        }
+    }
+
+    if (dst_found < dst_count) {
+        // If there are time zones we didn't find a value for, we'll end up
+        // with dstoff = 0 for something where isdst=1. This is obviously
+        // wrong — one hour will be a much better guess than 0.
+        for (size_t idx = 0; idx < num_ttinfos; ++idx) {
+            if (isdsts[idx] && !dstoffs[idx]) {
+                dstoffs[idx] = 3600;
+            }
+        }
+    }
+}
+
+#define _swap(x, y, buffer) \
+    buffer = x;             \
+    x = y;                  \
+    y = buffer;
+
+/* Calculate transitions in local time from UTC time and offsets.
+ *
+ * We want to know when each transition occurs, denominated in the number of
+ * nominal wall-time seconds between 1970-01-01T00:00:00 and the transition in
+ * *local time* (note: this is *not* equivalent to the output of
+ * datetime.timestamp, which is the total number of seconds actual elapsed
+ * since 1970-01-01T00:00:00Z in UTC).
+ *
+ * This is an ambiguous question because "local time" can be ambiguous — but it
+ * is disambiguated by the `fold` parameter, so we allocate two arrays:
+ *
+ *  trans_local[0]: The wall-time transitions for fold=0
+ *  trans_local[1]: The wall-time transitions for fold=1
+ *
+ * This returns 0 on success and a negative number of failure. The trans_local
+ * arrays must be freed if they are not NULL.
+ */
+static int
+ts_to_local(size_t *trans_idx, int64_t *trans_utc, long *utcoff,
+            int64_t *trans_local[2], size_t num_ttinfos,
+            size_t num_transitions)
+{
+    if (num_transitions == 0) {
+        return 0;
+    }
+
+    // Copy the UTC transitions into each array to be modified in place later
+    for (size_t i = 0; i < 2; ++i) {
+        trans_local[i] = PyMem_Malloc(num_transitions * sizeof(int64_t));
+        if (trans_local[i] == NULL) {
+            return -1;
+        }
+
+        memcpy(trans_local[i], trans_utc, num_transitions * sizeof(int64_t));
+    }
+
+    int64_t offset_0, offset_1, buff;
+    if (num_ttinfos > 1) {
+        offset_0 = utcoff[0];
+        offset_1 = utcoff[trans_idx[0]];
+
+        if (offset_1 > offset_0) {
+            _swap(offset_0, offset_1, buff);
+        }
+    }
+    else {
+        offset_0 = utcoff[0];
+        offset_1 = utcoff[0];
+    }
+
+    trans_local[0][0] += offset_0;
+    trans_local[1][0] += offset_1;
+
+    for (size_t i = 1; i < num_transitions; ++i) {
+        offset_0 = utcoff[trans_idx[i - 1]];
+        offset_1 = utcoff[trans_idx[i]];
+
+        if (offset_1 > offset_0) {
+            _swap(offset_1, offset_0, buff);
+        }
+
+        trans_local[0][i] += offset_0;
+        trans_local[1][i] += offset_1;
+    }
+
+    return 0;
+}
+
+/* Simple bisect_right binary search implementation */
+static size_t
+_bisect(const int64_t value, const int64_t *arr, size_t size)
+{
+    size_t lo = 0;
+    size_t hi = size;
+    size_t m;
+
+    while (lo < hi) {
+        m = (lo + hi) / 2;
+        if (arr[m] > value) {
+            hi = m;
+        }
+        else {
+            lo = m + 1;
+        }
+    }
+
+    return hi;
+}
+
+/* Find the ttinfo rules that apply at a given local datetime. */
+static _ttinfo *
+find_ttinfo(PyZoneInfo_ZoneInfo *self, PyObject *dt)
+{
+    // datetime.time has a .tzinfo attribute that passes None as the dt
+    // argument; it only really has meaning for fixed-offset zones.
+    if (dt == Py_None) {
+        if (self->fixed_offset) {
+            return &(self->tzrule_after.std);
+        }
+        else {
+            return &NO_TTINFO;
+        }
+    }
+
+    int64_t ts;
+    if (get_local_timestamp(dt, &ts)) {
+        return NULL;
+    }
+
+    unsigned char fold = PyDateTime_DATE_GET_FOLD(dt);
+    assert(fold < 2);
+    int64_t *local_transitions = self->trans_list_wall[fold];
+    size_t num_trans = self->num_transitions;
+
+    if (num_trans && ts < local_transitions[0]) {
+        return self->ttinfo_before;
+    }
+    else if (!num_trans || ts > local_transitions[self->num_transitions - 1]) {
+        return find_tzrule_ttinfo(&(self->tzrule_after), ts, fold,
+                                  PyDateTime_GET_YEAR(dt));
+    }
+    else {
+        size_t idx = _bisect(ts, local_transitions, self->num_transitions) - 1;
+        assert(idx < self->num_transitions);
+        return self->trans_ttinfos[idx];
+    }
+}
+
+static int
+is_leap_year(int year)
+{
+    const unsigned int ayear = (unsigned int)year;
+    return ayear % 4 == 0 && (ayear % 100 != 0 || ayear % 400 == 0);
+}
+
+/* Calculates ordinal datetime from year, month and day. */
+static int
+ymd_to_ord(int y, int m, int d)
+{
+    y -= 1;
+    int days_before_year = (y * 365) + (y / 4) - (y / 100) + (y / 400);
+    int yearday = DAYS_BEFORE_MONTH[m];
+    if (m > 2 && is_leap_year(y + 1)) {
+        yearday += 1;
+    }
+
+    return days_before_year + yearday + d;
+}
+
+/* Calculate the number of seconds since 1970-01-01 in local time.
+ *
+ * This gets a datetime in the same "units" as self->trans_list_wall so that we
+ * can easily determine which transitions a datetime falls between. See the
+ * comment above ts_to_local for more information.
+ * */
+static int
+get_local_timestamp(PyObject *dt, int64_t *local_ts)
+{
+    assert(local_ts != NULL);
+
+    int hour, minute, second;
+    int ord;
+    if (PyDateTime_CheckExact(dt)) {
+        int y = PyDateTime_GET_YEAR(dt);
+        int m = PyDateTime_GET_MONTH(dt);
+        int d = PyDateTime_GET_DAY(dt);
+        hour = PyDateTime_DATE_GET_HOUR(dt);
+        minute = PyDateTime_DATE_GET_MINUTE(dt);
+        second = PyDateTime_DATE_GET_SECOND(dt);
+
+        ord = ymd_to_ord(y, m, d);
+    }
+    else {
+        PyObject *num = PyObject_CallMethod(dt, "toordinal", NULL);
+        if (num == NULL) {
+            return -1;
+        }
+
+        ord = PyLong_AsLong(num);
+        Py_DECREF(num);
+        if (ord == -1 && PyErr_Occurred()) {
+            return -1;
+        }
+
+        num = PyObject_GetAttrString(dt, "hour");
+        if (num == NULL) {
+            return -1;
+        }
+        hour = PyLong_AsLong(num);
+        Py_DECREF(num);
+        if (hour == -1) {
+            return -1;
+        }
+
+        num = PyObject_GetAttrString(dt, "minute");
+        if (num == NULL) {
+            return -1;
+        }
+        minute = PyLong_AsLong(num);
+        Py_DECREF(num);
+        if (minute == -1) {
+            return -1;
+        }
+
+        num = PyObject_GetAttrString(dt, "second");
+        if (num == NULL) {
+            return -1;
+        }
+        second = PyLong_AsLong(num);
+        Py_DECREF(num);
+        if (second == -1) {
+            return -1;
+        }
+    }
+
+    *local_ts = (int64_t)(ord - EPOCHORDINAL) * 86400 +
+                (int64_t)(hour * 3600 + minute * 60 + second);
+
+    return 0;
+}
+
+/////
+// Functions for cache handling
+
+/* Constructor for StrongCacheNode */
+static StrongCacheNode *
+strong_cache_node_new(PyObject *key, PyObject *zone)
+{
+    StrongCacheNode *node = PyMem_Malloc(sizeof(StrongCacheNode));
+    if (node == NULL) {
+        return NULL;
+    }
+
+    Py_INCREF(key);
+    Py_INCREF(zone);
+
+    node->next = NULL;
+    node->prev = NULL;
+    node->key = key;
+    node->zone = zone;
+
+    return node;
+}
+
+/* Destructor for StrongCacheNode */
+void
+strong_cache_node_free(StrongCacheNode *node)
+{
+    Py_XDECREF(node->key);
+    Py_XDECREF(node->zone);
+
+    PyMem_Free(node);
+}
+
+/* Frees all nodes at or after a specified root in the strong cache.
+ *
+ * This can be used on the root node to free the entire cache or it can be used
+ * to clear all nodes that have been expired (which, if everything is going
+ * right, will actually only be 1 node at a time).
+ */
+void
+strong_cache_free(StrongCacheNode *root)
+{
+    StrongCacheNode *node = root;
+    StrongCacheNode *next_node;
+    while (node != NULL) {
+        next_node = node->next;
+        strong_cache_node_free(node);
+
+        node = next_node;
+    }
+}
+
+/* Removes a node from the cache and update its neighbors.
+ *
+ * This is used both when ejecting a node from the cache and when moving it to
+ * the front of the cache.
+ */
+static void
+remove_from_strong_cache(StrongCacheNode *node)
+{
+    if (ZONEINFO_STRONG_CACHE == node) {
+        ZONEINFO_STRONG_CACHE = node->next;
+    }
+
+    if (node->prev != NULL) {
+        node->prev->next = node->next;
+    }
+
+    if (node->next != NULL) {
+        node->next->prev = node->prev;
+    }
+
+    node->next = NULL;
+    node->prev = NULL;
+}
+
+/* Retrieves the node associated with a key, if it exists.
+ *
+ * This traverses the strong cache until it finds a matching key and returns a
+ * pointer to the relevant node if found. Returns NULL if no node is found.
+ *
+ * root may be NULL, indicating an empty cache.
+ */
+static StrongCacheNode *
+find_in_strong_cache(const StrongCacheNode *const root, PyObject *const key)
+{
+    const StrongCacheNode *node = root;
+    while (node != NULL) {
+        if (PyObject_RichCompareBool(key, node->key, Py_EQ)) {
+            return (StrongCacheNode *)node;
+        }
+
+        node = node->next;
+    }
+
+    return NULL;
+}
+
+/* Ejects a given key from the class's strong cache, if applicable.
+ *
+ * This function is used to enable the per-key functionality in clear_cache.
+ */
+static void
+eject_from_strong_cache(const PyTypeObject *const type, PyObject *key)
+{
+    if (type != &PyZoneInfo_ZoneInfoType) {
+        return;
+    }
+
+    StrongCacheNode *node = find_in_strong_cache(ZONEINFO_STRONG_CACHE, key);
+    if (node != NULL) {
+        remove_from_strong_cache(node);
+
+        strong_cache_node_free(node);
+    }
+}
+
+/* Moves a node to the front of the LRU cache.
+ *
+ * The strong cache is an LRU cache, so whenever a given node is accessed, if
+ * it is not at the front of the cache, it needs to be moved there.
+ */
+static void
+move_strong_cache_node_to_front(StrongCacheNode **root, StrongCacheNode *node)
+{
+    StrongCacheNode *root_p = *root;
+    if (root_p == node) {
+        return;
+    }
+
+    remove_from_strong_cache(node);
+
+    node->prev = NULL;
+    node->next = root_p;
+
+    if (root_p != NULL) {
+        root_p->prev = node;
+    }
+
+    *root = node;
+}
+
+/* Retrieves a ZoneInfo from the strong cache if it's present.
+ *
+ * This function finds the ZoneInfo by key and if found will move the node to
+ * the front of the LRU cache and return a new reference to it. It returns NULL
+ * if the key is not in the cache.
+ *
+ * The strong cache is currently only implemented for the base class, so this
+ * always returns a cache miss for subclasses.
+ */
+static PyObject *
+zone_from_strong_cache(const PyTypeObject *const type, PyObject *const key)
+{
+    if (type != &PyZoneInfo_ZoneInfoType) {
+        return NULL;  // Strong cache currently only implemented for base class
+    }
+
+    StrongCacheNode *node = find_in_strong_cache(ZONEINFO_STRONG_CACHE, key);
+
+    if (node != NULL) {
+        move_strong_cache_node_to_front(&ZONEINFO_STRONG_CACHE, node);
+        Py_INCREF(node->zone);
+        return node->zone;
+    }
+
+    return NULL;  // Cache miss
+}
+
+/* Inserts a new key into the strong LRU cache.
+ *
+ * This function is only to be used after a cache miss — it creates a new node
+ * at the front of the cache and ejects any stale entries (keeping the size of
+ * the cache to at most ZONEINFO_STRONG_CACHE_MAX_SIZE).
+ */
+static void
+update_strong_cache(const PyTypeObject *const type, PyObject *key,
+                    PyObject *zone)
+{
+    if (type != &PyZoneInfo_ZoneInfoType) {
+        return;
+    }
+
+    StrongCacheNode *new_node = strong_cache_node_new(key, zone);
+
+    move_strong_cache_node_to_front(&ZONEINFO_STRONG_CACHE, new_node);
+
+    StrongCacheNode *node = new_node->next;
+    for (size_t i = 1; i < ZONEINFO_STRONG_CACHE_MAX_SIZE; ++i) {
+        if (node == NULL) {
+            return;
+        }
+        node = node->next;
+    }
+
+    // Everything beyond this point needs to be freed
+    if (node != NULL) {
+        if (node->prev != NULL) {
+            node->prev->next = NULL;
+        }
+        strong_cache_free(node);
+    }
+}
+
+/* Clears all entries into a type's strong cache.
+ *
+ * Because the strong cache is not implemented for subclasses, this is a no-op
+ * for everything except the base class.
+ */
+void
+clear_strong_cache(const PyTypeObject *const type)
+{
+    if (type != &PyZoneInfo_ZoneInfoType) {
+        return;
+    }
+
+    strong_cache_free(ZONEINFO_STRONG_CACHE);
+    ZONEINFO_STRONG_CACHE = NULL;
+}
+
+static PyObject *
+new_weak_cache(void)
+{
+    PyObject *weakref_module = PyImport_ImportModule("weakref");
+    if (weakref_module == NULL) {
+        return NULL;
+    }
+
+    PyObject *weak_cache =
+        PyObject_CallMethod(weakref_module, "WeakValueDictionary", "");
+    Py_DECREF(weakref_module);
+    return weak_cache;
+}
+
+static int
+initialize_caches(void)
+{
+    // TODO: Move to a PyModule_GetState / PEP 573 based caching system.
+    if (TIMEDELTA_CACHE == NULL) {
+        TIMEDELTA_CACHE = PyDict_New();
+    }
+    else {
+        Py_INCREF(TIMEDELTA_CACHE);
+    }
+
+    if (TIMEDELTA_CACHE == NULL) {
+        return -1;
+    }
+
+    if (ZONEINFO_WEAK_CACHE == NULL) {
+        ZONEINFO_WEAK_CACHE = new_weak_cache();
+    }
+    else {
+        Py_INCREF(ZONEINFO_WEAK_CACHE);
+    }
+
+    if (ZONEINFO_WEAK_CACHE == NULL) {
+        return -1;
+    }
+
+    return 0;
+}
+
+static PyObject *
+zoneinfo_init_subclass(PyTypeObject *cls, PyObject *args, PyObject **kwargs)
+{
+    PyObject *weak_cache = new_weak_cache();
+    if (weak_cache == NULL) {
+        return NULL;
+    }
+
+    PyObject_SetAttrString((PyObject *)cls, "_weak_cache", weak_cache);
+    Py_DECREF(weak_cache);
+    Py_RETURN_NONE;
+}
+
+/////
+// Specify the ZoneInfo type
+static PyMethodDef zoneinfo_methods[] = {
+    {"clear_cache", (PyCFunction)(void (*)(void))zoneinfo_clear_cache,
+     METH_VARARGS | METH_KEYWORDS | METH_CLASS,
+     PyDoc_STR("Clear the ZoneInfo cache.")},
+    {"no_cache", (PyCFunction)(void (*)(void))zoneinfo_no_cache,
+     METH_VARARGS | METH_KEYWORDS | METH_CLASS,
+     PyDoc_STR("Get a new instance of ZoneInfo, bypassing the cache.")},
+    {"from_file", (PyCFunction)(void (*)(void))zoneinfo_from_file,
+     METH_VARARGS | METH_KEYWORDS | METH_CLASS,
+     PyDoc_STR("Create a ZoneInfo file from a file object.")},
+    {"utcoffset", (PyCFunction)zoneinfo_utcoffset, METH_O,
+     PyDoc_STR("Retrieve a timedelta representing the UTC offset in a zone at "
+               "the given datetime.")},
+    {"dst", (PyCFunction)zoneinfo_dst, METH_O,
+     PyDoc_STR("Retrieve a timedelta representing the amount of DST applied "
+               "in a zone at the given datetime.")},
+    {"tzname", (PyCFunction)zoneinfo_tzname, METH_O,
+     PyDoc_STR("Retrieve a string containing the abbreviation for the time "
+               "zone that applies in a zone at a given datetime.")},
+    {"fromutc", (PyCFunction)zoneinfo_fromutc, METH_O,
+     PyDoc_STR("Given a datetime with local time in UTC, retrieve an adjusted "
+               "datetime in local time.")},
+    {"__reduce__", (PyCFunction)zoneinfo_reduce, METH_NOARGS,
+     PyDoc_STR("Function for serialization with the pickle protocol.")},
+    {"_unpickle", (PyCFunction)zoneinfo__unpickle, METH_VARARGS | METH_CLASS,
+     PyDoc_STR("Private method used in unpickling.")},
+    {"__init_subclass__", (PyCFunction)(void (*)(void))zoneinfo_init_subclass,
+     METH_VARARGS | METH_KEYWORDS | METH_CLASS,
+     PyDoc_STR("Function to initialize subclasses.")},
+    {NULL} /* Sentinel */
+};
+
+static PyMemberDef zoneinfo_members[] = {
+    {.name = "key",
+     .offset = offsetof(PyZoneInfo_ZoneInfo, key),
+     .type = T_OBJECT_EX,
+     .flags = READONLY,
+     .doc = NULL},
+    {NULL}, /* Sentinel */
+};
+
+static PyTypeObject PyZoneInfo_ZoneInfoType = {
+    PyVarObject_HEAD_INIT(NULL, 0)  //
+        .tp_name = "zoneinfo.ZoneInfo",
+    .tp_basicsize = sizeof(PyZoneInfo_ZoneInfo),
+    .tp_weaklistoffset = offsetof(PyZoneInfo_ZoneInfo, weakreflist),
+    .tp_repr = (reprfunc)zoneinfo_repr,
+    .tp_str = (reprfunc)zoneinfo_str,
+    .tp_getattro = PyObject_GenericGetAttr,
+    .tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE),
+    /* .tp_doc = zoneinfo_doc, */
+    .tp_methods = zoneinfo_methods,
+    .tp_members = zoneinfo_members,
+    .tp_new = zoneinfo_new,
+    .tp_dealloc = zoneinfo_dealloc,
+};
+
+/////
+// Specify the _zoneinfo module
+static PyMethodDef module_methods[] = {{NULL, NULL}};
+static void
+module_free()
+{
+    Py_XDECREF(_tzpath_find_tzfile);
+    _tzpath_find_tzfile = NULL;
+
+    Py_XDECREF(_common_mod);
+    _common_mod = NULL;
+
+    Py_XDECREF(io_open);
+    io_open = NULL;
+
+    xdecref_ttinfo(&NO_TTINFO);
+
+    if (TIMEDELTA_CACHE != NULL && Py_REFCNT(TIMEDELTA_CACHE) > 1) {
+        Py_DECREF(TIMEDELTA_CACHE);
+    } else {
+        Py_CLEAR(TIMEDELTA_CACHE);
+    }
+
+    if (ZONEINFO_WEAK_CACHE != NULL && Py_REFCNT(ZONEINFO_WEAK_CACHE) > 1) {
+        Py_DECREF(ZONEINFO_WEAK_CACHE);
+    } else {
+        Py_CLEAR(ZONEINFO_WEAK_CACHE);
+    }
+
+    clear_strong_cache(&PyZoneInfo_ZoneInfoType);
+}
+
+static int
+zoneinfomodule_exec(PyObject *m)
+{
+    PyDateTime_IMPORT;
+    PyZoneInfo_ZoneInfoType.tp_base = PyDateTimeAPI->TZInfoType;
+    if (PyType_Ready(&PyZoneInfo_ZoneInfoType) < 0) {
+        goto error;
+    }
+
+    Py_INCREF(&PyZoneInfo_ZoneInfoType);
+    PyModule_AddObject(m, "ZoneInfo", (PyObject *)&PyZoneInfo_ZoneInfoType);
+
+    /* Populate imports */
+    PyObject *_tzpath_module = PyImport_ImportModule("zoneinfo._tzpath");
+    if (_tzpath_module == NULL) {
+        goto error;
+    }
+
+    _tzpath_find_tzfile =
+        PyObject_GetAttrString(_tzpath_module, "find_tzfile");
+    Py_DECREF(_tzpath_module);
+    if (_tzpath_find_tzfile == NULL) {
+        goto error;
+    }
+
+    PyObject *io_module = PyImport_ImportModule("io");
+    if (io_module == NULL) {
+        goto error;
+    }
+
+    io_open = PyObject_GetAttrString(io_module, "open");
+    Py_DECREF(io_module);
+    if (io_open == NULL) {
+        goto error;
+    }
+
+    _common_mod = PyImport_ImportModule("zoneinfo._common");
+    if (_common_mod == NULL) {
+        goto error;
+    }
+
+    if (NO_TTINFO.utcoff == NULL) {
+        NO_TTINFO.utcoff = Py_None;
+        NO_TTINFO.dstoff = Py_None;
+        NO_TTINFO.tzname = Py_None;
+
+        for (size_t i = 0; i < 3; ++i) {
+            Py_INCREF(Py_None);
+        }
+    }
+
+    if (initialize_caches()) {
+        goto error;
+    }
+
+    return 0;
+
+error:
+    return -1;
+}
+
+static PyModuleDef_Slot zoneinfomodule_slots[] = {
+    {Py_mod_exec, zoneinfomodule_exec}, {0, NULL}};
+
+static struct PyModuleDef zoneinfomodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "_zoneinfo",
+    .m_doc = "C implementation of the zoneinfo module",
+    .m_size = 0,
+    .m_methods = module_methods,
+    .m_slots = zoneinfomodule_slots,
+    .m_free = (freefunc)module_free};
+
+PyMODINIT_FUNC
+PyInit__zoneinfo(void)
+{
+    return PyModuleDef_Init(&zoneinfomodule);
+}
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index abcdd1e..724c503 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -5,7 +5,7 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "structmember.h"
+#include <stddef.h>               // offsetof()
 
 #ifdef STDC_HEADERS
 #include <stddef.h>
@@ -43,7 +43,7 @@
     Py_ssize_t allocated;
     const struct arraydescr *ob_descr;
     PyObject *weakreflist; /* List of weak references */
-    int ob_exports;  /* Number of exported buffers */
+    Py_ssize_t ob_exports;  /* Number of exported buffers */
 } arrayobject;
 
 static PyTypeObject Arraytype;
@@ -106,7 +106,7 @@
 #include "clinic/arraymodule.c.h"
 
 #define array_Check(op) PyObject_TypeCheck(op, &Arraytype)
-#define array_CheckExact(op) (Py_TYPE(op) == &Arraytype)
+#define array_CheckExact(op) Py_IS_TYPE(op, &Arraytype)
 
 static int
 array_resize(arrayobject *self, Py_ssize_t newsize)
@@ -128,14 +128,14 @@
     if (self->allocated >= newsize &&
         Py_SIZE(self) < newsize + 16 &&
         self->ob_item != NULL) {
-        Py_SIZE(self) = newsize;
+        Py_SET_SIZE(self, newsize);
         return 0;
     }
 
     if (newsize == 0) {
         PyMem_FREE(self->ob_item);
         self->ob_item = NULL;
-        Py_SIZE(self) = 0;
+        Py_SET_SIZE(self, 0);
         self->allocated = 0;
         return 0;
     }
@@ -165,7 +165,7 @@
         return -1;
     }
     self->ob_item = items;
-    Py_SIZE(self) = newsize;
+    Py_SET_SIZE(self, newsize);
     self->allocated = _new_size;
     return 0;
 }
@@ -185,9 +185,7 @@
 static PyObject *
 b_getitem(arrayobject *ap, Py_ssize_t i)
 {
-    long x = ((char *)ap->ob_item)[i];
-    if (x >= 128)
-        x -= 256;
+    long x = ((signed char *)ap->ob_item)[i];
     return PyLong_FromLong(x);
 }
 
@@ -237,24 +235,31 @@
 static PyObject *
 u_getitem(arrayobject *ap, Py_ssize_t i)
 {
-    return PyUnicode_FromOrdinal(((Py_UNICODE *) ap->ob_item)[i]);
+    return PyUnicode_FromOrdinal(((wchar_t *) ap->ob_item)[i]);
 }
 
 static int
 u_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
 {
-    Py_UNICODE *p;
-    Py_ssize_t len;
-
-    if (!PyArg_Parse(v, "u#;array item must be unicode character", &p, &len))
+    PyObject *u;
+    if (!PyArg_Parse(v, "U;array item must be unicode character", &u)) {
         return -1;
-    if (len != 1) {
+    }
+
+    Py_ssize_t len = PyUnicode_AsWideChar(u, NULL, 0);
+    if (len != 2) {
         PyErr_SetString(PyExc_TypeError,
                         "array item must be unicode character");
         return -1;
     }
-    if (i >= 0)
-        ((Py_UNICODE *)ap->ob_item)[i] = p[0];
+
+    wchar_t w;
+    len = PyUnicode_AsWideChar(u, &w, 1);
+    assert(len == 1);
+
+    if (i >= 0) {
+        ((wchar_t *)ap->ob_item)[i] = w;
+    }
     return 0;
 }
 
@@ -532,7 +537,7 @@
 
 DEFINE_COMPAREITEMS(b, signed char)
 DEFINE_COMPAREITEMS(BB, unsigned char)
-DEFINE_COMPAREITEMS(u, Py_UNICODE)
+DEFINE_COMPAREITEMS(u, wchar_t)
 DEFINE_COMPAREITEMS(h, short)
 DEFINE_COMPAREITEMS(HH, unsigned short)
 DEFINE_COMPAREITEMS(i, int)
@@ -550,7 +555,7 @@
 static const struct arraydescr descriptors[] = {
     {'b', 1, b_getitem, b_setitem, b_compareitems, "b", 1, 1},
     {'B', 1, BB_getitem, BB_setitem, BB_compareitems, "B", 1, 0},
-    {'u', sizeof(Py_UNICODE), u_getitem, u_setitem, u_compareitems, "u", 0, 0},
+    {'u', sizeof(wchar_t), u_getitem, u_setitem, u_compareitems, "u", 0, 0},
     {'h', sizeof(short), h_getitem, h_setitem, h_compareitems, "h", 1, 1},
     {'H', sizeof(short), HH_getitem, HH_setitem, HH_compareitems, "H", 1, 0},
     {'i', sizeof(int), i_getitem, i_setitem, i_compareitems, "i", 1, 1},
@@ -595,7 +600,7 @@
     op->ob_descr = descr;
     op->allocated = size;
     op->weakreflist = NULL;
-    Py_SIZE(op) = size;
+    Py_SET_SIZE(op, size);
     if (size <= 0) {
         op->ob_item = NULL;
     }
@@ -1507,7 +1512,7 @@
         bytes = PyBytes_FromStringAndSize(ptr, size);
         if (bytes == NULL)
             return NULL;
-        res = _PyObject_CallMethodIdObjArgs(f, &PyId_write, bytes, NULL);
+        res = _PyObject_CallMethodIdOneArg(f, &PyId_write, bytes);
         Py_DECREF(bytes);
         if (res == NULL)
             return NULL;
@@ -1626,27 +1631,6 @@
 }
 
 /*[clinic input]
-array.array.fromstring
-
-    buffer: Py_buffer(accept={str, buffer})
-    /
-
-Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method).
-
-This method is deprecated. Use frombytes instead.
-[clinic start generated code]*/
-
-static PyObject *
-array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer)
-/*[clinic end generated code: output=31c4baa779df84ce input=a3341a512e11d773]*/
-{
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-            "fromstring() is deprecated. Use frombytes() instead.", 2) != 0)
-        return NULL;
-    return frombytes(self, buffer);
-}
-
-/*[clinic input]
 array.array.frombytes
 
     buffer: Py_buffer
@@ -1681,27 +1665,9 @@
 }
 
 /*[clinic input]
-array.array.tostring
-
-Convert the array to an array of machine values and return the bytes representation.
-
-This method is deprecated. Use tobytes instead.
-[clinic start generated code]*/
-
-static PyObject *
-array_array_tostring_impl(arrayobject *self)
-/*[clinic end generated code: output=7d6bd92745a2c8f3 input=b6c0ddee7b30457e]*/
-{
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-            "tostring() is deprecated. Use tobytes() instead.", 2) != 0)
-        return NULL;
-    return array_array_tobytes_impl(self);
-}
-
-/*[clinic input]
 array.array.fromunicode
 
-    ustr: Py_UNICODE(zeroes=True)
+    ustr: unicode
     /
 
 Extends this array with data from the unicode string ustr.
@@ -1712,25 +1678,28 @@
 [clinic start generated code]*/
 
 static PyObject *
-array_array_fromunicode_impl(arrayobject *self, const Py_UNICODE *ustr,
-                             Py_ssize_clean_t ustr_length)
-/*[clinic end generated code: output=cf2f662908e2befc input=150f00566ffbca6e]*/
+array_array_fromunicode_impl(arrayobject *self, PyObject *ustr)
+/*[clinic end generated code: output=24359f5e001a7f2b input=025db1fdade7a4ce]*/
 {
-    char typecode;
-
-    typecode = self->ob_descr->typecode;
-    if (typecode != 'u') {
+    if (self->ob_descr->typecode != 'u') {
         PyErr_SetString(PyExc_ValueError,
             "fromunicode() may only be called on "
             "unicode type arrays");
         return NULL;
     }
-    if (ustr_length > 0) {
+
+    Py_ssize_t ustr_length = PyUnicode_AsWideChar(ustr, NULL, 0);
+    assert(ustr_length > 0);
+    if (ustr_length > 1) {
+        ustr_length--; /* trim trailing NUL character */
         Py_ssize_t old_size = Py_SIZE(self);
-        if (array_resize(self, old_size + ustr_length) == -1)
+        if (array_resize(self, old_size + ustr_length) == -1) {
             return NULL;
-        memcpy(self->ob_item + old_size * sizeof(Py_UNICODE),
-               ustr, ustr_length * sizeof(Py_UNICODE));
+        }
+
+        // must not fail
+        PyUnicode_AsWideChar(
+            ustr, ((wchar_t *)self->ob_item) + old_size, ustr_length);
     }
 
     Py_RETURN_NONE;
@@ -1750,14 +1719,12 @@
 array_array_tounicode_impl(arrayobject *self)
 /*[clinic end generated code: output=08e442378336e1ef input=127242eebe70b66d]*/
 {
-    char typecode;
-    typecode = self->ob_descr->typecode;
-    if (typecode != 'u') {
+    if (self->ob_descr->typecode != 'u') {
         PyErr_SetString(PyExc_ValueError,
              "tounicode() may only be called on unicode type arrays");
         return NULL;
     }
-    return PyUnicode_FromWideChar((Py_UNICODE *) self->ob_item, Py_SIZE(self));
+    return PyUnicode_FromWideChar((wchar_t *) self->ob_item, Py_SIZE(self));
 }
 
 /*[clinic input]
@@ -2285,7 +2252,6 @@
     ARRAY_ARRAY_EXTEND_METHODDEF
     ARRAY_ARRAY_FROMFILE_METHODDEF
     ARRAY_ARRAY_FROMLIST_METHODDEF
-    ARRAY_ARRAY_FROMSTRING_METHODDEF
     ARRAY_ARRAY_FROMBYTES_METHODDEF
     ARRAY_ARRAY_FROMUNICODE_METHODDEF
     ARRAY_ARRAY_INDEX_METHODDEF
@@ -2296,7 +2262,6 @@
     ARRAY_ARRAY_REVERSE_METHODDEF
     ARRAY_ARRAY_TOFILE_METHODDEF
     ARRAY_ARRAY_TOLIST_METHODDEF
-    ARRAY_ARRAY_TOSTRING_METHODDEF
     ARRAY_ARRAY_TOBYTES_METHODDEF
     ARRAY_ARRAY_TOUNICODE_METHODDEF
     ARRAY_ARRAY___SIZEOF___METHODDEF
@@ -2718,30 +2683,20 @@
                 Py_DECREF(v);
             }
             else if (initial != NULL && PyUnicode_Check(initial))  {
-                Py_UNICODE *ustr;
                 Py_ssize_t n;
-
-                ustr = PyUnicode_AsUnicode(initial);
+                wchar_t *ustr = PyUnicode_AsWideCharString(initial, &n);
                 if (ustr == NULL) {
-                    PyErr_NoMemory();
                     Py_DECREF(a);
                     return NULL;
                 }
 
-                n = PyUnicode_GET_DATA_SIZE(initial);
                 if (n > 0) {
                     arrayobject *self = (arrayobject *)a;
-                    char *item = self->ob_item;
-                    item = (char *)PyMem_Realloc(item, n);
-                    if (item == NULL) {
-                        PyErr_NoMemory();
-                        Py_DECREF(a);
-                        return NULL;
-                    }
-                    self->ob_item = item;
-                    Py_SIZE(self) = n / sizeof(Py_UNICODE);
-                    memcpy(item, ustr, n);
-                    self->allocated = Py_SIZE(self);
+                    // self->ob_item may be NULL but it is safe.
+                    PyMem_Free(self->ob_item);
+                    self->ob_item = (char *)ustr;
+                    Py_SET_SIZE(self, n);
+                    self->allocated = n;
                 }
             }
             else if (initial != NULL && array_Check(initial) && len > 0) {
@@ -3034,12 +2989,11 @@
 {
     char buffer[Py_ARRAY_LENGTH(descriptors)], *p;
     PyObject *typecodes;
-    Py_ssize_t size = 0;
     const struct arraydescr *descr;
 
     if (PyType_Ready(&Arraytype) < 0)
         return -1;
-    Py_TYPE(&PyArrayIter_Type) = &PyType_Type;
+    Py_SET_TYPE(&PyArrayIter_Type, &PyType_Type);
 
     Py_INCREF((PyObject *)&Arraytype);
     if (PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype) < 0) {
@@ -3052,10 +3006,6 @@
         return -1;
     }
 
-    for (descr=descriptors; descr->typecode != '\0'; descr++) {
-        size++;
-    }
-
     p = buffer;
     for (descr = descriptors; descr->typecode != '\0'; descr++) {
         *p++ = (char)descr->typecode;
diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c
index 1d6d6e5..8cef64c 100644
--- a/Modules/atexitmodule.c
+++ b/Modules/atexitmodule.c
@@ -28,7 +28,13 @@
     int callback_len;
 } atexitmodule_state;
 
-#define GET_ATEXIT_STATE(mod) ((atexitmodule_state*)PyModule_GetState(mod))
+static inline atexitmodule_state*
+get_atexit_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (atexitmodule_state *)state;
+}
 
 
 static void
@@ -72,7 +78,7 @@
 
     if (module == NULL)
         return;
-    modstate = GET_ATEXIT_STATE(module);
+    modstate = get_atexit_state(module);
 
     if (modstate->ncallbacks == 0)
         return;
@@ -130,7 +136,7 @@
     atexit_callback *new_callback;
     PyObject *func = NULL;
 
-    modstate = GET_ATEXIT_STATE(self);
+    modstate = get_atexit_state(self);
 
     if (modstate->ncallbacks >= modstate->callback_len) {
         atexit_callback **r;
@@ -197,7 +203,7 @@
 static PyObject *
 atexit_clear(PyObject *self, PyObject *unused)
 {
-    atexit_cleanup(GET_ATEXIT_STATE(self));
+    atexit_cleanup(get_atexit_state(self));
     Py_RETURN_NONE;
 }
 
@@ -211,7 +217,7 @@
 {
     atexitmodule_state *modstate;
 
-    modstate = GET_ATEXIT_STATE(self);
+    modstate = get_atexit_state(self);
 
     return PyLong_FromSsize_t(modstate->ncallbacks);
 }
@@ -222,16 +228,15 @@
     int i;
     atexitmodule_state *modstate;
 
-    modstate = GET_ATEXIT_STATE(self);
-    if (modstate != NULL) {
-        for (i = 0; i < modstate->ncallbacks; i++) {
-            atexit_callback *cb = modstate->atexit_callbacks[i];
-            if (cb == NULL)
-                continue;
-            Py_VISIT(cb->func);
-            Py_VISIT(cb->args);
-            Py_VISIT(cb->kwargs);
-        }
+    modstate = (atexitmodule_state *)PyModule_GetState(self);
+
+    for (i = 0; i < modstate->ncallbacks; i++) {
+        atexit_callback *cb = modstate->atexit_callbacks[i];
+        if (cb == NULL)
+            continue;
+        Py_VISIT(cb->func);
+        Py_VISIT(cb->args);
+        Py_VISIT(cb->kwargs);
     }
     return 0;
 }
@@ -240,10 +245,8 @@
 atexit_m_clear(PyObject *self)
 {
     atexitmodule_state *modstate;
-    modstate = GET_ATEXIT_STATE(self);
-    if (modstate != NULL) {
-        atexit_cleanup(modstate);
-    }
+    modstate = (atexitmodule_state *)PyModule_GetState(self);
+    atexit_cleanup(modstate);
     return 0;
 }
 
@@ -251,11 +254,9 @@
 atexit_free(PyObject *m)
 {
     atexitmodule_state *modstate;
-    modstate = GET_ATEXIT_STATE(m);
-    if (modstate != NULL) {
-        atexit_cleanup(modstate);
-        PyMem_Free(modstate->atexit_callbacks);
-    }
+    modstate = (atexitmodule_state *)PyModule_GetState(m);
+    atexit_cleanup(modstate);
+    PyMem_Free(modstate->atexit_callbacks);
 }
 
 PyDoc_STRVAR(atexit_unregister__doc__,
@@ -273,7 +274,7 @@
     atexit_callback *cb;
     int i, eq;
 
-    modstate = GET_ATEXIT_STATE(self);
+    modstate = get_atexit_state(self);
 
     for (i = 0; i < modstate->ncallbacks; i++)
     {
@@ -318,7 +319,7 @@
 atexit_exec(PyObject *m) {
     atexitmodule_state *modstate;
 
-    modstate = GET_ATEXIT_STATE(m);
+    modstate = get_atexit_state(m);
     modstate->callback_len = 32;
     modstate->ncallbacks = 0;
     modstate->atexit_callbacks = PyMem_New(atexit_callback*,
diff --git a/Modules/audioop.c b/Modules/audioop.c
index f4fdeb2..3aeb6f0 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -371,14 +371,26 @@
             SETINT32((cp), (i), (val));         \
     } while(0)
 
+static PyModuleDef audioopmodule;
 
-static PyObject *AudioopError;
+typedef struct {
+    PyObject *AudioopError;
+} audioop_state;
+
+static inline audioop_state *
+get_audioop_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (audioop_state *)state;
+}
 
 static int
-audioop_check_size(int size)
+audioop_check_size(PyObject *module, int size)
 {
     if (size < 1 || size > 4) {
-        PyErr_SetString(AudioopError, "Size should be 1, 2, 3 or 4");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Size should be 1, 2, 3 or 4");
         return 0;
     }
     else
@@ -386,12 +398,13 @@
 }
 
 static int
-audioop_check_parameters(Py_ssize_t len, int size)
+audioop_check_parameters(PyObject *module, Py_ssize_t len, int size)
 {
-    if (!audioop_check_size(size))
+    if (!audioop_check_size(module, size))
         return 0;
     if (len % size != 0) {
-        PyErr_SetString(AudioopError, "not a whole number of frames");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "not a whole number of frames");
         return 0;
     }
     return 1;
@@ -420,10 +433,11 @@
 {
     int val;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     if (index < 0 || index >= fragment->len/width) {
-        PyErr_SetString(AudioopError, "Index out of range");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Index out of range");
         return NULL;
     }
     val = GETRAWSAMPLE(width, fragment->buf, index*width);
@@ -447,7 +461,7 @@
     Py_ssize_t i;
     unsigned int absval, max = 0;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     for (i = 0; i < fragment->len; i += width) {
         int val = GETRAWSAMPLE(width, fragment->buf, i);
@@ -479,7 +493,7 @@
     a warning */
     int min = 0x7fffffff, max = -0x7FFFFFFF-1;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     for (i = 0; i < fragment->len; i += width) {
         int val = GETRAWSAMPLE(width, fragment->buf, i);
@@ -507,7 +521,7 @@
     int avg;
     double sum = 0.0;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     for (i = 0; i < fragment->len; i += width)
         sum += GETRAWSAMPLE(width, fragment->buf, i);
@@ -536,7 +550,7 @@
     unsigned int res;
     double sum_squares = 0.0;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     for (i = 0; i < fragment->len; i += width) {
         double val = GETRAWSAMPLE(width, fragment->buf, i);
@@ -614,7 +628,8 @@
     double sum_ri_2, sum_aij_2, sum_aij_ri, result, best_result, factor;
 
     if (fragment->len & 1 || reference->len & 1) {
-        PyErr_SetString(AudioopError, "Strings should be even-sized");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Strings should be even-sized");
         return NULL;
     }
     cp1 = (const int16_t *)fragment->buf;
@@ -623,7 +638,8 @@
     len2 = reference->len >> 1;
 
     if (len1 < len2) {
-        PyErr_SetString(AudioopError, "First sample should be longer");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "First sample should be longer");
         return NULL;
     }
     sum_ri_2 = _sum2(cp2, cp2, len2);
@@ -681,11 +697,13 @@
     double sum_ri_2, sum_aij_ri, result;
 
     if (fragment->len & 1 || reference->len & 1) {
-        PyErr_SetString(AudioopError, "Strings should be even-sized");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Strings should be even-sized");
         return NULL;
     }
     if (fragment->len != reference->len) {
-        PyErr_SetString(AudioopError, "Samples should be same size");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Samples should be same size");
         return NULL;
     }
     cp1 = (const int16_t *)fragment->buf;
@@ -725,14 +743,16 @@
     double result, best_result;
 
     if (fragment->len & 1) {
-        PyErr_SetString(AudioopError, "Strings should be even-sized");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Strings should be even-sized");
         return NULL;
     }
     cp1 = (const int16_t *)fragment->buf;
     len1 = fragment->len >> 1;
 
     if (length < 0 || len1 < length) {
-        PyErr_SetString(AudioopError, "Input sample should be longer");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Input sample should be longer");
         return NULL;
     }
 
@@ -777,7 +797,7 @@
     unsigned int avg;
     int diff, prevdiff, nextreme = 0;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     if (fragment->len <= width)
         return PyLong_FromLong(0);
@@ -833,7 +853,7 @@
     unsigned int max = 0, extremediff;
     int diff, prevdiff;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     if (fragment->len <= width)
         return PyLong_FromLong(0);
@@ -885,7 +905,7 @@
     int prevval;
     Py_ssize_t ncross;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
     ncross = -1;
     prevval = 17; /* Anything <> 0,1 */
@@ -918,7 +938,7 @@
     double maxval, minval;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     maxval = (double) maxvals[width];
@@ -961,10 +981,11 @@
 
     cp = fragment->buf;
     len = fragment->len;
-    if (!audioop_check_parameters(len, width))
+    if (!audioop_check_parameters(module, len, width))
         return NULL;
     if (((len / width) & 1) != 0) {
-        PyErr_SetString(AudioopError, "not a whole number of frames");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "not a whole number of frames");
         return NULL;
     }
 
@@ -1008,7 +1029,7 @@
     double maxval, minval;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     maxval = (double) maxvals[width];
@@ -1056,10 +1077,11 @@
     int minval, maxval, newval;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment1->len, width))
+    if (!audioop_check_parameters(module, fragment1->len, width))
         return NULL;
     if (fragment1->len != fragment2->len) {
-        PyErr_SetString(AudioopError, "Lengths should be the same");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "Lengths should be the same");
         return NULL;
     }
 
@@ -1114,7 +1136,7 @@
     unsigned int val = 0, mask;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     rv = PyBytes_FromStringAndSize(NULL, fragment->len);
@@ -1172,7 +1194,7 @@
     Py_ssize_t i;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     rv = PyBytes_FromStringAndSize(NULL, fragment->len);
@@ -1205,7 +1227,7 @@
     Py_ssize_t i;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     rv = PyBytes_FromStringAndSize(NULL, fragment->len);
@@ -1241,9 +1263,9 @@
     Py_ssize_t i, j;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
-    if (!audioop_check_size(newwidth))
+    if (!audioop_check_size(module, newwidth))
         return NULL;
 
     if (fragment->len/width > PY_SSIZE_T_MAX/newwidth) {
@@ -1302,10 +1324,11 @@
     PyObject *samps, *str, *rv = NULL, *channel;
     int bytes_per_frame;
 
-    if (!audioop_check_size(width))
+    if (!audioop_check_size(module, width))
         return NULL;
     if (nchannels < 1) {
-        PyErr_SetString(AudioopError, "# of channels should be >= 1");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "# of channels should be >= 1");
         return NULL;
     }
     if (width > INT_MAX / nchannels) {
@@ -1318,17 +1341,19 @@
     }
     bytes_per_frame = width * nchannels;
     if (weightA < 1 || weightB < 0) {
-        PyErr_SetString(AudioopError,
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
             "weightA should be >= 1, weightB should be >= 0");
         return NULL;
     }
     assert(fragment->len >= 0);
     if (fragment->len % bytes_per_frame != 0) {
-        PyErr_SetString(AudioopError, "not a whole number of frames");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "not a whole number of frames");
         return NULL;
     }
     if (inrate <= 0 || outrate <= 0) {
-        PyErr_SetString(AudioopError, "sampling rate not > 0");
+        PyErr_SetString(get_audioop_state(module)->AudioopError,
+                        "sampling rate not > 0");
         return NULL;
     }
     /* divide inrate and outrate by their greatest common divisor */
@@ -1369,7 +1394,7 @@
                         &d, &PyTuple_Type, &samps))
             goto exit;
         if (PyTuple_Size(samps) != nchannels) {
-            PyErr_SetString(AudioopError,
+            PyErr_SetString(get_audioop_state(module)->AudioopError,
                             "illegal state argument");
             goto exit;
         }
@@ -1491,7 +1516,7 @@
     Py_ssize_t i;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     rv = PyBytes_FromStringAndSize(NULL, fragment->len/width);
@@ -1525,7 +1550,7 @@
     Py_ssize_t i;
     PyObject *rv;
 
-    if (!audioop_check_size(width))
+    if (!audioop_check_size(module, width))
         return NULL;
 
     if (fragment->len > PY_SSIZE_T_MAX/width) {
@@ -1564,7 +1589,7 @@
     Py_ssize_t i;
     PyObject *rv;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     rv = PyBytes_FromStringAndSize(NULL, fragment->len/width);
@@ -1599,7 +1624,7 @@
     int val;
     PyObject *rv;
 
-    if (!audioop_check_size(width))
+    if (!audioop_check_size(module, width))
         return NULL;
 
     if (fragment->len > PY_SSIZE_T_MAX/width) {
@@ -1643,7 +1668,7 @@
     PyObject *rv = NULL, *str;
     int outputbuffer = 0, bufferstep;
 
-    if (!audioop_check_parameters(fragment->len, width))
+    if (!audioop_check_parameters(module, fragment->len, width))
         return NULL;
 
     /* Decode state, should have (value, step) */
@@ -1773,7 +1798,7 @@
     PyObject *rv, *str;
     int inputbuffer = 0, bufferstep;
 
-    if (!audioop_check_size(width))
+    if (!audioop_check_size(module, width))
         return NULL;
 
     /* Decode state, should have (value, step) */
@@ -1897,31 +1922,65 @@
     { 0,          0 }
 };
 
+static int
+audioop_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    audioop_state *state = get_audioop_state(module);
+    Py_VISIT(state->AudioopError);
+    return 0;
+}
+
+static int
+audioop_clear(PyObject *module)
+{
+    audioop_state *state = get_audioop_state(module);
+    Py_CLEAR(state->AudioopError);
+    return 0;
+}
+
+static void
+audioop_free(void *module) {
+    audioop_clear((PyObject *)module);
+}
+
+static int
+audioop_exec(PyObject* module)
+{
+    audioop_state *state = get_audioop_state(module);
+
+    state->AudioopError = PyErr_NewException("audioop.error", NULL, NULL);
+    if (state->AudioopError == NULL) {
+        return -1;
+    }
+
+    Py_INCREF(state->AudioopError);
+    if (PyModule_AddObject(module, "error", state->AudioopError) < 0) {
+        Py_DECREF(state->AudioopError);
+        return -1;
+    }
+
+    return 0;
+}
+
+static PyModuleDef_Slot audioop_slots[] = {
+    {Py_mod_exec, audioop_exec},
+    {0, NULL}
+};
 
 static struct PyModuleDef audioopmodule = {
     PyModuleDef_HEAD_INIT,
     "audioop",
     NULL,
-    -1,
+    sizeof(audioop_state),
     audioop_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    audioop_slots,
+    audioop_traverse,
+    audioop_clear,
+    audioop_free
 };
 
 PyMODINIT_FUNC
 PyInit_audioop(void)
 {
-    PyObject *m, *d;
-    m = PyModule_Create(&audioopmodule);
-    if (m == NULL)
-        return NULL;
-    d = PyModule_GetDict(m);
-    if (d == NULL)
-        return NULL;
-    AudioopError = PyErr_NewException("audioop.error", NULL, NULL);
-    if (AudioopError != NULL)
-         PyDict_SetItemString(d,"error",AudioopError);
-    return m;
+    return PyModuleDef_Init(&audioopmodule);
 }
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 1c7dc35..1f3248b 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -66,6 +66,12 @@
     PyObject *Incomplete;
 } binascii_state;
 
+static binascii_state *
+get_binascii_state(PyObject *module)
+{
+    return (binascii_state *)PyModule_GetState(module);
+}
+
 /*
 ** hqx lookup table, ascii->binary.
 */
@@ -130,7 +136,7 @@
 static const unsigned char table_b2a_hqx[] =
 "!\"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr";
 
-static const char table_a2b_base64[] = {
+static const unsigned char table_a2b_base64[] = {
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
@@ -138,7 +144,16 @@
     -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
     15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
     -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
-    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1,
+
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
 };
 
 #define BASE64_PAD '='
@@ -413,32 +428,6 @@
     return _PyBytesWriter_Finish(&writer, ascii_data);
 }
 
-
-static int
-binascii_find_valid(const unsigned char *s, Py_ssize_t slen, int num)
-{
-    /* Finds & returns the (num+1)th
-    ** valid character for base64, or -1 if none.
-    */
-
-    int ret = -1;
-    unsigned char c, b64val;
-
-    while ((slen > 0) && (ret == -1)) {
-        c = *s;
-        b64val = table_a2b_base64[c & 0x7f];
-        if ( ((c <= 0x7f) && (b64val != (unsigned char)-1)) ) {
-            if (num == 0)
-                ret = *s;
-            num--;
-        }
-
-        s++;
-        slen--;
-    }
-    return ret;
-}
-
 /*[clinic input]
 binascii.a2b_base64
 
@@ -452,88 +441,74 @@
 binascii_a2b_base64_impl(PyObject *module, Py_buffer *data)
 /*[clinic end generated code: output=0628223f19fd3f9b input=5872acf6e1cac243]*/
 {
-    const unsigned char *ascii_data;
-    unsigned char *bin_data;
-    unsigned char *bin_data_start;
-    int leftbits = 0;
-    unsigned char this_ch;
-    unsigned int leftchar = 0;
-    Py_ssize_t ascii_len, bin_len;
-    int quad_pos = 0;
-    _PyBytesWriter writer;
-    binascii_state *state;
+    assert(data->len >= 0);
 
-    ascii_data = data->buf;
-    ascii_len = data->len;
-
-    assert(ascii_len >= 0);
-
-    if (ascii_len > PY_SSIZE_T_MAX - 3)
-        return PyErr_NoMemory();
-
-    bin_len = ((ascii_len+3)/4)*3; /* Upper bound, corrected later */
-
-    _PyBytesWriter_Init(&writer);
+    const unsigned char *ascii_data = data->buf;
+    size_t ascii_len = data->len;
 
     /* Allocate the buffer */
-    bin_data = _PyBytesWriter_Alloc(&writer, bin_len);
+    Py_ssize_t bin_len = ((ascii_len+3)/4)*3; /* Upper bound, corrected later */
+    _PyBytesWriter writer;
+    _PyBytesWriter_Init(&writer);
+    unsigned char *bin_data = _PyBytesWriter_Alloc(&writer, bin_len);
     if (bin_data == NULL)
         return NULL;
-    bin_data_start = bin_data;
+    unsigned char *bin_data_start = bin_data;
 
-    for( ; ascii_len > 0; ascii_len--, ascii_data++) {
-        this_ch = *ascii_data;
-
-        if (this_ch > 0x7f ||
-            this_ch == '\r' || this_ch == '\n' || this_ch == ' ')
-            continue;
+    int quad_pos = 0;
+    unsigned char leftchar = 0;
+    int pads = 0;
+    for (size_t i = 0; i < ascii_len; i++) {
+        unsigned char this_ch = ascii_data[i];
 
         /* Check for pad sequences and ignore
         ** the invalid ones.
         */
         if (this_ch == BASE64_PAD) {
-            if ( (quad_pos < 2) ||
-                 ((quad_pos == 2) &&
-                  (binascii_find_valid(ascii_data, ascii_len, 1)
-                   != BASE64_PAD)) )
-            {
-                continue;
-            }
-            else {
+            if (quad_pos >= 2 && quad_pos + ++pads >= 4) {
                 /* A pad sequence means no more input.
                 ** We've already interpreted the data
                 ** from the quad at this point.
                 */
-                leftbits = 0;
-                break;
+                goto done;
             }
+            continue;
         }
 
-        this_ch = table_a2b_base64[*ascii_data];
-        if ( this_ch == (unsigned char) -1 )
+        this_ch = table_a2b_base64[this_ch];
+        if (this_ch >= 64) {
             continue;
+        }
+        pads = 0;
 
-        /*
-        ** Shift it in on the low end, and see if there's
-        ** a byte ready for output.
-        */
-        quad_pos = (quad_pos + 1) & 0x03;
-        leftchar = (leftchar << 6) | (this_ch);
-        leftbits += 6;
-
-        if ( leftbits >= 8 ) {
-            leftbits -= 8;
-            *bin_data++ = (leftchar >> leftbits) & 0xff;
-            leftchar &= ((1 << leftbits) - 1);
+        switch (quad_pos) {
+            case 0:
+                quad_pos = 1;
+                leftchar = this_ch;
+                break;
+            case 1:
+                quad_pos = 2;
+                *bin_data++ = (leftchar << 2) | (this_ch >> 4);
+                leftchar = this_ch & 0x0f;
+                break;
+            case 2:
+                quad_pos = 3;
+                *bin_data++ = (leftchar << 4) | (this_ch >> 2);
+                leftchar = this_ch & 0x03;
+                break;
+            case 3:
+                quad_pos = 0;
+                *bin_data++ = (leftchar << 6) | (this_ch);
+                leftchar = 0;
+                break;
         }
     }
 
-    if (leftbits != 0) {
-        state = PyModule_GetState(module);
+    if (quad_pos != 0) {
+        binascii_state *state = PyModule_GetState(module);
         if (state == NULL) {
-            return NULL;
-        }
-        if (leftbits == 6) {
+            /* error already set, from PyModule_GetState */
+        } else if (quad_pos == 1) {
             /*
             ** There is exactly one extra valid, non-padding, base64 character.
             ** This is an invalid length, as there is no possible input that
@@ -551,6 +526,7 @@
         return NULL;
     }
 
+done:
     return _PyBytesWriter_Finish(&writer, bin_data);
 }
 
@@ -643,6 +619,11 @@
 binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data)
 /*[clinic end generated code: output=4d6d8c54d54ea1c1 input=0d914c680e0eed55]*/
 {
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                     "binascii.a2b_hqx() is deprecated", 1) < 0) {
+        return NULL;
+    }
+
     const unsigned char *ascii_data;
     unsigned char *bin_data;
     int leftbits = 0;
@@ -731,6 +712,11 @@
 binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data)
 /*[clinic end generated code: output=393d79338f5f5629 input=e1f1712447a82b09]*/
 {
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                     "binascii.rlecode_hqx() is deprecated", 1) < 0) {
+        return NULL;
+    }
+
     const unsigned char *in_data;
     unsigned char *out_data;
     unsigned char ch;
@@ -793,6 +779,11 @@
 binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data)
 /*[clinic end generated code: output=d0aa5a704bc9f7de input=9596ebe019fe12ba]*/
 {
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                     "binascii.b2a_hqx() is deprecated", 1) < 0) {
+        return NULL;
+    }
+
     unsigned char *ascii_data;
     const unsigned char *bin_data;
     int leftbits = 0;
@@ -848,6 +839,11 @@
 binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data)
 /*[clinic end generated code: output=9826619565de1c6c input=54cdd49fc014402c]*/
 {
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                     "binascii.rledecode_hqx() is deprecated", 1) < 0) {
+        return NULL;
+    }
+
     const unsigned char *in_data;
     unsigned char *out_data;
     unsigned char in_byte, in_repeat;
@@ -962,7 +958,7 @@
 
 
 /*[clinic input]
-binascii.crc_hqx -> unsigned_int
+binascii.crc_hqx
 
     data: Py_buffer
     crc: unsigned_int(bitwise=True)
@@ -971,9 +967,9 @@
 Compute CRC-CCITT incrementally.
 [clinic start generated code]*/
 
-static unsigned int
+static PyObject *
 binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc)
-/*[clinic end generated code: output=8ec2a78590d19170 input=f18240ff8c705b79]*/
+/*[clinic end generated code: output=2fde213d0f547a98 input=56237755370a951c]*/
 {
     const unsigned char *bin_data;
     Py_ssize_t len;
@@ -986,7 +982,7 @@
         crc = ((crc<<8)&0xff00) ^ crctab_hqx[(crc>>8)^*bin_data++];
     }
 
-    return crc;
+    return PyLong_FromUnsignedLong(crc);
 }
 
 #ifndef USE_ZLIB_CRC32
@@ -1315,15 +1311,12 @@
     datalen = data->len;
 
     /* We allocate the output same size as input, this is overkill.
-     * The previous implementation used calloc() so we'll zero out the
-     * memory here too, since PyMem_Malloc() does not guarantee that.
      */
-    odata = (unsigned char *) PyMem_Malloc(datalen);
+    odata = (unsigned char *) PyMem_Calloc(1, datalen);
     if (odata == NULL) {
         PyErr_NoMemory();
         return NULL;
     }
-    memset(odata, 0, datalen);
 
     in = out = 0;
     while (in < datalen) {
@@ -1503,15 +1496,12 @@
     }
 
     /* We allocate the output same size as input, this is overkill.
-     * The previous implementation used calloc() so we'll zero out the
-     * memory here too, since PyMem_Malloc() does not guarantee that.
      */
-    odata = (unsigned char *) PyMem_Malloc(odatalen);
+    odata = (unsigned char *) PyMem_Calloc(1, odatalen);
     if (odata == NULL) {
         PyErr_NoMemory();
         return NULL;
     }
-    memset(odata, 0, odatalen);
 
     in = out = linelen = 0;
     while (in < datalen) {
@@ -1616,9 +1606,9 @@
 PyDoc_STRVAR(doc_binascii, "Conversion between binary data and ASCII");
 
 static int
-binascii_exec(PyObject *m) {
+binascii_exec(PyObject *module) {
     int result;
-    binascii_state *state = PyModule_GetState(m);
+    binascii_state *state = PyModule_GetState(module);
     if (state == NULL) {
         return -1;
     }
@@ -1627,8 +1617,10 @@
     if (state->Error == NULL) {
         return -1;
     }
-    result = PyModule_AddObject(m, "Error", state->Error);
+    Py_INCREF(state->Error);
+    result = PyModule_AddObject(module, "Error", state->Error);
     if (result == -1) {
+        Py_DECREF(state->Error);
         return -1;
     }
 
@@ -1636,8 +1628,10 @@
     if (state->Incomplete == NULL) {
         return -1;
     }
-    result = PyModule_AddObject(m, "Incomplete", state->Incomplete);
+    Py_INCREF(state->Incomplete);
+    result = PyModule_AddObject(module, "Incomplete", state->Incomplete);
     if (result == -1) {
+        Py_DECREF(state->Incomplete);
         return -1;
     }
 
@@ -1649,6 +1643,30 @@
     {0, NULL}
 };
 
+static int
+binascii_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    binascii_state *state = get_binascii_state(module);
+    Py_VISIT(state->Error);
+    Py_VISIT(state->Incomplete);
+    return 0;
+}
+
+static int
+binascii_clear(PyObject *module)
+{
+    binascii_state *state = get_binascii_state(module);
+    Py_CLEAR(state->Error);
+    Py_CLEAR(state->Incomplete);
+    return 0;
+}
+
+static void
+binascii_free(void *module)
+{
+    binascii_clear((PyObject *)module);
+}
+
 static struct PyModuleDef binasciimodule = {
     PyModuleDef_HEAD_INIT,
     "binascii",
@@ -1656,9 +1674,9 @@
     sizeof(binascii_state),
     binascii_module_methods,
     binascii_slots,
-    NULL,
-    NULL,
-    NULL
+    binascii_traverse,
+    binascii_clear,
+    binascii_free
 };
 
 PyMODINIT_FUNC
diff --git a/Modules/cjkcodecs/README b/Modules/cjkcodecs/README
index b2370bc..165ae7a 100644
--- a/Modules/cjkcodecs/README
+++ b/Modules/cjkcodecs/README
@@ -1,12 +1,10 @@
 To generate or modify mapping headers
 -------------------------------------
-Mapping headers are imported from CJKCodecs as pre-generated form.
-If you need to tweak or add something on it, please look at tools/
-subdirectory of CJKCodecs' distribution.
+Mapping headers are generated from Tools/unicode/genmap_*.py
 
 
 
-Notes on implmentation characteristics of each codecs
+Notes on implementation characteristics of each codecs
 -----------------------------------------------------
 
 1) Big5 codec
diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h
index b67f348..e41755b 100644
--- a/Modules/cjkcodecs/cjkcodecs.h
+++ b/Modules/cjkcodecs/cjkcodecs.h
@@ -72,7 +72,7 @@
 #define ENCODER(encoding)                                               \
     static Py_ssize_t encoding##_encode(                                \
         MultibyteCodec_State *state, const void *config,                \
-        int kind, void *data,                          \
+        int kind, const void *data,                                     \
         Py_ssize_t *inpos, Py_ssize_t inlen,                            \
         unsigned char **outbuf, Py_ssize_t outleft, int flags)
 #define ENCODER_RESET(encoding)                                         \
@@ -291,7 +291,7 @@
     if (codecobj == NULL)
         return NULL;
 
-    r = PyObject_CallFunctionObjArgs(cofunc, codecobj, NULL);
+    r = PyObject_CallOneArg(cofunc, codecobj);
     Py_DECREF(codecobj);
 
     return r;
diff --git a/Modules/cjkcodecs/mappings_cn.h b/Modules/cjkcodecs/mappings_cn.h
index 1f8c299..87ca0de 100644
--- a/Modules/cjkcodecs/mappings_cn.h
+++ b/Modules/cjkcodecs/mappings_cn.h
@@ -1,3 +1,4 @@
+// AUTO-GENERATED FILE FROM genmap_schinese.py: DO NOT EDIT
 static const ucs2_t __gb2312_decmap[7482] = {
 12288,12289,12290,12539,713,711,168,12291,12293,8213,65374,8214,8230,8216,
 8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,
diff --git a/Modules/cjkcodecs/mappings_jisx0213_pair.h b/Modules/cjkcodecs/mappings_jisx0213_pair.h
index 729e4bc..c96f201 100644
--- a/Modules/cjkcodecs/mappings_jisx0213_pair.h
+++ b/Modules/cjkcodecs/mappings_jisx0213_pair.h
@@ -1,3 +1,4 @@
+// AUTO-GENERATED FILE FROM genmap_japanese.py: DO NOT EDIT
 #define JISX0213_ENCPAIRS 46
 #ifdef EXTERN_JISX0213_PAIR
 static const struct widedbcs_index *jisx0213_pair_decmap;
diff --git a/Modules/cjkcodecs/mappings_jp.h b/Modules/cjkcodecs/mappings_jp.h
index c6dae3d..409aeae 100644
--- a/Modules/cjkcodecs/mappings_jp.h
+++ b/Modules/cjkcodecs/mappings_jp.h
@@ -1,3 +1,4 @@
+// AUTO-GENERATED FILE FROM genmap_japanese.py: DO NOT EDIT
 static const ucs2_t __jisx0208_decmap[6956] = {
 12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,
 65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,
diff --git a/Modules/cjkcodecs/mappings_kr.h b/Modules/cjkcodecs/mappings_kr.h
index 7e6fdd2..bb59acc 100644
--- a/Modules/cjkcodecs/mappings_kr.h
+++ b/Modules/cjkcodecs/mappings_kr.h
@@ -1,3 +1,4 @@
+// AUTO-GENERATED FILE FROM genmap_korean.py: DO NOT EDIT
 static const ucs2_t __ksx1001_decmap[8264] = {
 12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,
 8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,
@@ -3249,3 +3250,4 @@
 __cp949_encmap+32891,0,11},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{__cp949_encmap+
 32903,1,230},
 };
+
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 4a751f7..8640276 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -6,7 +6,7 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "multibytecodec.h"
 #include "clinic/multibytecodec.c.h"
 
@@ -81,7 +81,7 @@
 static PyObject *
 call_error_callback(PyObject *errors, PyObject *exc)
 {
-    PyObject *args, *cb, *r;
+    PyObject *cb, *r;
     const char *str;
 
     assert(PyUnicode_Check(errors));
@@ -92,17 +92,7 @@
     if (cb == NULL)
         return NULL;
 
-    args = PyTuple_New(1);
-    if (args == NULL) {
-        Py_DECREF(cb);
-        return NULL;
-    }
-
-    PyTuple_SET_ITEM(args, 0, exc);
-    Py_INCREF(exc);
-
-    r = PyObject_CallObject(cb, args);
-    Py_DECREF(args);
+    r = PyObject_CallOneArg(cb, exc);
     Py_DECREF(cb);
     return r;
 }
@@ -238,7 +228,7 @@
         Py_ssize_t r;
         Py_ssize_t inpos;
         int kind;
-        void *data;
+        const void *data;
 
         replchar = PyUnicode_FromOrdinal('?');
         if (replchar == NULL)
@@ -467,7 +457,7 @@
     Py_ssize_t finalsize, r = 0;
     Py_ssize_t datalen;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(text) < 0)
         return NULL;
@@ -1256,7 +1246,7 @@
     PyObject *buffer;
     PyLongObject *statelong;
     Py_ssize_t buffersize;
-    char *bufferstr;
+    const char *bufferstr;
     unsigned char statebytes[8];
 
     if (!PyArg_ParseTuple(state, "SO!;setstate(): illegal state argument",
@@ -1460,7 +1450,7 @@
             PyErr_Format(PyExc_TypeError,
                          "stream function returned a "
                          "non-bytes object (%.100s)",
-                         cres->ob_type->tp_name);
+                         Py_TYPE(cres)->tp_name);
             goto errorexit;
         }
 
@@ -1786,7 +1776,7 @@
     if (str == NULL)
         return -1;
 
-    wr = _PyObject_CallMethodIdObjArgs(self->stream, &PyId_write, str, NULL);
+    wr = _PyObject_CallMethodIdOneArg(self->stream, &PyId_write, str);
     Py_DECREF(str);
     if (wr == NULL)
         return -1;
@@ -1880,7 +1870,7 @@
     if (PyBytes_Size(pwrt) > 0) {
         PyObject *wr;
 
-        wr = _PyObject_CallMethodIdObjArgs(self->stream, &PyId_write, pwrt);
+        wr = _PyObject_CallMethodIdOneArg(self->stream, &PyId_write, pwrt);
         if (wr == NULL) {
             Py_DECREF(pwrt);
             return NULL;
@@ -2069,14 +2059,12 @@
 PyMODINIT_FUNC
 PyInit__multibytecodec(void)
 {
-    int i;
     PyObject *m;
     PyTypeObject *typelist[] = {
         &MultibyteIncrementalEncoder_Type,
         &MultibyteIncrementalDecoder_Type,
         &MultibyteStreamReader_Type,
-        &MultibyteStreamWriter_Type,
-        NULL
+        &MultibyteStreamWriter_Type
     };
 
     if (PyType_Ready(&MultibyteCodec_Type) < 0)
@@ -2086,16 +2074,13 @@
     if (m == NULL)
         return NULL;
 
-    for (i = 0; typelist[i] != NULL; i++) {
-        if (PyType_Ready(typelist[i]) < 0)
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(typelist); i++) {
+        if (PyModule_AddType(m, typelist[i]) < 0) {
             return NULL;
-        Py_INCREF(typelist[i]);
-        PyModule_AddObject(m, typelist[i]->tp_name,
-                           (PyObject *)typelist[i]);
+        }
     }
 
     if (PyErr_Occurred()) {
-        Py_FatalError("can't initialize the _multibytecodec module");
         Py_DECREF(m);
         m = NULL;
     }
diff --git a/Modules/cjkcodecs/multibytecodec.h b/Modules/cjkcodecs/multibytecodec.h
index 6d34534..5946821 100644
--- a/Modules/cjkcodecs/multibytecodec.h
+++ b/Modules/cjkcodecs/multibytecodec.h
@@ -30,7 +30,7 @@
 typedef int (*mbcodec_init)(const void *config);
 typedef Py_ssize_t (*mbencode_func)(MultibyteCodec_State *state,
                         const void *config,
-                        int kind, void *data,
+                        int kind, const void *data,
                         Py_ssize_t *inpos, Py_ssize_t inlen,
                         unsigned char **outbuf, Py_ssize_t outleft,
                         int flags);
@@ -65,7 +65,7 @@
     MultibyteCodec *codec;
 } MultibyteCodecObject;
 
-#define MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)
+#define MultibyteCodec_Check(op) Py_IS_TYPE((op), &MultibyteCodec_Type)
 
 #define _MultibyteStatefulCodec_HEAD            \
     PyObject_HEAD                               \
diff --git a/Modules/clinic/_asynciomodule.c.h b/Modules/clinic/_asynciomodule.c.h
index 17eb773..a071efc 100644
--- a/Modules/clinic/_asynciomodule.c.h
+++ b/Modules/clinic/_asynciomodule.c.h
@@ -174,7 +174,7 @@
     {"remove_done_callback", (PyCFunction)_asyncio_Future_remove_done_callback, METH_O, _asyncio_Future_remove_done_callback__doc__},
 
 PyDoc_STRVAR(_asyncio_Future_cancel__doc__,
-"cancel($self, /)\n"
+"cancel($self, /, msg=None)\n"
 "--\n"
 "\n"
 "Cancel the future and schedule callbacks.\n"
@@ -184,15 +184,34 @@
 "return True.");
 
 #define _ASYNCIO_FUTURE_CANCEL_METHODDEF    \
-    {"cancel", (PyCFunction)_asyncio_Future_cancel, METH_NOARGS, _asyncio_Future_cancel__doc__},
+    {"cancel", (PyCFunction)(void(*)(void))_asyncio_Future_cancel, METH_FASTCALL|METH_KEYWORDS, _asyncio_Future_cancel__doc__},
 
 static PyObject *
-_asyncio_Future_cancel_impl(FutureObj *self);
+_asyncio_Future_cancel_impl(FutureObj *self, PyObject *msg);
 
 static PyObject *
-_asyncio_Future_cancel(FutureObj *self, PyObject *Py_UNUSED(ignored))
+_asyncio_Future_cancel(FutureObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
-    return _asyncio_Future_cancel_impl(self);
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"msg", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "cancel", 0};
+    PyObject *argsbuf[1];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *msg = Py_None;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    msg = args[0];
+skip_optional_pos:
+    return_value = _asyncio_Future_cancel_impl(self, msg);
+
+exit:
+    return return_value;
 }
 
 PyDoc_STRVAR(_asyncio_Future_cancelled__doc__,
@@ -252,6 +271,27 @@
     return _asyncio_Future_get_loop_impl(self);
 }
 
+PyDoc_STRVAR(_asyncio_Future__make_cancelled_error__doc__,
+"_make_cancelled_error($self, /)\n"
+"--\n"
+"\n"
+"Create the CancelledError to raise if the Future is cancelled.\n"
+"\n"
+"This should only be called once when handling a cancellation since\n"
+"it erases the context exception value.");
+
+#define _ASYNCIO_FUTURE__MAKE_CANCELLED_ERROR_METHODDEF    \
+    {"_make_cancelled_error", (PyCFunction)_asyncio_Future__make_cancelled_error, METH_NOARGS, _asyncio_Future__make_cancelled_error__doc__},
+
+static PyObject *
+_asyncio_Future__make_cancelled_error_impl(FutureObj *self);
+
+static PyObject *
+_asyncio_Future__make_cancelled_error(FutureObj *self, PyObject *Py_UNUSED(ignored))
+{
+    return _asyncio_Future__make_cancelled_error_impl(self);
+}
+
 PyDoc_STRVAR(_asyncio_Future__repr_info__doc__,
 "_repr_info($self, /)\n"
 "--\n"
@@ -315,84 +355,25 @@
     return return_value;
 }
 
-PyDoc_STRVAR(_asyncio_Task_current_task__doc__,
-"current_task($type, /, loop=None)\n"
+PyDoc_STRVAR(_asyncio_Task__make_cancelled_error__doc__,
+"_make_cancelled_error($self, /)\n"
 "--\n"
 "\n"
-"Return the currently running task in an event loop or None.\n"
+"Create the CancelledError to raise if the Task is cancelled.\n"
 "\n"
-"By default the current task for the current event loop is returned.\n"
-"\n"
-"None is returned when called not in the context of a Task.");
+"This should only be called once when handling a cancellation since\n"
+"it erases the context exception value.");
 
-#define _ASYNCIO_TASK_CURRENT_TASK_METHODDEF    \
-    {"current_task", (PyCFunction)(void(*)(void))_asyncio_Task_current_task, METH_FASTCALL|METH_KEYWORDS|METH_CLASS, _asyncio_Task_current_task__doc__},
+#define _ASYNCIO_TASK__MAKE_CANCELLED_ERROR_METHODDEF    \
+    {"_make_cancelled_error", (PyCFunction)_asyncio_Task__make_cancelled_error, METH_NOARGS, _asyncio_Task__make_cancelled_error__doc__},
 
 static PyObject *
-_asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop);
+_asyncio_Task__make_cancelled_error_impl(TaskObj *self);
 
 static PyObject *
-_asyncio_Task_current_task(PyTypeObject *type, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+_asyncio_Task__make_cancelled_error(TaskObj *self, PyObject *Py_UNUSED(ignored))
 {
-    PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"loop", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "current_task", 0};
-    PyObject *argsbuf[1];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
-    PyObject *loop = Py_None;
-
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
-    if (!args) {
-        goto exit;
-    }
-    if (!noptargs) {
-        goto skip_optional_pos;
-    }
-    loop = args[0];
-skip_optional_pos:
-    return_value = _asyncio_Task_current_task_impl(type, loop);
-
-exit:
-    return return_value;
-}
-
-PyDoc_STRVAR(_asyncio_Task_all_tasks__doc__,
-"all_tasks($type, /, loop=None)\n"
-"--\n"
-"\n"
-"Return a set of all tasks for an event loop.\n"
-"\n"
-"By default all tasks for the current event loop are returned.");
-
-#define _ASYNCIO_TASK_ALL_TASKS_METHODDEF    \
-    {"all_tasks", (PyCFunction)(void(*)(void))_asyncio_Task_all_tasks, METH_FASTCALL|METH_KEYWORDS|METH_CLASS, _asyncio_Task_all_tasks__doc__},
-
-static PyObject *
-_asyncio_Task_all_tasks_impl(PyTypeObject *type, PyObject *loop);
-
-static PyObject *
-_asyncio_Task_all_tasks(PyTypeObject *type, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
-{
-    PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"loop", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "all_tasks", 0};
-    PyObject *argsbuf[1];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
-    PyObject *loop = Py_None;
-
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
-    if (!args) {
-        goto exit;
-    }
-    if (!noptargs) {
-        goto skip_optional_pos;
-    }
-    loop = args[0];
-skip_optional_pos:
-    return_value = _asyncio_Task_all_tasks_impl(type, loop);
-
-exit:
-    return return_value;
+    return _asyncio_Task__make_cancelled_error_impl(self);
 }
 
 PyDoc_STRVAR(_asyncio_Task__repr_info__doc__,
@@ -413,7 +394,7 @@
 }
 
 PyDoc_STRVAR(_asyncio_Task_cancel__doc__,
-"cancel($self, /)\n"
+"cancel($self, /, msg=None)\n"
 "--\n"
 "\n"
 "Request that this task cancel itself.\n"
@@ -436,15 +417,34 @@
 "was not called).");
 
 #define _ASYNCIO_TASK_CANCEL_METHODDEF    \
-    {"cancel", (PyCFunction)_asyncio_Task_cancel, METH_NOARGS, _asyncio_Task_cancel__doc__},
+    {"cancel", (PyCFunction)(void(*)(void))_asyncio_Task_cancel, METH_FASTCALL|METH_KEYWORDS, _asyncio_Task_cancel__doc__},
 
 static PyObject *
-_asyncio_Task_cancel_impl(TaskObj *self);
+_asyncio_Task_cancel_impl(TaskObj *self, PyObject *msg);
 
 static PyObject *
-_asyncio_Task_cancel(TaskObj *self, PyObject *Py_UNUSED(ignored))
+_asyncio_Task_cancel(TaskObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
-    return _asyncio_Task_cancel_impl(self);
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"msg", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "cancel", 0};
+    PyObject *argsbuf[1];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *msg = Py_None;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    msg = args[0];
+skip_optional_pos:
+    return_value = _asyncio_Task_cancel_impl(self, msg);
+
+exit:
+    return return_value;
 }
 
 PyDoc_STRVAR(_asyncio_Task_get_stack__doc__,
@@ -832,4 +832,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=585ba1f8de5b4103 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=d0fc522bcbff9d61 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_bisectmodule.c.h b/Modules/clinic/_bisectmodule.c.h
new file mode 100644
index 0000000..80ab704
--- /dev/null
+++ b/Modules/clinic/_bisectmodule.c.h
@@ -0,0 +1,306 @@
+/*[clinic input]
+preserve
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_bisect_bisect_right__doc__,
+"bisect_right($module, /, a, x, lo=0, hi=None)\n"
+"--\n"
+"\n"
+"Return the index where to insert item x in list a, assuming a is sorted.\n"
+"\n"
+"The return value i is such that all e in a[:i] have e <= x, and all e in\n"
+"a[i:] have e > x.  So if x already appears in the list, i points just\n"
+"beyond the rightmost x already there\n"
+"\n"
+"Optional args lo (default 0) and hi (default len(a)) bound the\n"
+"slice of a to be searched.");
+
+#define _BISECT_BISECT_RIGHT_METHODDEF    \
+    {"bisect_right", (PyCFunction)(void(*)(void))_bisect_bisect_right, METH_FASTCALL|METH_KEYWORDS, _bisect_bisect_right__doc__},
+
+static Py_ssize_t
+_bisect_bisect_right_impl(PyObject *module, PyObject *a, PyObject *x,
+                          Py_ssize_t lo, Py_ssize_t hi);
+
+static PyObject *
+_bisect_bisect_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"a", "x", "lo", "hi", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "bisect_right", 0};
+    PyObject *argsbuf[4];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
+    PyObject *a;
+    PyObject *x;
+    Py_ssize_t lo = 0;
+    Py_ssize_t hi = -1;
+    Py_ssize_t _return_value;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    a = args[0];
+    x = args[1];
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[2]) {
+        if (PyFloat_Check(args[2])) {
+            PyErr_SetString(PyExc_TypeError,
+                            "integer argument expected, got float" );
+            goto exit;
+        }
+        {
+            Py_ssize_t ival = -1;
+            PyObject *iobj = PyNumber_Index(args[2]);
+            if (iobj != NULL) {
+                ival = PyLong_AsSsize_t(iobj);
+                Py_DECREF(iobj);
+            }
+            if (ival == -1 && PyErr_Occurred()) {
+                goto exit;
+            }
+            lo = ival;
+        }
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
+        goto exit;
+    }
+skip_optional_pos:
+    _return_value = _bisect_bisect_right_impl(module, a, x, lo, hi);
+    if ((_return_value == -1) && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = PyLong_FromSsize_t(_return_value);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_bisect_insort_right__doc__,
+"insort_right($module, /, a, x, lo=0, hi=None)\n"
+"--\n"
+"\n"
+"Insert item x in list a, and keep it sorted assuming a is sorted.\n"
+"\n"
+"If x is already in a, insert it to the right of the rightmost x.\n"
+"\n"
+"Optional args lo (default 0) and hi (default len(a)) bound the\n"
+"slice of a to be searched.");
+
+#define _BISECT_INSORT_RIGHT_METHODDEF    \
+    {"insort_right", (PyCFunction)(void(*)(void))_bisect_insort_right, METH_FASTCALL|METH_KEYWORDS, _bisect_insort_right__doc__},
+
+static PyObject *
+_bisect_insort_right_impl(PyObject *module, PyObject *a, PyObject *x,
+                          Py_ssize_t lo, Py_ssize_t hi);
+
+static PyObject *
+_bisect_insort_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"a", "x", "lo", "hi", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "insort_right", 0};
+    PyObject *argsbuf[4];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
+    PyObject *a;
+    PyObject *x;
+    Py_ssize_t lo = 0;
+    Py_ssize_t hi = -1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    a = args[0];
+    x = args[1];
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[2]) {
+        if (PyFloat_Check(args[2])) {
+            PyErr_SetString(PyExc_TypeError,
+                            "integer argument expected, got float" );
+            goto exit;
+        }
+        {
+            Py_ssize_t ival = -1;
+            PyObject *iobj = PyNumber_Index(args[2]);
+            if (iobj != NULL) {
+                ival = PyLong_AsSsize_t(iobj);
+                Py_DECREF(iobj);
+            }
+            if (ival == -1 && PyErr_Occurred()) {
+                goto exit;
+            }
+            lo = ival;
+        }
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
+        goto exit;
+    }
+skip_optional_pos:
+    return_value = _bisect_insort_right_impl(module, a, x, lo, hi);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_bisect_bisect_left__doc__,
+"bisect_left($module, /, a, x, lo=0, hi=None)\n"
+"--\n"
+"\n"
+"Return the index where to insert item x in list a, assuming a is sorted.\n"
+"\n"
+"The return value i is such that all e in a[:i] have e < x, and all e in\n"
+"a[i:] have e >= x.  So if x already appears in the list, i points just\n"
+"before the leftmost x already there.\n"
+"\n"
+"Optional args lo (default 0) and hi (default len(a)) bound the\n"
+"slice of a to be searched.");
+
+#define _BISECT_BISECT_LEFT_METHODDEF    \
+    {"bisect_left", (PyCFunction)(void(*)(void))_bisect_bisect_left, METH_FASTCALL|METH_KEYWORDS, _bisect_bisect_left__doc__},
+
+static Py_ssize_t
+_bisect_bisect_left_impl(PyObject *module, PyObject *a, PyObject *x,
+                         Py_ssize_t lo, Py_ssize_t hi);
+
+static PyObject *
+_bisect_bisect_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"a", "x", "lo", "hi", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "bisect_left", 0};
+    PyObject *argsbuf[4];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
+    PyObject *a;
+    PyObject *x;
+    Py_ssize_t lo = 0;
+    Py_ssize_t hi = -1;
+    Py_ssize_t _return_value;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    a = args[0];
+    x = args[1];
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[2]) {
+        if (PyFloat_Check(args[2])) {
+            PyErr_SetString(PyExc_TypeError,
+                            "integer argument expected, got float" );
+            goto exit;
+        }
+        {
+            Py_ssize_t ival = -1;
+            PyObject *iobj = PyNumber_Index(args[2]);
+            if (iobj != NULL) {
+                ival = PyLong_AsSsize_t(iobj);
+                Py_DECREF(iobj);
+            }
+            if (ival == -1 && PyErr_Occurred()) {
+                goto exit;
+            }
+            lo = ival;
+        }
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
+        goto exit;
+    }
+skip_optional_pos:
+    _return_value = _bisect_bisect_left_impl(module, a, x, lo, hi);
+    if ((_return_value == -1) && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = PyLong_FromSsize_t(_return_value);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_bisect_insort_left__doc__,
+"insort_left($module, /, a, x, lo=0, hi=None)\n"
+"--\n"
+"\n"
+"Insert item x in list a, and keep it sorted assuming a is sorted.\n"
+"\n"
+"If x is already in a, insert it to the left of the leftmost x.\n"
+"\n"
+"Optional args lo (default 0) and hi (default len(a)) bound the\n"
+"slice of a to be searched.");
+
+#define _BISECT_INSORT_LEFT_METHODDEF    \
+    {"insort_left", (PyCFunction)(void(*)(void))_bisect_insort_left, METH_FASTCALL|METH_KEYWORDS, _bisect_insort_left__doc__},
+
+static PyObject *
+_bisect_insort_left_impl(PyObject *module, PyObject *a, PyObject *x,
+                         Py_ssize_t lo, Py_ssize_t hi);
+
+static PyObject *
+_bisect_insort_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"a", "x", "lo", "hi", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "insort_left", 0};
+    PyObject *argsbuf[4];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
+    PyObject *a;
+    PyObject *x;
+    Py_ssize_t lo = 0;
+    Py_ssize_t hi = -1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    a = args[0];
+    x = args[1];
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[2]) {
+        if (PyFloat_Check(args[2])) {
+            PyErr_SetString(PyExc_TypeError,
+                            "integer argument expected, got float" );
+            goto exit;
+        }
+        {
+            Py_ssize_t ival = -1;
+            PyObject *iobj = PyNumber_Index(args[2]);
+            if (iobj != NULL) {
+                ival = PyLong_AsSsize_t(iobj);
+                Py_DECREF(iobj);
+            }
+            if (ival == -1 && PyErr_Occurred()) {
+                goto exit;
+            }
+            lo = ival;
+        }
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
+        goto exit;
+    }
+skip_optional_pos:
+    return_value = _bisect_insort_left_impl(module, a, x, lo, hi);
+
+exit:
+    return return_value;
+}
+/*[clinic end generated code: output=bcbd6c77331a08f0 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h
index ac826bd..0eb6280 100644
--- a/Modules/clinic/_bz2module.c.h
+++ b/Modules/clinic/_bz2module.c.h
@@ -85,7 +85,7 @@
     int return_value = -1;
     int compresslevel = 9;
 
-    if ((Py_TYPE(self) == &BZ2Compressor_Type) &&
+    if (Py_IS_TYPE(self, &BZ2Compressor_Type) &&
         !_PyArg_NoKeywords("BZ2Compressor", kwargs)) {
         goto exit;
     }
@@ -207,11 +207,11 @@
 {
     int return_value = -1;
 
-    if ((Py_TYPE(self) == &BZ2Decompressor_Type) &&
+    if (Py_IS_TYPE(self, &BZ2Decompressor_Type) &&
         !_PyArg_NoPositional("BZ2Decompressor", args)) {
         goto exit;
     }
-    if ((Py_TYPE(self) == &BZ2Decompressor_Type) &&
+    if (Py_IS_TYPE(self, &BZ2Decompressor_Type) &&
         !_PyArg_NoKeywords("BZ2Decompressor", kwargs)) {
         goto exit;
     }
@@ -220,4 +220,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=ec3d1b3652c98823 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=3f3f1e788fe28ee1 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h
index ad93e6a..50d7f21 100644
--- a/Modules/clinic/_cursesmodule.c.h
+++ b/Modules/clinic/_cursesmodule.c.h
@@ -3040,6 +3040,144 @@
     return return_value;
 }
 
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102)
+
+PyDoc_STRVAR(_curses_get_escdelay__doc__,
+"get_escdelay($module, /)\n"
+"--\n"
+"\n"
+"Gets the curses ESCDELAY setting.\n"
+"\n"
+"Gets the number of milliseconds to wait after reading an escape character,\n"
+"to distinguish between an individual escape character entered on the\n"
+"keyboard from escape sequences sent by cursor and function keys.");
+
+#define _CURSES_GET_ESCDELAY_METHODDEF    \
+    {"get_escdelay", (PyCFunction)_curses_get_escdelay, METH_NOARGS, _curses_get_escdelay__doc__},
+
+static PyObject *
+_curses_get_escdelay_impl(PyObject *module);
+
+static PyObject *
+_curses_get_escdelay(PyObject *module, PyObject *Py_UNUSED(ignored))
+{
+    return _curses_get_escdelay_impl(module);
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102) */
+
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102)
+
+PyDoc_STRVAR(_curses_set_escdelay__doc__,
+"set_escdelay($module, ms, /)\n"
+"--\n"
+"\n"
+"Sets the curses ESCDELAY setting.\n"
+"\n"
+"  ms\n"
+"    length of the delay in milliseconds.\n"
+"\n"
+"Sets the number of milliseconds to wait after reading an escape character,\n"
+"to distinguish between an individual escape character entered on the\n"
+"keyboard from escape sequences sent by cursor and function keys.");
+
+#define _CURSES_SET_ESCDELAY_METHODDEF    \
+    {"set_escdelay", (PyCFunction)_curses_set_escdelay, METH_O, _curses_set_escdelay__doc__},
+
+static PyObject *
+_curses_set_escdelay_impl(PyObject *module, int ms);
+
+static PyObject *
+_curses_set_escdelay(PyObject *module, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    int ms;
+
+    if (PyFloat_Check(arg)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    ms = _PyLong_AsInt(arg);
+    if (ms == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = _curses_set_escdelay_impl(module, ms);
+
+exit:
+    return return_value;
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102) */
+
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102)
+
+PyDoc_STRVAR(_curses_get_tabsize__doc__,
+"get_tabsize($module, /)\n"
+"--\n"
+"\n"
+"Gets the curses TABSIZE setting.\n"
+"\n"
+"Gets the number of columns used by the curses library when converting a tab\n"
+"character to spaces as it adds the tab to a window.");
+
+#define _CURSES_GET_TABSIZE_METHODDEF    \
+    {"get_tabsize", (PyCFunction)_curses_get_tabsize, METH_NOARGS, _curses_get_tabsize__doc__},
+
+static PyObject *
+_curses_get_tabsize_impl(PyObject *module);
+
+static PyObject *
+_curses_get_tabsize(PyObject *module, PyObject *Py_UNUSED(ignored))
+{
+    return _curses_get_tabsize_impl(module);
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102) */
+
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102)
+
+PyDoc_STRVAR(_curses_set_tabsize__doc__,
+"set_tabsize($module, size, /)\n"
+"--\n"
+"\n"
+"Sets the curses TABSIZE setting.\n"
+"\n"
+"  size\n"
+"    rendered cell width of a tab character.\n"
+"\n"
+"Sets the number of columns used by the curses library when converting a tab\n"
+"character to spaces as it adds the tab to a window.");
+
+#define _CURSES_SET_TABSIZE_METHODDEF    \
+    {"set_tabsize", (PyCFunction)_curses_set_tabsize, METH_O, _curses_set_tabsize__doc__},
+
+static PyObject *
+_curses_set_tabsize_impl(PyObject *module, int size);
+
+static PyObject *
+_curses_set_tabsize(PyObject *module, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    int size;
+
+    if (PyFloat_Check(arg)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    size = _PyLong_AsInt(arg);
+    if (size == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = _curses_set_tabsize_impl(module, size);
+
+exit:
+    return return_value;
+}
+
+#endif /* (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20081102) */
+
 PyDoc_STRVAR(_curses_intrflush__doc__,
 "intrflush($module, flag, /)\n"
 "--\n"
@@ -3799,23 +3937,13 @@
 #define _CURSES_UPDATE_LINES_COLS_METHODDEF    \
     {"update_lines_cols", (PyCFunction)_curses_update_lines_cols, METH_NOARGS, _curses_update_lines_cols__doc__},
 
-static int
+static PyObject *
 _curses_update_lines_cols_impl(PyObject *module);
 
 static PyObject *
 _curses_update_lines_cols(PyObject *module, PyObject *Py_UNUSED(ignored))
 {
-    PyObject *return_value = NULL;
-    int _return_value;
-
-    _return_value = _curses_update_lines_cols_impl(module);
-    if ((_return_value == -1) && PyErr_Occurred()) {
-        goto exit;
-    }
-    return_value = PyLong_FromLong((long)_return_value);
-
-exit:
-    return return_value;
+    return _curses_update_lines_cols_impl(module);
 }
 
 #endif /* (defined(HAVE_CURSES_RESIZETERM) || defined(HAVE_CURSES_RESIZE_TERM)) */
@@ -4526,6 +4654,22 @@
     #define _CURSES_HAS_KEY_METHODDEF
 #endif /* !defined(_CURSES_HAS_KEY_METHODDEF) */
 
+#ifndef _CURSES_GET_ESCDELAY_METHODDEF
+    #define _CURSES_GET_ESCDELAY_METHODDEF
+#endif /* !defined(_CURSES_GET_ESCDELAY_METHODDEF) */
+
+#ifndef _CURSES_SET_ESCDELAY_METHODDEF
+    #define _CURSES_SET_ESCDELAY_METHODDEF
+#endif /* !defined(_CURSES_SET_ESCDELAY_METHODDEF) */
+
+#ifndef _CURSES_GET_TABSIZE_METHODDEF
+    #define _CURSES_GET_TABSIZE_METHODDEF
+#endif /* !defined(_CURSES_GET_TABSIZE_METHODDEF) */
+
+#ifndef _CURSES_SET_TABSIZE_METHODDEF
+    #define _CURSES_SET_TABSIZE_METHODDEF
+#endif /* !defined(_CURSES_SET_TABSIZE_METHODDEF) */
+
 #ifndef _CURSES_IS_TERM_RESIZED_METHODDEF
     #define _CURSES_IS_TERM_RESIZED_METHODDEF
 #endif /* !defined(_CURSES_IS_TERM_RESIZED_METHODDEF) */
@@ -4569,4 +4713,4 @@
 #ifndef _CURSES_USE_DEFAULT_COLORS_METHODDEF
     #define _CURSES_USE_DEFAULT_COLORS_METHODDEF
 #endif /* !defined(_CURSES_USE_DEFAULT_COLORS_METHODDEF) */
-/*[clinic end generated code: output=e5b3502f1d38dff0 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b53652f8acafd817 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_datetimemodule.c.h b/Modules/clinic/_datetimemodule.c.h
index 447036c..973a4ea 100644
--- a/Modules/clinic/_datetimemodule.c.h
+++ b/Modules/clinic/_datetimemodule.c.h
@@ -14,6 +14,60 @@
 #define DATETIME_DATE_FROMTIMESTAMP_METHODDEF    \
     {"fromtimestamp", (PyCFunction)datetime_date_fromtimestamp, METH_O|METH_CLASS, datetime_date_fromtimestamp__doc__},
 
+static PyObject *
+iso_calendar_date_new_impl(PyTypeObject *type, int year, int week,
+                           int weekday);
+
+static PyObject *
+iso_calendar_date_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"year", "week", "weekday", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "IsoCalendarDate", 0};
+    PyObject *argsbuf[3];
+    PyObject * const *fastargs;
+    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
+    int year;
+    int week;
+    int weekday;
+
+    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 3, 3, 0, argsbuf);
+    if (!fastargs) {
+        goto exit;
+    }
+    if (PyFloat_Check(fastargs[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    year = _PyLong_AsInt(fastargs[0]);
+    if (year == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (PyFloat_Check(fastargs[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    week = _PyLong_AsInt(fastargs[1]);
+    if (week == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (PyFloat_Check(fastargs[2])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    weekday = _PyLong_AsInt(fastargs[2]);
+    if (weekday == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = iso_calendar_date_new_impl(type, year, week, weekday);
+
+exit:
+    return return_value;
+}
+
 PyDoc_STRVAR(datetime_datetime_now__doc__,
 "now($type, /, tz=None)\n"
 "--\n"
@@ -55,4 +109,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=aae916ab728ca85b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=5e17549f29a439a5 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h
index 0bc4bb5..825416f 100644
--- a/Modules/clinic/_elementtree.c.h
+++ b/Modules/clinic/_elementtree.c.h
@@ -355,23 +355,6 @@
     return return_value;
 }
 
-PyDoc_STRVAR(_elementtree_Element_getchildren__doc__,
-"getchildren($self, /)\n"
-"--\n"
-"\n");
-
-#define _ELEMENTTREE_ELEMENT_GETCHILDREN_METHODDEF    \
-    {"getchildren", (PyCFunction)_elementtree_Element_getchildren, METH_NOARGS, _elementtree_Element_getchildren__doc__},
-
-static PyObject *
-_elementtree_Element_getchildren_impl(ElementObject *self);
-
-static PyObject *
-_elementtree_Element_getchildren(ElementObject *self, PyObject *Py_UNUSED(ignored))
-{
-    return _elementtree_Element_getchildren_impl(self);
-}
-
 PyDoc_STRVAR(_elementtree_Element_iter__doc__,
 "iter($self, /, tag=None)\n"
 "--\n"
@@ -408,42 +391,6 @@
     return return_value;
 }
 
-PyDoc_STRVAR(_elementtree_Element_getiterator__doc__,
-"getiterator($self, /, tag=None)\n"
-"--\n"
-"\n");
-
-#define _ELEMENTTREE_ELEMENT_GETITERATOR_METHODDEF    \
-    {"getiterator", (PyCFunction)(void(*)(void))_elementtree_Element_getiterator, METH_FASTCALL|METH_KEYWORDS, _elementtree_Element_getiterator__doc__},
-
-static PyObject *
-_elementtree_Element_getiterator_impl(ElementObject *self, PyObject *tag);
-
-static PyObject *
-_elementtree_Element_getiterator(ElementObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
-{
-    PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"tag", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "getiterator", 0};
-    PyObject *argsbuf[1];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
-    PyObject *tag = Py_None;
-
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
-    if (!args) {
-        goto exit;
-    }
-    if (!noptargs) {
-        goto skip_optional_pos;
-    }
-    tag = args[0];
-skip_optional_pos:
-    return_value = _elementtree_Element_getiterator_impl(self, tag);
-
-exit:
-    return return_value;
-}
-
 PyDoc_STRVAR(_elementtree_Element_itertext__doc__,
 "itertext($self, /)\n"
 "--\n"
@@ -568,6 +515,10 @@
         goto exit;
     }
     tag = args[0];
+    if (!PyDict_Check(args[1])) {
+        _PyArg_BadArgument("makeelement", "argument 2", "dict", args[1]);
+        goto exit;
+    }
     attrib = args[1];
     return_value = _elementtree_Element_makeelement_impl(self, tag, attrib);
 
@@ -814,7 +765,7 @@
 }
 
 PyDoc_STRVAR(_elementtree_TreeBuilder_start__doc__,
-"start($self, tag, attrs=None, /)\n"
+"start($self, tag, attrs, /)\n"
 "--\n"
 "\n");
 
@@ -830,17 +781,17 @@
 {
     PyObject *return_value = NULL;
     PyObject *tag;
-    PyObject *attrs = Py_None;
+    PyObject *attrs;
 
-    if (!_PyArg_CheckPositional("start", nargs, 1, 2)) {
+    if (!_PyArg_CheckPositional("start", nargs, 2, 2)) {
         goto exit;
     }
     tag = args[0];
-    if (nargs < 2) {
-        goto skip_optional;
+    if (!PyDict_Check(args[1])) {
+        _PyArg_BadArgument("start", "argument 2", "dict", args[1]);
+        goto exit;
     }
     attrs = args[1];
-skip_optional:
     return_value = _elementtree_TreeBuilder_start_impl(self, tag, attrs);
 
 exit:
@@ -969,4 +920,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=1443ed7bb9f9e03e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b7f6a32462fc42a9 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_hashopenssl.c.h b/Modules/clinic/_hashopenssl.c.h
index 9aaea47..68aa765 100644
--- a/Modules/clinic/_hashopenssl.c.h
+++ b/Modules/clinic/_hashopenssl.c.h
@@ -65,8 +65,112 @@
 #define EVP_UPDATE_METHODDEF    \
     {"update", (PyCFunction)EVP_update, METH_O, EVP_update__doc__},
 
+#if defined(PY_OPENSSL_HAS_SHAKE)
+
+PyDoc_STRVAR(EVPXOF_digest__doc__,
+"digest($self, /, length)\n"
+"--\n"
+"\n"
+"Return the digest value as a bytes object.");
+
+#define EVPXOF_DIGEST_METHODDEF    \
+    {"digest", (PyCFunction)(void(*)(void))EVPXOF_digest, METH_FASTCALL|METH_KEYWORDS, EVPXOF_digest__doc__},
+
+static PyObject *
+EVPXOF_digest_impl(EVPobject *self, Py_ssize_t length);
+
+static PyObject *
+EVPXOF_digest(EVPobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"length", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "digest", 0};
+    PyObject *argsbuf[1];
+    Py_ssize_t length;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    {
+        Py_ssize_t ival = -1;
+        PyObject *iobj = PyNumber_Index(args[0]);
+        if (iobj != NULL) {
+            ival = PyLong_AsSsize_t(iobj);
+            Py_DECREF(iobj);
+        }
+        if (ival == -1 && PyErr_Occurred()) {
+            goto exit;
+        }
+        length = ival;
+    }
+    return_value = EVPXOF_digest_impl(self, length);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
+
+#if defined(PY_OPENSSL_HAS_SHAKE)
+
+PyDoc_STRVAR(EVPXOF_hexdigest__doc__,
+"hexdigest($self, /, length)\n"
+"--\n"
+"\n"
+"Return the digest value as a string of hexadecimal digits.");
+
+#define EVPXOF_HEXDIGEST_METHODDEF    \
+    {"hexdigest", (PyCFunction)(void(*)(void))EVPXOF_hexdigest, METH_FASTCALL|METH_KEYWORDS, EVPXOF_hexdigest__doc__},
+
+static PyObject *
+EVPXOF_hexdigest_impl(EVPobject *self, Py_ssize_t length);
+
+static PyObject *
+EVPXOF_hexdigest(EVPobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"length", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "hexdigest", 0};
+    PyObject *argsbuf[1];
+    Py_ssize_t length;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    {
+        Py_ssize_t ival = -1;
+        PyObject *iobj = PyNumber_Index(args[0]);
+        if (iobj != NULL) {
+            ival = PyLong_AsSsize_t(iobj);
+            Py_DECREF(iobj);
+        }
+        if (ival == -1 && PyErr_Occurred()) {
+            goto exit;
+        }
+        length = ival;
+    }
+    return_value = EVPXOF_hexdigest_impl(self, length);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
+
 PyDoc_STRVAR(EVP_new__doc__,
-"new($module, /, name, string=b\'\')\n"
+"new($module, /, name, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new hash object using the named algorithm.\n"
@@ -80,18 +184,20 @@
     {"new", (PyCFunction)(void(*)(void))EVP_new, METH_FASTCALL|METH_KEYWORDS, EVP_new__doc__},
 
 static PyObject *
-EVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj);
+EVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj,
+             int usedforsecurity);
 
 static PyObject *
 EVP_new(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"name", "string", NULL};
+    static const char * const _keywords[] = {"name", "string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "new", 0};
-    PyObject *argsbuf[2];
+    PyObject *argsbuf[3];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
     PyObject *name_obj;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
     if (!args) {
@@ -101,16 +207,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[1];
+    if (args[1]) {
+        data_obj = args[1];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = EVP_new_impl(module, name_obj, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[2]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = EVP_new_impl(module, name_obj, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_hashlib_openssl_md5__doc__,
-"openssl_md5($module, /, string=b\'\')\n"
+"openssl_md5($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Returns a md5 hash object; optionally initialized with a string");
@@ -119,17 +238,19 @@
     {"openssl_md5", (PyCFunction)(void(*)(void))_hashlib_openssl_md5, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_md5__doc__},
 
 static PyObject *
-_hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj);
+_hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj,
+                          int usedforsecurity);
 
 static PyObject *
 _hashlib_openssl_md5(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_md5", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -138,16 +259,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[0];
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _hashlib_openssl_md5_impl(module, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_md5_impl(module, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_hashlib_openssl_sha1__doc__,
-"openssl_sha1($module, /, string=b\'\')\n"
+"openssl_sha1($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Returns a sha1 hash object; optionally initialized with a string");
@@ -156,17 +290,19 @@
     {"openssl_sha1", (PyCFunction)(void(*)(void))_hashlib_openssl_sha1, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha1__doc__},
 
 static PyObject *
-_hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj);
+_hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj,
+                           int usedforsecurity);
 
 static PyObject *
 _hashlib_openssl_sha1(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha1", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -175,16 +311,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[0];
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _hashlib_openssl_sha1_impl(module, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha1_impl(module, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_hashlib_openssl_sha224__doc__,
-"openssl_sha224($module, /, string=b\'\')\n"
+"openssl_sha224($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Returns a sha224 hash object; optionally initialized with a string");
@@ -193,17 +342,19 @@
     {"openssl_sha224", (PyCFunction)(void(*)(void))_hashlib_openssl_sha224, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha224__doc__},
 
 static PyObject *
-_hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj);
+_hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity);
 
 static PyObject *
 _hashlib_openssl_sha224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha224", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -212,16 +363,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[0];
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _hashlib_openssl_sha224_impl(module, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha224_impl(module, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_hashlib_openssl_sha256__doc__,
-"openssl_sha256($module, /, string=b\'\')\n"
+"openssl_sha256($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Returns a sha256 hash object; optionally initialized with a string");
@@ -230,17 +394,19 @@
     {"openssl_sha256", (PyCFunction)(void(*)(void))_hashlib_openssl_sha256, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha256__doc__},
 
 static PyObject *
-_hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj);
+_hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity);
 
 static PyObject *
 _hashlib_openssl_sha256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha256", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -249,16 +415,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[0];
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _hashlib_openssl_sha256_impl(module, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha256_impl(module, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_hashlib_openssl_sha384__doc__,
-"openssl_sha384($module, /, string=b\'\')\n"
+"openssl_sha384($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Returns a sha384 hash object; optionally initialized with a string");
@@ -267,17 +446,19 @@
     {"openssl_sha384", (PyCFunction)(void(*)(void))_hashlib_openssl_sha384, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha384__doc__},
 
 static PyObject *
-_hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj);
+_hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity);
 
 static PyObject *
 _hashlib_openssl_sha384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha384", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -286,16 +467,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[0];
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _hashlib_openssl_sha384_impl(module, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha384_impl(module, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_hashlib_openssl_sha512__doc__,
-"openssl_sha512($module, /, string=b\'\')\n"
+"openssl_sha512($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Returns a sha512 hash object; optionally initialized with a string");
@@ -304,17 +498,19 @@
     {"openssl_sha512", (PyCFunction)(void(*)(void))_hashlib_openssl_sha512, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha512__doc__},
 
 static PyObject *
-_hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj);
+_hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj,
+                             int usedforsecurity);
 
 static PyObject *
 _hashlib_openssl_sha512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha512", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -323,14 +519,363 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    data_obj = args[0];
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _hashlib_openssl_sha512_impl(module, data_obj);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha512_impl(module, data_obj, usedforsecurity);
 
 exit:
     return return_value;
 }
 
+#if defined(PY_OPENSSL_HAS_SHA3)
+
+PyDoc_STRVAR(_hashlib_openssl_sha3_224__doc__,
+"openssl_sha3_224($module, /, string=b\'\', *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Returns a sha3-224 hash object; optionally initialized with a string");
+
+#define _HASHLIB_OPENSSL_SHA3_224_METHODDEF    \
+    {"openssl_sha3_224", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_224, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_224__doc__},
+
+static PyObject *
+_hashlib_openssl_sha3_224_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity);
+
+static PyObject *
+_hashlib_openssl_sha3_224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_224", 0};
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+skip_optional_pos:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha3_224_impl(module, data_obj, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHA3) */
+
+#if defined(PY_OPENSSL_HAS_SHA3)
+
+PyDoc_STRVAR(_hashlib_openssl_sha3_256__doc__,
+"openssl_sha3_256($module, /, string=b\'\', *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Returns a sha3-256 hash object; optionally initialized with a string");
+
+#define _HASHLIB_OPENSSL_SHA3_256_METHODDEF    \
+    {"openssl_sha3_256", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_256, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_256__doc__},
+
+static PyObject *
+_hashlib_openssl_sha3_256_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity);
+
+static PyObject *
+_hashlib_openssl_sha3_256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_256", 0};
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+skip_optional_pos:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha3_256_impl(module, data_obj, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHA3) */
+
+#if defined(PY_OPENSSL_HAS_SHA3)
+
+PyDoc_STRVAR(_hashlib_openssl_sha3_384__doc__,
+"openssl_sha3_384($module, /, string=b\'\', *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Returns a sha3-384 hash object; optionally initialized with a string");
+
+#define _HASHLIB_OPENSSL_SHA3_384_METHODDEF    \
+    {"openssl_sha3_384", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_384, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_384__doc__},
+
+static PyObject *
+_hashlib_openssl_sha3_384_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity);
+
+static PyObject *
+_hashlib_openssl_sha3_384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_384", 0};
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+skip_optional_pos:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha3_384_impl(module, data_obj, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHA3) */
+
+#if defined(PY_OPENSSL_HAS_SHA3)
+
+PyDoc_STRVAR(_hashlib_openssl_sha3_512__doc__,
+"openssl_sha3_512($module, /, string=b\'\', *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Returns a sha3-512 hash object; optionally initialized with a string");
+
+#define _HASHLIB_OPENSSL_SHA3_512_METHODDEF    \
+    {"openssl_sha3_512", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_512, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_512__doc__},
+
+static PyObject *
+_hashlib_openssl_sha3_512_impl(PyObject *module, PyObject *data_obj,
+                               int usedforsecurity);
+
+static PyObject *
+_hashlib_openssl_sha3_512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_512", 0};
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+skip_optional_pos:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_sha3_512_impl(module, data_obj, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHA3) */
+
+#if defined(PY_OPENSSL_HAS_SHAKE)
+
+PyDoc_STRVAR(_hashlib_openssl_shake_128__doc__,
+"openssl_shake_128($module, /, string=b\'\', *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Returns a shake-128 variable hash object; optionally initialized with a string");
+
+#define _HASHLIB_OPENSSL_SHAKE_128_METHODDEF    \
+    {"openssl_shake_128", (PyCFunction)(void(*)(void))_hashlib_openssl_shake_128, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_shake_128__doc__},
+
+static PyObject *
+_hashlib_openssl_shake_128_impl(PyObject *module, PyObject *data_obj,
+                                int usedforsecurity);
+
+static PyObject *
+_hashlib_openssl_shake_128(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_shake_128", 0};
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+skip_optional_pos:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_shake_128_impl(module, data_obj, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
+
+#if defined(PY_OPENSSL_HAS_SHAKE)
+
+PyDoc_STRVAR(_hashlib_openssl_shake_256__doc__,
+"openssl_shake_256($module, /, string=b\'\', *, usedforsecurity=True)\n"
+"--\n"
+"\n"
+"Returns a shake-256 variable hash object; optionally initialized with a string");
+
+#define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF    \
+    {"openssl_shake_256", (PyCFunction)(void(*)(void))_hashlib_openssl_shake_256, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_shake_256__doc__},
+
+static PyObject *
+_hashlib_openssl_shake_256_impl(PyObject *module, PyObject *data_obj,
+                                int usedforsecurity);
+
+static PyObject *
+_hashlib_openssl_shake_256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "openssl_shake_256", 0};
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    PyObject *data_obj = NULL;
+    int usedforsecurity = 1;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[0]) {
+        data_obj = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+skip_optional_pos:
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _hashlib_openssl_shake_256_impl(module, data_obj, usedforsecurity);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(PY_OPENSSL_HAS_SHAKE) */
+
 PyDoc_STRVAR(pbkdf2_hmac__doc__,
 "pbkdf2_hmac($module, /, hash_name, password, salt, iterations,\n"
 "            dklen=None)\n"
@@ -550,21 +1095,21 @@
 
 #endif /* (OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(OPENSSL_NO_SCRYPT) && !defined(LIBRESSL_VERSION_NUMBER)) */
 
-PyDoc_STRVAR(_hashlib_hmac_digest__doc__,
+PyDoc_STRVAR(_hashlib_hmac_singleshot__doc__,
 "hmac_digest($module, /, key, msg, digest)\n"
 "--\n"
 "\n"
 "Single-shot HMAC.");
 
-#define _HASHLIB_HMAC_DIGEST_METHODDEF    \
-    {"hmac_digest", (PyCFunction)(void(*)(void))_hashlib_hmac_digest, METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_digest__doc__},
+#define _HASHLIB_HMAC_SINGLESHOT_METHODDEF    \
+    {"hmac_digest", (PyCFunction)(void(*)(void))_hashlib_hmac_singleshot, METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_singleshot__doc__},
 
 static PyObject *
-_hashlib_hmac_digest_impl(PyObject *module, Py_buffer *key, Py_buffer *msg,
-                          const char *digest);
+_hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
+                              Py_buffer *msg, const char *digest);
 
 static PyObject *
-_hashlib_hmac_digest(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+_hashlib_hmac_singleshot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
     static const char * const _keywords[] = {"key", "msg", "digest", NULL};
@@ -605,7 +1150,7 @@
         PyErr_SetString(PyExc_ValueError, "embedded null character");
         goto exit;
     }
-    return_value = _hashlib_hmac_digest_impl(module, &key, &msg, digest);
+    return_value = _hashlib_hmac_singleshot_impl(module, &key, &msg, digest);
 
 exit:
     /* Cleanup for key */
@@ -620,7 +1165,281 @@
     return return_value;
 }
 
+PyDoc_STRVAR(_hashlib_hmac_new__doc__,
+"hmac_new($module, /, key, msg=b\'\', digestmod=None)\n"
+"--\n"
+"\n"
+"Return a new hmac object.");
+
+#define _HASHLIB_HMAC_NEW_METHODDEF    \
+    {"hmac_new", (PyCFunction)(void(*)(void))_hashlib_hmac_new, METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_new__doc__},
+
+static PyObject *
+_hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
+                       const char *digestmod);
+
+static PyObject *
+_hashlib_hmac_new(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"key", "msg", "digestmod", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "hmac_new", 0};
+    PyObject *argsbuf[3];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
+    Py_buffer key = {NULL, NULL};
+    PyObject *msg_obj = NULL;
+    const char *digestmod = NULL;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 3, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (PyObject_GetBuffer(args[0], &key, PyBUF_SIMPLE) != 0) {
+        goto exit;
+    }
+    if (!PyBuffer_IsContiguous(&key, 'C')) {
+        _PyArg_BadArgument("hmac_new", "argument 'key'", "contiguous buffer", args[0]);
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[1]) {
+        msg_obj = args[1];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (!PyUnicode_Check(args[2])) {
+        _PyArg_BadArgument("hmac_new", "argument 'digestmod'", "str", args[2]);
+        goto exit;
+    }
+    Py_ssize_t digestmod_length;
+    digestmod = PyUnicode_AsUTF8AndSize(args[2], &digestmod_length);
+    if (digestmod == NULL) {
+        goto exit;
+    }
+    if (strlen(digestmod) != (size_t)digestmod_length) {
+        PyErr_SetString(PyExc_ValueError, "embedded null character");
+        goto exit;
+    }
+skip_optional_pos:
+    return_value = _hashlib_hmac_new_impl(module, &key, msg_obj, digestmod);
+
+exit:
+    /* Cleanup for key */
+    if (key.obj) {
+       PyBuffer_Release(&key);
+    }
+
+    return return_value;
+}
+
+PyDoc_STRVAR(_hashlib_HMAC_copy__doc__,
+"copy($self, /)\n"
+"--\n"
+"\n"
+"Return a copy (\"clone\") of the HMAC object.");
+
+#define _HASHLIB_HMAC_COPY_METHODDEF    \
+    {"copy", (PyCFunction)_hashlib_HMAC_copy, METH_NOARGS, _hashlib_HMAC_copy__doc__},
+
+static PyObject *
+_hashlib_HMAC_copy_impl(HMACobject *self);
+
+static PyObject *
+_hashlib_HMAC_copy(HMACobject *self, PyObject *Py_UNUSED(ignored))
+{
+    return _hashlib_HMAC_copy_impl(self);
+}
+
+PyDoc_STRVAR(_hashlib_HMAC_update__doc__,
+"update($self, /, msg)\n"
+"--\n"
+"\n"
+"Update the HMAC object with msg.");
+
+#define _HASHLIB_HMAC_UPDATE_METHODDEF    \
+    {"update", (PyCFunction)(void(*)(void))_hashlib_HMAC_update, METH_FASTCALL|METH_KEYWORDS, _hashlib_HMAC_update__doc__},
+
+static PyObject *
+_hashlib_HMAC_update_impl(HMACobject *self, PyObject *msg);
+
+static PyObject *
+_hashlib_HMAC_update(HMACobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"msg", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "update", 0};
+    PyObject *argsbuf[1];
+    PyObject *msg;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    msg = args[0];
+    return_value = _hashlib_HMAC_update_impl(self, msg);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_hashlib_HMAC_digest__doc__,
+"digest($self, /)\n"
+"--\n"
+"\n"
+"Return the digest of the bytes passed to the update() method so far.");
+
+#define _HASHLIB_HMAC_DIGEST_METHODDEF    \
+    {"digest", (PyCFunction)_hashlib_HMAC_digest, METH_NOARGS, _hashlib_HMAC_digest__doc__},
+
+static PyObject *
+_hashlib_HMAC_digest_impl(HMACobject *self);
+
+static PyObject *
+_hashlib_HMAC_digest(HMACobject *self, PyObject *Py_UNUSED(ignored))
+{
+    return _hashlib_HMAC_digest_impl(self);
+}
+
+PyDoc_STRVAR(_hashlib_HMAC_hexdigest__doc__,
+"hexdigest($self, /)\n"
+"--\n"
+"\n"
+"Return hexadecimal digest of the bytes passed to the update() method so far.\n"
+"\n"
+"This may be used to exchange the value safely in email or other non-binary\n"
+"environments.");
+
+#define _HASHLIB_HMAC_HEXDIGEST_METHODDEF    \
+    {"hexdigest", (PyCFunction)_hashlib_HMAC_hexdigest, METH_NOARGS, _hashlib_HMAC_hexdigest__doc__},
+
+static PyObject *
+_hashlib_HMAC_hexdigest_impl(HMACobject *self);
+
+static PyObject *
+_hashlib_HMAC_hexdigest(HMACobject *self, PyObject *Py_UNUSED(ignored))
+{
+    return _hashlib_HMAC_hexdigest_impl(self);
+}
+
+#if !defined(LIBRESSL_VERSION_NUMBER)
+
+PyDoc_STRVAR(_hashlib_get_fips_mode__doc__,
+"get_fips_mode($module, /)\n"
+"--\n"
+"\n"
+"Determine the OpenSSL FIPS mode of operation.\n"
+"\n"
+"For OpenSSL 3.0.0 and newer it returns the state of the default provider\n"
+"in the default OSSL context. It\'s not quite the same as FIPS_mode() but good\n"
+"enough for unittests.\n"
+"\n"
+"Effectively any non-zero return value indicates FIPS mode;\n"
+"values other than 1 may have additional significance.");
+
+#define _HASHLIB_GET_FIPS_MODE_METHODDEF    \
+    {"get_fips_mode", (PyCFunction)_hashlib_get_fips_mode, METH_NOARGS, _hashlib_get_fips_mode__doc__},
+
+static int
+_hashlib_get_fips_mode_impl(PyObject *module);
+
+static PyObject *
+_hashlib_get_fips_mode(PyObject *module, PyObject *Py_UNUSED(ignored))
+{
+    PyObject *return_value = NULL;
+    int _return_value;
+
+    _return_value = _hashlib_get_fips_mode_impl(module);
+    if ((_return_value == -1) && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = PyLong_FromLong((long)_return_value);
+
+exit:
+    return return_value;
+}
+
+#endif /* !defined(LIBRESSL_VERSION_NUMBER) */
+
+PyDoc_STRVAR(_hashlib_compare_digest__doc__,
+"compare_digest($module, a, b, /)\n"
+"--\n"
+"\n"
+"Return \'a == b\'.\n"
+"\n"
+"This function uses an approach designed to prevent\n"
+"timing analysis, making it appropriate for cryptography.\n"
+"\n"
+"a and b must both be of the same type: either str (ASCII only),\n"
+"or any bytes-like object.\n"
+"\n"
+"Note: If a and b are of different lengths, or if an error occurs,\n"
+"a timing attack could theoretically reveal information about the\n"
+"types and lengths of a and b--but not their values.");
+
+#define _HASHLIB_COMPARE_DIGEST_METHODDEF    \
+    {"compare_digest", (PyCFunction)(void(*)(void))_hashlib_compare_digest, METH_FASTCALL, _hashlib_compare_digest__doc__},
+
+static PyObject *
+_hashlib_compare_digest_impl(PyObject *module, PyObject *a, PyObject *b);
+
+static PyObject *
+_hashlib_compare_digest(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *a;
+    PyObject *b;
+
+    if (!_PyArg_CheckPositional("compare_digest", nargs, 2, 2)) {
+        goto exit;
+    }
+    a = args[0];
+    b = args[1];
+    return_value = _hashlib_compare_digest_impl(module, a, b);
+
+exit:
+    return return_value;
+}
+
+#ifndef EVPXOF_DIGEST_METHODDEF
+    #define EVPXOF_DIGEST_METHODDEF
+#endif /* !defined(EVPXOF_DIGEST_METHODDEF) */
+
+#ifndef EVPXOF_HEXDIGEST_METHODDEF
+    #define EVPXOF_HEXDIGEST_METHODDEF
+#endif /* !defined(EVPXOF_HEXDIGEST_METHODDEF) */
+
+#ifndef _HASHLIB_OPENSSL_SHA3_224_METHODDEF
+    #define _HASHLIB_OPENSSL_SHA3_224_METHODDEF
+#endif /* !defined(_HASHLIB_OPENSSL_SHA3_224_METHODDEF) */
+
+#ifndef _HASHLIB_OPENSSL_SHA3_256_METHODDEF
+    #define _HASHLIB_OPENSSL_SHA3_256_METHODDEF
+#endif /* !defined(_HASHLIB_OPENSSL_SHA3_256_METHODDEF) */
+
+#ifndef _HASHLIB_OPENSSL_SHA3_384_METHODDEF
+    #define _HASHLIB_OPENSSL_SHA3_384_METHODDEF
+#endif /* !defined(_HASHLIB_OPENSSL_SHA3_384_METHODDEF) */
+
+#ifndef _HASHLIB_OPENSSL_SHA3_512_METHODDEF
+    #define _HASHLIB_OPENSSL_SHA3_512_METHODDEF
+#endif /* !defined(_HASHLIB_OPENSSL_SHA3_512_METHODDEF) */
+
+#ifndef _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
+    #define _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
+#endif /* !defined(_HASHLIB_OPENSSL_SHAKE_128_METHODDEF) */
+
+#ifndef _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
+    #define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
+#endif /* !defined(_HASHLIB_OPENSSL_SHAKE_256_METHODDEF) */
+
 #ifndef _HASHLIB_SCRYPT_METHODDEF
     #define _HASHLIB_SCRYPT_METHODDEF
 #endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */
-/*[clinic end generated code: output=38c2637f67e9bb79 input=a9049054013a1b77]*/
+
+#ifndef _HASHLIB_GET_FIPS_MODE_METHODDEF
+    #define _HASHLIB_GET_FIPS_MODE_METHODDEF
+#endif /* !defined(_HASHLIB_GET_FIPS_MODE_METHODDEF) */
+/*[clinic end generated code: output=b6b280e46bf0b139 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h
index 0457a43..136524b 100644
--- a/Modules/clinic/_pickle.c.h
+++ b/Modules/clinic/_pickle.c.h
@@ -735,7 +735,7 @@
 }
 
 PyDoc_STRVAR(_pickle_loads__doc__,
-"loads($module, /, data, *, fix_imports=True, encoding=\'ASCII\',\n"
+"loads($module, data, /, *, fix_imports=True, encoding=\'ASCII\',\n"
 "      errors=\'strict\', buffers=())\n"
 "--\n"
 "\n"
@@ -766,7 +766,7 @@
 _pickle_loads(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"data", "fix_imports", "encoding", "errors", "buffers", NULL};
+    static const char * const _keywords[] = {"", "fix_imports", "encoding", "errors", "buffers", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "loads", 0};
     PyObject *argsbuf[5];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
@@ -836,4 +836,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=e2506823be1960c5 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=324aad69644beda2 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_testmultiphase.c.h b/Modules/clinic/_testmultiphase.c.h
new file mode 100644
index 0000000..0d38c23
--- /dev/null
+++ b/Modules/clinic/_testmultiphase.c.h
@@ -0,0 +1,101 @@
+/*[clinic input]
+preserve
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_testmultiphase_StateAccessType_get_defining_module__doc__,
+"get_defining_module($self, /)\n"
+"--\n"
+"\n"
+"Return the module of the defining class.");
+
+#define _TESTMULTIPHASE_STATEACCESSTYPE_GET_DEFINING_MODULE_METHODDEF    \
+    {"get_defining_module", (PyCFunction)(void(*)(void))_testmultiphase_StateAccessType_get_defining_module, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _testmultiphase_StateAccessType_get_defining_module__doc__},
+
+static PyObject *
+_testmultiphase_StateAccessType_get_defining_module_impl(StateAccessTypeObject *self,
+                                                         PyTypeObject *cls);
+
+static PyObject *
+_testmultiphase_StateAccessType_get_defining_module(StateAccessTypeObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = { NULL};
+    static _PyArg_Parser _parser = {":get_defining_module", _keywords, 0};
+
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser
+        )) {
+        goto exit;
+    }
+    return_value = _testmultiphase_StateAccessType_get_defining_module_impl(self, cls);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_testmultiphase_StateAccessType_increment_count_clinic__doc__,
+"increment_count_clinic($self, /, n=1, *, twice=False)\n"
+"--\n"
+"\n"
+"Add \'n\' from the module-state counter.\n"
+"\n"
+"Pass \'twice\' to double that amount.\n"
+"\n"
+"This tests Argument Clinic support for defining_class.");
+
+#define _TESTMULTIPHASE_STATEACCESSTYPE_INCREMENT_COUNT_CLINIC_METHODDEF    \
+    {"increment_count_clinic", (PyCFunction)(void(*)(void))_testmultiphase_StateAccessType_increment_count_clinic, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _testmultiphase_StateAccessType_increment_count_clinic__doc__},
+
+static PyObject *
+_testmultiphase_StateAccessType_increment_count_clinic_impl(StateAccessTypeObject *self,
+                                                            PyTypeObject *cls,
+                                                            int n, int twice);
+
+static PyObject *
+_testmultiphase_StateAccessType_increment_count_clinic(StateAccessTypeObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"n", "twice", NULL};
+    static _PyArg_Parser _parser = {"|i$p:increment_count_clinic", _keywords, 0};
+    int n = 1;
+    int twice = 0;
+
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
+        &n, &twice)) {
+        goto exit;
+    }
+    return_value = _testmultiphase_StateAccessType_increment_count_clinic_impl(self, cls, n, twice);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(_testmultiphase_StateAccessType_get_count__doc__,
+"get_count($self, /)\n"
+"--\n"
+"\n"
+"Return the value of the module-state counter.");
+
+#define _TESTMULTIPHASE_STATEACCESSTYPE_GET_COUNT_METHODDEF    \
+    {"get_count", (PyCFunction)(void(*)(void))_testmultiphase_StateAccessType_get_count, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _testmultiphase_StateAccessType_get_count__doc__},
+
+static PyObject *
+_testmultiphase_StateAccessType_get_count_impl(StateAccessTypeObject *self,
+                                               PyTypeObject *cls);
+
+static PyObject *
+_testmultiphase_StateAccessType_get_count(StateAccessTypeObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = { NULL};
+    static _PyArg_Parser _parser = {":get_count", _keywords, 0};
+
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser
+        )) {
+        goto exit;
+    }
+    return_value = _testmultiphase_StateAccessType_get_count_impl(self, cls);
+
+exit:
+    return return_value;
+}
+/*[clinic end generated code: output=39eea487e94e7f5d input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_tracemalloc.c.h b/Modules/clinic/_tracemalloc.c.h
index 68fafdc..049cacd 100644
--- a/Modules/clinic/_tracemalloc.c.h
+++ b/Modules/clinic/_tracemalloc.c.h
@@ -197,4 +197,24 @@
 {
     return _tracemalloc_get_traced_memory_impl(module);
 }
-/*[clinic end generated code: output=1bc96dc569706afa input=a9049054013a1b77]*/
+
+PyDoc_STRVAR(_tracemalloc_reset_peak__doc__,
+"reset_peak($module, /)\n"
+"--\n"
+"\n"
+"Set the peak size of memory blocks traced by tracemalloc to the current size.\n"
+"\n"
+"Do nothing if the tracemalloc module is not tracing memory allocations.");
+
+#define _TRACEMALLOC_RESET_PEAK_METHODDEF    \
+    {"reset_peak", (PyCFunction)_tracemalloc_reset_peak, METH_NOARGS, _tracemalloc_reset_peak__doc__},
+
+static PyObject *
+_tracemalloc_reset_peak_impl(PyObject *module);
+
+static PyObject *
+_tracemalloc_reset_peak(PyObject *module, PyObject *Py_UNUSED(ignored))
+{
+    return _tracemalloc_reset_peak_impl(module);
+}
+/*[clinic end generated code: output=a130117b1af821da input=a9049054013a1b77]*/
diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h
index 33f82d4..b9245ca 100644
--- a/Modules/clinic/arraymodule.c.h
+++ b/Modules/clinic/arraymodule.c.h
@@ -312,54 +312,6 @@
     return array_array_tolist_impl(self);
 }
 
-PyDoc_STRVAR(array_array_fromstring__doc__,
-"fromstring($self, buffer, /)\n"
-"--\n"
-"\n"
-"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method).\n"
-"\n"
-"This method is deprecated. Use frombytes instead.");
-
-#define ARRAY_ARRAY_FROMSTRING_METHODDEF    \
-    {"fromstring", (PyCFunction)array_array_fromstring, METH_O, array_array_fromstring__doc__},
-
-static PyObject *
-array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer);
-
-static PyObject *
-array_array_fromstring(arrayobject *self, PyObject *arg)
-{
-    PyObject *return_value = NULL;
-    Py_buffer buffer = {NULL, NULL};
-
-    if (PyUnicode_Check(arg)) {
-        Py_ssize_t len;
-        const char *ptr = PyUnicode_AsUTF8AndSize(arg, &len);
-        if (ptr == NULL) {
-            goto exit;
-        }
-        PyBuffer_FillInfo(&buffer, arg, (void *)ptr, len, 1, 0);
-    }
-    else { /* any bytes-like object */
-        if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {
-            goto exit;
-        }
-        if (!PyBuffer_IsContiguous(&buffer, 'C')) {
-            _PyArg_BadArgument("fromstring", "argument", "contiguous buffer", arg);
-            goto exit;
-        }
-    }
-    return_value = array_array_fromstring_impl(self, &buffer);
-
-exit:
-    /* Cleanup for buffer */
-    if (buffer.obj) {
-       PyBuffer_Release(&buffer);
-    }
-
-    return return_value;
-}
-
 PyDoc_STRVAR(array_array_frombytes__doc__,
 "frombytes($self, buffer, /)\n"
 "--\n"
@@ -414,26 +366,6 @@
     return array_array_tobytes_impl(self);
 }
 
-PyDoc_STRVAR(array_array_tostring__doc__,
-"tostring($self, /)\n"
-"--\n"
-"\n"
-"Convert the array to an array of machine values and return the bytes representation.\n"
-"\n"
-"This method is deprecated. Use tobytes instead.");
-
-#define ARRAY_ARRAY_TOSTRING_METHODDEF    \
-    {"tostring", (PyCFunction)array_array_tostring, METH_NOARGS, array_array_tostring__doc__},
-
-static PyObject *
-array_array_tostring_impl(arrayobject *self);
-
-static PyObject *
-array_array_tostring(arrayobject *self, PyObject *Py_UNUSED(ignored))
-{
-    return array_array_tostring_impl(self);
-}
-
 PyDoc_STRVAR(array_array_fromunicode__doc__,
 "fromunicode($self, ustr, /)\n"
 "--\n"
@@ -448,20 +380,23 @@
     {"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__},
 
 static PyObject *
-array_array_fromunicode_impl(arrayobject *self, const Py_UNICODE *ustr,
-                             Py_ssize_clean_t ustr_length);
+array_array_fromunicode_impl(arrayobject *self, PyObject *ustr);
 
 static PyObject *
 array_array_fromunicode(arrayobject *self, PyObject *arg)
 {
     PyObject *return_value = NULL;
-    const Py_UNICODE *ustr;
-    Py_ssize_clean_t ustr_length;
+    PyObject *ustr;
 
-    if (!PyArg_Parse(arg, "u#:fromunicode", &ustr, &ustr_length)) {
+    if (!PyUnicode_Check(arg)) {
+        _PyArg_BadArgument("fromunicode", "argument", "str", arg);
         goto exit;
     }
-    return_value = array_array_fromunicode_impl(self, ustr, ustr_length);
+    if (PyUnicode_READY(arg) == -1) {
+        goto exit;
+    }
+    ustr = arg;
+    return_value = array_array_fromunicode_impl(self, ustr);
 
 exit:
     return return_value;
@@ -599,4 +534,4 @@
 
 #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF    \
     {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__},
-/*[clinic end generated code: output=6aa421571e2c0756 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9f70748dd3bc532f input=a9049054013a1b77]*/
diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h
index 82942f0..4d02c72 100644
--- a/Modules/clinic/binascii.c.h
+++ b/Modules/clinic/binascii.c.h
@@ -328,7 +328,7 @@
 #define BINASCII_CRC_HQX_METHODDEF    \
     {"crc_hqx", (PyCFunction)(void(*)(void))binascii_crc_hqx, METH_FASTCALL, binascii_crc_hqx__doc__},
 
-static unsigned int
+static PyObject *
 binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc);
 
 static PyObject *
@@ -337,7 +337,6 @@
     PyObject *return_value = NULL;
     Py_buffer data = {NULL, NULL};
     unsigned int crc;
-    unsigned int _return_value;
 
     if (!_PyArg_CheckPositional("crc_hqx", nargs, 2, 2)) {
         goto exit;
@@ -358,11 +357,7 @@
     if (crc == (unsigned int)-1 && PyErr_Occurred()) {
         goto exit;
     }
-    _return_value = binascii_crc_hqx_impl(module, &data, crc);
-    if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
-        goto exit;
-    }
-    return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
+    return_value = binascii_crc_hqx_impl(module, &data, crc);
 
 exit:
     /* Cleanup for data */
@@ -801,4 +796,4 @@
 
     return return_value;
 }
-/*[clinic end generated code: output=ec26d03c2007eaac input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a1e878d3963b615e input=a9049054013a1b77]*/
diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h
index 81a8437..4b6653a 100644
--- a/Modules/clinic/cmathmodule.c.h
+++ b/Modules/clinic/cmathmodule.c.h
@@ -26,9 +26,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_acos_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -69,9 +68,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_acosh_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -112,9 +110,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_asin_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -155,9 +152,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_asinh_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -198,9 +194,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_atan_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -241,9 +236,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_atanh_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -284,9 +278,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_cos_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -327,9 +320,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_cosh_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -370,9 +362,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_exp_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -413,9 +404,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_log10_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -456,9 +446,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_sin_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -499,9 +488,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_sinh_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -542,9 +530,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_sqrt_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -585,9 +572,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_tan_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -628,9 +614,8 @@
         goto exit;
     }
     /* modifications for z */
-    errno = 0; PyFPE_START_PROTECT("complex function", goto exit);
+    errno = 0;
     _return_value = cmath_tanh_impl(module, z);
-    PyFPE_END_PROTECT(_return_value);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ValueError, "math domain error");
         goto exit;
@@ -968,4 +953,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=3edc4484b10ae752 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=353347db2e808e0d input=a9049054013a1b77]*/
diff --git a/Modules/clinic/gcmodule.c.h b/Modules/clinic/gcmodule.c.h
index 22d2aa4..72795c6 100644
--- a/Modules/clinic/gcmodule.c.h
+++ b/Modules/clinic/gcmodule.c.h
@@ -304,6 +304,15 @@
 #define GC_IS_TRACKED_METHODDEF    \
     {"is_tracked", (PyCFunction)gc_is_tracked, METH_O, gc_is_tracked__doc__},
 
+PyDoc_STRVAR(gc_is_finalized__doc__,
+"is_finalized($module, obj, /)\n"
+"--\n"
+"\n"
+"Returns true if the object has been already finalized by the GC.");
+
+#define GC_IS_FINALIZED_METHODDEF    \
+    {"is_finalized", (PyCFunction)gc_is_finalized, METH_O, gc_is_finalized__doc__},
+
 PyDoc_STRVAR(gc_freeze__doc__,
 "freeze($module, /)\n"
 "--\n"
@@ -373,4 +382,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=e40d384b1f0d513c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=bd6a8056989e2e69 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/mathmodule.c.h b/Modules/clinic/mathmodule.c.h
index 95d68ee..65f3dd4 100644
--- a/Modules/clinic/mathmodule.c.h
+++ b/Modules/clinic/mathmodule.c.h
@@ -2,36 +2,6 @@
 preserve
 [clinic start generated code]*/
 
-PyDoc_STRVAR(math_gcd__doc__,
-"gcd($module, x, y, /)\n"
-"--\n"
-"\n"
-"greatest common divisor of x and y");
-
-#define MATH_GCD_METHODDEF    \
-    {"gcd", (PyCFunction)(void(*)(void))math_gcd, METH_FASTCALL, math_gcd__doc__},
-
-static PyObject *
-math_gcd_impl(PyObject *module, PyObject *a, PyObject *b);
-
-static PyObject *
-math_gcd(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
-{
-    PyObject *return_value = NULL;
-    PyObject *a;
-    PyObject *b;
-
-    if (!_PyArg_CheckPositional("gcd", nargs, 2, 2)) {
-        goto exit;
-    }
-    a = args[0];
-    b = args[1];
-    return_value = math_gcd_impl(module, a, b);
-
-exit:
-    return return_value;
-}
-
 PyDoc_STRVAR(math_ceil__doc__,
 "ceil($module, x, /)\n"
 "--\n"
@@ -808,4 +778,91 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=9a2b3dc91eb9aadd input=a9049054013a1b77]*/
+
+PyDoc_STRVAR(math_nextafter__doc__,
+"nextafter($module, x, y, /)\n"
+"--\n"
+"\n"
+"Return the next floating-point value after x towards y.");
+
+#define MATH_NEXTAFTER_METHODDEF    \
+    {"nextafter", (PyCFunction)(void(*)(void))math_nextafter, METH_FASTCALL, math_nextafter__doc__},
+
+static PyObject *
+math_nextafter_impl(PyObject *module, double x, double y);
+
+static PyObject *
+math_nextafter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    double x;
+    double y;
+
+    if (!_PyArg_CheckPositional("nextafter", nargs, 2, 2)) {
+        goto exit;
+    }
+    if (PyFloat_CheckExact(args[0])) {
+        x = PyFloat_AS_DOUBLE(args[0]);
+    }
+    else
+    {
+        x = PyFloat_AsDouble(args[0]);
+        if (x == -1.0 && PyErr_Occurred()) {
+            goto exit;
+        }
+    }
+    if (PyFloat_CheckExact(args[1])) {
+        y = PyFloat_AS_DOUBLE(args[1]);
+    }
+    else
+    {
+        y = PyFloat_AsDouble(args[1]);
+        if (y == -1.0 && PyErr_Occurred()) {
+            goto exit;
+        }
+    }
+    return_value = math_nextafter_impl(module, x, y);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(math_ulp__doc__,
+"ulp($module, x, /)\n"
+"--\n"
+"\n"
+"Return the value of the least significant bit of the float x.");
+
+#define MATH_ULP_METHODDEF    \
+    {"ulp", (PyCFunction)math_ulp, METH_O, math_ulp__doc__},
+
+static double
+math_ulp_impl(PyObject *module, double x);
+
+static PyObject *
+math_ulp(PyObject *module, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    double x;
+    double _return_value;
+
+    if (PyFloat_CheckExact(arg)) {
+        x = PyFloat_AS_DOUBLE(arg);
+    }
+    else
+    {
+        x = PyFloat_AsDouble(arg);
+        if (x == -1.0 && PyErr_Occurred()) {
+            goto exit;
+        }
+    }
+    _return_value = math_ulp_impl(module, x);
+    if ((_return_value == -1.0) && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = PyFloat_FromDouble(_return_value);
+
+exit:
+    return return_value;
+}
+/*[clinic end generated code: output=1eae2b3ef19568fa input=a9049054013a1b77]*/
diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h
index 12484cc..c109f9e 100644
--- a/Modules/clinic/md5module.c.h
+++ b/Modules/clinic/md5module.c.h
@@ -66,7 +66,7 @@
     {"update", (PyCFunction)MD5Type_update, METH_O, MD5Type_update__doc__},
 
 PyDoc_STRVAR(_md5_md5__doc__,
-"md5($module, /, string=b\'\')\n"
+"md5($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new MD5 hash object; optionally initialized with a string.");
@@ -75,17 +75,18 @@
     {"md5", (PyCFunction)(void(*)(void))_md5_md5, METH_FASTCALL|METH_KEYWORDS, _md5_md5__doc__},
 
 static PyObject *
-_md5_md5_impl(PyObject *module, PyObject *string);
+_md5_md5_impl(PyObject *module, PyObject *string, int usedforsecurity);
 
 static PyObject *
 _md5_md5(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "md5", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *string = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -94,11 +95,24 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    string = args[0];
+    if (args[0]) {
+        string = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _md5_md5_impl(module, string);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _md5_md5_impl(module, string, usedforsecurity);
 
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=53133f08cf9095fc input=a9049054013a1b77]*/
+/*[clinic end generated code: output=dbe3abc60086f3ef input=a9049054013a1b77]*/
diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h
index 09ecdb3..41baa45 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -2805,7 +2805,7 @@
 "sched_getscheduler($module, pid, /)\n"
 "--\n"
 "\n"
-"Get the scheduling policy for the process identifiedy by pid.\n"
+"Get the scheduling policy for the process identified by pid.\n"
 "\n"
 "Passing 0 for pid returns the scheduling policy for the calling process.");
 
@@ -2838,7 +2838,7 @@
 "sched_param(sched_priority)\n"
 "--\n"
 "\n"
-"Current has only one field: sched_priority\");\n"
+"Currently has only one field: sched_priority\n"
 "\n"
 "  sched_priority\n"
 "    A scheduling parameter.");
@@ -2886,7 +2886,7 @@
 
 static PyObject *
 os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy,
-                           struct sched_param *param);
+                           PyObject *param_obj);
 
 static PyObject *
 os_sched_setscheduler(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
@@ -2894,13 +2894,13 @@
     PyObject *return_value = NULL;
     pid_t pid;
     int policy;
-    struct sched_param param;
+    PyObject *param_obj;
 
-    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "iO&:sched_setscheduler",
-        &pid, &policy, convert_sched_param, &param)) {
+    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "iO:sched_setscheduler",
+        &pid, &policy, &param_obj)) {
         goto exit;
     }
-    return_value = os_sched_setscheduler_impl(module, pid, policy, &param);
+    return_value = os_sched_setscheduler_impl(module, pid, policy, param_obj);
 
 exit:
     return return_value;
@@ -2957,21 +2957,20 @@
     {"sched_setparam", (PyCFunction)(void(*)(void))os_sched_setparam, METH_FASTCALL, os_sched_setparam__doc__},
 
 static PyObject *
-os_sched_setparam_impl(PyObject *module, pid_t pid,
-                       struct sched_param *param);
+os_sched_setparam_impl(PyObject *module, pid_t pid, PyObject *param_obj);
 
 static PyObject *
 os_sched_setparam(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 {
     PyObject *return_value = NULL;
     pid_t pid;
-    struct sched_param param;
+    PyObject *param_obj;
 
-    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "O&:sched_setparam",
-        &pid, convert_sched_param, &param)) {
+    if (!_PyArg_ParseStack(args, nargs, "" _Py_PARSE_PID "O:sched_setparam",
+        &pid, &param_obj)) {
         goto exit;
     }
-    return_value = os_sched_setparam_impl(module, pid, &param);
+    return_value = os_sched_setparam_impl(module, pid, param_obj);
 
 exit:
     return return_value;
@@ -3247,6 +3246,118 @@
 
 #endif /* defined(HAVE_GETPID) */
 
+#if defined(HAVE_GETGROUPLIST) && defined(__APPLE__)
+
+PyDoc_STRVAR(os_getgrouplist__doc__,
+"getgrouplist($module, user, group, /)\n"
+"--\n"
+"\n"
+"Returns a list of groups to which a user belongs.\n"
+"\n"
+"  user\n"
+"    username to lookup\n"
+"  group\n"
+"    base group id of the user");
+
+#define OS_GETGROUPLIST_METHODDEF    \
+    {"getgrouplist", (PyCFunction)(void(*)(void))os_getgrouplist, METH_FASTCALL, os_getgrouplist__doc__},
+
+static PyObject *
+os_getgrouplist_impl(PyObject *module, const char *user, int basegid);
+
+static PyObject *
+os_getgrouplist(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    const char *user;
+    int basegid;
+
+    if (!_PyArg_CheckPositional("getgrouplist", nargs, 2, 2)) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[0])) {
+        _PyArg_BadArgument("getgrouplist", "argument 1", "str", args[0]);
+        goto exit;
+    }
+    Py_ssize_t user_length;
+    user = PyUnicode_AsUTF8AndSize(args[0], &user_length);
+    if (user == NULL) {
+        goto exit;
+    }
+    if (strlen(user) != (size_t)user_length) {
+        PyErr_SetString(PyExc_ValueError, "embedded null character");
+        goto exit;
+    }
+    if (PyFloat_Check(args[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    basegid = _PyLong_AsInt(args[1]);
+    if (basegid == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = os_getgrouplist_impl(module, user, basegid);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(HAVE_GETGROUPLIST) && defined(__APPLE__) */
+
+#if defined(HAVE_GETGROUPLIST) && !defined(__APPLE__)
+
+PyDoc_STRVAR(os_getgrouplist__doc__,
+"getgrouplist($module, user, group, /)\n"
+"--\n"
+"\n"
+"Returns a list of groups to which a user belongs.\n"
+"\n"
+"  user\n"
+"    username to lookup\n"
+"  group\n"
+"    base group id of the user");
+
+#define OS_GETGROUPLIST_METHODDEF    \
+    {"getgrouplist", (PyCFunction)(void(*)(void))os_getgrouplist, METH_FASTCALL, os_getgrouplist__doc__},
+
+static PyObject *
+os_getgrouplist_impl(PyObject *module, const char *user, gid_t basegid);
+
+static PyObject *
+os_getgrouplist(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    const char *user;
+    gid_t basegid;
+
+    if (!_PyArg_CheckPositional("getgrouplist", nargs, 2, 2)) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[0])) {
+        _PyArg_BadArgument("getgrouplist", "argument 1", "str", args[0]);
+        goto exit;
+    }
+    Py_ssize_t user_length;
+    user = PyUnicode_AsUTF8AndSize(args[0], &user_length);
+    if (user == NULL) {
+        goto exit;
+    }
+    if (strlen(user) != (size_t)user_length) {
+        PyErr_SetString(PyExc_ValueError, "embedded null character");
+        goto exit;
+    }
+    if (!_Py_Gid_Converter(args[1], &basegid)) {
+        goto exit;
+    }
+    return_value = os_getgrouplist_impl(module, user, basegid);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(HAVE_GETGROUPLIST) && !defined(__APPLE__) */
+
 #if defined(HAVE_GETGROUPS)
 
 PyDoc_STRVAR(os_getgroups__doc__,
@@ -3269,6 +3380,102 @@
 
 #endif /* defined(HAVE_GETGROUPS) */
 
+#if defined(HAVE_INITGROUPS) && defined(__APPLE__)
+
+PyDoc_STRVAR(os_initgroups__doc__,
+"initgroups($module, username, gid, /)\n"
+"--\n"
+"\n"
+"Initialize the group access list.\n"
+"\n"
+"Call the system initgroups() to initialize the group access list with all of\n"
+"the groups of which the specified username is a member, plus the specified\n"
+"group id.");
+
+#define OS_INITGROUPS_METHODDEF    \
+    {"initgroups", (PyCFunction)(void(*)(void))os_initgroups, METH_FASTCALL, os_initgroups__doc__},
+
+static PyObject *
+os_initgroups_impl(PyObject *module, PyObject *oname, int gid);
+
+static PyObject *
+os_initgroups(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *oname = NULL;
+    int gid;
+
+    if (!_PyArg_CheckPositional("initgroups", nargs, 2, 2)) {
+        goto exit;
+    }
+    if (!PyUnicode_FSConverter(args[0], &oname)) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    gid = _PyLong_AsInt(args[1]);
+    if (gid == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    return_value = os_initgroups_impl(module, oname, gid);
+
+exit:
+    /* Cleanup for oname */
+    Py_XDECREF(oname);
+
+    return return_value;
+}
+
+#endif /* defined(HAVE_INITGROUPS) && defined(__APPLE__) */
+
+#if defined(HAVE_INITGROUPS) && !defined(__APPLE__)
+
+PyDoc_STRVAR(os_initgroups__doc__,
+"initgroups($module, username, gid, /)\n"
+"--\n"
+"\n"
+"Initialize the group access list.\n"
+"\n"
+"Call the system initgroups() to initialize the group access list with all of\n"
+"the groups of which the specified username is a member, plus the specified\n"
+"group id.");
+
+#define OS_INITGROUPS_METHODDEF    \
+    {"initgroups", (PyCFunction)(void(*)(void))os_initgroups, METH_FASTCALL, os_initgroups__doc__},
+
+static PyObject *
+os_initgroups_impl(PyObject *module, PyObject *oname, gid_t gid);
+
+static PyObject *
+os_initgroups(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *oname = NULL;
+    gid_t gid;
+
+    if (!_PyArg_CheckPositional("initgroups", nargs, 2, 2)) {
+        goto exit;
+    }
+    if (!PyUnicode_FSConverter(args[0], &oname)) {
+        goto exit;
+    }
+    if (!_Py_Gid_Converter(args[1], &gid)) {
+        goto exit;
+    }
+    return_value = os_initgroups_impl(module, oname, gid);
+
+exit:
+    /* Cleanup for oname */
+    Py_XDECREF(oname);
+
+    return return_value;
+}
+
+#endif /* defined(HAVE_INITGROUPS) && !defined(__APPLE__) */
+
 #if defined(HAVE_GETPGID)
 
 PyDoc_STRVAR(os_getpgid__doc__,
@@ -3963,6 +4170,44 @@
 
 #endif /* defined(HAVE_WAIT) */
 
+#if (defined(__linux__) && defined(__NR_pidfd_open))
+
+PyDoc_STRVAR(os_pidfd_open__doc__,
+"pidfd_open($module, /, pid, flags=0)\n"
+"--\n"
+"\n"
+"Return a file descriptor referring to the process *pid*.\n"
+"\n"
+"The descriptor can be used to perform process management without races and\n"
+"signals.");
+
+#define OS_PIDFD_OPEN_METHODDEF    \
+    {"pidfd_open", (PyCFunction)(void(*)(void))os_pidfd_open, METH_FASTCALL|METH_KEYWORDS, os_pidfd_open__doc__},
+
+static PyObject *
+os_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags);
+
+static PyObject *
+os_pidfd_open(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"pid", "flags", NULL};
+    static _PyArg_Parser _parser = {"" _Py_PARSE_PID "|O&:pidfd_open", _keywords, 0};
+    pid_t pid;
+    unsigned int flags = 0;
+
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
+        &pid, _PyLong_UnsignedInt_Converter, &flags)) {
+        goto exit;
+    }
+    return_value = os_pidfd_open_impl(module, pid, flags);
+
+exit:
+    return return_value;
+}
+
+#endif /* (defined(__linux__) && defined(__NR_pidfd_open)) */
+
 #if (defined(HAVE_READLINK) || defined(MS_WINDOWS))
 
 PyDoc_STRVAR(os_readlink__doc__,
@@ -4799,14 +5044,14 @@
     {"pread", (PyCFunction)(void(*)(void))os_pread, METH_FASTCALL, os_pread__doc__},
 
 static PyObject *
-os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset);
+os_pread_impl(PyObject *module, int fd, Py_ssize_t length, Py_off_t offset);
 
 static PyObject *
 os_pread(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 {
     PyObject *return_value = NULL;
     int fd;
-    int length;
+    Py_ssize_t length;
     Py_off_t offset;
 
     if (!_PyArg_CheckPositional("pread", nargs, 3, 3)) {
@@ -4826,9 +5071,17 @@
                         "integer argument expected, got float" );
         goto exit;
     }
-    length = _PyLong_AsInt(args[1]);
-    if (length == -1 && PyErr_Occurred()) {
-        goto exit;
+    {
+        Py_ssize_t ival = -1;
+        PyObject *iobj = PyNumber_Index(args[1]);
+        if (iobj != NULL) {
+            ival = PyLong_AsSsize_t(iobj);
+            Py_DECREF(iobj);
+        }
+        if (ival == -1 && PyErr_Occurred()) {
+            goto exit;
+        }
+        length = ival;
     }
     if (!Py_off_t_converter(args[2], &offset)) {
         goto exit;
@@ -4975,10 +5228,287 @@
     return return_value;
 }
 
+#if defined(HAVE_SENDFILE) && defined(__APPLE__)
+
+PyDoc_STRVAR(os_sendfile__doc__,
+"sendfile($module, /, out_fd, in_fd, offset, count, headers=(),\n"
+"         trailers=(), flags=0)\n"
+"--\n"
+"\n"
+"Copy count bytes from file descriptor in_fd to file descriptor out_fd.");
+
+#define OS_SENDFILE_METHODDEF    \
+    {"sendfile", (PyCFunction)(void(*)(void))os_sendfile, METH_FASTCALL|METH_KEYWORDS, os_sendfile__doc__},
+
+static PyObject *
+os_sendfile_impl(PyObject *module, int out_fd, int in_fd, Py_off_t offset,
+                 Py_off_t sbytes, PyObject *headers, PyObject *trailers,
+                 int flags);
+
+static PyObject *
+os_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"out_fd", "in_fd", "offset", "count", "headers", "trailers", "flags", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "sendfile", 0};
+    PyObject *argsbuf[7];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
+    int out_fd;
+    int in_fd;
+    Py_off_t offset;
+    Py_off_t sbytes;
+    PyObject *headers = NULL;
+    PyObject *trailers = NULL;
+    int flags = 0;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 7, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    out_fd = _PyLong_AsInt(args[0]);
+    if (out_fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    in_fd = _PyLong_AsInt(args[1]);
+    if (in_fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!Py_off_t_converter(args[2], &offset)) {
+        goto exit;
+    }
+    if (!Py_off_t_converter(args[3], &sbytes)) {
+        goto exit;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[4]) {
+        headers = args[4];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (args[5]) {
+        trailers = args[5];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (PyFloat_Check(args[6])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    flags = _PyLong_AsInt(args[6]);
+    if (flags == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+skip_optional_pos:
+    return_value = os_sendfile_impl(module, out_fd, in_fd, offset, sbytes, headers, trailers, flags);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(HAVE_SENDFILE) && defined(__APPLE__) */
+
+#if defined(HAVE_SENDFILE) && !defined(__APPLE__) && (defined(__FreeBSD__) || defined(__DragonFly__))
+
+PyDoc_STRVAR(os_sendfile__doc__,
+"sendfile($module, /, out_fd, in_fd, offset, count, headers=(),\n"
+"         trailers=(), flags=0)\n"
+"--\n"
+"\n"
+"Copy count bytes from file descriptor in_fd to file descriptor out_fd.");
+
+#define OS_SENDFILE_METHODDEF    \
+    {"sendfile", (PyCFunction)(void(*)(void))os_sendfile, METH_FASTCALL|METH_KEYWORDS, os_sendfile__doc__},
+
+static PyObject *
+os_sendfile_impl(PyObject *module, int out_fd, int in_fd, Py_off_t offset,
+                 Py_ssize_t count, PyObject *headers, PyObject *trailers,
+                 int flags);
+
+static PyObject *
+os_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"out_fd", "in_fd", "offset", "count", "headers", "trailers", "flags", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "sendfile", 0};
+    PyObject *argsbuf[7];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
+    int out_fd;
+    int in_fd;
+    Py_off_t offset;
+    Py_ssize_t count;
+    PyObject *headers = NULL;
+    PyObject *trailers = NULL;
+    int flags = 0;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 7, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    out_fd = _PyLong_AsInt(args[0]);
+    if (out_fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    in_fd = _PyLong_AsInt(args[1]);
+    if (in_fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!Py_off_t_converter(args[2], &offset)) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[3])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    {
+        Py_ssize_t ival = -1;
+        PyObject *iobj = PyNumber_Index(args[3]);
+        if (iobj != NULL) {
+            ival = PyLong_AsSsize_t(iobj);
+            Py_DECREF(iobj);
+        }
+        if (ival == -1 && PyErr_Occurred()) {
+            goto exit;
+        }
+        count = ival;
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (args[4]) {
+        headers = args[4];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (args[5]) {
+        trailers = args[5];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
+    if (PyFloat_Check(args[6])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    flags = _PyLong_AsInt(args[6]);
+    if (flags == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+skip_optional_pos:
+    return_value = os_sendfile_impl(module, out_fd, in_fd, offset, count, headers, trailers, flags);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(HAVE_SENDFILE) && !defined(__APPLE__) && (defined(__FreeBSD__) || defined(__DragonFly__)) */
+
+#if defined(HAVE_SENDFILE) && !defined(__APPLE__) && !(defined(__FreeBSD__) || defined(__DragonFly__))
+
+PyDoc_STRVAR(os_sendfile__doc__,
+"sendfile($module, /, out_fd, in_fd, offset, count)\n"
+"--\n"
+"\n"
+"Copy count bytes from file descriptor in_fd to file descriptor out_fd.");
+
+#define OS_SENDFILE_METHODDEF    \
+    {"sendfile", (PyCFunction)(void(*)(void))os_sendfile, METH_FASTCALL|METH_KEYWORDS, os_sendfile__doc__},
+
+static PyObject *
+os_sendfile_impl(PyObject *module, int out_fd, int in_fd, PyObject *offobj,
+                 Py_ssize_t count);
+
+static PyObject *
+os_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"out_fd", "in_fd", "offset", "count", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "sendfile", 0};
+    PyObject *argsbuf[4];
+    int out_fd;
+    int in_fd;
+    PyObject *offobj;
+    Py_ssize_t count;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 4, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    out_fd = _PyLong_AsInt(args[0]);
+    if (out_fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    in_fd = _PyLong_AsInt(args[1]);
+    if (in_fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    offobj = args[2];
+    if (PyFloat_Check(args[3])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    {
+        Py_ssize_t ival = -1;
+        PyObject *iobj = PyNumber_Index(args[3]);
+        if (iobj != NULL) {
+            ival = PyLong_AsSsize_t(iobj);
+            Py_DECREF(iobj);
+        }
+        if (ival == -1 && PyErr_Occurred()) {
+            goto exit;
+        }
+        count = ival;
+    }
+    return_value = os_sendfile_impl(module, out_fd, in_fd, offobj, count);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(HAVE_SENDFILE) && !defined(__APPLE__) && !(defined(__FreeBSD__) || defined(__DragonFly__)) */
+
 #if defined(__APPLE__)
 
 PyDoc_STRVAR(os__fcopyfile__doc__,
-"_fcopyfile($module, infd, outfd, flags, /)\n"
+"_fcopyfile($module, in_fd, out_fd, flags, /)\n"
 "--\n"
 "\n"
 "Efficiently copy content or metadata of 2 regular file descriptors (macOS).");
@@ -4987,14 +5517,14 @@
     {"_fcopyfile", (PyCFunction)(void(*)(void))os__fcopyfile, METH_FASTCALL, os__fcopyfile__doc__},
 
 static PyObject *
-os__fcopyfile_impl(PyObject *module, int infd, int outfd, int flags);
+os__fcopyfile_impl(PyObject *module, int in_fd, int out_fd, int flags);
 
 static PyObject *
 os__fcopyfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 {
     PyObject *return_value = NULL;
-    int infd;
-    int outfd;
+    int in_fd;
+    int out_fd;
     int flags;
 
     if (!_PyArg_CheckPositional("_fcopyfile", nargs, 3, 3)) {
@@ -5005,8 +5535,8 @@
                         "integer argument expected, got float" );
         goto exit;
     }
-    infd = _PyLong_AsInt(args[0]);
-    if (infd == -1 && PyErr_Occurred()) {
+    in_fd = _PyLong_AsInt(args[0]);
+    if (in_fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
     if (PyFloat_Check(args[1])) {
@@ -5014,8 +5544,8 @@
                         "integer argument expected, got float" );
         goto exit;
     }
-    outfd = _PyLong_AsInt(args[1]);
-    if (outfd == -1 && PyErr_Occurred()) {
+    out_fd = _PyLong_AsInt(args[1]);
+    if (out_fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
     if (PyFloat_Check(args[2])) {
@@ -5027,7 +5557,7 @@
     if (flags == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    return_value = os__fcopyfile_impl(module, infd, outfd, flags);
+    return_value = os__fcopyfile_impl(module, in_fd, out_fd, flags);
 
 exit:
     return return_value;
@@ -5988,7 +6518,7 @@
 
 #endif /* (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */
 
-#if defined(HAVE_PUTENV) && defined(MS_WINDOWS)
+#if defined(MS_WINDOWS)
 
 PyDoc_STRVAR(os_putenv__doc__,
 "putenv($module, name, value, /)\n"
@@ -6034,9 +6564,9 @@
     return return_value;
 }
 
-#endif /* defined(HAVE_PUTENV) && defined(MS_WINDOWS) */
+#endif /* defined(MS_WINDOWS) */
 
-#if defined(HAVE_PUTENV) && !defined(MS_WINDOWS)
+#if !defined(MS_WINDOWS)
 
 PyDoc_STRVAR(os_putenv__doc__,
 "putenv($module, name, value, /)\n"
@@ -6077,9 +6607,45 @@
     return return_value;
 }
 
-#endif /* defined(HAVE_PUTENV) && !defined(MS_WINDOWS) */
+#endif /* !defined(MS_WINDOWS) */
 
-#if defined(HAVE_UNSETENV)
+#if defined(MS_WINDOWS)
+
+PyDoc_STRVAR(os_unsetenv__doc__,
+"unsetenv($module, name, /)\n"
+"--\n"
+"\n"
+"Delete an environment variable.");
+
+#define OS_UNSETENV_METHODDEF    \
+    {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__},
+
+static PyObject *
+os_unsetenv_impl(PyObject *module, PyObject *name);
+
+static PyObject *
+os_unsetenv(PyObject *module, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    PyObject *name;
+
+    if (!PyUnicode_Check(arg)) {
+        _PyArg_BadArgument("unsetenv", "argument", "str", arg);
+        goto exit;
+    }
+    if (PyUnicode_READY(arg) == -1) {
+        goto exit;
+    }
+    name = arg;
+    return_value = os_unsetenv_impl(module, name);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(MS_WINDOWS) */
+
+#if !defined(MS_WINDOWS)
 
 PyDoc_STRVAR(os_unsetenv__doc__,
 "unsetenv($module, name, /)\n"
@@ -6111,7 +6677,7 @@
     return return_value;
 }
 
-#endif /* defined(HAVE_UNSETENV) */
+#endif /* !defined(MS_WINDOWS) */
 
 PyDoc_STRVAR(os_strerror__doc__,
 "strerror($module, code, /)\n"
@@ -7486,6 +8052,62 @@
 
 #endif /* defined(HAVE_MEMFD_CREATE) */
 
+#if (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL))
+
+PyDoc_STRVAR(os_get_terminal_size__doc__,
+"get_terminal_size($module, fd=<unrepresentable>, /)\n"
+"--\n"
+"\n"
+"Return the size of the terminal window as (columns, lines).\n"
+"\n"
+"The optional argument fd (default standard output) specifies\n"
+"which file descriptor should be queried.\n"
+"\n"
+"If the file descriptor is not connected to a terminal, an OSError\n"
+"is thrown.\n"
+"\n"
+"This function will only be defined if an implementation is\n"
+"available for this system.\n"
+"\n"
+"shutil.get_terminal_size is the high-level function which should\n"
+"normally be used, os.get_terminal_size is the low-level implementation.");
+
+#define OS_GET_TERMINAL_SIZE_METHODDEF    \
+    {"get_terminal_size", (PyCFunction)(void(*)(void))os_get_terminal_size, METH_FASTCALL, os_get_terminal_size__doc__},
+
+static PyObject *
+os_get_terminal_size_impl(PyObject *module, int fd);
+
+static PyObject *
+os_get_terminal_size(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    int fd = fileno(stdout);
+
+    if (!_PyArg_CheckPositional("get_terminal_size", nargs, 0, 1)) {
+        goto exit;
+    }
+    if (nargs < 1) {
+        goto skip_optional;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    fd = _PyLong_AsInt(args[0]);
+    if (fd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+skip_optional:
+    return_value = os_get_terminal_size_impl(module, fd);
+
+exit:
+    return return_value;
+}
+
+#endif /* (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) */
+
 PyDoc_STRVAR(os_cpu_count__doc__,
 "cpu_count($module, /)\n"
 "--\n"
@@ -7766,18 +8388,24 @@
 "Return True if the entry is a symbolic link; cached per entry.");
 
 #define OS_DIRENTRY_IS_SYMLINK_METHODDEF    \
-    {"is_symlink", (PyCFunction)os_DirEntry_is_symlink, METH_NOARGS, os_DirEntry_is_symlink__doc__},
+    {"is_symlink", (PyCFunction)(void(*)(void))os_DirEntry_is_symlink, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_symlink__doc__},
 
 static int
-os_DirEntry_is_symlink_impl(DirEntry *self);
+os_DirEntry_is_symlink_impl(DirEntry *self, PyTypeObject *defining_class);
 
 static PyObject *
-os_DirEntry_is_symlink(DirEntry *self, PyObject *Py_UNUSED(ignored))
+os_DirEntry_is_symlink(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
+    static const char * const _keywords[] = { NULL};
+    static _PyArg_Parser _parser = {":is_symlink", _keywords, 0};
     int _return_value;
 
-    _return_value = os_DirEntry_is_symlink_impl(self);
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser
+        )) {
+        goto exit;
+    }
+    _return_value = os_DirEntry_is_symlink_impl(self, defining_class);
     if ((_return_value == -1) && PyErr_Occurred()) {
         goto exit;
     }
@@ -7794,34 +8422,25 @@
 "Return stat_result object for the entry; cached per entry.");
 
 #define OS_DIRENTRY_STAT_METHODDEF    \
-    {"stat", (PyCFunction)(void(*)(void))os_DirEntry_stat, METH_FASTCALL|METH_KEYWORDS, os_DirEntry_stat__doc__},
+    {"stat", (PyCFunction)(void(*)(void))os_DirEntry_stat, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_stat__doc__},
 
 static PyObject *
-os_DirEntry_stat_impl(DirEntry *self, int follow_symlinks);
+os_DirEntry_stat_impl(DirEntry *self, PyTypeObject *defining_class,
+                      int follow_symlinks);
 
 static PyObject *
-os_DirEntry_stat(DirEntry *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+os_DirEntry_stat(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
     static const char * const _keywords[] = {"follow_symlinks", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "stat", 0};
-    PyObject *argsbuf[1];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    static _PyArg_Parser _parser = {"|$p:stat", _keywords, 0};
     int follow_symlinks = 1;
 
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
-    if (!args) {
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
+        &follow_symlinks)) {
         goto exit;
     }
-    if (!noptargs) {
-        goto skip_optional_kwonly;
-    }
-    follow_symlinks = PyObject_IsTrue(args[0]);
-    if (follow_symlinks < 0) {
-        goto exit;
-    }
-skip_optional_kwonly:
-    return_value = os_DirEntry_stat_impl(self, follow_symlinks);
+    return_value = os_DirEntry_stat_impl(self, defining_class, follow_symlinks);
 
 exit:
     return return_value;
@@ -7834,35 +8453,26 @@
 "Return True if the entry is a directory; cached per entry.");
 
 #define OS_DIRENTRY_IS_DIR_METHODDEF    \
-    {"is_dir", (PyCFunction)(void(*)(void))os_DirEntry_is_dir, METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_dir__doc__},
+    {"is_dir", (PyCFunction)(void(*)(void))os_DirEntry_is_dir, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_dir__doc__},
 
 static int
-os_DirEntry_is_dir_impl(DirEntry *self, int follow_symlinks);
+os_DirEntry_is_dir_impl(DirEntry *self, PyTypeObject *defining_class,
+                        int follow_symlinks);
 
 static PyObject *
-os_DirEntry_is_dir(DirEntry *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+os_DirEntry_is_dir(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
     static const char * const _keywords[] = {"follow_symlinks", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "is_dir", 0};
-    PyObject *argsbuf[1];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    static _PyArg_Parser _parser = {"|$p:is_dir", _keywords, 0};
     int follow_symlinks = 1;
     int _return_value;
 
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
-    if (!args) {
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
+        &follow_symlinks)) {
         goto exit;
     }
-    if (!noptargs) {
-        goto skip_optional_kwonly;
-    }
-    follow_symlinks = PyObject_IsTrue(args[0]);
-    if (follow_symlinks < 0) {
-        goto exit;
-    }
-skip_optional_kwonly:
-    _return_value = os_DirEntry_is_dir_impl(self, follow_symlinks);
+    _return_value = os_DirEntry_is_dir_impl(self, defining_class, follow_symlinks);
     if ((_return_value == -1) && PyErr_Occurred()) {
         goto exit;
     }
@@ -7879,35 +8489,26 @@
 "Return True if the entry is a file; cached per entry.");
 
 #define OS_DIRENTRY_IS_FILE_METHODDEF    \
-    {"is_file", (PyCFunction)(void(*)(void))os_DirEntry_is_file, METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_file__doc__},
+    {"is_file", (PyCFunction)(void(*)(void))os_DirEntry_is_file, METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_file__doc__},
 
 static int
-os_DirEntry_is_file_impl(DirEntry *self, int follow_symlinks);
+os_DirEntry_is_file_impl(DirEntry *self, PyTypeObject *defining_class,
+                         int follow_symlinks);
 
 static PyObject *
-os_DirEntry_is_file(DirEntry *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+os_DirEntry_is_file(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
     static const char * const _keywords[] = {"follow_symlinks", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "is_file", 0};
-    PyObject *argsbuf[1];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
+    static _PyArg_Parser _parser = {"|$p:is_file", _keywords, 0};
     int follow_symlinks = 1;
     int _return_value;
 
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
-    if (!args) {
+    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
+        &follow_symlinks)) {
         goto exit;
     }
-    if (!noptargs) {
-        goto skip_optional_kwonly;
-    }
-    follow_symlinks = PyObject_IsTrue(args[0]);
-    if (follow_symlinks < 0) {
-        goto exit;
-    }
-skip_optional_kwonly:
-    _return_value = os_DirEntry_is_file_impl(self, follow_symlinks);
+    _return_value = os_DirEntry_is_file_impl(self, defining_class, follow_symlinks);
     if ((_return_value == -1) && PyErr_Occurred()) {
         goto exit;
     }
@@ -8192,6 +8793,54 @@
 
 #endif /* defined(MS_WINDOWS) */
 
+#if (defined(WIFEXITED) || defined(MS_WINDOWS))
+
+PyDoc_STRVAR(os_waitstatus_to_exitcode__doc__,
+"waitstatus_to_exitcode($module, /, status)\n"
+"--\n"
+"\n"
+"Convert a wait status to an exit code.\n"
+"\n"
+"On Unix:\n"
+"\n"
+"* If WIFEXITED(status) is true, return WEXITSTATUS(status).\n"
+"* If WIFSIGNALED(status) is true, return -WTERMSIG(status).\n"
+"* Otherwise, raise a ValueError.\n"
+"\n"
+"On Windows, return status shifted right by 8 bits.\n"
+"\n"
+"On Unix, if the process is being traced or if waitpid() was called with\n"
+"WUNTRACED option, the caller must first check if WIFSTOPPED(status) is true.\n"
+"This function must not be called if WIFSTOPPED(status) is true.");
+
+#define OS_WAITSTATUS_TO_EXITCODE_METHODDEF    \
+    {"waitstatus_to_exitcode", (PyCFunction)(void(*)(void))os_waitstatus_to_exitcode, METH_FASTCALL|METH_KEYWORDS, os_waitstatus_to_exitcode__doc__},
+
+static PyObject *
+os_waitstatus_to_exitcode_impl(PyObject *module, PyObject *status_obj);
+
+static PyObject *
+os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+    PyObject *return_value = NULL;
+    static const char * const _keywords[] = {"status", NULL};
+    static _PyArg_Parser _parser = {NULL, _keywords, "waitstatus_to_exitcode", 0};
+    PyObject *argsbuf[1];
+    PyObject *status_obj;
+
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    status_obj = args[0];
+    return_value = os_waitstatus_to_exitcode_impl(module, status_obj);
+
+exit:
+    return return_value;
+}
+
+#endif /* (defined(WIFEXITED) || defined(MS_WINDOWS)) */
+
 #ifndef OS_TTYNAME_METHODDEF
     #define OS_TTYNAME_METHODDEF
 #endif /* !defined(OS_TTYNAME_METHODDEF) */
@@ -8384,10 +9033,18 @@
     #define OS_GETPID_METHODDEF
 #endif /* !defined(OS_GETPID_METHODDEF) */
 
+#ifndef OS_GETGROUPLIST_METHODDEF
+    #define OS_GETGROUPLIST_METHODDEF
+#endif /* !defined(OS_GETGROUPLIST_METHODDEF) */
+
 #ifndef OS_GETGROUPS_METHODDEF
     #define OS_GETGROUPS_METHODDEF
 #endif /* !defined(OS_GETGROUPS_METHODDEF) */
 
+#ifndef OS_INITGROUPS_METHODDEF
+    #define OS_INITGROUPS_METHODDEF
+#endif /* !defined(OS_INITGROUPS_METHODDEF) */
+
 #ifndef OS_GETPGID_METHODDEF
     #define OS_GETPGID_METHODDEF
 #endif /* !defined(OS_GETPGID_METHODDEF) */
@@ -8472,6 +9129,10 @@
     #define OS_WAIT_METHODDEF
 #endif /* !defined(OS_WAIT_METHODDEF) */
 
+#ifndef OS_PIDFD_OPEN_METHODDEF
+    #define OS_PIDFD_OPEN_METHODDEF
+#endif /* !defined(OS_PIDFD_OPEN_METHODDEF) */
+
 #ifndef OS_READLINK_METHODDEF
     #define OS_READLINK_METHODDEF
 #endif /* !defined(OS_READLINK_METHODDEF) */
@@ -8520,6 +9181,10 @@
     #define OS_PREADV_METHODDEF
 #endif /* !defined(OS_PREADV_METHODDEF) */
 
+#ifndef OS_SENDFILE_METHODDEF
+    #define OS_SENDFILE_METHODDEF
+#endif /* !defined(OS_SENDFILE_METHODDEF) */
+
 #ifndef OS__FCOPYFILE_METHODDEF
     #define OS__FCOPYFILE_METHODDEF
 #endif /* !defined(OS__FCOPYFILE_METHODDEF) */
@@ -8696,6 +9361,10 @@
     #define OS_MEMFD_CREATE_METHODDEF
 #endif /* !defined(OS_MEMFD_CREATE_METHODDEF) */
 
+#ifndef OS_GET_TERMINAL_SIZE_METHODDEF
+    #define OS_GET_TERMINAL_SIZE_METHODDEF
+#endif /* !defined(OS_GET_TERMINAL_SIZE_METHODDEF) */
+
 #ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF
     #define OS_GET_HANDLE_INHERITABLE_METHODDEF
 #endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */
@@ -8723,4 +9392,8 @@
 #ifndef OS__REMOVE_DLL_DIRECTORY_METHODDEF
     #define OS__REMOVE_DLL_DIRECTORY_METHODDEF
 #endif /* !defined(OS__REMOVE_DLL_DIRECTORY_METHODDEF) */
-/*[clinic end generated code: output=edb5a840b51fcaa8 input=a9049054013a1b77]*/
+
+#ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF
+    #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF
+#endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */
+/*[clinic end generated code: output=005919eaaef3f8e6 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/selectmodule.c.h b/Modules/clinic/selectmodule.c.h
index a9e1484..c1072e6 100644
--- a/Modules/clinic/selectmodule.c.h
+++ b/Modules/clinic/selectmodule.c.h
@@ -963,11 +963,11 @@
 {
     PyObject *return_value = NULL;
 
-    if ((type == &kqueue_queue_Type) &&
+    if ((type == _selectstate_global->kqueue_queue_Type) &&
         !_PyArg_NoPositional("kqueue", args)) {
         goto exit;
     }
-    if ((type == &kqueue_queue_Type) &&
+    if ((type == _selectstate_global->kqueue_queue_Type) &&
         !_PyArg_NoKeywords("kqueue", kwargs)) {
         goto exit;
     }
@@ -1219,4 +1219,4 @@
 #ifndef SELECT_KQUEUE_CONTROL_METHODDEF
     #define SELECT_KQUEUE_CONTROL_METHODDEF
 #endif /* !defined(SELECT_KQUEUE_CONTROL_METHODDEF) */
-/*[clinic end generated code: output=86010dde10ca89c6 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ef42c3485a8fe3a0 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h
index 001c6af..fc37b1a 100644
--- a/Modules/clinic/sha1module.c.h
+++ b/Modules/clinic/sha1module.c.h
@@ -66,7 +66,7 @@
     {"update", (PyCFunction)SHA1Type_update, METH_O, SHA1Type_update__doc__},
 
 PyDoc_STRVAR(_sha1_sha1__doc__,
-"sha1($module, /, string=b\'\')\n"
+"sha1($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new SHA1 hash object; optionally initialized with a string.");
@@ -75,17 +75,18 @@
     {"sha1", (PyCFunction)(void(*)(void))_sha1_sha1, METH_FASTCALL|METH_KEYWORDS, _sha1_sha1__doc__},
 
 static PyObject *
-_sha1_sha1_impl(PyObject *module, PyObject *string);
+_sha1_sha1_impl(PyObject *module, PyObject *string, int usedforsecurity);
 
 static PyObject *
 _sha1_sha1(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "sha1", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *string = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -94,11 +95,24 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    string = args[0];
+    if (args[0]) {
+        string = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _sha1_sha1_impl(module, string);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _sha1_sha1_impl(module, string, usedforsecurity);
 
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=1ae7e73ec84a27d5 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=3ddd637ae17e14b3 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h
index 658abb1..2a788ea 100644
--- a/Modules/clinic/sha256module.c.h
+++ b/Modules/clinic/sha256module.c.h
@@ -66,7 +66,7 @@
     {"update", (PyCFunction)SHA256Type_update, METH_O, SHA256Type_update__doc__},
 
 PyDoc_STRVAR(_sha256_sha256__doc__,
-"sha256($module, /, string=b\'\')\n"
+"sha256($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new SHA-256 hash object; optionally initialized with a string.");
@@ -75,17 +75,18 @@
     {"sha256", (PyCFunction)(void(*)(void))_sha256_sha256, METH_FASTCALL|METH_KEYWORDS, _sha256_sha256__doc__},
 
 static PyObject *
-_sha256_sha256_impl(PyObject *module, PyObject *string);
+_sha256_sha256_impl(PyObject *module, PyObject *string, int usedforsecurity);
 
 static PyObject *
 _sha256_sha256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "sha256", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *string = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -94,16 +95,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    string = args[0];
+    if (args[0]) {
+        string = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _sha256_sha256_impl(module, string);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _sha256_sha256_impl(module, string, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_sha256_sha224__doc__,
-"sha224($module, /, string=b\'\')\n"
+"sha224($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new SHA-224 hash object; optionally initialized with a string.");
@@ -112,17 +126,18 @@
     {"sha224", (PyCFunction)(void(*)(void))_sha256_sha224, METH_FASTCALL|METH_KEYWORDS, _sha256_sha224__doc__},
 
 static PyObject *
-_sha256_sha224_impl(PyObject *module, PyObject *string);
+_sha256_sha224_impl(PyObject *module, PyObject *string, int usedforsecurity);
 
 static PyObject *
 _sha256_sha224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "sha224", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *string = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -131,11 +146,24 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    string = args[0];
+    if (args[0]) {
+        string = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _sha256_sha224_impl(module, string);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _sha256_sha224_impl(module, string, usedforsecurity);
 
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=c54d0956ec88409d input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c8cca8adbe72ec9a input=a9049054013a1b77]*/
diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h
index 459a934..b8185b6 100644
--- a/Modules/clinic/sha512module.c.h
+++ b/Modules/clinic/sha512module.c.h
@@ -66,7 +66,7 @@
     {"update", (PyCFunction)SHA512Type_update, METH_O, SHA512Type_update__doc__},
 
 PyDoc_STRVAR(_sha512_sha512__doc__,
-"sha512($module, /, string=b\'\')\n"
+"sha512($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new SHA-512 hash object; optionally initialized with a string.");
@@ -75,17 +75,18 @@
     {"sha512", (PyCFunction)(void(*)(void))_sha512_sha512, METH_FASTCALL|METH_KEYWORDS, _sha512_sha512__doc__},
 
 static PyObject *
-_sha512_sha512_impl(PyObject *module, PyObject *string);
+_sha512_sha512_impl(PyObject *module, PyObject *string, int usedforsecurity);
 
 static PyObject *
 _sha512_sha512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "sha512", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *string = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -94,16 +95,29 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    string = args[0];
+    if (args[0]) {
+        string = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _sha512_sha512_impl(module, string);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _sha512_sha512_impl(module, string, usedforsecurity);
 
 exit:
     return return_value;
 }
 
 PyDoc_STRVAR(_sha512_sha384__doc__,
-"sha384($module, /, string=b\'\')\n"
+"sha384($module, /, string=b\'\', *, usedforsecurity=True)\n"
 "--\n"
 "\n"
 "Return a new SHA-384 hash object; optionally initialized with a string.");
@@ -112,17 +126,18 @@
     {"sha384", (PyCFunction)(void(*)(void))_sha512_sha384, METH_FASTCALL|METH_KEYWORDS, _sha512_sha384__doc__},
 
 static PyObject *
-_sha512_sha384_impl(PyObject *module, PyObject *string);
+_sha512_sha384_impl(PyObject *module, PyObject *string, int usedforsecurity);
 
 static PyObject *
 _sha512_sha384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"string", NULL};
+    static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "sha384", 0};
-    PyObject *argsbuf[1];
+    PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     PyObject *string = NULL;
+    int usedforsecurity = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     if (!args) {
@@ -131,11 +146,24 @@
     if (!noptargs) {
         goto skip_optional_pos;
     }
-    string = args[0];
+    if (args[0]) {
+        string = args[0];
+        if (!--noptargs) {
+            goto skip_optional_pos;
+        }
+    }
 skip_optional_pos:
-    return_value = _sha512_sha384_impl(module, string);
+    if (!noptargs) {
+        goto skip_optional_kwonly;
+    }
+    usedforsecurity = PyObject_IsTrue(args[1]);
+    if (usedforsecurity < 0) {
+        goto exit;
+    }
+skip_optional_kwonly:
+    return_value = _sha512_sha384_impl(module, string, usedforsecurity);
 
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=580df4b667084a7e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=bbfa72d8703c82b5 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h
index 3cb1db1..7f60e28 100644
--- a/Modules/clinic/signalmodule.c.h
+++ b/Modules/clinic/signalmodule.c.h
@@ -611,6 +611,76 @@
 
 #endif /* defined(HAVE_PTHREAD_KILL) */
 
+#if (defined(__linux__) && defined(__NR_pidfd_send_signal))
+
+PyDoc_STRVAR(signal_pidfd_send_signal__doc__,
+"pidfd_send_signal($module, pidfd, signalnum, siginfo=None, flags=0, /)\n"
+"--\n"
+"\n"
+"Send a signal to a process referred to by a pid file descriptor.");
+
+#define SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF    \
+    {"pidfd_send_signal", (PyCFunction)(void(*)(void))signal_pidfd_send_signal, METH_FASTCALL, signal_pidfd_send_signal__doc__},
+
+static PyObject *
+signal_pidfd_send_signal_impl(PyObject *module, int pidfd, int signalnum,
+                              PyObject *siginfo, int flags);
+
+static PyObject *
+signal_pidfd_send_signal(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    int pidfd;
+    int signalnum;
+    PyObject *siginfo = Py_None;
+    int flags = 0;
+
+    if (!_PyArg_CheckPositional("pidfd_send_signal", nargs, 2, 4)) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[0])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    pidfd = _PyLong_AsInt(args[0]);
+    if (pidfd == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (PyFloat_Check(args[1])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    signalnum = _PyLong_AsInt(args[1]);
+    if (signalnum == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (nargs < 3) {
+        goto skip_optional;
+    }
+    siginfo = args[2];
+    if (nargs < 4) {
+        goto skip_optional;
+    }
+    if (PyFloat_Check(args[3])) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        goto exit;
+    }
+    flags = _PyLong_AsInt(args[3]);
+    if (flags == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+skip_optional:
+    return_value = signal_pidfd_send_signal_impl(module, pidfd, signalnum, siginfo, flags);
+
+exit:
+    return return_value;
+}
+
+#endif /* (defined(__linux__) && defined(__NR_pidfd_send_signal)) */
+
 #ifndef SIGNAL_ALARM_METHODDEF
     #define SIGNAL_ALARM_METHODDEF
 #endif /* !defined(SIGNAL_ALARM_METHODDEF) */
@@ -658,4 +728,8 @@
 #ifndef SIGNAL_PTHREAD_KILL_METHODDEF
     #define SIGNAL_PTHREAD_KILL_METHODDEF
 #endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */
-/*[clinic end generated code: output=3320b8f73c20ba60 input=a9049054013a1b77]*/
+
+#ifndef SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
+    #define SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
+#endif /* !defined(SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF) */
+/*[clinic end generated code: output=b41b4b6bd9ad4da2 input=a9049054013a1b77]*/
diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c
index 02c09bb..5eac4b4 100644
--- a/Modules/cmathmodule.c
+++ b/Modules/cmathmodule.c
@@ -3,6 +3,7 @@
 /* much code borrowed from mathmodule.c */
 
 #include "Python.h"
+#include "pycore_dtoa.h"
 #include "_math.h"
 /* we need DBL_MAX, DBL_MIN, DBL_EPSILON, DBL_MANT_DIG and FLT_RADIX from
    float.h.  We assume that FLT_RADIX is either 2 or 16. */
@@ -17,7 +18,7 @@
 /*[python input]
 class Py_complex_protected_converter(Py_complex_converter):
     def modify(self):
-        return 'errno = 0; PyFPE_START_PROTECT("complex function", goto exit);'
+        return 'errno = 0;'
 
 
 class Py_complex_protected_return_converter(CReturnConverter):
@@ -26,7 +27,6 @@
     def render(self, function, data):
         self.declare(data)
         data.return_conversion.append("""
-PyFPE_END_PROTECT(_return_value);
 if (errno == EDOM) {
     PyErr_SetString(PyExc_ValueError, "math domain error");
     goto exit;
@@ -40,7 +40,7 @@
 }
 """.strip())
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=345daa075b1028e7]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=8b27adb674c08321]*/
 
 #if (FLT_RADIX != 2 && FLT_RADIX != 16)
 #error "Modules/cmathmodule.c expects FLT_RADIX to be 2 or 16"
@@ -960,7 +960,6 @@
     Py_complex y;
 
     errno = 0;
-    PyFPE_START_PROTECT("complex function", return 0)
     x = c_log(x);
     if (y_obj != NULL) {
         y = PyComplex_AsCComplex(y_obj);
@@ -970,7 +969,6 @@
         y = c_log(y);
         x = _Py_c_quot(x, y);
     }
-    PyFPE_END_PROTECT(x)
     if (errno != 0)
         return math_error();
     return PyComplex_FromCComplex(x);
@@ -1008,9 +1006,7 @@
     double phi;
 
     errno = 0;
-    PyFPE_START_PROTECT("arg function", return 0)
     phi = c_atan2(z);
-    PyFPE_END_PROTECT(phi)
     if (errno != 0)
         return math_error();
     else
@@ -1035,10 +1031,8 @@
     double r, phi;
 
     errno = 0;
-    PyFPE_START_PROTECT("polar function", return 0)
     phi = c_atan2(z); /* should not cause any exception */
     r = _Py_c_abs(z); /* sets errno to ERANGE on overflow */
-    PyFPE_END_PROTECT(r)
     if (errno != 0)
         return math_error();
     else
@@ -1074,7 +1068,6 @@
 {
     Py_complex z;
     errno = 0;
-    PyFPE_START_PROTECT("rect function", return 0)
 
     /* deal with special values */
     if (!Py_IS_FINITE(r) || !Py_IS_FINITE(phi)) {
@@ -1116,7 +1109,6 @@
         errno = 0;
     }
 
-    PyFPE_END_PROTECT(z)
     if (errno != 0)
         return math_error();
     else
diff --git a/Modules/errnomodule.c b/Modules/errnomodule.c
index 06ed53a..d99bed4 100644
--- a/Modules/errnomodule.c
+++ b/Modules/errnomodule.c
@@ -46,26 +46,890 @@
 
 /* Helper function doing the dictionary inserting */
 
-static void
-_inscode(PyObject *d, PyObject *de, const char *name, int code)
+static int
+_add_errcode(PyObject *module_dict, PyObject *error_dict, const char *name_str, int code_int)
 {
-    PyObject *u = PyUnicode_FromString(name);
-    PyObject *v = PyLong_FromLong((long) code);
-
-    /* Don't bother checking for errors; they'll be caught at the end
-     * of the module initialization function by the caller of
-     * initerrno().
-     */
-    if (u && v) {
-        /* insert in modules dict */
-        PyDict_SetItem(d, u, v);
-        /* insert in errorcode dict */
-        PyDict_SetItem(de, v, u);
+    PyObject *name = PyUnicode_FromString(name_str);
+    if (!name) {
+        return -1;
     }
-    Py_XDECREF(u);
-    Py_XDECREF(v);
+
+    PyObject *code = PyLong_FromLong(code_int);
+    if (!code) {
+        Py_DECREF(name);
+        return -1;
+    }
+
+    int ret = -1;
+    /* insert in modules dict */
+    if (PyDict_SetItem(module_dict, name, code) < 0) {
+        goto end;
+    }
+    /* insert in errorcode dict */
+    if (PyDict_SetItem(error_dict, code, name) < 0) {
+        goto end;
+    }
+    ret = 0;
+end:
+    Py_DECREF(name);
+    Py_DECREF(code);
+    return ret;
 }
 
+static int
+errno_exec(PyObject *module)
+{
+    PyObject *module_dict = PyModule_GetDict(module);
+    PyObject *error_dict = PyDict_New();
+    if (!module_dict || !error_dict) {
+        return -1;
+    }
+    if (PyDict_SetItemString(module_dict, "errorcode", error_dict) < 0) {
+        Py_DECREF(error_dict);
+        return -1;
+    }
+
+/* Macro so I don't have to edit each and every line below... */
+#define add_errcode(name, code, comment)                               \
+    do {                                                               \
+        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
+            Py_DECREF(error_dict);                                     \
+            return -1;                                                 \
+        }                                                              \
+    } while (0);
+
+    /*
+     * The names and comments are borrowed from linux/include/errno.h,
+     * which should be pretty all-inclusive.  However, the Solaris specific
+     * names and comments are borrowed from sys/errno.h in Solaris.
+     * MacOSX specific names and comments are borrowed from sys/errno.h in
+     * MacOSX.
+     */
+
+#ifdef ENODEV
+    add_errcode("ENODEV", ENODEV, "No such device");
+#endif
+#ifdef ENOCSI
+    add_errcode("ENOCSI", ENOCSI, "No CSI structure available");
+#endif
+#ifdef EHOSTUNREACH
+    add_errcode("EHOSTUNREACH", EHOSTUNREACH, "No route to host");
+#else
+#ifdef WSAEHOSTUNREACH
+    add_errcode("EHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
+#endif
+#endif
+#ifdef ENOMSG
+    add_errcode("ENOMSG", ENOMSG, "No message of desired type");
+#endif
+#ifdef EUCLEAN
+    add_errcode("EUCLEAN", EUCLEAN, "Structure needs cleaning");
+#endif
+#ifdef EL2NSYNC
+    add_errcode("EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
+#endif
+#ifdef EL2HLT
+    add_errcode("EL2HLT", EL2HLT, "Level 2 halted");
+#endif
+#ifdef ENODATA
+    add_errcode("ENODATA", ENODATA, "No data available");
+#endif
+#ifdef ENOTBLK
+    add_errcode("ENOTBLK", ENOTBLK, "Block device required");
+#endif
+#ifdef ENOSYS
+    add_errcode("ENOSYS", ENOSYS, "Function not implemented");
+#endif
+#ifdef EPIPE
+    add_errcode("EPIPE", EPIPE, "Broken pipe");
+#endif
+#ifdef EINVAL
+    add_errcode("EINVAL", EINVAL, "Invalid argument");
+#else
+#ifdef WSAEINVAL
+    add_errcode("EINVAL", WSAEINVAL, "Invalid argument");
+#endif
+#endif
+#ifdef EOVERFLOW
+    add_errcode("EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
+#endif
+#ifdef EADV
+    add_errcode("EADV", EADV, "Advertise error");
+#endif
+#ifdef EINTR
+    add_errcode("EINTR", EINTR, "Interrupted system call");
+#else
+#ifdef WSAEINTR
+    add_errcode("EINTR", WSAEINTR, "Interrupted system call");
+#endif
+#endif
+#ifdef EUSERS
+    add_errcode("EUSERS", EUSERS, "Too many users");
+#else
+#ifdef WSAEUSERS
+    add_errcode("EUSERS", WSAEUSERS, "Too many users");
+#endif
+#endif
+#ifdef ENOTEMPTY
+    add_errcode("ENOTEMPTY", ENOTEMPTY, "Directory not empty");
+#else
+#ifdef WSAENOTEMPTY
+    add_errcode("ENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
+#endif
+#endif
+#ifdef ENOBUFS
+    add_errcode("ENOBUFS", ENOBUFS, "No buffer space available");
+#else
+#ifdef WSAENOBUFS
+    add_errcode("ENOBUFS", WSAENOBUFS, "No buffer space available");
+#endif
+#endif
+#ifdef EPROTO
+    add_errcode("EPROTO", EPROTO, "Protocol error");
+#endif
+#ifdef EREMOTE
+    add_errcode("EREMOTE", EREMOTE, "Object is remote");
+#else
+#ifdef WSAEREMOTE
+    add_errcode("EREMOTE", WSAEREMOTE, "Object is remote");
+#endif
+#endif
+#ifdef ENAVAIL
+    add_errcode("ENAVAIL", ENAVAIL, "No XENIX semaphores available");
+#endif
+#ifdef ECHILD
+    add_errcode("ECHILD", ECHILD, "No child processes");
+#endif
+#ifdef ELOOP
+    add_errcode("ELOOP", ELOOP, "Too many symbolic links encountered");
+#else
+#ifdef WSAELOOP
+    add_errcode("ELOOP", WSAELOOP, "Too many symbolic links encountered");
+#endif
+#endif
+#ifdef EXDEV
+    add_errcode("EXDEV", EXDEV, "Cross-device link");
+#endif
+#ifdef E2BIG
+    add_errcode("E2BIG", E2BIG, "Arg list too long");
+#endif
+#ifdef ESRCH
+    add_errcode("ESRCH", ESRCH, "No such process");
+#endif
+#ifdef EMSGSIZE
+    add_errcode("EMSGSIZE", EMSGSIZE, "Message too long");
+#else
+#ifdef WSAEMSGSIZE
+    add_errcode("EMSGSIZE", WSAEMSGSIZE, "Message too long");
+#endif
+#endif
+#ifdef EAFNOSUPPORT
+    add_errcode("EAFNOSUPPORT", EAFNOSUPPORT, "Address family not supported by protocol");
+#else
+#ifdef WSAEAFNOSUPPORT
+    add_errcode("EAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
+#endif
+#endif
+#ifdef EBADR
+    add_errcode("EBADR", EBADR, "Invalid request descriptor");
+#endif
+#ifdef EHOSTDOWN
+    add_errcode("EHOSTDOWN", EHOSTDOWN, "Host is down");
+#else
+#ifdef WSAEHOSTDOWN
+    add_errcode("EHOSTDOWN", WSAEHOSTDOWN, "Host is down");
+#endif
+#endif
+#ifdef EPFNOSUPPORT
+    add_errcode("EPFNOSUPPORT", EPFNOSUPPORT, "Protocol family not supported");
+#else
+#ifdef WSAEPFNOSUPPORT
+    add_errcode("EPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
+#endif
+#endif
+#ifdef ENOPROTOOPT
+    add_errcode("ENOPROTOOPT", ENOPROTOOPT, "Protocol not available");
+#else
+#ifdef WSAENOPROTOOPT
+    add_errcode("ENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
+#endif
+#endif
+#ifdef EBUSY
+    add_errcode("EBUSY", EBUSY, "Device or resource busy");
+#endif
+#ifdef EWOULDBLOCK
+    add_errcode("EWOULDBLOCK", EWOULDBLOCK, "Operation would block");
+#else
+#ifdef WSAEWOULDBLOCK
+    add_errcode("EWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
+#endif
+#endif
+#ifdef EBADFD
+    add_errcode("EBADFD", EBADFD, "File descriptor in bad state");
+#endif
+#ifdef EDOTDOT
+    add_errcode("EDOTDOT", EDOTDOT, "RFS specific error");
+#endif
+#ifdef EISCONN
+    add_errcode("EISCONN", EISCONN, "Transport endpoint is already connected");
+#else
+#ifdef WSAEISCONN
+    add_errcode("EISCONN", WSAEISCONN, "Transport endpoint is already connected");
+#endif
+#endif
+#ifdef ENOANO
+    add_errcode("ENOANO", ENOANO, "No anode");
+#endif
+#ifdef ESHUTDOWN
+    add_errcode("ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown");
+#else
+#ifdef WSAESHUTDOWN
+    add_errcode("ESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
+#endif
+#endif
+#ifdef ECHRNG
+    add_errcode("ECHRNG", ECHRNG, "Channel number out of range");
+#endif
+#ifdef ELIBBAD
+    add_errcode("ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
+#endif
+#ifdef ENONET
+    add_errcode("ENONET", ENONET, "Machine is not on the network");
+#endif
+#ifdef EBADE
+    add_errcode("EBADE", EBADE, "Invalid exchange");
+#endif
+#ifdef EBADF
+    add_errcode("EBADF", EBADF, "Bad file number");
+#else
+#ifdef WSAEBADF
+    add_errcode("EBADF", WSAEBADF, "Bad file number");
+#endif
+#endif
+#ifdef EMULTIHOP
+    add_errcode("EMULTIHOP", EMULTIHOP, "Multihop attempted");
+#endif
+#ifdef EIO
+    add_errcode("EIO", EIO, "I/O error");
+#endif
+#ifdef EUNATCH
+    add_errcode("EUNATCH", EUNATCH, "Protocol driver not attached");
+#endif
+#ifdef EPROTOTYPE
+    add_errcode("EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket");
+#else
+#ifdef WSAEPROTOTYPE
+    add_errcode("EPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
+#endif
+#endif
+#ifdef ENOSPC
+    add_errcode("ENOSPC", ENOSPC, "No space left on device");
+#endif
+#ifdef ENOEXEC
+    add_errcode("ENOEXEC", ENOEXEC, "Exec format error");
+#endif
+#ifdef EALREADY
+    add_errcode("EALREADY", EALREADY, "Operation already in progress");
+#else
+#ifdef WSAEALREADY
+    add_errcode("EALREADY", WSAEALREADY, "Operation already in progress");
+#endif
+#endif
+#ifdef ENETDOWN
+    add_errcode("ENETDOWN", ENETDOWN, "Network is down");
+#else
+#ifdef WSAENETDOWN
+    add_errcode("ENETDOWN", WSAENETDOWN, "Network is down");
+#endif
+#endif
+#ifdef ENOTNAM
+    add_errcode("ENOTNAM", ENOTNAM, "Not a XENIX named type file");
+#endif
+#ifdef EACCES
+    add_errcode("EACCES", EACCES, "Permission denied");
+#else
+#ifdef WSAEACCES
+    add_errcode("EACCES", WSAEACCES, "Permission denied");
+#endif
+#endif
+#ifdef ELNRNG
+    add_errcode("ELNRNG", ELNRNG, "Link number out of range");
+#endif
+#ifdef EILSEQ
+    add_errcode("EILSEQ", EILSEQ, "Illegal byte sequence");
+#endif
+#ifdef ENOTDIR
+    add_errcode("ENOTDIR", ENOTDIR, "Not a directory");
+#endif
+#ifdef ENOTUNIQ
+    add_errcode("ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
+#endif
+#ifdef EPERM
+    add_errcode("EPERM", EPERM, "Operation not permitted");
+#endif
+#ifdef EDOM
+    add_errcode("EDOM", EDOM, "Math argument out of domain of func");
+#endif
+#ifdef EXFULL
+    add_errcode("EXFULL", EXFULL, "Exchange full");
+#endif
+#ifdef ECONNREFUSED
+    add_errcode("ECONNREFUSED", ECONNREFUSED, "Connection refused");
+#else
+#ifdef WSAECONNREFUSED
+    add_errcode("ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
+#endif
+#endif
+#ifdef EISDIR
+    add_errcode("EISDIR", EISDIR, "Is a directory");
+#endif
+#ifdef EPROTONOSUPPORT
+    add_errcode("EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported");
+#else
+#ifdef WSAEPROTONOSUPPORT
+    add_errcode("EPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
+#endif
+#endif
+#ifdef EROFS
+    add_errcode("EROFS", EROFS, "Read-only file system");
+#endif
+#ifdef EADDRNOTAVAIL
+    add_errcode("EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address");
+#else
+#ifdef WSAEADDRNOTAVAIL
+    add_errcode("EADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
+#endif
+#endif
+#ifdef EIDRM
+    add_errcode("EIDRM", EIDRM, "Identifier removed");
+#endif
+#ifdef ECOMM
+    add_errcode("ECOMM", ECOMM, "Communication error on send");
+#endif
+#ifdef ESRMNT
+    add_errcode("ESRMNT", ESRMNT, "Srmount error");
+#endif
+#ifdef EREMOTEIO
+    add_errcode("EREMOTEIO", EREMOTEIO, "Remote I/O error");
+#endif
+#ifdef EL3RST
+    add_errcode("EL3RST", EL3RST, "Level 3 reset");
+#endif
+#ifdef EBADMSG
+    add_errcode("EBADMSG", EBADMSG, "Not a data message");
+#endif
+#ifdef ENFILE
+    add_errcode("ENFILE", ENFILE, "File table overflow");
+#endif
+#ifdef ELIBMAX
+    add_errcode("ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
+#endif
+#ifdef ESPIPE
+    add_errcode("ESPIPE", ESPIPE, "Illegal seek");
+#endif
+#ifdef ENOLINK
+    add_errcode("ENOLINK", ENOLINK, "Link has been severed");
+#endif
+#ifdef ENETRESET
+    add_errcode("ENETRESET", ENETRESET, "Network dropped connection because of reset");
+#else
+#ifdef WSAENETRESET
+    add_errcode("ENETRESET", WSAENETRESET, "Network dropped connection because of reset");
+#endif
+#endif
+#ifdef ETIMEDOUT
+    add_errcode("ETIMEDOUT", ETIMEDOUT, "Connection timed out");
+#else
+#ifdef WSAETIMEDOUT
+    add_errcode("ETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
+#endif
+#endif
+#ifdef ENOENT
+    add_errcode("ENOENT", ENOENT, "No such file or directory");
+#endif
+#ifdef EEXIST
+    add_errcode("EEXIST", EEXIST, "File exists");
+#endif
+#ifdef EDQUOT
+    add_errcode("EDQUOT", EDQUOT, "Quota exceeded");
+#else
+#ifdef WSAEDQUOT
+    add_errcode("EDQUOT", WSAEDQUOT, "Quota exceeded");
+#endif
+#endif
+#ifdef ENOSTR
+    add_errcode("ENOSTR", ENOSTR, "Device not a stream");
+#endif
+#ifdef EBADSLT
+    add_errcode("EBADSLT", EBADSLT, "Invalid slot");
+#endif
+#ifdef EBADRQC
+    add_errcode("EBADRQC", EBADRQC, "Invalid request code");
+#endif
+#ifdef ELIBACC
+    add_errcode("ELIBACC", ELIBACC, "Can not access a needed shared library");
+#endif
+#ifdef EFAULT
+    add_errcode("EFAULT", EFAULT, "Bad address");
+#else
+#ifdef WSAEFAULT
+    add_errcode("EFAULT", WSAEFAULT, "Bad address");
+#endif
+#endif
+#ifdef EFBIG
+    add_errcode("EFBIG", EFBIG, "File too large");
+#endif
+#ifdef EDEADLK
+    add_errcode("EDEADLK", EDEADLK, "Resource deadlock would occur");
+#endif
+#ifdef ENOTCONN
+    add_errcode("ENOTCONN", ENOTCONN, "Transport endpoint is not connected");
+#else
+#ifdef WSAENOTCONN
+    add_errcode("ENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
+#endif
+#endif
+#ifdef EDESTADDRREQ
+    add_errcode("EDESTADDRREQ", EDESTADDRREQ, "Destination address required");
+#else
+#ifdef WSAEDESTADDRREQ
+    add_errcode("EDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
+#endif
+#endif
+#ifdef ELIBSCN
+    add_errcode("ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
+#endif
+#ifdef ENOLCK
+    add_errcode("ENOLCK", ENOLCK, "No record locks available");
+#endif
+#ifdef EISNAM
+    add_errcode("EISNAM", EISNAM, "Is a named type file");
+#endif
+#ifdef ECONNABORTED
+    add_errcode("ECONNABORTED", ECONNABORTED, "Software caused connection abort");
+#else
+#ifdef WSAECONNABORTED
+    add_errcode("ECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
+#endif
+#endif
+#ifdef ENETUNREACH
+    add_errcode("ENETUNREACH", ENETUNREACH, "Network is unreachable");
+#else
+#ifdef WSAENETUNREACH
+    add_errcode("ENETUNREACH", WSAENETUNREACH, "Network is unreachable");
+#endif
+#endif
+#ifdef ESTALE
+    add_errcode("ESTALE", ESTALE, "Stale NFS file handle");
+#else
+#ifdef WSAESTALE
+    add_errcode("ESTALE", WSAESTALE, "Stale NFS file handle");
+#endif
+#endif
+#ifdef ENOSR
+    add_errcode("ENOSR", ENOSR, "Out of streams resources");
+#endif
+#ifdef ENOMEM
+    add_errcode("ENOMEM", ENOMEM, "Out of memory");
+#endif
+#ifdef ENOTSOCK
+    add_errcode("ENOTSOCK", ENOTSOCK, "Socket operation on non-socket");
+#else
+#ifdef WSAENOTSOCK
+    add_errcode("ENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
+#endif
+#endif
+#ifdef ESTRPIPE
+    add_errcode("ESTRPIPE", ESTRPIPE, "Streams pipe error");
+#endif
+#ifdef EMLINK
+    add_errcode("EMLINK", EMLINK, "Too many links");
+#endif
+#ifdef ERANGE
+    add_errcode("ERANGE", ERANGE, "Math result not representable");
+#endif
+#ifdef ELIBEXEC
+    add_errcode("ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
+#endif
+#ifdef EL3HLT
+    add_errcode("EL3HLT", EL3HLT, "Level 3 halted");
+#endif
+#ifdef ECONNRESET
+    add_errcode("ECONNRESET", ECONNRESET, "Connection reset by peer");
+#else
+#ifdef WSAECONNRESET
+    add_errcode("ECONNRESET", WSAECONNRESET, "Connection reset by peer");
+#endif
+#endif
+#ifdef EADDRINUSE
+    add_errcode("EADDRINUSE", EADDRINUSE, "Address already in use");
+#else
+#ifdef WSAEADDRINUSE
+    add_errcode("EADDRINUSE", WSAEADDRINUSE, "Address already in use");
+#endif
+#endif
+#ifdef EOPNOTSUPP
+    add_errcode("EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint");
+#else
+#ifdef WSAEOPNOTSUPP
+    add_errcode("EOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
+#endif
+#endif
+#ifdef EREMCHG
+    add_errcode("EREMCHG", EREMCHG, "Remote address changed");
+#endif
+#ifdef EAGAIN
+    add_errcode("EAGAIN", EAGAIN, "Try again");
+#endif
+#ifdef ENAMETOOLONG
+    add_errcode("ENAMETOOLONG", ENAMETOOLONG, "File name too long");
+#else
+#ifdef WSAENAMETOOLONG
+    add_errcode("ENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
+#endif
+#endif
+#ifdef ENOTTY
+    add_errcode("ENOTTY", ENOTTY, "Not a typewriter");
+#endif
+#ifdef ERESTART
+    add_errcode("ERESTART", ERESTART, "Interrupted system call should be restarted");
+#endif
+#ifdef ESOCKTNOSUPPORT
+    add_errcode("ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported");
+#else
+#ifdef WSAESOCKTNOSUPPORT
+    add_errcode("ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
+#endif
+#endif
+#ifdef ETIME
+    add_errcode("ETIME", ETIME, "Timer expired");
+#endif
+#ifdef EBFONT
+    add_errcode("EBFONT", EBFONT, "Bad font file format");
+#endif
+#ifdef EDEADLOCK
+    add_errcode("EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
+#endif
+#ifdef ETOOMANYREFS
+    add_errcode("ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice");
+#else
+#ifdef WSAETOOMANYREFS
+    add_errcode("ETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
+#endif
+#endif
+#ifdef EMFILE
+    add_errcode("EMFILE", EMFILE, "Too many open files");
+#else
+#ifdef WSAEMFILE
+    add_errcode("EMFILE", WSAEMFILE, "Too many open files");
+#endif
+#endif
+#ifdef ETXTBSY
+    add_errcode("ETXTBSY", ETXTBSY, "Text file busy");
+#endif
+#ifdef EINPROGRESS
+    add_errcode("EINPROGRESS", EINPROGRESS, "Operation now in progress");
+#else
+#ifdef WSAEINPROGRESS
+    add_errcode("EINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
+#endif
+#endif
+#ifdef ENXIO
+    add_errcode("ENXIO", ENXIO, "No such device or address");
+#endif
+#ifdef ENOPKG
+    add_errcode("ENOPKG", ENOPKG, "Package not installed");
+#endif
+#ifdef WSASY
+    add_errcode("WSASY", WSASY, "Error WSASY");
+#endif
+#ifdef WSAEHOSTDOWN
+    add_errcode("WSAEHOSTDOWN", WSAEHOSTDOWN, "Host is down");
+#endif
+#ifdef WSAENETDOWN
+    add_errcode("WSAENETDOWN", WSAENETDOWN, "Network is down");
+#endif
+#ifdef WSAENOTSOCK
+    add_errcode("WSAENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
+#endif
+#ifdef WSAEHOSTUNREACH
+    add_errcode("WSAEHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
+#endif
+#ifdef WSAELOOP
+    add_errcode("WSAELOOP", WSAELOOP, "Too many symbolic links encountered");
+#endif
+#ifdef WSAEMFILE
+    add_errcode("WSAEMFILE", WSAEMFILE, "Too many open files");
+#endif
+#ifdef WSAESTALE
+    add_errcode("WSAESTALE", WSAESTALE, "Stale NFS file handle");
+#endif
+#ifdef WSAVERNOTSUPPORTED
+    add_errcode("WSAVERNOTSUPPORTED", WSAVERNOTSUPPORTED, "Error WSAVERNOTSUPPORTED");
+#endif
+#ifdef WSAENETUNREACH
+    add_errcode("WSAENETUNREACH", WSAENETUNREACH, "Network is unreachable");
+#endif
+#ifdef WSAEPROCLIM
+    add_errcode("WSAEPROCLIM", WSAEPROCLIM, "Error WSAEPROCLIM");
+#endif
+#ifdef WSAEFAULT
+    add_errcode("WSAEFAULT", WSAEFAULT, "Bad address");
+#endif
+#ifdef WSANOTINITIALISED
+    add_errcode("WSANOTINITIALISED", WSANOTINITIALISED, "Error WSANOTINITIALISED");
+#endif
+#ifdef WSAEUSERS
+    add_errcode("WSAEUSERS", WSAEUSERS, "Too many users");
+#endif
+#ifdef WSAMAKEASYNCREPL
+    add_errcode("WSAMAKEASYNCREPL", WSAMAKEASYNCREPL, "Error WSAMAKEASYNCREPL");
+#endif
+#ifdef WSAENOPROTOOPT
+    add_errcode("WSAENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
+#endif
+#ifdef WSAECONNABORTED
+    add_errcode("WSAECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
+#endif
+#ifdef WSAENAMETOOLONG
+    add_errcode("WSAENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
+#endif
+#ifdef WSAENOTEMPTY
+    add_errcode("WSAENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
+#endif
+#ifdef WSAESHUTDOWN
+    add_errcode("WSAESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
+#endif
+#ifdef WSAEAFNOSUPPORT
+    add_errcode("WSAEAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
+#endif
+#ifdef WSAETOOMANYREFS
+    add_errcode("WSAETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
+#endif
+#ifdef WSAEACCES
+    add_errcode("WSAEACCES", WSAEACCES, "Permission denied");
+#endif
+#ifdef WSATR
+    add_errcode("WSATR", WSATR, "Error WSATR");
+#endif
+#ifdef WSABASEERR
+    add_errcode("WSABASEERR", WSABASEERR, "Error WSABASEERR");
+#endif
+#ifdef WSADESCRIPTIO
+    add_errcode("WSADESCRIPTIO", WSADESCRIPTIO, "Error WSADESCRIPTIO");
+#endif
+#ifdef WSAEMSGSIZE
+    add_errcode("WSAEMSGSIZE", WSAEMSGSIZE, "Message too long");
+#endif
+#ifdef WSAEBADF
+    add_errcode("WSAEBADF", WSAEBADF, "Bad file number");
+#endif
+#ifdef WSAECONNRESET
+    add_errcode("WSAECONNRESET", WSAECONNRESET, "Connection reset by peer");
+#endif
+#ifdef WSAGETSELECTERRO
+    add_errcode("WSAGETSELECTERRO", WSAGETSELECTERRO, "Error WSAGETSELECTERRO");
+#endif
+#ifdef WSAETIMEDOUT
+    add_errcode("WSAETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
+#endif
+#ifdef WSAENOBUFS
+    add_errcode("WSAENOBUFS", WSAENOBUFS, "No buffer space available");
+#endif
+#ifdef WSAEDISCON
+    add_errcode("WSAEDISCON", WSAEDISCON, "Error WSAEDISCON");
+#endif
+#ifdef WSAEINTR
+    add_errcode("WSAEINTR", WSAEINTR, "Interrupted system call");
+#endif
+#ifdef WSAEPROTOTYPE
+    add_errcode("WSAEPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
+#endif
+#ifdef WSAHOS
+    add_errcode("WSAHOS", WSAHOS, "Error WSAHOS");
+#endif
+#ifdef WSAEADDRINUSE
+    add_errcode("WSAEADDRINUSE", WSAEADDRINUSE, "Address already in use");
+#endif
+#ifdef WSAEADDRNOTAVAIL
+    add_errcode("WSAEADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
+#endif
+#ifdef WSAEALREADY
+    add_errcode("WSAEALREADY", WSAEALREADY, "Operation already in progress");
+#endif
+#ifdef WSAEPROTONOSUPPORT
+    add_errcode("WSAEPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
+#endif
+#ifdef WSASYSNOTREADY
+    add_errcode("WSASYSNOTREADY", WSASYSNOTREADY, "Error WSASYSNOTREADY");
+#endif
+#ifdef WSAEWOULDBLOCK
+    add_errcode("WSAEWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
+#endif
+#ifdef WSAEPFNOSUPPORT
+    add_errcode("WSAEPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
+#endif
+#ifdef WSAEOPNOTSUPP
+    add_errcode("WSAEOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
+#endif
+#ifdef WSAEISCONN
+    add_errcode("WSAEISCONN", WSAEISCONN, "Transport endpoint is already connected");
+#endif
+#ifdef WSAEDQUOT
+    add_errcode("WSAEDQUOT", WSAEDQUOT, "Quota exceeded");
+#endif
+#ifdef WSAENOTCONN
+    add_errcode("WSAENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
+#endif
+#ifdef WSAEREMOTE
+    add_errcode("WSAEREMOTE", WSAEREMOTE, "Object is remote");
+#endif
+#ifdef WSAEINVAL
+    add_errcode("WSAEINVAL", WSAEINVAL, "Invalid argument");
+#endif
+#ifdef WSAEINPROGRESS
+    add_errcode("WSAEINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
+#endif
+#ifdef WSAGETSELECTEVEN
+    add_errcode("WSAGETSELECTEVEN", WSAGETSELECTEVEN, "Error WSAGETSELECTEVEN");
+#endif
+#ifdef WSAESOCKTNOSUPPORT
+    add_errcode("WSAESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
+#endif
+#ifdef WSAGETASYNCERRO
+    add_errcode("WSAGETASYNCERRO", WSAGETASYNCERRO, "Error WSAGETASYNCERRO");
+#endif
+#ifdef WSAMAKESELECTREPL
+    add_errcode("WSAMAKESELECTREPL", WSAMAKESELECTREPL, "Error WSAMAKESELECTREPL");
+#endif
+#ifdef WSAGETASYNCBUFLE
+    add_errcode("WSAGETASYNCBUFLE", WSAGETASYNCBUFLE, "Error WSAGETASYNCBUFLE");
+#endif
+#ifdef WSAEDESTADDRREQ
+    add_errcode("WSAEDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
+#endif
+#ifdef WSAECONNREFUSED
+    add_errcode("WSAECONNREFUSED", WSAECONNREFUSED, "Connection refused");
+#endif
+#ifdef WSAENETRESET
+    add_errcode("WSAENETRESET", WSAENETRESET, "Network dropped connection because of reset");
+#endif
+#ifdef WSAN
+    add_errcode("WSAN", WSAN, "Error WSAN");
+#endif
+#ifdef ENOMEDIUM
+    add_errcode("ENOMEDIUM", ENOMEDIUM, "No medium found");
+#endif
+#ifdef EMEDIUMTYPE
+    add_errcode("EMEDIUMTYPE", EMEDIUMTYPE, "Wrong medium type");
+#endif
+#ifdef ECANCELED
+    add_errcode("ECANCELED", ECANCELED, "Operation Canceled");
+#endif
+#ifdef ENOKEY
+    add_errcode("ENOKEY", ENOKEY, "Required key not available");
+#endif
+#ifdef EKEYEXPIRED
+    add_errcode("EKEYEXPIRED", EKEYEXPIRED, "Key has expired");
+#endif
+#ifdef EKEYREVOKED
+    add_errcode("EKEYREVOKED", EKEYREVOKED, "Key has been revoked");
+#endif
+#ifdef EKEYREJECTED
+    add_errcode("EKEYREJECTED", EKEYREJECTED, "Key was rejected by service");
+#endif
+#ifdef EOWNERDEAD
+    add_errcode("EOWNERDEAD", EOWNERDEAD, "Owner died");
+#endif
+#ifdef ENOTRECOVERABLE
+    add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "State not recoverable");
+#endif
+#ifdef ERFKILL
+    add_errcode("ERFKILL", ERFKILL, "Operation not possible due to RF-kill");
+#endif
+
+    /* Solaris-specific errnos */
+#ifdef ECANCELED
+    add_errcode("ECANCELED", ECANCELED, "Operation canceled");
+#endif
+#ifdef ENOTSUP
+    add_errcode("ENOTSUP", ENOTSUP, "Operation not supported");
+#endif
+#ifdef EOWNERDEAD
+    add_errcode("EOWNERDEAD", EOWNERDEAD, "Process died with the lock");
+#endif
+#ifdef ENOTRECOVERABLE
+    add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "Lock is not recoverable");
+#endif
+#ifdef ELOCKUNMAPPED
+    add_errcode("ELOCKUNMAPPED", ELOCKUNMAPPED, "Locked lock was unmapped");
+#endif
+#ifdef ENOTACTIVE
+    add_errcode("ENOTACTIVE", ENOTACTIVE, "Facility is not active");
+#endif
+
+    /* MacOSX specific errnos */
+#ifdef EAUTH
+    add_errcode("EAUTH", EAUTH, "Authentication error");
+#endif
+#ifdef EBADARCH
+    add_errcode("EBADARCH", EBADARCH, "Bad CPU type in executable");
+#endif
+#ifdef EBADEXEC
+    add_errcode("EBADEXEC", EBADEXEC, "Bad executable (or shared library)");
+#endif
+#ifdef EBADMACHO
+    add_errcode("EBADMACHO", EBADMACHO, "Malformed Mach-o file");
+#endif
+#ifdef EBADRPC
+    add_errcode("EBADRPC", EBADRPC, "RPC struct is bad");
+#endif
+#ifdef EDEVERR
+    add_errcode("EDEVERR", EDEVERR, "Device error");
+#endif
+#ifdef EFTYPE
+    add_errcode("EFTYPE", EFTYPE, "Inappropriate file type or format");
+#endif
+#ifdef ENEEDAUTH
+    add_errcode("ENEEDAUTH", ENEEDAUTH, "Need authenticator");
+#endif
+#ifdef ENOATTR
+    add_errcode("ENOATTR", ENOATTR, "Attribute not found");
+#endif
+#ifdef ENOPOLICY
+    add_errcode("ENOPOLICY", ENOPOLICY, "Policy not found");
+#endif
+#ifdef EPROCLIM
+    add_errcode("EPROCLIM", EPROCLIM, "Too many processes");
+#endif
+#ifdef EPROCUNAVAIL
+    add_errcode("EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
+#endif
+#ifdef EPROGMISMATCH
+    add_errcode("EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
+#endif
+#ifdef EPROGUNAVAIL
+    add_errcode("EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
+#endif
+#ifdef EPWROFF
+    add_errcode("EPWROFF", EPWROFF, "Device power is off");
+#endif
+#ifdef ERPCMISMATCH
+    add_errcode("ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
+#endif
+#ifdef ESHLIBVERS
+    add_errcode("ESHLIBVERS", ESHLIBVERS, "Shared library version mismatch");
+#endif
+
+    Py_DECREF(error_dict);
+    return 0;
+}
+
+static PyModuleDef_Slot errno_slots[] = {
+    {Py_mod_exec, errno_exec},
+    {0, NULL}
+};
+
 PyDoc_STRVAR(errno__doc__,
 "This module makes available standard errno system symbols.\n\
 \n\
@@ -82,854 +946,15 @@
 
 static struct PyModuleDef errnomodule = {
     PyModuleDef_HEAD_INIT,
-    "errno",
-    errno__doc__,
-    -1,
-    errno_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    .m_name = "errno",
+    .m_doc = errno__doc__,
+    .m_size = 0,
+    .m_methods = errno_methods,
+    .m_slots = errno_slots,
 };
 
 PyMODINIT_FUNC
 PyInit_errno(void)
 {
-    PyObject *m, *d, *de;
-    m = PyModule_Create(&errnomodule);
-    if (m == NULL)
-        return NULL;
-    d = PyModule_GetDict(m);
-    de = PyDict_New();
-    if (!d || !de || PyDict_SetItemString(d, "errorcode", de) < 0)
-        return NULL;
-
-/* Macro so I don't have to edit each and every line below... */
-#define inscode(d, ds, de, name, code, comment) _inscode(d, de, name, code)
-
-    /*
-     * The names and comments are borrowed from linux/include/errno.h,
-     * which should be pretty all-inclusive.  However, the Solaris specific
-     * names and comments are borrowed from sys/errno.h in Solaris.
-     * MacOSX specific names and comments are borrowed from sys/errno.h in
-     * MacOSX.
-     */
-
-#ifdef ENODEV
-    inscode(d, ds, de, "ENODEV", ENODEV, "No such device");
-#endif
-#ifdef ENOCSI
-    inscode(d, ds, de, "ENOCSI", ENOCSI, "No CSI structure available");
-#endif
-#ifdef EHOSTUNREACH
-    inscode(d, ds, de, "EHOSTUNREACH", EHOSTUNREACH, "No route to host");
-#else
-#ifdef WSAEHOSTUNREACH
-    inscode(d, ds, de, "EHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
-#endif
-#endif
-#ifdef ENOMSG
-    inscode(d, ds, de, "ENOMSG", ENOMSG, "No message of desired type");
-#endif
-#ifdef EUCLEAN
-    inscode(d, ds, de, "EUCLEAN", EUCLEAN, "Structure needs cleaning");
-#endif
-#ifdef EL2NSYNC
-    inscode(d, ds, de, "EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
-#endif
-#ifdef EL2HLT
-    inscode(d, ds, de, "EL2HLT", EL2HLT, "Level 2 halted");
-#endif
-#ifdef ENODATA
-    inscode(d, ds, de, "ENODATA", ENODATA, "No data available");
-#endif
-#ifdef ENOTBLK
-    inscode(d, ds, de, "ENOTBLK", ENOTBLK, "Block device required");
-#endif
-#ifdef ENOSYS
-    inscode(d, ds, de, "ENOSYS", ENOSYS, "Function not implemented");
-#endif
-#ifdef EPIPE
-    inscode(d, ds, de, "EPIPE", EPIPE, "Broken pipe");
-#endif
-#ifdef EINVAL
-    inscode(d, ds, de, "EINVAL", EINVAL, "Invalid argument");
-#else
-#ifdef WSAEINVAL
-    inscode(d, ds, de, "EINVAL", WSAEINVAL, "Invalid argument");
-#endif
-#endif
-#ifdef EOVERFLOW
-    inscode(d, ds, de, "EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
-#endif
-#ifdef EADV
-    inscode(d, ds, de, "EADV", EADV, "Advertise error");
-#endif
-#ifdef EINTR
-    inscode(d, ds, de, "EINTR", EINTR, "Interrupted system call");
-#else
-#ifdef WSAEINTR
-    inscode(d, ds, de, "EINTR", WSAEINTR, "Interrupted system call");
-#endif
-#endif
-#ifdef EUSERS
-    inscode(d, ds, de, "EUSERS", EUSERS, "Too many users");
-#else
-#ifdef WSAEUSERS
-    inscode(d, ds, de, "EUSERS", WSAEUSERS, "Too many users");
-#endif
-#endif
-#ifdef ENOTEMPTY
-    inscode(d, ds, de, "ENOTEMPTY", ENOTEMPTY, "Directory not empty");
-#else
-#ifdef WSAENOTEMPTY
-    inscode(d, ds, de, "ENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
-#endif
-#endif
-#ifdef ENOBUFS
-    inscode(d, ds, de, "ENOBUFS", ENOBUFS, "No buffer space available");
-#else
-#ifdef WSAENOBUFS
-    inscode(d, ds, de, "ENOBUFS", WSAENOBUFS, "No buffer space available");
-#endif
-#endif
-#ifdef EPROTO
-    inscode(d, ds, de, "EPROTO", EPROTO, "Protocol error");
-#endif
-#ifdef EREMOTE
-    inscode(d, ds, de, "EREMOTE", EREMOTE, "Object is remote");
-#else
-#ifdef WSAEREMOTE
-    inscode(d, ds, de, "EREMOTE", WSAEREMOTE, "Object is remote");
-#endif
-#endif
-#ifdef ENAVAIL
-    inscode(d, ds, de, "ENAVAIL", ENAVAIL, "No XENIX semaphores available");
-#endif
-#ifdef ECHILD
-    inscode(d, ds, de, "ECHILD", ECHILD, "No child processes");
-#endif
-#ifdef ELOOP
-    inscode(d, ds, de, "ELOOP", ELOOP, "Too many symbolic links encountered");
-#else
-#ifdef WSAELOOP
-    inscode(d, ds, de, "ELOOP", WSAELOOP, "Too many symbolic links encountered");
-#endif
-#endif
-#ifdef EXDEV
-    inscode(d, ds, de, "EXDEV", EXDEV, "Cross-device link");
-#endif
-#ifdef E2BIG
-    inscode(d, ds, de, "E2BIG", E2BIG, "Arg list too long");
-#endif
-#ifdef ESRCH
-    inscode(d, ds, de, "ESRCH", ESRCH, "No such process");
-#endif
-#ifdef EMSGSIZE
-    inscode(d, ds, de, "EMSGSIZE", EMSGSIZE, "Message too long");
-#else
-#ifdef WSAEMSGSIZE
-    inscode(d, ds, de, "EMSGSIZE", WSAEMSGSIZE, "Message too long");
-#endif
-#endif
-#ifdef EAFNOSUPPORT
-    inscode(d, ds, de, "EAFNOSUPPORT", EAFNOSUPPORT, "Address family not supported by protocol");
-#else
-#ifdef WSAEAFNOSUPPORT
-    inscode(d, ds, de, "EAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
-#endif
-#endif
-#ifdef EBADR
-    inscode(d, ds, de, "EBADR", EBADR, "Invalid request descriptor");
-#endif
-#ifdef EHOSTDOWN
-    inscode(d, ds, de, "EHOSTDOWN", EHOSTDOWN, "Host is down");
-#else
-#ifdef WSAEHOSTDOWN
-    inscode(d, ds, de, "EHOSTDOWN", WSAEHOSTDOWN, "Host is down");
-#endif
-#endif
-#ifdef EPFNOSUPPORT
-    inscode(d, ds, de, "EPFNOSUPPORT", EPFNOSUPPORT, "Protocol family not supported");
-#else
-#ifdef WSAEPFNOSUPPORT
-    inscode(d, ds, de, "EPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
-#endif
-#endif
-#ifdef ENOPROTOOPT
-    inscode(d, ds, de, "ENOPROTOOPT", ENOPROTOOPT, "Protocol not available");
-#else
-#ifdef WSAENOPROTOOPT
-    inscode(d, ds, de, "ENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
-#endif
-#endif
-#ifdef EBUSY
-    inscode(d, ds, de, "EBUSY", EBUSY, "Device or resource busy");
-#endif
-#ifdef EWOULDBLOCK
-    inscode(d, ds, de, "EWOULDBLOCK", EWOULDBLOCK, "Operation would block");
-#else
-#ifdef WSAEWOULDBLOCK
-    inscode(d, ds, de, "EWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
-#endif
-#endif
-#ifdef EBADFD
-    inscode(d, ds, de, "EBADFD", EBADFD, "File descriptor in bad state");
-#endif
-#ifdef EDOTDOT
-    inscode(d, ds, de, "EDOTDOT", EDOTDOT, "RFS specific error");
-#endif
-#ifdef EISCONN
-    inscode(d, ds, de, "EISCONN", EISCONN, "Transport endpoint is already connected");
-#else
-#ifdef WSAEISCONN
-    inscode(d, ds, de, "EISCONN", WSAEISCONN, "Transport endpoint is already connected");
-#endif
-#endif
-#ifdef ENOANO
-    inscode(d, ds, de, "ENOANO", ENOANO, "No anode");
-#endif
-#ifdef ESHUTDOWN
-    inscode(d, ds, de, "ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown");
-#else
-#ifdef WSAESHUTDOWN
-    inscode(d, ds, de, "ESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
-#endif
-#endif
-#ifdef ECHRNG
-    inscode(d, ds, de, "ECHRNG", ECHRNG, "Channel number out of range");
-#endif
-#ifdef ELIBBAD
-    inscode(d, ds, de, "ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
-#endif
-#ifdef ENONET
-    inscode(d, ds, de, "ENONET", ENONET, "Machine is not on the network");
-#endif
-#ifdef EBADE
-    inscode(d, ds, de, "EBADE", EBADE, "Invalid exchange");
-#endif
-#ifdef EBADF
-    inscode(d, ds, de, "EBADF", EBADF, "Bad file number");
-#else
-#ifdef WSAEBADF
-    inscode(d, ds, de, "EBADF", WSAEBADF, "Bad file number");
-#endif
-#endif
-#ifdef EMULTIHOP
-    inscode(d, ds, de, "EMULTIHOP", EMULTIHOP, "Multihop attempted");
-#endif
-#ifdef EIO
-    inscode(d, ds, de, "EIO", EIO, "I/O error");
-#endif
-#ifdef EUNATCH
-    inscode(d, ds, de, "EUNATCH", EUNATCH, "Protocol driver not attached");
-#endif
-#ifdef EPROTOTYPE
-    inscode(d, ds, de, "EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket");
-#else
-#ifdef WSAEPROTOTYPE
-    inscode(d, ds, de, "EPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
-#endif
-#endif
-#ifdef ENOSPC
-    inscode(d, ds, de, "ENOSPC", ENOSPC, "No space left on device");
-#endif
-#ifdef ENOEXEC
-    inscode(d, ds, de, "ENOEXEC", ENOEXEC, "Exec format error");
-#endif
-#ifdef EALREADY
-    inscode(d, ds, de, "EALREADY", EALREADY, "Operation already in progress");
-#else
-#ifdef WSAEALREADY
-    inscode(d, ds, de, "EALREADY", WSAEALREADY, "Operation already in progress");
-#endif
-#endif
-#ifdef ENETDOWN
-    inscode(d, ds, de, "ENETDOWN", ENETDOWN, "Network is down");
-#else
-#ifdef WSAENETDOWN
-    inscode(d, ds, de, "ENETDOWN", WSAENETDOWN, "Network is down");
-#endif
-#endif
-#ifdef ENOTNAM
-    inscode(d, ds, de, "ENOTNAM", ENOTNAM, "Not a XENIX named type file");
-#endif
-#ifdef EACCES
-    inscode(d, ds, de, "EACCES", EACCES, "Permission denied");
-#else
-#ifdef WSAEACCES
-    inscode(d, ds, de, "EACCES", WSAEACCES, "Permission denied");
-#endif
-#endif
-#ifdef ELNRNG
-    inscode(d, ds, de, "ELNRNG", ELNRNG, "Link number out of range");
-#endif
-#ifdef EILSEQ
-    inscode(d, ds, de, "EILSEQ", EILSEQ, "Illegal byte sequence");
-#endif
-#ifdef ENOTDIR
-    inscode(d, ds, de, "ENOTDIR", ENOTDIR, "Not a directory");
-#endif
-#ifdef ENOTUNIQ
-    inscode(d, ds, de, "ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
-#endif
-#ifdef EPERM
-    inscode(d, ds, de, "EPERM", EPERM, "Operation not permitted");
-#endif
-#ifdef EDOM
-    inscode(d, ds, de, "EDOM", EDOM, "Math argument out of domain of func");
-#endif
-#ifdef EXFULL
-    inscode(d, ds, de, "EXFULL", EXFULL, "Exchange full");
-#endif
-#ifdef ECONNREFUSED
-    inscode(d, ds, de, "ECONNREFUSED", ECONNREFUSED, "Connection refused");
-#else
-#ifdef WSAECONNREFUSED
-    inscode(d, ds, de, "ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
-#endif
-#endif
-#ifdef EISDIR
-    inscode(d, ds, de, "EISDIR", EISDIR, "Is a directory");
-#endif
-#ifdef EPROTONOSUPPORT
-    inscode(d, ds, de, "EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported");
-#else
-#ifdef WSAEPROTONOSUPPORT
-    inscode(d, ds, de, "EPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
-#endif
-#endif
-#ifdef EROFS
-    inscode(d, ds, de, "EROFS", EROFS, "Read-only file system");
-#endif
-#ifdef EADDRNOTAVAIL
-    inscode(d, ds, de, "EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address");
-#else
-#ifdef WSAEADDRNOTAVAIL
-    inscode(d, ds, de, "EADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
-#endif
-#endif
-#ifdef EIDRM
-    inscode(d, ds, de, "EIDRM", EIDRM, "Identifier removed");
-#endif
-#ifdef ECOMM
-    inscode(d, ds, de, "ECOMM", ECOMM, "Communication error on send");
-#endif
-#ifdef ESRMNT
-    inscode(d, ds, de, "ESRMNT", ESRMNT, "Srmount error");
-#endif
-#ifdef EREMOTEIO
-    inscode(d, ds, de, "EREMOTEIO", EREMOTEIO, "Remote I/O error");
-#endif
-#ifdef EL3RST
-    inscode(d, ds, de, "EL3RST", EL3RST, "Level 3 reset");
-#endif
-#ifdef EBADMSG
-    inscode(d, ds, de, "EBADMSG", EBADMSG, "Not a data message");
-#endif
-#ifdef ENFILE
-    inscode(d, ds, de, "ENFILE", ENFILE, "File table overflow");
-#endif
-#ifdef ELIBMAX
-    inscode(d, ds, de, "ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
-#endif
-#ifdef ESPIPE
-    inscode(d, ds, de, "ESPIPE", ESPIPE, "Illegal seek");
-#endif
-#ifdef ENOLINK
-    inscode(d, ds, de, "ENOLINK", ENOLINK, "Link has been severed");
-#endif
-#ifdef ENETRESET
-    inscode(d, ds, de, "ENETRESET", ENETRESET, "Network dropped connection because of reset");
-#else
-#ifdef WSAENETRESET
-    inscode(d, ds, de, "ENETRESET", WSAENETRESET, "Network dropped connection because of reset");
-#endif
-#endif
-#ifdef ETIMEDOUT
-    inscode(d, ds, de, "ETIMEDOUT", ETIMEDOUT, "Connection timed out");
-#else
-#ifdef WSAETIMEDOUT
-    inscode(d, ds, de, "ETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
-#endif
-#endif
-#ifdef ENOENT
-    inscode(d, ds, de, "ENOENT", ENOENT, "No such file or directory");
-#endif
-#ifdef EEXIST
-    inscode(d, ds, de, "EEXIST", EEXIST, "File exists");
-#endif
-#ifdef EDQUOT
-    inscode(d, ds, de, "EDQUOT", EDQUOT, "Quota exceeded");
-#else
-#ifdef WSAEDQUOT
-    inscode(d, ds, de, "EDQUOT", WSAEDQUOT, "Quota exceeded");
-#endif
-#endif
-#ifdef ENOSTR
-    inscode(d, ds, de, "ENOSTR", ENOSTR, "Device not a stream");
-#endif
-#ifdef EBADSLT
-    inscode(d, ds, de, "EBADSLT", EBADSLT, "Invalid slot");
-#endif
-#ifdef EBADRQC
-    inscode(d, ds, de, "EBADRQC", EBADRQC, "Invalid request code");
-#endif
-#ifdef ELIBACC
-    inscode(d, ds, de, "ELIBACC", ELIBACC, "Can not access a needed shared library");
-#endif
-#ifdef EFAULT
-    inscode(d, ds, de, "EFAULT", EFAULT, "Bad address");
-#else
-#ifdef WSAEFAULT
-    inscode(d, ds, de, "EFAULT", WSAEFAULT, "Bad address");
-#endif
-#endif
-#ifdef EFBIG
-    inscode(d, ds, de, "EFBIG", EFBIG, "File too large");
-#endif
-#ifdef EDEADLK
-    inscode(d, ds, de, "EDEADLK", EDEADLK, "Resource deadlock would occur");
-#endif
-#ifdef ENOTCONN
-    inscode(d, ds, de, "ENOTCONN", ENOTCONN, "Transport endpoint is not connected");
-#else
-#ifdef WSAENOTCONN
-    inscode(d, ds, de, "ENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
-#endif
-#endif
-#ifdef EDESTADDRREQ
-    inscode(d, ds, de, "EDESTADDRREQ", EDESTADDRREQ, "Destination address required");
-#else
-#ifdef WSAEDESTADDRREQ
-    inscode(d, ds, de, "EDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
-#endif
-#endif
-#ifdef ELIBSCN
-    inscode(d, ds, de, "ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
-#endif
-#ifdef ENOLCK
-    inscode(d, ds, de, "ENOLCK", ENOLCK, "No record locks available");
-#endif
-#ifdef EISNAM
-    inscode(d, ds, de, "EISNAM", EISNAM, "Is a named type file");
-#endif
-#ifdef ECONNABORTED
-    inscode(d, ds, de, "ECONNABORTED", ECONNABORTED, "Software caused connection abort");
-#else
-#ifdef WSAECONNABORTED
-    inscode(d, ds, de, "ECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
-#endif
-#endif
-#ifdef ENETUNREACH
-    inscode(d, ds, de, "ENETUNREACH", ENETUNREACH, "Network is unreachable");
-#else
-#ifdef WSAENETUNREACH
-    inscode(d, ds, de, "ENETUNREACH", WSAENETUNREACH, "Network is unreachable");
-#endif
-#endif
-#ifdef ESTALE
-    inscode(d, ds, de, "ESTALE", ESTALE, "Stale NFS file handle");
-#else
-#ifdef WSAESTALE
-    inscode(d, ds, de, "ESTALE", WSAESTALE, "Stale NFS file handle");
-#endif
-#endif
-#ifdef ENOSR
-    inscode(d, ds, de, "ENOSR", ENOSR, "Out of streams resources");
-#endif
-#ifdef ENOMEM
-    inscode(d, ds, de, "ENOMEM", ENOMEM, "Out of memory");
-#endif
-#ifdef ENOTSOCK
-    inscode(d, ds, de, "ENOTSOCK", ENOTSOCK, "Socket operation on non-socket");
-#else
-#ifdef WSAENOTSOCK
-    inscode(d, ds, de, "ENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
-#endif
-#endif
-#ifdef ESTRPIPE
-    inscode(d, ds, de, "ESTRPIPE", ESTRPIPE, "Streams pipe error");
-#endif
-#ifdef EMLINK
-    inscode(d, ds, de, "EMLINK", EMLINK, "Too many links");
-#endif
-#ifdef ERANGE
-    inscode(d, ds, de, "ERANGE", ERANGE, "Math result not representable");
-#endif
-#ifdef ELIBEXEC
-    inscode(d, ds, de, "ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
-#endif
-#ifdef EL3HLT
-    inscode(d, ds, de, "EL3HLT", EL3HLT, "Level 3 halted");
-#endif
-#ifdef ECONNRESET
-    inscode(d, ds, de, "ECONNRESET", ECONNRESET, "Connection reset by peer");
-#else
-#ifdef WSAECONNRESET
-    inscode(d, ds, de, "ECONNRESET", WSAECONNRESET, "Connection reset by peer");
-#endif
-#endif
-#ifdef EADDRINUSE
-    inscode(d, ds, de, "EADDRINUSE", EADDRINUSE, "Address already in use");
-#else
-#ifdef WSAEADDRINUSE
-    inscode(d, ds, de, "EADDRINUSE", WSAEADDRINUSE, "Address already in use");
-#endif
-#endif
-#ifdef EOPNOTSUPP
-    inscode(d, ds, de, "EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint");
-#else
-#ifdef WSAEOPNOTSUPP
-    inscode(d, ds, de, "EOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
-#endif
-#endif
-#ifdef EREMCHG
-    inscode(d, ds, de, "EREMCHG", EREMCHG, "Remote address changed");
-#endif
-#ifdef EAGAIN
-    inscode(d, ds, de, "EAGAIN", EAGAIN, "Try again");
-#endif
-#ifdef ENAMETOOLONG
-    inscode(d, ds, de, "ENAMETOOLONG", ENAMETOOLONG, "File name too long");
-#else
-#ifdef WSAENAMETOOLONG
-    inscode(d, ds, de, "ENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
-#endif
-#endif
-#ifdef ENOTTY
-    inscode(d, ds, de, "ENOTTY", ENOTTY, "Not a typewriter");
-#endif
-#ifdef ERESTART
-    inscode(d, ds, de, "ERESTART", ERESTART, "Interrupted system call should be restarted");
-#endif
-#ifdef ESOCKTNOSUPPORT
-    inscode(d, ds, de, "ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported");
-#else
-#ifdef WSAESOCKTNOSUPPORT
-    inscode(d, ds, de, "ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
-#endif
-#endif
-#ifdef ETIME
-    inscode(d, ds, de, "ETIME", ETIME, "Timer expired");
-#endif
-#ifdef EBFONT
-    inscode(d, ds, de, "EBFONT", EBFONT, "Bad font file format");
-#endif
-#ifdef EDEADLOCK
-    inscode(d, ds, de, "EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
-#endif
-#ifdef ETOOMANYREFS
-    inscode(d, ds, de, "ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice");
-#else
-#ifdef WSAETOOMANYREFS
-    inscode(d, ds, de, "ETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
-#endif
-#endif
-#ifdef EMFILE
-    inscode(d, ds, de, "EMFILE", EMFILE, "Too many open files");
-#else
-#ifdef WSAEMFILE
-    inscode(d, ds, de, "EMFILE", WSAEMFILE, "Too many open files");
-#endif
-#endif
-#ifdef ETXTBSY
-    inscode(d, ds, de, "ETXTBSY", ETXTBSY, "Text file busy");
-#endif
-#ifdef EINPROGRESS
-    inscode(d, ds, de, "EINPROGRESS", EINPROGRESS, "Operation now in progress");
-#else
-#ifdef WSAEINPROGRESS
-    inscode(d, ds, de, "EINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
-#endif
-#endif
-#ifdef ENXIO
-    inscode(d, ds, de, "ENXIO", ENXIO, "No such device or address");
-#endif
-#ifdef ENOPKG
-    inscode(d, ds, de, "ENOPKG", ENOPKG, "Package not installed");
-#endif
-#ifdef WSASY
-    inscode(d, ds, de, "WSASY", WSASY, "Error WSASY");
-#endif
-#ifdef WSAEHOSTDOWN
-    inscode(d, ds, de, "WSAEHOSTDOWN", WSAEHOSTDOWN, "Host is down");
-#endif
-#ifdef WSAENETDOWN
-    inscode(d, ds, de, "WSAENETDOWN", WSAENETDOWN, "Network is down");
-#endif
-#ifdef WSAENOTSOCK
-    inscode(d, ds, de, "WSAENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
-#endif
-#ifdef WSAEHOSTUNREACH
-    inscode(d, ds, de, "WSAEHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
-#endif
-#ifdef WSAELOOP
-    inscode(d, ds, de, "WSAELOOP", WSAELOOP, "Too many symbolic links encountered");
-#endif
-#ifdef WSAEMFILE
-    inscode(d, ds, de, "WSAEMFILE", WSAEMFILE, "Too many open files");
-#endif
-#ifdef WSAESTALE
-    inscode(d, ds, de, "WSAESTALE", WSAESTALE, "Stale NFS file handle");
-#endif
-#ifdef WSAVERNOTSUPPORTED
-    inscode(d, ds, de, "WSAVERNOTSUPPORTED", WSAVERNOTSUPPORTED, "Error WSAVERNOTSUPPORTED");
-#endif
-#ifdef WSAENETUNREACH
-    inscode(d, ds, de, "WSAENETUNREACH", WSAENETUNREACH, "Network is unreachable");
-#endif
-#ifdef WSAEPROCLIM
-    inscode(d, ds, de, "WSAEPROCLIM", WSAEPROCLIM, "Error WSAEPROCLIM");
-#endif
-#ifdef WSAEFAULT
-    inscode(d, ds, de, "WSAEFAULT", WSAEFAULT, "Bad address");
-#endif
-#ifdef WSANOTINITIALISED
-    inscode(d, ds, de, "WSANOTINITIALISED", WSANOTINITIALISED, "Error WSANOTINITIALISED");
-#endif
-#ifdef WSAEUSERS
-    inscode(d, ds, de, "WSAEUSERS", WSAEUSERS, "Too many users");
-#endif
-#ifdef WSAMAKEASYNCREPL
-    inscode(d, ds, de, "WSAMAKEASYNCREPL", WSAMAKEASYNCREPL, "Error WSAMAKEASYNCREPL");
-#endif
-#ifdef WSAENOPROTOOPT
-    inscode(d, ds, de, "WSAENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
-#endif
-#ifdef WSAECONNABORTED
-    inscode(d, ds, de, "WSAECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
-#endif
-#ifdef WSAENAMETOOLONG
-    inscode(d, ds, de, "WSAENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
-#endif
-#ifdef WSAENOTEMPTY
-    inscode(d, ds, de, "WSAENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
-#endif
-#ifdef WSAESHUTDOWN
-    inscode(d, ds, de, "WSAESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
-#endif
-#ifdef WSAEAFNOSUPPORT
-    inscode(d, ds, de, "WSAEAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
-#endif
-#ifdef WSAETOOMANYREFS
-    inscode(d, ds, de, "WSAETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
-#endif
-#ifdef WSAEACCES
-    inscode(d, ds, de, "WSAEACCES", WSAEACCES, "Permission denied");
-#endif
-#ifdef WSATR
-    inscode(d, ds, de, "WSATR", WSATR, "Error WSATR");
-#endif
-#ifdef WSABASEERR
-    inscode(d, ds, de, "WSABASEERR", WSABASEERR, "Error WSABASEERR");
-#endif
-#ifdef WSADESCRIPTIO
-    inscode(d, ds, de, "WSADESCRIPTIO", WSADESCRIPTIO, "Error WSADESCRIPTIO");
-#endif
-#ifdef WSAEMSGSIZE
-    inscode(d, ds, de, "WSAEMSGSIZE", WSAEMSGSIZE, "Message too long");
-#endif
-#ifdef WSAEBADF
-    inscode(d, ds, de, "WSAEBADF", WSAEBADF, "Bad file number");
-#endif
-#ifdef WSAECONNRESET
-    inscode(d, ds, de, "WSAECONNRESET", WSAECONNRESET, "Connection reset by peer");
-#endif
-#ifdef WSAGETSELECTERRO
-    inscode(d, ds, de, "WSAGETSELECTERRO", WSAGETSELECTERRO, "Error WSAGETSELECTERRO");
-#endif
-#ifdef WSAETIMEDOUT
-    inscode(d, ds, de, "WSAETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
-#endif
-#ifdef WSAENOBUFS
-    inscode(d, ds, de, "WSAENOBUFS", WSAENOBUFS, "No buffer space available");
-#endif
-#ifdef WSAEDISCON
-    inscode(d, ds, de, "WSAEDISCON", WSAEDISCON, "Error WSAEDISCON");
-#endif
-#ifdef WSAEINTR
-    inscode(d, ds, de, "WSAEINTR", WSAEINTR, "Interrupted system call");
-#endif
-#ifdef WSAEPROTOTYPE
-    inscode(d, ds, de, "WSAEPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
-#endif
-#ifdef WSAHOS
-    inscode(d, ds, de, "WSAHOS", WSAHOS, "Error WSAHOS");
-#endif
-#ifdef WSAEADDRINUSE
-    inscode(d, ds, de, "WSAEADDRINUSE", WSAEADDRINUSE, "Address already in use");
-#endif
-#ifdef WSAEADDRNOTAVAIL
-    inscode(d, ds, de, "WSAEADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
-#endif
-#ifdef WSAEALREADY
-    inscode(d, ds, de, "WSAEALREADY", WSAEALREADY, "Operation already in progress");
-#endif
-#ifdef WSAEPROTONOSUPPORT
-    inscode(d, ds, de, "WSAEPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
-#endif
-#ifdef WSASYSNOTREADY
-    inscode(d, ds, de, "WSASYSNOTREADY", WSASYSNOTREADY, "Error WSASYSNOTREADY");
-#endif
-#ifdef WSAEWOULDBLOCK
-    inscode(d, ds, de, "WSAEWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
-#endif
-#ifdef WSAEPFNOSUPPORT
-    inscode(d, ds, de, "WSAEPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
-#endif
-#ifdef WSAEOPNOTSUPP
-    inscode(d, ds, de, "WSAEOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
-#endif
-#ifdef WSAEISCONN
-    inscode(d, ds, de, "WSAEISCONN", WSAEISCONN, "Transport endpoint is already connected");
-#endif
-#ifdef WSAEDQUOT
-    inscode(d, ds, de, "WSAEDQUOT", WSAEDQUOT, "Quota exceeded");
-#endif
-#ifdef WSAENOTCONN
-    inscode(d, ds, de, "WSAENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
-#endif
-#ifdef WSAEREMOTE
-    inscode(d, ds, de, "WSAEREMOTE", WSAEREMOTE, "Object is remote");
-#endif
-#ifdef WSAEINVAL
-    inscode(d, ds, de, "WSAEINVAL", WSAEINVAL, "Invalid argument");
-#endif
-#ifdef WSAEINPROGRESS
-    inscode(d, ds, de, "WSAEINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
-#endif
-#ifdef WSAGETSELECTEVEN
-    inscode(d, ds, de, "WSAGETSELECTEVEN", WSAGETSELECTEVEN, "Error WSAGETSELECTEVEN");
-#endif
-#ifdef WSAESOCKTNOSUPPORT
-    inscode(d, ds, de, "WSAESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
-#endif
-#ifdef WSAGETASYNCERRO
-    inscode(d, ds, de, "WSAGETASYNCERRO", WSAGETASYNCERRO, "Error WSAGETASYNCERRO");
-#endif
-#ifdef WSAMAKESELECTREPL
-    inscode(d, ds, de, "WSAMAKESELECTREPL", WSAMAKESELECTREPL, "Error WSAMAKESELECTREPL");
-#endif
-#ifdef WSAGETASYNCBUFLE
-    inscode(d, ds, de, "WSAGETASYNCBUFLE", WSAGETASYNCBUFLE, "Error WSAGETASYNCBUFLE");
-#endif
-#ifdef WSAEDESTADDRREQ
-    inscode(d, ds, de, "WSAEDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
-#endif
-#ifdef WSAECONNREFUSED
-    inscode(d, ds, de, "WSAECONNREFUSED", WSAECONNREFUSED, "Connection refused");
-#endif
-#ifdef WSAENETRESET
-    inscode(d, ds, de, "WSAENETRESET", WSAENETRESET, "Network dropped connection because of reset");
-#endif
-#ifdef WSAN
-    inscode(d, ds, de, "WSAN", WSAN, "Error WSAN");
-#endif
-#ifdef ENOMEDIUM
-    inscode(d, ds, de, "ENOMEDIUM", ENOMEDIUM, "No medium found");
-#endif
-#ifdef EMEDIUMTYPE
-    inscode(d, ds, de, "EMEDIUMTYPE", EMEDIUMTYPE, "Wrong medium type");
-#endif
-#ifdef ECANCELED
-    inscode(d, ds, de, "ECANCELED", ECANCELED, "Operation Canceled");
-#endif
-#ifdef ENOKEY
-    inscode(d, ds, de, "ENOKEY", ENOKEY, "Required key not available");
-#endif
-#ifdef EKEYEXPIRED
-    inscode(d, ds, de, "EKEYEXPIRED", EKEYEXPIRED, "Key has expired");
-#endif
-#ifdef EKEYREVOKED
-    inscode(d, ds, de, "EKEYREVOKED", EKEYREVOKED, "Key has been revoked");
-#endif
-#ifdef EKEYREJECTED
-    inscode(d, ds, de, "EKEYREJECTED", EKEYREJECTED, "Key was rejected by service");
-#endif
-#ifdef EOWNERDEAD
-    inscode(d, ds, de, "EOWNERDEAD", EOWNERDEAD, "Owner died");
-#endif
-#ifdef ENOTRECOVERABLE
-    inscode(d, ds, de, "ENOTRECOVERABLE", ENOTRECOVERABLE, "State not recoverable");
-#endif
-#ifdef ERFKILL
-    inscode(d, ds, de, "ERFKILL", ERFKILL, "Operation not possible due to RF-kill");
-#endif
-
-    /* Solaris-specific errnos */
-#ifdef ECANCELED
-    inscode(d, ds, de, "ECANCELED", ECANCELED, "Operation canceled");
-#endif
-#ifdef ENOTSUP
-    inscode(d, ds, de, "ENOTSUP", ENOTSUP, "Operation not supported");
-#endif
-#ifdef EOWNERDEAD
-    inscode(d, ds, de, "EOWNERDEAD", EOWNERDEAD, "Process died with the lock");
-#endif
-#ifdef ENOTRECOVERABLE
-    inscode(d, ds, de, "ENOTRECOVERABLE", ENOTRECOVERABLE, "Lock is not recoverable");
-#endif
-#ifdef ELOCKUNMAPPED
-    inscode(d, ds, de, "ELOCKUNMAPPED", ELOCKUNMAPPED, "Locked lock was unmapped");
-#endif
-#ifdef ENOTACTIVE
-    inscode(d, ds, de, "ENOTACTIVE", ENOTACTIVE, "Facility is not active");
-#endif
-
-    /* MacOSX specific errnos */
-#ifdef EAUTH
-    inscode(d, ds, de, "EAUTH", EAUTH, "Authentication error");
-#endif
-#ifdef EBADARCH
-    inscode(d, ds, de, "EBADARCH", EBADARCH, "Bad CPU type in executable");
-#endif
-#ifdef EBADEXEC
-    inscode(d, ds, de, "EBADEXEC", EBADEXEC, "Bad executable (or shared library)");
-#endif
-#ifdef EBADMACHO
-    inscode(d, ds, de, "EBADMACHO", EBADMACHO, "Malformed Mach-o file");
-#endif
-#ifdef EBADRPC
-    inscode(d, ds, de, "EBADRPC", EBADRPC, "RPC struct is bad");
-#endif
-#ifdef EDEVERR
-    inscode(d, ds, de, "EDEVERR", EDEVERR, "Device error");
-#endif
-#ifdef EFTYPE
-    inscode(d, ds, de, "EFTYPE", EFTYPE, "Inappropriate file type or format");
-#endif
-#ifdef ENEEDAUTH
-    inscode(d, ds, de, "ENEEDAUTH", ENEEDAUTH, "Need authenticator");
-#endif
-#ifdef ENOATTR
-    inscode(d, ds, de, "ENOATTR", ENOATTR, "Attribute not found");
-#endif
-#ifdef ENOPOLICY
-    inscode(d, ds, de, "ENOPOLICY", ENOPOLICY, "Policy not found");
-#endif
-#ifdef EPROCLIM
-    inscode(d, ds, de, "EPROCLIM", EPROCLIM, "Too many processes");
-#endif
-#ifdef EPROCUNAVAIL
-    inscode(d, ds, de, "EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
-#endif
-#ifdef EPROGMISMATCH
-    inscode(d, ds, de, "EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
-#endif
-#ifdef EPROGUNAVAIL
-    inscode(d, ds, de, "EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
-#endif
-#ifdef EPWROFF
-    inscode(d, ds, de, "EPWROFF", EPWROFF, "Device power is off");
-#endif
-#ifdef ERPCMISMATCH
-    inscode(d, ds, de, "ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
-#endif
-#ifdef ESHLIBVERS
-    inscode(d, ds, de, "ESHLIBVERS", ESHLIBVERS, "Shared library version mismatch");
-#endif
-
-    Py_DECREF(de);
-    return m;
+    return PyModuleDef_Init(&errnomodule);
 }
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
index 230cde4..e7a2850 100644
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -1,7 +1,6 @@
 #include "Python.h"
 #include "pycore_initconfig.h"
 #include "pycore_traceback.h"
-#include "pythread.h"
 #include <signal.h>
 #include <object.h>
 #include <frameobject.h>
@@ -19,8 +18,6 @@
 /* Allocate at maximum 100 MiB of the stack to raise the stack overflow */
 #define STACK_OVERFLOW_MAX_SIZE (100 * 1024 * 1024)
 
-#define FAULTHANDLER_LATER
-
 #ifndef MS_WINDOWS
    /* register() is useless on Windows, because only SIGSEGV, SIGABRT and
       SIGILL can be handled by the process, and these signals can only be used
@@ -60,7 +57,6 @@
 #endif
 } fatal_error = {0, NULL, -1, 0};
 
-#ifdef FAULTHANDLER_LATER
 static struct {
     PyObject *file;
     int fd;
@@ -77,7 +73,6 @@
     /* released by child thread when joined */
     PyThread_type_lock running;
 } thread;
-#endif
 
 #ifdef FAULTHANDLER_USER
 typedef struct {
@@ -125,7 +120,13 @@
 static const size_t faulthandler_nsignals = \
     Py_ARRAY_LENGTH(faulthandler_handlers);
 
-#ifdef HAVE_SIGALTSTACK
+/* Using an alternative stack requires sigaltstack()
+   and sigaction() SA_ONSTACK */
+#if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
+#  define FAULTHANDLER_USE_ALT_STACK
+#endif
+
+#ifdef FAULTHANDLER_USE_ALT_STACK
 static stack_t stack;
 static stack_t old_stack;
 #endif
@@ -172,7 +173,7 @@
         return fd;
     }
 
-    result = _PyObject_CallMethodId(file, &PyId_fileno, NULL);
+    result = _PyObject_CallMethodIdNoArgs(file, &PyId_fileno);
     if (result == NULL)
         return -1;
 
@@ -190,7 +191,7 @@
         return -1;
     }
 
-    result = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+    result = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
     if (result != NULL)
         Py_DECREF(result);
     else {
@@ -427,6 +428,36 @@
 }
 #endif
 
+
+#ifdef FAULTHANDLER_USE_ALT_STACK
+static int
+faulthandler_allocate_stack(void)
+{
+    if (stack.ss_sp != NULL) {
+        return 0;
+    }
+    /* Allocate an alternate stack for faulthandler() signal handler
+       to be able to execute a signal handler on a stack overflow error */
+    stack.ss_sp = PyMem_Malloc(stack.ss_size);
+    if (stack.ss_sp == NULL) {
+        PyErr_NoMemory();
+        return -1;
+    }
+
+    int err = sigaltstack(&stack, &old_stack);
+    if (err) {
+        /* Release the stack to retry sigaltstack() next time */
+        PyMem_Free(stack.ss_sp);
+        stack.ss_sp = NULL;
+
+        PyErr_SetFromErrno(PyExc_OSError);
+        return -1;
+    }
+    return 0;
+}
+#endif
+
+
 /* Install the handler for fatal signals, faulthandler_fatal_error(). */
 
 static int
@@ -437,32 +468,35 @@
     }
     fatal_error.enabled = 1;
 
+#ifdef FAULTHANDLER_USE_ALT_STACK
+    if (faulthandler_allocate_stack() < 0) {
+        return -1;
+    }
+#endif
+
     for (size_t i=0; i < faulthandler_nsignals; i++) {
         fault_handler_t *handler;
-#ifdef HAVE_SIGACTION
-        struct sigaction action;
-#endif
         int err;
 
         handler = &faulthandler_handlers[i];
         assert(!handler->enabled);
 #ifdef HAVE_SIGACTION
+        struct sigaction action;
         action.sa_handler = faulthandler_fatal_error;
         sigemptyset(&action.sa_mask);
         /* Do not prevent the signal from being received from within
            its own signal handler */
         action.sa_flags = SA_NODEFER;
-#ifdef HAVE_SIGALTSTACK
-        if (stack.ss_sp != NULL) {
-            /* Call the signal handler on an alternate signal stack
-               provided by sigaltstack() */
-            action.sa_flags |= SA_ONSTACK;
-        }
+#ifdef FAULTHANDLER_USE_ALT_STACK
+        assert(stack.ss_sp != NULL);
+        /* Call the signal handler on an alternate signal stack
+           provided by sigaltstack() */
+        action.sa_flags |= SA_ONSTACK;
 #endif
         err = sigaction(handler->signum, &action, &handler->previous);
 #else
         handler->previous = signal(handler->signum,
-                faulthandler_fatal_error);
+                                   faulthandler_fatal_error);
         err = (handler->previous == SIG_ERR);
 #endif
         if (err) {
@@ -505,7 +539,7 @@
     Py_XSETREF(fatal_error.file, file);
     fatal_error.fd = fd;
     fatal_error.all_threads = all_threads;
-    fatal_error.interp = tstate->interp;
+    fatal_error.interp = PyThreadState_GetInterpreter(tstate);
 
     if (faulthandler_enable() < 0) {
         return NULL;
@@ -550,8 +584,6 @@
     return PyBool_FromLong(fatal_error.enabled);
 }
 
-#ifdef FAULTHANDLER_LATER
-
 static void
 faulthandler_thread(void *unused)
 {
@@ -592,6 +624,11 @@
 static void
 cancel_dump_traceback_later(void)
 {
+    /* If not scheduled, nothing to cancel */
+    if (!thread.cancel_event) {
+        return;
+    }
+
     /* Notify cancellation */
     PyThread_release_lock(thread.cancel_event);
 
@@ -676,17 +713,37 @@
     }
 
     tstate = get_thread_state();
-    if (tstate == NULL)
+    if (tstate == NULL) {
         return NULL;
+    }
 
     fd = faulthandler_get_fileno(&file);
-    if (fd < 0)
+    if (fd < 0) {
         return NULL;
+    }
+
+    if (!thread.running) {
+        thread.running = PyThread_allocate_lock();
+        if (!thread.running) {
+            return PyErr_NoMemory();
+        }
+    }
+    if (!thread.cancel_event) {
+        thread.cancel_event = PyThread_allocate_lock();
+        if (!thread.cancel_event || !thread.running) {
+            return PyErr_NoMemory();
+        }
+
+        /* cancel_event starts to be acquired: it's only released to cancel
+           the thread. */
+        PyThread_acquire_lock(thread.cancel_event, 1);
+    }
 
     /* format the timeout */
     header = format_timeout(timeout_us);
-    if (header == NULL)
+    if (header == NULL) {
         return PyErr_NoMemory();
+    }
     header_len = strlen(header);
 
     /* Cancel previous thread, if running */
@@ -698,7 +755,7 @@
     /* the downcast is safe: we check that 0 < timeout_us < PY_TIMEOUT_MAX */
     thread.timeout_us = (PY_TIMEOUT_T)timeout_us;
     thread.repeat = repeat;
-    thread.interp = tstate->interp;
+    thread.interp = PyThreadState_GetInterpreter(tstate);
     thread.exit = exit;
     thread.header = header;
     thread.header_len = header_len;
@@ -726,11 +783,11 @@
     cancel_dump_traceback_later();
     Py_RETURN_NONE;
 }
-#endif  /* FAULTHANDLER_LATER */
+
 
 #ifdef FAULTHANDLER_USER
 static int
-faulthandler_register(int signum, int chain, _Py_sighandler_t *p_previous)
+faulthandler_register(int signum, int chain, _Py_sighandler_t *previous_p)
 {
 #ifdef HAVE_SIGACTION
     struct sigaction action;
@@ -745,19 +802,19 @@
            own signal handler */
         action.sa_flags = SA_NODEFER;
     }
-#ifdef HAVE_SIGALTSTACK
-    if (stack.ss_sp != NULL) {
-        /* Call the signal handler on an alternate signal stack
-           provided by sigaltstack() */
-        action.sa_flags |= SA_ONSTACK;
-    }
+#ifdef FAULTHANDLER_USE_ALT_STACK
+    assert(stack.ss_sp != NULL);
+    /* Call the signal handler on an alternate signal stack
+       provided by sigaltstack() */
+    action.sa_flags |= SA_ONSTACK;
 #endif
-    return sigaction(signum, &action, p_previous);
+    return sigaction(signum, &action, previous_p);
 #else
     _Py_sighandler_t previous;
     previous = signal(signum, faulthandler_user);
-    if (p_previous != NULL)
-        *p_previous = previous;
+    if (previous_p != NULL) {
+        *previous_p = previous;
+    }
     return (previous == SIG_ERR);
 #endif
 }
@@ -853,14 +910,19 @@
         return NULL;
 
     if (user_signals == NULL) {
-        user_signals = PyMem_Malloc(NSIG * sizeof(user_signal_t));
+        user_signals = PyMem_Calloc(NSIG, sizeof(user_signal_t));
         if (user_signals == NULL)
             return PyErr_NoMemory();
-        memset(user_signals, 0, NSIG * sizeof(user_signal_t));
     }
     user = &user_signals[signum];
 
     if (!user->enabled) {
+#ifdef FAULTHANDLER_USE_ALT_STACK
+        if (faulthandler_allocate_stack() < 0) {
+            return NULL;
+        }
+#endif
+
         err = faulthandler_register(signum, chain, &previous);
         if (err) {
             PyErr_SetFromErrno(PyExc_OSError);
@@ -875,7 +937,7 @@
     user->fd = fd;
     user->all_threads = all_threads;
     user->chain = chain;
-    user->interp = tstate->interp;
+    user->interp = PyThreadState_GetInterpreter(tstate);
     user->enabled = 1;
 
     Py_RETURN_NONE;
@@ -1001,24 +1063,10 @@
     Py_RETURN_NONE;
 }
 
-static void
+static void _Py_NO_RETURN
 faulthandler_fatal_error_thread(void *plock)
 {
-#ifndef __clang__
-    PyThread_type_lock *lock = (PyThread_type_lock *)plock;
-#endif
-
     Py_FatalError("in new thread");
-
-#ifndef __clang__
-    /* Issue #28152: Py_FatalError() is declared with
-       __attribute__((__noreturn__)).  GCC emits a warning without
-       "PyThread_release_lock()" (compiler bug?), but Clang is smarter and
-       emits a warning on the return. */
-
-    /* notify the caller that we are done */
-    PyThread_release_lock(lock);
-#endif
 }
 
 static PyObject *
@@ -1094,7 +1142,7 @@
     Py_RETURN_NONE;
 }
 
-#if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
+#if defined(FAULTHANDLER_USE_ALT_STACK)
 #define FAULTHANDLER_STACK_OVERFLOW
 
 static uintptr_t
@@ -1149,15 +1197,13 @@
         size, depth);
     return NULL;
 }
-#endif   /* defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) */
+#endif   /* defined(FAULTHANDLER_USE_ALT_STACK) && defined(HAVE_SIGACTION) */
 
 
 static int
 faulthandler_traverse(PyObject *module, visitproc visit, void *arg)
 {
-#ifdef FAULTHANDLER_LATER
     Py_VISIT(thread.file);
-#endif
 #ifdef FAULTHANDLER_USER
     if (user_signals != NULL) {
         for (size_t signum=0; signum < NSIG; signum++)
@@ -1198,7 +1244,6 @@
      PyDoc_STR("dump_traceback(file=sys.stderr, all_threads=True): "
                "dump the traceback of the current thread, or of all threads "
                "if all_threads is True, into file")},
-#ifdef FAULTHANDLER_LATER
     {"dump_traceback_later",
      (PyCFunction)(void(*)(void))faulthandler_dump_traceback_later, METH_VARARGS|METH_KEYWORDS,
      PyDoc_STR("dump_traceback_later(timeout, repeat=False, file=sys.stderrn, exit=False):\n"
@@ -1209,8 +1254,6 @@
      faulthandler_cancel_dump_traceback_later_py, METH_NOARGS,
      PyDoc_STR("cancel_dump_traceback_later():\ncancel the previous call "
                "to dump_traceback_later().")},
-#endif
-
 #ifdef FAULTHANDLER_USER
     {"register",
      (PyCFunction)(void(*)(void))faulthandler_register_py, METH_VARARGS|METH_KEYWORDS,
@@ -1223,7 +1266,6 @@
      PyDoc_STR("unregister(signum): unregister the handler of the signal "
                 "'signum' registered by register()")},
 #endif
-
     {"_read_null", faulthandler_read_null, METH_NOARGS,
      PyDoc_STR("_read_null(): read from NULL, raise "
                "a SIGSEGV or SIGBUS signal depending on the platform")},
@@ -1312,7 +1354,7 @@
         return -1;
     }
 
-    PyObject *res = _PyObject_CallMethodId(module, &PyId_enable, NULL);
+    PyObject *res = _PyObject_CallMethodIdNoArgs(module, &PyId_enable);
     Py_DECREF(module);
     if (res == NULL) {
         return -1;
@@ -1325,36 +1367,17 @@
 PyStatus
 _PyFaulthandler_Init(int enable)
 {
-#ifdef HAVE_SIGALTSTACK
-    int err;
-
-    /* Try to allocate an alternate stack for faulthandler() signal handler to
-     * be able to allocate memory on the stack, even on a stack overflow. If it
-     * fails, ignore the error. */
+#ifdef FAULTHANDLER_USE_ALT_STACK
+    memset(&stack, 0, sizeof(stack));
     stack.ss_flags = 0;
     /* bpo-21131: allocate dedicated stack of SIGSTKSZ*2 bytes, instead of just
        SIGSTKSZ bytes. Calling the previous signal handler in faulthandler
        signal handler uses more than SIGSTKSZ bytes of stack memory on some
        platforms. */
     stack.ss_size = SIGSTKSZ * 2;
-    stack.ss_sp = PyMem_Malloc(stack.ss_size);
-    if (stack.ss_sp != NULL) {
-        err = sigaltstack(&stack, &old_stack);
-        if (err) {
-            PyMem_Free(stack.ss_sp);
-            stack.ss_sp = NULL;
-        }
-    }
 #endif
-#ifdef FAULTHANDLER_LATER
-    thread.file = NULL;
-    thread.cancel_event = PyThread_allocate_lock();
-    thread.running = PyThread_allocate_lock();
-    if (!thread.cancel_event || !thread.running) {
-        return _PyStatus_ERR("failed to allocate locks for faulthandler");
-    }
-    PyThread_acquire_lock(thread.cancel_event, 1);
-#endif
+
+    memset(&thread, 0, sizeof(thread));
 
     if (enable) {
         if (faulthandler_init_enable() < 0) {
@@ -1366,7 +1389,6 @@
 
 void _PyFaulthandler_Fini(void)
 {
-#ifdef FAULTHANDLER_LATER
     /* later */
     if (thread.cancel_event) {
         cancel_dump_traceback_later();
@@ -1378,7 +1400,6 @@
         PyThread_free_lock(thread.running);
         thread.running = NULL;
     }
-#endif
 
 #ifdef FAULTHANDLER_USER
     /* user */
@@ -1393,7 +1414,8 @@
 
     /* fatal */
     faulthandler_disable();
-#ifdef HAVE_SIGALTSTACK
+
+#ifdef FAULTHANDLER_USE_ALT_STACK
     if (stack.ss_sp != NULL) {
         /* Fetch the current alt stack */
         stack_t current_stack;
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index a7d2193..43f9b22 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -513,12 +513,24 @@
 #ifdef F_SETLKW
     if (PyModule_AddIntMacro(m, F_SETLKW)) return -1;
 #endif
+#ifdef F_OFD_GETLK
+    if (PyModule_AddIntMacro(m, F_OFD_GETLK)) return -1;
+#endif
+#ifdef F_OFD_SETLK
+    if (PyModule_AddIntMacro(m, F_OFD_SETLK)) return -1;
+#endif
+#ifdef F_OFD_SETLKW
+    if (PyModule_AddIntMacro(m, F_OFD_SETLKW)) return -1;
+#endif
 #ifdef F_GETOWN
     if (PyModule_AddIntMacro(m, F_GETOWN)) return -1;
 #endif
 #ifdef F_SETOWN
     if (PyModule_AddIntMacro(m, F_SETOWN)) return -1;
 #endif
+#ifdef F_GETPATH
+    if (PyModule_AddIntMacro(m, F_GETPATH)) return -1;
+#endif
 #ifdef F_GETSIG
     if (PyModule_AddIntMacro(m, F_GETSIG)) return -1;
 #endif
@@ -674,8 +686,10 @@
         return NULL;
 
     /* Add some symbolic constants to the module */
-    if (all_ins(m) < 0)
+    if (all_ins(m) < 0) {
+        Py_DECREF(m);
         return NULL;
+    }
 
     return m;
 }
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 5a6a81d..56dcb10 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -25,19 +25,25 @@
 
 #include "Python.h"
 #include "pycore_context.h"
+#include "pycore_initconfig.h"
+#include "pycore_interp.h"      // PyInterpreterState.gc
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "frameobject.h"        /* for PyFrame_ClearFreeList */
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"     // _PyThreadState_GET()
 #include "pydtrace.h"
-#include "pytime.h"             /* for _PyTime_GetMonotonicClock() */
+#include "pytime.h"             // _PyTime_GetMonotonicClock()
+
+typedef struct _gc_runtime_state GCState;
 
 /*[clinic input]
 module gc
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=b5c9690ecc842d79]*/
 
-#define GC_DEBUG (0)  /* Enable more asserts */
+
+#ifdef Py_DEBUG
+#  define GC_DEBUG
+#endif
 
 #define GC_NEXT _PyGCHead_NEXT
 #define GC_PREV _PyGCHead_PREV
@@ -111,9 +117,6 @@
     g->_gc_prev -= 1 << _PyGC_PREV_SHIFT;
 }
 
-/* Python string to use if unhandled exception occurs */
-static PyObject *gc_str = NULL;
-
 /* set for debugging information */
 #define DEBUG_STATS             (1<<0) /* print collection statistics */
 #define DEBUG_COLLECTABLE       (1<<1) /* print collectable objects */
@@ -123,14 +126,14 @@
                 DEBUG_UNCOLLECTABLE | \
                 DEBUG_SAVEALL
 
-#define GEN_HEAD(state, n) (&(state)->generations[n].head)
+#define GEN_HEAD(gcstate, n) (&(gcstate)->generations[n].head)
 
 void
-_PyGC_Initialize(struct _gc_runtime_state *state)
+_PyGC_InitState(GCState *gcstate)
 {
-    state->enabled = 1; /* automatic collection enabled? */
+    gcstate->enabled = 1; /* automatic collection enabled? */
 
-#define _GEN_HEAD(n) GEN_HEAD(state, n)
+#define _GEN_HEAD(n) GEN_HEAD(gcstate, n)
     struct gc_generation generations[NUM_GENERATIONS] = {
         /* PyGC_Head,                                    threshold,    count */
         {{(uintptr_t)_GEN_HEAD(0), (uintptr_t)_GEN_HEAD(0)},   700,        0},
@@ -138,16 +141,31 @@
         {{(uintptr_t)_GEN_HEAD(2), (uintptr_t)_GEN_HEAD(2)},   10,         0},
     };
     for (int i = 0; i < NUM_GENERATIONS; i++) {
-        state->generations[i] = generations[i];
+        gcstate->generations[i] = generations[i];
     };
-    state->generation0 = GEN_HEAD(state, 0);
+    gcstate->generation0 = GEN_HEAD(gcstate, 0);
     struct gc_generation permanent_generation = {
-          {(uintptr_t)&state->permanent_generation.head,
-           (uintptr_t)&state->permanent_generation.head}, 0, 0
+          {(uintptr_t)&gcstate->permanent_generation.head,
+           (uintptr_t)&gcstate->permanent_generation.head}, 0, 0
     };
-    state->permanent_generation = permanent_generation;
+    gcstate->permanent_generation = permanent_generation;
 }
 
+
+PyStatus
+_PyGC_Init(PyThreadState *tstate)
+{
+    GCState *gcstate = &tstate->interp->gc;
+    if (gcstate->garbage == NULL) {
+        gcstate->garbage = PyList_New(0);
+        if (gcstate->garbage == NULL) {
+            return _PyStatus_NO_MEMORY();
+        }
+    }
+    return _PyStatus_OK();
+}
+
+
 /*
 _gc_prev values
 ---------------
@@ -298,8 +316,18 @@
     return n;
 }
 
+/* Walk the list and mark all objects as non-collecting */
+static inline void
+gc_list_clear_collecting(PyGC_Head *collectable)
+{
+    PyGC_Head *gc;
+    for (gc = GC_NEXT(collectable); gc != collectable; gc = GC_NEXT(gc)) {
+        gc_clear_collecting(gc);
+    }
+}
+
 /* Append objects in a GC list to a Python list.
- * Return 0 if all OK, < 0 if error (out of memory for list).
+ * Return 0 if all OK, < 0 if error (out of memory for list)
  */
 static int
 append_objects(PyObject *py_list, PyGC_Head *gc_list)
@@ -316,25 +344,60 @@
     return 0;
 }
 
-#if GC_DEBUG
+// Constants for validate_list's flags argument.
+enum flagstates {collecting_clear_unreachable_clear,
+                 collecting_clear_unreachable_set,
+                 collecting_set_unreachable_clear,
+                 collecting_set_unreachable_set};
+
+#ifdef GC_DEBUG
 // validate_list checks list consistency.  And it works as document
-// describing when expected_mask is set / unset.
+// describing when flags are expected to be set / unset.
+// `head` must be a doubly-linked gc list, although it's fine (expected!) if
+// the prev and next pointers are "polluted" with flags.
+// What's checked:
+// - The `head` pointers are not polluted.
+// - The objects' PREV_MASK_COLLECTING and NEXT_MASK_UNREACHABLE flags are all
+//   `set or clear, as specified by the 'flags' argument.
+// - The prev and next pointers are mutually consistent.
 static void
-validate_list(PyGC_Head *head, uintptr_t expected_mask)
+validate_list(PyGC_Head *head, enum flagstates flags)
 {
+    assert((head->_gc_prev & PREV_MASK_COLLECTING) == 0);
+    assert((head->_gc_next & NEXT_MASK_UNREACHABLE) == 0);
+    uintptr_t prev_value = 0, next_value = 0;
+    switch (flags) {
+        case collecting_clear_unreachable_clear:
+            break;
+        case collecting_set_unreachable_clear:
+            prev_value = PREV_MASK_COLLECTING;
+            break;
+        case collecting_clear_unreachable_set:
+            next_value = NEXT_MASK_UNREACHABLE;
+            break;
+        case collecting_set_unreachable_set:
+            prev_value = PREV_MASK_COLLECTING;
+            next_value = NEXT_MASK_UNREACHABLE;
+            break;
+        default:
+            assert(! "bad internal flags argument");
+    }
     PyGC_Head *prev = head;
     PyGC_Head *gc = GC_NEXT(head);
     while (gc != head) {
-        assert(GC_NEXT(gc) != NULL);
-        assert(GC_PREV(gc) == prev);
-        assert((gc->_gc_prev & PREV_MASK_COLLECTING) == expected_mask);
+        PyGC_Head *trueprev = GC_PREV(gc);
+        PyGC_Head *truenext = (PyGC_Head *)(gc->_gc_next  & ~NEXT_MASK_UNREACHABLE);
+        assert(truenext != NULL);
+        assert(trueprev == prev);
+        assert((gc->_gc_prev & PREV_MASK_COLLECTING) == prev_value);
+        assert((gc->_gc_next & NEXT_MASK_UNREACHABLE) == next_value);
         prev = gc;
-        gc = GC_NEXT(gc);
+        gc = truenext;
     }
     assert(prev == GC_PREV(head));
 }
 #else
-#define validate_list(x,y) do{}while(0)
+#define validate_list(x, y) do{}while(0)
 #endif
 
 /*** end of list stuff ***/
@@ -377,7 +440,7 @@
 {
     _PyObject_ASSERT(_PyObject_CAST(parent), !_PyObject_IsFreed(op));
 
-    if (PyObject_IS_GC(op)) {
+    if (_PyObject_IS_GC(op)) {
         PyGC_Head *gc = AS_GC(op);
         /* We're only interested in gc_refs for objects in the
          * generation being collected, which can be recognized
@@ -413,17 +476,23 @@
 static int
 visit_reachable(PyObject *op, PyGC_Head *reachable)
 {
-    if (!PyObject_IS_GC(op)) {
+    if (!_PyObject_IS_GC(op)) {
         return 0;
     }
 
     PyGC_Head *gc = AS_GC(op);
     const Py_ssize_t gc_refs = gc_get_refs(gc);
 
-    // Ignore untracked objects and objects in other generation.
-    if (gc->_gc_next == 0 || !gc_is_collecting(gc)) {
+    // Ignore objects in other generation.
+    // This also skips objects "to the left" of the current position in
+    // move_unreachable's scan of the 'young' list - they've already been
+    // traversed, and no longer have the PREV_MASK_COLLECTING flag.
+    if (! gc_is_collecting(gc)) {
         return 0;
     }
+    // It would be a logic error elsewhere if the collecting flag were set on
+    // an untracked object.
+    assert(gc->_gc_next != 0);
 
     if (gc->_gc_next & NEXT_MASK_UNREACHABLE) {
         /* This had gc_refs = 0 when move_unreachable got
@@ -432,7 +501,8 @@
          * and move_unreachable will eventually get to it
          * again.
          */
-        // Manually unlink gc from unreachable list because
+        // Manually unlink gc from unreachable list because the list functions
+        // don't work right in the presence of NEXT_MASK_UNREACHABLE flags.
         PyGC_Head *prev = GC_PREV(gc);
         PyGC_Head *next = (PyGC_Head*)(gc->_gc_next & ~NEXT_MASK_UNREACHABLE);
         _PyObject_ASSERT(FROM_GC(prev),
@@ -533,8 +603,9 @@
             PyGC_Head *last = GC_PREV(unreachable);
             // NOTE: Since all objects in unreachable set has
             // NEXT_MASK_UNREACHABLE flag, we set it unconditionally.
-            // But this may set the flat to unreachable too.
-            // move_legacy_finalizers() should care about it.
+            // But this may pollute the unreachable list head's 'next' pointer
+            // too. That's semantically senseless but expedient here - the
+            // damage is repaired when this function ends.
             last->_gc_next = (NEXT_MASK_UNREACHABLE | (uintptr_t)gc);
             _PyGCHead_SET_PREV(gc, last);
             gc->_gc_next = (NEXT_MASK_UNREACHABLE | (uintptr_t)unreachable);
@@ -544,6 +615,8 @@
     }
     // young->_gc_prev must be last element remained in the list.
     young->_gc_prev = (uintptr_t)prev;
+    // don't let the pollution of the list head's next pointer leak
+    unreachable->_gc_next &= ~NEXT_MASK_UNREACHABLE;
 }
 
 static void
@@ -579,7 +652,7 @@
 static int
 has_legacy_finalizer(PyObject *op)
 {
-    return op->ob_type->tp_del != NULL;
+    return Py_TYPE(op)->tp_del != NULL;
 }
 
 /* Move the objects in unreachable with tp_del slots into `finalizers`.
@@ -591,7 +664,7 @@
 move_legacy_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers)
 {
     PyGC_Head *gc, *next;
-    unreachable->_gc_next &= ~NEXT_MASK_UNREACHABLE;
+    assert((unreachable->_gc_next & NEXT_MASK_UNREACHABLE) == 0);
 
     /* March over unreachable.  Move objects with finalizers into
      * `finalizers`.
@@ -610,11 +683,27 @@
     }
 }
 
+static inline void
+clear_unreachable_mask(PyGC_Head *unreachable)
+{
+    /* Check that the list head does not have the unreachable bit set */
+    assert(((uintptr_t)unreachable & NEXT_MASK_UNREACHABLE) == 0);
+
+    PyGC_Head *gc, *next;
+    assert((unreachable->_gc_next & NEXT_MASK_UNREACHABLE) == 0);
+    for (gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
+        _PyObject_ASSERT((PyObject*)FROM_GC(gc), gc->_gc_next & NEXT_MASK_UNREACHABLE);
+        gc->_gc_next &= ~NEXT_MASK_UNREACHABLE;
+        next = (PyGC_Head*)gc->_gc_next;
+    }
+    validate_list(unreachable, collecting_set_unreachable_clear);
+}
+
 /* A traversal callback for move_legacy_finalizer_reachable. */
 static int
 visit_move(PyObject *op, PyGC_Head *tolist)
 {
-    if (PyObject_IS_GC(op)) {
+    if (_PyObject_IS_GC(op)) {
         PyGC_Head *gc = AS_GC(op);
         if (gc_is_collecting(gc)) {
             gc_list_move(gc, tolist);
@@ -698,7 +787,7 @@
 
         /* It supports weakrefs.  Does it have any? */
         wrlist = (PyWeakReference **)
-                                PyObject_GET_WEAKREFS_LISTPTR(op);
+                                _PyObject_GET_WEAKREFS_LISTPTR(op);
 
         /* `op` may have some weakrefs.  March over the list, clear
          * all the weakrefs, and move the weakrefs with callbacks
@@ -782,7 +871,7 @@
         _PyObject_ASSERT(op, callback != NULL);
 
         /* copy-paste of weakrefobject.c's handle_callback() */
-        temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
+        temp = PyObject_CallOneArg(callback, (PyObject *)wr);
         if (temp == NULL)
             PyErr_WriteUnraisable(callback);
         else
@@ -827,23 +916,20 @@
  * merged into the old list regardless.
  */
 static void
-handle_legacy_finalizers(struct _gc_runtime_state *state,
+handle_legacy_finalizers(PyThreadState *tstate,
+                         GCState *gcstate,
                          PyGC_Head *finalizers, PyGC_Head *old)
 {
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
+    assert(gcstate->garbage != NULL);
 
     PyGC_Head *gc = GC_NEXT(finalizers);
-    if (state->garbage == NULL) {
-        state->garbage = PyList_New(0);
-        if (state->garbage == NULL)
-            Py_FatalError("gc couldn't create gc.garbage list");
-    }
     for (; gc != finalizers; gc = GC_NEXT(gc)) {
         PyObject *op = FROM_GC(gc);
 
-        if ((state->debug & DEBUG_SAVEALL) || has_legacy_finalizer(op)) {
-            if (PyList_Append(state->garbage, op) < 0) {
-                PyErr_Clear();
+        if ((gcstate->debug & DEBUG_SAVEALL) || has_legacy_finalizer(op)) {
+            if (PyList_Append(gcstate->garbage, op) < 0) {
+                _PyErr_Clear(tstate);
                 break;
             }
         }
@@ -857,7 +943,7 @@
  * list, due to refcounts falling to 0.
  */
 static void
-finalize_garbage(PyGC_Head *collectable)
+finalize_garbage(PyThreadState *tstate, PyGC_Head *collectable)
 {
     destructor finalize;
     PyGC_Head seen;
@@ -881,52 +967,22 @@
             _PyGCHead_SET_FINALIZED(gc);
             Py_INCREF(op);
             finalize(op);
-            assert(!PyErr_Occurred());
+            assert(!_PyErr_Occurred(tstate));
             Py_DECREF(op);
         }
     }
     gc_list_merge(&seen, collectable);
 }
 
-/* Walk the collectable list and check that they are really unreachable
-   from the outside (some objects could have been resurrected by a
-   finalizer). */
-static int
-check_garbage(PyGC_Head *collectable)
-{
-    int ret = 0;
-    PyGC_Head *gc;
-    for (gc = GC_NEXT(collectable); gc != collectable; gc = GC_NEXT(gc)) {
-        // Use gc_refs and break gc_prev again.
-        gc_set_refs(gc, Py_REFCNT(FROM_GC(gc)));
-        _PyObject_ASSERT(FROM_GC(gc), gc_get_refs(gc) != 0);
-    }
-    subtract_refs(collectable);
-    PyGC_Head *prev = collectable;
-    for (gc = GC_NEXT(collectable); gc != collectable; gc = GC_NEXT(gc)) {
-        _PyObject_ASSERT_WITH_MSG(FROM_GC(gc),
-                                  gc_get_refs(gc) >= 0,
-                                  "refcount is too small");
-        if (gc_get_refs(gc) != 0) {
-            ret = -1;
-        }
-        // Restore gc_prev here.
-        _PyGCHead_SET_PREV(gc, prev);
-        gc_clear_collecting(gc);
-        prev = gc;
-    }
-    return ret;
-}
-
 /* Break reference cycles by clearing the containers involved.  This is
  * tricky business as the lists can be changing and we don't know which
  * objects may be freed.  It is possible I screwed something up here.
  */
 static void
-delete_garbage(struct _gc_runtime_state *state,
+delete_garbage(PyThreadState *tstate, GCState *gcstate,
                PyGC_Head *collectable, PyGC_Head *old)
 {
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 
     while (!gc_list_is_empty(collectable)) {
         PyGC_Head *gc = GC_NEXT(collectable);
@@ -935,10 +991,10 @@
         _PyObject_ASSERT_WITH_MSG(op, Py_REFCNT(op) > 0,
                                   "refcount is too small");
 
-        if (state->debug & DEBUG_SAVEALL) {
-            assert(state->garbage != NULL);
-            if (PyList_Append(state->garbage, op) < 0) {
-                PyErr_Clear();
+        if (gcstate->debug & DEBUG_SAVEALL) {
+            assert(gcstate->garbage != NULL);
+            if (PyList_Append(gcstate->garbage, op) < 0) {
+                _PyErr_Clear(tstate);
             }
         }
         else {
@@ -946,7 +1002,7 @@
             if ((clear = Py_TYPE(op)->tp_clear) != NULL) {
                 Py_INCREF(op);
                 (void) clear(op);
-                if (PyErr_Occurred()) {
+                if (_PyErr_Occurred(tstate)) {
                     _PyErr_WriteUnraisableMsg("in tp_clear of",
                                               (PyObject*)Py_TYPE(op));
                 }
@@ -955,6 +1011,7 @@
         }
         if (GC_NEXT(collectable) == gc) {
             /* object is still alive, move it, it may die later */
+            gc_clear_collecting(gc);
             gc_list_move(gc, old);
         }
     }
@@ -968,22 +1025,18 @@
 static void
 clear_freelists(void)
 {
-    (void)PyMethod_ClearFreeList();
-    (void)PyFrame_ClearFreeList();
-    (void)PyCFunction_ClearFreeList();
-    (void)PyTuple_ClearFreeList();
-    (void)PyUnicode_ClearFreeList();
-    (void)PyFloat_ClearFreeList();
-    (void)PyList_ClearFreeList();
-    (void)PyDict_ClearFreeList();
-    (void)PySet_ClearFreeList();
-    (void)PyAsyncGen_ClearFreeLists();
-    (void)PyContext_ClearFreeList();
+    _PyFrame_ClearFreeList();
+    _PyTuple_ClearFreeList();
+    _PyFloat_ClearFreeList();
+    _PyList_ClearFreeList();
+    _PyDict_ClearFreeList();
+    _PyAsyncGen_ClearFreeLists();
+    _PyContext_ClearFreeList();
 }
 
-// Show stats for objects in each gennerations.
+// Show stats for objects in each generations
 static void
-show_stats_each_generations(struct _gc_runtime_state *state)
+show_stats_each_generations(GCState *gcstate)
 {
     char buf[100];
     size_t pos = 0;
@@ -991,19 +1044,130 @@
     for (int i = 0; i < NUM_GENERATIONS && pos < sizeof(buf); i++) {
         pos += PyOS_snprintf(buf+pos, sizeof(buf)-pos,
                              " %"PY_FORMAT_SIZE_T"d",
-                             gc_list_size(GEN_HEAD(state, i)));
+                             gc_list_size(GEN_HEAD(gcstate, i)));
     }
 
     PySys_FormatStderr(
         "gc: objects in each generation:%s\n"
         "gc: objects in permanent generation: %zd\n",
-        buf, gc_list_size(&state->permanent_generation.head));
+        buf, gc_list_size(&gcstate->permanent_generation.head));
+}
+
+/* Deduce which objects among "base" are unreachable from outside the list
+   and move them to 'unreachable'. The process consist in the following steps:
+
+1. Copy all reference counts to a different field (gc_prev is used to hold
+   this copy to save memory).
+2. Traverse all objects in "base" and visit all referred objects using
+   "tp_traverse" and for every visited object, subtract 1 to the reference
+   count (the one that we copied in the previous step). After this step, all
+   objects that can be reached directly from outside must have strictly positive
+   reference count, while all unreachable objects must have a count of exactly 0.
+3. Identify all unreachable objects (the ones with 0 reference count) and move
+   them to the "unreachable" list. This step also needs to move back to "base" all
+   objects that were initially marked as unreachable but are referred transitively
+   by the reachable objects (the ones with strictly positive reference count).
+
+Contracts:
+
+    * The "base" has to be a valid list with no mask set.
+
+    * The "unreachable" list must be uninitialized (this function calls
+      gc_list_init over 'unreachable').
+
+IMPORTANT: This function leaves 'unreachable' with the NEXT_MASK_UNREACHABLE
+flag set but it does not clear it to skip unnecessary iteration. Before the
+flag is cleared (for example, by using 'clear_unreachable_mask' function or
+by a call to 'move_legacy_finalizers'), the 'unreachable' list is not a normal
+list and we can not use most gc_list_* functions for it. */
+static inline void
+deduce_unreachable(PyGC_Head *base, PyGC_Head *unreachable) {
+    validate_list(base, collecting_clear_unreachable_clear);
+    /* Using ob_refcnt and gc_refs, calculate which objects in the
+     * container set are reachable from outside the set (i.e., have a
+     * refcount greater than 0 when all the references within the
+     * set are taken into account).
+     */
+    update_refs(base);  // gc_prev is used for gc_refs
+    subtract_refs(base);
+
+    /* Leave everything reachable from outside base in base, and move
+     * everything else (in base) to unreachable.
+     *
+     * NOTE:  This used to move the reachable objects into a reachable
+     * set instead.  But most things usually turn out to be reachable,
+     * so it's more efficient to move the unreachable things.  It "sounds slick"
+     * to move the unreachable objects, until you think about it - the reason it
+     * pays isn't actually obvious.
+     *
+     * Suppose we create objects A, B, C in that order.  They appear in the young
+     * generation in the same order.  If B points to A, and C to B, and C is
+     * reachable from outside, then the adjusted refcounts will be 0, 0, and 1
+     * respectively.
+     *
+     * When move_unreachable finds A, A is moved to the unreachable list.  The
+     * same for B when it's first encountered.  Then C is traversed, B is moved
+     * _back_ to the reachable list.  B is eventually traversed, and then A is
+     * moved back to the reachable list.
+     *
+     * So instead of not moving at all, the reachable objects B and A are moved
+     * twice each.  Why is this a win?  A straightforward algorithm to move the
+     * reachable objects instead would move A, B, and C once each.
+     *
+     * The key is that this dance leaves the objects in order C, B, A - it's
+     * reversed from the original order.  On all _subsequent_ scans, none of
+     * them will move.  Since most objects aren't in cycles, this can save an
+     * unbounded number of moves across an unbounded number of later collections.
+     * It can cost more only the first time the chain is scanned.
+     *
+     * Drawback:  move_unreachable is also used to find out what's still trash
+     * after finalizers may resurrect objects.  In _that_ case most unreachable
+     * objects will remain unreachable, so it would be more efficient to move
+     * the reachable objects instead.  But this is a one-time cost, probably not
+     * worth complicating the code to speed just a little.
+     */
+    gc_list_init(unreachable);
+    move_unreachable(base, unreachable);  // gc_prev is pointer again
+    validate_list(base, collecting_clear_unreachable_clear);
+    validate_list(unreachable, collecting_set_unreachable_set);
+}
+
+/* Handle objects that may have resurrected after a call to 'finalize_garbage', moving
+   them to 'old_generation' and placing the rest on 'still_unreachable'.
+
+   Contracts:
+       * After this function 'unreachable' must not be used anymore and 'still_unreachable'
+         will contain the objects that did not resurrect.
+
+       * The "still_unreachable" list must be uninitialized (this function calls
+         gc_list_init over 'still_unreachable').
+
+IMPORTANT: After a call to this function, the 'still_unreachable' set will have the
+PREV_MARK_COLLECTING set, but the objects in this set are going to be removed so
+we can skip the expense of clearing the flag to avoid extra iteration. */
+static inline void
+handle_resurrected_objects(PyGC_Head *unreachable, PyGC_Head* still_unreachable,
+                           PyGC_Head *old_generation)
+{
+    // Remove the PREV_MASK_COLLECTING from unreachable
+    // to prepare it for a new call to 'deduce_unreachable'
+    gc_list_clear_collecting(unreachable);
+
+    // After the call to deduce_unreachable, the 'still_unreachable' set will
+    // have the PREV_MARK_COLLECTING set, but the objects are going to be
+    // removed so we can skip the expense of clearing the flag.
+    PyGC_Head* resurrected = unreachable;
+    deduce_unreachable(resurrected, still_unreachable);
+    clear_unreachable_mask(still_unreachable);
+
+    // Move the resurrected objects to the old generation for future collection.
+    gc_list_merge(resurrected, old_generation);
 }
 
 /* This is the main function.  Read this to understand how the
  * collection process works. */
 static Py_ssize_t
-collect(struct _gc_runtime_state *state, int generation,
+collect(PyThreadState *tstate, int generation,
         Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable, int nofail)
 {
     int i;
@@ -1015,10 +1179,11 @@
     PyGC_Head finalizers;  /* objects with, & reachable from, __del__ */
     PyGC_Head *gc;
     _PyTime_t t1 = 0;   /* initialize to prevent a compiler warning */
+    GCState *gcstate = &tstate->interp->gc;
 
-    if (state->debug & DEBUG_STATS) {
+    if (gcstate->debug & DEBUG_STATS) {
         PySys_WriteStderr("gc: collecting generation %d...\n", generation);
-        show_stats_each_generations(state);
+        show_stats_each_generations(gcstate);
         t1 = _PyTime_GetMonotonicClock();
     }
 
@@ -1027,56 +1192,39 @@
 
     /* update collection and allocation counters */
     if (generation+1 < NUM_GENERATIONS)
-        state->generations[generation+1].count += 1;
+        gcstate->generations[generation+1].count += 1;
     for (i = 0; i <= generation; i++)
-        state->generations[i].count = 0;
+        gcstate->generations[i].count = 0;
 
     /* merge younger generations with one we are currently collecting */
     for (i = 0; i < generation; i++) {
-        gc_list_merge(GEN_HEAD(state, i), GEN_HEAD(state, generation));
+        gc_list_merge(GEN_HEAD(gcstate, i), GEN_HEAD(gcstate, generation));
     }
 
     /* handy references */
-    young = GEN_HEAD(state, generation);
+    young = GEN_HEAD(gcstate, generation);
     if (generation < NUM_GENERATIONS-1)
-        old = GEN_HEAD(state, generation+1);
+        old = GEN_HEAD(gcstate, generation+1);
     else
         old = young;
+    validate_list(old, collecting_clear_unreachable_clear);
 
-    validate_list(young, 0);
-    validate_list(old, 0);
-    /* Using ob_refcnt and gc_refs, calculate which objects in the
-     * container set are reachable from outside the set (i.e., have a
-     * refcount greater than 0 when all the references within the
-     * set are taken into account).
-     */
-    update_refs(young);  // gc_prev is used for gc_refs
-    subtract_refs(young);
-
-    /* Leave everything reachable from outside young in young, and move
-     * everything else (in young) to unreachable.
-     * NOTE:  This used to move the reachable objects into a reachable
-     * set instead.  But most things usually turn out to be reachable,
-     * so it's more efficient to move the unreachable things.
-     */
-    gc_list_init(&unreachable);
-    move_unreachable(young, &unreachable);  // gc_prev is pointer again
-    validate_list(young, 0);
+    deduce_unreachable(young, &unreachable);
 
     untrack_tuples(young);
     /* Move reachable objects to next generation. */
     if (young != old) {
         if (generation == NUM_GENERATIONS - 2) {
-            state->long_lived_pending += gc_list_size(young);
+            gcstate->long_lived_pending += gc_list_size(young);
         }
         gc_list_merge(young, old);
     }
     else {
-        /* We only untrack dicts in full collections, to avoid quadratic
+        /* We only un-track dicts in full collections, to avoid quadratic
            dict build-up. See issue #14775. */
         untrack_dicts(young);
-        state->long_lived_pending = 0;
-        state->long_lived_total = gc_list_size(young);
+        gcstate->long_lived_pending = 0;
+        gcstate->long_lived_total = gc_list_size(young);
     }
 
     /* All objects in unreachable are trash, but objects reachable from
@@ -1092,11 +1240,11 @@
      */
     move_legacy_finalizer_reachable(&finalizers);
 
-    validate_list(&finalizers, 0);
-    validate_list(&unreachable, PREV_MASK_COLLECTING);
+    validate_list(&finalizers, collecting_clear_unreachable_clear);
+    validate_list(&unreachable, collecting_set_unreachable_clear);
 
     /* Print debugging information. */
-    if (state->debug & DEBUG_COLLECTABLE) {
+    if (gcstate->debug & DEBUG_COLLECTABLE) {
         for (gc = GC_NEXT(&unreachable); gc != &unreachable; gc = GC_NEXT(gc)) {
             debug_cycle("collectable", FROM_GC(gc));
         }
@@ -1105,32 +1253,33 @@
     /* Clear weakrefs and invoke callbacks as necessary. */
     m += handle_weakrefs(&unreachable, old);
 
-    validate_list(old, 0);
-    validate_list(&unreachable, PREV_MASK_COLLECTING);
+    validate_list(old, collecting_clear_unreachable_clear);
+    validate_list(&unreachable, collecting_set_unreachable_clear);
 
     /* Call tp_finalize on objects which have one. */
-    finalize_garbage(&unreachable);
+    finalize_garbage(tstate, &unreachable);
 
-    if (check_garbage(&unreachable)) { // clear PREV_MASK_COLLECTING here
-        gc_list_merge(&unreachable, old);
-    }
-    else {
-        /* Call tp_clear on objects in the unreachable set.  This will cause
-         * the reference cycles to be broken.  It may also cause some objects
-         * in finalizers to be freed.
-         */
-        m += gc_list_size(&unreachable);
-        delete_garbage(state, &unreachable, old);
-    }
+    /* Handle any objects that may have resurrected after the call
+     * to 'finalize_garbage' and continue the collection with the
+     * objects that are still unreachable */
+    PyGC_Head final_unreachable;
+    handle_resurrected_objects(&unreachable, &final_unreachable, old);
+
+    /* Call tp_clear on objects in the final_unreachable set.  This will cause
+    * the reference cycles to be broken.  It may also cause some objects
+    * in finalizers to be freed.
+    */
+    m += gc_list_size(&final_unreachable);
+    delete_garbage(tstate, gcstate, &final_unreachable, old);
 
     /* Collect statistics on uncollectable objects found and print
      * debugging information. */
     for (gc = GC_NEXT(&finalizers); gc != &finalizers; gc = GC_NEXT(gc)) {
         n++;
-        if (state->debug & DEBUG_UNCOLLECTABLE)
+        if (gcstate->debug & DEBUG_UNCOLLECTABLE)
             debug_cycle("uncollectable", FROM_GC(gc));
     }
-    if (state->debug & DEBUG_STATS) {
+    if (gcstate->debug & DEBUG_STATS) {
         double d = _PyTime_AsSecondsDouble(_PyTime_GetMonotonicClock() - t1);
         PySys_WriteStderr(
             "gc: done, %" PY_FORMAT_SIZE_T "d unreachable, "
@@ -1142,8 +1291,8 @@
      * reachable list of garbage.  The programmer has to deal with
      * this if they insist on creating this type of structure.
      */
-    handle_legacy_finalizers(state, &finalizers, old);
-    validate_list(old, 0);
+    handle_legacy_finalizers(tstate, gcstate, &finalizers, old);
+    validate_list(old, collecting_clear_unreachable_clear);
 
     /* Clear free list only during the collection of the highest
      * generation */
@@ -1151,15 +1300,12 @@
         clear_freelists();
     }
 
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         if (nofail) {
-            PyErr_Clear();
+            _PyErr_Clear(tstate);
         }
         else {
-            if (gc_str == NULL)
-                gc_str = PyUnicode_FromString("garbage collection");
-            PyErr_WriteUnraisable(gc_str);
-            Py_FatalError("unexpected exception during garbage collection");
+            _PyErr_WriteUnraisableMsg("in garbage collection", NULL);
         }
     }
 
@@ -1171,38 +1317,39 @@
         *n_uncollectable = n;
     }
 
-    struct gc_generation_stats *stats = &state->generation_stats[generation];
+    struct gc_generation_stats *stats = &gcstate->generation_stats[generation];
     stats->collections++;
     stats->collected += m;
     stats->uncollectable += n;
 
     if (PyDTrace_GC_DONE_ENABLED()) {
-        PyDTrace_GC_DONE(n+m);
+        PyDTrace_GC_DONE(n + m);
     }
 
-    assert(!PyErr_Occurred());
-    return n+m;
+    assert(!_PyErr_Occurred(tstate));
+    return n + m;
 }
 
 /* Invoke progress callbacks to notify clients that garbage collection
  * is starting or stopping
  */
 static void
-invoke_gc_callback(struct _gc_runtime_state *state, const char *phase,
+invoke_gc_callback(PyThreadState *tstate, const char *phase,
                    int generation, Py_ssize_t collected,
                    Py_ssize_t uncollectable)
 {
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 
     /* we may get called very early */
-    if (state->callbacks == NULL) {
+    GCState *gcstate = &tstate->interp->gc;
+    if (gcstate->callbacks == NULL) {
         return;
     }
 
     /* The local variable cannot be rebound, check it for sanity */
-    assert(PyList_CheckExact(state->callbacks));
+    assert(PyList_CheckExact(gcstate->callbacks));
     PyObject *info = NULL;
-    if (PyList_GET_SIZE(state->callbacks) != 0) {
+    if (PyList_GET_SIZE(gcstate->callbacks) != 0) {
         info = Py_BuildValue("{sisnsn}",
             "generation", generation,
             "collected", collected,
@@ -1212,8 +1359,8 @@
             return;
         }
     }
-    for (Py_ssize_t i=0; i<PyList_GET_SIZE(state->callbacks); i++) {
-        PyObject *r, *cb = PyList_GET_ITEM(state->callbacks, i);
+    for (Py_ssize_t i=0; i<PyList_GET_SIZE(gcstate->callbacks); i++) {
+        PyObject *r, *cb = PyList_GET_ITEM(gcstate->callbacks, i);
         Py_INCREF(cb); /* make sure cb doesn't go away */
         r = PyObject_CallFunction(cb, "sO", phase, info);
         if (r == NULL) {
@@ -1225,41 +1372,74 @@
         Py_DECREF(cb);
     }
     Py_XDECREF(info);
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 }
 
 /* Perform garbage collection of a generation and invoke
  * progress callbacks.
  */
 static Py_ssize_t
-collect_with_callback(struct _gc_runtime_state *state, int generation)
+collect_with_callback(PyThreadState *tstate, int generation)
 {
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
     Py_ssize_t result, collected, uncollectable;
-    invoke_gc_callback(state, "start", generation, 0, 0);
-    result = collect(state, generation, &collected, &uncollectable, 0);
-    invoke_gc_callback(state, "stop", generation, collected, uncollectable);
-    assert(!PyErr_Occurred());
+    invoke_gc_callback(tstate, "start", generation, 0, 0);
+    result = collect(tstate, generation, &collected, &uncollectable, 0);
+    invoke_gc_callback(tstate, "stop", generation, collected, uncollectable);
+    assert(!_PyErr_Occurred(tstate));
     return result;
 }
 
 static Py_ssize_t
-collect_generations(struct _gc_runtime_state *state)
+collect_generations(PyThreadState *tstate)
 {
+    GCState *gcstate = &tstate->interp->gc;
     /* Find the oldest generation (highest numbered) where the count
      * exceeds the threshold.  Objects in the that generation and
      * generations younger than it will be collected. */
     Py_ssize_t n = 0;
     for (int i = NUM_GENERATIONS-1; i >= 0; i--) {
-        if (state->generations[i].count > state->generations[i].threshold) {
+        if (gcstate->generations[i].count > gcstate->generations[i].threshold) {
             /* Avoid quadratic performance degradation in number
-               of tracked objects. See comments at the beginning
-               of this file, and issue #4074.
+               of tracked objects (see also issue #4074):
+
+               To limit the cost of garbage collection, there are two strategies;
+                 - make each collection faster, e.g. by scanning fewer objects
+                 - do less collections
+               This heuristic is about the latter strategy.
+
+               In addition to the various configurable thresholds, we only trigger a
+               full collection if the ratio
+
+                long_lived_pending / long_lived_total
+
+               is above a given value (hardwired to 25%).
+
+               The reason is that, while "non-full" collections (i.e., collections of
+               the young and middle generations) will always examine roughly the same
+               number of objects -- determined by the aforementioned thresholds --,
+               the cost of a full collection is proportional to the total number of
+               long-lived objects, which is virtually unbounded.
+
+               Indeed, it has been remarked that doing a full collection every
+               <constant number> of object creations entails a dramatic performance
+               degradation in workloads which consist in creating and storing lots of
+               long-lived objects (e.g. building a large list of GC-tracked objects would
+               show quadratic performance, instead of linear as expected: see issue #4074).
+
+               Using the above ratio, instead, yields amortized linear performance in
+               the total number of objects (the effect of which can be summarized
+               thusly: "each full garbage collection is more and more costly as the
+               number of objects grows, but we do fewer and fewer of them").
+
+               This heuristic was suggested by Martin von Löwis on python-dev in
+               June 2008. His original analysis and proposal can be found at:
+               http://mail.python.org/pipermail/python-dev/2008-June/080579.html
             */
             if (i == NUM_GENERATIONS - 1
-                && state->long_lived_pending < state->long_lived_total / 4)
+                && gcstate->long_lived_pending < gcstate->long_lived_total / 4)
                 continue;
-            n = collect_with_callback(state, i);
+            n = collect_with_callback(tstate, i);
             break;
         }
     }
@@ -1278,7 +1458,9 @@
 gc_enable_impl(PyObject *module)
 /*[clinic end generated code: output=45a427e9dce9155c input=81ac4940ca579707]*/
 {
-    _PyRuntime.gc.enabled = 1;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    gcstate->enabled = 1;
     Py_RETURN_NONE;
 }
 
@@ -1292,7 +1474,9 @@
 gc_disable_impl(PyObject *module)
 /*[clinic end generated code: output=97d1030f7aa9d279 input=8c2e5a14e800d83b]*/
 {
-    _PyRuntime.gc.enabled = 0;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    gcstate->enabled = 0;
     Py_RETURN_NONE;
 }
 
@@ -1306,7 +1490,9 @@
 gc_isenabled_impl(PyObject *module)
 /*[clinic end generated code: output=1874298331c49130 input=30005e0422373b31]*/
 {
-    return _PyRuntime.gc.enabled;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    return gcstate->enabled;
 }
 
 /*[clinic input]
@@ -1327,22 +1513,23 @@
 gc_collect_impl(PyObject *module, int generation)
 /*[clinic end generated code: output=b697e633043233c7 input=40720128b682d879]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
 
     if (generation < 0 || generation >= NUM_GENERATIONS) {
-        PyErr_SetString(PyExc_ValueError, "invalid generation");
+        _PyErr_SetString(tstate, PyExc_ValueError, "invalid generation");
         return -1;
     }
 
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    GCState *gcstate = &tstate->interp->gc;
     Py_ssize_t n;
-    if (state->collecting) {
+    if (gcstate->collecting) {
         /* already collecting, don't do anything */
         n = 0;
     }
     else {
-        state->collecting = 1;
-        n = collect_with_callback(state, generation);
-        state->collecting = 0;
+        gcstate->collecting = 1;
+        n = collect_with_callback(tstate, generation);
+        gcstate->collecting = 0;
     }
     return n;
 }
@@ -1369,8 +1556,9 @@
 gc_set_debug_impl(PyObject *module, int flags)
 /*[clinic end generated code: output=7c8366575486b228 input=5e5ce15e84fbed15]*/
 {
-    _PyRuntime.gc.debug = flags;
-
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    gcstate->debug = flags;
     Py_RETURN_NONE;
 }
 
@@ -1384,7 +1572,9 @@
 gc_get_debug_impl(PyObject *module)
 /*[clinic end generated code: output=91242f3506cd1e50 input=91a101e1c3b98366]*/
 {
-    return _PyRuntime.gc.debug;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    return gcstate->debug;
 }
 
 PyDoc_STRVAR(gc_set_thresh__doc__,
@@ -1396,15 +1586,16 @@
 static PyObject *
 gc_set_threshold(PyObject *self, PyObject *args)
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
     if (!PyArg_ParseTuple(args, "i|ii:set_threshold",
-                          &state->generations[0].threshold,
-                          &state->generations[1].threshold,
-                          &state->generations[2].threshold))
+                          &gcstate->generations[0].threshold,
+                          &gcstate->generations[1].threshold,
+                          &gcstate->generations[2].threshold))
         return NULL;
     for (int i = 3; i < NUM_GENERATIONS; i++) {
         /* generations higher than 2 get the same threshold */
-        state->generations[i].threshold = state->generations[2].threshold;
+        gcstate->generations[i].threshold = gcstate->generations[2].threshold;
     }
     Py_RETURN_NONE;
 }
@@ -1419,11 +1610,12 @@
 gc_get_threshold_impl(PyObject *module)
 /*[clinic end generated code: output=7902bc9f41ecbbd8 input=286d79918034d6e6]*/
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
     return Py_BuildValue("(iii)",
-                         state->generations[0].threshold,
-                         state->generations[1].threshold,
-                         state->generations[2].threshold);
+                         gcstate->generations[0].threshold,
+                         gcstate->generations[1].threshold,
+                         gcstate->generations[2].threshold);
 }
 
 /*[clinic input]
@@ -1436,11 +1628,12 @@
 gc_get_count_impl(PyObject *module)
 /*[clinic end generated code: output=354012e67b16398f input=a392794a08251751]*/
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
     return Py_BuildValue("(iii)",
-                         state->generations[0].count,
-                         state->generations[1].count,
-                         state->generations[2].count);
+                         gcstate->generations[0].count,
+                         gcstate->generations[1].count,
+                         gcstate->generations[2].count);
 }
 
 static int
@@ -1479,13 +1672,16 @@
 static PyObject *
 gc_get_referrers(PyObject *self, PyObject *args)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     int i;
     PyObject *result = PyList_New(0);
-    if (!result) return NULL;
+    if (!result) {
+        return NULL;
+    }
 
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    GCState *gcstate = &tstate->interp->gc;
     for (i = 0; i < NUM_GENERATIONS; i++) {
-        if (!(gc_referrers_for(args, GEN_HEAD(state, i), result))) {
+        if (!(gc_referrers_for(args, GEN_HEAD(gcstate, i), result))) {
             Py_DECREF(result);
             return NULL;
         }
@@ -1517,7 +1713,7 @@
         traverseproc traverse;
         PyObject *obj = PyTuple_GET_ITEM(args, i);
 
-        if (! PyObject_IS_GC(obj))
+        if (!_PyObject_IS_GC(obj))
             continue;
         traverse = Py_TYPE(obj)->tp_traverse;
         if (! traverse)
@@ -1545,9 +1741,10 @@
 gc_get_objects_impl(PyObject *module, Py_ssize_t generation)
 /*[clinic end generated code: output=48b35fea4ba6cb0e input=ef7da9df9806754c]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     int i;
     PyObject* result;
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    GCState *gcstate = &tstate->interp->gc;
 
     result = PyList_New(0);
     if (result == NULL) {
@@ -1557,20 +1754,20 @@
     /* If generation is passed, we extract only that generation */
     if (generation != -1) {
         if (generation >= NUM_GENERATIONS) {
-            PyErr_Format(PyExc_ValueError,
-                         "generation parameter must be less than the number of "
-                         "available generations (%i)",
-                          NUM_GENERATIONS);
+            _PyErr_Format(tstate, PyExc_ValueError,
+                          "generation parameter must be less than the number of "
+                          "available generations (%i)",
+                           NUM_GENERATIONS);
             goto error;
         }
 
         if (generation < 0) {
-            PyErr_SetString(PyExc_ValueError,
-                            "generation parameter cannot be negative");
+            _PyErr_SetString(tstate, PyExc_ValueError,
+                             "generation parameter cannot be negative");
             goto error;
         }
 
-        if (append_objects(result, GEN_HEAD(state, generation))) {
+        if (append_objects(result, GEN_HEAD(gcstate, generation))) {
             goto error;
         }
 
@@ -1579,7 +1776,7 @@
 
     /* If generation is not passed or None, get all objects from all generations */
     for (i = 0; i < NUM_GENERATIONS; i++) {
-        if (append_objects(result, GEN_HEAD(state, i))) {
+        if (append_objects(result, GEN_HEAD(gcstate, i))) {
             goto error;
         }
     }
@@ -1602,12 +1799,13 @@
 {
     int i;
     struct gc_generation_stats stats[NUM_GENERATIONS], *st;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     /* To get consistent values despite allocations while constructing
        the result list, we use a snapshot of the running stats. */
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    GCState *gcstate = &tstate->interp->gc;
     for (i = 0; i < NUM_GENERATIONS; i++) {
-        stats[i] = state->generation_stats[i];
+        stats[i] = gcstate->generation_stats[i];
     }
 
     PyObject *result = PyList_New(0);
@@ -1655,7 +1853,7 @@
 {
     PyObject *result;
 
-    if (PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj))
+    if (_PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj))
         result = Py_True;
     else
         result = Py_False;
@@ -1664,6 +1862,25 @@
 }
 
 /*[clinic input]
+gc.is_finalized
+
+    obj: object
+    /
+
+Returns true if the object has been already finalized by the GC.
+[clinic start generated code]*/
+
+static PyObject *
+gc_is_finalized(PyObject *module, PyObject *obj)
+/*[clinic end generated code: output=e1516ac119a918ed input=201d0c58f69ae390]*/
+{
+    if (_PyObject_IS_GC(obj) && _PyGCHead_FINALIZED(AS_GC(obj))) {
+         Py_RETURN_TRUE;
+    }
+    Py_RETURN_FALSE;
+}
+
+/*[clinic input]
 gc.freeze
 
 Freeze all current tracked objects and ignore them for future collections.
@@ -1677,10 +1894,11 @@
 gc_freeze_impl(PyObject *module)
 /*[clinic end generated code: output=502159d9cdc4c139 input=b602b16ac5febbe5]*/
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
     for (int i = 0; i < NUM_GENERATIONS; ++i) {
-        gc_list_merge(GEN_HEAD(state, i), &state->permanent_generation.head);
-        state->generations[i].count = 0;
+        gc_list_merge(GEN_HEAD(gcstate, i), &gcstate->permanent_generation.head);
+        gcstate->generations[i].count = 0;
     }
     Py_RETURN_NONE;
 }
@@ -1697,8 +1915,10 @@
 gc_unfreeze_impl(PyObject *module)
 /*[clinic end generated code: output=1c15f2043b25e169 input=2dd52b170f4cef6c]*/
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
-    gc_list_merge(&state->permanent_generation.head, GEN_HEAD(state, NUM_GENERATIONS-1));
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    gc_list_merge(&gcstate->permanent_generation.head,
+                  GEN_HEAD(gcstate, NUM_GENERATIONS-1));
     Py_RETURN_NONE;
 }
 
@@ -1712,7 +1932,9 @@
 gc_get_freeze_count_impl(PyObject *module)
 /*[clinic end generated code: output=61cbd9f43aa032e1 input=45ffbc65cfe2a6ed]*/
 {
-    return gc_list_size(&_PyRuntime.gc.permanent_generation.head);
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    return gc_list_size(&gcstate->permanent_generation.head);
 }
 
 
@@ -1731,6 +1953,7 @@
 "get_threshold() -- Return the current the collection thresholds.\n"
 "get_objects() -- Return a list of all objects tracked by the collector.\n"
 "is_tracked() -- Returns true if a given object is tracked.\n"
+"is_finalized() -- Returns true if a given object has been already finalized.\n"
 "get_referrers() -- Return the list of objects that refer to an object.\n"
 "get_referents() -- Return the list of objects that an object refers to.\n"
 "freeze() -- Freeze all tracked objects and ignore them for future collections.\n"
@@ -1750,6 +1973,7 @@
     GC_GET_OBJECTS_METHODDEF
     GC_GET_STATS_METHODDEF
     GC_IS_TRACKED_METHODDEF
+    GC_IS_FINALIZED_METHODDEF
     {"get_referrers",  gc_get_referrers, METH_VARARGS,
         gc_get_referrers__doc__},
     {"get_referents",  gc_get_referents, METH_VARARGS,
@@ -1775,34 +1999,38 @@
 PyMODINIT_FUNC
 PyInit_gc(void)
 {
-    PyObject *m;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
 
-    m = PyModule_Create(&gcmodule);
+    PyObject *m = PyModule_Create(&gcmodule);
 
     if (m == NULL) {
         return NULL;
     }
 
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
-    if (state->garbage == NULL) {
-        state->garbage = PyList_New(0);
-        if (state->garbage == NULL)
+    if (gcstate->garbage == NULL) {
+        gcstate->garbage = PyList_New(0);
+        if (gcstate->garbage == NULL) {
             return NULL;
+        }
     }
-    Py_INCREF(state->garbage);
-    if (PyModule_AddObject(m, "garbage", state->garbage) < 0)
+    Py_INCREF(gcstate->garbage);
+    if (PyModule_AddObject(m, "garbage", gcstate->garbage) < 0) {
         return NULL;
+    }
 
-    if (state->callbacks == NULL) {
-        state->callbacks = PyList_New(0);
-        if (state->callbacks == NULL)
+    if (gcstate->callbacks == NULL) {
+        gcstate->callbacks = PyList_New(0);
+        if (gcstate->callbacks == NULL) {
             return NULL;
+        }
     }
-    Py_INCREF(state->callbacks);
-    if (PyModule_AddObject(m, "callbacks", state->callbacks) < 0)
+    Py_INCREF(gcstate->callbacks);
+    if (PyModule_AddObject(m, "callbacks", gcstate->callbacks) < 0) {
         return NULL;
+    }
 
-#define ADD_INT(NAME) if (PyModule_AddIntConstant(m, #NAME, NAME) < 0) return NULL
+#define ADD_INT(NAME) if (PyModule_AddIntConstant(m, #NAME, NAME) < 0) { return NULL; }
     ADD_INT(DEBUG_STATS);
     ADD_INT(DEBUG_COLLECTABLE);
     ADD_INT(DEBUG_UNCOLLECTABLE);
@@ -1816,23 +2044,25 @@
 Py_ssize_t
 PyGC_Collect(void)
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
-    if (!state->enabled) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+
+    if (!gcstate->enabled) {
         return 0;
     }
 
     Py_ssize_t n;
-    if (state->collecting) {
+    if (gcstate->collecting) {
         /* already collecting, don't do anything */
         n = 0;
     }
     else {
         PyObject *exc, *value, *tb;
-        state->collecting = 1;
-        PyErr_Fetch(&exc, &value, &tb);
-        n = collect_with_callback(state, NUM_GENERATIONS - 1);
-        PyErr_Restore(exc, value, tb);
-        state->collecting = 0;
+        gcstate->collecting = 1;
+        _PyErr_Fetch(tstate, &exc, &value, &tb);
+        n = collect_with_callback(tstate, NUM_GENERATIONS - 1);
+        _PyErr_Restore(tstate, exc, value, tb);
+        gcstate->collecting = 0;
     }
 
     return n;
@@ -1847,9 +2077,10 @@
 Py_ssize_t
 _PyGC_CollectNoFail(void)
 {
-    assert(!PyErr_Occurred());
+    PyThreadState *tstate = _PyThreadState_GET();
+    assert(!_PyErr_Occurred(tstate));
 
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
+    GCState *gcstate = &tstate->interp->gc;
     Py_ssize_t n;
 
     /* Ideally, this function is only called on interpreter shutdown,
@@ -1858,25 +2089,25 @@
        during interpreter shutdown (and then never finish it).
        See http://bugs.python.org/issue8713#msg195178 for an example.
        */
-    if (state->collecting) {
+    if (gcstate->collecting) {
         n = 0;
     }
     else {
-        state->collecting = 1;
-        n = collect(state, NUM_GENERATIONS - 1, NULL, NULL, 1);
-        state->collecting = 0;
+        gcstate->collecting = 1;
+        n = collect(tstate, NUM_GENERATIONS - 1, NULL, NULL, 1);
+        gcstate->collecting = 0;
     }
     return n;
 }
 
 void
-_PyGC_DumpShutdownStats(_PyRuntimeState *runtime)
+_PyGC_DumpShutdownStats(PyThreadState *tstate)
 {
-    struct _gc_runtime_state *state = &runtime->gc;
-    if (!(state->debug & DEBUG_SAVEALL)
-        && state->garbage != NULL && PyList_GET_SIZE(state->garbage) > 0) {
+    GCState *gcstate = &tstate->interp->gc;
+    if (!(gcstate->debug & DEBUG_SAVEALL)
+        && gcstate->garbage != NULL && PyList_GET_SIZE(gcstate->garbage) > 0) {
         const char *message;
-        if (state->debug & DEBUG_UNCOLLECTABLE)
+        if (gcstate->debug & DEBUG_UNCOLLECTABLE)
             message = "gc: %zd uncollectable objects at " \
                 "shutdown";
         else
@@ -1887,13 +2118,13 @@
            already. */
         if (PyErr_WarnExplicitFormat(PyExc_ResourceWarning, "gc", 0,
                                      "gc", NULL, message,
-                                     PyList_GET_SIZE(state->garbage)))
+                                     PyList_GET_SIZE(gcstate->garbage)))
             PyErr_WriteUnraisable(NULL);
-        if (state->debug & DEBUG_UNCOLLECTABLE) {
+        if (gcstate->debug & DEBUG_UNCOLLECTABLE) {
             PyObject *repr = NULL, *bytes = NULL;
-            repr = PyObject_Repr(state->garbage);
+            repr = PyObject_Repr(gcstate->garbage);
             if (!repr || !(bytes = PyUnicode_EncodeFSDefault(repr)))
-                PyErr_WriteUnraisable(state->garbage);
+                PyErr_WriteUnraisable(gcstate->garbage);
             else {
                 PySys_WriteStderr(
                     "      %s\n",
@@ -1907,11 +2138,11 @@
 }
 
 void
-_PyGC_Fini(_PyRuntimeState *runtime)
+_PyGC_Fini(PyThreadState *tstate)
 {
-    struct _gc_runtime_state *state = &runtime->gc;
-    Py_CLEAR(state->garbage);
-    Py_CLEAR(state->callbacks);
+    GCState *gcstate = &tstate->interp->gc;
+    Py_CLEAR(gcstate->garbage);
+    Py_CLEAR(gcstate->callbacks);
 }
 
 /* for debugging */
@@ -1921,6 +2152,21 @@
     _PyObject_Dump(FROM_GC(g));
 }
 
+
+#ifdef Py_DEBUG
+static int
+visit_validate(PyObject *op, void *parent_raw)
+{
+    PyObject *parent = _PyObject_CAST(parent_raw);
+    if (_PyObject_IsFreed(op)) {
+        _PyObject_ASSERT_FAILED_MSG(parent,
+                                    "PyObject_GC_Track() object is not valid");
+    }
+    return 0;
+}
+#endif
+
+
 /* extension modules might be compiled with GC support so these
    functions must always be available */
 
@@ -1934,6 +2180,13 @@
                                     "by the garbage collector");
     }
     _PyObject_GC_TRACK(op);
+
+#ifdef Py_DEBUG
+    /* Check that the object is valid: validate objects traversed
+       by tp_traverse() */
+    traverseproc traverse = Py_TYPE(op)->tp_traverse;
+    (void)traverse(op, visit_validate, op);
+#endif
 }
 
 void
@@ -1948,36 +2201,48 @@
     }
 }
 
+int
+PyObject_IS_GC(PyObject *obj)
+{
+    return _PyObject_IS_GC(obj);
+}
+
 static PyObject *
 _PyObject_GC_Alloc(int use_calloc, size_t basicsize)
 {
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
-    PyObject *op;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head)) {
+        return _PyErr_NoMemory(tstate);
+    }
+    size_t size = sizeof(PyGC_Head) + basicsize;
+
     PyGC_Head *g;
-    size_t size;
-    if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
-        return PyErr_NoMemory();
-    size = sizeof(PyGC_Head) + basicsize;
-    if (use_calloc)
+    if (use_calloc) {
         g = (PyGC_Head *)PyObject_Calloc(1, size);
-    else
+    }
+    else {
         g = (PyGC_Head *)PyObject_Malloc(size);
-    if (g == NULL)
-        return PyErr_NoMemory();
+    }
+    if (g == NULL) {
+        return _PyErr_NoMemory(tstate);
+    }
     assert(((uintptr_t)g & 3) == 0);  // g must be aligned 4bytes boundary
+
     g->_gc_next = 0;
     g->_gc_prev = 0;
-    state->generations[0].count++; /* number of allocated GC objects */
-    if (state->generations[0].count > state->generations[0].threshold &&
-        state->enabled &&
-        state->generations[0].threshold &&
-        !state->collecting &&
-        !PyErr_Occurred()) {
-        state->collecting = 1;
-        collect_generations(state);
-        state->collecting = 0;
+    gcstate->generations[0].count++; /* number of allocated GC objects */
+    if (gcstate->generations[0].count > gcstate->generations[0].threshold &&
+        gcstate->enabled &&
+        gcstate->generations[0].threshold &&
+        !gcstate->collecting &&
+        !_PyErr_Occurred(tstate))
+    {
+        gcstate->collecting = 1;
+        collect_generations(tstate);
+        gcstate->collecting = 0;
     }
-    op = FROM_GC(g);
+    PyObject *op = FROM_GC(g);
     return op;
 }
 
@@ -2033,7 +2298,7 @@
     if (g == NULL)
         return (PyVarObject *)PyErr_NoMemory();
     op = (PyVarObject *) FROM_GC(g);
-    Py_SIZE(op) = nitems;
+    Py_SET_SIZE(op, nitems);
     return op;
 }
 
@@ -2044,9 +2309,28 @@
     if (_PyObject_GC_IS_TRACKED(op)) {
         gc_list_remove(g);
     }
-    struct _gc_runtime_state *state = &_PyRuntime.gc;
-    if (state->generations[0].count > 0) {
-        state->generations[0].count--;
+    PyThreadState *tstate = _PyThreadState_GET();
+    GCState *gcstate = &tstate->interp->gc;
+    if (gcstate->generations[0].count > 0) {
+        gcstate->generations[0].count--;
     }
     PyObject_FREE(g);
 }
+
+int
+PyObject_GC_IsTracked(PyObject* obj)
+{
+    if (_PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj)) {
+        return 1;
+    }
+    return 0;
+}
+
+int
+PyObject_GC_IsFinalized(PyObject *obj)
+{
+    if (_PyObject_IS_GC(obj) && _PyGCHead_FINALIZED(AS_GC(obj))) {
+         return 1;
+    }
+    return 0;
+}
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 5ce751a..980874f 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -1,11 +1,10 @@
 /* Return the initial module search path. */
 
 #include "Python.h"
-#include "pycore_initconfig.h"
-#include "osdefs.h"
 #include "pycore_fileutils.h"
+#include "pycore_initconfig.h"
 #include "pycore_pathconfig.h"
-#include "pycore_pystate.h"
+#include "osdefs.h"               // DELIM
 
 #include <sys/types.h>
 #include <string.h>
@@ -96,7 +95,7 @@
  * process to find the installed Python tree.
  *
  * An embedding application can use Py_SetPath() to override all of
- * these authomatic path computations.
+ * these automatic path computations.
  *
  * NOTE: Windows MSVC builds use PC/getpathp.c instead!
  */
@@ -106,14 +105,17 @@
 #endif
 
 
-#if !defined(PREFIX) || !defined(EXEC_PREFIX) || !defined(VERSION) || !defined(VPATH)
-#error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
+#if (!defined(PREFIX) || !defined(EXEC_PREFIX) \
+        || !defined(VERSION) || !defined(VPATH))
+#error "PREFIX, EXEC_PREFIX, VERSION and VPATH macros must be defined"
 #endif
 
 #ifndef LANDMARK
 #define LANDMARK L"os.py"
 #endif
 
+#define BUILD_LANDMARK L"Modules/Setup.local"
+
 #define DECODE_LOCALE_ERR(NAME, LEN) \
     ((LEN) == (size_t)-2) \
      ? _PyStatus_ERR("cannot decode " NAME) \
@@ -124,17 +126,24 @@
 typedef struct {
     wchar_t *path_env;                 /* PATH environment variable */
 
-    wchar_t *pythonpath;               /* PYTHONPATH macro */
-    wchar_t *prefix;                   /* PREFIX macro */
-    wchar_t *exec_prefix;              /* EXEC_PREFIX macro */
+    wchar_t *pythonpath_macro;         /* PYTHONPATH macro */
+    wchar_t *prefix_macro;             /* PREFIX macro */
+    wchar_t *exec_prefix_macro;        /* EXEC_PREFIX macro */
+    wchar_t *vpath_macro;              /* VPATH macro */
 
-    wchar_t *lib_python;               /* "lib/pythonX.Y" */
+    wchar_t *lib_python;               /* <platlibdir> / "pythonX.Y" */
 
     int prefix_found;         /* found platform independent libraries? */
     int exec_prefix_found;    /* found the platform dependent libraries? */
 
     int warnings;
     const wchar_t *pythonpath_env;
+    const wchar_t *platlibdir;
+
+    wchar_t *argv0_path;
+    wchar_t *zip_path;
+    wchar_t *prefix;
+    wchar_t *exec_prefix;
 } PyCalculatePath;
 
 static const wchar_t delimiter[2] = {DELIM, '\0'};
@@ -184,25 +193,6 @@
 }
 
 
-/* Is module -- check for .pyc too */
-static int
-ismodule(wchar_t *filename, size_t filename_len)
-{
-    if (isfile(filename)) {
-        return 1;
-    }
-
-    /* Check for the compiled version of prefix. */
-    if (wcslen(filename) + 2 <= filename_len) {
-        wcscat(filename, L"c");
-        if (isfile(filename)) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-
 /* Is executable file */
 static int
 isxfile(const wchar_t *filename)
@@ -223,7 +213,7 @@
 
 /* Is directory */
 static int
-isdir(wchar_t *filename)
+isdir(const wchar_t *filename)
 {
     struct stat buf;
     if (_Py_wstat(filename, &buf) != 0) {
@@ -237,36 +227,83 @@
 
 
 /* Add a path component, by appending stuff to buffer.
-   buflen: 'buffer' length in characters including trailing NUL. */
+   buflen: 'buffer' length in characters including trailing NUL.
+
+   If path2 is empty:
+
+   - if path doesn't end with SEP and is not empty, add SEP to path
+   - otherwise, do nothing. */
 static PyStatus
-joinpath(wchar_t *buffer, const wchar_t *stuff, size_t buflen)
+joinpath(wchar_t *path, const wchar_t *path2, size_t path_len)
 {
-    size_t n, k;
-    if (stuff[0] != SEP) {
-        n = wcslen(buffer);
-        if (n >= buflen) {
+    size_t n;
+    if (!_Py_isabs(path2)) {
+        n = wcslen(path);
+        if (n >= path_len) {
             return PATHLEN_ERR();
         }
 
-        if (n > 0 && buffer[n-1] != SEP) {
-            buffer[n++] = SEP;
+        if (n > 0 && path[n-1] != SEP) {
+            path[n++] = SEP;
         }
     }
     else {
         n = 0;
     }
 
-    k = wcslen(stuff);
-    if (n + k >= buflen) {
+    size_t k = wcslen(path2);
+    if (n + k >= path_len) {
         return PATHLEN_ERR();
     }
-    wcsncpy(buffer+n, stuff, k);
-    buffer[n+k] = '\0';
+    wcsncpy(path + n, path2, k);
+    path[n + k] = '\0';
 
     return _PyStatus_OK();
 }
 
 
+static wchar_t*
+substring(const wchar_t *str, size_t len)
+{
+    wchar_t *substr = PyMem_RawMalloc((len + 1) * sizeof(wchar_t));
+    if (substr == NULL) {
+        return NULL;
+    }
+
+    if (len) {
+        memcpy(substr, str, len * sizeof(wchar_t));
+    }
+    substr[len] = L'\0';
+    return substr;
+}
+
+
+static wchar_t*
+joinpath2(const wchar_t *path, const wchar_t *path2)
+{
+    if (_Py_isabs(path2)) {
+        return _PyMem_RawWcsdup(path2);
+    }
+
+    size_t len = wcslen(path);
+    int add_sep = (len > 0 && path[len - 1] != SEP);
+    len += add_sep;
+    len += wcslen(path2);
+
+    wchar_t *new_path = PyMem_RawMalloc((len + 1) * sizeof(wchar_t));
+    if (new_path == NULL) {
+        return NULL;
+    }
+
+    wcscpy(new_path, path);
+    if (add_sep) {
+        wcscat(new_path, separator);
+    }
+    wcscat(new_path, path2);
+    return new_path;
+}
+
+
 static inline int
 safe_wcscpy(wchar_t *dst, const wchar_t *src, size_t n)
 {
@@ -281,27 +318,27 @@
 
 
 /* copy_absolute requires that path be allocated at least
-   'pathlen' characters (including trailing NUL). */
+   'abs_path_len' characters (including trailing NUL). */
 static PyStatus
-copy_absolute(wchar_t *path, const wchar_t *p, size_t pathlen)
+copy_absolute(wchar_t *abs_path, const wchar_t *path, size_t abs_path_len)
 {
-    if (p[0] == SEP) {
-        if (safe_wcscpy(path, p, pathlen) < 0) {
+    if (_Py_isabs(path)) {
+        if (safe_wcscpy(abs_path, path, abs_path_len) < 0) {
             return PATHLEN_ERR();
         }
     }
     else {
-        if (!_Py_wgetcwd(path, pathlen)) {
+        if (!_Py_wgetcwd(abs_path, abs_path_len)) {
             /* unable to get the current directory */
-            if (safe_wcscpy(path, p, pathlen) < 0) {
+            if (safe_wcscpy(abs_path, path, abs_path_len) < 0) {
                 return PATHLEN_ERR();
             }
             return _PyStatus_OK();
         }
-        if (p[0] == '.' && p[1] == SEP) {
-            p += 2;
+        if (path[0] == '.' && path[1] == SEP) {
+            path += 2;
         }
-        PyStatus status = joinpath(path, p, pathlen);
+        PyStatus status = joinpath(abs_path, path, abs_path_len);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
@@ -312,25 +349,62 @@
 
 /* path_len: path length in characters including trailing NUL */
 static PyStatus
-absolutize(wchar_t *path, size_t path_len)
+absolutize(wchar_t **path_p)
 {
-    if (path[0] == SEP) {
-        return _PyStatus_OK();
-    }
+    assert(!_Py_isabs(*path_p));
 
     wchar_t abs_path[MAXPATHLEN+1];
+    wchar_t *path = *path_p;
+
     PyStatus status = copy_absolute(abs_path, path, Py_ARRAY_LENGTH(abs_path));
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    if (safe_wcscpy(path, abs_path, path_len) < 0) {
-        return PATHLEN_ERR();
+    PyMem_RawFree(*path_p);
+    *path_p = _PyMem_RawWcsdup(abs_path);
+    if (*path_p == NULL) {
+        return _PyStatus_NO_MEMORY();
     }
     return _PyStatus_OK();
 }
 
 
+/* Is module -- check for .pyc too */
+static PyStatus
+ismodule(const wchar_t *path, int *result)
+{
+    wchar_t *filename = joinpath2(path, LANDMARK);
+    if (filename == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
+
+    if (isfile(filename)) {
+        PyMem_RawFree(filename);
+        *result = 1;
+        return _PyStatus_OK();
+    }
+
+    /* Check for the compiled version of prefix. */
+    size_t len = wcslen(filename);
+    wchar_t *pyc = PyMem_RawMalloc((len + 2) * sizeof(wchar_t));
+    if (pyc == NULL) {
+        PyMem_RawFree(filename);
+        return _PyStatus_NO_MEMORY();
+    }
+
+    memcpy(pyc, filename, len * sizeof(wchar_t));
+    pyc[len] = L'c';
+    pyc[len + 1] = L'\0';
+    *result = isfile(pyc);
+
+    PyMem_RawFree(filename);
+    PyMem_RawFree(pyc);
+
+    return _PyStatus_OK();
+}
+
+
 #if defined(__CYGWIN__) || defined(__MINGW32__)
 #ifndef EXE_SUFFIX
 #define EXE_SUFFIX L".exe"
@@ -338,8 +412,10 @@
 
 /* pathlen: 'path' length in characters including trailing NUL */
 static PyStatus
-add_exe_suffix(wchar_t *progpath, size_t progpathlen)
+add_exe_suffix(wchar_t **progpath_p)
 {
+    wchar_t *progpath = *progpath_p;
+
     /* Check for already have an executable suffix */
     size_t n = wcslen(progpath);
     size_t s = wcslen(EXE_SUFFIX);
@@ -347,17 +423,22 @@
         return _PyStatus_OK();
     }
 
-    if (n + s >= progpathlen) {
-        return PATHLEN_ERR();
-    }
-    wcsncpy(progpath + n, EXE_SUFFIX, s);
-    progpath[n+s] = '\0';
-
-    if (!isxfile(progpath)) {
-        /* Path that added suffix is invalid: truncate (remove suffix) */
-        progpath[n] = '\0';
+    wchar_t *progpath2 = PyMem_RawMalloc((n + s + 1) * sizeof(wchar_t));
+    if (progpath2 == NULL) {
+        return _PyStatus_NO_MEMORY();
     }
 
+    memcpy(progpath2, progpath, n * sizeof(wchar_t));
+    memcpy(progpath2 + n, EXE_SUFFIX, s * sizeof(wchar_t));
+    progpath2[n+s] = L'\0';
+
+    if (isxfile(progpath2)) {
+        PyMem_RawFree(*progpath_p);
+        *progpath_p = progpath2;
+    }
+    else {
+        PyMem_RawFree(progpath2);
+    }
     return _PyStatus_OK();
 }
 #endif
@@ -368,13 +449,8 @@
 */
 static PyStatus
 search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
-                  const wchar_t *argv0_path,
                   wchar_t *prefix, size_t prefix_len, int *found)
 {
-    wchar_t path[MAXPATHLEN+1];
-    memset(path, 0, sizeof(path));
-    size_t path_len = Py_ARRAY_LENGTH(path);
-
     PyStatus status;
 
     /* If PYTHONHOME is set, we believe it unconditionally */
@@ -395,49 +471,51 @@
         return _PyStatus_OK();
     }
 
-    /* Check to see if argv[0] is in the build directory */
-    if (safe_wcscpy(path, argv0_path, path_len) < 0) {
-        return PATHLEN_ERR();
-    }
-    status = joinpath(path, L"Modules/Setup.local", path_len);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
+    /* Check to see if argv0_path is in the build directory
+
+       Path: <argv0_path> / <BUILD_LANDMARK define> */
+    wchar_t *path = joinpath2(calculate->argv0_path, BUILD_LANDMARK);
+    if (path == NULL) {
+        return _PyStatus_NO_MEMORY();
     }
 
-    if (isfile(path)) {
-        /* Check VPATH to see if argv0_path is in the build directory.
-           VPATH can be empty. */
-        wchar_t *vpath = Py_DecodeLocale(VPATH, NULL);
-        if (vpath != NULL) {
-            /* Path: <argv0_path> / <vpath> / Lib / LANDMARK */
-            if (safe_wcscpy(prefix, argv0_path, prefix_len) < 0) {
-                return PATHLEN_ERR();
-            }
-            status = joinpath(prefix, vpath, prefix_len);
-            PyMem_RawFree(vpath);
-            if (_PyStatus_EXCEPTION(status)) {
-                return status;
-            }
+    int is_build_dir = isfile(path);
+    PyMem_RawFree(path);
 
-            status = joinpath(prefix, L"Lib", prefix_len);
-            if (_PyStatus_EXCEPTION(status)) {
-                return status;
-            }
-            status = joinpath(prefix, LANDMARK, prefix_len);
-            if (_PyStatus_EXCEPTION(status)) {
-                return status;
-            }
+    if (is_build_dir) {
+        /* argv0_path is the build directory (BUILD_LANDMARK exists),
+           now also check LANDMARK using ismodule(). */
 
-            if (ismodule(prefix, prefix_len)) {
-                *found = -1;
-                reduce(prefix);
-                return _PyStatus_OK();
-            }
+        /* Path: <argv0_path> / <VPATH macro> / Lib */
+        /* or if VPATH is empty: <argv0_path> / Lib */
+        if (safe_wcscpy(prefix, calculate->argv0_path, prefix_len) < 0) {
+            return PATHLEN_ERR();
+        }
+
+        status = joinpath(prefix, calculate->vpath_macro, prefix_len);
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+
+        status = joinpath(prefix, L"Lib", prefix_len);
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+
+        int module;
+        status = ismodule(prefix, &module);
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+        if (module) {
+            /* BUILD_LANDMARK and LANDMARK found */
+            *found = -1;
+            return _PyStatus_OK();
         }
     }
 
     /* Search from argv0_path, until root is found */
-    status = copy_absolute(prefix, argv0_path, prefix_len);
+    status = copy_absolute(prefix, calculate->argv0_path, prefix_len);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
@@ -449,14 +527,14 @@
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
-        status = joinpath(prefix, LANDMARK, prefix_len);
+
+        int module;
+        status = ismodule(prefix, &module);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
-
-        if (ismodule(prefix, prefix_len)) {
+        if (module) {
             *found = 1;
-            reduce(prefix);
             return _PyStatus_OK();
         }
         prefix[n] = L'\0';
@@ -465,21 +543,21 @@
 
     /* Look at configure's PREFIX.
        Path: <PREFIX macro> / <lib_python> / LANDMARK */
-    if (safe_wcscpy(prefix, calculate->prefix, prefix_len) < 0) {
+    if (safe_wcscpy(prefix, calculate->prefix_macro, prefix_len) < 0) {
         return PATHLEN_ERR();
     }
     status = joinpath(prefix, calculate->lib_python, prefix_len);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-    status = joinpath(prefix, LANDMARK, prefix_len);
+
+    int module;
+    status = ismodule(prefix, &module);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-
-    if (ismodule(prefix, prefix_len)) {
+    if (module) {
         *found = 1;
-        reduce(prefix);
         return _PyStatus_OK();
     }
 
@@ -490,13 +568,14 @@
 
 
 static PyStatus
-calculate_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
-                 const wchar_t *argv0_path,
-                 wchar_t *prefix, size_t prefix_len)
+calculate_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
 {
-    PyStatus status;
+    wchar_t prefix[MAXPATHLEN+1];
+    memset(prefix, 0, sizeof(prefix));
+    size_t prefix_len = Py_ARRAY_LENGTH(prefix);
 
-    status = search_for_prefix(calculate, pathconfig, argv0_path,
+    PyStatus status;
+    status = search_for_prefix(calculate, pathconfig,
                                prefix, prefix_len,
                                &calculate->prefix_found);
     if (_PyStatus_EXCEPTION(status)) {
@@ -508,21 +587,23 @@
             fprintf(stderr,
                 "Could not find platform independent libraries <prefix>\n");
         }
-        if (safe_wcscpy(prefix, calculate->prefix, prefix_len) < 0) {
-            return PATHLEN_ERR();
-        }
-        status = joinpath(prefix, calculate->lib_python, prefix_len);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
+
+        calculate->prefix = joinpath2(calculate->prefix_macro,
+                                      calculate->lib_python);
+    }
+    else {
+        calculate->prefix = _PyMem_RawWcsdup(prefix);
+    }
+
+    if (calculate->prefix == NULL) {
+        return _PyStatus_NO_MEMORY();
     }
     return _PyStatus_OK();
 }
 
 
 static PyStatus
-calculate_set_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
-                     wchar_t *prefix)
+calculate_set_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
 {
     /* Reduce prefix and exec_prefix to their essence,
      * e.g. /usr/local/lib/python1.5 is reduced to /usr/local.
@@ -530,21 +611,32 @@
      * return the compiled-in defaults instead.
      */
     if (calculate->prefix_found > 0) {
-        reduce(prefix);
-        reduce(prefix);
-        /* The prefix is the root directory, but reduce() chopped
-         * off the "/". */
-        if (!prefix[0]) {
-            wcscpy(prefix, separator);
+        wchar_t *prefix = _PyMem_RawWcsdup(calculate->prefix);
+        if (prefix == NULL) {
+            return _PyStatus_NO_MEMORY();
         }
-        pathconfig->prefix = _PyMem_RawWcsdup(prefix);
+
+        reduce(prefix);
+        reduce(prefix);
+        if (prefix[0]) {
+            pathconfig->prefix = prefix;
+        }
+        else {
+            PyMem_RawFree(prefix);
+
+            /* The prefix is the root directory, but reduce() chopped
+               off the "/". */
+            pathconfig->prefix = _PyMem_RawWcsdup(separator);
+            if (pathconfig->prefix == NULL) {
+                return _PyStatus_NO_MEMORY();
+            }
+        }
     }
     else {
-        pathconfig->prefix = _PyMem_RawWcsdup(calculate->prefix);
-    }
-
-    if (pathconfig->prefix == NULL) {
-        return _PyStatus_NO_MEMORY();
+        pathconfig->prefix = _PyMem_RawWcsdup(calculate->prefix_macro);
+        if (pathconfig->prefix == NULL) {
+            return _PyStatus_NO_MEMORY();
+        }
     }
     return _PyStatus_OK();
 }
@@ -557,28 +649,18 @@
 {
     PyStatus status;
 
-    wchar_t filename[MAXPATHLEN+1];
-    memset(filename, 0, sizeof(filename));
-    size_t filename_len = Py_ARRAY_LENGTH(filename);
-
     /* Check to see if argv[0] is in the build directory. "pybuilddir.txt"
        is written by setup.py and contains the relative path to the location
        of shared library modules.
 
        Filename: <argv0_path> / "pybuilddir.txt" */
-    if (safe_wcscpy(filename, argv0_path, filename_len) < 0) {
-        return PATHLEN_ERR();
-    }
-    status = joinpath(filename, L"pybuilddir.txt", filename_len);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    if (!isfile(filename)) {
-        return _PyStatus_OK();
+    wchar_t *filename = joinpath2(argv0_path, L"pybuilddir.txt");
+    if (filename == NULL) {
+        return _PyStatus_NO_MEMORY();
     }
 
     FILE *fp = _Py_wfopen(filename, L"rb");
+    PyMem_RawFree(filename);
     if (fp == NULL) {
         errno = 0;
         return _PyStatus_OK();
@@ -616,7 +698,6 @@
 */
 static PyStatus
 search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
-                       const wchar_t *argv0_path,
                        wchar_t *exec_prefix, size_t exec_prefix_len,
                        int *found)
 {
@@ -650,8 +731,8 @@
 
     /* Check for pybuilddir.txt */
     assert(*found == 0);
-    status = calculate_pybuilddir(argv0_path, exec_prefix, exec_prefix_len,
-                                  found);
+    status = calculate_pybuilddir(calculate->argv0_path,
+                                  exec_prefix, exec_prefix_len, found);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
@@ -660,7 +741,7 @@
     }
 
     /* Search from argv0_path, until root is found */
-    status = copy_absolute(exec_prefix, argv0_path, exec_prefix_len);
+    status = copy_absolute(exec_prefix, calculate->argv0_path, exec_prefix_len);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
@@ -687,7 +768,7 @@
     /* Look at configure's EXEC_PREFIX.
 
        Path: <EXEC_PREFIX macro> / <lib_python> / "lib-dynload" */
-    if (safe_wcscpy(exec_prefix, calculate->exec_prefix, exec_prefix_len) < 0) {
+    if (safe_wcscpy(exec_prefix, calculate->exec_prefix_macro, exec_prefix_len) < 0) {
         return PATHLEN_ERR();
     }
     status = joinpath(exec_prefix, calculate->lib_python, exec_prefix_len);
@@ -710,13 +791,14 @@
 
 
 static PyStatus
-calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig,
-                      const wchar_t *argv0_path,
-                      wchar_t *exec_prefix, size_t exec_prefix_len)
+calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
 {
     PyStatus status;
+    wchar_t exec_prefix[MAXPATHLEN+1];
+    memset(exec_prefix, 0, sizeof(exec_prefix));
+    size_t exec_prefix_len = Py_ARRAY_LENGTH(exec_prefix);
 
-    status = search_for_exec_prefix(calculate, pathconfig, argv0_path,
+    status = search_for_exec_prefix(calculate, pathconfig,
                                     exec_prefix, exec_prefix_len,
                                     &calculate->exec_prefix_found);
     if (_PyStatus_EXCEPTION(status)) {
@@ -728,62 +810,155 @@
             fprintf(stderr,
                 "Could not find platform dependent libraries <exec_prefix>\n");
         }
-        if (safe_wcscpy(exec_prefix, calculate->exec_prefix, exec_prefix_len) < 0) {
-            return PATHLEN_ERR();
+
+        /* <platlibdir> / "lib-dynload" */
+        wchar_t *lib_dynload = joinpath2(calculate->platlibdir,
+                                         L"lib-dynload");
+        if (lib_dynload == NULL) {
+            return _PyStatus_NO_MEMORY();
         }
-        status = joinpath(exec_prefix, L"lib/lib-dynload", exec_prefix_len);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
+
+        calculate->exec_prefix = joinpath2(calculate->exec_prefix_macro,
+                                           lib_dynload);
+        PyMem_RawFree(lib_dynload);
+
+        if (calculate->exec_prefix == NULL) {
+            return _PyStatus_NO_MEMORY();
         }
     }
-    /* If we found EXEC_PREFIX do *not* reduce it!  (Yet.) */
+    else {
+        /* If we found EXEC_PREFIX do *not* reduce it!  (Yet.) */
+        calculate->exec_prefix = _PyMem_RawWcsdup(exec_prefix);
+        if (calculate->exec_prefix == NULL) {
+            return _PyStatus_NO_MEMORY();
+        }
+    }
     return _PyStatus_OK();
 }
 
 
 static PyStatus
 calculate_set_exec_prefix(PyCalculatePath *calculate,
-                          _PyPathConfig *pathconfig,
-                          wchar_t *exec_prefix)
+                          _PyPathConfig *pathconfig)
 {
     if (calculate->exec_prefix_found > 0) {
-        reduce(exec_prefix);
-        reduce(exec_prefix);
-        reduce(exec_prefix);
-        if (!exec_prefix[0]) {
-            wcscpy(exec_prefix, separator);
+        wchar_t *exec_prefix = _PyMem_RawWcsdup(calculate->exec_prefix);
+        if (exec_prefix == NULL) {
+            return _PyStatus_NO_MEMORY();
         }
 
-        pathconfig->exec_prefix = _PyMem_RawWcsdup(exec_prefix);
+        reduce(exec_prefix);
+        reduce(exec_prefix);
+        reduce(exec_prefix);
+
+        if (exec_prefix[0]) {
+            pathconfig->exec_prefix = exec_prefix;
+        }
+        else {
+            /* empty string: use SEP instead */
+            PyMem_RawFree(exec_prefix);
+
+            /* The exec_prefix is the root directory, but reduce() chopped
+               off the "/". */
+            pathconfig->exec_prefix = _PyMem_RawWcsdup(separator);
+            if (pathconfig->exec_prefix == NULL) {
+                return _PyStatus_NO_MEMORY();
+            }
+        }
     }
     else {
-        pathconfig->exec_prefix = _PyMem_RawWcsdup(calculate->exec_prefix);
+        pathconfig->exec_prefix = _PyMem_RawWcsdup(calculate->exec_prefix_macro);
+        if (pathconfig->exec_prefix == NULL) {
+            return _PyStatus_NO_MEMORY();
+        }
     }
-
-    if (pathconfig->exec_prefix == NULL) {
-        return _PyStatus_NO_MEMORY();
-    }
-
     return _PyStatus_OK();
 }
 
 
+/* Similar to shutil.which().
+   If found, write the path into *abs_path_p. */
 static PyStatus
-calculate_program_full_path(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
+calculate_which(const wchar_t *path_env, wchar_t *program_name,
+                wchar_t **abs_path_p)
 {
-    PyStatus status;
-    wchar_t program_full_path[MAXPATHLEN + 1];
-    const size_t program_full_path_len = Py_ARRAY_LENGTH(program_full_path);
-    memset(program_full_path, 0, sizeof(program_full_path));
+    while (1) {
+        wchar_t *delim = wcschr(path_env, DELIM);
+        wchar_t *abs_path;
+
+        if (delim) {
+            wchar_t *path = substring(path_env, delim - path_env);
+            if (path == NULL) {
+                return _PyStatus_NO_MEMORY();
+            }
+            abs_path = joinpath2(path, program_name);
+            PyMem_RawFree(path);
+        }
+        else {
+            abs_path = joinpath2(path_env, program_name);
+        }
+
+        if (abs_path == NULL) {
+            return _PyStatus_NO_MEMORY();
+        }
+
+        if (isxfile(abs_path)) {
+            *abs_path_p = abs_path;
+            return _PyStatus_OK();
+        }
+        PyMem_RawFree(abs_path);
+
+        if (!delim) {
+            break;
+        }
+        path_env = delim + 1;
+    }
+
+    /* not found */
+    return _PyStatus_OK();
+}
+
 
 #ifdef __APPLE__
+static PyStatus
+calculate_program_macos(wchar_t **abs_path_p)
+{
     char execpath[MAXPATHLEN + 1];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
     uint32_t nsexeclength = Py_ARRAY_LENGTH(execpath) - 1;
-#else
-    unsigned long nsexeclength = Py_ARRAY_LENGTH(execpath) - 1;
-#endif
-#endif
+
+    /* On Mac OS X, if a script uses an interpreter of the form
+       "#!/opt/python2.3/bin/python", the kernel only passes "python"
+       as argv[0], which falls through to the $PATH search below.
+       If /opt/python2.3/bin isn't in your path, or is near the end,
+       this algorithm may incorrectly find /usr/bin/python. To work
+       around this, we can use _NSGetExecutablePath to get a better
+       hint of what the intended interpreter was, although this
+       will fail if a relative path was used. but in that case,
+       absolutize() should help us out below
+     */
+    if (_NSGetExecutablePath(execpath, &nsexeclength) != 0
+        || (wchar_t)execpath[0] != SEP)
+    {
+        /* _NSGetExecutablePath() failed or the path is relative */
+        return _PyStatus_OK();
+    }
+
+    size_t len;
+    *abs_path_p = Py_DecodeLocale(execpath, &len);
+    if (*abs_path_p == NULL) {
+        return DECODE_LOCALE_ERR("executable path", len);
+    }
+    return _PyStatus_OK();
+}
+#endif  /* __APPLE__ */
+
+
+static PyStatus
+calculate_program_impl(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
+{
+    assert(pathconfig->program_full_path == NULL);
+
+    PyStatus status;
 
     /* If there is no slash in the argv0 path, then we have to
      * assume python is on the user's $PATH, since there's no
@@ -791,98 +966,40 @@
      * $PATH isn't exported, you lose.
      */
     if (wcschr(pathconfig->program_name, SEP)) {
-        if (safe_wcscpy(program_full_path, pathconfig->program_name,
-                        program_full_path_len) < 0) {
-            return PATHLEN_ERR();
+        pathconfig->program_full_path = _PyMem_RawWcsdup(pathconfig->program_name);
+        if (pathconfig->program_full_path == NULL) {
+            return _PyStatus_NO_MEMORY();
         }
+        return _PyStatus_OK();
     }
+
 #ifdef __APPLE__
-     /* On Mac OS X, if a script uses an interpreter of the form
-      * "#!/opt/python2.3/bin/python", the kernel only passes "python"
-      * as argv[0], which falls through to the $PATH search below.
-      * If /opt/python2.3/bin isn't in your path, or is near the end,
-      * this algorithm may incorrectly find /usr/bin/python. To work
-      * around this, we can use _NSGetExecutablePath to get a better
-      * hint of what the intended interpreter was, although this
-      * will fail if a relative path was used. but in that case,
-      * absolutize() should help us out below
-      */
-    else if(0 == _NSGetExecutablePath(execpath, &nsexeclength) &&
-            execpath[0] == SEP)
-    {
-        size_t len;
-        wchar_t *path = Py_DecodeLocale(execpath, &len);
-        if (path == NULL) {
-            return DECODE_LOCALE_ERR("executable path", len);
-        }
-        if (safe_wcscpy(program_full_path, path, program_full_path_len) < 0) {
-            PyMem_RawFree(path);
-            return PATHLEN_ERR();
-        }
-        PyMem_RawFree(path);
+    wchar_t *abs_path = NULL;
+    status = calculate_program_macos(&abs_path);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+    if (abs_path) {
+        pathconfig->program_full_path = abs_path;
+        return _PyStatus_OK();
     }
 #endif /* __APPLE__ */
-    else if (calculate->path_env) {
-        wchar_t *path = calculate->path_env;
-        while (1) {
-            wchar_t *delim = wcschr(path, DELIM);
 
-            if (delim) {
-                size_t len = delim - path;
-                if (len >= program_full_path_len) {
-                    return PATHLEN_ERR();
-                }
-                wcsncpy(program_full_path, path, len);
-                program_full_path[len] = '\0';
-            }
-            else {
-                if (safe_wcscpy(program_full_path, path,
-                                program_full_path_len) < 0) {
-                    return PATHLEN_ERR();
-                }
-            }
-
-            status = joinpath(program_full_path, pathconfig->program_name,
-                              program_full_path_len);
-            if (_PyStatus_EXCEPTION(status)) {
-                return status;
-            }
-
-            if (isxfile(program_full_path)) {
-                break;
-            }
-
-            if (!delim) {
-                program_full_path[0] = L'\0';
-                break;
-            }
-            path = delim + 1;
-        }
-    }
-    else {
-        program_full_path[0] = '\0';
-    }
-    if (program_full_path[0] != SEP && program_full_path[0] != '\0') {
-        status = absolutize(program_full_path, program_full_path_len);
+    if (calculate->path_env) {
+        wchar_t *abs_path = NULL;
+        status = calculate_which(calculate->path_env, pathconfig->program_name,
+                                 &abs_path);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
-    }
-#if defined(__CYGWIN__) || defined(__MINGW32__)
-    /* For these platforms it is necessary to ensure that the .exe suffix
-     * is appended to the filename, otherwise there is potential for
-     * sys.executable to return the name of a directory under the same
-     * path (bpo-28441).
-     */
-    if (program_full_path[0] != '\0') {
-        status = add_exe_suffix(program_full_path, program_full_path_len);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
+        if (abs_path) {
+            pathconfig->program_full_path = abs_path;
+            return _PyStatus_OK();
         }
     }
-#endif
 
-    pathconfig->program_full_path = _PyMem_RawWcsdup(program_full_path);
+    /* In the last resort, use an empty string */
+    pathconfig->program_full_path = _PyMem_RawWcsdup(L"");
     if (pathconfig->program_full_path == NULL) {
         return _PyStatus_NO_MEMORY();
     }
@@ -890,101 +1007,246 @@
 }
 
 
+/* Calculate pathconfig->program_full_path */
 static PyStatus
-calculate_argv0_path(PyCalculatePath *calculate, const wchar_t *program_full_path,
-                     wchar_t *argv0_path, size_t argv0_path_len)
+calculate_program(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
 {
-    if (safe_wcscpy(argv0_path, program_full_path, argv0_path_len) < 0) {
-        return PATHLEN_ERR();
+    PyStatus status;
+
+    status = calculate_program_impl(calculate, pathconfig);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
     }
 
-#ifdef WITH_NEXT_FRAMEWORK
-    NSModule pythonModule;
+    if (pathconfig->program_full_path[0] != '\0') {
+        /* program_full_path is not empty */
 
-    /* On Mac OS X we have a special case if we're running from a framework.
-    ** This is because the python home should be set relative to the library,
-    ** which is in the framework, not relative to the executable, which may
-    ** be outside of the framework. Except when we're in the build directory...
-    */
-    pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
-    /* Use dylib functions to find out where the framework was loaded from */
-    const char* modPath = NSLibraryNameForModule(pythonModule);
-    if (modPath != NULL) {
-        /* We're in a framework. */
-        /* See if we might be in the build directory. The framework in the
-        ** build directory is incomplete, it only has the .dylib and a few
-        ** needed symlinks, it doesn't have the Lib directories and such.
-        ** If we're running with the framework from the build directory we must
-        ** be running the interpreter in the build directory, so we use the
-        ** build-directory-specific logic to find Lib and such.
-        */
-        PyStatus status;
-        size_t len;
-        wchar_t* wbuf = Py_DecodeLocale(modPath, &len);
-        if (wbuf == NULL) {
-            return DECODE_LOCALE_ERR("framework location", len);
-        }
-
-        if (safe_wcscpy(argv0_path, wbuf, argv0_path_len) < 0) {
-            return PATHLEN_ERR();
-        }
-        reduce(argv0_path);
-        status = joinpath(argv0_path, calculate->lib_python, argv0_path_len);
-        if (_PyStatus_EXCEPTION(status)) {
-            PyMem_RawFree(wbuf);
-            return status;
-        }
-        status = joinpath(argv0_path, LANDMARK, argv0_path_len);
-        if (_PyStatus_EXCEPTION(status)) {
-            PyMem_RawFree(wbuf);
-            return status;
-        }
-        if (!ismodule(argv0_path, Py_ARRAY_LENGTH(argv0_path))) {
-            /* We are in the build directory so use the name of the
-               executable - we know that the absolute path is passed */
-            if (safe_wcscpy(argv0_path, program_full_path,
-                            argv0_path_len) < 0) {
-                return PATHLEN_ERR();
-            }
-        }
-        else {
-            /* Use the location of the library as the program_full_path */
-            if (safe_wcscpy(argv0_path, wbuf, argv0_path_len) < 0) {
-                return PATHLEN_ERR();
-            }
-        }
-        PyMem_RawFree(wbuf);
-    }
-#endif
-
-#if HAVE_READLINK
-    wchar_t tmpbuffer[MAXPATHLEN + 1];
-    const size_t buflen = Py_ARRAY_LENGTH(tmpbuffer);
-    int linklen = _Py_wreadlink(program_full_path, tmpbuffer, buflen);
-    while (linklen != -1) {
-        if (tmpbuffer[0] == SEP) {
-            /* tmpbuffer should never be longer than MAXPATHLEN,
-               but extra check does not hurt */
-            if (safe_wcscpy(argv0_path, tmpbuffer, argv0_path_len) < 0) {
-                return PATHLEN_ERR();
-            }
-        }
-        else {
-            /* Interpret relative to program_full_path */
-            PyStatus status;
-            reduce(argv0_path);
-            status = joinpath(argv0_path, tmpbuffer, argv0_path_len);
+        /* Make sure that program_full_path is an absolute path */
+        if (!_Py_isabs(pathconfig->program_full_path)) {
+            status = absolutize(&pathconfig->program_full_path);
             if (_PyStatus_EXCEPTION(status)) {
                 return status;
             }
         }
-        linklen = _Py_wreadlink(argv0_path, tmpbuffer, buflen);
+
+#if defined(__CYGWIN__) || defined(__MINGW32__)
+        /* For these platforms it is necessary to ensure that the .exe suffix
+         * is appended to the filename, otherwise there is potential for
+         * sys.executable to return the name of a directory under the same
+         * path (bpo-28441).
+         */
+        status = add_exe_suffix(&pathconfig->program_full_path);
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+#endif
     }
+    return _PyStatus_OK();
+}
+
+
+#if HAVE_READLINK
+static PyStatus
+resolve_symlinks(wchar_t **path_p)
+{
+    wchar_t new_path[MAXPATHLEN + 1];
+    const size_t new_path_len = Py_ARRAY_LENGTH(new_path);
+    unsigned int nlink = 0;
+
+    while (1) {
+        int linklen = _Py_wreadlink(*path_p, new_path, new_path_len);
+        if (linklen == -1) {
+            /* not a symbolic link: we are done */
+            break;
+        }
+
+        if (_Py_isabs(new_path)) {
+            PyMem_RawFree(*path_p);
+            *path_p = _PyMem_RawWcsdup(new_path);
+            if (*path_p == NULL) {
+                return _PyStatus_NO_MEMORY();
+            }
+        }
+        else {
+            /* new_path is relative to path */
+            reduce(*path_p);
+
+            wchar_t *abs_path = joinpath2(*path_p, new_path);
+            if (abs_path == NULL) {
+                return _PyStatus_NO_MEMORY();
+            }
+
+            PyMem_RawFree(*path_p);
+            *path_p = abs_path;
+        }
+
+        nlink++;
+        /* 40 is the Linux kernel 4.2 limit */
+        if (nlink >= 40) {
+            return _PyStatus_ERR("maximum number of symbolic links reached");
+        }
+    }
+    return _PyStatus_OK();
+}
 #endif /* HAVE_READLINK */
 
-    reduce(argv0_path);
-    /* At this point, argv0_path is guaranteed to be less than
-       MAXPATHLEN bytes long. */
+
+#ifdef WITH_NEXT_FRAMEWORK
+static PyStatus
+calculate_argv0_path_framework(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
+{
+    NSModule pythonModule;
+
+    /* On Mac OS X we have a special case if we're running from a framework.
+       This is because the python home should be set relative to the library,
+       which is in the framework, not relative to the executable, which may
+       be outside of the framework. Except when we're in the build
+       directory... */
+    pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
+
+    /* Use dylib functions to find out where the framework was loaded from */
+    const char* modPath = NSLibraryNameForModule(pythonModule);
+    if (modPath == NULL) {
+        return _PyStatus_OK();
+    }
+
+    /* We're in a framework.
+       See if we might be in the build directory. The framework in the
+       build directory is incomplete, it only has the .dylib and a few
+       needed symlinks, it doesn't have the Lib directories and such.
+       If we're running with the framework from the build directory we must
+       be running the interpreter in the build directory, so we use the
+       build-directory-specific logic to find Lib and such. */
+    size_t len;
+    wchar_t* wbuf = Py_DecodeLocale(modPath, &len);
+    if (wbuf == NULL) {
+        return DECODE_LOCALE_ERR("framework location", len);
+    }
+
+    /* Path: reduce(modPath) / lib_python / LANDMARK */
+    PyStatus status;
+
+    wchar_t *parent = _PyMem_RawWcsdup(wbuf);
+    if (parent == NULL) {
+        status = _PyStatus_NO_MEMORY();
+        goto done;
+    }
+
+    reduce(parent);
+    wchar_t *lib_python = joinpath2(parent, calculate->lib_python);
+    PyMem_RawFree(parent);
+
+    if (lib_python == NULL) {
+        status = _PyStatus_NO_MEMORY();
+        goto done;
+    }
+
+    int module;
+    status = ismodule(lib_python, &module);
+    PyMem_RawFree(lib_python);
+
+    if (_PyStatus_EXCEPTION(status)) {
+        goto done;
+    }
+    if (!module) {
+        /* We are in the build directory so use the name of the
+           executable - we know that the absolute path is passed */
+        PyMem_RawFree(calculate->argv0_path);
+        calculate->argv0_path = _PyMem_RawWcsdup(pathconfig->program_full_path);
+        if (calculate->argv0_path == NULL) {
+            status = _PyStatus_NO_MEMORY();
+            goto done;
+        }
+
+        status = _PyStatus_OK();
+        goto done;
+    }
+
+    /* Use the location of the library as argv0_path */
+    PyMem_RawFree(calculate->argv0_path);
+    calculate->argv0_path = wbuf;
+    return _PyStatus_OK();
+
+done:
+    PyMem_RawFree(wbuf);
+    return status;
+}
+#endif
+
+
+static PyStatus
+calculate_argv0_path(PyCalculatePath *calculate,
+                     _PyPathConfig *pathconfig)
+{
+    PyStatus status;
+
+    calculate->argv0_path = _PyMem_RawWcsdup(pathconfig->program_full_path);
+    if (calculate->argv0_path == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
+
+#ifdef WITH_NEXT_FRAMEWORK
+    status = calculate_argv0_path_framework(calculate, pathconfig);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+#endif
+
+    status = resolve_symlinks(&calculate->argv0_path);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
+    reduce(calculate->argv0_path);
+
+    return _PyStatus_OK();
+}
+
+
+static PyStatus
+calculate_open_pyenv(PyCalculatePath *calculate, FILE **env_file_p)
+{
+    *env_file_p = NULL;
+
+    const wchar_t *env_cfg = L"pyvenv.cfg";
+
+    /* Filename: <argv0_path> / "pyvenv.cfg" */
+    wchar_t *filename = joinpath2(calculate->argv0_path, env_cfg);
+    if (filename == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
+
+    *env_file_p = _Py_wfopen(filename, L"r");
+    PyMem_RawFree(filename);
+
+    if (*env_file_p != NULL) {
+        return _PyStatus_OK();
+
+    }
+
+    /* fopen() failed: reset errno */
+    errno = 0;
+
+    /* Path: <basename(argv0_path)> / "pyvenv.cfg" */
+    wchar_t *parent = _PyMem_RawWcsdup(calculate->argv0_path);
+    if (parent == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
+    reduce(parent);
+
+    filename = joinpath2(parent, env_cfg);
+    PyMem_RawFree(parent);
+    if (filename == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
+
+    *env_file_p = _Py_wfopen(filename, L"r");
+    PyMem_RawFree(filename);
+
+    if (*env_file_p == NULL) {
+        /* fopen() failed: reset errno */
+        errno = 0;
+    }
     return _PyStatus_OK();
 }
 
@@ -992,57 +1254,34 @@
 /* Search for an "pyvenv.cfg" environment configuration file, first in the
    executable's directory and then in the parent directory.
    If found, open it for use when searching for prefixes.
-*/
+
+   Write the 'home' variable of pyvenv.cfg into calculate->argv0_path. */
 static PyStatus
-calculate_read_pyenv(PyCalculatePath *calculate,
-                     wchar_t *argv0_path, size_t argv0_path_len)
+calculate_read_pyenv(PyCalculatePath *calculate)
 {
     PyStatus status;
-    const wchar_t *env_cfg = L"pyvenv.cfg";
-    FILE *env_file;
+    FILE *env_file = NULL;
 
-    wchar_t filename[MAXPATHLEN+1];
-    const size_t filename_len = Py_ARRAY_LENGTH(filename);
-    memset(filename, 0, sizeof(filename));
-
-    /* Filename: <argv0_path_len> / "pyvenv.cfg" */
-    if (safe_wcscpy(filename, argv0_path, filename_len) < 0) {
-        return PATHLEN_ERR();
-    }
-
-    status = joinpath(filename, env_cfg, filename_len);
+    status = calculate_open_pyenv(calculate, &env_file);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-    env_file = _Py_wfopen(filename, L"r");
     if (env_file == NULL) {
-        errno = 0;
-
-        /* Filename: <basename(basename(argv0_path_len))> / "pyvenv.cfg" */
-        reduce(filename);
-        reduce(filename);
-        status = joinpath(filename, env_cfg, filename_len);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        env_file = _Py_wfopen(filename, L"r");
-        if (env_file == NULL) {
-            errno = 0;
-            return _PyStatus_OK();
-        }
+        /* pyvenv.cfg not found */
+        return _PyStatus_OK();
     }
 
     /* Look for a 'home' variable and set argv0_path to it, if found */
-    wchar_t home[MAXPATHLEN+1];
-    memset(home, 0, sizeof(home));
+    wchar_t *home = NULL;
+    status = _Py_FindEnvConfigValue(env_file, L"home", &home);
+    if (_PyStatus_EXCEPTION(status)) {
+        fclose(env_file);
+        return status;
+    }
 
-    if (_Py_FindEnvConfigValue(env_file, L"home",
-                               home, Py_ARRAY_LENGTH(home))) {
-        if (safe_wcscpy(argv0_path, home, argv0_path_len) < 0) {
-            fclose(env_file);
-            return PATHLEN_ERR();
-        }
+    if (home) {
+        PyMem_RawFree(calculate->argv0_path);
+        calculate->argv0_path = home;
     }
     fclose(env_file);
     return _PyStatus_OK();
@@ -1050,43 +1289,57 @@
 
 
 static PyStatus
-calculate_zip_path(PyCalculatePath *calculate, const wchar_t *prefix,
-                   wchar_t *zip_path, size_t zip_path_len)
+calculate_zip_path(PyCalculatePath *calculate)
 {
-    PyStatus status;
+    PyStatus res;
+
+    /* Path: <platlibdir> / "pythonXY.zip" */
+    wchar_t *path = joinpath2(calculate->platlibdir,
+                              L"python" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION)
+                              L".zip");
+    if (path == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
 
     if (calculate->prefix_found > 0) {
-        /* Use the reduced prefix returned by Py_GetPrefix() */
-        if (safe_wcscpy(zip_path, prefix, zip_path_len) < 0) {
-            return PATHLEN_ERR();
+        /* Use the reduced prefix returned by Py_GetPrefix()
+
+           Path: <basename(basename(prefix))> / <platlibdir> / "pythonXY.zip" */
+        wchar_t *parent = _PyMem_RawWcsdup(calculate->prefix);
+        if (parent == NULL) {
+            res = _PyStatus_NO_MEMORY();
+            goto done;
         }
-        reduce(zip_path);
-        reduce(zip_path);
+        reduce(parent);
+        reduce(parent);
+        calculate->zip_path = joinpath2(parent, path);
+        PyMem_RawFree(parent);
     }
     else {
-        if (safe_wcscpy(zip_path, calculate->prefix, zip_path_len) < 0) {
-            return PATHLEN_ERR();
-        }
+        calculate->zip_path = joinpath2(calculate->prefix_macro, path);
     }
-    status = joinpath(zip_path, L"lib/python00.zip", zip_path_len);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
+
+    if (calculate->zip_path == NULL) {
+        res = _PyStatus_NO_MEMORY();
+        goto done;
     }
 
     /* Replace "00" with version */
-    size_t bufsz = wcslen(zip_path);
-    zip_path[bufsz - 6] = VERSION[0];
-    zip_path[bufsz - 5] = VERSION[2];
-    return _PyStatus_OK();
+    size_t len = wcslen(calculate->zip_path);
+    calculate->zip_path[len - 6] = VERSION[0];
+    calculate->zip_path[len - 5] = VERSION[2];
+
+    res = _PyStatus_OK();
+
+done:
+    PyMem_RawFree(path);
+    return res;
 }
 
 
 static PyStatus
 calculate_module_search_path(PyCalculatePath *calculate,
-                             _PyPathConfig *pathconfig,
-                             const wchar_t *prefix,
-                             const wchar_t *exec_prefix,
-                             const wchar_t *zip_path)
+                             _PyPathConfig *pathconfig)
 {
     /* Calculate size of return buffer */
     size_t bufsz = 0;
@@ -1094,12 +1347,12 @@
         bufsz += wcslen(calculate->pythonpath_env) + 1;
     }
 
-    wchar_t *defpath = calculate->pythonpath;
-    size_t prefixsz = wcslen(prefix) + 1;
+    wchar_t *defpath = calculate->pythonpath_macro;
+    size_t prefixsz = wcslen(calculate->prefix) + 1;
     while (1) {
         wchar_t *delim = wcschr(defpath, DELIM);
 
-        if (defpath[0] != SEP) {
+        if (!_Py_isabs(defpath)) {
             /* Paths are relative to prefix */
             bufsz += prefixsz;
         }
@@ -1114,8 +1367,8 @@
         defpath = delim + 1;
     }
 
-    bufsz += wcslen(zip_path) + 1;
-    bufsz += wcslen(exec_prefix) + 1;
+    bufsz += wcslen(calculate->zip_path) + 1;
+    bufsz += wcslen(calculate->exec_prefix) + 1;
 
     /* Allocate the buffer */
     wchar_t *buf = PyMem_RawMalloc(bufsz * sizeof(wchar_t));
@@ -1131,19 +1384,19 @@
     }
 
     /* Next is the default zip path */
-    wcscat(buf, zip_path);
+    wcscat(buf, calculate->zip_path);
     wcscat(buf, delimiter);
 
     /* Next goes merge of compile-time $PYTHONPATH with
      * dynamically located prefix.
      */
-    defpath = calculate->pythonpath;
+    defpath = calculate->pythonpath_macro;
     while (1) {
         wchar_t *delim = wcschr(defpath, DELIM);
 
-        if (defpath[0] != SEP) {
-            wcscat(buf, prefix);
-            if (prefixsz >= 2 && prefix[prefixsz - 2] != SEP &&
+        if (!_Py_isabs(defpath)) {
+            wcscat(buf, calculate->prefix);
+            if (prefixsz >= 2 && calculate->prefix[prefixsz - 2] != SEP &&
                 defpath[0] != (delim ? DELIM : L'\0'))
             {
                 /* not empty */
@@ -1166,7 +1419,7 @@
     wcscat(buf, delimiter);
 
     /* Finally, on goes the directory for dynamic-load modules */
-    wcscat(buf, exec_prefix);
+    wcscat(buf, calculate->exec_prefix);
 
     pathconfig->module_search_path = buf;
     return _PyStatus_OK();
@@ -1177,6 +1430,11 @@
 calculate_init(PyCalculatePath *calculate, const PyConfig *config)
 {
     size_t len;
+
+    calculate->warnings = config->pathconfig_warnings;
+    calculate->pythonpath_env = config->pythonpath_env;
+    calculate->platlibdir = config->platlibdir;
+
     const char *path = getenv("PATH");
     if (path) {
         calculate->path_env = Py_DecodeLocale(path, &len);
@@ -1185,26 +1443,34 @@
         }
     }
 
-    calculate->pythonpath = Py_DecodeLocale(PYTHONPATH, &len);
-    if (!calculate->pythonpath) {
-        return DECODE_LOCALE_ERR("PYTHONPATH define", len);
+    /* Decode macros */
+    calculate->pythonpath_macro = Py_DecodeLocale(PYTHONPATH, &len);
+    if (!calculate->pythonpath_macro) {
+        return DECODE_LOCALE_ERR("PYTHONPATH macro", len);
+    }
+    calculate->prefix_macro = Py_DecodeLocale(PREFIX, &len);
+    if (!calculate->prefix_macro) {
+        return DECODE_LOCALE_ERR("PREFIX macro", len);
+    }
+    calculate->exec_prefix_macro = Py_DecodeLocale(EXEC_PREFIX, &len);
+    if (!calculate->exec_prefix_macro) {
+        return DECODE_LOCALE_ERR("EXEC_PREFIX macro", len);
+    }
+    calculate->vpath_macro = Py_DecodeLocale(VPATH, &len);
+    if (!calculate->vpath_macro) {
+        return DECODE_LOCALE_ERR("VPATH macro", len);
     }
 
-    calculate->prefix = Py_DecodeLocale(PREFIX, &len);
-    if (!calculate->prefix) {
-        return DECODE_LOCALE_ERR("PREFIX define", len);
+    // <platlibdir> / "pythonX.Y"
+    wchar_t *pyversion = Py_DecodeLocale("python" VERSION, &len);
+    if (!pyversion) {
+        return DECODE_LOCALE_ERR("VERSION macro", len);
     }
-    calculate->exec_prefix = Py_DecodeLocale(EXEC_PREFIX, &len);
-    if (!calculate->exec_prefix) {
-        return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
+    calculate->lib_python = joinpath2(config->platlibdir, pyversion);
+    PyMem_RawFree(pyversion);
+    if (calculate->lib_python == NULL) {
+        return _PyStatus_NO_MEMORY();
     }
-    calculate->lib_python = Py_DecodeLocale("lib/python" VERSION, &len);
-    if (!calculate->lib_python) {
-        return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
-    }
-
-    calculate->warnings = config->pathconfig_warnings;
-    calculate->pythonpath_env = config->pythonpath_env;
 
     return _PyStatus_OK();
 }
@@ -1213,11 +1479,16 @@
 static void
 calculate_free(PyCalculatePath *calculate)
 {
-    PyMem_RawFree(calculate->pythonpath);
-    PyMem_RawFree(calculate->prefix);
-    PyMem_RawFree(calculate->exec_prefix);
+    PyMem_RawFree(calculate->pythonpath_macro);
+    PyMem_RawFree(calculate->prefix_macro);
+    PyMem_RawFree(calculate->exec_prefix_macro);
+    PyMem_RawFree(calculate->vpath_macro);
     PyMem_RawFree(calculate->lib_python);
     PyMem_RawFree(calculate->path_env);
+    PyMem_RawFree(calculate->zip_path);
+    PyMem_RawFree(calculate->argv0_path);
+    PyMem_RawFree(calculate->prefix);
+    PyMem_RawFree(calculate->exec_prefix);
 }
 
 
@@ -1227,84 +1498,66 @@
     PyStatus status;
 
     if (pathconfig->program_full_path == NULL) {
-        status = calculate_program_full_path(calculate, pathconfig);
+        status = calculate_program(calculate, pathconfig);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
     }
 
-    wchar_t argv0_path[MAXPATHLEN+1];
-    memset(argv0_path, 0, sizeof(argv0_path));
-
-    status = calculate_argv0_path(calculate, pathconfig->program_full_path,
-                                  argv0_path, Py_ARRAY_LENGTH(argv0_path));
+    status = calculate_argv0_path(calculate, pathconfig);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
     /* If a pyvenv.cfg configure file is found,
        argv0_path is overriden with its 'home' variable. */
-    status = calculate_read_pyenv(calculate,
-                                  argv0_path, Py_ARRAY_LENGTH(argv0_path));
+    status = calculate_read_pyenv(calculate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    wchar_t prefix[MAXPATHLEN+1];
-    memset(prefix, 0, sizeof(prefix));
-    status = calculate_prefix(calculate, pathconfig,
-                              argv0_path,
-                              prefix, Py_ARRAY_LENGTH(prefix));
+    status = calculate_prefix(calculate, pathconfig);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    wchar_t zip_path[MAXPATHLEN+1];    /* ".../lib/pythonXY.zip" */
-    memset(zip_path, 0, sizeof(zip_path));
-
-    status = calculate_zip_path(calculate, prefix,
-                                zip_path, Py_ARRAY_LENGTH(zip_path));
+    status = calculate_zip_path(calculate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    wchar_t exec_prefix[MAXPATHLEN+1];
-    memset(exec_prefix, 0, sizeof(exec_prefix));
-    status = calculate_exec_prefix(calculate, pathconfig, argv0_path,
-                                   exec_prefix, Py_ARRAY_LENGTH(exec_prefix));
+    status = calculate_exec_prefix(calculate, pathconfig);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    if ((!calculate->prefix_found || !calculate->exec_prefix_found) &&
-        calculate->warnings)
+    if ((!calculate->prefix_found || !calculate->exec_prefix_found)
+        && calculate->warnings)
     {
         fprintf(stderr,
                 "Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]\n");
     }
 
     if (pathconfig->module_search_path == NULL) {
-        status = calculate_module_search_path(calculate, pathconfig,
-                                              prefix, exec_prefix, zip_path);
+        status = calculate_module_search_path(calculate, pathconfig);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
     }
 
     if (pathconfig->prefix == NULL) {
-        status = calculate_set_prefix(calculate, pathconfig, prefix);
+        status = calculate_set_prefix(calculate, pathconfig);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
     }
 
     if (pathconfig->exec_prefix == NULL) {
-        status = calculate_set_exec_prefix(calculate, pathconfig, exec_prefix);
+        status = calculate_set_exec_prefix(calculate, pathconfig);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
     }
-
     return _PyStatus_OK();
 }
 
@@ -1356,6 +1609,10 @@
         goto done;
     }
 
+    /* program_full_path must an either an empty string or an absolute path */
+    assert(wcslen(pathconfig->program_full_path) == 0
+           || _Py_isabs(pathconfig->program_full_path));
+
     status = _PyStatus_OK();
 
 done:
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index ab766b9..cdb3ae8 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -34,8 +34,21 @@
 };
 
 
-static int initialized;
-static PyTypeObject StructGrpType;
+typedef struct {
+  PyTypeObject *StructGrpType;
+} grpmodulestate;
+
+static inline grpmodulestate*
+get_grp_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (grpmodulestate *)state;
+}
+
+#define modulestate_global get_grp_state(PyState_FindModule(&grpmodule))
+
+static struct PyModuleDef grpmodule;
 
 #define DEFAULT_BUFFER_SIZE 1024
 
@@ -43,10 +56,10 @@
 mkgrent(struct group *p)
 {
     int setIndex = 0;
-    PyObject *v = PyStructSequence_New(&StructGrpType), *w;
+    PyObject *v, *w;
     char **member;
 
-    if (v == NULL)
+    if ((v = PyStructSequence_New(modulestate_global->StructGrpType)) == NULL)
         return NULL;
 
     if ((w = PyList_New(0)) == NULL) {
@@ -111,7 +124,7 @@
         PyErr_Clear();
         if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                              "group id must be int, not %.200",
-                             id->ob_type->tp_name) < 0) {
+                             Py_TYPE(id)->tp_name) < 0) {
             return NULL;
         }
         py_int_id = PyNumber_Long(id);
@@ -314,36 +327,52 @@
 according to the password database.  Check both databases to get\n\
 complete membership information.)");
 
+static int grpmodule_traverse(PyObject *m, visitproc visit, void *arg) {
+    Py_VISIT(get_grp_state(m)->StructGrpType);
+    return 0;
+}
 
+static int grpmodule_clear(PyObject *m) {
+    Py_CLEAR(get_grp_state(m)->StructGrpType);
+    return 0;
+}
+
+static void grpmodule_free(void *m) {
+    grpmodule_clear((PyObject *)m);
+}
 
 static struct PyModuleDef grpmodule = {
         PyModuleDef_HEAD_INIT,
         "grp",
         grp__doc__,
-        -1,
+        sizeof(grpmodulestate),
         grp_methods,
         NULL,
-        NULL,
-        NULL,
-        NULL
+        grpmodule_traverse,
+        grpmodule_clear,
+        grpmodule_free,
 };
 
 PyMODINIT_FUNC
 PyInit_grp(void)
 {
-    PyObject *m, *d;
-    m = PyModule_Create(&grpmodule);
-    if (m == NULL)
-        return NULL;
-    d = PyModule_GetDict(m);
-    if (!initialized) {
-        if (PyStructSequence_InitType2(&StructGrpType,
-                                       &struct_group_type_desc) < 0)
-            return NULL;
+    PyObject *m;
+    if ((m = PyState_FindModule(&grpmodule)) != NULL) {
+        Py_INCREF(m);
+        return m;
     }
-    if (PyDict_SetItemString(d, "struct_group",
-                             (PyObject *)&StructGrpType) < 0)
+
+    if ((m = PyModule_Create(&grpmodule)) == NULL) {
         return NULL;
-    initialized = 1;
+    }
+
+    grpmodulestate *state = PyModule_GetState(m);
+    state->StructGrpType = PyStructSequence_NewType(&struct_group_type_desc);
+    if (state->StructGrpType == NULL) {
+        return NULL;
+    }
+
+    Py_INCREF(state->StructGrpType);
+    PyModule_AddObject(m, "struct_group", (PyObject *) state->StructGrpType);
     return m;
 }
diff --git a/Modules/hashtable.c b/Modules/hashtable.c
deleted file mode 100644
index 4a36a1e..0000000
--- a/Modules/hashtable.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/* The implementation of the hash table (_Py_hashtable_t) is based on the
-   cfuhash project:
-   http://sourceforge.net/projects/libcfu/
-
-   Copyright of cfuhash:
-   ----------------------------------
-   Creation date: 2005-06-24 21:22:40
-   Authors: Don
-   Change log:
-
-   Copyright (c) 2005 Don Owens
-   All rights reserved.
-
-   This code is released under the BSD license:
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-
-     * Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-     * Redistributions in binary form must reproduce the above
-       copyright notice, this list of conditions and the following
-       disclaimer in the documentation and/or other materials provided
-       with the distribution.
-
-     * Neither the name of the author nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-   OF THE POSSIBILITY OF SUCH DAMAGE.
-   ----------------------------------
-*/
-
-#include "Python.h"
-#include "hashtable.h"
-
-#define HASHTABLE_MIN_SIZE 16
-#define HASHTABLE_HIGH 0.50
-#define HASHTABLE_LOW 0.10
-#define HASHTABLE_REHASH_FACTOR 2.0 / (HASHTABLE_LOW + HASHTABLE_HIGH)
-
-#define BUCKETS_HEAD(SLIST) \
-        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(SLIST)))
-#define TABLE_HEAD(HT, BUCKET) \
-        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(HT)->buckets[BUCKET]))
-#define ENTRY_NEXT(ENTRY) \
-        ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
-#define HASHTABLE_ITEM_SIZE(HT) \
-        (sizeof(_Py_hashtable_entry_t) + (HT)->key_size + (HT)->data_size)
-
-#define ENTRY_READ_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \
-    do { \
-        assert((DATA_SIZE) == (TABLE)->data_size); \
-        memcpy((PDATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \
-                  (DATA_SIZE)); \
-    } while (0)
-
-#define ENTRY_WRITE_PDATA(TABLE, ENTRY, DATA_SIZE, PDATA) \
-    do { \
-        assert((DATA_SIZE) == (TABLE)->data_size); \
-        memcpy((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \
-                  (PDATA), (DATA_SIZE)); \
-    } while (0)
-
-/* Forward declaration */
-static void hashtable_rehash(_Py_hashtable_t *ht);
-
-static void
-_Py_slist_init(_Py_slist_t *list)
-{
-    list->head = NULL;
-}
-
-
-static void
-_Py_slist_prepend(_Py_slist_t *list, _Py_slist_item_t *item)
-{
-    item->next = list->head;
-    list->head = item;
-}
-
-
-static void
-_Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous,
-                 _Py_slist_item_t *item)
-{
-    if (previous != NULL)
-        previous->next = item->next;
-    else
-        list->head = item->next;
-}
-
-
-Py_uhash_t
-_Py_hashtable_hash_ptr(struct _Py_hashtable_t *ht, const void *pkey)
-{
-    void *key;
-
-    _Py_HASHTABLE_READ_KEY(ht, pkey, key);
-    return (Py_uhash_t)_Py_HashPointer(key);
-}
-
-
-int
-_Py_hashtable_compare_direct(_Py_hashtable_t *ht, const void *pkey,
-                             const _Py_hashtable_entry_t *entry)
-{
-    const void *pkey2 = _Py_HASHTABLE_ENTRY_PKEY(entry);
-    return (memcmp(pkey, pkey2, ht->key_size) == 0);
-}
-
-
-/* makes sure the real size of the buckets array is a power of 2 */
-static size_t
-round_size(size_t s)
-{
-    size_t i;
-    if (s < HASHTABLE_MIN_SIZE)
-        return HASHTABLE_MIN_SIZE;
-    i = 1;
-    while (i < s)
-        i <<= 1;
-    return i;
-}
-
-
-_Py_hashtable_t *
-_Py_hashtable_new_full(size_t key_size, size_t data_size,
-                       size_t init_size,
-                       _Py_hashtable_hash_func hash_func,
-                       _Py_hashtable_compare_func compare_func,
-                       _Py_hashtable_allocator_t *allocator)
-{
-    _Py_hashtable_t *ht;
-    size_t buckets_size;
-    _Py_hashtable_allocator_t alloc;
-
-    if (allocator == NULL) {
-        alloc.malloc = PyMem_RawMalloc;
-        alloc.free = PyMem_RawFree;
-    }
-    else
-        alloc = *allocator;
-
-    ht = (_Py_hashtable_t *)alloc.malloc(sizeof(_Py_hashtable_t));
-    if (ht == NULL)
-        return ht;
-
-    ht->num_buckets = round_size(init_size);
-    ht->entries = 0;
-    ht->key_size = key_size;
-    ht->data_size = data_size;
-
-    buckets_size = ht->num_buckets * sizeof(ht->buckets[0]);
-    ht->buckets = alloc.malloc(buckets_size);
-    if (ht->buckets == NULL) {
-        alloc.free(ht);
-        return NULL;
-    }
-    memset(ht->buckets, 0, buckets_size);
-
-    ht->hash_func = hash_func;
-    ht->compare_func = compare_func;
-    ht->alloc = alloc;
-    return ht;
-}
-
-
-_Py_hashtable_t *
-_Py_hashtable_new(size_t key_size, size_t data_size,
-                  _Py_hashtable_hash_func hash_func,
-                  _Py_hashtable_compare_func compare_func)
-{
-    return _Py_hashtable_new_full(key_size, data_size,
-                                  HASHTABLE_MIN_SIZE,
-                                  hash_func, compare_func,
-                                  NULL);
-}
-
-
-size_t
-_Py_hashtable_size(_Py_hashtable_t *ht)
-{
-    size_t size;
-
-    size = sizeof(_Py_hashtable_t);
-
-    /* buckets */
-    size += ht->num_buckets * sizeof(_Py_hashtable_entry_t *);
-
-    /* entries */
-    size += ht->entries * HASHTABLE_ITEM_SIZE(ht);
-
-    return size;
-}
-
-
-#ifdef Py_DEBUG
-void
-_Py_hashtable_print_stats(_Py_hashtable_t *ht)
-{
-    size_t size;
-    size_t chain_len, max_chain_len, total_chain_len, nchains;
-    _Py_hashtable_entry_t *entry;
-    size_t hv;
-    double load;
-
-    size = _Py_hashtable_size(ht);
-
-    load = (double)ht->entries / ht->num_buckets;
-
-    max_chain_len = 0;
-    total_chain_len = 0;
-    nchains = 0;
-    for (hv = 0; hv < ht->num_buckets; hv++) {
-        entry = TABLE_HEAD(ht, hv);
-        if (entry != NULL) {
-            chain_len = 0;
-            for (; entry; entry = ENTRY_NEXT(entry)) {
-                chain_len++;
-            }
-            if (chain_len > max_chain_len)
-                max_chain_len = chain_len;
-            total_chain_len += chain_len;
-            nchains++;
-        }
-    }
-    printf("hash table %p: entries=%"
-           PY_FORMAT_SIZE_T "u/%" PY_FORMAT_SIZE_T "u (%.0f%%), ",
-           (void *)ht, ht->entries, ht->num_buckets, load * 100.0);
-    if (nchains)
-        printf("avg_chain_len=%.1f, ", (double)total_chain_len / nchains);
-    printf("max_chain_len=%" PY_FORMAT_SIZE_T "u, %" PY_FORMAT_SIZE_T "u KiB\n",
-           max_chain_len, size / 1024);
-}
-#endif
-
-
-_Py_hashtable_entry_t *
-_Py_hashtable_get_entry(_Py_hashtable_t *ht,
-                        size_t key_size, const void *pkey)
-{
-    Py_uhash_t key_hash;
-    size_t index;
-    _Py_hashtable_entry_t *entry;
-
-    assert(key_size == ht->key_size);
-
-    key_hash = ht->hash_func(ht, pkey);
-    index = key_hash & (ht->num_buckets - 1);
-
-    for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) {
-        if (entry->key_hash == key_hash && ht->compare_func(ht, pkey, entry))
-            break;
-    }
-
-    return entry;
-}
-
-
-static int
-_Py_hashtable_pop_entry(_Py_hashtable_t *ht, size_t key_size, const void *pkey,
-                        void *data, size_t data_size)
-{
-    Py_uhash_t key_hash;
-    size_t index;
-    _Py_hashtable_entry_t *entry, *previous;
-
-    assert(key_size == ht->key_size);
-
-    key_hash = ht->hash_func(ht, pkey);
-    index = key_hash & (ht->num_buckets - 1);
-
-    previous = NULL;
-    for (entry = TABLE_HEAD(ht, index); entry != NULL; entry = ENTRY_NEXT(entry)) {
-        if (entry->key_hash == key_hash && ht->compare_func(ht, pkey, entry))
-            break;
-        previous = entry;
-    }
-
-    if (entry == NULL)
-        return 0;
-
-    _Py_slist_remove(&ht->buckets[index], (_Py_slist_item_t *)previous,
-                     (_Py_slist_item_t *)entry);
-    ht->entries--;
-
-    if (data != NULL)
-        ENTRY_READ_PDATA(ht, entry, data_size, data);
-    ht->alloc.free(entry);
-
-    if ((float)ht->entries / (float)ht->num_buckets < HASHTABLE_LOW)
-        hashtable_rehash(ht);
-    return 1;
-}
-
-
-int
-_Py_hashtable_set(_Py_hashtable_t *ht, size_t key_size, const void *pkey,
-                  size_t data_size, const void *data)
-{
-    Py_uhash_t key_hash;
-    size_t index;
-    _Py_hashtable_entry_t *entry;
-
-    assert(key_size == ht->key_size);
-
-    assert(data != NULL || data_size == 0);
-#ifndef NDEBUG
-    /* Don't write the assertion on a single line because it is interesting
-       to know the duplicated entry if the assertion failed. The entry can
-       be read using a debugger. */
-    entry = _Py_hashtable_get_entry(ht, key_size, pkey);
-    assert(entry == NULL);
-#endif
-
-    key_hash = ht->hash_func(ht, pkey);
-    index = key_hash & (ht->num_buckets - 1);
-
-    entry = ht->alloc.malloc(HASHTABLE_ITEM_SIZE(ht));
-    if (entry == NULL) {
-        /* memory allocation failed */
-        return -1;
-    }
-
-    entry->key_hash = key_hash;
-    memcpy((void *)_Py_HASHTABLE_ENTRY_PKEY(entry), pkey, ht->key_size);
-    if (data)
-        ENTRY_WRITE_PDATA(ht, entry, data_size, data);
-
-    _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry);
-    ht->entries++;
-
-    if ((float)ht->entries / (float)ht->num_buckets > HASHTABLE_HIGH)
-        hashtable_rehash(ht);
-    return 0;
-}
-
-
-int
-_Py_hashtable_get(_Py_hashtable_t *ht, size_t key_size,const void *pkey,
-                  size_t data_size, void *data)
-{
-    _Py_hashtable_entry_t *entry;
-
-    assert(data != NULL);
-
-    entry = _Py_hashtable_get_entry(ht, key_size, pkey);
-    if (entry == NULL)
-        return 0;
-    ENTRY_READ_PDATA(ht, entry, data_size, data);
-    return 1;
-}
-
-
-int
-_Py_hashtable_pop(_Py_hashtable_t *ht, size_t key_size, const void *pkey,
-                  size_t data_size, void *data)
-{
-    assert(data != NULL);
-    return _Py_hashtable_pop_entry(ht, key_size, pkey, data, data_size);
-}
-
-
-/* Code commented since the function is not needed in Python */
-#if 0
-void
-_Py_hashtable_delete(_Py_hashtable_t *ht, size_t key_size, const void *pkey)
-{
-#ifndef NDEBUG
-    int found = _Py_hashtable_pop_entry(ht, key_size, pkey, NULL, 0);
-    assert(found);
-#else
-    (void)_Py_hashtable_pop_entry(ht, key_size, pkey, NULL, 0);
-#endif
-}
-#endif
-
-
-int
-_Py_hashtable_foreach(_Py_hashtable_t *ht,
-                      _Py_hashtable_foreach_func func,
-                      void *arg)
-{
-    _Py_hashtable_entry_t *entry;
-    size_t hv;
-
-    for (hv = 0; hv < ht->num_buckets; hv++) {
-        for (entry = TABLE_HEAD(ht, hv); entry; entry = ENTRY_NEXT(entry)) {
-            int res = func(ht, entry, arg);
-            if (res)
-                return res;
-        }
-    }
-    return 0;
-}
-
-
-static void
-hashtable_rehash(_Py_hashtable_t *ht)
-{
-    size_t buckets_size, new_size, bucket;
-    _Py_slist_t *old_buckets = NULL;
-    size_t old_num_buckets;
-
-    new_size = round_size((size_t)(ht->entries * HASHTABLE_REHASH_FACTOR));
-    if (new_size == ht->num_buckets)
-        return;
-
-    old_num_buckets = ht->num_buckets;
-
-    buckets_size = new_size * sizeof(ht->buckets[0]);
-    old_buckets = ht->buckets;
-    ht->buckets = ht->alloc.malloc(buckets_size);
-    if (ht->buckets == NULL) {
-        /* cancel rehash on memory allocation failure */
-        ht->buckets = old_buckets ;
-        /* memory allocation failed */
-        return;
-    }
-    memset(ht->buckets, 0, buckets_size);
-
-    ht->num_buckets = new_size;
-
-    for (bucket = 0; bucket < old_num_buckets; bucket++) {
-        _Py_hashtable_entry_t *entry, *next;
-        for (entry = BUCKETS_HEAD(old_buckets[bucket]); entry != NULL; entry = next) {
-            size_t entry_index;
-
-
-            assert(ht->hash_func(ht, _Py_HASHTABLE_ENTRY_PKEY(entry)) == entry->key_hash);
-            next = ENTRY_NEXT(entry);
-            entry_index = entry->key_hash & (new_size - 1);
-
-            _Py_slist_prepend(&ht->buckets[entry_index], (_Py_slist_item_t*)entry);
-        }
-    }
-
-    ht->alloc.free(old_buckets);
-}
-
-
-void
-_Py_hashtable_clear(_Py_hashtable_t *ht)
-{
-    _Py_hashtable_entry_t *entry, *next;
-    size_t i;
-
-    for (i=0; i < ht->num_buckets; i++) {
-        for (entry = TABLE_HEAD(ht, i); entry != NULL; entry = next) {
-            next = ENTRY_NEXT(entry);
-            ht->alloc.free(entry);
-        }
-        _Py_slist_init(&ht->buckets[i]);
-    }
-    ht->entries = 0;
-    hashtable_rehash(ht);
-}
-
-
-void
-_Py_hashtable_destroy(_Py_hashtable_t *ht)
-{
-    size_t i;
-
-    for (i = 0; i < ht->num_buckets; i++) {
-        _Py_slist_item_t *entry = ht->buckets[i].head;
-        while (entry) {
-            _Py_slist_item_t *entry_next = entry->next;
-            ht->alloc.free(entry);
-            entry = entry_next;
-        }
-    }
-
-    ht->alloc.free(ht->buckets);
-    ht->alloc.free(ht);
-}
-
-
-_Py_hashtable_t *
-_Py_hashtable_copy(_Py_hashtable_t *src)
-{
-    const size_t key_size = src->key_size;
-    const size_t data_size = src->data_size;
-    _Py_hashtable_t *dst;
-    _Py_hashtable_entry_t *entry;
-    size_t bucket;
-    int err;
-
-    dst = _Py_hashtable_new_full(key_size, data_size,
-                                 src->num_buckets,
-                                 src->hash_func,
-                                 src->compare_func,
-                                 &src->alloc);
-    if (dst == NULL)
-        return NULL;
-
-    for (bucket=0; bucket < src->num_buckets; bucket++) {
-        entry = TABLE_HEAD(src, bucket);
-        for (; entry; entry = ENTRY_NEXT(entry)) {
-            const void *pkey = _Py_HASHTABLE_ENTRY_PKEY(entry);
-            const void *pdata = _Py_HASHTABLE_ENTRY_PDATA(src, entry);
-            err = _Py_hashtable_set(dst, key_size, pkey, data_size, pdata);
-            if (err) {
-                _Py_hashtable_destroy(dst);
-                return NULL;
-            }
-        }
-    }
-    return dst;
-}
diff --git a/Modules/hashtable.h b/Modules/hashtable.h
deleted file mode 100644
index dbec23d..0000000
--- a/Modules/hashtable.h
+++ /dev/null
@@ -1,211 +0,0 @@
-#ifndef Py_HASHTABLE_H
-#define Py_HASHTABLE_H
-/* The whole API is private */
-#ifndef Py_LIMITED_API
-
-/* Single linked list */
-
-typedef struct _Py_slist_item_s {
-    struct _Py_slist_item_s *next;
-} _Py_slist_item_t;
-
-typedef struct {
-    _Py_slist_item_t *head;
-} _Py_slist_t;
-
-#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)ITEM)->next)
-
-#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head)
-
-
-/* _Py_hashtable: table entry */
-
-typedef struct {
-    /* used by _Py_hashtable_t.buckets to link entries */
-    _Py_slist_item_t _Py_slist_item;
-
-    Py_uhash_t key_hash;
-
-    /* key (key_size bytes) and then data (data_size bytes) follows */
-} _Py_hashtable_entry_t;
-
-#define _Py_HASHTABLE_ENTRY_PKEY(ENTRY) \
-        ((const void *)((char *)(ENTRY) \
-                        + sizeof(_Py_hashtable_entry_t)))
-
-#define _Py_HASHTABLE_ENTRY_PDATA(TABLE, ENTRY) \
-        ((const void *)((char *)(ENTRY) \
-                        + sizeof(_Py_hashtable_entry_t) \
-                        + (TABLE)->key_size))
-
-/* Get a key value from pkey: use memcpy() rather than a pointer dereference
-   to avoid memory alignment issues. */
-#define _Py_HASHTABLE_READ_KEY(TABLE, PKEY, DST_KEY) \
-    do { \
-        assert(sizeof(DST_KEY) == (TABLE)->key_size); \
-        memcpy(&(DST_KEY), (PKEY), sizeof(DST_KEY)); \
-    } while (0)
-
-#define _Py_HASHTABLE_ENTRY_READ_KEY(TABLE, ENTRY, KEY) \
-    do { \
-        assert(sizeof(KEY) == (TABLE)->key_size); \
-        memcpy(&(KEY), _Py_HASHTABLE_ENTRY_PKEY(ENTRY), sizeof(KEY)); \
-    } while (0)
-
-#define _Py_HASHTABLE_ENTRY_READ_DATA(TABLE, ENTRY, DATA) \
-    do { \
-        assert(sizeof(DATA) == (TABLE)->data_size); \
-        memcpy(&(DATA), _Py_HASHTABLE_ENTRY_PDATA(TABLE, (ENTRY)), \
-                  sizeof(DATA)); \
-    } while (0)
-
-#define _Py_HASHTABLE_ENTRY_WRITE_DATA(TABLE, ENTRY, DATA) \
-    do { \
-        assert(sizeof(DATA) == (TABLE)->data_size); \
-        memcpy((void *)_Py_HASHTABLE_ENTRY_PDATA((TABLE), (ENTRY)), \
-                  &(DATA), sizeof(DATA)); \
-    } while (0)
-
-
-/* _Py_hashtable: prototypes */
-
-/* Forward declaration */
-struct _Py_hashtable_t;
-
-typedef Py_uhash_t (*_Py_hashtable_hash_func) (struct _Py_hashtable_t *ht,
-                                               const void *pkey);
-typedef int (*_Py_hashtable_compare_func) (struct _Py_hashtable_t *ht,
-                                           const void *pkey,
-                                           const _Py_hashtable_entry_t *he);
-
-typedef struct {
-    /* allocate a memory block */
-    void* (*malloc) (size_t size);
-
-    /* release a memory block */
-    void (*free) (void *ptr);
-} _Py_hashtable_allocator_t;
-
-
-/* _Py_hashtable: table */
-
-typedef struct _Py_hashtable_t {
-    size_t num_buckets;
-    size_t entries; /* Total number of entries in the table. */
-    _Py_slist_t *buckets;
-    size_t key_size;
-    size_t data_size;
-
-    _Py_hashtable_hash_func hash_func;
-    _Py_hashtable_compare_func compare_func;
-    _Py_hashtable_allocator_t alloc;
-} _Py_hashtable_t;
-
-/* hash a pointer (void*) */
-PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(
-    struct _Py_hashtable_t *ht,
-    const void *pkey);
-
-/* comparison using memcmp() */
-PyAPI_FUNC(int) _Py_hashtable_compare_direct(
-    _Py_hashtable_t *ht,
-    const void *pkey,
-    const _Py_hashtable_entry_t *entry);
-
-PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new(
-    size_t key_size,
-    size_t data_size,
-    _Py_hashtable_hash_func hash_func,
-    _Py_hashtable_compare_func compare_func);
-
-PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full(
-    size_t key_size,
-    size_t data_size,
-    size_t init_size,
-    _Py_hashtable_hash_func hash_func,
-    _Py_hashtable_compare_func compare_func,
-    _Py_hashtable_allocator_t *allocator);
-
-PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht);
-
-/* Return a copy of the hash table */
-PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_copy(_Py_hashtable_t *src);
-
-PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht);
-
-typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht,
-                                           _Py_hashtable_entry_t *entry,
-                                           void *arg);
-
-/* Call func() on each entry of the hashtable.
-   Iteration stops if func() result is non-zero, in this case it's the result
-   of the call. Otherwise, the function returns 0. */
-PyAPI_FUNC(int) _Py_hashtable_foreach(
-    _Py_hashtable_t *ht,
-    _Py_hashtable_foreach_func func,
-    void *arg);
-
-PyAPI_FUNC(size_t) _Py_hashtable_size(_Py_hashtable_t *ht);
-
-/* Add a new entry to the hash. The key must not be present in the hash table.
-   Return 0 on success, -1 on memory error.
-
-   Don't call directly this function,
-   but use _Py_HASHTABLE_SET() and _Py_HASHTABLE_SET_NODATA() macros */
-PyAPI_FUNC(int) _Py_hashtable_set(
-    _Py_hashtable_t *ht,
-    size_t key_size,
-    const void *pkey,
-    size_t data_size,
-    const void *data);
-
-#define _Py_HASHTABLE_SET(TABLE, KEY, DATA) \
-    _Py_hashtable_set(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA))
-
-#define _Py_HASHTABLE_SET_NODATA(TABLE, KEY) \
-    _Py_hashtable_set(TABLE, sizeof(KEY), &(KEY), 0, NULL)
-
-
-/* Get an entry.
-   Return NULL if the key does not exist.
-
-   Don't call directly this function, but use _Py_HASHTABLE_GET_ENTRY()
-   macro */
-PyAPI_FUNC(_Py_hashtable_entry_t*) _Py_hashtable_get_entry(
-    _Py_hashtable_t *ht,
-    size_t key_size,
-    const void *pkey);
-
-#define _Py_HASHTABLE_GET_ENTRY(TABLE, KEY) \
-    _Py_hashtable_get_entry(TABLE, sizeof(KEY), &(KEY))
-
-
-/* Get data from an entry. Copy entry data into data and return 1 if the entry
-   exists, return 0 if the entry does not exist.
-
-   Don't call directly this function, but use _Py_HASHTABLE_GET() macro */
-PyAPI_FUNC(int) _Py_hashtable_get(
-    _Py_hashtable_t *ht,
-    size_t key_size,
-    const void *pkey,
-    size_t data_size,
-    void *data);
-
-#define _Py_HASHTABLE_GET(TABLE, KEY, DATA) \
-    _Py_hashtable_get(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA))
-
-
-/* Don't call directly this function, but use _Py_HASHTABLE_POP() macro */
-PyAPI_FUNC(int) _Py_hashtable_pop(
-    _Py_hashtable_t *ht,
-    size_t key_size,
-    const void *pkey,
-    size_t data_size,
-    void *data);
-
-#define _Py_HASHTABLE_POP(TABLE, KEY, DATA) \
-    _Py_hashtable_pop(TABLE, sizeof(KEY), &(KEY), sizeof(DATA), &(DATA))
-
-
-#endif   /* Py_LIMITED_API */
-#endif
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index eba59ba..18fcebd 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -2,7 +2,7 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "pycore_tupleobject.h"
-#include "structmember.h"
+#include <stddef.h>               // offsetof()
 
 /* Itertools module written and maintained
    by Raymond D. Hettinger <python@rcn.com>
@@ -134,7 +134,7 @@
         newkey = newvalue;
         Py_INCREF(newvalue);
     } else {
-        newkey = PyObject_CallFunctionObjArgs(gbo->keyfunc, newvalue, NULL);
+        newkey = PyObject_CallOneArg(gbo->keyfunc, newvalue);
         if (newkey == NULL) {
             Py_DECREF(newvalue);
             return -1;
@@ -455,8 +455,6 @@
     PyObject *weakreflist;
 } teeobject;
 
-static PyTypeObject teedataobject_type;
-
 static PyObject *
 teedataobject_newinternal(PyObject *it)
 {
@@ -527,7 +525,7 @@
 static void
 teedataobject_safe_decref(PyObject *obj)
 {
-    while (obj && Py_TYPE(obj) == &teedataobject_type &&
+    while (obj && Py_IS_TYPE(obj, &teedataobject_type) &&
            Py_REFCNT(obj) == 1) {
         PyObject *nextlink = ((teedataobject *)obj)->nextlink;
         ((teedataobject *)obj)->nextlink = NULL;
@@ -614,7 +612,7 @@
 
     if (len == LINKCELLS) {
         if (next != Py_None) {
-            if (Py_TYPE(next) != &teedataobject_type)
+            if (!Py_IS_TYPE(next, &teedataobject_type))
                 goto err;
             assert(tdo->nextlink == NULL);
             Py_INCREF(next);
@@ -682,8 +680,6 @@
 };
 
 
-static PyTypeObject tee_type;
-
 static PyObject *
 tee_next(teeobject *to)
 {
@@ -949,8 +945,6 @@
     int firstpass;
 } cycleobject;
 
-static PyTypeObject cycle_type;
-
 /*[clinic input]
 @classmethod
 itertools.cycle.__new__
@@ -1060,10 +1054,10 @@
             }
             Py_DECREF(res);
         }
-        return Py_BuildValue("O(N)(Oi)", Py_TYPE(lz), it, lz->saved, 1);
+        return Py_BuildValue("O(N)(OO)", Py_TYPE(lz), it, lz->saved, Py_True);
     }
-    return Py_BuildValue("O(O)(Oi)", Py_TYPE(lz), lz->it, lz->saved,
-                         lz->firstpass);
+    return Py_BuildValue("O(O)(OO)", Py_TYPE(lz), lz->it, lz->saved,
+                         lz->firstpass ? Py_True : Py_False);
 }
 
 static PyObject *
@@ -1147,8 +1141,6 @@
     long start;
 } dropwhileobject;
 
-static PyTypeObject dropwhile_type;
-
 /*[clinic input]
 @classmethod
 itertools.dropwhile.__new__
@@ -1219,7 +1211,7 @@
         if (lz->start == 1)
             return item;
 
-        good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
+        good = PyObject_CallOneArg(lz->func, item);
         if (good == NULL) {
             Py_DECREF(item);
             return NULL;
@@ -1314,8 +1306,6 @@
     long stop;
 } takewhileobject;
 
-static PyTypeObject takewhile_type;
-
 /*[clinic input]
 @classmethod
 itertools.takewhile.__new__
@@ -1382,7 +1372,7 @@
     if (item == NULL)
         return NULL;
 
-    good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
+    good = PyObject_CallOneArg(lz->func, item);
     if (good == NULL) {
         Py_DECREF(item);
         return NULL;
@@ -1734,8 +1724,6 @@
     PyObject *it;
 } starmapobject;
 
-static PyTypeObject starmap_type;
-
 /*[clinic input]
 @classmethod
 itertools.starmap.__new__
@@ -2040,6 +2028,8 @@
      reduce_doc},
     {"__setstate__",    (PyCFunction)chain_setstate,    METH_O,
      setstate_doc},
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL,              NULL}           /* sentinel */
 };
 
@@ -2452,8 +2442,6 @@
     int stopped;            /* set to 1 when the iterator is exhausted */
 } combinationsobject;
 
-static PyTypeObject combinations_type;
-
 
 /*[clinic input]
 @classmethod
@@ -2786,8 +2774,6 @@
     int stopped;            /* set to 1 when the cwr iterator is exhausted */
 } cwrobject;
 
-static PyTypeObject cwr_type;
-
 /*[clinic input]
 @classmethod
 itertools.combinations_with_replacement.__new__
@@ -3076,12 +3062,15 @@
 /* permutations object ********************************************************
 
 def permutations(iterable, r=None):
-    'permutations(range(3), 2) --> (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)'
+    # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
+    # permutations(range(3)) --> 012 021 102 120 201 210
     pool = tuple(iterable)
     n = len(pool)
     r = n if r is None else r
-    indices = range(n)
-    cycles = range(n-r+1, n+1)[::-1]
+    if r > n:
+        return
+    indices = list(range(n))
+    cycles = list(range(n, n-r, -1))
     yield tuple(pool[i] for i in indices[:r])
     while n:
         for i in reversed(range(r)):
@@ -3108,8 +3097,6 @@
     int stopped;            /* set to 1 when the iterator is exhausted */
 } permutationsobject;
 
-static PyTypeObject permutations_type;
-
 /*[clinic input]
 @classmethod
 itertools.permutations.__new__
@@ -3469,8 +3456,6 @@
     PyObject *initial;
 } accumulateobject;
 
-static PyTypeObject accumulate_type;
-
 /*[clinic input]
 @classmethod
 itertools.accumulate.__new__
@@ -3682,8 +3667,6 @@
     PyObject *selectors;
 } compressobject;
 
-static PyTypeObject compress_type;
-
 /*[clinic input]
 @classmethod
 itertools.compress.__new__
@@ -3842,8 +3825,6 @@
     PyObject *it;
 } filterfalseobject;
 
-static PyTypeObject filterfalse_type;
-
 /*[clinic input]
 @classmethod
 itertools.filterfalse.__new__
@@ -3915,7 +3896,7 @@
             ok = PyObject_IsTrue(item);
         } else {
             PyObject *good;
-            good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
+            good = PyObject_CallOneArg(lz->func, item);
             if (good == NULL) {
                 Py_DECREF(item);
                 return NULL;
@@ -4014,8 +3995,6 @@
     Either long_cnt or long_step may be a float, Fraction, or Decimal.
 */
 
-static PyTypeObject count_type;
-
 /*[clinic input]
 @classmethod
 itertools.count.__new__
@@ -4253,17 +4232,17 @@
 {
     repeatobject *ro;
     PyObject *element;
-    Py_ssize_t cnt = -1, n_kwds = 0;
+    Py_ssize_t cnt = -1, n_args;
     static char *kwargs[] = {"object", "times", NULL};
 
+    n_args = PyTuple_GET_SIZE(args);
+    if (kwds != NULL)
+        n_args += PyDict_GET_SIZE(kwds);
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|n:repeat", kwargs,
                                      &element, &cnt))
         return NULL;
-
-    if (kwds != NULL)
-        n_kwds = PyDict_GET_SIZE(kwds);
     /* Does user supply times argument? */
-    if ((PyTuple_Size(args) + n_kwds == 2) && cnt < 0)
+    if (n_args == 2 && cnt < 0)
         cnt = 0;
 
     ro = (repeatobject *)type->tp_alloc(type, 0);
@@ -4698,31 +4677,9 @@
 combinations_with_replacement(p, r)\n\
 ");
 
-
-static PyMethodDef module_methods[] = {
-    ITERTOOLS_TEE_METHODDEF
-    {NULL,              NULL}           /* sentinel */
-};
-
-
-static struct PyModuleDef itertoolsmodule = {
-    PyModuleDef_HEAD_INIT,
-    "itertools",
-    module_doc,
-    -1,
-    module_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
-
-PyMODINIT_FUNC
-PyInit_itertools(void)
+static int
+itertoolsmodule_exec(PyObject *m)
 {
-    int i;
-    PyObject *m;
-    const char *name;
     PyTypeObject *typelist[] = {
         &accumulate_type,
         &combinations_type,
@@ -4743,22 +4700,45 @@
         &groupby_type,
         &_grouper_type,
         &tee_type,
-        &teedataobject_type,
-        NULL
+        &teedataobject_type
     };
 
-    Py_TYPE(&teedataobject_type) = &PyType_Type;
-    m = PyModule_Create(&itertoolsmodule);
-    if (m == NULL)
-        return NULL;
+    Py_SET_TYPE(&teedataobject_type, &PyType_Type);
 
-    for (i=0 ; typelist[i] != NULL ; i++) {
-        if (PyType_Ready(typelist[i]) < 0)
-            return NULL;
-        name = _PyType_Name(typelist[i]);
-        Py_INCREF(typelist[i]);
-        PyModule_AddObject(m, name, (PyObject *)typelist[i]);
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(typelist); i++) {
+        if (PyModule_AddType(m, typelist[i]) < 0) {
+            return -1;
+        }
     }
 
-    return m;
+    return 0;
+}
+
+static struct PyModuleDef_Slot itertoolsmodule_slots[] = {
+    {Py_mod_exec, itertoolsmodule_exec},
+    {0, NULL}
+};
+
+static PyMethodDef module_methods[] = {
+    ITERTOOLS_TEE_METHODDEF
+    {NULL, NULL} /* sentinel */
+};
+
+
+static struct PyModuleDef itertoolsmodule = {
+    PyModuleDef_HEAD_INIT,
+    "itertools",
+    module_doc,
+    0,
+    module_methods,
+    itertoolsmodule_slots,
+    NULL,
+    NULL,
+    NULL
+};
+
+PyMODINIT_FUNC
+PyInit_itertools(void)
+{
+    return PyModuleDef_Init(&itertoolsmodule);
 }
diff --git a/Modules/main.c b/Modules/main.c
index 70be4cf..2cc891f 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -1,25 +1,22 @@
 /* Python interpreter main program */
 
 #include "Python.h"
-#include "pycore_initconfig.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-
-#ifdef __FreeBSD__
-#  include <fenv.h>     /* fedisableexcept() */
-#endif
+#include "pycore_initconfig.h"    // _PyArgv
+#include "pycore_interp.h"        // _PyInterpreterState.sysdict
+#include "pycore_pathconfig.h"    // _PyPathConfig_ComputeSysPath0()
+#include "pycore_pylifecycle.h"   // _Py_PreInitializeFromPyArgv()
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
 
 /* Includes for exit_sigint() */
-#include <stdio.h>      /* perror() */
+#include <stdio.h>                // perror()
 #ifdef HAVE_SIGNAL_H
-#  include <signal.h>   /* SIGINT */
+#  include <signal.h>             // SIGINT
 #endif
 #if defined(HAVE_GETPID) && defined(HAVE_UNISTD_H)
-#  include <unistd.h>   /* getpid() */
+#  include <unistd.h>             // getpid()
 #endif
 #ifdef MS_WINDOWS
-#  include <windows.h>  /* STATUS_CONTROL_C_EXIT */
+#  include <windows.h>            // STATUS_CONTROL_C_EXIT
 #endif
 /* End of includes for exit_sigint() */
 
@@ -43,15 +40,6 @@
         return status;
     }
 
-    /* 754 requires that FP exceptions run in "no stop" mode by default,
-     * and until C vendors implement C99's ways to control FP exceptions,
-     * Python requires non-stop mode.  Alas, some platforms enable FP
-     * exceptions by default.  Here we disable them.
-     */
-#ifdef __FreeBSD__
-    fedisableexcept(FE_OVERFLOW);
-#endif
-
     PyPreConfig preconfig;
     PyPreConfig_InitPythonConfig(&preconfig);
 
@@ -290,7 +278,7 @@
         Py_DECREF(runmodule);
         return pymain_exit_err_print();
     }
-    runargs = Py_BuildValue("(Oi)", module, set_argv0);
+    runargs = PyTuple_Pack(2, module, set_argv0 ? Py_True : Py_False);
     if (runargs == NULL) {
         fprintf(stderr,
             "Could not create arguments for runpy._run_module_as_main\n");
@@ -299,7 +287,11 @@
         Py_DECREF(module);
         return pymain_exit_err_print();
     }
+    _Py_UnhandledKeyboardInterrupt = 0;
     result = PyObject_Call(runmodule, runargs, NULL);
+    if (!result && PyErr_Occurred() == PyExc_KeyboardInterrupt) {
+        _Py_UnhandledKeyboardInterrupt = 1;
+    }
     Py_DECREF(runpy);
     Py_DECREF(runmodule);
     Py_DECREF(module);
@@ -313,7 +305,7 @@
 
 
 static int
-pymain_run_file(PyConfig *config, PyCompilerFlags *cf)
+pymain_run_file(const PyConfig *config, PyCompilerFlags *cf)
 {
     const wchar_t *filename = config->run_filename;
     if (PySys_Audit("cpython.run_file", "u", filename) < 0) {
@@ -550,9 +542,9 @@
 static void
 pymain_run_python(int *exitcode)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     /* pymain_run_stdin() modify the config */
-    PyConfig *config = &interp->config;
+    PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(interp);
 
     PyObject *main_importer_path = NULL;
     if (config->run_filename != NULL) {
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index b78fced..4aa7e65 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -53,6 +53,7 @@
  */
 
 #include "Python.h"
+#include "pycore_dtoa.h"
 #include "_math.h"
 
 #include "clinic/mathmodule.c.h"
@@ -646,7 +647,7 @@
            Warning: some subtlety here. What we *want* to know at this point is
            whether the remainder m is less than, equal to, or greater than half
            of absy. However, we can't do that comparison directly because we
-           can't be sure that 0.5*absy is representable (the mutiplication
+           can't be sure that 0.5*absy is representable (the multiplication
            might incur precision loss due to underflow). So instead we compare
            m with the complement c = absy - m: m < 0.5*absy if and only if m <
            c, and so on. The catch is that absy - m might also not be
@@ -825,36 +826,124 @@
 }
 
 
-/*[clinic input]
-math.gcd
-
-    x as a: object
-    y as b: object
-    /
-
-greatest common divisor of x and y
-[clinic start generated code]*/
-
 static PyObject *
-math_gcd_impl(PyObject *module, PyObject *a, PyObject *b)
-/*[clinic end generated code: output=7b2e0c151bd7a5d8 input=c2691e57fb2a98fa]*/
+math_gcd(PyObject *module, PyObject * const *args, Py_ssize_t nargs)
 {
-    PyObject *g;
+    PyObject *res, *x;
+    Py_ssize_t i;
 
-    a = PyNumber_Index(a);
-    if (a == NULL)
-        return NULL;
-    b = PyNumber_Index(b);
-    if (b == NULL) {
-        Py_DECREF(a);
+    if (nargs == 0) {
+        return PyLong_FromLong(0);
+    }
+    res = PyNumber_Index(args[0]);
+    if (res == NULL) {
         return NULL;
     }
-    g = _PyLong_GCD(a, b);
-    Py_DECREF(a);
-    Py_DECREF(b);
-    return g;
+    if (nargs == 1) {
+        Py_SETREF(res, PyNumber_Absolute(res));
+        return res;
+    }
+    for (i = 1; i < nargs; i++) {
+        x = PyNumber_Index(args[i]);
+        if (x == NULL) {
+            Py_DECREF(res);
+            return NULL;
+        }
+        if (res == _PyLong_One) {
+            /* Fast path: just check arguments.
+               It is okay to use identity comparison here. */
+            Py_DECREF(x);
+            continue;
+        }
+        Py_SETREF(res, _PyLong_GCD(res, x));
+        Py_DECREF(x);
+        if (res == NULL) {
+            return NULL;
+        }
+    }
+    return res;
 }
 
+PyDoc_STRVAR(math_gcd_doc,
+"gcd($module, *integers)\n"
+"--\n"
+"\n"
+"Greatest Common Divisor.");
+
+
+static PyObject *
+long_lcm(PyObject *a, PyObject *b)
+{
+    PyObject *g, *m, *f, *ab;
+
+    if (Py_SIZE(a) == 0 || Py_SIZE(b) == 0) {
+        return PyLong_FromLong(0);
+    }
+    g = _PyLong_GCD(a, b);
+    if (g == NULL) {
+        return NULL;
+    }
+    f = PyNumber_FloorDivide(a, g);
+    Py_DECREF(g);
+    if (f == NULL) {
+        return NULL;
+    }
+    m = PyNumber_Multiply(f, b);
+    Py_DECREF(f);
+    if (m == NULL) {
+        return NULL;
+    }
+    ab = PyNumber_Absolute(m);
+    Py_DECREF(m);
+    return ab;
+}
+
+
+static PyObject *
+math_lcm(PyObject *module, PyObject * const *args, Py_ssize_t nargs)
+{
+    PyObject *res, *x;
+    Py_ssize_t i;
+
+    if (nargs == 0) {
+        return PyLong_FromLong(1);
+    }
+    res = PyNumber_Index(args[0]);
+    if (res == NULL) {
+        return NULL;
+    }
+    if (nargs == 1) {
+        Py_SETREF(res, PyNumber_Absolute(res));
+        return res;
+    }
+    for (i = 1; i < nargs; i++) {
+        x = PyNumber_Index(args[i]);
+        if (x == NULL) {
+            Py_DECREF(res);
+            return NULL;
+        }
+        if (res == _PyLong_Zero) {
+            /* Fast path: just check arguments.
+               It is okay to use identity comparison here. */
+            Py_DECREF(x);
+            continue;
+        }
+        Py_SETREF(res, long_lcm(res, x));
+        Py_DECREF(x);
+        if (res == NULL) {
+            return NULL;
+        }
+    }
+    return res;
+}
+
+
+PyDoc_STRVAR(math_lcm_doc,
+"lcm($module, *integers)\n"
+"--\n"
+"\n"
+"Least Common Multiple.");
+
 
 /* Call is_error when errno != 0, and where x is the result libm
  * returned.  is_error will usually set up an exception and return
@@ -936,9 +1025,7 @@
     if (x == -1.0 && PyErr_Occurred())
         return NULL;
     errno = 0;
-    PyFPE_START_PROTECT("in math_1", return 0);
     r = (*func)(x);
-    PyFPE_END_PROTECT(r);
     if (Py_IS_NAN(r) && !Py_IS_NAN(x)) {
         PyErr_SetString(PyExc_ValueError,
                         "math domain error"); /* invalid arg */
@@ -972,9 +1059,7 @@
     if (x == -1.0 && PyErr_Occurred())
         return NULL;
     errno = 0;
-    PyFPE_START_PROTECT("in math_1a", return 0);
     r = (*func)(x);
-    PyFPE_END_PROTECT(r);
     if (errno && is_error(r))
         return NULL;
     return PyFloat_FromDouble(r);
@@ -1014,12 +1099,6 @@
 }
 
 static PyObject *
-math_1_to_int(PyObject *arg, double (*func) (double), int can_overflow)
-{
-    return math_1_to_whatever(arg, func, PyLong_FromDouble, can_overflow);
-}
-
-static PyObject *
 math_2(PyObject *const *args, Py_ssize_t nargs,
        double (*func) (double, double), const char *funcname)
 {
@@ -1035,9 +1114,7 @@
         return NULL;
     }
     errno = 0;
-    PyFPE_START_PROTECT("in math_2", return 0);
     r = (*func)(x, y);
-    PyFPE_END_PROTECT(r);
     if (Py_IS_NAN(r)) {
         if (!Py_IS_NAN(x) && !Py_IS_NAN(y))
             errno = EDOM;
@@ -1076,19 +1153,22 @@
 
 FUNC1(acos, acos, 0,
       "acos($module, x, /)\n--\n\n"
-      "Return the arc cosine (measured in radians) of x.")
+      "Return the arc cosine (measured in radians) of x.\n\n"
+      "The result is between 0 and pi.")
 FUNC1(acosh, m_acosh, 0,
       "acosh($module, x, /)\n--\n\n"
       "Return the inverse hyperbolic cosine of x.")
 FUNC1(asin, asin, 0,
       "asin($module, x, /)\n--\n\n"
-      "Return the arc sine (measured in radians) of x.")
+      "Return the arc sine (measured in radians) of x.\n\n"
+      "The result is between -pi/2 and pi/2.")
 FUNC1(asinh, m_asinh, 0,
       "asinh($module, x, /)\n--\n\n"
       "Return the inverse hyperbolic sine of x.")
 FUNC1(atan, atan, 0,
       "atan($module, x, /)\n--\n\n"
-      "Return the arc tangent (measured in radians) of x.")
+      "Return the arc tangent (measured in radians) of x.\n\n"
+      "The result is between -pi/2 and pi/2.")
 FUNC2(atan2, m_atan2,
       "atan2($module, y, x, /)\n--\n\n"
       "Return the arc tangent (measured in radians) of y/x.\n\n"
@@ -1113,17 +1193,22 @@
 /*[clinic end generated code: output=6c3b8a78bc201c67 input=2725352806399cab]*/
 {
     _Py_IDENTIFIER(__ceil__);
-    PyObject *method, *result;
 
-    method = _PyObject_LookupSpecial(number, &PyId___ceil__);
-    if (method == NULL) {
+    if (!PyFloat_CheckExact(number)) {
+        PyObject *method = _PyObject_LookupSpecial(number, &PyId___ceil__);
+        if (method != NULL) {
+            PyObject *result = _PyObject_CallNoArg(method);
+            Py_DECREF(method);
+            return result;
+        }
         if (PyErr_Occurred())
             return NULL;
-        return math_1_to_int(number, ceil, 0);
     }
-    result = _PyObject_CallNoArg(method);
-    Py_DECREF(method);
-    return result;
+    double x = PyFloat_AsDouble(number);
+    if (x == -1.0 && PyErr_Occurred())
+        return NULL;
+
+    return PyLong_FromDouble(ceil(x));
 }
 
 FUNC2(copysign, copysign,
@@ -1170,18 +1255,28 @@
 math_floor(PyObject *module, PyObject *number)
 /*[clinic end generated code: output=c6a65c4884884b8a input=63af6b5d7ebcc3d6]*/
 {
-    _Py_IDENTIFIER(__floor__);
-    PyObject *method, *result;
+    double x;
 
-    method = _PyObject_LookupSpecial(number, &PyId___floor__);
-    if (method == NULL) {
+    _Py_IDENTIFIER(__floor__);
+
+    if (PyFloat_CheckExact(number)) {
+        x = PyFloat_AS_DOUBLE(number);
+    }
+    else
+    {
+        PyObject *method = _PyObject_LookupSpecial(number, &PyId___floor__);
+        if (method != NULL) {
+            PyObject *result = _PyObject_CallNoArg(method);
+            Py_DECREF(method);
+            return result;
+        }
         if (PyErr_Occurred())
             return NULL;
-        return math_1_to_int(number, floor, 0);
+        x = PyFloat_AsDouble(number);
+        if (x == -1.0 && PyErr_Occurred())
+            return NULL;
     }
-    result = _PyObject_CallNoArg(method);
-    Py_DECREF(method);
-    return result;
+    return PyLong_FromDouble(floor(x));
 }
 
 FUNC1A(gamma, m_tgamma,
@@ -1337,8 +1432,6 @@
     if (iter == NULL)
         return NULL;
 
-    PyFPE_START_PROTECT("fsum", Py_DECREF(iter); return NULL)
-
     for(;;) {           /* for x in iterable */
         assert(0 <= n && n <= m);
         assert((m == NUM_PARTIALS && p == ps) ||
@@ -1433,7 +1526,6 @@
     sum = PyFloat_FromDouble(hi);
 
   _fsum_error:
-    PyFPE_END_PROTECT(hi)
     Py_DECREF(iter);
     if (p != ps)
         PyMem_Free(p);
@@ -1447,28 +1539,6 @@
 #undef NUM_PARTIALS
 
 
-/* Return the smallest integer k such that n < 2**k, or 0 if n == 0.
- * Equivalent to floor(lg(x))+1.  Also equivalent to: bitwidth_of_type -
- * count_leading_zero_bits(x)
- */
-
-/* XXX: This routine does more or less the same thing as
- * bits_in_digit() in Objects/longobject.c.  Someday it would be nice to
- * consolidate them.  On BSD, there's a library function called fls()
- * that we could use, and GCC provides __builtin_clz().
- */
-
-static unsigned long
-bit_length(unsigned long n)
-{
-    unsigned long len = 0;
-    while (n != 0) {
-        ++len;
-        n >>= 1;
-    }
-    return len;
-}
-
 static unsigned long
 count_set_bits(unsigned long n)
 {
@@ -1883,7 +1953,7 @@
     /* find midpoint of range(start, stop), rounded up to next odd number. */
     midpoint = (start + num_operands) | 1;
     left = factorial_partial_product(start, midpoint,
-                                     bit_length(midpoint - 2));
+                                     _Py_bit_length(midpoint - 2));
     if (left == NULL)
         goto error;
     right = factorial_partial_product(midpoint, stop, max_bits);
@@ -1913,7 +1983,7 @@
     Py_INCREF(outer);
 
     upper = 3;
-    for (i = bit_length(n) - 2; i >= 0; i--) {
+    for (i = _Py_bit_length(n) - 2; i >= 0; i--) {
         v = n >> i;
         if (v <= 2)
             continue;
@@ -1923,7 +1993,7 @@
         /* Here inner is the product of all odd integers j in the range (0,
            n/2**(i+1)].  The factorial_partial_product call below gives the
            product of all odd integers j in the range (n/2**(i+1), n/2**i]. */
-        partial = factorial_partial_product(lower, upper, bit_length(upper-2));
+        partial = factorial_partial_product(lower, upper, _Py_bit_length(upper-2));
         /* inner *= partial */
         if (partial == NULL)
             goto error;
@@ -1985,6 +2055,12 @@
     PyObject *result, *odd_part, *pyint_form;
 
     if (PyFloat_Check(arg)) {
+        if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                         "Using factorial() with floats is deprecated",
+                         1) < 0)
+        {
+            return NULL;
+        }
         PyObject *lx;
         double dx = PyFloat_AS_DOUBLE((PyFloatObject *)arg);
         if (!(Py_IS_FINITE(dx) && dx == floor(dx))) {
@@ -2056,6 +2132,10 @@
     _Py_IDENTIFIER(__trunc__);
     PyObject *trunc, *result;
 
+    if (PyFloat_CheckExact(x)) {
+        return PyFloat_Type.tp_as_number->nb_int(x);
+    }
+
     if (Py_TYPE(x)->tp_dict == NULL) {
         if (PyType_Ready(Py_TYPE(x)) < 0)
             return NULL;
@@ -2098,9 +2178,7 @@
         i = 0;
     }
     else {
-        PyFPE_START_PROTECT("in math_frexp", return 0);
         x = frexp(x, &i);
-        PyFPE_END_PROTECT(x);
     }
     return Py_BuildValue("(di)", x, i);
 }
@@ -2155,9 +2233,7 @@
         errno = 0;
     } else {
         errno = 0;
-        PyFPE_START_PROTECT("in math_ldexp", return 0);
         r = ldexp(x, (int)exp);
-        PyFPE_END_PROTECT(r);
         if (Py_IS_INFINITY(r))
             errno = ERANGE;
     }
@@ -2194,9 +2270,7 @@
     }
 
     errno = 0;
-    PyFPE_START_PROTECT("in math_modf", return 0);
     x = modf(x, &y);
-    PyFPE_END_PROTECT(x);
     return Py_BuildValue("(dd)", x, y);
 }
 
@@ -2343,9 +2417,7 @@
     if (Py_IS_INFINITY(y) && Py_IS_FINITE(x))
         return PyFloat_FromDouble(x);
     errno = 0;
-    PyFPE_START_PROTECT("in math_fmod", return 0);
     r = fmod(x, y);
-    PyFPE_END_PROTECT(r);
     if (Py_IS_NAN(r)) {
         if (!Py_IS_NAN(x) && !Py_IS_NAN(y))
             errno = EDOM;
@@ -2633,9 +2705,7 @@
     else {
         /* let libm handle finite**finite */
         errno = 0;
-        PyFPE_START_PROTECT("in math_pow", return 0);
         r = pow(x, y);
-        PyFPE_END_PROTECT(r);
         /* a NaN result should arise only from (-ve)**(finite
            non-integer); in this case we want to raise ValueError. */
         if (!Py_IS_FINITE(r)) {
@@ -3301,6 +3371,85 @@
 }
 
 
+/*[clinic input]
+math.nextafter
+
+    x: double
+    y: double
+    /
+
+Return the next floating-point value after x towards y.
+[clinic start generated code]*/
+
+static PyObject *
+math_nextafter_impl(PyObject *module, double x, double y)
+/*[clinic end generated code: output=750c8266c1c540ce input=02b2d50cd1d9f9b6]*/
+{
+#if defined(_AIX)
+    if (x == y) {
+        /* On AIX 7.1, libm nextafter(-0.0, +0.0) returns -0.0.
+           Bug fixed in bos.adt.libm 7.2.2.0 by APAR IV95512. */
+        return PyFloat_FromDouble(y);
+    }
+#endif
+    return PyFloat_FromDouble(nextafter(x, y));
+}
+
+
+/*[clinic input]
+math.ulp -> double
+
+    x: double
+    /
+
+Return the value of the least significant bit of the float x.
+[clinic start generated code]*/
+
+static double
+math_ulp_impl(PyObject *module, double x)
+/*[clinic end generated code: output=f5207867a9384dd4 input=31f9bfbbe373fcaa]*/
+{
+    if (Py_IS_NAN(x)) {
+        return x;
+    }
+    x = fabs(x);
+    if (Py_IS_INFINITY(x)) {
+        return x;
+    }
+    double inf = m_inf();
+    double x2 = nextafter(x, inf);
+    if (Py_IS_INFINITY(x2)) {
+        /* special case: x is the largest positive representable float */
+        x2 = nextafter(x, -inf);
+        return x - x2;
+    }
+    return x2 - x;
+}
+
+static int
+math_exec(PyObject *module)
+{
+    if (PyModule_AddObject(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) {
+        return -1;
+    }
+    if (PyModule_AddObject(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) {
+        return -1;
+    }
+    // 2pi
+    if (PyModule_AddObject(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) {
+        return -1;
+    }
+    if (PyModule_AddObject(module, "inf", PyFloat_FromDouble(m_inf())) < 0) {
+        return -1;
+    }
+#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN)
+    if (PyModule_AddObject(module, "nan", PyFloat_FromDouble(m_nan())) < 0) {
+        return -1;
+    }
+#endif
+    return 0;
+}
+
 static PyMethodDef math_methods[] = {
     {"acos",            math_acos,      METH_O,         math_acos_doc},
     {"acosh",           math_acosh,     METH_O,         math_acosh_doc},
@@ -3326,13 +3475,14 @@
     MATH_FREXP_METHODDEF
     MATH_FSUM_METHODDEF
     {"gamma",           math_gamma,     METH_O,         math_gamma_doc},
-    MATH_GCD_METHODDEF
+    {"gcd",             (PyCFunction)(void(*)(void))math_gcd,       METH_FASTCALL,  math_gcd_doc},
     {"hypot",           (PyCFunction)(void(*)(void))math_hypot,     METH_FASTCALL,  math_hypot_doc},
     MATH_ISCLOSE_METHODDEF
     MATH_ISFINITE_METHODDEF
     MATH_ISINF_METHODDEF
     MATH_ISNAN_METHODDEF
     MATH_ISQRT_METHODDEF
+    {"lcm",             (PyCFunction)(void(*)(void))math_lcm,       METH_FASTCALL,  math_lcm_doc},
     MATH_LDEXP_METHODDEF
     {"lgamma",          math_lgamma,    METH_O,         math_lgamma_doc},
     MATH_LOG_METHODDEF
@@ -3352,44 +3502,31 @@
     MATH_PROD_METHODDEF
     MATH_PERM_METHODDEF
     MATH_COMB_METHODDEF
+    MATH_NEXTAFTER_METHODDEF
+    MATH_ULP_METHODDEF
     {NULL,              NULL}           /* sentinel */
 };
 
+static PyModuleDef_Slot math_slots[] = {
+    {Py_mod_exec, math_exec},
+    {0, NULL}
+};
 
 PyDoc_STRVAR(module_doc,
 "This module provides access to the mathematical functions\n"
 "defined by the C standard.");
 
-
 static struct PyModuleDef mathmodule = {
     PyModuleDef_HEAD_INIT,
-    "math",
-    module_doc,
-    -1,
-    math_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    .m_name = "math",
+    .m_doc = module_doc,
+    .m_size = 0,
+    .m_methods = math_methods,
+    .m_slots = math_slots,
 };
 
 PyMODINIT_FUNC
 PyInit_math(void)
 {
-    PyObject *m;
-
-    m = PyModule_Create(&mathmodule);
-    if (m == NULL)
-        goto finally;
-
-    PyModule_AddObject(m, "pi", PyFloat_FromDouble(Py_MATH_PI));
-    PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E));
-    PyModule_AddObject(m, "tau", PyFloat_FromDouble(Py_MATH_TAU));  /* 2pi */
-    PyModule_AddObject(m, "inf", PyFloat_FromDouble(m_inf()));
-#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN)
-    PyModule_AddObject(m, "nan", PyFloat_FromDouble(m_nan()));
-#endif
-
-  finally:
-    return m;
+    return PyModuleDef_Init(&mathmodule);
 }
diff --git a/Modules/md5module.c b/Modules/md5module.c
index c2ebaaf..e4d9db4 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -503,13 +503,15 @@
 _md5.md5
 
     string: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new MD5 hash object; optionally initialized with a string.
 [clinic start generated code]*/
 
 static PyObject *
-_md5_md5_impl(PyObject *module, PyObject *string)
-/*[clinic end generated code: output=2cfd0f8c091b97e6 input=d12ef8f72d684f7b]*/
+_md5_md5_impl(PyObject *module, PyObject *string, int usedforsecurity)
+/*[clinic end generated code: output=587071f76254a4ac input=7a144a1905636985]*/
 {
     MD5object *new;
     Py_buffer buf;
@@ -550,9 +552,6 @@
 
 /* Initialize this module. */
 
-#define insint(n,v) { PyModule_AddIntConstant(m,n,v); }
-
-
 static struct PyModuleDef _md5module = {
         PyModuleDef_HEAD_INIT,
         "_md5",
@@ -570,13 +569,15 @@
 {
     PyObject *m;
 
-    Py_TYPE(&MD5type) = &PyType_Type;
-    if (PyType_Ready(&MD5type) < 0)
+    Py_SET_TYPE(&MD5type, &PyType_Type);
+    if (PyType_Ready(&MD5type) < 0) {
         return NULL;
+    }
 
     m = PyModule_Create(&_md5module);
-    if (m == NULL)
+    if (m == NULL) {
         return NULL;
+    }
 
     Py_INCREF((PyObject *)&MD5type);
     PyModule_AddObject(m, "MD5Type", (PyObject *)&MD5type);
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 1875886..a3e22d0 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -20,7 +20,7 @@
 
 #define PY_SSIZE_T_CLEAN
 #include <Python.h>
-#include "structmember.h"
+#include <stddef.h>               // offsetof()
 
 #ifndef MS_WINDOWS
 #define UNIX
@@ -97,7 +97,7 @@
 #else
     off_t       offset;
 #endif
-    int     exports;
+    Py_ssize_t  exports;
 
 #ifdef MS_WINDOWS
     HANDLE      map_handle;
@@ -692,7 +692,52 @@
 {
     _Py_IDENTIFIER(close);
 
-    return _PyObject_CallMethodId(self, &PyId_close, NULL);
+    return _PyObject_CallMethodIdNoArgs(self, &PyId_close);
+}
+
+static PyObject *
+mmap__repr__method(PyObject *self)
+{
+    mmap_object *mobj = (mmap_object *)self;
+
+#ifdef MS_WINDOWS
+#define _Py_FORMAT_OFFSET "lld"
+    if (mobj->map_handle == NULL)
+#elif defined(UNIX)
+# ifdef HAVE_LARGEFILE_SUPPORT
+# define _Py_FORMAT_OFFSET "lld"
+# else
+# define _Py_FORMAT_OFFSET "ld"
+# endif
+    if (mobj->data == NULL)
+#endif
+    {
+        return PyUnicode_FromFormat("<%s closed=True>", Py_TYPE(self)->tp_name);
+    } else {
+        const char *access_str;
+
+        switch (mobj->access) {
+            case ACCESS_DEFAULT:
+                access_str = "ACCESS_DEFAULT";
+                break;
+            case ACCESS_READ:
+                access_str = "ACCESS_READ";
+                break;
+            case ACCESS_WRITE:
+                access_str = "ACCESS_WRITE";
+                break;
+            case ACCESS_COPY:
+                access_str = "ACCESS_COPY";
+                break;
+            default:
+                Py_UNREACHABLE();
+        }
+
+        return PyUnicode_FromFormat("<%s closed=False, access=%s, length=%zd, "
+                                    "pos=%zd, offset=%" _Py_FORMAT_OFFSET ">",
+                                    Py_TYPE(self)->tp_name, access_str,
+                                    mobj->size, mobj->pos, mobj->offset);
+    }
 }
 
 #ifdef MS_WINDOWS
@@ -1044,23 +1089,23 @@
     sizeof(mmap_object),                        /* tp_basicsize */
     0,                                          /* tp_itemsize */
     /* methods */
-    (destructor) mmap_object_dealloc,           /* tp_dealloc */
+    (destructor)mmap_object_dealloc,            /* tp_dealloc */
     0,                                          /* tp_vectorcall_offset */
     0,                                          /* tp_getattr */
     0,                                          /* tp_setattr */
     0,                                          /* tp_as_async */
-    0,                                          /* tp_repr */
+    (reprfunc)mmap__repr__method,               /* tp_repr */
     0,                                          /* tp_as_number */
-    &mmap_as_sequence,                          /*tp_as_sequence*/
-    &mmap_as_mapping,                           /*tp_as_mapping*/
-    0,                                          /*tp_hash*/
-    0,                                          /*tp_call*/
-    0,                                          /*tp_str*/
-    PyObject_GenericGetAttr,                    /*tp_getattro*/
-    0,                                          /*tp_setattro*/
-    &mmap_as_buffer,                            /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /*tp_flags*/
-    mmap_doc,                                   /*tp_doc*/
+    &mmap_as_sequence,                          /* tp_as_sequence */
+    &mmap_as_mapping,                           /* tp_as_mapping */
+    0,                                          /* tp_hash */
+    0,                                          /* tp_call */
+    0,                                          /* tp_str */
+    PyObject_GenericGetAttr,                    /* tp_getattro */
+    0,                                          /* tp_setattro */
+    &mmap_as_buffer,                            /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    mmap_doc,                                   /* tp_doc */
     0,                                          /* tp_traverse */
     0,                                          /* tp_clear */
     0,                                          /* tp_richcompare */
diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
index f7712d9..2a1ac10 100644
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -14,14 +14,12 @@
  * (c) 2002 Gregory P. Ward.  All Rights Reserved.
  * (c) 2002 Python Software Foundation.  All Rights Reserved.
  *
- * XXX need a license statement
- *
  * $Id$
  */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
@@ -539,7 +537,7 @@
 {
     _Py_IDENTIFIER(close);
 
-    PyObject *ret = _PyObject_CallMethodId(self, &PyId_close, NULL);
+    PyObject *ret = _PyObject_CallMethodIdNoArgs(self, &PyId_close);
     if (!ret)
         return NULL;
     Py_DECREF(ret);
diff --git a/Modules/overlapped.c b/Modules/overlapped.c
index 27aac70..cd7869f 100644
--- a/Modules/overlapped.c
+++ b/Modules/overlapped.c
@@ -8,7 +8,7 @@
    Check itemsize */
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #define WINDOWS_LEAN_AND_MEAN
 #include <winsock2.h>
@@ -1856,12 +1856,10 @@
     if (initialize_function_pointers() < 0)
         return NULL;
 
-    if (PyType_Ready(&OverlappedType) < 0)
-        return NULL;
-
     m = PyModule_Create(&overlapped_module);
-    if (PyModule_AddObject(m, "Overlapped", (PyObject *)&OverlappedType) < 0)
+    if (PyModule_AddType(m, &OverlappedType) < 0) {
         return NULL;
+    }
 
     d = PyModule_GetDict(m);
 
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 079d00f..24b0ffb 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -256,7 +256,7 @@
 
 
 /* PyST_Type isn't subclassable, so just check ob_type */
-#define PyST_Object_Check(v) ((v)->ob_type == &PyST_Type)
+#define PyST_Object_Check(v) Py_IS_TYPE(v, &PyST_Type)
 
 static int
 parser_compare_nodes(node *left, node *right)
@@ -1080,25 +1080,20 @@
     NOTE(ARGUNUSED(self))
     PyObject *result = NULL;
     PyObject *st = NULL;
-    PyObject *empty_dict = NULL;
 
     if (PyArg_ParseTuple(args, "O!:_pickler", &PyST_Type, &st)) {
         PyObject *newargs;
         PyObject *tuple;
 
-        if ((empty_dict = PyDict_New()) == NULL)
-            goto finally;
-        if ((newargs = Py_BuildValue("Oi", st, 1)) == NULL)
-            goto finally;
-        tuple = parser_st2tuple((PyST_Object*)NULL, newargs, empty_dict);
+        if ((newargs = PyTuple_Pack(2, st, Py_True)) == NULL)
+            return NULL;
+        tuple = parser_st2tuple((PyST_Object*)NULL, newargs, NULL);
         if (tuple != NULL) {
             result = Py_BuildValue("O(O)", pickle_constructor, tuple);
             Py_DECREF(tuple);
         }
         Py_DECREF(newargs);
     }
-  finally:
-    Py_XDECREF(empty_dict);
 
     return (result);
 }
@@ -1158,6 +1153,12 @@
 {
     PyObject *module, *copyreg;
 
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+            "The parser module is deprecated and will be removed "
+            "in future versions of Python", 7) != 0) {
+        return NULL;
+    }
+
     if (PyType_Ready(&PyST_Type) < 0)
         return NULL;
     module = PyModule_Create(&parsermodule);
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index c90eac3..66179b7 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1,4 +1,3 @@
-
 /* POSIX module implementation */
 
 /* This file is also used for Windows NT/MS-Win.  In that case the
@@ -8,20 +7,6 @@
    of the compiler used.  Different compilers define their own feature
    test macro, e.g. '_MSC_VER'. */
 
-
-
-#ifdef __APPLE__
-   /*
-    * Step 1 of support for weak-linking a number of symbols existing on
-    * OSX 10.4 and later, see the comment in the #ifdef __APPLE__ block
-    * at the end of this file for more information.
-    */
-#  pragma weak lchown
-#  pragma weak statvfs
-#  pragma weak fstatvfs
-
-#endif /* __APPLE__ */
-
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
@@ -35,10 +20,10 @@
 #  include <windows.h>
 #endif
 
-#include "pycore_ceval.h"     /* _PyEval_ReInitThreads() */
-#include "pycore_pystate.h"   /* _PyRuntime */
-#include "pythread.h"
-#include "structmember.h"
+#include "pycore_ceval.h"         // _PyEval_ReInitThreads()
+#include "pycore_import.h"        // _PyImport_ReInitLock()
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "structmember.h"         // PyMemberDef
 #ifndef MS_WINDOWS
 #  include "posixmodule.h"
 #else
@@ -48,11 +33,132 @@
 /* On android API level 21, 'AT_EACCESS' is not declared although
  * HAVE_FACCESSAT is defined. */
 #ifdef __BIONIC__
-#undef HAVE_FACCESSAT
+#  undef HAVE_FACCESSAT
 #endif
 
 #include <stdio.h>  /* needed for ctermid() */
 
+/*
+ * A number of APIs are available on macOS from a certain macOS version.
+ * To support building with a new SDK while deploying to older versions
+ * the availability test is split into two:
+ *   - HAVE_<FUNCTION>:  The configure check for compile time availability
+ *   - HAVE_<FUNCTION>_RUNTIME: Runtime check for availability
+ *
+ * The latter is always true when not on macOS, or when using a compiler
+ * that does not support __has_builtin (older versions of Xcode).
+ *
+ * Due to compiler restrictions there is one valid use of HAVE_<FUNCTION>_RUNTIME:
+ *    if (HAVE_<FUNCTION>_RUNTIME) { ... }
+ *
+ * In mixing the test with other tests or using negations will result in compile
+ * errors.
+ */
+#if defined(__APPLE__)
+
+#if defined(__has_builtin) && __has_builtin(__builtin_available)
+#  define HAVE_FSTATAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_FACCESSAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_FCHMODAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_FCHOWNAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_LINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_FDOPENDIR_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_MKDIRAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_RENAMEAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_UNLINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_OPENAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_READLINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_SYMLINKAT_RUNTIME __builtin_available(macOS 10.10, iOS 8.0, *)
+#  define HAVE_FUTIMENS_RUNTIME __builtin_available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)
+#  define HAVE_UTIMENSAT_RUNTIME __builtin_available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)
+#  define HAVE_PWRITEV_RUNTIME __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)
+
+#  define HAVE_POSIX_SPAWN_SETSID_RUNTIME __builtin_available(macOS 10.15, *)
+
+#else /* Xcode 8 or earlier */
+
+   /* __builtin_available is not present in these compilers, but
+    * some of the symbols might be weak linked (10.10 SDK or later
+    * deploying on 10.9.
+    *
+    * Fall back to the older style of availability checking for
+    * symbols introduced in macOS 10.10.
+    */
+
+#  ifdef HAVE_FSTATAT
+#    define HAVE_FSTATAT_RUNTIME (fstatat != NULL)
+#  endif
+
+#  ifdef HAVE_FACCESSAT
+#    define HAVE_FACCESSAT_RUNTIME (faccessat != NULL)
+#  endif
+
+#  ifdef HAVE_FCHMODAT
+#    define HAVE_FCHMODAT_RUNTIME (fchmodat != NULL)
+#  endif
+
+#  ifdef HAVE_FCHOWNAT
+#    define HAVE_FCHOWNAT_RUNTIME (fchownat != NULL)
+#  endif
+
+#  ifdef HAVE_LINKAT
+#    define HAVE_LINKAT_RUNTIME (linkat != NULL)
+#  endif
+
+#  ifdef HAVE_FDOPENDIR
+#    define HAVE_FDOPENDIR_RUNTIME (fdopendir != NULL)
+#  endif
+
+#  ifdef HAVE_MKDIRAT
+#    define HAVE_MKDIRAT_RUNTIME (mkdirat != NULL)
+#  endif
+
+#  ifdef HAVE_RENAMEAT
+#    define HAVE_RENAMEAT_RUNTIME (renameat != NULL)
+#  endif
+
+#  ifdef HAVE_UNLINKAT
+#    define HAVE_UNLINKAT_RUNTIME (unlinkat != NULL)
+#  endif
+
+#  ifdef HAVE_OPENAT
+#    define HAVE_OPENAT_RUNTIME (openat != NULL)
+#  endif
+
+#  ifdef HAVE_READLINKAT
+#    define HAVE_READLINKAT_RUNTIME (readlinkat != NULL)
+#  endif
+
+#  ifdef HAVE_SYMLINKAT
+#    define HAVE_SYMLINKAT_RUNTIME (symlinkat != NULL)
+#  endif
+
+#endif
+
+#ifdef HAVE_FUTIMESAT
+/* Some of the logic for weak linking depends on this assertion */
+# error "HAVE_FUTIMESAT unexpectedly defined"
+#endif
+
+#else
+#  define HAVE_FSTATAT_RUNTIME 1
+#  define HAVE_FACCESSAT_RUNTIME 1
+#  define HAVE_FCHMODAT_RUNTIME 1
+#  define HAVE_FCHOWNAT_RUNTIME 1
+#  define HAVE_LINKAT_RUNTIME 1
+#  define HAVE_FDOPENDIR_RUNTIME 1
+#  define HAVE_MKDIRAT_RUNTIME 1
+#  define HAVE_RENAMEAT_RUNTIME 1
+#  define HAVE_UNLINKAT_RUNTIME 1
+#  define HAVE_OPENAT_RUNTIME 1
+#  define HAVE_READLINKAT_RUNTIME 1
+#  define HAVE_SYMLINKAT_RUNTIME 1
+#  define HAVE_FUTIMENS_RUNTIME 1
+#  define HAVE_UTIMENSAT_RUNTIME 1
+#  define HAVE_PWRITEV_RUNTIME 1
+#endif
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -65,86 +171,89 @@
 
 
 #ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
+#  include <sys/uio.h>
 #endif
 
 #ifdef HAVE_SYS_SYSMACROS_H
 /* GNU C Library: major(), minor(), makedev() */
-#include <sys/sysmacros.h>
+#  include <sys/sysmacros.h>
 #endif
 
 #ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+#  include <sys/types.h>
 #endif /* HAVE_SYS_TYPES_H */
 
 #ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
+#  include <sys/stat.h>
 #endif /* HAVE_SYS_STAT_H */
 
 #ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>           /* For WNOHANG */
+#  include <sys/wait.h>           // WNOHANG
+#endif
+#ifdef HAVE_LINUX_WAIT_H
+#  include <linux/wait.h>         // P_PIDFD
 #endif
 
 #ifdef HAVE_SIGNAL_H
-#include <signal.h>
+#  include <signal.h>
 #endif
 
 #ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif /* HAVE_FCNTL_H */
+#  include <fcntl.h>
+#endif
 
 #ifdef HAVE_GRP_H
-#include <grp.h>
+#  include <grp.h>
 #endif
 
 #ifdef HAVE_SYSEXITS_H
-#include <sysexits.h>
-#endif /* HAVE_SYSEXITS_H */
+#  include <sysexits.h>
+#endif
 
 #ifdef HAVE_SYS_LOADAVG_H
-#include <sys/loadavg.h>
+#  include <sys/loadavg.h>
 #endif
 
 #ifdef HAVE_SYS_SENDFILE_H
-#include <sys/sendfile.h>
+#  include <sys/sendfile.h>
 #endif
 
 #if defined(__APPLE__)
-#include <copyfile.h>
+#  include <copyfile.h>
 #endif
 
 #ifdef HAVE_SCHED_H
-#include <sched.h>
+#  include <sched.h>
 #endif
 
 #ifdef HAVE_COPY_FILE_RANGE
-#include <unistd.h>
+#  include <unistd.h>
 #endif
 
 #if !defined(CPU_ALLOC) && defined(HAVE_SCHED_SETAFFINITY)
-#undef HAVE_SCHED_SETAFFINITY
+#  undef HAVE_SCHED_SETAFFINITY
 #endif
 
 #if defined(HAVE_SYS_XATTR_H) && defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__GNU__)
-#define USE_XATTRS
+#  define USE_XATTRS
 #endif
 
 #ifdef USE_XATTRS
-#include <sys/xattr.h>
+#  include <sys/xattr.h>
 #endif
 
 #if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
+#  ifdef HAVE_SYS_SOCKET_H
+#    include <sys/socket.h>
+#  endif
 #endif
 
 #ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
+#  include <dlfcn.h>
 #endif
 
 #ifdef __hpux
-#include <sys/mpctl.h>
+#  include <sys/mpctl.h>
 #endif
 
 #if defined(__DragonFly__) || \
@@ -152,7 +261,7 @@
     defined(__FreeBSD__)   || \
     defined(__NetBSD__)    || \
     defined(__APPLE__)
-#include <sys/sysctl.h>
+#  include <sys/sysctl.h>
 #endif
 
 #ifdef HAVE_LINUX_RANDOM_H
@@ -177,45 +286,47 @@
 /* Various compilers have only certain posix functions */
 /* XXX Gosh I wish these were all moved into pyconfig.h */
 #if defined(__WATCOMC__) && !defined(__QNX__)           /* Watcom compiler */
-#define HAVE_OPENDIR    1
-#define HAVE_SYSTEM     1
-#include <process.h>
+#  define HAVE_OPENDIR    1
+#  define HAVE_SYSTEM     1
+#  include <process.h>
 #else
-#ifdef _MSC_VER         /* Microsoft compiler */
-#define HAVE_GETPPID    1
-#define HAVE_GETLOGIN   1
-#define HAVE_SPAWNV     1
-#define HAVE_EXECV      1
-#define HAVE_WSPAWNV    1
-#define HAVE_WEXECV     1
-#define HAVE_PIPE       1
-#define HAVE_SYSTEM     1
-#define HAVE_CWAIT      1
-#define HAVE_FSYNC      1
-#define fsync _commit
-#else
-/* Unix functions that the configure script doesn't check for */
-#ifndef __VXWORKS__
-#define HAVE_EXECV      1
-#define HAVE_FORK       1
-#if defined(__USLC__) && defined(__SCO_VERSION__)       /* SCO UDK Compiler */
-#define HAVE_FORK1      1
-#endif
-#endif
-#define HAVE_GETEGID    1
-#define HAVE_GETEUID    1
-#define HAVE_GETGID     1
-#define HAVE_GETPPID    1
-#define HAVE_GETUID     1
-#define HAVE_KILL       1
-#define HAVE_OPENDIR    1
-#define HAVE_PIPE       1
-#define HAVE_SYSTEM     1
-#define HAVE_WAIT       1
-#define HAVE_TTYNAME    1
-#endif  /* _MSC_VER */
+#  ifdef _MSC_VER
+     /* Microsoft compiler */
+#    define HAVE_GETPPID    1
+#    define HAVE_GETLOGIN   1
+#    define HAVE_SPAWNV     1
+#    define HAVE_EXECV      1
+#    define HAVE_WSPAWNV    1
+#    define HAVE_WEXECV     1
+#    define HAVE_PIPE       1
+#    define HAVE_SYSTEM     1
+#    define HAVE_CWAIT      1
+#    define HAVE_FSYNC      1
+#    define fsync _commit
+#  else
+     /* Unix functions that the configure script doesn't check for */
+#    ifndef __VXWORKS__
+#      define HAVE_EXECV      1
+#      define HAVE_FORK       1
+#      if defined(__USLC__) && defined(__SCO_VERSION__)       /* SCO UDK Compiler */
+#        define HAVE_FORK1      1
+#      endif
+#    endif
+#    define HAVE_GETEGID    1
+#    define HAVE_GETEUID    1
+#    define HAVE_GETGID     1
+#    define HAVE_GETPPID    1
+#    define HAVE_GETUID     1
+#    define HAVE_KILL       1
+#    define HAVE_OPENDIR    1
+#    define HAVE_PIPE       1
+#    define HAVE_SYSTEM     1
+#    define HAVE_WAIT       1
+#    define HAVE_TTYNAME    1
+#  endif  /* _MSC_VER */
 #endif  /* ! __WATCOMC__ || __QNX__ */
 
+_Py_IDENTIFIER(__fspath__);
 
 /*[clinic input]
 # one of the few times we lie about this name!
@@ -234,123 +345,119 @@
 #endif /* !_MSC_VER */
 
 #if defined(__VXWORKS__)
-#include <vxCpuLib.h>
-#include <rtpLib.h>
-#include <wait.h>
-#include <taskLib.h>
-#ifndef _P_WAIT
-#define _P_WAIT          0
-#define _P_NOWAIT        1
-#define _P_NOWAITO       1
-#endif
+#  include <vxCpuLib.h>
+#  include <rtpLib.h>
+#  include <wait.h>
+#  include <taskLib.h>
+#  ifndef _P_WAIT
+#    define _P_WAIT          0
+#    define _P_NOWAIT        1
+#    define _P_NOWAITO       1
+#  endif
 #endif /* __VXWORKS__ */
 
 #ifdef HAVE_POSIX_SPAWN
-#include <spawn.h>
+#  include <spawn.h>
 #endif
 
 #ifdef HAVE_UTIME_H
-#include <utime.h>
+#  include <utime.h>
 #endif /* HAVE_UTIME_H */
 
 #ifdef HAVE_SYS_UTIME_H
-#include <sys/utime.h>
-#define HAVE_UTIME_H /* pretend we do for the rest of this file */
+#  include <sys/utime.h>
+#  define HAVE_UTIME_H /* pretend we do for the rest of this file */
 #endif /* HAVE_SYS_UTIME_H */
 
 #ifdef HAVE_SYS_TIMES_H
-#include <sys/times.h>
+#  include <sys/times.h>
 #endif /* HAVE_SYS_TIMES_H */
 
 #ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
+#  include <sys/param.h>
 #endif /* HAVE_SYS_PARAM_H */
 
 #ifdef HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
+#  include <sys/utsname.h>
 #endif /* HAVE_SYS_UTSNAME_H */
 
 #ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#define NAMLEN(dirent) strlen((dirent)->d_name)
+#  include <dirent.h>
+#  define NAMLEN(dirent) strlen((dirent)->d_name)
 #else
-#if defined(__WATCOMC__) && !defined(__QNX__)
-#include <direct.h>
-#define NAMLEN(dirent) strlen((dirent)->d_name)
-#else
-#define dirent direct
-#define NAMLEN(dirent) (dirent)->d_namlen
-#endif
-#ifdef HAVE_SYS_NDIR_H
-#include <sys/ndir.h>
-#endif
-#ifdef HAVE_SYS_DIR_H
-#include <sys/dir.h>
-#endif
-#ifdef HAVE_NDIR_H
-#include <ndir.h>
-#endif
+#  if defined(__WATCOMC__) && !defined(__QNX__)
+#    include <direct.h>
+#    define NAMLEN(dirent) strlen((dirent)->d_name)
+#  else
+#    define dirent direct
+#    define NAMLEN(dirent) (dirent)->d_namlen
+#  endif
+#  ifdef HAVE_SYS_NDIR_H
+#    include <sys/ndir.h>
+#  endif
+#  ifdef HAVE_SYS_DIR_H
+#    include <sys/dir.h>
+#  endif
+#  ifdef HAVE_NDIR_H
+#    include <ndir.h>
+#  endif
 #endif
 
 #ifdef _MSC_VER
-#ifdef HAVE_DIRECT_H
-#include <direct.h>
-#endif
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-#ifndef IO_REPARSE_TAG_SYMLINK
-#define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
-#endif
-#ifndef IO_REPARSE_TAG_MOUNT_POINT
-#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
-#endif
-#include "osdefs.h"
-#include <malloc.h>
-#include <windows.h>
-#include <shellapi.h>   /* for ShellExecute() */
-#include <lmcons.h>     /* for UNLEN */
-#define HAVE_SYMLINK
+#  ifdef HAVE_DIRECT_H
+#    include <direct.h>
+#  endif
+#  ifdef HAVE_IO_H
+#    include <io.h>
+#  endif
+#  ifdef HAVE_PROCESS_H
+#    include <process.h>
+#  endif
+#  ifndef IO_REPARSE_TAG_SYMLINK
+#    define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
+#  endif
+#  ifndef IO_REPARSE_TAG_MOUNT_POINT
+#    define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
+#  endif
+#  include "osdefs.h"             // SEP
+#  include <malloc.h>
+#  include <windows.h>
+#  include <shellapi.h>           // ShellExecute()
+#  include <lmcons.h>             // UNLEN
+#  define HAVE_SYMLINK
 #endif /* _MSC_VER */
 
 #ifndef MAXPATHLEN
-#if defined(PATH_MAX) && PATH_MAX > 1024
-#define MAXPATHLEN PATH_MAX
-#else
-#define MAXPATHLEN 1024
-#endif
+#  if defined(PATH_MAX) && PATH_MAX > 1024
+#    define MAXPATHLEN PATH_MAX
+#  else
+#    define MAXPATHLEN 1024
+#  endif
 #endif /* MAXPATHLEN */
 
 #ifdef UNION_WAIT
-/* Emulate some macros on systems that have a union instead of macros */
-
-#ifndef WIFEXITED
-#define WIFEXITED(u_wait) (!(u_wait).w_termsig && !(u_wait).w_coredump)
-#endif
-
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(u_wait) (WIFEXITED(u_wait)?((u_wait).w_retcode):-1)
-#endif
-
-#ifndef WTERMSIG
-#define WTERMSIG(u_wait) ((u_wait).w_termsig)
-#endif
-
-#define WAIT_TYPE union wait
-#define WAIT_STATUS_INT(s) (s.w_status)
-
-#else /* !UNION_WAIT */
-#define WAIT_TYPE int
-#define WAIT_STATUS_INT(s) (s)
+   /* Emulate some macros on systems that have a union instead of macros */
+#  ifndef WIFEXITED
+#    define WIFEXITED(u_wait) (!(u_wait).w_termsig && !(u_wait).w_coredump)
+#  endif
+#  ifndef WEXITSTATUS
+#    define WEXITSTATUS(u_wait) (WIFEXITED(u_wait)?((u_wait).w_retcode):-1)
+#  endif
+#  ifndef WTERMSIG
+#    define WTERMSIG(u_wait) ((u_wait).w_termsig)
+#  endif
+#  define WAIT_TYPE union wait
+#  define WAIT_STATUS_INT(s) (s.w_status)
+#else
+   /* !UNION_WAIT */
+#  define WAIT_TYPE int
+#  define WAIT_STATUS_INT(s) (s)
 #endif /* UNION_WAIT */
 
 /* Don't use the "_r" form if we don't need it (also, won't have a
    prototype for it, at least on Solaris -- maybe others as well?). */
 #if defined(HAVE_CTERMID_R)
-#define USE_CTERMID_R
+#  define USE_CTERMID_R
 #endif
 
 /* choose the appropriate stat and fstat functions and return structs */
@@ -358,56 +465,56 @@
 #undef FSTAT
 #undef STRUCT_STAT
 #ifdef MS_WINDOWS
-#       define STAT win32_stat
-#       define LSTAT win32_lstat
-#       define FSTAT _Py_fstat_noraise
-#       define STRUCT_STAT struct _Py_stat_struct
+#  define STAT win32_stat
+#  define LSTAT win32_lstat
+#  define FSTAT _Py_fstat_noraise
+#  define STRUCT_STAT struct _Py_stat_struct
 #else
-#       define STAT stat
-#       define LSTAT lstat
-#       define FSTAT fstat
-#       define STRUCT_STAT struct stat
+#  define STAT stat
+#  define LSTAT lstat
+#  define FSTAT fstat
+#  define STRUCT_STAT struct stat
 #endif
 
 #if defined(MAJOR_IN_MKDEV)
-#include <sys/mkdev.h>
+#  include <sys/mkdev.h>
 #else
-#if defined(MAJOR_IN_SYSMACROS)
-#include <sys/sysmacros.h>
-#endif
-#if defined(HAVE_MKNOD) && defined(HAVE_SYS_MKDEV_H)
-#include <sys/mkdev.h>
-#endif
+#  if defined(MAJOR_IN_SYSMACROS)
+#    include <sys/sysmacros.h>
+#  endif
+#  if defined(HAVE_MKNOD) && defined(HAVE_SYS_MKDEV_H)
+#    include <sys/mkdev.h>
+#  endif
 #endif
 
 #ifdef MS_WINDOWS
-#define INITFUNC PyInit_nt
-#define MODNAME "nt"
+#  define INITFUNC PyInit_nt
+#  define MODNAME "nt"
 #else
-#define INITFUNC PyInit_posix
-#define MODNAME "posix"
+#  define INITFUNC PyInit_posix
+#  define MODNAME "posix"
 #endif
 
 #if defined(__sun)
 /* Something to implement in autoconf, not present in autoconf 2.69 */
-#define HAVE_STRUCT_STAT_ST_FSTYPE 1
+#  define HAVE_STRUCT_STAT_ST_FSTYPE 1
 #endif
 
 /* memfd_create is either defined in sys/mman.h or sys/memfd.h
  * linux/memfd.h defines additional flags
  */
 #ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
+#  include <sys/mman.h>
 #endif
 #ifdef HAVE_SYS_MEMFD_H
-#include <sys/memfd.h>
+#  include <sys/memfd.h>
 #endif
 #ifdef HAVE_LINUX_MEMFD_H
-#include <linux/memfd.h>
+#  include <linux/memfd.h>
 #endif
 
 #ifdef _Py_MEMORY_SANITIZER
-# include <sanitizer/msan_interface.h>
+#  include <sanitizer/msan_interface.h>
 #endif
 
 #ifdef HAVE_FORK
@@ -432,7 +539,7 @@
             for (i = 0; i < PyList_GET_SIZE(cpy); i++) {
                 PyObject *func, *res;
                 func = PyList_GET_ITEM(cpy, i);
-                res = PyObject_CallObject(func, NULL);
+                res = _PyObject_CallNoArg(func);
                 if (res == NULL)
                     PyErr_WriteUnraisable(func);
                 else
@@ -446,7 +553,7 @@
 void
 PyOS_BeforeFork(void)
 {
-    run_at_forkers(_PyInterpreterState_Get()->before_forkers, 1);
+    run_at_forkers(_PyInterpreterState_GET()->before_forkers, 1);
 
     _PyImport_AcquireLock();
 }
@@ -457,7 +564,7 @@
     if (_PyImport_ReleaseLock() <= 0)
         Py_FatalError("failed releasing import lock after fork");
 
-    run_at_forkers(_PyInterpreterState_Get()->after_forkers_parent, 0);
+    run_at_forkers(_PyInterpreterState_GET()->after_forkers_parent, 0);
 }
 
 void
@@ -471,7 +578,7 @@
     _PyRuntimeState_ReInitThreads(runtime);
     _PyInterpreterState_DeleteExceptMain(runtime);
 
-    run_at_forkers(_PyInterpreterState_Get()->after_forkers_child, 0);
+    run_at_forkers(_PyInterpreterState_GET()->after_forkers_child, 0);
 }
 
 static int
@@ -486,7 +593,8 @@
     }
     return PyList_Append(*lst, func);
 }
-#endif
+#endif  /* HAVE_FORK */
+
 
 /* Legacy wrapper */
 void
@@ -536,7 +644,7 @@
     if (index == NULL) {
         PyErr_Format(PyExc_TypeError,
                      "uid should be integer, not %.200s",
-                     Py_TYPE(obj)->tp_name);
+                     _PyType_Name(Py_TYPE(obj)));
         return 0;
     }
 
@@ -642,7 +750,7 @@
     if (index == NULL) {
         PyErr_Format(PyExc_TypeError,
                      "gid should be integer, not %.200s",
-                     Py_TYPE(obj)->tp_name);
+                     _PyType_Name(Py_TYPE(obj)));
         return 0;
     }
 
@@ -809,11 +917,40 @@
     else {
         PyErr_Format(PyExc_TypeError,
                      "argument should be integer or None, not %.200s",
-                     Py_TYPE(o)->tp_name);
+                     _PyType_Name(Py_TYPE(o)));
         return 0;
     }
 }
 
+typedef struct {
+    PyObject *billion;
+    PyObject *DirEntryType;
+    PyObject *ScandirIteratorType;
+#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
+    PyObject *SchedParamType;
+#endif
+    PyObject *StatResultType;
+    PyObject *StatVFSResultType;
+    PyObject *TerminalSizeType;
+    PyObject *TimesResultType;
+    PyObject *UnameResultType;
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+    PyObject *WaitidResultType;
+#endif
+#if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
+    PyObject *struct_rusage;
+#endif
+    PyObject *st_mode;
+} _posixstate;
+
+
+static inline _posixstate*
+get_posix_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_posixstate *)state;
+}
 
 /*
  * A PyArg_ParseTuple "converter" function
@@ -983,7 +1120,6 @@
 
     if (!is_index && !is_buffer && !is_unicode && !is_bytes) {
         /* Inline PyOS_FSPath() for better error messages. */
-        _Py_IDENTIFIER(__fspath__);
         PyObject *func, *res;
 
         func = _PyObject_LookupSpecial(o, &PyId___fspath__);
@@ -1004,8 +1140,8 @@
         else {
             PyErr_Format(PyExc_TypeError,
                  "expected %.200s.__fspath__() to return str or bytes, "
-                 "not %.200s", Py_TYPE(o)->tp_name,
-                 Py_TYPE(res)->tp_name);
+                 "not %.200s", _PyType_Name(Py_TYPE(o)),
+                 _PyType_Name(Py_TYPE(res)));
             Py_DECREF(res);
             goto error_exit;
         }
@@ -1057,7 +1193,7 @@
             path->allow_fd ? "string, bytes, os.PathLike or integer" :
             path->nullable ? "string, bytes, os.PathLike or None" :
                              "string, bytes or os.PathLike",
-            Py_TYPE(o)->tp_name)) {
+            _PyType_Name(Py_TYPE(o)))) {
             goto error_exit;
         }
         bytes = PyBytes_FromObject(o);
@@ -1088,7 +1224,7 @@
             path->allow_fd ? "string, bytes, os.PathLike or integer" :
             path->nullable ? "string, bytes, os.PathLike or None" :
                              "string, bytes or os.PathLike",
-            Py_TYPE(o)->tp_name);
+            _PyType_Name(Py_TYPE(o)));
         goto error_exit;
     }
 
@@ -2046,14 +2182,6 @@
     waitid_result_fields,
     5
 };
-static PyTypeObject* WaitidResultType;
-#endif
-
-static int initialized;
-static PyTypeObject* StatResultType;
-static PyTypeObject* StatVFSResultType;
-#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
-static PyTypeObject* SchedParamType;
 #endif
 static newfunc structseq_new;
 
@@ -2079,11 +2207,64 @@
     return (PyObject*)result;
 }
 
+static int
+_posix_clear(PyObject *module)
+{
+    _posixstate *state = get_posix_state(module);
+    Py_CLEAR(state->billion);
+    Py_CLEAR(state->DirEntryType);
+    Py_CLEAR(state->ScandirIteratorType);
+#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
+    Py_CLEAR(state->SchedParamType);
+#endif
+    Py_CLEAR(state->StatResultType);
+    Py_CLEAR(state->StatVFSResultType);
+    Py_CLEAR(state->TerminalSizeType);
+    Py_CLEAR(state->TimesResultType);
+    Py_CLEAR(state->UnameResultType);
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+    Py_CLEAR(state->WaitidResultType);
+#endif
+#if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
+    Py_CLEAR(state->struct_rusage);
+#endif
+    Py_CLEAR(state->st_mode);
+    return 0;
+}
 
-static PyObject *billion = NULL;
+static int
+_posix_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    _posixstate *state = get_posix_state(module);
+    Py_VISIT(state->billion);
+    Py_VISIT(state->DirEntryType);
+    Py_VISIT(state->ScandirIteratorType);
+#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
+    Py_VISIT(state->SchedParamType);
+#endif
+    Py_VISIT(state->StatResultType);
+    Py_VISIT(state->StatVFSResultType);
+    Py_VISIT(state->TerminalSizeType);
+    Py_VISIT(state->TimesResultType);
+    Py_VISIT(state->UnameResultType);
+#if defined(HAVE_WAITID) && !defined(__APPLE__)
+    Py_VISIT(state->WaitidResultType);
+#endif
+#if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
+    Py_VISIT(state->struct_rusage);
+#endif
+    Py_VISIT(state->st_mode);
+    return 0;
+}
 
 static void
-fill_time(PyObject *v, int index, time_t sec, unsigned long nsec)
+_posix_free(void *module)
+{
+   _posix_clear((PyObject *)module);
+}
+
+static void
+fill_time(PyObject *module, PyObject *v, int index, time_t sec, unsigned long nsec)
 {
     PyObject *s = _PyLong_FromTime_t(sec);
     PyObject *ns_fractional = PyLong_FromUnsignedLong(nsec);
@@ -2094,7 +2275,7 @@
     if (!(s && ns_fractional))
         goto exit;
 
-    s_in_ns = PyNumber_Multiply(s, billion);
+    s_in_ns = PyNumber_Multiply(s, get_posix_state(module)->billion);
     if (!s_in_ns)
         goto exit;
 
@@ -2124,10 +2305,11 @@
 /* pack a system stat C structure into the Python stat tuple
    (used by posix_stat() and posix_fstat()) */
 static PyObject*
-_pystat_fromstructstat(STRUCT_STAT *st)
+_pystat_fromstructstat(PyObject *module, STRUCT_STAT *st)
 {
     unsigned long ansec, mnsec, cnsec;
-    PyObject *v = PyStructSequence_New(StatResultType);
+    PyObject *StatResultType = get_posix_state(module)->StatResultType;
+    PyObject *v = PyStructSequence_New((PyTypeObject *)StatResultType);
     if (v == NULL)
         return NULL;
 
@@ -2165,9 +2347,9 @@
 #else
     ansec = mnsec = cnsec = 0;
 #endif
-    fill_time(v, 7, st->st_atime, ansec);
-    fill_time(v, 8, st->st_mtime, mnsec);
-    fill_time(v, 9, st->st_ctime, cnsec);
+    fill_time(module, v, 7, st->st_atime, ansec);
+    fill_time(module, v, 8, st->st_mtime, mnsec);
+    fill_time(module, v, 9, st->st_ctime, cnsec);
 
 #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
     PyStructSequence_SET_ITEM(v, ST_BLKSIZE_IDX,
@@ -2229,12 +2411,16 @@
 
 
 static PyObject *
-posix_do_stat(const char *function_name, path_t *path,
+posix_do_stat(PyObject *module, const char *function_name, path_t *path,
               int dir_fd, int follow_symlinks)
 {
     STRUCT_STAT st;
     int result;
 
+#ifdef HAVE_FSTATAT
+    int fstatat_unavailable = 0;
+#endif
+
 #if !defined(MS_WINDOWS) && !defined(HAVE_FSTATAT) && !defined(HAVE_LSTAT)
     if (follow_symlinks_specified(function_name, follow_symlinks))
         return NULL;
@@ -2261,20 +2447,32 @@
     else
 #endif /* HAVE_LSTAT */
 #ifdef HAVE_FSTATAT
-    if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks)
-        result = fstatat(dir_fd, path->narrow, &st,
+    if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) {
+        if (HAVE_FSTATAT_RUNTIME) {
+            result = fstatat(dir_fd, path->narrow, &st,
                          follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-    else
+
+        } else {
+            fstatat_unavailable = 1;
+        }
+    } else
 #endif /* HAVE_FSTATAT */
         result = STAT(path->narrow, &st);
 #endif /* MS_WINDOWS */
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_FSTATAT
+    if (fstatat_unavailable) {
+        argument_unavailable_error("stat", "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result != 0) {
         return path_error(path);
     }
 
-    return _pystat_fromstructstat(&st);
+    return _pystat_fromstructstat(module, &st);
 }
 
 /*[python input]
@@ -2569,13 +2767,8 @@
 class sysconf_confname_converter(path_confname_converter):
     converter="conv_sysconf_confname"
 
-class sched_param_converter(CConverter):
-    type = 'struct sched_param'
-    converter = 'convert_sched_param'
-    impl_by_reference = True;
-
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=418fce0e01144461]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=f1c8ae8d744f6c8b]*/
 
 /*[clinic input]
 
@@ -2612,7 +2805,7 @@
 os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks)
 /*[clinic end generated code: output=7d4976e6f18a59c5 input=01d362ebcc06996b]*/
 {
-    return posix_do_stat("stat", path, dir_fd, follow_symlinks);
+    return posix_do_stat(module, "stat", path, dir_fd, follow_symlinks);
 }
 
 
@@ -2636,7 +2829,7 @@
 /*[clinic end generated code: output=ef82a5d35ce8ab37 input=0b7474765927b925]*/
 {
     int follow_symlinks = 0;
-    return posix_do_stat("lstat", path, dir_fd, follow_symlinks);
+    return posix_do_stat(module, "lstat", path, dir_fd, follow_symlinks);
 }
 
 
@@ -2692,6 +2885,10 @@
     int result;
 #endif
 
+#ifdef HAVE_FACCESSAT
+    int faccessat_unavailable = 0;
+#endif
+
 #ifndef HAVE_FACCESSAT
     if (follow_symlinks_specified("access", follow_symlinks))
         return -1;
@@ -2726,17 +2923,40 @@
     if ((dir_fd != DEFAULT_DIR_FD) ||
         effective_ids ||
         !follow_symlinks) {
-        int flags = 0;
-        if (!follow_symlinks)
-            flags |= AT_SYMLINK_NOFOLLOW;
-        if (effective_ids)
-            flags |= AT_EACCESS;
-        result = faccessat(dir_fd, path->narrow, mode, flags);
+
+        if (HAVE_FACCESSAT_RUNTIME) {
+            int flags = 0;
+            if (!follow_symlinks)
+                flags |= AT_SYMLINK_NOFOLLOW;
+            if (effective_ids)
+                flags |= AT_EACCESS;
+            result = faccessat(dir_fd, path->narrow, mode, flags);
+        } else {
+            faccessat_unavailable = 1;
+        }
     }
     else
 #endif
         result = access(path->narrow, mode);
     Py_END_ALLOW_THREADS
+
+#ifdef HAVE_FACCESSAT
+    if (faccessat_unavailable) {
+        if (dir_fd != DEFAULT_DIR_FD) {
+            argument_unavailable_error("access", "dir_fd");
+            return -1;
+        }
+        if (follow_symlinks_specified("access", follow_symlinks))
+            return -1;
+
+        if (effective_ids) {
+            argument_unavailable_error("access", "effective_ids");
+            return -1;
+        }
+        /* should be unreachable */
+        return -1;
+    }
+#endif
     return_value = !result;
 #endif
 
@@ -2773,13 +2993,24 @@
 os_ttyname_impl(PyObject *module, int fd)
 /*[clinic end generated code: output=c424d2e9d1cd636a input=9ff5a58b08115c55]*/
 {
-    char *ret;
 
-    ret = ttyname(fd);
-    if (ret == NULL) {
+    long size = sysconf(_SC_TTY_NAME_MAX);
+    if (size == -1) {
         return posix_error();
     }
-    return PyUnicode_DecodeFSDefault(ret);
+    char *buffer = (char *)PyMem_RawMalloc(size);
+    if (buffer == NULL) {
+        return PyErr_NoMemory();
+    }
+    int ret = ttyname_r(fd, buffer, size);
+    if (ret != 0) {
+        PyMem_RawFree(buffer);
+        errno = ret;
+        return posix_error();
+    }
+    PyObject *res = PyUnicode_DecodeFSDefault(buffer);
+    PyMem_RawFree(buffer);
+    return res;
 }
 #endif
 
@@ -2923,6 +3154,7 @@
 
 #ifdef HAVE_FCHMODAT
     int fchmodat_nofollow_unsupported = 0;
+    int fchmodat_unsupported = 0;
 #endif
 
 #if !(defined(HAVE_FCHMODAT) || defined(HAVE_LCHMOD))
@@ -2958,42 +3190,56 @@
     if (path->fd != -1)
         result = fchmod(path->fd, mode);
     else
-#endif
+#endif /* HAVE_CHMOD */
 #ifdef HAVE_LCHMOD
     if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
         result = lchmod(path->narrow, mode);
     else
-#endif
+#endif /* HAVE_LCHMOD */
 #ifdef HAVE_FCHMODAT
     if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) {
-        /*
-         * fchmodat() doesn't currently support AT_SYMLINK_NOFOLLOW!
-         * The documentation specifically shows how to use it,
-         * and then says it isn't implemented yet.
-         * (true on linux with glibc 2.15, and openindiana 3.x)
-         *
-         * Once it is supported, os.chmod will automatically
-         * support dir_fd and follow_symlinks=False.  (Hopefully.)
-         * Until then, we need to be careful what exception we raise.
-         */
-        result = fchmodat(dir_fd, path->narrow, mode,
-                          follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-        /*
-         * But wait!  We can't throw the exception without allowing threads,
-         * and we can't do that in this nested scope.  (Macro trickery, sigh.)
-         */
-        fchmodat_nofollow_unsupported =
-                         result &&
-                         ((errno == ENOTSUP) || (errno == EOPNOTSUPP)) &&
-                         !follow_symlinks;
+        if (HAVE_FCHMODAT_RUNTIME) {
+            /*
+             * fchmodat() doesn't currently support AT_SYMLINK_NOFOLLOW!
+             * The documentation specifically shows how to use it,
+             * and then says it isn't implemented yet.
+             * (true on linux with glibc 2.15, and openindiana 3.x)
+             *
+             * Once it is supported, os.chmod will automatically
+             * support dir_fd and follow_symlinks=False.  (Hopefully.)
+             * Until then, we need to be careful what exception we raise.
+             */
+            result = fchmodat(dir_fd, path->narrow, mode,
+                              follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
+            /*
+             * But wait!  We can't throw the exception without allowing threads,
+             * and we can't do that in this nested scope.  (Macro trickery, sigh.)
+             */
+            fchmodat_nofollow_unsupported =
+                             result &&
+                             ((errno == ENOTSUP) || (errno == EOPNOTSUPP)) &&
+                             !follow_symlinks;
+        } else {
+            fchmodat_unsupported = 1;
+            fchmodat_nofollow_unsupported = 1;
+
+            result = -1;
+        }
     }
     else
-#endif
+#endif /* HAVE_FHCMODAT */
         result = chmod(path->narrow, mode);
     Py_END_ALLOW_THREADS
 
     if (result) {
 #ifdef HAVE_FCHMODAT
+        if (fchmodat_unsupported) {
+            if (dir_fd != DEFAULT_DIR_FD) {
+                argument_unavailable_error("chmod", "dir_fd");
+                return NULL;
+            }
+        }
+
         if (fchmodat_nofollow_unsupported) {
             if (dir_fd != DEFAULT_DIR_FD)
                 dir_fd_and_follow_symlinks_invalid("chmod",
@@ -3003,10 +3249,10 @@
             return NULL;
         }
         else
-#endif
+#endif /* HAVE_FCHMODAT */
         return path_error(path);
     }
-#endif
+#endif /* MS_WINDOWS */
 
     Py_RETURN_NONE;
 }
@@ -3294,6 +3540,10 @@
 {
     int result;
 
+#if defined(HAVE_FCHOWNAT)
+    int fchownat_unsupported = 0;
+#endif
+
 #if !(defined(HAVE_LCHOWN) || defined(HAVE_FCHOWNAT))
     if (follow_symlinks_specified("chown", follow_symlinks))
         return NULL;
@@ -3302,19 +3552,6 @@
         fd_and_follow_symlinks_invalid("chown", path->fd, follow_symlinks))
         return NULL;
 
-#ifdef __APPLE__
-    /*
-     * This is for Mac OS X 10.3, which doesn't have lchown.
-     * (But we still have an lchown symbol because of weak-linking.)
-     * It doesn't have fchownat either.  So there's no possibility
-     * of a graceful failover.
-     */
-    if ((!follow_symlinks) && (lchown == NULL)) {
-        follow_symlinks_specified("chown", follow_symlinks);
-        return NULL;
-    }
-#endif
-
     if (PySys_Audit("os.chown", "OIIi", path->object, uid, gid,
                     dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
         return NULL;
@@ -3332,14 +3569,28 @@
     else
 #endif
 #ifdef HAVE_FCHOWNAT
-    if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks))
+    if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) {
+      if (HAVE_FCHOWNAT_RUNTIME) {
         result = fchownat(dir_fd, path->narrow, uid, gid,
                           follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-    else
+      } else {
+         fchownat_unsupported = 1;
+      }
+    } else
 #endif
         result = chown(path->narrow, uid, gid);
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_FCHOWNAT
+    if (fchownat_unsupported) {
+        /* This would be incorrect if the current platform
+         * doesn't support lchown.
+         */
+        argument_unavailable_error(NULL, "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result)
         return path_error(path);
 
@@ -3585,6 +3836,9 @@
 #else
     int result;
 #endif
+#if defined(HAVE_LINKAT)
+    int linkat_unavailable = 0;
+#endif
 
 #ifndef HAVE_LINKAT
     if ((src_dir_fd != DEFAULT_DIR_FD) || (dst_dir_fd != DEFAULT_DIR_FD)) {
@@ -3619,15 +3873,43 @@
 #ifdef HAVE_LINKAT
     if ((src_dir_fd != DEFAULT_DIR_FD) ||
         (dst_dir_fd != DEFAULT_DIR_FD) ||
-        (!follow_symlinks))
-        result = linkat(src_dir_fd, src->narrow,
-            dst_dir_fd, dst->narrow,
-            follow_symlinks ? AT_SYMLINK_FOLLOW : 0);
+        (!follow_symlinks)) {
+
+        if (HAVE_LINKAT_RUNTIME) {
+
+            result = linkat(src_dir_fd, src->narrow,
+                dst_dir_fd, dst->narrow,
+                follow_symlinks ? AT_SYMLINK_FOLLOW : 0);
+
+        }
+#ifdef __APPLE__
+        else {
+            if (src_dir_fd == DEFAULT_DIR_FD && dst_dir_fd == DEFAULT_DIR_FD) {
+                /* See issue 41355: This matches the behaviour of !HAVE_LINKAT */
+                result = link(src->narrow, dst->narrow);
+            } else {
+                linkat_unavailable = 1;
+            }
+        }
+#endif
+    }
     else
 #endif /* HAVE_LINKAT */
         result = link(src->narrow, dst->narrow);
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_LINKAT
+    if (linkat_unavailable) {
+        /* Either or both dir_fd arguments were specified */
+        if (src_dir_fd  != DEFAULT_DIR_FD) {
+            argument_unavailable_error("link", "src_dir_fd");
+        } else {
+            argument_unavailable_error("link", "dst_dir_fd");
+        }
+        return NULL;
+    }
+#endif
+
     if (result)
         return path_error2(src, dst);
 #endif /* MS_WINDOWS */
@@ -3750,6 +4032,7 @@
     errno = 0;
 #ifdef HAVE_FDOPENDIR
     if (path->fd != -1) {
+      if (HAVE_FDOPENDIR_RUNTIME) {
         /* closedir() closes the FD, so we duplicate it */
         fd = _Py_dup(path->fd);
         if (fd == -1)
@@ -3760,6 +4043,11 @@
         Py_BEGIN_ALLOW_THREADS
         dirp = fdopendir(fd);
         Py_END_ALLOW_THREADS
+      } else {
+        PyErr_SetString(PyExc_TypeError,
+            "listdir: path should be string, bytes, os.PathLike or None, not int");
+        return NULL;
+      }
     }
     else
 #endif
@@ -3894,29 +4182,25 @@
 os__getfullpathname_impl(PyObject *module, path_t *path)
 /*[clinic end generated code: output=bb8679d56845bc9b input=332ed537c29d0a3e]*/
 {
-    wchar_t woutbuf[MAX_PATH], *woutbufp = woutbuf;
-    wchar_t *wtemp;
-    DWORD result;
-    PyObject *v;
+    wchar_t *abspath;
 
-    result = GetFullPathNameW(path->wide,
-                              Py_ARRAY_LENGTH(woutbuf),
-                              woutbuf, &wtemp);
-    if (result > Py_ARRAY_LENGTH(woutbuf)) {
-        woutbufp = PyMem_New(wchar_t, result);
-        if (!woutbufp)
-            return PyErr_NoMemory();
-        result = GetFullPathNameW(path->wide, result, woutbufp, &wtemp);
+    /* _Py_abspath() is implemented with GetFullPathNameW() on Windows */
+    if (_Py_abspath(path->wide, &abspath) < 0) {
+        return win32_error_object("GetFullPathNameW", path->object);
     }
-    if (result) {
-        v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp));
-        if (path->narrow)
-            Py_SETREF(v, PyUnicode_EncodeFSDefault(v));
-    } else
-        v = win32_error_object("GetFullPathNameW", path->object);
-    if (woutbufp != woutbuf)
-        PyMem_Free(woutbufp);
-    return v;
+    if (abspath == NULL) {
+        return PyErr_NoMemory();
+    }
+
+    PyObject *str = PyUnicode_FromWideChar(abspath, wcslen(abspath));
+    PyMem_RawFree(abspath);
+    if (str == NULL) {
+        return NULL;
+    }
+    if (path->narrow) {
+        Py_SETREF(str, PyUnicode_EncodeFSDefault(str));
+    }
+    return str;
 }
 
 
@@ -4077,6 +4361,9 @@
 /*[clinic end generated code: output=a70446903abe821f input=e965f68377e9b1ce]*/
 {
     int result;
+#ifdef HAVE_MKDIRAT
+    int mkdirat_unavailable = 0;
+#endif
 
     if (PySys_Audit("os.mkdir", "Oii", path->object, mode,
                     dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
@@ -4093,9 +4380,14 @@
 #else
     Py_BEGIN_ALLOW_THREADS
 #if HAVE_MKDIRAT
-    if (dir_fd != DEFAULT_DIR_FD)
+    if (dir_fd != DEFAULT_DIR_FD) {
+      if (HAVE_MKDIRAT_RUNTIME) {
         result = mkdirat(dir_fd, path->narrow, mode);
-    else
+
+      } else {
+        mkdirat_unavailable = 1;
+      }
+    } else
 #endif
 #if defined(__WATCOMC__) && !defined(__QNX__)
         result = mkdir(path->narrow);
@@ -4103,6 +4395,14 @@
         result = mkdir(path->narrow, mode);
 #endif
     Py_END_ALLOW_THREADS
+
+#if HAVE_MKDIRAT
+    if (mkdirat_unavailable) {
+        argument_unavailable_error(NULL, "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result < 0)
         return path_error(path);
 #endif /* MS_WINDOWS */
@@ -4212,6 +4512,10 @@
     const char *function_name = is_replace ? "replace" : "rename";
     int dir_fd_specified;
 
+#ifdef HAVE_RENAMEAT
+    int renameat_unavailable = 0;
+#endif
+
 #ifdef MS_WINDOWS
     BOOL result;
     int flags = is_replace ? MOVEFILE_REPLACE_EXISTING : 0;
@@ -4251,13 +4555,25 @@
 
     Py_BEGIN_ALLOW_THREADS
 #ifdef HAVE_RENAMEAT
-    if (dir_fd_specified)
-        result = renameat(src_dir_fd, src->narrow, dst_dir_fd, dst->narrow);
-    else
+    if (dir_fd_specified) {
+        if (HAVE_RENAMEAT_RUNTIME) {
+            result = renameat(src_dir_fd, src->narrow, dst_dir_fd, dst->narrow);
+        } else {
+            renameat_unavailable = 1;
+        }
+    } else
 #endif
     result = rename(src->narrow, dst->narrow);
     Py_END_ALLOW_THREADS
 
+
+#ifdef HAVE_RENAMEAT
+    if (renameat_unavailable) {
+        argument_unavailable_error(function_name, "src_dir_fd and dst_dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result)
         return path_error2(src, dst);
 #endif
@@ -4333,6 +4649,9 @@
 /*[clinic end generated code: output=080eb54f506e8301 input=38c8b375ca34a7e2]*/
 {
     int result;
+#ifdef HAVE_UNLINKAT
+    int unlinkat_unavailable = 0;
+#endif
 
     if (PySys_Audit("os.rmdir", "Oi", path->object,
                     dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
@@ -4345,14 +4664,26 @@
     result = !RemoveDirectoryW(path->wide);
 #else
 #ifdef HAVE_UNLINKAT
-    if (dir_fd != DEFAULT_DIR_FD)
+    if (dir_fd != DEFAULT_DIR_FD) {
+      if (HAVE_UNLINKAT_RUNTIME) {
         result = unlinkat(dir_fd, path->narrow, AT_REMOVEDIR);
-    else
+      } else {
+        unlinkat_unavailable = 1;
+        result = -1;
+      }
+    } else
 #endif
         result = rmdir(path->narrow);
 #endif
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_UNLINKAT
+    if (unlinkat_unavailable) {
+        argument_unavailable_error("rmdir", "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result)
         return path_error(path);
 
@@ -4496,6 +4827,9 @@
 /*[clinic end generated code: output=621797807b9963b1 input=d7bcde2b1b2a2552]*/
 {
     int result;
+#ifdef HAVE_UNLINKAT
+    int unlinkat_unavailable = 0;
+#endif
 
     if (PySys_Audit("os.remove", "Oi", path->object,
                     dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
@@ -4509,15 +4843,27 @@
     result = !Py_DeleteFileW(path->wide);
 #else
 #ifdef HAVE_UNLINKAT
-    if (dir_fd != DEFAULT_DIR_FD)
+    if (dir_fd != DEFAULT_DIR_FD) {
+      if (HAVE_UNLINKAT_RUNTIME) {
+
         result = unlinkat(dir_fd, path->narrow, 0);
-    else
+      } else {
+        unlinkat_unavailable = 1;
+      }
+    } else
 #endif /* HAVE_UNLINKAT */
         result = unlink(path->narrow);
 #endif
     _Py_END_SUPPRESS_IPH
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_UNLINKAT
+    if (unlinkat_unavailable) {
+        argument_unavailable_error(NULL, "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result)
         return path_error(path);
 
@@ -4562,15 +4908,12 @@
 See os.uname for more information.");
 
 static PyStructSequence_Desc uname_result_desc = {
-    "uname_result", /* name */
+    MODNAME ".uname_result", /* name */
     uname_result__doc__, /* doc */
     uname_result_fields,
     5
 };
 
-static PyTypeObject* UnameResultType;
-
-
 #ifdef HAVE_UNAME
 /*[clinic input]
 os.uname
@@ -4596,7 +4939,8 @@
     if (res < 0)
         return posix_error();
 
-    value = PyStructSequence_New(UnameResultType);
+    PyObject *UnameResultType = get_posix_state(module)->UnameResultType;
+    value = PyStructSequence_New((PyTypeObject *)UnameResultType);
     if (value == NULL)
         return NULL;
 
@@ -4690,7 +5034,16 @@
 static int
 utime_dir_fd(utime_t *ut, int dir_fd, const char *path, int follow_symlinks)
 {
-#ifdef HAVE_UTIMENSAT
+#if defined(__APPLE__) &&  defined(HAVE_UTIMENSAT)
+    if (HAVE_UTIMENSAT_RUNTIME) {
+        int flags = follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW;
+        UTIME_TO_TIMESPEC;
+        return utimensat(dir_fd, path, time, flags);
+    }  else {
+        errno = ENOSYS;
+        return -1;
+    }
+#elif defined(HAVE_UTIMENSAT)
     int flags = follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW;
     UTIME_TO_TIMESPEC;
     return utimensat(dir_fd, path, time, flags);
@@ -4717,11 +5070,30 @@
 utime_fd(utime_t *ut, int fd)
 {
 #ifdef HAVE_FUTIMENS
+
+    if (HAVE_FUTIMENS_RUNTIME) {
+
     UTIME_TO_TIMESPEC;
     return futimens(fd, time);
-#else
+
+    } else
+#ifndef HAVE_FUTIMES
+    {
+        /* Not sure if this can happen */
+        PyErr_SetString(
+            PyExc_RuntimeError,
+            "neither futimens nor futimes are supported"
+            " on this system");
+        return -1;
+    }
+#endif
+
+#endif
+#ifdef HAVE_FUTIMES
+    {
     UTIME_TO_TIMEVAL;
     return futimes(fd, time);
+    }
 #endif
 }
 
@@ -4740,11 +5112,27 @@
 utime_nofollow_symlinks(utime_t *ut, const char *path)
 {
 #ifdef HAVE_UTIMENSAT
-    UTIME_TO_TIMESPEC;
-    return utimensat(DEFAULT_DIR_FD, path, time, AT_SYMLINK_NOFOLLOW);
-#else
+    if (HAVE_UTIMENSAT_RUNTIME) {
+        UTIME_TO_TIMESPEC;
+        return utimensat(DEFAULT_DIR_FD, path, time, AT_SYMLINK_NOFOLLOW);
+    } else
+#ifndef HAVE_LUTIMES
+    {
+        /* Not sure if this can happen */
+        PyErr_SetString(
+            PyExc_RuntimeError,
+            "neither utimensat nor lutimes are supported"
+            " on this system");
+        return -1;
+    }
+#endif
+#endif
+
+#ifdef HAVE_LUTIMES
+    {
     UTIME_TO_TIMEVAL;
     return lutimes(path, time);
+    }
 #endif
 }
 
@@ -4755,7 +5143,15 @@
 static int
 utime_default(utime_t *ut, const char *path)
 {
-#ifdef HAVE_UTIMENSAT
+#if defined(__APPLE__) && defined(HAVE_UTIMENSAT)
+    if (HAVE_UTIMENSAT_RUNTIME) {
+        UTIME_TO_TIMESPEC;
+        return utimensat(DEFAULT_DIR_FD, path, time, 0);
+    } else {
+        UTIME_TO_TIMEVAL;
+        return utimes(path, time);
+    }
+#elif defined(HAVE_UTIMENSAT)
     UTIME_TO_TIMESPEC;
     return utimensat(DEFAULT_DIR_FD, path, time, 0);
 #elif defined(HAVE_UTIMES)
@@ -4773,17 +5169,17 @@
 #endif
 
 static int
-split_py_long_to_s_and_ns(PyObject *py_long, time_t *s, long *ns)
+split_py_long_to_s_and_ns(PyObject *module, PyObject *py_long, time_t *s, long *ns)
 {
     int result = 0;
     PyObject *divmod;
-    divmod = PyNumber_Divmod(py_long, billion);
+    divmod = PyNumber_Divmod(py_long, get_posix_state(module)->billion);
     if (!divmod)
         goto exit;
     if (!PyTuple_Check(divmod) || PyTuple_GET_SIZE(divmod) != 2) {
         PyErr_Format(PyExc_TypeError,
                      "%.200s.__divmod__() must return a 2-tuple, not %.200s",
-                     Py_TYPE(py_long)->tp_name, Py_TYPE(divmod)->tp_name);
+                     _PyType_Name(Py_TYPE(py_long)), _PyType_Name(Py_TYPE(divmod)));
         goto exit;
     }
     *s = _PyLong_AsTime_t(PyTuple_GET_ITEM(divmod, 0));
@@ -4889,9 +5285,9 @@
             return NULL;
         }
         utime.now = 0;
-        if (!split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 0),
+        if (!split_py_long_to_s_and_ns(module, PyTuple_GET_ITEM(ns, 0),
                                       &utime.atime_s, &utime.atime_ns) ||
-            !split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 1),
+            !split_py_long_to_s_and_ns(module, PyTuple_GET_ITEM(ns, 1),
                                        &utime.mtime_s, &utime.mtime_ns)) {
             return NULL;
         }
@@ -4964,9 +5360,10 @@
 #endif
 
 #if defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMENSAT)
-    if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks))
+    if ((dir_fd != DEFAULT_DIR_FD) || (!follow_symlinks)) {
         result = utime_dir_fd(&utime, dir_fd, path->narrow, follow_symlinks);
-    else
+
+    } else
 #endif
 
 #if defined(HAVE_FUTIMES) || defined(HAVE_FUTIMENS)
@@ -4979,6 +5376,14 @@
 
     Py_END_ALLOW_THREADS
 
+#if defined(__APPLE__) && defined(HAVE_UTIMENSAT)
+    /* See utime_dir_fd implementation */
+    if (result == -1 && errno == ENOSYS) {
+        argument_unavailable_error(NULL, "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (result < 0) {
         /* see previous comment about not putting filename in error here */
         posix_error();
@@ -5342,11 +5747,11 @@
 
 #if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
 static int
-convert_sched_param(PyObject *param, struct sched_param *res);
+convert_sched_param(PyObject *module, PyObject *param, struct sched_param *res);
 #endif
 
 static int
-parse_posix_spawn_flags(const char *func_name, PyObject *setpgroup,
+parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpgroup,
                         int resetids, int setsid, PyObject *setsigmask,
                         PyObject *setsigdef, PyObject *scheduler,
                         posix_spawnattr_t *attrp)
@@ -5377,6 +5782,9 @@
     }
 
     if (setsid) {
+#ifdef HAVE_POSIX_SPAWN_SETSID_RUNTIME
+        if (HAVE_POSIX_SPAWN_SETSID_RUNTIME) {
+#endif
 #ifdef POSIX_SPAWN_SETSID
         all_flags |= POSIX_SPAWN_SETSID;
 #elif defined(POSIX_SPAWN_SETSID_NP)
@@ -5385,6 +5793,14 @@
         argument_unavailable_error(func_name, "setsid");
         return -1;
 #endif
+
+#ifdef HAVE_POSIX_SPAWN_SETSID_RUNTIME
+        } else {
+            argument_unavailable_error(func_name, "setsid");
+            return -1;
+        }
+#endif /* HAVE_POSIX_SPAWN_SETSID_RUNTIME */
+
     }
 
    if (setsigmask) {
@@ -5416,11 +5832,15 @@
     if (scheduler) {
 #ifdef POSIX_SPAWN_SETSCHEDULER
         PyObject *py_schedpolicy;
+        PyObject *schedparam_obj;
         struct sched_param schedparam;
 
-        if (!PyArg_ParseTuple(scheduler, "OO&"
+        if (!PyArg_ParseTuple(scheduler, "OO"
                         ";A scheduler tuple must have two elements",
-                        &py_schedpolicy, convert_sched_param, &schedparam)) {
+                        &py_schedpolicy, &schedparam_obj)) {
+            goto fail;
+        }
+        if (!convert_sched_param(module, schedparam_obj, &schedparam)) {
             goto fail;
         }
         if (py_schedpolicy != Py_None) {
@@ -5649,7 +6069,7 @@
         file_actionsp = &file_actions_buf;
     }
 
-    if (parse_posix_spawn_flags(func_name, setpgroup, resetids, setsid,
+    if (parse_posix_spawn_flags(module, func_name, setpgroup, resetids, setsid,
                                 setsigmask, setsigdef, scheduler, &attr)) {
         goto exit;
     }
@@ -6059,7 +6479,7 @@
 {
     if (obj && !PyCallable_Check(obj)) {
         PyErr_Format(PyExc_TypeError, "'%s' must be callable, not %s",
-                     obj_name, Py_TYPE(obj)->tp_name);
+                     obj_name, _PyType_Name(Py_TYPE(obj)));
         return -1;
     }
     return 0;
@@ -6099,7 +6519,7 @@
         check_null_or_callable(after_in_parent, "after_in_parent")) {
         return NULL;
     }
-    interp = _PyInterpreterState_Get();
+    interp = _PyInterpreterState_GET();
 
     if (register_at_forker(&interp->before_forkers, before)) {
         return NULL;
@@ -6130,7 +6550,7 @@
 {
     pid_t pid;
 
-    if (_PyInterpreterState_Get() != PyInterpreterState_Main()) {
+    if (_PyInterpreterState_GET() != PyInterpreterState_Main()) {
         PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters");
         return NULL;
     }
@@ -6164,9 +6584,10 @@
 /*[clinic end generated code: output=3626c81f98985d49 input=13c956413110eeaa]*/
 {
     pid_t pid;
-
-    if (_PyInterpreterState_Get() != PyInterpreterState_Main()) {
-        PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters");
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    if (interp->config._isolated_interpreter) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "fork not supported for isolated subinterpreters");
         return NULL;
     }
     if (PySys_Audit("os.fork", NULL) < 0) {
@@ -6237,14 +6658,14 @@
     pid: pid_t
     /
 
-Get the scheduling policy for the process identifiedy by pid.
+Get the scheduling policy for the process identified by pid.
 
 Passing 0 for pid returns the scheduling policy for the calling process.
 [clinic start generated code]*/
 
 static PyObject *
 os_sched_getscheduler_impl(PyObject *module, pid_t pid)
-/*[clinic end generated code: output=dce4c0bd3f1b34c8 input=5f14cfd1f189e1a0]*/
+/*[clinic end generated code: output=dce4c0bd3f1b34c8 input=8d99dac505485ac8]*/
 {
     int policy;
 
@@ -6266,12 +6687,12 @@
     sched_priority: object
         A scheduling parameter.
 
-Current has only one field: sched_priority");
+Currently has only one field: sched_priority
 [clinic start generated code]*/
 
 static PyObject *
 os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority)
-/*[clinic end generated code: output=48f4067d60f48c13 input=ab4de35a9a7811f2]*/
+/*[clinic end generated code: output=48f4067d60f48c13 input=eb42909a2c0e3e6c]*/
 {
     PyObject *res;
 
@@ -6283,7 +6704,6 @@
     return res;
 }
 
-
 PyDoc_VAR(os_sched_param__doc__);
 
 static PyStructSequence_Field sched_param_fields[] = {
@@ -6299,11 +6719,11 @@
 };
 
 static int
-convert_sched_param(PyObject *param, struct sched_param *res)
+convert_sched_param(PyObject *module, PyObject *param, struct sched_param *res)
 {
     long priority;
 
-    if (Py_TYPE(param) != SchedParamType) {
+    if (!Py_IS_TYPE(param, (PyTypeObject *)get_posix_state(module)->SchedParamType)) {
         PyErr_SetString(PyExc_TypeError, "must have a sched_param object");
         return 0;
     }
@@ -6326,7 +6746,7 @@
 
     pid: pid_t
     policy: int
-    param: sched_param
+    param as param_obj: object
     /
 
 Set the scheduling policy for the process identified by pid.
@@ -6337,15 +6757,20 @@
 
 static PyObject *
 os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy,
-                           struct sched_param *param)
-/*[clinic end generated code: output=b0ac0a70d3b1d705 input=c581f9469a5327dd]*/
+                           PyObject *param_obj)
+/*[clinic end generated code: output=cde27faa55dc993e input=73013d731bd8fbe9]*/
 {
+    struct sched_param param;
+    if (!convert_sched_param(module, param_obj, &param)) {
+        return NULL;
+    }
+
     /*
     ** sched_setscheduler() returns 0 in Linux, but the previous
     ** scheduling policy under Solaris/Illumos, and others.
     ** On error, -1 is returned in all Operating Systems.
     */
-    if (sched_setscheduler(pid, policy, param) == -1)
+    if (sched_setscheduler(pid, policy, &param) == -1)
         return posix_error();
     Py_RETURN_NONE;
 }
@@ -6374,7 +6799,8 @@
 
     if (sched_getparam(pid, &param))
         return posix_error();
-    result = PyStructSequence_New(SchedParamType);
+    PyObject *SchedParamType = get_posix_state(module)->SchedParamType;
+    result = PyStructSequence_New((PyTypeObject *)SchedParamType);
     if (!result)
         return NULL;
     priority = PyLong_FromLong(param.sched_priority);
@@ -6390,7 +6816,7 @@
 /*[clinic input]
 os.sched_setparam
     pid: pid_t
-    param: sched_param
+    param as param_obj: object
     /
 
 Set scheduling parameters for the process identified by pid.
@@ -6400,11 +6826,15 @@
 [clinic start generated code]*/
 
 static PyObject *
-os_sched_setparam_impl(PyObject *module, pid_t pid,
-                       struct sched_param *param)
-/*[clinic end generated code: output=8af013f78a32b591 input=6b8d6dfcecdc21bd]*/
+os_sched_setparam_impl(PyObject *module, pid_t pid, PyObject *param_obj)
+/*[clinic end generated code: output=f19fe020a53741c1 input=27b98337c8b2dcc7]*/
 {
-    if (sched_setparam(pid, param))
+    struct sched_param param;
+    if (!convert_sched_param(module, param_obj, &param)) {
+        return NULL;
+    }
+
+    if (sched_setparam(pid, &param))
         return posix_error();
     Py_RETURN_NONE;
 }
@@ -6773,7 +7203,7 @@
     int master_fd = -1;
     pid_t pid;
 
-    if (_PyInterpreterState_Get() != PyInterpreterState_Main()) {
+    if (_PyInterpreterState_GET() != PyInterpreterState_Main()) {
         PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters");
         return NULL;
     }
@@ -6868,23 +7298,46 @@
 
 #ifdef HAVE_GETGROUPLIST
 
-/* AC 3.5: funny apple logic below */
-PyDoc_STRVAR(posix_getgrouplist__doc__,
-"getgrouplist(user, group) -> list of groups to which a user belongs\n\n\
-Returns a list of groups to which a user belongs.\n\n\
-    user: username to lookup\n\
-    group: base group id of the user");
+#ifdef __APPLE__
+/*[clinic input]
+os.getgrouplist
+
+    user: str
+        username to lookup
+    group as basegid: int
+        base group id of the user
+    /
+
+Returns a list of groups to which a user belongs.
+[clinic start generated code]*/
 
 static PyObject *
-posix_getgrouplist(PyObject *self, PyObject *args)
+os_getgrouplist_impl(PyObject *module, const char *user, int basegid)
+/*[clinic end generated code: output=6e734697b8c26de0 input=f8d870374b09a490]*/
+#else
+/*[clinic input]
+os.getgrouplist
+
+    user: str
+        username to lookup
+    group as basegid: gid_t
+        base group id of the user
+    /
+
+Returns a list of groups to which a user belongs.
+[clinic start generated code]*/
+
+static PyObject *
+os_getgrouplist_impl(PyObject *module, const char *user, gid_t basegid)
+/*[clinic end generated code: output=0ebd7fb70115575b input=cc61d5c20b08958d]*/
+#endif
 {
-    const char *user;
     int i, ngroups;
     PyObject *list;
 #ifdef __APPLE__
-    int *groups, basegid;
+    int *groups;
 #else
-    gid_t *groups, basegid;
+    gid_t *groups;
 #endif
 
     /*
@@ -6897,15 +7350,6 @@
      */
     ngroups = 1 + MAX_GROUPS;
 
-#ifdef __APPLE__
-    if (!PyArg_ParseTuple(args, "si:getgrouplist", &user, &basegid))
-        return NULL;
-#else
-    if (!PyArg_ParseTuple(args, "sO&:getgrouplist", &user,
-                          _Py_Gid_Converter, &basegid))
-        return NULL;
-#endif
-
     while (1) {
 #ifdef __APPLE__
         groups = PyMem_New(int, ngroups);
@@ -7076,40 +7520,47 @@
 #endif /* HAVE_GETGROUPS */
 
 #ifdef HAVE_INITGROUPS
-PyDoc_STRVAR(posix_initgroups__doc__,
-"initgroups(username, gid) -> None\n\n\
-Call the system initgroups() to initialize the group access list with all of\n\
-the groups of which the specified username is a member, plus the specified\n\
-group id.");
+#ifdef __APPLE__
+/*[clinic input]
+os.initgroups
 
-/* AC 3.5: funny apple logic */
+    username as oname: FSConverter
+    gid: int
+    /
+
+Initialize the group access list.
+
+Call the system initgroups() to initialize the group access list with all of
+the groups of which the specified username is a member, plus the specified
+group id.
+[clinic start generated code]*/
+
 static PyObject *
-posix_initgroups(PyObject *self, PyObject *args)
+os_initgroups_impl(PyObject *module, PyObject *oname, int gid)
+/*[clinic end generated code: output=7f074d30a425fd3a input=df3d54331b0af204]*/
+#else
+/*[clinic input]
+os.initgroups
+
+    username as oname: FSConverter
+    gid: gid_t
+    /
+
+Initialize the group access list.
+
+Call the system initgroups() to initialize the group access list with all of
+the groups of which the specified username is a member, plus the specified
+group id.
+[clinic start generated code]*/
+
+static PyObject *
+os_initgroups_impl(PyObject *module, PyObject *oname, gid_t gid)
+/*[clinic end generated code: output=59341244521a9e3f input=0cb91bdc59a4c564]*/
+#endif
 {
-    PyObject *oname;
-    const char *username;
-    int res;
-#ifdef __APPLE__
-    int gid;
-#else
-    gid_t gid;
-#endif
+    const char *username = PyBytes_AS_STRING(oname);
 
-#ifdef __APPLE__
-    if (!PyArg_ParseTuple(args, "O&i:initgroups",
-                          PyUnicode_FSConverter, &oname,
-                          &gid))
-#else
-    if (!PyArg_ParseTuple(args, "O&O&:initgroups",
-                          PyUnicode_FSConverter, &oname,
-                          _Py_Gid_Converter, &gid))
-#endif
-        return NULL;
-    username = PyBytes_AS_STRING(oname);
-
-    res = initgroups(username, gid);
-    Py_DECREF(oname);
-    if (res == -1)
+    if (initgroups(username, gid) == -1)
         return PyErr_SetFromErrno(PyExc_OSError);
 
     Py_RETURN_NONE;
@@ -7609,27 +8060,31 @@
 
 #if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
 static PyObject *
-wait_helper(pid_t pid, int status, struct rusage *ru)
+wait_helper(PyObject *module, pid_t pid, int status, struct rusage *ru)
 {
     PyObject *result;
-    static PyObject *struct_rusage;
-    _Py_IDENTIFIER(struct_rusage);
+    PyObject *struct_rusage;
 
     if (pid == -1)
         return posix_error();
 
-    if (struct_rusage == NULL) {
-        PyObject *m = PyImport_ImportModuleNoBlock("resource");
-        if (m == NULL)
-            return NULL;
-        struct_rusage = _PyObject_GetAttrId(m, &PyId_struct_rusage);
-        Py_DECREF(m);
-        if (struct_rusage == NULL)
-            return NULL;
+    // If wait succeeded but no child was ready to report status, ru will not
+    // have been populated.
+    if (pid == 0) {
+        memset(ru, 0, sizeof(*ru));
     }
 
+    PyObject *m = PyImport_ImportModuleNoBlock("resource");
+    if (m == NULL)
+        return NULL;
+    struct_rusage = PyObject_GetAttr(m, get_posix_state(module)->struct_rusage);
+    Py_DECREF(m);
+    if (struct_rusage == NULL)
+        return NULL;
+
     /* XXX(nnorwitz): Copied (w/mods) from resource.c, there should be only one. */
     result = PyStructSequence_New((PyTypeObject*) struct_rusage);
+    Py_DECREF(struct_rusage);
     if (!result)
         return NULL;
 
@@ -7698,7 +8153,7 @@
     if (pid < 0)
         return (!async_err) ? posix_error() : NULL;
 
-    return wait_helper(pid, WAIT_STATUS_INT(status), &ru);
+    return wait_helper(module, pid, WAIT_STATUS_INT(status), &ru);
 }
 #endif /* HAVE_WAIT3 */
 
@@ -7735,7 +8190,7 @@
     if (res < 0)
         return (!async_err) ? posix_error() : NULL;
 
-    return wait_helper(res, WAIT_STATUS_INT(status), &ru);
+    return wait_helper(module, res, WAIT_STATUS_INT(status), &ru);
 }
 #endif /* HAVE_WAIT4 */
 
@@ -7780,7 +8235,8 @@
     if (si.si_pid == 0)
         Py_RETURN_NONE;
 
-    result = PyStructSequence_New(WaitidResultType);
+    PyObject *WaitidResultType = get_posix_state(module)->WaitidResultType;
+    result = PyStructSequence_New((PyTypeObject *)WaitidResultType);
     if (!result)
         return NULL;
 
@@ -7906,6 +8362,30 @@
 }
 #endif /* HAVE_WAIT */
 
+#if defined(__linux__) && defined(__NR_pidfd_open)
+/*[clinic input]
+os.pidfd_open
+  pid: pid_t
+  flags: unsigned_int = 0
+
+Return a file descriptor referring to the process *pid*.
+
+The descriptor can be used to perform process management without races and
+signals.
+[clinic start generated code]*/
+
+static PyObject *
+os_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags)
+/*[clinic end generated code: output=5c7252698947dc41 input=c3fd99ce947ccfef]*/
+{
+    int fd = syscall(__NR_pidfd_open, pid, flags);
+    if (fd < 0) {
+        return posix_error();
+    }
+    return PyLong_FromLong(fd);
+}
+#endif
+
 
 #if defined(HAVE_READLINK) || defined(MS_WINDOWS)
 /*[clinic input]
@@ -7931,16 +8411,30 @@
 #if defined(HAVE_READLINK)
     char buffer[MAXPATHLEN+1];
     ssize_t length;
+#ifdef HAVE_READLINKAT
+    int readlinkat_unavailable = 0;
+#endif
 
     Py_BEGIN_ALLOW_THREADS
 #ifdef HAVE_READLINKAT
-    if (dir_fd != DEFAULT_DIR_FD)
-        length = readlinkat(dir_fd, path->narrow, buffer, MAXPATHLEN);
-    else
+    if (dir_fd != DEFAULT_DIR_FD) {
+        if (HAVE_READLINKAT_RUNTIME) {
+            length = readlinkat(dir_fd, path->narrow, buffer, MAXPATHLEN);
+        } else {
+            readlinkat_unavailable = 1;
+        }
+    } else
 #endif
         length = readlink(path->narrow, buffer, MAXPATHLEN);
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_READLINKAT
+    if (readlinkat_unavailable) {
+        argument_unavailable_error(NULL, "dir_fd");
+        return NULL;
+    }
+#endif
+
     if (length < 0) {
         return path_error(path);
     }
@@ -8136,6 +8630,9 @@
     static int windows_has_symlink_unprivileged_flag = TRUE;
 #else
     int result;
+#ifdef HAVE_SYMLINKAT
+    int symlinkat_unavailable = 0;
+#endif
 #endif
 
     if (PySys_Audit("os.symlink", "OOi", src->object, dst->object,
@@ -8198,14 +8695,25 @@
     }
 
     Py_BEGIN_ALLOW_THREADS
-#if HAVE_SYMLINKAT
-    if (dir_fd != DEFAULT_DIR_FD)
-        result = symlinkat(src->narrow, dir_fd, dst->narrow);
-    else
+#ifdef HAVE_SYMLINKAT
+    if (dir_fd != DEFAULT_DIR_FD) {
+        if (HAVE_SYMLINKAT_RUNTIME) {
+            result = symlinkat(src->narrow, dir_fd, dst->narrow);
+        } else {
+            symlinkat_unavailable = 1;
+        }
+    } else
 #endif
         result = symlink(src->narrow, dst->narrow);
     Py_END_ALLOW_THREADS
 
+#ifdef HAVE_SYMLINKAT
+    if (symlinkat_unavailable) {
+          argument_unavailable_error(NULL, "dir_fd");
+          return NULL;
+    }
+#endif
+
     if (result)
         return path_error2(src, dst);
 #endif
@@ -8242,8 +8750,6 @@
     5
 };
 
-static PyTypeObject* TimesResultType;
-
 #ifdef MS_WINDOWS
 #define HAVE_TIMES  /* mandatory, for the method table */
 #endif
@@ -8251,11 +8757,12 @@
 #ifdef HAVE_TIMES
 
 static PyObject *
-build_times_result(double user, double system,
+build_times_result(PyObject *module, double user, double system,
     double children_user, double children_system,
     double elapsed)
 {
-    PyObject *value = PyStructSequence_New(TimesResultType);
+    PyObject *TimesResultType = get_posix_state(module)->TimesResultType;
+    PyObject *value = PyStructSequence_New((PyTypeObject *)TimesResultType);
     if (value == NULL)
         return NULL;
 
@@ -8310,7 +8817,7 @@
        1e7 is one second in such units; 1e-7 the inverse.
        429.4967296 is 2**32 / 1e7 or 2**32 * 1e-7.
     */
-    return build_times_result(
+    return build_times_result(module,
         (double)(user.dwHighDateTime*429.4967296 +
                  user.dwLowDateTime*1e-7),
         (double)(kernel.dwHighDateTime*429.4967296 +
@@ -8329,7 +8836,7 @@
     c = times(&t);
     if (c == (clock_t) -1)
         return posix_error();
-    return build_times_result(
+    return build_times_result(module,
                          (double)t.tms_utime / ticks_per_second,
                          (double)t.tms_stime / ticks_per_second,
                          (double)t.tms_cutime / ticks_per_second,
@@ -8477,6 +8984,9 @@
 {
     int fd;
     int async_err = 0;
+#ifdef HAVE_OPENAT
+    int openat_unavailable = 0;
+#endif
 
 #ifdef O_CLOEXEC
     int *atomic_flag_works = &_Py_open_cloexec_works;
@@ -8501,9 +9011,15 @@
         fd = _wopen(path->wide, flags, mode);
 #else
 #ifdef HAVE_OPENAT
-        if (dir_fd != DEFAULT_DIR_FD)
-            fd = openat(dir_fd, path->narrow, flags, mode);
-        else
+        if (dir_fd != DEFAULT_DIR_FD) {
+            if (HAVE_OPENAT_RUNTIME) {
+                fd = openat(dir_fd, path->narrow, flags, mode);
+
+            } else {
+                openat_unavailable = 1;
+                fd = -1;
+            }
+        } else
 #endif /* HAVE_OPENAT */
             fd = open(path->narrow, flags, mode);
 #endif /* !MS_WINDOWS */
@@ -8511,6 +9027,13 @@
     } while (fd < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
     _Py_END_SUPPRESS_IPH
 
+#ifdef HAVE_OPENAT
+    if (openat_unavailable) {
+        argument_unavailable_error(NULL, "dir_fd");
+        return -1;
+    }
+#endif
+
     if (fd < 0) {
         if (!async_err)
             PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object);
@@ -8563,10 +9086,13 @@
     int lo = ((int *)lohi)[0];
     int hi = ((int *)lohi)[1];
 
-    if (fd >= hi)
+    if (fd >= hi) {
         return 1;
-    else if (fd >= lo)
-        close(fd);
+    }
+    else if (fd >= lo) {
+        /* Ignore errors */
+        (void)close(fd);
+    }
     return 0;
 }
 #endif /* HAVE_FDWALK */
@@ -8587,8 +9113,6 @@
 {
 #ifdef HAVE_FDWALK
     int lohi[2];
-#else
-    int i;
 #endif
     Py_BEGIN_ALLOW_THREADS
     _Py_BEGIN_SUPPRESS_IPH
@@ -8597,8 +9121,20 @@
     lohi[1] = fd_high;
     fdwalk(_fdwalk_close_func, lohi);
 #else
-    for (i = Py_MAX(fd_low, 0); i < fd_high; i++)
-        close(i);
+    fd_low = Py_MAX(fd_low, 0);
+#ifdef __FreeBSD__
+    if (fd_high >= sysconf(_SC_OPEN_MAX)) {
+        /* Any errors encountered while closing file descriptors are ignored */
+        closefrom(fd_low);
+    }
+    else
+#endif
+    {
+        for (int i = fd_low; i < fd_high; i++) {
+            /* Ignore errors */
+            (void)close(i);
+        }
+    }
 #endif
     _Py_END_SUPPRESS_IPH
     Py_END_ALLOW_THREADS
@@ -8965,11 +9501,10 @@
 
 #ifdef HAVE_PREAD
 /*[clinic input]
-# TODO length should be size_t!  but Python doesn't support parsing size_t yet.
 os.pread
 
     fd: int
-    length: int
+    length: Py_ssize_t
     offset: Py_off_t
     /
 
@@ -8980,8 +9515,8 @@
 [clinic start generated code]*/
 
 static PyObject *
-os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset)
-/*[clinic end generated code: output=435b29ee32b54a78 input=084948dcbaa35d4c]*/
+os_pread_impl(PyObject *module, int fd, Py_ssize_t length, Py_off_t offset)
+/*[clinic end generated code: output=3f875c1eef82e32f input=85cb4a5589627144]*/
 {
     Py_ssize_t n;
     int async_err = 0;
@@ -9081,12 +9616,25 @@
     } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
 #else
     do {
+#ifdef __APPLE__
+/* This entire function will be removed from the module dict when the API
+ * is not available.
+ */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability"
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+#endif
         Py_BEGIN_ALLOW_THREADS
         _Py_BEGIN_SUPPRESS_IPH
         n = preadv(fd, iov, cnt, offset);
         _Py_END_SUPPRESS_IPH
         Py_END_ALLOW_THREADS
     } while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
+
+#ifdef __APPLE__
+#pragma clang diagnostic pop
+#endif
+
 #endif
 
     iov_cleanup(iov, buf, cnt);
@@ -9120,47 +9668,77 @@
 }
 
 #ifdef HAVE_SENDFILE
-PyDoc_STRVAR(posix_sendfile__doc__,
-"sendfile(out, in, offset, count) -> byteswritten\n\
-sendfile(out, in, offset, count[, headers][, trailers], flags=0)\n\
-            -> byteswritten\n\
-Copy count bytes from file descriptor in to file descriptor out.");
+#ifdef __APPLE__
+/*[clinic input]
+os.sendfile
 
-/* AC 3.5: don't bother converting, has optional group*/
+    out_fd: int
+    in_fd: int
+    offset: Py_off_t
+    count as sbytes: Py_off_t
+    headers: object(c_default="NULL") = ()
+    trailers: object(c_default="NULL") = ()
+    flags: int = 0
+
+Copy count bytes from file descriptor in_fd to file descriptor out_fd.
+[clinic start generated code]*/
+
 static PyObject *
-posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict)
+os_sendfile_impl(PyObject *module, int out_fd, int in_fd, Py_off_t offset,
+                 Py_off_t sbytes, PyObject *headers, PyObject *trailers,
+                 int flags)
+/*[clinic end generated code: output=81c4bcd143f5c82b input=b0d72579d4c69afa]*/
+#elif defined(__FreeBSD__) || defined(__DragonFly__)
+/*[clinic input]
+os.sendfile
+
+    out_fd: int
+    in_fd: int
+    offset: Py_off_t
+    count: Py_ssize_t
+    headers: object(c_default="NULL") = ()
+    trailers: object(c_default="NULL") = ()
+    flags: int = 0
+
+Copy count bytes from file descriptor in_fd to file descriptor out_fd.
+[clinic start generated code]*/
+
+static PyObject *
+os_sendfile_impl(PyObject *module, int out_fd, int in_fd, Py_off_t offset,
+                 Py_ssize_t count, PyObject *headers, PyObject *trailers,
+                 int flags)
+/*[clinic end generated code: output=329ea009bdd55afc input=338adb8ff84ae8cd]*/
+#else
+/*[clinic input]
+os.sendfile
+
+    out_fd: int
+    in_fd: int
+    offset as offobj: object
+    count: Py_ssize_t
+
+Copy count bytes from file descriptor in_fd to file descriptor out_fd.
+[clinic start generated code]*/
+
+static PyObject *
+os_sendfile_impl(PyObject *module, int out_fd, int in_fd, PyObject *offobj,
+                 Py_ssize_t count)
+/*[clinic end generated code: output=ae81216e40f167d8 input=76d64058c74477ba]*/
+#endif
 {
-    int in, out;
     Py_ssize_t ret;
     int async_err = 0;
-    off_t offset;
 
 #if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
 #ifndef __APPLE__
-    Py_ssize_t len;
-#endif
-    PyObject *headers = NULL, *trailers = NULL;
-    Py_buffer *hbuf, *tbuf;
     off_t sbytes;
+#endif
+    Py_buffer *hbuf, *tbuf;
     struct sf_hdtr sf;
-    int flags = 0;
-    /* Beware that "in" clashes with Python's own "in" operator keyword */
-    static char *keywords[] = {"out", "in",
-                                "offset", "count",
-                                "headers", "trailers", "flags", NULL};
 
     sf.headers = NULL;
     sf.trailers = NULL;
 
-#ifdef __APPLE__
-    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiO&O&|OOi:sendfile",
-        keywords, &out, &in, Py_off_t_converter, &offset, Py_off_t_converter, &sbytes,
-#else
-    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiO&n|OOi:sendfile",
-        keywords, &out, &in, Py_off_t_converter, &offset, &len,
-#endif
-                &headers, &trailers, &flags))
-            return NULL;
     if (headers != NULL) {
         if (!PySequence_Check(headers)) {
             PyErr_SetString(PyExc_TypeError,
@@ -9222,9 +9800,9 @@
     do {
         Py_BEGIN_ALLOW_THREADS
 #ifdef __APPLE__
-        ret = sendfile(in, out, offset, &sbytes, &sf, flags);
+        ret = sendfile(in_fd, out_fd, offset, &sbytes, &sf, flags);
 #else
-        ret = sendfile(in, out, offset, len, &sf, &sbytes, flags);
+        ret = sendfile(in_fd, out_fd, offset, count, &sf, &sbytes, flags);
 #endif
         Py_END_ALLOW_THREADS
     } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
@@ -9259,18 +9837,11 @@
     #endif
 
 #else
-    Py_ssize_t count;
-    PyObject *offobj;
-    static char *keywords[] = {"out", "in",
-                                "offset", "count", NULL};
-    if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiOn:sendfile",
-            keywords, &out, &in, &offobj, &count))
-        return NULL;
 #ifdef __linux__
     if (offobj == Py_None) {
         do {
             Py_BEGIN_ALLOW_THREADS
-            ret = sendfile(out, in, NULL, count);
+            ret = sendfile(out_fd, in_fd, NULL, count);
             Py_END_ALLOW_THREADS
         } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
         if (ret < 0)
@@ -9278,12 +9849,46 @@
         return Py_BuildValue("n", ret);
     }
 #endif
+    off_t offset;
     if (!Py_off_t_converter(offobj, &offset))
         return NULL;
 
+#if defined(__sun) && defined(__SVR4)
+    // On Solaris, sendfile raises EINVAL rather than returning 0
+    // when the offset is equal or bigger than the in_fd size.
+    struct stat st;
+
     do {
         Py_BEGIN_ALLOW_THREADS
-        ret = sendfile(out, in, &offset, count);
+        ret = fstat(in_fd, &st);
+        Py_END_ALLOW_THREADS
+    } while (ret != 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
+    if (ret < 0)
+        return (!async_err) ? posix_error() : NULL;
+
+    if (offset >= st.st_size) {
+        return Py_BuildValue("i", 0);
+    }
+
+    // On illumos specifically sendfile() may perform a partial write but
+    // return -1/an error (in one confirmed case the destination socket
+    // had a 5 second timeout set and errno was EAGAIN) and it's on the client
+    // code to check if the offset parameter was modified by sendfile().
+    //
+    // We need this variable to track said change.
+    off_t original_offset = offset;
+#endif
+
+    do {
+        Py_BEGIN_ALLOW_THREADS
+        ret = sendfile(out_fd, in_fd, &offset, count);
+#if defined(__sun) && defined(__SVR4)
+        // This handles illumos-specific sendfile() partial write behavior,
+        // see a comment above for more details.
+        if (ret < 0 && offset != original_offset) {
+            ret = offset - original_offset;
+        }
+#endif
         Py_END_ALLOW_THREADS
     } while (ret < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
     if (ret < 0)
@@ -9298,8 +9903,8 @@
 /*[clinic input]
 os._fcopyfile
 
-    infd: int
-    outfd: int
+    in_fd: int
+    out_fd: int
     flags: int
     /
 
@@ -9307,13 +9912,13 @@
 [clinic start generated code]*/
 
 static PyObject *
-os__fcopyfile_impl(PyObject *module, int infd, int outfd, int flags)
-/*[clinic end generated code: output=8e8885c721ec38e3 input=69e0770e600cb44f]*/
+os__fcopyfile_impl(PyObject *module, int in_fd, int out_fd, int flags)
+/*[clinic end generated code: output=c9d1a35a992e401b input=1e34638a86948795]*/
 {
     int ret;
 
     Py_BEGIN_ALLOW_THREADS
-    ret = fcopyfile(infd, outfd, NULL, flags);
+    ret = fcopyfile(in_fd, out_fd, NULL, flags);
     Py_END_ALLOW_THREADS
     if (ret < 0)
         return posix_error();
@@ -9354,7 +9959,7 @@
 #endif
     }
 
-    return _pystat_fromstructstat(&st);
+    return _pystat_fromstructstat(module, &st);
 }
 
 
@@ -9651,6 +10256,15 @@
         Py_END_ALLOW_THREADS
     } while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
 #else
+
+#ifdef __APPLE__
+/* This entire function will be removed from the module dict when the API
+ * is not available.
+ */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability"
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+#endif
     do {
         Py_BEGIN_ALLOW_THREADS
         _Py_BEGIN_SUPPRESS_IPH
@@ -9658,6 +10272,11 @@
         _Py_END_SUPPRESS_IPH
         Py_END_ALLOW_THREADS
     } while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
+
+#ifdef __APPLE__
+#pragma clang diagnostic pop
+#endif
+
 #endif
 
     iov_cleanup(iov, buf, cnt);
@@ -10080,25 +10699,63 @@
 }
 #endif /* HAVE_POSIX_FADVISE && !POSIX_FADVISE_AIX_BUG */
 
-#ifdef HAVE_PUTENV
 
-/* Save putenv() parameters as values here, so we can collect them when they
- * get re-set with another call for the same key. */
-static PyObject *posix_putenv_garbage;
-
-static void
-posix_putenv_garbage_setitem(PyObject *name, PyObject *value)
+#ifdef MS_WINDOWS
+static PyObject*
+win32_putenv(PyObject *name, PyObject *value)
 {
-    /* Install the first arg and newstr in posix_putenv_garbage;
-     * this will cause previous value to be collected.  This has to
-     * happen after the real putenv() call because the old value
-     * was still accessible until then. */
-    if (PyDict_SetItem(posix_putenv_garbage, name, value))
-        /* really not much we can do; just leak */
-        PyErr_Clear();
-    else
-        Py_DECREF(value);
+    /* Search from index 1 because on Windows starting '=' is allowed for
+       defining hidden environment variables. */
+    if (PyUnicode_GET_LENGTH(name) == 0 ||
+        PyUnicode_FindChar(name, '=', 1, PyUnicode_GET_LENGTH(name), 1) != -1)
+    {
+        PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+        return NULL;
+    }
+    PyObject *unicode;
+    if (value != NULL) {
+        unicode = PyUnicode_FromFormat("%U=%U", name, value);
+    }
+    else {
+        unicode = PyUnicode_FromFormat("%U=", name);
+    }
+    if (unicode == NULL) {
+        return NULL;
+    }
+
+    Py_ssize_t size;
+    /* PyUnicode_AsWideCharString() rejects embedded null characters */
+    wchar_t *env = PyUnicode_AsWideCharString(unicode, &size);
+    Py_DECREF(unicode);
+
+    if (env == NULL) {
+        return NULL;
+    }
+    if (size > _MAX_ENV) {
+        PyErr_Format(PyExc_ValueError,
+                     "the environment variable is longer than %u characters",
+                     _MAX_ENV);
+        PyMem_Free(env);
+        return NULL;
+    }
+
+    /* _wputenv() and SetEnvironmentVariableW() update the environment in the
+       Process Environment Block (PEB). _wputenv() also updates CRT 'environ'
+       and '_wenviron' variables, whereas SetEnvironmentVariableW() does not.
+
+       Prefer _wputenv() to be compatible with C libraries using CRT
+       variables and CRT functions using these variables (ex: getenv()). */
+    int err = _wputenv(env);
+    PyMem_Free(env);
+
+    if (err) {
+        posix_error();
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
 }
+#endif
 
 
 #ifdef MS_WINDOWS
@@ -10116,49 +10773,12 @@
 os_putenv_impl(PyObject *module, PyObject *name, PyObject *value)
 /*[clinic end generated code: output=d29a567d6b2327d2 input=ba586581c2e6105f]*/
 {
-    const wchar_t *env;
-    Py_ssize_t size;
-
-    /* Search from index 1 because on Windows starting '=' is allowed for
-       defining hidden environment variables. */
-    if (PyUnicode_GET_LENGTH(name) == 0 ||
-        PyUnicode_FindChar(name, '=', 1, PyUnicode_GET_LENGTH(name), 1) != -1)
-    {
-        PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+    if (PySys_Audit("os.putenv", "OO", name, value) < 0) {
         return NULL;
     }
-    PyObject *unicode = PyUnicode_FromFormat("%U=%U", name, value);
-    if (unicode == NULL) {
-        return NULL;
-    }
-
-    env = PyUnicode_AsUnicodeAndSize(unicode, &size);
-    if (env == NULL)
-        goto error;
-    if (size > _MAX_ENV) {
-        PyErr_Format(PyExc_ValueError,
-                     "the environment variable is longer than %u characters",
-                     _MAX_ENV);
-        goto error;
-    }
-    if (wcslen(env) != (size_t)size) {
-        PyErr_SetString(PyExc_ValueError, "embedded null character");
-        goto error;
-    }
-
-    if (_wputenv(env)) {
-        posix_error();
-        goto error;
-    }
-
-    posix_putenv_garbage_setitem(name, unicode);
-    Py_RETURN_NONE;
-
-error:
-    Py_DECREF(unicode);
-    return NULL;
+    return win32_putenv(name, value);
 }
-#else /* MS_WINDOWS */
+#else
 /*[clinic input]
 os.putenv
 
@@ -10173,8 +10793,6 @@
 os_putenv_impl(PyObject *module, PyObject *name, PyObject *value)
 /*[clinic end generated code: output=d29a567d6b2327d2 input=a97bc6152f688d31]*/
 {
-    PyObject *bytes = NULL;
-    char *env;
     const char *name_string = PyBytes_AS_STRING(name);
     const char *value_string = PyBytes_AS_STRING(value);
 
@@ -10182,28 +10800,38 @@
         PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
         return NULL;
     }
+
     if (PySys_Audit("os.putenv", "OO", name, value) < 0) {
         return NULL;
     }
-    bytes = PyBytes_FromFormat("%s=%s", name_string, value_string);
-    if (bytes == NULL) {
-        return NULL;
-    }
 
-    env = PyBytes_AS_STRING(bytes);
-    if (putenv(env)) {
-        Py_DECREF(bytes);
+    if (setenv(name_string, value_string, 1)) {
         return posix_error();
     }
-
-    posix_putenv_garbage_setitem(name, bytes);
     Py_RETURN_NONE;
 }
-#endif /* MS_WINDOWS */
-#endif /* HAVE_PUTENV */
+#endif  /* !defined(MS_WINDOWS) */
 
 
-#ifdef HAVE_UNSETENV
+#ifdef MS_WINDOWS
+/*[clinic input]
+os.unsetenv
+    name: unicode
+    /
+
+Delete an environment variable.
+[clinic start generated code]*/
+
+static PyObject *
+os_unsetenv_impl(PyObject *module, PyObject *name)
+/*[clinic end generated code: output=54c4137ab1834f02 input=4d6a1747cc526d2f]*/
+{
+    if (PySys_Audit("os.unsetenv", "(O)", name) < 0) {
+        return NULL;
+    }
+    return win32_putenv(name, NULL);
+}
+#else
 /*[clinic input]
 os.unsetenv
     name: FSConverter
@@ -10216,37 +10844,21 @@
 os_unsetenv_impl(PyObject *module, PyObject *name)
 /*[clinic end generated code: output=54c4137ab1834f02 input=2bb5288a599c7107]*/
 {
-#ifndef HAVE_BROKEN_UNSETENV
-    int err;
-#endif
-
     if (PySys_Audit("os.unsetenv", "(O)", name) < 0) {
         return NULL;
     }
-
 #ifdef HAVE_BROKEN_UNSETENV
     unsetenv(PyBytes_AS_STRING(name));
 #else
-    err = unsetenv(PyBytes_AS_STRING(name));
-    if (err)
+    int err = unsetenv(PyBytes_AS_STRING(name));
+    if (err) {
         return posix_error();
+    }
 #endif
 
-    /* Remove the key from posix_putenv_garbage;
-     * this will cause it to be collected.  This has to
-     * happen after the real unsetenv() call because the
-     * old value was still accessible until then.
-     */
-    if (PyDict_DelItem(posix_putenv_garbage, name)) {
-        /* really not much we can do; just leak */
-        if (!PyErr_ExceptionMatches(PyExc_KeyError)) {
-            return NULL;
-        }
-        PyErr_Clear();
-    }
     Py_RETURN_NONE;
 }
-#endif /* HAVE_UNSETENV */
+#endif /* !MS_WINDOWS */
 
 
 /*[clinic input]
@@ -10447,8 +11059,9 @@
 #include <sys/statvfs.h>
 
 static PyObject*
-_pystatvfs_fromstructstatvfs(struct statvfs st) {
-    PyObject *v = PyStructSequence_New(StatVFSResultType);
+_pystatvfs_fromstructstatvfs(PyObject *module, struct statvfs st) {
+    PyObject *StatVFSResultType = get_posix_state(module)->StatVFSResultType;
+    PyObject *v = PyStructSequence_New((PyTypeObject *)StatVFSResultType);
     if (v == NULL)
         return NULL;
 
@@ -10524,7 +11137,7 @@
     if (result != 0)
         return (!async_err) ? posix_error() : NULL;
 
-    return _pystatvfs_fromstructstatvfs(st);
+    return _pystatvfs_fromstructstatvfs(module, st);
 }
 #endif /* defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H) */
 
@@ -10553,13 +11166,6 @@
     Py_BEGIN_ALLOW_THREADS
 #ifdef HAVE_FSTATVFS
     if (path->fd != -1) {
-#ifdef __APPLE__
-        /* handle weak-linking on Mac OS X 10.3 */
-        if (fstatvfs == NULL) {
-            fd_specified("statvfs", path->fd);
-            return NULL;
-        }
-#endif
         result = fstatvfs(path->fd, &st);
     }
     else
@@ -10571,7 +11177,7 @@
         return path_error(path);
     }
 
-    return _pystatvfs_fromstructstatvfs(st);
+    return _pystatvfs_fromstructstatvfs(module, st);
 }
 #endif /* defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H) */
 
@@ -11325,6 +11931,9 @@
 #ifdef _SC_PAGE_SIZE
     {"SC_PAGE_SIZE",    _SC_PAGE_SIZE},
 #endif
+#ifdef _SC_AIX_REALMEM
+    {"SC_AIX_REALMEM", _SC_AIX_REALMEM},
+#endif
 #ifdef _SC_PASS_MAX
     {"SC_PASS_MAX",     _SC_PASS_MAX},
 #endif
@@ -12247,8 +12856,6 @@
 
 /* Terminal size querying */
 
-static PyTypeObject* TerminalSizeType;
-
 PyDoc_STRVAR(TerminalSize_docstring,
     "A tuple of (columns, lines) for holding terminal window size");
 
@@ -12266,29 +12873,34 @@
 };
 
 #if defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)
-/* AC 3.5: fd should accept None */
-PyDoc_STRVAR(termsize__doc__,
-    "Return the size of the terminal window as (columns, lines).\n"        \
-    "\n"                                                                   \
-    "The optional argument fd (default standard output) specifies\n"       \
-    "which file descriptor should be queried.\n"                           \
-    "\n"                                                                   \
-    "If the file descriptor is not connected to a terminal, an OSError\n"  \
-    "is thrown.\n"                                                         \
-    "\n"                                                                   \
-    "This function will only be defined if an implementation is\n"         \
-    "available for this system.\n"                                         \
-    "\n"                                                                   \
-    "shutil.get_terminal_size is the high-level function which should\n"  \
-    "normally be used, os.get_terminal_size is the low-level implementation.");
+/*[clinic input]
+os.get_terminal_size
 
-static PyObject*
-get_terminal_size(PyObject *self, PyObject *args)
+    fd: int(c_default="fileno(stdout)", py_default="<unrepresentable>") = -1
+    /
+
+Return the size of the terminal window as (columns, lines).
+
+The optional argument fd (default standard output) specifies
+which file descriptor should be queried.
+
+If the file descriptor is not connected to a terminal, an OSError
+is thrown.
+
+This function will only be defined if an implementation is
+available for this system.
+
+shutil.get_terminal_size is the high-level function which should
+normally be used, os.get_terminal_size is the low-level implementation.
+[clinic start generated code]*/
+
+static PyObject *
+os_get_terminal_size_impl(PyObject *module, int fd)
+/*[clinic end generated code: output=fbab93acef980508 input=ead5679b82ddb920]*/
 {
     int columns, lines;
     PyObject *termsize;
 
-    int fd = fileno(stdout);
     /* Under some conditions stdout may not be connected and
      * fileno(stdout) may point to an invalid file descriptor. For example
      * GUI apps don't have valid standard streams by default.
@@ -12297,9 +12909,6 @@
      * the ioctl below will fail returning EBADF. This is what we want.
      */
 
-    if (!PyArg_ParseTuple(args, "|i", &fd))
-        return NULL;
-
 #ifdef TERMSIZE_USE_IOCTL
     {
         struct winsize w;
@@ -12339,7 +12948,8 @@
     }
 #endif /* TERMSIZE_USE_CONIO */
 
-    termsize = PyStructSequence_New(TerminalSizeType);
+    PyObject *TerminalSizeType = get_posix_state(module)->TerminalSizeType;
+    termsize = PyStructSequence_New((PyTypeObject *)TerminalSizeType);
     if (termsize == NULL)
         return NULL;
     PyStructSequence_SET_ITEM(termsize, 0, PyLong_FromLong(columns));
@@ -12369,8 +12979,6 @@
 {
     int ncpu = 0;
 #ifdef MS_WINDOWS
-    /* Declare prototype here to avoid pulling in all of the Win7 APIs in 3.8 */
-    DWORD WINAPI GetActiveProcessorCount(WORD group);
     ncpu = GetActiveProcessorCount(ALL_PROCESSOR_GROUPS);
 #elif defined(__hpux)
     ncpu = mpctl(MPC_GETNUMSPUS, NULL, NULL);
@@ -12539,9 +13147,9 @@
 
 
 /*[clinic input]
-class os.DirEntry "DirEntry *" "&DirEntryType"
+class os.DirEntry "DirEntry *" "DirEntryType"
 [clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=3138f09f7c683f1d]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=3c18c7a448247980]*/
 
 typedef struct {
     PyObject_HEAD
@@ -12562,29 +13170,43 @@
 #endif
 } DirEntry;
 
+static PyObject *
+_disabled_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyErr_Format(PyExc_TypeError,
+        "cannot create '%.100s' instances", _PyType_Name(type));
+    return NULL;
+}
+
 static void
 DirEntry_dealloc(DirEntry *entry)
 {
+    PyTypeObject *tp = Py_TYPE(entry);
     Py_XDECREF(entry->name);
     Py_XDECREF(entry->path);
     Py_XDECREF(entry->stat);
     Py_XDECREF(entry->lstat);
-    Py_TYPE(entry)->tp_free((PyObject *)entry);
+    freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
+    free_func(entry);
+    Py_DECREF(tp);
 }
 
 /* Forward reference */
 static int
-DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits);
+DirEntry_test_mode(PyTypeObject *defining_class, DirEntry *self,
+                   int follow_symlinks, unsigned short mode_bits);
 
 /*[clinic input]
 os.DirEntry.is_symlink -> bool
+    defining_class: defining_class
+    /
 
 Return True if the entry is a symbolic link; cached per entry.
 [clinic start generated code]*/
 
 static int
-os_DirEntry_is_symlink_impl(DirEntry *self)
-/*[clinic end generated code: output=42244667d7bcfc25 input=1605a1b4b96976c3]*/
+os_DirEntry_is_symlink_impl(DirEntry *self, PyTypeObject *defining_class)
+/*[clinic end generated code: output=293096d589b6d47c input=e9acc5ee4d511113]*/
 {
 #ifdef MS_WINDOWS
     return (self->win32_lstat.st_mode & S_IFMT) == S_IFLNK;
@@ -12593,15 +13215,15 @@
     if (self->d_type != DT_UNKNOWN)
         return self->d_type == DT_LNK;
     else
-        return DirEntry_test_mode(self, 0, S_IFLNK);
+        return DirEntry_test_mode(defining_class, self, 0, S_IFLNK);
 #else
     /* POSIX without d_type */
-    return DirEntry_test_mode(self, 0, S_IFLNK);
+    return DirEntry_test_mode(defining_class, self, 0, S_IFLNK);
 #endif
 }
 
 static PyObject *
-DirEntry_fetch_stat(DirEntry *self, int follow_symlinks)
+DirEntry_fetch_stat(PyObject *module, DirEntry *self, int follow_symlinks)
 {
     int result;
     STRUCT_STAT st;
@@ -12617,12 +13239,17 @@
     const char *path = PyBytes_AS_STRING(ub);
     if (self->dir_fd != DEFAULT_DIR_FD) {
 #ifdef HAVE_FSTATAT
+      if (HAVE_FSTATAT_RUNTIME) {
         result = fstatat(self->dir_fd, path, &st,
                          follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
-#else
+      } else
+
+#endif /* HAVE_FSTATAT */
+      {
+        Py_DECREF(ub);
         PyErr_SetString(PyExc_NotImplementedError, "can't fetch stat");
         return NULL;
-#endif /* HAVE_FSTATAT */
+      }
     }
     else
 #endif
@@ -12637,17 +13264,18 @@
     if (result != 0)
         return path_object_error(self->path);
 
-    return _pystat_fromstructstat(&st);
+    return _pystat_fromstructstat(module, &st);
 }
 
 static PyObject *
-DirEntry_get_lstat(DirEntry *self)
+DirEntry_get_lstat(PyTypeObject *defining_class, DirEntry *self)
 {
     if (!self->lstat) {
+        PyObject *module = PyType_GetModule(defining_class);
 #ifdef MS_WINDOWS
-        self->lstat = _pystat_fromstructstat(&self->win32_lstat);
+        self->lstat = _pystat_fromstructstat(module, &self->win32_lstat);
 #else /* POSIX */
-        self->lstat = DirEntry_fetch_stat(self, 0);
+        self->lstat = DirEntry_fetch_stat(module, self, 0);
 #endif
     }
     Py_XINCREF(self->lstat);
@@ -12656,6 +13284,8 @@
 
 /*[clinic input]
 os.DirEntry.stat
+    defining_class: defining_class
+    /
     *
     follow_symlinks: bool = True
 
@@ -12663,20 +13293,26 @@
 [clinic start generated code]*/
 
 static PyObject *
-os_DirEntry_stat_impl(DirEntry *self, int follow_symlinks)
-/*[clinic end generated code: output=008593b3a6d01305 input=280d14c1d6f1d00d]*/
+os_DirEntry_stat_impl(DirEntry *self, PyTypeObject *defining_class,
+                      int follow_symlinks)
+/*[clinic end generated code: output=23f803e19c3e780e input=e816273c4e67ee98]*/
 {
-    if (!follow_symlinks)
-        return DirEntry_get_lstat(self);
+    if (!follow_symlinks) {
+        return DirEntry_get_lstat(defining_class, self);
+    }
 
     if (!self->stat) {
-        int result = os_DirEntry_is_symlink_impl(self);
-        if (result == -1)
+        int result = os_DirEntry_is_symlink_impl(self, defining_class);
+        if (result == -1) {
             return NULL;
-        else if (result)
-            self->stat = DirEntry_fetch_stat(self, 1);
-        else
-            self->stat = DirEntry_get_lstat(self);
+        }
+        if (result) {
+            PyObject *module = PyType_GetModule(defining_class);
+            self->stat = DirEntry_fetch_stat(module, self, 1);
+        }
+        else {
+            self->stat = DirEntry_get_lstat(defining_class, self);
+        }
     }
 
     Py_XINCREF(self->stat);
@@ -12685,7 +13321,8 @@
 
 /* Set exception and return -1 on error, 0 for False, 1 for True */
 static int
-DirEntry_test_mode(DirEntry *self, int follow_symlinks, unsigned short mode_bits)
+DirEntry_test_mode(PyTypeObject *defining_class, DirEntry *self,
+                   int follow_symlinks, unsigned short mode_bits)
 {
     PyObject *stat = NULL;
     PyObject *st_mode = NULL;
@@ -12698,7 +13335,6 @@
 #ifdef MS_WINDOWS
     unsigned long dir_bits;
 #endif
-    _Py_IDENTIFIER(st_mode);
 
 #ifdef MS_WINDOWS
     is_symlink = (self->win32_lstat.st_mode & S_IFMT) == S_IFLNK;
@@ -12711,7 +13347,7 @@
 #if defined(MS_WINDOWS) || defined(HAVE_DIRENT_D_TYPE)
     if (need_stat) {
 #endif
-        stat = os_DirEntry_stat_impl(self, follow_symlinks);
+        stat = os_DirEntry_stat_impl(self, defining_class, follow_symlinks);
         if (!stat) {
             if (PyErr_ExceptionMatches(PyExc_FileNotFoundError)) {
                 /* If file doesn't exist (anymore), then return False
@@ -12721,7 +13357,8 @@
             }
             goto error;
         }
-        st_mode = _PyObject_GetAttrId(stat, &PyId_st_mode);
+        _posixstate* state = get_posix_state(PyType_GetModule(defining_class));
+        st_mode = PyObject_GetAttr(stat, state->st_mode);
         if (!st_mode)
             goto error;
 
@@ -12764,6 +13401,8 @@
 
 /*[clinic input]
 os.DirEntry.is_dir -> bool
+    defining_class: defining_class
+    /
     *
     follow_symlinks: bool = True
 
@@ -12771,14 +13410,17 @@
 [clinic start generated code]*/
 
 static int
-os_DirEntry_is_dir_impl(DirEntry *self, int follow_symlinks)
-/*[clinic end generated code: output=ad2e8d54365da287 input=0135232766f53f58]*/
+os_DirEntry_is_dir_impl(DirEntry *self, PyTypeObject *defining_class,
+                        int follow_symlinks)
+/*[clinic end generated code: output=0cd453b9c0987fdf input=1a4ffd6dec9920cb]*/
 {
-    return DirEntry_test_mode(self, follow_symlinks, S_IFDIR);
+    return DirEntry_test_mode(defining_class, self, follow_symlinks, S_IFDIR);
 }
 
 /*[clinic input]
 os.DirEntry.is_file -> bool
+    defining_class: defining_class
+    /
     *
     follow_symlinks: bool = True
 
@@ -12786,10 +13428,11 @@
 [clinic start generated code]*/
 
 static int
-os_DirEntry_is_file_impl(DirEntry *self, int follow_symlinks)
-/*[clinic end generated code: output=8462ade481d8a476 input=0dc90be168b041ee]*/
+os_DirEntry_is_file_impl(DirEntry *self, PyTypeObject *defining_class,
+                         int follow_symlinks)
+/*[clinic end generated code: output=f7c277ab5ba80908 input=0a64c5a12e802e3b]*/
 {
-    return DirEntry_test_mode(self, follow_symlinks, S_IFREG);
+    return DirEntry_test_mode(defining_class, self, follow_symlinks, S_IFREG);
 }
 
 /*[clinic input]
@@ -12866,42 +13509,29 @@
     OS_DIRENTRY_STAT_METHODDEF
     OS_DIRENTRY_INODE_METHODDEF
     OS_DIRENTRY___FSPATH___METHODDEF
+    {"__class_getitem__",       (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,          PyDoc_STR("See PEP 585")},
     {NULL}
 };
 
-static PyTypeObject DirEntryType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    MODNAME ".DirEntry",                    /* tp_name */
-    sizeof(DirEntry),                       /* tp_basicsize */
-    0,                                      /* tp_itemsize */
-    /* methods */
-    (destructor)DirEntry_dealloc,           /* tp_dealloc */
-    0,                                      /* tp_vectorcall_offset */
-    0,                                      /* tp_getattr */
-    0,                                      /* tp_setattr */
-    0,                                      /* tp_as_async */
-    (reprfunc)DirEntry_repr,                /* tp_repr */
-    0,                                      /* tp_as_number */
-    0,                                      /* tp_as_sequence */
-    0,                                      /* tp_as_mapping */
-    0,                                      /* tp_hash */
-    0,                                      /* tp_call */
-    0,                                      /* tp_str */
-    0,                                      /* tp_getattro */
-    0,                                      /* tp_setattro */
-    0,                                      /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                     /* tp_flags */
-    0,                                      /* tp_doc */
-    0,                                      /* tp_traverse */
-    0,                                      /* tp_clear */
-    0,                                      /* tp_richcompare */
-    0,                                      /* tp_weaklistoffset */
-    0,                                      /* tp_iter */
-    0,                                      /* tp_iternext */
-    DirEntry_methods,                       /* tp_methods */
-    DirEntry_members,                       /* tp_members */
+static PyType_Slot DirEntryType_slots[] = {
+    {Py_tp_new, _disabled_new},
+    {Py_tp_dealloc, DirEntry_dealloc},
+    {Py_tp_repr, DirEntry_repr},
+    {Py_tp_methods, DirEntry_methods},
+    {Py_tp_members, DirEntry_members},
+    {0, 0},
 };
 
+static PyType_Spec DirEntryType_spec = {
+    MODNAME ".DirEntry",
+    sizeof(DirEntry),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    DirEntryType_slots
+};
+
+
 #ifdef MS_WINDOWS
 
 static wchar_t *
@@ -12938,14 +13568,15 @@
 }
 
 static PyObject *
-DirEntry_from_find_data(path_t *path, WIN32_FIND_DATAW *dataW)
+DirEntry_from_find_data(PyObject *module, path_t *path, WIN32_FIND_DATAW *dataW)
 {
     DirEntry *entry;
     BY_HANDLE_FILE_INFORMATION file_info;
     ULONG reparse_tag;
     wchar_t *joined_path;
 
-    entry = PyObject_New(DirEntry, &DirEntryType);
+    PyObject *DirEntryType = get_posix_state(module)->DirEntryType;
+    entry = PyObject_New(DirEntry, (PyTypeObject *)DirEntryType);
     if (!entry)
         return NULL;
     entry->name = NULL;
@@ -13022,8 +13653,8 @@
 }
 
 static PyObject *
-DirEntry_from_posix_info(path_t *path, const char *name, Py_ssize_t name_len,
-                         ino_t d_ino
+DirEntry_from_posix_info(PyObject *module, path_t *path, const char *name,
+                         Py_ssize_t name_len, ino_t d_ino
 #ifdef HAVE_DIRENT_D_TYPE
                          , unsigned char d_type
 #endif
@@ -13032,7 +13663,8 @@
     DirEntry *entry;
     char *joined_path;
 
-    entry = PyObject_New(DirEntry, &DirEntryType);
+    PyObject *DirEntryType = get_posix_state(module)->DirEntryType;
+    entry = PyObject_New(DirEntry, (PyTypeObject *)DirEntryType);
     if (!entry)
         return NULL;
     entry->name = NULL;
@@ -13151,8 +13783,10 @@
 
         /* Skip over . and .. */
         if (wcscmp(file_data->cFileName, L".") != 0 &&
-            wcscmp(file_data->cFileName, L"..") != 0) {
-            entry = DirEntry_from_find_data(&iterator->path, file_data);
+            wcscmp(file_data->cFileName, L"..") != 0)
+        {
+            PyObject *module = PyType_GetModule(Py_TYPE(iterator));
+            entry = DirEntry_from_find_data(module, &iterator->path, file_data);
             if (!entry)
                 break;
             return entry;
@@ -13223,10 +13857,12 @@
         is_dot = direntp->d_name[0] == '.' &&
                  (name_len == 1 || (direntp->d_name[1] == '.' && name_len == 2));
         if (!is_dot) {
-            entry = DirEntry_from_posix_info(&iterator->path, direntp->d_name,
-                                            name_len, direntp->d_ino
+            PyObject *module = PyType_GetModule(Py_TYPE(iterator));
+            entry = DirEntry_from_posix_info(module,
+                                             &iterator->path, direntp->d_name,
+                                             name_len, direntp->d_ino
 #ifdef HAVE_DIRENT_D_TYPE
-                                            , direntp->d_type
+                                             , direntp->d_type
 #endif
                                             );
             if (!entry)
@@ -13294,10 +13930,13 @@
 static void
 ScandirIterator_dealloc(ScandirIterator *iterator)
 {
+    PyTypeObject *tp = Py_TYPE(iterator);
     if (PyObject_CallFinalizerFromDealloc((PyObject *)iterator) < 0)
         return;
 
-    Py_TYPE(iterator)->tp_free((PyObject *)iterator);
+    freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
+    free_func(iterator);
+    Py_DECREF(tp);
 }
 
 static PyMethodDef ScandirIterator_methods[] = {
@@ -13307,56 +13946,24 @@
     {NULL}
 };
 
-static PyTypeObject ScandirIteratorType = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    MODNAME ".ScandirIterator",             /* tp_name */
-    sizeof(ScandirIterator),                /* tp_basicsize */
-    0,                                      /* tp_itemsize */
-    /* methods */
-    (destructor)ScandirIterator_dealloc,    /* tp_dealloc */
-    0,                                      /* tp_vectorcall_offset */
-    0,                                      /* tp_getattr */
-    0,                                      /* tp_setattr */
-    0,                                      /* tp_as_async */
-    0,                                      /* tp_repr */
-    0,                                      /* tp_as_number */
-    0,                                      /* tp_as_sequence */
-    0,                                      /* tp_as_mapping */
-    0,                                      /* tp_hash */
-    0,                                      /* tp_call */
-    0,                                      /* tp_str */
-    0,                                      /* tp_getattro */
-    0,                                      /* tp_setattro */
-    0,                                      /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                     /* tp_flags */
-    0,                                      /* tp_doc */
-    0,                                      /* tp_traverse */
-    0,                                      /* tp_clear */
-    0,                                      /* tp_richcompare */
-    0,                                      /* tp_weaklistoffset */
-    PyObject_SelfIter,                      /* tp_iter */
-    (iternextfunc)ScandirIterator_iternext, /* tp_iternext */
-    ScandirIterator_methods,                /* tp_methods */
-    0,                                      /* tp_members */
-    0,                                      /* tp_getset */
-    0,                                      /* tp_base */
-    0,                                      /* tp_dict */
-    0,                                      /* tp_descr_get */
-    0,                                      /* tp_descr_set */
-    0,                                      /* tp_dictoffset */
-    0,                                      /* tp_init */
-    0,                                      /* tp_alloc */
-    0,                                      /* tp_new */
-    0,                                      /* tp_free */
-    0,                                      /* tp_is_gc */
-    0,                                      /* tp_bases */
-    0,                                      /* tp_mro */
-    0,                                      /* tp_cache */
-    0,                                      /* tp_subclasses */
-    0,                                      /* tp_weaklist */
-    0,                                      /* tp_del */
-    0,                                      /* tp_version_tag */
-    (destructor)ScandirIterator_finalize,   /* tp_finalize */
+static PyType_Slot ScandirIteratorType_slots[] = {
+    {Py_tp_new, _disabled_new},
+    {Py_tp_dealloc, ScandirIterator_dealloc},
+    {Py_tp_finalize, ScandirIterator_finalize},
+    {Py_tp_iter, PyObject_SelfIter},
+    {Py_tp_iternext, ScandirIterator_iternext},
+    {Py_tp_methods, ScandirIterator_methods},
+    {0, 0},
+};
+
+static PyType_Spec ScandirIteratorType_spec = {
+    MODNAME ".ScandirIterator",
+    sizeof(ScandirIterator),
+    0,
+    // bpo-40549: Py_TPFLAGS_BASETYPE should not be used, since
+    // PyType_GetModule(Py_TYPE(self)) doesn't work on a subclass instance.
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_FINALIZE,
+    ScandirIteratorType_slots
 };
 
 /*[clinic input]
@@ -13392,7 +13999,8 @@
         return NULL;
     }
 
-    iterator = PyObject_New(ScandirIterator, &ScandirIteratorType);
+    PyObject *ScandirIteratorType = get_posix_state(module)->ScandirIteratorType;
+    iterator = PyObject_New(ScandirIterator, (PyTypeObject *)ScandirIteratorType);
     if (!iterator)
         return NULL;
 
@@ -13427,7 +14035,8 @@
 #else /* POSIX */
     errno = 0;
 #ifdef HAVE_FDOPENDIR
-    if (path->fd != -1) {
+    if (iterator->path.fd != -1) {
+      if (HAVE_FDOPENDIR_RUNTIME) {
         /* closedir() closes the FD, so we duplicate it */
         fd = _Py_dup(path->fd);
         if (fd == -1)
@@ -13436,6 +14045,11 @@
         Py_BEGIN_ALLOW_THREADS
         iterator->dirp = fdopendir(fd);
         Py_END_ALLOW_THREADS
+      } else {
+        PyErr_SetString(PyExc_TypeError,
+            "scandir: path should be string, bytes, os.PathLike or None, not int");
+        return NULL;
+      }
     }
     else
 #endif
@@ -13482,7 +14096,6 @@
 {
     /* For error message reasons, this function is manually inlined in
        path_converter(). */
-    _Py_IDENTIFIER(__fspath__);
     PyObject *func = NULL;
     PyObject *path_repr = NULL;
 
@@ -13496,7 +14109,7 @@
         return PyErr_Format(PyExc_TypeError,
                             "expected str, bytes or os.PathLike object, "
                             "not %.200s",
-                            Py_TYPE(path)->tp_name);
+                            _PyType_Name(Py_TYPE(path)));
     }
 
     path_repr = _PyObject_CallNoArg(func);
@@ -13508,8 +14121,8 @@
     if (!(PyUnicode_Check(path_repr) || PyBytes_Check(path_repr))) {
         PyErr_Format(PyExc_TypeError,
                      "expected %.200s.__fspath__() to return str or bytes, "
-                     "not %.200s", Py_TYPE(path)->tp_name,
-                     Py_TYPE(path_repr)->tp_name);
+                     "not %.200s", _PyType_Name(Py_TYPE(path)),
+                     _PyType_Name(Py_TYPE(path_repr)));
         Py_DECREF(path_repr);
         return NULL;
     }
@@ -13709,6 +14322,105 @@
 
 #endif
 
+
+/* Only check if WIFEXITED is available: expect that it comes
+   with WEXITSTATUS, WIFSIGNALED, etc.
+
+   os.waitstatus_to_exitcode() is implemented in C and not in Python, so
+   subprocess can safely call it during late Python finalization without
+   risking that used os attributes were set to None by _PyImport_Cleanup(). */
+#if defined(WIFEXITED) || defined(MS_WINDOWS)
+/*[clinic input]
+os.waitstatus_to_exitcode
+
+    status as status_obj: object
+
+Convert a wait status to an exit code.
+
+On Unix:
+
+* If WIFEXITED(status) is true, return WEXITSTATUS(status).
+* If WIFSIGNALED(status) is true, return -WTERMSIG(status).
+* Otherwise, raise a ValueError.
+
+On Windows, return status shifted right by 8 bits.
+
+On Unix, if the process is being traced or if waitpid() was called with
+WUNTRACED option, the caller must first check if WIFSTOPPED(status) is true.
+This function must not be called if WIFSTOPPED(status) is true.
+[clinic start generated code]*/
+
+static PyObject *
+os_waitstatus_to_exitcode_impl(PyObject *module, PyObject *status_obj)
+/*[clinic end generated code: output=db50b1b0ba3c7153 input=7fe2d7fdaea3db42]*/
+{
+    if (PyFloat_Check(status_obj)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "integer argument expected, got float" );
+        return NULL;
+    }
+#ifndef MS_WINDOWS
+    int status = _PyLong_AsInt(status_obj);
+    if (status == -1 && PyErr_Occurred()) {
+        return NULL;
+    }
+
+    WAIT_TYPE wait_status;
+    WAIT_STATUS_INT(wait_status) = status;
+    int exitcode;
+    if (WIFEXITED(wait_status)) {
+        exitcode = WEXITSTATUS(wait_status);
+        /* Sanity check to provide warranty on the function behavior.
+           It should not occur in practice */
+        if (exitcode < 0) {
+            PyErr_Format(PyExc_ValueError, "invalid WEXITSTATUS: %i", exitcode);
+            return NULL;
+        }
+    }
+    else if (WIFSIGNALED(wait_status)) {
+        int signum = WTERMSIG(wait_status);
+        /* Sanity check to provide warranty on the function behavior.
+           It should not occurs in practice */
+        if (signum <= 0) {
+            PyErr_Format(PyExc_ValueError, "invalid WTERMSIG: %i", signum);
+            return NULL;
+        }
+        exitcode = -signum;
+    } else if (WIFSTOPPED(wait_status)) {
+        /* Status only received if the process is being traced
+           or if waitpid() was called with WUNTRACED option. */
+        int signum = WSTOPSIG(wait_status);
+        PyErr_Format(PyExc_ValueError,
+                     "process stopped by delivery of signal %i",
+                     signum);
+        return NULL;
+    }
+    else {
+        PyErr_Format(PyExc_ValueError, "invalid wait status: %i", status);
+        return NULL;
+    }
+    return PyLong_FromLong(exitcode);
+#else
+    /* Windows implementation: see os.waitpid() implementation
+       which uses _cwait(). */
+    unsigned long long status = PyLong_AsUnsignedLongLong(status_obj);
+    if (status == (unsigned long long)-1 && PyErr_Occurred()) {
+        return NULL;
+    }
+
+    unsigned long long exitcode = (status >> 8);
+    /* ExitProcess() accepts an UINT type:
+       reject exit code which doesn't fit in an UINT */
+    if (exitcode > UINT_MAX) {
+        PyErr_Format(PyExc_ValueError, "invalid exit code: %llu", exitcode);
+        return NULL;
+    }
+    return PyLong_FromUnsignedLong((unsigned long)exitcode);
+#endif
+}
+#endif
+
+
 static PyMethodDef posix_methods[] = {
 
     OS_STAT_METHODDEF
@@ -13773,9 +14485,7 @@
     OS_GETEGID_METHODDEF
     OS_GETEUID_METHODDEF
     OS_GETGID_METHODDEF
-#ifdef HAVE_GETGROUPLIST
-    {"getgrouplist",    posix_getgrouplist, METH_VARARGS, posix_getgrouplist__doc__},
-#endif
+    OS_GETGROUPLIST_METHODDEF
     OS_GETGROUPS_METHODDEF
     OS_GETPID_METHODDEF
     OS_GETPGRP_METHODDEF
@@ -13785,9 +14495,7 @@
     OS_KILL_METHODDEF
     OS_KILLPG_METHODDEF
     OS_PLOCK_METHODDEF
-#ifdef MS_WINDOWS
     OS_STARTFILE_METHODDEF
-#endif
     OS_SETUID_METHODDEF
     OS_SETEUID_METHODDEF
     OS_SETREUID_METHODDEF
@@ -13795,9 +14503,7 @@
     OS_SETEGID_METHODDEF
     OS_SETREGID_METHODDEF
     OS_SETGROUPS_METHODDEF
-#ifdef HAVE_INITGROUPS
-    {"initgroups",      posix_initgroups, METH_VARARGS, posix_initgroups__doc__},
-#endif /* HAVE_INITGROUPS */
+    OS_INITGROUPS_METHODDEF
     OS_GETPGID_METHODDEF
     OS_SETPGRP_METHODDEF
     OS_WAIT_METHODDEF
@@ -13805,6 +14511,7 @@
     OS_WAIT4_METHODDEF
     OS_WAITID_METHODDEF
     OS_WAITPID_METHODDEF
+    OS_PIDFD_OPEN_METHODDEF
     OS_GETSID_METHODDEF
     OS_SETSID_METHODDEF
     OS_SETPGID_METHODDEF
@@ -13826,10 +14533,7 @@
     OS_WRITEV_METHODDEF
     OS_PWRITE_METHODDEF
     OS_PWRITEV_METHODDEF
-#ifdef HAVE_SENDFILE
-    {"sendfile",        (PyCFunction)(void(*)(void))posix_sendfile, METH_VARARGS | METH_KEYWORDS,
-                            posix_sendfile__doc__},
-#endif
+    OS_SENDFILE_METHODDEF
     OS_FSTAT_METHODDEF
     OS_ISATTY_METHODDEF
     OS_PIPE_METHODDEF
@@ -13881,26 +14585,21 @@
     OS_REMOVEXATTR_METHODDEF
     OS_LISTXATTR_METHODDEF
 
-#if defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)
-    {"get_terminal_size", get_terminal_size, METH_VARARGS, termsize__doc__},
-#endif
+    OS_GET_TERMINAL_SIZE_METHODDEF
     OS_CPU_COUNT_METHODDEF
     OS_GET_INHERITABLE_METHODDEF
     OS_SET_INHERITABLE_METHODDEF
     OS_GET_HANDLE_INHERITABLE_METHODDEF
     OS_SET_HANDLE_INHERITABLE_METHODDEF
-#ifndef MS_WINDOWS
     OS_GET_BLOCKING_METHODDEF
     OS_SET_BLOCKING_METHODDEF
-#endif
     OS_SCANDIR_METHODDEF
     OS_FSPATH_METHODDEF
     OS_GETRANDOM_METHODDEF
     OS_MEMFD_CREATE_METHODDEF
-#ifdef MS_WINDOWS
     OS__ADD_DLL_DIRECTORY_METHODDEF
     OS__REMOVE_DLL_DIRECTORY_METHODDEF
-#endif
+    OS_WAITSTATUS_TO_EXITCODE_METHODDEF
     {NULL,              NULL}            /* Sentinel */
 };
 
@@ -14208,6 +14907,9 @@
     if (PyModule_AddIntMacro(m, P_PID)) return -1;
     if (PyModule_AddIntMacro(m, P_PGID)) return -1;
     if (PyModule_AddIntMacro(m, P_ALL)) return -1;
+#ifdef P_PIDFD
+    if (PyModule_AddIntMacro(m, P_PIDFD)) return -1;
+#endif
 #endif
 #ifdef WEXITED
     if (PyModule_AddIntMacro(m, WEXITED)) return -1;
@@ -14221,12 +14923,18 @@
 #ifdef CLD_EXITED
     if (PyModule_AddIntMacro(m, CLD_EXITED)) return -1;
 #endif
+#ifdef CLD_KILLED
+    if (PyModule_AddIntMacro(m, CLD_KILLED)) return -1;
+#endif
 #ifdef CLD_DUMPED
     if (PyModule_AddIntMacro(m, CLD_DUMPED)) return -1;
 #endif
 #ifdef CLD_TRAPPED
     if (PyModule_AddIntMacro(m, CLD_TRAPPED)) return -1;
 #endif
+#ifdef CLD_STOPPED
+    if (PyModule_AddIntMacro(m, CLD_STOPPED)) return -1;
+#endif
 #ifdef CLD_CONTINUED
     if (PyModule_AddIntMacro(m, CLD_CONTINUED)) return -1;
 #endif
@@ -14412,314 +15120,357 @@
 }
 
 
-static struct PyModuleDef posixmodule = {
-    PyModuleDef_HEAD_INIT,
-    MODNAME,
-    posix__doc__,
-    -1,
-    posix_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
 
+#define PROBE(name, test) \
+   static int name(void)  \
+   {                      \
+      if (test) {        \
+          return 1;       \
+      } else {            \
+          return 0;       \
+      }                   \
+   }
 
-static const char * const have_functions[] = {
+#ifdef HAVE_FSTATAT
+PROBE(probe_fstatat, HAVE_FSTATAT_RUNTIME)
+#endif
 
 #ifdef HAVE_FACCESSAT
-    "HAVE_FACCESSAT",
-#endif
-
-#ifdef HAVE_FCHDIR
-    "HAVE_FCHDIR",
-#endif
-
-#ifdef HAVE_FCHMOD
-    "HAVE_FCHMOD",
+PROBE(probe_faccessat, HAVE_FACCESSAT_RUNTIME)
 #endif
 
 #ifdef HAVE_FCHMODAT
-    "HAVE_FCHMODAT",
-#endif
-
-#ifdef HAVE_FCHOWN
-    "HAVE_FCHOWN",
+PROBE(probe_fchmodat, HAVE_FCHMODAT_RUNTIME)
 #endif
 
 #ifdef HAVE_FCHOWNAT
-    "HAVE_FCHOWNAT",
-#endif
-
-#ifdef HAVE_FEXECVE
-    "HAVE_FEXECVE",
-#endif
-
-#ifdef HAVE_FDOPENDIR
-    "HAVE_FDOPENDIR",
-#endif
-
-#ifdef HAVE_FPATHCONF
-    "HAVE_FPATHCONF",
-#endif
-
-#ifdef HAVE_FSTATAT
-    "HAVE_FSTATAT",
-#endif
-
-#ifdef HAVE_FSTATVFS
-    "HAVE_FSTATVFS",
-#endif
-
-#if defined HAVE_FTRUNCATE || defined MS_WINDOWS
-    "HAVE_FTRUNCATE",
-#endif
-
-#ifdef HAVE_FUTIMENS
-    "HAVE_FUTIMENS",
-#endif
-
-#ifdef HAVE_FUTIMES
-    "HAVE_FUTIMES",
-#endif
-
-#ifdef HAVE_FUTIMESAT
-    "HAVE_FUTIMESAT",
+PROBE(probe_fchownat, HAVE_FCHOWNAT_RUNTIME)
 #endif
 
 #ifdef HAVE_LINKAT
-    "HAVE_LINKAT",
+PROBE(probe_linkat, HAVE_LINKAT_RUNTIME)
 #endif
 
-#ifdef HAVE_LCHFLAGS
-    "HAVE_LCHFLAGS",
-#endif
-
-#ifdef HAVE_LCHMOD
-    "HAVE_LCHMOD",
-#endif
-
-#ifdef HAVE_LCHOWN
-    "HAVE_LCHOWN",
-#endif
-
-#ifdef HAVE_LSTAT
-    "HAVE_LSTAT",
-#endif
-
-#ifdef HAVE_LUTIMES
-    "HAVE_LUTIMES",
-#endif
-
-#ifdef HAVE_MEMFD_CREATE
-    "HAVE_MEMFD_CREATE",
+#ifdef HAVE_FDOPENDIR
+PROBE(probe_fdopendir, HAVE_FDOPENDIR_RUNTIME)
 #endif
 
 #ifdef HAVE_MKDIRAT
-    "HAVE_MKDIRAT",
-#endif
-
-#ifdef HAVE_MKFIFOAT
-    "HAVE_MKFIFOAT",
-#endif
-
-#ifdef HAVE_MKNODAT
-    "HAVE_MKNODAT",
-#endif
-
-#ifdef HAVE_OPENAT
-    "HAVE_OPENAT",
-#endif
-
-#ifdef HAVE_READLINKAT
-    "HAVE_READLINKAT",
+PROBE(probe_mkdirat, HAVE_MKDIRAT_RUNTIME)
 #endif
 
 #ifdef HAVE_RENAMEAT
-    "HAVE_RENAMEAT",
-#endif
-
-#ifdef HAVE_SYMLINKAT
-    "HAVE_SYMLINKAT",
+PROBE(probe_renameat, HAVE_RENAMEAT_RUNTIME)
 #endif
 
 #ifdef HAVE_UNLINKAT
-    "HAVE_UNLINKAT",
+PROBE(probe_unlinkat, HAVE_UNLINKAT_RUNTIME)
+#endif
+
+#ifdef HAVE_OPENAT
+PROBE(probe_openat, HAVE_OPENAT_RUNTIME)
+#endif
+
+#ifdef HAVE_READLINKAT
+PROBE(probe_readlinkat, HAVE_READLINKAT_RUNTIME)
+#endif
+
+#ifdef HAVE_SYMLINKAT
+PROBE(probe_symlinkat, HAVE_SYMLINKAT_RUNTIME)
+#endif
+
+#ifdef HAVE_FUTIMENS
+PROBE(probe_futimens, HAVE_FUTIMENS_RUNTIME)
 #endif
 
 #ifdef HAVE_UTIMENSAT
-    "HAVE_UTIMENSAT",
+PROBE(probe_utimensat, HAVE_UTIMENSAT_RUNTIME)
+#endif
+
+
+
+
+static const struct have_function {
+    const char * const label;
+    int (*probe)(void);
+} have_functions[] = {
+
+#ifdef HAVE_FACCESSAT
+    { "HAVE_FACCESSAT", probe_faccessat },
+#endif
+
+#ifdef HAVE_FCHDIR
+    { "HAVE_FCHDIR", NULL },
+#endif
+
+#ifdef HAVE_FCHMOD
+    { "HAVE_FCHMOD", NULL },
+#endif
+
+#ifdef HAVE_FCHMODAT
+    { "HAVE_FCHMODAT", probe_fchmodat },
+#endif
+
+#ifdef HAVE_FCHOWN
+    { "HAVE_FCHOWN", NULL },
+#endif
+
+#ifdef HAVE_FCHOWNAT
+    { "HAVE_FCHOWNAT", probe_fchownat },
+#endif
+
+#ifdef HAVE_FEXECVE
+    { "HAVE_FEXECVE", NULL },
+#endif
+
+#ifdef HAVE_FDOPENDIR
+    { "HAVE_FDOPENDIR", probe_fdopendir },
+#endif
+
+#ifdef HAVE_FPATHCONF
+    { "HAVE_FPATHCONF", NULL },
+#endif
+
+#ifdef HAVE_FSTATAT
+    { "HAVE_FSTATAT", probe_fstatat },
+#endif
+
+#ifdef HAVE_FSTATVFS
+    { "HAVE_FSTATVFS", NULL },
+#endif
+
+#if defined HAVE_FTRUNCATE || defined MS_WINDOWS
+    { "HAVE_FTRUNCATE", NULL },
+#endif
+
+#ifdef HAVE_FUTIMENS
+    { "HAVE_FUTIMENS", probe_futimens },
+#endif
+
+#ifdef HAVE_FUTIMES
+    { "HAVE_FUTIMES", NULL },
+#endif
+
+#ifdef HAVE_FUTIMESAT
+    { "HAVE_FUTIMESAT", NULL },
+#endif
+
+#ifdef HAVE_LINKAT
+    { "HAVE_LINKAT", probe_linkat },
+#endif
+
+#ifdef HAVE_LCHFLAGS
+    { "HAVE_LCHFLAGS", NULL },
+#endif
+
+#ifdef HAVE_LCHMOD
+    { "HAVE_LCHMOD", NULL },
+#endif
+
+#ifdef HAVE_LCHOWN
+    { "HAVE_LCHOWN", NULL },
+#endif
+
+#ifdef HAVE_LSTAT
+    { "HAVE_LSTAT", NULL },
+#endif
+
+#ifdef HAVE_LUTIMES
+    { "HAVE_LUTIMES", NULL },
+#endif
+
+#ifdef HAVE_MEMFD_CREATE
+    { "HAVE_MEMFD_CREATE", NULL },
+#endif
+
+#ifdef HAVE_MKDIRAT
+    { "HAVE_MKDIRAT", probe_mkdirat },
+#endif
+
+#ifdef HAVE_MKFIFOAT
+    { "HAVE_MKFIFOAT", NULL },
+#endif
+
+#ifdef HAVE_MKNODAT
+    { "HAVE_MKNODAT", NULL },
+#endif
+
+#ifdef HAVE_OPENAT
+    { "HAVE_OPENAT", probe_openat },
+#endif
+
+#ifdef HAVE_READLINKAT
+    { "HAVE_READLINKAT", probe_readlinkat },
+#endif
+
+#ifdef HAVE_RENAMEAT
+    { "HAVE_RENAMEAT", probe_renameat },
+#endif
+
+#ifdef HAVE_SYMLINKAT
+    { "HAVE_SYMLINKAT", probe_symlinkat },
+#endif
+
+#ifdef HAVE_UNLINKAT
+    { "HAVE_UNLINKAT", probe_unlinkat },
+#endif
+
+#ifdef HAVE_UTIMENSAT
+    { "HAVE_UTIMENSAT", probe_utimensat },
 #endif
 
 #ifdef MS_WINDOWS
-    "MS_WINDOWS",
+    { "MS_WINDOWS", NULL },
 #endif
 
-    NULL
+    { NULL, NULL }
 };
 
 
-PyMODINIT_FUNC
-INITFUNC(void)
+static int
+posixmodule_exec(PyObject *m)
 {
-    PyObject *m, *v;
-    PyObject *list;
-    const char * const *trace;
+    _posixstate *state = get_posix_state(m);
 
-    m = PyModule_Create(&posixmodule);
-    if (m == NULL)
-        return NULL;
+#if defined(HAVE_PWRITEV)
+    if (HAVE_PWRITEV_RUNTIME) {} else {
+        PyObject* dct = PyModule_GetDict(m);
+
+        if (dct == NULL) {
+            return -1;
+        }
+
+        if (PyDict_DelItemString(dct, "pwritev") == -1) {
+            PyErr_Clear();
+        }
+        if (PyDict_DelItemString(dct, "preadv") == -1) {
+            PyErr_Clear();
+        }
+    }
+#endif
 
     /* Initialize environ dictionary */
-    v = convertenviron();
+    PyObject *v = convertenviron();
     Py_XINCREF(v);
     if (v == NULL || PyModule_AddObject(m, "environ", v) != 0)
-        return NULL;
+        return -1;
     Py_DECREF(v);
 
     if (all_ins(m))
-        return NULL;
+        return -1;
 
     if (setup_confname_tables(m))
-        return NULL;
+        return -1;
 
     Py_INCREF(PyExc_OSError);
     PyModule_AddObject(m, "error", PyExc_OSError);
 
-#ifdef HAVE_PUTENV
-    if (posix_putenv_garbage == NULL)
-        posix_putenv_garbage = PyDict_New();
-#endif
-
-    if (!initialized) {
 #if defined(HAVE_WAITID) && !defined(__APPLE__)
-        waitid_result_desc.name = MODNAME ".waitid_result";
-        WaitidResultType = PyStructSequence_NewType(&waitid_result_desc);
-        if (WaitidResultType == NULL) {
-            return NULL;
-        }
+    waitid_result_desc.name = MODNAME ".waitid_result";
+    PyObject *WaitidResultType = (PyObject *)PyStructSequence_NewType(&waitid_result_desc);
+    if (WaitidResultType == NULL) {
+        return -1;
+    }
+    Py_INCREF(WaitidResultType);
+    PyModule_AddObject(m, "waitid_result", WaitidResultType);
+    state->WaitidResultType = WaitidResultType;
 #endif
 
-        stat_result_desc.name = "os.stat_result"; /* see issue #19209 */
-        stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
-        stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
-        stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
-        StatResultType = PyStructSequence_NewType(&stat_result_desc);
-        if (StatResultType == NULL) {
-            return NULL;
-        }
-        structseq_new = StatResultType->tp_new;
-        StatResultType->tp_new = statresult_new;
+    stat_result_desc.name = "os.stat_result"; /* see issue #19209 */
+    stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
+    stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
+    stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
+    PyObject *StatResultType = (PyObject *)PyStructSequence_NewType(&stat_result_desc);
+    if (StatResultType == NULL) {
+        return -1;
+    }
+    Py_INCREF(StatResultType);
+    PyModule_AddObject(m, "stat_result", StatResultType);
+    state->StatResultType = StatResultType;
+    structseq_new = ((PyTypeObject *)StatResultType)->tp_new;
+    ((PyTypeObject *)StatResultType)->tp_new = statresult_new;
 
-        statvfs_result_desc.name = "os.statvfs_result"; /* see issue #19209 */
-        StatVFSResultType = PyStructSequence_NewType(&statvfs_result_desc);
-        if (StatVFSResultType == NULL) {
-            return NULL;
-        }
+    statvfs_result_desc.name = "os.statvfs_result"; /* see issue #19209 */
+    PyObject *StatVFSResultType = (PyObject *)PyStructSequence_NewType(&statvfs_result_desc);
+    if (StatVFSResultType == NULL) {
+        return -1;
+    }
+    Py_INCREF(StatVFSResultType);
+    PyModule_AddObject(m, "statvfs_result", StatVFSResultType);
+    state->StatVFSResultType = StatVFSResultType;
 #ifdef NEED_TICKS_PER_SECOND
 #  if defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)
-        ticks_per_second = sysconf(_SC_CLK_TCK);
+    ticks_per_second = sysconf(_SC_CLK_TCK);
 #  elif defined(HZ)
-        ticks_per_second = HZ;
+    ticks_per_second = HZ;
 #  else
-        ticks_per_second = 60; /* magic fallback value; may be bogus */
+    ticks_per_second = 60; /* magic fallback value; may be bogus */
 #  endif
 #endif
 
 #if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
-        sched_param_desc.name = MODNAME ".sched_param";
-        SchedParamType = PyStructSequence_NewType(&sched_param_desc);
-        if (SchedParamType == NULL) {
-            return NULL;
-        }
-        SchedParamType->tp_new = os_sched_param;
-#endif
-
-        /* initialize TerminalSize_info */
-        TerminalSizeType = PyStructSequence_NewType(&TerminalSize_desc);
-        if (TerminalSizeType == NULL) {
-            return NULL;
-        }
-
-        /* initialize scandir types */
-        if (PyType_Ready(&ScandirIteratorType) < 0)
-            return NULL;
-        if (PyType_Ready(&DirEntryType) < 0)
-            return NULL;
+    sched_param_desc.name = MODNAME ".sched_param";
+    PyObject *SchedParamType = (PyObject *)PyStructSequence_NewType(&sched_param_desc);
+    if (SchedParamType == NULL) {
+        return -1;
     }
-#if defined(HAVE_WAITID) && !defined(__APPLE__)
-    Py_INCREF((PyObject*) WaitidResultType);
-    PyModule_AddObject(m, "waitid_result", (PyObject*) WaitidResultType);
-#endif
-    Py_INCREF((PyObject*) StatResultType);
-    PyModule_AddObject(m, "stat_result", (PyObject*) StatResultType);
-    Py_INCREF((PyObject*) StatVFSResultType);
-    PyModule_AddObject(m, "statvfs_result",
-                       (PyObject*) StatVFSResultType);
-
-#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER)
     Py_INCREF(SchedParamType);
-    PyModule_AddObject(m, "sched_param", (PyObject *)SchedParamType);
+    PyModule_AddObject(m, "sched_param", SchedParamType);
+    state->SchedParamType = SchedParamType;
+    ((PyTypeObject *)SchedParamType)->tp_new = os_sched_param;
 #endif
 
+    /* initialize TerminalSize_info */
+    PyObject *TerminalSizeType = (PyObject *)PyStructSequence_NewType(&TerminalSize_desc);
+    if (TerminalSizeType == NULL) {
+        return -1;
+    }
+    Py_INCREF(TerminalSizeType);
+    PyModule_AddObject(m, "terminal_size", TerminalSizeType);
+    state->TerminalSizeType = TerminalSizeType;
+
+    /* initialize scandir types */
+    PyObject *ScandirIteratorType = PyType_FromModuleAndSpec(m, &ScandirIteratorType_spec, NULL);
+    if (ScandirIteratorType == NULL) {
+        return -1;
+    }
+    state->ScandirIteratorType = ScandirIteratorType;
+
+    PyObject *DirEntryType = PyType_FromModuleAndSpec(m, &DirEntryType_spec, NULL);
+    if (DirEntryType == NULL) {
+        return -1;
+    }
+    Py_INCREF(DirEntryType);
+    PyModule_AddObject(m, "DirEntry", DirEntryType);
+    state->DirEntryType = DirEntryType;
+
     times_result_desc.name = MODNAME ".times_result";
-    TimesResultType = PyStructSequence_NewType(&times_result_desc);
+    PyObject *TimesResultType = (PyObject *)PyStructSequence_NewType(&times_result_desc);
     if (TimesResultType == NULL) {
-        return NULL;
+        return -1;
     }
-    PyModule_AddObject(m, "times_result", (PyObject *)TimesResultType);
+    Py_INCREF(TimesResultType);
+    PyModule_AddObject(m, "times_result", TimesResultType);
+    state->TimesResultType = TimesResultType;
 
-    uname_result_desc.name = MODNAME ".uname_result";
-    UnameResultType = PyStructSequence_NewType(&uname_result_desc);
+    PyTypeObject *UnameResultType = PyStructSequence_NewType(&uname_result_desc);
     if (UnameResultType == NULL) {
-        return NULL;
+        return -1;
     }
+    Py_INCREF(UnameResultType);
     PyModule_AddObject(m, "uname_result", (PyObject *)UnameResultType);
+    state->UnameResultType = (PyObject *)UnameResultType;
 
-#ifdef __APPLE__
-    /*
-     * Step 2 of weak-linking support on Mac OS X.
-     *
-     * The code below removes functions that are not available on the
-     * currently active platform.
-     *
-     * This block allow one to use a python binary that was build on
-     * OSX 10.4 on OSX 10.3, without losing access to new APIs on
-     * OSX 10.4.
-     */
-#ifdef HAVE_FSTATVFS
-    if (fstatvfs == NULL) {
-        if (PyObject_DelAttrString(m, "fstatvfs") == -1) {
-            return NULL;
-        }
-    }
-#endif /* HAVE_FSTATVFS */
-
-#ifdef HAVE_STATVFS
-    if (statvfs == NULL) {
-        if (PyObject_DelAttrString(m, "statvfs") == -1) {
-            return NULL;
-        }
-    }
-#endif /* HAVE_STATVFS */
-
-# ifdef HAVE_LCHOWN
-    if (lchown == NULL) {
-        if (PyObject_DelAttrString(m, "lchown") == -1) {
-            return NULL;
-        }
-    }
-#endif /* HAVE_LCHOWN */
-
-
-#endif /* __APPLE__ */
-
-    Py_INCREF(TerminalSizeType);
-    PyModule_AddObject(m, "terminal_size", (PyObject*)TerminalSizeType);
-
-    billion = PyLong_FromLong(1000000000);
-    if (!billion)
-        return NULL;
+    if ((state->billion = PyLong_FromLong(1000000000)) == NULL)
+        return -1;
+#if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
+    state->struct_rusage = PyUnicode_InternFromString("struct_rusage");
+    if (state->struct_rusage == NULL)
+        return -1;
+#endif
+    state->st_mode = PyUnicode_InternFromString("st_mode");
+    if (state->st_mode == NULL)
+        return -1;
 
     /* suppress "function not used" warnings */
     {
@@ -14735,25 +15486,48 @@
      * provide list of locally available functions
      * so os.py can populate support_* lists
      */
-    list = PyList_New(0);
-    if (!list)
-        return NULL;
-    for (trace = have_functions; *trace; trace++) {
-        PyObject *unicode = PyUnicode_DecodeASCII(*trace, strlen(*trace), NULL);
+    PyObject *list = PyList_New(0);
+    if (!list) {
+        return -1;
+    }
+    for (const struct have_function *trace = have_functions; trace->label; trace++) {
+        PyObject *unicode;
+        if (trace->probe && !trace->probe()) continue;
+        unicode = PyUnicode_DecodeASCII(trace->label, strlen(trace->label), NULL);
         if (!unicode)
-            return NULL;
+            return -1;
         if (PyList_Append(list, unicode))
-            return NULL;
+            return -1;
         Py_DECREF(unicode);
     }
+
     PyModule_AddObject(m, "_have_functions", list);
 
-    Py_INCREF((PyObject *) &DirEntryType);
-    PyModule_AddObject(m, "DirEntry", (PyObject *)&DirEntryType);
+    return 0;
+}
 
-    initialized = 1;
 
-    return m;
+static PyModuleDef_Slot posixmodile_slots[] = {
+    {Py_mod_exec, posixmodule_exec},
+    {0, NULL}
+};
+
+static struct PyModuleDef posixmodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = MODNAME,
+    .m_doc = posix__doc__,
+    .m_size = sizeof(_posixstate),
+    .m_methods = posix_methods,
+    .m_slots = posixmodile_slots,
+    .m_traverse = _posix_traverse,
+    .m_clear = _posix_clear,
+    .m_free = _posix_free,
+};
+
+PyMODINIT_FUNC
+INITFUNC(void)
+{
+    return PyModuleDef_Init(&posixmodule);
 }
 
 #ifdef __cplusplus
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index e0232b8..901a3ed9 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -47,8 +47,21 @@
 exception is raised if the entry asked for cannot be found.");
 
 
-static int initialized;
-static PyTypeObject StructPwdType;
+typedef struct {
+    PyTypeObject *StructPwdType;
+} pwdmodulestate;
+
+static inline pwdmodulestate*
+get_pwd_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (pwdmodulestate *)state;
+}
+
+#define modulestate_global get_pwd_state(PyState_FindModule(&pwdmodule))
+
+static struct PyModuleDef pwdmodule;
 
 #define DEFAULT_BUFFER_SIZE 1024
 
@@ -69,7 +82,7 @@
 mkpwent(struct passwd *p)
 {
     int setIndex = 0;
-    PyObject *v = PyStructSequence_New(&StructPwdType);
+    PyObject *v = PyStructSequence_New(modulestate_global->StructPwdType);
     if (v == NULL)
         return NULL;
 
@@ -310,16 +323,28 @@
     {NULL,              NULL}           /* sentinel */
 };
 
+static int pwdmodule_traverse(PyObject *m, visitproc visit, void *arg) {
+    Py_VISIT(get_pwd_state(m)->StructPwdType);
+    return 0;
+}
+static int pwdmodule_clear(PyObject *m) {
+    Py_CLEAR(get_pwd_state(m)->StructPwdType);
+    return 0;
+}
+static void pwdmodule_free(void *m) {
+    pwdmodule_clear((PyObject *)m);
+}
+
 static struct PyModuleDef pwdmodule = {
     PyModuleDef_HEAD_INIT,
     "pwd",
     pwd__doc__,
-    -1,
+    sizeof(pwdmodulestate),
     pwd_methods,
     NULL,
-    NULL,
-    NULL,
-    NULL
+    pwdmodule_traverse,
+    pwdmodule_clear,
+    pwdmodule_free,
 };
 
 
@@ -327,17 +352,19 @@
 PyInit_pwd(void)
 {
     PyObject *m;
-    m = PyModule_Create(&pwdmodule);
-    if (m == NULL)
+    if ((m = PyState_FindModule(&pwdmodule)) != NULL) {
+        Py_INCREF(m);
+        return m;
+    }
+    if ((m = PyModule_Create(&pwdmodule)) == NULL)
         return NULL;
 
-    if (!initialized) {
-        if (PyStructSequence_InitType2(&StructPwdType,
-                                       &struct_pwd_type_desc) < 0)
-            return NULL;
-        initialized = 1;
+    pwdmodulestate *state = PyModule_GetState(m);
+    state->StructPwdType = PyStructSequence_NewType(&struct_pwd_type_desc);
+    if (state->StructPwdType == NULL) {
+        return NULL;
     }
-    Py_INCREF((PyObject *) &StructPwdType);
-    PyModule_AddObject(m, "struct_passwd", (PyObject *) &StructPwdType);
+    Py_INCREF(state->StructPwdType);
+    PyModule_AddObject(m, "struct_passwd", (PyObject *) state->StructPwdType);
     return m;
 }
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index df1a69b..12ae66d 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -1,7 +1,7 @@
 #include "Python.h"
 #include <ctype.h>
 
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "frameobject.h"
 #include "expat.h"
 
@@ -119,7 +119,7 @@
                                   XML_ErrorString(code), lineno, column);
     if (buffer == NULL)
         return NULL;
-    err = PyObject_CallFunctionObjArgs(ErrorObject, buffer, NULL);
+    err = PyObject_CallOneArg(ErrorObject, buffer);
     Py_DECREF(buffer);
     if (  err != NULL
           && set_error_attr(err, "code", code)
@@ -208,7 +208,7 @@
 {
     PyObject *res;
 
-    res = PyEval_CallObject(func, args);
+    res = PyObject_Call(func, args, NULL);
     if (res == NULL) {
         _PyTraceback_Add(funcname, __FILE__, lineno);
         XML_StopParser(self->itself, XML_FALSE);
@@ -938,7 +938,6 @@
     new_parser->handlers = 0;
     new_parser->intern = self->intern;
     Py_XINCREF(new_parser->intern);
-    PyObject_GC_Track(new_parser);
 
     if (self->buffer != NULL) {
         new_parser->buffer = PyMem_Malloc(new_parser->buffer_size);
@@ -975,6 +974,8 @@
                                    handler_info[i].handler);
         }
     }
+
+    PyObject_GC_Track(new_parser);
     return (PyObject *)new_parser;
 }
 
@@ -1059,7 +1060,7 @@
     static unsigned char template_buffer[256] = {0};
     PyObject* u;
     int i;
-    void *data;
+    const void *data;
     unsigned int kind;
 
     if (PyErr_Occurred())
@@ -1122,7 +1123,6 @@
     self->handlers = NULL;
     self->intern = intern;
     Py_XINCREF(self->intern);
-    PyObject_GC_Track(self);
 
     /* namespace_separator is either NULL or contains one char + \0 */
     self->itself = XML_ParserCreate_MM(encoding, &ExpatMemoryHandler,
@@ -1152,6 +1152,7 @@
     }
     clear_handlers(self, 1);
 
+    PyObject_GC_Track(self);
     return (PyObject*)self;
 }
 
diff --git a/Modules/readline.c b/Modules/readline.c
index 081657f..12d6cc7 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -86,13 +86,18 @@
   PyObject *endidx;
 } readlinestate;
 
-
-#define readline_state(o) ((readlinestate *)PyModule_GetState(o))
+static inline readlinestate*
+get_readline_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (readlinestate *)state;
+}
 
 static int
 readline_clear(PyObject *m)
 {
-   readlinestate *state = readline_state(m);
+   readlinestate *state = get_readline_state(m);
    Py_CLEAR(state->completion_display_matches_hook);
    Py_CLEAR(state->startup_hook);
    Py_CLEAR(state->pre_input_hook);
@@ -105,7 +110,7 @@
 static int
 readline_traverse(PyObject *m, visitproc visit, void *arg)
 {
-    readlinestate *state = readline_state(m);
+    readlinestate *state = get_readline_state(m);
     Py_VISIT(state->completion_display_matches_hook);
     Py_VISIT(state->startup_hook);
     Py_VISIT(state->pre_input_hook);
@@ -229,7 +234,7 @@
 write_history_file(PyObject *self, PyObject *args)
 {
     PyObject *filename_obj = Py_None, *filename_bytes;
-    char *filename;
+    const char *filename;
     int err;
     if (!PyArg_ParseTuple(args, "|O:write_history_file", &filename_obj))
         return NULL;
@@ -265,7 +270,7 @@
 {
     int nelements;
     PyObject *filename_obj = Py_None, *filename_bytes;
-    char *filename;
+    const char *filename;
     int err;
     if (!PyArg_ParseTuple(args, "i|O:append_history_file", &nelements, &filename_obj))
         return NULL;
@@ -864,7 +869,7 @@
     int result = 0;
     if (func != NULL) {
         PyObject *r;
-        r = _PyObject_CallNoArg(func);
+        r = PyObject_CallNoArgs(func);
         if (r == NULL)
             goto error;
         if (r == Py_None)
@@ -1063,15 +1068,16 @@
 }
 
 
-/* Helper to initialize GNU readline properly. */
-
-static void
+/* Helper to initialize GNU readline properly.
+   Return -1 on memory allocation failure, return 0 on success. */
+static int
 setup_readline(readlinestate *mod_state)
 {
 #ifdef SAVE_LOCALE
     char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
-    if (!saved_locale)
-        Py_FatalError("not enough memory to save locale");
+    if (!saved_locale) {
+        return -1;
+    }
 #endif
 
     /* The name must be defined before initialization */
@@ -1147,6 +1153,7 @@
         rl_initialize();
 
     RESTORE_LOCALE(saved_locale)
+    return 0;
 }
 
 /* Wrapper around GNU readline that handles signals differently. */
@@ -1354,7 +1361,10 @@
 
     mod_state = (readlinestate *) PyModule_GetState(m);
     PyOS_ReadlineFunctionPointer = call_readline;
-    setup_readline(mod_state);
+    if (setup_readline(mod_state) < 0) {
+        PyErr_NoMemory();
+        goto error;
+    }
 
     return m;
 
diff --git a/Modules/resource.c b/Modules/resource.c
index afde03c..ddbf80b 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -340,155 +340,174 @@
 /* Module initialization */
 
 
-static struct PyModuleDef resourcemodule = {
-    PyModuleDef_HEAD_INIT,
-    "resource",
-    NULL,
-    -1,
-    resource_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
-
-PyMODINIT_FUNC
-PyInit_resource(void)
+static int
+resource_exec(PyObject *module)
 {
-    PyObject *m, *v;
-
-    /* Create the module and add the functions */
-    m = PyModule_Create(&resourcemodule);
-    if (m == NULL)
-        return NULL;
+#define ADD_INT(module, value)                                    \
+    do {                                                          \
+        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
+            return -1;                                            \
+        }                                                         \
+    } while (0)
 
     /* Add some symbolic constants to the module */
     Py_INCREF(PyExc_OSError);
-    PyModule_AddObject(m, "error", PyExc_OSError);
+    if (PyModule_AddObject(module, "error", PyExc_OSError) < 0) {
+        Py_DECREF(PyExc_OSError);
+        return -1;
+    }
     if (!initialized) {
         if (PyStructSequence_InitType2(&StructRUsageType,
                                        &struct_rusage_desc) < 0)
-            return NULL;
+            return -1;
     }
 
-    Py_INCREF(&StructRUsageType);
-    PyModule_AddObject(m, "struct_rusage",
-                       (PyObject*) &StructRUsageType);
+    if(PyModule_AddType(module, &StructRUsageType) < 0) {
+        return -1;
+    }
 
     /* insert constants */
 #ifdef RLIMIT_CPU
-    PyModule_AddIntMacro(m, RLIMIT_CPU);
+    ADD_INT(module, RLIMIT_CPU);
 #endif
 
 #ifdef RLIMIT_FSIZE
-    PyModule_AddIntMacro(m, RLIMIT_FSIZE);
+    ADD_INT(module, RLIMIT_FSIZE);
 #endif
 
 #ifdef RLIMIT_DATA
-    PyModule_AddIntMacro(m, RLIMIT_DATA);
+    ADD_INT(module, RLIMIT_DATA);
 #endif
 
 #ifdef RLIMIT_STACK
-    PyModule_AddIntMacro(m, RLIMIT_STACK);
+    ADD_INT(module, RLIMIT_STACK);
 #endif
 
 #ifdef RLIMIT_CORE
-    PyModule_AddIntMacro(m, RLIMIT_CORE);
+    ADD_INT(module, RLIMIT_CORE);
 #endif
 
 #ifdef RLIMIT_NOFILE
-    PyModule_AddIntMacro(m, RLIMIT_NOFILE);
+    ADD_INT(module, RLIMIT_NOFILE);
 #endif
 
 #ifdef RLIMIT_OFILE
-    PyModule_AddIntMacro(m, RLIMIT_OFILE);
+    ADD_INT(module, RLIMIT_OFILE);
 #endif
 
 #ifdef RLIMIT_VMEM
-    PyModule_AddIntMacro(m, RLIMIT_VMEM);
+    ADD_INT(module, RLIMIT_VMEM);
 #endif
 
 #ifdef RLIMIT_AS
-    PyModule_AddIntMacro(m, RLIMIT_AS);
+    ADD_INT(module, RLIMIT_AS);
 #endif
 
 #ifdef RLIMIT_RSS
-    PyModule_AddIntMacro(m, RLIMIT_RSS);
+    ADD_INT(module, RLIMIT_RSS);
 #endif
 
 #ifdef RLIMIT_NPROC
-    PyModule_AddIntMacro(m, RLIMIT_NPROC);
+    ADD_INT(module, RLIMIT_NPROC);
 #endif
 
 #ifdef RLIMIT_MEMLOCK
-    PyModule_AddIntMacro(m, RLIMIT_MEMLOCK);
+    ADD_INT(module, RLIMIT_MEMLOCK);
 #endif
 
 #ifdef RLIMIT_SBSIZE
-    PyModule_AddIntMacro(m, RLIMIT_SBSIZE);
+    ADD_INT(module, RLIMIT_SBSIZE);
 #endif
 
 /* Linux specific */
 #ifdef RLIMIT_MSGQUEUE
-    PyModule_AddIntMacro(m, RLIMIT_MSGQUEUE);
+    ADD_INT(module, RLIMIT_MSGQUEUE);
 #endif
 
 #ifdef RLIMIT_NICE
-    PyModule_AddIntMacro(m, RLIMIT_NICE);
+    ADD_INT(module, RLIMIT_NICE);
 #endif
 
 #ifdef RLIMIT_RTPRIO
-    PyModule_AddIntMacro(m, RLIMIT_RTPRIO);
+    ADD_INT(module, RLIMIT_RTPRIO);
 #endif
 
 #ifdef RLIMIT_RTTIME
-    PyModule_AddIntMacro(m, RLIMIT_RTTIME);
+    ADD_INT(module, RLIMIT_RTTIME);
 #endif
 
 #ifdef RLIMIT_SIGPENDING
-    PyModule_AddIntMacro(m, RLIMIT_SIGPENDING);
+    ADD_INT(module, RLIMIT_SIGPENDING);
 #endif
 
 /* target */
 #ifdef RUSAGE_SELF
-    PyModule_AddIntMacro(m, RUSAGE_SELF);
+    ADD_INT(module, RUSAGE_SELF);
 #endif
 
 #ifdef RUSAGE_CHILDREN
-    PyModule_AddIntMacro(m, RUSAGE_CHILDREN);
+    ADD_INT(module, RUSAGE_CHILDREN);
 #endif
 
 #ifdef RUSAGE_BOTH
-    PyModule_AddIntMacro(m, RUSAGE_BOTH);
+    ADD_INT(module, RUSAGE_BOTH);
 #endif
 
 #ifdef RUSAGE_THREAD
-    PyModule_AddIntMacro(m, RUSAGE_THREAD);
+    ADD_INT(module, RUSAGE_THREAD);
 #endif
 
 /* FreeBSD specific */
 
 #ifdef RLIMIT_SWAP
-    PyModule_AddIntMacro(m, RLIMIT_SWAP);
+    ADD_INT(module, RLIMIT_SWAP);
 #endif
 
 #ifdef RLIMIT_SBSIZE
-    PyModule_AddIntMacro(m, RLIMIT_SBSIZE);
+    ADD_INT(module, RLIMIT_SBSIZE);
 #endif
 
 #ifdef RLIMIT_NPTS
-    PyModule_AddIntMacro(m, RLIMIT_NPTS);
+    ADD_INT(module, RLIMIT_NPTS);
 #endif
 
+    PyObject *v;
     if (sizeof(RLIM_INFINITY) > sizeof(long)) {
         v = PyLong_FromLongLong((long long) RLIM_INFINITY);
     } else
     {
         v = PyLong_FromLong((long) RLIM_INFINITY);
     }
-    if (v) {
-        PyModule_AddObject(m, "RLIM_INFINITY", v);
+    if (!v) {
+        return -1;
     }
+
+    if (PyModule_AddObject(module, "RLIM_INFINITY", v) < 0) {
+        Py_DECREF(v);
+        return -1;
+    }
+
     initialized = 1;
-    return m;
+    return 0;
+
+#undef ADD_INT
+}
+
+static struct PyModuleDef_Slot resource_slots[] = {
+    {Py_mod_exec, resource_exec},
+    {0, NULL}
+};
+
+static struct PyModuleDef resourcemodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "resource",
+    .m_size = 0,
+    .m_methods = resource_methods,
+    .m_slots = resource_slots,
+};
+
+PyMODINIT_FUNC
+PyInit_resource(void)
+{
+    return PyModuleDef_Init(&resourcemodule);
 }
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index a71b642..fb71e91 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -9,7 +9,7 @@
 #endif
 
 #include "Python.h"
-#include <structmember.h>
+#include "structmember.h"         // PyMemberDef
 
 #ifdef HAVE_SYS_DEVPOLL_H
 #include <sys/resource.h>
@@ -58,14 +58,35 @@
 #  define SOCKET int
 #endif
 
+typedef struct {
+    PyObject *close;
+    PyTypeObject *poll_Type;
+    PyTypeObject *devpoll_Type;
+    PyTypeObject *pyEpoll_Type;
+    PyTypeObject *kqueue_event_Type;
+    PyTypeObject *kqueue_queue_Type;
+} _selectstate;
+
+static struct PyModuleDef selectmodule;
+
+static inline _selectstate*
+get_select_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_selectstate *)state;
+}
+
+#define _selectstate_global get_select_state(PyState_FindModule(&selectmodule))
+
 /*[clinic input]
 module select
 class select.poll "pollObject *" "&poll_Type"
 class select.devpoll "devpollObject *" "&devpoll_Type"
 class select.epoll "pyEpoll_Object *" "&pyEpoll_Type"
-class select.kqueue "kqueue_queue_Object *" "&kqueue_queue_Type"
+class select.kqueue "kqueue_queue_Object *" "_selectstate_global->kqueue_queue_Type"
 [clinic start generated code]*/
-/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ded80abdad2b7552]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=41071028e0ede093]*/
 
 static int
 fildes_converter(PyObject *o, void *p)
@@ -400,8 +421,6 @@
     int poll_running;
 } pollObject;
 
-static PyTypeObject poll_Type;
-
 /* Update the malloc'ed array of pollfds to match the dictionary
    contained within a pollObject.  Return 1 on success, 0 on an error.
 */
@@ -709,7 +728,7 @@
 newPollObject(void)
 {
     pollObject *self;
-    self = PyObject_New(pollObject, &poll_Type);
+    self = PyObject_New(pollObject, _selectstate_global->poll_Type);
     if (self == NULL)
         return NULL;
     /* ufd_uptodate is a Boolean, denoting whether the
@@ -725,17 +744,28 @@
     return self;
 }
 
+static PyObject *
+poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type));
+    return NULL;
+}
+
 static void
 poll_dealloc(pollObject *self)
 {
+    PyObject* type = (PyObject *)Py_TYPE(self);
     if (self->ufds != NULL)
         PyMem_DEL(self->ufds);
     Py_XDECREF(self->dict);
     PyObject_Del(self);
+    Py_DECREF(type);
 }
 
 
 #ifdef HAVE_SYS_DEVPOLL_H
+static PyMethodDef devpoll_methods[];
+
 typedef struct {
     PyObject_HEAD
     int fd_devpoll;
@@ -744,8 +774,6 @@
     struct pollfd *fds;
 } devpollObject;
 
-static PyTypeObject devpoll_Type;
-
 static PyObject *
 devpoll_err_closed(void)
 {
@@ -1091,7 +1119,7 @@
         return NULL;
     }
 
-    self = PyObject_New(devpollObject, &devpoll_Type);
+    self = PyObject_New(devpollObject, _selectstate_global->devpoll_Type);
     if (self == NULL) {
         close(fd_devpoll);
         PyMem_DEL(fds);
@@ -1105,14 +1133,39 @@
     return self;
 }
 
+static PyObject *
+devpoll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+    PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type));
+    return NULL;
+}
+
 static void
 devpoll_dealloc(devpollObject *self)
 {
+    PyObject *type = (PyObject *)Py_TYPE(self);
     (void)devpoll_internal_close(self);
     PyMem_DEL(self->fds);
     PyObject_Del(self);
+    Py_DECREF(type);
 }
 
+static PyType_Slot devpoll_Type_slots[] = {
+    {Py_tp_dealloc, devpoll_dealloc},
+    {Py_tp_getset, devpoll_getsetlist},
+    {Py_tp_methods, devpoll_methods},
+    {Py_tp_new, devpoll_new},
+    {0, 0},
+};
+
+static PyType_Spec devpoll_Type_spec = {
+    "select.devpoll",
+    sizeof(devpollObject),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    devpoll_Type_slots
+};
+
 #endif  /* HAVE_SYS_DEVPOLL_H */
 
 
@@ -1201,8 +1254,7 @@
     SOCKET epfd;                        /* epoll control file descriptor */
 } pyEpoll_Object;
 
-static PyTypeObject pyEpoll_Type;
-#define pyepoll_CHECK(op) (PyObject_TypeCheck((op), &pyEpoll_Type))
+#define pyepoll_CHECK(op) (PyObject_TypeCheck((op), _selectstate_global->pyEpoll_Type))
 
 static PyObject *
 pyepoll_err_closed(void)
@@ -1230,9 +1282,10 @@
 newPyEpoll_Object(PyTypeObject *type, int sizehint, SOCKET fd)
 {
     pyEpoll_Object *self;
-
-    assert(type != NULL && type->tp_alloc != NULL);
-    self = (pyEpoll_Object *) type->tp_alloc(type, 0);
+    assert(type != NULL);
+    allocfunc epoll_alloc = PyType_GetSlot(type, Py_tp_alloc);
+    assert(epoll_alloc != NULL);
+    self = (pyEpoll_Object *) epoll_alloc(type, 0);
     if (self == NULL)
         return NULL;
 
@@ -1307,8 +1360,11 @@
 static void
 pyepoll_dealloc(pyEpoll_Object *self)
 {
+    PyTypeObject* type = Py_TYPE(self);
     (void)pyepoll_internal_close(self);
-    Py_TYPE(self)->tp_free(self);
+    freefunc epoll_free = PyType_GetSlot(type, Py_tp_free);
+    epoll_free((PyObject *)self);
+    Py_DECREF((PyObject *)type);
 }
 
 /*[clinic input]
@@ -1400,11 +1456,6 @@
          * though this argument is ignored. */
         Py_BEGIN_ALLOW_THREADS
         result = epoll_ctl(epfd, op, fd, &ev);
-        if (errno == EBADF) {
-            /* fd already closed */
-            result = 0;
-            errno = 0;
-        }
         Py_END_ALLOW_THREADS
         break;
     default:
@@ -1632,9 +1683,7 @@
                            PyObject *exc_value, PyObject *exc_tb)
 /*[clinic end generated code: output=c480f38ce361748e input=7ae81a5a4c1a98d8]*/
 {
-    _Py_IDENTIFIER(close);
-
-    return _PyObject_CallMethodId((PyObject *)self, &PyId_close, NULL);
+    return PyObject_CallMethodObjArgs((PyObject *)self, _selectstate_global->close, NULL);
 }
 
 static PyGetSetDef pyepoll_getsetlist[] = {
@@ -1643,6 +1692,15 @@
     {0},
 };
 
+PyDoc_STRVAR(pyepoll_doc,
+"select.epoll(sizehint=-1, flags=0)\n\
+\n\
+Returns an epolling object\n\
+\n\
+sizehint must be a positive integer or -1 for the default size. The\n\
+sizehint is used to optimize internal data structures. It doesn't limit\n\
+the maximum number of monitored events.");
+
 #endif /* HAVE_EPOLL */
 
 #ifdef HAVE_KQUEUE
@@ -1699,18 +1757,14 @@
     struct kevent e;
 } kqueue_event_Object;
 
-static PyTypeObject kqueue_event_Type;
-
-#define kqueue_event_Check(op) (PyObject_TypeCheck((op), &kqueue_event_Type))
+#define kqueue_event_Check(op) (PyObject_TypeCheck((op), _selectstate_global->kqueue_event_Type))
 
 typedef struct {
     PyObject_HEAD
     SOCKET kqfd;                /* kqueue control fd */
 } kqueue_queue_Object;
 
-static PyTypeObject kqueue_queue_Type;
-
-#define kqueue_queue_Check(op) (PyObject_TypeCheck((op), &kqueue_queue_Type))
+#define kqueue_queue_Check(op) (PyObject_TypeCheck((op), _selectstate_global->kqueue_queue_Type))
 
 #if (SIZEOF_UINTPTR_T != SIZEOF_VOID_P)
 #   error uintptr_t does not match void *!
@@ -1870,6 +1924,24 @@
     Py_RETURN_RICHCOMPARE(result, 0, op);
 }
 
+static PyType_Slot kqueue_event_Type_slots[] = {
+    {Py_tp_doc, (void*)kqueue_event_doc},
+    {Py_tp_init, kqueue_event_init},
+    {Py_tp_members, kqueue_event_members},
+    {Py_tp_new, PyType_GenericNew},
+    {Py_tp_repr, kqueue_event_repr},
+    {Py_tp_richcompare, kqueue_event_richcompare},
+    {0, 0},
+};
+
+static PyType_Spec kqueue_event_Type_spec = {
+    "select.kevent",
+    sizeof(kqueue_event_Object),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    kqueue_event_Type_slots
+};
+
 static PyObject *
 kqueue_queue_err_closed(void)
 {
@@ -1896,8 +1968,10 @@
 newKqueue_Object(PyTypeObject *type, SOCKET fd)
 {
     kqueue_queue_Object *self;
-    assert(type != NULL && type->tp_alloc != NULL);
-    self = (kqueue_queue_Object *) type->tp_alloc(type, 0);
+    assert(type != NULL);
+    allocfunc queue_alloc = PyType_GetSlot(type, Py_tp_alloc);
+    assert(queue_alloc != NULL);
+    self = (kqueue_queue_Object *) queue_alloc(type, 0);
     if (self == NULL) {
         return NULL;
     }
@@ -1954,8 +2028,11 @@
 static void
 kqueue_queue_dealloc(kqueue_queue_Object *self)
 {
+    PyTypeObject* type = Py_TYPE(self);
     kqueue_queue_internal_close(self);
-    Py_TYPE(self)->tp_free(self);
+    freefunc kqueue_free = PyType_GetSlot(type, Py_tp_free);
+    kqueue_free((PyObject *)self);
+    Py_DECREF((PyObject *)type);
 }
 
 /*[clinic input]
@@ -2072,7 +2149,7 @@
             PyErr_Format(PyExc_TypeError,
                 "timeout argument must be a number "
                 "or None, got %.200s",
-                Py_TYPE(otimeout)->tp_name);
+                _PyType_Name(Py_TYPE(otimeout)));
             return NULL;
         }
 
@@ -2168,7 +2245,7 @@
     for (i = 0; i < gotevents; i++) {
         kqueue_event_Object *ch;
 
-        ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type);
+        ch = PyObject_New(kqueue_event_Object, _selectstate_global->kqueue_event_Type);
         if (ch == NULL) {
             goto error;
         }
@@ -2210,38 +2287,20 @@
     {NULL, NULL}           /* sentinel */
 };
 
-static PyTypeObject poll_Type = {
-    /* The ob_type field must be initialized in the module init function
-     * to be portable to Windows without using C++. */
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "select.poll",              /*tp_name*/
-    sizeof(pollObject),         /*tp_basicsize*/
-    0,                          /*tp_itemsize*/
-    /* methods */
-    (destructor)poll_dealloc, /*tp_dealloc*/
-    0,                          /*tp_vectorcall_offset*/
-    0,                          /*tp_getattr*/
-    0,                      /*tp_setattr*/
-    0,                          /*tp_as_async*/
-    0,                          /*tp_repr*/
-    0,                          /*tp_as_number*/
-    0,                          /*tp_as_sequence*/
-    0,                          /*tp_as_mapping*/
-    0,                          /*tp_hash*/
-    0,                          /*tp_call*/
-    0,                          /*tp_str*/
-    0,                          /*tp_getattro*/
-    0,                          /*tp_setattro*/
-    0,                          /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,         /*tp_flags*/
-    0,                          /*tp_doc*/
-    0,                          /*tp_traverse*/
-    0,                          /*tp_clear*/
-    0,                          /*tp_richcompare*/
-    0,                          /*tp_weaklistoffset*/
-    0,                          /*tp_iter*/
-    0,                          /*tp_iternext*/
-    poll_methods,               /*tp_methods*/
+
+static PyType_Slot poll_Type_slots[] = {
+    {Py_tp_dealloc, poll_dealloc},
+    {Py_tp_methods, poll_methods},
+    {Py_tp_new, poll_new},
+    {0, 0},
+};
+
+static PyType_Spec poll_Type_spec = {
+    "select.poll",
+    sizeof(pollObject),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    poll_Type_slots
 };
 
 #ifdef HAVE_SYS_DEVPOLL_H
@@ -2256,42 +2315,6 @@
     {NULL,              NULL}           /* sentinel */
 };
 
-static PyTypeObject devpoll_Type = {
-    /* The ob_type field must be initialized in the module init function
-     * to be portable to Windows without using C++. */
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "select.devpoll",           /*tp_name*/
-    sizeof(devpollObject),      /*tp_basicsize*/
-    0,                          /*tp_itemsize*/
-    /* methods */
-    (destructor)devpoll_dealloc, /*tp_dealloc*/
-    0,                          /*tp_vectorcall_offset*/
-    0,                          /*tp_getattr*/
-    0,                          /*tp_setattr*/
-    0,                          /*tp_as_async*/
-    0,                          /*tp_repr*/
-    0,                          /*tp_as_number*/
-    0,                          /*tp_as_sequence*/
-    0,                          /*tp_as_mapping*/
-    0,                          /*tp_hash*/
-    0,                          /*tp_call*/
-    0,                          /*tp_str*/
-    0,                          /*tp_getattro*/
-    0,                          /*tp_setattro*/
-    0,                          /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,         /*tp_flags*/
-    0,                          /*tp_doc*/
-    0,                          /*tp_traverse*/
-    0,                          /*tp_clear*/
-    0,                          /*tp_richcompare*/
-    0,                          /*tp_weaklistoffset*/
-    0,                          /*tp_iter*/
-    0,                          /*tp_iternext*/
-    devpoll_methods,            /*tp_methods*/
-    0,                          /* tp_members */
-    devpoll_getsetlist,         /* tp_getset */
-};
-
 #endif  /* HAVE_SYS_DEVPOLL_H */
 
 #endif /* HAVE_POLL */
@@ -2311,94 +2334,28 @@
     {NULL,      NULL},
 };
 
-static PyTypeObject pyEpoll_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "select.epoll",                                     /* tp_name */
-    sizeof(pyEpoll_Object),                             /* tp_basicsize */
-    0,                                                  /* tp_itemsize */
-    (destructor)pyepoll_dealloc,                        /* tp_dealloc */
-    0,                                                  /* tp_vectorcall_offset */
-    0,                                                  /* tp_getattr */
-    0,                                                  /* tp_setattr */
-    0,                                                  /* tp_as_async */
-    0,                                                  /* tp_repr */
-    0,                                                  /* tp_as_number */
-    0,                                                  /* tp_as_sequence */
-    0,                                                  /* tp_as_mapping */
-    0,                                                  /* tp_hash */
-    0,                                                  /* tp_call */
-    0,                                                  /* tp_str */
-    PyObject_GenericGetAttr,                            /* tp_getattro */
-    0,                                                  /* tp_setattro */
-    0,                                                  /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                                 /* tp_flags */
-    select_epoll__doc__,                                /* tp_doc */
-    0,                                                  /* tp_traverse */
-    0,                                                  /* tp_clear */
-    0,                                                  /* tp_richcompare */
-    0,                                                  /* tp_weaklistoffset */
-    0,                                                  /* tp_iter */
-    0,                                                  /* tp_iternext */
-    pyepoll_methods,                                    /* tp_methods */
-    0,                                                  /* tp_members */
-    pyepoll_getsetlist,                                 /* tp_getset */
-    0,                                                  /* tp_base */
-    0,                                                  /* tp_dict */
-    0,                                                  /* tp_descr_get */
-    0,                                                  /* tp_descr_set */
-    0,                                                  /* tp_dictoffset */
-    0,                                                  /* tp_init */
-    0,                                                  /* tp_alloc */
-    select_epoll,                                       /* tp_new */
-    0,                                                  /* tp_free */
+static PyType_Slot pyEpoll_Type_slots[] = {
+    {Py_tp_dealloc, pyepoll_dealloc},
+    {Py_tp_doc, (void*)pyepoll_doc},
+    {Py_tp_getattro, PyObject_GenericGetAttr},
+    {Py_tp_getset, pyepoll_getsetlist},
+    {Py_tp_methods, pyepoll_methods},
+    {Py_tp_new, select_epoll},
+    {0, 0},
+};
+
+static PyType_Spec pyEpoll_Type_spec = {
+    "select.epoll",
+    sizeof(pyEpoll_Object),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    pyEpoll_Type_slots
 };
 
 #endif /* HAVE_EPOLL */
 
 #ifdef HAVE_KQUEUE
 
-static PyTypeObject kqueue_event_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "select.kevent",                                    /* tp_name */
-    sizeof(kqueue_event_Object),                        /* tp_basicsize */
-    0,                                                  /* tp_itemsize */
-    0,                                                  /* tp_dealloc */
-    0,                                                  /* tp_vectorcall_offset */
-    0,                                                  /* tp_getattr */
-    0,                                                  /* tp_setattr */
-    0,                                                  /* tp_as_async */
-    (reprfunc)kqueue_event_repr,                        /* tp_repr */
-    0,                                                  /* tp_as_number */
-    0,                                                  /* tp_as_sequence */
-    0,                                                  /* tp_as_mapping */
-    0,                                                  /* tp_hash */
-    0,                                                  /* tp_call */
-    0,                                                  /* tp_str */
-    0,                                                  /* tp_getattro */
-    0,                                                  /* tp_setattro */
-    0,                                                  /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                                 /* tp_flags */
-    kqueue_event_doc,                                   /* tp_doc */
-    0,                                                  /* tp_traverse */
-    0,                                                  /* tp_clear */
-    (richcmpfunc)kqueue_event_richcompare,              /* tp_richcompare */
-    0,                                                  /* tp_weaklistoffset */
-    0,                                                  /* tp_iter */
-    0,                                                  /* tp_iternext */
-    0,                                                  /* tp_methods */
-    kqueue_event_members,                               /* tp_members */
-    0,                                                  /* tp_getset */
-    0,                                                  /* tp_base */
-    0,                                                  /* tp_dict */
-    0,                                                  /* tp_descr_get */
-    0,                                                  /* tp_descr_set */
-    0,                                                  /* tp_dictoffset */
-    (initproc)kqueue_event_init,                        /* tp_init */
-    0,                                                  /* tp_alloc */
-    0,                                                  /* tp_new */
-    0,                                                  /* tp_free */
-};
-
 static PyMethodDef kqueue_queue_methods[] = {
     SELECT_KQUEUE_FROMFD_METHODDEF
     SELECT_KQUEUE_CLOSE_METHODDEF
@@ -2407,46 +2364,21 @@
     {NULL,      NULL},
 };
 
-static PyTypeObject kqueue_queue_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "select.kqueue",                                    /* tp_name */
-    sizeof(kqueue_queue_Object),                        /* tp_basicsize */
-    0,                                                  /* tp_itemsize */
-    (destructor)kqueue_queue_dealloc,                   /* tp_dealloc */
-    0,                                                  /* tp_vectorcall_offset */
-    0,                                                  /* tp_getattr */
-    0,                                                  /* tp_setattr */
-    0,                                                  /* tp_as_async */
-    0,                                                  /* tp_repr */
-    0,                                                  /* tp_as_number */
-    0,                                                  /* tp_as_sequence */
-    0,                                                  /* tp_as_mapping */
-    0,                                                  /* tp_hash */
-    0,                                                  /* tp_call */
-    0,                                                  /* tp_str */
-    0,                                                  /* tp_getattro */
-    0,                                                  /* tp_setattro */
-    0,                                                  /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                                 /* tp_flags */
-    select_kqueue__doc__,                               /* tp_doc */
-    0,                                                  /* tp_traverse */
-    0,                                                  /* tp_clear */
-    0,                                                  /* tp_richcompare */
-    0,                                                  /* tp_weaklistoffset */
-    0,                                                  /* tp_iter */
-    0,                                                  /* tp_iternext */
-    kqueue_queue_methods,                               /* tp_methods */
-    0,                                                  /* tp_members */
-    kqueue_queue_getsetlist,                            /* tp_getset */
-    0,                                                  /* tp_base */
-    0,                                                  /* tp_dict */
-    0,                                                  /* tp_descr_get */
-    0,                                                  /* tp_descr_set */
-    0,                                                  /* tp_dictoffset */
-    0,                                                  /* tp_init */
-    0,                                                  /* tp_alloc */
-    select_kqueue,                                      /* tp_new */
-    0,                                                  /* tp_free */
+static PyType_Slot kqueue_queue_Type_slots[] = {
+    {Py_tp_dealloc, kqueue_queue_dealloc},
+    {Py_tp_doc, (void*)select_kqueue__doc__},
+    {Py_tp_getset, kqueue_queue_getsetlist},
+    {Py_tp_methods, kqueue_queue_methods},
+    {Py_tp_new, select_kqueue},
+    {0, 0},
+};
+
+static PyType_Spec kqueue_queue_Type_spec = {
+    "select.kqueue",
+    sizeof(kqueue_queue_Object),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    kqueue_queue_Type_slots
 };
 
 #endif /* HAVE_KQUEUE */
@@ -2472,21 +2404,49 @@
 On Windows, only sockets are supported; on Unix, all file descriptors.");
 
 
+
+static int
+_select_traverse(PyObject *module, visitproc visit, void *arg)
+{
+    Py_VISIT(get_select_state(module)->close);
+    Py_VISIT(get_select_state(module)->poll_Type);
+    Py_VISIT(get_select_state(module)->devpoll_Type);
+    Py_VISIT(get_select_state(module)->pyEpoll_Type);
+    Py_VISIT(get_select_state(module)->kqueue_event_Type);
+    Py_VISIT(get_select_state(module)->kqueue_queue_Type);
+    return 0;
+}
+
+static int
+_select_clear(PyObject *module)
+{
+    Py_CLEAR(get_select_state(module)->close);
+    Py_CLEAR(get_select_state(module)->poll_Type);
+    Py_CLEAR(get_select_state(module)->devpoll_Type);
+    Py_CLEAR(get_select_state(module)->pyEpoll_Type);
+    Py_CLEAR(get_select_state(module)->kqueue_event_Type);
+    Py_CLEAR(get_select_state(module)->kqueue_queue_Type);
+    return 0;
+}
+
+static void
+_select_free(void *module)
+{
+    _select_clear((PyObject *)module);
+}
+
 static struct PyModuleDef selectmodule = {
     PyModuleDef_HEAD_INIT,
     "select",
     module_doc,
-    -1,
+    sizeof(_selectstate),
     select_methods,
     NULL,
-    NULL,
-    NULL,
-    NULL
+    _select_traverse,
+    _select_clear,
+    _select_free,
 };
 
-
-
-
 PyMODINIT_FUNC
 PyInit_select(void)
 {
@@ -2495,6 +2455,8 @@
     if (m == NULL)
         return NULL;
 
+    get_select_state(m)->close = PyUnicode_InternFromString("close");
+
     Py_INCREF(PyExc_OSError);
     PyModule_AddObject(m, "error", PyExc_OSError);
 
@@ -2516,8 +2478,12 @@
 #else
     {
 #endif
-        if (PyType_Ready(&poll_Type) < 0)
+        PyObject *poll_Type = PyType_FromSpec(&poll_Type_spec);
+        if (poll_Type == NULL)
             return NULL;
+        get_select_state(m)->poll_Type = (PyTypeObject *)poll_Type;
+        Py_INCREF(poll_Type);
+
         PyModule_AddIntMacro(m, POLLIN);
         PyModule_AddIntMacro(m, POLLPRI);
         PyModule_AddIntMacro(m, POLLOUT);
@@ -2548,17 +2514,20 @@
 #endif /* HAVE_POLL */
 
 #ifdef HAVE_SYS_DEVPOLL_H
-    if (PyType_Ready(&devpoll_Type) < 0)
+    PyObject *devpoll_Type = PyType_FromSpec(&devpoll_Type_spec);
+    if (devpoll_Type == NULL)
         return NULL;
+    get_select_state(m)->devpoll_Type = (PyTypeObject *)devpoll_Type;
+    Py_INCREF(devpoll_Type);
 #endif
 
 #ifdef HAVE_EPOLL
-    Py_TYPE(&pyEpoll_Type) = &PyType_Type;
-    if (PyType_Ready(&pyEpoll_Type) < 0)
+    PyObject *pyEpoll_Type = PyType_FromSpec(&pyEpoll_Type_spec);
+    if (pyEpoll_Type == NULL)
         return NULL;
-
-    Py_INCREF(&pyEpoll_Type);
-    PyModule_AddObject(m, "epoll", (PyObject *) &pyEpoll_Type);
+    get_select_state(m)->pyEpoll_Type = (PyTypeObject *)pyEpoll_Type;
+    Py_INCREF(pyEpoll_Type);
+    PyModule_AddObject(m, "epoll", (PyObject *)get_select_state(m)->pyEpoll_Type);
 
     PyModule_AddIntMacro(m, EPOLLIN);
     PyModule_AddIntMacro(m, EPOLLOUT);
@@ -2600,19 +2569,19 @@
 #endif /* HAVE_EPOLL */
 
 #ifdef HAVE_KQUEUE
-    kqueue_event_Type.tp_new = PyType_GenericNew;
-    Py_TYPE(&kqueue_event_Type) = &PyType_Type;
-    if(PyType_Ready(&kqueue_event_Type) < 0)
+    PyObject *kqueue_event_Type = PyType_FromSpec(&kqueue_event_Type_spec);
+    if (kqueue_event_Type == NULL)
         return NULL;
+    get_select_state(m)->kqueue_event_Type = (PyTypeObject *)kqueue_event_Type;
+    Py_INCREF(get_select_state(m)->kqueue_event_Type);
+    PyModule_AddObject(m, "kevent", kqueue_event_Type);
 
-    Py_INCREF(&kqueue_event_Type);
-    PyModule_AddObject(m, "kevent", (PyObject *)&kqueue_event_Type);
-
-    Py_TYPE(&kqueue_queue_Type) = &PyType_Type;
-    if(PyType_Ready(&kqueue_queue_Type) < 0)
+    PyObject *kqueue_queue_Type = PyType_FromSpec(&kqueue_queue_Type_spec);
+    if (kqueue_queue_Type == NULL)
         return NULL;
-    Py_INCREF(&kqueue_queue_Type);
-    PyModule_AddObject(m, "kqueue", (PyObject *)&kqueue_queue_Type);
+    get_select_state(m)->kqueue_queue_Type = (PyTypeObject *)kqueue_queue_Type;
+    Py_INCREF(get_select_state(m)->kqueue_queue_Type);
+    PyModule_AddObject(m, "kqueue", kqueue_queue_Type);
 
     /* event filters */
     PyModule_AddIntConstant(m, "KQ_FILTER_READ", EVFILT_READ);
diff --git a/Modules/sha1module.c b/Modules/sha1module.c
index ce2ad26..b0656d8 100644
--- a/Modules/sha1module.c
+++ b/Modules/sha1module.c
@@ -480,13 +480,15 @@
 _sha1.sha1
 
     string: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new SHA1 hash object; optionally initialized with a string.
 [clinic start generated code]*/
 
 static PyObject *
-_sha1_sha1_impl(PyObject *module, PyObject *string)
-/*[clinic end generated code: output=e5982830d1dece51 input=27ea54281d995ec2]*/
+_sha1_sha1_impl(PyObject *module, PyObject *string, int usedforsecurity)
+/*[clinic end generated code: output=6f8b3af05126e18e input=bd54b68e2bf36a8a]*/
 {
     SHA1object *new;
     Py_buffer buf;
@@ -527,9 +529,6 @@
 
 /* Initialize this module. */
 
-#define insint(n,v) { PyModule_AddIntConstant(m,n,v); }
-
-
 static struct PyModuleDef _sha1module = {
         PyModuleDef_HEAD_INIT,
         "_sha1",
@@ -547,13 +546,15 @@
 {
     PyObject *m;
 
-    Py_TYPE(&SHA1type) = &PyType_Type;
-    if (PyType_Ready(&SHA1type) < 0)
+    Py_SET_TYPE(&SHA1type, &PyType_Type);
+    if (PyType_Ready(&SHA1type) < 0) {
         return NULL;
+    }
 
     m = PyModule_Create(&_sha1module);
-    if (m == NULL)
+    if (m == NULL) {
         return NULL;
+    }
 
     Py_INCREF((PyObject *)&SHA1type);
     PyModule_AddObject(m, "SHA1Type", (PyObject *)&SHA1type);
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index b8d6c4c..8edb1d5 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -17,7 +17,8 @@
 /* SHA objects */
 
 #include "Python.h"
-#include "structmember.h"
+#include "pycore_byteswap.h"      // _Py_bswap32()
+#include "structmember.h"         // PyMemberDef
 #include "hashlib.h"
 #include "pystrhex.h"
 
@@ -30,12 +31,7 @@
 /* Some useful types */
 
 typedef unsigned char SHA_BYTE;
-
-#if SIZEOF_INT == 4
-typedef unsigned int SHA_INT32; /* 32-bit integer */
-#else
-/* not defined. compilation will die. */
-#endif
+typedef uint32_t SHA_INT32;  /* 32-bit integer */
 
 /* The SHA block size and message digest sizes, in bytes */
 
@@ -61,14 +57,9 @@
 #if PY_LITTLE_ENDIAN
 static void longReverse(SHA_INT32 *buffer, int byteCount)
 {
-    SHA_INT32 value;
-
     byteCount /= sizeof(*buffer);
-    while (byteCount--) {
-        value = *buffer;
-        value = ( ( value & 0xFF00FF00L ) >> 8  ) | \
-                ( ( value & 0x00FF00FFL ) << 8 );
-        *buffer++ = ( value << 16 ) | ( value >> 16 );
+    for (; byteCount--; buffer++) {
+        *buffer = _Py_bswap32(*buffer);
     }
 }
 #endif
@@ -413,7 +404,7 @@
 {
     SHAobject *newobj;
 
-    if (Py_TYPE(self) == &SHA256type) {
+    if (Py_IS_TYPE(self, &SHA256type)) {
         if ( (newobj = newSHA256object())==NULL)
             return NULL;
     } else {
@@ -601,13 +592,15 @@
 _sha256.sha256
 
     string: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new SHA-256 hash object; optionally initialized with a string.
 [clinic start generated code]*/
 
 static PyObject *
-_sha256_sha256_impl(PyObject *module, PyObject *string)
-/*[clinic end generated code: output=fa644436dcea5c31 input=09cce3fb855056b2]*/
+_sha256_sha256_impl(PyObject *module, PyObject *string, int usedforsecurity)
+/*[clinic end generated code: output=a1de327e8e1185cf input=9be86301aeb14ea5]*/
 {
     SHAobject *new;
     Py_buffer buf;
@@ -641,13 +634,15 @@
 _sha256.sha224
 
     string: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new SHA-224 hash object; optionally initialized with a string.
 [clinic start generated code]*/
 
 static PyObject *
-_sha256_sha224_impl(PyObject *module, PyObject *string)
-/*[clinic end generated code: output=21e3ba22c3404f93 input=27a04ba24c353a73]*/
+_sha256_sha224_impl(PyObject *module, PyObject *string, int usedforsecurity)
+/*[clinic end generated code: output=08be6b36569bc69c input=9fcfb46e460860ac]*/
 {
     SHAobject *new;
     Py_buffer buf;
@@ -689,9 +684,6 @@
 
 /* Initialize this module. */
 
-#define insint(n,v) { PyModule_AddIntConstant(m,n,v); }
-
-
 static struct PyModuleDef _sha256module = {
         PyModuleDef_HEAD_INIT,
         "_sha256",
@@ -709,12 +701,14 @@
 {
     PyObject *m;
 
-    Py_TYPE(&SHA224type) = &PyType_Type;
-    if (PyType_Ready(&SHA224type) < 0)
+    Py_SET_TYPE(&SHA224type, &PyType_Type);
+    if (PyType_Ready(&SHA224type) < 0) {
         return NULL;
-    Py_TYPE(&SHA256type) = &PyType_Type;
-    if (PyType_Ready(&SHA256type) < 0)
+    }
+    Py_SET_TYPE(&SHA256type, &PyType_Type);
+    if (PyType_Ready(&SHA256type) < 0) {
         return NULL;
+    }
 
     m = PyModule_Create(&_sha256module);
     if (m == NULL)
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index 98b9791..561ef8e 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -17,7 +17,8 @@
 /* SHA objects */
 
 #include "Python.h"
-#include "structmember.h"
+#include "pycore_byteswap.h"      // _Py_bswap32()
+#include "structmember.h"         // PyMemberDef
 #include "hashlib.h"
 #include "pystrhex.h"
 
@@ -30,13 +31,8 @@
 /* Some useful types */
 
 typedef unsigned char SHA_BYTE;
-
-#if SIZEOF_INT == 4
-typedef unsigned int SHA_INT32; /* 32-bit integer */
-typedef unsigned long long SHA_INT64;        /* 64-bit integer */
-#else
-/* not defined. compilation will die. */
-#endif
+typedef uint32_t SHA_INT32;  /* 32-bit integer */
+typedef uint64_t SHA_INT64;  /* 64-bit integer */
 
 /* The SHA block size and message digest sizes, in bytes */
 
@@ -62,22 +58,9 @@
 #if PY_LITTLE_ENDIAN
 static void longReverse(SHA_INT64 *buffer, int byteCount)
 {
-    SHA_INT64 value;
-
     byteCount /= sizeof(*buffer);
-    while (byteCount--) {
-        value = *buffer;
-
-                ((unsigned char*)buffer)[0] = (unsigned char)(value >> 56) & 0xff;
-                ((unsigned char*)buffer)[1] = (unsigned char)(value >> 48) & 0xff;
-                ((unsigned char*)buffer)[2] = (unsigned char)(value >> 40) & 0xff;
-                ((unsigned char*)buffer)[3] = (unsigned char)(value >> 32) & 0xff;
-                ((unsigned char*)buffer)[4] = (unsigned char)(value >> 24) & 0xff;
-                ((unsigned char*)buffer)[5] = (unsigned char)(value >> 16) & 0xff;
-                ((unsigned char*)buffer)[6] = (unsigned char)(value >>  8) & 0xff;
-                ((unsigned char*)buffer)[7] = (unsigned char)(value      ) & 0xff;
-
-                buffer++;
+    for (; byteCount--; buffer++) {
+        *buffer = _Py_bswap64(*buffer);
     }
 }
 #endif
@@ -478,7 +461,7 @@
 {
     SHAobject *newobj;
 
-    if (((PyObject*)self)->ob_type == &SHA512type) {
+    if (Py_IS_TYPE((PyObject*)self, &SHA512type)) {
         if ( (newobj = newSHA512object())==NULL)
             return NULL;
     } else {
@@ -666,13 +649,15 @@
 _sha512.sha512
 
     string: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new SHA-512 hash object; optionally initialized with a string.
 [clinic start generated code]*/
 
 static PyObject *
-_sha512_sha512_impl(PyObject *module, PyObject *string)
-/*[clinic end generated code: output=8b865a2df73bd387 input=e69bad9ae9b6a308]*/
+_sha512_sha512_impl(PyObject *module, PyObject *string, int usedforsecurity)
+/*[clinic end generated code: output=a8d9e5f9e6a0831c input=23b4daebc2ebb9c9]*/
 {
     SHAobject *new;
     Py_buffer buf;
@@ -706,13 +691,15 @@
 _sha512.sha384
 
     string: object(c_default="NULL") = b''
+    *
+    usedforsecurity: bool = True
 
 Return a new SHA-384 hash object; optionally initialized with a string.
 [clinic start generated code]*/
 
 static PyObject *
-_sha512_sha384_impl(PyObject *module, PyObject *string)
-/*[clinic end generated code: output=ae4b2e26decf81e8 input=c9327788d4ea4545]*/
+_sha512_sha384_impl(PyObject *module, PyObject *string, int usedforsecurity)
+/*[clinic end generated code: output=da7d594a08027ac3 input=59ef72f039a6b431]*/
 {
     SHAobject *new;
     Py_buffer buf;
@@ -754,9 +741,6 @@
 
 /* Initialize this module. */
 
-#define insint(n,v) { PyModule_AddIntConstant(m,n,v); }
-
-
 static struct PyModuleDef _sha512module = {
         PyModuleDef_HEAD_INIT,
         "_sha512",
@@ -774,16 +758,19 @@
 {
     PyObject *m;
 
-    Py_TYPE(&SHA384type) = &PyType_Type;
-    if (PyType_Ready(&SHA384type) < 0)
+    Py_SET_TYPE(&SHA384type, &PyType_Type);
+    if (PyType_Ready(&SHA384type) < 0) {
         return NULL;
-    Py_TYPE(&SHA512type) = &PyType_Type;
-    if (PyType_Ready(&SHA512type) < 0)
+    }
+    Py_SET_TYPE(&SHA512type, &PyType_Type);
+    if (PyType_Ready(&SHA512type) < 0) {
         return NULL;
+    }
 
     m = PyModule_Create(&_sha512module);
-    if (m == NULL)
+    if (m == NULL) {
         return NULL;
+    }
 
     Py_INCREF((PyObject *)&SHA384type);
     PyModule_AddObject(m, "SHA384Type", (PyObject *)&SHA384type);
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 119fc35..540e2d9 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -5,8 +5,10 @@
 
 #include "Python.h"
 #include "pycore_atomic.h"
+#include "pycore_call.h"
 #include "pycore_ceval.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"    // _PyThreadState_GET()
 
 #ifndef MS_WINDOWS
 #include "posixmodule.h"
@@ -25,6 +27,9 @@
 #ifdef HAVE_SIGNAL_H
 #include <signal.h>
 #endif
+#ifdef HAVE_SYS_SYSCALL_H
+#include <sys/syscall.h>
+#endif
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -99,8 +104,6 @@
    may not be the thread that received the signal.
 */
 
-#include "pythread.h"
-
 static volatile struct {
     _Py_atomic_int tripped;
     PyObject *func;
@@ -186,21 +189,6 @@
 }
 #endif
 
-static int
-is_main_interp(_PyRuntimeState *runtime, PyInterpreterState *interp)
-{
-    unsigned long thread = PyThread_get_thread_ident();
-    return (thread == runtime->main_thread
-            && interp == runtime->interpreters.main);
-}
-
-static int
-is_main(_PyRuntimeState *runtime)
-{
-    PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
-    return is_main_interp(runtime, interp);
-}
-
 static PyObject *
 signal_default_int_handler(PyObject *self, PyObject *args)
 {
@@ -262,10 +250,11 @@
        cleared in PyErr_CheckSignals() before .tripped. */
     _Py_atomic_store(&is_tripped, 1);
 
+    /* Signals are always handled by the main interpreter */
+    PyInterpreterState *interp = _PyRuntime.interpreters.main;
+
     /* Notify ceval.c */
-    _PyRuntimeState *runtime = &_PyRuntime;
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    _PyEval_SignalReceived(&runtime->ceval);
+    _PyEval_SignalReceived(interp);
 
     /* And then write to the wakeup fd *after* setting all the globals and
        doing the _PyEval_SignalReceived. We used to write to the wakeup fd
@@ -303,9 +292,9 @@
                 if (wakeup.warn_on_full_buffer ||
                     last_error != WSAEWOULDBLOCK)
                 {
-                    /* Py_AddPendingCall() isn't signal-safe, but we
+                    /* _PyEval_AddPendingCall() isn't signal-safe, but we
                        still use it for this exceptional case. */
-                    _PyEval_AddPendingCall(tstate, &runtime->ceval,
+                    _PyEval_AddPendingCall(interp,
                                            report_wakeup_send_error,
                                            (void *)(intptr_t) last_error);
                 }
@@ -322,9 +311,9 @@
                 if (wakeup.warn_on_full_buffer ||
                     (errno != EWOULDBLOCK && errno != EAGAIN))
                 {
-                    /* Py_AddPendingCall() isn't signal-safe, but we
+                    /* _PyEval_AddPendingCall() isn't signal-safe, but we
                        still use it for this exceptional case. */
-                    _PyEval_AddPendingCall(tstate, &runtime->ceval,
+                    _PyEval_AddPendingCall(interp,
                                            report_wakeup_write_error,
                                            (void *)(intptr_t)errno);
                 }
@@ -481,43 +470,53 @@
     }
 #endif
 
-    _PyRuntimeState *runtime = &_PyRuntime;
-    if (!is_main(runtime)) {
-        PyErr_SetString(PyExc_ValueError,
-                        "signal only works in main thread");
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                         "signal only works in main thread "
+                         "of the main interpreter");
         return NULL;
     }
     if (signalnum < 1 || signalnum >= NSIG) {
-        PyErr_SetString(PyExc_ValueError,
-                        "signal number out of range");
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                         "signal number out of range");
         return NULL;
     }
-    if (handler == IgnoreHandler)
+    if (handler == IgnoreHandler) {
         func = SIG_IGN;
-    else if (handler == DefaultHandler)
-        func = SIG_DFL;
-    else if (!PyCallable_Check(handler)) {
-        PyErr_SetString(PyExc_TypeError,
-"signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object");
-                return NULL;
     }
-    else
+    else if (handler == DefaultHandler) {
+        func = SIG_DFL;
+    }
+    else if (!PyCallable_Check(handler)) {
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "signal handler must be signal.SIG_IGN, "
+                         "signal.SIG_DFL, or a callable object");
+        return NULL;
+    }
+    else {
         func = signal_handler;
+    }
+
     /* Check for pending signals before changing signal handler */
-    if (_PyErr_CheckSignals()) {
+    if (_PyErr_CheckSignalsTstate(tstate)) {
         return NULL;
     }
     if (PyOS_setsig(signalnum, func) == SIG_ERR) {
         PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
     }
+
     old_handler = Handlers[signalnum].func;
     Py_INCREF(handler);
     Handlers[signalnum].func = handler;
-    if (old_handler != NULL)
+
+    if (old_handler != NULL) {
         return old_handler;
-    else
+    }
+    else {
         Py_RETURN_NONE;
+    }
 }
 
 
@@ -699,10 +698,11 @@
         return NULL;
 #endif
 
-    _PyRuntimeState *runtime = &_PyRuntime;
-    if (!is_main(runtime)) {
-        PyErr_SetString(PyExc_ValueError,
-                        "set_wakeup_fd only works in main thread");
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                         "set_wakeup_fd only works in main thread "
+                         "of the main interpreter");
         return NULL;
     }
 
@@ -728,12 +728,13 @@
 
             fd = (int)sockfd;
             if ((SOCKET_T)fd != sockfd) {
-                PyErr_SetString(PyExc_ValueError, "invalid fd");
+                _PyErr_SetString(tstate, PyExc_ValueError, "invalid fd");
                 return NULL;
             }
 
-            if (_Py_fstat(fd, &status) != 0)
+            if (_Py_fstat(fd, &status) != 0) {
                 return NULL;
+            }
 
             /* on Windows, a file cannot be set to non-blocking mode */
         }
@@ -765,9 +766,9 @@
         if (blocking < 0)
             return NULL;
         if (blocking) {
-            PyErr_Format(PyExc_ValueError,
-                         "the fd %i must be in non-blocking mode",
-                         fd);
+            _PyErr_Format(tstate, PyExc_ValueError,
+                          "the fd %i must be in non-blocking mode",
+                          fd);
             return NULL;
         }
     }
@@ -1260,6 +1261,38 @@
 #endif   /* #if defined(HAVE_PTHREAD_KILL) */
 
 
+#if defined(__linux__) && defined(__NR_pidfd_send_signal)
+/*[clinic input]
+signal.pidfd_send_signal
+
+    pidfd: int
+    signalnum: int
+    siginfo: object = None
+    flags: int = 0
+    /
+
+Send a signal to a process referred to by a pid file descriptor.
+[clinic start generated code]*/
+
+static PyObject *
+signal_pidfd_send_signal_impl(PyObject *module, int pidfd, int signalnum,
+                              PyObject *siginfo, int flags)
+/*[clinic end generated code: output=2d59f04a75d9cbdf input=2a6543a1f4ac2000]*/
+
+{
+    if (siginfo != Py_None) {
+        PyErr_SetString(PyExc_TypeError, "siginfo must be None");
+        return NULL;
+    }
+    if (syscall(__NR_pidfd_send_signal, pidfd, signalnum, NULL, flags) < 0) {
+        PyErr_SetFromErrno(PyExc_OSError);
+        return NULL;
+    }
+    Py_RETURN_NONE;
+}
+#endif
+
+
 
 /* List of functions defined in the module -- some of the methoddefs are
    defined to nothing if the corresponding C function is not available. */
@@ -1275,6 +1308,7 @@
     {"set_wakeup_fd", (PyCFunction)(void(*)(void))signal_set_wakeup_fd, METH_VARARGS | METH_KEYWORDS, set_wakeup_fd_doc},
     SIGNAL_SIGINTERRUPT_METHODDEF
     SIGNAL_PAUSE_METHODDEF
+    SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
     SIGNAL_PTHREAD_KILL_METHODDEF
     SIGNAL_PTHREAD_SIGMASK_METHODDEF
     SIGNAL_SIGPENDING_METHODDEF
@@ -1598,11 +1632,6 @@
          goto finally;
 #endif
 
-#ifdef MS_WINDOWS
-    /* Create manual-reset event, initially unset */
-    sigint_event = CreateEvent(NULL, TRUE, FALSE, FALSE);
-#endif
-
     if (PyErr_Occurred()) {
         Py_DECREF(m);
         m = NULL;
@@ -1641,24 +1670,22 @@
 int
 PyErr_CheckSignals(void)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
-    if (!is_main(runtime)) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
         return 0;
     }
 
-    return _PyErr_CheckSignals();
+    return _PyErr_CheckSignalsTstate(tstate);
 }
 
 
 /* Declared in cpython/pyerrors.h */
 int
-_PyErr_CheckSignals(void)
+_PyErr_CheckSignalsTstate(PyThreadState *tstate)
 {
-    int i;
-    PyObject *f;
-
-    if (!_Py_atomic_load(&is_tripped))
+    if (!_Py_atomic_load(&is_tripped)) {
         return 0;
+    }
 
     /*
      * The is_tripped variable is meant to speed up the calls to
@@ -1676,33 +1703,48 @@
      */
     _Py_atomic_store(&is_tripped, 0);
 
-    if (!(f = (PyObject *)PyEval_GetFrame()))
-        f = Py_None;
+    PyObject *frame = (PyObject *)tstate->frame;
+    if (!frame) {
+        frame = Py_None;
+    }
 
-    for (i = 1; i < NSIG; i++) {
-        if (_Py_atomic_load_relaxed(&Handlers[i].tripped)) {
-            PyObject *result = NULL;
-            PyObject *arglist = Py_BuildValue("(iO)", i, f);
-            _Py_atomic_store_relaxed(&Handlers[i].tripped, 0);
-
-            if (arglist) {
-                result = PyEval_CallObject(Handlers[i].func,
-                                           arglist);
-                Py_DECREF(arglist);
-            }
-            if (!result) {
-                _Py_atomic_store(&is_tripped, 1);
-                return -1;
-            }
-
-            Py_DECREF(result);
+    for (int i = 1; i < NSIG; i++) {
+        if (!_Py_atomic_load_relaxed(&Handlers[i].tripped)) {
+            continue;
         }
+        _Py_atomic_store_relaxed(&Handlers[i].tripped, 0);
+
+        PyObject *arglist = Py_BuildValue("(iO)", i, frame);
+        PyObject *result;
+        if (arglist) {
+            result = _PyObject_Call(tstate, Handlers[i].func, arglist, NULL);
+            Py_DECREF(arglist);
+        }
+        else {
+            result = NULL;
+        }
+        if (!result) {
+            /* On error, re-schedule a call to _PyErr_CheckSignalsTstate() */
+            _Py_atomic_store(&is_tripped, 1);
+            return -1;
+        }
+
+        Py_DECREF(result);
     }
 
     return 0;
 }
 
 
+
+int
+_PyErr_CheckSignals(void)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyErr_CheckSignalsTstate(tstate);
+}
+
+
 /* Simulate the effect of a signal.SIGINT signal arriving. The next time
    PyErr_CheckSignals is called,  the Python SIGINT signal handler will be
    raised.
@@ -1726,6 +1768,53 @@
     }
 }
 
+
+static int
+signal_install_handlers(void)
+{
+#ifdef SIGPIPE
+    PyOS_setsig(SIGPIPE, SIG_IGN);
+#endif
+#ifdef SIGXFZ
+    PyOS_setsig(SIGXFZ, SIG_IGN);
+#endif
+#ifdef SIGXFSZ
+    PyOS_setsig(SIGXFSZ, SIG_IGN);
+#endif
+
+    // Import _signal to install the Python SIGINT handler
+    PyObject *module = PyImport_ImportModule("_signal");
+    if (!module) {
+        return -1;
+    }
+    Py_DECREF(module);
+
+    return 0;
+}
+
+
+int
+_PySignal_Init(int install_signal_handlers)
+{
+#ifdef MS_WINDOWS
+    /* Create manual-reset event, initially unset */
+    sigint_event = CreateEvent(NULL, TRUE, FALSE, FALSE);
+    if (sigint_event == NULL) {
+        PyErr_SetFromWindowsErr(0);
+        return -1;
+    }
+#endif
+
+    if (install_signal_handlers) {
+        if (signal_install_handlers() < 0) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
 void
 PyOS_FiniInterrupts(void)
 {
@@ -1737,15 +1826,17 @@
 int
 _PyOS_InterruptOccurred(PyThreadState *tstate)
 {
-    if (_Py_atomic_load_relaxed(&Handlers[SIGINT].tripped)) {
-        _PyRuntimeState *runtime = &_PyRuntime;
-        if (!is_main_interp(runtime, tstate->interp)) {
-            return 0;
-        }
-        _Py_atomic_store_relaxed(&Handlers[SIGINT].tripped, 0);
-        return 1;
+    _Py_EnsureTstateNotNULL(tstate);
+    if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
+        return 0;
     }
-    return 0;
+
+    if (!_Py_atomic_load_relaxed(&Handlers[SIGINT].tripped)) {
+        return 0;
+    }
+
+    _Py_atomic_store_relaxed(&Handlers[SIGINT].tripped, 0);
+    return 1;
 }
 
 
@@ -1782,8 +1873,8 @@
 int
 _PyOS_IsMainThread(void)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
-    return is_main(runtime);
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    return _Py_ThreadCanHandleSignals(interp);
 }
 
 #ifdef MS_WINDOWS
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 5dc5f4e..76ef606 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -101,7 +101,7 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #ifdef _Py_MEMORY_SANITIZER
 # include <sanitizer/msan_interface.h>
@@ -146,7 +146,7 @@
 sendall(data[, flags]) -- send all data\n\
 send(data[, flags]) -- send data, may not send all of it\n\
 sendto(data[, flags], addr) -- send data to a given address\n\
-setblocking(0 | 1) -- set or clear the blocking I/O flag\n\
+setblocking(bool) -- set or clear the blocking I/O flag\n\
 getblocking() -- return True if socket is blocking, False if non-blocking\n\
 setsockopt(level, optname, value[, optlen]) -- set socket options\n\
 settimeout(None | float) -- set or clear the timeout\n\
@@ -234,13 +234,8 @@
 #define RELEASE_GETADDRINFO_LOCK
 #endif
 
-#if defined(USE_GETHOSTBYNAME_LOCK) || defined(USE_GETADDRINFO_LOCK)
-# include "pythread.h"
-#endif
-
-
 #if defined(__APPLE__) || defined(__CYGWIN__) || defined(__NetBSD__)
-# include <sys/ioctl.h>
+#  include <sys/ioctl.h>
 #endif
 
 
@@ -478,13 +473,12 @@
 #endif
 
 #ifdef MS_WIN32
-#undef EAFNOSUPPORT
-#define EAFNOSUPPORT WSAEAFNOSUPPORT
-#define snprintf _snprintf
+#  undef EAFNOSUPPORT
+#  define EAFNOSUPPORT WSAEAFNOSUPPORT
 #endif
 
 #ifndef SOCKETCLOSE
-#define SOCKETCLOSE close
+#  define SOCKETCLOSE close
 #endif
 
 #if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__) && !defined(__DragonFly__)
@@ -520,6 +514,15 @@
 #endif
 #endif
 
+#ifdef MS_WINDOWS
+#define sockaddr_rc SOCKADDR_BTH_REDEF
+
+#define USE_BLUETOOTH 1
+#define AF_BLUETOOTH AF_BTH
+#define BTPROTO_RFCOMM BTHPROTO_RFCOMM
+#define _BT_RC_MEMB(sa, memb) ((sa)->memb)
+#endif
+
 /* Convert "sock_addr_t *" to "struct sockaddr *". */
 #define SAS2SA(x)       (&((x)->sa))
 
@@ -649,7 +652,7 @@
     PyObject *v;
 
 #ifdef HAVE_HSTRERROR
-    v = Py_BuildValue("(is)", h_error, (char *)hstrerror(h_error));
+    v = Py_BuildValue("(is)", h_error, hstrerror(h_error));
 #else
     v = Py_BuildValue("(is)", h_error, "host not found");
 #endif
@@ -1267,12 +1270,23 @@
     n = sscanf(name, "%X:%X:%X:%X:%X:%X%c",
                &b5, &b4, &b3, &b2, &b1, &b0, &ch);
     if (n == 6 && (b0 | b1 | b2 | b3 | b4 | b5) < 256) {
+
+#ifdef MS_WINDOWS
+        *bdaddr = (ULONGLONG)(b0 & 0xFF);
+        *bdaddr |= ((ULONGLONG)(b1 & 0xFF) << 8);
+        *bdaddr |= ((ULONGLONG)(b2 & 0xFF) << 16);
+        *bdaddr |= ((ULONGLONG)(b3 & 0xFF) << 24);
+        *bdaddr |= ((ULONGLONG)(b4 & 0xFF) << 32);
+        *bdaddr |= ((ULONGLONG)(b5 & 0xFF) << 40);
+#else
         bdaddr->b[0] = b0;
         bdaddr->b[1] = b1;
         bdaddr->b[2] = b2;
         bdaddr->b[3] = b3;
         bdaddr->b[4] = b4;
         bdaddr->b[5] = b5;
+#endif
+
         return 6;
     } else {
         PyErr_SetString(PyExc_OSError, "bad bluetooth address");
@@ -1289,9 +1303,23 @@
 {
     char buf[(6 * 2) + 5 + 1];
 
+#ifdef MS_WINDOWS
+    int i;
+    unsigned int octets[6];
+
+    for (i = 0; i < 6; ++i) {
+        octets[i] = ((*bdaddr) >> (8 * i)) & 0xFF;
+    }
+
+    sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
+        octets[5], octets[4], octets[3],
+        octets[2], octets[1], octets[0]);
+#else
     sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
         bdaddr->b[5], bdaddr->b[4], bdaddr->b[3],
         bdaddr->b[2], bdaddr->b[1], bdaddr->b[0]);
+#endif
+
     return PyUnicode_FromString(buf);
 }
 #endif
@@ -1389,6 +1417,7 @@
     case AF_BLUETOOTH:
         switch (proto) {
 
+#ifdef BTPROTO_L2CAP
         case BTPROTO_L2CAP:
         {
             struct sockaddr_l2 *a = (struct sockaddr_l2 *) addr;
@@ -1403,6 +1432,8 @@
             return ret;
         }
 
+#endif /* BTPROTO_L2CAP */
+
         case BTPROTO_RFCOMM:
         {
             struct sockaddr_rc *a = (struct sockaddr_rc *) addr;
@@ -1417,6 +1448,7 @@
             return ret;
         }
 
+#ifdef BTPROTO_HCI
         case BTPROTO_HCI:
         {
             struct sockaddr_hci *a = (struct sockaddr_hci *) addr;
@@ -1436,6 +1468,7 @@
             return makebdaddr(&_BT_SCO_MEMB(a, bdaddr));
         }
 #endif /* !__FreeBSD__ */
+#endif /* BTPROTO_HCI */
 
         default:
             PyErr_SetString(PyExc_ValueError,
@@ -1522,6 +1555,16 @@
                                           a->can_addr.tp.tx_id);
           }
 #endif /* CAN_ISOTP */
+#ifdef CAN_J1939
+          case CAN_J1939:
+          {
+              return Py_BuildValue("O&KkB", PyUnicode_DecodeFSDefault,
+                                          ifname,
+                                          a->can_addr.j1939.name,
+                                          a->can_addr.j1939.pgn,
+                                          a->can_addr.j1939.addr);
+          }
+#endif /* CAN_J1939 */
           default:
           {
               return Py_BuildValue("(O&)", PyUnicode_DecodeFSDefault,
@@ -1631,7 +1674,7 @@
     }
     else {
         PyErr_Format(PyExc_TypeError, "str, bytes or bytearray expected, not %s",
-                     obj->ob_type->tp_name);
+                     Py_TYPE(obj)->tp_name);
         return 0;
     }
     if (strlen(data->buf) != len) {
@@ -1649,14 +1692,13 @@
 
 static int
 getsockaddrarg(PySocketSockObject *s, PyObject *args,
-               struct sockaddr *addr_ret, int *len_ret, const char *caller)
+               sock_addr_t *addrbuf, int *len_ret, const char *caller)
 {
     switch (s->sock_family) {
 
 #if defined(AF_UNIX)
     case AF_UNIX:
     {
-        struct sockaddr_un* addr;
         Py_buffer path;
         int retval = 0;
 
@@ -1674,7 +1716,7 @@
         }
         assert(path.len >= 0);
 
-        addr = (struct sockaddr_un*)addr_ret;
+        struct sockaddr_un* addr = &addrbuf->un;
 #ifdef __linux__
         if (path.len > 0 && *(const char *)path.buf == 0) {
             /* Linux abstract namespace extension */
@@ -1709,9 +1751,8 @@
 #if defined(AF_NETLINK)
     case AF_NETLINK:
     {
-        struct sockaddr_nl* addr;
         int pid, groups;
-        addr = (struct sockaddr_nl *)addr_ret;
+        struct sockaddr_nl* addr = &addrbuf->nl;
         if (!PyTuple_Check(args)) {
             PyErr_Format(
                 PyExc_TypeError,
@@ -1737,9 +1778,8 @@
 #if defined(AF_QIPCRTR)
     case AF_QIPCRTR:
     {
-        struct sockaddr_qrtr* addr;
         unsigned int node, port;
-        addr = (struct sockaddr_qrtr *)addr_ret;
+        struct sockaddr_qrtr* addr = &addrbuf->sq;
         if (!PyTuple_Check(args)) {
             PyErr_Format(
                 PyExc_TypeError,
@@ -1761,9 +1801,8 @@
 #if defined(AF_VSOCK)
     case AF_VSOCK:
     {
-        struct sockaddr_vm* addr;
+        struct sockaddr_vm* addr = &addrbuf->vm;
         int port, cid;
-        addr = (struct sockaddr_vm *)addr_ret;
         memset(addr, 0, sizeof(struct sockaddr_vm));
         if (!PyTuple_Check(args)) {
             PyErr_Format(
@@ -1791,7 +1830,6 @@
 
     case AF_INET:
     {
-        struct sockaddr_in* addr;
         struct maybe_idna host = {NULL, NULL};
         int port, result;
         if (!PyTuple_Check(args)) {
@@ -1813,7 +1851,7 @@
             }
             return 0;
         }
-        addr=(struct sockaddr_in*)addr_ret;
+        struct sockaddr_in* addr = &addrbuf->in;
         result = setipaddr(host.buf, (struct sockaddr *)addr,
                            sizeof(*addr),  AF_INET);
         idna_cleanup(&host);
@@ -1834,7 +1872,6 @@
 #ifdef ENABLE_IPV6
     case AF_INET6:
     {
-        struct sockaddr_in6* addr;
         struct maybe_idna host = {NULL, NULL};
         int port, result;
         unsigned int flowinfo, scope_id;
@@ -1859,7 +1896,7 @@
             }
             return 0;
         }
-        addr = (struct sockaddr_in6*)addr_ret;
+        struct sockaddr_in6* addr = &addrbuf->in6;
         result = setipaddr(host.buf, (struct sockaddr *)addr,
                            sizeof(*addr), AF_INET6);
         idna_cleanup(&host);
@@ -1890,12 +1927,12 @@
     case AF_BLUETOOTH:
     {
         switch (s->sock_proto) {
+#ifdef BTPROTO_L2CAP
         case BTPROTO_L2CAP:
         {
-            struct sockaddr_l2 *addr;
             const char *straddr;
 
-            addr = (struct sockaddr_l2 *)addr_ret;
+            struct sockaddr_l2 *addr = &addrbuf->bt_l2;
             memset(addr, 0, sizeof(struct sockaddr_l2));
             _BT_L2_MEMB(addr, family) = AF_BLUETOOTH;
             if (!PyArg_ParseTuple(args, "si", &straddr,
@@ -1910,12 +1947,11 @@
             *len_ret = sizeof *addr;
             return 1;
         }
+#endif /* BTPROTO_L2CAP */
         case BTPROTO_RFCOMM:
         {
-            struct sockaddr_rc *addr;
             const char *straddr;
-
-            addr = (struct sockaddr_rc *)addr_ret;
+            struct sockaddr_rc *addr = &addrbuf->bt_rc;
             _BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
             if (!PyArg_ParseTuple(args, "si", &straddr,
                                   &_BT_RC_MEMB(addr, channel))) {
@@ -1929,9 +1965,10 @@
             *len_ret = sizeof *addr;
             return 1;
         }
+#ifdef BTPROTO_HCI
         case BTPROTO_HCI:
         {
-            struct sockaddr_hci *addr = (struct sockaddr_hci *)addr_ret;
+            struct sockaddr_hci *addr = &addrbuf->bt_hci;
 #if defined(__NetBSD__) || defined(__DragonFly__)
             const char *straddr;
             _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
@@ -1957,10 +1994,9 @@
 #if !defined(__FreeBSD__)
         case BTPROTO_SCO:
         {
-            struct sockaddr_sco *addr;
             const char *straddr;
 
-            addr = (struct sockaddr_sco *)addr_ret;
+            struct sockaddr_sco *addr = &addrbuf->bt_sco;
             _BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
             if (!PyBytes_Check(args)) {
                 PyErr_Format(PyExc_OSError,
@@ -1975,6 +2011,7 @@
             return 1;
         }
 #endif /* !__FreeBSD__ */
+#endif /* BTPROTO_HCI */
         default:
             PyErr_Format(PyExc_OSError,
                          "%s(): unknown Bluetooth protocol", caller);
@@ -1986,7 +2023,6 @@
 #if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX)
     case AF_PACKET:
     {
-        struct sockaddr_ll* addr;
         struct ifreq ifr;
         const char *interfaceName;
         int protoNumber;
@@ -2037,7 +2073,7 @@
             PyBuffer_Release(&haddr);
             return 0;
         }
-        addr = (struct sockaddr_ll*)addr_ret;
+        struct sockaddr_ll* addr = &addrbuf->ll;
         addr->sll_family = AF_PACKET;
         addr->sll_protocol = htons((short)protoNumber);
         addr->sll_ifindex = ifr.ifr_ifindex;
@@ -2060,7 +2096,6 @@
     {
         unsigned int atype, v1, v2, v3;
         unsigned int scope = TIPC_CLUSTER_SCOPE;
-        struct sockaddr_tipc *addr;
 
         if (!PyTuple_Check(args)) {
             PyErr_Format(
@@ -2078,7 +2113,7 @@
             return 0;
         }
 
-        addr = (struct sockaddr_tipc *) addr_ret;
+        struct sockaddr_tipc *addr = &addrbuf->tipc;
         memset(addr, 0, sizeof(struct sockaddr_tipc));
 
         addr->family = AF_TIPC;
@@ -2119,11 +2154,10 @@
 #endif
 #if defined(CAN_RAW) || defined(CAN_BCM)
         {
-            struct sockaddr_can *addr;
             PyObject *interfaceName;
             struct ifreq ifr;
             Py_ssize_t len;
-            addr = (struct sockaddr_can *)addr_ret;
+            struct sockaddr_can *addr = &addrbuf->can;
 
             if (!PyTuple_Check(args)) {
                 PyErr_Format(PyExc_TypeError,
@@ -2170,13 +2204,12 @@
 #ifdef CAN_ISOTP
         case CAN_ISOTP:
         {
-            struct sockaddr_can *addr;
             PyObject *interfaceName;
             struct ifreq ifr;
             Py_ssize_t len;
             unsigned long int rx_id, tx_id;
 
-            addr = (struct sockaddr_can *)addr_ret;
+            struct sockaddr_can *addr = &addrbuf->can;
 
             if (!PyArg_ParseTuple(args, "O&kk", PyUnicode_FSConverter,
                                               &interfaceName,
@@ -2213,6 +2246,55 @@
             return 1;
         }
 #endif /* CAN_ISOTP */
+#ifdef CAN_J1939
+        case CAN_J1939:
+        {
+            PyObject *interfaceName;
+            struct ifreq ifr;
+            Py_ssize_t len;
+            uint64_t j1939_name;
+            uint32_t j1939_pgn;
+            uint8_t j1939_addr;
+
+            struct sockaddr_can *addr = &addrbuf->can;
+
+            if (!PyArg_ParseTuple(args, "O&KkB", PyUnicode_FSConverter,
+                                              &interfaceName,
+                                              &j1939_name,
+                                              &j1939_pgn,
+                                              &j1939_addr))
+                return 0;
+
+            len = PyBytes_GET_SIZE(interfaceName);
+
+            if (len == 0) {
+                ifr.ifr_ifindex = 0;
+            } else if ((size_t)len < sizeof(ifr.ifr_name)) {
+                strncpy(ifr.ifr_name, PyBytes_AS_STRING(interfaceName), sizeof(ifr.ifr_name));
+                ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
+                if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) {
+                    s->errorhandler();
+                    Py_DECREF(interfaceName);
+                    return 0;
+                }
+            } else {
+                PyErr_SetString(PyExc_OSError,
+                                "AF_CAN interface name too long");
+                Py_DECREF(interfaceName);
+                return 0;
+            }
+
+            addr->can_family = AF_CAN;
+            addr->can_ifindex = ifr.ifr_ifindex;
+            addr->can_addr.j1939.name = j1939_name;
+            addr->can_addr.j1939.pgn = j1939_pgn;
+            addr->can_addr.j1939.addr = j1939_addr;
+
+            *len_ret = sizeof(*addr);
+            Py_DECREF(interfaceName);
+            return 1;
+        }
+#endif /* CAN_J1939 */
         default:
             PyErr_Format(PyExc_OSError,
                          "%s(): unsupported CAN protocol", caller);
@@ -2226,9 +2308,7 @@
 #ifdef SYSPROTO_CONTROL
         case SYSPROTO_CONTROL:
         {
-            struct sockaddr_ctl *addr;
-
-            addr = (struct sockaddr_ctl *)addr_ret;
+            struct sockaddr_ctl *addr = &addrbuf->ctl;
             addr->sc_family = AF_SYSTEM;
             addr->ss_sysaddr = AF_SYS_CONTROL;
 
@@ -2280,10 +2360,9 @@
 #ifdef HAVE_SOCKADDR_ALG
     case AF_ALG:
     {
-        struct sockaddr_alg *sa;
         const char *type;
         const char *name;
-        sa = (struct sockaddr_alg *)addr_ret;
+        struct sockaddr_alg *sa = &addrbuf->alg;
 
         memset(sa, 0, sizeof(*sa));
         sa->salg_family = AF_ALG;
@@ -2396,12 +2475,15 @@
         switch(s->sock_proto)
         {
 
+#ifdef BTPROTO_L2CAP
         case BTPROTO_L2CAP:
             *len_ret = sizeof (struct sockaddr_l2);
             return 1;
+#endif /* BTPROTO_L2CAP */
         case BTPROTO_RFCOMM:
             *len_ret = sizeof (struct sockaddr_rc);
             return 1;
+#ifdef BTPROTO_HCI
         case BTPROTO_HCI:
             *len_ret = sizeof (struct sockaddr_hci);
             return 1;
@@ -2410,6 +2492,7 @@
             *len_ret = sizeof (struct sockaddr_sco);
             return 1;
 #endif /* !__FreeBSD__ */
+#endif /* BTPROTO_HCI */
         default:
             PyErr_SetString(PyExc_OSError, "getsockaddrlen: "
                             "unknown BT protocol");
@@ -3063,7 +3146,7 @@
     int addrlen;
     int res;
 
-    if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen, "bind")) {
+    if (!getsockaddrarg(s, addro, &addrbuf, &addrlen, "bind")) {
         return NULL;
     }
 
@@ -3233,7 +3316,7 @@
     int addrlen;
     int res;
 
-    if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen, "connect")) {
+    if (!getsockaddrarg(s, addro, &addrbuf, &addrlen, "connect")) {
         return NULL;
     }
 
@@ -3264,7 +3347,7 @@
     int addrlen;
     int res;
 
-    if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen, "connect_ex")) {
+    if (!getsockaddrarg(s, addro, &addrbuf, &addrlen, "connect_ex")) {
         return NULL;
     }
 
@@ -4269,7 +4352,7 @@
         return select_error();
     }
 
-    if (!getsockaddrarg(s, addro, SAS2SA(&addrbuf), &addrlen, "sendto")) {
+    if (!getsockaddrarg(s, addro, &addrbuf, &addrlen, "sendto")) {
         PyBuffer_Release(&pbuf);
         return NULL;
     }
@@ -4404,7 +4487,7 @@
 
     /* Parse destination address. */
     if (addr_arg != NULL && addr_arg != Py_None) {
-        if (!getsockaddrarg(s, addr_arg, SAS2SA(&addrbuf), &addrlen,
+        if (!getsockaddrarg(s, addr_arg, &addrbuf, &addrlen,
                             "sendmsg"))
         {
             goto finally;
@@ -7071,7 +7154,7 @@
     }
 #endif
 
-    Py_TYPE(&sock_type) = &PyType_Type;
+    Py_SET_TYPE(&sock_type, &PyType_Type);
     m = PyModule_Create(&socketmodule);
     if (m == NULL)
         return NULL;
@@ -7285,23 +7368,29 @@
 
 #ifdef USE_BLUETOOTH
     PyModule_AddIntMacro(m, AF_BLUETOOTH);
+#ifdef BTPROTO_L2CAP
     PyModule_AddIntMacro(m, BTPROTO_L2CAP);
+#endif /* BTPROTO_L2CAP */
+#ifdef BTPROTO_HCI
     PyModule_AddIntMacro(m, BTPROTO_HCI);
     PyModule_AddIntMacro(m, SOL_HCI);
 #if !defined(__NetBSD__) && !defined(__DragonFly__)
     PyModule_AddIntMacro(m, HCI_FILTER);
-#endif
 #if !defined(__FreeBSD__)
-#if !defined(__NetBSD__) && !defined(__DragonFly__)
     PyModule_AddIntMacro(m, HCI_TIME_STAMP);
-#endif
     PyModule_AddIntMacro(m, HCI_DATA_DIR);
-    PyModule_AddIntMacro(m, BTPROTO_SCO);
-#endif
+#endif /* !__FreeBSD__ */
+#endif /* !__NetBSD__ && !__DragonFly__ */
+#endif /* BTPROTO_HCI */
+#ifdef BTPROTO_RFCOMM
     PyModule_AddIntMacro(m, BTPROTO_RFCOMM);
+#endif /* BTPROTO_RFCOMM */
     PyModule_AddStringConstant(m, "BDADDR_ANY", "00:00:00:00:00:00");
     PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF");
-#endif
+#ifdef BTPROTO_SCO
+    PyModule_AddIntMacro(m, BTPROTO_SCO);
+#endif /* BTPROTO_SCO */
+#endif /* USE_BLUETOOTH */
 
 #ifdef AF_CAN
     /* Controller Area Network */
@@ -7656,6 +7745,9 @@
 #ifdef CAN_ISOTP
     PyModule_AddIntMacro(m, CAN_ISOTP);
 #endif
+#ifdef CAN_J1939
+    PyModule_AddIntMacro(m, CAN_J1939);
+#endif
 #endif
 #ifdef HAVE_LINUX_CAN_RAW_H
     PyModule_AddIntMacro(m, CAN_RAW_FILTER);
@@ -7666,6 +7758,9 @@
 #ifdef HAVE_LINUX_CAN_RAW_FD_FRAMES
     PyModule_AddIntMacro(m, CAN_RAW_FD_FRAMES);
 #endif
+#ifdef HAVE_LINUX_CAN_RAW_JOIN_FILTERS
+    PyModule_AddIntMacro(m, CAN_RAW_JOIN_FILTERS);
+#endif
 #ifdef HAVE_LINUX_CAN_BCM_H
     PyModule_AddIntMacro(m, CAN_BCM);
 
@@ -7700,6 +7795,37 @@
     PyModule_AddIntConstant(m, "CAN_BCM_CAN_FD_FRAME", CAN_FD_FRAME);
 #endif
 #endif
+#ifdef HAVE_LINUX_CAN_J1939_H
+    PyModule_AddIntMacro(m, J1939_MAX_UNICAST_ADDR);
+    PyModule_AddIntMacro(m, J1939_IDLE_ADDR);
+    PyModule_AddIntMacro(m, J1939_NO_ADDR);
+    PyModule_AddIntMacro(m, J1939_NO_NAME);
+    PyModule_AddIntMacro(m, J1939_PGN_REQUEST);
+    PyModule_AddIntMacro(m, J1939_PGN_ADDRESS_CLAIMED);
+    PyModule_AddIntMacro(m, J1939_PGN_ADDRESS_COMMANDED);
+    PyModule_AddIntMacro(m, J1939_PGN_PDU1_MAX);
+    PyModule_AddIntMacro(m, J1939_PGN_MAX);
+    PyModule_AddIntMacro(m, J1939_NO_PGN);
+
+    /* J1939 socket options */
+    PyModule_AddIntMacro(m, SO_J1939_FILTER);
+    PyModule_AddIntMacro(m, SO_J1939_PROMISC);
+    PyModule_AddIntMacro(m, SO_J1939_SEND_PRIO);
+    PyModule_AddIntMacro(m, SO_J1939_ERRQUEUE);
+
+    PyModule_AddIntMacro(m, SCM_J1939_DEST_ADDR);
+    PyModule_AddIntMacro(m, SCM_J1939_DEST_NAME);
+    PyModule_AddIntMacro(m, SCM_J1939_PRIO);
+    PyModule_AddIntMacro(m, SCM_J1939_ERRQUEUE);
+
+    PyModule_AddIntMacro(m, J1939_NLA_PAD);
+    PyModule_AddIntMacro(m, J1939_NLA_BYTES_ACKED);
+
+    PyModule_AddIntMacro(m, J1939_EE_INFO_NONE);
+    PyModule_AddIntMacro(m, J1939_EE_INFO_TX_ABORT);
+
+    PyModule_AddIntMacro(m, J1939_FILTER_MAX);
+#endif
 #ifdef SOL_RDS
     PyModule_AddIntMacro(m, SOL_RDS);
 #endif
@@ -7768,6 +7894,17 @@
 #else
     PyModule_AddIntConstant(m, "IPPROTO_UDP", 17);
 #endif
+#ifdef  IPPROTO_UDPLITE
+    PyModule_AddIntMacro(m, IPPROTO_UDPLITE);
+    #ifndef UDPLITE_SEND_CSCOV
+        #define UDPLITE_SEND_CSCOV 10
+    #endif
+    PyModule_AddIntMacro(m, UDPLITE_SEND_CSCOV);
+    #ifndef UDPLITE_RECV_CSCOV
+        #define UDPLITE_RECV_CSCOV 11
+    #endif
+    PyModule_AddIntMacro(m, UDPLITE_RECV_CSCOV);
+#endif
 #ifdef  IPPROTO_IDP
     PyModule_AddIntMacro(m, IPPROTO_IDP);
 #endif
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
index dff1f8f..ba2c9f5 100644
--- a/Modules/socketmodule.h
+++ b/Modules/socketmodule.h
@@ -14,6 +14,47 @@
 
 #else /* MS_WINDOWS */
 # include <winsock2.h>
+
+/*
+ * If Windows has bluetooth support, include bluetooth constants.
+ */
+#ifdef AF_BTH
+# include <ws2bth.h>
+# include <pshpack1.h>
+
+/*
+ * The current implementation assumes the bdaddr in the sockaddr structs
+ * will be a bdaddr_t. We treat this as an opaque type: on *nix systems, it
+ * will be a struct with a single member (an array of six bytes). On windows,
+ * we typedef this to ULONGLONG to match the Windows definition.
+ */
+typedef ULONGLONG bdaddr_t;
+
+/*
+ * Redefine SOCKADDR_BTH to provide names compatible with _BT_RC_MEMB() macros.
+ */
+struct SOCKADDR_BTH_REDEF {
+    union {
+        USHORT    addressFamily;
+        USHORT    family;
+    };
+
+    union {
+        ULONGLONG btAddr;
+        bdaddr_t  bdaddr;
+    };
+
+    GUID      serviceClassId;
+
+    union {
+        ULONG     port;
+        ULONG     channel;
+    };
+
+};
+# include <poppack.h>
+#endif
+
 /* Windows 'supports' CMSG_LEN, but does not follow the POSIX standard
  * interface at all, so there is no point including the code that
  * attempts to use it.
@@ -103,6 +144,10 @@
 #include <linux/can/bcm.h>
 #endif
 
+#ifdef HAVE_LINUX_CAN_J1939_H
+#include <linux/can/j1939.h>
+#endif
+
 #ifdef HAVE_SYS_SYS_DOMAIN_H
 #include <sys/sys_domain.h>
 #endif
@@ -194,11 +239,18 @@
     struct sockaddr_in6 in6;
     struct sockaddr_storage storage;
 #endif
-#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
+#if defined(HAVE_BLUETOOTH_H) && defined(__FreeBSD__)
+    struct sockaddr_l2cap bt_l2;
+    struct sockaddr_rfcomm bt_rc;
+    struct sockaddr_sco bt_sco;
+    struct sockaddr_hci bt_hci;
+#elif defined(HAVE_BLUETOOTH_BLUETOOTH_H)
     struct sockaddr_l2 bt_l2;
     struct sockaddr_rc bt_rc;
     struct sockaddr_sco bt_sco;
     struct sockaddr_hci bt_hci;
+#elif defined(MS_WINDOWS)
+    struct SOCKADDR_BTH_REDEF bt_rc;
 #endif
 #ifdef HAVE_NETPACKET_PACKET_H
     struct sockaddr_ll ll;
@@ -218,6 +270,9 @@
 #ifdef AF_VSOCK
     struct sockaddr_vm vm;
 #endif
+#ifdef HAVE_LINUX_TIPC_H
+    struct sockaddr_tipc tipc;
+#endif
 } sock_addr_t;
 
 /* The object holding a socket.  It holds some extra information,
diff --git a/Modules/sre.h b/Modules/sre.h
index a728488..9b0d8b1 100644
--- a/Modules/sre.h
+++ b/Modules/sre.h
@@ -54,17 +54,17 @@
 
 typedef struct SRE_REPEAT_T {
     Py_ssize_t count;
-    SRE_CODE* pattern; /* points to REPEAT operator arguments */
-    void* last_ptr; /* helper to check for infinite loops */
+    const SRE_CODE* pattern; /* points to REPEAT operator arguments */
+    const void* last_ptr; /* helper to check for infinite loops */
     struct SRE_REPEAT_T *prev; /* points to previous repeat context */
 } SRE_REPEAT;
 
 typedef struct {
     /* string pointers */
-    void* ptr; /* current position (also end of current slice) */
-    void* beginning; /* start of original string */
-    void* start; /* start of current slice */
-    void* end; /* end of original string */
+    const void* ptr; /* current position (also end of current slice) */
+    const void* beginning; /* start of original string */
+    const void* start; /* start of current slice */
+    const void* end; /* end of original string */
     /* attributes for the match object */
     PyObject* string;
     Py_buffer buffer;
@@ -74,7 +74,7 @@
     /* registers */
     Py_ssize_t lastindex;
     Py_ssize_t lastmark;
-    void** mark;
+    const void** mark;
     int match_all;
     int must_advance;
     /* dynamically allocated stuff */
diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h
index 437ab43..9cc7863 100644
--- a/Modules/sre_lib.h
+++ b/Modules/sre_lib.h
@@ -13,7 +13,7 @@
 /* This file is included three times, with different character settings */
 
 LOCAL(int)
-SRE(at)(SRE_STATE* state, SRE_CHAR* ptr, SRE_CODE at)
+SRE(at)(SRE_STATE* state, const SRE_CHAR* ptr, SRE_CODE at)
 {
     /* check if pointer is at given position */
 
@@ -101,7 +101,7 @@
 }
 
 LOCAL(int)
-SRE(charset)(SRE_STATE* state, SRE_CODE* set, SRE_CODE ch)
+SRE(charset)(SRE_STATE* state, const SRE_CODE* set, SRE_CODE ch)
 {
     /* check if character is a member of the given set */
 
@@ -188,7 +188,7 @@
 }
 
 LOCAL(int)
-SRE(charset_loc_ignore)(SRE_STATE* state, SRE_CODE* set, SRE_CODE ch)
+SRE(charset_loc_ignore)(SRE_STATE* state, const SRE_CODE* set, SRE_CODE ch)
 {
     SRE_CODE lo, up;
     lo = sre_lower_locale(ch);
@@ -199,15 +199,15 @@
     return up != lo && SRE(charset)(state, set, up);
 }
 
-LOCAL(Py_ssize_t) SRE(match)(SRE_STATE* state, SRE_CODE* pattern, int toplevel);
+LOCAL(Py_ssize_t) SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel);
 
 LOCAL(Py_ssize_t)
-SRE(count)(SRE_STATE* state, SRE_CODE* pattern, Py_ssize_t maxcount)
+SRE(count)(SRE_STATE* state, const SRE_CODE* pattern, Py_ssize_t maxcount)
 {
     SRE_CODE chr;
     SRE_CHAR c;
-    SRE_CHAR* ptr = (SRE_CHAR *)state->ptr;
-    SRE_CHAR* end = (SRE_CHAR *)state->end;
+    const SRE_CHAR* ptr = (const SRE_CHAR *)state->ptr;
+    const SRE_CHAR* end = (const SRE_CHAR *)state->end;
     Py_ssize_t i;
 
     /* adjust end */
@@ -335,14 +335,14 @@
 
 #if 0 /* not used in this release */
 LOCAL(int)
-SRE(info)(SRE_STATE* state, SRE_CODE* pattern)
+SRE(info)(SRE_STATE* state, const SRE_CODE* pattern)
 {
     /* check if an SRE_OP_INFO block matches at the current position.
        returns the number of SRE_CODE objects to skip if successful, 0
        if no match */
 
-    SRE_CHAR* end = (SRE_CHAR*) state->end;
-    SRE_CHAR* ptr = (SRE_CHAR*) state->ptr;
+    const SRE_CHAR* end = (const SRE_CHAR*) state->end;
+    const SRE_CHAR* ptr = (const SRE_CHAR*) state->ptr;
     Py_ssize_t i;
 
     /* check minimal length */
@@ -531,8 +531,8 @@
 typedef struct {
     Py_ssize_t last_ctx_pos;
     Py_ssize_t jump;
-    SRE_CHAR* ptr;
-    SRE_CODE* pattern;
+    const SRE_CHAR* ptr;
+    const SRE_CODE* pattern;
     Py_ssize_t count;
     Py_ssize_t lastmark;
     Py_ssize_t lastindex;
@@ -546,9 +546,9 @@
 /* check if string matches the given pattern.  returns <0 for
    error, 0 for failure, and 1 for success */
 LOCAL(Py_ssize_t)
-SRE(match)(SRE_STATE* state, SRE_CODE* pattern, int toplevel)
+SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel)
 {
-    SRE_CHAR* end = (SRE_CHAR *)state->end;
+    const SRE_CHAR* end = (const SRE_CHAR *)state->end;
     Py_ssize_t alloc_pos, ctx_pos = -1;
     Py_ssize_t i, ret = 0;
     Py_ssize_t jump;
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index 66ea270..cdc94a6 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -50,7 +50,7 @@
 /* syslog module */
 
 #include "Python.h"
-#include "osdefs.h"
+#include "osdefs.h"               // SEP
 
 #include <syslog.h>
 
@@ -99,7 +99,7 @@
     if (slash == -2)
         return NULL;
     if (slash != -1) {
-        return PyUnicode_Substring(scriptobj, slash, scriptlen);
+        return PyUnicode_Substring(scriptobj, slash + 1, scriptlen);
     } else {
         Py_INCREF(scriptobj);
         return(scriptobj);
@@ -261,72 +261,55 @@
     {NULL,              NULL,                   0}
 };
 
-/* Initialization function for the module */
 
-
-static struct PyModuleDef syslogmodule = {
-    PyModuleDef_HEAD_INIT,
-    "syslog",
-    NULL,
-    -1,
-    syslog_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
-
-PyMODINIT_FUNC
-PyInit_syslog(void)
+static int
+syslog_exec(PyObject *module)
 {
-    PyObject *m;
-
-    /* Create the module and add the functions */
-    m = PyModule_Create(&syslogmodule);
-    if (m == NULL)
-        return NULL;
-
-    /* Add some symbolic constants to the module */
-
+#define ADD_INT_MACRO(module, macro)                                  \
+    do {                                                              \
+        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
+            return -1;                                                \
+        }                                                             \
+    } while (0)
     /* Priorities */
-    PyModule_AddIntMacro(m, LOG_EMERG);
-    PyModule_AddIntMacro(m, LOG_ALERT);
-    PyModule_AddIntMacro(m, LOG_CRIT);
-    PyModule_AddIntMacro(m, LOG_ERR);
-    PyModule_AddIntMacro(m, LOG_WARNING);
-    PyModule_AddIntMacro(m, LOG_NOTICE);
-    PyModule_AddIntMacro(m, LOG_INFO);
-    PyModule_AddIntMacro(m, LOG_DEBUG);
+    ADD_INT_MACRO(module, LOG_EMERG);
+    ADD_INT_MACRO(module, LOG_ALERT);
+    ADD_INT_MACRO(module, LOG_CRIT);
+    ADD_INT_MACRO(module, LOG_ERR);
+    ADD_INT_MACRO(module, LOG_WARNING);
+    ADD_INT_MACRO(module, LOG_NOTICE);
+    ADD_INT_MACRO(module, LOG_INFO);
+    ADD_INT_MACRO(module, LOG_DEBUG);
 
     /* openlog() option flags */
-    PyModule_AddIntMacro(m, LOG_PID);
-    PyModule_AddIntMacro(m, LOG_CONS);
-    PyModule_AddIntMacro(m, LOG_NDELAY);
+    ADD_INT_MACRO(module, LOG_PID);
+    ADD_INT_MACRO(module, LOG_CONS);
+    ADD_INT_MACRO(module, LOG_NDELAY);
 #ifdef LOG_ODELAY
-    PyModule_AddIntMacro(m, LOG_ODELAY);
+    ADD_INT_MACRO(module, LOG_ODELAY);
 #endif
 #ifdef LOG_NOWAIT
-    PyModule_AddIntMacro(m, LOG_NOWAIT);
+    ADD_INT_MACRO(module, LOG_NOWAIT);
 #endif
 #ifdef LOG_PERROR
-    PyModule_AddIntMacro(m, LOG_PERROR);
+    ADD_INT_MACRO(module, LOG_PERROR);
 #endif
 
     /* Facilities */
-    PyModule_AddIntMacro(m, LOG_KERN);
-    PyModule_AddIntMacro(m, LOG_USER);
-    PyModule_AddIntMacro(m, LOG_MAIL);
-    PyModule_AddIntMacro(m, LOG_DAEMON);
-    PyModule_AddIntMacro(m, LOG_AUTH);
-    PyModule_AddIntMacro(m, LOG_LPR);
-    PyModule_AddIntMacro(m, LOG_LOCAL0);
-    PyModule_AddIntMacro(m, LOG_LOCAL1);
-    PyModule_AddIntMacro(m, LOG_LOCAL2);
-    PyModule_AddIntMacro(m, LOG_LOCAL3);
-    PyModule_AddIntMacro(m, LOG_LOCAL4);
-    PyModule_AddIntMacro(m, LOG_LOCAL5);
-    PyModule_AddIntMacro(m, LOG_LOCAL6);
-    PyModule_AddIntMacro(m, LOG_LOCAL7);
+    ADD_INT_MACRO(module, LOG_KERN);
+    ADD_INT_MACRO(module, LOG_USER);
+    ADD_INT_MACRO(module, LOG_MAIL);
+    ADD_INT_MACRO(module, LOG_DAEMON);
+    ADD_INT_MACRO(module, LOG_AUTH);
+    ADD_INT_MACRO(module, LOG_LPR);
+    ADD_INT_MACRO(module, LOG_LOCAL0);
+    ADD_INT_MACRO(module, LOG_LOCAL1);
+    ADD_INT_MACRO(module, LOG_LOCAL2);
+    ADD_INT_MACRO(module, LOG_LOCAL3);
+    ADD_INT_MACRO(module, LOG_LOCAL4);
+    ADD_INT_MACRO(module, LOG_LOCAL5);
+    ADD_INT_MACRO(module, LOG_LOCAL6);
+    ADD_INT_MACRO(module, LOG_LOCAL7);
 
 #ifndef LOG_SYSLOG
 #define LOG_SYSLOG              LOG_DAEMON
@@ -341,14 +324,35 @@
 #define LOG_CRON                LOG_DAEMON
 #endif
 
-    PyModule_AddIntMacro(m, LOG_SYSLOG);
-    PyModule_AddIntMacro(m, LOG_CRON);
-    PyModule_AddIntMacro(m, LOG_UUCP);
-    PyModule_AddIntMacro(m, LOG_NEWS);
+    ADD_INT_MACRO(module, LOG_SYSLOG);
+    ADD_INT_MACRO(module, LOG_CRON);
+    ADD_INT_MACRO(module, LOG_UUCP);
+    ADD_INT_MACRO(module, LOG_NEWS);
 
 #ifdef LOG_AUTHPRIV
-    PyModule_AddIntMacro(m, LOG_AUTHPRIV);
+    ADD_INT_MACRO(module, LOG_AUTHPRIV);
 #endif
 
-    return m;
+    return 0;
 }
+
+static PyModuleDef_Slot syslog_slots[] = {
+    {Py_mod_exec, syslog_exec},
+    {0, NULL}
+};
+
+/* Initialization function for the module */
+
+static struct PyModuleDef syslogmodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "syslog",
+    .m_size = 0,
+    .m_methods = syslog_methods,
+    .m_slots = syslog_slots,
+};
+
+PyMODINIT_FUNC
+PyInit_syslog(void)
+{
+    return PyModuleDef_Init(&syslogmodule);
+}
\ No newline at end of file
diff --git a/Modules/termios.c b/Modules/termios.c
index aee7f12..75e5e52 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -39,7 +39,19 @@
 argument. This can be an integer file descriptor, such as returned by\n\
 sys.stdin.fileno(), or a file object, such as sys.stdin itself.");
 
-static PyObject *TermiosError;
+typedef struct {
+  PyObject *TermiosError;
+} termiosmodulestate;
+
+static inline termiosmodulestate*
+get_termios_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (termiosmodulestate *)state;
+}
+
+#define modulestate_global get_termios_state(PyState_FindModule(&termiosmodule))
 
 static int fdconv(PyObject* obj, void* p)
 {
@@ -53,6 +65,8 @@
     return 0;
 }
 
+static struct PyModuleDef termiosmodule;
+
 PyDoc_STRVAR(termios_tcgetattr__doc__,
 "tcgetattr(fd) -> list_of_attrs\n\
 \n\
@@ -80,7 +94,7 @@
         return NULL;
 
     if (tcgetattr(fd, &mode) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(modulestate_global->TermiosError);
 
     ispeed = cfgetispeed(&mode);
     ospeed = cfgetospeed(&mode);
@@ -160,8 +174,9 @@
     }
 
     /* Get the old mode, in case there are any hidden fields... */
+    termiosmodulestate *state = modulestate_global;
     if (tcgetattr(fd, &mode) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(state->TermiosError);
     mode.c_iflag = (tcflag_t) PyLong_AsLong(PyList_GetItem(term, 0));
     mode.c_oflag = (tcflag_t) PyLong_AsLong(PyList_GetItem(term, 1));
     mode.c_cflag = (tcflag_t) PyLong_AsLong(PyList_GetItem(term, 2));
@@ -194,11 +209,11 @@
     }
 
     if (cfsetispeed(&mode, (speed_t) ispeed) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(state->TermiosError);
     if (cfsetospeed(&mode, (speed_t) ospeed) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(state->TermiosError);
     if (tcsetattr(fd, when, &mode) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(state->TermiosError);
 
     Py_RETURN_NONE;
 }
@@ -219,7 +234,7 @@
                           fdconv, &fd, &duration))
         return NULL;
     if (tcsendbreak(fd, duration) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(modulestate_global->TermiosError);
 
     Py_RETURN_NONE;
 }
@@ -238,7 +253,7 @@
                           fdconv, &fd))
         return NULL;
     if (tcdrain(fd) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(modulestate_global->TermiosError);
 
     Py_RETURN_NONE;
 }
@@ -260,7 +275,7 @@
                           fdconv, &fd, &queue))
         return NULL;
     if (tcflush(fd, queue) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(modulestate_global->TermiosError);
 
     Py_RETURN_NONE;
 }
@@ -282,7 +297,7 @@
                           fdconv, &fd, &action))
         return NULL;
     if (tcflow(fd, action) == -1)
-        return PyErr_SetFromErrno(TermiosError);
+        return PyErr_SetFromErrno(modulestate_global->TermiosError);
 
     Py_RETURN_NONE;
 }
@@ -606,6 +621,39 @@
 #ifdef B460800
     {"B460800", B460800},
 #endif
+#ifdef B500000
+    {"B500000", B500000},
+#endif
+#ifdef B576000
+    { "B576000", B576000},
+#endif
+#ifdef B921600
+    { "B921600", B921600},
+#endif
+#ifdef B1000000
+    { "B1000000", B1000000},
+#endif
+#ifdef B1152000
+    { "B1152000", B1152000},
+#endif
+#ifdef B1500000
+    { "B1500000", B1500000},
+#endif
+#ifdef B2000000
+    { "B2000000", B2000000},
+#endif
+#ifdef B2500000
+    { "B2500000", B2500000},
+#endif
+#ifdef B3000000
+    { "B3000000", B3000000},
+#endif
+#ifdef B3500000
+    { "B3500000", B3500000},
+#endif
+#ifdef B4000000
+    { "B4000000", B4000000},
+#endif
 #ifdef CBAUD
     {"CBAUD", CBAUD},
 #endif
@@ -935,17 +983,30 @@
     {NULL, 0}
 };
 
+static int termiosmodule_traverse(PyObject *m, visitproc visit, void *arg) {
+    Py_VISIT(get_termios_state(m)->TermiosError);
+    return 0;
+}
+
+static int termiosmodule_clear(PyObject *m) {
+    Py_CLEAR(get_termios_state(m)->TermiosError);
+    return 0;
+}
+
+static void termiosmodule_free(void *m) {
+    termiosmodule_clear((PyObject *)m);
+}
 
 static struct PyModuleDef termiosmodule = {
     PyModuleDef_HEAD_INIT,
     "termios",
     termios__doc__,
-    -1,
+    sizeof(termiosmodulestate),
     termios_methods,
     NULL,
-    NULL,
-    NULL,
-    NULL
+    termiosmodule_traverse,
+    termiosmodule_clear,
+    termiosmodule_free,
 };
 
 PyMODINIT_FUNC
@@ -954,15 +1015,22 @@
     PyObject *m;
     struct constant *constant = termios_constants;
 
-    m = PyModule_Create(&termiosmodule);
-    if (m == NULL)
-        return NULL;
-
-    if (TermiosError == NULL) {
-        TermiosError = PyErr_NewException("termios.error", NULL, NULL);
+    if ((m = PyState_FindModule(&termiosmodule)) != NULL) {
+        Py_INCREF(m);
+        return m;
     }
-    Py_INCREF(TermiosError);
-    PyModule_AddObject(m, "error", TermiosError);
+
+    if ((m = PyModule_Create(&termiosmodule)) == NULL) {
+        return NULL;
+    }
+
+    termiosmodulestate *state = get_termios_state(m);
+    state->TermiosError = PyErr_NewException("termios.error", NULL, NULL);
+    if (state->TermiosError == NULL) {
+        return NULL;
+    }
+    Py_INCREF(state->TermiosError);
+    PyModule_AddObject(m, "error", state->TermiosError);
 
     while (constant->name != NULL) {
         PyModule_AddIntConstant(m, constant->name, constant->value);
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 5e0010c..80eab30 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -24,14 +24,17 @@
 #  include <pthread.h>
 #endif
 
+#if defined(_AIX)
+#   include <sys/thread.h>
+#endif
+
 #if defined(__WATCOMC__) && !defined(__QNX__)
-#include <i86.h>
+#  include <i86.h>
 #else
-#ifdef MS_WINDOWS
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include "pythread.h"
-#endif /* MS_WINDOWS */
+#  ifdef MS_WINDOWS
+#    define WIN32_LEAN_AND_MEAN
+#    include <windows.h>
+#  endif /* MS_WINDOWS */
 #endif /* !__WATCOMC__ || __QNX__ */
 
 #ifdef _Py_MEMORY_SANITIZER
@@ -48,6 +51,15 @@
 #define _Py_tzname tzname
 #endif
 
+#if defined(__APPLE__ ) && defined(__has_builtin) 
+#  if __has_builtin(__builtin_available)
+#    define HAVE_CLOCK_GETTIME_RUNTIME __builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)
+#  endif
+#endif
+#ifndef HAVE_CLOCK_GETTIME_RUNTIME
+#  define HAVE_CLOCK_GETTIME_RUNTIME 1
+#endif
+
 #define SEC_TO_NS (1000 * 1000 * 1000)
 
 /* Forward declarations */
@@ -146,6 +158,16 @@
 }
 
 #ifdef HAVE_CLOCK_GETTIME
+
+#ifdef __APPLE__
+/* 
+ * The clock_* functions will be removed from the module
+ * dict entirely when the C API is not available.
+ */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability"
+#endif
+
 static PyObject *
 time_clock_gettime(PyObject *self, PyObject *args)
 {
@@ -294,6 +316,11 @@
 "clock_getres(clk_id) -> floating point number\n\
 \n\
 Return the resolution (precision) of the specified clock clk_id.");
+
+#ifdef __APPLE__
+#pragma clang diagnostic pop
+#endif
+
 #endif   /* HAVE_CLOCK_GETRES */
 
 #ifdef HAVE_PTHREAD_GETCPUCLOCKID
@@ -550,7 +577,7 @@
     p->tm_wday = (p->tm_wday + 1) % 7;
     p->tm_yday--;
 #ifdef HAVE_STRUCT_TM_TM_ZONE
-    if (Py_TYPE(args) == &StructTimeType) {
+    if (Py_IS_TYPE(args, &StructTimeType)) {
         PyObject *item;
         item = PyStructSequence_GET_ITEM(args, 9);
         if (item != Py_None) {
@@ -1159,31 +1186,35 @@
 #if defined(HAVE_CLOCK_GETTIME) \
     && (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF))
     struct timespec ts;
+
+    if (HAVE_CLOCK_GETTIME_RUNTIME) {
+
 #ifdef CLOCK_PROF
-    const clockid_t clk_id = CLOCK_PROF;
-    const char *function = "clock_gettime(CLOCK_PROF)";
+        const clockid_t clk_id = CLOCK_PROF;
+        const char *function = "clock_gettime(CLOCK_PROF)";
 #else
-    const clockid_t clk_id = CLOCK_PROCESS_CPUTIME_ID;
-    const char *function = "clock_gettime(CLOCK_PROCESS_CPUTIME_ID)";
+        const clockid_t clk_id = CLOCK_PROCESS_CPUTIME_ID;
+        const char *function = "clock_gettime(CLOCK_PROCESS_CPUTIME_ID)";
 #endif
 
-    if (clock_gettime(clk_id, &ts) == 0) {
-        if (info) {
-            struct timespec res;
-            info->implementation = function;
-            info->monotonic = 1;
-            info->adjustable = 0;
-            if (clock_getres(clk_id, &res)) {
-                PyErr_SetFromErrno(PyExc_OSError);
+        if (clock_gettime(clk_id, &ts) == 0) {
+            if (info) {
+                struct timespec res;
+                info->implementation = function;
+                info->monotonic = 1;
+                info->adjustable = 0;
+                if (clock_getres(clk_id, &res)) {
+                    PyErr_SetFromErrno(PyExc_OSError);
+                    return -1;
+                }
+                info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
+            }
+
+            if (_PyTime_FromTimespec(tp, &ts) < 0) {
                 return -1;
             }
-            info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
+            return 0;
         }
-
-        if (_PyTime_FromTimespec(tp, &ts) < 0) {
-            return -1;
-        }
-        return 0;
     }
 #endif
 
@@ -1344,8 +1375,59 @@
     return 0;
 }
 
+#elif defined(_AIX)
+#define HAVE_THREAD_TIME
+static int
+_PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
+{
+    /* bpo-40192: On AIX, thread_cputime() is preferred: it has nanosecond
+       resolution, whereas clock_gettime(CLOCK_THREAD_CPUTIME_ID)
+       has a resolution of 10 ms. */
+    thread_cputime_t tc;
+    if (thread_cputime(-1, &tc) != 0) {
+        PyErr_SetFromErrno(PyExc_OSError);
+        return -1;
+    }
+
+    if (info) {
+        info->implementation = "thread_cputime()";
+        info->monotonic = 1;
+        info->adjustable = 0;
+        info->resolution = 1e-9;
+    }
+    *tp = _PyTime_FromNanoseconds(tc.stime + tc.utime);
+    return 0;
+}
+
+#elif defined(__sun) && defined(__SVR4)
+#define HAVE_THREAD_TIME
+static int
+_PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
+{
+    /* bpo-35455: On Solaris, CLOCK_THREAD_CPUTIME_ID clock is not always
+       available; use gethrvtime() to substitute this functionality. */
+    if (info) {
+        info->implementation = "gethrvtime()";
+        info->resolution = 1e-9;
+        info->monotonic = 1;
+        info->adjustable = 0;
+    }
+    *tp = _PyTime_FromNanoseconds(gethrvtime());
+    return 0;
+}
+
 #elif defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
 #define HAVE_THREAD_TIME
+
+#if defined(__APPLE__) && defined(__has_attribute) && __has_attribute(availability)
+static int
+_PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info) 
+     __attribute__((availability(macos, introduced=10.12)))
+     __attribute__((availability(ios, introduced=10.0)))
+     __attribute__((availability(tvos, introduced=10.0)))
+     __attribute__((availability(watchos, introduced=3.0)));
+#endif
+
 static int
 _PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
 {
@@ -1377,6 +1459,15 @@
 #endif
 
 #ifdef HAVE_THREAD_TIME
+#ifdef __APPLE__
+/* 
+ * The clock_* functions will be removed from the module
+ * dict entirely when the C API is not available.
+ */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability"
+#endif
+
 static PyObject *
 time_thread_time(PyObject *self, PyObject *unused)
 {
@@ -1407,6 +1498,11 @@
 \n\
 Thread time for profiling as nanoseconds:\n\
 sum of the kernel and user-space CPU time.");
+
+#ifdef __APPLE__
+#pragma clang diagnostic pop
+#endif
+
 #endif
 
 
@@ -1456,9 +1552,19 @@
     }
 #ifdef HAVE_THREAD_TIME
     else if (strcmp(name, "thread_time") == 0) {
-        if (_PyTime_GetThreadTimeWithInfo(&t, &info) < 0) {
+
+#ifdef __APPLE__
+        if (HAVE_CLOCK_GETTIME_RUNTIME) {
+#endif
+            if (_PyTime_GetThreadTimeWithInfo(&t, &info) < 0) {
+                return NULL;
+            }
+#ifdef __APPLE__
+        } else {
+            PyErr_SetString(PyExc_ValueError, "unknown clock");
             return NULL;
         }
+#endif
     }
 #endif
     else {
@@ -1736,75 +1842,136 @@
 if it is -1, mktime() should guess based on the date and time.\n");
 
 
-
-static struct PyModuleDef timemodule = {
-    PyModuleDef_HEAD_INIT,
-    "time",
-    module_doc,
-    -1,
-    time_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
-};
-
-PyMODINIT_FUNC
-PyInit_time(void)
+static int
+time_exec(PyObject *module)
 {
-    PyObject *m;
-    m = PyModule_Create(&timemodule);
-    if (m == NULL)
-        return NULL;
+#if defined(__APPLE__) && defined(HAVE_CLOCK_GETTIME)
+    if (HAVE_CLOCK_GETTIME_RUNTIME) {
+        /* pass: ^^^ cannot use '!' here */
+    } else {
+        PyObject* dct = PyModule_GetDict(module);
+        if (dct == NULL) {
+            return -1;
+        }
 
+        if (PyDict_DelItemString(dct, "clock_gettime") == -1) {
+            PyErr_Clear();
+        }
+        if (PyDict_DelItemString(dct, "clock_gettime_ns") == -1) {
+            PyErr_Clear();
+        }
+        if (PyDict_DelItemString(dct, "clock_settime") == -1) {
+            PyErr_Clear();
+        }
+        if (PyDict_DelItemString(dct, "clock_settime_ns") == -1) {
+            PyErr_Clear();
+        }
+        if (PyDict_DelItemString(dct, "clock_getres") == -1) {
+            PyErr_Clear();
+        }
+    }
+#endif
+#if defined(__APPLE__) && defined(HAVE_THREAD_TIME)
+    if (HAVE_CLOCK_GETTIME_RUNTIME) {
+        /* pass: ^^^ cannot use '!' here */
+    } else {
+        PyObject* dct = PyModule_GetDict(module);
+
+        if (PyDict_DelItemString(dct, "thread_time") == -1) {
+            PyErr_Clear();
+        }
+        if (PyDict_DelItemString(dct, "thread_time_ns") == -1) {
+            PyErr_Clear();
+        }
+    }
+#endif
     /* Set, or reset, module variables like time.timezone */
-    if (init_timezone(m) < 0) {
-        return NULL;
+    if (init_timezone(module) < 0) {
+        return -1;
     }
 
 #if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES)
+    if (HAVE_CLOCK_GETTIME_RUNTIME) {
 
 #ifdef CLOCK_REALTIME
-    PyModule_AddIntMacro(m, CLOCK_REALTIME);
+        if (PyModule_AddIntMacro(module, CLOCK_REALTIME) < 0) {
+            return -1;
+        }
 #endif
+
 #ifdef CLOCK_MONOTONIC
-    PyModule_AddIntMacro(m, CLOCK_MONOTONIC);
+
+        if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC) < 0) {
+            return -1;
+        }
+
 #endif
 #ifdef CLOCK_MONOTONIC_RAW
-    PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW);
+        if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW) < 0) {
+            return -1;
+        }
 #endif
+
 #ifdef CLOCK_HIGHRES
-    PyModule_AddIntMacro(m, CLOCK_HIGHRES);
+        if (PyModule_AddIntMacro(module, CLOCK_HIGHRES) < 0) {
+            return -1;
+        }
 #endif
 #ifdef CLOCK_PROCESS_CPUTIME_ID
-    PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID);
+        if (PyModule_AddIntMacro(module, CLOCK_PROCESS_CPUTIME_ID) < 0) {
+            return -1;
+        }
 #endif
+
 #ifdef CLOCK_THREAD_CPUTIME_ID
-    PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID);
+        if (PyModule_AddIntMacro(module, CLOCK_THREAD_CPUTIME_ID) < 0) {
+            return -1;
+        }
 #endif
 #ifdef CLOCK_PROF
-    PyModule_AddIntMacro(m, CLOCK_PROF);
+        if (PyModule_AddIntMacro(module, CLOCK_PROF) < 0) {
+            return -1;
+        }
 #endif
 #ifdef CLOCK_BOOTTIME
-    PyModule_AddIntMacro(m, CLOCK_BOOTTIME);
+        if (PyModule_AddIntMacro(module, CLOCK_BOOTTIME) < 0) {
+            return -1;
+        }
+#endif
+#ifdef CLOCK_TAI
+        if (PyModule_AddIntMacro(module, CLOCK_TAI) < 0) {
+            return -1;
+        }
 #endif
 #ifdef CLOCK_UPTIME
-    PyModule_AddIntMacro(m, CLOCK_UPTIME);
+        if (PyModule_AddIntMacro(module, CLOCK_UPTIME) < 0) {
+            return -1;
+        }
 #endif
 #ifdef CLOCK_UPTIME_RAW
-    PyModule_AddIntMacro(m, CLOCK_UPTIME_RAW);
+
+        if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW) < 0) {
+            return -1;
+        }
 #endif
+    }
 
 #endif  /* defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES) */
 
     if (!initialized) {
         if (PyStructSequence_InitType2(&StructTimeType,
-                                       &struct_time_type_desc) < 0)
-            return NULL;
+                                       &struct_time_type_desc) < 0) {
+            return -1;
+        }
+    }
+    if (PyModule_AddIntConstant(module, "_STRUCT_TM_ITEMS", 11)) {
+        return -1;
     }
     Py_INCREF(&StructTimeType);
-    PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 11);
-    PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType);
+    if (PyModule_AddObject(module, "struct_time", (PyObject*) &StructTimeType)) {
+        Py_DECREF(&StructTimeType);
+        return -1;
+    }
     initialized = 1;
 
 #if defined(__linux__) && !defined(__GLIBC__)
@@ -1814,10 +1981,30 @@
         utc_string = tm.tm_zone;
 #endif
 
-    if (PyErr_Occurred()) {
-        return NULL;
-    }
-    return m;
+    return 0;
+}
+
+static struct PyModuleDef_Slot time_slots[] = {
+    {Py_mod_exec, time_exec},
+    {0, NULL}
+};
+
+static struct PyModuleDef timemodule = {
+    PyModuleDef_HEAD_INIT,
+    "time",
+    module_doc,
+    0,
+    time_methods,
+    time_slots,
+    NULL,
+    NULL,
+    NULL
+};
+
+PyMODINIT_FUNC
+PyInit_time(void)
+{
+    return PyModuleDef_Init(&timemodule);
 }
 
 /* Implement pysleep() for various platforms.
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 5e8ba60..8a1198a 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -17,7 +17,7 @@
 
 #include "Python.h"
 #include "ucnhash.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #include <stdbool.h>
 
@@ -92,7 +92,7 @@
 
 /* forward declaration */
 static PyTypeObject UCD_Type;
-#define UCD_Check(o) (Py_TYPE(o)==&UCD_Type)
+#define UCD_Check(o) Py_IS_TYPE(o, &UCD_Type)
 
 static PyObject*
 new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4),
@@ -496,7 +496,7 @@
     Py_UCS4 *output;
     Py_ssize_t i, o, osize;
     int kind;
-    void *data;
+    const void *data;
     /* Longest decomposition in Unicode 3.2: U+FDFA */
     Py_UCS4 stack[20];
     Py_ssize_t space, isize;
@@ -623,7 +623,7 @@
 }
 
 static int
-find_nfc_index(PyObject *self, struct reindex* nfc, Py_UCS4 code)
+find_nfc_index(const struct reindex* nfc, Py_UCS4 code)
 {
     unsigned int index;
     for (index = 0; nfc[index].start; index++) {
@@ -643,7 +643,7 @@
 {
     PyObject *result;
     int kind;
-    void *data;
+    const void *data;
     Py_UCS4 *output;
     Py_ssize_t i, i1, o, len;
     int f,l,index,index1,comb;
@@ -709,7 +709,7 @@
       }
 
       /* code is still input[i] here */
-      f = find_nfc_index(self, nfc_first, code);
+      f = find_nfc_index(nfc_first, code);
       if (f == -1) {
           output[o++] = code;
           i++;
@@ -732,7 +732,7 @@
                   continue;
               }
           }
-          l = find_nfc_index(self, nfc_last, code1);
+          l = find_nfc_index(nfc_last, code1);
           /* i1 cannot be combined with i. If i1
              is a starter, we don't need to look further.
              Otherwise, record the combining class. */
@@ -757,7 +757,7 @@
           assert(cskipped < 20);
           skipped[cskipped++] = i1;
           i1++;
-          f = find_nfc_index(self, nfc_first, output[o]);
+          f = find_nfc_index(nfc_first, output[o]);
           if (f == -1)
               break;
       }
@@ -795,7 +795,7 @@
  */
 static QuickcheckResult
 is_normalized_quickcheck(PyObject *self, PyObject *input,
-                         int nfc, int k, bool yes_only)
+                         bool nfc, bool k, bool yes_only)
 {
     /* An older version of the database is requested, quickchecks must be
        disabled. */
@@ -804,7 +804,7 @@
 
     Py_ssize_t i, len;
     int kind;
-    void *data;
+    const void *data;
     unsigned char prev_combining = 0;
 
     /* The two quickcheck bits at this shift have type QuickcheckResult. */
@@ -869,25 +869,25 @@
     }
 
     PyObject *result;
-    int nfc = 0;
-    int k = 0;
+    bool nfc = false;
+    bool k = false;
     QuickcheckResult m;
 
     PyObject *cmp;
     int match = 0;
 
     if (_PyUnicode_EqualToASCIIId(form, &PyId_NFC)) {
-        nfc = 1;
+        nfc = true;
     }
     else if (_PyUnicode_EqualToASCIIId(form, &PyId_NFKC)) {
-        nfc = 1;
-        k = 1;
+        nfc = true;
+        k = true;
     }
     else if (_PyUnicode_EqualToASCIIId(form, &PyId_NFD)) {
         /* matches default values for `nfc` and `k` */
     }
     else if (_PyUnicode_EqualToASCIIId(form, &PyId_NFKD)) {
-        k = 1;
+        k = true;
     }
     else {
         PyErr_SetString(PyExc_ValueError, "invalid normalization form");
@@ -940,28 +940,28 @@
     }
 
     if (_PyUnicode_EqualToASCIIId(form, &PyId_NFC)) {
-        if (is_normalized_quickcheck(self, input, 1, 0, true) == YES) {
+        if (is_normalized_quickcheck(self, input, true,  false, true) == YES) {
             Py_INCREF(input);
             return input;
         }
         return nfc_nfkc(self, input, 0);
     }
     if (_PyUnicode_EqualToASCIIId(form, &PyId_NFKC)) {
-        if (is_normalized_quickcheck(self, input, 1, 1, true) == YES) {
+        if (is_normalized_quickcheck(self, input, true,  true,  true) == YES) {
             Py_INCREF(input);
             return input;
         }
         return nfc_nfkc(self, input, 1);
     }
     if (_PyUnicode_EqualToASCIIId(form, &PyId_NFD)) {
-        if (is_normalized_quickcheck(self, input, 0, 0, true) == YES) {
+        if (is_normalized_quickcheck(self, input, false, false, true) == YES) {
             Py_INCREF(input);
             return input;
         }
         return nfd_nfkd(self, input, 0);
     }
     if (_PyUnicode_EqualToASCIIId(form, &PyId_NFKD)) {
-        if (is_normalized_quickcheck(self, input, 0, 1, true) == YES) {
+        if (is_normalized_quickcheck(self, input, false, true,  true) == YES) {
             Py_INCREF(input);
             return input;
         }
@@ -987,7 +987,7 @@
     unsigned long h = 0;
     unsigned long ix;
     for (i = 0; i < len; i++) {
-        h = (h * scale) + (unsigned char) Py_TOUPPER(Py_CHARMASK(s[i]));
+        h = (h * scale) + (unsigned char) Py_TOUPPER(s[i]);
         ix = h & 0xff000000;
         if (ix)
             h = (h ^ ((ix>>24) & 0xff)) & 0x00ffffff;
@@ -1031,13 +1031,14 @@
 is_unified_ideograph(Py_UCS4 code)
 {
     return
-        (0x3400 <= code && code <= 0x4DB5)   || /* CJK Ideograph Extension A */
-        (0x4E00 <= code && code <= 0x9FEF)   || /* CJK Ideograph */
-        (0x20000 <= code && code <= 0x2A6D6) || /* CJK Ideograph Extension B */
+        (0x3400 <= code && code <= 0x4DBF)   || /* CJK Ideograph Extension A */
+        (0x4E00 <= code && code <= 0x9FFC)   || /* CJK Ideograph */
+        (0x20000 <= code && code <= 0x2A6DD) || /* CJK Ideograph Extension B */
         (0x2A700 <= code && code <= 0x2B734) || /* CJK Ideograph Extension C */
         (0x2B740 <= code && code <= 0x2B81D) || /* CJK Ideograph Extension D */
         (0x2B820 <= code && code <= 0x2CEA1) || /* CJK Ideograph Extension E */
-        (0x2CEB0 <= code && code <= 0x2EBEF);   /* CJK Ideograph Extension F */
+        (0x2CEB0 <= code && code <= 0x2EBE0) || /* CJK Ideograph Extension F */
+        (0x30000 <= code && code <= 0x3134A);   /* CJK Ideograph Extension G */
 }
 
 /* macros used to determine if the given code point is in the PUA range that
@@ -1157,7 +1158,7 @@
     if (!_getucname(self, code, buffer, NAME_MAXLEN, 1))
         return 0;
     for (i = 0; i < namelen; i++) {
-        if (Py_TOUPPER(Py_CHARMASK(name[i])) != buffer[i])
+        if (Py_TOUPPER(name[i]) != buffer[i])
             return 0;
     }
     return buffer[namelen] == '\0';
@@ -1455,7 +1456,7 @@
 {
     PyObject *m, *v;
 
-    Py_TYPE(&UCD_Type) = &PyType_Type;
+    Py_SET_TYPE(&UCD_Type, &PyType_Type);
 
     m = PyModule_Create(&unicodedatamodule);
     if (!m)
diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h
index 286287d..da93876 100644
--- a/Modules/unicodedata_db.h
+++ b/Modules/unicodedata_db.h
@@ -1,6 +1,6 @@
 /* this file was generated by Tools/unicode/makeunicodedata.py 3.3 */
 
-#define UNIDATA_VERSION "12.1.0"
+#define UNIDATA_VERSION "13.0.0"
 /* a list of unique database records */
 const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {0, 0, 0, 0, 0, 0},
@@ -335,6 +335,8 @@
     {9, 0, 12, 0, 5, 0},
     {9, 0, 5, 0, 5, 0},
     {4, 9, 1, 0, 5, 0},
+    {4, 0, 14, 0, 2, 0},
+    {5, 6, 1, 0, 2, 0},
     {30, 0, 1, 0, 5, 170},
     {5, 216, 1, 0, 5, 0},
     {5, 226, 1, 0, 5, 0},
@@ -346,8 +348,8 @@
 };
 
 /* Reindexing of NFC first characters. */
-#define TOTAL_FIRST 376
-#define TOTAL_LAST 62
+#define TOTAL_FIRST 377
+#define TOTAL_LAST 63
 struct reindex{int start;short count,index;};
 static struct reindex nfc_first[] = {
     { 60, 2, 0},
@@ -560,6 +562,7 @@
     { 70471, 0, 372},
     { 70841, 0, 373},
     { 71096, 1, 374},
+    { 71989, 0, 376},
     {0,0,0}
 };
 
@@ -603,6 +606,7 @@
   { 70842, 0, 59},
   { 70845, 0, 60},
   { 71087, 0, 61},
+  { 71984, 0, 62},
   {0,0,0}
 };
 
@@ -736,40 +740,40 @@
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 123, 124,
     125, 126, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
     138, 139, 140, 141, 142, 143, 144, 138, 41, 41, 145, 138, 146, 147, 148,
-    149, 150, 151, 152, 153, 154, 155, 156, 138, 157, 138, 158, 159, 160,
-    161, 162, 163, 164, 165, 166, 138, 167, 168, 138, 169, 170, 171, 172,
-    138, 173, 174, 138, 175, 176, 177, 138, 138, 178, 179, 180, 181, 138,
-    182, 138, 183, 41, 41, 41, 41, 41, 41, 41, 184, 185, 41, 186, 138, 138,
+    149, 150, 151, 152, 153, 154, 155, 156, 138, 157, 158, 159, 160, 161,
+    162, 163, 164, 165, 166, 167, 138, 168, 169, 138, 170, 171, 172, 173,
+    138, 174, 175, 176, 177, 178, 179, 138, 138, 180, 181, 182, 183, 138,
+    184, 138, 185, 41, 41, 41, 41, 41, 41, 41, 186, 187, 41, 188, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 187, 138, 138,
+    138, 138, 138, 138, 138, 41, 41, 41, 41, 41, 41, 41, 41, 189, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 41, 41, 41, 41, 188, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    138, 41, 41, 41, 41, 190, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 41, 41, 41, 41, 189, 190, 191, 192, 138, 138, 138, 138, 193,
-    194, 195, 196, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+    138, 138, 41, 41, 41, 41, 191, 192, 193, 194, 138, 138, 138, 138, 195,
+    196, 197, 198, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 101, 101, 101, 101, 101, 101, 101, 197, 101, 101, 101, 101, 101,
-    198, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    101, 101, 101, 101, 101, 101, 101, 101, 199, 101, 101, 101, 101, 101,
+    101, 101, 101, 101, 200, 201, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 101, 101, 199, 101, 101, 200, 138, 138, 138,
+    138, 138, 138, 138, 138, 101, 101, 202, 101, 101, 203, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 201, 202, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    138, 204, 205, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, 203,
-    204, 205, 206, 207, 208, 138, 209, 210, 211, 212, 213, 214, 215, 216, 78,
-    78, 78, 78, 217, 218, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    219, 138, 220, 138, 138, 221, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 222, 223, 224, 138, 138, 138, 138, 138, 225, 226, 227, 138,
-    228, 229, 138, 138, 230, 231, 232, 233, 234, 138, 235, 236, 237, 238,
-    239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 138, 138,
+    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 78, 206,
+    207, 208, 209, 210, 211, 138, 212, 213, 214, 215, 216, 217, 218, 219, 78,
+    78, 78, 78, 220, 221, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    222, 138, 223, 138, 138, 224, 138, 138, 138, 138, 138, 138, 138, 138,
+    138, 138, 225, 226, 227, 138, 138, 138, 138, 138, 228, 229, 230, 138,
+    231, 232, 138, 138, 233, 234, 235, 236, 237, 138, 238, 239, 240, 241,
+    242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
     138, 138, 138, 138, 138, 138, 138, 138, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
@@ -794,19 +798,22 @@
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 101, 101, 101, 101, 251, 101, 101, 101, 101, 101, 101, 101, 101,
+    101, 101, 101, 101, 101, 256, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 252, 101, 253, 101,
+    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 257, 101, 258, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 254, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+    101, 259, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 101, 101, 255, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    101, 101, 101, 260, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    122, 122, 122, 122, 256, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    122, 122, 122, 122, 261, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    138, 138, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 262, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
@@ -1206,10 +1213,7 @@
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
-    138, 138, 138, 138, 138, 138, 257, 138, 258, 259, 138, 138, 138, 138,
+    138, 138, 138, 138, 138, 138, 263, 138, 264, 265, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
@@ -1282,7 +1286,7 @@
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
-    121, 121, 121, 121, 121, 121, 121, 260, 121, 121, 121, 121, 121, 121,
+    121, 121, 121, 121, 121, 121, 121, 266, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
@@ -1319,7 +1323,7 @@
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
-    121, 260,
+    121, 266,
 };
 
 static const unsigned short index2[] = {
@@ -1452,171 +1456,171 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118,
     118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
-    118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 81, 81, 81, 81, 81, 81, 81,
-    81, 81, 81, 81, 81, 81, 81, 108, 86, 81, 81, 86, 81, 81, 86, 81, 81, 81,
-    86, 86, 86, 121, 122, 123, 81, 81, 81, 86, 81, 81, 86, 86, 81, 81, 81,
-    81, 81, 135, 135, 135, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+    118, 118, 118, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 81,
+    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 108, 86, 81, 81, 86,
+    81, 81, 86, 81, 81, 81, 86, 86, 86, 121, 122, 123, 81, 81, 81, 86, 81,
+    81, 86, 86, 81, 81, 81, 81, 81, 135, 135, 135, 140, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 141, 48, 48, 48, 48, 48, 48, 48, 141, 48,
-    48, 141, 48, 48, 48, 48, 48, 135, 140, 142, 48, 140, 140, 140, 135, 135,
-    135, 135, 135, 135, 135, 135, 140, 140, 140, 140, 143, 140, 140, 48, 81,
-    86, 81, 81, 135, 135, 135, 144, 144, 144, 144, 144, 144, 144, 144, 48,
-    48, 135, 135, 83, 83, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-    83, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135,
-    140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 141, 48, 48, 48,
+    48, 48, 48, 48, 141, 48, 48, 141, 48, 48, 48, 48, 48, 135, 140, 142, 48,
+    140, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 140, 140, 140,
+    140, 143, 140, 140, 48, 81, 86, 81, 81, 135, 135, 135, 144, 144, 144,
+    144, 144, 144, 144, 144, 48, 48, 135, 135, 83, 83, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 83, 53, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 135, 140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+    0, 0, 0, 48, 48, 48, 48, 0, 0, 146, 48, 147, 140, 140, 135, 135, 135,
+    135, 0, 0, 140, 140, 0, 0, 148, 148, 143, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+    147, 0, 0, 0, 0, 144, 144, 0, 144, 48, 48, 135, 135, 0, 0, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 145, 48, 48, 85, 85, 149, 149, 149, 149,
+    149, 149, 80, 85, 48, 83, 81, 0, 0, 135, 135, 140, 0, 48, 48, 48, 48, 48,
+    48, 0, 0, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
+    48, 0, 48, 144, 0, 48, 144, 0, 48, 48, 0, 0, 146, 0, 140, 140, 140, 135,
+    135, 0, 0, 0, 0, 135, 135, 0, 0, 135, 135, 143, 0, 0, 0, 135, 0, 0, 0, 0,
+    0, 0, 0, 144, 144, 144, 48, 0, 144, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 145, 135, 135, 48, 48, 48, 135, 83, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+    48, 0, 48, 48, 48, 48, 48, 0, 0, 146, 48, 140, 140, 140, 135, 135, 135,
+    135, 135, 0, 135, 135, 140, 0, 140, 140, 143, 0, 0, 48, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 83, 85, 0, 0, 0, 0, 0, 0, 0, 48, 135, 135,
+    135, 135, 135, 135, 0, 135, 140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+    48, 0, 48, 48, 48, 48, 48, 0, 0, 146, 48, 147, 135, 140, 135, 135, 135,
+    135, 0, 0, 140, 148, 0, 0, 148, 148, 143, 0, 0, 0, 0, 0, 0, 0, 135, 150,
+    147, 0, 0, 0, 0, 144, 144, 0, 48, 48, 48, 135, 135, 0, 0, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 145, 80, 48, 149, 149, 149, 149, 149, 149,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, 48, 0, 0,
+    0, 48, 48, 48, 0, 48, 48, 141, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0,
+    0, 0, 48, 48, 0, 0, 0, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 0, 0, 0, 0, 147, 140, 135, 140, 140, 0, 0, 0, 140,
+    140, 140, 0, 148, 148, 148, 143, 0, 0, 48, 0, 0, 0, 0, 0, 0, 147, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145,
+    145, 145, 145, 149, 149, 149, 26, 26, 26, 26, 26, 26, 85, 26, 0, 0, 0, 0,
+    0, 135, 140, 140, 140, 135, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48,
+    48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 135, 135, 135, 140, 140, 140, 140,
+    0, 135, 135, 151, 0, 135, 135, 135, 143, 0, 0, 0, 0, 0, 0, 0, 152, 153,
+    0, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 135, 135, 0, 0, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 83, 154, 154, 154,
+    154, 154, 154, 154, 80, 48, 135, 140, 140, 83, 48, 48, 48, 48, 48, 48,
+    48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 0, 146, 48, 140, 155, 148, 140,
+    147, 140, 140, 0, 155, 148, 148, 0, 148, 148, 135, 143, 0, 0, 0, 0, 0, 0,
+    0, 147, 147, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 48, 135, 135, 0, 0, 145,
+    145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 48, 48, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 135, 135, 140, 140, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 0,
-    0, 146, 48, 147, 140, 140, 135, 135, 135, 135, 0, 0, 140, 140, 0, 0, 148,
-    148, 143, 48, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 144, 144, 0, 144,
-    48, 48, 135, 135, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-    48, 48, 85, 85, 149, 149, 149, 149, 149, 149, 80, 85, 48, 83, 81, 0, 0,
-    135, 135, 140, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 0, 0, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 144, 0, 48, 144, 0, 48,
-    48, 0, 0, 146, 0, 140, 140, 140, 135, 135, 0, 0, 0, 0, 135, 135, 0, 0,
-    135, 135, 143, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, 48, 0,
-    144, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-    145, 135, 135, 48, 48, 48, 135, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
-    135, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48,
-    48, 0, 0, 146, 48, 140, 140, 140, 135, 135, 135, 135, 135, 0, 135, 135,
-    140, 0, 140, 140, 143, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 48, 48, 135, 135, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145,
-    145, 145, 83, 85, 0, 0, 0, 0, 0, 0, 0, 48, 135, 135, 135, 135, 135, 135,
-    0, 135, 140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48,
-    48, 48, 0, 0, 146, 48, 147, 135, 140, 135, 135, 135, 135, 0, 0, 140, 148,
-    0, 0, 148, 148, 143, 0, 0, 0, 0, 0, 0, 0, 0, 150, 147, 0, 0, 0, 0, 144,
-    144, 0, 48, 48, 48, 135, 135, 0, 0, 145, 145, 145, 145, 145, 145, 145,
-    145, 145, 145, 80, 48, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 135, 48, 0, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 0, 48,
-    48, 141, 48, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 0, 0, 0, 48, 48, 0, 0, 0,
-    48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
-    0, 0, 0, 147, 140, 135, 140, 140, 0, 0, 0, 140, 140, 140, 0, 148, 148,
-    148, 143, 0, 0, 48, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 149, 149,
-    149, 26, 26, 26, 26, 26, 26, 85, 26, 0, 0, 0, 0, 0, 135, 140, 140, 140,
-    135, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
-    0, 0, 48, 135, 135, 135, 140, 140, 140, 140, 0, 135, 135, 151, 0, 135,
-    135, 135, 143, 0, 0, 0, 0, 0, 0, 0, 152, 153, 0, 48, 48, 48, 0, 0, 0, 0,
-    0, 48, 48, 135, 135, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-    145, 0, 0, 0, 0, 0, 0, 0, 83, 154, 154, 154, 154, 154, 154, 154, 80, 48,
-    135, 140, 140, 83, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48,
-    48, 48, 0, 0, 146, 48, 140, 155, 148, 140, 147, 140, 140, 0, 155, 148,
-    148, 0, 148, 148, 135, 143, 0, 0, 0, 0, 0, 0, 0, 147, 147, 0, 0, 0, 0, 0,
-    0, 0, 48, 0, 48, 48, 135, 135, 0, 0, 145, 145, 145, 145, 145, 145, 145,
-    145, 145, 145, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
-    135, 140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 0, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 143, 143, 48, 147, 140, 140, 135,
+    135, 135, 135, 0, 140, 140, 140, 0, 148, 148, 148, 143, 48, 80, 0, 0, 0,
+    0, 48, 48, 48, 147, 149, 149, 149, 149, 149, 149, 149, 48, 48, 48, 135,
+    135, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 149, 149,
+    149, 149, 149, 149, 149, 149, 149, 80, 48, 48, 48, 48, 48, 48, 0, 135,
+    140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 0, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 156, 0, 0,
+    0, 0, 147, 140, 140, 135, 135, 135, 0, 135, 0, 140, 140, 148, 140, 148,
+    148, 148, 147, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 145, 0, 0, 140, 140, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 143, 143, 48, 147, 140, 140, 135, 135, 135, 135, 0, 140,
-    140, 140, 0, 148, 148, 148, 143, 48, 80, 0, 0, 0, 0, 48, 48, 48, 147,
-    149, 149, 149, 149, 149, 149, 149, 48, 48, 48, 135, 135, 0, 0, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 145, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 80, 48, 48, 48, 48, 48, 48, 0, 0, 140, 140, 0, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 0,
-    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 156, 0, 0, 0, 0, 147, 140, 140, 135,
-    135, 135, 0, 135, 0, 140, 140, 148, 140, 148, 148, 148, 147, 0, 0, 0, 0,
-    0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 140, 140,
-    83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 135, 48, 157, 135, 135, 135, 135, 158, 158, 143, 0, 0, 0,
-    0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 159, 159, 159, 159, 135, 135,
-    135, 83, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 83, 83, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, 0, 48, 48, 48, 48, 48, 0,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    135, 48, 157, 135, 135, 135, 135, 160, 160, 143, 135, 135, 48, 0, 0, 48,
-    48, 48, 48, 48, 0, 53, 0, 161, 161, 161, 161, 135, 135, 0, 0, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 157, 157, 48, 48, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 162, 83,
-    83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80, 80, 80, 80, 80, 80,
-    145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 80, 86, 80, 86, 80, 163, 164, 165, 164,
-    165, 140, 140, 48, 48, 48, 144, 48, 48, 48, 48, 0, 48, 48, 48, 48, 144,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 48, 157, 135, 135, 135, 135,
+    158, 158, 143, 0, 0, 0, 0, 85, 48, 48, 48, 48, 48, 48, 53, 135, 159, 159,
+    159, 159, 135, 135, 135, 83, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 48, 0, 48,
+    48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 135, 48, 157, 135, 135, 135, 135, 160, 160, 143, 135,
+    135, 48, 0, 0, 48, 48, 48, 48, 48, 0, 53, 0, 161, 161, 161, 161, 135,
+    135, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 157,
+    157, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 80, 80, 80, 83, 83, 83, 83, 83,
+    83, 83, 83, 162, 83, 83, 83, 83, 83, 83, 80, 83, 80, 80, 80, 86, 86, 80,
+    80, 80, 80, 80, 80, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 80, 86, 80, 86, 80,
+    163, 164, 165, 164, 165, 140, 140, 48, 48, 48, 144, 48, 48, 48, 48, 0,
     48, 48, 48, 48, 144, 48, 48, 48, 48, 144, 48, 48, 48, 48, 144, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, 48, 48, 48, 0, 0, 0, 0, 166,
-    167, 168, 169, 168, 168, 170, 168, 170, 167, 167, 167, 167, 135, 140,
-    167, 168, 81, 81, 143, 83, 81, 81, 48, 48, 48, 48, 48, 135, 135, 135,
-    135, 135, 135, 168, 135, 135, 135, 135, 0, 135, 135, 135, 135, 168, 135,
-    135, 135, 135, 168, 135, 135, 135, 135, 168, 135, 135, 135, 135, 168,
-    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 168, 135,
-    135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80, 80, 80, 80, 80, 80,
-    0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83, 83, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 144, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 144, 48, 48,
+    48, 0, 0, 0, 0, 166, 167, 168, 169, 168, 168, 170, 168, 170, 167, 167,
+    167, 167, 135, 140, 167, 168, 81, 81, 143, 83, 81, 81, 48, 48, 48, 48,
+    48, 135, 135, 135, 135, 135, 135, 168, 135, 135, 135, 135, 0, 135, 135,
+    135, 135, 168, 135, 135, 135, 135, 168, 135, 135, 135, 135, 168, 135,
+    135, 135, 135, 168, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    135, 135, 168, 135, 135, 135, 0, 80, 80, 80, 80, 80, 80, 80, 80, 86, 80,
+    80, 80, 80, 80, 80, 0, 80, 80, 83, 83, 83, 83, 83, 80, 80, 80, 80, 83,
+    83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 141, 48, 48, 48, 48, 140, 140, 135, 150, 135,
-    135, 140, 135, 135, 135, 135, 135, 146, 140, 143, 143, 140, 140, 135,
-    135, 48, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 83, 83, 83,
-    83, 83, 83, 48, 48, 48, 48, 48, 48, 140, 140, 135, 135, 48, 48, 48, 48,
-    135, 135, 135, 48, 140, 140, 140, 48, 48, 140, 140, 140, 140, 140, 140,
-    140, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 135, 140, 140, 135, 135, 140, 140, 140, 140, 140, 140,
-    86, 48, 140, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 140, 140,
-    140, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 141, 48, 48, 48, 48, 140,
+    140, 135, 150, 135, 135, 140, 135, 135, 135, 135, 135, 146, 140, 143,
+    143, 140, 140, 135, 135, 48, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 83, 83, 83, 83, 83, 83, 48, 48, 48, 48, 48, 48, 140, 140, 135, 135,
+    48, 48, 48, 48, 135, 135, 135, 48, 140, 140, 140, 48, 48, 140, 140, 140,
+    140, 140, 140, 140, 48, 48, 48, 135, 135, 135, 135, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 135, 140, 140, 135, 135, 140, 140, 140,
+    140, 140, 140, 86, 48, 140, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 140, 140, 140, 135, 80, 80, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, 47, 47, 47, 47,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 0, 0, 0, 0, 0, 44, 0, 0,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 83, 51, 47, 47, 47, 171, 171, 171, 171, 171, 171, 171, 171,
+    47, 47, 47, 47, 47, 47, 47, 83, 51, 47, 47, 47, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 48, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 48, 48, 48, 48,
+    171, 171, 171, 171, 171, 171, 171, 48, 172, 172, 172, 172, 172, 172, 172,
+    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 172, 172, 172, 172, 172, 172,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    172, 172, 172, 172, 172, 172, 172, 172, 172, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0,
-    48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48,
-    48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48,
+    48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48,
+    48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48,
-    48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 0, 0,
+    48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48,
-    48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+    48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 81, 81,
-    81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0,
-    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0,
+    81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 149, 149, 149, 149, 149,
+    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+    149, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 47, 47, 47, 47, 47, 47, 0, 0,
-    84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 47, 47, 47, 47, 47, 47,
+    0, 0, 84, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
@@ -1636,45 +1640,45 @@
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 80, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 164, 165, 0,
-    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 80, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 173, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 164, 165,
+    0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 83, 83, 83, 174, 174, 174, 48, 48, 48, 48, 48, 48, 48,
-    48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 0, 48, 48, 48, 48, 135, 135, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    135, 135, 143, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    0, 48, 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
+    48, 48, 48, 48, 48, 83, 83, 83, 174, 174, 174, 48, 48, 48, 48, 48, 48,
+    48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 0, 48, 48, 48, 48, 135, 135, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 135, 135, 143, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 48, 48, 48, 0, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 140,
-    135, 135, 135, 135, 135, 135, 135, 140, 140, 140, 140, 140, 140, 140,
-    140, 135, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 135, 143,
-    135, 83, 83, 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 154, 154, 154, 154, 154,
-    154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138,
-    84, 138, 138, 138, 138, 135, 135, 135, 175, 0, 145, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135,
+    140, 135, 135, 135, 135, 135, 135, 135, 140, 140, 140, 140, 140, 140,
+    140, 140, 135, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    143, 135, 83, 83, 83, 53, 83, 83, 83, 85, 48, 81, 0, 0, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 154, 154, 154, 154,
+    154, 154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138,
+    138, 84, 138, 138, 138, 138, 135, 135, 135, 175, 0, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
-    48, 48, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48,
+    48, 48, 48, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 88, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 88, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 0, 135, 135, 135, 140, 140, 140, 140,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 135, 135, 135, 140, 140, 140, 140,
     135, 135, 140, 140, 140, 0, 0, 0, 0, 140, 140, 135, 140, 140, 140, 140,
     140, 140, 87, 81, 86, 0, 0, 0, 0, 26, 0, 0, 0, 138, 138, 145, 145, 145,
     145, 145, 145, 145, 145, 145, 145, 48, 48, 48, 48, 48, 48, 48, 48, 48,
@@ -1698,37 +1702,37 @@
     145, 145, 145, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145,
     145, 145, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 83, 53, 83, 83, 83,
     83, 83, 83, 0, 0, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 81, 81, 86,
-    82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    82, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135,
-    140, 48, 141, 48, 141, 48, 141, 48, 141, 48, 141, 48, 48, 48, 141, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135,
+    135, 140, 48, 141, 48, 141, 48, 141, 48, 141, 48, 141, 48, 48, 48, 141,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 147, 135,
-    135, 135, 135, 135, 148, 135, 148, 140, 140, 148, 148, 135, 148, 176, 48,
-    48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145,
-    145, 145, 145, 83, 83, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 81, 86, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 0, 0, 0, 135, 135, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 147,
+    135, 135, 135, 135, 135, 148, 135, 148, 140, 140, 148, 148, 135, 148,
+    176, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 145, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 83, 83, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 81, 86, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 0, 0, 0, 135, 135, 140, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 140, 135, 135, 135, 135, 140, 140, 135, 135, 176, 143, 135,
-    135, 48, 48, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 48, 48,
+    48, 48, 48, 48, 48, 140, 135, 135, 135, 135, 140, 140, 135, 135, 176,
+    143, 135, 135, 48, 48, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 146, 140, 135, 135, 140, 140, 140, 135, 140, 135,
-    135, 135, 176, 176, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 146, 140, 135, 135, 140, 140, 140, 135,
+    140, 135, 135, 135, 176, 176, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 83, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140,
-    140, 140, 140, 140, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135,
-    140, 140, 135, 146, 0, 0, 0, 83, 83, 83, 83, 83, 145, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 0, 0, 0, 48, 48, 48, 145, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140,
+    140, 140, 140, 140, 140, 140, 140, 135, 135, 135, 135, 135, 135, 135,
+    135, 140, 140, 135, 146, 0, 0, 0, 83, 83, 83, 83, 83, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 0, 0, 0, 48, 48, 48, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    53, 53, 53, 53, 53, 53, 83, 83, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0,
-    0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+    48, 53, 53, 53, 53, 53, 53, 83, 83, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 44, 44, 44, 83, 83, 83,
-    83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 83, 177, 86, 86,
-    86, 86, 86, 81, 81, 86, 86, 86, 86, 81, 140, 177, 177, 177, 177, 177,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 44, 44, 44, 83, 83,
+    83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 83, 177, 86,
+    86, 86, 86, 86, 81, 81, 86, 86, 86, 86, 81, 140, 177, 177, 177, 177, 177,
     177, 177, 48, 48, 48, 48, 86, 48, 48, 48, 48, 48, 48, 81, 48, 48, 140,
     81, 81, 48, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
@@ -1941,33 +1945,33 @@
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 248, 26, 44, 44, 44,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 248, 26, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 0, 44, 47, 44, 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44, 44,
-    44, 44, 47, 44, 47, 47, 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44, 47,
-    44, 47, 81, 81, 81, 44, 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 154, 138,
-    138, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    47, 47, 47, 0, 44, 47, 44, 44, 44, 47, 47, 44, 47, 44, 47, 44, 47, 44,
+    44, 44, 44, 47, 44, 47, 47, 44, 47, 47, 47, 47, 47, 47, 51, 51, 44, 44,
+    44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+    44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+    44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+    44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+    44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47,
+    44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 47, 26, 26, 26, 26, 26, 26, 44,
+    47, 44, 47, 81, 81, 81, 44, 47, 0, 0, 0, 0, 0, 138, 138, 138, 138, 154,
+    138, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 0, 47, 0, 0, 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+    47, 47, 47, 47, 0, 47, 0, 0, 0, 0, 0, 47, 0, 0, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0,
-    51, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0,
+    0, 51, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48,
     48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
@@ -1979,9 +1983,9 @@
     138, 84, 138, 138, 84, 138, 28, 36, 138, 138, 28, 36, 164, 165, 164, 165,
     164, 165, 164, 165, 138, 138, 138, 138, 138, 52, 138, 138, 138, 138, 138,
     138, 138, 138, 138, 138, 84, 84, 138, 138, 138, 138, 84, 138, 197, 138,
-    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0,
+    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 26, 26, 138,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 241, 241, 241, 241,
     249, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
@@ -2039,37 +2043,25 @@
     269, 0, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    171, 171, 171, 171, 171, 171, 171, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 272, 272, 272, 272, 272, 272, 272,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 249, 249, 0, 271, 271, 271, 271,
-    271, 271, 271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 249, 249, 0, 271,
+    271, 271, 271, 271, 271, 271, 271, 271, 271, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273,
-    273, 273, 249, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
-    274, 274, 274, 274, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273,
+    273, 273, 273, 273, 273, 249, 274, 274, 274, 274, 274, 274, 274, 274,
+    274, 274, 274, 274, 274, 274, 274, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 249, 249, 249, 270, 271, 271, 271, 271, 271, 271,
-    271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 249, 249, 249, 270, 271, 271, 271,
+    271, 271, 271, 271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
-    274, 274, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    249, 249, 249, 249, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+    274, 274, 274, 274, 274, 272, 272, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 249, 249, 249, 249, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
@@ -2077,9 +2069,22 @@
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 249, 249, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 249,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 249, 249, 249, 249, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 249, 249, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    272, 272, 249, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
@@ -2092,11 +2097,11 @@
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 171,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
@@ -2104,10 +2109,9 @@
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    252, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 252,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
@@ -2115,44 +2119,45 @@
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 241, 241, 241, 241, 241,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
+    241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 53, 53, 53, 53, 53, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 53, 138, 138, 138, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 145, 145, 145, 145, 145, 145, 145, 145,
-    145, 145, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
+    48, 53, 53, 53, 53, 53, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 53, 138, 138, 138, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,
     47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 48, 81, 82, 82, 82, 138, 81,
-    81, 81, 81, 81, 81, 81, 81, 81, 81, 138, 52, 44, 47, 44, 47, 44, 47, 44,
     47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 51, 51, 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    47, 44, 47, 44, 47, 44, 47, 44, 47, 48, 81, 82, 82, 82, 138, 81, 81, 81,
+    81, 81, 81, 81, 81, 81, 81, 138, 52, 44, 47, 44, 47, 44, 47, 44, 47, 44,
+    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
+    47, 51, 51, 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 81,
-    81, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54,
-    54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
-    52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
+    48, 48, 48, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 81, 81, 83,
+    83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54,
+    54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 54, 54, 44, 47, 44, 47, 44, 47, 44, 47, 44,
+    47, 44, 47, 44, 47, 47, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
     47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
     47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51,
-    47, 47, 47, 47, 47, 47, 47, 47, 44, 47, 44, 47, 44, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 52, 275, 275, 44, 47, 44, 47, 48, 44, 47, 44, 47, 47,
+    47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 51, 47, 47,
+    47, 47, 47, 47, 47, 47, 44, 47, 44, 47, 44, 44, 47, 44, 47, 44, 47, 44,
+    47, 44, 47, 52, 275, 275, 44, 47, 44, 47, 48, 44, 47, 44, 47, 47, 47, 44,
     47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 44, 44, 44, 44, 47, 44, 44, 44, 44, 44, 47, 44, 47, 44,
-    47, 44, 47, 44, 47, 44, 47, 0, 0, 44, 47, 44, 44, 44, 0, 0, 0, 0, 0, 0,
+    47, 44, 44, 44, 44, 44, 47, 44, 44, 44, 44, 44, 47, 44, 47, 44, 47, 44,
+    47, 44, 47, 44, 47, 0, 0, 44, 47, 44, 44, 44, 44, 47, 44, 47, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 51, 51, 47, 48,
-    48, 48, 48, 48, 48, 48, 135, 48, 48, 48, 143, 48, 48, 48, 48, 135, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 47, 48, 51, 51, 47, 48, 48,
+    48, 48, 48, 48, 48, 135, 48, 48, 48, 143, 48, 48, 48, 48, 135, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 140, 140, 135, 135, 140, 26, 26, 26, 26, 0, 0, 0, 0, 149,
+    48, 48, 48, 140, 140, 135, 135, 140, 26, 26, 26, 26, 143, 0, 0, 0, 149,
     149, 149, 149, 149, 149, 80, 80, 85, 227, 0, 0, 0, 0, 0, 0, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
@@ -2199,15 +2204,15 @@
     48, 48, 48, 48, 48, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 275, 51, 51, 51, 51,
-    47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47,
+    47, 47, 47, 47, 47, 47, 47, 47, 47, 51, 54, 54, 0, 0, 0, 0, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 140, 140, 135, 140, 140, 135, 140, 140, 83, 140, 143, 0, 0,
-    145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 265,
+    48, 48, 48, 48, 140, 140, 135, 140, 140, 135, 140, 140, 83, 140, 143, 0,
+    0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0,
     265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
     265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
     265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
@@ -2219,12 +2224,12 @@
     265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
     265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
     265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
-    265, 265, 265, 265, 265, 265, 265, 265, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+    265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 0, 0, 0, 276, 276, 276, 276, 276, 276, 276, 276,
+    48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 276, 276, 276, 276, 276, 276, 276,
     276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
     276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
     276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
@@ -2233,7 +2238,7 @@
     276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
     276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
     276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-    276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277,
+    276, 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
@@ -2242,7 +2247,7 @@
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
-    277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278,
+    277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
@@ -2252,14 +2257,14 @@
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
-    278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 171, 171,
-    278, 171, 278, 171, 171, 278, 278, 278, 278, 278, 278, 278, 278, 278,
-    278, 171, 278, 171, 278, 171, 171, 278, 278, 171, 171, 171, 278, 278,
+    278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 171,
+    171, 278, 171, 278, 171, 171, 278, 278, 278, 278, 278, 278, 278, 278,
+    278, 278, 171, 278, 171, 278, 171, 171, 278, 278, 171, 171, 171, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
-    278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 0, 0, 278, 278, 278,
+    278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 0, 0, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
@@ -2267,22 +2272,22 @@
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
-    278, 278, 278, 278, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35,
-    35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35,
-    35, 0, 0, 0, 0, 0, 279, 280, 279, 281, 281, 281, 281, 281, 281, 281, 281,
-    281, 217, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
-    279, 0, 279, 279, 279, 279, 279, 0, 279, 0, 279, 279, 0, 279, 279, 0,
-    279, 279, 279, 279, 279, 279, 279, 279, 279, 281, 131, 131, 131, 131,
+    278, 278, 278, 278, 278, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35,
+    35, 35, 35, 0, 0, 0, 0, 0, 279, 280, 279, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 217, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+    279, 279, 279, 0, 279, 279, 279, 279, 279, 0, 279, 0, 279, 279, 0, 279,
+    279, 0, 279, 279, 279, 279, 279, 279, 279, 279, 279, 281, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 282, 282, 282, 282,
-    282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 282, 282, 282,
+    282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
@@ -2299,8 +2304,8 @@
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 283, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 283, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
@@ -2369,9 +2374,9 @@
     323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
     323, 323, 323, 323, 323, 154, 154, 154, 154, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 154, 154, 26, 80, 80, 0, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2520,112 +2525,253 @@
     329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
     329, 329, 329, 329, 329, 329, 329, 0, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 325, 325, 325, 325, 325, 325,
-    325, 325, 325, 325, 107, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118,
-    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
-    118, 118, 118, 86, 86, 81, 81, 81, 86, 81, 86, 86, 86, 86, 330, 330, 330,
-    330, 113, 113, 113, 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    140, 135, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
-    135, 135, 143, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 154, 154, 154,
-    154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
-    154, 154, 154, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 135, 135, 140, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 141, 48, 141, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    141, 48, 48, 48, 48, 140, 140, 140, 135, 135, 135, 135, 140, 140, 143,
-    142, 83, 83, 190, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190,
-    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 150, 135,
-    135, 135, 135, 140, 135, 151, 151, 135, 135, 135, 143, 143, 0, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 145, 83, 83, 83, 83, 48, 140, 140, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 146, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135,
-    140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140, 140, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 140, 176, 48, 48, 48, 48, 83, 83,
-    83, 83, 135, 146, 135, 135, 83, 0, 0, 145, 145, 145, 145, 145, 145, 145,
-    145, 145, 145, 48, 83, 48, 83, 83, 83, 0, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140,
-    140, 135, 135, 135, 140, 140, 135, 176, 146, 135, 83, 83, 83, 83, 83, 83,
-    135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 107, 107, 107, 107, 107, 107, 0, 81, 81, 102, 0, 0, 107, 107, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
-    48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 83, 0,
-    0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 107, 0,
+    0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 86, 86, 81,
+    81, 81, 86, 81, 86, 86, 86, 86, 330, 330, 330, 330, 113, 113, 113, 113,
+    113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 325, 325, 325, 325, 325, 325, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 135, 140, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 140,
-    140, 140, 135, 135, 135, 135, 135, 135, 146, 143, 0, 0, 0, 0, 0, 145,
-    145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 135, 135,
-    140, 140, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48,
-    0, 146, 146, 48, 147, 140, 135, 140, 140, 140, 140, 0, 0, 140, 140, 0, 0,
-    148, 148, 176, 0, 0, 48, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 48, 48,
-    48, 48, 48, 140, 140, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 81, 81,
-    81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135,
+    135, 135, 135, 135, 135, 135, 135, 135, 143, 83, 83, 83, 83, 83, 83, 83,
+    0, 0, 0, 0, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+    154, 154, 154, 154, 154, 154, 154, 154, 145, 145, 145, 145, 145, 145,
+    145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143,
+    135, 135, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 141, 48, 141, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 141, 48, 48, 48, 48, 140, 140, 140, 135,
+    135, 135, 135, 140, 140, 143, 142, 83, 83, 190, 83, 83, 83, 83, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
+    0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0,
+    0, 0, 81, 81, 81, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 150, 135, 135, 135, 135, 140, 135, 151, 151, 135, 135,
+    135, 143, 143, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 83,
+    83, 83, 83, 48, 140, 140, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 146, 83, 83, 48, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 135, 135, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 140, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 135, 140,
+    176, 48, 48, 48, 48, 83, 83, 83, 83, 135, 146, 135, 135, 83, 140, 135,
+    145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 48, 83, 48, 83, 83, 83,
+    0, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+    149, 149, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 140, 140, 140, 135, 135, 135, 140, 140, 135, 176,
+    146, 135, 83, 83, 83, 83, 83, 83, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48,
+    0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 83, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 135, 140, 140, 140, 135, 135, 135, 135, 135, 135,
+    146, 143, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 0, 0, 0, 0, 0, 0, 135, 135, 140, 140, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 0, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0,
+    48, 48, 0, 48, 48, 48, 48, 48, 0, 146, 146, 48, 147, 140, 135, 140, 140,
+    140, 140, 0, 0, 140, 140, 0, 0, 148, 148, 176, 0, 0, 48, 0, 0, 0, 0, 0,
+    0, 147, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 140, 140, 0, 0, 81, 81, 81,
+    81, 81, 81, 81, 0, 0, 0, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    140, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 140, 140, 143,
+    135, 135, 140, 146, 48, 48, 48, 48, 83, 83, 83, 83, 83, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 145, 83, 83, 0, 83, 81, 48, 48, 48, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 147, 140,
+    140, 135, 135, 135, 135, 135, 135, 140, 150, 148, 148, 147, 148, 135,
+    135, 140, 143, 146, 48, 48, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145,
+    145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 147, 140, 140, 135,
+    135, 135, 135, 0, 0, 140, 140, 148, 148, 135, 135, 140, 143, 146, 83, 83,
+    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
+    83, 83, 83, 48, 48, 48, 48, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140, 140, 135, 135, 135,
-    135, 135, 135, 135, 135, 140, 140, 143, 135, 135, 140, 146, 48, 48, 48,
-    48, 83, 83, 83, 83, 83, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-    0, 83, 0, 83, 81, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+    135, 135, 135, 135, 135, 140, 140, 135, 140, 143, 135, 83, 83, 83, 48, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 145, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138,
+    138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 147, 140, 140, 135, 135, 135, 135, 135, 135, 140,
-    150, 148, 148, 147, 148, 135, 135, 140, 143, 146, 48, 48, 83, 48, 0, 0,
-    0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0,
+    48, 48, 48, 48, 48, 48, 48, 48, 135, 140, 135, 140, 140, 135, 135, 135,
+    135, 135, 135, 176, 146, 48, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 147, 140, 140, 135, 135, 135, 135, 0, 0, 140, 140, 148, 148, 135,
-    135, 140, 143, 146, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
-    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 48, 48, 48, 48, 135, 135, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    140, 140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 140, 140, 135,
-    140, 143, 135, 83, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 138, 138, 138,
-    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 140,
-    135, 140, 140, 135, 135, 135, 135, 135, 135, 176, 146, 48, 0, 0, 0, 0, 0,
-    0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0,
+    48, 48, 48, 0, 0, 135, 135, 135, 140, 140, 135, 135, 135, 135, 140, 135,
+    135, 135, 135, 143, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 145, 149, 149, 83, 83, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 135, 135, 135, 140, 140, 135,
-    135, 135, 135, 140, 135, 135, 135, 135, 143, 0, 0, 0, 0, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 149, 149, 83, 83, 83, 80, 0, 0, 0, 0,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140, 140, 135, 135, 135,
+    135, 135, 135, 135, 135, 135, 140, 143, 146, 83, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47,
+    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    47, 47, 47, 47, 47, 47, 47, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    145, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 0, 0, 48, 48, 48,
+    48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 147, 140, 140,
+    140, 140, 140, 0, 140, 148, 0, 0, 135, 135, 176, 143, 48, 140, 48, 140,
+    146, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145,
+    145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140,
+    140, 135, 135, 135, 135, 0, 0, 135, 135, 140, 140, 140, 140, 143, 48, 83,
+    48, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 48, 135, 135, 135, 135, 135, 135, 155, 155, 135, 135,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 135, 143, 135, 135, 135, 135, 140, 48, 135, 135, 135,
+    135, 83, 83, 83, 83, 83, 83, 83, 83, 143, 0, 0, 0, 0, 0, 0, 0, 0, 48,
+    135, 135, 135, 135, 135, 135, 140, 140, 135, 135, 135, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    135, 135, 135, 140, 135, 143, 83, 83, 83, 48, 83, 83, 83, 83, 83, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 140, 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135,
+    135, 135, 135, 140, 331, 48, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 149, 149, 149,
+    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+    149, 149, 0, 0, 0, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 140, 135, 135, 135,
+    135, 135, 135, 135, 140, 135, 135, 140, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 135, 135, 135, 135, 135, 135, 0, 0, 0, 135,
+    0, 135, 135, 0, 135, 135, 135, 146, 135, 143, 143, 48, 135, 0, 0, 0, 0,
+    0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0,
+    0, 0, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 140, 140, 140, 140, 140, 0, 135, 135, 0, 140,
+    140, 135, 140, 143, 48, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145,
+    145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135,
+    135, 140, 140, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 26, 26, 26, 26, 26, 26,
+    26, 26, 85, 85, 85, 85, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
+    174, 174, 174, 174, 174, 174, 174, 0, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140,
-    140, 140, 135, 135, 135, 135, 135, 135, 135, 135, 135, 140, 143, 146, 83,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 0, 190, 190, 190, 190, 190, 190, 190, 190, 190, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0,
+    0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0,
+    177, 177, 177, 177, 177, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 81, 81, 81, 81, 81, 81, 81, 83, 83,
+    83, 83, 83, 80, 80, 80, 80, 53, 53, 53, 53, 83, 80, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 149, 149,
+    149, 149, 149, 149, 149, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2633,259 +2779,146 @@
     0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 149, 149, 149, 149, 149, 149, 149, 149,
-    149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140, 140, 135, 135, 135,
-    135, 0, 0, 135, 135, 140, 140, 140, 140, 143, 48, 83, 48, 140, 0, 0, 0,
+    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 149, 149, 149, 149,
+    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+    149, 149, 149, 149, 149, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    48, 135, 135, 135, 135, 135, 135, 155, 155, 135, 135, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135,
-    143, 135, 135, 135, 135, 140, 48, 135, 135, 135, 135, 83, 83, 83, 83, 83,
-    83, 83, 83, 143, 0, 0, 0, 0, 0, 0, 0, 0, 48, 135, 135, 135, 135, 135,
-    135, 140, 140, 135, 135, 135, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 140, 135,
-    143, 83, 83, 83, 48, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
-    0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 135, 135,
-    135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, 140, 331, 48,
-    83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 149, 149, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 83, 83,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 135, 135, 135, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
-    135, 135, 135, 135, 0, 140, 135, 135, 135, 135, 135, 135, 135, 140, 135,
-    135, 140, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 135, 48, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+    140, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 53, 53, 53, 53, 53, 53, 53,
+    53, 53, 53, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48,
+    252, 252, 251, 252, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 333, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171,
+    171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    135, 135, 135, 135, 135, 135, 0, 0, 0, 135, 0, 135, 135, 0, 135, 135,
-    135, 146, 135, 143, 143, 48, 135, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
-    48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    140, 140, 140, 140, 140, 0, 135, 135, 0, 140, 140, 135, 140, 143, 48, 0,
-    0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 80, 135, 177, 83, 175, 175, 175, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 334, 334, 334, 334, 334, 334, 334,
+    335, 335, 177, 177, 177, 80, 80, 80, 336, 335, 335, 335, 335, 335, 175,
+    175, 175, 175, 175, 175, 175, 175, 86, 86, 86, 86, 86, 86, 86, 86, 80,
+    80, 81, 81, 81, 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 334, 334, 334, 334, 334, 334, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 81, 81, 81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135, 135, 140, 140, 83, 83, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 149,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149,
     149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 26, 26, 26, 26, 26, 26, 26, 26, 85, 85, 85, 85,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
-    174, 0, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 190, 190, 190, 190,
-    190, 190, 190, 190, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 145, 145, 145,
-    145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 83, 83, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 0, 177, 177, 177, 177, 177, 83, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 81,
-    81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 80, 80, 80, 80, 53, 53, 53,
-    53, 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, 145, 145,
-    145, 145, 145, 145, 0, 149, 149, 149, 149, 149, 149, 149, 0, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 83, 83, 83, 83, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 0, 0, 0, 135, 48, 140, 140, 140, 140, 140, 140,
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
-    140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135,
-    135, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 252, 251, 252, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 0, 0, 0, 0,
-    0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0,
-    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 80, 135, 177, 83,
-    175, 175, 175, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 332, 332, 332, 332, 332, 332, 332, 333, 333, 177, 177, 177,
-    80, 80, 80, 334, 333, 333, 333, 333, 333, 175, 175, 175, 175, 175, 175,
-    175, 175, 86, 86, 86, 86, 86, 86, 86, 86, 80, 80, 81, 81, 81, 81, 81, 86,
-    86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 332, 332, 332, 332, 332,
-    332, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 81, 81,
-    81, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    149, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-    149, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+    149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0,
+    0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49,
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35,
-    35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35,
+    49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0,
+    49, 0, 0, 49, 49, 0, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49,
+    49, 35, 35, 35, 35, 0, 35, 0, 35, 35, 35, 35, 35, 35, 35, 0, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 49, 0, 49, 49, 0, 0, 49, 0, 0, 49, 49, 0, 0, 49, 49,
-    49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 0, 35, 0, 35,
-    35, 35, 35, 35, 35, 35, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49,
+    49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 49, 49, 0, 49, 49, 49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0,
+    49, 49, 49, 49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49,
-    0, 49, 49, 49, 49, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 49, 49, 49,
-    49, 49, 49, 49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 0, 49, 49,
-    49, 49, 0, 49, 49, 49, 49, 49, 0, 49, 0, 0, 0, 49, 49, 49, 49, 49, 49,
-    49, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49,
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
@@ -2895,69 +2928,60 @@
     35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 337, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 228, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49,
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 335, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    337, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 228, 35, 35, 35, 35, 35, 35, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 337, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 228, 35, 35, 35, 35, 35,
+    35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+    49, 49, 49, 49, 49, 49, 49, 49, 337, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 228, 35,
     35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 335, 35, 35, 35, 35, 35,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 337, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 228, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 335, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 228, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 335, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 228, 35, 35, 35, 35, 35, 35, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 335, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 228, 35, 35, 35,
-    35, 35, 35, 49, 35, 0, 0, 336, 336, 336, 336, 336, 336, 336, 336, 336,
-    336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336,
-    336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336,
-    336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 135,
+    35, 35, 228, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 338, 338, 338, 338,
+    338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
+    338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
+    338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
+    338, 338, 338, 338, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 80, 80, 80,
-    80, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    135, 135, 135, 80, 80, 80, 80, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 80, 80, 80, 80, 80, 80, 80, 80,
-    135, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 135, 80, 80,
-    83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
-    135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
-    135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81,
-    81, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
-    81, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 81, 81, 0, 81, 81, 81, 81, 81,
+    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 80,
+    80, 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 135, 80, 80, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135,
+    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
+    81, 81, 81, 81, 81, 81, 81, 0, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+    81, 81, 81, 81, 81, 81, 81, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0, 81, 81,
+    0, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 53, 53, 53, 53, 53, 53, 53, 0,
-    0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 0, 0, 0, 48, 80,
+    48, 48, 48, 48, 48, 48, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 53, 53, 53,
+    53, 53, 53, 53, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+    0, 0, 0, 0, 48, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 81, 81, 81, 81, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-    0, 0, 0, 0, 0, 85, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    48, 48, 48, 48, 48, 48, 81, 81, 81, 81, 145, 145, 145, 145, 145, 145,
+    145, 145, 145, 145, 0, 0, 0, 0, 0, 85, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
@@ -2971,212 +2995,263 @@
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 0, 0, 325, 325, 325, 325, 325, 325, 325, 325, 325,
-    86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 325, 325, 325, 325, 325,
+    325, 325, 325, 325, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 327, 327, 327, 327, 327, 327, 327, 327,
     327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
-    327, 327, 327, 327, 327, 327, 327, 328, 328, 328, 328, 328, 328, 328,
+    327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 328, 328, 328,
     328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 81, 81,
-    81, 81, 81, 81, 146, 137, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136,
-    136, 136, 136, 0, 0, 0, 0, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
+    328, 328, 328, 81, 81, 81, 81, 81, 81, 146, 137, 0, 0, 0, 0, 136, 136,
+    136, 136, 136, 136, 136, 136, 136, 136, 0, 0, 0, 0, 104, 104, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 330, 330, 330, 330, 330, 330,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 330,
     330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
     330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
     330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
-    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 133, 330, 330, 330,
-    111, 330, 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 133, 330, 330, 330, 111, 330, 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 330, 330, 330, 330, 330, 330,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 330,
     330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
     330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
-    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 133, 330, 330, 330,
-    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, 0, 0, 0,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 133, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 330, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 0, 131,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131,
+    131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131,
-    0, 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    0, 131, 131, 131, 131, 0, 131, 0, 131, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0,
-    131, 0, 131, 0, 131, 0, 131, 131, 131, 0, 131, 131, 0, 131, 0, 0, 131, 0,
-    131, 0, 131, 0, 131, 0, 131, 0, 131, 131, 0, 131, 0, 0, 131, 131, 131,
-    131, 0, 131, 131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131,
-    131, 131, 131, 0, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 0, 131, 131, 131, 131,
-    131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    131, 131, 0, 131, 131, 0, 131, 0, 0, 131, 0, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 0, 0, 0,
+    0, 0, 0, 131, 0, 0, 0, 0, 131, 0, 131, 0, 131, 0, 131, 131, 131, 0, 131,
+    131, 0, 131, 0, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 0, 131, 131, 0,
+    131, 0, 0, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 0,
+    131, 131, 131, 131, 0, 131, 131, 131, 131, 0, 131, 0, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131,
+    131, 0, 131, 131, 131, 131, 131, 0, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 26, 26, 26, 26, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 241, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
+    0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 0, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 241, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 154, 154, 0, 0, 0, 244, 244, 244,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 154, 154,
+    26, 26, 26, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
     244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
-    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 337, 26,
+    244, 244, 244, 244, 339, 26, 244, 244, 244, 244, 244, 244, 244, 244, 244,
     244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
-    244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
-    244, 244, 244, 244, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
-    338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
-    338, 338, 224, 224, 224, 0, 0, 0, 338, 338, 338, 338, 338, 338, 338, 338,
-    338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
-    338, 338, 338, 338, 338, 338, 338, 338, 270, 338, 244, 270, 270, 270,
-    270, 270, 270, 270, 270, 270, 270, 338, 338, 338, 338, 338, 338, 338,
-    338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 0, 0, 0, 0, 0, 0,
+    244, 244, 244, 244, 244, 244, 244, 244, 244, 340, 340, 340, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 224, 224, 224, 26, 26, 26, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    270, 340, 244, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 340, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 272, 272, 272, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    272, 272, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
     272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 272, 272, 272, 0, 0, 0, 0, 272, 272, 272, 272, 272, 272,
-    272, 272, 272, 0, 0, 0, 0, 0, 0, 0, 272, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 241,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 0, 0, 0, 0,
+    272, 272, 272, 272, 272, 272, 272, 272, 272, 0, 0, 0, 0, 0, 0, 0, 272,
+    272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241,
+    241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 26, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 26, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 26, 26, 26, 241, 241,
-    241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 26, 26, 26, 241, 26, 26, 26, 241, 241, 241, 339, 339, 339, 339, 339,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 26, 241, 26, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26,
+    26, 26, 26, 241, 241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 26, 26, 26, 241, 26, 26, 26, 241, 241, 241, 341,
+    341, 341, 341, 341, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 241, 26, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 26, 26, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 241, 241, 26, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 241, 26, 26,
+    26, 241, 241, 241, 26, 26, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 0, 0, 0, 26, 26, 26, 26,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0,
+    0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 26, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     26, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 241, 241, 241, 241, 26, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 241, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 0, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 0, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
     241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 26, 26, 26, 26, 26, 26, 241, 26, 26, 26, 241, 241, 241, 26, 26,
-    241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 241, 241, 0, 0, 0, 26, 26, 26, 26, 241, 241, 241, 241, 241, 241,
-    241, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0,
-    0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0,
+    0, 241, 241, 241, 241, 241, 0, 0, 0, 241, 241, 241, 0, 0, 0, 0, 0, 241,
+    241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+    241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 241, 241,
+    241, 241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 0, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 241, 241, 241, 241, 0, 0,
-    0, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 0, 0,
-    241, 241, 241, 241, 241, 241, 0, 0, 0, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 0, 0, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
-    241, 241, 241, 241, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 0, 0, 241, 241, 241, 241, 0, 0, 0, 0, 241, 241, 241, 0, 0, 0,
-    0, 0, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 241,
-    241, 241, 241, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 338, 338, 338, 338, 338, 338, 338,
+    338, 338, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
@@ -3184,56 +3259,28 @@
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
     171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 0, 0, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
-    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
+    0, 0, 0, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
     278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
-    278, 278, 278, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    278, 278, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 175, 175,
+    0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+    171, 171, 171, 171, 171, 171, 171, 171, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
     175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
     175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
     175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
     175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
     175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
-    175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
-    175, 175, 175, 175, 175, 175, 175, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+    175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
@@ -3246,8 +3293,8 @@
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-    71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277,
+    71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+    71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
@@ -3256,7 +3303,7 @@
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
     277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
-    277, 277, 277, 277, 277, 277, 277, 0, 0,
+    277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 0, 0,
 };
 
 /* decomposition data */
@@ -3744,375 +3791,355 @@
     50, 52, 26085, 770, 50, 53, 26085, 770, 50, 54, 26085, 770, 50, 55,
     26085, 770, 50, 56, 26085, 770, 50, 57, 26085, 770, 51, 48, 26085, 770,
     51, 49, 26085, 778, 103, 97, 108, 259, 1098, 259, 1100, 259, 42863, 259,
-    294, 259, 339, 259, 42791, 259, 43831, 259, 619, 259, 43858, 256, 35912,
-    256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018, 256, 21477,
-    256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895, 256, 22856,
-    256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746, 256, 35064,
-    256, 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662, 256, 33853,
-    256, 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396, 256, 29211,
-    256, 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253, 256, 35172,
-    256, 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391, 256, 28010,
-    256, 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214, 256, 25796,
-    256, 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310, 256, 34396,
-    256, 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860, 256, 31103,
-    256, 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542, 256, 22751,
-    256, 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922, 256, 36034,
-    256, 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122, 256, 28431,
-    256, 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907, 256, 20956,
-    256, 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517, 256, 35712,
-    256, 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527, 256, 24594,
-    256, 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415, 256, 24489,
-    256, 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443, 256, 22622,
-    256, 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784, 256, 27784,
-    256, 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142, 256, 20841,
-    256, 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538, 256, 37327,
-    256, 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053, 256, 28670,
-    256, 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654, 256, 21147,
-    256, 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976, 256, 25088,
-    256, 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178, 256, 32244,
-    256, 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706, 256, 21015,
-    256, 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498, 256, 24265,
-    256, 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557, 256, 20196,
-    256, 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618, 256, 29801,
-    256, 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728, 256, 38936,
-    256, 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801, 256, 20102,
-    256, 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138, 256, 29134,
-    256, 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248, 256, 38446,
-    256, 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316, 256, 29705,
-    256, 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845, 256, 25134,
-    256, 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650, 256, 24459,
-    256, 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033, 256, 21519,
-    256, 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877, 256, 29702,
-    256, 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324, 256, 38626,
-    256, 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848, 256, 34298,
-    256, 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107, 256, 33256,
-    256, 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825, 256, 35672,
-    256, 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230, 256, 25299,
-    256, 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667, 256, 34892,
-    256, 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952, 256, 22618,
-    256, 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036, 256, 31070,
-    256, 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701, 256, 34322,
-    256, 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164, 256, 39208,
-    256, 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711, 256, 20813,
-    256, 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022, 256, 22120,
-    256, 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724, 256, 24936,
-    256, 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257, 256, 26757,
-    256, 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227, 256, 29730,
-    256, 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056, 256, 31062,
-    256, 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361, 256, 31680,
-    256, 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773, 256, 33261,
-    256, 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222, 256, 35585,
-    256, 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920, 256, 38627,
-    256, 38911, 256, 38971, 256, 24693, 256, 148206, 256, 33304, 256, 20006,
-    256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864, 256, 21191,
-    256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986, 256, 22618,
-    256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336, 256, 24274,
-    256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910, 256, 24840,
-    256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540, 256, 25628,
-    256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395, 256, 26454,
-    256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363, 256, 28450,
-    256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359, 256, 29482,
-    256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239, 256, 30410,
-    256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924, 256, 31409,
-    256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574, 256, 32773,
-    256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206, 256, 35222,
-    256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582, 256, 35565,
-    256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978, 256, 37273,
-    256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875, 256, 38911,
-    256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 141386, 256, 141380,
-    256, 144341, 256, 15261, 256, 16408, 256, 16441, 256, 152137, 256,
-    154832, 256, 163539, 256, 40771, 256, 40846, 514, 102, 102, 514, 102,
-    105, 514, 102, 108, 770, 102, 102, 105, 770, 102, 102, 108, 514, 383,
-    116, 514, 115, 116, 514, 1396, 1398, 514, 1396, 1381, 514, 1396, 1387,
-    514, 1406, 1398, 514, 1396, 1389, 512, 1497, 1460, 512, 1522, 1463, 262,
-    1506, 262, 1488, 262, 1491, 262, 1492, 262, 1499, 262, 1500, 262, 1501,
-    262, 1512, 262, 1514, 262, 43, 512, 1513, 1473, 512, 1513, 1474, 512,
-    64329, 1473, 512, 64329, 1474, 512, 1488, 1463, 512, 1488, 1464, 512,
-    1488, 1468, 512, 1489, 1468, 512, 1490, 1468, 512, 1491, 1468, 512, 1492,
-    1468, 512, 1493, 1468, 512, 1494, 1468, 512, 1496, 1468, 512, 1497, 1468,
-    512, 1498, 1468, 512, 1499, 1468, 512, 1500, 1468, 512, 1502, 1468, 512,
-    1504, 1468, 512, 1505, 1468, 512, 1507, 1468, 512, 1508, 1468, 512, 1510,
-    1468, 512, 1511, 1468, 512, 1512, 1468, 512, 1513, 1468, 512, 1514, 1468,
-    512, 1493, 1465, 512, 1489, 1471, 512, 1499, 1471, 512, 1508, 1471, 514,
-    1488, 1500, 267, 1649, 268, 1649, 267, 1659, 268, 1659, 269, 1659, 270,
-    1659, 267, 1662, 268, 1662, 269, 1662, 270, 1662, 267, 1664, 268, 1664,
-    269, 1664, 270, 1664, 267, 1658, 268, 1658, 269, 1658, 270, 1658, 267,
-    1663, 268, 1663, 269, 1663, 270, 1663, 267, 1657, 268, 1657, 269, 1657,
-    270, 1657, 267, 1700, 268, 1700, 269, 1700, 270, 1700, 267, 1702, 268,
-    1702, 269, 1702, 270, 1702, 267, 1668, 268, 1668, 269, 1668, 270, 1668,
-    267, 1667, 268, 1667, 269, 1667, 270, 1667, 267, 1670, 268, 1670, 269,
-    1670, 270, 1670, 267, 1671, 268, 1671, 269, 1671, 270, 1671, 267, 1677,
-    268, 1677, 267, 1676, 268, 1676, 267, 1678, 268, 1678, 267, 1672, 268,
-    1672, 267, 1688, 268, 1688, 267, 1681, 268, 1681, 267, 1705, 268, 1705,
-    269, 1705, 270, 1705, 267, 1711, 268, 1711, 269, 1711, 270, 1711, 267,
-    1715, 268, 1715, 269, 1715, 270, 1715, 267, 1713, 268, 1713, 269, 1713,
-    270, 1713, 267, 1722, 268, 1722, 267, 1723, 268, 1723, 269, 1723, 270,
-    1723, 267, 1728, 268, 1728, 267, 1729, 268, 1729, 269, 1729, 270, 1729,
-    267, 1726, 268, 1726, 269, 1726, 270, 1726, 267, 1746, 268, 1746, 267,
-    1747, 268, 1747, 267, 1709, 268, 1709, 269, 1709, 270, 1709, 267, 1735,
-    268, 1735, 267, 1734, 268, 1734, 267, 1736, 268, 1736, 267, 1655, 267,
-    1739, 268, 1739, 267, 1733, 268, 1733, 267, 1737, 268, 1737, 267, 1744,
-    268, 1744, 269, 1744, 270, 1744, 269, 1609, 270, 1609, 523, 1574, 1575,
-    524, 1574, 1575, 523, 1574, 1749, 524, 1574, 1749, 523, 1574, 1608, 524,
-    1574, 1608, 523, 1574, 1735, 524, 1574, 1735, 523, 1574, 1734, 524, 1574,
-    1734, 523, 1574, 1736, 524, 1574, 1736, 523, 1574, 1744, 524, 1574, 1744,
-    525, 1574, 1744, 523, 1574, 1609, 524, 1574, 1609, 525, 1574, 1609, 267,
-    1740, 268, 1740, 269, 1740, 270, 1740, 523, 1574, 1580, 523, 1574, 1581,
-    523, 1574, 1605, 523, 1574, 1609, 523, 1574, 1610, 523, 1576, 1580, 523,
-    1576, 1581, 523, 1576, 1582, 523, 1576, 1605, 523, 1576, 1609, 523, 1576,
-    1610, 523, 1578, 1580, 523, 1578, 1581, 523, 1578, 1582, 523, 1578, 1605,
-    523, 1578, 1609, 523, 1578, 1610, 523, 1579, 1580, 523, 1579, 1605, 523,
-    1579, 1609, 523, 1579, 1610, 523, 1580, 1581, 523, 1580, 1605, 523, 1581,
-    1580, 523, 1581, 1605, 523, 1582, 1580, 523, 1582, 1581, 523, 1582, 1605,
-    523, 1587, 1580, 523, 1587, 1581, 523, 1587, 1582, 523, 1587, 1605, 523,
-    1589, 1581, 523, 1589, 1605, 523, 1590, 1580, 523, 1590, 1581, 523, 1590,
-    1582, 523, 1590, 1605, 523, 1591, 1581, 523, 1591, 1605, 523, 1592, 1605,
-    523, 1593, 1580, 523, 1593, 1605, 523, 1594, 1580, 523, 1594, 1605, 523,
-    1601, 1580, 523, 1601, 1581, 523, 1601, 1582, 523, 1601, 1605, 523, 1601,
-    1609, 523, 1601, 1610, 523, 1602, 1581, 523, 1602, 1605, 523, 1602, 1609,
-    523, 1602, 1610, 523, 1603, 1575, 523, 1603, 1580, 523, 1603, 1581, 523,
-    1603, 1582, 523, 1603, 1604, 523, 1603, 1605, 523, 1603, 1609, 523, 1603,
-    1610, 523, 1604, 1580, 523, 1604, 1581, 523, 1604, 1582, 523, 1604, 1605,
-    523, 1604, 1609, 523, 1604, 1610, 523, 1605, 1580, 523, 1605, 1581, 523,
-    1605, 1582, 523, 1605, 1605, 523, 1605, 1609, 523, 1605, 1610, 523, 1606,
-    1580, 523, 1606, 1581, 523, 1606, 1582, 523, 1606, 1605, 523, 1606, 1609,
-    523, 1606, 1610, 523, 1607, 1580, 523, 1607, 1605, 523, 1607, 1609, 523,
-    1607, 1610, 523, 1610, 1580, 523, 1610, 1581, 523, 1610, 1582, 523, 1610,
-    1605, 523, 1610, 1609, 523, 1610, 1610, 523, 1584, 1648, 523, 1585, 1648,
-    523, 1609, 1648, 779, 32, 1612, 1617, 779, 32, 1613, 1617, 779, 32, 1614,
-    1617, 779, 32, 1615, 1617, 779, 32, 1616, 1617, 779, 32, 1617, 1648, 524,
-    1574, 1585, 524, 1574, 1586, 524, 1574, 1605, 524, 1574, 1606, 524, 1574,
-    1609, 524, 1574, 1610, 524, 1576, 1585, 524, 1576, 1586, 524, 1576, 1605,
-    524, 1576, 1606, 524, 1576, 1609, 524, 1576, 1610, 524, 1578, 1585, 524,
-    1578, 1586, 524, 1578, 1605, 524, 1578, 1606, 524, 1578, 1609, 524, 1578,
-    1610, 524, 1579, 1585, 524, 1579, 1586, 524, 1579, 1605, 524, 1579, 1606,
-    524, 1579, 1609, 524, 1579, 1610, 524, 1601, 1609, 524, 1601, 1610, 524,
-    1602, 1609, 524, 1602, 1610, 524, 1603, 1575, 524, 1603, 1604, 524, 1603,
-    1605, 524, 1603, 1609, 524, 1603, 1610, 524, 1604, 1605, 524, 1604, 1609,
-    524, 1604, 1610, 524, 1605, 1575, 524, 1605, 1605, 524, 1606, 1585, 524,
-    1606, 1586, 524, 1606, 1605, 524, 1606, 1606, 524, 1606, 1609, 524, 1606,
-    1610, 524, 1609, 1648, 524, 1610, 1585, 524, 1610, 1586, 524, 1610, 1605,
-    524, 1610, 1606, 524, 1610, 1609, 524, 1610, 1610, 525, 1574, 1580, 525,
-    1574, 1581, 525, 1574, 1582, 525, 1574, 1605, 525, 1574, 1607, 525, 1576,
-    1580, 525, 1576, 1581, 525, 1576, 1582, 525, 1576, 1605, 525, 1576, 1607,
-    525, 1578, 1580, 525, 1578, 1581, 525, 1578, 1582, 525, 1578, 1605, 525,
-    1578, 1607, 525, 1579, 1605, 525, 1580, 1581, 525, 1580, 1605, 525, 1581,
-    1580, 525, 1581, 1605, 525, 1582, 1580, 525, 1582, 1605, 525, 1587, 1580,
-    525, 1587, 1581, 525, 1587, 1582, 525, 1587, 1605, 525, 1589, 1581, 525,
-    1589, 1582, 525, 1589, 1605, 525, 1590, 1580, 525, 1590, 1581, 525, 1590,
-    1582, 525, 1590, 1605, 525, 1591, 1581, 525, 1592, 1605, 525, 1593, 1580,
-    525, 1593, 1605, 525, 1594, 1580, 525, 1594, 1605, 525, 1601, 1580, 525,
-    1601, 1581, 525, 1601, 1582, 525, 1601, 1605, 525, 1602, 1581, 525, 1602,
-    1605, 525, 1603, 1580, 525, 1603, 1581, 525, 1603, 1582, 525, 1603, 1604,
-    525, 1603, 1605, 525, 1604, 1580, 525, 1604, 1581, 525, 1604, 1582, 525,
-    1604, 1605, 525, 1604, 1607, 525, 1605, 1580, 525, 1605, 1581, 525, 1605,
-    1582, 525, 1605, 1605, 525, 1606, 1580, 525, 1606, 1581, 525, 1606, 1582,
-    525, 1606, 1605, 525, 1606, 1607, 525, 1607, 1580, 525, 1607, 1605, 525,
-    1607, 1648, 525, 1610, 1580, 525, 1610, 1581, 525, 1610, 1582, 525, 1610,
-    1605, 525, 1610, 1607, 526, 1574, 1605, 526, 1574, 1607, 526, 1576, 1605,
-    526, 1576, 1607, 526, 1578, 1605, 526, 1578, 1607, 526, 1579, 1605, 526,
-    1579, 1607, 526, 1587, 1605, 526, 1587, 1607, 526, 1588, 1605, 526, 1588,
-    1607, 526, 1603, 1604, 526, 1603, 1605, 526, 1604, 1605, 526, 1606, 1605,
-    526, 1606, 1607, 526, 1610, 1605, 526, 1610, 1607, 782, 1600, 1614, 1617,
-    782, 1600, 1615, 1617, 782, 1600, 1616, 1617, 523, 1591, 1609, 523, 1591,
-    1610, 523, 1593, 1609, 523, 1593, 1610, 523, 1594, 1609, 523, 1594, 1610,
-    523, 1587, 1609, 523, 1587, 1610, 523, 1588, 1609, 523, 1588, 1610, 523,
-    1581, 1609, 523, 1581, 1610, 523, 1580, 1609, 523, 1580, 1610, 523, 1582,
-    1609, 523, 1582, 1610, 523, 1589, 1609, 523, 1589, 1610, 523, 1590, 1609,
-    523, 1590, 1610, 523, 1588, 1580, 523, 1588, 1581, 523, 1588, 1582, 523,
-    1588, 1605, 523, 1588, 1585, 523, 1587, 1585, 523, 1589, 1585, 523, 1590,
-    1585, 524, 1591, 1609, 524, 1591, 1610, 524, 1593, 1609, 524, 1593, 1610,
-    524, 1594, 1609, 524, 1594, 1610, 524, 1587, 1609, 524, 1587, 1610, 524,
-    1588, 1609, 524, 1588, 1610, 524, 1581, 1609, 524, 1581, 1610, 524, 1580,
-    1609, 524, 1580, 1610, 524, 1582, 1609, 524, 1582, 1610, 524, 1589, 1609,
-    524, 1589, 1610, 524, 1590, 1609, 524, 1590, 1610, 524, 1588, 1580, 524,
-    1588, 1581, 524, 1588, 1582, 524, 1588, 1605, 524, 1588, 1585, 524, 1587,
-    1585, 524, 1589, 1585, 524, 1590, 1585, 525, 1588, 1580, 525, 1588, 1581,
-    525, 1588, 1582, 525, 1588, 1605, 525, 1587, 1607, 525, 1588, 1607, 525,
-    1591, 1605, 526, 1587, 1580, 526, 1587, 1581, 526, 1587, 1582, 526, 1588,
-    1580, 526, 1588, 1581, 526, 1588, 1582, 526, 1591, 1605, 526, 1592, 1605,
-    524, 1575, 1611, 523, 1575, 1611, 781, 1578, 1580, 1605, 780, 1578, 1581,
-    1580, 781, 1578, 1581, 1580, 781, 1578, 1581, 1605, 781, 1578, 1582,
-    1605, 781, 1578, 1605, 1580, 781, 1578, 1605, 1581, 781, 1578, 1605,
-    1582, 780, 1580, 1605, 1581, 781, 1580, 1605, 1581, 780, 1581, 1605,
-    1610, 780, 1581, 1605, 1609, 781, 1587, 1581, 1580, 781, 1587, 1580,
-    1581, 780, 1587, 1580, 1609, 780, 1587, 1605, 1581, 781, 1587, 1605,
-    1581, 781, 1587, 1605, 1580, 780, 1587, 1605, 1605, 781, 1587, 1605,
-    1605, 780, 1589, 1581, 1581, 781, 1589, 1581, 1581, 780, 1589, 1605,
-    1605, 780, 1588, 1581, 1605, 781, 1588, 1581, 1605, 780, 1588, 1580,
-    1610, 780, 1588, 1605, 1582, 781, 1588, 1605, 1582, 780, 1588, 1605,
-    1605, 781, 1588, 1605, 1605, 780, 1590, 1581, 1609, 780, 1590, 1582,
-    1605, 781, 1590, 1582, 1605, 780, 1591, 1605, 1581, 781, 1591, 1605,
-    1581, 781, 1591, 1605, 1605, 780, 1591, 1605, 1610, 780, 1593, 1580,
-    1605, 780, 1593, 1605, 1605, 781, 1593, 1605, 1605, 780, 1593, 1605,
-    1609, 780, 1594, 1605, 1605, 780, 1594, 1605, 1610, 780, 1594, 1605,
-    1609, 780, 1601, 1582, 1605, 781, 1601, 1582, 1605, 780, 1602, 1605,
-    1581, 780, 1602, 1605, 1605, 780, 1604, 1581, 1605, 780, 1604, 1581,
-    1610, 780, 1604, 1581, 1609, 781, 1604, 1580, 1580, 780, 1604, 1580,
-    1580, 780, 1604, 1582, 1605, 781, 1604, 1582, 1605, 780, 1604, 1605,
-    1581, 781, 1604, 1605, 1581, 781, 1605, 1581, 1580, 781, 1605, 1581,
-    1605, 780, 1605, 1581, 1610, 781, 1605, 1580, 1581, 781, 1605, 1580,
-    1605, 781, 1605, 1582, 1580, 781, 1605, 1582, 1605, 781, 1605, 1580,
-    1582, 781, 1607, 1605, 1580, 781, 1607, 1605, 1605, 781, 1606, 1581,
-    1605, 780, 1606, 1581, 1609, 780, 1606, 1580, 1605, 781, 1606, 1580,
-    1605, 780, 1606, 1580, 1609, 780, 1606, 1605, 1610, 780, 1606, 1605,
-    1609, 780, 1610, 1605, 1605, 781, 1610, 1605, 1605, 780, 1576, 1582,
-    1610, 780, 1578, 1580, 1610, 780, 1578, 1580, 1609, 780, 1578, 1582,
-    1610, 780, 1578, 1582, 1609, 780, 1578, 1605, 1610, 780, 1578, 1605,
-    1609, 780, 1580, 1605, 1610, 780, 1580, 1581, 1609, 780, 1580, 1605,
-    1609, 780, 1587, 1582, 1609, 780, 1589, 1581, 1610, 780, 1588, 1581,
-    1610, 780, 1590, 1581, 1610, 780, 1604, 1580, 1610, 780, 1604, 1605,
-    1610, 780, 1610, 1581, 1610, 780, 1610, 1580, 1610, 780, 1610, 1605,
-    1610, 780, 1605, 1605, 1610, 780, 1602, 1605, 1610, 780, 1606, 1581,
-    1610, 781, 1602, 1605, 1581, 781, 1604, 1581, 1605, 780, 1593, 1605,
-    1610, 780, 1603, 1605, 1610, 781, 1606, 1580, 1581, 780, 1605, 1582,
-    1610, 781, 1604, 1580, 1605, 780, 1603, 1605, 1605, 780, 1604, 1580,
-    1605, 780, 1606, 1580, 1581, 780, 1580, 1581, 1610, 780, 1581, 1580,
-    1610, 780, 1605, 1580, 1610, 780, 1601, 1605, 1610, 780, 1576, 1581,
-    1610, 781, 1603, 1605, 1605, 781, 1593, 1580, 1605, 781, 1589, 1605,
-    1605, 780, 1587, 1582, 1610, 780, 1606, 1580, 1610, 779, 1589, 1604,
-    1746, 779, 1602, 1604, 1746, 1035, 1575, 1604, 1604, 1607, 1035, 1575,
-    1603, 1576, 1585, 1035, 1605, 1581, 1605, 1583, 1035, 1589, 1604, 1593,
-    1605, 1035, 1585, 1587, 1608, 1604, 1035, 1593, 1604, 1610, 1607, 1035,
-    1608, 1587, 1604, 1605, 779, 1589, 1604, 1609, 4619, 1589, 1604, 1609,
-    32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587,
-    1604, 1605, 2059, 1580, 1604, 32, 1580, 1604, 1575, 1604, 1607, 1035,
-    1585, 1740, 1575, 1604, 265, 44, 265, 12289, 265, 12290, 265, 58, 265,
-    59, 265, 33, 265, 63, 265, 12310, 265, 12311, 265, 8230, 265, 8229, 265,
-    8212, 265, 8211, 265, 95, 265, 95, 265, 40, 265, 41, 265, 123, 265, 125,
-    265, 12308, 265, 12309, 265, 12304, 265, 12305, 265, 12298, 265, 12299,
-    265, 12296, 265, 12297, 265, 12300, 265, 12301, 265, 12302, 265, 12303,
-    265, 91, 265, 93, 258, 8254, 258, 8254, 258, 8254, 258, 8254, 258, 95,
-    258, 95, 258, 95, 271, 44, 271, 12289, 271, 46, 271, 59, 271, 58, 271,
-    63, 271, 33, 271, 8212, 271, 40, 271, 41, 271, 123, 271, 125, 271, 12308,
-    271, 12309, 271, 35, 271, 38, 271, 42, 271, 43, 271, 45, 271, 60, 271,
-    62, 271, 61, 271, 92, 271, 36, 271, 37, 271, 64, 523, 32, 1611, 526,
-    1600, 1611, 523, 32, 1612, 523, 32, 1613, 523, 32, 1614, 526, 1600, 1614,
-    523, 32, 1615, 526, 1600, 1615, 523, 32, 1616, 526, 1600, 1616, 523, 32,
-    1617, 526, 1600, 1617, 523, 32, 1618, 526, 1600, 1618, 267, 1569, 267,
-    1570, 268, 1570, 267, 1571, 268, 1571, 267, 1572, 268, 1572, 267, 1573,
-    268, 1573, 267, 1574, 268, 1574, 269, 1574, 270, 1574, 267, 1575, 268,
-    1575, 267, 1576, 268, 1576, 269, 1576, 270, 1576, 267, 1577, 268, 1577,
-    267, 1578, 268, 1578, 269, 1578, 270, 1578, 267, 1579, 268, 1579, 269,
-    1579, 270, 1579, 267, 1580, 268, 1580, 269, 1580, 270, 1580, 267, 1581,
-    268, 1581, 269, 1581, 270, 1581, 267, 1582, 268, 1582, 269, 1582, 270,
-    1582, 267, 1583, 268, 1583, 267, 1584, 268, 1584, 267, 1585, 268, 1585,
-    267, 1586, 268, 1586, 267, 1587, 268, 1587, 269, 1587, 270, 1587, 267,
-    1588, 268, 1588, 269, 1588, 270, 1588, 267, 1589, 268, 1589, 269, 1589,
-    270, 1589, 267, 1590, 268, 1590, 269, 1590, 270, 1590, 267, 1591, 268,
-    1591, 269, 1591, 270, 1591, 267, 1592, 268, 1592, 269, 1592, 270, 1592,
-    267, 1593, 268, 1593, 269, 1593, 270, 1593, 267, 1594, 268, 1594, 269,
-    1594, 270, 1594, 267, 1601, 268, 1601, 269, 1601, 270, 1601, 267, 1602,
-    268, 1602, 269, 1602, 270, 1602, 267, 1603, 268, 1603, 269, 1603, 270,
-    1603, 267, 1604, 268, 1604, 269, 1604, 270, 1604, 267, 1605, 268, 1605,
-    269, 1605, 270, 1605, 267, 1606, 268, 1606, 269, 1606, 270, 1606, 267,
-    1607, 268, 1607, 269, 1607, 270, 1607, 267, 1608, 268, 1608, 267, 1609,
-    268, 1609, 267, 1610, 268, 1610, 269, 1610, 270, 1610, 523, 1604, 1570,
-    524, 1604, 1570, 523, 1604, 1571, 524, 1604, 1571, 523, 1604, 1573, 524,
-    1604, 1573, 523, 1604, 1575, 524, 1604, 1575, 264, 33, 264, 34, 264, 35,
-    264, 36, 264, 37, 264, 38, 264, 39, 264, 40, 264, 41, 264, 42, 264, 43,
-    264, 44, 264, 45, 264, 46, 264, 47, 264, 48, 264, 49, 264, 50, 264, 51,
-    264, 52, 264, 53, 264, 54, 264, 55, 264, 56, 264, 57, 264, 58, 264, 59,
-    264, 60, 264, 61, 264, 62, 264, 63, 264, 64, 264, 65, 264, 66, 264, 67,
-    264, 68, 264, 69, 264, 70, 264, 71, 264, 72, 264, 73, 264, 74, 264, 75,
-    264, 76, 264, 77, 264, 78, 264, 79, 264, 80, 264, 81, 264, 82, 264, 83,
-    264, 84, 264, 85, 264, 86, 264, 87, 264, 88, 264, 89, 264, 90, 264, 91,
-    264, 92, 264, 93, 264, 94, 264, 95, 264, 96, 264, 97, 264, 98, 264, 99,
-    264, 100, 264, 101, 264, 102, 264, 103, 264, 104, 264, 105, 264, 106,
-    264, 107, 264, 108, 264, 109, 264, 110, 264, 111, 264, 112, 264, 113,
-    264, 114, 264, 115, 264, 116, 264, 117, 264, 118, 264, 119, 264, 120,
-    264, 121, 264, 122, 264, 123, 264, 124, 264, 125, 264, 126, 264, 10629,
-    264, 10630, 272, 12290, 272, 12300, 272, 12301, 272, 12289, 272, 12539,
-    272, 12530, 272, 12449, 272, 12451, 272, 12453, 272, 12455, 272, 12457,
-    272, 12515, 272, 12517, 272, 12519, 272, 12483, 272, 12540, 272, 12450,
-    272, 12452, 272, 12454, 272, 12456, 272, 12458, 272, 12459, 272, 12461,
-    272, 12463, 272, 12465, 272, 12467, 272, 12469, 272, 12471, 272, 12473,
-    272, 12475, 272, 12477, 272, 12479, 272, 12481, 272, 12484, 272, 12486,
-    272, 12488, 272, 12490, 272, 12491, 272, 12492, 272, 12493, 272, 12494,
-    272, 12495, 272, 12498, 272, 12501, 272, 12504, 272, 12507, 272, 12510,
-    272, 12511, 272, 12512, 272, 12513, 272, 12514, 272, 12516, 272, 12518,
-    272, 12520, 272, 12521, 272, 12522, 272, 12523, 272, 12524, 272, 12525,
-    272, 12527, 272, 12531, 272, 12441, 272, 12442, 272, 12644, 272, 12593,
-    272, 12594, 272, 12595, 272, 12596, 272, 12597, 272, 12598, 272, 12599,
-    272, 12600, 272, 12601, 272, 12602, 272, 12603, 272, 12604, 272, 12605,
-    272, 12606, 272, 12607, 272, 12608, 272, 12609, 272, 12610, 272, 12611,
-    272, 12612, 272, 12613, 272, 12614, 272, 12615, 272, 12616, 272, 12617,
-    272, 12618, 272, 12619, 272, 12620, 272, 12621, 272, 12622, 272, 12623,
-    272, 12624, 272, 12625, 272, 12626, 272, 12627, 272, 12628, 272, 12629,
-    272, 12630, 272, 12631, 272, 12632, 272, 12633, 272, 12634, 272, 12635,
-    272, 12636, 272, 12637, 272, 12638, 272, 12639, 272, 12640, 272, 12641,
-    272, 12642, 272, 12643, 264, 162, 264, 163, 264, 172, 264, 175, 264, 166,
-    264, 165, 264, 8361, 272, 9474, 272, 8592, 272, 8593, 272, 8594, 272,
-    8595, 272, 9632, 272, 9675, 512, 69785, 69818, 512, 69787, 69818, 512,
-    69797, 69818, 512, 69937, 69927, 512, 69938, 69927, 512, 70471, 70462,
-    512, 70471, 70487, 512, 70841, 70842, 512, 70841, 70832, 512, 70841,
-    70845, 512, 71096, 71087, 512, 71097, 71087, 512, 119127, 119141, 512,
-    119128, 119141, 512, 119135, 119150, 512, 119135, 119151, 512, 119135,
-    119152, 512, 119135, 119153, 512, 119135, 119154, 512, 119225, 119141,
-    512, 119226, 119141, 512, 119227, 119150, 512, 119228, 119150, 512,
-    119227, 119151, 512, 119228, 119151, 262, 65, 262, 66, 262, 67, 262, 68,
-    262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76,
-    262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84,
-    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98,
-    262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262,
-    106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262,
-    113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262,
-    120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69,
-    262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77,
-    262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85,
-    262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99,
-    262, 100, 262, 101, 262, 102, 262, 103, 262, 105, 262, 106, 262, 107,
+    294, 259, 339, 259, 42791, 259, 43831, 259, 619, 259, 43858, 259, 653,
+    256, 35912, 256, 26356, 256, 36554, 256, 36040, 256, 28369, 256, 20018,
+    256, 21477, 256, 40860, 256, 40860, 256, 22865, 256, 37329, 256, 21895,
+    256, 22856, 256, 25078, 256, 30313, 256, 32645, 256, 34367, 256, 34746,
+    256, 35064, 256, 37007, 256, 27138, 256, 27931, 256, 28889, 256, 29662,
+    256, 33853, 256, 37226, 256, 39409, 256, 20098, 256, 21365, 256, 27396,
+    256, 29211, 256, 34349, 256, 40478, 256, 23888, 256, 28651, 256, 34253,
+    256, 35172, 256, 25289, 256, 33240, 256, 34847, 256, 24266, 256, 26391,
+    256, 28010, 256, 29436, 256, 37070, 256, 20358, 256, 20919, 256, 21214,
+    256, 25796, 256, 27347, 256, 29200, 256, 30439, 256, 32769, 256, 34310,
+    256, 34396, 256, 36335, 256, 38706, 256, 39791, 256, 40442, 256, 30860,
+    256, 31103, 256, 32160, 256, 33737, 256, 37636, 256, 40575, 256, 35542,
+    256, 22751, 256, 24324, 256, 31840, 256, 32894, 256, 29282, 256, 30922,
+    256, 36034, 256, 38647, 256, 22744, 256, 23650, 256, 27155, 256, 28122,
+    256, 28431, 256, 32047, 256, 32311, 256, 38475, 256, 21202, 256, 32907,
+    256, 20956, 256, 20940, 256, 31260, 256, 32190, 256, 33777, 256, 38517,
+    256, 35712, 256, 25295, 256, 27138, 256, 35582, 256, 20025, 256, 23527,
+    256, 24594, 256, 29575, 256, 30064, 256, 21271, 256, 30971, 256, 20415,
+    256, 24489, 256, 19981, 256, 27852, 256, 25976, 256, 32034, 256, 21443,
+    256, 22622, 256, 30465, 256, 33865, 256, 35498, 256, 27578, 256, 36784,
+    256, 27784, 256, 25342, 256, 33509, 256, 25504, 256, 30053, 256, 20142,
+    256, 20841, 256, 20937, 256, 26753, 256, 31975, 256, 33391, 256, 35538,
+    256, 37327, 256, 21237, 256, 21570, 256, 22899, 256, 24300, 256, 26053,
+    256, 28670, 256, 31018, 256, 38317, 256, 39530, 256, 40599, 256, 40654,
+    256, 21147, 256, 26310, 256, 27511, 256, 36706, 256, 24180, 256, 24976,
+    256, 25088, 256, 25754, 256, 28451, 256, 29001, 256, 29833, 256, 31178,
+    256, 32244, 256, 32879, 256, 36646, 256, 34030, 256, 36899, 256, 37706,
+    256, 21015, 256, 21155, 256, 21693, 256, 28872, 256, 35010, 256, 35498,
+    256, 24265, 256, 24565, 256, 25467, 256, 27566, 256, 31806, 256, 29557,
+    256, 20196, 256, 22265, 256, 23527, 256, 23994, 256, 24604, 256, 29618,
+    256, 29801, 256, 32666, 256, 32838, 256, 37428, 256, 38646, 256, 38728,
+    256, 38936, 256, 20363, 256, 31150, 256, 37300, 256, 38584, 256, 24801,
+    256, 20102, 256, 20698, 256, 23534, 256, 23615, 256, 26009, 256, 27138,
+    256, 29134, 256, 30274, 256, 34044, 256, 36988, 256, 40845, 256, 26248,
+    256, 38446, 256, 21129, 256, 26491, 256, 26611, 256, 27969, 256, 28316,
+    256, 29705, 256, 30041, 256, 30827, 256, 32016, 256, 39006, 256, 20845,
+    256, 25134, 256, 38520, 256, 20523, 256, 23833, 256, 28138, 256, 36650,
+    256, 24459, 256, 24900, 256, 26647, 256, 29575, 256, 38534, 256, 21033,
+    256, 21519, 256, 23653, 256, 26131, 256, 26446, 256, 26792, 256, 27877,
+    256, 29702, 256, 30178, 256, 32633, 256, 35023, 256, 35041, 256, 37324,
+    256, 38626, 256, 21311, 256, 28346, 256, 21533, 256, 29136, 256, 29848,
+    256, 34298, 256, 38563, 256, 40023, 256, 40607, 256, 26519, 256, 28107,
+    256, 33256, 256, 31435, 256, 31520, 256, 31890, 256, 29376, 256, 28825,
+    256, 35672, 256, 20160, 256, 33590, 256, 21050, 256, 20999, 256, 24230,
+    256, 25299, 256, 31958, 256, 23429, 256, 27934, 256, 26292, 256, 36667,
+    256, 34892, 256, 38477, 256, 35211, 256, 24275, 256, 20800, 256, 21952,
+    256, 22618, 256, 26228, 256, 20958, 256, 29482, 256, 30410, 256, 31036,
+    256, 31070, 256, 31077, 256, 31119, 256, 38742, 256, 31934, 256, 32701,
+    256, 34322, 256, 35576, 256, 36920, 256, 37117, 256, 39151, 256, 39164,
+    256, 39208, 256, 40372, 256, 37086, 256, 38583, 256, 20398, 256, 20711,
+    256, 20813, 256, 21193, 256, 21220, 256, 21329, 256, 21917, 256, 22022,
+    256, 22120, 256, 22592, 256, 22696, 256, 23652, 256, 23662, 256, 24724,
+    256, 24936, 256, 24974, 256, 25074, 256, 25935, 256, 26082, 256, 26257,
+    256, 26757, 256, 28023, 256, 28186, 256, 28450, 256, 29038, 256, 29227,
+    256, 29730, 256, 30865, 256, 31038, 256, 31049, 256, 31048, 256, 31056,
+    256, 31062, 256, 31069, 256, 31117, 256, 31118, 256, 31296, 256, 31361,
+    256, 31680, 256, 32244, 256, 32265, 256, 32321, 256, 32626, 256, 32773,
+    256, 33261, 256, 33401, 256, 33401, 256, 33879, 256, 35088, 256, 35222,
+    256, 35585, 256, 35641, 256, 36051, 256, 36104, 256, 36790, 256, 36920,
+    256, 38627, 256, 38911, 256, 38971, 256, 24693, 256, 148206, 256, 33304,
+    256, 20006, 256, 20917, 256, 20840, 256, 20352, 256, 20805, 256, 20864,
+    256, 21191, 256, 21242, 256, 21917, 256, 21845, 256, 21913, 256, 21986,
+    256, 22618, 256, 22707, 256, 22852, 256, 22868, 256, 23138, 256, 23336,
+    256, 24274, 256, 24281, 256, 24425, 256, 24493, 256, 24792, 256, 24910,
+    256, 24840, 256, 24974, 256, 24928, 256, 25074, 256, 25140, 256, 25540,
+    256, 25628, 256, 25682, 256, 25942, 256, 26228, 256, 26391, 256, 26395,
+    256, 26454, 256, 27513, 256, 27578, 256, 27969, 256, 28379, 256, 28363,
+    256, 28450, 256, 28702, 256, 29038, 256, 30631, 256, 29237, 256, 29359,
+    256, 29482, 256, 29809, 256, 29958, 256, 30011, 256, 30237, 256, 30239,
+    256, 30410, 256, 30427, 256, 30452, 256, 30538, 256, 30528, 256, 30924,
+    256, 31409, 256, 31680, 256, 31867, 256, 32091, 256, 32244, 256, 32574,
+    256, 32773, 256, 33618, 256, 33775, 256, 34681, 256, 35137, 256, 35206,
+    256, 35222, 256, 35519, 256, 35576, 256, 35531, 256, 35585, 256, 35582,
+    256, 35565, 256, 35641, 256, 35722, 256, 36104, 256, 36664, 256, 36978,
+    256, 37273, 256, 37494, 256, 38524, 256, 38627, 256, 38742, 256, 38875,
+    256, 38911, 256, 38923, 256, 38971, 256, 39698, 256, 40860, 256, 141386,
+    256, 141380, 256, 144341, 256, 15261, 256, 16408, 256, 16441, 256,
+    152137, 256, 154832, 256, 163539, 256, 40771, 256, 40846, 514, 102, 102,
+    514, 102, 105, 514, 102, 108, 770, 102, 102, 105, 770, 102, 102, 108,
+    514, 383, 116, 514, 115, 116, 514, 1396, 1398, 514, 1396, 1381, 514,
+    1396, 1387, 514, 1406, 1398, 514, 1396, 1389, 512, 1497, 1460, 512, 1522,
+    1463, 262, 1506, 262, 1488, 262, 1491, 262, 1492, 262, 1499, 262, 1500,
+    262, 1501, 262, 1512, 262, 1514, 262, 43, 512, 1513, 1473, 512, 1513,
+    1474, 512, 64329, 1473, 512, 64329, 1474, 512, 1488, 1463, 512, 1488,
+    1464, 512, 1488, 1468, 512, 1489, 1468, 512, 1490, 1468, 512, 1491, 1468,
+    512, 1492, 1468, 512, 1493, 1468, 512, 1494, 1468, 512, 1496, 1468, 512,
+    1497, 1468, 512, 1498, 1468, 512, 1499, 1468, 512, 1500, 1468, 512, 1502,
+    1468, 512, 1504, 1468, 512, 1505, 1468, 512, 1507, 1468, 512, 1508, 1468,
+    512, 1510, 1468, 512, 1511, 1468, 512, 1512, 1468, 512, 1513, 1468, 512,
+    1514, 1468, 512, 1493, 1465, 512, 1489, 1471, 512, 1499, 1471, 512, 1508,
+    1471, 514, 1488, 1500, 267, 1649, 268, 1649, 267, 1659, 268, 1659, 269,
+    1659, 270, 1659, 267, 1662, 268, 1662, 269, 1662, 270, 1662, 267, 1664,
+    268, 1664, 269, 1664, 270, 1664, 267, 1658, 268, 1658, 269, 1658, 270,
+    1658, 267, 1663, 268, 1663, 269, 1663, 270, 1663, 267, 1657, 268, 1657,
+    269, 1657, 270, 1657, 267, 1700, 268, 1700, 269, 1700, 270, 1700, 267,
+    1702, 268, 1702, 269, 1702, 270, 1702, 267, 1668, 268, 1668, 269, 1668,
+    270, 1668, 267, 1667, 268, 1667, 269, 1667, 270, 1667, 267, 1670, 268,
+    1670, 269, 1670, 270, 1670, 267, 1671, 268, 1671, 269, 1671, 270, 1671,
+    267, 1677, 268, 1677, 267, 1676, 268, 1676, 267, 1678, 268, 1678, 267,
+    1672, 268, 1672, 267, 1688, 268, 1688, 267, 1681, 268, 1681, 267, 1705,
+    268, 1705, 269, 1705, 270, 1705, 267, 1711, 268, 1711, 269, 1711, 270,
+    1711, 267, 1715, 268, 1715, 269, 1715, 270, 1715, 267, 1713, 268, 1713,
+    269, 1713, 270, 1713, 267, 1722, 268, 1722, 267, 1723, 268, 1723, 269,
+    1723, 270, 1723, 267, 1728, 268, 1728, 267, 1729, 268, 1729, 269, 1729,
+    270, 1729, 267, 1726, 268, 1726, 269, 1726, 270, 1726, 267, 1746, 268,
+    1746, 267, 1747, 268, 1747, 267, 1709, 268, 1709, 269, 1709, 270, 1709,
+    267, 1735, 268, 1735, 267, 1734, 268, 1734, 267, 1736, 268, 1736, 267,
+    1655, 267, 1739, 268, 1739, 267, 1733, 268, 1733, 267, 1737, 268, 1737,
+    267, 1744, 268, 1744, 269, 1744, 270, 1744, 269, 1609, 270, 1609, 523,
+    1574, 1575, 524, 1574, 1575, 523, 1574, 1749, 524, 1574, 1749, 523, 1574,
+    1608, 524, 1574, 1608, 523, 1574, 1735, 524, 1574, 1735, 523, 1574, 1734,
+    524, 1574, 1734, 523, 1574, 1736, 524, 1574, 1736, 523, 1574, 1744, 524,
+    1574, 1744, 525, 1574, 1744, 523, 1574, 1609, 524, 1574, 1609, 525, 1574,
+    1609, 267, 1740, 268, 1740, 269, 1740, 270, 1740, 523, 1574, 1580, 523,
+    1574, 1581, 523, 1574, 1605, 523, 1574, 1609, 523, 1574, 1610, 523, 1576,
+    1580, 523, 1576, 1581, 523, 1576, 1582, 523, 1576, 1605, 523, 1576, 1609,
+    523, 1576, 1610, 523, 1578, 1580, 523, 1578, 1581, 523, 1578, 1582, 523,
+    1578, 1605, 523, 1578, 1609, 523, 1578, 1610, 523, 1579, 1580, 523, 1579,
+    1605, 523, 1579, 1609, 523, 1579, 1610, 523, 1580, 1581, 523, 1580, 1605,
+    523, 1581, 1580, 523, 1581, 1605, 523, 1582, 1580, 523, 1582, 1581, 523,
+    1582, 1605, 523, 1587, 1580, 523, 1587, 1581, 523, 1587, 1582, 523, 1587,
+    1605, 523, 1589, 1581, 523, 1589, 1605, 523, 1590, 1580, 523, 1590, 1581,
+    523, 1590, 1582, 523, 1590, 1605, 523, 1591, 1581, 523, 1591, 1605, 523,
+    1592, 1605, 523, 1593, 1580, 523, 1593, 1605, 523, 1594, 1580, 523, 1594,
+    1605, 523, 1601, 1580, 523, 1601, 1581, 523, 1601, 1582, 523, 1601, 1605,
+    523, 1601, 1609, 523, 1601, 1610, 523, 1602, 1581, 523, 1602, 1605, 523,
+    1602, 1609, 523, 1602, 1610, 523, 1603, 1575, 523, 1603, 1580, 523, 1603,
+    1581, 523, 1603, 1582, 523, 1603, 1604, 523, 1603, 1605, 523, 1603, 1609,
+    523, 1603, 1610, 523, 1604, 1580, 523, 1604, 1581, 523, 1604, 1582, 523,
+    1604, 1605, 523, 1604, 1609, 523, 1604, 1610, 523, 1605, 1580, 523, 1605,
+    1581, 523, 1605, 1582, 523, 1605, 1605, 523, 1605, 1609, 523, 1605, 1610,
+    523, 1606, 1580, 523, 1606, 1581, 523, 1606, 1582, 523, 1606, 1605, 523,
+    1606, 1609, 523, 1606, 1610, 523, 1607, 1580, 523, 1607, 1605, 523, 1607,
+    1609, 523, 1607, 1610, 523, 1610, 1580, 523, 1610, 1581, 523, 1610, 1582,
+    523, 1610, 1605, 523, 1610, 1609, 523, 1610, 1610, 523, 1584, 1648, 523,
+    1585, 1648, 523, 1609, 1648, 779, 32, 1612, 1617, 779, 32, 1613, 1617,
+    779, 32, 1614, 1617, 779, 32, 1615, 1617, 779, 32, 1616, 1617, 779, 32,
+    1617, 1648, 524, 1574, 1585, 524, 1574, 1586, 524, 1574, 1605, 524, 1574,
+    1606, 524, 1574, 1609, 524, 1574, 1610, 524, 1576, 1585, 524, 1576, 1586,
+    524, 1576, 1605, 524, 1576, 1606, 524, 1576, 1609, 524, 1576, 1610, 524,
+    1578, 1585, 524, 1578, 1586, 524, 1578, 1605, 524, 1578, 1606, 524, 1578,
+    1609, 524, 1578, 1610, 524, 1579, 1585, 524, 1579, 1586, 524, 1579, 1605,
+    524, 1579, 1606, 524, 1579, 1609, 524, 1579, 1610, 524, 1601, 1609, 524,
+    1601, 1610, 524, 1602, 1609, 524, 1602, 1610, 524, 1603, 1575, 524, 1603,
+    1604, 524, 1603, 1605, 524, 1603, 1609, 524, 1603, 1610, 524, 1604, 1605,
+    524, 1604, 1609, 524, 1604, 1610, 524, 1605, 1575, 524, 1605, 1605, 524,
+    1606, 1585, 524, 1606, 1586, 524, 1606, 1605, 524, 1606, 1606, 524, 1606,
+    1609, 524, 1606, 1610, 524, 1609, 1648, 524, 1610, 1585, 524, 1610, 1586,
+    524, 1610, 1605, 524, 1610, 1606, 524, 1610, 1609, 524, 1610, 1610, 525,
+    1574, 1580, 525, 1574, 1581, 525, 1574, 1582, 525, 1574, 1605, 525, 1574,
+    1607, 525, 1576, 1580, 525, 1576, 1581, 525, 1576, 1582, 525, 1576, 1605,
+    525, 1576, 1607, 525, 1578, 1580, 525, 1578, 1581, 525, 1578, 1582, 525,
+    1578, 1605, 525, 1578, 1607, 525, 1579, 1605, 525, 1580, 1581, 525, 1580,
+    1605, 525, 1581, 1580, 525, 1581, 1605, 525, 1582, 1580, 525, 1582, 1605,
+    525, 1587, 1580, 525, 1587, 1581, 525, 1587, 1582, 525, 1587, 1605, 525,
+    1589, 1581, 525, 1589, 1582, 525, 1589, 1605, 525, 1590, 1580, 525, 1590,
+    1581, 525, 1590, 1582, 525, 1590, 1605, 525, 1591, 1581, 525, 1592, 1605,
+    525, 1593, 1580, 525, 1593, 1605, 525, 1594, 1580, 525, 1594, 1605, 525,
+    1601, 1580, 525, 1601, 1581, 525, 1601, 1582, 525, 1601, 1605, 525, 1602,
+    1581, 525, 1602, 1605, 525, 1603, 1580, 525, 1603, 1581, 525, 1603, 1582,
+    525, 1603, 1604, 525, 1603, 1605, 525, 1604, 1580, 525, 1604, 1581, 525,
+    1604, 1582, 525, 1604, 1605, 525, 1604, 1607, 525, 1605, 1580, 525, 1605,
+    1581, 525, 1605, 1582, 525, 1605, 1605, 525, 1606, 1580, 525, 1606, 1581,
+    525, 1606, 1582, 525, 1606, 1605, 525, 1606, 1607, 525, 1607, 1580, 525,
+    1607, 1605, 525, 1607, 1648, 525, 1610, 1580, 525, 1610, 1581, 525, 1610,
+    1582, 525, 1610, 1605, 525, 1610, 1607, 526, 1574, 1605, 526, 1574, 1607,
+    526, 1576, 1605, 526, 1576, 1607, 526, 1578, 1605, 526, 1578, 1607, 526,
+    1579, 1605, 526, 1579, 1607, 526, 1587, 1605, 526, 1587, 1607, 526, 1588,
+    1605, 526, 1588, 1607, 526, 1603, 1604, 526, 1603, 1605, 526, 1604, 1605,
+    526, 1606, 1605, 526, 1606, 1607, 526, 1610, 1605, 526, 1610, 1607, 782,
+    1600, 1614, 1617, 782, 1600, 1615, 1617, 782, 1600, 1616, 1617, 523,
+    1591, 1609, 523, 1591, 1610, 523, 1593, 1609, 523, 1593, 1610, 523, 1594,
+    1609, 523, 1594, 1610, 523, 1587, 1609, 523, 1587, 1610, 523, 1588, 1609,
+    523, 1588, 1610, 523, 1581, 1609, 523, 1581, 1610, 523, 1580, 1609, 523,
+    1580, 1610, 523, 1582, 1609, 523, 1582, 1610, 523, 1589, 1609, 523, 1589,
+    1610, 523, 1590, 1609, 523, 1590, 1610, 523, 1588, 1580, 523, 1588, 1581,
+    523, 1588, 1582, 523, 1588, 1605, 523, 1588, 1585, 523, 1587, 1585, 523,
+    1589, 1585, 523, 1590, 1585, 524, 1591, 1609, 524, 1591, 1610, 524, 1593,
+    1609, 524, 1593, 1610, 524, 1594, 1609, 524, 1594, 1610, 524, 1587, 1609,
+    524, 1587, 1610, 524, 1588, 1609, 524, 1588, 1610, 524, 1581, 1609, 524,
+    1581, 1610, 524, 1580, 1609, 524, 1580, 1610, 524, 1582, 1609, 524, 1582,
+    1610, 524, 1589, 1609, 524, 1589, 1610, 524, 1590, 1609, 524, 1590, 1610,
+    524, 1588, 1580, 524, 1588, 1581, 524, 1588, 1582, 524, 1588, 1605, 524,
+    1588, 1585, 524, 1587, 1585, 524, 1589, 1585, 524, 1590, 1585, 525, 1588,
+    1580, 525, 1588, 1581, 525, 1588, 1582, 525, 1588, 1605, 525, 1587, 1607,
+    525, 1588, 1607, 525, 1591, 1605, 526, 1587, 1580, 526, 1587, 1581, 526,
+    1587, 1582, 526, 1588, 1580, 526, 1588, 1581, 526, 1588, 1582, 526, 1591,
+    1605, 526, 1592, 1605, 524, 1575, 1611, 523, 1575, 1611, 781, 1578, 1580,
+    1605, 780, 1578, 1581, 1580, 781, 1578, 1581, 1580, 781, 1578, 1581,
+    1605, 781, 1578, 1582, 1605, 781, 1578, 1605, 1580, 781, 1578, 1605,
+    1581, 781, 1578, 1605, 1582, 780, 1580, 1605, 1581, 781, 1580, 1605,
+    1581, 780, 1581, 1605, 1610, 780, 1581, 1605, 1609, 781, 1587, 1581,
+    1580, 781, 1587, 1580, 1581, 780, 1587, 1580, 1609, 780, 1587, 1605,
+    1581, 781, 1587, 1605, 1581, 781, 1587, 1605, 1580, 780, 1587, 1605,
+    1605, 781, 1587, 1605, 1605, 780, 1589, 1581, 1581, 781, 1589, 1581,
+    1581, 780, 1589, 1605, 1605, 780, 1588, 1581, 1605, 781, 1588, 1581,
+    1605, 780, 1588, 1580, 1610, 780, 1588, 1605, 1582, 781, 1588, 1605,
+    1582, 780, 1588, 1605, 1605, 781, 1588, 1605, 1605, 780, 1590, 1581,
+    1609, 780, 1590, 1582, 1605, 781, 1590, 1582, 1605, 780, 1591, 1605,
+    1581, 781, 1591, 1605, 1581, 781, 1591, 1605, 1605, 780, 1591, 1605,
+    1610, 780, 1593, 1580, 1605, 780, 1593, 1605, 1605, 781, 1593, 1605,
+    1605, 780, 1593, 1605, 1609, 780, 1594, 1605, 1605, 780, 1594, 1605,
+    1610, 780, 1594, 1605, 1609, 780, 1601, 1582, 1605, 781, 1601, 1582,
+    1605, 780, 1602, 1605, 1581, 780, 1602, 1605, 1605, 780, 1604, 1581,
+    1605, 780, 1604, 1581, 1610, 780, 1604, 1581, 1609, 781, 1604, 1580,
+    1580, 780, 1604, 1580, 1580, 780, 1604, 1582, 1605, 781, 1604, 1582,
+    1605, 780, 1604, 1605, 1581, 781, 1604, 1605, 1581, 781, 1605, 1581,
+    1580, 781, 1605, 1581, 1605, 780, 1605, 1581, 1610, 781, 1605, 1580,
+    1581, 781, 1605, 1580, 1605, 781, 1605, 1582, 1580, 781, 1605, 1582,
+    1605, 781, 1605, 1580, 1582, 781, 1607, 1605, 1580, 781, 1607, 1605,
+    1605, 781, 1606, 1581, 1605, 780, 1606, 1581, 1609, 780, 1606, 1580,
+    1605, 781, 1606, 1580, 1605, 780, 1606, 1580, 1609, 780, 1606, 1605,
+    1610, 780, 1606, 1605, 1609, 780, 1610, 1605, 1605, 781, 1610, 1605,
+    1605, 780, 1576, 1582, 1610, 780, 1578, 1580, 1610, 780, 1578, 1580,
+    1609, 780, 1578, 1582, 1610, 780, 1578, 1582, 1609, 780, 1578, 1605,
+    1610, 780, 1578, 1605, 1609, 780, 1580, 1605, 1610, 780, 1580, 1581,
+    1609, 780, 1580, 1605, 1609, 780, 1587, 1582, 1609, 780, 1589, 1581,
+    1610, 780, 1588, 1581, 1610, 780, 1590, 1581, 1610, 780, 1604, 1580,
+    1610, 780, 1604, 1605, 1610, 780, 1610, 1581, 1610, 780, 1610, 1580,
+    1610, 780, 1610, 1605, 1610, 780, 1605, 1605, 1610, 780, 1602, 1605,
+    1610, 780, 1606, 1581, 1610, 781, 1602, 1605, 1581, 781, 1604, 1581,
+    1605, 780, 1593, 1605, 1610, 780, 1603, 1605, 1610, 781, 1606, 1580,
+    1581, 780, 1605, 1582, 1610, 781, 1604, 1580, 1605, 780, 1603, 1605,
+    1605, 780, 1604, 1580, 1605, 780, 1606, 1580, 1581, 780, 1580, 1581,
+    1610, 780, 1581, 1580, 1610, 780, 1605, 1580, 1610, 780, 1601, 1605,
+    1610, 780, 1576, 1581, 1610, 781, 1603, 1605, 1605, 781, 1593, 1580,
+    1605, 781, 1589, 1605, 1605, 780, 1587, 1582, 1610, 780, 1606, 1580,
+    1610, 779, 1589, 1604, 1746, 779, 1602, 1604, 1746, 1035, 1575, 1604,
+    1604, 1607, 1035, 1575, 1603, 1576, 1585, 1035, 1605, 1581, 1605, 1583,
+    1035, 1589, 1604, 1593, 1605, 1035, 1585, 1587, 1608, 1604, 1035, 1593,
+    1604, 1610, 1607, 1035, 1608, 1587, 1604, 1605, 779, 1589, 1604, 1609,
+    4619, 1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610,
+    1607, 32, 1608, 1587, 1604, 1605, 2059, 1580, 1604, 32, 1580, 1604, 1575,
+    1604, 1607, 1035, 1585, 1740, 1575, 1604, 265, 44, 265, 12289, 265,
+    12290, 265, 58, 265, 59, 265, 33, 265, 63, 265, 12310, 265, 12311, 265,
+    8230, 265, 8229, 265, 8212, 265, 8211, 265, 95, 265, 95, 265, 40, 265,
+    41, 265, 123, 265, 125, 265, 12308, 265, 12309, 265, 12304, 265, 12305,
+    265, 12298, 265, 12299, 265, 12296, 265, 12297, 265, 12300, 265, 12301,
+    265, 12302, 265, 12303, 265, 91, 265, 93, 258, 8254, 258, 8254, 258,
+    8254, 258, 8254, 258, 95, 258, 95, 258, 95, 271, 44, 271, 12289, 271, 46,
+    271, 59, 271, 58, 271, 63, 271, 33, 271, 8212, 271, 40, 271, 41, 271,
+    123, 271, 125, 271, 12308, 271, 12309, 271, 35, 271, 38, 271, 42, 271,
+    43, 271, 45, 271, 60, 271, 62, 271, 61, 271, 92, 271, 36, 271, 37, 271,
+    64, 523, 32, 1611, 526, 1600, 1611, 523, 32, 1612, 523, 32, 1613, 523,
+    32, 1614, 526, 1600, 1614, 523, 32, 1615, 526, 1600, 1615, 523, 32, 1616,
+    526, 1600, 1616, 523, 32, 1617, 526, 1600, 1617, 523, 32, 1618, 526,
+    1600, 1618, 267, 1569, 267, 1570, 268, 1570, 267, 1571, 268, 1571, 267,
+    1572, 268, 1572, 267, 1573, 268, 1573, 267, 1574, 268, 1574, 269, 1574,
+    270, 1574, 267, 1575, 268, 1575, 267, 1576, 268, 1576, 269, 1576, 270,
+    1576, 267, 1577, 268, 1577, 267, 1578, 268, 1578, 269, 1578, 270, 1578,
+    267, 1579, 268, 1579, 269, 1579, 270, 1579, 267, 1580, 268, 1580, 269,
+    1580, 270, 1580, 267, 1581, 268, 1581, 269, 1581, 270, 1581, 267, 1582,
+    268, 1582, 269, 1582, 270, 1582, 267, 1583, 268, 1583, 267, 1584, 268,
+    1584, 267, 1585, 268, 1585, 267, 1586, 268, 1586, 267, 1587, 268, 1587,
+    269, 1587, 270, 1587, 267, 1588, 268, 1588, 269, 1588, 270, 1588, 267,
+    1589, 268, 1589, 269, 1589, 270, 1589, 267, 1590, 268, 1590, 269, 1590,
+    270, 1590, 267, 1591, 268, 1591, 269, 1591, 270, 1591, 267, 1592, 268,
+    1592, 269, 1592, 270, 1592, 267, 1593, 268, 1593, 269, 1593, 270, 1593,
+    267, 1594, 268, 1594, 269, 1594, 270, 1594, 267, 1601, 268, 1601, 269,
+    1601, 270, 1601, 267, 1602, 268, 1602, 269, 1602, 270, 1602, 267, 1603,
+    268, 1603, 269, 1603, 270, 1603, 267, 1604, 268, 1604, 269, 1604, 270,
+    1604, 267, 1605, 268, 1605, 269, 1605, 270, 1605, 267, 1606, 268, 1606,
+    269, 1606, 270, 1606, 267, 1607, 268, 1607, 269, 1607, 270, 1607, 267,
+    1608, 268, 1608, 267, 1609, 268, 1609, 267, 1610, 268, 1610, 269, 1610,
+    270, 1610, 523, 1604, 1570, 524, 1604, 1570, 523, 1604, 1571, 524, 1604,
+    1571, 523, 1604, 1573, 524, 1604, 1573, 523, 1604, 1575, 524, 1604, 1575,
+    264, 33, 264, 34, 264, 35, 264, 36, 264, 37, 264, 38, 264, 39, 264, 40,
+    264, 41, 264, 42, 264, 43, 264, 44, 264, 45, 264, 46, 264, 47, 264, 48,
+    264, 49, 264, 50, 264, 51, 264, 52, 264, 53, 264, 54, 264, 55, 264, 56,
+    264, 57, 264, 58, 264, 59, 264, 60, 264, 61, 264, 62, 264, 63, 264, 64,
+    264, 65, 264, 66, 264, 67, 264, 68, 264, 69, 264, 70, 264, 71, 264, 72,
+    264, 73, 264, 74, 264, 75, 264, 76, 264, 77, 264, 78, 264, 79, 264, 80,
+    264, 81, 264, 82, 264, 83, 264, 84, 264, 85, 264, 86, 264, 87, 264, 88,
+    264, 89, 264, 90, 264, 91, 264, 92, 264, 93, 264, 94, 264, 95, 264, 96,
+    264, 97, 264, 98, 264, 99, 264, 100, 264, 101, 264, 102, 264, 103, 264,
+    104, 264, 105, 264, 106, 264, 107, 264, 108, 264, 109, 264, 110, 264,
+    111, 264, 112, 264, 113, 264, 114, 264, 115, 264, 116, 264, 117, 264,
+    118, 264, 119, 264, 120, 264, 121, 264, 122, 264, 123, 264, 124, 264,
+    125, 264, 126, 264, 10629, 264, 10630, 272, 12290, 272, 12300, 272,
+    12301, 272, 12289, 272, 12539, 272, 12530, 272, 12449, 272, 12451, 272,
+    12453, 272, 12455, 272, 12457, 272, 12515, 272, 12517, 272, 12519, 272,
+    12483, 272, 12540, 272, 12450, 272, 12452, 272, 12454, 272, 12456, 272,
+    12458, 272, 12459, 272, 12461, 272, 12463, 272, 12465, 272, 12467, 272,
+    12469, 272, 12471, 272, 12473, 272, 12475, 272, 12477, 272, 12479, 272,
+    12481, 272, 12484, 272, 12486, 272, 12488, 272, 12490, 272, 12491, 272,
+    12492, 272, 12493, 272, 12494, 272, 12495, 272, 12498, 272, 12501, 272,
+    12504, 272, 12507, 272, 12510, 272, 12511, 272, 12512, 272, 12513, 272,
+    12514, 272, 12516, 272, 12518, 272, 12520, 272, 12521, 272, 12522, 272,
+    12523, 272, 12524, 272, 12525, 272, 12527, 272, 12531, 272, 12441, 272,
+    12442, 272, 12644, 272, 12593, 272, 12594, 272, 12595, 272, 12596, 272,
+    12597, 272, 12598, 272, 12599, 272, 12600, 272, 12601, 272, 12602, 272,
+    12603, 272, 12604, 272, 12605, 272, 12606, 272, 12607, 272, 12608, 272,
+    12609, 272, 12610, 272, 12611, 272, 12612, 272, 12613, 272, 12614, 272,
+    12615, 272, 12616, 272, 12617, 272, 12618, 272, 12619, 272, 12620, 272,
+    12621, 272, 12622, 272, 12623, 272, 12624, 272, 12625, 272, 12626, 272,
+    12627, 272, 12628, 272, 12629, 272, 12630, 272, 12631, 272, 12632, 272,
+    12633, 272, 12634, 272, 12635, 272, 12636, 272, 12637, 272, 12638, 272,
+    12639, 272, 12640, 272, 12641, 272, 12642, 272, 12643, 264, 162, 264,
+    163, 264, 172, 264, 175, 264, 166, 264, 165, 264, 8361, 272, 9474, 272,
+    8592, 272, 8593, 272, 8594, 272, 8595, 272, 9632, 272, 9675, 512, 69785,
+    69818, 512, 69787, 69818, 512, 69797, 69818, 512, 69937, 69927, 512,
+    69938, 69927, 512, 70471, 70462, 512, 70471, 70487, 512, 70841, 70842,
+    512, 70841, 70832, 512, 70841, 70845, 512, 71096, 71087, 512, 71097,
+    71087, 512, 71989, 71984, 512, 119127, 119141, 512, 119128, 119141, 512,
+    119135, 119150, 512, 119135, 119151, 512, 119135, 119152, 512, 119135,
+    119153, 512, 119135, 119154, 512, 119225, 119141, 512, 119226, 119141,
+    512, 119227, 119150, 512, 119228, 119150, 512, 119227, 119151, 512,
+    119228, 119151, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70,
+    262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78,
+    262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86,
+    262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100,
+    262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107,
     262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114,
     262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121,
     262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71,
     262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79,
     262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87,
     262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101,
+    262, 102, 262, 103, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109,
+    262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116,
+    262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262,
+    66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262,
+    74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262,
+    82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262,
+    90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103,
+    262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110,
+    262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117,
+    262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 67, 262,
+    68, 262, 71, 262, 74, 262, 75, 262, 78, 262, 79, 262, 80, 262, 81, 262,
+    83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262,
+    97, 262, 98, 262, 99, 262, 100, 262, 102, 262, 104, 262, 105, 262, 106,
+    262, 107, 262, 108, 262, 109, 262, 110, 262, 112, 262, 113, 262, 114,
+    262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121,
+    262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71,
+    262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79,
+    262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87,
+    262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101,
     262, 102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108,
     262, 109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115,
     262, 116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122,
-    262, 65, 262, 67, 262, 68, 262, 71, 262, 74, 262, 75, 262, 78, 262, 79,
-    262, 80, 262, 81, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88,
-    262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 102, 262,
-    104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262,
-    112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262,
-    119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68,
-    262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76,
-    262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84,
-    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98,
-    262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262,
-    106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262,
-    113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262,
-    120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 68, 262, 69, 262, 70,
-    262, 71, 262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80,
-    262, 81, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89,
-    262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262,
-    104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262,
-    111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262,
-    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 68,
-    262, 69, 262, 70, 262, 71, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77,
-    262, 79, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89,
-    262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262,
-    104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262,
-    111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262,
-    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67,
-    262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75,
-    262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83,
-    262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97,
-    262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262,
-    105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262,
-    112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262,
-    119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68,
-    262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76,
-    262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84,
-    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98,
-    262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262,
-    106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262,
-    113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262,
-    120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67, 262, 68, 262, 69,
-    262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75, 262, 76, 262, 77,
-    262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83, 262, 84, 262, 85,
-    262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97, 262, 98, 262, 99,
+    262, 65, 262, 66, 262, 68, 262, 69, 262, 70, 262, 71, 262, 74, 262, 75,
+    262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 83, 262, 84,
+    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99,
+    262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106,
+    262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113,
+    262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120,
+    262, 121, 262, 122, 262, 65, 262, 66, 262, 68, 262, 69, 262, 70, 262, 71,
+    262, 73, 262, 74, 262, 75, 262, 76, 262, 77, 262, 79, 262, 83, 262, 84,
+    262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 97, 262, 98, 262, 99,
     262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262, 105, 262, 106,
     262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262, 112, 262, 113,
     262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262, 119, 262, 120,
@@ -4136,24 +4163,28 @@
     262, 89, 262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262,
     102, 262, 103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262,
     109, 262, 110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262,
-    116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262,
-    305, 262, 567, 262, 913, 262, 914, 262, 915, 262, 916, 262, 917, 262,
-    918, 262, 919, 262, 920, 262, 921, 262, 922, 262, 923, 262, 924, 262,
-    925, 262, 926, 262, 927, 262, 928, 262, 929, 262, 1012, 262, 931, 262,
-    932, 262, 933, 262, 934, 262, 935, 262, 936, 262, 937, 262, 8711, 262,
-    945, 262, 946, 262, 947, 262, 948, 262, 949, 262, 950, 262, 951, 262,
-    952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262, 958, 262,
-    959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262, 965, 262,
-    966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262,
-    1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262, 915, 262,
-    916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262, 922, 262,
-    923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262, 929, 262,
-    1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262, 936, 262,
-    937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262, 949, 262,
-    950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262,
-    957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262,
-    964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262,
-    1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262,
+    116, 262, 117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65,
+    262, 66, 262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73,
+    262, 74, 262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81,
+    262, 82, 262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89,
+    262, 90, 262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262,
+    103, 262, 104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262,
+    110, 262, 111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262,
+    117, 262, 118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66,
+    262, 67, 262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74,
+    262, 75, 262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82,
+    262, 83, 262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90,
+    262, 97, 262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262,
+    104, 262, 105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262,
+    111, 262, 112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262,
+    118, 262, 119, 262, 120, 262, 121, 262, 122, 262, 65, 262, 66, 262, 67,
+    262, 68, 262, 69, 262, 70, 262, 71, 262, 72, 262, 73, 262, 74, 262, 75,
+    262, 76, 262, 77, 262, 78, 262, 79, 262, 80, 262, 81, 262, 82, 262, 83,
+    262, 84, 262, 85, 262, 86, 262, 87, 262, 88, 262, 89, 262, 90, 262, 97,
+    262, 98, 262, 99, 262, 100, 262, 101, 262, 102, 262, 103, 262, 104, 262,
+    105, 262, 106, 262, 107, 262, 108, 262, 109, 262, 110, 262, 111, 262,
+    112, 262, 113, 262, 114, 262, 115, 262, 116, 262, 117, 262, 118, 262,
+    119, 262, 120, 262, 121, 262, 122, 262, 305, 262, 567, 262, 913, 262,
     914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262,
     921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262,
     928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262,
@@ -4178,152 +4209,170 @@
     951, 262, 952, 262, 953, 262, 954, 262, 955, 262, 956, 262, 957, 262,
     958, 262, 959, 262, 960, 262, 961, 262, 962, 262, 963, 262, 964, 262,
     965, 262, 966, 262, 967, 262, 968, 262, 969, 262, 8706, 262, 1013, 262,
-    977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 988, 262, 989, 262,
-    48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262,
-    56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262,
-    54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262,
-    52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262,
-    50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262,
-    48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262,
-    56, 262, 57, 262, 1575, 262, 1576, 262, 1580, 262, 1583, 262, 1608, 262,
-    1586, 262, 1581, 262, 1591, 262, 1610, 262, 1603, 262, 1604, 262, 1605,
-    262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262,
-    1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590,
-    262, 1592, 262, 1594, 262, 1646, 262, 1722, 262, 1697, 262, 1647, 262,
-    1576, 262, 1580, 262, 1607, 262, 1581, 262, 1610, 262, 1603, 262, 1604,
+    977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262, 913, 262, 914, 262,
+    915, 262, 916, 262, 917, 262, 918, 262, 919, 262, 920, 262, 921, 262,
+    922, 262, 923, 262, 924, 262, 925, 262, 926, 262, 927, 262, 928, 262,
+    929, 262, 1012, 262, 931, 262, 932, 262, 933, 262, 934, 262, 935, 262,
+    936, 262, 937, 262, 8711, 262, 945, 262, 946, 262, 947, 262, 948, 262,
+    949, 262, 950, 262, 951, 262, 952, 262, 953, 262, 954, 262, 955, 262,
+    956, 262, 957, 262, 958, 262, 959, 262, 960, 262, 961, 262, 962, 262,
+    963, 262, 964, 262, 965, 262, 966, 262, 967, 262, 968, 262, 969, 262,
+    8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262, 1009, 262, 982, 262,
+    913, 262, 914, 262, 915, 262, 916, 262, 917, 262, 918, 262, 919, 262,
+    920, 262, 921, 262, 922, 262, 923, 262, 924, 262, 925, 262, 926, 262,
+    927, 262, 928, 262, 929, 262, 1012, 262, 931, 262, 932, 262, 933, 262,
+    934, 262, 935, 262, 936, 262, 937, 262, 8711, 262, 945, 262, 946, 262,
+    947, 262, 948, 262, 949, 262, 950, 262, 951, 262, 952, 262, 953, 262,
+    954, 262, 955, 262, 956, 262, 957, 262, 958, 262, 959, 262, 960, 262,
+    961, 262, 962, 262, 963, 262, 964, 262, 965, 262, 966, 262, 967, 262,
+    968, 262, 969, 262, 8706, 262, 1013, 262, 977, 262, 1008, 262, 981, 262,
+    1009, 262, 982, 262, 988, 262, 989, 262, 48, 262, 49, 262, 50, 262, 51,
+    262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49,
+    262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57,
+    262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262, 54, 262, 55,
+    262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53,
+    262, 54, 262, 55, 262, 56, 262, 57, 262, 48, 262, 49, 262, 50, 262, 51,
+    262, 52, 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 262, 1575, 262,
+    1576, 262, 1580, 262, 1583, 262, 1608, 262, 1586, 262, 1581, 262, 1591,
+    262, 1610, 262, 1603, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262,
+    1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578,
+    262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 262,
+    1646, 262, 1722, 262, 1697, 262, 1647, 262, 1576, 262, 1580, 262, 1607,
+    262, 1581, 262, 1610, 262, 1603, 262, 1604, 262, 1605, 262, 1606, 262,
+    1587, 262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578,
+    262, 1579, 262, 1582, 262, 1590, 262, 1594, 262, 1580, 262, 1581, 262,
+    1610, 262, 1604, 262, 1606, 262, 1587, 262, 1593, 262, 1589, 262, 1602,
+    262, 1588, 262, 1582, 262, 1590, 262, 1594, 262, 1722, 262, 1647, 262,
+    1576, 262, 1580, 262, 1607, 262, 1581, 262, 1591, 262, 1610, 262, 1603,
     262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262,
-    1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1590, 262, 1594,
-    262, 1580, 262, 1581, 262, 1610, 262, 1604, 262, 1606, 262, 1587, 262,
-    1593, 262, 1589, 262, 1602, 262, 1588, 262, 1582, 262, 1590, 262, 1594,
-    262, 1722, 262, 1647, 262, 1576, 262, 1580, 262, 1607, 262, 1581, 262,
-    1591, 262, 1610, 262, 1603, 262, 1605, 262, 1606, 262, 1587, 262, 1593,
-    262, 1601, 262, 1589, 262, 1602, 262, 1588, 262, 1578, 262, 1579, 262,
-    1582, 262, 1590, 262, 1592, 262, 1594, 262, 1646, 262, 1697, 262, 1575,
-    262, 1576, 262, 1580, 262, 1583, 262, 1607, 262, 1608, 262, 1586, 262,
-    1581, 262, 1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587,
-    262, 1593, 262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262,
-    1578, 262, 1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594,
-    262, 1576, 262, 1580, 262, 1583, 262, 1608, 262, 1586, 262, 1581, 262,
-    1591, 262, 1610, 262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593,
-    262, 1601, 262, 1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262,
-    1579, 262, 1582, 262, 1584, 262, 1590, 262, 1592, 262, 1594, 514, 48, 46,
-    514, 48, 44, 514, 49, 44, 514, 50, 44, 514, 51, 44, 514, 52, 44, 514, 53,
-    44, 514, 54, 44, 514, 55, 44, 514, 56, 44, 514, 57, 44, 770, 40, 65, 41,
-    770, 40, 66, 41, 770, 40, 67, 41, 770, 40, 68, 41, 770, 40, 69, 41, 770,
-    40, 70, 41, 770, 40, 71, 41, 770, 40, 72, 41, 770, 40, 73, 41, 770, 40,
-    74, 41, 770, 40, 75, 41, 770, 40, 76, 41, 770, 40, 77, 41, 770, 40, 78,
-    41, 770, 40, 79, 41, 770, 40, 80, 41, 770, 40, 81, 41, 770, 40, 82, 41,
-    770, 40, 83, 41, 770, 40, 84, 41, 770, 40, 85, 41, 770, 40, 86, 41, 770,
-    40, 87, 41, 770, 40, 88, 41, 770, 40, 89, 41, 770, 40, 90, 41, 770,
-    12308, 83, 12309, 263, 67, 263, 82, 519, 67, 68, 519, 87, 90, 266, 65,
-    266, 66, 266, 67, 266, 68, 266, 69, 266, 70, 266, 71, 266, 72, 266, 73,
-    266, 74, 266, 75, 266, 76, 266, 77, 266, 78, 266, 79, 266, 80, 266, 81,
-    266, 82, 266, 83, 266, 84, 266, 85, 266, 86, 266, 87, 266, 88, 266, 89,
-    266, 90, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, 778, 80, 80,
-    86, 522, 87, 67, 515, 77, 67, 515, 77, 68, 515, 77, 82, 522, 68, 74, 522,
-    12411, 12363, 522, 12467, 12467, 266, 12469, 266, 25163, 266, 23383, 266,
-    21452, 266, 12487, 266, 20108, 266, 22810, 266, 35299, 266, 22825, 266,
-    20132, 266, 26144, 266, 28961, 266, 26009, 266, 21069, 266, 24460, 266,
-    20877, 266, 26032, 266, 21021, 266, 32066, 266, 29983, 266, 36009, 266,
-    22768, 266, 21561, 266, 28436, 266, 25237, 266, 25429, 266, 19968, 266,
-    19977, 266, 36938, 266, 24038, 266, 20013, 266, 21491, 266, 25351, 266,
-    36208, 266, 25171, 266, 31105, 266, 31354, 266, 21512, 266, 28288, 266,
-    26377, 266, 26376, 266, 30003, 266, 21106, 266, 21942, 266, 37197, 770,
-    12308, 26412, 12309, 770, 12308, 19977, 12309, 770, 12308, 20108, 12309,
-    770, 12308, 23433, 12309, 770, 12308, 28857, 12309, 770, 12308, 25171,
-    12309, 770, 12308, 30423, 12309, 770, 12308, 21213, 12309, 770, 12308,
-    25943, 12309, 263, 24471, 263, 21487, 256, 20029, 256, 20024, 256, 20033,
-    256, 131362, 256, 20320, 256, 20398, 256, 20411, 256, 20482, 256, 20602,
-    256, 20633, 256, 20711, 256, 20687, 256, 13470, 256, 132666, 256, 20813,
-    256, 20820, 256, 20836, 256, 20855, 256, 132380, 256, 13497, 256, 20839,
-    256, 20877, 256, 132427, 256, 20887, 256, 20900, 256, 20172, 256, 20908,
-    256, 20917, 256, 168415, 256, 20981, 256, 20995, 256, 13535, 256, 21051,
-    256, 21062, 256, 21106, 256, 21111, 256, 13589, 256, 21191, 256, 21193,
-    256, 21220, 256, 21242, 256, 21253, 256, 21254, 256, 21271, 256, 21321,
-    256, 21329, 256, 21338, 256, 21363, 256, 21373, 256, 21375, 256, 21375,
-    256, 21375, 256, 133676, 256, 28784, 256, 21450, 256, 21471, 256, 133987,
-    256, 21483, 256, 21489, 256, 21510, 256, 21662, 256, 21560, 256, 21576,
-    256, 21608, 256, 21666, 256, 21750, 256, 21776, 256, 21843, 256, 21859,
-    256, 21892, 256, 21892, 256, 21913, 256, 21931, 256, 21939, 256, 21954,
-    256, 22294, 256, 22022, 256, 22295, 256, 22097, 256, 22132, 256, 20999,
-    256, 22766, 256, 22478, 256, 22516, 256, 22541, 256, 22411, 256, 22578,
-    256, 22577, 256, 22700, 256, 136420, 256, 22770, 256, 22775, 256, 22790,
-    256, 22810, 256, 22818, 256, 22882, 256, 136872, 256, 136938, 256, 23020,
-    256, 23067, 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076,
-    256, 23304, 256, 23358, 256, 23358, 256, 137672, 256, 23491, 256, 23512,
-    256, 23527, 256, 23539, 256, 138008, 256, 23551, 256, 23558, 256, 24403,
-    256, 23586, 256, 14209, 256, 23648, 256, 23662, 256, 23744, 256, 23693,
-    256, 138724, 256, 23875, 256, 138726, 256, 23918, 256, 23915, 256, 23932,
-    256, 24033, 256, 24034, 256, 14383, 256, 24061, 256, 24104, 256, 24125,
-    256, 24169, 256, 14434, 256, 139651, 256, 14460, 256, 24240, 256, 24243,
-    256, 24246, 256, 24266, 256, 172946, 256, 24318, 256, 140081, 256,
-    140081, 256, 33281, 256, 24354, 256, 24354, 256, 14535, 256, 144056, 256,
-    156122, 256, 24418, 256, 24427, 256, 14563, 256, 24474, 256, 24525, 256,
-    24535, 256, 24569, 256, 24705, 256, 14650, 256, 14620, 256, 24724, 256,
-    141012, 256, 24775, 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256,
-    24954, 256, 24974, 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256,
-    25074, 256, 25078, 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256,
-    25300, 256, 25424, 256, 142092, 256, 25405, 256, 25340, 256, 25448, 256,
-    25475, 256, 25572, 256, 142321, 256, 25634, 256, 25541, 256, 25513, 256,
-    14894, 256, 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256,
-    25935, 256, 25964, 256, 143370, 256, 26083, 256, 26360, 256, 26185, 256,
-    15129, 256, 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256,
-    26368, 256, 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256,
-    26401, 256, 26462, 256, 26451, 256, 144323, 256, 15177, 256, 26618, 256,
-    26501, 256, 26706, 256, 26757, 256, 144493, 256, 26766, 256, 26655, 256,
-    26900, 256, 15261, 256, 26946, 256, 27043, 256, 27114, 256, 27304, 256,
-    145059, 256, 27355, 256, 15384, 256, 27425, 256, 145575, 256, 27476, 256,
-    15438, 256, 27506, 256, 27551, 256, 27578, 256, 27579, 256, 146061, 256,
-    138507, 256, 146170, 256, 27726, 256, 146620, 256, 27839, 256, 27853,
-    256, 27751, 256, 27926, 256, 27966, 256, 28023, 256, 27969, 256, 28009,
-    256, 28024, 256, 28037, 256, 146718, 256, 27956, 256, 28207, 256, 28270,
-    256, 15667, 256, 28363, 256, 28359, 256, 147153, 256, 28153, 256, 28526,
-    256, 147294, 256, 147342, 256, 28614, 256, 28729, 256, 28702, 256, 28699,
-    256, 15766, 256, 28746, 256, 28797, 256, 28791, 256, 28845, 256, 132389,
-    256, 28997, 256, 148067, 256, 29084, 256, 148395, 256, 29224, 256, 29237,
-    256, 29264, 256, 149000, 256, 29312, 256, 29333, 256, 149301, 256,
-    149524, 256, 29562, 256, 29579, 256, 16044, 256, 29605, 256, 16056, 256,
-    16056, 256, 29767, 256, 29788, 256, 29809, 256, 29829, 256, 29898, 256,
-    16155, 256, 29988, 256, 150582, 256, 30014, 256, 150674, 256, 30064, 256,
-    139679, 256, 30224, 256, 151457, 256, 151480, 256, 151620, 256, 16380,
-    256, 16392, 256, 30452, 256, 151795, 256, 151794, 256, 151833, 256,
-    151859, 256, 30494, 256, 30495, 256, 30495, 256, 30538, 256, 16441, 256,
-    30603, 256, 16454, 256, 16534, 256, 152605, 256, 30798, 256, 30860, 256,
-    30924, 256, 16611, 256, 153126, 256, 31062, 256, 153242, 256, 153285,
-    256, 31119, 256, 31211, 256, 16687, 256, 31296, 256, 31306, 256, 31311,
-    256, 153980, 256, 154279, 256, 154279, 256, 31470, 256, 16898, 256,
-    154539, 256, 31686, 256, 31689, 256, 16935, 256, 154752, 256, 31954, 256,
-    17056, 256, 31976, 256, 31971, 256, 32000, 256, 155526, 256, 32099, 256,
-    17153, 256, 32199, 256, 32258, 256, 32325, 256, 17204, 256, 156200, 256,
-    156231, 256, 17241, 256, 156377, 256, 32634, 256, 156478, 256, 32661,
-    256, 32762, 256, 32773, 256, 156890, 256, 156963, 256, 32864, 256,
-    157096, 256, 32880, 256, 144223, 256, 17365, 256, 32946, 256, 33027, 256,
-    17419, 256, 33086, 256, 23221, 256, 157607, 256, 157621, 256, 144275,
-    256, 144284, 256, 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425,
-    256, 33419, 256, 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469,
-    256, 33510, 256, 158524, 256, 33509, 256, 33565, 256, 33635, 256, 33709,
-    256, 33571, 256, 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738,
-    256, 33740, 256, 33756, 256, 158774, 256, 159083, 256, 158933, 256,
-    17707, 256, 34033, 256, 34035, 256, 34070, 256, 160714, 256, 34148, 256,
-    159532, 256, 17757, 256, 17761, 256, 159665, 256, 159954, 256, 17771,
-    256, 34384, 256, 34396, 256, 34407, 256, 34409, 256, 34473, 256, 34440,
-    256, 34574, 256, 34530, 256, 34681, 256, 34600, 256, 34667, 256, 34694,
-    256, 17879, 256, 34785, 256, 34817, 256, 17913, 256, 34912, 256, 34915,
-    256, 161383, 256, 35031, 256, 35038, 256, 17973, 256, 35066, 256, 13499,
-    256, 161966, 256, 162150, 256, 18110, 256, 18119, 256, 35488, 256, 35565,
-    256, 35722, 256, 35925, 256, 162984, 256, 36011, 256, 36033, 256, 36123,
-    256, 36215, 256, 163631, 256, 133124, 256, 36299, 256, 36284, 256, 36336,
-    256, 133342, 256, 36564, 256, 36664, 256, 165330, 256, 165357, 256,
-    37012, 256, 37105, 256, 37137, 256, 165678, 256, 37147, 256, 37432, 256,
-    37591, 256, 37592, 256, 37500, 256, 37881, 256, 37909, 256, 166906, 256,
-    38283, 256, 18837, 256, 38327, 256, 167287, 256, 18918, 256, 38595, 256,
-    23986, 256, 38691, 256, 168261, 256, 168474, 256, 19054, 256, 19062, 256,
-    38880, 256, 168970, 256, 19122, 256, 169110, 256, 38923, 256, 38923, 256,
-    38953, 256, 169398, 256, 39138, 256, 19251, 256, 39209, 256, 39335, 256,
-    39362, 256, 39422, 256, 19406, 256, 170800, 256, 39698, 256, 40000, 256,
-    40189, 256, 19662, 256, 19693, 256, 40295, 256, 172238, 256, 19704, 256,
-    172293, 256, 172558, 256, 172689, 256, 40635, 256, 19798, 256, 40697,
-    256, 40702, 256, 40709, 256, 40719, 256, 40726, 256, 40763, 256, 173568,
+    1602, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1590, 262, 1592,
+    262, 1594, 262, 1646, 262, 1697, 262, 1575, 262, 1576, 262, 1580, 262,
+    1583, 262, 1607, 262, 1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610,
+    262, 1604, 262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262,
+    1589, 262, 1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582,
+    262, 1584, 262, 1590, 262, 1592, 262, 1594, 262, 1576, 262, 1580, 262,
+    1583, 262, 1608, 262, 1586, 262, 1581, 262, 1591, 262, 1610, 262, 1604,
+    262, 1605, 262, 1606, 262, 1587, 262, 1593, 262, 1601, 262, 1589, 262,
+    1602, 262, 1585, 262, 1588, 262, 1578, 262, 1579, 262, 1582, 262, 1584,
+    262, 1590, 262, 1592, 262, 1594, 514, 48, 46, 514, 48, 44, 514, 49, 44,
+    514, 50, 44, 514, 51, 44, 514, 52, 44, 514, 53, 44, 514, 54, 44, 514, 55,
+    44, 514, 56, 44, 514, 57, 44, 770, 40, 65, 41, 770, 40, 66, 41, 770, 40,
+    67, 41, 770, 40, 68, 41, 770, 40, 69, 41, 770, 40, 70, 41, 770, 40, 71,
+    41, 770, 40, 72, 41, 770, 40, 73, 41, 770, 40, 74, 41, 770, 40, 75, 41,
+    770, 40, 76, 41, 770, 40, 77, 41, 770, 40, 78, 41, 770, 40, 79, 41, 770,
+    40, 80, 41, 770, 40, 81, 41, 770, 40, 82, 41, 770, 40, 83, 41, 770, 40,
+    84, 41, 770, 40, 85, 41, 770, 40, 86, 41, 770, 40, 87, 41, 770, 40, 88,
+    41, 770, 40, 89, 41, 770, 40, 90, 41, 770, 12308, 83, 12309, 263, 67,
+    263, 82, 519, 67, 68, 519, 87, 90, 266, 65, 266, 66, 266, 67, 266, 68,
+    266, 69, 266, 70, 266, 71, 266, 72, 266, 73, 266, 74, 266, 75, 266, 76,
+    266, 77, 266, 78, 266, 79, 266, 80, 266, 81, 266, 82, 266, 83, 266, 84,
+    266, 85, 266, 86, 266, 87, 266, 88, 266, 89, 266, 90, 522, 72, 86, 522,
+    77, 86, 522, 83, 68, 522, 83, 83, 778, 80, 80, 86, 522, 87, 67, 515, 77,
+    67, 515, 77, 68, 515, 77, 82, 522, 68, 74, 522, 12411, 12363, 522, 12467,
+    12467, 266, 12469, 266, 25163, 266, 23383, 266, 21452, 266, 12487, 266,
+    20108, 266, 22810, 266, 35299, 266, 22825, 266, 20132, 266, 26144, 266,
+    28961, 266, 26009, 266, 21069, 266, 24460, 266, 20877, 266, 26032, 266,
+    21021, 266, 32066, 266, 29983, 266, 36009, 266, 22768, 266, 21561, 266,
+    28436, 266, 25237, 266, 25429, 266, 19968, 266, 19977, 266, 36938, 266,
+    24038, 266, 20013, 266, 21491, 266, 25351, 266, 36208, 266, 25171, 266,
+    31105, 266, 31354, 266, 21512, 266, 28288, 266, 26377, 266, 26376, 266,
+    30003, 266, 21106, 266, 21942, 266, 37197, 770, 12308, 26412, 12309, 770,
+    12308, 19977, 12309, 770, 12308, 20108, 12309, 770, 12308, 23433, 12309,
+    770, 12308, 28857, 12309, 770, 12308, 25171, 12309, 770, 12308, 30423,
+    12309, 770, 12308, 21213, 12309, 770, 12308, 25943, 12309, 263, 24471,
+    263, 21487, 262, 48, 262, 49, 262, 50, 262, 51, 262, 52, 262, 53, 262,
+    54, 262, 55, 262, 56, 262, 57, 256, 20029, 256, 20024, 256, 20033, 256,
+    131362, 256, 20320, 256, 20398, 256, 20411, 256, 20482, 256, 20602, 256,
+    20633, 256, 20711, 256, 20687, 256, 13470, 256, 132666, 256, 20813, 256,
+    20820, 256, 20836, 256, 20855, 256, 132380, 256, 13497, 256, 20839, 256,
+    20877, 256, 132427, 256, 20887, 256, 20900, 256, 20172, 256, 20908, 256,
+    20917, 256, 168415, 256, 20981, 256, 20995, 256, 13535, 256, 21051, 256,
+    21062, 256, 21106, 256, 21111, 256, 13589, 256, 21191, 256, 21193, 256,
+    21220, 256, 21242, 256, 21253, 256, 21254, 256, 21271, 256, 21321, 256,
+    21329, 256, 21338, 256, 21363, 256, 21373, 256, 21375, 256, 21375, 256,
+    21375, 256, 133676, 256, 28784, 256, 21450, 256, 21471, 256, 133987, 256,
+    21483, 256, 21489, 256, 21510, 256, 21662, 256, 21560, 256, 21576, 256,
+    21608, 256, 21666, 256, 21750, 256, 21776, 256, 21843, 256, 21859, 256,
+    21892, 256, 21892, 256, 21913, 256, 21931, 256, 21939, 256, 21954, 256,
+    22294, 256, 22022, 256, 22295, 256, 22097, 256, 22132, 256, 20999, 256,
+    22766, 256, 22478, 256, 22516, 256, 22541, 256, 22411, 256, 22578, 256,
+    22577, 256, 22700, 256, 136420, 256, 22770, 256, 22775, 256, 22790, 256,
+    22810, 256, 22818, 256, 22882, 256, 136872, 256, 136938, 256, 23020, 256,
+    23067, 256, 23079, 256, 23000, 256, 23142, 256, 14062, 256, 14076, 256,
+    23304, 256, 23358, 256, 23358, 256, 137672, 256, 23491, 256, 23512, 256,
+    23527, 256, 23539, 256, 138008, 256, 23551, 256, 23558, 256, 24403, 256,
+    23586, 256, 14209, 256, 23648, 256, 23662, 256, 23744, 256, 23693, 256,
+    138724, 256, 23875, 256, 138726, 256, 23918, 256, 23915, 256, 23932, 256,
+    24033, 256, 24034, 256, 14383, 256, 24061, 256, 24104, 256, 24125, 256,
+    24169, 256, 14434, 256, 139651, 256, 14460, 256, 24240, 256, 24243, 256,
+    24246, 256, 24266, 256, 172946, 256, 24318, 256, 140081, 256, 140081,
+    256, 33281, 256, 24354, 256, 24354, 256, 14535, 256, 144056, 256, 156122,
+    256, 24418, 256, 24427, 256, 14563, 256, 24474, 256, 24525, 256, 24535,
+    256, 24569, 256, 24705, 256, 14650, 256, 14620, 256, 24724, 256, 141012,
+    256, 24775, 256, 24904, 256, 24908, 256, 24910, 256, 24908, 256, 24954,
+    256, 24974, 256, 25010, 256, 24996, 256, 25007, 256, 25054, 256, 25074,
+    256, 25078, 256, 25104, 256, 25115, 256, 25181, 256, 25265, 256, 25300,
+    256, 25424, 256, 142092, 256, 25405, 256, 25340, 256, 25448, 256, 25475,
+    256, 25572, 256, 142321, 256, 25634, 256, 25541, 256, 25513, 256, 14894,
+    256, 25705, 256, 25726, 256, 25757, 256, 25719, 256, 14956, 256, 25935,
+    256, 25964, 256, 143370, 256, 26083, 256, 26360, 256, 26185, 256, 15129,
+    256, 26257, 256, 15112, 256, 15076, 256, 20882, 256, 20885, 256, 26368,
+    256, 26268, 256, 32941, 256, 17369, 256, 26391, 256, 26395, 256, 26401,
+    256, 26462, 256, 26451, 256, 144323, 256, 15177, 256, 26618, 256, 26501,
+    256, 26706, 256, 26757, 256, 144493, 256, 26766, 256, 26655, 256, 26900,
+    256, 15261, 256, 26946, 256, 27043, 256, 27114, 256, 27304, 256, 145059,
+    256, 27355, 256, 15384, 256, 27425, 256, 145575, 256, 27476, 256, 15438,
+    256, 27506, 256, 27551, 256, 27578, 256, 27579, 256, 146061, 256, 138507,
+    256, 146170, 256, 27726, 256, 146620, 256, 27839, 256, 27853, 256, 27751,
+    256, 27926, 256, 27966, 256, 28023, 256, 27969, 256, 28009, 256, 28024,
+    256, 28037, 256, 146718, 256, 27956, 256, 28207, 256, 28270, 256, 15667,
+    256, 28363, 256, 28359, 256, 147153, 256, 28153, 256, 28526, 256, 147294,
+    256, 147342, 256, 28614, 256, 28729, 256, 28702, 256, 28699, 256, 15766,
+    256, 28746, 256, 28797, 256, 28791, 256, 28845, 256, 132389, 256, 28997,
+    256, 148067, 256, 29084, 256, 148395, 256, 29224, 256, 29237, 256, 29264,
+    256, 149000, 256, 29312, 256, 29333, 256, 149301, 256, 149524, 256,
+    29562, 256, 29579, 256, 16044, 256, 29605, 256, 16056, 256, 16056, 256,
+    29767, 256, 29788, 256, 29809, 256, 29829, 256, 29898, 256, 16155, 256,
+    29988, 256, 150582, 256, 30014, 256, 150674, 256, 30064, 256, 139679,
+    256, 30224, 256, 151457, 256, 151480, 256, 151620, 256, 16380, 256,
+    16392, 256, 30452, 256, 151795, 256, 151794, 256, 151833, 256, 151859,
+    256, 30494, 256, 30495, 256, 30495, 256, 30538, 256, 16441, 256, 30603,
+    256, 16454, 256, 16534, 256, 152605, 256, 30798, 256, 30860, 256, 30924,
+    256, 16611, 256, 153126, 256, 31062, 256, 153242, 256, 153285, 256,
+    31119, 256, 31211, 256, 16687, 256, 31296, 256, 31306, 256, 31311, 256,
+    153980, 256, 154279, 256, 154279, 256, 31470, 256, 16898, 256, 154539,
+    256, 31686, 256, 31689, 256, 16935, 256, 154752, 256, 31954, 256, 17056,
+    256, 31976, 256, 31971, 256, 32000, 256, 155526, 256, 32099, 256, 17153,
+    256, 32199, 256, 32258, 256, 32325, 256, 17204, 256, 156200, 256, 156231,
+    256, 17241, 256, 156377, 256, 32634, 256, 156478, 256, 32661, 256, 32762,
+    256, 32773, 256, 156890, 256, 156963, 256, 32864, 256, 157096, 256,
+    32880, 256, 144223, 256, 17365, 256, 32946, 256, 33027, 256, 17419, 256,
+    33086, 256, 23221, 256, 157607, 256, 157621, 256, 144275, 256, 144284,
+    256, 33281, 256, 33284, 256, 36766, 256, 17515, 256, 33425, 256, 33419,
+    256, 33437, 256, 21171, 256, 33457, 256, 33459, 256, 33469, 256, 33510,
+    256, 158524, 256, 33509, 256, 33565, 256, 33635, 256, 33709, 256, 33571,
+    256, 33725, 256, 33767, 256, 33879, 256, 33619, 256, 33738, 256, 33740,
+    256, 33756, 256, 158774, 256, 159083, 256, 158933, 256, 17707, 256,
+    34033, 256, 34035, 256, 34070, 256, 160714, 256, 34148, 256, 159532, 256,
+    17757, 256, 17761, 256, 159665, 256, 159954, 256, 17771, 256, 34384, 256,
+    34396, 256, 34407, 256, 34409, 256, 34473, 256, 34440, 256, 34574, 256,
+    34530, 256, 34681, 256, 34600, 256, 34667, 256, 34694, 256, 17879, 256,
+    34785, 256, 34817, 256, 17913, 256, 34912, 256, 34915, 256, 161383, 256,
+    35031, 256, 35038, 256, 17973, 256, 35066, 256, 13499, 256, 161966, 256,
+    162150, 256, 18110, 256, 18119, 256, 35488, 256, 35565, 256, 35722, 256,
+    35925, 256, 162984, 256, 36011, 256, 36033, 256, 36123, 256, 36215, 256,
+    163631, 256, 133124, 256, 36299, 256, 36284, 256, 36336, 256, 133342,
+    256, 36564, 256, 36664, 256, 165330, 256, 165357, 256, 37012, 256, 37105,
+    256, 37137, 256, 165678, 256, 37147, 256, 37432, 256, 37591, 256, 37592,
+    256, 37500, 256, 37881, 256, 37909, 256, 166906, 256, 38283, 256, 18837,
+    256, 38327, 256, 167287, 256, 18918, 256, 38595, 256, 23986, 256, 38691,
+    256, 168261, 256, 168474, 256, 19054, 256, 19062, 256, 38880, 256,
+    168970, 256, 19122, 256, 169110, 256, 38923, 256, 38923, 256, 38953, 256,
+    169398, 256, 39138, 256, 19251, 256, 39209, 256, 39335, 256, 39362, 256,
+    39422, 256, 19406, 256, 170800, 256, 39698, 256, 40000, 256, 40189, 256,
+    19662, 256, 19693, 256, 40295, 256, 172238, 256, 19704, 256, 172293, 256,
+    172558, 256, 172689, 256, 40635, 256, 19798, 256, 40697, 256, 40702, 256,
+    40709, 256, 40719, 256, 40726, 256, 40763, 256, 173568,
 };
 
 /* index tables for the decomposition data */
@@ -4353,7 +4402,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
     74, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 80, 0,
-    81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    81, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4368,11 +4417,11 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, 84, 85,
-    86, 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 0, 0, 0, 0, 85, 86,
+    87, 88, 89, 90, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 92, 93, 0, 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4393,7 +4442,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102, 103, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4692,7 +4741,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 };
 
 static const unsigned short decomp_index2[] = {
@@ -5124,802 +5173,821 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6659, 6661, 6663, 6665, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 6667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683,
+    6685, 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707,
+    6709, 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731,
+    6733, 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755,
+    6757, 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779,
+    6781, 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803,
+    6805, 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827,
+    6829, 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851,
+    6853, 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875,
+    6877, 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899,
+    6901, 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923,
+    6925, 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947,
+    6949, 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971,
+    6973, 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995,
+    6997, 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019,
+    7021, 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043,
+    7045, 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067,
+    7069, 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091,
+    7093, 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115,
+    7117, 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139,
+    7141, 7143, 7145, 7147, 7149, 7151, 7153, 7155, 7157, 7159, 7161, 7163,
+    7165, 7167, 7169, 7171, 7173, 7175, 7177, 7179, 7181, 7183, 7185, 7187,
+    7189, 7191, 7193, 7195, 7197, 7199, 7201, 7203, 7205, 7207, 0, 0, 7209,
+    0, 7211, 0, 0, 7213, 7215, 7217, 7219, 7221, 7223, 7225, 7227, 7229,
+    7231, 0, 7233, 0, 7235, 0, 0, 7237, 7239, 0, 0, 0, 7241, 7243, 7245,
+    7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269,
+    7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293,
+    7295, 7297, 7299, 7301, 7303, 7305, 7307, 7309, 7311, 7313, 7315, 7317,
+    7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, 7337, 7339, 7341,
+    7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, 7361, 7363, 7365,
+    7367, 7369, 7371, 7373, 7375, 0, 0, 7377, 7379, 7381, 7383, 7385, 7387,
+    7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, 7409, 7411,
+    7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, 7433, 7435,
+    7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, 7457, 7459,
+    7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, 7481, 7483,
+    7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, 7505, 7507,
+    7509, 7511, 7513, 7515, 7517, 7519, 7521, 7523, 7525, 7527, 7529, 7531,
+    7533, 7535, 7537, 7539, 7541, 7543, 7545, 7547, 7549, 7551, 7553, 7555,
+    7557, 7559, 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579,
+    7581, 7583, 7585, 7587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7589,
+    7592, 7595, 7598, 7602, 7606, 7609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    7612, 7615, 7618, 7621, 7624, 0, 0, 0, 0, 0, 7627, 0, 7630, 7633, 7635,
+    7637, 7639, 7641, 7643, 7645, 7647, 7649, 7651, 7653, 7656, 7659, 7662,
+    7665, 7668, 7671, 7674, 7677, 7680, 7683, 7686, 7689, 0, 7692, 7695,
+    7698, 7701, 7704, 0, 7707, 0, 7710, 7713, 0, 7716, 7719, 0, 7722, 7725,
+    7728, 7731, 7734, 7737, 7740, 7743, 7746, 7749, 7752, 7754, 7756, 7758,
+    7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, 7780, 7782,
+    7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, 7804, 7806,
+    7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, 7828, 7830,
+    7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854,
+    7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, 7876, 7878,
+    7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902,
+    7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 7922, 7924, 7926,
+    7928, 7930, 7932, 7934, 7936, 7938, 7940, 7942, 7944, 7946, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681,
-    6683, 6685, 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705,
-    6707, 6709, 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729,
-    6731, 6733, 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753,
-    6755, 6757, 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777,
-    6779, 6781, 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801,
-    6803, 6805, 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825,
-    6827, 6829, 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849,
-    6851, 6853, 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873,
-    6875, 6877, 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897,
-    6899, 6901, 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921,
-    6923, 6925, 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945,
-    6947, 6949, 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969,
-    6971, 6973, 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993,
-    6995, 6997, 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017,
-    7019, 7021, 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041,
-    7043, 7045, 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065,
-    7067, 7069, 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089,
-    7091, 7093, 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113,
-    7115, 7117, 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137,
-    7139, 7141, 7143, 7145, 7147, 7149, 7151, 7153, 7155, 7157, 7159, 7161,
-    7163, 7165, 7167, 7169, 7171, 7173, 7175, 7177, 7179, 7181, 7183, 7185,
-    7187, 7189, 7191, 7193, 7195, 7197, 7199, 7201, 7203, 7205, 0, 0, 7207,
-    0, 7209, 0, 0, 7211, 7213, 7215, 7217, 7219, 7221, 7223, 7225, 7227,
-    7229, 0, 7231, 0, 7233, 0, 0, 7235, 7237, 0, 0, 0, 7239, 7241, 7243,
-    7245, 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267,
-    7269, 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291,
-    7293, 7295, 7297, 7299, 7301, 7303, 7305, 7307, 7309, 7311, 7313, 7315,
-    7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, 7337, 7339,
-    7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, 7361, 7363,
-    7365, 7367, 7369, 7371, 7373, 0, 0, 7375, 7377, 7379, 7381, 7383, 7385,
-    7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, 7409,
-    7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, 7433,
-    7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, 7457,
-    7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, 7481,
-    7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, 7505,
-    7507, 7509, 7511, 7513, 7515, 7517, 7519, 7521, 7523, 7525, 7527, 7529,
-    7531, 7533, 7535, 7537, 7539, 7541, 7543, 7545, 7547, 7549, 7551, 7553,
-    7555, 7557, 7559, 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577,
-    7579, 7581, 7583, 7585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7587,
-    7590, 7593, 7596, 7600, 7604, 7607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    7610, 7613, 7616, 7619, 7622, 0, 0, 0, 0, 0, 7625, 0, 7628, 7631, 7633,
-    7635, 7637, 7639, 7641, 7643, 7645, 7647, 7649, 7651, 7654, 7657, 7660,
-    7663, 7666, 7669, 7672, 7675, 7678, 7681, 7684, 7687, 0, 7690, 7693,
-    7696, 7699, 7702, 0, 7705, 0, 7708, 7711, 0, 7714, 7717, 0, 7720, 7723,
-    7726, 7729, 7732, 7735, 7738, 7741, 7744, 7747, 7750, 7752, 7754, 7756,
-    7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, 7780,
-    7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, 7804,
-    7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, 7828,
-    7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, 7852,
-    7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, 7876,
-    7878, 7880, 7882, 7884, 7886, 7888, 7890, 7892, 7894, 7896, 7898, 7900,
-    7902, 7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 7920, 7922, 7924,
-    7926, 7928, 7930, 7932, 7934, 7936, 7938, 7940, 7942, 7944, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 7948, 7950, 7952, 7954, 7956, 7958, 7960, 7962, 7964,
+    7966, 7968, 7970, 7972, 7974, 7976, 7978, 7980, 7982, 7984, 7986, 7988,
+    7990, 7992, 7994, 7997, 8000, 8003, 8006, 8009, 8012, 8015, 8018, 8021,
+    8024, 8027, 8030, 8033, 8036, 8039, 8042, 8045, 8048, 8050, 8052, 8054,
+    8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, 8086, 8089,
+    8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, 8122, 8125,
+    8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, 8158, 8161,
+    8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, 8194, 8197,
+    8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, 8230, 8233,
+    8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, 8266, 8269,
+    8272, 8275, 8278, 8281, 8284, 8287, 8290, 8293, 8296, 8299, 8302, 8305,
+    8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8342,
+    8346, 8350, 8354, 8358, 8362, 8365, 8368, 8371, 8374, 8377, 8380, 8383,
+    8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, 8416, 8419,
+    8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, 8452, 8455,
+    8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, 8488, 8491,
+    8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, 8524, 8527,
+    8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, 8560, 8563,
+    8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, 8596, 8599,
+    8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, 8632, 8635,
+    8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, 8668, 8671,
+    8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, 8704, 8707,
+    8710, 8713, 8716, 8719, 8722, 8725, 8728, 8731, 8734, 8737, 8740, 8743,
+    8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, 8779,
+    8782, 8785, 8788, 8792, 8796, 8800, 8803, 8806, 8809, 8812, 8815, 8818,
+    8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, 8851, 8854,
+    8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, 8887, 8890,
+    8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, 8923, 8926,
+    8929, 8932, 8935, 8938, 8941, 8944, 8947, 8950, 8953, 8956, 8959, 8962,
+    8965, 8968, 8971, 8974, 8977, 8980, 8983, 8986, 8989, 8992, 8995, 8998,
+    9001, 9004, 9007, 9010, 9013, 9016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9019, 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051,
+    9055, 9059, 9063, 9067, 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099,
+    9103, 9107, 9111, 9115, 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147,
+    9151, 9155, 9159, 9163, 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195,
+    9199, 9203, 9207, 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243,
+    9247, 9251, 9255, 9259, 9263, 9267, 9271, 0, 0, 9275, 9279, 9283, 9287,
+    9291, 9295, 9299, 9303, 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335,
+    9339, 9343, 9347, 9351, 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383,
+    9387, 9391, 9395, 9399, 9403, 9407, 9411, 9415, 9419, 9423, 9427, 9431,
+    9435, 9439, 9443, 9447, 9451, 9455, 9459, 9463, 9467, 9471, 9475, 9479,
+    9483, 9487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9491, 9495,
+    9499, 9504, 9509, 9514, 9519, 9524, 9529, 9534, 9538, 9557, 9566, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9571, 9573, 9575,
+    9577, 9579, 9581, 9583, 9585, 9587, 9589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9591, 9593, 9595, 9597, 9599, 9601,
+    9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, 9619, 9621, 9623, 9625,
+    9627, 9629, 9631, 0, 0, 9633, 9635, 9637, 9639, 9641, 9643, 9645, 9647,
+    9649, 9651, 9653, 9655, 0, 9657, 9659, 9661, 9663, 9665, 9667, 9669,
+    9671, 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693,
+    0, 9695, 9697, 9699, 9701, 0, 0, 0, 0, 9703, 9706, 9709, 0, 9712, 0,
+    9715, 9718, 9721, 9724, 9727, 9730, 9733, 9736, 9739, 9742, 9745, 9747,
+    9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, 9769, 9771,
+    9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, 9793, 9795,
+    9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, 9817, 9819,
+    9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, 9841, 9843,
+    9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, 9865, 9867,
+    9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, 9889, 9891,
+    9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9909, 9911, 9913, 9915,
+    9917, 9919, 9921, 9923, 9925, 9927, 9929, 9931, 9933, 9935, 9937, 9939,
+    9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963,
+    9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9982, 9985, 9988, 9991,
+    9994, 9997, 10000, 0, 0, 0, 0, 10003, 10005, 10007, 10009, 10011, 10013,
+    10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, 10031, 10033,
+    10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, 10051, 10053,
+    10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, 10071, 10073,
+    10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, 10091, 10093,
+    10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, 10111, 10113,
+    10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, 10131, 10133,
+    10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, 10151, 10153,
+    10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, 10171, 10173,
+    10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, 10191, 10193,
+    10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, 10211, 10213,
+    10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, 10231, 10233,
+    10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, 10251, 10253,
+    10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, 10271, 10273,
+    10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, 10291, 10293,
+    10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 10311, 10313,
+    10315, 10317, 10319, 10321, 10323, 10325, 10327, 10329, 10331, 10333,
+    10335, 10337, 10339, 10341, 10343, 10345, 10347, 10349, 10351, 10353,
+    10355, 10357, 10359, 10361, 10363, 10365, 10367, 10369, 10371, 10373,
+    10375, 10377, 10379, 10381, 0, 0, 0, 10383, 10385, 10387, 10389, 10391,
+    10393, 0, 0, 10395, 10397, 10399, 10401, 10403, 10405, 0, 0, 10407,
+    10409, 10411, 10413, 10415, 10417, 0, 0, 10419, 10421, 10423, 0, 0, 0,
+    10425, 10427, 10429, 10431, 10433, 10435, 10437, 0, 10439, 10441, 10443,
+    10445, 10447, 10449, 10451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 7946, 7948, 7950, 7952, 7954, 7956, 7958, 7960, 7962,
-    7964, 7966, 7968, 7970, 7972, 7974, 7976, 7978, 7980, 7982, 7984, 7986,
-    7988, 7990, 7992, 7995, 7998, 8001, 8004, 8007, 8010, 8013, 8016, 8019,
-    8022, 8025, 8028, 8031, 8034, 8037, 8040, 8043, 8046, 8048, 8050, 8052,
-    8054, 8057, 8060, 8063, 8066, 8069, 8072, 8075, 8078, 8081, 8084, 8087,
-    8090, 8093, 8096, 8099, 8102, 8105, 8108, 8111, 8114, 8117, 8120, 8123,
-    8126, 8129, 8132, 8135, 8138, 8141, 8144, 8147, 8150, 8153, 8156, 8159,
-    8162, 8165, 8168, 8171, 8174, 8177, 8180, 8183, 8186, 8189, 8192, 8195,
-    8198, 8201, 8204, 8207, 8210, 8213, 8216, 8219, 8222, 8225, 8228, 8231,
-    8234, 8237, 8240, 8243, 8246, 8249, 8252, 8255, 8258, 8261, 8264, 8267,
-    8270, 8273, 8276, 8279, 8282, 8285, 8288, 8291, 8294, 8297, 8300, 8303,
-    8306, 8309, 8312, 8315, 8318, 8321, 8324, 8327, 8330, 8333, 8336, 8340,
-    8344, 8348, 8352, 8356, 8360, 8363, 8366, 8369, 8372, 8375, 8378, 8381,
-    8384, 8387, 8390, 8393, 8396, 8399, 8402, 8405, 8408, 8411, 8414, 8417,
-    8420, 8423, 8426, 8429, 8432, 8435, 8438, 8441, 8444, 8447, 8450, 8453,
-    8456, 8459, 8462, 8465, 8468, 8471, 8474, 8477, 8480, 8483, 8486, 8489,
-    8492, 8495, 8498, 8501, 8504, 8507, 8510, 8513, 8516, 8519, 8522, 8525,
-    8528, 8531, 8534, 8537, 8540, 8543, 8546, 8549, 8552, 8555, 8558, 8561,
-    8564, 8567, 8570, 8573, 8576, 8579, 8582, 8585, 8588, 8591, 8594, 8597,
-    8600, 8603, 8606, 8609, 8612, 8615, 8618, 8621, 8624, 8627, 8630, 8633,
-    8636, 8639, 8642, 8645, 8648, 8651, 8654, 8657, 8660, 8663, 8666, 8669,
-    8672, 8675, 8678, 8681, 8684, 8687, 8690, 8693, 8696, 8699, 8702, 8705,
-    8708, 8711, 8714, 8717, 8720, 8723, 8726, 8729, 8732, 8735, 8738, 8741,
-    8744, 8747, 8750, 8753, 8756, 8759, 8762, 8765, 8768, 8771, 8774, 8777,
-    8780, 8783, 8786, 8790, 8794, 8798, 8801, 8804, 8807, 8810, 8813, 8816,
-    8819, 8822, 8825, 8828, 8831, 8834, 8837, 8840, 8843, 8846, 8849, 8852,
-    8855, 8858, 8861, 8864, 8867, 8870, 8873, 8876, 8879, 8882, 8885, 8888,
-    8891, 8894, 8897, 8900, 8903, 8906, 8909, 8912, 8915, 8918, 8921, 8924,
-    8927, 8930, 8933, 8936, 8939, 8942, 8945, 8948, 8951, 8954, 8957, 8960,
-    8963, 8966, 8969, 8972, 8975, 8978, 8981, 8984, 8987, 8990, 8993, 8996,
-    8999, 9002, 9005, 9008, 9011, 9014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9017, 9021, 9025, 9029, 9033, 9037, 9041, 9045, 9049,
-    9053, 9057, 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097,
-    9101, 9105, 9109, 9113, 9117, 9121, 9125, 9129, 9133, 9137, 9141, 9145,
-    9149, 9153, 9157, 9161, 9165, 9169, 9173, 9177, 9181, 9185, 9189, 9193,
-    9197, 9201, 9205, 9209, 9213, 9217, 9221, 9225, 9229, 9233, 9237, 9241,
-    9245, 9249, 9253, 9257, 9261, 9265, 9269, 0, 0, 9273, 9277, 9281, 9285,
-    9289, 9293, 9297, 9301, 9305, 9309, 9313, 9317, 9321, 9325, 9329, 9333,
-    9337, 9341, 9345, 9349, 9353, 9357, 9361, 9365, 9369, 9373, 9377, 9381,
-    9385, 9389, 9393, 9397, 9401, 9405, 9409, 9413, 9417, 9421, 9425, 9429,
-    9433, 9437, 9441, 9445, 9449, 9453, 9457, 9461, 9465, 9469, 9473, 9477,
-    9481, 9485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9489, 9493,
-    9497, 9502, 9507, 9512, 9517, 9522, 9527, 9532, 9536, 9555, 9564, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9569, 9571, 9573,
-    9575, 9577, 9579, 9581, 9583, 9585, 9587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9589, 9591, 9593, 9595, 9597, 9599,
-    9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, 9619, 9621, 9623,
-    9625, 9627, 9629, 0, 0, 9631, 9633, 9635, 9637, 9639, 9641, 9643, 9645,
-    9647, 9649, 9651, 9653, 0, 9655, 9657, 9659, 9661, 9663, 9665, 9667,
-    9669, 9671, 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691,
-    0, 9693, 9695, 9697, 9699, 0, 0, 0, 0, 9701, 9704, 9707, 0, 9710, 0,
-    9713, 9716, 9719, 9722, 9725, 9728, 9731, 9734, 9737, 9740, 9743, 9745,
-    9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, 9769,
-    9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, 9793,
-    9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, 9817,
-    9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, 9841,
-    9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, 9865,
-    9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, 9889,
-    9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9909, 9911, 9913,
-    9915, 9917, 9919, 9921, 9923, 9925, 9927, 9929, 9931, 9933, 9935, 9937,
-    9939, 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961,
-    9963, 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9980, 9983, 9986, 9989,
-    9992, 9995, 9998, 0, 0, 0, 0, 10001, 10003, 10005, 10007, 10009, 10011,
-    10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, 10031,
-    10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, 10051,
-    10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, 10071,
-    10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, 10091,
-    10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, 10111,
-    10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, 10131,
-    10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, 10151,
-    10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, 10171,
-    10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, 10191,
-    10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, 10211,
-    10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, 10231,
-    10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, 10251,
-    10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, 10271,
-    10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, 10291,
-    10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 10311,
-    10313, 10315, 10317, 10319, 10321, 10323, 10325, 10327, 10329, 10331,
-    10333, 10335, 10337, 10339, 10341, 10343, 10345, 10347, 10349, 10351,
-    10353, 10355, 10357, 10359, 10361, 10363, 10365, 10367, 10369, 10371,
-    10373, 10375, 10377, 10379, 0, 0, 0, 10381, 10383, 10385, 10387, 10389,
-    10391, 0, 0, 10393, 10395, 10397, 10399, 10401, 10403, 0, 0, 10405,
-    10407, 10409, 10411, 10413, 10415, 0, 0, 10417, 10419, 10421, 0, 0, 0,
-    10423, 10425, 10427, 10429, 10431, 10433, 10435, 0, 10437, 10439, 10441,
-    10443, 10445, 10447, 10449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 10451, 0, 10454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    10457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 10453, 0, 10456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    10459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10460, 10463, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10462, 10465, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 10466, 10469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 10468, 10471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10472,
-    10475, 0, 10478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10474,
+    10477, 0, 10480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 10481, 10484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 10483, 10486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10489, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 10487, 10490, 10493, 10496, 10499, 10502, 10505, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10492, 10495, 10498, 10501,
+    10504, 10507, 10510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10513,
+    10516, 10519, 10522, 10525, 10528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 10531, 10533, 10535, 10537, 10539, 10541, 10543, 10545, 10547,
+    10549, 10551, 10553, 10555, 10557, 10559, 10561, 10563, 10565, 10567,
+    10569, 10571, 10573, 10575, 10577, 10579, 10581, 10583, 10585, 10587,
+    10589, 10591, 10593, 10595, 10597, 10599, 10601, 10603, 10605, 10607,
+    10609, 10611, 10613, 10615, 10617, 10619, 10621, 10623, 10625, 10627,
+    10629, 10631, 10633, 10635, 10637, 10639, 10641, 10643, 10645, 10647,
+    10649, 10651, 10653, 10655, 10657, 10659, 10661, 10663, 10665, 10667,
+    10669, 10671, 10673, 10675, 10677, 10679, 10681, 10683, 10685, 10687,
+    10689, 10691, 10693, 10695, 10697, 10699, 0, 10701, 10703, 10705, 10707,
+    10709, 10711, 10713, 10715, 10717, 10719, 10721, 10723, 10725, 10727,
+    10729, 10731, 10733, 10735, 10737, 10739, 10741, 10743, 10745, 10747,
+    10749, 10751, 10753, 10755, 10757, 10759, 10761, 10763, 10765, 10767,
+    10769, 10771, 10773, 10775, 10777, 10779, 10781, 10783, 10785, 10787,
+    10789, 10791, 10793, 10795, 10797, 10799, 10801, 10803, 10805, 10807,
+    10809, 10811, 10813, 10815, 10817, 10819, 10821, 10823, 10825, 10827,
+    10829, 10831, 10833, 10835, 10837, 10839, 10841, 0, 10843, 10845, 0, 0,
+    10847, 0, 0, 10849, 10851, 0, 0, 10853, 10855, 10857, 10859, 0, 10861,
+    10863, 10865, 10867, 10869, 10871, 10873, 10875, 10877, 10879, 10881,
+    10883, 0, 10885, 0, 10887, 10889, 10891, 10893, 10895, 10897, 10899, 0,
+    10901, 10903, 10905, 10907, 10909, 10911, 10913, 10915, 10917, 10919,
+    10921, 10923, 10925, 10927, 10929, 10931, 10933, 10935, 10937, 10939,
+    10941, 10943, 10945, 10947, 10949, 10951, 10953, 10955, 10957, 10959,
+    10961, 10963, 10965, 10967, 10969, 10971, 10973, 10975, 10977, 10979,
+    10981, 10983, 10985, 10987, 10989, 10991, 10993, 10995, 10997, 10999,
+    11001, 11003, 11005, 11007, 11009, 11011, 11013, 11015, 11017, 11019,
+    11021, 11023, 11025, 11027, 11029, 0, 11031, 11033, 11035, 11037, 0, 0,
+    11039, 11041, 11043, 11045, 11047, 11049, 11051, 11053, 0, 11055, 11057,
+    11059, 11061, 11063, 11065, 11067, 0, 11069, 11071, 11073, 11075, 11077,
+    11079, 11081, 11083, 11085, 11087, 11089, 11091, 11093, 11095, 11097,
+    11099, 11101, 11103, 11105, 11107, 11109, 11111, 11113, 11115, 11117,
+    11119, 11121, 11123, 0, 11125, 11127, 11129, 11131, 0, 11133, 11135,
+    11137, 11139, 11141, 0, 11143, 0, 0, 0, 11145, 11147, 11149, 11151,
+    11153, 11155, 11157, 0, 11159, 11161, 11163, 11165, 11167, 11169, 11171,
+    11173, 11175, 11177, 11179, 11181, 11183, 11185, 11187, 11189, 11191,
+    11193, 11195, 11197, 11199, 11201, 11203, 11205, 11207, 11209, 11211,
+    11213, 11215, 11217, 11219, 11221, 11223, 11225, 11227, 11229, 11231,
+    11233, 11235, 11237, 11239, 11241, 11243, 11245, 11247, 11249, 11251,
+    11253, 11255, 11257, 11259, 11261, 11263, 11265, 11267, 11269, 11271,
+    11273, 11275, 11277, 11279, 11281, 11283, 11285, 11287, 11289, 11291,
+    11293, 11295, 11297, 11299, 11301, 11303, 11305, 11307, 11309, 11311,
+    11313, 11315, 11317, 11319, 11321, 11323, 11325, 11327, 11329, 11331,
+    11333, 11335, 11337, 11339, 11341, 11343, 11345, 11347, 11349, 11351,
+    11353, 11355, 11357, 11359, 11361, 11363, 11365, 11367, 11369, 11371,
+    11373, 11375, 11377, 11379, 11381, 11383, 11385, 11387, 11389, 11391,
+    11393, 11395, 11397, 11399, 11401, 11403, 11405, 11407, 11409, 11411,
+    11413, 11415, 11417, 11419, 11421, 11423, 11425, 11427, 11429, 11431,
+    11433, 11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, 11451,
+    11453, 11455, 11457, 11459, 11461, 11463, 11465, 11467, 11469, 11471,
+    11473, 11475, 11477, 11479, 11481, 11483, 11485, 11487, 11489, 11491,
+    11493, 11495, 11497, 11499, 11501, 11503, 11505, 11507, 11509, 11511,
+    11513, 11515, 11517, 11519, 11521, 11523, 11525, 11527, 11529, 11531,
+    11533, 11535, 11537, 11539, 11541, 11543, 11545, 11547, 11549, 11551,
+    11553, 11555, 11557, 11559, 11561, 11563, 11565, 11567, 11569, 11571,
+    11573, 11575, 11577, 11579, 11581, 11583, 11585, 11587, 11589, 11591,
+    11593, 11595, 11597, 11599, 11601, 11603, 11605, 11607, 11609, 11611,
+    11613, 11615, 11617, 11619, 11621, 11623, 11625, 11627, 11629, 11631,
+    11633, 11635, 11637, 11639, 11641, 11643, 11645, 11647, 11649, 11651,
+    11653, 11655, 11657, 11659, 11661, 11663, 11665, 11667, 11669, 11671,
+    11673, 11675, 11677, 11679, 11681, 11683, 11685, 11687, 11689, 11691,
+    11693, 11695, 11697, 11699, 11701, 11703, 11705, 11707, 11709, 11711,
+    11713, 11715, 11717, 11719, 11721, 11723, 11725, 11727, 11729, 11731,
+    11733, 11735, 11737, 11739, 11741, 11743, 11745, 11747, 11749, 11751,
+    11753, 11755, 11757, 11759, 11761, 11763, 11765, 11767, 11769, 11771,
+    11773, 11775, 11777, 11779, 11781, 11783, 11785, 11787, 11789, 11791,
+    11793, 11795, 11797, 11799, 11801, 11803, 11805, 11807, 11809, 11811,
+    11813, 11815, 11817, 11819, 11821, 11823, 11825, 11827, 11829, 11831,
+    11833, 11835, 11837, 0, 0, 11839, 11841, 11843, 11845, 11847, 11849,
+    11851, 11853, 11855, 11857, 11859, 11861, 11863, 11865, 11867, 11869,
+    11871, 11873, 11875, 11877, 11879, 11881, 11883, 11885, 11887, 11889,
+    11891, 11893, 11895, 11897, 11899, 11901, 11903, 11905, 11907, 11909,
+    11911, 11913, 11915, 11917, 11919, 11921, 11923, 11925, 11927, 11929,
+    11931, 11933, 11935, 11937, 11939, 11941, 11943, 11945, 11947, 11949,
+    11951, 11953, 11955, 11957, 11959, 11961, 11963, 11965, 11967, 11969,
+    11971, 11973, 11975, 11977, 11979, 11981, 11983, 11985, 11987, 11989,
+    11991, 11993, 11995, 11997, 11999, 12001, 12003, 12005, 12007, 12009,
+    12011, 12013, 12015, 12017, 12019, 12021, 12023, 12025, 12027, 12029,
+    12031, 12033, 12035, 12037, 12039, 12041, 12043, 12045, 12047, 12049,
+    12051, 12053, 12055, 12057, 12059, 12061, 12063, 12065, 12067, 12069,
+    12071, 12073, 12075, 12077, 12079, 12081, 12083, 12085, 12087, 12089,
+    12091, 12093, 12095, 12097, 12099, 12101, 12103, 12105, 12107, 12109,
+    12111, 12113, 12115, 12117, 12119, 12121, 12123, 12125, 12127, 12129,
+    12131, 12133, 12135, 12137, 12139, 12141, 12143, 12145, 12147, 12149,
+    12151, 12153, 12155, 12157, 12159, 12161, 12163, 12165, 12167, 12169,
+    12171, 12173, 12175, 12177, 12179, 12181, 12183, 12185, 12187, 12189,
+    12191, 12193, 12195, 12197, 12199, 12201, 12203, 12205, 12207, 12209,
+    12211, 12213, 12215, 12217, 12219, 12221, 12223, 12225, 12227, 12229,
+    12231, 12233, 12235, 12237, 12239, 12241, 12243, 12245, 12247, 12249,
+    12251, 12253, 12255, 12257, 12259, 12261, 12263, 12265, 12267, 12269,
+    12271, 12273, 12275, 12277, 12279, 12281, 12283, 12285, 12287, 12289,
+    12291, 12293, 12295, 12297, 12299, 12301, 12303, 12305, 12307, 12309,
+    12311, 12313, 12315, 12317, 12319, 12321, 12323, 12325, 12327, 12329,
+    12331, 12333, 12335, 12337, 12339, 12341, 12343, 12345, 12347, 12349,
+    12351, 12353, 12355, 12357, 12359, 12361, 12363, 12365, 12367, 12369,
+    12371, 12373, 12375, 12377, 12379, 12381, 12383, 12385, 12387, 12389,
+    12391, 12393, 12395, 12397, 12399, 12401, 12403, 12405, 12407, 12409,
+    12411, 12413, 12415, 12417, 12419, 12421, 0, 0, 12423, 12425, 12427,
+    12429, 12431, 12433, 12435, 12437, 12439, 12441, 12443, 12445, 12447,
+    12449, 12451, 12453, 12455, 12457, 12459, 12461, 12463, 12465, 12467,
+    12469, 12471, 12473, 12475, 12477, 12479, 12481, 12483, 12485, 12487,
+    12489, 12491, 12493, 12495, 12497, 12499, 12501, 12503, 12505, 12507,
+    12509, 12511, 12513, 12515, 12517, 12519, 12521, 12523, 12525, 12527,
+    12529, 0, 12531, 12533, 12535, 12537, 12539, 12541, 12543, 12545, 12547,
+    12549, 12551, 12553, 12555, 12557, 12559, 12561, 12563, 12565, 12567,
+    12569, 12571, 12573, 12575, 12577, 12579, 12581, 12583, 0, 12585, 12587,
+    0, 12589, 0, 0, 12591, 0, 12593, 12595, 12597, 12599, 12601, 12603,
+    12605, 12607, 12609, 12611, 0, 12613, 12615, 12617, 12619, 0, 12621, 0,
+    12623, 0, 0, 0, 0, 0, 0, 12625, 0, 0, 0, 0, 12627, 0, 12629, 0, 12631, 0,
+    12633, 12635, 12637, 0, 12639, 12641, 0, 12643, 0, 0, 12645, 0, 12647, 0,
+    12649, 0, 12651, 0, 12653, 0, 12655, 12657, 0, 12659, 0, 0, 12661, 12663,
+    12665, 12667, 0, 12669, 12671, 12673, 12675, 12677, 12679, 12681, 0,
+    12683, 12685, 12687, 12689, 0, 12691, 12693, 12695, 12697, 0, 12699, 0,
+    12701, 12703, 12705, 12707, 12709, 12711, 12713, 12715, 12717, 12719, 0,
+    12721, 12723, 12725, 12727, 12729, 12731, 12733, 12735, 12737, 12739,
+    12741, 12743, 12745, 12747, 12749, 12751, 12753, 0, 0, 0, 0, 0, 12755,
+    12757, 12759, 0, 12761, 12763, 12765, 12767, 12769, 0, 12771, 12773,
+    12775, 12777, 12779, 12781, 12783, 12785, 12787, 12789, 12791, 12793,
+    12795, 12797, 12799, 12801, 12803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 12805, 12808, 12811, 12814, 12817, 12820, 12823,
+    12826, 12829, 12832, 12835, 0, 0, 0, 0, 0, 12838, 12842, 12846, 12850,
+    12854, 12858, 12862, 12866, 12870, 12874, 12878, 12882, 12886, 12890,
+    12894, 12898, 12902, 12906, 12910, 12914, 12918, 12922, 12926, 12930,
+    12934, 12938, 12942, 12946, 12948, 12950, 12953, 0, 12956, 12958, 12960,
+    12962, 12964, 12966, 12968, 12970, 12972, 12974, 12976, 12978, 12980,
+    12982, 12984, 12986, 12988, 12990, 12992, 12994, 12996, 12998, 13000,
+    13002, 13004, 13006, 13008, 13011, 13014, 13017, 13020, 13024, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    13027, 13030, 13033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13036, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10508, 10511, 10514, 10517, 10520,
-    10523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10526, 10528, 10530,
-    10532, 10534, 10536, 10538, 10540, 10542, 10544, 10546, 10548, 10550,
-    10552, 10554, 10556, 10558, 10560, 10562, 10564, 10566, 10568, 10570,
-    10572, 10574, 10576, 10578, 10580, 10582, 10584, 10586, 10588, 10590,
-    10592, 10594, 10596, 10598, 10600, 10602, 10604, 10606, 10608, 10610,
-    10612, 10614, 10616, 10618, 10620, 10622, 10624, 10626, 10628, 10630,
-    10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, 10648, 10650,
-    10652, 10654, 10656, 10658, 10660, 10662, 10664, 10666, 10668, 10670,
-    10672, 10674, 10676, 10678, 10680, 10682, 10684, 10686, 10688, 10690,
-    10692, 10694, 0, 10696, 10698, 10700, 10702, 10704, 10706, 10708, 10710,
-    10712, 10714, 10716, 10718, 10720, 10722, 10724, 10726, 10728, 10730,
-    10732, 10734, 10736, 10738, 10740, 10742, 10744, 10746, 10748, 10750,
-    10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770,
-    10772, 10774, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 10790,
-    10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, 10810,
-    10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, 10830,
-    10832, 10834, 10836, 0, 10838, 10840, 0, 0, 10842, 0, 0, 10844, 10846, 0,
-    0, 10848, 10850, 10852, 10854, 0, 10856, 10858, 10860, 10862, 10864,
-    10866, 10868, 10870, 10872, 10874, 10876, 10878, 0, 10880, 0, 10882,
-    10884, 10886, 10888, 10890, 10892, 10894, 0, 10896, 10898, 10900, 10902,
-    10904, 10906, 10908, 10910, 10912, 10914, 10916, 10918, 10920, 10922,
-    10924, 10926, 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942,
-    10944, 10946, 10948, 10950, 10952, 10954, 10956, 10958, 10960, 10962,
-    10964, 10966, 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982,
-    10984, 10986, 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002,
-    11004, 11006, 11008, 11010, 11012, 11014, 11016, 11018, 11020, 11022,
-    11024, 0, 11026, 11028, 11030, 11032, 0, 0, 11034, 11036, 11038, 11040,
-    11042, 11044, 11046, 11048, 0, 11050, 11052, 11054, 11056, 11058, 11060,
-    11062, 0, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080,
-    11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100,
-    11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 11118, 0, 11120,
-    11122, 11124, 11126, 0, 11128, 11130, 11132, 11134, 11136, 0, 11138, 0,
-    0, 0, 11140, 11142, 11144, 11146, 11148, 11150, 11152, 0, 11154, 11156,
-    11158, 11160, 11162, 11164, 11166, 11168, 11170, 11172, 11174, 11176,
-    11178, 11180, 11182, 11184, 11186, 11188, 11190, 11192, 11194, 11196,
-    11198, 11200, 11202, 11204, 11206, 11208, 11210, 11212, 11214, 11216,
-    11218, 11220, 11222, 11224, 11226, 11228, 11230, 11232, 11234, 11236,
-    11238, 11240, 11242, 11244, 11246, 11248, 11250, 11252, 11254, 11256,
-    11258, 11260, 11262, 11264, 11266, 11268, 11270, 11272, 11274, 11276,
-    11278, 11280, 11282, 11284, 11286, 11288, 11290, 11292, 11294, 11296,
-    11298, 11300, 11302, 11304, 11306, 11308, 11310, 11312, 11314, 11316,
-    11318, 11320, 11322, 11324, 11326, 11328, 11330, 11332, 11334, 11336,
-    11338, 11340, 11342, 11344, 11346, 11348, 11350, 11352, 11354, 11356,
-    11358, 11360, 11362, 11364, 11366, 11368, 11370, 11372, 11374, 11376,
-    11378, 11380, 11382, 11384, 11386, 11388, 11390, 11392, 11394, 11396,
-    11398, 11400, 11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416,
-    11418, 11420, 11422, 11424, 11426, 11428, 11430, 11432, 11434, 11436,
-    11438, 11440, 11442, 11444, 11446, 11448, 11450, 11452, 11454, 11456,
-    11458, 11460, 11462, 11464, 11466, 11468, 11470, 11472, 11474, 11476,
-    11478, 11480, 11482, 11484, 11486, 11488, 11490, 11492, 11494, 11496,
-    11498, 11500, 11502, 11504, 11506, 11508, 11510, 11512, 11514, 11516,
-    11518, 11520, 11522, 11524, 11526, 11528, 11530, 11532, 11534, 11536,
-    11538, 11540, 11542, 11544, 11546, 11548, 11550, 11552, 11554, 11556,
-    11558, 11560, 11562, 11564, 11566, 11568, 11570, 11572, 11574, 11576,
-    11578, 11580, 11582, 11584, 11586, 11588, 11590, 11592, 11594, 11596,
-    11598, 11600, 11602, 11604, 11606, 11608, 11610, 11612, 11614, 11616,
-    11618, 11620, 11622, 11624, 11626, 11628, 11630, 11632, 11634, 11636,
-    11638, 11640, 11642, 11644, 11646, 11648, 11650, 11652, 11654, 11656,
-    11658, 11660, 11662, 11664, 11666, 11668, 11670, 11672, 11674, 11676,
-    11678, 11680, 11682, 11684, 11686, 11688, 11690, 11692, 11694, 11696,
-    11698, 11700, 11702, 11704, 11706, 11708, 11710, 11712, 11714, 11716,
-    11718, 11720, 11722, 11724, 11726, 11728, 11730, 11732, 11734, 11736,
-    11738, 11740, 11742, 11744, 11746, 11748, 11750, 11752, 11754, 11756,
-    11758, 11760, 11762, 11764, 11766, 11768, 11770, 11772, 11774, 11776,
-    11778, 11780, 11782, 11784, 11786, 11788, 11790, 11792, 11794, 11796,
-    11798, 11800, 11802, 11804, 11806, 11808, 11810, 11812, 11814, 11816,
-    11818, 11820, 11822, 11824, 11826, 11828, 11830, 11832, 0, 0, 11834,
-    11836, 11838, 11840, 11842, 11844, 11846, 11848, 11850, 11852, 11854,
-    11856, 11858, 11860, 11862, 11864, 11866, 11868, 11870, 11872, 11874,
-    11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894,
-    11896, 11898, 11900, 11902, 11904, 11906, 11908, 11910, 11912, 11914,
-    11916, 11918, 11920, 11922, 11924, 11926, 11928, 11930, 11932, 11934,
-    11936, 11938, 11940, 11942, 11944, 11946, 11948, 11950, 11952, 11954,
-    11956, 11958, 11960, 11962, 11964, 11966, 11968, 11970, 11972, 11974,
-    11976, 11978, 11980, 11982, 11984, 11986, 11988, 11990, 11992, 11994,
-    11996, 11998, 12000, 12002, 12004, 12006, 12008, 12010, 12012, 12014,
-    12016, 12018, 12020, 12022, 12024, 12026, 12028, 12030, 12032, 12034,
-    12036, 12038, 12040, 12042, 12044, 12046, 12048, 12050, 12052, 12054,
-    12056, 12058, 12060, 12062, 12064, 12066, 12068, 12070, 12072, 12074,
-    12076, 12078, 12080, 12082, 12084, 12086, 12088, 12090, 12092, 12094,
-    12096, 12098, 12100, 12102, 12104, 12106, 12108, 12110, 12112, 12114,
-    12116, 12118, 12120, 12122, 12124, 12126, 12128, 12130, 12132, 12134,
-    12136, 12138, 12140, 12142, 12144, 12146, 12148, 12150, 12152, 12154,
-    12156, 12158, 12160, 12162, 12164, 12166, 12168, 12170, 12172, 12174,
-    12176, 12178, 12180, 12182, 12184, 12186, 12188, 12190, 12192, 12194,
-    12196, 12198, 12200, 12202, 12204, 12206, 12208, 12210, 12212, 12214,
-    12216, 12218, 12220, 12222, 12224, 12226, 12228, 12230, 12232, 12234,
-    12236, 12238, 12240, 12242, 12244, 12246, 12248, 12250, 12252, 12254,
-    12256, 12258, 12260, 12262, 12264, 12266, 12268, 12270, 12272, 12274,
-    12276, 12278, 12280, 12282, 12284, 12286, 12288, 12290, 12292, 12294,
-    12296, 12298, 12300, 12302, 12304, 12306, 12308, 12310, 12312, 12314,
-    12316, 12318, 12320, 12322, 12324, 12326, 12328, 12330, 12332, 12334,
-    12336, 12338, 12340, 12342, 12344, 12346, 12348, 12350, 12352, 12354,
-    12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, 12372, 12374,
-    12376, 12378, 12380, 12382, 12384, 12386, 12388, 12390, 12392, 12394,
-    12396, 12398, 12400, 12402, 12404, 12406, 12408, 12410, 12412, 12414,
-    12416, 0, 0, 12418, 12420, 12422, 12424, 12426, 12428, 12430, 12432,
-    12434, 12436, 12438, 12440, 12442, 12444, 12446, 12448, 12450, 12452,
-    12454, 12456, 12458, 12460, 12462, 12464, 12466, 12468, 12470, 12472,
-    12474, 12476, 12478, 12480, 12482, 12484, 12486, 12488, 12490, 12492,
-    12494, 12496, 12498, 12500, 12502, 12504, 12506, 12508, 12510, 12512,
-    12514, 12516, 12518, 12520, 12522, 12524, 0, 12526, 12528, 12530, 12532,
-    12534, 12536, 12538, 12540, 12542, 12544, 12546, 12548, 12550, 12552,
-    12554, 12556, 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572,
-    12574, 12576, 12578, 0, 12580, 12582, 0, 12584, 0, 0, 12586, 0, 12588,
-    12590, 12592, 12594, 12596, 12598, 12600, 12602, 12604, 12606, 0, 12608,
-    12610, 12612, 12614, 0, 12616, 0, 12618, 0, 0, 0, 0, 0, 0, 12620, 0, 0,
-    0, 0, 12622, 0, 12624, 0, 12626, 0, 12628, 12630, 12632, 0, 12634, 12636,
-    0, 12638, 0, 0, 12640, 0, 12642, 0, 12644, 0, 12646, 0, 12648, 0, 12650,
-    12652, 0, 12654, 0, 0, 12656, 12658, 12660, 12662, 0, 12664, 12666,
-    12668, 12670, 12672, 12674, 12676, 0, 12678, 12680, 12682, 12684, 0,
-    12686, 12688, 12690, 12692, 0, 12694, 0, 12696, 12698, 12700, 12702,
-    12704, 12706, 12708, 12710, 12712, 12714, 0, 12716, 12718, 12720, 12722,
-    12724, 12726, 12728, 12730, 12732, 12734, 12736, 12738, 12740, 12742,
-    12744, 12746, 12748, 0, 0, 0, 0, 0, 12750, 12752, 12754, 0, 12756, 12758,
-    12760, 12762, 12764, 0, 12766, 12768, 12770, 12772, 12774, 12776, 12778,
-    12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, 12798, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12800, 12803,
-    12806, 12809, 12812, 12815, 12818, 12821, 12824, 12827, 12830, 0, 0, 0,
-    0, 0, 12833, 12837, 12841, 12845, 12849, 12853, 12857, 12861, 12865,
-    12869, 12873, 12877, 12881, 12885, 12889, 12893, 12897, 12901, 12905,
-    12909, 12913, 12917, 12921, 12925, 12929, 12933, 12937, 12941, 12943,
-    12945, 12948, 0, 12951, 12953, 12955, 12957, 12959, 12961, 12963, 12965,
-    12967, 12969, 12971, 12973, 12975, 12977, 12979, 12981, 12983, 12985,
-    12987, 12989, 12991, 12993, 12995, 12997, 12999, 13001, 13003, 13006,
-    13009, 13012, 13015, 13019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13022, 13025, 13028, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 13031, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13039, 13042, 13045, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 13047, 13049, 13051, 13053, 13055, 13057, 13059,
+    13061, 13063, 13065, 13067, 13069, 13071, 13073, 13075, 13077, 13079,
+    13081, 13083, 13085, 13087, 13089, 13091, 13093, 13095, 13097, 13099,
+    13101, 13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119,
+    13121, 13123, 13125, 13127, 13129, 13131, 13133, 0, 0, 0, 0, 13135,
+    13139, 13143, 13147, 13151, 13155, 13159, 13163, 13167, 0, 0, 0, 0, 0, 0,
+    0, 13171, 13173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13034,
-    13037, 13040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13042, 13044, 13046,
-    13048, 13050, 13052, 13054, 13056, 13058, 13060, 13062, 13064, 13066,
-    13068, 13070, 13072, 13074, 13076, 13078, 13080, 13082, 13084, 13086,
-    13088, 13090, 13092, 13094, 13096, 13098, 13100, 13102, 13104, 13106,
-    13108, 13110, 13112, 13114, 13116, 13118, 13120, 13122, 13124, 13126,
-    13128, 0, 0, 0, 0, 13130, 13134, 13138, 13142, 13146, 13150, 13154,
-    13158, 13162, 0, 0, 0, 0, 0, 0, 0, 13166, 13168, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13170, 13172, 13174, 13176,
-    13178, 13180, 13182, 13184, 13186, 13188, 13190, 13192, 13194, 13196,
-    13198, 13200, 13202, 13204, 13206, 13208, 13210, 13212, 13214, 13216,
-    13218, 13220, 13222, 13224, 13226, 13228, 13230, 13232, 13234, 13236,
-    13238, 13240, 13242, 13244, 13246, 13248, 13250, 13252, 13254, 13256,
-    13258, 13260, 13262, 13264, 13266, 13268, 13270, 13272, 13274, 13276,
-    13278, 13280, 13282, 13284, 13286, 13288, 13290, 13292, 13294, 13296,
-    13298, 13300, 13302, 13304, 13306, 13308, 13310, 13312, 13314, 13316,
-    13318, 13320, 13322, 13324, 13326, 13328, 13330, 13332, 13334, 13336,
-    13338, 13340, 13342, 13344, 13346, 13348, 13350, 13352, 13354, 13356,
-    13358, 13360, 13362, 13364, 13366, 13368, 13370, 13372, 13374, 13376,
-    13378, 13380, 13382, 13384, 13386, 13388, 13390, 13392, 13394, 13396,
-    13398, 13400, 13402, 13404, 13406, 13408, 13410, 13412, 13414, 13416,
-    13418, 13420, 13422, 13424, 13426, 13428, 13430, 13432, 13434, 13436,
-    13438, 13440, 13442, 13444, 13446, 13448, 13450, 13452, 13454, 13456,
-    13458, 13460, 13462, 13464, 13466, 13468, 13470, 13472, 13474, 13476,
-    13478, 13480, 13482, 13484, 13486, 13488, 13490, 13492, 13494, 13496,
-    13498, 13500, 13502, 13504, 13506, 13508, 13510, 13512, 13514, 13516,
-    13518, 13520, 13522, 13524, 13526, 13528, 13530, 13532, 13534, 13536,
-    13538, 13540, 13542, 13544, 13546, 13548, 13550, 13552, 13554, 13556,
-    13558, 13560, 13562, 13564, 13566, 13568, 13570, 13572, 13574, 13576,
-    13578, 13580, 13582, 13584, 13586, 13588, 13590, 13592, 13594, 13596,
-    13598, 13600, 13602, 13604, 13606, 13608, 13610, 13612, 13614, 13616,
-    13618, 13620, 13622, 13624, 13626, 13628, 13630, 13632, 13634, 13636,
-    13638, 13640, 13642, 13644, 13646, 13648, 13650, 13652, 13654, 13656,
-    13658, 13660, 13662, 13664, 13666, 13668, 13670, 13672, 13674, 13676,
-    13678, 13680, 13682, 13684, 13686, 13688, 13690, 13692, 13694, 13696,
-    13698, 13700, 13702, 13704, 13706, 13708, 13710, 13712, 13714, 13716,
-    13718, 13720, 13722, 13724, 13726, 13728, 13730, 13732, 13734, 13736,
-    13738, 13740, 13742, 13744, 13746, 13748, 13750, 13752, 13754, 13756,
-    13758, 13760, 13762, 13764, 13766, 13768, 13770, 13772, 13774, 13776,
-    13778, 13780, 13782, 13784, 13786, 13788, 13790, 13792, 13794, 13796,
-    13798, 13800, 13802, 13804, 13806, 13808, 13810, 13812, 13814, 13816,
-    13818, 13820, 13822, 13824, 13826, 13828, 13830, 13832, 13834, 13836,
-    13838, 13840, 13842, 13844, 13846, 13848, 13850, 13852, 13854, 13856,
-    13858, 13860, 13862, 13864, 13866, 13868, 13870, 13872, 13874, 13876,
-    13878, 13880, 13882, 13884, 13886, 13888, 13890, 13892, 13894, 13896,
-    13898, 13900, 13902, 13904, 13906, 13908, 13910, 13912, 13914, 13916,
-    13918, 13920, 13922, 13924, 13926, 13928, 13930, 13932, 13934, 13936,
-    13938, 13940, 13942, 13944, 13946, 13948, 13950, 13952, 13954, 13956,
-    13958, 13960, 13962, 13964, 13966, 13968, 13970, 13972, 13974, 13976,
-    13978, 13980, 13982, 13984, 13986, 13988, 13990, 13992, 13994, 13996,
-    13998, 14000, 14002, 14004, 14006, 14008, 14010, 14012, 14014, 14016,
-    14018, 14020, 14022, 14024, 14026, 14028, 14030, 14032, 14034, 14036,
-    14038, 14040, 14042, 14044, 14046, 14048, 14050, 14052, 14054, 14056,
-    14058, 14060, 14062, 14064, 14066, 14068, 14070, 14072, 14074, 14076,
-    14078, 14080, 14082, 14084, 14086, 14088, 14090, 14092, 14094, 14096,
-    14098, 14100, 14102, 14104, 14106, 14108, 14110, 14112, 14114, 14116,
-    14118, 14120, 14122, 14124, 14126, 14128, 14130, 14132, 14134, 14136,
-    14138, 14140, 14142, 14144, 14146, 14148, 14150, 14152, 14154, 14156,
-    14158, 14160, 14162, 14164, 14166, 14168, 14170, 14172, 14174, 14176,
-    14178, 14180, 14182, 14184, 14186, 14188, 14190, 14192, 14194, 14196,
-    14198, 14200, 14202, 14204, 14206, 14208, 14210, 14212, 14214, 14216,
-    14218, 14220, 14222, 14224, 14226, 14228, 14230, 14232, 14234, 14236,
-    14238, 14240, 14242, 14244, 14246, 14248, 14250, 14252, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13175, 13177,
+    13179, 13181, 13183, 13185, 13187, 13189, 13191, 13193, 0, 0, 0, 0, 0, 0,
+    13195, 13197, 13199, 13201, 13203, 13205, 13207, 13209, 13211, 13213,
+    13215, 13217, 13219, 13221, 13223, 13225, 13227, 13229, 13231, 13233,
+    13235, 13237, 13239, 13241, 13243, 13245, 13247, 13249, 13251, 13253,
+    13255, 13257, 13259, 13261, 13263, 13265, 13267, 13269, 13271, 13273,
+    13275, 13277, 13279, 13281, 13283, 13285, 13287, 13289, 13291, 13293,
+    13295, 13297, 13299, 13301, 13303, 13305, 13307, 13309, 13311, 13313,
+    13315, 13317, 13319, 13321, 13323, 13325, 13327, 13329, 13331, 13333,
+    13335, 13337, 13339, 13341, 13343, 13345, 13347, 13349, 13351, 13353,
+    13355, 13357, 13359, 13361, 13363, 13365, 13367, 13369, 13371, 13373,
+    13375, 13377, 13379, 13381, 13383, 13385, 13387, 13389, 13391, 13393,
+    13395, 13397, 13399, 13401, 13403, 13405, 13407, 13409, 13411, 13413,
+    13415, 13417, 13419, 13421, 13423, 13425, 13427, 13429, 13431, 13433,
+    13435, 13437, 13439, 13441, 13443, 13445, 13447, 13449, 13451, 13453,
+    13455, 13457, 13459, 13461, 13463, 13465, 13467, 13469, 13471, 13473,
+    13475, 13477, 13479, 13481, 13483, 13485, 13487, 13489, 13491, 13493,
+    13495, 13497, 13499, 13501, 13503, 13505, 13507, 13509, 13511, 13513,
+    13515, 13517, 13519, 13521, 13523, 13525, 13527, 13529, 13531, 13533,
+    13535, 13537, 13539, 13541, 13543, 13545, 13547, 13549, 13551, 13553,
+    13555, 13557, 13559, 13561, 13563, 13565, 13567, 13569, 13571, 13573,
+    13575, 13577, 13579, 13581, 13583, 13585, 13587, 13589, 13591, 13593,
+    13595, 13597, 13599, 13601, 13603, 13605, 13607, 13609, 13611, 13613,
+    13615, 13617, 13619, 13621, 13623, 13625, 13627, 13629, 13631, 13633,
+    13635, 13637, 13639, 13641, 13643, 13645, 13647, 13649, 13651, 13653,
+    13655, 13657, 13659, 13661, 13663, 13665, 13667, 13669, 13671, 13673,
+    13675, 13677, 13679, 13681, 13683, 13685, 13687, 13689, 13691, 13693,
+    13695, 13697, 13699, 13701, 13703, 13705, 13707, 13709, 13711, 13713,
+    13715, 13717, 13719, 13721, 13723, 13725, 13727, 13729, 13731, 13733,
+    13735, 13737, 13739, 13741, 13743, 13745, 13747, 13749, 13751, 13753,
+    13755, 13757, 13759, 13761, 13763, 13765, 13767, 13769, 13771, 13773,
+    13775, 13777, 13779, 13781, 13783, 13785, 13787, 13789, 13791, 13793,
+    13795, 13797, 13799, 13801, 13803, 13805, 13807, 13809, 13811, 13813,
+    13815, 13817, 13819, 13821, 13823, 13825, 13827, 13829, 13831, 13833,
+    13835, 13837, 13839, 13841, 13843, 13845, 13847, 13849, 13851, 13853,
+    13855, 13857, 13859, 13861, 13863, 13865, 13867, 13869, 13871, 13873,
+    13875, 13877, 13879, 13881, 13883, 13885, 13887, 13889, 13891, 13893,
+    13895, 13897, 13899, 13901, 13903, 13905, 13907, 13909, 13911, 13913,
+    13915, 13917, 13919, 13921, 13923, 13925, 13927, 13929, 13931, 13933,
+    13935, 13937, 13939, 13941, 13943, 13945, 13947, 13949, 13951, 13953,
+    13955, 13957, 13959, 13961, 13963, 13965, 13967, 13969, 13971, 13973,
+    13975, 13977, 13979, 13981, 13983, 13985, 13987, 13989, 13991, 13993,
+    13995, 13997, 13999, 14001, 14003, 14005, 14007, 14009, 14011, 14013,
+    14015, 14017, 14019, 14021, 14023, 14025, 14027, 14029, 14031, 14033,
+    14035, 14037, 14039, 14041, 14043, 14045, 14047, 14049, 14051, 14053,
+    14055, 14057, 14059, 14061, 14063, 14065, 14067, 14069, 14071, 14073,
+    14075, 14077, 14079, 14081, 14083, 14085, 14087, 14089, 14091, 14093,
+    14095, 14097, 14099, 14101, 14103, 14105, 14107, 14109, 14111, 14113,
+    14115, 14117, 14119, 14121, 14123, 14125, 14127, 14129, 14131, 14133,
+    14135, 14137, 14139, 14141, 14143, 14145, 14147, 14149, 14151, 14153,
+    14155, 14157, 14159, 14161, 14163, 14165, 14167, 14169, 14171, 14173,
+    14175, 14177, 14179, 14181, 14183, 14185, 14187, 14189, 14191, 14193,
+    14195, 14197, 14199, 14201, 14203, 14205, 14207, 14209, 14211, 14213,
+    14215, 14217, 14219, 14221, 14223, 14225, 14227, 14229, 14231, 14233,
+    14235, 14237, 14239, 14241, 14243, 14245, 14247, 14249, 14251, 14253,
+    14255, 14257, 14259, 14261, 14263, 14265, 14267, 14269, 14271, 14273,
+    14275, 14277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0,
 };
 
 /* NFC pairs */
 #define COMP_SHIFT 2
 static const unsigned short comp_index[] = {
     0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,
-    6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 13, 0, 0,
-    0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    19, 20, 0, 21, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29,
-    30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 32, 33, 34, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39, 0,
-    40, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 46, 47, 0, 48, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
-    51, 52, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 57, 58, 59, 0,
-    0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    63, 64, 65, 0, 66, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 0,
-    74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 77, 0, 78, 79, 80, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 85,
-    0, 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 89, 90, 91, 92, 93, 0, 0,
-    0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 0, 105, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 107, 108, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 112, 113,
-    114, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, 121,
-    122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, 125, 0, 0, 0, 0,
-    0, 0, 0, 0, 126, 127, 128, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139,
-    140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 144, 145, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    148, 149, 150, 151, 152, 153, 154, 0, 0, 0, 0, 0, 0, 0, 0, 155, 156, 157,
-    158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 167, 168, 0, 0, 0, 0, 0, 0,
-    0, 0, 169, 0, 0, 170, 171, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175,
-    176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 179, 180, 181, 182,
-    183, 184, 185, 0, 0, 0, 0, 0, 0, 0, 0, 186, 187, 188, 189, 190, 191, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 194, 195, 196, 197, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 201, 202,
-    203, 204, 205, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 208, 0, 209,
-    210, 211, 0, 0, 0, 0, 0, 0, 0, 0, 212, 213, 214, 215, 216, 217, 218, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    221, 222, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 227, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 230, 231, 232, 0, 233, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 235,
-    0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 242, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    244, 245, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 249, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 255, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0,
-    259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262,
-    263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 265, 266, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 270, 271, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282,
-    283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 297, 298, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    301, 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 305, 306, 0, 307,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 322, 0, 0,
-    323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 330,
-    331, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    336, 337, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341,
-    0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 346, 0,
-    0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0,
-    354, 355, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 361, 362, 363, 0, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0,
-    0, 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 370, 0,
-    0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 379, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 381, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 398, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 402, 403, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 407, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4,
+    5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27,
+    28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36,
+    37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    49, 0, 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57,
+    58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 63, 64, 65, 0, 66, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 71,
+    72, 73, 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 0, 91,
+    92, 93, 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
+    104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 107, 108, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 111, 112, 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 117,
+    118, 119, 120, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0,
+    124, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 127, 128, 0, 129, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0, 147, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166,
+    167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    177, 178, 179, 180, 0, 181, 182, 183, 0, 0, 0, 0, 0, 0, 0, 0, 184, 185,
+    186, 187, 188, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 191, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, 195, 196, 197, 198, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 210, 211,
+    212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226,
+    227, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0,
+    233, 0, 0, 0, 0, 0, 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0,
+    0, 0, 0, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
+    249, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 252, 253, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 260, 261, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266,
+    267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 273, 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 278, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282,
+    283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    288, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306,
+    307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 311, 0, 312, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 327,
+    0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0,
+    0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0,
+    342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    349, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0,
+    0, 0, 354, 355, 356, 0, 357, 0, 0, 358, 359, 0, 0, 0, 0, 0, 0, 0, 360, 0,
+    0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 363, 364, 0, 0,
+    365, 0, 0, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0,
+    0, 0, 0, 370, 371, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, 376, 377, 378, 0, 0,
+    379, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0,
+    0, 0, 383, 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0,
+    0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0,
+    0, 0, 0, 0, 0, 389, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 393, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    395, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 399, 400, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 404, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 413, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428,
-    429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 461, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0,
-    0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0,
-    0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0,
-    0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0,
-    0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0,
-    0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 503,
-    0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0,
-    0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0,
-    515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0,
-    0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0,
-    0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0,
-    0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0,
-    0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 0, 0,
-    0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 558, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    656,
+    0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 423, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 456, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 477, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0,
+    0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0,
+    0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 495,
+    0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0,
+    0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0,
+    0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0,
+    0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0,
+    530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 532, 533, 0, 0, 0, 0, 0,
+    534, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0,
+    0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0,
+    0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0,
+    0, 0, 0, 0, 0, 0, 546, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0,
+    549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0,
+    0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0,
+    0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 577, 578, 0, 0, 0, 0, 0, 579,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681,
 };
 
 static const unsigned int comp_data[] = {
-    0, 0, 0, 0, 0, 0, 0, 8814, 0, 8800, 0, 0, 0, 0, 0, 8815, 0, 0, 192, 193,
+    0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 0, 0, 192, 193,
     194, 195, 256, 258, 550, 196, 7842, 197, 0, 461, 512, 514, 0, 0, 0, 7840,
-    0, 7680, 0, 0, 260, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0,
-    0, 0, 0, 262, 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 199, 0,
-    0, 7690, 0, 0, 0, 0, 270, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0,
-    0, 0, 200, 201, 202, 7868, 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518,
-    0, 0, 0, 7864, 0, 0, 0, 552, 280, 7704, 0, 7706, 0, 0, 7710, 0, 0, 0, 0,
-    500, 284, 0, 7712, 286, 288, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 290, 0, 0,
-    292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 7716, 0, 0, 0, 7720, 0, 0,
-    7722, 0, 0, 0, 0, 0, 204, 205, 206, 296, 298, 300, 304, 207, 7880, 0, 0,
-    463, 520, 522, 0, 0, 0, 7882, 302, 0, 0, 7724, 0, 0, 308, 0, 0, 0, 0,
-    7728, 0, 488, 0, 0, 0, 0, 0, 7730, 0, 0, 0, 310, 7732, 0, 0, 0, 0, 313,
-    0, 0, 0, 0, 0, 317, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0,
-    0, 7742, 7744, 0, 0, 0, 0, 0, 0, 7746, 504, 323, 0, 209, 0, 0, 7748, 0,
-    0, 0, 0, 327, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, 0, 0, 0, 210,
-    211, 212, 213, 332, 334, 558, 214, 7886, 0, 336, 465, 524, 526, 0, 0,
-    416, 7884, 490, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 340,
-    7768, 0, 0, 0, 0, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 7774, 0, 0,
-    0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, 536, 350,
-    0, 0, 7786, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 7788, 0, 0, 538, 354, 0,
-    7792, 0, 0, 7790, 0, 0, 0, 217, 218, 219, 360, 362, 364, 0, 220, 7910,
+    0, 7680, 0, 0, 260, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262,
+    264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0,
+    270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 0, 0, 0,
+    200, 201, 202, 7868, 274, 276, 278, 203, 7866, 0, 0, 282, 516, 518, 0, 0,
+    0, 7864, 0, 0, 0, 552, 280, 7704, 0, 7706, 0, 0, 0, 7710, 0, 500, 284, 0,
+    7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714,
+    7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 0, 0,
+    204, 205, 206, 296, 298, 300, 304, 207, 7880, 0, 0, 463, 520, 522, 0, 0,
+    0, 7882, 0, 0, 0, 0, 302, 0, 0, 7724, 0, 0, 0, 308, 0, 7728, 0, 0, 0, 0,
+    0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0,
+    317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0,
+    0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 0, 504, 323, 0, 209, 0, 0, 7748,
+    0, 0, 0, 0, 327, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, 0, 0, 0, 0,
+    210, 211, 212, 213, 332, 334, 558, 214, 7886, 0, 336, 465, 524, 526, 0,
+    0, 416, 7884, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0,
+    340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0,
+    0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0,
+    536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0,
+    7792, 0, 0, 7790, 0, 0, 0, 0, 217, 218, 219, 360, 362, 364, 0, 220, 7910,
     366, 368, 467, 532, 534, 0, 0, 431, 7908, 7794, 0, 0, 0, 370, 7798, 0,
-    7796, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 7808, 7810, 372, 0, 0, 0, 7814,
-    7812, 0, 7816, 0, 0, 7818, 7820, 0, 0, 7922, 221, 374, 7928, 562, 0,
-    7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 0, 0, 0, 377, 7824, 0, 0, 0,
-    379, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 7826, 7828, 0, 0, 0, 224, 225, 226,
-    227, 257, 259, 551, 228, 7843, 229, 0, 462, 513, 515, 0, 0, 0, 7841, 0,
-    7681, 0, 0, 261, 0, 7683, 0, 0, 0, 0, 0, 0, 7685, 7687, 0, 0, 0, 0, 263,
-    265, 0, 0, 0, 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 7691, 0, 0, 0, 0, 271,
-    0, 0, 0, 0, 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 0, 0, 0, 232,
-    233, 234, 7869, 275, 277, 279, 235, 7867, 0, 0, 283, 517, 519, 0, 0, 0,
-    7865, 0, 0, 0, 553, 281, 7705, 0, 7707, 0, 0, 7711, 0, 0, 0, 0, 501, 285,
-    0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, 291, 0, 0, 293, 0, 0, 0, 7715,
+    7796, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812,
+    0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0,
+    7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0,
+    0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 224, 225, 226, 227, 257, 259, 551,
+    228, 7843, 229, 0, 462, 513, 515, 0, 0, 0, 7841, 0, 7681, 0, 0, 261, 0,
+    0, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0,
+    267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0,
+    0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 232, 233, 234, 7869, 275,
+    277, 279, 235, 7867, 0, 0, 283, 517, 519, 0, 0, 0, 7865, 0, 0, 0, 553,
+    281, 7705, 0, 7707, 0, 0, 0, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287,
+    289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 0, 0, 293, 0, 0, 0, 7715,
     7719, 0, 0, 0, 543, 0, 0, 0, 0, 0, 7717, 0, 0, 0, 7721, 0, 0, 7723, 0,
-    7830, 0, 0, 0, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464,
-    521, 523, 0, 0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 309, 0, 0, 0,
-    0, 496, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 489, 0, 7731, 0, 0, 0, 311, 0, 0,
-    0, 0, 7733, 0, 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316,
-    0, 7741, 0, 0, 7739, 0, 0, 0, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0,
-    0, 0, 0, 505, 324, 0, 241, 0, 0, 7749, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0,
-    7751, 0, 0, 0, 326, 0, 7755, 0, 0, 7753, 0, 0, 0, 242, 243, 244, 245,
-    333, 335, 559, 246, 7887, 0, 337, 466, 525, 527, 0, 0, 417, 7885, 0, 0,
-    0, 0, 491, 0, 0, 0, 0, 7765, 7767, 0, 0, 0, 0, 341, 0, 0, 0, 0, 7769, 0,
-    0, 0, 0, 345, 529, 531, 0, 0, 0, 7771, 0, 0, 0, 343, 0, 0, 0, 0, 7775, 0,
-    0, 0, 0, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 7779,
-    0, 0, 537, 351, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 7789, 0, 0, 539, 355,
-    0, 7793, 0, 0, 7791, 0, 0, 0, 249, 250, 251, 361, 363, 365, 0, 252, 7911,
-    367, 369, 468, 533, 535, 0, 0, 432, 7909, 7795, 0, 0, 0, 371, 7799, 0,
-    7797, 0, 0, 0, 7805, 0, 7807, 0, 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815,
-    7813, 0, 7832, 0, 0, 0, 7817, 0, 0, 7819, 7821, 0, 0, 7923, 253, 375,
-    7929, 563, 0, 7823, 255, 7927, 7833, 0, 0, 0, 7925, 0, 378, 7825, 0, 0,
-    0, 380, 0, 0, 0, 0, 382, 0, 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 8173, 901,
-    0, 0, 8129, 0, 7846, 7844, 0, 7850, 7848, 0, 0, 0, 0, 0, 478, 0, 0, 506,
-    0, 0, 0, 0, 0, 508, 0, 0, 482, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0,
-    7876, 0, 0, 0, 0, 7874, 0, 0, 7726, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0,
-    0, 0, 0, 7892, 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 554, 0, 0, 510,
-    0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 7847, 7845, 0, 7851,
-    7849, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0,
-    7689, 0, 0, 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 7727, 0,
-    0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 7757, 0, 0, 557, 0,
-    0, 7759, 0, 0, 555, 0, 0, 511, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, 0,
-    474, 0, 0, 7856, 7854, 0, 7860, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861,
-    0, 0, 0, 0, 7859, 0, 7700, 7702, 0, 0, 0, 0, 7701, 7703, 7760, 7762, 0,
-    0, 0, 0, 7761, 7763, 0, 0, 7780, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 7783,
-    0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 7803, 0, 0, 0,
-    0, 7835, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, 0, 0, 7902, 0, 0, 0, 0,
-    7906, 7901, 7899, 0, 7905, 7903, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914,
-    7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 7920, 7915, 7913, 0, 7919,
-    7917, 0, 0, 0, 0, 7921, 0, 0, 0, 494, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0,
-    480, 0, 0, 0, 0, 0, 481, 0, 0, 7708, 0, 0, 0, 0, 0, 7709, 560, 0, 0, 0,
-    0, 0, 561, 0, 0, 0, 0, 495, 0, 0, 8122, 902, 0, 0, 8121, 8120, 7944,
-    7945, 0, 0, 0, 0, 0, 8124, 8136, 904, 0, 0, 0, 0, 7960, 7961, 0, 0, 8138,
-    905, 7976, 7977, 0, 0, 0, 0, 0, 8140, 8154, 906, 0, 0, 8153, 8152, 0,
-    938, 0, 0, 7992, 7993, 0, 0, 8184, 908, 8008, 8009, 0, 0, 0, 0, 0, 8172,
-    0, 0, 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 8186,
-    911, 0, 0, 0, 0, 8040, 8041, 0, 8188, 0, 0, 0, 0, 0, 8116, 0, 8132, 0, 0,
-    0, 0, 8048, 940, 0, 0, 8113, 8112, 7936, 7937, 0, 0, 0, 0, 8118, 8115,
-    8050, 941, 0, 0, 0, 0, 7952, 7953, 0, 0, 8052, 942, 7968, 7969, 0, 0, 0,
-    0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 7984, 7985,
-    8150, 0, 0, 0, 0, 0, 8056, 972, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0,
-    8058, 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166,
-    0, 8060, 974, 0, 0, 0, 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 8146, 912,
-    0, 0, 8151, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0,
-    0, 0, 0, 0, 980, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 1027, 1024, 0,
-    0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, 0, 0, 0, 1246, 0,
-    0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 1036, 0, 0, 0, 1254, 0,
-    0, 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 1272, 0,
-    1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 1107, 1104, 0, 0, 0, 0, 1239, 0,
-    1105, 0, 0, 0, 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 1117, 0, 0, 0,
-    1251, 1081, 0, 1253, 0, 0, 0, 1116, 0, 0, 0, 1255, 0, 0, 1263, 1118, 0,
-    1265, 0, 0, 1267, 0, 0, 1269, 0, 0, 0, 0, 0, 1273, 0, 1261, 0, 0, 0, 0,
-    0, 1111, 0, 0, 1142, 0, 1143, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0,
-    1258, 0, 0, 0, 0, 0, 1259, 1570, 1571, 1573, 0, 0, 0, 0, 1572, 0, 1574,
-    0, 0, 0, 0, 0, 1730, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 2345, 0,
-    2353, 0, 0, 0, 0, 0, 2356, 0, 0, 2507, 2508, 0, 0, 2891, 2888, 2892, 0,
-    0, 0, 2964, 0, 0, 0, 0, 3018, 3020, 0, 0, 0, 0, 3019, 0, 0, 0, 3144, 0,
-    0, 0, 3264, 3274, 3271, 3272, 0, 0, 0, 0, 3275, 0, 0, 0, 3402, 3404, 0,
-    0, 0, 0, 3403, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 4134, 0, 0, 0,
-    0, 0, 0, 6918, 0, 6920, 0, 0, 0, 0, 0, 6922, 0, 6924, 0, 0, 0, 0, 0,
-    6926, 0, 6930, 0, 0, 0, 0, 0, 6971, 0, 6973, 0, 0, 0, 0, 0, 6976, 0,
-    6977, 0, 0, 0, 0, 0, 6979, 0, 0, 7736, 0, 7737, 0, 0, 0, 0, 0, 7772, 0,
-    7773, 0, 0, 0, 7784, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, 0, 0,
-    7853, 0, 0, 7863, 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 7896, 0, 0, 0, 0,
-    0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 7939, 7941, 0, 0, 7943,
-    8065, 0, 0, 0, 0, 0, 8066, 0, 8067, 0, 0, 0, 0, 0, 8068, 0, 8069, 0, 0,
-    0, 0, 0, 8070, 0, 8071, 0, 0, 0, 0, 7946, 7948, 0, 0, 7950, 8072, 7947,
-    7949, 0, 0, 7951, 8073, 0, 0, 0, 0, 0, 8074, 0, 8075, 0, 0, 0, 0, 0,
-    8076, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 8079, 0, 0, 0, 0, 7954, 7956,
-    7955, 7957, 0, 0, 0, 0, 7962, 7964, 7963, 7965, 0, 0, 0, 0, 7970, 7972,
-    0, 0, 7974, 8080, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0,
-    8083, 0, 0, 0, 0, 0, 8084, 0, 8085, 0, 0, 0, 0, 0, 8086, 0, 8087, 0, 0,
-    0, 0, 7978, 7980, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 7983, 8089, 0, 0,
-    0, 0, 0, 8090, 0, 8091, 0, 0, 0, 0, 0, 8092, 0, 8093, 0, 0, 0, 0, 0,
-    8094, 0, 8095, 0, 0, 0, 0, 7986, 7988, 0, 0, 7990, 0, 7987, 7989, 0, 0,
-    7991, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 7995, 7997, 0, 0, 7999,
-    0, 0, 0, 0, 0, 8002, 8004, 8003, 8005, 0, 0, 0, 0, 8010, 8012, 8011,
-    8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 8022, 0, 8019, 8021, 0, 0, 8023, 0,
-    0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 8034, 8036, 0, 0, 8038, 8096, 0,
-    0, 0, 0, 8035, 8037, 0, 0, 8039, 8097, 0, 8098, 0, 0, 0, 0, 0, 8099, 0,
-    8100, 0, 0, 0, 0, 0, 8101, 0, 8102, 0, 0, 0, 0, 0, 8103, 8042, 8044, 0,
-    0, 8046, 8104, 0, 0, 0, 0, 8043, 8045, 0, 0, 8047, 8105, 0, 8106, 0, 0,
-    0, 0, 0, 8107, 0, 8108, 0, 0, 0, 0, 0, 8109, 0, 8110, 0, 0, 0, 0, 0,
-    8111, 0, 8114, 0, 0, 0, 0, 0, 8130, 0, 8178, 0, 0, 0, 0, 0, 8119, 8141,
-    8142, 0, 0, 8143, 0, 0, 0, 0, 0, 0, 8135, 0, 8183, 0, 0, 0, 0, 8157,
-    8158, 0, 0, 8159, 0, 0, 0, 0, 8602, 0, 8603, 0, 0, 0, 0, 0, 8622, 0,
-    8653, 0, 0, 0, 0, 0, 8655, 0, 8654, 0, 0, 0, 0, 0, 8708, 0, 8713, 0, 0,
-    0, 0, 0, 8716, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 8769, 0, 0, 0, 0, 0,
-    8772, 0, 8775, 0, 0, 0, 0, 0, 8777, 0, 8813, 0, 0, 0, 0, 0, 8802, 0,
-    8816, 0, 0, 0, 0, 0, 8817, 0, 8820, 0, 0, 0, 0, 0, 8821, 0, 8824, 0, 0,
-    0, 0, 0, 8825, 0, 8832, 0, 0, 0, 0, 0, 8833, 0, 8928, 0, 0, 0, 0, 0,
-    8929, 0, 8836, 0, 0, 0, 0, 0, 8837, 0, 8840, 0, 0, 0, 0, 0, 8841, 0,
-    8930, 0, 0, 0, 0, 0, 8931, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 8878, 0, 0,
-    0, 0, 0, 8879, 0, 8938, 0, 0, 0, 0, 0, 8939, 0, 8940, 0, 0, 0, 0, 0,
-    8941, 0, 0, 12436, 0, 12364, 0, 0, 0, 0, 0, 12366, 0, 12368, 0, 0, 0, 0,
-    0, 12370, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 12376, 0, 0, 0, 0, 0, 12378,
-    0, 12380, 0, 0, 0, 0, 0, 12382, 0, 12384, 0, 0, 0, 0, 0, 12386, 0, 12389,
-    0, 0, 0, 0, 0, 12391, 0, 12393, 0, 0, 0, 0, 0, 12400, 12401, 12403,
-    12404, 0, 0, 0, 0, 12406, 12407, 12409, 12410, 0, 0, 0, 0, 12412, 12413,
-    12446, 0, 0, 0, 0, 0, 12532, 0, 12460, 0, 0, 0, 0, 0, 12462, 0, 12464, 0,
-    0, 0, 0, 0, 12466, 0, 12468, 0, 0, 0, 0, 0, 12470, 0, 12472, 0, 0, 0, 0,
-    0, 12474, 0, 12476, 0, 0, 0, 0, 0, 12478, 0, 12480, 0, 0, 0, 0, 0, 12482,
-    0, 12485, 0, 0, 0, 0, 0, 12487, 0, 12489, 0, 0, 0, 0, 0, 12496, 12497,
-    12499, 12500, 0, 0, 0, 0, 12502, 12503, 12505, 12506, 0, 0, 0, 0, 12508,
-    12509, 12535, 0, 0, 0, 0, 0, 12536, 0, 12537, 0, 0, 0, 0, 0, 12538, 0,
-    12542, 0, 0, 0, 69786, 0, 0, 0, 0, 0, 69788, 0, 69803, 0, 0, 0, 0, 0, 0,
-    69934, 0, 69935, 0, 0, 70475, 70476, 0, 0, 70844, 70843, 70846, 0, 0,
-    71098, 0, 0, 0, 0, 0, 71099,
+    7830, 236, 237, 238, 297, 299, 301, 0, 239, 7881, 0, 0, 464, 521, 523, 0,
+    0, 0, 7883, 0, 0, 0, 0, 303, 0, 0, 7725, 0, 0, 0, 309, 0, 0, 0, 0, 496,
+    0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0,
+    0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0,
+    7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 0, 0, 505, 324, 0,
+    241, 0, 0, 7749, 0, 0, 0, 0, 328, 0, 7751, 0, 0, 0, 326, 0, 7755, 0, 0,
+    7753, 0, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337,
+    466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0,
+    7767, 0, 341, 0, 0, 0, 0, 7769, 0, 0, 0, 0, 345, 529, 531, 0, 0, 0, 7771,
+    0, 0, 0, 343, 0, 0, 0, 0, 7775, 0, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0,
+    353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0,
+    0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 0, 0, 0, 249, 250,
+    251, 361, 363, 365, 0, 252, 7911, 367, 369, 468, 533, 535, 0, 0, 432,
+    7909, 7795, 0, 0, 0, 371, 7799, 0, 7797, 0, 0, 0, 0, 7805, 0, 7807, 0, 0,
+    0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0,
+    0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927,
+    7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0,
+    7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0,
+    0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0,
+    508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874,
+    0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0,
+    0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0,
+    0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0,
+    0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689,
+    0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0,
+    7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0,
+    7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0,
+    0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855,
+    0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703,
+    0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0,
+    0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802,
+    0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0,
+    0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903,
+    0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0,
+    7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0,
+    0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0,
+    0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0,
+    8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0,
+    0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140,
+    0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0,
+    0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0,
+    8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911,
+    8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0,
+    8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118,
+    8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0,
+    0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0,
+    970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0,
+    8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971,
+    0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0,
+    0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0,
+    8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0,
+    0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024,
+    0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0,
+    0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0,
+    1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272,
+    0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0,
+    0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0,
+    1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263,
+    1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0,
+    1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0,
+    1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572,
+    0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0,
+    2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888,
+    2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0,
+    0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0,
+    3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0,
+    4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0,
+    0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0,
+    0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772,
+    0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0,
+    0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897,
+    0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943,
+    8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0,
+    8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947,
+    7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076,
+    0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955,
+    7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970,
+    7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0,
+    0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0,
+    0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983,
+    8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0,
+    8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987,
+    7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998,
+    0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0,
+    0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022,
+    0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0,
+    0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0,
+    8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101,
+    0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0,
+    8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0,
+    8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0,
+    8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0,
+    0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0,
+    8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0,
+    8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0,
+    8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0,
+    0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0,
+    8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0,
+    8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0,
+    8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0,
+    8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0,
+    0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0,
+    0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0,
+    0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0,
+    12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0,
+    0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406,
+    12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0,
+    0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0,
+    12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0,
+    0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485,
+    0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0,
+    12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508,
+    12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0,
+    12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803, 0, 0, 0,
+    69934, 0, 0, 69935, 0, 0, 0, 70475, 70476, 0, 0, 0, 70844, 70843, 70846,
+    0, 0, 0, 71098, 0, 0, 71099, 0, 0, 0, 71992,
 };
 
 static const change_record change_records_3_2_0[] = {
@@ -6008,55 +6076,56 @@
     2, 2, 2, 2, 2, 2, 2, 114, 115, 116, 117, 118, 119, 2, 2, 120, 121, 122,
     2, 123, 124, 125, 126, 127, 128, 2, 129, 130, 131, 132, 133, 134, 2, 51,
     51, 135, 2, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 2,
-    147, 2, 148, 149, 150, 151, 152, 153, 154, 155, 156, 2, 157, 158, 2, 159,
-    160, 161, 162, 2, 163, 164, 2, 165, 166, 167, 2, 2, 168, 169, 170, 171,
-    2, 172, 2, 173, 51, 51, 51, 51, 51, 51, 51, 174, 175, 51, 176, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51, 51,
-    51, 51, 51, 177, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51, 178, 2, 2, 2, 2, 2,
+    147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 2, 158, 159, 2,
+    160, 161, 162, 163, 2, 164, 165, 166, 167, 168, 169, 2, 2, 170, 171, 172,
+    173, 2, 174, 2, 175, 51, 51, 51, 51, 51, 51, 51, 176, 177, 51, 178, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51,
+    51, 51, 51, 51, 179, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51, 180, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51, 179, 180, 181,
-    182, 2, 2, 2, 2, 89, 183, 184, 185, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51, 181, 182,
+    183, 184, 2, 2, 2, 2, 185, 186, 187, 188, 51, 51, 51, 51, 51, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-    51, 51, 103, 51, 51, 51, 51, 51, 186, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    51, 51, 51, 103, 51, 51, 51, 51, 51, 51, 51, 51, 51, 189, 190, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 187, 51, 51, 188, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 189, 190, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 191, 51,
+    51, 192, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 193, 194,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 191, 192, 193, 194, 195, 2, 2, 196, 2,
-    2, 2, 197, 198, 199, 51, 51, 51, 51, 51, 200, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 201, 2, 202, 2, 2, 203, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 204, 205, 2,
-    2, 2, 2, 2, 206, 207, 208, 2, 209, 210, 2, 2, 211, 212, 213, 214, 215, 2,
-    51, 51, 51, 51, 51, 51, 51, 216, 217, 218, 219, 220, 221, 222, 223, 224,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 225, 226, 98, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 87, 227, 2, 228, 229, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 195, 196, 197, 198, 199,
+    2, 2, 200, 2, 2, 2, 201, 202, 203, 51, 51, 51, 51, 51, 204, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 205, 2, 206, 2, 2, 207, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    51, 208, 209, 2, 2, 2, 2, 2, 210, 211, 212, 2, 213, 214, 2, 2, 215, 216,
+    51, 217, 218, 2, 51, 51, 51, 51, 51, 51, 51, 219, 220, 221, 222, 223,
+    224, 225, 226, 227, 51, 228, 2, 2, 2, 2, 2, 2, 2, 2, 229, 230, 98, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 87, 231, 2, 232, 233, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 230, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    231, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 232, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 234, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 235, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 236, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 233, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 237, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 238, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-    51, 51, 51, 51, 234, 51, 235, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 236, 51, 51,
+    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 239, 51, 240, 51, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    51, 51, 51, 51, 241, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-    51, 237, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 230, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    51, 51, 51, 51, 51, 51, 51, 51, 242, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 234, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    51, 51, 51, 51, 51, 243, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -6289,7 +6358,7 @@
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 238, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 51, 244, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -6353,7 +6422,7 @@
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 };
 
 static const unsigned char changes_3_2_0_data[] = {
@@ -6439,8 +6508,8 @@
     9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6467,7 +6536,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6485,12 +6554,12 @@
     0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 20, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
     9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9,
     9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6607,7 +6676,7 @@
     9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
     0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -6741,7 +6810,7 @@
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -6770,7 +6839,7 @@
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6790,8 +6859,8 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0,
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
@@ -6838,8 +6907,8 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,
@@ -6894,7 +6963,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -6919,11 +6988,11 @@
     9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
@@ -6958,7 +7027,7 @@
     0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -7045,7 +7114,7 @@
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0,
+    9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -7152,192 +7221,208 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0,
-    9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0,
-    9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0,
-    0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9,
-    9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 9, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
-    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
-    9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0,
+    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0,
+    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9,
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9,
+    9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 9, 9, 0, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7352,160 +7437,160 @@
     0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9,
+    9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9,
+    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 57, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
-    0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9,
+    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9,
+    0, 9, 0, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9,
+    9, 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9,
+    9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9,
+    0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
-    9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9,
-    0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, 9, 0, 9,
-    9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, 9, 9, 9,
-    9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
@@ -7517,9 +7602,9 @@
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -7537,70 +7622,75 @@
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9,
-    9, 9, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    9, 9, 9, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
-    0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -7609,27 +7699,38 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9,
+    9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+    9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h
index 6052110..793d510 100644
--- a/Modules/unicodename_db.h
+++ b/Modules/unicodename_db.h
@@ -4,8 +4,8 @@
 
 /* lexicon */
 static const unsigned char lexicon[] = {
-    76, 69, 84, 84, 69, 210, 83, 73, 71, 206, 87, 73, 84, 200, 83, 77, 65,
-    76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 67, 65, 80, 73, 84, 65, 204,
+    76, 69, 84, 84, 69, 210, 83, 77, 65, 76, 204, 83, 73, 71, 206, 87, 73,
+    84, 200, 83, 89, 76, 76, 65, 66, 76, 197, 67, 65, 80, 73, 84, 65, 204,
     72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 76, 65, 84, 73, 206, 65, 82, 65,
     66, 73, 195, 67, 85, 78, 69, 73, 70, 79, 82, 205, 89, 201, 67, 74, 203,
     77, 65, 84, 72, 69, 77, 65, 84, 73, 67, 65, 204, 69, 71, 89, 80, 84, 73,
@@ -13,942 +13,946 @@
     66, 79, 204, 68, 73, 71, 73, 212, 86, 79, 87, 69, 204, 84, 65, 78, 71,
     85, 212, 70, 79, 82, 77, 128, 67, 65, 78, 65, 68, 73, 65, 206, 83, 89,
     76, 76, 65, 66, 73, 67, 211, 83, 73, 71, 78, 87, 82, 73, 84, 73, 78, 199,
-    84, 73, 77, 69, 211, 66, 65, 77, 85, 205, 65, 78, 196, 66, 79, 76, 196,
-    65, 78, 65, 84, 79, 76, 73, 65, 206, 72, 65, 78, 71, 85, 204, 76, 73, 78,
-    69, 65, 210, 78, 85, 77, 66, 69, 210, 71, 82, 69, 69, 203, 76, 73, 71,
-    65, 84, 85, 82, 197, 77, 85, 83, 73, 67, 65, 204, 69, 84, 72, 73, 79, 80,
-    73, 195, 70, 79, 210, 67, 79, 77, 66, 73, 78, 73, 78, 199, 193, 67, 89,
-    82, 73, 76, 76, 73, 195, 73, 84, 65, 76, 73, 195, 84, 65, 77, 73, 204,
-    78, 85, 83, 72, 213, 82, 65, 68, 73, 67, 65, 204, 83, 65, 78, 83, 45, 83,
-    69, 82, 73, 198, 67, 73, 82, 67, 76, 69, 196, 83, 81, 85, 65, 82, 197,
-    70, 73, 78, 65, 204, 84, 65, 201, 76, 69, 70, 212, 65, 82, 82, 79, 87,
-    128, 68, 79, 85, 66, 76, 197, 82, 73, 71, 72, 212, 86, 65, 201, 83, 73,
-    71, 78, 128, 72, 69, 78, 84, 65, 73, 71, 65, 78, 193, 65, 66, 79, 86, 69,
-    128, 66, 76, 65, 67, 203, 87, 72, 73, 84, 197, 66, 69, 76, 79, 87, 128,
-    65, 82, 82, 79, 215, 86, 65, 82, 73, 65, 84, 73, 79, 206, 65, 128, 66,
-    82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 85, 128, 66, 89,
-    90, 65, 78, 84, 73, 78, 197, 73, 128, 73, 83, 79, 76, 65, 84, 69, 196,
-    75, 65, 84, 65, 75, 65, 78, 193, 79, 128, 77, 79, 68, 73, 70, 73, 69,
-    210, 194, 77, 89, 65, 78, 77, 65, 210, 68, 79, 212, 79, 198, 77, 65, 82,
-    75, 128, 75, 65, 78, 71, 88, 201, 75, 73, 75, 65, 75, 85, 201, 77, 69,
-    78, 68, 197, 84, 73, 66, 69, 84, 65, 206, 86, 69, 82, 84, 73, 67, 65,
-    204, 73, 78, 73, 84, 73, 65, 204, 72, 69, 65, 86, 217, 72, 77, 79, 78,
-    199, 77, 69, 69, 205, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, 210, 65,
-    66, 79, 86, 197, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 67, 65, 82, 82,
-    73, 69, 210, 89, 69, 200, 71, 69, 79, 82, 71, 73, 65, 206, 67, 72, 69,
-    82, 79, 75, 69, 197, 77, 79, 78, 71, 79, 76, 73, 65, 206, 79, 78, 197,
-    80, 76, 85, 211, 84, 87, 207, 79, 78, 69, 128, 68, 69, 86, 65, 78, 65,
-    71, 65, 82, 201, 84, 87, 79, 128, 83, 81, 85, 65, 82, 69, 196, 80, 72,
-    65, 83, 69, 45, 197, 83, 89, 77, 66, 79, 76, 128, 83, 84, 82, 79, 75, 69,
-    128, 76, 69, 70, 84, 87, 65, 82, 68, 211, 67, 79, 78, 83, 79, 78, 65, 78,
-    212, 77, 73, 65, 207, 86, 79, 67, 65, 76, 73, 195, 66, 79, 216, 77, 73,
-    68, 68, 76, 197, 84, 73, 76, 197, 68, 85, 80, 76, 79, 89, 65, 206, 84,
-    72, 82, 69, 197, 74, 79, 78, 71, 83, 69, 79, 78, 199, 77, 65, 82, 203,
-    80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 71,
-    79, 78, 68, 201, 72, 79, 79, 75, 128, 72, 69, 66, 82, 69, 215, 85, 208,
-    71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 76, 79, 215, 79, 86, 69, 210,
-    83, 73, 89, 65, 209, 68, 82, 65, 87, 73, 78, 71, 211, 72, 73, 71, 200,
-    77, 65, 76, 65, 89, 65, 76, 65, 205, 73, 78, 68, 69, 216, 80, 65, 72, 65,
-    87, 200, 84, 72, 82, 69, 69, 128, 68, 79, 87, 206, 70, 79, 85, 82, 128,
-    67, 72, 79, 83, 69, 79, 78, 199, 72, 65, 76, 70, 87, 73, 68, 84, 200, 72,
-    65, 78, 68, 45, 70, 73, 83, 212, 77, 69, 82, 79, 73, 84, 73, 195, 66, 65,
-    76, 73, 78, 69, 83, 197, 72, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    73, 195, 83, 67, 82, 73, 80, 212, 70, 73, 86, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 205, 80, 72, 65, 83, 69, 45, 196, 84, 79, 128, 65, 76, 67,
-    72, 69, 77, 73, 67, 65, 204, 65, 76, 69, 198, 84, 79, 78, 197, 83, 73,
-    78, 72, 65, 76, 193, 66, 65, 82, 128, 75, 65, 128, 78, 85, 77, 69, 82,
-    73, 195, 72, 65, 76, 198, 66, 82, 65, 72, 77, 201, 72, 85, 78, 71, 65,
-    82, 73, 65, 206, 80, 65, 128, 84, 72, 85, 77, 194, 84, 85, 82, 78, 69,
-    196, 89, 65, 128, 66, 65, 82, 194, 77, 65, 128, 83, 73, 88, 128, 72, 65,
-    200, 82, 65, 128, 84, 72, 79, 85, 83, 65, 78, 68, 128, 69, 73, 71, 72,
-    84, 128, 76, 65, 128, 78, 79, 82, 84, 200, 70, 85, 76, 76, 87, 73, 68,
-    84, 200, 76, 73, 71, 72, 212, 78, 65, 128, 83, 69, 86, 69, 78, 128, 66,
-    82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 76, 79, 78, 199, 78,
-    73, 78, 69, 128, 83, 65, 128, 84, 65, 199, 68, 79, 77, 73, 78, 207, 65,
-    67, 85, 84, 69, 128, 70, 82, 65, 75, 84, 85, 210, 72, 73, 82, 65, 71, 65,
-    78, 193, 84, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 210, 70, 82, 65,
-    67, 84, 73, 79, 206, 79, 80, 69, 206, 80, 72, 65, 83, 69, 45, 195, 84,
-    69, 76, 85, 71, 213, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90,
-    89, 82, 88, 128, 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89,
-    65, 128, 90, 90, 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128,
-    90, 90, 85, 82, 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83,
-    89, 65, 128, 90, 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80,
-    128, 90, 90, 79, 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90,
-    73, 80, 128, 90, 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90,
-    73, 69, 80, 128, 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88,
-    128, 90, 90, 69, 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90,
-    65, 88, 128, 90, 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65,
-    128, 90, 90, 65, 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90,
-    87, 78, 74, 128, 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87,
-    202, 90, 87, 65, 82, 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84,
-    128, 90, 85, 79, 88, 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85,
-    77, 128, 90, 85, 66, 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 213,
-    90, 83, 72, 65, 128, 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79,
-    84, 128, 90, 79, 79, 128, 90, 79, 77, 66, 73, 69, 128, 90, 79, 65, 128,
-    90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, 69, 128, 90,
-    73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 80, 80, 69, 82, 45, 77,
-    79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, 73, 76, 68, 69, 128, 90,
-    73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, 68, 193, 90, 73, 66, 128,
-    90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, 89, 88, 128, 90, 72, 89,
-    84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, 82, 128, 90, 72, 89, 80,
-    128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, 72, 87, 65, 128, 90, 72,
-    85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, 82, 88, 128, 90, 72, 85,
-    82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, 88, 128, 90, 72, 85, 79,
-    80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, 90, 72, 79, 88, 128, 90,
-    72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, 79, 79, 128, 90, 72, 79,
-    73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, 128, 90, 72, 73,
-    76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, 90,
-    72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, 90,
-    72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, 90, 72, 65, 84, 128, 90,
-    72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, 65, 73, 78, 128, 90, 72,
-    65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, 69, 85, 83, 128, 90, 69,
-    84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90, 69, 78, 128, 90,
-    69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128, 90, 69, 66, 82,
-    193, 90, 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78,
-    45, 89, 79, 68, 72, 128, 90, 65, 89, 73, 78, 128, 90, 65, 89, 73, 206,
-    90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128, 90, 65, 82, 81,
-    65, 128, 90, 65, 82, 76, 128, 90, 65, 81, 69, 198, 90, 65, 78, 65, 66,
-    65, 90, 65, 210, 90, 65, 77, 88, 128, 90, 65, 76, 128, 90, 65, 204, 90,
-    65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90, 65, 72, 128, 90,
-    65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 65, 55, 128, 90, 193,
-    90, 48, 49, 54, 72, 128, 90, 48, 49, 54, 71, 128, 90, 48, 49, 54, 70,
-    128, 90, 48, 49, 54, 69, 128, 90, 48, 49, 54, 68, 128, 90, 48, 49, 54,
-    67, 128, 90, 48, 49, 54, 66, 128, 90, 48, 49, 54, 65, 128, 90, 48, 49,
-    54, 128, 90, 48, 49, 53, 73, 128, 90, 48, 49, 53, 72, 128, 90, 48, 49,
-    53, 71, 128, 90, 48, 49, 53, 70, 128, 90, 48, 49, 53, 69, 128, 90, 48,
-    49, 53, 68, 128, 90, 48, 49, 53, 67, 128, 90, 48, 49, 53, 66, 128, 90,
-    48, 49, 53, 65, 128, 90, 48, 49, 53, 128, 90, 48, 49, 52, 128, 90, 48,
-    49, 51, 128, 90, 48, 49, 50, 128, 90, 48, 49, 49, 128, 90, 48, 49, 48,
-    128, 90, 48, 48, 57, 128, 90, 48, 48, 56, 128, 90, 48, 48, 55, 128, 90,
-    48, 48, 54, 128, 90, 48, 48, 53, 65, 128, 90, 48, 48, 53, 128, 90, 48,
-    48, 52, 65, 128, 90, 48, 48, 52, 128, 90, 48, 48, 51, 66, 128, 90, 48,
-    48, 51, 65, 128, 90, 48, 48, 51, 128, 90, 48, 48, 50, 68, 128, 90, 48,
-    48, 50, 67, 128, 90, 48, 48, 50, 66, 128, 90, 48, 48, 50, 65, 128, 90,
-    48, 48, 50, 128, 90, 48, 48, 49, 128, 90, 128, 218, 89, 89, 88, 128, 89,
-    89, 84, 128, 89, 89, 82, 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89,
-    89, 69, 128, 89, 89, 65, 65, 128, 89, 89, 65, 128, 89, 89, 128, 89, 87,
-    79, 79, 128, 89, 87, 79, 128, 89, 87, 73, 73, 128, 89, 87, 73, 128, 89,
-    87, 69, 128, 89, 87, 65, 65, 128, 89, 87, 65, 128, 89, 86, 128, 89, 85,
-    88, 128, 89, 85, 87, 79, 81, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73,
-    78, 84, 85, 128, 89, 85, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89,
-    85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, 85, 81, 128, 89, 85,
-    209, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85,
-    79, 80, 128, 89, 85, 79, 77, 128, 89, 85, 79, 128, 89, 85, 78, 128, 89,
-    85, 77, 128, 89, 85, 74, 128, 89, 85, 73, 128, 89, 85, 69, 81, 128, 89,
-    85, 69, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, 78, 128,
-    89, 85, 65, 69, 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69,
-    128, 89, 85, 45, 85, 128, 89, 85, 45, 79, 128, 89, 85, 45, 73, 128, 89,
-    85, 45, 69, 79, 128, 89, 85, 45, 69, 128, 89, 85, 45, 65, 69, 128, 89,
-    85, 45, 65, 128, 89, 85, 45, 52, 128, 89, 85, 45, 51, 128, 89, 85, 45,
-    50, 128, 89, 85, 45, 49, 128, 89, 85, 128, 89, 213, 89, 82, 89, 128, 89,
-    80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, 75,
-    82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, 79,
-    71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79, 88,
-    128, 89, 79, 87, 68, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83,
-    128, 89, 79, 85, 84, 72, 70, 85, 204, 89, 79, 213, 89, 79, 84, 128, 89,
-    79, 82, 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, 89, 79,
-    79, 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 128, 89,
-    79, 196, 89, 79, 65, 128, 89, 79, 45, 89, 79, 128, 89, 79, 45, 89, 69,
-    79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, 79,
-    45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, 45,
-    65, 69, 128, 89, 79, 45, 65, 128, 89, 79, 45, 54, 128, 89, 79, 45, 53,
-    128, 89, 79, 45, 52, 128, 89, 79, 45, 51, 128, 89, 79, 45, 50, 128, 89,
-    79, 45, 49, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, 88, 128, 89,
-    73, 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, 78, 71, 128,
-    89, 73, 73, 128, 89, 73, 72, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89,
-    73, 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69,
-    128, 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89,
-    72, 69, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89,
-    70, 69, 206, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, 85, 88, 128, 89,
-    69, 85, 82, 65, 69, 128, 89, 69, 85, 81, 128, 89, 69, 85, 77, 128, 89,
-    69, 85, 65, 69, 84, 128, 89, 69, 85, 65, 69, 128, 89, 69, 84, 73, 86,
-    128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 83,
-    65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 89, 69, 83, 73, 69, 85, 78, 71,
-    45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, 78,
-    83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 77, 73, 69, 85,
-    77, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128,
-    89, 69, 83, 73, 69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 89,
-    69, 83, 73, 69, 85, 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73,
-    69, 85, 78, 71, 128, 89, 69, 82, 85, 128, 89, 69, 82, 213, 89, 69, 82,
-    73, 128, 89, 69, 82, 65, 200, 89, 69, 82, 128, 89, 69, 79, 82, 73, 78,
-    72, 73, 69, 85, 72, 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79, 45, 85,
-    128, 89, 69, 79, 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89, 69, 78,
-    65, 80, 128, 89, 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, 128,
-    89, 69, 76, 76, 79, 215, 89, 69, 73, 78, 128, 89, 69, 72, 128, 89, 69,
-    69, 71, 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128, 89, 65,
-    90, 90, 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89, 68, 128,
-    89, 65, 89, 65, 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87, 78, 73, 78,
-    199, 89, 65, 87, 78, 128, 89, 65, 87, 128, 89, 65, 86, 128, 89, 65, 85,
-    128, 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, 89, 65, 84, 72, 128, 89,
-    65, 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, 72, 128, 89, 65, 83, 128,
-    89, 65, 82, 82, 128, 89, 65, 82, 78, 128, 89, 65, 82, 128, 89, 65, 210,
-    89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 83, 65, 89, 65, 128, 89,
-    65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65, 77, 79, 75,
-    128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, 76,
-    128, 89, 65, 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, 83,
-    72, 128, 89, 65, 75, 128, 89, 65, 74, 85, 82, 86, 69, 68, 73, 195, 89,
-    65, 74, 128, 89, 65, 73, 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, 89,
-    65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, 65,
-    71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69, 77, 77, 65, 69,
-    128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, 128,
-    89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, 66,
-    128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, 79,
-    128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 85, 128, 89, 65, 45, 79, 128,
-    89, 65, 45, 53, 128, 89, 65, 45, 52, 128, 89, 65, 45, 51, 128, 89, 65,
-    45, 50, 128, 89, 65, 45, 49, 128, 89, 48, 48, 56, 128, 89, 48, 48, 55,
-    128, 89, 48, 48, 54, 128, 89, 48, 48, 53, 128, 89, 48, 48, 52, 128, 89,
-    48, 48, 51, 128, 89, 48, 48, 50, 128, 89, 48, 48, 49, 65, 128, 89, 48,
-    48, 49, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, 128,
-    88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, 128,
-    88, 89, 79, 79, 74, 128, 88, 89, 79, 79, 128, 88, 89, 79, 128, 88, 89,
-    73, 128, 88, 89, 69, 69, 205, 88, 89, 69, 69, 128, 88, 89, 69, 128, 88,
-    89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87, 73, 128, 88, 87,
-    69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88, 87, 65, 128, 88,
-    87, 128, 88, 215, 88, 86, 69, 128, 88, 86, 65, 128, 88, 85, 79, 88, 128,
-    88, 85, 79, 128, 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89,
-    65, 128, 88, 79, 88, 128, 88, 79, 84, 128, 88, 79, 82, 128, 88, 79, 80,
-    72, 128, 88, 79, 80, 128, 88, 79, 65, 128, 88, 79, 128, 88, 73, 88, 128,
-    88, 73, 84, 128, 88, 73, 82, 79, 206, 88, 73, 80, 128, 88, 73, 69, 88,
-    128, 88, 73, 69, 84, 128, 88, 73, 69, 80, 128, 88, 73, 69, 128, 88, 73,
-    65, 78, 71, 81, 201, 88, 73, 65, 66, 128, 88, 73, 128, 88, 71, 128, 88,
-    69, 89, 78, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, 69,
-    128, 88, 69, 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, 80, 72,
-    128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, 65,
-    128, 88, 48, 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, 128,
-    88, 48, 48, 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, 88,
-    48, 48, 52, 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, 48,
-    48, 50, 128, 88, 48, 48, 49, 128, 88, 45, 216, 87, 90, 128, 87, 89, 78,
-    78, 128, 87, 89, 78, 206, 87, 86, 73, 128, 87, 86, 69, 128, 87, 86, 65,
-    128, 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, 85, 79, 80,
-    128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, 87, 85, 76,
-    85, 128, 87, 85, 76, 213, 87, 85, 73, 128, 87, 85, 69, 128, 87, 85, 65,
-    69, 84, 128, 87, 85, 65, 69, 78, 128, 87, 85, 128, 87, 82, 217, 87, 82,
-    79, 78, 71, 128, 87, 82, 73, 83, 212, 87, 82, 73, 78, 75, 76, 69, 83,
-    128, 87, 82, 73, 78, 75, 76, 69, 211, 87, 82, 73, 78, 75, 76, 69, 68,
-    128, 87, 82, 69, 83, 84, 76, 69, 82, 83, 128, 87, 82, 69, 78, 67, 72,
-    128, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 80, 69, 196, 87, 82, 65,
-    80, 128, 87, 79, 88, 128, 87, 79, 87, 128, 87, 79, 82, 83, 72, 73, 80,
-    128, 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, 76, 196, 87, 79, 82, 75,
-    69, 82, 128, 87, 79, 82, 75, 128, 87, 79, 82, 203, 87, 79, 82, 68, 83,
-    80, 65, 67, 69, 128, 87, 79, 82, 196, 87, 79, 80, 128, 87, 79, 79, 78,
-    128, 87, 79, 79, 76, 128, 87, 79, 79, 68, 83, 45, 67, 82, 69, 197, 87,
-    79, 79, 68, 128, 87, 79, 78, 128, 87, 79, 206, 87, 79, 77, 69, 78, 211,
-    87, 79, 77, 69, 206, 87, 79, 77, 65, 78, 211, 87, 79, 77, 65, 78, 128,
-    87, 79, 77, 65, 206, 87, 79, 76, 79, 83, 79, 128, 87, 79, 76, 198, 87,
-    79, 69, 128, 87, 79, 65, 128, 87, 79, 45, 55, 128, 87, 79, 45, 54, 128,
-    87, 79, 45, 53, 128, 87, 79, 45, 52, 128, 87, 79, 45, 51, 128, 87, 79,
-    45, 50, 128, 87, 79, 45, 49, 128, 87, 73, 84, 72, 79, 85, 212, 87, 73,
-    84, 72, 73, 78, 128, 87, 73, 84, 72, 73, 206, 87, 73, 82, 69, 196, 87,
-    73, 78, 84, 69, 82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 75,
-    128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 71, 83, 128, 87, 73, 78, 69,
-    128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, 79, 87,
-    128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87, 73, 76,
-    84, 69, 196, 87, 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217,
-    87, 73, 71, 71, 76, 69, 83, 128, 87, 73, 68, 84, 72, 128, 87, 73, 68, 69,
-    78, 73, 78, 199, 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68,
-    197, 87, 73, 65, 78, 71, 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, 128,
-    87, 73, 45, 53, 128, 87, 73, 45, 52, 128, 87, 73, 45, 51, 128, 87, 73,
-    45, 50, 128, 87, 73, 45, 49, 128, 87, 72, 79, 76, 197, 87, 72, 73, 84,
-    69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87,
-    72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 82, 128, 87,
-    72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, 69,
-    69, 204, 87, 72, 69, 65, 84, 128, 87, 72, 65, 76, 69, 128, 87, 72, 128,
-    87, 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, 87, 69, 212, 87, 69,
-    83, 84, 69, 82, 206, 87, 69, 83, 84, 45, 67, 82, 69, 197, 87, 69, 83, 84,
-    128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, 128, 87, 69, 78, 128,
-    87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, 69, 73, 69, 82, 83, 84,
-    82, 65, 83, 211, 87, 69, 73, 128, 87, 69, 69, 78, 128, 87, 69, 68, 71,
-    69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 71, 69, 128, 87, 69, 68, 68,
-    73, 78, 71, 128, 87, 69, 66, 128, 87, 69, 65, 82, 217, 87, 69, 65, 80,
-    79, 78, 128, 87, 69, 45, 52, 128, 87, 69, 45, 51, 128, 87, 69, 45, 50,
-    128, 87, 69, 45, 49, 128, 87, 67, 128, 87, 66, 128, 87, 65, 89, 128, 87,
-    65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, 128, 87, 65, 87, 45, 65,
-    89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, 128, 87, 65, 215, 87,
-    65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, 69, 83, 128, 87, 65,
-    86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 128,
-    87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, 84, 69, 82, 128, 87,
-    65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, 84, 128, 87, 65, 83,
-    84, 73, 78, 71, 128, 87, 65, 83, 84, 69, 66, 65, 83, 75, 69, 84, 128, 87,
-    65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, 87, 65, 83,
-    76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, 76, 76, 65,
-    205, 87, 65, 82, 78, 73, 78, 199, 87, 65, 82, 65, 78, 199, 87, 65, 81,
-    70, 65, 128, 87, 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71,
-    75, 85, 79, 81, 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 67,
-    72, 207, 87, 65, 78, 128, 87, 65, 76, 76, 80, 76, 65, 78, 197, 87, 65,
-    76, 76, 128, 87, 65, 76, 204, 87, 65, 76, 75, 128, 87, 65, 76, 203, 87,
-    65, 73, 84, 73, 78, 71, 128, 87, 65, 73, 83, 84, 128, 87, 65, 73, 128,
-    87, 65, 70, 70, 76, 69, 128, 87, 65, 69, 78, 128, 87, 65, 69, 128, 87,
-    65, 68, 68, 65, 128, 87, 65, 65, 86, 85, 128, 87, 65, 45, 53, 128, 87,
-    65, 45, 52, 128, 87, 65, 45, 51, 128, 87, 65, 45, 50, 128, 87, 65, 45,
-    49, 128, 87, 48, 50, 53, 128, 87, 48, 50, 52, 65, 128, 87, 48, 50, 52,
-    128, 87, 48, 50, 51, 128, 87, 48, 50, 50, 128, 87, 48, 50, 49, 128, 87,
-    48, 50, 48, 128, 87, 48, 49, 57, 128, 87, 48, 49, 56, 65, 128, 87, 48,
-    49, 56, 128, 87, 48, 49, 55, 65, 128, 87, 48, 49, 55, 128, 87, 48, 49,
-    54, 128, 87, 48, 49, 53, 128, 87, 48, 49, 52, 65, 128, 87, 48, 49, 52,
-    128, 87, 48, 49, 51, 128, 87, 48, 49, 50, 128, 87, 48, 49, 49, 128, 87,
-    48, 49, 48, 65, 128, 87, 48, 49, 48, 128, 87, 48, 48, 57, 65, 128, 87,
-    48, 48, 57, 128, 87, 48, 48, 56, 128, 87, 48, 48, 55, 128, 87, 48, 48,
-    54, 128, 87, 48, 48, 53, 128, 87, 48, 48, 52, 128, 87, 48, 48, 51, 65,
-    128, 87, 48, 48, 51, 128, 87, 48, 48, 50, 128, 87, 48, 48, 49, 128, 86,
-    90, 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, 84, 128, 86, 89, 82, 88,
-    128, 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, 128, 86, 87, 74, 128, 86,
-    87, 65, 128, 86, 87, 128, 86, 85, 88, 128, 86, 85, 85, 128, 86, 85, 84,
-    128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, 85, 80, 128, 86, 85, 76,
-    71, 65, 210, 86, 85, 76, 67, 65, 78, 85, 83, 128, 86, 85, 69, 81, 128,
-    86, 84, 83, 128, 86, 84, 128, 86, 83, 57, 57, 128, 86, 83, 57, 56, 128,
-    86, 83, 57, 55, 128, 86, 83, 57, 54, 128, 86, 83, 57, 53, 128, 86, 83,
-    57, 52, 128, 86, 83, 57, 51, 128, 86, 83, 57, 50, 128, 86, 83, 57, 49,
-    128, 86, 83, 57, 48, 128, 86, 83, 57, 128, 86, 83, 56, 57, 128, 86, 83,
-    56, 56, 128, 86, 83, 56, 55, 128, 86, 83, 56, 54, 128, 86, 83, 56, 53,
-    128, 86, 83, 56, 52, 128, 86, 83, 56, 51, 128, 86, 83, 56, 50, 128, 86,
-    83, 56, 49, 128, 86, 83, 56, 48, 128, 86, 83, 56, 128, 86, 83, 55, 57,
-    128, 86, 83, 55, 56, 128, 86, 83, 55, 55, 128, 86, 83, 55, 54, 128, 86,
-    83, 55, 53, 128, 86, 83, 55, 52, 128, 86, 83, 55, 51, 128, 86, 83, 55,
-    50, 128, 86, 83, 55, 49, 128, 86, 83, 55, 48, 128, 86, 83, 55, 128, 86,
-    83, 54, 57, 128, 86, 83, 54, 56, 128, 86, 83, 54, 55, 128, 86, 83, 54,
-    54, 128, 86, 83, 54, 53, 128, 86, 83, 54, 52, 128, 86, 83, 54, 51, 128,
-    86, 83, 54, 50, 128, 86, 83, 54, 49, 128, 86, 83, 54, 48, 128, 86, 83,
-    54, 128, 86, 83, 53, 57, 128, 86, 83, 53, 56, 128, 86, 83, 53, 55, 128,
-    86, 83, 53, 54, 128, 86, 83, 53, 53, 128, 86, 83, 53, 52, 128, 86, 83,
-    53, 51, 128, 86, 83, 53, 50, 128, 86, 83, 53, 49, 128, 86, 83, 53, 48,
-    128, 86, 83, 53, 128, 86, 83, 52, 57, 128, 86, 83, 52, 56, 128, 86, 83,
-    52, 55, 128, 86, 83, 52, 54, 128, 86, 83, 52, 53, 128, 86, 83, 52, 52,
-    128, 86, 83, 52, 51, 128, 86, 83, 52, 50, 128, 86, 83, 52, 49, 128, 86,
-    83, 52, 48, 128, 86, 83, 52, 128, 86, 83, 51, 57, 128, 86, 83, 51, 56,
-    128, 86, 83, 51, 55, 128, 86, 83, 51, 54, 128, 86, 83, 51, 53, 128, 86,
-    83, 51, 52, 128, 86, 83, 51, 51, 128, 86, 83, 51, 50, 128, 86, 83, 51,
-    49, 128, 86, 83, 51, 48, 128, 86, 83, 51, 128, 86, 83, 50, 57, 128, 86,
-    83, 50, 56, 128, 86, 83, 50, 55, 128, 86, 83, 50, 54, 128, 86, 83, 50,
-    53, 54, 128, 86, 83, 50, 53, 53, 128, 86, 83, 50, 53, 52, 128, 86, 83,
-    50, 53, 51, 128, 86, 83, 50, 53, 50, 128, 86, 83, 50, 53, 49, 128, 86,
-    83, 50, 53, 48, 128, 86, 83, 50, 53, 128, 86, 83, 50, 52, 57, 128, 86,
-    83, 50, 52, 56, 128, 86, 83, 50, 52, 55, 128, 86, 83, 50, 52, 54, 128,
-    86, 83, 50, 52, 53, 128, 86, 83, 50, 52, 52, 128, 86, 83, 50, 52, 51,
-    128, 86, 83, 50, 52, 50, 128, 86, 83, 50, 52, 49, 128, 86, 83, 50, 52,
-    48, 128, 86, 83, 50, 52, 128, 86, 83, 50, 51, 57, 128, 86, 83, 50, 51,
-    56, 128, 86, 83, 50, 51, 55, 128, 86, 83, 50, 51, 54, 128, 86, 83, 50,
-    51, 53, 128, 86, 83, 50, 51, 52, 128, 86, 83, 50, 51, 51, 128, 86, 83,
-    50, 51, 50, 128, 86, 83, 50, 51, 49, 128, 86, 83, 50, 51, 48, 128, 86,
-    83, 50, 51, 128, 86, 83, 50, 50, 57, 128, 86, 83, 50, 50, 56, 128, 86,
-    83, 50, 50, 55, 128, 86, 83, 50, 50, 54, 128, 86, 83, 50, 50, 53, 128,
-    86, 83, 50, 50, 52, 128, 86, 83, 50, 50, 51, 128, 86, 83, 50, 50, 50,
-    128, 86, 83, 50, 50, 49, 128, 86, 83, 50, 50, 48, 128, 86, 83, 50, 50,
-    128, 86, 83, 50, 49, 57, 128, 86, 83, 50, 49, 56, 128, 86, 83, 50, 49,
-    55, 128, 86, 83, 50, 49, 54, 128, 86, 83, 50, 49, 53, 128, 86, 83, 50,
-    49, 52, 128, 86, 83, 50, 49, 51, 128, 86, 83, 50, 49, 50, 128, 86, 83,
-    50, 49, 49, 128, 86, 83, 50, 49, 48, 128, 86, 83, 50, 49, 128, 86, 83,
-    50, 48, 57, 128, 86, 83, 50, 48, 56, 128, 86, 83, 50, 48, 55, 128, 86,
-    83, 50, 48, 54, 128, 86, 83, 50, 48, 53, 128, 86, 83, 50, 48, 52, 128,
-    86, 83, 50, 48, 51, 128, 86, 83, 50, 48, 50, 128, 86, 83, 50, 48, 49,
-    128, 86, 83, 50, 48, 48, 128, 86, 83, 50, 48, 128, 86, 83, 50, 128, 86,
-    83, 49, 57, 57, 128, 86, 83, 49, 57, 56, 128, 86, 83, 49, 57, 55, 128,
-    86, 83, 49, 57, 54, 128, 86, 83, 49, 57, 53, 128, 86, 83, 49, 57, 52,
-    128, 86, 83, 49, 57, 51, 128, 86, 83, 49, 57, 50, 128, 86, 83, 49, 57,
-    49, 128, 86, 83, 49, 57, 48, 128, 86, 83, 49, 57, 128, 86, 83, 49, 56,
-    57, 128, 86, 83, 49, 56, 56, 128, 86, 83, 49, 56, 55, 128, 86, 83, 49,
-    56, 54, 128, 86, 83, 49, 56, 53, 128, 86, 83, 49, 56, 52, 128, 86, 83,
-    49, 56, 51, 128, 86, 83, 49, 56, 50, 128, 86, 83, 49, 56, 49, 128, 86,
-    83, 49, 56, 48, 128, 86, 83, 49, 56, 128, 86, 83, 49, 55, 57, 128, 86,
-    83, 49, 55, 56, 128, 86, 83, 49, 55, 55, 128, 86, 83, 49, 55, 54, 128,
-    86, 83, 49, 55, 53, 128, 86, 83, 49, 55, 52, 128, 86, 83, 49, 55, 51,
-    128, 86, 83, 49, 55, 50, 128, 86, 83, 49, 55, 49, 128, 86, 83, 49, 55,
-    48, 128, 86, 83, 49, 55, 128, 86, 83, 49, 54, 57, 128, 86, 83, 49, 54,
-    56, 128, 86, 83, 49, 54, 55, 128, 86, 83, 49, 54, 54, 128, 86, 83, 49,
-    54, 53, 128, 86, 83, 49, 54, 52, 128, 86, 83, 49, 54, 51, 128, 86, 83,
-    49, 54, 50, 128, 86, 83, 49, 54, 49, 128, 86, 83, 49, 54, 48, 128, 86,
-    83, 49, 54, 128, 86, 83, 49, 53, 57, 128, 86, 83, 49, 53, 56, 128, 86,
-    83, 49, 53, 55, 128, 86, 83, 49, 53, 54, 128, 86, 83, 49, 53, 53, 128,
-    86, 83, 49, 53, 52, 128, 86, 83, 49, 53, 51, 128, 86, 83, 49, 53, 50,
-    128, 86, 83, 49, 53, 49, 128, 86, 83, 49, 53, 48, 128, 86, 83, 49, 53,
-    128, 86, 83, 49, 52, 57, 128, 86, 83, 49, 52, 56, 128, 86, 83, 49, 52,
-    55, 128, 86, 83, 49, 52, 54, 128, 86, 83, 49, 52, 53, 128, 86, 83, 49,
-    52, 52, 128, 86, 83, 49, 52, 51, 128, 86, 83, 49, 52, 50, 128, 86, 83,
-    49, 52, 49, 128, 86, 83, 49, 52, 48, 128, 86, 83, 49, 52, 128, 86, 83,
-    49, 51, 57, 128, 86, 83, 49, 51, 56, 128, 86, 83, 49, 51, 55, 128, 86,
-    83, 49, 51, 54, 128, 86, 83, 49, 51, 53, 128, 86, 83, 49, 51, 52, 128,
-    86, 83, 49, 51, 51, 128, 86, 83, 49, 51, 50, 128, 86, 83, 49, 51, 49,
-    128, 86, 83, 49, 51, 48, 128, 86, 83, 49, 51, 128, 86, 83, 49, 50, 57,
-    128, 86, 83, 49, 50, 56, 128, 86, 83, 49, 50, 55, 128, 86, 83, 49, 50,
-    54, 128, 86, 83, 49, 50, 53, 128, 86, 83, 49, 50, 52, 128, 86, 83, 49,
-    50, 51, 128, 86, 83, 49, 50, 50, 128, 86, 83, 49, 50, 49, 128, 86, 83,
-    49, 50, 48, 128, 86, 83, 49, 50, 128, 86, 83, 49, 49, 57, 128, 86, 83,
-    49, 49, 56, 128, 86, 83, 49, 49, 55, 128, 86, 83, 49, 49, 54, 128, 86,
-    83, 49, 49, 53, 128, 86, 83, 49, 49, 52, 128, 86, 83, 49, 49, 51, 128,
-    86, 83, 49, 49, 50, 128, 86, 83, 49, 49, 49, 128, 86, 83, 49, 49, 48,
-    128, 86, 83, 49, 49, 128, 86, 83, 49, 48, 57, 128, 86, 83, 49, 48, 56,
-    128, 86, 83, 49, 48, 55, 128, 86, 83, 49, 48, 54, 128, 86, 83, 49, 48,
-    53, 128, 86, 83, 49, 48, 52, 128, 86, 83, 49, 48, 51, 128, 86, 83, 49,
-    48, 50, 128, 86, 83, 49, 48, 49, 128, 86, 83, 49, 48, 48, 128, 86, 83,
-    49, 48, 128, 86, 83, 49, 128, 86, 83, 128, 86, 82, 65, 67, 72, 89, 128,
-    86, 79, 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69, 210, 86,
-    79, 87, 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, 211, 86, 79, 80,
-    128, 86, 79, 79, 73, 128, 86, 79, 79, 128, 86, 79, 77, 73, 84, 73, 78,
-    71, 128, 86, 79, 77, 128, 86, 79, 76, 85, 77, 197, 86, 79, 76, 84, 65,
-    71, 197, 86, 79, 76, 76, 69, 89, 66, 65, 76, 76, 128, 86, 79, 76, 67, 65,
-    78, 79, 128, 86, 79, 76, 65, 80, 85, 203, 86, 79, 73, 196, 86, 79, 73,
-    67, 73, 78, 71, 128, 86, 79, 73, 67, 69, 76, 69, 83, 211, 86, 79, 73, 67,
-    69, 196, 86, 79, 68, 128, 86, 79, 67, 65, 76, 73, 90, 65, 84, 73, 79,
-    206, 86, 79, 67, 65, 204, 86, 79, 128, 86, 73, 89, 79, 128, 86, 73, 88,
-    128, 86, 73, 84, 82, 73, 79, 76, 45, 50, 128, 86, 73, 84, 82, 73, 79, 76,
-    128, 86, 73, 84, 65, 69, 45, 50, 128, 86, 73, 84, 65, 69, 128, 86, 73,
-    84, 128, 86, 73, 83, 73, 71, 79, 84, 72, 73, 195, 86, 73, 83, 65, 82, 71,
-    65, 89, 65, 128, 86, 73, 83, 65, 82, 71, 65, 128, 86, 73, 83, 65, 82, 71,
-    193, 86, 73, 82, 73, 65, 77, 128, 86, 73, 82, 71, 79, 128, 86, 73, 82,
-    71, 65, 128, 86, 73, 82, 65, 77, 65, 128, 86, 73, 80, 128, 86, 73, 79,
-    76, 73, 78, 128, 86, 73, 78, 69, 71, 65, 82, 45, 51, 128, 86, 73, 78, 69,
-    71, 65, 82, 45, 50, 128, 86, 73, 78, 69, 71, 65, 82, 128, 86, 73, 78, 69,
-    71, 65, 210, 86, 73, 78, 69, 128, 86, 73, 78, 197, 86, 73, 78, 128, 86,
-    73, 76, 76, 65, 71, 69, 128, 86, 73, 73, 128, 86, 73, 71, 73, 78, 84, 73,
-    76, 69, 128, 86, 73, 69, 88, 128, 86, 73, 69, 87, 73, 78, 199, 86, 73,
-    69, 87, 68, 65, 84, 193, 86, 73, 69, 84, 128, 86, 73, 69, 212, 86, 73,
-    69, 80, 128, 86, 73, 69, 128, 86, 73, 68, 74, 45, 50, 128, 86, 73, 68,
-    74, 128, 86, 73, 68, 69, 79, 67, 65, 83, 83, 69, 84, 84, 69, 128, 86, 73,
-    68, 69, 207, 86, 73, 68, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73,
-    66, 82, 65, 84, 73, 79, 206, 86, 72, 65, 128, 86, 70, 65, 128, 86, 69,
-    89, 90, 128, 86, 69, 88, 128, 86, 69, 87, 128, 86, 69, 215, 86, 69, 85,
-    88, 128, 86, 69, 85, 77, 128, 86, 69, 85, 65, 69, 80, 69, 78, 128, 86,
-    69, 85, 65, 69, 128, 86, 69, 83, 84, 65, 128, 86, 69, 83, 84, 128, 86,
-    69, 83, 83, 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67, 65, 76, 76,
-    89, 128, 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 54, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45,
-    48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 51, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 53, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45,
-    48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 52, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 53, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45,
-    48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 53, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 52, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45,
-    48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 54, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 51, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45,
-    48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 48, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 50, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45,
-    48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 49, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 49, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45,
-    48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 50, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
-    48, 48, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45,
-    48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 51, 128,
-    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128, 86, 69, 82,
-    84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67,
-    65, 76, 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 128,
-    86, 69, 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197, 86, 69, 82, 71,
-    69, 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69, 82, 128, 86,
-    69, 80, 128, 86, 69, 78, 68, 128, 86, 69, 76, 73, 128, 86, 69, 73, 76,
-    128, 86, 69, 72, 73, 67, 76, 69, 128, 86, 69, 72, 128, 86, 69, 200, 86,
-    69, 69, 128, 86, 69, 197, 86, 69, 68, 69, 128, 86, 69, 67, 84, 79, 210,
-    86, 65, 89, 65, 78, 78, 65, 128, 86, 65, 88, 128, 86, 65, 86, 128, 86,
-    65, 214, 86, 65, 85, 128, 86, 65, 84, 72, 89, 128, 86, 65, 84, 128, 86,
-    65, 83, 84, 78, 69, 83, 211, 86, 65, 83, 73, 83, 128, 86, 65, 82, 89,
-    211, 86, 65, 82, 73, 75, 65, 128, 86, 65, 82, 73, 65, 78, 84, 128, 86,
-    65, 82, 73, 65, 78, 212, 86, 65, 82, 73, 65, 128, 86, 65, 82, 73, 193,
-    86, 65, 82, 69, 73, 65, 201, 86, 65, 82, 69, 73, 193, 86, 65, 82, 65, 65,
-    75, 65, 78, 128, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80, 128, 86,
-    65, 78, 69, 128, 86, 65, 77, 80, 73, 82, 69, 128, 86, 65, 77, 65, 71, 79,
-    77, 85, 75, 72, 65, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75, 72, 193, 86,
-    65, 76, 76, 69, 89, 128, 86, 65, 75, 65, 73, 89, 65, 82, 65, 65, 128, 86,
-    65, 74, 128, 86, 65, 73, 128, 86, 65, 72, 128, 86, 65, 200, 86, 65, 65,
-    86, 85, 128, 86, 65, 65, 128, 86, 48, 52, 48, 65, 128, 86, 48, 52, 48,
-    128, 86, 48, 51, 57, 128, 86, 48, 51, 56, 128, 86, 48, 51, 55, 65, 128,
-    86, 48, 51, 55, 128, 86, 48, 51, 54, 128, 86, 48, 51, 53, 128, 86, 48,
-    51, 52, 128, 86, 48, 51, 51, 65, 128, 86, 48, 51, 51, 128, 86, 48, 51,
-    50, 128, 86, 48, 51, 49, 65, 128, 86, 48, 51, 49, 128, 86, 48, 51, 48,
-    65, 128, 86, 48, 51, 48, 128, 86, 48, 50, 57, 65, 128, 86, 48, 50, 57,
-    128, 86, 48, 50, 56, 65, 128, 86, 48, 50, 56, 128, 86, 48, 50, 55, 128,
-    86, 48, 50, 54, 128, 86, 48, 50, 53, 128, 86, 48, 50, 52, 128, 86, 48,
-    50, 51, 65, 128, 86, 48, 50, 51, 128, 86, 48, 50, 50, 128, 86, 48, 50,
-    49, 128, 86, 48, 50, 48, 76, 128, 86, 48, 50, 48, 75, 128, 86, 48, 50,
-    48, 74, 128, 86, 48, 50, 48, 73, 128, 86, 48, 50, 48, 72, 128, 86, 48,
-    50, 48, 71, 128, 86, 48, 50, 48, 70, 128, 86, 48, 50, 48, 69, 128, 86,
-    48, 50, 48, 68, 128, 86, 48, 50, 48, 67, 128, 86, 48, 50, 48, 66, 128,
-    86, 48, 50, 48, 65, 128, 86, 48, 50, 48, 128, 86, 48, 49, 57, 128, 86,
-    48, 49, 56, 128, 86, 48, 49, 55, 128, 86, 48, 49, 54, 128, 86, 48, 49,
-    53, 128, 86, 48, 49, 52, 128, 86, 48, 49, 51, 128, 86, 48, 49, 50, 66,
-    128, 86, 48, 49, 50, 65, 128, 86, 48, 49, 50, 128, 86, 48, 49, 49, 67,
-    128, 86, 48, 49, 49, 66, 128, 86, 48, 49, 49, 65, 128, 86, 48, 49, 49,
-    128, 86, 48, 49, 48, 128, 86, 48, 48, 57, 128, 86, 48, 48, 56, 128, 86,
-    48, 48, 55, 66, 128, 86, 48, 48, 55, 65, 128, 86, 48, 48, 55, 128, 86,
-    48, 48, 54, 128, 86, 48, 48, 53, 128, 86, 48, 48, 52, 128, 86, 48, 48,
-    51, 128, 86, 48, 48, 50, 65, 128, 86, 48, 48, 50, 128, 86, 48, 48, 49,
-    73, 128, 86, 48, 48, 49, 72, 128, 86, 48, 48, 49, 71, 128, 86, 48, 48,
-    49, 70, 128, 86, 48, 48, 49, 69, 128, 86, 48, 48, 49, 68, 128, 86, 48,
-    48, 49, 67, 128, 86, 48, 48, 49, 66, 128, 86, 48, 48, 49, 65, 128, 86,
-    48, 48, 49, 128, 85, 90, 85, 128, 85, 90, 72, 65, 75, 75, 85, 128, 85,
-    90, 51, 128, 85, 90, 179, 85, 89, 65, 78, 78, 65, 128, 85, 89, 128, 85,
-    87, 85, 128, 85, 85, 89, 65, 78, 78, 65, 128, 85, 85, 85, 85, 128, 85,
-    85, 85, 51, 128, 85, 85, 85, 50, 128, 85, 85, 69, 128, 85, 84, 85, 75,
-    73, 128, 85, 83, 83, 85, 51, 128, 85, 83, 83, 85, 128, 85, 83, 72, 88,
-    128, 85, 83, 72, 85, 77, 88, 128, 85, 83, 72, 69, 78, 78, 65, 128, 85,
-    83, 72, 50, 128, 85, 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83,
-    69, 45, 50, 128, 85, 83, 69, 45, 49, 128, 85, 83, 69, 128, 85, 83, 197,
-    85, 82, 85, 218, 85, 82, 85, 83, 128, 85, 82, 85, 68, 65, 128, 85, 82,
-    85, 68, 193, 85, 82, 85, 128, 85, 82, 213, 85, 82, 78, 128, 85, 82, 73,
-    78, 69, 128, 85, 82, 73, 51, 128, 85, 82, 73, 128, 85, 82, 65, 78, 85,
-    83, 128, 85, 82, 65, 128, 85, 82, 52, 128, 85, 82, 50, 128, 85, 82, 178,
-    85, 80, 87, 65, 82, 68, 83, 128, 85, 80, 87, 65, 82, 68, 211, 85, 80, 87,
-    65, 82, 68, 128, 85, 80, 87, 65, 82, 196, 85, 80, 84, 85, 82, 78, 128,
-    85, 80, 83, 73, 76, 79, 78, 128, 85, 80, 83, 73, 76, 79, 206, 85, 80, 83,
-    73, 68, 69, 45, 68, 79, 87, 206, 85, 80, 82, 73, 71, 72, 212, 85, 80, 80,
-    69, 82, 128, 85, 80, 80, 69, 210, 85, 80, 65, 68, 72, 77, 65, 78, 73, 89,
-    65, 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, 199, 85, 79, 78, 128,
-    85, 79, 71, 128, 85, 78, 78, 128, 85, 78, 77, 65, 82, 82, 73, 69, 196,
-    85, 78, 75, 78, 79, 87, 78, 128, 85, 78, 75, 128, 85, 78, 73, 86, 69, 82,
-    83, 65, 204, 85, 78, 73, 84, 89, 128, 85, 78, 73, 84, 69, 196, 85, 78,
-    73, 84, 128, 85, 78, 73, 212, 85, 78, 73, 79, 78, 128, 85, 78, 73, 79,
-    206, 85, 78, 73, 70, 79, 82, 77, 128, 85, 78, 73, 70, 73, 69, 196, 85,
-    78, 73, 67, 79, 82, 206, 85, 78, 69, 86, 69, 206, 85, 78, 68, 207, 85,
-    78, 68, 69, 82, 84, 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85,
-    78, 68, 69, 82, 68, 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, 82, 128, 85,
-    78, 68, 69, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, 193, 85, 78,
-    67, 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 66, 76, 69, 78, 68, 69, 196,
-    85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, 128, 85, 78, 65, 80, 128, 85,
-    78, 65, 77, 85, 83, 69, 196, 85, 78, 65, 128, 85, 206, 85, 77, 85, 77,
-    128, 85, 77, 85, 205, 85, 77, 66, 82, 69, 76, 76, 65, 128, 85, 77, 66,
-    82, 69, 76, 76, 193, 85, 77, 66, 73, 78, 128, 85, 75, 85, 128, 85, 75,
-    82, 65, 73, 78, 73, 65, 206, 85, 75, 65, 82, 65, 128, 85, 75, 65, 82,
-    193, 85, 75, 128, 85, 73, 76, 76, 69, 65, 78, 78, 128, 85, 73, 71, 72,
-    85, 210, 85, 72, 68, 128, 85, 71, 65, 82, 73, 84, 73, 195, 85, 69, 89,
-    128, 85, 69, 78, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65, 128,
-    85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84, 84,
-    193, 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66,
-    85, 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65, 68,
-    65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71, 128,
-    85, 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85, 48,
-    52, 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51, 55,
-    128, 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128, 85,
-    48, 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85, 48,
-    51, 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48, 50,
-    57, 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54, 128,
-    85, 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128, 85,
-    48, 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48, 50,
-    48, 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55, 128,
-    85, 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85, 48,
-    49, 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49, 48,
-    128, 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128, 85,
-    48, 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128, 85,
-    48, 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48, 48,
-    50, 128, 85, 48, 48, 49, 128, 85, 45, 83, 72, 65, 80, 69, 196, 85, 45,
-    73, 45, 73, 128, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 66, 82, 74, 71,
-    85, 128, 85, 45, 53, 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, 84, 90,
-    79, 128, 84, 90, 73, 210, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84, 90,
-    69, 128, 84, 90, 65, 65, 128, 84, 90, 65, 128, 84, 90, 128, 84, 89, 210,
-    84, 89, 80, 69, 45, 183, 84, 89, 80, 69, 45, 54, 128, 84, 89, 80, 69, 45,
-    182, 84, 89, 80, 69, 45, 53, 128, 84, 89, 80, 69, 45, 181, 84, 89, 80,
-    69, 45, 52, 128, 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45, 51, 128,
-    84, 89, 80, 69, 45, 179, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 49,
-    45, 50, 128, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197, 84, 89, 79, 128,
-    84, 89, 73, 128, 84, 89, 69, 128, 84, 89, 65, 89, 128, 84, 89, 65, 128,
-    84, 88, 87, 86, 128, 84, 88, 87, 214, 84, 88, 72, 69, 69, 202, 84, 88,
-    65, 128, 84, 87, 79, 79, 128, 84, 87, 79, 45, 87, 65, 217, 84, 87, 79,
-    45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 79, 45, 76, 73, 78, 197, 84, 87,
-    79, 45, 72, 69, 65, 68, 69, 196, 84, 87, 79, 45, 69, 205, 84, 87, 79, 45,
-    67, 73, 82, 67, 76, 197, 84, 87, 73, 83, 84, 73, 78, 71, 128, 84, 87, 73,
-    83, 84, 69, 196, 84, 87, 73, 73, 128, 84, 87, 73, 128, 84, 87, 69, 78,
-    84, 89, 45, 84, 87, 79, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87, 207, 84,
-    87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78, 84, 89,
-    45, 83, 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128,
-    84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45,
-    78, 73, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82, 128, 84,
-    87, 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45,
-    70, 73, 86, 197, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 200, 84,
-    87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, 84, 87, 69, 78, 84, 89,
-    128, 84, 87, 69, 78, 84, 217, 84, 87, 69, 78, 84, 73, 69, 84, 72, 83,
-    128, 84, 87, 69, 78, 84, 73, 69, 84, 72, 128, 84, 87, 69, 76, 86, 69, 45,
-    84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69, 76,
-    86, 197, 84, 87, 69, 76, 70, 84, 72, 83, 128, 84, 87, 69, 76, 70, 84, 72,
-    128, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, 86, 82,
-    73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, 85, 88, 69, 68, 79,
-    128, 84, 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84, 85,
-    84, 84, 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84,
+    84, 73, 77, 69, 211, 66, 65, 77, 85, 205, 65, 78, 196, 83, 67, 82, 73,
+    80, 212, 66, 79, 76, 196, 65, 78, 65, 84, 79, 76, 73, 65, 206, 72, 65,
+    78, 71, 85, 204, 78, 85, 77, 66, 69, 210, 76, 73, 78, 69, 65, 210, 71,
+    82, 69, 69, 203, 76, 73, 71, 65, 84, 85, 82, 197, 77, 85, 83, 73, 67, 65,
+    204, 69, 84, 72, 73, 79, 80, 73, 195, 75, 72, 73, 84, 65, 206, 67, 79,
+    77, 66, 73, 78, 73, 78, 199, 70, 79, 210, 193, 67, 89, 82, 73, 76, 76,
+    73, 195, 73, 84, 65, 76, 73, 195, 84, 65, 77, 73, 204, 78, 85, 83, 72,
+    213, 76, 69, 70, 212, 67, 73, 82, 67, 76, 69, 196, 82, 65, 68, 73, 67,
+    65, 204, 83, 65, 78, 83, 45, 83, 69, 82, 73, 198, 83, 81, 85, 65, 82,
+    197, 82, 73, 71, 72, 212, 70, 73, 78, 65, 204, 84, 65, 201, 65, 82, 82,
+    79, 87, 128, 68, 79, 85, 66, 76, 197, 86, 65, 201, 83, 73, 71, 78, 128,
+    65, 66, 79, 86, 69, 128, 72, 69, 78, 84, 65, 73, 71, 65, 78, 193, 66, 76,
+    65, 67, 203, 65, 82, 82, 79, 215, 87, 72, 73, 84, 197, 66, 69, 76, 79,
+    87, 128, 65, 128, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, 82, 65, 73,
+    76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 85, 128, 66, 89, 90, 65, 78,
+    84, 73, 78, 197, 73, 128, 73, 83, 79, 76, 65, 84, 69, 196, 77, 79, 68,
+    73, 70, 73, 69, 210, 79, 128, 75, 65, 84, 65, 75, 65, 78, 193, 194, 77,
+    65, 82, 75, 128, 68, 79, 212, 77, 89, 65, 78, 77, 65, 210, 79, 198, 75,
+    65, 78, 71, 88, 201, 75, 73, 75, 65, 75, 85, 201, 77, 69, 78, 68, 197,
+    86, 69, 82, 84, 73, 67, 65, 204, 77, 73, 68, 68, 76, 197, 84, 73, 66, 69,
+    84, 65, 206, 72, 69, 65, 86, 217, 73, 78, 73, 84, 73, 65, 204, 72, 77,
+    79, 78, 199, 79, 78, 197, 77, 69, 69, 205, 67, 79, 80, 84, 73, 195, 75,
+    72, 77, 69, 210, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 65, 66, 79, 86,
+    197, 67, 65, 82, 82, 73, 69, 210, 89, 69, 200, 71, 69, 79, 82, 71, 73,
+    65, 206, 67, 72, 69, 82, 79, 75, 69, 197, 77, 79, 78, 71, 79, 76, 73, 65,
+    206, 79, 78, 69, 128, 80, 76, 85, 211, 84, 87, 207, 84, 87, 79, 128, 66,
+    79, 216, 76, 79, 87, 69, 210, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201,
+    83, 81, 85, 65, 82, 69, 196, 83, 89, 77, 66, 79, 76, 128, 80, 72, 65, 83,
+    69, 45, 197, 83, 84, 82, 79, 75, 69, 128, 84, 72, 82, 69, 197, 85, 80,
+    80, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, 84, 207, 67, 79, 78,
+    83, 79, 78, 65, 78, 212, 77, 73, 65, 207, 86, 79, 67, 65, 76, 73, 195,
+    68, 82, 65, 87, 73, 78, 71, 211, 84, 73, 76, 197, 68, 85, 80, 76, 79, 89,
+    65, 206, 77, 65, 82, 203, 74, 79, 78, 71, 83, 69, 79, 78, 199, 80, 65,
+    82, 69, 78, 84, 72, 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 71, 79, 78,
+    68, 201, 72, 79, 79, 75, 128, 72, 69, 66, 82, 69, 215, 85, 208, 71, 76,
+    65, 71, 79, 76, 73, 84, 73, 195, 76, 79, 215, 84, 72, 82, 69, 69, 128,
+    70, 79, 85, 82, 128, 77, 65, 76, 65, 89, 65, 76, 65, 205, 79, 86, 69,
+    210, 83, 73, 89, 65, 209, 72, 65, 76, 198, 72, 73, 71, 200, 73, 78, 68,
+    69, 216, 80, 65, 72, 65, 87, 200, 68, 79, 87, 206, 67, 72, 79, 83, 69,
+    79, 78, 199, 72, 65, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 72, 65,
+    78, 68, 45, 70, 73, 83, 212, 77, 69, 82, 79, 73, 84, 73, 195, 66, 65, 76,
+    73, 78, 69, 83, 197, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 70, 73,
+    86, 69, 128, 76, 73, 71, 72, 212, 73, 68, 69, 79, 71, 82, 65, 205, 80,
+    72, 65, 83, 69, 45, 196, 84, 79, 128, 65, 76, 67, 72, 69, 77, 73, 67, 65,
+    204, 65, 76, 69, 198, 84, 79, 78, 197, 83, 73, 78, 72, 65, 76, 193, 75,
+    65, 128, 66, 65, 82, 128, 78, 85, 77, 69, 82, 73, 195, 84, 85, 82, 78,
+    69, 196, 66, 82, 65, 72, 77, 201, 80, 65, 128, 82, 65, 128, 89, 65, 128,
+    72, 85, 78, 71, 65, 82, 73, 65, 206, 83, 73, 88, 128, 84, 72, 85, 77,
+    194, 77, 65, 128, 66, 65, 82, 194, 69, 73, 71, 72, 84, 128, 66, 76, 79,
+    67, 203, 72, 65, 200, 76, 65, 128, 78, 79, 82, 84, 200, 83, 69, 86, 69,
+    78, 128, 84, 72, 79, 85, 83, 65, 78, 68, 128, 78, 65, 128, 78, 73, 78,
+    69, 128, 70, 85, 76, 76, 87, 73, 68, 84, 200, 76, 79, 78, 199, 66, 82,
+    65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 83, 65, 128, 84, 65, 128,
+    84, 65, 199, 68, 79, 77, 73, 78, 207, 90, 90, 89, 88, 128, 90, 90, 89,
+    84, 128, 90, 90, 89, 82, 88, 128, 90, 90, 89, 82, 128, 90, 90, 89, 80,
+    128, 90, 90, 89, 65, 128, 90, 90, 89, 128, 90, 90, 85, 88, 128, 90, 90,
+    85, 82, 88, 128, 90, 90, 85, 82, 128, 90, 90, 85, 80, 128, 90, 90, 85,
+    128, 90, 90, 83, 89, 65, 128, 90, 90, 83, 65, 128, 90, 90, 79, 88, 128,
+    90, 90, 79, 80, 128, 90, 90, 79, 128, 90, 90, 73, 88, 128, 90, 90, 73,
+    84, 128, 90, 90, 73, 80, 128, 90, 90, 73, 69, 88, 128, 90, 90, 73, 69,
+    84, 128, 90, 90, 73, 69, 80, 128, 90, 90, 73, 69, 128, 90, 90, 73, 128,
+    90, 90, 69, 88, 128, 90, 90, 69, 80, 128, 90, 90, 69, 69, 128, 90, 90,
+    69, 128, 90, 90, 65, 88, 128, 90, 90, 65, 84, 128, 90, 90, 65, 80, 128,
+    90, 90, 65, 65, 128, 90, 90, 65, 128, 90, 89, 71, 79, 83, 128, 90, 87,
+    83, 80, 128, 90, 87, 78, 74, 128, 90, 87, 78, 66, 83, 80, 128, 90, 87,
+    74, 128, 90, 87, 202, 90, 87, 65, 82, 65, 75, 65, 89, 128, 90, 87, 65,
+    128, 90, 85, 84, 128, 90, 85, 79, 88, 128, 90, 85, 79, 80, 128, 90, 85,
+    79, 128, 90, 85, 77, 128, 90, 85, 66, 85, 82, 128, 90, 85, 53, 128, 90,
+    85, 181, 90, 213, 90, 83, 72, 65, 128, 90, 82, 65, 128, 90, 81, 65, 80,
+    72, 193, 90, 79, 84, 128, 90, 79, 79, 128, 90, 79, 77, 66, 73, 69, 128,
+    90, 79, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90,
+    74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 80,
+    80, 69, 82, 45, 77, 79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, 73, 76,
+    68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, 68, 193,
+    90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, 89, 88,
+    128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, 82, 128,
+    90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, 72, 87,
+    65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, 82, 88,
+    128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, 88, 128,
+    90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, 90, 72,
+    79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, 79, 79,
+    128, 90, 72, 79, 73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69,
+    128, 90, 72, 73, 76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72,
+    69, 84, 128, 90, 72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128,
+    90, 72, 197, 90, 72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, 90, 72,
+    65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, 65, 73,
+    78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, 69, 85,
+    83, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, 82, 207, 90,
+    69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, 74, 65, 128,
+    90, 69, 66, 82, 193, 90, 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90,
+    65, 89, 73, 78, 45, 89, 79, 68, 72, 128, 90, 65, 89, 73, 78, 128, 90, 65,
+    89, 73, 206, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128,
+    90, 65, 82, 81, 65, 128, 90, 65, 82, 76, 128, 90, 65, 81, 69, 198, 90,
+    65, 78, 65, 66, 65, 90, 65, 210, 90, 65, 77, 88, 128, 90, 65, 76, 128,
+    90, 65, 204, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90,
+    65, 72, 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 65,
+    55, 128, 90, 193, 90, 48, 49, 54, 72, 128, 90, 48, 49, 54, 71, 128, 90,
+    48, 49, 54, 70, 128, 90, 48, 49, 54, 69, 128, 90, 48, 49, 54, 68, 128,
+    90, 48, 49, 54, 67, 128, 90, 48, 49, 54, 66, 128, 90, 48, 49, 54, 65,
+    128, 90, 48, 49, 54, 128, 90, 48, 49, 53, 73, 128, 90, 48, 49, 53, 72,
+    128, 90, 48, 49, 53, 71, 128, 90, 48, 49, 53, 70, 128, 90, 48, 49, 53,
+    69, 128, 90, 48, 49, 53, 68, 128, 90, 48, 49, 53, 67, 128, 90, 48, 49,
+    53, 66, 128, 90, 48, 49, 53, 65, 128, 90, 48, 49, 53, 128, 90, 48, 49,
+    52, 128, 90, 48, 49, 51, 128, 90, 48, 49, 50, 128, 90, 48, 49, 49, 128,
+    90, 48, 49, 48, 128, 90, 48, 48, 57, 128, 90, 48, 48, 56, 128, 90, 48,
+    48, 55, 128, 90, 48, 48, 54, 128, 90, 48, 48, 53, 65, 128, 90, 48, 48,
+    53, 128, 90, 48, 48, 52, 65, 128, 90, 48, 48, 52, 128, 90, 48, 48, 51,
+    66, 128, 90, 48, 48, 51, 65, 128, 90, 48, 48, 51, 128, 90, 48, 48, 50,
+    68, 128, 90, 48, 48, 50, 67, 128, 90, 48, 48, 50, 66, 128, 90, 48, 48,
+    50, 65, 128, 90, 48, 48, 50, 128, 90, 48, 48, 49, 128, 90, 128, 218, 89,
+    89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, 128, 89, 89, 82, 128, 89,
+    89, 80, 128, 89, 89, 69, 128, 89, 89, 65, 65, 128, 89, 89, 65, 128, 89,
+    89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, 89, 87, 73, 73, 128, 89,
+    87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, 128, 89, 87, 65, 128, 89,
+    86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, 128, 89, 85, 85, 75, 65,
+    76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 85, 128, 89, 85, 84, 128,
+    89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89,
+    85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85,
+    79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, 128, 89, 85, 79, 128,
+    89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, 128, 89, 85, 73, 128, 89,
+    85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200,
+    89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, 85, 45, 89, 69, 79,
+    128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, 89, 85, 45, 79, 128,
+    89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, 69, 128, 89,
+    85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, 45, 52, 128, 89, 85,
+    45, 51, 128, 89, 85, 45, 50, 128, 89, 85, 45, 49, 128, 89, 85, 128, 89,
+    213, 89, 82, 89, 128, 89, 80, 83, 73, 76, 73, 128, 89, 80, 79, 82, 82,
+    79, 73, 128, 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, 89, 80, 79, 75, 82,
+    73, 83, 73, 211, 89, 80, 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128,
+    89, 79, 89, 128, 89, 79, 88, 128, 89, 79, 87, 68, 128, 89, 79, 85, 84,
+    72, 70, 85, 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, 72, 70, 85, 204, 89,
+    79, 213, 89, 79, 84, 128, 89, 79, 212, 89, 79, 82, 73, 128, 89, 79, 81,
+    128, 89, 79, 209, 89, 79, 80, 128, 89, 79, 79, 128, 89, 79, 77, 79, 128,
+    89, 79, 71, 72, 128, 89, 79, 68, 128, 89, 79, 196, 89, 79, 65, 128, 89,
+    79, 45, 89, 79, 128, 89, 79, 45, 89, 69, 79, 128, 89, 79, 45, 89, 65, 69,
+    128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, 128, 89, 79, 45, 73, 128,
+    89, 79, 45, 69, 79, 128, 89, 79, 45, 65, 69, 128, 89, 79, 45, 65, 128,
+    89, 79, 45, 54, 128, 89, 79, 45, 53, 128, 89, 79, 45, 52, 128, 89, 79,
+    45, 51, 128, 89, 79, 45, 50, 128, 89, 79, 45, 49, 128, 89, 207, 89, 73,
+    90, 69, 84, 128, 89, 73, 88, 128, 89, 73, 87, 78, 128, 89, 73, 84, 128,
+    89, 73, 80, 128, 89, 73, 78, 71, 128, 89, 73, 73, 128, 89, 73, 72, 128,
+    89, 73, 199, 89, 73, 69, 88, 128, 89, 73, 69, 84, 128, 89, 73, 69, 80,
+    128, 89, 73, 69, 69, 128, 89, 73, 69, 128, 89, 73, 68, 68, 73, 83, 200,
+    89, 73, 45, 85, 128, 89, 73, 128, 89, 72, 69, 128, 89, 72, 65, 128, 89,
+    70, 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, 211, 89, 70, 69, 206, 89,
+    69, 90, 73, 68, 201, 89, 69, 89, 128, 89, 69, 87, 128, 89, 69, 85, 88,
+    128, 89, 69, 85, 82, 65, 69, 128, 89, 69, 85, 81, 128, 89, 69, 85, 77,
+    128, 89, 69, 85, 65, 69, 84, 128, 89, 69, 85, 65, 69, 128, 89, 69, 84,
+    73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45,
+    83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 89, 69, 83, 73, 69, 85,
+    78, 71, 45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 80,
+    65, 78, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 77, 73,
+    69, 85, 77, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79,
+    75, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72,
+    128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 72, 73, 69, 85, 72, 128, 89, 69,
+    83, 73, 69, 85, 78, 71, 128, 89, 69, 82, 85, 128, 89, 69, 82, 213, 89,
+    69, 82, 73, 128, 89, 69, 82, 65, 200, 89, 69, 82, 128, 89, 69, 79, 82,
+    73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, 89, 65, 128, 89, 69, 79,
+    45, 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 78, 73, 83, 69, 201, 89,
+    69, 78, 65, 80, 128, 89, 69, 78, 128, 89, 69, 206, 89, 69, 76, 76, 79,
+    87, 128, 89, 69, 76, 76, 79, 215, 89, 69, 73, 78, 128, 89, 69, 72, 128,
+    89, 69, 69, 71, 128, 89, 69, 69, 128, 89, 69, 65, 210, 89, 69, 65, 128,
+    89, 65, 90, 90, 128, 89, 65, 90, 72, 128, 89, 65, 90, 128, 89, 65, 89,
+    68, 128, 89, 65, 89, 65, 78, 78, 65, 128, 89, 65, 89, 128, 89, 65, 87,
+    78, 73, 78, 199, 89, 65, 87, 78, 128, 89, 65, 87, 128, 89, 65, 86, 128,
+    89, 65, 85, 128, 89, 65, 84, 84, 128, 89, 65, 84, 73, 128, 89, 65, 84,
+    72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, 89, 65, 83, 72, 128, 89,
+    65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, 78, 128, 89, 65, 82, 128,
+    89, 65, 210, 89, 65, 81, 128, 89, 65, 80, 128, 89, 65, 78, 83, 65, 89,
+    65, 128, 89, 65, 78, 71, 128, 89, 65, 78, 199, 89, 65, 78, 128, 89, 65,
+    77, 79, 75, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 65, 77, 128,
+    89, 65, 76, 128, 89, 65, 75, 72, 72, 128, 89, 65, 75, 72, 128, 89, 65,
+    75, 65, 83, 72, 128, 89, 65, 75, 128, 89, 65, 74, 85, 82, 86, 69, 68, 73,
+    195, 89, 65, 74, 128, 89, 65, 73, 128, 89, 65, 72, 72, 128, 89, 65, 72,
+    128, 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, 128, 89, 65, 71, 72, 128,
+    89, 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, 128, 89, 65, 69, 77, 77,
+    65, 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, 68, 72, 128, 89, 65, 68,
+    68, 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, 89, 65, 66, 72, 128, 89,
+    65, 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, 65, 73, 128, 89, 65, 65,
+    68, 79, 128, 89, 65, 45, 89, 79, 128, 89, 65, 45, 85, 128, 89, 65, 45,
+    79, 128, 89, 65, 45, 53, 128, 89, 65, 45, 52, 128, 89, 65, 45, 51, 128,
+    89, 65, 45, 50, 128, 89, 65, 45, 49, 128, 89, 48, 48, 56, 128, 89, 48,
+    48, 55, 128, 89, 48, 48, 54, 128, 89, 48, 48, 53, 128, 89, 48, 48, 52,
+    128, 89, 48, 48, 51, 128, 89, 48, 48, 50, 128, 89, 48, 48, 49, 65, 128,
+    89, 48, 48, 49, 128, 89, 45, 67, 82, 69, 197, 88, 89, 88, 128, 88, 89,
+    85, 128, 88, 89, 84, 128, 88, 89, 82, 88, 128, 88, 89, 82, 128, 88, 89,
+    80, 128, 88, 89, 79, 79, 74, 128, 88, 89, 79, 79, 128, 88, 89, 79, 128,
+    88, 89, 73, 128, 88, 89, 69, 69, 205, 88, 89, 69, 69, 128, 88, 89, 69,
+    128, 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, 89, 128, 88, 87, 73, 128,
+    88, 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, 65, 65, 128, 88, 87, 65,
+    128, 88, 87, 128, 88, 215, 88, 86, 69, 128, 88, 86, 65, 128, 88, 85, 79,
+    88, 128, 88, 85, 79, 128, 88, 85, 128, 88, 83, 72, 65, 65, 89, 65, 84,
+    72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, 84, 128, 88, 79, 82, 128,
+    88, 79, 80, 72, 128, 88, 79, 80, 128, 88, 79, 65, 128, 88, 79, 128, 88,
+    73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, 206, 88, 73, 80, 128, 88,
+    73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, 69, 80, 128, 88, 73, 69,
+    128, 88, 73, 65, 78, 71, 81, 201, 88, 73, 65, 66, 128, 88, 73, 128, 88,
+    72, 69, 89, 78, 128, 88, 71, 128, 88, 69, 89, 78, 128, 88, 69, 83, 84,
+    69, 211, 88, 69, 72, 128, 88, 69, 69, 128, 88, 69, 128, 88, 65, 85, 83,
+    128, 88, 65, 85, 128, 88, 65, 80, 72, 128, 88, 65, 78, 128, 88, 65, 65,
+    128, 88, 65, 128, 88, 48, 48, 56, 65, 128, 88, 48, 48, 56, 128, 88, 48,
+    48, 55, 128, 88, 48, 48, 54, 65, 128, 88, 48, 48, 54, 128, 88, 48, 48,
+    53, 128, 88, 48, 48, 52, 66, 128, 88, 48, 48, 52, 65, 128, 88, 48, 48,
+    52, 128, 88, 48, 48, 51, 128, 88, 48, 48, 50, 128, 88, 48, 48, 49, 128,
+    88, 45, 216, 87, 90, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86,
+    73, 128, 87, 86, 69, 128, 87, 86, 65, 128, 87, 86, 128, 87, 85, 80, 128,
+    87, 85, 79, 88, 128, 87, 85, 79, 80, 128, 87, 85, 79, 128, 87, 85, 78,
+    74, 207, 87, 85, 78, 128, 87, 85, 76, 85, 128, 87, 85, 76, 213, 87, 85,
+    73, 128, 87, 85, 69, 128, 87, 85, 65, 69, 84, 128, 87, 85, 65, 69, 78,
+    128, 87, 85, 128, 87, 82, 217, 87, 82, 79, 78, 71, 128, 87, 82, 73, 83,
+    212, 87, 82, 73, 78, 75, 76, 69, 83, 128, 87, 82, 73, 78, 75, 76, 69,
+    211, 87, 82, 73, 78, 75, 76, 69, 68, 128, 87, 82, 69, 83, 84, 76, 69, 82,
+    83, 128, 87, 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, 200, 87, 82,
+    65, 80, 80, 69, 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, 87, 79, 87,
+    128, 87, 79, 82, 83, 72, 73, 80, 128, 87, 79, 82, 82, 73, 69, 196, 87,
+    79, 82, 77, 128, 87, 79, 82, 76, 196, 87, 79, 82, 75, 69, 82, 128, 87,
+    79, 82, 75, 128, 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69,
+    128, 87, 79, 82, 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79,
+    76, 128, 87, 79, 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128,
+    87, 79, 78, 128, 87, 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69,
+    206, 87, 79, 77, 65, 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65,
+    206, 87, 79, 76, 79, 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87,
+    79, 65, 128, 87, 79, 45, 55, 128, 87, 79, 45, 54, 128, 87, 79, 45, 53,
+    128, 87, 79, 45, 52, 128, 87, 79, 45, 51, 128, 87, 79, 45, 50, 128, 87,
+    79, 45, 49, 128, 87, 73, 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78,
+    128, 87, 73, 84, 72, 73, 206, 87, 73, 82, 69, 196, 87, 73, 78, 84, 69,
+    82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 75, 128, 87, 73, 78,
+    74, 65, 128, 87, 73, 78, 71, 83, 128, 87, 73, 78, 69, 128, 87, 73, 78,
+    197, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, 79, 87, 128, 87, 73, 78,
+    68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87, 73, 76, 84, 69, 196, 87,
+    73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, 217, 87, 73, 71, 71, 76,
+    69, 83, 128, 87, 73, 68, 84, 72, 128, 87, 73, 68, 69, 78, 73, 78, 199,
+    87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 87, 73, 65,
+    78, 71, 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, 128, 87, 73, 45, 53,
+    128, 87, 73, 45, 52, 128, 87, 73, 45, 51, 128, 87, 73, 45, 50, 128, 87,
+    73, 45, 49, 128, 87, 72, 79, 76, 197, 87, 72, 73, 84, 69, 45, 70, 69, 65,
+    84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, 87, 72, 69, 69, 76, 69,
+    196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 82, 128, 87, 72, 69, 69, 76, 67,
+    72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, 69, 69, 204, 87, 72,
+    69, 65, 84, 128, 87, 72, 65, 76, 69, 128, 87, 72, 128, 87, 71, 128, 87,
+    69, 88, 128, 87, 69, 85, 88, 128, 87, 69, 212, 87, 69, 83, 84, 69, 82,
+    206, 87, 69, 83, 84, 45, 67, 82, 69, 197, 87, 69, 83, 84, 128, 87, 69,
+    83, 212, 87, 69, 80, 128, 87, 69, 79, 128, 87, 69, 78, 128, 87, 69, 76,
+    76, 128, 87, 69, 73, 71, 72, 212, 87, 69, 73, 69, 82, 83, 84, 82, 65, 83,
+    211, 87, 69, 73, 128, 87, 69, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84,
+    65, 73, 76, 69, 196, 87, 69, 68, 71, 69, 128, 87, 69, 68, 68, 73, 78, 71,
+    128, 87, 69, 66, 128, 87, 69, 65, 82, 217, 87, 69, 65, 80, 79, 78, 128,
+    87, 69, 45, 52, 128, 87, 69, 45, 51, 128, 87, 69, 45, 50, 128, 87, 69,
+    45, 49, 128, 87, 67, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 87,
+    65, 88, 73, 78, 199, 87, 65, 88, 128, 87, 65, 87, 45, 65, 89, 73, 78, 45,
+    82, 69, 83, 72, 128, 87, 65, 87, 128, 87, 65, 215, 87, 65, 86, 217, 87,
+    65, 86, 73, 78, 199, 87, 65, 86, 69, 83, 128, 87, 65, 86, 69, 128, 87,
+    65, 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 128, 87, 65, 84, 69,
+    82, 77, 69, 76, 79, 78, 128, 87, 65, 84, 69, 82, 128, 87, 65, 84, 69,
+    210, 87, 65, 84, 67, 72, 128, 87, 65, 84, 128, 87, 65, 83, 84, 73, 78,
+    71, 128, 87, 65, 83, 84, 69, 66, 65, 83, 75, 69, 84, 128, 87, 65, 83, 83,
+    65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, 87, 65, 83, 76, 193,
+    87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, 76, 76, 65, 205, 87,
+    65, 82, 78, 73, 78, 199, 87, 65, 82, 65, 78, 199, 87, 65, 81, 70, 65,
+    128, 87, 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85,
+    79, 81, 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 68, 128,
+    87, 65, 78, 67, 72, 207, 87, 65, 78, 128, 87, 65, 76, 76, 80, 76, 65, 78,
+    197, 87, 65, 76, 76, 128, 87, 65, 76, 204, 87, 65, 76, 75, 128, 87, 65,
+    76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, 65, 73, 83, 84, 128, 87,
+    65, 73, 128, 87, 65, 70, 70, 76, 69, 128, 87, 65, 69, 78, 128, 87, 65,
+    69, 128, 87, 65, 68, 68, 65, 128, 87, 65, 65, 86, 85, 128, 87, 65, 45,
+    53, 128, 87, 65, 45, 52, 128, 87, 65, 45, 51, 128, 87, 65, 45, 50, 128,
+    87, 65, 45, 49, 128, 87, 48, 50, 53, 128, 87, 48, 50, 52, 65, 128, 87,
+    48, 50, 52, 128, 87, 48, 50, 51, 128, 87, 48, 50, 50, 128, 87, 48, 50,
+    49, 128, 87, 48, 50, 48, 128, 87, 48, 49, 57, 128, 87, 48, 49, 56, 65,
+    128, 87, 48, 49, 56, 128, 87, 48, 49, 55, 65, 128, 87, 48, 49, 55, 128,
+    87, 48, 49, 54, 128, 87, 48, 49, 53, 128, 87, 48, 49, 52, 65, 128, 87,
+    48, 49, 52, 128, 87, 48, 49, 51, 128, 87, 48, 49, 50, 128, 87, 48, 49,
+    49, 128, 87, 48, 49, 48, 65, 128, 87, 48, 49, 48, 128, 87, 48, 48, 57,
+    65, 128, 87, 48, 48, 57, 128, 87, 48, 48, 56, 128, 87, 48, 48, 55, 128,
+    87, 48, 48, 54, 128, 87, 48, 48, 53, 128, 87, 48, 48, 52, 128, 87, 48,
+    48, 51, 65, 128, 87, 48, 48, 51, 128, 87, 48, 48, 50, 128, 87, 48, 48,
+    49, 128, 86, 90, 77, 69, 84, 128, 86, 89, 88, 128, 86, 89, 84, 128, 86,
+    89, 82, 88, 128, 86, 89, 82, 128, 86, 89, 80, 128, 86, 89, 128, 86, 87,
+    74, 128, 86, 87, 65, 128, 86, 87, 128, 86, 85, 88, 128, 86, 85, 85, 128,
+    86, 85, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, 85, 80, 128,
+    86, 85, 76, 71, 65, 210, 86, 85, 76, 67, 65, 78, 85, 83, 128, 86, 85, 69,
+    81, 128, 86, 84, 83, 128, 86, 84, 128, 86, 83, 57, 57, 128, 86, 83, 57,
+    56, 128, 86, 83, 57, 55, 128, 86, 83, 57, 54, 128, 86, 83, 57, 53, 128,
+    86, 83, 57, 52, 128, 86, 83, 57, 51, 128, 86, 83, 57, 50, 128, 86, 83,
+    57, 49, 128, 86, 83, 57, 48, 128, 86, 83, 57, 128, 86, 83, 56, 57, 128,
+    86, 83, 56, 56, 128, 86, 83, 56, 55, 128, 86, 83, 56, 54, 128, 86, 83,
+    56, 53, 128, 86, 83, 56, 52, 128, 86, 83, 56, 51, 128, 86, 83, 56, 50,
+    128, 86, 83, 56, 49, 128, 86, 83, 56, 48, 128, 86, 83, 56, 128, 86, 83,
+    55, 57, 128, 86, 83, 55, 56, 128, 86, 83, 55, 55, 128, 86, 83, 55, 54,
+    128, 86, 83, 55, 53, 128, 86, 83, 55, 52, 128, 86, 83, 55, 51, 128, 86,
+    83, 55, 50, 128, 86, 83, 55, 49, 128, 86, 83, 55, 48, 128, 86, 83, 55,
+    128, 86, 83, 54, 57, 128, 86, 83, 54, 56, 128, 86, 83, 54, 55, 128, 86,
+    83, 54, 54, 128, 86, 83, 54, 53, 128, 86, 83, 54, 52, 128, 86, 83, 54,
+    51, 128, 86, 83, 54, 50, 128, 86, 83, 54, 49, 128, 86, 83, 54, 48, 128,
+    86, 83, 54, 128, 86, 83, 53, 57, 128, 86, 83, 53, 56, 128, 86, 83, 53,
+    55, 128, 86, 83, 53, 54, 128, 86, 83, 53, 53, 128, 86, 83, 53, 52, 128,
+    86, 83, 53, 51, 128, 86, 83, 53, 50, 128, 86, 83, 53, 49, 128, 86, 83,
+    53, 48, 128, 86, 83, 53, 128, 86, 83, 52, 57, 128, 86, 83, 52, 56, 128,
+    86, 83, 52, 55, 128, 86, 83, 52, 54, 128, 86, 83, 52, 53, 128, 86, 83,
+    52, 52, 128, 86, 83, 52, 51, 128, 86, 83, 52, 50, 128, 86, 83, 52, 49,
+    128, 86, 83, 52, 48, 128, 86, 83, 52, 128, 86, 83, 51, 57, 128, 86, 83,
+    51, 56, 128, 86, 83, 51, 55, 128, 86, 83, 51, 54, 128, 86, 83, 51, 53,
+    128, 86, 83, 51, 52, 128, 86, 83, 51, 51, 128, 86, 83, 51, 50, 128, 86,
+    83, 51, 49, 128, 86, 83, 51, 48, 128, 86, 83, 51, 128, 86, 83, 50, 57,
+    128, 86, 83, 50, 56, 128, 86, 83, 50, 55, 128, 86, 83, 50, 54, 128, 86,
+    83, 50, 53, 54, 128, 86, 83, 50, 53, 53, 128, 86, 83, 50, 53, 52, 128,
+    86, 83, 50, 53, 51, 128, 86, 83, 50, 53, 50, 128, 86, 83, 50, 53, 49,
+    128, 86, 83, 50, 53, 48, 128, 86, 83, 50, 53, 128, 86, 83, 50, 52, 57,
+    128, 86, 83, 50, 52, 56, 128, 86, 83, 50, 52, 55, 128, 86, 83, 50, 52,
+    54, 128, 86, 83, 50, 52, 53, 128, 86, 83, 50, 52, 52, 128, 86, 83, 50,
+    52, 51, 128, 86, 83, 50, 52, 50, 128, 86, 83, 50, 52, 49, 128, 86, 83,
+    50, 52, 48, 128, 86, 83, 50, 52, 128, 86, 83, 50, 51, 57, 128, 86, 83,
+    50, 51, 56, 128, 86, 83, 50, 51, 55, 128, 86, 83, 50, 51, 54, 128, 86,
+    83, 50, 51, 53, 128, 86, 83, 50, 51, 52, 128, 86, 83, 50, 51, 51, 128,
+    86, 83, 50, 51, 50, 128, 86, 83, 50, 51, 49, 128, 86, 83, 50, 51, 48,
+    128, 86, 83, 50, 51, 128, 86, 83, 50, 50, 57, 128, 86, 83, 50, 50, 56,
+    128, 86, 83, 50, 50, 55, 128, 86, 83, 50, 50, 54, 128, 86, 83, 50, 50,
+    53, 128, 86, 83, 50, 50, 52, 128, 86, 83, 50, 50, 51, 128, 86, 83, 50,
+    50, 50, 128, 86, 83, 50, 50, 49, 128, 86, 83, 50, 50, 48, 128, 86, 83,
+    50, 50, 128, 86, 83, 50, 49, 57, 128, 86, 83, 50, 49, 56, 128, 86, 83,
+    50, 49, 55, 128, 86, 83, 50, 49, 54, 128, 86, 83, 50, 49, 53, 128, 86,
+    83, 50, 49, 52, 128, 86, 83, 50, 49, 51, 128, 86, 83, 50, 49, 50, 128,
+    86, 83, 50, 49, 49, 128, 86, 83, 50, 49, 48, 128, 86, 83, 50, 49, 128,
+    86, 83, 50, 48, 57, 128, 86, 83, 50, 48, 56, 128, 86, 83, 50, 48, 55,
+    128, 86, 83, 50, 48, 54, 128, 86, 83, 50, 48, 53, 128, 86, 83, 50, 48,
+    52, 128, 86, 83, 50, 48, 51, 128, 86, 83, 50, 48, 50, 128, 86, 83, 50,
+    48, 49, 128, 86, 83, 50, 48, 48, 128, 86, 83, 50, 48, 128, 86, 83, 50,
+    128, 86, 83, 49, 57, 57, 128, 86, 83, 49, 57, 56, 128, 86, 83, 49, 57,
+    55, 128, 86, 83, 49, 57, 54, 128, 86, 83, 49, 57, 53, 128, 86, 83, 49,
+    57, 52, 128, 86, 83, 49, 57, 51, 128, 86, 83, 49, 57, 50, 128, 86, 83,
+    49, 57, 49, 128, 86, 83, 49, 57, 48, 128, 86, 83, 49, 57, 128, 86, 83,
+    49, 56, 57, 128, 86, 83, 49, 56, 56, 128, 86, 83, 49, 56, 55, 128, 86,
+    83, 49, 56, 54, 128, 86, 83, 49, 56, 53, 128, 86, 83, 49, 56, 52, 128,
+    86, 83, 49, 56, 51, 128, 86, 83, 49, 56, 50, 128, 86, 83, 49, 56, 49,
+    128, 86, 83, 49, 56, 48, 128, 86, 83, 49, 56, 128, 86, 83, 49, 55, 57,
+    128, 86, 83, 49, 55, 56, 128, 86, 83, 49, 55, 55, 128, 86, 83, 49, 55,
+    54, 128, 86, 83, 49, 55, 53, 128, 86, 83, 49, 55, 52, 128, 86, 83, 49,
+    55, 51, 128, 86, 83, 49, 55, 50, 128, 86, 83, 49, 55, 49, 128, 86, 83,
+    49, 55, 48, 128, 86, 83, 49, 55, 128, 86, 83, 49, 54, 57, 128, 86, 83,
+    49, 54, 56, 128, 86, 83, 49, 54, 55, 128, 86, 83, 49, 54, 54, 128, 86,
+    83, 49, 54, 53, 128, 86, 83, 49, 54, 52, 128, 86, 83, 49, 54, 51, 128,
+    86, 83, 49, 54, 50, 128, 86, 83, 49, 54, 49, 128, 86, 83, 49, 54, 48,
+    128, 86, 83, 49, 54, 128, 86, 83, 49, 53, 57, 128, 86, 83, 49, 53, 56,
+    128, 86, 83, 49, 53, 55, 128, 86, 83, 49, 53, 54, 128, 86, 83, 49, 53,
+    53, 128, 86, 83, 49, 53, 52, 128, 86, 83, 49, 53, 51, 128, 86, 83, 49,
+    53, 50, 128, 86, 83, 49, 53, 49, 128, 86, 83, 49, 53, 48, 128, 86, 83,
+    49, 53, 128, 86, 83, 49, 52, 57, 128, 86, 83, 49, 52, 56, 128, 86, 83,
+    49, 52, 55, 128, 86, 83, 49, 52, 54, 128, 86, 83, 49, 52, 53, 128, 86,
+    83, 49, 52, 52, 128, 86, 83, 49, 52, 51, 128, 86, 83, 49, 52, 50, 128,
+    86, 83, 49, 52, 49, 128, 86, 83, 49, 52, 48, 128, 86, 83, 49, 52, 128,
+    86, 83, 49, 51, 57, 128, 86, 83, 49, 51, 56, 128, 86, 83, 49, 51, 55,
+    128, 86, 83, 49, 51, 54, 128, 86, 83, 49, 51, 53, 128, 86, 83, 49, 51,
+    52, 128, 86, 83, 49, 51, 51, 128, 86, 83, 49, 51, 50, 128, 86, 83, 49,
+    51, 49, 128, 86, 83, 49, 51, 48, 128, 86, 83, 49, 51, 128, 86, 83, 49,
+    50, 57, 128, 86, 83, 49, 50, 56, 128, 86, 83, 49, 50, 55, 128, 86, 83,
+    49, 50, 54, 128, 86, 83, 49, 50, 53, 128, 86, 83, 49, 50, 52, 128, 86,
+    83, 49, 50, 51, 128, 86, 83, 49, 50, 50, 128, 86, 83, 49, 50, 49, 128,
+    86, 83, 49, 50, 48, 128, 86, 83, 49, 50, 128, 86, 83, 49, 49, 57, 128,
+    86, 83, 49, 49, 56, 128, 86, 83, 49, 49, 55, 128, 86, 83, 49, 49, 54,
+    128, 86, 83, 49, 49, 53, 128, 86, 83, 49, 49, 52, 128, 86, 83, 49, 49,
+    51, 128, 86, 83, 49, 49, 50, 128, 86, 83, 49, 49, 49, 128, 86, 83, 49,
+    49, 48, 128, 86, 83, 49, 49, 128, 86, 83, 49, 48, 57, 128, 86, 83, 49,
+    48, 56, 128, 86, 83, 49, 48, 55, 128, 86, 83, 49, 48, 54, 128, 86, 83,
+    49, 48, 53, 128, 86, 83, 49, 48, 52, 128, 86, 83, 49, 48, 51, 128, 86,
+    83, 49, 48, 50, 128, 86, 83, 49, 48, 49, 128, 86, 83, 49, 48, 48, 128,
+    86, 83, 49, 48, 128, 86, 83, 49, 128, 86, 83, 128, 86, 82, 65, 67, 72,
+    89, 128, 86, 79, 88, 128, 86, 79, 87, 69, 76, 45, 67, 65, 82, 82, 73, 69,
+    210, 86, 79, 87, 128, 86, 79, 85, 128, 86, 79, 84, 128, 86, 79, 211, 86,
+    79, 80, 128, 86, 79, 79, 73, 128, 86, 79, 79, 128, 86, 79, 77, 73, 84,
+    73, 78, 71, 128, 86, 79, 77, 128, 86, 79, 76, 85, 77, 197, 86, 79, 76,
+    84, 65, 71, 197, 86, 79, 76, 76, 69, 89, 66, 65, 76, 76, 128, 86, 79, 76,
+    67, 65, 78, 79, 128, 86, 79, 76, 65, 80, 85, 203, 86, 79, 73, 68, 69,
+    196, 86, 79, 73, 196, 86, 79, 73, 67, 73, 78, 71, 128, 86, 79, 73, 67,
+    69, 76, 69, 83, 211, 86, 79, 73, 67, 69, 196, 86, 79, 68, 128, 86, 79,
+    67, 65, 76, 73, 90, 65, 84, 73, 79, 206, 86, 79, 67, 65, 204, 86, 79,
+    128, 86, 73, 89, 79, 128, 86, 73, 88, 128, 86, 73, 84, 82, 73, 79, 76,
+    45, 50, 128, 86, 73, 84, 82, 73, 79, 76, 128, 86, 73, 84, 65, 69, 45, 50,
+    128, 86, 73, 84, 65, 69, 128, 86, 73, 84, 128, 86, 73, 83, 73, 71, 79,
+    84, 72, 73, 195, 86, 73, 83, 65, 82, 71, 65, 89, 65, 128, 86, 73, 83, 65,
+    82, 71, 65, 128, 86, 73, 83, 65, 82, 71, 193, 86, 73, 82, 73, 65, 77,
+    128, 86, 73, 82, 71, 79, 128, 86, 73, 82, 71, 65, 128, 86, 73, 82, 65,
+    77, 65, 128, 86, 73, 80, 128, 86, 73, 79, 76, 73, 78, 128, 86, 73, 78,
+    69, 71, 65, 82, 45, 51, 128, 86, 73, 78, 69, 71, 65, 82, 45, 50, 128, 86,
+    73, 78, 69, 71, 65, 82, 128, 86, 73, 78, 69, 71, 65, 210, 86, 73, 78, 69,
+    128, 86, 73, 78, 197, 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, 128,
+    86, 73, 73, 128, 86, 73, 71, 73, 78, 84, 73, 76, 69, 128, 86, 73, 69, 88,
+    128, 86, 73, 69, 87, 73, 78, 199, 86, 73, 69, 87, 68, 65, 84, 193, 86,
+    73, 69, 84, 78, 65, 77, 69, 83, 197, 86, 73, 69, 84, 128, 86, 73, 69,
+    212, 86, 73, 69, 80, 128, 86, 73, 69, 128, 86, 73, 68, 74, 45, 50, 128,
+    86, 73, 68, 74, 128, 86, 73, 68, 69, 79, 67, 65, 83, 83, 69, 84, 84, 69,
+    128, 86, 73, 68, 69, 207, 86, 73, 68, 65, 128, 86, 73, 67, 84, 79, 82,
+    217, 86, 73, 66, 82, 65, 84, 73, 79, 206, 86, 72, 65, 128, 86, 70, 65,
+    128, 86, 69, 89, 90, 128, 86, 69, 88, 128, 86, 69, 87, 128, 86, 69, 215,
+    86, 69, 85, 88, 128, 86, 69, 85, 77, 128, 86, 69, 85, 65, 69, 80, 69, 78,
+    128, 86, 69, 85, 65, 69, 128, 86, 69, 83, 84, 65, 128, 86, 69, 83, 84,
+    128, 86, 69, 83, 83, 69, 204, 86, 69, 82, 217, 86, 69, 82, 84, 73, 67,
+    65, 76, 76, 89, 128, 86, 69, 82, 84, 73, 67, 65, 76, 76, 217, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 54, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 54, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45,
+    48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 50, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 49, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 54, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 53, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 53, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45,
+    48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 51, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 50, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 53, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 53, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 52, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45,
+    48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 52, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 51, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 52, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 52, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 52, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45,
+    48, 54, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 53, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 52, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 51, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 51, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 51, 45, 48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 51, 45,
+    48, 48, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 54, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 53, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 50, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 50, 45, 48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45,
+    48, 49, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 50, 45, 48, 48, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 54, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 49, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 49, 45, 48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45,
+    48, 50, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 49, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 49, 45, 48, 48, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 54, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 45, 48, 48, 45, 48, 53, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45,
+    48, 48, 45, 48, 52, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45,
+    48, 51, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 50, 128,
+    86, 69, 82, 84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 49, 128, 86, 69, 82,
+    84, 73, 67, 65, 76, 45, 48, 48, 45, 48, 48, 128, 86, 69, 82, 84, 73, 67,
+    65, 76, 128, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86, 69, 82, 83, 197,
+    86, 69, 82, 71, 69, 128, 86, 69, 82, 68, 73, 71, 82, 73, 83, 128, 86, 69,
+    82, 128, 86, 69, 80, 128, 86, 69, 78, 68, 128, 86, 69, 76, 73, 128, 86,
+    69, 73, 76, 128, 86, 69, 72, 73, 67, 76, 69, 128, 86, 69, 72, 128, 86,
+    69, 200, 86, 69, 69, 128, 86, 69, 197, 86, 69, 68, 69, 128, 86, 69, 67,
+    84, 79, 210, 86, 65, 89, 65, 78, 78, 65, 128, 86, 65, 88, 128, 86, 65,
+    86, 128, 86, 65, 214, 86, 65, 85, 128, 86, 65, 84, 72, 89, 128, 86, 65,
+    84, 128, 86, 65, 83, 84, 78, 69, 83, 211, 86, 65, 83, 73, 83, 128, 86,
+    65, 82, 89, 211, 86, 65, 82, 73, 75, 65, 128, 86, 65, 82, 73, 65, 78, 84,
+    128, 86, 65, 82, 73, 65, 78, 212, 86, 65, 82, 73, 65, 128, 86, 65, 82,
+    73, 193, 86, 65, 82, 69, 73, 65, 201, 86, 65, 82, 69, 73, 193, 86, 65,
+    82, 65, 65, 75, 65, 78, 128, 86, 65, 80, 79, 85, 82, 83, 128, 86, 65, 80,
+    128, 86, 65, 78, 69, 128, 86, 65, 77, 80, 73, 82, 69, 128, 86, 65, 77,
+    65, 71, 79, 77, 85, 75, 72, 65, 128, 86, 65, 77, 65, 71, 79, 77, 85, 75,
+    72, 193, 86, 65, 76, 76, 69, 89, 128, 86, 65, 75, 65, 73, 89, 65, 82, 65,
+    65, 128, 86, 65, 74, 128, 86, 65, 73, 128, 86, 65, 72, 128, 86, 65, 200,
+    86, 65, 65, 86, 85, 128, 86, 65, 65, 128, 86, 193, 86, 48, 52, 48, 65,
+    128, 86, 48, 52, 48, 128, 86, 48, 51, 57, 128, 86, 48, 51, 56, 128, 86,
+    48, 51, 55, 65, 128, 86, 48, 51, 55, 128, 86, 48, 51, 54, 128, 86, 48,
+    51, 53, 128, 86, 48, 51, 52, 128, 86, 48, 51, 51, 65, 128, 86, 48, 51,
+    51, 128, 86, 48, 51, 50, 128, 86, 48, 51, 49, 65, 128, 86, 48, 51, 49,
+    128, 86, 48, 51, 48, 65, 128, 86, 48, 51, 48, 128, 86, 48, 50, 57, 65,
+    128, 86, 48, 50, 57, 128, 86, 48, 50, 56, 65, 128, 86, 48, 50, 56, 128,
+    86, 48, 50, 55, 128, 86, 48, 50, 54, 128, 86, 48, 50, 53, 128, 86, 48,
+    50, 52, 128, 86, 48, 50, 51, 65, 128, 86, 48, 50, 51, 128, 86, 48, 50,
+    50, 128, 86, 48, 50, 49, 128, 86, 48, 50, 48, 76, 128, 86, 48, 50, 48,
+    75, 128, 86, 48, 50, 48, 74, 128, 86, 48, 50, 48, 73, 128, 86, 48, 50,
+    48, 72, 128, 86, 48, 50, 48, 71, 128, 86, 48, 50, 48, 70, 128, 86, 48,
+    50, 48, 69, 128, 86, 48, 50, 48, 68, 128, 86, 48, 50, 48, 67, 128, 86,
+    48, 50, 48, 66, 128, 86, 48, 50, 48, 65, 128, 86, 48, 50, 48, 128, 86,
+    48, 49, 57, 128, 86, 48, 49, 56, 128, 86, 48, 49, 55, 128, 86, 48, 49,
+    54, 128, 86, 48, 49, 53, 128, 86, 48, 49, 52, 128, 86, 48, 49, 51, 128,
+    86, 48, 49, 50, 66, 128, 86, 48, 49, 50, 65, 128, 86, 48, 49, 50, 128,
+    86, 48, 49, 49, 67, 128, 86, 48, 49, 49, 66, 128, 86, 48, 49, 49, 65,
+    128, 86, 48, 49, 49, 128, 86, 48, 49, 48, 128, 86, 48, 48, 57, 128, 86,
+    48, 48, 56, 128, 86, 48, 48, 55, 66, 128, 86, 48, 48, 55, 65, 128, 86,
+    48, 48, 55, 128, 86, 48, 48, 54, 128, 86, 48, 48, 53, 128, 86, 48, 48,
+    52, 128, 86, 48, 48, 51, 128, 86, 48, 48, 50, 65, 128, 86, 48, 48, 50,
+    128, 86, 48, 48, 49, 73, 128, 86, 48, 48, 49, 72, 128, 86, 48, 48, 49,
+    71, 128, 86, 48, 48, 49, 70, 128, 86, 48, 48, 49, 69, 128, 86, 48, 48,
+    49, 68, 128, 86, 48, 48, 49, 67, 128, 86, 48, 48, 49, 66, 128, 86, 48,
+    48, 49, 65, 128, 86, 48, 48, 49, 128, 85, 90, 85, 128, 85, 90, 72, 65,
+    75, 75, 85, 128, 85, 90, 51, 128, 85, 90, 179, 85, 89, 65, 78, 78, 65,
+    128, 85, 89, 128, 85, 87, 85, 128, 85, 85, 89, 65, 78, 78, 65, 128, 85,
+    85, 85, 85, 128, 85, 85, 85, 51, 128, 85, 85, 85, 50, 128, 85, 85, 69,
+    128, 85, 84, 85, 75, 73, 128, 85, 83, 83, 85, 51, 128, 85, 83, 83, 85,
+    128, 85, 83, 72, 88, 128, 85, 83, 72, 85, 77, 88, 128, 85, 83, 72, 69,
+    78, 78, 65, 128, 85, 83, 72, 50, 128, 85, 83, 72, 128, 85, 83, 200, 85,
+    83, 69, 196, 85, 83, 69, 45, 50, 128, 85, 83, 69, 45, 49, 128, 85, 83,
+    69, 128, 85, 83, 197, 85, 82, 85, 218, 85, 82, 85, 83, 128, 85, 82, 85,
+    68, 65, 128, 85, 82, 85, 68, 193, 85, 82, 85, 128, 85, 82, 213, 85, 82,
+    78, 128, 85, 82, 73, 78, 69, 128, 85, 82, 73, 51, 128, 85, 82, 73, 128,
+    85, 82, 65, 78, 85, 83, 128, 85, 82, 65, 128, 85, 82, 52, 128, 85, 82,
+    50, 128, 85, 82, 178, 85, 210, 85, 80, 87, 65, 82, 68, 83, 128, 85, 80,
+    87, 65, 82, 68, 211, 85, 80, 87, 65, 82, 68, 128, 85, 80, 87, 65, 82,
+    196, 85, 80, 84, 85, 82, 78, 128, 85, 80, 83, 73, 76, 79, 78, 128, 85,
+    80, 83, 73, 76, 79, 206, 85, 80, 83, 73, 68, 69, 45, 68, 79, 87, 206, 85,
+    80, 82, 73, 71, 72, 212, 85, 80, 80, 69, 82, 128, 85, 80, 65, 68, 72, 77,
+    65, 78, 73, 89, 65, 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, 78, 199, 85,
+    79, 78, 128, 85, 79, 71, 128, 85, 78, 78, 128, 85, 78, 77, 65, 82, 82,
+    73, 69, 196, 85, 78, 75, 78, 79, 87, 78, 128, 85, 78, 75, 128, 85, 78,
+    73, 86, 69, 82, 83, 65, 204, 85, 78, 73, 84, 89, 128, 85, 78, 73, 84, 69,
+    196, 85, 78, 73, 84, 128, 85, 78, 73, 212, 85, 78, 73, 79, 78, 128, 85,
+    78, 73, 79, 206, 85, 78, 73, 70, 79, 82, 77, 128, 85, 78, 73, 70, 73, 69,
+    196, 85, 78, 73, 67, 79, 82, 206, 85, 78, 69, 86, 69, 206, 85, 78, 68,
+    207, 85, 78, 68, 69, 82, 84, 73, 69, 128, 85, 78, 68, 69, 82, 76, 73, 78,
+    197, 85, 78, 68, 69, 82, 68, 79, 84, 128, 85, 78, 68, 69, 82, 66, 65, 82,
+    128, 85, 78, 68, 69, 82, 128, 85, 78, 68, 69, 210, 85, 78, 67, 73, 193,
+    85, 78, 67, 69, 82, 84, 65, 73, 78, 84, 217, 85, 78, 66, 76, 69, 78, 68,
+    69, 196, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, 128, 85, 78, 65, 80,
+    128, 85, 78, 65, 77, 85, 83, 69, 196, 85, 78, 65, 128, 85, 206, 85, 77,
+    85, 77, 128, 85, 77, 85, 205, 85, 77, 66, 82, 69, 76, 76, 65, 128, 85,
+    77, 66, 82, 69, 76, 76, 193, 85, 77, 66, 73, 78, 128, 85, 75, 85, 128,
+    85, 75, 82, 65, 73, 78, 73, 65, 206, 85, 75, 65, 82, 65, 128, 85, 75, 65,
+    82, 193, 85, 75, 128, 85, 73, 76, 76, 69, 65, 78, 78, 128, 85, 73, 71,
+    72, 85, 210, 85, 72, 68, 128, 85, 71, 65, 82, 73, 84, 73, 195, 85, 69,
+    89, 128, 85, 69, 78, 128, 85, 69, 73, 128, 85, 69, 69, 128, 85, 69, 65,
+    128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 84,
+    84, 193, 85, 68, 65, 65, 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85,
+    66, 85, 70, 73, 76, 73, 128, 85, 66, 72, 65, 89, 65, 84, 207, 85, 66, 65,
+    68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, 85, 65, 78, 71,
+    128, 85, 65, 128, 85, 178, 85, 48, 52, 50, 128, 85, 48, 52, 49, 128, 85,
+    48, 52, 48, 128, 85, 48, 51, 57, 128, 85, 48, 51, 56, 128, 85, 48, 51,
+    55, 128, 85, 48, 51, 54, 128, 85, 48, 51, 53, 128, 85, 48, 51, 52, 128,
+    85, 48, 51, 51, 128, 85, 48, 51, 50, 65, 128, 85, 48, 51, 50, 128, 85,
+    48, 51, 49, 128, 85, 48, 51, 48, 128, 85, 48, 50, 57, 65, 128, 85, 48,
+    50, 57, 128, 85, 48, 50, 56, 128, 85, 48, 50, 55, 128, 85, 48, 50, 54,
+    128, 85, 48, 50, 53, 128, 85, 48, 50, 52, 128, 85, 48, 50, 51, 65, 128,
+    85, 48, 50, 51, 128, 85, 48, 50, 50, 128, 85, 48, 50, 49, 128, 85, 48,
+    50, 48, 128, 85, 48, 49, 57, 128, 85, 48, 49, 56, 128, 85, 48, 49, 55,
+    128, 85, 48, 49, 54, 128, 85, 48, 49, 53, 128, 85, 48, 49, 52, 128, 85,
+    48, 49, 51, 128, 85, 48, 49, 50, 128, 85, 48, 49, 49, 128, 85, 48, 49,
+    48, 128, 85, 48, 48, 57, 128, 85, 48, 48, 56, 128, 85, 48, 48, 55, 128,
+    85, 48, 48, 54, 66, 128, 85, 48, 48, 54, 65, 128, 85, 48, 48, 54, 128,
+    85, 48, 48, 53, 128, 85, 48, 48, 52, 128, 85, 48, 48, 51, 128, 85, 48,
+    48, 50, 128, 85, 48, 48, 49, 128, 85, 45, 83, 72, 65, 80, 69, 196, 85,
+    45, 73, 45, 73, 128, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 66, 82, 74,
+    71, 85, 128, 85, 45, 53, 128, 84, 90, 85, 128, 84, 90, 79, 65, 128, 84,
+    90, 79, 128, 84, 90, 73, 210, 84, 90, 73, 128, 84, 90, 69, 69, 128, 84,
+    90, 69, 128, 84, 90, 65, 65, 128, 84, 90, 65, 128, 84, 90, 128, 84, 89,
+    210, 84, 89, 80, 69, 45, 183, 84, 89, 80, 69, 45, 54, 128, 84, 89, 80,
+    69, 45, 182, 84, 89, 80, 69, 45, 53, 128, 84, 89, 80, 69, 45, 181, 84,
+    89, 80, 69, 45, 52, 128, 84, 89, 80, 69, 45, 180, 84, 89, 80, 69, 45, 51,
+    128, 84, 89, 80, 69, 45, 179, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69,
+    45, 49, 45, 50, 128, 84, 89, 80, 69, 45, 177, 84, 89, 80, 197, 84, 89,
+    79, 128, 84, 89, 73, 128, 84, 89, 69, 128, 84, 89, 65, 89, 128, 84, 89,
+    65, 128, 84, 88, 87, 86, 128, 84, 88, 87, 214, 84, 88, 72, 69, 69, 202,
+    84, 88, 65, 128, 84, 87, 79, 79, 128, 84, 87, 79, 45, 87, 65, 217, 84,
+    87, 79, 45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 79, 45, 76, 73, 78, 197,
+    84, 87, 79, 45, 72, 69, 65, 68, 69, 196, 84, 87, 79, 45, 69, 205, 84, 87,
+    79, 45, 67, 73, 82, 67, 76, 197, 84, 87, 73, 83, 84, 73, 78, 71, 128, 84,
+    87, 73, 83, 84, 69, 196, 84, 87, 73, 73, 128, 84, 87, 73, 128, 84, 87,
+    69, 78, 84, 89, 45, 84, 87, 79, 128, 84, 87, 69, 78, 84, 89, 45, 84, 87,
+    207, 84, 87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 84, 87, 69, 78,
+    84, 89, 45, 83, 73, 88, 128, 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69,
+    78, 128, 84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, 84, 87, 69, 78, 84,
+    89, 45, 78, 73, 78, 69, 128, 84, 87, 69, 78, 84, 89, 45, 70, 79, 85, 82,
+    128, 84, 87, 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84,
+    89, 45, 70, 73, 86, 197, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84,
+    200, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, 84, 87, 69, 78,
+    84, 89, 128, 84, 87, 69, 78, 84, 217, 84, 87, 69, 78, 84, 73, 69, 84, 72,
+    83, 128, 84, 87, 69, 78, 84, 73, 69, 84, 72, 128, 84, 87, 69, 76, 86, 69,
+    45, 84, 72, 73, 82, 84, 89, 128, 84, 87, 69, 76, 86, 69, 128, 84, 87, 69,
+    76, 86, 197, 84, 87, 69, 76, 70, 84, 72, 83, 128, 84, 87, 69, 76, 70, 84,
+    72, 128, 84, 87, 69, 128, 84, 87, 65, 65, 128, 84, 87, 65, 128, 84, 86,
+    82, 73, 68, 79, 128, 84, 86, 73, 77, 65, 68, 85, 210, 84, 85, 88, 69, 68,
+    79, 128, 84, 85, 88, 128, 84, 85, 85, 77, 85, 128, 84, 85, 85, 128, 84,
+    85, 84, 84, 89, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 84, 85, 84,
     128, 84, 85, 82, 88, 128, 84, 85, 82, 85, 128, 84, 85, 82, 84, 76, 69,
     128, 84, 85, 82, 79, 50, 128, 84, 85, 82, 78, 83, 84, 73, 76, 69, 128,
     84, 85, 82, 206, 84, 85, 82, 75, 73, 83, 200, 84, 85, 82, 75, 73, 195,
     84, 85, 82, 75, 69, 89, 128, 84, 85, 82, 66, 65, 78, 128, 84, 85, 82,
-    128, 84, 85, 80, 78, 73, 128, 84, 85, 80, 128, 84, 85, 79, 88, 128, 84,
-    85, 79, 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84, 85, 78, 78,
-    89, 128, 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 66, 76, 69, 210,
-    84, 85, 77, 65, 69, 128, 84, 85, 77, 128, 84, 85, 205, 84, 85, 76, 73,
-    80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, 128, 84, 85, 75, 128, 84,
-    85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85, 71, 178, 84, 85, 66,
-    69, 128, 84, 85, 66, 128, 84, 85, 65, 82, 69, 199, 84, 85, 65, 69, 80,
-    128, 84, 85, 65, 69, 128, 84, 85, 45, 84, 79, 128, 84, 85, 45, 52, 128,
-    84, 85, 45, 51, 128, 84, 85, 45, 50, 128, 84, 85, 45, 49, 128, 84, 213,
-    84, 84, 85, 85, 128, 84, 84, 85, 68, 68, 65, 71, 128, 84, 84, 85, 68, 68,
-    65, 65, 71, 128, 84, 84, 85, 128, 84, 84, 84, 72, 65, 128, 84, 84, 84,
-    65, 128, 84, 84, 83, 85, 128, 84, 84, 83, 79, 128, 84, 84, 83, 73, 128,
-    84, 84, 83, 69, 69, 128, 84, 84, 83, 69, 128, 84, 84, 83, 65, 128, 84,
-    84, 79, 79, 128, 84, 84, 73, 73, 128, 84, 84, 73, 128, 84, 84, 72, 87,
-    69, 128, 84, 84, 72, 85, 128, 84, 84, 72, 79, 79, 128, 84, 84, 72, 79,
-    128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 69, 128, 84, 84, 72, 69, 128,
-    84, 84, 72, 65, 65, 128, 84, 84, 72, 128, 84, 84, 69, 72, 69, 72, 128,
-    84, 84, 69, 72, 69, 200, 84, 84, 69, 72, 128, 84, 84, 69, 200, 84, 84,
-    69, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, 128, 84, 84, 65, 85, 128,
-    84, 84, 65, 73, 128, 84, 84, 65, 65, 128, 84, 84, 50, 128, 84, 83, 87,
-    69, 128, 84, 83, 87, 66, 128, 84, 83, 87, 65, 128, 84, 83, 86, 128, 84,
-    83, 83, 69, 128, 84, 83, 83, 65, 128, 84, 83, 79, 214, 84, 83, 73, 85,
-    128, 84, 83, 72, 85, 71, 83, 128, 84, 83, 72, 79, 79, 75, 128, 84, 83,
-    72, 79, 79, 203, 84, 83, 72, 79, 79, 74, 128, 84, 83, 72, 69, 83, 128,
-    84, 83, 72, 69, 71, 128, 84, 83, 72, 69, 199, 84, 83, 72, 69, 69, 74,
-    128, 84, 83, 72, 69, 128, 84, 83, 72, 65, 194, 84, 83, 72, 65, 128, 84,
-    83, 69, 82, 69, 128, 84, 83, 69, 69, 66, 128, 84, 83, 65, 68, 73, 128,
-    84, 83, 65, 68, 201, 84, 83, 65, 66, 128, 84, 83, 65, 65, 68, 73, 89,
-    128, 84, 83, 65, 65, 128, 84, 83, 193, 84, 211, 84, 82, 89, 66, 76, 73,
-    79, 206, 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, 75, 128, 84, 82, 85,
-    78, 67, 65, 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, 128, 84, 82, 85, 77,
-    80, 45, 57, 128, 84, 82, 85, 77, 80, 45, 56, 128, 84, 82, 85, 77, 80, 45,
-    55, 128, 84, 82, 85, 77, 80, 45, 54, 128, 84, 82, 85, 77, 80, 45, 53,
-    128, 84, 82, 85, 77, 80, 45, 52, 128, 84, 82, 85, 77, 80, 45, 51, 128,
-    84, 82, 85, 77, 80, 45, 50, 49, 128, 84, 82, 85, 77, 80, 45, 50, 48, 128,
-    84, 82, 85, 77, 80, 45, 50, 128, 84, 82, 85, 77, 80, 45, 49, 57, 128, 84,
-    82, 85, 77, 80, 45, 49, 56, 128, 84, 82, 85, 77, 80, 45, 49, 55, 128, 84,
-    82, 85, 77, 80, 45, 49, 54, 128, 84, 82, 85, 77, 80, 45, 49, 53, 128, 84,
-    82, 85, 77, 80, 45, 49, 52, 128, 84, 82, 85, 77, 80, 45, 49, 51, 128, 84,
-    82, 85, 77, 80, 45, 49, 50, 128, 84, 82, 85, 77, 80, 45, 49, 49, 128, 84,
-    82, 85, 77, 80, 45, 49, 48, 128, 84, 82, 85, 77, 80, 45, 49, 128, 84, 82,
-    85, 69, 128, 84, 82, 85, 197, 84, 82, 85, 67, 75, 128, 84, 82, 79, 80,
-    73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, 77, 73, 75, 79,
-    83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73,
-    70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 80, 65, 82, 65,
-    75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84,
-    82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, 76, 89, 71, 73,
-    83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, 128, 84, 82, 79,
-    76, 76, 69, 89, 128, 84, 82, 79, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79,
-    69, 90, 69, 78, 73, 65, 206, 84, 82, 73, 85, 77, 80, 72, 128, 84, 82, 73,
-    84, 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 82, 73,
-    83, 73, 77, 79, 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84, 82, 73, 80,
-    79, 68, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76, 69, 128,
-    84, 82, 73, 80, 76, 197, 84, 82, 73, 79, 206, 84, 82, 73, 76, 76, 73, 79,
-    78, 83, 128, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71, 82, 65, 77,
-    77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79, 82, 71, 79,
-    78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, 70, 79, 76,
-    73, 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73, 68, 69, 78,
-    212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78, 71, 85, 76,
-    65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78, 196, 84, 82,
-    73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82, 73, 65, 78,
-    71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73, 65, 128,
-    84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82, 69, 78, 68,
-    128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84,
-    82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 49,
-    128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 68, 69, 67, 73,
-    76, 69, 128, 84, 82, 69, 65, 68, 73, 78, 71, 128, 84, 82, 65, 89, 128,
-    84, 82, 65, 86, 69, 76, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 84, 82,
-    65, 86, 69, 76, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 84, 82, 65,
-    80, 69, 90, 73, 85, 77, 128, 84, 82, 65, 78, 83, 86, 69, 82, 83, 65, 204,
-    84, 82, 65, 78, 83, 80, 79, 83, 73, 84, 73, 79, 206, 84, 82, 65, 78, 83,
-    80, 76, 85, 84, 79, 128, 84, 82, 65, 78, 83, 77, 73, 212, 84, 82, 65, 78,
-    83, 77, 73, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83,
-    73, 79, 206, 84, 82, 65, 77, 87, 65, 89, 128, 84, 82, 65, 77, 128, 84,
-    82, 65, 205, 84, 82, 65, 73, 78, 128, 84, 82, 65, 73, 206, 84, 82, 65,
-    73, 76, 73, 78, 199, 84, 82, 65, 70, 70, 73, 67, 128, 84, 82, 65, 70, 70,
-    73, 195, 84, 82, 65, 68, 73, 84, 73, 79, 78, 65, 204, 84, 82, 65, 68,
-    197, 84, 82, 65, 67, 84, 79, 82, 128, 84, 82, 65, 67, 75, 66, 65, 76, 76,
-    128, 84, 82, 65, 67, 75, 128, 84, 82, 65, 128, 84, 82, 128, 84, 79, 88,
-    128, 84, 79, 87, 69, 82, 128, 84, 79, 87, 65, 82, 68, 211, 84, 79, 86,
-    128, 84, 79, 85, 82, 78, 79, 73, 211, 84, 79, 85, 67, 72, 84, 79, 78,
-    197, 84, 79, 85, 67, 72, 73, 78, 199, 84, 79, 85, 67, 72, 69, 211, 84,
-    79, 85, 67, 200, 84, 79, 84, 65, 204, 84, 79, 84, 128, 84, 79, 83, 128,
-    84, 79, 82, 84, 79, 73, 83, 197, 84, 79, 82, 83, 79, 45, 87, 65, 76, 76,
-    80, 76, 65, 78, 197, 84, 79, 82, 83, 79, 45, 70, 76, 79, 79, 82, 80, 76,
-    65, 78, 197, 84, 79, 82, 83, 79, 128, 84, 79, 82, 78, 65, 68, 79, 128,
-    84, 79, 82, 67, 85, 76, 85, 83, 128, 84, 79, 82, 67, 85, 76, 85, 211, 84,
-    79, 82, 67, 72, 128, 84, 79, 81, 128, 84, 79, 80, 66, 65, 82, 128, 84,
-    79, 80, 45, 76, 73, 71, 72, 84, 69, 196, 84, 79, 80, 128, 84, 79, 208,
-    84, 79, 79, 84, 72, 128, 84, 79, 79, 78, 128, 84, 79, 79, 76, 66, 79, 88,
-    128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, 78,
-    71, 85, 197, 84, 79, 78, 71, 128, 84, 79, 78, 69, 45, 86, 128, 84, 79,
-    78, 69, 45, 83, 128, 84, 79, 78, 69, 45, 77, 128, 84, 79, 78, 69, 45, 74,
-    128, 84, 79, 78, 69, 45, 71, 128, 84, 79, 78, 69, 45, 68, 128, 84, 79,
-    78, 69, 45, 66, 128, 84, 79, 78, 69, 45, 56, 128, 84, 79, 78, 69, 45, 55,
-    128, 84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, 45, 53, 128, 84, 79,
-    78, 69, 45, 52, 128, 84, 79, 78, 69, 45, 51, 128, 84, 79, 78, 69, 45, 50,
-    128, 84, 79, 78, 69, 45, 49, 128, 84, 79, 78, 69, 128, 84, 79, 78, 65,
-    204, 84, 79, 77, 80, 73, 128, 84, 79, 77, 65, 84, 79, 128, 84, 79, 76,
-    79, 78, 71, 128, 84, 79, 75, 89, 207, 84, 79, 73, 76, 69, 84, 128, 84,
-    79, 71, 69, 84, 72, 69, 82, 128, 84, 79, 68, 207, 84, 79, 65, 78, 68, 65,
-    75, 72, 73, 65, 84, 128, 84, 79, 65, 128, 84, 79, 45, 82, 65, 128, 84,
-    79, 45, 54, 128, 84, 79, 45, 53, 128, 84, 79, 45, 52, 128, 84, 79, 45,
-    51, 128, 84, 79, 45, 50, 128, 84, 79, 45, 49, 128, 84, 78, 128, 84, 76,
-    86, 128, 84, 76, 85, 128, 84, 76, 79, 128, 84, 76, 73, 128, 84, 76, 72,
-    89, 65, 128, 84, 76, 72, 87, 69, 128, 84, 76, 72, 85, 128, 84, 76, 72,
-    79, 79, 128, 84, 76, 72, 79, 128, 84, 76, 72, 73, 128, 84, 76, 72, 69,
-    69, 128, 84, 76, 72, 69, 128, 84, 76, 72, 65, 128, 84, 76, 69, 69, 128,
-    84, 76, 65, 128, 84, 74, 69, 128, 84, 73, 88, 128, 84, 73, 87, 82, 128,
-    84, 73, 87, 78, 128, 84, 73, 87, 65, 218, 84, 73, 84, 85, 65, 69, 80,
-    128, 84, 73, 84, 76, 79, 128, 84, 73, 84, 76, 207, 84, 73, 84, 193, 84,
-    73, 84, 128, 84, 73, 82, 89, 65, 75, 128, 84, 73, 82, 84, 193, 84, 73,
-    82, 79, 78, 73, 65, 206, 84, 73, 82, 72, 85, 84, 193, 84, 73, 82, 69,
-    196, 84, 73, 82, 128, 84, 73, 210, 84, 73, 80, 80, 73, 128, 84, 73, 80,
-    69, 72, 65, 128, 84, 73, 80, 128, 84, 73, 208, 84, 73, 78, 89, 128, 84,
-    73, 78, 217, 84, 73, 78, 78, 69, 128, 84, 73, 78, 67, 84, 85, 82, 69,
-    128, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73,
-    77, 69, 210, 84, 73, 77, 69, 128, 84, 73, 76, 84, 73, 78, 71, 128, 84,
-    73, 76, 84, 73, 78, 199, 84, 73, 76, 84, 128, 84, 73, 76, 69, 83, 128,
-    84, 73, 76, 68, 69, 128, 84, 73, 76, 68, 197, 84, 73, 76, 128, 84, 73,
-    204, 84, 73, 75, 69, 85, 84, 45, 84, 72, 73, 69, 85, 84, 72, 128, 84, 73,
-    75, 69, 85, 84, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 84,
-    73, 75, 69, 85, 84, 45, 83, 73, 79, 83, 128, 84, 73, 75, 69, 85, 84, 45,
-    82, 73, 69, 85, 76, 128, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80,
-    128, 84, 73, 75, 69, 85, 84, 45, 77, 73, 69, 85, 77, 128, 84, 73, 75, 69,
-    85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 67,
-    73, 69, 85, 67, 128, 84, 73, 75, 69, 85, 84, 45, 67, 72, 73, 69, 85, 67,
-    72, 128, 84, 73, 75, 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73,
-    71, 72, 84, 76, 89, 45, 67, 76, 79, 83, 69, 196, 84, 73, 71, 72, 212, 84,
-    73, 71, 69, 82, 128, 84, 73, 71, 69, 210, 84, 73, 70, 73, 78, 65, 71,
-    200, 84, 73, 69, 88, 128, 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67,
-    75, 69, 84, 83, 128, 84, 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128,
-    84, 73, 67, 203, 84, 73, 65, 82, 65, 128, 84, 73, 50, 128, 84, 73, 45,
-    55, 128, 84, 73, 45, 54, 128, 84, 73, 45, 53, 128, 84, 73, 45, 52, 128,
-    84, 73, 45, 51, 128, 84, 73, 45, 50, 128, 84, 73, 45, 49, 128, 84, 72,
-    90, 128, 84, 72, 89, 79, 79, 205, 84, 72, 87, 79, 79, 128, 84, 72, 87,
-    79, 128, 84, 72, 87, 73, 73, 128, 84, 72, 87, 73, 128, 84, 72, 87, 69,
-    69, 128, 84, 72, 87, 65, 65, 128, 84, 72, 87, 65, 128, 84, 72, 85, 82,
-    211, 84, 72, 85, 82, 73, 83, 65, 218, 84, 72, 85, 78, 71, 128, 84, 72,
-    85, 78, 68, 69, 82, 83, 84, 79, 82, 77, 128, 84, 72, 85, 78, 68, 69, 82,
-    128, 84, 72, 85, 78, 68, 69, 210, 84, 72, 85, 77, 66, 211, 84, 72, 85,
-    77, 66, 128, 84, 72, 82, 79, 87, 73, 78, 199, 84, 72, 82, 79, 85, 71, 72,
-    128, 84, 72, 82, 79, 85, 71, 200, 84, 72, 82, 69, 69, 45, 84, 72, 73, 82,
-    84, 89, 128, 84, 72, 82, 69, 69, 45, 81, 85, 65, 82, 84, 69, 210, 84, 72,
-    82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84, 72, 82, 69, 69, 45, 76, 73,
-    78, 197, 84, 72, 82, 69, 69, 45, 76, 69, 71, 71, 69, 196, 84, 72, 82, 69,
-    69, 45, 72, 85, 78, 68, 82, 69, 68, 45, 65, 78, 68, 45, 84, 87, 69, 78,
-    84, 73, 69, 84, 72, 128, 84, 72, 82, 69, 69, 45, 69, 205, 84, 72, 82, 69,
-    69, 45, 68, 79, 212, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 69, 45,
-    67, 73, 82, 67, 76, 197, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83,
-    65, 78, 68, 83, 128, 84, 72, 79, 85, 83, 65, 78, 68, 211, 84, 72, 79, 85,
-    83, 65, 78, 196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, 84,
-    72, 79, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, 84,
-    72, 79, 77, 128, 84, 72, 79, 74, 128, 84, 72, 79, 65, 128, 84, 72, 207,
-    84, 72, 73, 85, 84, 72, 128, 84, 72, 73, 84, 65, 128, 84, 72, 73, 82, 84,
-    89, 45, 83, 69, 67, 79, 78, 68, 128, 84, 72, 73, 82, 84, 89, 45, 83, 69,
-    67, 79, 78, 196, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, 128, 84, 72, 73,
-    82, 84, 89, 45, 70, 73, 86, 197, 84, 72, 73, 82, 84, 217, 84, 72, 73, 82,
-    84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 73, 82, 68,
-    83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 45, 83, 84, 65, 71,
-    197, 84, 72, 73, 82, 68, 128, 84, 72, 73, 82, 196, 84, 72, 73, 78, 75,
-    73, 78, 199, 84, 72, 73, 78, 71, 128, 84, 72, 73, 73, 128, 84, 72, 73,
-    71, 72, 128, 84, 72, 73, 69, 85, 84, 200, 84, 72, 73, 67, 203, 84, 72,
-    73, 65, 66, 128, 84, 72, 69, 89, 128, 84, 72, 69, 84, 72, 69, 128, 84,
-    72, 69, 84, 72, 128, 84, 72, 69, 84, 65, 128, 84, 72, 69, 84, 193, 84,
-    72, 69, 83, 80, 73, 65, 206, 84, 72, 69, 83, 69, 79, 83, 128, 84, 72, 69,
-    83, 69, 79, 211, 84, 72, 69, 211, 84, 72, 69, 82, 77, 79, 77, 69, 84, 69,
-    82, 128, 84, 72, 69, 82, 77, 79, 68, 89, 78, 65, 77, 73, 67, 128, 84, 72,
-    69, 82, 69, 70, 79, 82, 69, 128, 84, 72, 69, 82, 197, 84, 72, 69, 206,
-    84, 72, 69, 77, 65, 84, 73, 83, 77, 79, 211, 84, 72, 69, 77, 65, 128, 84,
-    72, 69, 77, 193, 84, 72, 69, 72, 128, 84, 72, 69, 200, 84, 72, 69, 65,
-    128, 84, 72, 197, 84, 72, 65, 87, 128, 84, 72, 65, 78, 84, 72, 65, 75,
-    72, 65, 84, 128, 84, 72, 65, 78, 78, 65, 128, 84, 72, 65, 78, 128, 84,
-    72, 65, 206, 84, 72, 65, 77, 69, 68, 72, 128, 84, 72, 65, 76, 128, 84,
-    72, 65, 204, 84, 72, 65, 74, 128, 84, 72, 65, 201, 84, 72, 65, 72, 65,
-    78, 128, 84, 72, 65, 65, 78, 193, 84, 72, 65, 65, 76, 85, 128, 84, 72,
-    45, 67, 82, 69, 197, 84, 69, 88, 84, 128, 84, 69, 88, 212, 84, 69, 88,
-    128, 84, 69, 86, 73, 82, 128, 84, 69, 85, 84, 69, 85, 88, 128, 84, 69,
-    85, 84, 69, 85, 87, 69, 78, 128, 84, 69, 85, 84, 128, 84, 69, 85, 78,
-    128, 84, 69, 85, 65, 69, 81, 128, 84, 69, 85, 65, 69, 78, 128, 84, 69,
-    85, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, 85, 128, 84, 69, 84, 82, 65,
-    83, 69, 77, 69, 128, 84, 69, 84, 82, 65, 80, 76, 73, 128, 84, 69, 84, 82,
-    65, 71, 82, 65, 205, 84, 69, 84, 82, 65, 70, 79, 78, 73, 65, 83, 128, 84,
-    69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84, 65, 82, 84, 79, 211, 84,
-    69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 69, 84, 128, 84,
-    69, 212, 84, 69, 83, 212, 84, 69, 83, 83, 69, 82, 65, 128, 84, 69, 83,
-    83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, 200, 84,
-    69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 82, 77, 73, 78, 65, 204,
-    84, 69, 80, 128, 84, 69, 78, 85, 84, 79, 128, 84, 69, 78, 85, 128, 84,
-    69, 78, 213, 84, 69, 78, 84, 72, 128, 84, 69, 78, 84, 128, 84, 69, 78,
-    83, 69, 128, 84, 69, 78, 83, 197, 84, 69, 78, 83, 128, 84, 69, 78, 211,
-    84, 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69, 78, 45, 84, 72, 73,
-    82, 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211,
-    84, 69, 77, 80, 76, 69, 128, 84, 69, 76, 85, 128, 84, 69, 76, 79, 85,
-    211, 84, 69, 76, 76, 69, 210, 84, 69, 76, 73, 83, 72, 193, 84, 69, 76,
-    69, 86, 73, 83, 73, 79, 78, 128, 84, 69, 76, 69, 83, 67, 79, 80, 69, 128,
-    84, 69, 76, 69, 80, 72, 79, 78, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78,
-    197, 84, 69, 76, 69, 73, 65, 128, 84, 69, 76, 69, 71, 82, 65, 80, 200,
-    84, 69, 75, 128, 84, 69, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84,
-    69, 69, 84, 72, 128, 84, 69, 69, 84, 200, 84, 69, 69, 78, 83, 128, 84,
-    69, 69, 69, 69, 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 84, 69,
-    68, 68, 217, 84, 69, 65, 82, 211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83,
-    80, 79, 75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78,
-    75, 69, 196, 84, 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196,
-    84, 69, 65, 82, 45, 79, 70, 198, 84, 69, 65, 67, 85, 208, 84, 69, 45, 85,
-    128, 84, 69, 45, 57, 128, 84, 69, 45, 56, 128, 84, 69, 45, 55, 128, 84,
-    69, 45, 54, 128, 84, 69, 45, 53, 128, 84, 69, 45, 52, 128, 84, 69, 45,
-    51, 128, 84, 69, 45, 50, 128, 84, 69, 45, 49, 128, 84, 67, 72, 69, 72,
-    69, 72, 128, 84, 67, 72, 69, 72, 69, 200, 84, 67, 72, 69, 72, 128, 84,
-    67, 72, 69, 200, 84, 67, 72, 69, 128, 84, 195, 84, 65, 89, 128, 84, 65,
-    88, 73, 128, 84, 65, 88, 128, 84, 65, 87, 69, 76, 76, 69, 77, 69, 212,
-    84, 65, 87, 65, 128, 84, 65, 87, 128, 84, 65, 215, 84, 65, 86, 73, 89,
-    65, 78, 73, 128, 84, 65, 86, 128, 84, 65, 214, 84, 65, 85, 82, 85, 83,
-    128, 84, 65, 85, 77, 128, 84, 65, 213, 84, 65, 84, 87, 69, 69, 76, 128,
-    84, 65, 84, 87, 69, 69, 204, 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84,
-    128, 84, 65, 83, 83, 73, 128, 84, 65, 83, 128, 84, 65, 82, 85, 78, 71,
-    128, 84, 65, 82, 84, 65, 82, 45, 50, 128, 84, 65, 82, 84, 65, 82, 128,
-    84, 65, 82, 71, 69, 84, 128, 84, 65, 81, 128, 84, 65, 80, 69, 82, 128,
-    84, 65, 80, 197, 84, 65, 80, 128, 84, 65, 79, 128, 84, 65, 78, 78, 69,
-    196, 84, 65, 78, 71, 69, 82, 73, 78, 69, 128, 84, 65, 78, 71, 69, 78, 84,
-    128, 84, 65, 78, 71, 69, 78, 212, 84, 65, 78, 199, 84, 65, 78, 65, 66,
-    65, 84, 193, 84, 65, 78, 65, 128, 84, 65, 78, 128, 84, 65, 77, 73, 78,
-    71, 128, 84, 65, 77, 65, 206, 84, 65, 77, 128, 84, 65, 76, 76, 217, 84,
-    65, 76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, 78, 71, 128, 84, 65,
-    76, 73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, 76, 69, 78,
-    212, 84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, 84,
-    65, 75, 69, 79, 85, 212, 84, 65, 75, 69, 128, 84, 65, 75, 52, 128, 84,
-    65, 75, 180, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, 85, 128, 84, 65,
-    73, 76, 76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, 73, 204, 84, 65,
-    72, 65, 76, 65, 128, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65,
-    78, 87, 193, 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69,
-    206, 84, 65, 67, 79, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65,
-    66, 85, 76, 65, 84, 73, 79, 78, 128, 84, 65, 66, 85, 76, 65, 84, 73, 79,
-    206, 84, 65, 66, 83, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 76, 197,
-    84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 83, 72, 65, 69, 128, 84, 65,
-    65, 81, 128, 84, 65, 65, 77, 128, 84, 65, 65, 76, 85, 74, 193, 84, 65,
-    65, 73, 128, 84, 65, 65, 70, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79,
-    76, 128, 84, 65, 45, 52, 128, 84, 65, 45, 51, 128, 84, 65, 45, 50, 128,
-    84, 65, 45, 49, 128, 84, 48, 51, 54, 128, 84, 48, 51, 53, 128, 84, 48,
-    51, 52, 128, 84, 48, 51, 51, 65, 128, 84, 48, 51, 51, 128, 84, 48, 51,
-    50, 65, 128, 84, 48, 51, 50, 128, 84, 48, 51, 49, 128, 84, 48, 51, 48,
-    128, 84, 48, 50, 57, 128, 84, 48, 50, 56, 128, 84, 48, 50, 55, 128, 84,
-    48, 50, 54, 128, 84, 48, 50, 53, 128, 84, 48, 50, 52, 128, 84, 48, 50,
-    51, 128, 84, 48, 50, 50, 128, 84, 48, 50, 49, 128, 84, 48, 50, 48, 128,
-    84, 48, 49, 57, 128, 84, 48, 49, 56, 128, 84, 48, 49, 55, 128, 84, 48,
-    49, 54, 65, 128, 84, 48, 49, 54, 128, 84, 48, 49, 53, 128, 84, 48, 49,
-    52, 128, 84, 48, 49, 51, 128, 84, 48, 49, 50, 128, 84, 48, 49, 49, 65,
-    128, 84, 48, 49, 49, 128, 84, 48, 49, 48, 128, 84, 48, 48, 57, 65, 128,
-    84, 48, 48, 57, 128, 84, 48, 48, 56, 65, 128, 84, 48, 48, 56, 128, 84,
-    48, 48, 55, 65, 128, 84, 48, 48, 55, 128, 84, 48, 48, 54, 128, 84, 48,
-    48, 53, 128, 84, 48, 48, 52, 128, 84, 48, 48, 51, 65, 128, 84, 48, 48,
-    51, 128, 84, 48, 48, 50, 128, 84, 48, 48, 49, 128, 84, 45, 83, 72, 73,
-    82, 84, 128, 84, 45, 82, 69, 88, 128, 83, 90, 90, 128, 83, 90, 87, 71,
-    128, 83, 90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, 90, 73,
-    128, 83, 90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, 83, 90,
-    65, 128, 83, 90, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 83, 84,
-    69, 205, 83, 89, 82, 88, 128, 83, 89, 82, 77, 65, 84, 73, 75, 73, 128,
-    83, 89, 82, 77, 65, 128, 83, 89, 82, 73, 78, 71, 69, 128, 83, 89, 82, 73,
-    65, 195, 83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, 65, 128,
-    83, 89, 78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, 211, 83,
-    89, 78, 67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 79, 71, 85,
-    69, 128, 83, 89, 78, 65, 71, 77, 193, 83, 89, 78, 65, 70, 73, 128, 83,
-    89, 78, 128, 83, 89, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84,
-    82, 73, 195, 83, 89, 77, 66, 79, 76, 83, 128, 83, 89, 77, 66, 79, 76,
-    211, 83, 89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, 45, 56,
-    128, 83, 89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, 54,
-    128, 83, 89, 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, 76, 45,
-    53, 51, 128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, 66, 79,
-    76, 45, 53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, 89, 77,
-    66, 79, 76, 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, 83, 89,
-    77, 66, 79, 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, 55, 128,
-    83, 89, 77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52,
-    51, 128, 83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, 79, 76,
-    45, 52, 48, 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, 66, 79,
-    76, 45, 51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, 89, 77,
-    66, 79, 76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, 128, 83,
-    89, 77, 66, 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, 51, 48,
-    128, 83, 89, 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, 45, 50,
-    57, 128, 83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, 79, 76,
-    45, 50, 54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, 77, 66,
-    79, 76, 45, 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, 83, 89,
-    77, 66, 79, 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, 49, 128,
-    83, 89, 77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, 45, 50,
-    128, 83, 89, 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, 76, 45,
-    49, 56, 128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, 66, 79,
-    76, 45, 49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, 89, 77,
-    66, 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, 83,
-    89, 77, 66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 49,
-    128, 83, 89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, 76, 45,
-    49, 128, 83, 89, 76, 79, 84, 201, 83, 89, 73, 128, 83, 89, 128, 83, 87,
-    90, 128, 83, 87, 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79,
-    82, 68, 128, 83, 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204,
-    83, 87, 73, 77, 83, 85, 73, 84, 128, 83, 87, 73, 77, 77, 73, 78, 71, 128,
-    83, 87, 73, 77, 77, 69, 82, 128, 83, 87, 73, 73, 128, 83, 87, 73, 128,
-    83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 69, 69, 212, 83, 87,
-    69, 65, 84, 128, 83, 87, 69, 65, 212, 83, 87, 65, 83, 200, 83, 87, 65,
-    80, 80, 73, 78, 71, 128, 83, 87, 65, 78, 128, 83, 87, 65, 65, 128, 83,
-    87, 128, 83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65, 128, 83,
-    86, 65, 82, 73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83, 85, 84,
-    82, 193, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83,
-    85, 83, 72, 73, 128, 83, 85, 82, 89, 65, 128, 83, 85, 82, 88, 128, 83,
-    85, 82, 82, 79, 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 83, 85,
-    82, 70, 69, 82, 128, 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, 128,
-    83, 85, 82, 65, 78, 71, 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, 83,
-    85, 210, 83, 85, 80, 82, 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, 82,
-    86, 73, 83, 69, 128, 83, 85, 80, 69, 82, 86, 73, 76, 76, 65, 73, 78, 128,
-    83, 85, 80, 69, 82, 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, 69, 212, 83,
-    85, 80, 69, 82, 83, 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, 73, 77, 80,
-    79, 83, 69, 196, 83, 85, 80, 69, 82, 72, 69, 82, 79, 128, 83, 85, 80, 69,
-    82, 70, 73, 88, 69, 196, 83, 85, 80, 69, 210, 83, 85, 80, 128, 83, 85,
-    79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 83, 69,
-    212, 83, 85, 78, 82, 73, 83, 69, 128, 83, 85, 78, 82, 73, 83, 197, 83,
-    85, 78, 71, 76, 65, 83, 83, 69, 83, 128, 83, 85, 78, 71, 128, 83, 85, 78,
-    70, 76, 79, 87, 69, 82, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 83, 85,
-    78, 128, 83, 85, 206, 83, 85, 77, 77, 69, 82, 128, 83, 85, 77, 77, 65,
-    84, 73, 79, 78, 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83, 85, 77, 65,
-    83, 72, 128, 83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128, 83, 85, 75,
-    85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213,
-    83, 85, 73, 84, 65, 66, 76, 69, 128, 83, 85, 73, 212, 83, 85, 72, 85, 82,
-    128, 83, 85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, 83, 85, 67,
-    75, 73, 78, 199, 83, 85, 67, 75, 69, 68, 128, 83, 85, 67, 203, 83, 85,
-    67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67,
-    67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73,
-    84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83,
-    84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83,
-    85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82,
-    73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76,
-    73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83,
-    85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65,
-    84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66,
-    76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 82, 128, 83, 85,
-    66, 74, 79, 73, 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66,
-    73, 84, 79, 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82,
-    79, 85, 208, 83, 85, 66, 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, 84,
-    128, 83, 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, 128,
-    83, 85, 65, 128, 83, 85, 45, 56, 128, 83, 85, 45, 55, 128, 83, 85, 45,
-    54, 128, 83, 85, 45, 53, 128, 83, 85, 45, 52, 128, 83, 85, 45, 51, 128,
-    83, 85, 45, 50, 128, 83, 85, 45, 49, 128, 83, 213, 83, 84, 88, 128, 83,
-    84, 87, 65, 128, 83, 84, 85, 80, 65, 128, 83, 84, 85, 70, 70, 69, 196,
-    83, 84, 85, 68, 89, 128, 83, 84, 85, 68, 73, 207, 83, 84, 85, 67, 75, 45,
-    79, 85, 212, 83, 84, 83, 128, 83, 84, 82, 79, 78, 199, 83, 84, 82, 79,
-    75, 69, 83, 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 45,
-    57, 128, 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 45,
-    55, 128, 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 45,
-    53, 128, 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 45,
-    51, 128, 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 45,
-    49, 49, 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75,
-    69, 45, 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 128,
-    83, 84, 82, 73, 78, 71, 128, 83, 84, 82, 73, 78, 199, 83, 84, 82, 73, 75,
-    69, 84, 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 75, 197, 83, 84, 82,
-    73, 68, 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67,
-    72, 69, 196, 83, 84, 82, 69, 84, 67, 72, 128, 83, 84, 82, 69, 83, 211,
-    83, 84, 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128,
-    83, 84, 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 87, 128, 83,
-    84, 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77, 128, 83,
-    84, 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65,
-    73, 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128,
-    83, 84, 82, 65, 73, 71, 72, 84, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83,
-    84, 82, 65, 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65,
-    128, 83, 84, 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80,
-    87, 65, 84, 67, 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79,
-    80, 80, 65, 71, 69, 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84,
-    79, 78, 69, 128, 83, 84, 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84,
-    73, 82, 82, 85, 208, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204,
-    83, 84, 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 73, 67, 75, 73,
-    78, 199, 83, 84, 73, 67, 203, 83, 84, 69, 84, 72, 79, 83, 67, 79, 80, 69,
+    128, 84, 85, 210, 84, 85, 80, 78, 73, 128, 84, 85, 80, 128, 84, 85, 79,
+    88, 128, 84, 85, 79, 84, 128, 84, 85, 79, 80, 128, 84, 85, 79, 128, 84,
+    85, 78, 78, 89, 128, 84, 85, 77, 69, 84, 69, 83, 128, 84, 85, 77, 66, 76,
+    69, 210, 84, 85, 77, 65, 69, 128, 84, 85, 77, 128, 84, 85, 205, 84, 85,
+    76, 73, 80, 128, 84, 85, 75, 87, 69, 78, 84, 73, 83, 128, 84, 85, 75,
+    128, 84, 85, 71, 82, 73, 203, 84, 85, 71, 50, 128, 84, 85, 71, 178, 84,
+    85, 66, 69, 128, 84, 85, 66, 128, 84, 85, 65, 82, 69, 199, 84, 85, 65,
+    69, 80, 128, 84, 85, 65, 69, 128, 84, 85, 45, 84, 79, 128, 84, 85, 45,
+    52, 128, 84, 85, 45, 51, 128, 84, 85, 45, 50, 128, 84, 85, 45, 49, 128,
+    84, 213, 84, 84, 85, 85, 128, 84, 84, 85, 68, 68, 65, 71, 128, 84, 84,
+    85, 68, 68, 65, 65, 71, 128, 84, 84, 85, 128, 84, 84, 84, 72, 65, 128,
+    84, 84, 84, 65, 128, 84, 84, 83, 85, 128, 84, 84, 83, 79, 128, 84, 84,
+    83, 73, 128, 84, 84, 83, 69, 69, 128, 84, 84, 83, 69, 128, 84, 84, 83,
+    65, 128, 84, 84, 79, 79, 128, 84, 84, 73, 73, 128, 84, 84, 73, 128, 84,
+    84, 72, 87, 69, 128, 84, 84, 72, 85, 128, 84, 84, 72, 79, 79, 128, 84,
+    84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 69, 128, 84, 84,
+    72, 69, 128, 84, 84, 72, 65, 65, 128, 84, 84, 72, 128, 84, 84, 69, 72,
+    69, 72, 128, 84, 84, 69, 72, 69, 200, 84, 84, 69, 72, 128, 84, 84, 69,
+    200, 84, 84, 69, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, 128, 84, 84,
+    65, 85, 128, 84, 84, 65, 73, 128, 84, 84, 65, 65, 128, 84, 84, 50, 128,
+    84, 83, 87, 69, 128, 84, 83, 87, 66, 128, 84, 83, 87, 65, 128, 84, 83,
+    86, 128, 84, 83, 83, 69, 128, 84, 83, 83, 65, 128, 84, 83, 79, 214, 84,
+    83, 73, 85, 128, 84, 83, 72, 85, 71, 83, 128, 84, 83, 72, 79, 79, 75,
+    128, 84, 83, 72, 79, 79, 203, 84, 83, 72, 79, 79, 74, 128, 84, 83, 72,
+    69, 83, 128, 84, 83, 72, 69, 71, 128, 84, 83, 72, 69, 199, 84, 83, 72,
+    69, 69, 74, 128, 84, 83, 72, 69, 128, 84, 83, 72, 65, 194, 84, 83, 72,
+    65, 128, 84, 83, 69, 82, 69, 128, 84, 83, 69, 69, 66, 128, 84, 83, 65,
+    68, 73, 128, 84, 83, 65, 68, 201, 84, 83, 65, 66, 128, 84, 83, 65, 65,
+    68, 73, 89, 128, 84, 83, 65, 65, 128, 84, 83, 193, 84, 211, 84, 82, 89,
+    66, 76, 73, 79, 206, 84, 82, 85, 84, 72, 128, 84, 82, 85, 78, 75, 128,
+    84, 82, 85, 78, 67, 65, 84, 69, 196, 84, 82, 85, 77, 80, 69, 84, 128, 84,
+    82, 85, 77, 80, 45, 57, 128, 84, 82, 85, 77, 80, 45, 56, 128, 84, 82, 85,
+    77, 80, 45, 55, 128, 84, 82, 85, 77, 80, 45, 54, 128, 84, 82, 85, 77, 80,
+    45, 53, 128, 84, 82, 85, 77, 80, 45, 52, 128, 84, 82, 85, 77, 80, 45, 51,
+    128, 84, 82, 85, 77, 80, 45, 50, 49, 128, 84, 82, 85, 77, 80, 45, 50, 48,
+    128, 84, 82, 85, 77, 80, 45, 50, 128, 84, 82, 85, 77, 80, 45, 49, 57,
+    128, 84, 82, 85, 77, 80, 45, 49, 56, 128, 84, 82, 85, 77, 80, 45, 49, 55,
+    128, 84, 82, 85, 77, 80, 45, 49, 54, 128, 84, 82, 85, 77, 80, 45, 49, 53,
+    128, 84, 82, 85, 77, 80, 45, 49, 52, 128, 84, 82, 85, 77, 80, 45, 49, 51,
+    128, 84, 82, 85, 77, 80, 45, 49, 50, 128, 84, 82, 85, 77, 80, 45, 49, 49,
+    128, 84, 82, 85, 77, 80, 45, 49, 48, 128, 84, 82, 85, 77, 80, 45, 49,
+    128, 84, 82, 85, 69, 128, 84, 82, 85, 197, 84, 82, 85, 67, 75, 128, 84,
+    82, 79, 80, 73, 67, 65, 204, 84, 82, 79, 80, 72, 89, 128, 84, 82, 79, 77,
+    73, 75, 79, 83, 89, 78, 65, 71, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79,
+    80, 83, 73, 70, 73, 83, 84, 79, 78, 128, 84, 82, 79, 77, 73, 75, 79, 80,
+    65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79,
+    78, 128, 84, 82, 79, 77, 73, 75, 79, 206, 84, 82, 79, 77, 73, 75, 79, 76,
+    89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 76, 76, 69, 89, 66, 85, 83, 128,
+    84, 82, 79, 76, 76, 69, 89, 128, 84, 82, 79, 75, 85, 84, 65, 83, 84, 201,
+    84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 84, 82, 73, 85, 77, 80, 72, 128,
+    84, 82, 73, 84, 79, 211, 84, 82, 73, 84, 73, 77, 79, 82, 73, 79, 78, 128,
+    84, 82, 73, 83, 73, 77, 79, 85, 128, 84, 82, 73, 83, 69, 77, 69, 128, 84,
+    82, 73, 80, 79, 68, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 76,
+    69, 128, 84, 82, 73, 80, 76, 197, 84, 82, 73, 79, 206, 84, 82, 73, 76,
+    76, 73, 79, 78, 83, 128, 84, 82, 73, 73, 83, 65, 80, 128, 84, 82, 73, 71,
+    82, 65, 77, 77, 79, 211, 84, 82, 73, 71, 82, 65, 205, 84, 82, 73, 71, 79,
+    82, 71, 79, 78, 128, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73,
+    70, 79, 76, 73, 65, 84, 197, 84, 82, 73, 68, 69, 78, 84, 128, 84, 82, 73,
+    68, 69, 78, 212, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 65, 78,
+    71, 85, 76, 65, 210, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, 79, 85, 78,
+    196, 84, 82, 73, 65, 78, 71, 76, 69, 45, 72, 69, 65, 68, 69, 196, 84, 82,
+    73, 65, 78, 71, 76, 69, 128, 84, 82, 73, 65, 78, 71, 76, 197, 84, 82, 73,
+    65, 128, 84, 82, 73, 128, 84, 82, 69, 83, 73, 76, 76, 79, 128, 84, 82,
+    69, 78, 68, 128, 84, 82, 69, 78, 196, 84, 82, 69, 77, 79, 76, 79, 45, 51,
+    128, 84, 82, 69, 77, 79, 76, 79, 45, 50, 128, 84, 82, 69, 77, 79, 76, 79,
+    45, 49, 128, 84, 82, 69, 69, 128, 84, 82, 69, 197, 84, 82, 69, 68, 69,
+    67, 73, 76, 69, 128, 84, 82, 69, 65, 68, 73, 78, 71, 128, 84, 82, 65, 89,
+    128, 84, 82, 65, 86, 69, 76, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 84,
+    82, 65, 86, 69, 76, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 84, 82,
+    65, 80, 69, 90, 73, 85, 77, 128, 84, 82, 65, 80, 128, 84, 82, 65, 78, 83,
+    86, 69, 82, 83, 65, 204, 84, 82, 65, 78, 83, 80, 79, 83, 73, 84, 73, 79,
+    206, 84, 82, 65, 78, 83, 80, 76, 85, 84, 79, 128, 84, 82, 65, 78, 83, 77,
+    73, 212, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, 79, 78, 128, 84, 82, 65,
+    78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, 77, 87, 65, 89, 128, 84,
+    82, 65, 77, 128, 84, 82, 65, 205, 84, 82, 65, 73, 78, 128, 84, 82, 65,
+    73, 206, 84, 82, 65, 73, 76, 73, 78, 199, 84, 82, 65, 70, 70, 73, 67,
+    128, 84, 82, 65, 70, 70, 73, 195, 84, 82, 65, 68, 73, 84, 73, 79, 78, 65,
+    204, 84, 82, 65, 68, 197, 84, 82, 65, 67, 84, 79, 82, 128, 84, 82, 65,
+    67, 75, 66, 65, 76, 76, 128, 84, 82, 65, 67, 75, 128, 84, 82, 65, 128,
+    84, 82, 128, 84, 79, 88, 128, 84, 79, 87, 69, 82, 128, 84, 79, 87, 65,
+    82, 68, 211, 84, 79, 86, 128, 84, 79, 85, 82, 78, 79, 73, 211, 84, 79,
+    85, 67, 72, 84, 79, 78, 197, 84, 79, 85, 67, 72, 73, 78, 199, 84, 79, 85,
+    67, 72, 69, 211, 84, 79, 85, 67, 200, 84, 79, 84, 65, 204, 84, 79, 84,
+    128, 84, 79, 83, 128, 84, 79, 82, 84, 79, 73, 83, 197, 84, 79, 82, 83,
+    79, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 84, 79, 82, 83, 79, 45, 70,
+    76, 79, 79, 82, 80, 76, 65, 78, 197, 84, 79, 82, 83, 79, 128, 84, 79, 82,
+    78, 65, 68, 79, 128, 84, 79, 82, 67, 85, 76, 85, 83, 128, 84, 79, 82, 67,
+    85, 76, 85, 211, 84, 79, 82, 67, 72, 128, 84, 79, 81, 128, 84, 79, 80,
+    66, 65, 82, 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, 69, 196, 84, 79, 80,
+    128, 84, 79, 208, 84, 79, 79, 84, 72, 66, 82, 85, 83, 72, 128, 84, 79,
+    79, 84, 72, 128, 84, 79, 79, 78, 128, 84, 79, 79, 76, 66, 79, 88, 128,
+    84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 85,
+    197, 84, 79, 78, 71, 128, 84, 79, 78, 69, 45, 86, 128, 84, 79, 78, 69,
+    45, 83, 128, 84, 79, 78, 69, 45, 77, 128, 84, 79, 78, 69, 45, 74, 128,
+    84, 79, 78, 69, 45, 71, 128, 84, 79, 78, 69, 45, 68, 128, 84, 79, 78, 69,
+    45, 66, 128, 84, 79, 78, 69, 45, 56, 128, 84, 79, 78, 69, 45, 55, 128,
+    84, 79, 78, 69, 45, 54, 128, 84, 79, 78, 69, 45, 53, 128, 84, 79, 78, 69,
+    45, 52, 128, 84, 79, 78, 69, 45, 51, 128, 84, 79, 78, 69, 45, 50, 128,
+    84, 79, 78, 69, 45, 49, 128, 84, 79, 78, 69, 128, 84, 79, 78, 65, 204,
+    84, 79, 77, 80, 73, 128, 84, 79, 77, 65, 84, 79, 128, 84, 79, 76, 79, 78,
+    71, 128, 84, 79, 75, 89, 207, 84, 79, 73, 76, 69, 84, 128, 84, 79, 71,
+    69, 84, 72, 69, 82, 128, 84, 79, 68, 207, 84, 79, 65, 78, 68, 65, 75, 72,
+    73, 65, 84, 128, 84, 79, 65, 128, 84, 79, 45, 82, 65, 128, 84, 79, 45,
+    54, 128, 84, 79, 45, 53, 128, 84, 79, 45, 52, 128, 84, 79, 45, 51, 128,
+    84, 79, 45, 50, 128, 84, 79, 45, 49, 128, 84, 78, 128, 84, 76, 86, 128,
+    84, 76, 85, 128, 84, 76, 79, 128, 84, 76, 73, 128, 84, 76, 72, 89, 65,
+    128, 84, 76, 72, 87, 69, 128, 84, 76, 72, 85, 128, 84, 76, 72, 79, 79,
+    128, 84, 76, 72, 79, 128, 84, 76, 72, 73, 128, 84, 76, 72, 69, 69, 128,
+    84, 76, 72, 69, 128, 84, 76, 72, 65, 128, 84, 76, 69, 69, 128, 84, 76,
+    65, 128, 84, 74, 69, 128, 84, 73, 88, 128, 84, 73, 87, 82, 128, 84, 73,
+    87, 78, 128, 84, 73, 87, 65, 218, 84, 73, 84, 85, 65, 69, 80, 128, 84,
+    73, 84, 76, 79, 128, 84, 73, 84, 76, 207, 84, 73, 84, 193, 84, 73, 84,
+    128, 84, 73, 82, 89, 65, 75, 128, 84, 73, 82, 84, 193, 84, 73, 82, 79,
+    78, 73, 65, 206, 84, 73, 82, 72, 85, 84, 193, 84, 73, 82, 69, 196, 84,
+    73, 82, 128, 84, 73, 210, 84, 73, 80, 80, 73, 128, 84, 73, 80, 69, 72,
+    65, 128, 84, 73, 80, 128, 84, 73, 208, 84, 73, 78, 89, 128, 84, 73, 78,
+    217, 84, 73, 78, 78, 69, 128, 84, 73, 78, 67, 84, 85, 82, 69, 128, 84,
+    73, 78, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69,
+    210, 84, 73, 77, 69, 128, 84, 73, 76, 84, 73, 78, 71, 128, 84, 73, 76,
+    84, 73, 78, 199, 84, 73, 76, 84, 128, 84, 73, 76, 69, 83, 128, 84, 73,
+    76, 68, 69, 128, 84, 73, 76, 68, 197, 84, 73, 76, 128, 84, 73, 204, 84,
+    73, 75, 69, 85, 84, 45, 84, 72, 73, 69, 85, 84, 72, 128, 84, 73, 75, 69,
+    85, 84, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75,
+    69, 85, 84, 45, 83, 73, 79, 83, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73,
+    69, 85, 76, 128, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 84,
+    73, 75, 69, 85, 84, 45, 77, 73, 69, 85, 77, 128, 84, 73, 75, 69, 85, 84,
+    45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, 69, 85, 84, 45, 67, 73, 69,
+    85, 67, 128, 84, 73, 75, 69, 85, 84, 45, 67, 72, 73, 69, 85, 67, 72, 128,
+    84, 73, 75, 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 71, 72, 84,
+    76, 89, 45, 67, 76, 79, 83, 69, 196, 84, 73, 71, 72, 212, 84, 73, 71, 69,
+    82, 128, 84, 73, 71, 69, 210, 84, 73, 70, 73, 78, 65, 71, 200, 84, 73,
+    69, 88, 128, 84, 73, 69, 80, 128, 84, 73, 197, 84, 73, 67, 75, 69, 84,
+    83, 128, 84, 73, 67, 75, 69, 84, 128, 84, 73, 67, 75, 128, 84, 73, 67,
+    203, 84, 73, 65, 82, 65, 128, 84, 73, 50, 128, 84, 73, 45, 55, 128, 84,
+    73, 45, 54, 128, 84, 73, 45, 53, 128, 84, 73, 45, 52, 128, 84, 73, 45,
+    51, 128, 84, 73, 45, 50, 128, 84, 73, 45, 49, 128, 84, 72, 90, 128, 84,
+    72, 89, 79, 79, 205, 84, 72, 87, 79, 79, 128, 84, 72, 87, 79, 128, 84,
+    72, 87, 73, 73, 128, 84, 72, 87, 73, 128, 84, 72, 87, 69, 69, 128, 84,
+    72, 87, 65, 65, 128, 84, 72, 87, 65, 128, 84, 72, 85, 82, 211, 84, 72,
+    85, 82, 73, 83, 65, 218, 84, 72, 85, 78, 71, 128, 84, 72, 85, 78, 68, 69,
+    82, 83, 84, 79, 82, 77, 128, 84, 72, 85, 78, 68, 69, 82, 128, 84, 72, 85,
+    78, 68, 69, 210, 84, 72, 85, 77, 66, 211, 84, 72, 85, 77, 66, 128, 84,
+    72, 82, 79, 87, 73, 78, 199, 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82,
+    79, 85, 71, 200, 84, 72, 82, 69, 69, 45, 84, 72, 73, 82, 84, 89, 128, 84,
+    72, 82, 69, 69, 45, 81, 85, 65, 82, 84, 69, 210, 84, 72, 82, 69, 69, 45,
+    80, 69, 82, 45, 69, 205, 84, 72, 82, 69, 69, 45, 76, 73, 78, 197, 84, 72,
+    82, 69, 69, 45, 76, 69, 71, 71, 69, 196, 84, 72, 82, 69, 69, 45, 72, 85,
+    78, 68, 82, 69, 68, 45, 65, 78, 68, 45, 84, 87, 69, 78, 84, 73, 69, 84,
+    72, 128, 84, 72, 82, 69, 69, 45, 69, 205, 84, 72, 82, 69, 69, 45, 68, 79,
+    212, 84, 72, 82, 69, 69, 45, 196, 84, 72, 82, 69, 69, 45, 67, 73, 82, 67,
+    76, 197, 84, 72, 82, 69, 65, 68, 128, 84, 72, 79, 85, 83, 65, 78, 68, 83,
+    128, 84, 72, 79, 85, 83, 65, 78, 68, 211, 84, 72, 79, 85, 83, 65, 78,
+    196, 84, 72, 79, 85, 71, 72, 212, 84, 72, 79, 85, 128, 84, 72, 79, 82,
+    78, 128, 84, 72, 79, 82, 206, 84, 72, 79, 78, 71, 128, 84, 72, 79, 78,
+    199, 84, 72, 79, 77, 128, 84, 72, 79, 74, 128, 84, 72, 79, 65, 128, 84,
+    72, 207, 84, 72, 73, 85, 84, 72, 128, 84, 72, 73, 84, 65, 128, 84, 72,
+    73, 82, 84, 89, 45, 83, 69, 67, 79, 78, 68, 128, 84, 72, 73, 82, 84, 89,
+    45, 83, 69, 67, 79, 78, 196, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, 128,
+    84, 72, 73, 82, 84, 89, 45, 70, 73, 86, 197, 84, 72, 73, 82, 84, 217, 84,
+    72, 73, 82, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72,
+    73, 82, 68, 83, 128, 84, 72, 73, 82, 68, 211, 84, 72, 73, 82, 68, 45, 83,
+    84, 65, 71, 197, 84, 72, 73, 82, 68, 128, 84, 72, 73, 82, 196, 84, 72,
+    73, 78, 75, 73, 78, 199, 84, 72, 73, 78, 71, 128, 84, 72, 73, 73, 128,
+    84, 72, 73, 71, 72, 128, 84, 72, 73, 69, 85, 84, 200, 84, 72, 73, 67,
+    203, 84, 72, 73, 65, 66, 128, 84, 72, 69, 89, 128, 84, 72, 69, 84, 72,
+    69, 128, 84, 72, 69, 84, 72, 128, 84, 72, 69, 84, 65, 128, 84, 72, 69,
+    84, 193, 84, 72, 69, 83, 80, 73, 65, 206, 84, 72, 69, 83, 69, 79, 83,
+    128, 84, 72, 69, 83, 69, 79, 211, 84, 72, 69, 211, 84, 72, 69, 82, 77,
+    79, 77, 69, 84, 69, 82, 128, 84, 72, 69, 82, 77, 79, 68, 89, 78, 65, 77,
+    73, 67, 128, 84, 72, 69, 82, 69, 70, 79, 82, 69, 128, 84, 72, 69, 82,
+    197, 84, 72, 69, 206, 84, 72, 69, 77, 65, 84, 73, 83, 77, 79, 211, 84,
+    72, 69, 77, 65, 128, 84, 72, 69, 77, 193, 84, 72, 69, 72, 128, 84, 72,
+    69, 200, 84, 72, 69, 65, 128, 84, 72, 197, 84, 72, 65, 87, 128, 84, 72,
+    65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, 72, 65, 78, 78, 65, 128, 84,
+    72, 65, 78, 128, 84, 72, 65, 206, 84, 72, 65, 77, 69, 68, 72, 128, 84,
+    72, 65, 76, 128, 84, 72, 65, 204, 84, 72, 65, 74, 128, 84, 72, 65, 201,
+    84, 72, 65, 72, 65, 78, 128, 84, 72, 65, 65, 78, 193, 84, 72, 65, 65, 76,
+    85, 128, 84, 72, 45, 67, 82, 69, 197, 84, 69, 88, 84, 128, 84, 69, 88,
+    212, 84, 69, 88, 128, 84, 69, 86, 73, 82, 128, 84, 69, 85, 84, 69, 85,
+    88, 128, 84, 69, 85, 84, 69, 85, 87, 69, 78, 128, 84, 69, 85, 84, 128,
+    84, 69, 85, 78, 128, 84, 69, 85, 65, 69, 81, 128, 84, 69, 85, 65, 69, 78,
+    128, 84, 69, 85, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, 85, 128, 84,
+    69, 84, 82, 65, 83, 69, 77, 69, 128, 84, 69, 84, 82, 65, 80, 76, 73, 128,
+    84, 69, 84, 82, 65, 71, 82, 65, 205, 84, 69, 84, 82, 65, 70, 79, 78, 73,
+    65, 83, 128, 84, 69, 84, 72, 128, 84, 69, 84, 200, 84, 69, 84, 65, 82,
+    84, 79, 211, 84, 69, 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84,
+    69, 84, 128, 84, 69, 212, 84, 69, 83, 212, 84, 69, 83, 83, 69, 82, 65,
+    128, 84, 69, 83, 83, 69, 82, 193, 84, 69, 83, 83, 65, 82, 79, 206, 84,
+    69, 83, 200, 84, 69, 82, 77, 73, 78, 65, 84, 79, 82, 128, 84, 69, 82, 77,
+    73, 78, 65, 204, 84, 69, 80, 128, 84, 69, 78, 85, 84, 79, 128, 84, 69,
+    78, 85, 128, 84, 69, 78, 213, 84, 69, 78, 84, 72, 128, 84, 69, 78, 84,
+    128, 84, 69, 78, 83, 69, 128, 84, 69, 78, 83, 197, 84, 69, 78, 83, 128,
+    84, 69, 78, 211, 84, 69, 78, 78, 73, 211, 84, 69, 78, 71, 197, 84, 69,
+    78, 45, 84, 72, 73, 82, 84, 89, 128, 84, 69, 78, 128, 84, 69, 206, 84,
+    69, 77, 80, 85, 211, 84, 69, 77, 80, 76, 69, 128, 84, 69, 76, 85, 71,
+    213, 84, 69, 76, 85, 128, 84, 69, 76, 79, 85, 211, 84, 69, 76, 76, 69,
+    210, 84, 69, 76, 73, 83, 72, 193, 84, 69, 76, 69, 86, 73, 83, 73, 79, 78,
+    128, 84, 69, 76, 69, 83, 67, 79, 80, 69, 128, 84, 69, 76, 69, 80, 72, 79,
+    78, 69, 128, 84, 69, 76, 69, 80, 72, 79, 78, 197, 84, 69, 76, 69, 73, 65,
+    128, 84, 69, 76, 69, 71, 82, 65, 80, 200, 84, 69, 75, 128, 84, 69, 73,
+    87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 69, 84, 72, 128, 84, 69,
+    69, 84, 200, 84, 69, 69, 78, 83, 128, 84, 69, 69, 69, 69, 128, 84, 69,
+    197, 84, 69, 68, 85, 78, 71, 128, 84, 69, 68, 68, 217, 84, 69, 65, 82,
+    211, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, 69, 196, 84, 69,
+    65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, 69, 196, 84, 69, 65, 82,
+    68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 69, 65, 82, 45, 79, 70,
+    198, 84, 69, 65, 82, 128, 84, 69, 65, 80, 79, 84, 128, 84, 69, 65, 67,
+    85, 208, 84, 69, 65, 128, 84, 69, 45, 85, 128, 84, 69, 45, 57, 128, 84,
+    69, 45, 56, 128, 84, 69, 45, 55, 128, 84, 69, 45, 54, 128, 84, 69, 45,
+    53, 128, 84, 69, 45, 52, 128, 84, 69, 45, 51, 128, 84, 69, 45, 50, 128,
+    84, 69, 45, 49, 128, 84, 67, 72, 69, 72, 69, 72, 128, 84, 67, 72, 69, 72,
+    69, 200, 84, 67, 72, 69, 72, 128, 84, 67, 72, 69, 200, 84, 67, 72, 69,
+    128, 84, 195, 84, 65, 89, 128, 84, 65, 88, 73, 128, 84, 65, 88, 128, 84,
+    65, 87, 69, 76, 76, 69, 77, 69, 212, 84, 65, 87, 65, 128, 84, 65, 87,
+    128, 84, 65, 215, 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, 65, 86, 128,
+    84, 65, 214, 84, 65, 85, 82, 85, 83, 128, 84, 65, 85, 77, 128, 84, 65,
+    213, 84, 65, 84, 87, 69, 69, 76, 128, 84, 65, 84, 87, 69, 69, 204, 84,
+    65, 84, 84, 79, 79, 69, 196, 84, 65, 84, 128, 84, 65, 83, 83, 73, 128,
+    84, 65, 83, 128, 84, 65, 82, 85, 78, 71, 128, 84, 65, 82, 84, 65, 82, 45,
+    50, 128, 84, 65, 82, 84, 65, 82, 128, 84, 65, 82, 71, 69, 84, 128, 84,
+    65, 81, 128, 84, 65, 80, 69, 82, 128, 84, 65, 80, 197, 84, 65, 80, 128,
+    84, 65, 79, 128, 84, 65, 78, 78, 69, 196, 84, 65, 78, 71, 69, 82, 73, 78,
+    69, 128, 84, 65, 78, 71, 69, 78, 84, 128, 84, 65, 78, 71, 69, 78, 212,
+    84, 65, 78, 199, 84, 65, 78, 65, 66, 65, 84, 193, 84, 65, 78, 65, 128,
+    84, 65, 78, 128, 84, 65, 77, 73, 78, 71, 128, 84, 65, 77, 65, 206, 84,
+    65, 77, 65, 76, 69, 128, 84, 65, 77, 128, 84, 65, 76, 76, 217, 84, 65,
+    76, 76, 128, 84, 65, 76, 204, 84, 65, 76, 73, 78, 71, 128, 84, 65, 76,
+    73, 78, 199, 84, 65, 76, 69, 78, 84, 83, 128, 84, 65, 76, 69, 78, 212,
+    84, 65, 75, 82, 201, 84, 65, 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 75,
+    69, 79, 85, 212, 84, 65, 75, 69, 128, 84, 65, 75, 52, 128, 84, 65, 75,
+    180, 84, 65, 75, 128, 84, 65, 73, 83, 89, 79, 85, 128, 84, 65, 73, 76,
+    76, 69, 83, 211, 84, 65, 73, 76, 128, 84, 65, 73, 204, 84, 65, 72, 65,
+    76, 65, 128, 84, 65, 72, 128, 84, 65, 200, 84, 65, 71, 66, 65, 78, 87,
+    193, 84, 65, 71, 65, 76, 79, 199, 84, 65, 71, 128, 84, 65, 69, 206, 84,
+    65, 67, 79, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85,
+    76, 65, 84, 73, 79, 78, 128, 84, 65, 66, 85, 76, 65, 84, 73, 79, 206, 84,
+    65, 66, 83, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 76, 197, 84, 65,
+    66, 128, 84, 65, 194, 84, 65, 65, 83, 72, 65, 69, 128, 84, 65, 65, 81,
+    128, 84, 65, 65, 77, 128, 84, 65, 65, 76, 85, 74, 193, 84, 65, 65, 73,
+    128, 84, 65, 65, 70, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, 76, 128,
+    84, 65, 45, 52, 128, 84, 65, 45, 51, 128, 84, 65, 45, 50, 128, 84, 65,
+    45, 49, 128, 84, 48, 51, 54, 128, 84, 48, 51, 53, 128, 84, 48, 51, 52,
+    128, 84, 48, 51, 51, 65, 128, 84, 48, 51, 51, 128, 84, 48, 51, 50, 65,
+    128, 84, 48, 51, 50, 128, 84, 48, 51, 49, 128, 84, 48, 51, 48, 128, 84,
+    48, 50, 57, 128, 84, 48, 50, 56, 128, 84, 48, 50, 55, 128, 84, 48, 50,
+    54, 128, 84, 48, 50, 53, 128, 84, 48, 50, 52, 128, 84, 48, 50, 51, 128,
+    84, 48, 50, 50, 128, 84, 48, 50, 49, 128, 84, 48, 50, 48, 128, 84, 48,
+    49, 57, 128, 84, 48, 49, 56, 128, 84, 48, 49, 55, 128, 84, 48, 49, 54,
+    65, 128, 84, 48, 49, 54, 128, 84, 48, 49, 53, 128, 84, 48, 49, 52, 128,
+    84, 48, 49, 51, 128, 84, 48, 49, 50, 128, 84, 48, 49, 49, 65, 128, 84,
+    48, 49, 49, 128, 84, 48, 49, 48, 128, 84, 48, 48, 57, 65, 128, 84, 48,
+    48, 57, 128, 84, 48, 48, 56, 65, 128, 84, 48, 48, 56, 128, 84, 48, 48,
+    55, 65, 128, 84, 48, 48, 55, 128, 84, 48, 48, 54, 128, 84, 48, 48, 53,
+    128, 84, 48, 48, 52, 128, 84, 48, 48, 51, 65, 128, 84, 48, 48, 51, 128,
+    84, 48, 48, 50, 128, 84, 48, 48, 49, 128, 84, 45, 83, 72, 73, 82, 84,
+    128, 84, 45, 82, 69, 88, 128, 83, 90, 90, 128, 83, 90, 87, 71, 128, 83,
+    90, 87, 65, 128, 83, 90, 85, 128, 83, 90, 79, 128, 83, 90, 73, 128, 83,
+    90, 69, 69, 128, 83, 90, 69, 128, 83, 90, 65, 65, 128, 83, 90, 65, 128,
+    83, 90, 128, 83, 89, 88, 128, 83, 89, 84, 128, 83, 89, 83, 84, 69, 205,
+    83, 89, 82, 88, 128, 83, 89, 82, 77, 65, 84, 73, 75, 73, 128, 83, 89, 82,
+    77, 65, 128, 83, 89, 82, 73, 78, 71, 69, 128, 83, 89, 82, 73, 65, 195,
+    83, 89, 82, 128, 83, 89, 80, 128, 83, 89, 79, 85, 87, 65, 128, 83, 89,
+    78, 69, 86, 77, 65, 128, 83, 89, 78, 68, 69, 83, 77, 79, 211, 83, 89, 78,
+    67, 72, 82, 79, 78, 79, 85, 211, 83, 89, 78, 65, 71, 79, 71, 85, 69, 128,
+    83, 89, 78, 65, 71, 77, 193, 83, 89, 78, 65, 70, 73, 128, 83, 89, 78,
+    128, 83, 89, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73,
+    195, 83, 89, 77, 66, 79, 76, 83, 128, 83, 89, 77, 66, 79, 76, 211, 83,
+    89, 77, 66, 79, 76, 45, 57, 128, 83, 89, 77, 66, 79, 76, 45, 56, 128, 83,
+    89, 77, 66, 79, 76, 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, 54, 128, 83,
+    89, 77, 66, 79, 76, 45, 53, 52, 128, 83, 89, 77, 66, 79, 76, 45, 53, 51,
+    128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, 66, 79, 76, 45,
+    53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, 89, 77, 66, 79,
+    76, 45, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 57, 128, 83, 89, 77, 66,
+    79, 76, 45, 52, 56, 128, 83, 89, 77, 66, 79, 76, 45, 52, 55, 128, 83, 89,
+    77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, 45, 52, 51, 128,
+    83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, 79, 76, 45, 52,
+    48, 128, 83, 89, 77, 66, 79, 76, 45, 52, 128, 83, 89, 77, 66, 79, 76, 45,
+    51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, 89, 77, 66, 79,
+    76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, 128, 83, 89, 77,
+    66, 79, 76, 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, 51, 48, 128, 83,
+    89, 77, 66, 79, 76, 45, 51, 128, 83, 89, 77, 66, 79, 76, 45, 50, 57, 128,
+    83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, 79, 76, 45, 50,
+    54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, 77, 66, 79, 76,
+    45, 50, 52, 128, 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, 83, 89, 77, 66,
+    79, 76, 45, 50, 50, 128, 83, 89, 77, 66, 79, 76, 45, 50, 49, 128, 83, 89,
+    77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, 79, 76, 45, 50, 128, 83,
+    89, 77, 66, 79, 76, 45, 49, 57, 128, 83, 89, 77, 66, 79, 76, 45, 49, 56,
+    128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, 77, 66, 79, 76, 45,
+    49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, 89, 77, 66, 79,
+    76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, 83, 89, 77,
+    66, 79, 76, 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 49, 128, 83,
+    89, 77, 66, 79, 76, 45, 49, 48, 128, 83, 89, 77, 66, 79, 76, 45, 49, 128,
+    83, 89, 76, 79, 84, 201, 83, 89, 73, 128, 83, 89, 128, 83, 87, 90, 128,
+    83, 87, 85, 78, 199, 83, 87, 79, 82, 68, 83, 128, 83, 87, 79, 82, 68,
+    128, 83, 87, 79, 79, 128, 83, 87, 79, 128, 83, 87, 73, 82, 204, 83, 87,
+    73, 77, 83, 85, 73, 84, 128, 83, 87, 73, 77, 77, 73, 78, 71, 128, 83, 87,
+    73, 77, 77, 69, 82, 128, 83, 87, 73, 73, 128, 83, 87, 73, 128, 83, 87,
+    71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 69, 69, 212, 83, 87, 69, 65,
+    84, 128, 83, 87, 69, 65, 212, 83, 87, 65, 83, 200, 83, 87, 65, 80, 80,
+    73, 78, 71, 128, 83, 87, 65, 78, 128, 83, 87, 65, 65, 128, 83, 87, 128,
+    83, 86, 65, 83, 84, 201, 83, 86, 65, 82, 73, 84, 65, 128, 83, 86, 65, 82,
+    73, 84, 193, 83, 85, 88, 128, 83, 85, 85, 128, 83, 85, 84, 82, 193, 83,
+    85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 85, 83, 72, 73,
+    128, 83, 85, 82, 89, 65, 128, 83, 85, 82, 88, 128, 83, 85, 82, 82, 79,
+    85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 83, 85, 82, 70, 69, 82,
+    128, 83, 85, 82, 70, 65, 67, 197, 83, 85, 82, 69, 128, 83, 85, 82, 65,
+    78, 71, 128, 83, 85, 82, 57, 128, 83, 85, 82, 128, 83, 85, 210, 83, 85,
+    80, 82, 65, 76, 73, 78, 69, 65, 210, 83, 85, 80, 69, 82, 86, 73, 83, 69,
+    128, 83, 85, 80, 69, 82, 86, 73, 76, 76, 65, 73, 78, 128, 83, 85, 80, 69,
+    82, 83, 69, 84, 128, 83, 85, 80, 69, 82, 83, 69, 212, 83, 85, 80, 69, 82,
+    83, 67, 82, 73, 80, 212, 83, 85, 80, 69, 82, 73, 77, 80, 79, 83, 69, 196,
+    83, 85, 80, 69, 82, 72, 69, 82, 79, 128, 83, 85, 80, 69, 82, 70, 73, 88,
+    69, 196, 83, 85, 80, 69, 210, 83, 85, 80, 128, 83, 85, 79, 88, 128, 83,
+    85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 83, 69, 212, 83, 85, 78,
+    82, 73, 83, 69, 128, 83, 85, 78, 82, 73, 83, 197, 83, 85, 78, 71, 76, 65,
+    83, 83, 69, 83, 128, 83, 85, 78, 71, 128, 83, 85, 78, 70, 76, 79, 87, 69,
+    82, 128, 83, 85, 78, 68, 65, 78, 69, 83, 197, 83, 85, 78, 128, 83, 85,
+    206, 83, 85, 77, 77, 69, 82, 128, 83, 85, 77, 77, 65, 84, 73, 79, 78,
+    128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 83, 85, 77, 65, 83, 72, 128,
+    83, 85, 77, 128, 83, 85, 76, 70, 85, 82, 128, 83, 85, 75, 85, 78, 128,
+    83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, 213, 83, 85, 73,
+    84, 65, 66, 76, 69, 128, 83, 85, 73, 212, 83, 85, 72, 85, 82, 128, 83,
+    85, 69, 128, 83, 85, 68, 50, 128, 83, 85, 68, 128, 83, 85, 67, 75, 73,
+    78, 199, 83, 85, 67, 75, 69, 68, 128, 83, 85, 67, 203, 83, 85, 67, 67,
+    69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67, 67, 69,
+    69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73, 84,
+    128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, 84,
+    73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, 85,
+    66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, 73,
+    80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, 73,
+    78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83, 85,
+    66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65, 84,
+    69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66, 76,
+    73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 82, 128, 83, 85, 66,
+    74, 79, 73, 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73,
+    84, 79, 128, 83, 85, 66, 71, 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79,
+    85, 208, 83, 85, 66, 128, 83, 85, 65, 77, 128, 83, 85, 65, 69, 84, 128,
+    83, 85, 65, 69, 78, 128, 83, 85, 65, 69, 128, 83, 85, 65, 66, 128, 83,
+    85, 65, 128, 83, 85, 45, 56, 128, 83, 85, 45, 55, 128, 83, 85, 45, 54,
+    128, 83, 85, 45, 53, 128, 83, 85, 45, 52, 128, 83, 85, 45, 51, 128, 83,
+    85, 45, 50, 128, 83, 85, 45, 49, 128, 83, 213, 83, 84, 88, 128, 83, 84,
+    87, 65, 128, 83, 84, 85, 80, 65, 128, 83, 84, 85, 70, 70, 69, 196, 83,
+    84, 85, 68, 89, 128, 83, 84, 85, 68, 73, 207, 83, 84, 85, 67, 75, 45, 79,
+    85, 212, 83, 84, 83, 128, 83, 84, 82, 79, 78, 199, 83, 84, 82, 79, 75,
+    69, 83, 128, 83, 84, 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57,
+    128, 83, 84, 82, 79, 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55,
+    128, 83, 84, 82, 79, 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53,
+    128, 83, 84, 82, 79, 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51,
+    128, 83, 84, 82, 79, 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49,
+    49, 128, 83, 84, 82, 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69,
+    45, 49, 128, 83, 84, 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 128, 83,
+    84, 82, 73, 78, 71, 128, 83, 84, 82, 73, 78, 199, 83, 84, 82, 73, 75, 69,
+    84, 72, 82, 79, 85, 71, 72, 128, 83, 84, 82, 73, 75, 197, 83, 84, 82, 73,
+    68, 69, 128, 83, 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72,
+    69, 196, 83, 84, 82, 69, 84, 67, 72, 128, 83, 84, 82, 69, 83, 211, 83,
+    84, 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83,
+    84, 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 87, 128, 83, 84,
+    82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77, 128, 83, 84,
+    82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65, 73,
+    78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, 83,
+    84, 82, 65, 73, 71, 72, 84, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84,
+    82, 65, 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128,
+    83, 84, 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65,
+    84, 67, 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80,
+    65, 71, 69, 128, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78,
+    69, 128, 83, 84, 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, 82,
+    82, 85, 208, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84,
+    73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 73, 67, 75, 73, 78,
+    199, 83, 84, 73, 67, 203, 83, 84, 69, 84, 72, 79, 83, 67, 79, 80, 69,
     128, 83, 84, 69, 82, 69, 79, 128, 83, 84, 69, 80, 128, 83, 84, 69, 78,
     79, 71, 82, 65, 80, 72, 73, 195, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77,
     217, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84,
@@ -1080,95 +1084,136 @@
     69, 45, 83, 72, 73, 70, 84, 45, 51, 128, 83, 73, 78, 71, 76, 69, 45, 83,
     72, 73, 70, 84, 45, 50, 128, 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, 197,
     83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, 197, 83, 73, 78, 71, 65,
-    65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, 72, 201, 83, 73, 206, 83,
-    73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 83, 128, 83, 73, 77, 85, 76, 84,
-    65, 78, 69, 79, 85, 211, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 83, 73,
-    77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, 65, 210, 83, 73, 77, 65, 78,
-    83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, 85, 206, 83, 73, 77, 65,
-    128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73,
-    81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, 69, 128, 83, 73, 76, 72,
-    79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, 128,
-    83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 71, 78, 83, 128, 83, 73,
-    71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204, 83, 73, 71,
-    52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, 73, 69, 69, 128, 83, 73,
-    68, 69, 87, 65, 89, 211, 83, 73, 68, 69, 128, 83, 73, 68, 197, 83, 73,
-    68, 68, 72, 73, 128, 83, 73, 68, 68, 72, 65, 77, 128, 83, 73, 68, 68, 72,
-    65, 205, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, 69,
-    128, 83, 73, 66, 197, 83, 73, 65, 128, 83, 73, 45, 54, 128, 83, 73, 45,
-    53, 128, 83, 73, 45, 52, 128, 83, 73, 45, 51, 128, 83, 73, 45, 50, 128,
-    83, 73, 45, 49, 128, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128,
-    83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83,
-    72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79,
-    89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73,
-    73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, 83,
-    72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 86, 128, 83, 72, 85,
-    88, 128, 83, 72, 85, 85, 128, 83, 72, 85, 84, 84, 76, 69, 67, 79, 67, 75,
-    128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, 128,
-    83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, 128,
-    83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 76, 128, 83, 72,
-    85, 70, 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, 72,
-    85, 69, 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 65, 78, 71, 88,
-    73, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, 72,
-    84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, 82, 85, 71, 128,
-    83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73,
-    73, 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128, 83, 72, 79, 88, 128,
-    83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83,
-    72, 79, 85, 76, 68, 69, 210, 83, 72, 79, 85, 128, 83, 72, 79, 84, 128,
-    83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84, 211, 83, 72, 79, 82, 84,
-    72, 65, 78, 196, 83, 72, 79, 82, 84, 69, 78, 69, 82, 128, 83, 72, 79, 82,
-    84, 67, 65, 75, 69, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 89,
-    82, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 84, 89, 210, 83, 72,
-    79, 82, 84, 45, 84, 87, 73, 71, 45, 83, 79, 204, 83, 72, 79, 82, 84, 45,
-    84, 87, 73, 71, 45, 79, 83, 211, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71,
-    45, 78, 65, 85, 196, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 77, 65,
-    68, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 72, 65, 71, 65, 76,
-    204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 66, 74, 65, 82, 75, 65,
-    206, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 65, 210, 83, 72, 79, 82,
-    84, 128, 83, 72, 79, 82, 212, 83, 72, 79, 81, 128, 83, 72, 79, 209, 83,
-    72, 79, 80, 80, 73, 78, 199, 83, 72, 79, 80, 128, 83, 72, 79, 79, 84, 73,
-    78, 199, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 73, 128, 83, 72, 79,
-    79, 128, 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 69, 83, 128,
-    83, 72, 79, 69, 128, 83, 72, 79, 197, 83, 72, 79, 67, 75, 69, 196, 83,
-    72, 79, 65, 128, 83, 72, 79, 128, 83, 72, 73, 89, 89, 65, 65, 76, 65, 65,
-    128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, 72, 73, 82, 212,
-    83, 72, 73, 82, 65, 69, 128, 83, 72, 73, 82, 128, 83, 72, 73, 210, 83,
-    72, 73, 81, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128,
-    83, 72, 73, 78, 68, 193, 83, 72, 73, 206, 83, 72, 73, 77, 65, 128, 83,
-    72, 73, 77, 193, 83, 72, 73, 77, 128, 83, 72, 73, 205, 83, 72, 73, 73,
-    78, 128, 83, 72, 73, 73, 128, 83, 72, 73, 70, 212, 83, 72, 73, 69, 76,
-    68, 128, 83, 72, 73, 68, 128, 83, 72, 73, 196, 83, 72, 72, 65, 128, 83,
-    72, 72, 193, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69,
-    85, 88, 128, 83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84,
-    85, 128, 83, 72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, 69, 128,
-    83, 72, 69, 84, 128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, 65, 77,
-    128, 83, 72, 69, 83, 72, 73, 71, 128, 83, 72, 69, 83, 72, 73, 199, 83,
-    72, 69, 83, 72, 50, 128, 83, 72, 69, 83, 72, 128, 83, 72, 69, 83, 200,
-    83, 72, 69, 81, 69, 204, 83, 72, 69, 80, 128, 83, 72, 69, 78, 128, 83,
-    72, 69, 76, 76, 128, 83, 72, 69, 76, 204, 83, 72, 69, 76, 70, 128, 83,
-    72, 69, 73, 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, 69, 80, 128, 83,
-    72, 69, 69, 78, 85, 128, 83, 72, 69, 69, 78, 128, 83, 72, 69, 69, 206,
-    83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79, 65, 84, 128, 83, 72, 197,
-    83, 72, 67, 72, 79, 79, 73, 128, 83, 72, 67, 72, 65, 128, 83, 72, 65, 89,
-    128, 83, 72, 65, 88, 128, 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83,
-    72, 65, 86, 73, 65, 206, 83, 72, 65, 86, 69, 196, 83, 72, 65, 85, 128,
-    83, 72, 65, 84, 128, 83, 72, 65, 82, 85, 128, 83, 72, 65, 82, 213, 83,
-    72, 65, 82, 80, 128, 83, 72, 65, 82, 208, 83, 72, 65, 82, 75, 128, 83,
-    72, 65, 82, 65, 68, 193, 83, 72, 65, 82, 65, 128, 83, 72, 65, 82, 50,
-    128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73, 78, 71, 128, 83, 72, 65,
-    80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72, 65, 80, 128, 83, 72, 65,
-    78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65, 206, 83, 72, 65, 77, 82,
-    79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, 72, 65,
-    76, 76, 79, 215, 83, 72, 65, 75, 84, 73, 128, 83, 72, 65, 75, 73, 78, 71,
-    128, 83, 72, 65, 75, 73, 78, 199, 83, 72, 65, 75, 69, 82, 128, 83, 72,
-    65, 75, 128, 83, 72, 65, 73, 128, 83, 72, 65, 70, 84, 128, 83, 72, 65,
-    70, 212, 83, 72, 65, 68, 79, 87, 69, 196, 83, 72, 65, 68, 69, 196, 83,
-    72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68,
-    193, 83, 72, 65, 68, 128, 83, 72, 65, 196, 83, 72, 65, 66, 54, 128, 83,
-    72, 65, 65, 128, 83, 72, 65, 54, 128, 83, 72, 65, 182, 83, 72, 65, 51,
-    128, 83, 72, 65, 179, 83, 71, 82, 193, 83, 71, 79, 210, 83, 71, 67, 128,
-    83, 71, 65, 215, 83, 71, 65, 194, 83, 71, 128, 83, 69, 89, 75, 128, 83,
-    69, 88, 84, 85, 76, 193, 83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 88, 84,
-    65, 78, 211, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, 83, 69, 86, 69, 78,
+    65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, 72, 201, 83, 73, 78, 128,
+    83, 73, 206, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 83, 128, 83, 73,
+    77, 85, 76, 84, 65, 78, 69, 79, 85, 211, 83, 73, 77, 80, 76, 73, 70, 73,
+    69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 77, 73, 76, 65, 210,
+    83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, 76, 85, 78, 71, 85, 206,
+    83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, 128, 83, 73, 76, 75, 128,
+    83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, 79, 85, 69, 84, 84, 69, 128,
+    83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, 73, 76, 65, 51, 128, 83, 73,
+    75, 73, 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 71, 78, 83,
+    128, 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204,
+    83, 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, 73, 69, 69,
+    128, 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 69, 128, 83, 73, 68,
+    197, 83, 73, 68, 68, 72, 73, 128, 83, 73, 68, 68, 72, 65, 77, 128, 83,
+    73, 68, 68, 72, 65, 205, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67,
+    75, 76, 69, 128, 83, 73, 66, 197, 83, 73, 65, 128, 83, 73, 45, 54, 128,
+    83, 73, 45, 53, 128, 83, 73, 45, 52, 128, 83, 73, 45, 51, 128, 83, 73,
+    45, 50, 128, 83, 73, 45, 49, 128, 83, 201, 83, 72, 89, 88, 128, 83, 72,
+    89, 84, 128, 83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, 89,
+    80, 128, 83, 72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, 83,
+    72, 87, 79, 89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, 83,
+    72, 87, 73, 73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, 72,
+    87, 197, 83, 72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 86, 128,
+    83, 72, 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, 85, 84, 84, 76, 69, 67,
+    79, 67, 75, 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72,
+    85, 82, 128, 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85,
+    79, 80, 128, 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 76,
+    128, 83, 72, 85, 70, 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85,
+    69, 78, 83, 72, 85, 69, 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85,
+    65, 78, 71, 88, 73, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72,
+    85, 128, 83, 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72,
+    82, 85, 71, 128, 83, 72, 82, 73, 78, 69, 128, 83, 72, 82, 73, 77, 80,
+    128, 83, 72, 82, 73, 73, 128, 83, 72, 82, 73, 128, 83, 72, 79, 89, 128,
+    83, 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, 76, 68,
+    69, 82, 69, 196, 83, 72, 79, 85, 76, 68, 69, 210, 83, 72, 79, 85, 128,
+    83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, 84,
+    211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, 72, 79, 82, 84, 69, 78, 69,
+    82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, 82, 84, 45,
+    84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71,
+    45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 83, 79, 204,
+    83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, 72, 79, 82,
+    84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, 84, 45, 84,
+    87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71,
+    45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45,
+    66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45,
+    65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, 72, 79, 81,
+    128, 83, 72, 79, 209, 83, 72, 79, 80, 80, 73, 78, 199, 83, 72, 79, 80,
+    128, 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, 128, 83, 72,
+    79, 79, 73, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, 201, 83, 72, 79,
+    199, 83, 72, 79, 69, 83, 128, 83, 72, 79, 69, 128, 83, 72, 79, 197, 83,
+    72, 79, 67, 75, 69, 196, 83, 72, 79, 65, 128, 83, 72, 79, 128, 83, 72,
+    73, 89, 89, 65, 65, 76, 65, 65, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73,
+    84, 193, 83, 72, 73, 82, 212, 83, 72, 73, 82, 65, 69, 128, 83, 72, 73,
+    82, 128, 83, 72, 73, 210, 83, 72, 73, 81, 128, 83, 72, 73, 78, 84, 207,
+    83, 72, 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73, 206,
+    83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, 77, 128, 83,
+    72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 83, 72, 73,
+    70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, 83, 72, 73,
+    196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, 128, 83, 72,
+    69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, 79, 81, 128,
+    83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83, 72, 69, 85, 65, 69, 81, 128,
+    83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84, 128, 83, 72, 69, 212, 83,
+    72, 69, 83, 72, 76, 65, 77, 128, 83, 72, 69, 83, 72, 73, 71, 128, 83, 72,
+    69, 83, 72, 73, 199, 83, 72, 69, 83, 72, 50, 128, 83, 72, 69, 83, 72,
+    128, 83, 72, 69, 83, 200, 83, 72, 69, 81, 69, 204, 83, 72, 69, 80, 128,
+    83, 72, 69, 78, 128, 83, 72, 69, 76, 76, 128, 83, 72, 69, 76, 204, 83,
+    72, 69, 76, 70, 128, 83, 72, 69, 73, 128, 83, 72, 69, 71, 57, 128, 83,
+    72, 69, 69, 80, 128, 83, 72, 69, 69, 78, 85, 128, 83, 72, 69, 69, 78,
+    128, 83, 72, 69, 69, 206, 83, 72, 69, 69, 128, 83, 72, 69, 45, 71, 79,
+    65, 84, 128, 83, 72, 197, 83, 72, 67, 72, 79, 79, 73, 128, 83, 72, 67,
+    72, 65, 128, 83, 72, 65, 89, 128, 83, 72, 65, 88, 128, 83, 72, 65, 86,
+    73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 83, 72, 65, 86, 69,
+    196, 83, 72, 65, 85, 128, 83, 72, 65, 84, 128, 83, 72, 65, 82, 85, 128,
+    83, 72, 65, 82, 213, 83, 72, 65, 82, 80, 128, 83, 72, 65, 82, 208, 83,
+    72, 65, 82, 75, 128, 83, 72, 65, 82, 65, 68, 193, 83, 72, 65, 82, 65,
+    128, 83, 72, 65, 82, 50, 128, 83, 72, 65, 82, 178, 83, 72, 65, 80, 73,
+    78, 71, 128, 83, 72, 65, 80, 69, 83, 128, 83, 72, 65, 80, 197, 83, 72,
+    65, 80, 128, 83, 72, 65, 78, 71, 128, 83, 72, 65, 78, 128, 83, 72, 65,
+    206, 83, 72, 65, 77, 82, 79, 67, 75, 128, 83, 72, 65, 76, 83, 72, 69, 76,
+    69, 84, 128, 83, 72, 65, 76, 76, 79, 215, 83, 72, 65, 75, 84, 73, 128,
+    83, 72, 65, 75, 73, 78, 71, 128, 83, 72, 65, 75, 73, 78, 199, 83, 72, 65,
+    75, 69, 82, 128, 83, 72, 65, 75, 128, 83, 72, 65, 73, 128, 83, 72, 65,
+    70, 84, 128, 83, 72, 65, 70, 212, 83, 72, 65, 68, 79, 87, 69, 196, 83,
+    72, 65, 68, 69, 196, 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 197, 83,
+    72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, 193, 83, 72, 65, 68, 128,
+    83, 72, 65, 196, 83, 72, 65, 66, 54, 128, 83, 72, 65, 65, 128, 83, 72,
+    65, 54, 128, 83, 72, 65, 182, 83, 72, 65, 51, 128, 83, 72, 65, 179, 83,
+    71, 82, 193, 83, 71, 79, 210, 83, 71, 67, 128, 83, 71, 65, 215, 83, 71,
+    65, 194, 83, 71, 128, 83, 69, 89, 75, 128, 83, 69, 88, 84, 85, 76, 193,
+    83, 69, 88, 84, 73, 76, 69, 128, 83, 69, 88, 84, 65, 78, 84, 45, 54, 128,
+    83, 69, 88, 84, 65, 78, 84, 45, 53, 54, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 53, 128, 83, 69, 88, 84, 65, 78, 84, 45, 52, 54, 128, 83, 69, 88, 84,
+    65, 78, 84, 45, 52, 53, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 52, 53,
+    128, 83, 69, 88, 84, 65, 78, 84, 45, 52, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 51, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 51, 53, 54, 128, 83, 69,
+    88, 84, 65, 78, 84, 45, 51, 53, 128, 83, 69, 88, 84, 65, 78, 84, 45, 51,
+    52, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 51, 52, 53, 54, 128, 83, 69,
+    88, 84, 65, 78, 84, 45, 51, 52, 53, 128, 83, 69, 88, 84, 65, 78, 84, 45,
+    51, 52, 128, 83, 69, 88, 84, 65, 78, 84, 45, 51, 128, 83, 69, 88, 84, 65,
+    78, 84, 45, 50, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 50, 53, 54, 128,
+    83, 69, 88, 84, 65, 78, 84, 45, 50, 53, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 50, 52, 53, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 50, 52, 53, 128,
+    83, 69, 88, 84, 65, 78, 84, 45, 50, 52, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 50, 51, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 50, 51, 53, 54, 128,
+    83, 69, 88, 84, 65, 78, 84, 45, 50, 51, 53, 128, 83, 69, 88, 84, 65, 78,
+    84, 45, 50, 51, 52, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 50, 51, 52,
+    53, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 50, 51, 52, 53, 128, 83, 69,
+    88, 84, 65, 78, 84, 45, 50, 51, 52, 128, 83, 69, 88, 84, 65, 78, 84, 45,
+    50, 51, 128, 83, 69, 88, 84, 65, 78, 84, 45, 50, 128, 83, 69, 88, 84, 65,
+    78, 84, 45, 49, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 53, 54, 128,
+    83, 69, 88, 84, 65, 78, 84, 45, 49, 53, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 49, 52, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 52, 53, 54, 128,
+    83, 69, 88, 84, 65, 78, 84, 45, 49, 52, 53, 128, 83, 69, 88, 84, 65, 78,
+    84, 45, 49, 52, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 51, 54, 128, 83,
+    69, 88, 84, 65, 78, 84, 45, 49, 51, 53, 54, 128, 83, 69, 88, 84, 65, 78,
+    84, 45, 49, 51, 52, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 51, 52,
+    53, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 51, 52, 53, 128, 83, 69,
+    88, 84, 65, 78, 84, 45, 49, 51, 52, 128, 83, 69, 88, 84, 65, 78, 84, 45,
+    49, 51, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50, 54, 128, 83, 69, 88,
+    84, 65, 78, 84, 45, 49, 50, 53, 54, 128, 83, 69, 88, 84, 65, 78, 84, 45,
+    49, 50, 53, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50, 52, 54, 128, 83,
+    69, 88, 84, 65, 78, 84, 45, 49, 50, 52, 53, 54, 128, 83, 69, 88, 84, 65,
+    78, 84, 45, 49, 50, 52, 53, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50,
+    52, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50, 51, 54, 128, 83, 69, 88,
+    84, 65, 78, 84, 45, 49, 50, 51, 53, 54, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 49, 50, 51, 53, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50, 51, 52,
+    54, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50, 51, 52, 53, 128, 83, 69,
+    88, 84, 65, 78, 84, 45, 49, 50, 51, 52, 128, 83, 69, 88, 84, 65, 78, 84,
+    45, 49, 50, 51, 128, 83, 69, 88, 84, 65, 78, 84, 45, 49, 50, 128, 83, 69,
+    88, 84, 65, 78, 84, 45, 49, 128, 83, 69, 88, 84, 65, 78, 211, 83, 69, 87,
+    73, 78, 199, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, 83, 69, 86, 69, 78,
     84, 89, 128, 83, 69, 86, 69, 78, 84, 217, 83, 69, 86, 69, 78, 84, 72,
     128, 83, 69, 86, 69, 78, 84, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69,
     69, 206, 83, 69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 83, 69, 86,
@@ -1372,425 +1417,430 @@
     76, 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 128,
     83, 69, 76, 69, 67, 84, 79, 210, 83, 69, 76, 69, 67, 84, 69, 196, 83, 69,
     73, 83, 77, 65, 128, 83, 69, 73, 83, 77, 193, 83, 69, 72, 128, 83, 69,
-    71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, 77, 69, 78, 84,
-    128, 83, 69, 69, 86, 128, 83, 69, 69, 78, 85, 128, 83, 69, 69, 78, 128,
-    83, 69, 69, 206, 83, 69, 69, 68, 76, 73, 78, 71, 128, 83, 69, 69, 45, 78,
-    79, 45, 69, 86, 73, 204, 83, 69, 68, 78, 65, 128, 83, 69, 67, 84, 79, 82,
-    128, 83, 69, 67, 84, 73, 79, 78, 128, 83, 69, 67, 84, 73, 79, 206, 83,
-    69, 67, 82, 69, 84, 128, 83, 69, 67, 65, 78, 84, 128, 83, 69, 66, 65, 84,
-    66, 69, 73, 212, 83, 69, 65, 84, 128, 83, 69, 65, 76, 128, 83, 69, 65,
-    71, 85, 76, 204, 83, 69, 45, 53, 128, 83, 69, 45, 52, 128, 83, 69, 45,
-    51, 128, 83, 68, 79, 78, 199, 83, 68, 128, 83, 67, 87, 65, 128, 83, 67,
-    82, 85, 80, 76, 69, 128, 83, 67, 82, 79, 76, 76, 128, 83, 67, 82, 73, 80,
-    84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67,
-    82, 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67,
-    79, 82, 80, 73, 79, 78, 128, 83, 67, 79, 82, 69, 128, 83, 67, 79, 79, 84,
-    69, 82, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, 73, 128, 83,
-    67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82, 79, 69, 68, 69,
-    82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79, 204, 83, 67,
-    72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67, 69, 80, 84, 69,
-    210, 83, 67, 65, 82, 70, 128, 83, 67, 65, 78, 68, 73, 67, 85, 83, 128,
-    83, 67, 65, 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, 83, 67, 65, 76, 69,
-    83, 128, 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, 65, 89, 73, 83, 201,
-    83, 65, 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, 83, 65, 88, 79, 80, 72,
-    79, 78, 69, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128, 83, 65, 87, 65, 78,
-    128, 83, 65, 87, 128, 83, 65, 86, 79, 85, 82, 73, 78, 199, 83, 65, 85,
-    82, 79, 80, 79, 68, 128, 83, 65, 85, 82, 65, 83, 72, 84, 82, 193, 83, 65,
-    85, 73, 76, 128, 83, 65, 85, 67, 69, 82, 128, 83, 65, 84, 85, 82, 78,
-    128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, 128, 83, 65, 84, 75, 65, 65,
-    78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 69, 128, 83, 65, 84, 69, 76, 76,
-    73, 84, 197, 83, 65, 84, 67, 72, 69, 76, 128, 83, 65, 84, 65, 78, 71, 65,
-    128, 83, 65, 83, 72, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128,
-    83, 65, 82, 193, 83, 65, 82, 128, 83, 65, 81, 128, 83, 65, 80, 65, 128,
-    83, 65, 78, 89, 79, 79, 71, 193, 83, 65, 78, 89, 65, 75, 193, 83, 65, 78,
-    84, 73, 73, 77, 85, 128, 83, 65, 78, 83, 75, 82, 73, 212, 83, 65, 78, 78,
-    89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65, 78, 68, 87, 73, 67, 72,
-    128, 83, 65, 78, 68, 72, 201, 83, 65, 78, 68, 65, 76, 128, 83, 65, 78,
-    65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 83, 65, 77, 86,
-    65, 84, 128, 83, 65, 77, 80, 73, 128, 83, 65, 77, 80, 72, 65, 79, 128,
-    83, 65, 77, 75, 65, 128, 83, 65, 77, 69, 75, 72, 128, 83, 65, 77, 69, 75,
-    200, 83, 65, 77, 66, 65, 128, 83, 65, 77, 65, 82, 73, 84, 65, 206, 83,
-    65, 77, 128, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76,
-    79, 128, 83, 65, 76, 84, 45, 50, 128, 83, 65, 76, 84, 128, 83, 65, 76,
-    212, 83, 65, 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, 76, 193,
-    83, 65, 76, 65, 205, 83, 65, 76, 65, 68, 128, 83, 65, 76, 65, 128, 83,
-    65, 76, 45, 65, 77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83, 65,
-    75, 84, 65, 128, 83, 65, 75, 79, 84, 128, 83, 65, 75, 73, 78, 128, 83,
-    65, 75, 72, 193, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, 197, 83,
-    65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, 83, 65, 73,
-    76, 128, 83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, 83, 65, 71,
-    73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, 65, 71,
-    128, 83, 65, 199, 83, 65, 70, 72, 65, 128, 83, 65, 70, 69, 84, 217, 83,
-    65, 68, 72, 69, 128, 83, 65, 68, 72, 197, 83, 65, 68, 69, 128, 83, 65,
-    68, 128, 83, 65, 196, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83,
-    65, 65, 73, 128, 83, 65, 65, 68, 72, 85, 128, 83, 65, 45, 73, 128, 83,
-    65, 45, 56, 128, 83, 65, 45, 55, 128, 83, 65, 45, 54, 128, 83, 65, 45,
-    53, 128, 83, 65, 45, 52, 128, 83, 65, 45, 51, 128, 83, 65, 45, 50, 128,
-    83, 65, 45, 49, 128, 83, 48, 52, 54, 128, 83, 48, 52, 53, 128, 83, 48,
-    52, 52, 128, 83, 48, 52, 51, 128, 83, 48, 52, 50, 128, 83, 48, 52, 49,
-    128, 83, 48, 52, 48, 128, 83, 48, 51, 57, 128, 83, 48, 51, 56, 128, 83,
-    48, 51, 55, 128, 83, 48, 51, 54, 128, 83, 48, 51, 53, 65, 128, 83, 48,
-    51, 53, 128, 83, 48, 51, 52, 128, 83, 48, 51, 51, 128, 83, 48, 51, 50,
-    128, 83, 48, 51, 49, 128, 83, 48, 51, 48, 128, 83, 48, 50, 57, 128, 83,
-    48, 50, 56, 128, 83, 48, 50, 55, 128, 83, 48, 50, 54, 66, 128, 83, 48,
-    50, 54, 65, 128, 83, 48, 50, 54, 128, 83, 48, 50, 53, 128, 83, 48, 50,
-    52, 128, 83, 48, 50, 51, 128, 83, 48, 50, 50, 128, 83, 48, 50, 49, 128,
-    83, 48, 50, 48, 128, 83, 48, 49, 57, 128, 83, 48, 49, 56, 128, 83, 48,
-    49, 55, 65, 128, 83, 48, 49, 55, 128, 83, 48, 49, 54, 128, 83, 48, 49,
-    53, 128, 83, 48, 49, 52, 66, 128, 83, 48, 49, 52, 65, 128, 83, 48, 49,
-    52, 128, 83, 48, 49, 51, 128, 83, 48, 49, 50, 128, 83, 48, 49, 49, 128,
-    83, 48, 49, 48, 128, 83, 48, 48, 57, 128, 83, 48, 48, 56, 128, 83, 48,
-    48, 55, 128, 83, 48, 48, 54, 65, 128, 83, 48, 48, 54, 128, 83, 48, 48,
-    53, 128, 83, 48, 48, 52, 128, 83, 48, 48, 51, 128, 83, 48, 48, 50, 65,
-    128, 83, 48, 48, 50, 128, 83, 48, 48, 49, 128, 83, 45, 87, 128, 83, 45,
-    83, 72, 65, 80, 69, 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, 84,
-    128, 82, 89, 82, 88, 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 87, 79,
-    79, 128, 82, 87, 79, 128, 82, 87, 73, 73, 128, 82, 87, 73, 128, 82, 87,
-    69, 69, 128, 82, 87, 69, 128, 82, 87, 65, 72, 65, 128, 82, 87, 65, 65,
-    128, 82, 87, 65, 128, 82, 85, 88, 128, 82, 85, 85, 66, 85, 82, 85, 128,
-    82, 85, 85, 128, 82, 85, 84, 128, 82, 85, 83, 83, 73, 65, 206, 82, 85,
-    83, 73, 128, 82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73,
-    128, 82, 85, 80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85,
-    79, 80, 128, 82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78,
-    78, 73, 78, 199, 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 73, 195, 82,
-    85, 78, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82,
-    85, 205, 82, 85, 76, 69, 82, 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, 89,
-    69, 68, 128, 82, 85, 76, 69, 128, 82, 85, 76, 65, 73, 128, 82, 85, 75,
-    75, 65, 75, 72, 65, 128, 82, 85, 73, 83, 128, 82, 85, 71, 66, 217, 82,
-    85, 68, 73, 77, 69, 78, 84, 193, 82, 85, 66, 76, 197, 82, 85, 194, 82,
-    85, 65, 128, 82, 85, 45, 54, 128, 82, 85, 45, 53, 128, 82, 85, 45, 52,
-    128, 82, 85, 45, 51, 128, 82, 85, 45, 50, 128, 82, 85, 45, 49, 128, 82,
-    84, 72, 65, 78, 199, 82, 84, 69, 128, 82, 84, 65, 71, 83, 128, 82, 84,
-    65, 71, 211, 82, 82, 89, 88, 128, 82, 82, 89, 84, 128, 82, 82, 89, 82,
-    88, 128, 82, 82, 89, 82, 128, 82, 82, 89, 80, 128, 82, 82, 85, 88, 128,
-    82, 82, 85, 85, 128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, 82,
-    82, 85, 82, 128, 82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, 82,
-    85, 79, 128, 82, 82, 85, 128, 82, 82, 82, 65, 128, 82, 82, 79, 88, 128,
-    82, 82, 79, 84, 128, 82, 82, 79, 80, 128, 82, 82, 79, 79, 128, 82, 82,
-    79, 128, 82, 82, 73, 73, 128, 82, 82, 73, 128, 82, 82, 69, 88, 128, 82,
-    82, 69, 84, 128, 82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82, 82, 69,
-    200, 82, 82, 69, 69, 128, 82, 82, 69, 128, 82, 82, 65, 88, 128, 82, 82,
-    65, 85, 128, 82, 82, 65, 73, 128, 82, 82, 65, 65, 128, 82, 79, 87, 66,
-    79, 65, 84, 128, 82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84,
-    73, 80, 80, 69, 196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, 84,
-    73, 79, 78, 83, 128, 82, 79, 84, 65, 84, 73, 79, 78, 45, 87, 65, 76, 76,
-    80, 76, 65, 78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 45, 70, 76, 79, 79,
-    82, 80, 76, 65, 78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 128, 82, 79, 84,
-    65, 84, 73, 79, 206, 82, 79, 84, 65, 84, 69, 196, 82, 79, 83, 72, 128,
-    82, 79, 83, 69, 84, 84, 69, 128, 82, 79, 83, 69, 128, 82, 79, 79, 84,
-    128, 82, 79, 79, 83, 84, 69, 82, 128, 82, 79, 79, 77, 128, 82, 79, 79,
-    75, 128, 82, 79, 79, 203, 82, 79, 79, 70, 128, 82, 79, 77, 65, 78, 73,
-    65, 206, 82, 79, 77, 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 73, 78,
-    199, 82, 79, 76, 76, 69, 210, 82, 79, 76, 76, 69, 68, 45, 85, 208, 82,
-    79, 76, 204, 82, 79, 72, 73, 78, 71, 89, 193, 82, 79, 71, 128, 82, 79,
-    196, 82, 79, 67, 75, 69, 84, 128, 82, 79, 67, 203, 82, 79, 67, 128, 82,
-    79, 66, 79, 212, 82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84, 69, 196,
-    82, 79, 65, 82, 128, 82, 79, 65, 128, 82, 79, 45, 54, 128, 82, 79, 45,
-    53, 128, 82, 79, 45, 52, 128, 82, 79, 45, 51, 128, 82, 79, 45, 50, 128,
-    82, 79, 45, 49, 128, 82, 78, 89, 73, 78, 199, 82, 78, 79, 79, 78, 128,
-    82, 78, 79, 79, 206, 82, 78, 65, 205, 82, 77, 84, 128, 82, 76, 79, 128,
-    82, 76, 77, 128, 82, 76, 73, 128, 82, 76, 69, 128, 82, 74, 69, 211, 82,
-    74, 69, 128, 82, 74, 197, 82, 73, 86, 69, 82, 128, 82, 73, 84, 85, 65,
-    76, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 73, 84, 83, 73, 128, 82,
-    73, 83, 73, 78, 199, 82, 73, 83, 72, 128, 82, 73, 82, 65, 128, 82, 73,
-    80, 80, 76, 197, 82, 73, 80, 128, 82, 73, 78, 71, 211, 82, 73, 78, 71,
-    73, 78, 199, 82, 73, 78, 71, 69, 196, 82, 73, 78, 70, 79, 82, 90, 65, 78,
-    68, 79, 128, 82, 73, 206, 82, 73, 77, 71, 66, 65, 128, 82, 73, 77, 128,
-    82, 73, 75, 82, 73, 75, 128, 82, 73, 71, 86, 69, 68, 73, 195, 82, 73, 71,
-    72, 84, 87, 65, 82, 68, 83, 128, 82, 73, 71, 72, 84, 72, 65, 78, 196, 82,
-    73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 82, 73, 71, 72, 84, 45,
-    83, 73, 68, 197, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 79, 87, 69, 196,
-    82, 73, 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 71, 72, 84, 45,
-    80, 79, 73, 78, 84, 73, 78, 199, 82, 73, 71, 72, 84, 45, 76, 73, 71, 72,
-    84, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 68, 69, 196, 82, 73, 71,
-    72, 84, 45, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 70, 65, 67, 73, 78,
-    199, 82, 73, 71, 72, 84, 128, 82, 73, 70, 76, 69, 128, 82, 73, 69, 85,
-    76, 45, 89, 69, 83, 73, 69, 85, 78, 71, 128, 82, 73, 69, 85, 76, 45, 89,
-    69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 45, 72, 73, 69, 85, 72, 128, 82,
-    73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 82,
-    73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128,
-    82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76,
-    45, 84, 72, 73, 69, 85, 84, 72, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65,
-    78, 71, 84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65,
-    78, 71, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71,
-    80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 75,
-    73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, 128, 82,
-    73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128,
-    82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 82,
-    73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, 80, 72,
-    128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72,
-    128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76,
-    45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78,
-    83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 78, 73, 69, 85, 78, 128, 82,
-    73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 83, 73, 79, 83, 128, 82, 73,
-    69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 75, 73, 89, 69, 79, 75, 128, 82,
-    73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 72, 73, 69, 85, 72, 128, 82,
-    73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 75,
-    73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 75,
-    73, 89, 69, 79, 75, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45,
-    75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69,
-    79, 85, 78, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 72, 73, 69,
-    85, 72, 128, 82, 73, 69, 85, 76, 45, 67, 73, 69, 85, 67, 128, 82, 73, 69,
-    85, 204, 82, 73, 69, 76, 128, 82, 73, 69, 69, 128, 82, 73, 67, 75, 83,
-    72, 65, 87, 128, 82, 73, 67, 69, 77, 128, 82, 73, 67, 69, 128, 82, 73,
-    67, 197, 82, 73, 66, 66, 79, 78, 128, 82, 73, 66, 66, 79, 206, 82, 73,
-    65, 204, 82, 73, 45, 55, 128, 82, 73, 45, 54, 128, 82, 73, 45, 53, 128,
-    82, 73, 45, 52, 128, 82, 73, 45, 51, 128, 82, 73, 45, 50, 128, 82, 73,
-    45, 49, 128, 82, 72, 79, 84, 73, 195, 82, 72, 79, 128, 82, 72, 207, 82,
-    72, 73, 78, 79, 67, 69, 82, 79, 83, 128, 82, 72, 65, 128, 82, 72, 128,
-    82, 71, 89, 73, 78, 71, 83, 128, 82, 71, 89, 65, 78, 128, 82, 71, 89,
-    193, 82, 69, 86, 79, 76, 86, 73, 78, 199, 82, 69, 86, 79, 76, 85, 84, 73,
-    79, 78, 128, 82, 69, 86, 77, 65, 128, 82, 69, 86, 73, 65, 128, 82, 69,
-    86, 69, 82, 83, 69, 68, 45, 83, 67, 72, 87, 65, 128, 82, 69, 86, 69, 82,
-    83, 69, 68, 128, 82, 69, 86, 69, 82, 83, 69, 196, 82, 69, 86, 69, 82, 83,
-    197, 82, 69, 85, 88, 128, 82, 69, 85, 128, 82, 69, 84, 85, 82, 78, 128,
-    82, 69, 84, 85, 82, 206, 82, 69, 84, 82, 79, 70, 76, 69, 216, 82, 69, 84,
-    82, 69, 65, 84, 128, 82, 69, 84, 79, 82, 84, 128, 82, 69, 83, 85, 80, 73,
-    78, 85, 83, 128, 82, 69, 83, 84, 82, 79, 79, 77, 128, 82, 69, 83, 84, 82,
-    73, 67, 84, 69, 196, 82, 69, 83, 84, 128, 82, 69, 83, 80, 79, 78, 83, 69,
-    128, 82, 69, 83, 79, 85, 82, 67, 69, 128, 82, 69, 83, 79, 76, 85, 84, 73,
-    79, 78, 128, 82, 69, 83, 73, 83, 84, 65, 78, 67, 69, 128, 82, 69, 83, 73,
-    68, 69, 78, 67, 69, 128, 82, 69, 83, 72, 45, 65, 89, 73, 78, 45, 68, 65,
-    76, 69, 84, 72, 128, 82, 69, 83, 72, 45, 65, 89, 73, 78, 128, 82, 69, 83,
-    200, 82, 69, 82, 69, 78, 71, 71, 65, 78, 128, 82, 69, 82, 69, 75, 65, 78,
-    128, 82, 69, 80, 82, 69, 83, 69, 78, 84, 128, 82, 69, 80, 76, 65, 67, 69,
-    77, 69, 78, 212, 82, 69, 80, 72, 65, 128, 82, 69, 80, 72, 128, 82, 69,
-    80, 69, 84, 73, 84, 73, 79, 206, 82, 69, 80, 69, 65, 84, 69, 196, 82, 69,
-    80, 69, 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 89, 65,
-    128, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, 69, 78, 84, 79, 71, 69,
-    78, 128, 82, 69, 78, 128, 82, 69, 206, 82, 69, 77, 85, 128, 82, 69, 77,
-    73, 78, 68, 69, 210, 82, 69, 77, 69, 68, 89, 128, 82, 69, 76, 73, 71, 73,
-    79, 78, 128, 82, 69, 76, 73, 69, 86, 69, 196, 82, 69, 76, 69, 65, 83, 69,
-    128, 82, 69, 76, 65, 88, 69, 68, 128, 82, 69, 76, 65, 84, 73, 79, 78, 65,
-    204, 82, 69, 76, 65, 84, 73, 79, 78, 128, 82, 69, 76, 65, 65, 128, 82,
-    69, 74, 65, 78, 199, 82, 69, 73, 87, 65, 128, 82, 69, 73, 196, 82, 69,
-    73, 128, 82, 69, 71, 85, 76, 85, 83, 45, 52, 128, 82, 69, 71, 85, 76, 85,
-    83, 45, 51, 128, 82, 69, 71, 85, 76, 85, 83, 45, 50, 128, 82, 69, 71, 85,
-    76, 85, 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69,
-    82, 69, 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50,
-    128, 82, 69, 71, 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69,
-    70, 69, 82, 69, 78, 67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73,
-    79, 78, 128, 82, 69, 67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76,
-    69, 196, 82, 69, 67, 84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65,
-    78, 71, 85, 76, 65, 210, 82, 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69,
-    67, 84, 65, 78, 71, 76, 197, 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65,
-    204, 82, 69, 67, 79, 82, 68, 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82,
-    128, 82, 69, 67, 79, 82, 68, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67,
-    73, 84, 65, 84, 73, 86, 197, 82, 69, 67, 69, 80, 84, 73, 86, 197, 82, 69,
-    67, 69, 73, 86, 69, 82, 128, 82, 69, 67, 69, 73, 86, 69, 210, 82, 69, 67,
-    69, 73, 80, 84, 128, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65,
-    76, 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 67, 72,
-    128, 82, 69, 45, 52, 128, 82, 69, 45, 51, 128, 82, 69, 45, 50, 128, 82,
-    69, 45, 49, 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82,
-    65, 90, 79, 82, 128, 82, 65, 89, 83, 128, 82, 65, 89, 211, 82, 65, 89,
-    65, 78, 78, 65, 128, 82, 65, 84, 73, 79, 128, 82, 65, 84, 72, 65, 128,
-    82, 65, 84, 72, 193, 82, 65, 84, 65, 128, 82, 65, 84, 128, 82, 65, 83,
-    87, 65, 68, 73, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128,
-    82, 65, 81, 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71, 197,
-    82, 65, 78, 65, 128, 82, 65, 78, 128, 82, 65, 77, 211, 82, 65, 77, 66,
-    65, 84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65,
-    65, 78, 83, 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83,
-    69, 68, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128,
-    82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, 65, 73,
-    76, 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77,
-    65, 84, 85, 76, 76, 65, 200, 82, 65, 72, 128, 82, 65, 70, 69, 128, 82,
-    65, 69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68,
-    73, 79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82,
-    65, 196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82,
-    65, 67, 73, 78, 199, 82, 65, 67, 67, 79, 79, 78, 128, 82, 65, 66, 66, 73,
-    84, 128, 82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128,
-    82, 65, 51, 128, 82, 65, 50, 128, 82, 65, 45, 75, 65, 82, 65, 128, 82,
-    65, 45, 52, 128, 82, 65, 45, 51, 128, 82, 65, 45, 50, 128, 82, 65, 45,
-    49, 128, 82, 48, 50, 57, 128, 82, 48, 50, 56, 128, 82, 48, 50, 55, 128,
-    82, 48, 50, 54, 128, 82, 48, 50, 53, 128, 82, 48, 50, 52, 128, 82, 48,
-    50, 51, 128, 82, 48, 50, 50, 128, 82, 48, 50, 49, 128, 82, 48, 50, 48,
-    128, 82, 48, 49, 57, 128, 82, 48, 49, 56, 128, 82, 48, 49, 55, 128, 82,
-    48, 49, 54, 65, 128, 82, 48, 49, 54, 128, 82, 48, 49, 53, 128, 82, 48,
-    49, 52, 128, 82, 48, 49, 51, 128, 82, 48, 49, 50, 128, 82, 48, 49, 49,
-    128, 82, 48, 49, 48, 65, 128, 82, 48, 49, 48, 128, 82, 48, 48, 57, 128,
-    82, 48, 48, 56, 128, 82, 48, 48, 55, 128, 82, 48, 48, 54, 128, 82, 48,
-    48, 53, 128, 82, 48, 48, 52, 128, 82, 48, 48, 51, 66, 128, 82, 48, 48,
-    51, 65, 128, 82, 48, 48, 51, 128, 82, 48, 48, 50, 65, 128, 82, 48, 48,
-    50, 128, 82, 48, 48, 49, 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128,
-    81, 89, 85, 128, 81, 89, 84, 128, 81, 89, 82, 88, 128, 81, 89, 82, 128,
-    81, 89, 80, 128, 81, 89, 79, 128, 81, 89, 73, 128, 81, 89, 69, 69, 128,
-    81, 89, 69, 128, 81, 89, 65, 65, 128, 81, 89, 65, 128, 81, 89, 128, 81,
-    87, 73, 128, 81, 87, 69, 69, 128, 81, 87, 69, 128, 81, 87, 65, 65, 128,
-    81, 87, 65, 128, 81, 85, 88, 128, 81, 85, 86, 128, 81, 85, 85, 86, 128,
-    81, 85, 85, 128, 81, 85, 84, 128, 81, 85, 83, 72, 83, 72, 65, 89, 65,
-    128, 81, 85, 82, 88, 128, 81, 85, 82, 128, 81, 85, 80, 128, 81, 85, 79,
-    88, 128, 81, 85, 79, 84, 197, 81, 85, 79, 84, 65, 84, 73, 79, 206, 81,
-    85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 128,
-    81, 85, 73, 78, 84, 73, 76, 69, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69,
-    78, 67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85,
-    73, 78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85,
-    73, 76, 212, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73,
-    128, 81, 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85,
-    69, 83, 84, 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69,
-    69, 78, 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 66, 85, 84,
-    83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69,
-    82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82,
-    128, 81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76,
-    197, 81, 85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, 65, 78,
-    212, 81, 85, 65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, 68, 128, 81,
-    85, 65, 196, 81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81,
-    79, 84, 128, 81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128,
-    81, 79, 79, 128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65,
-    128, 81, 79, 128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128,
-    81, 73, 84, 128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 70, 128, 81,
-    73, 69, 88, 128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, 73, 69,
-    128, 81, 73, 128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, 81, 72,
-    87, 69, 128, 81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, 72, 85,
-    128, 81, 72, 79, 80, 72, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81, 72,
-    69, 69, 128, 81, 72, 69, 128, 81, 72, 65, 85, 128, 81, 72, 65, 65, 128,
-    81, 72, 65, 128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, 81, 69,
-    69, 128, 81, 69, 128, 81, 65, 89, 128, 81, 65, 85, 128, 81, 65, 84, 65,
-    78, 128, 81, 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81,
-    65, 80, 72, 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211,
-    81, 65, 76, 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128,
-    81, 65, 70, 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73,
-    128, 81, 65, 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128,
-    81, 48, 48, 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48,
-    48, 51, 128, 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80,
-    89, 88, 128, 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80,
-    89, 80, 128, 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 128,
-    80, 87, 207, 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 128,
-    80, 87, 69, 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 85,
-    90, 90, 76, 197, 80, 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128,
-    80, 85, 84, 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80,
-    85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65,
-    128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83,
-    69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80,
-    85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128,
-    80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80,
-    128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71,
-    128, 80, 85, 78, 67, 84, 85, 211, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79,
-    78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77, 80,
-    128, 80, 85, 77, 128, 80, 85, 70, 70, 69, 68, 128, 80, 85, 69, 128, 80,
-    85, 67, 75, 128, 80, 85, 66, 76, 73, 195, 80, 85, 194, 80, 85, 65, 81,
-    128, 80, 85, 65, 69, 128, 80, 85, 65, 67, 72, 85, 197, 80, 85, 50, 128,
-    80, 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128,
-    80, 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, 71,
-    77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, 76,
-    69, 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, 70,
-    73, 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, 83,
-    65, 76, 84, 69, 210, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82, 79,
-    84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69,
-    67, 84, 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73,
-    128, 80, 82, 79, 83, 69, 82, 80, 73, 78, 65, 128, 80, 82, 79, 80, 79, 82,
-    84, 73, 79, 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80,
-    82, 79, 80, 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82,
-    79, 79, 70, 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65,
-    84, 73, 79, 78, 197, 80, 82, 79, 74, 69, 67, 84, 79, 82, 128, 80, 82, 79,
-    74, 69, 67, 84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78,
-    128, 80, 82, 79, 72, 73, 66, 73, 84, 69, 196, 80, 82, 79, 71, 82, 69, 83,
-    83, 128, 80, 82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68,
-    128, 80, 82, 79, 68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80,
-    82, 79, 66, 73, 78, 199, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86,
-    65, 84, 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65,
-    77, 65, 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69,
-    82, 128, 80, 82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, 128, 80, 82,
-    73, 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 78, 67, 69,
-    128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73,
-    79, 85, 211, 80, 82, 69, 84, 90, 69, 76, 128, 80, 82, 69, 83, 83, 69,
-    196, 80, 82, 69, 83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73,
-    79, 206, 80, 82, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80,
-    79, 78, 68, 69, 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128,
-    80, 82, 69, 71, 78, 65, 78, 212, 80, 82, 69, 70, 73, 88, 69, 196, 80, 82,
-    69, 70, 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80,
-    82, 69, 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80,
-    82, 69, 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69,
-    67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 89, 69,
-    210, 80, 82, 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73,
-    201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85,
-    79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66,
-    85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66,
-    69, 201, 80, 82, 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86,
-    128, 80, 80, 77, 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128,
-    80, 79, 87, 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 69, 210,
-    80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, 128, 80, 79, 85,
-    78, 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67, 72, 128, 80, 79,
-    84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, 79, 212, 80, 79,
-    83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 66, 79, 88, 128,
-    80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, 83, 212, 80, 79,
-    83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 83, 83, 69, 83, 83, 73, 79,
-    206, 80, 79, 83, 73, 84, 73, 79, 78, 83, 128, 80, 79, 83, 73, 84, 73, 79,
-    78, 128, 80, 79, 83, 69, 73, 68, 79, 78, 128, 80, 79, 82, 84, 65, 66, 76,
-    197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, 84,
-    85, 211, 80, 79, 80, 80, 73, 78, 199, 80, 79, 80, 80, 69, 82, 128, 80,
-    79, 80, 67, 79, 82, 78, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, 79,
-    68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 206,
-    80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, 79,
-    128, 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80, 79, 76,
-    201, 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73,
-    69, 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79,
-    73, 78, 84, 79, 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84,
-    69, 196, 80, 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84,
-    82, 217, 80, 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83, 128, 80,
-    79, 67, 75, 69, 212, 80, 79, 65, 128, 80, 79, 128, 80, 207, 80, 78, 69,
-    85, 77, 65, 84, 65, 128, 80, 76, 85, 84, 207, 80, 76, 85, 84, 65, 128,
-    80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85,
-    82, 65, 76, 128, 80, 76, 85, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76,
-    85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 85, 128, 80, 76, 79, 87, 128,
-    80, 76, 79, 80, 72, 85, 128, 80, 76, 72, 65, 85, 128, 80, 76, 69, 84, 72,
-    82, 79, 78, 128, 80, 76, 69, 65, 68, 73, 78, 199, 80, 76, 68, 128, 80,
-    76, 65, 89, 73, 78, 199, 80, 76, 65, 84, 69, 128, 80, 76, 65, 83, 84, 73,
-    67, 83, 128, 80, 76, 65, 78, 69, 84, 128, 80, 76, 65, 78, 69, 128, 80,
-    76, 65, 78, 67, 203, 80, 76, 65, 75, 128, 80, 76, 65, 71, 73, 79, 211,
-    80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 82, 128, 80, 76, 65, 67, 69, 72,
-    79, 76, 68, 69, 210, 80, 76, 65, 67, 197, 80, 76, 65, 128, 80, 73, 90,
-    90, 73, 67, 65, 84, 79, 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128,
-    80, 73, 87, 82, 128, 80, 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84,
-    67, 72, 70, 79, 82, 203, 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128,
-    80, 73, 83, 69, 76, 69, 72, 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82,
-    73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80,
-    73, 82, 65, 67, 89, 128, 80, 73, 82, 50, 128, 80, 73, 80, 73, 78, 71,
-    128, 80, 73, 80, 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69,
-    77, 66, 65, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 80,
-    73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, 78, 67, 72,
-    73, 78, 199, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76,
-    128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82,
-    85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69,
-    88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73,
-    69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85,
-    80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85,
-    80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69,
-    85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85,
-    80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85,
-    80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80,
-    45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69,
-    85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69,
-    85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69,
-    85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67,
-    73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72,
-    128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80,
-    73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128,
-    80, 73, 69, 128, 80, 73, 67, 84, 85, 82, 69, 128, 80, 73, 67, 75, 69, 84,
-    128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, 85, 128, 80,
-    73, 65, 83, 77, 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, 72, 87, 65,
-    128, 80, 72, 85, 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, 72, 85, 78,
-    71, 128, 80, 72, 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, 128, 80,
-    72, 79, 76, 85, 83, 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72,
-    79, 65, 128, 80, 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80,
-    72, 73, 78, 84, 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82,
-    211, 80, 72, 73, 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72,
-    45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83,
-    73, 79, 83, 128, 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128,
-    80, 72, 73, 69, 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69,
-    85, 80, 200, 80, 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72,
-    69, 128, 80, 72, 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 194, 80,
-    72, 65, 83, 69, 45, 193, 80, 72, 65, 82, 89, 78, 71, 69, 65, 204, 80, 72,
-    65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, 72, 65, 73,
-    83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, 66, 128,
-    80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80, 71, 128,
-    80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85, 84, 65, 69, 128, 80, 69,
-    85, 84, 128, 80, 69, 84, 82, 201, 80, 69, 84, 65, 83, 84, 79, 75, 79, 85,
-    70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, 84, 65,
-    83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79, 128,
-    80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, 69, 83, 72, 178, 80, 69,
-    83, 69, 84, 193, 80, 69, 211, 80, 69, 82, 84, 72, 207, 80, 69, 82, 83,
-    80, 69, 67, 84, 73, 86, 69, 128, 80, 69, 82, 83, 79, 78, 65, 204, 80, 69,
-    82, 83, 79, 78, 128, 80, 69, 82, 83, 79, 206, 80, 69, 82, 83, 73, 65,
+    71, 79, 76, 128, 83, 69, 71, 78, 79, 128, 83, 69, 71, 77, 69, 78, 84, 69,
+    196, 83, 69, 71, 77, 69, 78, 84, 128, 83, 69, 69, 86, 128, 83, 69, 69,
+    78, 85, 128, 83, 69, 69, 78, 128, 83, 69, 69, 206, 83, 69, 69, 68, 76,
+    73, 78, 71, 128, 83, 69, 69, 45, 78, 79, 45, 69, 86, 73, 204, 83, 69, 68,
+    78, 65, 128, 83, 69, 67, 84, 79, 82, 128, 83, 69, 67, 84, 73, 79, 78,
+    128, 83, 69, 67, 84, 73, 79, 206, 83, 69, 67, 82, 69, 84, 128, 83, 69,
+    67, 65, 78, 84, 128, 83, 69, 66, 65, 84, 66, 69, 73, 212, 83, 69, 65, 84,
+    128, 83, 69, 65, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 69, 45, 53,
+    128, 83, 69, 45, 52, 128, 83, 69, 45, 51, 128, 83, 68, 79, 78, 199, 83,
+    68, 128, 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67,
+    82, 79, 76, 76, 128, 83, 67, 82, 73, 80, 84, 128, 83, 67, 82, 69, 87, 68,
+    82, 73, 86, 69, 82, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69,
+    206, 83, 67, 82, 69, 65, 77, 73, 78, 199, 83, 67, 79, 82, 80, 73, 85, 83,
+    128, 83, 67, 79, 82, 80, 73, 79, 78, 128, 83, 67, 79, 82, 69, 128, 83,
+    67, 79, 79, 84, 69, 82, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67,
+    73, 128, 83, 67, 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 82,
+    79, 69, 68, 69, 82, 128, 83, 67, 72, 79, 79, 76, 128, 83, 67, 72, 79, 79,
+    204, 83, 67, 72, 79, 76, 65, 82, 128, 83, 67, 72, 69, 77, 193, 83, 67,
+    69, 80, 84, 69, 210, 83, 67, 65, 82, 70, 128, 83, 67, 65, 78, 68, 73, 67,
+    85, 83, 128, 83, 67, 65, 78, 68, 73, 67, 85, 211, 83, 67, 65, 206, 83,
+    67, 65, 76, 69, 83, 128, 83, 66, 85, 194, 83, 66, 82, 85, 204, 83, 65,
+    89, 73, 83, 201, 83, 65, 89, 65, 78, 78, 65, 128, 83, 65, 89, 128, 83,
+    65, 88, 79, 80, 72, 79, 78, 69, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128,
+    83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 83, 65, 86, 79, 85, 82, 73, 78,
+    199, 83, 65, 85, 82, 79, 80, 79, 68, 128, 83, 65, 85, 82, 65, 83, 72, 84,
+    82, 193, 83, 65, 85, 73, 76, 128, 83, 65, 85, 67, 69, 82, 128, 83, 65,
+    84, 85, 82, 78, 128, 83, 65, 84, 75, 65, 65, 78, 75, 85, 85, 128, 83, 65,
+    84, 75, 65, 65, 78, 128, 83, 65, 84, 69, 76, 76, 73, 84, 69, 128, 83, 65,
+    84, 69, 76, 76, 73, 84, 197, 83, 65, 84, 67, 72, 69, 76, 128, 83, 65, 84,
+    65, 78, 71, 65, 128, 83, 65, 83, 72, 128, 83, 65, 83, 65, 75, 128, 83,
+    65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 128, 83, 65, 81, 128, 83,
+    65, 80, 65, 128, 83, 65, 78, 89, 79, 79, 71, 193, 83, 65, 78, 89, 65, 75,
+    193, 83, 65, 78, 84, 73, 73, 77, 85, 128, 83, 65, 78, 83, 75, 82, 73,
+    212, 83, 65, 78, 78, 89, 65, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65,
+    78, 68, 87, 73, 67, 72, 128, 83, 65, 78, 68, 72, 201, 83, 65, 78, 68, 65,
+    76, 128, 83, 65, 78, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79,
+    203, 83, 65, 77, 86, 65, 84, 128, 83, 65, 77, 80, 73, 128, 83, 65, 77,
+    80, 72, 65, 79, 128, 83, 65, 77, 75, 65, 128, 83, 65, 77, 69, 75, 72,
+    128, 83, 65, 77, 69, 75, 200, 83, 65, 77, 66, 65, 128, 83, 65, 77, 65,
+    82, 73, 84, 65, 206, 83, 65, 77, 128, 83, 65, 76, 84, 73, 82, 69, 128,
+    83, 65, 76, 84, 73, 82, 197, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65,
+    76, 84, 45, 50, 128, 83, 65, 76, 84, 128, 83, 65, 76, 212, 83, 65, 76,
+    76, 65, 76, 76, 65, 72, 79, 213, 83, 65, 76, 76, 193, 83, 65, 76, 65,
+    205, 83, 65, 76, 65, 68, 128, 83, 65, 76, 65, 128, 83, 65, 76, 45, 65,
+    77, 77, 79, 78, 73, 65, 67, 128, 83, 65, 76, 128, 83, 65, 75, 84, 65,
+    128, 83, 65, 75, 79, 84, 128, 83, 65, 75, 73, 78, 128, 83, 65, 75, 72,
+    193, 83, 65, 75, 69, 85, 65, 69, 128, 83, 65, 75, 197, 83, 65, 74, 68,
+    65, 72, 128, 83, 65, 73, 76, 66, 79, 65, 84, 128, 83, 65, 73, 76, 128,
+    83, 65, 73, 75, 85, 82, 85, 128, 83, 65, 72, 128, 83, 65, 71, 73, 84, 84,
+    65, 82, 73, 85, 83, 128, 83, 65, 71, 65, 128, 83, 65, 71, 128, 83, 65,
+    199, 83, 65, 70, 72, 65, 128, 83, 65, 70, 69, 84, 217, 83, 65, 68, 72,
+    69, 128, 83, 65, 68, 72, 197, 83, 65, 68, 69, 128, 83, 65, 68, 128, 83,
+    65, 196, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 65, 65, 73,
+    128, 83, 65, 65, 68, 72, 85, 128, 83, 65, 45, 73, 128, 83, 65, 45, 56,
+    128, 83, 65, 45, 55, 128, 83, 65, 45, 54, 128, 83, 65, 45, 53, 128, 83,
+    65, 45, 52, 128, 83, 65, 45, 51, 128, 83, 65, 45, 50, 128, 83, 65, 45,
+    49, 128, 83, 48, 52, 54, 128, 83, 48, 52, 53, 128, 83, 48, 52, 52, 128,
+    83, 48, 52, 51, 128, 83, 48, 52, 50, 128, 83, 48, 52, 49, 128, 83, 48,
+    52, 48, 128, 83, 48, 51, 57, 128, 83, 48, 51, 56, 128, 83, 48, 51, 55,
+    128, 83, 48, 51, 54, 128, 83, 48, 51, 53, 65, 128, 83, 48, 51, 53, 128,
+    83, 48, 51, 52, 128, 83, 48, 51, 51, 128, 83, 48, 51, 50, 128, 83, 48,
+    51, 49, 128, 83, 48, 51, 48, 128, 83, 48, 50, 57, 128, 83, 48, 50, 56,
+    128, 83, 48, 50, 55, 128, 83, 48, 50, 54, 66, 128, 83, 48, 50, 54, 65,
+    128, 83, 48, 50, 54, 128, 83, 48, 50, 53, 128, 83, 48, 50, 52, 128, 83,
+    48, 50, 51, 128, 83, 48, 50, 50, 128, 83, 48, 50, 49, 128, 83, 48, 50,
+    48, 128, 83, 48, 49, 57, 128, 83, 48, 49, 56, 128, 83, 48, 49, 55, 65,
+    128, 83, 48, 49, 55, 128, 83, 48, 49, 54, 128, 83, 48, 49, 53, 128, 83,
+    48, 49, 52, 66, 128, 83, 48, 49, 52, 65, 128, 83, 48, 49, 52, 128, 83,
+    48, 49, 51, 128, 83, 48, 49, 50, 128, 83, 48, 49, 49, 128, 83, 48, 49,
+    48, 128, 83, 48, 48, 57, 128, 83, 48, 48, 56, 128, 83, 48, 48, 55, 128,
+    83, 48, 48, 54, 65, 128, 83, 48, 48, 54, 128, 83, 48, 48, 53, 128, 83,
+    48, 48, 52, 128, 83, 48, 48, 51, 128, 83, 48, 48, 50, 65, 128, 83, 48,
+    48, 50, 128, 83, 48, 48, 49, 128, 83, 45, 87, 128, 83, 45, 83, 72, 65,
+    80, 69, 196, 82, 89, 89, 128, 82, 89, 88, 128, 82, 89, 84, 128, 82, 89,
+    82, 88, 128, 82, 89, 82, 128, 82, 89, 80, 128, 82, 87, 79, 79, 128, 82,
+    87, 79, 128, 82, 87, 73, 73, 128, 82, 87, 73, 128, 82, 87, 69, 69, 128,
+    82, 87, 69, 128, 82, 87, 65, 72, 65, 128, 82, 87, 65, 65, 128, 82, 87,
+    65, 128, 82, 85, 88, 128, 82, 85, 85, 66, 85, 82, 85, 128, 82, 85, 85,
+    128, 82, 85, 84, 128, 82, 85, 83, 83, 73, 65, 206, 82, 85, 83, 73, 128,
+    82, 85, 82, 88, 128, 82, 85, 82, 128, 82, 85, 80, 73, 73, 128, 82, 85,
+    80, 69, 197, 82, 85, 80, 128, 82, 85, 79, 88, 128, 82, 85, 79, 80, 128,
+    82, 85, 79, 128, 82, 85, 78, 79, 85, 84, 128, 82, 85, 78, 78, 73, 78,
+    199, 82, 85, 78, 78, 69, 82, 128, 82, 85, 78, 73, 195, 82, 85, 78, 128,
+    82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 82,
+    85, 76, 69, 82, 128, 82, 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 128,
+    82, 85, 76, 69, 128, 82, 85, 76, 65, 73, 128, 82, 85, 75, 75, 65, 75, 72,
+    65, 128, 82, 85, 73, 83, 128, 82, 85, 71, 66, 217, 82, 85, 68, 73, 77,
+    69, 78, 84, 193, 82, 85, 66, 76, 197, 82, 85, 194, 82, 85, 65, 128, 82,
+    85, 45, 54, 128, 82, 85, 45, 53, 128, 82, 85, 45, 52, 128, 82, 85, 45,
+    51, 128, 82, 85, 45, 50, 128, 82, 85, 45, 49, 128, 82, 84, 72, 65, 78,
+    199, 82, 84, 69, 128, 82, 84, 65, 71, 83, 128, 82, 84, 65, 71, 211, 82,
+    82, 89, 88, 128, 82, 82, 89, 84, 128, 82, 82, 89, 82, 88, 128, 82, 82,
+    89, 82, 128, 82, 82, 89, 80, 128, 82, 82, 85, 88, 128, 82, 82, 85, 85,
+    128, 82, 82, 85, 84, 128, 82, 82, 85, 82, 88, 128, 82, 82, 85, 82, 128,
+    82, 82, 85, 80, 128, 82, 82, 85, 79, 88, 128, 82, 82, 85, 79, 128, 82,
+    82, 85, 128, 82, 82, 82, 65, 128, 82, 82, 79, 88, 128, 82, 82, 79, 84,
+    128, 82, 82, 79, 80, 128, 82, 82, 79, 79, 128, 82, 82, 79, 128, 82, 82,
+    73, 73, 128, 82, 82, 73, 128, 82, 82, 69, 88, 128, 82, 82, 69, 84, 128,
+    82, 82, 69, 80, 128, 82, 82, 69, 72, 128, 82, 82, 69, 200, 82, 82, 69,
+    69, 128, 82, 82, 69, 128, 82, 82, 65, 88, 128, 82, 82, 65, 85, 128, 82,
+    82, 65, 73, 128, 82, 82, 65, 65, 128, 82, 79, 87, 66, 79, 65, 84, 128,
+    82, 79, 85, 78, 68, 69, 196, 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69,
+    196, 82, 79, 84, 85, 78, 68, 65, 128, 82, 79, 84, 65, 84, 73, 79, 78, 83,
+    128, 82, 79, 84, 65, 84, 73, 79, 78, 45, 87, 65, 76, 76, 80, 76, 65, 78,
+    197, 82, 79, 84, 65, 84, 73, 79, 78, 45, 70, 76, 79, 79, 82, 80, 76, 65,
+    78, 197, 82, 79, 84, 65, 84, 73, 79, 78, 128, 82, 79, 84, 65, 84, 73, 79,
+    206, 82, 79, 84, 65, 84, 69, 196, 82, 79, 83, 72, 128, 82, 79, 83, 69,
+    84, 84, 69, 128, 82, 79, 83, 69, 128, 82, 79, 79, 84, 128, 82, 79, 79,
+    83, 84, 69, 82, 128, 82, 79, 79, 77, 128, 82, 79, 79, 75, 128, 82, 79,
+    79, 203, 82, 79, 79, 70, 128, 82, 79, 77, 65, 78, 73, 65, 206, 82, 79,
+    77, 65, 206, 82, 79, 77, 128, 82, 79, 76, 76, 73, 78, 199, 82, 79, 76,
+    76, 69, 210, 82, 79, 76, 76, 69, 68, 45, 85, 208, 82, 79, 76, 204, 82,
+    79, 72, 73, 78, 71, 89, 193, 82, 79, 71, 128, 82, 79, 196, 82, 79, 67,
+    75, 69, 84, 128, 82, 79, 67, 203, 82, 79, 67, 128, 82, 79, 66, 79, 212,
+    82, 79, 66, 65, 84, 128, 82, 79, 65, 83, 84, 69, 196, 82, 79, 65, 82,
+    128, 82, 79, 65, 128, 82, 79, 45, 54, 128, 82, 79, 45, 53, 128, 82, 79,
+    45, 52, 128, 82, 79, 45, 51, 128, 82, 79, 45, 50, 128, 82, 79, 45, 49,
+    128, 82, 78, 89, 73, 78, 199, 82, 78, 79, 79, 78, 128, 82, 78, 79, 79,
+    206, 82, 78, 65, 205, 82, 77, 84, 128, 82, 76, 79, 128, 82, 76, 77, 128,
+    82, 76, 73, 128, 82, 76, 69, 128, 82, 74, 69, 211, 82, 74, 69, 128, 82,
+    74, 197, 82, 73, 84, 85, 65, 76, 128, 82, 73, 84, 84, 79, 82, 85, 128,
+    82, 73, 84, 83, 73, 128, 82, 73, 83, 73, 78, 199, 82, 73, 83, 72, 128,
+    82, 73, 82, 65, 128, 82, 73, 80, 80, 76, 197, 82, 73, 80, 128, 82, 73,
+    78, 71, 211, 82, 73, 78, 71, 73, 78, 199, 82, 73, 78, 71, 69, 196, 82,
+    73, 78, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, 206, 82, 73, 77, 71,
+    66, 65, 128, 82, 73, 77, 128, 82, 73, 75, 82, 73, 75, 128, 82, 73, 71,
+    86, 69, 68, 73, 195, 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 82, 73,
+    71, 72, 84, 72, 65, 78, 196, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69,
+    70, 212, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197, 82, 73, 71, 72, 84, 45,
+    83, 72, 65, 68, 79, 87, 69, 196, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68,
+    69, 196, 82, 73, 71, 72, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 82, 73,
+    71, 72, 84, 45, 76, 73, 71, 72, 84, 69, 196, 82, 73, 71, 72, 84, 45, 72,
+    65, 78, 68, 69, 196, 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, 82, 73, 71,
+    72, 84, 45, 70, 65, 67, 73, 78, 199, 82, 73, 71, 72, 84, 128, 82, 73, 70,
+    76, 69, 128, 82, 73, 69, 85, 76, 45, 89, 69, 83, 73, 69, 85, 78, 71, 128,
+    82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 45,
+    72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 89, 69, 79, 82, 73, 78,
+    72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84,
+    45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85,
+    84, 128, 82, 73, 69, 85, 76, 45, 84, 72, 73, 69, 85, 84, 72, 128, 82, 73,
+    69, 85, 76, 45, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 82, 73,
+    69, 85, 76, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 82, 73, 69, 85,
+    76, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76,
+    45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76,
+    45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45,
+    84, 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80,
+    45, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85, 80, 45,
+    80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85,
+    80, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 80, 73, 69, 85,
+    80, 128, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73,
+    69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45,
+    78, 73, 69, 85, 78, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45,
+    83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45, 75,
+    73, 89, 69, 79, 75, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 45,
+    72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 77, 73, 69, 85, 77, 128,
+    82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 128,
+    82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 45, 72, 73, 69, 85, 72,
+    128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, 128, 82, 73, 69, 85,
+    76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 82, 73,
+    69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 82, 73, 69, 85, 76, 45, 67, 73,
+    69, 85, 67, 128, 82, 73, 69, 85, 204, 82, 73, 69, 76, 128, 82, 73, 69,
+    69, 128, 82, 73, 67, 75, 83, 72, 65, 87, 128, 82, 73, 67, 69, 77, 128,
+    82, 73, 67, 69, 128, 82, 73, 67, 197, 82, 73, 66, 66, 79, 78, 128, 82,
+    73, 66, 66, 79, 206, 82, 73, 65, 204, 82, 73, 45, 55, 128, 82, 73, 45,
+    54, 128, 82, 73, 45, 53, 128, 82, 73, 45, 52, 128, 82, 73, 45, 51, 128,
+    82, 73, 45, 50, 128, 82, 73, 45, 49, 128, 82, 72, 79, 84, 73, 195, 82,
+    72, 79, 128, 82, 72, 207, 82, 72, 73, 78, 79, 67, 69, 82, 79, 83, 128,
+    82, 72, 65, 128, 82, 72, 128, 82, 71, 89, 73, 78, 71, 83, 128, 82, 71,
+    89, 65, 78, 128, 82, 71, 89, 193, 82, 69, 86, 79, 76, 86, 73, 78, 199,
+    82, 69, 86, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 77, 65, 128, 82,
+    69, 86, 73, 65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 45, 83, 67, 72, 87,
+    65, 128, 82, 69, 86, 69, 82, 83, 69, 68, 128, 82, 69, 86, 69, 82, 83, 69,
+    196, 82, 69, 86, 69, 82, 83, 197, 82, 69, 85, 88, 128, 82, 69, 85, 128,
+    82, 69, 84, 85, 82, 78, 128, 82, 69, 84, 85, 82, 206, 82, 69, 84, 82, 79,
+    70, 76, 69, 216, 82, 69, 84, 82, 69, 65, 84, 128, 82, 69, 84, 79, 82, 84,
+    128, 82, 69, 83, 85, 80, 73, 78, 85, 83, 128, 82, 69, 83, 84, 82, 79, 79,
+    77, 128, 82, 69, 83, 84, 82, 73, 67, 84, 69, 196, 82, 69, 83, 84, 128,
+    82, 69, 83, 80, 79, 78, 83, 69, 128, 82, 69, 83, 79, 85, 82, 67, 69, 128,
+    82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 83, 73, 83, 84, 65,
+    78, 67, 69, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83, 72,
+    45, 65, 89, 73, 78, 45, 68, 65, 76, 69, 84, 72, 128, 82, 69, 83, 72, 45,
+    65, 89, 73, 78, 128, 82, 69, 83, 200, 82, 69, 82, 69, 78, 71, 71, 65, 78,
+    128, 82, 69, 82, 69, 75, 65, 78, 128, 82, 69, 80, 82, 69, 83, 69, 78, 84,
+    128, 82, 69, 80, 76, 65, 67, 69, 77, 69, 78, 212, 82, 69, 80, 72, 65,
+    128, 82, 69, 80, 72, 128, 82, 69, 80, 69, 84, 73, 84, 73, 79, 206, 82,
+    69, 80, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, 128, 82, 69, 80, 69,
+    65, 212, 82, 69, 80, 65, 89, 65, 128, 82, 69, 80, 65, 128, 82, 69, 80,
+    193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 206,
+    82, 69, 77, 85, 128, 82, 69, 77, 73, 78, 68, 69, 210, 82, 69, 77, 69, 68,
+    89, 128, 82, 69, 76, 73, 71, 73, 79, 78, 128, 82, 69, 76, 73, 69, 86, 69,
+    196, 82, 69, 76, 69, 65, 83, 69, 128, 82, 69, 76, 65, 88, 69, 68, 128,
+    82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 76, 65, 84, 73, 79, 78,
+    128, 82, 69, 76, 65, 65, 128, 82, 69, 74, 65, 78, 199, 82, 69, 73, 87,
+    65, 128, 82, 69, 73, 196, 82, 69, 73, 128, 82, 69, 71, 85, 76, 85, 83,
+    45, 52, 128, 82, 69, 71, 85, 76, 85, 83, 45, 51, 128, 82, 69, 71, 85, 76,
+    85, 83, 45, 50, 128, 82, 69, 71, 85, 76, 85, 83, 128, 82, 69, 71, 85, 76,
+    85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78,
+    65, 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82,
+    69, 70, 79, 82, 77, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 82, 69,
+    68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69, 67, 89, 67, 76,
+    73, 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67, 84, 73, 76, 73,
+    78, 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 210, 82, 69, 67,
+    84, 65, 78, 71, 76, 69, 128, 82, 69, 67, 84, 65, 78, 71, 76, 197, 82, 69,
+    67, 82, 69, 65, 84, 73, 79, 78, 65, 204, 82, 69, 67, 79, 82, 68, 73, 78,
+    199, 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 82, 68, 128,
+    82, 69, 67, 79, 82, 196, 82, 69, 67, 73, 84, 65, 84, 73, 86, 197, 82, 69,
+    67, 69, 80, 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, 82, 69,
+    67, 69, 73, 86, 69, 210, 82, 69, 67, 69, 73, 80, 84, 128, 82, 69, 65, 76,
+    71, 65, 82, 45, 50, 128, 82, 69, 65, 76, 71, 65, 82, 128, 82, 69, 65, 72,
+    77, 85, 75, 128, 82, 69, 65, 68, 73, 78, 199, 82, 69, 65, 67, 72, 128,
+    82, 69, 45, 52, 128, 82, 69, 45, 51, 128, 82, 69, 45, 50, 128, 82, 69,
+    45, 49, 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, 65,
+    90, 79, 82, 128, 82, 65, 89, 83, 128, 82, 65, 89, 211, 82, 65, 89, 65,
+    78, 78, 65, 128, 82, 65, 84, 73, 79, 128, 82, 65, 84, 72, 65, 128, 82,
+    65, 84, 72, 193, 82, 65, 84, 65, 128, 82, 65, 84, 128, 82, 65, 83, 87,
+    65, 68, 73, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82,
+    65, 81, 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82,
+    65, 78, 65, 128, 82, 65, 78, 128, 82, 65, 77, 211, 82, 65, 77, 66, 65,
+    84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65, 65,
+    78, 83, 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83, 69,
+    68, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128, 82,
+    65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, 65, 73, 76,
+    128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65,
+    84, 85, 76, 76, 65, 200, 82, 65, 72, 128, 82, 65, 70, 69, 128, 82, 65,
+    69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 73,
+    79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65,
+    196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82, 65,
+    67, 73, 78, 199, 82, 65, 67, 67, 79, 79, 78, 128, 82, 65, 66, 66, 73, 84,
+    128, 82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82,
+    65, 51, 128, 82, 65, 50, 128, 82, 65, 45, 75, 65, 82, 65, 128, 82, 65,
+    45, 52, 128, 82, 65, 45, 51, 128, 82, 65, 45, 50, 128, 82, 65, 45, 49,
+    128, 82, 48, 50, 57, 128, 82, 48, 50, 56, 128, 82, 48, 50, 55, 128, 82,
+    48, 50, 54, 128, 82, 48, 50, 53, 128, 82, 48, 50, 52, 128, 82, 48, 50,
+    51, 128, 82, 48, 50, 50, 128, 82, 48, 50, 49, 128, 82, 48, 50, 48, 128,
+    82, 48, 49, 57, 128, 82, 48, 49, 56, 128, 82, 48, 49, 55, 128, 82, 48,
+    49, 54, 65, 128, 82, 48, 49, 54, 128, 82, 48, 49, 53, 128, 82, 48, 49,
+    52, 128, 82, 48, 49, 51, 128, 82, 48, 49, 50, 128, 82, 48, 49, 49, 128,
+    82, 48, 49, 48, 65, 128, 82, 48, 49, 48, 128, 82, 48, 48, 57, 128, 82,
+    48, 48, 56, 128, 82, 48, 48, 55, 128, 82, 48, 48, 54, 128, 82, 48, 48,
+    53, 128, 82, 48, 48, 52, 128, 82, 48, 48, 51, 66, 128, 82, 48, 48, 51,
+    65, 128, 82, 48, 48, 51, 128, 82, 48, 48, 50, 65, 128, 82, 48, 48, 50,
+    128, 82, 48, 48, 49, 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, 81,
+    89, 85, 128, 81, 89, 84, 128, 81, 89, 82, 88, 128, 81, 89, 82, 128, 81,
+    89, 80, 128, 81, 89, 79, 128, 81, 89, 73, 128, 81, 89, 69, 69, 128, 81,
+    89, 69, 128, 81, 89, 65, 65, 128, 81, 89, 65, 128, 81, 89, 128, 81, 87,
+    73, 128, 81, 87, 69, 69, 128, 81, 87, 69, 128, 81, 87, 65, 65, 128, 81,
+    87, 65, 128, 81, 85, 88, 128, 81, 85, 86, 128, 81, 85, 85, 86, 128, 81,
+    85, 85, 128, 81, 85, 84, 128, 81, 85, 83, 72, 83, 72, 65, 89, 65, 128,
+    81, 85, 82, 88, 128, 81, 85, 82, 128, 81, 85, 80, 128, 81, 85, 79, 88,
+    128, 81, 85, 79, 84, 197, 81, 85, 79, 84, 65, 84, 73, 79, 206, 81, 85,
+    79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 128, 81,
+    85, 73, 78, 84, 73, 76, 69, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78,
+    67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73,
+    78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73,
+    76, 212, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128,
+    81, 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83,
+    84, 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78,
+    128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 66, 85, 84, 83, 128,
+    81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, 84, 69, 82, 83,
+    128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, 69, 82, 128,
+    81, 85, 65, 78, 84, 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81,
+    85, 65, 68, 82, 65, 78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85,
+    65, 68, 67, 79, 76, 79, 78, 128, 81, 85, 65, 68, 128, 81, 85, 65, 196,
+    81, 85, 65, 128, 81, 85, 128, 81, 208, 81, 79, 88, 128, 81, 79, 84, 128,
+    81, 79, 80, 72, 128, 81, 79, 80, 65, 128, 81, 79, 80, 128, 81, 79, 79,
+    128, 81, 79, 207, 81, 79, 70, 128, 81, 79, 198, 81, 79, 65, 128, 81, 79,
+    128, 81, 78, 128, 81, 73, 88, 128, 81, 73, 84, 83, 65, 128, 81, 73, 84,
+    128, 81, 73, 80, 128, 81, 73, 73, 128, 81, 73, 70, 128, 81, 73, 69, 88,
+    128, 81, 73, 69, 84, 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, 81, 73,
+    128, 81, 72, 87, 73, 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, 69, 128,
+    81, 72, 87, 65, 65, 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, 81, 72,
+    79, 80, 72, 128, 81, 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, 69, 128,
+    81, 72, 69, 128, 81, 72, 65, 85, 128, 81, 72, 65, 65, 128, 81, 72, 65,
+    128, 81, 71, 65, 128, 81, 69, 84, 65, 78, 65, 128, 81, 69, 69, 128, 81,
+    69, 128, 81, 65, 89, 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, 128, 81,
+    65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, 72,
+    128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, 76,
+    193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, 70,
+    128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, 65,
+    65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, 48,
+    54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, 128,
+    81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, 128,
+    80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, 128,
+    80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207,
+    80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69,
+    128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 90, 90, 76,
+    197, 80, 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84,
+    82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 128, 80, 85, 212,
+    80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, 80, 73, 75, 65, 128, 80,
+    85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, 80, 85, 82, 83, 69, 128,
+    80, 85, 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, 65, 128, 80, 85, 82, 73,
+    84, 89, 128, 80, 85, 82, 73, 70, 89, 128, 80, 85, 82, 128, 80, 85, 81,
+    128, 80, 85, 80, 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85,
+    79, 128, 80, 85, 78, 71, 65, 65, 77, 128, 80, 85, 78, 71, 128, 80, 85,
+    78, 67, 84, 85, 211, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 78, 128, 80,
+    85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, 77, 80, 128, 80, 85, 77,
+    128, 80, 85, 70, 70, 69, 68, 128, 80, 85, 69, 128, 80, 85, 67, 75, 128,
+    80, 85, 66, 76, 73, 195, 80, 85, 194, 80, 85, 65, 81, 128, 80, 85, 65,
+    69, 128, 80, 85, 65, 67, 72, 85, 197, 80, 85, 50, 128, 80, 85, 49, 128,
+    80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 80, 83, 73, 76,
+    201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, 65, 71, 77, 65, 128, 80,
+    83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65,
+    128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, 73, 70, 73, 83, 84, 79,
+    76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, 80, 83, 65, 76, 84, 69,
+    210, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, 82, 79, 84, 79, 86, 65,
+    82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, 84, 69, 67, 84, 69,
+    196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82,
+    79, 83, 69, 82, 80, 73, 78, 65, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79,
+    78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80,
+    69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70,
+    128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79,
+    78, 197, 80, 82, 79, 74, 69, 67, 84, 79, 82, 128, 80, 82, 79, 74, 69, 67,
+    84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82,
+    79, 72, 73, 66, 73, 84, 69, 196, 80, 82, 79, 71, 82, 69, 83, 83, 128, 80,
+    82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79,
+    68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80, 82, 79, 66, 73, 78,
+    199, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, 84, 197, 80,
+    82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82,
+    193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, 82, 128, 80,
+    82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212,
+    80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 78, 67, 69, 128, 80, 82,
+    73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211,
+    80, 82, 69, 84, 90, 69, 76, 128, 80, 82, 69, 83, 83, 69, 196, 80, 82, 69,
+    83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 82,
+    69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, 79, 78, 68, 69,
+    82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, 80, 82, 69, 71,
+    78, 65, 78, 212, 80, 82, 69, 70, 73, 88, 69, 196, 80, 82, 69, 70, 65, 67,
+    197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, 82, 69, 67, 69,
+    68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, 82, 69, 67, 69,
+    68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 67, 69, 68, 69,
+    128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 89, 69, 210, 80, 82, 65,
+    77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, 201, 80, 82, 65, 77,
+    45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 65,
+    77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, 85, 79, 206, 80, 82,
+    65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, 69, 201, 80, 82, 65,
+    77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, 128, 80, 80, 77, 128,
+    80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, 80, 79, 87, 69, 82,
+    211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 69, 210, 80, 79, 87, 68, 69,
+    82, 69, 196, 80, 79, 87, 68, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79,
+    85, 76, 84, 82, 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, 84, 69, 196,
+    80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, 79, 212,
+    80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 66, 79,
+    88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, 83, 212,
+    80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 83, 83, 69, 83, 83,
+    73, 79, 206, 80, 79, 83, 73, 84, 73, 79, 78, 83, 128, 80, 79, 83, 73, 84,
+    73, 79, 78, 128, 80, 79, 83, 69, 73, 68, 79, 78, 128, 80, 79, 82, 84, 65,
+    66, 76, 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69,
+    67, 84, 85, 211, 80, 79, 80, 80, 73, 78, 199, 80, 79, 80, 80, 69, 82,
+    128, 80, 79, 80, 67, 79, 82, 78, 128, 80, 79, 80, 128, 80, 79, 208, 80,
+    79, 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80,
+    79, 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79,
+    76, 79, 128, 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 67, 197, 80,
+    79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89,
+    84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211,
+    80, 79, 73, 78, 84, 79, 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73,
+    78, 84, 69, 196, 80, 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79,
+    69, 84, 82, 217, 80, 79, 69, 84, 73, 195, 80, 79, 68, 65, 84, 85, 83,
+    128, 80, 79, 67, 75, 69, 212, 80, 79, 65, 128, 80, 79, 128, 80, 207, 80,
+    78, 69, 85, 77, 65, 84, 65, 128, 80, 76, 85, 84, 207, 80, 76, 85, 84, 65,
+    128, 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80,
+    76, 85, 82, 65, 76, 128, 80, 76, 85, 78, 71, 69, 82, 128, 80, 76, 85, 77,
+    69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, 71, 128,
+    80, 76, 85, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80,
+    76, 72, 65, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, 76, 69, 65,
+    68, 73, 78, 199, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 76,
+    65, 84, 69, 128, 80, 76, 65, 83, 84, 73, 67, 83, 128, 80, 76, 65, 78, 84,
+    128, 80, 76, 65, 78, 69, 84, 128, 80, 76, 65, 78, 69, 128, 80, 76, 65,
+    78, 67, 203, 80, 76, 65, 75, 128, 80, 76, 65, 71, 73, 79, 211, 80, 76,
+    65, 67, 69, 72, 79, 76, 68, 69, 82, 128, 80, 76, 65, 67, 69, 72, 79, 76,
+    68, 69, 210, 80, 76, 65, 67, 197, 80, 76, 65, 67, 65, 82, 68, 128, 80,
+    76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 128, 80, 73, 90, 90, 65,
+    128, 80, 73, 88, 128, 80, 73, 87, 82, 128, 80, 73, 84, 67, 72, 70, 79,
+    82, 75, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, 80, 73, 84, 128, 80,
+    73, 83, 84, 79, 76, 128, 80, 73, 83, 69, 76, 69, 72, 128, 80, 73, 83, 67,
+    69, 83, 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 82,
+    73, 69, 69, 78, 128, 80, 73, 82, 65, 67, 89, 128, 80, 73, 82, 50, 128,
+    80, 73, 80, 73, 78, 71, 128, 80, 73, 80, 65, 69, 77, 71, 66, 73, 69, 69,
+    128, 80, 73, 80, 65, 69, 77, 66, 65, 128, 80, 73, 80, 128, 80, 73, 78,
+    87, 72, 69, 69, 204, 80, 73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78,
+    197, 80, 73, 78, 67, 72, 73, 78, 199, 80, 73, 78, 67, 72, 69, 196, 80,
+    73, 78, 65, 84, 65, 128, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, 128, 80,
+    73, 76, 76, 128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, 80, 73,
+    75, 85, 82, 85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, 73, 199,
+    80, 73, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72,
+    128, 80, 73, 69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80,
+    73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80,
+    73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128,
+    80, 73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80,
+    73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80,
+    73, 69, 85, 80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73,
+    69, 85, 80, 45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128,
+    80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45,
+    78, 73, 69, 85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128,
+    80, 73, 69, 85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85,
+    80, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69,
+    85, 67, 72, 128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, 73, 69,
+    80, 128, 80, 73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, 73, 69,
+    67, 69, 128, 80, 73, 69, 128, 80, 73, 67, 84, 85, 82, 69, 128, 80, 73,
+    67, 75, 85, 208, 80, 73, 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80,
+    73, 65, 83, 85, 84, 79, 82, 85, 128, 80, 73, 65, 83, 77, 193, 80, 73, 65,
+    78, 79, 128, 80, 201, 80, 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79,
+    128, 80, 72, 85, 210, 80, 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69,
+    128, 80, 72, 79, 78, 69, 83, 128, 80, 72, 79, 76, 85, 83, 128, 80, 72,
+    79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, 72, 79, 128,
+    80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, 72, 85, 128,
+    80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, 76, 73, 80,
+    80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, 69, 85, 84,
+    72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, 80, 72, 73,
+    69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 72,
+    45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73,
+    128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, 65, 83,
+    69, 45, 198, 80, 72, 65, 83, 69, 45, 195, 80, 72, 65, 83, 69, 45, 194,
+    80, 72, 65, 83, 69, 45, 193, 80, 72, 65, 82, 89, 78, 71, 69, 65, 204, 80,
+    72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, 72, 65,
+    73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, 66,
+    128, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80, 71,
+    128, 80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85, 84, 65, 69, 128, 80,
+    69, 85, 84, 128, 80, 69, 84, 82, 201, 80, 69, 84, 65, 83, 84, 79, 75, 79,
+    85, 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, 84,
+    65, 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79,
+    128, 80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, 69, 83, 72, 178, 80,
+    69, 83, 69, 84, 193, 80, 69, 211, 80, 69, 82, 84, 72, 207, 80, 69, 82,
+    83, 80, 69, 67, 84, 73, 86, 69, 128, 80, 69, 82, 83, 79, 78, 65, 204, 80,
+    69, 82, 83, 79, 78, 128, 80, 69, 82, 83, 79, 206, 80, 69, 82, 83, 73, 65,
     206, 80, 69, 82, 83, 69, 86, 69, 82, 73, 78, 199, 80, 69, 82, 80, 69, 78,
     68, 73, 67, 85, 76, 65, 82, 128, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85,
     76, 65, 210, 80, 69, 82, 78, 73, 206, 80, 69, 82, 77, 73, 84, 84, 69,
@@ -1801,849 +1851,853 @@
     69, 67, 84, 193, 80, 69, 82, 67, 85, 83, 83, 73, 86, 69, 128, 80, 69, 82,
     67, 69, 78, 212, 80, 69, 80, 80, 69, 82, 128, 80, 69, 80, 69, 84, 128,
     80, 69, 80, 69, 212, 80, 69, 79, 82, 84, 200, 80, 69, 79, 80, 76, 69,
-    128, 80, 69, 78, 84, 65, 84, 72, 76, 79, 78, 128, 80, 69, 78, 84, 65, 83,
-    69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 82, 65, 77, 128, 80, 69, 78, 84,
-    65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 83, 73, 86,
-    197, 80, 69, 78, 78, 217, 80, 69, 78, 78, 65, 78, 84, 128, 80, 69, 78,
-    73, 72, 73, 128, 80, 69, 78, 71, 85, 73, 78, 128, 80, 69, 78, 71, 75, 65,
-    76, 128, 80, 69, 78, 69, 84, 82, 65, 84, 73, 79, 78, 128, 80, 69, 78, 67,
-    73, 76, 128, 80, 69, 76, 65, 83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84,
-    79, 206, 80, 69, 73, 84, 72, 128, 80, 69, 72, 69, 72, 128, 80, 69, 72,
-    69, 200, 80, 69, 72, 128, 80, 69, 200, 80, 69, 69, 90, 73, 128, 80, 69,
-    69, 83, 72, 73, 128, 80, 69, 69, 80, 128, 80, 69, 69, 77, 128, 80, 69,
-    69, 73, 128, 80, 69, 69, 128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83,
-    128, 80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84,
-    65, 76, 128, 80, 69, 68, 69, 83, 84, 65, 204, 80, 69, 68, 65, 204, 80,
-    69, 65, 78, 85, 84, 83, 128, 80, 69, 65, 75, 211, 80, 69, 65, 67, 79, 67,
-    75, 128, 80, 69, 65, 67, 72, 128, 80, 69, 65, 67, 69, 128, 80, 69, 65,
-    67, 197, 80, 68, 73, 128, 80, 68, 70, 128, 80, 68, 128, 80, 67, 128, 80,
-    65, 90, 69, 82, 128, 80, 65, 89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78,
-    78, 65, 128, 80, 65, 89, 128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80,
-    65, 87, 206, 80, 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 128, 80, 65,
-    85, 83, 197, 80, 65, 85, 128, 80, 65, 213, 80, 65, 84, 84, 69, 82, 78,
-    128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 72, 65, 75,
-    75, 85, 128, 80, 65, 84, 200, 80, 65, 84, 65, 75, 128, 80, 65, 84, 65,
-    72, 128, 80, 65, 84, 128, 80, 65, 83, 85, 81, 128, 80, 65, 83, 83, 80,
-    79, 82, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 85, 80,
-    45, 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76,
-    76, 45, 68, 79, 87, 78, 45, 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 73,
-    77, 66, 65, 78, 71, 128, 80, 65, 83, 83, 69, 78, 71, 69, 210, 80, 65, 83,
-    83, 69, 196, 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128,
-    80, 65, 83, 69, 81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85,
-    77, 128, 80, 65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73,
-    208, 80, 65, 82, 84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69,
-    196, 80, 65, 82, 84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206, 80,
-    65, 82, 212, 80, 65, 82, 82, 79, 84, 128, 80, 65, 82, 75, 128, 80, 65,
-    82, 73, 67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, 77, 69, 78,
-    79, 206, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, 84, 72, 69,
-    83, 73, 83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, 80, 65, 82,
-    69, 78, 84, 72, 69, 83, 69, 211, 80, 65, 82, 65, 80, 72, 82, 65, 83, 197,
-    80, 65, 82, 65, 76, 76, 69, 76, 79, 71, 82, 65, 77, 128, 80, 65, 82, 65,
-    76, 76, 69, 76, 128, 80, 65, 82, 65, 76, 76, 69, 204, 80, 65, 82, 65, 75,
-    76, 73, 84, 73, 75, 73, 128, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 201,
-    80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 193, 80, 65, 82, 65, 71, 82, 65,
-    80, 72, 85, 211, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 80, 65,
-    82, 65, 71, 82, 65, 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 200, 80,
-    65, 82, 65, 67, 72, 85, 84, 69, 128, 80, 65, 82, 65, 128, 80, 65, 82,
-    128, 80, 65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80,
-    83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 82,
-    128, 80, 65, 80, 69, 210, 80, 65, 80, 128, 80, 65, 208, 80, 65, 207, 80,
-    65, 78, 89, 85, 75, 85, 128, 80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78,
-    89, 69, 67, 69, 75, 128, 80, 65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65,
-    78, 89, 65, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73,
-    79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75,
-    65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78,
-    71, 79, 78, 65, 78, 128, 80, 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78,
-    71, 87, 73, 83, 65, 68, 128, 80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80,
-    128, 80, 65, 78, 71, 79, 76, 65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71,
-    128, 80, 65, 78, 71, 76, 65, 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78,
-    128, 80, 65, 78, 71, 75, 65, 84, 128, 80, 65, 78, 71, 72, 85, 76, 85,
-    128, 80, 65, 78, 71, 128, 80, 65, 78, 69, 85, 76, 69, 85, 78, 71, 128,
-    80, 65, 78, 68, 193, 80, 65, 78, 67, 65, 75, 69, 83, 128, 80, 65, 78, 65,
-    77, 128, 80, 65, 78, 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128,
-    80, 65, 206, 80, 65, 77, 85, 78, 71, 75, 65, 72, 128, 80, 65, 77, 85, 68,
-    80, 79, 68, 128, 80, 65, 77, 83, 72, 65, 69, 128, 80, 65, 77, 80, 72, 89,
-    76, 73, 65, 206, 80, 65, 77, 73, 78, 71, 75, 65, 76, 128, 80, 65, 77, 69,
-    80, 69, 84, 128, 80, 65, 77, 69, 78, 69, 78, 71, 128, 80, 65, 77, 65, 68,
-    65, 128, 80, 65, 77, 65, 65, 69, 72, 128, 80, 65, 76, 85, 84, 65, 128,
-    80, 65, 76, 79, 67, 72, 75, 65, 128, 80, 65, 76, 77, 89, 82, 69, 78, 197,
-    80, 65, 76, 77, 211, 80, 65, 76, 77, 128, 80, 65, 76, 205, 80, 65, 76,
-    76, 65, 87, 65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 201, 80,
-    65, 76, 69, 84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65,
-    84, 65, 76, 73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84,
-    73, 79, 78, 128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203,
-    80, 65, 73, 89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65,
-    128, 80, 65, 73, 82, 69, 196, 80, 65, 73, 78, 84, 66, 82, 85, 83, 72,
-    128, 80, 65, 73, 128, 80, 65, 72, 76, 65, 86, 201, 80, 65, 72, 128, 80,
-    65, 71, 79, 68, 65, 128, 80, 65, 71, 69, 83, 128, 80, 65, 71, 69, 82,
-    128, 80, 65, 71, 197, 80, 65, 68, 77, 193, 80, 65, 68, 68, 76, 197, 80,
-    65, 68, 68, 73, 78, 199, 80, 65, 68, 193, 80, 65, 68, 128, 80, 65, 67,
-    75, 73, 78, 71, 128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 85,
-    128, 80, 65, 65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 77, 128,
-    80, 65, 65, 82, 65, 69, 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128,
-    80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128,
-    80, 48, 49, 49, 128, 80, 48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48,
-    48, 56, 128, 80, 48, 48, 55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53,
-    128, 80, 48, 48, 52, 128, 80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128,
-    80, 48, 48, 50, 128, 80, 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79,
-    89, 83, 84, 69, 82, 128, 79, 89, 82, 65, 78, 73, 83, 77, 193, 79, 89, 65,
-    78, 78, 65, 128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 79, 88, 69, 73,
-    65, 201, 79, 88, 69, 73, 193, 79, 87, 76, 128, 79, 86, 69, 82, 82, 73,
-    68, 69, 128, 79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 69, 82, 76, 73, 78,
-    69, 128, 79, 86, 69, 82, 76, 65, 89, 128, 79, 86, 69, 82, 76, 65, 217,
-    79, 86, 69, 82, 76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, 80,
-    128, 79, 86, 69, 82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 72, 69, 65, 84,
-    69, 196, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 76, 128, 79, 86,
-    65, 204, 79, 85, 84, 76, 73, 78, 69, 196, 79, 85, 84, 76, 73, 78, 69,
-    128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, 216, 79, 85, 78, 75, 73,
-    193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, 197, 79, 84, 85, 128, 79,
-    84, 84, 79, 77, 65, 206, 79, 84, 84, 69, 82, 128, 79, 84, 84, 65, 86,
-    193, 79, 84, 84, 128, 79, 84, 72, 69, 82, 211, 79, 84, 72, 69, 210, 79,
-    84, 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 79, 83, 77, 65, 78, 89,
-    193, 79, 83, 67, 128, 79, 83, 65, 71, 197, 79, 82, 84, 72, 79, 71, 79,
-    78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78, 65, 84, 197,
-    79, 82, 78, 65, 77, 69, 78, 84, 83, 128, 79, 82, 78, 65, 77, 69, 78, 84,
-    128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, 75, 72, 79, 206, 79, 82,
-    73, 89, 193, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78,
-    128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204, 79, 82, 68,
-    69, 210, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 85, 84, 65, 78,
-    128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, 206, 79, 80, 84, 73,
-    67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, 128, 79, 80, 80, 79,
-    83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 78, 199, 79, 80, 80,
-    79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, 128, 79, 80, 69, 82,
-    65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 79, 80, 69, 82, 65,
-    84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, 79, 80, 69, 78, 45, 80,
-    128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, 69, 196, 79, 80, 69, 78,
-    45, 79, 128, 79, 80, 69, 78, 45, 207, 79, 80, 69, 78, 45, 72, 69, 65, 68,
-    69, 196, 79, 80, 69, 78, 45, 67, 73, 82, 67, 85, 73, 84, 45, 79, 85, 84,
-    80, 85, 212, 79, 80, 69, 78, 128, 79, 79, 90, 69, 128, 79, 79, 89, 65,
-    78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77, 85, 128, 79, 79, 72, 128,
-    79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73, 76, 73, 128, 79, 78, 85,
-    128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79, 78, 75, 65, 82, 128, 79,
-    78, 73, 79, 78, 128, 79, 78, 69, 83, 69, 76, 70, 128, 79, 78, 69, 45, 87,
-    65, 217, 79, 78, 69, 45, 84, 72, 73, 82, 84, 89, 128, 79, 78, 69, 45, 80,
-    73, 69, 67, 197, 79, 78, 69, 45, 76, 73, 78, 197, 79, 78, 69, 45, 72, 85,
-    78, 68, 82, 69, 68, 45, 65, 78, 68, 45, 83, 73, 88, 84, 73, 69, 84, 72,
-    128, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78, 65, 80, 128, 79, 78, 45,
-    79, 70, 198, 79, 77, 73, 83, 83, 73, 79, 206, 79, 77, 73, 67, 82, 79, 78,
-    128, 79, 77, 73, 67, 82, 79, 206, 79, 77, 69, 71, 65, 128, 79, 77, 69,
-    71, 193, 79, 77, 65, 76, 79, 78, 128, 79, 76, 73, 86, 69, 128, 79, 76,
-    73, 71, 79, 206, 79, 76, 68, 128, 79, 75, 84, 207, 79, 75, 65, 82, 65,
-    128, 79, 75, 65, 82, 193, 79, 74, 73, 66, 87, 65, 217, 79, 74, 69, 79,
-    78, 128, 79, 73, 78, 128, 79, 73, 76, 128, 79, 73, 204, 79, 72, 77, 128,
-    79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71,
-    79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70, 70, 73, 67, 69, 82, 128,
-    79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67, 197, 79, 70, 70, 128,
-    79, 69, 89, 128, 79, 69, 82, 128, 79, 69, 75, 128, 79, 69, 69, 128, 79,
-    68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79, 67, 84, 79, 80, 85,
-    83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84, 69, 212, 79, 67,
-    84, 65, 71, 79, 78, 65, 204, 79, 67, 84, 65, 71, 79, 78, 128, 79, 67,
-    210, 79, 67, 76, 79, 67, 75, 128, 79, 67, 67, 76, 85, 83, 73, 79, 78,
-    128, 79, 66, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 79, 66, 83, 69, 82,
-    86, 69, 210, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66, 79, 70, 73,
-    76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67, 212, 79,
-    66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66, 128, 79,
-    65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, 128,
-    79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48, 53, 48,
-    65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52, 56, 128,
-    79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128, 79, 48,
-    52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48, 52, 49,
-    128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56, 128, 79,
-    48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67, 128, 79,
-    48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54, 128, 79,
-    48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128, 79, 48,
-    51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48, 51, 48,
-    65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48, 50, 57,
-    128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54, 128, 79,
-    48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65, 128, 79,
-    48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79, 48, 50,
-    49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48, 49, 57,
-    65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49, 55, 128,
-    79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128, 79, 48,
-    49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48, 49, 48,
-    67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79, 48, 49,
-    48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48, 55, 128,
-    79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48, 54, 68,
-    128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48, 48, 54,
-    65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48, 48, 53,
-    128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50, 128, 79,
-    48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128, 79, 45,
-    79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90, 89, 84,
-    128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89, 80, 128,
-    78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128, 78, 90,
-    85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90, 85, 79,
-    88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128, 78, 90,
-    79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90, 73, 84,
-    128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73, 69, 80,
-    128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128, 78, 90,
-    69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84,
-    128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128, 78, 90,
-    193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85, 128, 78,
-    89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128, 78, 89,
-    85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 78, 128, 78, 89, 85,
-    69, 128, 78, 89, 85, 128, 78, 89, 79, 88, 128, 78, 89, 79, 84, 128, 78,
-    89, 79, 80, 128, 78, 89, 79, 79, 128, 78, 89, 79, 78, 128, 78, 89, 79,
-    65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, 88, 128, 78,
-    89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, 73, 210, 78,
-    89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, 73, 78, 128,
-    78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69, 84, 128,
-    78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 65, 75, 69, 78,
-    199, 78, 89, 73, 128, 78, 89, 201, 78, 89, 72, 65, 128, 78, 89, 69, 84,
-    128, 78, 89, 69, 212, 78, 89, 69, 78, 128, 78, 89, 69, 72, 128, 78, 89,
-    69, 200, 78, 89, 69, 69, 128, 78, 89, 69, 128, 78, 89, 196, 78, 89, 67,
-    65, 128, 78, 89, 65, 85, 128, 78, 89, 65, 74, 128, 78, 89, 65, 73, 128,
-    78, 89, 65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78, 89, 65, 65,
-    128, 78, 87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73, 128, 78, 87,
-    73, 128, 78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65, 128, 78, 87,
-    128, 78, 86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78, 85, 85, 128,
-    78, 85, 84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85, 212, 78, 85,
-    82, 88, 128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79, 88, 128, 78,
-    85, 79, 80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128, 78, 85, 78,
-    85, 218, 78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212, 78, 85, 78,
-    65, 86, 73, 203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77, 69, 82, 207,
-    78, 85, 77, 69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65, 204, 78, 85,
-    77, 66, 69, 82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78, 85, 77, 128,
-    78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78, 85, 75, 84,
-    65, 128, 78, 85, 75, 84, 193, 78, 85, 69, 78, 71, 128, 78, 85, 69, 128,
-    78, 85, 66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49, 49, 128, 78,
-    85, 49, 177, 78, 85, 48, 50, 50, 65, 128, 78, 85, 48, 50, 50, 128, 78,
-    85, 48, 50, 49, 128, 78, 85, 48, 50, 48, 128, 78, 85, 48, 49, 57, 128,
-    78, 85, 48, 49, 56, 65, 128, 78, 85, 48, 49, 56, 128, 78, 85, 48, 49, 55,
-    128, 78, 85, 48, 49, 54, 128, 78, 85, 48, 49, 53, 128, 78, 85, 48, 49,
-    52, 128, 78, 85, 48, 49, 51, 128, 78, 85, 48, 49, 50, 128, 78, 85, 48,
-    49, 49, 65, 128, 78, 85, 48, 49, 49, 128, 78, 85, 48, 49, 48, 65, 128,
-    78, 85, 48, 49, 48, 128, 78, 85, 48, 48, 57, 128, 78, 85, 48, 48, 56,
-    128, 78, 85, 48, 48, 55, 128, 78, 85, 48, 48, 54, 128, 78, 85, 48, 48,
-    53, 128, 78, 85, 48, 48, 52, 128, 78, 85, 48, 48, 51, 128, 78, 85, 48,
-    48, 50, 128, 78, 85, 48, 48, 49, 128, 78, 85, 45, 51, 128, 78, 85, 45,
-    50, 128, 78, 85, 45, 49, 128, 78, 84, 88, 73, 86, 128, 78, 84, 88, 65,
-    128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84, 85, 74, 128, 78,
-    84, 213, 78, 84, 83, 65, 85, 128, 78, 84, 83, 65, 128, 78, 84, 79, 81,
-    80, 69, 78, 128, 78, 84, 79, 71, 128, 78, 84, 79, 199, 78, 84, 73, 69,
-    197, 78, 84, 72, 65, 85, 128, 78, 84, 69, 85, 78, 71, 66, 65, 128, 78,
-    84, 69, 85, 77, 128, 78, 84, 69, 78, 128, 78, 84, 69, 69, 128, 78, 84,
-    65, 80, 128, 78, 84, 65, 208, 78, 84, 65, 65, 128, 78, 84, 65, 128, 78,
-    83, 85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, 128, 78, 83, 79,
-    77, 128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, 69, 80, 128, 78,
-    83, 73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, 72, 85, 212, 78,
-    83, 72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, 83, 72, 73, 69, 69,
-    128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, 128, 78, 83, 72, 65,
-    128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, 78, 128, 78, 83, 65,
-    128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, 82, 89, 82, 88, 128,
-    78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, 89, 128, 78, 82, 85,
-    88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, 128, 78, 82, 85, 82,
-    128, 78, 82, 85, 80, 128, 78, 82, 85, 65, 128, 78, 82, 85, 128, 78, 82,
-    79, 88, 128, 78, 82, 79, 80, 128, 78, 82, 79, 128, 78, 82, 69, 88, 128,
-    78, 82, 69, 84, 128, 78, 82, 69, 211, 78, 82, 69, 80, 128, 78, 82, 69,
-    128, 78, 82, 65, 88, 128, 78, 82, 65, 84, 128, 78, 82, 65, 80, 128, 78,
-    82, 65, 128, 78, 81, 73, 71, 128, 78, 81, 65, 128, 78, 80, 76, 65, 128,
-    78, 80, 65, 128, 78, 79, 89, 128, 78, 79, 88, 128, 78, 79, 87, 67, 128,
-    78, 79, 86, 73, 76, 69, 128, 78, 79, 86, 69, 77, 66, 69, 82, 128, 78, 79,
-    84, 84, 79, 128, 78, 79, 84, 69, 83, 128, 78, 79, 84, 69, 72, 69, 65, 68,
-    128, 78, 79, 84, 69, 72, 69, 65, 196, 78, 79, 84, 69, 66, 79, 79, 75,
-    128, 78, 79, 84, 69, 66, 79, 79, 203, 78, 79, 84, 69, 128, 78, 79, 84,
-    197, 78, 79, 84, 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84,
-    65, 84, 73, 79, 206, 78, 79, 84, 128, 78, 79, 212, 78, 79, 83, 69, 128,
-    78, 79, 83, 197, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 72,
-    69, 82, 206, 78, 79, 82, 84, 72, 69, 65, 83, 84, 45, 80, 79, 73, 78, 84,
-    73, 78, 199, 78, 79, 82, 77, 65, 204, 78, 79, 82, 68, 73, 195, 78, 79,
-    210, 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, 78, 79, 79, 128, 78, 79,
-    78, 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, 45, 80, 79, 84, 65, 66,
-    76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79, 78, 45, 66,
-    82, 69, 65, 75, 73, 78, 199, 78, 79, 78, 128, 78, 79, 77, 73, 83, 77,
-    193, 78, 79, 77, 73, 78, 65, 204, 78, 79, 75, 72, 85, 75, 128, 78, 79,
-    68, 69, 128, 78, 79, 65, 128, 78, 79, 45, 66, 82, 69, 65, 203, 78, 79,
-    45, 53, 128, 78, 79, 45, 52, 128, 78, 79, 45, 51, 128, 78, 79, 45, 50,
-    128, 78, 79, 45, 49, 128, 78, 78, 85, 85, 128, 78, 78, 85, 128, 78, 78,
-    79, 79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78, 78, 85,
-    128, 78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78, 73, 73,
-    128, 78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78, 69, 128,
-    78, 78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78, 65, 65,
-    128, 78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128, 78, 78,
-    71, 79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128, 78, 78,
-    71, 73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78, 78, 71,
-    128, 78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 65, 85, 128, 78, 76,
-    48, 50, 48, 128, 78, 76, 48, 49, 57, 128, 78, 76, 48, 49, 56, 128, 78,
-    76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, 128, 78, 76, 48, 49, 54,
-    128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, 52, 128, 78, 76, 48, 49,
-    51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, 49, 49, 128, 78, 76, 48,
-    49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, 48, 48, 56, 128, 78, 76,
-    48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, 76, 48, 48, 53, 65, 128,
-    78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, 128, 78, 76, 48, 48, 51,
-    128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, 49, 128, 78, 76, 128, 78,
-    75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, 68, 73, 128, 78, 75, 65,
-    85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 75, 65, 128, 78, 74, 89,
-    88, 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89, 82,
-    128, 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78, 74,
-    85, 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78, 74,
-    85, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85,
-    69, 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79, 88,
-    128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128, 78,
-    74, 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73, 80,
-    128, 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69,
-    80, 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73, 128,
-    78, 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78, 74,
-    69, 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74, 69,
-    69, 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69, 128,
-    78, 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76, 73,
-    128, 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128, 78,
-    73, 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85,
-    128, 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 69, 84, 89,
-    128, 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84, 69, 69, 78, 128, 78,
-    73, 78, 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84, 72, 73, 82, 84, 89,
-    128, 78, 73, 78, 197, 78, 73, 78, 68, 65, 50, 128, 78, 73, 78, 68, 65,
-    178, 78, 73, 78, 57, 128, 78, 73, 78, 128, 78, 73, 77, 128, 78, 73, 205,
-    78, 73, 75, 79, 76, 83, 66, 85, 82, 199, 78, 73, 75, 72, 65, 72, 73, 84,
-    128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75, 65, 128, 78, 73, 72,
-    83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65, 77, 73, 78, 128, 78,
-    73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72, 84, 128, 78, 73, 71,
-    72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128, 78, 73, 69, 88, 128,
-    78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128, 78, 73, 69, 85, 78,
-    45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85, 78, 45, 83, 73, 79,
-    83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76, 128, 78, 73, 69, 85,
-    78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78, 45, 80, 65, 78, 83,
-    73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89, 69, 79, 75, 128, 78,
-    73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73, 69, 85, 78, 45, 67,
-    73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72, 73, 69, 85, 67, 72,
-    128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78, 73, 69, 128, 78, 73,
-    66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 73, 45, 84, 69, 128, 78,
-    73, 45, 55, 128, 78, 73, 45, 54, 128, 78, 73, 45, 53, 128, 78, 73, 45,
-    52, 128, 78, 73, 45, 51, 128, 78, 73, 45, 50, 128, 78, 73, 45, 49, 128,
-    78, 72, 85, 69, 128, 78, 72, 74, 65, 128, 78, 72, 128, 78, 71, 89, 69,
-    128, 78, 71, 86, 69, 128, 78, 71, 85, 85, 128, 78, 71, 85, 79, 88, 128,
-    78, 71, 85, 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 85, 65, 78, 128,
-    78, 71, 85, 65, 69, 84, 128, 78, 71, 85, 65, 69, 128, 78, 71, 79, 88,
-    128, 78, 71, 79, 85, 128, 78, 71, 79, 213, 78, 71, 79, 84, 128, 78, 71,
-    79, 81, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 77,
-    128, 78, 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71,
-    75, 89, 69, 69, 128, 78, 71, 75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80,
-    128, 78, 71, 75, 85, 78, 128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85,
-    69, 78, 90, 69, 85, 77, 128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68,
-    201, 78, 71, 75, 73, 69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71,
-    75, 69, 85, 82, 73, 128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75,
-    69, 85, 65, 69, 77, 128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80,
-    128, 78, 71, 75, 65, 65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73,
-    69, 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72,
-    65, 128, 78, 71, 71, 87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69,
-    128, 78, 71, 71, 85, 80, 128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71,
-    85, 79, 209, 78, 71, 71, 85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128,
-    78, 71, 71, 85, 77, 128, 78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85,
-    65, 69, 83, 72, 65, 197, 78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 65,
-    128, 78, 71, 71, 85, 128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128,
-    78, 71, 71, 73, 128, 78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65,
-    69, 84, 128, 78, 71, 71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78,
-    71, 71, 69, 78, 128, 78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69,
-    69, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65,
-    80, 128, 78, 71, 71, 65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77,
-    128, 78, 71, 71, 65, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78,
-    71, 69, 85, 82, 69, 85, 84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78,
-    128, 78, 71, 69, 69, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65,
-    88, 128, 78, 71, 65, 85, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78,
-    71, 65, 81, 128, 78, 71, 65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78,
-    71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65,
-    65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128,
-    78, 69, 87, 83, 80, 65, 80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128,
-    78, 69, 87, 76, 73, 78, 197, 78, 69, 87, 193, 78, 69, 87, 128, 78, 69,
-    215, 78, 69, 85, 84, 82, 65, 76, 128, 78, 69, 85, 84, 82, 65, 204, 78,
-    69, 85, 84, 69, 82, 128, 78, 69, 84, 87, 79, 82, 75, 69, 196, 78, 69,
-    212, 78, 69, 83, 84, 69, 196, 78, 69, 83, 83, 85, 83, 128, 78, 69, 82,
+    128, 80, 69, 79, 80, 76, 197, 80, 69, 78, 84, 65, 84, 72, 76, 79, 78,
+    128, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 82,
+    65, 77, 128, 80, 69, 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85,
+    128, 80, 69, 78, 83, 73, 86, 197, 80, 69, 78, 78, 217, 80, 69, 78, 78,
+    65, 78, 84, 128, 80, 69, 78, 73, 72, 73, 128, 80, 69, 78, 71, 85, 73, 78,
+    128, 80, 69, 78, 71, 75, 65, 76, 128, 80, 69, 78, 69, 84, 82, 65, 84, 73,
+    79, 78, 128, 80, 69, 78, 67, 73, 76, 128, 80, 69, 206, 80, 69, 76, 65,
+    83, 84, 79, 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, 73, 84, 72,
+    128, 80, 69, 72, 69, 72, 128, 80, 69, 72, 69, 200, 80, 69, 72, 128, 80,
+    69, 200, 80, 69, 69, 90, 73, 128, 80, 69, 69, 83, 72, 73, 128, 80, 69,
+    69, 80, 128, 80, 69, 69, 77, 128, 80, 69, 69, 73, 128, 80, 69, 69, 128,
+    80, 69, 68, 69, 83, 84, 82, 73, 65, 78, 83, 128, 80, 69, 68, 69, 83, 84,
+    82, 73, 65, 78, 128, 80, 69, 68, 69, 83, 84, 65, 76, 128, 80, 69, 68, 69,
+    83, 84, 65, 204, 80, 69, 68, 65, 204, 80, 69, 65, 78, 85, 84, 83, 128,
+    80, 69, 65, 75, 211, 80, 69, 65, 67, 79, 67, 75, 128, 80, 69, 65, 67, 72,
+    128, 80, 69, 65, 67, 69, 128, 80, 69, 65, 67, 197, 80, 68, 73, 128, 80,
+    68, 70, 128, 80, 68, 128, 80, 67, 128, 80, 65, 90, 69, 82, 128, 80, 65,
+    89, 69, 82, 79, 75, 128, 80, 65, 89, 65, 78, 78, 65, 128, 80, 65, 89,
+    128, 80, 65, 88, 128, 80, 65, 87, 78, 128, 80, 65, 87, 206, 80, 65, 215,
+    80, 65, 86, 73, 89, 65, 78, 73, 128, 80, 65, 85, 83, 197, 80, 65, 85,
+    128, 80, 65, 213, 80, 65, 84, 84, 217, 80, 65, 84, 84, 69, 82, 78, 128,
+    80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 65, 84, 72, 65, 75, 75,
+    85, 128, 80, 65, 84, 200, 80, 65, 84, 65, 75, 128, 80, 65, 84, 65, 72,
+    128, 80, 65, 84, 128, 80, 65, 83, 85, 81, 128, 80, 65, 83, 83, 80, 79,
+    82, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76, 45, 85, 80, 45,
+    79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, 76, 76,
+    45, 68, 79, 87, 78, 45, 79, 85, 84, 80, 85, 212, 80, 65, 83, 83, 73, 77,
+    66, 65, 78, 71, 128, 80, 65, 83, 83, 69, 78, 71, 69, 210, 80, 65, 83, 83,
+    69, 196, 80, 65, 83, 72, 84, 65, 128, 80, 65, 83, 72, 65, 69, 128, 80,
+    65, 83, 69, 81, 128, 80, 65, 83, 65, 78, 71, 65, 206, 80, 65, 82, 85, 77,
+    128, 80, 65, 82, 84, 217, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208,
+    80, 65, 82, 84, 73, 65, 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196,
+    80, 65, 82, 84, 73, 65, 204, 80, 65, 82, 84, 72, 73, 65, 206, 80, 65, 82,
+    212, 80, 65, 82, 82, 79, 84, 128, 80, 65, 82, 75, 128, 80, 65, 82, 73,
+    67, 72, 79, 78, 128, 80, 65, 82, 69, 83, 84, 73, 71, 77, 69, 78, 79, 206,
+    80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73,
+    83, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 211, 80, 65, 82, 69, 78,
+    84, 72, 69, 83, 69, 211, 80, 65, 82, 65, 80, 72, 82, 65, 83, 197, 80, 65,
+    82, 65, 76, 76, 69, 76, 79, 71, 82, 65, 77, 128, 80, 65, 82, 65, 76, 76,
+    69, 76, 128, 80, 65, 82, 65, 76, 76, 69, 204, 80, 65, 82, 65, 75, 76, 73,
+    84, 73, 75, 73, 128, 80, 65, 82, 65, 75, 76, 73, 84, 73, 75, 201, 80, 65,
+    82, 65, 75, 65, 76, 69, 83, 77, 193, 80, 65, 82, 65, 71, 82, 65, 80, 72,
+    85, 211, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 80, 65, 82, 65,
+    71, 82, 65, 80, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 200, 80, 65, 82,
+    65, 67, 72, 85, 84, 69, 128, 80, 65, 82, 65, 128, 80, 65, 82, 128, 80,
+    65, 80, 89, 82, 85, 83, 128, 80, 65, 80, 69, 82, 67, 76, 73, 80, 83, 128,
+    80, 65, 80, 69, 82, 67, 76, 73, 80, 128, 80, 65, 80, 69, 82, 128, 80, 65,
+    80, 69, 210, 80, 65, 80, 128, 80, 65, 208, 80, 65, 207, 80, 65, 78, 89,
+    85, 75, 85, 128, 80, 65, 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 69, 67,
+    69, 75, 128, 80, 65, 78, 89, 65, 78, 71, 71, 65, 128, 80, 65, 78, 89, 65,
+    75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 83, 73, 79, 83, 45,
+    80, 73, 69, 85, 80, 128, 80, 65, 78, 83, 73, 79, 83, 45, 75, 65, 80, 89,
+    69, 79, 85, 78, 80, 73, 69, 85, 80, 128, 80, 65, 78, 79, 78, 71, 79, 78,
+    65, 78, 128, 80, 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73,
+    83, 65, 68, 128, 80, 65, 78, 71, 82, 65, 78, 71, 75, 69, 80, 128, 80, 65,
+    78, 71, 79, 76, 65, 84, 128, 80, 65, 78, 71, 76, 79, 78, 71, 128, 80, 65,
+    78, 71, 76, 65, 89, 65, 82, 128, 80, 65, 78, 71, 75, 79, 78, 128, 80, 65,
+    78, 71, 75, 65, 84, 128, 80, 65, 78, 71, 72, 85, 76, 85, 128, 80, 65, 78,
+    71, 128, 80, 65, 78, 69, 85, 76, 69, 85, 78, 71, 128, 80, 65, 78, 68,
+    193, 80, 65, 78, 67, 65, 75, 69, 83, 128, 80, 65, 78, 65, 77, 128, 80,
+    65, 78, 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 128, 80, 65, 206,
+    80, 65, 77, 85, 78, 71, 75, 65, 72, 128, 80, 65, 77, 85, 68, 80, 79, 68,
+    128, 80, 65, 77, 83, 72, 65, 69, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65,
+    206, 80, 65, 77, 73, 78, 71, 75, 65, 76, 128, 80, 65, 77, 69, 80, 69, 84,
+    128, 80, 65, 77, 69, 78, 69, 78, 71, 128, 80, 65, 77, 65, 68, 65, 128,
+    80, 65, 77, 65, 65, 69, 72, 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 76,
+    79, 67, 72, 75, 65, 128, 80, 65, 76, 77, 89, 82, 69, 78, 197, 80, 65, 76,
+    77, 211, 80, 65, 76, 77, 128, 80, 65, 76, 205, 80, 65, 76, 76, 65, 87,
+    65, 128, 80, 65, 76, 76, 65, 83, 128, 80, 65, 76, 201, 80, 65, 76, 69,
+    84, 84, 69, 128, 80, 65, 76, 65, 85, 78, 199, 80, 65, 76, 65, 84, 65, 76,
+    73, 90, 69, 196, 80, 65, 76, 65, 84, 65, 76, 73, 90, 65, 84, 73, 79, 78,
+    128, 80, 65, 76, 65, 84, 65, 204, 80, 65, 75, 80, 65, 203, 80, 65, 73,
+    89, 65, 78, 78, 79, 73, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65,
+    73, 82, 69, 196, 80, 65, 73, 78, 84, 66, 82, 85, 83, 72, 128, 80, 65, 73,
+    128, 80, 65, 72, 76, 65, 86, 201, 80, 65, 72, 128, 80, 65, 71, 79, 68,
+    65, 128, 80, 65, 71, 69, 83, 128, 80, 65, 71, 69, 82, 128, 80, 65, 71,
+    197, 80, 65, 68, 77, 193, 80, 65, 68, 68, 76, 197, 80, 65, 68, 68, 73,
+    78, 199, 80, 65, 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71,
+    128, 80, 65, 67, 75, 65, 71, 69, 128, 80, 65, 65, 84, 85, 128, 80, 65,
+    65, 83, 69, 78, 84, 79, 128, 80, 65, 65, 82, 65, 77, 128, 80, 65, 65, 82,
+    65, 69, 128, 80, 65, 65, 77, 128, 80, 65, 65, 73, 128, 80, 65, 65, 45,
+    80, 73, 76, 76, 65, 128, 80, 65, 65, 128, 80, 50, 128, 80, 48, 49, 49,
+    128, 80, 48, 49, 48, 128, 80, 48, 48, 57, 128, 80, 48, 48, 56, 128, 80,
+    48, 48, 55, 128, 80, 48, 48, 54, 128, 80, 48, 48, 53, 128, 80, 48, 48,
+    52, 128, 80, 48, 48, 51, 65, 128, 80, 48, 48, 51, 128, 80, 48, 48, 50,
+    128, 80, 48, 48, 49, 65, 128, 80, 48, 48, 49, 128, 79, 89, 83, 84, 69,
+    82, 128, 79, 89, 82, 65, 78, 73, 83, 77, 193, 79, 89, 65, 78, 78, 65,
+    128, 79, 88, 73, 65, 128, 79, 88, 73, 193, 79, 88, 69, 73, 65, 201, 79,
+    88, 69, 73, 193, 79, 87, 76, 128, 79, 86, 69, 82, 82, 73, 68, 69, 128,
+    79, 86, 69, 82, 76, 79, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, 128, 79,
+    86, 69, 82, 76, 65, 89, 128, 79, 86, 69, 82, 76, 65, 217, 79, 86, 69, 82,
+    76, 65, 80, 80, 73, 78, 199, 79, 86, 69, 82, 76, 65, 80, 128, 79, 86, 69,
+    82, 76, 65, 73, 68, 128, 79, 86, 69, 82, 76, 65, 73, 196, 79, 86, 69, 82,
+    72, 69, 65, 84, 69, 196, 79, 86, 69, 82, 66, 65, 82, 128, 79, 86, 65, 76,
+    128, 79, 86, 65, 204, 79, 85, 84, 76, 73, 78, 69, 196, 79, 85, 84, 76,
+    73, 78, 69, 128, 79, 85, 84, 69, 210, 79, 85, 84, 66, 79, 216, 79, 85,
+    78, 75, 73, 193, 79, 85, 78, 67, 69, 128, 79, 85, 78, 67, 197, 79, 84,
+    85, 128, 79, 84, 84, 79, 77, 65, 206, 79, 84, 84, 69, 82, 128, 79, 84,
+    84, 65, 86, 193, 79, 84, 84, 128, 79, 84, 72, 69, 82, 211, 79, 84, 72,
+    69, 210, 79, 84, 72, 65, 76, 65, 206, 79, 84, 72, 65, 76, 128, 79, 83,
+    77, 65, 78, 89, 193, 79, 83, 67, 128, 79, 83, 65, 71, 197, 79, 82, 84,
+    72, 79, 71, 79, 78, 65, 204, 79, 82, 84, 72, 79, 68, 79, 216, 79, 82, 78,
+    65, 84, 197, 79, 82, 78, 65, 77, 69, 78, 84, 83, 128, 79, 82, 78, 65, 77,
+    69, 78, 84, 128, 79, 82, 78, 65, 77, 69, 78, 212, 79, 82, 75, 72, 79,
+    206, 79, 82, 73, 89, 193, 79, 82, 73, 71, 73, 78, 65, 204, 79, 82, 73,
+    71, 73, 78, 128, 79, 82, 69, 45, 50, 128, 79, 82, 68, 73, 78, 65, 204,
+    79, 82, 68, 69, 210, 79, 82, 67, 72, 73, 68, 128, 79, 82, 65, 78, 71, 85,
+    84, 65, 78, 128, 79, 82, 65, 78, 71, 197, 79, 80, 84, 73, 79, 206, 79,
+    80, 84, 73, 67, 65, 204, 79, 80, 80, 82, 69, 83, 83, 73, 79, 78, 128, 79,
+    80, 80, 79, 83, 73, 84, 73, 79, 78, 128, 79, 80, 80, 79, 83, 73, 78, 199,
+    79, 80, 80, 79, 83, 69, 128, 79, 80, 72, 73, 85, 67, 72, 85, 83, 128, 79,
+    80, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 79, 80,
+    69, 82, 65, 84, 73, 78, 199, 79, 80, 69, 78, 73, 78, 199, 79, 80, 69, 78,
+    45, 80, 128, 79, 80, 69, 78, 45, 79, 85, 84, 76, 73, 78, 69, 196, 79, 80,
+    69, 78, 45, 79, 128, 79, 80, 69, 78, 45, 207, 79, 80, 69, 78, 45, 72, 69,
+    65, 68, 69, 196, 79, 80, 69, 78, 45, 67, 73, 82, 67, 85, 73, 84, 45, 79,
+    85, 84, 80, 85, 212, 79, 80, 69, 78, 128, 79, 80, 69, 206, 79, 79, 90,
+    69, 128, 79, 79, 89, 65, 78, 78, 65, 128, 79, 79, 85, 128, 79, 79, 77,
+    85, 128, 79, 79, 72, 128, 79, 79, 69, 128, 79, 79, 66, 79, 79, 70, 73,
+    76, 73, 128, 79, 78, 85, 128, 79, 78, 83, 85, 128, 79, 78, 78, 128, 79,
+    78, 75, 65, 82, 128, 79, 78, 73, 79, 78, 128, 79, 78, 69, 83, 69, 76, 70,
+    128, 79, 78, 69, 45, 87, 65, 217, 79, 78, 69, 45, 84, 72, 73, 82, 84, 89,
+    128, 79, 78, 69, 45, 80, 73, 69, 67, 197, 79, 78, 69, 45, 76, 73, 78,
+    197, 79, 78, 69, 45, 72, 85, 78, 68, 82, 69, 68, 45, 65, 78, 68, 45, 83,
+    73, 88, 84, 73, 69, 84, 72, 128, 79, 78, 67, 79, 77, 73, 78, 199, 79, 78,
+    65, 80, 128, 79, 78, 45, 79, 70, 198, 79, 77, 73, 83, 83, 73, 79, 206,
+    79, 77, 73, 67, 82, 79, 78, 128, 79, 77, 73, 67, 82, 79, 206, 79, 77, 69,
+    71, 65, 128, 79, 77, 69, 71, 193, 79, 77, 65, 76, 79, 78, 128, 79, 76,
+    73, 86, 69, 128, 79, 76, 73, 71, 79, 206, 79, 76, 68, 128, 79, 75, 84,
+    207, 79, 75, 65, 82, 65, 128, 79, 75, 65, 82, 193, 79, 74, 73, 66, 87,
+    65, 217, 79, 74, 69, 79, 78, 128, 79, 73, 78, 128, 79, 73, 76, 128, 79,
+    73, 204, 79, 72, 77, 128, 79, 72, 205, 79, 71, 82, 69, 128, 79, 71, 79,
+    78, 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 70,
+    70, 73, 67, 69, 82, 128, 79, 70, 70, 73, 67, 69, 128, 79, 70, 70, 73, 67,
+    197, 79, 70, 70, 128, 79, 69, 89, 128, 79, 69, 82, 128, 79, 69, 75, 128,
+    79, 69, 69, 128, 79, 68, 69, 78, 128, 79, 68, 68, 128, 79, 68, 196, 79,
+    67, 84, 79, 80, 85, 83, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 84,
+    69, 212, 79, 67, 84, 65, 71, 79, 78, 65, 204, 79, 67, 84, 65, 71, 79, 78,
+    128, 79, 67, 210, 79, 67, 76, 79, 67, 75, 128, 79, 67, 67, 76, 85, 83,
+    73, 79, 78, 128, 79, 66, 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 79, 66,
+    83, 69, 82, 86, 69, 210, 79, 66, 79, 76, 211, 79, 66, 79, 204, 79, 66,
+    79, 70, 73, 76, 73, 128, 79, 66, 76, 73, 81, 85, 197, 79, 66, 74, 69, 67,
+    212, 79, 66, 69, 76, 85, 83, 128, 79, 66, 69, 76, 79, 83, 128, 79, 66,
+    128, 79, 65, 89, 128, 79, 65, 75, 128, 79, 65, 66, 79, 65, 70, 73, 76,
+    73, 128, 79, 193, 79, 48, 53, 49, 128, 79, 48, 53, 48, 66, 128, 79, 48,
+    53, 48, 65, 128, 79, 48, 53, 48, 128, 79, 48, 52, 57, 128, 79, 48, 52,
+    56, 128, 79, 48, 52, 55, 128, 79, 48, 52, 54, 128, 79, 48, 52, 53, 128,
+    79, 48, 52, 52, 128, 79, 48, 52, 51, 128, 79, 48, 52, 50, 128, 79, 48,
+    52, 49, 128, 79, 48, 52, 48, 128, 79, 48, 51, 57, 128, 79, 48, 51, 56,
+    128, 79, 48, 51, 55, 128, 79, 48, 51, 54, 68, 128, 79, 48, 51, 54, 67,
+    128, 79, 48, 51, 54, 66, 128, 79, 48, 51, 54, 65, 128, 79, 48, 51, 54,
+    128, 79, 48, 51, 53, 128, 79, 48, 51, 52, 128, 79, 48, 51, 51, 65, 128,
+    79, 48, 51, 51, 128, 79, 48, 51, 50, 128, 79, 48, 51, 49, 128, 79, 48,
+    51, 48, 65, 128, 79, 48, 51, 48, 128, 79, 48, 50, 57, 65, 128, 79, 48,
+    50, 57, 128, 79, 48, 50, 56, 128, 79, 48, 50, 55, 128, 79, 48, 50, 54,
+    128, 79, 48, 50, 53, 65, 128, 79, 48, 50, 53, 128, 79, 48, 50, 52, 65,
+    128, 79, 48, 50, 52, 128, 79, 48, 50, 51, 128, 79, 48, 50, 50, 128, 79,
+    48, 50, 49, 128, 79, 48, 50, 48, 65, 128, 79, 48, 50, 48, 128, 79, 48,
+    49, 57, 65, 128, 79, 48, 49, 57, 128, 79, 48, 49, 56, 128, 79, 48, 49,
+    55, 128, 79, 48, 49, 54, 128, 79, 48, 49, 53, 128, 79, 48, 49, 52, 128,
+    79, 48, 49, 51, 128, 79, 48, 49, 50, 128, 79, 48, 49, 49, 128, 79, 48,
+    49, 48, 67, 128, 79, 48, 49, 48, 66, 128, 79, 48, 49, 48, 65, 128, 79,
+    48, 49, 48, 128, 79, 48, 48, 57, 128, 79, 48, 48, 56, 128, 79, 48, 48,
+    55, 128, 79, 48, 48, 54, 70, 128, 79, 48, 48, 54, 69, 128, 79, 48, 48,
+    54, 68, 128, 79, 48, 48, 54, 67, 128, 79, 48, 48, 54, 66, 128, 79, 48,
+    48, 54, 65, 128, 79, 48, 48, 54, 128, 79, 48, 48, 53, 65, 128, 79, 48,
+    48, 53, 128, 79, 48, 48, 52, 128, 79, 48, 48, 51, 128, 79, 48, 48, 50,
+    128, 79, 48, 48, 49, 65, 128, 79, 48, 48, 49, 128, 79, 45, 89, 69, 128,
+    79, 45, 79, 45, 73, 128, 79, 45, 69, 128, 78, 90, 89, 88, 128, 78, 90,
+    89, 84, 128, 78, 90, 89, 82, 88, 128, 78, 90, 89, 82, 128, 78, 90, 89,
+    80, 128, 78, 90, 89, 128, 78, 90, 85, 88, 128, 78, 90, 85, 82, 88, 128,
+    78, 90, 85, 82, 128, 78, 90, 85, 81, 128, 78, 90, 85, 80, 128, 78, 90,
+    85, 79, 88, 128, 78, 90, 85, 79, 128, 78, 90, 85, 206, 78, 90, 85, 128,
+    78, 90, 79, 88, 128, 78, 90, 79, 80, 128, 78, 90, 73, 88, 128, 78, 90,
+    73, 84, 128, 78, 90, 73, 80, 128, 78, 90, 73, 69, 88, 128, 78, 90, 73,
+    69, 80, 128, 78, 90, 73, 69, 128, 78, 90, 73, 128, 78, 90, 69, 88, 128,
+    78, 90, 69, 85, 77, 128, 78, 90, 69, 128, 78, 90, 65, 88, 128, 78, 90,
+    65, 84, 128, 78, 90, 65, 81, 128, 78, 90, 65, 80, 128, 78, 90, 65, 128,
+    78, 90, 193, 78, 89, 87, 65, 128, 78, 89, 85, 88, 128, 78, 89, 85, 85,
+    128, 78, 89, 85, 84, 128, 78, 89, 85, 80, 128, 78, 89, 85, 79, 88, 128,
+    78, 89, 85, 79, 80, 128, 78, 89, 85, 79, 128, 78, 89, 85, 78, 128, 78,
+    89, 85, 69, 128, 78, 89, 85, 128, 78, 89, 79, 88, 128, 78, 89, 79, 84,
+    128, 78, 89, 79, 80, 128, 78, 89, 79, 79, 128, 78, 89, 79, 78, 128, 78,
+    89, 79, 65, 128, 78, 89, 79, 128, 78, 89, 74, 65, 128, 78, 89, 73, 88,
+    128, 78, 89, 73, 84, 128, 78, 89, 73, 212, 78, 89, 73, 211, 78, 89, 73,
+    210, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, 68, 79, 128, 78, 89, 73,
+    78, 128, 78, 89, 73, 73, 128, 78, 89, 73, 69, 88, 128, 78, 89, 73, 69,
+    84, 128, 78, 89, 73, 69, 80, 128, 78, 89, 73, 69, 128, 78, 89, 73, 65,
+    75, 69, 78, 199, 78, 89, 73, 128, 78, 89, 201, 78, 89, 72, 65, 128, 78,
+    89, 69, 84, 128, 78, 89, 69, 212, 78, 89, 69, 78, 128, 78, 89, 69, 72,
+    128, 78, 89, 69, 200, 78, 89, 69, 69, 128, 78, 89, 69, 128, 78, 89, 196,
+    78, 89, 67, 65, 128, 78, 89, 65, 85, 128, 78, 89, 65, 74, 128, 78, 89,
+    65, 73, 128, 78, 89, 65, 72, 128, 78, 89, 65, 69, 77, 65, 69, 128, 78,
+    89, 65, 65, 128, 78, 87, 79, 79, 128, 78, 87, 79, 128, 78, 87, 73, 73,
+    128, 78, 87, 73, 128, 78, 87, 69, 128, 78, 87, 65, 65, 128, 78, 87, 65,
+    128, 78, 87, 128, 78, 86, 128, 78, 85, 88, 128, 78, 85, 85, 78, 128, 78,
+    85, 85, 128, 78, 85, 84, 73, 76, 76, 85, 128, 78, 85, 84, 128, 78, 85,
+    212, 78, 85, 82, 88, 128, 78, 85, 82, 128, 78, 85, 80, 128, 78, 85, 79,
+    88, 128, 78, 85, 79, 80, 128, 78, 85, 79, 128, 78, 85, 78, 85, 90, 128,
+    78, 85, 78, 85, 218, 78, 85, 78, 71, 128, 78, 85, 78, 65, 86, 85, 212,
+    78, 85, 78, 65, 86, 73, 203, 78, 85, 78, 128, 78, 85, 206, 78, 85, 77,
+    69, 82, 207, 78, 85, 77, 69, 82, 65, 84, 79, 210, 78, 85, 77, 69, 82, 65,
+    204, 78, 85, 77, 66, 69, 82, 83, 128, 78, 85, 77, 66, 69, 82, 128, 78,
+    85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 76, 128, 78,
+    85, 75, 84, 65, 128, 78, 85, 75, 84, 193, 78, 85, 69, 78, 71, 128, 78,
+    85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 65, 69, 128, 78, 85, 49,
+    49, 128, 78, 85, 49, 177, 78, 85, 48, 50, 50, 65, 128, 78, 85, 48, 50,
+    50, 128, 78, 85, 48, 50, 49, 128, 78, 85, 48, 50, 48, 128, 78, 85, 48,
+    49, 57, 128, 78, 85, 48, 49, 56, 65, 128, 78, 85, 48, 49, 56, 128, 78,
+    85, 48, 49, 55, 128, 78, 85, 48, 49, 54, 128, 78, 85, 48, 49, 53, 128,
+    78, 85, 48, 49, 52, 128, 78, 85, 48, 49, 51, 128, 78, 85, 48, 49, 50,
+    128, 78, 85, 48, 49, 49, 65, 128, 78, 85, 48, 49, 49, 128, 78, 85, 48,
+    49, 48, 65, 128, 78, 85, 48, 49, 48, 128, 78, 85, 48, 48, 57, 128, 78,
+    85, 48, 48, 56, 128, 78, 85, 48, 48, 55, 128, 78, 85, 48, 48, 54, 128,
+    78, 85, 48, 48, 53, 128, 78, 85, 48, 48, 52, 128, 78, 85, 48, 48, 51,
+    128, 78, 85, 48, 48, 50, 128, 78, 85, 48, 48, 49, 128, 78, 85, 45, 51,
+    128, 78, 85, 45, 50, 128, 78, 85, 45, 49, 128, 78, 84, 88, 73, 86, 128,
+    78, 84, 88, 65, 128, 78, 84, 85, 85, 128, 78, 84, 85, 77, 128, 78, 84,
+    85, 74, 128, 78, 84, 213, 78, 84, 83, 65, 85, 128, 78, 84, 83, 65, 128,
+    78, 84, 79, 81, 80, 69, 78, 128, 78, 84, 79, 71, 128, 78, 84, 79, 199,
+    78, 84, 73, 69, 197, 78, 84, 72, 65, 85, 128, 78, 84, 69, 85, 78, 71, 66,
+    65, 128, 78, 84, 69, 85, 77, 128, 78, 84, 69, 78, 128, 78, 84, 69, 69,
+    128, 78, 84, 65, 80, 128, 78, 84, 65, 208, 78, 84, 65, 65, 128, 78, 84,
+    65, 128, 78, 83, 85, 79, 212, 78, 83, 85, 78, 128, 78, 83, 85, 77, 128,
+    78, 83, 79, 77, 128, 78, 83, 73, 69, 69, 84, 128, 78, 83, 73, 69, 69, 80,
+    128, 78, 83, 73, 69, 69, 128, 78, 83, 72, 85, 84, 128, 78, 83, 72, 85,
+    212, 78, 83, 72, 85, 79, 80, 128, 78, 83, 72, 85, 69, 128, 78, 83, 72,
+    73, 69, 69, 128, 78, 83, 72, 69, 69, 128, 78, 83, 72, 65, 81, 128, 78,
+    83, 72, 65, 128, 78, 83, 69, 85, 65, 69, 78, 128, 78, 83, 69, 78, 128,
+    78, 83, 65, 128, 78, 82, 89, 88, 128, 78, 82, 89, 84, 128, 78, 82, 89,
+    82, 88, 128, 78, 82, 89, 82, 128, 78, 82, 89, 80, 128, 78, 82, 89, 128,
+    78, 82, 85, 88, 128, 78, 82, 85, 84, 128, 78, 82, 85, 82, 88, 128, 78,
+    82, 85, 82, 128, 78, 82, 85, 80, 128, 78, 82, 85, 65, 128, 78, 82, 85,
+    128, 78, 82, 79, 88, 128, 78, 82, 79, 80, 128, 78, 82, 79, 128, 78, 82,
+    69, 88, 128, 78, 82, 69, 84, 128, 78, 82, 69, 211, 78, 82, 69, 80, 128,
+    78, 82, 69, 128, 78, 82, 65, 88, 128, 78, 82, 65, 84, 128, 78, 82, 65,
+    80, 128, 78, 82, 65, 128, 78, 81, 73, 71, 128, 78, 81, 65, 128, 78, 80,
+    76, 65, 128, 78, 80, 65, 128, 78, 79, 89, 128, 78, 79, 88, 128, 78, 79,
+    87, 67, 128, 78, 79, 86, 73, 76, 69, 128, 78, 79, 86, 69, 77, 66, 69, 82,
+    128, 78, 79, 84, 84, 79, 128, 78, 79, 84, 69, 83, 128, 78, 79, 84, 69,
+    72, 69, 65, 68, 128, 78, 79, 84, 69, 72, 69, 65, 196, 78, 79, 84, 69, 66,
+    79, 79, 75, 128, 78, 79, 84, 69, 66, 79, 79, 203, 78, 79, 84, 69, 128,
+    78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, 78, 79, 84, 67, 72, 128,
+    78, 79, 84, 65, 84, 73, 79, 206, 78, 79, 84, 128, 78, 79, 212, 78, 79,
+    83, 69, 128, 78, 79, 83, 197, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78,
+    79, 82, 84, 72, 69, 82, 206, 78, 79, 82, 84, 72, 69, 65, 83, 84, 45, 80,
+    79, 73, 78, 84, 73, 78, 199, 78, 79, 82, 77, 65, 204, 78, 79, 82, 68, 73,
+    195, 78, 79, 210, 78, 79, 80, 128, 78, 79, 79, 78, 85, 128, 78, 79, 79,
+    128, 78, 79, 78, 70, 79, 82, 75, 73, 78, 71, 128, 78, 79, 78, 45, 80, 79,
+    84, 65, 66, 76, 197, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, 128, 78, 79,
+    78, 45, 66, 82, 69, 65, 75, 73, 78, 199, 78, 79, 78, 128, 78, 79, 77, 73,
+    83, 77, 193, 78, 79, 77, 73, 78, 65, 204, 78, 79, 75, 72, 85, 75, 128,
+    78, 79, 68, 69, 128, 78, 79, 65, 128, 78, 79, 45, 66, 82, 69, 65, 203,
+    78, 79, 45, 53, 128, 78, 79, 45, 52, 128, 78, 79, 45, 51, 128, 78, 79,
+    45, 50, 128, 78, 79, 45, 49, 128, 78, 78, 85, 85, 128, 78, 78, 85, 128,
+    78, 78, 79, 79, 128, 78, 78, 79, 128, 78, 78, 78, 85, 85, 128, 78, 78,
+    78, 85, 128, 78, 78, 78, 79, 79, 128, 78, 78, 78, 79, 128, 78, 78, 78,
+    73, 73, 128, 78, 78, 78, 73, 128, 78, 78, 78, 69, 69, 128, 78, 78, 78,
+    69, 128, 78, 78, 78, 65, 85, 128, 78, 78, 78, 65, 73, 128, 78, 78, 78,
+    65, 65, 128, 78, 78, 78, 65, 128, 78, 78, 78, 128, 78, 78, 72, 65, 128,
+    78, 78, 71, 79, 79, 128, 78, 78, 71, 79, 128, 78, 78, 71, 73, 73, 128,
+    78, 78, 71, 73, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 65, 128, 78,
+    78, 71, 128, 78, 78, 66, 83, 80, 128, 78, 77, 128, 78, 76, 65, 85, 128,
+    78, 76, 48, 50, 48, 128, 78, 76, 48, 49, 57, 128, 78, 76, 48, 49, 56,
+    128, 78, 76, 48, 49, 55, 65, 128, 78, 76, 48, 49, 55, 128, 78, 76, 48,
+    49, 54, 128, 78, 76, 48, 49, 53, 128, 78, 76, 48, 49, 52, 128, 78, 76,
+    48, 49, 51, 128, 78, 76, 48, 49, 50, 128, 78, 76, 48, 49, 49, 128, 78,
+    76, 48, 49, 48, 128, 78, 76, 48, 48, 57, 128, 78, 76, 48, 48, 56, 128,
+    78, 76, 48, 48, 55, 128, 78, 76, 48, 48, 54, 128, 78, 76, 48, 48, 53, 65,
+    128, 78, 76, 48, 48, 53, 128, 78, 76, 48, 48, 52, 128, 78, 76, 48, 48,
+    51, 128, 78, 76, 48, 48, 50, 128, 78, 76, 48, 48, 49, 128, 78, 76, 128,
+    78, 75, 79, 77, 128, 78, 75, 207, 78, 75, 73, 78, 68, 73, 128, 78, 75,
+    65, 85, 128, 78, 75, 65, 65, 82, 65, 69, 128, 78, 75, 65, 128, 78, 74,
+    89, 88, 128, 78, 74, 89, 84, 128, 78, 74, 89, 82, 88, 128, 78, 74, 89,
+    82, 128, 78, 74, 89, 80, 128, 78, 74, 89, 128, 78, 74, 85, 88, 128, 78,
+    74, 85, 82, 88, 128, 78, 74, 85, 82, 128, 78, 74, 85, 81, 65, 128, 78,
+    74, 85, 80, 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74,
+    85, 69, 81, 128, 78, 74, 85, 65, 69, 128, 78, 74, 85, 128, 78, 74, 79,
+    88, 128, 78, 74, 79, 84, 128, 78, 74, 79, 80, 128, 78, 74, 79, 79, 128,
+    78, 74, 79, 128, 78, 74, 73, 88, 128, 78, 74, 73, 84, 128, 78, 74, 73,
+    80, 128, 78, 74, 73, 69, 88, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73,
+    69, 80, 128, 78, 74, 73, 69, 69, 128, 78, 74, 73, 69, 128, 78, 74, 73,
+    128, 78, 74, 201, 78, 74, 69, 85, 88, 128, 78, 74, 69, 85, 84, 128, 78,
+    74, 69, 85, 65, 69, 78, 65, 128, 78, 74, 69, 85, 65, 69, 77, 128, 78, 74,
+    69, 69, 69, 69, 128, 78, 74, 69, 69, 128, 78, 74, 69, 197, 78, 74, 69,
+    128, 78, 74, 65, 81, 128, 78, 74, 65, 80, 128, 78, 74, 65, 69, 77, 76,
+    73, 128, 78, 74, 65, 69, 77, 128, 78, 74, 65, 65, 128, 78, 73, 88, 128,
+    78, 73, 84, 82, 69, 128, 78, 73, 83, 65, 71, 128, 78, 73, 82, 85, 71, 85,
+    128, 78, 73, 80, 128, 78, 73, 78, 84, 72, 128, 78, 73, 78, 74, 65, 128,
+    78, 73, 78, 69, 84, 89, 128, 78, 73, 78, 69, 84, 217, 78, 73, 78, 69, 84,
+    69, 69, 78, 128, 78, 73, 78, 69, 84, 69, 69, 206, 78, 73, 78, 69, 45, 84,
+    72, 73, 82, 84, 89, 128, 78, 73, 78, 197, 78, 73, 78, 68, 65, 50, 128,
+    78, 73, 78, 68, 65, 178, 78, 73, 78, 57, 128, 78, 73, 78, 128, 78, 73,
+    77, 128, 78, 73, 205, 78, 73, 75, 79, 76, 83, 66, 85, 82, 199, 78, 73,
+    75, 72, 65, 72, 73, 84, 128, 78, 73, 75, 65, 72, 73, 84, 128, 78, 73, 75,
+    65, 128, 78, 73, 72, 83, 72, 86, 65, 83, 65, 128, 78, 73, 71, 73, 68, 65,
+    77, 73, 78, 128, 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 72,
+    84, 128, 78, 73, 71, 72, 212, 78, 73, 71, 71, 65, 72, 73, 84, 65, 128,
+    78, 73, 69, 88, 128, 78, 73, 69, 85, 78, 45, 84, 73, 75, 69, 85, 84, 128,
+    78, 73, 69, 85, 78, 45, 84, 72, 73, 69, 85, 84, 72, 128, 78, 73, 69, 85,
+    78, 45, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 82, 73, 69, 85, 76,
+    128, 78, 73, 69, 85, 78, 45, 80, 73, 69, 85, 80, 128, 78, 73, 69, 85, 78,
+    45, 80, 65, 78, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, 75, 73, 89,
+    69, 79, 75, 128, 78, 73, 69, 85, 78, 45, 72, 73, 69, 85, 72, 128, 78, 73,
+    69, 85, 78, 45, 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 67, 72,
+    73, 69, 85, 67, 72, 128, 78, 73, 69, 85, 206, 78, 73, 69, 80, 128, 78,
+    73, 69, 128, 78, 73, 66, 128, 78, 73, 65, 128, 78, 73, 50, 128, 78, 73,
+    45, 84, 69, 128, 78, 73, 45, 55, 128, 78, 73, 45, 54, 128, 78, 73, 45,
+    53, 128, 78, 73, 45, 52, 128, 78, 73, 45, 51, 128, 78, 73, 45, 50, 128,
+    78, 73, 45, 49, 128, 78, 72, 85, 69, 128, 78, 72, 74, 65, 128, 78, 72,
+    65, 89, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, 71, 86, 69, 128, 78,
+    71, 85, 85, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78,
+    71, 85, 79, 128, 78, 71, 85, 65, 78, 128, 78, 71, 85, 65, 69, 84, 128,
+    78, 71, 85, 65, 69, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78,
+    71, 79, 213, 78, 71, 79, 84, 128, 78, 71, 79, 81, 128, 78, 71, 79, 80,
+    128, 78, 71, 79, 78, 128, 78, 71, 79, 77, 128, 78, 71, 79, 69, 72, 128,
+    78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 89, 69, 69, 128, 78, 71,
+    75, 87, 65, 69, 78, 128, 78, 71, 75, 85, 80, 128, 78, 71, 75, 85, 78,
+    128, 78, 71, 75, 85, 77, 128, 78, 71, 75, 85, 69, 78, 90, 69, 85, 77,
+    128, 78, 71, 75, 85, 197, 78, 71, 75, 73, 78, 68, 201, 78, 71, 75, 73,
+    69, 69, 128, 78, 71, 75, 69, 85, 88, 128, 78, 71, 75, 69, 85, 82, 73,
+    128, 78, 71, 75, 69, 85, 65, 69, 81, 128, 78, 71, 75, 69, 85, 65, 69, 77,
+    128, 78, 71, 75, 65, 81, 128, 78, 71, 75, 65, 80, 128, 78, 71, 75, 65,
+    65, 77, 73, 128, 78, 71, 75, 65, 128, 78, 71, 73, 69, 88, 128, 78, 71,
+    73, 69, 80, 128, 78, 71, 73, 69, 128, 78, 71, 72, 65, 128, 78, 71, 71,
+    87, 65, 69, 78, 128, 78, 71, 71, 85, 82, 65, 69, 128, 78, 71, 71, 85, 80,
+    128, 78, 71, 71, 85, 79, 81, 128, 78, 71, 71, 85, 79, 209, 78, 71, 71,
+    85, 79, 78, 128, 78, 71, 71, 85, 79, 77, 128, 78, 71, 71, 85, 77, 128,
+    78, 71, 71, 85, 69, 69, 84, 128, 78, 71, 71, 85, 65, 69, 83, 72, 65, 197,
+    78, 71, 71, 85, 65, 69, 206, 78, 71, 71, 85, 65, 128, 78, 71, 71, 85,
+    128, 78, 71, 71, 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128,
+    78, 71, 71, 69, 85, 88, 128, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 71,
+    71, 69, 85, 65, 69, 128, 78, 71, 71, 69, 213, 78, 71, 71, 69, 78, 128,
+    78, 71, 71, 69, 69, 84, 128, 78, 71, 71, 69, 69, 69, 69, 128, 78, 71, 71,
+    69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 65, 80, 128, 78, 71, 71,
+    65, 65, 77, 65, 69, 128, 78, 71, 71, 65, 65, 77, 128, 78, 71, 71, 65, 65,
+    128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, 85, 82, 69, 85,
+    84, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 69, 128,
+    78, 71, 69, 65, 68, 65, 76, 128, 78, 71, 65, 88, 128, 78, 71, 65, 85,
+    128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 81, 128, 78, 71,
+    65, 80, 128, 78, 71, 65, 78, 71, 85, 128, 78, 71, 65, 78, 128, 78, 71,
+    65, 73, 128, 78, 71, 65, 72, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193,
+    78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 83, 80, 65,
+    80, 69, 82, 128, 78, 69, 87, 76, 73, 78, 69, 128, 78, 69, 87, 76, 73, 78,
+    197, 78, 69, 87, 193, 78, 69, 87, 128, 78, 69, 215, 78, 69, 85, 84, 82,
+    65, 76, 128, 78, 69, 85, 84, 82, 65, 204, 78, 69, 85, 84, 69, 82, 128,
+    78, 69, 84, 87, 79, 82, 75, 69, 196, 78, 69, 212, 78, 69, 83, 84, 73, 78,
+    199, 78, 69, 83, 84, 69, 196, 78, 69, 83, 83, 85, 83, 128, 78, 69, 82,
     196, 78, 69, 81, 85, 68, 65, 65, 128, 78, 69, 80, 84, 85, 78, 69, 128,
     78, 69, 80, 84, 85, 78, 197, 78, 69, 80, 128, 78, 69, 79, 128, 78, 69,
     207, 78, 69, 78, 79, 69, 128, 78, 69, 78, 65, 78, 79, 128, 78, 69, 78,
     128, 78, 69, 76, 128, 78, 69, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84,
     73, 86, 197, 78, 69, 71, 65, 84, 73, 79, 206, 78, 69, 71, 65, 84, 69,
-    196, 78, 69, 67, 75, 84, 73, 69, 128, 78, 69, 67, 75, 128, 78, 69, 66,
-    69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 69, 45, 75, 79, 128, 78, 68, 85,
-    88, 128, 78, 68, 85, 84, 128, 78, 68, 85, 82, 88, 128, 78, 68, 85, 82,
-    128, 78, 68, 85, 80, 128, 78, 68, 85, 78, 128, 78, 68, 213, 78, 68, 79,
-    88, 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, 79, 128,
-    78, 68, 79, 78, 128, 78, 68, 79, 77, 66, 85, 128, 78, 68, 79, 76, 197,
-    78, 68, 73, 88, 128, 78, 68, 73, 84, 128, 78, 68, 73, 81, 128, 78, 68,
-    73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73,
-    68, 65, 128, 78, 68, 73, 65, 81, 128, 78, 68, 69, 88, 128, 78, 68, 69,
-    85, 88, 128, 78, 68, 69, 85, 84, 128, 78, 68, 69, 85, 65, 69, 82, 69, 69,
-    128, 78, 68, 69, 80, 128, 78, 68, 69, 69, 128, 78, 68, 69, 128, 78, 68,
-    65, 88, 128, 78, 68, 65, 84, 128, 78, 68, 65, 80, 128, 78, 68, 65, 77,
-    128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65, 69, 84, 128, 78, 68, 65, 65,
-    128, 78, 68, 65, 193, 78, 67, 72, 65, 85, 128, 78, 67, 65, 128, 78, 66,
-    89, 88, 128, 78, 66, 89, 84, 128, 78, 66, 89, 82, 88, 128, 78, 66, 89,
-    82, 128, 78, 66, 89, 80, 128, 78, 66, 89, 128, 78, 66, 85, 88, 128, 78,
-    66, 85, 84, 128, 78, 66, 85, 82, 88, 128, 78, 66, 85, 82, 128, 78, 66,
-    85, 80, 128, 78, 66, 85, 128, 78, 66, 79, 88, 128, 78, 66, 79, 84, 128,
-    78, 66, 79, 80, 128, 78, 66, 79, 128, 78, 66, 73, 88, 128, 78, 66, 73,
-    84, 128, 78, 66, 73, 80, 128, 78, 66, 73, 69, 88, 128, 78, 66, 73, 69,
-    80, 128, 78, 66, 73, 69, 128, 78, 66, 73, 128, 78, 66, 72, 128, 78, 66,
-    65, 88, 128, 78, 66, 65, 84, 128, 78, 66, 65, 80, 128, 78, 66, 65, 128,
-    78, 65, 90, 65, 210, 78, 65, 89, 65, 78, 78, 65, 128, 78, 65, 89, 128,
-    78, 65, 88, 73, 65, 206, 78, 65, 88, 128, 78, 65, 85, 84, 72, 83, 128,
-    78, 65, 85, 83, 69, 65, 84, 69, 196, 78, 65, 85, 68, 73, 218, 78, 65, 84,
-    85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65, 204, 78, 65, 83, 75, 65, 80,
-    201, 78, 65, 83, 72, 73, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79,
-    78, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 65, 83, 65,
-    204, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 81, 128, 78, 65,
-    79, 211, 78, 65, 78, 83, 65, 78, 65, 81, 128, 78, 65, 78, 71, 77, 79, 78,
-    84, 72, 79, 128, 78, 65, 78, 68, 73, 78, 65, 71, 65, 82, 201, 78, 65, 78,
-    68, 128, 78, 65, 78, 65, 128, 78, 65, 77, 69, 128, 78, 65, 77, 197, 78,
-    65, 77, 50, 128, 78, 65, 75, 128, 78, 65, 73, 82, 193, 78, 65, 73, 204,
-    78, 65, 71, 82, 201, 78, 65, 71, 65, 82, 128, 78, 65, 71, 65, 128, 78,
-    65, 71, 193, 78, 65, 71, 128, 78, 65, 199, 78, 65, 69, 128, 78, 65, 66,
-    76, 65, 128, 78, 65, 66, 65, 84, 65, 69, 65, 206, 78, 65, 65, 83, 73, 75,
-    89, 65, 89, 65, 128, 78, 65, 65, 75, 83, 73, 75, 89, 65, 89, 65, 128, 78,
-    65, 65, 73, 128, 78, 65, 193, 78, 65, 52, 128, 78, 65, 50, 128, 78, 65,
-    45, 57, 128, 78, 65, 45, 56, 128, 78, 65, 45, 55, 128, 78, 65, 45, 54,
-    128, 78, 65, 45, 53, 128, 78, 65, 45, 52, 128, 78, 65, 45, 51, 128, 78,
-    65, 45, 50, 128, 78, 65, 45, 49, 128, 78, 48, 52, 50, 128, 78, 48, 52,
-    49, 128, 78, 48, 52, 48, 128, 78, 48, 51, 57, 128, 78, 48, 51, 56, 128,
-    78, 48, 51, 55, 65, 128, 78, 48, 51, 55, 128, 78, 48, 51, 54, 128, 78,
-    48, 51, 53, 65, 128, 78, 48, 51, 53, 128, 78, 48, 51, 52, 65, 128, 78,
-    48, 51, 52, 128, 78, 48, 51, 51, 65, 128, 78, 48, 51, 51, 128, 78, 48,
-    51, 50, 128, 78, 48, 51, 49, 128, 78, 48, 51, 48, 128, 78, 48, 50, 57,
-    128, 78, 48, 50, 56, 128, 78, 48, 50, 55, 128, 78, 48, 50, 54, 128, 78,
-    48, 50, 53, 65, 128, 78, 48, 50, 53, 128, 78, 48, 50, 52, 128, 78, 48,
-    50, 51, 128, 78, 48, 50, 50, 128, 78, 48, 50, 49, 128, 78, 48, 50, 48,
-    128, 78, 48, 49, 57, 128, 78, 48, 49, 56, 66, 128, 78, 48, 49, 56, 65,
-    128, 78, 48, 49, 56, 128, 78, 48, 49, 55, 128, 78, 48, 49, 54, 128, 78,
-    48, 49, 53, 128, 78, 48, 49, 52, 128, 78, 48, 49, 51, 128, 78, 48, 49,
-    50, 128, 78, 48, 49, 49, 128, 78, 48, 49, 48, 128, 78, 48, 48, 57, 128,
-    78, 48, 48, 56, 128, 78, 48, 48, 55, 128, 78, 48, 48, 54, 128, 78, 48,
-    48, 53, 128, 78, 48, 48, 52, 128, 78, 48, 48, 51, 128, 78, 48, 48, 50,
-    128, 78, 48, 48, 49, 128, 78, 45, 77, 85, 45, 77, 79, 45, 50, 128, 78,
-    45, 77, 85, 45, 77, 79, 45, 49, 128, 78, 45, 67, 82, 69, 197, 78, 45, 65,
-    82, 217, 77, 89, 88, 128, 77, 89, 84, 128, 77, 89, 83, 76, 73, 84, 69,
-    128, 77, 89, 80, 128, 77, 89, 65, 128, 77, 89, 193, 77, 89, 128, 77, 87,
-    79, 79, 128, 77, 87, 79, 128, 77, 87, 73, 73, 128, 77, 87, 73, 128, 77,
-    87, 69, 69, 128, 77, 87, 69, 128, 77, 87, 65, 65, 128, 77, 87, 65, 128,
-    77, 87, 128, 77, 215, 77, 86, 83, 128, 77, 86, 79, 80, 128, 77, 86, 73,
-    128, 77, 86, 69, 85, 65, 69, 78, 71, 65, 77, 128, 77, 86, 128, 77, 214,
-    77, 85, 88, 128, 77, 85, 85, 86, 85, 90, 72, 65, 75, 75, 85, 128, 77, 85,
-    85, 83, 73, 75, 65, 84, 79, 65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74,
-    193, 77, 85, 85, 128, 77, 85, 84, 72, 65, 76, 73, 89, 65, 128, 77, 85,
-    84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 77, 85, 83, 72,
-    82, 79, 79, 77, 128, 77, 85, 83, 72, 51, 128, 77, 85, 83, 72, 179, 77,
-    85, 83, 72, 128, 77, 85, 83, 200, 77, 85, 83, 128, 77, 85, 82, 88, 128,
-    77, 85, 82, 71, 85, 50, 128, 77, 85, 82, 69, 128, 77, 85, 82, 68, 65,
-    128, 77, 85, 82, 68, 193, 77, 85, 82, 128, 77, 85, 81, 68, 65, 77, 128,
-    77, 85, 80, 128, 77, 85, 79, 88, 128, 77, 85, 79, 84, 128, 77, 85, 79,
-    80, 128, 77, 85, 79, 77, 65, 69, 128, 77, 85, 79, 128, 77, 85, 78, 83,
-    85, 66, 128, 77, 85, 78, 65, 72, 128, 77, 85, 78, 128, 77, 85, 76, 84,
-    73, 83, 69, 84, 128, 77, 85, 76, 84, 73, 83, 69, 212, 77, 85, 76, 84, 73,
-    80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 77, 85, 76, 84, 73, 80, 76, 73,
-    67, 65, 84, 73, 79, 206, 77, 85, 76, 84, 73, 80, 76, 69, 128, 77, 85, 76,
-    84, 73, 80, 76, 197, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 77, 85,
-    76, 84, 73, 77, 65, 80, 128, 77, 85, 76, 84, 201, 77, 85, 76, 84, 65, 78,
-    201, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 77, 85, 75, 75, 85, 82, 85,
-    78, 73, 128, 77, 85, 73, 78, 128, 77, 85, 71, 83, 128, 77, 85, 71, 128,
-    77, 85, 199, 77, 85, 69, 78, 128, 77, 85, 69, 128, 77, 85, 67, 72, 128,
-    77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 83, 128, 77,
-    85, 65, 78, 128, 77, 85, 65, 69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65,
-    193, 77, 85, 45, 52, 128, 77, 85, 45, 51, 128, 77, 85, 45, 50, 128, 77,
-    85, 45, 49, 128, 77, 213, 77, 84, 65, 86, 82, 85, 76, 201, 77, 83, 128,
-    77, 82, 207, 77, 210, 77, 80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79,
-    88, 128, 77, 79, 86, 73, 197, 77, 79, 86, 69, 211, 77, 79, 86, 69, 77,
-    69, 78, 84, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77,
-    69, 78, 84, 45, 72, 73, 78, 71, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45,
-    70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84,
-    45, 68, 73, 65, 71, 79, 78, 65, 204, 77, 79, 86, 69, 77, 69, 78, 84, 128,
-    77, 79, 86, 69, 77, 69, 78, 212, 77, 79, 86, 69, 196, 77, 79, 86, 69,
-    128, 77, 79, 85, 84, 72, 128, 77, 79, 85, 83, 69, 128, 77, 79, 85, 83,
-    197, 77, 79, 85, 78, 84, 65, 73, 78, 83, 128, 77, 79, 85, 78, 84, 65, 73,
-    78, 128, 77, 79, 85, 78, 84, 65, 73, 206, 77, 79, 85, 78, 212, 77, 79,
-    85, 78, 68, 128, 77, 79, 85, 78, 196, 77, 79, 84, 79, 82, 87, 65, 89,
-    128, 77, 79, 84, 79, 82, 73, 90, 69, 196, 77, 79, 84, 79, 82, 67, 89, 67,
-    76, 69, 128, 77, 79, 84, 79, 210, 77, 79, 84, 72, 69, 82, 128, 77, 79,
-    84, 72, 69, 210, 77, 79, 84, 128, 77, 79, 83, 81, 85, 73, 84, 79, 128,
-    77, 79, 83, 81, 85, 69, 128, 77, 79, 82, 84, 85, 85, 77, 128, 77, 79, 82,
-    84, 65, 82, 128, 77, 79, 82, 80, 72, 79, 76, 79, 71, 73, 67, 65, 204, 77,
-    79, 82, 78, 73, 78, 71, 128, 77, 79, 80, 128, 77, 79, 79, 83, 69, 45, 67,
-    82, 69, 197, 77, 79, 79, 78, 128, 77, 79, 79, 206, 77, 79, 79, 77, 80,
-    85, 81, 128, 77, 79, 79, 77, 69, 85, 84, 128, 77, 79, 79, 68, 128, 77,
-    79, 79, 196, 77, 79, 79, 128, 77, 79, 78, 84, 73, 69, 69, 78, 128, 77,
-    79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, 83, 84, 69, 82,
-    128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, 77, 79, 78, 79, 83, 80, 65,
-    67, 197, 77, 79, 78, 79, 82, 65, 73, 76, 128, 77, 79, 78, 79, 71, 82, 65,
-    80, 200, 77, 79, 78, 79, 71, 82, 65, 77, 77, 79, 211, 77, 79, 78, 79, 71,
-    82, 65, 205, 77, 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79,
-    67, 85, 76, 65, 210, 77, 79, 78, 79, 67, 76, 69, 128, 77, 79, 78, 75, 69,
-    89, 128, 77, 79, 78, 75, 69, 217, 77, 79, 78, 73, 128, 77, 79, 78, 71,
-    75, 69, 85, 65, 69, 81, 128, 77, 79, 78, 69, 89, 45, 77, 79, 85, 84, 200,
-    77, 79, 78, 69, 217, 77, 79, 78, 128, 77, 79, 206, 77, 79, 76, 128, 77,
-    79, 72, 65, 77, 77, 65, 196, 77, 79, 68, 85, 76, 207, 77, 79, 68, 73, 70,
-    73, 69, 82, 45, 57, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 56, 128, 77,
-    79, 68, 73, 70, 73, 69, 82, 45, 55, 128, 77, 79, 68, 73, 70, 73, 69, 82,
-    45, 54, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 53, 128, 77, 79, 68, 73,
-    70, 73, 69, 82, 45, 52, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 51, 128,
-    77, 79, 68, 73, 70, 73, 69, 82, 45, 50, 128, 77, 79, 68, 73, 70, 73, 69,
-    82, 45, 49, 54, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 53, 128, 77,
-    79, 68, 73, 70, 73, 69, 82, 45, 49, 52, 128, 77, 79, 68, 73, 70, 73, 69,
-    82, 45, 49, 51, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 50, 128, 77,
-    79, 68, 73, 70, 73, 69, 82, 45, 49, 49, 128, 77, 79, 68, 73, 70, 73, 69,
-    82, 45, 49, 48, 128, 77, 79, 68, 73, 70, 73, 69, 82, 128, 77, 79, 68,
-    201, 77, 79, 68, 69, 83, 84, 89, 128, 77, 79, 68, 69, 82, 206, 77, 79,
-    68, 69, 77, 128, 77, 79, 68, 69, 76, 83, 128, 77, 79, 68, 69, 76, 128,
-    77, 79, 68, 69, 128, 77, 79, 66, 73, 76, 197, 77, 79, 65, 128, 77, 79,
-    45, 54, 128, 77, 79, 45, 53, 128, 77, 79, 45, 52, 128, 77, 79, 45, 51,
-    128, 77, 207, 77, 78, 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 83, 80,
-    128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, 76, 128, 77, 75, 80, 65,
-    82, 65, 209, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 83, 82, 65, 128,
-    77, 73, 82, 73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 73, 128, 77, 73, 82,
-    69, 68, 128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 77, 73, 78, 85, 83,
-    45, 79, 82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 128, 77, 73, 78, 73,
-    83, 84, 69, 82, 128, 77, 73, 78, 73, 77, 73, 90, 69, 128, 77, 73, 78, 73,
-    77, 65, 128, 77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85,
-    83, 128, 77, 73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79,
-    78, 83, 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 73, 76, 76, 69, 84,
-    128, 77, 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 76, 75, 217, 77, 73,
-    76, 75, 128, 77, 73, 76, 73, 84, 65, 82, 217, 77, 73, 76, 128, 77, 73,
-    75, 85, 82, 79, 78, 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, 73,
-    128, 77, 73, 73, 78, 128, 77, 73, 73, 77, 128, 77, 73, 73, 128, 77, 73,
-    199, 77, 73, 69, 88, 128, 77, 73, 69, 85, 77, 45, 84, 73, 75, 69, 85, 84,
-    128, 77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77,
-    73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 77, 73,
-    69, 85, 77, 45, 82, 73, 69, 85, 76, 128, 77, 73, 69, 85, 77, 45, 80, 73,
-    69, 85, 80, 45, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69,
-    85, 80, 128, 77, 73, 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 77,
-    73, 69, 85, 77, 45, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 67,
-    73, 69, 85, 67, 128, 77, 73, 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72,
-    128, 77, 73, 69, 85, 205, 77, 73, 69, 80, 128, 77, 73, 69, 69, 128, 77,
-    73, 69, 128, 77, 73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 69, 45, 87,
-    69, 76, 83, 200, 77, 73, 68, 68, 76, 69, 128, 77, 73, 68, 45, 76, 69, 86,
-    69, 204, 77, 73, 196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 69, 128, 77,
-    73, 67, 82, 79, 80, 72, 79, 78, 69, 128, 77, 73, 67, 82, 79, 66, 69, 128,
-    77, 73, 67, 82, 207, 77, 73, 67, 210, 77, 73, 45, 55, 128, 77, 73, 45,
-    54, 128, 77, 73, 45, 53, 128, 77, 73, 45, 52, 128, 77, 73, 45, 51, 128,
-    77, 73, 45, 50, 128, 77, 73, 45, 49, 128, 77, 72, 90, 128, 77, 72, 65,
-    128, 77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85,
-    82, 88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79,
-    88, 128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128,
-    77, 71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71,
-    79, 128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77,
-    71, 69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85,
-    128, 77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71,
-    66, 79, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71,
-    66, 69, 78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71,
-    66, 65, 83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88,
-    128, 77, 71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71,
-    128, 77, 70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73,
-    89, 65, 81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77,
-    70, 69, 85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128,
-    77, 69, 90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85,
-    81, 128, 77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85,
-    78, 128, 77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77,
-    69, 84, 82, 73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79,
-    66, 69, 76, 85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71,
-    128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78,
-    73, 65, 206, 77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71,
-    197, 77, 69, 83, 79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77,
-    69, 82, 80, 69, 82, 83, 79, 78, 128, 77, 69, 82, 75, 72, 65, 128, 77, 69,
-    82, 75, 72, 193, 77, 69, 82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73,
-    128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69,
-    82, 67, 85, 82, 217, 77, 69, 78, 79, 82, 65, 200, 77, 69, 78, 79, 69,
-    128, 77, 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 77, 79, 128,
-    77, 69, 77, 66, 69, 82, 83, 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128,
-    77, 69, 77, 66, 69, 210, 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77,
-    128, 77, 69, 205, 77, 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128,
-    77, 69, 73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65,
-    80, 72, 79, 78, 69, 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79,
-    82, 85, 128, 77, 69, 69, 84, 69, 201, 77, 69, 69, 84, 128, 77, 69, 69,
-    77, 85, 128, 77, 69, 69, 77, 128, 77, 69, 69, 202, 77, 69, 69, 69, 69,
-    128, 77, 69, 68, 73, 85, 77, 128, 77, 69, 68, 73, 85, 205, 77, 69, 68,
-    73, 69, 86, 65, 204, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, 73,
-    67, 65, 204, 77, 69, 68, 73, 65, 204, 77, 69, 68, 69, 70, 65, 73, 68, 82,
-    73, 206, 77, 69, 68, 65, 76, 128, 77, 69, 67, 72, 65, 78, 73, 67, 65,
-    204, 77, 69, 65, 84, 128, 77, 69, 65, 212, 77, 69, 65, 83, 85, 82, 69,
-    196, 77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 65, 83, 85, 82, 197, 77,
-    69, 45, 77, 65, 128, 77, 69, 45, 50, 128, 77, 69, 45, 49, 128, 77, 68,
-    85, 206, 77, 196, 77, 67, 72, 213, 77, 67, 72, 65, 206, 77, 195, 77, 66,
-    85, 85, 128, 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85,
-    69, 128, 77, 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66,
-    79, 79, 128, 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77,
-    66, 73, 82, 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88,
-    128, 77, 66, 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69,
-    82, 65, 69, 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84,
-    128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66,
-    65, 78, 89, 73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75,
-    69, 84, 128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66,
-    52, 128, 77, 66, 51, 128, 77, 66, 50, 128, 77, 65, 89, 69, 203, 77, 65,
-    89, 65, 78, 78, 65, 128, 77, 65, 89, 65, 206, 77, 65, 89, 128, 77, 65,
-    88, 73, 77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88,
-    128, 77, 65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82,
-    73, 88, 128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128,
-    77, 65, 83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71,
-    69, 128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 72,
-    70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73,
-    78, 197, 77, 65, 83, 65, 82, 65, 205, 77, 65, 82, 89, 128, 77, 65, 82,
-    87, 65, 82, 201, 77, 65, 82, 85, 75, 85, 128, 77, 65, 82, 84, 89, 82, 73,
-    193, 77, 65, 82, 84, 73, 65, 204, 77, 65, 82, 82, 89, 73, 78, 199, 77,
-    65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 82, 65, 84, 65, 78, 128, 77, 65,
-    82, 75, 211, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, 75, 45, 52, 128,
-    77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 128, 77, 65, 82, 75,
-    45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 72, 69, 206, 77, 65,
-    82, 67, 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, 84, 65, 67, 67, 65,
-    84, 79, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 83, 73,
-    84, 69, 128, 77, 65, 82, 66, 85, 84, 65, 128, 77, 65, 82, 66, 85, 84,
-    193, 77, 65, 82, 128, 77, 65, 81, 65, 70, 128, 77, 65, 81, 128, 77, 65,
-    80, 76, 197, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 79, 128, 77,
-    65, 78, 85, 65, 204, 77, 65, 78, 84, 69, 76, 80, 73, 69, 67, 197, 77, 65,
-    78, 83, 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128, 77, 65, 78, 78,
-    65, 218, 77, 65, 78, 78, 65, 128, 77, 65, 78, 73, 67, 72, 65, 69, 65,
-    206, 77, 65, 78, 71, 79, 128, 77, 65, 78, 71, 65, 76, 65, 77, 128, 77,
-    65, 78, 68, 65, 82, 73, 78, 128, 77, 65, 78, 68, 65, 73, 76, 73, 78, 199,
-    77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72, 213, 77, 65, 78, 65,
-    212, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197,
-    77, 65, 76, 69, 69, 82, 73, 128, 77, 65, 76, 69, 128, 77, 65, 76, 197,
-    77, 65, 76, 65, 75, 79, 206, 77, 65, 75, 83, 85, 82, 65, 128, 77, 65, 75,
-    83, 85, 82, 193, 77, 65, 75, 65, 83, 65, 210, 77, 65, 73, 90, 69, 128,
-    77, 65, 73, 89, 65, 77, 79, 75, 128, 77, 65, 73, 84, 65, 73, 75, 72, 85,
-    128, 77, 65, 73, 82, 85, 128, 77, 65, 73, 77, 85, 65, 78, 128, 77, 65,
-    73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 76, 66, 79, 216, 77, 65, 73, 75,
-    85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 128, 77, 65, 73, 128, 77, 65,
-    72, 74, 79, 78, 199, 77, 65, 72, 72, 65, 128, 77, 65, 72, 65, 80, 82, 65,
-    78, 65, 128, 77, 65, 72, 65, 80, 65, 75, 72, 128, 77, 65, 72, 65, 74, 65,
-    78, 201, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, 77, 65, 72, 128,
-    77, 65, 71, 78, 73, 70, 89, 73, 78, 199, 77, 65, 71, 78, 69, 84, 128, 77,
-    65, 71, 69, 128, 77, 65, 69, 83, 73, 128, 77, 65, 69, 78, 89, 73, 128,
-    77, 65, 69, 78, 74, 69, 84, 128, 77, 65, 69, 77, 86, 69, 85, 88, 128, 77,
-    65, 69, 77, 75, 80, 69, 78, 128, 77, 65, 69, 77, 71, 66, 73, 69, 69, 128,
-    77, 65, 69, 77, 66, 71, 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 65, 128,
-    77, 65, 69, 77, 128, 77, 65, 69, 76, 69, 69, 128, 77, 65, 69, 75, 69, 85,
-    80, 128, 77, 65, 68, 89, 65, 128, 77, 65, 68, 85, 128, 77, 65, 68, 68,
-    65, 72, 128, 77, 65, 68, 68, 65, 200, 77, 65, 68, 68, 65, 128, 77, 65,
-    68, 68, 193, 77, 65, 67, 82, 79, 78, 45, 71, 82, 65, 86, 69, 128, 77, 65,
-    67, 82, 79, 78, 45, 66, 82, 69, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45,
-    65, 67, 85, 84, 69, 128, 77, 65, 67, 82, 79, 78, 128, 77, 65, 67, 82, 79,
-    206, 77, 65, 67, 72, 73, 78, 69, 128, 77, 65, 65, 89, 89, 65, 65, 128,
-    77, 65, 65, 73, 128, 77, 65, 65, 128, 77, 65, 50, 128, 77, 65, 45, 55,
-    128, 77, 65, 45, 54, 128, 77, 65, 45, 53, 128, 77, 65, 45, 52, 128, 77,
-    65, 45, 51, 128, 77, 65, 45, 50, 128, 77, 65, 45, 49, 128, 77, 49, 57,
-    183, 77, 49, 57, 182, 77, 49, 57, 181, 77, 49, 57, 180, 77, 49, 57, 179,
-    77, 49, 57, 178, 77, 49, 57, 177, 77, 49, 57, 176, 77, 49, 56, 185, 77,
-    49, 56, 184, 77, 49, 56, 183, 77, 49, 56, 182, 77, 49, 56, 181, 77, 49,
-    56, 180, 77, 49, 56, 179, 77, 49, 56, 178, 77, 49, 56, 177, 77, 49, 56,
-    176, 77, 49, 55, 185, 77, 49, 55, 184, 77, 49, 55, 183, 77, 49, 55, 182,
-    77, 49, 55, 181, 77, 49, 55, 180, 77, 49, 55, 179, 77, 49, 55, 178, 77,
-    49, 55, 177, 77, 49, 55, 176, 77, 49, 54, 185, 77, 49, 54, 184, 77, 49,
-    54, 183, 77, 49, 54, 182, 77, 49, 54, 181, 77, 49, 54, 180, 77, 49, 54,
-    179, 77, 49, 54, 178, 77, 49, 54, 177, 77, 49, 54, 176, 77, 49, 53, 185,
-    77, 49, 53, 184, 77, 49, 53, 183, 77, 49, 53, 182, 77, 49, 53, 181, 77,
-    49, 53, 180, 77, 49, 53, 179, 77, 49, 53, 178, 77, 49, 53, 177, 77, 49,
-    53, 176, 77, 49, 52, 185, 77, 49, 52, 184, 77, 49, 52, 183, 77, 49, 52,
-    182, 77, 49, 52, 181, 77, 49, 52, 180, 77, 49, 52, 179, 77, 49, 52, 178,
-    77, 49, 52, 177, 77, 49, 52, 176, 77, 49, 51, 185, 77, 49, 51, 184, 77,
-    49, 51, 183, 77, 49, 51, 182, 77, 49, 51, 181, 77, 49, 51, 180, 77, 49,
-    51, 179, 77, 49, 51, 178, 77, 49, 51, 177, 77, 49, 51, 176, 77, 49, 50,
-    185, 77, 49, 50, 184, 77, 49, 50, 183, 77, 49, 50, 182, 77, 49, 50, 181,
-    77, 49, 50, 180, 77, 49, 50, 179, 77, 49, 50, 178, 77, 49, 50, 177, 77,
-    49, 50, 176, 77, 49, 49, 185, 77, 49, 49, 184, 77, 49, 49, 183, 77, 49,
-    49, 182, 77, 49, 49, 181, 77, 49, 49, 180, 77, 49, 49, 179, 77, 49, 49,
-    178, 77, 49, 49, 177, 77, 49, 49, 176, 77, 49, 48, 185, 77, 49, 48, 184,
-    77, 49, 48, 183, 77, 49, 48, 182, 77, 49, 48, 181, 77, 49, 48, 180, 77,
-    49, 48, 179, 77, 49, 48, 178, 77, 49, 48, 177, 77, 49, 48, 176, 77, 48,
-    57, 185, 77, 48, 57, 184, 77, 48, 57, 183, 77, 48, 57, 182, 77, 48, 57,
-    181, 77, 48, 57, 180, 77, 48, 57, 179, 77, 48, 57, 178, 77, 48, 57, 177,
-    77, 48, 57, 176, 77, 48, 56, 185, 77, 48, 56, 184, 77, 48, 56, 183, 77,
-    48, 56, 182, 77, 48, 56, 181, 77, 48, 56, 180, 77, 48, 56, 179, 77, 48,
-    56, 178, 77, 48, 56, 177, 77, 48, 56, 176, 77, 48, 55, 185, 77, 48, 55,
-    184, 77, 48, 55, 183, 77, 48, 55, 182, 77, 48, 55, 181, 77, 48, 55, 180,
-    77, 48, 55, 179, 77, 48, 55, 178, 77, 48, 55, 177, 77, 48, 55, 176, 77,
-    48, 54, 185, 77, 48, 54, 184, 77, 48, 54, 183, 77, 48, 54, 182, 77, 48,
-    54, 181, 77, 48, 54, 180, 77, 48, 54, 179, 77, 48, 54, 178, 77, 48, 54,
-    177, 77, 48, 54, 176, 77, 48, 53, 185, 77, 48, 53, 184, 77, 48, 53, 183,
-    77, 48, 53, 182, 77, 48, 53, 181, 77, 48, 53, 180, 77, 48, 53, 179, 77,
-    48, 53, 178, 77, 48, 53, 177, 77, 48, 53, 176, 77, 48, 52, 185, 77, 48,
-    52, 184, 77, 48, 52, 183, 77, 48, 52, 182, 77, 48, 52, 181, 77, 48, 52,
-    52, 128, 77, 48, 52, 180, 77, 48, 52, 51, 128, 77, 48, 52, 179, 77, 48,
-    52, 50, 128, 77, 48, 52, 178, 77, 48, 52, 49, 128, 77, 48, 52, 177, 77,
-    48, 52, 48, 65, 128, 77, 48, 52, 48, 128, 77, 48, 52, 176, 77, 48, 51,
-    57, 128, 77, 48, 51, 185, 77, 48, 51, 56, 128, 77, 48, 51, 184, 77, 48,
-    51, 55, 128, 77, 48, 51, 183, 77, 48, 51, 54, 128, 77, 48, 51, 182, 77,
-    48, 51, 53, 128, 77, 48, 51, 181, 77, 48, 51, 52, 128, 77, 48, 51, 180,
-    77, 48, 51, 51, 66, 128, 77, 48, 51, 51, 65, 128, 77, 48, 51, 51, 128,
-    77, 48, 51, 179, 77, 48, 51, 50, 128, 77, 48, 51, 178, 77, 48, 51, 49,
-    65, 128, 77, 48, 51, 49, 128, 77, 48, 51, 177, 77, 48, 51, 48, 128, 77,
-    48, 51, 176, 77, 48, 50, 57, 128, 77, 48, 50, 185, 77, 48, 50, 56, 65,
-    128, 77, 48, 50, 56, 128, 77, 48, 50, 184, 77, 48, 50, 55, 128, 77, 48,
-    50, 183, 77, 48, 50, 54, 128, 77, 48, 50, 182, 77, 48, 50, 53, 128, 77,
-    48, 50, 181, 77, 48, 50, 52, 65, 128, 77, 48, 50, 52, 128, 77, 48, 50,
-    180, 77, 48, 50, 51, 128, 77, 48, 50, 179, 77, 48, 50, 50, 65, 128, 77,
-    48, 50, 50, 128, 77, 48, 50, 178, 77, 48, 50, 49, 128, 77, 48, 50, 177,
-    77, 48, 50, 48, 128, 77, 48, 50, 176, 77, 48, 49, 57, 128, 77, 48, 49,
-    185, 77, 48, 49, 56, 128, 77, 48, 49, 184, 77, 48, 49, 55, 65, 128, 77,
-    48, 49, 55, 128, 77, 48, 49, 183, 77, 48, 49, 54, 65, 128, 77, 48, 49,
-    54, 128, 77, 48, 49, 182, 77, 48, 49, 53, 65, 128, 77, 48, 49, 53, 128,
-    77, 48, 49, 181, 77, 48, 49, 52, 128, 77, 48, 49, 180, 77, 48, 49, 51,
-    128, 77, 48, 49, 179, 77, 48, 49, 50, 72, 128, 77, 48, 49, 50, 71, 128,
-    77, 48, 49, 50, 70, 128, 77, 48, 49, 50, 69, 128, 77, 48, 49, 50, 68,
-    128, 77, 48, 49, 50, 67, 128, 77, 48, 49, 50, 66, 128, 77, 48, 49, 50,
-    65, 128, 77, 48, 49, 50, 128, 77, 48, 49, 178, 77, 48, 49, 49, 128, 77,
-    48, 49, 177, 77, 48, 49, 48, 65, 128, 77, 48, 49, 48, 128, 77, 48, 49,
-    176, 77, 48, 48, 57, 128, 77, 48, 48, 185, 77, 48, 48, 56, 128, 77, 48,
-    48, 184, 77, 48, 48, 55, 128, 77, 48, 48, 183, 77, 48, 48, 54, 128, 77,
-    48, 48, 182, 77, 48, 48, 53, 128, 77, 48, 48, 181, 77, 48, 48, 52, 128,
-    77, 48, 48, 180, 77, 48, 48, 51, 65, 128, 77, 48, 48, 51, 128, 77, 48,
-    48, 179, 77, 48, 48, 50, 128, 77, 48, 48, 178, 77, 48, 48, 49, 66, 128,
-    77, 48, 48, 49, 65, 128, 77, 48, 48, 49, 128, 77, 48, 48, 177, 76, 218,
-    76, 89, 89, 128, 76, 89, 88, 128, 76, 89, 84, 128, 76, 89, 82, 88, 128,
-    76, 89, 82, 128, 76, 89, 80, 128, 76, 89, 73, 84, 128, 76, 89, 73, 78,
-    199, 76, 89, 68, 73, 65, 206, 76, 89, 67, 73, 65, 206, 76, 88, 128, 76,
-    87, 79, 79, 128, 76, 87, 79, 128, 76, 87, 73, 73, 128, 76, 87, 73, 128,
-    76, 87, 69, 128, 76, 87, 65, 65, 128, 76, 87, 65, 128, 76, 85, 88, 128,
-    76, 85, 85, 128, 76, 85, 84, 128, 76, 85, 82, 88, 128, 76, 85, 80, 128,
-    76, 85, 79, 88, 128, 76, 85, 79, 84, 128, 76, 85, 79, 80, 128, 76, 85,
-    79, 128, 76, 85, 78, 71, 83, 73, 128, 76, 85, 78, 65, 84, 197, 76, 85,
-    205, 76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, 128, 76,
-    85, 72, 128, 76, 85, 200, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, 71,
-    65, 76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, 85, 197, 76, 85,
-    66, 128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76,
-    85, 178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 73, 128, 76, 82, 69,
-    128, 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76,
-    79, 88, 128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, 69, 210, 76, 79,
-    87, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 76, 79, 87, 45, 77, 73,
-    196, 76, 79, 87, 45, 70, 65, 76, 76, 73, 78, 199, 76, 79, 87, 45, 185,
-    76, 79, 86, 197, 76, 79, 85, 82, 69, 128, 76, 79, 85, 68, 83, 80, 69, 65,
-    75, 69, 82, 128, 76, 79, 85, 68, 76, 217, 76, 79, 84, 85, 83, 128, 76,
-    79, 84, 85, 211, 76, 79, 84, 73, 79, 206, 76, 79, 84, 128, 76, 79, 83,
-    83, 76, 69, 83, 83, 128, 76, 79, 82, 82, 89, 128, 76, 79, 82, 82, 65, 73,
-    78, 69, 128, 76, 79, 81, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, 76,
-    79, 79, 80, 69, 196, 76, 79, 79, 80, 128, 76, 79, 79, 208, 76, 79, 79,
-    78, 128, 76, 79, 79, 203, 76, 79, 79, 128, 76, 79, 78, 83, 85, 77, 128,
-    76, 79, 78, 71, 65, 128, 76, 79, 78, 71, 193, 76, 79, 78, 71, 45, 76, 69,
-    71, 71, 69, 196, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 89, 82,
-    128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 83, 79, 204, 76, 79,
-    78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 79, 83, 211, 76, 79, 78, 71, 45,
-    66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, 76, 79, 78, 71, 45, 66, 82,
-    65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, 76, 79, 78, 71, 45, 66, 82,
-    65, 78, 67, 72, 45, 65, 210, 76, 79, 77, 77, 65, 69, 128, 76, 79, 77,
-    128, 76, 79, 205, 76, 79, 76, 76, 73, 80, 79, 80, 128, 76, 79, 76, 76,
-    128, 76, 79, 71, 210, 76, 79, 71, 79, 84, 89, 80, 197, 76, 79, 71, 79,
-    71, 82, 65, 205, 76, 79, 71, 128, 76, 79, 68, 69, 83, 84, 79, 78, 69,
-    128, 76, 79, 67, 79, 77, 79, 84, 73, 86, 69, 128, 76, 79, 67, 75, 73, 78,
-    71, 45, 83, 72, 73, 70, 212, 76, 79, 67, 203, 76, 79, 67, 65, 84, 73, 86,
-    69, 128, 76, 79, 67, 65, 84, 73, 79, 78, 45, 87, 65, 76, 76, 80, 76, 65,
-    78, 197, 76, 79, 67, 65, 84, 73, 79, 78, 45, 70, 76, 79, 79, 82, 80, 76,
-    65, 78, 197, 76, 79, 67, 65, 84, 73, 79, 78, 128, 76, 79, 67, 65, 84, 73,
-    79, 206, 76, 79, 66, 83, 84, 69, 82, 128, 76, 79, 65, 128, 76, 78, 128,
-    76, 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76, 76, 85, 85, 128, 76,
-    76, 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76, 76, 79, 128, 76, 76,
-    76, 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76, 69, 69, 128, 76, 76,
-    76, 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76, 65, 73, 128, 76, 76,
-    76, 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76, 128, 76, 76, 72, 65,
-    128, 76, 76, 65, 77, 65, 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 74,
-    69, 128, 76, 74, 128, 76, 73, 90, 65, 82, 68, 128, 76, 73, 88, 128, 76,
-    73, 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84, 84, 76, 69, 128, 76,
-    73, 84, 84, 76, 197, 76, 73, 84, 84, 69, 210, 76, 73, 84, 82, 193, 76,
-    73, 84, 200, 76, 73, 83, 213, 76, 73, 83, 128, 76, 73, 82, 193, 76, 73,
-    81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83, 84, 73, 67, 75, 128,
-    76, 73, 80, 211, 76, 73, 208, 76, 73, 78, 75, 73, 78, 199, 76, 73, 78,
-    75, 69, 196, 76, 73, 78, 203, 76, 73, 78, 71, 83, 65, 128, 76, 73, 78,
-    69, 83, 128, 76, 73, 78, 69, 211, 76, 73, 78, 69, 45, 57, 128, 76, 73,
-    78, 69, 45, 55, 128, 76, 73, 78, 69, 45, 51, 128, 76, 73, 78, 69, 45, 49,
-    128, 76, 73, 77, 77, 85, 52, 128, 76, 73, 77, 77, 85, 50, 128, 76, 73,
-    77, 77, 85, 128, 76, 73, 77, 77, 213, 76, 73, 77, 73, 84, 69, 196, 76,
-    73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, 73, 77, 73, 84, 128, 76, 73,
-    77, 69, 128, 76, 73, 77, 66, 213, 76, 73, 77, 66, 211, 76, 73, 77, 194,
-    76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, 128, 76,
-    73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72, 84, 78, 73, 78, 199,
-    76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73, 71, 72, 84, 128, 76,
-    73, 71, 65, 84, 73, 78, 199, 76, 73, 70, 84, 69, 82, 128, 76, 73, 70, 69,
-    128, 76, 73, 69, 88, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76,
-    73, 69, 69, 128, 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 67, 75, 73,
-    78, 199, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, 82, 84, 89, 128, 76,
-    73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, 128, 76, 72, 65, 86, 73,
-    89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, 65, 65, 128, 76, 72, 128,
-    76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, 86, 73, 84, 65, 84, 73, 78,
-    71, 128, 76, 69, 85, 77, 128, 76, 69, 85, 65, 69, 80, 128, 76, 69, 85,
-    65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, 76, 69, 84, 84, 69, 82,
-    83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, 212, 76, 69, 83, 83, 69,
-    210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, 76, 69, 83, 83, 45, 84, 72,
-    65, 206, 76, 69, 83, 72, 128, 76, 69, 80, 67, 72, 193, 76, 69, 80, 128,
-    76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, 76, 69, 78, 84, 73, 67,
-    85, 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, 78, 73, 211, 76, 69,
-    78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84, 72, 45, 55, 128,
-    76, 69, 78, 71, 84, 72, 45, 54, 128, 76, 69, 78, 71, 84, 72, 45, 53, 128,
-    76, 69, 78, 71, 84, 72, 45, 52, 128, 76, 69, 78, 71, 84, 72, 45, 51, 128,
-    76, 69, 78, 71, 84, 72, 45, 50, 128, 76, 69, 78, 71, 84, 72, 45, 49, 128,
-    76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, 76, 69, 78, 71, 193,
-    76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, 76, 69, 76, 69, 84,
-    128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, 77, 77, 65, 128, 76,
-    69, 73, 77, 77, 193, 76, 69, 73, 128, 76, 69, 71, 83, 128, 76, 69, 71,
-    73, 79, 78, 128, 76, 69, 71, 69, 84, 79, 211, 76, 69, 71, 128, 76, 69,
-    199, 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, 69, 70, 84, 45, 84, 79,
-    45, 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, 84, 69, 205, 76, 69, 70,
-    84, 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, 72, 65, 68, 69, 196, 76,
-    69, 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 76, 69, 70, 84, 45, 76,
-    73, 71, 72, 84, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 68, 69, 196, 76,
-    69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45, 70, 65, 67, 73, 78,
-    199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87, 65, 128, 76, 69,
-    69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, 71, 69, 82, 128, 76,
-    69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 70, 217, 76, 69, 65, 70, 128,
-    76, 69, 65, 198, 76, 69, 65, 68, 69, 82, 128, 76, 69, 65, 196, 76, 68,
-    65, 78, 128, 76, 68, 50, 128, 76, 67, 201, 76, 67, 197, 76, 65, 90, 217,
-    76, 65, 89, 65, 78, 78, 65, 128, 76, 65, 88, 128, 76, 65, 87, 128, 76,
-    65, 215, 76, 65, 85, 76, 65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 85,
-    74, 128, 76, 65, 85, 71, 72, 73, 78, 71, 128, 76, 65, 84, 73, 78, 65, 84,
-    197, 76, 65, 84, 73, 75, 128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84,
-    197, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82,
-    201, 76, 65, 82, 71, 69, 83, 84, 128, 76, 65, 82, 71, 69, 210, 76, 65,
-    82, 71, 69, 128, 76, 65, 82, 71, 197, 76, 65, 81, 128, 76, 65, 80, 65,
-    81, 128, 76, 65, 207, 76, 65, 78, 84, 69, 82, 78, 128, 76, 65, 78, 71,
-    85, 65, 71, 197, 76, 65, 78, 69, 83, 128, 76, 65, 78, 196, 76, 65, 78,
-    128, 76, 65, 77, 80, 128, 76, 65, 77, 69, 68, 72, 128, 76, 65, 77, 69,
-    68, 128, 76, 65, 77, 69, 196, 76, 65, 77, 69, 128, 76, 65, 77, 197, 76,
-    65, 77, 68, 65, 128, 76, 65, 77, 68, 128, 76, 65, 77, 66, 68, 193, 76,
-    65, 77, 65, 68, 72, 128, 76, 65, 76, 128, 76, 65, 204, 76, 65, 75, 75,
-    72, 65, 78, 71, 89, 65, 79, 128, 76, 65, 75, 72, 65, 78, 128, 76, 65, 75,
-    72, 128, 76, 65, 75, 200, 76, 65, 75, 45, 55, 52, 57, 128, 76, 65, 75,
-    45, 55, 50, 52, 128, 76, 65, 75, 45, 54, 54, 56, 128, 76, 65, 75, 45, 54,
-    52, 56, 128, 76, 65, 75, 45, 54, 52, 184, 76, 65, 75, 45, 54, 51, 54,
-    128, 76, 65, 75, 45, 54, 49, 55, 128, 76, 65, 75, 45, 54, 49, 183, 76,
-    65, 75, 45, 54, 48, 56, 128, 76, 65, 75, 45, 53, 53, 48, 128, 76, 65, 75,
-    45, 52, 57, 53, 128, 76, 65, 75, 45, 52, 57, 51, 128, 76, 65, 75, 45, 52,
-    57, 50, 128, 76, 65, 75, 45, 52, 57, 48, 128, 76, 65, 75, 45, 52, 56, 51,
-    128, 76, 65, 75, 45, 52, 55, 48, 128, 76, 65, 75, 45, 52, 53, 55, 128,
-    76, 65, 75, 45, 52, 53, 48, 128, 76, 65, 75, 45, 52, 52, 57, 128, 76, 65,
-    75, 45, 52, 52, 185, 76, 65, 75, 45, 52, 52, 49, 128, 76, 65, 75, 45, 51,
-    57, 48, 128, 76, 65, 75, 45, 51, 56, 52, 128, 76, 65, 75, 45, 51, 56, 51,
-    128, 76, 65, 75, 45, 51, 52, 56, 128, 76, 65, 75, 45, 51, 52, 55, 128,
-    76, 65, 75, 45, 51, 52, 51, 128, 76, 65, 75, 45, 50, 54, 54, 128, 76, 65,
-    75, 45, 50, 54, 53, 128, 76, 65, 75, 45, 50, 51, 56, 128, 76, 65, 75, 45,
-    50, 50, 56, 128, 76, 65, 75, 45, 50, 50, 53, 128, 76, 65, 75, 45, 50, 50,
-    48, 128, 76, 65, 75, 45, 50, 49, 57, 128, 76, 65, 75, 45, 50, 49, 48,
-    128, 76, 65, 75, 45, 49, 52, 50, 128, 76, 65, 75, 45, 49, 51, 48, 128,
-    76, 65, 75, 45, 48, 57, 50, 128, 76, 65, 75, 45, 48, 56, 49, 128, 76, 65,
-    75, 45, 48, 56, 177, 76, 65, 75, 45, 48, 56, 48, 128, 76, 65, 75, 45, 48,
-    55, 185, 76, 65, 75, 45, 48, 54, 50, 128, 76, 65, 75, 45, 48, 53, 49,
-    128, 76, 65, 75, 45, 48, 53, 48, 128, 76, 65, 75, 45, 48, 51, 48, 128,
-    76, 65, 75, 45, 48, 50, 53, 128, 76, 65, 75, 45, 48, 50, 49, 128, 76, 65,
-    75, 45, 48, 50, 48, 128, 76, 65, 75, 45, 48, 48, 51, 128, 76, 65, 74, 65,
-    78, 89, 65, 76, 65, 78, 128, 76, 65, 73, 78, 199, 76, 65, 201, 76, 65,
-    72, 83, 72, 85, 128, 76, 65, 72, 128, 76, 65, 71, 85, 83, 128, 76, 65,
-    71, 213, 76, 65, 71, 65, 82, 128, 76, 65, 71, 65, 210, 76, 65, 71, 65,
-    66, 128, 76, 65, 71, 65, 194, 76, 65, 69, 86, 128, 76, 65, 69, 128, 76,
-    65, 68, 217, 76, 65, 67, 82, 79, 83, 83, 197, 76, 65, 67, 75, 128, 76,
-    65, 67, 65, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, 128, 76, 65, 66, 79,
-    82, 128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, 79, 206, 76, 65, 66,
-    73, 65, 204, 76, 65, 66, 69, 76, 128, 76, 65, 66, 65, 84, 128, 76, 65,
-    194, 76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, 77,
-    85, 128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 54, 128, 76, 52,
-    128, 76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, 128, 76, 48, 48, 50,
-    65, 128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69, 196, 75,
-    89, 85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75, 89, 76,
-    73, 83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89, 65, 84,
-    72, 79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87, 73, 128,
-    75, 88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65, 65, 128,
-    75, 88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88, 73, 128,
-    75, 88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75, 88, 65,
-    128, 75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, 128,
-    75, 87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, 128, 75, 87, 73, 128,
-    75, 87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, 128, 75, 87, 65, 89,
-    128, 75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, 75, 86, 65, 128, 75,
-    86, 128, 75, 85, 90, 72, 73, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75,
-    85, 85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83,
-    72, 85, 50, 128, 75, 85, 83, 72, 85, 178, 75, 85, 82, 88, 128, 75, 85,
-    82, 85, 90, 69, 73, 82, 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79,
-    78, 69, 128, 75, 85, 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79,
-    88, 128, 75, 85, 79, 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75,
-    85, 79, 128, 75, 85, 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65,
+    196, 78, 69, 69, 68, 76, 69, 128, 78, 69, 67, 75, 84, 73, 69, 128, 78,
+    69, 67, 75, 128, 78, 69, 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 69,
+    45, 75, 79, 128, 78, 68, 85, 88, 128, 78, 68, 85, 84, 128, 78, 68, 85,
+    82, 88, 128, 78, 68, 85, 82, 128, 78, 68, 85, 80, 128, 78, 68, 85, 78,
+    128, 78, 68, 213, 78, 68, 79, 88, 128, 78, 68, 79, 84, 128, 78, 68, 79,
+    80, 128, 78, 68, 79, 79, 128, 78, 68, 79, 78, 128, 78, 68, 79, 77, 66,
+    85, 128, 78, 68, 79, 76, 197, 78, 68, 73, 88, 128, 78, 68, 73, 84, 128,
+    78, 68, 73, 81, 128, 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78,
+    68, 73, 69, 128, 78, 68, 73, 68, 65, 128, 78, 68, 73, 65, 81, 128, 78,
+    68, 69, 88, 128, 78, 68, 69, 85, 88, 128, 78, 68, 69, 85, 84, 128, 78,
+    68, 69, 85, 65, 69, 82, 69, 69, 128, 78, 68, 69, 80, 128, 78, 68, 69, 69,
+    128, 78, 68, 69, 128, 78, 68, 65, 88, 128, 78, 68, 65, 84, 128, 78, 68,
+    65, 80, 128, 78, 68, 65, 77, 128, 78, 68, 65, 65, 78, 71, 71, 69, 85, 65,
+    69, 84, 128, 78, 68, 65, 65, 128, 78, 68, 65, 193, 78, 67, 72, 65, 85,
+    128, 78, 67, 65, 128, 78, 66, 89, 88, 128, 78, 66, 89, 84, 128, 78, 66,
+    89, 82, 88, 128, 78, 66, 89, 82, 128, 78, 66, 89, 80, 128, 78, 66, 89,
+    128, 78, 66, 85, 88, 128, 78, 66, 85, 84, 128, 78, 66, 85, 82, 88, 128,
+    78, 66, 85, 82, 128, 78, 66, 85, 80, 128, 78, 66, 85, 128, 78, 66, 79,
+    88, 128, 78, 66, 79, 84, 128, 78, 66, 79, 80, 128, 78, 66, 79, 128, 78,
+    66, 73, 88, 128, 78, 66, 73, 84, 128, 78, 66, 73, 80, 128, 78, 66, 73,
+    69, 88, 128, 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 128, 78, 66, 73,
+    128, 78, 66, 72, 128, 78, 66, 65, 88, 128, 78, 66, 65, 84, 128, 78, 66,
+    65, 80, 128, 78, 66, 65, 128, 78, 65, 90, 65, 210, 78, 65, 89, 65, 78,
+    78, 65, 128, 78, 65, 89, 128, 78, 65, 88, 73, 65, 206, 78, 65, 88, 128,
+    78, 65, 85, 84, 72, 83, 128, 78, 65, 85, 83, 69, 65, 84, 69, 196, 78, 65,
+    85, 68, 73, 218, 78, 65, 84, 85, 82, 65, 204, 78, 65, 84, 73, 79, 78, 65,
+    204, 78, 65, 83, 75, 65, 80, 201, 78, 65, 83, 72, 73, 128, 78, 65, 83,
+    65, 76, 73, 90, 65, 84, 73, 79, 78, 128, 78, 65, 83, 65, 76, 73, 90, 65,
+    84, 73, 79, 206, 78, 65, 83, 65, 204, 78, 65, 82, 82, 79, 215, 78, 65,
+    82, 128, 78, 65, 81, 128, 78, 65, 79, 211, 78, 65, 78, 83, 65, 78, 65,
+    81, 128, 78, 65, 78, 71, 77, 79, 78, 84, 72, 79, 128, 78, 65, 78, 68, 73,
+    78, 65, 71, 65, 82, 201, 78, 65, 78, 68, 128, 78, 65, 78, 65, 128, 78,
+    65, 77, 69, 128, 78, 65, 77, 197, 78, 65, 77, 50, 128, 78, 65, 75, 128,
+    78, 65, 73, 82, 193, 78, 65, 73, 204, 78, 65, 71, 82, 201, 78, 65, 71,
+    65, 82, 128, 78, 65, 71, 65, 128, 78, 65, 71, 193, 78, 65, 71, 128, 78,
+    65, 199, 78, 65, 69, 128, 78, 65, 66, 76, 65, 128, 78, 65, 66, 65, 84,
+    65, 69, 65, 206, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65,
+    75, 83, 73, 75, 89, 65, 89, 65, 128, 78, 65, 65, 73, 128, 78, 65, 193,
+    78, 65, 52, 128, 78, 65, 50, 128, 78, 65, 45, 57, 128, 78, 65, 45, 56,
+    128, 78, 65, 45, 55, 128, 78, 65, 45, 54, 128, 78, 65, 45, 53, 128, 78,
+    65, 45, 52, 128, 78, 65, 45, 51, 128, 78, 65, 45, 50, 128, 78, 65, 45,
+    49, 128, 78, 48, 52, 50, 128, 78, 48, 52, 49, 128, 78, 48, 52, 48, 128,
+    78, 48, 51, 57, 128, 78, 48, 51, 56, 128, 78, 48, 51, 55, 65, 128, 78,
+    48, 51, 55, 128, 78, 48, 51, 54, 128, 78, 48, 51, 53, 65, 128, 78, 48,
+    51, 53, 128, 78, 48, 51, 52, 65, 128, 78, 48, 51, 52, 128, 78, 48, 51,
+    51, 65, 128, 78, 48, 51, 51, 128, 78, 48, 51, 50, 128, 78, 48, 51, 49,
+    128, 78, 48, 51, 48, 128, 78, 48, 50, 57, 128, 78, 48, 50, 56, 128, 78,
+    48, 50, 55, 128, 78, 48, 50, 54, 128, 78, 48, 50, 53, 65, 128, 78, 48,
+    50, 53, 128, 78, 48, 50, 52, 128, 78, 48, 50, 51, 128, 78, 48, 50, 50,
+    128, 78, 48, 50, 49, 128, 78, 48, 50, 48, 128, 78, 48, 49, 57, 128, 78,
+    48, 49, 56, 66, 128, 78, 48, 49, 56, 65, 128, 78, 48, 49, 56, 128, 78,
+    48, 49, 55, 128, 78, 48, 49, 54, 128, 78, 48, 49, 53, 128, 78, 48, 49,
+    52, 128, 78, 48, 49, 51, 128, 78, 48, 49, 50, 128, 78, 48, 49, 49, 128,
+    78, 48, 49, 48, 128, 78, 48, 48, 57, 128, 78, 48, 48, 56, 128, 78, 48,
+    48, 55, 128, 78, 48, 48, 54, 128, 78, 48, 48, 53, 128, 78, 48, 48, 52,
+    128, 78, 48, 48, 51, 128, 78, 48, 48, 50, 128, 78, 48, 48, 49, 128, 78,
+    45, 77, 85, 45, 77, 79, 45, 50, 128, 78, 45, 77, 85, 45, 77, 79, 45, 49,
+    128, 78, 45, 67, 82, 69, 197, 78, 45, 65, 82, 217, 77, 89, 88, 128, 77,
+    89, 84, 128, 77, 89, 83, 76, 73, 84, 69, 128, 77, 89, 80, 128, 77, 89,
+    65, 128, 77, 89, 193, 77, 89, 128, 77, 87, 79, 79, 128, 77, 87, 79, 128,
+    77, 87, 73, 73, 128, 77, 87, 73, 128, 77, 87, 69, 69, 128, 77, 87, 69,
+    128, 77, 87, 65, 65, 128, 77, 87, 65, 128, 77, 87, 128, 77, 215, 77, 86,
+    83, 128, 77, 86, 79, 80, 128, 77, 86, 73, 128, 77, 86, 69, 85, 65, 69,
+    78, 71, 65, 77, 128, 77, 86, 128, 77, 214, 77, 85, 88, 128, 77, 85, 85,
+    86, 85, 90, 72, 65, 75, 75, 85, 128, 77, 85, 85, 83, 73, 75, 65, 84, 79,
+    65, 78, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 77, 85, 85, 128, 77,
+    85, 84, 72, 65, 76, 73, 89, 65, 128, 77, 85, 84, 128, 77, 85, 83, 73, 67,
+    128, 77, 85, 83, 73, 195, 77, 85, 83, 72, 82, 79, 79, 77, 128, 77, 85,
+    83, 72, 51, 128, 77, 85, 83, 72, 179, 77, 85, 83, 72, 128, 77, 85, 83,
+    200, 77, 85, 83, 128, 77, 85, 82, 88, 128, 77, 85, 82, 71, 85, 50, 128,
+    77, 85, 82, 69, 128, 77, 85, 82, 68, 65, 128, 77, 85, 82, 68, 193, 77,
+    85, 82, 128, 77, 85, 81, 68, 65, 77, 128, 77, 85, 80, 128, 77, 85, 79,
+    88, 128, 77, 85, 79, 84, 128, 77, 85, 79, 80, 128, 77, 85, 79, 77, 65,
+    69, 128, 77, 85, 79, 128, 77, 85, 78, 83, 85, 66, 128, 77, 85, 78, 65,
+    72, 128, 77, 85, 78, 128, 77, 85, 76, 84, 73, 83, 69, 84, 128, 77, 85,
+    76, 84, 73, 83, 69, 212, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73,
+    79, 78, 128, 77, 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 206, 77,
+    85, 76, 84, 73, 80, 76, 69, 128, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85,
+    76, 84, 73, 79, 67, 85, 76, 65, 210, 77, 85, 76, 84, 73, 77, 65, 80, 128,
+    77, 85, 76, 84, 201, 77, 85, 76, 84, 65, 78, 201, 77, 85, 75, 80, 72, 82,
+    69, 78, 71, 128, 77, 85, 75, 75, 85, 82, 85, 78, 73, 128, 77, 85, 73, 78,
+    128, 77, 85, 71, 83, 128, 77, 85, 71, 128, 77, 85, 199, 77, 85, 69, 78,
+    128, 77, 85, 69, 128, 77, 85, 67, 72, 128, 77, 85, 67, 200, 77, 85, 67,
+    65, 65, 68, 128, 77, 85, 65, 83, 128, 77, 85, 65, 78, 128, 77, 85, 65,
+    69, 128, 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 85, 45, 52, 128,
+    77, 85, 45, 51, 128, 77, 85, 45, 50, 128, 77, 85, 45, 49, 128, 77, 213,
+    77, 84, 65, 86, 82, 85, 76, 201, 77, 83, 128, 77, 82, 207, 77, 210, 77,
+    80, 65, 128, 77, 79, 89, 65, 73, 128, 77, 79, 88, 128, 77, 79, 86, 73,
+    197, 77, 79, 86, 69, 211, 77, 79, 86, 69, 77, 69, 78, 84, 45, 87, 65, 76,
+    76, 80, 76, 65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 72, 73, 78,
+    71, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 70, 76, 79, 79, 82, 80, 76,
+    65, 78, 197, 77, 79, 86, 69, 77, 69, 78, 84, 45, 68, 73, 65, 71, 79, 78,
+    65, 204, 77, 79, 86, 69, 77, 69, 78, 84, 128, 77, 79, 86, 69, 77, 69, 78,
+    212, 77, 79, 86, 69, 196, 77, 79, 86, 69, 128, 77, 79, 85, 84, 72, 128,
+    77, 79, 85, 83, 69, 128, 77, 79, 85, 83, 197, 77, 79, 85, 78, 84, 65, 73,
+    78, 83, 128, 77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 79, 85, 78, 84, 65,
+    73, 206, 77, 79, 85, 78, 212, 77, 79, 85, 78, 68, 128, 77, 79, 85, 78,
+    196, 77, 79, 84, 79, 82, 87, 65, 89, 128, 77, 79, 84, 79, 82, 73, 90, 69,
+    196, 77, 79, 84, 79, 82, 67, 89, 67, 76, 69, 128, 77, 79, 84, 79, 210,
+    77, 79, 84, 72, 69, 82, 128, 77, 79, 84, 72, 69, 210, 77, 79, 84, 128,
+    77, 79, 83, 81, 85, 73, 84, 79, 128, 77, 79, 83, 81, 85, 69, 128, 77, 79,
+    82, 84, 85, 85, 77, 128, 77, 79, 82, 84, 65, 82, 128, 77, 79, 82, 80, 72,
+    79, 76, 79, 71, 73, 67, 65, 204, 77, 79, 82, 78, 73, 78, 71, 128, 77, 79,
+    80, 128, 77, 79, 79, 83, 69, 45, 67, 82, 69, 197, 77, 79, 79, 78, 128,
+    77, 79, 79, 206, 77, 79, 79, 77, 80, 85, 81, 128, 77, 79, 79, 77, 69, 85,
+    84, 128, 77, 79, 79, 68, 128, 77, 79, 79, 196, 77, 79, 79, 128, 77, 79,
+    78, 84, 73, 69, 69, 78, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84,
+    200, 77, 79, 78, 83, 84, 69, 82, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76,
+    197, 77, 79, 78, 79, 83, 80, 65, 67, 197, 77, 79, 78, 79, 82, 65, 73, 76,
+    128, 77, 79, 78, 79, 71, 82, 65, 80, 200, 77, 79, 78, 79, 71, 82, 65, 77,
+    77, 79, 211, 77, 79, 78, 79, 71, 82, 65, 205, 77, 79, 78, 79, 70, 79, 78,
+    73, 65, 83, 128, 77, 79, 78, 79, 67, 85, 76, 65, 210, 77, 79, 78, 79, 67,
+    76, 69, 128, 77, 79, 78, 75, 69, 89, 128, 77, 79, 78, 75, 69, 217, 77,
+    79, 78, 73, 128, 77, 79, 78, 71, 75, 69, 85, 65, 69, 81, 128, 77, 79, 78,
+    69, 89, 45, 77, 79, 85, 84, 200, 77, 79, 78, 69, 217, 77, 79, 78, 128,
+    77, 79, 206, 77, 79, 76, 128, 77, 79, 72, 65, 77, 77, 65, 196, 77, 79,
+    68, 85, 76, 207, 77, 79, 68, 73, 70, 73, 69, 82, 45, 57, 128, 77, 79, 68,
+    73, 70, 73, 69, 82, 45, 56, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 55,
+    128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 54, 128, 77, 79, 68, 73, 70, 73,
+    69, 82, 45, 53, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 52, 128, 77, 79,
+    68, 73, 70, 73, 69, 82, 45, 51, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45,
+    50, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 54, 128, 77, 79, 68, 73,
+    70, 73, 69, 82, 45, 49, 53, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49,
+    52, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 51, 128, 77, 79, 68, 73,
+    70, 73, 69, 82, 45, 49, 50, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49,
+    49, 128, 77, 79, 68, 73, 70, 73, 69, 82, 45, 49, 48, 128, 77, 79, 68, 73,
+    70, 73, 69, 82, 128, 77, 79, 68, 201, 77, 79, 68, 69, 83, 84, 89, 128,
+    77, 79, 68, 69, 82, 206, 77, 79, 68, 69, 77, 128, 77, 79, 68, 69, 76, 83,
+    128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 69, 128, 77, 79, 66, 73, 76,
+    197, 77, 79, 65, 128, 77, 79, 45, 54, 128, 77, 79, 45, 53, 128, 77, 79,
+    45, 52, 128, 77, 79, 45, 51, 128, 77, 207, 77, 78, 89, 65, 205, 77, 78,
+    65, 83, 128, 77, 77, 83, 80, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128,
+    77, 76, 128, 77, 75, 80, 65, 82, 65, 209, 77, 73, 88, 128, 77, 73, 84,
+    128, 77, 73, 83, 82, 65, 128, 77, 73, 82, 82, 79, 82, 128, 77, 73, 82,
+    73, 66, 65, 65, 82, 85, 128, 77, 73, 82, 73, 128, 77, 73, 82, 69, 68,
+    128, 77, 73, 80, 128, 77, 73, 78, 89, 128, 77, 73, 78, 85, 83, 45, 79,
+    82, 45, 80, 76, 85, 211, 77, 73, 78, 85, 83, 128, 77, 73, 78, 73, 83, 84,
+    69, 82, 128, 77, 73, 78, 73, 77, 73, 90, 69, 128, 77, 73, 78, 73, 77, 65,
+    128, 77, 73, 78, 73, 68, 73, 83, 67, 128, 77, 73, 78, 73, 66, 85, 83,
+    128, 77, 73, 77, 69, 128, 77, 73, 77, 128, 77, 73, 76, 76, 73, 79, 78,
+    83, 128, 77, 73, 76, 76, 73, 79, 78, 211, 77, 73, 76, 76, 69, 84, 128,
+    77, 73, 76, 76, 197, 77, 73, 76, 204, 77, 73, 76, 75, 217, 77, 73, 76,
+    75, 128, 77, 73, 76, 73, 84, 65, 82, 217, 77, 73, 76, 128, 77, 73, 75,
+    85, 82, 79, 78, 128, 77, 73, 75, 82, 79, 206, 77, 73, 75, 82, 73, 128,
+    77, 73, 73, 78, 128, 77, 73, 73, 77, 128, 77, 73, 73, 128, 77, 73, 199,
+    77, 73, 69, 88, 128, 77, 73, 69, 85, 77, 45, 84, 73, 75, 69, 85, 84, 128,
+    77, 73, 69, 85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73,
+    69, 85, 77, 45, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 77, 73, 69,
+    85, 77, 45, 82, 73, 69, 85, 76, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69,
+    85, 80, 45, 83, 73, 79, 83, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85,
+    80, 128, 77, 73, 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 77, 73,
+    69, 85, 77, 45, 78, 73, 69, 85, 78, 128, 77, 73, 69, 85, 77, 45, 67, 73,
+    69, 85, 67, 128, 77, 73, 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72, 128,
+    77, 73, 69, 85, 205, 77, 73, 69, 80, 128, 77, 73, 69, 69, 128, 77, 73,
+    69, 128, 77, 73, 68, 76, 73, 78, 197, 77, 73, 68, 68, 76, 69, 45, 87, 69,
+    76, 83, 200, 77, 73, 68, 68, 76, 69, 128, 77, 73, 68, 45, 76, 69, 86, 69,
+    204, 77, 73, 196, 77, 73, 67, 82, 79, 83, 67, 79, 80, 69, 128, 77, 73,
+    67, 82, 79, 80, 72, 79, 78, 69, 128, 77, 73, 67, 82, 79, 66, 69, 128, 77,
+    73, 67, 82, 207, 77, 73, 67, 210, 77, 73, 45, 55, 128, 77, 73, 45, 54,
+    128, 77, 73, 45, 53, 128, 77, 73, 45, 52, 128, 77, 73, 45, 51, 128, 77,
+    73, 45, 50, 128, 77, 73, 45, 49, 128, 77, 72, 90, 128, 77, 72, 65, 128,
+    77, 72, 128, 77, 71, 85, 88, 128, 77, 71, 85, 84, 128, 77, 71, 85, 82,
+    88, 128, 77, 71, 85, 82, 128, 77, 71, 85, 80, 128, 77, 71, 85, 79, 88,
+    128, 77, 71, 85, 79, 80, 128, 77, 71, 85, 79, 128, 77, 71, 85, 128, 77,
+    71, 79, 88, 128, 77, 71, 79, 84, 128, 77, 71, 79, 80, 128, 77, 71, 79,
+    128, 77, 71, 207, 77, 71, 73, 69, 88, 128, 77, 71, 73, 69, 128, 77, 71,
+    69, 88, 128, 77, 71, 69, 80, 128, 77, 71, 69, 128, 77, 71, 66, 85, 128,
+    77, 71, 66, 79, 79, 128, 77, 71, 66, 79, 70, 85, 77, 128, 77, 71, 66, 79,
+    128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 85, 78, 128, 77, 71, 66, 69,
+    78, 128, 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 65,
+    83, 65, 81, 128, 77, 71, 66, 65, 83, 65, 128, 77, 71, 65, 88, 128, 77,
+    71, 65, 84, 128, 77, 71, 65, 80, 128, 77, 71, 65, 128, 77, 71, 128, 77,
+    70, 79, 78, 128, 77, 70, 79, 206, 77, 70, 79, 128, 77, 70, 73, 89, 65,
+    81, 128, 77, 70, 73, 69, 69, 128, 77, 70, 69, 85, 84, 128, 77, 70, 69,
+    85, 81, 128, 77, 70, 69, 85, 65, 69, 128, 77, 70, 65, 65, 128, 77, 69,
+    90, 90, 79, 128, 77, 69, 88, 128, 77, 69, 85, 212, 77, 69, 85, 81, 128,
+    77, 69, 85, 78, 74, 79, 77, 78, 68, 69, 85, 81, 128, 77, 69, 85, 78, 128,
+    77, 69, 84, 82, 79, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 69, 84, 82,
+    73, 65, 128, 77, 69, 84, 82, 69, 84, 69, 211, 77, 69, 84, 79, 66, 69, 76,
+    85, 83, 128, 77, 69, 84, 69, 75, 128, 77, 69, 84, 69, 71, 128, 77, 69,
+    84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206,
+    77, 69, 83, 83, 65, 71, 69, 128, 77, 69, 83, 83, 65, 71, 197, 77, 69, 83,
+    79, 128, 77, 69, 83, 73, 128, 77, 69, 83, 72, 128, 77, 69, 82, 80, 69,
+    82, 83, 79, 78, 128, 77, 69, 82, 75, 72, 65, 128, 77, 69, 82, 75, 72,
+    193, 77, 69, 82, 73, 68, 73, 65, 78, 83, 128, 77, 69, 82, 73, 128, 77,
+    69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, 69, 82, 67, 85,
+    82, 217, 77, 69, 78, 79, 82, 65, 200, 77, 69, 78, 79, 69, 128, 77, 69,
+    78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 77, 79, 128, 77, 69, 77,
+    66, 69, 82, 83, 72, 73, 80, 128, 77, 69, 77, 66, 69, 82, 128, 77, 69, 77,
+    66, 69, 210, 77, 69, 77, 45, 81, 79, 80, 72, 128, 77, 69, 77, 128, 77,
+    69, 205, 77, 69, 76, 79, 68, 73, 195, 77, 69, 76, 73, 75, 128, 77, 69,
+    73, 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 71, 65, 80, 72,
+    79, 78, 69, 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 69, 84, 79, 82, 85,
+    128, 77, 69, 69, 84, 69, 201, 77, 69, 69, 84, 128, 77, 69, 69, 77, 85,
+    128, 77, 69, 69, 77, 128, 77, 69, 69, 202, 77, 69, 69, 69, 69, 128, 77,
+    69, 68, 73, 85, 77, 128, 77, 69, 68, 73, 85, 205, 77, 69, 68, 73, 69, 86,
+    65, 204, 77, 69, 68, 73, 67, 73, 78, 69, 128, 77, 69, 68, 73, 67, 65,
+    204, 77, 69, 68, 73, 65, 204, 77, 69, 68, 69, 70, 65, 73, 68, 82, 73,
+    206, 77, 69, 68, 65, 76, 128, 77, 69, 67, 72, 65, 78, 73, 67, 65, 204,
+    77, 69, 65, 84, 128, 77, 69, 65, 212, 77, 69, 65, 83, 85, 82, 69, 196,
+    77, 69, 65, 83, 85, 82, 69, 128, 77, 69, 65, 83, 85, 82, 197, 77, 69, 45,
+    77, 65, 128, 77, 69, 45, 50, 128, 77, 69, 45, 49, 128, 77, 68, 85, 206,
+    77, 196, 77, 67, 72, 213, 77, 67, 72, 65, 206, 77, 195, 77, 66, 85, 85,
+    128, 77, 66, 85, 79, 81, 128, 77, 66, 85, 79, 128, 77, 66, 85, 69, 128,
+    77, 66, 85, 65, 69, 77, 128, 77, 66, 85, 65, 69, 128, 77, 66, 79, 79,
+    128, 77, 66, 79, 128, 77, 66, 73, 84, 128, 77, 66, 73, 212, 77, 66, 73,
+    82, 73, 69, 69, 78, 128, 77, 66, 73, 128, 77, 66, 69, 85, 88, 128, 77,
+    66, 69, 85, 82, 73, 128, 77, 66, 69, 85, 77, 128, 77, 66, 69, 82, 65, 69,
+    128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 75, 69, 69, 84, 128, 77, 66,
+    69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 81, 128, 77, 66, 65, 78, 89,
+    73, 128, 77, 66, 65, 65, 82, 65, 69, 128, 77, 66, 65, 65, 75, 69, 84,
+    128, 77, 66, 65, 65, 128, 77, 66, 65, 193, 77, 66, 193, 77, 66, 52, 128,
+    77, 66, 51, 128, 77, 66, 50, 128, 77, 65, 89, 69, 203, 77, 65, 89, 65,
+    78, 78, 65, 128, 77, 65, 89, 65, 206, 77, 65, 89, 128, 77, 65, 88, 73,
+    77, 73, 90, 69, 128, 77, 65, 88, 73, 77, 65, 128, 77, 65, 88, 128, 77,
+    65, 85, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 84, 82, 73, 88,
+    128, 77, 65, 84, 69, 82, 73, 65, 76, 83, 128, 77, 65, 84, 128, 77, 65,
+    83, 213, 77, 65, 83, 83, 73, 78, 71, 128, 77, 65, 83, 83, 65, 71, 69,
+    128, 77, 65, 83, 79, 82, 193, 77, 65, 83, 75, 128, 77, 65, 83, 203, 77,
+    65, 83, 72, 70, 65, 65, 84, 128, 77, 65, 83, 72, 50, 128, 77, 65, 83, 67,
+    85, 76, 73, 78, 197, 77, 65, 83, 65, 82, 65, 205, 77, 65, 82, 89, 128,
+    77, 65, 82, 87, 65, 82, 201, 77, 65, 82, 85, 75, 85, 128, 77, 65, 82, 84,
+    89, 82, 73, 193, 77, 65, 82, 84, 73, 65, 204, 77, 65, 82, 82, 89, 73, 78,
+    199, 77, 65, 82, 82, 73, 65, 71, 197, 77, 65, 82, 82, 65, 84, 65, 78,
+    128, 77, 65, 82, 75, 211, 77, 65, 82, 75, 69, 82, 128, 77, 65, 82, 75,
+    45, 52, 128, 77, 65, 82, 75, 45, 51, 128, 77, 65, 82, 75, 45, 50, 128,
+    77, 65, 82, 75, 45, 49, 128, 77, 65, 82, 69, 128, 77, 65, 82, 67, 72, 69,
+    206, 77, 65, 82, 67, 72, 128, 77, 65, 82, 67, 65, 84, 79, 45, 83, 84, 65,
+    67, 67, 65, 84, 79, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, 82, 67,
+    65, 83, 73, 84, 69, 128, 77, 65, 82, 66, 85, 84, 65, 128, 77, 65, 82, 66,
+    85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, 128, 77, 65, 81, 128,
+    77, 65, 80, 76, 197, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 79,
+    128, 77, 65, 78, 85, 65, 204, 77, 65, 78, 84, 69, 76, 80, 73, 69, 67,
+    197, 77, 65, 78, 83, 89, 79, 78, 128, 77, 65, 78, 83, 85, 65, 69, 128,
+    77, 65, 78, 78, 65, 218, 77, 65, 78, 78, 65, 128, 77, 65, 78, 73, 67, 72,
+    65, 69, 65, 206, 77, 65, 78, 71, 79, 128, 77, 65, 78, 71, 65, 76, 65, 77,
+    128, 77, 65, 78, 68, 65, 82, 73, 78, 128, 77, 65, 78, 68, 65, 73, 76, 73,
+    78, 199, 77, 65, 78, 68, 65, 73, 195, 77, 65, 78, 67, 72, 213, 77, 65,
+    78, 65, 212, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 77, 77, 79, 84,
+    72, 128, 77, 65, 76, 84, 69, 83, 197, 77, 65, 76, 69, 69, 82, 73, 128,
+    77, 65, 76, 197, 77, 65, 76, 65, 75, 79, 206, 77, 65, 75, 83, 85, 82, 65,
+    128, 77, 65, 75, 83, 85, 82, 193, 77, 65, 75, 65, 83, 65, 210, 77, 65,
+    73, 90, 69, 128, 77, 65, 73, 89, 65, 77, 79, 75, 128, 77, 65, 73, 84, 65,
+    73, 75, 72, 85, 128, 77, 65, 73, 82, 85, 128, 77, 65, 73, 77, 85, 65, 78,
+    128, 77, 65, 73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 76, 66, 79, 216,
+    77, 65, 73, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 128, 77, 65, 73,
+    128, 77, 65, 72, 74, 79, 78, 199, 77, 65, 72, 72, 65, 128, 77, 65, 72,
+    65, 80, 82, 65, 78, 65, 128, 77, 65, 72, 65, 80, 65, 75, 72, 128, 77, 65,
+    72, 65, 74, 65, 78, 201, 77, 65, 72, 65, 65, 80, 82, 65, 65, 78, 193, 77,
+    65, 72, 128, 77, 65, 71, 78, 73, 70, 89, 73, 78, 199, 77, 65, 71, 78, 69,
+    84, 128, 77, 65, 71, 73, 195, 77, 65, 71, 69, 128, 77, 65, 69, 83, 73,
+    128, 77, 65, 69, 78, 89, 73, 128, 77, 65, 69, 78, 74, 69, 84, 128, 77,
+    65, 69, 77, 86, 69, 85, 88, 128, 77, 65, 69, 77, 75, 80, 69, 78, 128, 77,
+    65, 69, 77, 71, 66, 73, 69, 69, 128, 77, 65, 69, 77, 66, 71, 66, 73, 69,
+    69, 128, 77, 65, 69, 77, 66, 65, 128, 77, 65, 69, 77, 128, 77, 65, 69,
+    76, 69, 69, 128, 77, 65, 69, 75, 69, 85, 80, 128, 77, 65, 68, 89, 65,
+    128, 77, 65, 68, 85, 128, 77, 65, 68, 68, 65, 72, 128, 77, 65, 68, 68,
+    65, 200, 77, 65, 68, 68, 65, 128, 77, 65, 68, 68, 193, 77, 65, 67, 82,
+    79, 78, 45, 71, 82, 65, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 66, 82,
+    69, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 65, 67, 85, 84, 69, 128, 77,
+    65, 67, 82, 79, 78, 128, 77, 65, 67, 82, 79, 206, 77, 65, 67, 72, 73, 78,
+    69, 128, 77, 65, 65, 89, 89, 65, 65, 128, 77, 65, 65, 73, 128, 77, 65,
+    65, 128, 77, 65, 50, 128, 77, 65, 45, 55, 128, 77, 65, 45, 54, 128, 77,
+    65, 45, 53, 128, 77, 65, 45, 52, 128, 77, 65, 45, 51, 128, 77, 65, 45,
+    50, 128, 77, 65, 45, 49, 128, 77, 49, 57, 183, 77, 49, 57, 182, 77, 49,
+    57, 181, 77, 49, 57, 180, 77, 49, 57, 179, 77, 49, 57, 178, 77, 49, 57,
+    177, 77, 49, 57, 176, 77, 49, 56, 185, 77, 49, 56, 184, 77, 49, 56, 183,
+    77, 49, 56, 182, 77, 49, 56, 181, 77, 49, 56, 180, 77, 49, 56, 179, 77,
+    49, 56, 178, 77, 49, 56, 177, 77, 49, 56, 176, 77, 49, 55, 185, 77, 49,
+    55, 184, 77, 49, 55, 183, 77, 49, 55, 182, 77, 49, 55, 181, 77, 49, 55,
+    180, 77, 49, 55, 179, 77, 49, 55, 178, 77, 49, 55, 177, 77, 49, 55, 176,
+    77, 49, 54, 185, 77, 49, 54, 184, 77, 49, 54, 183, 77, 49, 54, 182, 77,
+    49, 54, 181, 77, 49, 54, 180, 77, 49, 54, 179, 77, 49, 54, 178, 77, 49,
+    54, 177, 77, 49, 54, 176, 77, 49, 53, 185, 77, 49, 53, 184, 77, 49, 53,
+    183, 77, 49, 53, 182, 77, 49, 53, 181, 77, 49, 53, 180, 77, 49, 53, 179,
+    77, 49, 53, 178, 77, 49, 53, 177, 77, 49, 53, 176, 77, 49, 52, 185, 77,
+    49, 52, 184, 77, 49, 52, 183, 77, 49, 52, 182, 77, 49, 52, 181, 77, 49,
+    52, 180, 77, 49, 52, 179, 77, 49, 52, 178, 77, 49, 52, 177, 77, 49, 52,
+    176, 77, 49, 51, 185, 77, 49, 51, 184, 77, 49, 51, 183, 77, 49, 51, 182,
+    77, 49, 51, 181, 77, 49, 51, 180, 77, 49, 51, 179, 77, 49, 51, 178, 77,
+    49, 51, 177, 77, 49, 51, 176, 77, 49, 50, 185, 77, 49, 50, 184, 77, 49,
+    50, 183, 77, 49, 50, 182, 77, 49, 50, 181, 77, 49, 50, 180, 77, 49, 50,
+    179, 77, 49, 50, 178, 77, 49, 50, 177, 77, 49, 50, 176, 77, 49, 49, 185,
+    77, 49, 49, 184, 77, 49, 49, 183, 77, 49, 49, 182, 77, 49, 49, 181, 77,
+    49, 49, 180, 77, 49, 49, 179, 77, 49, 49, 178, 77, 49, 49, 177, 77, 49,
+    49, 176, 77, 49, 48, 185, 77, 49, 48, 184, 77, 49, 48, 183, 77, 49, 48,
+    182, 77, 49, 48, 181, 77, 49, 48, 180, 77, 49, 48, 179, 77, 49, 48, 178,
+    77, 49, 48, 177, 77, 49, 48, 176, 77, 48, 57, 185, 77, 48, 57, 184, 77,
+    48, 57, 183, 77, 48, 57, 182, 77, 48, 57, 181, 77, 48, 57, 180, 77, 48,
+    57, 179, 77, 48, 57, 178, 77, 48, 57, 177, 77, 48, 57, 176, 77, 48, 56,
+    185, 77, 48, 56, 184, 77, 48, 56, 183, 77, 48, 56, 182, 77, 48, 56, 181,
+    77, 48, 56, 180, 77, 48, 56, 179, 77, 48, 56, 178, 77, 48, 56, 177, 77,
+    48, 56, 176, 77, 48, 55, 185, 77, 48, 55, 184, 77, 48, 55, 183, 77, 48,
+    55, 182, 77, 48, 55, 181, 77, 48, 55, 180, 77, 48, 55, 179, 77, 48, 55,
+    178, 77, 48, 55, 177, 77, 48, 55, 176, 77, 48, 54, 185, 77, 48, 54, 184,
+    77, 48, 54, 183, 77, 48, 54, 182, 77, 48, 54, 181, 77, 48, 54, 180, 77,
+    48, 54, 179, 77, 48, 54, 178, 77, 48, 54, 177, 77, 48, 54, 176, 77, 48,
+    53, 185, 77, 48, 53, 184, 77, 48, 53, 183, 77, 48, 53, 182, 77, 48, 53,
+    181, 77, 48, 53, 180, 77, 48, 53, 179, 77, 48, 53, 178, 77, 48, 53, 177,
+    77, 48, 53, 176, 77, 48, 52, 185, 77, 48, 52, 184, 77, 48, 52, 183, 77,
+    48, 52, 182, 77, 48, 52, 181, 77, 48, 52, 52, 128, 77, 48, 52, 180, 77,
+    48, 52, 51, 128, 77, 48, 52, 179, 77, 48, 52, 50, 128, 77, 48, 52, 178,
+    77, 48, 52, 49, 128, 77, 48, 52, 177, 77, 48, 52, 48, 65, 128, 77, 48,
+    52, 48, 128, 77, 48, 52, 176, 77, 48, 51, 57, 128, 77, 48, 51, 185, 77,
+    48, 51, 56, 128, 77, 48, 51, 184, 77, 48, 51, 55, 128, 77, 48, 51, 183,
+    77, 48, 51, 54, 128, 77, 48, 51, 182, 77, 48, 51, 53, 128, 77, 48, 51,
+    181, 77, 48, 51, 52, 128, 77, 48, 51, 180, 77, 48, 51, 51, 66, 128, 77,
+    48, 51, 51, 65, 128, 77, 48, 51, 51, 128, 77, 48, 51, 179, 77, 48, 51,
+    50, 128, 77, 48, 51, 178, 77, 48, 51, 49, 65, 128, 77, 48, 51, 49, 128,
+    77, 48, 51, 177, 77, 48, 51, 48, 128, 77, 48, 51, 176, 77, 48, 50, 57,
+    128, 77, 48, 50, 185, 77, 48, 50, 56, 65, 128, 77, 48, 50, 56, 128, 77,
+    48, 50, 184, 77, 48, 50, 55, 128, 77, 48, 50, 183, 77, 48, 50, 54, 128,
+    77, 48, 50, 182, 77, 48, 50, 53, 128, 77, 48, 50, 181, 77, 48, 50, 52,
+    65, 128, 77, 48, 50, 52, 128, 77, 48, 50, 180, 77, 48, 50, 51, 128, 77,
+    48, 50, 179, 77, 48, 50, 50, 65, 128, 77, 48, 50, 50, 128, 77, 48, 50,
+    178, 77, 48, 50, 49, 128, 77, 48, 50, 177, 77, 48, 50, 48, 128, 77, 48,
+    50, 176, 77, 48, 49, 57, 128, 77, 48, 49, 185, 77, 48, 49, 56, 128, 77,
+    48, 49, 184, 77, 48, 49, 55, 65, 128, 77, 48, 49, 55, 128, 77, 48, 49,
+    183, 77, 48, 49, 54, 65, 128, 77, 48, 49, 54, 128, 77, 48, 49, 182, 77,
+    48, 49, 53, 65, 128, 77, 48, 49, 53, 128, 77, 48, 49, 181, 77, 48, 49,
+    52, 128, 77, 48, 49, 180, 77, 48, 49, 51, 128, 77, 48, 49, 179, 77, 48,
+    49, 50, 72, 128, 77, 48, 49, 50, 71, 128, 77, 48, 49, 50, 70, 128, 77,
+    48, 49, 50, 69, 128, 77, 48, 49, 50, 68, 128, 77, 48, 49, 50, 67, 128,
+    77, 48, 49, 50, 66, 128, 77, 48, 49, 50, 65, 128, 77, 48, 49, 50, 128,
+    77, 48, 49, 178, 77, 48, 49, 49, 128, 77, 48, 49, 177, 77, 48, 49, 48,
+    65, 128, 77, 48, 49, 48, 128, 77, 48, 49, 176, 77, 48, 48, 57, 128, 77,
+    48, 48, 185, 77, 48, 48, 56, 128, 77, 48, 48, 184, 77, 48, 48, 55, 128,
+    77, 48, 48, 183, 77, 48, 48, 54, 128, 77, 48, 48, 182, 77, 48, 48, 53,
+    128, 77, 48, 48, 181, 77, 48, 48, 52, 128, 77, 48, 48, 180, 77, 48, 48,
+    51, 65, 128, 77, 48, 48, 51, 128, 77, 48, 48, 179, 77, 48, 48, 50, 128,
+    77, 48, 48, 178, 77, 48, 48, 49, 66, 128, 77, 48, 48, 49, 65, 128, 77,
+    48, 48, 49, 128, 77, 48, 48, 177, 76, 218, 76, 89, 89, 128, 76, 89, 88,
+    128, 76, 89, 84, 128, 76, 89, 82, 88, 128, 76, 89, 82, 128, 76, 89, 80,
+    128, 76, 89, 73, 84, 128, 76, 89, 73, 78, 199, 76, 89, 68, 73, 65, 206,
+    76, 89, 67, 73, 65, 206, 76, 88, 128, 76, 87, 79, 79, 128, 76, 87, 79,
+    128, 76, 87, 73, 73, 128, 76, 87, 73, 128, 76, 87, 69, 128, 76, 87, 65,
+    65, 128, 76, 87, 65, 128, 76, 85, 88, 128, 76, 85, 85, 128, 76, 85, 84,
+    128, 76, 85, 82, 88, 128, 76, 85, 80, 128, 76, 85, 79, 88, 128, 76, 85,
+    79, 84, 128, 76, 85, 79, 80, 128, 76, 85, 79, 128, 76, 85, 78, 71, 83,
+    73, 128, 76, 85, 78, 71, 83, 128, 76, 85, 78, 65, 84, 197, 76, 85, 205,
+    76, 85, 76, 128, 76, 85, 73, 83, 128, 76, 85, 72, 85, 82, 128, 76, 85,
+    72, 128, 76, 85, 200, 76, 85, 71, 71, 65, 71, 69, 128, 76, 85, 71, 65,
+    76, 128, 76, 85, 71, 65, 204, 76, 85, 69, 128, 76, 85, 197, 76, 85, 66,
+    128, 76, 85, 65, 69, 80, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76, 85,
+    178, 76, 82, 79, 128, 76, 82, 77, 128, 76, 82, 73, 128, 76, 82, 69, 128,
+    76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88,
+    128, 76, 79, 87, 69, 82, 69, 196, 76, 79, 87, 45, 82, 69, 86, 69, 82, 83,
+    69, 68, 45, 185, 76, 79, 87, 45, 77, 73, 196, 76, 79, 87, 45, 70, 65, 76,
+    76, 73, 78, 199, 76, 79, 87, 45, 185, 76, 79, 86, 197, 76, 79, 85, 82,
+    69, 128, 76, 79, 85, 68, 83, 80, 69, 65, 75, 69, 82, 128, 76, 79, 85, 68,
+    76, 217, 76, 79, 84, 85, 83, 128, 76, 79, 84, 85, 211, 76, 79, 84, 73,
+    79, 206, 76, 79, 84, 128, 76, 79, 83, 83, 76, 69, 83, 83, 128, 76, 79,
+    82, 82, 89, 128, 76, 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 81, 128,
+    76, 79, 80, 128, 76, 79, 79, 84, 128, 76, 79, 79, 80, 69, 196, 76, 79,
+    79, 80, 128, 76, 79, 79, 208, 76, 79, 79, 78, 128, 76, 79, 79, 203, 76,
+    79, 79, 128, 76, 79, 78, 83, 85, 77, 128, 76, 79, 78, 71, 65, 128, 76,
+    79, 78, 71, 193, 76, 79, 78, 71, 45, 76, 69, 71, 71, 69, 196, 76, 79, 78,
+    71, 45, 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 76, 79, 78, 71, 45, 66,
+    82, 65, 78, 67, 72, 45, 83, 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78,
+    67, 72, 45, 79, 83, 211, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45,
+    77, 65, 68, 210, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 72, 65,
+    71, 65, 76, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210,
+    76, 79, 77, 77, 65, 69, 128, 76, 79, 77, 128, 76, 79, 205, 76, 79, 76,
+    76, 73, 80, 79, 80, 128, 76, 79, 76, 76, 128, 76, 79, 71, 210, 76, 79,
+    71, 79, 84, 89, 80, 197, 76, 79, 71, 79, 71, 82, 65, 205, 76, 79, 71,
+    128, 76, 79, 68, 69, 83, 84, 79, 78, 69, 128, 76, 79, 67, 79, 77, 79, 84,
+    73, 86, 69, 128, 76, 79, 67, 75, 73, 78, 71, 45, 83, 72, 73, 70, 212, 76,
+    79, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, 73, 79, 78, 45, 87,
+    65, 76, 76, 80, 76, 65, 78, 197, 76, 79, 67, 65, 84, 73, 79, 78, 45, 70,
+    76, 79, 79, 82, 80, 76, 65, 78, 197, 76, 79, 67, 65, 84, 73, 79, 78, 128,
+    76, 79, 67, 65, 84, 73, 79, 206, 76, 79, 66, 83, 84, 69, 82, 128, 76, 79,
+    65, 128, 76, 78, 128, 76, 76, 85, 85, 128, 76, 76, 79, 79, 128, 76, 76,
+    76, 85, 85, 128, 76, 76, 76, 85, 128, 76, 76, 76, 79, 79, 128, 76, 76,
+    76, 79, 128, 76, 76, 76, 73, 73, 128, 76, 76, 76, 73, 128, 76, 76, 76,
+    69, 69, 128, 76, 76, 76, 69, 128, 76, 76, 76, 65, 85, 128, 76, 76, 76,
+    65, 73, 128, 76, 76, 76, 65, 65, 128, 76, 76, 76, 65, 128, 76, 76, 76,
+    128, 76, 76, 72, 65, 128, 76, 76, 65, 77, 65, 128, 76, 74, 85, 68, 73,
+    74, 69, 128, 76, 74, 69, 128, 76, 74, 128, 76, 73, 90, 65, 82, 68, 128,
+    76, 73, 88, 128, 76, 73, 87, 78, 128, 76, 73, 86, 82, 197, 76, 73, 84,
+    84, 76, 69, 128, 76, 73, 84, 84, 76, 197, 76, 73, 84, 84, 69, 210, 76,
+    73, 84, 82, 193, 76, 73, 84, 200, 76, 73, 83, 213, 76, 73, 83, 128, 76,
+    73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 81, 128, 76, 73, 80, 83,
+    84, 73, 67, 75, 128, 76, 73, 80, 211, 76, 73, 208, 76, 73, 78, 75, 73,
+    78, 199, 76, 73, 78, 75, 69, 196, 76, 73, 78, 203, 76, 73, 78, 71, 83,
+    65, 128, 76, 73, 78, 69, 83, 128, 76, 73, 78, 69, 211, 76, 73, 78, 69,
+    45, 57, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, 45, 51, 128,
+    76, 73, 78, 69, 45, 49, 128, 76, 73, 77, 77, 85, 52, 128, 76, 73, 77, 77,
+    85, 50, 128, 76, 73, 77, 77, 85, 128, 76, 73, 77, 77, 213, 76, 73, 77,
+    73, 84, 69, 196, 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 76, 73, 77,
+    73, 84, 128, 76, 73, 77, 69, 128, 76, 73, 77, 66, 213, 76, 73, 77, 66,
+    211, 76, 73, 77, 194, 76, 73, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128,
+    76, 73, 76, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, 128, 76, 73, 71, 72,
+    84, 78, 73, 78, 199, 76, 73, 71, 72, 84, 72, 79, 85, 83, 69, 128, 76, 73,
+    71, 72, 84, 128, 76, 73, 71, 65, 84, 73, 78, 199, 76, 73, 70, 84, 69, 82,
+    128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, 76, 73, 69, 84, 128, 76,
+    73, 69, 80, 128, 76, 73, 69, 69, 128, 76, 73, 69, 128, 76, 73, 68, 128,
+    76, 73, 67, 75, 73, 78, 199, 76, 73, 66, 82, 65, 128, 76, 73, 66, 69, 82,
+    84, 89, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 72, 73, 73, 128,
+    76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 72, 65, 199, 76, 72, 65, 65,
+    128, 76, 72, 128, 76, 69, 90, 72, 128, 76, 69, 88, 128, 76, 69, 86, 73,
+    84, 65, 84, 73, 78, 71, 128, 76, 69, 85, 77, 128, 76, 69, 85, 65, 69, 80,
+    128, 76, 69, 85, 65, 69, 77, 128, 76, 69, 85, 128, 76, 69, 213, 76, 69,
+    84, 84, 69, 82, 83, 128, 76, 69, 84, 84, 69, 82, 128, 76, 69, 212, 76,
+    69, 83, 83, 69, 210, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, 76, 69, 83,
+    83, 45, 84, 72, 65, 206, 76, 69, 83, 72, 128, 76, 69, 80, 67, 72, 193,
+    76, 69, 80, 128, 76, 69, 79, 80, 65, 82, 68, 128, 76, 69, 79, 128, 76,
+    69, 78, 84, 73, 67, 85, 76, 65, 210, 76, 69, 78, 73, 83, 128, 76, 69, 78,
+    73, 211, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, 76, 69, 78, 71, 84,
+    72, 45, 55, 128, 76, 69, 78, 71, 84, 72, 45, 54, 128, 76, 69, 78, 71, 84,
+    72, 45, 53, 128, 76, 69, 78, 71, 84, 72, 45, 52, 128, 76, 69, 78, 71, 84,
+    72, 45, 51, 128, 76, 69, 78, 71, 84, 72, 45, 50, 128, 76, 69, 78, 71, 84,
+    72, 45, 49, 128, 76, 69, 78, 71, 84, 200, 76, 69, 78, 71, 65, 128, 76,
+    69, 78, 71, 193, 76, 69, 77, 79, 78, 128, 76, 69, 77, 79, 73, 128, 76,
+    69, 76, 69, 84, 128, 76, 69, 76, 69, 212, 76, 69, 203, 76, 69, 73, 77,
+    77, 65, 128, 76, 69, 73, 77, 77, 193, 76, 69, 73, 128, 76, 69, 71, 83,
+    128, 76, 69, 71, 73, 79, 78, 128, 76, 69, 71, 69, 84, 79, 211, 76, 69,
+    71, 128, 76, 69, 199, 76, 69, 70, 84, 87, 65, 82, 68, 83, 128, 76, 69,
+    70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 76, 69, 70, 84, 45, 83, 84,
+    69, 205, 76, 69, 70, 84, 45, 83, 73, 68, 197, 76, 69, 70, 84, 45, 83, 72,
+    65, 68, 69, 196, 76, 69, 70, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 76,
+    69, 70, 84, 45, 76, 73, 71, 72, 84, 69, 196, 76, 69, 70, 84, 45, 72, 65,
+    78, 68, 69, 196, 76, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, 84, 45,
+    70, 65, 67, 73, 78, 199, 76, 69, 70, 84, 128, 76, 69, 69, 82, 65, 69, 87,
+    65, 128, 76, 69, 69, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 68, 71,
+    69, 82, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, 65, 78, 73, 78,
+    199, 76, 69, 65, 70, 217, 76, 69, 65, 70, 128, 76, 69, 65, 198, 76, 69,
+    65, 68, 69, 82, 128, 76, 69, 65, 196, 76, 68, 65, 78, 128, 76, 68, 50,
+    128, 76, 67, 201, 76, 67, 197, 76, 65, 90, 217, 76, 65, 89, 65, 78, 78,
+    65, 128, 76, 65, 88, 128, 76, 65, 87, 128, 76, 65, 215, 76, 65, 85, 76,
+    65, 128, 76, 65, 85, 75, 65, 218, 76, 65, 85, 74, 128, 76, 65, 85, 71,
+    72, 73, 78, 71, 128, 76, 65, 84, 73, 78, 65, 84, 197, 76, 65, 84, 73, 75,
+    128, 76, 65, 84, 69, 82, 65, 204, 76, 65, 84, 197, 76, 65, 83, 212, 76,
+    65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 201, 76, 65, 82, 71, 69, 83,
+    84, 128, 76, 65, 82, 71, 69, 210, 76, 65, 82, 71, 69, 128, 76, 65, 82,
+    71, 197, 76, 65, 81, 128, 76, 65, 80, 65, 81, 128, 76, 65, 207, 76, 65,
+    78, 84, 69, 82, 78, 128, 76, 65, 78, 71, 85, 65, 71, 197, 76, 65, 78, 69,
+    83, 128, 76, 65, 78, 196, 76, 65, 78, 128, 76, 65, 77, 80, 128, 76, 65,
+    77, 69, 68, 72, 128, 76, 65, 77, 69, 68, 128, 76, 65, 77, 69, 196, 76,
+    65, 77, 69, 128, 76, 65, 77, 197, 76, 65, 77, 68, 65, 128, 76, 65, 77,
+    68, 128, 76, 65, 77, 66, 68, 193, 76, 65, 77, 65, 68, 72, 128, 76, 65,
+    76, 128, 76, 65, 204, 76, 65, 75, 75, 72, 65, 78, 71, 89, 65, 79, 128,
+    76, 65, 75, 72, 65, 78, 128, 76, 65, 75, 72, 128, 76, 65, 75, 200, 76,
+    65, 75, 45, 55, 52, 57, 128, 76, 65, 75, 45, 55, 50, 52, 128, 76, 65, 75,
+    45, 54, 54, 56, 128, 76, 65, 75, 45, 54, 52, 56, 128, 76, 65, 75, 45, 54,
+    52, 184, 76, 65, 75, 45, 54, 51, 54, 128, 76, 65, 75, 45, 54, 49, 55,
+    128, 76, 65, 75, 45, 54, 49, 183, 76, 65, 75, 45, 54, 48, 56, 128, 76,
+    65, 75, 45, 53, 53, 48, 128, 76, 65, 75, 45, 52, 57, 53, 128, 76, 65, 75,
+    45, 52, 57, 51, 128, 76, 65, 75, 45, 52, 57, 50, 128, 76, 65, 75, 45, 52,
+    57, 48, 128, 76, 65, 75, 45, 52, 56, 51, 128, 76, 65, 75, 45, 52, 55, 48,
+    128, 76, 65, 75, 45, 52, 53, 55, 128, 76, 65, 75, 45, 52, 53, 48, 128,
+    76, 65, 75, 45, 52, 52, 57, 128, 76, 65, 75, 45, 52, 52, 185, 76, 65, 75,
+    45, 52, 52, 49, 128, 76, 65, 75, 45, 51, 57, 48, 128, 76, 65, 75, 45, 51,
+    56, 52, 128, 76, 65, 75, 45, 51, 56, 51, 128, 76, 65, 75, 45, 51, 52, 56,
+    128, 76, 65, 75, 45, 51, 52, 55, 128, 76, 65, 75, 45, 51, 52, 51, 128,
+    76, 65, 75, 45, 50, 54, 54, 128, 76, 65, 75, 45, 50, 54, 53, 128, 76, 65,
+    75, 45, 50, 51, 56, 128, 76, 65, 75, 45, 50, 50, 56, 128, 76, 65, 75, 45,
+    50, 50, 53, 128, 76, 65, 75, 45, 50, 50, 48, 128, 76, 65, 75, 45, 50, 49,
+    57, 128, 76, 65, 75, 45, 50, 49, 48, 128, 76, 65, 75, 45, 49, 52, 50,
+    128, 76, 65, 75, 45, 49, 51, 48, 128, 76, 65, 75, 45, 48, 57, 50, 128,
+    76, 65, 75, 45, 48, 56, 49, 128, 76, 65, 75, 45, 48, 56, 177, 76, 65, 75,
+    45, 48, 56, 48, 128, 76, 65, 75, 45, 48, 55, 185, 76, 65, 75, 45, 48, 54,
+    50, 128, 76, 65, 75, 45, 48, 53, 49, 128, 76, 65, 75, 45, 48, 53, 48,
+    128, 76, 65, 75, 45, 48, 51, 48, 128, 76, 65, 75, 45, 48, 50, 53, 128,
+    76, 65, 75, 45, 48, 50, 49, 128, 76, 65, 75, 45, 48, 50, 48, 128, 76, 65,
+    75, 45, 48, 48, 51, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65, 78, 128, 76,
+    65, 73, 78, 199, 76, 65, 201, 76, 65, 72, 83, 72, 85, 128, 76, 65, 72,
+    128, 76, 65, 71, 85, 83, 128, 76, 65, 71, 213, 76, 65, 71, 65, 82, 128,
+    76, 65, 71, 65, 210, 76, 65, 71, 65, 66, 128, 76, 65, 71, 65, 194, 76,
+    65, 69, 86, 128, 76, 65, 69, 128, 76, 65, 68, 217, 76, 65, 68, 68, 69,
+    82, 128, 76, 65, 67, 82, 79, 83, 83, 197, 76, 65, 67, 75, 128, 76, 65,
+    67, 65, 128, 76, 65, 66, 79, 85, 82, 73, 78, 71, 128, 76, 65, 66, 79, 82,
+    128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, 79, 206, 76, 65, 66, 73,
+    65, 204, 76, 65, 66, 69, 76, 128, 76, 65, 66, 65, 84, 128, 76, 65, 194,
+    76, 65, 65, 78, 65, 69, 128, 76, 65, 65, 78, 128, 76, 65, 65, 77, 85,
+    128, 76, 65, 65, 77, 128, 76, 65, 65, 73, 128, 76, 54, 128, 76, 52, 128,
+    76, 51, 128, 76, 50, 128, 76, 48, 48, 54, 65, 128, 76, 48, 48, 50, 65,
+    128, 76, 45, 84, 89, 80, 197, 76, 45, 83, 72, 65, 80, 69, 196, 75, 89,
+    85, 82, 73, 73, 128, 75, 89, 85, 128, 75, 89, 79, 128, 75, 89, 76, 73,
+    83, 77, 65, 128, 75, 89, 73, 128, 75, 89, 69, 128, 75, 89, 65, 84, 72,
+    79, 211, 75, 89, 65, 65, 128, 75, 89, 65, 128, 75, 88, 87, 73, 128, 75,
+    88, 87, 69, 69, 128, 75, 88, 87, 69, 128, 75, 88, 87, 65, 65, 128, 75,
+    88, 87, 65, 128, 75, 88, 85, 128, 75, 88, 79, 128, 75, 88, 73, 128, 75,
+    88, 69, 69, 128, 75, 88, 69, 128, 75, 88, 65, 65, 128, 75, 88, 65, 128,
+    75, 87, 86, 128, 75, 87, 85, 51, 49, 56, 128, 75, 87, 79, 79, 128, 75,
+    87, 79, 128, 75, 87, 77, 128, 75, 87, 73, 73, 128, 75, 87, 73, 128, 75,
+    87, 69, 69, 128, 75, 87, 69, 128, 75, 87, 66, 128, 75, 87, 65, 89, 128,
+    75, 87, 65, 69, 84, 128, 75, 87, 65, 65, 128, 75, 86, 65, 128, 75, 86,
+    128, 75, 85, 90, 72, 73, 128, 75, 85, 88, 128, 75, 85, 86, 128, 75, 85,
+    85, 72, 128, 75, 85, 84, 128, 75, 85, 83, 77, 65, 128, 75, 85, 83, 72,
+    85, 50, 128, 75, 85, 83, 72, 85, 178, 75, 85, 82, 88, 128, 75, 85, 82,
+    85, 90, 69, 73, 82, 79, 128, 75, 85, 82, 84, 128, 75, 85, 82, 79, 79, 78,
+    69, 128, 75, 85, 82, 128, 75, 85, 210, 75, 85, 81, 128, 75, 85, 79, 88,
+    128, 75, 85, 79, 80, 128, 75, 85, 79, 208, 75, 85, 79, 77, 128, 75, 85,
+    79, 128, 75, 85, 78, 71, 128, 75, 85, 78, 68, 68, 65, 76, 73, 89, 65,
     128, 75, 85, 76, 128, 75, 85, 204, 75, 85, 71, 128, 75, 85, 69, 84, 128,
     75, 85, 66, 128, 75, 85, 65, 86, 128, 75, 85, 65, 66, 128, 75, 85, 65,
     128, 75, 85, 55, 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75,
@@ -2674,1256 +2728,1257 @@
     79, 77, 128, 75, 79, 69, 84, 128, 75, 79, 66, 128, 75, 79, 65, 76, 65,
     128, 75, 79, 65, 128, 75, 79, 45, 75, 73, 128, 75, 79, 45, 51, 128, 75,
     79, 45, 50, 128, 75, 79, 45, 49, 128, 75, 78, 85, 67, 75, 76, 69, 83,
-    128, 75, 78, 85, 67, 75, 76, 69, 128, 75, 78, 79, 66, 83, 128, 75, 78,
-    73, 71, 72, 84, 45, 82, 79, 79, 75, 128, 75, 78, 73, 71, 72, 84, 45, 81,
-    85, 69, 69, 78, 128, 75, 78, 73, 71, 72, 84, 45, 66, 73, 83, 72, 79, 80,
-    128, 75, 78, 73, 71, 72, 84, 128, 75, 78, 73, 71, 72, 212, 75, 78, 73,
-    70, 69, 128, 75, 78, 73, 70, 197, 75, 78, 69, 69, 76, 73, 78, 199, 75,
-    77, 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 75, 76, 65, 83, 77, 65,
-    128, 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 75, 76, 128, 75, 75, 79,
-    128, 75, 75, 73, 128, 75, 75, 69, 69, 128, 75, 75, 69, 128, 75, 75, 65,
-    128, 75, 75, 128, 75, 74, 69, 128, 75, 73, 89, 69, 79, 75, 45, 84, 73,
-    75, 69, 85, 84, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, 83, 45, 75,
-    73, 89, 69, 79, 75, 128, 75, 73, 89, 69, 79, 75, 45, 82, 73, 69, 85, 76,
-    128, 75, 73, 89, 69, 79, 75, 45, 80, 73, 69, 85, 80, 128, 75, 73, 89, 69,
-    79, 75, 45, 78, 73, 69, 85, 78, 128, 75, 73, 89, 69, 79, 75, 45, 75, 72,
-    73, 69, 85, 75, 72, 128, 75, 73, 89, 69, 79, 75, 45, 67, 72, 73, 69, 85,
-    67, 72, 128, 75, 73, 89, 69, 79, 203, 75, 73, 88, 128, 75, 73, 87, 73,
-    70, 82, 85, 73, 84, 128, 75, 73, 87, 128, 75, 73, 86, 128, 75, 73, 84,
-    69, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, 199, 75, 73, 83, 83,
-    128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, 75, 73, 83, 73, 77,
-    181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, 75, 73, 82, 79, 87,
-    65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, 79, 82, 85, 128, 75,
-    73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, 79, 128, 75, 73, 82,
-    71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, 75, 73, 208, 75, 73,
-    78, 83, 72, 73, 80, 128, 75, 73, 78, 78, 193, 75, 73, 78, 68, 69, 82, 71,
-    65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128, 75, 73, 76, 76, 69,
-    82, 128, 75, 73, 73, 90, 72, 128, 75, 73, 73, 128, 75, 73, 72, 128, 75,
-    73, 69, 88, 128, 75, 73, 69, 86, 65, 206, 75, 73, 69, 80, 128, 75, 73,
-    69, 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128, 75, 73, 196, 75, 73,
-    67, 75, 128, 75, 73, 66, 128, 75, 73, 65, 86, 128, 75, 73, 65, 66, 128,
-    75, 73, 45, 56, 128, 75, 73, 45, 55, 128, 75, 73, 45, 54, 128, 75, 73,
-    45, 53, 128, 75, 73, 45, 52, 128, 75, 73, 45, 51, 128, 75, 73, 45, 50,
-    128, 75, 73, 45, 49, 128, 75, 72, 90, 128, 75, 72, 87, 65, 73, 128, 75,
-    72, 85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69, 206, 75, 72, 85, 68, 65,
-    87, 65, 68, 201, 75, 72, 85, 68, 65, 77, 128, 75, 72, 85, 65, 84, 128,
-    75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72, 79, 78, 78, 65, 128, 75,
-    72, 79, 78, 128, 75, 72, 79, 77, 85, 84, 128, 75, 72, 79, 74, 75, 201,
-    75, 72, 79, 128, 75, 72, 207, 75, 72, 77, 213, 75, 72, 73, 84, 128, 75,
-    72, 73, 78, 89, 65, 128, 75, 72, 73, 69, 85, 75, 200, 75, 72, 73, 128,
-    75, 72, 201, 75, 72, 72, 79, 128, 75, 72, 72, 65, 128, 75, 72, 69, 84,
-    72, 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 75,
-    72, 65, 86, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 75, 72, 65, 82,
-    128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199, 75, 72, 65, 78, 68,
-    193, 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, 83, 83, 73, 65, 206,
-    75, 72, 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, 65, 200, 75, 72, 65,
-    66, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, 67, 65, 80, 128,
-    75, 69, 89, 67, 65, 208, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89,
-    66, 79, 65, 82, 196, 75, 69, 88, 128, 75, 69, 86, 128, 75, 69, 85, 89,
-    69, 85, 88, 128, 75, 69, 85, 83, 72, 69, 85, 65, 69, 80, 128, 75, 69, 85,
-    83, 69, 85, 88, 128, 75, 69, 85, 80, 85, 81, 128, 75, 69, 85, 79, 212,
-    75, 69, 85, 77, 128, 75, 69, 85, 75, 69, 85, 84, 78, 68, 65, 128, 75, 69,
-    85, 75, 65, 81, 128, 75, 69, 85, 65, 69, 84, 77, 69, 85, 78, 128, 75, 69,
-    85, 65, 69, 82, 73, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, 128,
-    75, 69, 82, 69, 84, 128, 75, 69, 79, 87, 128, 75, 69, 78, 84, 73, 77, 65,
-    84, 65, 128, 75, 69, 78, 84, 73, 77, 65, 84, 193, 75, 69, 78, 84, 73, 77,
-    193, 75, 69, 78, 65, 84, 128, 75, 69, 78, 128, 75, 69, 206, 75, 69, 77,
-    80, 85, 76, 128, 75, 69, 77, 80, 85, 204, 75, 69, 77, 80, 76, 73, 128,
-    75, 69, 77, 80, 76, 201, 75, 69, 77, 80, 72, 82, 69, 78, 71, 128, 75, 69,
-    77, 66, 65, 78, 71, 128, 75, 69, 76, 86, 73, 206, 75, 69, 72, 69, 72,
-    128, 75, 69, 72, 69, 200, 75, 69, 72, 128, 75, 69, 70, 85, 76, 65, 128,
-    75, 69, 69, 86, 128, 75, 69, 69, 83, 85, 128, 75, 69, 69, 80, 73, 78,
-    199, 75, 69, 69, 78, 71, 128, 75, 69, 69, 66, 128, 75, 69, 66, 128, 75,
-    69, 65, 65, 69, 128, 75, 67, 65, 76, 128, 75, 66, 128, 75, 65, 90, 65,
-    75, 200, 75, 65, 89, 65, 78, 78, 65, 128, 75, 65, 89, 65, 200, 75, 65,
-    88, 128, 75, 65, 87, 86, 128, 75, 65, 87, 73, 128, 75, 65, 87, 66, 128,
-    75, 65, 86, 89, 75, 65, 128, 75, 65, 86, 89, 75, 193, 75, 65, 86, 128,
-    75, 65, 85, 86, 128, 75, 65, 85, 78, 65, 128, 75, 65, 85, 206, 75, 65,
-    85, 66, 128, 75, 65, 84, 79, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128,
-    75, 65, 84, 72, 65, 75, 193, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75,
-    65, 84, 65, 86, 193, 75, 65, 84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65,
-    71, 65, 78, 193, 75, 65, 83, 82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65,
-    84, 65, 206, 75, 65, 83, 82, 65, 128, 75, 65, 83, 82, 193, 75, 65, 83,
-    75, 65, 76, 128, 75, 65, 83, 75, 65, 204, 75, 65, 83, 72, 77, 73, 82,
-    201, 75, 65, 82, 83, 72, 65, 78, 65, 128, 75, 65, 82, 79, 82, 73, 73,
-    128, 75, 65, 82, 79, 82, 65, 78, 128, 75, 65, 82, 79, 82, 128, 75, 65,
-    82, 207, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65,
-    82, 65, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80,
-    73, 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, 76,
-    128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, 85, 80, 72, 128, 75,
-    65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 75, 65, 80, 80, 65,
-    128, 75, 65, 80, 80, 193, 75, 65, 80, 79, 128, 75, 65, 80, 72, 128, 75,
-    65, 80, 65, 76, 128, 75, 65, 80, 65, 128, 75, 65, 208, 75, 65, 78, 84,
-    65, 74, 193, 75, 65, 78, 78, 65, 68, 193, 75, 65, 78, 71, 65, 82, 79, 79,
-    128, 75, 65, 78, 71, 128, 75, 65, 78, 199, 75, 65, 78, 65, 75, 79, 128,
-    75, 65, 77, 52, 128, 75, 65, 77, 50, 128, 75, 65, 77, 128, 75, 65, 75,
-    79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, 203,
-    75, 65, 73, 86, 128, 75, 65, 73, 84, 72, 201, 75, 65, 73, 82, 73, 128,
-    75, 65, 73, 66, 128, 75, 65, 73, 128, 75, 65, 201, 75, 65, 70, 65, 128,
-    75, 65, 70, 128, 75, 65, 198, 75, 65, 68, 53, 128, 75, 65, 68, 181, 75,
-    65, 68, 52, 128, 75, 65, 68, 51, 128, 75, 65, 68, 179, 75, 65, 68, 50,
-    128, 75, 65, 68, 128, 75, 65, 66, 193, 75, 65, 66, 128, 75, 65, 65, 86,
-    128, 75, 65, 65, 73, 128, 75, 65, 65, 70, 85, 128, 75, 65, 65, 70, 128,
-    75, 65, 65, 67, 85, 128, 75, 65, 65, 66, 65, 128, 75, 65, 65, 66, 128,
-    75, 65, 50, 128, 75, 65, 178, 75, 65, 45, 75, 69, 128, 75, 65, 45, 57,
-    128, 75, 65, 45, 56, 128, 75, 65, 45, 55, 128, 75, 65, 45, 54, 128, 75,
-    65, 45, 53, 128, 75, 65, 45, 52, 128, 75, 65, 45, 51, 128, 75, 65, 45,
-    50, 128, 75, 65, 45, 49, 49, 128, 75, 65, 45, 49, 48, 128, 75, 65, 45,
-    49, 128, 75, 48, 48, 56, 128, 75, 48, 48, 55, 128, 75, 48, 48, 54, 128,
-    75, 48, 48, 53, 128, 75, 48, 48, 52, 128, 75, 48, 48, 51, 128, 75, 48,
-    48, 50, 128, 75, 48, 48, 49, 128, 74, 87, 65, 128, 74, 85, 85, 128, 74,
-    85, 84, 128, 74, 85, 83, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 74,
-    85, 80, 73, 84, 69, 82, 128, 74, 85, 79, 84, 128, 74, 85, 79, 80, 128,
-    74, 85, 78, 79, 128, 74, 85, 78, 71, 83, 69, 79, 78, 199, 74, 85, 78, 69,
-    128, 74, 85, 76, 89, 128, 74, 85, 71, 71, 76, 73, 78, 71, 128, 74, 85,
-    69, 85, 73, 128, 74, 85, 68, 85, 76, 128, 74, 85, 68, 71, 69, 128, 74,
-    85, 68, 69, 79, 45, 83, 80, 65, 78, 73, 83, 200, 74, 79, 89, 83, 84, 73,
-    67, 75, 128, 74, 79, 89, 79, 85, 211, 74, 79, 89, 128, 74, 79, 86, 69,
-    128, 74, 79, 212, 74, 79, 78, 71, 128, 74, 79, 78, 193, 74, 79, 75, 69,
-    82, 128, 74, 79, 73, 78, 84, 83, 128, 74, 79, 73, 78, 69, 68, 128, 74,
-    79, 73, 78, 128, 74, 79, 65, 128, 74, 78, 89, 65, 128, 74, 74, 89, 88,
-    128, 74, 74, 89, 84, 128, 74, 74, 89, 80, 128, 74, 74, 89, 128, 74, 74,
-    85, 88, 128, 74, 74, 85, 84, 128, 74, 74, 85, 82, 88, 128, 74, 74, 85,
-    82, 128, 74, 74, 85, 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 79,
-    80, 128, 74, 74, 85, 79, 128, 74, 74, 85, 128, 74, 74, 79, 88, 128, 74,
-    74, 79, 84, 128, 74, 74, 79, 80, 128, 74, 74, 79, 128, 74, 74, 73, 88,
-    128, 74, 74, 73, 84, 128, 74, 74, 73, 80, 128, 74, 74, 73, 69, 88, 128,
-    74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 80, 128, 74, 74, 73, 69, 128,
-    74, 74, 73, 128, 74, 74, 69, 69, 128, 74, 74, 69, 128, 74, 74, 65, 128,
-    74, 73, 76, 128, 74, 73, 73, 77, 128, 74, 73, 73, 128, 74, 73, 72, 86,
-    65, 77, 85, 76, 73, 89, 65, 128, 74, 73, 71, 83, 65, 215, 74, 73, 65,
-    128, 74, 72, 79, 88, 128, 74, 72, 79, 128, 74, 72, 69, 72, 128, 74, 72,
-    65, 89, 73, 78, 128, 74, 72, 65, 78, 128, 74, 72, 65, 77, 128, 74, 72,
-    65, 65, 128, 74, 72, 65, 128, 74, 69, 85, 128, 74, 69, 82, 85, 83, 65,
-    76, 69, 77, 128, 74, 69, 82, 65, 206, 74, 69, 82, 65, 128, 74, 69, 82,
-    128, 74, 69, 72, 128, 74, 69, 200, 74, 69, 71, 79, 71, 65, 78, 128, 74,
-    69, 69, 77, 128, 74, 69, 69, 205, 74, 69, 65, 78, 83, 128, 74, 65, 89,
-    78, 128, 74, 65, 89, 73, 78, 128, 74, 65, 89, 65, 78, 78, 65, 128, 74,
-    65, 87, 128, 74, 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 86, 65, 78, 69,
-    83, 197, 74, 65, 85, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83,
-    197, 74, 65, 80, 65, 78, 128, 74, 65, 78, 85, 65, 82, 89, 128, 74, 65,
-    76, 76, 65, 74, 65, 76, 65, 76, 79, 85, 72, 79, 85, 128, 74, 65, 73, 206,
-    74, 65, 73, 128, 74, 65, 72, 128, 74, 65, 68, 69, 128, 74, 65, 67, 75,
-    83, 128, 74, 65, 67, 75, 45, 79, 45, 76, 65, 78, 84, 69, 82, 78, 128, 74,
-    65, 67, 203, 74, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 73, 90, 72,
-    73, 84, 83, 65, 128, 73, 90, 72, 73, 84, 83, 193, 73, 90, 72, 69, 128,
-    73, 90, 65, 75, 65, 89, 193, 73, 89, 69, 75, 128, 73, 89, 65, 78, 78, 65,
-    128, 73, 85, 74, 65, 128, 73, 84, 211, 73, 84, 69, 82, 65, 84, 73, 79,
-    206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, 128, 73, 83, 79, 83,
-    67, 69, 76, 69, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 73, 83, 79,
-    76, 65, 84, 69, 128, 73, 83, 76, 65, 78, 68, 128, 73, 83, 69, 78, 45, 73,
-    83, 69, 78, 128, 73, 83, 65, 75, 73, 193, 73, 83, 45, 80, 73, 76, 76, 65,
-    128, 73, 82, 85, 89, 65, 78, 78, 65, 128, 73, 82, 85, 85, 89, 65, 78, 78,
-    65, 128, 73, 82, 79, 78, 45, 67, 79, 80, 80, 69, 210, 73, 82, 79, 78,
-    128, 73, 82, 66, 128, 73, 79, 84, 73, 70, 73, 69, 196, 73, 79, 84, 65,
-    84, 69, 196, 73, 79, 84, 65, 128, 73, 79, 84, 193, 73, 79, 82, 128, 73,
-    79, 78, 71, 128, 73, 79, 68, 72, 65, 68, 72, 128, 73, 78, 86, 73, 83, 73,
-    66, 76, 197, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 78, 86, 69, 82, 84,
-    69, 196, 73, 78, 86, 69, 82, 84, 69, 66, 82, 65, 84, 69, 128, 73, 78, 86,
-    69, 82, 83, 197, 73, 78, 84, 82, 79, 68, 85, 67, 69, 82, 128, 73, 78, 84,
-    73, 128, 73, 78, 84, 69, 82, 83, 89, 76, 76, 65, 66, 73, 195, 73, 78, 84,
-    69, 82, 83, 69, 67, 84, 73, 79, 78, 128, 73, 78, 84, 69, 82, 83, 69, 67,
-    84, 73, 79, 206, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 78, 199, 73, 78,
-    84, 69, 82, 82, 79, 66, 65, 78, 71, 128, 73, 78, 84, 69, 82, 82, 79, 66,
-    65, 78, 199, 73, 78, 84, 69, 82, 80, 79, 76, 65, 84, 73, 79, 206, 73, 78,
-    84, 69, 82, 76, 79, 67, 75, 69, 196, 73, 78, 84, 69, 82, 76, 73, 78, 69,
-    65, 210, 73, 78, 84, 69, 82, 76, 65, 67, 69, 196, 73, 78, 84, 69, 82, 73,
-    79, 210, 73, 78, 84, 69, 82, 69, 83, 212, 73, 78, 84, 69, 82, 67, 65, 76,
-    65, 84, 69, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78,
-    84, 69, 71, 82, 65, 84, 73, 79, 206, 73, 78, 84, 69, 71, 82, 65, 76, 128,
-    73, 78, 84, 69, 71, 82, 65, 204, 73, 78, 83, 85, 76, 65, 210, 73, 78, 83,
-    84, 82, 85, 77, 69, 78, 84, 65, 204, 73, 78, 83, 73, 68, 69, 128, 73, 78,
-    83, 73, 68, 197, 73, 78, 83, 69, 82, 84, 73, 79, 206, 73, 78, 83, 69, 82,
-    212, 73, 78, 83, 69, 67, 84, 128, 73, 78, 83, 67, 82, 73, 80, 84, 73, 79,
-    78, 65, 204, 73, 78, 80, 85, 212, 73, 78, 78, 79, 67, 69, 78, 67, 69,
-    128, 73, 78, 78, 78, 128, 73, 78, 78, 69, 82, 128, 73, 78, 78, 69, 210,
-    73, 78, 78, 128, 73, 78, 73, 78, 71, 85, 128, 73, 78, 72, 73, 66, 73,
-    212, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, 72, 65, 76, 69, 128, 73,
-    78, 71, 87, 65, 90, 128, 73, 78, 70, 79, 82, 77, 65, 84, 73, 79, 206, 73,
-    78, 70, 76, 85, 69, 78, 67, 69, 128, 73, 78, 70, 73, 78, 73, 84, 89, 128,
-    73, 78, 70, 73, 78, 73, 84, 217, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204,
-    73, 78, 68, 73, 82, 69, 67, 212, 73, 78, 68, 73, 67, 84, 73, 79, 206, 73,
-    78, 68, 73, 67, 65, 84, 79, 82, 128, 73, 78, 68, 73, 67, 65, 84, 79, 210,
-    73, 78, 68, 73, 195, 73, 78, 68, 73, 65, 206, 73, 78, 68, 69, 88, 128,
-    73, 78, 68, 69, 80, 69, 78, 68, 69, 78, 212, 73, 78, 67, 82, 69, 77, 69,
-    78, 84, 128, 73, 78, 67, 82, 69, 65, 83, 69, 211, 73, 78, 67, 82, 69, 65,
-    83, 69, 128, 73, 78, 67, 82, 69, 65, 83, 197, 73, 78, 67, 79, 77, 80, 76,
-    69, 84, 197, 73, 78, 67, 79, 77, 73, 78, 199, 73, 78, 67, 76, 85, 68, 73,
-    78, 199, 73, 78, 67, 72, 128, 73, 78, 66, 79, 216, 73, 78, 65, 80, 128,
-    73, 78, 45, 65, 76, 65, 70, 128, 73, 77, 80, 69, 82, 73, 65, 204, 73, 77,
-    80, 69, 82, 70, 69, 67, 84, 85, 205, 73, 77, 80, 69, 82, 70, 69, 67, 84,
-    65, 128, 73, 77, 80, 69, 82, 70, 69, 67, 84, 193, 73, 77, 78, 128, 73,
-    77, 73, 83, 69, 79, 211, 73, 77, 73, 78, 51, 128, 73, 77, 73, 78, 128,
-    73, 77, 73, 206, 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 77, 73,
-    70, 84, 72, 79, 82, 65, 128, 73, 77, 73, 70, 79, 78, 79, 78, 128, 73, 77,
-    73, 68, 73, 65, 82, 71, 79, 78, 128, 73, 77, 65, 71, 197, 73, 76, 85, 89,
-    65, 78, 78, 65, 128, 73, 76, 85, 89, 128, 73, 76, 85, 85, 89, 65, 78, 78,
-    65, 128, 73, 76, 85, 84, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 76,
-    73, 77, 77, 85, 51, 128, 73, 76, 73, 77, 77, 85, 128, 73, 76, 73, 77, 77,
-    213, 73, 76, 50, 128, 73, 75, 65, 82, 65, 128, 73, 75, 65, 82, 193, 73,
-    74, 128, 73, 73, 89, 65, 78, 78, 65, 128, 73, 71, 73, 128, 73, 71, 201,
-    73, 71, 71, 87, 83, 128, 73, 70, 73, 78, 128, 73, 69, 85, 78, 71, 45, 84,
-    73, 75, 69, 85, 84, 128, 73, 69, 85, 78, 71, 45, 84, 72, 73, 69, 85, 84,
-    72, 128, 73, 69, 85, 78, 71, 45, 82, 73, 69, 85, 76, 128, 73, 69, 85, 78,
-    71, 45, 80, 73, 69, 85, 80, 128, 73, 69, 85, 78, 71, 45, 80, 72, 73, 69,
-    85, 80, 72, 128, 73, 69, 85, 78, 71, 45, 67, 73, 69, 85, 67, 128, 73, 69,
-    85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, 73, 69, 85, 78, 199, 73,
-    68, 76, 69, 128, 73, 68, 73, 77, 128, 73, 68, 73, 205, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 69, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50,
-    65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 56, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50,
-    52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 50, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49,
-    69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 67, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 54, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48,
-    67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48,
-    54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 70, 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48,
-    48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 57, 49, 52, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 57, 48, 52, 65, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 56, 68, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 56, 67, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    56, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 68, 52,
-    50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 65, 55, 65, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 57, 56, 49, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 55, 54, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 55, 53, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    55, 53, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 49, 50,
-    49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 48, 66, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 70, 49, 52, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 54, 69, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 54, 55, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    54, 55, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48,
-    56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 54, 50, 48, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 66, 48, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 54, 53, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 54, 53, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    54, 51, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 48,
-    55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 57, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50, 53, 51, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 54, 50, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 53, 70, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    53, 68, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 56,
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 66, 53, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57, 50, 57, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 53, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 53, 56, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    53, 53, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 51,
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 52, 48, 56, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51, 70, 51, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 53, 51, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 53, 50, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    53, 50, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 52,
-    68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 49, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 49, 56, 68, 128, 73, 68, 69, 79,
-    71, 82, 65, 80, 72, 45, 52, 69, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 52, 69, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45,
-    52, 69, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48,
-    57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 48, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 68, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 67, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 65, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
-    49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 54,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 52, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 65, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 65, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 65, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
-    48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 68,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 67, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 66, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 65, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 65, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
-    48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 52,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 50, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 66,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 65, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 57, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 56, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 70, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 50,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 48, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 57,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 56, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 55, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 54, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 69, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 48,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 69, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 55,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 54, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 53, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 52, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 68, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 69,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 67, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 53,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 52, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 51, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 50, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 67, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 67,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 65, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 51,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 50, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 49, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 48, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 65, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 65,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 56, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 49,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 48, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 70, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 69, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 57, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 56,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 54, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 70,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 69, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 68, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 67, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 56, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 54,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 52, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 68,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 67, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 66, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 65, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 55, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 52,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 50, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 66,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 65, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 57, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 56, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 50,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 48, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 57,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 56, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 55, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 54, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 48,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 69, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 55,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 54, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 53, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 52, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 69,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 67, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 53,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 52, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 51, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 50, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 67,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 65, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 51,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 50, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 49, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 48, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 65,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 56, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 49,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 48, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 70, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 69, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 56,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 54, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 57, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 57, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 57, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
-    48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 70,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 69, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 68, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 67, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 54,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 52, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 51, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 68,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 67, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 66, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 65, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 52,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 50, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 49, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 66,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 65, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 57, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 56, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 50,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 48, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 70, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 57,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 56, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 55, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 54, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 48,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 69, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 68, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 55,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 54, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 53, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 52, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 69,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 67, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 66, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 53,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 52, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 51, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 50, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 67,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 65, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 57, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 51,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 50, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 49, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 48, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 65,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 57, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 56, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 55, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 49,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 48, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 70, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 69, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 56,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 55, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 54, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 53, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 70,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 69, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 68, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 67, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 54,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 53, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 52, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 51, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 68,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 67, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 66, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 65, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 52,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 51, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 50, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 49, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 66,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 65, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 57, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 56, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 50,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 49, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 48, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 70, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 57,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 56, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 55, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 54, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 48,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 70, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 69, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 68, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 55,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 54, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 53, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 52, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 69,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 68, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 67, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 66, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 53,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 52, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 51, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 50, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 67,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 66, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 65, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 57, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 72, 45, 50, 70, 56, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65,
-    80, 72, 45, 50, 70, 56, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
-    45, 50, 70, 56, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
-    70, 56, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
-    48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 51,
-    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 50, 128, 73,
-    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 49, 128, 73, 68, 69,
-    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 48, 128, 73, 68, 69, 79, 71,
-    82, 65, 80, 200, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, 84, 73, 79, 78,
-    128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 73, 67, 79, 78, 128, 73, 67,
-    72, 79, 85, 128, 73, 67, 72, 79, 83, 128, 73, 67, 72, 73, 77, 65, 84, 79,
-    83, 128, 73, 67, 72, 65, 68, 73, 78, 128, 73, 67, 69, 76, 65, 78, 68, 73,
-    67, 45, 89, 82, 128, 73, 66, 73, 70, 73, 76, 73, 128, 73, 65, 85, 68, 65,
-    128, 73, 48, 49, 53, 128, 73, 48, 49, 52, 128, 73, 48, 49, 51, 128, 73,
-    48, 49, 50, 128, 73, 48, 49, 49, 65, 128, 73, 48, 49, 49, 128, 73, 48,
-    49, 48, 65, 128, 73, 48, 49, 48, 128, 73, 48, 48, 57, 65, 128, 73, 48,
-    48, 57, 128, 73, 48, 48, 56, 128, 73, 48, 48, 55, 128, 73, 48, 48, 54,
-    128, 73, 48, 48, 53, 65, 128, 73, 48, 48, 53, 128, 73, 48, 48, 52, 128,
-    73, 48, 48, 51, 128, 73, 48, 48, 50, 128, 73, 48, 48, 49, 128, 73, 45,
-    89, 85, 128, 73, 45, 89, 79, 128, 73, 45, 89, 69, 79, 128, 73, 45, 89,
-    69, 128, 73, 45, 89, 65, 69, 128, 73, 45, 89, 65, 45, 79, 128, 73, 45,
-    89, 65, 128, 73, 45, 79, 45, 73, 128, 73, 45, 79, 128, 73, 45, 69, 85,
-    128, 73, 45, 66, 69, 65, 77, 128, 73, 45, 65, 82, 65, 69, 65, 128, 73,
-    45, 65, 128, 72, 90, 90, 90, 71, 128, 72, 90, 90, 90, 128, 72, 90, 90,
-    80, 128, 72, 90, 90, 128, 72, 90, 87, 71, 128, 72, 90, 87, 128, 72, 90,
-    84, 128, 72, 90, 71, 128, 72, 89, 83, 84, 69, 82, 69, 83, 73, 211, 72,
-    89, 80, 79, 68, 73, 65, 83, 84, 79, 76, 69, 128, 72, 89, 80, 72, 69, 78,
-    65, 84, 73, 79, 206, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, 85, 83, 128,
-    72, 89, 80, 72, 69, 78, 128, 72, 89, 80, 72, 69, 206, 72, 89, 71, 73, 69,
-    73, 65, 128, 72, 89, 71, 73, 69, 65, 128, 72, 88, 87, 71, 128, 72, 88,
-    85, 79, 88, 128, 72, 88, 85, 79, 84, 128, 72, 88, 85, 79, 80, 128, 72,
-    88, 85, 79, 128, 72, 88, 79, 88, 128, 72, 88, 79, 84, 128, 72, 88, 79,
-    80, 128, 72, 88, 79, 128, 72, 88, 73, 88, 128, 72, 88, 73, 84, 128, 72,
-    88, 73, 80, 128, 72, 88, 73, 69, 88, 128, 72, 88, 73, 69, 84, 128, 72,
-    88, 73, 69, 80, 128, 72, 88, 73, 69, 128, 72, 88, 73, 128, 72, 88, 69,
-    88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 128, 72, 88, 65, 88, 128, 72,
-    88, 65, 84, 128, 72, 88, 65, 80, 128, 72, 88, 65, 128, 72, 87, 85, 128,
-    72, 87, 65, 73, 82, 128, 72, 87, 65, 72, 128, 72, 85, 86, 65, 128, 72,
-    85, 83, 72, 69, 196, 72, 85, 83, 72, 128, 72, 85, 82, 65, 78, 128, 72,
-    85, 79, 84, 128, 72, 85, 78, 68, 82, 69, 68, 83, 128, 72, 85, 78, 68, 82,
-    69, 68, 211, 72, 85, 78, 68, 82, 69, 68, 128, 72, 85, 78, 68, 82, 69,
-    196, 72, 85, 78, 128, 72, 85, 77, 208, 72, 85, 77, 65, 78, 128, 72, 85,
-    77, 65, 206, 72, 85, 76, 50, 128, 72, 85, 73, 73, 84, 79, 128, 72, 85,
-    71, 71, 73, 78, 199, 72, 85, 66, 50, 128, 72, 85, 66, 178, 72, 85, 66,
-    128, 72, 85, 65, 82, 65, 68, 68, 79, 128, 72, 85, 65, 78, 128, 72, 85,
-    45, 51, 128, 72, 85, 45, 50, 128, 72, 85, 45, 49, 128, 72, 84, 83, 128,
-    72, 84, 74, 128, 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72,
-    80, 65, 128, 72, 80, 128, 72, 79, 85, 83, 197, 72, 79, 85, 82, 71, 76,
-    65, 83, 83, 128, 72, 79, 85, 82, 71, 76, 65, 83, 211, 72, 79, 85, 82,
-    128, 72, 79, 85, 210, 72, 79, 84, 69, 76, 128, 72, 79, 84, 65, 128, 72,
-    79, 83, 80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, 128, 72, 79, 82, 83,
-    197, 72, 79, 82, 82, 128, 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90,
-    79, 78, 84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
-    48, 54, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
-    54, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54,
-    45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45,
-    48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48,
-    50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49,
-    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128,
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72,
-    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79,
-    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82,
-    73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73,
-    90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90,
-    79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79,
-    78, 84, 65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78,
-    84, 65, 76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84,
-    65, 76, 45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
-    76, 45, 48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
-    45, 48, 52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
-    48, 52, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
-    52, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52,
-    45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45,
-    48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48,
-    53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52,
-    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128,
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72,
-    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79,
-    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82,
-    73, 90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73,
-    90, 79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90,
-    79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79,
-    78, 84, 65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78,
-    84, 65, 76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84,
-    65, 76, 45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
-    76, 45, 48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
-    45, 48, 49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
-    48, 49, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
-    49, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49,
-    45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45,
-    48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48,
-    49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48,
-    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128,
-    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72,
-    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79,
-    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82,
-    73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73,
-    90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90,
-    79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79,
-    78, 84, 65, 76, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 72, 79, 82,
-    73, 128, 72, 79, 82, 193, 72, 79, 79, 85, 128, 72, 79, 79, 82, 85, 128,
-    72, 79, 79, 80, 128, 72, 79, 79, 78, 128, 72, 79, 79, 75, 69, 68, 128,
-    72, 79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78,
-    69, 217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84,
-    72, 69, 84, 73, 195, 72, 79, 76, 79, 128, 72, 79, 76, 76, 79, 215, 72,
-    79, 76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 65, 77, 128,
-    72, 79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 79, 67, 75, 69, 217, 72,
-    79, 67, 72, 79, 128, 72, 79, 45, 56, 128, 72, 79, 45, 55, 128, 72, 79,
-    45, 54, 128, 72, 79, 45, 53, 128, 72, 79, 45, 52, 128, 72, 79, 45, 51,
-    128, 72, 79, 45, 50, 128, 72, 79, 45, 49, 128, 72, 78, 85, 84, 128, 72,
-    78, 85, 79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 85, 66, 128, 72, 78,
-    79, 88, 128, 72, 78, 79, 84, 128, 72, 78, 79, 80, 128, 72, 78, 73, 88,
-    128, 72, 78, 73, 84, 128, 72, 78, 73, 80, 128, 72, 78, 73, 69, 88, 128,
-    72, 78, 73, 69, 84, 128, 72, 78, 73, 69, 80, 128, 72, 78, 73, 69, 128,
-    72, 78, 73, 128, 72, 78, 69, 88, 128, 72, 78, 69, 80, 128, 72, 78, 69,
-    128, 72, 78, 65, 88, 128, 72, 78, 65, 85, 128, 72, 78, 65, 84, 128, 72,
-    78, 65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, 128, 72, 77, 89, 82,
-    88, 128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, 72, 77, 89, 128, 72,
-    77, 85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, 82, 88, 128, 72, 77,
-    85, 82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, 88, 128, 72, 77, 85,
-    79, 80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, 72, 77, 79, 88, 128,
-    72, 77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, 79, 128, 72, 77, 73,
-    88, 128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, 72, 77, 73, 69, 88,
-    128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, 72, 77, 73, 128, 72,
-    77, 69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, 128, 72, 77, 65, 80,
-    128, 72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, 89, 84, 128, 72, 76,
-    89, 82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, 80, 128, 72, 76, 89,
-    128, 72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, 76, 85, 82, 88, 128,
-    72, 76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, 85, 79, 88, 128, 72,
-    76, 85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, 85, 128, 72, 76, 79,
-    88, 128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, 76, 73, 88, 128, 72,
-    76, 73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, 69, 88, 128, 72, 76,
-    73, 69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, 128, 72, 76, 69, 88,
-    128, 72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 65, 88, 128, 72, 76,
-    65, 85, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128,
-    72, 76, 128, 72, 75, 128, 72, 73, 90, 66, 128, 72, 73, 89, 79, 128, 72,
-    73, 84, 84, 73, 78, 199, 72, 73, 83, 84, 79, 82, 73, 195, 72, 73, 82, 73,
-    81, 128, 72, 73, 80, 80, 79, 80, 79, 84, 65, 77, 85, 83, 128, 72, 73, 78,
-    71, 69, 68, 128, 72, 73, 78, 71, 69, 196, 72, 73, 78, 71, 69, 128, 72,
-    73, 78, 68, 213, 72, 73, 75, 73, 78, 199, 72, 73, 71, 72, 45, 83, 80, 69,
-    69, 196, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72,
-    73, 71, 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69, 196,
-    72, 73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128, 72, 73,
-    69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45, 80, 73,
-    69, 85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128, 72, 73,
-    69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72, 73, 69,
-    82, 79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68, 73, 78,
+    128, 75, 78, 85, 67, 75, 76, 69, 128, 75, 78, 79, 84, 128, 75, 78, 79,
+    66, 83, 128, 75, 78, 73, 71, 72, 84, 45, 82, 79, 79, 75, 128, 75, 78, 73,
+    71, 72, 84, 45, 81, 85, 69, 69, 78, 128, 75, 78, 73, 71, 72, 84, 45, 66,
+    73, 83, 72, 79, 80, 128, 75, 78, 73, 71, 72, 84, 128, 75, 78, 73, 71, 72,
+    212, 75, 78, 73, 70, 69, 128, 75, 78, 73, 70, 197, 75, 78, 69, 69, 76,
+    73, 78, 199, 75, 77, 128, 75, 205, 75, 76, 73, 84, 79, 78, 128, 75, 76,
+    65, 83, 77, 65, 128, 75, 76, 65, 83, 77, 193, 75, 76, 65, 128, 75, 76,
+    128, 75, 75, 79, 128, 75, 75, 73, 128, 75, 75, 69, 69, 128, 75, 75, 69,
+    128, 75, 75, 65, 128, 75, 75, 128, 75, 74, 69, 128, 75, 73, 89, 69, 79,
+    75, 45, 84, 73, 75, 69, 85, 84, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73,
+    79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 75, 73, 89, 69, 79, 75, 45, 82,
+    73, 69, 85, 76, 128, 75, 73, 89, 69, 79, 75, 45, 80, 73, 69, 85, 80, 128,
+    75, 73, 89, 69, 79, 75, 45, 78, 73, 69, 85, 78, 128, 75, 73, 89, 69, 79,
+    75, 45, 75, 72, 73, 69, 85, 75, 72, 128, 75, 73, 89, 69, 79, 75, 45, 67,
+    72, 73, 69, 85, 67, 72, 128, 75, 73, 89, 69, 79, 203, 75, 73, 88, 128,
+    75, 73, 87, 73, 70, 82, 85, 73, 84, 128, 75, 73, 87, 128, 75, 73, 86,
+    128, 75, 73, 84, 69, 128, 75, 73, 84, 128, 75, 73, 83, 83, 73, 78, 199,
+    75, 73, 83, 83, 128, 75, 73, 83, 211, 75, 73, 83, 73, 77, 53, 128, 75,
+    73, 83, 73, 77, 181, 75, 73, 83, 72, 128, 75, 73, 83, 65, 76, 128, 75,
+    73, 82, 79, 87, 65, 84, 84, 79, 128, 75, 73, 82, 79, 77, 69, 69, 84, 79,
+    82, 85, 128, 75, 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 73, 82, 79,
+    128, 75, 73, 82, 71, 72, 73, 218, 75, 73, 81, 128, 75, 73, 80, 128, 75,
+    73, 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 78, 78, 193, 75, 73,
+    78, 68, 69, 82, 71, 65, 82, 84, 69, 78, 128, 75, 73, 77, 79, 78, 79, 128,
+    75, 73, 76, 76, 69, 82, 128, 75, 73, 73, 90, 72, 128, 75, 73, 73, 128,
+    75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 86, 65, 206, 75, 73,
+    69, 80, 128, 75, 73, 69, 69, 77, 128, 75, 73, 69, 128, 75, 73, 68, 128,
+    75, 73, 196, 75, 73, 67, 75, 128, 75, 73, 66, 128, 75, 73, 65, 86, 128,
+    75, 73, 65, 66, 128, 75, 73, 45, 56, 128, 75, 73, 45, 55, 128, 75, 73,
+    45, 54, 128, 75, 73, 45, 53, 128, 75, 73, 45, 52, 128, 75, 73, 45, 51,
+    128, 75, 73, 45, 50, 128, 75, 73, 45, 49, 128, 75, 72, 90, 128, 75, 72,
+    87, 65, 73, 128, 75, 72, 85, 69, 78, 45, 76, 85, 197, 75, 72, 85, 69,
+    206, 75, 72, 85, 68, 65, 87, 65, 68, 201, 75, 72, 85, 68, 65, 77, 128,
+    75, 72, 85, 65, 84, 128, 75, 72, 79, 85, 128, 75, 72, 79, 212, 75, 72,
+    79, 78, 78, 65, 128, 75, 72, 79, 78, 128, 75, 72, 79, 77, 85, 84, 128,
+    75, 72, 79, 74, 75, 201, 75, 72, 79, 128, 75, 72, 207, 75, 72, 77, 213,
+    75, 72, 73, 84, 128, 75, 72, 73, 78, 89, 65, 128, 75, 72, 73, 69, 85, 75,
+    200, 75, 72, 73, 128, 75, 72, 201, 75, 72, 72, 79, 128, 75, 72, 72, 65,
+    128, 75, 72, 69, 84, 72, 128, 75, 72, 69, 73, 128, 75, 72, 69, 69, 128,
+    75, 72, 69, 128, 75, 72, 65, 86, 128, 75, 72, 65, 82, 79, 83, 72, 84, 72,
+    201, 75, 72, 65, 82, 128, 75, 72, 65, 80, 72, 128, 75, 72, 65, 78, 199,
+    75, 72, 65, 78, 68, 193, 75, 72, 65, 77, 84, 201, 75, 72, 65, 75, 65, 83,
+    83, 73, 65, 206, 75, 72, 65, 73, 128, 75, 72, 65, 72, 128, 75, 72, 65,
+    200, 75, 72, 65, 70, 128, 75, 72, 65, 66, 128, 75, 72, 65, 65, 128, 75,
+    71, 128, 75, 69, 89, 67, 65, 80, 128, 75, 69, 89, 67, 65, 208, 75, 69,
+    89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 66, 79, 65, 82, 196, 75, 69, 88,
+    128, 75, 69, 86, 128, 75, 69, 85, 89, 69, 85, 88, 128, 75, 69, 85, 83,
+    72, 69, 85, 65, 69, 80, 128, 75, 69, 85, 83, 69, 85, 88, 128, 75, 69, 85,
+    80, 85, 81, 128, 75, 69, 85, 79, 212, 75, 69, 85, 77, 128, 75, 69, 85,
+    75, 69, 85, 84, 78, 68, 65, 128, 75, 69, 85, 75, 65, 81, 128, 75, 69, 85,
+    65, 69, 84, 77, 69, 85, 78, 128, 75, 69, 85, 65, 69, 82, 73, 128, 75, 69,
+    84, 84, 201, 75, 69, 83, 72, 50, 128, 75, 69, 82, 69, 84, 128, 75, 69,
+    79, 87, 128, 75, 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 69, 78, 84, 73,
+    77, 65, 84, 193, 75, 69, 78, 84, 73, 77, 193, 75, 69, 78, 65, 84, 128,
+    75, 69, 78, 128, 75, 69, 206, 75, 69, 77, 80, 85, 76, 128, 75, 69, 77,
+    80, 85, 204, 75, 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 76, 201, 75,
+    69, 77, 80, 72, 82, 69, 78, 71, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75,
+    69, 76, 86, 73, 206, 75, 69, 72, 69, 72, 128, 75, 69, 72, 69, 200, 75,
+    69, 72, 128, 75, 69, 70, 85, 76, 65, 128, 75, 69, 69, 86, 128, 75, 69,
+    69, 83, 85, 128, 75, 69, 69, 80, 73, 78, 199, 75, 69, 69, 78, 71, 128,
+    75, 69, 69, 66, 128, 75, 69, 66, 128, 75, 69, 65, 65, 69, 128, 75, 67,
+    65, 76, 128, 75, 66, 128, 75, 65, 90, 65, 75, 200, 75, 65, 89, 65, 78,
+    78, 65, 128, 75, 65, 89, 65, 200, 75, 65, 88, 128, 75, 65, 87, 86, 128,
+    75, 65, 87, 73, 128, 75, 65, 87, 66, 128, 75, 65, 86, 89, 75, 65, 128,
+    75, 65, 86, 89, 75, 193, 75, 65, 86, 128, 75, 65, 85, 86, 128, 75, 65,
+    85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 85, 66, 128, 75, 65, 84, 79,
+    128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 65, 84, 72, 65, 75, 193,
+    75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 65, 84, 65, 86, 193, 75, 65,
+    84, 65, 75, 65, 78, 65, 45, 72, 73, 82, 65, 71, 65, 78, 193, 75, 65, 83,
+    82, 65, 84, 65, 78, 128, 75, 65, 83, 82, 65, 84, 65, 206, 75, 65, 83, 82,
+    65, 128, 75, 65, 83, 82, 193, 75, 65, 83, 75, 65, 76, 128, 75, 65, 83,
+    75, 65, 204, 75, 65, 83, 72, 77, 73, 82, 201, 75, 65, 82, 83, 72, 65, 78,
+    65, 128, 75, 65, 82, 79, 82, 73, 73, 128, 75, 65, 82, 79, 82, 65, 78,
+    128, 75, 65, 82, 79, 82, 128, 75, 65, 82, 207, 75, 65, 82, 69, 206, 75,
+    65, 82, 65, 84, 84, 79, 128, 75, 65, 82, 65, 78, 128, 75, 65, 80, 89, 69,
+    79, 85, 78, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 75, 65, 80, 89,
+    69, 79, 85, 78, 82, 73, 69, 85, 76, 128, 75, 65, 80, 89, 69, 79, 85, 78,
+    80, 72, 73, 69, 85, 80, 72, 128, 75, 65, 80, 89, 69, 79, 85, 78, 77, 73,
+    69, 85, 77, 128, 75, 65, 80, 80, 65, 128, 75, 65, 80, 80, 193, 75, 65,
+    80, 79, 128, 75, 65, 80, 72, 128, 75, 65, 80, 65, 76, 128, 75, 65, 80,
+    65, 128, 75, 65, 208, 75, 65, 78, 84, 65, 74, 193, 75, 65, 78, 78, 65,
+    68, 193, 75, 65, 78, 71, 65, 82, 79, 79, 128, 75, 65, 78, 71, 128, 75,
+    65, 78, 199, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, 65,
+    77, 50, 128, 75, 65, 77, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66,
+    65, 84, 128, 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 86, 128, 75, 65,
+    73, 84, 72, 201, 75, 65, 73, 82, 73, 128, 75, 65, 73, 66, 128, 75, 65,
+    73, 128, 75, 65, 201, 75, 65, 70, 65, 128, 75, 65, 70, 128, 75, 65, 198,
+    75, 65, 68, 53, 128, 75, 65, 68, 181, 75, 65, 68, 52, 128, 75, 65, 68,
+    51, 128, 75, 65, 68, 179, 75, 65, 68, 50, 128, 75, 65, 68, 128, 75, 65,
+    66, 193, 75, 65, 66, 128, 75, 65, 65, 86, 128, 75, 65, 65, 73, 128, 75,
+    65, 65, 70, 85, 128, 75, 65, 65, 70, 128, 75, 65, 65, 67, 85, 128, 75,
+    65, 65, 66, 65, 128, 75, 65, 65, 66, 128, 75, 65, 50, 128, 75, 65, 178,
+    75, 65, 45, 75, 69, 128, 75, 65, 45, 57, 128, 75, 65, 45, 56, 128, 75,
+    65, 45, 55, 128, 75, 65, 45, 54, 128, 75, 65, 45, 53, 128, 75, 65, 45,
+    52, 128, 75, 65, 45, 51, 128, 75, 65, 45, 50, 128, 75, 65, 45, 49, 49,
+    128, 75, 65, 45, 49, 48, 128, 75, 65, 45, 49, 128, 75, 48, 48, 56, 128,
+    75, 48, 48, 55, 128, 75, 48, 48, 54, 128, 75, 48, 48, 53, 128, 75, 48,
+    48, 52, 128, 75, 48, 48, 51, 128, 75, 48, 48, 50, 128, 75, 48, 48, 49,
+    128, 74, 87, 65, 128, 74, 85, 85, 128, 74, 85, 84, 128, 74, 85, 83, 84,
+    73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 74, 85, 80, 73, 84, 69, 82, 128,
+    74, 85, 79, 84, 128, 74, 85, 79, 80, 128, 74, 85, 78, 79, 128, 74, 85,
+    78, 71, 83, 69, 79, 78, 199, 74, 85, 78, 69, 128, 74, 85, 76, 89, 128,
+    74, 85, 71, 71, 76, 73, 78, 71, 128, 74, 85, 69, 85, 73, 128, 74, 85, 68,
+    85, 76, 128, 74, 85, 68, 71, 69, 128, 74, 85, 68, 69, 79, 45, 83, 80, 65,
+    78, 73, 83, 200, 74, 79, 89, 83, 84, 73, 67, 75, 128, 74, 79, 89, 79, 85,
+    211, 74, 79, 89, 128, 74, 79, 86, 69, 128, 74, 79, 212, 74, 79, 78, 71,
+    128, 74, 79, 78, 193, 74, 79, 75, 69, 82, 128, 74, 79, 73, 78, 84, 83,
+    128, 74, 79, 73, 78, 69, 68, 128, 74, 79, 73, 78, 128, 74, 79, 65, 128,
+    74, 78, 89, 65, 128, 74, 74, 89, 88, 128, 74, 74, 89, 84, 128, 74, 74,
+    89, 80, 128, 74, 74, 89, 128, 74, 74, 85, 88, 128, 74, 74, 85, 84, 128,
+    74, 74, 85, 82, 88, 128, 74, 74, 85, 82, 128, 74, 74, 85, 80, 128, 74,
+    74, 85, 79, 88, 128, 74, 74, 85, 79, 80, 128, 74, 74, 85, 79, 128, 74,
+    74, 85, 128, 74, 74, 79, 88, 128, 74, 74, 79, 84, 128, 74, 74, 79, 80,
+    128, 74, 74, 79, 128, 74, 74, 73, 88, 128, 74, 74, 73, 84, 128, 74, 74,
+    73, 80, 128, 74, 74, 73, 69, 88, 128, 74, 74, 73, 69, 84, 128, 74, 74,
+    73, 69, 80, 128, 74, 74, 73, 69, 128, 74, 74, 73, 128, 74, 74, 69, 69,
+    128, 74, 74, 69, 128, 74, 74, 65, 128, 74, 73, 76, 128, 74, 73, 73, 77,
+    128, 74, 73, 73, 128, 74, 73, 72, 86, 65, 77, 85, 76, 73, 89, 65, 128,
+    74, 73, 71, 83, 65, 215, 74, 73, 65, 128, 74, 72, 79, 88, 128, 74, 72,
+    79, 128, 74, 72, 69, 72, 128, 74, 72, 65, 89, 73, 78, 128, 74, 72, 65,
+    78, 128, 74, 72, 65, 77, 128, 74, 72, 65, 65, 128, 74, 72, 65, 128, 74,
+    69, 85, 128, 74, 69, 82, 85, 83, 65, 76, 69, 77, 128, 74, 69, 82, 65,
+    206, 74, 69, 82, 65, 128, 74, 69, 82, 128, 74, 69, 72, 128, 74, 69, 200,
+    74, 69, 71, 79, 71, 65, 78, 128, 74, 69, 69, 77, 128, 74, 69, 69, 205,
+    74, 69, 65, 78, 83, 128, 74, 65, 89, 78, 128, 74, 65, 89, 73, 78, 128,
+    74, 65, 89, 65, 78, 78, 65, 128, 74, 65, 87, 128, 74, 65, 86, 73, 89, 65,
+    78, 73, 128, 74, 65, 86, 65, 78, 69, 83, 197, 74, 65, 85, 128, 74, 65,
+    82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 65, 80, 65, 78, 128, 74,
+    65, 78, 85, 65, 82, 89, 128, 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, 79,
+    85, 72, 79, 85, 128, 74, 65, 73, 206, 74, 65, 73, 128, 74, 65, 72, 128,
+    74, 65, 68, 69, 128, 74, 65, 67, 75, 83, 128, 74, 65, 67, 75, 45, 79, 45,
+    76, 65, 78, 84, 69, 82, 78, 128, 74, 65, 67, 203, 74, 45, 83, 73, 77, 80,
+    76, 73, 70, 73, 69, 196, 73, 90, 72, 73, 84, 83, 65, 128, 73, 90, 72, 73,
+    84, 83, 193, 73, 90, 72, 69, 128, 73, 90, 65, 75, 65, 89, 193, 73, 89,
+    69, 75, 128, 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 84,
+    211, 73, 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83,
+    83, 72, 65, 82, 128, 73, 83, 79, 83, 67, 69, 76, 69, 211, 73, 83, 79, 78,
+    128, 73, 83, 79, 206, 73, 83, 79, 76, 65, 84, 69, 128, 73, 83, 76, 65,
+    78, 68, 128, 73, 83, 69, 78, 45, 73, 83, 69, 78, 128, 73, 83, 65, 75, 73,
+    193, 73, 83, 45, 80, 73, 76, 76, 65, 128, 73, 82, 85, 89, 65, 78, 78, 65,
+    128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 73, 82, 79, 78, 45, 67, 79,
+    80, 80, 69, 210, 73, 82, 79, 78, 128, 73, 82, 66, 128, 73, 79, 84, 73,
+    70, 73, 69, 196, 73, 79, 84, 65, 84, 69, 196, 73, 79, 84, 65, 128, 73,
+    79, 84, 193, 73, 79, 82, 128, 73, 79, 78, 71, 128, 73, 79, 68, 72, 65,
+    68, 72, 128, 73, 78, 86, 73, 83, 73, 66, 76, 197, 73, 78, 86, 69, 82, 84,
+    69, 68, 128, 73, 78, 86, 69, 82, 84, 69, 196, 73, 78, 86, 69, 82, 84, 69,
+    66, 82, 65, 84, 69, 128, 73, 78, 86, 69, 82, 83, 197, 73, 78, 84, 82, 79,
+    68, 85, 67, 69, 82, 128, 73, 78, 84, 73, 128, 73, 78, 84, 69, 82, 83, 89,
+    76, 76, 65, 66, 73, 195, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 78,
+    128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 73, 78, 84, 69, 82,
+    83, 69, 67, 84, 73, 78, 199, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 71,
+    128, 73, 78, 84, 69, 82, 82, 79, 66, 65, 78, 199, 73, 78, 84, 69, 82, 80,
+    79, 76, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, 69, 196,
+    73, 78, 84, 69, 82, 76, 73, 78, 69, 65, 210, 73, 78, 84, 69, 82, 76, 65,
+    67, 69, 196, 73, 78, 84, 69, 82, 73, 79, 210, 73, 78, 84, 69, 82, 69, 83,
+    212, 73, 78, 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 73, 78, 84, 69, 71,
+    82, 65, 84, 73, 79, 78, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 206,
+    73, 78, 84, 69, 71, 82, 65, 76, 128, 73, 78, 84, 69, 71, 82, 65, 204, 73,
+    78, 83, 85, 76, 65, 210, 73, 78, 83, 84, 82, 85, 77, 69, 78, 84, 65, 204,
+    73, 78, 83, 73, 68, 69, 128, 73, 78, 83, 73, 68, 197, 73, 78, 83, 69, 82,
+    84, 73, 79, 206, 73, 78, 83, 69, 82, 212, 73, 78, 83, 69, 67, 84, 128,
+    73, 78, 83, 67, 82, 73, 80, 84, 73, 79, 78, 65, 204, 73, 78, 80, 85, 212,
+    73, 78, 78, 79, 67, 69, 78, 67, 69, 128, 73, 78, 78, 78, 128, 73, 78, 78,
+    69, 82, 128, 73, 78, 78, 69, 210, 73, 78, 78, 128, 73, 78, 73, 78, 71,
+    85, 128, 73, 78, 72, 73, 66, 73, 212, 73, 78, 72, 69, 82, 69, 78, 212,
+    73, 78, 72, 65, 76, 69, 128, 73, 78, 71, 87, 65, 90, 128, 73, 78, 70, 79,
+    82, 77, 65, 84, 73, 79, 206, 73, 78, 70, 76, 85, 69, 78, 67, 69, 128, 73,
+    78, 70, 73, 78, 73, 84, 89, 128, 73, 78, 70, 73, 78, 73, 84, 217, 73, 78,
+    68, 85, 83, 84, 82, 73, 65, 204, 73, 78, 68, 73, 82, 69, 67, 212, 73, 78,
+    68, 73, 67, 84, 73, 79, 206, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 73,
+    78, 68, 73, 67, 65, 84, 79, 210, 73, 78, 68, 73, 195, 73, 78, 68, 73, 65,
+    206, 73, 78, 68, 69, 88, 128, 73, 78, 68, 69, 80, 69, 78, 68, 69, 78,
+    212, 73, 78, 67, 82, 69, 77, 69, 78, 84, 128, 73, 78, 67, 82, 69, 65, 83,
+    69, 211, 73, 78, 67, 82, 69, 65, 83, 69, 128, 73, 78, 67, 82, 69, 65, 83,
+    197, 73, 78, 67, 79, 77, 80, 76, 69, 84, 197, 73, 78, 67, 79, 77, 73, 78,
+    199, 73, 78, 67, 76, 85, 68, 73, 78, 199, 73, 78, 67, 72, 128, 73, 78,
+    66, 79, 216, 73, 78, 65, 80, 128, 73, 78, 45, 65, 76, 65, 70, 128, 73,
+    77, 80, 69, 82, 73, 65, 204, 73, 77, 80, 69, 82, 70, 69, 67, 84, 85, 205,
+    73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 73, 77, 80, 69, 82, 70, 69,
+    67, 84, 193, 73, 77, 78, 128, 73, 77, 73, 83, 69, 79, 211, 73, 77, 73,
+    78, 51, 128, 73, 77, 73, 78, 128, 73, 77, 73, 206, 73, 77, 73, 70, 84,
+    72, 79, 82, 79, 78, 128, 73, 77, 73, 70, 84, 72, 79, 82, 65, 128, 73, 77,
+    73, 70, 79, 78, 79, 78, 128, 73, 77, 73, 68, 73, 65, 82, 71, 79, 78, 128,
+    73, 77, 65, 71, 197, 73, 76, 85, 89, 65, 78, 78, 65, 128, 73, 76, 85, 89,
+    128, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, 76, 85, 84, 128, 73,
+    76, 73, 77, 77, 85, 52, 128, 73, 76, 73, 77, 77, 85, 51, 128, 73, 76, 73,
+    77, 77, 85, 128, 73, 76, 73, 77, 77, 213, 73, 76, 50, 128, 73, 75, 65,
+    82, 65, 128, 73, 75, 65, 82, 193, 73, 74, 128, 73, 73, 89, 65, 78, 78,
+    65, 128, 73, 71, 73, 128, 73, 71, 201, 73, 71, 71, 87, 83, 128, 73, 70,
+    73, 78, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, 85, 84, 128, 73, 69,
+    85, 78, 71, 45, 84, 72, 73, 69, 85, 84, 72, 128, 73, 69, 85, 78, 71, 45,
+    82, 73, 69, 85, 76, 128, 73, 69, 85, 78, 71, 45, 80, 73, 69, 85, 80, 128,
+    73, 69, 85, 78, 71, 45, 80, 72, 73, 69, 85, 80, 72, 128, 73, 69, 85, 78,
+    71, 45, 67, 73, 69, 85, 67, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69,
+    85, 67, 72, 128, 73, 69, 85, 78, 199, 73, 68, 76, 69, 128, 73, 68, 73,
+    77, 128, 73, 68, 73, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 68, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 67, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 66, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 65, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 57, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 56, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 55, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 54, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 53, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 52, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 51, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 50, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 49, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65,
+    48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 65, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    70, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    69, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 69, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    68, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 68, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    67, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 67, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    66, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 66, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    65, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    57, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 56, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    54, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    53, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 53, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 52, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    51, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 51, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    50, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 54, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 50, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 69, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 65, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 52, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 69, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 67, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 56, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 70, 57, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57,
+    48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 50, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 57, 49, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 57, 48, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 68,
+    55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 67, 65, 57, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 56, 57, 69, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 55, 68, 52, 50, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 55, 65, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 55, 57, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 54,
+    68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 51, 51, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 55, 53, 49, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 55, 49, 50, 49, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 55, 48, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 54, 70, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 69,
+    56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 50, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 54, 55, 48, 56, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 54, 54, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 54, 53, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53,
+    57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 53, 53, 55, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 51, 53, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 54, 51, 48, 55, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 54, 50, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 54, 50, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 54, 50,
+    52, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 70, 56, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 68, 69, 54, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 53, 66, 56, 57, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 53, 66, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 53, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 57,
+    49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 56, 70, 48, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 53, 66, 54, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 53, 52, 51, 57, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 53, 52, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 53, 51, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 51,
+    67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 68, 68, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 53, 50, 55, 50, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 53, 50, 52, 68, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 53, 50, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 53, 49, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69,
+    65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 56, 67, 128,
+    73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 52, 69, 50, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 52, 69, 48, 57, 128, 73, 68, 69, 79, 71, 82,
+    65, 80, 72, 45, 52, 69, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 65, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 65, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
+    49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 65,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 57, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 56, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 55, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 65, 49, 54, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 65, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 65, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 65, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
+    49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 49,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 49, 48, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 69, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 65, 48, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 65, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 65, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 65, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
+    48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 56,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 55, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 54, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 65, 48, 53, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 65, 48, 52, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 65, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 65, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 65, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 65,
+    48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 70,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 69, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 67, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 70, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 70, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 70, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 70, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    70, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 54,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 53, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 52, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 70, 51, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 70, 50, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 70, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 70, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 69, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    69, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 68,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 67, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 65, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 69, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 69, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 69, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 69, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    69, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 52,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 51, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 50, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 69, 49, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 69, 48, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 68, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 68, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 68, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    68, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 66,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 65, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 56, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 68, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 68, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 68, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 68, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    68, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 50,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 49, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 68, 48, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 70, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 67, 69, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 67, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 67, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 67, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    67, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 57,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 56, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 54, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 67, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 67, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 67, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 67, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    67, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 67, 48,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 70, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 69, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 68, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 66, 67, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 66, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 66, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 66, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    66, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 55,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 54, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 66, 52, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 66, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 66, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 66, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 66, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    65, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 69,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 68, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 67, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 66, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 65, 65, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 65, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 65, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 65, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    65, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 53,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 52, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 65, 50, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 65, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 65, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 57, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 57, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    57, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 67,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 66, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 65, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 57, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 57, 56, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 57, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 57, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 57, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    57, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 51,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 50, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 57, 48, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 56, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 56, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 56, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 56, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    56, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 65,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 57, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 56, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 55, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 56, 54, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 56, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 56, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 56, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    56, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 49,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 56, 48, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 69, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 55, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 55, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 55, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 55, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    55, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 56,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 55, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 54, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 55, 53, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 55, 52, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 55, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 55, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 55, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    55, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 70,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 69, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 67, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 54, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 54, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 54, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 54, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    54, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 54,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 53, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 52, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 54, 51, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 54, 50, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 54, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 54, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 53, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    53, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 68,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 67, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 65, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 53, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 53, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 53, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 53, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    53, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 52,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 51, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 50, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 53, 49, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 53, 48, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 52, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 52, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 52, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    52, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 66,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 65, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 56, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 52, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 52, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 52, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 52, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    52, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 50,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 49, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 52, 48, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 70, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 51, 69, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 51, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 51, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 51, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    51, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 57,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 56, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 54, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 51, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 51, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 51, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 51, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    51, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 51, 48,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 70, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 69, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 68, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 50, 67, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 50, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 50, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 50, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    50, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 55,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 54, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 50, 52, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 50, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 50, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 50, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 50, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    49, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 69,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 68, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 67, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 66, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 49, 65, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 49, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 49, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 49, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    49, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 53,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 52, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 49, 50, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 49, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 49, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 48, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 48, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    48, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 67,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 66, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 65, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 57, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 57, 48, 56, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 57, 48, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 57, 48, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 57, 48, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57,
+    48, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 51,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 50, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 57, 48, 48, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 70, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 70, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 70, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 70, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    70, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 65,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 57, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 56, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 55, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 70, 54, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 70, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 70, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 70, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    70, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 49,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 70, 48, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 69, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 69, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 69, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 69, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 69, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    69, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 56,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 55, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 54, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 69, 53, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 69, 52, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 69, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 69, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 69, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    69, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 70,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 69, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 67, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 68, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 68, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 68, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 68, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    68, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 54,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 53, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 52, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 68, 51, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 68, 50, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 68, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 68, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 67, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    67, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 68,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 67, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 65, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 67, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 67, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 67, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 67, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    67, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 52,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 51, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 50, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 67, 49, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 67, 48, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 66, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 66, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 66, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    66, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 66,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 65, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 56, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 66, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 66, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 66, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 66, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    66, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 50,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 49, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 66, 48, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 70, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 65, 69, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 65, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 65, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 65, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    65, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 57,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 56, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 54, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 65, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 65, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 65, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 65, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    65, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 65, 48,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 70, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 69, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 68, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 57, 67, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 57, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 57, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 57, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    57, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 55,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 54, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 57, 52, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 57, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 57, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 57, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 57, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    56, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 69,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 68, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 67, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 66, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 56, 65, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 56, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 56, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 56, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    56, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 53,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 52, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 51, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 56, 50, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 56, 49, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 56, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 55, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 55, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    55, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 67,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 66, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 65, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 57, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 55, 56, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 55, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 55, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 55, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    55, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 51,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 50, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 49, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 55, 48, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 54, 70, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 54, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 54, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 54, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    54, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 65,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 57, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 56, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 55, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 54, 54, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 54, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 54, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 54, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    54, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 49,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 54, 48, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 70, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 69, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 53, 68, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 53, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 53, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 53, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    53, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 56,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 55, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 54, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 53, 53, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 53, 52, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 53, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 53, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 53, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    53, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 70,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 69, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 68, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 67, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 52, 66, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 52, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 52, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 52, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    52, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 54,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 53, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 52, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 52, 51, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 52, 50, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 52, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 52, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 51, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    51, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 68,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 67, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 66, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 65, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 51, 57, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 51, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 51, 55, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 51, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    51, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 52,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 51, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 50, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 51, 49, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 51, 48, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 50, 70, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 50, 69, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 50, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    50, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 66,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 65, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 57, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 56, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 50, 55, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 50, 54, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 50, 53, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 50, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    50, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 50,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 49, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 50, 48, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 70, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 49, 69, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 49, 68, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 49, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 49, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    49, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 57,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 56, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 55, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 54, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 49, 53, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 49, 52, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 49, 51, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 49, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    49, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 49, 48,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 70, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 69, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 68, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 48, 67, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 48, 66, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 48, 65, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 48, 57, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56,
+    48, 56, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 55,
+    128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 54, 128, 73,
+    68, 69, 79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 53, 128, 73, 68, 69,
+    79, 71, 82, 65, 80, 72, 45, 50, 70, 56, 48, 52, 128, 73, 68, 69, 79, 71,
+    82, 65, 80, 72, 45, 50, 70, 56, 48, 51, 128, 73, 68, 69, 79, 71, 82, 65,
+    80, 72, 45, 50, 70, 56, 48, 50, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72,
+    45, 50, 70, 56, 48, 49, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, 50,
+    70, 56, 48, 48, 128, 73, 68, 69, 79, 71, 82, 65, 80, 200, 73, 68, 69, 78,
+    84, 73, 70, 73, 67, 65, 84, 73, 79, 78, 128, 73, 68, 69, 78, 84, 73, 67,
+    65, 204, 73, 67, 79, 78, 128, 73, 67, 72, 79, 85, 128, 73, 67, 72, 79,
+    83, 128, 73, 67, 72, 73, 77, 65, 84, 79, 83, 128, 73, 67, 72, 65, 68, 73,
+    78, 128, 73, 67, 69, 76, 65, 78, 68, 73, 67, 45, 89, 82, 128, 73, 66, 73,
+    70, 73, 76, 73, 128, 73, 65, 85, 68, 65, 128, 73, 48, 49, 53, 128, 73,
+    48, 49, 52, 128, 73, 48, 49, 51, 128, 73, 48, 49, 50, 128, 73, 48, 49,
+    49, 65, 128, 73, 48, 49, 49, 128, 73, 48, 49, 48, 65, 128, 73, 48, 49,
+    48, 128, 73, 48, 48, 57, 65, 128, 73, 48, 48, 57, 128, 73, 48, 48, 56,
+    128, 73, 48, 48, 55, 128, 73, 48, 48, 54, 128, 73, 48, 48, 53, 65, 128,
+    73, 48, 48, 53, 128, 73, 48, 48, 52, 128, 73, 48, 48, 51, 128, 73, 48,
+    48, 50, 128, 73, 48, 48, 49, 128, 73, 45, 89, 85, 128, 73, 45, 89, 79,
+    128, 73, 45, 89, 69, 79, 128, 73, 45, 89, 69, 128, 73, 45, 89, 65, 69,
+    128, 73, 45, 89, 65, 45, 79, 128, 73, 45, 89, 65, 128, 73, 45, 79, 45,
+    73, 128, 73, 45, 79, 128, 73, 45, 69, 85, 128, 73, 45, 66, 69, 65, 77,
+    128, 73, 45, 65, 82, 65, 69, 65, 128, 73, 45, 65, 128, 72, 90, 90, 90,
+    71, 128, 72, 90, 90, 90, 128, 72, 90, 90, 80, 128, 72, 90, 90, 128, 72,
+    90, 87, 71, 128, 72, 90, 87, 128, 72, 90, 84, 128, 72, 90, 71, 128, 72,
+    89, 83, 84, 69, 82, 69, 83, 73, 211, 72, 89, 80, 79, 68, 73, 65, 83, 84,
+    79, 76, 69, 128, 72, 89, 80, 72, 69, 78, 65, 84, 73, 79, 206, 72, 89, 80,
+    72, 69, 78, 45, 77, 73, 78, 85, 83, 128, 72, 89, 80, 72, 69, 78, 128, 72,
+    89, 80, 72, 69, 206, 72, 89, 71, 73, 69, 73, 65, 128, 72, 89, 71, 73, 69,
+    65, 128, 72, 88, 87, 71, 128, 72, 88, 85, 79, 88, 128, 72, 88, 85, 79,
+    84, 128, 72, 88, 85, 79, 80, 128, 72, 88, 85, 79, 128, 72, 88, 79, 88,
+    128, 72, 88, 79, 84, 128, 72, 88, 79, 80, 128, 72, 88, 79, 128, 72, 88,
+    73, 88, 128, 72, 88, 73, 84, 128, 72, 88, 73, 80, 128, 72, 88, 73, 69,
+    88, 128, 72, 88, 73, 69, 84, 128, 72, 88, 73, 69, 80, 128, 72, 88, 73,
+    69, 128, 72, 88, 73, 128, 72, 88, 69, 88, 128, 72, 88, 69, 80, 128, 72,
+    88, 69, 128, 72, 88, 65, 88, 128, 72, 88, 65, 84, 128, 72, 88, 65, 80,
+    128, 72, 88, 65, 128, 72, 87, 85, 128, 72, 87, 65, 73, 82, 128, 72, 87,
+    65, 72, 128, 72, 85, 86, 65, 128, 72, 85, 83, 72, 69, 196, 72, 85, 83,
+    72, 128, 72, 85, 82, 65, 78, 128, 72, 85, 79, 84, 128, 72, 85, 78, 68,
+    82, 69, 68, 83, 128, 72, 85, 78, 68, 82, 69, 68, 211, 72, 85, 78, 68, 82,
+    69, 68, 128, 72, 85, 78, 68, 82, 69, 196, 72, 85, 78, 128, 72, 85, 77,
+    208, 72, 85, 77, 65, 78, 128, 72, 85, 77, 65, 206, 72, 85, 76, 50, 128,
+    72, 85, 73, 73, 84, 79, 128, 72, 85, 71, 71, 73, 78, 71, 128, 72, 85, 71,
+    71, 73, 78, 199, 72, 85, 66, 50, 128, 72, 85, 66, 178, 72, 85, 66, 128,
+    72, 85, 65, 82, 65, 68, 68, 79, 128, 72, 85, 65, 78, 128, 72, 85, 45, 51,
+    128, 72, 85, 45, 50, 128, 72, 85, 45, 49, 128, 72, 84, 83, 128, 72, 84,
+    74, 128, 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65,
+    128, 72, 80, 128, 72, 79, 85, 83, 197, 72, 79, 85, 82, 71, 76, 65, 83,
+    83, 128, 72, 79, 85, 82, 71, 76, 65, 83, 211, 72, 79, 85, 82, 128, 72,
+    79, 85, 210, 72, 79, 84, 69, 76, 128, 72, 79, 84, 65, 128, 72, 79, 83,
+    80, 73, 84, 65, 76, 128, 72, 79, 82, 83, 69, 128, 72, 79, 82, 83, 197,
+    72, 79, 82, 82, 128, 72, 79, 82, 78, 83, 128, 72, 79, 82, 73, 90, 79, 78,
+    84, 65, 76, 76, 217, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54,
+    45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45,
+    48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48,
+    52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 51,
+    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 50, 128,
+    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 49, 128, 72,
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 48, 128, 72, 79,
+    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 54, 128, 72, 79, 82,
+    73, 90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 53, 128, 72, 79, 82, 73,
+    90, 79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 52, 128, 72, 79, 82, 73, 90,
+    79, 78, 84, 65, 76, 45, 48, 53, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79,
+    78, 84, 65, 76, 45, 48, 53, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78,
+    84, 65, 76, 45, 48, 53, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84,
+    65, 76, 45, 48, 53, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
+    76, 45, 48, 52, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
+    45, 48, 52, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
+    48, 52, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
+    52, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52,
+    45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45,
+    48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 52, 45, 48,
+    48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 54,
+    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 53, 128,
+    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 52, 128, 72,
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 51, 128, 72, 79,
+    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 50, 128, 72, 79, 82,
+    73, 90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 49, 128, 72, 79, 82, 73,
+    90, 79, 78, 84, 65, 76, 45, 48, 51, 45, 48, 48, 128, 72, 79, 82, 73, 90,
+    79, 78, 84, 65, 76, 45, 48, 50, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79,
+    78, 84, 65, 76, 45, 48, 50, 45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78,
+    84, 65, 76, 45, 48, 50, 45, 48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84,
+    65, 76, 45, 48, 50, 45, 48, 51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65,
+    76, 45, 48, 50, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76,
+    45, 48, 50, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45,
+    48, 50, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48,
+    49, 45, 48, 54, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49,
+    45, 48, 53, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45,
+    48, 52, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48,
+    51, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 50,
+    128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 49, 128,
+    72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 49, 45, 48, 48, 128, 72,
+    79, 82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 54, 128, 72, 79,
+    82, 73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 53, 128, 72, 79, 82,
+    73, 90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 52, 128, 72, 79, 82, 73,
+    90, 79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 51, 128, 72, 79, 82, 73, 90,
+    79, 78, 84, 65, 76, 45, 48, 48, 45, 48, 50, 128, 72, 79, 82, 73, 90, 79,
+    78, 84, 65, 76, 45, 48, 48, 45, 48, 49, 128, 72, 79, 82, 73, 90, 79, 78,
+    84, 65, 76, 45, 48, 48, 45, 48, 48, 128, 72, 79, 82, 73, 90, 79, 78, 84,
+    65, 76, 128, 72, 79, 82, 73, 90, 79, 78, 84, 65, 204, 72, 79, 82, 73,
+    128, 72, 79, 82, 193, 72, 79, 79, 85, 128, 72, 79, 79, 82, 85, 128, 72,
+    79, 79, 80, 128, 72, 79, 79, 78, 128, 72, 79, 79, 75, 69, 68, 128, 72,
+    79, 79, 75, 69, 196, 72, 79, 78, 69, 89, 66, 69, 69, 128, 72, 79, 78, 69,
+    217, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 79, 77, 79, 84, 72,
+    69, 84, 73, 195, 72, 79, 76, 79, 128, 72, 79, 76, 76, 79, 215, 72, 79,
+    76, 69, 128, 72, 79, 76, 68, 73, 78, 199, 72, 79, 76, 65, 77, 128, 72,
+    79, 76, 65, 205, 72, 79, 75, 65, 128, 72, 79, 67, 75, 69, 217, 72, 79,
+    67, 72, 79, 128, 72, 79, 45, 56, 128, 72, 79, 45, 55, 128, 72, 79, 45,
+    54, 128, 72, 79, 45, 53, 128, 72, 79, 45, 52, 128, 72, 79, 45, 51, 128,
+    72, 79, 45, 50, 128, 72, 79, 45, 49, 128, 72, 78, 85, 84, 128, 72, 78,
+    85, 79, 88, 128, 72, 78, 85, 79, 128, 72, 78, 85, 66, 128, 72, 78, 79,
+    88, 128, 72, 78, 79, 84, 128, 72, 78, 79, 80, 128, 72, 78, 73, 88, 128,
+    72, 78, 73, 84, 128, 72, 78, 73, 80, 128, 72, 78, 73, 69, 88, 128, 72,
+    78, 73, 69, 84, 128, 72, 78, 73, 69, 80, 128, 72, 78, 73, 69, 128, 72,
+    78, 73, 128, 72, 78, 69, 88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 128,
+    72, 78, 65, 88, 128, 72, 78, 65, 85, 128, 72, 78, 65, 84, 128, 72, 78,
+    65, 80, 128, 72, 78, 65, 128, 72, 77, 89, 88, 128, 72, 77, 89, 82, 88,
+    128, 72, 77, 89, 82, 128, 72, 77, 89, 80, 128, 72, 77, 89, 128, 72, 77,
+    85, 88, 128, 72, 77, 85, 84, 128, 72, 77, 85, 82, 88, 128, 72, 77, 85,
+    82, 128, 72, 77, 85, 80, 128, 72, 77, 85, 79, 88, 128, 72, 77, 85, 79,
+    80, 128, 72, 77, 85, 79, 128, 72, 77, 85, 128, 72, 77, 79, 88, 128, 72,
+    77, 79, 84, 128, 72, 77, 79, 80, 128, 72, 77, 79, 128, 72, 77, 73, 88,
+    128, 72, 77, 73, 84, 128, 72, 77, 73, 80, 128, 72, 77, 73, 69, 88, 128,
+    72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 128, 72, 77, 73, 128, 72, 77,
+    69, 128, 72, 77, 65, 88, 128, 72, 77, 65, 84, 128, 72, 77, 65, 80, 128,
+    72, 77, 65, 128, 72, 76, 89, 88, 128, 72, 76, 89, 84, 128, 72, 76, 89,
+    82, 88, 128, 72, 76, 89, 82, 128, 72, 76, 89, 80, 128, 72, 76, 89, 128,
+    72, 76, 85, 88, 128, 72, 76, 85, 84, 128, 72, 76, 85, 82, 88, 128, 72,
+    76, 85, 82, 128, 72, 76, 85, 80, 128, 72, 76, 85, 79, 88, 128, 72, 76,
+    85, 79, 80, 128, 72, 76, 85, 79, 128, 72, 76, 85, 128, 72, 76, 79, 88,
+    128, 72, 76, 79, 80, 128, 72, 76, 79, 128, 72, 76, 73, 88, 128, 72, 76,
+    73, 84, 128, 72, 76, 73, 80, 128, 72, 76, 73, 69, 88, 128, 72, 76, 73,
+    69, 80, 128, 72, 76, 73, 69, 128, 72, 76, 73, 128, 72, 76, 69, 88, 128,
+    72, 76, 69, 80, 128, 72, 76, 69, 128, 72, 76, 65, 88, 128, 72, 76, 65,
+    85, 128, 72, 76, 65, 84, 128, 72, 76, 65, 80, 128, 72, 76, 65, 128, 72,
+    76, 128, 72, 75, 128, 72, 73, 90, 66, 128, 72, 73, 89, 79, 128, 72, 73,
+    84, 84, 73, 78, 199, 72, 73, 83, 84, 79, 82, 73, 195, 72, 73, 82, 73, 81,
+    128, 72, 73, 80, 80, 79, 80, 79, 84, 65, 77, 85, 83, 128, 72, 73, 78, 71,
+    69, 68, 128, 72, 73, 78, 71, 69, 196, 72, 73, 78, 71, 69, 128, 72, 73,
+    78, 68, 213, 72, 73, 75, 73, 78, 199, 72, 73, 71, 72, 45, 83, 80, 69, 69,
+    196, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73,
+    71, 72, 45, 76, 79, 215, 72, 73, 71, 72, 45, 72, 69, 69, 76, 69, 196, 72,
+    73, 69, 88, 128, 72, 73, 69, 85, 72, 45, 83, 73, 79, 83, 128, 72, 73, 69,
+    85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 73, 69, 85, 72, 45, 80, 73, 69,
+    85, 80, 128, 72, 73, 69, 85, 72, 45, 78, 73, 69, 85, 78, 128, 72, 73, 69,
+    85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 200, 72, 73, 69, 82,
+    79, 71, 76, 89, 80, 72, 73, 195, 72, 73, 69, 128, 72, 73, 68, 73, 78,
     199, 72, 73, 68, 69, 84, 128, 72, 73, 68, 69, 128, 72, 73, 66, 73, 83,
     67, 85, 83, 128, 72, 73, 45, 82, 69, 83, 128, 72, 73, 45, 55, 128, 72,
     73, 45, 54, 128, 72, 73, 45, 53, 128, 72, 73, 45, 52, 128, 72, 73, 45,
@@ -3945,128 +4000,129 @@
     65, 82, 84, 45, 83, 72, 65, 80, 69, 196, 72, 69, 65, 82, 84, 128, 72, 69,
     65, 82, 212, 72, 69, 65, 82, 73, 78, 199, 72, 69, 65, 82, 45, 78, 79, 45,
     69, 86, 73, 204, 72, 69, 65, 68, 83, 84, 82, 79, 75, 69, 128, 72, 69, 65,
-    68, 83, 84, 79, 78, 197, 72, 69, 65, 68, 83, 67, 65, 82, 70, 128, 72, 69,
-    65, 68, 80, 72, 79, 78, 69, 128, 72, 69, 65, 68, 73, 78, 71, 128, 72, 69,
-    65, 68, 45, 66, 65, 78, 68, 65, 71, 69, 128, 72, 69, 45, 55, 128, 72, 69,
-    45, 54, 128, 72, 69, 45, 53, 128, 72, 69, 45, 52, 128, 72, 69, 45, 51,
-    128, 72, 69, 45, 50, 128, 72, 69, 45, 49, 128, 72, 68, 82, 128, 72, 67,
-    128, 72, 66, 65, 83, 65, 45, 69, 83, 65, 83, 193, 72, 66, 65, 83, 193,
-    72, 65, 89, 65, 78, 78, 65, 128, 72, 65, 87, 74, 128, 72, 65, 86, 69,
-    128, 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 65, 213, 72,
-    65, 84, 82, 65, 206, 72, 65, 84, 72, 73, 128, 72, 65, 84, 69, 128, 72,
-    65, 84, 67, 72, 73, 78, 199, 72, 65, 84, 65, 198, 72, 65, 83, 69, 210,
-    72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 82, 80, 79, 79, 78, 128, 72, 65,
-    82, 80, 79, 79, 206, 72, 65, 82, 77, 79, 78, 73, 67, 128, 72, 65, 82, 75,
-    76, 69, 65, 206, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 65, 82, 196,
-    72, 65, 82, 66, 65, 72, 65, 89, 128, 72, 65, 80, 80, 217, 72, 65, 78, 85,
-    78, 79, 207, 72, 65, 78, 73, 70, 201, 72, 65, 78, 71, 90, 72, 79, 213,
-    72, 65, 78, 68, 83, 72, 65, 75, 69, 128, 72, 65, 78, 68, 83, 128, 72, 65,
-    78, 68, 211, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69,
-    128, 72, 65, 78, 68, 66, 65, 76, 76, 128, 72, 65, 78, 68, 66, 65, 71,
-    128, 72, 65, 78, 68, 45, 79, 86, 65, 76, 128, 72, 65, 78, 68, 45, 79, 86,
-    65, 204, 72, 65, 78, 68, 45, 72, 79, 79, 75, 128, 72, 65, 78, 68, 45, 72,
-    79, 79, 203, 72, 65, 78, 68, 45, 72, 73, 78, 71, 69, 128, 72, 65, 78, 68,
-    45, 72, 73, 78, 71, 197, 72, 65, 78, 68, 45, 70, 76, 65, 84, 128, 72, 65,
-    78, 68, 45, 70, 76, 65, 212, 72, 65, 78, 68, 45, 70, 73, 83, 84, 128, 72,
-    65, 78, 68, 45, 67, 85, 82, 76, 73, 67, 85, 69, 128, 72, 65, 78, 68, 45,
-    67, 85, 82, 76, 73, 67, 85, 197, 72, 65, 78, 68, 45, 67, 85, 80, 128, 72,
-    65, 78, 68, 45, 67, 85, 208, 72, 65, 78, 68, 45, 67, 76, 65, 87, 128, 72,
-    65, 78, 68, 45, 67, 76, 65, 215, 72, 65, 78, 68, 45, 67, 73, 82, 67, 76,
-    69, 128, 72, 65, 78, 68, 45, 67, 73, 82, 67, 76, 197, 72, 65, 78, 68, 45,
-    65, 78, 71, 76, 69, 128, 72, 65, 78, 68, 45, 65, 78, 71, 76, 197, 72, 65,
-    78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65,
-    128, 72, 65, 77, 90, 193, 72, 65, 77, 83, 84, 69, 210, 72, 65, 77, 77,
-    69, 82, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 66, 85, 82, 71, 69, 82,
-    128, 72, 65, 76, 81, 65, 128, 72, 65, 76, 79, 128, 72, 65, 76, 70, 45,
-    67, 73, 82, 67, 76, 197, 72, 65, 76, 70, 45, 50, 128, 72, 65, 76, 70, 45,
-    49, 128, 72, 65, 76, 70, 128, 72, 65, 76, 66, 69, 82, 68, 128, 72, 65,
-    76, 65, 78, 84, 65, 128, 72, 65, 73, 84, 85, 128, 72, 65, 73, 211, 72,
-    65, 73, 82, 67, 85, 84, 128, 72, 65, 71, 76, 65, 218, 72, 65, 71, 76,
-    128, 72, 65, 70, 85, 75, 72, 65, 128, 72, 65, 70, 85, 75, 72, 128, 72,
-    65, 69, 71, 204, 72, 65, 68, 69, 83, 128, 72, 65, 65, 82, 85, 128, 72,
-    65, 65, 77, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 65, 45, 57,
-    128, 72, 65, 45, 56, 128, 72, 65, 45, 55, 128, 72, 65, 45, 54, 128, 72,
-    65, 45, 53, 128, 72, 65, 45, 52, 128, 72, 65, 45, 51, 128, 72, 65, 45,
-    50, 128, 72, 65, 45, 49, 49, 128, 72, 65, 45, 49, 48, 128, 72, 65, 45,
-    49, 128, 72, 48, 48, 56, 128, 72, 48, 48, 55, 128, 72, 48, 48, 54, 65,
-    128, 72, 48, 48, 54, 128, 72, 48, 48, 53, 128, 72, 48, 48, 52, 128, 72,
-    48, 48, 51, 128, 72, 48, 48, 50, 128, 72, 48, 48, 49, 128, 72, 45, 84,
-    89, 80, 197, 71, 89, 85, 128, 71, 89, 79, 78, 128, 71, 89, 79, 128, 71,
-    89, 73, 128, 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, 65, 83, 128,
-    71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 128, 71, 87, 85, 128, 71,
-    87, 73, 128, 71, 87, 69, 69, 128, 71, 87, 69, 128, 71, 87, 65, 65, 128,
-    71, 87, 65, 128, 71, 86, 65, 78, 71, 128, 71, 86, 128, 71, 85, 82, 85,
-    83, 72, 128, 71, 85, 82, 85, 78, 128, 71, 85, 82, 77, 85, 75, 72, 201,
-    71, 85, 82, 65, 77, 85, 84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78,
-    85, 128, 71, 85, 78, 213, 71, 85, 78, 74, 65, 76, 193, 71, 85, 205, 71,
-    85, 76, 128, 71, 85, 74, 65, 82, 65, 84, 201, 71, 85, 73, 84, 65, 82,
-    128, 71, 85, 73, 68, 197, 71, 85, 199, 71, 85, 69, 73, 128, 71, 85, 69,
-    72, 128, 71, 85, 69, 200, 71, 85, 68, 128, 71, 85, 196, 71, 85, 65, 82,
-    68, 83, 77, 65, 78, 128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, 83, 128,
-    71, 85, 65, 82, 68, 69, 196, 71, 85, 65, 82, 68, 128, 71, 85, 65, 82, 65,
-    78, 201, 71, 85, 193, 71, 85, 178, 71, 84, 69, 210, 71, 83, 85, 77, 128,
-    71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 87, 73, 78, 199, 71, 82, 79,
-    85, 78, 68, 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 71,
-    82, 73, 78, 78, 73, 78, 199, 71, 82, 73, 77, 65, 67, 73, 78, 199, 71, 82,
-    69, 71, 79, 82, 73, 65, 206, 71, 82, 69, 69, 78, 128, 71, 82, 69, 69,
-    206, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 69, 82,
-    45, 84, 72, 65, 78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 206,
-    71, 82, 69, 65, 84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 86, 69, 89,
-    65, 82, 196, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 71, 82,
-    65, 86, 69, 45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 71, 82,
-    65, 86, 197, 71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 83, 128, 71,
-    82, 65, 83, 211, 71, 82, 65, 83, 208, 71, 82, 65, 80, 72, 69, 77, 197,
-    71, 82, 65, 80, 69, 83, 128, 71, 82, 65, 78, 84, 72, 193, 71, 82, 65, 77,
-    77, 193, 71, 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79,
-    206, 71, 82, 65, 68, 85, 65, 76, 128, 71, 82, 65, 67, 69, 128, 71, 82,
-    65, 67, 197, 71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206,
-    71, 79, 82, 84, 128, 71, 79, 82, 73, 76, 76, 65, 128, 71, 79, 82, 71, 79,
-    84, 69, 82, 73, 128, 71, 79, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79,
-    78, 128, 71, 79, 82, 71, 79, 206, 71, 79, 82, 71, 73, 128, 71, 79, 82,
-    65, 128, 71, 79, 79, 196, 71, 79, 78, 71, 128, 71, 79, 76, 70, 69, 82,
-    128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 71, 79,
-    71, 71, 76, 69, 83, 128, 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76,
-    128, 71, 79, 65, 204, 71, 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78,
-    65, 86, 73, 89, 65, 78, 73, 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79,
-    86, 69, 83, 128, 71, 76, 79, 86, 69, 128, 71, 76, 79, 84, 84, 65, 204,
-    71, 76, 79, 66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73,
-    67, 200, 71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, 128, 71, 74, 69,
-    128, 71, 73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, 128, 71, 73, 83,
-    200, 71, 73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, 65, 128, 71, 73,
-    82, 76, 211, 71, 73, 82, 76, 128, 71, 73, 82, 65, 70, 70, 197, 71, 73,
-    82, 51, 128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71,
-    73, 80, 128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73,
-    77, 69, 204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 71, 128, 71,
-    73, 70, 212, 71, 73, 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66,
-    66, 79, 85, 211, 71, 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71,
-    72, 90, 128, 71, 72, 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72,
-    85, 78, 78, 193, 71, 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83,
-    84, 128, 71, 72, 79, 128, 71, 72, 73, 77, 69, 76, 128, 71, 72, 73, 128,
-    71, 72, 72, 65, 128, 71, 72, 69, 89, 83, 128, 71, 72, 69, 85, 88, 128,
-    71, 72, 69, 85, 78, 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128,
-    71, 72, 69, 85, 71, 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69,
-    128, 71, 72, 69, 85, 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84,
-    128, 71, 72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89,
-    78, 128, 71, 72, 65, 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65,
-    78, 128, 71, 72, 65, 77, 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71,
-    72, 65, 73, 78, 85, 128, 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206,
-    71, 72, 65, 68, 128, 71, 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65,
-    128, 71, 71, 87, 73, 128, 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128,
-    71, 71, 87, 65, 65, 128, 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71,
-    71, 85, 84, 128, 71, 71, 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71,
-    85, 79, 88, 128, 71, 71, 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71,
-    71, 85, 79, 128, 71, 71, 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79,
-    80, 128, 71, 71, 73, 88, 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88,
-    128, 71, 71, 73, 69, 80, 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128,
-    71, 71, 69, 84, 128, 71, 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71,
-    65, 84, 128, 71, 69, 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69,
-    83, 72, 85, 128, 71, 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73,
-    206, 71, 69, 83, 72, 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128,
-    71, 69, 82, 77, 65, 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83,
-    200, 71, 69, 79, 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77,
-    69, 84, 82, 73, 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86,
-    69, 128, 71, 69, 78, 73, 75, 201, 71, 69, 78, 73, 69, 128, 71, 69, 78,
-    69, 82, 73, 195, 71, 69, 78, 69, 82, 65, 76, 128, 71, 69, 77, 73, 78, 73,
+    68, 83, 84, 79, 78, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 72, 69,
+    65, 68, 83, 67, 65, 82, 70, 128, 72, 69, 65, 68, 80, 72, 79, 78, 69, 128,
+    72, 69, 65, 68, 73, 78, 71, 128, 72, 69, 65, 68, 45, 66, 65, 78, 68, 65,
+    71, 69, 128, 72, 69, 45, 55, 128, 72, 69, 45, 54, 128, 72, 69, 45, 53,
+    128, 72, 69, 45, 52, 128, 72, 69, 45, 51, 128, 72, 69, 45, 50, 128, 72,
+    69, 45, 49, 128, 72, 68, 82, 128, 72, 67, 128, 72, 66, 65, 83, 65, 45,
+    69, 83, 65, 83, 193, 72, 66, 65, 83, 193, 72, 65, 89, 65, 78, 78, 65,
+    128, 72, 65, 87, 74, 128, 72, 65, 86, 69, 128, 72, 65, 85, 80, 84, 83,
+    84, 73, 77, 77, 69, 128, 72, 65, 213, 72, 65, 84, 82, 65, 206, 72, 65,
+    84, 72, 73, 128, 72, 65, 84, 69, 128, 72, 65, 84, 67, 72, 73, 78, 199,
+    72, 65, 84, 65, 198, 72, 65, 83, 69, 210, 72, 65, 83, 65, 78, 84, 65,
+    128, 72, 65, 82, 80, 79, 79, 78, 128, 72, 65, 82, 80, 79, 79, 206, 72,
+    65, 82, 77, 79, 78, 73, 67, 128, 72, 65, 82, 75, 76, 69, 65, 206, 72, 65,
+    82, 68, 78, 69, 83, 83, 128, 72, 65, 82, 196, 72, 65, 82, 66, 65, 72, 65,
+    89, 128, 72, 65, 80, 80, 217, 72, 65, 78, 85, 78, 79, 207, 72, 65, 78,
+    73, 70, 201, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, 72, 65,
+    75, 69, 128, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 211, 72, 65, 78,
+    68, 76, 69, 83, 128, 72, 65, 78, 68, 76, 69, 128, 72, 65, 78, 68, 66, 65,
+    76, 76, 128, 72, 65, 78, 68, 66, 65, 71, 128, 72, 65, 78, 68, 45, 79, 86,
+    65, 76, 128, 72, 65, 78, 68, 45, 79, 86, 65, 204, 72, 65, 78, 68, 45, 72,
+    79, 79, 75, 128, 72, 65, 78, 68, 45, 72, 79, 79, 203, 72, 65, 78, 68, 45,
+    72, 73, 78, 71, 69, 128, 72, 65, 78, 68, 45, 72, 73, 78, 71, 197, 72, 65,
+    78, 68, 45, 70, 76, 65, 84, 128, 72, 65, 78, 68, 45, 70, 76, 65, 212, 72,
+    65, 78, 68, 45, 70, 73, 83, 84, 128, 72, 65, 78, 68, 45, 67, 85, 82, 76,
+    73, 67, 85, 69, 128, 72, 65, 78, 68, 45, 67, 85, 82, 76, 73, 67, 85, 197,
+    72, 65, 78, 68, 45, 67, 85, 80, 128, 72, 65, 78, 68, 45, 67, 85, 208, 72,
+    65, 78, 68, 45, 67, 76, 65, 87, 128, 72, 65, 78, 68, 45, 67, 76, 65, 215,
+    72, 65, 78, 68, 45, 67, 73, 82, 67, 76, 69, 128, 72, 65, 78, 68, 45, 67,
+    73, 82, 67, 76, 197, 72, 65, 78, 68, 45, 65, 78, 71, 76, 69, 128, 72, 65,
+    78, 68, 45, 65, 78, 71, 76, 197, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65,
+    75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 90, 193, 72, 65,
+    77, 83, 84, 69, 210, 72, 65, 77, 77, 69, 82, 128, 72, 65, 77, 77, 69,
+    210, 72, 65, 77, 66, 85, 82, 71, 69, 82, 128, 72, 65, 76, 81, 65, 128,
+    72, 65, 76, 79, 128, 72, 65, 76, 70, 45, 67, 73, 82, 67, 76, 197, 72, 65,
+    76, 70, 45, 50, 128, 72, 65, 76, 70, 45, 49, 128, 72, 65, 76, 70, 128,
+    72, 65, 76, 66, 69, 82, 68, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65,
+    73, 84, 85, 128, 72, 65, 73, 211, 72, 65, 73, 82, 67, 85, 84, 128, 72,
+    65, 71, 76, 65, 218, 72, 65, 71, 76, 128, 72, 65, 70, 85, 75, 72, 65,
+    128, 72, 65, 70, 85, 75, 72, 128, 72, 65, 69, 71, 204, 72, 65, 68, 69,
+    83, 128, 72, 65, 65, 82, 85, 128, 72, 65, 65, 77, 128, 72, 65, 193, 72,
+    65, 45, 72, 65, 128, 72, 65, 45, 57, 128, 72, 65, 45, 56, 128, 72, 65,
+    45, 55, 128, 72, 65, 45, 54, 128, 72, 65, 45, 53, 128, 72, 65, 45, 52,
+    128, 72, 65, 45, 51, 128, 72, 65, 45, 50, 128, 72, 65, 45, 49, 49, 128,
+    72, 65, 45, 49, 48, 128, 72, 65, 45, 49, 128, 72, 48, 48, 56, 128, 72,
+    48, 48, 55, 128, 72, 48, 48, 54, 65, 128, 72, 48, 48, 54, 128, 72, 48,
+    48, 53, 128, 72, 48, 48, 52, 128, 72, 48, 48, 51, 128, 72, 48, 48, 50,
+    128, 72, 48, 48, 49, 128, 72, 45, 84, 89, 80, 197, 71, 89, 85, 128, 71,
+    89, 79, 78, 128, 71, 89, 79, 128, 71, 89, 73, 128, 71, 89, 70, 213, 71,
+    89, 69, 69, 128, 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65,
+    128, 71, 89, 128, 71, 87, 85, 128, 71, 87, 73, 128, 71, 87, 69, 69, 128,
+    71, 87, 69, 128, 71, 87, 65, 65, 128, 71, 87, 65, 128, 71, 87, 128, 71,
+    86, 65, 78, 71, 128, 71, 86, 128, 71, 85, 82, 85, 83, 72, 128, 71, 85,
+    82, 85, 78, 128, 71, 85, 82, 77, 85, 75, 72, 201, 71, 85, 82, 65, 77, 85,
+    84, 79, 78, 128, 71, 85, 82, 55, 128, 71, 85, 78, 85, 128, 71, 85, 78,
+    213, 71, 85, 78, 74, 65, 76, 193, 71, 85, 205, 71, 85, 76, 128, 71, 85,
+    74, 65, 82, 65, 84, 201, 71, 85, 73, 84, 65, 82, 128, 71, 85, 73, 68,
+    197, 71, 85, 199, 71, 85, 69, 73, 128, 71, 85, 69, 72, 128, 71, 85, 69,
+    200, 71, 85, 68, 128, 71, 85, 196, 71, 85, 65, 82, 68, 83, 77, 65, 78,
+    128, 71, 85, 65, 82, 68, 69, 68, 78, 69, 83, 83, 128, 71, 85, 65, 82, 68,
+    69, 196, 71, 85, 65, 82, 68, 128, 71, 85, 65, 82, 65, 78, 201, 71, 85,
+    193, 71, 85, 178, 71, 84, 69, 210, 71, 83, 85, 77, 128, 71, 83, 85, 205,
+    71, 82, 213, 71, 82, 79, 87, 73, 78, 199, 71, 82, 79, 85, 78, 68, 128,
+    71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 71, 82, 73, 78, 78,
+    73, 78, 199, 71, 82, 73, 77, 65, 67, 73, 78, 199, 71, 82, 69, 71, 79, 82,
+    73, 65, 206, 71, 82, 69, 69, 78, 128, 71, 82, 69, 69, 206, 71, 82, 69,
+    65, 84, 78, 69, 83, 83, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65,
+    78, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 206, 71, 82, 69, 65,
+    84, 69, 210, 71, 82, 69, 65, 212, 71, 82, 65, 86, 69, 89, 65, 82, 196,
+    71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 71, 82, 65, 86, 69,
+    45, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 71, 82, 65, 86, 197,
+    71, 82, 65, 84, 69, 82, 128, 71, 82, 65, 83, 83, 128, 71, 82, 65, 83,
+    211, 71, 82, 65, 83, 208, 71, 82, 65, 80, 72, 69, 77, 197, 71, 82, 65,
+    80, 69, 83, 128, 71, 82, 65, 78, 84, 72, 193, 71, 82, 65, 77, 77, 193,
+    71, 82, 65, 73, 78, 128, 71, 82, 65, 68, 85, 65, 84, 73, 79, 206, 71, 82,
+    65, 68, 85, 65, 76, 128, 71, 82, 65, 67, 69, 128, 71, 82, 65, 67, 197,
+    71, 80, 65, 128, 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 71, 79, 82, 84,
+    128, 71, 79, 82, 73, 76, 76, 65, 128, 71, 79, 82, 71, 79, 84, 69, 82, 73,
+    128, 71, 79, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 71, 79,
+    82, 71, 79, 206, 71, 79, 82, 71, 73, 128, 71, 79, 82, 65, 128, 71, 79,
+    79, 196, 71, 79, 78, 71, 128, 71, 79, 76, 70, 69, 82, 128, 71, 79, 76,
+    68, 128, 71, 79, 75, 128, 71, 79, 73, 78, 199, 71, 79, 71, 71, 76, 69,
+    83, 128, 71, 79, 66, 76, 73, 78, 128, 71, 79, 65, 76, 128, 71, 79, 65,
+    204, 71, 79, 65, 128, 71, 78, 89, 73, 83, 128, 71, 78, 65, 86, 73, 89,
+    65, 78, 73, 128, 71, 76, 79, 87, 73, 78, 199, 71, 76, 79, 86, 69, 83,
+    128, 71, 76, 79, 86, 69, 128, 71, 76, 79, 84, 84, 65, 204, 71, 76, 79,
+    66, 197, 71, 76, 73, 83, 83, 65, 78, 68, 207, 71, 76, 69, 73, 67, 200,
+    71, 76, 65, 71, 79, 76, 73, 128, 71, 76, 65, 128, 71, 74, 69, 128, 71,
+    73, 88, 128, 71, 73, 84, 128, 71, 73, 83, 72, 128, 71, 73, 83, 200, 71,
+    73, 83, 65, 76, 128, 71, 73, 82, 85, 68, 65, 65, 128, 71, 73, 82, 76,
+    211, 71, 73, 82, 76, 128, 71, 73, 82, 65, 70, 70, 197, 71, 73, 82, 51,
+    128, 71, 73, 82, 179, 71, 73, 82, 50, 128, 71, 73, 82, 178, 71, 73, 80,
+    128, 71, 73, 78, 73, 73, 128, 71, 73, 77, 69, 76, 128, 71, 73, 77, 69,
+    204, 71, 73, 77, 128, 71, 73, 71, 65, 128, 71, 73, 71, 128, 71, 73, 70,
+    212, 71, 73, 69, 84, 128, 71, 73, 68, 73, 77, 128, 71, 73, 66, 66, 79,
+    85, 211, 71, 73, 66, 65, 128, 71, 73, 52, 128, 71, 73, 180, 71, 72, 90,
+    128, 71, 72, 87, 65, 128, 71, 72, 85, 78, 78, 65, 128, 71, 72, 85, 78,
+    78, 193, 71, 72, 85, 128, 71, 72, 79, 85, 128, 71, 72, 79, 83, 84, 128,
+    71, 72, 79, 128, 71, 72, 73, 77, 69, 76, 128, 71, 72, 73, 128, 71, 72,
+    72, 65, 128, 71, 72, 69, 89, 83, 128, 71, 72, 69, 85, 88, 128, 71, 72,
+    69, 85, 78, 128, 71, 72, 69, 85, 71, 72, 69, 85, 65, 69, 77, 128, 71, 72,
+    69, 85, 71, 72, 69, 78, 128, 71, 72, 69, 85, 65, 69, 82, 65, 69, 128, 71,
+    72, 69, 85, 65, 69, 71, 72, 69, 85, 65, 69, 128, 71, 72, 69, 84, 128, 71,
+    72, 69, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 128,
+    71, 72, 65, 82, 65, 69, 128, 71, 72, 65, 80, 128, 71, 72, 65, 78, 128,
+    71, 72, 65, 77, 77, 65, 128, 71, 72, 65, 77, 65, 76, 128, 71, 72, 65, 73,
+    78, 85, 128, 71, 72, 65, 73, 78, 128, 71, 72, 65, 73, 206, 71, 72, 65,
+    68, 128, 71, 72, 65, 65, 77, 65, 69, 128, 71, 72, 65, 65, 128, 71, 71,
+    87, 73, 128, 71, 71, 87, 69, 69, 128, 71, 71, 87, 69, 128, 71, 71, 87,
+    65, 65, 128, 71, 71, 87, 65, 128, 71, 71, 85, 88, 128, 71, 71, 85, 84,
+    128, 71, 71, 85, 82, 88, 128, 71, 71, 85, 82, 128, 71, 71, 85, 79, 88,
+    128, 71, 71, 85, 79, 84, 128, 71, 71, 85, 79, 80, 128, 71, 71, 85, 79,
+    128, 71, 71, 79, 88, 128, 71, 71, 79, 84, 128, 71, 71, 79, 80, 128, 71,
+    71, 73, 88, 128, 71, 71, 73, 84, 128, 71, 71, 73, 69, 88, 128, 71, 71,
+    73, 69, 80, 128, 71, 71, 73, 69, 128, 71, 71, 69, 88, 128, 71, 71, 69,
+    84, 128, 71, 71, 69, 80, 128, 71, 71, 65, 88, 128, 71, 71, 65, 84, 128,
+    71, 69, 84, 193, 71, 69, 83, 84, 85, 82, 69, 128, 71, 69, 83, 72, 85,
+    128, 71, 69, 83, 72, 84, 73, 78, 128, 71, 69, 83, 72, 84, 73, 206, 71,
+    69, 83, 72, 50, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, 71, 69, 82,
+    77, 65, 206, 71, 69, 82, 69, 83, 72, 128, 71, 69, 82, 69, 83, 200, 71,
+    69, 79, 77, 69, 84, 82, 73, 67, 65, 76, 76, 217, 71, 69, 79, 77, 69, 84,
+    82, 73, 195, 71, 69, 78, 84, 76, 197, 71, 69, 78, 73, 84, 73, 86, 69,
+    128, 71, 69, 78, 73, 75, 201, 71, 69, 78, 73, 69, 128, 71, 69, 78, 69,
+    82, 73, 195, 71, 69, 78, 69, 82, 65, 76, 128, 71, 69, 77, 73, 78, 73,
     128, 71, 69, 77, 73, 78, 65, 84, 73, 79, 206, 71, 69, 77, 73, 78, 65, 84,
     197, 71, 69, 205, 71, 69, 69, 77, 128, 71, 69, 68, 79, 76, 65, 128, 71,
     69, 68, 69, 128, 71, 69, 66, 207, 71, 69, 66, 193, 71, 69, 65, 82, 128,
@@ -4125,12 +4181,13 @@
     128, 70, 82, 69, 78, 67, 200, 70, 82, 69, 69, 90, 73, 78, 199, 70, 82,
     69, 69, 128, 70, 82, 69, 197, 70, 82, 65, 78, 75, 211, 70, 82, 65, 78,
     195, 70, 82, 65, 77, 69, 83, 128, 70, 82, 65, 77, 69, 128, 70, 82, 65,
-    77, 197, 70, 82, 65, 71, 82, 65, 78, 84, 128, 70, 82, 65, 71, 77, 69, 78,
-    84, 128, 70, 79, 88, 128, 70, 79, 216, 70, 79, 85, 82, 84, 69, 69, 78,
-    128, 70, 79, 85, 82, 84, 69, 69, 206, 70, 79, 85, 82, 45, 84, 72, 73, 82,
-    84, 89, 128, 70, 79, 85, 82, 45, 83, 84, 82, 73, 78, 199, 70, 79, 85, 82,
-    45, 80, 69, 82, 45, 69, 205, 70, 79, 85, 82, 45, 76, 73, 78, 197, 70, 79,
-    85, 210, 70, 79, 85, 78, 84, 65, 73, 78, 128, 70, 79, 85, 78, 84, 65, 73,
+    77, 197, 70, 82, 65, 75, 84, 85, 210, 70, 82, 65, 71, 82, 65, 78, 84,
+    128, 70, 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 67, 84, 73, 79,
+    206, 70, 79, 88, 128, 70, 79, 216, 70, 79, 85, 82, 84, 69, 69, 78, 128,
+    70, 79, 85, 82, 84, 69, 69, 206, 70, 79, 85, 82, 45, 84, 72, 73, 82, 84,
+    89, 128, 70, 79, 85, 82, 45, 83, 84, 82, 73, 78, 199, 70, 79, 85, 82, 45,
+    80, 69, 82, 45, 69, 205, 70, 79, 85, 82, 45, 76, 73, 78, 197, 70, 79, 85,
+    210, 70, 79, 85, 78, 84, 65, 73, 78, 128, 70, 79, 85, 78, 84, 65, 73,
     206, 70, 79, 83, 84, 69, 82, 73, 78, 71, 128, 70, 79, 82, 87, 65, 82, 68,
     128, 70, 79, 82, 87, 65, 82, 196, 70, 79, 82, 84, 89, 45, 70, 73, 86,
     197, 70, 79, 82, 84, 89, 128, 70, 79, 82, 84, 217, 70, 79, 82, 84, 85,
@@ -4143,163 +4200,165 @@
     128, 70, 79, 79, 84, 78, 79, 84, 197, 70, 79, 79, 84, 66, 65, 76, 76,
     128, 70, 79, 79, 84, 128, 70, 79, 79, 76, 128, 70, 79, 79, 68, 128, 70,
     79, 79, 128, 70, 79, 78, 212, 70, 79, 78, 71, 77, 65, 78, 128, 70, 79,
-    77, 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71,
-    128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76, 68, 69, 196, 70, 79, 71,
-    71, 89, 128, 70, 79, 71, 128, 70, 207, 70, 77, 128, 70, 76, 89, 73, 78,
-    199, 70, 76, 89, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, 71, 128, 70,
-    76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85, 84, 69, 128, 70, 76, 85,
-    83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199, 70, 76, 79, 87, 69, 82, 83,
-    128, 70, 76, 79, 87, 69, 210, 70, 76, 79, 85, 82, 73, 83, 72, 128, 70,
-    76, 79, 82, 69, 84, 84, 69, 128, 70, 76, 79, 82, 65, 204, 70, 76, 79, 80,
-    80, 217, 70, 76, 79, 79, 82, 128, 70, 76, 79, 79, 210, 70, 76, 73, 80,
-    128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 73, 67, 203, 70, 76, 69, 88,
-    85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76, 69, 88, 128, 70, 76, 69,
-    85, 82, 79, 78, 128, 70, 76, 69, 85, 82, 45, 68, 69, 45, 76, 73, 83, 128,
-    70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65, 84, 78, 69, 83, 83, 128,
-    70, 76, 65, 84, 66, 82, 69, 65, 68, 128, 70, 76, 65, 83, 72, 128, 70, 76,
-    65, 77, 73, 78, 71, 79, 128, 70, 76, 65, 77, 69, 128, 70, 76, 65, 71, 83,
-    128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65, 71, 45, 52, 128, 70, 76,
-    65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 49,
-    128, 70, 76, 65, 71, 128, 70, 76, 65, 199, 70, 76, 65, 128, 70, 76, 128,
-    70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 70, 73, 88, 128, 70, 73, 86, 69,
-    45, 84, 72, 73, 82, 84, 89, 128, 70, 73, 86, 69, 45, 76, 73, 78, 197, 70,
-    73, 84, 90, 80, 65, 84, 82, 73, 67, 203, 70, 73, 84, 65, 128, 70, 73, 84,
-    128, 70, 73, 83, 84, 69, 196, 70, 73, 83, 72, 73, 78, 199, 70, 73, 83,
-    72, 72, 79, 79, 75, 128, 70, 73, 83, 72, 72, 79, 79, 203, 70, 73, 83, 72,
-    69, 89, 69, 128, 70, 73, 83, 72, 128, 70, 73, 83, 200, 70, 73, 82, 83,
-    212, 70, 73, 82, 73, 128, 70, 73, 82, 69, 87, 79, 82, 75, 83, 128, 70,
-    73, 82, 69, 87, 79, 82, 203, 70, 73, 82, 69, 67, 82, 65, 67, 75, 69, 82,
-    128, 70, 73, 82, 69, 128, 70, 73, 82, 197, 70, 73, 80, 128, 70, 73, 78,
-    73, 84, 197, 70, 73, 78, 71, 69, 82, 83, 128, 70, 73, 78, 71, 69, 82,
-    211, 70, 73, 78, 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 73, 78, 71, 69,
-    82, 69, 196, 70, 73, 78, 71, 69, 82, 45, 80, 79, 83, 212, 70, 73, 78, 71,
-    69, 82, 128, 70, 73, 78, 71, 69, 210, 70, 73, 78, 65, 78, 67, 73, 65, 76,
-    128, 70, 73, 78, 65, 76, 128, 70, 73, 76, 205, 70, 73, 76, 76, 69, 82,
-    45, 50, 128, 70, 73, 76, 76, 69, 82, 45, 49, 128, 70, 73, 76, 76, 69, 82,
-    128, 70, 73, 76, 76, 69, 196, 70, 73, 76, 76, 128, 70, 73, 76, 204, 70,
-    73, 76, 197, 70, 73, 73, 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70,
-    73, 71, 85, 82, 69, 45, 50, 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70,
-    73, 71, 85, 82, 197, 70, 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128,
-    70, 73, 70, 84, 217, 70, 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72,
-    128, 70, 73, 70, 84, 69, 69, 78, 128, 70, 73, 70, 84, 69, 69, 206, 70,
-    73, 69, 76, 68, 128, 70, 73, 69, 76, 196, 70, 72, 84, 79, 82, 193, 70,
-    70, 76, 128, 70, 70, 73, 128, 70, 69, 85, 88, 128, 70, 69, 85, 70, 69,
-    85, 65, 69, 84, 128, 70, 69, 84, 72, 128, 70, 69, 83, 84, 73, 86, 65, 76,
-    128, 70, 69, 82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77,
-    65, 84, 65, 128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69,
-    78, 199, 70, 69, 78, 67, 69, 82, 128, 70, 69, 78, 67, 69, 128, 70, 69,
-    77, 73, 78, 73, 78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76,
-    197, 70, 69, 76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, 128, 70,
-    69, 72, 213, 70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, 128, 70,
-    69, 69, 77, 128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, 69, 128,
-    70, 69, 66, 82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70,
-    69, 65, 84, 72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85,
-    204, 70, 69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89,
-    128, 70, 65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70,
-    65, 84, 72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84,
-    65, 78, 128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128,
-    70, 65, 84, 72, 193, 70, 65, 84, 128, 70, 65, 83, 84, 128, 70, 65, 82,
-    83, 201, 70, 65, 82, 128, 70, 65, 81, 128, 70, 65, 80, 128, 70, 65, 78,
-    71, 128, 70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, 128, 70, 65,
-    77, 73, 76, 89, 128, 70, 65, 77, 128, 70, 65, 76, 76, 69, 206, 70, 65,
-    76, 65, 70, 69, 76, 128, 70, 65, 74, 128, 70, 65, 73, 82, 89, 128, 70,
-    65, 73, 76, 85, 82, 69, 128, 70, 65, 73, 72, 85, 128, 70, 65, 73, 66,
-    128, 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 65, 67, 84, 79, 82,
-    89, 128, 70, 65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 77, 73, 76, 197,
-    70, 65, 67, 73, 78, 71, 83, 128, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67,
-    69, 45, 53, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51,
-    128, 70, 65, 67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65,
-    65, 77, 65, 69, 128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70,
-    48, 53, 51, 128, 70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48,
-    53, 49, 66, 128, 70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48,
-    53, 48, 128, 70, 48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55,
-    65, 128, 70, 48, 52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54,
-    128, 70, 48, 52, 53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128,
-    70, 48, 52, 51, 128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48,
-    52, 48, 128, 70, 48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51,
-    56, 128, 70, 48, 51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54,
-    128, 70, 48, 51, 53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70,
-    48, 51, 50, 128, 70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48,
-    51, 48, 128, 70, 48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55,
-    128, 70, 48, 50, 54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70,
-    48, 50, 51, 128, 70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48,
-    50, 49, 128, 70, 48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56,
-    128, 70, 48, 49, 55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70,
-    48, 49, 52, 128, 70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48,
-    49, 50, 128, 70, 48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57,
-    128, 70, 48, 48, 56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70,
-    48, 48, 53, 128, 70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48,
-    50, 128, 70, 48, 48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 83, 128,
-    69, 90, 200, 69, 90, 69, 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, 89,
-    89, 89, 128, 69, 89, 69, 83, 128, 69, 89, 69, 211, 69, 89, 69, 76, 65,
-    83, 72, 69, 211, 69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, 69,
-    71, 65, 90, 69, 45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 69, 89, 69, 71,
-    65, 90, 69, 45, 70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 69, 89, 69, 66,
-    82, 79, 87, 211, 69, 89, 69, 66, 82, 79, 215, 69, 89, 197, 69, 89, 66,
-    69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82,
-    69, 77, 69, 76, 217, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82,
-    73, 65, 204, 69, 88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45,
-    72, 73, 71, 200, 69, 88, 84, 82, 193, 69, 88, 84, 73, 78, 71, 85, 73, 83,
-    72, 69, 82, 128, 69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69,
-    78, 68, 69, 68, 128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 80, 82, 69,
-    83, 83, 73, 79, 78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 78, 212, 69,
-    88, 80, 76, 79, 68, 73, 78, 199, 69, 88, 79, 128, 69, 88, 207, 69, 88,
-    73, 83, 84, 83, 128, 69, 88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84,
-    73, 79, 78, 128, 69, 88, 72, 65, 76, 69, 128, 69, 88, 67, 76, 65, 77, 65,
-    84, 73, 79, 78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88,
-    67, 73, 84, 69, 77, 69, 78, 84, 128, 69, 88, 67, 72, 65, 78, 71, 69, 128,
-    69, 88, 67, 69, 83, 83, 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69,
-    87, 69, 128, 69, 86, 69, 82, 217, 69, 86, 69, 82, 71, 82, 69, 69, 206,
-    69, 86, 69, 78, 73, 78, 71, 128, 69, 85, 82, 79, 80, 69, 65, 206, 69, 85,
-    82, 79, 80, 69, 45, 65, 70, 82, 73, 67, 65, 128, 69, 85, 82, 79, 45, 67,
-    85, 82, 82, 69, 78, 67, 217, 69, 85, 82, 207, 69, 85, 76, 69, 210, 69,
-    85, 45, 85, 128, 69, 85, 45, 79, 128, 69, 85, 45, 69, 85, 128, 69, 85,
-    45, 69, 79, 128, 69, 85, 45, 69, 128, 69, 85, 45, 65, 128, 69, 84, 88,
-    128, 69, 84, 78, 65, 72, 84, 65, 128, 69, 84, 72, 69, 204, 69, 84, 69,
-    82, 79, 206, 69, 84, 69, 82, 78, 73, 84, 89, 128, 69, 84, 69, 82, 78, 73,
-    84, 217, 69, 84, 66, 128, 69, 83, 90, 128, 69, 83, 85, 75, 85, 85, 68,
-    79, 128, 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65,
-    84, 69, 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83,
-    72, 49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83,
-    65, 128, 69, 83, 45, 84, 69, 128, 69, 83, 45, 51, 128, 69, 83, 45, 50,
-    128, 69, 83, 45, 49, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69,
-    196, 69, 82, 82, 128, 69, 82, 73, 211, 69, 82, 73, 78, 50, 128, 69, 82,
-    73, 78, 178, 69, 82, 71, 128, 69, 82, 65, 83, 197, 69, 81, 85, 73, 86,
-    65, 76, 69, 78, 212, 69, 81, 85, 73, 76, 65, 84, 69, 82, 65, 204, 69, 81,
-    85, 73, 72, 79, 80, 80, 69, 82, 128, 69, 81, 85, 73, 72, 79, 80, 80, 69,
-    210, 69, 81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65,
-    210, 69, 81, 85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, 85,
-    65, 76, 128, 69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79,
-    206, 69, 80, 79, 67, 72, 128, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195,
-    69, 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 78, 84, 72, 69, 84,
-    73, 195, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 80, 65, 67, 212, 69,
-    79, 84, 128, 69, 79, 77, 128, 69, 79, 76, 72, 88, 128, 69, 79, 76, 128,
-    69, 79, 72, 128, 69, 78, 89, 128, 69, 78, 86, 69, 76, 79, 80, 69, 128,
-    69, 78, 86, 69, 76, 79, 80, 197, 69, 78, 85, 77, 69, 82, 65, 84, 73, 79,
-    206, 69, 78, 84, 82, 89, 45, 50, 128, 69, 78, 84, 82, 89, 45, 49, 128,
-    69, 78, 84, 82, 89, 128, 69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73,
-    65, 83, 77, 128, 69, 78, 84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84,
-    69, 82, 73, 78, 199, 69, 78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69,
-    78, 84, 45, 83, 72, 65, 80, 69, 196, 69, 78, 81, 85, 73, 82, 89, 128, 69,
-    78, 81, 128, 69, 78, 79, 211, 69, 78, 78, 73, 128, 69, 78, 78, 128, 69,
-    78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 128, 69, 78, 71, 73, 78, 69, 128,
-    69, 78, 68, 79, 70, 79, 78, 79, 78, 128, 69, 78, 68, 73, 78, 199, 69, 78,
-    68, 69, 80, 128, 69, 78, 68, 69, 65, 86, 79, 85, 82, 128, 69, 78, 67, 79,
-    85, 78, 84, 69, 82, 83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 83, 128,
-    69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78,
-    199, 69, 78, 67, 128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77,
-    79, 78, 73, 79, 211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73,
-    195, 69, 77, 80, 72, 65, 83, 73, 211, 69, 77, 79, 74, 201, 69, 77, 66,
-    82, 79, 73, 68, 69, 82, 89, 128, 69, 77, 66, 76, 69, 77, 128, 69, 77, 66,
-    69, 76, 76, 73, 83, 72, 77, 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73,
-    78, 71, 128, 69, 76, 89, 77, 65, 73, 195, 69, 76, 89, 128, 69, 76, 84,
-    128, 69, 76, 76, 73, 80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83,
-    128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76,
-    69, 86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78,
-    128, 69, 76, 69, 86, 69, 206, 69, 76, 69, 86, 65, 84, 85, 211, 69, 76,
-    69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77, 69, 78, 212, 69, 76, 69, 67,
-    84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, 73, 195, 69, 76, 66, 65,
-    83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, 69, 76, 65, 77, 73, 84,
+    78, 68, 85, 69, 128, 70, 79, 77, 128, 70, 79, 76, 76, 89, 128, 70, 79,
+    76, 76, 79, 87, 73, 78, 71, 128, 70, 79, 76, 68, 69, 82, 128, 70, 79, 76,
+    68, 69, 196, 70, 79, 71, 71, 89, 128, 70, 79, 71, 128, 70, 207, 70, 77,
+    128, 70, 76, 89, 73, 78, 199, 70, 76, 89, 128, 70, 76, 85, 84, 84, 69,
+    82, 73, 78, 71, 128, 70, 76, 85, 84, 84, 69, 82, 73, 78, 199, 70, 76, 85,
+    84, 69, 128, 70, 76, 85, 83, 72, 69, 196, 70, 76, 79, 87, 73, 78, 199,
+    70, 76, 79, 87, 69, 82, 83, 128, 70, 76, 79, 87, 69, 210, 70, 76, 79, 85,
+    82, 73, 83, 72, 128, 70, 76, 79, 82, 69, 84, 84, 69, 128, 70, 76, 79, 82,
+    65, 204, 70, 76, 79, 80, 80, 217, 70, 76, 79, 79, 82, 128, 70, 76, 79,
+    79, 210, 70, 76, 73, 80, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, 73,
+    67, 203, 70, 76, 69, 88, 85, 83, 128, 70, 76, 69, 88, 69, 196, 70, 76,
+    69, 88, 128, 70, 76, 69, 85, 82, 79, 78, 128, 70, 76, 69, 85, 82, 45, 68,
+    69, 45, 76, 73, 83, 128, 70, 76, 65, 84, 84, 69, 78, 69, 196, 70, 76, 65,
+    84, 78, 69, 83, 83, 128, 70, 76, 65, 84, 66, 82, 69, 65, 68, 128, 70, 76,
+    65, 83, 72, 128, 70, 76, 65, 77, 73, 78, 71, 79, 128, 70, 76, 65, 77, 69,
+    128, 70, 76, 65, 71, 83, 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 65,
+    71, 45, 52, 128, 70, 76, 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 50,
+    128, 70, 76, 65, 71, 45, 49, 128, 70, 76, 65, 71, 128, 70, 76, 65, 199,
+    70, 76, 65, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, 205,
+    70, 73, 88, 128, 70, 73, 86, 69, 45, 84, 72, 73, 82, 84, 89, 128, 70, 73,
+    86, 69, 45, 76, 73, 78, 197, 70, 73, 84, 90, 80, 65, 84, 82, 73, 67, 203,
+    70, 73, 84, 65, 128, 70, 73, 84, 128, 70, 73, 83, 84, 69, 196, 70, 73,
+    83, 72, 73, 78, 199, 70, 73, 83, 72, 72, 79, 79, 75, 128, 70, 73, 83, 72,
+    72, 79, 79, 203, 70, 73, 83, 72, 69, 89, 69, 128, 70, 73, 83, 72, 128,
+    70, 73, 83, 200, 70, 73, 82, 83, 212, 70, 73, 82, 73, 128, 70, 73, 82,
+    69, 87, 79, 82, 75, 83, 128, 70, 73, 82, 69, 87, 79, 82, 203, 70, 73, 82,
+    69, 67, 82, 65, 67, 75, 69, 82, 128, 70, 73, 82, 69, 128, 70, 73, 82,
+    197, 70, 73, 80, 128, 70, 73, 78, 73, 84, 197, 70, 73, 78, 71, 69, 82,
+    83, 128, 70, 73, 78, 71, 69, 82, 211, 70, 73, 78, 71, 69, 82, 78, 65, 73,
+    76, 83, 128, 70, 73, 78, 71, 69, 82, 69, 196, 70, 73, 78, 71, 69, 82, 45,
+    80, 79, 83, 212, 70, 73, 78, 71, 69, 82, 128, 70, 73, 78, 71, 69, 210,
+    70, 73, 78, 65, 78, 67, 73, 65, 76, 128, 70, 73, 78, 65, 76, 128, 70, 73,
+    76, 205, 70, 73, 76, 76, 69, 82, 45, 50, 128, 70, 73, 76, 76, 69, 82, 45,
+    49, 128, 70, 73, 76, 76, 69, 82, 128, 70, 73, 76, 76, 69, 196, 70, 73,
+    76, 76, 128, 70, 73, 76, 204, 70, 73, 76, 197, 70, 73, 73, 128, 70, 73,
+    71, 85, 82, 69, 45, 51, 128, 70, 73, 71, 85, 82, 69, 45, 50, 128, 70, 73,
+    71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 69, 128, 70, 73, 71, 85,
+    82, 197, 70, 73, 71, 72, 84, 128, 70, 73, 70, 84, 89, 128, 70, 73, 70,
+    84, 217, 70, 73, 70, 84, 72, 83, 128, 70, 73, 70, 84, 72, 128, 70, 73,
+    70, 84, 69, 69, 78, 128, 70, 73, 70, 84, 69, 69, 206, 70, 73, 69, 76, 68,
+    128, 70, 73, 69, 76, 196, 70, 72, 84, 79, 82, 193, 70, 70, 76, 128, 70,
+    70, 73, 128, 70, 69, 85, 88, 128, 70, 69, 85, 70, 69, 85, 65, 69, 84,
+    128, 70, 69, 84, 72, 128, 70, 69, 83, 84, 73, 86, 65, 76, 128, 70, 69,
+    82, 82, 89, 128, 70, 69, 82, 82, 73, 211, 70, 69, 82, 77, 65, 84, 65,
+    128, 70, 69, 82, 77, 65, 84, 193, 70, 69, 79, 200, 70, 69, 78, 199, 70,
+    69, 78, 67, 69, 82, 128, 70, 69, 78, 67, 69, 128, 70, 69, 77, 73, 78, 73,
+    78, 197, 70, 69, 77, 65, 76, 69, 128, 70, 69, 77, 65, 76, 197, 70, 69,
+    76, 76, 79, 87, 83, 72, 73, 80, 128, 70, 69, 73, 128, 70, 69, 72, 213,
+    70, 69, 72, 128, 70, 69, 200, 70, 69, 69, 78, 71, 128, 70, 69, 69, 77,
+    128, 70, 69, 69, 68, 128, 70, 69, 69, 196, 70, 69, 69, 128, 70, 69, 66,
+    82, 85, 65, 82, 89, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 69, 65, 84,
+    72, 69, 210, 70, 69, 65, 82, 78, 128, 70, 69, 65, 82, 70, 85, 204, 70,
+    69, 65, 82, 128, 70, 65, 89, 65, 78, 78, 65, 128, 70, 65, 89, 128, 70,
+    65, 88, 128, 70, 65, 216, 70, 65, 84, 73, 71, 85, 69, 128, 70, 65, 84,
+    72, 69, 82, 128, 70, 65, 84, 72, 69, 210, 70, 65, 84, 72, 65, 84, 65, 78,
+    128, 70, 65, 84, 72, 65, 84, 65, 206, 70, 65, 84, 72, 65, 128, 70, 65,
+    84, 72, 193, 70, 65, 84, 128, 70, 65, 83, 84, 128, 70, 65, 82, 83, 201,
+    70, 65, 82, 128, 70, 65, 81, 128, 70, 65, 80, 128, 70, 65, 78, 71, 128,
+    70, 65, 78, 69, 82, 79, 83, 73, 211, 70, 65, 78, 128, 70, 65, 77, 73, 76,
+    89, 128, 70, 65, 77, 128, 70, 65, 76, 76, 69, 206, 70, 65, 76, 65, 70,
+    69, 76, 128, 70, 65, 74, 128, 70, 65, 73, 82, 89, 128, 70, 65, 73, 76,
+    85, 82, 69, 128, 70, 65, 73, 72, 85, 128, 70, 65, 73, 66, 128, 70, 65,
+    72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 65, 67, 84, 79, 82, 89, 128, 70,
+    65, 67, 84, 79, 210, 70, 65, 67, 83, 73, 77, 73, 76, 197, 70, 65, 67, 73,
+    78, 71, 83, 128, 70, 65, 67, 69, 45, 54, 128, 70, 65, 67, 69, 45, 53,
+    128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 51, 128, 70, 65,
+    67, 69, 45, 50, 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 65, 77, 65, 69,
+    128, 70, 65, 65, 73, 128, 70, 65, 65, 70, 85, 128, 70, 48, 53, 51, 128,
+    70, 48, 53, 50, 128, 70, 48, 53, 49, 67, 128, 70, 48, 53, 49, 66, 128,
+    70, 48, 53, 49, 65, 128, 70, 48, 53, 49, 128, 70, 48, 53, 48, 128, 70,
+    48, 52, 57, 128, 70, 48, 52, 56, 128, 70, 48, 52, 55, 65, 128, 70, 48,
+    52, 55, 128, 70, 48, 52, 54, 65, 128, 70, 48, 52, 54, 128, 70, 48, 52,
+    53, 65, 128, 70, 48, 52, 53, 128, 70, 48, 52, 52, 128, 70, 48, 52, 51,
+    128, 70, 48, 52, 50, 128, 70, 48, 52, 49, 128, 70, 48, 52, 48, 128, 70,
+    48, 51, 57, 128, 70, 48, 51, 56, 65, 128, 70, 48, 51, 56, 128, 70, 48,
+    51, 55, 65, 128, 70, 48, 51, 55, 128, 70, 48, 51, 54, 128, 70, 48, 51,
+    53, 128, 70, 48, 51, 52, 128, 70, 48, 51, 51, 128, 70, 48, 51, 50, 128,
+    70, 48, 51, 49, 65, 128, 70, 48, 51, 49, 128, 70, 48, 51, 48, 128, 70,
+    48, 50, 57, 128, 70, 48, 50, 56, 128, 70, 48, 50, 55, 128, 70, 48, 50,
+    54, 128, 70, 48, 50, 53, 128, 70, 48, 50, 52, 128, 70, 48, 50, 51, 128,
+    70, 48, 50, 50, 128, 70, 48, 50, 49, 65, 128, 70, 48, 50, 49, 128, 70,
+    48, 50, 48, 128, 70, 48, 49, 57, 128, 70, 48, 49, 56, 128, 70, 48, 49,
+    55, 128, 70, 48, 49, 54, 128, 70, 48, 49, 53, 128, 70, 48, 49, 52, 128,
+    70, 48, 49, 51, 65, 128, 70, 48, 49, 51, 128, 70, 48, 49, 50, 128, 70,
+    48, 49, 49, 128, 70, 48, 49, 48, 128, 70, 48, 48, 57, 128, 70, 48, 48,
+    56, 128, 70, 48, 48, 55, 128, 70, 48, 48, 54, 128, 70, 48, 48, 53, 128,
+    70, 48, 48, 52, 128, 70, 48, 48, 51, 128, 70, 48, 48, 50, 128, 70, 48,
+    48, 49, 65, 128, 70, 48, 48, 49, 128, 69, 90, 83, 128, 69, 90, 200, 69,
+    90, 69, 78, 128, 69, 90, 69, 206, 69, 90, 128, 69, 89, 89, 89, 128, 69,
+    89, 69, 83, 128, 69, 89, 69, 211, 69, 89, 69, 76, 65, 83, 72, 69, 211,
+    69, 89, 69, 71, 76, 65, 83, 83, 69, 83, 128, 69, 89, 69, 71, 65, 90, 69,
+    45, 87, 65, 76, 76, 80, 76, 65, 78, 197, 69, 89, 69, 71, 65, 90, 69, 45,
+    70, 76, 79, 79, 82, 80, 76, 65, 78, 197, 69, 89, 69, 66, 82, 79, 87, 211,
+    69, 89, 69, 66, 82, 79, 215, 69, 89, 197, 69, 89, 66, 69, 89, 70, 73, 76,
+    73, 128, 69, 89, 65, 78, 78, 65, 128, 69, 88, 84, 82, 69, 77, 69, 76,
+    217, 69, 88, 84, 82, 65, 84, 69, 82, 82, 69, 83, 84, 82, 73, 65, 204, 69,
+    88, 84, 82, 65, 45, 76, 79, 215, 69, 88, 84, 82, 65, 45, 72, 73, 71, 200,
+    69, 88, 84, 82, 193, 69, 88, 84, 73, 78, 71, 85, 73, 83, 72, 69, 82, 128,
+    69, 88, 84, 69, 78, 83, 73, 79, 78, 128, 69, 88, 84, 69, 78, 68, 69, 68,
+    128, 69, 88, 84, 69, 78, 68, 69, 196, 69, 88, 80, 82, 69, 83, 83, 73, 79,
+    78, 76, 69, 83, 211, 69, 88, 80, 79, 78, 69, 78, 212, 69, 88, 80, 76, 79,
+    68, 73, 78, 199, 69, 88, 79, 128, 69, 88, 207, 69, 88, 73, 83, 84, 83,
+    128, 69, 88, 73, 83, 84, 128, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78,
+    128, 69, 88, 72, 65, 76, 69, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79,
+    78, 128, 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 69, 88, 67, 73, 84,
+    69, 77, 69, 78, 84, 128, 69, 88, 67, 72, 65, 78, 71, 69, 128, 69, 88, 67,
+    69, 83, 83, 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69,
+    128, 69, 86, 69, 82, 217, 69, 86, 69, 82, 71, 82, 69, 69, 206, 69, 86,
+    69, 78, 73, 78, 71, 128, 69, 85, 82, 79, 80, 69, 65, 206, 69, 85, 82, 79,
+    80, 69, 45, 65, 70, 82, 73, 67, 65, 128, 69, 85, 82, 79, 45, 67, 85, 82,
+    82, 69, 78, 67, 217, 69, 85, 82, 207, 69, 85, 76, 69, 210, 69, 85, 45,
+    85, 128, 69, 85, 45, 79, 128, 69, 85, 45, 69, 85, 128, 69, 85, 45, 69,
+    79, 128, 69, 85, 45, 69, 128, 69, 85, 45, 65, 128, 69, 84, 88, 128, 69,
+    84, 78, 65, 72, 84, 65, 128, 69, 84, 72, 69, 204, 69, 84, 69, 82, 79,
+    206, 69, 84, 69, 82, 78, 73, 84, 89, 128, 69, 84, 69, 82, 78, 73, 84,
+    217, 69, 84, 66, 128, 69, 83, 90, 128, 69, 83, 85, 75, 85, 85, 68, 79,
+    128, 69, 83, 84, 73, 77, 65, 84, 69, 83, 128, 69, 83, 84, 73, 77, 65, 84,
+    69, 196, 69, 83, 72, 69, 51, 128, 69, 83, 72, 50, 49, 128, 69, 83, 72,
+    49, 54, 128, 69, 83, 67, 65, 80, 69, 128, 69, 83, 67, 128, 69, 83, 65,
+    128, 69, 83, 45, 84, 69, 128, 69, 83, 45, 51, 128, 69, 83, 45, 50, 128,
+    69, 83, 45, 49, 128, 69, 82, 82, 79, 82, 45, 66, 65, 82, 82, 69, 196, 69,
+    82, 82, 128, 69, 82, 73, 211, 69, 82, 73, 78, 50, 128, 69, 82, 73, 78,
+    178, 69, 82, 71, 128, 69, 82, 65, 83, 197, 69, 81, 85, 73, 86, 65, 76,
+    69, 78, 212, 69, 81, 85, 73, 76, 65, 84, 69, 82, 65, 204, 69, 81, 85, 73,
+    72, 79, 80, 80, 69, 82, 128, 69, 81, 85, 73, 72, 79, 80, 80, 69, 210, 69,
+    81, 85, 73, 68, 128, 69, 81, 85, 73, 65, 78, 71, 85, 76, 65, 210, 69, 81,
+    85, 65, 76, 83, 128, 69, 81, 85, 65, 76, 211, 69, 81, 85, 65, 76, 128,
+    69, 80, 83, 73, 76, 79, 78, 128, 69, 80, 83, 73, 76, 79, 206, 69, 80, 79,
+    67, 72, 128, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, 80, 73, 68, 65,
+    85, 82, 69, 65, 206, 69, 80, 69, 78, 84, 72, 69, 84, 73, 195, 69, 80, 69,
+    71, 69, 82, 77, 65, 128, 69, 80, 65, 67, 212, 69, 79, 84, 128, 69, 79,
+    77, 128, 69, 79, 76, 72, 88, 128, 69, 79, 76, 128, 69, 79, 72, 128, 69,
+    78, 89, 128, 69, 78, 86, 69, 76, 79, 80, 69, 128, 69, 78, 86, 69, 76, 79,
+    80, 197, 69, 78, 85, 77, 69, 82, 65, 84, 73, 79, 206, 69, 78, 84, 82, 89,
+    45, 50, 128, 69, 78, 84, 82, 89, 45, 49, 128, 69, 78, 84, 82, 89, 128,
+    69, 78, 84, 82, 217, 69, 78, 84, 72, 85, 83, 73, 65, 83, 77, 128, 69, 78,
+    84, 69, 82, 80, 82, 73, 83, 69, 128, 69, 78, 84, 69, 82, 73, 78, 199, 69,
+    78, 84, 69, 82, 128, 69, 78, 84, 69, 210, 69, 78, 84, 45, 83, 72, 65, 80,
+    69, 196, 69, 78, 81, 85, 73, 82, 89, 128, 69, 78, 81, 128, 69, 78, 79,
+    211, 69, 78, 78, 73, 128, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69,
+    77, 69, 78, 84, 128, 69, 78, 71, 73, 78, 69, 128, 69, 78, 68, 79, 70, 79,
+    78, 79, 78, 128, 69, 78, 68, 73, 78, 199, 69, 78, 68, 69, 80, 128, 69,
+    78, 68, 69, 65, 86, 79, 85, 82, 128, 69, 78, 67, 79, 85, 78, 84, 69, 82,
+    83, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 83, 128, 69, 78, 67, 76, 79,
+    83, 85, 82, 69, 128, 69, 78, 67, 76, 79, 83, 73, 78, 199, 69, 78, 67,
+    128, 69, 78, 65, 82, 88, 73, 211, 69, 78, 65, 82, 77, 79, 78, 73, 79,
+    211, 69, 77, 80, 84, 217, 69, 77, 80, 72, 65, 84, 73, 195, 69, 77, 80,
+    72, 65, 83, 73, 211, 69, 77, 79, 74, 201, 69, 77, 66, 82, 79, 73, 68, 69,
+    82, 89, 128, 69, 77, 66, 76, 69, 77, 128, 69, 77, 66, 69, 76, 76, 73, 83,
+    72, 77, 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 69, 76,
+    89, 77, 65, 73, 195, 69, 76, 89, 128, 69, 76, 84, 128, 69, 76, 76, 73,
+    80, 84, 73, 195, 69, 76, 76, 73, 80, 83, 73, 83, 128, 69, 76, 76, 73, 80,
+    83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, 73, 70, 128, 69, 76, 69,
+    86, 69, 78, 45, 84, 72, 73, 82, 84, 89, 128, 69, 76, 69, 86, 69, 78, 128,
+    69, 76, 69, 86, 69, 206, 69, 76, 69, 86, 65, 84, 85, 211, 69, 76, 69, 86,
+    65, 84, 79, 82, 128, 69, 76, 69, 80, 72, 65, 78, 84, 128, 69, 76, 69, 77,
+    69, 78, 212, 69, 76, 69, 67, 84, 82, 79, 78, 73, 67, 83, 128, 69, 76, 69,
+    67, 84, 82, 73, 67, 65, 204, 69, 76, 69, 67, 84, 82, 73, 195, 69, 76, 66,
+    65, 83, 65, 206, 69, 76, 65, 77, 73, 84, 69, 128, 69, 76, 65, 77, 73, 84,
     197, 69, 76, 65, 70, 82, 79, 78, 128, 69, 75, 83, 84, 82, 69, 80, 84, 79,
     78, 128, 69, 75, 83, 128, 69, 75, 70, 79, 78, 73, 84, 73, 75, 79, 78,
     128, 69, 75, 65, 82, 65, 128, 69, 75, 65, 77, 128, 69, 74, 69, 67, 212,
@@ -4518,26 +4577,27 @@
     83, 128, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, 128, 68, 79,
     75, 77, 65, 73, 128, 68, 79, 73, 84, 128, 68, 79, 73, 78, 199, 68, 79,
     73, 128, 68, 79, 71, 82, 193, 68, 79, 71, 128, 68, 79, 199, 68, 79, 69,
-    211, 68, 79, 68, 69, 75, 65, 84, 65, 128, 68, 79, 67, 85, 77, 69, 78, 84,
-    128, 68, 79, 67, 85, 77, 69, 78, 212, 68, 79, 66, 82, 79, 128, 68, 79,
-    65, 67, 72, 65, 83, 72, 77, 69, 69, 128, 68, 79, 65, 67, 72, 65, 83, 72,
-    77, 69, 197, 68, 79, 65, 128, 68, 79, 45, 79, 128, 68, 78, 193, 68, 77,
-    128, 68, 205, 68, 76, 85, 128, 68, 76, 79, 128, 68, 76, 73, 128, 68, 76,
-    72, 89, 65, 128, 68, 76, 72, 65, 128, 68, 76, 69, 69, 128, 68, 76, 65,
-    128, 68, 76, 128, 68, 75, 65, 82, 128, 68, 75, 65, 210, 68, 74, 69, 82,
-    86, 73, 128, 68, 74, 69, 82, 86, 128, 68, 74, 69, 128, 68, 74, 65, 128,
-    68, 73, 90, 90, 217, 68, 73, 89, 193, 68, 73, 86, 79, 82, 67, 197, 68,
-    73, 86, 73, 83, 73, 79, 78, 128, 68, 73, 86, 73, 83, 73, 79, 206, 68, 73,
-    86, 73, 78, 199, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 128, 68, 73, 86,
-    73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 83, 128, 68, 73, 86, 73,
-    68, 69, 82, 128, 68, 73, 86, 73, 68, 69, 196, 68, 73, 86, 73, 68, 69,
-    128, 68, 73, 86, 73, 68, 197, 68, 73, 86, 69, 82, 71, 69, 78, 67, 69,
-    128, 68, 73, 84, 84, 207, 68, 73, 83, 84, 79, 82, 84, 73, 79, 78, 128,
-    68, 73, 83, 84, 73, 78, 71, 85, 73, 83, 72, 128, 68, 73, 83, 84, 73, 76,
-    76, 128, 68, 73, 83, 83, 79, 76, 86, 69, 45, 50, 128, 68, 73, 83, 83, 79,
-    76, 86, 69, 128, 68, 73, 83, 80, 85, 84, 69, 196, 68, 73, 83, 80, 69, 82,
-    83, 73, 79, 78, 128, 68, 73, 83, 75, 128, 68, 73, 83, 73, 77, 79, 85,
-    128, 68, 73, 83, 72, 128, 68, 73, 83, 67, 79, 78, 84, 73, 78, 85, 79, 85,
+    211, 68, 79, 68, 79, 128, 68, 79, 68, 69, 75, 65, 84, 65, 128, 68, 79,
+    67, 85, 77, 69, 78, 84, 128, 68, 79, 67, 85, 77, 69, 78, 212, 68, 79, 66,
+    82, 79, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 69, 128, 68, 79, 65,
+    67, 72, 65, 83, 72, 77, 69, 197, 68, 79, 65, 128, 68, 79, 45, 79, 128,
+    68, 78, 193, 68, 77, 128, 68, 205, 68, 76, 85, 128, 68, 76, 79, 128, 68,
+    76, 73, 128, 68, 76, 72, 89, 65, 128, 68, 76, 72, 65, 128, 68, 76, 69,
+    69, 128, 68, 76, 65, 128, 68, 76, 128, 68, 75, 65, 82, 128, 68, 75, 65,
+    210, 68, 74, 69, 82, 86, 73, 128, 68, 74, 69, 82, 86, 128, 68, 74, 69,
+    128, 68, 74, 65, 128, 68, 73, 90, 90, 217, 68, 73, 89, 193, 68, 73, 86,
+    79, 82, 67, 197, 68, 73, 86, 73, 83, 73, 79, 78, 128, 68, 73, 86, 73, 83,
+    73, 79, 206, 68, 73, 86, 73, 78, 199, 68, 73, 86, 73, 78, 65, 84, 73, 79,
+    78, 128, 68, 73, 86, 73, 68, 69, 83, 128, 68, 73, 86, 73, 68, 69, 82, 83,
+    128, 68, 73, 86, 73, 68, 69, 82, 128, 68, 73, 86, 73, 68, 69, 196, 68,
+    73, 86, 73, 68, 69, 128, 68, 73, 86, 73, 68, 197, 68, 73, 86, 69, 211,
+    68, 73, 86, 69, 82, 71, 69, 78, 67, 69, 128, 68, 73, 84, 84, 207, 68, 73,
+    83, 84, 79, 82, 84, 73, 79, 78, 128, 68, 73, 83, 84, 73, 78, 71, 85, 73,
+    83, 72, 128, 68, 73, 83, 84, 73, 76, 76, 128, 68, 73, 83, 83, 79, 76, 86,
+    69, 45, 50, 128, 68, 73, 83, 83, 79, 76, 86, 69, 128, 68, 73, 83, 80, 85,
+    84, 69, 196, 68, 73, 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, 83, 75,
+    128, 68, 73, 83, 73, 77, 79, 85, 128, 68, 73, 83, 72, 128, 68, 73, 83,
+    71, 85, 73, 83, 69, 196, 68, 73, 83, 67, 79, 78, 84, 73, 78, 85, 79, 85,
     211, 68, 73, 83, 195, 68, 73, 83, 65, 80, 80, 79, 73, 78, 84, 69, 196,
     68, 73, 83, 65, 66, 76, 69, 196, 68, 73, 82, 71, 193, 68, 73, 82, 69, 67,
     84, 76, 217, 68, 73, 82, 69, 67, 84, 73, 79, 78, 65, 204, 68, 73, 82, 69,
@@ -4686,25 +4746,26 @@
     85, 82, 86, 69, 196, 67, 85, 82, 86, 69, 128, 67, 85, 82, 86, 197, 67,
     85, 82, 83, 73, 86, 197, 67, 85, 82, 82, 217, 67, 85, 82, 82, 69, 78, 84,
     128, 67, 85, 82, 82, 69, 78, 212, 67, 85, 82, 76, 217, 67, 85, 82, 76,
-    73, 78, 199, 67, 85, 82, 76, 128, 67, 85, 82, 128, 67, 85, 80, 80, 69,
-    68, 128, 67, 85, 80, 80, 69, 196, 67, 85, 80, 73, 68, 79, 128, 67, 85,
-    80, 67, 65, 75, 69, 128, 67, 85, 79, 88, 128, 67, 85, 79, 80, 128, 67,
-    85, 79, 128, 67, 85, 205, 67, 85, 76, 84, 73, 86, 65, 84, 73, 79, 206,
-    67, 85, 67, 85, 77, 66, 69, 82, 128, 67, 85, 66, 69, 68, 128, 67, 85, 66,
-    69, 128, 67, 85, 66, 197, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 67,
-    85, 65, 84, 82, 73, 76, 76, 207, 67, 85, 65, 205, 67, 83, 73, 128, 67,
-    82, 89, 83, 84, 65, 204, 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73,
-    195, 67, 82, 89, 73, 78, 199, 67, 82, 85, 90, 69, 73, 82, 207, 67, 82,
-    85, 67, 73, 70, 79, 82, 205, 67, 82, 85, 67, 73, 66, 76, 69, 45, 53, 128,
-    67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67, 82, 85, 67, 73, 66, 76,
-    69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 50, 128, 67, 82, 85,
-    67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78, 128, 67, 82, 79, 83, 83, 73,
-    78, 71, 128, 67, 82, 79, 83, 83, 73, 78, 199, 67, 82, 79, 83, 83, 72, 65,
-    84, 67, 200, 67, 82, 79, 83, 83, 69, 68, 45, 84, 65, 73, 76, 128, 67, 82,
-    79, 83, 83, 69, 68, 128, 67, 82, 79, 83, 83, 69, 196, 67, 82, 79, 83, 83,
-    66, 79, 78, 69, 83, 128, 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211,
-    67, 82, 79, 80, 128, 67, 82, 79, 73, 88, 128, 67, 82, 79, 73, 83, 83, 65,
-    78, 84, 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76, 69,
+    73, 78, 199, 67, 85, 82, 76, 69, 196, 67, 85, 82, 76, 128, 67, 85, 82,
+    128, 67, 85, 80, 80, 69, 68, 128, 67, 85, 80, 80, 69, 196, 67, 85, 80,
+    73, 68, 79, 128, 67, 85, 80, 67, 65, 75, 69, 128, 67, 85, 79, 88, 128,
+    67, 85, 79, 80, 128, 67, 85, 79, 128, 67, 85, 205, 67, 85, 76, 84, 73,
+    86, 65, 84, 73, 79, 206, 67, 85, 67, 85, 77, 66, 69, 82, 128, 67, 85, 66,
+    69, 68, 128, 67, 85, 66, 69, 128, 67, 85, 66, 197, 67, 85, 65, 84, 82,
+    73, 76, 76, 79, 128, 67, 85, 65, 84, 82, 73, 76, 76, 207, 67, 85, 65,
+    205, 67, 83, 73, 128, 67, 82, 89, 83, 84, 65, 204, 67, 82, 89, 80, 84,
+    79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 89, 73, 78, 199, 67, 82, 85, 90,
+    69, 73, 82, 207, 67, 82, 85, 67, 73, 70, 79, 82, 205, 67, 82, 85, 67, 73,
+    66, 76, 69, 45, 53, 128, 67, 82, 85, 67, 73, 66, 76, 69, 45, 52, 128, 67,
+    82, 85, 67, 73, 66, 76, 69, 45, 51, 128, 67, 82, 85, 67, 73, 66, 76, 69,
+    45, 50, 128, 67, 82, 85, 67, 73, 66, 76, 69, 128, 67, 82, 79, 87, 78,
+    128, 67, 82, 79, 83, 83, 73, 78, 71, 128, 67, 82, 79, 83, 83, 73, 78,
+    199, 67, 82, 79, 83, 83, 72, 65, 84, 67, 200, 67, 82, 79, 83, 83, 69, 68,
+    45, 84, 65, 73, 76, 128, 67, 82, 79, 83, 83, 69, 68, 128, 67, 82, 79, 83,
+    83, 69, 196, 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 67, 82, 79, 83,
+    83, 66, 65, 82, 128, 67, 82, 79, 83, 83, 128, 67, 82, 79, 83, 211, 67,
+    82, 79, 80, 128, 67, 82, 79, 73, 88, 128, 67, 82, 79, 73, 83, 83, 65, 78,
+    84, 128, 67, 82, 79, 67, 85, 211, 67, 82, 79, 67, 79, 68, 73, 76, 69,
     128, 67, 82, 73, 67, 75, 69, 84, 128, 67, 82, 73, 67, 75, 69, 212, 67,
     82, 69, 83, 67, 69, 78, 84, 83, 128, 67, 82, 69, 83, 67, 69, 78, 84, 128,
     67, 82, 69, 83, 67, 69, 78, 212, 67, 82, 69, 68, 73, 212, 67, 82, 69, 65,
@@ -4748,605 +4809,616 @@
     85, 84, 69, 82, 128, 67, 79, 77, 80, 82, 69, 83, 83, 73, 79, 78, 128, 67,
     79, 77, 80, 82, 69, 83, 83, 69, 196, 67, 79, 77, 80, 79, 83, 73, 84, 73,
     79, 78, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 55, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    55, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 55, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    55, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 55, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    55, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 55, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    55, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 55, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    55, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 55, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    55, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 55, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 55, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 54, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    54, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 54, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 54, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 53, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    53, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 53, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 53, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 52, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    52, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 52, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 52, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    51, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 51, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 51, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 51, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 50, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 50, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 50, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    50, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 49, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 49, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 49, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    49, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 48, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56,
-    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 54, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 53, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 50, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 49, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55,
-    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 55, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 54, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 51, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 50, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54,
-    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 56, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 55, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 52, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 51, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54,
-    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 57, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 56, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 53, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 52, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53,
-    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 48, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 57, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 54, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 53, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52,
-    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 49, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 48, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 55, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 54, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51,
-    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 50, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 49, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 56, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 55, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50,
-    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 51, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 50, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 57, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 56, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49,
-    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 52, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 51, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 48, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 57, 128, 67, 79, 77, 80,
-    79, 78, 69, 78, 84, 45, 48, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
-    84, 45, 48, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48,
-    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 53, 128, 67, 79,
-    77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 52, 128, 67, 79, 77, 80, 79, 78,
-    69, 78, 84, 45, 48, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
-    48, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 49, 128,
-    67, 79, 77, 80, 79, 78, 69, 78, 212, 67, 79, 77, 80, 76, 73, 65, 78, 67,
-    69, 128, 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, 79, 77, 80, 76,
-    69, 84, 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, 84, 128, 67, 79,
-    77, 80, 65, 83, 83, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79, 77, 77,
-    79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77, 65, 78,
-    68, 128, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79, 77, 69,
-    84, 128, 67, 79, 77, 66, 73, 78, 69, 68, 128, 67, 79, 77, 66, 73, 78, 65,
-    84, 73, 79, 78, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78, 128,
-    67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67, 79, 76,
-    76, 128, 67, 79, 76, 196, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, 78,
-    71, 128, 67, 79, 69, 78, 199, 67, 79, 68, 65, 128, 67, 79, 67, 79, 78,
-    85, 84, 128, 67, 79, 67, 75, 84, 65, 73, 204, 67, 79, 65, 84, 128, 67,
+    79, 78, 69, 78, 84, 45, 55, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 54,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 54, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 54, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 54, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 54, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 53, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 52, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 51,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 50, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 49, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    55, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 55, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 55, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 55, 48, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 55, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 57, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 56, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 55, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 54, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 53, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 52,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 51, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 50, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 49, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 54, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 54, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 54, 48, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 54, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    54, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 57, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 56, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 55, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 54, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 53,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 52, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 51, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 50, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 49, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 53, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 53, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 53, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    53, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 53, 48, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 57, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 56, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 55, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 54,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 53, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 52, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 51, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 50, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 49, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 52, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 52, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 52, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    52, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 52, 48, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 57, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 57, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 56, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 56, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 56, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 55, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 55,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 54, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 54, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 53, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 53, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 52, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 52, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 51, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 51, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 50, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 50, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 49, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 49, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 51, 48, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 51, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    51, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 51, 48, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 51, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 57, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 57, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 57, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 57, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 56, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 56, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 56,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 55, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 55, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 55, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 54, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 54, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 54, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 53, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 53, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 53, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 52, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 52, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 52, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 52, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 51, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 51, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 51, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 50, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 50, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 50, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 49, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 49, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 49, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 48, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 50, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    50, 48, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 50, 48, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 50, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 50, 48, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 57, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 57, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 57,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 56, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 56, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 56, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 55, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 55, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 55, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 54, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 54, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 54, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 53, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 53, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 53, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 53, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 52, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 52, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 52, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 51, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 51, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 51, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 50, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 50, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 50, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 49, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 49, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 49, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 49, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 49, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    49, 48, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 49, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 49, 48, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 49, 48,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 57, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 57, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 57, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 57, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 57, 48, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 57, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 56, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 56, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 54, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 53, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 56, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 56, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56,
+    50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 49, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 56, 48, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 55, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 55, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 55, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 54, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 55, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 55, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55,
+    51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 50, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 55, 49, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 55, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 54, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 56, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 55, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 54, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 54, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54,
+    52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 51, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 54, 50, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 54, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 54, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 57, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 56, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 53, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 53, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53,
+    53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 52, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 51, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 53, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 53, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 53, 48, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 57, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 52, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 52, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52,
+    54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 53, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 52, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 52, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 52, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 49, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 52, 48, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 51, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 51, 56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51,
+    55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 54, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 53, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 51, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 51, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 50, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 51, 49, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 51, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 50, 57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50,
+    56, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 55, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 54, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 50, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 50, 52, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 51, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 50, 50, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 50, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 50, 48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49,
+    57, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 56, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 55, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 49, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 49, 53, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 52, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49, 51, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 49, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 49, 49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 49,
+    48, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 57, 128, 67, 79,
+    77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 56, 128, 67, 79, 77, 80, 79, 78,
+    69, 78, 84, 45, 48, 48, 55, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45,
+    48, 48, 54, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 53, 128,
+    67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48, 52, 128, 67, 79, 77, 80,
+    79, 78, 69, 78, 84, 45, 48, 48, 51, 128, 67, 79, 77, 80, 79, 78, 69, 78,
+    84, 45, 48, 48, 50, 128, 67, 79, 77, 80, 79, 78, 69, 78, 84, 45, 48, 48,
+    49, 128, 67, 79, 77, 80, 79, 78, 69, 78, 212, 67, 79, 77, 80, 76, 73, 65,
+    78, 67, 69, 128, 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, 67, 79, 77,
+    80, 76, 69, 84, 69, 68, 128, 67, 79, 77, 80, 76, 69, 77, 69, 78, 84, 128,
+    67, 79, 77, 80, 65, 83, 83, 128, 67, 79, 77, 80, 65, 82, 69, 128, 67, 79,
+    77, 77, 79, 206, 67, 79, 77, 77, 69, 82, 67, 73, 65, 204, 67, 79, 77, 77,
+    65, 78, 68, 128, 67, 79, 77, 77, 65, 128, 67, 79, 77, 77, 193, 67, 79,
+    77, 69, 84, 128, 67, 79, 77, 66, 73, 78, 69, 68, 128, 67, 79, 77, 66, 73,
+    78, 65, 84, 73, 79, 78, 128, 67, 79, 77, 66, 128, 67, 79, 76, 85, 77, 78,
+    128, 67, 79, 76, 79, 82, 128, 67, 79, 76, 76, 73, 83, 73, 79, 206, 67,
+    79, 76, 76, 128, 67, 79, 76, 196, 67, 79, 73, 78, 128, 67, 79, 70, 70,
+    73, 78, 128, 67, 79, 69, 78, 71, 128, 67, 79, 69, 78, 199, 67, 79, 68,
+    65, 128, 67, 79, 67, 79, 78, 85, 84, 128, 67, 79, 67, 75, 84, 65, 73,
+    204, 67, 79, 67, 75, 82, 79, 65, 67, 72, 128, 67, 79, 65, 84, 128, 67,
     79, 65, 83, 84, 69, 82, 128, 67, 79, 65, 128, 67, 77, 128, 67, 205, 67,
     76, 85, 83, 84, 69, 82, 45, 73, 78, 73, 84, 73, 65, 204, 67, 76, 85, 83,
     84, 69, 82, 45, 70, 73, 78, 65, 204, 67, 76, 85, 83, 84, 69, 210, 67, 76,
@@ -5373,38 +5445,40 @@
     73, 82, 67, 76, 73, 78, 199, 67, 73, 82, 67, 76, 69, 83, 128, 67, 73, 82,
     67, 76, 69, 211, 67, 73, 82, 67, 76, 69, 68, 128, 67, 73, 80, 128, 67,
     73, 78, 78, 65, 66, 65, 82, 128, 67, 73, 78, 69, 77, 65, 128, 67, 73,
-    206, 67, 73, 205, 67, 73, 73, 128, 67, 73, 69, 88, 128, 67, 73, 69, 85,
-    67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67,
-    45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73, 69, 85, 78, 71,
-    128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73, 69, 80, 128, 67,
-    73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128, 67, 72, 89, 82,
-    88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67, 72, 87, 86, 128,
-    67, 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72, 85, 82, 67, 72,
-    128, 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72, 85, 79, 88, 128,
-    67, 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67, 72, 85, 79, 128,
-    67, 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82, 89, 83, 65, 78, 84,
-    72, 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, 79, 85, 128, 67, 72, 82, 79,
-    78, 79, 78, 128, 67, 72, 82, 79, 77, 193, 67, 72, 82, 79, 193, 67, 72,
-    82, 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, 77, 65, 83, 128, 67, 72, 82,
-    73, 83, 84, 77, 65, 211, 67, 72, 79, 89, 128, 67, 72, 79, 88, 128, 67,
-    72, 79, 84, 128, 67, 72, 79, 82, 69, 86, 77, 193, 67, 72, 79, 80, 83, 84,
-    73, 67, 75, 83, 128, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128, 67,
-    72, 79, 69, 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65,
-    128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83,
-    128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85,
-    67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128, 67, 72, 73,
-    84, 85, 69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85,
-    77, 67, 72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 82, 79, 78, 128, 67, 72,
-    73, 82, 69, 84, 128, 67, 72, 73, 80, 77, 85, 78, 75, 128, 67, 72, 73, 78,
-    79, 79, 203, 67, 72, 73, 78, 71, 128, 67, 72, 73, 78, 69, 83, 197, 67,
-    72, 73, 78, 128, 67, 72, 73, 77, 69, 128, 67, 72, 73, 76, 76, 213, 67,
-    72, 73, 76, 68, 82, 69, 206, 67, 72, 73, 76, 68, 128, 67, 72, 73, 76,
-    128, 67, 72, 73, 75, 201, 67, 72, 73, 69, 85, 67, 72, 45, 75, 72, 73, 69,
-    85, 75, 72, 128, 67, 72, 73, 69, 85, 67, 72, 45, 72, 73, 69, 85, 72, 128,
-    67, 72, 73, 69, 85, 67, 200, 67, 72, 73, 67, 75, 69, 78, 128, 67, 72, 73,
-    67, 75, 128, 67, 72, 73, 128, 67, 72, 201, 67, 72, 72, 65, 128, 67, 72,
-    69, 88, 128, 67, 72, 69, 86, 82, 79, 206, 67, 72, 69, 84, 128, 67, 72,
-    69, 83, 84, 78, 85, 84, 128, 67, 72, 69, 83, 84, 128, 67, 72, 69, 83,
+    206, 67, 73, 77, 128, 67, 73, 205, 67, 73, 73, 128, 67, 73, 69, 88, 128,
+    67, 73, 69, 85, 67, 45, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 67,
+    73, 69, 85, 67, 45, 80, 73, 69, 85, 80, 128, 67, 73, 69, 85, 67, 45, 73,
+    69, 85, 78, 71, 128, 67, 73, 69, 85, 195, 67, 73, 69, 84, 128, 67, 73,
+    69, 80, 128, 67, 73, 69, 128, 67, 72, 89, 88, 128, 67, 72, 89, 84, 128,
+    67, 72, 89, 82, 88, 128, 67, 72, 89, 82, 128, 67, 72, 89, 80, 128, 67,
+    72, 87, 86, 128, 67, 72, 85, 88, 128, 67, 72, 85, 82, 88, 128, 67, 72,
+    85, 82, 67, 72, 128, 67, 72, 85, 82, 128, 67, 72, 85, 80, 128, 67, 72,
+    85, 79, 88, 128, 67, 72, 85, 79, 84, 128, 67, 72, 85, 79, 80, 128, 67,
+    72, 85, 79, 128, 67, 72, 85, 76, 65, 128, 67, 72, 85, 128, 67, 72, 82,
+    89, 83, 65, 78, 84, 72, 69, 77, 85, 77, 128, 67, 72, 82, 79, 78, 79, 85,
+    128, 67, 72, 82, 79, 78, 79, 78, 128, 67, 72, 82, 79, 77, 193, 67, 72,
+    82, 79, 193, 67, 72, 82, 73, 86, 73, 128, 67, 72, 82, 73, 83, 84, 77, 65,
+    83, 128, 67, 72, 82, 73, 83, 84, 77, 65, 211, 67, 72, 79, 89, 128, 67,
+    72, 79, 88, 128, 67, 72, 79, 84, 128, 67, 72, 79, 82, 69, 86, 77, 193,
+    67, 72, 79, 82, 65, 83, 77, 73, 65, 206, 67, 72, 79, 80, 83, 84, 73, 67,
+    75, 83, 128, 67, 72, 79, 80, 128, 67, 72, 79, 75, 69, 128, 67, 72, 79,
+    69, 128, 67, 72, 79, 67, 79, 76, 65, 84, 197, 67, 72, 79, 65, 128, 67,
+    72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 67,
+    72, 73, 84, 85, 69, 85, 77, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128,
+    67, 72, 73, 84, 85, 69, 85, 77, 83, 73, 79, 83, 128, 67, 72, 73, 84, 85,
+    69, 85, 77, 67, 73, 69, 85, 67, 128, 67, 72, 73, 84, 85, 69, 85, 77, 67,
+    72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 82, 79, 78, 128, 67, 72, 73, 82,
+    69, 84, 128, 67, 72, 73, 80, 77, 85, 78, 75, 128, 67, 72, 73, 78, 79, 79,
+    203, 67, 72, 73, 78, 71, 128, 67, 72, 73, 78, 69, 83, 197, 67, 72, 73,
+    78, 128, 67, 72, 73, 77, 69, 128, 67, 72, 73, 77, 128, 67, 72, 73, 76,
+    76, 213, 67, 72, 73, 76, 68, 82, 69, 206, 67, 72, 73, 76, 68, 128, 67,
+    72, 73, 76, 128, 67, 72, 73, 75, 201, 67, 72, 73, 69, 85, 67, 72, 45, 75,
+    72, 73, 69, 85, 75, 72, 128, 67, 72, 73, 69, 85, 67, 72, 45, 72, 73, 69,
+    85, 72, 128, 67, 72, 73, 69, 85, 67, 200, 67, 72, 73, 67, 75, 69, 78,
+    128, 67, 72, 73, 67, 75, 128, 67, 72, 73, 128, 67, 72, 201, 67, 72, 72,
+    73, 77, 128, 67, 72, 72, 65, 128, 67, 72, 69, 88, 128, 67, 72, 69, 86,
+    82, 79, 78, 128, 67, 72, 69, 86, 82, 79, 206, 67, 72, 69, 84, 128, 67,
+    72, 69, 83, 84, 78, 85, 84, 128, 67, 72, 69, 83, 84, 128, 67, 72, 69, 83,
     211, 67, 72, 69, 82, 89, 128, 67, 72, 69, 82, 82, 217, 67, 72, 69, 82,
     82, 73, 69, 83, 128, 67, 72, 69, 81, 85, 69, 82, 69, 196, 67, 72, 69, 80,
     128, 67, 72, 69, 73, 78, 65, 80, 128, 67, 72, 69, 73, 75, 72, 69, 73,
@@ -5768,350 +5842,774 @@
     67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 66, 49, 55, 50, 128, 67, 72,
     65, 82, 65, 67, 84, 69, 82, 45, 49, 66, 49, 55, 49, 128, 67, 72, 65, 82,
     65, 67, 84, 69, 82, 45, 49, 66, 49, 55, 48, 128, 67, 72, 65, 82, 65, 67,
-    84, 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 84, 69, 82, 128,
-    67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72, 65, 78, 128, 67,
-    72, 65, 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65,
-    77, 73, 76, 73, 128, 67, 72, 65, 205, 67, 72, 65, 75, 77, 193, 67, 72,
-    65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, 196, 67, 72,
-    65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, 69, 86, 73, 84, 85,
-    128, 67, 69, 82, 69, 83, 128, 67, 69, 82, 69, 77, 79, 78, 89, 128, 67,
-    69, 82, 69, 75, 128, 67, 69, 82, 45, 87, 65, 128, 67, 69, 80, 128, 67,
-    69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79,
-    83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71,
-    67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83,
-    73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 73, 69,
-    85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, 72, 73, 69,
-    85, 67, 72, 128, 67, 69, 78, 84, 85, 82, 73, 65, 204, 67, 69, 78, 84, 82,
-    69, 76, 73, 78, 197, 67, 69, 78, 84, 82, 69, 68, 128, 67, 69, 78, 84, 82,
-    69, 196, 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 197, 67, 69,
-    78, 84, 82, 65, 76, 73, 90, 65, 84, 73, 79, 206, 67, 69, 78, 128, 67, 69,
-    76, 84, 73, 195, 67, 69, 76, 83, 73, 85, 83, 128, 67, 69, 76, 69, 66, 82,
-    65, 84, 73, 79, 78, 128, 67, 69, 73, 82, 84, 128, 67, 69, 73, 76, 73, 78,
-    71, 128, 67, 69, 73, 76, 73, 78, 199, 67, 69, 69, 86, 128, 67, 69, 69,
-    66, 128, 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65, 128, 67, 69, 68,
-    73, 76, 76, 193, 67, 69, 68, 201, 67, 69, 67, 69, 75, 128, 67, 69, 67,
-    65, 75, 128, 67, 69, 67, 65, 203, 67, 69, 65, 76, 67, 128, 67, 67, 85,
-    128, 67, 67, 79, 128, 67, 67, 73, 128, 67, 67, 72, 85, 128, 67, 67, 72,
-    79, 128, 67, 67, 72, 73, 128, 67, 67, 72, 72, 85, 128, 67, 67, 72, 72,
-    79, 128, 67, 67, 72, 72, 73, 128, 67, 67, 72, 72, 69, 69, 128, 67, 67,
-    72, 72, 69, 128, 67, 67, 72, 72, 65, 65, 128, 67, 67, 72, 72, 65, 128,
-    67, 67, 72, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128,
-    67, 67, 72, 65, 128, 67, 67, 72, 128, 67, 67, 69, 69, 128, 67, 67, 69,
-    128, 67, 67, 65, 65, 128, 67, 67, 65, 128, 67, 65, 89, 78, 128, 67, 65,
-    89, 65, 78, 78, 65, 128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65,
-    85, 84, 73, 79, 206, 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68,
-    65, 128, 67, 65, 85, 67, 65, 83, 73, 65, 206, 67, 65, 85, 128, 67, 65,
-    84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 212, 67, 65, 83, 84, 76,
-    69, 128, 67, 65, 83, 75, 69, 212, 67, 65, 82, 89, 83, 84, 73, 65, 206,
-    67, 65, 82, 84, 87, 72, 69, 69, 76, 128, 67, 65, 82, 84, 82, 73, 68, 71,
-    69, 128, 67, 65, 82, 84, 128, 67, 65, 82, 211, 67, 65, 82, 82, 79, 84,
-    128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, 80, 69, 78, 84, 82,
-    217, 67, 65, 82, 208, 67, 65, 82, 79, 85, 83, 69, 204, 67, 65, 82, 79,
-    78, 128, 67, 65, 82, 79, 206, 67, 65, 82, 73, 203, 67, 65, 82, 73, 65,
-    206, 67, 65, 82, 69, 84, 128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67,
-    65, 82, 68, 83, 128, 67, 65, 82, 68, 128, 67, 65, 82, 196, 67, 65, 82,
-    128, 67, 65, 210, 67, 65, 80, 85, 212, 67, 65, 80, 84, 73, 86, 69, 128,
-    67, 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65, 80, 80, 69, 196, 67, 65,
-    80, 79, 128, 67, 65, 80, 73, 84, 85, 76, 85, 77, 128, 67, 65, 80, 73, 84,
-    65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78,
-    79, 69, 128, 67, 65, 78, 78, 79, 78, 128, 67, 65, 78, 78, 69, 196, 67,
-    65, 78, 199, 67, 65, 78, 69, 128, 67, 65, 78, 68, 89, 128, 67, 65, 78,
-    68, 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78,
-    68, 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78, 68, 82, 193, 67, 65,
-    78, 68, 76, 69, 128, 67, 65, 78, 67, 69, 82, 128, 67, 65, 78, 67, 69, 76,
-    76, 65, 84, 73, 79, 206, 67, 65, 78, 67, 69, 76, 128, 67, 65, 78, 67, 69,
-    204, 67, 65, 78, 128, 67, 65, 77, 80, 73, 78, 71, 128, 67, 65, 77, 78,
-    85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65, 77, 69, 82, 193, 67, 65,
-    77, 69, 76, 128, 67, 65, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65,
-    76, 88, 128, 67, 65, 76, 76, 128, 67, 65, 76, 204, 67, 65, 76, 69, 78,
-    68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65, 210, 67, 65, 76, 67, 85, 76,
-    65, 84, 79, 82, 128, 67, 65, 76, 67, 128, 67, 65, 75, 82, 65, 128, 67,
-    65, 75, 197, 67, 65, 73, 128, 67, 65, 72, 128, 67, 65, 69, 83, 85, 82,
-    65, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 67, 65,
-    67, 84, 85, 83, 128, 67, 65, 66, 76, 69, 87, 65, 89, 128, 67, 65, 66, 73,
-    78, 69, 84, 128, 67, 65, 66, 66, 65, 71, 69, 45, 84, 82, 69, 69, 128, 67,
-    65, 65, 78, 71, 128, 67, 65, 65, 73, 128, 67, 193, 67, 48, 50, 52, 128,
-    67, 48, 50, 51, 128, 67, 48, 50, 50, 128, 67, 48, 50, 49, 128, 67, 48,
-    50, 48, 128, 67, 48, 49, 57, 128, 67, 48, 49, 56, 128, 67, 48, 49, 55,
-    128, 67, 48, 49, 54, 128, 67, 48, 49, 53, 128, 67, 48, 49, 52, 128, 67,
-    48, 49, 51, 128, 67, 48, 49, 50, 128, 67, 48, 49, 49, 128, 67, 48, 49,
-    48, 65, 128, 67, 48, 49, 48, 128, 67, 48, 48, 57, 128, 67, 48, 48, 56,
-    128, 67, 48, 48, 55, 128, 67, 48, 48, 54, 128, 67, 48, 48, 53, 128, 67,
-    48, 48, 52, 128, 67, 48, 48, 51, 128, 67, 48, 48, 50, 67, 128, 67, 48,
-    48, 50, 66, 128, 67, 48, 48, 50, 65, 128, 67, 48, 48, 50, 128, 67, 48,
-    48, 49, 128, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51,
-    57, 128, 67, 45, 49, 56, 128, 66, 90, 85, 78, 199, 66, 90, 72, 201, 66,
-    89, 84, 197, 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75,
-    82, 65, 73, 78, 73, 65, 206, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87,
-    69, 69, 128, 66, 87, 69, 128, 66, 87, 65, 128, 66, 85, 85, 77, 73, 83,
-    72, 128, 66, 85, 84, 84, 79, 78, 128, 66, 85, 84, 84, 79, 206, 66, 85,
-    84, 84, 69, 82, 70, 76, 89, 128, 66, 85, 84, 84, 69, 82, 128, 66, 85,
-    212, 66, 85, 83, 84, 211, 66, 85, 83, 212, 66, 85, 83, 83, 89, 69, 82,
-    85, 128, 66, 85, 83, 73, 78, 69, 83, 211, 66, 85, 211, 66, 85, 82, 213,
-    66, 85, 82, 82, 73, 84, 79, 128, 66, 85, 82, 50, 128, 66, 85, 210, 66,
-    85, 79, 88, 128, 66, 85, 79, 80, 128, 66, 85, 78, 78, 217, 66, 85, 78,
-    71, 128, 66, 85, 77, 80, 217, 66, 85, 76, 85, 71, 128, 66, 85, 76, 85,
-    199, 66, 85, 76, 76, 83, 69, 89, 69, 128, 66, 85, 76, 76, 211, 66, 85,
-    76, 76, 72, 79, 82, 78, 128, 66, 85, 76, 76, 72, 79, 82, 206, 66, 85, 76,
-    76, 69, 84, 128, 66, 85, 76, 76, 69, 212, 66, 85, 76, 76, 128, 66, 85,
-    76, 66, 128, 66, 85, 75, 89, 128, 66, 85, 73, 76, 68, 73, 78, 71, 83,
-    128, 66, 85, 73, 76, 68, 73, 78, 71, 128, 66, 85, 73, 76, 68, 73, 78,
-    199, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, 197, 66, 85, 71,
-    128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85, 68, 128, 66, 85, 67, 75,
-    76, 69, 128, 66, 85, 66, 66, 76, 69, 83, 128, 66, 85, 66, 66, 76, 69,
-    128, 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75, 65, 173,
-    66, 83, 68, 85, 211, 66, 82, 85, 83, 200, 66, 82, 79, 87, 206, 66, 82,
-    79, 79, 77, 128, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69, 206,
-    66, 82, 79, 67, 67, 79, 76, 73, 128, 66, 82, 79, 65, 196, 66, 82, 73, 83,
-    84, 76, 69, 128, 66, 82, 73, 71, 72, 84, 78, 69, 83, 211, 66, 82, 73, 69,
-    70, 83, 128, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73, 68, 71,
-    197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 73, 128, 66,
-    82, 69, 86, 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78,
-    128, 66, 82, 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69, 65, 83,
-    84, 45, 70, 69, 69, 68, 73, 78, 71, 128, 66, 82, 69, 65, 75, 84, 72, 82,
-    79, 85, 71, 72, 128, 66, 82, 68, 193, 66, 82, 65, 78, 67, 72, 73, 78,
-    199, 66, 82, 65, 78, 67, 72, 69, 83, 128, 66, 82, 65, 78, 67, 72, 128,
-    66, 82, 65, 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 73,
-    78, 128, 66, 82, 65, 67, 75, 69, 84, 69, 196, 66, 82, 65, 67, 75, 69,
-    212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 80, 72, 128, 66, 79, 89,
-    211, 66, 79, 89, 128, 66, 79, 88, 73, 78, 199, 66, 79, 87, 84, 73, 69,
-    128, 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66, 79,
-    87, 76, 128, 66, 79, 87, 204, 66, 79, 87, 73, 78, 199, 66, 79, 215, 66,
-    79, 85, 81, 85, 69, 84, 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85, 78,
-    68, 65, 82, 217, 66, 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196, 66,
-    79, 84, 84, 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84, 79,
-    77, 128, 66, 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66, 79,
-    84, 84, 76, 197, 66, 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66, 79,
-    82, 65, 88, 45, 51, 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82, 65,
-    88, 128, 66, 79, 80, 79, 77, 79, 70, 207, 66, 79, 79, 84, 83, 128, 66,
-    79, 79, 84, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 79, 75,
-    83, 128, 66, 79, 79, 75, 77, 65, 82, 75, 128, 66, 79, 79, 75, 77, 65, 82,
-    203, 66, 79, 78, 69, 128, 66, 79, 77, 66, 128, 66, 79, 77, 128, 66, 79,
-    76, 84, 128, 66, 79, 76, 212, 66, 79, 72, 65, 73, 82, 73, 195, 66, 79,
-    68, 89, 128, 66, 79, 68, 217, 66, 79, 65, 82, 128, 66, 79, 65, 128, 66,
-    76, 85, 69, 128, 66, 76, 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76,
-    79, 87, 70, 73, 83, 72, 128, 66, 76, 79, 215, 66, 76, 79, 83, 83, 79, 77,
-    128, 66, 76, 79, 79, 68, 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75,
+    84, 69, 82, 45, 49, 56, 67, 68, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 68, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 68, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 68, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 68,
+    49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 68, 48, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 70, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 69, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 68, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 67, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 67, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 67, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 67, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 67,
+    56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 55, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 54, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 53, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 67, 52, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 67, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 67, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 67, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 67, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66,
+    70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 69, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 68, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 67, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 66, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 66, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 66, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 66, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 66, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66,
+    54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 53, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 52, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 51, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 66, 50, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 66, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 66, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 65, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 65, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65,
+    68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 67, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 66, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 65, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 57, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 65, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 65, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 65, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 65, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65,
+    52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 51, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 50, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 49, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 65, 48, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 57, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 57, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 57, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 57, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57,
+    66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57, 65, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57, 57, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57, 56, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 57, 55, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 57, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 57, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 57, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 57, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57,
+    50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57, 49, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 57, 48, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 56, 70, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 56, 69, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 56, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 56, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 56, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 56, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 56,
+    57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 56, 56, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 56, 55, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 56, 54, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 56, 53, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 56, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 56, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 56, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 56, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 56,
+    48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 70, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 69, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 68, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 67, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 55, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 55, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 55, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 55, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55,
+    55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 54, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 53, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 52, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 55, 51, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 55, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 55, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 55, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 54, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54,
+    69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 68, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 67, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 66, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 65, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 54, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 54, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 54, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 54, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54,
+    53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 52, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 51, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 50, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 54, 49, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 54, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 53, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 53, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 53, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53,
+    67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 66, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 65, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 57, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 56, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 53, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 53, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 53, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 53, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53,
+    51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 50, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 49, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 53, 48, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 52, 70, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 52, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 52, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 52, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 52, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 52,
+    65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 52, 57, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 52, 56, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 52, 55, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 52, 54, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 52, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 52, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 52, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 52, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 52,
+    49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 52, 48, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 70, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 69, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 68, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 51, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 51, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 51, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 51, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 51,
+    56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 55, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 54, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 53, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 51, 52, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 51, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 51, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 51, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 51, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50,
+    70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 69, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 68, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 67, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 66, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 50, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 50, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 50, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 50, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50,
+    54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 53, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 52, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 51, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 50, 50, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 50, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 50, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 49, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 49, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49,
+    68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 67, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 66, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 65, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 57, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 49, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 49, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 49, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 49, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49,
+    52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 51, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 50, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 49, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 49, 48, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 48, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 48, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 48, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 48, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48,
+    66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48, 65, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48, 57, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48, 56, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 67, 48, 55, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 67, 48, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 67, 48, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 67, 48, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    67, 48, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48,
+    50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48, 49, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 67, 48, 48, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 70, 70, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 70, 69, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 70, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 70, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 70, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 70, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 70,
+    57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 70, 56, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 70, 55, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 70, 54, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 70, 53, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 70, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 70, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 70, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 70, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 70,
+    48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 70, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 69, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 68, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 67, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 69, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 69, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 69, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 69, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69,
+    55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 54, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 53, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 52, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 69, 51, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 69, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 69, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 69, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 68, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68,
+    69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 68, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 67, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 66, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 65, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 68, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 68, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 68, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 68, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68,
+    53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 52, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 51, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 50, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 68, 49, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 68, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 67, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 67, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 67, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67,
+    67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 66, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 65, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 57, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 56, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 67, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 67, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 67, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 67, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67,
+    51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 50, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 49, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 67, 48, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 66, 70, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 66, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 66, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 66, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 66, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 66,
+    65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 66, 57, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 66, 56, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 66, 55, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 66, 54, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 66, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 66, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 66, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 66, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 66,
+    49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 66, 48, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 70, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 69, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 68, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 65, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 65, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 65, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 65, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 65,
+    56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 55, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 54, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 53, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 65, 52, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 65, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 65, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 65, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 65, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57,
+    70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 69, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 68, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 67, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 66, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 57, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 57, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 57, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 57, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57,
+    54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 53, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 52, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 51, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 57, 50, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 57, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 57, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 56, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 56, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56,
+    68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 67, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 66, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 65, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 57, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 56, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 56, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 56, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 56, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56,
+    52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 51, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 50, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 49, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 56, 48, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 55, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 55, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 55, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 55, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55,
+    66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55, 65, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55, 57, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55, 56, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 55, 55, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 55, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 55, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 55, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 55, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55,
+    50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55, 49, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 55, 48, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 54, 70, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 54, 69, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 54, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 54, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 54, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 54, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 54,
+    57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 54, 56, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 54, 55, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 54, 54, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 54, 53, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 54, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 54, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 54, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 54, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 54,
+    48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 70, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 69, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 68, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 67, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 53, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 53, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 53, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 53, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53,
+    55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 54, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 53, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 52, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 53, 51, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 53, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 53, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 53, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 52, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52,
+    69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 68, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 67, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 66, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 65, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 52, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 52, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 52, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 52, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52,
+    53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 52, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 51, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 50, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 52, 49, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 52, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 51, 70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 51, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 51, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51,
+    67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 66, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 65, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 57, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 56, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 51, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 51, 54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 51, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 51, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51,
+    51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 50, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 49, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 51, 48, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 50, 70, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 50, 69, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 50, 68, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 50, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 50, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 50,
+    65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 50, 57, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 50, 56, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 50, 55, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 50, 54, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 50, 53, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 50, 52, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 50, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 50, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 50,
+    49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 50, 48, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 70, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 69, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 68, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 49, 67, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 49, 66, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 49, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 49, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 49,
+    56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 55, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 54, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 53, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 49, 52, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 49, 51, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 49, 50, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 49, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 49, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48,
+    70, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 69, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 68, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 67, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 66, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 48, 65, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 48, 57, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45,
+    49, 56, 66, 48, 56, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56,
+    66, 48, 55, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48,
+    54, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 53, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 52, 128, 67, 72,
+    65, 82, 65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 51, 128, 67, 72, 65, 82,
+    65, 67, 84, 69, 82, 45, 49, 56, 66, 48, 50, 128, 67, 72, 65, 82, 65, 67,
+    84, 69, 82, 45, 49, 56, 66, 48, 49, 128, 67, 72, 65, 82, 65, 67, 84, 69,
+    82, 45, 49, 56, 66, 48, 48, 128, 67, 72, 65, 82, 65, 67, 84, 69, 82, 128,
+    67, 72, 65, 82, 65, 67, 84, 69, 210, 67, 72, 65, 82, 128, 67, 72, 65, 80,
+    84, 69, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 128, 67, 72,
+    65, 78, 128, 67, 72, 65, 77, 75, 79, 128, 67, 72, 65, 77, 73, 76, 79, 78,
+    128, 67, 72, 65, 77, 73, 76, 73, 128, 67, 72, 65, 205, 67, 72, 65, 75,
+    77, 193, 67, 72, 65, 73, 78, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72,
+    65, 196, 67, 72, 65, 65, 128, 67, 71, 74, 128, 67, 69, 88, 128, 67, 69,
+    86, 73, 84, 85, 128, 67, 69, 82, 69, 83, 128, 67, 69, 82, 69, 77, 79, 78,
+    89, 128, 67, 69, 82, 69, 75, 128, 67, 69, 82, 45, 87, 65, 128, 67, 69,
+    80, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71,
+    83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83,
+    65, 78, 71, 67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69,
+    85, 77, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77,
+    67, 73, 69, 85, 67, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67,
+    72, 73, 69, 85, 67, 72, 128, 67, 69, 78, 84, 85, 82, 73, 65, 204, 67, 69,
+    78, 84, 82, 69, 76, 73, 78, 197, 67, 69, 78, 84, 82, 69, 68, 128, 67, 69,
+    78, 84, 82, 69, 196, 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82,
+    197, 67, 69, 78, 84, 82, 65, 76, 73, 90, 65, 84, 73, 79, 206, 67, 69, 78,
+    128, 67, 69, 76, 84, 73, 195, 67, 69, 76, 83, 73, 85, 83, 128, 67, 69,
+    76, 69, 66, 82, 65, 84, 73, 79, 78, 128, 67, 69, 73, 82, 84, 128, 67, 69,
+    73, 76, 73, 78, 71, 128, 67, 69, 73, 76, 73, 78, 199, 67, 69, 69, 86,
+    128, 67, 69, 69, 66, 128, 67, 69, 69, 128, 67, 69, 68, 73, 76, 76, 65,
+    128, 67, 69, 68, 73, 76, 76, 193, 67, 69, 68, 201, 67, 69, 67, 69, 75,
+    128, 67, 69, 67, 65, 75, 128, 67, 69, 67, 65, 203, 67, 69, 65, 76, 67,
+    128, 67, 67, 85, 128, 67, 67, 79, 128, 67, 67, 73, 128, 67, 67, 72, 85,
+    128, 67, 67, 72, 79, 128, 67, 67, 72, 73, 128, 67, 67, 72, 72, 85, 128,
+    67, 67, 72, 72, 79, 128, 67, 67, 72, 72, 73, 128, 67, 67, 72, 72, 69, 69,
+    128, 67, 67, 72, 72, 69, 128, 67, 67, 72, 72, 65, 65, 128, 67, 67, 72,
+    72, 65, 128, 67, 67, 72, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, 72,
+    65, 65, 128, 67, 67, 72, 65, 128, 67, 67, 72, 128, 67, 67, 69, 69, 128,
+    67, 67, 65, 65, 128, 67, 65, 89, 78, 128, 67, 65, 89, 65, 78, 78, 65,
+    128, 67, 65, 88, 128, 67, 65, 86, 69, 128, 67, 65, 85, 84, 73, 79, 206,
+    67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 65, 85, 68, 65, 128, 67, 65, 85,
+    67, 65, 83, 73, 65, 206, 67, 65, 85, 128, 67, 65, 84, 65, 87, 65, 128,
+    67, 65, 84, 128, 67, 65, 212, 67, 65, 83, 84, 76, 69, 128, 67, 65, 83,
+    75, 69, 212, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 65, 82, 84, 87, 72,
+    69, 69, 76, 128, 67, 65, 82, 84, 82, 73, 68, 71, 69, 128, 67, 65, 82, 84,
+    128, 67, 65, 82, 211, 67, 65, 82, 82, 79, 84, 128, 67, 65, 82, 82, 73,
+    65, 71, 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 67, 65, 82, 208, 67,
+    65, 82, 79, 85, 83, 69, 204, 67, 65, 82, 79, 78, 128, 67, 65, 82, 79,
+    206, 67, 65, 82, 73, 203, 67, 65, 82, 73, 65, 206, 67, 65, 82, 69, 84,
+    128, 67, 65, 82, 69, 212, 67, 65, 82, 197, 67, 65, 82, 68, 83, 128, 67,
+    65, 82, 196, 67, 65, 82, 128, 67, 65, 210, 67, 65, 80, 85, 212, 67, 65,
+    80, 84, 73, 86, 69, 128, 67, 65, 80, 82, 73, 67, 79, 82, 78, 128, 67, 65,
+    80, 80, 69, 196, 67, 65, 80, 79, 128, 67, 65, 80, 73, 84, 85, 76, 85, 77,
+    128, 67, 65, 80, 73, 84, 65, 76, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84,
+    73, 79, 206, 67, 65, 78, 79, 69, 128, 67, 65, 78, 78, 79, 78, 128, 67,
+    65, 78, 78, 69, 196, 67, 65, 78, 199, 67, 65, 78, 69, 128, 67, 65, 78,
+    68, 89, 128, 67, 65, 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, 67, 65, 78,
+    68, 82, 65, 66, 73, 78, 68, 213, 67, 65, 78, 68, 82, 65, 128, 67, 65, 78,
+    68, 82, 193, 67, 65, 78, 68, 76, 69, 128, 67, 65, 78, 67, 69, 82, 128,
+    67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 65, 78, 67, 69, 76,
+    128, 67, 65, 78, 67, 69, 204, 67, 65, 78, 128, 67, 65, 77, 80, 73, 78,
+    71, 128, 67, 65, 77, 78, 85, 195, 67, 65, 77, 69, 82, 65, 128, 67, 65,
+    77, 69, 82, 193, 67, 65, 77, 69, 76, 128, 67, 65, 76, 89, 65, 128, 67,
+    65, 76, 89, 193, 67, 65, 76, 88, 128, 67, 65, 76, 76, 128, 67, 65, 76,
+    204, 67, 65, 76, 69, 78, 68, 65, 82, 128, 67, 65, 76, 69, 78, 68, 65,
+    210, 67, 65, 76, 67, 85, 76, 65, 84, 79, 82, 128, 67, 65, 76, 67, 128,
+    67, 65, 75, 82, 65, 128, 67, 65, 75, 197, 67, 65, 73, 128, 67, 65, 72,
+    128, 67, 65, 69, 83, 85, 82, 65, 128, 67, 65, 68, 85, 67, 69, 85, 83,
+    128, 67, 65, 68, 193, 67, 65, 67, 84, 85, 83, 128, 67, 65, 66, 76, 69,
+    87, 65, 89, 128, 67, 65, 66, 73, 78, 69, 84, 128, 67, 65, 66, 66, 65, 71,
+    69, 45, 84, 82, 69, 69, 128, 67, 65, 65, 78, 71, 128, 67, 65, 65, 73,
+    128, 67, 193, 67, 48, 50, 52, 128, 67, 48, 50, 51, 128, 67, 48, 50, 50,
+    128, 67, 48, 50, 49, 128, 67, 48, 50, 48, 128, 67, 48, 49, 57, 128, 67,
+    48, 49, 56, 128, 67, 48, 49, 55, 128, 67, 48, 49, 54, 128, 67, 48, 49,
+    53, 128, 67, 48, 49, 52, 128, 67, 48, 49, 51, 128, 67, 48, 49, 50, 128,
+    67, 48, 49, 49, 128, 67, 48, 49, 48, 65, 128, 67, 48, 49, 48, 128, 67,
+    48, 48, 57, 128, 67, 48, 48, 56, 128, 67, 48, 48, 55, 128, 67, 48, 48,
+    54, 128, 67, 48, 48, 53, 128, 67, 48, 48, 52, 128, 67, 48, 48, 51, 128,
+    67, 48, 48, 50, 67, 128, 67, 48, 48, 50, 66, 128, 67, 48, 48, 50, 65,
+    128, 67, 48, 48, 50, 128, 67, 48, 48, 49, 128, 67, 45, 83, 73, 77, 80,
+    76, 73, 70, 73, 69, 196, 67, 45, 51, 57, 128, 67, 45, 49, 56, 128, 66,
+    90, 85, 78, 199, 66, 90, 72, 201, 66, 89, 84, 197, 66, 89, 69, 76, 79,
+    82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66,
+    88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, 66, 87, 69, 128, 66,
+    87, 65, 128, 66, 85, 85, 77, 73, 83, 72, 128, 66, 85, 84, 84, 79, 78,
+    128, 66, 85, 84, 84, 79, 206, 66, 85, 84, 84, 69, 82, 70, 76, 89, 128,
+    66, 85, 84, 84, 69, 82, 128, 66, 85, 212, 66, 85, 83, 84, 211, 66, 85,
+    83, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 83, 73, 78, 69, 83,
+    211, 66, 85, 211, 66, 85, 82, 213, 66, 85, 82, 82, 73, 84, 79, 128, 66,
+    85, 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66, 85, 79, 80, 128,
+    66, 85, 78, 78, 217, 66, 85, 78, 71, 128, 66, 85, 77, 80, 217, 66, 85,
+    76, 85, 71, 128, 66, 85, 76, 85, 199, 66, 85, 76, 76, 83, 69, 89, 69,
+    128, 66, 85, 76, 76, 211, 66, 85, 76, 76, 72, 79, 82, 78, 128, 66, 85,
+    76, 76, 72, 79, 82, 206, 66, 85, 76, 76, 69, 84, 128, 66, 85, 76, 76, 69,
+    212, 66, 85, 76, 76, 128, 66, 85, 76, 66, 128, 66, 85, 75, 89, 128, 66,
+    85, 73, 76, 68, 73, 78, 71, 83, 128, 66, 85, 73, 76, 68, 73, 78, 71, 128,
+    66, 85, 73, 76, 68, 73, 78, 199, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78,
+    69, 83, 197, 66, 85, 71, 128, 66, 85, 70, 70, 65, 76, 79, 128, 66, 85,
+    68, 128, 66, 85, 67, 75, 76, 69, 128, 66, 85, 67, 75, 69, 84, 128, 66,
+    85, 66, 66, 76, 69, 83, 128, 66, 85, 66, 66, 76, 69, 128, 66, 85, 66, 66,
+    76, 197, 66, 83, 84, 65, 82, 128, 66, 83, 75, 85, 210, 66, 83, 75, 65,
+    173, 66, 83, 68, 85, 211, 66, 82, 85, 83, 200, 66, 82, 79, 87, 206, 66,
+    82, 79, 79, 77, 128, 66, 82, 79, 78, 90, 69, 128, 66, 82, 79, 75, 69,
+    206, 66, 82, 79, 67, 67, 79, 76, 73, 128, 66, 82, 79, 65, 196, 66, 82,
+    73, 83, 84, 76, 69, 128, 66, 82, 73, 71, 72, 84, 78, 69, 83, 211, 66, 82,
+    73, 69, 70, 83, 128, 66, 82, 73, 69, 70, 67, 65, 83, 69, 128, 66, 82, 73,
+    68, 71, 197, 66, 82, 73, 68, 197, 66, 82, 73, 67, 75, 128, 66, 82, 73,
+    128, 66, 82, 69, 86, 73, 83, 128, 66, 82, 69, 86, 69, 45, 77, 65, 67, 82,
+    79, 78, 128, 66, 82, 69, 86, 197, 66, 82, 69, 65, 84, 200, 66, 82, 69,
+    65, 83, 84, 45, 70, 69, 69, 68, 73, 78, 71, 128, 66, 82, 69, 65, 75, 84,
+    72, 82, 79, 85, 71, 72, 128, 66, 82, 68, 193, 66, 82, 65, 78, 67, 72, 73,
+    78, 199, 66, 82, 65, 78, 67, 72, 69, 83, 128, 66, 82, 65, 78, 67, 72,
+    128, 66, 82, 65, 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82,
+    65, 73, 78, 128, 66, 82, 65, 67, 75, 69, 84, 69, 196, 66, 82, 65, 67, 75,
+    69, 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 80, 72, 128, 66, 79,
+    89, 211, 66, 79, 89, 128, 66, 79, 88, 73, 78, 199, 66, 79, 87, 84, 73,
+    69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, 76, 73, 78, 71, 128, 66,
+    79, 87, 76, 128, 66, 79, 87, 204, 66, 79, 87, 73, 78, 199, 66, 79, 215,
+    66, 79, 85, 81, 85, 69, 84, 128, 66, 79, 85, 81, 85, 69, 212, 66, 79, 85,
+    78, 68, 65, 82, 217, 66, 79, 84, 84, 79, 77, 45, 83, 72, 65, 68, 69, 196,
+    66, 79, 84, 84, 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 66, 79, 84, 84,
+    79, 77, 128, 66, 79, 84, 84, 79, 205, 66, 79, 84, 84, 76, 69, 128, 66,
+    79, 84, 84, 76, 197, 66, 79, 84, 200, 66, 79, 82, 85, 84, 79, 128, 66,
+    79, 82, 65, 88, 45, 51, 128, 66, 79, 82, 65, 88, 45, 50, 128, 66, 79, 82,
+    65, 88, 128, 66, 79, 80, 79, 77, 79, 70, 207, 66, 79, 79, 84, 83, 128,
+    66, 79, 79, 84, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 79,
+    75, 83, 128, 66, 79, 79, 75, 77, 65, 82, 75, 128, 66, 79, 79, 75, 77, 65,
+    82, 203, 66, 79, 78, 69, 128, 66, 79, 77, 66, 128, 66, 79, 77, 128, 66,
+    79, 76, 84, 128, 66, 79, 76, 212, 66, 79, 72, 65, 73, 82, 73, 195, 66,
+    79, 68, 89, 128, 66, 79, 68, 217, 66, 79, 65, 82, 128, 66, 79, 65, 128,
+    66, 76, 85, 69, 66, 69, 82, 82, 73, 69, 83, 128, 66, 76, 85, 69, 128, 66,
+    76, 85, 197, 66, 76, 79, 87, 73, 78, 199, 66, 76, 79, 87, 70, 73, 83, 72,
+    128, 66, 76, 79, 215, 66, 76, 79, 83, 83, 79, 77, 128, 66, 76, 79, 79,
+    68, 128, 66, 76, 79, 78, 196, 66, 76, 79, 67, 75, 45, 55, 128, 66, 76,
+    79, 67, 75, 45, 54, 128, 66, 76, 79, 67, 75, 45, 53, 128, 66, 76, 79, 67,
+    75, 45, 52, 128, 66, 76, 79, 67, 75, 45, 51, 128, 66, 76, 79, 67, 75, 45,
+    50, 128, 66, 76, 79, 67, 75, 45, 49, 51, 53, 56, 128, 66, 76, 79, 67, 75,
     128, 66, 76, 73, 78, 203, 66, 76, 65, 78, 75, 128, 66, 76, 65, 78, 203,
     66, 76, 65, 68, 197, 66, 76, 65, 67, 75, 76, 69, 84, 84, 69, 210, 66, 76,
     65, 67, 75, 70, 79, 79, 212, 66, 76, 65, 67, 75, 45, 76, 69, 84, 84, 69,
     210, 66, 76, 65, 67, 75, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 66, 76,
     65, 67, 75, 128, 66, 75, 65, 173, 66, 73, 84, 84, 69, 82, 128, 66, 73,
     84, 73, 78, 199, 66, 73, 84, 197, 66, 73, 84, 67, 79, 73, 206, 66, 73,
-    83, 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 73, 83, 72,
-    79, 208, 66, 73, 83, 69, 67, 84, 73, 78, 199, 66, 73, 83, 65, 72, 128,
-    66, 73, 82, 85, 128, 66, 73, 82, 84, 72, 68, 65, 217, 66, 73, 82, 71, 65,
-    128, 66, 73, 82, 71, 193, 66, 73, 82, 68, 128, 66, 73, 79, 72, 65, 90,
-    65, 82, 196, 66, 73, 78, 79, 86, 73, 76, 69, 128, 66, 73, 78, 79, 67, 85,
-    76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73, 78, 68, 73, 128, 66,
-    73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83, 128, 66, 73, 76, 76,
-    73, 65, 82, 68, 83, 128, 66, 73, 76, 76, 69, 196, 66, 73, 76, 65, 66, 73,
-    65, 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71, 128, 66, 73, 199, 66,
-    73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 66, 73, 68, 65, 75, 85,
-    79, 206, 66, 73, 67, 89, 67, 76, 73, 83, 84, 128, 66, 73, 67, 89, 67, 76,
-    69, 83, 128, 66, 73, 67, 89, 67, 76, 69, 128, 66, 73, 67, 69, 80, 83,
-    128, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73, 66, 128, 66, 201,
-    66, 72, 85, 128, 66, 72, 79, 79, 128, 66, 72, 79, 128, 66, 72, 73, 128,
-    66, 72, 69, 84, 72, 128, 66, 72, 69, 69, 128, 66, 72, 69, 128, 66, 72,
-    65, 84, 84, 73, 80, 82, 79, 76, 213, 66, 72, 65, 77, 128, 66, 72, 65, 73,
-    75, 83, 85, 75, 201, 66, 72, 65, 65, 128, 66, 72, 65, 128, 66, 69, 89,
-    89, 65, 76, 128, 66, 69, 88, 128, 66, 69, 86, 69, 82, 65, 71, 69, 128,
-    66, 69, 86, 69, 82, 65, 71, 197, 66, 69, 84, 87, 69, 69, 78, 128, 66, 69,
-    84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69, 84, 65, 128, 66, 69,
-    84, 193, 66, 69, 212, 66, 69, 83, 73, 68, 197, 66, 69, 82, 75, 65, 78,
-    65, 206, 66, 69, 82, 66, 69, 210, 66, 69, 80, 128, 66, 69, 79, 82, 195,
-    66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207, 66, 69, 78, 84, 128,
-    66, 69, 78, 212, 66, 69, 78, 71, 65, 76, 201, 66, 69, 78, 68, 69, 128,
-    66, 69, 78, 68, 128, 66, 69, 78, 196, 66, 69, 206, 66, 69, 76, 84, 128,
-    66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76, 76, 72, 79, 208, 66,
-    69, 76, 76, 128, 66, 69, 76, 204, 66, 69, 76, 71, 84, 72, 79, 210, 66,
-    69, 73, 84, 72, 128, 66, 69, 72, 73, 78, 196, 66, 69, 72, 69, 72, 128,
-    66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200, 66, 69, 71, 73, 78,
-    78, 73, 78, 71, 128, 66, 69, 71, 73, 78, 78, 69, 82, 128, 66, 69, 71, 73,
-    206, 66, 69, 70, 79, 82, 197, 66, 69, 69, 84, 76, 69, 128, 66, 69, 69,
-    84, 65, 128, 66, 69, 69, 210, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69,
-    69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85, 83, 69, 128, 66, 69,
-    65, 86, 69, 210, 66, 69, 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66,
-    69, 65, 82, 68, 69, 196, 66, 69, 65, 82, 128, 66, 69, 65, 210, 66, 69,
-    65, 78, 128, 66, 69, 65, 77, 69, 196, 66, 69, 65, 68, 83, 128, 66, 69,
-    65, 67, 200, 66, 67, 65, 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128,
-    66, 66, 89, 84, 128, 66, 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85,
-    88, 128, 66, 66, 85, 84, 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82,
-    128, 66, 66, 85, 80, 128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80,
-    128, 66, 66, 85, 79, 128, 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66,
-    79, 84, 128, 66, 66, 79, 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128,
-    66, 66, 73, 80, 128, 66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128,
-    66, 66, 73, 69, 80, 128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66,
-    69, 88, 128, 66, 66, 69, 80, 128, 66, 66, 69, 69, 128, 66, 66, 69, 128,
-    66, 66, 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66,
-    65, 65, 128, 66, 66, 65, 128, 66, 65, 89, 65, 78, 78, 65, 128, 66, 65,
-    85, 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, 84, 72, 84, 85, 66,
-    128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 84, 72, 128,
-    66, 65, 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, 65, 128, 66, 65,
-    83, 83, 193, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66, 65, 83, 72, 75,
-    73, 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 76, 73, 78, 197, 66, 65,
-    83, 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65, 83, 197, 66,
-    65, 82, 83, 128, 66, 65, 82, 211, 66, 65, 82, 82, 73, 69, 82, 128, 66,
-    65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 69, 69, 128, 66, 65, 82, 82,
-    69, 197, 66, 65, 82, 76, 73, 78, 69, 128, 66, 65, 82, 76, 69, 89, 128,
-    66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, 66, 65, 82, 66, 69, 210, 66,
-    65, 82, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, 65,
-    78, 75, 78, 79, 84, 197, 66, 65, 78, 75, 128, 66, 65, 78, 203, 66, 65,
-    78, 74, 79, 128, 66, 65, 78, 68, 128, 66, 65, 78, 65, 78, 65, 128, 66,
-    65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77, 66, 79, 79, 83, 128, 66,
-    65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65, 128, 66, 65, 76, 76, 80,
-    79, 73, 78, 212, 66, 65, 76, 76, 79, 84, 128, 66, 65, 76, 76, 79, 212,
-    66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, 69, 196, 66, 65, 76, 76,
-    79, 79, 78, 128, 66, 65, 76, 76, 69, 212, 66, 65, 76, 68, 128, 66, 65,
-    76, 65, 71, 128, 66, 65, 76, 128, 66, 65, 204, 66, 65, 73, 82, 75, 65,
-    78, 128, 66, 65, 73, 77, 65, 73, 128, 66, 65, 72, 84, 128, 66, 65, 72,
-    73, 82, 71, 79, 77, 85, 75, 72, 65, 128, 66, 65, 72, 65, 82, 50, 128, 66,
-    65, 72, 65, 82, 178, 66, 65, 72, 128, 66, 65, 71, 85, 69, 84, 84, 197,
-    66, 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, 65, 71, 69, 76,
-    128, 66, 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68,
-    77, 73, 78, 84, 79, 206, 66, 65, 68, 71, 69, 82, 128, 66, 65, 68, 71, 69,
-    128, 66, 65, 68, 128, 66, 65, 196, 66, 65, 67, 84, 82, 73, 65, 206, 66,
-    65, 67, 79, 78, 128, 66, 65, 67, 75, 87, 65, 82, 68, 128, 66, 65, 67, 75,
-    83, 80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65,
-    67, 75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 83, 76, 65, 78, 84, 69, 196,
-    66, 65, 67, 75, 72, 65, 78, 196, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69,
-    196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, 66, 89, 128, 66, 65,
-    66, 217, 66, 65, 65, 82, 69, 82, 85, 128, 66, 65, 45, 50, 128, 66, 51,
-    48, 53, 128, 66, 50, 53, 180, 66, 50, 52, 183, 66, 50, 52, 179, 66, 50,
-    52, 178, 66, 50, 52, 177, 66, 50, 52, 176, 66, 50, 51, 179, 66, 50, 51,
-    177, 66, 50, 51, 176, 66, 50, 50, 181, 66, 50, 50, 176, 66, 49, 57, 177,
-    66, 49, 55, 182, 66, 49, 55, 179, 66, 49, 54, 57, 128, 66, 49, 54, 56,
-    128, 66, 49, 54, 55, 128, 66, 49, 54, 54, 128, 66, 49, 54, 53, 128, 66,
-    49, 54, 52, 128, 66, 49, 54, 179, 66, 49, 54, 178, 66, 49, 54, 49, 128,
-    66, 49, 54, 48, 128, 66, 49, 53, 185, 66, 49, 53, 56, 128, 66, 49, 53,
-    55, 128, 66, 49, 53, 182, 66, 49, 53, 53, 128, 66, 49, 53, 52, 128, 66,
-    49, 53, 51, 128, 66, 49, 53, 50, 128, 66, 49, 53, 177, 66, 49, 53, 48,
-    128, 66, 49, 52, 54, 128, 66, 49, 52, 181, 66, 49, 52, 50, 128, 66, 49,
-    52, 177, 66, 49, 52, 176, 66, 49, 51, 181, 66, 49, 51, 179, 66, 49, 51,
-    50, 128, 66, 49, 51, 177, 66, 49, 51, 176, 66, 49, 50, 184, 66, 49, 50,
-    183, 66, 49, 50, 181, 66, 49, 50, 179, 66, 49, 50, 178, 66, 49, 50, 177,
-    66, 49, 50, 176, 66, 49, 48, 57, 205, 66, 49, 48, 57, 198, 66, 49, 48,
-    56, 205, 66, 49, 48, 56, 198, 66, 49, 48, 55, 205, 66, 49, 48, 55, 198,
-    66, 49, 48, 54, 205, 66, 49, 48, 54, 198, 66, 49, 48, 53, 205, 66, 49,
-    48, 53, 198, 66, 49, 48, 181, 66, 49, 48, 180, 66, 49, 48, 178, 66, 49,
-    48, 176, 66, 48, 57, 177, 66, 48, 57, 176, 66, 48, 56, 57, 128, 66, 48,
-    56, 183, 66, 48, 56, 54, 128, 66, 48, 56, 181, 66, 48, 56, 51, 128, 66,
-    48, 56, 50, 128, 66, 48, 56, 177, 66, 48, 56, 176, 66, 48, 55, 57, 128,
-    66, 48, 55, 184, 66, 48, 55, 183, 66, 48, 55, 182, 66, 48, 55, 181, 66,
-    48, 55, 180, 66, 48, 55, 179, 66, 48, 55, 178, 66, 48, 55, 177, 66, 48,
-    55, 176, 66, 48, 54, 185, 66, 48, 54, 184, 66, 48, 54, 183, 66, 48, 54,
-    182, 66, 48, 54, 181, 66, 48, 54, 52, 128, 66, 48, 54, 51, 128, 66, 48,
-    54, 178, 66, 48, 54, 177, 66, 48, 54, 176, 66, 48, 53, 185, 66, 48, 53,
-    184, 66, 48, 53, 183, 66, 48, 53, 54, 128, 66, 48, 53, 181, 66, 48, 53,
-    180, 66, 48, 53, 179, 66, 48, 53, 178, 66, 48, 53, 177, 66, 48, 53, 176,
-    66, 48, 52, 57, 128, 66, 48, 52, 184, 66, 48, 52, 55, 128, 66, 48, 52,
-    182, 66, 48, 52, 181, 66, 48, 52, 180, 66, 48, 52, 179, 66, 48, 52, 178,
-    66, 48, 52, 177, 66, 48, 52, 176, 66, 48, 51, 185, 66, 48, 51, 184, 66,
-    48, 51, 183, 66, 48, 51, 182, 66, 48, 51, 52, 128, 66, 48, 51, 179, 66,
-    48, 51, 178, 66, 48, 51, 177, 66, 48, 51, 176, 66, 48, 50, 185, 66, 48,
-    50, 184, 66, 48, 50, 183, 66, 48, 50, 182, 66, 48, 50, 181, 66, 48, 50,
-    180, 66, 48, 50, 179, 66, 48, 50, 50, 128, 66, 48, 50, 177, 66, 48, 50,
-    176, 66, 48, 49, 57, 128, 66, 48, 49, 56, 128, 66, 48, 49, 183, 66, 48,
-    49, 182, 66, 48, 49, 181, 66, 48, 49, 180, 66, 48, 49, 179, 66, 48, 49,
-    178, 66, 48, 49, 177, 66, 48, 49, 176, 66, 48, 48, 57, 128, 66, 48, 48,
-    185, 66, 48, 48, 56, 128, 66, 48, 48, 184, 66, 48, 48, 55, 128, 66, 48,
-    48, 183, 66, 48, 48, 54, 128, 66, 48, 48, 182, 66, 48, 48, 53, 65, 128,
-    66, 48, 48, 53, 128, 66, 48, 48, 181, 66, 48, 48, 52, 128, 66, 48, 48,
-    180, 66, 48, 48, 51, 128, 66, 48, 48, 179, 66, 48, 48, 50, 128, 66, 48,
-    48, 178, 66, 48, 48, 49, 128, 66, 48, 48, 177, 65, 90, 85, 128, 65, 89,
-    66, 128, 65, 89, 65, 72, 128, 65, 88, 69, 128, 65, 87, 69, 128, 65, 87,
-    65, 217, 65, 86, 79, 67, 65, 68, 79, 128, 65, 86, 69, 83, 84, 65, 206,
-    65, 86, 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78,
-    89, 65, 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78,
-    65, 128, 65, 85, 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76,
-    69, 128, 65, 85, 84, 79, 77, 65, 84, 69, 196, 65, 85, 84, 207, 65, 85,
-    83, 84, 82, 65, 204, 65, 85, 82, 73, 80, 73, 71, 77, 69, 78, 84, 128, 65,
-    85, 82, 65, 77, 65, 90, 68, 65, 65, 72, 65, 128, 65, 85, 82, 65, 77, 65,
-    90, 68, 65, 65, 45, 50, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 128,
-    65, 85, 78, 78, 128, 65, 85, 71, 85, 83, 84, 128, 65, 85, 71, 77, 69, 78,
-    84, 65, 84, 73, 79, 206, 65, 85, 69, 128, 65, 85, 66, 69, 82, 71, 73, 78,
-    69, 128, 65, 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65,
-    84, 84, 69, 78, 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 84, 65,
-    67, 72, 69, 196, 65, 84, 79, 205, 65, 84, 78, 65, 200, 65, 84, 77, 65,
-    65, 85, 128, 65, 84, 73, 89, 65, 128, 65, 84, 73, 85, 128, 65, 84, 73,
-    75, 82, 65, 77, 65, 128, 65, 84, 72, 76, 69, 84, 73, 195, 65, 84, 72, 65,
-    82, 86, 65, 86, 69, 68, 73, 195, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206,
-    65, 84, 72, 45, 84, 72, 65, 76, 65, 84, 72, 65, 128, 65, 83, 90, 128, 65,
-    83, 89, 85, 82, 193, 65, 83, 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76,
-    217, 65, 83, 84, 82, 79, 78, 79, 77, 73, 67, 65, 204, 65, 83, 84, 82, 79,
-    76, 79, 71, 73, 67, 65, 204, 65, 83, 84, 82, 65, 69, 65, 128, 65, 83, 84,
-    79, 78, 73, 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77, 128, 65, 83,
-    84, 69, 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, 128, 65, 83,
-    84, 69, 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, 83, 128, 65,
-    83, 83, 89, 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79, 78, 128, 65,
-    83, 80, 73, 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, 84, 69,
-    196, 65, 83, 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, 84, 82, 65,
-    76, 73, 65, 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, 83, 128,
-    65, 83, 72, 57, 128, 65, 83, 72, 51, 128, 65, 83, 72, 178, 65, 83, 67,
-    69, 78, 84, 128, 65, 83, 67, 69, 78, 68, 73, 78, 199, 65, 83, 65, 76, 50,
-    128, 65, 83, 45, 83, 65, 74, 68, 65, 128, 65, 82, 85, 72, 85, 65, 128,
-    65, 82, 84, 211, 65, 82, 84, 73, 83, 212, 65, 82, 84, 73, 67, 85, 76, 65,
-    84, 69, 196, 65, 82, 84, 65, 66, 197, 65, 82, 84, 65, 128, 65, 82, 83,
-    69, 79, 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 83, 69, 78, 73, 67,
-    128, 65, 82, 82, 79, 87, 83, 128, 65, 82, 82, 79, 87, 211, 65, 82, 82,
-    79, 87, 72, 69, 65, 68, 83, 128, 65, 82, 82, 79, 87, 72, 69, 65, 68, 128,
-    65, 82, 82, 79, 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, 84, 65, 73,
-    76, 128, 65, 82, 82, 73, 86, 73, 78, 71, 128, 65, 82, 82, 73, 86, 69,
-    128, 65, 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71, 73, 65, 84, 207,
-    65, 82, 79, 85, 83, 73, 78, 199, 65, 82, 79, 85, 82, 193, 65, 82, 79, 85,
-    78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 65, 82, 79, 85, 78, 196, 65,
-    82, 77, 89, 128, 65, 82, 77, 79, 85, 82, 128, 65, 82, 77, 69, 78, 73, 65,
-    206, 65, 82, 77, 128, 65, 82, 205, 65, 82, 76, 65, 85, 199, 65, 82, 75,
-    84, 73, 75, 207, 65, 82, 75, 65, 66, 128, 65, 82, 75, 65, 65, 78, 85,
-    128, 65, 82, 73, 83, 84, 69, 82, 65, 128, 65, 82, 73, 83, 84, 69, 82,
-    193, 65, 82, 73, 69, 83, 128, 65, 82, 71, 79, 84, 69, 82, 73, 128, 65,
-    82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128, 65, 82, 71, 73, 128,
-    65, 82, 69, 80, 65, 128, 65, 82, 69, 65, 128, 65, 82, 68, 72, 65, 86, 73,
-    83, 65, 82, 71, 65, 128, 65, 82, 68, 72, 65, 67, 65, 78, 68, 82, 65, 128,
-    65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67, 72, 65, 73, 79, 206, 65,
-    82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65, 82, 67, 128, 65, 82, 195,
-    65, 82, 65, 77, 65, 73, 195, 65, 82, 65, 69, 65, 69, 128, 65, 82, 65, 69,
-    65, 45, 85, 128, 65, 82, 65, 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45,
-    69, 79, 128, 65, 82, 65, 69, 65, 45, 69, 128, 65, 82, 65, 69, 65, 45, 65,
-    128, 65, 82, 65, 68, 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45,
-    73, 78, 68, 73, 195, 65, 82, 65, 66, 73, 65, 206, 65, 82, 45, 82, 85, 66,
-    128, 65, 82, 45, 82, 65, 72, 77, 65, 206, 65, 82, 45, 82, 65, 72, 69, 69,
-    77, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 81, 85, 65, 70, 79, 82,
-    84, 73, 83, 128, 65, 81, 85, 193, 65, 80, 85, 206, 65, 80, 82, 73, 76,
-    128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 65, 80, 80, 82,
-    79, 88, 73, 77, 65, 84, 69, 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, 211,
-    65, 80, 80, 82, 79, 65, 67, 72, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73,
-    79, 78, 128, 65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 206, 65, 80, 79, 84,
-    72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 79, 83, 84,
-    82, 79, 80, 72, 69, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65,
-    80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 80, 79, 83, 84, 82, 79, 70, 79,
-    201, 65, 80, 79, 76, 76, 79, 78, 128, 65, 80, 79, 68, 69, 88, 73, 65,
-    128, 65, 80, 79, 68, 69, 82, 77, 193, 65, 80, 76, 79, 85, 78, 128, 65,
-    80, 76, 201, 65, 80, 204, 65, 80, 73, 78, 128, 65, 80, 69, 83, 207, 65,
-    80, 67, 128, 65, 80, 65, 82, 84, 128, 65, 80, 65, 65, 84, 79, 128, 65,
-    79, 85, 128, 65, 79, 82, 128, 65, 78, 85, 83, 86, 65, 82, 65, 89, 65,
-    128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65, 78, 85, 83, 86, 65, 82,
-    193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78, 85, 68, 65, 84, 84,
-    193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84, 73, 79, 78, 128, 65,
-    78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84, 73, 77, 79, 78, 89,
-    128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73, 77, 79, 78, 73, 65,
-    84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, 84, 73,
-    75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65, 78, 84, 73, 70, 79,
-    78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 69, 45,
-    82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73,
-    83, 69, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 197, 65, 78,
-    84, 69, 78, 78, 65, 128, 65, 78, 84, 69, 78, 78, 193, 65, 78, 84, 65, 82,
-    71, 79, 77, 85, 75, 72, 65, 128, 65, 78, 83, 85, 218, 65, 78, 83, 72, 69,
-    128, 65, 78, 80, 69, 65, 128, 65, 78, 207, 65, 78, 78, 85, 73, 84, 217,
-    65, 78, 78, 79, 84, 65, 84, 73, 79, 206, 65, 78, 78, 65, 65, 85, 128, 65,
-    78, 75, 72, 128, 65, 78, 74, 73, 128, 65, 78, 73, 77, 65, 76, 128, 65,
-    78, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 85, 73, 83,
-    72, 69, 196, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 82, 217, 65,
-    78, 71, 76, 73, 67, 65, 78, 193, 65, 78, 71, 76, 69, 68, 128, 65, 78, 71,
-    76, 69, 196, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 71, 75,
-    65, 128, 65, 78, 71, 69, 210, 65, 78, 71, 69, 76, 128, 65, 78, 71, 69,
-    68, 128, 65, 78, 68, 65, 80, 128, 65, 78, 67, 79, 82, 65, 128, 65, 78,
-    67, 72, 79, 82, 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 65, 128,
+    83, 79, 78, 128, 66, 73, 83, 77, 85, 84, 200, 66, 73, 83, 77, 73, 76, 76,
+    65, 200, 66, 73, 83, 72, 79, 208, 66, 73, 83, 69, 67, 84, 73, 78, 199,
+    66, 73, 83, 65, 72, 128, 66, 73, 82, 85, 128, 66, 73, 82, 84, 72, 68, 65,
+    217, 66, 73, 82, 71, 65, 128, 66, 73, 82, 71, 193, 66, 73, 82, 68, 128,
+    66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, 78, 79, 86, 73, 76, 69, 128,
+    66, 73, 78, 79, 67, 85, 76, 65, 210, 66, 73, 78, 68, 73, 78, 199, 66, 73,
+    78, 68, 73, 128, 66, 73, 78, 65, 82, 217, 66, 73, 76, 76, 73, 79, 78, 83,
+    128, 66, 73, 76, 76, 73, 65, 82, 68, 83, 128, 66, 73, 76, 76, 69, 196,
+    66, 73, 76, 65, 66, 73, 65, 204, 66, 73, 75, 73, 78, 73, 128, 66, 73, 71,
+    128, 66, 73, 199, 66, 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204,
+    66, 73, 68, 65, 75, 85, 79, 206, 66, 73, 67, 89, 67, 76, 73, 83, 84, 128,
+    66, 73, 67, 89, 67, 76, 69, 83, 128, 66, 73, 67, 89, 67, 76, 69, 128, 66,
+    73, 67, 69, 80, 83, 128, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, 66, 73,
+    66, 128, 66, 201, 66, 72, 85, 128, 66, 72, 79, 79, 128, 66, 72, 79, 128,
+    66, 72, 73, 128, 66, 72, 69, 84, 72, 128, 66, 72, 69, 69, 128, 66, 72,
+    69, 128, 66, 72, 65, 84, 84, 73, 80, 82, 79, 76, 213, 66, 72, 65, 77,
+    128, 66, 72, 65, 73, 75, 83, 85, 75, 201, 66, 72, 65, 65, 128, 66, 72,
+    65, 128, 66, 69, 89, 89, 65, 76, 128, 66, 69, 88, 128, 66, 69, 86, 69,
+    82, 65, 71, 69, 128, 66, 69, 86, 69, 82, 65, 71, 197, 66, 69, 84, 87, 69,
+    69, 78, 128, 66, 69, 84, 87, 69, 69, 206, 66, 69, 84, 72, 128, 66, 69,
+    84, 65, 128, 66, 69, 84, 193, 66, 69, 212, 66, 69, 83, 73, 68, 197, 66,
+    69, 82, 75, 65, 78, 65, 206, 66, 69, 82, 66, 69, 210, 66, 69, 80, 128,
+    66, 69, 79, 82, 195, 66, 69, 78, 90, 69, 78, 197, 66, 69, 78, 84, 207,
+    66, 69, 78, 84, 128, 66, 69, 78, 212, 66, 69, 78, 71, 65, 76, 201, 66,
+    69, 78, 68, 69, 128, 66, 69, 78, 68, 128, 66, 69, 78, 196, 66, 69, 206,
+    66, 69, 76, 84, 128, 66, 69, 76, 212, 66, 69, 76, 79, 215, 66, 69, 76,
+    76, 72, 79, 208, 66, 69, 76, 76, 128, 66, 69, 76, 204, 66, 69, 76, 71,
+    84, 72, 79, 210, 66, 69, 73, 84, 72, 128, 66, 69, 72, 73, 78, 196, 66,
+    69, 72, 69, 72, 128, 66, 69, 72, 69, 200, 66, 69, 72, 128, 66, 69, 200,
+    66, 69, 71, 73, 78, 78, 73, 78, 71, 128, 66, 69, 71, 73, 78, 78, 69, 82,
+    128, 66, 69, 71, 73, 206, 66, 69, 70, 79, 82, 197, 66, 69, 69, 84, 76,
+    69, 128, 66, 69, 69, 84, 65, 128, 66, 69, 69, 210, 66, 69, 69, 72, 73,
+    86, 69, 128, 66, 69, 69, 72, 128, 66, 69, 69, 200, 66, 69, 67, 65, 85,
+    83, 69, 128, 66, 69, 65, 86, 69, 82, 128, 66, 69, 65, 86, 69, 210, 66,
+    69, 65, 84, 73, 78, 199, 66, 69, 65, 84, 128, 66, 69, 65, 82, 68, 69,
+    196, 66, 69, 65, 82, 128, 66, 69, 65, 210, 66, 69, 65, 78, 128, 66, 69,
+    65, 77, 69, 196, 66, 69, 65, 68, 83, 128, 66, 69, 65, 67, 200, 66, 67,
+    65, 68, 128, 66, 67, 65, 196, 66, 66, 89, 88, 128, 66, 66, 89, 84, 128,
+    66, 66, 89, 80, 128, 66, 66, 89, 128, 66, 66, 85, 88, 128, 66, 66, 85,
+    84, 128, 66, 66, 85, 82, 88, 128, 66, 66, 85, 82, 128, 66, 66, 85, 80,
+    128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 79, 80, 128, 66, 66, 85, 79,
+    128, 66, 66, 85, 128, 66, 66, 79, 88, 128, 66, 66, 79, 84, 128, 66, 66,
+    79, 80, 128, 66, 66, 79, 128, 66, 66, 73, 88, 128, 66, 66, 73, 80, 128,
+    66, 66, 73, 69, 88, 128, 66, 66, 73, 69, 84, 128, 66, 66, 73, 69, 80,
+    128, 66, 66, 73, 69, 128, 66, 66, 73, 128, 66, 66, 69, 88, 128, 66, 66,
+    69, 80, 128, 66, 66, 69, 69, 128, 66, 66, 65, 88, 128, 66, 66, 65, 84,
+    128, 66, 66, 65, 80, 128, 66, 66, 65, 65, 128, 66, 65, 89, 65, 78, 78,
+    65, 128, 66, 65, 85, 128, 66, 65, 84, 84, 69, 82, 89, 128, 66, 65, 84,
+    72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65,
+    84, 72, 128, 66, 65, 84, 200, 66, 65, 84, 65, 203, 66, 65, 83, 83, 65,
+    128, 66, 65, 83, 83, 193, 66, 65, 83, 75, 69, 84, 66, 65, 76, 204, 66,
+    65, 83, 72, 75, 73, 210, 66, 65, 83, 72, 128, 66, 65, 83, 69, 76, 73, 78,
+    197, 66, 65, 83, 69, 66, 65, 76, 76, 128, 66, 65, 83, 69, 128, 66, 65,
+    83, 197, 66, 65, 82, 83, 128, 66, 65, 82, 211, 66, 65, 82, 82, 73, 69,
+    82, 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 69, 69, 128,
+    66, 65, 82, 82, 69, 197, 66, 65, 82, 76, 73, 78, 69, 128, 66, 65, 82, 76,
+    69, 89, 128, 66, 65, 82, 73, 89, 79, 79, 83, 65, 78, 128, 66, 65, 82, 66,
+    69, 210, 66, 65, 82, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67,
+    128, 66, 65, 78, 75, 78, 79, 84, 197, 66, 65, 78, 75, 128, 66, 65, 78,
+    203, 66, 65, 78, 74, 79, 128, 66, 65, 78, 68, 128, 66, 65, 78, 65, 78,
+    65, 128, 66, 65, 78, 50, 128, 66, 65, 78, 178, 66, 65, 77, 66, 79, 79,
+    83, 128, 66, 65, 77, 66, 79, 79, 128, 66, 65, 76, 85, 68, 65, 128, 66,
+    65, 76, 76, 80, 79, 73, 78, 212, 66, 65, 76, 76, 79, 84, 128, 66, 65, 76,
+    76, 79, 212, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, 69, 196, 66,
+    65, 76, 76, 79, 79, 78, 128, 66, 65, 76, 76, 69, 212, 66, 65, 76, 68,
+    128, 66, 65, 76, 65, 71, 128, 66, 65, 76, 128, 66, 65, 204, 66, 65, 73,
+    82, 75, 65, 78, 128, 66, 65, 73, 77, 65, 73, 128, 66, 65, 72, 84, 128,
+    66, 65, 72, 73, 82, 71, 79, 77, 85, 75, 72, 65, 128, 66, 65, 72, 65, 82,
+    50, 128, 66, 65, 72, 65, 82, 178, 66, 65, 72, 128, 66, 65, 71, 85, 69,
+    84, 84, 197, 66, 65, 71, 83, 128, 66, 65, 71, 71, 65, 71, 197, 66, 65,
+    71, 69, 76, 128, 66, 65, 71, 65, 128, 66, 65, 71, 51, 128, 66, 65, 199,
+    66, 65, 68, 77, 73, 78, 84, 79, 206, 66, 65, 68, 71, 69, 82, 128, 66, 65,
+    68, 71, 69, 128, 66, 65, 196, 66, 65, 67, 84, 82, 73, 65, 206, 66, 65,
+    67, 79, 78, 128, 66, 65, 67, 75, 87, 65, 82, 68, 128, 66, 65, 67, 75, 83,
+    80, 65, 67, 69, 128, 66, 65, 67, 75, 83, 76, 65, 83, 72, 128, 66, 65, 67,
+    75, 83, 76, 65, 83, 200, 66, 65, 67, 75, 83, 76, 65, 78, 84, 69, 196, 66,
+    65, 67, 75, 72, 65, 78, 196, 66, 65, 67, 75, 45, 84, 73, 76, 84, 69, 196,
+    66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, 66, 89, 128, 66, 65, 66,
+    217, 66, 65, 65, 82, 69, 82, 85, 128, 66, 65, 45, 50, 128, 66, 51, 48,
+    53, 128, 66, 50, 53, 180, 66, 50, 52, 183, 66, 50, 52, 179, 66, 50, 52,
+    178, 66, 50, 52, 177, 66, 50, 52, 176, 66, 50, 51, 179, 66, 50, 51, 177,
+    66, 50, 51, 176, 66, 50, 50, 181, 66, 50, 50, 176, 66, 49, 57, 177, 66,
+    49, 55, 182, 66, 49, 55, 179, 66, 49, 54, 57, 128, 66, 49, 54, 56, 128,
+    66, 49, 54, 55, 128, 66, 49, 54, 54, 128, 66, 49, 54, 53, 128, 66, 49,
+    54, 52, 128, 66, 49, 54, 179, 66, 49, 54, 178, 66, 49, 54, 49, 128, 66,
+    49, 54, 48, 128, 66, 49, 53, 185, 66, 49, 53, 56, 128, 66, 49, 53, 55,
+    128, 66, 49, 53, 182, 66, 49, 53, 53, 128, 66, 49, 53, 52, 128, 66, 49,
+    53, 51, 128, 66, 49, 53, 50, 128, 66, 49, 53, 177, 66, 49, 53, 48, 128,
+    66, 49, 52, 54, 128, 66, 49, 52, 181, 66, 49, 52, 50, 128, 66, 49, 52,
+    177, 66, 49, 52, 176, 66, 49, 51, 181, 66, 49, 51, 179, 66, 49, 51, 50,
+    128, 66, 49, 51, 177, 66, 49, 51, 176, 66, 49, 50, 184, 66, 49, 50, 183,
+    66, 49, 50, 181, 66, 49, 50, 179, 66, 49, 50, 178, 66, 49, 50, 177, 66,
+    49, 50, 176, 66, 49, 48, 57, 205, 66, 49, 48, 57, 198, 66, 49, 48, 56,
+    205, 66, 49, 48, 56, 198, 66, 49, 48, 55, 205, 66, 49, 48, 55, 198, 66,
+    49, 48, 54, 205, 66, 49, 48, 54, 198, 66, 49, 48, 53, 205, 66, 49, 48,
+    53, 198, 66, 49, 48, 181, 66, 49, 48, 180, 66, 49, 48, 178, 66, 49, 48,
+    176, 66, 48, 57, 177, 66, 48, 57, 176, 66, 48, 56, 57, 128, 66, 48, 56,
+    183, 66, 48, 56, 54, 128, 66, 48, 56, 181, 66, 48, 56, 51, 128, 66, 48,
+    56, 50, 128, 66, 48, 56, 177, 66, 48, 56, 176, 66, 48, 55, 57, 128, 66,
+    48, 55, 184, 66, 48, 55, 183, 66, 48, 55, 182, 66, 48, 55, 181, 66, 48,
+    55, 180, 66, 48, 55, 179, 66, 48, 55, 178, 66, 48, 55, 177, 66, 48, 55,
+    176, 66, 48, 54, 185, 66, 48, 54, 184, 66, 48, 54, 183, 66, 48, 54, 182,
+    66, 48, 54, 181, 66, 48, 54, 52, 128, 66, 48, 54, 51, 128, 66, 48, 54,
+    178, 66, 48, 54, 177, 66, 48, 54, 176, 66, 48, 53, 185, 66, 48, 53, 184,
+    66, 48, 53, 183, 66, 48, 53, 54, 128, 66, 48, 53, 181, 66, 48, 53, 180,
+    66, 48, 53, 179, 66, 48, 53, 178, 66, 48, 53, 177, 66, 48, 53, 176, 66,
+    48, 52, 57, 128, 66, 48, 52, 184, 66, 48, 52, 55, 128, 66, 48, 52, 182,
+    66, 48, 52, 181, 66, 48, 52, 180, 66, 48, 52, 179, 66, 48, 52, 178, 66,
+    48, 52, 177, 66, 48, 52, 176, 66, 48, 51, 185, 66, 48, 51, 184, 66, 48,
+    51, 183, 66, 48, 51, 182, 66, 48, 51, 52, 128, 66, 48, 51, 179, 66, 48,
+    51, 178, 66, 48, 51, 177, 66, 48, 51, 176, 66, 48, 50, 185, 66, 48, 50,
+    184, 66, 48, 50, 183, 66, 48, 50, 182, 66, 48, 50, 181, 66, 48, 50, 180,
+    66, 48, 50, 179, 66, 48, 50, 50, 128, 66, 48, 50, 177, 66, 48, 50, 176,
+    66, 48, 49, 57, 128, 66, 48, 49, 56, 128, 66, 48, 49, 183, 66, 48, 49,
+    182, 66, 48, 49, 181, 66, 48, 49, 180, 66, 48, 49, 179, 66, 48, 49, 178,
+    66, 48, 49, 177, 66, 48, 49, 176, 66, 48, 48, 57, 128, 66, 48, 48, 185,
+    66, 48, 48, 56, 128, 66, 48, 48, 184, 66, 48, 48, 55, 128, 66, 48, 48,
+    183, 66, 48, 48, 54, 128, 66, 48, 48, 182, 66, 48, 48, 53, 65, 128, 66,
+    48, 48, 53, 128, 66, 48, 48, 181, 66, 48, 48, 52, 128, 66, 48, 48, 180,
+    66, 48, 48, 51, 128, 66, 48, 48, 179, 66, 48, 48, 50, 128, 66, 48, 48,
+    178, 66, 48, 48, 49, 128, 66, 48, 48, 177, 65, 90, 85, 128, 65, 89, 66,
+    128, 65, 89, 65, 72, 128, 65, 88, 69, 128, 65, 87, 69, 128, 65, 87, 65,
+    217, 65, 86, 79, 67, 65, 68, 79, 128, 65, 86, 69, 83, 84, 65, 206, 65,
+    86, 69, 82, 65, 71, 197, 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89,
+    65, 128, 65, 86, 65, 71, 82, 65, 72, 65, 128, 65, 85, 89, 65, 78, 78, 65,
+    128, 65, 85, 84, 85, 77, 78, 128, 65, 85, 84, 79, 77, 79, 66, 73, 76, 69,
+    128, 65, 85, 84, 79, 77, 65, 84, 69, 196, 65, 85, 84, 207, 65, 85, 83,
+    84, 82, 65, 204, 65, 85, 82, 73, 80, 73, 71, 77, 69, 78, 84, 128, 65, 85,
+    82, 65, 77, 65, 90, 68, 65, 65, 72, 65, 128, 65, 85, 82, 65, 77, 65, 90,
+    68, 65, 65, 45, 50, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 128, 65,
+    85, 78, 78, 128, 65, 85, 71, 85, 83, 84, 128, 65, 85, 71, 77, 69, 78, 84,
+    65, 84, 73, 79, 206, 65, 85, 69, 128, 65, 85, 66, 69, 82, 71, 73, 78, 69,
+    128, 65, 84, 84, 73, 195, 65, 84, 84, 72, 65, 67, 65, 78, 128, 65, 84,
+    84, 69, 78, 84, 73, 79, 78, 128, 65, 84, 84, 65, 203, 65, 84, 84, 65, 67,
+    72, 69, 196, 65, 84, 79, 205, 65, 84, 78, 65, 200, 65, 84, 77, 65, 65,
+    85, 128, 65, 84, 73, 89, 65, 128, 65, 84, 73, 85, 128, 65, 84, 73, 75,
+    82, 65, 77, 65, 128, 65, 84, 72, 76, 69, 84, 73, 195, 65, 84, 72, 65, 82,
+    86, 65, 86, 69, 68, 73, 195, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 65,
+    84, 72, 45, 84, 72, 65, 76, 65, 84, 72, 65, 128, 65, 83, 90, 128, 65, 83,
+    89, 85, 82, 193, 65, 83, 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217,
+    65, 83, 84, 82, 79, 78, 79, 77, 73, 67, 65, 204, 65, 83, 84, 82, 79, 76,
+    79, 71, 73, 67, 65, 204, 65, 83, 84, 82, 65, 69, 65, 128, 65, 83, 84, 79,
+    78, 73, 83, 72, 69, 196, 65, 83, 84, 69, 82, 73, 83, 77, 128, 65, 83, 84,
+    69, 82, 73, 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 75, 128, 65, 83, 84,
+    69, 82, 73, 83, 203, 65, 83, 84, 69, 82, 73, 83, 67, 85, 83, 128, 65, 83,
+    83, 89, 82, 73, 65, 206, 65, 83, 83, 69, 82, 84, 73, 79, 78, 128, 65, 83,
+    80, 73, 82, 65, 84, 73, 79, 78, 128, 65, 83, 80, 73, 82, 65, 84, 69, 196,
+    65, 83, 80, 69, 82, 128, 65, 83, 73, 65, 45, 65, 85, 83, 84, 82, 65, 76,
+    73, 65, 128, 65, 83, 72, 71, 65, 66, 128, 65, 83, 72, 69, 83, 128, 65,
+    83, 72, 57, 128, 65, 83, 72, 51, 128, 65, 83, 72, 178, 65, 83, 67, 73,
+    193, 65, 83, 67, 69, 78, 84, 128, 65, 83, 67, 69, 78, 68, 73, 78, 199,
+    65, 83, 65, 76, 50, 128, 65, 83, 45, 83, 65, 74, 68, 65, 128, 65, 82, 85,
+    72, 85, 65, 128, 65, 82, 84, 211, 65, 82, 84, 73, 83, 212, 65, 82, 84,
+    73, 67, 85, 76, 65, 84, 69, 196, 65, 82, 84, 65, 66, 197, 65, 82, 84, 65,
+    128, 65, 82, 83, 69, 79, 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 83,
+    69, 78, 73, 67, 128, 65, 82, 82, 79, 87, 83, 128, 65, 82, 82, 79, 87,
+    211, 65, 82, 82, 79, 87, 72, 69, 65, 68, 83, 128, 65, 82, 82, 79, 87, 72,
+    69, 65, 68, 45, 83, 72, 65, 80, 69, 196, 65, 82, 82, 79, 87, 72, 69, 65,
+    68, 128, 65, 82, 82, 79, 87, 72, 69, 65, 196, 65, 82, 82, 79, 87, 45, 84,
+    65, 73, 76, 128, 65, 82, 82, 73, 86, 73, 78, 71, 128, 65, 82, 82, 73, 86,
+    69, 128, 65, 82, 82, 65, 89, 128, 65, 82, 80, 69, 71, 71, 73, 65, 84,
+    207, 65, 82, 79, 85, 83, 73, 78, 199, 65, 82, 79, 85, 82, 193, 65, 82,
+    79, 85, 78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 65, 82, 79, 85, 78,
+    196, 65, 82, 77, 89, 128, 65, 82, 77, 211, 65, 82, 77, 79, 85, 82, 128,
+    65, 82, 77, 69, 78, 73, 65, 206, 65, 82, 77, 128, 65, 82, 205, 65, 82,
+    76, 65, 85, 199, 65, 82, 75, 84, 73, 75, 207, 65, 82, 75, 65, 66, 128,
+    65, 82, 75, 65, 65, 78, 85, 128, 65, 82, 73, 83, 84, 69, 82, 65, 128, 65,
+    82, 73, 83, 84, 69, 82, 193, 65, 82, 73, 69, 83, 128, 65, 82, 71, 79, 84,
+    69, 82, 73, 128, 65, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, 78, 128,
+    65, 82, 71, 73, 128, 65, 82, 69, 80, 65, 128, 65, 82, 69, 65, 128, 65,
+    82, 68, 72, 65, 86, 73, 83, 65, 82, 71, 65, 128, 65, 82, 68, 72, 65, 67,
+    65, 78, 68, 82, 65, 128, 65, 82, 67, 72, 65, 73, 79, 78, 128, 65, 82, 67,
+    72, 65, 73, 79, 206, 65, 82, 67, 72, 65, 73, 195, 65, 82, 67, 200, 65,
+    82, 67, 128, 65, 82, 195, 65, 82, 65, 77, 65, 73, 195, 65, 82, 65, 69,
+    65, 69, 128, 65, 82, 65, 69, 65, 45, 85, 128, 65, 82, 65, 69, 65, 45, 73,
+    128, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 65, 69, 65, 45, 69,
+    128, 65, 82, 65, 69, 65, 45, 65, 128, 65, 82, 65, 68, 128, 65, 82, 65,
+    196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 65, 82, 65, 66, 73,
+    65, 206, 65, 82, 45, 82, 85, 66, 128, 65, 82, 45, 82, 65, 72, 77, 65,
+    206, 65, 82, 45, 82, 65, 72, 69, 69, 77, 128, 65, 81, 85, 65, 82, 73, 85,
+    83, 128, 65, 81, 85, 65, 70, 79, 82, 84, 73, 83, 128, 65, 81, 85, 193,
+    65, 80, 85, 206, 65, 80, 82, 73, 76, 128, 65, 80, 80, 82, 79, 88, 73, 77,
+    65, 84, 69, 76, 217, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 128, 65,
+    80, 80, 82, 79, 65, 67, 72, 69, 211, 65, 80, 80, 82, 79, 65, 67, 72, 128,
+    65, 80, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 65, 80, 80, 76, 73, 67,
+    65, 84, 73, 79, 206, 65, 80, 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72,
+    69, 77, 65, 128, 65, 80, 79, 83, 84, 82, 79, 80, 72, 69, 128, 65, 80, 79,
+    83, 84, 82, 79, 70, 79, 83, 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 211,
+    65, 80, 79, 83, 84, 82, 79, 70, 79, 201, 65, 80, 79, 76, 76, 79, 78, 128,
+    65, 80, 79, 68, 69, 88, 73, 65, 128, 65, 80, 79, 68, 69, 82, 77, 193, 65,
+    80, 76, 79, 85, 78, 128, 65, 80, 76, 201, 65, 80, 204, 65, 80, 73, 78,
+    128, 65, 80, 69, 83, 207, 65, 80, 67, 128, 65, 80, 65, 82, 84, 128, 65,
+    80, 65, 65, 84, 79, 128, 65, 79, 85, 128, 65, 79, 82, 128, 65, 78, 85,
+    83, 86, 65, 82, 65, 89, 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, 128, 65,
+    78, 85, 83, 86, 65, 82, 193, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 78,
+    85, 68, 65, 84, 84, 193, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84,
+    73, 79, 78, 128, 65, 78, 84, 73, 77, 79, 78, 89, 45, 50, 128, 65, 78, 84,
+    73, 77, 79, 78, 89, 128, 65, 78, 84, 73, 77, 79, 78, 217, 65, 78, 84, 73,
+    77, 79, 78, 73, 65, 84, 69, 128, 65, 78, 84, 73, 75, 69, 78, 79, 77, 65,
+    128, 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 65,
+    78, 84, 73, 70, 79, 78, 73, 65, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75,
+    87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 65, 78, 84, 73, 67, 76,
+    79, 67, 75, 87, 73, 83, 69, 128, 65, 78, 84, 73, 67, 76, 79, 67, 75, 87,
+    73, 83, 197, 65, 78, 84, 69, 78, 78, 65, 128, 65, 78, 84, 69, 78, 78,
+    193, 65, 78, 84, 65, 82, 71, 79, 77, 85, 75, 72, 65, 128, 65, 78, 83, 85,
+    218, 65, 78, 83, 72, 69, 128, 65, 78, 80, 69, 65, 128, 65, 78, 207, 65,
+    78, 78, 85, 73, 84, 217, 65, 78, 78, 79, 84, 65, 84, 73, 79, 206, 65, 78,
+    78, 65, 65, 85, 128, 65, 78, 75, 72, 128, 65, 78, 74, 73, 128, 65, 78,
+    73, 77, 65, 76, 128, 65, 78, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82,
+    128, 65, 78, 71, 85, 73, 83, 72, 69, 196, 65, 78, 71, 83, 84, 82, 79,
+    205, 65, 78, 71, 82, 217, 65, 78, 71, 76, 73, 67, 65, 78, 193, 65, 78,
+    71, 76, 69, 68, 128, 65, 78, 71, 76, 69, 196, 65, 78, 71, 75, 72, 65, 78,
+    75, 72, 85, 128, 65, 78, 71, 75, 65, 128, 65, 78, 71, 69, 210, 65, 78,
+    71, 69, 76, 128, 65, 78, 71, 69, 68, 128, 65, 78, 68, 65, 80, 128, 65,
+    78, 67, 79, 82, 65, 128, 65, 78, 67, 72, 79, 82, 128, 65, 78, 65, 84, 82,
+    73, 67, 72, 73, 83, 77, 65, 128, 65, 78, 65, 84, 79, 77, 73, 67, 65, 204,
     65, 78, 65, 80, 128, 65, 78, 45, 78, 73, 83, 70, 128, 65, 77, 85, 76, 69,
     84, 128, 65, 77, 80, 83, 128, 65, 77, 80, 72, 79, 82, 65, 128, 65, 77,
     80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 80, 69, 82, 83, 65, 78, 196, 65,
@@ -6134,13570 +6632,13634 @@
     65, 76, 69, 82, 84, 128, 65, 76, 69, 80, 72, 128, 65, 76, 69, 77, 66, 73,
     67, 128, 65, 76, 69, 70, 128, 65, 76, 66, 65, 78, 73, 65, 206, 65, 76,
     65, 89, 72, 69, 128, 65, 76, 65, 89, 72, 197, 65, 76, 65, 82, 205, 65,
-    76, 65, 80, 72, 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 84,
-    73, 69, 83, 69, 76, 83, 75, 65, 66, 128, 65, 75, 83, 65, 128, 65, 75, 72,
-    77, 73, 77, 73, 195, 65, 75, 66, 65, 210, 65, 75, 65, 82, 65, 128, 65,
-    75, 65, 82, 193, 65, 73, 89, 65, 78, 78, 65, 128, 65, 73, 86, 73, 76, 73,
-    203, 65, 73, 86, 65, 128, 65, 73, 84, 79, 206, 65, 73, 82, 80, 76, 65,
-    78, 69, 128, 65, 73, 82, 80, 76, 65, 78, 197, 65, 73, 78, 213, 65, 73,
-    78, 78, 128, 65, 73, 76, 77, 128, 65, 73, 75, 65, 82, 65, 128, 65, 73,
-    72, 86, 85, 83, 128, 65, 72, 83, 68, 65, 128, 65, 72, 83, 65, 128, 65,
-    72, 79, 205, 65, 72, 65, 78, 199, 65, 72, 65, 71, 71, 65, 210, 65, 72,
-    65, 68, 128, 65, 71, 85, 78, 71, 128, 65, 71, 79, 71, 201, 65, 71, 71,
-    82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 71, 82, 65, 86, 65, 84, 69,
-    196, 65, 71, 65, 73, 78, 83, 212, 65, 71, 65, 73, 78, 128, 65, 70, 84,
-    69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 73, 67, 65, 206, 65,
-    70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, 70, 71, 72,
-    65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 206, 65, 70, 70, 73,
-    216, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 83, 67,
-    85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, 128, 65, 69, 83, 128,
-    65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, 76, 65, 45, 80, 73, 76,
-    76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, 65, 69, 71, 69, 65, 206,
-    65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 69, 69, 128,
-    65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68, 128, 65, 69, 66,
-    128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68, 86, 65, 78, 67, 69,
-    128, 65, 68, 85, 76, 84, 128, 65, 68, 77, 73, 83, 83, 73, 79, 206, 65,
-    68, 77, 69, 84, 79, 83, 128, 65, 68, 76, 65, 205, 65, 68, 72, 69, 83, 73,
-    86, 197, 65, 68, 69, 71, 128, 65, 68, 69, 199, 65, 68, 68, 82, 69, 83,
-    83, 69, 196, 65, 68, 68, 82, 69, 83, 211, 65, 68, 68, 65, 75, 128, 65,
-    68, 65, 203, 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79, 78, 128, 65, 67,
-    85, 84, 69, 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 65, 67,
-    85, 84, 197, 65, 67, 84, 85, 65, 76, 76, 217, 65, 67, 84, 73, 86, 65, 84,
-    197, 65, 67, 82, 79, 80, 72, 79, 78, 73, 195, 65, 67, 75, 78, 79, 87, 76,
-    69, 68, 71, 69, 128, 65, 67, 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128,
-    65, 67, 67, 79, 85, 78, 212, 65, 67, 67, 79, 77, 77, 79, 68, 65, 84, 73,
-    79, 78, 128, 65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45, 83,
-    84, 65, 67, 67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67, 67,
-    69, 78, 212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65, 204,
-    65, 66, 85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73, 65,
-    206, 65, 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70, 73,
-    76, 73, 128, 65, 66, 65, 67, 85, 83, 128, 65, 66, 178, 65, 66, 49, 57,
-    49, 128, 65, 66, 49, 56, 56, 128, 65, 66, 49, 56, 48, 128, 65, 66, 49,
-    55, 49, 128, 65, 66, 49, 54, 52, 128, 65, 66, 49, 51, 49, 66, 128, 65,
-    66, 49, 51, 49, 65, 128, 65, 66, 49, 50, 51, 128, 65, 66, 49, 50, 50,
-    128, 65, 66, 49, 50, 48, 128, 65, 66, 49, 49, 56, 128, 65, 66, 48, 56,
-    55, 128, 65, 66, 48, 56, 54, 128, 65, 66, 48, 56, 53, 128, 65, 66, 48,
-    56, 50, 128, 65, 66, 48, 56, 49, 128, 65, 66, 48, 56, 48, 128, 65, 66,
-    48, 55, 57, 128, 65, 66, 48, 55, 56, 128, 65, 66, 48, 55, 55, 128, 65,
-    66, 48, 55, 54, 128, 65, 66, 48, 55, 52, 128, 65, 66, 48, 55, 51, 128,
-    65, 66, 48, 55, 48, 128, 65, 66, 48, 54, 57, 128, 65, 66, 48, 54, 55,
-    128, 65, 66, 48, 54, 54, 128, 65, 66, 48, 54, 53, 128, 65, 66, 48, 54,
-    49, 128, 65, 66, 48, 54, 48, 128, 65, 66, 48, 53, 57, 128, 65, 66, 48,
-    53, 56, 128, 65, 66, 48, 53, 55, 128, 65, 66, 48, 53, 54, 128, 65, 66,
-    48, 53, 53, 128, 65, 66, 48, 53, 52, 128, 65, 66, 48, 53, 51, 128, 65,
-    66, 48, 53, 49, 128, 65, 66, 48, 53, 48, 128, 65, 66, 48, 52, 57, 128,
-    65, 66, 48, 52, 56, 128, 65, 66, 48, 52, 55, 128, 65, 66, 48, 52, 54,
-    128, 65, 66, 48, 52, 53, 128, 65, 66, 48, 52, 52, 128, 65, 66, 48, 52,
-    49, 128, 65, 66, 48, 52, 48, 128, 65, 66, 48, 51, 57, 128, 65, 66, 48,
-    51, 56, 128, 65, 66, 48, 51, 55, 128, 65, 66, 48, 51, 52, 128, 65, 66,
-    48, 51, 49, 128, 65, 66, 48, 51, 48, 128, 65, 66, 48, 50, 57, 128, 65,
-    66, 48, 50, 56, 128, 65, 66, 48, 50, 55, 128, 65, 66, 48, 50, 54, 128,
-    65, 66, 48, 50, 52, 128, 65, 66, 48, 50, 51, 77, 128, 65, 66, 48, 50, 51,
-    128, 65, 66, 48, 50, 50, 77, 128, 65, 66, 48, 50, 50, 70, 128, 65, 66,
-    48, 50, 50, 128, 65, 66, 48, 50, 49, 77, 128, 65, 66, 48, 50, 49, 70,
-    128, 65, 66, 48, 50, 49, 128, 65, 66, 48, 50, 48, 128, 65, 66, 48, 49,
-    55, 128, 65, 66, 48, 49, 54, 128, 65, 66, 48, 49, 51, 128, 65, 66, 48,
-    49, 49, 128, 65, 66, 48, 49, 48, 128, 65, 66, 48, 48, 57, 128, 65, 66,
-    48, 48, 56, 128, 65, 66, 48, 48, 55, 128, 65, 66, 48, 48, 54, 128, 65,
-    66, 48, 48, 53, 128, 65, 66, 48, 48, 52, 128, 65, 66, 48, 48, 51, 128,
-    65, 66, 48, 48, 50, 128, 65, 66, 48, 48, 49, 128, 65, 65, 90, 72, 65, 65,
-    75, 75, 85, 128, 65, 65, 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65,
-    128, 65, 65, 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128,
-    65, 65, 66, 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65,
-    48, 51, 49, 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65,
-    65, 48, 50, 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128,
-    65, 65, 48, 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51,
-    128, 65, 65, 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50,
-    48, 128, 65, 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48,
-    49, 55, 128, 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65,
-    48, 49, 52, 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65,
-    65, 48, 49, 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128,
-    65, 65, 48, 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55,
-    65, 128, 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48,
-    48, 53, 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65,
-    48, 48, 50, 128, 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56,
-    48, 54, 128, 65, 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51,
-    128, 65, 56, 48, 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65,
-    55, 51, 178, 65, 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55,
-    49, 180, 65, 55, 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49,
-    176, 65, 55, 48, 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57,
-    45, 179, 65, 55, 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65,
-    55, 48, 183, 65, 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55,
-    48, 179, 65, 55, 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54,
-    54, 51, 128, 65, 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48,
-    128, 65, 54, 53, 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65,
-    54, 53, 54, 128, 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53,
-    51, 128, 65, 54, 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128,
-    65, 54, 52, 56, 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54,
-    52, 52, 128, 65, 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48,
-    128, 65, 54, 51, 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65,
-    54, 50, 57, 128, 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50,
-    54, 128, 65, 54, 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128,
-    65, 54, 50, 49, 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54,
-    49, 56, 128, 65, 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53,
-    128, 65, 54, 49, 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65,
-    54, 49, 49, 128, 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48,
-    56, 128, 65, 54, 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128,
-    65, 54, 48, 50, 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53,
-    57, 56, 128, 65, 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52,
-    128, 65, 53, 57, 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65,
-    53, 56, 56, 128, 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56,
-    53, 128, 65, 53, 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128,
-    65, 53, 56, 49, 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53,
-    55, 56, 128, 65, 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53,
-    128, 65, 53, 55, 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65,
-    53, 55, 49, 128, 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54,
-    56, 128, 65, 53, 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128,
-    65, 53, 54, 51, 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53,
-    53, 54, 128, 65, 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51,
-    128, 65, 53, 53, 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65,
-    53, 52, 57, 128, 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52,
-    53, 128, 65, 53, 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128,
-    65, 53, 51, 57, 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53,
-    51, 54, 128, 65, 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50,
-    128, 65, 53, 51, 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65,
-    53, 50, 56, 128, 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50,
-    53, 128, 65, 53, 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 50, 128,
-    65, 53, 50, 49, 128, 65, 53, 50, 48, 128, 65, 53, 49, 57, 128, 65, 53,
-    49, 56, 128, 65, 53, 49, 55, 128, 65, 53, 49, 54, 128, 65, 53, 49, 53,
-    128, 65, 53, 49, 52, 128, 65, 53, 49, 51, 128, 65, 53, 49, 50, 128, 65,
-    53, 49, 49, 128, 65, 53, 49, 48, 128, 65, 53, 48, 57, 128, 65, 53, 48,
-    56, 128, 65, 53, 48, 55, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128,
-    65, 53, 48, 52, 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53,
-    48, 49, 128, 65, 52, 57, 55, 128, 65, 52, 57, 54, 128, 65, 52, 57, 53,
-    128, 65, 52, 57, 52, 128, 65, 52, 57, 51, 128, 65, 52, 57, 50, 128, 65,
-    52, 57, 49, 128, 65, 52, 57, 48, 128, 65, 52, 56, 57, 128, 65, 52, 56,
-    56, 128, 65, 52, 56, 55, 128, 65, 52, 56, 54, 128, 65, 52, 56, 53, 128,
-    65, 52, 56, 52, 128, 65, 52, 56, 51, 128, 65, 52, 56, 50, 128, 65, 52,
-    56, 49, 128, 65, 52, 56, 48, 128, 65, 52, 55, 57, 128, 65, 52, 55, 56,
-    128, 65, 52, 55, 55, 128, 65, 52, 55, 54, 128, 65, 52, 55, 53, 128, 65,
-    52, 55, 52, 128, 65, 52, 55, 51, 128, 65, 52, 55, 50, 128, 65, 52, 55,
-    49, 128, 65, 52, 55, 48, 128, 65, 52, 54, 57, 128, 65, 52, 54, 56, 128,
-    65, 52, 54, 55, 128, 65, 52, 54, 54, 128, 65, 52, 54, 53, 128, 65, 52,
-    54, 52, 128, 65, 52, 54, 51, 128, 65, 52, 54, 50, 128, 65, 52, 54, 49,
-    128, 65, 52, 54, 48, 128, 65, 52, 53, 57, 128, 65, 52, 53, 56, 128, 65,
-    52, 53, 55, 65, 128, 65, 52, 53, 55, 128, 65, 52, 53, 54, 128, 65, 52,
-    53, 53, 128, 65, 52, 53, 52, 128, 65, 52, 53, 51, 128, 65, 52, 53, 50,
-    128, 65, 52, 53, 49, 128, 65, 52, 53, 48, 65, 128, 65, 52, 53, 48, 128,
-    65, 52, 52, 57, 128, 65, 52, 52, 56, 128, 65, 52, 52, 55, 128, 65, 52,
-    52, 54, 128, 65, 52, 52, 53, 128, 65, 52, 52, 52, 128, 65, 52, 52, 51,
-    128, 65, 52, 52, 50, 128, 65, 52, 52, 49, 128, 65, 52, 52, 48, 128, 65,
-    52, 51, 57, 128, 65, 52, 51, 56, 128, 65, 52, 51, 55, 128, 65, 52, 51,
-    54, 128, 65, 52, 51, 53, 128, 65, 52, 51, 52, 128, 65, 52, 51, 51, 128,
-    65, 52, 51, 50, 128, 65, 52, 51, 49, 128, 65, 52, 51, 48, 128, 65, 52,
-    50, 57, 128, 65, 52, 50, 56, 128, 65, 52, 50, 55, 128, 65, 52, 50, 54,
-    128, 65, 52, 50, 53, 128, 65, 52, 50, 52, 128, 65, 52, 50, 51, 128, 65,
-    52, 50, 50, 128, 65, 52, 50, 49, 128, 65, 52, 50, 48, 128, 65, 52, 49,
-    57, 128, 65, 52, 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 56, 128, 65,
-    52, 49, 55, 45, 86, 65, 83, 128, 65, 52, 49, 55, 128, 65, 52, 49, 54, 45,
-    86, 65, 83, 128, 65, 52, 49, 54, 128, 65, 52, 49, 53, 45, 86, 65, 83,
-    128, 65, 52, 49, 53, 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52,
-    49, 52, 128, 65, 52, 49, 51, 45, 86, 65, 83, 128, 65, 52, 49, 51, 128,
-    65, 52, 49, 50, 45, 86, 65, 83, 128, 65, 52, 49, 50, 128, 65, 52, 49, 49,
-    45, 86, 65, 83, 128, 65, 52, 49, 49, 128, 65, 52, 49, 48, 193, 65, 52,
-    49, 48, 45, 86, 65, 83, 128, 65, 52, 49, 176, 65, 52, 48, 57, 45, 86, 65,
-    83, 128, 65, 52, 48, 57, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65,
-    52, 48, 56, 128, 65, 52, 48, 55, 45, 86, 65, 83, 128, 65, 52, 48, 55,
-    128, 65, 52, 48, 54, 45, 86, 65, 83, 128, 65, 52, 48, 54, 128, 65, 52,
-    48, 53, 45, 86, 65, 83, 128, 65, 52, 48, 53, 128, 65, 52, 48, 52, 45, 86,
-    65, 83, 128, 65, 52, 48, 52, 128, 65, 52, 48, 51, 45, 86, 65, 83, 128,
-    65, 52, 48, 51, 128, 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 50,
-    128, 65, 52, 48, 49, 45, 86, 65, 83, 128, 65, 52, 48, 49, 128, 65, 52,
-    48, 48, 45, 86, 65, 83, 128, 65, 52, 48, 48, 128, 65, 51, 57, 57, 128,
-    65, 51, 57, 56, 128, 65, 51, 57, 55, 128, 65, 51, 57, 54, 128, 65, 51,
-    57, 53, 128, 65, 51, 57, 52, 128, 65, 51, 57, 179, 65, 51, 57, 50, 128,
-    65, 51, 57, 49, 128, 65, 51, 57, 48, 128, 65, 51, 56, 57, 128, 65, 51,
-    56, 56, 128, 65, 51, 56, 55, 128, 65, 51, 56, 54, 65, 128, 65, 51, 56,
-    54, 128, 65, 51, 56, 53, 128, 65, 51, 56, 52, 128, 65, 51, 56, 51, 65,
-    128, 65, 51, 56, 179, 65, 51, 56, 50, 128, 65, 51, 56, 49, 65, 128, 65,
-    51, 56, 49, 128, 65, 51, 56, 48, 128, 65, 51, 55, 57, 128, 65, 51, 55,
-    56, 128, 65, 51, 55, 55, 128, 65, 51, 55, 54, 128, 65, 51, 55, 53, 128,
-    65, 51, 55, 52, 128, 65, 51, 55, 51, 128, 65, 51, 55, 50, 128, 65, 51,
-    55, 49, 65, 128, 65, 51, 55, 49, 128, 65, 51, 55, 48, 128, 65, 51, 54,
-    57, 128, 65, 51, 54, 56, 65, 128, 65, 51, 54, 56, 128, 65, 51, 54, 55,
-    128, 65, 51, 54, 54, 128, 65, 51, 54, 53, 128, 65, 51, 54, 52, 65, 128,
-    65, 51, 54, 52, 128, 65, 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51,
-    54, 49, 128, 65, 51, 54, 48, 128, 65, 51, 53, 57, 65, 128, 65, 51, 53,
-    57, 128, 65, 51, 53, 56, 128, 65, 51, 53, 55, 128, 65, 51, 53, 54, 128,
-    65, 51, 53, 53, 128, 65, 51, 53, 52, 128, 65, 51, 53, 51, 128, 65, 51,
-    53, 50, 128, 65, 51, 53, 49, 128, 65, 51, 53, 48, 128, 65, 51, 52, 57,
-    128, 65, 51, 52, 56, 128, 65, 51, 52, 55, 128, 65, 51, 52, 54, 128, 65,
-    51, 52, 53, 128, 65, 51, 52, 52, 128, 65, 51, 52, 51, 128, 65, 51, 52,
-    50, 128, 65, 51, 52, 49, 128, 65, 51, 52, 48, 128, 65, 51, 51, 57, 128,
-    65, 51, 51, 56, 128, 65, 51, 51, 55, 128, 65, 51, 51, 54, 67, 128, 65,
-    51, 51, 54, 66, 128, 65, 51, 51, 54, 65, 128, 65, 51, 51, 54, 128, 65,
-    51, 51, 53, 128, 65, 51, 51, 52, 128, 65, 51, 51, 51, 128, 65, 51, 51,
-    50, 67, 128, 65, 51, 51, 50, 66, 128, 65, 51, 51, 50, 65, 128, 65, 51,
-    51, 50, 128, 65, 51, 51, 49, 128, 65, 51, 51, 48, 128, 65, 51, 50, 57,
-    65, 128, 65, 51, 50, 57, 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128,
-    65, 51, 50, 54, 128, 65, 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51,
-    50, 51, 128, 65, 51, 50, 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48,
-    128, 65, 51, 49, 57, 128, 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65,
-    51, 49, 54, 128, 65, 51, 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49,
-    51, 67, 128, 65, 51, 49, 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51,
-    49, 51, 128, 65, 51, 49, 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48,
-    128, 65, 51, 48, 57, 67, 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57,
-    65, 128, 65, 51, 48, 57, 128, 65, 51, 48, 56, 128, 65, 51, 48, 55, 128,
-    65, 51, 48, 54, 128, 65, 51, 48, 53, 128, 65, 51, 48, 52, 128, 65, 51,
-    48, 51, 128, 65, 51, 48, 50, 128, 65, 51, 48, 49, 128, 65, 51, 48, 48,
-    128, 65, 50, 57, 57, 65, 128, 65, 50, 57, 57, 128, 65, 50, 57, 56, 128,
-    65, 50, 57, 55, 128, 65, 50, 57, 54, 128, 65, 50, 57, 53, 128, 65, 50,
-    57, 52, 65, 128, 65, 50, 57, 52, 128, 65, 50, 57, 51, 128, 65, 50, 57,
-    50, 128, 65, 50, 57, 49, 128, 65, 50, 57, 48, 128, 65, 50, 56, 57, 65,
-    128, 65, 50, 56, 57, 128, 65, 50, 56, 56, 128, 65, 50, 56, 55, 128, 65,
-    50, 56, 54, 128, 65, 50, 56, 53, 128, 65, 50, 56, 52, 128, 65, 50, 56,
-    51, 128, 65, 50, 56, 50, 128, 65, 50, 56, 49, 128, 65, 50, 56, 48, 128,
-    65, 50, 55, 57, 128, 65, 50, 55, 56, 128, 65, 50, 55, 55, 128, 65, 50,
-    55, 54, 128, 65, 50, 55, 53, 128, 65, 50, 55, 52, 128, 65, 50, 55, 51,
-    128, 65, 50, 55, 50, 128, 65, 50, 55, 49, 128, 65, 50, 55, 48, 128, 65,
-    50, 54, 57, 128, 65, 50, 54, 56, 128, 65, 50, 54, 55, 65, 128, 65, 50,
-    54, 55, 128, 65, 50, 54, 54, 128, 65, 50, 54, 53, 128, 65, 50, 54, 52,
-    128, 65, 50, 54, 51, 128, 65, 50, 54, 50, 128, 65, 50, 54, 49, 128, 65,
-    50, 54, 48, 128, 65, 50, 53, 57, 128, 65, 50, 53, 56, 128, 65, 50, 53,
-    55, 128, 65, 50, 53, 54, 128, 65, 50, 53, 53, 128, 65, 50, 53, 52, 128,
-    65, 50, 53, 51, 128, 65, 50, 53, 50, 128, 65, 50, 53, 49, 128, 65, 50,
-    53, 48, 128, 65, 50, 52, 57, 128, 65, 50, 52, 56, 128, 65, 50, 52, 55,
-    128, 65, 50, 52, 54, 128, 65, 50, 52, 53, 128, 65, 50, 52, 52, 128, 65,
-    50, 52, 51, 128, 65, 50, 52, 50, 128, 65, 50, 52, 49, 128, 65, 50, 52,
-    48, 128, 65, 50, 51, 57, 128, 65, 50, 51, 56, 128, 65, 50, 51, 55, 128,
-    65, 50, 51, 54, 128, 65, 50, 51, 53, 128, 65, 50, 51, 52, 128, 65, 50,
-    51, 51, 128, 65, 50, 51, 50, 128, 65, 50, 51, 49, 128, 65, 50, 51, 48,
-    128, 65, 50, 50, 57, 128, 65, 50, 50, 56, 128, 65, 50, 50, 55, 65, 128,
-    65, 50, 50, 55, 128, 65, 50, 50, 54, 128, 65, 50, 50, 53, 128, 65, 50,
-    50, 52, 128, 65, 50, 50, 51, 128, 65, 50, 50, 50, 128, 65, 50, 50, 49,
-    128, 65, 50, 50, 48, 128, 65, 50, 49, 57, 128, 65, 50, 49, 56, 128, 65,
-    50, 49, 55, 128, 65, 50, 49, 54, 65, 128, 65, 50, 49, 54, 128, 65, 50,
-    49, 53, 65, 128, 65, 50, 49, 53, 128, 65, 50, 49, 52, 128, 65, 50, 49,
-    51, 128, 65, 50, 49, 50, 128, 65, 50, 49, 49, 128, 65, 50, 49, 48, 128,
-    65, 50, 48, 57, 65, 128, 65, 50, 48, 57, 128, 65, 50, 48, 56, 128, 65,
-    50, 48, 55, 65, 128, 65, 50, 48, 55, 128, 65, 50, 48, 54, 128, 65, 50,
-    48, 53, 128, 65, 50, 48, 52, 128, 65, 50, 48, 51, 128, 65, 50, 48, 50,
-    66, 128, 65, 50, 48, 50, 65, 128, 65, 50, 48, 50, 128, 65, 50, 48, 49,
-    128, 65, 50, 48, 48, 128, 65, 49, 57, 57, 128, 65, 49, 57, 56, 128, 65,
-    49, 57, 55, 128, 65, 49, 57, 54, 128, 65, 49, 57, 53, 128, 65, 49, 57,
-    52, 128, 65, 49, 57, 51, 128, 65, 49, 57, 50, 128, 65, 49, 57, 49, 128,
-    65, 49, 57, 48, 128, 65, 49, 56, 57, 128, 65, 49, 56, 56, 128, 65, 49,
-    56, 55, 128, 65, 49, 56, 54, 128, 65, 49, 56, 53, 128, 65, 49, 56, 52,
-    128, 65, 49, 56, 51, 128, 65, 49, 56, 50, 128, 65, 49, 56, 49, 128, 65,
-    49, 56, 48, 128, 65, 49, 55, 57, 128, 65, 49, 55, 56, 128, 65, 49, 55,
-    55, 128, 65, 49, 55, 54, 128, 65, 49, 55, 53, 128, 65, 49, 55, 52, 128,
-    65, 49, 55, 51, 128, 65, 49, 55, 50, 128, 65, 49, 55, 49, 128, 65, 49,
-    55, 48, 128, 65, 49, 54, 57, 128, 65, 49, 54, 56, 128, 65, 49, 54, 55,
-    128, 65, 49, 54, 54, 128, 65, 49, 54, 53, 128, 65, 49, 54, 52, 128, 65,
-    49, 54, 51, 128, 65, 49, 54, 50, 128, 65, 49, 54, 49, 128, 65, 49, 54,
-    48, 128, 65, 49, 53, 57, 128, 65, 49, 53, 56, 128, 65, 49, 53, 55, 128,
-    65, 49, 53, 54, 128, 65, 49, 53, 53, 128, 65, 49, 53, 52, 128, 65, 49,
-    53, 51, 128, 65, 49, 53, 50, 128, 65, 49, 53, 49, 128, 65, 49, 53, 48,
-    128, 65, 49, 52, 57, 128, 65, 49, 52, 56, 128, 65, 49, 52, 55, 128, 65,
-    49, 52, 54, 128, 65, 49, 52, 53, 128, 65, 49, 52, 52, 128, 65, 49, 52,
-    51, 128, 65, 49, 52, 50, 128, 65, 49, 52, 49, 128, 65, 49, 52, 48, 128,
-    65, 49, 51, 57, 128, 65, 49, 51, 56, 128, 65, 49, 51, 55, 128, 65, 49,
-    51, 54, 128, 65, 49, 51, 53, 65, 128, 65, 49, 51, 53, 128, 65, 49, 51,
-    52, 128, 65, 49, 51, 51, 128, 65, 49, 51, 50, 128, 65, 49, 51, 49, 67,
-    128, 65, 49, 51, 49, 128, 65, 49, 51, 48, 128, 65, 49, 50, 57, 128, 65,
-    49, 50, 56, 128, 65, 49, 50, 55, 128, 65, 49, 50, 54, 128, 65, 49, 50,
-    53, 65, 128, 65, 49, 50, 53, 128, 65, 49, 50, 52, 128, 65, 49, 50, 51,
-    128, 65, 49, 50, 50, 128, 65, 49, 50, 49, 128, 65, 49, 50, 48, 66, 128,
-    65, 49, 50, 48, 128, 65, 49, 49, 57, 128, 65, 49, 49, 56, 128, 65, 49,
-    49, 55, 128, 65, 49, 49, 54, 128, 65, 49, 49, 53, 65, 128, 65, 49, 49,
-    53, 128, 65, 49, 49, 52, 128, 65, 49, 49, 51, 128, 65, 49, 49, 50, 128,
-    65, 49, 49, 49, 128, 65, 49, 49, 48, 66, 128, 65, 49, 49, 48, 65, 128,
-    65, 49, 49, 48, 128, 65, 49, 48, 57, 128, 65, 49, 48, 56, 128, 65, 49,
-    48, 55, 67, 128, 65, 49, 48, 55, 66, 128, 65, 49, 48, 55, 65, 128, 65,
-    49, 48, 55, 128, 65, 49, 48, 54, 128, 65, 49, 48, 53, 66, 128, 65, 49,
-    48, 53, 65, 128, 65, 49, 48, 53, 128, 65, 49, 48, 52, 67, 128, 65, 49,
-    48, 52, 66, 128, 65, 49, 48, 52, 65, 128, 65, 49, 48, 52, 128, 65, 49,
-    48, 51, 128, 65, 49, 48, 50, 65, 128, 65, 49, 48, 50, 128, 65, 49, 48,
-    49, 65, 128, 65, 49, 48, 49, 128, 65, 49, 48, 48, 65, 128, 65, 49, 48,
-    48, 45, 49, 48, 50, 128, 65, 49, 48, 48, 128, 65, 48, 57, 57, 128, 65,
-    48, 57, 56, 65, 128, 65, 48, 57, 56, 128, 65, 48, 57, 55, 65, 128, 65,
-    48, 57, 55, 128, 65, 48, 57, 54, 128, 65, 48, 57, 53, 128, 65, 48, 57,
-    52, 128, 65, 48, 57, 51, 128, 65, 48, 57, 50, 128, 65, 48, 57, 49, 128,
-    65, 48, 57, 48, 128, 65, 48, 56, 57, 128, 65, 48, 56, 56, 128, 65, 48,
-    56, 55, 128, 65, 48, 56, 54, 128, 65, 48, 56, 53, 128, 65, 48, 56, 52,
-    128, 65, 48, 56, 51, 128, 65, 48, 56, 50, 128, 65, 48, 56, 49, 128, 65,
-    48, 56, 48, 128, 65, 48, 55, 57, 128, 65, 48, 55, 56, 128, 65, 48, 55,
-    55, 128, 65, 48, 55, 54, 128, 65, 48, 55, 53, 128, 65, 48, 55, 52, 128,
-    65, 48, 55, 51, 128, 65, 48, 55, 50, 128, 65, 48, 55, 49, 128, 65, 48,
-    55, 48, 128, 65, 48, 54, 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55,
-    128, 65, 48, 54, 54, 67, 128, 65, 48, 54, 54, 66, 128, 65, 48, 54, 54,
-    65, 128, 65, 48, 54, 54, 128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128,
-    65, 48, 54, 51, 128, 65, 48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48,
-    54, 48, 128, 65, 48, 53, 57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55,
-    128, 65, 48, 53, 54, 128, 65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65,
-    48, 53, 51, 128, 65, 48, 53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53,
-    48, 128, 65, 48, 52, 57, 128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128,
-    65, 48, 52, 54, 66, 128, 65, 48, 52, 54, 65, 128, 65, 48, 52, 54, 128,
-    65, 48, 52, 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65,
-    48, 52, 51, 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65,
-    48, 52, 50, 128, 65, 48, 52, 49, 65, 128, 65, 48, 52, 49, 128, 65, 48,
-    52, 48, 65, 128, 65, 48, 52, 48, 128, 65, 48, 51, 57, 65, 128, 65, 48,
-    51, 57, 128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54,
-    128, 65, 48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65,
-    48, 51, 50, 65, 128, 65, 48, 50, 56, 66, 128, 65, 48, 50, 54, 65, 128,
-    65, 48, 49, 55, 65, 128, 65, 48, 49, 52, 65, 128, 65, 48, 49, 48, 65,
-    128, 65, 48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 53,
-    65, 128, 65, 45, 87, 79, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80,
-    72, 82, 85, 128, 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128,
-    45, 68, 90, 85, 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128,
+    76, 65, 80, 72, 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, 65, 75, 85,
+    82, 213, 65, 75, 84, 73, 69, 83, 69, 76, 83, 75, 65, 66, 128, 65, 75, 83,
+    65, 128, 65, 75, 72, 77, 73, 77, 73, 195, 65, 75, 66, 65, 210, 65, 75,
+    65, 82, 65, 128, 65, 75, 65, 82, 193, 65, 73, 89, 65, 78, 78, 65, 128,
+    65, 73, 86, 73, 76, 73, 203, 65, 73, 86, 65, 128, 65, 73, 84, 79, 206,
+    65, 73, 82, 80, 76, 65, 78, 69, 128, 65, 73, 82, 80, 76, 65, 78, 197, 65,
+    73, 78, 213, 65, 73, 78, 78, 128, 65, 73, 76, 77, 128, 65, 73, 75, 65,
+    82, 65, 128, 65, 73, 72, 86, 85, 83, 128, 65, 72, 83, 68, 65, 128, 65,
+    72, 83, 65, 128, 65, 72, 79, 205, 65, 72, 65, 78, 199, 65, 72, 65, 71,
+    71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 85, 78, 71, 128, 65, 71, 79,
+    71, 201, 65, 71, 71, 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 71, 82,
+    65, 86, 65, 84, 69, 196, 65, 71, 65, 73, 78, 83, 212, 65, 71, 65, 73, 78,
+    128, 65, 70, 84, 69, 210, 65, 70, 83, 65, 65, 81, 128, 65, 70, 82, 73,
+    67, 65, 206, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128,
+    65, 70, 71, 72, 65, 78, 201, 65, 70, 70, 82, 73, 67, 65, 84, 73, 79, 206,
+    65, 70, 70, 73, 216, 65, 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128,
+    65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, 67, 128, 65,
+    69, 83, 128, 65, 69, 82, 73, 65, 204, 65, 69, 82, 128, 65, 69, 76, 65,
+    45, 80, 73, 76, 76, 65, 128, 65, 69, 76, 128, 65, 69, 75, 128, 65, 69,
+    71, 69, 65, 206, 65, 69, 71, 128, 65, 69, 69, 89, 65, 78, 78, 65, 128,
+    65, 69, 69, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 68,
+    128, 65, 69, 66, 128, 65, 68, 86, 65, 78, 84, 65, 71, 69, 128, 65, 68,
+    86, 65, 78, 67, 69, 128, 65, 68, 85, 76, 84, 128, 65, 68, 77, 73, 83, 83,
+    73, 79, 206, 65, 68, 77, 69, 84, 79, 83, 128, 65, 68, 76, 65, 205, 65,
+    68, 72, 69, 83, 73, 86, 197, 65, 68, 69, 71, 128, 65, 68, 69, 199, 65,
+    68, 68, 82, 69, 83, 83, 69, 196, 65, 68, 68, 82, 69, 83, 211, 65, 68, 68,
+    65, 75, 128, 65, 68, 65, 203, 65, 67, 85, 84, 69, 45, 77, 65, 67, 82, 79,
+    78, 128, 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 45, 65, 67, 85, 84,
+    69, 128, 65, 67, 85, 84, 197, 65, 67, 84, 85, 65, 76, 76, 217, 65, 67,
+    84, 73, 86, 65, 84, 197, 65, 67, 82, 79, 80, 72, 79, 78, 73, 195, 65, 67,
+    75, 78, 79, 87, 76, 69, 68, 71, 69, 128, 65, 67, 67, 85, 77, 85, 76, 65,
+    84, 73, 79, 78, 128, 65, 67, 67, 79, 85, 78, 212, 65, 67, 67, 79, 82, 68,
+    73, 79, 78, 128, 65, 67, 67, 79, 77, 77, 79, 68, 65, 84, 73, 79, 78, 128,
+    65, 67, 67, 69, 80, 84, 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67,
+    67, 65, 84, 79, 128, 65, 67, 67, 69, 78, 84, 128, 65, 67, 67, 69, 78,
+    212, 65, 67, 65, 68, 69, 77, 217, 65, 66, 89, 83, 77, 65, 204, 65, 66,
+    85, 78, 68, 65, 78, 67, 69, 128, 65, 66, 75, 72, 65, 83, 73, 65, 206, 65,
+    66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 66, 65, 70, 73, 76, 73,
+    128, 65, 66, 65, 67, 85, 83, 128, 65, 66, 178, 65, 66, 49, 57, 49, 128,
+    65, 66, 49, 56, 56, 128, 65, 66, 49, 56, 48, 128, 65, 66, 49, 55, 49,
+    128, 65, 66, 49, 54, 52, 128, 65, 66, 49, 51, 49, 66, 128, 65, 66, 49,
+    51, 49, 65, 128, 65, 66, 49, 50, 51, 128, 65, 66, 49, 50, 50, 128, 65,
+    66, 49, 50, 48, 128, 65, 66, 49, 49, 56, 128, 65, 66, 48, 56, 55, 128,
+    65, 66, 48, 56, 54, 128, 65, 66, 48, 56, 53, 128, 65, 66, 48, 56, 50,
+    128, 65, 66, 48, 56, 49, 128, 65, 66, 48, 56, 48, 128, 65, 66, 48, 55,
+    57, 128, 65, 66, 48, 55, 56, 128, 65, 66, 48, 55, 55, 128, 65, 66, 48,
+    55, 54, 128, 65, 66, 48, 55, 52, 128, 65, 66, 48, 55, 51, 128, 65, 66,
+    48, 55, 48, 128, 65, 66, 48, 54, 57, 128, 65, 66, 48, 54, 55, 128, 65,
+    66, 48, 54, 54, 128, 65, 66, 48, 54, 53, 128, 65, 66, 48, 54, 49, 128,
+    65, 66, 48, 54, 48, 128, 65, 66, 48, 53, 57, 128, 65, 66, 48, 53, 56,
+    128, 65, 66, 48, 53, 55, 128, 65, 66, 48, 53, 54, 128, 65, 66, 48, 53,
+    53, 128, 65, 66, 48, 53, 52, 128, 65, 66, 48, 53, 51, 128, 65, 66, 48,
+    53, 49, 128, 65, 66, 48, 53, 48, 128, 65, 66, 48, 52, 57, 128, 65, 66,
+    48, 52, 56, 128, 65, 66, 48, 52, 55, 128, 65, 66, 48, 52, 54, 128, 65,
+    66, 48, 52, 53, 128, 65, 66, 48, 52, 52, 128, 65, 66, 48, 52, 49, 128,
+    65, 66, 48, 52, 48, 128, 65, 66, 48, 51, 57, 128, 65, 66, 48, 51, 56,
+    128, 65, 66, 48, 51, 55, 128, 65, 66, 48, 51, 52, 128, 65, 66, 48, 51,
+    49, 128, 65, 66, 48, 51, 48, 128, 65, 66, 48, 50, 57, 128, 65, 66, 48,
+    50, 56, 128, 65, 66, 48, 50, 55, 128, 65, 66, 48, 50, 54, 128, 65, 66,
+    48, 50, 52, 128, 65, 66, 48, 50, 51, 77, 128, 65, 66, 48, 50, 51, 128,
+    65, 66, 48, 50, 50, 77, 128, 65, 66, 48, 50, 50, 70, 128, 65, 66, 48, 50,
+    50, 128, 65, 66, 48, 50, 49, 77, 128, 65, 66, 48, 50, 49, 70, 128, 65,
+    66, 48, 50, 49, 128, 65, 66, 48, 50, 48, 128, 65, 66, 48, 49, 55, 128,
+    65, 66, 48, 49, 54, 128, 65, 66, 48, 49, 51, 128, 65, 66, 48, 49, 49,
+    128, 65, 66, 48, 49, 48, 128, 65, 66, 48, 48, 57, 128, 65, 66, 48, 48,
+    56, 128, 65, 66, 48, 48, 55, 128, 65, 66, 48, 48, 54, 128, 65, 66, 48,
+    48, 53, 128, 65, 66, 48, 48, 52, 128, 65, 66, 48, 48, 51, 128, 65, 66,
+    48, 48, 50, 128, 65, 66, 48, 48, 49, 128, 65, 65, 90, 72, 65, 65, 75, 75,
+    85, 128, 65, 65, 89, 73, 78, 128, 65, 65, 89, 65, 78, 78, 65, 128, 65,
+    65, 89, 128, 65, 65, 87, 128, 65, 65, 79, 128, 65, 65, 74, 128, 65, 65,
+    66, 65, 65, 70, 73, 76, 73, 128, 65, 65, 48, 51, 50, 128, 65, 65, 48, 51,
+    49, 128, 65, 65, 48, 51, 48, 128, 65, 65, 48, 50, 57, 128, 65, 65, 48,
+    50, 56, 128, 65, 65, 48, 50, 55, 128, 65, 65, 48, 50, 54, 128, 65, 65,
+    48, 50, 53, 128, 65, 65, 48, 50, 52, 128, 65, 65, 48, 50, 51, 128, 65,
+    65, 48, 50, 50, 128, 65, 65, 48, 50, 49, 128, 65, 65, 48, 50, 48, 128,
+    65, 65, 48, 49, 57, 128, 65, 65, 48, 49, 56, 128, 65, 65, 48, 49, 55,
+    128, 65, 65, 48, 49, 54, 128, 65, 65, 48, 49, 53, 128, 65, 65, 48, 49,
+    52, 128, 65, 65, 48, 49, 51, 128, 65, 65, 48, 49, 50, 128, 65, 65, 48,
+    49, 49, 128, 65, 65, 48, 49, 48, 128, 65, 65, 48, 48, 57, 128, 65, 65,
+    48, 48, 56, 128, 65, 65, 48, 48, 55, 66, 128, 65, 65, 48, 48, 55, 65,
+    128, 65, 65, 48, 48, 55, 128, 65, 65, 48, 48, 54, 128, 65, 65, 48, 48,
+    53, 128, 65, 65, 48, 48, 52, 128, 65, 65, 48, 48, 51, 128, 65, 65, 48,
+    48, 50, 128, 65, 65, 48, 48, 49, 128, 65, 56, 48, 55, 128, 65, 56, 48,
+    54, 128, 65, 56, 48, 53, 128, 65, 56, 48, 52, 128, 65, 56, 48, 51, 128,
+    65, 56, 48, 50, 128, 65, 56, 48, 49, 128, 65, 56, 48, 48, 128, 65, 55,
+    51, 178, 65, 55, 50, 182, 65, 55, 49, 183, 65, 55, 49, 181, 65, 55, 49,
+    180, 65, 55, 49, 179, 65, 55, 49, 178, 65, 55, 49, 177, 65, 55, 49, 176,
+    65, 55, 48, 57, 45, 182, 65, 55, 48, 57, 45, 180, 65, 55, 48, 57, 45,
+    179, 65, 55, 48, 57, 45, 178, 65, 55, 48, 185, 65, 55, 48, 184, 65, 55,
+    48, 183, 65, 55, 48, 182, 65, 55, 48, 181, 65, 55, 48, 180, 65, 55, 48,
+    179, 65, 55, 48, 178, 65, 55, 48, 177, 65, 54, 54, 52, 128, 65, 54, 54,
+    51, 128, 65, 54, 54, 50, 128, 65, 54, 54, 49, 128, 65, 54, 54, 48, 128,
+    65, 54, 53, 57, 128, 65, 54, 53, 56, 128, 65, 54, 53, 55, 128, 65, 54,
+    53, 54, 128, 65, 54, 53, 53, 128, 65, 54, 53, 52, 128, 65, 54, 53, 51,
+    128, 65, 54, 53, 50, 128, 65, 54, 53, 49, 128, 65, 54, 52, 57, 128, 65,
+    54, 52, 56, 128, 65, 54, 52, 54, 128, 65, 54, 52, 53, 128, 65, 54, 52,
+    52, 128, 65, 54, 52, 51, 128, 65, 54, 52, 50, 128, 65, 54, 52, 48, 128,
+    65, 54, 51, 56, 128, 65, 54, 51, 55, 128, 65, 54, 51, 52, 128, 65, 54,
+    50, 57, 128, 65, 54, 50, 56, 128, 65, 54, 50, 55, 128, 65, 54, 50, 54,
+    128, 65, 54, 50, 52, 128, 65, 54, 50, 51, 128, 65, 54, 50, 50, 128, 65,
+    54, 50, 49, 128, 65, 54, 50, 48, 128, 65, 54, 49, 57, 128, 65, 54, 49,
+    56, 128, 65, 54, 49, 55, 128, 65, 54, 49, 54, 128, 65, 54, 49, 53, 128,
+    65, 54, 49, 52, 128, 65, 54, 49, 51, 128, 65, 54, 49, 50, 128, 65, 54,
+    49, 49, 128, 65, 54, 49, 48, 128, 65, 54, 48, 57, 128, 65, 54, 48, 56,
+    128, 65, 54, 48, 54, 128, 65, 54, 48, 52, 128, 65, 54, 48, 51, 128, 65,
+    54, 48, 50, 128, 65, 54, 48, 49, 128, 65, 54, 48, 48, 128, 65, 53, 57,
+    56, 128, 65, 53, 57, 54, 128, 65, 53, 57, 53, 128, 65, 53, 57, 52, 128,
+    65, 53, 57, 50, 128, 65, 53, 57, 49, 128, 65, 53, 56, 57, 128, 65, 53,
+    56, 56, 128, 65, 53, 56, 55, 128, 65, 53, 56, 54, 128, 65, 53, 56, 53,
+    128, 65, 53, 56, 52, 128, 65, 53, 56, 51, 128, 65, 53, 56, 50, 128, 65,
+    53, 56, 49, 128, 65, 53, 56, 48, 128, 65, 53, 55, 57, 128, 65, 53, 55,
+    56, 128, 65, 53, 55, 55, 128, 65, 53, 55, 54, 128, 65, 53, 55, 53, 128,
+    65, 53, 55, 52, 128, 65, 53, 55, 51, 128, 65, 53, 55, 50, 128, 65, 53,
+    55, 49, 128, 65, 53, 55, 48, 128, 65, 53, 54, 57, 128, 65, 53, 54, 56,
+    128, 65, 53, 54, 54, 128, 65, 53, 54, 53, 128, 65, 53, 54, 52, 128, 65,
+    53, 54, 51, 128, 65, 53, 53, 57, 128, 65, 53, 53, 55, 128, 65, 53, 53,
+    54, 128, 65, 53, 53, 53, 128, 65, 53, 53, 52, 128, 65, 53, 53, 51, 128,
+    65, 53, 53, 50, 128, 65, 53, 53, 49, 128, 65, 53, 53, 48, 128, 65, 53,
+    52, 57, 128, 65, 53, 52, 56, 128, 65, 53, 52, 55, 128, 65, 53, 52, 53,
+    128, 65, 53, 52, 50, 128, 65, 53, 52, 49, 128, 65, 53, 52, 48, 128, 65,
+    53, 51, 57, 128, 65, 53, 51, 56, 128, 65, 53, 51, 55, 128, 65, 53, 51,
+    54, 128, 65, 53, 51, 53, 128, 65, 53, 51, 52, 128, 65, 53, 51, 50, 128,
+    65, 53, 51, 49, 128, 65, 53, 51, 48, 128, 65, 53, 50, 57, 128, 65, 53,
+    50, 56, 128, 65, 53, 50, 55, 128, 65, 53, 50, 54, 128, 65, 53, 50, 53,
+    128, 65, 53, 50, 52, 128, 65, 53, 50, 51, 128, 65, 53, 50, 50, 128, 65,
+    53, 50, 49, 128, 65, 53, 50, 48, 128, 65, 53, 49, 57, 128, 65, 53, 49,
+    56, 128, 65, 53, 49, 55, 128, 65, 53, 49, 54, 128, 65, 53, 49, 53, 128,
+    65, 53, 49, 52, 128, 65, 53, 49, 51, 128, 65, 53, 49, 50, 128, 65, 53,
+    49, 49, 128, 65, 53, 49, 48, 128, 65, 53, 48, 57, 128, 65, 53, 48, 56,
+    128, 65, 53, 48, 55, 128, 65, 53, 48, 54, 128, 65, 53, 48, 53, 128, 65,
+    53, 48, 52, 128, 65, 53, 48, 51, 128, 65, 53, 48, 50, 128, 65, 53, 48,
+    49, 128, 65, 52, 57, 55, 128, 65, 52, 57, 54, 128, 65, 52, 57, 53, 128,
+    65, 52, 57, 52, 128, 65, 52, 57, 51, 128, 65, 52, 57, 50, 128, 65, 52,
+    57, 49, 128, 65, 52, 57, 48, 128, 65, 52, 56, 57, 128, 65, 52, 56, 56,
+    128, 65, 52, 56, 55, 128, 65, 52, 56, 54, 128, 65, 52, 56, 53, 128, 65,
+    52, 56, 52, 128, 65, 52, 56, 51, 128, 65, 52, 56, 50, 128, 65, 52, 56,
+    49, 128, 65, 52, 56, 48, 128, 65, 52, 55, 57, 128, 65, 52, 55, 56, 128,
+    65, 52, 55, 55, 128, 65, 52, 55, 54, 128, 65, 52, 55, 53, 128, 65, 52,
+    55, 52, 128, 65, 52, 55, 51, 128, 65, 52, 55, 50, 128, 65, 52, 55, 49,
+    128, 65, 52, 55, 48, 128, 65, 52, 54, 57, 128, 65, 52, 54, 56, 128, 65,
+    52, 54, 55, 128, 65, 52, 54, 54, 128, 65, 52, 54, 53, 128, 65, 52, 54,
+    52, 128, 65, 52, 54, 51, 128, 65, 52, 54, 50, 128, 65, 52, 54, 49, 128,
+    65, 52, 54, 48, 128, 65, 52, 53, 57, 128, 65, 52, 53, 56, 128, 65, 52,
+    53, 55, 65, 128, 65, 52, 53, 55, 128, 65, 52, 53, 54, 128, 65, 52, 53,
+    53, 128, 65, 52, 53, 52, 128, 65, 52, 53, 51, 128, 65, 52, 53, 50, 128,
+    65, 52, 53, 49, 128, 65, 52, 53, 48, 65, 128, 65, 52, 53, 48, 128, 65,
+    52, 52, 57, 128, 65, 52, 52, 56, 128, 65, 52, 52, 55, 128, 65, 52, 52,
+    54, 128, 65, 52, 52, 53, 128, 65, 52, 52, 52, 128, 65, 52, 52, 51, 128,
+    65, 52, 52, 50, 128, 65, 52, 52, 49, 128, 65, 52, 52, 48, 128, 65, 52,
+    51, 57, 128, 65, 52, 51, 56, 128, 65, 52, 51, 55, 128, 65, 52, 51, 54,
+    128, 65, 52, 51, 53, 128, 65, 52, 51, 52, 128, 65, 52, 51, 51, 128, 65,
+    52, 51, 50, 128, 65, 52, 51, 49, 128, 65, 52, 51, 48, 128, 65, 52, 50,
+    57, 128, 65, 52, 50, 56, 128, 65, 52, 50, 55, 128, 65, 52, 50, 54, 128,
+    65, 52, 50, 53, 128, 65, 52, 50, 52, 128, 65, 52, 50, 51, 128, 65, 52,
+    50, 50, 128, 65, 52, 50, 49, 128, 65, 52, 50, 48, 128, 65, 52, 49, 57,
+    128, 65, 52, 49, 56, 45, 86, 65, 83, 128, 65, 52, 49, 56, 128, 65, 52,
+    49, 55, 45, 86, 65, 83, 128, 65, 52, 49, 55, 128, 65, 52, 49, 54, 45, 86,
+    65, 83, 128, 65, 52, 49, 54, 128, 65, 52, 49, 53, 45, 86, 65, 83, 128,
+    65, 52, 49, 53, 128, 65, 52, 49, 52, 45, 86, 65, 83, 128, 65, 52, 49, 52,
+    128, 65, 52, 49, 51, 45, 86, 65, 83, 128, 65, 52, 49, 51, 128, 65, 52,
+    49, 50, 45, 86, 65, 83, 128, 65, 52, 49, 50, 128, 65, 52, 49, 49, 45, 86,
+    65, 83, 128, 65, 52, 49, 49, 128, 65, 52, 49, 48, 193, 65, 52, 49, 48,
+    45, 86, 65, 83, 128, 65, 52, 49, 176, 65, 52, 48, 57, 45, 86, 65, 83,
+    128, 65, 52, 48, 57, 128, 65, 52, 48, 56, 45, 86, 65, 83, 128, 65, 52,
+    48, 56, 128, 65, 52, 48, 55, 45, 86, 65, 83, 128, 65, 52, 48, 55, 128,
+    65, 52, 48, 54, 45, 86, 65, 83, 128, 65, 52, 48, 54, 128, 65, 52, 48, 53,
+    45, 86, 65, 83, 128, 65, 52, 48, 53, 128, 65, 52, 48, 52, 45, 86, 65, 83,
+    128, 65, 52, 48, 52, 128, 65, 52, 48, 51, 45, 86, 65, 83, 128, 65, 52,
+    48, 51, 128, 65, 52, 48, 50, 45, 86, 65, 83, 128, 65, 52, 48, 50, 128,
+    65, 52, 48, 49, 45, 86, 65, 83, 128, 65, 52, 48, 49, 128, 65, 52, 48, 48,
+    45, 86, 65, 83, 128, 65, 52, 48, 48, 128, 65, 51, 57, 57, 128, 65, 51,
+    57, 56, 128, 65, 51, 57, 55, 128, 65, 51, 57, 54, 128, 65, 51, 57, 53,
+    128, 65, 51, 57, 52, 128, 65, 51, 57, 179, 65, 51, 57, 50, 128, 65, 51,
+    57, 49, 128, 65, 51, 57, 48, 128, 65, 51, 56, 57, 128, 65, 51, 56, 56,
+    128, 65, 51, 56, 55, 128, 65, 51, 56, 54, 65, 128, 65, 51, 56, 54, 128,
+    65, 51, 56, 53, 128, 65, 51, 56, 52, 128, 65, 51, 56, 51, 65, 128, 65,
+    51, 56, 179, 65, 51, 56, 50, 128, 65, 51, 56, 49, 65, 128, 65, 51, 56,
+    49, 128, 65, 51, 56, 48, 128, 65, 51, 55, 57, 128, 65, 51, 55, 56, 128,
+    65, 51, 55, 55, 128, 65, 51, 55, 54, 128, 65, 51, 55, 53, 128, 65, 51,
+    55, 52, 128, 65, 51, 55, 51, 128, 65, 51, 55, 50, 128, 65, 51, 55, 49,
+    65, 128, 65, 51, 55, 49, 128, 65, 51, 55, 48, 128, 65, 51, 54, 57, 128,
+    65, 51, 54, 56, 65, 128, 65, 51, 54, 56, 128, 65, 51, 54, 55, 128, 65,
+    51, 54, 54, 128, 65, 51, 54, 53, 128, 65, 51, 54, 52, 65, 128, 65, 51,
+    54, 52, 128, 65, 51, 54, 51, 128, 65, 51, 54, 50, 128, 65, 51, 54, 49,
+    128, 65, 51, 54, 48, 128, 65, 51, 53, 57, 65, 128, 65, 51, 53, 57, 128,
+    65, 51, 53, 56, 128, 65, 51, 53, 55, 128, 65, 51, 53, 54, 128, 65, 51,
+    53, 53, 128, 65, 51, 53, 52, 128, 65, 51, 53, 51, 128, 65, 51, 53, 50,
+    128, 65, 51, 53, 49, 128, 65, 51, 53, 48, 128, 65, 51, 52, 57, 128, 65,
+    51, 52, 56, 128, 65, 51, 52, 55, 128, 65, 51, 52, 54, 128, 65, 51, 52,
+    53, 128, 65, 51, 52, 52, 128, 65, 51, 52, 51, 128, 65, 51, 52, 50, 128,
+    65, 51, 52, 49, 128, 65, 51, 52, 48, 128, 65, 51, 51, 57, 128, 65, 51,
+    51, 56, 128, 65, 51, 51, 55, 128, 65, 51, 51, 54, 67, 128, 65, 51, 51,
+    54, 66, 128, 65, 51, 51, 54, 65, 128, 65, 51, 51, 54, 128, 65, 51, 51,
+    53, 128, 65, 51, 51, 52, 128, 65, 51, 51, 51, 128, 65, 51, 51, 50, 67,
+    128, 65, 51, 51, 50, 66, 128, 65, 51, 51, 50, 65, 128, 65, 51, 51, 50,
+    128, 65, 51, 51, 49, 128, 65, 51, 51, 48, 128, 65, 51, 50, 57, 65, 128,
+    65, 51, 50, 57, 128, 65, 51, 50, 56, 128, 65, 51, 50, 55, 128, 65, 51,
+    50, 54, 128, 65, 51, 50, 53, 128, 65, 51, 50, 52, 128, 65, 51, 50, 51,
+    128, 65, 51, 50, 50, 128, 65, 51, 50, 49, 128, 65, 51, 50, 48, 128, 65,
+    51, 49, 57, 128, 65, 51, 49, 56, 128, 65, 51, 49, 55, 128, 65, 51, 49,
+    54, 128, 65, 51, 49, 53, 128, 65, 51, 49, 52, 128, 65, 51, 49, 51, 67,
+    128, 65, 51, 49, 51, 66, 128, 65, 51, 49, 51, 65, 128, 65, 51, 49, 51,
+    128, 65, 51, 49, 50, 128, 65, 51, 49, 49, 128, 65, 51, 49, 48, 128, 65,
+    51, 48, 57, 67, 128, 65, 51, 48, 57, 66, 128, 65, 51, 48, 57, 65, 128,
+    65, 51, 48, 57, 128, 65, 51, 48, 56, 128, 65, 51, 48, 55, 128, 65, 51,
+    48, 54, 128, 65, 51, 48, 53, 128, 65, 51, 48, 52, 128, 65, 51, 48, 51,
+    128, 65, 51, 48, 50, 128, 65, 51, 48, 49, 128, 65, 51, 48, 48, 128, 65,
+    50, 57, 57, 65, 128, 65, 50, 57, 57, 128, 65, 50, 57, 56, 128, 65, 50,
+    57, 55, 128, 65, 50, 57, 54, 128, 65, 50, 57, 53, 128, 65, 50, 57, 52,
+    65, 128, 65, 50, 57, 52, 128, 65, 50, 57, 51, 128, 65, 50, 57, 50, 128,
+    65, 50, 57, 49, 128, 65, 50, 57, 48, 128, 65, 50, 56, 57, 65, 128, 65,
+    50, 56, 57, 128, 65, 50, 56, 56, 128, 65, 50, 56, 55, 128, 65, 50, 56,
+    54, 128, 65, 50, 56, 53, 128, 65, 50, 56, 52, 128, 65, 50, 56, 51, 128,
+    65, 50, 56, 50, 128, 65, 50, 56, 49, 128, 65, 50, 56, 48, 128, 65, 50,
+    55, 57, 128, 65, 50, 55, 56, 128, 65, 50, 55, 55, 128, 65, 50, 55, 54,
+    128, 65, 50, 55, 53, 128, 65, 50, 55, 52, 128, 65, 50, 55, 51, 128, 65,
+    50, 55, 50, 128, 65, 50, 55, 49, 128, 65, 50, 55, 48, 128, 65, 50, 54,
+    57, 128, 65, 50, 54, 56, 128, 65, 50, 54, 55, 65, 128, 65, 50, 54, 55,
+    128, 65, 50, 54, 54, 128, 65, 50, 54, 53, 128, 65, 50, 54, 52, 128, 65,
+    50, 54, 51, 128, 65, 50, 54, 50, 128, 65, 50, 54, 49, 128, 65, 50, 54,
+    48, 128, 65, 50, 53, 57, 128, 65, 50, 53, 56, 128, 65, 50, 53, 55, 128,
+    65, 50, 53, 54, 128, 65, 50, 53, 53, 128, 65, 50, 53, 52, 128, 65, 50,
+    53, 51, 128, 65, 50, 53, 50, 128, 65, 50, 53, 49, 128, 65, 50, 53, 48,
+    128, 65, 50, 52, 57, 128, 65, 50, 52, 56, 128, 65, 50, 52, 55, 128, 65,
+    50, 52, 54, 128, 65, 50, 52, 53, 128, 65, 50, 52, 52, 128, 65, 50, 52,
+    51, 128, 65, 50, 52, 50, 128, 65, 50, 52, 49, 128, 65, 50, 52, 48, 128,
+    65, 50, 51, 57, 128, 65, 50, 51, 56, 128, 65, 50, 51, 55, 128, 65, 50,
+    51, 54, 128, 65, 50, 51, 53, 128, 65, 50, 51, 52, 128, 65, 50, 51, 51,
+    128, 65, 50, 51, 50, 128, 65, 50, 51, 49, 128, 65, 50, 51, 48, 128, 65,
+    50, 50, 57, 128, 65, 50, 50, 56, 128, 65, 50, 50, 55, 65, 128, 65, 50,
+    50, 55, 128, 65, 50, 50, 54, 128, 65, 50, 50, 53, 128, 65, 50, 50, 52,
+    128, 65, 50, 50, 51, 128, 65, 50, 50, 50, 128, 65, 50, 50, 49, 128, 65,
+    50, 50, 48, 128, 65, 50, 49, 57, 128, 65, 50, 49, 56, 128, 65, 50, 49,
+    55, 128, 65, 50, 49, 54, 65, 128, 65, 50, 49, 54, 128, 65, 50, 49, 53,
+    65, 128, 65, 50, 49, 53, 128, 65, 50, 49, 52, 128, 65, 50, 49, 51, 128,
+    65, 50, 49, 50, 128, 65, 50, 49, 49, 128, 65, 50, 49, 48, 128, 65, 50,
+    48, 57, 65, 128, 65, 50, 48, 57, 128, 65, 50, 48, 56, 128, 65, 50, 48,
+    55, 65, 128, 65, 50, 48, 55, 128, 65, 50, 48, 54, 128, 65, 50, 48, 53,
+    128, 65, 50, 48, 52, 128, 65, 50, 48, 51, 128, 65, 50, 48, 50, 66, 128,
+    65, 50, 48, 50, 65, 128, 65, 50, 48, 50, 128, 65, 50, 48, 49, 128, 65,
+    50, 48, 48, 128, 65, 49, 57, 57, 128, 65, 49, 57, 56, 128, 65, 49, 57,
+    55, 128, 65, 49, 57, 54, 128, 65, 49, 57, 53, 128, 65, 49, 57, 52, 128,
+    65, 49, 57, 51, 128, 65, 49, 57, 50, 128, 65, 49, 57, 49, 128, 65, 49,
+    57, 48, 128, 65, 49, 56, 57, 128, 65, 49, 56, 56, 128, 65, 49, 56, 55,
+    128, 65, 49, 56, 54, 128, 65, 49, 56, 53, 128, 65, 49, 56, 52, 128, 65,
+    49, 56, 51, 128, 65, 49, 56, 50, 128, 65, 49, 56, 49, 128, 65, 49, 56,
+    48, 128, 65, 49, 55, 57, 128, 65, 49, 55, 56, 128, 65, 49, 55, 55, 128,
+    65, 49, 55, 54, 128, 65, 49, 55, 53, 128, 65, 49, 55, 52, 128, 65, 49,
+    55, 51, 128, 65, 49, 55, 50, 128, 65, 49, 55, 49, 128, 65, 49, 55, 48,
+    128, 65, 49, 54, 57, 128, 65, 49, 54, 56, 128, 65, 49, 54, 55, 128, 65,
+    49, 54, 54, 128, 65, 49, 54, 53, 128, 65, 49, 54, 52, 128, 65, 49, 54,
+    51, 128, 65, 49, 54, 50, 128, 65, 49, 54, 49, 128, 65, 49, 54, 48, 128,
+    65, 49, 53, 57, 128, 65, 49, 53, 56, 128, 65, 49, 53, 55, 128, 65, 49,
+    53, 54, 128, 65, 49, 53, 53, 128, 65, 49, 53, 52, 128, 65, 49, 53, 51,
+    128, 65, 49, 53, 50, 128, 65, 49, 53, 49, 128, 65, 49, 53, 48, 128, 65,
+    49, 52, 57, 128, 65, 49, 52, 56, 128, 65, 49, 52, 55, 128, 65, 49, 52,
+    54, 128, 65, 49, 52, 53, 128, 65, 49, 52, 52, 128, 65, 49, 52, 51, 128,
+    65, 49, 52, 50, 128, 65, 49, 52, 49, 128, 65, 49, 52, 48, 128, 65, 49,
+    51, 57, 128, 65, 49, 51, 56, 128, 65, 49, 51, 55, 128, 65, 49, 51, 54,
+    128, 65, 49, 51, 53, 65, 128, 65, 49, 51, 53, 128, 65, 49, 51, 52, 128,
+    65, 49, 51, 51, 128, 65, 49, 51, 50, 128, 65, 49, 51, 49, 67, 128, 65,
+    49, 51, 49, 128, 65, 49, 51, 48, 128, 65, 49, 50, 57, 128, 65, 49, 50,
+    56, 128, 65, 49, 50, 55, 128, 65, 49, 50, 54, 128, 65, 49, 50, 53, 65,
+    128, 65, 49, 50, 53, 128, 65, 49, 50, 52, 128, 65, 49, 50, 51, 128, 65,
+    49, 50, 50, 128, 65, 49, 50, 49, 128, 65, 49, 50, 48, 66, 128, 65, 49,
+    50, 48, 128, 65, 49, 49, 57, 128, 65, 49, 49, 56, 128, 65, 49, 49, 55,
+    128, 65, 49, 49, 54, 128, 65, 49, 49, 53, 65, 128, 65, 49, 49, 53, 128,
+    65, 49, 49, 52, 128, 65, 49, 49, 51, 128, 65, 49, 49, 50, 128, 65, 49,
+    49, 49, 128, 65, 49, 49, 48, 66, 128, 65, 49, 49, 48, 65, 128, 65, 49,
+    49, 48, 128, 65, 49, 48, 57, 128, 65, 49, 48, 56, 128, 65, 49, 48, 55,
+    67, 128, 65, 49, 48, 55, 66, 128, 65, 49, 48, 55, 65, 128, 65, 49, 48,
+    55, 128, 65, 49, 48, 54, 128, 65, 49, 48, 53, 66, 128, 65, 49, 48, 53,
+    65, 128, 65, 49, 48, 53, 128, 65, 49, 48, 52, 67, 128, 65, 49, 48, 52,
+    66, 128, 65, 49, 48, 52, 65, 128, 65, 49, 48, 52, 128, 65, 49, 48, 51,
+    128, 65, 49, 48, 50, 65, 128, 65, 49, 48, 50, 128, 65, 49, 48, 49, 65,
+    128, 65, 49, 48, 49, 128, 65, 49, 48, 48, 65, 128, 65, 49, 48, 48, 45,
+    49, 48, 50, 128, 65, 49, 48, 48, 128, 65, 48, 57, 57, 128, 65, 48, 57,
+    56, 65, 128, 65, 48, 57, 56, 128, 65, 48, 57, 55, 65, 128, 65, 48, 57,
+    55, 128, 65, 48, 57, 54, 128, 65, 48, 57, 53, 128, 65, 48, 57, 52, 128,
+    65, 48, 57, 51, 128, 65, 48, 57, 50, 128, 65, 48, 57, 49, 128, 65, 48,
+    57, 48, 128, 65, 48, 56, 57, 128, 65, 48, 56, 56, 128, 65, 48, 56, 55,
+    128, 65, 48, 56, 54, 128, 65, 48, 56, 53, 128, 65, 48, 56, 52, 128, 65,
+    48, 56, 51, 128, 65, 48, 56, 50, 128, 65, 48, 56, 49, 128, 65, 48, 56,
+    48, 128, 65, 48, 55, 57, 128, 65, 48, 55, 56, 128, 65, 48, 55, 55, 128,
+    65, 48, 55, 54, 128, 65, 48, 55, 53, 128, 65, 48, 55, 52, 128, 65, 48,
+    55, 51, 128, 65, 48, 55, 50, 128, 65, 48, 55, 49, 128, 65, 48, 55, 48,
+    128, 65, 48, 54, 57, 128, 65, 48, 54, 56, 128, 65, 48, 54, 55, 128, 65,
+    48, 54, 54, 67, 128, 65, 48, 54, 54, 66, 128, 65, 48, 54, 54, 65, 128,
+    65, 48, 54, 54, 128, 65, 48, 54, 53, 128, 65, 48, 54, 52, 128, 65, 48,
+    54, 51, 128, 65, 48, 54, 50, 128, 65, 48, 54, 49, 128, 65, 48, 54, 48,
+    128, 65, 48, 53, 57, 128, 65, 48, 53, 56, 128, 65, 48, 53, 55, 128, 65,
+    48, 53, 54, 128, 65, 48, 53, 53, 128, 65, 48, 53, 52, 128, 65, 48, 53,
+    51, 128, 65, 48, 53, 50, 128, 65, 48, 53, 49, 128, 65, 48, 53, 48, 128,
+    65, 48, 52, 57, 128, 65, 48, 52, 56, 128, 65, 48, 52, 55, 128, 65, 48,
+    52, 54, 66, 128, 65, 48, 52, 54, 65, 128, 65, 48, 52, 54, 128, 65, 48,
+    52, 53, 65, 128, 65, 48, 52, 53, 128, 65, 48, 52, 52, 128, 65, 48, 52,
+    51, 65, 128, 65, 48, 52, 51, 128, 65, 48, 52, 50, 65, 128, 65, 48, 52,
+    50, 128, 65, 48, 52, 49, 65, 128, 65, 48, 52, 49, 128, 65, 48, 52, 48,
+    65, 128, 65, 48, 52, 48, 128, 65, 48, 51, 57, 65, 128, 65, 48, 51, 57,
+    128, 65, 48, 51, 56, 128, 65, 48, 51, 55, 128, 65, 48, 51, 54, 128, 65,
+    48, 51, 53, 128, 65, 48, 51, 52, 128, 65, 48, 51, 51, 128, 65, 48, 51,
+    50, 65, 128, 65, 48, 50, 56, 66, 128, 65, 48, 50, 54, 65, 128, 65, 48,
+    49, 55, 65, 128, 65, 48, 49, 52, 65, 128, 65, 48, 49, 48, 65, 128, 65,
+    48, 48, 54, 66, 128, 65, 48, 48, 54, 65, 128, 65, 48, 48, 53, 65, 128,
+    65, 45, 87, 79, 128, 65, 45, 69, 85, 128, 45, 85, 205, 45, 80, 72, 82,
+    85, 128, 45, 75, 72, 89, 85, 196, 45, 75, 72, 89, 73, 76, 128, 45, 68,
+    90, 85, 196, 45, 67, 72, 65, 210, 45, 67, 72, 65, 76, 128,
 };
 
 static const unsigned int lexicon_offset[] = {
-    0, 0, 6, 10, 14, 19, 27, 34, 44, 49, 55, 64, 66, 69, 81, 89, 102, 108,
-    113, 118, 124, 129, 137, 146, 157, 162, 167, 170, 174, 183, 189, 195,
-    201, 206, 214, 221, 229, 171, 232, 241, 242, 250, 256, 261, 266, 273,
-    283, 290, 296, 301, 304, 308, 314, 320, 325, 328, 333, 343, 349, 354,
-    359, 365, 370, 379, 381, 388, 395, 397, 406, 347, 408, 416, 424, 426,
-    434, 435, 442, 445, 447, 452, 458, 465, 470, 477, 485, 492, 497, 502,
-    506, 512, 517, 522, 532, 539, 542, 550, 558, 567, 570, 574, 577, 581,
-    591, 595, 602, 609, 616, 623, 632, 641, 645, 652, 655, 661, 665, 673,
-    678, 687, 265, 691, 704, 708, 713, 718, 724, 726, 736, 739, 743, 748,
-    756, 760, 769, 774, 780, 786, 790, 795, 803, 812, 821, 829, 837, 840,
-    793, 851, 857, 862, 870, 877, 880, 890, 894, 898, 905, 909, 912, 919,
-    923, 614, 929, 938, 941, 946, 952, 955, 959, 962, 966, 969, 972, 981,
-    987, 990, 995, 1004, 1009, 576, 1012, 1018, 1026, 1031, 1035, 1040, 1043,
-    1046, 1052, 1058, 1065, 1073, 1076, 1085, 1093, 1097, 1104, 1110, 1115,
-    1120, 1126, 1131, 1136, 1141, 1145, 1150, 1156, 1161, 1166, 1170, 1176,
-    1181, 1186, 1191, 1195, 1200, 1205, 1210, 1216, 1222, 1228, 1233, 1237,
-    1242, 1247, 1252, 1256, 1261, 1266, 1271, 1276, 1111, 1116, 1121, 1127,
-    1132, 1280, 1142, 1286, 1291, 1296, 1303, 1307, 1310, 1319, 1146, 1323,
-    1151, 1157, 1162, 1327, 1332, 1337, 1341, 1345, 1351, 1355, 1167, 1358,
-    1360, 1177, 1365, 1369, 1182, 1375, 1187, 1379, 1383, 1390, 1192, 1394,
-    1399, 1403, 1406, 1410, 1196, 1201, 1415, 1421, 1206, 1433, 1439, 1445,
-    1451, 1211, 1223, 1229, 1455, 1459, 1463, 1466, 1234, 1470, 1472, 1477,
-    1482, 1488, 1493, 1498, 1502, 1507, 1512, 1517, 1522, 1528, 1533, 1538,
-    1544, 1550, 1555, 1559, 1564, 1569, 1574, 1579, 1584, 1588, 1596, 1601,
-    1605, 1610, 1615, 1620, 1625, 1629, 1632, 1639, 1644, 1649, 1654, 1659,
-    1665, 1670, 1674, 1238, 1677, 1682, 1687, 1692, 1243, 1696, 1700, 1707,
-    1248, 1714, 1719, 1253, 1723, 1725, 1730, 1741, 1747, 1257, 1752, 1761,
-    1262, 1766, 1772, 1777, 1267, 1782, 1791, 1796, 1800, 1803, 1808, 1812,
-    1816, 1820, 1823, 1827, 1272, 1832, 1277, 1836, 1838, 1844, 1850, 1856,
-    1862, 1868, 1874, 1880, 1886, 1891, 1897, 1903, 1909, 1915, 1921, 1927,
-    1933, 1939, 1945, 1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, 1990,
-    1995, 2001, 2006, 2012, 2017, 2023, 2029, 2034, 2040, 2046, 2052, 2058,
-    2063, 2068, 2070, 2071, 2075, 2079, 2084, 2088, 2092, 2096, 2101, 2105,
-    2108, 2113, 2117, 2122, 2126, 2130, 2135, 2139, 2142, 2146, 2152, 2166,
-    2170, 2174, 2178, 2181, 2186, 2190, 2194, 2197, 2201, 2206, 2211, 2216,
-    2221, 2225, 2229, 2233, 2237, 2241, 2246, 2250, 2255, 2259, 2264, 2270,
-    2277, 2283, 2288, 2293, 2298, 2304, 2309, 2315, 2320, 2325, 2330, 2335,
-    2340, 2343, 2345, 1128, 2349, 2356, 2364, 2374, 2383, 2397, 2401, 2405,
-    2410, 2423, 2431, 2434, 2438, 2443, 2447, 2450, 2454, 2458, 2463, 1736,
-    2468, 2472, 2475, 2479, 2485, 2492, 2499, 2505, 2510, 2515, 2521, 2527,
-    2532, 2537, 2542, 2547, 2552, 2557, 2482, 2562, 1727, 2564, 2570, 2574,
-    2579, 2583, 2587, 1635, 1749, 2592, 2596, 2600, 2603, 2608, 2613, 2618,
-    2623, 2627, 2634, 2639, 2642, 2646, 2653, 2659, 2663, 2667, 2671, 2676,
-    2683, 2688, 2693, 2700, 2706, 2712, 2718, 2739, 2753, 2770, 2785, 2801,
-    2818, 2833, 2842, 2847, 2851, 2856, 2861, 2865, 2877, 2884, 2890, 2273,
-    2896, 2903, 2909, 2913, 2916, 2923, 2929, 2934, 2938, 2943, 2947, 2951,
-    2093, 2955, 2960, 2965, 2969, 2974, 2982, 2986, 2993, 2998, 3002, 3006,
-    3010, 3015, 3020, 3025, 3029, 3034, 3039, 3043, 3048, 3053, 3057, 3060,
-    3064, 3068, 3076, 3081, 3085, 3089, 3095, 3104, 3108, 3112, 3118, 3123,
-    3130, 3134, 3144, 3148, 3152, 3157, 3161, 3166, 3172, 3177, 3181, 3185,
-    3189, 2495, 3197, 3202, 3208, 3213, 3217, 3222, 3227, 3231, 3237, 3242,
-    2097, 3248, 3254, 3259, 3264, 3269, 3274, 3279, 3284, 3289, 3294, 3299,
-    3304, 3309, 3314, 3319, 3324, 3330, 3335, 1143, 101, 3341, 3345, 3349,
-    3353, 3358, 3362, 3366, 3372, 3377, 3381, 3385, 3390, 3395, 3399, 3404,
-    3408, 3411, 3415, 3420, 3424, 3429, 3433, 3436, 3438, 3442, 3446, 3451,
-    3455, 3458, 3471, 3475, 3479, 3483, 3488, 3492, 3496, 3499, 3503, 3507,
-    3512, 3516, 3521, 3526, 3531, 3535, 3542, 3547, 3550, 3553, 3558, 3564,
-    3568, 3572, 3575, 3580, 3584, 3589, 3593, 3597, 3600, 3606, 3611, 3616,
-    3622, 3627, 3632, 3638, 3644, 3649, 3654, 3659, 3664, 964, 654, 3667,
-    3670, 3675, 3679, 3683, 3687, 3691, 3694, 3698, 3703, 3708, 3712, 3717,
-    3721, 3726, 3730, 3734, 3738, 3744, 3750, 3753, 3756, 150, 3762, 3767,
-    3776, 3784, 3793, 3803, 3810, 3816, 3823, 3828, 3832, 3836, 3844, 3851,
-    3856, 3863, 3868, 3872, 3882, 3886, 3890, 3895, 3900, 3910, 2109, 3915,
-    3919, 3922, 3928, 3933, 3939, 3945, 3950, 3957, 3961, 3965, 3969, 3974,
-    3979, 3984, 3989, 3994, 3999, 592, 575, 1304, 4004, 4011, 4018, 4024,
-    4029, 4036, 4043, 4048, 4054, 4060, 4065, 4069, 4075, 4082, 4087, 4091,
-    4095, 2118, 4101, 4109, 4115, 4123, 807, 4129, 4137, 4148, 4152, 4162,
-    4168, 4173, 4178, 4183, 4188, 2123, 4193, 4198, 4213, 4219, 4226, 4237,
-    4247, 4253, 4258, 4264, 4270, 4273, 4276, 4280, 4285, 4288, 4295, 4304,
-    4309, 4313, 4317, 4321, 4325, 4330, 4336, 4347, 4351, 3416, 4356, 4368,
-    4374, 4382, 4386, 4391, 4398, 4403, 4408, 4413, 1504, 4418, 4421, 4424,
-    4428, 4431, 4437, 4441, 4455, 4459, 4462, 4466, 4472, 4478, 4483, 4487,
-    4491, 4497, 4508, 4514, 4519, 4525, 4529, 4537, 4549, 4559, 4565, 4570,
-    4579, 4587, 4594, 4600, 4606, 4610, 4616, 4625, 4634, 4640, 4644, 4653,
-    4658, 4662, 4667, 4671, 4679, 4685, 4689, 4696, 4701, 4705, 4711, 2131,
-    4717, 4722, 4727, 4732, 4737, 1320, 4742, 4747, 4753, 4758, 4763, 4768,
-    4773, 4778, 4783, 4789, 4794, 4800, 4805, 4810, 4815, 4821, 4826, 4831,
-    4836, 4841, 4847, 4852, 4858, 4863, 4868, 4873, 4878, 4883, 4888, 4894,
-    4899, 4904, 312, 369, 4909, 4915, 4919, 4923, 4928, 4932, 4936, 4939,
-    4943, 4947, 4950, 4954, 4958, 4962, 4967, 4971, 4975, 4981, 4990, 4714,
-    4995, 4999, 5002, 5007, 5012, 5017, 5022, 5027, 5032, 5037, 5042, 5047,
-    5052, 5056, 5061, 5066, 5071, 5076, 5081, 5086, 5091, 5096, 5101, 5106,
-    5110, 5115, 5120, 5125, 5130, 5135, 5140, 5145, 5150, 5155, 5160, 5164,
-    5169, 5174, 5179, 5184, 5189, 5194, 5199, 5204, 5209, 5214, 5218, 5223,
-    5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, 5268, 5272, 5277, 5282,
-    5287, 5292, 5297, 5302, 5307, 5312, 5317, 5322, 5326, 5331, 5336, 5341,
-    5346, 5351, 5356, 5361, 5366, 5371, 5376, 5380, 5385, 5390, 5395, 5400,
-    5406, 5412, 5418, 5424, 5430, 5436, 5442, 5447, 5453, 5459, 5465, 5471,
-    5477, 5483, 5489, 5495, 5501, 5507, 5512, 5518, 5524, 5530, 5536, 5542,
-    5548, 5554, 5560, 5566, 5572, 5577, 5583, 5589, 5595, 5601, 5607, 5613,
-    5619, 5625, 5631, 5637, 5642, 5648, 5654, 5660, 5666, 5672, 5678, 5684,
-    5690, 5696, 5702, 5707, 5713, 5719, 5725, 5731, 5737, 5743, 5749, 5755,
-    5761, 5767, 5772, 5776, 5782, 5788, 5794, 5800, 5806, 5812, 5818, 5824,
-    5830, 5836, 5841, 5847, 5853, 5859, 5865, 5871, 5877, 5883, 5889, 5895,
-    5901, 5906, 5912, 5918, 5924, 5930, 5936, 5942, 5948, 5954, 5960, 5966,
-    5971, 5977, 5983, 5989, 5995, 6001, 6007, 6013, 6019, 6025, 6031, 6036,
-    6042, 6048, 6054, 6060, 6066, 6072, 6078, 6084, 6090, 6096, 6101, 6107,
-    6113, 6119, 6125, 6131, 6137, 6143, 6149, 6155, 6161, 6166, 6172, 6178,
-    6184, 6190, 6196, 6202, 6208, 6214, 6220, 6226, 6231, 6237, 6243, 6249,
-    6255, 6261, 6267, 6273, 6279, 6285, 6291, 6296, 6302, 6308, 6314, 6320,
-    6326, 6332, 6338, 6344, 6350, 6356, 6361, 6367, 6373, 6379, 6385, 6391,
-    6397, 6403, 6409, 6415, 6421, 6426, 6430, 6433, 6440, 6444, 6457, 6461,
-    6465, 6469, 6472, 6476, 6481, 6485, 6494, 6498, 6504, 6511, 6522, 6530,
-    6537, 6541, 6549, 6558, 6564, 6568, 6580, 6585, 6588, 6593, 6597, 6607,
-    6615, 6623, 6629, 6633, 6643, 6653, 6661, 6668, 6675, 6681, 6687, 6694,
-    6698, 6705, 6715, 6725, 6733, 6740, 6745, 6749, 6753, 6761, 6765, 6775,
-    6780, 6787, 6795, 6800, 6804, 6809, 6813, 6820, 6825, 6839, 6844, 6849,
-    6856, 3680, 6865, 6869, 6873, 6878, 6882, 6886, 6889, 6894, 6899, 6908,
-    6914, 6920, 6925, 6931, 6935, 6946, 6956, 6971, 6986, 7001, 7016, 7031,
-    7046, 7061, 7076, 7091, 7106, 7121, 7136, 7151, 7166, 7181, 7196, 7211,
-    7226, 7241, 7256, 7271, 7286, 7301, 7316, 7331, 7346, 7361, 7376, 7391,
-    7406, 7421, 7436, 7451, 7466, 7481, 7496, 7511, 7526, 7541, 7556, 7571,
-    7586, 7601, 7616, 7631, 7646, 7661, 7676, 7691, 7700, 7709, 7714, 7720,
-    7730, 7734, 7738, 7743, 7748, 7753, 7761, 7765, 7768, 7772, 3139, 7775,
-    7780, 346, 520, 7786, 7794, 7798, 7802, 7805, 7809, 7815, 7819, 7827,
-    7833, 7838, 7845, 7853, 7860, 7866, 7871, 7878, 7884, 7893, 7901, 7905,
-    7910, 7918, 7930, 7941, 7948, 7959, 7963, 7967, 7971, 7974, 7980, 3443,
-    7984, 7990, 7995, 8000, 8005, 8011, 8016, 8021, 8026, 8031, 8037, 8042,
-    8047, 8053, 8058, 8064, 8069, 8075, 8080, 8086, 8091, 8096, 8101, 8106,
-    8111, 8117, 8122, 8127, 8132, 8138, 8144, 8150, 8156, 8162, 8168, 8174,
-    8180, 8186, 8192, 8198, 8204, 8209, 8214, 8219, 8224, 8229, 8234, 8239,
-    8244, 8250, 8256, 8261, 8267, 8273, 8279, 8284, 8289, 8294, 8299, 8305,
-    8311, 8316, 8321, 8326, 8331, 8336, 8342, 8347, 8353, 8359, 8365, 8371,
-    8377, 8383, 8389, 8395, 8401, 2140, 7804, 8406, 8410, 8418, 8422, 8425,
-    8432, 8435, 8439, 8447, 8452, 8457, 8448, 8462, 2167, 8466, 8472, 8478,
-    8483, 8488, 8495, 8503, 8508, 8512, 8515, 8519, 8525, 8531, 8535, 1679,
-    572, 8538, 8542, 8547, 8553, 8558, 8562, 8565, 8569, 8575, 8580, 8584,
-    8591, 8595, 8599, 8603, 792, 1063, 8606, 8614, 8621, 8628, 8634, 8641,
-    8649, 8656, 8667, 8674, 8680, 8685, 8697, 1163, 1328, 1333, 8708, 8712,
-    1338, 8716, 8720, 8729, 8737, 8741, 8750, 8756, 8762, 8767, 8771, 8777,
-    8782, 8790, 8797, 2838, 8804, 8810, 8814, 8823, 8832, 8841, 8850, 8856,
-    8861, 8866, 8877, 8886, 8898, 8903, 8911, 2226, 8915, 8917, 8922, 8926,
-    8935, 8943, 1342, 165, 3722, 3727, 8949, 8953, 8962, 8968, 8973, 8976,
-    8985, 2238, 8991, 2830, 8995, 9003, 9007, 9011, 9015, 9019, 2247, 9023,
-    9028, 9035, 9041, 9047, 9050, 9052, 9055, 9063, 9071, 9079, 9082, 9087,
-    2260, 9092, 8459, 9095, 9097, 9102, 9107, 9112, 9117, 9122, 9127, 9132,
-    9137, 9142, 9147, 9153, 9158, 9163, 9168, 9174, 9179, 9184, 9189, 9194,
-    9199, 9204, 9210, 9215, 9220, 9225, 9230, 9235, 9240, 9245, 9250, 9255,
-    9260, 9265, 9270, 9275, 9280, 9285, 9290, 9295, 9301, 9307, 9312, 9317,
-    9322, 9327, 9332, 2271, 2278, 2284, 9337, 9345, 9351, 9359, 2310, 2316,
-    9367, 2321, 2326, 2331, 2336, 9371, 9375, 9380, 9384, 9388, 9392, 9397,
-    9401, 9406, 9410, 9413, 9416, 9422, 9429, 9435, 9442, 9448, 9455, 9461,
-    9468, 9474, 9480, 9489, 9495, 9499, 9503, 9507, 9511, 9516, 9520, 9525,
-    9529, 9535, 9539, 9544, 9551, 9562, 9570, 9580, 9586, 9596, 9605, 9612,
-    9617, 9621, 9632, 9642, 9655, 9666, 9679, 9690, 9702, 9714, 9726, 9737,
-    9750, 9763, 9770, 9776, 9787, 9797, 9811, 9818, 9824, 9833, 9841, 9845,
-    9850, 9854, 9861, 9869, 9876, 9880, 9886, 9890, 9896, 9906, 9910, 9915,
-    9920, 9927, 9933, 8636, 9943, 9947, 9954, 9960, 9967, 9974, 1062, 9978,
-    9984, 9988, 9993, 9998, 10003, 10007, 10013, 10021, 10028, 10034, 10038,
-    10041, 10047, 10057, 10061, 10067, 10072, 10076, 10081, 10085, 10091,
-    10097, 10102, 10108, 10113, 10118, 10123, 2163, 10128, 10130, 10135,
-    10143, 10152, 10156, 10162, 10167, 10172, 10177, 10182, 10188, 10193,
-    10198, 4493, 10203, 10208, 10212, 10218, 10223, 10229, 10234, 10239,
-    10245, 10250, 10157, 10256, 10260, 10267, 10273, 10278, 10282, 6835,
-    10287, 10296, 10301, 10306, 9031, 9038, 10311, 3012, 10315, 10320, 10325,
-    10330, 10168, 10334, 10339, 10344, 10173, 10348, 10178, 10353, 10360,
-    10367, 10373, 10380, 10386, 10392, 10397, 10404, 10409, 10414, 10419,
-    10425, 10183, 10189, 10431, 10437, 10442, 10447, 10455, 10194, 10460,
-    10463, 10465, 10473, 10479, 10485, 10494, 10502, 10510, 10518, 10526,
-    10534, 10542, 10550, 10558, 10567, 10576, 10584, 10593, 10602, 10611,
-    10620, 10629, 10638, 10647, 10656, 10665, 10674, 10682, 10687, 10691,
-    10697, 10705, 10712, 10727, 10744, 10763, 10772, 10780, 10795, 10806,
-    10814, 10824, 10834, 10842, 10848, 10860, 10869, 10877, 10884, 10891,
-    10898, 10904, 10909, 10919, 10927, 10937, 10944, 10954, 10964, 10974,
-    10982, 10989, 10998, 11008, 11022, 11037, 11046, 11054, 11059, 11063,
-    11072, 11078, 11083, 11093, 11103, 11113, 11118, 11122, 11132, 11141,
-    11146, 11162, 11179, 11189, 11200, 11213, 11224, 11232, 11245, 11257,
-    11265, 11270, 11274, 11280, 11285, 11293, 11301, 11308, 11319, 11324,
-    11332, 11342, 11348, 11352, 11355, 11359, 11365, 11372, 11376, 11384,
-    11393, 11401, 11408, 11413, 11418, 11422, 11426, 11434, 11449, 11465,
-    11471, 11479, 11488, 11496, 11502, 11506, 11513, 11524, 11528, 11531,
-    11537, 11542, 10199, 11550, 11556, 11563, 11569, 11574, 11581, 11588,
-    11595, 11602, 11609, 11616, 11623, 11630, 11637, 11644, 11651, 11658,
-    11665, 11672, 11679, 11684, 10740, 11689, 11695, 11702, 11709, 11714,
-    11721, 11730, 11734, 11746, 11750, 11756, 11761, 11766, 11771, 11776,
-    11781, 9069, 11786, 11789, 11793, 11797, 11801, 11805, 11811, 11817,
-    11822, 11828, 11833, 11838, 11844, 11849, 11854, 9923, 11859, 11863,
-    11867, 11871, 11876, 11881, 11886, 11894, 11900, 11905, 11909, 11913,
-    11920, 11925, 11933, 11940, 11945, 11949, 11952, 11958, 11965, 11969,
-    11972, 11977, 11981, 4532, 11987, 11996, 46, 12004, 12010, 12015, 12020,
-    12028, 12035, 12040, 6770, 12046, 12052, 12057, 12061, 12064, 12079,
-    12098, 12110, 12123, 12136, 12149, 12163, 12176, 12191, 12198, 10204,
-    12204, 12218, 12223, 12229, 12234, 12242, 12247, 8819, 12252, 12255,
-    12263, 12270, 12275, 12279, 12285, 12289, 12294, 12299, 12304, 12309,
-    12314, 12319, 3017, 10822, 12324, 12328, 12334, 12340, 12345, 12351,
-    12356, 10213, 12362, 12368, 12373, 12378, 12386, 12392, 12405, 12413,
-    12420, 12426, 10219, 12432, 12440, 12448, 12455, 12468, 12481, 12493,
-    12503, 12515, 12543, 12551, 12560, 12567, 12579, 12586, 12596, 12605,
-    12613, 12620, 12625, 12631, 10224, 12636, 12642, 12647, 12652, 10230,
-    12657, 12660, 12667, 12673, 12687, 12700, 12711, 9555, 12722, 12728,
-    12737, 12745, 12752, 12758, 12769, 12775, 12780, 12788, 4020, 12794,
-    12799, 12071, 12805, 12812, 12817, 10235, 12823, 12828, 12835, 12841,
-    12847, 12852, 12860, 12868, 12875, 12879, 12891, 12905, 12915, 12920,
-    12924, 12935, 12941, 12946, 12951, 10240, 12955, 10246, 12960, 12963,
-    12968, 12980, 12987, 12992, 12996, 13004, 13009, 13013, 13018, 13022,
-    13029, 13035, 10251, 10158, 13042, 3022, 12, 13049, 13054, 13058, 13062,
-    13068, 13076, 13086, 13091, 13096, 13103, 13110, 13114, 13125, 13135,
-    13144, 13153, 13165, 13170, 13174, 13182, 13196, 13200, 13203, 13207,
-    13215, 13222, 13230, 13234, 13245, 13253, 13257, 13264, 13269, 13273,
-    13279, 13284, 13290, 13295, 13300, 13304, 13310, 13315, 13326, 13330,
-    13333, 13339, 13346, 13351, 13357, 13363, 13370, 13381, 13391, 13401,
-    13410, 13417, 13426, 13430, 10261, 10268, 10274, 10279, 13436, 13442,
-    13448, 13453, 13459, 10283, 13465, 13468, 13475, 13480, 13485, 13500,
-    13516, 13531, 13539, 13545, 13550, 13555, 13560, 13565, 13570, 13575,
-    13580, 13585, 13590, 1055, 357, 13595, 13603, 13610, 13616, 13621, 13626,
-    10288, 13628, 13632, 13637, 13641, 13651, 13656, 13660, 13663, 13672,
-    13676, 13679, 13686, 10297, 13691, 13694, 13702, 13709, 13717, 13721,
-    13727, 13731, 13738, 13747, 13754, 13750, 13761, 13765, 13771, 13775,
-    13779, 13783, 13789, 13799, 13807, 13814, 13818, 13826, 13831, 13835,
-    13842, 13847, 13851, 13856, 13861, 13865, 13872, 13878, 13886, 13892,
-    13897, 13907, 13914, 13919, 13924, 13928, 13932, 13940, 4362, 13948,
-    13953, 10302, 13957, 13964, 13968, 13971, 13979, 13986, 13990, 6625,
-    13994, 13999, 14004, 14008, 14019, 14029, 14034, 14040, 14045, 14049,
-    14052, 14060, 14065, 14070, 14077, 14082, 10307, 14087, 14091, 14098,
-    14103, 14108, 14113, 6793, 14118, 14123, 14128, 14133, 14139, 14144,
-    14150, 14155, 14160, 14165, 14170, 14175, 14180, 14185, 14190, 14195,
-    14200, 14205, 14210, 14215, 14220, 14225, 14230, 14236, 14241, 14246,
-    14251, 14256, 14261, 14267, 14272, 14277, 14283, 14288, 14294, 14299,
-    14305, 14310, 14315, 14320, 14325, 14331, 14336, 14341, 14346, 14354,
-    985, 112, 14360, 14364, 14369, 14374, 14378, 14382, 14386, 14391, 14395,
-    14400, 14404, 14407, 14411, 14415, 14421, 14426, 14436, 14442, 14450,
-    14456, 14460, 14464, 14471, 14479, 14488, 14499, 14509, 14516, 14523,
-    14527, 14536, 14545, 14553, 14560, 14569, 14578, 14587, 14596, 14606,
-    14616, 14626, 14636, 14646, 14655, 14665, 14675, 14685, 14695, 14705,
-    14715, 14725, 14734, 14744, 14754, 14764, 14774, 14784, 14794, 14803,
-    14813, 14823, 14833, 14843, 14853, 14863, 14873, 14883, 14893, 14902,
-    14912, 14922, 14932, 14942, 14952, 14962, 14972, 14982, 14992, 15002,
-    15011, 15017, 1172, 15021, 15024, 15028, 15033, 15040, 15046, 15051,
-    15055, 15060, 15069, 15078, 15086, 15091, 15095, 15099, 15105, 15110,
-    15116, 10316, 15121, 15126, 15135, 15140, 10326, 15145, 15148, 15154,
-    15162, 10331, 15169, 15173, 15177, 15182, 15186, 15196, 15202, 15208,
-    15213, 15222, 15230, 15237, 15244, 15249, 15256, 15261, 15265, 15268,
-    15279, 15289, 15302, 15311, 15319, 15330, 15342, 15352, 15362, 15367,
-    15371, 15376, 15381, 15385, 15391, 15399, 15406, 15417, 15422, 15432,
-    15441, 15445, 15448, 15455, 15465, 15474, 15481, 15485, 15492, 15498,
-    15503, 15508, 15512, 15064, 15521, 15525, 15531, 15535, 15540, 15544,
-    15551, 15558, 15562, 15571, 15579, 15587, 15594, 15602, 15614, 15625,
-    15635, 15642, 15648, 15657, 15668, 15677, 15689, 15701, 15713, 15723,
-    15732, 15742, 15751, 15759, 15766, 15775, 15783, 15787, 15792, 15798,
-    15804, 15809, 15814, 15818, 15823, 15828, 15833, 15838, 15843, 15848,
-    15853, 8480, 15858, 15860, 15864, 15869, 15875, 15882, 15888, 15894,
-    15903, 15907, 15913, 15921, 15928, 15937, 15946, 15955, 15964, 15973,
-    15982, 15991, 16000, 16010, 16020, 16029, 16035, 16042, 16049, 16055,
-    16069, 16075, 16082, 16090, 16099, 16107, 16113, 16122, 16131, 16142,
-    16148, 16158, 16166, 16173, 16181, 16190, 16203, 16212, 16220, 16227,
-    16240, 16246, 16252, 16262, 16271, 16280, 16285, 16289, 16295, 16301,
-    16306, 16313, 16320, 9937, 16325, 16330, 16337, 16345, 16350, 16362,
-    16369, 16374, 16386, 14417, 16391, 16397, 16405, 16411, 16416, 16424,
-    16432, 16439, 16447, 16453, 16461, 16469, 16475, 16483, 16489, 16494,
-    16500, 16507, 16513, 16518, 16522, 16533, 16541, 16549, 16555, 16560,
-    16567, 16576, 16582, 16587, 16595, 16602, 16611, 16625, 4306, 16629,
-    16634, 16639, 16645, 16650, 16655, 16659, 16664, 16669, 16674, 8479,
-    16679, 16684, 16689, 16694, 16699, 16703, 16708, 16713, 16718, 16723,
-    16729, 16735, 13723, 16740, 16746, 16751, 16756, 16761, 10335, 16766,
-    16771, 16776, 16781, 16786, 16800, 16817, 16835, 16847, 16860, 16877,
-    16893, 16910, 16920, 16939, 16950, 16961, 16972, 2727, 16983, 16994,
-    17005, 17022, 17033, 17044, 17049, 10340, 17054, 17058, 2420, 17062,
-    17065, 17071, 17079, 17087, 17093, 17102, 17109, 17114, 17122, 17130,
-    17137, 17141, 17146, 17152, 17159, 17167, 17174, 17186, 17193, 17199,
-    17207, 17212, 17218, 17224, 17229, 13494, 17236, 17245, 17251, 17256,
-    17264, 17273, 17281, 17288, 17294, 17302, 17309, 17315, 17321, 17328,
-    17335, 17341, 17347, 17356, 17364, 17369, 17379, 17386, 17392, 17400,
-    17406, 17414, 17422, 17429, 17442, 17449, 17458, 17467, 17476, 17484,
-    17494, 17501, 17506, 3876, 17513, 17518, 1288, 17522, 17529, 16680,
-    17533, 17539, 17543, 17551, 17563, 17568, 17575, 17581, 17586, 17593,
-    16685, 17597, 17601, 17605, 16690, 17609, 16695, 17613, 17620, 17625,
-    17629, 17636, 17640, 17648, 17655, 17660, 17668, 17672, 17679, 17696,
-    17705, 17714, 17718, 17721, 17727, 17735, 17741, 17746, 17750, 17755,
-    17760, 17765, 17770, 17775, 17780, 3954, 17785, 17787, 17795, 17802,
-    17812, 17824, 17829, 17833, 17839, 17844, 17852, 17856, 17862, 17867,
-    17873, 17876, 17883, 17891, 17898, 17904, 17909, 17915, 17920, 17927,
-    17933, 17938, 17945, 17950, 17954, 17960, 17966, 17970, 17977, 17983,
-    17988, 17994, 18002, 18010, 18017, 18023, 18028, 18034, 18040, 18048,
-    18053, 18058, 18066, 18072, 18078, 18083, 18090, 18095, 18099, 18105,
-    18111, 18116, 18123, 18128, 18134, 18137, 18143, 18154, 18160, 18163,
-    18167, 18171, 18185, 18198, 18210, 18216, 18221, 18228, 18234, 18240,
-    18251, 18263, 18275, 18285, 18294, 18302, 18309, 18320, 18330, 18340,
-    18348, 18351, 16709, 18356, 18361, 16714, 16865, 18369, 18382, 18397,
-    18408, 16882, 18426, 18439, 18452, 18463, 12086, 18474, 18487, 18506,
-    18517, 18528, 18539, 2748, 18552, 18556, 18564, 18575, 18586, 18594,
-    18609, 18624, 18635, 18642, 18648, 18656, 18660, 18666, 18669, 18682,
-    18694, 18704, 18712, 18719, 18727, 18737, 18742, 18749, 18754, 18761,
-    18772, 18782, 18788, 18793, 18798, 16719, 18802, 18808, 18814, 18819,
-    18824, 18829, 18833, 16724, 16730, 18837, 16736, 18842, 18850, 18855,
-    18859, 18866, 18874, 18881, 18890, 18897, 18901, 18905, 18910, 18915,
-    18920, 18925, 18930, 10179, 18935, 18937, 18942, 18947, 18953, 18958,
-    18963, 18968, 18973, 18977, 18983, 18989, 18994, 19000, 19005, 19010,
-    19014, 19020, 19025, 19029, 19034, 19039, 19051, 19056, 19062, 19067,
-    19072, 19078, 19084, 19089, 19094, 19099, 19106, 19112, 19123, 19130,
-    19139, 19144, 19148, 263, 19152, 19160, 19165, 19171, 19178, 19185,
-    19191, 19196, 19201, 19206, 19213, 19223, 19231, 19236, 19241, 19248,
-    19254, 19263, 19273, 19283, 19297, 19311, 19325, 19339, 19354, 19369,
-    19386, 19404, 19417, 19423, 19428, 19433, 19437, 19445, 19450, 19458,
-    19464, 19470, 19475, 19480, 19484, 19490, 19495, 19499, 19506, 19511,
-    19515, 19526, 19532, 19537, 19542, 19549, 19554, 19558, 3839, 19563,
-    19569, 19576, 16741, 19582, 19586, 19592, 19597, 19602, 19606, 19612,
-    19617, 19622, 19629, 19634, 15198, 19638, 19643, 19647, 19652, 19658,
-    19664, 19671, 19681, 19689, 19696, 19701, 19705, 19714, 19722, 19729,
-    19736, 19742, 19747, 19753, 19758, 19763, 19769, 19774, 19780, 19785,
-    19791, 19797, 19804, 19810, 19815, 19820, 10405, 19829, 19832, 19840,
-    19846, 19851, 19856, 19866, 19873, 19879, 19884, 19889, 19895, 19900,
-    19906, 19911, 19917, 19924, 19930, 19936, 19941, 19949, 19956, 19961,
-    19966, 19972, 19977, 19981, 19990, 20001, 20008, 20015, 20023, 20030,
-    20037, 20042, 20047, 20053, 20058, 20066, 20072, 20078, 20085, 20091,
-    20096, 20100, 20106, 20111, 20116, 20120, 20125, 1361, 8504, 3036, 20129,
-    20133, 20137, 20141, 20145, 20149, 20152, 20157, 20164, 20172, 16752,
-    20179, 20189, 20197, 20204, 20212, 20222, 20231, 20244, 20249, 20254,
-    20262, 20269, 15307, 15316, 20276, 20286, 20301, 20307, 20314, 20321,
-    20328, 20334, 20340, 20351, 20359, 20367, 20377, 20387, 20396, 16757,
-    20405, 20411, 20417, 20426, 20434, 20442, 20447, 20456, 20464, 20476,
-    20486, 20496, 20506, 20515, 20527, 20537, 20547, 20558, 20565, 20570,
-    20577, 20589, 20601, 20613, 20625, 20637, 20649, 20661, 20673, 20685,
-    20697, 20708, 20720, 20732, 20744, 20756, 20768, 20780, 20792, 20804,
-    20816, 20828, 20839, 20851, 20863, 20875, 20887, 20899, 20911, 20923,
-    20935, 20947, 20959, 20970, 20982, 20994, 21006, 21018, 21030, 21042,
-    21054, 21066, 21078, 21090, 21101, 21113, 21125, 21137, 21149, 21161,
-    21173, 21185, 21197, 21209, 21221, 21232, 21244, 21256, 21268, 21280,
-    21292, 21304, 21316, 21328, 21340, 21352, 21363, 21375, 21387, 21399,
-    21411, 21423, 21435, 21447, 21459, 21471, 21483, 21494, 21506, 21518,
-    21530, 21542, 21555, 21568, 21581, 21594, 21607, 21620, 21633, 21645,
-    21658, 21671, 21684, 21697, 21710, 21723, 21736, 21749, 21762, 21775,
-    21787, 21800, 21813, 21826, 21839, 21852, 21865, 21878, 21891, 21904,
-    21917, 21929, 21942, 21955, 21968, 21981, 21994, 22007, 22020, 22033,
-    22046, 22059, 22071, 22084, 22097, 22110, 22123, 22136, 22149, 22162,
-    22175, 22188, 22201, 22213, 22226, 22239, 22252, 22265, 22278, 22291,
-    22304, 22317, 22330, 22343, 22355, 22366, 22379, 22392, 22405, 22418,
-    22431, 22444, 22457, 22470, 22483, 22496, 22508, 22521, 22534, 22547,
-    22560, 22573, 22586, 22599, 22612, 22625, 22638, 22650, 22663, 22676,
-    22689, 22702, 22715, 22728, 22741, 22754, 22767, 22780, 22792, 22805,
-    22818, 22831, 22844, 22857, 22870, 22883, 22896, 22909, 22922, 22934,
-    22947, 22960, 22973, 22986, 22999, 23012, 23025, 23038, 23051, 23064,
-    23076, 23089, 23102, 23115, 23128, 23141, 23154, 23167, 23180, 23193,
-    23206, 23218, 23231, 23244, 23257, 23270, 23283, 23296, 23309, 23322,
-    23335, 23348, 23360, 23373, 23386, 23399, 23412, 23425, 23438, 23451,
-    23464, 23477, 23490, 23502, 23515, 23528, 23541, 23554, 23567, 23580,
-    23593, 23606, 23619, 23632, 23644, 23657, 23670, 23683, 23696, 23709,
-    23722, 23735, 23748, 23761, 23774, 23786, 23797, 23806, 23814, 23822,
-    23829, 23835, 23839, 23845, 23851, 23859, 23864, 23870, 23875, 23879,
-    23888, 10184, 23899, 23905, 23912, 23920, 23927, 12680, 12694, 23934,
-    23941, 23950, 23955, 23960, 23967, 23972, 23977, 8520, 8526, 8532, 23982,
-    23987, 23990, 23995, 24003, 24010, 24017, 24024, 24030, 24039, 24048,
-    24057, 24063, 24071, 24080, 24084, 24090, 24095, 24105, 24112, 24118,
-    24126, 24132, 24139, 24145, 24155, 24164, 24168, 24175, 24179, 24184,
-    24190, 24198, 24202, 24212, 16767, 24221, 24227, 24231, 24240, 24249,
-    24259, 24265, 16772, 24272, 24279, 24290, 24298, 24308, 24317, 24325,
-    9902, 24333, 24338, 24344, 24349, 24353, 24357, 24361, 10923, 24366,
-    24374, 24381, 24390, 24398, 24405, 24412, 24421, 24427, 976, 24434,
-    24440, 24444, 24450, 24457, 24463, 24471, 24477, 24484, 24490, 24496,
-    24505, 24509, 24517, 24526, 24533, 24538, 24542, 24553, 24558, 24563,
-    24569, 24574, 24587, 8747, 24591, 24597, 24603, 24609, 24614, 24622,
-    24626, 24633, 24642, 24647, 17045, 24655, 24659, 24671, 24676, 24680,
-    24683, 24689, 24695, 24701, 24706, 24711, 24715, 24718, 24729, 24734,
-    10456, 24741, 24746, 24751, 24756, 24761, 24766, 24771, 24776, 24781,
-    10461, 24786, 24791, 24796, 24801, 24806, 24811, 24816, 24821, 24826,
-    24831, 24836, 24841, 24847, 24852, 24857, 24862, 24867, 24872, 24877,
-    24882, 24887, 24892, 24898, 24904, 24909, 24914, 24919, 24924, 24929,
-    24934, 24939, 24944, 24949, 24955, 24960, 24965, 24970, 24976, 24982,
-    24987, 24992, 24997, 25002, 25007, 25012, 25017, 25022, 25028, 25033,
-    25038, 25043, 25048, 25054, 25059, 25064, 25068, 1284, 145, 25076, 25080,
-    25084, 25088, 25093, 25097, 15204, 2346, 25101, 25106, 25110, 25115,
-    25119, 25124, 25128, 25134, 25139, 25143, 25147, 25155, 25159, 25163,
-    25170, 25175, 25180, 25184, 25190, 25195, 25199, 25204, 25209, 25213,
-    25220, 25227, 25234, 25239, 25243, 25247, 25252, 25256, 25259, 25265,
-    25278, 25283, 25289, 25298, 25303, 10683, 25308, 25317, 25322, 25325,
-    25329, 25334, 25339, 25344, 25349, 25354, 2844, 2849, 25359, 25365,
-    25369, 25375, 3800, 25380, 25385, 25390, 25396, 25401, 16138, 25406,
-    25411, 25416, 25421, 25427, 25432, 25437, 25443, 25448, 25452, 25457,
-    25462, 25467, 25472, 25477, 25481, 25486, 25490, 25495, 25500, 25505,
-    25510, 25514, 25519, 25523, 25528, 25533, 25538, 25453, 3045, 25458,
-    25543, 25551, 25558, 11017, 25570, 25578, 25588, 25606, 25625, 25634,
-    25642, 25463, 25649, 25654, 25662, 25468, 25667, 25672, 25680, 25685,
-    25690, 25694, 25473, 25699, 25707, 25712, 25716, 25723, 25729, 25738,
-    25742, 25750, 25754, 25757, 25764, 25768, 25772, 25777, 25783, 25790,
-    25795, 9929, 25799, 25804, 25809, 25814, 25819, 25824, 1689, 1694, 25829,
-    25835, 25841, 25846, 25850, 25854, 25858, 25862, 25866, 25870, 25874,
-    25878, 25881, 25887, 25894, 25902, 25908, 25914, 25919, 25924, 25930,
-    25934, 25939, 25946, 16044, 16051, 25952, 25964, 25967, 25974, 25978,
-    19187, 25985, 25993, 26004, 26013, 26026, 26036, 26050, 26062, 26076,
-    26089, 26101, 26111, 26123, 26129, 26135, 26150, 26174, 26192, 26211,
-    26224, 26238, 26256, 26272, 26289, 26307, 26318, 26337, 26354, 26374,
-    26392, 26404, 26418, 26432, 26444, 26461, 26480, 26498, 26510, 26528,
-    26547, 16925, 26560, 26580, 26592, 12117, 26604, 26609, 26614, 26619,
-    26628, 26634, 26639, 26643, 26650, 26656, 26660, 26665, 26670, 26675,
-    26680, 26685, 26690, 2440, 26695, 26701, 26705, 26708, 26719, 26723,
-    26726, 26734, 26740, 14356, 26744, 26753, 26764, 26770, 26776, 26791,
-    26800, 26808, 26815, 26820, 26824, 26831, 26837, 26846, 26854, 26861,
-    26871, 26880, 26890, 26895, 26904, 26913, 26924, 26935, 26945, 26962,
-    4450, 26972, 26976, 26986, 26994, 27004, 27015, 27021, 27026, 27036,
-    27044, 27051, 27057, 27064, 27069, 25501, 27073, 27082, 27086, 27089,
-    27094, 27102, 27109, 27118, 27126, 27134, 27142, 27152, 27161, 27167,
-    27173, 27179, 27183, 25506, 25511, 27187, 27197, 27207, 27217, 27225,
-    27232, 27242, 27250, 27258, 27264, 27272, 782, 27281, 17126, 599, 27295,
-    27304, 27312, 27323, 27334, 27344, 27353, 27365, 27374, 27383, 27390,
-    27396, 27406, 27415, 27424, 27432, 27440, 27450, 27458, 27466, 27472,
-    27477, 27482, 27487, 7915, 27492, 27495, 27499, 27504, 27510, 27515,
-    27519, 11142, 25524, 25529, 27527, 27533, 27539, 27544, 27549, 27553,
-    27561, 27567, 27573, 27577, 3824, 27585, 27590, 27595, 27599, 27603,
-    11266, 27610, 27618, 27632, 27639, 27646, 27652, 11275, 11281, 27660,
-    27668, 27675, 27680, 27685, 25534, 27691, 27702, 27706, 27711, 2679,
-    27716, 27727, 27733, 27738, 27742, 27746, 27749, 27756, 27763, 27769,
-    27777, 27784, 27790, 27794, 7955, 27799, 27803, 27807, 27815, 27820,
-    27825, 27830, 1717, 27835, 27840, 27845, 27850, 27855, 27860, 27865,
-    27870, 27875, 27880, 27885, 27890, 27895, 27900, 27906, 27911, 27916,
-    27921, 27926, 27931, 27936, 27942, 27947, 27952, 27957, 27962, 27967,
-    27972, 27977, 27983, 27989, 27994, 28000, 28005, 28010, 5, 28016, 28020,
-    28024, 28028, 28033, 28037, 28041, 28045, 28049, 28054, 28058, 28063,
-    28067, 28070, 28074, 28079, 28083, 28088, 28092, 28096, 28100, 28105,
-    28109, 28113, 28123, 28128, 28132, 28136, 28141, 28146, 28155, 28160,
-    28165, 28169, 28173, 28182, 28195, 28207, 28216, 28225, 28230, 28236,
-    28241, 28245, 28249, 28259, 28268, 28276, 28282, 28287, 28291, 28298,
-    28308, 28317, 28325, 12474, 28333, 28341, 28350, 28359, 28367, 28377,
-    28382, 28386, 28390, 28393, 28395, 28399, 28403, 28408, 28413, 28417,
-    28421, 28424, 28428, 28431, 28435, 28438, 28441, 28445, 28451, 28455,
-    28459, 28463, 28467, 28472, 28477, 28482, 28486, 28489, 28494, 28500,
-    28505, 28511, 28516, 28520, 28526, 28530, 28534, 28539, 28543, 28548,
-    28553, 28557, 28561, 28568, 28572, 28575, 28579, 28583, 28589, 28595,
-    28599, 28603, 28608, 28615, 28621, 28625, 28634, 28638, 28642, 28645,
-    28651, 28656, 28662, 1417, 1769, 28667, 28672, 28677, 28682, 28687,
-    28692, 28697, 2150, 747, 28702, 28705, 28709, 28713, 28718, 28722, 17138,
-    28726, 28731, 28736, 28740, 28743, 28748, 28752, 28757, 28761, 17142,
-    28766, 28769, 28772, 28778, 28782, 28787, 28791, 28804, 28808, 28811,
-    28819, 28828, 28835, 28840, 28846, 28852, 28860, 28867, 28874, 28878,
-    28882, 28886, 28891, 28896, 28900, 28908, 28913, 28920, 28932, 28943,
-    28948, 28952, 28959, 28963, 28968, 28974, 28977, 28982, 28987, 28994,
-    28998, 29002, 29005, 29011, 8642, 2350, 29015, 29020, 29036, 10734,
-    29056, 29065, 29081, 29085, 29092, 29095, 29101, 29111, 29117, 29126,
-    29141, 29152, 29164, 29175, 29183, 29192, 29198, 29207, 29217, 29227,
-    29238, 29249, 29259, 29268, 29275, 29284, 29292, 29299, 29306, 29314,
-    29321, 29328, 29341, 29348, 29356, 29363, 29369, 29374, 29383, 29390,
-    29396, 29401, 29409, 29417, 29424, 29431, 26996, 29443, 29455, 29469,
-    29477, 29485, 29493, 29500, 29512, 29521, 29530, 29538, 29546, 29554,
-    29561, 29567, 29576, 29584, 29594, 29603, 29613, 29622, 29631, 29639,
-    29644, 29648, 29651, 29655, 29659, 29663, 29667, 29671, 29677, 29683,
-    29688, 29696, 17200, 29703, 29708, 29715, 29721, 29728, 17208, 29735,
-    29738, 29750, 29758, 29764, 29769, 29773, 29784, 29794, 29804, 11205,
-    29813, 29822, 29830, 29840, 29849, 29856, 29863, 29871, 29875, 17219,
-    29878, 29885, 29889, 4394, 29895, 29898, 29905, 29911, 29916, 29923,
-    29929, 29933, 29938, 29942, 29951, 29958, 29964, 8700, 29971, 29979,
-    29986, 29992, 29997, 30003, 30009, 30017, 30023, 30027, 30030, 30032,
-    29656, 11218, 30041, 30046, 30052, 30062, 30067, 30074, 30080, 30085,
-    30090, 30095, 30099, 30104, 30111, 30117, 30126, 30134, 30138, 30145,
-    30151, 30160, 30167, 4648, 30173, 30179, 30184, 30191, 30203, 30214,
-    30219, 30223, 30233, 30239, 30243, 30248, 30258, 30267, 30271, 30278,
-    30286, 30293, 30299, 30304, 30312, 30319, 30324, 30331, 30343, 30352,
-    30356, 15130, 30364, 30374, 30378, 30386, 28815, 30397, 30402, 30406,
-    30413, 30420, 25186, 29581, 30425, 30429, 30432, 26324, 30437, 30451,
-    30467, 30485, 30504, 30521, 30539, 26343, 30556, 30576, 26360, 30588,
-    30600, 18413, 30612, 26380, 30626, 30638, 12130, 30652, 30657, 30662,
-    30667, 30673, 30679, 30685, 30689, 30697, 30704, 30709, 30719, 30725,
-    11692, 30731, 30733, 30738, 30746, 30750, 30107, 30756, 30763, 13395,
-    13405, 30770, 30777, 30787, 30792, 30796, 30799, 30805, 30813, 30825,
-    30835, 30851, 30864, 30878, 18431, 30892, 30899, 30903, 30906, 30911,
-    30915, 30922, 30929, 30936, 30946, 30951, 30956, 30961, 30969, 30977,
-    30982, 30991, 27017, 3485, 30996, 30999, 31002, 31007, 31014, 31019,
-    31024, 31040, 31048, 31056, 10498, 31064, 31069, 31073, 31079, 31084,
-    31090, 31093, 31099, 31111, 31119, 31126, 31132, 31139, 31150, 31164,
-    31177, 31183, 31192, 31198, 31207, 31219, 31230, 31240, 31249, 31258,
-    31266, 31277, 8682, 31284, 31291, 31297, 31302, 31308, 31315, 31326,
-    31336, 31346, 31355, 31361, 31368, 31373, 31381, 31388, 31396, 31404,
-    31416, 6904, 1094, 31423, 31432, 31440, 31446, 31452, 31457, 31461,
-    31464, 31470, 31477, 31482, 31487, 31492, 31496, 31508, 31519, 31528,
-    31536, 17401, 31541, 31549, 31554, 31562, 31568, 31574, 13388, 9497,
-    31579, 31583, 31587, 31590, 31593, 31599, 31607, 31615, 31619, 31623,
-    31628, 31632, 31635, 31644, 31649, 31653, 31656, 31664, 31675, 31684,
-    31688, 31694, 31700, 31704, 31710, 31718, 31740, 31764, 31775, 31784,
-    31790, 31797, 31804, 31810, 31818, 31824, 31829, 31840, 31858, 31865,
-    31873, 31877, 31884, 31889, 31898, 31911, 31919, 31931, 31942, 31953,
-    31963, 31977, 31986, 31994, 32006, 10751, 32017, 32028, 32039, 32051,
-    32061, 32070, 32080, 32085, 32089, 32097, 32108, 32118, 32124, 32129,
-    32133, 32136, 32139, 32147, 32155, 32164, 32174, 32183, 32189, 32203,
-    2762, 32225, 32236, 32245, 32255, 32267, 32276, 32285, 32295, 32303,
-    32311, 32320, 32325, 32336, 32341, 32350, 32356, 32367, 32371, 32374,
-    32384, 32393, 32401, 32411, 32421, 32429, 32438, 32445, 32453, 32460,
-    32469, 32478, 32483, 32488, 32492, 32500, 32507, 32511, 32519, 32526,
-    32537, 32552, 32559, 32565, 32575, 32584, 32590, 32601, 32605, 32612,
-    32616, 32623, 32629, 16275, 32635, 32639, 32644, 32650, 32657, 32661,
-    32665, 32673, 32681, 32687, 32696, 32703, 32710, 32715, 32720, 32730,
-    27071, 32734, 32737, 32742, 32747, 32752, 32757, 32762, 32767, 32772,
-    32777, 32783, 32788, 32793, 32799, 1134, 725, 32804, 32811, 32820, 2398,
-    32827, 32832, 32836, 32842, 1183, 653, 32847, 311, 32851, 32860, 32868,
-    32877, 32885, 32892, 32903, 32911, 32920, 32930, 32938, 32943, 11373,
-    32947, 32955, 32963, 32968, 17155, 4008, 32974, 32980, 32986, 6462,
-    32991, 32995, 33002, 33008, 33014, 33018, 33024, 33029, 33036, 1376,
-    33042, 33049, 33053, 1283, 6470, 33058, 33068, 33076, 33082, 33092,
-    33101, 33109, 33115, 33120, 33128, 33135, 12911, 33141, 33148, 33153,
-    33160, 33170, 1436, 230, 2149, 33176, 33182, 33189, 33200, 33211, 33219,
-    33226, 33236, 33245, 33253, 33262, 33269, 33276, 33289, 33296, 33302,
-    33313, 33332, 1188, 33337, 33342, 33350, 3891, 33354, 33359, 33363,
-    33367, 1380, 28422, 33377, 33381, 33386, 33390, 33396, 3758, 33402,
-    33410, 33417, 33428, 33437, 33445, 33470, 33478, 33483, 3892, 377, 33489,
-    33497, 33505, 33512, 33518, 33523, 2218, 12332, 33530, 33536, 29934,
-    30209, 33542, 613, 106, 33546, 33550, 33556, 715, 10371, 33561, 33568,
-    33574, 33578, 33582, 1581, 33585, 33589, 17669, 33592, 33597, 33604,
-    33610, 8713, 33615, 33623, 33630, 33636, 25696, 33640, 33644, 33648,
-    33652, 3962, 19497, 33656, 33661, 33665, 33668, 33676, 33684, 33689,
-    33698, 33706, 33709, 33716, 33726, 33738, 33746, 33751, 33755, 33763,
-    33770, 33776, 33783, 33790, 33793, 33797, 33801, 1391, 33811, 33813,
-    33818, 33824, 33830, 33835, 33840, 33845, 33850, 33855, 33860, 33865,
-    33870, 33875, 33880, 33885, 33890, 33895, 33900, 33906, 33912, 33918,
-    33924, 33929, 33934, 33939, 33945, 33950, 33955, 33960, 33966, 33971,
-    33977, 33982, 33987, 33992, 33997, 34003, 34008, 34014, 34019, 34024,
-    34029, 34034, 34040, 34045, 34051, 34056, 34061, 34066, 34071, 34076,
-    34081, 34086, 34091, 34096, 34102, 34108, 34114, 34119, 34124, 34129,
-    34134, 34140, 34146, 34152, 34158, 34164, 34170, 34175, 34181, 34186,
-    34191, 34196, 34201, 34207, 2486, 34212, 2493, 2500, 2886, 34217, 2506,
-    2516, 34223, 2548, 2553, 2558, 34227, 34232, 34237, 34243, 34248, 34253,
-    34257, 34262, 34268, 34273, 34278, 34283, 34289, 34294, 34298, 34302,
-    34307, 34312, 34317, 34322, 34327, 34333, 34339, 34344, 34348, 34353,
-    34359, 34363, 34368, 34373, 34378, 34383, 34387, 34390, 34395, 34400,
-    34405, 34410, 34415, 34421, 34427, 34432, 34437, 34442, 34446, 34451,
-    34456, 34461, 34466, 34471, 34476, 34480, 34485, 34490, 34495, 34499,
-    34503, 34507, 34512, 34520, 34525, 34530, 34536, 34542, 34548, 34553,
-    34561, 34565, 34568, 34573, 34578, 34582, 34587, 34592, 34596, 34601,
-    34605, 34608, 34613, 4104, 20257, 34618, 34623, 34628, 34633, 34641,
-    24401, 33046, 10010, 34646, 34651, 34655, 34660, 34664, 34668, 34673,
-    34677, 34680, 34683, 34687, 34692, 34696, 34704, 34708, 34711, 34716,
-    34720, 34724, 34729, 34734, 34738, 34744, 34749, 34754, 34761, 34768,
-    34772, 34775, 34781, 34790, 34797, 34805, 34812, 34816, 34821, 34825,
-    34829, 34835, 34840, 34846, 34850, 34856, 34861, 34866, 34870, 34877,
-    34883, 34889, 34895, 34901, 34908, 34914, 34920, 34926, 34932, 34938,
-    34944, 34950, 34957, 34963, 34970, 34976, 34982, 34988, 34994, 35000,
-    35006, 35012, 35018, 35024, 35030, 35035, 35040, 13266, 35045, 35051,
-    35056, 35061, 35066, 35071, 35074, 35080, 35085, 35093, 35098, 35102,
-    35107, 35113, 35122, 35128, 35133, 35138, 35143, 35147, 35152, 35156,
-    35161, 35166, 35171, 35176, 35183, 35190, 35196, 35202, 35207, 19116,
-    35214, 35220, 35227, 35233, 35239, 35244, 35252, 35257, 10916, 35261,
-    35266, 35271, 35277, 35282, 35287, 35291, 35296, 35301, 35307, 35312,
-    35317, 35322, 35326, 35331, 35336, 35340, 35345, 35350, 35354, 35359,
-    35363, 35368, 35373, 35378, 35382, 35387, 35391, 35396, 35400, 35404,
-    35408, 17825, 35413, 35420, 35429, 35435, 35441, 35450, 35458, 35467,
-    35475, 35480, 35484, 35491, 35497, 35505, 35509, 35512, 35517, 35521,
-    35530, 35538, 35556, 35562, 1435, 35568, 35571, 35575, 25836, 25842,
-    35581, 35585, 35596, 35607, 35618, 35630, 35634, 35641, 35648, 35655,
-    35660, 35664, 35672, 35677, 35682, 35687, 35692, 6527, 1050, 24400,
-    35697, 35702, 35706, 35711, 35715, 35721, 35726, 35732, 35737, 35743,
-    35748, 35754, 35759, 35765, 35771, 35777, 35782, 35738, 35744, 35786,
-    35791, 35797, 35802, 35808, 35813, 35819, 35824, 35749, 11983, 35828,
-    35760, 35766, 35772, 2978, 3672, 35834, 35837, 35842, 35848, 35854,
-    35860, 35867, 35873, 35879, 35885, 35891, 35897, 35903, 35909, 35915,
-    35921, 35927, 35933, 35939, 35946, 35952, 35958, 35964, 35970, 35976,
-    35979, 35984, 35987, 35994, 35999, 36007, 36011, 36016, 36021, 36027,
-    36032, 36037, 36041, 36046, 36052, 36057, 36063, 36068, 36074, 36079,
-    36085, 36091, 36095, 36100, 36105, 36110, 36115, 36119, 36124, 36129,
-    36134, 36140, 36146, 36152, 36158, 36163, 36167, 36170, 36176, 36182,
-    36191, 36199, 36206, 36211, 36215, 36219, 36224, 17615, 36229, 36237,
-    36243, 4050, 1293, 36248, 36252, 8763, 36258, 36264, 36271, 8772, 36275,
-    36281, 36288, 36294, 36303, 36311, 36323, 36327, 36334, 36340, 36345,
-    36349, 36353, 36356, 36366, 36375, 36383, 35739, 36388, 36398, 36408,
-    36418, 36424, 36429, 36439, 36444, 36457, 36471, 36482, 36494, 36506,
-    36520, 36533, 36545, 36557, 16966, 36571, 36576, 36581, 36585, 36589,
-    36593, 36597, 36603, 36608, 36613, 36618, 36623, 36628, 36633, 1758,
-    31228, 36638, 36643, 35787, 36648, 36651, 36656, 36661, 36666, 36672,
-    36678, 18733, 11558, 36683, 36689, 36696, 18365, 36702, 36707, 36712,
-    36716, 36721, 36726, 35792, 36731, 36736, 36741, 36747, 35798, 36752,
-    36755, 36762, 36770, 36776, 36782, 36788, 36799, 36804, 36811, 36818,
-    36825, 36833, 36842, 36851, 36857, 36863, 36871, 35803, 36876, 36882,
-    36888, 35809, 36893, 36898, 36906, 36914, 36920, 36927, 36933, 36940,
-    36947, 36953, 36961, 36971, 36978, 36984, 36989, 36995, 37000, 37005,
-    37012, 37021, 37029, 37034, 37040, 37047, 37055, 37061, 37066, 37072,
-    37081, 37088, 32169, 37094, 37098, 37103, 37112, 37117, 37122, 37127,
-    14446, 37135, 37140, 37145, 37150, 37154, 37159, 37164, 37171, 37176,
-    37181, 37186, 35814, 24329, 37192, 2589, 155, 37195, 37198, 37202, 37206,
-    37216, 37224, 37231, 37235, 37239, 37242, 37250, 37257, 37264, 30163,
-    37273, 37276, 37282, 37289, 37293, 37301, 37309, 37316, 37320, 37324,
-    37327, 37333, 37340, 37344, 37348, 37355, 37363, 37371, 35750, 37378,
-    37386, 37391, 37403, 11639, 11646, 11653, 11660, 11667, 11674, 578, 404,
-    37409, 37414, 37419, 37425, 37430, 37435, 4071, 37440, 37443, 37448,
-    37453, 37458, 37463, 37468, 37475, 25960, 37480, 37485, 37490, 37495,
-    37500, 37506, 37511, 37517, 35990, 37523, 37528, 37534, 37540, 37550,
-    37555, 37560, 37564, 37569, 37574, 37579, 37584, 37597, 37602, 25574,
-    19579, 978, 37606, 37612, 37616, 37621, 37626, 37632, 37637, 37642,
-    37646, 37651, 37656, 37662, 37667, 37672, 1298, 37676, 37681, 37686,
-    37691, 37695, 37700, 37705, 37710, 37716, 37722, 37727, 37731, 37735,
-    37740, 37745, 37750, 37754, 37759, 37767, 37771, 37777, 37781, 37788,
-    37797, 19350, 35761, 37803, 37810, 37818, 37825, 37831, 37844, 37856,
-    37861, 37867, 37871, 2905, 37875, 37879, 37335, 37888, 37899, 37910,
-    37915, 32232, 37920, 37925, 37929, 32352, 25847, 37934, 37938, 37943,
-    35767, 24436, 37947, 37952, 37958, 37963, 37967, 37971, 37974, 37978,
-    37984, 37993, 38004, 38016, 35773, 38021, 38024, 38028, 38032, 38037,
-    38042, 38047, 38052, 38057, 38062, 38067, 38072, 341, 38077, 38082,
-    38087, 38092, 38097, 38102, 38108, 38113, 38118, 38124, 38129, 38135,
-    38140, 38146, 38151, 38156, 38161, 38166, 38171, 38176, 38181, 38186,
-    38192, 38197, 38202, 38207, 38212, 38217, 38222, 38227, 38233, 38239,
-    38244, 38249, 38254, 38259, 38264, 38269, 38274, 38279, 38284, 38289,
-    38294, 38299, 38304, 38309, 38314, 38319, 38324, 38329, 38339, 38349,
-    38355, 331, 9, 38360, 38364, 38368, 38376, 38380, 38384, 38387, 16395,
-    38390, 38395, 38399, 38404, 38408, 38413, 38417, 38422, 38426, 38429,
-    38431, 38435, 38440, 38444, 38455, 38458, 38460, 38464, 38476, 38488,
-    38497, 38501, 38511, 38515, 38521, 38526, 38535, 38541, 38546, 38551,
-    38555, 38559, 38564, 38571, 38576, 38582, 38587, 38591, 38598, 29589,
-    29599, 38602, 38607, 38612, 38617, 38624, 38628, 38635, 38641, 8918,
-    38645, 38654, 38662, 38677, 38691, 38700, 38708, 38719, 38728, 38733,
-    38740, 38750, 7924, 38760, 38765, 38770, 38774, 38777, 38782, 38786,
-    38791, 38795, 38802, 38807, 38812, 38817, 38827, 38832, 38837, 38842,
-    9883, 38847, 38849, 38857, 38860, 38863, 38865, 38869, 38875, 38879,
-    38884, 38889, 38907, 38921, 38940, 38957, 38966, 38974, 38979, 38984,
-    1428, 38990, 38996, 39001, 39011, 39020, 39028, 39033, 39039, 39044,
-    39053, 39062, 39073, 39078, 39085, 39091, 39095, 39104, 39111, 39119,
-    39126, 39139, 39147, 39151, 39161, 39166, 39170, 39178, 39186, 39191,
-    39195, 39199, 39208, 39214, 39219, 39227, 39237, 39246, 39255, 39264,
-    39275, 39283, 39294, 39303, 39311, 39318, 39324, 39329, 39340, 39351,
-    39356, 39360, 39363, 39367, 39375, 39381, 39392, 39403, 39414, 39425,
-    39436, 39447, 39458, 39469, 39481, 39493, 39505, 39517, 39529, 39541,
-    39553, 39562, 39566, 39574, 39580, 39586, 39593, 39599, 39604, 39610,
-    39614, 39619, 39624, 39629, 38334, 38344, 2460, 39634, 39636, 39641,
-    39646, 39651, 39654, 39656, 39660, 39663, 39670, 39674, 11229, 39678,
-    39684, 39694, 39699, 39705, 39709, 39714, 39727, 30057, 39733, 39742,
-    39751, 20480, 39758, 39767, 36404, 39775, 39780, 39784, 39793, 39801,
-    39808, 39813, 39817, 39822, 39827, 39835, 39839, 39847, 39853, 39859,
-    39864, 39869, 39873, 39876, 39881, 39894, 39910, 26450, 39927, 39939,
-    39956, 39968, 39982, 26467, 26486, 39994, 40006, 2779, 40020, 40025,
-    40030, 40035, 40039, 40046, 40058, 40065, 40074, 40077, 40088, 40099,
-    40107, 40112, 40116, 40121, 40126, 40131, 40136, 40141, 40146, 36868,
-    927, 40151, 40155, 40159, 40162, 40167, 40172, 40178, 40183, 40188,
-    40194, 40200, 40205, 40209, 40214, 40219, 40224, 40228, 40231, 40237,
-    40242, 40247, 40252, 40256, 40261, 40267, 40275, 30336, 40280, 40285,
-    40292, 40298, 40304, 40309, 40317, 25969, 40324, 40329, 40334, 40339,
-    40343, 40346, 40351, 40355, 40359, 40366, 40372, 40378, 40384, 40391,
-    40396, 40402, 39181, 40406, 40410, 40415, 40428, 40433, 40439, 40447,
-    40454, 40462, 40472, 40478, 40484, 40490, 40494, 40503, 40511, 40518,
-    40523, 40528, 12006, 40533, 40543, 40550, 40556, 40566, 40571, 40577,
-    40585, 3924, 40592, 40599, 40605, 40612, 3930, 40616, 40621, 40632,
-    40639, 40645, 40654, 40658, 4502, 40661, 40668, 40674, 40680, 40688,
-    40698, 33513, 40705, 40713, 40719, 40724, 40730, 40735, 40739, 29901,
-    40745, 40752, 40758, 40766, 40775, 40782, 40788, 40799, 27269, 40805,
-    40815, 40820, 40824, 40832, 40840, 40847, 40853, 40858, 10874, 6502,
-    40863, 40867, 40869, 40873, 40878, 40880, 40885, 40891, 40896, 40901,
-    40908, 37471, 40914, 40919, 40923, 40928, 40932, 40941, 40945, 40951,
-    40958, 40964, 40971, 40976, 40985, 40990, 40994, 40999, 41006, 41014,
-    41022, 41027, 24492, 41031, 41034, 41038, 41042, 12429, 944, 41046,
-    41051, 41059, 41064, 41068, 41077, 41084, 41088, 41092, 41100, 41107,
-    15728, 41117, 41121, 41125, 41133, 41141, 41147, 41152, 41161, 15476,
-    41167, 41176, 41183, 41188, 41195, 41202, 41210, 41217, 41225, 41233,
-    41242, 41247, 41254, 41261, 41268, 41275, 41282, 41287, 41294, 41300,
-    41317, 41325, 41335, 41343, 41350, 439, 41354, 41360, 41364, 41369,
-    38724, 41375, 41378, 41382, 41388, 41399, 41407, 3935, 41415, 41421,
-    41427, 41437, 41443, 41452, 41461, 41471, 41478, 41484, 41489, 3941,
-    3947, 41498, 41505, 41513, 41518, 41522, 41529, 41537, 41544, 41551,
-    41557, 41566, 41576, 41582, 41590, 41599, 41606, 41614, 41621, 25249,
-    41625, 41632, 41638, 41648, 41657, 41665, 41676, 41680, 41690, 41697,
-    41702, 41708, 41715, 41723, 41732, 41741, 41751, 41762, 41769, 41774,
-    41781, 3193, 41789, 41795, 41800, 41807, 41813, 41819, 41824, 41837,
-    41850, 41863, 41870, 41876, 41884, 41892, 41897, 41901, 41905, 41910,
-    41915, 41920, 41925, 41930, 41935, 1397, 41940, 41944, 41948, 41952,
-    41956, 41960, 41964, 41968, 41972, 41976, 41980, 41984, 41988, 41992,
-    41996, 42000, 42004, 42008, 42012, 42016, 42020, 42024, 42028, 42032,
-    42036, 42040, 42044, 42048, 42052, 42056, 42060, 42064, 42068, 42072,
-    42076, 42080, 42084, 42088, 42092, 42096, 42100, 42104, 42108, 42112,
-    42116, 42120, 42124, 42128, 42132, 42136, 42140, 42144, 42148, 42152,
-    42156, 42160, 42164, 42168, 42172, 42176, 42180, 42184, 42188, 42192,
-    42196, 42200, 42204, 42208, 42212, 42216, 42220, 42224, 42228, 42232,
-    42236, 42240, 42244, 42248, 42252, 42256, 42260, 42264, 42268, 42272,
-    42276, 42280, 42284, 42288, 42292, 42296, 42300, 42304, 42308, 42312,
-    42316, 42320, 42324, 42328, 42332, 42336, 42340, 42344, 42348, 42352,
-    42356, 42360, 42364, 42368, 42372, 42376, 42380, 42384, 42388, 42392,
-    42396, 42400, 42404, 42408, 42412, 42416, 42420, 42424, 42428, 42432,
-    42436, 42440, 42444, 42448, 42452, 42456, 42460, 42464, 42468, 42472,
-    42476, 42480, 42484, 42488, 42492, 42496, 42500, 42504, 42508, 42512,
-    42516, 42520, 42524, 42528, 42532, 42536, 42540, 42544, 42548, 42552,
-    42557, 42561, 42566, 42570, 42575, 42579, 42584, 42588, 42594, 42599,
-    42603, 42608, 42612, 42617, 42621, 42626, 42630, 42635, 42639, 42644,
-    42648, 42653, 42657, 42663, 42669, 42674, 42678, 42683, 42687, 42693,
-    42698, 42702, 42707, 42711, 42716, 42720, 42726, 42731, 42735, 42740,
-    42744, 42749, 42753, 42758, 42762, 42768, 42773, 42777, 42782, 42786,
-    42792, 42797, 42801, 42806, 42810, 42815, 42819, 42824, 42828, 42833,
-    42837, 42843, 42848, 42852, 42858, 42863, 42867, 42873, 42878, 42882,
-    42887, 42891, 42896, 42900, 42906, 42912, 42918, 42924, 42930, 42936,
-    42942, 42948, 42953, 42957, 42962, 42966, 42972, 42977, 42981, 42986,
-    42990, 42995, 42999, 43004, 43008, 43013, 43017, 43022, 43026, 43031,
-    43035, 43041, 43046, 43050, 43055, 43059, 43065, 43071, 43076, 127, 63,
-    43080, 43082, 43086, 43090, 43094, 43099, 43103, 43107, 43112, 10787,
-    43117, 43123, 1703, 6943, 43129, 43132, 43137, 43141, 43146, 43150,
-    43154, 43159, 11790, 43163, 43167, 43171, 571, 43175, 17934, 43180,
-    43184, 43189, 43194, 43199, 43203, 43210, 30081, 43216, 43219, 43223,
-    43228, 43234, 43238, 43241, 43249, 43255, 43260, 43264, 43267, 43271,
-    43277, 43281, 43285, 3723, 3728, 14558, 43288, 43292, 43296, 43300,
-    43304, 43312, 43319, 43323, 15426, 43330, 43335, 43349, 43356, 43367,
-    361, 43372, 43376, 43382, 43394, 43400, 43406, 43411, 43417, 43421,
-    33786, 43430, 43436, 43445, 43449, 43453, 43458, 43464, 43469, 43473,
-    43478, 43482, 43486, 43493, 43499, 43504, 43515, 43530, 43545, 43560,
-    43576, 43594, 11704, 43608, 43615, 43619, 43622, 43631, 43636, 43640,
-    43648, 18568, 43656, 43660, 43670, 43681, 33711, 43694, 43698, 43707,
-    43725, 43744, 43753, 43761, 43769, 11069, 11903, 43773, 25859, 43776,
-    34700, 43781, 11068, 43786, 43792, 43797, 43803, 43808, 43814, 43819,
-    43825, 43830, 43836, 43842, 43848, 43853, 43809, 43815, 43857, 43820,
-    43826, 43831, 43862, 43837, 43843, 8931, 4327, 43868, 43876, 43880,
-    43883, 43890, 43894, 43899, 43904, 43911, 43917, 43923, 43928, 17247,
-    43932, 29918, 43936, 43940, 43944, 43950, 43954, 32103, 43963, 10043,
-    43967, 10469, 43970, 43977, 43983, 43987, 13867, 43994, 44000, 44005,
-    44012, 44019, 44026, 32872, 8828, 44033, 44040, 44047, 44053, 44058,
-    44065, 44076, 44082, 44087, 44092, 44097, 44101, 44106, 44113, 43810,
-    44117, 44127, 44136, 44147, 44153, 44161, 44168, 44173, 44178, 44183,
-    44188, 44193, 44197, 44201, 44208, 44214, 44222, 2353, 29018, 11806,
-    11818, 11823, 11829, 44231, 11834, 11839, 11845, 44236, 44246, 44250,
-    11850, 44255, 19777, 44258, 44263, 44267, 40069, 44278, 44283, 44290,
-    44297, 44301, 44304, 44312, 11717, 44319, 44322, 44328, 44338, 6554,
-    44347, 44352, 44358, 44362, 44370, 44374, 44384, 44390, 44395, 44406,
-    44415, 44424, 44433, 44442, 44451, 44460, 44469, 44475, 44481, 44486,
-    44492, 44498, 44504, 44509, 44512, 44519, 44525, 44529, 44534, 44541,
-    44548, 44552, 44555, 44565, 44578, 44587, 44596, 44607, 44620, 44632,
-    44643, 44652, 44663, 44668, 44677, 44682, 11855, 44688, 44695, 44703,
-    44708, 44713, 30127, 44717, 44724, 4267, 25, 44728, 44733, 19626, 44737,
-    44740, 44743, 32289, 44747, 32881, 44755, 44759, 44763, 44766, 44772,
-    44778, 44783, 35838, 44792, 44800, 44806, 44813, 32272, 44817, 32503,
-    44821, 44830, 44834, 44842, 44848, 44854, 44859, 44863, 32907, 44869,
-    44872, 44880, 44888, 4649, 44894, 44898, 44902, 44907, 44914, 44920,
-    44925, 44930, 44934, 44940, 44945, 44951, 4555, 766, 44958, 44962, 44965,
-    44977, 44984, 44989, 17807, 44993, 45001, 45009, 45017, 45025, 45032,
-    45040, 45048, 45055, 45063, 45071, 45079, 45087, 45095, 45103, 45111,
-    45119, 45127, 45135, 45143, 45150, 45158, 45166, 45174, 45182, 45190,
-    45198, 45206, 45214, 45222, 45230, 45238, 45246, 45254, 45262, 45270,
-    45278, 45286, 45294, 45302, 45309, 45317, 45324, 45332, 45340, 45348,
-    45356, 45364, 45372, 45380, 45388, 45399, 25285, 45404, 45407, 45414,
-    45418, 45424, 45428, 45434, 45439, 45445, 45450, 45455, 45459, 45463,
-    45471, 45476, 45481, 45491, 45497, 45510, 45516, 45522, 45528, 45531,
-    45538, 45543, 45549, 45554, 19522, 903, 45559, 45562, 45565, 45568,
-    35922, 35928, 45571, 35934, 35947, 35953, 35959, 45577, 35965, 35971,
-    45583, 45589, 18, 45597, 45604, 45608, 45612, 45620, 36757, 45624, 45628,
-    45635, 45640, 45644, 45649, 45655, 45660, 45666, 45671, 45675, 45679,
-    45683, 45688, 45692, 45697, 45701, 45705, 45712, 45717, 45721, 45725,
-    45730, 45734, 45739, 45743, 45747, 45752, 45758, 18091, 18096, 45763,
-    45767, 45770, 45776, 45780, 45784, 24286, 45789, 45793, 45799, 45806,
-    45812, 45817, 38753, 45827, 45832, 45840, 45844, 45847, 36772, 45851,
-    4620, 45856, 45861, 45865, 45870, 45874, 45879, 15494, 45890, 45894,
-    45897, 45901, 45906, 45910, 45915, 45920, 45924, 45928, 45932, 45935,
-    45939, 45942, 45947, 45952, 45957, 45962, 45967, 45972, 8415, 15510,
-    45977, 45980, 45986, 45991, 45997, 46002, 46008, 46013, 46019, 46024,
-    46030, 46036, 46042, 46047, 46051, 46055, 46062, 46071, 46087, 46103,
-    46113, 32179, 46120, 46124, 46129, 46134, 46138, 46142, 41736, 46148,
-    46153, 46157, 46164, 46169, 46174, 46178, 46181, 46185, 46191, 31031,
-    46195, 24599, 46200, 46207, 46215, 46221, 46228, 46236, 46242, 46246,
-    46251, 46257, 46265, 46270, 46274, 46283, 10768, 46291, 46295, 46303,
-    46310, 46315, 46320, 46325, 46329, 46332, 46338, 46342, 46345, 46349,
-    46356, 46361, 46365, 46371, 46375, 46381, 46386, 46391, 30422, 35985,
-    46396, 46405, 46413, 46419, 46431, 46444, 46458, 46465, 46471, 46477,
-    46482, 46490, 46493, 46495, 46502, 46509, 46515, 46519, 8414, 46522,
-    46526, 46530, 46535, 46539, 46543, 46546, 46550, 46564, 26516, 46583,
-    46596, 46609, 46622, 26534, 46637, 2732, 46652, 46658, 46662, 46672,
-    46676, 46680, 46685, 46689, 46696, 46701, 46705, 46712, 46718, 46723,
-    46729, 46739, 46751, 46762, 46767, 46774, 46778, 46782, 46785, 46793,
-    18589, 4039, 46798, 18124, 46811, 46818, 46825, 46831, 46835, 46839,
-    46844, 46850, 46855, 46861, 46865, 46869, 46872, 46877, 46881, 46886,
-    46891, 46896, 46901, 46906, 46911, 46916, 46921, 46926, 8469, 18135,
-    46931, 46935, 46941, 46950, 46955, 46964, 46971, 41572, 46977, 46982,
-    46986, 46993, 46998, 47005, 47011, 47015, 47018, 47022, 47027, 2810,
-    47034, 47041, 47045, 47048, 47053, 47058, 47064, 47069, 47074, 47078,
-    47083, 47093, 47098, 47104, 47109, 44979, 47115, 47121, 47131, 47136,
-    47141, 47145, 47150, 7926, 7938, 47155, 47158, 47165, 47171, 47180, 9963,
-    39321, 47188, 47192, 47196, 36820, 47204, 47215, 47223, 41784, 47230,
-    47235, 47240, 47251, 47258, 47269, 36844, 24616, 47277, 1022, 47282,
-    15917, 47288, 32263, 47294, 47299, 47309, 47318, 47325, 47331, 47335,
-    47338, 47345, 47351, 47358, 47364, 47374, 47382, 47388, 47394, 47399,
-    47403, 47410, 47415, 47421, 47428, 47434, 46531, 47439, 47443, 15959,
-    15968, 15977, 15986, 15995, 16024, 620, 16033, 47449, 47454, 47457,
-    47463, 47471, 1315, 47476, 47480, 47485, 47490, 47495, 47502, 47508,
-    47512, 47517, 47523, 47527, 35995, 47532, 47537, 47546, 47553, 47563,
-    47569, 32307, 47586, 47595, 47603, 47609, 47614, 47621, 47627, 47635,
-    47644, 47652, 47660, 47666, 47670, 47675, 47683, 33392, 36853, 47689,
-    47708, 18492, 47722, 47738, 47752, 47758, 47763, 47768, 47773, 47779,
-    36859, 47784, 47787, 47794, 47801, 47810, 47815, 47819, 420, 3100, 47826,
-    47831, 47836, 31400, 47624, 47840, 47845, 47853, 47857, 47860, 47865,
-    47871, 47877, 47882, 47886, 32380, 47889, 47894, 47898, 47901, 47906,
-    47910, 47915, 47920, 47924, 47929, 47933, 47937, 47941, 24282, 24293,
-    47946, 47951, 47957, 47962, 47968, 47974, 30987, 47979, 47983, 47986,
-    47992, 47997, 48002, 48007, 48012, 48017, 48022, 48027, 48032, 48038,
-    48044, 24379, 18795, 48049, 48054, 48059, 48064, 48069, 48074, 48079,
-    48084, 450, 68, 36012, 36017, 36022, 36028, 36033, 36038, 48089, 36042,
-    48093, 48097, 48101, 36047, 36053, 48115, 36064, 36069, 48123, 48128,
-    36075, 48133, 48138, 48147, 48152, 48157, 48166, 48172, 48178, 48184,
-    36092, 48197, 48206, 48212, 36096, 48216, 36101, 48221, 36106, 36111,
-    48224, 48229, 48233, 48239, 15735, 48246, 15745, 48253, 48258, 36116,
-    48262, 48267, 48272, 48277, 48282, 48286, 48291, 48296, 48302, 48307,
-    48312, 48318, 48324, 48329, 48333, 48338, 48343, 48348, 48352, 48357,
-    48362, 48367, 48373, 48379, 48385, 48390, 48394, 48399, 48403, 36120,
-    36125, 36130, 48407, 48411, 48416, 48420, 48432, 36135, 36141, 36147,
-    36159, 48438, 29955, 48442, 48447, 48451, 48456, 48463, 48468, 48473,
-    48478, 48482, 48486, 48496, 48501, 48506, 48510, 48514, 48517, 48525,
-    48530, 36207, 48534, 1407, 48540, 48545, 48551, 48559, 48563, 48572,
-    48580, 48584, 48588, 48596, 48602, 48610, 48626, 48630, 48634, 48638,
-    48643, 48649, 48664, 36244, 1711, 14075, 48668, 1294, 1309, 48680, 48688,
-    48695, 48700, 48707, 48712, 10452, 963, 2575, 11882, 48719, 10350, 48724,
-    48727, 48736, 1202, 48741, 46702, 48748, 48757, 48762, 48766, 48774,
-    25915, 2631, 48781, 12382, 48791, 48797, 2371, 2381, 48806, 48815, 48825,
-    48836, 3508, 39695, 48841, 4234, 4245, 19560, 1207, 48845, 48853, 48860,
-    48865, 48869, 48873, 48878, 27530, 47029, 11973, 48886, 48895, 48904,
-    48912, 48925, 48932, 48943, 48948, 48961, 48974, 48986, 48998, 49010,
-    49021, 49034, 49045, 49056, 49066, 49074, 49082, 49094, 49106, 49117,
-    49126, 49134, 49141, 49153, 49160, 49166, 49175, 49181, 49188, 49201,
-    49206, 49216, 49221, 49227, 49232, 43984, 49236, 46334, 49243, 49250,
-    49258, 49265, 2588, 49272, 49283, 49293, 49302, 49310, 49320, 49328,
-    49337, 49347, 49356, 49361, 49367, 49373, 4083, 49384, 49394, 49403,
-    49412, 49420, 49430, 49438, 49447, 49452, 49457, 49462, 1636, 47, 49470,
-    49478, 49489, 49500, 19181, 49510, 49514, 49521, 49527, 49532, 49536,
-    49547, 49557, 49566, 49577, 19599, 19604, 49582, 49591, 49596, 49606,
-    49611, 49619, 49627, 49634, 49640, 1598, 259, 49644, 49650, 49655, 49658,
-    2119, 2597, 49666, 49670, 49673, 1452, 49679, 16224, 1212, 49684, 49697,
-    2721, 2742, 49711, 49723, 49735, 2756, 2773, 2788, 2804, 2821, 49749,
-    49761, 2836, 49775, 1218, 1224, 1230, 12253, 49780, 49785, 49790, 49794,
-    49809, 49824, 49839, 49854, 49869, 49884, 49899, 49914, 49929, 49944,
-    49959, 49974, 49989, 50004, 50019, 50034, 50049, 50064, 50079, 50094,
-    50109, 50124, 50139, 50154, 50169, 50184, 50199, 50214, 50229, 50244,
-    50259, 50274, 50289, 50304, 50319, 50334, 50349, 50364, 50379, 50394,
-    50409, 50424, 50439, 50454, 50469, 50484, 50499, 50514, 50529, 50544,
-    50559, 50574, 50589, 50604, 50619, 50634, 50649, 50664, 50679, 50694,
-    50709, 50724, 50739, 50754, 50769, 50784, 50799, 50814, 50829, 50844,
-    50859, 50874, 50889, 50904, 50919, 50934, 50949, 50964, 50979, 50994,
-    51009, 51024, 51039, 51054, 51069, 51084, 51099, 51114, 51129, 51144,
-    51159, 51174, 51189, 51204, 51219, 51234, 51249, 51264, 51279, 51294,
-    51309, 51324, 51339, 51354, 51369, 51384, 51399, 51414, 51429, 51444,
-    51459, 51474, 51489, 51504, 51519, 51534, 51549, 51564, 51579, 51594,
-    51609, 51624, 51639, 51654, 51669, 51684, 51699, 51714, 51729, 51744,
-    51759, 51774, 51789, 51804, 51819, 51834, 51849, 51864, 51879, 51894,
-    51909, 51924, 51939, 51954, 51969, 51984, 51999, 52014, 52029, 52044,
-    52059, 52074, 52089, 52104, 52119, 52134, 52149, 52164, 52179, 52194,
-    52209, 52224, 52239, 52254, 52269, 52284, 52299, 52314, 52329, 52344,
-    52359, 52374, 52389, 52404, 52419, 52434, 52449, 52464, 52479, 52494,
-    52509, 52524, 52539, 52554, 52569, 52584, 52599, 52614, 52629, 52644,
-    52659, 52674, 52689, 52704, 52719, 52734, 52749, 52764, 52779, 52794,
-    52809, 52824, 52839, 52854, 52869, 52884, 52899, 52914, 52929, 52944,
-    52959, 52974, 52989, 53004, 53019, 53034, 53049, 53064, 53079, 53094,
-    53109, 53124, 53139, 53154, 53169, 53184, 53199, 53214, 53229, 53244,
-    53259, 53274, 53289, 53304, 53319, 53334, 53349, 53364, 53379, 53394,
-    53409, 53424, 53439, 53454, 53469, 53484, 53499, 53514, 53529, 53544,
-    53559, 53574, 53589, 53604, 53619, 53634, 53649, 53664, 53679, 53694,
-    53709, 53724, 53739, 53754, 53769, 53784, 53799, 53814, 53829, 53844,
-    53859, 53874, 53889, 53904, 53919, 53934, 53949, 53964, 53979, 53994,
-    54009, 54024, 54039, 54054, 54069, 54084, 54099, 54114, 54129, 54144,
-    54159, 54174, 54189, 54204, 54219, 54234, 54249, 54264, 54279, 54294,
-    54309, 54324, 54339, 54354, 54369, 54384, 54399, 54414, 54429, 54444,
-    54459, 54474, 54489, 54504, 54519, 54534, 54549, 54564, 54579, 54594,
-    54609, 54624, 54639, 54654, 54669, 54684, 54699, 54714, 54729, 54744,
-    54759, 54774, 54789, 54804, 54819, 54834, 54849, 54864, 54879, 54894,
-    54909, 54924, 54939, 54954, 54969, 54984, 54999, 55014, 55029, 55044,
-    55059, 55074, 55089, 55104, 55119, 55134, 55149, 55164, 55179, 55194,
-    55209, 55224, 55239, 55254, 55269, 55284, 55299, 55314, 55329, 55344,
-    55359, 55374, 55389, 55404, 55419, 55434, 55449, 55464, 55479, 55494,
-    55509, 55524, 55539, 55554, 55569, 55584, 55599, 55614, 55629, 55644,
-    55659, 55674, 55689, 55704, 55719, 55734, 55749, 55764, 55779, 55794,
-    55809, 55824, 55839, 55854, 55869, 55884, 55899, 55914, 55929, 55944,
-    55959, 55974, 55989, 56004, 56019, 56034, 56049, 56064, 56079, 56094,
-    56109, 56124, 56139, 56154, 56169, 56184, 56199, 56214, 56229, 56244,
-    56259, 56274, 56289, 56304, 56319, 56334, 56349, 56364, 56379, 56394,
-    56409, 56424, 56439, 56454, 56469, 56484, 56499, 56514, 56529, 56544,
-    56559, 56574, 56589, 56604, 56619, 56634, 56649, 56664, 56679, 56694,
-    56709, 56724, 56739, 56754, 56769, 56784, 56799, 56814, 56829, 56844,
-    56859, 56874, 56889, 56904, 56919, 56934, 56949, 56964, 56979, 56994,
-    57009, 57024, 57039, 57054, 57069, 57084, 57099, 57114, 57129, 57144,
-    57159, 57174, 57189, 57204, 57219, 57234, 57249, 57264, 57279, 57294,
-    57309, 57324, 57339, 57354, 57369, 57384, 57399, 57414, 57429, 57444,
-    57459, 57474, 57489, 57504, 57519, 57534, 57549, 57564, 57579, 57594,
-    57609, 57625, 57641, 57657, 57673, 57689, 57705, 57721, 57737, 57753,
-    57769, 57785, 57801, 57817, 57833, 57849, 57865, 57881, 57897, 57913,
-    57929, 57945, 57961, 57977, 57993, 58009, 58025, 58041, 58057, 58073,
-    58089, 58105, 58121, 58137, 58153, 58169, 58185, 58201, 58217, 58233,
-    58249, 58265, 58281, 58297, 58313, 58329, 58345, 58361, 58377, 58393,
-    58409, 58425, 58441, 58457, 58473, 58489, 58505, 58521, 58537, 58553,
-    58569, 58585, 58601, 58617, 58633, 58649, 58665, 58681, 58697, 58713,
-    58729, 58745, 58761, 58777, 58793, 58809, 58825, 58841, 58857, 58873,
-    58889, 58905, 58921, 58937, 58953, 58969, 58985, 59001, 59017, 59033,
-    59049, 59065, 59081, 59097, 59113, 59129, 59145, 59161, 59177, 59193,
-    59209, 59225, 59241, 59257, 59273, 59289, 59305, 59321, 59337, 59353,
-    59369, 59385, 59401, 59417, 59433, 59449, 59465, 59481, 59497, 59513,
-    59529, 59545, 59561, 59577, 59593, 59609, 59625, 59641, 59657, 59673,
-    59689, 59705, 59721, 59737, 59753, 59769, 59785, 59801, 59817, 59833,
-    59849, 59865, 59881, 59897, 59913, 59929, 59945, 59961, 59977, 59993,
-    60009, 60025, 60041, 60057, 60073, 60089, 60105, 60121, 60137, 60153,
-    60169, 60185, 60201, 60217, 60233, 60249, 60265, 60281, 60297, 60313,
-    60329, 60345, 60361, 60377, 60393, 60409, 60425, 60441, 60457, 60473,
-    60489, 60505, 60521, 60537, 60553, 60569, 60585, 60601, 60617, 60633,
-    60649, 60665, 60681, 60697, 60713, 60729, 60745, 60761, 60777, 60793,
-    60809, 60825, 60841, 60857, 60873, 60889, 60905, 60921, 60937, 60953,
-    60969, 60985, 61001, 61017, 61033, 61049, 61065, 61081, 61097, 61113,
-    61129, 61145, 61161, 61177, 61193, 61209, 61225, 61241, 61257, 61273,
-    61289, 61305, 61321, 61337, 61353, 61369, 61385, 61401, 61417, 61433,
-    61449, 61465, 61481, 61497, 61513, 61529, 61545, 61561, 61577, 61593,
-    61609, 61625, 61641, 61657, 61673, 61689, 61705, 61721, 61737, 61753,
-    61769, 61785, 61801, 61817, 61833, 61849, 61865, 61881, 61897, 61913,
-    61929, 61945, 61961, 61977, 61993, 62009, 62025, 62041, 62057, 62073,
-    62089, 62105, 62121, 62137, 62153, 62169, 62185, 62201, 62217, 62233,
-    62249, 62265, 62281, 62297, 62313, 62329, 62345, 62361, 62377, 62393,
-    62409, 62425, 62441, 62457, 62473, 62489, 62505, 62521, 62537, 62553,
-    62569, 62585, 62601, 62617, 62633, 62649, 62665, 62681, 62697, 62713,
-    62729, 62745, 62761, 62777, 62793, 62809, 62825, 62841, 62857, 62873,
-    62889, 62905, 62921, 62937, 62953, 62969, 62985, 63001, 63017, 63033,
-    63049, 63065, 63081, 63097, 63113, 63129, 63145, 63161, 63177, 63193,
-    63209, 63225, 63241, 63257, 63273, 63289, 63305, 63321, 63337, 63353,
-    63369, 63385, 63401, 63417, 63433, 63449, 63465, 63481, 63497, 63513,
-    63529, 63545, 63561, 63577, 63593, 63609, 63625, 63641, 63657, 63673,
-    63689, 63705, 63721, 63737, 63753, 63769, 63785, 63801, 63817, 63833,
-    63849, 63865, 63881, 63897, 63913, 63929, 63945, 63961, 63977, 63993,
-    64009, 64025, 64041, 64057, 64073, 64089, 64105, 64121, 64137, 64153,
-    64169, 64185, 64201, 64217, 64233, 64249, 64265, 64281, 64297, 64313,
-    64329, 64345, 64361, 64377, 64393, 64409, 64425, 64441, 64457, 64473,
-    64489, 64505, 64521, 64537, 64553, 64569, 64585, 64601, 64617, 64633,
-    64649, 64665, 64681, 64697, 64713, 64729, 64745, 64761, 64777, 64793,
-    64809, 64825, 64841, 64857, 64873, 64889, 64905, 64921, 64937, 64953,
-    64969, 64985, 65001, 65017, 65033, 65049, 65065, 65081, 65097, 65113,
-    65129, 65145, 65161, 65177, 65193, 65209, 65225, 65241, 65257, 65273,
-    65289, 65305, 65321, 65337, 65353, 65369, 65385, 65401, 65417, 65433,
-    65449, 65465, 65481, 65497, 65513, 65529, 65545, 65561, 65577, 65593,
-    65609, 65625, 65641, 65657, 65673, 65689, 65705, 65721, 65737, 65753,
-    65769, 65785, 65801, 65817, 65833, 65849, 65865, 65881, 65897, 65913,
-    65929, 65945, 65961, 65977, 65993, 66009, 66025, 66041, 66057, 66073,
-    66089, 66105, 66121, 66137, 66153, 66169, 66185, 66201, 66217, 66233,
-    66249, 66265, 66281, 66290, 66305, 17090, 66314, 66319, 66325, 66331,
-    66341, 66349, 17343, 18025, 11298, 66362, 1460, 1464, 66370, 4163, 31515,
-    7863, 66376, 66381, 66386, 66391, 66396, 66402, 66407, 66413, 66418,
-    66424, 66429, 66434, 66439, 66444, 66450, 66455, 66460, 66465, 66470,
-    66475, 66480, 66485, 66491, 66496, 66502, 66509, 2635, 66514, 66520,
-    9347, 66524, 66529, 66536, 66544, 4174, 4179, 4184, 4189, 65, 66548,
-    66554, 66559, 66564, 66568, 66573, 66577, 66581, 12325, 66585, 66595,
-    66608, 66619, 66632, 66639, 66645, 66653, 11807, 66660, 66665, 66671,
-    66677, 66683, 66688, 66693, 66698, 66703, 66707, 66712, 66717, 66722,
-    66728, 66734, 66740, 66745, 66749, 66754, 66759, 66763, 66768, 66773,
-    66778, 66782, 12341, 12352, 12357, 1503, 66786, 66792, 1508, 19026,
-    66797, 19035, 66802, 66808, 66813, 1539, 66819, 1545, 1551, 12387, 66824,
-    66833, 66841, 66849, 66856, 66860, 66864, 66870, 66875, 35651, 66880,
-    66887, 66894, 66899, 66903, 66907, 66916, 66921, 66926, 66931, 1556, 264,
-    66936, 66940, 19161, 984, 66944, 66951, 66956, 66960, 19197, 1560, 44141,
-    66963, 66968, 66978, 66987, 66992, 66996, 67002, 1565, 46983, 67007,
-    67016, 67022, 67027, 67032, 12626, 12632, 67038, 67050, 67067, 67084,
-    67101, 67118, 67135, 67152, 67169, 67186, 67203, 67220, 67237, 67254,
-    67271, 67288, 67305, 67322, 67339, 67356, 67373, 67390, 67407, 67424,
-    67441, 67458, 67475, 67492, 67509, 67526, 67543, 67560, 67577, 67594,
-    67611, 67628, 67645, 67662, 67679, 67696, 67713, 67730, 67747, 67764,
-    67781, 67798, 67815, 67832, 67849, 67866, 67883, 67894, 67904, 67909,
-    1570, 67913, 67918, 67924, 67929, 67934, 67941, 10369, 1575, 67947,
-    67956, 31894, 67961, 67972, 12643, 67982, 67987, 67993, 67998, 68005,
-    68011, 68016, 1580, 19491, 68021, 68027, 12653, 68033, 68038, 68043,
-    68048, 68053, 68058, 68063, 68068, 1585, 4638, 68073, 68078, 68084,
-    68089, 68094, 68099, 68104, 68109, 68114, 68119, 68124, 68130, 68136,
-    68142, 68147, 68151, 68156, 68161, 68165, 68170, 68175, 68180, 68185,
-    68189, 68194, 68200, 68205, 68210, 68214, 68219, 68224, 68230, 68235,
-    68240, 68246, 68252, 68257, 68261, 68266, 68271, 68276, 68280, 68285,
-    68290, 68295, 68301, 68307, 68312, 68316, 68320, 68325, 68330, 68335,
-    33586, 68339, 68344, 68349, 68355, 68360, 68365, 68369, 68374, 68379,
-    68385, 68390, 68395, 68401, 68407, 68412, 68416, 68421, 68426, 68430,
-    68435, 68440, 68445, 68451, 68457, 68462, 68466, 68471, 68476, 68480,
-    68485, 68490, 68495, 68500, 68504, 68507, 68510, 68515, 68520, 36371,
-    68527, 68535, 68541, 3840, 31837, 68554, 68561, 68567, 68573, 4014,
-    68578, 12795, 68584, 68594, 68609, 68617, 12800, 68628, 68633, 68644,
-    68656, 68668, 68680, 2827, 68692, 68697, 68709, 68713, 68719, 68725,
-    68730, 68739, 68746, 68751, 68756, 68761, 68766, 68771, 68776, 1602,
-    18664, 68781, 68786, 47049, 68790, 68794, 68799, 68803, 19639, 68808,
-    68811, 68816, 68824, 68832, 1606, 12836, 12842, 1611, 68840, 68847,
-    68852, 68861, 68871, 68878, 68883, 68888, 1616, 68895, 68900, 19759,
-    68904, 68909, 68916, 68922, 68926, 68939, 68945, 68956, 68966, 68973,
-    19781, 10263, 10270, 4248, 4254, 68980, 1621, 68985, 68994, 69000, 69008,
-    69015, 69021, 69028, 69040, 69046, 69051, 69058, 69070, 69081, 69090,
-    69100, 69110, 4142, 69118, 35445, 35454, 19821, 69131, 69136, 69141,
-    69146, 69151, 69156, 69161, 1626, 1630, 69166, 69170, 69173, 69184,
-    69189, 1640, 69197, 69202, 69207, 19880, 69219, 69222, 69228, 69234,
-    69239, 69247, 1645, 69252, 69257, 69265, 69273, 69280, 69289, 69297,
-    69306, 69310, 1650, 69319, 1655, 24467, 69324, 69331, 69337, 19967,
-    69345, 69355, 69361, 69366, 69374, 69381, 69390, 69398, 69408, 69417,
-    69427, 69436, 69447, 69457, 69467, 69476, 69486, 69500, 69513, 69522,
-    69530, 69540, 69549, 69561, 69572, 69583, 69593, 19259, 69598, 12988,
-    69607, 69613, 69618, 69625, 69632, 69638, 18870, 69648, 69654, 69659,
-    69670, 69677, 69684, 69689, 69697, 13005, 13010, 69705, 69711, 69715,
-    4232, 4243, 20043, 47137, 69723, 69729, 69734, 69742, 69749, 14056,
-    69754, 69760, 69766, 1666, 69771, 69774, 69780, 69785, 69790, 69795,
-    69800, 69805, 69810, 69815, 69820, 69826, 69832, 1373, 69837, 69842,
-    69847, 69853, 69858, 69863, 69868, 69873, 69878, 69883, 1675, 13, 69889,
-    69893, 69898, 69902, 69906, 69910, 36652, 69915, 26735, 69920, 69925,
-    69929, 69932, 69936, 69940, 69945, 69949, 69954, 69958, 69964, 40163,
-    40168, 40173, 69967, 69974, 69980, 69988, 46755, 69998, 40179, 36916,
-    36667, 36673, 40195, 36679, 70003, 70008, 70012, 36949, 70019, 70022,
-    70026, 70034, 70041, 70046, 70049, 70054, 70059, 70063, 70067, 70070,
-    70080, 70092, 70099, 70105, 36684, 70112, 38567, 70115, 9364, 1108,
-    70118, 70122, 70127, 4057, 70131, 70134, 15778, 70141, 70148, 70161,
-    70169, 70178, 70187, 70193, 70198, 70208, 70221, 70233, 70240, 70245,
-    70254, 70267, 41831, 70285, 70290, 70297, 70303, 70308, 844, 70313,
-    70321, 70328, 70335, 31341, 866, 70341, 70347, 70357, 70365, 70371,
-    70376, 36703, 6637, 36717, 70380, 70390, 70395, 70403, 70413, 70428,
-    70434, 70440, 36727, 70445, 35793, 70449, 70454, 70461, 70466, 70470,
-    70475, 70483, 19824, 70490, 70495, 70499, 6678, 36753, 70503, 70509, 330,
-    70519, 70526, 70533, 70539, 70546, 70551, 70560, 15409, 66972, 66982,
-    70566, 70574, 70578, 70582, 70586, 70590, 70595, 70599, 70605, 70613,
-    70618, 70623, 70630, 70635, 70639, 70644, 70648, 70652, 70658, 70664,
-    70669, 70673, 70678, 70682, 36877, 70686, 36883, 36889, 70691, 70697,
-    70704, 70709, 70713, 35810, 19478, 70716, 70720, 70725, 70732, 70738,
-    70742, 70747, 46351, 70753, 70757, 70764, 70768, 70773, 70779, 70785,
-    70791, 70803, 70812, 70822, 70828, 70835, 70840, 70845, 70849, 70852,
-    70858, 70865, 70870, 70875, 70882, 70889, 70896, 70902, 70907, 70912,
-    70920, 36894, 2465, 70925, 70930, 70936, 70941, 70947, 70952, 70957,
-    70962, 70968, 36915, 70973, 70979, 70985, 70991, 36985, 70996, 71001,
-    71006, 36996, 71011, 71016, 71021, 71027, 71033, 37001, 71038, 71043,
-    71048, 37056, 37062, 71053, 71058, 37067, 37089, 32170, 37095, 37099,
-    71063, 13757, 71067, 71075, 71081, 71089, 71096, 71102, 71112, 71118,
-    71125, 12225, 37113, 71131, 71144, 71153, 71159, 71168, 71174, 71180,
-    71187, 27078, 71195, 71202, 71212, 71220, 71223, 37057, 71228, 71235,
-    71240, 71244, 71248, 71253, 71257, 4371, 71262, 71267, 71272, 40257,
-    40262, 71276, 40276, 71281, 40281, 71286, 71292, 40293, 40299, 40305,
-    71297, 71303, 25970, 71314, 71317, 71329, 71337, 37136, 71341, 71350,
-    71360, 71369, 37146, 71374, 71381, 71390, 71396, 71404, 71411, 71418,
-    6729, 4978, 71423, 37068, 71429, 71432, 71438, 71445, 71450, 71455,
-    26982, 71459, 71465, 71471, 71476, 71481, 71485, 71491, 71497, 38451,
-    71502, 41446, 43251, 43257, 37177, 37182, 71506, 71510, 71514, 71517,
-    71530, 71536, 71540, 71543, 71548, 38820, 71552, 35815, 24408, 71558,
-    6658, 6666, 10069, 71561, 71566, 71571, 71576, 71581, 71586, 71591,
-    71596, 71601, 71606, 71612, 71617, 71622, 71628, 71633, 71638, 71643,
-    71648, 71653, 71658, 71664, 71669, 71675, 71680, 71685, 71690, 71695,
-    71700, 71705, 71710, 71715, 71720, 71725, 71731, 71736, 71741, 71746,
-    71751, 71756, 71761, 71767, 71772, 71777, 71782, 71787, 71792, 71797,
-    71802, 71807, 71812, 71818, 71823, 71828, 71833, 71838, 71844, 71850,
-    71855, 71861, 71866, 71871, 71876, 71881, 71886, 1453, 156, 71891, 71895,
-    71899, 71903, 28871, 71907, 71911, 71916, 71920, 71925, 71929, 71934,
-    71939, 71944, 71948, 71952, 71957, 71961, 15488, 71966, 71970, 71977,
-    71987, 17688, 71996, 72005, 72009, 72014, 72019, 72023, 72027, 28659,
-    3183, 72031, 72037, 20325, 72041, 72050, 72058, 72064, 72069, 72081,
-    72093, 72098, 72102, 72107, 72111, 72117, 72123, 72128, 72138, 72148,
-    72154, 72162, 72167, 72171, 72177, 72182, 72189, 72195, 72200, 72209,
-    72218, 72222, 18204, 72225, 72234, 72242, 72254, 72265, 72276, 72285,
-    72289, 72298, 72306, 72316, 72324, 72331, 72341, 72347, 72352, 72359,
-    72368, 72374, 72379, 72386, 72392, 72403, 60, 35588, 72409, 30253, 30263,
-    72415, 72423, 72430, 72436, 72440, 72450, 72461, 72469, 72478, 72483,
-    72488, 72493, 72497, 72501, 20272, 72509, 72513, 72519, 72529, 72536,
-    72542, 72548, 40356, 72552, 72554, 72557, 72563, 72567, 72578, 72588,
-    72594, 72601, 72608, 15425, 72616, 72622, 72631, 72640, 72646, 11169,
-    72652, 72658, 72663, 72668, 72675, 72680, 72687, 72693, 72698, 72706,
-    72719, 72728, 72737, 69462, 69472, 72747, 72753, 72762, 72768, 72774,
-    72781, 72788, 72795, 72802, 72809, 72814, 72818, 72822, 72825, 72835,
-    72839, 72851, 9733, 72860, 72871, 72876, 72880, 69481, 72886, 72893,
-    72902, 72910, 72918, 72923, 72927, 72932, 72937, 72947, 72955, 72967,
-    72972, 72976, 72980, 72986, 72994, 73001, 73013, 73021, 73032, 73039,
-    73045, 73055, 73061, 73065, 73074, 73083, 73090, 73096, 73101, 73105,
-    73109, 73113, 73122, 73131, 73140, 73146, 73152, 73158, 73163, 73170,
-    73176, 73184, 73191, 73197, 14520, 73202, 73208, 73212, 16579, 73216,
-    73221, 73231, 73236, 73245, 73251, 73257, 73265, 73272, 73276, 73280,
-    73287, 73293, 73301, 73308, 73314, 73325, 73329, 73333, 73337, 73340,
-    73346, 73351, 73356, 73360, 73364, 73373, 73381, 73388, 73394, 73401,
-    27708, 46480, 73406, 73414, 73418, 73422, 73425, 73433, 73440, 73446,
-    73455, 73463, 73469, 73474, 73478, 73483, 73488, 73492, 73496, 73500,
-    73505, 73514, 73518, 73525, 43360, 73529, 73535, 73543, 73547, 73553,
-    73561, 73567, 73572, 73583, 73591, 73597, 73606, 26117, 73614, 73621,
-    73628, 73635, 73642, 73649, 49969, 15240, 73656, 73663, 73668, 40392,
-    4603, 73674, 73679, 73684, 73690, 73696, 73702, 73707, 73712, 73717,
-    73722, 73728, 73733, 73739, 73744, 73750, 73755, 73760, 73765, 73770,
-    73775, 73780, 73785, 73791, 73796, 73802, 73807, 73812, 73817, 73822,
-    73827, 73832, 73838, 73843, 73848, 73853, 73858, 73863, 73868, 73873,
-    73878, 73883, 73888, 73894, 73899, 73904, 73909, 73914, 73919, 73924,
-    73929, 73934, 73940, 73945, 73950, 73955, 73960, 73965, 73970, 73975,
-    73980, 73985, 73990, 73995, 74000, 74006, 1830, 282, 74011, 44259, 74015,
-    74018, 74023, 74027, 74030, 3554, 74035, 74040, 74044, 74053, 74064,
-    74081, 74099, 74107, 72914, 74114, 74117, 74127, 74134, 74143, 74159,
-    74168, 74178, 74183, 74196, 74206, 74215, 74223, 74237, 74245, 74254,
-    74258, 74261, 74268, 74274, 74285, 74292, 74304, 74315, 74326, 74335,
-    74342, 1213, 772, 74352, 2668, 74356, 74361, 74370, 1013, 8806, 23861,
-    74378, 74386, 74400, 74413, 74417, 74422, 74427, 74432, 74438, 74444,
-    74449, 9356, 17731, 74454, 74458, 74466, 9793, 74471, 74477, 74486,
-    74494, 1683, 12849, 1023, 4286, 74498, 74502, 74511, 74521, 2419, 31065,
-    74530, 74536, 19731, 31080, 74542, 4451, 13231, 74548, 74555, 69179,
-    74559, 74563, 74569, 74574, 74579, 3773, 160, 3799, 74584, 74596, 74600,
-    74604, 74610, 74615, 31914, 74619, 13219, 2862, 4, 74624, 74634, 74645,
-    74656, 74666, 74672, 74683, 74690, 74696, 74702, 74710, 74717, 74723,
-    74733, 74743, 74753, 74762, 27065, 1225, 74767, 74771, 74775, 74781,
-    74785, 2885, 2891, 9353, 2274, 74789, 74793, 74802, 74810, 74821, 74829,
-    74837, 74843, 74848, 74859, 74870, 74878, 74884, 74889, 10978, 74899,
-    74907, 74911, 74915, 74920, 74924, 74936, 32363, 17633, 74943, 74953,
-    74959, 74965, 7739, 11080, 74975, 74986, 74997, 75007, 75016, 75020,
-    75027, 1015, 1095, 75037, 75042, 75050, 68905, 75058, 75063, 75074,
-    75081, 75095, 16388, 504, 75105, 75112, 75116, 75120, 75128, 75137,
-    75145, 19776, 75151, 75165, 75172, 75178, 75186, 75195, 75202, 75212,
-    75220, 75227, 75235, 75242, 4250, 116, 75250, 75261, 75265, 75277, 75283,
-    13427, 204, 75288, 10401, 75293, 2930, 75297, 75304, 75310, 75321, 75331,
-    75339, 75346, 9744, 75353, 75362, 75370, 4331, 75383, 4348, 75387, 75392,
-    75398, 75403, 75408, 75413, 2935, 540, 75419, 75432, 75436, 75441, 2940,
-    1829, 892, 75445, 4352, 75453, 75459, 75463, 783, 75473, 75482, 75487,
-    3790, 75491, 17382, 17389, 53331, 75495, 4383, 4260, 15118, 75503, 75510,
-    75515, 27129, 75519, 75526, 75532, 75537, 75542, 17402, 192, 75547,
-    75559, 75565, 75573, 2952, 1720, 75581, 75583, 75588, 75593, 75598,
-    75604, 75609, 75614, 75619, 75624, 75629, 75634, 75640, 75645, 75650,
-    75655, 75660, 75665, 75670, 75675, 75680, 75686, 75691, 75696, 75701,
-    75707, 75712, 75718, 75723, 75728, 75733, 75738, 75743, 75748, 75753,
-    75759, 75764, 75770, 75775, 75780, 75785, 75790, 75795, 75800, 75805,
-    75810, 9425, 9438, 4399, 4404, 4409, 4414, 26, 75816, 75822, 75827,
-    75832, 75837, 75843, 75848, 75852, 75856, 75861, 75867, 75871, 75877,
-    75882, 75887, 75893, 75898, 75902, 75907, 75912, 75916, 75919, 75921,
-    75925, 75928, 75935, 75940, 75944, 75949, 75953, 75957, 75961, 75970,
-    75974, 37410, 75977, 37415, 75984, 75989, 37420, 75998, 76007, 37426,
-    76012, 37431, 76021, 76026, 13470, 76030, 76035, 76040, 37436, 76044,
-    76053, 48174, 76057, 76060, 76064, 9024, 76070, 76073, 76078, 76083,
-    76087, 4072, 37441, 76090, 76094, 76097, 76108, 76113, 76117, 76123,
-    76131, 76144, 76148, 76156, 76165, 76171, 76176, 76182, 76186, 76192,
-    76198, 76206, 76211, 76215, 76222, 76228, 76236, 76245, 76253, 37444,
-    76260, 76270, 76279, 76287, 76298, 76311, 76316, 76321, 76325, 76334,
-    76340, 76347, 76360, 76372, 76383, 76395, 76402, 76411, 76420, 76429,
-    76436, 76442, 76449, 76457, 76464, 76472, 76481, 76489, 76496, 76504,
-    76513, 76521, 76530, 76540, 76549, 76557, 76564, 76572, 76581, 76589,
-    76598, 76608, 76617, 76625, 76634, 76644, 76653, 76663, 76674, 76684,
-    76693, 76701, 76708, 76716, 76725, 76733, 76742, 76752, 76761, 76769,
-    76778, 76788, 76797, 76807, 76818, 76828, 76837, 76845, 76854, 76864,
-    76873, 76883, 76894, 76904, 76913, 76923, 76934, 76944, 76955, 76967,
-    76978, 76988, 76997, 77005, 77012, 77020, 77029, 77037, 77046, 77056,
-    77065, 77073, 77082, 77092, 77101, 77111, 77122, 77132, 77141, 77149,
-    77158, 77168, 77177, 77187, 77198, 77208, 77217, 77227, 77238, 77248,
-    77259, 77271, 77282, 77292, 77301, 77309, 77318, 77328, 77337, 77347,
-    77358, 77368, 77377, 77387, 77398, 77408, 77419, 77431, 77442, 77452,
-    77461, 77471, 77482, 77492, 77503, 77515, 77526, 77536, 77547, 77559,
-    77570, 77582, 77595, 77607, 77618, 77628, 77637, 77645, 77652, 77660,
-    77669, 77677, 77686, 77696, 77705, 77713, 77722, 77732, 77741, 77751,
-    77762, 77772, 77781, 77789, 77798, 77808, 77817, 77827, 77838, 77848,
-    77857, 77867, 77878, 77888, 77899, 77911, 77922, 77932, 77941, 77949,
-    77958, 77968, 77977, 77987, 77998, 78008, 78017, 78027, 78038, 78048,
-    78059, 78071, 78082, 78092, 78101, 78111, 78122, 78132, 78143, 78155,
-    78166, 78176, 78187, 78199, 78210, 78222, 78235, 78247, 78258, 78268,
-    78277, 78285, 78294, 78304, 78313, 78323, 78334, 78344, 78353, 78363,
-    78374, 78384, 78395, 78407, 78418, 78428, 78437, 78447, 78458, 78468,
-    78479, 78491, 78502, 78512, 78523, 78535, 78546, 78558, 78571, 78583,
-    78594, 78604, 78613, 78623, 78634, 78644, 78655, 78667, 78678, 78688,
-    78699, 78711, 78722, 78734, 78747, 78759, 78770, 78780, 78791, 78803,
-    78814, 78826, 78839, 78851, 78862, 78874, 78887, 78899, 78912, 78926,
-    78939, 78951, 78962, 78972, 78981, 78989, 78996, 79001, 79005, 8837,
-    79012, 79017, 37454, 79023, 79028, 37459, 79034, 23983, 29818, 79039,
-    79045, 79053, 79059, 79065, 79072, 79079, 79084, 79089, 79093, 79098,
-    79102, 79105, 79109, 79118, 79127, 79135, 79141, 79153, 79164, 79168,
-    3245, 8812, 79173, 79176, 79179, 79181, 79185, 79189, 79193, 79199,
-    79204, 29881, 79209, 79213, 79216, 79221, 79225, 79232, 79238, 79242,
-    6822, 79246, 79251, 37481, 79255, 79262, 79271, 79279, 79285, 79296,
-    79304, 79313, 79321, 79328, 79335, 79341, 79352, 37486, 79357, 79368,
-    79380, 79388, 79399, 79408, 79416, 79427, 79432, 79440, 2630, 79445,
-    39762, 79458, 79462, 79474, 79482, 79487, 79495, 79506, 20490, 79515,
-    79521, 79528, 79536, 79542, 37496, 79547, 4377, 66345, 79554, 79557,
-    79565, 79578, 79591, 79604, 79617, 79624, 79635, 79644, 79649, 49786,
-    49791, 79653, 79657, 79665, 79672, 79681, 79689, 79695, 79704, 79712,
-    79719, 79727, 79731, 79740, 79749, 79759, 79772, 79785, 79795, 37501,
-    79801, 79808, 79814, 79820, 37507, 79825, 79828, 79832, 79840, 79849,
-    49569, 79857, 79866, 79874, 79881, 79889, 79899, 79908, 79917, 38949,
-    79926, 79937, 79952, 79962, 10434, 24737, 79971, 79976, 79981, 79985,
-    18862, 79990, 79995, 80001, 80006, 80011, 80017, 80022, 80027, 24697,
-    80032, 80039, 80047, 80055, 80063, 80068, 80075, 80082, 80087, 1738,
-    80091, 80095, 80103, 80111, 37524, 80117, 80123, 80135, 80141, 80148,
-    80152, 80159, 80164, 80171, 80177, 80184, 80195, 80205, 80215, 80227,
-    80233, 80241, 80247, 80257, 80267, 37551, 80276, 80285, 80291, 80303,
-    80314, 80321, 80326, 80330, 80338, 80344, 80349, 80354, 80361, 80369,
-    80381, 80391, 80400, 80409, 80417, 80424, 39595, 27496, 80430, 80435,
-    80439, 80443, 80448, 80456, 80462, 80473, 80486, 80491, 80498, 37556,
-    80503, 80515, 80524, 80532, 80542, 80553, 80566, 80573, 80582, 80591,
-    80599, 80604, 80610, 80614, 1442, 80619, 80624, 80629, 80634, 80640,
-    80645, 80650, 80656, 80662, 80667, 80671, 80676, 80681, 80686, 66912,
-    80691, 80696, 80701, 80706, 80712, 80718, 80723, 80727, 80732, 18861,
-    80737, 80743, 80748, 80754, 80759, 80764, 80769, 80774, 80778, 80784,
-    80789, 80798, 80803, 80808, 80813, 80818, 80822, 80829, 80835, 4707,
-    20088, 3210, 80840, 80844, 80849, 80853, 80857, 80861, 53586, 80865,
-    80790, 80867, 80877, 37565, 80880, 80885, 80894, 80900, 6791, 37570,
-    80904, 80910, 80915, 80921, 80926, 80930, 80937, 80942, 80952, 80961,
-    80965, 80971, 80977, 80983, 80987, 80995, 81002, 81010, 81018, 37575,
-    81025, 81028, 81039, 81046, 81052, 81057, 81061, 81067, 81075, 81082,
-    81087, 81091, 81100, 81108, 81114, 81119, 37580, 81126, 26955, 81138,
-    81144, 81149, 81155, 81162, 81168, 24430, 31538, 81174, 81179, 81185,
-    81189, 81201, 80823, 80830, 24629, 81211, 81216, 81223, 81229, 81236,
-    81242, 81253, 81258, 81266, 10139, 81271, 81274, 81280, 81284, 81288,
-    81291, 81297, 81303, 37297, 4708, 1457, 15537, 81310, 81316, 81322,
-    81328, 81334, 81340, 81346, 81352, 81358, 81363, 81368, 81373, 81378,
-    81383, 81388, 81393, 81398, 81403, 81408, 81413, 81418, 81423, 81429,
-    81434, 81439, 81445, 81450, 81455, 81461, 81467, 81473, 81479, 81485,
-    81491, 81497, 81503, 81509, 81514, 81519, 81525, 81530, 81535, 81541,
-    81546, 81551, 81556, 81561, 81566, 81571, 81576, 81581, 81586, 81591,
-    81596, 81601, 81607, 81612, 81617, 81622, 81628, 81633, 81638, 81643,
-    81648, 81654, 81659, 81664, 81669, 81674, 81679, 81684, 81689, 81694,
-    81699, 81704, 81709, 81714, 81719, 81724, 81729, 81734, 81739, 81744,
-    81749, 81755, 81760, 81765, 81770, 81775, 81780, 81785, 81790, 979, 169,
-    81795, 81799, 81803, 81808, 81816, 81820, 81827, 81835, 81839, 81852,
-    81860, 81865, 81870, 30316, 81874, 81879, 81883, 81888, 81892, 81900,
-    81904, 23991, 81909, 81913, 69719, 81917, 81920, 81928, 81936, 81944,
-    81949, 81954, 81961, 81968, 81974, 81980, 81985, 81992, 81997, 82005,
-    74405, 82012, 82017, 69491, 82024, 82029, 82033, 82040, 82046, 82053,
-    69518, 13542, 82061, 82066, 82071, 82075, 82078, 82089, 82098, 82104,
-    82109, 82113, 82123, 82132, 47965, 82136, 82140, 82147, 82160, 82166,
-    82174, 82183, 82194, 82205, 82216, 82227, 82236, 82242, 82251, 82259,
-    82269, 82282, 82290, 82297, 82308, 82314, 82319, 82324, 82330, 82340,
-    82346, 82356, 82364, 82371, 82381, 82390, 80505, 82398, 82404, 82412,
-    82418, 72959, 82425, 82430, 82433, 82437, 82443, 82447, 82450, 82458,
-    82464, 82470, 82478, 82490, 82502, 82509, 82514, 82518, 82529, 82537,
-    82544, 82556, 82564, 82571, 82579, 82586, 82592, 82597, 82607, 82616,
-    82624, 82629, 82639, 82648, 48830, 82655, 82659, 82664, 82672, 82679,
-    82685, 82689, 82699, 82710, 82718, 82725, 82737, 82749, 82758, 79448,
-    82765, 82775, 82787, 82798, 82812, 82820, 82830, 82837, 82845, 82858,
-    82870, 82879, 82887, 82897, 82908, 82920, 82929, 82939, 82949, 82958,
-    82965, 82974, 82989, 82997, 83007, 83016, 83024, 83037, 66315, 83052,
-    83062, 83071, 83083, 83093, 83105, 83116, 83130, 83144, 83158, 83172,
-    83186, 83200, 83214, 83228, 83242, 83256, 83270, 83284, 83298, 83312,
-    83326, 83340, 83354, 83368, 83382, 83396, 83410, 83424, 83438, 83452,
-    83466, 83480, 83494, 83508, 83522, 83536, 83550, 83564, 83578, 83592,
-    83606, 83620, 83634, 83648, 83662, 83676, 83690, 83704, 83718, 83732,
-    83746, 83760, 83774, 83788, 83802, 83816, 83830, 83844, 83858, 83872,
-    83886, 83900, 83914, 83928, 83942, 83956, 83970, 83984, 83998, 84012,
-    84026, 84040, 84054, 84068, 84082, 84096, 84110, 84124, 84138, 84152,
-    84166, 84180, 84194, 84208, 84222, 84236, 84250, 84264, 84278, 84292,
-    84306, 84320, 84334, 84348, 84362, 84376, 84390, 84404, 84418, 84432,
-    84446, 84460, 84474, 84488, 84502, 84516, 84530, 84544, 84558, 84572,
-    84586, 84600, 84614, 84628, 84642, 84656, 84670, 84684, 84698, 84712,
-    84726, 84740, 84754, 84768, 84782, 84796, 84810, 84824, 84838, 84852,
-    84866, 84880, 84894, 84908, 84922, 84936, 84950, 84964, 84978, 84992,
-    85006, 85020, 85034, 85048, 85062, 85076, 85090, 85104, 85118, 85132,
-    85146, 85160, 85174, 85188, 85202, 85216, 85230, 85244, 85258, 85272,
-    85286, 85300, 85314, 85328, 85342, 85356, 85370, 85384, 85398, 85412,
-    85426, 85440, 85454, 85468, 85482, 85496, 85510, 85524, 85538, 85552,
-    85566, 85580, 85594, 85608, 85622, 85636, 85650, 85664, 85678, 85692,
-    85706, 85720, 85734, 85748, 85762, 85776, 85790, 85804, 85818, 85832,
-    85846, 85860, 85874, 85888, 85902, 85916, 85930, 85944, 85958, 85972,
-    85986, 86000, 86014, 86028, 86042, 86056, 86070, 86084, 86098, 86112,
-    86126, 86140, 86154, 86168, 86182, 86196, 86210, 86224, 86238, 86252,
-    86266, 86280, 86294, 86308, 86322, 86336, 86350, 86364, 86378, 86392,
-    86406, 86420, 86434, 86448, 86462, 86476, 86490, 86504, 86518, 86532,
-    86546, 86560, 86574, 86588, 86602, 86616, 86630, 86644, 86658, 86672,
-    86686, 86700, 86714, 86728, 86742, 86756, 86770, 86784, 86798, 86812,
-    86826, 86840, 86854, 86868, 86882, 86896, 86910, 86924, 86938, 86952,
-    86966, 86980, 86994, 87008, 87022, 87036, 87050, 87064, 87078, 87092,
-    87106, 87120, 87134, 87148, 87162, 87176, 87190, 87204, 87218, 87232,
-    87246, 87260, 87274, 87288, 87302, 87316, 87330, 87344, 87358, 87372,
-    87386, 87400, 87414, 87428, 87442, 87456, 87470, 87484, 87498, 87512,
-    87526, 87540, 87554, 87568, 87582, 87596, 87610, 87624, 87638, 87652,
-    87666, 87680, 87694, 87708, 87722, 87736, 87750, 87764, 87778, 87792,
-    87806, 87820, 87834, 87848, 87862, 87876, 87890, 87904, 87918, 87932,
-    87946, 87960, 87974, 87988, 88002, 88016, 88030, 88044, 88058, 88072,
-    88086, 88100, 88114, 88128, 88142, 88156, 88170, 88184, 88198, 88212,
-    88226, 88240, 88254, 88268, 88282, 88296, 88310, 88324, 88338, 88352,
-    88366, 88380, 88394, 88408, 88422, 88436, 88450, 88464, 88478, 88492,
-    88506, 88520, 88534, 88548, 88562, 88576, 88590, 88604, 88618, 88632,
-    88646, 88660, 88674, 88688, 88702, 88716, 88730, 88744, 88758, 88772,
-    88786, 88800, 88814, 88828, 88842, 88856, 88870, 88884, 88898, 88912,
-    88926, 88940, 88954, 88968, 88982, 88996, 89010, 89024, 89038, 89052,
-    89066, 89080, 89094, 89108, 89122, 89136, 89150, 89164, 89178, 89192,
-    89206, 89220, 89234, 89248, 89262, 89276, 89290, 89304, 89318, 89332,
-    89346, 89360, 89374, 89388, 89402, 89416, 89430, 89444, 89458, 89472,
-    89486, 89500, 89514, 89528, 89542, 89556, 89570, 89584, 89598, 89612,
-    89626, 89640, 89654, 89668, 89682, 89696, 89710, 89724, 89738, 89752,
-    89766, 89780, 89794, 89808, 89822, 89836, 89850, 89864, 89878, 89892,
-    89906, 89920, 89934, 89948, 89962, 89976, 89990, 90004, 90018, 90032,
-    90046, 90060, 90074, 90088, 90102, 90116, 90130, 90144, 90158, 90172,
-    90186, 90200, 90214, 90228, 90242, 90256, 90270, 90284, 90298, 90312,
-    90326, 90340, 90354, 90368, 90382, 90396, 90410, 90424, 90438, 90452,
-    90466, 90480, 90494, 90508, 90522, 90536, 90550, 90564, 90578, 90592,
-    90606, 90620, 90634, 90648, 90662, 90676, 90690, 90704, 90718, 90732,
-    90746, 90760, 90774, 90788, 90802, 90816, 90830, 90844, 90858, 90872,
-    90886, 90900, 90914, 90928, 90942, 90956, 90970, 90984, 90998, 91012,
-    91026, 91040, 91054, 91068, 91082, 91096, 91110, 91124, 91138, 91152,
-    91166, 91180, 91194, 91208, 91222, 91236, 91250, 91264, 91278, 91292,
-    91306, 91320, 91334, 91348, 91362, 91376, 91390, 91404, 91418, 91432,
-    91446, 91460, 91474, 91488, 91502, 91516, 91530, 91544, 91558, 91572,
-    91586, 91600, 91614, 91628, 91642, 91656, 91670, 91684, 91698, 91712,
-    91726, 91740, 91754, 91768, 91782, 91796, 91810, 91824, 91838, 91852,
-    91866, 91880, 91894, 91908, 91922, 91936, 91950, 91964, 91978, 91992,
-    92006, 92020, 92034, 92048, 92062, 92076, 92090, 92104, 92118, 92132,
-    92146, 92160, 92174, 92188, 92202, 92216, 92230, 92244, 92258, 92272,
-    92286, 92300, 92314, 92328, 92342, 92356, 92370, 92384, 92398, 92412,
-    92426, 92440, 92454, 92468, 92482, 92496, 92510, 92524, 92538, 92552,
-    92566, 92580, 92594, 92608, 92622, 92636, 92650, 92664, 92678, 92692,
-    92706, 92720, 92734, 92748, 92762, 92776, 92790, 92804, 92818, 92832,
-    92846, 92860, 92874, 92888, 92902, 92916, 92930, 92944, 92958, 92972,
-    92986, 93000, 93014, 93028, 93042, 93056, 93070, 93084, 93098, 93112,
-    93126, 93140, 93154, 93168, 93182, 93196, 93210, 93224, 93238, 93252,
-    93266, 93280, 93294, 93308, 93322, 93336, 93350, 93364, 93378, 93392,
-    93406, 93420, 93434, 93448, 93462, 93476, 93490, 93504, 93518, 93532,
-    93546, 93560, 93574, 93588, 93602, 93616, 93630, 93644, 93658, 93672,
-    93686, 93695, 93706, 93717, 93727, 93738, 93746, 93754, 93760, 93770,
-    93778, 93784, 33472, 93789, 93795, 93804, 93816, 93821, 93828, 10992,
-    20510, 93834, 93843, 93848, 93852, 93859, 93865, 93870, 93875, 93883,
-    93891, 93896, 93904, 13996, 93908, 93911, 93913, 93928, 93941, 93948,
-    93954, 93965, 93970, 93974, 93979, 93986, 93992, 93997, 94005, 74999,
-    75009, 94011, 94018, 94028, 12212, 94035, 94040, 33710, 94049, 94054,
-    94061, 94071, 94079, 94087, 94096, 94105, 94111, 94117, 94124, 94131,
-    94136, 94140, 94148, 69535, 94153, 94162, 94170, 94177, 94182, 94186,
-    94195, 94201, 94204, 94208, 94217, 94227, 81847, 94236, 94240, 94248,
-    94252, 94258, 94269, 94279, 20519, 94290, 94299, 94307, 94315, 94322,
-    69554, 9590, 94330, 94334, 94343, 94350, 94353, 31419, 94356, 94360,
-    94365, 94382, 94394, 12170, 94406, 94411, 94416, 94421, 24081, 94425,
-    94430, 94435, 94441, 94446, 6436, 94451, 24085, 94456, 94461, 94467,
-    94474, 94479, 94484, 94490, 94496, 94502, 94507, 94513, 94517, 94531,
-    94539, 94547, 94553, 94558, 94565, 94575, 94584, 94589, 94594, 94599,
-    94607, 94618, 94623, 94629, 94634, 94643, 68029, 4637, 94648, 94666,
-    94685, 94698, 94712, 94728, 94735, 94742, 94751, 94758, 94764, 94771,
-    94776, 94782, 94788, 94796, 94802, 94807, 94812, 94828, 12183, 94842,
-    94849, 94857, 94863, 94867, 94870, 94875, 94880, 94887, 94892, 94901,
-    94907, 94912, 94918, 94924, 94933, 94942, 41290, 94947, 94955, 94964,
-    13611, 94973, 94979, 94987, 94993, 94999, 95005, 95010, 95017, 95023,
-    13622, 95028, 95031, 95036, 37607, 95046, 95055, 95060, 95066, 95071,
-    95079, 95086, 95097, 95113, 95129, 95145, 95161, 95177, 95193, 95209,
-    95225, 95241, 95257, 95273, 95289, 95305, 95321, 95337, 95353, 95369,
-    95385, 95401, 95417, 95433, 95449, 95465, 95481, 95497, 95513, 95529,
-    95545, 95561, 95577, 95593, 95609, 95625, 95641, 95657, 95673, 95689,
-    95705, 95721, 95737, 95753, 95769, 95785, 95801, 95817, 95833, 95849,
-    95865, 95881, 95897, 95913, 95929, 95945, 95961, 95977, 95993, 96009,
-    96025, 96041, 96057, 96073, 96089, 96105, 96121, 96137, 96153, 96169,
-    96185, 96201, 96217, 96233, 96249, 96265, 96281, 96297, 96313, 96329,
-    96345, 96361, 96377, 96393, 96409, 96425, 96441, 96457, 96473, 96489,
-    96505, 96521, 96537, 96553, 96569, 96585, 96601, 96617, 96633, 96649,
-    96665, 96681, 96697, 96713, 96729, 96745, 96761, 96777, 96793, 96809,
-    96825, 96841, 96857, 96873, 96889, 96905, 96921, 96937, 96953, 96969,
-    96985, 97001, 97017, 97033, 97049, 97065, 97081, 97097, 97113, 97129,
-    97145, 97161, 97177, 97193, 97209, 97225, 97241, 97257, 97273, 97289,
-    97305, 97321, 97337, 97353, 97369, 97385, 97401, 97417, 97433, 97449,
-    97465, 97481, 97497, 97513, 97529, 97545, 97561, 97577, 97593, 97609,
-    97625, 97641, 97657, 97673, 97689, 97705, 97721, 97737, 97753, 97769,
-    97785, 97801, 97817, 97833, 97849, 97865, 97881, 97897, 97913, 97929,
-    97945, 97961, 97977, 97993, 98009, 98025, 98041, 98057, 98073, 98089,
-    98105, 98121, 98137, 98153, 98169, 98185, 98201, 98217, 98233, 98249,
-    98265, 98281, 98297, 98313, 98329, 98345, 98361, 98377, 98393, 98409,
-    98425, 98441, 98457, 98473, 98489, 98505, 98521, 98537, 98553, 98569,
-    98585, 98601, 98617, 98633, 98649, 98665, 98681, 98697, 98713, 98729,
-    98745, 98761, 98777, 98793, 98809, 98825, 98841, 98857, 98873, 98889,
-    98905, 98921, 98937, 98953, 98969, 98985, 99001, 99017, 99033, 99049,
-    99065, 99081, 99097, 99113, 99129, 99145, 99161, 99177, 99193, 99209,
-    99225, 99241, 99257, 99273, 99289, 99305, 99321, 99337, 99353, 99369,
-    99385, 99401, 99417, 99433, 99449, 99465, 99481, 99497, 99513, 99529,
-    99545, 99561, 99577, 99593, 99609, 99625, 99641, 99657, 99673, 99689,
-    99705, 99721, 99737, 99753, 99769, 99785, 99801, 99817, 99833, 99849,
-    99865, 99881, 99897, 99913, 99929, 99945, 99961, 99977, 99993, 100009,
-    100025, 100041, 100057, 100073, 100089, 100105, 100121, 100137, 100153,
-    100169, 100185, 100201, 100217, 100233, 100249, 100265, 100281, 100297,
-    100313, 100329, 100345, 100361, 100377, 100393, 100409, 100425, 100441,
-    100457, 100473, 100489, 100505, 100521, 100537, 100553, 100569, 100585,
-    100601, 100617, 100633, 100649, 100665, 100681, 100697, 100713, 100729,
-    100745, 100761, 100777, 100793, 100809, 100825, 100841, 100857, 100873,
-    100889, 100905, 100921, 100937, 100953, 100969, 100985, 101001, 101017,
-    101033, 101049, 101065, 101081, 101097, 101113, 101129, 101145, 101161,
-    101177, 101193, 101209, 101225, 101241, 101257, 101273, 101289, 101305,
-    101321, 101337, 101353, 101369, 101385, 101401, 101417, 101433, 101443,
-    101448, 101456, 74328, 101461, 101467, 101472, 101479, 101488, 101496,
-    101500, 4231, 101506, 101513, 101519, 101523, 19842, 44355, 3219, 101528,
-    101532, 101536, 101543, 101549, 101558, 101564, 101571, 101575, 101596,
-    101618, 101634, 101651, 101670, 101679, 101689, 101697, 101704, 101711,
-    101717, 31280, 101731, 101735, 101741, 101749, 101761, 101767, 101775,
-    101782, 101787, 101792, 101796, 101804, 101811, 101815, 101821, 101827,
-    101832, 3879, 49986, 101838, 101842, 101846, 101850, 101855, 101860,
-    101865, 101871, 101877, 101883, 101890, 101896, 101903, 101909, 101915,
-    101920, 101926, 101931, 101935, 101940, 101944, 101949, 50001, 101953,
-    101958, 101966, 101970, 101975, 101982, 101991, 101997, 102006, 102010,
-    102017, 102021, 102024, 102031, 102037, 102046, 102056, 102066, 102071,
-    102075, 102082, 102090, 102099, 102103, 102111, 102117, 102122, 102127,
-    102133, 102139, 102144, 102148, 102154, 102159, 102163, 102167, 102170,
-    102175, 102183, 102193, 102199, 102204, 102214, 47161, 102222, 102234,
-    102240, 102247, 102253, 102257, 102262, 102268, 102280, 102291, 102298,
-    102304, 102311, 102318, 102330, 102337, 102343, 24165, 102347, 102355,
-    102361, 102368, 102374, 102380, 102386, 102391, 102396, 102401, 102405,
-    102414, 102422, 102433, 7696, 102438, 19278, 102444, 102448, 102452,
-    102456, 102464, 102473, 102477, 102484, 102493, 102501, 102514, 102520,
-    101945, 34610, 102525, 102527, 102532, 102537, 102542, 102547, 102552,
-    102557, 102562, 102567, 102572, 102577, 102582, 102587, 102592, 102597,
-    102603, 102608, 102613, 102618, 102623, 102628, 102633, 102638, 102643,
-    102649, 102655, 102661, 102666, 102671, 102683, 102688, 1872, 54, 102693,
-    102698, 37617, 102702, 37622, 37627, 37633, 37638, 102706, 37643, 25306,
-    102728, 102732, 102736, 102741, 102745, 37647, 102749, 102757, 102764,
-    102770, 102780, 37652, 102787, 102790, 102795, 102799, 102808, 10802,
-    102816, 37657, 25150, 102819, 102823, 102831, 1347, 102836, 37668,
-    102839, 102844, 29608, 29618, 40892, 102849, 102854, 102859, 102864,
-    102870, 102875, 102884, 102889, 102898, 102906, 102913, 102919, 102924,
-    102929, 102934, 102944, 102953, 102961, 102966, 102974, 102978, 102986,
-    102990, 102997, 103005, 37472, 44090, 103012, 103018, 103023, 103028,
-    14031, 32595, 103033, 103038, 103043, 103049, 103056, 103062, 103071,
-    103076, 103084, 103094, 103101, 103111, 103117, 103122, 103128, 103132,
-    20541, 103139, 41844, 103152, 103157, 103163, 103178, 35667, 72741,
-    103191, 103195, 103204, 103213, 103220, 103226, 103234, 103240, 103249,
-    103256, 44210, 103262, 103265, 103269, 103273, 103277, 11546, 103283,
-    103290, 103296, 103304, 103309, 103313, 27656, 103319, 103322, 103330,
-    103337, 103345, 103358, 103372, 103379, 103385, 103392, 103398, 37682,
-    103402, 103409, 103417, 103425, 103431, 37687, 103439, 103445, 103450,
-    103460, 103466, 103475, 35462, 40263, 103483, 103488, 103493, 103497,
-    103502, 103506, 103514, 103519, 17374, 18148, 103523, 103528, 37692,
-    17527, 103532, 103537, 103541, 103548, 103557, 103561, 103569, 103575,
-    103580, 103586, 8879, 103591, 103597, 103602, 103607, 103618, 103627,
-    103639, 103654, 37980, 103660, 19397, 37696, 103664, 103671, 103677,
-    103681, 27780, 103688, 103695, 46451, 103704, 103710, 103719, 103725,
-    103730, 103738, 103744, 103749, 37706, 103754, 103763, 103772, 102286,
-    103781, 103788, 103794, 103800, 103809, 103819, 103825, 103833, 103840,
-    103844, 37711, 103847, 37717, 1386, 103852, 103860, 103868, 103878,
-    103887, 103895, 103902, 103912, 37728, 103916, 103918, 103922, 103927,
-    103931, 103935, 103941, 103946, 103950, 103961, 103966, 103975, 103980,
-    3224, 103984, 103991, 103995, 104004, 104012, 104020, 104027, 104032,
-    104037, 71293, 104041, 104044, 104050, 104058, 104064, 104068, 104073,
-    104080, 104085, 104090, 104094, 104101, 104107, 104112, 40294, 104116,
-    104119, 104124, 104128, 104133, 104140, 104145, 104149, 45518, 104157,
-    29627, 29636, 104163, 104169, 104175, 104180, 104184, 104187, 104197,
-    104206, 104211, 104217, 104224, 104230, 104234, 104242, 104247, 40300,
-    82100, 104251, 104259, 104265, 104272, 104277, 104284, 104289, 104293,
-    104298, 66531, 104304, 104310, 10078, 104315, 104320, 104324, 104329,
-    104334, 104339, 104343, 104348, 104353, 104359, 104364, 104369, 104375,
-    104381, 104386, 104390, 104395, 104400, 104405, 104409, 27779, 104414,
-    104419, 104425, 104431, 104437, 104442, 104446, 104451, 104456, 104461,
-    104465, 104470, 104475, 104480, 104485, 50256, 104489, 37736, 104497,
-    104501, 104509, 104517, 104528, 104533, 104537, 25779, 79551, 104542,
-    104548, 104553, 4542, 104563, 104570, 104575, 104583, 104592, 104597,
-    104601, 104606, 104610, 104618, 104626, 104633, 74590, 104639, 104647,
-    104654, 104665, 104671, 104677, 37746, 104680, 104687, 104695, 104700,
-    104704, 31770, 69123, 104710, 104715, 104722, 104727, 9970, 104731,
-    104739, 104746, 104753, 104762, 104769, 104775, 104789, 104797, 6517,
-    104559, 104803, 104808, 104814, 104818, 104821, 104829, 104836, 104841,
-    104854, 104861, 104867, 104871, 104879, 104884, 104891, 104897, 104902,
-    69394, 104907, 104910, 104919, 104926, 104932, 104936, 104939, 104947,
-    104953, 104962, 104972, 104982, 104991, 105002, 105010, 105021, 105026,
-    105030, 105035, 105039, 41023, 105047, 24493, 41032, 105052, 97700,
-    97716, 97732, 97748, 97764, 105057, 97796, 97812, 97828, 97844, 97956,
-    97972, 105061, 98004, 98020, 105065, 105069, 105073, 105077, 98260,
-    98292, 105081, 98324, 105085, 105089, 98468, 98484, 98500, 98516, 105093,
-    98580, 98596, 105097, 98724, 98740, 98756, 98772, 98788, 98804, 98820,
-    98836, 98852, 98868, 98980, 98996, 99012, 99028, 99044, 99060, 99076,
-    99092, 99108, 99124, 105101, 100916, 101028, 101092, 101108, 101124,
-    101140, 101156, 101172, 101284, 101300, 101316, 105105, 101364, 105109,
-    101396, 101412, 101428, 105113, 105118, 105123, 105128, 105133, 105138,
-    105143, 105147, 105151, 105156, 105161, 105165, 105170, 105175, 105179,
-    105184, 105189, 105194, 105199, 105203, 105208, 105213, 105217, 105222,
-    105226, 105230, 105234, 105238, 105243, 105247, 105251, 105255, 105259,
-    105263, 105267, 105271, 105275, 105279, 105284, 105289, 105294, 105299,
-    105304, 105309, 105314, 105319, 105324, 105329, 105333, 105337, 105341,
-    105345, 105349, 105353, 105358, 105362, 105367, 105371, 105376, 105381,
-    105385, 105389, 105394, 105398, 105402, 105406, 105410, 105414, 105418,
-    105422, 105426, 105430, 105434, 105438, 105442, 105446, 105450, 105455,
-    105460, 105464, 105468, 105472, 105476, 105480, 105484, 105489, 105493,
-    105497, 105501, 105505, 105509, 105513, 105518, 105522, 105527, 105531,
-    105535, 105539, 105543, 105547, 105551, 105555, 105559, 105563, 105567,
-    105571, 105576, 105580, 105584, 105588, 105592, 105596, 105600, 105604,
-    105608, 105612, 105616, 105620, 105625, 105629, 105633, 105638, 105643,
-    105647, 105651, 105655, 105659, 105663, 105667, 105671, 105675, 105680,
-    105684, 105689, 105693, 105698, 105702, 105707, 105711, 105717, 105722,
-    105726, 105731, 105735, 105740, 105744, 105749, 105753, 105758, 1461,
-    105762, 2966, 1726, 26950, 1634, 29563, 105766, 2975, 105770, 1316,
-    105775, 1258, 105779, 105783, 2999, 105787, 105795, 105802, 105809,
-    105823, 3003, 7803, 105832, 105840, 105847, 105858, 105867, 105871,
-    105878, 105890, 105903, 105916, 105927, 105932, 105939, 105951, 105955,
-    3007, 13692, 105965, 105970, 105979, 105989, 105994, 3011, 106002,
-    106006, 106011, 106018, 106024, 106029, 106038, 106046, 106058, 106068,
-    1263, 15119, 106081, 106085, 106091, 106105, 106117, 106129, 106137,
-    106147, 106156, 106165, 106174, 106182, 106193, 106201, 4550, 106211,
-    106222, 106231, 106237, 106252, 106259, 106265, 106270, 41162, 106275,
-    3035, 15123, 106279, 106286, 9901, 106295, 106301, 3040, 37152, 106310,
-    69023, 106317, 106321, 106327, 106338, 106344, 106349, 106356, 106362,
-    106370, 106377, 106383, 106394, 106404, 106413, 106424, 106433, 106440,
-    106446, 106456, 106464, 106470, 106485, 106491, 106496, 106503, 106511,
-    106515, 106518, 106524, 106531, 106537, 106545, 106554, 106562, 106568,
-    106577, 49571, 106591, 106596, 106602, 17133, 106607, 106620, 106632,
-    106641, 106649, 106656, 106660, 106664, 106667, 106674, 106681, 106689,
-    106697, 106706, 106714, 17038, 106722, 106727, 106731, 106743, 106750,
-    106757, 106766, 906, 106776, 106785, 106796, 3061, 106800, 106804,
-    106810, 106823, 106835, 106845, 106854, 106866, 30368, 106877, 106885,
-    106894, 106905, 106916, 106926, 106936, 106944, 106953, 106961, 13139,
-    106968, 106972, 106975, 106980, 106985, 106989, 106995, 1268, 107002,
-    107006, 13780, 107010, 107021, 107030, 107038, 107047, 107055, 107071,
-    107082, 107091, 107099, 107111, 107122, 107138, 107148, 107169, 107183,
-    107196, 107204, 107211, 7849, 107224, 107229, 107235, 6526, 107241,
-    107244, 107251, 107261, 8981, 107268, 107273, 107278, 107285, 107290,
-    107298, 107307, 107315, 107320, 107329, 107336, 11040, 11049, 107342,
-    107353, 107359, 107364, 107370, 3077, 3082, 107376, 977, 107382, 107389,
-    107396, 107409, 107414, 2261, 87, 107422, 107429, 107434, 107442, 107452,
-    107461, 107467, 107476, 107484, 107494, 107498, 107502, 107507, 107511,
-    107523, 3105, 107531, 107539, 107544, 107555, 107566, 107578, 107589,
-    107599, 107608, 24534, 107613, 107619, 107624, 107634, 107644, 107649,
-    32484, 107655, 107660, 107669, 24546, 107673, 4654, 16, 107678, 107687,
-    107694, 107701, 107707, 107712, 107716, 107722, 32508, 107727, 107732,
-    69685, 107737, 107742, 107748, 107754, 107762, 107767, 107775, 107782,
-    107788, 107793, 45394, 49465, 107799, 1797, 32, 107809, 107822, 107827,
-    107835, 107840, 107846, 3131, 32563, 107851, 107859, 107866, 107871,
-    107876, 107885, 4233, 4244, 70891, 107893, 107897, 1661, 1809, 107902,
-    107907, 107914, 32916, 1813, 302, 107921, 107927, 107932, 3153, 107936,
-    107941, 107948, 1817, 107953, 107959, 107964, 107976, 6757, 107986,
-    107993, 1824, 107999, 108004, 108011, 108018, 108033, 108040, 108051,
-    108056, 108064, 2696, 108068, 108080, 108085, 108089, 108095, 32362,
-    2266, 108099, 108110, 108114, 108118, 108124, 108128, 108137, 108141,
-    108152, 108156, 2312, 36969, 108160, 108170, 108178, 3244, 108184,
-    108193, 108201, 10439, 108206, 108214, 108219, 108223, 108232, 108239,
-    108245, 3214, 17197, 108249, 108262, 108280, 108285, 108293, 108301,
-    108311, 11344, 15241, 108323, 108336, 108343, 108357, 108364, 108380,
-    108387, 108393, 24584, 14454, 108400, 108407, 108417, 108426, 50255,
-    108438, 108446, 50390, 108453, 108456, 108462, 108468, 108474, 108480,
-    108486, 108493, 108500, 108506, 108512, 108518, 108524, 108530, 108536,
-    108542, 108548, 108554, 108560, 108566, 108572, 108578, 108584, 108590,
-    108596, 108602, 108608, 108614, 108620, 108626, 108632, 108638, 108644,
-    108650, 108656, 108662, 108668, 108674, 108680, 108686, 108692, 108698,
-    108704, 108710, 108716, 108722, 108728, 108734, 108740, 108746, 108752,
-    108758, 108764, 108770, 108776, 108782, 108788, 108794, 108800, 108806,
-    108813, 108819, 108826, 108833, 108839, 108846, 108853, 108859, 108865,
-    108871, 108877, 108883, 108889, 108895, 108901, 108907, 108913, 108919,
-    108925, 108931, 108937, 108943, 3228, 10412, 108949, 108959, 108965,
-    108973, 108977, 106014, 3232, 108981, 102515, 24294, 14066, 4158, 108985,
-    3238, 108989, 108999, 109005, 109011, 109017, 109023, 109029, 109035,
-    109041, 109047, 109053, 109059, 109065, 109071, 109077, 109083, 109089,
-    109095, 109101, 109107, 109113, 109119, 109125, 109131, 109137, 109143,
-    109149, 109156, 109163, 109169, 109175, 109181, 109187, 109193, 109199,
-    1273, 109205, 109210, 109215, 109220, 109225, 109230, 109235, 109240,
-    109245, 109249, 109253, 109257, 109261, 109265, 109269, 109273, 109277,
-    109281, 109287, 109293, 109299, 109305, 109309, 109313, 109317, 109321,
-    109325, 109329, 109333, 109337, 109341, 109346, 109351, 109356, 109361,
-    109366, 109371, 109376, 109381, 109386, 109391, 109396, 109401, 109406,
-    109411, 109416, 109421, 109426, 109431, 109436, 109441, 109446, 109451,
-    109456, 109461, 109466, 109471, 109476, 109481, 109486, 109491, 109496,
-    109501, 109506, 109511, 109516, 109521, 109526, 109531, 109536, 109541,
-    109546, 109551, 109556, 109561, 109566, 109571, 109576, 109581, 109586,
-    109591, 109596, 109601, 109606, 109611, 109616, 109621, 109626, 109631,
-    109636, 109641, 109646, 109651, 109656, 109661, 109666, 109671, 109676,
-    109681, 109686, 109691, 109696, 109701, 109706, 109711, 109716, 109721,
-    109726, 109731, 109736, 109741, 109746, 109751, 109756, 109761, 109766,
-    109771, 109776, 109781, 109786, 109791, 109796, 109801, 109806, 109811,
-    109816, 109821, 109826, 109831, 109836, 109841, 109846, 109851, 109856,
-    109861, 109866, 109871, 109876, 109881, 109886, 109891, 109896, 109901,
-    109906, 109911, 109916, 109921, 109926, 109931, 109936, 109941, 109946,
-    109951, 109956, 109961, 109966, 109971, 109976, 109981, 109986, 109991,
-    109996, 110001, 110006, 110011, 110016, 110021, 110026, 110031, 110036,
-    110041, 110046, 110051, 110056, 110061, 110066, 110071, 110076, 110081,
-    110086, 110091, 110096, 110101, 110106, 110111, 110116, 110121, 110126,
-    110131, 110136, 110141, 110146, 110151, 110156, 110161, 110166, 110171,
-    110176, 110181, 110186, 110191, 110196, 110201, 110206, 110211, 110216,
-    110221, 110226, 110231, 110237, 110242, 110247, 110252, 110257, 110262,
-    110267, 110272, 110278, 110283, 110288, 110293, 110298, 110303, 110308,
-    110313, 110318, 110323, 110328, 110333, 110338, 110343, 110348, 110353,
-    110358, 110363, 110368, 110373, 110378, 110383, 110388, 110393, 110398,
-    110403, 110408, 110413, 110418, 110423, 110428, 110433, 110438, 110447,
-    110452, 110461, 110466, 110475, 110480, 110489, 110494, 110503, 110508,
-    110517, 110522, 110531, 110536, 110545, 110550, 110555, 110564, 110568,
-    110577, 110582, 110591, 110596, 110605, 110610, 110619, 110624, 110633,
-    110638, 110647, 110652, 110661, 110666, 110675, 110680, 110689, 110694,
-    110703, 110708, 110713, 110718, 110723, 110728, 110733, 110738, 110742,
-    110747, 110752, 110757, 110762, 110767, 110772, 110778, 110783, 110788,
-    110793, 110799, 110803, 110808, 110814, 110819, 110824, 110829, 110834,
-    110839, 110844, 110849, 110854, 110859, 110864, 110870, 110875, 110880,
-    110885, 110891, 110896, 110901, 110906, 110911, 110917, 110922, 110927,
-    110932, 110937, 110942, 110948, 110953, 110958, 110963, 110968, 110973,
-    110978, 110983, 110988, 110993, 110998, 111003, 111008, 111013, 111018,
-    111023, 111028, 111033, 111038, 111043, 111048, 111053, 111058, 111063,
-    111069, 111075, 111081, 111086, 111091, 111096, 111101, 111107, 111113,
-    111119, 111124, 111129, 111134, 111140, 111145, 111150, 111155, 111160,
-    111165, 111170, 111175, 111180, 111185, 111190, 111195, 111200, 111205,
-    111210, 111215, 111220, 111226, 111232, 111238, 111243, 111248, 111253,
-    111258, 111264, 111270, 111276, 111281, 111286, 111291, 111296, 111301,
-    111306, 111311, 111316, 111321, 18785, 111326, 111332, 111337, 111342,
-    111347, 111352, 111357, 111363, 111368, 111373, 111378, 111383, 111388,
-    111394, 111399, 111404, 111409, 111414, 111419, 111424, 111429, 111434,
-    111439, 111444, 111449, 111454, 111459, 111464, 111469, 111474, 111479,
-    111484, 111489, 111494, 111499, 111504, 111510, 111515, 111520, 111525,
-    111530, 111535, 111540, 111545, 111550, 111555, 111560, 111565, 111570,
-    111575, 111580, 111585, 111590, 111595, 111600, 111605, 111610, 111615,
-    111620, 111625, 111630, 111635, 111640, 111645, 111650, 111655, 111660,
-    111665, 111670, 111675, 111680, 111685, 111690, 111695, 111700, 111705,
-    111710, 111716, 111721, 111726, 111731, 111736, 111741, 111746, 111751,
-    111756, 111761, 111766, 111771, 111777, 111782, 111788, 111793, 111798,
-    111803, 111808, 111813, 111818, 111824, 111829, 111834, 111840, 111845,
-    111850, 111855, 111860, 111865, 111871, 111877, 111882, 111887, 14088,
-    111892, 111897, 111902, 111907, 111912, 111917, 111922, 111927, 111932,
-    111937, 111942, 111947, 111952, 111957, 111962, 111967, 111972, 111977,
-    111982, 111987, 111992, 111997, 112002, 112007, 112012, 112017, 112022,
-    112027, 112032, 112037, 112042, 112047, 112052, 112057, 112062, 112067,
-    112072, 112077, 112082, 112087, 112092, 112097, 112102, 112107, 112112,
-    112117, 112122, 112127, 112132, 112137, 112142, 112147, 112152, 112157,
-    112162, 112167, 112172, 112177, 112182, 112187, 112192, 112197, 112202,
-    112207, 112212, 112218, 112223, 112228, 112233, 112238, 112244, 112249,
-    112254, 112259, 112264, 112269, 112274, 112280, 112285, 112290, 112295,
-    112300, 112305, 112311, 112316, 112321, 112326, 112331, 112336, 112342,
-    112347, 112352, 112357, 112362, 112367, 112373, 112379, 112384, 112389,
-    112394, 112400, 112406, 112412, 112417, 112422, 112428, 112434, 112439,
-    112445, 112451, 112457, 112462, 112467, 112473, 112478, 112484, 112489,
-    112495, 112504, 112509, 112514, 112520, 112525, 112531, 112536, 112541,
-    112546, 112551, 112556, 112561, 112566, 112571, 112576, 112581, 112586,
-    112591, 112596, 112601, 112606, 112611, 112616, 112621, 112626, 112631,
-    112636, 112641, 112646, 112651, 112656, 112661, 112666, 112671, 112676,
-    112681, 112686, 112692, 112698, 112704, 112709, 112714, 112719, 112724,
-    112729, 112734, 112739, 112744, 112749, 112754, 112759, 112764, 112769,
-    112774, 112779, 112784, 112789, 112794, 112799, 112804, 112810, 112816,
-    112821, 112827, 112832, 112837, 112843, 112848, 112854, 112859, 112865,
-    112870, 112876, 112881, 112887, 112892, 112897, 112902, 112907, 112912,
-    112917, 112922, 109000, 109006, 109012, 109018, 112928, 109024, 109030,
-    112934, 109036, 109042, 109048, 109054, 109060, 109066, 109072, 109078,
-    109084, 112940, 109090, 109096, 109102, 112946, 109108, 109114, 109120,
-    109126, 112952, 109132, 109138, 109144, 109164, 112958, 112964, 109170,
-    112970, 109176, 109182, 109188, 109194, 109200, 112976, 3255, 3260,
-    112981, 3275, 3280, 3285, 112986, 112989, 112995, 113001, 113008, 113013,
-    113018, 2317,
+    0, 0, 6, 11, 15, 19, 27, 34, 44, 49, 55, 64, 66, 69, 81, 89, 102, 108,
+    113, 118, 124, 129, 137, 146, 157, 162, 167, 170, 176, 180, 189, 195,
+    201, 207, 212, 220, 227, 235, 241, 250, 177, 253, 254, 262, 268, 273,
+    278, 282, 289, 296, 306, 312, 317, 322, 325, 331, 337, 340, 345, 351,
+    361, 366, 371, 376, 382, 384, 393, 400, 407, 409, 418, 349, 420, 428,
+    436, 438, 446, 447, 452, 455, 462, 464, 470, 477, 482, 490, 496, 503,
+    508, 515, 520, 523, 527, 533, 538, 548, 553, 560, 563, 571, 579, 588,
+    592, 596, 599, 603, 606, 611, 621, 628, 635, 642, 649, 654, 659, 668,
+    670, 679, 683, 690, 698, 702, 710, 714, 277, 723, 736, 740, 745, 750,
+    756, 758, 768, 771, 777, 782, 791, 795, 800, 804, 808, 813, 819, 823,
+    831, 834, 843, 852, 860, 868, 780, 879, 884, 889, 897, 904, 907, 917,
+    921, 925, 932, 935, 939, 946, 952, 633, 958, 961, 964, 967, 976, 980,
+    985, 988, 992, 998, 1003, 1006, 1009, 1014, 1020, 1029, 1032, 1037, 1046,
+    598, 1050, 1058, 1063, 1066, 1069, 1072, 1078, 1083, 1088, 1094, 1099,
+    1104, 1109, 1113, 1118, 1124, 1129, 1134, 1138, 1144, 1149, 1154, 1159,
+    1163, 1168, 1173, 1178, 1184, 1190, 1196, 1201, 1205, 1210, 1215, 1220,
+    1224, 1229, 1234, 1239, 1244, 1079, 1084, 1089, 1095, 1100, 1248, 1110,
+    1254, 1259, 1264, 1271, 1275, 1278, 1287, 1114, 1291, 1119, 1125, 1130,
+    1295, 1300, 1305, 1309, 1313, 1319, 1323, 1135, 1326, 1328, 1145, 1333,
+    1337, 1150, 1343, 1155, 1347, 1351, 1358, 1160, 1362, 1367, 1371, 1374,
+    1378, 1164, 1169, 1383, 1389, 1174, 1401, 1407, 1413, 1419, 1179, 1191,
+    1197, 1423, 1427, 1431, 1434, 1202, 1438, 1440, 1445, 1450, 1456, 1461,
+    1466, 1470, 1475, 1480, 1485, 1490, 1496, 1501, 1506, 1512, 1518, 1523,
+    1527, 1532, 1537, 1542, 1547, 1552, 1556, 1564, 1569, 1573, 1578, 1583,
+    1588, 1593, 1597, 1600, 1607, 1612, 1617, 1622, 1627, 1633, 1638, 1642,
+    1206, 1645, 1650, 1655, 1660, 1211, 1664, 1668, 1675, 1216, 1682, 1687,
+    1221, 1691, 1693, 1698, 1709, 1715, 1225, 1720, 1729, 1230, 1734, 1740,
+    1745, 1235, 1750, 1759, 1764, 1768, 1771, 1776, 1780, 1784, 1788, 1791,
+    1795, 1240, 1800, 1245, 1804, 1806, 1812, 1818, 1824, 1830, 1836, 1842,
+    1848, 1854, 1859, 1865, 1871, 1877, 1883, 1889, 1895, 1901, 1907, 1913,
+    1918, 1923, 1928, 1933, 1938, 1943, 1948, 1953, 1958, 1963, 1969, 1974,
+    1980, 1985, 1991, 1997, 2002, 2008, 2014, 2020, 2026, 2031, 2036, 2038,
+    2039, 2043, 2047, 2052, 2056, 2060, 2064, 2069, 2073, 2076, 2081, 2085,
+    2090, 2094, 2098, 2103, 2107, 2110, 2114, 2120, 2134, 2138, 2142, 2146,
+    2149, 2154, 2158, 2162, 2165, 2169, 2174, 2179, 2184, 2189, 2193, 2197,
+    2201, 2205, 2209, 2214, 2218, 2223, 2227, 2232, 2238, 2245, 2251, 2256,
+    2261, 2266, 2272, 2277, 2283, 2288, 2293, 2298, 2303, 2308, 2311, 2313,
+    1096, 2317, 2324, 2332, 2342, 2351, 2365, 2369, 2373, 2378, 2391, 2399,
+    2402, 2406, 2409, 2414, 2418, 2421, 2425, 2429, 2434, 1704, 2439, 2443,
+    2446, 2450, 2456, 2463, 2470, 2476, 2481, 2486, 2492, 2498, 2503, 2508,
+    2513, 2518, 2523, 2528, 2453, 2533, 1695, 2535, 2541, 2545, 2550, 2554,
+    2558, 1603, 1717, 2563, 2567, 2571, 2574, 2579, 2584, 2589, 2594, 2598,
+    2605, 2610, 2613, 2617, 2621, 2628, 2634, 2638, 2644, 2648, 2652, 2657,
+    2664, 2669, 2674, 2681, 2687, 2693, 2699, 2720, 2734, 2751, 2766, 2782,
+    2799, 2814, 2823, 2828, 2832, 2837, 2842, 2846, 2858, 2865, 2871, 2241,
+    2877, 2884, 2890, 2894, 2897, 2904, 2910, 2915, 2919, 2924, 2928, 2932,
+    2061, 2936, 2941, 2946, 2950, 2955, 2963, 2967, 2974, 2979, 2983, 2987,
+    2991, 2996, 3001, 3006, 3010, 3015, 3020, 3024, 3029, 3034, 3038, 3041,
+    3045, 3049, 3057, 3062, 3066, 3070, 3076, 3085, 3089, 3093, 3099, 3104,
+    3111, 3115, 3125, 3129, 3133, 3138, 3142, 3147, 3153, 3158, 3162, 3166,
+    3170, 2466, 3178, 3183, 3189, 3194, 3198, 3203, 3208, 3212, 3218, 3223,
+    2065, 3229, 3235, 3240, 3245, 3250, 3255, 3260, 3265, 3270, 3275, 3280,
+    3285, 3290, 3295, 3300, 3305, 3311, 3316, 1111, 101, 3322, 3326, 3330,
+    3334, 3339, 3343, 3347, 3353, 3358, 3362, 3366, 3371, 3376, 3380, 3385,
+    3389, 3392, 3396, 3401, 3405, 3410, 3414, 3417, 3419, 3423, 3427, 3432,
+    3436, 3439, 3452, 3456, 3460, 3464, 3469, 3473, 3477, 3480, 3484, 3488,
+    3493, 3497, 3502, 3507, 3512, 3516, 3523, 3528, 3531, 3537, 3540, 3545,
+    3551, 3555, 3559, 3562, 3567, 3571, 3576, 3580, 3584, 3587, 3593, 3598,
+    3603, 3609, 3614, 3619, 3625, 3631, 3636, 3641, 3646, 3651, 978, 605,
+    3654, 3657, 3662, 3666, 3670, 3674, 3678, 3681, 3685, 3690, 3695, 3699,
+    3704, 3708, 3713, 3717, 3721, 3725, 3731, 3737, 3740, 3743, 150, 3749,
+    3754, 3763, 3771, 3780, 3790, 3797, 3803, 3810, 3815, 3819, 3823, 3831,
+    3838, 3843, 3848, 3855, 3860, 3864, 3874, 3878, 3882, 3887, 3892, 3902,
+    2077, 3907, 3911, 3914, 3920, 3925, 3931, 3937, 3942, 3949, 3953, 3957,
+    3961, 3966, 3971, 3976, 3981, 3986, 3991, 600, 597, 1272, 3996, 4003,
+    4010, 4016, 4021, 4028, 4035, 4040, 4046, 4052, 4057, 4061, 4067, 4074,
+    4079, 4083, 4087, 2086, 4093, 4101, 4107, 4115, 838, 4121, 4129, 4140,
+    4144, 4154, 4160, 4165, 4170, 4175, 4180, 2091, 4185, 4190, 4205, 4211,
+    4218, 4229, 4239, 4245, 4250, 4256, 4262, 4265, 4268, 4272, 4277, 4280,
+    4287, 4296, 4301, 4305, 4309, 4313, 4317, 4322, 4328, 4339, 4343, 3397,
+    4348, 4360, 4366, 4374, 4378, 4383, 4390, 4395, 4400, 4405, 1472, 4410,
+    4413, 4416, 4420, 4423, 4429, 4433, 4447, 4451, 4454, 4458, 4464, 4470,
+    4475, 4479, 4483, 4489, 4500, 4506, 4511, 4517, 4521, 4529, 4541, 4551,
+    4557, 4562, 4571, 4579, 4586, 4592, 4598, 4602, 4608, 4617, 4626, 4631,
+    4637, 4641, 4650, 4655, 4659, 4664, 4668, 4676, 4682, 4686, 4693, 4698,
+    4702, 4708, 2099, 4714, 4719, 4724, 4729, 4734, 1288, 4739, 4744, 4750,
+    4755, 4760, 4765, 4770, 4775, 4780, 4786, 4791, 4797, 4802, 4807, 4812,
+    4818, 4823, 4828, 4833, 4838, 4844, 4849, 4855, 4860, 4865, 4870, 4875,
+    4880, 4885, 4891, 4896, 4901, 329, 370, 4906, 4912, 4916, 4920, 4925,
+    4929, 4933, 4936, 4940, 4944, 4947, 4951, 4955, 4959, 4964, 4968, 4972,
+    4978, 4987, 4711, 4992, 4996, 4999, 5004, 5009, 5014, 5019, 5024, 5029,
+    5034, 5039, 5044, 5049, 5053, 5058, 5063, 5068, 5073, 5078, 5083, 5088,
+    5093, 5098, 5103, 5107, 5112, 5117, 5122, 5127, 5132, 5137, 5142, 5147,
+    5152, 5157, 5161, 5166, 5171, 5176, 5181, 5186, 5191, 5196, 5201, 5206,
+    5211, 5215, 5220, 5225, 5230, 5235, 5240, 5245, 5250, 5255, 5260, 5265,
+    5269, 5274, 5279, 5284, 5289, 5294, 5299, 5304, 5309, 5314, 5319, 5323,
+    5328, 5333, 5338, 5343, 5348, 5353, 5358, 5363, 5368, 5373, 5377, 5382,
+    5387, 5392, 5397, 5403, 5409, 5415, 5421, 5427, 5433, 5439, 5444, 5450,
+    5456, 5462, 5468, 5474, 5480, 5486, 5492, 5498, 5504, 5509, 5515, 5521,
+    5527, 5533, 5539, 5545, 5551, 5557, 5563, 5569, 5574, 5580, 5586, 5592,
+    5598, 5604, 5610, 5616, 5622, 5628, 5634, 5639, 5645, 5651, 5657, 5663,
+    5669, 5675, 5681, 5687, 5693, 5699, 5704, 5710, 5716, 5722, 5728, 5734,
+    5740, 5746, 5752, 5758, 5764, 5769, 5773, 5779, 5785, 5791, 5797, 5803,
+    5809, 5815, 5821, 5827, 5833, 5838, 5844, 5850, 5856, 5862, 5868, 5874,
+    5880, 5886, 5892, 5898, 5903, 5909, 5915, 5921, 5927, 5933, 5939, 5945,
+    5951, 5957, 5963, 5968, 5974, 5980, 5986, 5992, 5998, 6004, 6010, 6016,
+    6022, 6028, 6033, 6039, 6045, 6051, 6057, 6063, 6069, 6075, 6081, 6087,
+    6093, 6098, 6104, 6110, 6116, 6122, 6128, 6134, 6140, 6146, 6152, 6158,
+    6163, 6169, 6175, 6181, 6187, 6193, 6199, 6205, 6211, 6217, 6223, 6228,
+    6234, 6240, 6246, 6252, 6258, 6264, 6270, 6276, 6282, 6288, 6293, 6299,
+    6305, 6311, 6317, 6323, 6329, 6335, 6341, 6347, 6353, 6358, 6364, 6370,
+    6376, 6382, 6388, 6394, 6400, 6406, 6412, 6418, 6423, 6427, 6430, 6437,
+    6441, 6454, 6458, 6462, 6466, 6469, 6473, 6478, 6482, 6491, 6495, 6501,
+    6508, 6519, 6527, 6534, 6540, 6544, 6552, 6561, 6567, 6571, 6583, 6588,
+    6591, 6596, 6600, 6610, 6618, 6626, 6632, 6636, 6646, 6656, 6664, 6671,
+    6678, 6684, 6690, 6697, 6701, 6708, 6718, 6728, 6736, 6743, 6748, 6752,
+    6756, 6764, 6768, 6778, 6783, 6790, 6798, 6808, 6813, 6817, 6822, 6826,
+    6833, 6838, 6852, 6857, 6862, 6869, 3667, 6878, 6882, 6886, 6891, 6895,
+    6899, 6902, 6907, 6912, 6921, 6927, 6933, 6938, 6944, 6948, 6959, 6969,
+    6984, 6999, 7014, 7029, 7044, 7059, 7074, 7089, 7104, 7119, 7134, 7149,
+    7164, 7179, 7194, 7209, 7224, 7239, 7254, 7269, 7284, 7299, 7314, 7329,
+    7344, 7359, 7374, 7389, 7404, 7419, 7434, 7449, 7464, 7479, 7494, 7509,
+    7524, 7539, 7554, 7569, 7584, 7599, 7614, 7629, 7644, 7659, 7674, 7689,
+    7704, 7713, 7722, 7727, 7733, 7743, 7747, 7751, 7756, 7761, 7766, 7774,
+    7778, 7781, 7785, 3120, 7788, 7793, 348, 551, 7799, 7807, 7811, 7815,
+    7818, 7822, 7828, 7832, 7840, 7846, 7851, 7858, 7866, 7873, 7879, 7884,
+    7891, 7897, 7906, 7914, 7918, 7923, 7931, 7943, 7954, 7961, 7972, 7976,
+    7980, 7984, 7987, 7993, 3424, 7997, 7999, 8005, 8010, 8015, 8020, 8026,
+    8031, 8036, 8041, 8046, 8052, 8057, 8062, 8068, 8073, 8079, 8084, 8090,
+    8095, 8101, 8106, 8111, 8116, 8121, 8126, 8132, 8137, 8142, 8147, 8153,
+    8159, 8165, 8171, 8177, 8183, 8189, 8195, 8201, 8207, 8213, 8219, 8224,
+    8229, 8234, 8239, 8244, 8249, 8254, 8259, 8265, 8271, 8276, 8282, 8288,
+    8294, 8299, 8304, 8309, 8314, 8320, 8326, 8331, 8336, 8341, 8346, 8351,
+    8357, 8362, 8368, 8374, 8380, 8386, 8392, 8398, 8404, 8410, 8416, 2108,
+    7817, 8421, 8425, 8433, 8437, 8440, 8447, 8450, 8454, 8462, 8467, 8472,
+    8463, 8477, 2135, 8481, 8487, 8493, 8498, 8503, 8510, 8518, 8523, 8527,
+    8530, 8534, 8540, 8546, 8550, 1647, 594, 8553, 8557, 8562, 8568, 8573,
+    8577, 8580, 8584, 8590, 8595, 8599, 8606, 8610, 8614, 8618, 779, 8621,
+    8623, 8631, 8638, 8645, 8651, 8658, 8666, 8673, 8684, 8691, 8697, 8709,
+    1131, 1296, 1301, 8720, 8724, 1306, 8728, 8732, 8741, 8749, 8753, 8762,
+    8768, 8774, 8779, 8783, 8789, 8794, 8802, 8809, 2819, 8816, 8822, 8826,
+    8835, 8844, 8853, 8862, 8868, 8873, 8878, 8889, 8898, 8910, 8915, 8923,
+    2194, 8927, 8929, 8934, 8938, 8947, 8955, 1310, 165, 3709, 3714, 8961,
+    8965, 8974, 8980, 8985, 8988, 8997, 2206, 9003, 2811, 9007, 9015, 9019,
+    9023, 9027, 9031, 2215, 9035, 9040, 9047, 9053, 9059, 9062, 9064, 9067,
+    9075, 9083, 9091, 9094, 9099, 2228, 9104, 8474, 9107, 9109, 9114, 9119,
+    9124, 9129, 9134, 9139, 9144, 9149, 9154, 9159, 9165, 9170, 9175, 9180,
+    9186, 9191, 9196, 9201, 9206, 9211, 9216, 9222, 9227, 9232, 9237, 9242,
+    9247, 9252, 9257, 9262, 9267, 9272, 9277, 9282, 9287, 9292, 9297, 9302,
+    9307, 9313, 9319, 9324, 9329, 9334, 9339, 9344, 2239, 2246, 2252, 9349,
+    9357, 9363, 9371, 2278, 2284, 9379, 2289, 2294, 2299, 2304, 9383, 9387,
+    9392, 9396, 9400, 9404, 9409, 9413, 9418, 9422, 9425, 9428, 9434, 9441,
+    9447, 9454, 9460, 9467, 9473, 9480, 9486, 9492, 9501, 9507, 9511, 9515,
+    9519, 9523, 9528, 9532, 9537, 9541, 9547, 9551, 9556, 9563, 9574, 9582,
+    9592, 9598, 9608, 9617, 9624, 9629, 9633, 9644, 9654, 9667, 9678, 9691,
+    9702, 9714, 9726, 9738, 9749, 9762, 9775, 9782, 9788, 9799, 9809, 9823,
+    9830, 9836, 9845, 9853, 9857, 9862, 9866, 9873, 9881, 9888, 9892, 9898,
+    9902, 9908, 9918, 9922, 9927, 9932, 9939, 9945, 8653, 9955, 9959, 9966,
+    9972, 9979, 9986, 9990, 9993, 9999, 10003, 10008, 10013, 10018, 10022,
+    10028, 10036, 10043, 10049, 10053, 10056, 10062, 10072, 10076, 10082,
+    10087, 10091, 10096, 10100, 10106, 10112, 10117, 10123, 10128, 10133,
+    10138, 2131, 10143, 10145, 10150, 10158, 10167, 10171, 10177, 10182,
+    10187, 10192, 10197, 10203, 10208, 10213, 4485, 10218, 10223, 10227,
+    10233, 10238, 10244, 10249, 10254, 10260, 10265, 10172, 10271, 10275,
+    10282, 10288, 10293, 10297, 6848, 10302, 10311, 10316, 10321, 9043, 9050,
+    10326, 2993, 10330, 10335, 10340, 10345, 10183, 10349, 10354, 10359,
+    10188, 10363, 10193, 10368, 10375, 10382, 10388, 10395, 10401, 10407,
+    10412, 10419, 10424, 10429, 10434, 10440, 10198, 10204, 10446, 10452,
+    10457, 10462, 10470, 10209, 10475, 10478, 10480, 10488, 10494, 10500,
+    10509, 10517, 10525, 10533, 10541, 10549, 10557, 10565, 10573, 10582,
+    10591, 10599, 10608, 10617, 10626, 10635, 10644, 10653, 10662, 10671,
+    10680, 10689, 10697, 10702, 10706, 10712, 10720, 10727, 10742, 10759,
+    10778, 10787, 10795, 10810, 10821, 10829, 10839, 10849, 10857, 10863,
+    10875, 10884, 10892, 10899, 10906, 10913, 10919, 10924, 10934, 10942,
+    10952, 10959, 10969, 10979, 10989, 10997, 11004, 11013, 11023, 11037,
+    11052, 11061, 11069, 11074, 11078, 11087, 11093, 11098, 11108, 11118,
+    11128, 11133, 11137, 11147, 11156, 11161, 11177, 11194, 11204, 11209,
+    11220, 11233, 11244, 11252, 11265, 11277, 11285, 11290, 11294, 11300,
+    11305, 11313, 11321, 11328, 11339, 11344, 11352, 11362, 11368, 11372,
+    11375, 11379, 11385, 11392, 11396, 11404, 11413, 11421, 11428, 11433,
+    11438, 11442, 11446, 11454, 11469, 11485, 11491, 11499, 11508, 11516,
+    11522, 11526, 11533, 11544, 11548, 11551, 11562, 11568, 11573, 10214,
+    11581, 11587, 11594, 11600, 11605, 11612, 11619, 11626, 11633, 11640,
+    11647, 11654, 11661, 11668, 11675, 11682, 11689, 11696, 11703, 11710,
+    11715, 10755, 11720, 11726, 11733, 11740, 11745, 11752, 11761, 11765,
+    11777, 11781, 11787, 11792, 11797, 11802, 11807, 11812, 11817, 11820,
+    11824, 11828, 11832, 11836, 11842, 11848, 11853, 11859, 11864, 11869,
+    11875, 11880, 11885, 9935, 11890, 11894, 11898, 11902, 11907, 11912,
+    11917, 11925, 11931, 11936, 11940, 11944, 11951, 11956, 11964, 11971,
+    11976, 11980, 11983, 11989, 11996, 12000, 12003, 12008, 12012, 4524,
+    12018, 12027, 46, 12035, 12041, 12046, 12051, 12059, 12066, 12071, 6773,
+    12077, 12083, 12088, 12092, 12095, 12110, 12129, 12141, 12154, 12167,
+    12180, 12194, 12207, 12222, 12229, 10219, 12235, 12249, 12254, 12260,
+    12265, 12273, 12278, 8831, 12283, 12286, 12294, 12301, 12306, 12310,
+    12316, 12320, 12325, 12330, 12335, 12340, 12345, 12350, 2998, 10837,
+    12355, 12359, 12365, 12371, 12376, 12382, 12387, 10228, 12393, 12399,
+    12404, 12409, 12417, 12423, 12436, 12444, 12451, 12457, 10234, 12463,
+    12471, 12479, 12486, 12499, 12512, 12524, 12534, 12546, 12574, 12582,
+    12591, 12598, 12610, 12617, 12627, 12636, 12644, 12651, 12656, 12662,
+    10239, 12667, 12673, 12678, 12683, 12688, 10245, 12693, 12696, 12703,
+    12709, 12723, 12736, 12747, 9567, 12758, 12764, 12773, 12781, 12788,
+    12794, 12805, 12811, 12816, 12824, 4012, 12830, 12835, 12102, 12841,
+    12848, 12853, 10250, 12859, 12864, 12871, 12877, 12883, 12888, 12896,
+    12904, 12911, 12915, 12927, 12941, 12951, 12956, 12960, 12971, 12977,
+    12982, 12987, 10255, 12991, 10261, 12996, 12999, 13004, 13016, 13023,
+    13028, 13032, 13040, 13045, 13049, 13054, 13058, 13065, 13071, 10266,
+    10173, 13078, 3003, 17, 13085, 13090, 13094, 13098, 13104, 13112, 13122,
+    13127, 13132, 13139, 13146, 13150, 13161, 13171, 13180, 13189, 13201,
+    13206, 13210, 13218, 13232, 13236, 13239, 13243, 13251, 13258, 13266,
+    13270, 13281, 13289, 13293, 13300, 13305, 13309, 13315, 13320, 13326,
+    13331, 13336, 13340, 13346, 13351, 13362, 13366, 13369, 13375, 13382,
+    13388, 13393, 13399, 13405, 13412, 13423, 13433, 13443, 13452, 13459,
+    13468, 13472, 10276, 10283, 10289, 10294, 13478, 13484, 13490, 13495,
+    13501, 10298, 13507, 13510, 13517, 13522, 13527, 13542, 13558, 13573,
+    13581, 13586, 13593, 13599, 13603, 13608, 13613, 13618, 13623, 13628,
+    13633, 13638, 13643, 13648, 1561, 374, 13653, 13661, 13668, 13674, 13679,
+    13684, 10303, 13686, 13690, 13695, 13699, 13709, 13714, 13718, 13721,
+    13730, 13734, 13737, 13744, 10312, 13749, 13752, 13760, 13767, 13775,
+    13779, 13785, 13789, 13796, 13805, 13812, 13808, 13819, 13823, 13829,
+    13833, 13837, 13841, 13847, 13857, 13865, 13872, 13876, 13884, 13889,
+    13893, 13900, 13905, 13912, 13916, 13921, 13926, 13930, 13937, 13943,
+    13951, 13957, 13962, 13972, 13979, 13984, 13989, 13993, 13997, 14005,
+    4354, 14013, 14018, 10317, 14022, 14029, 14033, 14036, 14044, 14051,
+    14055, 6628, 14059, 14064, 14069, 14073, 14084, 14094, 14099, 14105,
+    14110, 14114, 14117, 14125, 14130, 14135, 14142, 14147, 10322, 14152,
+    14156, 14163, 14168, 14173, 14178, 6796, 14183, 14188, 14193, 14198,
+    14204, 14209, 14215, 14220, 14225, 14230, 14235, 14240, 14245, 14250,
+    14255, 14260, 14265, 14270, 14275, 14280, 14285, 14290, 14295, 14301,
+    14306, 14311, 14316, 14321, 14326, 14332, 14337, 14342, 14348, 14353,
+    14359, 14364, 14370, 14375, 14380, 14385, 14390, 14396, 14401, 14406,
+    14411, 14419, 996, 112, 14425, 14429, 14434, 14439, 14443, 14447, 14451,
+    14456, 14460, 14465, 14469, 14472, 14476, 14480, 14486, 14491, 14501,
+    14507, 14515, 14521, 14525, 14529, 14536, 14544, 14553, 14564, 14574,
+    14581, 14588, 14592, 14601, 14610, 14618, 14625, 14634, 14643, 14652,
+    14661, 14671, 14681, 14691, 14701, 14711, 14720, 14730, 14740, 14750,
+    14760, 14770, 14780, 14790, 14799, 14809, 14819, 14829, 14839, 14849,
+    14859, 14868, 14878, 14888, 14898, 14908, 14918, 14928, 14938, 14948,
+    14958, 14967, 14977, 14987, 14997, 15007, 15017, 15027, 15037, 15047,
+    15057, 15067, 15076, 15082, 1140, 15086, 15089, 15093, 15098, 15105,
+    15111, 15116, 15120, 15125, 15134, 15143, 15151, 15156, 15160, 15164,
+    15170, 15175, 15181, 10331, 15186, 15191, 15200, 15205, 10341, 15210,
+    15213, 15219, 15227, 10346, 15234, 15238, 15242, 15247, 15251, 15261,
+    15267, 15273, 15278, 15287, 15295, 15302, 15309, 15314, 15321, 15326,
+    15330, 15333, 15344, 15354, 15367, 15376, 15384, 15395, 15407, 15417,
+    15427, 15432, 15436, 15441, 15446, 15450, 15456, 15464, 15471, 15482,
+    15487, 15497, 15506, 15510, 15513, 15520, 15530, 15539, 15546, 15550,
+    15557, 15563, 15568, 15573, 15577, 15129, 15586, 15590, 15596, 15600,
+    15605, 15609, 15616, 15623, 15627, 15636, 15644, 15652, 15659, 15667,
+    15679, 15690, 15700, 15707, 15713, 15722, 15733, 15742, 15754, 15766,
+    15778, 15788, 15797, 15807, 15816, 15824, 15831, 15840, 15848, 15852,
+    15857, 15863, 15869, 15874, 15879, 15883, 15888, 15893, 15898, 15903,
+    15908, 15913, 15918, 8495, 15923, 15925, 15929, 15934, 15940, 15947,
+    15953, 15959, 15968, 15972, 15978, 15986, 15993, 16002, 16011, 16020,
+    16029, 16038, 16047, 16056, 16065, 16075, 16085, 16094, 16100, 16107,
+    16114, 16120, 16134, 16140, 16147, 16155, 16164, 16172, 16178, 16187,
+    16196, 16207, 16213, 16223, 16231, 16238, 16246, 16255, 16268, 16277,
+    16285, 16292, 16305, 16311, 16317, 16327, 16336, 16345, 16350, 16354,
+    16360, 16366, 16371, 16378, 16385, 9949, 16390, 16395, 16402, 16410,
+    16415, 16427, 16434, 16439, 16451, 14482, 16456, 16462, 16470, 16476,
+    16481, 16489, 16497, 16504, 16512, 16518, 16526, 16534, 16540, 16548,
+    16554, 16559, 16565, 16572, 16578, 16583, 16587, 16598, 16606, 16614,
+    16620, 16625, 16632, 16641, 16647, 16652, 16660, 16667, 16676, 16690,
+    4298, 16694, 16699, 16704, 16710, 16715, 16720, 16724, 16729, 16734,
+    16739, 8494, 16744, 16749, 16754, 16759, 16764, 16768, 16773, 16778,
+    16783, 16788, 16794, 16800, 13781, 16805, 16811, 16816, 16821, 16826,
+    10350, 16831, 16836, 16841, 16846, 16851, 16865, 16882, 16900, 16912,
+    16925, 16942, 16958, 16975, 16985, 17004, 17015, 17026, 17037, 2708,
+    17048, 17059, 17070, 17087, 17098, 17109, 17114, 10355, 17119, 17123,
+    2388, 17127, 17130, 17136, 17144, 17152, 17158, 17167, 17174, 17179,
+    17187, 17195, 17202, 17206, 17211, 17217, 17224, 17232, 17239, 17251,
+    17258, 17264, 17272, 17277, 17283, 17289, 17294, 13536, 17301, 17310,
+    17316, 17321, 17329, 17338, 17346, 17353, 17359, 17367, 17374, 17380,
+    17386, 17393, 17400, 17406, 17412, 17421, 17429, 17434, 17444, 17451,
+    17457, 17465, 17471, 17479, 17487, 17494, 17507, 17514, 17523, 17532,
+    17541, 17549, 17559, 17566, 17571, 3868, 17578, 17583, 1256, 17587,
+    17594, 16745, 17598, 17604, 17608, 17616, 17628, 17633, 17640, 17646,
+    17651, 17658, 16750, 17662, 17666, 17670, 16755, 17674, 16760, 17678,
+    17685, 17690, 17694, 17701, 17705, 17713, 17720, 17725, 17733, 17737,
+    17744, 17761, 17770, 17779, 17783, 17786, 17792, 17800, 17806, 17811,
+    17815, 17820, 17825, 17830, 17835, 17840, 17845, 3946, 17850, 17852,
+    17860, 17867, 17877, 17889, 17894, 17898, 17904, 17909, 17917, 17921,
+    17927, 17932, 17938, 17941, 17948, 17956, 17963, 17969, 17974, 17980,
+    17985, 17992, 17998, 18003, 18010, 18015, 18019, 18025, 18031, 18035,
+    18042, 18048, 18053, 18059, 18067, 18075, 18082, 18088, 18093, 18099,
+    18105, 18113, 18118, 18123, 18131, 18137, 18143, 18148, 18155, 18160,
+    18164, 18170, 18176, 18181, 18188, 18193, 18199, 18202, 18208, 18219,
+    18225, 18228, 18232, 18236, 18250, 18263, 18275, 18281, 18286, 18293,
+    18299, 18305, 18316, 18328, 18340, 18350, 18359, 18367, 18374, 18385,
+    18395, 18405, 18413, 18416, 16774, 18421, 18426, 16779, 16930, 18434,
+    18447, 18462, 18473, 16947, 18491, 18504, 18517, 18528, 12117, 18539,
+    18552, 18571, 18582, 18593, 18604, 2729, 18617, 18621, 18629, 18640,
+    18651, 18659, 18674, 18689, 18700, 18707, 18713, 18721, 18725, 18731,
+    18735, 18738, 18751, 18763, 18773, 18781, 18788, 18796, 18806, 18811,
+    18818, 18823, 18830, 18841, 18851, 18857, 18862, 18867, 16784, 18871,
+    18877, 18883, 18888, 18893, 18898, 18902, 16789, 16795, 18906, 16801,
+    18911, 18919, 18924, 18928, 18935, 18943, 18950, 18959, 18966, 18970,
+    18974, 18979, 18984, 18989, 18994, 18999, 10194, 19004, 19006, 19011,
+    19016, 19022, 19027, 19032, 19037, 19042, 19046, 19052, 19058, 19063,
+    19069, 19074, 19079, 19083, 19089, 19094, 19098, 19103, 19108, 19120,
+    19125, 19131, 19136, 19141, 19147, 19153, 19158, 19163, 19168, 19175,
+    19181, 19192, 19199, 19208, 19213, 19217, 275, 19221, 19229, 19234,
+    19240, 19247, 19254, 19260, 19265, 19270, 19275, 19282, 19292, 19300,
+    19305, 19310, 19317, 19323, 19332, 19342, 19352, 19366, 19380, 19394,
+    19408, 19423, 19438, 19455, 19473, 19486, 19492, 19497, 19502, 19506,
+    19514, 19519, 19527, 19533, 19539, 19544, 19549, 19553, 19559, 19564,
+    19568, 19575, 19580, 19584, 19595, 19601, 19606, 19611, 19618, 19623,
+    19627, 3826, 19632, 19638, 19645, 16806, 19651, 19655, 19661, 19666,
+    19671, 19675, 19681, 19686, 19691, 19698, 19703, 15263, 19707, 19712,
+    19716, 19721, 19727, 19733, 19740, 19750, 19758, 19765, 19770, 19774,
+    19783, 19791, 19798, 19805, 19811, 19816, 19822, 19827, 19832, 19838,
+    19843, 19849, 19854, 19860, 19866, 19873, 19879, 19884, 19889, 10420,
+    19898, 19901, 19909, 19915, 19920, 19925, 19935, 19942, 19948, 19953,
+    19958, 19964, 19969, 19975, 19980, 19986, 19993, 19999, 20005, 20010,
+    20018, 20025, 20030, 20035, 20041, 20046, 20050, 20059, 20070, 20077,
+    20084, 20092, 20099, 20106, 20111, 20116, 20122, 20127, 20135, 20141,
+    20147, 20152, 20159, 20165, 20170, 20174, 20180, 20185, 20190, 20194,
+    20199, 1329, 8519, 3017, 20203, 20207, 20211, 20215, 20219, 20223, 20226,
+    20231, 20238, 20246, 20256, 20267, 20277, 20288, 20300, 20311, 20321,
+    20332, 20344, 20355, 20367, 20380, 20392, 20403, 20413, 20424, 20436,
+    20447, 20460, 20472, 20483, 20495, 20508, 20520, 20533, 20547, 20560,
+    20572, 20583, 20593, 20604, 20616, 20627, 20639, 20652, 20664, 20675,
+    20687, 20700, 20713, 20727, 20740, 20752, 20763, 20775, 20788, 20800,
+    20813, 20827, 20840, 20852, 20865, 20879, 20892, 20906, 20920, 20933,
+    20945, 20956, 20966, 16817, 20973, 20979, 20989, 20997, 21004, 21012,
+    21022, 21031, 21044, 21049, 21054, 21062, 21069, 15372, 15381, 21076,
+    21086, 21101, 21107, 21114, 21121, 21128, 21134, 21140, 21151, 21159,
+    21167, 21177, 21187, 21196, 16822, 21205, 21211, 21217, 21226, 21234,
+    21242, 21247, 21256, 21264, 21276, 21286, 21296, 21306, 21315, 21327,
+    21337, 21347, 21358, 21365, 21370, 21377, 21389, 21401, 21413, 21425,
+    21437, 21449, 21461, 21473, 21485, 21497, 21508, 21520, 21532, 21544,
+    21556, 21568, 21580, 21592, 21604, 21616, 21628, 21639, 21651, 21663,
+    21675, 21687, 21699, 21711, 21723, 21735, 21747, 21759, 21770, 21782,
+    21794, 21806, 21818, 21830, 21842, 21854, 21866, 21878, 21890, 21901,
+    21913, 21925, 21937, 21949, 21961, 21973, 21985, 21997, 22009, 22021,
+    22032, 22044, 22056, 22068, 22080, 22092, 22104, 22116, 22128, 22140,
+    22152, 22163, 22175, 22187, 22199, 22211, 22223, 22235, 22247, 22259,
+    22271, 22283, 22294, 22306, 22318, 22330, 22342, 22355, 22368, 22381,
+    22394, 22407, 22420, 22433, 22445, 22458, 22471, 22484, 22497, 22510,
+    22523, 22536, 22549, 22562, 22575, 22587, 22600, 22613, 22626, 22639,
+    22652, 22665, 22678, 22691, 22704, 22717, 22729, 22742, 22755, 22768,
+    22781, 22794, 22807, 22820, 22833, 22846, 22859, 22871, 22884, 22897,
+    22910, 22923, 22936, 22949, 22962, 22975, 22988, 23001, 23013, 23026,
+    23039, 23052, 23065, 23078, 23091, 23104, 23117, 23130, 23143, 23155,
+    23166, 23179, 23192, 23205, 23218, 23231, 23244, 23257, 23270, 23283,
+    23296, 23308, 23321, 23334, 23347, 23360, 23373, 23386, 23399, 23412,
+    23425, 23438, 23450, 23463, 23476, 23489, 23502, 23515, 23528, 23541,
+    23554, 23567, 23580, 23592, 23605, 23618, 23631, 23644, 23657, 23670,
+    23683, 23696, 23709, 23722, 23734, 23747, 23760, 23773, 23786, 23799,
+    23812, 23825, 23838, 23851, 23864, 23876, 23889, 23902, 23915, 23928,
+    23941, 23954, 23967, 23980, 23993, 24006, 24018, 24031, 24044, 24057,
+    24070, 24083, 24096, 24109, 24122, 24135, 24148, 24160, 24173, 24186,
+    24199, 24212, 24225, 24238, 24251, 24264, 24277, 24290, 24302, 24315,
+    24328, 24341, 24354, 24367, 24380, 24393, 24406, 24419, 24432, 24444,
+    24457, 24470, 24483, 24496, 24509, 24522, 24535, 24548, 24561, 24574,
+    24586, 24597, 24606, 24614, 24622, 24629, 24635, 24639, 24645, 24651,
+    24660, 24668, 24673, 24679, 24684, 24688, 24697, 10199, 24708, 24714,
+    24721, 24729, 24736, 12716, 12730, 24743, 24750, 24759, 24764, 24769,
+    24776, 24781, 24786, 8535, 8541, 8547, 24791, 24796, 24799, 24804, 24812,
+    24819, 24826, 24838, 24845, 24851, 24860, 24869, 24878, 24884, 24892,
+    24901, 24905, 24911, 24916, 24926, 24933, 24939, 24947, 24953, 24960,
+    24966, 24976, 24985, 24989, 24996, 25000, 25005, 25011, 25019, 25023,
+    25033, 16832, 25042, 25048, 25052, 25061, 25070, 25080, 25086, 16837,
+    25093, 25100, 25111, 25119, 25129, 25138, 25146, 9914, 25154, 25159,
+    25165, 25170, 25174, 25178, 25182, 10938, 25187, 25195, 25202, 25211,
+    25219, 25226, 25233, 25242, 25248, 1024, 25255, 25261, 25265, 25271,
+    25278, 25284, 25292, 25298, 25305, 25311, 25317, 25326, 25330, 25338,
+    25345, 25354, 25361, 25366, 25370, 25381, 25386, 25391, 25397, 25402,
+    25415, 8759, 25419, 25425, 25431, 25437, 25442, 25450, 25454, 25461,
+    25470, 25475, 17110, 25483, 25487, 25499, 25504, 25508, 25511, 25517,
+    25523, 25529, 25534, 25539, 25543, 25546, 25557, 25562, 10471, 25569,
+    25574, 25579, 25584, 25589, 25594, 25599, 25604, 25609, 10476, 25614,
+    25619, 25624, 25629, 25634, 25639, 25644, 25649, 25654, 25659, 25664,
+    25669, 25675, 25680, 25685, 25690, 25695, 25700, 25705, 25710, 25715,
+    25720, 25726, 25732, 25737, 25742, 25747, 25752, 25757, 25762, 25767,
+    25772, 25777, 25783, 25788, 25793, 25798, 25804, 25810, 25815, 25820,
+    25825, 25830, 25835, 25840, 25845, 25850, 25856, 25861, 25866, 25871,
+    25876, 25882, 25887, 25892, 25896, 1252, 145, 25904, 25908, 25912, 25916,
+    25921, 25925, 15269, 2314, 25929, 25934, 25938, 25943, 25947, 25952,
+    25956, 25962, 25967, 25971, 25975, 25983, 25987, 25991, 25998, 26003,
+    26008, 26012, 26018, 26023, 26027, 26032, 26037, 26041, 26048, 26055,
+    26062, 26067, 26071, 26075, 26080, 26084, 26087, 26093, 26106, 26111,
+    26117, 26126, 26131, 10698, 26136, 26145, 26150, 26153, 26157, 26162,
+    26167, 26172, 26177, 26182, 2825, 2830, 26187, 26193, 26197, 26203, 3787,
+    26208, 26213, 26218, 26224, 26229, 16203, 26234, 26239, 26244, 26249,
+    26255, 26260, 26265, 26271, 26276, 26280, 26285, 26290, 26295, 26300,
+    26305, 26309, 26314, 26318, 26323, 26328, 26333, 26338, 26342, 26347,
+    26351, 26356, 26361, 26366, 26281, 3026, 26286, 26371, 26379, 26386,
+    11032, 26398, 26406, 26416, 26434, 26453, 26462, 26470, 26291, 26477,
+    26482, 26490, 26296, 26495, 26500, 26508, 26513, 26518, 26522, 26301,
+    26527, 26535, 26540, 26544, 26551, 26557, 26566, 26570, 26578, 26582,
+    26585, 20054, 26592, 26596, 26600, 26605, 26611, 26618, 26623, 9941,
+    26627, 26632, 26637, 26642, 26647, 26652, 1657, 1662, 26657, 26663,
+    26669, 26674, 26678, 26682, 26686, 26690, 26694, 26698, 26702, 26706,
+    24832, 26709, 26716, 26724, 26730, 26736, 26741, 26746, 26752, 26756,
+    26761, 26768, 16109, 16116, 26774, 26786, 26789, 26796, 26800, 19256,
+    26807, 26815, 26826, 26835, 26848, 26858, 26872, 26884, 26898, 26911,
+    26923, 26933, 26945, 26951, 26957, 26972, 26996, 27014, 27033, 27046,
+    27060, 27078, 27094, 27111, 27129, 27140, 27159, 27176, 27196, 27214,
+    27226, 27240, 27254, 27266, 27283, 27302, 27320, 27332, 27350, 27369,
+    16990, 27382, 27402, 27414, 12148, 27426, 27431, 27436, 27441, 27450,
+    27456, 27461, 27465, 27472, 27478, 27482, 27487, 27492, 27497, 27502,
+    27507, 27512, 2411, 27517, 27523, 27527, 27530, 27541, 27545, 27548,
+    27556, 27562, 14421, 27566, 27575, 27586, 27592, 27598, 27613, 27622,
+    27630, 27637, 27642, 27646, 27653, 27659, 27668, 27676, 27683, 27693,
+    27702, 27712, 27717, 27726, 27735, 27746, 27757, 27767, 27784, 4442,
+    27794, 27798, 27808, 27816, 27826, 27837, 27843, 27848, 27858, 27866,
+    27873, 27879, 27886, 27891, 26329, 27895, 27904, 27908, 27911, 27916,
+    27924, 27931, 27940, 27948, 27956, 27964, 27974, 27983, 27989, 27995,
+    28001, 28005, 26334, 26339, 28009, 28019, 28029, 28039, 28047, 28054,
+    28064, 28072, 28080, 28086, 28094, 773, 28103, 17191, 625, 28117, 28126,
+    28134, 28145, 28156, 28166, 28175, 28187, 28196, 28205, 28212, 28218,
+    28228, 28237, 28246, 28254, 28262, 28272, 28280, 28288, 28295, 28301,
+    28306, 28311, 28316, 7928, 28321, 28324, 28328, 28333, 28339, 28344,
+    28348, 11157, 26352, 26357, 28356, 28362, 28368, 28373, 28378, 28382,
+    28390, 28396, 28402, 28406, 3811, 28414, 28419, 28424, 28428, 28432,
+    11286, 28439, 28447, 28461, 28468, 28475, 28481, 11295, 11301, 28489,
+    28497, 28504, 28509, 28514, 26362, 28520, 28531, 28535, 28540, 2660,
+    28545, 28556, 28562, 28567, 28571, 28575, 28578, 28585, 28592, 28598,
+    28606, 28613, 28619, 28623, 7968, 28628, 28632, 28636, 28644, 28649,
+    28654, 28659, 1685, 28664, 28669, 28674, 28679, 28684, 28689, 28694,
+    28699, 28704, 28709, 28714, 28719, 28724, 28729, 28735, 28740, 28745,
+    28750, 28755, 28760, 28765, 28771, 28776, 28781, 28786, 28791, 28796,
+    28801, 28806, 28812, 28818, 28823, 28829, 28834, 28839, 5, 28845, 28849,
+    28853, 28857, 28862, 28866, 28870, 28874, 28878, 28883, 28887, 28892,
+    28896, 28899, 28903, 28908, 28912, 28917, 28921, 28925, 28929, 28934,
+    28938, 28942, 28952, 28957, 28961, 28965, 28970, 28975, 28984, 28989,
+    28994, 28998, 29002, 29011, 29024, 29036, 29045, 29054, 29059, 29065,
+    29070, 29074, 29078, 29088, 29097, 29105, 29111, 29116, 29120, 29127,
+    29137, 29146, 29154, 12505, 29162, 29170, 29179, 29188, 29196, 29206,
+    29211, 29215, 29219, 29222, 29224, 29228, 29232, 29237, 29242, 29246,
+    29250, 29253, 29257, 29260, 29264, 29267, 29270, 29274, 29280, 29284,
+    29288, 29292, 29296, 29301, 29306, 29311, 29315, 29318, 29323, 29329,
+    29334, 29340, 29345, 29349, 29355, 29359, 29363, 29368, 29372, 29377,
+    29382, 29386, 29390, 29397, 29401, 29404, 29408, 29412, 29418, 29424,
+    29428, 29432, 29437, 29444, 29450, 29454, 29463, 29467, 29471, 29474,
+    29480, 29485, 29491, 1385, 1737, 29496, 29501, 29506, 29511, 29516,
+    29521, 29526, 2118, 799, 29531, 29534, 29538, 29542, 29547, 29551, 17203,
+    29555, 29560, 29565, 29569, 29572, 29577, 29581, 29586, 29590, 17207,
+    29595, 29598, 29601, 29607, 29611, 29616, 29620, 29633, 29637, 29640,
+    29648, 29657, 29664, 29669, 29675, 29681, 29689, 29696, 29703, 29707,
+    29711, 29715, 29720, 29725, 29729, 29737, 29742, 29749, 29761, 29772,
+    29777, 29781, 29788, 29792, 29797, 29803, 29806, 29811, 29816, 29823,
+    29827, 29831, 29834, 29840, 8659, 2318, 29844, 29849, 29865, 10749,
+    29885, 29894, 29910, 29914, 29921, 29924, 29930, 29940, 29946, 29955,
+    29970, 29981, 29993, 30004, 30012, 30021, 30027, 30036, 30046, 30056,
+    30067, 30078, 30088, 30097, 30104, 30113, 30121, 30128, 30135, 30143,
+    30150, 30157, 30170, 30177, 30185, 30192, 30198, 30203, 30212, 30219,
+    30225, 30230, 30238, 30246, 30253, 30260, 27818, 30272, 30284, 30298,
+    30306, 30314, 30322, 30329, 30341, 30350, 30359, 30367, 30375, 30383,
+    30390, 30396, 30405, 30413, 30423, 30432, 30442, 30451, 30460, 30468,
+    30473, 30477, 30480, 30484, 30488, 30492, 30496, 30500, 30506, 30512,
+    30517, 30525, 17265, 30532, 30537, 30544, 30550, 30556, 30563, 13589,
+    30570, 30573, 30585, 30593, 30599, 30604, 30608, 30619, 30629, 30639,
+    11225, 30648, 30657, 30665, 30675, 30684, 30691, 30698, 30706, 30710,
+    17284, 30713, 30720, 30724, 4386, 30730, 30733, 30740, 30746, 30751,
+    30758, 30764, 30768, 30773, 30777, 30786, 30793, 30799, 8712, 30806,
+    30814, 30821, 30827, 30832, 30838, 30844, 30852, 30858, 30862, 30865,
+    30867, 30485, 11238, 30876, 30881, 30887, 30897, 30902, 30909, 30917,
+    30923, 30928, 30933, 30938, 30942, 30947, 30954, 30960, 30969, 30977,
+    30981, 30988, 30994, 31003, 31009, 31016, 4645, 31022, 31028, 31033,
+    31040, 31052, 31063, 31068, 31076, 31080, 31090, 31096, 31100, 31105,
+    31115, 31124, 31128, 31135, 31143, 31150, 31156, 31161, 31169, 31176,
+    31181, 31188, 31200, 31209, 31213, 15195, 31221, 31231, 31235, 31243,
+    31250, 31257, 29644, 31268, 31273, 31277, 31284, 31291, 26014, 30410,
+    31296, 31300, 31303, 27146, 31308, 31322, 31338, 31356, 31375, 31392,
+    31410, 27165, 31427, 31447, 27182, 31459, 31471, 18478, 31483, 27202,
+    31497, 31509, 12161, 31523, 31528, 31533, 31538, 31544, 31550, 31556,
+    31560, 31568, 31574, 31581, 31586, 31596, 31602, 11723, 31608, 31610,
+    31615, 31623, 31627, 30950, 31633, 31640, 13437, 13447, 31647, 31654,
+    31664, 31669, 31673, 31676, 31682, 31690, 31702, 31712, 31728, 31741,
+    31755, 18496, 31769, 31776, 31780, 31783, 31788, 31792, 31799, 31806,
+    31813, 31820, 31830, 31835, 31840, 31845, 31853, 31861, 31866, 31875,
+    27839, 3466, 31880, 31883, 31886, 31891, 31898, 31903, 31908, 31924,
+    31932, 31940, 10513, 31948, 31953, 31957, 31963, 31968, 31974, 31977,
+    31983, 31995, 32003, 32010, 32016, 32023, 32034, 32048, 32061, 32067,
+    32076, 32082, 32091, 32103, 32114, 32124, 32133, 32142, 32150, 32161,
+    656, 32168, 32175, 32181, 32186, 32192, 32199, 32205, 32216, 32226,
+    32236, 32245, 32251, 32258, 32263, 32271, 32278, 32286, 32294, 32306,
+    6917, 32313, 32316, 32325, 32333, 32339, 32345, 32350, 32354, 32357,
+    32363, 32370, 32375, 32380, 32385, 32389, 32401, 32412, 32421, 32429,
+    17466, 32434, 32442, 32447, 32455, 32461, 32467, 13430, 9509, 32472,
+    32476, 32480, 32483, 32486, 32492, 32500, 32508, 32512, 32516, 32521,
+    32525, 32528, 32537, 32542, 32546, 32549, 32554, 32562, 32573, 32582,
+    32586, 32592, 32598, 32602, 32608, 32616, 32638, 32662, 32673, 32682,
+    32688, 32695, 32702, 32708, 32716, 32722, 32727, 32738, 32756, 32763,
+    32771, 32775, 32782, 32787, 32796, 32809, 32817, 32829, 32840, 32851,
+    32861, 32875, 32884, 32892, 32904, 10766, 32915, 32926, 32937, 32949,
+    32959, 32968, 32978, 32983, 32987, 32995, 33006, 33016, 33022, 33027,
+    33031, 33034, 33037, 33045, 33053, 33062, 33072, 33081, 33087, 33101,
+    2743, 33123, 33134, 33143, 33153, 33165, 33174, 33183, 33193, 33201,
+    33209, 33218, 33223, 33234, 33239, 33248, 33254, 33265, 33269, 33272,
+    33282, 33291, 33299, 33309, 33319, 33327, 33336, 33343, 33351, 33358,
+    33367, 33376, 33381, 33386, 33390, 33398, 33405, 33409, 33417, 33424,
+    33435, 33450, 33457, 33463, 33473, 33482, 33488, 33499, 33503, 33510,
+    33514, 33521, 33527, 16340, 33533, 33537, 33542, 33548, 33555, 33559,
+    33563, 33571, 33579, 33585, 33594, 33601, 33608, 33613, 33618, 33628,
+    27893, 33632, 33635, 33640, 33645, 33650, 33655, 33660, 33665, 33670,
+    33675, 33681, 33686, 33691, 33697, 1102, 757, 33702, 33709, 33718, 2366,
+    33725, 33730, 33734, 33740, 1151, 604, 33745, 328, 33749, 33758, 33766,
+    33775, 33783, 33790, 33801, 33809, 33818, 33826, 33836, 33844, 33849,
+    11393, 33853, 33861, 33869, 33874, 17220, 4000, 33880, 33886, 33892,
+    6459, 33897, 33901, 33908, 33914, 33920, 33924, 33930, 33935, 33942,
+    1344, 33948, 33955, 33959, 1251, 6467, 33964, 33974, 33982, 33988, 33998,
+    34007, 34015, 34021, 34026, 34034, 34041, 12947, 34047, 34054, 34059,
+    34066, 34076, 1404, 251, 2117, 34082, 34088, 34095, 34106, 34117, 34125,
+    34132, 34142, 34151, 34159, 34168, 34175, 34182, 34195, 34202, 34208,
+    34219, 34238, 34243, 1156, 34247, 34252, 34260, 3883, 34264, 34269,
+    34273, 34277, 1348, 29251, 34287, 34291, 34296, 34300, 34306, 3745,
+    34312, 34320, 34327, 34338, 34347, 34355, 34380, 34388, 34393, 3884, 391,
+    34399, 34407, 34415, 34422, 34428, 34433, 2186, 12363, 34440, 34446,
+    30769, 31058, 34452, 632, 106, 34456, 34460, 34466, 747, 10386, 34471,
+    34478, 34484, 34488, 34492, 1549, 34495, 34499, 17734, 34502, 34507,
+    34514, 34520, 8725, 34525, 34533, 34540, 34546, 26524, 34550, 34554,
+    34558, 34562, 3954, 19566, 34566, 34571, 34575, 34578, 34586, 34594,
+    34599, 34608, 34616, 34619, 34626, 34636, 34648, 34656, 34661, 34665,
+    34673, 34680, 34686, 34693, 34700, 34703, 34707, 34711, 1359, 34721,
+    34723, 34728, 34734, 34740, 34745, 34750, 34755, 34760, 34765, 34770,
+    34775, 34780, 34785, 34790, 34795, 34800, 34805, 34810, 34816, 34822,
+    34828, 34834, 34839, 34844, 34849, 34855, 34860, 34865, 34870, 34876,
+    34881, 34887, 34892, 34897, 34902, 34907, 34913, 34918, 34924, 34929,
+    34934, 34939, 34944, 34950, 34955, 34961, 34966, 34971, 34976, 34981,
+    34986, 34991, 34996, 35001, 35006, 35012, 35018, 35024, 35029, 35034,
+    35039, 35044, 35050, 35056, 35062, 35068, 35074, 35080, 35085, 35091,
+    35096, 35101, 35106, 35111, 35117, 2457, 35122, 2464, 2471, 2867, 35127,
+    2477, 2487, 35133, 2519, 2524, 2529, 35137, 35142, 35147, 35153, 35158,
+    35163, 35167, 35172, 35178, 35183, 35188, 35193, 35199, 35204, 35208,
+    35212, 35217, 35222, 35227, 35232, 35237, 35243, 35249, 35254, 35258,
+    35263, 35269, 35273, 35278, 35283, 35288, 35293, 35297, 35300, 35305,
+    35310, 35315, 35320, 35325, 35331, 35337, 35342, 35347, 35352, 35356,
+    35361, 35366, 35371, 35376, 35381, 35386, 35390, 35395, 35400, 35405,
+    35409, 35413, 35417, 35422, 35430, 35435, 35440, 35446, 35452, 35458,
+    35463, 35471, 35475, 35478, 35483, 35488, 35492, 35497, 35502, 35506,
+    35511, 35515, 35518, 35523, 4096, 21057, 35528, 35533, 35538, 35543,
+    35551, 25222, 33952, 10025, 35556, 35561, 35565, 35570, 35574, 35578,
+    35583, 35587, 35590, 35593, 35597, 35602, 35606, 35614, 35618, 35621,
+    35626, 35630, 35634, 35639, 35644, 35648, 35654, 35659, 35664, 35671,
+    35678, 35682, 35685, 35691, 35700, 35707, 35715, 35722, 35726, 35731,
+    35735, 35739, 35745, 35750, 35756, 35760, 35766, 35771, 35776, 35780,
+    35787, 35793, 35799, 35805, 35811, 35818, 35824, 35830, 35836, 35842,
+    35848, 35854, 35860, 35867, 35873, 35880, 35886, 35892, 35898, 35904,
+    35910, 35916, 35922, 35928, 35934, 35940, 35945, 35950, 13302, 35955,
+    35961, 35966, 35971, 35976, 35981, 35984, 35990, 35995, 36003, 36008,
+    36012, 36017, 36023, 36032, 36038, 36043, 36048, 36053, 36057, 36062,
+    36066, 36071, 36076, 36081, 36086, 36093, 36100, 36106, 36112, 36117,
+    19185, 36124, 36130, 36137, 36143, 36149, 36154, 36162, 36167, 10931,
+    36171, 36176, 36181, 36187, 36192, 36197, 36201, 36206, 36211, 36217,
+    36222, 36227, 36232, 36236, 36241, 36246, 36250, 36255, 36260, 36264,
+    36269, 36273, 36278, 36283, 36288, 36292, 36297, 36301, 36306, 36310,
+    36314, 36318, 17890, 36323, 36330, 36339, 36345, 36351, 36360, 36368,
+    36377, 36385, 36390, 36394, 36401, 36407, 36415, 36419, 36422, 36427,
+    36431, 36440, 36448, 36466, 36472, 1403, 36478, 36481, 36485, 26664,
+    26670, 36491, 36495, 36506, 36517, 36528, 36540, 36544, 36551, 36558,
+    36565, 36570, 36574, 36582, 36587, 36592, 36597, 36602, 6524, 1076,
+    25221, 36607, 36612, 36616, 36621, 36625, 36631, 36636, 36642, 36647,
+    36653, 36658, 36664, 36669, 36675, 36681, 36687, 36692, 36648, 36654,
+    36696, 36701, 36707, 36712, 36718, 36723, 36729, 36734, 36659, 12014,
+    36738, 36670, 36676, 36682, 2959, 3659, 36744, 36747, 36752, 36758,
+    36764, 36770, 36777, 36783, 36789, 36795, 36801, 36807, 36813, 36819,
+    36825, 36831, 36837, 36843, 36849, 36856, 36862, 36868, 36874, 36880,
+    36886, 36889, 36894, 36897, 36904, 36909, 36917, 36921, 36926, 36931,
+    36937, 36942, 36947, 36951, 36956, 36962, 36967, 36973, 36978, 36984,
+    36989, 36995, 37001, 37005, 37010, 37015, 37020, 37025, 37029, 37034,
+    37039, 37044, 37050, 37056, 37062, 37068, 37073, 37077, 37080, 37086,
+    37092, 37101, 37109, 37116, 37121, 37125, 37129, 37134, 17680, 37139,
+    37147, 37153, 4042, 1261, 37158, 37162, 8775, 37168, 37174, 37181, 8784,
+    37185, 37191, 37197, 37204, 37210, 37219, 37227, 37239, 37243, 37250,
+    37256, 37261, 37265, 37269, 37272, 37282, 37291, 37299, 36649, 37304,
+    37314, 37324, 37334, 37340, 37345, 37355, 37360, 37373, 37387, 37398,
+    37410, 37422, 37436, 37449, 37461, 37473, 17031, 37487, 37492, 37497,
+    37501, 37505, 37509, 37513, 37519, 37524, 37529, 37534, 37539, 37544,
+    37549, 1726, 32112, 37554, 37559, 37564, 36697, 37569, 37572, 37577,
+    37582, 37587, 37593, 37599, 18802, 11589, 37604, 37610, 37617, 18430,
+    37623, 37628, 37633, 37637, 37642, 37647, 36702, 37652, 37657, 37662,
+    37668, 36708, 37673, 37676, 37683, 37691, 37697, 37703, 37709, 37720,
+    37725, 37732, 37739, 37746, 37754, 37763, 37772, 37778, 37784, 37792,
+    36713, 37797, 37803, 37809, 36719, 37814, 37819, 37827, 37835, 37841,
+    37848, 37854, 37861, 37868, 37874, 37882, 37892, 37899, 37905, 37910,
+    37916, 37921, 37926, 37933, 37942, 37950, 37955, 37961, 37968, 37976,
+    37982, 37987, 37993, 38002, 38009, 33067, 38015, 38019, 38024, 38033,
+    38038, 38043, 38048, 14511, 38056, 38061, 38066, 38071, 38075, 38080,
+    38085, 38092, 38097, 38102, 38107, 36724, 25150, 38113, 2560, 155, 38116,
+    38119, 38123, 38127, 38137, 38145, 38152, 38156, 38160, 38163, 38171,
+    38178, 38185, 31012, 38194, 38197, 38204, 38210, 38217, 38221, 38229,
+    38237, 38244, 38248, 38252, 38255, 38261, 38268, 38272, 38276, 38283,
+    38291, 38299, 38306, 36660, 38313, 38321, 38326, 38338, 11670, 11677,
+    11684, 11691, 11698, 11705, 589, 416, 38344, 38349, 38354, 38360, 38365,
+    38370, 4063, 38375, 38378, 38383, 38388, 38393, 38398, 38403, 38410,
+    26782, 38415, 38420, 38425, 38430, 38435, 38441, 38446, 38452, 36900,
+    38458, 38463, 38469, 38475, 38485, 38490, 38495, 38499, 38504, 38509,
+    38514, 38519, 38532, 38537, 26402, 19648, 1026, 38541, 38547, 38551,
+    38556, 38561, 38567, 38572, 38577, 38581, 38586, 38591, 38597, 38602,
+    38607, 1266, 38611, 38616, 38621, 38626, 38630, 38635, 38640, 38645,
+    38651, 38657, 38662, 38666, 38670, 38675, 38680, 38685, 38689, 38694,
+    38702, 38706, 38712, 38716, 38723, 38732, 19419, 36671, 38738, 38745,
+    38753, 38760, 38766, 38779, 38791, 38796, 38802, 38806, 2886, 38810,
+    38814, 38263, 38823, 38834, 38845, 38850, 33130, 38855, 38860, 38864,
+    33250, 26675, 38869, 38873, 38878, 36677, 25257, 38882, 38887, 38893,
+    38898, 38902, 38906, 38909, 38913, 38919, 38928, 38939, 38951, 36683,
+    38956, 38959, 38963, 38967, 38972, 38977, 38982, 38987, 38992, 38997,
+    39002, 39007, 359, 39012, 39017, 39022, 39027, 39032, 39037, 39043,
+    39048, 39053, 39059, 39064, 39070, 39075, 39081, 39086, 39091, 39096,
+    39101, 39106, 39111, 39116, 39121, 39127, 39132, 39137, 39142, 39147,
+    39152, 39157, 39162, 39168, 39174, 39179, 39184, 39189, 39194, 39199,
+    39204, 39209, 39214, 39219, 39224, 39229, 39234, 39239, 39244, 39249,
+    39254, 39259, 39264, 39274, 39284, 39290, 343, 14, 39295, 39299, 39303,
+    39311, 39315, 39319, 39322, 16460, 39325, 39330, 39334, 39339, 39343,
+    39348, 39352, 39357, 39361, 39364, 39366, 39370, 39375, 39379, 39390,
+    39393, 39395, 39399, 39411, 39423, 39432, 39436, 39446, 39450, 39456,
+    39461, 39470, 39476, 39481, 39486, 39490, 39494, 39499, 39506, 39511,
+    39517, 39522, 39526, 39533, 30418, 30428, 39537, 39542, 39547, 39552,
+    39559, 39563, 39570, 39576, 8930, 39580, 39589, 39597, 39612, 39626,
+    39635, 39643, 39654, 39663, 39668, 39675, 39685, 7937, 39695, 39700,
+    39705, 39709, 39712, 39717, 39721, 39726, 39730, 39737, 39742, 39747,
+    39752, 39762, 39767, 39772, 39777, 9895, 39782, 39784, 39792, 39795,
+    39798, 39800, 39804, 39810, 39814, 39819, 39824, 39842, 39856, 39875,
+    39892, 39901, 39909, 39914, 39919, 1396, 39925, 39931, 39936, 39946,
+    39955, 39963, 39968, 39974, 39979, 39988, 39997, 40008, 40013, 40020,
+    40026, 40030, 40039, 40046, 40054, 40061, 40074, 40082, 40086, 40096,
+    40101, 40105, 40113, 40121, 40126, 40130, 40134, 40143, 40149, 40154,
+    40162, 40172, 40181, 40190, 40199, 40210, 40218, 40229, 40238, 40246,
+    40253, 40259, 40264, 40275, 40286, 40291, 40295, 40298, 40302, 40310,
+    40316, 40327, 40338, 40349, 40360, 40371, 40382, 40393, 40404, 40416,
+    40428, 40440, 40452, 40464, 40476, 40488, 40497, 40501, 40509, 40515,
+    40521, 40528, 40534, 40539, 40545, 40549, 40554, 40559, 40564, 39269,
+    39279, 2431, 40569, 40571, 40576, 40581, 40586, 40589, 40591, 40595,
+    40598, 40605, 40609, 11249, 40613, 40619, 40626, 40636, 40641, 40647,
+    40651, 40656, 40669, 30892, 40675, 40684, 40693, 21280, 40700, 40709,
+    37320, 40717, 40722, 40726, 40735, 40743, 40750, 40755, 40759, 40764,
+    40769, 40777, 40781, 40789, 40795, 40801, 40806, 40811, 40815, 40818,
+    40823, 40836, 40852, 27272, 40869, 40881, 40898, 40910, 40924, 27289,
+    27308, 40936, 40948, 2760, 40962, 40967, 40972, 40977, 40981, 40988,
+    41000, 41007, 41016, 41019, 41030, 41041, 41049, 41054, 41058, 41063,
+    41068, 41073, 41078, 41083, 41088, 37789, 956, 41093, 41097, 41101,
+    41104, 41109, 41114, 41120, 41125, 41130, 41136, 41142, 41147, 41151,
+    41156, 41161, 41166, 41170, 41173, 41179, 41184, 41189, 41194, 41198,
+    41203, 41209, 41217, 31193, 41222, 41227, 41234, 41240, 41246, 41251,
+    41259, 26791, 41266, 41271, 41276, 41281, 41285, 41288, 41293, 41297,
+    41301, 41308, 41314, 41320, 41326, 41333, 41338, 41344, 40116, 41348,
+    41352, 41357, 41370, 41375, 41381, 41389, 41396, 41404, 41414, 41420,
+    41426, 41432, 41436, 41445, 41453, 41460, 41465, 41470, 12037, 41475,
+    41485, 41492, 41498, 41508, 41513, 41519, 41527, 3916, 41534, 41541,
+    41547, 41554, 3922, 41558, 41563, 41574, 41581, 41587, 41596, 41600,
+    4494, 41603, 41610, 41616, 41622, 41630, 41640, 34423, 41647, 41655,
+    41661, 41666, 41672, 41677, 41681, 30736, 41687, 41694, 41700, 41708,
+    41717, 41724, 41730, 41741, 28091, 41747, 41757, 41762, 41766, 41774,
+    41782, 41789, 41795, 41800, 10889, 6499, 41805, 41809, 41811, 41815,
+    41820, 41822, 41827, 41833, 41838, 41843, 41850, 38406, 41856, 41861,
+    41865, 41870, 41874, 41883, 41887, 41893, 41900, 41906, 41913, 41918,
+    41927, 41932, 41936, 41941, 41948, 41956, 41964, 41969, 25313, 41973,
+    41976, 41980, 41984, 12460, 983, 41988, 41993, 42001, 42006, 42010,
+    42019, 42026, 42030, 42034, 42042, 42049, 15793, 42059, 42063, 42067,
+    42075, 42083, 42089, 42094, 42098, 42107, 15541, 42113, 42122, 42129,
+    42134, 42141, 42148, 42156, 42163, 42171, 42179, 42188, 42193, 42200,
+    42207, 42214, 42221, 42228, 42233, 42240, 42246, 42263, 42271, 42281,
+    42289, 42296, 459, 42300, 42306, 42310, 42315, 39659, 42321, 42324,
+    42328, 42334, 42345, 42353, 3927, 42361, 42367, 42373, 42383, 42389,
+    42398, 42407, 42417, 42424, 42430, 42435, 3933, 3939, 42444, 42452,
+    42459, 13907, 42467, 42471, 42478, 42486, 42493, 42500, 42506, 42515,
+    42525, 42531, 42539, 42548, 42555, 42563, 42570, 26077, 42574, 42581,
+    42587, 42597, 42606, 42614, 42625, 42629, 42639, 42646, 42651, 42656,
+    42662, 42669, 42677, 42686, 42695, 42705, 42716, 42723, 42728, 42735,
+    3174, 42743, 42749, 42754, 42761, 42767, 42773, 42778, 42791, 42804,
+    42817, 42824, 42830, 42838, 42846, 42851, 42855, 42859, 42864, 42869,
+    42874, 42879, 42884, 42889, 1365, 42894, 42898, 42902, 42906, 42910,
+    42914, 42918, 42922, 42926, 42930, 42934, 42938, 42942, 42946, 42950,
+    42954, 42958, 42962, 42966, 42970, 42974, 42978, 42982, 42986, 42990,
+    42994, 42998, 43002, 43006, 43010, 43014, 43018, 43022, 43026, 43030,
+    43034, 43038, 43042, 43046, 43050, 43054, 43058, 43062, 43066, 43070,
+    43074, 43078, 43082, 43086, 43090, 43094, 43098, 43102, 43106, 43110,
+    43114, 43118, 43122, 43126, 43130, 43134, 43138, 43142, 43146, 43150,
+    43154, 43158, 43162, 43166, 43170, 43174, 43178, 43182, 43186, 43190,
+    43194, 43198, 43202, 43206, 43210, 43214, 43218, 43222, 43226, 43230,
+    43234, 43238, 43242, 43246, 43250, 43254, 43258, 43262, 43266, 43270,
+    43274, 43278, 43282, 43286, 43290, 43294, 43298, 43302, 43306, 43310,
+    43314, 43318, 43322, 43326, 43330, 43334, 43338, 43342, 43346, 43350,
+    43354, 43358, 43362, 43366, 43370, 43374, 43378, 43382, 43386, 43390,
+    43394, 43398, 43402, 43406, 43410, 43414, 43418, 43422, 43426, 43430,
+    43434, 43438, 43442, 43446, 43450, 43454, 43458, 43462, 43466, 43470,
+    43474, 43478, 43482, 43486, 43490, 43494, 43498, 43502, 43506, 43511,
+    43515, 43520, 43524, 43529, 43533, 43538, 43542, 43548, 43553, 43557,
+    43562, 43566, 43571, 43575, 43580, 43584, 43589, 43593, 43598, 43602,
+    43607, 43611, 43617, 43623, 43628, 43632, 43637, 43641, 43647, 43652,
+    43656, 43661, 43665, 43670, 43674, 43680, 43685, 43689, 43694, 43698,
+    43703, 43707, 43712, 43716, 43722, 43727, 43731, 43736, 43740, 43746,
+    43751, 43755, 43760, 43764, 43769, 43773, 43778, 43782, 43787, 43791,
+    43797, 43802, 43806, 43812, 43817, 43821, 43827, 43832, 43836, 43841,
+    43845, 43850, 43854, 43860, 43866, 43872, 43878, 43884, 43890, 43896,
+    43902, 43907, 43911, 43916, 43920, 43926, 43931, 43935, 43940, 43944,
+    43949, 43953, 43958, 43962, 43967, 43971, 43976, 43980, 43985, 43989,
+    43995, 44000, 44004, 44009, 44013, 44019, 44025, 44030, 127, 63, 44034,
+    44036, 44040, 44044, 44048, 44053, 44057, 44061, 44066, 10802, 44071,
+    44077, 1671, 6956, 44083, 44086, 44091, 44095, 44100, 44104, 44108,
+    44113, 11821, 44117, 44121, 44125, 593, 44129, 17999, 44134, 44138,
+    44143, 44148, 44153, 44157, 44164, 44170, 30924, 44176, 44179, 44183,
+    44188, 44194, 44198, 44201, 44209, 44215, 44220, 44224, 44227, 44231,
+    44237, 44241, 44245, 3710, 3715, 14623, 44248, 44252, 44256, 44260,
+    44264, 44272, 44279, 44283, 15491, 44290, 44304, 44311, 44322, 378,
+    44327, 44331, 44337, 44349, 44355, 44361, 44366, 44372, 44376, 34696,
+    44385, 44391, 44400, 44404, 44408, 44413, 44419, 44424, 44428, 44433,
+    44437, 44441, 44448, 44454, 44459, 44470, 44485, 44500, 44515, 44531,
+    44549, 11735, 44563, 44570, 44574, 44577, 44586, 44591, 44595, 44603,
+    18633, 44611, 44615, 44625, 44636, 34621, 999, 44649, 44658, 44676,
+    44695, 44704, 44712, 44720, 11084, 11934, 44724, 26687, 44727, 35610,
+    44732, 11083, 44737, 44743, 44748, 44754, 44759, 44765, 44770, 44776,
+    44781, 44787, 44793, 44799, 44804, 44760, 44766, 44808, 44771, 44777,
+    44782, 44813, 44788, 44794, 8943, 4319, 44819, 44827, 44831, 44834,
+    44841, 44845, 44850, 44855, 44862, 44868, 44874, 44879, 17312, 44883,
+    30753, 44887, 44891, 44895, 44901, 44905, 33001, 44914, 10058, 44918,
+    10484, 44921, 44928, 44934, 44938, 13932, 44945, 44951, 44956, 44963,
+    44970, 44977, 33770, 8840, 44984, 44991, 44998, 45004, 45009, 45016,
+    45027, 45033, 45038, 45043, 45048, 45052, 45057, 45064, 44761, 45068,
+    45078, 45087, 45098, 45104, 45112, 45119, 45124, 45129, 45134, 45139,
+    45144, 45148, 45152, 45159, 45165, 45173, 2321, 29847, 11837, 11849,
+    11854, 11860, 45182, 11865, 11870, 11876, 45187, 45197, 45201, 11881,
+    45206, 19846, 45209, 45214, 45218, 41011, 45229, 45234, 45241, 45248,
+    45252, 45255, 45263, 11748, 45270, 45273, 45279, 45289, 6557, 45298,
+    45303, 45309, 45313, 45321, 45325, 45335, 45341, 45346, 45357, 45366,
+    45375, 45384, 45393, 45402, 45411, 45420, 45426, 45432, 45437, 45443,
+    45449, 45455, 45460, 45463, 45470, 45476, 45480, 45485, 45492, 45499,
+    45503, 45506, 45516, 45529, 45538, 45547, 45558, 45571, 45583, 45594,
+    45603, 45614, 45619, 45628, 45633, 11886, 45639, 45646, 45654, 45661,
+    45666, 45671, 30970, 45675, 45682, 4259, 25, 45686, 45691, 19695, 45695,
+    45698, 45701, 33187, 45705, 33779, 45713, 45717, 45721, 45724, 45730,
+    45736, 45741, 36748, 45750, 45758, 45764, 45771, 33170, 45775, 33401,
+    45779, 45788, 45792, 45800, 45806, 45812, 45817, 45821, 33805, 45827,
+    45830, 45838, 45846, 4646, 45852, 45856, 45860, 45865, 45872, 45878,
+    45883, 45888, 45892, 45898, 45903, 45909, 4547, 788, 45916, 45920, 45923,
+    45935, 45942, 45947, 17872, 45951, 45959, 45967, 45975, 45983, 45990,
+    45998, 46006, 46013, 46021, 46029, 46037, 46045, 46053, 46061, 46069,
+    46077, 46085, 46093, 46101, 46108, 46116, 46124, 46132, 46140, 46148,
+    46156, 46164, 46172, 46180, 46188, 46196, 46204, 46212, 46220, 46228,
+    46236, 46244, 46252, 46260, 46267, 46275, 46282, 46290, 46298, 46306,
+    46314, 46322, 46330, 46338, 46346, 46357, 26113, 46362, 46365, 46372,
+    46376, 46382, 46386, 46392, 46397, 46403, 46408, 46413, 46417, 46421,
+    46428, 46436, 46441, 46446, 46456, 46462, 46475, 46481, 46487, 46493,
+    46496, 46503, 46508, 46514, 46519, 19591, 930, 46524, 46527, 46530,
+    46533, 36832, 36838, 46536, 36844, 36857, 36863, 36869, 46542, 36875,
+    36881, 46548, 46554, 10, 46562, 46569, 46573, 46577, 46585, 37678, 46589,
+    46593, 46600, 46605, 46609, 46614, 46620, 46625, 46631, 46636, 46640,
+    46644, 46648, 46653, 46657, 46662, 46666, 46670, 46677, 46682, 46686,
+    46690, 46695, 46699, 46704, 46708, 46712, 46717, 46723, 18156, 18161,
+    46728, 46732, 46735, 46741, 46745, 46749, 25107, 46754, 46758, 46764,
+    46771, 46777, 46782, 39688, 46792, 46797, 46805, 46809, 46812, 37693,
+    46816, 4612, 46821, 46826, 46830, 46835, 46839, 46844, 15559, 46855,
+    46859, 46862, 46866, 46871, 46875, 46880, 46885, 46889, 46893, 46897,
+    46900, 46904, 46907, 46912, 46917, 46922, 46927, 46932, 46937, 8430,
+    15575, 46942, 46945, 46951, 46956, 46962, 46967, 46973, 46978, 46984,
+    46989, 46995, 47001, 47007, 47012, 47016, 47020, 47027, 47036, 47052,
+    47068, 47078, 33077, 47085, 47089, 47094, 47099, 47103, 47107, 42690,
+    47113, 47118, 47122, 47129, 47134, 47139, 47143, 47146, 47150, 47156,
+    31915, 47160, 25427, 47165, 47172, 47180, 47186, 47193, 47201, 47207,
+    47211, 47216, 47222, 47230, 47235, 47239, 47248, 10783, 47256, 47260,
+    47268, 47275, 47280, 47285, 47290, 47294, 47297, 47303, 47307, 47310,
+    47314, 47321, 47326, 47330, 47336, 47340, 47346, 47351, 47356, 31293,
+    36895, 47361, 47370, 47378, 47383, 47389, 47401, 47414, 47428, 47435,
+    47441, 47447, 47452, 47460, 47463, 47465, 47472, 47479, 47485, 47489,
+    8429, 47492, 47496, 47500, 47505, 47509, 47513, 47516, 47520, 47534,
+    27338, 47553, 47566, 47579, 47592, 27356, 47607, 2713, 47622, 47628,
+    47632, 47642, 47646, 47650, 47655, 47659, 47666, 47671, 47675, 47682,
+    47688, 47693, 47699, 47709, 47721, 47732, 47737, 47744, 47748, 47752,
+    47755, 47763, 18654, 4031, 47768, 18189, 47781, 47788, 47795, 47801,
+    47805, 47809, 47814, 47820, 47825, 47831, 47835, 47839, 47842, 47847,
+    47851, 47856, 47861, 47866, 47871, 47876, 47881, 47886, 47891, 47896,
+    8484, 18200, 47901, 47905, 47911, 47920, 47925, 47934, 47941, 42521,
+    47947, 47952, 47956, 47963, 47968, 47975, 47981, 47985, 47988, 47992,
+    47997, 2791, 48004, 48011, 48015, 48018, 48023, 48028, 48034, 48039,
+    48044, 48048, 48053, 48063, 48068, 48074, 48079, 45937, 48085, 48091,
+    48101, 48106, 48111, 48115, 48120, 48125, 7939, 7951, 48130, 48133,
+    48140, 48146, 48155, 9975, 40256, 48163, 48167, 48171, 37741, 48179,
+    48190, 48198, 42738, 48205, 48210, 48215, 48226, 48233, 48244, 37765,
+    25444, 48252, 1054, 48257, 15982, 48263, 33161, 48269, 48274, 48284,
+    48293, 48300, 48306, 48310, 48313, 48320, 48326, 48333, 48339, 48349,
+    48357, 48363, 48369, 48374, 48378, 48385, 48390, 48396, 48403, 48409,
+    47501, 48414, 48418, 16024, 16033, 16042, 16051, 16060, 16089, 646,
+    16098, 48424, 48429, 48432, 48438, 48446, 1283, 48451, 48455, 48460,
+    48465, 48470, 48477, 48483, 48487, 48492, 48498, 48502, 36905, 48507,
+    48512, 48521, 48528, 48538, 48544, 33205, 48561, 48570, 48578, 48584,
+    48589, 48596, 48602, 48610, 48619, 48627, 48635, 48641, 48645, 48650,
+    48658, 34302, 37774, 48664, 48683, 18557, 48697, 48713, 48727, 48733,
+    48738, 48743, 48748, 48754, 37780, 48759, 48762, 48769, 48776, 48785,
+    48790, 48794, 442, 3081, 48801, 48806, 48811, 32290, 48599, 48815, 48820,
+    48828, 48832, 48835, 48840, 48846, 48852, 48857, 48861, 33278, 48864,
+    48869, 48873, 48876, 48881, 48885, 48890, 48895, 48899, 48904, 48908,
+    48912, 48916, 25103, 25114, 48921, 48926, 48932, 48937, 48943, 48949,
+    31871, 48954, 48958, 48961, 48967, 48972, 48977, 48982, 48987, 48992,
+    48997, 49002, 49007, 49013, 49019, 25200, 18864, 49024, 49029, 49034,
+    49039, 49044, 49049, 49054, 49059, 450, 68, 36922, 36927, 36932, 36938,
+    36943, 36948, 49064, 36952, 49068, 49072, 49076, 36957, 36963, 49090,
+    36974, 36979, 49098, 49103, 36985, 49108, 49113, 49122, 49127, 49132,
+    49141, 49147, 49153, 49159, 37002, 49172, 49181, 49187, 37006, 49191,
+    37011, 49196, 37016, 37021, 49199, 49204, 49208, 49214, 15800, 49221,
+    15810, 49228, 49233, 37026, 49237, 49242, 49247, 49252, 49257, 49261,
+    49266, 49271, 49277, 49282, 49287, 49293, 49299, 49304, 49308, 49313,
+    49318, 49323, 49327, 49332, 49337, 49342, 49348, 49354, 49360, 49365,
+    49369, 49374, 49378, 37030, 37035, 37040, 49382, 49386, 49391, 49395,
+    49407, 37045, 37051, 37057, 37069, 49413, 30790, 49417, 49422, 49426,
+    49431, 49438, 49443, 49448, 49453, 49457, 49461, 49471, 49476, 49481,
+    49485, 49489, 49492, 49500, 49505, 37117, 49509, 1375, 49515, 49520,
+    49526, 49534, 49538, 49547, 49555, 49559, 49563, 49571, 49577, 49585,
+    49601, 49605, 49609, 49613, 49618, 49624, 49639, 37154, 1679, 14140,
+    49643, 1262, 1277, 49655, 49663, 49670, 49675, 49682, 49687, 10467, 977,
+    2546, 11913, 49694, 10365, 49699, 49702, 49711, 1170, 49716, 47672,
+    49723, 49732, 49737, 49741, 49749, 26737, 2602, 49756, 12413, 49766,
+    49772, 2339, 2349, 49781, 49790, 49800, 49811, 3489, 40637, 49816, 4226,
+    4237, 19629, 1175, 49820, 49828, 49835, 49840, 49844, 49848, 49853,
+    28359, 47999, 12004, 49861, 49870, 49879, 49887, 49900, 49907, 49918,
+    49923, 49936, 49949, 49961, 49973, 49985, 49996, 50009, 50020, 50031,
+    50041, 50049, 50057, 50069, 50081, 50092, 50101, 50109, 50116, 50128,
+    50135, 50141, 50150, 50156, 50163, 50176, 50181, 50191, 50196, 50202,
+    50207, 44935, 50211, 47299, 50218, 50225, 50233, 50240, 2559, 50247,
+    50258, 50268, 50277, 50285, 50295, 50303, 50312, 50322, 50331, 50336,
+    50342, 50348, 4075, 50359, 50369, 50378, 50387, 50395, 50405, 50413,
+    50422, 50427, 50432, 50437, 1604, 47, 50445, 50453, 50464, 50475, 19250,
+    50485, 50489, 50496, 50502, 50507, 50511, 50522, 50532, 50541, 50552,
+    19668, 19673, 50557, 50566, 50571, 50581, 50586, 50594, 50602, 50609,
+    50615, 1566, 271, 50619, 50625, 50630, 50633, 2087, 2568, 50641, 50645,
+    50648, 1420, 50654, 16289, 1180, 50659, 50672, 2702, 2723, 50686, 50698,
+    50710, 2737, 2754, 2769, 2785, 2802, 50724, 50736, 2817, 50750, 1186,
+    1192, 1198, 12284, 50755, 50760, 50765, 50769, 50784, 50799, 50814,
+    50829, 50844, 50859, 50874, 50889, 50904, 50919, 50934, 50949, 50964,
+    50979, 50994, 51009, 51024, 51039, 51054, 51069, 51084, 51099, 51114,
+    51129, 51144, 51159, 51174, 51189, 51204, 51219, 51234, 51249, 51264,
+    51279, 51294, 51309, 51324, 51339, 51354, 51369, 51384, 51399, 51414,
+    51429, 51444, 51459, 51474, 51489, 51504, 51519, 51534, 51549, 51564,
+    51579, 51594, 51609, 51624, 51639, 51654, 51669, 51684, 51699, 51714,
+    51729, 51744, 51759, 51774, 51789, 51804, 51819, 51834, 51849, 51864,
+    51879, 51894, 51909, 51924, 51939, 51954, 51969, 51984, 51999, 52014,
+    52029, 52044, 52059, 52074, 52089, 52104, 52119, 52134, 52149, 52164,
+    52179, 52194, 52209, 52224, 52239, 52254, 52269, 52284, 52299, 52314,
+    52329, 52344, 52359, 52374, 52389, 52404, 52419, 52434, 52449, 52464,
+    52479, 52494, 52509, 52524, 52539, 52554, 52569, 52584, 52599, 52614,
+    52629, 52644, 52659, 52674, 52689, 52704, 52719, 52734, 52749, 52764,
+    52779, 52794, 52809, 52824, 52839, 52854, 52869, 52884, 52899, 52914,
+    52929, 52944, 52959, 52974, 52989, 53004, 53019, 53034, 53049, 53064,
+    53079, 53094, 53109, 53124, 53139, 53154, 53169, 53184, 53199, 53214,
+    53229, 53244, 53259, 53274, 53289, 53304, 53319, 53334, 53349, 53364,
+    53379, 53394, 53409, 53424, 53439, 53454, 53469, 53484, 53499, 53514,
+    53529, 53544, 53559, 53574, 53589, 53604, 53619, 53634, 53649, 53664,
+    53679, 53694, 53709, 53724, 53739, 53754, 53769, 53784, 53799, 53814,
+    53829, 53844, 53859, 53874, 53889, 53904, 53919, 53934, 53949, 53964,
+    53979, 53994, 54009, 54024, 54039, 54054, 54069, 54084, 54099, 54114,
+    54129, 54144, 54159, 54174, 54189, 54204, 54219, 54234, 54249, 54264,
+    54279, 54294, 54309, 54324, 54339, 54354, 54369, 54384, 54399, 54414,
+    54429, 54444, 54459, 54474, 54489, 54504, 54519, 54534, 54549, 54564,
+    54579, 54594, 54609, 54624, 54639, 54654, 54669, 54684, 54699, 54714,
+    54729, 54744, 54759, 54774, 54789, 54804, 54819, 54834, 54849, 54864,
+    54879, 54894, 54909, 54924, 54939, 54954, 54969, 54984, 54999, 55014,
+    55029, 55044, 55059, 55074, 55089, 55104, 55119, 55134, 55149, 55164,
+    55179, 55194, 55209, 55224, 55239, 55254, 55269, 55284, 55299, 55314,
+    55329, 55344, 55359, 55374, 55389, 55404, 55419, 55434, 55449, 55464,
+    55479, 55494, 55509, 55524, 55539, 55554, 55569, 55584, 55599, 55614,
+    55629, 55644, 55659, 55674, 55689, 55704, 55719, 55734, 55749, 55764,
+    55779, 55794, 55809, 55824, 55839, 55854, 55869, 55884, 55899, 55914,
+    55929, 55944, 55959, 55974, 55989, 56004, 56019, 56034, 56049, 56064,
+    56079, 56094, 56109, 56124, 56139, 56154, 56169, 56184, 56199, 56214,
+    56229, 56244, 56259, 56274, 56289, 56304, 56319, 56334, 56349, 56364,
+    56379, 56394, 56409, 56424, 56439, 56454, 56469, 56484, 56499, 56514,
+    56529, 56544, 56559, 56574, 56589, 56604, 56619, 56634, 56649, 56664,
+    56679, 56694, 56709, 56724, 56739, 56754, 56769, 56784, 56799, 56814,
+    56829, 56844, 56859, 56874, 56889, 56904, 56919, 56934, 56949, 56964,
+    56979, 56994, 57009, 57024, 57039, 57054, 57069, 57084, 57099, 57114,
+    57129, 57144, 57159, 57174, 57189, 57204, 57219, 57234, 57249, 57264,
+    57279, 57294, 57309, 57324, 57339, 57354, 57369, 57384, 57399, 57414,
+    57429, 57444, 57459, 57474, 57489, 57504, 57519, 57534, 57549, 57564,
+    57579, 57594, 57609, 57624, 57639, 57654, 57669, 57684, 57699, 57714,
+    57729, 57744, 57759, 57774, 57789, 57804, 57819, 57834, 57849, 57864,
+    57879, 57894, 57909, 57924, 57939, 57954, 57969, 57984, 57999, 58014,
+    58029, 58044, 58059, 58074, 58089, 58104, 58119, 58134, 58149, 58164,
+    58179, 58194, 58209, 58224, 58239, 58254, 58269, 58284, 58299, 58314,
+    58329, 58344, 58359, 58374, 58389, 58404, 58419, 58434, 58449, 58464,
+    58479, 58494, 58509, 58524, 58539, 58554, 58569, 58584, 58600, 58616,
+    58632, 58648, 58664, 58680, 58696, 58712, 58728, 58744, 58760, 58776,
+    58792, 58808, 58824, 58840, 58856, 58872, 58888, 58904, 58920, 58936,
+    58952, 58968, 58984, 59000, 59016, 59032, 59048, 59064, 59080, 59096,
+    59112, 59128, 59144, 59160, 59176, 59192, 59208, 59224, 59240, 59256,
+    59272, 59288, 59304, 59320, 59336, 59352, 59368, 59384, 59400, 59416,
+    59432, 59448, 59464, 59480, 59496, 59512, 59528, 59544, 59560, 59576,
+    59592, 59608, 59624, 59640, 59656, 59672, 59688, 59704, 59720, 59736,
+    59752, 59768, 59784, 59800, 59816, 59832, 59848, 59864, 59880, 59896,
+    59912, 59928, 59944, 59960, 59976, 59992, 60008, 60024, 60040, 60056,
+    60072, 60088, 60104, 60120, 60136, 60152, 60168, 60184, 60200, 60216,
+    60232, 60248, 60264, 60280, 60296, 60312, 60328, 60344, 60360, 60376,
+    60392, 60408, 60424, 60440, 60456, 60472, 60488, 60504, 60520, 60536,
+    60552, 60568, 60584, 60600, 60616, 60632, 60648, 60664, 60680, 60696,
+    60712, 60728, 60744, 60760, 60776, 60792, 60808, 60824, 60840, 60856,
+    60872, 60888, 60904, 60920, 60936, 60952, 60968, 60984, 61000, 61016,
+    61032, 61048, 61064, 61080, 61096, 61112, 61128, 61144, 61160, 61176,
+    61192, 61208, 61224, 61240, 61256, 61272, 61288, 61304, 61320, 61336,
+    61352, 61368, 61384, 61400, 61416, 61432, 61448, 61464, 61480, 61496,
+    61512, 61528, 61544, 61560, 61576, 61592, 61608, 61624, 61640, 61656,
+    61672, 61688, 61704, 61720, 61736, 61752, 61768, 61784, 61800, 61816,
+    61832, 61848, 61864, 61880, 61896, 61912, 61928, 61944, 61960, 61976,
+    61992, 62008, 62024, 62040, 62056, 62072, 62088, 62104, 62120, 62136,
+    62152, 62168, 62184, 62200, 62216, 62232, 62248, 62264, 62280, 62296,
+    62312, 62328, 62344, 62360, 62376, 62392, 62408, 62424, 62440, 62456,
+    62472, 62488, 62504, 62520, 62536, 62552, 62568, 62584, 62600, 62616,
+    62632, 62648, 62664, 62680, 62696, 62712, 62728, 62744, 62760, 62776,
+    62792, 62808, 62824, 62840, 62856, 62872, 62888, 62904, 62920, 62936,
+    62952, 62968, 62984, 63000, 63016, 63032, 63048, 63064, 63080, 63096,
+    63112, 63128, 63144, 63160, 63176, 63192, 63208, 63224, 63240, 63256,
+    63272, 63288, 63304, 63320, 63336, 63352, 63368, 63384, 63400, 63416,
+    63432, 63448, 63464, 63480, 63496, 63512, 63528, 63544, 63560, 63576,
+    63592, 63608, 63624, 63640, 63656, 63672, 63688, 63704, 63720, 63736,
+    63752, 63768, 63784, 63800, 63816, 63832, 63848, 63864, 63880, 63896,
+    63912, 63928, 63944, 63960, 63976, 63992, 64008, 64024, 64040, 64056,
+    64072, 64088, 64104, 64120, 64136, 64152, 64168, 64184, 64200, 64216,
+    64232, 64248, 64264, 64280, 64296, 64312, 64328, 64344, 64360, 64376,
+    64392, 64408, 64424, 64440, 64456, 64472, 64488, 64504, 64520, 64536,
+    64552, 64568, 64584, 64600, 64616, 64632, 64648, 64664, 64680, 64696,
+    64712, 64728, 64744, 64760, 64776, 64792, 64808, 64824, 64840, 64856,
+    64872, 64888, 64904, 64920, 64936, 64952, 64968, 64984, 65000, 65016,
+    65032, 65048, 65064, 65080, 65096, 65112, 65128, 65144, 65160, 65176,
+    65192, 65208, 65224, 65240, 65256, 65272, 65288, 65304, 65320, 65336,
+    65352, 65368, 65384, 65400, 65416, 65432, 65448, 65464, 65480, 65496,
+    65512, 65528, 65544, 65560, 65576, 65592, 65608, 65624, 65640, 65656,
+    65672, 65688, 65704, 65720, 65736, 65752, 65768, 65784, 65800, 65816,
+    65832, 65848, 65864, 65880, 65896, 65912, 65928, 65944, 65960, 65976,
+    65992, 66008, 66024, 66040, 66056, 66072, 66088, 66104, 66120, 66136,
+    66152, 66168, 66184, 66200, 66216, 66232, 66248, 66264, 66280, 66296,
+    66312, 66328, 66344, 66360, 66376, 66392, 66408, 66424, 66440, 66456,
+    66472, 66488, 66504, 66520, 66536, 66552, 66568, 66584, 66600, 66616,
+    66632, 66648, 66664, 66680, 66696, 66712, 66728, 66744, 66760, 66776,
+    66792, 66808, 66824, 66840, 66856, 66872, 66888, 66904, 66920, 66936,
+    66952, 66968, 66984, 67000, 67016, 67032, 67048, 67064, 67080, 67096,
+    67112, 67128, 67144, 67160, 67176, 67192, 67208, 67224, 67240, 67256,
+    67265, 67280, 17155, 67289, 67294, 67300, 67306, 67316, 67324, 17408,
+    18090, 11318, 67337, 1428, 1432, 67345, 4155, 32408, 7876, 67351, 67356,
+    67361, 67366, 67371, 67377, 67382, 67388, 67393, 67399, 67404, 67409,
+    67414, 67419, 67425, 67430, 67435, 67440, 67445, 67450, 67455, 67460,
+    67466, 67471, 67477, 67484, 2606, 67489, 67495, 9359, 67499, 67504,
+    67511, 67519, 4166, 4171, 4176, 4181, 65, 67523, 67529, 67534, 67539,
+    67543, 67548, 67552, 67556, 12356, 67560, 67570, 67583, 67594, 67607,
+    67614, 67620, 67628, 11838, 67635, 67640, 67646, 67652, 67658, 67663,
+    67668, 67673, 67678, 67682, 67687, 67692, 67697, 67703, 67709, 67715,
+    67720, 67724, 67729, 67734, 67738, 67743, 67748, 67753, 67757, 12372,
+    12383, 12388, 1471, 67761, 67767, 1476, 19095, 67772, 19104, 1486, 67777,
+    67783, 67788, 1507, 67794, 1513, 1519, 12418, 67799, 67808, 67816, 67824,
+    67831, 67835, 67839, 67845, 67850, 36561, 67855, 67862, 67870, 67877,
+    67882, 67886, 67890, 67899, 67904, 67909, 67914, 1524, 276, 67919, 67923,
+    19230, 995, 67927, 67934, 67939, 67943, 19266, 1528, 45092, 67946, 67951,
+    67961, 67970, 67975, 67979, 67985, 1533, 47953, 67990, 67999, 68005,
+    68010, 68015, 12657, 12663, 68021, 68033, 68050, 68067, 68084, 68101,
+    68118, 68135, 68152, 68169, 68186, 68203, 68220, 68237, 68254, 68271,
+    68288, 68305, 68322, 68339, 68356, 68373, 68390, 68407, 68424, 68441,
+    68458, 68475, 68492, 68509, 68526, 68543, 68560, 68577, 68594, 68611,
+    68628, 68645, 68662, 68679, 68696, 68713, 68730, 68747, 68764, 68781,
+    68798, 68815, 68832, 68849, 68866, 68877, 68887, 68892, 1538, 68896,
+    68901, 68907, 68912, 68917, 68924, 10384, 1543, 68930, 68939, 32792,
+    68944, 68955, 12679, 68965, 68970, 68976, 68981, 68988, 68994, 68999,
+    1548, 19560, 69004, 69010, 12689, 69016, 69021, 69026, 69031, 69036,
+    69041, 69046, 69051, 1553, 4635, 69056, 69061, 69067, 69072, 69077,
+    69082, 69087, 69092, 69097, 69102, 69107, 69113, 69119, 69125, 69130,
+    69134, 69139, 69144, 69148, 69153, 69158, 69163, 69168, 69172, 69177,
+    69183, 69188, 69193, 69197, 69202, 69207, 69213, 69218, 69223, 69229,
+    69235, 69240, 69244, 69249, 69254, 69259, 69263, 69268, 69273, 69278,
+    69284, 69290, 69295, 69299, 69303, 69308, 69313, 69318, 34496, 69322,
+    69327, 69332, 69338, 69343, 69348, 69352, 69357, 69362, 69368, 69373,
+    69378, 69384, 69390, 69395, 69399, 69404, 69409, 69413, 69418, 69423,
+    69428, 69434, 69440, 69445, 69449, 69454, 69459, 69463, 69468, 69473,
+    69478, 69483, 69487, 69490, 69493, 69498, 69503, 37287, 69510, 69518,
+    48553, 69524, 3827, 32735, 69537, 69544, 69550, 69556, 4006, 69561,
+    12831, 69567, 69577, 69592, 69600, 12836, 69611, 69616, 69627, 69639,
+    69651, 69663, 2808, 69675, 69680, 69692, 69696, 69702, 69708, 69713,
+    69722, 69729, 69734, 69739, 69744, 69749, 69754, 69759, 1570, 18729,
+    69764, 69769, 48019, 69773, 69777, 69782, 69786, 19708, 69791, 69794,
+    69799, 69807, 69815, 1574, 12872, 12878, 1579, 69823, 69830, 69835,
+    69844, 69854, 69861, 69866, 69871, 1584, 69878, 69883, 19828, 69887,
+    69892, 69899, 69905, 69909, 69922, 69928, 69939, 69949, 69956, 19850,
+    10278, 10285, 4240, 4246, 69963, 1589, 69968, 69977, 69983, 69991, 69998,
+    70004, 70011, 70023, 70029, 70034, 70041, 70053, 70064, 70074, 70083,
+    70093, 70103, 4134, 70111, 36355, 36364, 19890, 70124, 70129, 70134,
+    70139, 70144, 70149, 70154, 1594, 1598, 70159, 70163, 70166, 70177,
+    70182, 19916, 1608, 70190, 70195, 70200, 19949, 70212, 70215, 70221,
+    70227, 70232, 70240, 1613, 70245, 70250, 70258, 70266, 70273, 70282,
+    70290, 70299, 70303, 1618, 70312, 1623, 25288, 70317, 70324, 70330,
+    20036, 70338, 70348, 70354, 70359, 70367, 70374, 70383, 70391, 70401,
+    70410, 70420, 70429, 70440, 70450, 70460, 70469, 70479, 70493, 70506,
+    70515, 70523, 70533, 70542, 70554, 70565, 70576, 70586, 19328, 70591,
+    13024, 70600, 70606, 70611, 70618, 70625, 70631, 18939, 70641, 70647,
+    70652, 70663, 70670, 70677, 70682, 70690, 13041, 13046, 70698, 70704,
+    70708, 4224, 4235, 20112, 48107, 70716, 70722, 70727, 70735, 70742,
+    14121, 70747, 70753, 70759, 1634, 70764, 70767, 70773, 70778, 70783,
+    70788, 70793, 70798, 70803, 70808, 70813, 70819, 70825, 1341, 70830,
+    70835, 70840, 70846, 70851, 70856, 70861, 70866, 70871, 70876, 1643, 18,
+    70882, 70886, 70891, 70895, 70899, 70903, 37573, 70908, 27557, 70913,
+    70918, 70922, 70925, 70929, 70933, 70938, 70942, 70947, 70951, 70954,
+    70960, 41105, 41110, 41115, 70963, 70970, 70976, 70984, 47725, 70994,
+    41121, 37837, 37588, 37594, 41137, 37600, 70999, 71004, 71008, 37870,
+    71015, 71018, 71022, 71030, 71037, 71042, 71045, 71050, 71055, 71059,
+    71063, 71066, 71076, 71088, 71095, 71101, 37605, 71108, 39502, 71111,
+    9376, 13386, 71114, 71118, 71123, 4049, 71127, 71130, 15843, 71137,
+    71144, 71157, 71165, 71174, 71183, 71189, 71194, 71204, 71217, 71229,
+    71236, 71241, 71250, 71263, 42785, 71281, 71286, 71293, 71299, 71304,
+    872, 71309, 71317, 71324, 71331, 32231, 893, 71337, 71343, 71353, 71361,
+    71367, 71372, 37624, 6640, 37638, 71376, 71386, 71391, 71399, 71409,
+    71424, 71430, 71436, 37648, 71441, 36703, 71445, 71450, 71457, 71462,
+    71466, 71471, 71479, 19893, 71486, 71491, 71495, 6681, 37674, 71499,
+    71505, 342, 71515, 71522, 71529, 71535, 71542, 71547, 71556, 15474,
+    67955, 67965, 71562, 71570, 71574, 71578, 71582, 71586, 71591, 71595,
+    71601, 71609, 71614, 71619, 71626, 71631, 71635, 71640, 71644, 71648,
+    71654, 71660, 71665, 71669, 71674, 71678, 37798, 71682, 37804, 37810,
+    71687, 71693, 71700, 71705, 71709, 36720, 19547, 71712, 71716, 71721,
+    71728, 71734, 71738, 71743, 47316, 71749, 71753, 71760, 71764, 71769,
+    71775, 71781, 71787, 71799, 71808, 71818, 71824, 71831, 71836, 71841,
+    71845, 71848, 71854, 71861, 71866, 71871, 71878, 71885, 71892, 71898,
+    71903, 71908, 71916, 37815, 2436, 71921, 71926, 71932, 71937, 71943,
+    71948, 71953, 71958, 71964, 37836, 71969, 71975, 71981, 71987, 37906,
+    71992, 71997, 72002, 37917, 72007, 72012, 72017, 72023, 72029, 37922,
+    72034, 72039, 72044, 37977, 37983, 72049, 72054, 37988, 38010, 33068,
+    38016, 38020, 72059, 13815, 72063, 72071, 72077, 72085, 72092, 72098,
+    72108, 72114, 72121, 12256, 38034, 72127, 72140, 72149, 72155, 72164,
+    72170, 72176, 72183, 27900, 72191, 72198, 72208, 72216, 72219, 37978,
+    72224, 72231, 72236, 72240, 72244, 72249, 72253, 4363, 72258, 72263,
+    72268, 41199, 41204, 72272, 41218, 72277, 41223, 72282, 72288, 41235,
+    41241, 41247, 72293, 72299, 26792, 72310, 72313, 72325, 72333, 38057,
+    72337, 72346, 72356, 72365, 38067, 72370, 72377, 72386, 72392, 72400,
+    72407, 72414, 6732, 4975, 72419, 37989, 72425, 72428, 72434, 72441,
+    72446, 72451, 27804, 72455, 72461, 72467, 72472, 72477, 72481, 72487,
+    72493, 39386, 72498, 42392, 44211, 44217, 38098, 38103, 72502, 72506,
+    72510, 72513, 72526, 72532, 72536, 72539, 72544, 39755, 72548, 36725,
+    25229, 72554, 6661, 6669, 10084, 72557, 72562, 72567, 72572, 72577,
+    72582, 72587, 72592, 72597, 72602, 72608, 72613, 72618, 72624, 72629,
+    72634, 72639, 72644, 72649, 72654, 72660, 72665, 72671, 72676, 72681,
+    72686, 72691, 72696, 72701, 72706, 72711, 72716, 72721, 72727, 72732,
+    72737, 72742, 72747, 72752, 72757, 72763, 72768, 72773, 72778, 72783,
+    72788, 72793, 72798, 72803, 72808, 72814, 72819, 72824, 72829, 72834,
+    72840, 72846, 72851, 72857, 72862, 72867, 72872, 72877, 72882, 1421, 156,
+    72887, 72891, 72895, 72899, 29700, 72903, 72907, 72912, 72916, 72921,
+    72925, 72930, 72935, 72940, 72944, 72948, 72953, 72957, 15553, 72962,
+    72966, 72973, 72983, 17753, 72992, 73001, 73005, 73010, 73015, 73019,
+    73023, 29488, 3164, 73027, 73033, 21125, 73037, 73046, 73054, 73060,
+    73065, 73077, 73089, 73094, 73098, 73103, 73107, 73113, 73119, 73124,
+    73134, 73144, 73150, 73158, 73163, 73167, 73173, 73178, 73185, 73191,
+    73196, 73203, 73212, 73221, 73229, 73233, 18269, 73236, 73245, 73253,
+    73265, 73276, 73287, 73296, 73300, 73309, 73317, 73327, 73335, 73342,
+    73352, 73358, 73363, 73370, 73379, 73385, 73390, 73397, 73403, 73414, 60,
+    36498, 73420, 31110, 31120, 73426, 73434, 73441, 73447, 73451, 73461,
+    73472, 73480, 73489, 73494, 73499, 73504, 73508, 73512, 73520, 21072,
+    73527, 73531, 73537, 73547, 73554, 73560, 73566, 41298, 73570, 73572,
+    73575, 73581, 73585, 73596, 73606, 73612, 73619, 73626, 15490, 73634,
+    73640, 73649, 73658, 73664, 11184, 73670, 73676, 73681, 73686, 73693,
+    73698, 73705, 73711, 73716, 73724, 73737, 73746, 73755, 70455, 70465,
+    73765, 73771, 73780, 73786, 73792, 73799, 73806, 73813, 73820, 73827,
+    73832, 73836, 73840, 73843, 73853, 73857, 73869, 9745, 73878, 73889,
+    73894, 73898, 70474, 73904, 73911, 73920, 73928, 73936, 73941, 73945,
+    73950, 73955, 73965, 73973, 73985, 73990, 73994, 73998, 74004, 74012,
+    74019, 74031, 74039, 74050, 74057, 74063, 74073, 74079, 74083, 74092,
+    74101, 74108, 74114, 74119, 74123, 74127, 74131, 74140, 74149, 74158,
+    74165, 74171, 74177, 74183, 74188, 74195, 74201, 74209, 74216, 74222,
+    14585, 74227, 74233, 74237, 16644, 74241, 74246, 74256, 74261, 74270,
+    74276, 74282, 74290, 74297, 74301, 74305, 74312, 74318, 74326, 74333,
+    74339, 74350, 74354, 74358, 74362, 74365, 74371, 74376, 74381, 74385,
+    74389, 74398, 74406, 74413, 74419, 74426, 28537, 47450, 74431, 74439,
+    74443, 74447, 74450, 74458, 74465, 74471, 74480, 74488, 74494, 74499,
+    74503, 74508, 74513, 74517, 74521, 74525, 74530, 74539, 74543, 74550,
+    44315, 74554, 74560, 74568, 74572, 74578, 74586, 74592, 74597, 74608,
+    74616, 74622, 74631, 26939, 74639, 74646, 74653, 74660, 74667, 74674,
+    50944, 15305, 74681, 74688, 74693, 41334, 4595, 74699, 74704, 74709,
+    74715, 74721, 74727, 74732, 74737, 74742, 74747, 74753, 74758, 74764,
+    74769, 74775, 74780, 74785, 74790, 74795, 74800, 74805, 74810, 74816,
+    74821, 74827, 74832, 74837, 74842, 74847, 74852, 74857, 74863, 74868,
+    74873, 74878, 74883, 74888, 74893, 74898, 74903, 74908, 74913, 74919,
+    74924, 74929, 74934, 74939, 74944, 74949, 74954, 74959, 74965, 74970,
+    74975, 74980, 74985, 74990, 74995, 75000, 75005, 75010, 75015, 75020,
+    75025, 75031, 1798, 305, 75036, 45210, 75040, 75043, 75048, 75052, 75055,
+    3533, 75060, 75065, 75069, 75078, 75089, 75106, 75124, 75132, 73932,
+    75139, 75142, 75152, 75159, 75168, 75184, 75193, 75203, 75208, 75221,
+    75231, 75240, 75248, 75262, 75270, 75279, 75283, 75286, 75293, 75299,
+    75310, 75317, 75329, 75340, 75351, 75360, 75367, 1181, 811, 75377, 2649,
+    75381, 75386, 75395, 1015, 8818, 24670, 75403, 75411, 75425, 75438,
+    75442, 75447, 75452, 75457, 75463, 75469, 75474, 9368, 17796, 75479,
+    75483, 75491, 9805, 75496, 75502, 75511, 75519, 1651, 12885, 1055, 4278,
+    75523, 75527, 75536, 75546, 2387, 31949, 75555, 75561, 19800, 31964,
+    75567, 4443, 13267, 75573, 75580, 70172, 75584, 75588, 75594, 75599,
+    75604, 3760, 160, 3786, 75609, 75621, 75625, 75629, 75635, 75640, 32812,
+    75644, 13255, 2843, 4, 75649, 75659, 75670, 75681, 75691, 75697, 75708,
+    75715, 75721, 75727, 75735, 75742, 75748, 75758, 75768, 75778, 75787,
+    27887, 1193, 75792, 75796, 75800, 75806, 75810, 2866, 2872, 9365, 2242,
+    75814, 75818, 75827, 75835, 75846, 75854, 75862, 75868, 75873, 75884,
+    75895, 75903, 75909, 75914, 10993, 75924, 75932, 75936, 75940, 75945,
+    75949, 75961, 33261, 17698, 75968, 75978, 75984, 75990, 7752, 11095,
+    76000, 76011, 76022, 76032, 76041, 76045, 76052, 1017, 2636, 76062,
+    76067, 76075, 69888, 76083, 76088, 76099, 76106, 76120, 16453, 525,
+    76130, 76137, 76141, 76145, 76153, 76162, 76170, 76176, 19845, 76181,
+    76195, 76202, 76208, 76216, 76225, 76234, 76241, 76253, 76263, 76271,
+    76278, 76286, 76293, 4242, 116, 76301, 76312, 76316, 76328, 76334, 13469,
+    210, 76339, 10416, 76344, 2911, 76348, 76355, 76361, 76372, 76382, 76390,
+    76397, 9756, 76404, 76413, 76421, 4323, 76434, 4340, 76438, 76443, 76449,
+    76454, 76459, 76464, 2916, 561, 76470, 76483, 76487, 76492, 2921, 1797,
+    919, 76496, 4344, 76504, 76510, 76514, 774, 76524, 76533, 76538, 3777,
+    76542, 17447, 17454, 54306, 76546, 4375, 4252, 15183, 76554, 76561,
+    76566, 27951, 76570, 76577, 76583, 76588, 76593, 13582, 204, 76598,
+    76610, 76616, 76624, 2933, 1688, 76632, 76634, 76639, 76644, 76649,
+    76655, 76660, 76665, 76670, 76675, 76680, 76685, 76691, 76696, 76701,
+    76706, 76711, 76716, 76721, 76726, 76731, 76737, 76742, 76747, 76752,
+    76758, 76763, 76769, 76774, 76779, 76784, 76789, 76794, 76799, 76804,
+    76810, 76815, 76821, 76826, 76831, 76836, 76841, 76846, 76851, 76856,
+    76861, 9437, 9450, 4391, 4396, 4401, 4406, 26, 76867, 76873, 76878,
+    76883, 76888, 76894, 76899, 76903, 76907, 76912, 76918, 76922, 76928,
+    76933, 76938, 76944, 76949, 76953, 76958, 76963, 76967, 76970, 76972,
+    76976, 76979, 76986, 76991, 76995, 77000, 77004, 77008, 77012, 77021,
+    77025, 38345, 77028, 38350, 77035, 77040, 38355, 77049, 77058, 38361,
+    77063, 38366, 77072, 77077, 13512, 77081, 77086, 77091, 38371, 77095,
+    77104, 49149, 77108, 77111, 77115, 9036, 77121, 77124, 77129, 77134,
+    77138, 4064, 38376, 77141, 77145, 77148, 77159, 77164, 77168, 77174,
+    77182, 77195, 77199, 77207, 77216, 77222, 77227, 77233, 77237, 77243,
+    77249, 77257, 77262, 77266, 77273, 77279, 77287, 77296, 77304, 38379,
+    77311, 77321, 77330, 77338, 77349, 77362, 77367, 77372, 77376, 77385,
+    77391, 77398, 77411, 77423, 77434, 77446, 77453, 77462, 77471, 77480,
+    77487, 77493, 77500, 77508, 77515, 77523, 77532, 77540, 77547, 77555,
+    77564, 77572, 77581, 77591, 77600, 77608, 77615, 77623, 77632, 77640,
+    77649, 77659, 77668, 77676, 77685, 77695, 77704, 77714, 77725, 77735,
+    77744, 77752, 77759, 77767, 77776, 77784, 77793, 77803, 77812, 77820,
+    77829, 77839, 77848, 77858, 77869, 77879, 77888, 77896, 77905, 77915,
+    77924, 77934, 77945, 77955, 77964, 77974, 77985, 77995, 78006, 78018,
+    78029, 78039, 78048, 78056, 78063, 78071, 78080, 78088, 78097, 78107,
+    78116, 78124, 78133, 78143, 78152, 78162, 78173, 78183, 78192, 78200,
+    78209, 78219, 78228, 78238, 78249, 78259, 78268, 78278, 78289, 78299,
+    78310, 78322, 78333, 78343, 78352, 78360, 78369, 78379, 78388, 78398,
+    78409, 78419, 78428, 78438, 78449, 78459, 78470, 78482, 78493, 78503,
+    78512, 78522, 78533, 78543, 78554, 78566, 78577, 78587, 78598, 78610,
+    78621, 78633, 78646, 78658, 78669, 78679, 78688, 78696, 78703, 78711,
+    78720, 78728, 78737, 78747, 78756, 78764, 78773, 78783, 78792, 78802,
+    78813, 78823, 78832, 78840, 78849, 78859, 78868, 78878, 78889, 78899,
+    78908, 78918, 78929, 78939, 78950, 78962, 78973, 78983, 78992, 79000,
+    79009, 79019, 79028, 79038, 79049, 79059, 79068, 79078, 79089, 79099,
+    79110, 79122, 79133, 79143, 79152, 79162, 79173, 79183, 79194, 79206,
+    79217, 79227, 79238, 79250, 79261, 79273, 79286, 79298, 79309, 79319,
+    79328, 79336, 79345, 79355, 79364, 79374, 79385, 79395, 79404, 79414,
+    79425, 79435, 79446, 79458, 79469, 79479, 79488, 79498, 79509, 79519,
+    79530, 79542, 79553, 79563, 79574, 79586, 79597, 79609, 79622, 79634,
+    79645, 79655, 79664, 79674, 79685, 79695, 79706, 79718, 79729, 79739,
+    79750, 79762, 79773, 79785, 79798, 79810, 79821, 79831, 79842, 79854,
+    79865, 79877, 79890, 79902, 79913, 79925, 79938, 79950, 79963, 79977,
+    79990, 80002, 80013, 80023, 80032, 80040, 80047, 80052, 80056, 8849,
+    80063, 80068, 38389, 80074, 80079, 38394, 80085, 24792, 30653, 80090,
+    80096, 80104, 80110, 80116, 80123, 80130, 80135, 80140, 80144, 80149,
+    80153, 80156, 80160, 80165, 80174, 80183, 80191, 80197, 80209, 80220,
+    80224, 3226, 8824, 80229, 80232, 80235, 80237, 80241, 80245, 80249,
+    80255, 80260, 30716, 80265, 80269, 80272, 80277, 80281, 80288, 80294,
+    80298, 6835, 80302, 80307, 38416, 80311, 80318, 80327, 80335, 80341,
+    80352, 80360, 80369, 80377, 80384, 80391, 80397, 80402, 80413, 38421,
+    80418, 80429, 80441, 80449, 80460, 80469, 80477, 80488, 80493, 80501,
+    2601, 80506, 80515, 40704, 80528, 80532, 80544, 80552, 80557, 80565,
+    80576, 21290, 80585, 80591, 80598, 80606, 80612, 38431, 80617, 4369,
+    67320, 80624, 80627, 80635, 80648, 80661, 80674, 80687, 80694, 80705,
+    80714, 80719, 50761, 50766, 80723, 80727, 80735, 80742, 80751, 80759,
+    80765, 80774, 80782, 80789, 80797, 80801, 80810, 80819, 80829, 80842,
+    80855, 80865, 38436, 80871, 80878, 80884, 80890, 38442, 80895, 80898,
+    80902, 80910, 80919, 50544, 80927, 80936, 80944, 80951, 80959, 80969,
+    80978, 80987, 39884, 80996, 81007, 81022, 81032, 10449, 25565, 81041,
+    81046, 81051, 81055, 18931, 81060, 81065, 81071, 81076, 81081, 81087,
+    81092, 81097, 25525, 81102, 81109, 81117, 81125, 81133, 81138, 81145,
+    81152, 81157, 1706, 81161, 81165, 81173, 81181, 38459, 81187, 81193,
+    81205, 81211, 81218, 81222, 81229, 81234, 81241, 81247, 81254, 81265,
+    81275, 81285, 81297, 81303, 81311, 81317, 81327, 81337, 38486, 81346,
+    81355, 81361, 81373, 81384, 81391, 81396, 81400, 81408, 81414, 81419,
+    81424, 81431, 81439, 81451, 81461, 81470, 81479, 81487, 81494, 40530,
+    28325, 81500, 81505, 81509, 81513, 81518, 81526, 81532, 81543, 81556,
+    81561, 81568, 38491, 81573, 81585, 81594, 81602, 81612, 81623, 81636,
+    81643, 81652, 81661, 81669, 81674, 81680, 81684, 1410, 81689, 81694,
+    81699, 81704, 81710, 81715, 81720, 81726, 81732, 81737, 81741, 81746,
+    81751, 81756, 67895, 81761, 81766, 81771, 81776, 81782, 81788, 81793,
+    81797, 81802, 18930, 81807, 81813, 81818, 81824, 81829, 81834, 81839,
+    81844, 81848, 81854, 81859, 81868, 81873, 81878, 81883, 81888, 81892,
+    81899, 81905, 4704, 20162, 3191, 81910, 81914, 81919, 81923, 81927,
+    81931, 54561, 81935, 81860, 81937, 81947, 38500, 81950, 81955, 81964,
+    81970, 6794, 38505, 81974, 81980, 81985, 81991, 81996, 82000, 82007,
+    82012, 82022, 82031, 82035, 82041, 82047, 82053, 82057, 82065, 82072,
+    82080, 82088, 38510, 82095, 82098, 82109, 82116, 82122, 82127, 82131,
+    82137, 82145, 82152, 82157, 82161, 82170, 82178, 82184, 82189, 38515,
+    82196, 27777, 82208, 82214, 82219, 82225, 82232, 82238, 25251, 32431,
+    82244, 82249, 82255, 82259, 82271, 81893, 81900, 25457, 82281, 82286,
+    82293, 82299, 82306, 82312, 82323, 82328, 82336, 10154, 82341, 82344,
+    82350, 82354, 82358, 82361, 82367, 82373, 38225, 4705, 1425, 15602,
+    82380, 82386, 82392, 82398, 82404, 82410, 82416, 82422, 82428, 82433,
+    82438, 82443, 82448, 82453, 82458, 82463, 82468, 82473, 82478, 82483,
+    82488, 82493, 82499, 82504, 82509, 82515, 82520, 82525, 82531, 82537,
+    82543, 82549, 82555, 82561, 82567, 82573, 82579, 82584, 82589, 82595,
+    82600, 82605, 82611, 82616, 82621, 82626, 82631, 82636, 82641, 82646,
+    82651, 82656, 82661, 82666, 82671, 82677, 82682, 82687, 82692, 82698,
+    82703, 82708, 82713, 82718, 82724, 82729, 82734, 82739, 82744, 82749,
+    82754, 82759, 82764, 82769, 82774, 82779, 82784, 82789, 82794, 82799,
+    82804, 82809, 82814, 82819, 82825, 82830, 82835, 82840, 82845, 82850,
+    82855, 82860, 1027, 169, 82865, 82869, 82873, 82878, 82886, 82890, 82897,
+    82905, 82909, 82922, 82930, 82935, 82940, 31173, 82944, 82949, 82953,
+    82958, 82962, 82970, 82974, 24800, 82979, 82983, 70712, 82987, 82990,
+    82998, 83006, 83014, 83019, 83024, 83031, 83038, 83044, 83050, 83055,
+    83062, 83067, 83075, 75430, 83082, 83087, 70484, 83094, 83100, 83105,
+    83109, 83116, 83122, 83129, 70511, 13596, 83137, 83142, 83147, 83151,
+    83154, 83165, 83174, 83180, 83185, 83189, 83199, 83208, 48940, 83212,
+    83216, 83223, 83236, 83242, 83250, 83259, 83270, 83281, 83292, 83303,
+    83312, 83318, 83327, 83335, 83345, 83358, 83366, 83373, 83384, 83393,
+    83399, 83404, 83409, 83415, 83425, 83431, 83441, 83449, 83456, 83466,
+    83475, 81575, 83483, 83489, 83497, 83503, 73977, 83510, 83515, 83518,
+    83522, 83528, 83532, 83535, 83543, 83549, 83555, 83563, 83575, 83587,
+    83594, 83599, 83603, 83614, 83622, 83629, 83641, 83649, 83656, 83664,
+    83671, 83677, 83682, 83692, 83701, 83709, 83714, 83724, 83733, 49805,
+    83740, 83744, 83749, 83757, 83764, 83770, 83774, 83784, 83795, 83803,
+    83810, 83822, 83834, 83843, 80518, 83850, 83860, 83872, 83883, 83897,
+    83905, 83915, 83922, 83930, 83943, 83955, 83964, 83972, 83982, 83993,
+    84005, 84014, 84024, 84034, 84043, 84050, 84059, 84074, 84082, 84092,
+    84101, 84109, 84122, 67290, 84137, 84147, 84156, 84168, 84178, 84190,
+    84201, 84215, 84229, 84243, 84257, 84271, 84285, 84299, 84313, 84327,
+    84341, 84355, 84369, 84383, 84397, 84411, 84425, 84439, 84453, 84467,
+    84481, 84495, 84509, 84523, 84537, 84551, 84565, 84579, 84593, 84607,
+    84621, 84635, 84649, 84663, 84677, 84691, 84705, 84719, 84733, 84747,
+    84761, 84775, 84789, 84803, 84817, 84831, 84845, 84859, 84873, 84887,
+    84901, 84915, 84929, 84943, 84957, 84971, 84985, 84999, 85013, 85027,
+    85041, 85055, 85069, 85083, 85097, 85111, 85125, 85139, 85153, 85167,
+    85181, 85195, 85209, 85223, 85237, 85251, 85265, 85279, 85293, 85307,
+    85321, 85335, 85349, 85363, 85377, 85391, 85405, 85419, 85433, 85447,
+    85461, 85475, 85489, 85503, 85517, 85531, 85545, 85559, 85573, 85587,
+    85601, 85615, 85629, 85643, 85657, 85671, 85685, 85699, 85713, 85727,
+    85741, 85755, 85769, 85783, 85797, 85811, 85825, 85839, 85853, 85867,
+    85881, 85895, 85909, 85923, 85937, 85951, 85965, 85979, 85993, 86007,
+    86021, 86035, 86049, 86063, 86077, 86091, 86105, 86119, 86133, 86147,
+    86161, 86175, 86189, 86203, 86217, 86231, 86245, 86259, 86273, 86287,
+    86301, 86315, 86329, 86343, 86357, 86371, 86385, 86399, 86413, 86427,
+    86441, 86455, 86469, 86483, 86497, 86511, 86525, 86539, 86553, 86567,
+    86581, 86595, 86609, 86623, 86637, 86651, 86665, 86679, 86693, 86707,
+    86721, 86735, 86749, 86763, 86777, 86791, 86805, 86819, 86833, 86847,
+    86861, 86875, 86889, 86903, 86917, 86931, 86945, 86959, 86973, 86987,
+    87001, 87015, 87029, 87043, 87057, 87071, 87085, 87099, 87113, 87127,
+    87141, 87155, 87169, 87183, 87197, 87211, 87225, 87239, 87253, 87267,
+    87281, 87295, 87309, 87323, 87337, 87351, 87365, 87379, 87393, 87407,
+    87421, 87435, 87449, 87463, 87477, 87491, 87505, 87519, 87533, 87547,
+    87561, 87575, 87589, 87603, 87617, 87631, 87645, 87659, 87673, 87687,
+    87701, 87715, 87729, 87743, 87757, 87771, 87785, 87799, 87813, 87827,
+    87841, 87855, 87869, 87883, 87897, 87911, 87925, 87939, 87953, 87967,
+    87981, 87995, 88009, 88023, 88037, 88051, 88065, 88079, 88093, 88107,
+    88121, 88135, 88149, 88163, 88177, 88191, 88205, 88219, 88233, 88247,
+    88261, 88275, 88289, 88303, 88317, 88331, 88345, 88359, 88373, 88387,
+    88401, 88415, 88429, 88443, 88457, 88471, 88485, 88499, 88513, 88527,
+    88541, 88555, 88569, 88583, 88597, 88611, 88625, 88639, 88653, 88667,
+    88681, 88695, 88709, 88723, 88737, 88751, 88765, 88779, 88793, 88807,
+    88821, 88835, 88849, 88863, 88877, 88891, 88905, 88919, 88933, 88947,
+    88961, 88975, 88989, 89003, 89017, 89031, 89045, 89059, 89073, 89087,
+    89101, 89115, 89129, 89143, 89157, 89171, 89185, 89199, 89213, 89227,
+    89241, 89255, 89269, 89283, 89297, 89311, 89325, 89339, 89353, 89367,
+    89381, 89395, 89409, 89423, 89437, 89451, 89465, 89479, 89493, 89507,
+    89521, 89535, 89549, 89563, 89577, 89591, 89605, 89619, 89633, 89647,
+    89661, 89675, 89689, 89703, 89717, 89731, 89745, 89759, 89773, 89787,
+    89801, 89815, 89829, 89843, 89857, 89871, 89885, 89899, 89913, 89927,
+    89941, 89955, 89969, 89983, 89997, 90011, 90025, 90039, 90053, 90067,
+    90081, 90095, 90109, 90123, 90137, 90151, 90165, 90179, 90193, 90207,
+    90221, 90235, 90249, 90263, 90277, 90291, 90305, 90319, 90333, 90347,
+    90361, 90375, 90389, 90403, 90417, 90431, 90445, 90459, 90473, 90487,
+    90501, 90515, 90529, 90543, 90557, 90571, 90585, 90599, 90613, 90627,
+    90641, 90655, 90669, 90683, 90697, 90711, 90725, 90739, 90753, 90767,
+    90781, 90795, 90809, 90823, 90837, 90851, 90865, 90879, 90893, 90907,
+    90921, 90935, 90949, 90963, 90977, 90991, 91005, 91019, 91033, 91047,
+    91061, 91075, 91089, 91103, 91117, 91131, 91145, 91159, 91173, 91187,
+    91201, 91215, 91229, 91243, 91257, 91271, 91285, 91299, 91313, 91327,
+    91341, 91355, 91369, 91383, 91397, 91411, 91425, 91439, 91453, 91467,
+    91481, 91495, 91509, 91523, 91537, 91551, 91565, 91579, 91593, 91607,
+    91621, 91635, 91649, 91663, 91677, 91691, 91705, 91719, 91733, 91747,
+    91761, 91775, 91789, 91803, 91817, 91831, 91845, 91859, 91873, 91887,
+    91901, 91915, 91929, 91943, 91957, 91971, 91985, 91999, 92013, 92027,
+    92041, 92055, 92069, 92083, 92097, 92111, 92125, 92139, 92153, 92167,
+    92181, 92195, 92209, 92223, 92237, 92251, 92265, 92279, 92293, 92307,
+    92321, 92335, 92349, 92363, 92377, 92391, 92405, 92419, 92433, 92447,
+    92461, 92475, 92489, 92503, 92517, 92531, 92545, 92559, 92573, 92587,
+    92601, 92615, 92629, 92643, 92657, 92671, 92685, 92699, 92713, 92727,
+    92741, 92755, 92769, 92783, 92797, 92811, 92825, 92839, 92853, 92867,
+    92881, 92895, 92909, 92923, 92937, 92951, 92965, 92979, 92993, 93007,
+    93021, 93035, 93049, 93063, 93077, 93091, 93105, 93119, 93133, 93147,
+    93161, 93175, 93189, 93203, 93217, 93231, 93245, 93259, 93273, 93287,
+    93301, 93315, 93329, 93343, 93357, 93371, 93385, 93399, 93413, 93427,
+    93441, 93455, 93469, 93483, 93497, 93511, 93525, 93539, 93553, 93567,
+    93581, 93595, 93609, 93623, 93637, 93651, 93665, 93679, 93693, 93707,
+    93721, 93735, 93749, 93763, 93777, 93791, 93805, 93819, 93833, 93847,
+    93861, 93875, 93889, 93903, 93917, 93931, 93945, 93959, 93973, 93987,
+    94001, 94015, 94029, 94043, 94057, 94071, 94085, 94099, 94113, 94127,
+    94141, 94155, 94169, 94183, 94197, 94211, 94225, 94239, 94253, 94267,
+    94281, 94295, 94309, 94323, 94337, 94351, 94365, 94379, 94393, 94407,
+    94421, 94435, 94449, 94463, 94477, 94491, 94505, 94519, 94533, 94547,
+    94561, 94575, 94589, 94603, 94617, 94631, 94645, 94659, 94673, 94687,
+    94701, 94715, 94729, 94743, 94757, 94771, 94785, 94799, 94813, 94827,
+    94841, 94855, 94869, 94883, 94897, 94911, 94925, 94939, 94953, 94962,
+    94973, 94984, 94994, 95005, 95013, 95021, 95027, 95037, 95045, 95051,
+    34382, 95056, 95062, 95071, 95083, 95088, 95095, 11007, 21310, 95101,
+    95110, 95115, 95119, 95124, 95131, 95137, 95142, 95147, 95155, 95163,
+    95173, 95178, 95186, 14061, 95190, 95193, 95195, 95210, 95223, 95230,
+    95236, 95247, 95252, 95256, 95261, 95268, 95274, 95279, 95287, 76024,
+    76034, 95293, 95300, 95310, 12243, 95317, 95322, 34620, 95331, 95336,
+    95343, 95353, 95361, 95369, 95378, 95387, 95393, 95399, 95406, 95413,
+    95418, 95422, 95430, 70528, 95435, 95444, 95452, 95459, 95464, 95468,
+    95477, 95483, 95486, 95490, 95499, 95509, 82917, 95518, 95522, 95530,
+    95534, 95540, 95551, 95561, 21319, 95572, 95581, 95589, 95597, 95604,
+    70547, 9602, 95612, 95616, 95625, 95632, 95635, 95639, 32309, 95642,
+    95646, 95651, 95668, 95680, 12201, 95692, 95697, 95702, 95707, 24902,
+    95711, 95716, 95721, 95727, 95732, 6433, 95737, 24906, 95742, 95747,
+    95753, 95760, 95765, 95770, 95776, 95782, 95788, 95793, 95799, 95803,
+    95817, 95825, 95833, 95839, 95844, 95851, 95861, 95870, 95875, 95880,
+    95885, 95893, 95903, 95914, 95919, 95925, 95930, 95939, 69012, 4634,
+    95944, 95962, 95981, 95994, 96008, 96024, 96031, 96038, 96047, 96054,
+    96060, 96067, 96072, 96078, 96083, 96089, 96097, 96103, 96108, 96113,
+    96129, 12214, 96143, 96150, 96158, 96164, 96168, 96171, 96177, 96182,
+    96187, 96195, 96202, 96207, 96216, 96222, 96227, 96233, 96239, 96248,
+    96257, 42236, 96262, 96270, 96279, 13669, 96288, 96294, 96302, 96308,
+    96314, 96320, 96325, 96332, 96338, 13680, 96343, 96346, 96351, 38542,
+    96361, 96370, 96375, 96381, 96386, 96394, 96401, 96412, 96428, 96444,
+    96460, 96476, 96492, 96508, 96524, 96540, 96556, 96572, 96588, 96604,
+    96620, 96636, 96652, 96668, 96684, 96700, 96716, 96732, 96748, 96764,
+    96780, 96796, 96812, 96828, 96844, 96860, 96876, 96892, 96908, 96924,
+    96940, 96956, 96972, 96988, 97004, 97020, 97036, 97052, 97068, 97084,
+    97100, 97116, 97132, 97148, 97164, 97180, 97196, 97212, 97228, 97244,
+    97260, 97276, 97292, 97308, 97324, 97340, 97356, 97372, 97388, 97404,
+    97420, 97436, 97452, 97468, 97484, 97500, 97516, 97532, 97548, 97564,
+    97580, 97596, 97612, 97628, 97644, 97660, 97676, 97692, 97708, 97724,
+    97740, 97756, 97772, 97788, 97804, 97820, 97836, 97852, 97868, 97884,
+    97900, 97916, 97932, 97948, 97964, 97980, 97996, 98012, 98028, 98044,
+    98060, 98076, 98092, 98108, 98124, 98140, 98156, 98172, 98188, 98204,
+    98220, 98236, 98252, 98268, 98284, 98300, 98316, 98332, 98348, 98364,
+    98380, 98396, 98412, 98428, 98444, 98460, 98476, 98492, 98508, 98524,
+    98540, 98556, 98572, 98588, 98604, 98620, 98636, 98652, 98668, 98684,
+    98700, 98716, 98732, 98748, 98764, 98780, 98796, 98812, 98828, 98844,
+    98860, 98876, 98892, 98908, 98924, 98940, 98956, 98972, 98988, 99004,
+    99020, 99036, 99052, 99068, 99084, 99100, 99116, 99132, 99148, 99164,
+    99180, 99196, 99212, 99228, 99244, 99260, 99276, 99292, 99308, 99324,
+    99340, 99356, 99372, 99388, 99404, 99420, 99436, 99452, 99468, 99484,
+    99500, 99516, 99532, 99548, 99564, 99580, 99596, 99612, 99628, 99644,
+    99660, 99676, 99692, 99708, 99724, 99740, 99756, 99772, 99788, 99804,
+    99820, 99836, 99852, 99868, 99884, 99900, 99916, 99932, 99948, 99964,
+    99980, 99996, 100012, 100028, 100044, 100060, 100076, 100092, 100108,
+    100124, 100140, 100156, 100172, 100188, 100204, 100220, 100236, 100252,
+    100268, 100284, 100300, 100316, 100332, 100348, 100364, 100380, 100396,
+    100412, 100428, 100444, 100460, 100476, 100492, 100508, 100524, 100540,
+    100556, 100572, 100588, 100604, 100620, 100636, 100652, 100668, 100684,
+    100700, 100716, 100732, 100748, 100764, 100780, 100796, 100812, 100828,
+    100844, 100860, 100876, 100892, 100908, 100924, 100940, 100956, 100972,
+    100988, 101004, 101020, 101036, 101052, 101068, 101084, 101100, 101116,
+    101132, 101148, 101164, 101180, 101196, 101212, 101228, 101244, 101260,
+    101276, 101292, 101308, 101324, 101340, 101356, 101372, 101388, 101404,
+    101420, 101436, 101452, 101468, 101484, 101500, 101516, 101532, 101548,
+    101564, 101580, 101596, 101612, 101628, 101644, 101660, 101676, 101692,
+    101708, 101724, 101740, 101756, 101772, 101788, 101804, 101820, 101836,
+    101852, 101868, 101884, 101900, 101916, 101932, 101948, 101964, 101980,
+    101996, 102012, 102028, 102044, 102060, 102076, 102092, 102108, 102124,
+    102140, 102156, 102172, 102188, 102204, 102220, 102236, 102252, 102268,
+    102284, 102300, 102316, 102332, 102348, 102364, 102380, 102396, 102412,
+    102428, 102444, 102460, 102476, 102492, 102508, 102524, 102540, 102556,
+    102572, 102588, 102604, 102620, 102636, 102652, 102668, 102684, 102700,
+    102716, 102732, 102748, 102764, 102780, 102796, 102812, 102828, 102844,
+    102860, 102876, 102892, 102908, 102924, 102940, 102956, 102972, 102988,
+    103004, 103020, 103036, 103052, 103068, 103084, 103100, 103116, 103132,
+    103148, 103164, 103180, 103196, 103212, 103228, 103244, 103260, 103276,
+    103292, 103308, 103324, 103340, 103356, 103372, 103388, 103404, 103420,
+    103436, 103452, 103468, 103484, 103500, 103516, 103532, 103548, 103564,
+    103580, 103596, 103612, 103628, 103644, 103660, 103676, 103692, 103708,
+    103724, 103740, 103756, 103772, 103788, 103804, 103820, 103836, 103852,
+    103868, 103884, 103900, 103916, 103932, 103948, 103964, 103980, 103996,
+    104012, 104028, 104044, 104060, 104076, 104092, 104108, 104124, 104140,
+    104156, 104172, 104188, 104204, 104220, 104236, 104252, 104268, 104284,
+    104300, 104316, 104332, 104348, 104364, 104380, 104396, 104412, 104428,
+    104444, 104460, 104476, 104492, 104508, 104524, 104540, 104556, 104572,
+    104588, 104604, 104620, 104636, 104652, 104668, 104684, 104700, 104716,
+    104732, 104748, 104764, 104780, 104796, 104812, 104828, 104844, 104860,
+    104876, 104892, 104908, 104924, 104940, 104956, 104972, 104988, 105004,
+    105020, 105036, 105052, 105068, 105084, 105100, 105116, 105132, 105148,
+    105164, 105180, 105196, 105212, 105228, 105244, 105260, 105276, 105292,
+    105308, 105324, 105340, 105356, 105372, 105388, 105404, 105420, 105436,
+    105452, 105468, 105484, 105500, 105516, 105532, 105548, 105564, 105580,
+    105596, 105612, 105628, 105644, 105660, 105676, 105692, 105708, 105724,
+    105740, 105756, 105772, 105788, 105804, 105820, 105836, 105852, 105868,
+    105884, 105900, 105916, 105932, 105948, 105964, 105980, 105996, 106012,
+    106028, 106044, 106060, 106076, 106092, 106108, 106124, 106140, 106156,
+    106172, 106188, 106204, 106220, 106236, 106252, 106268, 106284, 106300,
+    106316, 106332, 106348, 106364, 106380, 106396, 106412, 106428, 106444,
+    106460, 106476, 106492, 106508, 106524, 106540, 106556, 106572, 106588,
+    106604, 106620, 106636, 106652, 106668, 106684, 106700, 106716, 106732,
+    106748, 106764, 106780, 106796, 106812, 106828, 106844, 106860, 106876,
+    106892, 106908, 106924, 106940, 106956, 106972, 106988, 107004, 107020,
+    107036, 107052, 107068, 107084, 107100, 107116, 107132, 107148, 107164,
+    107180, 107196, 107212, 107228, 107244, 107260, 107276, 107292, 107308,
+    107324, 107340, 107356, 107372, 107388, 107404, 107420, 107436, 107452,
+    107468, 107484, 107500, 107516, 107532, 107548, 107564, 107580, 107596,
+    107612, 107628, 107644, 107660, 107676, 107692, 107708, 107724, 107740,
+    107756, 107772, 107788, 107804, 107820, 107836, 107852, 107868, 107884,
+    107900, 107916, 107932, 107948, 107964, 107980, 107996, 108012, 108028,
+    108044, 108060, 108076, 108092, 108108, 108124, 108140, 108156, 108172,
+    108188, 108204, 108220, 108236, 108252, 108268, 108284, 108300, 108316,
+    108332, 108348, 108364, 108380, 108396, 108412, 108428, 108444, 108460,
+    108476, 108492, 108508, 108524, 108540, 108556, 108572, 108588, 108604,
+    108620, 108636, 108652, 108668, 108684, 108700, 108716, 108732, 108748,
+    108764, 108780, 108796, 108812, 108828, 108844, 108860, 108876, 108892,
+    108908, 108924, 108940, 108956, 108972, 108988, 109004, 109020, 109036,
+    109052, 109068, 109084, 109100, 109116, 109132, 109148, 109164, 109180,
+    109196, 109212, 109228, 109244, 109260, 109276, 109292, 109308, 109324,
+    109340, 109356, 109372, 109388, 109404, 109420, 109436, 109452, 109468,
+    109484, 109500, 109516, 109532, 109548, 109564, 109580, 109596, 109612,
+    109628, 109644, 109660, 109676, 109692, 109708, 109724, 109740, 109756,
+    109772, 109788, 109804, 109820, 109836, 109852, 109868, 109884, 109900,
+    109916, 109932, 109948, 109964, 109980, 109996, 110012, 110028, 110044,
+    110060, 110076, 110092, 110108, 110124, 110140, 110156, 110172, 110188,
+    110204, 110220, 110236, 110252, 110268, 110278, 110287, 110292, 110300,
+    75353, 110305, 110311, 110316, 110323, 110332, 110340, 110344, 4223,
+    110350, 110357, 110363, 110367, 19911, 45306, 3200, 110372, 110376,
+    110380, 110387, 110393, 110402, 110408, 110415, 110419, 110440, 110462,
+    110478, 110495, 110514, 110523, 110533, 110541, 110548, 110555, 110561,
+    32164, 110575, 110579, 110585, 110593, 110605, 110611, 110619, 110626,
+    110631, 110636, 110640, 110648, 110655, 110659, 110665, 110671, 110676,
+    3871, 50961, 110682, 110686, 110690, 110694, 110699, 110704, 110709,
+    110715, 110721, 110727, 110734, 110740, 110747, 110753, 110759, 110764,
+    110770, 110775, 110779, 102872, 110784, 102936, 50976, 110789, 110794,
+    110802, 110806, 110811, 110818, 110827, 110833, 110842, 110846, 110853,
+    110857, 110860, 110867, 110873, 110882, 110892, 110902, 110907, 110911,
+    110918, 110926, 110935, 110939, 110947, 110953, 110958, 110963, 110969,
+    110975, 110980, 110984, 31071, 110990, 110994, 110998, 111001, 111006,
+    111014, 111024, 111030, 111035, 111045, 48136, 111053, 111065, 111071,
+    111078, 111084, 111088, 111093, 111099, 111111, 111122, 111129, 111135,
+    111142, 111149, 111161, 111168, 111174, 24986, 111178, 111186, 111192,
+    111199, 111205, 111211, 111217, 111222, 111227, 111232, 111236, 111245,
+    111253, 111264, 7709, 111269, 19347, 111275, 111279, 111283, 111287,
+    111295, 111304, 111308, 111315, 111324, 111332, 111345, 111351, 103448,
+    35520, 111356, 111358, 111363, 111368, 111373, 111378, 111383, 111388,
+    111393, 111398, 111403, 111408, 111413, 111418, 111423, 111428, 111434,
+    111439, 111444, 111449, 111454, 111459, 111464, 111469, 111474, 111480,
+    111486, 111492, 111497, 111502, 111514, 111519, 1840, 54, 111524, 111529,
+    38552, 111533, 38557, 38562, 38568, 38573, 111537, 38578, 26134, 111559,
+    111563, 111567, 111572, 111576, 38582, 111580, 111588, 111595, 111601,
+    111611, 38587, 111618, 111621, 111626, 111630, 111639, 10817, 111647,
+    38592, 25978, 111650, 111654, 111662, 1315, 111667, 38603, 111670,
+    111675, 30437, 30447, 41834, 111680, 111685, 111690, 111695, 111701,
+    111706, 111715, 111720, 111729, 111737, 111744, 111750, 111755, 111760,
+    111765, 111775, 111784, 111792, 111797, 111805, 111809, 111817, 111821,
+    111828, 111835, 111843, 111850, 38407, 45041, 111856, 111862, 111867,
+    111872, 14096, 11556, 111877, 111882, 111887, 111893, 111900, 111906,
+    111915, 111920, 111928, 111938, 111945, 111955, 111961, 111966, 111972,
+    111976, 21341, 111983, 42798, 111996, 112001, 112007, 112022, 36577,
+    73759, 112035, 112039, 112048, 112057, 112064, 112070, 112078, 112084,
+    112093, 112100, 45161, 112106, 112109, 112113, 112117, 112121, 11577,
+    112127, 112134, 112140, 112148, 112153, 112157, 28485, 112163, 112166,
+    112174, 112181, 112189, 112202, 112216, 112223, 112229, 112236, 112242,
+    38617, 112246, 112253, 112261, 112269, 112275, 38622, 112283, 112289,
+    112294, 112304, 112310, 112319, 36372, 41205, 112327, 112332, 112337,
+    112341, 112346, 112350, 112358, 112363, 17439, 18213, 48158, 112367,
+    112372, 38627, 17592, 112376, 112388, 112393, 112397, 112404, 112413,
+    112417, 112425, 112431, 112436, 112444, 112452, 112460, 112468, 112476,
+    112484, 112495, 112501, 8891, 112506, 112512, 112517, 112522, 112533,
+    112542, 112554, 112569, 38915, 112575, 19466, 38631, 112579, 112586,
+    112592, 112596, 28609, 112603, 112609, 112616, 47421, 112625, 112631,
+    112640, 112646, 112651, 112659, 112665, 112670, 38641, 112675, 112684,
+    112693, 111117, 112702, 112709, 112715, 112721, 112730, 112740, 112746,
+    112754, 112761, 112765, 38646, 112768, 38652, 1354, 112773, 112781,
+    112789, 112799, 112808, 112816, 112823, 112833, 38663, 112837, 112839,
+    112843, 112848, 112852, 112856, 112862, 112867, 112871, 112882, 112887,
+    112896, 112901, 3205, 112905, 112912, 112916, 112925, 112933, 112941,
+    112948, 112953, 112958, 72289, 112962, 112965, 112971, 112979, 112985,
+    112989, 112994, 113001, 113006, 113011, 113015, 113022, 113028, 113033,
+    41236, 113037, 113040, 113045, 113049, 113054, 113061, 113066, 113070,
+    46483, 113078, 30456, 30465, 113084, 113090, 113096, 113101, 113105,
+    113108, 113118, 113127, 113132, 113138, 113145, 113151, 113155, 113163,
+    113168, 41242, 83176, 113172, 113180, 113187, 113193, 113200, 113205,
+    113212, 113217, 113221, 113226, 67506, 113232, 113238, 10093, 113243,
+    113248, 113252, 113257, 113262, 113267, 113271, 113276, 113281, 113287,
+    113292, 113297, 113303, 113309, 113314, 113318, 113323, 113328, 113333,
+    113337, 28608, 113342, 113347, 113353, 113359, 113365, 113370, 113374,
+    113379, 113384, 107224, 113389, 113394, 113399, 113404, 107288, 51231,
+    113409, 38671, 113417, 113421, 113429, 113437, 113448, 113453, 113457,
+    26607, 80621, 113462, 113468, 113473, 4534, 113483, 113490, 113495,
+    113503, 113512, 113517, 113521, 113526, 113530, 113538, 113546, 113553,
+    75615, 113559, 113567, 113574, 113585, 113591, 113597, 38681, 113600,
+    113607, 113615, 113620, 113624, 32668, 70116, 113630, 113635, 113642,
+    113647, 9982, 113651, 113659, 113666, 113673, 113682, 113689, 113695,
+    113709, 113717, 6514, 113479, 113723, 113728, 113734, 113738, 113741,
+    113749, 113756, 113761, 113774, 113781, 113787, 113791, 113799, 113804,
+    113811, 113817, 113822, 70387, 113827, 113830, 113839, 113846, 107496,
+    113852, 113855, 113863, 113869, 113878, 113888, 113898, 113907, 113918,
+    113926, 113937, 113942, 113946, 113951, 113955, 41965, 113963, 25314,
+    41974, 113968, 99015, 99031, 99047, 99063, 99079, 113973, 99111, 99127,
+    99143, 99159, 99271, 99287, 113977, 99319, 99335, 113981, 113985, 113989,
+    113993, 99575, 99607, 113997, 99639, 114001, 114005, 99783, 99799, 99815,
+    99831, 114009, 99895, 99911, 114013, 100039, 100055, 100071, 100087,
+    100103, 100119, 100135, 100151, 100167, 100183, 100295, 100311, 100327,
+    100343, 100359, 100375, 100391, 100407, 100423, 100439, 114017, 102231,
+    102343, 102407, 102423, 102439, 102455, 102471, 102487, 102599, 102615,
+    102631, 114021, 102679, 114025, 102711, 102727, 102743, 114029, 114034,
+    114039, 114044, 114049, 114054, 114059, 114063, 114067, 114072, 114077,
+    114081, 114086, 114091, 114095, 114100, 114105, 114110, 114115, 114119,
+    114124, 114129, 114133, 114138, 114142, 114146, 114150, 114154, 114159,
+    114163, 114167, 114171, 114175, 114179, 114183, 114187, 114191, 114195,
+    114200, 114205, 114210, 114215, 114220, 114225, 114230, 114235, 114240,
+    114245, 114249, 114253, 114257, 114261, 114265, 114269, 114274, 114278,
+    114283, 114287, 114292, 114297, 114301, 114305, 114310, 114314, 114318,
+    114322, 114326, 114330, 114334, 114338, 114342, 114346, 114350, 114354,
+    114358, 114362, 114366, 114371, 114376, 114380, 114384, 114388, 114392,
+    114396, 114400, 114405, 114409, 114413, 114417, 114421, 114425, 114429,
+    114434, 114438, 114443, 114447, 114451, 114455, 114459, 114463, 114467,
+    114471, 114475, 114479, 114483, 114487, 114492, 114496, 114500, 114504,
+    114508, 114512, 114516, 114520, 114524, 114528, 114532, 114536, 114541,
+    114545, 114549, 114554, 114559, 114563, 114567, 114571, 114575, 114579,
+    114583, 114587, 114591, 114596, 114600, 114605, 114609, 114614, 114618,
+    114623, 114627, 114633, 114638, 114642, 114647, 114651, 114656, 114660,
+    114665, 114669, 114674, 1429, 114678, 2947, 1694, 27772, 1602, 30392,
+    114682, 2956, 114686, 1284, 114691, 1226, 114695, 114699, 2980, 114703,
+    114711, 114718, 114725, 114739, 2984, 7816, 114748, 114756, 114763,
+    114774, 114783, 114787, 114794, 114806, 114819, 114832, 114843, 114848,
+    114855, 114867, 114871, 2988, 13750, 114881, 114886, 114895, 114905,
+    114910, 2992, 114918, 114922, 114927, 114934, 114940, 114945, 114954,
+    114962, 114974, 114984, 1231, 15184, 114997, 115001, 115007, 115021,
+    115033, 115045, 115053, 115063, 115072, 115081, 115090, 115098, 115109,
+    115117, 4542, 115127, 115138, 115147, 115153, 115168, 115175, 115181,
+    115186, 42108, 115191, 3016, 15188, 115195, 115200, 115207, 9913, 115216,
+    115222, 3021, 38073, 115231, 70006, 115238, 115242, 115248, 115259,
+    115265, 115270, 115277, 115283, 115291, 115298, 115304, 115315, 115331,
+    115341, 115350, 115361, 115370, 115377, 115383, 115393, 115401, 115407,
+    115422, 115428, 115433, 115437, 115444, 115452, 115456, 115459, 115465,
+    115472, 115478, 115486, 115495, 115503, 115509, 115518, 50546, 115532,
+    115537, 115543, 17198, 115548, 115561, 115573, 115582, 115590, 115597,
+    115601, 115605, 115608, 115615, 115622, 115630, 115638, 115647, 115655,
+    17103, 115663, 115668, 115672, 115684, 115691, 115698, 115707, 936,
+    115717, 115726, 115737, 3042, 115741, 115745, 115751, 115764, 115776,
+    115786, 115795, 115807, 31225, 115818, 115826, 115835, 115846, 115857,
+    115867, 115877, 115885, 115894, 115902, 13175, 115909, 115913, 115916,
+    115921, 115926, 115930, 115936, 1236, 115943, 115947, 13838, 115951,
+    115962, 115971, 115979, 115988, 115996, 116012, 116023, 116032, 116040,
+    116052, 116063, 116079, 116089, 116110, 116124, 116137, 116145, 116152,
+    7862, 116165, 116170, 116176, 6523, 116182, 116185, 116192, 116202, 8993,
+    116209, 116214, 116219, 116226, 116231, 116239, 116248, 116256, 116261,
+    116270, 116277, 11055, 11064, 116283, 116294, 116300, 116305, 116311,
+    3058, 3063, 116317, 1025, 116323, 116330, 116337, 116350, 116360, 116365,
+    2229, 87, 116373, 116380, 116385, 116393, 116403, 116412, 116418, 116427,
+    116435, 116445, 116449, 116453, 116458, 116462, 116474, 3086, 116482,
+    116490, 116495, 116506, 116517, 116529, 116540, 116550, 116559, 25362,
+    116564, 116570, 116575, 116585, 116595, 116600, 33382, 116606, 116611,
+    116620, 25374, 116624, 4651, 8, 116629, 116638, 116645, 116652, 116658,
+    116663, 116667, 116673, 33406, 116678, 116683, 70678, 116688, 116693,
+    116699, 116705, 116713, 116718, 116726, 116733, 116739, 116744, 46352,
+    50440, 116750, 1765, 32, 116760, 116765, 116778, 116783, 116791, 116796,
+    116802, 3112, 33461, 116807, 116815, 116822, 116827, 116832, 116841,
+    4225, 4236, 71887, 116849, 116853, 1629, 1777, 116858, 116863, 116870,
+    33814, 1781, 323, 116877, 116883, 116888, 3134, 116892, 116897, 116904,
+    1785, 116909, 116915, 116920, 116932, 6760, 116942, 116949, 1792, 116955,
+    116960, 116967, 116974, 116989, 116996, 117007, 117012, 117020, 2677,
+    117024, 117036, 117041, 117045, 117051, 33260, 2234, 117055, 117066,
+    117070, 117074, 117080, 117084, 117093, 117097, 117108, 117112, 2280,
+    37890, 117116, 117126, 117134, 3225, 117140, 117149, 117157, 10454,
+    117162, 117170, 117175, 117179, 117188, 117195, 117201, 3195, 17262,
+    117205, 117218, 42811, 117236, 117241, 117249, 117257, 117267, 11364,
+    15306, 117279, 117292, 117299, 117309, 117323, 117330, 117346, 117353,
+    117359, 25412, 14519, 117366, 117373, 117383, 117392, 51230, 117404,
+    117412, 51365, 117419, 117422, 117428, 117434, 117440, 117446, 117452,
+    117459, 117466, 117472, 117478, 117484, 117490, 117496, 117502, 117508,
+    117514, 117520, 117526, 117532, 117538, 117544, 117550, 117556, 117562,
+    117568, 117574, 117580, 117586, 117592, 117598, 117604, 117610, 117616,
+    117622, 117628, 117634, 117640, 117646, 117652, 117658, 117664, 117670,
+    117676, 117682, 117688, 117694, 117700, 117706, 117712, 117718, 117724,
+    117730, 117736, 117742, 117748, 117754, 117760, 117766, 117772, 117779,
+    117785, 117792, 117799, 117805, 117812, 117819, 117825, 117831, 117837,
+    117843, 117849, 117855, 117861, 117867, 117873, 117879, 117885, 117891,
+    117897, 117903, 117909, 3209, 10427, 117915, 117925, 117931, 117939,
+    117943, 114930, 3213, 117947, 111346, 25115, 14131, 4150, 117951, 3219,
+    117955, 117965, 117971, 117977, 117983, 117989, 117995, 118001, 118007,
+    118013, 118019, 118025, 118031, 118037, 118043, 118049, 118055, 118061,
+    118067, 118073, 118079, 118085, 118091, 118097, 118103, 118109, 118115,
+    118122, 118129, 118135, 118141, 118147, 118153, 118159, 118165, 1241,
+    118171, 118176, 118181, 118186, 118191, 118196, 118201, 118206, 118211,
+    118215, 118219, 118223, 118227, 118231, 118235, 118239, 118243, 118247,
+    118253, 118259, 118265, 118271, 118275, 118279, 118283, 118287, 118291,
+    118295, 118299, 118303, 118307, 118312, 118317, 118322, 118327, 118332,
+    118337, 118342, 118347, 118352, 118357, 118362, 118367, 118372, 118377,
+    118382, 118387, 118392, 118397, 118402, 118407, 118412, 118417, 118422,
+    118427, 118432, 118437, 118442, 118447, 118452, 118457, 118462, 118467,
+    118472, 118477, 118482, 118487, 118492, 118497, 118502, 118507, 118512,
+    118517, 118522, 118527, 118532, 118537, 118542, 118547, 118552, 118557,
+    118562, 118567, 118572, 118577, 118582, 118587, 118592, 118597, 118602,
+    118607, 118612, 118617, 118622, 118627, 118632, 118637, 118642, 118647,
+    118652, 118657, 118662, 118667, 118672, 118677, 118682, 118687, 118692,
+    118697, 118702, 118707, 118712, 118717, 118722, 118727, 118732, 118737,
+    118742, 118747, 118752, 118757, 118762, 118767, 118772, 118777, 118782,
+    118787, 118792, 118797, 118802, 118807, 118812, 118817, 118822, 118827,
+    118832, 118837, 118842, 118847, 118852, 118857, 118862, 118867, 118872,
+    118877, 118882, 118887, 118892, 118897, 118902, 118907, 118912, 118917,
+    118922, 118927, 118932, 118937, 118942, 118947, 118952, 118957, 118962,
+    118967, 118972, 118977, 118982, 118987, 118992, 118997, 119002, 119007,
+    119012, 119017, 119022, 119027, 119032, 119037, 119042, 119047, 119052,
+    119057, 119062, 119067, 119072, 119077, 119082, 119087, 119092, 119097,
+    119102, 119107, 119112, 119117, 119122, 119127, 119132, 119137, 119142,
+    119147, 119152, 119157, 119162, 119167, 119172, 119177, 119182, 119187,
+    119192, 119197, 119203, 119208, 119213, 119218, 119223, 119228, 119233,
+    119238, 119244, 119249, 119254, 119259, 119264, 119269, 119274, 119279,
+    119284, 119289, 119294, 119299, 119304, 119309, 119314, 119319, 119324,
+    119329, 119334, 119339, 119344, 119349, 119354, 119359, 119364, 119369,
+    119374, 119379, 119384, 119389, 119394, 119399, 119404, 119413, 119418,
+    119427, 119432, 119441, 119446, 119455, 119460, 119469, 119474, 119483,
+    119488, 119497, 119502, 119511, 119516, 119521, 119530, 119534, 119543,
+    119548, 119557, 119562, 119571, 119576, 119585, 119590, 119599, 119604,
+    119613, 119618, 119627, 119632, 119641, 119646, 119655, 119660, 119669,
+    119674, 119679, 119684, 119689, 119694, 119699, 119704, 119708, 119713,
+    119718, 119723, 119728, 119733, 119738, 119744, 119749, 119754, 119759,
+    119765, 119769, 119774, 119780, 119785, 119790, 119795, 119800, 119805,
+    119810, 119815, 119820, 119825, 119830, 119836, 119841, 119846, 119851,
+    119857, 119862, 119867, 119872, 119877, 119883, 119888, 119893, 119898,
+    119903, 119908, 119914, 119919, 119924, 119929, 119934, 119939, 119944,
+    119949, 119954, 119959, 119964, 119969, 119974, 119979, 119984, 119989,
+    119994, 119999, 120004, 120009, 120014, 120019, 120024, 120029, 120035,
+    120041, 120047, 120052, 120057, 120062, 120067, 120073, 120079, 120085,
+    120090, 120095, 120100, 120106, 120111, 120116, 120121, 120126, 120131,
+    120136, 120141, 120146, 120151, 120156, 120161, 120166, 120171, 120176,
+    120181, 120186, 120192, 120198, 120204, 120209, 120214, 120219, 120224,
+    120230, 120236, 120242, 120247, 120252, 120257, 120262, 120267, 120272,
+    120277, 120282, 120287, 18854, 120292, 120298, 120303, 120308, 120313,
+    120318, 120323, 120329, 120334, 120339, 120344, 120349, 120354, 120360,
+    120365, 120370, 120375, 120380, 120385, 120390, 120395, 120400, 120405,
+    120410, 120415, 120420, 120425, 120430, 120435, 120440, 120445, 120450,
+    120455, 120460, 120465, 120470, 120476, 120481, 120486, 120491, 120496,
+    120501, 120506, 120511, 120516, 120521, 120526, 120531, 120536, 120541,
+    120546, 120551, 120556, 120561, 120566, 120571, 120576, 120581, 120586,
+    120591, 120596, 120601, 120606, 120611, 120616, 120621, 120626, 120631,
+    120636, 120641, 120646, 120651, 120656, 120661, 120666, 120671, 120676,
+    120682, 120687, 120692, 120697, 120702, 120707, 120712, 120717, 120722,
+    120727, 120732, 120737, 120743, 120748, 120754, 120759, 120764, 120769,
+    120774, 120779, 120784, 120790, 120795, 120800, 120806, 120811, 120816,
+    120821, 120826, 120831, 120837, 120843, 120848, 120853, 14153, 120858,
+    120863, 120868, 120873, 120878, 120883, 120888, 120893, 120898, 120903,
+    120908, 120913, 120918, 120923, 120928, 120933, 120938, 120943, 120948,
+    120953, 120958, 120963, 120968, 120973, 120978, 120983, 120988, 120993,
+    120998, 121003, 121008, 121013, 121018, 121023, 121028, 121033, 121038,
+    121043, 121048, 121053, 121058, 121063, 121068, 121073, 121078, 121083,
+    121088, 121093, 121098, 121103, 121108, 121113, 121118, 121123, 121128,
+    121133, 121138, 121143, 121148, 121153, 121158, 121163, 121168, 121173,
+    121178, 121184, 121189, 121194, 121199, 121204, 121210, 121215, 121220,
+    121225, 121230, 121235, 121240, 121246, 121251, 121256, 121261, 121266,
+    121271, 121277, 121282, 121287, 121292, 121297, 121302, 121308, 121313,
+    121318, 121323, 121328, 121333, 121339, 121345, 121350, 121355, 121360,
+    121366, 121372, 121378, 121383, 121388, 121394, 121400, 121405, 121411,
+    121417, 121423, 121428, 121433, 121439, 121444, 121450, 121455, 121461,
+    121470, 121475, 121480, 121486, 121491, 121497, 121502, 121507, 121512,
+    121517, 121522, 121527, 121532, 121537, 121542, 121547, 121552, 121557,
+    121562, 121567, 121572, 121577, 121582, 121587, 121592, 121597, 121602,
+    121607, 121612, 121617, 121622, 121627, 121632, 121637, 121642, 121647,
+    121652, 121658, 121664, 121670, 121675, 121680, 121685, 121690, 121695,
+    121700, 121705, 121710, 121715, 121720, 121725, 121730, 121735, 121740,
+    121745, 121750, 121755, 121760, 121765, 121770, 121776, 121782, 121787,
+    121793, 121798, 121803, 121809, 121814, 121820, 121825, 121831, 121836,
+    121842, 121847, 121853, 121858, 121863, 121868, 121873, 121878, 121883,
+    121888, 117966, 117972, 117978, 117984, 121894, 117990, 117996, 121900,
+    118002, 118008, 118014, 118020, 118026, 118032, 118038, 118044, 118050,
+    121906, 118056, 118062, 118068, 121912, 118074, 118080, 118086, 118092,
+    121918, 118098, 118104, 118110, 118130, 121924, 121930, 118136, 121936,
+    118142, 118148, 118154, 118160, 118166, 121942, 3236, 3241, 121947, 3256,
+    3261, 3266, 121952, 121955, 121961, 121967, 121974, 121979, 121984, 2285,
 };
 
 /* code->name phrasebook */
-#define phrasebook_shift 7
-#define phrasebook_short 194
+#define phrasebook_shift 8
+#define phrasebook_short 191
 static const unsigned char phrasebook[] = {
-    0, 205, 148, 236, 90, 78, 211, 62, 78, 31, 55, 239, 10, 55, 213, 45, 55,
-    251, 111, 251, 30, 50, 213, 140, 53, 213, 140, 250, 179, 98, 55, 244,
-    159, 231, 6, 234, 217, 204, 226, 205, 177, 17, 195, 79, 17, 100, 17, 102,
-    17, 134, 17, 136, 17, 146, 17, 167, 17, 178, 17, 171, 17, 182, 244, 168,
-    207, 105, 222, 140, 55, 236, 172, 55, 233, 94, 55, 211, 79, 78, 244, 157,
-    250, 168, 8, 6, 1, 63, 8, 6, 1, 250, 112, 8, 6, 1, 247, 207, 8, 6, 1,
-    240, 231, 8, 6, 1, 69, 8, 6, 1, 236, 49, 8, 6, 1, 234, 190, 8, 6, 1, 233,
-    15, 8, 6, 1, 68, 8, 6, 1, 225, 217, 8, 6, 1, 225, 80, 8, 6, 1, 159, 8, 6,
-    1, 221, 136, 8, 6, 1, 218, 55, 8, 6, 1, 72, 8, 6, 1, 214, 3, 8, 6, 1,
-    211, 167, 8, 6, 1, 144, 8, 6, 1, 209, 80, 8, 6, 1, 203, 216, 8, 6, 1, 66,
-    8, 6, 1, 199, 230, 8, 6, 1, 197, 199, 8, 6, 1, 196, 222, 8, 6, 1, 196,
-    148, 8, 6, 1, 195, 158, 50, 47, 179, 210, 90, 205, 177, 53, 47, 179, 244,
-    241, 252, 22, 126, 222, 75, 233, 101, 252, 22, 8, 4, 1, 63, 8, 4, 1, 250,
-    112, 8, 4, 1, 247, 207, 8, 4, 1, 240, 231, 8, 4, 1, 69, 8, 4, 1, 236, 49,
-    8, 4, 1, 234, 190, 8, 4, 1, 233, 15, 8, 4, 1, 68, 8, 4, 1, 225, 217, 8,
-    4, 1, 225, 80, 8, 4, 1, 159, 8, 4, 1, 221, 136, 8, 4, 1, 218, 55, 8, 4,
-    1, 72, 8, 4, 1, 214, 3, 8, 4, 1, 211, 167, 8, 4, 1, 144, 8, 4, 1, 209,
-    80, 8, 4, 1, 203, 216, 8, 4, 1, 66, 8, 4, 1, 199, 230, 8, 4, 1, 197, 199,
-    8, 4, 1, 196, 222, 8, 4, 1, 196, 148, 8, 4, 1, 195, 158, 50, 241, 18,
-    179, 83, 222, 75, 53, 241, 18, 179, 202, 84, 216, 44, 205, 148, 226, 17,
-    236, 90, 78, 247, 39, 55, 212, 63, 55, 241, 17, 55, 196, 60, 55, 248, 33,
-    154, 208, 133, 55, 239, 150, 241, 105, 55, 235, 170, 214, 67, 226, 68,
-    222, 179, 52, 251, 91, 211, 62, 78, 216, 19, 55, 205, 186, 231, 7, 210,
-    149, 55, 220, 114, 239, 231, 55, 212, 124, 55, 204, 95, 102, 204, 95,
-    134, 252, 10, 252, 22, 219, 69, 55, 212, 179, 55, 112, 238, 253, 247, 50,
-    204, 95, 100, 220, 13, 214, 67, 226, 68, 210, 17, 52, 251, 91, 211, 62,
-    78, 197, 217, 191, 97, 211, 87, 197, 217, 191, 97, 232, 225, 197, 217,
-    191, 115, 211, 85, 226, 17, 211, 79, 78, 8, 6, 1, 39, 3, 233, 100, 8, 6,
-    1, 39, 3, 186, 8, 6, 1, 39, 3, 244, 240, 8, 6, 1, 39, 3, 202, 84, 8, 6,
-    1, 39, 3, 239, 150, 8, 6, 1, 39, 3, 210, 3, 57, 8, 6, 1, 251, 245, 8, 6,
-    1, 247, 208, 3, 247, 50, 8, 6, 1, 237, 136, 3, 233, 100, 8, 6, 1, 237,
-    136, 3, 186, 8, 6, 1, 237, 136, 3, 244, 240, 8, 6, 1, 237, 136, 3, 239,
-    150, 8, 6, 1, 230, 249, 3, 233, 100, 8, 6, 1, 230, 249, 3, 186, 8, 6, 1,
-    230, 249, 3, 244, 240, 8, 6, 1, 230, 249, 3, 239, 150, 8, 6, 1, 236, 121,
-    8, 6, 1, 218, 56, 3, 202, 84, 8, 6, 1, 177, 3, 233, 100, 8, 6, 1, 177, 3,
-    186, 8, 6, 1, 177, 3, 244, 240, 8, 6, 1, 177, 3, 202, 84, 8, 6, 1, 177,
-    3, 239, 150, 218, 118, 55, 8, 6, 1, 177, 3, 106, 8, 6, 1, 118, 3, 233,
-    100, 8, 6, 1, 118, 3, 186, 8, 6, 1, 118, 3, 244, 240, 8, 6, 1, 118, 3,
-    239, 150, 8, 6, 1, 196, 149, 3, 186, 8, 6, 1, 202, 162, 8, 4, 1, 207, 13,
-    209, 80, 8, 4, 1, 39, 3, 233, 100, 8, 4, 1, 39, 3, 186, 8, 4, 1, 39, 3,
-    244, 240, 8, 4, 1, 39, 3, 202, 84, 8, 4, 1, 39, 3, 239, 150, 8, 4, 1, 39,
-    3, 210, 3, 57, 8, 4, 1, 251, 245, 8, 4, 1, 247, 208, 3, 247, 50, 8, 4, 1,
-    237, 136, 3, 233, 100, 8, 4, 1, 237, 136, 3, 186, 8, 4, 1, 237, 136, 3,
-    244, 240, 8, 4, 1, 237, 136, 3, 239, 150, 8, 4, 1, 230, 249, 3, 233, 100,
-    8, 4, 1, 230, 249, 3, 186, 8, 4, 1, 230, 249, 3, 244, 240, 8, 4, 1, 230,
-    249, 3, 239, 150, 8, 4, 1, 236, 121, 8, 4, 1, 218, 56, 3, 202, 84, 8, 4,
-    1, 177, 3, 233, 100, 8, 4, 1, 177, 3, 186, 8, 4, 1, 177, 3, 244, 240, 8,
-    4, 1, 177, 3, 202, 84, 8, 4, 1, 177, 3, 239, 150, 239, 54, 55, 8, 4, 1,
-    177, 3, 106, 8, 4, 1, 118, 3, 233, 100, 8, 4, 1, 118, 3, 186, 8, 4, 1,
-    118, 3, 244, 240, 8, 4, 1, 118, 3, 239, 150, 8, 4, 1, 196, 149, 3, 186,
-    8, 4, 1, 202, 162, 8, 4, 1, 196, 149, 3, 239, 150, 8, 6, 1, 39, 3, 220,
-    114, 8, 4, 1, 39, 3, 220, 114, 8, 6, 1, 39, 3, 248, 47, 8, 4, 1, 39, 3,
-    248, 47, 8, 6, 1, 39, 3, 214, 151, 8, 4, 1, 39, 3, 214, 151, 8, 6, 1,
-    247, 208, 3, 186, 8, 4, 1, 247, 208, 3, 186, 8, 6, 1, 247, 208, 3, 244,
-    240, 8, 4, 1, 247, 208, 3, 244, 240, 8, 6, 1, 247, 208, 3, 76, 57, 8, 4,
-    1, 247, 208, 3, 76, 57, 8, 6, 1, 247, 208, 3, 247, 106, 8, 4, 1, 247,
-    208, 3, 247, 106, 8, 6, 1, 240, 232, 3, 247, 106, 8, 4, 1, 240, 232, 3,
-    247, 106, 8, 6, 1, 240, 232, 3, 106, 8, 4, 1, 240, 232, 3, 106, 8, 6, 1,
-    237, 136, 3, 220, 114, 8, 4, 1, 237, 136, 3, 220, 114, 8, 6, 1, 237, 136,
-    3, 248, 47, 8, 4, 1, 237, 136, 3, 248, 47, 8, 6, 1, 237, 136, 3, 76, 57,
-    8, 4, 1, 237, 136, 3, 76, 57, 8, 6, 1, 237, 136, 3, 214, 151, 8, 4, 1,
-    237, 136, 3, 214, 151, 8, 6, 1, 237, 136, 3, 247, 106, 8, 4, 1, 237, 136,
-    3, 247, 106, 8, 6, 1, 234, 191, 3, 244, 240, 8, 4, 1, 234, 191, 3, 244,
-    240, 8, 6, 1, 234, 191, 3, 248, 47, 8, 4, 1, 234, 191, 3, 248, 47, 8, 6,
-    1, 234, 191, 3, 76, 57, 8, 4, 1, 234, 191, 3, 76, 57, 8, 6, 1, 234, 191,
-    3, 247, 50, 8, 4, 1, 234, 191, 3, 247, 50, 8, 6, 1, 233, 16, 3, 244, 240,
-    8, 4, 1, 233, 16, 3, 244, 240, 8, 6, 1, 233, 16, 3, 106, 8, 4, 1, 233,
-    16, 3, 106, 8, 6, 1, 230, 249, 3, 202, 84, 8, 4, 1, 230, 249, 3, 202, 84,
-    8, 6, 1, 230, 249, 3, 220, 114, 8, 4, 1, 230, 249, 3, 220, 114, 8, 6, 1,
-    230, 249, 3, 248, 47, 8, 4, 1, 230, 249, 3, 248, 47, 8, 6, 1, 230, 249,
-    3, 214, 151, 8, 4, 1, 230, 249, 3, 214, 151, 8, 6, 1, 230, 249, 3, 76,
-    57, 8, 4, 1, 238, 252, 68, 8, 6, 33, 226, 118, 8, 4, 33, 226, 118, 8, 6,
-    1, 225, 218, 3, 244, 240, 8, 4, 1, 225, 218, 3, 244, 240, 8, 6, 1, 225,
-    81, 3, 247, 50, 8, 4, 1, 225, 81, 3, 247, 50, 8, 4, 1, 223, 210, 8, 6, 1,
-    223, 100, 3, 186, 8, 4, 1, 223, 100, 3, 186, 8, 6, 1, 223, 100, 3, 247,
-    50, 8, 4, 1, 223, 100, 3, 247, 50, 8, 6, 1, 223, 100, 3, 247, 106, 8, 4,
-    1, 223, 100, 3, 247, 106, 8, 6, 1, 223, 100, 3, 112, 238, 253, 8, 4, 1,
-    223, 100, 3, 112, 238, 253, 8, 6, 1, 223, 100, 3, 106, 8, 4, 1, 223, 100,
-    3, 106, 8, 6, 1, 218, 56, 3, 186, 8, 4, 1, 218, 56, 3, 186, 8, 6, 1, 218,
-    56, 3, 247, 50, 8, 4, 1, 218, 56, 3, 247, 50, 8, 6, 1, 218, 56, 3, 247,
-    106, 8, 4, 1, 218, 56, 3, 247, 106, 8, 4, 1, 218, 56, 212, 37, 247, 219,
-    251, 30, 8, 6, 1, 236, 215, 8, 4, 1, 236, 215, 8, 6, 1, 177, 3, 220, 114,
-    8, 4, 1, 177, 3, 220, 114, 8, 6, 1, 177, 3, 248, 47, 8, 4, 1, 177, 3,
-    248, 47, 8, 6, 1, 177, 3, 52, 186, 8, 4, 1, 177, 3, 52, 186, 8, 6, 33,
-    214, 164, 8, 4, 33, 214, 164, 8, 6, 1, 211, 32, 3, 186, 8, 4, 1, 211, 32,
-    3, 186, 8, 6, 1, 211, 32, 3, 247, 50, 8, 4, 1, 211, 32, 3, 247, 50, 8, 6,
-    1, 211, 32, 3, 247, 106, 8, 4, 1, 211, 32, 3, 247, 106, 8, 6, 1, 209, 81,
-    3, 186, 8, 4, 1, 209, 81, 3, 186, 8, 6, 1, 209, 81, 3, 244, 240, 8, 4, 1,
-    209, 81, 3, 244, 240, 8, 6, 1, 209, 81, 3, 247, 50, 8, 4, 1, 209, 81, 3,
-    247, 50, 8, 6, 1, 209, 81, 3, 247, 106, 8, 4, 1, 209, 81, 3, 247, 106, 8,
-    6, 1, 203, 217, 3, 247, 50, 8, 4, 1, 203, 217, 3, 247, 50, 8, 6, 1, 203,
-    217, 3, 247, 106, 8, 4, 1, 203, 217, 3, 247, 106, 8, 6, 1, 203, 217, 3,
-    106, 8, 4, 1, 203, 217, 3, 106, 8, 6, 1, 118, 3, 202, 84, 8, 4, 1, 118,
-    3, 202, 84, 8, 6, 1, 118, 3, 220, 114, 8, 4, 1, 118, 3, 220, 114, 8, 6,
-    1, 118, 3, 248, 47, 8, 4, 1, 118, 3, 248, 47, 8, 6, 1, 118, 3, 210, 3,
-    57, 8, 4, 1, 118, 3, 210, 3, 57, 8, 6, 1, 118, 3, 52, 186, 8, 4, 1, 118,
-    3, 52, 186, 8, 6, 1, 118, 3, 214, 151, 8, 4, 1, 118, 3, 214, 151, 8, 6,
-    1, 197, 200, 3, 244, 240, 8, 4, 1, 197, 200, 3, 244, 240, 8, 6, 1, 196,
-    149, 3, 244, 240, 8, 4, 1, 196, 149, 3, 244, 240, 8, 6, 1, 196, 149, 3,
-    239, 150, 8, 6, 1, 195, 159, 3, 186, 8, 4, 1, 195, 159, 3, 186, 8, 6, 1,
-    195, 159, 3, 76, 57, 8, 4, 1, 195, 159, 3, 76, 57, 8, 6, 1, 195, 159, 3,
-    247, 106, 8, 4, 1, 195, 159, 3, 247, 106, 8, 4, 1, 181, 209, 80, 8, 4, 1,
-    74, 3, 106, 8, 6, 1, 74, 3, 122, 8, 6, 1, 74, 3, 201, 240, 8, 4, 1, 74,
-    3, 201, 240, 8, 6, 1, 152, 167, 8, 4, 1, 152, 167, 8, 6, 1, 192, 72, 8,
-    6, 1, 247, 208, 3, 122, 8, 4, 1, 247, 208, 3, 122, 8, 6, 1, 251, 220,
-    240, 231, 8, 6, 1, 240, 232, 3, 122, 8, 6, 1, 240, 232, 3, 201, 240, 8,
-    4, 1, 240, 232, 3, 201, 240, 8, 4, 1, 163, 239, 212, 8, 6, 1, 210, 89,
-    69, 8, 6, 1, 208, 163, 8, 6, 1, 192, 69, 8, 6, 1, 236, 50, 3, 122, 8, 4,
-    1, 236, 50, 3, 122, 8, 6, 1, 234, 191, 3, 122, 8, 6, 1, 234, 94, 8, 4, 1,
-    231, 44, 8, 6, 1, 226, 7, 8, 6, 1, 230, 249, 3, 106, 8, 6, 1, 225, 81, 3,
-    122, 8, 4, 1, 225, 81, 3, 122, 8, 4, 1, 223, 100, 3, 154, 8, 4, 1, 222,
-    247, 3, 106, 8, 6, 1, 163, 221, 136, 8, 6, 1, 218, 56, 3, 50, 122, 8, 4,
-    1, 218, 56, 3, 181, 53, 222, 172, 8, 6, 1, 177, 3, 112, 202, 84, 8, 6, 1,
-    177, 3, 231, 102, 8, 4, 1, 177, 3, 231, 102, 8, 6, 1, 214, 146, 8, 4, 1,
-    214, 146, 8, 6, 1, 214, 4, 3, 122, 8, 4, 1, 214, 4, 3, 122, 8, 1, 195,
-    220, 8, 6, 1, 152, 102, 8, 4, 1, 152, 102, 8, 6, 1, 236, 141, 8, 1, 210,
-    89, 236, 142, 221, 225, 8, 4, 1, 203, 217, 3, 213, 215, 122, 8, 6, 1,
-    203, 217, 3, 122, 8, 4, 1, 203, 217, 3, 122, 8, 6, 1, 203, 217, 3, 210,
-    95, 122, 8, 6, 1, 118, 3, 231, 102, 8, 4, 1, 118, 3, 231, 102, 8, 6, 1,
-    200, 28, 8, 6, 1, 199, 231, 3, 122, 8, 6, 1, 196, 149, 3, 122, 8, 4, 1,
-    196, 149, 3, 122, 8, 6, 1, 195, 159, 3, 106, 8, 4, 1, 195, 159, 3, 106,
-    8, 6, 1, 236, 52, 8, 6, 1, 236, 53, 210, 88, 8, 4, 1, 236, 53, 210, 88,
-    8, 4, 1, 236, 53, 3, 203, 135, 8, 1, 99, 3, 106, 8, 6, 1, 152, 146, 8, 4,
-    1, 152, 146, 8, 1, 226, 17, 233, 152, 204, 227, 3, 106, 8, 1, 196, 225,
-    8, 1, 239, 205, 244, 215, 8, 1, 222, 218, 244, 215, 8, 1, 251, 124, 244,
-    215, 8, 1, 210, 95, 244, 215, 8, 6, 1, 237, 158, 3, 247, 106, 8, 6, 1,
-    240, 232, 3, 4, 1, 195, 159, 3, 247, 106, 8, 4, 1, 237, 158, 3, 247, 106,
-    8, 6, 1, 222, 41, 8, 6, 1, 223, 100, 3, 4, 1, 225, 217, 8, 4, 1, 222, 41,
-    8, 6, 1, 216, 165, 8, 6, 1, 218, 56, 3, 4, 1, 225, 217, 8, 4, 1, 216,
-    165, 8, 6, 1, 39, 3, 247, 106, 8, 4, 1, 39, 3, 247, 106, 8, 6, 1, 230,
-    249, 3, 247, 106, 8, 4, 1, 230, 249, 3, 247, 106, 8, 6, 1, 177, 3, 247,
-    106, 8, 4, 1, 177, 3, 247, 106, 8, 6, 1, 118, 3, 247, 106, 8, 4, 1, 118,
-    3, 247, 106, 8, 6, 1, 118, 3, 239, 151, 26, 220, 114, 8, 4, 1, 118, 3,
-    239, 151, 26, 220, 114, 8, 6, 1, 118, 3, 239, 151, 26, 186, 8, 4, 1, 118,
-    3, 239, 151, 26, 186, 8, 6, 1, 118, 3, 239, 151, 26, 247, 106, 8, 4, 1,
-    118, 3, 239, 151, 26, 247, 106, 8, 6, 1, 118, 3, 239, 151, 26, 233, 100,
-    8, 4, 1, 118, 3, 239, 151, 26, 233, 100, 8, 4, 1, 163, 69, 8, 6, 1, 39,
-    3, 239, 151, 26, 220, 114, 8, 4, 1, 39, 3, 239, 151, 26, 220, 114, 8, 6,
-    1, 39, 3, 76, 90, 26, 220, 114, 8, 4, 1, 39, 3, 76, 90, 26, 220, 114, 8,
-    6, 1, 251, 246, 3, 220, 114, 8, 4, 1, 251, 246, 3, 220, 114, 8, 6, 1,
-    234, 191, 3, 106, 8, 4, 1, 234, 191, 3, 106, 8, 6, 1, 234, 191, 3, 247,
-    106, 8, 4, 1, 234, 191, 3, 247, 106, 8, 6, 1, 225, 81, 3, 247, 106, 8, 4,
-    1, 225, 81, 3, 247, 106, 8, 6, 1, 177, 3, 214, 151, 8, 4, 1, 177, 3, 214,
-    151, 8, 6, 1, 177, 3, 214, 152, 26, 220, 114, 8, 4, 1, 177, 3, 214, 152,
-    26, 220, 114, 8, 6, 1, 236, 53, 3, 247, 106, 8, 4, 1, 236, 53, 3, 247,
-    106, 8, 4, 1, 225, 218, 3, 247, 106, 8, 6, 1, 237, 157, 8, 6, 1, 240,
-    232, 3, 4, 1, 195, 158, 8, 4, 1, 237, 157, 8, 6, 1, 234, 191, 3, 186, 8,
-    4, 1, 234, 191, 3, 186, 8, 6, 1, 231, 41, 8, 6, 1, 196, 225, 8, 6, 1,
-    218, 56, 3, 233, 100, 8, 4, 1, 218, 56, 3, 233, 100, 8, 6, 1, 39, 3, 210,
-    3, 90, 26, 186, 8, 4, 1, 39, 3, 210, 3, 90, 26, 186, 8, 6, 1, 251, 246,
-    3, 186, 8, 4, 1, 251, 246, 3, 186, 8, 6, 1, 177, 3, 204, 196, 26, 186, 8,
-    4, 1, 177, 3, 204, 196, 26, 186, 8, 6, 1, 39, 3, 52, 233, 100, 8, 4, 1,
-    39, 3, 52, 233, 100, 8, 6, 1, 39, 3, 226, 17, 248, 47, 8, 4, 1, 39, 3,
-    226, 17, 248, 47, 8, 6, 1, 237, 136, 3, 52, 233, 100, 8, 4, 1, 237, 136,
-    3, 52, 233, 100, 8, 6, 1, 237, 136, 3, 226, 17, 248, 47, 8, 4, 1, 237,
-    136, 3, 226, 17, 248, 47, 8, 6, 1, 230, 249, 3, 52, 233, 100, 8, 4, 1,
-    230, 249, 3, 52, 233, 100, 8, 6, 1, 230, 249, 3, 226, 17, 248, 47, 8, 4,
-    1, 230, 249, 3, 226, 17, 248, 47, 8, 6, 1, 177, 3, 52, 233, 100, 8, 4, 1,
-    177, 3, 52, 233, 100, 8, 6, 1, 177, 3, 226, 17, 248, 47, 8, 4, 1, 177, 3,
-    226, 17, 248, 47, 8, 6, 1, 211, 32, 3, 52, 233, 100, 8, 4, 1, 211, 32, 3,
-    52, 233, 100, 8, 6, 1, 211, 32, 3, 226, 17, 248, 47, 8, 4, 1, 211, 32, 3,
-    226, 17, 248, 47, 8, 6, 1, 118, 3, 52, 233, 100, 8, 4, 1, 118, 3, 52,
-    233, 100, 8, 6, 1, 118, 3, 226, 17, 248, 47, 8, 4, 1, 118, 3, 226, 17,
-    248, 47, 8, 6, 1, 209, 81, 3, 244, 160, 60, 8, 4, 1, 209, 81, 3, 244,
-    160, 60, 8, 6, 1, 203, 217, 3, 244, 160, 60, 8, 4, 1, 203, 217, 3, 244,
-    160, 60, 8, 6, 1, 195, 239, 8, 4, 1, 195, 239, 8, 6, 1, 233, 16, 3, 247,
-    106, 8, 4, 1, 233, 16, 3, 247, 106, 8, 6, 1, 218, 56, 3, 181, 53, 222,
-    172, 8, 4, 1, 240, 232, 3, 241, 21, 8, 6, 1, 214, 39, 8, 4, 1, 214, 39,
-    8, 6, 1, 195, 159, 3, 122, 8, 4, 1, 195, 159, 3, 122, 8, 6, 1, 39, 3, 76,
-    57, 8, 4, 1, 39, 3, 76, 57, 8, 6, 1, 237, 136, 3, 247, 50, 8, 4, 1, 237,
-    136, 3, 247, 50, 8, 6, 1, 177, 3, 239, 151, 26, 220, 114, 8, 4, 1, 177,
-    3, 239, 151, 26, 220, 114, 8, 6, 1, 177, 3, 202, 85, 26, 220, 114, 8, 4,
-    1, 177, 3, 202, 85, 26, 220, 114, 8, 6, 1, 177, 3, 76, 57, 8, 4, 1, 177,
-    3, 76, 57, 8, 6, 1, 177, 3, 76, 90, 26, 220, 114, 8, 4, 1, 177, 3, 76,
-    90, 26, 220, 114, 8, 6, 1, 196, 149, 3, 220, 114, 8, 4, 1, 196, 149, 3,
-    220, 114, 8, 4, 1, 223, 100, 3, 241, 21, 8, 4, 1, 218, 56, 3, 241, 21, 8,
-    4, 1, 203, 217, 3, 241, 21, 8, 4, 1, 238, 252, 225, 217, 8, 4, 1, 240,
-    51, 239, 110, 8, 4, 1, 211, 98, 239, 110, 8, 6, 1, 39, 3, 106, 8, 6, 1,
-    247, 208, 3, 106, 8, 4, 1, 247, 208, 3, 106, 8, 6, 1, 223, 100, 3, 154,
-    8, 6, 1, 203, 217, 3, 239, 147, 106, 8, 4, 1, 209, 81, 3, 204, 63, 203,
-    135, 8, 4, 1, 195, 159, 3, 204, 63, 203, 135, 8, 6, 1, 233, 152, 204,
-    226, 8, 4, 1, 233, 152, 204, 226, 8, 6, 1, 74, 3, 106, 8, 6, 1, 118, 154,
-    8, 6, 1, 163, 199, 230, 8, 6, 1, 237, 136, 3, 106, 8, 4, 1, 237, 136, 3,
-    106, 8, 6, 1, 225, 218, 3, 106, 8, 4, 1, 225, 218, 3, 106, 8, 6, 1, 4,
-    211, 168, 3, 231, 165, 203, 135, 8, 4, 1, 211, 168, 3, 231, 165, 203,
-    135, 8, 6, 1, 211, 32, 3, 106, 8, 4, 1, 211, 32, 3, 106, 8, 6, 1, 196,
-    149, 3, 106, 8, 4, 1, 196, 149, 3, 106, 8, 4, 1, 163, 63, 8, 4, 1, 251,
-    134, 8, 4, 1, 163, 251, 134, 8, 4, 1, 74, 3, 122, 8, 4, 1, 192, 72, 8, 4,
-    1, 247, 208, 3, 241, 21, 8, 4, 1, 240, 232, 3, 203, 135, 8, 4, 1, 240,
-    232, 3, 122, 8, 4, 1, 210, 89, 69, 8, 4, 1, 208, 163, 8, 4, 1, 208, 164,
-    3, 122, 8, 4, 1, 192, 69, 8, 4, 1, 210, 89, 192, 69, 8, 4, 1, 210, 89,
-    192, 237, 136, 3, 122, 8, 4, 1, 244, 203, 210, 89, 192, 69, 8, 4, 1, 238,
-    252, 225, 218, 3, 106, 8, 4, 1, 234, 191, 3, 122, 8, 4, 1, 145, 234, 190,
-    8, 1, 4, 6, 234, 190, 8, 4, 1, 234, 94, 8, 4, 1, 210, 208, 231, 102, 8,
-    4, 1, 163, 233, 15, 8, 4, 1, 233, 16, 3, 122, 8, 4, 1, 232, 100, 3, 122,
-    8, 4, 1, 230, 249, 3, 106, 8, 4, 1, 226, 7, 8, 1, 4, 6, 68, 8, 4, 1, 223,
-    100, 3, 112, 202, 84, 8, 4, 1, 223, 100, 3, 248, 225, 8, 4, 1, 223, 100,
-    3, 210, 95, 122, 8, 4, 1, 222, 125, 8, 4, 1, 163, 221, 136, 8, 4, 1, 163,
-    221, 137, 3, 181, 222, 172, 8, 4, 1, 221, 137, 3, 122, 8, 4, 1, 218, 56,
-    3, 50, 122, 8, 4, 1, 218, 56, 3, 210, 95, 122, 8, 1, 4, 6, 218, 55, 8, 4,
-    1, 249, 74, 72, 8, 1, 4, 6, 214, 164, 8, 4, 1, 244, 203, 214, 124, 8, 4,
-    1, 212, 246, 8, 4, 1, 163, 144, 8, 4, 1, 163, 211, 32, 3, 181, 222, 172,
-    8, 4, 1, 163, 211, 32, 3, 122, 8, 4, 1, 211, 32, 3, 181, 222, 172, 8, 4,
-    1, 211, 32, 3, 203, 135, 8, 4, 1, 211, 32, 3, 235, 108, 8, 4, 1, 210, 89,
-    211, 32, 3, 235, 108, 8, 1, 4, 6, 144, 8, 1, 4, 6, 226, 17, 144, 8, 4, 1,
-    209, 81, 3, 122, 8, 4, 1, 236, 141, 8, 4, 1, 238, 252, 225, 218, 3, 204,
-    196, 26, 122, 8, 4, 1, 205, 91, 210, 89, 236, 141, 8, 4, 1, 236, 142, 3,
-    241, 21, 8, 4, 1, 163, 203, 216, 8, 4, 1, 203, 217, 3, 210, 95, 122, 8,
-    4, 1, 118, 154, 8, 4, 1, 200, 28, 8, 4, 1, 199, 231, 3, 122, 8, 4, 1,
-    163, 199, 230, 8, 4, 1, 163, 197, 199, 8, 4, 1, 163, 196, 148, 8, 1, 4,
-    6, 196, 148, 8, 4, 1, 195, 159, 3, 210, 95, 122, 8, 4, 1, 195, 159, 3,
-    241, 21, 8, 4, 1, 236, 52, 8, 4, 1, 236, 53, 3, 241, 21, 8, 1, 233, 152,
-    204, 226, 8, 1, 212, 253, 198, 244, 234, 241, 8, 1, 226, 17, 233, 152,
-    204, 226, 8, 1, 204, 204, 247, 207, 8, 1, 248, 168, 244, 215, 8, 1, 4, 6,
-    250, 112, 8, 4, 1, 244, 203, 192, 69, 8, 1, 4, 6, 234, 191, 3, 122, 8, 1,
-    4, 6, 233, 15, 8, 4, 1, 225, 218, 3, 241, 57, 8, 4, 1, 163, 225, 80, 8,
-    1, 4, 6, 159, 8, 4, 1, 211, 168, 3, 122, 8, 1, 233, 152, 204, 227, 3,
-    106, 8, 1, 210, 89, 233, 152, 204, 227, 3, 106, 8, 4, 1, 237, 158, 239,
-    110, 8, 4, 1, 239, 178, 239, 110, 8, 4, 1, 237, 158, 239, 111, 3, 241,
-    21, 8, 4, 1, 201, 115, 239, 110, 8, 4, 1, 203, 7, 239, 110, 8, 4, 1, 203,
-    75, 239, 111, 3, 241, 21, 8, 4, 1, 235, 167, 239, 110, 8, 4, 1, 221, 193,
-    239, 110, 8, 4, 1, 221, 138, 239, 110, 8, 1, 248, 168, 213, 44, 8, 1,
-    248, 176, 213, 44, 8, 4, 1, 163, 233, 16, 3, 235, 108, 8, 4, 1, 163, 233,
-    16, 3, 235, 109, 26, 203, 135, 73, 1, 4, 233, 15, 73, 1, 4, 233, 16, 3,
-    122, 73, 1, 4, 225, 217, 73, 1, 4, 144, 73, 1, 4, 163, 144, 73, 1, 4,
-    163, 211, 32, 3, 122, 73, 1, 4, 6, 226, 17, 144, 73, 1, 4, 197, 199, 73,
-    1, 4, 196, 148, 73, 1, 212, 19, 73, 1, 52, 212, 19, 73, 1, 163, 244, 159,
-    73, 1, 251, 30, 73, 1, 210, 89, 244, 159, 73, 1, 53, 157, 210, 2, 73, 1,
-    50, 157, 210, 2, 73, 1, 233, 152, 204, 226, 73, 1, 210, 89, 233, 152,
-    204, 226, 73, 1, 50, 250, 217, 73, 1, 53, 250, 217, 73, 1, 124, 250, 217,
-    73, 1, 135, 250, 217, 73, 1, 244, 241, 252, 22, 247, 106, 73, 1, 83, 222,
-    75, 73, 1, 220, 114, 73, 1, 252, 10, 252, 22, 73, 1, 233, 101, 252, 22,
-    73, 1, 126, 83, 222, 75, 73, 1, 126, 220, 114, 73, 1, 126, 233, 101, 252,
-    22, 73, 1, 126, 252, 10, 252, 22, 73, 1, 201, 177, 244, 168, 73, 1, 157,
-    201, 177, 244, 168, 73, 1, 247, 35, 53, 157, 210, 2, 73, 1, 247, 35, 50,
-    157, 210, 2, 73, 1, 124, 203, 147, 73, 1, 135, 203, 147, 73, 1, 98, 55,
-    73, 1, 219, 16, 55, 248, 47, 76, 57, 210, 3, 57, 214, 151, 4, 202, 84,
-    52, 252, 10, 252, 22, 73, 1, 210, 73, 122, 73, 1, 241, 62, 252, 22, 73,
-    1, 4, 234, 94, 73, 1, 4, 159, 73, 1, 4, 209, 80, 73, 1, 4, 196, 222, 73,
-    1, 4, 210, 89, 233, 152, 204, 226, 73, 1, 236, 74, 152, 154, 73, 1, 130,
-    152, 154, 73, 1, 219, 65, 152, 154, 73, 1, 126, 152, 154, 73, 1, 236, 73,
-    152, 154, 73, 1, 196, 13, 239, 202, 152, 78, 73, 1, 196, 96, 239, 202,
-    152, 78, 73, 1, 198, 242, 73, 1, 200, 68, 73, 1, 52, 251, 30, 73, 1, 126,
-    135, 250, 217, 73, 1, 126, 124, 250, 217, 73, 1, 126, 50, 250, 217, 73,
-    1, 126, 53, 250, 217, 73, 1, 126, 210, 2, 73, 1, 112, 233, 101, 252, 22,
-    73, 1, 112, 52, 233, 101, 252, 22, 73, 1, 112, 52, 252, 10, 252, 22, 73,
-    1, 126, 202, 84, 73, 1, 210, 215, 244, 168, 73, 1, 248, 243, 130, 202,
-    11, 73, 1, 236, 222, 130, 202, 11, 73, 1, 248, 243, 126, 202, 11, 73, 1,
-    236, 222, 126, 202, 11, 73, 1, 206, 246, 73, 1, 192, 206, 246, 73, 1,
-    126, 50, 51, 38, 233, 101, 252, 22, 38, 252, 10, 252, 22, 38, 244, 241,
-    252, 22, 38, 202, 84, 38, 220, 114, 38, 214, 19, 38, 248, 47, 38, 76, 57,
-    38, 239, 150, 38, 231, 165, 57, 38, 210, 3, 57, 38, 52, 252, 10, 252, 22,
-    38, 247, 106, 38, 83, 222, 76, 57, 38, 52, 83, 222, 76, 57, 38, 52, 233,
-    101, 252, 22, 38, 247, 133, 38, 226, 17, 248, 47, 38, 163, 244, 160, 57,
-    38, 244, 160, 57, 38, 210, 89, 244, 160, 57, 38, 244, 160, 90, 210, 22,
-    38, 233, 101, 252, 23, 60, 38, 252, 10, 252, 23, 60, 38, 50, 203, 148,
-    60, 38, 53, 203, 148, 60, 38, 50, 251, 91, 57, 38, 231, 102, 38, 50, 157,
-    210, 3, 60, 38, 124, 203, 148, 60, 38, 135, 203, 148, 60, 38, 98, 2, 60,
-    38, 219, 16, 2, 60, 38, 213, 213, 231, 165, 60, 38, 210, 95, 231, 165,
-    60, 38, 76, 60, 38, 239, 151, 60, 38, 210, 3, 60, 38, 244, 160, 60, 38,
-    247, 50, 38, 214, 151, 38, 83, 222, 76, 60, 38, 248, 40, 60, 38, 226, 17,
-    52, 250, 252, 60, 38, 247, 107, 60, 38, 244, 241, 252, 23, 60, 38, 248,
-    48, 60, 38, 226, 17, 248, 48, 60, 38, 202, 85, 60, 38, 220, 115, 60, 38,
-    126, 222, 75, 38, 52, 126, 222, 75, 38, 202, 85, 214, 20, 38, 206, 182,
-    204, 196, 214, 20, 38, 181, 204, 196, 214, 20, 38, 206, 182, 205, 178,
-    214, 20, 38, 181, 205, 178, 214, 20, 38, 53, 157, 210, 3, 60, 38, 226,
-    17, 248, 40, 60, 38, 47, 60, 38, 208, 141, 60, 38, 196, 223, 57, 38, 83,
-    202, 84, 38, 52, 214, 19, 38, 233, 101, 152, 78, 38, 252, 10, 152, 78,
-    38, 32, 213, 38, 38, 32, 223, 232, 38, 32, 239, 144, 201, 248, 38, 32,
-    195, 225, 38, 248, 40, 57, 38, 236, 172, 2, 60, 38, 52, 83, 222, 76, 60,
-    38, 50, 251, 91, 60, 38, 216, 19, 202, 85, 57, 38, 231, 171, 57, 38, 251,
-    139, 180, 202, 30, 57, 38, 50, 53, 61, 60, 38, 200, 24, 61, 60, 38, 233,
-    107, 225, 124, 38, 53, 250, 218, 57, 38, 50, 157, 210, 3, 57, 38, 235,
-    164, 38, 196, 223, 60, 38, 50, 250, 218, 60, 38, 53, 250, 218, 60, 38,
-    53, 250, 218, 26, 124, 250, 218, 60, 38, 53, 157, 210, 3, 57, 38, 76, 90,
-    210, 22, 38, 250, 180, 60, 38, 52, 210, 3, 60, 38, 195, 24, 57, 38, 52,
-    248, 48, 60, 38, 52, 248, 47, 38, 52, 220, 114, 38, 52, 220, 115, 60, 38,
-    52, 202, 84, 38, 52, 226, 17, 248, 47, 38, 52, 91, 61, 60, 38, 8, 4, 1,
-    63, 38, 8, 4, 1, 69, 38, 8, 4, 1, 68, 38, 8, 4, 1, 72, 38, 8, 4, 1, 66,
-    38, 8, 4, 1, 247, 207, 38, 8, 4, 1, 240, 231, 38, 8, 4, 1, 233, 15, 38,
-    8, 4, 1, 221, 136, 38, 8, 4, 1, 144, 38, 8, 4, 1, 203, 216, 38, 8, 4, 1,
-    199, 230, 38, 8, 4, 1, 196, 222, 32, 6, 1, 232, 88, 32, 4, 1, 232, 88,
-    32, 6, 1, 250, 251, 208, 222, 32, 4, 1, 250, 251, 208, 222, 32, 215, 142,
-    55, 32, 221, 203, 215, 142, 55, 32, 6, 1, 213, 196, 239, 118, 32, 4, 1,
-    213, 196, 239, 118, 32, 195, 225, 32, 4, 210, 89, 221, 173, 206, 87, 105,
-    32, 4, 237, 250, 221, 173, 206, 87, 105, 32, 4, 210, 89, 237, 250, 221,
-    173, 206, 87, 105, 32, 211, 79, 78, 32, 6, 1, 195, 232, 32, 201, 248, 32,
-    239, 144, 201, 248, 32, 6, 1, 251, 135, 3, 201, 248, 32, 251, 74, 203,
-    35, 32, 6, 1, 236, 175, 3, 201, 248, 32, 6, 1, 236, 127, 3, 201, 248, 32,
-    6, 1, 226, 8, 3, 201, 248, 32, 6, 1, 214, 123, 3, 201, 248, 32, 6, 1,
-    200, 29, 3, 201, 248, 32, 6, 1, 214, 125, 3, 201, 248, 32, 4, 1, 226, 8,
-    3, 239, 144, 26, 201, 248, 32, 6, 1, 251, 134, 32, 6, 1, 248, 206, 32, 6,
-    1, 234, 94, 32, 6, 1, 239, 212, 32, 6, 1, 236, 174, 32, 6, 1, 195, 78,
-    32, 6, 1, 236, 126, 32, 6, 1, 202, 199, 32, 6, 1, 226, 7, 32, 6, 1, 225,
-    2, 32, 6, 1, 222, 245, 32, 6, 1, 218, 145, 32, 6, 1, 215, 186, 32, 6, 1,
-    196, 196, 32, 6, 1, 214, 122, 32, 6, 1, 212, 220, 32, 6, 1, 210, 74, 32,
-    6, 1, 206, 86, 32, 6, 1, 203, 89, 32, 6, 1, 200, 28, 32, 6, 1, 212, 246,
-    32, 6, 1, 245, 75, 32, 6, 1, 211, 238, 32, 6, 1, 214, 124, 32, 6, 1, 226,
-    8, 3, 239, 143, 32, 6, 1, 200, 29, 3, 239, 143, 32, 4, 1, 251, 135, 3,
-    201, 248, 32, 4, 1, 236, 175, 3, 201, 248, 32, 4, 1, 236, 127, 3, 201,
-    248, 32, 4, 1, 226, 8, 3, 201, 248, 32, 4, 1, 200, 29, 3, 239, 144, 26,
-    201, 248, 32, 4, 1, 251, 134, 32, 4, 1, 248, 206, 32, 4, 1, 234, 94, 32,
-    4, 1, 239, 212, 32, 4, 1, 236, 174, 32, 4, 1, 195, 78, 32, 4, 1, 236,
-    126, 32, 4, 1, 202, 199, 32, 4, 1, 226, 7, 32, 4, 1, 225, 2, 32, 4, 1,
-    222, 245, 32, 4, 1, 218, 145, 32, 4, 1, 215, 186, 32, 4, 1, 196, 196, 32,
-    4, 1, 214, 122, 32, 4, 1, 212, 220, 32, 4, 1, 210, 74, 32, 4, 1, 48, 206,
-    86, 32, 4, 1, 206, 86, 32, 4, 1, 203, 89, 32, 4, 1, 200, 28, 32, 4, 1,
-    212, 246, 32, 4, 1, 245, 75, 32, 4, 1, 211, 238, 32, 4, 1, 214, 124, 32,
-    4, 1, 226, 8, 3, 239, 143, 32, 4, 1, 200, 29, 3, 239, 143, 32, 4, 1, 214,
-    123, 3, 201, 248, 32, 4, 1, 200, 29, 3, 201, 248, 32, 4, 1, 214, 125, 3,
-    201, 248, 32, 6, 225, 32, 105, 32, 248, 207, 105, 32, 202, 200, 105, 32,
-    200, 29, 3, 231, 165, 105, 32, 200, 29, 3, 252, 10, 26, 231, 165, 105,
-    32, 200, 29, 3, 239, 151, 26, 231, 165, 105, 32, 212, 247, 105, 32, 212,
-    221, 105, 32, 225, 32, 105, 32, 1, 250, 251, 223, 236, 32, 4, 1, 250,
-    251, 223, 236, 32, 1, 204, 236, 32, 4, 1, 204, 236, 32, 1, 239, 118, 32,
-    4, 1, 239, 118, 32, 1, 223, 236, 32, 4, 1, 223, 236, 32, 1, 208, 222, 32,
-    4, 1, 208, 222, 88, 6, 1, 206, 247, 88, 4, 1, 206, 247, 88, 6, 1, 235,
-    174, 88, 4, 1, 235, 174, 88, 6, 1, 224, 129, 88, 4, 1, 224, 129, 88, 6,
-    1, 231, 156, 88, 4, 1, 231, 156, 88, 6, 1, 234, 89, 88, 4, 1, 234, 89,
-    88, 6, 1, 206, 213, 88, 4, 1, 206, 213, 88, 6, 1, 239, 228, 88, 4, 1,
-    239, 228, 32, 225, 3, 105, 32, 210, 75, 105, 32, 221, 173, 206, 87, 105,
-    32, 1, 195, 232, 32, 6, 202, 200, 105, 32, 221, 173, 236, 175, 105, 32,
-    210, 89, 221, 173, 236, 175, 105, 32, 6, 1, 206, 198, 32, 4, 1, 206, 198,
-    32, 6, 221, 173, 206, 87, 105, 32, 6, 1, 208, 219, 32, 4, 1, 208, 219,
-    32, 210, 75, 3, 204, 196, 105, 32, 6, 210, 89, 221, 173, 206, 87, 105,
-    32, 6, 237, 250, 221, 173, 206, 87, 105, 32, 6, 210, 89, 237, 250, 221,
-    173, 206, 87, 105, 40, 6, 1, 226, 148, 3, 233, 100, 40, 6, 1, 226, 12,
-    40, 6, 1, 239, 46, 40, 6, 1, 233, 161, 40, 6, 1, 200, 84, 226, 147, 40,
-    6, 1, 237, 153, 40, 6, 1, 247, 217, 68, 40, 6, 1, 196, 24, 40, 6, 1, 225,
-    193, 40, 6, 1, 222, 40, 40, 6, 1, 216, 157, 40, 6, 1, 201, 101, 40, 6, 1,
-    224, 38, 40, 6, 1, 230, 249, 3, 233, 100, 40, 6, 1, 206, 182, 66, 40, 6,
-    1, 237, 149, 40, 6, 1, 63, 40, 6, 1, 249, 9, 40, 6, 1, 199, 118, 40, 6,
-    1, 233, 216, 40, 6, 1, 239, 252, 40, 6, 1, 226, 147, 40, 6, 1, 195, 65,
-    40, 6, 1, 195, 88, 40, 6, 1, 68, 40, 6, 1, 206, 182, 68, 40, 6, 1, 155,
-    40, 6, 1, 237, 7, 40, 6, 1, 236, 241, 40, 6, 1, 236, 230, 40, 6, 1, 72,
-    40, 6, 1, 213, 92, 40, 6, 1, 236, 163, 40, 6, 1, 236, 151, 40, 6, 1, 203,
-    68, 40, 6, 1, 66, 40, 6, 1, 237, 47, 40, 6, 1, 142, 40, 6, 1, 201, 107,
-    40, 6, 1, 245, 103, 40, 6, 1, 207, 50, 40, 6, 1, 207, 2, 40, 6, 1, 232,
-    173, 55, 40, 6, 1, 196, 47, 40, 6, 1, 205, 186, 55, 40, 6, 1, 69, 40, 6,
-    1, 195, 217, 40, 6, 1, 164, 40, 4, 1, 63, 40, 4, 1, 249, 9, 40, 4, 1,
-    199, 118, 40, 4, 1, 233, 216, 40, 4, 1, 239, 252, 40, 4, 1, 226, 147, 40,
-    4, 1, 195, 65, 40, 4, 1, 195, 88, 40, 4, 1, 68, 40, 4, 1, 206, 182, 68,
-    40, 4, 1, 155, 40, 4, 1, 237, 7, 40, 4, 1, 236, 241, 40, 4, 1, 236, 230,
-    40, 4, 1, 72, 40, 4, 1, 213, 92, 40, 4, 1, 236, 163, 40, 4, 1, 236, 151,
-    40, 4, 1, 203, 68, 40, 4, 1, 66, 40, 4, 1, 237, 47, 40, 4, 1, 142, 40, 4,
-    1, 201, 107, 40, 4, 1, 245, 103, 40, 4, 1, 207, 50, 40, 4, 1, 207, 2, 40,
-    4, 1, 232, 173, 55, 40, 4, 1, 196, 47, 40, 4, 1, 205, 186, 55, 40, 4, 1,
-    69, 40, 4, 1, 195, 217, 40, 4, 1, 164, 40, 4, 1, 226, 148, 3, 233, 100,
-    40, 4, 1, 226, 12, 40, 4, 1, 239, 46, 40, 4, 1, 233, 161, 40, 4, 1, 200,
-    84, 226, 147, 40, 4, 1, 237, 153, 40, 4, 1, 247, 217, 68, 40, 4, 1, 196,
-    24, 40, 4, 1, 225, 193, 40, 4, 1, 222, 40, 40, 4, 1, 216, 157, 40, 4, 1,
-    201, 101, 40, 4, 1, 224, 38, 40, 4, 1, 230, 249, 3, 233, 100, 40, 4, 1,
-    206, 182, 66, 40, 4, 1, 237, 149, 40, 6, 1, 214, 124, 40, 4, 1, 214, 124,
-    40, 6, 1, 196, 84, 40, 4, 1, 196, 84, 40, 6, 1, 226, 5, 69, 40, 4, 1,
-    226, 5, 69, 40, 6, 1, 222, 47, 195, 182, 40, 4, 1, 222, 47, 195, 182, 40,
-    6, 1, 226, 5, 222, 47, 195, 182, 40, 4, 1, 226, 5, 222, 47, 195, 182, 40,
-    6, 1, 248, 171, 195, 182, 40, 4, 1, 248, 171, 195, 182, 40, 6, 1, 226, 5,
-    248, 171, 195, 182, 40, 4, 1, 226, 5, 248, 171, 195, 182, 40, 6, 1, 223,
-    203, 40, 4, 1, 223, 203, 40, 6, 1, 211, 238, 40, 4, 1, 211, 238, 40, 6,
-    1, 235, 103, 40, 4, 1, 235, 103, 40, 6, 1, 225, 219, 40, 4, 1, 225, 219,
-    40, 6, 1, 225, 220, 3, 52, 233, 101, 252, 22, 40, 4, 1, 225, 220, 3, 52,
-    233, 101, 252, 22, 40, 6, 1, 200, 87, 40, 4, 1, 200, 87, 40, 6, 1, 209,
-    187, 214, 124, 40, 4, 1, 209, 187, 214, 124, 40, 6, 1, 214, 125, 3, 202,
-    54, 40, 4, 1, 214, 125, 3, 202, 54, 40, 6, 1, 214, 49, 40, 4, 1, 214, 49,
-    40, 6, 1, 223, 236, 40, 4, 1, 223, 236, 40, 202, 158, 55, 38, 40, 202,
-    54, 38, 40, 213, 214, 38, 40, 240, 63, 212, 119, 38, 40, 211, 232, 212,
-    119, 38, 40, 212, 103, 38, 40, 231, 58, 202, 158, 55, 38, 40, 219, 27,
-    55, 40, 6, 1, 206, 182, 230, 249, 3, 203, 135, 40, 4, 1, 206, 182, 230,
-    249, 3, 203, 135, 40, 6, 1, 207, 101, 55, 40, 4, 1, 207, 101, 55, 40, 6,
-    1, 236, 164, 3, 202, 111, 40, 4, 1, 236, 164, 3, 202, 111, 40, 6, 1, 233,
-    217, 3, 200, 27, 40, 4, 1, 233, 217, 3, 200, 27, 40, 6, 1, 233, 217, 3,
-    106, 40, 4, 1, 233, 217, 3, 106, 40, 6, 1, 233, 217, 3, 112, 122, 40, 4,
-    1, 233, 217, 3, 112, 122, 40, 6, 1, 195, 66, 3, 239, 195, 40, 4, 1, 195,
-    66, 3, 239, 195, 40, 6, 1, 195, 89, 3, 239, 195, 40, 4, 1, 195, 89, 3,
-    239, 195, 40, 6, 1, 225, 70, 3, 239, 195, 40, 4, 1, 225, 70, 3, 239, 195,
-    40, 6, 1, 225, 70, 3, 83, 106, 40, 4, 1, 225, 70, 3, 83, 106, 40, 6, 1,
-    225, 70, 3, 106, 40, 4, 1, 225, 70, 3, 106, 40, 6, 1, 249, 62, 155, 40,
-    4, 1, 249, 62, 155, 40, 6, 1, 236, 231, 3, 239, 195, 40, 4, 1, 236, 231,
-    3, 239, 195, 40, 6, 33, 236, 231, 233, 216, 40, 4, 33, 236, 231, 233,
-    216, 40, 6, 1, 213, 93, 3, 112, 122, 40, 4, 1, 213, 93, 3, 112, 122, 40,
-    6, 1, 252, 29, 142, 40, 4, 1, 252, 29, 142, 40, 6, 1, 236, 152, 3, 239,
-    195, 40, 4, 1, 236, 152, 3, 239, 195, 40, 6, 1, 203, 69, 3, 239, 195, 40,
-    4, 1, 203, 69, 3, 239, 195, 40, 6, 1, 204, 218, 66, 40, 4, 1, 204, 218,
-    66, 40, 6, 1, 204, 218, 118, 3, 106, 40, 4, 1, 204, 218, 118, 3, 106, 40,
-    6, 1, 233, 4, 3, 239, 195, 40, 4, 1, 233, 4, 3, 239, 195, 40, 6, 33, 203,
-    69, 201, 107, 40, 4, 33, 203, 69, 201, 107, 40, 6, 1, 245, 104, 3, 239,
-    195, 40, 4, 1, 245, 104, 3, 239, 195, 40, 6, 1, 245, 104, 3, 83, 106, 40,
-    4, 1, 245, 104, 3, 83, 106, 40, 6, 1, 206, 224, 40, 4, 1, 206, 224, 40,
-    6, 1, 252, 29, 245, 103, 40, 4, 1, 252, 29, 245, 103, 40, 6, 1, 252, 29,
-    245, 104, 3, 239, 195, 40, 4, 1, 252, 29, 245, 104, 3, 239, 195, 40, 1,
-    213, 203, 40, 6, 1, 195, 66, 3, 248, 47, 40, 4, 1, 195, 66, 3, 248, 47,
-    40, 6, 1, 225, 70, 3, 122, 40, 4, 1, 225, 70, 3, 122, 40, 6, 1, 237, 8,
-    3, 203, 135, 40, 4, 1, 237, 8, 3, 203, 135, 40, 6, 1, 236, 231, 3, 122,
-    40, 4, 1, 236, 231, 3, 122, 40, 6, 1, 236, 231, 3, 203, 135, 40, 4, 1,
-    236, 231, 3, 203, 135, 40, 6, 1, 224, 140, 245, 103, 40, 4, 1, 224, 140,
-    245, 103, 40, 6, 1, 236, 242, 3, 203, 135, 40, 4, 1, 236, 242, 3, 203,
-    135, 40, 4, 1, 213, 203, 40, 6, 1, 39, 3, 248, 47, 40, 4, 1, 39, 3, 248,
-    47, 40, 6, 1, 39, 3, 239, 150, 40, 4, 1, 39, 3, 239, 150, 40, 6, 33, 39,
-    226, 147, 40, 4, 33, 39, 226, 147, 40, 6, 1, 226, 148, 3, 248, 47, 40, 4,
-    1, 226, 148, 3, 248, 47, 40, 6, 1, 208, 163, 40, 4, 1, 208, 163, 40, 6,
-    1, 208, 164, 3, 239, 150, 40, 4, 1, 208, 164, 3, 239, 150, 40, 6, 1, 195,
-    66, 3, 239, 150, 40, 4, 1, 195, 66, 3, 239, 150, 40, 6, 1, 195, 89, 3,
-    239, 150, 40, 4, 1, 195, 89, 3, 239, 150, 40, 6, 1, 252, 29, 237, 153,
-    40, 4, 1, 252, 29, 237, 153, 40, 6, 1, 230, 249, 3, 220, 114, 40, 4, 1,
-    230, 249, 3, 220, 114, 40, 6, 1, 230, 249, 3, 239, 150, 40, 4, 1, 230,
-    249, 3, 239, 150, 40, 6, 1, 177, 3, 239, 150, 40, 4, 1, 177, 3, 239, 150,
-    40, 6, 1, 249, 74, 72, 40, 4, 1, 249, 74, 72, 40, 6, 1, 249, 74, 177, 3,
-    239, 150, 40, 4, 1, 249, 74, 177, 3, 239, 150, 40, 6, 1, 237, 136, 3,
-    239, 150, 40, 4, 1, 237, 136, 3, 239, 150, 40, 6, 1, 118, 3, 220, 114,
-    40, 4, 1, 118, 3, 220, 114, 40, 6, 1, 118, 3, 239, 150, 40, 4, 1, 118, 3,
-    239, 150, 40, 6, 1, 118, 3, 52, 186, 40, 4, 1, 118, 3, 52, 186, 40, 6, 1,
-    245, 104, 3, 239, 150, 40, 4, 1, 245, 104, 3, 239, 150, 40, 6, 1, 233,
-    217, 3, 239, 195, 40, 4, 1, 233, 217, 3, 239, 195, 40, 6, 1, 196, 48, 3,
-    239, 150, 40, 4, 1, 196, 48, 3, 239, 150, 40, 6, 1, 233, 217, 3, 204,
-    196, 26, 122, 40, 4, 1, 233, 217, 3, 204, 196, 26, 122, 40, 6, 1, 233, 4,
-    3, 122, 40, 4, 1, 233, 4, 3, 122, 40, 6, 1, 233, 4, 3, 106, 40, 4, 1,
-    233, 4, 3, 106, 40, 6, 1, 223, 246, 239, 252, 40, 4, 1, 223, 246, 239,
-    252, 40, 6, 1, 223, 246, 239, 46, 40, 4, 1, 223, 246, 239, 46, 40, 6, 1,
-    223, 246, 195, 15, 40, 4, 1, 223, 246, 195, 15, 40, 6, 1, 223, 246, 237,
-    145, 40, 4, 1, 223, 246, 237, 145, 40, 6, 1, 223, 246, 222, 40, 40, 4, 1,
-    223, 246, 222, 40, 40, 6, 1, 223, 246, 216, 157, 40, 4, 1, 223, 246, 216,
-    157, 40, 6, 1, 223, 246, 206, 8, 40, 4, 1, 223, 246, 206, 8, 40, 6, 1,
-    223, 246, 202, 48, 40, 4, 1, 223, 246, 202, 48, 40, 6, 1, 210, 89, 195,
-    88, 40, 4, 1, 210, 89, 195, 88, 40, 6, 1, 237, 8, 3, 122, 40, 4, 1, 237,
-    8, 3, 122, 40, 6, 1, 222, 122, 40, 4, 1, 222, 122, 40, 6, 1, 210, 77, 40,
-    4, 1, 210, 77, 40, 6, 1, 196, 118, 40, 4, 1, 196, 118, 40, 6, 1, 211,
-    159, 40, 4, 1, 211, 159, 40, 6, 1, 197, 109, 40, 4, 1, 197, 109, 40, 6,
-    1, 251, 160, 155, 40, 4, 1, 251, 160, 155, 40, 6, 1, 237, 8, 3, 112, 122,
-    40, 4, 1, 237, 8, 3, 112, 122, 40, 6, 1, 236, 231, 3, 112, 122, 40, 4, 1,
-    236, 231, 3, 112, 122, 40, 6, 1, 213, 93, 3, 239, 195, 40, 4, 1, 213, 93,
-    3, 239, 195, 40, 6, 1, 206, 225, 3, 239, 195, 40, 4, 1, 206, 225, 3, 239,
-    195, 40, 6, 1, 236, 231, 3, 50, 122, 40, 4, 1, 236, 231, 3, 50, 122, 40,
-    6, 1, 237, 137, 40, 4, 1, 237, 137, 40, 6, 1, 240, 45, 40, 4, 1, 240, 45,
-    40, 6, 1, 237, 8, 3, 239, 195, 40, 4, 1, 237, 8, 3, 239, 195, 250, 230,
-    6, 1, 250, 119, 250, 230, 6, 1, 248, 223, 250, 230, 6, 1, 233, 179, 250,
-    230, 6, 1, 240, 136, 250, 230, 6, 1, 237, 60, 250, 230, 6, 1, 195, 115,
-    250, 230, 6, 1, 237, 40, 250, 230, 6, 1, 236, 128, 250, 230, 6, 1, 149,
-    250, 230, 6, 1, 195, 65, 250, 230, 6, 1, 226, 55, 250, 230, 6, 1, 222,
-    44, 250, 230, 6, 1, 196, 200, 250, 230, 6, 1, 247, 174, 250, 230, 6, 1,
-    224, 182, 250, 230, 6, 1, 231, 193, 250, 230, 6, 1, 225, 214, 250, 230,
-    6, 1, 233, 227, 250, 230, 6, 1, 245, 93, 250, 230, 6, 1, 219, 164, 250,
-    230, 6, 1, 196, 24, 250, 230, 6, 1, 216, 4, 250, 230, 6, 1, 207, 50, 250,
-    230, 6, 1, 198, 248, 250, 230, 6, 1, 247, 16, 250, 230, 6, 1, 213, 72,
-    250, 230, 6, 1, 225, 175, 250, 230, 6, 1, 169, 250, 230, 6, 1, 208, 119,
-    250, 230, 6, 1, 199, 39, 250, 230, 6, 1, 202, 51, 250, 230, 6, 1, 210,
-    142, 250, 230, 6, 1, 244, 182, 250, 230, 6, 1, 196, 8, 250, 230, 6, 1,
-    212, 154, 250, 230, 6, 1, 224, 193, 250, 230, 6, 1, 214, 149, 250, 230,
-    6, 1, 235, 176, 250, 230, 73, 1, 50, 157, 210, 2, 250, 230, 251, 30, 250,
-    230, 236, 234, 78, 250, 230, 236, 90, 78, 250, 230, 244, 159, 250, 230,
-    211, 79, 78, 250, 230, 252, 30, 78, 250, 230, 4, 1, 163, 250, 119, 250,
-    230, 4, 1, 250, 119, 250, 230, 4, 1, 248, 223, 250, 230, 4, 1, 233, 179,
-    250, 230, 4, 1, 240, 136, 250, 230, 4, 1, 237, 60, 250, 230, 4, 1, 195,
-    115, 250, 230, 4, 1, 237, 40, 250, 230, 4, 1, 236, 128, 250, 230, 4, 1,
-    149, 250, 230, 4, 1, 195, 65, 250, 230, 4, 1, 226, 55, 250, 230, 4, 1,
-    222, 44, 250, 230, 4, 1, 196, 200, 250, 230, 4, 1, 247, 174, 250, 230, 4,
-    1, 224, 182, 250, 230, 4, 1, 231, 193, 250, 230, 4, 1, 225, 214, 250,
-    230, 4, 1, 233, 227, 250, 230, 4, 1, 245, 93, 250, 230, 4, 1, 219, 164,
-    250, 230, 4, 1, 196, 24, 250, 230, 4, 1, 216, 4, 250, 230, 4, 1, 207, 50,
-    250, 230, 4, 1, 198, 248, 250, 230, 4, 1, 247, 16, 250, 230, 4, 1, 213,
-    72, 250, 230, 4, 1, 225, 175, 250, 230, 4, 1, 169, 250, 230, 4, 1, 208,
-    119, 250, 230, 4, 1, 199, 39, 250, 230, 4, 1, 202, 51, 250, 230, 4, 1,
-    210, 142, 250, 230, 4, 1, 244, 182, 250, 230, 4, 1, 196, 8, 250, 230, 4,
-    1, 212, 154, 250, 230, 4, 1, 224, 193, 250, 230, 4, 1, 214, 149, 250,
-    230, 4, 1, 235, 176, 250, 230, 4, 33, 237, 61, 196, 8, 250, 230, 4, 1,
-    11, 3, 106, 250, 230, 234, 217, 204, 226, 250, 230, 231, 7, 210, 21, 250,
-    230, 236, 124, 55, 222, 183, 250, 230, 236, 124, 55, 250, 230, 237, 222,
-    55, 123, 252, 23, 236, 119, 123, 252, 23, 208, 120, 123, 252, 23, 207,
-    27, 123, 252, 23, 195, 100, 211, 142, 123, 252, 23, 195, 100, 234, 113,
-    123, 252, 23, 202, 66, 123, 252, 23, 210, 86, 123, 252, 23, 195, 98, 123,
-    252, 23, 213, 124, 123, 252, 23, 196, 37, 123, 252, 23, 202, 240, 123,
-    252, 23, 234, 22, 123, 252, 23, 234, 23, 218, 102, 123, 252, 23, 234, 20,
-    123, 252, 23, 211, 143, 213, 156, 123, 252, 23, 203, 30, 234, 41, 123,
-    252, 23, 213, 98, 123, 252, 23, 250, 159, 232, 240, 123, 252, 23, 218,
-    112, 123, 252, 23, 220, 86, 123, 252, 23, 219, 153, 123, 252, 23, 219,
-    154, 224, 194, 123, 252, 23, 240, 72, 123, 252, 23, 211, 154, 123, 252,
-    23, 203, 30, 211, 137, 123, 252, 23, 196, 50, 248, 224, 195, 238, 123,
-    252, 23, 214, 131, 123, 252, 23, 226, 106, 123, 252, 23, 239, 229, 123,
-    252, 23, 195, 22, 123, 117, 220, 8, 244, 249, 123, 212, 111, 206, 227,
-    123, 212, 111, 232, 164, 208, 120, 123, 212, 111, 232, 164, 213, 115,
-    123, 212, 111, 232, 164, 211, 147, 123, 212, 111, 232, 33, 123, 212, 111,
-    201, 104, 123, 212, 111, 208, 120, 123, 212, 111, 213, 115, 123, 212,
-    111, 211, 147, 123, 212, 111, 231, 177, 123, 212, 111, 231, 178, 232,
-    166, 36, 199, 122, 123, 212, 111, 211, 83, 123, 212, 111, 240, 121, 214,
-    73, 220, 42, 123, 212, 111, 219, 142, 123, 211, 214, 220, 39, 123, 212,
-    111, 210, 227, 123, 211, 214, 213, 126, 123, 212, 111, 206, 212, 238,
-    253, 123, 212, 111, 206, 66, 238, 253, 123, 211, 214, 205, 187, 213, 117,
-    123, 117, 200, 33, 238, 253, 123, 117, 221, 203, 238, 253, 123, 211, 214,
-    215, 139, 232, 239, 123, 212, 111, 211, 148, 211, 142, 123, 1, 251, 164,
-    123, 1, 248, 208, 123, 1, 233, 177, 123, 1, 240, 101, 123, 1, 232, 147,
-    123, 1, 199, 122, 123, 1, 195, 92, 123, 1, 232, 89, 123, 1, 203, 1, 123,
-    1, 195, 241, 123, 1, 48, 225, 35, 123, 1, 225, 35, 123, 1, 222, 241, 123,
-    1, 48, 219, 171, 123, 1, 219, 171, 123, 1, 48, 215, 138, 123, 1, 215,
-    138, 123, 1, 208, 225, 123, 1, 250, 117, 123, 1, 48, 213, 92, 123, 1,
-    213, 92, 123, 1, 48, 201, 108, 123, 1, 201, 108, 123, 1, 211, 106, 123,
-    1, 210, 109, 123, 1, 206, 211, 123, 1, 203, 85, 123, 195, 242, 201, 180,
-    123, 33, 196, 22, 52, 199, 122, 123, 33, 196, 22, 199, 123, 195, 241,
-    123, 33, 196, 22, 52, 195, 241, 123, 211, 214, 234, 22, 123, 211, 214,
-    234, 20, 9, 31, 55, 9, 2, 208, 218, 9, 235, 35, 220, 24, 9, 2, 209, 3, 9,
-    2, 208, 221, 9, 31, 117, 57, 251, 9, 241, 37, 209, 200, 251, 9, 235, 0,
-    209, 200, 9, 210, 191, 251, 9, 213, 46, 219, 29, 55, 251, 9, 213, 46,
-    203, 24, 202, 159, 55, 251, 222, 55, 9, 244, 159, 9, 240, 59, 207, 90, 9,
-    212, 113, 199, 102, 55, 9, 2, 219, 8, 9, 2, 208, 235, 251, 167, 197, 133,
-    9, 2, 251, 167, 250, 184, 9, 2, 210, 225, 251, 166, 9, 2, 210, 233, 251,
-    144, 251, 82, 9, 2, 203, 126, 9, 4, 130, 203, 139, 9, 4, 130, 33, 151, 3,
-    222, 250, 3, 196, 64, 9, 4, 130, 195, 106, 9, 4, 235, 200, 9, 4, 240, 95,
-    9, 4, 224, 238, 9, 207, 105, 9, 1, 78, 9, 201, 165, 76, 211, 214, 78, 9,
-    211, 79, 78, 9, 1, 224, 242, 196, 64, 9, 1, 232, 213, 9, 1, 151, 3, 220,
-    110, 57, 9, 1, 151, 3, 232, 214, 57, 9, 1, 197, 118, 3, 232, 214, 57, 9,
-    1, 151, 3, 232, 214, 60, 9, 1, 93, 3, 232, 214, 57, 9, 1, 251, 164, 9, 1,
-    248, 239, 9, 1, 203, 42, 220, 35, 9, 1, 203, 41, 9, 1, 202, 213, 9, 1,
-    225, 189, 9, 1, 232, 236, 9, 1, 224, 142, 9, 1, 240, 107, 9, 1, 202, 225,
-    9, 1, 210, 142, 9, 1, 195, 106, 9, 1, 208, 125, 9, 1, 206, 251, 9, 1,
-    209, 8, 9, 1, 240, 130, 9, 1, 203, 139, 9, 1, 195, 109, 9, 1, 251, 194,
-    9, 1, 233, 225, 9, 1, 224, 192, 3, 99, 238, 251, 57, 9, 1, 224, 192, 3,
-    115, 238, 251, 60, 9, 1, 235, 204, 93, 3, 226, 17, 199, 230, 9, 1, 235,
-    204, 93, 3, 99, 238, 251, 57, 9, 1, 235, 204, 93, 3, 115, 238, 251, 57,
-    9, 203, 91, 9, 1, 235, 176, 9, 1, 211, 152, 9, 1, 225, 35, 9, 1, 222,
-    249, 9, 1, 219, 185, 9, 1, 216, 31, 9, 1, 232, 113, 9, 1, 197, 117, 9, 1,
-    151, 220, 69, 9, 1, 196, 64, 9, 235, 198, 9, 240, 93, 9, 224, 236, 9,
-    235, 200, 9, 240, 95, 9, 224, 238, 9, 207, 40, 9, 204, 119, 9, 220, 108,
-    57, 9, 232, 214, 57, 9, 232, 214, 60, 9, 204, 143, 251, 164, 9, 226, 17,
-    240, 95, 9, 117, 216, 32, 233, 196, 9, 194, 241, 9, 18, 2, 4, 199, 231,
-    57, 9, 18, 2, 226, 17, 4, 199, 231, 57, 9, 18, 2, 76, 60, 9, 210, 89,
-    240, 95, 9, 235, 201, 3, 99, 238, 250, 9, 197, 119, 232, 214, 60, 251, 9,
-    17, 195, 79, 251, 9, 17, 100, 251, 9, 17, 102, 251, 9, 17, 134, 251, 9,
-    17, 136, 251, 9, 17, 146, 251, 9, 17, 167, 251, 9, 17, 178, 251, 9, 17,
-    171, 251, 9, 17, 182, 9, 213, 45, 55, 9, 239, 244, 207, 90, 9, 202, 158,
-    207, 90, 9, 235, 101, 212, 109, 205, 7, 9, 1, 238, 252, 248, 239, 9, 1,
-    238, 252, 211, 152, 9, 1, 204, 95, 251, 164, 9, 1, 151, 197, 134, 9, 1,
-    151, 3, 197, 119, 232, 214, 57, 9, 1, 151, 3, 197, 119, 232, 214, 60, 9,
-    1, 130, 232, 213, 9, 1, 130, 232, 214, 251, 164, 9, 1, 130, 232, 214,
-    197, 117, 9, 1, 118, 3, 232, 214, 57, 9, 1, 130, 232, 214, 196, 64, 9, 1,
-    201, 70, 9, 1, 201, 68, 9, 1, 248, 249, 9, 1, 203, 42, 3, 210, 2, 9, 1,
-    203, 42, 3, 115, 238, 251, 90, 237, 230, 9, 1, 213, 72, 9, 1, 203, 39, 9,
-    1, 248, 237, 9, 1, 168, 3, 232, 214, 57, 9, 1, 168, 3, 99, 238, 251, 83,
-    57, 9, 1, 215, 95, 9, 1, 237, 162, 9, 1, 168, 3, 115, 238, 251, 57, 9, 1,
-    203, 72, 9, 1, 203, 70, 9, 1, 240, 36, 9, 1, 240, 108, 3, 210, 2, 9, 1,
-    240, 108, 3, 76, 60, 9, 1, 240, 108, 3, 76, 248, 227, 26, 4, 203, 139, 9,
-    1, 240, 114, 9, 1, 240, 38, 9, 1, 237, 191, 9, 1, 240, 108, 3, 115, 238,
-    251, 90, 237, 230, 9, 1, 240, 108, 3, 235, 7, 238, 251, 57, 9, 1, 209,
-    173, 9, 1, 210, 143, 3, 4, 199, 230, 9, 1, 210, 143, 3, 210, 2, 9, 1,
-    210, 143, 3, 76, 60, 9, 1, 210, 143, 3, 4, 199, 231, 60, 9, 1, 210, 143,
-    3, 76, 248, 227, 26, 76, 57, 9, 1, 210, 143, 3, 99, 238, 251, 57, 9, 1,
-    225, 186, 9, 1, 210, 143, 3, 235, 7, 238, 251, 57, 9, 1, 208, 126, 3, 76,
-    248, 227, 26, 76, 57, 9, 1, 208, 126, 3, 115, 238, 251, 60, 9, 1, 208,
-    126, 3, 115, 238, 251, 248, 227, 26, 115, 238, 251, 57, 9, 1, 209, 9, 3,
-    99, 238, 251, 60, 9, 1, 209, 9, 3, 115, 238, 251, 57, 9, 1, 203, 140, 3,
-    115, 238, 251, 57, 9, 1, 251, 195, 3, 115, 238, 251, 57, 9, 1, 238, 252,
-    235, 176, 9, 1, 235, 177, 3, 76, 218, 162, 60, 9, 1, 235, 177, 3, 76, 60,
-    9, 1, 199, 111, 9, 1, 235, 177, 3, 115, 238, 251, 60, 9, 1, 213, 70, 9,
-    1, 211, 153, 3, 76, 57, 9, 1, 211, 153, 3, 115, 238, 251, 57, 9, 1, 224,
-    191, 9, 1, 204, 63, 225, 35, 9, 1, 225, 36, 3, 210, 2, 9, 1, 225, 36, 3,
-    76, 57, 9, 1, 217, 73, 9, 1, 225, 36, 3, 115, 238, 251, 60, 9, 1, 234,
-    110, 9, 1, 234, 111, 3, 210, 2, 9, 1, 216, 250, 9, 1, 234, 111, 3, 99,
-    238, 251, 60, 9, 1, 233, 63, 9, 1, 234, 111, 3, 115, 238, 251, 57, 9, 1,
-    222, 250, 3, 4, 199, 230, 9, 1, 222, 250, 3, 76, 57, 9, 1, 222, 250, 3,
-    115, 238, 251, 57, 9, 1, 222, 250, 3, 115, 238, 251, 60, 9, 1, 216, 32,
-    3, 76, 60, 9, 1, 216, 32, 233, 196, 9, 1, 209, 235, 9, 1, 216, 32, 3,
-    210, 2, 9, 1, 216, 32, 3, 115, 238, 251, 57, 9, 1, 232, 114, 239, 24, 9,
-    1, 203, 73, 3, 76, 57, 9, 1, 232, 114, 3, 93, 57, 9, 1, 232, 114, 233,
-    141, 9, 1, 232, 114, 233, 142, 3, 232, 214, 57, 9, 1, 203, 42, 220, 36,
-    233, 141, 9, 1, 197, 118, 3, 210, 2, 9, 1, 224, 67, 214, 164, 9, 1, 214,
-    164, 9, 1, 66, 9, 1, 195, 217, 9, 1, 224, 67, 195, 217, 9, 1, 197, 118,
-    3, 99, 238, 251, 57, 9, 1, 199, 118, 9, 1, 235, 204, 196, 64, 9, 1, 93,
-    3, 203, 135, 9, 1, 93, 3, 4, 199, 230, 9, 1, 197, 118, 3, 76, 57, 9, 1,
-    69, 9, 1, 93, 3, 115, 238, 251, 60, 9, 1, 93, 249, 72, 9, 1, 93, 249, 73,
-    3, 232, 214, 57, 9, 234, 217, 204, 226, 9, 1, 251, 245, 9, 4, 130, 33,
-    209, 9, 3, 222, 250, 3, 151, 220, 69, 9, 4, 130, 33, 211, 153, 3, 222,
-    250, 3, 151, 220, 69, 9, 4, 130, 87, 84, 20, 9, 4, 130, 222, 250, 251,
-    164, 9, 4, 130, 225, 189, 9, 4, 130, 115, 238, 250, 9, 4, 130, 208, 125,
-    9, 236, 222, 77, 250, 121, 9, 205, 3, 77, 209, 132, 237, 8, 232, 28, 9,
-    4, 130, 209, 185, 195, 79, 9, 4, 130, 200, 31, 210, 162, 195, 79, 9, 4,
-    130, 238, 252, 232, 138, 77, 224, 142, 9, 4, 130, 87, 70, 20, 9, 4, 126,
-    208, 125, 9, 4, 130, 220, 109, 9, 4, 197, 117, 9, 4, 196, 64, 9, 4, 130,
-    196, 64, 9, 4, 130, 216, 31, 9, 212, 149, 77, 208, 249, 9, 236, 232, 247,
-    37, 126, 204, 226, 9, 236, 232, 247, 37, 130, 204, 226, 9, 209, 185, 130,
-    204, 227, 3, 235, 135, 247, 36, 9, 4, 126, 219, 185, 9, 1, 240, 108, 3,
-    226, 17, 199, 230, 9, 1, 210, 143, 3, 226, 17, 199, 230, 236, 79, 251, 9,
-    17, 195, 79, 236, 79, 251, 9, 17, 100, 236, 79, 251, 9, 17, 102, 236, 79,
-    251, 9, 17, 134, 236, 79, 251, 9, 17, 136, 236, 79, 251, 9, 17, 146, 236,
-    79, 251, 9, 17, 167, 236, 79, 251, 9, 17, 178, 236, 79, 251, 9, 17, 171,
-    236, 79, 251, 9, 17, 182, 9, 1, 206, 252, 3, 76, 60, 9, 1, 240, 131, 3,
-    76, 60, 9, 1, 233, 226, 3, 76, 60, 9, 2, 206, 65, 251, 111, 9, 2, 206,
-    65, 212, 70, 219, 164, 9, 1, 232, 114, 3, 226, 17, 199, 230, 203, 236,
-    236, 222, 77, 213, 153, 203, 236, 204, 90, 234, 217, 204, 226, 203, 236,
-    204, 145, 234, 217, 204, 226, 203, 236, 204, 90, 244, 168, 203, 236, 204,
-    145, 244, 168, 203, 236, 231, 155, 244, 168, 203, 236, 244, 169, 206, 4,
-    222, 184, 203, 236, 244, 169, 206, 4, 210, 22, 203, 236, 204, 90, 244,
-    169, 206, 4, 222, 184, 203, 236, 204, 145, 244, 169, 206, 4, 210, 22,
-    203, 236, 241, 123, 203, 236, 232, 171, 214, 184, 203, 236, 232, 171,
-    219, 140, 203, 236, 232, 171, 250, 181, 203, 236, 252, 30, 78, 203, 236,
-    1, 251, 169, 203, 236, 1, 204, 95, 251, 169, 203, 236, 1, 248, 205, 203,
-    236, 1, 234, 100, 203, 236, 1, 234, 101, 234, 77, 203, 236, 1, 240, 104,
-    203, 236, 1, 238, 252, 240, 105, 209, 251, 203, 236, 1, 232, 147, 203,
-    236, 1, 197, 117, 203, 236, 1, 195, 106, 203, 236, 1, 232, 87, 203, 236,
-    1, 202, 253, 203, 236, 1, 202, 254, 234, 77, 203, 236, 1, 195, 200, 203,
-    236, 1, 195, 201, 232, 147, 203, 236, 1, 225, 5, 203, 236, 1, 222, 248,
-    203, 236, 1, 219, 25, 203, 236, 1, 215, 138, 203, 236, 1, 207, 98, 203,
-    236, 1, 48, 207, 98, 203, 236, 1, 69, 203, 236, 1, 213, 92, 203, 236, 1,
-    210, 89, 213, 92, 203, 236, 1, 209, 5, 203, 236, 1, 211, 146, 203, 236,
-    1, 209, 251, 203, 236, 1, 206, 211, 203, 236, 1, 203, 82, 203, 236, 1,
-    213, 30, 248, 190, 203, 236, 1, 213, 30, 233, 223, 203, 236, 1, 213, 30,
-    239, 171, 203, 236, 211, 228, 57, 203, 236, 211, 228, 60, 203, 236, 211,
-    228, 237, 249, 203, 236, 195, 4, 57, 203, 236, 195, 4, 60, 203, 236, 195,
-    4, 237, 249, 203, 236, 210, 186, 57, 203, 236, 210, 186, 60, 203, 236,
-    237, 250, 195, 12, 231, 154, 203, 236, 237, 250, 195, 12, 251, 83, 203,
-    236, 232, 152, 57, 203, 236, 232, 152, 60, 203, 236, 232, 151, 237, 249,
-    203, 236, 236, 145, 57, 203, 236, 236, 145, 60, 203, 236, 209, 96, 203,
-    236, 235, 170, 238, 253, 203, 236, 211, 56, 203, 236, 209, 126, 203, 236,
-    99, 83, 238, 251, 57, 203, 236, 99, 83, 238, 251, 60, 203, 236, 115, 238,
-    251, 57, 203, 236, 115, 238, 251, 60, 203, 236, 214, 182, 222, 76, 57,
-    203, 236, 214, 182, 222, 76, 60, 203, 236, 218, 88, 203, 236, 249, 71,
-    203, 236, 1, 205, 182, 195, 72, 203, 236, 1, 205, 182, 224, 135, 203,
-    236, 1, 205, 182, 235, 189, 9, 1, 248, 240, 3, 115, 238, 251, 231, 104,
-    60, 9, 1, 248, 240, 3, 76, 248, 227, 26, 115, 238, 251, 57, 9, 1, 248,
-    240, 3, 115, 238, 251, 212, 107, 200, 24, 60, 9, 1, 248, 240, 3, 115,
-    238, 251, 212, 107, 200, 24, 248, 227, 26, 99, 238, 251, 57, 9, 1, 248,
-    240, 3, 99, 238, 251, 248, 227, 26, 76, 57, 9, 1, 248, 240, 3, 226, 17,
-    4, 199, 231, 60, 9, 1, 248, 240, 3, 4, 199, 230, 9, 1, 168, 3, 99, 238,
-    251, 57, 9, 1, 168, 3, 115, 238, 251, 212, 107, 200, 24, 60, 9, 1, 240,
-    108, 3, 99, 238, 251, 199, 50, 248, 227, 26, 4, 203, 139, 9, 1, 240, 108,
-    3, 226, 17, 4, 199, 231, 60, 9, 1, 210, 143, 3, 106, 9, 1, 208, 126, 3,
-    235, 7, 238, 251, 57, 9, 1, 251, 195, 3, 99, 238, 251, 57, 9, 1, 251,
-    195, 3, 115, 238, 251, 212, 107, 237, 231, 57, 9, 1, 251, 195, 3, 99,
-    238, 251, 199, 50, 57, 9, 1, 235, 177, 3, 99, 238, 251, 60, 9, 1, 235,
-    177, 3, 115, 238, 251, 212, 107, 200, 24, 60, 9, 1, 224, 192, 3, 76, 57,
-    9, 1, 224, 192, 3, 115, 238, 251, 57, 9, 1, 224, 192, 3, 115, 238, 251,
-    212, 107, 200, 24, 60, 9, 1, 87, 3, 76, 57, 9, 1, 87, 3, 76, 60, 9, 1,
-    216, 32, 3, 99, 238, 251, 60, 9, 1, 216, 32, 3, 4, 203, 139, 9, 1, 216,
-    32, 3, 4, 199, 230, 9, 1, 222, 250, 3, 154, 9, 1, 210, 143, 3, 99, 238,
-    251, 199, 50, 57, 9, 1, 210, 143, 3, 232, 214, 57, 9, 1, 208, 126, 3, 99,
-    238, 251, 199, 50, 57, 9, 1, 168, 3, 4, 9, 1, 203, 140, 60, 9, 1, 168, 3,
-    4, 9, 1, 203, 140, 26, 99, 238, 250, 9, 1, 208, 126, 3, 4, 9, 1, 203,
-    140, 26, 99, 238, 250, 9, 1, 210, 143, 3, 4, 9, 1, 203, 140, 26, 99, 238,
-    250, 9, 1, 168, 3, 4, 9, 1, 203, 140, 57, 9, 1, 151, 3, 236, 79, 251, 9,
-    17, 99, 57, 9, 1, 151, 3, 236, 79, 251, 9, 17, 115, 57, 9, 1, 235, 204,
-    93, 3, 236, 79, 251, 9, 17, 99, 57, 9, 1, 235, 204, 93, 3, 236, 79, 251,
-    9, 17, 115, 57, 9, 1, 235, 204, 93, 3, 236, 79, 251, 9, 17, 235, 7, 60,
-    9, 1, 197, 118, 3, 236, 79, 251, 9, 17, 99, 57, 9, 1, 197, 118, 3, 236,
-    79, 251, 9, 17, 115, 57, 9, 1, 93, 249, 73, 3, 236, 79, 251, 9, 17, 99,
-    57, 9, 1, 93, 249, 73, 3, 236, 79, 251, 9, 17, 115, 57, 9, 1, 168, 3,
-    236, 79, 251, 9, 17, 235, 7, 60, 9, 1, 208, 126, 3, 236, 79, 251, 9, 17,
-    235, 7, 57, 9, 1, 208, 126, 3, 226, 17, 199, 230, 9, 1, 225, 36, 3, 99,
-    238, 251, 57, 202, 230, 1, 232, 246, 202, 230, 1, 207, 5, 202, 230, 1,
-    216, 30, 202, 230, 1, 210, 244, 202, 230, 1, 249, 143, 202, 230, 1, 222,
-    119, 202, 230, 1, 225, 50, 202, 230, 1, 251, 151, 202, 230, 1, 199, 150,
-    202, 230, 1, 219, 184, 202, 230, 1, 235, 237, 202, 230, 1, 239, 174, 202,
-    230, 1, 202, 232, 202, 230, 1, 223, 79, 202, 230, 1, 234, 119, 202, 230,
-    1, 233, 147, 202, 230, 1, 208, 124, 202, 230, 1, 240, 57, 202, 230, 1,
-    195, 95, 202, 230, 1, 203, 84, 202, 230, 1, 196, 129, 202, 230, 1, 213,
-    106, 202, 230, 1, 225, 198, 202, 230, 1, 245, 106, 202, 230, 1, 201, 77,
-    202, 230, 1, 232, 79, 202, 230, 1, 224, 145, 202, 230, 1, 202, 231, 202,
-    230, 1, 195, 113, 202, 230, 1, 206, 250, 202, 230, 1, 209, 12, 202, 230,
-    1, 240, 134, 202, 230, 1, 149, 202, 230, 1, 195, 11, 202, 230, 1, 251,
-    191, 202, 230, 1, 233, 224, 202, 230, 1, 211, 156, 202, 230, 1, 197, 159,
-    202, 230, 252, 32, 202, 230, 252, 133, 202, 230, 230, 204, 202, 230, 237,
-    53, 202, 230, 200, 107, 202, 230, 214, 101, 202, 230, 237, 63, 202, 230,
-    236, 69, 202, 230, 214, 181, 202, 230, 214, 189, 202, 230, 204, 119, 202,
-    230, 1, 217, 244, 216, 114, 17, 195, 79, 216, 114, 17, 100, 216, 114, 17,
-    102, 216, 114, 17, 134, 216, 114, 17, 136, 216, 114, 17, 146, 216, 114,
-    17, 167, 216, 114, 17, 178, 216, 114, 17, 171, 216, 114, 17, 182, 216,
-    114, 1, 63, 216, 114, 1, 237, 54, 216, 114, 1, 68, 216, 114, 1, 69, 216,
-    114, 1, 66, 216, 114, 1, 214, 102, 216, 114, 1, 72, 216, 114, 1, 240,
-    122, 216, 114, 1, 218, 55, 216, 114, 1, 249, 145, 216, 114, 1, 161, 216,
-    114, 1, 189, 216, 114, 1, 225, 214, 216, 114, 1, 247, 16, 216, 114, 1,
-    240, 136, 216, 114, 1, 169, 216, 114, 1, 209, 181, 216, 114, 1, 183, 216,
-    114, 1, 234, 65, 216, 114, 1, 235, 239, 216, 114, 1, 155, 216, 114, 1,
-    172, 216, 114, 1, 218, 1, 197, 23, 216, 114, 1, 166, 216, 114, 1, 215,
-    109, 216, 114, 1, 176, 216, 114, 1, 142, 216, 114, 1, 197, 166, 216, 114,
-    1, 164, 216, 114, 1, 215, 110, 197, 23, 216, 114, 1, 225, 121, 225, 214,
-    216, 114, 1, 225, 121, 247, 16, 216, 114, 1, 225, 121, 169, 216, 114, 38,
-    206, 182, 130, 202, 11, 216, 114, 38, 206, 182, 126, 202, 11, 216, 114,
-    38, 206, 182, 209, 250, 202, 11, 216, 114, 38, 181, 239, 194, 202, 11,
-    216, 114, 38, 181, 130, 202, 11, 216, 114, 38, 181, 126, 202, 11, 216,
-    114, 38, 181, 209, 250, 202, 11, 216, 114, 38, 217, 208, 78, 216, 114,
-    38, 52, 76, 57, 216, 114, 130, 152, 251, 30, 216, 114, 126, 152, 251, 30,
-    216, 114, 16, 214, 103, 239, 208, 216, 114, 16, 234, 64, 216, 114, 244,
-    159, 216, 114, 236, 90, 78, 216, 114, 223, 52, 216, 114, 240, 83, 216,
-    114, 238, 255, 55, 216, 114, 203, 116, 55, 208, 228, 1, 251, 171, 208,
-    228, 1, 248, 145, 208, 228, 1, 234, 99, 208, 228, 1, 240, 106, 208, 228,
-    1, 225, 225, 208, 228, 1, 249, 143, 208, 228, 1, 195, 82, 208, 228, 1,
-    225, 234, 208, 228, 1, 202, 57, 208, 228, 1, 195, 181, 208, 228, 1, 225,
-    51, 208, 228, 1, 223, 75, 208, 228, 1, 219, 25, 208, 228, 1, 215, 138,
-    208, 228, 1, 206, 63, 208, 228, 1, 226, 86, 208, 228, 1, 235, 153, 208,
-    228, 1, 201, 111, 208, 228, 1, 211, 76, 208, 228, 1, 209, 251, 208, 228,
-    1, 207, 24, 208, 228, 1, 203, 161, 208, 228, 117, 226, 86, 208, 228, 117,
-    226, 85, 208, 228, 117, 214, 176, 208, 228, 117, 240, 120, 208, 228, 73,
-    1, 236, 179, 195, 181, 208, 228, 117, 236, 179, 195, 181, 208, 228, 18,
-    2, 181, 69, 208, 228, 18, 2, 69, 208, 228, 18, 2, 214, 18, 252, 168, 208,
-    228, 18, 2, 181, 252, 168, 208, 228, 18, 2, 252, 168, 208, 228, 18, 2,
-    214, 18, 63, 208, 228, 18, 2, 181, 63, 208, 228, 18, 2, 63, 208, 228, 73,
-    1, 206, 182, 63, 208, 228, 18, 2, 206, 182, 63, 208, 228, 18, 2, 181, 66,
-    208, 228, 18, 2, 66, 208, 228, 73, 1, 68, 208, 228, 18, 2, 181, 68, 208,
-    228, 18, 2, 68, 208, 228, 18, 2, 72, 208, 228, 18, 2, 204, 119, 208, 228,
-    117, 217, 93, 208, 228, 211, 214, 217, 93, 208, 228, 211, 214, 251, 219,
-    208, 228, 211, 214, 251, 96, 208, 228, 211, 214, 249, 49, 208, 228, 211,
-    214, 250, 160, 208, 228, 211, 214, 206, 199, 208, 228, 252, 30, 78, 208,
-    228, 211, 214, 219, 174, 211, 112, 208, 228, 211, 214, 195, 19, 208, 228,
-    211, 214, 211, 112, 208, 228, 211, 214, 195, 112, 208, 228, 211, 214,
-    201, 0, 208, 228, 211, 214, 250, 236, 208, 228, 211, 214, 205, 187, 220,
-    10, 208, 228, 211, 214, 251, 77, 220, 58, 1, 232, 220, 220, 58, 1, 252,
-    117, 220, 58, 1, 251, 217, 220, 58, 1, 252, 6, 220, 58, 1, 251, 209, 220,
-    58, 1, 199, 251, 220, 58, 1, 250, 114, 220, 58, 1, 225, 234, 220, 58, 1,
-    250, 157, 220, 58, 1, 251, 176, 220, 58, 1, 251, 181, 220, 58, 1, 251,
-    173, 220, 58, 1, 251, 123, 220, 58, 1, 251, 106, 220, 58, 1, 250, 202,
-    220, 58, 1, 226, 86, 220, 58, 1, 251, 46, 220, 58, 1, 250, 170, 220, 58,
-    1, 251, 18, 220, 58, 1, 251, 14, 220, 58, 1, 250, 195, 220, 58, 1, 250,
-    168, 220, 58, 1, 237, 175, 220, 58, 1, 225, 43, 220, 58, 1, 251, 194,
-    220, 58, 251, 223, 78, 220, 58, 198, 246, 78, 220, 58, 234, 36, 78, 220,
-    58, 211, 213, 203, 236, 1, 131, 217, 71, 203, 236, 1, 131, 225, 214, 203,
-    236, 1, 131, 215, 109, 203, 236, 1, 131, 201, 78, 203, 236, 1, 131, 216,
-    86, 203, 236, 1, 131, 216, 68, 203, 236, 1, 131, 248, 197, 203, 236, 1,
-    131, 169, 203, 236, 1, 131, 222, 37, 203, 236, 1, 131, 222, 26, 203, 236,
-    1, 131, 205, 80, 9, 1, 248, 240, 3, 4, 199, 231, 60, 9, 1, 248, 240, 3,
-    232, 214, 57, 9, 1, 225, 190, 3, 99, 238, 251, 57, 9, 1, 203, 140, 3, 99,
-    238, 251, 57, 9, 1, 235, 177, 3, 76, 248, 227, 26, 115, 238, 251, 57, 9,
-    1, 211, 153, 3, 76, 60, 9, 1, 222, 250, 3, 52, 154, 9, 1, 87, 3, 115,
-    238, 251, 57, 9, 1, 93, 3, 99, 238, 251, 248, 227, 26, 232, 214, 57, 9,
-    1, 93, 3, 99, 238, 251, 248, 227, 26, 76, 57, 9, 1, 210, 143, 3, 221,
-    225, 9, 1, 197, 118, 3, 76, 197, 38, 9, 1, 209, 214, 196, 64, 9, 1, 126,
-    251, 164, 9, 1, 240, 108, 3, 115, 238, 251, 60, 9, 1, 209, 9, 3, 115,
-    238, 251, 60, 9, 1, 234, 111, 3, 226, 17, 106, 9, 1, 204, 218, 197, 117,
-    9, 1, 195, 107, 3, 226, 17, 199, 231, 57, 9, 1, 251, 195, 3, 115, 238,
-    251, 60, 9, 1, 225, 36, 3, 76, 60, 9, 1, 248, 240, 3, 4, 87, 57, 9, 1,
-    213, 73, 3, 4, 87, 57, 9, 1, 203, 42, 3, 4, 203, 42, 57, 9, 1, 210, 143,
-    3, 4, 216, 32, 57, 9, 1, 93, 3, 99, 238, 251, 248, 227, 26, 4, 216, 32,
-    57, 9, 1, 251, 220, 235, 176, 9, 1, 251, 220, 211, 152, 9, 1, 251, 220,
-    216, 31, 9, 4, 126, 197, 117, 9, 4, 130, 197, 9, 251, 11, 9, 4, 130, 209,
-    8, 9, 4, 130, 251, 194, 9, 4, 130, 211, 152, 9, 4, 130, 216, 32, 3, 224,
-    238, 9, 4, 126, 216, 32, 3, 224, 238, 9, 4, 130, 197, 9, 250, 167, 9, 4,
-    130, 197, 9, 250, 201, 9, 4, 130, 197, 9, 251, 105, 9, 4, 130, 197, 9,
-    208, 243, 9, 4, 130, 197, 9, 211, 116, 9, 4, 130, 197, 9, 197, 140, 9, 4,
-    130, 235, 35, 220, 24, 9, 4, 130, 2, 209, 3, 9, 239, 71, 236, 222, 77,
-    250, 121, 9, 163, 240, 96, 60, 9, 241, 18, 235, 200, 9, 241, 18, 240, 95,
-    9, 241, 18, 224, 238, 9, 241, 18, 235, 198, 9, 241, 18, 240, 93, 9, 241,
-    18, 224, 236, 9, 152, 97, 76, 57, 9, 152, 99, 238, 251, 57, 9, 152, 221,
-    226, 57, 9, 152, 97, 76, 60, 9, 152, 99, 238, 251, 60, 9, 152, 221, 226,
-    60, 9, 192, 235, 198, 9, 192, 240, 93, 9, 192, 224, 236, 9, 4, 130, 197,
-    117, 9, 235, 201, 3, 210, 2, 9, 235, 201, 3, 76, 57, 9, 224, 239, 3, 76,
-    60, 9, 50, 250, 218, 57, 9, 53, 250, 218, 57, 9, 50, 250, 218, 60, 9, 53,
-    250, 218, 60, 9, 52, 53, 250, 218, 57, 9, 52, 53, 250, 218, 90, 3, 238,
-    253, 9, 53, 250, 218, 90, 3, 238, 253, 9, 240, 96, 3, 238, 253, 9, 117,
-    206, 96, 216, 32, 233, 196, 101, 2, 226, 17, 247, 133, 101, 2, 247, 133,
-    101, 2, 251, 51, 101, 2, 199, 2, 101, 1, 206, 182, 63, 101, 1, 63, 101,
-    1, 252, 168, 101, 1, 68, 101, 1, 226, 120, 101, 1, 66, 101, 1, 199, 245,
-    101, 1, 110, 144, 101, 1, 110, 159, 101, 1, 247, 136, 69, 101, 1, 206,
-    182, 69, 101, 1, 69, 101, 1, 251, 200, 101, 1, 247, 136, 72, 101, 1, 206,
-    182, 72, 101, 1, 72, 101, 1, 250, 150, 101, 1, 155, 101, 1, 224, 146,
-    101, 1, 234, 123, 101, 1, 233, 230, 101, 1, 217, 71, 101, 1, 247, 174,
-    101, 1, 247, 16, 101, 1, 225, 214, 101, 1, 225, 180, 101, 1, 215, 109,
-    101, 1, 201, 78, 101, 1, 201, 66, 101, 1, 240, 41, 101, 1, 240, 25, 101,
-    1, 216, 86, 101, 1, 189, 101, 1, 202, 233, 101, 1, 240, 136, 101, 1, 239,
-    176, 101, 1, 176, 101, 1, 216, 68, 101, 1, 161, 101, 1, 213, 6, 101, 1,
-    249, 145, 101, 1, 248, 197, 101, 1, 166, 101, 1, 164, 101, 1, 169, 101,
-    1, 209, 181, 101, 1, 172, 101, 1, 222, 37, 101, 1, 222, 26, 101, 1, 199,
-    152, 101, 1, 207, 50, 101, 1, 205, 80, 101, 1, 183, 101, 1, 142, 101, 18,
-    2, 214, 164, 101, 18, 2, 214, 100, 101, 2, 215, 149, 101, 2, 250, 132,
-    101, 18, 2, 252, 168, 101, 18, 2, 68, 101, 18, 2, 226, 120, 101, 18, 2,
-    66, 101, 18, 2, 199, 245, 101, 18, 2, 110, 144, 101, 18, 2, 110, 209,
-    182, 101, 18, 2, 247, 136, 69, 101, 18, 2, 206, 182, 69, 101, 18, 2, 69,
-    101, 18, 2, 251, 200, 101, 18, 2, 247, 136, 72, 101, 18, 2, 206, 182, 72,
-    101, 18, 2, 72, 101, 18, 2, 250, 150, 101, 2, 199, 7, 101, 18, 2, 212,
-    11, 69, 101, 18, 2, 250, 127, 101, 214, 127, 101, 204, 206, 2, 200, 101,
-    101, 204, 206, 2, 251, 53, 101, 233, 101, 252, 22, 101, 252, 10, 252, 22,
-    101, 18, 2, 247, 136, 181, 69, 101, 18, 2, 200, 99, 101, 18, 2, 199, 244,
-    101, 1, 211, 159, 101, 1, 224, 127, 101, 1, 233, 205, 101, 1, 195, 115,
-    101, 1, 240, 30, 101, 1, 210, 77, 101, 1, 235, 239, 101, 1, 195, 167,
-    101, 1, 110, 209, 182, 101, 1, 110, 222, 38, 101, 18, 2, 110, 159, 101,
-    18, 2, 110, 222, 38, 101, 240, 88, 101, 52, 240, 88, 101, 17, 195, 79,
-    101, 17, 100, 101, 17, 102, 101, 17, 134, 101, 17, 136, 101, 17, 146,
-    101, 17, 167, 101, 17, 178, 101, 17, 171, 101, 17, 182, 101, 252, 30, 55,
-    101, 2, 130, 205, 147, 238, 253, 101, 1, 247, 136, 63, 101, 1, 214, 164,
-    101, 1, 214, 100, 101, 1, 250, 127, 101, 1, 200, 99, 101, 1, 199, 244,
-    101, 1, 220, 16, 240, 41, 101, 1, 195, 74, 101, 1, 85, 164, 101, 1, 234,
-    10, 101, 1, 225, 158, 101, 1, 233, 152, 204, 226, 101, 1, 240, 31, 101,
-    1, 249, 45, 248, 219, 251, 80, 248, 219, 2, 247, 133, 248, 219, 2, 251,
-    51, 248, 219, 2, 199, 2, 248, 219, 1, 63, 248, 219, 1, 252, 168, 248,
-    219, 1, 68, 248, 219, 1, 226, 120, 248, 219, 1, 66, 248, 219, 1, 199,
-    245, 248, 219, 1, 110, 144, 248, 219, 1, 110, 159, 248, 219, 1, 69, 248,
-    219, 1, 251, 200, 248, 219, 1, 72, 248, 219, 1, 250, 150, 248, 219, 1,
-    155, 248, 219, 1, 224, 146, 248, 219, 1, 234, 123, 248, 219, 1, 233, 230,
-    248, 219, 1, 217, 71, 248, 219, 1, 247, 174, 248, 219, 1, 247, 16, 248,
-    219, 1, 225, 214, 248, 219, 1, 225, 180, 248, 219, 1, 215, 109, 248, 219,
-    1, 201, 78, 248, 219, 1, 201, 66, 248, 219, 1, 240, 41, 248, 219, 1, 240,
-    25, 248, 219, 1, 216, 86, 248, 219, 1, 189, 248, 219, 1, 202, 233, 248,
-    219, 1, 240, 136, 248, 219, 1, 239, 176, 248, 219, 1, 176, 248, 219, 1,
-    161, 248, 219, 1, 213, 6, 248, 219, 1, 249, 145, 248, 219, 1, 248, 197,
-    248, 219, 1, 166, 248, 219, 1, 164, 248, 219, 1, 169, 248, 219, 1, 172,
-    248, 219, 1, 207, 50, 248, 219, 1, 205, 80, 248, 219, 1, 183, 248, 219,
-    1, 142, 248, 219, 2, 215, 149, 248, 219, 2, 250, 132, 248, 219, 18, 2,
-    252, 168, 248, 219, 18, 2, 68, 248, 219, 18, 2, 226, 120, 248, 219, 18,
-    2, 66, 248, 219, 18, 2, 199, 245, 248, 219, 18, 2, 110, 144, 248, 219,
-    18, 2, 110, 209, 182, 248, 219, 18, 2, 69, 248, 219, 18, 2, 251, 200,
-    248, 219, 18, 2, 72, 248, 219, 18, 2, 250, 150, 248, 219, 2, 199, 7, 248,
-    219, 1, 224, 137, 189, 248, 219, 250, 151, 222, 158, 78, 248, 219, 1,
-    209, 181, 248, 219, 1, 210, 77, 248, 219, 1, 195, 167, 248, 219, 1, 110,
-    209, 182, 248, 219, 1, 110, 222, 38, 248, 219, 18, 2, 110, 159, 248, 219,
-    18, 2, 110, 222, 38, 248, 219, 17, 195, 79, 248, 219, 17, 100, 248, 219,
-    17, 102, 248, 219, 17, 134, 248, 219, 17, 136, 248, 219, 17, 146, 248,
-    219, 17, 167, 248, 219, 17, 178, 248, 219, 17, 171, 248, 219, 17, 182,
-    248, 219, 1, 210, 252, 3, 112, 239, 146, 248, 219, 1, 210, 252, 3, 221,
-    203, 239, 146, 248, 219, 209, 108, 78, 248, 219, 209, 108, 55, 248, 219,
-    241, 17, 215, 141, 100, 248, 219, 241, 17, 215, 141, 102, 248, 219, 241,
-    17, 215, 141, 134, 248, 219, 241, 17, 215, 141, 136, 248, 219, 241, 17,
-    215, 141, 97, 222, 141, 202, 223, 202, 218, 239, 206, 248, 219, 241, 17,
-    239, 207, 206, 23, 248, 219, 225, 235, 248, 219, 234, 90, 78, 248, 219,
-    1, 199, 115, 251, 51, 248, 219, 252, 30, 55, 248, 219, 208, 215, 78, 233,
-    42, 2, 252, 5, 248, 163, 233, 42, 2, 248, 163, 233, 42, 2, 199, 2, 233,
-    42, 1, 63, 233, 42, 1, 252, 168, 233, 42, 1, 68, 233, 42, 1, 226, 120,
-    233, 42, 1, 66, 233, 42, 1, 199, 245, 233, 42, 1, 237, 54, 233, 42, 1,
-    251, 200, 233, 42, 1, 214, 102, 233, 42, 1, 250, 150, 233, 42, 1, 155,
-    233, 42, 1, 224, 146, 233, 42, 1, 234, 123, 233, 42, 1, 233, 230, 233,
-    42, 1, 217, 71, 233, 42, 1, 247, 174, 233, 42, 1, 247, 16, 233, 42, 1,
-    225, 214, 233, 42, 1, 225, 180, 233, 42, 1, 215, 109, 233, 42, 1, 201,
-    78, 233, 42, 1, 201, 66, 233, 42, 1, 240, 41, 233, 42, 1, 240, 25, 233,
-    42, 1, 216, 86, 233, 42, 1, 189, 233, 42, 1, 202, 233, 233, 42, 1, 240,
-    136, 233, 42, 1, 239, 176, 233, 42, 1, 176, 233, 42, 1, 161, 233, 42, 1,
-    213, 6, 233, 42, 1, 249, 145, 233, 42, 1, 248, 197, 233, 42, 1, 166, 233,
-    42, 1, 164, 233, 42, 1, 169, 233, 42, 1, 172, 233, 42, 1, 222, 37, 233,
-    42, 1, 199, 152, 233, 42, 1, 207, 50, 233, 42, 1, 183, 233, 42, 1, 142,
-    233, 42, 2, 215, 149, 233, 42, 18, 2, 252, 168, 233, 42, 18, 2, 68, 233,
-    42, 18, 2, 226, 120, 233, 42, 18, 2, 66, 233, 42, 18, 2, 199, 245, 233,
-    42, 18, 2, 237, 54, 233, 42, 18, 2, 251, 200, 233, 42, 18, 2, 214, 102,
-    233, 42, 18, 2, 250, 150, 233, 42, 2, 199, 7, 233, 42, 2, 200, 103, 233,
-    42, 1, 224, 127, 233, 42, 1, 233, 205, 233, 42, 1, 195, 115, 233, 42, 1,
-    209, 181, 233, 42, 1, 235, 239, 233, 42, 17, 195, 79, 233, 42, 17, 100,
-    233, 42, 17, 102, 233, 42, 17, 134, 233, 42, 17, 136, 233, 42, 17, 146,
-    233, 42, 17, 167, 233, 42, 17, 178, 233, 42, 17, 171, 233, 42, 17, 182,
-    233, 42, 202, 65, 233, 42, 252, 4, 233, 42, 225, 255, 233, 42, 200, 17,
-    233, 42, 237, 15, 214, 107, 233, 42, 2, 196, 104, 233, 42, 252, 30, 55,
-    233, 58, 2, 247, 133, 233, 58, 2, 251, 51, 233, 58, 2, 199, 2, 233, 58,
-    1, 63, 233, 58, 1, 252, 168, 233, 58, 1, 68, 233, 58, 1, 226, 120, 233,
-    58, 1, 66, 233, 58, 1, 199, 245, 233, 58, 1, 110, 144, 233, 58, 1, 110,
-    159, 233, 58, 18, 247, 136, 69, 233, 58, 1, 69, 233, 58, 1, 251, 200,
-    233, 58, 18, 247, 136, 72, 233, 58, 1, 72, 233, 58, 1, 250, 150, 233, 58,
-    1, 155, 233, 58, 1, 224, 146, 233, 58, 1, 234, 123, 233, 58, 1, 233, 230,
-    233, 58, 1, 217, 71, 233, 58, 1, 247, 174, 233, 58, 1, 247, 16, 233, 58,
-    1, 225, 214, 233, 58, 1, 225, 180, 233, 58, 1, 215, 109, 233, 58, 1, 201,
-    78, 233, 58, 1, 201, 66, 233, 58, 1, 240, 41, 233, 58, 1, 240, 25, 233,
-    58, 1, 216, 86, 233, 58, 1, 189, 233, 58, 1, 202, 233, 233, 58, 1, 240,
-    136, 233, 58, 1, 239, 176, 233, 58, 1, 176, 233, 58, 1, 161, 233, 58, 1,
-    213, 6, 233, 58, 1, 249, 145, 233, 58, 1, 248, 197, 233, 58, 1, 166, 233,
-    58, 1, 164, 233, 58, 1, 169, 233, 58, 1, 172, 233, 58, 1, 222, 37, 233,
-    58, 1, 199, 152, 233, 58, 1, 207, 50, 233, 58, 1, 205, 80, 233, 58, 1,
-    183, 233, 58, 1, 142, 233, 58, 2, 215, 149, 233, 58, 2, 250, 132, 233,
-    58, 18, 2, 252, 168, 233, 58, 18, 2, 68, 233, 58, 18, 2, 226, 120, 233,
-    58, 18, 2, 66, 233, 58, 18, 2, 199, 245, 233, 58, 18, 2, 110, 144, 233,
-    58, 18, 2, 110, 209, 182, 233, 58, 18, 2, 247, 136, 69, 233, 58, 18, 2,
-    69, 233, 58, 18, 2, 251, 200, 233, 58, 18, 2, 247, 136, 72, 233, 58, 18,
-    2, 72, 233, 58, 18, 2, 250, 150, 233, 58, 2, 199, 7, 233, 58, 214, 127,
-    233, 58, 1, 110, 209, 182, 233, 58, 1, 110, 222, 38, 233, 58, 18, 2, 110,
-    159, 233, 58, 18, 2, 110, 222, 38, 233, 58, 17, 195, 79, 233, 58, 17,
-    100, 233, 58, 17, 102, 233, 58, 17, 134, 233, 58, 17, 136, 233, 58, 17,
-    146, 233, 58, 17, 167, 233, 58, 17, 178, 233, 58, 17, 171, 233, 58, 17,
-    182, 233, 58, 252, 30, 55, 233, 58, 209, 108, 55, 233, 58, 1, 195, 74,
-    233, 58, 2, 204, 119, 233, 58, 2, 207, 40, 233, 58, 2, 220, 107, 233, 58,
-    2, 202, 153, 215, 150, 57, 233, 58, 2, 244, 250, 215, 150, 57, 233, 58,
-    2, 200, 217, 215, 150, 57, 214, 62, 2, 247, 133, 214, 62, 2, 251, 51,
-    214, 62, 2, 199, 2, 214, 62, 1, 63, 214, 62, 1, 252, 168, 214, 62, 1, 68,
-    214, 62, 1, 226, 120, 214, 62, 1, 66, 214, 62, 1, 199, 245, 214, 62, 1,
-    110, 144, 214, 62, 1, 110, 159, 214, 62, 1, 69, 214, 62, 1, 251, 200,
-    214, 62, 1, 72, 214, 62, 1, 250, 150, 214, 62, 1, 155, 214, 62, 1, 224,
-    146, 214, 62, 1, 234, 123, 214, 62, 1, 233, 230, 214, 62, 1, 217, 71,
-    214, 62, 1, 247, 174, 214, 62, 1, 247, 16, 214, 62, 1, 225, 214, 214, 62,
-    1, 225, 180, 214, 62, 1, 215, 109, 214, 62, 1, 201, 78, 214, 62, 1, 201,
-    66, 214, 62, 1, 240, 41, 214, 62, 1, 240, 25, 214, 62, 1, 216, 86, 214,
-    62, 1, 189, 214, 62, 1, 202, 233, 214, 62, 1, 240, 136, 214, 62, 1, 239,
-    176, 214, 62, 1, 176, 214, 62, 1, 161, 214, 62, 1, 213, 6, 214, 62, 1,
-    249, 145, 214, 62, 1, 248, 197, 214, 62, 1, 166, 214, 62, 1, 164, 214,
-    62, 1, 169, 214, 62, 1, 172, 214, 62, 1, 222, 37, 214, 62, 1, 199, 152,
-    214, 62, 1, 207, 50, 214, 62, 1, 205, 80, 214, 62, 1, 183, 214, 62, 1,
-    142, 214, 62, 2, 215, 149, 214, 62, 2, 250, 132, 214, 62, 18, 2, 252,
-    168, 214, 62, 18, 2, 68, 214, 62, 18, 2, 226, 120, 214, 62, 18, 2, 66,
-    214, 62, 18, 2, 199, 245, 214, 62, 18, 2, 110, 144, 214, 62, 18, 2, 110,
-    209, 182, 214, 62, 18, 2, 69, 214, 62, 18, 2, 251, 200, 214, 62, 18, 2,
-    72, 214, 62, 18, 2, 250, 150, 214, 62, 2, 199, 7, 214, 62, 251, 201, 222,
-    158, 78, 214, 62, 250, 151, 222, 158, 78, 214, 62, 1, 209, 181, 214, 62,
-    1, 210, 77, 214, 62, 1, 195, 167, 214, 62, 1, 110, 209, 182, 214, 62, 1,
-    110, 222, 38, 214, 62, 18, 2, 110, 159, 214, 62, 18, 2, 110, 222, 38,
-    214, 62, 17, 195, 79, 214, 62, 17, 100, 214, 62, 17, 102, 214, 62, 17,
-    134, 214, 62, 17, 136, 214, 62, 17, 146, 214, 62, 17, 167, 214, 62, 17,
-    178, 214, 62, 17, 171, 214, 62, 17, 182, 214, 62, 225, 235, 214, 62, 1,
-    197, 166, 214, 62, 191, 97, 211, 87, 214, 62, 191, 97, 232, 225, 214, 62,
-    191, 115, 211, 85, 214, 62, 191, 97, 206, 21, 214, 62, 191, 97, 237, 26,
-    214, 62, 191, 115, 206, 18, 42, 2, 251, 51, 42, 2, 199, 2, 42, 1, 63, 42,
-    1, 252, 168, 42, 1, 68, 42, 1, 226, 120, 42, 1, 66, 42, 1, 199, 245, 42,
-    1, 69, 42, 1, 237, 54, 42, 1, 251, 200, 42, 1, 72, 42, 1, 214, 102, 42,
-    1, 250, 150, 42, 1, 155, 42, 1, 217, 71, 42, 1, 247, 174, 42, 1, 225,
-    214, 42, 1, 215, 109, 42, 1, 201, 78, 42, 1, 216, 86, 42, 1, 189, 42, 1,
-    176, 42, 1, 216, 68, 42, 1, 161, 42, 1, 166, 42, 1, 164, 42, 1, 169, 42,
-    1, 209, 181, 42, 1, 172, 42, 1, 222, 37, 42, 1, 222, 26, 42, 1, 199, 152,
-    42, 1, 207, 50, 42, 1, 205, 80, 42, 1, 183, 42, 1, 142, 42, 18, 2, 252,
-    168, 42, 18, 2, 68, 42, 18, 2, 226, 120, 42, 18, 2, 66, 42, 18, 2, 199,
-    245, 42, 18, 2, 69, 42, 18, 2, 237, 54, 42, 18, 2, 251, 200, 42, 18, 2,
-    72, 42, 18, 2, 214, 102, 42, 18, 2, 250, 150, 42, 2, 199, 7, 42, 214,
-    127, 42, 250, 151, 222, 158, 78, 42, 17, 195, 79, 42, 17, 100, 42, 17,
-    102, 42, 17, 134, 42, 17, 136, 42, 17, 146, 42, 17, 167, 42, 17, 178, 42,
-    17, 171, 42, 17, 182, 42, 31, 203, 23, 42, 31, 97, 231, 57, 42, 31, 97,
-    170, 42, 240, 54, 55, 42, 218, 198, 55, 42, 196, 67, 55, 42, 239, 248,
-    55, 42, 241, 74, 55, 42, 250, 203, 90, 55, 42, 209, 108, 55, 42, 31, 55,
-    194, 194, 2, 38, 247, 134, 57, 194, 194, 2, 247, 133, 194, 194, 2, 251,
-    51, 194, 194, 2, 199, 2, 194, 194, 2, 38, 251, 52, 57, 194, 194, 1, 63,
-    194, 194, 1, 252, 168, 194, 194, 1, 68, 194, 194, 1, 226, 120, 194, 194,
-    1, 66, 194, 194, 1, 199, 245, 194, 194, 1, 110, 144, 194, 194, 1, 110,
-    159, 194, 194, 1, 69, 194, 194, 1, 237, 54, 194, 194, 1, 251, 200, 194,
-    194, 1, 72, 194, 194, 1, 214, 102, 194, 194, 1, 250, 150, 194, 194, 1,
-    155, 194, 194, 1, 224, 146, 194, 194, 1, 234, 123, 194, 194, 1, 233, 230,
-    194, 194, 1, 217, 71, 194, 194, 1, 247, 174, 194, 194, 1, 247, 16, 194,
-    194, 1, 225, 214, 194, 194, 1, 225, 180, 194, 194, 1, 215, 109, 194, 194,
-    1, 201, 78, 194, 194, 1, 201, 66, 194, 194, 1, 240, 41, 194, 194, 1, 240,
-    25, 194, 194, 1, 216, 86, 194, 194, 1, 189, 194, 194, 1, 202, 233, 194,
-    194, 1, 240, 136, 194, 194, 1, 239, 176, 194, 194, 1, 176, 194, 194, 1,
-    161, 194, 194, 1, 213, 6, 194, 194, 1, 249, 145, 194, 194, 1, 248, 197,
-    194, 194, 1, 166, 194, 194, 1, 164, 194, 194, 1, 169, 194, 194, 1, 209,
-    181, 194, 194, 1, 172, 194, 194, 1, 222, 37, 194, 194, 1, 222, 26, 194,
-    194, 1, 199, 152, 194, 194, 1, 207, 50, 194, 194, 1, 205, 80, 194, 194,
-    1, 183, 194, 194, 1, 142, 194, 194, 2, 250, 132, 194, 194, 18, 2, 252,
-    168, 194, 194, 18, 2, 68, 194, 194, 18, 2, 226, 120, 194, 194, 18, 2, 66,
-    194, 194, 18, 2, 199, 245, 194, 194, 18, 2, 110, 144, 194, 194, 18, 2,
-    110, 209, 182, 194, 194, 18, 2, 69, 194, 194, 18, 2, 237, 54, 194, 194,
-    18, 2, 251, 200, 194, 194, 18, 2, 72, 194, 194, 18, 2, 214, 102, 194,
-    194, 18, 2, 250, 150, 194, 194, 2, 199, 7, 194, 194, 222, 158, 78, 194,
-    194, 251, 201, 222, 158, 78, 194, 194, 1, 201, 113, 194, 194, 1, 237,
-    156, 194, 194, 1, 209, 162, 194, 194, 1, 110, 209, 182, 194, 194, 1, 110,
-    222, 38, 194, 194, 18, 2, 110, 159, 194, 194, 18, 2, 110, 222, 38, 194,
-    194, 17, 195, 79, 194, 194, 17, 100, 194, 194, 17, 102, 194, 194, 17,
-    134, 194, 194, 17, 136, 194, 194, 17, 146, 194, 194, 17, 167, 194, 194,
-    17, 178, 194, 194, 17, 171, 194, 194, 17, 182, 194, 194, 2, 206, 100,
-    194, 194, 191, 17, 195, 80, 36, 214, 168, 212, 57, 77, 136, 194, 194,
-    191, 17, 97, 36, 214, 168, 212, 57, 77, 136, 194, 194, 191, 17, 99, 36,
-    214, 168, 212, 57, 77, 136, 194, 194, 191, 17, 115, 36, 214, 168, 212,
-    57, 77, 136, 194, 194, 191, 17, 97, 36, 236, 103, 212, 57, 77, 136, 194,
-    194, 191, 17, 99, 36, 236, 103, 212, 57, 77, 136, 194, 194, 191, 17, 115,
-    36, 236, 103, 212, 57, 77, 136, 194, 194, 2, 200, 250, 225, 11, 2, 205,
-    147, 247, 133, 225, 11, 2, 247, 133, 225, 11, 2, 251, 51, 225, 11, 2,
-    199, 2, 225, 11, 2, 206, 100, 225, 11, 1, 63, 225, 11, 1, 252, 168, 225,
-    11, 1, 68, 225, 11, 1, 226, 120, 225, 11, 1, 66, 225, 11, 1, 199, 245,
-    225, 11, 1, 110, 144, 225, 11, 1, 110, 159, 225, 11, 1, 69, 225, 11, 1,
-    237, 54, 225, 11, 1, 251, 200, 225, 11, 1, 72, 225, 11, 1, 214, 102, 225,
-    11, 1, 250, 150, 225, 11, 1, 155, 225, 11, 1, 224, 146, 225, 11, 1, 234,
-    123, 225, 11, 1, 233, 230, 225, 11, 1, 217, 71, 225, 11, 1, 247, 174,
-    225, 11, 1, 247, 16, 225, 11, 1, 225, 214, 225, 11, 1, 225, 180, 225, 11,
-    1, 215, 109, 225, 11, 1, 201, 78, 225, 11, 1, 201, 66, 225, 11, 1, 240,
-    41, 225, 11, 1, 240, 25, 225, 11, 1, 216, 86, 225, 11, 1, 189, 225, 11,
-    1, 202, 233, 225, 11, 1, 240, 136, 225, 11, 1, 239, 176, 225, 11, 1, 176,
-    225, 11, 1, 161, 225, 11, 1, 213, 6, 225, 11, 1, 249, 145, 225, 11, 1,
-    248, 197, 225, 11, 1, 166, 225, 11, 1, 164, 225, 11, 1, 169, 225, 11, 1,
-    209, 181, 225, 11, 1, 172, 225, 11, 1, 222, 37, 225, 11, 1, 199, 152,
-    225, 11, 1, 207, 50, 225, 11, 1, 205, 80, 225, 11, 1, 183, 225, 11, 1,
-    142, 225, 11, 2, 215, 149, 225, 11, 2, 250, 132, 225, 11, 18, 2, 252,
-    168, 225, 11, 18, 2, 68, 225, 11, 18, 2, 226, 120, 225, 11, 18, 2, 66,
-    225, 11, 18, 2, 199, 245, 225, 11, 18, 2, 110, 144, 225, 11, 18, 2, 110,
-    209, 182, 225, 11, 18, 2, 69, 225, 11, 18, 2, 237, 54, 225, 11, 18, 2,
-    251, 200, 225, 11, 18, 2, 72, 225, 11, 18, 2, 214, 102, 225, 11, 18, 2,
-    250, 150, 225, 11, 2, 199, 7, 225, 11, 222, 158, 78, 225, 11, 251, 201,
-    222, 158, 78, 225, 11, 1, 235, 239, 225, 11, 1, 110, 209, 182, 225, 11,
-    1, 110, 222, 38, 225, 11, 18, 2, 110, 159, 225, 11, 18, 2, 110, 222, 38,
-    225, 11, 17, 195, 79, 225, 11, 17, 100, 225, 11, 17, 102, 225, 11, 17,
-    134, 225, 11, 17, 136, 225, 11, 17, 146, 225, 11, 17, 167, 225, 11, 17,
-    178, 225, 11, 17, 171, 225, 11, 17, 182, 225, 11, 2, 225, 165, 225, 11,
-    2, 200, 34, 131, 2, 38, 251, 52, 57, 131, 2, 247, 133, 131, 2, 251, 51,
-    131, 2, 199, 2, 131, 1, 63, 131, 1, 252, 168, 131, 1, 68, 131, 1, 226,
-    120, 131, 1, 66, 131, 1, 199, 245, 131, 1, 110, 144, 131, 1, 110, 159,
-    131, 1, 69, 131, 1, 237, 54, 131, 1, 251, 200, 131, 1, 72, 131, 1, 214,
-    102, 131, 1, 250, 150, 131, 1, 155, 131, 1, 224, 146, 131, 1, 234, 123,
-    131, 1, 233, 230, 131, 1, 217, 71, 131, 1, 247, 174, 131, 1, 247, 16,
-    131, 1, 225, 214, 131, 1, 225, 180, 131, 1, 215, 109, 131, 1, 201, 78,
-    131, 1, 201, 66, 131, 1, 240, 41, 131, 1, 240, 25, 131, 1, 216, 86, 131,
-    1, 189, 131, 1, 202, 233, 131, 1, 240, 136, 131, 1, 239, 176, 131, 1,
-    176, 131, 1, 216, 68, 131, 1, 161, 131, 1, 213, 6, 131, 1, 249, 145, 131,
-    1, 248, 197, 131, 1, 166, 131, 1, 164, 131, 1, 169, 131, 1, 209, 181,
-    131, 1, 172, 131, 1, 222, 37, 131, 1, 222, 26, 131, 1, 199, 152, 131, 1,
-    207, 50, 131, 1, 205, 80, 131, 1, 183, 131, 1, 142, 131, 1, 201, 47, 131,
-    2, 83, 249, 80, 199, 7, 131, 2, 244, 243, 199, 7, 131, 2, 250, 132, 131,
-    18, 2, 252, 168, 131, 18, 2, 68, 131, 18, 2, 226, 120, 131, 18, 2, 66,
-    131, 18, 2, 199, 245, 131, 18, 2, 110, 144, 131, 18, 2, 110, 209, 182,
-    131, 18, 2, 69, 131, 18, 2, 237, 54, 131, 18, 2, 251, 200, 131, 18, 2,
-    72, 131, 18, 2, 214, 102, 131, 18, 2, 250, 150, 131, 2, 199, 7, 131, 1,
-    76, 210, 116, 131, 2, 213, 156, 131, 1, 245, 64, 221, 136, 131, 1, 245,
-    64, 196, 148, 131, 1, 245, 64, 222, 27, 131, 250, 151, 222, 158, 78, 131,
-    191, 97, 214, 115, 131, 191, 97, 235, 17, 131, 191, 115, 237, 22, 131,
-    191, 97, 200, 237, 131, 191, 97, 203, 14, 131, 191, 115, 200, 236, 131,
-    191, 97, 235, 148, 131, 1, 250, 251, 226, 120, 131, 1, 110, 209, 182,
-    131, 1, 110, 222, 38, 131, 18, 2, 110, 159, 131, 18, 2, 110, 222, 38,
-    131, 17, 195, 79, 131, 17, 100, 131, 17, 102, 131, 17, 134, 131, 17, 136,
-    131, 17, 146, 131, 17, 167, 131, 17, 178, 131, 17, 171, 131, 17, 182,
-    131, 31, 203, 23, 131, 31, 97, 231, 57, 131, 31, 97, 170, 131, 191, 97,
-    211, 87, 131, 191, 97, 232, 225, 131, 191, 115, 211, 85, 131, 191, 97,
-    206, 21, 131, 191, 97, 237, 26, 131, 191, 115, 206, 18, 131, 240, 59, 78,
-    131, 1, 245, 64, 216, 87, 131, 1, 245, 64, 218, 55, 131, 1, 245, 64, 209,
-    182, 131, 1, 245, 64, 159, 131, 1, 245, 64, 222, 38, 131, 1, 245, 64,
-    225, 80, 153, 2, 251, 50, 153, 2, 199, 1, 153, 1, 250, 120, 153, 1, 252,
-    121, 153, 1, 251, 225, 153, 1, 251, 240, 153, 1, 225, 224, 153, 1, 226,
-    119, 153, 1, 199, 236, 153, 1, 199, 239, 153, 1, 225, 250, 153, 1, 225,
-    251, 153, 1, 226, 105, 153, 1, 226, 107, 153, 1, 236, 70, 153, 1, 237,
-    49, 153, 1, 251, 183, 153, 1, 214, 7, 153, 1, 214, 95, 153, 1, 250, 135,
-    153, 1, 251, 137, 224, 214, 153, 1, 220, 88, 224, 214, 153, 1, 251, 137,
-    234, 68, 153, 1, 220, 88, 234, 68, 153, 1, 225, 10, 217, 241, 153, 1,
-    208, 209, 234, 68, 153, 1, 251, 137, 247, 83, 153, 1, 220, 88, 247, 83,
-    153, 1, 251, 137, 225, 196, 153, 1, 220, 88, 225, 196, 153, 1, 203, 159,
-    217, 241, 153, 1, 203, 159, 208, 208, 217, 242, 153, 1, 208, 209, 225,
-    196, 153, 1, 251, 137, 201, 74, 153, 1, 220, 88, 201, 74, 153, 1, 251,
-    137, 240, 32, 153, 1, 220, 88, 240, 32, 153, 1, 218, 84, 217, 194, 153,
-    1, 208, 209, 240, 32, 153, 1, 251, 137, 203, 76, 153, 1, 220, 88, 203,
-    76, 153, 1, 251, 137, 240, 52, 153, 1, 220, 88, 240, 52, 153, 1, 240, 84,
-    217, 194, 153, 1, 208, 209, 240, 52, 153, 1, 251, 137, 213, 100, 153, 1,
-    220, 88, 213, 100, 153, 1, 251, 137, 249, 47, 153, 1, 220, 88, 249, 47,
-    153, 1, 219, 249, 153, 1, 251, 117, 249, 47, 153, 1, 196, 74, 153, 1,
-    210, 190, 153, 1, 240, 84, 222, 206, 153, 1, 199, 120, 153, 1, 203, 159,
-    208, 179, 153, 1, 218, 84, 208, 179, 153, 1, 240, 84, 208, 179, 153, 1,
-    232, 153, 153, 1, 218, 84, 222, 206, 153, 1, 235, 191, 153, 2, 251, 172,
-    153, 18, 2, 251, 235, 153, 18, 2, 224, 171, 251, 242, 153, 18, 2, 239,
-    119, 251, 242, 153, 18, 2, 224, 171, 225, 247, 153, 18, 2, 239, 119, 225,
-    247, 153, 18, 2, 224, 171, 213, 242, 153, 18, 2, 239, 119, 213, 242, 153,
-    18, 2, 234, 112, 153, 18, 2, 223, 247, 153, 18, 2, 239, 119, 223, 247,
-    153, 18, 2, 223, 249, 239, 226, 153, 18, 2, 223, 248, 232, 247, 251, 235,
-    153, 18, 2, 223, 248, 232, 247, 239, 119, 251, 235, 153, 18, 2, 223, 248,
-    232, 247, 234, 67, 153, 18, 2, 234, 67, 153, 222, 50, 17, 195, 79, 153,
-    222, 50, 17, 100, 153, 222, 50, 17, 102, 153, 222, 50, 17, 134, 153, 222,
-    50, 17, 136, 153, 222, 50, 17, 146, 153, 222, 50, 17, 167, 153, 222, 50,
-    17, 178, 153, 222, 50, 17, 171, 153, 222, 50, 17, 182, 153, 18, 2, 239,
-    119, 234, 112, 153, 18, 2, 239, 119, 234, 67, 153, 211, 214, 223, 165,
-    202, 228, 190, 224, 12, 225, 31, 202, 228, 190, 224, 118, 224, 141, 202,
-    228, 190, 224, 118, 224, 109, 202, 228, 190, 224, 118, 224, 104, 202,
-    228, 190, 224, 118, 224, 114, 202, 228, 190, 224, 118, 210, 211, 202,
-    228, 190, 216, 253, 216, 240, 202, 228, 190, 245, 50, 247, 5, 202, 228,
-    190, 245, 50, 245, 60, 202, 228, 190, 245, 50, 247, 4, 202, 228, 190,
-    205, 201, 205, 200, 202, 228, 190, 245, 50, 245, 46, 202, 228, 190, 196,
-    4, 196, 11, 202, 228, 190, 239, 29, 247, 13, 202, 228, 190, 202, 30, 213,
-    114, 202, 228, 190, 202, 170, 202, 222, 202, 228, 190, 202, 170, 217,
-    217, 202, 228, 190, 202, 170, 212, 223, 202, 228, 190, 216, 51, 217, 101,
-    202, 228, 190, 239, 29, 239, 227, 202, 228, 190, 202, 30, 203, 106, 202,
-    228, 190, 202, 170, 202, 136, 202, 228, 190, 202, 170, 202, 229, 202,
-    228, 190, 202, 170, 202, 165, 202, 228, 190, 216, 51, 215, 186, 202, 228,
-    190, 248, 117, 249, 110, 202, 228, 190, 212, 118, 212, 150, 202, 228,
-    190, 212, 235, 212, 225, 202, 228, 190, 235, 52, 235, 239, 202, 228, 190,
-    212, 235, 212, 255, 202, 228, 190, 235, 52, 235, 210, 202, 228, 190, 212,
-    235, 208, 223, 202, 228, 190, 218, 252, 166, 202, 228, 190, 196, 4, 196,
-    105, 202, 228, 190, 209, 233, 209, 133, 202, 228, 190, 209, 140, 202,
-    228, 190, 222, 8, 222, 68, 202, 228, 190, 221, 191, 202, 228, 190, 197,
-    35, 197, 156, 202, 228, 190, 205, 201, 208, 239, 202, 228, 190, 205, 201,
-    209, 104, 202, 228, 190, 205, 201, 204, 163, 202, 228, 190, 231, 194,
-    232, 35, 202, 228, 190, 222, 8, 245, 29, 202, 228, 190, 177, 251, 97,
-    202, 228, 190, 231, 194, 216, 41, 202, 228, 190, 213, 217, 202, 228, 190,
-    208, 203, 63, 202, 228, 190, 220, 82, 232, 211, 202, 228, 190, 208, 203,
-    252, 168, 202, 228, 190, 208, 203, 251, 123, 202, 228, 190, 208, 203, 68,
-    202, 228, 190, 208, 203, 226, 120, 202, 228, 190, 208, 203, 200, 99, 202,
-    228, 190, 208, 203, 200, 97, 202, 228, 190, 208, 203, 66, 202, 228, 190,
-    208, 203, 199, 245, 202, 228, 190, 212, 237, 202, 228, 241, 17, 16, 249,
-    111, 202, 228, 190, 208, 203, 69, 202, 228, 190, 208, 203, 251, 245, 202,
-    228, 190, 208, 203, 72, 202, 228, 190, 208, 203, 251, 201, 220, 76, 202,
-    228, 190, 208, 203, 251, 201, 220, 77, 202, 228, 190, 222, 253, 202, 228,
-    190, 220, 73, 202, 228, 190, 220, 74, 202, 228, 190, 220, 82, 237, 14,
-    202, 228, 190, 220, 82, 202, 169, 202, 228, 190, 220, 82, 201, 183, 202,
-    228, 190, 220, 82, 245, 108, 202, 228, 190, 202, 220, 202, 228, 190, 216,
-    187, 202, 228, 190, 196, 99, 202, 228, 190, 235, 42, 202, 228, 17, 195,
-    79, 202, 228, 17, 100, 202, 228, 17, 102, 202, 228, 17, 134, 202, 228,
-    17, 136, 202, 228, 17, 146, 202, 228, 17, 167, 202, 228, 17, 178, 202,
-    228, 17, 171, 202, 228, 17, 182, 202, 228, 190, 251, 92, 202, 228, 190,
-    224, 115, 222, 232, 1, 224, 11, 222, 232, 1, 224, 118, 204, 108, 222,
-    232, 1, 224, 118, 203, 117, 222, 232, 1, 213, 210, 233, 230, 222, 232, 1,
-    216, 252, 222, 232, 1, 244, 182, 222, 232, 1, 213, 210, 247, 16, 222,
-    232, 1, 205, 201, 203, 117, 222, 232, 1, 213, 210, 225, 180, 222, 232, 1,
-    215, 73, 222, 232, 1, 213, 210, 215, 109, 222, 232, 1, 213, 210, 201, 78,
-    222, 232, 1, 213, 210, 201, 66, 222, 232, 1, 213, 210, 240, 41, 222, 232,
-    1, 213, 210, 240, 25, 222, 232, 1, 213, 210, 216, 86, 222, 232, 1, 239,
-    28, 222, 232, 1, 149, 222, 232, 1, 202, 170, 204, 108, 222, 232, 1, 202,
-    170, 203, 117, 222, 232, 1, 213, 210, 239, 176, 222, 232, 1, 216, 50,
-    222, 232, 1, 248, 116, 222, 232, 1, 212, 117, 222, 232, 1, 212, 235, 204,
-    108, 222, 232, 1, 235, 52, 203, 117, 222, 232, 1, 212, 235, 203, 117,
-    222, 232, 1, 235, 52, 204, 108, 222, 232, 1, 213, 210, 248, 197, 222,
-    232, 1, 218, 251, 222, 232, 1, 196, 3, 222, 232, 1, 222, 8, 222, 68, 222,
-    232, 1, 222, 8, 221, 223, 222, 232, 1, 197, 34, 222, 232, 1, 208, 211,
-    207, 50, 222, 232, 1, 208, 211, 205, 80, 222, 232, 1, 205, 201, 204, 108,
-    222, 232, 1, 231, 194, 204, 108, 222, 232, 1, 213, 210, 222, 37, 222,
-    232, 1, 72, 222, 232, 1, 231, 194, 203, 117, 222, 232, 236, 247, 222,
-    232, 18, 2, 63, 222, 232, 18, 2, 220, 82, 225, 17, 222, 232, 18, 2, 252,
-    168, 222, 232, 18, 2, 251, 123, 222, 232, 18, 2, 68, 222, 232, 18, 2,
-    226, 120, 222, 232, 18, 2, 196, 148, 222, 232, 18, 2, 195, 168, 222, 232,
-    18, 2, 66, 222, 232, 18, 2, 199, 245, 222, 232, 2, 213, 210, 199, 7, 222,
-    232, 18, 2, 220, 82, 223, 245, 222, 232, 207, 100, 2, 222, 7, 222, 232,
-    207, 100, 2, 215, 73, 222, 232, 18, 2, 69, 222, 232, 18, 2, 237, 33, 222,
-    232, 18, 2, 72, 222, 232, 18, 2, 250, 122, 222, 232, 18, 2, 251, 200,
-    222, 232, 224, 12, 172, 222, 232, 152, 220, 82, 237, 14, 222, 232, 152,
-    220, 82, 202, 169, 222, 232, 152, 220, 82, 202, 122, 222, 232, 152, 220,
-    82, 247, 91, 222, 232, 247, 139, 78, 222, 232, 216, 196, 222, 232, 17,
-    195, 79, 222, 232, 17, 100, 222, 232, 17, 102, 222, 232, 17, 134, 222,
-    232, 17, 136, 222, 232, 17, 146, 222, 232, 17, 167, 222, 232, 17, 178,
-    222, 232, 17, 171, 222, 232, 17, 182, 222, 232, 231, 194, 216, 50, 222,
-    232, 231, 194, 218, 251, 222, 232, 1, 224, 119, 233, 144, 222, 232, 1,
-    224, 119, 215, 73, 82, 5, 214, 127, 82, 117, 233, 78, 196, 16, 219, 96,
-    201, 119, 63, 82, 117, 233, 78, 196, 16, 219, 96, 255, 169, 209, 237,
-    249, 11, 166, 82, 117, 233, 78, 196, 16, 219, 96, 255, 169, 233, 78, 201,
-    99, 166, 82, 117, 84, 196, 16, 219, 96, 219, 209, 166, 82, 117, 244, 199,
-    196, 16, 219, 96, 207, 57, 166, 82, 117, 247, 111, 196, 16, 219, 96, 212,
-    224, 207, 43, 166, 82, 117, 196, 16, 219, 96, 201, 99, 207, 43, 166, 82,
-    117, 208, 177, 207, 42, 82, 117, 248, 24, 196, 16, 219, 95, 82, 117, 248,
-    138, 206, 192, 196, 16, 219, 95, 82, 117, 226, 22, 201, 98, 82, 117, 239,
-    219, 201, 99, 248, 23, 82, 117, 207, 42, 82, 117, 215, 78, 207, 42, 82,
-    117, 201, 99, 207, 42, 82, 117, 215, 78, 201, 99, 207, 42, 82, 117, 210,
-    5, 245, 89, 205, 97, 207, 42, 82, 117, 210, 81, 233, 112, 207, 42, 82,
-    117, 247, 111, 255, 173, 209, 145, 219, 208, 181, 247, 142, 82, 117, 233,
-    78, 201, 98, 82, 221, 247, 2, 247, 14, 209, 144, 82, 221, 247, 2, 222,
-    120, 209, 144, 82, 250, 174, 2, 207, 53, 234, 51, 255, 174, 209, 144, 82,
-    250, 174, 2, 255, 171, 161, 82, 250, 174, 2, 208, 148, 201, 93, 82, 2,
-    210, 185, 239, 43, 234, 50, 82, 2, 210, 185, 239, 43, 233, 146, 82, 2,
-    210, 185, 239, 43, 233, 79, 82, 2, 210, 185, 217, 237, 234, 50, 82, 2,
-    210, 185, 217, 237, 233, 146, 82, 2, 210, 185, 239, 43, 210, 185, 217,
-    236, 82, 17, 195, 79, 82, 17, 100, 82, 17, 102, 82, 17, 134, 82, 17, 136,
-    82, 17, 146, 82, 17, 167, 82, 17, 178, 82, 17, 171, 82, 17, 182, 82, 17,
-    157, 100, 82, 17, 157, 102, 82, 17, 157, 134, 82, 17, 157, 136, 82, 17,
-    157, 146, 82, 17, 157, 167, 82, 17, 157, 178, 82, 17, 157, 171, 82, 17,
-    157, 182, 82, 17, 157, 195, 79, 82, 117, 248, 26, 209, 144, 82, 117, 217,
-    62, 247, 209, 215, 90, 195, 13, 82, 117, 247, 111, 255, 173, 209, 145,
-    247, 210, 219, 41, 247, 142, 82, 117, 217, 62, 247, 209, 207, 54, 209,
-    144, 82, 117, 245, 104, 219, 95, 82, 117, 201, 114, 255, 170, 82, 117,
-    233, 61, 209, 145, 233, 18, 82, 117, 233, 61, 209, 145, 233, 24, 82, 117,
-    251, 98, 224, 136, 233, 18, 82, 117, 251, 98, 224, 136, 233, 24, 82, 2,
-    196, 91, 201, 97, 82, 2, 220, 38, 201, 97, 82, 1, 155, 82, 1, 224, 146,
-    82, 1, 234, 123, 82, 1, 233, 230, 82, 1, 217, 71, 82, 1, 247, 174, 82, 1,
-    247, 16, 82, 1, 225, 214, 82, 1, 215, 109, 82, 1, 201, 78, 82, 1, 201,
-    66, 82, 1, 240, 41, 82, 1, 240, 25, 82, 1, 216, 86, 82, 1, 189, 82, 1,
-    202, 233, 82, 1, 240, 136, 82, 1, 239, 176, 82, 1, 176, 82, 1, 161, 82,
-    1, 213, 6, 82, 1, 249, 145, 82, 1, 248, 197, 82, 1, 166, 82, 1, 201, 113,
-    82, 1, 201, 103, 82, 1, 237, 156, 82, 1, 237, 150, 82, 1, 197, 166, 82,
-    1, 195, 74, 82, 1, 195, 115, 82, 1, 255, 176, 82, 1, 164, 82, 1, 169, 82,
-    1, 172, 82, 1, 207, 50, 82, 1, 205, 80, 82, 1, 183, 82, 1, 142, 82, 1,
-    63, 82, 1, 223, 201, 82, 1, 235, 97, 169, 82, 1, 224, 36, 82, 1, 209,
-    181, 82, 18, 2, 252, 168, 82, 18, 2, 68, 82, 18, 2, 226, 120, 82, 18, 2,
-    66, 82, 18, 2, 199, 245, 82, 18, 2, 110, 144, 82, 18, 2, 110, 209, 182,
-    82, 18, 2, 110, 159, 82, 18, 2, 110, 222, 38, 82, 18, 2, 69, 82, 18, 2,
-    237, 54, 82, 18, 2, 72, 82, 18, 2, 214, 102, 82, 2, 209, 243, 204, 173,
-    217, 72, 209, 232, 82, 2, 209, 237, 249, 10, 82, 18, 2, 210, 89, 68, 82,
-    18, 2, 210, 89, 226, 120, 82, 2, 215, 90, 195, 14, 217, 245, 240, 136,
-    82, 2, 205, 215, 222, 199, 82, 117, 232, 227, 82, 117, 213, 202, 82, 2,
-    222, 202, 209, 144, 82, 2, 196, 96, 209, 144, 82, 2, 222, 203, 201, 114,
-    247, 142, 82, 2, 219, 211, 247, 142, 82, 2, 233, 82, 247, 143, 210, 79,
-    82, 2, 233, 82, 219, 197, 210, 79, 82, 2, 226, 17, 219, 211, 247, 142,
-    82, 204, 152, 2, 222, 203, 201, 114, 247, 142, 82, 204, 152, 2, 219, 211,
-    247, 142, 82, 204, 152, 2, 226, 17, 219, 211, 247, 142, 82, 204, 152, 1,
-    155, 82, 204, 152, 1, 224, 146, 82, 204, 152, 1, 234, 123, 82, 204, 152,
-    1, 233, 230, 82, 204, 152, 1, 217, 71, 82, 204, 152, 1, 247, 174, 82,
-    204, 152, 1, 247, 16, 82, 204, 152, 1, 225, 214, 82, 204, 152, 1, 215,
-    109, 82, 204, 152, 1, 201, 78, 82, 204, 152, 1, 201, 66, 82, 204, 152, 1,
-    240, 41, 82, 204, 152, 1, 240, 25, 82, 204, 152, 1, 216, 86, 82, 204,
-    152, 1, 189, 82, 204, 152, 1, 202, 233, 82, 204, 152, 1, 240, 136, 82,
-    204, 152, 1, 239, 176, 82, 204, 152, 1, 176, 82, 204, 152, 1, 161, 82,
-    204, 152, 1, 213, 6, 82, 204, 152, 1, 249, 145, 82, 204, 152, 1, 248,
-    197, 82, 204, 152, 1, 166, 82, 204, 152, 1, 201, 113, 82, 204, 152, 1,
-    201, 103, 82, 204, 152, 1, 237, 156, 82, 204, 152, 1, 237, 150, 82, 204,
-    152, 1, 197, 166, 82, 204, 152, 1, 195, 74, 82, 204, 152, 1, 195, 115,
-    82, 204, 152, 1, 255, 176, 82, 204, 152, 1, 164, 82, 204, 152, 1, 169,
-    82, 204, 152, 1, 172, 82, 204, 152, 1, 207, 50, 82, 204, 152, 1, 205, 80,
-    82, 204, 152, 1, 183, 82, 204, 152, 1, 142, 82, 204, 152, 1, 63, 82, 204,
-    152, 1, 223, 201, 82, 204, 152, 1, 235, 97, 197, 166, 82, 204, 152, 1,
-    235, 97, 164, 82, 204, 152, 1, 235, 97, 169, 82, 223, 188, 209, 141, 224,
-    146, 82, 223, 188, 209, 141, 224, 147, 247, 210, 219, 41, 247, 142, 82,
-    247, 126, 2, 85, 249, 0, 82, 247, 126, 2, 175, 249, 0, 82, 247, 126, 2,
-    247, 130, 203, 58, 82, 247, 126, 2, 208, 176, 255, 175, 82, 16, 237, 217,
-    248, 21, 82, 16, 210, 184, 209, 244, 82, 16, 213, 229, 234, 49, 82, 16,
-    210, 184, 209, 245, 210, 81, 233, 111, 82, 16, 212, 224, 161, 82, 16,
-    216, 28, 248, 21, 82, 16, 216, 28, 248, 22, 215, 78, 255, 172, 82, 16,
-    216, 28, 248, 22, 233, 80, 255, 172, 82, 16, 216, 28, 248, 22, 247, 210,
-    255, 172, 82, 2, 210, 185, 217, 237, 210, 185, 239, 42, 82, 2, 210, 185,
-    217, 237, 233, 79, 82, 117, 248, 25, 206, 192, 233, 193, 219, 96, 210,
-    80, 82, 117, 218, 253, 196, 16, 233, 193, 219, 96, 210, 80, 82, 117, 215,
-    78, 201, 98, 82, 117, 84, 248, 54, 209, 234, 196, 16, 219, 96, 219, 209,
-    166, 82, 117, 244, 199, 248, 54, 209, 234, 196, 16, 219, 96, 207, 57,
-    166, 210, 21, 204, 69, 55, 222, 183, 204, 69, 55, 210, 21, 204, 69, 2, 3,
-    238, 250, 222, 183, 204, 69, 2, 3, 238, 250, 82, 117, 222, 194, 219, 212,
-    209, 144, 82, 117, 201, 209, 219, 212, 209, 144, 75, 1, 155, 75, 1, 224,
-    146, 75, 1, 234, 123, 75, 1, 233, 230, 75, 1, 217, 71, 75, 1, 247, 174,
-    75, 1, 247, 16, 75, 1, 225, 214, 75, 1, 225, 180, 75, 1, 215, 109, 75, 1,
-    216, 52, 75, 1, 201, 78, 75, 1, 201, 66, 75, 1, 240, 41, 75, 1, 240, 25,
-    75, 1, 216, 86, 75, 1, 189, 75, 1, 202, 233, 75, 1, 240, 136, 75, 1, 239,
-    176, 75, 1, 176, 75, 1, 161, 75, 1, 213, 6, 75, 1, 249, 145, 75, 1, 248,
-    197, 75, 1, 166, 75, 1, 164, 75, 1, 169, 75, 1, 172, 75, 1, 197, 166, 75,
-    1, 183, 75, 1, 142, 75, 1, 222, 37, 75, 1, 63, 75, 1, 207, 25, 63, 75, 1,
-    68, 75, 1, 226, 120, 75, 1, 66, 75, 1, 199, 245, 75, 1, 69, 75, 1, 218,
-    216, 69, 75, 1, 72, 75, 1, 250, 150, 75, 18, 2, 203, 120, 252, 168, 75,
-    18, 2, 252, 168, 75, 18, 2, 68, 75, 18, 2, 226, 120, 75, 18, 2, 66, 75,
-    18, 2, 199, 245, 75, 18, 2, 69, 75, 18, 2, 251, 200, 75, 18, 2, 218, 216,
-    226, 120, 75, 18, 2, 218, 216, 72, 75, 18, 2, 237, 136, 57, 75, 2, 251,
-    51, 75, 2, 76, 60, 75, 2, 199, 2, 75, 2, 199, 7, 75, 2, 250, 199, 75,
-    108, 2, 219, 194, 164, 75, 108, 2, 219, 194, 169, 75, 108, 2, 219, 194,
-    197, 166, 75, 108, 2, 219, 194, 142, 75, 1, 233, 96, 183, 75, 17, 195,
-    79, 75, 17, 100, 75, 17, 102, 75, 17, 134, 75, 17, 136, 75, 17, 146, 75,
-    17, 167, 75, 17, 178, 75, 17, 171, 75, 17, 182, 75, 2, 222, 47, 208, 132,
-    75, 2, 208, 132, 75, 16, 222, 0, 75, 16, 244, 152, 75, 16, 251, 221, 75,
-    16, 234, 29, 75, 1, 207, 50, 75, 1, 205, 80, 75, 1, 110, 144, 75, 1, 110,
-    209, 182, 75, 1, 110, 159, 75, 1, 110, 222, 38, 75, 18, 2, 110, 144, 75,
-    18, 2, 110, 209, 182, 75, 18, 2, 110, 159, 75, 18, 2, 110, 222, 38, 75,
-    1, 218, 216, 217, 71, 75, 1, 218, 216, 225, 180, 75, 1, 218, 216, 249,
-    45, 75, 1, 218, 216, 249, 40, 75, 108, 2, 218, 216, 219, 194, 176, 75,
-    108, 2, 218, 216, 219, 194, 166, 75, 108, 2, 218, 216, 219, 194, 172, 75,
-    1, 207, 56, 224, 248, 207, 50, 75, 18, 2, 207, 56, 224, 248, 236, 116,
-    75, 152, 117, 207, 56, 224, 248, 232, 161, 75, 152, 117, 207, 56, 224,
-    248, 224, 210, 212, 234, 75, 1, 197, 86, 211, 179, 224, 248, 202, 233,
-    75, 1, 197, 86, 211, 179, 224, 248, 211, 185, 75, 18, 2, 197, 86, 211,
-    179, 224, 248, 236, 116, 75, 18, 2, 197, 86, 211, 179, 224, 248, 200, 99,
-    75, 2, 197, 86, 211, 179, 224, 248, 202, 10, 75, 2, 197, 86, 211, 179,
-    224, 248, 202, 9, 75, 2, 197, 86, 211, 179, 224, 248, 202, 8, 75, 2, 197,
-    86, 211, 179, 224, 248, 202, 7, 75, 2, 197, 86, 211, 179, 224, 248, 202,
-    6, 75, 1, 237, 67, 211, 179, 224, 248, 216, 86, 75, 1, 237, 67, 211, 179,
-    224, 248, 195, 175, 75, 1, 237, 67, 211, 179, 224, 248, 233, 195, 75, 18,
-    2, 234, 44, 224, 248, 68, 75, 18, 2, 224, 215, 214, 164, 75, 18, 2, 224,
-    215, 66, 75, 18, 2, 224, 215, 237, 54, 75, 1, 207, 25, 155, 75, 1, 207,
-    25, 224, 146, 75, 1, 207, 25, 234, 123, 75, 1, 207, 25, 247, 174, 75, 1,
-    207, 25, 195, 115, 75, 1, 207, 25, 215, 109, 75, 1, 207, 25, 240, 136,
-    75, 1, 207, 25, 176, 75, 1, 207, 25, 213, 6, 75, 1, 207, 25, 235, 239,
-    75, 1, 207, 25, 249, 145, 75, 1, 207, 25, 202, 233, 75, 1, 207, 25, 142,
-    75, 108, 2, 207, 25, 219, 194, 197, 166, 75, 18, 2, 207, 25, 252, 168,
-    75, 18, 2, 207, 25, 69, 75, 18, 2, 207, 25, 237, 136, 57, 75, 18, 2, 207,
-    25, 48, 196, 148, 75, 2, 207, 25, 202, 9, 75, 2, 207, 25, 202, 8, 75, 2,
-    207, 25, 202, 6, 75, 2, 207, 25, 202, 5, 75, 2, 207, 25, 241, 91, 202, 9,
-    75, 2, 207, 25, 241, 91, 202, 8, 75, 2, 207, 25, 241, 91, 236, 233, 202,
-    11, 75, 1, 209, 119, 213, 212, 235, 239, 75, 2, 209, 119, 213, 212, 202,
-    6, 75, 207, 25, 17, 195, 79, 75, 207, 25, 17, 100, 75, 207, 25, 17, 102,
-    75, 207, 25, 17, 134, 75, 207, 25, 17, 136, 75, 207, 25, 17, 146, 75,
-    207, 25, 17, 167, 75, 207, 25, 17, 178, 75, 207, 25, 17, 171, 75, 207,
-    25, 17, 182, 75, 2, 224, 139, 202, 10, 75, 2, 224, 139, 202, 8, 75, 18,
-    2, 251, 186, 63, 75, 18, 2, 251, 186, 251, 200, 75, 16, 207, 25, 100, 75,
-    16, 207, 25, 236, 89, 94, 6, 1, 251, 106, 94, 6, 1, 249, 93, 94, 6, 1,
-    234, 93, 94, 6, 1, 239, 6, 94, 6, 1, 236, 230, 94, 6, 1, 199, 16, 94, 6,
-    1, 195, 82, 94, 6, 1, 203, 114, 94, 6, 1, 226, 86, 94, 6, 1, 225, 17, 94,
-    6, 1, 222, 222, 94, 6, 1, 220, 62, 94, 6, 1, 217, 211, 94, 6, 1, 214,
-    119, 94, 6, 1, 213, 157, 94, 6, 1, 195, 70, 94, 6, 1, 210, 229, 94, 6, 1,
-    208, 219, 94, 6, 1, 203, 101, 94, 6, 1, 200, 72, 94, 6, 1, 212, 254, 94,
-    6, 1, 224, 134, 94, 6, 1, 233, 221, 94, 6, 1, 211, 144, 94, 6, 1, 206,
-    211, 94, 6, 1, 245, 62, 94, 6, 1, 247, 142, 94, 6, 1, 225, 162, 94, 6, 1,
-    245, 0, 94, 6, 1, 247, 0, 94, 6, 1, 196, 206, 94, 6, 1, 225, 177, 94, 6,
-    1, 232, 242, 94, 6, 1, 232, 147, 94, 6, 1, 232, 58, 94, 6, 1, 197, 109,
-    94, 6, 1, 232, 175, 94, 6, 1, 231, 181, 94, 6, 1, 196, 5, 94, 6, 1, 251,
-    234, 94, 1, 251, 106, 94, 1, 249, 93, 94, 1, 234, 93, 94, 1, 239, 6, 94,
-    1, 236, 230, 94, 1, 199, 16, 94, 1, 195, 82, 94, 1, 203, 114, 94, 1, 226,
-    86, 94, 1, 225, 17, 94, 1, 222, 222, 94, 1, 220, 62, 94, 1, 217, 211, 94,
-    1, 214, 119, 94, 1, 213, 157, 94, 1, 195, 70, 94, 1, 210, 229, 94, 1,
-    208, 219, 94, 1, 203, 101, 94, 1, 200, 72, 94, 1, 212, 254, 94, 1, 224,
-    134, 94, 1, 233, 221, 94, 1, 211, 144, 94, 1, 206, 211, 94, 1, 245, 62,
-    94, 1, 247, 142, 94, 1, 225, 162, 94, 1, 245, 0, 94, 1, 247, 0, 94, 1,
-    196, 206, 94, 1, 225, 177, 94, 1, 232, 242, 94, 1, 232, 147, 94, 1, 232,
-    58, 94, 1, 197, 109, 94, 1, 232, 175, 94, 1, 231, 181, 94, 1, 235, 153,
-    94, 1, 196, 5, 94, 1, 236, 249, 94, 1, 163, 234, 93, 94, 1, 251, 194, 94,
-    213, 154, 207, 90, 73, 1, 94, 217, 211, 94, 1, 251, 234, 94, 1, 232, 173,
-    55, 94, 1, 223, 73, 55, 29, 137, 224, 48, 29, 137, 205, 72, 29, 137, 216,
-    208, 29, 137, 202, 97, 29, 137, 205, 61, 29, 137, 210, 54, 29, 137, 219,
-    56, 29, 137, 212, 206, 29, 137, 205, 69, 29, 137, 206, 52, 29, 137, 205,
-    66, 29, 137, 226, 143, 29, 137, 245, 6, 29, 137, 205, 76, 29, 137, 245,
-    71, 29, 137, 224, 122, 29, 137, 202, 191, 29, 137, 212, 244, 29, 137,
-    232, 55, 29, 137, 216, 204, 29, 137, 205, 70, 29, 137, 216, 198, 29, 137,
-    216, 202, 29, 137, 202, 94, 29, 137, 210, 42, 29, 137, 205, 68, 29, 137,
-    210, 52, 29, 137, 224, 254, 29, 137, 219, 49, 29, 137, 225, 1, 29, 137,
-    212, 201, 29, 137, 212, 199, 29, 137, 212, 187, 29, 137, 212, 195, 29,
-    137, 212, 193, 29, 137, 212, 190, 29, 137, 212, 192, 29, 137, 212, 189,
-    29, 137, 212, 194, 29, 137, 212, 204, 29, 137, 212, 205, 29, 137, 212,
-    188, 29, 137, 212, 198, 29, 137, 224, 255, 29, 137, 224, 253, 29, 137,
-    206, 45, 29, 137, 206, 43, 29, 137, 206, 35, 29, 137, 206, 38, 29, 137,
-    206, 44, 29, 137, 206, 40, 29, 137, 206, 39, 29, 137, 206, 37, 29, 137,
-    206, 48, 29, 137, 206, 50, 29, 137, 206, 51, 29, 137, 206, 46, 29, 137,
-    206, 36, 29, 137, 206, 41, 29, 137, 206, 49, 29, 137, 245, 53, 29, 137,
-    245, 51, 29, 137, 247, 29, 29, 137, 247, 27, 29, 137, 213, 174, 29, 137,
-    226, 138, 29, 137, 226, 129, 29, 137, 226, 137, 29, 137, 226, 134, 29,
-    137, 226, 132, 29, 137, 226, 136, 29, 137, 205, 73, 29, 137, 226, 141,
-    29, 137, 226, 142, 29, 137, 226, 130, 29, 137, 226, 135, 29, 137, 196,
-    46, 29, 137, 245, 5, 29, 137, 245, 54, 29, 137, 245, 52, 29, 137, 247,
-    30, 29, 137, 247, 28, 29, 137, 245, 69, 29, 137, 245, 70, 29, 137, 245,
-    55, 29, 137, 247, 31, 29, 137, 212, 242, 29, 137, 225, 0, 29, 137, 205,
-    74, 29, 137, 196, 52, 29, 137, 224, 39, 29, 137, 216, 200, 29, 137, 216,
-    206, 29, 137, 216, 205, 29, 137, 202, 91, 29, 137, 235, 134, 29, 225,
-    102, 235, 134, 29, 225, 102, 63, 29, 225, 102, 251, 245, 29, 225, 102,
-    164, 29, 225, 102, 196, 118, 29, 225, 102, 236, 192, 29, 225, 102, 69,
-    29, 225, 102, 196, 56, 29, 225, 102, 196, 69, 29, 225, 102, 72, 29, 225,
-    102, 197, 166, 29, 225, 102, 197, 157, 29, 225, 102, 214, 164, 29, 225,
-    102, 196, 3, 29, 225, 102, 66, 29, 225, 102, 197, 91, 29, 225, 102, 197,
-    109, 29, 225, 102, 197, 70, 29, 225, 102, 195, 217, 29, 225, 102, 236,
-    116, 29, 225, 102, 196, 24, 29, 225, 102, 68, 29, 225, 102, 255, 164, 29,
-    225, 102, 255, 163, 29, 225, 102, 196, 132, 29, 225, 102, 196, 130, 29,
-    225, 102, 236, 190, 29, 225, 102, 236, 189, 29, 225, 102, 236, 191, 29,
-    225, 102, 196, 55, 29, 225, 102, 196, 54, 29, 225, 102, 215, 18, 29, 225,
-    102, 215, 19, 29, 225, 102, 215, 12, 29, 225, 102, 215, 17, 29, 225, 102,
-    215, 15, 29, 225, 102, 195, 247, 29, 225, 102, 195, 246, 29, 225, 102,
-    195, 245, 29, 225, 102, 195, 248, 29, 225, 102, 195, 249, 29, 225, 102,
-    200, 172, 29, 225, 102, 200, 171, 29, 225, 102, 200, 169, 29, 225, 102,
-    200, 165, 29, 225, 102, 200, 166, 29, 225, 102, 195, 212, 29, 225, 102,
-    195, 209, 29, 225, 102, 195, 210, 29, 225, 102, 195, 204, 29, 225, 102,
-    195, 205, 29, 225, 102, 195, 206, 29, 225, 102, 195, 208, 29, 225, 102,
-    236, 110, 29, 225, 102, 236, 112, 29, 225, 102, 196, 23, 29, 225, 102,
-    230, 244, 29, 225, 102, 230, 236, 29, 225, 102, 230, 239, 29, 225, 102,
-    230, 237, 29, 225, 102, 230, 241, 29, 225, 102, 230, 243, 29, 225, 102,
-    251, 6, 29, 225, 102, 251, 3, 29, 225, 102, 251, 1, 29, 225, 102, 251, 2,
-    29, 225, 102, 205, 77, 29, 225, 102, 255, 165, 29, 225, 102, 196, 131,
-    29, 225, 102, 196, 53, 29, 225, 102, 215, 14, 29, 225, 102, 215, 13, 29,
-    116, 224, 48, 29, 116, 205, 72, 29, 116, 224, 41, 29, 116, 216, 208, 29,
-    116, 216, 206, 29, 116, 216, 205, 29, 116, 202, 97, 29, 116, 210, 54, 29,
-    116, 210, 49, 29, 116, 210, 46, 29, 116, 210, 39, 29, 116, 210, 34, 29,
-    116, 210, 29, 29, 116, 210, 40, 29, 116, 210, 52, 29, 116, 219, 56, 29,
-    116, 212, 206, 29, 116, 212, 195, 29, 116, 206, 52, 29, 116, 205, 66, 29,
-    116, 226, 143, 29, 116, 245, 6, 29, 116, 245, 71, 29, 116, 224, 122, 29,
-    116, 202, 191, 29, 116, 212, 244, 29, 116, 232, 55, 29, 116, 224, 42, 29,
-    116, 224, 40, 29, 116, 216, 204, 29, 116, 216, 198, 29, 116, 216, 200,
-    29, 116, 216, 203, 29, 116, 216, 199, 29, 116, 202, 94, 29, 116, 202, 91,
-    29, 116, 210, 47, 29, 116, 210, 42, 29, 116, 210, 28, 29, 116, 210, 27,
-    29, 116, 205, 68, 29, 116, 210, 44, 29, 116, 210, 43, 29, 116, 210, 36,
-    29, 116, 210, 38, 29, 116, 210, 51, 29, 116, 210, 31, 29, 116, 210, 41,
-    29, 116, 210, 50, 29, 116, 210, 26, 29, 116, 219, 52, 29, 116, 219, 47,
-    29, 116, 219, 49, 29, 116, 219, 46, 29, 116, 219, 44, 29, 116, 219, 50,
-    29, 116, 219, 55, 29, 116, 219, 53, 29, 116, 225, 1, 29, 116, 212, 197,
-    29, 116, 212, 198, 29, 116, 212, 203, 29, 116, 224, 255, 29, 116, 206,
-    45, 29, 116, 206, 35, 29, 116, 206, 38, 29, 116, 206, 40, 29, 116, 213,
-    174, 29, 116, 226, 138, 29, 116, 226, 131, 29, 116, 205, 73, 29, 116,
-    226, 139, 29, 116, 196, 46, 29, 116, 196, 40, 29, 116, 196, 41, 29, 116,
-    212, 242, 29, 116, 225, 0, 29, 116, 232, 53, 29, 116, 232, 51, 29, 116,
-    232, 54, 29, 116, 232, 52, 29, 116, 196, 52, 29, 116, 224, 44, 29, 116,
-    224, 43, 29, 116, 224, 47, 29, 116, 224, 45, 29, 116, 224, 46, 29, 116,
-    205, 70, 35, 5, 142, 35, 5, 231, 75, 35, 5, 232, 71, 35, 5, 232, 246, 35,
-    5, 232, 118, 35, 5, 232, 147, 35, 5, 231, 193, 35, 5, 231, 184, 35, 5,
-    172, 35, 5, 221, 191, 35, 5, 222, 109, 35, 5, 223, 82, 35, 5, 222, 188,
-    35, 5, 222, 197, 35, 5, 222, 7, 35, 5, 221, 159, 35, 5, 232, 80, 35, 5,
-    232, 74, 35, 5, 232, 76, 35, 5, 232, 79, 35, 5, 232, 77, 35, 5, 232, 78,
-    35, 5, 232, 75, 35, 5, 232, 73, 35, 5, 166, 35, 5, 218, 145, 35, 5, 219,
-    78, 35, 5, 220, 119, 35, 5, 219, 188, 35, 5, 219, 207, 35, 5, 218, 251,
-    35, 5, 218, 72, 35, 5, 203, 227, 35, 5, 203, 221, 35, 5, 203, 223, 35, 5,
-    203, 226, 35, 5, 203, 224, 35, 5, 203, 225, 35, 5, 203, 222, 35, 5, 203,
-    220, 35, 5, 169, 35, 5, 209, 140, 35, 5, 210, 72, 35, 5, 210, 244, 35, 5,
-    210, 155, 35, 5, 210, 183, 35, 5, 209, 232, 35, 5, 209, 98, 35, 5, 183,
-    35, 5, 204, 172, 35, 5, 206, 112, 35, 5, 209, 13, 35, 5, 208, 129, 35, 5,
-    208, 147, 35, 5, 205, 200, 35, 5, 204, 67, 35, 5, 207, 50, 35, 5, 206,
-    151, 35, 5, 206, 223, 35, 5, 207, 45, 35, 5, 206, 253, 35, 5, 206, 255,
-    35, 5, 206, 198, 35, 5, 206, 130, 35, 5, 211, 159, 35, 5, 211, 97, 35, 5,
-    211, 121, 35, 5, 211, 158, 35, 5, 211, 138, 35, 5, 211, 139, 35, 5, 211,
-    109, 35, 5, 211, 108, 35, 5, 211, 50, 35, 5, 211, 46, 35, 5, 211, 49, 35,
-    5, 211, 47, 35, 5, 211, 48, 35, 5, 211, 135, 35, 5, 211, 127, 35, 5, 211,
-    130, 35, 5, 211, 134, 35, 5, 211, 131, 35, 5, 211, 132, 35, 5, 211, 129,
-    35, 5, 211, 126, 35, 5, 211, 122, 35, 5, 211, 125, 35, 5, 211, 123, 35,
-    5, 211, 124, 35, 5, 249, 145, 35, 5, 248, 21, 35, 5, 248, 184, 35, 5,
-    249, 143, 35, 5, 248, 251, 35, 5, 249, 9, 35, 5, 248, 116, 35, 5, 247,
-    224, 35, 5, 199, 152, 35, 5, 197, 220, 35, 5, 199, 34, 35, 5, 199, 151,
-    35, 5, 199, 113, 35, 5, 199, 118, 35, 5, 198, 248, 35, 5, 197, 209, 35,
-    5, 189, 35, 5, 201, 40, 35, 5, 202, 122, 35, 5, 203, 162, 35, 5, 203, 48,
-    35, 5, 203, 68, 35, 5, 149, 35, 5, 200, 245, 35, 5, 247, 174, 35, 5, 241,
-    41, 35, 5, 245, 11, 35, 5, 247, 173, 35, 5, 247, 49, 35, 5, 247, 57, 35,
-    5, 244, 182, 35, 5, 240, 254, 35, 5, 196, 208, 35, 5, 196, 177, 35, 5,
-    196, 196, 35, 5, 196, 207, 35, 5, 196, 201, 35, 5, 196, 202, 35, 5, 196,
-    185, 35, 5, 196, 184, 35, 5, 196, 170, 35, 5, 196, 166, 35, 5, 196, 169,
-    35, 5, 196, 167, 35, 5, 196, 168, 35, 5, 176, 35, 5, 215, 186, 35, 5,
-    216, 223, 35, 5, 217, 244, 35, 5, 217, 107, 35, 5, 217, 118, 35, 5, 216,
-    50, 35, 5, 215, 118, 35, 5, 215, 109, 35, 5, 215, 66, 35, 5, 215, 89, 35,
-    5, 215, 108, 35, 5, 215, 97, 35, 5, 215, 98, 35, 5, 215, 73, 35, 5, 215,
-    56, 35, 5, 233, 152, 63, 35, 5, 233, 152, 66, 35, 5, 233, 152, 68, 35, 5,
-    233, 152, 252, 168, 35, 5, 233, 152, 237, 54, 35, 5, 233, 152, 69, 35, 5,
-    233, 152, 72, 35, 5, 233, 152, 197, 166, 35, 5, 155, 35, 5, 223, 187, 35,
-    5, 224, 101, 35, 5, 225, 55, 35, 5, 224, 200, 35, 5, 224, 209, 35, 5,
-    224, 11, 35, 5, 224, 6, 35, 5, 223, 136, 35, 5, 223, 129, 35, 5, 223,
-    135, 35, 5, 223, 130, 35, 5, 223, 131, 35, 5, 223, 122, 35, 5, 223, 116,
-    35, 5, 223, 118, 35, 5, 223, 121, 35, 5, 223, 119, 35, 5, 223, 120, 35,
-    5, 223, 117, 35, 5, 223, 115, 35, 5, 223, 111, 35, 5, 223, 114, 35, 5,
-    223, 112, 35, 5, 223, 113, 35, 5, 197, 166, 35, 5, 196, 243, 35, 5, 197,
-    70, 35, 5, 197, 160, 35, 5, 197, 98, 35, 5, 197, 109, 35, 5, 197, 34, 35,
-    5, 197, 26, 35, 5, 212, 253, 63, 35, 5, 212, 253, 66, 35, 5, 212, 253,
-    68, 35, 5, 212, 253, 252, 168, 35, 5, 212, 253, 237, 54, 35, 5, 212, 253,
-    69, 35, 5, 212, 253, 72, 35, 5, 195, 115, 35, 5, 194, 255, 35, 5, 195,
-    33, 35, 5, 195, 113, 35, 5, 195, 85, 35, 5, 195, 88, 35, 5, 195, 11, 35,
-    5, 194, 242, 35, 5, 195, 74, 35, 5, 195, 51, 35, 5, 195, 60, 35, 5, 195,
-    73, 35, 5, 195, 64, 35, 5, 195, 65, 35, 5, 195, 57, 35, 5, 195, 42, 35,
-    5, 164, 35, 5, 195, 217, 35, 5, 196, 24, 35, 5, 196, 129, 35, 5, 196, 66,
-    35, 5, 196, 69, 35, 5, 196, 3, 35, 5, 195, 243, 35, 5, 240, 136, 35, 5,
-    237, 201, 35, 5, 239, 152, 35, 5, 240, 135, 35, 5, 239, 237, 35, 5, 239,
-    252, 35, 5, 239, 28, 35, 5, 237, 167, 35, 5, 240, 41, 35, 5, 240, 6, 35,
-    5, 240, 18, 35, 5, 240, 40, 35, 5, 240, 28, 35, 5, 240, 29, 35, 5, 240,
-    11, 35, 5, 239, 253, 35, 5, 225, 214, 35, 5, 225, 110, 35, 5, 225, 172,
-    35, 5, 225, 213, 35, 5, 225, 191, 35, 5, 225, 193, 35, 5, 225, 129, 35,
-    5, 225, 88, 35, 5, 234, 123, 35, 5, 233, 76, 35, 5, 233, 192, 35, 5, 234,
-    120, 35, 5, 234, 40, 35, 5, 234, 48, 35, 5, 233, 144, 35, 5, 233, 143,
-    35, 5, 233, 34, 35, 5, 233, 30, 35, 5, 233, 33, 35, 5, 233, 31, 35, 5,
-    233, 32, 35, 5, 234, 10, 35, 5, 233, 246, 35, 5, 234, 0, 35, 5, 234, 9,
-    35, 5, 234, 4, 35, 5, 234, 5, 35, 5, 233, 250, 35, 5, 233, 235, 35, 5,
-    202, 233, 35, 5, 202, 142, 35, 5, 202, 195, 35, 5, 202, 232, 35, 5, 202,
-    215, 35, 5, 202, 217, 35, 5, 202, 169, 35, 5, 202, 133, 35, 5, 247, 16,
-    35, 5, 245, 30, 35, 5, 245, 75, 35, 5, 247, 15, 35, 5, 245, 99, 35, 5,
-    245, 103, 35, 5, 245, 49, 35, 5, 245, 19, 35, 5, 213, 6, 35, 5, 212, 226,
-    35, 5, 212, 246, 35, 5, 213, 5, 35, 5, 212, 248, 35, 5, 212, 249, 35, 5,
-    212, 234, 35, 5, 212, 222, 35, 5, 201, 113, 35, 5, 201, 86, 35, 5, 201,
-    92, 35, 5, 201, 112, 35, 5, 201, 106, 35, 5, 201, 107, 35, 5, 201, 90,
-    35, 5, 201, 84, 35, 5, 200, 186, 35, 5, 200, 178, 35, 5, 200, 182, 35, 5,
-    200, 185, 35, 5, 200, 183, 35, 5, 200, 184, 35, 5, 200, 180, 35, 5, 200,
-    179, 35, 5, 235, 239, 35, 5, 234, 223, 35, 5, 235, 153, 35, 5, 235, 238,
-    35, 5, 235, 182, 35, 5, 235, 189, 35, 5, 235, 51, 35, 5, 234, 201, 35, 5,
-    161, 35, 5, 211, 227, 35, 5, 212, 220, 35, 5, 213, 243, 35, 5, 213, 79,
-    35, 5, 213, 92, 35, 5, 212, 117, 35, 5, 211, 185, 35, 5, 209, 88, 35, 5,
-    218, 61, 35, 5, 234, 195, 35, 38, 234, 36, 26, 18, 222, 158, 78, 35, 38,
-    18, 222, 158, 78, 35, 38, 234, 36, 78, 35, 208, 133, 78, 35, 197, 8, 35,
-    234, 217, 204, 226, 35, 244, 159, 35, 207, 105, 35, 244, 168, 35, 212,
-    32, 244, 168, 35, 211, 79, 78, 35, 213, 154, 207, 90, 35, 17, 100, 35,
-    17, 102, 35, 17, 134, 35, 17, 136, 35, 17, 146, 35, 17, 167, 35, 17, 178,
-    35, 17, 171, 35, 17, 182, 35, 31, 203, 23, 35, 31, 200, 234, 35, 31, 202,
-    177, 35, 31, 235, 14, 35, 31, 235, 145, 35, 31, 206, 13, 35, 31, 207, 65,
-    35, 31, 237, 20, 35, 31, 216, 174, 35, 31, 231, 57, 35, 31, 203, 24, 170,
-    35, 5, 208, 138, 218, 72, 35, 5, 218, 68, 35, 5, 218, 69, 35, 5, 218, 70,
-    35, 5, 208, 138, 247, 224, 35, 5, 247, 221, 35, 5, 247, 222, 35, 5, 247,
-    223, 35, 5, 208, 138, 234, 201, 35, 5, 234, 197, 35, 5, 234, 198, 35, 5,
-    234, 199, 35, 5, 208, 138, 211, 185, 35, 5, 211, 181, 35, 5, 211, 182,
-    35, 5, 211, 183, 35, 202, 12, 117, 196, 6, 35, 202, 12, 117, 239, 197,
-    35, 202, 12, 117, 210, 8, 35, 202, 12, 117, 206, 182, 210, 8, 35, 202,
-    12, 117, 239, 126, 35, 202, 12, 117, 224, 181, 35, 202, 12, 117, 245, 57,
-    35, 202, 12, 117, 232, 60, 35, 202, 12, 117, 239, 196, 35, 202, 12, 117,
-    223, 152, 95, 1, 63, 95, 1, 69, 95, 1, 68, 95, 1, 72, 95, 1, 66, 95, 1,
-    199, 230, 95, 1, 234, 123, 95, 1, 155, 95, 1, 234, 48, 95, 1, 233, 192,
-    95, 1, 233, 144, 95, 1, 233, 76, 95, 1, 233, 36, 95, 1, 142, 95, 1, 232,
-    147, 95, 1, 232, 71, 95, 1, 231, 193, 95, 1, 231, 75, 95, 1, 231, 44, 95,
-    1, 172, 95, 1, 222, 197, 95, 1, 222, 109, 95, 1, 222, 7, 95, 1, 221, 191,
-    95, 1, 221, 160, 95, 1, 166, 95, 1, 219, 207, 95, 1, 219, 78, 95, 1, 218,
-    251, 95, 1, 218, 145, 95, 1, 176, 95, 1, 231, 217, 95, 1, 217, 231, 95,
-    1, 217, 118, 95, 1, 216, 223, 95, 1, 216, 50, 95, 1, 215, 186, 95, 1,
-    215, 120, 95, 1, 211, 96, 95, 1, 211, 82, 95, 1, 211, 75, 95, 1, 211, 65,
-    95, 1, 211, 54, 95, 1, 211, 52, 95, 1, 183, 95, 1, 209, 80, 95, 1, 208,
-    147, 95, 1, 206, 112, 95, 1, 205, 200, 95, 1, 204, 172, 95, 1, 204, 72,
-    95, 1, 240, 136, 95, 1, 189, 95, 1, 239, 252, 95, 1, 203, 68, 95, 1, 239,
-    152, 95, 1, 202, 122, 95, 1, 239, 28, 95, 1, 237, 201, 95, 1, 237, 170,
-    95, 1, 239, 40, 95, 1, 202, 47, 95, 1, 202, 46, 95, 1, 202, 35, 95, 1,
-    202, 34, 95, 1, 202, 33, 95, 1, 202, 32, 95, 1, 201, 113, 95, 1, 201,
-    107, 95, 1, 201, 92, 95, 1, 201, 90, 95, 1, 201, 86, 95, 1, 201, 85, 95,
-    1, 197, 166, 95, 1, 197, 109, 95, 1, 197, 70, 95, 1, 197, 34, 95, 1, 196,
-    243, 95, 1, 196, 230, 95, 1, 164, 95, 1, 196, 69, 95, 1, 196, 24, 95, 1,
-    196, 3, 95, 1, 195, 217, 95, 1, 195, 176, 95, 1, 218, 79, 95, 4, 1, 196,
-    69, 95, 4, 1, 196, 24, 95, 4, 1, 196, 3, 95, 4, 1, 195, 217, 95, 4, 1,
-    195, 176, 95, 4, 1, 218, 79, 21, 22, 231, 7, 21, 22, 69, 21, 22, 252,
-    132, 21, 22, 68, 21, 22, 226, 120, 21, 22, 72, 21, 22, 214, 102, 21, 22,
-    196, 147, 214, 102, 21, 22, 92, 237, 54, 21, 22, 92, 68, 21, 22, 63, 21,
-    22, 252, 168, 21, 22, 197, 109, 21, 22, 197, 87, 197, 109, 21, 22, 197,
-    70, 21, 22, 197, 87, 197, 70, 21, 22, 197, 54, 21, 22, 197, 87, 197, 54,
-    21, 22, 197, 34, 21, 22, 197, 87, 197, 34, 21, 22, 197, 15, 21, 22, 197,
-    87, 197, 15, 21, 22, 217, 205, 197, 15, 21, 22, 197, 166, 21, 22, 197,
-    87, 197, 166, 21, 22, 197, 160, 21, 22, 197, 87, 197, 160, 21, 22, 217,
-    205, 197, 160, 21, 22, 251, 200, 21, 22, 196, 147, 197, 199, 21, 22, 233,
-    152, 204, 226, 21, 22, 48, 186, 21, 22, 48, 233, 100, 21, 22, 48, 248,
-    85, 157, 210, 2, 21, 22, 48, 201, 243, 157, 210, 2, 21, 22, 48, 53, 157,
-    210, 2, 21, 22, 48, 210, 2, 21, 22, 48, 52, 186, 21, 22, 48, 52, 206,
-    182, 83, 204, 183, 21, 22, 48, 112, 238, 253, 21, 22, 48, 206, 182, 231,
-    155, 106, 21, 22, 48, 212, 125, 21, 22, 48, 135, 203, 147, 21, 22, 236,
-    230, 21, 22, 226, 86, 21, 22, 214, 119, 21, 22, 251, 106, 21, 22, 213,
-    92, 21, 22, 213, 241, 21, 22, 212, 220, 21, 22, 212, 182, 21, 22, 212,
-    117, 21, 22, 212, 91, 21, 22, 196, 147, 212, 91, 21, 22, 92, 232, 118,
-    21, 22, 92, 232, 71, 21, 22, 161, 21, 22, 213, 243, 21, 22, 211, 183, 21,
-    22, 197, 87, 211, 183, 21, 22, 211, 181, 21, 22, 197, 87, 211, 181, 21,
-    22, 211, 180, 21, 22, 197, 87, 211, 180, 21, 22, 211, 178, 21, 22, 197,
-    87, 211, 178, 21, 22, 211, 177, 21, 22, 197, 87, 211, 177, 21, 22, 211,
-    185, 21, 22, 197, 87, 211, 185, 21, 22, 211, 184, 21, 22, 197, 87, 211,
-    184, 21, 22, 196, 147, 211, 184, 21, 22, 214, 3, 21, 22, 197, 87, 214, 3,
-    21, 22, 92, 233, 15, 21, 22, 203, 68, 21, 22, 203, 160, 21, 22, 202, 122,
-    21, 22, 202, 99, 21, 22, 149, 21, 22, 201, 247, 21, 22, 196, 147, 201,
-    247, 21, 22, 92, 239, 237, 21, 22, 92, 239, 152, 21, 22, 189, 21, 22,
-    203, 162, 21, 22, 200, 243, 21, 22, 197, 87, 200, 243, 21, 22, 200, 221,
-    21, 22, 197, 87, 200, 221, 21, 22, 200, 220, 21, 22, 197, 87, 200, 220,
-    21, 22, 102, 21, 22, 197, 87, 102, 21, 22, 200, 211, 21, 22, 197, 87,
-    200, 211, 21, 22, 200, 245, 21, 22, 197, 87, 200, 245, 21, 22, 200, 244,
-    21, 22, 197, 87, 200, 244, 21, 22, 217, 205, 200, 244, 21, 22, 203, 216,
-    21, 22, 201, 73, 21, 22, 201, 57, 21, 22, 201, 55, 21, 22, 201, 78, 21,
-    22, 224, 209, 21, 22, 225, 49, 21, 22, 224, 101, 21, 22, 224, 80, 21, 22,
-    224, 11, 21, 22, 223, 242, 21, 22, 196, 147, 223, 242, 21, 22, 155, 21,
-    22, 225, 55, 21, 22, 223, 131, 21, 22, 197, 87, 223, 131, 21, 22, 223,
-    129, 21, 22, 197, 87, 223, 129, 21, 22, 223, 128, 21, 22, 197, 87, 223,
-    128, 21, 22, 223, 126, 21, 22, 197, 87, 223, 126, 21, 22, 223, 125, 21,
-    22, 197, 87, 223, 125, 21, 22, 223, 136, 21, 22, 197, 87, 223, 136, 21,
-    22, 223, 135, 21, 22, 197, 87, 223, 135, 21, 22, 217, 205, 223, 135, 21,
-    22, 225, 80, 21, 22, 223, 137, 21, 22, 205, 158, 224, 193, 21, 22, 205,
-    158, 224, 81, 21, 22, 205, 158, 224, 1, 21, 22, 205, 158, 225, 33, 21,
-    22, 247, 57, 21, 22, 247, 172, 21, 22, 245, 11, 21, 22, 245, 1, 21, 22,
-    244, 182, 21, 22, 241, 117, 21, 22, 196, 147, 241, 117, 21, 22, 247, 174,
-    21, 22, 247, 173, 21, 22, 240, 252, 21, 22, 197, 87, 240, 252, 21, 22,
-    240, 250, 21, 22, 197, 87, 240, 250, 21, 22, 240, 249, 21, 22, 197, 87,
-    240, 249, 21, 22, 240, 248, 21, 22, 197, 87, 240, 248, 21, 22, 240, 247,
-    21, 22, 197, 87, 240, 247, 21, 22, 240, 254, 21, 22, 197, 87, 240, 254,
-    21, 22, 240, 253, 21, 22, 197, 87, 240, 253, 21, 22, 217, 205, 240, 253,
-    21, 22, 247, 207, 21, 22, 208, 178, 202, 235, 21, 22, 219, 207, 21, 22,
-    220, 118, 21, 22, 219, 78, 21, 22, 219, 40, 21, 22, 218, 251, 21, 22,
-    218, 195, 21, 22, 196, 147, 218, 195, 21, 22, 166, 21, 22, 220, 119, 21,
-    22, 218, 70, 21, 22, 197, 87, 218, 70, 21, 22, 218, 68, 21, 22, 197, 87,
-    218, 68, 21, 22, 218, 67, 21, 22, 197, 87, 218, 67, 21, 22, 218, 66, 21,
-    22, 197, 87, 218, 66, 21, 22, 218, 65, 21, 22, 197, 87, 218, 65, 21, 22,
-    218, 72, 21, 22, 197, 87, 218, 72, 21, 22, 218, 71, 21, 22, 197, 87, 218,
-    71, 21, 22, 217, 205, 218, 71, 21, 22, 221, 136, 21, 22, 197, 87, 221,
-    136, 21, 22, 219, 82, 21, 22, 250, 166, 221, 136, 21, 22, 208, 178, 221,
-    136, 21, 22, 217, 118, 21, 22, 217, 243, 21, 22, 216, 223, 21, 22, 216,
-    190, 21, 22, 216, 50, 21, 22, 216, 33, 21, 22, 196, 147, 216, 33, 21, 22,
-    176, 21, 22, 217, 244, 21, 22, 215, 116, 21, 22, 197, 87, 215, 116, 21,
-    22, 215, 118, 21, 22, 197, 87, 215, 118, 21, 22, 215, 117, 21, 22, 197,
-    87, 215, 117, 21, 22, 217, 205, 215, 117, 21, 22, 218, 55, 21, 22, 92,
-    217, 73, 21, 22, 216, 228, 21, 22, 222, 197, 21, 22, 223, 81, 21, 22,
-    222, 109, 21, 22, 222, 91, 21, 22, 222, 7, 21, 22, 221, 229, 21, 22, 196,
-    147, 221, 229, 21, 22, 172, 21, 22, 223, 82, 21, 22, 221, 157, 21, 22,
-    197, 87, 221, 157, 21, 22, 221, 156, 21, 22, 197, 87, 221, 156, 21, 22,
-    221, 155, 21, 22, 197, 87, 221, 155, 21, 22, 221, 154, 21, 22, 197, 87,
-    221, 154, 21, 22, 221, 153, 21, 22, 197, 87, 221, 153, 21, 22, 221, 159,
-    21, 22, 197, 87, 221, 159, 21, 22, 221, 158, 21, 22, 197, 87, 221, 158,
-    21, 22, 159, 21, 22, 197, 87, 159, 21, 22, 219, 194, 159, 21, 22, 208,
-    147, 21, 22, 209, 11, 21, 22, 206, 112, 21, 22, 206, 84, 21, 22, 205,
-    200, 21, 22, 205, 171, 21, 22, 196, 147, 205, 171, 21, 22, 183, 21, 22,
-    209, 13, 21, 22, 204, 62, 21, 22, 197, 87, 204, 62, 21, 22, 204, 56, 21,
-    22, 197, 87, 204, 56, 21, 22, 204, 55, 21, 22, 197, 87, 204, 55, 21, 22,
-    204, 50, 21, 22, 197, 87, 204, 50, 21, 22, 204, 49, 21, 22, 197, 87, 204,
-    49, 21, 22, 204, 67, 21, 22, 197, 87, 204, 67, 21, 22, 204, 66, 21, 22,
-    197, 87, 204, 66, 21, 22, 217, 205, 204, 66, 21, 22, 209, 80, 21, 22,
-    250, 166, 209, 80, 21, 22, 204, 68, 21, 22, 248, 133, 209, 80, 21, 22,
-    218, 188, 206, 7, 21, 22, 217, 205, 205, 252, 21, 22, 217, 205, 209, 78,
-    21, 22, 217, 205, 205, 96, 21, 22, 217, 205, 204, 175, 21, 22, 217, 205,
-    205, 251, 21, 22, 217, 205, 208, 150, 21, 22, 206, 255, 21, 22, 206, 223,
-    21, 22, 206, 218, 21, 22, 206, 198, 21, 22, 206, 190, 21, 22, 207, 50,
-    21, 22, 207, 45, 21, 22, 206, 127, 21, 22, 197, 87, 206, 127, 21, 22,
-    206, 126, 21, 22, 197, 87, 206, 126, 21, 22, 206, 125, 21, 22, 197, 87,
-    206, 125, 21, 22, 206, 124, 21, 22, 197, 87, 206, 124, 21, 22, 206, 123,
-    21, 22, 197, 87, 206, 123, 21, 22, 206, 130, 21, 22, 197, 87, 206, 130,
-    21, 22, 206, 129, 21, 22, 197, 87, 206, 129, 21, 22, 207, 52, 21, 22,
-    196, 69, 21, 22, 196, 127, 21, 22, 196, 24, 21, 22, 196, 14, 21, 22, 196,
-    3, 21, 22, 195, 237, 21, 22, 196, 147, 195, 237, 21, 22, 164, 21, 22,
-    196, 129, 21, 22, 195, 173, 21, 22, 197, 87, 195, 173, 21, 22, 195, 172,
-    21, 22, 197, 87, 195, 172, 21, 22, 195, 171, 21, 22, 197, 87, 195, 171,
-    21, 22, 195, 170, 21, 22, 197, 87, 195, 170, 21, 22, 195, 169, 21, 22,
-    197, 87, 195, 169, 21, 22, 195, 175, 21, 22, 197, 87, 195, 175, 21, 22,
-    195, 174, 21, 22, 197, 87, 195, 174, 21, 22, 217, 205, 195, 174, 21, 22,
-    196, 148, 21, 22, 248, 182, 196, 148, 21, 22, 197, 87, 196, 148, 21, 22,
-    208, 178, 196, 24, 21, 22, 210, 183, 21, 22, 211, 31, 210, 183, 21, 22,
-    197, 87, 222, 197, 21, 22, 210, 243, 21, 22, 210, 72, 21, 22, 210, 9, 21,
-    22, 209, 232, 21, 22, 209, 206, 21, 22, 197, 87, 222, 7, 21, 22, 169, 21,
-    22, 210, 244, 21, 22, 197, 87, 172, 21, 22, 209, 97, 21, 22, 197, 87,
-    209, 97, 21, 22, 144, 21, 22, 197, 87, 144, 21, 22, 219, 194, 144, 21,
-    22, 235, 189, 21, 22, 235, 236, 21, 22, 235, 153, 21, 22, 235, 139, 21,
-    22, 235, 51, 21, 22, 235, 40, 21, 22, 235, 239, 21, 22, 235, 238, 21, 22,
-    234, 200, 21, 22, 197, 87, 234, 200, 21, 22, 236, 49, 21, 22, 202, 217,
-    21, 22, 218, 53, 202, 217, 21, 22, 202, 195, 21, 22, 218, 53, 202, 195,
-    21, 22, 202, 189, 21, 22, 218, 53, 202, 189, 21, 22, 202, 169, 21, 22,
-    202, 164, 21, 22, 202, 233, 21, 22, 202, 232, 21, 22, 202, 132, 21, 22,
-    197, 87, 202, 132, 21, 22, 202, 235, 21, 22, 201, 64, 21, 22, 201, 62,
-    21, 22, 201, 61, 21, 22, 201, 66, 21, 22, 201, 67, 21, 22, 200, 204, 21,
-    22, 200, 203, 21, 22, 200, 202, 21, 22, 200, 206, 21, 22, 215, 137, 232,
-    147, 21, 22, 215, 137, 232, 71, 21, 22, 215, 137, 232, 43, 21, 22, 215,
-    137, 231, 193, 21, 22, 215, 137, 231, 166, 21, 22, 215, 137, 142, 21, 22,
-    215, 137, 232, 246, 21, 22, 215, 137, 233, 15, 21, 22, 215, 136, 233, 15,
-    21, 22, 232, 27, 21, 22, 211, 155, 21, 22, 211, 121, 21, 22, 211, 115,
-    21, 22, 211, 109, 21, 22, 211, 104, 21, 22, 211, 159, 21, 22, 211, 158,
-    21, 22, 211, 167, 21, 22, 202, 43, 21, 22, 202, 41, 21, 22, 202, 40, 21,
-    22, 202, 44, 21, 22, 197, 87, 210, 183, 21, 22, 197, 87, 210, 72, 21, 22,
-    197, 87, 209, 232, 21, 22, 197, 87, 169, 21, 22, 217, 69, 21, 22, 217,
-    19, 21, 22, 217, 15, 21, 22, 216, 252, 21, 22, 216, 247, 21, 22, 217, 71,
-    21, 22, 217, 70, 21, 22, 217, 73, 21, 22, 216, 79, 21, 22, 208, 178, 206,
-    255, 21, 22, 208, 178, 206, 223, 21, 22, 208, 178, 206, 198, 21, 22, 208,
-    178, 207, 50, 21, 22, 197, 13, 202, 217, 21, 22, 197, 13, 202, 195, 21,
-    22, 197, 13, 202, 169, 21, 22, 197, 13, 202, 233, 21, 22, 197, 13, 202,
-    235, 21, 22, 222, 116, 21, 22, 222, 115, 21, 22, 222, 114, 21, 22, 222,
-    113, 21, 22, 222, 122, 21, 22, 222, 121, 21, 22, 222, 123, 21, 22, 202,
-    234, 202, 217, 21, 22, 202, 234, 202, 195, 21, 22, 202, 234, 202, 189,
-    21, 22, 202, 234, 202, 169, 21, 22, 202, 234, 202, 164, 21, 22, 202, 234,
-    202, 233, 21, 22, 202, 234, 202, 232, 21, 22, 202, 234, 202, 235, 21, 22,
-    251, 184, 250, 112, 21, 22, 248, 133, 69, 21, 22, 248, 133, 68, 21, 22,
-    248, 133, 72, 21, 22, 248, 133, 63, 21, 22, 248, 133, 197, 109, 21, 22,
-    248, 133, 197, 70, 21, 22, 248, 133, 197, 34, 21, 22, 248, 133, 197, 166,
-    21, 22, 248, 133, 217, 118, 21, 22, 248, 133, 216, 223, 21, 22, 248, 133,
-    216, 50, 21, 22, 248, 133, 176, 21, 22, 248, 133, 224, 209, 21, 22, 248,
-    133, 224, 101, 21, 22, 248, 133, 224, 11, 21, 22, 248, 133, 155, 21, 22,
-    208, 178, 232, 147, 21, 22, 208, 178, 232, 71, 21, 22, 208, 178, 231,
-    193, 21, 22, 208, 178, 142, 21, 22, 92, 233, 198, 21, 22, 92, 233, 202,
-    21, 22, 92, 233, 216, 21, 22, 92, 233, 215, 21, 22, 92, 233, 204, 21, 22,
-    92, 233, 230, 21, 22, 92, 209, 140, 21, 22, 92, 209, 232, 21, 22, 92,
-    210, 183, 21, 22, 92, 210, 155, 21, 22, 92, 210, 72, 21, 22, 92, 169, 21,
-    22, 92, 196, 243, 21, 22, 92, 197, 34, 21, 22, 92, 197, 109, 21, 22, 92,
-    197, 98, 21, 22, 92, 197, 70, 21, 22, 92, 197, 166, 21, 22, 92, 231, 36,
-    21, 22, 92, 231, 37, 21, 22, 92, 231, 40, 21, 22, 92, 231, 39, 21, 22,
-    92, 231, 38, 21, 22, 92, 231, 43, 21, 22, 92, 202, 142, 21, 22, 92, 202,
-    169, 21, 22, 92, 202, 217, 21, 22, 92, 202, 215, 21, 22, 92, 202, 195,
-    21, 22, 92, 202, 233, 21, 22, 92, 201, 45, 21, 22, 92, 201, 55, 21, 22,
-    92, 201, 73, 21, 22, 92, 201, 72, 21, 22, 92, 201, 57, 21, 22, 92, 201,
-    78, 21, 22, 92, 211, 227, 21, 22, 92, 212, 117, 21, 22, 92, 213, 92, 21,
-    22, 92, 213, 79, 21, 22, 92, 212, 220, 21, 22, 92, 161, 21, 22, 92, 214,
-    3, 21, 22, 92, 233, 76, 21, 22, 92, 233, 144, 21, 22, 92, 234, 48, 21,
-    22, 92, 234, 40, 21, 22, 92, 233, 192, 21, 22, 92, 234, 123, 21, 22, 92,
-    224, 110, 21, 22, 92, 224, 117, 21, 22, 92, 224, 131, 21, 22, 92, 224,
-    130, 21, 22, 92, 224, 124, 21, 22, 92, 224, 146, 21, 22, 92, 224, 31, 21,
-    22, 92, 224, 32, 21, 22, 92, 224, 35, 21, 22, 92, 224, 34, 21, 22, 92,
-    224, 33, 21, 22, 92, 224, 36, 21, 22, 92, 224, 37, 21, 22, 92, 215, 186,
-    21, 22, 92, 216, 50, 21, 22, 92, 217, 118, 21, 22, 92, 217, 107, 21, 22,
-    92, 216, 223, 21, 22, 92, 176, 21, 22, 92, 218, 145, 21, 22, 92, 218,
-    251, 21, 22, 92, 219, 207, 21, 22, 92, 219, 188, 21, 22, 92, 219, 78, 21,
-    22, 92, 166, 21, 22, 92, 195, 217, 21, 22, 92, 196, 3, 21, 22, 92, 196,
-    69, 21, 22, 92, 196, 66, 21, 22, 92, 196, 24, 21, 22, 92, 164, 21, 22,
-    92, 225, 110, 21, 22, 208, 178, 225, 110, 21, 22, 92, 225, 129, 21, 22,
-    92, 225, 193, 21, 22, 92, 225, 191, 21, 22, 92, 225, 172, 21, 22, 208,
-    178, 225, 172, 21, 22, 92, 225, 214, 21, 22, 92, 225, 143, 21, 22, 92,
-    225, 147, 21, 22, 92, 225, 157, 21, 22, 92, 225, 156, 21, 22, 92, 225,
-    155, 21, 22, 92, 225, 158, 21, 22, 92, 221, 191, 21, 22, 92, 222, 7, 21,
-    22, 92, 222, 197, 21, 22, 92, 222, 188, 21, 22, 92, 222, 109, 21, 22, 92,
-    172, 21, 22, 92, 239, 33, 21, 22, 92, 239, 34, 21, 22, 92, 239, 39, 21,
-    22, 92, 239, 38, 21, 22, 92, 239, 35, 21, 22, 92, 239, 40, 21, 22, 92,
-    222, 112, 21, 22, 92, 222, 114, 21, 22, 92, 222, 118, 21, 22, 92, 222,
-    117, 21, 22, 92, 222, 116, 21, 22, 92, 222, 122, 21, 22, 92, 202, 38, 21,
-    22, 92, 202, 40, 21, 22, 92, 202, 43, 21, 22, 92, 202, 42, 21, 22, 92,
-    202, 41, 21, 22, 92, 202, 44, 21, 22, 92, 202, 33, 21, 22, 92, 202, 34,
-    21, 22, 92, 202, 46, 21, 22, 92, 202, 45, 21, 22, 92, 202, 35, 21, 22,
-    92, 202, 47, 21, 22, 92, 194, 255, 21, 22, 92, 195, 11, 21, 22, 92, 195,
-    88, 21, 22, 92, 195, 85, 21, 22, 92, 195, 33, 21, 22, 92, 195, 115, 21,
-    22, 92, 195, 158, 21, 22, 92, 84, 195, 158, 21, 22, 92, 237, 143, 21, 22,
-    92, 237, 144, 21, 22, 92, 237, 153, 21, 22, 92, 237, 152, 21, 22, 92,
-    237, 147, 21, 22, 92, 237, 156, 21, 22, 92, 204, 172, 21, 22, 92, 205,
-    200, 21, 22, 92, 208, 147, 21, 22, 92, 208, 129, 21, 22, 92, 206, 112,
-    21, 22, 92, 183, 21, 22, 92, 206, 151, 21, 22, 92, 206, 198, 21, 22, 92,
-    206, 255, 21, 22, 92, 206, 253, 21, 22, 92, 206, 223, 21, 22, 92, 207,
-    50, 21, 22, 92, 207, 52, 21, 22, 92, 201, 86, 21, 22, 92, 201, 90, 21,
-    22, 92, 201, 107, 21, 22, 92, 201, 106, 21, 22, 92, 201, 92, 21, 22, 92,
-    201, 113, 21, 22, 92, 245, 30, 21, 22, 92, 245, 49, 21, 22, 92, 245, 103,
-    21, 22, 92, 245, 99, 21, 22, 92, 245, 75, 21, 22, 92, 247, 16, 21, 22,
-    92, 201, 48, 21, 22, 92, 201, 49, 21, 22, 92, 201, 52, 21, 22, 92, 201,
-    51, 21, 22, 92, 201, 50, 21, 22, 92, 201, 53, 21, 22, 245, 76, 55, 21,
-    22, 234, 217, 204, 226, 21, 22, 211, 151, 21, 22, 217, 67, 21, 22, 216,
-    76, 21, 22, 216, 75, 21, 22, 216, 74, 21, 22, 216, 73, 21, 22, 216, 78,
-    21, 22, 216, 77, 21, 22, 197, 13, 202, 130, 21, 22, 197, 13, 202, 129,
-    21, 22, 197, 13, 202, 128, 21, 22, 197, 13, 202, 127, 21, 22, 197, 13,
-    202, 126, 21, 22, 197, 13, 202, 133, 21, 22, 197, 13, 202, 132, 21, 22,
-    197, 13, 48, 202, 235, 21, 22, 248, 133, 197, 199, 214, 153, 205, 149,
-    78, 214, 153, 1, 248, 233, 214, 153, 1, 221, 177, 214, 153, 1, 235, 186,
-    214, 153, 1, 208, 251, 214, 153, 1, 216, 172, 214, 153, 1, 200, 111, 214,
-    153, 1, 240, 109, 214, 153, 1, 202, 71, 214, 153, 1, 244, 171, 214, 153,
-    1, 247, 44, 214, 153, 1, 218, 128, 214, 153, 1, 233, 123, 214, 153, 1,
-    217, 57, 214, 153, 1, 204, 219, 214, 153, 1, 209, 127, 214, 153, 1, 251,
-    196, 214, 153, 1, 214, 106, 214, 153, 1, 200, 21, 214, 153, 1, 237, 80,
-    214, 153, 1, 226, 11, 214, 153, 1, 237, 81, 214, 153, 1, 214, 72, 214,
-    153, 1, 200, 88, 214, 153, 1, 226, 126, 214, 153, 1, 237, 78, 214, 153,
-    1, 213, 69, 214, 153, 235, 185, 78, 214, 153, 210, 89, 235, 185, 78, 209,
-    116, 1, 235, 175, 235, 166, 235, 190, 236, 49, 209, 116, 1, 199, 230,
-    209, 116, 1, 200, 6, 200, 22, 66, 209, 116, 1, 195, 220, 209, 116, 1,
-    196, 148, 209, 116, 1, 197, 199, 209, 116, 1, 202, 135, 202, 134, 202,
-    162, 209, 116, 1, 236, 121, 209, 116, 1, 251, 70, 63, 209, 116, 1, 214,
-    54, 72, 209, 116, 1, 252, 26, 63, 209, 116, 1, 251, 229, 209, 116, 1,
-    221, 236, 72, 209, 116, 1, 206, 175, 72, 209, 116, 1, 72, 209, 116, 1,
-    214, 164, 209, 116, 1, 214, 119, 209, 116, 1, 210, 222, 210, 235, 210,
-    140, 144, 209, 116, 1, 224, 225, 209, 116, 1, 247, 40, 209, 116, 1, 224,
-    226, 225, 80, 209, 116, 1, 234, 190, 209, 116, 1, 236, 215, 209, 116, 1,
-    234, 43, 233, 21, 234, 190, 209, 116, 1, 234, 83, 209, 116, 1, 196, 235,
-    196, 226, 197, 199, 209, 116, 1, 232, 237, 233, 15, 209, 116, 1, 232,
-    241, 233, 15, 209, 116, 1, 221, 238, 233, 15, 209, 116, 1, 206, 178, 233,
-    15, 209, 116, 1, 217, 200, 215, 99, 217, 201, 218, 55, 209, 116, 1, 206,
-    176, 218, 55, 209, 116, 1, 237, 247, 209, 116, 1, 225, 245, 225, 249,
-    225, 236, 68, 209, 116, 1, 69, 209, 116, 1, 225, 183, 225, 217, 209, 116,
-    1, 234, 24, 209, 116, 1, 221, 239, 251, 245, 209, 116, 1, 206, 180, 63,
-    209, 116, 1, 225, 228, 236, 188, 209, 116, 1, 213, 25, 213, 50, 214, 3,
-    209, 116, 1, 251, 157, 236, 186, 209, 116, 1, 205, 155, 209, 80, 209,
-    116, 1, 206, 88, 221, 235, 209, 80, 209, 116, 1, 206, 174, 209, 80, 209,
-    116, 1, 247, 207, 209, 116, 1, 195, 158, 209, 116, 1, 202, 52, 202, 64,
-    200, 188, 203, 216, 209, 116, 1, 206, 173, 203, 216, 209, 116, 1, 240,
-    231, 209, 116, 1, 248, 211, 248, 214, 248, 139, 250, 112, 209, 116, 1,
-    206, 179, 250, 112, 209, 116, 1, 237, 246, 209, 116, 1, 214, 86, 209,
-    116, 1, 237, 34, 237, 41, 69, 209, 116, 1, 220, 51, 220, 63, 221, 136,
-    209, 116, 1, 221, 237, 221, 136, 209, 116, 1, 206, 177, 221, 136, 209,
-    116, 1, 222, 212, 223, 59, 221, 246, 159, 209, 116, 1, 237, 248, 209,
-    116, 1, 226, 59, 209, 116, 1, 226, 60, 209, 116, 1, 240, 123, 240, 129,
-    240, 231, 209, 116, 1, 214, 47, 236, 120, 72, 209, 116, 1, 237, 76, 209,
-    116, 1, 226, 9, 209, 116, 1, 240, 251, 209, 116, 1, 247, 157, 209, 116,
-    1, 247, 56, 209, 116, 1, 205, 13, 209, 116, 1, 221, 234, 209, 116, 1,
-    206, 172, 209, 116, 1, 230, 200, 209, 116, 1, 211, 167, 209, 116, 1, 196,
-    222, 209, 116, 206, 62, 211, 213, 209, 116, 218, 120, 211, 213, 209, 116,
-    241, 62, 211, 213, 209, 116, 250, 233, 105, 209, 116, 200, 247, 105, 209,
-    116, 248, 231, 105, 209, 116, 1, 225, 80, 209, 116, 1, 207, 52, 209, 116,
-    1, 214, 102, 209, 116, 1, 234, 247, 247, 95, 214, 53, 209, 116, 1, 234,
-    247, 247, 95, 225, 248, 209, 116, 1, 234, 247, 247, 95, 237, 40, 209,
-    116, 1, 234, 247, 247, 95, 252, 25, 209, 116, 1, 234, 247, 247, 95, 251,
-    229, 203, 142, 1, 63, 203, 142, 1, 68, 203, 142, 1, 66, 203, 142, 1, 155,
-    203, 142, 1, 234, 123, 203, 142, 1, 217, 71, 203, 142, 1, 189, 203, 142,
-    1, 240, 136, 203, 142, 1, 176, 203, 142, 1, 161, 203, 142, 1, 249, 145,
-    203, 142, 1, 166, 203, 142, 1, 164, 203, 142, 1, 172, 203, 142, 1, 197,
-    166, 203, 142, 1, 183, 203, 142, 1, 142, 203, 142, 18, 2, 68, 203, 142,
-    18, 2, 66, 203, 142, 2, 199, 7, 232, 179, 1, 63, 232, 179, 1, 68, 232,
-    179, 1, 66, 232, 179, 1, 155, 232, 179, 1, 234, 123, 232, 179, 1, 217,
-    71, 232, 179, 1, 189, 232, 179, 1, 240, 136, 232, 179, 1, 176, 232, 179,
-    1, 161, 232, 179, 1, 249, 145, 232, 179, 1, 166, 232, 179, 1, 164, 232,
-    179, 1, 169, 232, 179, 1, 172, 232, 179, 1, 197, 166, 232, 179, 1, 183,
-    232, 179, 1, 142, 232, 179, 18, 2, 68, 232, 179, 18, 2, 66, 232, 179, 2,
-    213, 194, 212, 239, 206, 62, 211, 213, 212, 239, 52, 211, 213, 248, 13,
-    1, 63, 248, 13, 1, 68, 248, 13, 1, 66, 248, 13, 1, 155, 248, 13, 1, 234,
-    123, 248, 13, 1, 217, 71, 248, 13, 1, 189, 248, 13, 1, 240, 136, 248, 13,
-    1, 176, 248, 13, 1, 161, 248, 13, 1, 249, 145, 248, 13, 1, 166, 248, 13,
-    1, 164, 248, 13, 1, 169, 248, 13, 1, 172, 248, 13, 1, 197, 166, 248, 13,
-    1, 183, 248, 13, 1, 142, 248, 13, 18, 2, 68, 248, 13, 18, 2, 66, 203,
-    141, 1, 63, 203, 141, 1, 68, 203, 141, 1, 66, 203, 141, 1, 155, 203, 141,
-    1, 234, 123, 203, 141, 1, 217, 71, 203, 141, 1, 189, 203, 141, 1, 240,
-    136, 203, 141, 1, 176, 203, 141, 1, 161, 203, 141, 1, 249, 145, 203, 141,
-    1, 166, 203, 141, 1, 164, 203, 141, 1, 172, 203, 141, 1, 197, 166, 203,
-    141, 1, 183, 203, 141, 18, 2, 68, 203, 141, 18, 2, 66, 89, 1, 155, 89, 1,
-    224, 146, 89, 1, 224, 11, 89, 1, 224, 117, 89, 1, 216, 252, 89, 1, 247,
-    174, 89, 1, 247, 16, 89, 1, 244, 182, 89, 1, 245, 49, 89, 1, 215, 73, 89,
-    1, 240, 136, 89, 1, 201, 66, 89, 1, 239, 28, 89, 1, 201, 61, 89, 1, 216,
-    56, 89, 1, 189, 89, 1, 202, 233, 89, 1, 149, 89, 1, 202, 169, 89, 1, 216,
-    50, 89, 1, 249, 145, 89, 1, 213, 6, 89, 1, 212, 117, 89, 1, 212, 234, 89,
-    1, 218, 251, 89, 1, 196, 3, 89, 1, 209, 232, 89, 1, 222, 7, 89, 1, 198,
-    248, 89, 1, 207, 50, 89, 1, 205, 39, 89, 1, 183, 89, 1, 142, 89, 1, 172,
-    89, 1, 211, 159, 89, 226, 73, 18, 211, 145, 89, 226, 73, 18, 211, 158,
-    89, 226, 73, 18, 211, 121, 89, 226, 73, 18, 211, 115, 89, 226, 73, 18,
-    211, 97, 89, 226, 73, 18, 211, 66, 89, 226, 73, 18, 211, 54, 89, 226, 73,
-    18, 211, 53, 89, 226, 73, 18, 209, 89, 89, 226, 73, 18, 209, 82, 89, 226,
-    73, 18, 221, 151, 89, 226, 73, 18, 221, 139, 89, 226, 73, 18, 211, 139,
-    89, 226, 73, 18, 211, 151, 89, 226, 73, 18, 211, 105, 200, 201, 100, 89,
-    226, 73, 18, 211, 105, 200, 201, 102, 89, 226, 73, 18, 211, 141, 89, 18,
-    226, 57, 251, 18, 89, 18, 226, 57, 252, 168, 89, 18, 2, 252, 168, 89, 18,
-    2, 68, 89, 18, 2, 226, 120, 89, 18, 2, 196, 148, 89, 18, 2, 195, 168, 89,
-    18, 2, 66, 89, 18, 2, 199, 245, 89, 18, 2, 200, 114, 89, 18, 2, 214, 164,
-    89, 18, 2, 164, 89, 18, 2, 226, 147, 89, 18, 2, 69, 89, 18, 2, 251, 245,
-    89, 18, 2, 251, 200, 89, 18, 2, 214, 102, 89, 18, 2, 250, 150, 89, 2,
-    216, 188, 89, 2, 210, 177, 89, 2, 195, 179, 89, 2, 218, 83, 89, 2, 201,
-    168, 89, 2, 249, 82, 89, 2, 209, 221, 89, 2, 202, 21, 89, 2, 225, 24, 89,
-    2, 251, 202, 89, 2, 208, 220, 208, 212, 89, 2, 199, 4, 89, 2, 244, 174,
-    89, 2, 249, 52, 89, 2, 224, 138, 89, 2, 249, 77, 89, 2, 247, 145, 212,
-    183, 223, 143, 89, 2, 222, 165, 201, 247, 89, 2, 248, 199, 89, 2, 212,
-    236, 218, 138, 89, 2, 223, 240, 89, 241, 17, 16, 210, 56, 89, 2, 250,
-    131, 89, 2, 250, 153, 89, 17, 195, 79, 89, 17, 100, 89, 17, 102, 89, 17,
-    134, 89, 17, 136, 89, 17, 146, 89, 17, 167, 89, 17, 178, 89, 17, 171, 89,
-    17, 182, 89, 16, 222, 165, 250, 155, 205, 174, 89, 16, 222, 165, 250,
-    155, 218, 104, 89, 16, 222, 165, 250, 155, 212, 182, 89, 16, 222, 165,
-    250, 155, 248, 234, 89, 16, 222, 165, 250, 155, 247, 249, 89, 16, 222,
-    165, 250, 155, 212, 49, 89, 16, 222, 165, 250, 155, 212, 43, 89, 16, 222,
-    165, 250, 155, 212, 41, 89, 16, 222, 165, 250, 155, 212, 47, 89, 16, 222,
-    165, 250, 155, 212, 45, 96, 248, 154, 96, 236, 247, 96, 244, 159, 96,
-    234, 217, 204, 226, 96, 244, 168, 96, 235, 7, 238, 250, 96, 202, 20, 205,
-    186, 231, 7, 96, 206, 104, 5, 248, 81, 220, 24, 96, 220, 59, 244, 159,
-    96, 220, 59, 234, 217, 204, 226, 96, 216, 170, 96, 234, 246, 62, 208,
-    115, 100, 96, 234, 246, 62, 208, 115, 102, 96, 234, 246, 62, 208, 115,
-    134, 96, 18, 207, 90, 96, 17, 195, 79, 96, 17, 100, 96, 17, 102, 96, 17,
-    134, 96, 17, 136, 96, 17, 146, 96, 17, 167, 96, 17, 178, 96, 17, 171, 96,
-    17, 182, 96, 1, 63, 96, 1, 69, 96, 1, 68, 96, 1, 72, 96, 1, 66, 96, 1,
-    214, 164, 96, 1, 200, 99, 96, 1, 237, 54, 96, 1, 176, 96, 1, 251, 97, 96,
-    1, 249, 145, 96, 1, 161, 96, 1, 211, 159, 96, 1, 234, 123, 96, 1, 166,
-    96, 1, 172, 96, 1, 183, 96, 1, 207, 50, 96, 1, 189, 96, 1, 240, 136, 96,
-    1, 247, 16, 96, 1, 225, 214, 96, 1, 164, 96, 1, 169, 96, 1, 197, 166, 96,
-    1, 235, 239, 96, 1, 155, 96, 1, 224, 146, 96, 1, 201, 113, 96, 1, 195,
-    115, 96, 1, 232, 246, 96, 1, 195, 3, 96, 1, 222, 122, 96, 1, 195, 60, 96,
-    1, 245, 75, 96, 1, 202, 20, 181, 18, 55, 96, 1, 202, 20, 69, 96, 1, 202,
-    20, 68, 96, 1, 202, 20, 72, 96, 1, 202, 20, 66, 96, 1, 202, 20, 214, 164,
-    96, 1, 202, 20, 200, 99, 96, 1, 202, 20, 251, 97, 96, 1, 202, 20, 249,
-    145, 96, 1, 202, 20, 161, 96, 1, 202, 20, 211, 159, 96, 1, 202, 20, 234,
-    123, 96, 1, 202, 20, 166, 96, 1, 202, 20, 189, 96, 1, 202, 20, 240, 136,
-    96, 1, 202, 20, 247, 16, 96, 1, 202, 20, 225, 214, 96, 1, 202, 20, 201,
-    113, 96, 1, 202, 20, 164, 96, 1, 202, 20, 197, 166, 96, 1, 202, 20, 155,
-    96, 1, 202, 20, 234, 120, 96, 1, 202, 20, 232, 246, 96, 1, 202, 20, 225,
-    171, 96, 1, 202, 20, 216, 213, 96, 1, 202, 20, 237, 156, 96, 1, 206, 104,
-    69, 96, 1, 206, 104, 68, 96, 1, 206, 104, 225, 225, 96, 1, 206, 104, 200,
-    99, 96, 1, 206, 104, 66, 96, 1, 206, 104, 251, 97, 96, 1, 206, 104, 155,
-    96, 1, 206, 104, 234, 123, 96, 1, 206, 104, 142, 96, 1, 206, 104, 161,
-    96, 1, 206, 104, 207, 50, 96, 1, 206, 104, 189, 96, 1, 206, 104, 240,
-    136, 96, 1, 206, 104, 225, 214, 96, 1, 206, 104, 235, 239, 96, 1, 206,
-    104, 234, 120, 96, 1, 206, 104, 232, 246, 96, 1, 206, 104, 201, 113, 96,
-    1, 206, 104, 195, 115, 96, 1, 206, 104, 210, 244, 96, 1, 206, 104, 247,
-    16, 96, 1, 206, 104, 195, 74, 96, 1, 220, 59, 68, 96, 1, 220, 59, 155,
-    96, 1, 220, 59, 169, 96, 1, 220, 59, 235, 239, 96, 1, 220, 59, 195, 74,
-    96, 1, 247, 17, 3, 99, 238, 250, 96, 1, 251, 156, 234, 103, 251, 52, 100,
-    96, 1, 251, 156, 234, 103, 199, 3, 100, 96, 1, 251, 156, 234, 103, 240,
-    97, 96, 1, 251, 156, 234, 103, 200, 109, 96, 1, 251, 156, 234, 103, 226,
-    17, 200, 109, 96, 1, 251, 156, 234, 103, 249, 96, 96, 1, 251, 156, 234,
-    103, 115, 249, 96, 96, 1, 251, 156, 234, 103, 63, 96, 1, 251, 156, 234,
-    103, 68, 96, 1, 251, 156, 234, 103, 155, 96, 1, 251, 156, 234, 103, 217,
-    71, 96, 1, 251, 156, 234, 103, 247, 174, 96, 1, 251, 156, 234, 103, 201,
-    78, 96, 1, 251, 156, 234, 103, 201, 66, 96, 1, 251, 156, 234, 103, 240,
-    41, 96, 1, 251, 156, 234, 103, 216, 86, 96, 1, 251, 156, 234, 103, 189,
-    96, 1, 251, 156, 234, 103, 240, 136, 96, 1, 251, 156, 234, 103, 161, 96,
-    1, 251, 156, 234, 103, 213, 6, 96, 1, 251, 156, 234, 103, 205, 80, 96, 1,
-    251, 156, 234, 103, 195, 74, 96, 1, 251, 156, 234, 103, 195, 115, 96, 1,
-    251, 156, 234, 103, 251, 209, 96, 1, 202, 20, 251, 156, 234, 103, 189,
-    96, 1, 202, 20, 251, 156, 234, 103, 195, 74, 96, 1, 220, 59, 251, 156,
-    234, 103, 233, 230, 96, 1, 220, 59, 251, 156, 234, 103, 217, 71, 96, 1,
-    220, 59, 251, 156, 234, 103, 247, 174, 96, 1, 220, 59, 251, 156, 234,
-    103, 225, 180, 96, 1, 220, 59, 251, 156, 234, 103, 201, 78, 96, 1, 220,
-    59, 251, 156, 234, 103, 240, 25, 96, 1, 220, 59, 251, 156, 234, 103, 189,
-    96, 1, 220, 59, 251, 156, 234, 103, 239, 176, 96, 1, 220, 59, 251, 156,
-    234, 103, 205, 80, 96, 1, 220, 59, 251, 156, 234, 103, 240, 245, 96, 1,
-    220, 59, 251, 156, 234, 103, 195, 74, 96, 1, 220, 59, 251, 156, 234, 103,
-    195, 115, 96, 1, 251, 156, 234, 103, 157, 66, 96, 1, 251, 156, 234, 103,
-    157, 164, 96, 1, 220, 59, 251, 156, 234, 103, 248, 197, 96, 1, 251, 156,
-    234, 103, 240, 124, 96, 1, 220, 59, 251, 156, 234, 103, 222, 122, 21, 22,
-    214, 8, 21, 22, 250, 122, 21, 22, 252, 122, 21, 22, 197, 112, 21, 22,
-    212, 55, 21, 22, 213, 101, 21, 22, 211, 176, 21, 22, 203, 77, 21, 22,
-    224, 216, 21, 22, 223, 133, 21, 22, 219, 251, 21, 22, 216, 1, 21, 22,
-    217, 195, 21, 22, 222, 207, 21, 22, 205, 153, 21, 22, 208, 180, 21, 22,
-    206, 160, 21, 22, 207, 3, 21, 22, 206, 122, 21, 22, 195, 226, 21, 22,
-    196, 75, 21, 22, 210, 191, 21, 22, 215, 115, 21, 22, 214, 141, 215, 115,
-    21, 22, 215, 114, 21, 22, 214, 141, 215, 114, 21, 22, 215, 113, 21, 22,
-    214, 141, 215, 113, 21, 22, 215, 112, 21, 22, 214, 141, 215, 112, 21, 22,
-    209, 94, 21, 22, 209, 93, 21, 22, 209, 92, 21, 22, 209, 91, 21, 22, 209,
-    90, 21, 22, 209, 98, 21, 22, 214, 141, 214, 3, 21, 22, 214, 141, 203,
-    216, 21, 22, 214, 141, 225, 80, 21, 22, 214, 141, 247, 207, 21, 22, 214,
-    141, 221, 136, 21, 22, 214, 141, 218, 55, 21, 22, 214, 141, 209, 80, 21,
-    22, 214, 141, 207, 52, 21, 22, 237, 67, 197, 199, 21, 22, 197, 86, 197,
-    199, 21, 22, 48, 4, 210, 2, 21, 22, 48, 210, 215, 238, 253, 21, 22, 211,
-    31, 209, 95, 21, 22, 197, 87, 221, 229, 21, 22, 197, 87, 223, 82, 21, 22,
-    202, 131, 21, 22, 202, 133, 21, 22, 201, 58, 21, 22, 201, 60, 21, 22,
-    201, 65, 21, 22, 202, 37, 21, 22, 202, 39, 21, 22, 208, 178, 206, 127,
-    21, 22, 208, 178, 206, 190, 21, 22, 208, 178, 231, 166, 21, 22, 92, 233,
-    29, 21, 22, 92, 239, 210, 234, 40, 21, 22, 92, 234, 120, 21, 22, 92, 233,
-    34, 21, 22, 208, 178, 225, 90, 21, 22, 92, 225, 88, 21, 22, 248, 254,
-    239, 210, 159, 21, 22, 248, 254, 239, 210, 144, 21, 22, 92, 239, 205,
-    209, 80, 222, 85, 198, 226, 222, 135, 222, 85, 1, 155, 222, 85, 1, 224,
-    146, 222, 85, 1, 234, 123, 222, 85, 1, 233, 230, 222, 85, 1, 217, 71,
-    222, 85, 1, 247, 174, 222, 85, 1, 247, 16, 222, 85, 1, 225, 214, 222, 85,
-    1, 225, 180, 222, 85, 1, 196, 97, 222, 85, 1, 189, 222, 85, 1, 202, 233,
-    222, 85, 1, 240, 136, 222, 85, 1, 239, 176, 222, 85, 1, 176, 222, 85, 1,
-    161, 222, 85, 1, 213, 6, 222, 85, 1, 249, 145, 222, 85, 1, 248, 197, 222,
-    85, 1, 166, 222, 85, 1, 164, 222, 85, 1, 169, 222, 85, 1, 172, 222, 85,
-    1, 197, 166, 222, 85, 1, 207, 50, 222, 85, 1, 205, 80, 222, 85, 1, 183,
-    222, 85, 1, 142, 222, 85, 1, 233, 25, 222, 85, 1, 201, 217, 222, 85, 18,
-    2, 63, 222, 85, 18, 2, 68, 222, 85, 18, 2, 66, 222, 85, 18, 2, 237, 54,
-    222, 85, 18, 2, 251, 200, 222, 85, 18, 2, 214, 102, 222, 85, 18, 2, 250,
-    150, 222, 85, 18, 2, 69, 222, 85, 18, 2, 72, 222, 85, 204, 152, 1, 164,
-    222, 85, 204, 152, 1, 169, 222, 85, 204, 152, 1, 197, 166, 222, 85, 4, 1,
-    155, 222, 85, 4, 1, 217, 71, 222, 85, 4, 1, 251, 51, 222, 85, 4, 1, 189,
-    222, 85, 4, 1, 176, 222, 85, 4, 1, 161, 222, 85, 4, 1, 166, 222, 85, 4,
-    1, 169, 222, 85, 4, 1, 172, 222, 85, 2, 218, 125, 222, 85, 2, 224, 188,
-    222, 85, 2, 209, 14, 222, 85, 2, 221, 229, 222, 85, 236, 90, 78, 222, 85,
-    211, 79, 78, 222, 85, 17, 195, 79, 222, 85, 17, 100, 222, 85, 17, 102,
-    222, 85, 17, 134, 222, 85, 17, 136, 222, 85, 17, 146, 222, 85, 17, 167,
-    222, 85, 17, 178, 222, 85, 17, 171, 222, 85, 17, 182, 49, 222, 198, 1,
-    155, 49, 222, 198, 1, 196, 208, 49, 222, 198, 1, 217, 71, 49, 222, 198,
-    1, 201, 113, 49, 222, 198, 1, 183, 49, 222, 198, 1, 164, 49, 222, 198, 1,
-    189, 49, 222, 198, 1, 202, 233, 49, 222, 198, 1, 172, 49, 222, 198, 1,
-    161, 49, 222, 198, 1, 213, 6, 49, 222, 198, 1, 166, 49, 222, 198, 1, 235,
-    239, 49, 222, 198, 1, 199, 152, 49, 222, 198, 1, 142, 49, 222, 198, 1,
-    211, 159, 49, 222, 198, 1, 224, 146, 49, 222, 198, 1, 201, 103, 49, 222,
-    198, 1, 176, 49, 222, 198, 1, 63, 49, 222, 198, 1, 68, 49, 222, 198, 1,
-    237, 54, 49, 222, 198, 1, 237, 40, 49, 222, 198, 1, 66, 49, 222, 198, 1,
-    214, 102, 49, 222, 198, 1, 72, 49, 222, 198, 1, 200, 99, 49, 222, 198, 1,
-    69, 49, 222, 198, 1, 250, 148, 49, 222, 198, 1, 251, 200, 49, 222, 198,
-    1, 202, 9, 49, 222, 198, 1, 202, 8, 49, 222, 198, 1, 202, 7, 49, 222,
-    198, 1, 202, 6, 49, 222, 198, 1, 202, 5, 217, 83, 49, 221, 185, 1, 130,
-    211, 159, 217, 83, 49, 221, 185, 1, 126, 211, 159, 217, 83, 49, 221, 185,
-    1, 130, 155, 217, 83, 49, 221, 185, 1, 130, 196, 208, 217, 83, 49, 221,
-    185, 1, 130, 217, 71, 217, 83, 49, 221, 185, 1, 126, 155, 217, 83, 49,
-    221, 185, 1, 126, 196, 208, 217, 83, 49, 221, 185, 1, 126, 217, 71, 217,
-    83, 49, 221, 185, 1, 130, 201, 113, 217, 83, 49, 221, 185, 1, 130, 183,
-    217, 83, 49, 221, 185, 1, 130, 164, 217, 83, 49, 221, 185, 1, 126, 201,
-    113, 217, 83, 49, 221, 185, 1, 126, 183, 217, 83, 49, 221, 185, 1, 126,
-    164, 217, 83, 49, 221, 185, 1, 130, 189, 217, 83, 49, 221, 185, 1, 130,
-    202, 233, 217, 83, 49, 221, 185, 1, 130, 176, 217, 83, 49, 221, 185, 1,
-    126, 189, 217, 83, 49, 221, 185, 1, 126, 202, 233, 217, 83, 49, 221, 185,
-    1, 126, 176, 217, 83, 49, 221, 185, 1, 130, 161, 217, 83, 49, 221, 185,
-    1, 130, 213, 6, 217, 83, 49, 221, 185, 1, 130, 166, 217, 83, 49, 221,
-    185, 1, 126, 161, 217, 83, 49, 221, 185, 1, 126, 213, 6, 217, 83, 49,
-    221, 185, 1, 126, 166, 217, 83, 49, 221, 185, 1, 130, 235, 239, 217, 83,
-    49, 221, 185, 1, 130, 199, 152, 217, 83, 49, 221, 185, 1, 130, 172, 217,
-    83, 49, 221, 185, 1, 126, 235, 239, 217, 83, 49, 221, 185, 1, 126, 199,
-    152, 217, 83, 49, 221, 185, 1, 126, 172, 217, 83, 49, 221, 185, 1, 130,
-    142, 217, 83, 49, 221, 185, 1, 130, 240, 136, 217, 83, 49, 221, 185, 1,
-    130, 249, 145, 217, 83, 49, 221, 185, 1, 126, 142, 217, 83, 49, 221, 185,
-    1, 126, 240, 136, 217, 83, 49, 221, 185, 1, 126, 249, 145, 217, 83, 49,
-    221, 185, 1, 130, 223, 138, 217, 83, 49, 221, 185, 1, 130, 196, 174, 217,
-    83, 49, 221, 185, 1, 126, 223, 138, 217, 83, 49, 221, 185, 1, 126, 196,
-    174, 217, 83, 49, 221, 185, 1, 130, 204, 163, 217, 83, 49, 221, 185, 1,
-    126, 204, 163, 217, 83, 49, 221, 185, 18, 2, 18, 206, 170, 217, 83, 49,
-    221, 185, 18, 2, 252, 168, 217, 83, 49, 221, 185, 18, 2, 226, 120, 217,
-    83, 49, 221, 185, 18, 2, 66, 217, 83, 49, 221, 185, 18, 2, 199, 245, 217,
-    83, 49, 221, 185, 18, 2, 69, 217, 83, 49, 221, 185, 18, 2, 251, 245, 217,
-    83, 49, 221, 185, 18, 2, 72, 217, 83, 49, 221, 185, 18, 2, 214, 190, 217,
-    83, 49, 221, 185, 18, 2, 200, 99, 217, 83, 49, 221, 185, 18, 2, 250, 122,
-    217, 83, 49, 221, 185, 18, 2, 252, 122, 217, 83, 49, 221, 185, 18, 2,
-    199, 237, 217, 83, 49, 221, 185, 18, 2, 214, 8, 217, 83, 49, 221, 185,
-    18, 2, 214, 187, 217, 83, 49, 221, 185, 18, 2, 200, 94, 217, 83, 49, 221,
-    185, 18, 2, 225, 225, 217, 83, 49, 221, 185, 1, 48, 199, 230, 217, 83,
-    49, 221, 185, 1, 48, 217, 73, 217, 83, 49, 221, 185, 1, 48, 218, 55, 217,
-    83, 49, 221, 185, 1, 48, 221, 136, 217, 83, 49, 221, 185, 1, 48, 225, 80,
-    217, 83, 49, 221, 185, 1, 48, 240, 231, 217, 83, 49, 221, 185, 1, 48,
-    250, 112, 217, 83, 49, 221, 185, 152, 220, 28, 217, 83, 49, 221, 185,
-    152, 220, 27, 217, 83, 49, 221, 185, 17, 195, 79, 217, 83, 49, 221, 185,
-    17, 100, 217, 83, 49, 221, 185, 17, 102, 217, 83, 49, 221, 185, 17, 134,
-    217, 83, 49, 221, 185, 17, 136, 217, 83, 49, 221, 185, 17, 146, 217, 83,
-    49, 221, 185, 17, 167, 217, 83, 49, 221, 185, 17, 178, 217, 83, 49, 221,
-    185, 17, 171, 217, 83, 49, 221, 185, 17, 182, 217, 83, 49, 221, 185, 120,
-    17, 100, 217, 83, 49, 221, 185, 2, 223, 65, 217, 83, 49, 221, 185, 2,
-    223, 64, 89, 16, 213, 111, 89, 16, 218, 105, 224, 3, 89, 16, 212, 183,
-    224, 3, 89, 16, 248, 235, 224, 3, 89, 16, 247, 250, 224, 3, 89, 16, 212,
-    50, 224, 3, 89, 16, 212, 44, 224, 3, 89, 16, 212, 42, 224, 3, 89, 16,
-    212, 48, 224, 3, 89, 16, 212, 46, 224, 3, 89, 16, 240, 82, 224, 3, 89,
-    16, 240, 78, 224, 3, 89, 16, 240, 77, 224, 3, 89, 16, 240, 80, 224, 3,
-    89, 16, 240, 79, 224, 3, 89, 16, 240, 76, 224, 3, 89, 16, 200, 253, 89,
-    16, 218, 105, 209, 219, 89, 16, 212, 183, 209, 219, 89, 16, 248, 235,
-    209, 219, 89, 16, 247, 250, 209, 219, 89, 16, 212, 50, 209, 219, 89, 16,
-    212, 44, 209, 219, 89, 16, 212, 42, 209, 219, 89, 16, 212, 48, 209, 219,
-    89, 16, 212, 46, 209, 219, 89, 16, 240, 82, 209, 219, 89, 16, 240, 78,
-    209, 219, 89, 16, 240, 77, 209, 219, 89, 16, 240, 80, 209, 219, 89, 16,
-    240, 79, 209, 219, 89, 16, 240, 76, 209, 219, 248, 14, 1, 155, 248, 14,
-    1, 234, 123, 248, 14, 1, 217, 71, 248, 14, 1, 217, 14, 248, 14, 1, 161,
-    248, 14, 1, 249, 145, 248, 14, 1, 166, 248, 14, 1, 218, 151, 248, 14, 1,
-    189, 248, 14, 1, 240, 136, 248, 14, 1, 176, 248, 14, 1, 215, 252, 248,
-    14, 1, 247, 174, 248, 14, 1, 225, 214, 248, 14, 1, 215, 109, 248, 14, 1,
-    215, 100, 248, 14, 1, 164, 248, 14, 1, 169, 248, 14, 1, 172, 248, 14, 1,
-    199, 152, 248, 14, 1, 183, 248, 14, 1, 63, 248, 14, 1, 142, 248, 14, 18,
-    2, 68, 248, 14, 18, 2, 66, 248, 14, 18, 2, 69, 248, 14, 18, 2, 72, 248,
-    14, 18, 2, 251, 245, 248, 14, 213, 208, 248, 14, 236, 222, 77, 208, 132,
-    49, 120, 1, 130, 155, 49, 120, 1, 130, 224, 146, 49, 120, 1, 130, 223,
-    122, 49, 120, 1, 126, 155, 49, 120, 1, 126, 223, 122, 49, 120, 1, 126,
-    224, 146, 49, 120, 1, 217, 71, 49, 120, 1, 130, 247, 174, 49, 120, 1,
-    130, 247, 16, 49, 120, 1, 126, 247, 174, 49, 120, 1, 126, 183, 49, 120,
-    1, 126, 247, 16, 49, 120, 1, 215, 109, 49, 120, 1, 210, 197, 49, 120, 1,
-    130, 210, 195, 49, 120, 1, 240, 136, 49, 120, 1, 126, 210, 195, 49, 120,
-    1, 210, 206, 49, 120, 1, 130, 189, 49, 120, 1, 130, 202, 233, 49, 120, 1,
-    126, 189, 49, 120, 1, 126, 202, 233, 49, 120, 1, 176, 49, 120, 1, 249,
-    145, 49, 120, 1, 130, 161, 49, 120, 1, 130, 213, 6, 49, 120, 1, 130, 235,
-    239, 49, 120, 1, 126, 161, 49, 120, 1, 126, 235, 239, 49, 120, 1, 126,
-    213, 6, 49, 120, 1, 166, 49, 120, 1, 126, 164, 49, 120, 1, 130, 164, 49,
-    120, 1, 169, 49, 120, 1, 209, 129, 49, 120, 1, 172, 49, 120, 1, 221, 184,
-    49, 120, 1, 197, 166, 49, 120, 1, 130, 207, 50, 49, 120, 1, 130, 205, 80,
-    49, 120, 1, 130, 183, 49, 120, 1, 130, 142, 49, 120, 1, 222, 37, 49, 120,
-    1, 63, 49, 120, 1, 126, 142, 49, 120, 1, 68, 49, 120, 1, 226, 120, 49,
-    120, 1, 66, 49, 120, 1, 199, 245, 49, 120, 1, 237, 54, 49, 120, 1, 214,
-    102, 49, 120, 1, 223, 65, 49, 120, 1, 233, 96, 183, 49, 120, 108, 2, 219,
-    194, 169, 49, 120, 108, 2, 219, 194, 172, 49, 120, 108, 2, 223, 83, 203,
-    111, 223, 54, 49, 120, 2, 220, 82, 225, 14, 223, 54, 49, 120, 108, 2, 48,
-    217, 71, 49, 120, 108, 2, 126, 161, 49, 120, 108, 2, 130, 210, 196, 214,
-    73, 126, 161, 49, 120, 108, 2, 166, 49, 120, 108, 2, 249, 145, 49, 120,
-    108, 2, 183, 49, 120, 2, 208, 244, 49, 120, 18, 2, 63, 49, 120, 18, 2,
-    220, 82, 208, 199, 49, 120, 18, 2, 252, 168, 49, 120, 18, 2, 203, 120,
-    252, 168, 49, 120, 18, 2, 68, 49, 120, 18, 2, 226, 120, 49, 120, 18, 2,
-    200, 99, 49, 120, 18, 2, 199, 244, 49, 120, 18, 2, 66, 49, 120, 18, 2,
-    199, 245, 49, 120, 18, 2, 72, 49, 120, 18, 2, 214, 191, 60, 49, 120, 18,
-    2, 214, 8, 49, 120, 18, 2, 69, 49, 120, 18, 2, 251, 245, 49, 120, 18, 2,
-    214, 102, 49, 120, 18, 2, 251, 200, 49, 120, 18, 2, 120, 251, 200, 49,
-    120, 18, 2, 214, 191, 57, 49, 120, 2, 220, 82, 225, 13, 49, 120, 2, 202,
-    10, 49, 120, 2, 202, 9, 49, 120, 2, 224, 106, 202, 8, 49, 120, 2, 224,
-    106, 202, 7, 49, 120, 2, 224, 106, 202, 6, 49, 120, 2, 210, 252, 232,
-    245, 49, 120, 2, 220, 82, 208, 229, 49, 120, 2, 224, 105, 224, 250, 49,
-    120, 38, 241, 44, 238, 253, 49, 120, 231, 157, 17, 195, 79, 49, 120, 231,
-    157, 17, 100, 49, 120, 231, 157, 17, 102, 49, 120, 231, 157, 17, 134, 49,
-    120, 231, 157, 17, 136, 49, 120, 231, 157, 17, 146, 49, 120, 231, 157,
-    17, 167, 49, 120, 231, 157, 17, 178, 49, 120, 231, 157, 17, 171, 49, 120,
-    231, 157, 17, 182, 49, 120, 120, 17, 195, 79, 49, 120, 120, 17, 100, 49,
-    120, 120, 17, 102, 49, 120, 120, 17, 134, 49, 120, 120, 17, 136, 49, 120,
-    120, 17, 146, 49, 120, 120, 17, 167, 49, 120, 120, 17, 178, 49, 120, 120,
-    17, 171, 49, 120, 120, 17, 182, 49, 120, 2, 197, 64, 49, 120, 2, 197, 63,
-    49, 120, 2, 208, 184, 49, 120, 2, 224, 177, 49, 120, 2, 231, 85, 49, 120,
-    2, 239, 12, 49, 120, 2, 210, 89, 209, 194, 210, 206, 49, 120, 2, 220, 82,
-    196, 98, 49, 120, 2, 225, 48, 49, 120, 2, 225, 47, 49, 120, 2, 208, 194,
-    49, 120, 2, 208, 193, 49, 120, 2, 232, 182, 49, 120, 2, 247, 171, 38,
-    237, 240, 244, 241, 252, 22, 38, 239, 149, 38, 226, 63, 38, 237, 231, 51,
-    38, 201, 165, 238, 253, 38, 196, 221, 60, 38, 197, 56, 222, 76, 60, 38,
-    192, 117, 60, 38, 52, 192, 117, 60, 38, 175, 247, 38, 204, 196, 60, 38,
-    204, 182, 247, 38, 204, 196, 60, 38, 213, 142, 57, 38, 52, 213, 142, 57,
-    38, 213, 142, 60, 38, 213, 142, 214, 20, 141, 2, 200, 82, 210, 59, 141,
-    2, 200, 82, 247, 135, 141, 2, 247, 53, 141, 2, 204, 86, 141, 2, 248, 151,
-    141, 1, 251, 179, 141, 1, 251, 180, 203, 50, 141, 1, 226, 116, 141, 1,
-    226, 117, 203, 50, 141, 1, 200, 85, 141, 1, 200, 86, 203, 50, 141, 1,
-    210, 252, 210, 122, 141, 1, 210, 252, 210, 123, 203, 50, 141, 1, 223, 83,
-    222, 159, 141, 1, 223, 83, 222, 160, 203, 50, 141, 1, 237, 12, 141, 1,
-    251, 197, 141, 1, 214, 137, 141, 1, 214, 138, 203, 50, 141, 1, 155, 141,
-    1, 225, 70, 220, 85, 141, 1, 234, 123, 141, 1, 234, 124, 233, 129, 141,
-    1, 217, 71, 141, 1, 247, 174, 141, 1, 247, 175, 223, 69, 141, 1, 225,
-    214, 141, 1, 225, 215, 225, 184, 141, 1, 215, 109, 141, 1, 203, 169, 222,
-    217, 141, 1, 203, 169, 218, 100, 220, 85, 141, 1, 240, 137, 218, 100,
-    251, 136, 141, 1, 240, 137, 218, 100, 220, 85, 141, 1, 218, 1, 210, 209,
-    141, 1, 189, 141, 1, 203, 169, 203, 81, 141, 1, 240, 136, 141, 1, 240,
-    137, 220, 106, 141, 1, 176, 141, 1, 161, 141, 1, 213, 244, 225, 6, 141,
-    1, 249, 145, 141, 1, 249, 146, 224, 189, 141, 1, 166, 141, 1, 164, 141,
-    1, 169, 141, 1, 172, 141, 1, 197, 166, 141, 1, 209, 23, 209, 0, 141, 1,
-    209, 23, 208, 206, 141, 1, 183, 141, 1, 142, 141, 2, 210, 112, 141, 18,
-    2, 203, 50, 141, 18, 2, 200, 81, 141, 18, 2, 200, 82, 208, 202, 141, 18,
-    2, 204, 121, 141, 18, 2, 204, 122, 226, 108, 141, 18, 2, 210, 252, 210,
-    122, 141, 18, 2, 210, 252, 210, 123, 203, 50, 141, 18, 2, 223, 83, 222,
-    159, 141, 18, 2, 223, 83, 222, 160, 203, 50, 141, 18, 2, 203, 121, 141,
-    18, 2, 203, 122, 210, 122, 141, 18, 2, 203, 122, 203, 50, 141, 18, 2,
-    203, 122, 210, 123, 203, 50, 141, 18, 2, 213, 48, 141, 18, 2, 213, 49,
-    203, 50, 141, 252, 1, 252, 0, 141, 1, 225, 36, 208, 201, 141, 1, 224,
-    112, 208, 201, 141, 1, 200, 181, 208, 201, 141, 1, 237, 48, 208, 201,
-    141, 1, 199, 119, 208, 201, 141, 1, 195, 105, 208, 201, 141, 1, 250, 171,
-    208, 201, 141, 17, 195, 79, 141, 17, 100, 141, 17, 102, 141, 17, 134,
-    141, 17, 136, 141, 17, 146, 141, 17, 167, 141, 17, 178, 141, 17, 171,
-    141, 17, 182, 141, 213, 171, 141, 213, 200, 141, 197, 48, 141, 247, 108,
-    213, 193, 141, 247, 108, 206, 81, 141, 247, 108, 213, 139, 141, 213, 199,
-    141, 34, 16, 239, 4, 141, 34, 16, 239, 209, 141, 34, 16, 237, 184, 141,
-    34, 16, 240, 86, 141, 34, 16, 240, 87, 204, 86, 141, 34, 16, 239, 94,
-    141, 34, 16, 240, 128, 141, 34, 16, 239, 185, 141, 34, 16, 240, 110, 141,
-    34, 16, 240, 87, 234, 42, 141, 34, 16, 38, 203, 43, 141, 34, 16, 38, 236,
-    219, 141, 34, 16, 38, 224, 184, 141, 34, 16, 38, 224, 186, 141, 34, 16,
-    38, 225, 188, 141, 34, 16, 38, 224, 185, 3, 225, 188, 141, 34, 16, 38,
-    224, 187, 3, 225, 188, 141, 34, 16, 38, 248, 220, 141, 34, 16, 38, 233,
-    133, 141, 34, 16, 210, 20, 192, 237, 195, 141, 34, 16, 210, 20, 192, 240,
-    126, 141, 34, 16, 210, 20, 244, 203, 201, 26, 141, 34, 16, 210, 20, 244,
-    203, 203, 131, 141, 34, 16, 222, 182, 192, 213, 185, 141, 34, 16, 222,
-    182, 192, 211, 211, 141, 34, 16, 222, 182, 244, 203, 212, 145, 141, 34,
-    16, 222, 182, 244, 203, 212, 129, 141, 34, 16, 222, 182, 192, 212, 171,
-    204, 110, 2, 213, 168, 204, 110, 2, 213, 181, 204, 110, 2, 213, 177, 204,
-    110, 1, 63, 204, 110, 1, 68, 204, 110, 1, 66, 204, 110, 1, 251, 245, 204,
-    110, 1, 72, 204, 110, 1, 69, 204, 110, 1, 236, 116, 204, 110, 1, 155,
-    204, 110, 1, 211, 159, 204, 110, 1, 234, 123, 204, 110, 1, 217, 71, 204,
-    110, 1, 247, 174, 204, 110, 1, 225, 214, 204, 110, 1, 195, 115, 204, 110,
-    1, 215, 109, 204, 110, 1, 189, 204, 110, 1, 240, 136, 204, 110, 1, 176,
-    204, 110, 1, 161, 204, 110, 1, 235, 239, 204, 110, 1, 199, 152, 204, 110,
-    1, 249, 145, 204, 110, 1, 166, 204, 110, 1, 164, 204, 110, 1, 169, 204,
-    110, 1, 172, 204, 110, 1, 197, 166, 204, 110, 1, 183, 204, 110, 1, 196,
-    208, 204, 110, 1, 142, 204, 110, 108, 2, 213, 197, 204, 110, 108, 2, 213,
-    170, 204, 110, 108, 2, 213, 167, 204, 110, 18, 2, 213, 184, 204, 110, 18,
-    2, 213, 166, 204, 110, 18, 2, 213, 190, 204, 110, 18, 2, 213, 176, 204,
-    110, 18, 2, 213, 198, 204, 110, 18, 2, 213, 186, 204, 110, 2, 213, 201,
-    204, 110, 2, 199, 7, 204, 110, 108, 2, 213, 127, 166, 204, 110, 108, 2,
-    213, 127, 197, 166, 204, 110, 1, 224, 146, 204, 110, 1, 204, 43, 204,
-    110, 17, 195, 79, 204, 110, 17, 100, 204, 110, 17, 102, 204, 110, 17,
-    134, 204, 110, 17, 136, 204, 110, 17, 146, 204, 110, 17, 167, 204, 110,
-    17, 178, 204, 110, 17, 171, 204, 110, 17, 182, 204, 110, 250, 132, 204,
-    110, 1, 210, 92, 204, 110, 1, 222, 132, 204, 110, 1, 248, 197, 204, 110,
-    1, 48, 225, 80, 204, 110, 1, 48, 221, 136, 249, 55, 1, 63, 249, 55, 1,
-    206, 73, 63, 249, 55, 1, 142, 249, 55, 1, 206, 73, 142, 249, 55, 1, 220,
-    57, 142, 249, 55, 1, 249, 145, 249, 55, 1, 224, 247, 249, 145, 249, 55,
-    1, 161, 249, 55, 1, 206, 73, 161, 249, 55, 1, 176, 249, 55, 1, 220, 57,
-    176, 249, 55, 1, 197, 166, 249, 55, 1, 206, 73, 197, 166, 249, 55, 1,
-    213, 216, 197, 166, 249, 55, 1, 234, 123, 249, 55, 1, 206, 73, 234, 123,
-    249, 55, 1, 225, 214, 249, 55, 1, 240, 136, 249, 55, 1, 169, 249, 55, 1,
-    206, 73, 169, 249, 55, 1, 166, 249, 55, 1, 206, 73, 166, 249, 55, 1, 205,
-    157, 189, 249, 55, 1, 216, 23, 189, 249, 55, 1, 183, 249, 55, 1, 206, 73,
-    183, 249, 55, 1, 220, 57, 183, 249, 55, 1, 164, 249, 55, 1, 206, 73, 164,
-    249, 55, 1, 217, 71, 249, 55, 1, 172, 249, 55, 1, 206, 73, 172, 249, 55,
-    1, 215, 109, 249, 55, 1, 247, 174, 249, 55, 1, 217, 159, 249, 55, 1, 219,
-    241, 249, 55, 1, 68, 249, 55, 1, 66, 249, 55, 2, 202, 14, 249, 55, 18, 2,
-    69, 249, 55, 18, 2, 213, 216, 69, 249, 55, 18, 2, 237, 54, 249, 55, 18,
-    2, 68, 249, 55, 18, 2, 224, 247, 68, 249, 55, 18, 2, 72, 249, 55, 18, 2,
-    224, 247, 72, 249, 55, 18, 2, 66, 249, 55, 18, 2, 118, 36, 206, 73, 183,
-    249, 55, 108, 2, 217, 73, 249, 55, 108, 2, 233, 15, 249, 55, 213, 179,
-    249, 55, 213, 175, 249, 55, 16, 248, 161, 218, 1, 219, 141, 249, 55, 16,
-    248, 161, 212, 175, 249, 55, 16, 248, 161, 225, 107, 249, 55, 16, 248,
-    161, 213, 179, 222, 143, 1, 155, 222, 143, 1, 224, 29, 222, 143, 1, 224,
-    146, 222, 143, 1, 234, 123, 222, 143, 1, 233, 160, 222, 143, 1, 217, 71,
-    222, 143, 1, 247, 174, 222, 143, 1, 247, 16, 222, 143, 1, 225, 214, 222,
-    143, 1, 215, 109, 222, 143, 1, 189, 222, 143, 1, 202, 233, 222, 143, 1,
-    240, 136, 222, 143, 1, 176, 222, 143, 1, 161, 222, 143, 1, 212, 150, 222,
-    143, 1, 213, 6, 222, 143, 1, 235, 239, 222, 143, 1, 235, 95, 222, 143, 1,
-    249, 145, 222, 143, 1, 248, 137, 222, 143, 1, 166, 222, 143, 1, 219, 2,
-    222, 143, 1, 201, 113, 222, 143, 1, 201, 103, 222, 143, 1, 237, 156, 222,
-    143, 1, 164, 222, 143, 1, 169, 222, 143, 1, 172, 222, 143, 1, 142, 222,
-    143, 1, 232, 25, 222, 143, 1, 199, 152, 222, 143, 1, 183, 222, 143, 1,
-    207, 50, 222, 143, 1, 197, 166, 222, 143, 1, 63, 222, 143, 204, 152, 1,
-    164, 222, 143, 204, 152, 1, 169, 222, 143, 18, 2, 252, 168, 222, 143, 18,
-    2, 68, 222, 143, 18, 2, 72, 222, 143, 18, 2, 214, 102, 222, 143, 18, 2,
-    66, 222, 143, 18, 2, 199, 245, 222, 143, 18, 2, 69, 222, 143, 108, 2,
-    225, 80, 222, 143, 108, 2, 221, 136, 222, 143, 108, 2, 159, 222, 143,
-    108, 2, 218, 55, 222, 143, 108, 2, 214, 3, 222, 143, 108, 2, 144, 222,
-    143, 108, 2, 203, 216, 222, 143, 108, 2, 215, 81, 222, 143, 108, 2, 225,
-    13, 222, 143, 2, 210, 207, 222, 143, 2, 215, 149, 222, 143, 211, 214,
-    203, 164, 222, 143, 211, 214, 215, 93, 202, 125, 203, 164, 222, 143, 211,
-    214, 247, 25, 222, 143, 211, 214, 201, 95, 247, 25, 222, 143, 211, 214,
-    201, 94, 222, 143, 17, 195, 79, 222, 143, 17, 100, 222, 143, 17, 102,
-    222, 143, 17, 134, 222, 143, 17, 136, 222, 143, 17, 146, 222, 143, 17,
-    167, 222, 143, 17, 178, 222, 143, 17, 171, 222, 143, 17, 182, 222, 143,
-    1, 201, 78, 222, 143, 1, 201, 66, 222, 143, 1, 240, 41, 214, 135, 245,
-    68, 17, 195, 79, 214, 135, 245, 68, 17, 100, 214, 135, 245, 68, 17, 102,
-    214, 135, 245, 68, 17, 134, 214, 135, 245, 68, 17, 136, 214, 135, 245,
-    68, 17, 146, 214, 135, 245, 68, 17, 167, 214, 135, 245, 68, 17, 178, 214,
-    135, 245, 68, 17, 171, 214, 135, 245, 68, 17, 182, 214, 135, 245, 68, 1,
-    172, 214, 135, 245, 68, 1, 250, 168, 214, 135, 245, 68, 1, 251, 217, 214,
-    135, 245, 68, 1, 251, 97, 214, 135, 245, 68, 1, 251, 173, 214, 135, 245,
-    68, 1, 223, 82, 214, 135, 245, 68, 1, 252, 130, 214, 135, 245, 68, 1,
-    252, 131, 214, 135, 245, 68, 1, 252, 129, 214, 135, 245, 68, 1, 252, 123,
-    214, 135, 245, 68, 1, 222, 109, 214, 135, 245, 68, 1, 225, 248, 214, 135,
-    245, 68, 1, 226, 121, 214, 135, 245, 68, 1, 226, 14, 214, 135, 245, 68,
-    1, 226, 1, 214, 135, 245, 68, 1, 221, 191, 214, 135, 245, 68, 1, 200,
-    106, 214, 135, 245, 68, 1, 200, 104, 214, 135, 245, 68, 1, 200, 42, 214,
-    135, 245, 68, 1, 199, 237, 214, 135, 245, 68, 1, 222, 197, 214, 135, 245,
-    68, 1, 236, 183, 214, 135, 245, 68, 1, 237, 57, 214, 135, 245, 68, 1,
-    236, 230, 214, 135, 245, 68, 1, 236, 155, 214, 135, 245, 68, 1, 222, 7,
-    214, 135, 245, 68, 1, 214, 44, 214, 135, 245, 68, 1, 214, 186, 214, 135,
-    245, 68, 1, 214, 29, 214, 135, 245, 68, 1, 214, 149, 214, 135, 245, 68,
-    218, 146, 201, 43, 214, 135, 245, 68, 234, 118, 201, 44, 214, 135, 245,
-    68, 218, 140, 201, 44, 214, 135, 245, 68, 210, 137, 214, 135, 245, 68,
-    213, 4, 214, 135, 245, 68, 251, 208, 214, 135, 245, 68, 211, 214, 218,
-    136, 214, 135, 245, 68, 211, 214, 52, 218, 136, 40, 4, 1, 209, 185, 199,
-    118, 40, 4, 1, 221, 233, 239, 252, 40, 4, 1, 217, 210, 72, 40, 4, 1, 197,
-    62, 236, 151, 40, 4, 1, 203, 120, 203, 68, 40, 4, 1, 202, 150, 203, 68,
-    40, 4, 1, 203, 120, 232, 173, 55, 40, 4, 1, 203, 120, 196, 84, 40, 4, 1,
-    200, 67, 200, 87, 94, 218, 147, 6, 1, 251, 106, 94, 218, 147, 6, 1, 249,
-    93, 94, 218, 147, 6, 1, 234, 93, 94, 218, 147, 6, 1, 239, 6, 94, 218,
-    147, 6, 1, 236, 230, 94, 218, 147, 6, 1, 199, 16, 94, 218, 147, 6, 1,
-    195, 82, 94, 218, 147, 6, 1, 203, 114, 94, 218, 147, 6, 1, 226, 86, 94,
-    218, 147, 6, 1, 225, 17, 94, 218, 147, 6, 1, 222, 222, 94, 218, 147, 6,
-    1, 220, 62, 94, 218, 147, 6, 1, 217, 211, 94, 218, 147, 6, 1, 214, 119,
-    94, 218, 147, 6, 1, 213, 157, 94, 218, 147, 6, 1, 195, 70, 94, 218, 147,
-    6, 1, 210, 229, 94, 218, 147, 6, 1, 208, 219, 94, 218, 147, 6, 1, 203,
-    101, 94, 218, 147, 6, 1, 200, 72, 94, 218, 147, 6, 1, 212, 254, 94, 218,
-    147, 6, 1, 224, 134, 94, 218, 147, 6, 1, 233, 221, 94, 218, 147, 6, 1,
-    211, 144, 94, 218, 147, 6, 1, 206, 211, 94, 218, 147, 6, 1, 245, 62, 94,
-    218, 147, 6, 1, 247, 142, 94, 218, 147, 6, 1, 225, 162, 94, 218, 147, 6,
-    1, 245, 0, 94, 218, 147, 6, 1, 247, 0, 94, 218, 147, 6, 1, 196, 206, 94,
-    218, 147, 6, 1, 225, 177, 94, 218, 147, 6, 1, 232, 242, 94, 218, 147, 6,
-    1, 232, 147, 94, 218, 147, 6, 1, 232, 58, 94, 218, 147, 6, 1, 197, 109,
-    94, 218, 147, 6, 1, 232, 175, 94, 218, 147, 6, 1, 231, 181, 94, 218, 147,
-    6, 1, 235, 153, 94, 218, 147, 6, 1, 196, 5, 94, 218, 147, 6, 1, 236, 249,
-    94, 218, 147, 6, 1, 163, 234, 93, 94, 218, 147, 6, 1, 251, 194, 94, 218,
-    147, 6, 1, 251, 234, 94, 218, 147, 6, 1, 232, 173, 55, 94, 218, 147, 6,
-    1, 223, 73, 55, 204, 110, 211, 214, 248, 161, 204, 79, 204, 110, 211,
-    214, 248, 161, 213, 180, 204, 110, 211, 214, 248, 161, 211, 201, 204,
-    110, 211, 214, 248, 161, 247, 159, 204, 110, 211, 214, 248, 161, 222,
-    133, 208, 198, 204, 110, 211, 214, 248, 161, 225, 70, 208, 198, 204, 110,
-    211, 214, 248, 161, 240, 137, 208, 198, 204, 110, 211, 214, 248, 161,
-    249, 146, 208, 198, 199, 115, 152, 224, 243, 199, 115, 152, 207, 16, 199,
-    115, 152, 212, 29, 199, 115, 2, 216, 191, 199, 115, 2, 196, 106, 219, 61,
-    204, 70, 199, 115, 152, 196, 106, 251, 213, 226, 73, 204, 70, 199, 115,
-    152, 196, 106, 226, 73, 204, 70, 199, 115, 152, 196, 106, 224, 231, 226,
-    73, 204, 70, 199, 115, 152, 247, 136, 60, 199, 115, 152, 196, 106, 224,
-    231, 226, 73, 204, 71, 208, 165, 199, 115, 152, 52, 204, 70, 199, 115,
-    152, 201, 165, 204, 70, 199, 115, 152, 224, 231, 251, 53, 199, 115, 152,
-    76, 60, 199, 115, 152, 99, 238, 251, 60, 199, 115, 152, 115, 238, 251,
-    60, 199, 115, 152, 210, 10, 224, 242, 226, 73, 204, 70, 199, 115, 152,
-    250, 165, 226, 73, 204, 70, 199, 115, 2, 199, 3, 204, 70, 199, 115, 2,
-    199, 3, 200, 101, 199, 115, 2, 210, 89, 199, 3, 200, 101, 199, 115, 2,
-    199, 3, 251, 53, 199, 115, 2, 210, 89, 199, 3, 251, 53, 199, 115, 2, 199,
-    3, 200, 102, 3, 203, 135, 199, 115, 2, 199, 3, 251, 54, 3, 203, 135, 199,
-    115, 2, 251, 52, 251, 68, 199, 115, 2, 251, 52, 249, 112, 199, 115, 2,
-    251, 52, 199, 142, 199, 115, 2, 251, 52, 199, 143, 3, 203, 135, 199, 115,
-    2, 202, 58, 199, 115, 2, 232, 83, 181, 251, 51, 199, 115, 2, 181, 251,
-    51, 199, 115, 2, 209, 142, 181, 251, 51, 199, 115, 2, 251, 52, 200, 108,
-    218, 127, 199, 115, 2, 250, 247, 199, 115, 2, 209, 194, 250, 247, 199,
-    115, 152, 247, 136, 57, 199, 115, 2, 225, 165, 199, 115, 2, 200, 34, 199,
-    115, 2, 250, 163, 199, 115, 152, 210, 3, 57, 199, 115, 152, 52, 210, 3,
-    57, 199, 115, 2, 52, 251, 52, 251, 68, 8, 1, 4, 6, 63, 8, 1, 4, 6, 251,
-    245, 8, 4, 1, 163, 251, 245, 8, 1, 4, 6, 249, 74, 250, 112, 8, 1, 4, 6,
-    247, 207, 8, 1, 4, 6, 240, 231, 8, 1, 4, 6, 236, 121, 8, 1, 4, 6, 69, 8,
-    4, 1, 163, 192, 69, 8, 4, 1, 163, 68, 8, 1, 4, 6, 225, 217, 8, 1, 4, 6,
-    225, 80, 8, 1, 4, 6, 223, 100, 3, 106, 8, 1, 4, 6, 221, 136, 8, 1, 4, 6,
-    210, 89, 218, 55, 8, 1, 4, 6, 72, 8, 1, 4, 6, 192, 72, 8, 4, 1, 206, 96,
-    72, 8, 4, 1, 206, 96, 192, 72, 8, 4, 1, 206, 96, 177, 3, 106, 8, 4, 1,
-    163, 214, 164, 8, 1, 4, 6, 214, 39, 8, 4, 1, 201, 243, 157, 72, 8, 4, 1,
-    248, 85, 157, 72, 8, 1, 4, 6, 214, 3, 8, 1, 4, 6, 210, 89, 144, 8, 1, 4,
-    6, 163, 144, 8, 1, 4, 6, 203, 216, 8, 1, 4, 6, 66, 8, 4, 1, 206, 96, 66,
-    8, 4, 1, 206, 96, 239, 148, 66, 8, 4, 1, 206, 96, 163, 221, 136, 8, 1, 4,
-    6, 199, 230, 8, 1, 4, 6, 197, 199, 8, 1, 4, 6, 195, 158, 8, 1, 4, 6, 236,
-    52, 8, 1, 198, 244, 222, 223, 205, 119, 8, 1, 251, 194, 32, 1, 4, 6, 234,
-    94, 32, 1, 4, 6, 222, 245, 32, 1, 4, 6, 212, 220, 32, 1, 4, 6, 210, 74,
-    32, 1, 4, 6, 211, 238, 40, 1, 4, 6, 237, 7, 73, 1, 6, 63, 73, 1, 6, 251,
-    245, 73, 1, 6, 250, 112, 73, 1, 6, 249, 74, 250, 112, 73, 1, 6, 240, 231,
-    73, 1, 6, 69, 73, 1, 6, 210, 89, 69, 73, 1, 6, 234, 190, 73, 1, 6, 233,
-    15, 73, 1, 6, 68, 73, 1, 6, 225, 217, 73, 1, 6, 225, 80, 73, 1, 6, 159,
-    73, 1, 6, 221, 136, 73, 1, 6, 218, 55, 73, 1, 6, 210, 89, 218, 55, 73, 1,
-    6, 72, 73, 1, 6, 214, 39, 73, 1, 6, 214, 3, 73, 1, 6, 144, 73, 1, 6, 203,
-    216, 73, 1, 6, 66, 73, 1, 6, 197, 199, 73, 1, 4, 63, 73, 1, 4, 163, 63,
-    73, 1, 4, 251, 134, 73, 1, 4, 163, 251, 245, 73, 1, 4, 250, 112, 73, 1,
-    4, 240, 231, 73, 1, 4, 69, 73, 1, 4, 208, 163, 73, 1, 4, 192, 69, 73, 1,
-    4, 163, 192, 69, 73, 1, 4, 234, 190, 73, 1, 4, 163, 68, 73, 1, 4, 225,
-    80, 73, 1, 4, 221, 136, 73, 1, 4, 236, 215, 73, 1, 4, 72, 73, 1, 4, 192,
-    72, 73, 1, 4, 201, 243, 157, 72, 73, 1, 4, 248, 85, 157, 72, 73, 1, 4,
-    214, 3, 73, 1, 4, 203, 216, 73, 1, 4, 66, 73, 1, 4, 206, 96, 66, 73, 1,
-    4, 163, 221, 136, 73, 1, 4, 199, 230, 73, 1, 4, 251, 194, 73, 1, 4, 248,
-    206, 73, 1, 4, 32, 234, 94, 73, 1, 4, 239, 212, 73, 1, 4, 32, 212, 246,
-    73, 1, 4, 245, 75, 8, 204, 143, 4, 1, 68, 8, 204, 143, 4, 1, 144, 8, 204,
-    143, 4, 1, 66, 8, 204, 143, 4, 1, 199, 230, 32, 204, 143, 4, 1, 248, 206,
-    32, 204, 143, 4, 1, 234, 94, 32, 204, 143, 4, 1, 210, 74, 32, 204, 143,
-    4, 1, 212, 246, 32, 204, 143, 4, 1, 245, 75, 8, 4, 1, 200, 99, 8, 4, 1,
-    74, 3, 112, 202, 84, 8, 4, 1, 240, 232, 3, 112, 202, 84, 8, 4, 1, 236,
-    50, 3, 112, 202, 84, 8, 4, 1, 221, 137, 3, 112, 202, 84, 8, 4, 1, 218,
-    56, 3, 112, 202, 84, 8, 4, 1, 214, 4, 3, 112, 202, 84, 8, 4, 1, 211, 32,
-    3, 112, 202, 84, 8, 4, 1, 211, 32, 3, 235, 109, 26, 112, 202, 84, 8, 4,
-    1, 209, 81, 3, 112, 202, 84, 8, 4, 1, 203, 217, 3, 112, 202, 84, 8, 4, 1,
-    195, 159, 3, 112, 202, 84, 8, 4, 1, 163, 234, 190, 73, 1, 40, 236, 230,
-    8, 4, 1, 226, 39, 234, 190, 8, 4, 1, 202, 236, 3, 204, 200, 8, 4, 6, 1,
-    230, 249, 3, 106, 8, 4, 1, 226, 8, 3, 106, 8, 4, 1, 214, 4, 3, 106, 8, 4,
-    6, 1, 118, 3, 106, 8, 4, 1, 200, 29, 3, 106, 8, 4, 1, 74, 3, 213, 215,
-    122, 8, 4, 1, 240, 232, 3, 213, 215, 122, 8, 4, 1, 236, 50, 3, 213, 215,
-    122, 8, 4, 1, 234, 191, 3, 213, 215, 122, 8, 4, 1, 225, 81, 3, 213, 215,
-    122, 8, 4, 1, 223, 100, 3, 213, 215, 122, 8, 4, 1, 221, 137, 3, 213, 215,
-    122, 8, 4, 1, 218, 56, 3, 213, 215, 122, 8, 4, 1, 214, 4, 3, 213, 215,
-    122, 8, 4, 1, 211, 32, 3, 213, 215, 122, 8, 4, 1, 209, 81, 3, 213, 215,
-    122, 8, 4, 1, 236, 142, 3, 213, 215, 122, 8, 4, 1, 199, 231, 3, 213, 215,
-    122, 8, 4, 1, 196, 223, 3, 213, 215, 122, 8, 4, 1, 195, 159, 3, 213, 215,
-    122, 8, 4, 1, 39, 3, 210, 95, 122, 8, 4, 1, 251, 135, 3, 210, 95, 122, 8,
-    4, 1, 240, 232, 3, 231, 165, 26, 203, 135, 8, 4, 1, 237, 136, 3, 210, 95,
-    122, 8, 4, 1, 192, 237, 136, 3, 210, 95, 122, 8, 4, 1, 210, 89, 192, 237,
-    136, 3, 210, 95, 122, 8, 4, 1, 208, 164, 3, 210, 95, 122, 8, 4, 1, 230,
-    249, 3, 210, 95, 122, 8, 4, 1, 192, 177, 3, 210, 95, 122, 8, 4, 1, 236,
-    142, 3, 210, 95, 122, 8, 4, 1, 118, 3, 210, 95, 122, 8, 4, 1, 236, 53, 3,
-    210, 95, 122, 73, 1, 4, 163, 251, 134, 73, 1, 4, 247, 207, 73, 1, 4, 247,
-    208, 3, 241, 21, 73, 1, 4, 236, 121, 73, 1, 4, 210, 89, 192, 69, 73, 1,
-    4, 236, 49, 73, 1, 4, 238, 252, 225, 218, 3, 106, 73, 1, 4, 145, 234,
-    190, 73, 1, 4, 163, 233, 15, 73, 1, 4, 230, 249, 3, 106, 73, 1, 4, 226,
-    7, 73, 1, 4, 6, 68, 73, 1, 4, 6, 230, 249, 3, 106, 73, 1, 4, 225, 218, 3,
-    241, 57, 73, 1, 4, 223, 100, 3, 210, 95, 122, 73, 1, 4, 223, 100, 3, 213,
-    215, 122, 73, 1, 4, 6, 159, 73, 1, 4, 221, 137, 3, 122, 73, 1, 4, 163,
-    221, 137, 3, 181, 222, 172, 73, 1, 4, 218, 56, 3, 50, 122, 73, 1, 4, 218,
-    56, 3, 210, 95, 122, 73, 1, 4, 6, 218, 55, 73, 1, 4, 249, 74, 72, 73, 1,
-    4, 212, 246, 73, 1, 4, 209, 81, 3, 122, 73, 1, 4, 236, 141, 73, 1, 4,
-    203, 217, 3, 213, 215, 122, 73, 1, 4, 118, 154, 73, 1, 4, 200, 28, 73, 1,
-    4, 6, 66, 73, 1, 4, 199, 231, 3, 122, 73, 1, 4, 163, 199, 230, 73, 1, 4,
-    195, 158, 73, 1, 4, 195, 159, 3, 210, 95, 122, 73, 1, 4, 195, 159, 3,
-    241, 21, 73, 1, 4, 236, 52, 73, 1, 4, 202, 199, 38, 237, 250, 233, 101,
-    252, 22, 38, 237, 250, 252, 10, 252, 22, 38, 205, 213, 60, 38, 204, 77,
-    78, 38, 220, 113, 38, 233, 98, 38, 220, 111, 38, 252, 8, 38, 233, 99, 38,
-    252, 9, 38, 8, 4, 1, 211, 32, 60, 38, 248, 46, 38, 220, 112, 38, 52, 244,
-    241, 57, 38, 214, 152, 57, 38, 195, 24, 60, 38, 225, 249, 60, 38, 200,
-    22, 57, 38, 200, 5, 57, 38, 8, 4, 1, 235, 79, 192, 39, 57, 38, 8, 4, 1,
-    251, 245, 38, 8, 4, 1, 251, 49, 38, 8, 4, 1, 250, 133, 38, 8, 4, 1, 247,
-    208, 247, 50, 38, 8, 4, 1, 226, 39, 240, 231, 38, 8, 4, 1, 236, 121, 38,
-    8, 4, 1, 234, 190, 38, 8, 1, 4, 6, 234, 190, 38, 8, 4, 1, 225, 80, 38, 8,
-    4, 1, 159, 38, 8, 1, 4, 6, 159, 38, 8, 1, 4, 6, 221, 136, 38, 8, 4, 1,
-    218, 55, 38, 8, 1, 4, 6, 218, 55, 38, 8, 1, 4, 6, 144, 38, 8, 4, 1, 211,
-    32, 209, 188, 38, 8, 4, 1, 209, 80, 38, 8, 4, 1, 181, 209, 80, 38, 8, 4,
-    1, 195, 158, 38, 8, 4, 1, 251, 134, 38, 8, 4, 1, 250, 112, 38, 8, 4, 1,
-    248, 206, 38, 8, 4, 1, 208, 163, 38, 8, 4, 1, 236, 49, 38, 8, 4, 1, 223,
-    100, 3, 52, 112, 202, 84, 38, 8, 4, 1, 177, 3, 175, 247, 38, 106, 38, 8,
-    4, 1, 214, 3, 38, 8, 4, 1, 236, 141, 38, 8, 4, 1, 118, 3, 175, 247, 38,
-    106, 38, 8, 4, 1, 197, 199, 38, 8, 4, 1, 39, 3, 239, 150, 38, 8, 4, 1,
-    177, 3, 239, 150, 38, 8, 4, 1, 118, 3, 239, 150, 38, 124, 203, 148, 57,
-    38, 224, 222, 90, 210, 22, 38, 224, 222, 90, 222, 184, 38, 76, 90, 222,
-    184, 38, 197, 62, 226, 17, 248, 40, 60, 38, 239, 221, 78, 38, 52, 226,
-    17, 248, 48, 60, 38, 251, 139, 180, 202, 30, 60, 38, 50, 250, 218, 57,
-    38, 53, 250, 218, 26, 135, 250, 218, 60, 8, 6, 1, 39, 3, 210, 3, 60, 8,
-    4, 1, 39, 3, 210, 3, 60, 8, 6, 1, 74, 3, 76, 57, 8, 4, 1, 74, 3, 76, 57,
-    8, 6, 1, 74, 3, 76, 60, 8, 4, 1, 74, 3, 76, 60, 8, 6, 1, 74, 3, 222, 76,
-    60, 8, 4, 1, 74, 3, 222, 76, 60, 8, 6, 1, 247, 208, 3, 247, 51, 26, 186,
-    8, 4, 1, 247, 208, 3, 247, 51, 26, 186, 8, 6, 1, 240, 232, 3, 76, 57, 8,
-    4, 1, 240, 232, 3, 76, 57, 8, 6, 1, 240, 232, 3, 76, 60, 8, 4, 1, 240,
-    232, 3, 76, 60, 8, 6, 1, 240, 232, 3, 222, 76, 60, 8, 4, 1, 240, 232, 3,
-    222, 76, 60, 8, 6, 1, 240, 232, 3, 247, 50, 8, 4, 1, 240, 232, 3, 247,
-    50, 8, 6, 1, 240, 232, 3, 244, 241, 60, 8, 4, 1, 240, 232, 3, 244, 241,
-    60, 8, 6, 1, 237, 136, 3, 220, 115, 26, 233, 100, 8, 4, 1, 237, 136, 3,
-    220, 115, 26, 233, 100, 8, 6, 1, 237, 136, 3, 220, 115, 26, 186, 8, 4, 1,
-    237, 136, 3, 220, 115, 26, 186, 8, 6, 1, 237, 136, 3, 244, 241, 60, 8, 4,
-    1, 237, 136, 3, 244, 241, 60, 8, 6, 1, 237, 136, 3, 202, 85, 60, 8, 4, 1,
-    237, 136, 3, 202, 85, 60, 8, 6, 1, 237, 136, 3, 247, 51, 26, 248, 47, 8,
-    4, 1, 237, 136, 3, 247, 51, 26, 248, 47, 8, 6, 1, 236, 50, 3, 76, 57, 8,
-    4, 1, 236, 50, 3, 76, 57, 8, 6, 1, 234, 191, 3, 220, 114, 8, 4, 1, 234,
-    191, 3, 220, 114, 8, 6, 1, 233, 16, 3, 76, 57, 8, 4, 1, 233, 16, 3, 76,
-    57, 8, 6, 1, 233, 16, 3, 76, 60, 8, 4, 1, 233, 16, 3, 76, 60, 8, 6, 1,
-    233, 16, 3, 239, 150, 8, 4, 1, 233, 16, 3, 239, 150, 8, 6, 1, 233, 16, 3,
-    247, 50, 8, 4, 1, 233, 16, 3, 247, 50, 8, 6, 1, 233, 16, 3, 248, 48, 60,
-    8, 4, 1, 233, 16, 3, 248, 48, 60, 8, 6, 1, 230, 249, 3, 202, 85, 60, 8,
-    4, 1, 230, 249, 3, 202, 85, 60, 8, 6, 1, 230, 249, 3, 239, 151, 26, 186,
-    8, 4, 1, 230, 249, 3, 239, 151, 26, 186, 8, 6, 1, 225, 81, 3, 186, 8, 4,
-    1, 225, 81, 3, 186, 8, 6, 1, 225, 81, 3, 76, 60, 8, 4, 1, 225, 81, 3, 76,
-    60, 8, 6, 1, 225, 81, 3, 222, 76, 60, 8, 4, 1, 225, 81, 3, 222, 76, 60,
-    8, 6, 1, 223, 100, 3, 76, 60, 8, 4, 1, 223, 100, 3, 76, 60, 8, 6, 1, 223,
-    100, 3, 76, 248, 227, 26, 220, 114, 8, 4, 1, 223, 100, 3, 76, 248, 227,
-    26, 220, 114, 8, 6, 1, 223, 100, 3, 222, 76, 60, 8, 4, 1, 223, 100, 3,
-    222, 76, 60, 8, 6, 1, 223, 100, 3, 244, 241, 60, 8, 4, 1, 223, 100, 3,
-    244, 241, 60, 8, 6, 1, 221, 137, 3, 186, 8, 4, 1, 221, 137, 3, 186, 8, 6,
-    1, 221, 137, 3, 76, 57, 8, 4, 1, 221, 137, 3, 76, 57, 8, 6, 1, 221, 137,
-    3, 76, 60, 8, 4, 1, 221, 137, 3, 76, 60, 8, 6, 1, 218, 56, 3, 76, 57, 8,
-    4, 1, 218, 56, 3, 76, 57, 8, 6, 1, 218, 56, 3, 76, 60, 8, 4, 1, 218, 56,
-    3, 76, 60, 8, 6, 1, 218, 56, 3, 222, 76, 60, 8, 4, 1, 218, 56, 3, 222,
-    76, 60, 8, 6, 1, 218, 56, 3, 244, 241, 60, 8, 4, 1, 218, 56, 3, 244, 241,
-    60, 8, 6, 1, 177, 3, 202, 85, 26, 186, 8, 4, 1, 177, 3, 202, 85, 26, 186,
-    8, 6, 1, 177, 3, 202, 85, 26, 239, 150, 8, 4, 1, 177, 3, 202, 85, 26,
-    239, 150, 8, 6, 1, 177, 3, 220, 115, 26, 233, 100, 8, 4, 1, 177, 3, 220,
-    115, 26, 233, 100, 8, 6, 1, 177, 3, 220, 115, 26, 186, 8, 4, 1, 177, 3,
-    220, 115, 26, 186, 8, 6, 1, 214, 4, 3, 186, 8, 4, 1, 214, 4, 3, 186, 8,
-    6, 1, 214, 4, 3, 76, 57, 8, 4, 1, 214, 4, 3, 76, 57, 8, 6, 1, 211, 32, 3,
-    76, 57, 8, 4, 1, 211, 32, 3, 76, 57, 8, 6, 1, 211, 32, 3, 76, 60, 8, 4,
-    1, 211, 32, 3, 76, 60, 8, 6, 1, 211, 32, 3, 76, 248, 227, 26, 220, 114,
-    8, 4, 1, 211, 32, 3, 76, 248, 227, 26, 220, 114, 8, 6, 1, 211, 32, 3,
-    222, 76, 60, 8, 4, 1, 211, 32, 3, 222, 76, 60, 8, 6, 1, 209, 81, 3, 76,
-    57, 8, 4, 1, 209, 81, 3, 76, 57, 8, 6, 1, 209, 81, 3, 76, 60, 8, 4, 1,
-    209, 81, 3, 76, 60, 8, 6, 1, 209, 81, 3, 252, 10, 26, 76, 57, 8, 4, 1,
-    209, 81, 3, 252, 10, 26, 76, 57, 8, 6, 1, 209, 81, 3, 247, 107, 26, 76,
-    57, 8, 4, 1, 209, 81, 3, 247, 107, 26, 76, 57, 8, 6, 1, 209, 81, 3, 76,
-    248, 227, 26, 76, 57, 8, 4, 1, 209, 81, 3, 76, 248, 227, 26, 76, 57, 8,
-    6, 1, 203, 217, 3, 76, 57, 8, 4, 1, 203, 217, 3, 76, 57, 8, 6, 1, 203,
-    217, 3, 76, 60, 8, 4, 1, 203, 217, 3, 76, 60, 8, 6, 1, 203, 217, 3, 222,
-    76, 60, 8, 4, 1, 203, 217, 3, 222, 76, 60, 8, 6, 1, 203, 217, 3, 244,
-    241, 60, 8, 4, 1, 203, 217, 3, 244, 241, 60, 8, 6, 1, 118, 3, 239, 151,
-    60, 8, 4, 1, 118, 3, 239, 151, 60, 8, 6, 1, 118, 3, 202, 85, 60, 8, 4, 1,
-    118, 3, 202, 85, 60, 8, 6, 1, 118, 3, 244, 241, 60, 8, 4, 1, 118, 3, 244,
-    241, 60, 8, 6, 1, 118, 3, 202, 85, 26, 186, 8, 4, 1, 118, 3, 202, 85, 26,
-    186, 8, 6, 1, 118, 3, 220, 115, 26, 239, 150, 8, 4, 1, 118, 3, 220, 115,
-    26, 239, 150, 8, 6, 1, 199, 231, 3, 202, 84, 8, 4, 1, 199, 231, 3, 202,
-    84, 8, 6, 1, 199, 231, 3, 76, 60, 8, 4, 1, 199, 231, 3, 76, 60, 8, 6, 1,
-    197, 200, 3, 233, 100, 8, 4, 1, 197, 200, 3, 233, 100, 8, 6, 1, 197, 200,
-    3, 186, 8, 4, 1, 197, 200, 3, 186, 8, 6, 1, 197, 200, 3, 239, 150, 8, 4,
-    1, 197, 200, 3, 239, 150, 8, 6, 1, 197, 200, 3, 76, 57, 8, 4, 1, 197,
-    200, 3, 76, 57, 8, 6, 1, 197, 200, 3, 76, 60, 8, 4, 1, 197, 200, 3, 76,
-    60, 8, 6, 1, 196, 223, 3, 76, 57, 8, 4, 1, 196, 223, 3, 76, 57, 8, 6, 1,
-    196, 223, 3, 239, 150, 8, 4, 1, 196, 223, 3, 239, 150, 8, 6, 1, 196, 149,
-    3, 76, 57, 8, 4, 1, 196, 149, 3, 76, 57, 8, 6, 1, 195, 159, 3, 244, 240,
-    8, 4, 1, 195, 159, 3, 244, 240, 8, 6, 1, 195, 159, 3, 76, 60, 8, 4, 1,
-    195, 159, 3, 76, 60, 8, 6, 1, 195, 159, 3, 222, 76, 60, 8, 4, 1, 195,
-    159, 3, 222, 76, 60, 8, 4, 1, 233, 16, 3, 222, 76, 60, 8, 4, 1, 203, 217,
-    3, 239, 150, 8, 4, 1, 197, 200, 3, 210, 3, 57, 8, 4, 1, 196, 149, 3, 210,
-    3, 57, 8, 4, 1, 39, 3, 53, 157, 210, 2, 8, 4, 1, 181, 209, 81, 3, 76, 57,
-    8, 4, 1, 181, 209, 81, 3, 239, 147, 106, 8, 4, 1, 181, 209, 81, 3, 130,
-    106, 8, 6, 1, 207, 13, 209, 80, 8, 4, 1, 239, 212, 8, 6, 1, 39, 3, 76,
-    60, 8, 4, 1, 39, 3, 76, 60, 8, 6, 1, 39, 3, 231, 165, 57, 8, 4, 1, 39, 3,
-    231, 165, 57, 8, 6, 1, 39, 3, 244, 241, 26, 186, 8, 4, 1, 39, 3, 244,
-    241, 26, 186, 8, 6, 1, 39, 3, 244, 241, 26, 233, 100, 8, 4, 1, 39, 3,
-    244, 241, 26, 233, 100, 8, 6, 1, 39, 3, 244, 241, 26, 231, 165, 57, 8, 4,
-    1, 39, 3, 244, 241, 26, 231, 165, 57, 8, 6, 1, 39, 3, 244, 241, 26, 202,
-    84, 8, 4, 1, 39, 3, 244, 241, 26, 202, 84, 8, 6, 1, 39, 3, 244, 241, 26,
-    76, 60, 8, 4, 1, 39, 3, 244, 241, 26, 76, 60, 8, 6, 1, 39, 3, 248, 48,
-    26, 186, 8, 4, 1, 39, 3, 248, 48, 26, 186, 8, 6, 1, 39, 3, 248, 48, 26,
-    233, 100, 8, 4, 1, 39, 3, 248, 48, 26, 233, 100, 8, 6, 1, 39, 3, 248, 48,
-    26, 231, 165, 57, 8, 4, 1, 39, 3, 248, 48, 26, 231, 165, 57, 8, 6, 1, 39,
-    3, 248, 48, 26, 202, 84, 8, 4, 1, 39, 3, 248, 48, 26, 202, 84, 8, 6, 1,
-    39, 3, 248, 48, 26, 76, 60, 8, 4, 1, 39, 3, 248, 48, 26, 76, 60, 8, 6, 1,
-    237, 136, 3, 76, 60, 8, 4, 1, 237, 136, 3, 76, 60, 8, 6, 1, 237, 136, 3,
-    231, 165, 57, 8, 4, 1, 237, 136, 3, 231, 165, 57, 8, 6, 1, 237, 136, 3,
-    202, 84, 8, 4, 1, 237, 136, 3, 202, 84, 8, 6, 1, 237, 136, 3, 244, 241,
-    26, 186, 8, 4, 1, 237, 136, 3, 244, 241, 26, 186, 8, 6, 1, 237, 136, 3,
-    244, 241, 26, 233, 100, 8, 4, 1, 237, 136, 3, 244, 241, 26, 233, 100, 8,
-    6, 1, 237, 136, 3, 244, 241, 26, 231, 165, 57, 8, 4, 1, 237, 136, 3, 244,
-    241, 26, 231, 165, 57, 8, 6, 1, 237, 136, 3, 244, 241, 26, 202, 84, 8, 4,
-    1, 237, 136, 3, 244, 241, 26, 202, 84, 8, 6, 1, 237, 136, 3, 244, 241,
-    26, 76, 60, 8, 4, 1, 237, 136, 3, 244, 241, 26, 76, 60, 8, 6, 1, 230,
-    249, 3, 231, 165, 57, 8, 4, 1, 230, 249, 3, 231, 165, 57, 8, 6, 1, 230,
-    249, 3, 76, 60, 8, 4, 1, 230, 249, 3, 76, 60, 8, 6, 1, 177, 3, 76, 60, 8,
-    4, 1, 177, 3, 76, 60, 8, 6, 1, 177, 3, 231, 165, 57, 8, 4, 1, 177, 3,
-    231, 165, 57, 8, 6, 1, 177, 3, 244, 241, 26, 186, 8, 4, 1, 177, 3, 244,
-    241, 26, 186, 8, 6, 1, 177, 3, 244, 241, 26, 233, 100, 8, 4, 1, 177, 3,
-    244, 241, 26, 233, 100, 8, 6, 1, 177, 3, 244, 241, 26, 231, 165, 57, 8,
-    4, 1, 177, 3, 244, 241, 26, 231, 165, 57, 8, 6, 1, 177, 3, 244, 241, 26,
-    202, 84, 8, 4, 1, 177, 3, 244, 241, 26, 202, 84, 8, 6, 1, 177, 3, 244,
-    241, 26, 76, 60, 8, 4, 1, 177, 3, 244, 241, 26, 76, 60, 8, 6, 1, 177, 3,
-    231, 103, 26, 186, 8, 4, 1, 177, 3, 231, 103, 26, 186, 8, 6, 1, 177, 3,
-    231, 103, 26, 233, 100, 8, 4, 1, 177, 3, 231, 103, 26, 233, 100, 8, 6, 1,
-    177, 3, 231, 103, 26, 231, 165, 57, 8, 4, 1, 177, 3, 231, 103, 26, 231,
-    165, 57, 8, 6, 1, 177, 3, 231, 103, 26, 202, 84, 8, 4, 1, 177, 3, 231,
-    103, 26, 202, 84, 8, 6, 1, 177, 3, 231, 103, 26, 76, 60, 8, 4, 1, 177, 3,
-    231, 103, 26, 76, 60, 8, 6, 1, 118, 3, 76, 60, 8, 4, 1, 118, 3, 76, 60,
-    8, 6, 1, 118, 3, 231, 165, 57, 8, 4, 1, 118, 3, 231, 165, 57, 8, 6, 1,
-    118, 3, 231, 103, 26, 186, 8, 4, 1, 118, 3, 231, 103, 26, 186, 8, 6, 1,
-    118, 3, 231, 103, 26, 233, 100, 8, 4, 1, 118, 3, 231, 103, 26, 233, 100,
-    8, 6, 1, 118, 3, 231, 103, 26, 231, 165, 57, 8, 4, 1, 118, 3, 231, 103,
-    26, 231, 165, 57, 8, 6, 1, 118, 3, 231, 103, 26, 202, 84, 8, 4, 1, 118,
-    3, 231, 103, 26, 202, 84, 8, 6, 1, 118, 3, 231, 103, 26, 76, 60, 8, 4, 1,
-    118, 3, 231, 103, 26, 76, 60, 8, 6, 1, 196, 149, 3, 233, 100, 8, 4, 1,
-    196, 149, 3, 233, 100, 8, 6, 1, 196, 149, 3, 76, 60, 8, 4, 1, 196, 149,
-    3, 76, 60, 8, 6, 1, 196, 149, 3, 231, 165, 57, 8, 4, 1, 196, 149, 3, 231,
-    165, 57, 8, 6, 1, 196, 149, 3, 202, 84, 8, 4, 1, 196, 149, 3, 202, 84, 8,
-    6, 1, 219, 62, 222, 38, 8, 4, 1, 219, 62, 222, 38, 8, 6, 1, 219, 62, 199,
-    230, 8, 4, 1, 219, 62, 199, 230, 8, 6, 1, 196, 149, 3, 221, 225, 8, 4, 1,
-    196, 149, 3, 221, 225, 32, 4, 1, 251, 135, 3, 211, 231, 32, 4, 1, 251,
-    135, 3, 240, 62, 32, 4, 1, 251, 135, 3, 211, 232, 26, 199, 133, 32, 4, 1,
-    251, 135, 3, 240, 63, 26, 199, 133, 32, 4, 1, 251, 135, 3, 211, 232, 26,
-    214, 9, 32, 4, 1, 251, 135, 3, 240, 63, 26, 214, 9, 32, 4, 1, 251, 135,
-    3, 211, 232, 26, 213, 38, 32, 4, 1, 251, 135, 3, 240, 63, 26, 213, 38,
-    32, 6, 1, 251, 135, 3, 211, 231, 32, 6, 1, 251, 135, 3, 240, 62, 32, 6,
-    1, 251, 135, 3, 211, 232, 26, 199, 133, 32, 6, 1, 251, 135, 3, 240, 63,
-    26, 199, 133, 32, 6, 1, 251, 135, 3, 211, 232, 26, 214, 9, 32, 6, 1, 251,
-    135, 3, 240, 63, 26, 214, 9, 32, 6, 1, 251, 135, 3, 211, 232, 26, 213,
-    38, 32, 6, 1, 251, 135, 3, 240, 63, 26, 213, 38, 32, 4, 1, 236, 175, 3,
-    211, 231, 32, 4, 1, 236, 175, 3, 240, 62, 32, 4, 1, 236, 175, 3, 211,
-    232, 26, 199, 133, 32, 4, 1, 236, 175, 3, 240, 63, 26, 199, 133, 32, 4,
-    1, 236, 175, 3, 211, 232, 26, 214, 9, 32, 4, 1, 236, 175, 3, 240, 63, 26,
-    214, 9, 32, 6, 1, 236, 175, 3, 211, 231, 32, 6, 1, 236, 175, 3, 240, 62,
-    32, 6, 1, 236, 175, 3, 211, 232, 26, 199, 133, 32, 6, 1, 236, 175, 3,
-    240, 63, 26, 199, 133, 32, 6, 1, 236, 175, 3, 211, 232, 26, 214, 9, 32,
-    6, 1, 236, 175, 3, 240, 63, 26, 214, 9, 32, 4, 1, 236, 127, 3, 211, 231,
-    32, 4, 1, 236, 127, 3, 240, 62, 32, 4, 1, 236, 127, 3, 211, 232, 26, 199,
-    133, 32, 4, 1, 236, 127, 3, 240, 63, 26, 199, 133, 32, 4, 1, 236, 127, 3,
-    211, 232, 26, 214, 9, 32, 4, 1, 236, 127, 3, 240, 63, 26, 214, 9, 32, 4,
-    1, 236, 127, 3, 211, 232, 26, 213, 38, 32, 4, 1, 236, 127, 3, 240, 63,
-    26, 213, 38, 32, 6, 1, 236, 127, 3, 211, 231, 32, 6, 1, 236, 127, 3, 240,
-    62, 32, 6, 1, 236, 127, 3, 211, 232, 26, 199, 133, 32, 6, 1, 236, 127, 3,
-    240, 63, 26, 199, 133, 32, 6, 1, 236, 127, 3, 211, 232, 26, 214, 9, 32,
-    6, 1, 236, 127, 3, 240, 63, 26, 214, 9, 32, 6, 1, 236, 127, 3, 211, 232,
-    26, 213, 38, 32, 6, 1, 236, 127, 3, 240, 63, 26, 213, 38, 32, 4, 1, 226,
-    8, 3, 211, 231, 32, 4, 1, 226, 8, 3, 240, 62, 32, 4, 1, 226, 8, 3, 211,
-    232, 26, 199, 133, 32, 4, 1, 226, 8, 3, 240, 63, 26, 199, 133, 32, 4, 1,
-    226, 8, 3, 211, 232, 26, 214, 9, 32, 4, 1, 226, 8, 3, 240, 63, 26, 214,
-    9, 32, 4, 1, 226, 8, 3, 211, 232, 26, 213, 38, 32, 4, 1, 226, 8, 3, 240,
-    63, 26, 213, 38, 32, 6, 1, 226, 8, 3, 211, 231, 32, 6, 1, 226, 8, 3, 240,
-    62, 32, 6, 1, 226, 8, 3, 211, 232, 26, 199, 133, 32, 6, 1, 226, 8, 3,
-    240, 63, 26, 199, 133, 32, 6, 1, 226, 8, 3, 211, 232, 26, 214, 9, 32, 6,
-    1, 226, 8, 3, 240, 63, 26, 214, 9, 32, 6, 1, 226, 8, 3, 211, 232, 26,
-    213, 38, 32, 6, 1, 226, 8, 3, 240, 63, 26, 213, 38, 32, 4, 1, 214, 123,
-    3, 211, 231, 32, 4, 1, 214, 123, 3, 240, 62, 32, 4, 1, 214, 123, 3, 211,
-    232, 26, 199, 133, 32, 4, 1, 214, 123, 3, 240, 63, 26, 199, 133, 32, 4,
-    1, 214, 123, 3, 211, 232, 26, 214, 9, 32, 4, 1, 214, 123, 3, 240, 63, 26,
-    214, 9, 32, 6, 1, 214, 123, 3, 211, 231, 32, 6, 1, 214, 123, 3, 240, 62,
-    32, 6, 1, 214, 123, 3, 211, 232, 26, 199, 133, 32, 6, 1, 214, 123, 3,
-    240, 63, 26, 199, 133, 32, 6, 1, 214, 123, 3, 211, 232, 26, 214, 9, 32,
-    6, 1, 214, 123, 3, 240, 63, 26, 214, 9, 32, 4, 1, 200, 29, 3, 211, 231,
-    32, 4, 1, 200, 29, 3, 240, 62, 32, 4, 1, 200, 29, 3, 211, 232, 26, 199,
-    133, 32, 4, 1, 200, 29, 3, 240, 63, 26, 199, 133, 32, 4, 1, 200, 29, 3,
-    211, 232, 26, 214, 9, 32, 4, 1, 200, 29, 3, 240, 63, 26, 214, 9, 32, 4,
-    1, 200, 29, 3, 211, 232, 26, 213, 38, 32, 4, 1, 200, 29, 3, 240, 63, 26,
-    213, 38, 32, 6, 1, 200, 29, 3, 240, 62, 32, 6, 1, 200, 29, 3, 240, 63,
-    26, 199, 133, 32, 6, 1, 200, 29, 3, 240, 63, 26, 214, 9, 32, 6, 1, 200,
-    29, 3, 240, 63, 26, 213, 38, 32, 4, 1, 214, 125, 3, 211, 231, 32, 4, 1,
-    214, 125, 3, 240, 62, 32, 4, 1, 214, 125, 3, 211, 232, 26, 199, 133, 32,
-    4, 1, 214, 125, 3, 240, 63, 26, 199, 133, 32, 4, 1, 214, 125, 3, 211,
-    232, 26, 214, 9, 32, 4, 1, 214, 125, 3, 240, 63, 26, 214, 9, 32, 4, 1,
-    214, 125, 3, 211, 232, 26, 213, 38, 32, 4, 1, 214, 125, 3, 240, 63, 26,
-    213, 38, 32, 6, 1, 214, 125, 3, 211, 231, 32, 6, 1, 214, 125, 3, 240, 62,
-    32, 6, 1, 214, 125, 3, 211, 232, 26, 199, 133, 32, 6, 1, 214, 125, 3,
-    240, 63, 26, 199, 133, 32, 6, 1, 214, 125, 3, 211, 232, 26, 214, 9, 32,
-    6, 1, 214, 125, 3, 240, 63, 26, 214, 9, 32, 6, 1, 214, 125, 3, 211, 232,
-    26, 213, 38, 32, 6, 1, 214, 125, 3, 240, 63, 26, 213, 38, 32, 4, 1, 251,
-    135, 3, 199, 133, 32, 4, 1, 251, 135, 3, 214, 9, 32, 4, 1, 236, 175, 3,
-    199, 133, 32, 4, 1, 236, 175, 3, 214, 9, 32, 4, 1, 236, 127, 3, 199, 133,
-    32, 4, 1, 236, 127, 3, 214, 9, 32, 4, 1, 226, 8, 3, 199, 133, 32, 4, 1,
-    226, 8, 3, 214, 9, 32, 4, 1, 214, 123, 3, 199, 133, 32, 4, 1, 214, 123,
-    3, 214, 9, 32, 4, 1, 200, 29, 3, 199, 133, 32, 4, 1, 200, 29, 3, 214, 9,
-    32, 4, 1, 214, 125, 3, 199, 133, 32, 4, 1, 214, 125, 3, 214, 9, 32, 4, 1,
-    251, 135, 3, 211, 232, 26, 195, 225, 32, 4, 1, 251, 135, 3, 240, 63, 26,
-    195, 225, 32, 4, 1, 251, 135, 3, 211, 232, 26, 199, 134, 26, 195, 225,
-    32, 4, 1, 251, 135, 3, 240, 63, 26, 199, 134, 26, 195, 225, 32, 4, 1,
-    251, 135, 3, 211, 232, 26, 214, 10, 26, 195, 225, 32, 4, 1, 251, 135, 3,
-    240, 63, 26, 214, 10, 26, 195, 225, 32, 4, 1, 251, 135, 3, 211, 232, 26,
-    213, 39, 26, 195, 225, 32, 4, 1, 251, 135, 3, 240, 63, 26, 213, 39, 26,
-    195, 225, 32, 6, 1, 251, 135, 3, 211, 232, 26, 211, 245, 32, 6, 1, 251,
-    135, 3, 240, 63, 26, 211, 245, 32, 6, 1, 251, 135, 3, 211, 232, 26, 199,
-    134, 26, 211, 245, 32, 6, 1, 251, 135, 3, 240, 63, 26, 199, 134, 26, 211,
-    245, 32, 6, 1, 251, 135, 3, 211, 232, 26, 214, 10, 26, 211, 245, 32, 6,
-    1, 251, 135, 3, 240, 63, 26, 214, 10, 26, 211, 245, 32, 6, 1, 251, 135,
-    3, 211, 232, 26, 213, 39, 26, 211, 245, 32, 6, 1, 251, 135, 3, 240, 63,
-    26, 213, 39, 26, 211, 245, 32, 4, 1, 236, 127, 3, 211, 232, 26, 195, 225,
-    32, 4, 1, 236, 127, 3, 240, 63, 26, 195, 225, 32, 4, 1, 236, 127, 3, 211,
-    232, 26, 199, 134, 26, 195, 225, 32, 4, 1, 236, 127, 3, 240, 63, 26, 199,
-    134, 26, 195, 225, 32, 4, 1, 236, 127, 3, 211, 232, 26, 214, 10, 26, 195,
-    225, 32, 4, 1, 236, 127, 3, 240, 63, 26, 214, 10, 26, 195, 225, 32, 4, 1,
-    236, 127, 3, 211, 232, 26, 213, 39, 26, 195, 225, 32, 4, 1, 236, 127, 3,
-    240, 63, 26, 213, 39, 26, 195, 225, 32, 6, 1, 236, 127, 3, 211, 232, 26,
-    211, 245, 32, 6, 1, 236, 127, 3, 240, 63, 26, 211, 245, 32, 6, 1, 236,
-    127, 3, 211, 232, 26, 199, 134, 26, 211, 245, 32, 6, 1, 236, 127, 3, 240,
-    63, 26, 199, 134, 26, 211, 245, 32, 6, 1, 236, 127, 3, 211, 232, 26, 214,
-    10, 26, 211, 245, 32, 6, 1, 236, 127, 3, 240, 63, 26, 214, 10, 26, 211,
-    245, 32, 6, 1, 236, 127, 3, 211, 232, 26, 213, 39, 26, 211, 245, 32, 6,
-    1, 236, 127, 3, 240, 63, 26, 213, 39, 26, 211, 245, 32, 4, 1, 214, 125,
-    3, 211, 232, 26, 195, 225, 32, 4, 1, 214, 125, 3, 240, 63, 26, 195, 225,
-    32, 4, 1, 214, 125, 3, 211, 232, 26, 199, 134, 26, 195, 225, 32, 4, 1,
-    214, 125, 3, 240, 63, 26, 199, 134, 26, 195, 225, 32, 4, 1, 214, 125, 3,
-    211, 232, 26, 214, 10, 26, 195, 225, 32, 4, 1, 214, 125, 3, 240, 63, 26,
-    214, 10, 26, 195, 225, 32, 4, 1, 214, 125, 3, 211, 232, 26, 213, 39, 26,
-    195, 225, 32, 4, 1, 214, 125, 3, 240, 63, 26, 213, 39, 26, 195, 225, 32,
-    6, 1, 214, 125, 3, 211, 232, 26, 211, 245, 32, 6, 1, 214, 125, 3, 240,
-    63, 26, 211, 245, 32, 6, 1, 214, 125, 3, 211, 232, 26, 199, 134, 26, 211,
-    245, 32, 6, 1, 214, 125, 3, 240, 63, 26, 199, 134, 26, 211, 245, 32, 6,
-    1, 214, 125, 3, 211, 232, 26, 214, 10, 26, 211, 245, 32, 6, 1, 214, 125,
-    3, 240, 63, 26, 214, 10, 26, 211, 245, 32, 6, 1, 214, 125, 3, 211, 232,
-    26, 213, 39, 26, 211, 245, 32, 6, 1, 214, 125, 3, 240, 63, 26, 213, 39,
-    26, 211, 245, 32, 4, 1, 251, 135, 3, 198, 224, 32, 4, 1, 251, 135, 3,
-    220, 114, 32, 4, 1, 251, 135, 3, 199, 134, 26, 195, 225, 32, 4, 1, 251,
-    135, 3, 195, 225, 32, 4, 1, 251, 135, 3, 214, 10, 26, 195, 225, 32, 4, 1,
-    251, 135, 3, 213, 38, 32, 4, 1, 251, 135, 3, 213, 39, 26, 195, 225, 32,
-    6, 1, 251, 135, 3, 198, 224, 32, 6, 1, 251, 135, 3, 220, 114, 32, 6, 1,
-    251, 135, 3, 199, 133, 32, 6, 1, 251, 135, 3, 214, 9, 32, 6, 1, 251, 135,
-    3, 211, 245, 32, 223, 232, 32, 211, 245, 32, 211, 231, 32, 213, 38, 32,
-    239, 144, 26, 213, 38, 32, 4, 1, 236, 127, 3, 199, 134, 26, 195, 225, 32,
-    4, 1, 236, 127, 3, 195, 225, 32, 4, 1, 236, 127, 3, 214, 10, 26, 195,
-    225, 32, 4, 1, 236, 127, 3, 213, 38, 32, 4, 1, 236, 127, 3, 213, 39, 26,
-    195, 225, 32, 6, 1, 236, 175, 3, 199, 133, 32, 6, 1, 236, 175, 3, 214, 9,
-    32, 6, 1, 236, 127, 3, 199, 133, 32, 6, 1, 236, 127, 3, 214, 9, 32, 6, 1,
-    236, 127, 3, 211, 245, 32, 211, 232, 26, 199, 133, 32, 211, 232, 26, 214,
-    9, 32, 211, 232, 26, 213, 38, 32, 4, 1, 226, 8, 3, 198, 224, 32, 4, 1,
-    226, 8, 3, 220, 114, 32, 4, 1, 226, 8, 3, 239, 144, 26, 199, 133, 32, 4,
-    1, 226, 8, 3, 239, 144, 26, 214, 9, 32, 4, 1, 226, 8, 3, 213, 38, 32, 4,
-    1, 226, 8, 3, 239, 144, 26, 213, 38, 32, 6, 1, 226, 8, 3, 198, 224, 32,
-    6, 1, 226, 8, 3, 220, 114, 32, 6, 1, 226, 8, 3, 199, 133, 32, 6, 1, 226,
-    8, 3, 214, 9, 32, 240, 63, 26, 199, 133, 32, 240, 63, 26, 214, 9, 32,
-    240, 63, 26, 213, 38, 32, 4, 1, 200, 29, 3, 198, 224, 32, 4, 1, 200, 29,
-    3, 220, 114, 32, 4, 1, 200, 29, 3, 239, 144, 26, 199, 133, 32, 4, 1, 200,
-    29, 3, 239, 144, 26, 214, 9, 32, 4, 1, 210, 75, 3, 211, 231, 32, 4, 1,
-    210, 75, 3, 240, 62, 32, 4, 1, 200, 29, 3, 213, 38, 32, 4, 1, 200, 29, 3,
-    239, 144, 26, 213, 38, 32, 6, 1, 200, 29, 3, 198, 224, 32, 6, 1, 200, 29,
-    3, 220, 114, 32, 6, 1, 200, 29, 3, 199, 133, 32, 6, 1, 200, 29, 3, 214,
-    9, 32, 6, 1, 210, 75, 3, 240, 62, 32, 239, 144, 26, 199, 133, 32, 239,
-    144, 26, 214, 9, 32, 199, 133, 32, 4, 1, 214, 125, 3, 199, 134, 26, 195,
-    225, 32, 4, 1, 214, 125, 3, 195, 225, 32, 4, 1, 214, 125, 3, 214, 10, 26,
-    195, 225, 32, 4, 1, 214, 125, 3, 213, 38, 32, 4, 1, 214, 125, 3, 213, 39,
-    26, 195, 225, 32, 6, 1, 214, 123, 3, 199, 133, 32, 6, 1, 214, 123, 3,
-    214, 9, 32, 6, 1, 214, 125, 3, 199, 133, 32, 6, 1, 214, 125, 3, 214, 9,
-    32, 6, 1, 214, 125, 3, 211, 245, 32, 214, 9, 32, 240, 62, 236, 231, 211,
-    94, 236, 242, 211, 94, 236, 231, 205, 148, 236, 242, 205, 148, 202, 148,
-    205, 148, 235, 5, 205, 148, 206, 27, 205, 148, 235, 143, 205, 148, 211,
-    214, 205, 148, 202, 188, 205, 148, 232, 234, 205, 148, 195, 80, 197, 59,
-    205, 148, 195, 80, 197, 59, 216, 36, 195, 80, 197, 59, 225, 124, 222,
-    175, 78, 210, 13, 78, 231, 7, 216, 37, 231, 7, 235, 143, 240, 65, 236,
-    231, 240, 65, 236, 242, 240, 65, 231, 155, 154, 52, 83, 222, 75, 52, 126,
-    222, 75, 50, 206, 62, 211, 62, 78, 53, 206, 62, 211, 62, 78, 206, 62,
-    221, 207, 211, 62, 78, 206, 62, 232, 45, 211, 62, 78, 50, 52, 211, 62,
-    78, 53, 52, 211, 62, 78, 52, 221, 207, 211, 62, 78, 52, 232, 45, 211, 62,
-    78, 240, 118, 52, 240, 118, 248, 5, 201, 177, 248, 5, 97, 76, 222, 195,
-    99, 76, 222, 195, 231, 155, 236, 247, 231, 5, 212, 110, 222, 76, 207, 90,
-    213, 154, 207, 90, 222, 175, 236, 240, 210, 13, 236, 240, 212, 88, 239,
-    84, 235, 22, 222, 175, 214, 17, 210, 13, 214, 17, 217, 210, 216, 44, 205,
-    148, 213, 46, 219, 29, 55, 213, 46, 203, 24, 202, 159, 55, 212, 19, 52,
-    212, 19, 201, 165, 212, 19, 210, 89, 212, 19, 210, 89, 52, 212, 19, 210,
-    89, 201, 165, 212, 19, 247, 110, 206, 62, 222, 179, 251, 91, 211, 62, 78,
-    206, 62, 210, 17, 251, 91, 211, 62, 78, 210, 154, 78, 52, 236, 90, 78,
-    226, 26, 214, 19, 200, 59, 190, 202, 107, 247, 111, 226, 43, 212, 110,
-    250, 177, 231, 8, 248, 5, 191, 205, 248, 50, 47, 248, 62, 3, 211, 73, 53,
-    47, 248, 62, 3, 211, 73, 52, 211, 79, 78, 211, 79, 236, 90, 78, 236, 90,
-    211, 79, 78, 202, 60, 2, 236, 128, 210, 89, 212, 179, 55, 58, 107, 248,
-    5, 58, 91, 248, 5, 126, 250, 179, 210, 89, 207, 105, 244, 204, 200, 36,
-    99, 250, 178, 251, 150, 199, 49, 244, 157, 219, 16, 55, 204, 46, 240, 65,
-    226, 17, 200, 59, 235, 63, 211, 214, 78, 115, 76, 211, 213, 211, 90, 212,
-    19, 235, 7, 76, 211, 213, 235, 101, 76, 211, 213, 99, 76, 211, 213, 235,
-    7, 76, 78, 237, 250, 241, 61, 201, 176, 83, 235, 7, 238, 250, 219, 190,
-    13, 205, 148, 197, 9, 225, 124, 234, 215, 251, 25, 226, 15, 202, 76, 226,
-    15, 207, 90, 226, 15, 212, 125, 222, 175, 225, 240, 210, 13, 225, 240,
-    235, 113, 204, 182, 225, 240, 212, 88, 239, 84, 225, 240, 226, 56, 203,
-    248, 204, 64, 252, 12, 203, 248, 204, 64, 226, 56, 9, 235, 24, 207, 19,
-    252, 12, 9, 235, 24, 207, 19, 217, 204, 17, 207, 20, 216, 40, 17, 207,
-    20, 204, 95, 195, 79, 204, 95, 8, 4, 1, 68, 204, 95, 136, 204, 95, 146,
-    204, 95, 167, 204, 95, 178, 204, 95, 171, 204, 95, 182, 204, 95, 98, 55,
-    204, 95, 219, 15, 204, 95, 236, 172, 55, 204, 95, 50, 213, 140, 204, 95,
-    53, 213, 140, 204, 95, 8, 4, 1, 218, 55, 204, 143, 195, 79, 204, 143,
-    100, 204, 143, 102, 204, 143, 134, 204, 143, 136, 204, 143, 146, 204,
-    143, 167, 204, 143, 178, 204, 143, 171, 204, 143, 182, 204, 143, 98, 55,
-    204, 143, 219, 15, 204, 143, 236, 172, 55, 204, 143, 50, 213, 140, 204,
-    143, 53, 213, 140, 8, 204, 143, 4, 1, 63, 8, 204, 143, 4, 1, 69, 8, 204,
-    143, 4, 1, 72, 8, 204, 143, 4, 1, 196, 222, 8, 204, 143, 4, 1, 208, 163,
-    8, 204, 143, 4, 1, 233, 15, 8, 204, 143, 4, 1, 225, 80, 8, 204, 143, 4,
-    1, 159, 8, 204, 143, 4, 1, 221, 136, 8, 204, 143, 4, 1, 218, 55, 8, 204,
-    143, 4, 1, 214, 3, 8, 204, 143, 4, 1, 209, 80, 8, 204, 143, 4, 1, 203,
-    216, 236, 107, 55, 244, 169, 55, 241, 46, 55, 234, 243, 234, 248, 55,
-    222, 55, 55, 219, 30, 55, 217, 228, 55, 213, 23, 55, 209, 108, 55, 197,
-    17, 55, 217, 83, 206, 241, 55, 239, 5, 55, 236, 108, 55, 224, 70, 55,
-    201, 27, 55, 237, 228, 55, 234, 21, 213, 58, 55, 213, 20, 55, 233, 71,
-    55, 250, 140, 55, 231, 81, 55, 247, 52, 55, 222, 45, 201, 223, 55, 205,
-    128, 55, 203, 21, 55, 226, 71, 209, 108, 55, 201, 6, 222, 55, 55, 216,
-    26, 117, 55, 220, 60, 55, 209, 131, 55, 222, 224, 55, 248, 144, 55, 38,
-    50, 232, 169, 57, 38, 53, 232, 169, 57, 38, 181, 83, 222, 76, 214, 20,
-    38, 206, 182, 83, 222, 76, 214, 20, 38, 251, 65, 61, 57, 38, 244, 205,
-    61, 57, 38, 50, 61, 57, 38, 53, 61, 57, 38, 210, 3, 214, 20, 38, 244,
-    205, 210, 3, 214, 20, 38, 251, 65, 210, 3, 214, 20, 38, 115, 238, 251,
-    57, 38, 235, 7, 238, 251, 57, 38, 236, 226, 244, 249, 38, 236, 226, 205,
-    94, 38, 236, 226, 239, 140, 38, 236, 226, 244, 250, 249, 133, 38, 50, 53,
-    61, 57, 38, 236, 226, 208, 154, 38, 236, 226, 224, 149, 38, 236, 226,
-    200, 26, 212, 107, 201, 180, 38, 210, 90, 205, 178, 214, 20, 38, 52, 83,
-    204, 196, 214, 20, 38, 251, 75, 105, 38, 201, 165, 200, 61, 38, 197, 62,
-    248, 40, 57, 38, 107, 61, 214, 20, 38, 181, 52, 205, 178, 214, 20, 38,
-    91, 232, 169, 3, 165, 237, 230, 38, 107, 232, 169, 3, 165, 237, 230, 38,
-    50, 61, 60, 38, 53, 61, 60, 38, 250, 180, 57, 252, 18, 214, 159, 252, 2,
-    202, 30, 202, 218, 204, 153, 237, 241, 6, 247, 207, 239, 231, 247, 42,
-    247, 37, 222, 76, 105, 247, 112, 214, 159, 247, 166, 200, 71, 236, 109,
-    241, 137, 208, 151, 239, 231, 235, 221, 145, 4, 234, 190, 145, 6, 233,
-    15, 248, 134, 6, 233, 15, 237, 241, 6, 233, 15, 212, 144, 241, 137, 212,
-    144, 241, 138, 127, 99, 212, 220, 145, 6, 68, 248, 134, 6, 68, 145, 6,
-    159, 145, 4, 159, 223, 100, 74, 249, 80, 105, 237, 241, 6, 218, 55, 215,
-    140, 55, 205, 162, 210, 166, 241, 104, 145, 6, 214, 3, 237, 241, 6, 214,
-    3, 237, 241, 6, 211, 167, 145, 6, 144, 248, 134, 6, 144, 237, 241, 6,
-    144, 212, 27, 203, 128, 210, 102, 207, 81, 78, 203, 34, 55, 201, 213,
-    117, 55, 199, 101, 237, 241, 6, 195, 158, 214, 38, 55, 214, 148, 55, 226,
-    17, 214, 148, 55, 248, 134, 6, 195, 158, 163, 32, 4, 1, 226, 7, 224, 190,
-    55, 251, 85, 55, 145, 6, 250, 112, 248, 134, 6, 247, 207, 236, 133, 105,
-    145, 4, 69, 145, 6, 69, 145, 6, 236, 49, 163, 6, 236, 49, 145, 6, 221,
-    136, 145, 4, 72, 151, 105, 248, 209, 105, 233, 178, 105, 240, 102, 105,
-    226, 61, 205, 160, 209, 194, 6, 211, 167, 235, 224, 55, 237, 241, 4, 212,
-    220, 237, 241, 4, 234, 94, 237, 241, 6, 234, 94, 237, 241, 6, 212, 220,
-    237, 241, 218, 54, 204, 114, 163, 45, 6, 234, 190, 163, 45, 6, 159, 210,
-    89, 45, 6, 159, 163, 45, 6, 196, 148, 237, 241, 41, 6, 240, 231, 237,
-    241, 41, 4, 240, 231, 237, 241, 41, 4, 69, 237, 241, 41, 4, 68, 237, 241,
-    41, 4, 225, 217, 211, 249, 222, 75, 163, 251, 111, 213, 46, 55, 251, 175,
-    163, 4, 236, 49, 16, 36, 208, 228, 205, 160, 197, 217, 191, 97, 207, 67,
-    197, 217, 191, 97, 216, 173, 197, 217, 191, 97, 203, 14, 197, 217, 191,
-    97, 202, 184, 197, 217, 191, 99, 202, 181, 197, 217, 191, 97, 235, 148,
-    197, 217, 191, 99, 235, 147, 197, 217, 191, 115, 235, 147, 197, 217, 191,
-    235, 7, 235, 147, 197, 217, 191, 97, 206, 17, 197, 217, 191, 235, 101,
-    206, 15, 197, 217, 191, 97, 237, 26, 197, 217, 191, 115, 237, 24, 197,
-    217, 191, 235, 101, 237, 24, 197, 217, 191, 207, 71, 237, 24, 191, 215,
-    141, 100, 209, 208, 215, 142, 100, 209, 208, 215, 142, 102, 209, 208,
-    215, 142, 134, 209, 208, 215, 142, 136, 209, 208, 215, 142, 146, 209,
-    208, 215, 142, 167, 209, 208, 215, 142, 178, 209, 208, 215, 142, 171,
-    209, 208, 215, 142, 182, 209, 208, 215, 142, 203, 23, 209, 208, 215, 142,
-    236, 252, 209, 208, 215, 142, 200, 239, 209, 208, 215, 142, 235, 145,
-    209, 208, 215, 142, 97, 231, 57, 209, 208, 215, 142, 235, 101, 231, 57,
-    209, 208, 215, 142, 97, 170, 4, 209, 208, 215, 142, 100, 4, 209, 208,
-    215, 142, 102, 4, 209, 208, 215, 142, 134, 4, 209, 208, 215, 142, 136, 4,
-    209, 208, 215, 142, 146, 4, 209, 208, 215, 142, 167, 4, 209, 208, 215,
-    142, 178, 4, 209, 208, 215, 142, 171, 4, 209, 208, 215, 142, 182, 4, 209,
-    208, 215, 142, 203, 23, 4, 209, 208, 215, 142, 236, 252, 4, 209, 208,
-    215, 142, 200, 239, 4, 209, 208, 215, 142, 235, 145, 4, 209, 208, 215,
-    142, 97, 231, 57, 4, 209, 208, 215, 142, 235, 101, 231, 57, 4, 209, 208,
-    215, 142, 97, 170, 209, 208, 215, 142, 97, 202, 159, 247, 208, 240, 231,
-    209, 208, 215, 142, 235, 101, 170, 209, 208, 215, 142, 203, 24, 170, 209,
-    208, 215, 142, 210, 89, 97, 231, 57, 8, 4, 1, 210, 89, 247, 207, 209,
-    208, 215, 142, 206, 29, 222, 219, 20, 209, 208, 215, 142, 235, 146, 237,
-    75, 20, 209, 208, 215, 142, 235, 146, 170, 209, 208, 215, 142, 97, 231,
-    58, 170, 197, 217, 191, 195, 80, 202, 181, 163, 17, 102, 163, 17, 134,
-    107, 51, 200, 24, 51, 91, 51, 237, 231, 51, 50, 53, 51, 124, 135, 51,
-    173, 197, 89, 51, 173, 237, 69, 51, 205, 159, 237, 69, 51, 205, 159, 197,
-    89, 51, 107, 61, 3, 106, 91, 61, 3, 106, 107, 197, 123, 51, 91, 197, 123,
-    51, 107, 99, 232, 135, 51, 200, 24, 99, 232, 135, 51, 91, 99, 232, 135,
-    51, 237, 231, 99, 232, 135, 51, 107, 61, 3, 203, 135, 91, 61, 3, 203,
-    135, 107, 61, 234, 235, 154, 200, 24, 61, 234, 235, 154, 91, 61, 234,
-    235, 154, 237, 231, 61, 234, 235, 154, 124, 135, 61, 3, 249, 66, 107, 61,
-    3, 122, 91, 61, 3, 122, 107, 61, 3, 221, 225, 91, 61, 3, 221, 225, 50,
-    53, 197, 123, 51, 50, 53, 61, 3, 106, 237, 231, 195, 24, 51, 200, 24, 61,
-    3, 202, 68, 222, 174, 200, 24, 61, 3, 202, 68, 210, 11, 237, 231, 61, 3,
-    202, 68, 222, 174, 237, 231, 61, 3, 202, 68, 210, 11, 91, 61, 3, 241,
-    102, 237, 230, 237, 231, 61, 3, 241, 102, 222, 174, 251, 65, 201, 243,
-    207, 108, 51, 244, 205, 201, 243, 207, 108, 51, 173, 197, 89, 61, 202,
-    30, 181, 154, 107, 61, 202, 30, 249, 80, 127, 91, 61, 202, 30, 154, 251,
-    65, 192, 244, 250, 51, 244, 205, 192, 244, 250, 51, 107, 232, 169, 3,
-    165, 200, 23, 107, 232, 169, 3, 165, 237, 230, 200, 24, 232, 169, 3, 165,
-    210, 11, 200, 24, 232, 169, 3, 165, 222, 174, 91, 232, 169, 3, 165, 200,
-    23, 91, 232, 169, 3, 165, 237, 230, 237, 231, 232, 169, 3, 165, 210, 11,
-    237, 231, 232, 169, 3, 165, 222, 174, 91, 61, 127, 107, 51, 200, 24, 61,
-    107, 77, 237, 231, 51, 107, 61, 127, 91, 51, 107, 213, 219, 250, 214,
-    200, 24, 213, 219, 250, 214, 91, 213, 219, 250, 214, 237, 231, 213, 219,
-    250, 214, 107, 232, 169, 127, 91, 232, 168, 91, 232, 169, 127, 107, 232,
-    168, 107, 52, 61, 3, 106, 50, 53, 52, 61, 3, 106, 91, 52, 61, 3, 106,
-    107, 52, 51, 200, 24, 52, 51, 91, 52, 51, 237, 231, 52, 51, 50, 53, 52,
-    51, 124, 135, 52, 51, 173, 197, 89, 52, 51, 173, 237, 69, 52, 51, 205,
-    159, 237, 69, 52, 51, 205, 159, 197, 89, 52, 51, 107, 201, 165, 51, 91,
-    201, 165, 51, 107, 205, 87, 51, 91, 205, 87, 51, 200, 24, 61, 3, 52, 106,
-    237, 231, 61, 3, 52, 106, 107, 240, 64, 51, 200, 24, 240, 64, 51, 91,
-    240, 64, 51, 237, 231, 240, 64, 51, 107, 61, 202, 30, 154, 91, 61, 202,
-    30, 154, 107, 59, 51, 200, 24, 59, 51, 91, 59, 51, 237, 231, 59, 51, 200,
-    24, 59, 61, 234, 235, 154, 200, 24, 59, 61, 214, 120, 213, 82, 200, 24,
-    59, 61, 214, 120, 213, 83, 3, 231, 155, 154, 200, 24, 59, 61, 214, 120,
-    213, 83, 3, 83, 154, 200, 24, 59, 52, 51, 200, 24, 59, 52, 61, 214, 120,
-    213, 82, 91, 59, 61, 234, 235, 197, 148, 173, 197, 89, 61, 202, 30, 241,
-    101, 205, 159, 237, 69, 61, 202, 30, 241, 101, 124, 135, 59, 51, 53, 61,
-    3, 4, 244, 249, 237, 231, 61, 107, 77, 200, 24, 51, 115, 91, 250, 214,
-    107, 61, 3, 83, 106, 91, 61, 3, 83, 106, 50, 53, 61, 3, 83, 106, 107, 61,
-    3, 52, 83, 106, 91, 61, 3, 52, 83, 106, 50, 53, 61, 3, 52, 83, 106, 107,
-    214, 90, 51, 91, 214, 90, 51, 50, 53, 214, 90, 51, 36, 251, 146, 244,
-    153, 213, 132, 239, 124, 202, 208, 236, 85, 202, 208, 239, 19, 216, 19,
-    236, 86, 236, 232, 207, 76, 226, 75, 217, 239, 237, 0, 214, 159, 216, 19,
-    251, 107, 237, 0, 214, 159, 4, 237, 0, 214, 159, 241, 131, 250, 203, 219,
-    168, 239, 19, 216, 19, 241, 133, 250, 203, 219, 168, 4, 241, 131, 250,
-    203, 219, 168, 236, 222, 77, 211, 251, 218, 54, 212, 5, 218, 54, 241,
-    108, 218, 54, 204, 114, 219, 16, 55, 219, 14, 55, 76, 212, 125, 239, 54,
-    205, 248, 207, 77, 219, 15, 250, 180, 214, 82, 210, 3, 214, 82, 248, 6,
-    214, 82, 47, 209, 200, 241, 37, 209, 200, 235, 0, 209, 200, 211, 247,
-    149, 226, 63, 53, 251, 90, 251, 90, 219, 201, 251, 90, 205, 127, 251, 90,
-    239, 57, 239, 19, 216, 19, 239, 61, 213, 146, 149, 216, 19, 213, 146,
-    149, 221, 249, 251, 100, 221, 249, 214, 72, 226, 23, 200, 51, 226, 37,
-    52, 226, 37, 201, 165, 226, 37, 241, 125, 226, 37, 204, 84, 226, 37, 198,
-    236, 226, 37, 244, 205, 226, 37, 244, 205, 241, 125, 226, 37, 251, 65,
-    241, 125, 226, 37, 202, 207, 248, 253, 210, 194, 211, 248, 76, 219, 15,
-    236, 93, 234, 27, 211, 248, 231, 170, 202, 85, 214, 82, 210, 89, 202, 84,
-    226, 17, 222, 204, 209, 80, 206, 64, 197, 122, 196, 253, 212, 5, 216, 19,
-    202, 84, 219, 16, 202, 84, 250, 172, 180, 149, 216, 19, 250, 172, 180,
-    149, 251, 21, 180, 149, 251, 21, 247, 232, 216, 19, 252, 11, 180, 149,
-    217, 103, 251, 21, 216, 28, 252, 11, 180, 149, 251, 139, 180, 149, 216,
-    19, 251, 139, 180, 149, 251, 139, 180, 214, 73, 180, 149, 201, 165, 202,
-    84, 251, 147, 180, 149, 236, 165, 149, 234, 26, 236, 165, 149, 239, 125,
-    248, 203, 251, 23, 202, 218, 222, 83, 234, 26, 180, 149, 251, 21, 180,
-    202, 30, 214, 73, 202, 218, 226, 102, 214, 159, 226, 102, 77, 214, 73,
-    251, 21, 180, 149, 244, 169, 236, 171, 236, 172, 244, 168, 210, 3, 226,
-    87, 180, 149, 210, 3, 180, 149, 241, 94, 149, 236, 132, 236, 170, 149,
-    205, 8, 236, 171, 239, 213, 180, 149, 180, 202, 30, 247, 219, 239, 232,
-    219, 201, 247, 218, 211, 77, 180, 149, 216, 19, 180, 149, 230, 193, 149,
-    216, 19, 230, 193, 149, 204, 203, 236, 165, 149, 222, 140, 214, 73, 180,
-    149, 233, 94, 214, 73, 180, 149, 222, 140, 127, 180, 149, 233, 94, 127,
-    180, 149, 222, 140, 247, 232, 216, 19, 180, 149, 233, 94, 247, 232, 216,
-    19, 180, 149, 218, 135, 222, 139, 218, 135, 233, 93, 248, 203, 216, 19,
-    236, 165, 149, 216, 19, 222, 139, 216, 19, 233, 93, 217, 103, 222, 140,
-    216, 28, 180, 149, 217, 103, 233, 94, 216, 28, 180, 149, 222, 140, 214,
-    73, 236, 165, 149, 233, 94, 214, 73, 236, 165, 149, 217, 103, 222, 140,
-    216, 28, 236, 165, 149, 217, 103, 233, 94, 216, 28, 236, 165, 149, 222,
-    140, 214, 73, 233, 93, 233, 94, 214, 73, 222, 139, 217, 103, 222, 140,
-    216, 28, 233, 93, 217, 103, 233, 94, 216, 28, 222, 139, 212, 35, 204,
-    133, 212, 36, 214, 73, 180, 149, 204, 134, 214, 73, 180, 149, 212, 36,
-    214, 73, 236, 165, 149, 204, 134, 214, 73, 236, 165, 149, 239, 19, 216,
-    19, 212, 38, 239, 19, 216, 19, 204, 135, 204, 142, 214, 159, 204, 94,
-    214, 159, 216, 19, 39, 204, 142, 214, 159, 216, 19, 39, 204, 94, 214,
-    159, 204, 142, 77, 214, 73, 180, 149, 204, 94, 77, 214, 73, 180, 149,
-    217, 103, 39, 204, 142, 77, 216, 28, 180, 149, 217, 103, 39, 204, 94, 77,
-    216, 28, 180, 149, 204, 142, 77, 3, 216, 19, 180, 149, 204, 94, 77, 3,
-    216, 19, 180, 149, 218, 115, 218, 116, 218, 117, 218, 116, 200, 51, 47,
-    226, 102, 214, 159, 47, 214, 63, 214, 159, 47, 226, 102, 77, 214, 73,
-    180, 149, 47, 214, 63, 77, 214, 73, 180, 149, 47, 247, 125, 47, 241, 27,
-    46, 212, 125, 46, 219, 15, 46, 202, 76, 46, 239, 54, 205, 248, 46, 76,
-    214, 82, 46, 210, 3, 214, 82, 46, 250, 180, 214, 82, 46, 236, 171, 46,
-    240, 65, 103, 212, 125, 103, 219, 15, 103, 202, 76, 103, 76, 214, 82, 53,
-    203, 147, 50, 203, 147, 135, 203, 147, 124, 203, 147, 250, 183, 218, 240,
-    201, 142, 235, 30, 201, 165, 83, 249, 80, 53, 201, 3, 52, 83, 249, 80,
-    52, 53, 201, 3, 239, 19, 216, 19, 211, 241, 216, 19, 201, 142, 239, 19,
-    216, 19, 235, 31, 217, 106, 52, 83, 249, 80, 52, 53, 201, 3, 212, 36,
-    200, 64, 210, 136, 204, 134, 200, 64, 210, 136, 216, 25, 204, 156, 214,
-    159, 241, 131, 250, 203, 216, 25, 204, 155, 216, 25, 204, 156, 77, 214,
-    73, 180, 149, 241, 131, 250, 203, 216, 25, 204, 156, 214, 73, 180, 149,
-    214, 63, 214, 159, 226, 102, 214, 159, 218, 122, 232, 92, 241, 142, 220,
-    1, 226, 34, 196, 181, 217, 219, 216, 27, 53, 251, 91, 3, 250, 253, 53,
-    201, 180, 218, 54, 221, 249, 251, 100, 218, 54, 221, 249, 214, 72, 218,
-    54, 226, 23, 218, 54, 200, 51, 239, 141, 214, 82, 76, 214, 82, 205, 8,
-    214, 82, 239, 54, 202, 76, 248, 71, 50, 216, 25, 235, 223, 207, 104, 212,
-    5, 53, 216, 25, 235, 223, 207, 104, 212, 5, 50, 207, 104, 212, 5, 53,
-    207, 104, 212, 5, 210, 89, 202, 85, 236, 171, 241, 18, 221, 249, 214, 72,
-    241, 18, 221, 249, 251, 100, 52, 204, 141, 52, 204, 93, 52, 226, 23, 52,
-    200, 51, 212, 155, 180, 26, 213, 146, 149, 222, 140, 3, 238, 253, 233,
-    94, 3, 238, 253, 199, 48, 218, 135, 222, 139, 199, 48, 218, 135, 233, 93,
-    222, 140, 180, 202, 30, 214, 73, 233, 93, 233, 94, 180, 202, 30, 214, 73,
-    222, 139, 180, 202, 30, 214, 73, 222, 139, 180, 202, 30, 214, 73, 233,
-    93, 180, 202, 30, 214, 73, 212, 35, 180, 202, 30, 214, 73, 204, 133, 239,
-    19, 216, 19, 212, 39, 214, 73, 236, 173, 239, 19, 216, 19, 204, 136, 214,
-    73, 236, 173, 216, 19, 47, 226, 102, 77, 214, 73, 180, 149, 216, 19, 47,
-    214, 63, 77, 214, 73, 180, 149, 47, 226, 102, 77, 214, 73, 216, 19, 180,
-    149, 47, 214, 63, 77, 214, 73, 216, 19, 180, 149, 222, 140, 247, 232,
-    216, 19, 236, 165, 149, 233, 94, 247, 232, 216, 19, 236, 165, 149, 212,
-    36, 247, 232, 216, 19, 236, 165, 149, 204, 134, 247, 232, 216, 19, 236,
-    165, 149, 216, 19, 216, 25, 204, 156, 214, 159, 239, 19, 216, 19, 241,
-    133, 250, 203, 216, 25, 204, 155, 216, 19, 216, 25, 204, 156, 77, 214,
-    73, 180, 149, 239, 19, 216, 19, 241, 133, 250, 203, 216, 25, 204, 156,
-    214, 73, 236, 173, 83, 236, 247, 219, 61, 231, 155, 236, 247, 124, 53,
-    239, 147, 236, 247, 135, 53, 239, 147, 236, 247, 237, 0, 77, 3, 181, 231,
-    155, 106, 237, 0, 77, 3, 83, 249, 80, 250, 169, 236, 222, 77, 231, 155,
-    106, 4, 237, 0, 77, 3, 83, 249, 80, 250, 169, 236, 222, 77, 231, 155,
-    106, 237, 0, 77, 3, 76, 57, 237, 0, 77, 3, 214, 26, 4, 237, 0, 77, 3,
-    214, 26, 237, 0, 77, 3, 200, 62, 237, 0, 77, 3, 99, 231, 155, 204, 183,
-    241, 131, 3, 181, 231, 155, 106, 241, 131, 3, 83, 249, 80, 250, 169, 236,
-    222, 77, 231, 155, 106, 4, 241, 131, 3, 83, 249, 80, 250, 169, 236, 222,
-    77, 231, 155, 106, 241, 131, 3, 214, 26, 4, 241, 131, 3, 214, 26, 195,
-    159, 216, 17, 249, 123, 219, 167, 239, 142, 55, 237, 2, 51, 231, 87, 124,
-    250, 217, 135, 250, 217, 211, 255, 213, 26, 197, 119, 222, 75, 50, 247,
-    45, 53, 247, 45, 50, 235, 69, 53, 235, 69, 248, 85, 53, 241, 63, 248, 85,
-    50, 241, 63, 201, 243, 53, 241, 63, 201, 243, 50, 241, 63, 210, 89, 216,
-    19, 55, 47, 221, 198, 250, 253, 208, 122, 208, 131, 203, 34, 210, 167,
-    212, 79, 226, 68, 199, 22, 205, 94, 212, 149, 77, 226, 33, 55, 163, 216,
-    19, 55, 197, 129, 231, 89, 201, 243, 50, 241, 101, 201, 243, 53, 241,
-    101, 248, 85, 50, 241, 101, 248, 85, 53, 241, 101, 201, 243, 157, 226,
-    37, 248, 85, 157, 226, 37, 234, 230, 205, 219, 124, 250, 218, 248, 204,
-    99, 231, 155, 249, 68, 214, 75, 224, 153, 236, 161, 202, 30, 202, 218,
-    210, 22, 196, 223, 226, 87, 39, 210, 164, 248, 70, 224, 151, 222, 179,
-    251, 91, 179, 210, 17, 251, 91, 179, 236, 161, 202, 30, 202, 218, 222,
-    184, 248, 215, 210, 2, 240, 241, 251, 147, 250, 226, 203, 247, 201, 228,
-    209, 113, 239, 104, 214, 64, 241, 146, 203, 103, 205, 233, 241, 90, 241,
-    89, 251, 40, 234, 213, 16, 230, 242, 251, 40, 234, 213, 16, 205, 85, 211,
-    94, 251, 40, 234, 213, 16, 211, 95, 236, 173, 251, 40, 234, 213, 16, 211,
-    95, 239, 61, 251, 40, 234, 213, 16, 211, 95, 239, 140, 251, 40, 234, 213,
-    16, 211, 95, 225, 116, 251, 40, 234, 213, 16, 211, 95, 244, 249, 251, 40,
-    234, 213, 16, 244, 250, 204, 234, 251, 40, 234, 213, 16, 244, 250, 225,
-    116, 251, 40, 234, 213, 16, 205, 249, 154, 251, 40, 234, 213, 16, 249,
-    134, 154, 251, 40, 234, 213, 16, 211, 95, 205, 248, 251, 40, 234, 213,
-    16, 211, 95, 249, 133, 251, 40, 234, 213, 16, 211, 95, 222, 139, 251, 40,
-    234, 213, 16, 211, 95, 233, 93, 251, 40, 234, 213, 16, 107, 199, 140,
-    251, 40, 234, 213, 16, 91, 199, 140, 251, 40, 234, 213, 16, 211, 95, 107,
-    51, 251, 40, 234, 213, 16, 211, 95, 91, 51, 251, 40, 234, 213, 16, 244,
-    250, 249, 133, 251, 40, 234, 213, 16, 135, 203, 148, 200, 62, 251, 40,
-    234, 213, 16, 239, 213, 204, 234, 251, 40, 234, 213, 16, 211, 95, 135,
-    247, 110, 251, 40, 234, 213, 16, 211, 95, 239, 212, 251, 40, 234, 213,
-    16, 135, 203, 148, 225, 116, 251, 40, 234, 213, 16, 200, 24, 199, 140,
-    251, 40, 234, 213, 16, 211, 95, 200, 24, 51, 251, 40, 234, 213, 16, 124,
-    203, 148, 214, 26, 251, 40, 234, 213, 16, 239, 225, 204, 234, 251, 40,
-    234, 213, 16, 211, 95, 124, 247, 110, 251, 40, 234, 213, 16, 211, 95,
-    239, 224, 251, 40, 234, 213, 16, 124, 203, 148, 225, 116, 251, 40, 234,
-    213, 16, 237, 231, 199, 140, 251, 40, 234, 213, 16, 211, 95, 237, 231,
-    51, 251, 40, 234, 213, 16, 211, 61, 200, 62, 251, 40, 234, 213, 16, 239,
-    213, 200, 62, 251, 40, 234, 213, 16, 239, 141, 200, 62, 251, 40, 234,
-    213, 16, 225, 117, 200, 62, 251, 40, 234, 213, 16, 244, 250, 200, 62,
-    251, 40, 234, 213, 16, 124, 206, 195, 225, 116, 251, 40, 234, 213, 16,
-    211, 61, 211, 94, 251, 40, 234, 213, 16, 244, 250, 205, 7, 251, 40, 234,
-    213, 16, 211, 95, 244, 168, 251, 40, 234, 213, 16, 124, 203, 148, 239,
-    150, 251, 40, 234, 213, 16, 239, 225, 239, 150, 251, 40, 234, 213, 16,
-    205, 8, 239, 150, 251, 40, 234, 213, 16, 225, 117, 239, 150, 251, 40,
-    234, 213, 16, 244, 250, 239, 150, 251, 40, 234, 213, 16, 135, 206, 195,
-    204, 234, 251, 40, 234, 213, 16, 50, 206, 195, 204, 234, 251, 40, 234,
-    213, 16, 202, 85, 239, 150, 251, 40, 234, 213, 16, 233, 94, 239, 150,
-    251, 40, 234, 213, 16, 244, 160, 154, 251, 40, 234, 213, 16, 239, 225,
-    202, 84, 251, 40, 234, 213, 16, 195, 23, 251, 40, 234, 213, 16, 204, 235,
-    202, 84, 251, 40, 234, 213, 16, 207, 106, 200, 62, 251, 40, 234, 213, 16,
-    211, 95, 216, 19, 236, 173, 251, 40, 234, 213, 16, 211, 95, 211, 78, 251,
-    40, 234, 213, 16, 135, 247, 111, 202, 84, 251, 40, 234, 213, 16, 124,
-    247, 111, 202, 84, 251, 40, 234, 213, 16, 226, 7, 251, 40, 234, 213, 16,
-    210, 74, 251, 40, 234, 213, 16, 214, 124, 251, 40, 234, 213, 16, 251,
-    135, 200, 62, 251, 40, 234, 213, 16, 236, 175, 200, 62, 251, 40, 234,
-    213, 16, 226, 8, 200, 62, 251, 40, 234, 213, 16, 214, 125, 200, 62, 251,
-    40, 234, 213, 16, 251, 134, 216, 19, 245, 102, 78, 53, 251, 91, 3, 237,
-    231, 195, 24, 51, 206, 163, 192, 248, 70, 248, 230, 105, 83, 222, 76, 3,
-    112, 238, 253, 226, 43, 105, 241, 126, 200, 60, 105, 239, 77, 200, 60,
-    105, 236, 234, 105, 241, 161, 105, 59, 47, 3, 247, 37, 83, 222, 75, 236,
-    205, 105, 251, 126, 224, 154, 105, 232, 105, 105, 46, 231, 155, 249, 80,
-    3, 216, 16, 46, 201, 181, 237, 235, 248, 33, 244, 250, 3, 216, 22, 51,
-    200, 58, 105, 218, 200, 105, 231, 3, 105, 214, 91, 233, 14, 105, 214, 91,
-    223, 98, 105, 213, 120, 105, 213, 119, 105, 239, 86, 241, 16, 16, 235,
-    24, 102, 205, 183, 105, 251, 40, 234, 213, 16, 211, 94, 239, 244, 207,
-    91, 224, 154, 105, 212, 21, 213, 227, 217, 76, 213, 227, 212, 16, 208,
-    155, 105, 244, 221, 208, 155, 105, 50, 213, 141, 200, 33, 122, 50, 213,
-    141, 236, 77, 50, 213, 141, 221, 203, 122, 53, 213, 141, 200, 33, 122,
-    53, 213, 141, 236, 77, 53, 213, 141, 221, 203, 122, 50, 47, 248, 62, 200,
-    33, 241, 101, 50, 47, 248, 62, 236, 77, 50, 47, 248, 62, 221, 203, 241,
-    101, 53, 47, 248, 62, 200, 33, 241, 101, 53, 47, 248, 62, 236, 77, 53,
-    47, 248, 62, 221, 203, 241, 101, 50, 241, 18, 248, 62, 200, 33, 122, 50,
-    241, 18, 248, 62, 112, 212, 212, 50, 241, 18, 248, 62, 221, 203, 122,
-    241, 18, 248, 62, 236, 77, 53, 241, 18, 248, 62, 200, 33, 122, 53, 241,
-    18, 248, 62, 112, 212, 212, 53, 241, 18, 248, 62, 221, 203, 122, 226, 38,
-    236, 77, 231, 155, 222, 76, 236, 77, 200, 33, 50, 214, 73, 221, 203, 53,
-    241, 18, 248, 62, 208, 132, 200, 33, 53, 214, 73, 221, 203, 50, 241, 18,
-    248, 62, 208, 132, 204, 115, 201, 242, 204, 115, 248, 84, 201, 243, 47,
-    179, 248, 85, 47, 179, 248, 85, 47, 248, 62, 127, 201, 243, 47, 179, 44,
-    16, 248, 84, 50, 83, 111, 222, 75, 53, 83, 111, 222, 75, 231, 155, 208,
-    174, 222, 74, 231, 155, 208, 174, 222, 73, 231, 155, 208, 174, 222, 72,
-    231, 155, 208, 174, 222, 71, 239, 204, 16, 175, 83, 26, 201, 243, 210,
-    22, 239, 204, 16, 175, 83, 26, 248, 85, 210, 22, 239, 204, 16, 175, 83,
-    3, 244, 249, 239, 204, 16, 175, 135, 26, 231, 155, 3, 244, 249, 239, 204,
-    16, 175, 124, 26, 231, 155, 3, 244, 249, 239, 204, 16, 175, 83, 3, 201,
-    180, 239, 204, 16, 175, 135, 26, 231, 155, 3, 201, 180, 239, 204, 16,
-    175, 124, 26, 231, 155, 3, 201, 180, 239, 204, 16, 175, 83, 26, 197, 122,
-    239, 204, 16, 175, 135, 26, 231, 155, 3, 197, 122, 239, 204, 16, 175,
-    124, 26, 231, 155, 3, 197, 122, 239, 204, 16, 175, 135, 26, 231, 154,
-    239, 204, 16, 175, 124, 26, 231, 154, 239, 204, 16, 175, 83, 26, 201,
-    243, 222, 184, 239, 204, 16, 175, 83, 26, 248, 85, 222, 184, 47, 235, 37,
-    210, 94, 105, 237, 16, 105, 83, 222, 76, 236, 77, 219, 137, 248, 47, 219,
-    137, 181, 127, 206, 181, 219, 137, 206, 182, 127, 221, 240, 219, 137,
-    181, 127, 99, 206, 167, 219, 137, 99, 206, 168, 127, 221, 240, 219, 137,
-    99, 206, 168, 225, 125, 219, 137, 201, 161, 219, 137, 202, 249, 219, 137,
-    213, 53, 237, 73, 233, 85, 234, 207, 201, 243, 213, 140, 248, 85, 213,
-    140, 201, 243, 241, 18, 179, 248, 85, 241, 18, 179, 201, 243, 201, 231,
-    206, 245, 179, 248, 85, 201, 231, 206, 245, 179, 59, 201, 197, 248, 215,
-    210, 3, 3, 244, 249, 204, 216, 235, 80, 252, 26, 241, 15, 237, 1, 226,
-    23, 239, 244, 236, 81, 105, 58, 210, 17, 52, 201, 180, 58, 222, 179, 52,
-    201, 180, 58, 200, 35, 52, 201, 180, 58, 237, 234, 52, 201, 180, 58, 210,
-    17, 52, 201, 181, 3, 83, 154, 58, 222, 179, 52, 201, 181, 3, 83, 154, 58,
-    210, 17, 201, 181, 3, 52, 83, 154, 251, 168, 244, 206, 204, 223, 202, 77,
-    244, 206, 231, 90, 3, 235, 60, 208, 217, 58, 219, 190, 222, 179, 201,
-    180, 58, 219, 190, 210, 17, 201, 180, 58, 219, 190, 200, 35, 201, 180,
-    58, 219, 190, 237, 234, 201, 180, 52, 83, 154, 58, 47, 36, 204, 226, 58,
-    244, 250, 36, 210, 168, 212, 59, 105, 212, 59, 214, 118, 105, 212, 59,
-    214, 120, 105, 212, 59, 205, 244, 105, 214, 178, 236, 68, 105, 16, 36,
-    215, 146, 16, 36, 205, 3, 77, 232, 134, 16, 36, 205, 3, 77, 202, 237, 16,
-    36, 236, 222, 77, 202, 237, 16, 36, 236, 222, 77, 201, 202, 16, 36, 236,
-    208, 16, 36, 252, 14, 16, 36, 248, 229, 16, 36, 249, 132, 16, 36, 231,
-    155, 203, 149, 16, 36, 222, 76, 235, 180, 16, 36, 83, 203, 149, 16, 36,
-    235, 24, 235, 180, 16, 36, 247, 102, 210, 93, 16, 36, 206, 219, 214, 34,
-    16, 36, 206, 219, 226, 86, 16, 36, 240, 60, 222, 66, 236, 143, 16, 36,
-    239, 183, 241, 121, 100, 16, 36, 239, 183, 241, 121, 102, 16, 36, 239,
-    183, 241, 121, 134, 16, 36, 239, 183, 241, 121, 136, 16, 36, 217, 104,
-    252, 14, 16, 36, 203, 242, 226, 149, 16, 36, 236, 222, 77, 201, 203, 248,
-    126, 16, 36, 247, 140, 16, 36, 236, 222, 77, 219, 189, 16, 36, 204, 139,
-    16, 36, 236, 143, 16, 36, 235, 138, 207, 90, 16, 36, 233, 84, 207, 90,
-    16, 36, 210, 169, 207, 90, 16, 36, 200, 50, 207, 90, 16, 36, 205, 148,
-    16, 36, 239, 222, 248, 130, 105, 192, 248, 70, 16, 36, 217, 79, 16, 36,
-    239, 223, 235, 24, 102, 16, 36, 204, 140, 235, 24, 102, 214, 174, 122,
-    214, 174, 247, 11, 214, 174, 235, 27, 214, 174, 226, 17, 235, 27, 214,
-    174, 248, 226, 248, 18, 214, 174, 248, 78, 202, 107, 214, 174, 248, 58,
-    249, 85, 230, 192, 214, 174, 251, 113, 77, 245, 101, 214, 174, 240, 65,
-    214, 174, 241, 4, 252, 18, 215, 144, 214, 174, 52, 249, 133, 46, 17, 100,
-    46, 17, 102, 46, 17, 134, 46, 17, 136, 46, 17, 146, 46, 17, 167, 46, 17,
-    178, 46, 17, 171, 46, 17, 182, 46, 31, 203, 23, 46, 31, 236, 252, 46, 31,
-    200, 239, 46, 31, 202, 179, 46, 31, 235, 1, 46, 31, 235, 149, 46, 31,
-    206, 23, 46, 31, 207, 68, 46, 31, 237, 28, 46, 31, 216, 176, 46, 31, 200,
-    234, 119, 17, 100, 119, 17, 102, 119, 17, 134, 119, 17, 136, 119, 17,
-    146, 119, 17, 167, 119, 17, 178, 119, 17, 171, 119, 17, 182, 119, 31,
-    203, 23, 119, 31, 236, 252, 119, 31, 200, 239, 119, 31, 202, 179, 119,
-    31, 235, 1, 119, 31, 235, 149, 119, 31, 206, 23, 119, 31, 207, 68, 119,
-    31, 237, 28, 119, 31, 216, 176, 119, 31, 200, 234, 17, 97, 234, 217, 204,
-    226, 17, 99, 234, 217, 204, 226, 17, 115, 234, 217, 204, 226, 17, 235, 7,
-    234, 217, 204, 226, 17, 235, 101, 234, 217, 204, 226, 17, 206, 29, 234,
-    217, 204, 226, 17, 207, 71, 234, 217, 204, 226, 17, 237, 31, 234, 217,
-    204, 226, 17, 216, 179, 234, 217, 204, 226, 31, 203, 24, 234, 217, 204,
-    226, 31, 236, 253, 234, 217, 204, 226, 31, 200, 240, 234, 217, 204, 226,
-    31, 202, 180, 234, 217, 204, 226, 31, 235, 2, 234, 217, 204, 226, 31,
-    235, 150, 234, 217, 204, 226, 31, 206, 24, 234, 217, 204, 226, 31, 207,
-    69, 234, 217, 204, 226, 31, 237, 29, 234, 217, 204, 226, 31, 216, 177,
-    234, 217, 204, 226, 31, 200, 235, 234, 217, 204, 226, 119, 8, 4, 1, 63,
-    119, 8, 4, 1, 250, 112, 119, 8, 4, 1, 247, 207, 119, 8, 4, 1, 240, 231,
-    119, 8, 4, 1, 69, 119, 8, 4, 1, 236, 49, 119, 8, 4, 1, 234, 190, 119, 8,
-    4, 1, 233, 15, 119, 8, 4, 1, 68, 119, 8, 4, 1, 225, 217, 119, 8, 4, 1,
-    225, 80, 119, 8, 4, 1, 159, 119, 8, 4, 1, 221, 136, 119, 8, 4, 1, 218,
-    55, 119, 8, 4, 1, 72, 119, 8, 4, 1, 214, 3, 119, 8, 4, 1, 211, 167, 119,
-    8, 4, 1, 144, 119, 8, 4, 1, 209, 80, 119, 8, 4, 1, 203, 216, 119, 8, 4,
-    1, 66, 119, 8, 4, 1, 199, 230, 119, 8, 4, 1, 197, 199, 119, 8, 4, 1, 196,
-    222, 119, 8, 4, 1, 196, 148, 119, 8, 4, 1, 195, 158, 46, 8, 6, 1, 63, 46,
-    8, 6, 1, 250, 112, 46, 8, 6, 1, 247, 207, 46, 8, 6, 1, 240, 231, 46, 8,
-    6, 1, 69, 46, 8, 6, 1, 236, 49, 46, 8, 6, 1, 234, 190, 46, 8, 6, 1, 233,
-    15, 46, 8, 6, 1, 68, 46, 8, 6, 1, 225, 217, 46, 8, 6, 1, 225, 80, 46, 8,
-    6, 1, 159, 46, 8, 6, 1, 221, 136, 46, 8, 6, 1, 218, 55, 46, 8, 6, 1, 72,
-    46, 8, 6, 1, 214, 3, 46, 8, 6, 1, 211, 167, 46, 8, 6, 1, 144, 46, 8, 6,
-    1, 209, 80, 46, 8, 6, 1, 203, 216, 46, 8, 6, 1, 66, 46, 8, 6, 1, 199,
-    230, 46, 8, 6, 1, 197, 199, 46, 8, 6, 1, 196, 222, 46, 8, 6, 1, 196, 148,
-    46, 8, 6, 1, 195, 158, 46, 8, 4, 1, 63, 46, 8, 4, 1, 250, 112, 46, 8, 4,
-    1, 247, 207, 46, 8, 4, 1, 240, 231, 46, 8, 4, 1, 69, 46, 8, 4, 1, 236,
-    49, 46, 8, 4, 1, 234, 190, 46, 8, 4, 1, 233, 15, 46, 8, 4, 1, 68, 46, 8,
-    4, 1, 225, 217, 46, 8, 4, 1, 225, 80, 46, 8, 4, 1, 159, 46, 8, 4, 1, 221,
-    136, 46, 8, 4, 1, 218, 55, 46, 8, 4, 1, 72, 46, 8, 4, 1, 214, 3, 46, 8,
-    4, 1, 211, 167, 46, 8, 4, 1, 144, 46, 8, 4, 1, 209, 80, 46, 8, 4, 1, 203,
-    216, 46, 8, 4, 1, 66, 46, 8, 4, 1, 199, 230, 46, 8, 4, 1, 197, 199, 46,
-    8, 4, 1, 196, 222, 46, 8, 4, 1, 196, 148, 46, 8, 4, 1, 195, 158, 46, 17,
-    195, 79, 217, 104, 46, 31, 236, 252, 217, 104, 46, 31, 200, 239, 217,
-    104, 46, 31, 202, 179, 217, 104, 46, 31, 235, 1, 217, 104, 46, 31, 235,
-    149, 217, 104, 46, 31, 206, 23, 217, 104, 46, 31, 207, 68, 217, 104, 46,
-    31, 237, 28, 217, 104, 46, 31, 216, 176, 217, 104, 46, 31, 200, 234, 52,
-    46, 17, 100, 52, 46, 17, 102, 52, 46, 17, 134, 52, 46, 17, 136, 52, 46,
-    17, 146, 52, 46, 17, 167, 52, 46, 17, 178, 52, 46, 17, 171, 52, 46, 17,
-    182, 52, 46, 31, 203, 23, 217, 104, 46, 17, 195, 79, 111, 129, 175, 231,
-    154, 111, 129, 85, 231, 154, 111, 129, 175, 199, 100, 111, 129, 85, 199,
-    100, 111, 129, 175, 201, 165, 240, 66, 231, 154, 111, 129, 85, 201, 165,
-    240, 66, 231, 154, 111, 129, 175, 201, 165, 240, 66, 199, 100, 111, 129,
-    85, 201, 165, 240, 66, 199, 100, 111, 129, 175, 211, 90, 240, 66, 231,
-    154, 111, 129, 85, 211, 90, 240, 66, 231, 154, 111, 129, 175, 211, 90,
-    240, 66, 199, 100, 111, 129, 85, 211, 90, 240, 66, 199, 100, 111, 129,
-    175, 135, 26, 210, 22, 111, 129, 135, 175, 26, 53, 232, 120, 111, 129,
-    135, 85, 26, 53, 222, 95, 111, 129, 85, 135, 26, 210, 22, 111, 129, 175,
-    135, 26, 222, 184, 111, 129, 135, 175, 26, 50, 232, 120, 111, 129, 135,
-    85, 26, 50, 222, 95, 111, 129, 85, 135, 26, 222, 184, 111, 129, 175, 124,
-    26, 210, 22, 111, 129, 124, 175, 26, 53, 232, 120, 111, 129, 124, 85, 26,
-    53, 222, 95, 111, 129, 85, 124, 26, 210, 22, 111, 129, 175, 124, 26, 222,
-    184, 111, 129, 124, 175, 26, 50, 232, 120, 111, 129, 124, 85, 26, 50,
-    222, 95, 111, 129, 85, 124, 26, 222, 184, 111, 129, 175, 83, 26, 210, 22,
-    111, 129, 83, 175, 26, 53, 232, 120, 111, 129, 124, 85, 26, 53, 135, 222,
-    95, 111, 129, 135, 85, 26, 53, 124, 222, 95, 111, 129, 83, 85, 26, 53,
-    222, 95, 111, 129, 135, 175, 26, 53, 124, 232, 120, 111, 129, 124, 175,
-    26, 53, 135, 232, 120, 111, 129, 85, 83, 26, 210, 22, 111, 129, 175, 83,
-    26, 222, 184, 111, 129, 83, 175, 26, 50, 232, 120, 111, 129, 124, 85, 26,
-    50, 135, 222, 95, 111, 129, 135, 85, 26, 50, 124, 222, 95, 111, 129, 83,
-    85, 26, 50, 222, 95, 111, 129, 135, 175, 26, 50, 124, 232, 120, 111, 129,
-    124, 175, 26, 50, 135, 232, 120, 111, 129, 85, 83, 26, 222, 184, 111,
-    129, 175, 135, 26, 231, 154, 111, 129, 50, 85, 26, 53, 135, 222, 95, 111,
-    129, 53, 85, 26, 50, 135, 222, 95, 111, 129, 135, 175, 26, 231, 155, 232,
-    120, 111, 129, 135, 85, 26, 231, 155, 222, 95, 111, 129, 53, 175, 26, 50,
-    135, 232, 120, 111, 129, 50, 175, 26, 53, 135, 232, 120, 111, 129, 85,
-    135, 26, 231, 154, 111, 129, 175, 124, 26, 231, 154, 111, 129, 50, 85,
-    26, 53, 124, 222, 95, 111, 129, 53, 85, 26, 50, 124, 222, 95, 111, 129,
-    124, 175, 26, 231, 155, 232, 120, 111, 129, 124, 85, 26, 231, 155, 222,
-    95, 111, 129, 53, 175, 26, 50, 124, 232, 120, 111, 129, 50, 175, 26, 53,
-    124, 232, 120, 111, 129, 85, 124, 26, 231, 154, 111, 129, 175, 83, 26,
-    231, 154, 111, 129, 50, 85, 26, 53, 83, 222, 95, 111, 129, 53, 85, 26,
-    50, 83, 222, 95, 111, 129, 83, 175, 26, 231, 155, 232, 120, 111, 129,
-    124, 85, 26, 135, 231, 155, 222, 95, 111, 129, 135, 85, 26, 124, 231,
-    155, 222, 95, 111, 129, 83, 85, 26, 231, 155, 222, 95, 111, 129, 50, 124,
-    85, 26, 53, 135, 222, 95, 111, 129, 53, 124, 85, 26, 50, 135, 222, 95,
-    111, 129, 50, 135, 85, 26, 53, 124, 222, 95, 111, 129, 53, 135, 85, 26,
-    50, 124, 222, 95, 111, 129, 135, 175, 26, 124, 231, 155, 232, 120, 111,
-    129, 124, 175, 26, 135, 231, 155, 232, 120, 111, 129, 53, 175, 26, 50,
-    83, 232, 120, 111, 129, 50, 175, 26, 53, 83, 232, 120, 111, 129, 85, 83,
-    26, 231, 154, 111, 129, 175, 52, 240, 66, 231, 154, 111, 129, 85, 52,
-    240, 66, 231, 154, 111, 129, 175, 52, 240, 66, 199, 100, 111, 129, 85,
-    52, 240, 66, 199, 100, 111, 129, 52, 231, 154, 111, 129, 52, 199, 100,
-    111, 129, 135, 206, 62, 26, 53, 237, 245, 111, 129, 135, 52, 26, 53, 206,
-    61, 111, 129, 52, 135, 26, 210, 22, 111, 129, 135, 206, 62, 26, 50, 237,
-    245, 111, 129, 135, 52, 26, 50, 206, 61, 111, 129, 52, 135, 26, 222, 184,
-    111, 129, 124, 206, 62, 26, 53, 237, 245, 111, 129, 124, 52, 26, 53, 206,
-    61, 111, 129, 52, 124, 26, 210, 22, 111, 129, 124, 206, 62, 26, 50, 237,
-    245, 111, 129, 124, 52, 26, 50, 206, 61, 111, 129, 52, 124, 26, 222, 184,
-    111, 129, 83, 206, 62, 26, 53, 237, 245, 111, 129, 83, 52, 26, 53, 206,
-    61, 111, 129, 52, 83, 26, 210, 22, 111, 129, 83, 206, 62, 26, 50, 237,
-    245, 111, 129, 83, 52, 26, 50, 206, 61, 111, 129, 52, 83, 26, 222, 184,
-    111, 129, 135, 206, 62, 26, 231, 155, 237, 245, 111, 129, 135, 52, 26,
-    231, 155, 206, 61, 111, 129, 52, 135, 26, 231, 154, 111, 129, 124, 206,
-    62, 26, 231, 155, 237, 245, 111, 129, 124, 52, 26, 231, 155, 206, 61,
-    111, 129, 52, 124, 26, 231, 154, 111, 129, 83, 206, 62, 26, 231, 155,
-    237, 245, 111, 129, 83, 52, 26, 231, 155, 206, 61, 111, 129, 52, 83, 26,
-    231, 154, 111, 129, 175, 250, 254, 135, 26, 210, 22, 111, 129, 175, 250,
-    254, 135, 26, 222, 184, 111, 129, 175, 250, 254, 124, 26, 222, 184, 111,
-    129, 175, 250, 254, 124, 26, 210, 22, 111, 129, 175, 239, 147, 200, 33,
-    53, 202, 30, 221, 203, 222, 184, 111, 129, 175, 239, 147, 200, 33, 50,
-    202, 30, 221, 203, 210, 22, 111, 129, 175, 239, 147, 241, 61, 111, 129,
-    175, 222, 184, 111, 129, 175, 200, 36, 111, 129, 175, 210, 22, 111, 129,
-    175, 237, 235, 111, 129, 85, 222, 184, 111, 129, 85, 200, 36, 111, 129,
-    85, 210, 22, 111, 129, 85, 237, 235, 111, 129, 175, 50, 26, 85, 210, 22,
-    111, 129, 175, 124, 26, 85, 237, 235, 111, 129, 85, 50, 26, 175, 210, 22,
-    111, 129, 85, 124, 26, 175, 237, 235, 200, 33, 157, 248, 126, 221, 203,
-    97, 237, 27, 248, 126, 221, 203, 97, 211, 88, 248, 126, 221, 203, 115,
-    237, 25, 248, 126, 221, 203, 157, 248, 126, 221, 203, 235, 101, 237, 25,
-    248, 126, 221, 203, 115, 211, 86, 248, 126, 221, 203, 207, 71, 237, 25,
-    248, 126, 234, 217, 248, 126, 50, 207, 71, 237, 25, 248, 126, 50, 115,
-    211, 86, 248, 126, 50, 235, 101, 237, 25, 248, 126, 50, 157, 248, 126,
-    50, 115, 237, 25, 248, 126, 50, 97, 211, 88, 248, 126, 50, 97, 237, 27,
-    248, 126, 53, 157, 248, 126, 175, 207, 39, 219, 190, 207, 39, 240, 71,
-    207, 39, 200, 33, 97, 237, 27, 248, 126, 53, 97, 237, 27, 248, 126, 211,
-    92, 221, 203, 222, 184, 211, 92, 221, 203, 210, 22, 211, 92, 200, 33,
-    222, 184, 211, 92, 200, 33, 50, 26, 221, 203, 50, 26, 221, 203, 210, 22,
-    211, 92, 200, 33, 50, 26, 221, 203, 210, 22, 211, 92, 200, 33, 50, 26,
-    200, 33, 53, 26, 221, 203, 222, 184, 211, 92, 200, 33, 50, 26, 200, 33,
-    53, 26, 221, 203, 210, 22, 211, 92, 200, 33, 210, 22, 211, 92, 200, 33,
-    53, 26, 221, 203, 222, 184, 211, 92, 200, 33, 53, 26, 221, 203, 50, 26,
-    221, 203, 210, 22, 58, 205, 94, 59, 205, 94, 59, 47, 3, 209, 185, 241,
-    100, 59, 47, 241, 132, 58, 4, 205, 94, 47, 3, 231, 155, 235, 136, 47, 3,
-    83, 235, 136, 47, 3, 214, 55, 241, 56, 235, 136, 47, 3, 200, 33, 50, 202,
-    30, 221, 203, 53, 235, 136, 47, 3, 200, 33, 53, 202, 30, 221, 203, 50,
-    235, 136, 47, 3, 239, 147, 241, 56, 235, 136, 58, 4, 205, 94, 59, 4, 205,
-    94, 58, 210, 163, 59, 210, 163, 58, 83, 210, 163, 59, 83, 210, 163, 58,
-    213, 144, 59, 213, 144, 58, 200, 35, 201, 180, 59, 200, 35, 201, 180, 58,
-    200, 35, 4, 201, 180, 59, 200, 35, 4, 201, 180, 58, 210, 17, 201, 180,
-    59, 210, 17, 201, 180, 58, 210, 17, 4, 201, 180, 59, 210, 17, 4, 201,
-    180, 58, 210, 17, 212, 108, 59, 210, 17, 212, 108, 58, 237, 234, 201,
-    180, 59, 237, 234, 201, 180, 58, 237, 234, 4, 201, 180, 59, 237, 234, 4,
-    201, 180, 58, 222, 179, 201, 180, 59, 222, 179, 201, 180, 58, 222, 179,
-    4, 201, 180, 59, 222, 179, 4, 201, 180, 58, 222, 179, 212, 108, 59, 222,
-    179, 212, 108, 58, 239, 140, 59, 239, 140, 59, 239, 141, 241, 132, 58, 4,
-    239, 140, 235, 110, 221, 198, 59, 244, 249, 237, 250, 244, 249, 244, 250,
-    3, 83, 235, 136, 248, 1, 58, 244, 249, 244, 250, 3, 50, 157, 248, 136,
-    244, 250, 3, 53, 157, 248, 136, 244, 250, 3, 221, 203, 157, 248, 136,
-    244, 250, 3, 200, 33, 157, 248, 136, 244, 250, 3, 200, 33, 53, 211, 92,
-    248, 136, 244, 250, 3, 251, 147, 247, 232, 200, 33, 50, 211, 92, 248,
-    136, 50, 157, 58, 244, 249, 53, 157, 58, 244, 249, 226, 19, 248, 5, 226,
-    19, 59, 244, 249, 200, 33, 157, 226, 19, 59, 244, 249, 221, 203, 157,
-    226, 19, 59, 244, 249, 200, 33, 50, 211, 92, 244, 243, 250, 253, 200, 33,
-    53, 211, 92, 244, 243, 250, 253, 221, 203, 53, 211, 92, 244, 243, 250,
-    253, 221, 203, 50, 211, 92, 244, 243, 250, 253, 200, 33, 157, 244, 249,
-    221, 203, 157, 244, 249, 58, 221, 203, 53, 201, 180, 58, 221, 203, 50,
-    201, 180, 58, 200, 33, 50, 201, 180, 58, 200, 33, 53, 201, 180, 59, 248,
-    5, 47, 3, 50, 157, 248, 136, 47, 3, 53, 157, 248, 136, 47, 3, 200, 33,
-    50, 239, 147, 157, 248, 136, 47, 3, 221, 203, 53, 239, 147, 157, 248,
-    136, 59, 47, 3, 83, 248, 150, 222, 75, 59, 200, 35, 201, 181, 3, 238,
-    253, 200, 35, 201, 181, 3, 50, 157, 248, 136, 200, 35, 201, 181, 3, 53,
-    157, 248, 136, 222, 228, 244, 249, 59, 47, 3, 200, 33, 50, 211, 91, 59,
-    47, 3, 221, 203, 50, 211, 91, 59, 47, 3, 221, 203, 53, 211, 91, 59, 47,
-    3, 200, 33, 53, 211, 91, 59, 244, 250, 3, 200, 33, 50, 211, 91, 59, 244,
-    250, 3, 221, 203, 50, 211, 91, 59, 244, 250, 3, 221, 203, 53, 211, 91,
-    59, 244, 250, 3, 200, 33, 53, 211, 91, 200, 33, 50, 201, 180, 200, 33,
-    53, 201, 180, 221, 203, 50, 201, 180, 59, 219, 190, 205, 94, 58, 219,
-    190, 205, 94, 59, 219, 190, 4, 205, 94, 58, 219, 190, 4, 205, 94, 221,
-    203, 53, 201, 180, 58, 204, 112, 3, 210, 188, 244, 194, 200, 76, 205,
-    202, 244, 162, 58, 205, 7, 59, 205, 7, 222, 92, 202, 137, 204, 111, 250,
-    198, 216, 42, 239, 194, 216, 42, 241, 141, 214, 78, 58, 203, 33, 59, 203,
-    33, 249, 99, 248, 70, 249, 99, 111, 3, 245, 101, 249, 99, 111, 3, 196,
-    222, 208, 230, 200, 77, 3, 210, 218, 237, 208, 231, 96, 248, 201, 59,
-    206, 191, 212, 212, 58, 206, 191, 212, 212, 207, 26, 210, 89, 209, 194,
-    235, 66, 232, 127, 248, 5, 58, 50, 212, 107, 226, 72, 58, 53, 212, 107,
-    226, 72, 59, 50, 212, 107, 226, 72, 59, 124, 212, 107, 226, 72, 59, 53,
-    212, 107, 226, 72, 59, 135, 212, 107, 226, 72, 205, 255, 26, 241, 60,
-    247, 86, 55, 210, 230, 55, 248, 158, 55, 247, 165, 251, 79, 214, 56, 241,
-    61, 245, 76, 210, 74, 241, 62, 77, 221, 220, 241, 62, 77, 225, 182, 205,
-    8, 26, 241, 71, 235, 204, 105, 251, 254, 207, 29, 232, 217, 26, 206, 103,
-    213, 91, 105, 196, 13, 196, 95, 201, 170, 36, 232, 122, 201, 170, 36,
-    223, 1, 201, 170, 36, 235, 118, 201, 170, 36, 202, 138, 201, 170, 36,
-    197, 50, 201, 170, 36, 197, 127, 201, 170, 36, 218, 169, 201, 170, 36,
-    237, 72, 197, 78, 77, 239, 168, 59, 234, 229, 235, 233, 59, 205, 218,
-    235, 233, 58, 205, 218, 235, 233, 59, 204, 112, 3, 210, 188, 235, 113,
-    211, 88, 218, 189, 222, 221, 211, 88, 218, 189, 219, 158, 235, 172, 55,
-    237, 72, 220, 67, 55, 225, 95, 208, 192, 200, 16, 217, 94, 212, 121, 250,
-    239, 203, 87, 234, 35, 247, 138, 222, 146, 199, 5, 222, 106, 208, 157,
-    208, 255, 247, 120, 251, 15, 212, 160, 59, 245, 83, 224, 73, 59, 245, 83,
-    211, 80, 59, 245, 83, 209, 203, 59, 245, 83, 248, 148, 59, 245, 83, 224,
-    19, 59, 245, 83, 213, 103, 58, 245, 83, 224, 73, 58, 245, 83, 211, 80,
-    58, 245, 83, 209, 203, 58, 245, 83, 248, 148, 58, 245, 83, 224, 19, 58,
-    245, 83, 213, 103, 58, 205, 146, 204, 124, 59, 232, 127, 204, 124, 59,
-    239, 141, 204, 124, 58, 244, 191, 204, 124, 59, 205, 146, 204, 124, 58,
-    232, 127, 204, 124, 58, 239, 141, 204, 124, 59, 244, 191, 204, 124, 231,
-    96, 205, 99, 211, 88, 216, 13, 237, 27, 216, 13, 249, 5, 237, 27, 216, 8,
-    249, 5, 206, 22, 216, 8, 218, 89, 235, 83, 55, 218, 89, 217, 203, 55,
-    218, 89, 207, 13, 55, 197, 89, 203, 236, 241, 61, 237, 69, 203, 236, 241,
-    61, 200, 46, 210, 159, 105, 210, 159, 16, 36, 200, 200, 212, 140, 210,
-    159, 16, 36, 200, 198, 212, 140, 210, 159, 16, 36, 200, 197, 212, 140,
-    210, 159, 16, 36, 200, 195, 212, 140, 210, 159, 16, 36, 200, 193, 212,
-    140, 210, 159, 16, 36, 200, 191, 212, 140, 210, 159, 16, 36, 200, 189,
-    212, 140, 210, 159, 16, 36, 234, 32, 220, 2, 58, 200, 46, 210, 159, 105,
-    210, 160, 213, 162, 105, 213, 131, 213, 162, 105, 213, 37, 213, 162, 55,
-    197, 76, 105, 239, 133, 235, 232, 239, 133, 235, 231, 239, 133, 235, 230,
-    239, 133, 235, 229, 239, 133, 235, 228, 239, 133, 235, 227, 59, 244, 250,
-    3, 76, 210, 22, 59, 244, 250, 3, 99, 238, 250, 58, 244, 250, 3, 59, 76,
-    210, 22, 58, 244, 250, 3, 99, 59, 238, 250, 218, 205, 36, 196, 95, 218,
-    205, 36, 196, 12, 239, 114, 36, 233, 95, 196, 95, 239, 114, 36, 222, 138,
-    196, 12, 239, 114, 36, 222, 138, 196, 95, 239, 114, 36, 233, 95, 196, 12,
-    59, 235, 93, 58, 235, 93, 232, 217, 26, 212, 216, 251, 102, 241, 59, 204,
-    47, 205, 17, 77, 251, 228, 208, 175, 251, 163, 235, 62, 234, 45, 205, 17,
-    77, 232, 94, 250, 158, 105, 235, 78, 214, 30, 59, 205, 7, 115, 222, 70,
-    241, 118, 210, 22, 115, 222, 70, 241, 118, 222, 184, 197, 138, 55, 130,
-    198, 237, 55, 237, 240, 235, 172, 55, 237, 240, 220, 67, 55, 226, 29,
-    235, 172, 26, 220, 67, 55, 220, 67, 26, 235, 172, 55, 220, 67, 3, 204,
-    196, 55, 220, 67, 3, 204, 196, 26, 220, 67, 26, 235, 172, 55, 83, 220,
-    67, 3, 204, 196, 55, 231, 155, 220, 67, 3, 204, 196, 55, 219, 190, 59,
-    244, 249, 219, 190, 58, 244, 249, 219, 190, 4, 59, 244, 249, 220, 21,
-    105, 239, 52, 105, 200, 43, 213, 130, 105, 244, 173, 234, 212, 200, 12,
-    217, 86, 247, 22, 213, 209, 225, 101, 199, 45, 245, 56, 58, 218, 190,
-    222, 89, 207, 61, 207, 102, 211, 70, 207, 79, 205, 190, 249, 103, 249,
-    65, 103, 224, 153, 59, 237, 220, 220, 62, 59, 237, 220, 224, 73, 58, 237,
-    220, 220, 62, 58, 237, 220, 224, 73, 205, 203, 197, 37, 205, 206, 204,
-    112, 248, 236, 244, 194, 210, 217, 58, 205, 202, 202, 139, 244, 195, 26,
-    210, 217, 163, 59, 206, 191, 212, 212, 163, 58, 206, 191, 212, 212, 59,
-    239, 141, 226, 87, 205, 94, 241, 55, 222, 235, 239, 81, 247, 116, 214,
-    81, 212, 216, 247, 117, 205, 237, 232, 104, 3, 59, 241, 61, 46, 241, 55,
-    222, 235, 247, 12, 216, 51, 236, 199, 251, 131, 214, 111, 50, 197, 113,
-    201, 210, 58, 200, 212, 50, 197, 113, 201, 210, 59, 200, 212, 50, 197,
-    113, 201, 210, 58, 50, 222, 236, 219, 157, 59, 50, 222, 236, 219, 157,
-    237, 215, 205, 228, 55, 85, 59, 237, 234, 201, 180, 50, 244, 203, 236,
-    199, 103, 208, 230, 235, 213, 239, 147, 226, 87, 59, 244, 250, 226, 87,
-    58, 205, 94, 58, 201, 144, 210, 100, 50, 236, 198, 210, 100, 50, 236,
-    197, 250, 173, 16, 36, 200, 16, 85, 244, 250, 3, 204, 196, 26, 99, 238,
-    251, 57, 213, 54, 210, 19, 226, 31, 213, 54, 222, 181, 226, 31, 213, 54,
-    226, 17, 213, 54, 58, 241, 62, 214, 120, 206, 220, 206, 208, 206, 156,
-    245, 22, 247, 94, 232, 32, 206, 30, 234, 46, 197, 37, 231, 69, 234, 46,
-    3, 232, 186, 220, 44, 16, 36, 222, 94, 218, 169, 200, 77, 214, 120, 233,
-    85, 235, 8, 235, 94, 226, 87, 231, 175, 235, 162, 208, 250, 47, 235, 7,
-    241, 100, 206, 2, 230, 202, 206, 6, 213, 29, 3, 249, 103, 203, 15, 225,
-    202, 249, 85, 105, 232, 131, 233, 97, 105, 234, 220, 211, 215, 241, 28,
-    214, 120, 58, 205, 94, 59, 235, 94, 3, 231, 155, 112, 58, 204, 197, 58,
-    209, 4, 208, 161, 200, 33, 248, 131, 208, 161, 58, 208, 161, 221, 203,
-    248, 131, 208, 161, 59, 208, 161, 59, 85, 245, 102, 78, 203, 34, 222, 4,
-    55, 203, 104, 237, 214, 251, 187, 236, 194, 210, 215, 235, 106, 210, 215,
-    232, 209, 199, 32, 232, 209, 196, 246, 232, 209, 221, 203, 53, 213, 64,
-    213, 64, 200, 33, 53, 213, 64, 59, 216, 212, 58, 216, 212, 245, 102, 78,
-    85, 245, 102, 78, 218, 118, 196, 222, 85, 218, 118, 196, 222, 249, 99,
-    196, 222, 85, 249, 99, 196, 222, 214, 30, 32, 241, 61, 85, 32, 241, 61,
-    192, 247, 37, 241, 61, 85, 192, 247, 37, 241, 61, 8, 241, 61, 207, 37,
-    59, 8, 241, 61, 214, 30, 8, 241, 61, 220, 64, 241, 61, 205, 8, 77, 240,
-    58, 235, 7, 203, 53, 250, 179, 235, 7, 249, 100, 250, 179, 85, 235, 7,
-    249, 100, 250, 179, 235, 7, 244, 189, 250, 179, 58, 235, 7, 212, 109,
-    205, 7, 59, 235, 7, 212, 109, 205, 7, 205, 141, 204, 206, 214, 30, 59,
-    205, 7, 46, 59, 205, 7, 192, 247, 37, 58, 205, 7, 58, 247, 37, 59, 205,
-    7, 214, 30, 58, 205, 7, 85, 214, 30, 58, 205, 7, 212, 170, 205, 7, 207,
-    37, 59, 205, 7, 85, 250, 179, 192, 247, 37, 250, 179, 237, 31, 205, 110,
-    250, 179, 237, 31, 212, 109, 58, 205, 7, 237, 31, 212, 109, 212, 170,
-    205, 7, 206, 29, 212, 109, 58, 205, 7, 237, 31, 212, 109, 210, 161, 58,
-    205, 7, 85, 237, 31, 212, 109, 210, 161, 58, 205, 7, 200, 240, 212, 109,
-    58, 205, 7, 206, 24, 212, 109, 250, 179, 203, 53, 250, 179, 192, 247, 37,
-    203, 53, 250, 179, 85, 203, 53, 250, 179, 206, 29, 213, 17, 58, 26, 59,
-    235, 65, 58, 235, 65, 59, 235, 65, 237, 31, 213, 17, 214, 30, 58, 235,
-    65, 46, 192, 247, 37, 237, 31, 212, 109, 205, 7, 85, 203, 53, 212, 170,
-    250, 179, 205, 204, 202, 101, 201, 173, 205, 204, 85, 245, 79, 205, 204,
-    205, 143, 85, 205, 143, 249, 100, 250, 179, 237, 31, 203, 53, 211, 250,
-    250, 179, 85, 237, 31, 203, 53, 211, 250, 250, 179, 241, 62, 78, 207, 37,
-    59, 244, 249, 217, 104, 103, 241, 62, 78, 221, 203, 53, 237, 210, 59,
-    205, 94, 200, 33, 53, 237, 210, 59, 205, 94, 221, 203, 53, 207, 37, 59,
-    205, 94, 200, 33, 53, 207, 37, 59, 205, 94, 58, 211, 79, 117, 214, 59,
-    59, 211, 79, 117, 214, 59, 59, 236, 90, 117, 214, 59, 58, 239, 141, 219,
-    16, 59, 196, 222, 85, 236, 90, 117, 105, 175, 83, 154, 219, 190, 83, 154,
-    85, 83, 154, 85, 206, 62, 163, 244, 160, 211, 62, 117, 214, 59, 85, 206,
-    62, 244, 160, 211, 62, 117, 214, 59, 85, 52, 163, 244, 160, 211, 62, 117,
-    214, 59, 85, 52, 244, 160, 211, 62, 117, 214, 59, 85, 126, 206, 62, 244,
-    160, 211, 62, 117, 214, 59, 85, 126, 52, 244, 160, 211, 62, 117, 214, 59,
-    241, 10, 204, 244, 213, 154, 2, 214, 59, 85, 236, 90, 117, 214, 59, 85,
-    232, 127, 236, 90, 117, 214, 59, 85, 58, 232, 126, 209, 194, 85, 58, 232,
-    127, 248, 5, 235, 66, 232, 126, 209, 194, 235, 66, 232, 127, 248, 5, 219,
-    190, 50, 213, 141, 214, 59, 219, 190, 53, 213, 141, 214, 59, 219, 190,
-    235, 79, 50, 213, 141, 214, 59, 219, 190, 235, 79, 53, 213, 141, 214, 59,
-    219, 190, 222, 179, 251, 91, 248, 62, 214, 59, 219, 190, 210, 17, 251,
-    91, 248, 62, 214, 59, 85, 222, 179, 251, 91, 211, 62, 117, 214, 59, 85,
-    210, 17, 251, 91, 211, 62, 117, 214, 59, 85, 222, 179, 251, 91, 248, 62,
-    214, 59, 85, 210, 17, 251, 91, 248, 62, 214, 59, 175, 50, 201, 231, 206,
-    245, 248, 62, 214, 59, 175, 53, 201, 231, 206, 245, 248, 62, 214, 59,
-    219, 190, 50, 241, 18, 248, 62, 214, 59, 219, 190, 53, 241, 18, 248, 62,
-    214, 59, 239, 93, 217, 104, 46, 17, 100, 239, 93, 217, 104, 46, 17, 102,
-    239, 93, 217, 104, 46, 17, 134, 239, 93, 217, 104, 46, 17, 136, 239, 93,
-    217, 104, 46, 17, 146, 239, 93, 217, 104, 46, 17, 167, 239, 93, 217, 104,
-    46, 17, 178, 239, 93, 217, 104, 46, 17, 171, 239, 93, 217, 104, 46, 17,
-    182, 239, 93, 217, 104, 46, 31, 203, 23, 239, 93, 46, 45, 17, 100, 239,
-    93, 46, 45, 17, 102, 239, 93, 46, 45, 17, 134, 239, 93, 46, 45, 17, 136,
-    239, 93, 46, 45, 17, 146, 239, 93, 46, 45, 17, 167, 239, 93, 46, 45, 17,
-    178, 239, 93, 46, 45, 17, 171, 239, 93, 46, 45, 17, 182, 239, 93, 46, 45,
-    31, 203, 23, 239, 93, 217, 104, 46, 45, 17, 100, 239, 93, 217, 104, 46,
-    45, 17, 102, 239, 93, 217, 104, 46, 45, 17, 134, 239, 93, 217, 104, 46,
-    45, 17, 136, 239, 93, 217, 104, 46, 45, 17, 146, 239, 93, 217, 104, 46,
-    45, 17, 167, 239, 93, 217, 104, 46, 45, 17, 178, 239, 93, 217, 104, 46,
-    45, 17, 171, 239, 93, 217, 104, 46, 45, 17, 182, 239, 93, 217, 104, 46,
-    45, 31, 203, 23, 85, 197, 61, 91, 51, 85, 98, 55, 85, 219, 16, 55, 85,
-    239, 54, 55, 85, 205, 159, 237, 69, 51, 85, 91, 51, 85, 173, 237, 69, 51,
-    237, 225, 212, 111, 91, 51, 85, 209, 186, 91, 51, 201, 179, 91, 51, 85,
-    201, 179, 91, 51, 240, 64, 201, 179, 91, 51, 85, 240, 64, 201, 179, 91,
-    51, 58, 91, 51, 202, 154, 201, 241, 91, 250, 217, 202, 154, 248, 83, 91,
-    250, 217, 58, 91, 250, 217, 85, 58, 241, 10, 237, 231, 26, 91, 51, 85,
-    58, 241, 10, 200, 24, 26, 91, 51, 205, 91, 58, 91, 51, 85, 241, 154, 58,
-    91, 51, 210, 16, 59, 91, 51, 222, 178, 59, 91, 51, 249, 137, 207, 37, 59,
-    91, 51, 234, 232, 207, 37, 59, 91, 51, 85, 221, 203, 210, 15, 59, 91, 51,
-    85, 200, 33, 210, 15, 59, 91, 51, 216, 15, 221, 203, 210, 15, 59, 91, 51,
-    241, 18, 221, 225, 216, 15, 200, 33, 210, 15, 59, 91, 51, 46, 85, 59, 91,
-    51, 197, 72, 91, 51, 248, 135, 205, 159, 237, 69, 51, 248, 135, 91, 51,
-    248, 135, 173, 237, 69, 51, 85, 248, 135, 205, 159, 237, 69, 51, 85, 248,
-    135, 91, 51, 85, 248, 135, 173, 237, 69, 51, 203, 55, 91, 51, 85, 203,
-    54, 91, 51, 197, 99, 91, 51, 85, 197, 99, 91, 51, 214, 87, 91, 51, 52,
-    241, 18, 221, 225, 115, 239, 103, 251, 90, 59, 201, 181, 241, 132, 4, 59,
-    201, 180, 213, 32, 192, 204, 141, 192, 204, 93, 50, 209, 79, 249, 123,
-    239, 218, 53, 209, 79, 249, 123, 239, 218, 214, 73, 3, 76, 226, 41, 210,
-    90, 205, 178, 212, 34, 204, 141, 204, 94, 212, 34, 205, 177, 83, 249, 80,
-    3, 231, 155, 106, 13, 209, 250, 239, 146, 181, 239, 53, 13, 235, 213,
-    239, 146, 103, 221, 249, 251, 100, 103, 221, 249, 214, 72, 59, 239, 141,
-    3, 247, 35, 238, 253, 26, 3, 238, 253, 237, 0, 77, 214, 85, 200, 23, 221,
-    203, 53, 241, 102, 3, 238, 253, 200, 33, 50, 241, 102, 3, 238, 253, 50,
-    214, 32, 225, 127, 53, 214, 32, 225, 127, 234, 217, 214, 32, 225, 127,
-    222, 228, 124, 203, 147, 222, 228, 135, 203, 147, 50, 26, 53, 52, 201, 3,
-    50, 26, 53, 203, 147, 50, 218, 122, 181, 53, 203, 147, 181, 50, 203, 147,
-    124, 203, 148, 3, 244, 250, 57, 221, 199, 239, 60, 247, 219, 231, 155,
-    209, 124, 59, 241, 153, 239, 140, 59, 241, 153, 239, 141, 3, 107, 202,
-    111, 59, 241, 153, 239, 141, 3, 91, 202, 111, 59, 47, 3, 107, 202, 111,
-    59, 47, 3, 91, 202, 111, 13, 50, 59, 47, 179, 13, 53, 59, 47, 179, 13,
-    50, 251, 91, 179, 13, 53, 251, 91, 179, 13, 50, 52, 251, 91, 179, 13, 53,
-    52, 251, 91, 179, 13, 50, 59, 201, 231, 206, 245, 179, 13, 53, 59, 201,
-    231, 206, 245, 179, 13, 50, 235, 79, 213, 140, 13, 53, 235, 79, 213, 140,
-    200, 24, 211, 90, 51, 237, 231, 211, 90, 51, 251, 65, 234, 85, 244, 250,
-    51, 244, 205, 234, 85, 244, 250, 51, 53, 61, 3, 46, 212, 125, 181, 107,
-    51, 181, 91, 51, 181, 50, 53, 51, 181, 107, 52, 51, 181, 91, 52, 51, 181,
-    50, 53, 52, 51, 181, 107, 61, 234, 235, 154, 181, 91, 61, 234, 235, 154,
-    181, 107, 52, 61, 234, 235, 154, 181, 91, 52, 61, 234, 235, 154, 181, 91,
-    205, 87, 51, 64, 65, 248, 129, 64, 65, 238, 249, 64, 65, 238, 121, 64,
-    65, 238, 248, 64, 65, 238, 57, 64, 65, 238, 184, 64, 65, 238, 120, 64,
-    65, 238, 247, 64, 65, 238, 25, 64, 65, 238, 152, 64, 65, 238, 88, 64, 65,
-    238, 215, 64, 65, 238, 56, 64, 65, 238, 183, 64, 65, 238, 119, 64, 65,
-    238, 246, 64, 65, 238, 9, 64, 65, 238, 136, 64, 65, 238, 72, 64, 65, 238,
-    199, 64, 65, 238, 40, 64, 65, 238, 167, 64, 65, 238, 103, 64, 65, 238,
-    230, 64, 65, 238, 24, 64, 65, 238, 151, 64, 65, 238, 87, 64, 65, 238,
-    214, 64, 65, 238, 55, 64, 65, 238, 182, 64, 65, 238, 118, 64, 65, 238,
-    245, 64, 65, 238, 1, 64, 65, 238, 128, 64, 65, 238, 64, 64, 65, 238, 191,
-    64, 65, 238, 32, 64, 65, 238, 159, 64, 65, 238, 95, 64, 65, 238, 222, 64,
-    65, 238, 16, 64, 65, 238, 143, 64, 65, 238, 79, 64, 65, 238, 206, 64, 65,
-    238, 47, 64, 65, 238, 174, 64, 65, 238, 110, 64, 65, 238, 237, 64, 65,
-    238, 8, 64, 65, 238, 135, 64, 65, 238, 71, 64, 65, 238, 198, 64, 65, 238,
-    39, 64, 65, 238, 166, 64, 65, 238, 102, 64, 65, 238, 229, 64, 65, 238,
-    23, 64, 65, 238, 150, 64, 65, 238, 86, 64, 65, 238, 213, 64, 65, 238, 54,
-    64, 65, 238, 181, 64, 65, 238, 117, 64, 65, 238, 244, 64, 65, 237, 253,
-    64, 65, 238, 124, 64, 65, 238, 60, 64, 65, 238, 187, 64, 65, 238, 28, 64,
-    65, 238, 155, 64, 65, 238, 91, 64, 65, 238, 218, 64, 65, 238, 12, 64, 65,
-    238, 139, 64, 65, 238, 75, 64, 65, 238, 202, 64, 65, 238, 43, 64, 65,
-    238, 170, 64, 65, 238, 106, 64, 65, 238, 233, 64, 65, 238, 4, 64, 65,
-    238, 131, 64, 65, 238, 67, 64, 65, 238, 194, 64, 65, 238, 35, 64, 65,
-    238, 162, 64, 65, 238, 98, 64, 65, 238, 225, 64, 65, 238, 19, 64, 65,
-    238, 146, 64, 65, 238, 82, 64, 65, 238, 209, 64, 65, 238, 50, 64, 65,
-    238, 177, 64, 65, 238, 113, 64, 65, 238, 240, 64, 65, 238, 0, 64, 65,
-    238, 127, 64, 65, 238, 63, 64, 65, 238, 190, 64, 65, 238, 31, 64, 65,
-    238, 158, 64, 65, 238, 94, 64, 65, 238, 221, 64, 65, 238, 15, 64, 65,
-    238, 142, 64, 65, 238, 78, 64, 65, 238, 205, 64, 65, 238, 46, 64, 65,
-    238, 173, 64, 65, 238, 109, 64, 65, 238, 236, 64, 65, 238, 7, 64, 65,
-    238, 134, 64, 65, 238, 70, 64, 65, 238, 197, 64, 65, 238, 38, 64, 65,
-    238, 165, 64, 65, 238, 101, 64, 65, 238, 228, 64, 65, 238, 22, 64, 65,
-    238, 149, 64, 65, 238, 85, 64, 65, 238, 212, 64, 65, 238, 53, 64, 65,
-    238, 180, 64, 65, 238, 116, 64, 65, 238, 243, 64, 65, 237, 251, 64, 65,
-    238, 122, 64, 65, 238, 58, 64, 65, 238, 185, 64, 65, 238, 26, 64, 65,
-    238, 153, 64, 65, 238, 89, 64, 65, 238, 216, 64, 65, 238, 10, 64, 65,
-    238, 137, 64, 65, 238, 73, 64, 65, 238, 200, 64, 65, 238, 41, 64, 65,
-    238, 168, 64, 65, 238, 104, 64, 65, 238, 231, 64, 65, 238, 2, 64, 65,
-    238, 129, 64, 65, 238, 65, 64, 65, 238, 192, 64, 65, 238, 33, 64, 65,
-    238, 160, 64, 65, 238, 96, 64, 65, 238, 223, 64, 65, 238, 17, 64, 65,
-    238, 144, 64, 65, 238, 80, 64, 65, 238, 207, 64, 65, 238, 48, 64, 65,
-    238, 175, 64, 65, 238, 111, 64, 65, 238, 238, 64, 65, 237, 254, 64, 65,
-    238, 125, 64, 65, 238, 61, 64, 65, 238, 188, 64, 65, 238, 29, 64, 65,
-    238, 156, 64, 65, 238, 92, 64, 65, 238, 219, 64, 65, 238, 13, 64, 65,
-    238, 140, 64, 65, 238, 76, 64, 65, 238, 203, 64, 65, 238, 44, 64, 65,
-    238, 171, 64, 65, 238, 107, 64, 65, 238, 234, 64, 65, 238, 5, 64, 65,
-    238, 132, 64, 65, 238, 68, 64, 65, 238, 195, 64, 65, 238, 36, 64, 65,
-    238, 163, 64, 65, 238, 99, 64, 65, 238, 226, 64, 65, 238, 20, 64, 65,
-    238, 147, 64, 65, 238, 83, 64, 65, 238, 210, 64, 65, 238, 51, 64, 65,
-    238, 178, 64, 65, 238, 114, 64, 65, 238, 241, 64, 65, 237, 252, 64, 65,
-    238, 123, 64, 65, 238, 59, 64, 65, 238, 186, 64, 65, 238, 27, 64, 65,
-    238, 154, 64, 65, 238, 90, 64, 65, 238, 217, 64, 65, 238, 11, 64, 65,
-    238, 138, 64, 65, 238, 74, 64, 65, 238, 201, 64, 65, 238, 42, 64, 65,
-    238, 169, 64, 65, 238, 105, 64, 65, 238, 232, 64, 65, 238, 3, 64, 65,
-    238, 130, 64, 65, 238, 66, 64, 65, 238, 193, 64, 65, 238, 34, 64, 65,
-    238, 161, 64, 65, 238, 97, 64, 65, 238, 224, 64, 65, 238, 18, 64, 65,
-    238, 145, 64, 65, 238, 81, 64, 65, 238, 208, 64, 65, 238, 49, 64, 65,
-    238, 176, 64, 65, 238, 112, 64, 65, 238, 239, 64, 65, 237, 255, 64, 65,
-    238, 126, 64, 65, 238, 62, 64, 65, 238, 189, 64, 65, 238, 30, 64, 65,
-    238, 157, 64, 65, 238, 93, 64, 65, 238, 220, 64, 65, 238, 14, 64, 65,
-    238, 141, 64, 65, 238, 77, 64, 65, 238, 204, 64, 65, 238, 45, 64, 65,
-    238, 172, 64, 65, 238, 108, 64, 65, 238, 235, 64, 65, 238, 6, 64, 65,
-    238, 133, 64, 65, 238, 69, 64, 65, 238, 196, 64, 65, 238, 37, 64, 65,
-    238, 164, 64, 65, 238, 100, 64, 65, 238, 227, 64, 65, 238, 21, 64, 65,
-    238, 148, 64, 65, 238, 84, 64, 65, 238, 211, 64, 65, 238, 52, 64, 65,
-    238, 179, 64, 65, 238, 115, 64, 65, 238, 242, 91, 200, 215, 61, 3, 83,
-    106, 91, 200, 215, 61, 3, 52, 83, 106, 107, 52, 61, 3, 83, 106, 91, 52,
-    61, 3, 83, 106, 50, 53, 52, 61, 3, 83, 106, 91, 200, 215, 61, 234, 235,
-    154, 107, 52, 61, 234, 235, 154, 91, 52, 61, 234, 235, 154, 237, 231, 61,
-    3, 231, 155, 106, 200, 24, 61, 3, 231, 155, 106, 200, 24, 201, 165, 51,
-    237, 231, 201, 165, 51, 107, 52, 240, 66, 51, 91, 52, 240, 66, 51, 107,
-    201, 165, 240, 66, 51, 91, 201, 165, 240, 66, 51, 91, 200, 215, 201, 165,
-    240, 66, 51, 91, 61, 3, 237, 250, 204, 243, 200, 24, 61, 202, 30, 154,
-    237, 231, 61, 202, 30, 154, 91, 61, 3, 203, 136, 3, 83, 106, 91, 61, 3,
-    203, 136, 3, 52, 83, 106, 91, 200, 215, 61, 3, 203, 135, 91, 200, 215,
-    61, 3, 203, 136, 3, 83, 106, 91, 200, 215, 61, 3, 203, 136, 3, 52, 83,
-    106, 107, 250, 219, 91, 250, 219, 107, 52, 250, 219, 91, 52, 250, 219,
-    107, 61, 202, 30, 58, 239, 140, 91, 61, 202, 30, 58, 239, 140, 107, 61,
-    234, 235, 249, 80, 202, 30, 58, 239, 140, 91, 61, 234, 235, 249, 80, 202,
-    30, 58, 239, 140, 173, 197, 89, 26, 205, 159, 237, 69, 51, 173, 237, 69,
-    26, 205, 159, 197, 89, 51, 173, 197, 89, 61, 3, 122, 173, 237, 69, 61, 3,
-    122, 205, 159, 237, 69, 61, 3, 122, 205, 159, 197, 89, 61, 3, 122, 173,
-    197, 89, 61, 26, 173, 237, 69, 51, 173, 237, 69, 61, 26, 205, 159, 237,
-    69, 51, 205, 159, 237, 69, 61, 26, 205, 159, 197, 89, 51, 205, 159, 197,
-    89, 61, 26, 173, 197, 89, 51, 209, 250, 239, 147, 241, 55, 235, 213, 239,
-    146, 235, 213, 239, 147, 241, 55, 209, 250, 239, 146, 205, 159, 237, 69,
-    61, 241, 55, 173, 237, 69, 51, 173, 237, 69, 61, 241, 55, 205, 159, 237,
-    69, 51, 235, 213, 239, 147, 241, 55, 173, 237, 69, 51, 209, 250, 239,
-    147, 241, 55, 205, 159, 237, 69, 51, 173, 237, 69, 61, 241, 55, 173, 197,
-    89, 51, 173, 197, 89, 61, 241, 55, 173, 237, 69, 51, 197, 123, 61, 212,
-    107, 239, 83, 210, 22, 61, 212, 107, 91, 202, 209, 241, 8, 200, 23, 61,
-    212, 107, 91, 202, 209, 241, 8, 237, 230, 61, 212, 107, 237, 231, 202,
-    209, 241, 8, 222, 174, 61, 212, 107, 237, 231, 202, 209, 241, 8, 210, 11,
-    210, 14, 250, 254, 244, 205, 51, 222, 177, 250, 254, 251, 65, 51, 201,
-    243, 250, 254, 251, 65, 51, 248, 85, 250, 254, 251, 65, 51, 201, 243,
-    250, 254, 244, 205, 61, 3, 219, 15, 201, 243, 250, 254, 251, 65, 61, 3,
-    212, 125, 221, 203, 53, 207, 107, 244, 205, 51, 221, 203, 50, 207, 107,
-    251, 65, 51, 251, 65, 244, 203, 244, 250, 51, 244, 205, 244, 203, 244,
-    250, 51, 91, 61, 90, 206, 182, 107, 51, 107, 61, 90, 206, 182, 91, 51,
-    206, 182, 91, 61, 90, 107, 51, 91, 61, 3, 98, 60, 107, 61, 3, 98, 60, 91,
-    61, 202, 145, 196, 222, 50, 53, 61, 202, 145, 4, 244, 249, 200, 24, 200,
-    215, 61, 234, 235, 4, 244, 249, 50, 165, 124, 53, 165, 135, 232, 168, 50,
-    165, 135, 53, 165, 124, 232, 168, 124, 165, 53, 135, 165, 50, 232, 168,
-    124, 165, 50, 135, 165, 53, 232, 168, 50, 165, 124, 53, 165, 124, 232,
-    168, 124, 165, 53, 135, 165, 53, 232, 168, 50, 165, 135, 53, 165, 135,
-    232, 168, 124, 165, 50, 135, 165, 50, 232, 168, 107, 232, 169, 3, 165,
-    124, 202, 30, 154, 91, 232, 169, 3, 165, 124, 202, 30, 154, 200, 24, 232,
-    169, 3, 165, 53, 202, 30, 154, 237, 231, 232, 169, 3, 165, 53, 202, 30,
-    154, 107, 232, 169, 3, 165, 135, 202, 30, 154, 91, 232, 169, 3, 165, 135,
-    202, 30, 154, 200, 24, 232, 169, 3, 165, 50, 202, 30, 154, 237, 231, 232,
-    169, 3, 165, 50, 202, 30, 154, 107, 232, 169, 3, 165, 124, 234, 235, 154,
-    91, 232, 169, 3, 165, 124, 234, 235, 154, 200, 24, 232, 169, 3, 165, 53,
-    234, 235, 154, 237, 231, 232, 169, 3, 165, 53, 234, 235, 154, 107, 232,
-    169, 3, 165, 135, 234, 235, 154, 91, 232, 169, 3, 165, 135, 234, 235,
-    154, 200, 24, 232, 169, 3, 165, 50, 234, 235, 154, 237, 231, 232, 169, 3,
-    165, 50, 234, 235, 154, 107, 232, 169, 3, 165, 124, 90, 107, 232, 169, 3,
-    165, 237, 235, 200, 24, 232, 169, 3, 165, 50, 248, 210, 200, 24, 232,
-    169, 3, 165, 210, 22, 91, 232, 169, 3, 165, 124, 90, 91, 232, 169, 3,
-    165, 237, 235, 237, 231, 232, 169, 3, 165, 50, 248, 210, 237, 231, 232,
-    169, 3, 165, 210, 22, 107, 232, 169, 3, 165, 124, 90, 91, 232, 169, 3,
-    165, 200, 36, 107, 232, 169, 3, 165, 135, 90, 91, 232, 169, 3, 165, 237,
-    235, 91, 232, 169, 3, 165, 124, 90, 107, 232, 169, 3, 165, 200, 36, 91,
-    232, 169, 3, 165, 135, 90, 107, 232, 169, 3, 165, 237, 235, 107, 232,
-    169, 3, 165, 124, 90, 181, 240, 65, 107, 232, 169, 3, 165, 135, 248, 227,
-    181, 240, 65, 91, 232, 169, 3, 165, 124, 90, 181, 240, 65, 91, 232, 169,
-    3, 165, 135, 248, 227, 181, 240, 65, 200, 24, 232, 169, 3, 165, 50, 248,
-    210, 237, 231, 232, 169, 3, 165, 210, 22, 237, 231, 232, 169, 3, 165, 50,
-    248, 210, 200, 24, 232, 169, 3, 165, 210, 22, 53, 52, 61, 3, 209, 185,
-    232, 137, 236, 172, 2, 90, 91, 51, 202, 85, 214, 83, 90, 91, 51, 107, 61,
-    90, 202, 85, 214, 82, 91, 61, 90, 202, 85, 214, 82, 91, 61, 90, 251, 139,
-    180, 149, 222, 140, 90, 107, 51, 107, 61, 202, 145, 222, 139, 233, 94,
-    90, 91, 51, 204, 142, 90, 91, 51, 107, 61, 202, 145, 204, 141, 204, 94,
-    90, 107, 51, 50, 235, 112, 203, 135, 53, 235, 112, 203, 135, 124, 235,
-    112, 203, 135, 135, 235, 112, 203, 135, 201, 165, 83, 249, 80, 239, 218,
-    195, 159, 216, 17, 205, 105, 195, 159, 216, 17, 200, 201, 244, 168, 50,
-    59, 241, 18, 179, 53, 59, 241, 18, 179, 50, 59, 213, 140, 53, 59, 213,
-    140, 195, 159, 216, 17, 50, 226, 102, 179, 195, 159, 216, 17, 53, 226,
-    102, 179, 195, 159, 216, 17, 50, 248, 162, 179, 195, 159, 216, 17, 53,
-    248, 162, 179, 50, 47, 248, 62, 3, 200, 62, 53, 47, 248, 62, 3, 200, 62,
-    50, 47, 248, 62, 3, 202, 112, 226, 87, 201, 243, 241, 101, 53, 47, 248,
-    62, 3, 202, 112, 226, 87, 248, 85, 241, 101, 50, 47, 248, 62, 3, 202,
-    112, 226, 87, 248, 85, 241, 101, 53, 47, 248, 62, 3, 202, 112, 226, 87,
-    201, 243, 241, 101, 50, 251, 91, 248, 62, 3, 238, 253, 53, 251, 91, 248,
-    62, 3, 238, 253, 50, 250, 254, 222, 140, 179, 53, 250, 254, 233, 94, 179,
-    52, 50, 250, 254, 233, 94, 179, 52, 53, 250, 254, 222, 140, 179, 50, 58,
-    201, 231, 206, 245, 179, 53, 58, 201, 231, 206, 245, 179, 237, 250, 235,
-    169, 83, 195, 24, 222, 75, 219, 201, 251, 91, 214, 85, 222, 184, 53, 251,
-    91, 199, 132, 3, 205, 94, 219, 201, 53, 251, 91, 3, 238, 253, 251, 91, 3,
-    209, 81, 226, 41, 252, 10, 251, 90, 205, 127, 251, 91, 214, 85, 222, 184,
-    205, 127, 251, 91, 214, 85, 200, 36, 163, 251, 90, 210, 89, 251, 90, 251,
-    91, 3, 200, 62, 210, 89, 251, 91, 3, 200, 62, 214, 182, 251, 91, 214, 85,
-    200, 36, 214, 182, 251, 91, 214, 85, 237, 235, 219, 201, 251, 91, 3, 192,
-    250, 232, 236, 218, 226, 87, 61, 212, 107, 124, 26, 210, 22, 219, 201,
-    251, 91, 3, 192, 250, 232, 236, 218, 226, 87, 61, 212, 107, 124, 26, 222,
-    184, 219, 201, 251, 91, 3, 192, 250, 232, 236, 218, 226, 87, 61, 212,
-    107, 135, 26, 210, 22, 219, 201, 251, 91, 3, 192, 250, 232, 236, 218,
-    226, 87, 61, 212, 107, 135, 26, 222, 184, 219, 201, 251, 91, 3, 192, 250,
-    232, 236, 218, 226, 87, 61, 212, 107, 53, 26, 200, 36, 219, 201, 251, 91,
-    3, 192, 250, 232, 236, 218, 226, 87, 61, 212, 107, 50, 26, 200, 36, 219,
-    201, 251, 91, 3, 192, 250, 232, 236, 218, 226, 87, 61, 212, 107, 53, 26,
-    237, 235, 219, 201, 251, 91, 3, 192, 250, 232, 236, 218, 226, 87, 61,
-    212, 107, 50, 26, 237, 235, 210, 89, 236, 232, 207, 76, 236, 232, 207,
-    77, 3, 214, 26, 236, 232, 207, 77, 3, 4, 244, 250, 57, 236, 232, 207, 77,
-    3, 53, 61, 57, 236, 232, 207, 77, 3, 50, 61, 57, 244, 250, 3, 231, 155,
-    154, 46, 83, 154, 46, 213, 145, 46, 210, 90, 205, 177, 46, 213, 32, 244,
-    250, 239, 60, 247, 219, 231, 155, 249, 80, 26, 201, 243, 157, 239, 60,
-    247, 219, 83, 154, 244, 250, 3, 204, 96, 196, 222, 46, 251, 63, 239, 54,
-    55, 124, 61, 202, 145, 244, 249, 46, 59, 248, 5, 46, 248, 5, 46, 222,
-    139, 46, 233, 93, 244, 250, 3, 4, 244, 250, 202, 30, 202, 218, 210, 22,
-    244, 250, 3, 99, 231, 155, 204, 184, 202, 30, 202, 218, 210, 22, 103,
-    209, 250, 239, 147, 205, 248, 103, 235, 213, 239, 147, 205, 248, 103,
-    250, 179, 103, 4, 244, 249, 103, 205, 94, 99, 225, 126, 205, 92, 201,
-    181, 3, 76, 57, 201, 181, 3, 200, 62, 209, 81, 226, 87, 201, 180, 201,
-    181, 3, 207, 84, 250, 169, 248, 84, 53, 201, 181, 90, 50, 201, 180, 50,
-    201, 181, 248, 210, 83, 154, 83, 249, 80, 248, 210, 53, 201, 180, 248,
-    72, 3, 50, 157, 248, 136, 248, 72, 3, 53, 157, 248, 136, 58, 248, 71, 24,
-    3, 50, 157, 248, 136, 24, 3, 53, 157, 248, 136, 59, 231, 89, 58, 231, 89,
-    50, 197, 56, 235, 169, 53, 197, 56, 235, 169, 50, 52, 197, 56, 235, 169,
-    53, 52, 197, 56, 235, 169, 226, 79, 226, 63, 202, 108, 127, 226, 63, 226,
-    64, 217, 106, 3, 83, 154, 237, 244, 218, 122, 47, 3, 241, 124, 214, 31,
-    226, 76, 250, 202, 206, 144, 212, 5, 236, 172, 2, 26, 205, 250, 213, 145,
-    236, 172, 2, 26, 205, 250, 213, 146, 3, 202, 85, 57, 230, 193, 202, 30,
-    26, 205, 250, 213, 145, 233, 155, 205, 6, 202, 206, 237, 234, 201, 181,
-    3, 50, 157, 248, 136, 237, 234, 201, 181, 3, 53, 157, 248, 136, 58, 239,
-    141, 3, 135, 51, 58, 221, 198, 59, 244, 250, 3, 135, 51, 58, 244, 250, 3,
-    135, 51, 236, 154, 59, 205, 94, 236, 154, 58, 205, 94, 236, 154, 59, 239,
-    140, 236, 154, 58, 239, 140, 236, 154, 59, 244, 249, 236, 154, 58, 244,
-    249, 209, 123, 210, 90, 205, 178, 214, 82, 205, 178, 3, 214, 26, 210, 90,
-    205, 178, 3, 231, 155, 106, 248, 171, 205, 177, 248, 171, 210, 90, 205,
-    177, 52, 212, 125, 201, 165, 212, 125, 222, 179, 241, 10, 251, 91, 179,
-    210, 17, 241, 10, 251, 91, 179, 202, 69, 219, 13, 218, 54, 46, 76, 214,
-    82, 218, 54, 46, 98, 214, 82, 218, 54, 46, 24, 214, 82, 218, 54, 200, 52,
-    214, 83, 3, 238, 253, 218, 54, 200, 52, 214, 83, 3, 212, 125, 218, 54,
-    47, 226, 24, 214, 82, 218, 54, 47, 200, 52, 214, 82, 99, 221, 249, 26,
-    214, 82, 99, 221, 249, 214, 73, 214, 82, 218, 54, 24, 214, 82, 218, 219,
-    99, 204, 117, 204, 115, 3, 226, 37, 211, 90, 226, 38, 214, 82, 235, 121,
-    213, 134, 226, 37, 226, 38, 3, 52, 106, 226, 38, 250, 130, 3, 205, 248,
-    244, 242, 234, 214, 251, 65, 226, 35, 222, 76, 226, 36, 3, 210, 162, 213,
-    113, 250, 227, 212, 101, 222, 76, 226, 36, 3, 207, 107, 213, 113, 250,
-    227, 212, 101, 222, 76, 226, 36, 216, 19, 226, 81, 202, 218, 212, 101,
-    226, 38, 250, 227, 39, 212, 111, 214, 82, 211, 84, 226, 38, 214, 82, 226,
-    38, 3, 107, 61, 3, 122, 226, 38, 3, 24, 55, 226, 38, 3, 226, 23, 226, 38,
-    3, 200, 51, 226, 38, 3, 214, 26, 226, 38, 3, 200, 62, 225, 127, 222, 228,
-    50, 201, 181, 214, 82, 195, 159, 216, 17, 208, 169, 241, 160, 195, 159,
-    216, 17, 208, 169, 212, 166, 195, 159, 216, 17, 208, 169, 212, 0, 98, 2,
-    3, 4, 244, 250, 57, 98, 2, 3, 244, 241, 252, 23, 57, 98, 2, 3, 202, 85,
-    57, 98, 2, 3, 76, 60, 98, 2, 3, 202, 85, 60, 98, 2, 3, 204, 143, 102, 98,
-    2, 3, 58, 201, 180, 219, 16, 2, 3, 244, 160, 57, 219, 16, 2, 3, 76, 60,
-    219, 16, 2, 3, 235, 213, 238, 250, 219, 16, 2, 3, 209, 250, 238, 250, 98,
-    2, 226, 87, 50, 157, 244, 249, 98, 2, 226, 87, 53, 157, 244, 249, 199,
-    117, 214, 73, 241, 62, 212, 5, 218, 118, 2, 3, 76, 57, 218, 118, 2, 3,
-    200, 62, 207, 104, 212, 6, 3, 248, 85, 244, 202, 205, 222, 212, 5, 218,
-    118, 2, 226, 87, 50, 157, 244, 249, 218, 118, 2, 226, 87, 53, 157, 244,
-    249, 46, 218, 118, 2, 3, 244, 241, 252, 22, 218, 118, 2, 226, 87, 52,
-    244, 249, 46, 239, 54, 55, 98, 2, 226, 87, 201, 180, 219, 16, 2, 226, 87,
-    201, 180, 218, 118, 2, 226, 87, 201, 180, 226, 32, 212, 5, 210, 12, 226,
-    32, 212, 5, 195, 159, 216, 17, 210, 135, 241, 160, 251, 121, 214, 73,
-    241, 108, 226, 24, 3, 238, 253, 200, 52, 3, 219, 16, 55, 200, 52, 3, 214,
-    26, 226, 24, 3, 214, 26, 226, 24, 3, 221, 249, 251, 100, 200, 52, 3, 221,
-    249, 214, 72, 200, 52, 90, 226, 23, 226, 24, 90, 200, 51, 200, 52, 90,
-    249, 80, 90, 226, 23, 226, 24, 90, 249, 80, 90, 200, 51, 200, 52, 248,
-    210, 26, 225, 126, 3, 200, 51, 226, 24, 248, 210, 26, 225, 126, 3, 226,
-    23, 244, 203, 200, 52, 3, 207, 83, 244, 203, 226, 24, 3, 207, 83, 52, 47,
-    226, 23, 52, 47, 200, 51, 244, 203, 200, 52, 3, 207, 84, 26, 205, 222,
-    212, 5, 221, 249, 26, 3, 76, 57, 221, 249, 214, 73, 3, 76, 57, 52, 221,
-    249, 251, 100, 52, 221, 249, 214, 72, 99, 226, 25, 221, 249, 251, 100,
-    99, 226, 25, 221, 249, 214, 72, 205, 232, 222, 228, 214, 72, 205, 232,
-    222, 228, 251, 100, 221, 249, 214, 73, 214, 22, 221, 249, 251, 100, 221,
-    249, 26, 3, 112, 204, 243, 221, 249, 214, 73, 3, 112, 204, 243, 221, 249,
-    26, 3, 231, 155, 240, 65, 221, 249, 214, 73, 3, 231, 155, 240, 65, 221,
-    249, 26, 3, 52, 214, 26, 221, 249, 26, 3, 200, 62, 221, 249, 26, 3, 52,
-    200, 62, 4, 199, 114, 3, 200, 62, 221, 249, 214, 73, 3, 52, 214, 26, 221,
-    249, 214, 73, 3, 52, 200, 62, 195, 159, 216, 17, 239, 7, 251, 55, 195,
-    159, 216, 17, 210, 205, 251, 55, 236, 172, 2, 3, 76, 60, 230, 193, 3, 76,
-    57, 201, 165, 231, 155, 249, 80, 3, 52, 83, 106, 201, 165, 231, 155, 249,
-    80, 3, 201, 165, 83, 106, 202, 85, 214, 83, 3, 76, 57, 202, 85, 214, 83,
-    3, 209, 250, 238, 250, 206, 71, 219, 16, 206, 70, 241, 147, 3, 76, 57,
-    236, 172, 3, 250, 179, 251, 139, 180, 202, 30, 3, 244, 241, 252, 22, 251,
-    21, 180, 214, 73, 180, 149, 236, 172, 2, 90, 98, 55, 98, 2, 90, 236, 172,
-    55, 236, 172, 2, 90, 202, 85, 214, 82, 52, 244, 169, 236, 173, 99, 241,
-    140, 236, 172, 206, 85, 115, 241, 140, 236, 172, 206, 85, 236, 172, 2, 3,
-    99, 238, 251, 90, 26, 99, 238, 251, 60, 236, 165, 3, 235, 7, 238, 251,
-    57, 222, 140, 3, 244, 250, 226, 41, 233, 94, 3, 244, 250, 226, 41, 222,
-    140, 3, 211, 79, 117, 57, 233, 94, 3, 211, 79, 117, 57, 222, 140, 214,
-    73, 205, 250, 180, 149, 233, 94, 214, 73, 205, 250, 180, 149, 222, 140,
-    214, 73, 205, 250, 180, 202, 30, 3, 76, 226, 41, 233, 94, 214, 73, 205,
-    250, 180, 202, 30, 3, 76, 226, 41, 222, 140, 214, 73, 205, 250, 180, 202,
-    30, 3, 76, 57, 233, 94, 214, 73, 205, 250, 180, 202, 30, 3, 76, 57, 222,
-    140, 214, 73, 205, 250, 180, 202, 30, 3, 76, 90, 210, 22, 233, 94, 214,
-    73, 205, 250, 180, 202, 30, 3, 76, 90, 222, 184, 222, 140, 214, 73, 251,
-    22, 233, 94, 214, 73, 251, 22, 222, 140, 26, 206, 60, 216, 19, 180, 149,
-    233, 94, 26, 206, 60, 216, 19, 180, 149, 222, 140, 26, 216, 19, 251, 22,
-    233, 94, 26, 216, 19, 251, 22, 222, 140, 90, 237, 243, 180, 90, 233, 93,
-    233, 94, 90, 237, 243, 180, 90, 222, 139, 222, 140, 90, 206, 71, 214, 73,
-    236, 173, 233, 94, 90, 206, 71, 214, 73, 236, 173, 222, 140, 90, 206, 71,
-    90, 233, 93, 233, 94, 90, 206, 71, 90, 222, 139, 222, 140, 90, 233, 94,
-    90, 237, 243, 236, 173, 233, 94, 90, 222, 140, 90, 237, 243, 236, 173,
-    222, 140, 90, 205, 250, 180, 90, 233, 94, 90, 205, 250, 236, 173, 233,
-    94, 90, 205, 250, 180, 90, 222, 140, 90, 205, 250, 236, 173, 205, 250,
-    180, 202, 30, 214, 73, 222, 139, 205, 250, 180, 202, 30, 214, 73, 233,
-    93, 205, 250, 180, 202, 30, 214, 73, 222, 140, 3, 76, 226, 41, 205, 250,
-    180, 202, 30, 214, 73, 233, 94, 3, 76, 226, 41, 237, 243, 180, 202, 30,
-    214, 73, 222, 139, 237, 243, 180, 202, 30, 214, 73, 233, 93, 237, 243,
-    205, 250, 180, 202, 30, 214, 73, 222, 139, 237, 243, 205, 250, 180, 202,
-    30, 214, 73, 233, 93, 206, 71, 214, 73, 222, 139, 206, 71, 214, 73, 233,
-    93, 206, 71, 90, 222, 140, 90, 236, 172, 55, 206, 71, 90, 233, 94, 90,
-    236, 172, 55, 52, 217, 90, 222, 139, 52, 217, 90, 233, 93, 52, 217, 90,
-    222, 140, 3, 200, 62, 233, 94, 214, 22, 222, 139, 233, 94, 248, 210, 222,
-    139, 222, 140, 244, 203, 247, 219, 241, 11, 233, 94, 244, 203, 247, 219,
-    241, 11, 222, 140, 244, 203, 247, 219, 241, 12, 90, 205, 250, 236, 173,
-    233, 94, 244, 203, 247, 219, 241, 12, 90, 205, 250, 236, 173, 205, 223,
-    202, 222, 222, 226, 202, 222, 205, 223, 202, 223, 214, 73, 180, 149, 222,
-    226, 202, 223, 214, 73, 180, 149, 236, 172, 2, 3, 247, 254, 57, 212, 36,
-    90, 206, 60, 236, 172, 55, 204, 134, 90, 206, 60, 236, 172, 55, 212, 36,
-    90, 206, 60, 216, 19, 180, 149, 204, 134, 90, 206, 60, 216, 19, 180, 149,
-    212, 36, 90, 236, 172, 55, 204, 134, 90, 236, 172, 55, 212, 36, 90, 216,
-    19, 180, 149, 204, 134, 90, 216, 19, 180, 149, 212, 36, 90, 251, 139,
-    180, 149, 204, 134, 90, 251, 139, 180, 149, 212, 36, 90, 216, 19, 251,
-    139, 180, 149, 204, 134, 90, 216, 19, 251, 139, 180, 149, 52, 212, 35,
-    52, 204, 133, 204, 142, 3, 238, 253, 204, 94, 3, 238, 253, 204, 142, 3,
-    98, 2, 60, 204, 94, 3, 98, 2, 60, 204, 142, 3, 218, 118, 2, 60, 204, 94,
-    3, 218, 118, 2, 60, 204, 142, 77, 214, 73, 180, 202, 30, 3, 76, 57, 204,
-    94, 77, 214, 73, 180, 202, 30, 3, 76, 57, 204, 142, 77, 90, 236, 172, 55,
-    204, 94, 77, 90, 236, 172, 55, 204, 142, 77, 90, 202, 85, 214, 82, 204,
-    94, 77, 90, 202, 85, 214, 82, 204, 142, 77, 90, 251, 139, 180, 149, 204,
-    94, 77, 90, 251, 139, 180, 149, 204, 142, 77, 90, 216, 19, 180, 149, 204,
-    94, 77, 90, 216, 19, 180, 149, 47, 50, 192, 111, 214, 82, 47, 53, 192,
-    111, 214, 82, 244, 203, 204, 141, 244, 203, 204, 93, 244, 203, 204, 142,
-    214, 73, 180, 149, 244, 203, 204, 94, 214, 73, 180, 149, 204, 142, 90,
-    204, 93, 204, 94, 90, 204, 141, 204, 142, 90, 204, 141, 204, 94, 90, 204,
-    93, 204, 94, 248, 210, 204, 141, 204, 94, 248, 210, 26, 225, 126, 247,
-    219, 240, 66, 3, 204, 141, 237, 0, 77, 214, 85, 237, 230, 212, 156, 3,
-    203, 49, 201, 242, 201, 198, 226, 23, 235, 25, 216, 34, 206, 182, 50,
-    203, 147, 206, 182, 135, 203, 147, 206, 182, 124, 203, 147, 213, 33, 3,
-    209, 80, 83, 249, 80, 201, 165, 53, 201, 3, 52, 83, 249, 80, 50, 201, 3,
-    83, 249, 80, 52, 50, 201, 3, 52, 83, 249, 80, 52, 50, 201, 3, 181, 240,
-    66, 234, 235, 50, 219, 169, 77, 52, 199, 100, 206, 182, 135, 203, 148, 3,
-    214, 26, 206, 182, 124, 203, 148, 3, 200, 62, 206, 182, 124, 203, 148,
-    90, 206, 182, 135, 203, 147, 52, 135, 203, 147, 52, 124, 203, 147, 52,
-    204, 196, 216, 19, 55, 210, 89, 52, 204, 196, 216, 19, 55, 239, 19, 216,
-    19, 239, 62, 3, 210, 89, 217, 105, 205, 248, 83, 222, 76, 3, 244, 250,
-    57, 83, 222, 76, 3, 244, 250, 60, 135, 203, 148, 3, 244, 250, 60, 213,
-    146, 3, 231, 155, 106, 213, 146, 3, 202, 85, 214, 82, 201, 165, 83, 249,
-    80, 248, 164, 210, 136, 201, 165, 83, 249, 80, 3, 231, 155, 106, 201,
-    165, 244, 169, 214, 82, 201, 165, 217, 90, 222, 139, 201, 165, 217, 90,
-    233, 93, 237, 243, 205, 250, 222, 140, 214, 73, 180, 149, 237, 243, 205,
-    250, 233, 94, 214, 73, 180, 149, 201, 165, 205, 178, 248, 164, 210, 136,
-    222, 228, 201, 165, 83, 249, 80, 214, 82, 52, 205, 178, 214, 82, 59, 83,
-    154, 218, 54, 59, 83, 154, 173, 237, 69, 59, 51, 173, 197, 89, 59, 51,
-    205, 159, 237, 69, 59, 51, 205, 159, 197, 89, 59, 51, 50, 53, 59, 51,
-    107, 58, 51, 200, 24, 58, 51, 237, 231, 58, 51, 173, 237, 69, 58, 51,
-    173, 197, 89, 58, 51, 205, 159, 237, 69, 58, 51, 205, 159, 197, 89, 58,
-    51, 50, 53, 58, 51, 124, 135, 58, 51, 91, 61, 3, 202, 68, 237, 230, 91,
-    61, 3, 202, 68, 200, 23, 107, 61, 3, 202, 68, 237, 230, 107, 61, 3, 202,
-    68, 200, 23, 47, 3, 201, 243, 157, 248, 136, 47, 3, 248, 85, 157, 248,
-    136, 47, 3, 200, 33, 53, 239, 147, 157, 248, 136, 47, 3, 221, 203, 50,
-    239, 147, 157, 248, 136, 239, 141, 3, 50, 157, 248, 136, 239, 141, 3, 53,
-    157, 248, 136, 239, 141, 3, 201, 243, 157, 248, 136, 239, 141, 3, 248,
-    85, 157, 248, 136, 237, 250, 205, 94, 58, 222, 228, 205, 94, 59, 222,
-    228, 205, 94, 58, 199, 48, 4, 205, 94, 59, 199, 48, 4, 205, 94, 58, 213,
-    55, 59, 213, 55, 59, 232, 85, 58, 232, 85, 231, 155, 58, 232, 85, 58,
-    222, 228, 244, 249, 58, 219, 190, 239, 140, 59, 219, 190, 239, 140, 58,
-    219, 190, 221, 198, 59, 219, 190, 221, 198, 58, 4, 239, 140, 58, 4, 221,
-    198, 59, 4, 221, 198, 58, 231, 155, 236, 248, 59, 231, 155, 236, 248, 58,
-    83, 236, 248, 59, 83, 236, 248, 50, 61, 3, 4, 244, 249, 115, 107, 250,
-    214, 50, 61, 3, 46, 212, 125, 181, 107, 205, 87, 51, 107, 200, 215, 61,
-    3, 83, 106, 107, 200, 215, 61, 3, 52, 83, 106, 107, 200, 215, 61, 234,
-    235, 154, 107, 200, 215, 201, 165, 240, 66, 51, 107, 61, 3, 237, 250,
-    204, 243, 107, 61, 3, 203, 136, 3, 83, 106, 107, 61, 3, 203, 136, 3, 52,
-    83, 106, 107, 200, 215, 61, 3, 203, 135, 107, 200, 215, 61, 3, 203, 136,
-    3, 83, 106, 107, 200, 215, 61, 3, 203, 136, 3, 52, 83, 106, 107, 61, 202,
-    145, 196, 222, 197, 123, 61, 212, 107, 239, 83, 222, 184, 236, 172, 2,
-    90, 107, 51, 210, 90, 202, 85, 214, 83, 90, 107, 51, 107, 61, 90, 210,
-    90, 251, 139, 180, 149, 91, 61, 202, 145, 233, 93, 91, 61, 202, 145, 204,
-    93, 107, 211, 90, 51, 91, 211, 90, 51, 210, 90, 202, 85, 214, 83, 90, 91,
-    51, 91, 61, 90, 210, 90, 251, 139, 180, 149, 202, 85, 214, 83, 90, 107,
-    51, 107, 61, 90, 251, 139, 180, 149, 107, 61, 90, 210, 90, 202, 85, 214,
-    82, 91, 61, 90, 210, 90, 202, 85, 214, 82, 237, 231, 201, 179, 195, 24,
-    51, 206, 182, 205, 250, 173, 51, 206, 182, 249, 135, 205, 159, 51, 59,
-    219, 190, 205, 7, 58, 4, 205, 7, 59, 4, 205, 7, 58, 210, 17, 213, 55, 59,
-    210, 17, 213, 55, 85, 222, 228, 244, 249, 85, 214, 28, 3, 214, 28, 226,
-    41, 85, 244, 250, 3, 244, 250, 226, 41, 85, 244, 249, 85, 46, 208, 230,
-    205, 250, 173, 61, 3, 231, 164, 232, 137, 249, 135, 205, 159, 61, 3, 231,
-    164, 203, 135, 205, 250, 173, 61, 3, 231, 155, 203, 135, 249, 135, 205,
-    159, 61, 3, 231, 155, 203, 135, 248, 218, 61, 212, 107, 237, 231, 202,
-    209, 173, 237, 68, 206, 182, 248, 218, 61, 212, 107, 237, 231, 202, 209,
-    173, 237, 68, 107, 201, 179, 51, 200, 24, 201, 179, 51, 91, 201, 179, 51,
-    237, 231, 201, 179, 51, 50, 53, 201, 179, 51, 124, 135, 201, 179, 51,
-    173, 197, 89, 201, 179, 51, 173, 237, 69, 201, 179, 51, 205, 159, 237,
-    69, 201, 179, 51, 205, 159, 197, 89, 201, 179, 51, 107, 201, 179, 240,
-    64, 51, 200, 24, 201, 179, 240, 64, 51, 91, 201, 179, 240, 64, 51, 237,
-    231, 201, 179, 240, 64, 51, 244, 205, 201, 179, 192, 244, 250, 51, 251,
-    65, 201, 179, 192, 244, 250, 51, 107, 201, 179, 61, 202, 30, 154, 200,
-    24, 201, 179, 61, 202, 30, 154, 91, 201, 179, 61, 202, 30, 154, 237, 231,
-    201, 179, 61, 202, 30, 154, 173, 197, 89, 201, 179, 61, 202, 30, 154,
-    173, 237, 69, 201, 179, 61, 202, 30, 154, 205, 159, 237, 69, 201, 179,
-    61, 202, 30, 154, 205, 159, 197, 89, 201, 179, 61, 202, 30, 154, 107,
-    201, 179, 61, 3, 52, 231, 155, 106, 200, 24, 201, 179, 61, 3, 52, 231,
-    155, 106, 91, 201, 179, 61, 3, 52, 231, 155, 106, 237, 231, 201, 179, 61,
-    3, 52, 231, 155, 106, 231, 155, 203, 155, 224, 153, 83, 203, 155, 224,
-    153, 107, 201, 179, 61, 127, 91, 201, 179, 51, 200, 24, 201, 179, 61,
-    107, 77, 237, 231, 201, 179, 51, 91, 201, 179, 61, 127, 107, 201, 179,
-    51, 237, 231, 201, 179, 61, 107, 77, 200, 24, 201, 179, 51, 107, 201,
-    179, 213, 219, 250, 214, 200, 24, 201, 179, 213, 219, 250, 214, 91, 201,
-    179, 213, 219, 250, 214, 237, 231, 201, 179, 213, 219, 250, 214, 107, 58,
-    46, 59, 51, 200, 24, 58, 46, 59, 51, 91, 58, 46, 59, 51, 237, 231, 58,
-    46, 59, 51, 251, 65, 201, 179, 53, 200, 167, 51, 251, 65, 201, 179, 248,
-    85, 200, 167, 51, 251, 65, 201, 179, 50, 200, 167, 51, 251, 65, 201, 179,
-    201, 243, 200, 167, 51, 210, 94, 222, 184, 210, 94, 210, 22, 217, 80,
-    222, 184, 217, 80, 210, 22, 235, 7, 241, 102, 250, 215, 244, 245, 251,
-    64, 91, 58, 51, 202, 154, 201, 241, 107, 236, 166, 250, 217, 202, 154,
-    210, 18, 200, 24, 236, 166, 250, 217, 202, 154, 201, 241, 91, 236, 166,
-    250, 217, 202, 154, 222, 180, 237, 231, 236, 166, 250, 217, 58, 107, 236,
-    166, 250, 217, 58, 200, 24, 236, 166, 250, 217, 58, 91, 236, 166, 250,
-    217, 58, 237, 231, 236, 166, 250, 217, 237, 231, 201, 179, 61, 3, 181,
-    202, 68, 222, 174, 237, 231, 201, 179, 61, 3, 181, 202, 68, 210, 11, 200,
-    24, 201, 179, 61, 3, 181, 202, 68, 222, 174, 200, 24, 201, 179, 61, 3,
-    181, 202, 68, 210, 11, 107, 201, 179, 61, 3, 181, 202, 68, 200, 23, 91,
-    201, 179, 61, 3, 181, 202, 68, 200, 23, 107, 201, 179, 61, 3, 181, 202,
-    68, 237, 230, 91, 201, 179, 61, 3, 181, 202, 68, 237, 230, 58, 241, 10,
-    237, 231, 26, 107, 51, 58, 241, 10, 237, 231, 26, 91, 51, 58, 241, 10,
-    200, 24, 26, 107, 51, 58, 241, 10, 200, 24, 26, 91, 51, 58, 241, 10, 107,
-    26, 200, 24, 51, 58, 241, 10, 91, 26, 200, 24, 51, 58, 241, 10, 107, 26,
-    237, 231, 51, 58, 241, 10, 91, 26, 237, 231, 51, 210, 63, 61, 135, 222,
-    184, 210, 63, 61, 135, 210, 22, 210, 63, 61, 124, 222, 184, 210, 63, 61,
-    124, 210, 22, 210, 63, 61, 50, 200, 36, 210, 63, 61, 53, 200, 36, 210,
-    63, 61, 50, 237, 235, 210, 63, 61, 53, 237, 235, 200, 24, 59, 61, 234,
-    235, 249, 80, 3, 231, 155, 154, 124, 250, 218, 226, 87, 39, 210, 164,
-    248, 70, 214, 22, 59, 205, 92, 214, 22, 59, 26, 58, 205, 92, 214, 22, 58,
-    205, 92, 249, 99, 111, 3, 175, 196, 222, 46, 196, 222, 46, 27, 196, 222,
-    58, 47, 247, 34, 58, 239, 141, 247, 34, 163, 58, 213, 55, 231, 155, 58,
-    214, 173, 58, 214, 173, 58, 219, 190, 200, 35, 201, 181, 247, 34, 58,
-    219, 190, 237, 234, 201, 181, 247, 34, 58, 219, 190, 222, 179, 201, 181,
-    247, 34, 58, 219, 190, 210, 17, 201, 181, 247, 34, 217, 95, 235, 24, 102,
-    201, 243, 157, 58, 244, 249, 248, 85, 157, 58, 244, 249, 175, 235, 7,
-    212, 109, 58, 241, 6, 209, 194, 175, 235, 7, 212, 109, 58, 241, 6, 59,
-    235, 7, 212, 109, 241, 6, 209, 194, 59, 235, 7, 212, 109, 241, 6, 47,
-    212, 79, 226, 68, 200, 66, 55, 233, 84, 78, 212, 122, 235, 24, 102, 212,
-    122, 235, 24, 134, 212, 122, 235, 24, 136, 212, 122, 235, 24, 146, 201,
-    200, 211, 246, 250, 175, 231, 10, 212, 231, 217, 91, 59, 218, 190, 207,
-    113, 58, 239, 141, 214, 120, 241, 61, 201, 143, 175, 218, 190, 250, 210,
-    241, 25, 232, 243, 195, 77, 223, 204, 251, 34, 251, 252, 197, 218, 212,
-    80, 50, 157, 58, 205, 7, 53, 157, 58, 205, 7, 205, 8, 3, 50, 157, 248,
-    136, 205, 8, 3, 53, 157, 248, 136, 107, 200, 215, 61, 3, 201, 181, 250,
-    216, 200, 24, 200, 215, 61, 3, 201, 181, 250, 216, 91, 200, 215, 61, 3,
-    201, 181, 250, 216, 237, 231, 200, 215, 61, 3, 201, 181, 250, 216, 236,
-    156, 235, 24, 100, 236, 156, 235, 24, 102, 208, 130, 209, 103, 250, 174,
-    16, 199, 19, 209, 103, 250, 174, 16, 216, 5, 209, 103, 250, 174, 16, 211,
-    67, 209, 103, 250, 174, 16, 248, 159, 209, 103, 250, 174, 16, 207, 96,
-    209, 103, 250, 174, 16, 201, 192, 236, 172, 2, 3, 226, 64, 60, 200, 48,
-    105, 207, 92, 105, 237, 240, 105, 213, 123, 105, 210, 89, 53, 251, 90,
-    232, 106, 213, 107, 105, 125, 6, 1, 250, 113, 125, 6, 1, 248, 9, 125, 6,
-    1, 199, 116, 125, 6, 1, 233, 159, 125, 6, 1, 239, 23, 125, 6, 1, 196, 38,
-    125, 6, 1, 195, 58, 125, 6, 1, 237, 151, 125, 6, 1, 195, 84, 125, 6, 1,
-    225, 221, 125, 6, 1, 84, 225, 221, 125, 6, 1, 68, 125, 6, 1, 239, 44,
-    125, 6, 1, 225, 23, 125, 6, 1, 222, 39, 125, 6, 1, 218, 59, 125, 6, 1,
-    217, 206, 125, 6, 1, 214, 104, 125, 6, 1, 212, 104, 125, 6, 1, 209, 249,
-    125, 6, 1, 205, 229, 125, 6, 1, 200, 246, 125, 6, 1, 200, 83, 125, 6, 1,
-    234, 238, 125, 6, 1, 232, 91, 125, 6, 1, 214, 40, 125, 6, 1, 213, 92,
-    125, 6, 1, 206, 154, 125, 6, 1, 201, 92, 125, 6, 1, 245, 36, 125, 6, 1,
-    207, 50, 125, 6, 1, 196, 47, 125, 6, 1, 196, 49, 125, 6, 1, 196, 82, 125,
-    6, 1, 205, 123, 142, 125, 6, 1, 195, 217, 125, 6, 1, 4, 195, 182, 125, 6,
-    1, 4, 195, 183, 3, 203, 135, 125, 6, 1, 196, 3, 125, 6, 1, 226, 6, 4,
-    195, 182, 125, 6, 1, 248, 171, 195, 182, 125, 6, 1, 226, 6, 248, 171,
-    195, 182, 125, 6, 1, 235, 103, 125, 6, 1, 225, 219, 125, 6, 1, 206, 153,
-    125, 6, 1, 201, 155, 63, 125, 6, 1, 222, 216, 218, 59, 125, 4, 1, 250,
-    113, 125, 4, 1, 248, 9, 125, 4, 1, 199, 116, 125, 4, 1, 233, 159, 125, 4,
-    1, 239, 23, 125, 4, 1, 196, 38, 125, 4, 1, 195, 58, 125, 4, 1, 237, 151,
-    125, 4, 1, 195, 84, 125, 4, 1, 225, 221, 125, 4, 1, 84, 225, 221, 125, 4,
-    1, 68, 125, 4, 1, 239, 44, 125, 4, 1, 225, 23, 125, 4, 1, 222, 39, 125,
-    4, 1, 218, 59, 125, 4, 1, 217, 206, 125, 4, 1, 214, 104, 125, 4, 1, 212,
-    104, 125, 4, 1, 209, 249, 125, 4, 1, 205, 229, 125, 4, 1, 200, 246, 125,
-    4, 1, 200, 83, 125, 4, 1, 234, 238, 125, 4, 1, 232, 91, 125, 4, 1, 214,
-    40, 125, 4, 1, 213, 92, 125, 4, 1, 206, 154, 125, 4, 1, 201, 92, 125, 4,
-    1, 245, 36, 125, 4, 1, 207, 50, 125, 4, 1, 196, 47, 125, 4, 1, 196, 49,
-    125, 4, 1, 196, 82, 125, 4, 1, 205, 123, 142, 125, 4, 1, 195, 217, 125,
-    4, 1, 4, 195, 182, 125, 4, 1, 4, 195, 183, 3, 203, 135, 125, 4, 1, 196,
-    3, 125, 4, 1, 226, 6, 4, 195, 182, 125, 4, 1, 248, 171, 195, 182, 125, 4,
-    1, 226, 6, 248, 171, 195, 182, 125, 4, 1, 235, 103, 125, 4, 1, 225, 219,
-    125, 4, 1, 206, 153, 125, 4, 1, 201, 155, 63, 125, 4, 1, 222, 216, 218,
-    59, 8, 6, 1, 223, 100, 3, 52, 154, 8, 4, 1, 223, 100, 3, 52, 154, 8, 6,
-    1, 223, 100, 3, 112, 202, 84, 8, 6, 1, 214, 4, 3, 106, 8, 6, 1, 211, 32,
-    3, 203, 135, 8, 4, 1, 39, 3, 106, 8, 4, 1, 203, 217, 3, 239, 147, 106, 8,
-    6, 1, 233, 16, 3, 239, 195, 8, 4, 1, 233, 16, 3, 239, 195, 8, 6, 1, 225,
-    81, 3, 239, 195, 8, 4, 1, 225, 81, 3, 239, 195, 8, 6, 1, 195, 159, 3,
-    239, 195, 8, 4, 1, 195, 159, 3, 239, 195, 8, 6, 1, 251, 134, 8, 6, 1,
-    221, 137, 3, 122, 8, 6, 1, 163, 63, 8, 6, 1, 163, 251, 134, 8, 4, 1, 199,
-    231, 3, 53, 122, 8, 6, 1, 197, 200, 3, 122, 8, 4, 1, 197, 200, 3, 122, 8,
-    4, 1, 199, 231, 3, 241, 21, 8, 6, 1, 157, 233, 15, 8, 4, 1, 157, 233, 15,
-    8, 4, 1, 203, 133, 212, 246, 8, 4, 1, 237, 136, 3, 216, 16, 8, 4, 1, 163,
-    211, 32, 3, 203, 135, 8, 4, 1, 177, 3, 126, 210, 3, 226, 41, 8, 1, 4, 6,
-    163, 69, 8, 204, 143, 4, 1, 225, 217, 73, 1, 6, 199, 230, 8, 6, 1, 209,
-    81, 3, 204, 63, 203, 135, 8, 6, 1, 195, 159, 3, 204, 63, 203, 135, 88, 6,
-    1, 251, 158, 88, 4, 1, 251, 158, 88, 6, 1, 199, 31, 88, 4, 1, 199, 31,
-    88, 6, 1, 234, 94, 88, 4, 1, 234, 94, 88, 6, 1, 240, 103, 88, 4, 1, 240,
-    103, 88, 6, 1, 237, 32, 88, 4, 1, 237, 32, 88, 6, 1, 205, 164, 88, 4, 1,
-    205, 164, 88, 6, 1, 195, 96, 88, 4, 1, 195, 96, 88, 6, 1, 232, 162, 88,
-    4, 1, 232, 162, 88, 6, 1, 202, 197, 88, 4, 1, 202, 197, 88, 6, 1, 230,
-    207, 88, 4, 1, 230, 207, 88, 6, 1, 225, 7, 88, 4, 1, 225, 7, 88, 6, 1,
-    222, 211, 88, 4, 1, 222, 211, 88, 6, 1, 219, 78, 88, 4, 1, 219, 78, 88,
-    6, 1, 216, 223, 88, 4, 1, 216, 223, 88, 6, 1, 223, 203, 88, 4, 1, 223,
-    203, 88, 6, 1, 72, 88, 4, 1, 72, 88, 6, 1, 212, 220, 88, 4, 1, 212, 220,
-    88, 6, 1, 209, 232, 88, 4, 1, 209, 232, 88, 6, 1, 206, 74, 88, 4, 1, 206,
-    74, 88, 6, 1, 203, 89, 88, 4, 1, 203, 89, 88, 6, 1, 200, 114, 88, 4, 1,
-    200, 114, 88, 6, 1, 235, 153, 88, 4, 1, 235, 153, 88, 6, 1, 224, 124, 88,
-    4, 1, 224, 124, 88, 6, 1, 211, 238, 88, 4, 1, 211, 238, 88, 6, 1, 214,
-    96, 88, 4, 1, 214, 96, 88, 6, 1, 239, 145, 251, 164, 88, 4, 1, 239, 145,
-    251, 164, 88, 6, 1, 37, 88, 251, 194, 88, 4, 1, 37, 88, 251, 194, 88, 6,
-    1, 241, 44, 237, 32, 88, 4, 1, 241, 44, 237, 32, 88, 6, 1, 239, 145, 225,
-    7, 88, 4, 1, 239, 145, 225, 7, 88, 6, 1, 239, 145, 216, 223, 88, 4, 1,
-    239, 145, 216, 223, 88, 6, 1, 241, 44, 216, 223, 88, 4, 1, 241, 44, 216,
-    223, 88, 6, 1, 37, 88, 214, 96, 88, 4, 1, 37, 88, 214, 96, 88, 6, 1, 208,
-    222, 88, 4, 1, 208, 222, 88, 6, 1, 241, 59, 206, 247, 88, 4, 1, 241, 59,
-    206, 247, 88, 6, 1, 37, 88, 206, 247, 88, 4, 1, 37, 88, 206, 247, 88, 6,
-    1, 37, 88, 236, 141, 88, 4, 1, 37, 88, 236, 141, 88, 6, 1, 251, 177, 224,
-    129, 88, 4, 1, 251, 177, 224, 129, 88, 6, 1, 239, 145, 231, 156, 88, 4,
-    1, 239, 145, 231, 156, 88, 6, 1, 37, 88, 231, 156, 88, 4, 1, 37, 88, 231,
-    156, 88, 6, 1, 37, 88, 142, 88, 4, 1, 37, 88, 142, 88, 6, 1, 223, 99,
-    142, 88, 4, 1, 223, 99, 142, 88, 6, 1, 37, 88, 232, 112, 88, 4, 1, 37,
-    88, 232, 112, 88, 6, 1, 37, 88, 232, 165, 88, 4, 1, 37, 88, 232, 165, 88,
-    6, 1, 37, 88, 234, 89, 88, 4, 1, 37, 88, 234, 89, 88, 6, 1, 37, 88, 239,
-    47, 88, 4, 1, 37, 88, 239, 47, 88, 6, 1, 37, 88, 206, 213, 88, 4, 1, 37,
-    88, 206, 213, 88, 6, 1, 37, 215, 153, 206, 213, 88, 4, 1, 37, 215, 153,
-    206, 213, 88, 6, 1, 37, 215, 153, 217, 19, 88, 4, 1, 37, 215, 153, 217,
-    19, 88, 6, 1, 37, 215, 153, 215, 89, 88, 4, 1, 37, 215, 153, 215, 89, 88,
-    6, 1, 37, 215, 153, 197, 124, 88, 4, 1, 37, 215, 153, 197, 124, 88, 16,
-    225, 31, 88, 16, 219, 79, 209, 232, 88, 16, 212, 221, 209, 232, 88, 16,
-    204, 252, 88, 16, 203, 90, 209, 232, 88, 16, 224, 125, 209, 232, 88, 16,
-    206, 214, 206, 74, 88, 6, 1, 241, 44, 206, 247, 88, 4, 1, 241, 44, 206,
-    247, 88, 6, 1, 241, 44, 234, 89, 88, 4, 1, 241, 44, 234, 89, 88, 38, 216,
-    224, 57, 88, 38, 205, 116, 250, 187, 88, 38, 205, 116, 222, 148, 88, 6,
-    1, 248, 109, 224, 129, 88, 4, 1, 248, 109, 224, 129, 88, 37, 215, 153,
-    234, 217, 204, 226, 88, 37, 215, 153, 239, 86, 211, 79, 78, 88, 37, 215,
-    153, 226, 66, 211, 79, 78, 88, 37, 215, 153, 199, 102, 239, 59, 88, 191,
-    97, 232, 225, 88, 234, 217, 204, 226, 88, 218, 185, 239, 59, 94, 4, 1,
-    251, 106, 94, 4, 1, 249, 93, 94, 4, 1, 234, 93, 94, 4, 1, 239, 6, 94, 4,
-    1, 236, 230, 94, 4, 1, 199, 16, 94, 4, 1, 195, 82, 94, 4, 1, 203, 114,
-    94, 4, 1, 226, 86, 94, 4, 1, 225, 17, 94, 4, 1, 222, 222, 94, 4, 1, 220,
-    62, 94, 4, 1, 217, 211, 94, 4, 1, 214, 119, 94, 4, 1, 213, 157, 94, 4, 1,
-    195, 70, 94, 4, 1, 210, 229, 94, 4, 1, 208, 219, 94, 4, 1, 203, 101, 94,
-    4, 1, 200, 72, 94, 4, 1, 212, 254, 94, 4, 1, 224, 134, 94, 4, 1, 233,
-    221, 94, 4, 1, 211, 144, 94, 4, 1, 206, 211, 94, 4, 1, 245, 62, 94, 4, 1,
-    247, 142, 94, 4, 1, 225, 162, 94, 4, 1, 245, 0, 94, 4, 1, 247, 0, 94, 4,
-    1, 196, 206, 94, 4, 1, 225, 177, 94, 4, 1, 232, 242, 94, 4, 1, 232, 147,
-    94, 4, 1, 232, 58, 94, 4, 1, 197, 109, 94, 4, 1, 232, 175, 94, 4, 1, 231,
-    181, 94, 4, 1, 196, 5, 94, 4, 1, 251, 234, 202, 104, 1, 164, 202, 104, 1,
-    196, 125, 202, 104, 1, 196, 124, 202, 104, 1, 196, 114, 202, 104, 1, 196,
-    112, 202, 104, 1, 248, 212, 252, 24, 196, 107, 202, 104, 1, 196, 107,
-    202, 104, 1, 196, 122, 202, 104, 1, 196, 119, 202, 104, 1, 196, 121, 202,
-    104, 1, 196, 120, 202, 104, 1, 196, 29, 202, 104, 1, 196, 116, 202, 104,
-    1, 196, 105, 202, 104, 1, 201, 32, 196, 105, 202, 104, 1, 196, 102, 202,
-    104, 1, 196, 110, 202, 104, 1, 248, 212, 252, 24, 196, 110, 202, 104, 1,
-    201, 32, 196, 110, 202, 104, 1, 196, 109, 202, 104, 1, 196, 129, 202,
-    104, 1, 196, 103, 202, 104, 1, 201, 32, 196, 103, 202, 104, 1, 196, 92,
-    202, 104, 1, 201, 32, 196, 92, 202, 104, 1, 196, 24, 202, 104, 1, 196,
-    71, 202, 104, 1, 251, 207, 196, 71, 202, 104, 1, 201, 32, 196, 71, 202,
-    104, 1, 196, 101, 202, 104, 1, 196, 100, 202, 104, 1, 196, 97, 202, 104,
-    1, 201, 32, 196, 111, 202, 104, 1, 201, 32, 196, 95, 202, 104, 1, 196,
-    93, 202, 104, 1, 195, 217, 202, 104, 1, 196, 90, 202, 104, 1, 196, 88,
-    202, 104, 1, 196, 113, 202, 104, 1, 201, 32, 196, 113, 202, 104, 1, 250,
-    118, 196, 113, 202, 104, 1, 196, 87, 202, 104, 1, 196, 85, 202, 104, 1,
-    196, 86, 202, 104, 1, 196, 84, 202, 104, 1, 196, 83, 202, 104, 1, 196,
-    123, 202, 104, 1, 196, 81, 202, 104, 1, 196, 79, 202, 104, 1, 196, 78,
-    202, 104, 1, 196, 75, 202, 104, 1, 196, 72, 202, 104, 1, 203, 80, 196,
-    72, 202, 104, 1, 196, 70, 202, 104, 1, 196, 69, 202, 104, 1, 196, 3, 202,
-    104, 73, 1, 223, 72, 78, 202, 104, 207, 91, 78, 202, 104, 108, 225, 124,
-    35, 5, 222, 6, 35, 5, 218, 244, 35, 5, 209, 224, 35, 5, 205, 192, 35, 5,
-    206, 197, 35, 5, 248, 115, 35, 5, 202, 22, 35, 5, 244, 181, 35, 5, 216,
-    43, 35, 5, 215, 72, 35, 5, 233, 152, 214, 190, 35, 5, 195, 10, 35, 5,
-    239, 26, 35, 5, 240, 10, 35, 5, 225, 128, 35, 5, 202, 168, 35, 5, 245,
-    48, 35, 5, 212, 233, 35, 5, 212, 116, 35, 5, 233, 236, 35, 5, 233, 232,
-    35, 5, 233, 233, 35, 5, 233, 234, 35, 5, 205, 80, 35, 5, 205, 34, 35, 5,
-    205, 47, 35, 5, 205, 79, 35, 5, 205, 52, 35, 5, 205, 53, 35, 5, 205, 39,
-    35, 5, 247, 80, 35, 5, 247, 59, 35, 5, 247, 61, 35, 5, 247, 79, 35, 5,
-    247, 77, 35, 5, 247, 78, 35, 5, 247, 60, 35, 5, 194, 228, 35, 5, 194,
-    206, 35, 5, 194, 219, 35, 5, 194, 227, 35, 5, 194, 222, 35, 5, 194, 223,
-    35, 5, 194, 211, 35, 5, 247, 75, 35, 5, 247, 62, 35, 5, 247, 64, 35, 5,
-    247, 74, 35, 5, 247, 72, 35, 5, 247, 73, 35, 5, 247, 63, 35, 5, 211, 44,
-    35, 5, 211, 34, 35, 5, 211, 40, 35, 5, 211, 43, 35, 5, 211, 41, 35, 5,
-    211, 42, 35, 5, 211, 39, 35, 5, 223, 110, 35, 5, 223, 102, 35, 5, 223,
-    105, 35, 5, 223, 109, 35, 5, 223, 106, 35, 5, 223, 107, 35, 5, 223, 103,
-    35, 5, 196, 164, 35, 5, 196, 151, 35, 5, 196, 159, 35, 5, 196, 163, 35,
-    5, 196, 161, 35, 5, 196, 162, 35, 5, 196, 158, 35, 5, 233, 27, 35, 5,
-    233, 17, 35, 5, 233, 20, 35, 5, 233, 26, 35, 5, 233, 22, 35, 5, 233, 23,
-    35, 5, 233, 19, 38, 40, 1, 249, 9, 38, 40, 1, 199, 118, 38, 40, 1, 233,
-    216, 38, 40, 1, 239, 252, 38, 40, 1, 195, 65, 38, 40, 1, 195, 88, 38, 40,
-    1, 155, 38, 40, 1, 237, 7, 38, 40, 1, 236, 241, 38, 40, 1, 236, 230, 38,
-    40, 1, 72, 38, 40, 1, 213, 92, 38, 40, 1, 236, 163, 38, 40, 1, 236, 151,
-    38, 40, 1, 203, 68, 38, 40, 1, 142, 38, 40, 1, 201, 107, 38, 40, 1, 245,
-    103, 38, 40, 1, 207, 50, 38, 40, 1, 207, 2, 38, 40, 1, 235, 103, 38, 40,
-    1, 236, 147, 38, 40, 1, 63, 38, 40, 1, 226, 147, 38, 40, 1, 239, 45, 38,
-    40, 1, 218, 203, 200, 87, 38, 40, 1, 196, 84, 38, 40, 1, 195, 217, 38,
-    40, 1, 226, 5, 63, 38, 40, 1, 222, 47, 195, 182, 38, 40, 1, 248, 171,
-    195, 182, 38, 40, 1, 226, 5, 248, 171, 195, 182, 53, 251, 91, 204, 138,
-    220, 24, 53, 251, 91, 237, 250, 204, 138, 220, 24, 50, 204, 138, 179, 53,
-    204, 138, 179, 50, 237, 250, 204, 138, 179, 53, 237, 250, 204, 138, 179,
-    210, 215, 226, 28, 220, 24, 210, 215, 237, 250, 226, 28, 220, 24, 237,
-    250, 201, 199, 220, 24, 50, 201, 199, 179, 53, 201, 199, 179, 210, 215,
-    205, 94, 50, 210, 215, 214, 121, 179, 53, 210, 215, 214, 121, 179, 237,
-    55, 241, 98, 213, 152, 235, 26, 213, 152, 210, 89, 235, 26, 213, 152,
-    231, 4, 237, 250, 214, 185, 237, 231, 251, 101, 200, 24, 251, 101, 237,
-    250, 210, 17, 251, 90, 52, 214, 182, 231, 7, 226, 17, 226, 26, 213, 207,
-    248, 57, 231, 8, 3, 239, 150, 202, 85, 3, 210, 3, 57, 50, 126, 213, 143,
-    179, 53, 126, 213, 143, 179, 202, 85, 3, 76, 57, 202, 85, 3, 76, 60, 50,
-    83, 249, 80, 3, 211, 73, 53, 83, 249, 80, 3, 211, 73, 201, 243, 50, 157,
-    179, 201, 243, 53, 157, 179, 248, 85, 50, 157, 179, 248, 85, 53, 157,
-    179, 50, 206, 96, 118, 179, 53, 206, 96, 118, 179, 50, 52, 213, 140, 53,
-    52, 213, 140, 99, 238, 251, 127, 97, 76, 211, 213, 97, 76, 127, 99, 238,
-    251, 211, 213, 103, 235, 7, 76, 211, 213, 235, 101, 76, 78, 210, 89, 211,
-    79, 78, 83, 202, 84, 210, 3, 212, 110, 197, 9, 207, 91, 112, 238, 253,
-    163, 244, 159, 210, 215, 238, 253, 210, 215, 244, 159, 163, 207, 105,
-    240, 119, 3, 50, 233, 70, 240, 119, 3, 53, 233, 70, 163, 240, 118, 201,
-    243, 157, 208, 133, 55, 200, 216, 240, 65, 202, 152, 240, 65, 204, 242,
-    234, 217, 204, 226, 83, 206, 29, 238, 250, 197, 56, 83, 222, 75, 247,
-    123, 52, 231, 7, 210, 89, 244, 159, 52, 221, 204, 211, 62, 78, 240, 66,
-    3, 50, 200, 27, 52, 204, 77, 78, 226, 17, 126, 224, 221, 226, 17, 126,
-    224, 222, 3, 224, 222, 57, 126, 224, 221, 126, 224, 222, 3, 238, 253, 52,
-    205, 19, 244, 159, 237, 250, 205, 177, 201, 165, 240, 118, 219, 191, 244,
-    159, 213, 151, 78, 211, 212, 236, 254, 78, 241, 99, 199, 102, 239, 59,
-    12, 44, 210, 119, 12, 44, 244, 214, 12, 44, 208, 136, 100, 12, 44, 208,
-    136, 102, 12, 44, 208, 136, 134, 12, 44, 213, 28, 12, 44, 248, 70, 12,
-    44, 203, 152, 12, 44, 224, 22, 100, 12, 44, 224, 22, 102, 12, 44, 239,
-    56, 12, 44, 208, 140, 12, 44, 4, 100, 12, 44, 4, 102, 12, 44, 222, 244,
-    100, 12, 44, 222, 244, 102, 12, 44, 222, 244, 134, 12, 44, 222, 244, 136,
-    12, 44, 205, 212, 12, 44, 202, 156, 12, 44, 205, 209, 100, 12, 44, 205,
-    209, 102, 12, 44, 232, 127, 100, 12, 44, 232, 127, 102, 12, 44, 232, 209,
-    12, 44, 210, 204, 12, 44, 245, 45, 12, 44, 204, 111, 12, 44, 218, 189,
-    12, 44, 239, 249, 12, 44, 218, 178, 12, 44, 244, 232, 12, 44, 197, 128,
-    100, 12, 44, 197, 128, 102, 12, 44, 235, 118, 12, 44, 213, 105, 100, 12,
-    44, 213, 105, 102, 12, 44, 206, 69, 157, 201, 191, 201, 118, 12, 44, 241,
-    83, 12, 44, 239, 17, 12, 44, 225, 209, 12, 44, 248, 108, 77, 244, 197,
-    12, 44, 236, 67, 12, 44, 205, 118, 100, 12, 44, 205, 118, 102, 12, 44,
-    249, 95, 12, 44, 206, 76, 12, 44, 247, 204, 206, 76, 12, 44, 217, 89,
-    100, 12, 44, 217, 89, 102, 12, 44, 217, 89, 134, 12, 44, 217, 89, 136,
-    12, 44, 219, 150, 12, 44, 206, 249, 12, 44, 210, 210, 12, 44, 236, 97,
-    12, 44, 214, 133, 12, 44, 248, 29, 100, 12, 44, 248, 29, 102, 12, 44,
-    219, 199, 12, 44, 218, 184, 12, 44, 233, 104, 100, 12, 44, 233, 104, 102,
-    12, 44, 233, 104, 134, 12, 44, 202, 102, 12, 44, 244, 196, 12, 44, 197,
-    89, 100, 12, 44, 197, 89, 102, 12, 44, 247, 204, 208, 129, 12, 44, 206,
-    69, 231, 102, 12, 44, 231, 102, 12, 44, 247, 204, 205, 131, 12, 44, 247,
-    204, 206, 244, 12, 44, 235, 37, 12, 44, 247, 204, 247, 99, 12, 44, 206,
-    69, 197, 150, 12, 44, 197, 151, 100, 12, 44, 197, 151, 102, 12, 44, 244,
-    235, 12, 44, 247, 204, 233, 135, 12, 44, 181, 100, 12, 44, 181, 102, 12,
-    44, 247, 204, 221, 240, 12, 44, 247, 204, 234, 74, 12, 44, 218, 173, 100,
-    12, 44, 218, 173, 102, 12, 44, 210, 217, 12, 44, 248, 118, 12, 44, 247,
-    204, 203, 107, 222, 190, 12, 44, 247, 204, 222, 192, 12, 44, 247, 204,
-    197, 50, 12, 44, 247, 204, 235, 55, 12, 44, 237, 66, 100, 12, 44, 237,
-    66, 102, 12, 44, 237, 66, 134, 12, 44, 247, 204, 237, 65, 12, 44, 232,
-    137, 12, 44, 247, 204, 231, 98, 12, 44, 248, 104, 12, 44, 233, 200, 12,
-    44, 247, 204, 235, 111, 12, 44, 247, 204, 248, 156, 12, 44, 247, 204,
-    208, 233, 12, 44, 206, 69, 197, 79, 12, 44, 206, 69, 196, 61, 12, 44,
-    247, 204, 234, 236, 12, 44, 225, 216, 236, 102, 12, 44, 247, 204, 236,
-    102, 12, 44, 225, 216, 201, 244, 12, 44, 247, 204, 201, 244, 12, 44, 225,
-    216, 237, 223, 12, 44, 247, 204, 237, 223, 12, 44, 201, 1, 12, 44, 225,
-    216, 201, 1, 12, 44, 247, 204, 201, 1, 79, 44, 100, 79, 44, 222, 75, 79,
-    44, 238, 253, 79, 44, 205, 248, 79, 44, 208, 135, 79, 44, 122, 79, 44,
-    102, 79, 44, 222, 104, 79, 44, 220, 62, 79, 44, 222, 169, 79, 44, 236,
-    204, 79, 44, 171, 79, 44, 135, 248, 70, 79, 44, 241, 86, 79, 44, 230,
-    201, 79, 44, 203, 152, 79, 44, 192, 248, 70, 79, 44, 224, 21, 79, 44,
-    212, 58, 79, 44, 196, 255, 79, 44, 205, 107, 79, 44, 53, 192, 248, 70,
-    79, 44, 232, 59, 236, 225, 79, 44, 203, 23, 79, 44, 239, 56, 79, 44, 208,
-    140, 79, 44, 244, 214, 79, 44, 212, 8, 79, 44, 251, 216, 79, 44, 218,
-    164, 79, 44, 236, 225, 79, 44, 237, 72, 79, 44, 208, 168, 79, 44, 233,
-    144, 79, 44, 233, 145, 205, 226, 79, 44, 236, 101, 79, 44, 248, 170, 79,
-    44, 197, 21, 79, 44, 245, 66, 79, 44, 209, 205, 79, 44, 226, 82, 79, 44,
-    205, 224, 79, 44, 222, 243, 79, 44, 241, 96, 79, 44, 205, 98, 79, 44,
-    218, 169, 79, 44, 209, 246, 79, 44, 197, 6, 79, 44, 214, 110, 79, 44,
-    201, 9, 79, 44, 237, 203, 79, 44, 206, 182, 202, 156, 79, 44, 237, 250,
-    244, 214, 79, 44, 181, 204, 202, 79, 44, 99, 232, 184, 79, 44, 206, 188,
-    79, 44, 248, 77, 79, 44, 205, 208, 79, 44, 248, 36, 79, 44, 204, 241, 79,
-    44, 232, 126, 79, 44, 232, 226, 79, 44, 239, 1, 79, 44, 232, 209, 79, 44,
-    248, 57, 79, 44, 210, 204, 79, 44, 208, 153, 79, 44, 239, 88, 79, 44,
-    250, 123, 79, 44, 205, 94, 79, 44, 216, 18, 79, 44, 204, 111, 79, 44,
-    208, 180, 79, 44, 218, 189, 79, 44, 201, 190, 79, 44, 223, 68, 79, 44,
-    204, 226, 79, 44, 239, 249, 79, 44, 197, 104, 79, 44, 239, 29, 216, 18,
-    79, 44, 244, 155, 79, 44, 234, 210, 79, 44, 244, 226, 79, 44, 204, 247,
-    79, 44, 197, 127, 79, 44, 235, 118, 79, 44, 244, 222, 79, 44, 235, 196,
-    79, 44, 52, 196, 222, 79, 44, 157, 201, 191, 201, 118, 79, 44, 205, 239,
-    79, 44, 235, 208, 79, 44, 241, 83, 79, 44, 239, 17, 79, 44, 212, 4, 79,
-    44, 225, 209, 79, 44, 219, 173, 79, 44, 202, 83, 79, 44, 204, 58, 79, 44,
-    222, 98, 79, 44, 200, 2, 79, 44, 235, 151, 79, 44, 248, 108, 77, 244,
-    197, 79, 44, 206, 102, 79, 44, 237, 250, 203, 15, 79, 44, 197, 73, 79,
-    44, 206, 1, 79, 44, 239, 75, 79, 44, 236, 67, 79, 44, 205, 134, 79, 44,
-    51, 79, 44, 204, 228, 79, 44, 205, 117, 79, 44, 201, 216, 79, 44, 233,
-    113, 79, 44, 247, 85, 79, 44, 205, 12, 79, 44, 249, 95, 79, 44, 210, 60,
-    79, 44, 206, 76, 79, 44, 225, 201, 79, 44, 217, 88, 79, 44, 206, 249, 79,
-    44, 235, 184, 79, 44, 214, 133, 79, 44, 251, 100, 79, 44, 212, 132, 79,
-    44, 237, 76, 79, 44, 248, 28, 79, 44, 219, 199, 79, 44, 219, 17, 79, 44,
-    207, 112, 79, 44, 250, 221, 79, 44, 218, 184, 79, 44, 201, 249, 79, 44,
-    214, 80, 79, 44, 248, 112, 79, 44, 204, 224, 79, 44, 244, 167, 79, 44,
-    233, 103, 79, 44, 202, 102, 79, 44, 226, 45, 79, 44, 248, 124, 79, 44,
-    197, 151, 236, 225, 79, 44, 244, 196, 79, 44, 197, 88, 79, 44, 208, 129,
-    79, 44, 231, 102, 79, 44, 205, 131, 79, 44, 199, 144, 79, 44, 249, 4, 79,
-    44, 212, 184, 79, 44, 249, 125, 79, 44, 206, 244, 79, 44, 210, 157, 79,
-    44, 209, 117, 79, 44, 235, 37, 79, 44, 248, 110, 79, 44, 247, 99, 79, 44,
-    248, 141, 79, 44, 218, 186, 79, 44, 197, 150, 79, 44, 244, 235, 79, 44,
-    197, 46, 79, 44, 239, 67, 79, 44, 199, 17, 79, 44, 233, 135, 79, 44, 221,
-    240, 79, 44, 234, 74, 79, 44, 218, 172, 79, 44, 205, 247, 79, 44, 206,
-    182, 203, 134, 248, 156, 79, 44, 210, 217, 79, 44, 248, 118, 79, 44, 196,
-    245, 79, 44, 235, 233, 79, 44, 222, 190, 79, 44, 203, 107, 222, 190, 79,
-    44, 222, 186, 79, 44, 205, 161, 79, 44, 222, 192, 79, 44, 197, 50, 79,
-    44, 235, 55, 79, 44, 237, 65, 79, 44, 232, 137, 79, 44, 234, 252, 79, 44,
-    231, 98, 79, 44, 248, 104, 79, 44, 203, 119, 79, 44, 232, 233, 79, 44,
-    235, 144, 79, 44, 209, 10, 197, 46, 79, 44, 247, 87, 79, 44, 233, 200,
-    79, 44, 235, 111, 79, 44, 248, 156, 79, 44, 208, 233, 79, 44, 239, 234,
-    79, 44, 197, 79, 79, 44, 232, 102, 79, 44, 196, 61, 79, 44, 219, 28, 79,
-    44, 248, 136, 79, 44, 236, 237, 79, 44, 234, 236, 79, 44, 201, 162, 79,
-    44, 237, 206, 79, 44, 210, 198, 79, 44, 216, 20, 79, 44, 236, 102, 79,
-    44, 201, 244, 79, 44, 237, 223, 79, 44, 201, 1, 79, 44, 235, 58, 143,
-    239, 193, 190, 50, 202, 30, 210, 22, 143, 239, 193, 190, 90, 202, 30, 60,
-    143, 239, 193, 190, 50, 202, 30, 112, 26, 210, 22, 143, 239, 193, 190,
-    90, 202, 30, 112, 26, 60, 143, 239, 193, 190, 234, 217, 204, 81, 143,
-    239, 193, 190, 204, 82, 234, 235, 57, 143, 239, 193, 190, 204, 82, 234,
-    235, 60, 143, 239, 193, 190, 204, 82, 234, 235, 222, 184, 143, 239, 193,
-    190, 204, 82, 234, 235, 200, 33, 222, 184, 143, 239, 193, 190, 204, 82,
-    234, 235, 200, 33, 210, 22, 143, 239, 193, 190, 204, 82, 234, 235, 221,
-    203, 222, 184, 143, 239, 193, 190, 214, 24, 143, 205, 148, 143, 244, 159,
-    143, 234, 217, 204, 226, 239, 64, 78, 225, 202, 226, 65, 205, 11, 105,
-    143, 225, 232, 78, 143, 244, 199, 78, 143, 31, 195, 79, 50, 251, 91, 179,
-    53, 251, 91, 179, 50, 52, 251, 91, 179, 53, 52, 251, 91, 179, 50, 241,
-    102, 179, 53, 241, 102, 179, 50, 59, 241, 102, 179, 53, 59, 241, 102,
-    179, 50, 58, 222, 147, 179, 53, 58, 222, 147, 179, 212, 72, 78, 234, 13,
-    78, 50, 201, 231, 206, 245, 179, 53, 201, 231, 206, 245, 179, 50, 59,
-    222, 147, 179, 53, 59, 222, 147, 179, 50, 59, 201, 231, 206, 245, 179,
-    53, 59, 201, 231, 206, 245, 179, 50, 59, 47, 179, 53, 59, 47, 179, 197,
-    123, 240, 65, 210, 89, 52, 212, 20, 211, 62, 78, 52, 212, 20, 211, 62,
-    78, 126, 52, 212, 20, 211, 62, 78, 212, 72, 117, 235, 233, 232, 181, 215,
-    142, 100, 232, 181, 215, 142, 102, 232, 181, 215, 142, 134, 232, 181,
-    215, 142, 136, 232, 181, 215, 142, 146, 232, 181, 215, 142, 167, 232,
-    181, 215, 142, 178, 232, 181, 215, 142, 171, 232, 181, 215, 142, 182,
-    143, 222, 128, 152, 78, 143, 209, 250, 152, 78, 143, 239, 202, 152, 78,
-    143, 236, 203, 152, 78, 29, 206, 62, 76, 152, 78, 29, 52, 76, 152, 78,
-    197, 119, 240, 65, 83, 225, 16, 210, 120, 78, 83, 225, 16, 210, 120, 3,
-    198, 244, 205, 162, 78, 83, 225, 16, 210, 120, 117, 200, 33, 232, 225,
-    83, 225, 16, 210, 120, 3, 198, 244, 205, 162, 117, 200, 33, 232, 225, 83,
-    225, 16, 210, 120, 117, 221, 203, 232, 225, 46, 212, 72, 78, 143, 203,
-    36, 222, 76, 235, 181, 207, 91, 105, 232, 181, 215, 142, 203, 23, 232,
-    181, 215, 142, 200, 234, 232, 181, 215, 142, 202, 177, 83, 143, 225, 232,
-    78, 220, 5, 78, 213, 134, 251, 127, 78, 143, 62, 226, 68, 143, 157, 235,
-    137, 205, 148, 188, 1, 4, 63, 188, 1, 63, 188, 1, 4, 68, 188, 1, 68, 188,
-    1, 4, 66, 188, 1, 66, 188, 1, 4, 69, 188, 1, 69, 188, 1, 4, 72, 188, 1,
-    72, 188, 1, 155, 188, 1, 234, 123, 188, 1, 224, 101, 188, 1, 233, 192,
-    188, 1, 223, 187, 188, 1, 233, 76, 188, 1, 224, 209, 188, 1, 234, 48,
-    188, 1, 224, 11, 188, 1, 233, 144, 188, 1, 183, 188, 1, 195, 115, 188, 1,
-    206, 112, 188, 1, 195, 33, 188, 1, 204, 172, 188, 1, 194, 255, 188, 1,
-    208, 147, 188, 1, 195, 88, 188, 1, 205, 200, 188, 1, 195, 11, 188, 1,
-    189, 188, 1, 240, 136, 188, 1, 202, 122, 188, 1, 239, 152, 188, 1, 4,
-    201, 40, 188, 1, 201, 40, 188, 1, 237, 201, 188, 1, 203, 68, 188, 1, 239,
-    252, 188, 1, 149, 188, 1, 239, 28, 188, 1, 176, 188, 1, 216, 223, 188, 1,
-    215, 186, 188, 1, 217, 118, 188, 1, 216, 50, 188, 1, 142, 188, 1, 249,
-    145, 188, 1, 161, 188, 1, 232, 71, 188, 1, 248, 184, 188, 1, 212, 220,
-    188, 1, 231, 75, 188, 1, 248, 21, 188, 1, 211, 227, 188, 1, 232, 147,
-    188, 1, 249, 9, 188, 1, 213, 92, 188, 1, 231, 193, 188, 1, 248, 116, 188,
-    1, 212, 117, 188, 1, 166, 188, 1, 219, 78, 188, 1, 218, 145, 188, 1, 219,
-    207, 188, 1, 218, 251, 188, 1, 4, 164, 188, 1, 164, 188, 1, 4, 195, 217,
-    188, 1, 195, 217, 188, 1, 4, 196, 3, 188, 1, 196, 3, 188, 1, 169, 188, 1,
-    210, 72, 188, 1, 209, 140, 188, 1, 210, 183, 188, 1, 209, 232, 188, 1, 4,
-    197, 166, 188, 1, 197, 166, 188, 1, 197, 70, 188, 1, 197, 109, 188, 1,
-    197, 34, 188, 1, 218, 55, 188, 1, 197, 220, 188, 1, 4, 155, 188, 1, 4,
-    224, 209, 38, 224, 234, 198, 244, 205, 162, 78, 38, 224, 234, 207, 110,
-    205, 162, 78, 224, 234, 198, 244, 205, 162, 78, 224, 234, 207, 110, 205,
-    162, 78, 188, 225, 232, 78, 188, 198, 244, 225, 232, 78, 188, 239, 111,
-    195, 233, 224, 234, 52, 231, 7, 71, 1, 4, 63, 71, 1, 63, 71, 1, 4, 68,
-    71, 1, 68, 71, 1, 4, 66, 71, 1, 66, 71, 1, 4, 69, 71, 1, 69, 71, 1, 4,
-    72, 71, 1, 72, 71, 1, 155, 71, 1, 234, 123, 71, 1, 224, 101, 71, 1, 233,
-    192, 71, 1, 223, 187, 71, 1, 233, 76, 71, 1, 224, 209, 71, 1, 234, 48,
-    71, 1, 224, 11, 71, 1, 233, 144, 71, 1, 183, 71, 1, 195, 115, 71, 1, 206,
-    112, 71, 1, 195, 33, 71, 1, 204, 172, 71, 1, 194, 255, 71, 1, 208, 147,
-    71, 1, 195, 88, 71, 1, 205, 200, 71, 1, 195, 11, 71, 1, 189, 71, 1, 240,
-    136, 71, 1, 202, 122, 71, 1, 239, 152, 71, 1, 4, 201, 40, 71, 1, 201, 40,
-    71, 1, 237, 201, 71, 1, 203, 68, 71, 1, 239, 252, 71, 1, 149, 71, 1, 239,
-    28, 71, 1, 176, 71, 1, 216, 223, 71, 1, 215, 186, 71, 1, 217, 118, 71, 1,
-    216, 50, 71, 1, 142, 71, 1, 249, 145, 71, 1, 161, 71, 1, 232, 71, 71, 1,
-    248, 184, 71, 1, 212, 220, 71, 1, 231, 75, 71, 1, 248, 21, 71, 1, 211,
-    227, 71, 1, 232, 147, 71, 1, 249, 9, 71, 1, 213, 92, 71, 1, 231, 193, 71,
-    1, 248, 116, 71, 1, 212, 117, 71, 1, 166, 71, 1, 219, 78, 71, 1, 218,
-    145, 71, 1, 219, 207, 71, 1, 218, 251, 71, 1, 4, 164, 71, 1, 164, 71, 1,
-    4, 195, 217, 71, 1, 195, 217, 71, 1, 4, 196, 3, 71, 1, 196, 3, 71, 1,
-    169, 71, 1, 210, 72, 71, 1, 209, 140, 71, 1, 210, 183, 71, 1, 209, 232,
-    71, 1, 4, 197, 166, 71, 1, 197, 166, 71, 1, 197, 70, 71, 1, 197, 109, 71,
-    1, 197, 34, 71, 1, 218, 55, 71, 1, 197, 220, 71, 1, 4, 155, 71, 1, 4,
-    224, 209, 71, 1, 199, 152, 71, 1, 199, 34, 71, 1, 199, 118, 71, 1, 198,
-    248, 71, 112, 238, 253, 224, 234, 211, 252, 205, 162, 78, 71, 225, 232,
-    78, 71, 198, 244, 225, 232, 78, 71, 239, 111, 223, 229, 248, 94, 1, 250,
-    112, 248, 94, 1, 214, 3, 248, 94, 1, 221, 136, 248, 94, 1, 236, 49, 248,
-    94, 1, 240, 231, 248, 94, 1, 203, 216, 248, 94, 1, 218, 55, 248, 94, 1,
-    159, 248, 94, 1, 234, 190, 248, 94, 1, 225, 80, 248, 94, 1, 233, 15, 248,
-    94, 1, 225, 217, 248, 94, 1, 211, 167, 248, 94, 1, 196, 222, 248, 94, 1,
-    195, 75, 248, 94, 1, 247, 18, 248, 94, 1, 207, 52, 248, 94, 1, 144, 248,
-    94, 1, 195, 158, 248, 94, 1, 247, 207, 248, 94, 1, 209, 80, 248, 94, 1,
-    63, 248, 94, 1, 72, 248, 94, 1, 69, 248, 94, 1, 237, 40, 248, 94, 1, 251,
-    200, 248, 94, 1, 237, 33, 248, 94, 1, 250, 150, 248, 94, 1, 214, 39, 248,
-    94, 1, 251, 106, 248, 94, 1, 236, 230, 248, 94, 1, 251, 97, 248, 94, 1,
-    236, 215, 248, 94, 1, 236, 163, 248, 94, 1, 68, 248, 94, 1, 66, 248, 94,
-    1, 225, 230, 248, 94, 1, 199, 230, 248, 94, 1, 217, 73, 248, 94, 1, 233,
-    148, 248, 94, 1, 226, 121, 248, 94, 1, 177, 3, 76, 57, 248, 94, 1, 216,
-    87, 29, 1, 224, 48, 29, 1, 205, 72, 29, 1, 224, 41, 29, 1, 216, 208, 29,
-    1, 216, 206, 29, 1, 216, 205, 29, 1, 202, 97, 29, 1, 205, 61, 29, 1, 210,
-    54, 29, 1, 210, 49, 29, 1, 210, 46, 29, 1, 210, 39, 29, 1, 210, 34, 29,
-    1, 210, 29, 29, 1, 210, 40, 29, 1, 210, 52, 29, 1, 219, 56, 29, 1, 212,
-    206, 29, 1, 205, 69, 29, 1, 212, 195, 29, 1, 206, 52, 29, 1, 205, 66, 29,
-    1, 226, 143, 29, 1, 245, 6, 29, 1, 205, 76, 29, 1, 245, 71, 29, 1, 224,
-    122, 29, 1, 202, 191, 29, 1, 212, 244, 29, 1, 232, 55, 29, 1, 63, 29, 1,
-    251, 245, 29, 1, 164, 29, 1, 196, 118, 29, 1, 236, 192, 29, 1, 69, 29, 1,
-    196, 56, 29, 1, 196, 69, 29, 1, 72, 29, 1, 197, 166, 29, 1, 197, 157, 29,
-    1, 214, 164, 29, 1, 196, 3, 29, 1, 66, 29, 1, 197, 91, 29, 1, 197, 109,
-    29, 1, 197, 70, 29, 1, 195, 217, 29, 1, 236, 116, 29, 1, 196, 24, 29, 1,
-    68, 29, 235, 134, 29, 1, 205, 70, 29, 1, 216, 198, 29, 1, 216, 200, 29,
-    1, 216, 203, 29, 1, 210, 47, 29, 1, 210, 28, 29, 1, 210, 36, 29, 1, 210,
-    41, 29, 1, 210, 26, 29, 1, 219, 49, 29, 1, 219, 46, 29, 1, 219, 50, 29,
-    1, 225, 1, 29, 1, 212, 201, 29, 1, 212, 187, 29, 1, 212, 193, 29, 1, 212,
-    190, 29, 1, 212, 204, 29, 1, 212, 188, 29, 1, 224, 255, 29, 1, 224, 253,
-    29, 1, 206, 45, 29, 1, 206, 43, 29, 1, 206, 35, 29, 1, 206, 40, 29, 1,
-    206, 50, 29, 1, 213, 174, 29, 1, 205, 73, 29, 1, 196, 46, 29, 1, 196, 40,
-    29, 1, 196, 41, 29, 1, 225, 0, 29, 1, 205, 74, 29, 1, 196, 52, 29, 1,
-    195, 247, 29, 1, 195, 246, 29, 1, 195, 249, 29, 1, 195, 204, 29, 1, 195,
-    205, 29, 1, 195, 208, 29, 1, 251, 6, 29, 1, 251, 0, 143, 251, 76, 222,
-    64, 78, 143, 251, 76, 210, 90, 78, 143, 251, 76, 97, 78, 143, 251, 76,
-    99, 78, 143, 251, 76, 115, 78, 143, 251, 76, 235, 7, 78, 143, 251, 76,
-    201, 243, 78, 143, 251, 76, 112, 78, 143, 251, 76, 248, 85, 78, 143, 251,
-    76, 235, 113, 78, 143, 251, 76, 208, 136, 78, 143, 251, 76, 202, 185, 78,
-    143, 251, 76, 235, 0, 78, 143, 251, 76, 232, 123, 78, 143, 251, 76, 237,
-    73, 78, 143, 251, 76, 220, 63, 78, 248, 94, 1, 248, 21, 248, 94, 1, 195,
-    33, 248, 94, 1, 225, 172, 248, 94, 1, 233, 76, 248, 94, 1, 237, 54, 248,
-    94, 1, 236, 212, 248, 94, 1, 214, 102, 248, 94, 1, 214, 106, 248, 94, 1,
-    226, 1, 248, 94, 1, 251, 78, 248, 94, 1, 226, 52, 248, 94, 1, 200, 42,
-    248, 94, 1, 226, 103, 248, 94, 1, 217, 51, 248, 94, 1, 251, 193, 248, 94,
-    1, 250, 145, 248, 94, 1, 251, 123, 248, 94, 1, 214, 127, 248, 94, 1, 214,
-    109, 248, 94, 1, 226, 49, 248, 94, 48, 1, 214, 3, 248, 94, 48, 1, 203,
-    216, 248, 94, 48, 1, 225, 80, 248, 94, 48, 1, 233, 15, 248, 94, 1, 233,
-    231, 248, 94, 1, 222, 123, 248, 94, 1, 194, 235, 12, 204, 196, 203, 216,
-    12, 204, 196, 197, 82, 12, 204, 196, 196, 197, 12, 204, 196, 247, 220,
-    12, 204, 196, 204, 68, 12, 204, 196, 230, 253, 12, 204, 196, 231, 1, 12,
-    204, 196, 231, 84, 12, 204, 196, 230, 254, 12, 204, 196, 203, 219, 12,
-    204, 196, 231, 0, 12, 204, 196, 230, 252, 12, 204, 196, 231, 82, 12, 204,
-    196, 230, 255, 12, 204, 196, 230, 251, 12, 204, 196, 218, 55, 12, 204,
-    196, 233, 15, 12, 204, 196, 209, 80, 12, 204, 196, 214, 3, 12, 204, 196,
-    205, 151, 12, 204, 196, 240, 231, 12, 204, 196, 231, 2, 12, 204, 196,
-    232, 81, 12, 204, 196, 203, 228, 12, 204, 196, 204, 45, 12, 204, 196,
-    205, 23, 12, 204, 196, 207, 58, 12, 204, 196, 213, 96, 12, 204, 196, 211,
-    169, 12, 204, 196, 202, 31, 12, 204, 196, 203, 218, 12, 204, 196, 204,
-    57, 12, 204, 196, 231, 12, 12, 204, 196, 230, 250, 12, 204, 196, 213, 8,
-    12, 204, 196, 211, 167, 71, 1, 4, 223, 187, 71, 1, 4, 206, 112, 71, 1, 4,
-    204, 172, 71, 1, 4, 149, 71, 1, 4, 215, 186, 71, 1, 4, 142, 71, 1, 4,
-    232, 71, 71, 1, 4, 231, 75, 71, 1, 4, 232, 147, 71, 1, 4, 231, 193, 71,
-    1, 4, 218, 145, 71, 1, 4, 169, 71, 1, 4, 210, 72, 71, 1, 4, 209, 140, 71,
-    1, 4, 210, 183, 71, 1, 4, 209, 232, 119, 29, 224, 48, 119, 29, 216, 208,
-    119, 29, 202, 97, 119, 29, 210, 54, 119, 29, 219, 56, 119, 29, 212, 206,
-    119, 29, 206, 52, 119, 29, 226, 143, 119, 29, 245, 6, 119, 29, 245, 71,
-    119, 29, 224, 122, 119, 29, 202, 191, 119, 29, 212, 244, 119, 29, 232,
-    55, 119, 29, 224, 49, 63, 119, 29, 216, 209, 63, 119, 29, 202, 98, 63,
-    119, 29, 210, 55, 63, 119, 29, 219, 57, 63, 119, 29, 212, 207, 63, 119,
-    29, 206, 53, 63, 119, 29, 226, 144, 63, 119, 29, 245, 7, 63, 119, 29,
-    245, 72, 63, 119, 29, 224, 123, 63, 119, 29, 202, 192, 63, 119, 29, 212,
-    245, 63, 119, 29, 232, 56, 63, 119, 29, 245, 7, 66, 119, 223, 233, 190,
-    214, 142, 119, 223, 233, 190, 177, 231, 75, 119, 230, 191, 100, 119, 230,
-    191, 102, 119, 230, 191, 134, 119, 230, 191, 136, 119, 230, 191, 146,
-    119, 230, 191, 167, 119, 230, 191, 178, 119, 230, 191, 171, 119, 230,
-    191, 182, 119, 230, 191, 203, 23, 119, 230, 191, 218, 189, 119, 230, 191,
-    235, 118, 119, 230, 191, 197, 127, 119, 230, 191, 197, 14, 119, 230, 191,
-    219, 143, 119, 230, 191, 237, 72, 119, 230, 191, 204, 111, 119, 230, 191,
-    204, 229, 119, 230, 191, 232, 156, 119, 230, 191, 205, 189, 119, 230,
-    191, 217, 222, 119, 230, 191, 205, 133, 119, 230, 191, 235, 129, 119,
-    230, 191, 241, 148, 119, 230, 191, 223, 71, 119, 230, 191, 210, 113, 119,
-    230, 191, 247, 152, 119, 230, 191, 204, 178, 119, 230, 191, 204, 91, 119,
-    230, 191, 236, 202, 119, 230, 191, 210, 103, 119, 230, 191, 251, 142,
-    119, 230, 191, 235, 161, 119, 230, 191, 210, 101, 119, 230, 191, 207,
-    112, 119, 230, 191, 210, 178, 46, 230, 191, 211, 78, 46, 230, 191, 224,
-    75, 46, 230, 191, 208, 166, 46, 230, 191, 223, 229, 46, 31, 203, 24, 214,
-    120, 58, 205, 94, 46, 31, 200, 235, 214, 120, 58, 205, 94, 46, 31, 202,
-    178, 214, 120, 58, 205, 94, 46, 31, 235, 15, 214, 120, 58, 205, 94, 46,
-    31, 235, 146, 214, 120, 58, 205, 94, 46, 31, 206, 14, 214, 120, 58, 205,
-    94, 46, 31, 207, 66, 214, 120, 58, 205, 94, 46, 31, 237, 21, 214, 120,
-    58, 205, 94, 213, 130, 55, 46, 31, 200, 235, 100, 46, 31, 200, 235, 102,
-    46, 31, 200, 235, 134, 46, 31, 200, 235, 136, 46, 31, 200, 235, 146, 46,
-    31, 200, 235, 167, 46, 31, 200, 235, 178, 46, 31, 200, 235, 171, 46, 31,
-    200, 235, 182, 46, 31, 202, 177, 46, 31, 202, 178, 100, 46, 31, 202, 178,
-    102, 46, 31, 202, 178, 134, 46, 31, 202, 178, 136, 46, 31, 202, 178, 146,
-    46, 29, 224, 48, 46, 29, 216, 208, 46, 29, 202, 97, 46, 29, 210, 54, 46,
-    29, 219, 56, 46, 29, 212, 206, 46, 29, 206, 52, 46, 29, 226, 143, 46, 29,
-    245, 6, 46, 29, 245, 71, 46, 29, 224, 122, 46, 29, 202, 191, 46, 29, 212,
-    244, 46, 29, 232, 55, 46, 29, 224, 49, 63, 46, 29, 216, 209, 63, 46, 29,
-    202, 98, 63, 46, 29, 210, 55, 63, 46, 29, 219, 57, 63, 46, 29, 212, 207,
-    63, 46, 29, 206, 53, 63, 46, 29, 226, 144, 63, 46, 29, 245, 7, 63, 46,
-    29, 245, 72, 63, 46, 29, 224, 123, 63, 46, 29, 202, 192, 63, 46, 29, 212,
-    245, 63, 46, 29, 232, 56, 63, 46, 223, 233, 190, 247, 6, 46, 223, 233,
-    190, 225, 106, 46, 29, 226, 144, 66, 223, 233, 205, 11, 105, 46, 230,
-    191, 100, 46, 230, 191, 102, 46, 230, 191, 134, 46, 230, 191, 136, 46,
-    230, 191, 146, 46, 230, 191, 167, 46, 230, 191, 178, 46, 230, 191, 171,
-    46, 230, 191, 182, 46, 230, 191, 203, 23, 46, 230, 191, 218, 189, 46,
-    230, 191, 235, 118, 46, 230, 191, 197, 127, 46, 230, 191, 197, 14, 46,
-    230, 191, 219, 143, 46, 230, 191, 237, 72, 46, 230, 191, 204, 111, 46,
-    230, 191, 204, 229, 46, 230, 191, 232, 156, 46, 230, 191, 205, 189, 46,
-    230, 191, 217, 222, 46, 230, 191, 205, 133, 46, 230, 191, 235, 129, 46,
-    230, 191, 241, 148, 46, 230, 191, 223, 71, 46, 230, 191, 208, 134, 46,
-    230, 191, 220, 66, 46, 230, 191, 235, 171, 46, 230, 191, 204, 123, 46,
-    230, 191, 236, 94, 46, 230, 191, 212, 15, 46, 230, 191, 250, 154, 46,
-    230, 191, 225, 233, 46, 230, 191, 210, 101, 46, 230, 191, 241, 107, 46,
-    230, 191, 241, 95, 46, 230, 191, 232, 48, 46, 230, 191, 247, 36, 46, 230,
-    191, 221, 208, 46, 230, 191, 222, 184, 46, 230, 191, 210, 22, 46, 230,
-    191, 219, 192, 46, 230, 191, 210, 131, 46, 230, 191, 204, 178, 46, 230,
-    191, 204, 91, 46, 230, 191, 236, 202, 46, 230, 191, 210, 103, 46, 230,
-    191, 251, 142, 46, 230, 191, 216, 194, 46, 31, 202, 178, 167, 46, 31,
-    202, 178, 178, 46, 31, 202, 178, 171, 46, 31, 202, 178, 182, 46, 31, 235,
-    14, 46, 31, 235, 15, 100, 46, 31, 235, 15, 102, 46, 31, 235, 15, 134, 46,
-    31, 235, 15, 136, 46, 31, 235, 15, 146, 46, 31, 235, 15, 167, 46, 31,
-    235, 15, 178, 46, 31, 235, 15, 171, 46, 31, 235, 15, 182, 46, 31, 235,
-    145, 143, 203, 36, 16, 36, 225, 204, 143, 203, 36, 16, 36, 235, 183, 143,
-    203, 36, 16, 36, 220, 31, 143, 203, 36, 16, 36, 251, 20, 143, 203, 36,
-    16, 36, 219, 251, 143, 203, 36, 16, 36, 225, 103, 143, 203, 36, 16, 36,
-    225, 104, 143, 203, 36, 16, 36, 250, 146, 143, 203, 36, 16, 36, 207, 89,
-    143, 203, 36, 16, 36, 214, 170, 143, 203, 36, 16, 36, 216, 6, 143, 203,
-    36, 16, 36, 239, 246, 47, 232, 81, 47, 236, 159, 47, 236, 104, 222, 81,
-    222, 108, 55, 46, 71, 63, 46, 71, 68, 46, 71, 66, 46, 71, 69, 46, 71, 72,
-    46, 71, 155, 46, 71, 224, 101, 46, 71, 223, 187, 46, 71, 224, 209, 46,
-    71, 224, 11, 46, 71, 183, 46, 71, 206, 112, 46, 71, 204, 172, 46, 71,
-    208, 147, 46, 71, 205, 200, 46, 71, 189, 46, 71, 202, 122, 46, 71, 201,
-    40, 46, 71, 203, 68, 46, 71, 149, 46, 71, 176, 46, 71, 216, 223, 46, 71,
-    215, 186, 46, 71, 217, 118, 46, 71, 216, 50, 46, 71, 142, 46, 71, 232,
-    71, 46, 71, 231, 75, 46, 71, 232, 147, 46, 71, 231, 193, 46, 71, 166, 46,
-    71, 219, 78, 46, 71, 218, 145, 46, 71, 219, 207, 46, 71, 218, 251, 46,
-    71, 164, 46, 71, 195, 217, 46, 71, 196, 3, 46, 71, 169, 46, 71, 210, 72,
-    46, 71, 209, 140, 46, 71, 210, 183, 46, 71, 209, 232, 46, 71, 197, 166,
-    46, 71, 197, 70, 46, 71, 197, 109, 46, 71, 197, 34, 47, 236, 162, 217,
-    223, 210, 139, 47, 251, 45, 47, 250, 204, 47, 251, 72, 47, 252, 125, 47,
-    226, 54, 47, 226, 21, 47, 200, 39, 47, 236, 131, 47, 237, 51, 47, 214,
-    105, 47, 214, 98, 47, 225, 29, 47, 224, 249, 47, 224, 244, 47, 234, 78,
-    47, 234, 88, 47, 233, 180, 47, 233, 176, 47, 223, 101, 47, 233, 167, 47,
-    224, 66, 47, 224, 65, 47, 224, 64, 47, 224, 63, 47, 233, 44, 47, 233, 43,
-    47, 223, 150, 47, 223, 153, 47, 224, 196, 47, 223, 231, 47, 223, 239, 47,
-    208, 252, 47, 208, 210, 47, 206, 33, 47, 207, 95, 47, 207, 94, 47, 240,
-    132, 47, 239, 189, 47, 238, 254, 47, 202, 13, 47, 217, 216, 47, 216, 7,
-    47, 232, 230, 47, 213, 237, 47, 213, 236, 47, 249, 142, 47, 212, 217, 47,
-    212, 180, 47, 212, 181, 47, 248, 152, 47, 231, 70, 47, 231, 65, 47, 247,
-    235, 47, 231, 49, 47, 232, 109, 47, 213, 19, 47, 213, 60, 47, 232, 90,
-    47, 213, 56, 47, 213, 74, 47, 248, 246, 47, 212, 106, 47, 248, 90, 47,
-    231, 169, 47, 212, 92, 47, 231, 160, 47, 231, 162, 47, 220, 79, 47, 220,
-    75, 47, 220, 84, 47, 220, 17, 47, 220, 48, 47, 219, 35, 47, 219, 10, 47,
-    219, 9, 47, 219, 180, 47, 219, 177, 47, 219, 181, 47, 196, 128, 47, 196,
-    126, 47, 195, 202, 47, 209, 248, 47, 209, 252, 47, 209, 107, 47, 209,
-    100, 47, 210, 128, 47, 210, 125, 47, 197, 125, 143, 203, 36, 16, 36, 231,
-    92, 195, 79, 143, 203, 36, 16, 36, 231, 92, 100, 143, 203, 36, 16, 36,
-    231, 92, 102, 143, 203, 36, 16, 36, 231, 92, 134, 143, 203, 36, 16, 36,
-    231, 92, 136, 143, 203, 36, 16, 36, 231, 92, 146, 143, 203, 36, 16, 36,
-    231, 92, 167, 143, 203, 36, 16, 36, 231, 92, 178, 143, 203, 36, 16, 36,
-    231, 92, 171, 143, 203, 36, 16, 36, 231, 92, 182, 143, 203, 36, 16, 36,
-    231, 92, 203, 23, 143, 203, 36, 16, 36, 231, 92, 236, 252, 143, 203, 36,
-    16, 36, 231, 92, 200, 239, 143, 203, 36, 16, 36, 231, 92, 202, 179, 143,
-    203, 36, 16, 36, 231, 92, 235, 1, 143, 203, 36, 16, 36, 231, 92, 235,
-    149, 143, 203, 36, 16, 36, 231, 92, 206, 23, 143, 203, 36, 16, 36, 231,
-    92, 207, 68, 143, 203, 36, 16, 36, 231, 92, 237, 28, 143, 203, 36, 16,
-    36, 231, 92, 216, 176, 143, 203, 36, 16, 36, 231, 92, 200, 234, 143, 203,
-    36, 16, 36, 231, 92, 200, 227, 143, 203, 36, 16, 36, 231, 92, 200, 222,
-    143, 203, 36, 16, 36, 231, 92, 200, 224, 143, 203, 36, 16, 36, 231, 92,
-    200, 229, 47, 231, 83, 47, 240, 136, 47, 250, 150, 47, 154, 47, 214, 29,
-    47, 213, 97, 47, 239, 31, 47, 239, 32, 205, 93, 47, 239, 32, 241, 35, 47,
-    225, 230, 47, 236, 162, 217, 223, 232, 110, 47, 236, 162, 217, 223, 203,
-    239, 47, 236, 162, 217, 223, 203, 132, 47, 236, 162, 217, 223, 219, 176,
-    47, 241, 97, 47, 213, 244, 251, 109, 47, 176, 47, 218, 146, 63, 47, 166,
-    47, 155, 47, 224, 212, 47, 219, 246, 47, 234, 66, 47, 247, 158, 47, 224,
-    211, 47, 213, 9, 47, 217, 75, 47, 218, 146, 236, 49, 47, 218, 146, 234,
-    190, 47, 219, 119, 47, 224, 148, 47, 231, 2, 47, 224, 103, 47, 219, 80,
-    47, 233, 194, 47, 202, 124, 47, 218, 146, 159, 47, 219, 3, 47, 239, 41,
-    47, 224, 30, 47, 235, 53, 47, 216, 88, 47, 218, 146, 221, 136, 47, 219,
-    0, 47, 244, 183, 47, 224, 24, 47, 219, 1, 205, 93, 47, 244, 184, 205, 93,
-    47, 221, 137, 205, 93, 47, 224, 25, 205, 93, 47, 219, 1, 241, 35, 47,
-    244, 184, 241, 35, 47, 221, 137, 241, 35, 47, 224, 25, 241, 35, 47, 221,
-    137, 127, 209, 80, 47, 221, 137, 127, 209, 81, 205, 93, 47, 161, 47, 223,
-    223, 47, 218, 151, 47, 233, 118, 47, 210, 234, 47, 210, 235, 127, 209,
-    80, 47, 210, 235, 127, 209, 81, 205, 93, 47, 211, 240, 47, 215, 227, 47,
-    218, 146, 209, 80, 47, 218, 148, 47, 211, 187, 47, 215, 120, 47, 218,
-    146, 199, 230, 47, 218, 79, 47, 223, 139, 47, 218, 80, 219, 180, 47, 211,
-    186, 47, 215, 119, 47, 218, 146, 197, 199, 47, 218, 73, 47, 223, 137, 47,
-    218, 74, 219, 180, 47, 225, 81, 214, 147, 47, 221, 137, 214, 147, 47,
-    251, 123, 47, 248, 65, 47, 247, 81, 47, 247, 58, 47, 247, 208, 127, 224,
-    148, 47, 244, 182, 47, 240, 50, 47, 233, 28, 47, 142, 47, 231, 84, 47,
-    226, 86, 47, 224, 37, 47, 224, 25, 247, 124, 47, 223, 189, 47, 222, 10,
-    47, 222, 9, 47, 221, 250, 47, 221, 152, 47, 219, 247, 205, 224, 47, 219,
-    34, 47, 218, 217, 47, 213, 7, 47, 212, 120, 47, 212, 53, 47, 212, 51, 47,
-    205, 84, 47, 204, 72, 47, 197, 111, 47, 199, 231, 127, 221, 136, 47, 39,
-    127, 221, 136, 143, 203, 36, 16, 36, 240, 54, 100, 143, 203, 36, 16, 36,
-    240, 54, 102, 143, 203, 36, 16, 36, 240, 54, 134, 143, 203, 36, 16, 36,
-    240, 54, 136, 143, 203, 36, 16, 36, 240, 54, 146, 143, 203, 36, 16, 36,
-    240, 54, 167, 143, 203, 36, 16, 36, 240, 54, 178, 143, 203, 36, 16, 36,
-    240, 54, 171, 143, 203, 36, 16, 36, 240, 54, 182, 143, 203, 36, 16, 36,
-    240, 54, 203, 23, 143, 203, 36, 16, 36, 240, 54, 236, 252, 143, 203, 36,
-    16, 36, 240, 54, 200, 239, 143, 203, 36, 16, 36, 240, 54, 202, 179, 143,
-    203, 36, 16, 36, 240, 54, 235, 1, 143, 203, 36, 16, 36, 240, 54, 235,
-    149, 143, 203, 36, 16, 36, 240, 54, 206, 23, 143, 203, 36, 16, 36, 240,
-    54, 207, 68, 143, 203, 36, 16, 36, 240, 54, 237, 28, 143, 203, 36, 16,
-    36, 240, 54, 216, 176, 143, 203, 36, 16, 36, 240, 54, 200, 234, 143, 203,
-    36, 16, 36, 240, 54, 200, 227, 143, 203, 36, 16, 36, 240, 54, 200, 222,
-    143, 203, 36, 16, 36, 240, 54, 200, 224, 143, 203, 36, 16, 36, 240, 54,
-    200, 229, 143, 203, 36, 16, 36, 240, 54, 200, 230, 143, 203, 36, 16, 36,
-    240, 54, 200, 225, 143, 203, 36, 16, 36, 240, 54, 200, 226, 143, 203, 36,
-    16, 36, 240, 54, 200, 233, 143, 203, 36, 16, 36, 240, 54, 200, 228, 143,
-    203, 36, 16, 36, 240, 54, 202, 177, 143, 203, 36, 16, 36, 240, 54, 202,
-    175, 47, 234, 105, 232, 84, 36, 202, 218, 241, 75, 232, 122, 232, 84, 36,
-    202, 218, 210, 171, 237, 72, 232, 84, 36, 239, 122, 250, 169, 202, 218,
-    248, 241, 232, 84, 36, 195, 230, 235, 45, 232, 84, 36, 197, 152, 232, 84,
-    36, 241, 151, 232, 84, 36, 202, 218, 250, 228, 232, 84, 36, 231, 176,
-    202, 19, 232, 84, 36, 4, 203, 115, 232, 84, 36, 201, 193, 232, 84, 36,
-    213, 90, 232, 84, 36, 205, 9, 232, 84, 36, 235, 173, 232, 84, 36, 233,
-    96, 212, 75, 232, 84, 36, 218, 237, 232, 84, 36, 236, 201, 232, 84, 36,
-    235, 46, 232, 84, 36, 197, 7, 214, 120, 202, 218, 239, 247, 232, 84, 36,
-    251, 24, 232, 84, 36, 241, 130, 232, 84, 36, 248, 142, 202, 144, 232, 84,
-    36, 233, 116, 232, 84, 36, 205, 111, 251, 44, 232, 84, 36, 210, 93, 232,
-    84, 36, 226, 48, 232, 84, 36, 233, 96, 203, 115, 232, 84, 36, 218, 165,
-    241, 100, 232, 84, 36, 233, 96, 212, 28, 232, 84, 36, 202, 218, 252, 27,
-    197, 127, 232, 84, 36, 202, 218, 244, 211, 235, 118, 232, 84, 36, 226,
-    62, 232, 84, 36, 237, 177, 232, 84, 36, 210, 96, 232, 84, 36, 233, 96,
-    212, 58, 232, 84, 36, 212, 2, 232, 84, 36, 240, 70, 77, 202, 218, 222,
-    95, 232, 84, 36, 202, 218, 235, 211, 232, 84, 36, 214, 78, 232, 84, 36,
-    214, 177, 232, 84, 36, 239, 217, 232, 84, 36, 239, 239, 232, 84, 36, 226,
-    77, 232, 84, 36, 248, 51, 232, 84, 36, 244, 161, 202, 30, 219, 183, 232,
-    84, 36, 234, 73, 202, 19, 232, 84, 36, 211, 197, 200, 25, 232, 84, 36,
-    214, 77, 232, 84, 36, 202, 218, 197, 93, 232, 84, 36, 210, 84, 232, 84,
-    36, 202, 218, 247, 87, 232, 84, 36, 202, 218, 250, 224, 202, 138, 232,
-    84, 36, 202, 218, 224, 197, 204, 233, 218, 169, 232, 84, 36, 239, 184,
-    232, 84, 36, 202, 218, 220, 20, 220, 80, 232, 84, 36, 252, 28, 232, 84,
-    36, 202, 218, 197, 144, 232, 84, 36, 202, 218, 234, 28, 197, 50, 232, 84,
-    36, 202, 218, 225, 112, 223, 1, 232, 84, 36, 239, 72, 232, 84, 36, 222,
-    82, 232, 84, 36, 226, 51, 201, 117, 232, 84, 36, 4, 212, 28, 232, 84, 36,
-    251, 218, 244, 151, 232, 84, 36, 248, 244, 244, 151, 11, 5, 225, 234, 11,
-    5, 225, 226, 11, 5, 68, 11, 5, 226, 4, 11, 5, 226, 145, 11, 5, 226, 128,
-    11, 5, 226, 147, 11, 5, 226, 146, 11, 5, 250, 168, 11, 5, 250, 124, 11,
-    5, 63, 11, 5, 251, 46, 11, 5, 200, 37, 11, 5, 200, 41, 11, 5, 200, 38,
-    11, 5, 214, 49, 11, 5, 214, 13, 11, 5, 72, 11, 5, 214, 93, 11, 5, 236,
-    95, 11, 5, 69, 11, 5, 196, 243, 11, 5, 248, 145, 11, 5, 248, 140, 11, 5,
-    248, 184, 11, 5, 248, 157, 11, 5, 248, 173, 11, 5, 248, 172, 11, 5, 248,
-    175, 11, 5, 248, 174, 11, 5, 249, 56, 11, 5, 249, 48, 11, 5, 249, 145,
-    11, 5, 249, 81, 11, 5, 247, 247, 11, 5, 247, 251, 11, 5, 247, 248, 11, 5,
-    248, 89, 11, 5, 248, 70, 11, 5, 248, 116, 11, 5, 248, 95, 11, 5, 248,
-    200, 11, 5, 249, 9, 11, 5, 248, 213, 11, 5, 247, 231, 11, 5, 247, 225,
-    11, 5, 248, 21, 11, 5, 247, 246, 11, 5, 247, 239, 11, 5, 247, 244, 11, 5,
-    247, 213, 11, 5, 247, 211, 11, 5, 247, 218, 11, 5, 247, 216, 11, 5, 247,
-    214, 11, 5, 247, 215, 11, 5, 212, 157, 11, 5, 212, 153, 11, 5, 212, 220,
-    11, 5, 212, 169, 11, 5, 212, 186, 11, 5, 212, 213, 11, 5, 212, 209, 11,
-    5, 213, 116, 11, 5, 213, 102, 11, 5, 161, 11, 5, 213, 163, 11, 5, 211,
-    207, 11, 5, 211, 209, 11, 5, 211, 208, 11, 5, 212, 68, 11, 5, 212, 56,
-    11, 5, 212, 117, 11, 5, 212, 87, 11, 5, 211, 193, 11, 5, 211, 189, 11, 5,
-    211, 227, 11, 5, 211, 206, 11, 5, 211, 198, 11, 5, 211, 204, 11, 5, 211,
-    171, 11, 5, 211, 170, 11, 5, 211, 175, 11, 5, 211, 174, 11, 5, 211, 172,
-    11, 5, 211, 173, 11, 5, 249, 30, 11, 5, 249, 29, 11, 5, 249, 36, 11, 5,
-    249, 31, 11, 5, 249, 33, 11, 5, 249, 32, 11, 5, 249, 35, 11, 5, 249, 34,
-    11, 5, 249, 42, 11, 5, 249, 41, 11, 5, 249, 45, 11, 5, 249, 43, 11, 5,
-    249, 21, 11, 5, 249, 23, 11, 5, 249, 22, 11, 5, 249, 26, 11, 5, 249, 25,
-    11, 5, 249, 28, 11, 5, 249, 27, 11, 5, 249, 37, 11, 5, 249, 40, 11, 5,
-    249, 38, 11, 5, 249, 17, 11, 5, 249, 16, 11, 5, 249, 24, 11, 5, 249, 20,
-    11, 5, 249, 18, 11, 5, 249, 19, 11, 5, 249, 13, 11, 5, 249, 12, 11, 5,
-    249, 15, 11, 5, 249, 14, 11, 5, 217, 182, 11, 5, 217, 181, 11, 5, 217,
-    187, 11, 5, 217, 183, 11, 5, 217, 184, 11, 5, 217, 186, 11, 5, 217, 185,
-    11, 5, 217, 190, 11, 5, 217, 189, 11, 5, 217, 192, 11, 5, 217, 191, 11,
-    5, 217, 178, 11, 5, 217, 177, 11, 5, 217, 180, 11, 5, 217, 179, 11, 5,
-    217, 171, 11, 5, 217, 170, 11, 5, 217, 175, 11, 5, 217, 174, 11, 5, 217,
-    172, 11, 5, 217, 173, 11, 5, 217, 165, 11, 5, 217, 164, 11, 5, 217, 169,
-    11, 5, 217, 168, 11, 5, 217, 166, 11, 5, 217, 167, 11, 5, 231, 237, 11,
-    5, 231, 236, 11, 5, 231, 242, 11, 5, 231, 238, 11, 5, 231, 239, 11, 5,
-    231, 241, 11, 5, 231, 240, 11, 5, 231, 245, 11, 5, 231, 244, 11, 5, 231,
-    247, 11, 5, 231, 246, 11, 5, 231, 228, 11, 5, 231, 230, 11, 5, 231, 229,
-    11, 5, 231, 233, 11, 5, 231, 232, 11, 5, 231, 235, 11, 5, 231, 234, 11,
-    5, 231, 224, 11, 5, 231, 223, 11, 5, 231, 231, 11, 5, 231, 227, 11, 5,
-    231, 225, 11, 5, 231, 226, 11, 5, 231, 218, 11, 5, 231, 222, 11, 5, 231,
-    221, 11, 5, 231, 219, 11, 5, 231, 220, 11, 5, 219, 6, 11, 5, 219, 5, 11,
-    5, 219, 78, 11, 5, 219, 12, 11, 5, 219, 42, 11, 5, 219, 60, 11, 5, 219,
-    58, 11, 5, 220, 4, 11, 5, 219, 254, 11, 5, 166, 11, 5, 220, 43, 11, 5,
-    218, 107, 11, 5, 218, 106, 11, 5, 218, 110, 11, 5, 218, 108, 11, 5, 218,
-    180, 11, 5, 218, 153, 11, 5, 218, 251, 11, 5, 218, 187, 11, 5, 219, 130,
-    11, 5, 219, 207, 11, 5, 218, 87, 11, 5, 218, 81, 11, 5, 218, 145, 11, 5,
-    218, 103, 11, 5, 218, 96, 11, 5, 218, 101, 11, 5, 218, 58, 11, 5, 218,
-    57, 11, 5, 218, 63, 11, 5, 218, 60, 11, 5, 235, 104, 11, 5, 235, 98, 11,
-    5, 235, 153, 11, 5, 235, 120, 11, 5, 235, 202, 11, 5, 235, 193, 11, 5,
-    235, 239, 11, 5, 235, 207, 11, 5, 234, 254, 11, 5, 235, 51, 11, 5, 235,
-    32, 11, 5, 234, 206, 11, 5, 234, 205, 11, 5, 234, 223, 11, 5, 234, 211,
-    11, 5, 234, 209, 11, 5, 234, 210, 11, 5, 234, 193, 11, 5, 234, 192, 11,
-    5, 234, 196, 11, 5, 234, 194, 11, 5, 198, 255, 11, 5, 198, 250, 11, 5,
-    199, 34, 11, 5, 199, 8, 11, 5, 199, 23, 11, 5, 199, 20, 11, 5, 199, 26,
-    11, 5, 199, 25, 11, 5, 199, 126, 11, 5, 199, 121, 11, 5, 199, 152, 11, 5,
-    199, 139, 11, 5, 198, 229, 11, 5, 198, 225, 11, 5, 198, 248, 11, 5, 198,
-    231, 11, 5, 199, 38, 11, 5, 199, 106, 11, 5, 197, 213, 11, 5, 197, 211,
-    11, 5, 197, 220, 11, 5, 197, 216, 11, 5, 197, 214, 11, 5, 197, 215, 11,
-    5, 197, 203, 11, 5, 197, 202, 11, 5, 197, 207, 11, 5, 197, 206, 11, 5,
-    197, 204, 11, 5, 197, 205, 11, 5, 239, 65, 11, 5, 239, 51, 11, 5, 239,
-    152, 11, 5, 239, 92, 11, 5, 239, 127, 11, 5, 239, 132, 11, 5, 239, 131,
-    11, 5, 240, 61, 11, 5, 240, 55, 11, 5, 240, 136, 11, 5, 240, 81, 11, 5,
-    237, 182, 11, 5, 237, 183, 11, 5, 238, 253, 11, 5, 237, 229, 11, 5, 239,
-    28, 11, 5, 239, 0, 11, 5, 239, 182, 11, 5, 239, 252, 11, 5, 239, 203, 11,
-    5, 237, 173, 11, 5, 237, 171, 11, 5, 237, 201, 11, 5, 237, 181, 11, 5,
-    237, 176, 11, 5, 237, 179, 11, 5, 202, 57, 11, 5, 202, 49, 11, 5, 202,
-    122, 11, 5, 202, 67, 11, 5, 202, 105, 11, 5, 202, 107, 11, 5, 202, 106,
-    11, 5, 203, 94, 11, 5, 203, 79, 11, 5, 189, 11, 5, 203, 105, 11, 5, 201,
-    15, 11, 5, 201, 14, 11, 5, 201, 17, 11, 5, 201, 16, 11, 5, 201, 229, 11,
-    5, 201, 219, 11, 5, 149, 11, 5, 201, 242, 11, 5, 202, 239, 11, 5, 203,
-    68, 11, 5, 203, 10, 11, 5, 200, 254, 11, 5, 200, 249, 11, 5, 201, 40, 11,
-    5, 201, 13, 11, 5, 200, 255, 11, 5, 201, 10, 11, 5, 240, 13, 11, 5, 240,
-    12, 11, 5, 240, 18, 11, 5, 240, 14, 11, 5, 240, 15, 11, 5, 240, 17, 11,
-    5, 240, 16, 11, 5, 240, 34, 11, 5, 240, 33, 11, 5, 240, 41, 11, 5, 240,
-    35, 11, 5, 240, 3, 11, 5, 240, 5, 11, 5, 240, 4, 11, 5, 240, 8, 11, 5,
-    240, 7, 11, 5, 240, 11, 11, 5, 240, 9, 11, 5, 240, 26, 11, 5, 240, 29,
-    11, 5, 240, 27, 11, 5, 239, 255, 11, 5, 239, 254, 11, 5, 240, 6, 11, 5,
-    240, 2, 11, 5, 240, 0, 11, 5, 240, 1, 11, 5, 217, 137, 11, 5, 217, 136,
-    11, 5, 217, 144, 11, 5, 217, 139, 11, 5, 217, 140, 11, 5, 217, 141, 11,
-    5, 217, 153, 11, 5, 217, 152, 11, 5, 217, 159, 11, 5, 217, 154, 11, 5,
-    217, 129, 11, 5, 217, 128, 11, 5, 217, 135, 11, 5, 217, 130, 11, 5, 217,
-    145, 11, 5, 217, 151, 11, 5, 217, 149, 11, 5, 217, 121, 11, 5, 217, 120,
-    11, 5, 217, 126, 11, 5, 217, 124, 11, 5, 217, 122, 11, 5, 217, 123, 11,
-    5, 231, 203, 11, 5, 231, 202, 11, 5, 231, 209, 11, 5, 231, 204, 11, 5,
-    231, 206, 11, 5, 231, 205, 11, 5, 231, 208, 11, 5, 231, 207, 11, 5, 231,
-    215, 11, 5, 231, 213, 11, 5, 231, 217, 11, 5, 231, 216, 11, 5, 231, 196,
-    11, 5, 231, 197, 11, 5, 231, 200, 11, 5, 231, 199, 11, 5, 231, 201, 11,
-    5, 231, 210, 11, 5, 231, 212, 11, 5, 231, 211, 11, 5, 231, 195, 11, 5,
-    216, 168, 11, 5, 216, 166, 11, 5, 216, 223, 11, 5, 216, 171, 11, 5, 216,
-    197, 11, 5, 216, 211, 11, 5, 216, 210, 11, 5, 217, 197, 11, 5, 176, 11,
-    5, 217, 213, 11, 5, 215, 130, 11, 5, 215, 132, 11, 5, 215, 131, 11, 5,
-    216, 18, 11, 5, 216, 2, 11, 5, 216, 50, 11, 5, 216, 29, 11, 5, 217, 77,
-    11, 5, 217, 118, 11, 5, 217, 96, 11, 5, 215, 125, 11, 5, 215, 121, 11, 5,
-    215, 186, 11, 5, 215, 129, 11, 5, 215, 127, 11, 5, 215, 128, 11, 5, 232,
-    12, 11, 5, 232, 11, 11, 5, 232, 17, 11, 5, 232, 13, 11, 5, 232, 14, 11,
-    5, 232, 16, 11, 5, 232, 15, 11, 5, 232, 23, 11, 5, 232, 21, 11, 5, 232,
-    25, 11, 5, 232, 24, 11, 5, 232, 4, 11, 5, 232, 6, 11, 5, 232, 5, 11, 5,
-    232, 8, 11, 5, 232, 10, 11, 5, 232, 9, 11, 5, 232, 18, 11, 5, 232, 20,
-    11, 5, 232, 19, 11, 5, 232, 0, 11, 5, 231, 255, 11, 5, 232, 7, 11, 5,
-    232, 3, 11, 5, 232, 1, 11, 5, 232, 2, 11, 5, 231, 250, 11, 5, 231, 249,
-    11, 5, 231, 254, 11, 5, 231, 253, 11, 5, 231, 251, 11, 5, 231, 252, 11,
-    5, 222, 51, 11, 5, 222, 43, 11, 5, 222, 109, 11, 5, 222, 61, 11, 5, 222,
-    100, 11, 5, 222, 99, 11, 5, 222, 103, 11, 5, 222, 101, 11, 5, 222, 220,
-    11, 5, 222, 208, 11, 5, 172, 11, 5, 222, 231, 11, 5, 221, 169, 11, 5,
-    221, 168, 11, 5, 221, 171, 11, 5, 221, 170, 11, 5, 221, 216, 11, 5, 221,
-    200, 11, 5, 222, 7, 11, 5, 221, 222, 11, 5, 222, 126, 11, 5, 222, 197,
-    11, 5, 222, 144, 11, 5, 221, 163, 11, 5, 221, 161, 11, 5, 221, 191, 11,
-    5, 221, 167, 11, 5, 221, 165, 11, 5, 221, 166, 11, 5, 221, 141, 11, 5,
-    221, 140, 11, 5, 221, 151, 11, 5, 221, 144, 11, 5, 221, 142, 11, 5, 221,
-    143, 11, 5, 233, 163, 11, 5, 233, 162, 11, 5, 233, 192, 11, 5, 233, 175,
-    11, 5, 233, 184, 11, 5, 233, 183, 11, 5, 233, 186, 11, 5, 233, 185, 11,
-    5, 234, 75, 11, 5, 234, 70, 11, 5, 234, 123, 11, 5, 234, 86, 11, 5, 233,
-    49, 11, 5, 233, 48, 11, 5, 233, 51, 11, 5, 233, 50, 11, 5, 233, 121, 11,
-    5, 233, 119, 11, 5, 233, 144, 11, 5, 233, 130, 11, 5, 234, 14, 11, 5,
-    234, 12, 11, 5, 234, 48, 11, 5, 234, 25, 11, 5, 233, 38, 11, 5, 233, 37,
-    11, 5, 233, 76, 11, 5, 233, 47, 11, 5, 233, 39, 11, 5, 233, 46, 11, 5,
-    224, 55, 11, 5, 224, 50, 11, 5, 224, 101, 11, 5, 224, 69, 11, 5, 224, 82,
-    11, 5, 224, 86, 11, 5, 224, 84, 11, 5, 224, 235, 11, 5, 224, 217, 11, 5,
-    155, 11, 5, 225, 8, 11, 5, 223, 158, 11, 5, 223, 163, 11, 5, 223, 160,
-    11, 5, 223, 230, 11, 5, 223, 225, 11, 5, 224, 11, 11, 5, 223, 237, 11, 5,
-    224, 172, 11, 5, 224, 155, 11, 5, 224, 209, 11, 5, 224, 176, 11, 5, 223,
-    145, 11, 5, 223, 141, 11, 5, 223, 187, 11, 5, 223, 157, 11, 5, 223, 149,
-    11, 5, 223, 154, 11, 5, 233, 252, 11, 5, 233, 251, 11, 5, 234, 0, 11, 5,
-    233, 253, 11, 5, 233, 255, 11, 5, 233, 254, 11, 5, 234, 7, 11, 5, 234, 6,
-    11, 5, 234, 10, 11, 5, 234, 8, 11, 5, 233, 243, 11, 5, 233, 242, 11, 5,
-    233, 245, 11, 5, 233, 244, 11, 5, 233, 248, 11, 5, 233, 247, 11, 5, 233,
-    250, 11, 5, 233, 249, 11, 5, 234, 2, 11, 5, 234, 1, 11, 5, 234, 5, 11, 5,
-    234, 3, 11, 5, 233, 238, 11, 5, 233, 237, 11, 5, 233, 246, 11, 5, 233,
-    241, 11, 5, 233, 239, 11, 5, 233, 240, 11, 5, 219, 97, 11, 5, 219, 98,
-    11, 5, 219, 116, 11, 5, 219, 115, 11, 5, 219, 118, 11, 5, 219, 117, 11,
-    5, 219, 88, 11, 5, 219, 90, 11, 5, 219, 89, 11, 5, 219, 93, 11, 5, 219,
-    92, 11, 5, 219, 95, 11, 5, 219, 94, 11, 5, 219, 99, 11, 5, 219, 101, 11,
-    5, 219, 100, 11, 5, 219, 84, 11, 5, 219, 83, 11, 5, 219, 91, 11, 5, 219,
-    87, 11, 5, 219, 85, 11, 5, 219, 86, 11, 5, 231, 22, 11, 5, 231, 21, 11,
-    5, 231, 28, 11, 5, 231, 23, 11, 5, 231, 25, 11, 5, 231, 24, 11, 5, 231,
-    27, 11, 5, 231, 26, 11, 5, 231, 33, 11, 5, 231, 32, 11, 5, 231, 35, 11,
-    5, 231, 34, 11, 5, 231, 14, 11, 5, 231, 13, 11, 5, 231, 16, 11, 5, 231,
-    15, 11, 5, 231, 18, 11, 5, 231, 17, 11, 5, 231, 20, 11, 5, 231, 19, 11,
-    5, 231, 29, 11, 5, 231, 31, 11, 5, 231, 30, 11, 5, 217, 16, 11, 5, 217,
-    18, 11, 5, 217, 17, 11, 5, 217, 61, 11, 5, 217, 59, 11, 5, 217, 71, 11,
-    5, 217, 64, 11, 5, 216, 233, 11, 5, 216, 232, 11, 5, 216, 234, 11, 5,
-    216, 244, 11, 5, 216, 241, 11, 5, 216, 252, 11, 5, 216, 246, 11, 5, 217,
-    52, 11, 5, 217, 58, 11, 5, 217, 54, 11, 5, 232, 31, 11, 5, 232, 49, 11,
-    5, 232, 58, 11, 5, 232, 165, 11, 5, 232, 154, 11, 5, 142, 11, 5, 232,
-    177, 11, 5, 231, 51, 11, 5, 231, 50, 11, 5, 231, 53, 11, 5, 231, 52, 11,
-    5, 231, 95, 11, 5, 231, 86, 11, 5, 231, 193, 11, 5, 231, 158, 11, 5, 232,
-    86, 11, 5, 232, 147, 11, 5, 232, 98, 11, 5, 197, 130, 11, 5, 197, 115,
-    11, 5, 197, 166, 11, 5, 197, 141, 11, 5, 196, 232, 11, 5, 196, 234, 11,
-    5, 196, 233, 11, 5, 197, 0, 11, 5, 197, 34, 11, 5, 197, 10, 11, 5, 197,
-    83, 11, 5, 197, 109, 11, 5, 197, 90, 11, 5, 195, 18, 11, 5, 195, 17, 11,
-    5, 195, 33, 11, 5, 195, 21, 11, 5, 195, 26, 11, 5, 195, 28, 11, 5, 195,
-    27, 11, 5, 195, 97, 11, 5, 195, 94, 11, 5, 195, 115, 11, 5, 195, 101, 11,
-    5, 194, 248, 11, 5, 194, 250, 11, 5, 194, 249, 11, 5, 195, 6, 11, 5, 195,
-    5, 11, 5, 195, 11, 11, 5, 195, 7, 11, 5, 195, 76, 11, 5, 195, 88, 11, 5,
-    195, 81, 11, 5, 194, 244, 11, 5, 194, 243, 11, 5, 194, 255, 11, 5, 194,
-    247, 11, 5, 194, 245, 11, 5, 194, 246, 11, 5, 194, 230, 11, 5, 194, 229,
-    11, 5, 194, 235, 11, 5, 194, 233, 11, 5, 194, 231, 11, 5, 194, 232, 11,
-    5, 244, 238, 11, 5, 244, 231, 11, 5, 245, 11, 11, 5, 244, 251, 11, 5,
-    245, 8, 11, 5, 245, 2, 11, 5, 245, 10, 11, 5, 245, 9, 11, 5, 247, 92, 11,
-    5, 247, 84, 11, 5, 247, 174, 11, 5, 247, 125, 11, 5, 241, 29, 11, 5, 241,
-    31, 11, 5, 241, 30, 11, 5, 241, 93, 11, 5, 241, 81, 11, 5, 244, 182, 11,
-    5, 241, 112, 11, 5, 247, 20, 11, 5, 247, 57, 11, 5, 247, 26, 11, 5, 241,
-    1, 11, 5, 240, 255, 11, 5, 241, 41, 11, 5, 241, 27, 11, 5, 241, 7, 11, 5,
-    241, 22, 11, 5, 240, 234, 11, 5, 240, 233, 11, 5, 240, 246, 11, 5, 240,
-    240, 11, 5, 240, 235, 11, 5, 240, 237, 11, 5, 194, 213, 11, 5, 194, 212,
-    11, 5, 194, 219, 11, 5, 194, 214, 11, 5, 194, 216, 11, 5, 194, 215, 11,
-    5, 194, 218, 11, 5, 194, 217, 11, 5, 194, 225, 11, 5, 194, 224, 11, 5,
-    194, 228, 11, 5, 194, 226, 11, 5, 194, 209, 11, 5, 194, 211, 11, 5, 194,
-    210, 11, 5, 194, 220, 11, 5, 194, 223, 11, 5, 194, 221, 11, 5, 194, 202,
-    11, 5, 194, 206, 11, 5, 194, 205, 11, 5, 194, 203, 11, 5, 194, 204, 11,
-    5, 194, 196, 11, 5, 194, 195, 11, 5, 194, 201, 11, 5, 194, 199, 11, 5,
-    194, 197, 11, 5, 194, 198, 11, 5, 215, 41, 11, 5, 215, 40, 11, 5, 215,
-    46, 11, 5, 215, 42, 11, 5, 215, 43, 11, 5, 215, 45, 11, 5, 215, 44, 11,
-    5, 215, 51, 11, 5, 215, 50, 11, 5, 215, 54, 11, 5, 215, 53, 11, 5, 215,
-    34, 11, 5, 215, 35, 11, 5, 215, 38, 11, 5, 215, 39, 11, 5, 215, 47, 11,
-    5, 215, 49, 11, 5, 215, 29, 11, 5, 215, 37, 11, 5, 215, 33, 11, 5, 215,
-    30, 11, 5, 215, 31, 11, 5, 215, 24, 11, 5, 215, 23, 11, 5, 215, 28, 11,
-    5, 215, 27, 11, 5, 215, 25, 11, 5, 215, 26, 11, 5, 206, 31, 11, 5, 167,
-    11, 5, 206, 112, 11, 5, 206, 34, 11, 5, 206, 92, 11, 5, 206, 95, 11, 5,
-    206, 93, 11, 5, 208, 199, 11, 5, 208, 183, 11, 5, 183, 11, 5, 208, 207,
-    11, 5, 204, 101, 11, 5, 204, 103, 11, 5, 204, 102, 11, 5, 205, 165, 11,
-    5, 205, 154, 11, 5, 205, 200, 11, 5, 205, 169, 11, 5, 207, 63, 11, 5,
-    208, 147, 11, 5, 207, 93, 11, 5, 204, 76, 11, 5, 204, 73, 11, 5, 204,
-    172, 11, 5, 204, 100, 11, 5, 204, 80, 11, 5, 204, 88, 11, 5, 203, 230,
-    11, 5, 203, 229, 11, 5, 204, 44, 11, 5, 203, 238, 11, 5, 203, 232, 11, 5,
-    203, 237, 11, 5, 205, 41, 11, 5, 205, 40, 11, 5, 205, 47, 11, 5, 205, 42,
-    11, 5, 205, 44, 11, 5, 205, 46, 11, 5, 205, 45, 11, 5, 205, 56, 11, 5,
-    205, 54, 11, 5, 205, 80, 11, 5, 205, 57, 11, 5, 205, 36, 11, 5, 205, 35,
-    11, 5, 205, 39, 11, 5, 205, 37, 11, 5, 205, 50, 11, 5, 205, 53, 11, 5,
-    205, 51, 11, 5, 205, 32, 11, 5, 205, 30, 11, 5, 205, 34, 11, 5, 205, 33,
-    11, 5, 205, 25, 11, 5, 205, 24, 11, 5, 205, 29, 11, 5, 205, 28, 11, 5,
-    205, 26, 11, 5, 205, 27, 11, 5, 195, 69, 11, 5, 195, 68, 11, 5, 195, 74,
-    11, 5, 195, 71, 11, 5, 195, 48, 11, 5, 195, 50, 11, 5, 195, 49, 11, 5,
-    195, 53, 11, 5, 195, 52, 11, 5, 195, 57, 11, 5, 195, 54, 11, 5, 195, 62,
-    11, 5, 195, 61, 11, 5, 195, 65, 11, 5, 195, 63, 11, 5, 195, 44, 11, 5,
-    195, 43, 11, 5, 195, 51, 11, 5, 195, 47, 11, 5, 195, 45, 11, 5, 195, 46,
-    11, 5, 195, 36, 11, 5, 195, 35, 11, 5, 195, 40, 11, 5, 195, 39, 11, 5,
-    195, 37, 11, 5, 195, 38, 11, 5, 245, 109, 11, 5, 245, 105, 11, 5, 247,
-    16, 11, 5, 247, 2, 11, 5, 245, 26, 11, 5, 245, 25, 11, 5, 245, 28, 11, 5,
-    245, 27, 11, 5, 245, 41, 11, 5, 245, 40, 11, 5, 245, 49, 11, 5, 245, 44,
-    11, 5, 245, 80, 11, 5, 245, 78, 11, 5, 245, 103, 11, 5, 245, 88, 11, 5,
-    245, 20, 11, 5, 245, 30, 11, 5, 245, 24, 11, 5, 245, 21, 11, 5, 245, 23,
-    11, 5, 245, 13, 11, 5, 245, 12, 11, 5, 245, 17, 11, 5, 245, 16, 11, 5,
-    245, 14, 11, 5, 245, 15, 11, 5, 209, 177, 11, 5, 209, 181, 11, 5, 209,
-    159, 11, 5, 209, 160, 11, 5, 209, 164, 11, 5, 209, 163, 11, 5, 209, 167,
-    11, 5, 209, 165, 11, 5, 209, 171, 11, 5, 209, 170, 11, 5, 209, 176, 11,
-    5, 209, 172, 11, 5, 209, 155, 11, 5, 209, 153, 11, 5, 209, 161, 11, 5,
-    209, 158, 11, 5, 209, 156, 11, 5, 209, 157, 11, 5, 209, 148, 11, 5, 209,
-    147, 11, 5, 209, 152, 11, 5, 209, 151, 11, 5, 209, 149, 11, 5, 209, 150,
-    11, 5, 215, 250, 11, 5, 215, 249, 11, 5, 215, 252, 11, 5, 215, 251, 11,
-    5, 215, 241, 11, 5, 215, 243, 11, 5, 215, 242, 11, 5, 215, 245, 11, 5,
-    215, 244, 11, 5, 215, 248, 11, 5, 215, 247, 11, 5, 215, 235, 11, 5, 215,
-    234, 11, 5, 215, 240, 11, 5, 215, 238, 11, 5, 215, 236, 11, 5, 215, 237,
-    11, 5, 215, 229, 11, 5, 215, 228, 11, 5, 215, 233, 11, 5, 215, 232, 11,
-    5, 215, 230, 11, 5, 215, 231, 11, 5, 207, 9, 11, 5, 207, 4, 11, 5, 207,
-    50, 11, 5, 207, 22, 11, 5, 206, 139, 11, 5, 206, 141, 11, 5, 206, 140,
-    11, 5, 206, 166, 11, 5, 206, 161, 11, 5, 206, 198, 11, 5, 206, 186, 11,
-    5, 206, 233, 11, 5, 206, 226, 11, 5, 206, 255, 11, 5, 206, 242, 11, 5,
-    206, 135, 11, 5, 206, 132, 11, 5, 206, 151, 11, 5, 206, 138, 11, 5, 206,
-    136, 11, 5, 206, 137, 11, 5, 206, 115, 11, 5, 206, 114, 11, 5, 206, 121,
-    11, 5, 206, 118, 11, 5, 206, 116, 11, 5, 206, 117, 11, 5, 210, 198, 11,
-    5, 210, 192, 11, 5, 169, 11, 5, 210, 204, 11, 5, 209, 110, 11, 5, 209,
-    112, 11, 5, 209, 111, 11, 5, 209, 195, 11, 5, 209, 183, 11, 5, 209, 232,
-    11, 5, 209, 199, 11, 5, 210, 82, 11, 5, 210, 183, 11, 5, 210, 124, 11, 5,
-    209, 102, 11, 5, 209, 99, 11, 5, 209, 140, 11, 5, 209, 109, 11, 5, 209,
-    105, 11, 5, 209, 106, 11, 5, 209, 84, 11, 5, 209, 83, 11, 5, 209, 89, 11,
-    5, 209, 87, 11, 5, 209, 85, 11, 5, 209, 86, 11, 5, 225, 160, 11, 5, 225,
-    159, 11, 5, 225, 172, 11, 5, 225, 161, 11, 5, 225, 168, 11, 5, 225, 167,
-    11, 5, 225, 170, 11, 5, 225, 169, 11, 5, 225, 98, 11, 5, 225, 97, 11, 5,
-    225, 100, 11, 5, 225, 99, 11, 5, 225, 116, 11, 5, 225, 114, 11, 5, 225,
-    129, 11, 5, 225, 118, 11, 5, 225, 91, 11, 5, 225, 89, 11, 5, 225, 110,
-    11, 5, 225, 96, 11, 5, 225, 93, 11, 5, 225, 94, 11, 5, 225, 83, 11, 5,
-    225, 82, 11, 5, 225, 87, 11, 5, 225, 86, 11, 5, 225, 84, 11, 5, 225, 85,
-    11, 5, 211, 113, 11, 5, 211, 111, 11, 5, 211, 121, 11, 5, 211, 114, 11,
-    5, 211, 118, 11, 5, 211, 117, 11, 5, 211, 120, 11, 5, 211, 119, 11, 5,
-    211, 63, 11, 5, 211, 60, 11, 5, 211, 65, 11, 5, 211, 64, 11, 5, 211, 100,
-    11, 5, 211, 99, 11, 5, 211, 109, 11, 5, 211, 103, 11, 5, 211, 55, 11, 5,
-    211, 51, 11, 5, 211, 97, 11, 5, 211, 59, 11, 5, 211, 57, 11, 5, 211, 58,
-    11, 5, 211, 35, 11, 5, 211, 33, 11, 5, 211, 45, 11, 5, 211, 38, 11, 5,
-    211, 36, 11, 5, 211, 37, 11, 5, 225, 149, 11, 5, 225, 148, 11, 5, 225,
-    155, 11, 5, 225, 150, 11, 5, 225, 152, 11, 5, 225, 151, 11, 5, 225, 154,
-    11, 5, 225, 153, 11, 5, 225, 140, 11, 5, 225, 142, 11, 5, 225, 141, 11,
-    5, 225, 145, 11, 5, 225, 144, 11, 5, 225, 147, 11, 5, 225, 146, 11, 5,
-    225, 136, 11, 5, 225, 135, 11, 5, 225, 143, 11, 5, 225, 139, 11, 5, 225,
-    137, 11, 5, 225, 138, 11, 5, 225, 132, 11, 5, 225, 131, 11, 5, 225, 134,
-    11, 5, 225, 133, 11, 5, 216, 141, 11, 5, 216, 140, 11, 5, 216, 148, 11,
-    5, 216, 142, 11, 5, 216, 144, 11, 5, 216, 143, 11, 5, 216, 147, 11, 5,
-    216, 145, 11, 5, 216, 130, 11, 5, 216, 131, 11, 5, 216, 136, 11, 5, 216,
-    135, 11, 5, 216, 139, 11, 5, 216, 137, 11, 5, 216, 125, 11, 5, 216, 134,
-    11, 5, 216, 129, 11, 5, 216, 126, 11, 5, 216, 127, 11, 5, 216, 120, 11,
-    5, 216, 119, 11, 5, 216, 124, 11, 5, 216, 123, 11, 5, 216, 121, 11, 5,
-    216, 122, 11, 5, 215, 76, 11, 5, 215, 75, 11, 5, 215, 89, 11, 5, 215, 80,
-    11, 5, 215, 85, 11, 5, 215, 84, 11, 5, 215, 87, 11, 5, 215, 86, 11, 5,
-    215, 61, 11, 5, 215, 63, 11, 5, 215, 62, 11, 5, 215, 68, 11, 5, 215, 67,
-    11, 5, 215, 73, 11, 5, 215, 69, 11, 5, 215, 59, 11, 5, 215, 57, 11, 5,
-    215, 66, 11, 5, 215, 60, 11, 5, 196, 187, 11, 5, 196, 186, 11, 5, 196,
-    196, 11, 5, 196, 189, 11, 5, 196, 191, 11, 5, 196, 190, 11, 5, 196, 193,
-    11, 5, 196, 192, 11, 5, 196, 175, 11, 5, 196, 176, 11, 5, 196, 180, 11,
-    5, 196, 179, 11, 5, 196, 185, 11, 5, 196, 183, 11, 5, 196, 152, 11, 5,
-    196, 150, 11, 5, 196, 165, 11, 5, 196, 155, 11, 5, 196, 153, 11, 5, 196,
-    154, 11, 5, 196, 9, 11, 5, 196, 7, 11, 5, 196, 24, 11, 5, 196, 10, 11, 5,
-    196, 18, 11, 5, 196, 17, 11, 5, 196, 21, 11, 5, 196, 19, 11, 5, 195, 190,
-    11, 5, 195, 189, 11, 5, 195, 193, 11, 5, 195, 191, 11, 5, 195, 232, 11,
-    5, 195, 227, 11, 5, 196, 3, 11, 5, 195, 236, 11, 5, 195, 181, 11, 5, 195,
-    177, 11, 5, 195, 217, 11, 5, 195, 188, 11, 5, 195, 184, 11, 5, 195, 185,
-    11, 5, 195, 161, 11, 5, 195, 160, 11, 5, 195, 168, 11, 5, 195, 164, 11,
-    5, 195, 162, 11, 5, 195, 163, 11, 44, 211, 100, 11, 44, 222, 109, 11, 44,
-    224, 55, 11, 44, 215, 80, 11, 44, 240, 240, 11, 44, 205, 47, 11, 44, 233,
-    249, 11, 44, 234, 25, 11, 44, 219, 78, 11, 44, 231, 22, 11, 44, 221, 143,
-    11, 44, 249, 17, 11, 44, 218, 187, 11, 44, 196, 3, 11, 44, 211, 193, 11,
-    44, 231, 16, 11, 44, 203, 94, 11, 44, 234, 123, 11, 44, 194, 247, 11, 44,
-    240, 234, 11, 44, 240, 1, 11, 44, 247, 244, 11, 44, 233, 245, 11, 44,
-    215, 69, 11, 44, 201, 40, 11, 44, 214, 93, 11, 44, 225, 136, 11, 44, 195,
-    6, 11, 44, 211, 171, 11, 44, 231, 235, 11, 44, 196, 9, 11, 44, 197, 215,
-    11, 44, 206, 121, 11, 44, 199, 106, 11, 44, 195, 115, 11, 44, 225, 129,
-    11, 44, 215, 33, 11, 44, 225, 134, 11, 44, 233, 121, 11, 44, 225, 154,
-    11, 44, 197, 34, 11, 44, 237, 201, 11, 44, 206, 137, 11, 44, 222, 103,
-    11, 44, 240, 246, 11, 44, 241, 30, 11, 44, 244, 251, 11, 44, 231, 19, 11,
-    44, 207, 9, 11, 44, 194, 246, 11, 44, 206, 186, 11, 44, 245, 103, 11, 44,
-    194, 216, 11, 44, 217, 186, 11, 44, 224, 209, 222, 52, 1, 249, 145, 222,
-    52, 1, 161, 222, 52, 1, 213, 6, 222, 52, 1, 240, 136, 222, 52, 1, 189,
-    222, 52, 1, 202, 233, 222, 52, 1, 234, 123, 222, 52, 1, 155, 222, 52, 1,
-    224, 146, 222, 52, 1, 225, 214, 222, 52, 1, 247, 174, 222, 52, 1, 247,
-    16, 222, 52, 1, 237, 156, 222, 52, 1, 201, 113, 222, 52, 1, 201, 103,
-    222, 52, 1, 166, 222, 52, 1, 176, 222, 52, 1, 172, 222, 52, 1, 183, 222,
-    52, 1, 195, 74, 222, 52, 1, 195, 115, 222, 52, 1, 217, 71, 222, 52, 1,
-    142, 222, 52, 1, 196, 208, 222, 52, 1, 232, 80, 222, 52, 1, 235, 239,
-    222, 52, 1, 197, 166, 222, 52, 1, 207, 50, 222, 52, 1, 164, 222, 52, 1,
-    233, 230, 222, 52, 1, 63, 222, 52, 1, 251, 245, 222, 52, 1, 69, 222, 52,
-    1, 236, 116, 222, 52, 1, 68, 222, 52, 1, 72, 222, 52, 1, 66, 222, 52, 1,
-    200, 99, 222, 52, 1, 200, 92, 222, 52, 1, 214, 164, 222, 52, 1, 152, 218,
-    62, 202, 122, 222, 52, 1, 152, 218, 1, 212, 117, 222, 52, 1, 152, 218,
-    62, 240, 245, 222, 52, 1, 152, 218, 62, 248, 116, 222, 52, 1, 152, 218,
-    62, 176, 222, 52, 1, 152, 218, 62, 225, 181, 222, 52, 211, 214, 244, 159,
-    222, 52, 211, 214, 234, 217, 204, 226, 54, 5, 237, 54, 54, 5, 237, 50,
-    54, 5, 232, 118, 54, 5, 197, 98, 54, 5, 197, 97, 54, 5, 213, 79, 54, 5,
-    248, 191, 54, 5, 248, 251, 54, 5, 219, 233, 54, 5, 223, 218, 54, 5, 219,
-    110, 54, 5, 234, 61, 54, 5, 235, 182, 54, 5, 199, 113, 54, 5, 203, 48,
-    54, 5, 202, 215, 54, 5, 239, 166, 54, 5, 239, 163, 54, 5, 222, 188, 54,
-    5, 210, 155, 54, 5, 239, 237, 54, 5, 217, 150, 54, 5, 208, 129, 54, 5,
-    206, 253, 54, 5, 195, 85, 54, 5, 195, 64, 54, 5, 247, 49, 54, 5, 225,
-    191, 54, 5, 216, 155, 54, 5, 196, 66, 54, 5, 224, 200, 54, 5, 217, 44,
-    54, 5, 234, 40, 54, 5, 219, 188, 54, 5, 217, 107, 54, 5, 215, 97, 54, 5,
-    68, 54, 5, 226, 86, 54, 5, 232, 71, 54, 5, 232, 41, 54, 5, 197, 70, 54,
-    5, 197, 52, 54, 5, 212, 220, 54, 5, 248, 189, 54, 5, 248, 184, 54, 5,
-    219, 226, 54, 5, 223, 215, 54, 5, 219, 107, 54, 5, 234, 57, 54, 5, 235,
-    153, 54, 5, 199, 34, 54, 5, 202, 122, 54, 5, 202, 195, 54, 5, 239, 158,
-    54, 5, 239, 162, 54, 5, 222, 109, 54, 5, 210, 72, 54, 5, 239, 152, 54, 5,
-    217, 144, 54, 5, 206, 112, 54, 5, 206, 223, 54, 5, 195, 33, 54, 5, 195,
-    60, 54, 5, 245, 11, 54, 5, 225, 172, 54, 5, 216, 148, 54, 5, 196, 24, 54,
-    5, 224, 101, 54, 5, 217, 36, 54, 5, 233, 192, 54, 5, 219, 78, 54, 5, 216,
-    223, 54, 5, 215, 89, 54, 5, 63, 54, 5, 251, 106, 54, 5, 217, 66, 54, 5,
-    142, 54, 5, 232, 212, 54, 5, 197, 166, 54, 5, 197, 146, 54, 5, 161, 54,
-    5, 248, 197, 54, 5, 249, 145, 54, 5, 219, 241, 54, 5, 223, 223, 54, 5,
-    223, 221, 54, 5, 219, 114, 54, 5, 234, 65, 54, 5, 235, 239, 54, 5, 199,
-    152, 54, 5, 189, 54, 5, 202, 233, 54, 5, 239, 176, 54, 5, 239, 165, 54,
-    5, 172, 54, 5, 169, 54, 5, 240, 136, 54, 5, 217, 159, 54, 5, 183, 54, 5,
-    207, 50, 54, 5, 195, 115, 54, 5, 195, 74, 54, 5, 247, 174, 54, 5, 225,
-    214, 54, 5, 216, 164, 54, 5, 164, 54, 5, 155, 54, 5, 225, 17, 54, 5, 217,
-    50, 54, 5, 234, 123, 54, 5, 166, 54, 5, 176, 54, 5, 215, 109, 54, 5, 214,
-    102, 54, 5, 214, 97, 54, 5, 231, 166, 54, 5, 197, 15, 54, 5, 197, 11, 54,
-    5, 212, 91, 54, 5, 248, 187, 54, 5, 248, 103, 54, 5, 219, 221, 54, 5,
-    223, 213, 54, 5, 219, 103, 54, 5, 234, 53, 54, 5, 235, 40, 54, 5, 198,
-    233, 54, 5, 201, 247, 54, 5, 202, 164, 54, 5, 239, 155, 54, 5, 239, 160,
-    54, 5, 221, 229, 54, 5, 209, 206, 54, 5, 239, 3, 54, 5, 217, 131, 54, 5,
-    205, 171, 54, 5, 206, 190, 54, 5, 195, 8, 54, 5, 195, 55, 54, 5, 241,
-    117, 54, 5, 225, 119, 54, 5, 216, 138, 54, 5, 195, 237, 54, 5, 223, 242,
-    54, 5, 217, 34, 54, 5, 233, 132, 54, 5, 218, 195, 54, 5, 216, 33, 54, 5,
-    215, 70, 54, 5, 66, 54, 5, 200, 72, 54, 5, 231, 75, 54, 5, 231, 59, 54,
-    5, 196, 243, 54, 5, 196, 236, 54, 5, 211, 227, 54, 5, 248, 186, 54, 5,
-    248, 21, 54, 5, 219, 220, 54, 5, 223, 211, 54, 5, 219, 102, 54, 5, 234,
-    52, 54, 5, 234, 223, 54, 5, 197, 220, 54, 5, 201, 40, 54, 5, 202, 142,
-    54, 5, 239, 153, 54, 5, 239, 159, 54, 5, 221, 191, 54, 5, 209, 140, 54,
-    5, 237, 201, 54, 5, 217, 126, 54, 5, 204, 172, 54, 5, 206, 151, 54, 5,
-    194, 255, 54, 5, 195, 51, 54, 5, 241, 41, 54, 5, 225, 110, 54, 5, 216,
-    134, 54, 5, 195, 217, 54, 5, 223, 187, 54, 5, 217, 33, 54, 5, 233, 76,
-    54, 5, 218, 145, 54, 5, 215, 186, 54, 5, 215, 66, 54, 5, 72, 54, 5, 214,
-    119, 54, 5, 216, 248, 54, 5, 231, 193, 54, 5, 231, 169, 54, 5, 197, 34,
-    54, 5, 197, 16, 54, 5, 212, 117, 54, 5, 248, 188, 54, 5, 248, 116, 54, 5,
-    219, 222, 54, 5, 223, 214, 54, 5, 219, 105, 54, 5, 234, 55, 54, 5, 234,
-    54, 54, 5, 235, 51, 54, 5, 198, 248, 54, 5, 149, 54, 5, 202, 169, 54, 5,
-    239, 156, 54, 5, 239, 161, 54, 5, 222, 7, 54, 5, 209, 232, 54, 5, 239,
-    28, 54, 5, 217, 135, 54, 5, 205, 200, 54, 5, 206, 198, 54, 5, 195, 11,
-    54, 5, 195, 57, 54, 5, 244, 182, 54, 5, 225, 129, 54, 5, 216, 139, 54, 5,
-    196, 3, 54, 5, 224, 11, 54, 5, 217, 35, 54, 5, 233, 144, 54, 5, 218, 251,
-    54, 5, 216, 50, 54, 5, 215, 73, 54, 5, 69, 54, 5, 236, 230, 54, 5, 217,
-    55, 54, 5, 232, 147, 54, 5, 232, 101, 54, 5, 197, 109, 54, 5, 197, 92,
-    54, 5, 213, 92, 54, 5, 248, 192, 54, 5, 249, 9, 54, 5, 219, 234, 54, 5,
-    223, 219, 54, 5, 223, 217, 54, 5, 219, 111, 54, 5, 234, 62, 54, 5, 234,
-    60, 54, 5, 235, 189, 54, 5, 199, 118, 54, 5, 203, 68, 54, 5, 202, 217,
-    54, 5, 239, 167, 54, 5, 239, 164, 54, 5, 222, 197, 54, 5, 210, 183, 54,
-    5, 239, 252, 54, 5, 217, 151, 54, 5, 208, 147, 54, 5, 206, 255, 54, 5,
-    195, 88, 54, 5, 195, 65, 54, 5, 247, 57, 54, 5, 225, 193, 54, 5, 216,
-    157, 54, 5, 196, 69, 54, 5, 224, 209, 54, 5, 217, 45, 54, 5, 217, 41, 54,
-    5, 234, 48, 54, 5, 234, 34, 54, 5, 219, 207, 54, 5, 217, 118, 54, 5, 215,
-    98, 54, 5, 217, 73, 54, 5, 222, 150, 54, 244, 159, 54, 234, 217, 204,
-    226, 54, 211, 79, 78, 54, 5, 217, 134, 235, 239, 54, 5, 217, 134, 155,
-    54, 5, 217, 134, 205, 171, 54, 16, 235, 178, 54, 16, 224, 198, 54, 16,
-    202, 72, 54, 16, 216, 190, 54, 16, 249, 87, 54, 16, 235, 238, 54, 16,
-    203, 162, 54, 16, 240, 86, 54, 16, 239, 2, 54, 16, 223, 164, 54, 16, 201,
-    251, 54, 16, 239, 27, 54, 16, 225, 120, 54, 17, 195, 79, 54, 17, 100, 54,
-    17, 102, 54, 17, 134, 54, 17, 136, 54, 17, 146, 54, 17, 167, 54, 17, 178,
-    54, 17, 171, 54, 17, 182, 54, 5, 217, 134, 166, 54, 5, 217, 134, 239, 28,
-    40, 6, 1, 195, 83, 40, 4, 1, 195, 83, 40, 6, 1, 237, 151, 40, 4, 1, 237,
-    151, 40, 6, 1, 210, 89, 237, 153, 40, 4, 1, 210, 89, 237, 153, 40, 6, 1,
-    226, 7, 40, 4, 1, 226, 7, 40, 6, 1, 239, 45, 40, 4, 1, 239, 45, 40, 6, 1,
-    218, 203, 200, 87, 40, 4, 1, 218, 203, 200, 87, 40, 6, 1, 248, 35, 214,
-    124, 40, 4, 1, 248, 35, 214, 124, 40, 6, 1, 217, 85, 196, 51, 40, 4, 1,
-    217, 85, 196, 51, 40, 6, 1, 196, 48, 3, 249, 139, 196, 51, 40, 4, 1, 196,
-    48, 3, 249, 139, 196, 51, 40, 6, 1, 226, 5, 196, 84, 40, 4, 1, 226, 5,
-    196, 84, 40, 6, 1, 210, 89, 195, 217, 40, 4, 1, 210, 89, 195, 217, 40, 6,
-    1, 226, 5, 63, 40, 4, 1, 226, 5, 63, 40, 6, 1, 244, 203, 222, 47, 195,
-    182, 40, 4, 1, 244, 203, 222, 47, 195, 182, 40, 6, 1, 248, 128, 195, 182,
-    40, 4, 1, 248, 128, 195, 182, 40, 6, 1, 226, 5, 244, 203, 222, 47, 195,
-    182, 40, 4, 1, 226, 5, 244, 203, 222, 47, 195, 182, 40, 6, 1, 196, 5, 40,
-    4, 1, 196, 5, 40, 6, 1, 210, 89, 201, 107, 40, 4, 1, 210, 89, 201, 107,
-    40, 6, 1, 205, 186, 239, 252, 40, 4, 1, 205, 186, 239, 252, 40, 6, 1,
-    205, 186, 237, 7, 40, 4, 1, 205, 186, 237, 7, 40, 6, 1, 205, 186, 236,
-    241, 40, 4, 1, 205, 186, 236, 241, 40, 6, 1, 218, 207, 72, 40, 4, 1, 218,
-    207, 72, 40, 6, 1, 248, 160, 72, 40, 4, 1, 248, 160, 72, 40, 6, 1, 52,
-    218, 207, 72, 40, 4, 1, 52, 218, 207, 72, 40, 1, 218, 121, 72, 38, 40,
-    197, 201, 38, 40, 203, 24, 219, 27, 55, 38, 40, 231, 58, 219, 27, 55, 38,
-    40, 202, 159, 219, 27, 55, 205, 246, 250, 179, 38, 40, 1, 200, 84, 226,
-    147, 38, 40, 1, 68, 38, 40, 1, 196, 24, 38, 40, 1, 66, 38, 40, 1, 232,
-    173, 55, 38, 40, 1, 196, 47, 38, 40, 1, 205, 186, 55, 38, 40, 1, 214,
-    124, 38, 40, 224, 221, 38, 40, 213, 99, 40, 224, 221, 40, 213, 99, 40, 6,
-    1, 237, 166, 40, 4, 1, 237, 166, 40, 6, 1, 237, 142, 40, 4, 1, 237, 142,
-    40, 6, 1, 195, 41, 40, 4, 1, 195, 41, 40, 6, 1, 247, 73, 40, 4, 1, 247,
-    73, 40, 6, 1, 237, 138, 40, 4, 1, 237, 138, 40, 6, 1, 203, 69, 3, 112,
-    122, 40, 4, 1, 203, 69, 3, 112, 122, 40, 6, 1, 200, 243, 40, 4, 1, 200,
-    243, 40, 6, 1, 201, 82, 40, 4, 1, 201, 82, 40, 6, 1, 201, 87, 40, 4, 1,
-    201, 87, 40, 6, 1, 203, 74, 40, 4, 1, 203, 74, 40, 6, 1, 231, 40, 40, 4,
-    1, 231, 40, 40, 6, 1, 206, 127, 40, 4, 1, 206, 127, 40, 6, 1, 52, 72, 40,
-    4, 1, 52, 72, 40, 6, 1, 241, 59, 72, 40, 4, 1, 241, 59, 72, 73, 1, 40,
-    232, 173, 55, 73, 1, 40, 205, 186, 55, 38, 40, 1, 237, 47, 38, 40, 1,
-    226, 5, 69, 25, 1, 63, 25, 1, 155, 25, 1, 66, 25, 1, 223, 187, 25, 1,
-    237, 54, 25, 1, 210, 155, 25, 1, 203, 145, 25, 1, 72, 25, 1, 215, 89, 25,
-    1, 68, 25, 1, 172, 25, 1, 161, 25, 1, 210, 9, 25, 1, 210, 57, 25, 1, 222,
-    187, 25, 1, 219, 187, 25, 1, 203, 162, 25, 1, 217, 157, 25, 1, 216, 162,
-    25, 1, 221, 136, 25, 1, 204, 74, 25, 1, 218, 145, 25, 1, 206, 218, 25, 1,
-    206, 112, 25, 1, 206, 228, 25, 1, 207, 72, 25, 1, 223, 106, 25, 1, 224,
-    172, 25, 1, 215, 154, 25, 1, 215, 186, 25, 1, 216, 133, 25, 1, 195, 234,
-    25, 1, 206, 151, 25, 1, 195, 186, 25, 1, 164, 25, 1, 215, 223, 25, 1,
-    224, 158, 25, 1, 213, 10, 25, 1, 216, 155, 25, 1, 215, 203, 25, 1, 211,
-    218, 25, 1, 196, 240, 25, 1, 213, 79, 25, 1, 235, 182, 25, 1, 209, 140,
-    25, 1, 221, 191, 25, 1, 219, 78, 25, 1, 216, 223, 25, 1, 210, 91, 25, 1,
-    210, 229, 25, 1, 224, 182, 25, 1, 216, 255, 25, 1, 217, 50, 25, 1, 217,
-    71, 25, 1, 206, 198, 25, 1, 211, 223, 25, 1, 234, 223, 25, 1, 235, 44,
-    25, 1, 197, 166, 25, 1, 176, 25, 1, 222, 109, 25, 1, 212, 220, 25, 1,
-    221, 221, 25, 1, 224, 11, 25, 1, 219, 231, 25, 1, 210, 126, 25, 1, 219,
-    164, 25, 1, 166, 25, 1, 202, 122, 25, 1, 224, 101, 25, 1, 218, 251, 25,
-    1, 219, 239, 25, 1, 203, 1, 25, 1, 223, 223, 25, 1, 203, 23, 25, 1, 215,
-    189, 25, 1, 208, 227, 25, 1, 235, 235, 25, 1, 223, 226, 25, 1, 224, 2,
-    25, 38, 117, 223, 235, 25, 38, 117, 201, 25, 25, 216, 161, 25, 234, 217,
-    204, 226, 25, 244, 168, 25, 244, 159, 25, 207, 105, 25, 211, 79, 78, 73,
-    1, 245, 61, 152, 196, 13, 212, 171, 73, 1, 245, 61, 152, 196, 96, 212,
-    171, 73, 1, 245, 61, 152, 196, 13, 207, 23, 73, 1, 245, 61, 152, 196, 96,
-    207, 23, 73, 1, 245, 61, 152, 196, 13, 211, 97, 73, 1, 245, 61, 152, 196,
-    96, 211, 97, 73, 1, 245, 61, 152, 196, 13, 209, 140, 73, 1, 245, 61, 152,
-    196, 96, 209, 140, 73, 1, 236, 74, 237, 250, 152, 154, 73, 1, 130, 237,
-    250, 152, 154, 73, 1, 219, 65, 237, 250, 152, 154, 73, 1, 126, 237, 250,
-    152, 154, 73, 1, 236, 73, 237, 250, 152, 154, 73, 1, 236, 74, 237, 250,
-    222, 176, 152, 154, 73, 1, 130, 237, 250, 222, 176, 152, 154, 73, 1, 219,
-    65, 237, 250, 222, 176, 152, 154, 73, 1, 126, 237, 250, 222, 176, 152,
-    154, 73, 1, 236, 73, 237, 250, 222, 176, 152, 154, 73, 1, 236, 74, 222,
-    176, 152, 154, 73, 1, 130, 222, 176, 152, 154, 73, 1, 219, 65, 222, 176,
-    152, 154, 73, 1, 126, 222, 176, 152, 154, 73, 1, 236, 73, 222, 176, 152,
-    154, 73, 1, 76, 83, 154, 73, 1, 76, 205, 248, 73, 1, 76, 231, 155, 154,
-    73, 1, 221, 203, 53, 241, 102, 251, 90, 73, 1, 210, 215, 124, 51, 73, 1,
-    210, 215, 135, 51, 73, 1, 210, 215, 236, 90, 78, 73, 1, 210, 215, 226,
-    17, 236, 90, 78, 73, 1, 126, 226, 17, 236, 90, 78, 73, 1, 204, 206, 26,
-    130, 202, 11, 73, 1, 204, 206, 26, 126, 202, 11, 8, 6, 1, 237, 42, 251,
-    164, 8, 4, 1, 237, 42, 251, 164, 8, 6, 1, 237, 42, 251, 194, 8, 4, 1,
-    237, 42, 251, 194, 8, 6, 1, 232, 99, 8, 4, 1, 232, 99, 8, 6, 1, 200, 187,
-    8, 4, 1, 200, 187, 8, 6, 1, 201, 184, 8, 4, 1, 201, 184, 8, 6, 1, 241,
-    38, 8, 4, 1, 241, 38, 8, 6, 1, 241, 39, 3, 244, 159, 8, 4, 1, 241, 39, 3,
-    244, 159, 8, 1, 4, 6, 236, 49, 8, 1, 4, 6, 209, 80, 8, 6, 1, 252, 168, 8,
-    4, 1, 252, 168, 8, 6, 1, 251, 49, 8, 4, 1, 251, 49, 8, 6, 1, 250, 150, 8,
-    4, 1, 250, 150, 8, 6, 1, 250, 133, 8, 4, 1, 250, 133, 8, 6, 1, 250, 134,
-    3, 231, 155, 154, 8, 4, 1, 250, 134, 3, 231, 155, 154, 8, 6, 1, 250, 122,
-    8, 4, 1, 250, 122, 8, 6, 1, 210, 89, 247, 208, 3, 238, 253, 8, 4, 1, 210,
-    89, 247, 208, 3, 238, 253, 8, 6, 1, 225, 81, 3, 106, 8, 4, 1, 225, 81, 3,
-    106, 8, 6, 1, 225, 81, 3, 239, 147, 106, 8, 4, 1, 225, 81, 3, 239, 147,
-    106, 8, 6, 1, 225, 81, 3, 204, 196, 26, 239, 147, 106, 8, 4, 1, 225, 81,
-    3, 204, 196, 26, 239, 147, 106, 8, 6, 1, 248, 33, 159, 8, 4, 1, 248, 33,
-    159, 8, 6, 1, 223, 100, 3, 130, 106, 8, 4, 1, 223, 100, 3, 130, 106, 8,
-    6, 1, 177, 3, 181, 204, 196, 214, 20, 8, 4, 1, 177, 3, 181, 204, 196,
-    214, 20, 8, 6, 1, 177, 3, 221, 225, 8, 4, 1, 177, 3, 221, 225, 8, 6, 1,
-    214, 102, 8, 4, 1, 214, 102, 8, 6, 1, 214, 4, 3, 204, 196, 202, 145, 239,
-    195, 8, 4, 1, 214, 4, 3, 204, 196, 202, 145, 239, 195, 8, 6, 1, 214, 4,
-    3, 235, 64, 8, 4, 1, 214, 4, 3, 235, 64, 8, 6, 1, 214, 4, 3, 205, 86,
-    203, 135, 8, 4, 1, 214, 4, 3, 205, 86, 203, 135, 8, 6, 1, 211, 168, 3,
-    204, 196, 202, 145, 239, 195, 8, 4, 1, 211, 168, 3, 204, 196, 202, 145,
-    239, 195, 8, 6, 1, 211, 168, 3, 239, 147, 106, 8, 4, 1, 211, 168, 3, 239,
-    147, 106, 8, 6, 1, 211, 32, 209, 188, 8, 4, 1, 211, 32, 209, 188, 8, 6,
-    1, 209, 121, 209, 188, 8, 4, 1, 209, 121, 209, 188, 8, 6, 1, 199, 231, 3,
-    239, 147, 106, 8, 4, 1, 199, 231, 3, 239, 147, 106, 8, 6, 1, 197, 207, 8,
-    4, 1, 197, 207, 8, 6, 1, 199, 0, 195, 158, 8, 4, 1, 199, 0, 195, 158, 8,
-    6, 1, 202, 163, 3, 106, 8, 4, 1, 202, 163, 3, 106, 8, 6, 1, 202, 163, 3,
-    204, 196, 202, 145, 239, 195, 8, 4, 1, 202, 163, 3, 204, 196, 202, 145,
-    239, 195, 8, 6, 1, 199, 107, 8, 4, 1, 199, 107, 8, 6, 1, 236, 128, 8, 4,
-    1, 236, 128, 8, 6, 1, 225, 248, 8, 4, 1, 225, 248, 8, 6, 1, 241, 155, 8,
-    4, 1, 241, 155, 73, 1, 200, 4, 8, 4, 1, 237, 190, 8, 4, 1, 221, 174, 8,
-    4, 1, 218, 114, 8, 4, 1, 215, 145, 8, 4, 1, 209, 120, 8, 1, 4, 6, 209,
-    120, 8, 4, 1, 201, 22, 8, 4, 1, 200, 79, 8, 6, 1, 226, 39, 240, 231, 8,
-    4, 1, 226, 39, 240, 231, 8, 6, 1, 226, 39, 236, 49, 8, 4, 1, 226, 39,
-    236, 49, 8, 6, 1, 226, 39, 234, 190, 8, 6, 1, 163, 226, 39, 234, 190, 8,
-    4, 1, 163, 226, 39, 234, 190, 8, 6, 1, 163, 159, 8, 4, 1, 163, 159, 8, 6,
-    1, 226, 39, 144, 8, 4, 1, 226, 39, 144, 8, 6, 1, 226, 39, 209, 80, 8, 4,
-    1, 226, 39, 209, 80, 8, 6, 1, 226, 39, 203, 216, 8, 4, 1, 226, 39, 203,
-    216, 73, 1, 126, 244, 241, 252, 22, 73, 1, 244, 168, 73, 1, 206, 182,
-    236, 172, 55, 8, 6, 1, 208, 231, 8, 4, 1, 208, 231, 8, 6, 1, 163, 233,
-    15, 8, 4, 1, 223, 100, 3, 210, 95, 231, 165, 26, 248, 225, 8, 1, 206, 55,
-    238, 253, 8, 6, 1, 218, 56, 3, 239, 195, 8, 4, 1, 218, 56, 3, 239, 195,
-    8, 6, 1, 247, 208, 3, 154, 8, 4, 1, 247, 208, 3, 154, 8, 4, 1, 247, 208,
-    3, 213, 215, 122, 8, 4, 1, 233, 16, 3, 213, 215, 122, 8, 6, 1, 74, 3,
-    235, 64, 8, 4, 1, 74, 3, 235, 64, 8, 6, 1, 236, 50, 3, 106, 8, 4, 1, 236,
-    50, 3, 106, 8, 6, 1, 198, 240, 251, 245, 8, 4, 1, 198, 240, 251, 245, 8,
-    6, 1, 198, 240, 214, 164, 8, 4, 1, 198, 240, 214, 164, 8, 6, 1, 198, 240,
-    200, 99, 8, 4, 1, 198, 240, 200, 99, 8, 6, 1, 234, 191, 3, 214, 182, 106,
-    8, 4, 1, 234, 191, 3, 214, 182, 106, 8, 6, 1, 225, 81, 3, 214, 182, 106,
-    8, 4, 1, 225, 81, 3, 214, 182, 106, 8, 6, 1, 218, 56, 3, 214, 182, 106,
-    8, 4, 1, 218, 56, 3, 214, 182, 106, 8, 6, 1, 211, 32, 3, 214, 182, 106,
-    8, 4, 1, 211, 32, 3, 214, 182, 106, 8, 6, 1, 209, 81, 3, 214, 182, 106,
-    8, 4, 1, 209, 81, 3, 214, 182, 106, 8, 6, 1, 233, 16, 3, 122, 8, 6, 1,
-    210, 89, 192, 69, 8, 6, 1, 145, 234, 190, 8, 6, 1, 223, 100, 3, 248, 225,
-    8, 6, 1, 4, 6, 68, 8, 1, 4, 6, 211, 167, 8, 6, 1, 163, 225, 80, 8, 6, 1,
-    163, 203, 216, 8, 6, 1, 225, 218, 3, 241, 57, 8, 6, 1, 245, 75, 8, 6, 1,
-    248, 206, 8, 4, 1, 248, 206, 8, 6, 1, 214, 124, 8, 4, 1, 214, 124, 8, 6,
-    1, 118, 3, 106, 8, 4, 1, 118, 3, 106, 8, 6, 1, 233, 152, 63, 8, 4, 1,
-    233, 152, 63, 8, 6, 1, 233, 152, 68, 8, 4, 1, 233, 152, 68, 8, 6, 1, 233,
-    152, 66, 8, 4, 1, 233, 152, 66, 8, 6, 1, 251, 87, 197, 199, 8, 4, 1, 251,
-    87, 197, 199, 8, 6, 1, 247, 208, 3, 213, 215, 122, 8, 6, 1, 209, 81, 3,
-    122, 8, 6, 1, 195, 159, 3, 213, 215, 122, 8, 236, 177, 1, 206, 96, 68,
-    73, 1, 6, 233, 16, 3, 106, 73, 1, 4, 33, 214, 164, 8, 1, 4, 6, 163, 221,
-    136, 8, 236, 177, 1, 210, 89, 236, 49, 8, 236, 177, 1, 210, 89, 214, 3,
-    8, 236, 177, 1, 226, 17, 221, 136, 8, 236, 177, 1, 230, 249, 221, 231, 8,
-    236, 177, 1, 250, 251, 221, 136, 204, 41, 217, 232, 1, 63, 204, 41, 217,
-    232, 1, 68, 204, 41, 217, 232, 2, 237, 168, 204, 41, 217, 232, 1, 66,
-    204, 41, 217, 232, 1, 69, 204, 41, 217, 232, 1, 72, 204, 41, 217, 232, 2,
-    232, 167, 204, 41, 217, 232, 1, 224, 11, 204, 41, 217, 232, 1, 224, 117,
-    204, 41, 217, 232, 1, 233, 144, 204, 41, 217, 232, 1, 233, 202, 204, 41,
-    217, 232, 2, 251, 51, 204, 41, 217, 232, 1, 244, 182, 204, 41, 217, 232,
-    1, 245, 49, 204, 41, 217, 232, 1, 225, 129, 204, 41, 217, 232, 1, 225,
-    174, 204, 41, 217, 232, 1, 201, 55, 204, 41, 217, 232, 1, 201, 61, 204,
-    41, 217, 232, 1, 240, 11, 204, 41, 217, 232, 1, 240, 20, 204, 41, 217,
-    232, 1, 149, 204, 41, 217, 232, 1, 202, 169, 204, 41, 217, 232, 1, 239,
-    28, 204, 41, 217, 232, 1, 239, 156, 204, 41, 217, 232, 1, 216, 50, 204,
-    41, 217, 232, 1, 212, 117, 204, 41, 217, 232, 1, 212, 234, 204, 41, 217,
-    232, 1, 248, 116, 204, 41, 217, 232, 1, 248, 188, 204, 41, 217, 232, 1,
-    218, 251, 204, 41, 217, 232, 1, 209, 232, 204, 41, 217, 232, 1, 222, 7,
-    204, 41, 217, 232, 1, 209, 167, 204, 41, 217, 232, 1, 205, 200, 204, 41,
-    217, 232, 1, 231, 193, 204, 41, 217, 232, 18, 2, 63, 204, 41, 217, 232,
-    18, 2, 68, 204, 41, 217, 232, 18, 2, 66, 204, 41, 217, 232, 18, 2, 69,
-    204, 41, 217, 232, 18, 2, 214, 102, 204, 41, 217, 232, 212, 112, 220, 28,
-    204, 41, 217, 232, 212, 112, 220, 27, 204, 41, 217, 232, 212, 112, 220,
-    26, 204, 41, 217, 232, 212, 112, 220, 25, 173, 226, 70, 191, 97, 211, 87,
-    173, 226, 70, 191, 97, 232, 225, 173, 226, 70, 191, 115, 211, 85, 173,
-    226, 70, 191, 97, 206, 21, 173, 226, 70, 191, 97, 237, 26, 173, 226, 70,
-    191, 115, 206, 18, 173, 226, 70, 211, 88, 78, 173, 226, 70, 212, 148, 78,
-    173, 226, 70, 209, 108, 78, 173, 226, 70, 211, 89, 78, 213, 2, 1, 155,
-    213, 2, 1, 224, 146, 213, 2, 1, 234, 123, 213, 2, 1, 217, 71, 213, 2, 1,
-    247, 174, 213, 2, 1, 247, 16, 213, 2, 1, 225, 214, 213, 2, 1, 215, 109,
-    213, 2, 1, 189, 213, 2, 1, 202, 233, 213, 2, 1, 240, 136, 213, 2, 1, 176,
-    213, 2, 1, 161, 213, 2, 1, 213, 6, 213, 2, 1, 249, 145, 213, 2, 1, 166,
-    213, 2, 1, 201, 113, 213, 2, 1, 201, 103, 213, 2, 1, 237, 156, 213, 2, 1,
-    197, 166, 213, 2, 1, 195, 74, 213, 2, 1, 195, 115, 213, 2, 1, 4, 63, 213,
-    2, 1, 164, 213, 2, 1, 169, 213, 2, 1, 172, 213, 2, 1, 207, 50, 213, 2, 1,
-    183, 213, 2, 1, 142, 213, 2, 1, 63, 213, 2, 1, 68, 213, 2, 1, 66, 213, 2,
-    1, 69, 213, 2, 1, 72, 213, 2, 1, 211, 159, 213, 2, 1, 196, 208, 213, 2,
-    1, 235, 239, 213, 2, 1, 234, 10, 213, 2, 1, 237, 54, 213, 2, 204, 152, 1,
-    197, 166, 213, 2, 204, 152, 1, 164, 213, 2, 1, 201, 78, 213, 2, 1, 201,
-    66, 213, 2, 1, 240, 41, 213, 2, 1, 216, 86, 213, 2, 1, 251, 131, 164,
-    213, 2, 1, 198, 243, 207, 50, 213, 2, 1, 198, 244, 142, 213, 2, 1, 250,
-    186, 235, 239, 213, 2, 204, 152, 1, 169, 213, 2, 204, 98, 1, 169, 213, 2,
-    1, 247, 133, 213, 2, 206, 62, 232, 138, 78, 213, 2, 52, 232, 138, 78,
-    213, 2, 117, 207, 42, 213, 2, 117, 52, 207, 42, 208, 188, 2, 251, 51,
-    208, 188, 2, 199, 2, 208, 188, 1, 63, 208, 188, 1, 252, 168, 208, 188, 1,
-    68, 208, 188, 1, 226, 120, 208, 188, 1, 66, 208, 188, 1, 199, 245, 208,
-    188, 1, 110, 144, 208, 188, 1, 110, 209, 182, 208, 188, 1, 110, 159, 208,
-    188, 1, 110, 222, 38, 208, 188, 1, 69, 208, 188, 1, 237, 54, 208, 188, 1,
-    251, 200, 208, 188, 1, 72, 208, 188, 1, 214, 102, 208, 188, 1, 250, 150,
-    208, 188, 1, 155, 208, 188, 1, 224, 146, 208, 188, 1, 234, 123, 208, 188,
-    1, 233, 230, 208, 188, 1, 217, 71, 208, 188, 1, 247, 174, 208, 188, 1,
-    247, 16, 208, 188, 1, 225, 214, 208, 188, 1, 225, 180, 208, 188, 1, 215,
-    109, 208, 188, 1, 201, 78, 208, 188, 1, 201, 66, 208, 188, 1, 240, 41,
-    208, 188, 1, 240, 25, 208, 188, 1, 216, 86, 208, 188, 1, 189, 208, 188,
-    1, 202, 233, 208, 188, 1, 240, 136, 208, 188, 1, 239, 176, 208, 188, 1,
-    176, 208, 188, 1, 161, 208, 188, 1, 213, 6, 208, 188, 1, 249, 145, 208,
-    188, 1, 248, 197, 208, 188, 1, 166, 208, 188, 1, 164, 208, 188, 1, 169,
-    208, 188, 1, 172, 208, 188, 1, 199, 152, 208, 188, 1, 207, 50, 208, 188,
-    1, 205, 80, 208, 188, 1, 183, 208, 188, 1, 142, 208, 188, 1, 222, 37,
-    208, 188, 108, 2, 232, 244, 208, 188, 18, 2, 252, 168, 208, 188, 18, 2,
-    68, 208, 188, 18, 2, 226, 120, 208, 188, 18, 2, 66, 208, 188, 18, 2, 199,
-    245, 208, 188, 18, 2, 110, 144, 208, 188, 18, 2, 110, 209, 182, 208, 188,
-    18, 2, 110, 159, 208, 188, 18, 2, 110, 222, 38, 208, 188, 18, 2, 69, 208,
-    188, 18, 2, 237, 54, 208, 188, 18, 2, 251, 200, 208, 188, 18, 2, 72, 208,
-    188, 18, 2, 214, 102, 208, 188, 18, 2, 250, 150, 208, 188, 2, 199, 7,
-    208, 188, 2, 247, 133, 208, 188, 240, 88, 208, 188, 52, 240, 88, 208,
-    188, 17, 195, 79, 208, 188, 17, 100, 208, 188, 17, 102, 208, 188, 17,
-    134, 208, 188, 17, 136, 208, 188, 17, 146, 208, 188, 17, 167, 208, 188,
-    17, 178, 208, 188, 17, 171, 208, 188, 17, 182, 38, 101, 17, 195, 79, 38,
-    101, 17, 100, 38, 101, 17, 102, 38, 101, 17, 134, 38, 101, 17, 136, 38,
-    101, 17, 146, 38, 101, 17, 167, 38, 101, 17, 178, 38, 101, 17, 171, 38,
-    101, 17, 182, 38, 101, 1, 63, 38, 101, 1, 66, 38, 101, 1, 155, 38, 101,
-    1, 176, 38, 101, 1, 161, 38, 101, 1, 169, 38, 101, 1, 199, 34, 38, 101,
-    2, 250, 132, 101, 2, 205, 147, 247, 133, 101, 2, 247, 134, 199, 7, 101,
-    2, 52, 247, 134, 199, 7, 101, 2, 247, 134, 102, 101, 2, 247, 134, 134,
-    101, 2, 247, 134, 250, 132, 101, 2, 211, 196, 101, 234, 87, 235, 134,
-    101, 247, 110, 101, 232, 130, 101, 2, 206, 100, 101, 225, 206, 214, 127,
-    101, 1, 250, 122, 101, 18, 2, 250, 122, 224, 215, 222, 110, 17, 195, 79,
-    224, 215, 222, 110, 17, 100, 224, 215, 222, 110, 17, 102, 224, 215, 222,
-    110, 17, 134, 224, 215, 222, 110, 17, 136, 224, 215, 222, 110, 17, 146,
-    224, 215, 222, 110, 17, 167, 224, 215, 222, 110, 17, 178, 224, 215, 222,
-    110, 17, 171, 224, 215, 222, 110, 17, 182, 224, 215, 222, 110, 1, 155,
-    224, 215, 222, 110, 1, 224, 146, 224, 215, 222, 110, 1, 234, 123, 224,
-    215, 222, 110, 1, 217, 71, 224, 215, 222, 110, 1, 183, 224, 215, 222,
-    110, 1, 207, 50, 224, 215, 222, 110, 1, 195, 115, 224, 215, 222, 110, 1,
-    215, 109, 224, 215, 222, 110, 1, 189, 224, 215, 222, 110, 1, 231, 79,
-    224, 215, 222, 110, 1, 176, 224, 215, 222, 110, 1, 161, 224, 215, 222,
-    110, 1, 213, 6, 224, 215, 222, 110, 1, 166, 224, 215, 222, 110, 1, 240,
-    136, 224, 215, 222, 110, 1, 249, 145, 224, 215, 222, 110, 1, 169, 224,
-    215, 222, 110, 1, 164, 224, 215, 222, 110, 1, 172, 224, 215, 222, 110, 1,
-    197, 166, 224, 215, 222, 110, 1, 202, 233, 224, 215, 222, 110, 1, 142,
-    224, 215, 222, 110, 1, 199, 152, 224, 215, 222, 110, 1, 247, 174, 224,
-    215, 222, 110, 1, 63, 224, 215, 222, 110, 1, 214, 164, 224, 215, 222,
-    110, 1, 68, 224, 215, 222, 110, 1, 214, 102, 224, 215, 222, 110, 18, 200,
-    99, 224, 215, 222, 110, 18, 69, 224, 215, 222, 110, 18, 66, 224, 215,
-    222, 110, 18, 237, 54, 224, 215, 222, 110, 18, 72, 224, 215, 222, 110,
-    152, 212, 133, 224, 215, 222, 110, 152, 247, 149, 224, 215, 222, 110,
-    152, 247, 150, 212, 133, 224, 215, 222, 110, 2, 240, 250, 224, 215, 222,
-    110, 2, 206, 120, 210, 138, 1, 155, 210, 138, 1, 234, 123, 210, 138, 1,
-    217, 71, 210, 138, 1, 189, 210, 138, 1, 240, 136, 210, 138, 1, 176, 210,
-    138, 1, 161, 210, 138, 1, 249, 145, 210, 138, 1, 166, 210, 138, 1, 247,
-    174, 210, 138, 1, 225, 214, 210, 138, 1, 215, 109, 210, 138, 1, 183, 210,
-    138, 1, 169, 210, 138, 1, 172, 210, 138, 1, 164, 210, 138, 1, 197, 166,
-    210, 138, 1, 142, 210, 138, 1, 219, 241, 210, 138, 1, 217, 50, 210, 138,
-    1, 217, 159, 210, 138, 1, 215, 74, 210, 138, 1, 63, 210, 138, 18, 2, 68,
-    210, 138, 18, 2, 66, 210, 138, 18, 2, 69, 210, 138, 18, 2, 251, 200, 210,
-    138, 18, 2, 72, 210, 138, 18, 2, 250, 150, 210, 138, 18, 2, 236, 116,
-    210, 138, 18, 2, 237, 82, 210, 138, 108, 2, 217, 73, 210, 138, 108, 2,
-    218, 55, 210, 138, 108, 2, 144, 210, 138, 108, 2, 233, 15, 210, 138, 199,
-    7, 210, 138, 208, 133, 78, 29, 137, 202, 93, 29, 137, 202, 92, 29, 137,
-    202, 90, 29, 137, 202, 95, 29, 137, 210, 49, 29, 137, 210, 33, 29, 137,
-    210, 28, 29, 137, 210, 30, 29, 137, 210, 46, 29, 137, 210, 39, 29, 137,
-    210, 32, 29, 137, 210, 51, 29, 137, 210, 34, 29, 137, 210, 53, 29, 137,
-    210, 50, 29, 137, 219, 52, 29, 137, 219, 43, 29, 137, 219, 46, 29, 137,
-    212, 191, 29, 137, 212, 202, 29, 137, 212, 203, 29, 137, 205, 64, 29,
-    137, 226, 133, 29, 137, 226, 140, 29, 137, 205, 75, 29, 137, 205, 62, 29,
-    137, 212, 243, 29, 137, 232, 50, 29, 137, 205, 59, 225, 199, 2, 213, 169,
-    225, 199, 2, 247, 54, 225, 199, 2, 222, 205, 225, 199, 2, 197, 55, 225,
-    199, 1, 63, 225, 199, 1, 230, 249, 224, 219, 225, 199, 1, 68, 225, 199,
-    1, 226, 120, 225, 199, 1, 66, 225, 199, 1, 213, 244, 247, 24, 225, 199,
-    1, 217, 72, 222, 163, 225, 199, 1, 217, 72, 222, 164, 210, 199, 225, 199,
-    1, 69, 225, 199, 1, 251, 200, 225, 199, 1, 72, 225, 199, 1, 155, 225,
-    199, 1, 225, 70, 208, 201, 225, 199, 1, 225, 70, 218, 99, 225, 199, 1,
-    234, 123, 225, 199, 1, 234, 124, 218, 99, 225, 199, 1, 217, 71, 225, 199,
-    1, 247, 174, 225, 199, 1, 247, 175, 218, 99, 225, 199, 1, 225, 214, 225,
-    199, 1, 215, 110, 218, 99, 225, 199, 1, 225, 215, 220, 85, 225, 199, 1,
-    215, 109, 225, 199, 1, 201, 78, 225, 199, 1, 201, 79, 220, 85, 225, 199,
-    1, 240, 41, 225, 199, 1, 240, 42, 220, 85, 225, 199, 1, 218, 1, 218, 99,
-    225, 199, 1, 189, 225, 199, 1, 203, 169, 218, 99, 225, 199, 1, 240, 136,
-    225, 199, 1, 240, 137, 220, 85, 225, 199, 1, 176, 225, 199, 1, 161, 225,
-    199, 1, 213, 244, 218, 99, 225, 199, 1, 249, 145, 225, 199, 1, 249, 146,
-    218, 99, 225, 199, 1, 166, 225, 199, 1, 164, 225, 199, 1, 169, 225, 199,
-    1, 210, 252, 251, 210, 225, 199, 1, 172, 225, 199, 1, 197, 166, 225, 199,
-    1, 209, 23, 218, 99, 225, 199, 1, 209, 23, 220, 85, 225, 199, 1, 183,
-    225, 199, 1, 142, 225, 199, 2, 247, 55, 203, 27, 225, 199, 18, 2, 203,
-    97, 225, 199, 18, 2, 202, 16, 225, 199, 18, 2, 196, 237, 225, 199, 18, 2,
-    196, 238, 219, 175, 225, 199, 18, 2, 204, 121, 225, 199, 18, 2, 204, 122,
-    219, 163, 225, 199, 18, 2, 203, 121, 225, 199, 18, 2, 239, 82, 218, 98,
-    225, 199, 18, 2, 213, 48, 225, 199, 108, 2, 224, 175, 225, 199, 108, 2,
-    213, 62, 225, 199, 108, 2, 247, 159, 225, 199, 213, 182, 225, 199, 50,
-    210, 111, 225, 199, 53, 210, 111, 225, 199, 213, 232, 251, 99, 225, 199,
-    213, 232, 220, 105, 225, 199, 213, 232, 221, 178, 225, 199, 213, 232,
-    197, 48, 225, 199, 213, 232, 213, 183, 225, 199, 213, 232, 222, 67, 225,
-    199, 213, 232, 221, 172, 225, 199, 213, 232, 252, 0, 225, 199, 213, 232,
-    252, 1, 252, 0, 225, 199, 213, 232, 212, 159, 225, 199, 163, 213, 232,
-    212, 159, 225, 199, 213, 178, 225, 199, 17, 195, 79, 225, 199, 17, 100,
-    225, 199, 17, 102, 225, 199, 17, 134, 225, 199, 17, 136, 225, 199, 17,
-    146, 225, 199, 17, 167, 225, 199, 17, 178, 225, 199, 17, 171, 225, 199,
-    17, 182, 225, 199, 213, 232, 202, 59, 201, 19, 225, 199, 213, 232, 225,
-    244, 75, 1, 207, 25, 233, 230, 75, 1, 207, 25, 247, 16, 75, 1, 207, 25,
-    225, 180, 75, 1, 207, 25, 216, 86, 75, 1, 207, 25, 248, 197, 75, 2, 207,
-    25, 208, 185, 75, 73, 1, 207, 25, 210, 156, 75, 1, 49, 223, 53, 215, 109,
-    75, 1, 49, 223, 53, 235, 239, 75, 1, 49, 223, 53, 234, 123, 75, 1, 49,
-    223, 53, 233, 230, 75, 1, 49, 223, 53, 225, 214, 75, 1, 49, 223, 53, 225,
-    180, 75, 1, 49, 223, 53, 240, 41, 75, 1, 49, 223, 53, 240, 25, 75, 1, 49,
-    223, 53, 216, 86, 75, 49, 223, 53, 17, 195, 79, 75, 49, 223, 53, 17, 100,
-    75, 49, 223, 53, 17, 102, 75, 49, 223, 53, 17, 134, 75, 49, 223, 53, 17,
-    136, 75, 49, 223, 53, 17, 146, 75, 49, 223, 53, 17, 167, 75, 49, 223, 53,
-    17, 178, 75, 49, 223, 53, 17, 171, 75, 49, 223, 53, 17, 182, 75, 1, 49,
-    223, 53, 222, 37, 75, 1, 49, 223, 53, 240, 136, 75, 1, 49, 223, 53, 239,
-    176, 75, 1, 49, 223, 53, 249, 145, 75, 1, 49, 223, 53, 248, 197, 247, 9,
-    1, 63, 247, 9, 1, 68, 247, 9, 1, 66, 247, 9, 1, 69, 247, 9, 1, 251, 200,
-    247, 9, 1, 72, 247, 9, 1, 155, 247, 9, 1, 224, 146, 247, 9, 1, 234, 123,
-    247, 9, 1, 233, 230, 247, 9, 1, 216, 236, 247, 9, 1, 217, 71, 247, 9, 1,
-    247, 16, 247, 9, 1, 245, 77, 247, 9, 1, 225, 214, 247, 9, 1, 225, 180,
-    247, 9, 1, 216, 225, 247, 9, 1, 216, 227, 247, 9, 1, 216, 226, 247, 9, 1,
-    189, 247, 9, 1, 202, 233, 247, 9, 1, 240, 136, 247, 9, 1, 239, 176, 247,
-    9, 1, 215, 152, 247, 9, 1, 176, 247, 9, 1, 240, 41, 247, 9, 1, 161, 247,
-    9, 1, 212, 54, 247, 9, 1, 213, 6, 247, 9, 1, 249, 145, 247, 9, 1, 248,
-    197, 247, 9, 1, 218, 133, 247, 9, 1, 166, 247, 9, 1, 249, 45, 247, 9, 1,
-    164, 247, 9, 1, 169, 247, 9, 1, 172, 247, 9, 1, 199, 152, 247, 9, 1, 205,
-    80, 247, 9, 1, 183, 247, 9, 1, 142, 247, 9, 18, 2, 252, 168, 247, 9, 18,
-    2, 68, 247, 9, 18, 2, 226, 120, 247, 9, 18, 2, 237, 33, 247, 9, 18, 2,
-    66, 247, 9, 18, 2, 214, 164, 247, 9, 18, 2, 72, 247, 9, 18, 2, 251, 200,
-    247, 9, 18, 2, 250, 150, 247, 9, 18, 2, 200, 99, 247, 9, 108, 2, 164,
-    247, 9, 108, 2, 169, 247, 9, 108, 2, 172, 247, 9, 108, 2, 197, 166, 247,
-    9, 1, 48, 225, 80, 247, 9, 1, 48, 234, 190, 247, 9, 1, 48, 217, 73, 247,
-    9, 108, 2, 48, 217, 73, 247, 9, 1, 48, 247, 18, 247, 9, 1, 48, 203, 216,
-    247, 9, 1, 48, 218, 55, 247, 9, 1, 48, 214, 3, 247, 9, 1, 48, 196, 148,
-    247, 9, 1, 48, 144, 247, 9, 1, 48, 159, 247, 9, 1, 48, 205, 83, 247, 9,
-    108, 2, 48, 221, 136, 247, 9, 108, 2, 48, 233, 15, 247, 9, 17, 195, 79,
-    247, 9, 17, 100, 247, 9, 17, 102, 247, 9, 17, 134, 247, 9, 17, 136, 247,
-    9, 17, 146, 247, 9, 17, 167, 247, 9, 17, 178, 247, 9, 17, 171, 247, 9,
-    17, 182, 247, 9, 211, 214, 205, 120, 247, 9, 211, 214, 240, 88, 247, 9,
-    211, 214, 52, 240, 88, 247, 9, 211, 214, 201, 165, 240, 88, 75, 1, 224,
-    139, 234, 123, 75, 1, 224, 139, 247, 174, 75, 1, 224, 139, 247, 16, 75,
-    1, 224, 139, 225, 214, 75, 1, 224, 139, 225, 180, 75, 1, 224, 139, 215,
-    109, 75, 1, 224, 139, 201, 78, 75, 1, 224, 139, 201, 66, 75, 1, 224, 139,
-    240, 41, 75, 1, 224, 139, 240, 25, 75, 1, 224, 139, 239, 176, 75, 1, 224,
-    139, 176, 75, 1, 224, 139, 183, 75, 1, 224, 139, 142, 75, 1, 224, 139,
-    232, 80, 75, 1, 224, 139, 235, 239, 75, 73, 1, 224, 139, 210, 156, 75, 1,
-    224, 139, 196, 208, 75, 1, 224, 139, 195, 115, 75, 1, 224, 139, 169, 75,
-    221, 248, 224, 139, 214, 187, 75, 221, 248, 224, 139, 211, 110, 75, 221,
-    248, 224, 139, 231, 248, 75, 16, 251, 186, 236, 89, 75, 16, 251, 186,
-    100, 75, 16, 251, 186, 102, 75, 1, 251, 186, 169, 75, 2, 213, 165, 224,
-    248, 202, 11, 75, 2, 49, 223, 53, 202, 9, 75, 2, 49, 223, 53, 202, 6, 75,
-    1, 206, 128, 213, 212, 247, 16, 75, 1, 206, 128, 213, 212, 207, 50, 49,
-    199, 24, 1, 126, 224, 11, 49, 199, 24, 1, 130, 224, 11, 49, 199, 24, 1,
-    126, 224, 117, 49, 199, 24, 1, 130, 224, 117, 49, 199, 24, 1, 126, 224,
-    126, 49, 199, 24, 1, 130, 224, 126, 49, 199, 24, 1, 126, 233, 144, 49,
-    199, 24, 1, 130, 233, 144, 49, 199, 24, 1, 126, 216, 252, 49, 199, 24, 1,
-    130, 216, 252, 49, 199, 24, 1, 126, 244, 182, 49, 199, 24, 1, 130, 244,
-    182, 49, 199, 24, 1, 126, 245, 49, 49, 199, 24, 1, 130, 245, 49, 49, 199,
-    24, 1, 126, 205, 200, 49, 199, 24, 1, 130, 205, 200, 49, 199, 24, 1, 126,
-    215, 73, 49, 199, 24, 1, 130, 215, 73, 49, 199, 24, 1, 126, 239, 28, 49,
-    199, 24, 1, 130, 239, 28, 49, 199, 24, 1, 126, 149, 49, 199, 24, 1, 130,
-    149, 49, 199, 24, 1, 126, 202, 169, 49, 199, 24, 1, 130, 202, 169, 49,
-    199, 24, 1, 126, 216, 50, 49, 199, 24, 1, 130, 216, 50, 49, 199, 24, 1,
-    126, 248, 116, 49, 199, 24, 1, 130, 248, 116, 49, 199, 24, 1, 126, 212,
-    117, 49, 199, 24, 1, 130, 212, 117, 49, 199, 24, 1, 126, 212, 234, 49,
-    199, 24, 1, 130, 212, 234, 49, 199, 24, 1, 126, 235, 51, 49, 199, 24, 1,
-    130, 235, 51, 49, 199, 24, 1, 126, 218, 251, 49, 199, 24, 1, 130, 218,
-    251, 49, 199, 24, 1, 126, 196, 3, 49, 199, 24, 1, 130, 196, 3, 49, 199,
-    24, 1, 126, 209, 232, 49, 199, 24, 1, 130, 209, 232, 49, 199, 24, 1, 126,
-    222, 7, 49, 199, 24, 1, 130, 222, 7, 49, 199, 24, 1, 126, 198, 248, 49,
-    199, 24, 1, 130, 198, 248, 49, 199, 24, 1, 126, 231, 193, 49, 199, 24, 1,
-    130, 231, 193, 49, 199, 24, 1, 126, 72, 49, 199, 24, 1, 130, 72, 49, 199,
-    24, 220, 82, 225, 13, 49, 199, 24, 18, 252, 168, 49, 199, 24, 18, 68, 49,
-    199, 24, 18, 200, 99, 49, 199, 24, 18, 66, 49, 199, 24, 18, 69, 49, 199,
-    24, 18, 72, 49, 199, 24, 220, 82, 224, 120, 49, 199, 24, 18, 230, 210,
-    49, 199, 24, 18, 200, 98, 49, 199, 24, 18, 200, 114, 49, 199, 24, 18,
-    250, 148, 49, 199, 24, 18, 250, 122, 49, 199, 24, 18, 251, 106, 49, 199,
-    24, 18, 251, 123, 49, 199, 24, 152, 220, 82, 237, 14, 49, 199, 24, 152,
-    220, 82, 215, 151, 49, 199, 24, 152, 220, 82, 202, 169, 49, 199, 24, 152,
-    220, 82, 205, 173, 49, 199, 24, 16, 223, 245, 49, 199, 24, 16, 215, 151,
-    49, 199, 24, 16, 208, 229, 49, 199, 24, 16, 231, 194, 231, 180, 49, 199,
-    24, 16, 224, 0, 223, 255, 219, 182, 219, 248, 1, 69, 219, 182, 219, 248,
-    1, 72, 219, 182, 219, 248, 1, 247, 16, 219, 182, 219, 248, 1, 215, 109,
-    219, 182, 219, 248, 1, 201, 78, 219, 182, 219, 248, 1, 201, 66, 219, 182,
-    219, 248, 1, 240, 41, 219, 182, 219, 248, 1, 240, 25, 219, 182, 219, 248,
-    1, 216, 86, 219, 182, 219, 248, 1, 207, 50, 219, 182, 219, 248, 1, 205,
-    80, 219, 182, 219, 248, 18, 2, 226, 120, 219, 182, 219, 248, 18, 2, 199,
-    245, 219, 182, 219, 248, 18, 2, 252, 132, 219, 182, 219, 248, 18, 2, 250,
-    150, 219, 182, 219, 248, 18, 2, 252, 124, 219, 182, 219, 248, 245, 92,
-    219, 182, 219, 248, 251, 206, 224, 108, 219, 182, 219, 248, 251, 80, 219,
-    182, 219, 248, 5, 210, 117, 78, 219, 182, 219, 248, 197, 9, 210, 117, 78,
-    219, 182, 219, 248, 18, 2, 199, 2, 219, 182, 219, 248, 199, 7, 35, 5,
-    201, 59, 35, 5, 201, 62, 35, 5, 201, 65, 35, 5, 201, 63, 35, 5, 201, 64,
-    35, 5, 201, 61, 35, 5, 240, 19, 35, 5, 240, 21, 35, 5, 240, 24, 35, 5,
-    240, 22, 35, 5, 240, 23, 35, 5, 240, 20, 35, 5, 237, 143, 35, 5, 237,
-    147, 35, 5, 237, 155, 35, 5, 237, 152, 35, 5, 237, 153, 35, 5, 237, 144,
-    35, 5, 247, 71, 35, 5, 247, 65, 35, 5, 247, 67, 35, 5, 247, 70, 35, 5,
-    247, 68, 35, 5, 247, 69, 35, 5, 247, 66, 35, 5, 249, 45, 35, 5, 249, 24,
-    35, 5, 249, 36, 35, 5, 249, 44, 35, 5, 249, 39, 35, 5, 249, 40, 35, 5,
-    249, 28, 8, 4, 1, 249, 74, 251, 134, 8, 4, 1, 39, 210, 87, 8, 4, 1, 248,
-    132, 69, 8, 4, 1, 249, 74, 69, 8, 4, 1, 237, 136, 3, 235, 64, 8, 4, 1,
-    222, 149, 236, 49, 8, 4, 1, 145, 234, 191, 3, 241, 57, 8, 4, 1, 223, 100,
-    3, 226, 17, 222, 204, 209, 80, 8, 4, 1, 223, 100, 3, 52, 112, 202, 84, 8,
-    4, 1, 223, 100, 3, 112, 210, 2, 8, 4, 1, 221, 137, 3, 241, 57, 8, 4, 1,
-    218, 56, 3, 241, 57, 8, 4, 1, 236, 216, 3, 241, 57, 8, 4, 1, 248, 132,
-    72, 8, 4, 1, 248, 132, 177, 3, 106, 8, 4, 1, 192, 177, 3, 106, 8, 4, 1,
-    226, 17, 214, 164, 8, 4, 1, 163, 214, 165, 3, 106, 8, 4, 1, 163, 214,
-    165, 3, 231, 155, 106, 8, 4, 1, 163, 177, 214, 88, 8, 4, 1, 163, 177,
-    214, 89, 3, 106, 8, 4, 1, 204, 231, 144, 8, 1, 4, 6, 211, 32, 3, 53, 222,
-    172, 8, 4, 1, 211, 32, 197, 37, 232, 187, 8, 4, 1, 52, 144, 8, 4, 1, 211,
-    32, 3, 241, 57, 8, 4, 1, 52, 211, 32, 3, 241, 57, 8, 4, 1, 145, 144, 8,
-    4, 1, 145, 211, 32, 3, 210, 2, 8, 4, 1, 249, 64, 236, 141, 8, 4, 1, 118,
-    3, 206, 182, 53, 222, 172, 8, 4, 1, 118, 249, 80, 3, 206, 182, 53, 222,
-    172, 8, 4, 1, 200, 90, 8, 4, 1, 163, 200, 90, 8, 4, 1, 118, 3, 50, 122,
-    8, 4, 1, 245, 75, 8, 4, 1, 245, 76, 3, 126, 53, 210, 2, 8, 4, 1, 245, 76,
-    3, 126, 50, 207, 85, 8, 4, 1, 196, 223, 3, 126, 53, 210, 2, 8, 4, 1, 196,
-    223, 3, 181, 50, 222, 172, 8, 4, 1, 196, 223, 3, 181, 50, 222, 173, 26,
-    126, 53, 210, 2, 8, 4, 1, 196, 223, 3, 181, 50, 222, 173, 3, 207, 85, 8,
-    4, 1, 196, 149, 3, 206, 182, 53, 222, 172, 73, 248, 48, 3, 226, 17, 248,
-    47, 73, 1, 4, 232, 99, 73, 1, 4, 223, 100, 3, 226, 17, 222, 204, 209, 80,
-    73, 1, 4, 223, 100, 3, 112, 202, 84, 73, 1, 4, 118, 3, 50, 122, 8, 4, 1,
-    208, 246, 196, 84, 8, 4, 1, 226, 5, 69, 8, 4, 1, 192, 214, 164, 8, 4, 1,
-    200, 41, 8, 4, 1, 226, 17, 251, 134, 32, 1, 4, 6, 214, 124, 8, 4, 1, 237,
-    158, 239, 111, 3, 210, 95, 122, 8, 4, 1, 201, 115, 239, 111, 3, 210, 95,
-    122, 95, 4, 1, 63, 95, 4, 1, 69, 95, 4, 1, 68, 95, 4, 1, 72, 95, 4, 1,
-    66, 95, 4, 1, 199, 230, 95, 4, 1, 234, 123, 95, 4, 1, 155, 95, 4, 1, 234,
-    48, 95, 4, 1, 233, 192, 95, 4, 1, 233, 144, 95, 4, 1, 233, 76, 95, 4, 1,
-    233, 36, 95, 4, 1, 142, 95, 4, 1, 232, 147, 95, 4, 1, 232, 71, 95, 4, 1,
-    231, 193, 95, 4, 1, 231, 75, 95, 4, 1, 231, 44, 95, 4, 1, 172, 95, 4, 1,
-    222, 197, 95, 4, 1, 222, 109, 95, 4, 1, 222, 7, 95, 4, 1, 221, 191, 95,
-    4, 1, 221, 160, 95, 4, 1, 166, 95, 4, 1, 219, 207, 95, 4, 1, 219, 78, 95,
-    4, 1, 218, 251, 95, 4, 1, 218, 145, 95, 4, 1, 176, 95, 4, 1, 231, 217,
-    95, 4, 1, 217, 231, 95, 4, 1, 217, 118, 95, 4, 1, 216, 223, 95, 4, 1,
-    216, 50, 95, 4, 1, 215, 186, 95, 4, 1, 215, 120, 95, 4, 1, 211, 96, 95,
-    4, 1, 211, 82, 95, 4, 1, 211, 75, 95, 4, 1, 211, 65, 95, 4, 1, 211, 54,
-    95, 4, 1, 211, 52, 95, 4, 1, 183, 95, 4, 1, 209, 80, 95, 4, 1, 208, 147,
-    95, 4, 1, 206, 112, 95, 4, 1, 205, 200, 95, 4, 1, 204, 172, 95, 4, 1,
-    204, 72, 95, 4, 1, 240, 136, 95, 4, 1, 189, 95, 4, 1, 239, 252, 95, 4, 1,
-    203, 68, 95, 4, 1, 239, 152, 95, 4, 1, 202, 122, 95, 4, 1, 239, 28, 95,
-    4, 1, 237, 201, 95, 4, 1, 237, 170, 95, 4, 1, 239, 40, 95, 4, 1, 202, 47,
-    95, 4, 1, 202, 46, 95, 4, 1, 202, 35, 95, 4, 1, 202, 34, 95, 4, 1, 202,
-    33, 95, 4, 1, 202, 32, 95, 4, 1, 201, 113, 95, 4, 1, 201, 107, 95, 4, 1,
-    201, 92, 95, 4, 1, 201, 90, 95, 4, 1, 201, 86, 95, 4, 1, 201, 85, 95, 4,
-    1, 197, 166, 95, 4, 1, 197, 109, 95, 4, 1, 197, 70, 95, 4, 1, 197, 34,
-    95, 4, 1, 196, 243, 95, 4, 1, 196, 230, 95, 4, 1, 164, 219, 182, 219,
-    248, 1, 223, 252, 219, 182, 219, 248, 1, 208, 229, 219, 182, 219, 248, 1,
-    223, 54, 219, 182, 219, 248, 1, 219, 6, 219, 182, 219, 248, 1, 161, 219,
-    182, 219, 248, 1, 176, 219, 182, 219, 248, 1, 245, 67, 219, 182, 219,
-    248, 1, 202, 86, 219, 182, 219, 248, 1, 224, 111, 219, 182, 219, 248, 1,
-    216, 242, 219, 182, 219, 248, 1, 202, 161, 219, 182, 219, 248, 1, 197,
-    154, 219, 182, 219, 248, 1, 196, 95, 219, 182, 219, 248, 1, 231, 64, 219,
-    182, 219, 248, 1, 200, 72, 219, 182, 219, 248, 1, 68, 219, 182, 219, 248,
-    1, 213, 0, 219, 182, 219, 248, 1, 250, 161, 219, 182, 219, 248, 1, 233,
-    136, 219, 182, 219, 248, 1, 225, 178, 219, 182, 219, 248, 1, 210, 224,
-    219, 182, 219, 248, 1, 249, 145, 219, 182, 219, 248, 1, 225, 162, 219,
-    182, 219, 248, 1, 239, 109, 219, 182, 219, 248, 1, 233, 199, 219, 182,
-    219, 248, 1, 239, 154, 219, 182, 219, 248, 1, 248, 194, 219, 182, 219,
-    248, 1, 223, 253, 221, 230, 219, 182, 219, 248, 1, 223, 55, 221, 230,
-    219, 182, 219, 248, 1, 219, 7, 221, 230, 219, 182, 219, 248, 1, 213, 244,
-    221, 230, 219, 182, 219, 248, 1, 218, 1, 221, 230, 219, 182, 219, 248, 1,
-    202, 87, 221, 230, 219, 182, 219, 248, 1, 216, 243, 221, 230, 219, 182,
-    219, 248, 1, 230, 249, 221, 230, 219, 182, 219, 248, 18, 2, 214, 117,
-    219, 182, 219, 248, 18, 2, 226, 84, 219, 182, 219, 248, 18, 2, 251, 104,
-    219, 182, 219, 248, 18, 2, 196, 58, 219, 182, 219, 248, 18, 2, 205, 163,
-    219, 182, 219, 248, 18, 2, 200, 69, 219, 182, 219, 248, 18, 2, 245, 90,
-    219, 182, 219, 248, 18, 2, 215, 135, 219, 182, 219, 248, 245, 91, 219,
-    182, 219, 248, 221, 175, 225, 223, 219, 182, 219, 248, 251, 19, 225, 223,
-    219, 182, 219, 248, 17, 195, 79, 219, 182, 219, 248, 17, 100, 219, 182,
-    219, 248, 17, 102, 219, 182, 219, 248, 17, 134, 219, 182, 219, 248, 17,
-    136, 219, 182, 219, 248, 17, 146, 219, 182, 219, 248, 17, 167, 219, 182,
-    219, 248, 17, 178, 219, 182, 219, 248, 17, 171, 219, 182, 219, 248, 17,
-    182, 29, 225, 102, 215, 11, 29, 225, 102, 215, 16, 29, 225, 102, 195,
-    252, 29, 225, 102, 195, 251, 29, 225, 102, 195, 250, 29, 225, 102, 200,
-    164, 29, 225, 102, 200, 168, 29, 225, 102, 195, 211, 29, 225, 102, 195,
-    207, 29, 225, 102, 236, 115, 29, 225, 102, 236, 113, 29, 225, 102, 236,
-    114, 29, 225, 102, 236, 111, 29, 225, 102, 230, 235, 29, 225, 102, 230,
-    234, 29, 225, 102, 230, 232, 29, 225, 102, 230, 233, 29, 225, 102, 230,
-    238, 29, 225, 102, 230, 231, 29, 225, 102, 230, 230, 29, 225, 102, 230,
-    240, 29, 225, 102, 251, 5, 29, 225, 102, 251, 4, 29, 116, 216, 201, 29,
-    116, 216, 207, 29, 116, 205, 61, 29, 116, 205, 60, 29, 116, 202, 92, 29,
-    116, 202, 90, 29, 116, 202, 89, 29, 116, 202, 95, 29, 116, 202, 96, 29,
-    116, 202, 88, 29, 116, 210, 33, 29, 116, 210, 48, 29, 116, 205, 67, 29,
-    116, 210, 45, 29, 116, 210, 35, 29, 116, 210, 37, 29, 116, 210, 24, 29,
-    116, 210, 25, 29, 116, 224, 254, 29, 116, 219, 51, 29, 116, 219, 45, 29,
-    116, 205, 71, 29, 116, 219, 48, 29, 116, 219, 54, 29, 116, 212, 187, 29,
-    116, 212, 196, 29, 116, 212, 200, 29, 116, 205, 69, 29, 116, 212, 190,
-    29, 116, 212, 204, 29, 116, 212, 205, 29, 116, 206, 44, 29, 116, 206, 47,
-    29, 116, 205, 65, 29, 116, 205, 63, 29, 116, 206, 42, 29, 116, 206, 50,
-    29, 116, 206, 51, 29, 116, 206, 36, 29, 116, 206, 49, 29, 116, 213, 172,
-    29, 116, 213, 173, 29, 116, 196, 42, 29, 116, 196, 45, 29, 116, 245, 4,
-    29, 116, 245, 3, 29, 116, 205, 76, 29, 116, 212, 241, 29, 116, 212, 240,
-    12, 15, 228, 111, 12, 15, 228, 110, 12, 15, 228, 109, 12, 15, 228, 108,
-    12, 15, 228, 107, 12, 15, 228, 106, 12, 15, 228, 105, 12, 15, 228, 104,
-    12, 15, 228, 103, 12, 15, 228, 102, 12, 15, 228, 101, 12, 15, 228, 100,
-    12, 15, 228, 99, 12, 15, 228, 98, 12, 15, 228, 97, 12, 15, 228, 96, 12,
-    15, 228, 95, 12, 15, 228, 94, 12, 15, 228, 93, 12, 15, 228, 92, 12, 15,
-    228, 91, 12, 15, 228, 90, 12, 15, 228, 89, 12, 15, 228, 88, 12, 15, 228,
-    87, 12, 15, 228, 86, 12, 15, 228, 85, 12, 15, 228, 84, 12, 15, 228, 83,
-    12, 15, 228, 82, 12, 15, 228, 81, 12, 15, 228, 80, 12, 15, 228, 79, 12,
-    15, 228, 78, 12, 15, 228, 77, 12, 15, 228, 76, 12, 15, 228, 75, 12, 15,
-    228, 74, 12, 15, 228, 73, 12, 15, 228, 72, 12, 15, 228, 71, 12, 15, 228,
-    70, 12, 15, 228, 69, 12, 15, 228, 68, 12, 15, 228, 67, 12, 15, 228, 66,
-    12, 15, 228, 65, 12, 15, 228, 64, 12, 15, 228, 63, 12, 15, 228, 62, 12,
-    15, 228, 61, 12, 15, 228, 60, 12, 15, 228, 59, 12, 15, 228, 58, 12, 15,
-    228, 57, 12, 15, 228, 56, 12, 15, 228, 55, 12, 15, 228, 54, 12, 15, 228,
-    53, 12, 15, 228, 52, 12, 15, 228, 51, 12, 15, 228, 50, 12, 15, 228, 49,
-    12, 15, 228, 48, 12, 15, 228, 47, 12, 15, 228, 46, 12, 15, 228, 45, 12,
-    15, 228, 44, 12, 15, 228, 43, 12, 15, 228, 42, 12, 15, 228, 41, 12, 15,
-    228, 40, 12, 15, 228, 39, 12, 15, 228, 38, 12, 15, 228, 37, 12, 15, 228,
-    36, 12, 15, 228, 35, 12, 15, 228, 34, 12, 15, 228, 33, 12, 15, 228, 32,
-    12, 15, 228, 31, 12, 15, 228, 30, 12, 15, 228, 29, 12, 15, 228, 28, 12,
-    15, 228, 27, 12, 15, 228, 26, 12, 15, 228, 25, 12, 15, 228, 24, 12, 15,
-    228, 23, 12, 15, 228, 22, 12, 15, 228, 21, 12, 15, 228, 20, 12, 15, 228,
-    19, 12, 15, 228, 18, 12, 15, 228, 17, 12, 15, 228, 16, 12, 15, 228, 15,
-    12, 15, 228, 14, 12, 15, 228, 13, 12, 15, 228, 12, 12, 15, 228, 11, 12,
-    15, 228, 10, 12, 15, 228, 9, 12, 15, 228, 8, 12, 15, 228, 7, 12, 15, 228,
-    6, 12, 15, 228, 5, 12, 15, 228, 4, 12, 15, 228, 3, 12, 15, 228, 2, 12,
-    15, 228, 1, 12, 15, 228, 0, 12, 15, 227, 255, 12, 15, 227, 254, 12, 15,
-    227, 253, 12, 15, 227, 252, 12, 15, 227, 251, 12, 15, 227, 250, 12, 15,
-    227, 249, 12, 15, 227, 248, 12, 15, 227, 247, 12, 15, 227, 246, 12, 15,
-    227, 245, 12, 15, 227, 244, 12, 15, 227, 243, 12, 15, 227, 242, 12, 15,
-    227, 241, 12, 15, 227, 240, 12, 15, 227, 239, 12, 15, 227, 238, 12, 15,
-    227, 237, 12, 15, 227, 236, 12, 15, 227, 235, 12, 15, 227, 234, 12, 15,
-    227, 233, 12, 15, 227, 232, 12, 15, 227, 231, 12, 15, 227, 230, 12, 15,
-    227, 229, 12, 15, 227, 228, 12, 15, 227, 227, 12, 15, 227, 226, 12, 15,
-    227, 225, 12, 15, 227, 224, 12, 15, 227, 223, 12, 15, 227, 222, 12, 15,
-    227, 221, 12, 15, 227, 220, 12, 15, 227, 219, 12, 15, 227, 218, 12, 15,
-    227, 217, 12, 15, 227, 216, 12, 15, 227, 215, 12, 15, 227, 214, 12, 15,
-    227, 213, 12, 15, 227, 212, 12, 15, 227, 211, 12, 15, 227, 210, 12, 15,
-    227, 209, 12, 15, 227, 208, 12, 15, 227, 207, 12, 15, 227, 206, 12, 15,
-    227, 205, 12, 15, 227, 204, 12, 15, 227, 203, 12, 15, 227, 202, 12, 15,
-    227, 201, 12, 15, 227, 200, 12, 15, 227, 199, 12, 15, 227, 198, 12, 15,
-    227, 197, 12, 15, 227, 196, 12, 15, 227, 195, 12, 15, 227, 194, 12, 15,
-    227, 193, 12, 15, 227, 192, 12, 15, 227, 191, 12, 15, 227, 190, 12, 15,
-    227, 189, 12, 15, 227, 188, 12, 15, 227, 187, 12, 15, 227, 186, 12, 15,
-    227, 185, 12, 15, 227, 184, 12, 15, 227, 183, 12, 15, 227, 182, 12, 15,
-    227, 181, 12, 15, 227, 180, 12, 15, 227, 179, 12, 15, 227, 178, 12, 15,
-    227, 177, 12, 15, 227, 176, 12, 15, 227, 175, 12, 15, 227, 174, 12, 15,
-    227, 173, 12, 15, 227, 172, 12, 15, 227, 171, 12, 15, 227, 170, 12, 15,
-    227, 169, 12, 15, 227, 168, 12, 15, 227, 167, 12, 15, 227, 166, 12, 15,
-    227, 165, 12, 15, 227, 164, 12, 15, 227, 163, 12, 15, 227, 162, 12, 15,
-    227, 161, 12, 15, 227, 160, 12, 15, 227, 159, 12, 15, 227, 158, 12, 15,
-    227, 157, 12, 15, 227, 156, 12, 15, 227, 155, 12, 15, 227, 154, 12, 15,
-    227, 153, 12, 15, 227, 152, 12, 15, 227, 151, 12, 15, 227, 150, 12, 15,
-    227, 149, 12, 15, 227, 148, 12, 15, 227, 147, 12, 15, 227, 146, 12, 15,
-    227, 145, 12, 15, 227, 144, 12, 15, 227, 143, 12, 15, 227, 142, 12, 15,
-    227, 141, 12, 15, 227, 140, 12, 15, 227, 139, 12, 15, 227, 138, 12, 15,
-    227, 137, 12, 15, 227, 136, 12, 15, 227, 135, 12, 15, 227, 134, 12, 15,
-    227, 133, 12, 15, 227, 132, 12, 15, 227, 131, 12, 15, 227, 130, 12, 15,
-    227, 129, 12, 15, 227, 128, 12, 15, 227, 127, 12, 15, 227, 126, 12, 15,
-    227, 125, 12, 15, 227, 124, 12, 15, 227, 123, 12, 15, 227, 122, 12, 15,
-    227, 121, 12, 15, 227, 120, 12, 15, 227, 119, 12, 15, 227, 118, 12, 15,
-    227, 117, 12, 15, 227, 116, 12, 15, 227, 115, 12, 15, 227, 114, 12, 15,
-    227, 113, 12, 15, 227, 112, 12, 15, 227, 111, 12, 15, 227, 110, 12, 15,
-    227, 109, 12, 15, 227, 108, 12, 15, 227, 107, 12, 15, 227, 106, 12, 15,
-    227, 105, 12, 15, 227, 104, 12, 15, 227, 103, 12, 15, 227, 102, 12, 15,
-    227, 101, 12, 15, 227, 100, 12, 15, 227, 99, 12, 15, 227, 98, 12, 15,
-    227, 97, 12, 15, 227, 96, 12, 15, 227, 95, 12, 15, 227, 94, 12, 15, 227,
-    93, 12, 15, 227, 92, 12, 15, 227, 91, 12, 15, 227, 90, 12, 15, 227, 89,
-    12, 15, 227, 88, 12, 15, 227, 87, 12, 15, 227, 86, 12, 15, 227, 85, 12,
-    15, 227, 84, 12, 15, 227, 83, 12, 15, 227, 82, 12, 15, 227, 81, 12, 15,
-    227, 80, 12, 15, 227, 79, 12, 15, 227, 78, 12, 15, 227, 77, 12, 15, 227,
-    76, 12, 15, 227, 75, 12, 15, 227, 74, 12, 15, 227, 73, 12, 15, 227, 72,
-    12, 15, 227, 71, 12, 15, 227, 70, 12, 15, 227, 69, 12, 15, 227, 68, 12,
-    15, 227, 67, 12, 15, 227, 66, 12, 15, 227, 65, 12, 15, 227, 64, 12, 15,
-    227, 63, 12, 15, 227, 62, 12, 15, 227, 61, 12, 15, 227, 60, 12, 15, 227,
-    59, 12, 15, 227, 58, 12, 15, 227, 57, 12, 15, 227, 56, 12, 15, 227, 55,
-    12, 15, 227, 54, 12, 15, 227, 53, 12, 15, 227, 52, 12, 15, 227, 51, 12,
-    15, 227, 50, 12, 15, 227, 49, 12, 15, 227, 48, 12, 15, 227, 47, 12, 15,
-    227, 46, 12, 15, 227, 45, 12, 15, 227, 44, 12, 15, 227, 43, 12, 15, 227,
-    42, 12, 15, 227, 41, 12, 15, 227, 40, 12, 15, 227, 39, 12, 15, 227, 38,
-    12, 15, 227, 37, 12, 15, 227, 36, 12, 15, 227, 35, 12, 15, 227, 34, 12,
-    15, 227, 33, 12, 15, 227, 32, 12, 15, 227, 31, 12, 15, 227, 30, 12, 15,
-    227, 29, 12, 15, 227, 28, 12, 15, 227, 27, 12, 15, 227, 26, 12, 15, 227,
-    25, 12, 15, 227, 24, 12, 15, 227, 23, 12, 15, 227, 22, 12, 15, 227, 21,
-    12, 15, 227, 20, 12, 15, 227, 19, 12, 15, 227, 18, 12, 15, 227, 17, 12,
-    15, 227, 16, 12, 15, 227, 15, 12, 15, 227, 14, 12, 15, 227, 13, 12, 15,
-    227, 12, 12, 15, 227, 11, 12, 15, 227, 10, 12, 15, 227, 9, 12, 15, 227,
-    8, 12, 15, 227, 7, 12, 15, 227, 6, 12, 15, 227, 5, 12, 15, 227, 4, 12,
-    15, 227, 3, 12, 15, 227, 2, 12, 15, 227, 1, 12, 15, 227, 0, 12, 15, 226,
-    255, 12, 15, 226, 254, 12, 15, 226, 253, 12, 15, 226, 252, 12, 15, 226,
-    251, 12, 15, 226, 250, 12, 15, 226, 249, 12, 15, 226, 248, 12, 15, 226,
-    247, 12, 15, 226, 246, 12, 15, 226, 245, 12, 15, 226, 244, 12, 15, 226,
-    243, 12, 15, 226, 242, 12, 15, 226, 241, 12, 15, 226, 240, 12, 15, 226,
-    239, 12, 15, 226, 238, 12, 15, 226, 237, 12, 15, 226, 236, 12, 15, 226,
-    235, 12, 15, 226, 234, 12, 15, 226, 233, 12, 15, 226, 232, 12, 15, 226,
-    231, 12, 15, 226, 230, 12, 15, 226, 229, 12, 15, 226, 228, 12, 15, 226,
-    227, 12, 15, 226, 226, 12, 15, 226, 225, 12, 15, 226, 224, 12, 15, 226,
-    223, 12, 15, 226, 222, 12, 15, 226, 221, 12, 15, 226, 220, 12, 15, 226,
-    219, 12, 15, 226, 218, 12, 15, 226, 217, 12, 15, 226, 216, 12, 15, 226,
-    215, 12, 15, 226, 214, 12, 15, 226, 213, 12, 15, 226, 212, 12, 15, 226,
-    211, 12, 15, 226, 210, 12, 15, 226, 209, 12, 15, 226, 208, 12, 15, 226,
-    207, 12, 15, 226, 206, 12, 15, 226, 205, 12, 15, 226, 204, 12, 15, 226,
-    203, 12, 15, 226, 202, 12, 15, 226, 201, 12, 15, 226, 200, 12, 15, 226,
-    199, 12, 15, 226, 198, 12, 15, 226, 197, 12, 15, 226, 196, 12, 15, 226,
-    195, 12, 15, 226, 194, 12, 15, 226, 193, 12, 15, 226, 192, 12, 15, 226,
-    191, 12, 15, 226, 190, 12, 15, 226, 189, 12, 15, 226, 188, 12, 15, 226,
-    187, 12, 15, 226, 186, 12, 15, 226, 185, 12, 15, 226, 184, 12, 15, 226,
-    183, 12, 15, 226, 182, 12, 15, 226, 181, 12, 15, 226, 180, 12, 15, 226,
-    179, 12, 15, 226, 178, 12, 15, 226, 177, 12, 15, 226, 176, 12, 15, 226,
-    175, 12, 15, 226, 174, 12, 15, 226, 173, 12, 15, 226, 172, 12, 15, 226,
-    171, 12, 15, 226, 170, 12, 15, 226, 169, 12, 15, 226, 168, 12, 15, 226,
-    167, 12, 15, 226, 166, 12, 15, 226, 165, 12, 15, 226, 164, 12, 15, 226,
-    163, 12, 15, 226, 162, 12, 15, 226, 161, 12, 15, 226, 160, 12, 15, 226,
-    159, 12, 15, 226, 158, 12, 15, 226, 157, 12, 15, 226, 156, 12, 15, 226,
-    155, 12, 15, 226, 154, 12, 15, 226, 153, 12, 15, 226, 152, 8, 4, 33, 235,
-    157, 8, 4, 33, 235, 153, 8, 4, 33, 235, 96, 8, 4, 33, 235, 156, 8, 4, 33,
-    235, 155, 8, 4, 33, 181, 209, 81, 203, 216, 8, 4, 33, 205, 23, 250, 230,
-    4, 33, 219, 165, 216, 4, 250, 230, 4, 33, 219, 165, 237, 60, 250, 230, 4,
-    33, 219, 165, 226, 55, 250, 230, 4, 33, 199, 40, 216, 4, 250, 230, 4, 33,
-    219, 165, 196, 200, 123, 1, 195, 242, 3, 232, 33, 123, 212, 111, 225,
-    109, 199, 130, 123, 33, 196, 22, 195, 242, 195, 242, 213, 115, 123, 1,
-    251, 126, 250, 117, 123, 1, 197, 62, 251, 164, 123, 1, 197, 62, 240, 101,
-    123, 1, 197, 62, 232, 147, 123, 1, 197, 62, 225, 35, 123, 1, 197, 62,
-    222, 241, 123, 1, 197, 62, 48, 219, 171, 123, 1, 197, 62, 210, 109, 123,
-    1, 197, 62, 203, 85, 123, 1, 251, 126, 98, 55, 123, 1, 206, 212, 3, 206,
-    212, 238, 253, 123, 1, 206, 212, 3, 206, 66, 238, 253, 123, 1, 206, 212,
-    3, 240, 121, 26, 206, 212, 238, 253, 123, 1, 206, 212, 3, 240, 121, 26,
-    206, 66, 238, 253, 123, 1, 151, 3, 213, 115, 123, 1, 151, 3, 211, 147,
-    123, 1, 151, 3, 220, 42, 123, 1, 248, 209, 3, 240, 120, 123, 1, 233, 178,
-    3, 240, 120, 123, 1, 240, 102, 3, 240, 120, 123, 1, 232, 148, 3, 220, 42,
-    123, 1, 199, 123, 3, 240, 120, 123, 1, 195, 93, 3, 240, 120, 123, 1, 203,
-    2, 3, 240, 120, 123, 1, 195, 242, 3, 240, 120, 123, 1, 48, 225, 36, 3,
-    240, 120, 123, 1, 225, 36, 3, 240, 120, 123, 1, 222, 242, 3, 240, 120,
-    123, 1, 219, 172, 3, 240, 120, 123, 1, 215, 139, 3, 240, 120, 123, 1,
-    208, 226, 3, 240, 120, 123, 1, 48, 213, 93, 3, 240, 120, 123, 1, 213, 93,
-    3, 240, 120, 123, 1, 201, 109, 3, 240, 120, 123, 1, 211, 107, 3, 240,
-    120, 123, 1, 210, 110, 3, 240, 120, 123, 1, 206, 212, 3, 240, 120, 123,
-    1, 203, 86, 3, 240, 120, 123, 1, 199, 123, 3, 231, 177, 123, 1, 248, 209,
-    3, 210, 227, 123, 1, 225, 36, 3, 210, 227, 123, 1, 213, 93, 3, 210, 227,
-    123, 33, 151, 222, 241, 9, 1, 151, 197, 135, 70, 20, 9, 1, 151, 197, 135,
-    48, 20, 9, 1, 248, 250, 70, 20, 9, 1, 248, 250, 48, 20, 9, 1, 248, 250,
-    84, 20, 9, 1, 248, 250, 219, 194, 20, 9, 1, 213, 73, 70, 20, 9, 1, 213,
-    73, 48, 20, 9, 1, 213, 73, 84, 20, 9, 1, 213, 73, 219, 194, 20, 9, 1,
-    248, 238, 70, 20, 9, 1, 248, 238, 48, 20, 9, 1, 248, 238, 84, 20, 9, 1,
-    248, 238, 219, 194, 20, 9, 1, 201, 69, 70, 20, 9, 1, 201, 69, 48, 20, 9,
-    1, 201, 69, 84, 20, 9, 1, 201, 69, 219, 194, 20, 9, 1, 203, 40, 70, 20,
-    9, 1, 203, 40, 48, 20, 9, 1, 203, 40, 84, 20, 9, 1, 203, 40, 219, 194,
-    20, 9, 1, 201, 71, 70, 20, 9, 1, 201, 71, 48, 20, 9, 1, 201, 71, 84, 20,
-    9, 1, 201, 71, 219, 194, 20, 9, 1, 199, 112, 70, 20, 9, 1, 199, 112, 48,
-    20, 9, 1, 199, 112, 84, 20, 9, 1, 199, 112, 219, 194, 20, 9, 1, 213, 71,
-    70, 20, 9, 1, 213, 71, 48, 20, 9, 1, 213, 71, 84, 20, 9, 1, 213, 71, 219,
-    194, 20, 9, 1, 237, 163, 70, 20, 9, 1, 237, 163, 48, 20, 9, 1, 237, 163,
-    84, 20, 9, 1, 237, 163, 219, 194, 20, 9, 1, 215, 96, 70, 20, 9, 1, 215,
-    96, 48, 20, 9, 1, 215, 96, 84, 20, 9, 1, 215, 96, 219, 194, 20, 9, 1,
-    203, 73, 70, 20, 9, 1, 203, 73, 48, 20, 9, 1, 203, 73, 84, 20, 9, 1, 203,
-    73, 219, 194, 20, 9, 1, 203, 71, 70, 20, 9, 1, 203, 71, 48, 20, 9, 1,
-    203, 71, 84, 20, 9, 1, 203, 71, 219, 194, 20, 9, 1, 240, 39, 70, 20, 9,
-    1, 240, 39, 48, 20, 9, 1, 240, 115, 70, 20, 9, 1, 240, 115, 48, 20, 9, 1,
-    237, 192, 70, 20, 9, 1, 237, 192, 48, 20, 9, 1, 240, 37, 70, 20, 9, 1,
-    240, 37, 48, 20, 9, 1, 225, 187, 70, 20, 9, 1, 225, 187, 48, 20, 9, 1,
-    209, 174, 70, 20, 9, 1, 209, 174, 48, 20, 9, 1, 224, 192, 70, 20, 9, 1,
-    224, 192, 48, 20, 9, 1, 224, 192, 84, 20, 9, 1, 224, 192, 219, 194, 20,
-    9, 1, 234, 111, 70, 20, 9, 1, 234, 111, 48, 20, 9, 1, 234, 111, 84, 20,
-    9, 1, 234, 111, 219, 194, 20, 9, 1, 233, 64, 70, 20, 9, 1, 233, 64, 48,
-    20, 9, 1, 233, 64, 84, 20, 9, 1, 233, 64, 219, 194, 20, 9, 1, 216, 251,
-    70, 20, 9, 1, 216, 251, 48, 20, 9, 1, 216, 251, 84, 20, 9, 1, 216, 251,
-    219, 194, 20, 9, 1, 216, 32, 233, 197, 70, 20, 9, 1, 216, 32, 233, 197,
-    48, 20, 9, 1, 209, 236, 70, 20, 9, 1, 209, 236, 48, 20, 9, 1, 209, 236,
-    84, 20, 9, 1, 209, 236, 219, 194, 20, 9, 1, 232, 114, 3, 93, 90, 70, 20,
-    9, 1, 232, 114, 3, 93, 90, 48, 20, 9, 1, 232, 114, 233, 142, 70, 20, 9,
-    1, 232, 114, 233, 142, 48, 20, 9, 1, 232, 114, 233, 142, 84, 20, 9, 1,
-    232, 114, 233, 142, 219, 194, 20, 9, 1, 232, 114, 239, 25, 70, 20, 9, 1,
-    232, 114, 239, 25, 48, 20, 9, 1, 232, 114, 239, 25, 84, 20, 9, 1, 232,
-    114, 239, 25, 219, 194, 20, 9, 1, 93, 249, 73, 70, 20, 9, 1, 93, 249, 73,
-    48, 20, 9, 1, 93, 249, 73, 3, 232, 214, 90, 70, 20, 9, 1, 93, 249, 73, 3,
-    232, 214, 90, 48, 20, 9, 16, 76, 57, 9, 16, 76, 60, 9, 16, 99, 238, 251,
-    57, 9, 16, 99, 238, 251, 60, 9, 16, 115, 238, 251, 57, 9, 16, 115, 238,
-    251, 60, 9, 16, 115, 238, 251, 212, 107, 237, 231, 57, 9, 16, 115, 238,
-    251, 212, 107, 237, 231, 60, 9, 16, 235, 7, 238, 251, 57, 9, 16, 235, 7,
-    238, 251, 60, 9, 16, 52, 83, 249, 80, 60, 9, 16, 99, 238, 251, 199, 50,
-    57, 9, 16, 99, 238, 251, 199, 50, 60, 9, 16, 210, 2, 9, 16, 4, 203, 140,
-    57, 9, 16, 4, 203, 140, 60, 9, 1, 217, 74, 70, 20, 9, 1, 217, 74, 48, 20,
-    9, 1, 217, 74, 84, 20, 9, 1, 217, 74, 219, 194, 20, 9, 1, 118, 70, 20, 9,
-    1, 118, 48, 20, 9, 1, 214, 165, 70, 20, 9, 1, 214, 165, 48, 20, 9, 1,
-    195, 218, 70, 20, 9, 1, 195, 218, 48, 20, 9, 1, 118, 3, 232, 214, 90, 70,
-    20, 9, 1, 199, 119, 70, 20, 9, 1, 199, 119, 48, 20, 9, 1, 224, 67, 214,
-    165, 70, 20, 9, 1, 224, 67, 214, 165, 48, 20, 9, 1, 224, 67, 195, 218,
-    70, 20, 9, 1, 224, 67, 195, 218, 48, 20, 9, 1, 237, 136, 70, 20, 9, 1,
-    237, 136, 48, 20, 9, 1, 237, 136, 84, 20, 9, 1, 237, 136, 219, 194, 20,
-    9, 1, 200, 89, 224, 213, 224, 67, 151, 220, 70, 84, 20, 9, 1, 200, 89,
-    224, 213, 224, 67, 151, 220, 70, 219, 194, 20, 9, 33, 93, 3, 232, 214,
-    90, 3, 151, 70, 20, 9, 33, 93, 3, 232, 214, 90, 3, 151, 48, 20, 9, 33,
-    93, 3, 232, 214, 90, 3, 251, 246, 70, 20, 9, 33, 93, 3, 232, 214, 90, 3,
-    251, 246, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3, 197, 118, 70, 20, 9, 33,
-    93, 3, 232, 214, 90, 3, 197, 118, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3,
-    118, 70, 20, 9, 33, 93, 3, 232, 214, 90, 3, 118, 48, 20, 9, 33, 93, 3,
-    232, 214, 90, 3, 214, 165, 70, 20, 9, 33, 93, 3, 232, 214, 90, 3, 214,
-    165, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3, 195, 218, 70, 20, 9, 33, 93,
-    3, 232, 214, 90, 3, 195, 218, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3, 237,
-    136, 70, 20, 9, 33, 93, 3, 232, 214, 90, 3, 237, 136, 48, 20, 9, 33, 93,
-    3, 232, 214, 90, 3, 237, 136, 84, 20, 9, 33, 200, 89, 224, 67, 93, 3,
-    232, 214, 90, 3, 151, 220, 70, 70, 20, 9, 33, 200, 89, 224, 67, 93, 3,
-    232, 214, 90, 3, 151, 220, 70, 48, 20, 9, 33, 200, 89, 224, 67, 93, 3,
-    232, 214, 90, 3, 151, 220, 70, 84, 20, 9, 1, 235, 204, 93, 70, 20, 9, 1,
-    235, 204, 93, 48, 20, 9, 1, 235, 204, 93, 84, 20, 9, 1, 235, 204, 93,
-    219, 194, 20, 9, 33, 93, 3, 232, 214, 90, 3, 225, 190, 70, 20, 9, 33, 93,
-    3, 232, 214, 90, 3, 168, 70, 20, 9, 33, 93, 3, 232, 214, 90, 3, 87, 70,
-    20, 9, 33, 93, 3, 232, 214, 90, 3, 151, 220, 70, 70, 20, 9, 33, 93, 3,
-    232, 214, 90, 3, 93, 70, 20, 9, 33, 248, 240, 3, 225, 190, 70, 20, 9, 33,
-    248, 240, 3, 168, 70, 20, 9, 33, 248, 240, 3, 224, 143, 70, 20, 9, 33,
-    248, 240, 3, 87, 70, 20, 9, 33, 248, 240, 3, 151, 220, 70, 70, 20, 9, 33,
-    248, 240, 3, 93, 70, 20, 9, 33, 203, 42, 3, 225, 190, 70, 20, 9, 33, 203,
-    42, 3, 168, 70, 20, 9, 33, 203, 42, 3, 224, 143, 70, 20, 9, 33, 203, 42,
-    3, 87, 70, 20, 9, 33, 203, 42, 3, 151, 220, 70, 70, 20, 9, 33, 203, 42,
-    3, 93, 70, 20, 9, 33, 202, 214, 3, 225, 190, 70, 20, 9, 33, 202, 214, 3,
-    87, 70, 20, 9, 33, 202, 214, 3, 151, 220, 70, 70, 20, 9, 33, 202, 214, 3,
-    93, 70, 20, 9, 33, 225, 190, 3, 168, 70, 20, 9, 33, 225, 190, 3, 87, 70,
-    20, 9, 33, 168, 3, 225, 190, 70, 20, 9, 33, 168, 3, 87, 70, 20, 9, 33,
-    224, 143, 3, 225, 190, 70, 20, 9, 33, 224, 143, 3, 168, 70, 20, 9, 33,
-    224, 143, 3, 87, 70, 20, 9, 33, 208, 126, 3, 225, 190, 70, 20, 9, 33,
-    208, 126, 3, 168, 70, 20, 9, 33, 208, 126, 3, 224, 143, 70, 20, 9, 33,
-    208, 126, 3, 87, 70, 20, 9, 33, 209, 9, 3, 168, 70, 20, 9, 33, 209, 9, 3,
-    87, 70, 20, 9, 33, 240, 131, 3, 225, 190, 70, 20, 9, 33, 240, 131, 3,
-    168, 70, 20, 9, 33, 240, 131, 3, 224, 143, 70, 20, 9, 33, 240, 131, 3,
-    87, 70, 20, 9, 33, 203, 140, 3, 168, 70, 20, 9, 33, 203, 140, 3, 87, 70,
-    20, 9, 33, 195, 110, 3, 87, 70, 20, 9, 33, 251, 195, 3, 225, 190, 70, 20,
-    9, 33, 251, 195, 3, 87, 70, 20, 9, 33, 233, 226, 3, 225, 190, 70, 20, 9,
-    33, 233, 226, 3, 87, 70, 20, 9, 33, 235, 177, 3, 225, 190, 70, 20, 9, 33,
-    235, 177, 3, 168, 70, 20, 9, 33, 235, 177, 3, 224, 143, 70, 20, 9, 33,
-    235, 177, 3, 87, 70, 20, 9, 33, 235, 177, 3, 151, 220, 70, 70, 20, 9, 33,
-    235, 177, 3, 93, 70, 20, 9, 33, 211, 153, 3, 168, 70, 20, 9, 33, 211,
-    153, 3, 87, 70, 20, 9, 33, 211, 153, 3, 151, 220, 70, 70, 20, 9, 33, 211,
-    153, 3, 93, 70, 20, 9, 33, 225, 36, 3, 151, 70, 20, 9, 33, 225, 36, 3,
-    225, 190, 70, 20, 9, 33, 225, 36, 3, 168, 70, 20, 9, 33, 225, 36, 3, 224,
-    143, 70, 20, 9, 33, 225, 36, 3, 222, 250, 70, 20, 9, 33, 225, 36, 3, 87,
-    70, 20, 9, 33, 225, 36, 3, 151, 220, 70, 70, 20, 9, 33, 225, 36, 3, 93,
-    70, 20, 9, 33, 222, 250, 3, 225, 190, 70, 20, 9, 33, 222, 250, 3, 168,
-    70, 20, 9, 33, 222, 250, 3, 224, 143, 70, 20, 9, 33, 222, 250, 3, 87, 70,
-    20, 9, 33, 222, 250, 3, 151, 220, 70, 70, 20, 9, 33, 222, 250, 3, 93, 70,
-    20, 9, 33, 87, 3, 225, 190, 70, 20, 9, 33, 87, 3, 168, 70, 20, 9, 33, 87,
-    3, 224, 143, 70, 20, 9, 33, 87, 3, 87, 70, 20, 9, 33, 87, 3, 151, 220,
-    70, 70, 20, 9, 33, 87, 3, 93, 70, 20, 9, 33, 216, 32, 3, 225, 190, 70,
-    20, 9, 33, 216, 32, 3, 168, 70, 20, 9, 33, 216, 32, 3, 224, 143, 70, 20,
-    9, 33, 216, 32, 3, 87, 70, 20, 9, 33, 216, 32, 3, 151, 220, 70, 70, 20,
-    9, 33, 216, 32, 3, 93, 70, 20, 9, 33, 232, 114, 3, 225, 190, 70, 20, 9,
-    33, 232, 114, 3, 87, 70, 20, 9, 33, 232, 114, 3, 151, 220, 70, 70, 20, 9,
-    33, 232, 114, 3, 93, 70, 20, 9, 33, 93, 3, 225, 190, 70, 20, 9, 33, 93,
-    3, 168, 70, 20, 9, 33, 93, 3, 224, 143, 70, 20, 9, 33, 93, 3, 87, 70, 20,
-    9, 33, 93, 3, 151, 220, 70, 70, 20, 9, 33, 93, 3, 93, 70, 20, 9, 33, 202,
-    226, 3, 204, 95, 151, 70, 20, 9, 33, 210, 143, 3, 204, 95, 151, 70, 20,
-    9, 33, 151, 220, 70, 3, 204, 95, 151, 70, 20, 9, 33, 207, 41, 3, 240, 94,
-    70, 20, 9, 33, 207, 41, 3, 224, 237, 70, 20, 9, 33, 207, 41, 3, 235, 201,
-    70, 20, 9, 33, 207, 41, 3, 240, 96, 70, 20, 9, 33, 207, 41, 3, 224, 239,
-    70, 20, 9, 33, 207, 41, 3, 204, 95, 151, 70, 20, 9, 33, 93, 3, 232, 214,
-    90, 3, 210, 143, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3, 195, 107, 48, 20,
-    9, 33, 93, 3, 232, 214, 90, 3, 87, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3,
-    216, 32, 48, 20, 9, 33, 93, 3, 232, 214, 90, 3, 151, 220, 70, 48, 20, 9,
-    33, 93, 3, 232, 214, 90, 3, 93, 48, 20, 9, 33, 248, 240, 3, 210, 143, 48,
-    20, 9, 33, 248, 240, 3, 195, 107, 48, 20, 9, 33, 248, 240, 3, 87, 48, 20,
-    9, 33, 248, 240, 3, 216, 32, 48, 20, 9, 33, 248, 240, 3, 151, 220, 70,
-    48, 20, 9, 33, 248, 240, 3, 93, 48, 20, 9, 33, 203, 42, 3, 210, 143, 48,
-    20, 9, 33, 203, 42, 3, 195, 107, 48, 20, 9, 33, 203, 42, 3, 87, 48, 20,
-    9, 33, 203, 42, 3, 216, 32, 48, 20, 9, 33, 203, 42, 3, 151, 220, 70, 48,
-    20, 9, 33, 203, 42, 3, 93, 48, 20, 9, 33, 202, 214, 3, 210, 143, 48, 20,
-    9, 33, 202, 214, 3, 195, 107, 48, 20, 9, 33, 202, 214, 3, 87, 48, 20, 9,
-    33, 202, 214, 3, 216, 32, 48, 20, 9, 33, 202, 214, 3, 151, 220, 70, 48,
-    20, 9, 33, 202, 214, 3, 93, 48, 20, 9, 33, 235, 177, 3, 151, 220, 70, 48,
-    20, 9, 33, 235, 177, 3, 93, 48, 20, 9, 33, 211, 153, 3, 151, 220, 70, 48,
-    20, 9, 33, 211, 153, 3, 93, 48, 20, 9, 33, 225, 36, 3, 151, 48, 20, 9,
-    33, 225, 36, 3, 222, 250, 48, 20, 9, 33, 225, 36, 3, 87, 48, 20, 9, 33,
-    225, 36, 3, 151, 220, 70, 48, 20, 9, 33, 225, 36, 3, 93, 48, 20, 9, 33,
-    222, 250, 3, 87, 48, 20, 9, 33, 222, 250, 3, 151, 220, 70, 48, 20, 9, 33,
-    222, 250, 3, 93, 48, 20, 9, 33, 87, 3, 151, 48, 20, 9, 33, 87, 3, 87, 48,
-    20, 9, 33, 216, 32, 3, 210, 143, 48, 20, 9, 33, 216, 32, 3, 195, 107, 48,
-    20, 9, 33, 216, 32, 3, 87, 48, 20, 9, 33, 216, 32, 3, 216, 32, 48, 20, 9,
-    33, 216, 32, 3, 151, 220, 70, 48, 20, 9, 33, 216, 32, 3, 93, 48, 20, 9,
-    33, 151, 220, 70, 3, 204, 95, 151, 48, 20, 9, 33, 93, 3, 210, 143, 48,
-    20, 9, 33, 93, 3, 195, 107, 48, 20, 9, 33, 93, 3, 87, 48, 20, 9, 33, 93,
-    3, 216, 32, 48, 20, 9, 33, 93, 3, 151, 220, 70, 48, 20, 9, 33, 93, 3, 93,
-    48, 20, 9, 33, 93, 3, 232, 214, 90, 3, 225, 190, 84, 20, 9, 33, 93, 3,
-    232, 214, 90, 3, 168, 84, 20, 9, 33, 93, 3, 232, 214, 90, 3, 224, 143,
-    84, 20, 9, 33, 93, 3, 232, 214, 90, 3, 87, 84, 20, 9, 33, 93, 3, 232,
-    214, 90, 3, 232, 114, 84, 20, 9, 33, 248, 240, 3, 225, 190, 84, 20, 9,
-    33, 248, 240, 3, 168, 84, 20, 9, 33, 248, 240, 3, 224, 143, 84, 20, 9,
-    33, 248, 240, 3, 87, 84, 20, 9, 33, 248, 240, 3, 232, 114, 84, 20, 9, 33,
-    203, 42, 3, 225, 190, 84, 20, 9, 33, 203, 42, 3, 168, 84, 20, 9, 33, 203,
-    42, 3, 224, 143, 84, 20, 9, 33, 203, 42, 3, 87, 84, 20, 9, 33, 203, 42,
-    3, 232, 114, 84, 20, 9, 33, 202, 214, 3, 87, 84, 20, 9, 33, 225, 190, 3,
-    168, 84, 20, 9, 33, 225, 190, 3, 87, 84, 20, 9, 33, 168, 3, 225, 190, 84,
-    20, 9, 33, 168, 3, 87, 84, 20, 9, 33, 224, 143, 3, 225, 190, 84, 20, 9,
-    33, 224, 143, 3, 87, 84, 20, 9, 33, 208, 126, 3, 225, 190, 84, 20, 9, 33,
-    208, 126, 3, 168, 84, 20, 9, 33, 208, 126, 3, 224, 143, 84, 20, 9, 33,
-    208, 126, 3, 87, 84, 20, 9, 33, 209, 9, 3, 168, 84, 20, 9, 33, 209, 9, 3,
-    224, 143, 84, 20, 9, 33, 209, 9, 3, 87, 84, 20, 9, 33, 240, 131, 3, 225,
-    190, 84, 20, 9, 33, 240, 131, 3, 168, 84, 20, 9, 33, 240, 131, 3, 224,
-    143, 84, 20, 9, 33, 240, 131, 3, 87, 84, 20, 9, 33, 203, 140, 3, 168, 84,
-    20, 9, 33, 195, 110, 3, 87, 84, 20, 9, 33, 251, 195, 3, 225, 190, 84, 20,
-    9, 33, 251, 195, 3, 87, 84, 20, 9, 33, 233, 226, 3, 225, 190, 84, 20, 9,
-    33, 233, 226, 3, 87, 84, 20, 9, 33, 235, 177, 3, 225, 190, 84, 20, 9, 33,
-    235, 177, 3, 168, 84, 20, 9, 33, 235, 177, 3, 224, 143, 84, 20, 9, 33,
-    235, 177, 3, 87, 84, 20, 9, 33, 211, 153, 3, 168, 84, 20, 9, 33, 211,
-    153, 3, 87, 84, 20, 9, 33, 225, 36, 3, 225, 190, 84, 20, 9, 33, 225, 36,
-    3, 168, 84, 20, 9, 33, 225, 36, 3, 224, 143, 84, 20, 9, 33, 225, 36, 3,
-    222, 250, 84, 20, 9, 33, 225, 36, 3, 87, 84, 20, 9, 33, 222, 250, 3, 225,
-    190, 84, 20, 9, 33, 222, 250, 3, 168, 84, 20, 9, 33, 222, 250, 3, 224,
-    143, 84, 20, 9, 33, 222, 250, 3, 87, 84, 20, 9, 33, 222, 250, 3, 232,
-    114, 84, 20, 9, 33, 87, 3, 225, 190, 84, 20, 9, 33, 87, 3, 168, 84, 20,
-    9, 33, 87, 3, 224, 143, 84, 20, 9, 33, 87, 3, 87, 84, 20, 9, 33, 216, 32,
-    3, 225, 190, 84, 20, 9, 33, 216, 32, 3, 168, 84, 20, 9, 33, 216, 32, 3,
-    224, 143, 84, 20, 9, 33, 216, 32, 3, 87, 84, 20, 9, 33, 216, 32, 3, 232,
-    114, 84, 20, 9, 33, 232, 114, 3, 225, 190, 84, 20, 9, 33, 232, 114, 3,
-    87, 84, 20, 9, 33, 232, 114, 3, 204, 95, 151, 84, 20, 9, 33, 93, 3, 225,
-    190, 84, 20, 9, 33, 93, 3, 168, 84, 20, 9, 33, 93, 3, 224, 143, 84, 20,
-    9, 33, 93, 3, 87, 84, 20, 9, 33, 93, 3, 232, 114, 84, 20, 9, 33, 93, 3,
-    232, 214, 90, 3, 87, 219, 194, 20, 9, 33, 93, 3, 232, 214, 90, 3, 232,
-    114, 219, 194, 20, 9, 33, 248, 240, 3, 87, 219, 194, 20, 9, 33, 248, 240,
-    3, 232, 114, 219, 194, 20, 9, 33, 203, 42, 3, 87, 219, 194, 20, 9, 33,
-    203, 42, 3, 232, 114, 219, 194, 20, 9, 33, 202, 214, 3, 87, 219, 194, 20,
-    9, 33, 202, 214, 3, 232, 114, 219, 194, 20, 9, 33, 208, 126, 3, 87, 219,
-    194, 20, 9, 33, 208, 126, 3, 232, 114, 219, 194, 20, 9, 33, 206, 252, 3,
-    87, 219, 194, 20, 9, 33, 206, 252, 3, 232, 114, 219, 194, 20, 9, 33, 225,
-    36, 3, 222, 250, 219, 194, 20, 9, 33, 225, 36, 3, 87, 219, 194, 20, 9,
-    33, 222, 250, 3, 87, 219, 194, 20, 9, 33, 216, 32, 3, 87, 219, 194, 20,
-    9, 33, 216, 32, 3, 232, 114, 219, 194, 20, 9, 33, 93, 3, 87, 219, 194,
-    20, 9, 33, 93, 3, 232, 114, 219, 194, 20, 9, 33, 207, 41, 3, 235, 201,
-    219, 194, 20, 9, 33, 207, 41, 3, 240, 96, 219, 194, 20, 9, 33, 207, 41,
-    3, 224, 239, 219, 194, 20, 9, 33, 203, 140, 3, 151, 220, 70, 70, 20, 9,
-    33, 203, 140, 3, 93, 70, 20, 9, 33, 251, 195, 3, 151, 220, 70, 70, 20, 9,
-    33, 251, 195, 3, 93, 70, 20, 9, 33, 233, 226, 3, 151, 220, 70, 70, 20, 9,
-    33, 233, 226, 3, 93, 70, 20, 9, 33, 208, 126, 3, 151, 220, 70, 70, 20, 9,
-    33, 208, 126, 3, 93, 70, 20, 9, 33, 206, 252, 3, 151, 220, 70, 70, 20, 9,
-    33, 206, 252, 3, 93, 70, 20, 9, 33, 168, 3, 151, 220, 70, 70, 20, 9, 33,
-    168, 3, 93, 70, 20, 9, 33, 225, 190, 3, 151, 220, 70, 70, 20, 9, 33, 225,
-    190, 3, 93, 70, 20, 9, 33, 224, 143, 3, 151, 220, 70, 70, 20, 9, 33, 224,
-    143, 3, 93, 70, 20, 9, 33, 209, 9, 3, 151, 220, 70, 70, 20, 9, 33, 209,
-    9, 3, 93, 70, 20, 9, 33, 240, 131, 3, 151, 220, 70, 70, 20, 9, 33, 240,
-    131, 3, 93, 70, 20, 9, 33, 206, 252, 3, 225, 190, 70, 20, 9, 33, 206,
-    252, 3, 168, 70, 20, 9, 33, 206, 252, 3, 224, 143, 70, 20, 9, 33, 206,
-    252, 3, 87, 70, 20, 9, 33, 206, 252, 3, 210, 143, 70, 20, 9, 33, 208,
-    126, 3, 210, 143, 70, 20, 9, 33, 209, 9, 3, 210, 143, 70, 20, 9, 33, 240,
-    131, 3, 210, 143, 70, 20, 9, 33, 203, 140, 3, 151, 220, 70, 48, 20, 9,
-    33, 203, 140, 3, 93, 48, 20, 9, 33, 251, 195, 3, 151, 220, 70, 48, 20, 9,
-    33, 251, 195, 3, 93, 48, 20, 9, 33, 233, 226, 3, 151, 220, 70, 48, 20, 9,
-    33, 233, 226, 3, 93, 48, 20, 9, 33, 208, 126, 3, 151, 220, 70, 48, 20, 9,
-    33, 208, 126, 3, 93, 48, 20, 9, 33, 206, 252, 3, 151, 220, 70, 48, 20, 9,
-    33, 206, 252, 3, 93, 48, 20, 9, 33, 168, 3, 151, 220, 70, 48, 20, 9, 33,
-    168, 3, 93, 48, 20, 9, 33, 225, 190, 3, 151, 220, 70, 48, 20, 9, 33, 225,
-    190, 3, 93, 48, 20, 9, 33, 224, 143, 3, 151, 220, 70, 48, 20, 9, 33, 224,
-    143, 3, 93, 48, 20, 9, 33, 209, 9, 3, 151, 220, 70, 48, 20, 9, 33, 209,
-    9, 3, 93, 48, 20, 9, 33, 240, 131, 3, 151, 220, 70, 48, 20, 9, 33, 240,
-    131, 3, 93, 48, 20, 9, 33, 206, 252, 3, 225, 190, 48, 20, 9, 33, 206,
-    252, 3, 168, 48, 20, 9, 33, 206, 252, 3, 224, 143, 48, 20, 9, 33, 206,
-    252, 3, 87, 48, 20, 9, 33, 206, 252, 3, 210, 143, 48, 20, 9, 33, 208,
-    126, 3, 210, 143, 48, 20, 9, 33, 209, 9, 3, 210, 143, 48, 20, 9, 33, 240,
-    131, 3, 210, 143, 48, 20, 9, 33, 206, 252, 3, 225, 190, 84, 20, 9, 33,
-    206, 252, 3, 168, 84, 20, 9, 33, 206, 252, 3, 224, 143, 84, 20, 9, 33,
-    206, 252, 3, 87, 84, 20, 9, 33, 208, 126, 3, 232, 114, 84, 20, 9, 33,
-    206, 252, 3, 232, 114, 84, 20, 9, 33, 203, 140, 3, 87, 84, 20, 9, 33,
-    208, 126, 3, 225, 190, 219, 194, 20, 9, 33, 208, 126, 3, 168, 219, 194,
-    20, 9, 33, 208, 126, 3, 224, 143, 219, 194, 20, 9, 33, 206, 252, 3, 225,
-    190, 219, 194, 20, 9, 33, 206, 252, 3, 168, 219, 194, 20, 9, 33, 206,
-    252, 3, 224, 143, 219, 194, 20, 9, 33, 203, 140, 3, 87, 219, 194, 20, 9,
-    33, 195, 110, 3, 87, 219, 194, 20, 9, 33, 151, 3, 235, 199, 48, 20, 9,
-    33, 151, 3, 235, 199, 70, 20, 214, 57, 50, 213, 140, 214, 57, 53, 213,
-    140, 9, 33, 203, 42, 3, 225, 190, 3, 87, 84, 20, 9, 33, 203, 42, 3, 168,
-    3, 225, 190, 48, 20, 9, 33, 203, 42, 3, 168, 3, 225, 190, 84, 20, 9, 33,
-    203, 42, 3, 168, 3, 87, 84, 20, 9, 33, 203, 42, 3, 224, 143, 3, 87, 84,
-    20, 9, 33, 203, 42, 3, 87, 3, 225, 190, 84, 20, 9, 33, 203, 42, 3, 87, 3,
-    168, 84, 20, 9, 33, 203, 42, 3, 87, 3, 224, 143, 84, 20, 9, 33, 225, 190,
-    3, 87, 3, 168, 48, 20, 9, 33, 225, 190, 3, 87, 3, 168, 84, 20, 9, 33,
-    168, 3, 87, 3, 93, 48, 20, 9, 33, 168, 3, 87, 3, 151, 220, 70, 48, 20, 9,
-    33, 208, 126, 3, 168, 3, 225, 190, 84, 20, 9, 33, 208, 126, 3, 225, 190,
-    3, 168, 84, 20, 9, 33, 208, 126, 3, 225, 190, 3, 151, 220, 70, 48, 20, 9,
-    33, 208, 126, 3, 87, 3, 168, 48, 20, 9, 33, 208, 126, 3, 87, 3, 168, 84,
-    20, 9, 33, 208, 126, 3, 87, 3, 225, 190, 84, 20, 9, 33, 208, 126, 3, 87,
-    3, 87, 48, 20, 9, 33, 208, 126, 3, 87, 3, 87, 84, 20, 9, 33, 209, 9, 3,
-    168, 3, 168, 48, 20, 9, 33, 209, 9, 3, 168, 3, 168, 84, 20, 9, 33, 209,
-    9, 3, 87, 3, 87, 48, 20, 9, 33, 206, 252, 3, 168, 3, 87, 48, 20, 9, 33,
-    206, 252, 3, 168, 3, 87, 84, 20, 9, 33, 206, 252, 3, 225, 190, 3, 93, 48,
-    20, 9, 33, 206, 252, 3, 87, 3, 224, 143, 48, 20, 9, 33, 206, 252, 3, 87,
-    3, 224, 143, 84, 20, 9, 33, 206, 252, 3, 87, 3, 87, 48, 20, 9, 33, 206,
-    252, 3, 87, 3, 87, 84, 20, 9, 33, 240, 131, 3, 168, 3, 151, 220, 70, 48,
-    20, 9, 33, 240, 131, 3, 224, 143, 3, 87, 48, 20, 9, 33, 240, 131, 3, 224,
-    143, 3, 87, 84, 20, 9, 33, 203, 140, 3, 87, 3, 168, 48, 20, 9, 33, 203,
-    140, 3, 87, 3, 168, 84, 20, 9, 33, 203, 140, 3, 87, 3, 87, 84, 20, 9, 33,
-    203, 140, 3, 87, 3, 93, 48, 20, 9, 33, 251, 195, 3, 225, 190, 3, 87, 48,
-    20, 9, 33, 251, 195, 3, 87, 3, 87, 48, 20, 9, 33, 251, 195, 3, 87, 3, 87,
-    84, 20, 9, 33, 251, 195, 3, 87, 3, 151, 220, 70, 48, 20, 9, 33, 233, 226,
-    3, 87, 3, 87, 48, 20, 9, 33, 233, 226, 3, 87, 3, 93, 48, 20, 9, 33, 233,
-    226, 3, 87, 3, 151, 220, 70, 48, 20, 9, 33, 235, 177, 3, 224, 143, 3, 87,
-    48, 20, 9, 33, 235, 177, 3, 224, 143, 3, 87, 84, 20, 9, 33, 211, 153, 3,
-    87, 3, 168, 48, 20, 9, 33, 211, 153, 3, 87, 3, 87, 48, 20, 9, 33, 222,
-    250, 3, 168, 3, 87, 48, 20, 9, 33, 222, 250, 3, 168, 3, 93, 48, 20, 9,
-    33, 222, 250, 3, 168, 3, 151, 220, 70, 48, 20, 9, 33, 222, 250, 3, 225,
-    190, 3, 225, 190, 84, 20, 9, 33, 222, 250, 3, 225, 190, 3, 225, 190, 48,
-    20, 9, 33, 222, 250, 3, 224, 143, 3, 87, 48, 20, 9, 33, 222, 250, 3, 224,
-    143, 3, 87, 84, 20, 9, 33, 222, 250, 3, 87, 3, 168, 48, 20, 9, 33, 222,
-    250, 3, 87, 3, 168, 84, 20, 9, 33, 87, 3, 168, 3, 225, 190, 84, 20, 9,
-    33, 87, 3, 168, 3, 87, 84, 20, 9, 33, 87, 3, 168, 3, 93, 48, 20, 9, 33,
-    87, 3, 225, 190, 3, 168, 84, 20, 9, 33, 87, 3, 225, 190, 3, 87, 84, 20,
-    9, 33, 87, 3, 224, 143, 3, 225, 190, 84, 20, 9, 33, 87, 3, 224, 143, 3,
-    87, 84, 20, 9, 33, 87, 3, 225, 190, 3, 224, 143, 84, 20, 9, 33, 232, 114,
-    3, 87, 3, 225, 190, 84, 20, 9, 33, 232, 114, 3, 87, 3, 87, 84, 20, 9, 33,
-    216, 32, 3, 168, 3, 87, 84, 20, 9, 33, 216, 32, 3, 168, 3, 151, 220, 70,
-    48, 20, 9, 33, 216, 32, 3, 225, 190, 3, 87, 48, 20, 9, 33, 216, 32, 3,
-    225, 190, 3, 87, 84, 20, 9, 33, 216, 32, 3, 225, 190, 3, 151, 220, 70,
-    48, 20, 9, 33, 216, 32, 3, 87, 3, 93, 48, 20, 9, 33, 216, 32, 3, 87, 3,
-    151, 220, 70, 48, 20, 9, 33, 93, 3, 87, 3, 87, 48, 20, 9, 33, 93, 3, 87,
-    3, 87, 84, 20, 9, 33, 248, 240, 3, 224, 143, 3, 93, 48, 20, 9, 33, 203,
-    42, 3, 225, 190, 3, 93, 48, 20, 9, 33, 203, 42, 3, 225, 190, 3, 151, 220,
-    70, 48, 20, 9, 33, 203, 42, 3, 224, 143, 3, 93, 48, 20, 9, 33, 203, 42,
-    3, 224, 143, 3, 151, 220, 70, 48, 20, 9, 33, 203, 42, 3, 87, 3, 93, 48,
-    20, 9, 33, 203, 42, 3, 87, 3, 151, 220, 70, 48, 20, 9, 33, 225, 190, 3,
-    87, 3, 93, 48, 20, 9, 33, 225, 190, 3, 168, 3, 151, 220, 70, 48, 20, 9,
-    33, 225, 190, 3, 87, 3, 151, 220, 70, 48, 20, 9, 33, 208, 126, 3, 224,
-    143, 3, 151, 220, 70, 48, 20, 9, 33, 209, 9, 3, 168, 3, 93, 48, 20, 9,
-    33, 206, 252, 3, 168, 3, 93, 48, 20, 9, 33, 240, 131, 3, 168, 3, 93, 48,
-    20, 9, 33, 222, 250, 3, 225, 190, 3, 93, 48, 20, 9, 33, 222, 250, 3, 87,
-    3, 93, 48, 20, 9, 33, 93, 3, 168, 3, 93, 48, 20, 9, 33, 93, 3, 225, 190,
-    3, 93, 48, 20, 9, 33, 93, 3, 87, 3, 93, 48, 20, 9, 33, 87, 3, 87, 3, 93,
-    48, 20, 9, 33, 211, 153, 3, 87, 3, 93, 48, 20, 9, 33, 216, 32, 3, 168, 3,
-    93, 48, 20, 9, 33, 211, 153, 3, 87, 3, 168, 84, 20, 9, 33, 222, 250, 3,
-    168, 3, 87, 84, 20, 9, 33, 251, 195, 3, 87, 3, 93, 48, 20, 9, 33, 225,
-    36, 3, 87, 3, 93, 48, 20, 9, 33, 216, 32, 3, 225, 190, 3, 168, 84, 20, 9,
-    33, 87, 3, 224, 143, 3, 93, 48, 20, 9, 33, 222, 250, 3, 225, 190, 3, 87,
-    84, 20, 9, 33, 225, 36, 3, 87, 3, 87, 48, 20, 9, 33, 222, 250, 3, 225,
-    190, 3, 87, 48, 20, 9, 33, 216, 32, 3, 225, 190, 3, 168, 48, 20, 9, 33,
-    225, 190, 3, 168, 3, 93, 48, 20, 9, 33, 168, 3, 225, 190, 3, 93, 48, 20,
-    9, 33, 87, 3, 225, 190, 3, 93, 48, 20, 9, 33, 235, 177, 3, 87, 3, 93, 48,
-    20, 9, 33, 248, 240, 3, 168, 3, 93, 48, 20, 9, 33, 225, 36, 3, 87, 3, 87,
-    84, 20, 9, 33, 251, 195, 3, 225, 190, 3, 87, 84, 20, 9, 33, 209, 9, 3,
-    87, 3, 87, 84, 20, 9, 33, 208, 126, 3, 224, 143, 3, 93, 48, 20, 9, 33,
-    216, 32, 3, 225, 190, 3, 93, 48, 20, 9, 33, 208, 236, 199, 255, 250, 203,
-    223, 234, 204, 227, 2, 70, 20, 9, 33, 211, 149, 199, 255, 250, 203, 223,
-    234, 204, 227, 2, 70, 20, 9, 33, 251, 145, 70, 20, 9, 33, 251, 178, 70,
-    20, 9, 33, 218, 218, 70, 20, 9, 33, 208, 237, 70, 20, 9, 33, 210, 200,
-    70, 20, 9, 33, 251, 167, 70, 20, 9, 33, 197, 137, 70, 20, 9, 33, 208,
-    236, 70, 20, 9, 33, 208, 235, 251, 167, 197, 136, 9, 33, 225, 205, 210,
-    64, 55, 9, 33, 248, 147, 251, 12, 251, 13, 62, 208, 113, 62, 208, 2, 62,
-    207, 190, 62, 207, 179, 62, 207, 168, 62, 207, 157, 62, 207, 146, 62,
-    207, 135, 62, 207, 124, 62, 208, 112, 62, 208, 101, 62, 208, 90, 62, 208,
-    79, 62, 208, 68, 62, 208, 57, 62, 208, 46, 212, 25, 235, 24, 36, 83, 244,
-    159, 212, 25, 235, 24, 36, 83, 143, 244, 159, 212, 25, 235, 24, 36, 83,
-    143, 234, 217, 204, 226, 212, 25, 235, 24, 36, 83, 244, 168, 212, 25,
-    235, 24, 36, 83, 207, 105, 212, 25, 235, 24, 36, 83, 236, 90, 78, 212,
-    25, 235, 24, 36, 83, 211, 79, 78, 212, 25, 235, 24, 36, 83, 50, 59, 222,
-    147, 179, 212, 25, 235, 24, 36, 83, 53, 59, 222, 147, 248, 59, 212, 25,
-    235, 24, 36, 83, 231, 155, 236, 247, 38, 33, 50, 232, 225, 38, 33, 53,
-    232, 225, 38, 52, 202, 85, 50, 232, 225, 38, 52, 202, 85, 53, 232, 225,
-    38, 220, 115, 50, 232, 225, 38, 220, 115, 53, 232, 225, 38, 241, 143,
-    220, 114, 38, 33, 50, 157, 60, 38, 33, 53, 157, 60, 38, 202, 85, 50, 157,
-    60, 38, 202, 85, 53, 157, 60, 38, 220, 115, 50, 157, 60, 38, 220, 115,
-    53, 157, 60, 38, 241, 143, 220, 115, 60, 38, 40, 202, 55, 50, 232, 225,
-    38, 40, 202, 55, 53, 232, 225, 212, 25, 235, 24, 36, 83, 99, 76, 222,
-    195, 212, 25, 235, 24, 36, 83, 236, 242, 240, 65, 212, 25, 235, 24, 36,
-    83, 236, 231, 240, 65, 212, 25, 235, 24, 36, 83, 126, 222, 75, 212, 25,
-    235, 24, 36, 83, 197, 119, 126, 222, 75, 212, 25, 235, 24, 36, 83, 50,
-    213, 140, 212, 25, 235, 24, 36, 83, 53, 213, 140, 212, 25, 235, 24, 36,
-    83, 50, 241, 18, 179, 212, 25, 235, 24, 36, 83, 53, 241, 18, 179, 212,
-    25, 235, 24, 36, 83, 50, 201, 231, 206, 245, 179, 212, 25, 235, 24, 36,
-    83, 53, 201, 231, 206, 245, 179, 212, 25, 235, 24, 36, 83, 50, 58, 222,
-    147, 179, 212, 25, 235, 24, 36, 83, 53, 58, 222, 147, 179, 212, 25, 235,
-    24, 36, 83, 50, 52, 251, 91, 179, 212, 25, 235, 24, 36, 83, 53, 52, 251,
-    91, 179, 212, 25, 235, 24, 36, 83, 50, 251, 91, 179, 212, 25, 235, 24,
-    36, 83, 53, 251, 91, 179, 212, 25, 235, 24, 36, 83, 50, 241, 102, 179,
-    212, 25, 235, 24, 36, 83, 53, 241, 102, 179, 212, 25, 235, 24, 36, 83,
-    50, 59, 241, 102, 179, 212, 25, 235, 24, 36, 83, 53, 59, 241, 102, 179,
-    207, 80, 238, 253, 59, 207, 80, 238, 253, 212, 25, 235, 24, 36, 83, 50,
-    47, 179, 212, 25, 235, 24, 36, 83, 53, 47, 179, 240, 64, 214, 19, 247,
-    33, 214, 19, 197, 119, 214, 19, 52, 197, 119, 214, 19, 240, 64, 126, 222,
-    75, 247, 33, 126, 222, 75, 197, 119, 126, 222, 75, 4, 244, 159, 4, 143,
-    244, 159, 4, 234, 217, 204, 226, 4, 207, 105, 4, 244, 168, 4, 211, 79,
-    78, 4, 236, 90, 78, 4, 236, 242, 240, 65, 4, 50, 213, 140, 4, 53, 213,
-    140, 4, 50, 241, 18, 179, 4, 53, 241, 18, 179, 4, 50, 201, 231, 206, 245,
-    179, 4, 53, 201, 231, 206, 245, 179, 4, 31, 55, 4, 251, 111, 4, 250, 179,
-    4, 98, 55, 4, 231, 6, 4, 222, 140, 55, 4, 233, 94, 55, 4, 236, 172, 55,
-    4, 210, 90, 205, 177, 4, 239, 10, 55, 4, 213, 45, 55, 4, 244, 157, 250,
-    168, 9, 235, 199, 70, 20, 9, 203, 92, 3, 235, 199, 57, 9, 240, 94, 70,
-    20, 9, 203, 136, 234, 253, 9, 224, 237, 70, 20, 9, 235, 201, 70, 20, 9,
-    235, 201, 219, 194, 20, 9, 240, 96, 70, 20, 9, 240, 96, 219, 194, 20, 9,
-    224, 239, 70, 20, 9, 224, 239, 219, 194, 20, 9, 207, 41, 70, 20, 9, 207,
-    41, 219, 194, 20, 9, 204, 120, 70, 20, 9, 204, 120, 219, 194, 20, 9, 1,
-    232, 214, 70, 20, 9, 1, 151, 3, 220, 110, 90, 70, 20, 9, 1, 151, 3, 220,
-    110, 90, 48, 20, 9, 1, 151, 3, 232, 214, 90, 70, 20, 9, 1, 151, 3, 232,
-    214, 90, 48, 20, 9, 1, 197, 118, 3, 232, 214, 90, 70, 20, 9, 1, 197, 118,
-    3, 232, 214, 90, 48, 20, 9, 1, 151, 3, 232, 214, 248, 227, 70, 20, 9, 1,
-    151, 3, 232, 214, 248, 227, 48, 20, 9, 1, 93, 3, 232, 214, 90, 70, 20, 9,
-    1, 93, 3, 232, 214, 90, 48, 20, 9, 1, 93, 3, 232, 214, 90, 84, 20, 9, 1,
-    93, 3, 232, 214, 90, 219, 194, 20, 9, 1, 151, 70, 20, 9, 1, 151, 48, 20,
-    9, 1, 248, 240, 70, 20, 9, 1, 248, 240, 48, 20, 9, 1, 248, 240, 84, 20,
-    9, 1, 248, 240, 219, 194, 20, 9, 1, 203, 42, 220, 36, 70, 20, 9, 1, 203,
-    42, 220, 36, 48, 20, 9, 1, 203, 42, 70, 20, 9, 1, 203, 42, 48, 20, 9, 1,
-    203, 42, 84, 20, 9, 1, 203, 42, 219, 194, 20, 9, 1, 202, 214, 70, 20, 9,
-    1, 202, 214, 48, 20, 9, 1, 202, 214, 84, 20, 9, 1, 202, 214, 219, 194,
-    20, 9, 1, 225, 190, 70, 20, 9, 1, 225, 190, 48, 20, 9, 1, 225, 190, 84,
-    20, 9, 1, 225, 190, 219, 194, 20, 9, 1, 168, 70, 20, 9, 1, 168, 48, 20,
-    9, 1, 168, 84, 20, 9, 1, 168, 219, 194, 20, 9, 1, 224, 143, 70, 20, 9, 1,
-    224, 143, 48, 20, 9, 1, 224, 143, 84, 20, 9, 1, 224, 143, 219, 194, 20,
-    9, 1, 240, 108, 70, 20, 9, 1, 240, 108, 48, 20, 9, 1, 202, 226, 70, 20,
-    9, 1, 202, 226, 48, 20, 9, 1, 210, 143, 70, 20, 9, 1, 210, 143, 48, 20,
-    9, 1, 195, 107, 70, 20, 9, 1, 195, 107, 48, 20, 9, 1, 208, 126, 70, 20,
-    9, 1, 208, 126, 48, 20, 9, 1, 208, 126, 84, 20, 9, 1, 208, 126, 219, 194,
-    20, 9, 1, 206, 252, 70, 20, 9, 1, 206, 252, 48, 20, 9, 1, 206, 252, 84,
-    20, 9, 1, 206, 252, 219, 194, 20, 9, 1, 209, 9, 70, 20, 9, 1, 209, 9, 48,
-    20, 9, 1, 209, 9, 84, 20, 9, 1, 209, 9, 219, 194, 20, 9, 1, 240, 131, 70,
-    20, 9, 1, 240, 131, 48, 20, 9, 1, 240, 131, 84, 20, 9, 1, 240, 131, 219,
-    194, 20, 9, 1, 203, 140, 70, 20, 9, 1, 203, 140, 48, 20, 9, 1, 203, 140,
-    84, 20, 9, 1, 203, 140, 219, 194, 20, 9, 1, 195, 110, 70, 20, 9, 1, 195,
-    110, 48, 20, 9, 1, 195, 110, 84, 20, 9, 1, 195, 110, 219, 194, 20, 9, 1,
-    251, 195, 70, 20, 9, 1, 251, 195, 48, 20, 9, 1, 251, 195, 84, 20, 9, 1,
-    251, 195, 219, 194, 20, 9, 1, 233, 226, 70, 20, 9, 1, 233, 226, 48, 20,
-    9, 1, 233, 226, 84, 20, 9, 1, 233, 226, 219, 194, 20, 9, 1, 235, 177, 70,
-    20, 9, 1, 235, 177, 48, 20, 9, 1, 235, 177, 84, 20, 9, 1, 235, 177, 219,
-    194, 20, 9, 1, 211, 153, 70, 20, 9, 1, 211, 153, 48, 20, 9, 1, 211, 153,
-    84, 20, 9, 1, 211, 153, 219, 194, 20, 9, 1, 225, 36, 70, 20, 9, 1, 225,
-    36, 48, 20, 9, 1, 225, 36, 84, 20, 9, 1, 225, 36, 219, 194, 20, 9, 1,
-    222, 250, 70, 20, 9, 1, 222, 250, 48, 20, 9, 1, 222, 250, 84, 20, 9, 1,
-    222, 250, 219, 194, 20, 9, 1, 87, 70, 20, 9, 1, 87, 48, 20, 9, 1, 87, 84,
-    20, 9, 1, 87, 219, 194, 20, 9, 1, 216, 32, 70, 20, 9, 1, 216, 32, 48, 20,
-    9, 1, 216, 32, 84, 20, 9, 1, 216, 32, 219, 194, 20, 9, 1, 232, 114, 70,
-    20, 9, 1, 232, 114, 48, 20, 9, 1, 232, 114, 84, 20, 9, 1, 232, 114, 219,
-    194, 20, 9, 1, 197, 118, 70, 20, 9, 1, 197, 118, 48, 20, 9, 1, 151, 220,
-    70, 70, 20, 9, 1, 151, 220, 70, 48, 20, 9, 1, 93, 70, 20, 9, 1, 93, 48,
-    20, 9, 1, 93, 84, 20, 9, 1, 93, 219, 194, 20, 9, 33, 222, 250, 3, 151, 3,
-    220, 110, 90, 70, 20, 9, 33, 222, 250, 3, 151, 3, 220, 110, 90, 48, 20,
-    9, 33, 222, 250, 3, 151, 3, 232, 214, 90, 70, 20, 9, 33, 222, 250, 3,
-    151, 3, 232, 214, 90, 48, 20, 9, 33, 222, 250, 3, 151, 3, 232, 214, 248,
-    227, 70, 20, 9, 33, 222, 250, 3, 151, 3, 232, 214, 248, 227, 48, 20, 9,
-    33, 222, 250, 3, 151, 70, 20, 9, 33, 222, 250, 3, 151, 48, 20, 195, 80,
-    197, 59, 216, 44, 205, 148, 174, 236, 90, 78, 174, 211, 62, 78, 174, 31,
-    55, 174, 239, 10, 55, 174, 213, 45, 55, 174, 251, 111, 174, 251, 30, 174,
-    50, 213, 140, 174, 53, 213, 140, 174, 250, 179, 174, 98, 55, 174, 244,
-    159, 174, 231, 6, 174, 234, 217, 204, 226, 174, 205, 177, 174, 17, 195,
-    79, 174, 17, 100, 174, 17, 102, 174, 17, 134, 174, 17, 136, 174, 17, 146,
-    174, 17, 167, 174, 17, 178, 174, 17, 171, 174, 17, 182, 174, 244, 168,
-    174, 207, 105, 174, 222, 140, 55, 174, 236, 172, 55, 174, 233, 94, 55,
-    174, 211, 79, 78, 174, 244, 157, 250, 168, 174, 8, 6, 1, 63, 174, 8, 6,
-    1, 250, 112, 174, 8, 6, 1, 247, 207, 174, 8, 6, 1, 240, 231, 174, 8, 6,
-    1, 69, 174, 8, 6, 1, 236, 49, 174, 8, 6, 1, 234, 190, 174, 8, 6, 1, 233,
-    15, 174, 8, 6, 1, 68, 174, 8, 6, 1, 225, 217, 174, 8, 6, 1, 225, 80, 174,
-    8, 6, 1, 159, 174, 8, 6, 1, 221, 136, 174, 8, 6, 1, 218, 55, 174, 8, 6,
-    1, 72, 174, 8, 6, 1, 214, 3, 174, 8, 6, 1, 211, 167, 174, 8, 6, 1, 144,
-    174, 8, 6, 1, 209, 80, 174, 8, 6, 1, 203, 216, 174, 8, 6, 1, 66, 174, 8,
-    6, 1, 199, 230, 174, 8, 6, 1, 197, 199, 174, 8, 6, 1, 196, 222, 174, 8,
-    6, 1, 196, 148, 174, 8, 6, 1, 195, 158, 174, 50, 47, 179, 174, 210, 90,
-    205, 177, 174, 53, 47, 179, 174, 244, 241, 252, 22, 174, 126, 222, 75,
-    174, 233, 101, 252, 22, 174, 8, 4, 1, 63, 174, 8, 4, 1, 250, 112, 174, 8,
-    4, 1, 247, 207, 174, 8, 4, 1, 240, 231, 174, 8, 4, 1, 69, 174, 8, 4, 1,
-    236, 49, 174, 8, 4, 1, 234, 190, 174, 8, 4, 1, 233, 15, 174, 8, 4, 1, 68,
-    174, 8, 4, 1, 225, 217, 174, 8, 4, 1, 225, 80, 174, 8, 4, 1, 159, 174, 8,
-    4, 1, 221, 136, 174, 8, 4, 1, 218, 55, 174, 8, 4, 1, 72, 174, 8, 4, 1,
-    214, 3, 174, 8, 4, 1, 211, 167, 174, 8, 4, 1, 144, 174, 8, 4, 1, 209, 80,
-    174, 8, 4, 1, 203, 216, 174, 8, 4, 1, 66, 174, 8, 4, 1, 199, 230, 174, 8,
-    4, 1, 197, 199, 174, 8, 4, 1, 196, 222, 174, 8, 4, 1, 196, 148, 174, 8,
-    4, 1, 195, 158, 174, 50, 241, 18, 179, 174, 83, 222, 75, 174, 53, 241,
-    18, 179, 174, 202, 84, 174, 50, 59, 213, 140, 174, 53, 59, 213, 140, 138,
-    143, 234, 217, 204, 226, 138, 50, 241, 102, 179, 138, 53, 241, 102, 179,
-    138, 143, 244, 159, 138, 71, 112, 238, 253, 138, 71, 1, 197, 34, 138, 71,
-    1, 4, 63, 138, 71, 1, 4, 68, 138, 71, 1, 4, 66, 138, 71, 1, 4, 69, 138,
-    71, 1, 4, 72, 138, 71, 1, 4, 164, 138, 71, 1, 4, 195, 217, 138, 71, 1, 4,
-    196, 3, 138, 71, 1, 4, 201, 40, 138, 224, 234, 211, 252, 205, 162, 78,
-    138, 71, 1, 63, 138, 71, 1, 68, 138, 71, 1, 66, 138, 71, 1, 69, 138, 71,
-    1, 72, 138, 71, 1, 155, 138, 71, 1, 224, 101, 138, 71, 1, 223, 187, 138,
-    71, 1, 224, 209, 138, 71, 1, 224, 11, 138, 71, 1, 183, 138, 71, 1, 206,
-    112, 138, 71, 1, 204, 172, 138, 71, 1, 208, 147, 138, 71, 1, 205, 200,
-    138, 71, 1, 189, 138, 71, 1, 202, 122, 138, 71, 1, 201, 40, 138, 71, 1,
-    203, 68, 138, 71, 1, 149, 138, 71, 1, 176, 138, 71, 1, 216, 223, 138, 71,
-    1, 215, 186, 138, 71, 1, 217, 118, 138, 71, 1, 216, 50, 138, 71, 1, 142,
-    138, 71, 1, 232, 71, 138, 71, 1, 231, 75, 138, 71, 1, 232, 147, 138, 71,
-    1, 231, 193, 138, 71, 1, 166, 138, 71, 1, 219, 78, 138, 71, 1, 218, 145,
-    138, 71, 1, 219, 207, 138, 71, 1, 218, 251, 138, 71, 1, 164, 138, 71, 1,
-    195, 217, 138, 71, 1, 196, 3, 138, 71, 1, 169, 138, 71, 1, 210, 72, 138,
-    71, 1, 209, 140, 138, 71, 1, 210, 183, 138, 71, 1, 209, 232, 138, 71, 1,
-    197, 166, 138, 71, 1, 218, 55, 138, 71, 198, 244, 205, 162, 78, 138, 71,
-    207, 110, 205, 162, 78, 138, 29, 235, 134, 138, 29, 1, 224, 48, 138, 29,
-    1, 205, 72, 138, 29, 1, 224, 41, 138, 29, 1, 216, 208, 138, 29, 1, 216,
-    206, 138, 29, 1, 216, 205, 138, 29, 1, 202, 97, 138, 29, 1, 205, 61, 138,
-    29, 1, 210, 54, 138, 29, 1, 210, 49, 138, 29, 1, 210, 46, 138, 29, 1,
-    210, 39, 138, 29, 1, 210, 34, 138, 29, 1, 210, 29, 138, 29, 1, 210, 40,
-    138, 29, 1, 210, 52, 138, 29, 1, 219, 56, 138, 29, 1, 212, 206, 138, 29,
-    1, 205, 69, 138, 29, 1, 212, 195, 138, 29, 1, 206, 52, 138, 29, 1, 205,
-    66, 138, 29, 1, 226, 143, 138, 29, 1, 245, 6, 138, 29, 1, 205, 76, 138,
-    29, 1, 245, 71, 138, 29, 1, 224, 122, 138, 29, 1, 202, 191, 138, 29, 1,
-    212, 244, 138, 29, 1, 232, 55, 138, 29, 1, 63, 138, 29, 1, 251, 245, 138,
-    29, 1, 164, 138, 29, 1, 196, 118, 138, 29, 1, 236, 192, 138, 29, 1, 69,
-    138, 29, 1, 196, 56, 138, 29, 1, 196, 69, 138, 29, 1, 72, 138, 29, 1,
-    197, 166, 138, 29, 1, 197, 157, 138, 29, 1, 214, 164, 138, 29, 1, 196, 3,
-    138, 29, 1, 66, 138, 29, 1, 197, 91, 138, 29, 1, 197, 109, 138, 29, 1,
-    197, 70, 138, 29, 1, 195, 217, 138, 29, 1, 236, 116, 138, 29, 1, 196, 24,
-    138, 29, 1, 68, 174, 247, 39, 55, 174, 212, 63, 55, 174, 216, 19, 55,
-    174, 220, 114, 174, 248, 33, 154, 174, 196, 60, 55, 174, 197, 17, 55,
-    138, 235, 19, 175, 199, 100, 138, 107, 51, 138, 200, 24, 51, 138, 91, 51,
-    138, 237, 231, 51, 138, 58, 205, 94, 138, 59, 244, 249, 226, 30, 251, 76,
-    251, 102, 226, 30, 251, 76, 207, 90, 226, 30, 251, 76, 203, 8, 214, 183,
-    210, 114, 246, 255, 210, 114, 246, 255, 30, 74, 5, 250, 96, 63, 30, 74,
-    5, 250, 65, 69, 30, 74, 5, 250, 74, 68, 30, 74, 5, 250, 42, 72, 30, 74,
-    5, 250, 92, 66, 30, 74, 5, 250, 111, 240, 136, 30, 74, 5, 250, 58, 239,
-    252, 30, 74, 5, 250, 98, 239, 152, 30, 74, 5, 250, 88, 239, 28, 30, 74,
-    5, 250, 52, 237, 201, 30, 74, 5, 250, 46, 225, 214, 30, 74, 5, 250, 57,
-    225, 193, 30, 74, 5, 250, 67, 225, 129, 30, 74, 5, 250, 38, 225, 110, 30,
-    74, 5, 250, 26, 155, 30, 74, 5, 250, 59, 224, 209, 30, 74, 5, 250, 36,
-    224, 101, 30, 74, 5, 250, 33, 224, 11, 30, 74, 5, 250, 22, 223, 187, 30,
-    74, 5, 250, 23, 166, 30, 74, 5, 250, 89, 219, 207, 30, 74, 5, 250, 30,
-    219, 78, 30, 74, 5, 250, 87, 218, 251, 30, 74, 5, 250, 79, 218, 145, 30,
-    74, 5, 250, 100, 176, 30, 74, 5, 250, 78, 217, 118, 30, 74, 5, 250, 72,
-    216, 223, 30, 74, 5, 250, 51, 216, 50, 30, 74, 5, 250, 48, 215, 186, 30,
-    74, 5, 250, 107, 161, 30, 74, 5, 250, 31, 213, 92, 30, 74, 5, 250, 64,
-    212, 220, 30, 74, 5, 250, 91, 212, 117, 30, 74, 5, 250, 53, 211, 227, 30,
-    74, 5, 250, 86, 211, 159, 30, 74, 5, 250, 25, 211, 139, 30, 74, 5, 250,
-    81, 211, 121, 30, 74, 5, 250, 70, 211, 109, 30, 74, 5, 250, 43, 169, 30,
-    74, 5, 250, 75, 210, 183, 30, 74, 5, 250, 50, 210, 72, 30, 74, 5, 250,
-    109, 209, 232, 30, 74, 5, 250, 76, 209, 140, 30, 74, 5, 250, 71, 183, 30,
-    74, 5, 250, 94, 208, 147, 30, 74, 5, 250, 62, 206, 112, 30, 74, 5, 250,
-    90, 205, 200, 30, 74, 5, 250, 45, 204, 172, 30, 74, 5, 250, 44, 189, 30,
-    74, 5, 250, 105, 203, 68, 30, 74, 5, 250, 66, 202, 122, 30, 74, 5, 250,
-    103, 149, 30, 74, 5, 250, 34, 201, 40, 30, 74, 5, 250, 49, 197, 166, 30,
-    74, 5, 250, 28, 197, 109, 30, 74, 5, 250, 63, 197, 70, 30, 74, 5, 250,
-    61, 197, 34, 30, 74, 5, 250, 85, 195, 115, 30, 74, 5, 250, 29, 195, 88,
-    30, 74, 5, 250, 82, 195, 11, 30, 74, 5, 250, 77, 254, 177, 30, 74, 5,
-    250, 60, 254, 65, 30, 74, 5, 250, 19, 250, 150, 30, 74, 5, 250, 32, 237,
-    166, 30, 74, 5, 250, 15, 237, 165, 30, 74, 5, 250, 55, 215, 118, 30, 74,
-    5, 250, 73, 211, 225, 30, 74, 5, 250, 41, 211, 229, 30, 74, 5, 250, 27,
-    210, 246, 30, 74, 5, 250, 69, 210, 245, 30, 74, 5, 250, 35, 209, 225, 30,
-    74, 5, 250, 37, 203, 163, 30, 74, 5, 250, 17, 200, 243, 30, 74, 5, 250,
-    14, 102, 30, 74, 16, 250, 84, 30, 74, 16, 250, 83, 30, 74, 16, 250, 80,
-    30, 74, 16, 250, 68, 30, 74, 16, 250, 56, 30, 74, 16, 250, 54, 30, 74,
-    16, 250, 47, 30, 74, 16, 250, 40, 30, 74, 16, 250, 39, 30, 74, 16, 250,
-    24, 30, 74, 16, 250, 21, 30, 74, 16, 250, 20, 30, 74, 16, 250, 18, 30,
-    74, 16, 250, 16, 30, 74, 147, 250, 13, 220, 62, 30, 74, 147, 250, 12,
-    197, 21, 30, 74, 147, 250, 11, 239, 234, 30, 74, 147, 250, 10, 236, 169,
-    30, 74, 147, 250, 9, 220, 29, 30, 74, 147, 250, 8, 205, 15, 30, 74, 147,
-    250, 7, 236, 97, 30, 74, 147, 250, 6, 210, 210, 30, 74, 147, 250, 5, 206,
-    254, 30, 74, 147, 250, 4, 232, 139, 30, 74, 147, 250, 3, 205, 156, 30,
-    74, 147, 250, 2, 248, 114, 30, 74, 147, 250, 1, 241, 83, 30, 74, 147,
-    250, 0, 248, 7, 30, 74, 147, 249, 255, 197, 79, 30, 74, 147, 249, 254,
-    249, 76, 30, 74, 147, 249, 253, 214, 129, 30, 74, 147, 249, 252, 205,
-    126, 30, 74, 147, 249, 251, 240, 239, 30, 74, 218, 205, 249, 250, 225, 4,
-    30, 74, 218, 205, 249, 249, 225, 15, 30, 74, 147, 249, 248, 214, 144, 30,
-    74, 147, 249, 247, 197, 46, 30, 74, 147, 249, 246, 30, 74, 218, 205, 249,
-    245, 250, 244, 30, 74, 218, 205, 249, 244, 219, 156, 30, 74, 147, 249,
-    243, 248, 32, 30, 74, 147, 249, 242, 233, 135, 30, 74, 147, 249, 241, 30,
-    74, 147, 249, 240, 197, 12, 30, 74, 147, 249, 239, 30, 74, 147, 249, 238,
-    30, 74, 147, 249, 237, 231, 102, 30, 74, 147, 249, 236, 30, 74, 147, 249,
-    235, 30, 74, 147, 249, 234, 30, 74, 218, 205, 249, 232, 201, 2, 30, 74,
-    147, 249, 231, 30, 74, 147, 249, 230, 30, 74, 147, 249, 229, 244, 197,
-    30, 74, 147, 249, 228, 30, 74, 147, 249, 227, 30, 74, 147, 249, 226, 234,
-    79, 30, 74, 147, 249, 225, 250, 229, 30, 74, 147, 249, 224, 30, 74, 147,
-    249, 223, 30, 74, 147, 249, 222, 30, 74, 147, 249, 221, 30, 74, 147, 249,
-    220, 30, 74, 147, 249, 219, 30, 74, 147, 249, 218, 30, 74, 147, 249, 217,
-    30, 74, 147, 249, 216, 30, 74, 147, 249, 215, 218, 197, 30, 74, 147, 249,
-    214, 30, 74, 147, 249, 213, 201, 190, 30, 74, 147, 249, 212, 30, 74, 147,
-    249, 211, 30, 74, 147, 249, 210, 30, 74, 147, 249, 209, 30, 74, 147, 249,
-    208, 30, 74, 147, 249, 207, 30, 74, 147, 249, 206, 30, 74, 147, 249, 205,
-    30, 74, 147, 249, 204, 30, 74, 147, 249, 203, 30, 74, 147, 249, 202, 30,
-    74, 147, 249, 201, 232, 103, 30, 74, 147, 249, 180, 235, 33, 30, 74, 147,
-    249, 177, 249, 51, 30, 74, 147, 249, 172, 205, 134, 30, 74, 147, 249,
-    171, 51, 30, 74, 147, 249, 170, 30, 74, 147, 249, 169, 204, 48, 30, 74,
-    147, 249, 168, 30, 74, 147, 249, 167, 30, 74, 147, 249, 166, 197, 74,
-    245, 112, 30, 74, 147, 249, 165, 245, 112, 30, 74, 147, 249, 164, 245,
-    113, 234, 250, 30, 74, 147, 249, 163, 197, 77, 30, 74, 147, 249, 162, 30,
-    74, 147, 249, 161, 30, 74, 218, 205, 249, 160, 239, 87, 30, 74, 147, 249,
-    159, 30, 74, 147, 249, 158, 30, 74, 147, 249, 156, 30, 74, 147, 249, 155,
-    30, 74, 147, 249, 154, 30, 74, 147, 249, 153, 240, 68, 30, 74, 147, 249,
-    152, 30, 74, 147, 249, 151, 30, 74, 147, 249, 150, 30, 74, 147, 249, 149,
-    30, 74, 147, 249, 148, 30, 74, 147, 199, 47, 249, 233, 30, 74, 147, 199,
-    47, 249, 200, 30, 74, 147, 199, 47, 249, 199, 30, 74, 147, 199, 47, 249,
-    198, 30, 74, 147, 199, 47, 249, 197, 30, 74, 147, 199, 47, 249, 196, 30,
-    74, 147, 199, 47, 249, 195, 30, 74, 147, 199, 47, 249, 194, 30, 74, 147,
-    199, 47, 249, 193, 30, 74, 147, 199, 47, 249, 192, 30, 74, 147, 199, 47,
-    249, 191, 30, 74, 147, 199, 47, 249, 190, 30, 74, 147, 199, 47, 249, 189,
-    30, 74, 147, 199, 47, 249, 188, 30, 74, 147, 199, 47, 249, 187, 30, 74,
-    147, 199, 47, 249, 186, 30, 74, 147, 199, 47, 249, 185, 30, 74, 147, 199,
-    47, 249, 184, 30, 74, 147, 199, 47, 249, 183, 30, 74, 147, 199, 47, 249,
-    182, 30, 74, 147, 199, 47, 249, 181, 30, 74, 147, 199, 47, 249, 179, 30,
-    74, 147, 199, 47, 249, 178, 30, 74, 147, 199, 47, 249, 176, 30, 74, 147,
-    199, 47, 249, 175, 30, 74, 147, 199, 47, 249, 174, 30, 74, 147, 199, 47,
-    249, 173, 30, 74, 147, 199, 47, 249, 157, 30, 74, 147, 199, 47, 249, 147,
-    251, 238, 197, 9, 207, 91, 222, 75, 251, 238, 197, 9, 207, 91, 238, 253,
-    251, 238, 245, 102, 78, 251, 238, 31, 100, 251, 238, 31, 102, 251, 238,
-    31, 134, 251, 238, 31, 136, 251, 238, 31, 146, 251, 238, 31, 167, 251,
-    238, 31, 178, 251, 238, 31, 171, 251, 238, 31, 182, 251, 238, 31, 203,
-    23, 251, 238, 31, 200, 234, 251, 238, 31, 202, 177, 251, 238, 31, 235,
-    14, 251, 238, 31, 235, 145, 251, 238, 31, 206, 13, 251, 238, 31, 207, 65,
-    251, 238, 31, 237, 20, 251, 238, 31, 216, 174, 251, 238, 31, 97, 231, 57,
-    251, 238, 31, 99, 231, 57, 251, 238, 31, 115, 231, 57, 251, 238, 31, 235,
-    7, 231, 57, 251, 238, 31, 235, 101, 231, 57, 251, 238, 31, 206, 29, 231,
-    57, 251, 238, 31, 207, 71, 231, 57, 251, 238, 31, 237, 31, 231, 57, 251,
-    238, 31, 216, 179, 231, 57, 251, 238, 31, 97, 170, 251, 238, 31, 99, 170,
-    251, 238, 31, 115, 170, 251, 238, 31, 235, 7, 170, 251, 238, 31, 235,
-    101, 170, 251, 238, 31, 206, 29, 170, 251, 238, 31, 207, 71, 170, 251,
-    238, 31, 237, 31, 170, 251, 238, 31, 216, 179, 170, 251, 238, 31, 203,
-    24, 170, 251, 238, 31, 200, 235, 170, 251, 238, 31, 202, 178, 170, 251,
-    238, 31, 235, 15, 170, 251, 238, 31, 235, 146, 170, 251, 238, 31, 206,
-    14, 170, 251, 238, 31, 207, 66, 170, 251, 238, 31, 237, 21, 170, 251,
-    238, 31, 216, 175, 170, 251, 238, 197, 94, 249, 67, 200, 49, 251, 238,
-    197, 94, 235, 113, 204, 137, 251, 238, 197, 94, 208, 136, 204, 137, 251,
-    238, 197, 94, 202, 185, 204, 137, 251, 238, 197, 94, 235, 0, 204, 137,
-    251, 238, 237, 204, 219, 203, 235, 113, 204, 137, 251, 238, 222, 56, 219,
-    203, 235, 113, 204, 137, 251, 238, 219, 203, 208, 136, 204, 137, 251,
-    238, 219, 203, 202, 185, 204, 137, 32, 252, 13, 250, 152, 97, 211, 87,
-    32, 252, 13, 250, 152, 97, 232, 225, 32, 252, 13, 250, 152, 97, 237, 227,
-    32, 252, 13, 250, 152, 146, 32, 252, 13, 250, 152, 235, 145, 32, 252, 13,
-    250, 152, 235, 101, 231, 57, 32, 252, 13, 250, 152, 235, 101, 170, 32,
-    252, 13, 250, 152, 235, 146, 170, 32, 252, 13, 250, 152, 235, 101, 203,
-    123, 32, 252, 13, 250, 152, 203, 24, 203, 123, 32, 252, 13, 250, 152,
-    235, 146, 203, 123, 32, 252, 13, 250, 152, 97, 231, 58, 203, 123, 32,
-    252, 13, 250, 152, 235, 101, 231, 58, 203, 123, 32, 252, 13, 250, 152,
-    97, 202, 159, 203, 123, 32, 252, 13, 250, 152, 235, 101, 202, 159, 203,
-    123, 32, 252, 13, 250, 152, 235, 101, 204, 255, 32, 252, 13, 250, 152,
-    203, 24, 204, 255, 32, 252, 13, 250, 152, 235, 146, 204, 255, 32, 252,
-    13, 250, 152, 97, 231, 58, 204, 255, 32, 252, 13, 250, 152, 235, 101,
-    231, 58, 204, 255, 32, 252, 13, 250, 152, 97, 202, 159, 204, 255, 32,
-    252, 13, 250, 152, 203, 24, 202, 159, 204, 255, 32, 252, 13, 250, 152,
-    235, 146, 202, 159, 204, 255, 32, 252, 13, 250, 152, 203, 24, 218, 254,
-    32, 252, 13, 232, 97, 97, 212, 135, 32, 252, 13, 202, 201, 100, 32, 252,
-    13, 232, 93, 100, 32, 252, 13, 236, 178, 102, 32, 252, 13, 202, 201, 102,
-    32, 252, 13, 240, 236, 99, 237, 226, 32, 252, 13, 236, 178, 99, 237, 226,
-    32, 252, 13, 201, 156, 146, 32, 252, 13, 201, 156, 203, 23, 32, 252, 13,
-    201, 156, 203, 24, 251, 131, 20, 32, 252, 13, 232, 93, 203, 23, 32, 252,
-    13, 219, 145, 203, 23, 32, 252, 13, 202, 201, 203, 23, 32, 252, 13, 202,
-    201, 202, 177, 32, 252, 13, 201, 156, 235, 145, 32, 252, 13, 201, 156,
-    235, 146, 251, 131, 20, 32, 252, 13, 232, 93, 235, 145, 32, 252, 13, 202,
-    201, 235, 145, 32, 252, 13, 202, 201, 97, 231, 57, 32, 252, 13, 202, 201,
-    115, 231, 57, 32, 252, 13, 236, 178, 235, 101, 231, 57, 32, 252, 13, 201,
-    156, 235, 101, 231, 57, 32, 252, 13, 202, 201, 235, 101, 231, 57, 32,
-    252, 13, 247, 96, 235, 101, 231, 57, 32, 252, 13, 217, 196, 235, 101,
-    231, 57, 32, 252, 13, 202, 201, 97, 170, 32, 252, 13, 202, 201, 235, 101,
-    170, 32, 252, 13, 239, 215, 235, 101, 218, 254, 32, 252, 13, 204, 214,
-    235, 146, 218, 254, 32, 97, 157, 55, 32, 97, 157, 2, 251, 131, 20, 32,
-    99, 202, 182, 55, 32, 115, 211, 86, 55, 32, 196, 67, 55, 32, 203, 124,
-    55, 32, 237, 228, 55, 32, 214, 180, 55, 32, 99, 214, 179, 55, 32, 115,
-    214, 179, 55, 32, 235, 7, 214, 179, 55, 32, 235, 101, 214, 179, 55, 32,
-    219, 139, 55, 32, 223, 108, 249, 67, 55, 32, 222, 49, 55, 32, 214, 36,
-    55, 32, 196, 199, 55, 32, 250, 209, 55, 32, 250, 225, 55, 32, 233, 110,
-    55, 32, 201, 116, 249, 67, 55, 32, 195, 80, 55, 32, 97, 211, 88, 55, 32,
-    206, 54, 55, 32, 226, 67, 55, 216, 39, 55, 209, 208, 207, 62, 55, 209,
-    208, 200, 65, 55, 209, 208, 207, 97, 55, 209, 208, 207, 60, 55, 209, 208,
-    239, 102, 207, 60, 55, 209, 208, 206, 77, 55, 209, 208, 239, 211, 55,
-    209, 208, 211, 71, 55, 209, 208, 207, 78, 55, 209, 208, 237, 180, 55,
-    209, 208, 250, 203, 55, 209, 208, 247, 32, 55, 32, 16, 203, 90, 210, 74,
-    213, 1, 239, 79, 2, 213, 81, 213, 1, 239, 79, 2, 212, 127, 232, 137, 213,
-    1, 239, 79, 2, 203, 93, 232, 137, 213, 1, 239, 79, 2, 247, 119, 213, 1,
-    239, 79, 2, 245, 66, 213, 1, 239, 79, 2, 197, 21, 213, 1, 239, 79, 2,
-    232, 103, 213, 1, 239, 79, 2, 234, 71, 213, 1, 239, 79, 2, 202, 113, 213,
-    1, 239, 79, 2, 51, 213, 1, 239, 79, 2, 248, 77, 213, 1, 239, 79, 2, 206,
-    220, 213, 1, 239, 79, 2, 244, 190, 213, 1, 239, 79, 2, 220, 61, 213, 1,
-    239, 79, 2, 220, 0, 213, 1, 239, 79, 2, 208, 185, 213, 1, 239, 79, 2,
-    222, 104, 213, 1, 239, 79, 2, 248, 98, 213, 1, 239, 79, 2, 247, 103, 212,
-    142, 213, 1, 239, 79, 2, 239, 11, 213, 1, 239, 79, 2, 244, 165, 213, 1,
-    239, 79, 2, 205, 235, 213, 1, 239, 79, 2, 244, 166, 213, 1, 239, 79, 2,
-    248, 248, 213, 1, 239, 79, 2, 206, 207, 213, 1, 239, 79, 2, 231, 102,
-    213, 1, 239, 79, 2, 232, 61, 213, 1, 239, 79, 2, 248, 2, 222, 172, 213,
-    1, 239, 79, 2, 247, 92, 213, 1, 239, 79, 2, 210, 210, 213, 1, 239, 79, 2,
-    237, 79, 213, 1, 239, 79, 2, 237, 236, 213, 1, 239, 79, 2, 201, 18, 213,
-    1, 239, 79, 2, 248, 251, 213, 1, 239, 79, 2, 212, 143, 201, 190, 213, 1,
-    239, 79, 2, 199, 14, 213, 1, 239, 79, 2, 213, 158, 213, 1, 239, 79, 2,
-    209, 197, 213, 1, 239, 79, 2, 222, 88, 213, 1, 239, 79, 2, 214, 14, 249,
-    138, 213, 1, 239, 79, 2, 235, 58, 213, 1, 239, 79, 2, 233, 102, 213, 1,
-    239, 79, 2, 204, 215, 213, 1, 239, 79, 2, 4, 250, 123, 213, 1, 239, 79,
-    2, 197, 119, 249, 89, 213, 1, 239, 79, 2, 38, 214, 182, 106, 221, 149, 1,
-    63, 221, 149, 1, 69, 221, 149, 1, 250, 112, 221, 149, 1, 248, 198, 221,
-    149, 1, 234, 190, 221, 149, 1, 240, 231, 221, 149, 1, 68, 221, 149, 1,
-    197, 199, 221, 149, 1, 195, 158, 221, 149, 1, 202, 235, 221, 149, 1, 225,
-    217, 221, 149, 1, 225, 80, 221, 149, 1, 211, 167, 221, 149, 1, 159, 221,
-    149, 1, 221, 136, 221, 149, 1, 218, 55, 221, 149, 1, 219, 0, 221, 149, 1,
-    216, 87, 221, 149, 1, 66, 221, 149, 1, 214, 3, 221, 149, 1, 224, 37, 221,
-    149, 1, 144, 221, 149, 1, 209, 80, 221, 149, 1, 203, 216, 221, 149, 1,
-    201, 81, 221, 149, 1, 251, 106, 221, 149, 1, 236, 230, 221, 149, 1, 233,
-    15, 221, 149, 1, 196, 222, 247, 109, 1, 63, 247, 109, 1, 213, 245, 247,
-    109, 1, 240, 231, 247, 109, 1, 159, 247, 109, 1, 199, 243, 247, 109, 1,
-    144, 247, 109, 1, 222, 201, 247, 109, 1, 254, 177, 247, 109, 1, 211, 167,
-    247, 109, 1, 250, 112, 247, 109, 1, 221, 136, 247, 109, 1, 72, 247, 109,
-    1, 240, 138, 247, 109, 1, 203, 216, 247, 109, 1, 207, 52, 247, 109, 1,
-    207, 51, 247, 109, 1, 209, 80, 247, 109, 1, 247, 206, 247, 109, 1, 66,
-    247, 109, 1, 216, 87, 247, 109, 1, 196, 222, 247, 109, 1, 218, 55, 247,
-    109, 1, 201, 80, 247, 109, 1, 214, 3, 247, 109, 1, 205, 83, 247, 109, 1,
-    68, 247, 109, 1, 69, 247, 109, 1, 199, 240, 247, 109, 1, 225, 80, 247,
-    109, 1, 225, 71, 247, 109, 1, 217, 161, 247, 109, 1, 199, 245, 247, 109,
-    1, 234, 190, 247, 109, 1, 234, 125, 247, 109, 1, 205, 23, 247, 109, 1,
-    205, 22, 247, 109, 1, 217, 73, 247, 109, 1, 226, 120, 247, 109, 1, 247,
-    205, 247, 109, 1, 201, 81, 247, 109, 1, 199, 242, 247, 109, 1, 209, 182,
-    247, 109, 1, 219, 246, 247, 109, 1, 219, 245, 247, 109, 1, 219, 244, 247,
-    109, 1, 219, 243, 247, 109, 1, 222, 200, 247, 109, 1, 237, 83, 247, 109,
-    1, 199, 241, 88, 236, 181, 202, 158, 78, 88, 236, 181, 17, 100, 88, 236,
-    181, 17, 102, 88, 236, 181, 17, 134, 88, 236, 181, 17, 136, 88, 236, 181,
-    17, 146, 88, 236, 181, 17, 167, 88, 236, 181, 17, 178, 88, 236, 181, 17,
-    171, 88, 236, 181, 17, 182, 88, 236, 181, 31, 203, 23, 88, 236, 181, 31,
-    200, 234, 88, 236, 181, 31, 202, 177, 88, 236, 181, 31, 235, 14, 88, 236,
-    181, 31, 235, 145, 88, 236, 181, 31, 206, 13, 88, 236, 181, 31, 207, 65,
-    88, 236, 181, 31, 237, 20, 88, 236, 181, 31, 216, 174, 88, 236, 181, 31,
-    97, 231, 57, 88, 236, 181, 31, 99, 231, 57, 88, 236, 181, 31, 115, 231,
-    57, 88, 236, 181, 31, 235, 7, 231, 57, 88, 236, 181, 31, 235, 101, 231,
-    57, 88, 236, 181, 31, 206, 29, 231, 57, 88, 236, 181, 31, 207, 71, 231,
-    57, 88, 236, 181, 31, 237, 31, 231, 57, 88, 236, 181, 31, 216, 179, 231,
-    57, 37, 41, 1, 63, 37, 41, 1, 249, 9, 37, 41, 1, 224, 209, 37, 41, 1,
-    239, 252, 37, 41, 1, 69, 37, 41, 1, 199, 118, 37, 41, 1, 195, 88, 37, 41,
-    1, 232, 147, 37, 41, 1, 202, 217, 37, 41, 1, 68, 37, 41, 1, 155, 37, 41,
-    1, 237, 7, 37, 41, 1, 236, 241, 37, 41, 1, 236, 230, 37, 41, 1, 236, 141,
-    37, 41, 1, 72, 37, 41, 1, 213, 92, 37, 41, 1, 206, 255, 37, 41, 1, 223,
-    187, 37, 41, 1, 236, 163, 37, 41, 1, 236, 151, 37, 41, 1, 203, 68, 37,
-    41, 1, 66, 37, 41, 1, 237, 10, 37, 41, 1, 212, 249, 37, 41, 1, 224, 131,
-    37, 41, 1, 237, 47, 37, 41, 1, 236, 153, 37, 41, 1, 245, 103, 37, 41, 1,
-    226, 120, 37, 41, 1, 199, 245, 37, 41, 1, 236, 134, 37, 41, 215, 142,
-    100, 37, 41, 215, 142, 146, 37, 41, 215, 142, 203, 23, 37, 41, 215, 142,
-    235, 145, 37, 41, 1, 196, 69, 37, 41, 1, 216, 23, 201, 107, 37, 41, 1,
-    205, 157, 201, 107, 233, 120, 1, 251, 203, 233, 120, 1, 249, 109, 233,
-    120, 1, 233, 189, 233, 120, 1, 240, 117, 233, 120, 1, 251, 198, 233, 120,
-    1, 211, 150, 233, 120, 1, 225, 229, 233, 120, 1, 232, 238, 233, 120, 1,
-    202, 171, 233, 120, 1, 237, 18, 233, 120, 1, 223, 146, 233, 120, 1, 223,
-    58, 233, 120, 1, 220, 52, 233, 120, 1, 217, 198, 233, 120, 1, 225, 185,
-    233, 120, 1, 200, 7, 233, 120, 1, 213, 218, 233, 120, 1, 216, 174, 233,
-    120, 1, 210, 223, 233, 120, 1, 208, 189, 233, 120, 1, 203, 38, 233, 120,
-    1, 197, 44, 233, 120, 1, 235, 219, 233, 120, 1, 226, 124, 233, 120, 1,
-    231, 41, 233, 120, 1, 214, 48, 233, 120, 1, 216, 179, 231, 57, 37, 213,
-    36, 1, 251, 106, 37, 213, 36, 1, 247, 244, 37, 213, 36, 1, 234, 107, 37,
-    213, 36, 1, 239, 15, 37, 213, 36, 1, 69, 37, 213, 36, 1, 195, 56, 37,
-    213, 36, 1, 237, 148, 37, 213, 36, 1, 195, 96, 37, 213, 36, 1, 237, 146,
-    37, 213, 36, 1, 68, 37, 213, 36, 1, 223, 251, 37, 213, 36, 1, 222, 168,
-    37, 213, 36, 1, 219, 162, 37, 213, 36, 1, 217, 99, 37, 213, 36, 1, 198,
-    232, 37, 213, 36, 1, 213, 78, 37, 213, 36, 1, 210, 141, 37, 213, 36, 1,
-    206, 84, 37, 213, 36, 1, 203, 137, 37, 213, 36, 1, 66, 37, 213, 36, 1,
-    245, 84, 37, 213, 36, 1, 206, 189, 37, 213, 36, 1, 207, 1, 37, 213, 36,
-    1, 195, 219, 37, 213, 36, 1, 196, 47, 37, 213, 36, 1, 72, 37, 213, 36, 1,
-    214, 102, 37, 213, 36, 1, 237, 47, 37, 213, 36, 1, 142, 37, 213, 36, 1,
-    201, 91, 37, 213, 36, 1, 199, 105, 37, 213, 36, 1, 196, 51, 37, 213, 36,
-    1, 196, 49, 37, 213, 36, 1, 196, 84, 37, 213, 36, 1, 226, 147, 37, 213,
-    36, 1, 195, 217, 37, 213, 36, 1, 164, 37, 213, 36, 1, 230, 210, 38, 37,
-    213, 36, 1, 251, 106, 38, 37, 213, 36, 1, 239, 15, 38, 37, 213, 36, 1,
-    195, 96, 38, 37, 213, 36, 1, 217, 99, 38, 37, 213, 36, 1, 206, 84, 200,
-    93, 1, 251, 138, 200, 93, 1, 248, 206, 200, 93, 1, 234, 95, 200, 93, 1,
-    224, 146, 200, 93, 1, 239, 212, 200, 93, 1, 231, 193, 200, 93, 1, 197,
-    34, 200, 93, 1, 195, 78, 200, 93, 1, 231, 94, 200, 93, 1, 203, 1, 200,
-    93, 1, 195, 241, 200, 93, 1, 225, 35, 200, 93, 1, 206, 211, 200, 93, 1,
-    222, 245, 200, 93, 1, 219, 171, 200, 93, 1, 239, 172, 200, 93, 1, 215,
-    138, 200, 93, 1, 194, 255, 200, 93, 1, 208, 224, 200, 93, 1, 251, 194,
-    200, 93, 1, 211, 227, 200, 93, 1, 209, 7, 200, 93, 1, 211, 102, 200, 93,
-    1, 210, 201, 200, 93, 1, 202, 221, 200, 93, 1, 233, 225, 200, 93, 1, 149,
-    200, 93, 1, 68, 200, 93, 1, 66, 200, 93, 1, 205, 34, 200, 93, 197, 9,
-    239, 59, 37, 213, 30, 2, 63, 37, 213, 30, 2, 68, 37, 213, 30, 2, 66, 37,
-    213, 30, 2, 155, 37, 213, 30, 2, 223, 187, 37, 213, 30, 2, 234, 123, 37,
-    213, 30, 2, 233, 76, 37, 213, 30, 2, 196, 208, 37, 213, 30, 2, 247, 174,
-    37, 213, 30, 2, 225, 214, 37, 213, 30, 2, 225, 172, 37, 213, 30, 2, 189,
-    37, 213, 30, 2, 201, 40, 37, 213, 30, 2, 240, 136, 37, 213, 30, 2, 239,
-    152, 37, 213, 30, 2, 237, 201, 37, 213, 30, 2, 202, 233, 37, 213, 30, 2,
-    161, 37, 213, 30, 2, 249, 145, 37, 213, 30, 2, 235, 239, 37, 213, 30, 2,
-    176, 37, 213, 30, 2, 215, 186, 37, 213, 30, 2, 166, 37, 213, 30, 2, 219,
-    78, 37, 213, 30, 2, 218, 145, 37, 213, 30, 2, 164, 37, 213, 30, 2, 199,
-    152, 37, 213, 30, 2, 199, 34, 37, 213, 30, 2, 169, 37, 213, 30, 2, 209,
-    140, 37, 213, 30, 2, 172, 37, 213, 30, 2, 183, 37, 213, 30, 2, 195, 115,
-    37, 213, 30, 2, 207, 50, 37, 213, 30, 2, 205, 80, 37, 213, 30, 2, 142,
-    37, 213, 30, 2, 250, 144, 37, 213, 30, 2, 250, 143, 37, 213, 30, 2, 250,
-    142, 37, 213, 30, 2, 196, 178, 37, 213, 30, 2, 240, 113, 37, 213, 30, 2,
-    240, 112, 37, 213, 30, 2, 249, 120, 37, 213, 30, 2, 247, 226, 37, 213,
-    30, 197, 9, 239, 59, 37, 213, 30, 31, 100, 37, 213, 30, 31, 102, 37, 213,
-    30, 31, 203, 23, 37, 213, 30, 31, 200, 234, 37, 213, 30, 31, 231, 57,
-    239, 192, 6, 1, 181, 68, 239, 192, 6, 1, 181, 69, 239, 192, 6, 1, 181,
-    63, 239, 192, 6, 1, 181, 251, 209, 239, 192, 6, 1, 181, 72, 239, 192, 6,
-    1, 181, 214, 102, 239, 192, 6, 1, 206, 182, 68, 239, 192, 6, 1, 206, 182,
-    69, 239, 192, 6, 1, 206, 182, 63, 239, 192, 6, 1, 206, 182, 251, 209,
-    239, 192, 6, 1, 206, 182, 72, 239, 192, 6, 1, 206, 182, 214, 102, 239,
-    192, 6, 1, 250, 122, 239, 192, 6, 1, 214, 16, 239, 192, 6, 1, 196, 243,
-    239, 192, 6, 1, 196, 66, 239, 192, 6, 1, 233, 15, 239, 192, 6, 1, 213,
-    79, 239, 192, 6, 1, 248, 251, 239, 192, 6, 1, 203, 48, 239, 192, 6, 1,
-    239, 237, 239, 192, 6, 1, 245, 99, 239, 192, 6, 1, 225, 191, 239, 192, 6,
-    1, 224, 216, 239, 192, 6, 1, 234, 69, 239, 192, 6, 1, 237, 47, 239, 192,
-    6, 1, 199, 113, 239, 192, 6, 1, 236, 121, 239, 192, 6, 1, 202, 215, 239,
-    192, 6, 1, 236, 151, 239, 192, 6, 1, 195, 85, 239, 192, 6, 1, 236, 141,
-    239, 192, 6, 1, 195, 64, 239, 192, 6, 1, 236, 163, 239, 192, 6, 1, 237,
-    7, 239, 192, 6, 1, 236, 241, 239, 192, 6, 1, 236, 230, 239, 192, 6, 1,
-    236, 215, 239, 192, 6, 1, 214, 146, 239, 192, 6, 1, 236, 98, 239, 192, 4,
-    1, 181, 68, 239, 192, 4, 1, 181, 69, 239, 192, 4, 1, 181, 63, 239, 192,
-    4, 1, 181, 251, 209, 239, 192, 4, 1, 181, 72, 239, 192, 4, 1, 181, 214,
-    102, 239, 192, 4, 1, 206, 182, 68, 239, 192, 4, 1, 206, 182, 69, 239,
-    192, 4, 1, 206, 182, 63, 239, 192, 4, 1, 206, 182, 251, 209, 239, 192, 4,
-    1, 206, 182, 72, 239, 192, 4, 1, 206, 182, 214, 102, 239, 192, 4, 1, 250,
-    122, 239, 192, 4, 1, 214, 16, 239, 192, 4, 1, 196, 243, 239, 192, 4, 1,
-    196, 66, 239, 192, 4, 1, 233, 15, 239, 192, 4, 1, 213, 79, 239, 192, 4,
-    1, 248, 251, 239, 192, 4, 1, 203, 48, 239, 192, 4, 1, 239, 237, 239, 192,
-    4, 1, 245, 99, 239, 192, 4, 1, 225, 191, 239, 192, 4, 1, 224, 216, 239,
-    192, 4, 1, 234, 69, 239, 192, 4, 1, 237, 47, 239, 192, 4, 1, 199, 113,
-    239, 192, 4, 1, 236, 121, 239, 192, 4, 1, 202, 215, 239, 192, 4, 1, 236,
-    151, 239, 192, 4, 1, 195, 85, 239, 192, 4, 1, 236, 141, 239, 192, 4, 1,
-    195, 64, 239, 192, 4, 1, 236, 163, 239, 192, 4, 1, 237, 7, 239, 192, 4,
-    1, 236, 241, 239, 192, 4, 1, 236, 230, 239, 192, 4, 1, 236, 215, 239,
-    192, 4, 1, 214, 146, 239, 192, 4, 1, 236, 98, 207, 6, 1, 213, 76, 207, 6,
-    1, 201, 229, 207, 6, 1, 224, 89, 207, 6, 1, 235, 182, 207, 6, 1, 202,
-    190, 207, 6, 1, 205, 200, 207, 6, 1, 204, 85, 207, 6, 1, 245, 22, 207, 6,
-    1, 196, 68, 207, 6, 1, 231, 54, 207, 6, 1, 248, 183, 207, 6, 1, 239, 251,
-    207, 6, 1, 234, 109, 207, 6, 1, 198, 227, 207, 6, 1, 202, 196, 207, 6, 1,
-    195, 8, 207, 6, 1, 219, 202, 207, 6, 1, 225, 108, 207, 6, 1, 197, 25,
-    207, 6, 1, 232, 248, 207, 6, 1, 221, 245, 207, 6, 1, 219, 24, 207, 6, 1,
-    226, 127, 207, 6, 1, 237, 45, 207, 6, 1, 250, 195, 207, 6, 1, 251, 250,
-    207, 6, 1, 214, 119, 207, 6, 1, 197, 12, 207, 6, 1, 214, 34, 207, 6, 1,
-    251, 209, 207, 6, 1, 209, 223, 207, 6, 1, 215, 138, 207, 6, 1, 237, 65,
-    207, 6, 1, 251, 214, 207, 6, 1, 230, 201, 207, 6, 1, 200, 36, 207, 6, 1,
-    214, 188, 207, 6, 1, 214, 94, 207, 6, 1, 214, 144, 207, 6, 1, 250, 125,
-    207, 6, 1, 250, 246, 207, 6, 1, 214, 72, 207, 6, 1, 251, 189, 207, 6, 1,
-    236, 155, 207, 6, 1, 250, 222, 207, 6, 1, 237, 76, 207, 6, 1, 230, 209,
-    207, 6, 1, 196, 30, 214, 50, 1, 251, 164, 214, 50, 1, 249, 145, 214, 50,
-    1, 189, 214, 50, 1, 225, 214, 214, 50, 1, 196, 208, 214, 50, 1, 224, 146,
-    214, 50, 1, 239, 236, 214, 50, 1, 169, 214, 50, 1, 183, 214, 50, 1, 206,
-    217, 214, 50, 1, 239, 176, 214, 50, 1, 247, 82, 214, 50, 1, 234, 123,
-    214, 50, 1, 235, 239, 214, 50, 1, 211, 157, 214, 50, 1, 225, 51, 214, 50,
-    1, 223, 78, 214, 50, 1, 219, 38, 214, 50, 1, 215, 122, 214, 50, 1, 197,
-    117, 214, 50, 1, 142, 214, 50, 1, 164, 214, 50, 1, 63, 214, 50, 1, 69,
-    214, 50, 1, 68, 214, 50, 1, 72, 214, 50, 1, 66, 214, 50, 1, 252, 168,
-    214, 50, 1, 237, 54, 214, 50, 1, 214, 102, 214, 50, 17, 195, 79, 214, 50,
-    17, 100, 214, 50, 17, 102, 214, 50, 17, 134, 214, 50, 17, 136, 214, 50,
-    17, 146, 214, 50, 17, 167, 214, 50, 17, 178, 214, 50, 17, 171, 214, 50,
-    17, 182, 214, 52, 6, 1, 63, 214, 52, 6, 1, 251, 200, 214, 52, 6, 1, 251,
-    194, 214, 52, 6, 1, 251, 209, 214, 52, 6, 1, 248, 64, 214, 52, 6, 1, 247,
-    16, 214, 52, 6, 1, 237, 39, 214, 52, 6, 1, 69, 214, 52, 6, 1, 237, 19,
-    214, 52, 6, 1, 142, 214, 52, 6, 1, 231, 11, 214, 52, 6, 1, 68, 214, 52,
-    6, 1, 155, 214, 52, 6, 1, 237, 38, 214, 52, 6, 1, 223, 110, 214, 52, 6,
-    1, 172, 214, 52, 6, 1, 166, 214, 52, 6, 1, 176, 214, 52, 6, 1, 72, 214,
-    52, 6, 1, 214, 143, 214, 52, 6, 1, 161, 214, 52, 6, 1, 237, 37, 214, 52,
-    6, 1, 183, 214, 52, 6, 1, 207, 50, 214, 52, 6, 1, 189, 214, 52, 6, 1,
-    237, 36, 214, 52, 6, 1, 201, 113, 214, 52, 6, 1, 237, 35, 214, 52, 6, 1,
-    201, 103, 214, 52, 6, 1, 239, 176, 214, 52, 6, 1, 66, 214, 52, 6, 1, 197,
-    166, 214, 52, 6, 1, 224, 146, 214, 52, 6, 1, 233, 230, 214, 52, 6, 1,
-    195, 115, 214, 52, 6, 1, 195, 74, 214, 52, 4, 1, 63, 214, 52, 4, 1, 251,
-    200, 214, 52, 4, 1, 251, 194, 214, 52, 4, 1, 251, 209, 214, 52, 4, 1,
-    248, 64, 214, 52, 4, 1, 247, 16, 214, 52, 4, 1, 237, 39, 214, 52, 4, 1,
-    69, 214, 52, 4, 1, 237, 19, 214, 52, 4, 1, 142, 214, 52, 4, 1, 231, 11,
-    214, 52, 4, 1, 68, 214, 52, 4, 1, 155, 214, 52, 4, 1, 237, 38, 214, 52,
-    4, 1, 223, 110, 214, 52, 4, 1, 172, 214, 52, 4, 1, 166, 214, 52, 4, 1,
-    176, 214, 52, 4, 1, 72, 214, 52, 4, 1, 214, 143, 214, 52, 4, 1, 161, 214,
-    52, 4, 1, 237, 37, 214, 52, 4, 1, 183, 214, 52, 4, 1, 207, 50, 214, 52,
-    4, 1, 189, 214, 52, 4, 1, 237, 36, 214, 52, 4, 1, 201, 113, 214, 52, 4,
-    1, 237, 35, 214, 52, 4, 1, 201, 103, 214, 52, 4, 1, 239, 176, 214, 52, 4,
-    1, 66, 214, 52, 4, 1, 197, 166, 214, 52, 4, 1, 224, 146, 214, 52, 4, 1,
-    233, 230, 214, 52, 4, 1, 195, 115, 214, 52, 4, 1, 195, 74, 237, 3, 1, 63,
-    237, 3, 1, 249, 9, 237, 3, 1, 247, 57, 237, 3, 1, 245, 103, 237, 3, 1,
-    239, 252, 237, 3, 1, 217, 151, 237, 3, 1, 239, 167, 237, 3, 1, 237, 33,
-    237, 3, 1, 69, 237, 3, 1, 235, 189, 237, 3, 1, 234, 48, 237, 3, 1, 233,
-    161, 237, 3, 1, 232, 147, 237, 3, 1, 68, 237, 3, 1, 225, 193, 237, 3, 1,
-    224, 209, 237, 3, 1, 222, 197, 237, 3, 1, 222, 32, 237, 3, 1, 219, 207,
-    237, 3, 1, 217, 118, 237, 3, 1, 176, 237, 3, 1, 216, 157, 237, 3, 1, 72,
-    237, 3, 1, 213, 92, 237, 3, 1, 211, 139, 237, 3, 1, 210, 183, 237, 3, 1,
-    209, 176, 237, 3, 1, 208, 147, 237, 3, 1, 206, 255, 237, 3, 1, 203, 68,
-    237, 3, 1, 202, 217, 237, 3, 1, 66, 237, 3, 1, 199, 118, 237, 3, 1, 196,
-    202, 237, 3, 1, 196, 148, 237, 3, 1, 195, 88, 237, 3, 1, 195, 65, 237, 3,
-    1, 233, 216, 237, 3, 1, 233, 222, 237, 3, 1, 224, 131, 247, 89, 251, 165,
-    1, 251, 133, 247, 89, 251, 165, 1, 248, 208, 247, 89, 251, 165, 1, 233,
-    179, 247, 89, 251, 165, 1, 240, 61, 247, 89, 251, 165, 1, 237, 64, 247,
-    89, 251, 165, 1, 195, 99, 247, 89, 251, 165, 1, 236, 58, 247, 89, 251,
-    165, 1, 195, 59, 247, 89, 251, 165, 1, 203, 96, 247, 89, 251, 165, 1,
-    247, 16, 247, 89, 251, 165, 1, 195, 228, 247, 89, 251, 165, 1, 195, 74,
-    247, 89, 251, 165, 1, 226, 0, 247, 89, 251, 165, 1, 207, 50, 247, 89,
-    251, 165, 1, 222, 238, 247, 89, 251, 165, 1, 226, 13, 247, 89, 251, 165,
-    1, 196, 198, 247, 89, 251, 165, 1, 237, 164, 247, 89, 251, 165, 1, 247,
-    116, 247, 89, 251, 165, 1, 225, 173, 247, 89, 251, 165, 1, 224, 251, 247,
-    89, 251, 165, 1, 221, 145, 247, 89, 251, 165, 1, 232, 82, 247, 89, 251,
-    165, 1, 211, 140, 247, 89, 251, 165, 1, 251, 48, 247, 89, 251, 165, 1,
-    245, 39, 247, 89, 251, 165, 1, 245, 75, 247, 89, 251, 165, 1, 240, 243,
-    247, 89, 251, 165, 1, 220, 40, 247, 89, 251, 165, 1, 211, 144, 247, 89,
-    251, 165, 1, 216, 3, 247, 89, 251, 165, 1, 237, 141, 247, 89, 251, 165,
-    1, 207, 33, 247, 89, 251, 165, 1, 225, 194, 247, 89, 251, 165, 1, 214,
-    119, 247, 89, 251, 165, 1, 200, 205, 247, 89, 251, 165, 1, 235, 212, 247,
-    89, 251, 165, 1, 237, 154, 247, 89, 251, 165, 1, 245, 109, 247, 89, 251,
-    165, 1, 213, 65, 247, 89, 251, 165, 1, 233, 206, 247, 89, 251, 165, 1,
-    210, 198, 247, 89, 251, 165, 1, 207, 59, 247, 89, 251, 165, 1, 199, 37,
-    247, 89, 251, 165, 1, 202, 50, 247, 89, 251, 165, 1, 206, 160, 247, 89,
-    251, 165, 1, 225, 227, 247, 89, 251, 165, 1, 240, 244, 247, 89, 251, 165,
-    1, 247, 82, 247, 89, 251, 165, 1, 196, 73, 247, 89, 251, 165, 1, 212,
-    154, 247, 89, 251, 165, 1, 224, 52, 247, 89, 251, 165, 244, 237, 78, 30,
-    39, 2, 252, 116, 30, 39, 2, 252, 115, 30, 39, 2, 252, 114, 30, 39, 2,
-    252, 113, 30, 39, 2, 252, 112, 30, 39, 2, 252, 111, 30, 39, 2, 252, 110,
-    30, 39, 2, 252, 109, 30, 39, 2, 252, 108, 30, 39, 2, 252, 107, 30, 39, 2,
-    252, 106, 30, 39, 2, 252, 105, 30, 39, 2, 252, 104, 30, 39, 2, 252, 103,
-    30, 39, 2, 252, 102, 30, 39, 2, 252, 101, 30, 39, 2, 252, 100, 30, 39, 2,
-    252, 99, 30, 39, 2, 252, 98, 30, 39, 2, 252, 97, 30, 39, 2, 252, 96, 30,
-    39, 2, 252, 95, 30, 39, 2, 252, 94, 30, 39, 2, 252, 93, 30, 39, 2, 252,
-    92, 30, 39, 2, 252, 91, 30, 39, 2, 252, 90, 30, 39, 2, 255, 126, 30, 39,
-    2, 252, 89, 30, 39, 2, 252, 88, 30, 39, 2, 252, 87, 30, 39, 2, 252, 86,
-    30, 39, 2, 252, 85, 30, 39, 2, 252, 84, 30, 39, 2, 252, 83, 30, 39, 2,
-    252, 82, 30, 39, 2, 252, 81, 30, 39, 2, 252, 80, 30, 39, 2, 252, 79, 30,
-    39, 2, 252, 78, 30, 39, 2, 252, 77, 30, 39, 2, 252, 76, 30, 39, 2, 252,
-    75, 30, 39, 2, 252, 74, 30, 39, 2, 252, 73, 30, 39, 2, 252, 72, 30, 39,
-    2, 252, 71, 30, 39, 2, 252, 70, 30, 39, 2, 252, 69, 30, 39, 2, 252, 68,
-    30, 39, 2, 252, 67, 30, 39, 2, 252, 66, 30, 39, 2, 252, 65, 30, 39, 2,
-    252, 64, 30, 39, 2, 252, 63, 30, 39, 2, 252, 62, 30, 39, 2, 252, 61, 30,
-    39, 2, 252, 60, 30, 39, 2, 252, 59, 30, 39, 2, 252, 58, 30, 39, 2, 252,
-    57, 30, 39, 2, 252, 56, 30, 39, 2, 252, 55, 30, 39, 2, 252, 54, 30, 39,
-    2, 252, 53, 30, 39, 2, 252, 52, 30, 39, 2, 252, 51, 30, 39, 2, 252, 50,
-    30, 39, 2, 252, 49, 30, 39, 2, 252, 48, 30, 39, 2, 252, 47, 30, 39, 2,
-    255, 39, 30, 39, 2, 252, 46, 30, 39, 2, 252, 45, 30, 39, 2, 255, 4, 30,
-    39, 2, 252, 44, 30, 39, 2, 252, 43, 30, 39, 2, 252, 42, 30, 39, 2, 252,
-    41, 30, 39, 2, 254, 247, 30, 39, 2, 252, 40, 30, 39, 2, 252, 39, 30, 39,
-    2, 252, 38, 30, 39, 2, 252, 37, 30, 39, 2, 252, 36, 30, 39, 2, 254, 63,
-    30, 39, 2, 254, 62, 30, 39, 2, 254, 61, 30, 39, 2, 254, 60, 30, 39, 2,
-    254, 59, 30, 39, 2, 254, 58, 30, 39, 2, 254, 57, 30, 39, 2, 254, 56, 30,
-    39, 2, 254, 54, 30, 39, 2, 254, 53, 30, 39, 2, 254, 52, 30, 39, 2, 254,
-    51, 30, 39, 2, 254, 50, 30, 39, 2, 254, 49, 30, 39, 2, 254, 47, 30, 39,
-    2, 254, 46, 30, 39, 2, 254, 45, 30, 39, 2, 254, 44, 30, 39, 2, 254, 43,
-    30, 39, 2, 254, 42, 30, 39, 2, 254, 41, 30, 39, 2, 254, 40, 30, 39, 2,
-    254, 39, 30, 39, 2, 254, 38, 30, 39, 2, 254, 37, 30, 39, 2, 254, 36, 30,
-    39, 2, 254, 35, 30, 39, 2, 254, 34, 30, 39, 2, 254, 33, 30, 39, 2, 254,
-    32, 30, 39, 2, 254, 31, 30, 39, 2, 254, 30, 30, 39, 2, 254, 29, 30, 39,
-    2, 254, 27, 30, 39, 2, 254, 26, 30, 39, 2, 254, 25, 30, 39, 2, 254, 21,
-    30, 39, 2, 254, 20, 30, 39, 2, 254, 19, 30, 39, 2, 254, 18, 30, 39, 2,
-    254, 14, 30, 39, 2, 254, 13, 30, 39, 2, 254, 12, 30, 39, 2, 254, 11, 30,
-    39, 2, 254, 10, 30, 39, 2, 254, 9, 30, 39, 2, 254, 8, 30, 39, 2, 254, 7,
-    30, 39, 2, 254, 6, 30, 39, 2, 254, 5, 30, 39, 2, 254, 4, 30, 39, 2, 254,
-    3, 30, 39, 2, 254, 2, 30, 39, 2, 254, 1, 30, 39, 2, 254, 0, 30, 39, 2,
-    253, 255, 30, 39, 2, 253, 254, 30, 39, 2, 253, 253, 30, 39, 2, 253, 252,
-    30, 39, 2, 253, 251, 30, 39, 2, 253, 250, 30, 39, 2, 253, 249, 30, 39, 2,
-    253, 248, 30, 39, 2, 253, 246, 30, 39, 2, 253, 245, 30, 39, 2, 253, 244,
-    30, 39, 2, 253, 243, 30, 39, 2, 253, 242, 30, 39, 2, 253, 240, 30, 39, 2,
-    253, 239, 30, 39, 2, 253, 238, 30, 39, 2, 253, 237, 30, 39, 2, 253, 235,
-    30, 39, 2, 253, 234, 30, 39, 2, 253, 233, 30, 39, 2, 253, 199, 30, 39, 2,
-    253, 197, 30, 39, 2, 253, 195, 30, 39, 2, 253, 193, 30, 39, 2, 253, 191,
-    30, 39, 2, 253, 189, 30, 39, 2, 253, 187, 30, 39, 2, 253, 185, 30, 39, 2,
-    253, 183, 30, 39, 2, 253, 181, 30, 39, 2, 253, 179, 30, 39, 2, 253, 176,
-    30, 39, 2, 253, 174, 30, 39, 2, 253, 172, 30, 39, 2, 253, 170, 30, 39, 2,
-    253, 168, 30, 39, 2, 253, 166, 30, 39, 2, 253, 164, 30, 39, 2, 253, 162,
-    30, 39, 2, 253, 80, 30, 39, 2, 253, 79, 30, 39, 2, 253, 78, 30, 39, 2,
-    253, 77, 30, 39, 2, 253, 76, 30, 39, 2, 253, 75, 30, 39, 2, 253, 73, 30,
-    39, 2, 253, 72, 30, 39, 2, 253, 71, 30, 39, 2, 253, 70, 30, 39, 2, 253,
-    69, 30, 39, 2, 253, 68, 30, 39, 2, 253, 66, 30, 39, 2, 253, 65, 30, 39,
-    2, 253, 61, 30, 39, 2, 253, 60, 30, 39, 2, 253, 58, 30, 39, 2, 253, 57,
-    30, 39, 2, 253, 56, 30, 39, 2, 253, 55, 30, 39, 2, 253, 54, 30, 39, 2,
-    253, 53, 30, 39, 2, 253, 52, 30, 39, 2, 253, 51, 30, 39, 2, 253, 50, 30,
-    39, 2, 253, 49, 30, 39, 2, 253, 48, 30, 39, 2, 253, 47, 30, 39, 2, 253,
-    46, 30, 39, 2, 253, 45, 30, 39, 2, 253, 44, 30, 39, 2, 253, 43, 30, 39,
-    2, 253, 42, 30, 39, 2, 253, 41, 30, 39, 2, 253, 40, 30, 39, 2, 253, 39,
-    30, 39, 2, 253, 38, 30, 39, 2, 253, 37, 30, 39, 2, 253, 36, 30, 39, 2,
-    253, 35, 30, 39, 2, 253, 34, 30, 39, 2, 253, 33, 30, 39, 2, 253, 32, 30,
-    39, 2, 253, 31, 30, 39, 2, 253, 30, 30, 39, 2, 253, 29, 30, 39, 2, 253,
-    28, 30, 39, 2, 253, 27, 30, 39, 2, 253, 26, 30, 39, 2, 253, 25, 30, 39,
-    2, 253, 24, 30, 39, 2, 253, 23, 30, 39, 2, 253, 22, 30, 39, 2, 253, 21,
-    30, 39, 2, 253, 20, 30, 39, 2, 253, 19, 30, 39, 2, 253, 18, 30, 39, 2,
-    253, 17, 30, 39, 2, 253, 16, 30, 39, 2, 253, 15, 30, 39, 2, 253, 14, 30,
-    39, 2, 253, 13, 30, 39, 2, 253, 12, 30, 39, 2, 253, 11, 30, 39, 2, 253,
-    10, 30, 39, 2, 253, 9, 30, 39, 2, 253, 8, 30, 39, 2, 253, 7, 30, 39, 2,
-    253, 6, 30, 39, 2, 253, 5, 30, 39, 2, 253, 4, 30, 39, 2, 253, 3, 30, 39,
-    2, 253, 2, 30, 39, 2, 253, 1, 30, 39, 2, 253, 0, 30, 39, 2, 252, 255, 30,
-    39, 2, 252, 254, 30, 39, 2, 252, 253, 30, 39, 2, 252, 252, 30, 39, 2,
-    252, 251, 30, 39, 2, 252, 250, 30, 39, 2, 252, 249, 30, 39, 2, 252, 248,
-    30, 39, 2, 252, 247, 30, 39, 2, 252, 246, 30, 39, 2, 252, 245, 30, 39, 2,
-    252, 244, 30, 39, 2, 252, 243, 30, 39, 2, 252, 242, 30, 39, 2, 252, 241,
-    30, 39, 2, 252, 240, 30, 39, 2, 252, 239, 30, 39, 2, 252, 238, 30, 39, 2,
-    252, 237, 30, 39, 2, 252, 236, 30, 39, 2, 252, 235, 30, 39, 2, 252, 234,
-    30, 39, 2, 252, 233, 30, 39, 2, 252, 232, 30, 39, 2, 252, 231, 30, 39, 2,
-    252, 230, 30, 39, 2, 252, 229, 30, 39, 2, 252, 228, 30, 39, 2, 252, 227,
-    30, 39, 2, 252, 226, 30, 39, 2, 252, 225, 30, 39, 2, 252, 224, 30, 39, 2,
-    252, 223, 30, 39, 2, 252, 222, 30, 39, 2, 252, 221, 30, 39, 2, 252, 220,
-    30, 39, 2, 252, 219, 30, 39, 2, 252, 218, 30, 39, 2, 252, 217, 30, 39, 2,
-    252, 216, 30, 39, 2, 252, 215, 30, 39, 2, 252, 214, 30, 39, 2, 252, 213,
-    30, 39, 2, 252, 212, 30, 39, 2, 252, 211, 30, 39, 2, 252, 210, 30, 39, 2,
-    252, 209, 30, 39, 2, 252, 208, 30, 39, 2, 252, 207, 30, 39, 2, 252, 206,
-    30, 39, 2, 252, 205, 30, 39, 2, 252, 204, 30, 39, 2, 252, 203, 30, 39, 2,
-    252, 202, 30, 39, 2, 252, 201, 30, 39, 2, 252, 200, 30, 39, 2, 252, 199,
-    30, 39, 2, 252, 198, 63, 30, 39, 2, 252, 197, 250, 112, 30, 39, 2, 252,
-    196, 240, 231, 30, 39, 2, 252, 195, 69, 30, 39, 2, 252, 194, 236, 49, 30,
-    39, 2, 252, 193, 233, 15, 30, 39, 2, 252, 192, 225, 217, 30, 39, 2, 252,
-    191, 225, 80, 30, 39, 2, 252, 190, 159, 30, 39, 2, 252, 189, 223, 87, 30,
-    39, 2, 252, 188, 223, 86, 30, 39, 2, 252, 187, 223, 85, 30, 39, 2, 252,
-    186, 223, 84, 30, 39, 2, 252, 185, 197, 199, 30, 39, 2, 252, 184, 196,
-    222, 30, 39, 2, 252, 183, 196, 148, 30, 39, 2, 252, 182, 214, 124, 30,
-    39, 2, 252, 181, 252, 31, 30, 39, 2, 252, 180, 249, 46, 30, 39, 2, 252,
-    179, 240, 43, 30, 39, 2, 252, 178, 236, 57, 30, 39, 2, 252, 177, 225,
-    193, 30, 39, 2, 252, 176, 30, 39, 2, 252, 175, 30, 39, 2, 252, 174, 30,
-    39, 2, 252, 173, 30, 39, 2, 252, 172, 30, 39, 2, 252, 171, 30, 39, 2,
-    252, 170, 30, 39, 2, 252, 169, 240, 238, 5, 63, 240, 238, 5, 69, 240,
-    238, 5, 68, 240, 238, 5, 72, 240, 238, 5, 66, 240, 238, 5, 225, 214, 240,
-    238, 5, 225, 129, 240, 238, 5, 155, 240, 238, 5, 224, 209, 240, 238, 5,
-    224, 101, 240, 238, 5, 224, 11, 240, 238, 5, 223, 187, 240, 238, 5, 172,
-    240, 238, 5, 222, 197, 240, 238, 5, 222, 109, 240, 238, 5, 222, 7, 240,
-    238, 5, 221, 191, 240, 238, 5, 166, 240, 238, 5, 219, 207, 240, 238, 5,
-    219, 78, 240, 238, 5, 218, 251, 240, 238, 5, 218, 145, 240, 238, 5, 176,
-    240, 238, 5, 217, 118, 240, 238, 5, 216, 223, 240, 238, 5, 216, 50, 240,
-    238, 5, 215, 186, 240, 238, 5, 161, 240, 238, 5, 213, 92, 240, 238, 5,
-    212, 220, 240, 238, 5, 212, 117, 240, 238, 5, 211, 227, 240, 238, 5, 169,
-    240, 238, 5, 210, 183, 240, 238, 5, 210, 72, 240, 238, 5, 209, 232, 240,
-    238, 5, 209, 140, 240, 238, 5, 183, 240, 238, 5, 208, 147, 240, 238, 5,
-    206, 112, 240, 238, 5, 205, 200, 240, 238, 5, 204, 172, 240, 238, 5, 189,
-    240, 238, 5, 203, 68, 240, 238, 5, 202, 122, 240, 238, 5, 149, 240, 238,
-    5, 201, 40, 240, 238, 5, 197, 166, 240, 238, 5, 197, 109, 240, 238, 5,
-    197, 70, 240, 238, 5, 197, 34, 240, 238, 5, 196, 208, 240, 238, 5, 196,
-    202, 240, 238, 5, 195, 115, 240, 238, 5, 195, 11, 226, 88, 250, 255, 1,
-    251, 162, 226, 88, 250, 255, 1, 248, 205, 226, 88, 250, 255, 1, 233, 177,
-    226, 88, 250, 255, 1, 240, 100, 226, 88, 250, 255, 1, 232, 147, 226, 88,
-    250, 255, 1, 197, 117, 226, 88, 250, 255, 1, 195, 92, 226, 88, 250, 255,
-    1, 232, 87, 226, 88, 250, 255, 1, 202, 253, 226, 88, 250, 255, 1, 195,
-    240, 226, 88, 250, 255, 1, 225, 5, 226, 88, 250, 255, 1, 222, 240, 226,
-    88, 250, 255, 1, 219, 171, 226, 88, 250, 255, 1, 215, 138, 226, 88, 250,
-    255, 1, 208, 225, 226, 88, 250, 255, 1, 250, 117, 226, 88, 250, 255, 1,
-    213, 92, 226, 88, 250, 255, 1, 209, 5, 226, 88, 250, 255, 1, 211, 101,
-    226, 88, 250, 255, 1, 210, 109, 226, 88, 250, 255, 1, 206, 211, 226, 88,
-    250, 255, 1, 203, 82, 226, 88, 250, 255, 208, 133, 55, 226, 88, 250, 255,
-    31, 100, 226, 88, 250, 255, 31, 102, 226, 88, 250, 255, 31, 134, 226, 88,
-    250, 255, 31, 203, 23, 226, 88, 250, 255, 31, 200, 234, 226, 88, 250,
-    255, 31, 97, 231, 57, 226, 88, 250, 255, 31, 97, 170, 226, 88, 250, 255,
-    31, 203, 24, 170, 213, 204, 1, 251, 162, 213, 204, 1, 248, 205, 213, 204,
-    1, 233, 177, 213, 204, 1, 240, 100, 213, 204, 1, 232, 147, 213, 204, 1,
-    197, 117, 213, 204, 1, 195, 92, 213, 204, 1, 232, 87, 213, 204, 1, 202,
-    253, 213, 204, 1, 195, 240, 213, 204, 1, 225, 5, 213, 204, 1, 222, 240,
-    213, 204, 1, 219, 171, 213, 204, 1, 48, 215, 138, 213, 204, 1, 215, 138,
-    213, 204, 1, 208, 225, 213, 204, 1, 250, 117, 213, 204, 1, 213, 92, 213,
-    204, 1, 209, 5, 213, 204, 1, 211, 101, 213, 204, 1, 210, 109, 213, 204,
-    1, 206, 211, 213, 204, 1, 203, 82, 213, 204, 222, 179, 235, 77, 213, 204,
-    210, 17, 235, 77, 213, 204, 31, 100, 213, 204, 31, 102, 213, 204, 31,
-    134, 213, 204, 31, 136, 213, 204, 31, 146, 213, 204, 31, 203, 23, 213,
-    204, 31, 200, 234, 217, 240, 1, 48, 251, 162, 217, 240, 1, 251, 162, 217,
-    240, 1, 48, 248, 205, 217, 240, 1, 248, 205, 217, 240, 1, 233, 177, 217,
-    240, 1, 240, 100, 217, 240, 1, 48, 232, 147, 217, 240, 1, 232, 147, 217,
-    240, 1, 197, 117, 217, 240, 1, 195, 92, 217, 240, 1, 232, 87, 217, 240,
-    1, 202, 253, 217, 240, 1, 48, 195, 240, 217, 240, 1, 195, 240, 217, 240,
-    1, 48, 225, 5, 217, 240, 1, 225, 5, 217, 240, 1, 48, 222, 240, 217, 240,
-    1, 222, 240, 217, 240, 1, 48, 219, 171, 217, 240, 1, 219, 171, 217, 240,
-    1, 48, 215, 138, 217, 240, 1, 215, 138, 217, 240, 1, 208, 225, 217, 240,
-    1, 250, 117, 217, 240, 1, 213, 92, 217, 240, 1, 209, 5, 217, 240, 1, 211,
-    101, 217, 240, 1, 210, 109, 217, 240, 1, 48, 206, 211, 217, 240, 1, 206,
-    211, 217, 240, 1, 203, 82, 217, 240, 31, 100, 217, 240, 31, 102, 217,
-    240, 31, 134, 217, 240, 31, 136, 217, 240, 241, 47, 31, 136, 217, 240,
-    31, 146, 217, 240, 31, 203, 23, 217, 240, 31, 200, 234, 217, 240, 31, 97,
-    231, 57, 232, 160, 1, 251, 162, 232, 160, 1, 248, 205, 232, 160, 1, 233,
-    177, 232, 160, 1, 240, 99, 232, 160, 1, 232, 147, 232, 160, 1, 197, 117,
-    232, 160, 1, 195, 90, 232, 160, 1, 232, 87, 232, 160, 1, 202, 253, 232,
-    160, 1, 195, 240, 232, 160, 1, 225, 5, 232, 160, 1, 222, 240, 232, 160,
-    1, 219, 171, 232, 160, 1, 215, 138, 232, 160, 1, 208, 225, 232, 160, 1,
-    250, 115, 232, 160, 1, 213, 92, 232, 160, 1, 209, 5, 232, 160, 1, 211,
-    101, 232, 160, 1, 206, 211, 232, 160, 1, 203, 82, 232, 160, 31, 100, 232,
-    160, 31, 146, 232, 160, 31, 203, 23, 232, 160, 31, 200, 234, 232, 160,
-    31, 97, 231, 57, 212, 232, 1, 251, 159, 212, 232, 1, 248, 208, 212, 232,
-    1, 234, 96, 212, 232, 1, 239, 214, 212, 232, 1, 232, 147, 212, 232, 1,
-    197, 124, 212, 232, 1, 195, 108, 212, 232, 1, 232, 89, 212, 232, 1, 203,
-    1, 212, 232, 1, 195, 241, 212, 232, 1, 225, 35, 212, 232, 1, 222, 246,
-    212, 232, 1, 219, 171, 212, 232, 1, 215, 138, 212, 232, 1, 207, 99, 212,
-    232, 1, 251, 194, 212, 232, 1, 213, 92, 212, 232, 1, 209, 7, 212, 232, 1,
-    211, 106, 212, 232, 1, 209, 196, 212, 232, 1, 206, 211, 212, 232, 1, 203,
-    89, 212, 232, 31, 100, 212, 232, 31, 203, 23, 212, 232, 31, 200, 234,
-    212, 232, 31, 97, 231, 57, 212, 232, 31, 102, 212, 232, 31, 134, 212,
-    232, 197, 9, 207, 90, 221, 148, 1, 63, 221, 148, 1, 250, 112, 221, 148,
-    1, 234, 190, 221, 148, 1, 240, 231, 221, 148, 1, 69, 221, 148, 1, 199,
-    230, 221, 148, 1, 68, 221, 148, 1, 196, 148, 221, 148, 1, 225, 80, 221,
-    148, 1, 159, 221, 148, 1, 221, 136, 221, 148, 1, 218, 55, 221, 148, 1,
-    72, 221, 148, 1, 144, 221, 148, 1, 205, 83, 221, 148, 1, 203, 216, 221,
-    148, 1, 66, 221, 148, 1, 236, 49, 221, 148, 1, 211, 167, 221, 148, 1,
-    209, 80, 221, 148, 1, 201, 81, 221, 148, 1, 251, 106, 221, 148, 1, 236,
-    230, 221, 148, 1, 221, 151, 221, 148, 1, 216, 87, 221, 148, 1, 247, 207,
-    221, 148, 201, 177, 78, 140, 232, 57, 1, 63, 140, 232, 57, 1, 69, 140,
-    232, 57, 1, 68, 140, 232, 57, 1, 72, 140, 232, 57, 1, 164, 140, 232, 57,
-    1, 197, 166, 140, 232, 57, 1, 249, 145, 140, 232, 57, 1, 249, 144, 140,
-    232, 57, 1, 161, 140, 232, 57, 1, 166, 140, 232, 57, 1, 176, 140, 232,
-    57, 1, 217, 255, 140, 232, 57, 1, 217, 118, 140, 232, 57, 1, 217, 116,
-    140, 232, 57, 1, 169, 140, 232, 57, 1, 210, 250, 140, 232, 57, 1, 172,
-    140, 232, 57, 1, 224, 146, 140, 232, 57, 1, 232, 80, 140, 232, 57, 1,
-    183, 140, 232, 57, 1, 209, 21, 140, 232, 57, 1, 208, 147, 140, 232, 57,
-    1, 155, 140, 232, 57, 1, 211, 159, 140, 232, 57, 1, 189, 140, 232, 57, 1,
-    203, 167, 140, 232, 57, 1, 203, 68, 140, 232, 57, 1, 203, 66, 140, 232,
-    57, 1, 149, 140, 232, 57, 1, 240, 136, 140, 232, 57, 16, 199, 28, 140,
-    232, 57, 16, 199, 27, 140, 241, 13, 1, 63, 140, 241, 13, 1, 69, 140, 241,
-    13, 1, 68, 140, 241, 13, 1, 72, 140, 241, 13, 1, 164, 140, 241, 13, 1,
-    197, 166, 140, 241, 13, 1, 249, 145, 140, 241, 13, 1, 161, 140, 241, 13,
-    1, 166, 140, 241, 13, 1, 176, 140, 241, 13, 1, 217, 118, 140, 241, 13, 1,
-    169, 140, 241, 13, 1, 172, 140, 241, 13, 1, 224, 146, 140, 241, 13, 1,
-    232, 80, 140, 241, 13, 1, 183, 140, 241, 13, 1, 250, 251, 183, 140, 241,
-    13, 1, 208, 147, 140, 241, 13, 1, 155, 140, 241, 13, 1, 211, 159, 140,
-    241, 13, 1, 189, 140, 241, 13, 1, 203, 68, 140, 241, 13, 1, 149, 140,
-    241, 13, 1, 240, 136, 140, 241, 13, 191, 236, 253, 200, 241, 140, 241,
-    13, 191, 97, 232, 225, 140, 241, 13, 221, 248, 209, 238, 140, 241, 13,
-    221, 248, 226, 93, 140, 241, 13, 31, 100, 140, 241, 13, 31, 102, 140,
-    241, 13, 31, 134, 140, 241, 13, 31, 136, 140, 241, 13, 31, 146, 140, 241,
-    13, 31, 167, 140, 241, 13, 31, 178, 140, 241, 13, 31, 171, 140, 241, 13,
-    31, 182, 140, 241, 13, 31, 203, 23, 140, 241, 13, 31, 200, 234, 140, 241,
-    13, 31, 202, 177, 140, 241, 13, 31, 235, 14, 140, 241, 13, 31, 235, 145,
-    140, 241, 13, 31, 206, 13, 140, 241, 13, 31, 207, 65, 140, 241, 13, 31,
-    97, 231, 57, 140, 241, 13, 31, 99, 231, 57, 140, 241, 13, 31, 115, 231,
-    57, 140, 241, 13, 31, 235, 7, 231, 57, 140, 241, 13, 31, 235, 101, 231,
-    57, 140, 241, 13, 31, 206, 29, 231, 57, 140, 241, 13, 31, 207, 71, 231,
-    57, 140, 241, 13, 31, 237, 31, 231, 57, 140, 241, 13, 31, 216, 179, 231,
-    57, 140, 241, 13, 31, 97, 170, 140, 241, 13, 31, 99, 170, 140, 241, 13,
-    31, 115, 170, 140, 241, 13, 31, 235, 7, 170, 140, 241, 13, 31, 235, 101,
-    170, 140, 241, 13, 31, 206, 29, 170, 140, 241, 13, 31, 207, 71, 170, 140,
-    241, 13, 31, 237, 31, 170, 140, 241, 13, 31, 216, 179, 170, 140, 241, 13,
-    31, 203, 24, 170, 140, 241, 13, 31, 200, 235, 170, 140, 241, 13, 31, 202,
-    178, 170, 140, 241, 13, 31, 235, 15, 170, 140, 241, 13, 31, 235, 146,
-    170, 140, 241, 13, 31, 206, 14, 170, 140, 241, 13, 31, 207, 66, 170, 140,
-    241, 13, 31, 237, 21, 170, 140, 241, 13, 31, 216, 175, 170, 140, 241, 13,
-    31, 97, 231, 58, 170, 140, 241, 13, 31, 99, 231, 58, 170, 140, 241, 13,
-    31, 115, 231, 58, 170, 140, 241, 13, 31, 235, 7, 231, 58, 170, 140, 241,
-    13, 31, 235, 101, 231, 58, 170, 140, 241, 13, 31, 206, 29, 231, 58, 170,
-    140, 241, 13, 31, 207, 71, 231, 58, 170, 140, 241, 13, 31, 237, 31, 231,
-    58, 170, 140, 241, 13, 31, 216, 179, 231, 58, 170, 140, 241, 13, 191, 97,
-    200, 242, 140, 241, 13, 191, 99, 200, 241, 140, 241, 13, 191, 115, 200,
-    241, 140, 241, 13, 191, 235, 7, 200, 241, 140, 241, 13, 191, 235, 101,
-    200, 241, 140, 241, 13, 191, 206, 29, 200, 241, 140, 241, 13, 191, 207,
-    71, 200, 241, 140, 241, 13, 191, 237, 31, 200, 241, 140, 241, 13, 191,
-    216, 179, 200, 241, 140, 241, 13, 191, 203, 24, 200, 241, 224, 133, 1,
-    63, 224, 133, 18, 2, 68, 224, 133, 18, 2, 66, 224, 133, 18, 2, 110, 144,
-    224, 133, 18, 2, 69, 224, 133, 18, 2, 72, 224, 133, 18, 222, 158, 78,
-    224, 133, 2, 52, 210, 3, 60, 224, 133, 2, 251, 51, 224, 133, 2, 199, 2,
-    224, 133, 1, 155, 224, 133, 1, 224, 146, 224, 133, 1, 234, 123, 224, 133,
-    1, 233, 230, 224, 133, 1, 247, 174, 224, 133, 1, 247, 16, 224, 133, 1,
-    225, 214, 224, 133, 1, 215, 109, 224, 133, 1, 201, 78, 224, 133, 1, 201,
-    66, 224, 133, 1, 240, 41, 224, 133, 1, 240, 25, 224, 133, 1, 216, 86,
-    224, 133, 1, 189, 224, 133, 1, 202, 233, 224, 133, 1, 240, 136, 224, 133,
-    1, 239, 176, 224, 133, 1, 176, 224, 133, 1, 161, 224, 133, 1, 213, 6,
-    224, 133, 1, 249, 145, 224, 133, 1, 248, 197, 224, 133, 1, 166, 224, 133,
-    1, 164, 224, 133, 1, 169, 224, 133, 1, 172, 224, 133, 1, 199, 152, 224,
-    133, 1, 207, 50, 224, 133, 1, 205, 80, 224, 133, 1, 183, 224, 133, 1,
-    195, 115, 224, 133, 1, 142, 224, 133, 1, 224, 36, 224, 133, 1, 201, 46,
-    224, 133, 1, 201, 47, 224, 133, 1, 199, 35, 224, 133, 2, 249, 80, 57,
-    224, 133, 2, 247, 88, 224, 133, 2, 76, 60, 224, 133, 199, 7, 224, 133,
-    17, 100, 224, 133, 17, 102, 224, 133, 17, 134, 224, 133, 17, 136, 224,
-    133, 31, 203, 23, 224, 133, 31, 200, 234, 224, 133, 31, 97, 231, 57, 224,
-    133, 31, 97, 170, 224, 133, 191, 97, 232, 225, 224, 133, 211, 214, 238,
-    253, 224, 133, 211, 214, 4, 244, 249, 224, 133, 211, 214, 244, 249, 224,
-    133, 211, 214, 241, 72, 154, 224, 133, 211, 214, 220, 55, 224, 133, 211,
-    214, 221, 213, 224, 133, 211, 214, 240, 88, 224, 133, 211, 214, 52, 240,
-    88, 224, 133, 211, 214, 222, 69, 37, 205, 159, 251, 10, 1, 232, 147, 37,
-    205, 159, 251, 10, 1, 222, 240, 37, 205, 159, 251, 10, 1, 232, 87, 37,
-    205, 159, 251, 10, 1, 219, 171, 37, 205, 159, 251, 10, 1, 211, 101, 37,
-    205, 159, 251, 10, 1, 197, 117, 37, 205, 159, 251, 10, 1, 206, 211, 37,
-    205, 159, 251, 10, 1, 210, 109, 37, 205, 159, 251, 10, 1, 248, 205, 37,
-    205, 159, 251, 10, 1, 203, 82, 37, 205, 159, 251, 10, 1, 208, 199, 37,
-    205, 159, 251, 10, 1, 225, 5, 37, 205, 159, 251, 10, 1, 215, 138, 37,
-    205, 159, 251, 10, 1, 224, 128, 37, 205, 159, 251, 10, 1, 209, 5, 37,
-    205, 159, 251, 10, 1, 208, 225, 37, 205, 159, 251, 10, 1, 235, 189, 37,
-    205, 159, 251, 10, 1, 251, 164, 37, 205, 159, 251, 10, 1, 250, 115, 37,
-    205, 159, 251, 10, 1, 239, 173, 37, 205, 159, 251, 10, 1, 233, 177, 37,
-    205, 159, 251, 10, 1, 240, 100, 37, 205, 159, 251, 10, 1, 233, 218, 37,
-    205, 159, 251, 10, 1, 202, 253, 37, 205, 159, 251, 10, 1, 195, 90, 37,
-    205, 159, 251, 10, 1, 239, 170, 37, 205, 159, 251, 10, 1, 195, 240, 37,
-    205, 159, 251, 10, 1, 202, 219, 37, 205, 159, 251, 10, 1, 202, 198, 37,
-    205, 159, 251, 10, 31, 100, 37, 205, 159, 251, 10, 31, 235, 145, 37, 205,
-    159, 251, 10, 156, 226, 68, 37, 173, 251, 10, 1, 232, 113, 37, 173, 251,
-    10, 1, 222, 249, 37, 173, 251, 10, 1, 232, 236, 37, 173, 251, 10, 1, 219,
-    185, 37, 173, 251, 10, 1, 211, 152, 37, 173, 251, 10, 1, 197, 117, 37,
-    173, 251, 10, 1, 236, 149, 37, 173, 251, 10, 1, 210, 142, 37, 173, 251,
-    10, 1, 248, 239, 37, 173, 251, 10, 1, 203, 41, 37, 173, 251, 10, 1, 236,
-    150, 37, 173, 251, 10, 1, 225, 35, 37, 173, 251, 10, 1, 216, 31, 37, 173,
-    251, 10, 1, 224, 142, 37, 173, 251, 10, 1, 209, 8, 37, 173, 251, 10, 1,
-    236, 148, 37, 173, 251, 10, 1, 235, 176, 37, 173, 251, 10, 1, 251, 164,
-    37, 173, 251, 10, 1, 251, 194, 37, 173, 251, 10, 1, 240, 130, 37, 173,
-    251, 10, 1, 234, 39, 37, 173, 251, 10, 1, 240, 107, 37, 173, 251, 10, 1,
-    233, 225, 37, 173, 251, 10, 1, 203, 139, 37, 173, 251, 10, 1, 195, 106,
-    37, 173, 251, 10, 1, 202, 225, 37, 173, 251, 10, 1, 196, 64, 37, 173,
-    251, 10, 1, 202, 213, 37, 173, 251, 10, 1, 195, 109, 37, 173, 251, 10,
-    31, 100, 37, 173, 251, 10, 31, 203, 23, 37, 173, 251, 10, 31, 200, 234,
-    220, 53, 1, 251, 162, 220, 53, 1, 248, 205, 220, 53, 1, 248, 190, 220,
-    53, 1, 233, 177, 220, 53, 1, 233, 203, 220, 53, 1, 240, 100, 220, 53, 1,
-    232, 147, 220, 53, 1, 197, 117, 220, 53, 2, 200, 104, 220, 53, 1, 195,
-    92, 220, 53, 1, 195, 67, 220, 53, 1, 225, 195, 220, 53, 1, 225, 176, 220,
-    53, 1, 232, 87, 220, 53, 1, 202, 253, 220, 53, 1, 195, 240, 220, 53, 1,
-    225, 5, 220, 53, 1, 196, 205, 220, 53, 1, 224, 135, 220, 53, 1, 222, 240,
-    220, 53, 1, 239, 169, 220, 53, 1, 202, 224, 220, 53, 1, 219, 171, 220,
-    53, 1, 215, 138, 220, 53, 1, 208, 225, 220, 53, 1, 250, 117, 220, 53, 1,
-    252, 120, 220, 53, 1, 213, 92, 220, 53, 1, 235, 189, 220, 53, 1, 209, 5,
-    220, 53, 1, 211, 101, 220, 53, 1, 196, 182, 220, 53, 1, 211, 128, 220,
-    53, 1, 210, 109, 220, 53, 1, 206, 211, 220, 53, 1, 205, 48, 220, 53, 1,
-    203, 82, 220, 53, 252, 30, 117, 57, 220, 53, 252, 30, 117, 60, 220, 53,
-    31, 100, 220, 53, 31, 146, 220, 53, 31, 203, 23, 220, 53, 31, 200, 234,
-    220, 53, 31, 97, 231, 57, 220, 53, 211, 214, 205, 7, 220, 53, 211, 214,
-    235, 77, 220, 53, 211, 214, 52, 76, 197, 39, 238, 253, 220, 53, 211, 214,
-    76, 197, 39, 238, 253, 220, 53, 211, 214, 238, 253, 220, 53, 211, 214,
-    99, 238, 250, 220, 53, 211, 214, 222, 76, 235, 134, 250, 129, 1, 63, 250,
-    129, 1, 252, 168, 250, 129, 1, 251, 49, 250, 129, 1, 252, 126, 250, 129,
-    1, 251, 106, 250, 129, 1, 252, 128, 250, 129, 1, 251, 245, 250, 129, 1,
-    251, 241, 250, 129, 1, 69, 250, 129, 1, 237, 54, 250, 129, 1, 72, 250,
-    129, 1, 214, 102, 250, 129, 1, 68, 250, 129, 1, 226, 120, 250, 129, 1,
-    66, 250, 129, 1, 199, 245, 250, 129, 1, 224, 209, 250, 129, 1, 196, 202,
-    250, 129, 1, 196, 162, 250, 129, 1, 196, 173, 250, 129, 1, 234, 48, 250,
-    129, 1, 234, 5, 250, 129, 1, 233, 216, 250, 129, 1, 247, 57, 250, 129, 1,
-    225, 193, 250, 129, 1, 203, 68, 250, 129, 1, 202, 217, 250, 129, 1, 239,
-    252, 250, 129, 1, 239, 167, 250, 129, 1, 201, 73, 250, 129, 1, 213, 92,
-    250, 129, 1, 235, 189, 250, 129, 1, 249, 9, 250, 129, 1, 248, 192, 250,
-    129, 1, 217, 58, 250, 129, 1, 216, 229, 250, 129, 1, 216, 230, 250, 129,
-    1, 217, 118, 250, 129, 1, 215, 98, 250, 129, 1, 216, 81, 250, 129, 1,
-    219, 207, 250, 129, 1, 231, 243, 250, 129, 1, 195, 165, 250, 129, 1, 196,
-    69, 250, 129, 1, 199, 118, 250, 129, 1, 210, 183, 250, 129, 1, 222, 197,
-    250, 129, 1, 208, 147, 250, 129, 1, 195, 88, 250, 129, 1, 206, 255, 250,
-    129, 1, 195, 65, 250, 129, 1, 206, 119, 250, 129, 1, 205, 49, 250, 129,
-    1, 232, 147, 250, 129, 252, 30, 78, 202, 70, 99, 238, 251, 127, 97, 76,
-    211, 213, 4, 99, 238, 251, 127, 97, 76, 211, 213, 222, 228, 99, 238, 251,
-    127, 97, 76, 211, 213, 222, 228, 97, 76, 127, 99, 238, 251, 211, 213,
-    222, 228, 99, 209, 255, 127, 97, 210, 3, 211, 213, 222, 228, 97, 210, 3,
-    127, 99, 209, 255, 211, 213, 226, 46, 213, 133, 1, 251, 162, 226, 46,
-    213, 133, 1, 248, 205, 226, 46, 213, 133, 1, 233, 177, 226, 46, 213, 133,
-    1, 240, 100, 226, 46, 213, 133, 1, 232, 147, 226, 46, 213, 133, 1, 197,
-    117, 226, 46, 213, 133, 1, 195, 92, 226, 46, 213, 133, 1, 232, 87, 226,
-    46, 213, 133, 1, 202, 253, 226, 46, 213, 133, 1, 195, 240, 226, 46, 213,
-    133, 1, 225, 5, 226, 46, 213, 133, 1, 222, 240, 226, 46, 213, 133, 1,
-    219, 171, 226, 46, 213, 133, 1, 215, 138, 226, 46, 213, 133, 1, 208, 225,
-    226, 46, 213, 133, 1, 250, 117, 226, 46, 213, 133, 1, 213, 92, 226, 46,
-    213, 133, 1, 209, 5, 226, 46, 213, 133, 1, 211, 101, 226, 46, 213, 133,
-    1, 210, 109, 226, 46, 213, 133, 1, 206, 211, 226, 46, 213, 133, 1, 203,
-    82, 226, 46, 213, 133, 31, 100, 226, 46, 213, 133, 31, 102, 226, 46, 213,
-    133, 31, 134, 226, 46, 213, 133, 31, 136, 226, 46, 213, 133, 31, 203, 23,
-    226, 46, 213, 133, 31, 200, 234, 226, 46, 213, 133, 31, 97, 231, 57, 226,
-    46, 213, 133, 31, 97, 170, 226, 46, 213, 222, 1, 251, 162, 226, 46, 213,
-    222, 1, 248, 205, 226, 46, 213, 222, 1, 233, 177, 226, 46, 213, 222, 1,
-    240, 100, 226, 46, 213, 222, 1, 232, 147, 226, 46, 213, 222, 1, 197, 116,
-    226, 46, 213, 222, 1, 195, 92, 226, 46, 213, 222, 1, 232, 87, 226, 46,
-    213, 222, 1, 202, 253, 226, 46, 213, 222, 1, 195, 240, 226, 46, 213, 222,
-    1, 225, 5, 226, 46, 213, 222, 1, 222, 240, 226, 46, 213, 222, 1, 219,
-    170, 226, 46, 213, 222, 1, 215, 138, 226, 46, 213, 222, 1, 208, 225, 226,
-    46, 213, 222, 1, 213, 92, 226, 46, 213, 222, 1, 209, 5, 226, 46, 213,
-    222, 1, 206, 211, 226, 46, 213, 222, 1, 203, 82, 226, 46, 213, 222, 31,
-    100, 226, 46, 213, 222, 31, 102, 226, 46, 213, 222, 31, 134, 226, 46,
-    213, 222, 31, 136, 226, 46, 213, 222, 31, 203, 23, 226, 46, 213, 222, 31,
-    200, 234, 226, 46, 213, 222, 31, 97, 231, 57, 226, 46, 213, 222, 31, 97,
-    170, 211, 239, 213, 222, 1, 251, 162, 211, 239, 213, 222, 1, 248, 205,
-    211, 239, 213, 222, 1, 233, 177, 211, 239, 213, 222, 1, 240, 100, 211,
-    239, 213, 222, 1, 232, 147, 211, 239, 213, 222, 1, 197, 116, 211, 239,
-    213, 222, 1, 195, 92, 211, 239, 213, 222, 1, 232, 87, 211, 239, 213, 222,
-    1, 195, 240, 211, 239, 213, 222, 1, 225, 5, 211, 239, 213, 222, 1, 222,
-    240, 211, 239, 213, 222, 1, 219, 170, 211, 239, 213, 222, 1, 215, 138,
-    211, 239, 213, 222, 1, 208, 225, 211, 239, 213, 222, 1, 213, 92, 211,
-    239, 213, 222, 1, 209, 5, 211, 239, 213, 222, 1, 206, 211, 211, 239, 213,
-    222, 1, 203, 82, 211, 239, 213, 222, 208, 133, 78, 211, 239, 213, 222,
-    163, 208, 133, 78, 211, 239, 213, 222, 235, 7, 238, 251, 3, 241, 61, 211,
-    239, 213, 222, 235, 7, 238, 251, 3, 238, 253, 211, 239, 213, 222, 31,
-    100, 211, 239, 213, 222, 31, 102, 211, 239, 213, 222, 31, 134, 211, 239,
-    213, 222, 31, 136, 211, 239, 213, 222, 31, 203, 23, 211, 239, 213, 222,
-    31, 200, 234, 211, 239, 213, 222, 31, 97, 231, 57, 37, 201, 7, 1, 214,
-    61, 63, 37, 201, 7, 1, 196, 57, 63, 37, 201, 7, 1, 196, 57, 251, 245, 37,
-    201, 7, 1, 214, 61, 68, 37, 201, 7, 1, 196, 57, 68, 37, 201, 7, 1, 196,
-    57, 69, 37, 201, 7, 1, 214, 61, 72, 37, 201, 7, 1, 214, 61, 214, 164, 37,
-    201, 7, 1, 196, 57, 214, 164, 37, 201, 7, 1, 214, 61, 252, 117, 37, 201,
-    7, 1, 196, 57, 252, 117, 37, 201, 7, 1, 214, 61, 251, 244, 37, 201, 7, 1,
-    196, 57, 251, 244, 37, 201, 7, 1, 214, 61, 251, 217, 37, 201, 7, 1, 196,
-    57, 251, 217, 37, 201, 7, 1, 214, 61, 251, 239, 37, 201, 7, 1, 196, 57,
-    251, 239, 37, 201, 7, 1, 214, 61, 252, 6, 37, 201, 7, 1, 196, 57, 252, 6,
-    37, 201, 7, 1, 214, 61, 251, 243, 37, 201, 7, 1, 214, 61, 236, 56, 37,
-    201, 7, 1, 196, 57, 236, 56, 37, 201, 7, 1, 214, 61, 250, 122, 37, 201,
-    7, 1, 196, 57, 250, 122, 37, 201, 7, 1, 214, 61, 251, 226, 37, 201, 7, 1,
-    196, 57, 251, 226, 37, 201, 7, 1, 214, 61, 251, 237, 37, 201, 7, 1, 196,
-    57, 251, 237, 37, 201, 7, 1, 214, 61, 214, 162, 37, 201, 7, 1, 196, 57,
-    214, 162, 37, 201, 7, 1, 214, 61, 251, 173, 37, 201, 7, 1, 196, 57, 251,
-    173, 37, 201, 7, 1, 214, 61, 251, 236, 37, 201, 7, 1, 214, 61, 236, 245,
-    37, 201, 7, 1, 214, 61, 236, 241, 37, 201, 7, 1, 214, 61, 251, 106, 37,
-    201, 7, 1, 214, 61, 251, 234, 37, 201, 7, 1, 196, 57, 251, 234, 37, 201,
-    7, 1, 214, 61, 236, 207, 37, 201, 7, 1, 196, 57, 236, 207, 37, 201, 7, 1,
-    214, 61, 236, 227, 37, 201, 7, 1, 196, 57, 236, 227, 37, 201, 7, 1, 214,
-    61, 236, 193, 37, 201, 7, 1, 196, 57, 236, 193, 37, 201, 7, 1, 196, 57,
-    251, 97, 37, 201, 7, 1, 214, 61, 236, 215, 37, 201, 7, 1, 196, 57, 251,
-    233, 37, 201, 7, 1, 214, 61, 236, 183, 37, 201, 7, 1, 214, 61, 214, 93,
-    37, 201, 7, 1, 214, 61, 230, 203, 37, 201, 7, 1, 214, 61, 237, 62, 37,
-    201, 7, 1, 196, 57, 237, 62, 37, 201, 7, 1, 214, 61, 251, 18, 37, 201, 7,
-    1, 196, 57, 251, 18, 37, 201, 7, 1, 214, 61, 226, 3, 37, 201, 7, 1, 196,
-    57, 226, 3, 37, 201, 7, 1, 214, 61, 214, 74, 37, 201, 7, 1, 196, 57, 214,
-    74, 37, 201, 7, 1, 214, 61, 251, 14, 37, 201, 7, 1, 196, 57, 251, 14, 37,
-    201, 7, 1, 214, 61, 251, 232, 37, 201, 7, 1, 214, 61, 250, 202, 37, 201,
-    7, 1, 214, 61, 251, 230, 37, 201, 7, 1, 214, 61, 250, 195, 37, 201, 7, 1,
-    196, 57, 250, 195, 37, 201, 7, 1, 214, 61, 236, 141, 37, 201, 7, 1, 196,
-    57, 236, 141, 37, 201, 7, 1, 214, 61, 250, 168, 37, 201, 7, 1, 196, 57,
-    250, 168, 37, 201, 7, 1, 214, 61, 251, 227, 37, 201, 7, 1, 196, 57, 251,
-    227, 37, 201, 7, 1, 214, 61, 214, 49, 37, 201, 7, 1, 214, 61, 249, 63,
-    37, 160, 6, 1, 63, 37, 160, 6, 1, 252, 168, 37, 160, 6, 1, 237, 64, 37,
-    160, 6, 1, 251, 118, 37, 160, 6, 1, 237, 62, 37, 160, 6, 1, 236, 227, 37,
-    160, 6, 1, 237, 59, 37, 160, 6, 1, 237, 58, 37, 160, 6, 1, 251, 100, 37,
-    160, 6, 1, 69, 37, 160, 6, 1, 244, 204, 69, 37, 160, 6, 1, 237, 54, 37,
-    160, 6, 1, 237, 47, 37, 160, 6, 1, 237, 46, 37, 160, 6, 1, 237, 43, 37,
-    160, 6, 1, 237, 40, 37, 160, 6, 1, 68, 37, 160, 6, 1, 226, 120, 37, 160,
-    6, 1, 237, 17, 37, 160, 6, 1, 237, 14, 37, 160, 6, 1, 251, 181, 37, 160,
-    6, 1, 200, 45, 37, 160, 6, 1, 237, 7, 37, 160, 6, 1, 236, 244, 37, 160,
-    6, 1, 236, 241, 37, 160, 6, 1, 236, 230, 37, 160, 6, 1, 236, 193, 37,
-    160, 6, 1, 72, 37, 160, 6, 1, 214, 102, 37, 160, 6, 1, 216, 186, 214,
-    164, 37, 160, 6, 1, 209, 130, 214, 164, 37, 160, 6, 1, 214, 163, 37, 160,
-    6, 1, 236, 183, 37, 160, 6, 1, 236, 235, 37, 160, 6, 1, 236, 163, 37,
-    160, 6, 1, 206, 182, 236, 163, 37, 160, 6, 1, 236, 151, 37, 160, 6, 1,
-    236, 130, 37, 160, 6, 1, 236, 128, 37, 160, 6, 1, 236, 207, 37, 160, 6,
-    1, 236, 117, 37, 160, 6, 1, 237, 60, 37, 160, 6, 1, 66, 37, 160, 6, 1,
-    199, 245, 37, 160, 6, 1, 216, 186, 200, 99, 37, 160, 6, 1, 209, 130, 200,
-    99, 37, 160, 6, 1, 236, 104, 37, 160, 6, 1, 236, 56, 37, 160, 6, 1, 236,
-    51, 37, 160, 6, 1, 236, 206, 55, 37, 160, 6, 1, 200, 4, 37, 160, 4, 1,
-    63, 37, 160, 4, 1, 252, 168, 37, 160, 4, 1, 237, 64, 37, 160, 4, 1, 251,
-    118, 37, 160, 4, 1, 237, 62, 37, 160, 4, 1, 236, 227, 37, 160, 4, 1, 237,
-    59, 37, 160, 4, 1, 237, 58, 37, 160, 4, 1, 251, 100, 37, 160, 4, 1, 69,
-    37, 160, 4, 1, 244, 204, 69, 37, 160, 4, 1, 237, 54, 37, 160, 4, 1, 237,
-    47, 37, 160, 4, 1, 237, 46, 37, 160, 4, 1, 237, 43, 37, 160, 4, 1, 237,
-    40, 37, 160, 4, 1, 68, 37, 160, 4, 1, 226, 120, 37, 160, 4, 1, 237, 17,
-    37, 160, 4, 1, 237, 14, 37, 160, 4, 1, 251, 181, 37, 160, 4, 1, 200, 45,
-    37, 160, 4, 1, 237, 7, 37, 160, 4, 1, 236, 244, 37, 160, 4, 1, 236, 241,
-    37, 160, 4, 1, 236, 230, 37, 160, 4, 1, 236, 193, 37, 160, 4, 1, 72, 37,
-    160, 4, 1, 214, 102, 37, 160, 4, 1, 216, 186, 214, 164, 37, 160, 4, 1,
-    209, 130, 214, 164, 37, 160, 4, 1, 214, 163, 37, 160, 4, 1, 236, 183, 37,
-    160, 4, 1, 236, 235, 37, 160, 4, 1, 236, 163, 37, 160, 4, 1, 206, 182,
-    236, 163, 37, 160, 4, 1, 236, 151, 37, 160, 4, 1, 236, 130, 37, 160, 4,
-    1, 236, 128, 37, 160, 4, 1, 236, 207, 37, 160, 4, 1, 236, 117, 37, 160,
-    4, 1, 237, 60, 37, 160, 4, 1, 66, 37, 160, 4, 1, 199, 245, 37, 160, 4, 1,
-    216, 186, 200, 99, 37, 160, 4, 1, 209, 130, 200, 99, 37, 160, 4, 1, 236,
-    104, 37, 160, 4, 1, 236, 56, 37, 160, 4, 1, 236, 51, 37, 160, 4, 1, 236,
-    206, 55, 37, 160, 4, 1, 200, 4, 37, 160, 31, 100, 37, 160, 31, 146, 37,
-    160, 31, 203, 23, 37, 160, 31, 235, 145, 37, 160, 31, 97, 231, 57, 37,
-    160, 31, 97, 170, 232, 180, 209, 214, 1, 63, 232, 180, 209, 214, 1, 249,
-    145, 232, 180, 209, 214, 1, 161, 232, 180, 209, 214, 1, 189, 232, 180,
-    209, 214, 1, 201, 78, 232, 180, 209, 214, 1, 225, 214, 232, 180, 209,
-    214, 1, 247, 174, 232, 180, 209, 214, 1, 142, 232, 180, 209, 214, 1, 224,
-    146, 232, 180, 209, 214, 1, 235, 239, 232, 180, 209, 214, 1, 240, 136,
-    232, 180, 209, 214, 1, 240, 41, 232, 180, 209, 214, 1, 169, 232, 180,
-    209, 214, 1, 209, 181, 232, 180, 209, 214, 1, 195, 115, 232, 180, 209,
-    214, 1, 183, 232, 180, 209, 214, 1, 207, 50, 232, 180, 209, 214, 1, 155,
-    232, 180, 209, 214, 1, 234, 123, 232, 180, 209, 214, 1, 172, 232, 180,
-    209, 214, 1, 166, 232, 180, 209, 214, 1, 176, 232, 180, 209, 214, 1, 197,
-    166, 232, 180, 209, 214, 1, 224, 72, 197, 166, 232, 180, 209, 214, 1,
-    164, 232, 180, 209, 214, 1, 224, 72, 164, 232, 180, 209, 214, 1, 217, 71,
-    232, 180, 209, 214, 1, 215, 109, 232, 180, 209, 214, 1, 199, 152, 232,
-    180, 209, 214, 18, 63, 232, 180, 209, 214, 18, 68, 232, 180, 209, 214,
-    18, 66, 232, 180, 209, 214, 18, 69, 232, 180, 209, 214, 18, 72, 232, 180,
-    209, 214, 117, 208, 245, 232, 180, 209, 214, 117, 218, 1, 224, 113, 232,
-    180, 209, 214, 2, 232, 174, 232, 180, 209, 214, 2, 203, 138, 232, 180,
-    209, 214, 2, 203, 113, 232, 180, 209, 214, 2, 203, 95, 232, 180, 209,
-    214, 17, 195, 79, 232, 180, 209, 214, 17, 100, 232, 180, 209, 214, 17,
-    102, 232, 180, 209, 214, 17, 134, 232, 180, 209, 214, 17, 136, 232, 180,
-    209, 214, 17, 146, 232, 180, 209, 214, 17, 167, 232, 180, 209, 214, 17,
-    178, 232, 180, 209, 214, 17, 171, 232, 180, 209, 214, 17, 182, 209, 118,
-    17, 100, 209, 118, 17, 102, 209, 118, 17, 134, 209, 118, 17, 136, 209,
-    118, 17, 146, 209, 118, 17, 167, 209, 118, 17, 178, 209, 118, 17, 171,
-    209, 118, 17, 182, 209, 118, 31, 203, 23, 209, 118, 31, 200, 234, 209,
-    118, 31, 202, 177, 209, 118, 31, 235, 14, 209, 118, 31, 235, 145, 209,
-    118, 31, 206, 13, 209, 118, 31, 207, 65, 209, 118, 31, 237, 20, 209, 118,
-    31, 216, 174, 209, 118, 31, 97, 231, 57, 209, 118, 31, 99, 231, 57, 209,
-    118, 31, 115, 231, 57, 209, 118, 31, 235, 7, 231, 57, 209, 118, 31, 235,
-    101, 231, 57, 209, 118, 31, 206, 29, 231, 57, 209, 118, 31, 207, 71, 231,
-    57, 209, 118, 31, 237, 31, 231, 57, 209, 118, 31, 216, 179, 231, 57, 209,
-    118, 191, 97, 232, 225, 209, 118, 191, 97, 211, 87, 209, 118, 191, 97,
-    202, 184, 209, 118, 191, 99, 202, 181, 37, 205, 182, 1, 251, 162, 37,
-    205, 182, 1, 48, 251, 162, 37, 205, 182, 1, 248, 205, 37, 205, 182, 1,
-    48, 248, 205, 37, 205, 182, 1, 233, 177, 37, 205, 182, 1, 232, 147, 37,
-    205, 182, 1, 48, 232, 147, 37, 205, 182, 1, 197, 117, 37, 205, 182, 1,
-    195, 92, 37, 205, 182, 1, 232, 87, 37, 205, 182, 1, 195, 240, 37, 205,
-    182, 1, 225, 5, 37, 205, 182, 1, 222, 240, 37, 205, 182, 1, 219, 171, 37,
-    205, 182, 1, 215, 138, 37, 205, 182, 1, 48, 215, 138, 37, 205, 182, 1,
-    48, 215, 139, 3, 83, 203, 135, 37, 205, 182, 1, 208, 225, 37, 205, 182,
-    1, 250, 117, 37, 205, 182, 1, 251, 131, 250, 117, 37, 205, 182, 1, 213,
-    92, 37, 205, 182, 1, 209, 5, 37, 205, 182, 1, 48, 209, 5, 37, 205, 182,
-    1, 48, 209, 6, 3, 83, 203, 135, 37, 205, 182, 1, 210, 107, 37, 205, 182,
-    1, 206, 211, 37, 205, 182, 1, 203, 82, 37, 205, 182, 1, 48, 203, 82, 37,
-    205, 182, 1, 48, 203, 83, 3, 83, 203, 135, 37, 205, 182, 31, 100, 37,
-    205, 182, 31, 102, 37, 205, 182, 31, 134, 37, 205, 182, 31, 136, 37, 205,
-    182, 31, 146, 37, 205, 182, 31, 203, 23, 37, 205, 182, 31, 200, 234, 37,
-    205, 182, 31, 202, 177, 37, 205, 182, 31, 97, 231, 57, 37, 205, 182, 191,
-    97, 232, 225, 37, 205, 182, 33, 250, 116, 205, 182, 1, 251, 162, 205,
-    182, 1, 248, 205, 205, 182, 1, 233, 177, 205, 182, 1, 232, 147, 205, 182,
-    1, 197, 117, 205, 182, 1, 195, 92, 205, 182, 1, 232, 87, 205, 182, 1,
-    195, 240, 205, 182, 1, 225, 5, 205, 182, 1, 222, 240, 205, 182, 1, 219,
-    171, 205, 182, 1, 215, 138, 205, 182, 1, 208, 225, 205, 182, 1, 250, 117,
-    205, 182, 1, 213, 92, 205, 182, 1, 209, 5, 205, 182, 1, 210, 108, 205,
-    182, 1, 206, 211, 205, 182, 1, 203, 82, 205, 182, 1, 235, 160, 205, 182,
-    1, 222, 142, 205, 182, 226, 73, 206, 211, 205, 182, 38, 76, 60, 205, 182,
-    38, 99, 238, 251, 60, 205, 182, 38, 76, 57, 205, 182, 38, 99, 238, 251,
-    57, 205, 182, 38, 241, 12, 57, 205, 182, 38, 241, 12, 60, 205, 182, 38,
-    231, 165, 57, 205, 182, 38, 231, 165, 60, 205, 182, 38, 181, 231, 165,
-    60, 205, 182, 38, 210, 110, 60, 205, 182, 38, 204, 196, 60, 205, 182, 31,
-    100, 205, 182, 31, 203, 23, 205, 182, 31, 200, 234, 205, 182, 31, 97,
-    231, 57, 205, 182, 211, 214, 99, 83, 249, 68, 205, 182, 211, 214, 99, 83,
-    249, 69, 3, 238, 250, 205, 182, 211, 214, 244, 250, 3, 238, 253, 205,
-    182, 211, 214, 99, 244, 247, 3, 238, 250, 205, 182, 211, 214, 157, 244,
-    250, 3, 238, 253, 236, 243, 1, 251, 162, 236, 243, 1, 248, 205, 236, 243,
-    1, 233, 177, 236, 243, 1, 240, 100, 236, 243, 1, 232, 147, 236, 243, 1,
-    197, 117, 236, 243, 1, 195, 92, 236, 243, 1, 232, 87, 236, 243, 1, 202,
-    253, 236, 243, 1, 195, 240, 236, 243, 1, 225, 5, 236, 243, 1, 222, 240,
-    236, 243, 1, 219, 171, 236, 243, 1, 215, 138, 236, 243, 1, 208, 225, 236,
-    243, 1, 250, 117, 236, 243, 1, 213, 92, 236, 243, 1, 209, 5, 236, 243, 1,
-    211, 101, 236, 243, 1, 210, 109, 236, 243, 1, 206, 211, 236, 243, 1, 203,
-    82, 236, 243, 33, 195, 91, 158, 2, 247, 133, 158, 2, 251, 51, 158, 2,
-    199, 2, 158, 2, 225, 165, 158, 2, 200, 34, 158, 1, 63, 158, 1, 252, 168,
-    158, 1, 68, 158, 1, 226, 120, 158, 1, 66, 158, 1, 199, 245, 158, 1, 110,
-    144, 158, 1, 110, 209, 182, 158, 1, 110, 159, 158, 1, 110, 222, 38, 158,
-    1, 69, 158, 1, 251, 200, 158, 1, 72, 158, 1, 250, 150, 158, 1, 155, 158,
-    1, 224, 146, 158, 1, 234, 123, 158, 1, 233, 230, 158, 1, 217, 71, 158, 1,
-    247, 174, 158, 1, 247, 16, 158, 1, 225, 214, 158, 1, 225, 180, 158, 1,
-    215, 109, 158, 1, 201, 78, 158, 1, 201, 66, 158, 1, 240, 41, 158, 1, 240,
-    25, 158, 1, 216, 86, 158, 1, 189, 158, 1, 202, 233, 158, 1, 240, 136,
-    158, 1, 239, 176, 158, 1, 176, 158, 1, 161, 158, 1, 213, 6, 158, 1, 249,
-    145, 158, 1, 248, 197, 158, 1, 166, 158, 1, 164, 158, 1, 169, 158, 1,
-    172, 158, 1, 199, 152, 158, 1, 207, 50, 158, 1, 205, 80, 158, 1, 183,
-    158, 1, 142, 158, 1, 222, 37, 158, 1, 37, 42, 222, 26, 158, 1, 37, 42,
-    209, 181, 158, 1, 37, 42, 216, 68, 158, 18, 2, 252, 168, 158, 18, 2, 248,
-    193, 252, 168, 158, 18, 2, 68, 158, 18, 2, 226, 120, 158, 18, 2, 66, 158,
-    18, 2, 199, 245, 158, 18, 2, 110, 144, 158, 18, 2, 110, 209, 182, 158,
-    18, 2, 110, 159, 158, 18, 2, 110, 222, 38, 158, 18, 2, 69, 158, 18, 2,
-    251, 200, 158, 18, 2, 72, 158, 18, 2, 250, 150, 158, 199, 7, 158, 240,
-    88, 158, 52, 240, 88, 158, 211, 214, 238, 253, 158, 211, 214, 52, 238,
-    253, 158, 211, 214, 222, 75, 158, 211, 214, 241, 72, 154, 158, 211, 214,
-    221, 213, 158, 31, 100, 158, 31, 102, 158, 31, 134, 158, 31, 136, 158,
-    31, 146, 158, 31, 167, 158, 31, 178, 158, 31, 171, 158, 31, 182, 158, 31,
-    203, 23, 158, 31, 200, 234, 158, 31, 202, 177, 158, 31, 235, 14, 158, 31,
-    235, 145, 158, 31, 206, 13, 158, 31, 207, 65, 158, 31, 237, 20, 158, 31,
-    216, 174, 158, 31, 97, 231, 57, 158, 31, 97, 170, 158, 17, 195, 79, 158,
-    17, 100, 158, 17, 102, 158, 17, 134, 158, 17, 136, 158, 17, 146, 158, 17,
-    167, 158, 17, 178, 158, 17, 171, 158, 17, 182, 158, 31, 225, 124, 225,
-    28, 2, 247, 133, 225, 28, 2, 251, 51, 225, 28, 2, 199, 2, 225, 28, 1, 63,
-    225, 28, 1, 252, 168, 225, 28, 1, 68, 225, 28, 1, 226, 120, 225, 28, 1,
-    66, 225, 28, 1, 199, 245, 225, 28, 1, 69, 225, 28, 1, 251, 200, 225, 28,
-    1, 72, 225, 28, 1, 250, 150, 225, 28, 1, 155, 225, 28, 1, 224, 146, 225,
-    28, 1, 234, 123, 225, 28, 1, 233, 230, 225, 28, 1, 217, 71, 225, 28, 1,
-    247, 174, 225, 28, 1, 247, 16, 225, 28, 1, 225, 214, 225, 28, 1, 225,
-    180, 225, 28, 1, 215, 109, 225, 28, 1, 201, 78, 225, 28, 1, 201, 66, 225,
-    28, 1, 240, 41, 225, 28, 1, 240, 30, 225, 28, 1, 240, 25, 225, 28, 1,
-    210, 77, 225, 28, 1, 216, 86, 225, 28, 1, 189, 225, 28, 1, 202, 233, 225,
-    28, 1, 240, 136, 225, 28, 1, 239, 176, 225, 28, 1, 176, 225, 28, 1, 161,
-    225, 28, 1, 213, 6, 225, 28, 1, 249, 145, 225, 28, 1, 248, 197, 225, 28,
-    1, 166, 225, 28, 1, 164, 225, 28, 1, 169, 225, 28, 1, 172, 225, 28, 1,
-    199, 152, 225, 28, 1, 207, 50, 225, 28, 1, 205, 80, 225, 28, 1, 183, 225,
-    28, 1, 142, 225, 28, 18, 2, 252, 168, 225, 28, 18, 2, 68, 225, 28, 18, 2,
-    226, 120, 225, 28, 18, 2, 66, 225, 28, 18, 2, 199, 245, 225, 28, 18, 2,
-    69, 225, 28, 18, 2, 251, 200, 225, 28, 18, 2, 72, 225, 28, 18, 2, 250,
-    150, 225, 28, 2, 199, 7, 225, 28, 2, 215, 149, 225, 28, 252, 30, 55, 225,
-    28, 236, 196, 55, 225, 28, 31, 55, 225, 28, 208, 133, 78, 225, 28, 52,
-    208, 133, 78, 225, 28, 240, 88, 225, 28, 52, 240, 88, 225, 28, 31, 2, 57,
-    205, 167, 205, 175, 1, 208, 254, 205, 167, 205, 175, 1, 203, 139, 205,
-    167, 205, 175, 1, 249, 115, 205, 167, 205, 175, 1, 247, 163, 205, 167,
-    205, 175, 1, 240, 116, 205, 167, 205, 175, 1, 234, 108, 205, 167, 205,
-    175, 1, 220, 89, 205, 167, 205, 175, 1, 217, 68, 205, 167, 205, 175, 1,
-    223, 57, 205, 167, 205, 175, 1, 217, 231, 205, 167, 205, 175, 1, 199,
-    148, 205, 167, 205, 175, 1, 213, 223, 205, 167, 205, 175, 1, 196, 110,
-    205, 167, 205, 175, 1, 210, 226, 205, 167, 205, 175, 1, 232, 236, 205,
-    167, 205, 175, 1, 225, 33, 205, 167, 205, 175, 1, 225, 208, 205, 167,
-    205, 175, 1, 215, 106, 205, 167, 205, 175, 1, 251, 209, 205, 167, 205,
-    175, 1, 237, 52, 205, 167, 205, 175, 1, 226, 121, 205, 167, 205, 175, 1,
-    200, 92, 205, 167, 205, 175, 1, 214, 149, 205, 167, 205, 175, 1, 237, 40,
-    205, 167, 205, 175, 1, 220, 104, 205, 167, 205, 175, 17, 195, 79, 205,
-    167, 205, 175, 17, 100, 205, 167, 205, 175, 17, 102, 205, 167, 205, 175,
-    17, 134, 205, 167, 205, 175, 17, 136, 205, 167, 205, 175, 17, 146, 205,
-    167, 205, 175, 17, 167, 205, 167, 205, 175, 17, 178, 205, 167, 205, 175,
-    17, 171, 205, 167, 205, 175, 17, 182, 247, 10, 2, 247, 133, 247, 10, 2,
-    251, 51, 247, 10, 2, 199, 2, 247, 10, 1, 252, 168, 247, 10, 1, 68, 247,
-    10, 1, 66, 247, 10, 1, 69, 247, 10, 1, 225, 55, 247, 10, 1, 224, 145,
-    247, 10, 1, 234, 120, 247, 10, 1, 233, 229, 247, 10, 1, 217, 70, 247, 10,
-    1, 247, 173, 247, 10, 1, 247, 15, 247, 10, 1, 225, 213, 247, 10, 1, 225,
-    179, 247, 10, 1, 215, 108, 247, 10, 1, 201, 77, 247, 10, 1, 201, 65, 247,
-    10, 1, 240, 40, 247, 10, 1, 240, 24, 247, 10, 1, 216, 85, 247, 10, 1,
-    203, 162, 247, 10, 1, 202, 232, 247, 10, 1, 240, 135, 247, 10, 1, 239,
-    175, 247, 10, 1, 217, 244, 247, 10, 1, 213, 243, 247, 10, 1, 213, 5, 247,
-    10, 1, 249, 143, 247, 10, 1, 248, 196, 247, 10, 1, 220, 119, 247, 10, 1,
-    195, 166, 247, 10, 1, 196, 129, 247, 10, 1, 210, 244, 247, 10, 1, 223,
-    82, 247, 10, 1, 197, 160, 247, 10, 1, 209, 13, 247, 10, 1, 232, 246, 247,
-    10, 18, 2, 63, 247, 10, 18, 2, 68, 247, 10, 18, 2, 226, 120, 247, 10, 18,
-    2, 66, 247, 10, 18, 2, 199, 245, 247, 10, 18, 2, 69, 247, 10, 18, 2, 251,
-    200, 247, 10, 18, 2, 72, 247, 10, 18, 2, 250, 150, 247, 10, 18, 2, 214,
-    146, 247, 10, 177, 78, 247, 10, 250, 151, 78, 247, 10, 199, 7, 247, 10,
-    220, 117, 247, 10, 17, 195, 79, 247, 10, 17, 100, 247, 10, 17, 102, 247,
-    10, 17, 134, 247, 10, 17, 136, 247, 10, 17, 146, 247, 10, 17, 167, 247,
-    10, 17, 178, 247, 10, 17, 171, 247, 10, 17, 182, 247, 10, 208, 133, 78,
-    247, 10, 240, 88, 247, 10, 52, 240, 88, 247, 10, 211, 79, 78, 247, 10, 1,
-    222, 121, 247, 10, 18, 2, 252, 168, 247, 10, 18, 2, 237, 33, 220, 87, 1,
-    63, 220, 87, 1, 68, 220, 87, 1, 66, 220, 87, 1, 69, 220, 87, 1, 72, 220,
-    87, 1, 155, 220, 87, 1, 224, 146, 220, 87, 1, 234, 123, 220, 87, 1, 233,
-    230, 220, 87, 1, 247, 174, 220, 87, 1, 247, 16, 220, 87, 1, 225, 214,
-    220, 87, 1, 225, 180, 220, 87, 1, 215, 109, 220, 87, 1, 201, 78, 220, 87,
-    1, 201, 66, 220, 87, 1, 240, 41, 220, 87, 1, 240, 25, 220, 87, 1, 216,
-    86, 220, 87, 1, 189, 220, 87, 1, 202, 233, 220, 87, 1, 240, 136, 220, 87,
-    1, 239, 176, 220, 87, 1, 176, 220, 87, 1, 161, 220, 87, 1, 213, 6, 220,
-    87, 1, 249, 145, 220, 87, 1, 248, 197, 220, 87, 1, 166, 220, 87, 1, 169,
-    220, 87, 1, 172, 220, 87, 1, 199, 152, 220, 87, 1, 183, 220, 87, 1, 142,
-    220, 87, 1, 209, 181, 220, 87, 2, 215, 149, 220, 87, 252, 30, 55, 220,
-    87, 208, 133, 78, 220, 87, 33, 206, 159, 207, 15, 2, 247, 133, 207, 15,
-    2, 251, 51, 207, 15, 2, 199, 2, 207, 15, 1, 63, 207, 15, 1, 252, 168,
-    207, 15, 1, 68, 207, 15, 1, 226, 120, 207, 15, 1, 66, 207, 15, 1, 199,
-    245, 207, 15, 1, 110, 144, 207, 15, 1, 110, 209, 182, 207, 15, 1, 110,
-    159, 207, 15, 1, 110, 222, 38, 207, 15, 1, 69, 207, 15, 1, 251, 200, 207,
-    15, 1, 72, 207, 15, 1, 250, 150, 207, 15, 1, 155, 207, 15, 1, 224, 146,
-    207, 15, 1, 234, 123, 207, 15, 1, 233, 230, 207, 15, 1, 217, 71, 207, 15,
-    1, 247, 174, 207, 15, 1, 247, 16, 207, 15, 1, 225, 214, 207, 15, 1, 225,
-    180, 207, 15, 1, 215, 109, 207, 15, 1, 201, 78, 207, 15, 1, 201, 66, 207,
-    15, 1, 240, 41, 207, 15, 1, 240, 25, 207, 15, 1, 216, 86, 207, 15, 1,
-    189, 207, 15, 1, 202, 233, 207, 15, 1, 240, 136, 207, 15, 1, 239, 176,
-    207, 15, 1, 176, 207, 15, 1, 161, 207, 15, 1, 213, 6, 207, 15, 1, 249,
-    145, 207, 15, 1, 248, 197, 207, 15, 1, 166, 207, 15, 1, 164, 207, 15, 1,
-    169, 207, 15, 1, 172, 207, 15, 1, 222, 37, 207, 15, 1, 199, 152, 207, 15,
-    1, 207, 50, 207, 15, 1, 205, 80, 207, 15, 1, 183, 207, 15, 1, 142, 207,
-    15, 18, 2, 252, 168, 207, 15, 18, 2, 68, 207, 15, 18, 2, 226, 120, 207,
-    15, 18, 2, 66, 207, 15, 18, 2, 199, 245, 207, 15, 18, 2, 110, 144, 207,
-    15, 18, 2, 110, 209, 182, 207, 15, 18, 2, 110, 159, 207, 15, 18, 2, 110,
-    222, 38, 207, 15, 18, 2, 69, 207, 15, 18, 2, 251, 200, 207, 15, 18, 2,
-    72, 207, 15, 18, 2, 250, 150, 207, 15, 2, 199, 7, 207, 15, 2, 250, 132,
-    207, 15, 2, 225, 165, 207, 15, 2, 200, 34, 207, 15, 214, 127, 207, 15,
-    240, 88, 207, 15, 52, 240, 88, 207, 15, 252, 30, 55, 207, 15, 207, 90,
-    207, 15, 208, 215, 78, 207, 15, 2, 215, 149, 207, 15, 18, 73, 78, 207,
-    15, 236, 75, 206, 182, 18, 78, 207, 15, 204, 75, 78, 207, 15, 17, 195,
-    79, 207, 15, 17, 100, 207, 15, 17, 102, 207, 15, 17, 134, 207, 15, 17,
-    136, 207, 15, 17, 146, 207, 15, 17, 167, 207, 15, 17, 178, 207, 15, 17,
-    171, 207, 15, 17, 182, 207, 15, 237, 13, 207, 15, 2, 206, 100, 207, 15,
-    232, 130, 207, 15, 241, 128, 55, 207, 15, 208, 133, 220, 28, 207, 15,
-    208, 133, 220, 27, 153, 250, 251, 17, 100, 153, 250, 251, 17, 102, 153,
-    250, 251, 17, 134, 153, 250, 251, 17, 136, 153, 250, 251, 17, 146, 153,
-    250, 251, 17, 167, 153, 250, 251, 17, 178, 153, 250, 251, 17, 171, 153,
-    250, 251, 17, 182, 153, 250, 251, 31, 203, 23, 153, 250, 251, 31, 200,
-    234, 153, 250, 251, 31, 202, 177, 153, 250, 251, 31, 235, 14, 153, 250,
-    251, 31, 235, 145, 153, 250, 251, 31, 206, 13, 153, 250, 251, 31, 207,
-    65, 153, 250, 251, 31, 237, 20, 153, 250, 251, 31, 216, 174, 153, 250,
-    251, 31, 97, 231, 57, 153, 250, 251, 31, 97, 170, 224, 116, 1, 63, 224,
-    116, 1, 252, 168, 224, 116, 1, 68, 224, 116, 1, 66, 224, 116, 1, 69, 224,
-    116, 1, 251, 200, 224, 116, 1, 72, 224, 116, 1, 250, 150, 224, 116, 1,
-    155, 224, 116, 1, 224, 146, 224, 116, 1, 234, 123, 224, 116, 1, 234, 10,
-    224, 116, 1, 233, 230, 224, 116, 1, 217, 71, 224, 116, 1, 247, 174, 224,
-    116, 1, 247, 16, 224, 116, 1, 225, 214, 224, 116, 1, 225, 158, 224, 116,
-    1, 215, 109, 224, 116, 1, 201, 78, 224, 116, 1, 201, 66, 224, 116, 1,
-    240, 41, 224, 116, 1, 240, 25, 224, 116, 1, 216, 86, 224, 116, 1, 189,
-    224, 116, 1, 202, 233, 224, 116, 1, 240, 136, 224, 116, 1, 240, 31, 224,
-    116, 1, 239, 176, 224, 116, 1, 176, 224, 116, 1, 161, 224, 116, 1, 213,
-    6, 224, 116, 1, 249, 145, 224, 116, 1, 249, 45, 224, 116, 1, 248, 197,
-    224, 116, 1, 166, 224, 116, 1, 164, 224, 116, 1, 169, 224, 116, 1, 172,
-    224, 116, 1, 199, 152, 224, 116, 1, 183, 224, 116, 1, 142, 224, 116, 1,
-    222, 37, 224, 116, 18, 2, 252, 168, 224, 116, 18, 2, 68, 224, 116, 18, 2,
-    226, 120, 224, 116, 18, 2, 66, 224, 116, 18, 2, 69, 224, 116, 18, 2, 251,
-    200, 224, 116, 18, 2, 72, 224, 116, 18, 2, 250, 150, 224, 116, 2, 251,
-    51, 224, 116, 2, 199, 7, 224, 116, 2, 215, 149, 224, 116, 2, 207, 40,
-    224, 116, 240, 88, 224, 116, 52, 240, 88, 224, 116, 197, 9, 207, 90, 224,
-    116, 208, 133, 78, 224, 116, 52, 208, 133, 78, 224, 116, 252, 30, 55,
-    224, 116, 2, 204, 119, 218, 124, 1, 63, 218, 124, 1, 68, 218, 124, 1, 66,
-    218, 124, 1, 69, 218, 124, 1, 155, 218, 124, 1, 224, 146, 218, 124, 1,
-    234, 123, 218, 124, 1, 233, 230, 218, 124, 1, 247, 174, 218, 124, 1, 247,
-    16, 218, 124, 1, 225, 214, 218, 124, 1, 225, 158, 218, 124, 1, 215, 109,
-    218, 124, 1, 201, 78, 218, 124, 1, 201, 66, 218, 124, 1, 240, 41, 218,
-    124, 1, 240, 31, 218, 124, 1, 240, 25, 218, 124, 1, 216, 86, 218, 124, 1,
-    189, 218, 124, 1, 202, 233, 218, 124, 1, 240, 136, 218, 124, 1, 239, 176,
-    218, 124, 1, 176, 218, 124, 1, 161, 218, 124, 1, 213, 6, 218, 124, 1,
-    249, 145, 218, 124, 1, 248, 197, 218, 124, 1, 166, 218, 124, 1, 164, 218,
-    124, 1, 169, 218, 124, 1, 172, 218, 124, 1, 199, 152, 218, 124, 1, 183,
-    218, 124, 1, 142, 218, 124, 1, 209, 181, 218, 124, 1, 210, 77, 218, 124,
-    208, 133, 78, 224, 107, 1, 63, 224, 107, 1, 252, 168, 224, 107, 1, 68,
-    224, 107, 1, 226, 120, 224, 107, 1, 66, 224, 107, 1, 199, 245, 224, 107,
-    1, 69, 224, 107, 1, 251, 200, 224, 107, 1, 72, 224, 107, 1, 250, 150,
-    224, 107, 1, 155, 224, 107, 1, 224, 146, 224, 107, 1, 234, 123, 224, 107,
-    1, 234, 10, 224, 107, 1, 233, 230, 224, 107, 1, 217, 71, 224, 107, 1,
-    247, 174, 224, 107, 1, 247, 16, 224, 107, 1, 225, 214, 224, 107, 1, 225,
-    158, 224, 107, 1, 225, 180, 224, 107, 1, 215, 109, 224, 107, 1, 201, 78,
-    224, 107, 1, 201, 66, 224, 107, 1, 240, 41, 224, 107, 1, 240, 31, 224,
-    107, 1, 209, 181, 224, 107, 1, 240, 25, 224, 107, 1, 216, 86, 224, 107,
-    1, 189, 224, 107, 1, 202, 233, 224, 107, 1, 240, 136, 224, 107, 1, 239,
-    176, 224, 107, 1, 176, 224, 107, 1, 161, 224, 107, 1, 213, 6, 224, 107,
-    1, 249, 145, 224, 107, 1, 249, 45, 224, 107, 1, 248, 197, 224, 107, 1,
-    166, 224, 107, 1, 164, 224, 107, 1, 169, 224, 107, 1, 172, 224, 107, 1,
-    199, 152, 224, 107, 1, 207, 50, 224, 107, 1, 183, 224, 107, 1, 142, 224,
-    107, 2, 251, 51, 224, 107, 18, 2, 252, 168, 224, 107, 18, 2, 68, 224,
-    107, 18, 2, 226, 120, 224, 107, 18, 2, 66, 224, 107, 18, 2, 199, 245,
-    224, 107, 18, 2, 69, 224, 107, 18, 2, 251, 200, 224, 107, 18, 2, 72, 224,
-    107, 18, 2, 250, 150, 224, 107, 2, 215, 149, 224, 107, 2, 199, 7, 224,
-    107, 17, 195, 79, 224, 107, 17, 100, 224, 107, 17, 102, 224, 107, 17,
-    134, 224, 107, 17, 136, 224, 107, 17, 146, 224, 107, 17, 167, 224, 107,
-    17, 178, 224, 107, 17, 171, 224, 107, 17, 182, 233, 109, 2, 38, 251, 52,
-    57, 233, 109, 2, 247, 133, 233, 109, 2, 251, 51, 233, 109, 2, 199, 2,
-    233, 109, 1, 63, 233, 109, 1, 252, 168, 233, 109, 1, 68, 233, 109, 1,
-    226, 120, 233, 109, 1, 66, 233, 109, 1, 199, 245, 233, 109, 1, 110, 144,
-    233, 109, 1, 110, 159, 233, 109, 1, 237, 54, 233, 109, 1, 251, 200, 233,
-    109, 1, 214, 102, 233, 109, 1, 250, 150, 233, 109, 1, 155, 233, 109, 1,
-    224, 146, 233, 109, 1, 234, 123, 233, 109, 1, 233, 230, 233, 109, 1, 217,
-    71, 233, 109, 1, 247, 174, 233, 109, 1, 247, 16, 233, 109, 1, 225, 214,
-    233, 109, 1, 225, 180, 233, 109, 1, 215, 109, 233, 109, 1, 201, 78, 233,
-    109, 1, 201, 66, 233, 109, 1, 240, 41, 233, 109, 1, 240, 25, 233, 109, 1,
-    216, 86, 233, 109, 1, 189, 233, 109, 1, 202, 233, 233, 109, 1, 240, 136,
-    233, 109, 1, 239, 176, 233, 109, 1, 176, 233, 109, 1, 161, 233, 109, 1,
-    213, 6, 233, 109, 1, 249, 145, 233, 109, 1, 248, 197, 233, 109, 1, 166,
-    233, 109, 1, 164, 233, 109, 1, 169, 233, 109, 1, 172, 233, 109, 1, 222,
-    37, 233, 109, 1, 199, 152, 233, 109, 1, 207, 50, 233, 109, 1, 205, 80,
-    233, 109, 1, 183, 233, 109, 1, 142, 38, 248, 161, 60, 233, 109, 2, 215,
-    149, 233, 109, 2, 250, 132, 233, 109, 18, 2, 252, 168, 233, 109, 18, 2,
-    68, 233, 109, 18, 2, 226, 120, 233, 109, 18, 2, 66, 233, 109, 18, 2, 199,
-    245, 233, 109, 18, 2, 110, 144, 233, 109, 18, 2, 110, 209, 182, 233, 109,
-    18, 2, 237, 54, 233, 109, 18, 2, 251, 200, 233, 109, 18, 2, 214, 102,
-    233, 109, 18, 2, 250, 150, 233, 109, 2, 199, 7, 233, 109, 214, 127, 233,
-    109, 250, 151, 222, 158, 78, 233, 109, 2, 212, 123, 233, 109, 1, 199,
-    115, 251, 51, 233, 109, 1, 199, 115, 52, 251, 51, 233, 109, 1, 110, 209,
-    182, 233, 109, 1, 110, 222, 38, 233, 109, 18, 2, 110, 159, 233, 109, 18,
-    2, 110, 222, 38, 38, 233, 109, 17, 195, 79, 38, 233, 109, 17, 100, 38,
-    233, 109, 17, 102, 38, 233, 109, 17, 134, 38, 233, 109, 17, 136, 38, 233,
-    109, 17, 146, 38, 233, 109, 17, 167, 38, 233, 109, 1, 63, 38, 233, 109,
-    1, 155, 38, 233, 109, 1, 176, 38, 233, 109, 1, 199, 34, 38, 233, 109, 1,
-    161, 217, 81, 1, 63, 217, 81, 1, 252, 168, 217, 81, 1, 68, 217, 81, 1,
-    226, 120, 217, 81, 1, 66, 217, 81, 1, 199, 245, 217, 81, 1, 110, 144,
-    217, 81, 1, 110, 209, 182, 217, 81, 1, 110, 159, 217, 81, 1, 110, 222,
-    38, 217, 81, 1, 69, 217, 81, 1, 251, 200, 217, 81, 1, 72, 217, 81, 1,
-    250, 150, 217, 81, 1, 155, 217, 81, 1, 224, 146, 217, 81, 1, 234, 123,
-    217, 81, 1, 233, 230, 217, 81, 1, 217, 71, 217, 81, 1, 217, 20, 217, 81,
-    1, 247, 174, 217, 81, 1, 247, 16, 217, 81, 1, 225, 214, 217, 81, 1, 225,
-    180, 217, 81, 1, 215, 109, 217, 81, 1, 215, 91, 217, 81, 1, 201, 78, 217,
-    81, 1, 201, 66, 217, 81, 1, 240, 41, 217, 81, 1, 240, 25, 217, 81, 1,
-    216, 86, 217, 81, 1, 189, 217, 81, 1, 202, 233, 217, 81, 1, 240, 136,
-    217, 81, 1, 239, 176, 217, 81, 1, 176, 217, 81, 1, 216, 227, 217, 81, 1,
-    161, 217, 81, 1, 213, 6, 217, 81, 1, 249, 145, 217, 81, 1, 248, 197, 217,
-    81, 1, 166, 217, 81, 1, 219, 81, 217, 81, 1, 164, 217, 81, 1, 169, 217,
-    81, 1, 210, 77, 217, 81, 1, 172, 217, 81, 1, 222, 122, 217, 81, 1, 197,
-    166, 217, 81, 1, 207, 50, 217, 81, 1, 205, 80, 217, 81, 1, 183, 217, 81,
-    1, 142, 217, 81, 18, 2, 252, 168, 217, 81, 18, 2, 68, 217, 81, 18, 2,
-    226, 120, 217, 81, 18, 2, 66, 217, 81, 18, 2, 199, 245, 217, 81, 18, 2,
-    110, 144, 217, 81, 18, 2, 110, 209, 182, 217, 81, 18, 2, 110, 159, 217,
-    81, 18, 2, 110, 222, 38, 217, 81, 18, 2, 69, 217, 81, 18, 2, 251, 200,
-    217, 81, 18, 2, 72, 217, 81, 18, 2, 250, 150, 217, 81, 2, 199, 7, 217,
-    81, 2, 247, 133, 217, 81, 2, 251, 51, 217, 81, 2, 199, 2, 217, 81, 2,
-    215, 149, 217, 81, 2, 250, 132, 217, 81, 2, 48, 251, 51, 217, 81, 214,
-    127, 217, 81, 206, 99, 217, 81, 240, 88, 217, 81, 52, 240, 88, 217, 81,
-    244, 159, 217, 81, 234, 87, 235, 134, 217, 81, 252, 30, 55, 217, 81, 17,
-    195, 79, 217, 81, 17, 100, 217, 81, 17, 102, 217, 81, 17, 134, 217, 81,
-    17, 136, 217, 81, 17, 146, 217, 81, 17, 167, 217, 81, 17, 178, 217, 81,
-    17, 171, 217, 81, 17, 182, 217, 81, 212, 148, 78, 217, 81, 226, 43, 55,
-    217, 81, 208, 215, 78, 217, 81, 1, 199, 115, 251, 51, 202, 61, 251, 80,
-    202, 61, 1, 63, 202, 61, 1, 252, 168, 202, 61, 1, 68, 202, 61, 1, 226,
-    120, 202, 61, 1, 66, 202, 61, 1, 199, 245, 202, 61, 1, 110, 144, 202, 61,
-    1, 110, 209, 182, 202, 61, 1, 110, 159, 202, 61, 1, 110, 222, 38, 202,
-    61, 1, 69, 202, 61, 1, 251, 200, 202, 61, 1, 72, 202, 61, 1, 250, 150,
-    202, 61, 1, 155, 202, 61, 1, 224, 146, 202, 61, 1, 234, 123, 202, 61, 1,
-    233, 230, 202, 61, 1, 217, 71, 202, 61, 1, 247, 174, 202, 61, 1, 247, 16,
-    202, 61, 1, 225, 214, 202, 61, 1, 225, 180, 202, 61, 1, 215, 109, 202,
-    61, 1, 201, 78, 202, 61, 1, 201, 66, 202, 61, 1, 240, 41, 202, 61, 1,
-    240, 25, 202, 61, 1, 216, 86, 202, 61, 1, 189, 202, 61, 1, 202, 233, 202,
-    61, 1, 240, 136, 202, 61, 1, 239, 176, 202, 61, 1, 176, 202, 61, 1, 161,
-    202, 61, 1, 213, 6, 202, 61, 1, 249, 145, 202, 61, 1, 248, 197, 202, 61,
-    1, 166, 202, 61, 1, 164, 202, 61, 1, 169, 202, 61, 1, 172, 202, 61, 1,
-    199, 152, 202, 61, 1, 207, 50, 202, 61, 1, 205, 80, 202, 61, 1, 183, 202,
-    61, 1, 142, 202, 61, 18, 2, 252, 168, 202, 61, 18, 2, 68, 202, 61, 18, 2,
-    226, 120, 202, 61, 18, 2, 66, 202, 61, 18, 2, 199, 245, 202, 61, 18, 2,
-    110, 144, 202, 61, 18, 2, 110, 209, 182, 202, 61, 18, 2, 110, 159, 202,
-    61, 18, 2, 110, 222, 38, 202, 61, 18, 2, 69, 202, 61, 18, 2, 206, 182,
-    69, 202, 61, 18, 2, 251, 200, 202, 61, 18, 2, 72, 202, 61, 18, 2, 206,
-    182, 72, 202, 61, 18, 2, 250, 150, 202, 61, 2, 247, 133, 202, 61, 2, 251,
-    51, 202, 61, 2, 199, 2, 202, 61, 2, 199, 7, 202, 61, 2, 215, 149, 202,
-    61, 2, 250, 132, 202, 61, 233, 35, 202, 61, 252, 30, 55, 202, 61, 214,
-    127, 202, 61, 17, 195, 79, 202, 61, 17, 100, 202, 61, 17, 102, 202, 61,
-    17, 134, 202, 61, 17, 136, 202, 61, 17, 146, 202, 61, 17, 167, 202, 61,
-    17, 178, 202, 61, 17, 171, 202, 61, 17, 182, 206, 101, 1, 63, 206, 101,
-    1, 252, 168, 206, 101, 1, 68, 206, 101, 1, 226, 120, 206, 101, 1, 66,
-    206, 101, 1, 199, 245, 206, 101, 1, 110, 144, 206, 101, 1, 110, 209, 182,
-    206, 101, 1, 110, 159, 206, 101, 1, 110, 222, 38, 206, 101, 1, 69, 206,
-    101, 1, 251, 200, 206, 101, 1, 72, 206, 101, 1, 250, 150, 206, 101, 1,
-    155, 206, 101, 1, 224, 146, 206, 101, 1, 234, 123, 206, 101, 1, 233, 230,
-    206, 101, 1, 217, 71, 206, 101, 1, 247, 174, 206, 101, 1, 247, 16, 206,
-    101, 1, 225, 214, 206, 101, 1, 225, 180, 206, 101, 1, 215, 109, 206, 101,
-    1, 201, 78, 206, 101, 1, 201, 66, 206, 101, 1, 240, 41, 206, 101, 1, 240,
-    25, 206, 101, 1, 216, 86, 206, 101, 1, 189, 206, 101, 1, 202, 233, 206,
-    101, 1, 240, 136, 206, 101, 1, 239, 176, 206, 101, 1, 176, 206, 101, 1,
-    161, 206, 101, 1, 213, 6, 206, 101, 1, 249, 145, 206, 101, 1, 248, 197,
-    206, 101, 1, 166, 206, 101, 1, 164, 206, 101, 1, 169, 206, 101, 1, 172,
-    206, 101, 1, 199, 152, 206, 101, 1, 207, 50, 206, 101, 1, 205, 80, 206,
-    101, 1, 183, 206, 101, 1, 142, 206, 101, 18, 2, 252, 168, 206, 101, 18,
-    2, 68, 206, 101, 18, 2, 226, 120, 206, 101, 18, 2, 66, 206, 101, 18, 2,
-    199, 245, 206, 101, 18, 2, 110, 144, 206, 101, 18, 2, 110, 209, 182, 206,
-    101, 18, 2, 69, 206, 101, 18, 2, 251, 200, 206, 101, 18, 2, 72, 206, 101,
-    18, 2, 250, 150, 206, 101, 2, 247, 133, 206, 101, 2, 251, 51, 206, 101,
-    2, 199, 2, 206, 101, 2, 199, 7, 206, 101, 2, 215, 149, 206, 101, 2, 206,
-    100, 206, 101, 240, 88, 206, 101, 52, 240, 88, 206, 101, 207, 91, 238,
-    253, 206, 101, 207, 91, 154, 206, 101, 210, 117, 220, 28, 206, 101, 210,
-    117, 220, 27, 206, 101, 210, 117, 220, 26, 206, 101, 236, 222, 77, 202,
-    238, 78, 206, 101, 208, 133, 117, 3, 201, 175, 26, 200, 167, 214, 58,
-    206, 101, 208, 133, 117, 3, 201, 175, 26, 237, 250, 241, 70, 206, 101,
-    208, 133, 117, 3, 210, 189, 26, 237, 250, 241, 70, 206, 101, 208, 133,
-    117, 3, 210, 189, 26, 237, 250, 52, 241, 70, 206, 101, 208, 133, 117, 3,
-    210, 189, 26, 237, 250, 201, 165, 241, 70, 206, 101, 208, 133, 117, 52,
-    210, 2, 206, 101, 208, 133, 117, 52, 210, 3, 3, 210, 188, 206, 101, 208,
-    133, 117, 3, 52, 241, 70, 206, 101, 208, 133, 117, 3, 201, 165, 241, 70,
-    206, 101, 208, 133, 117, 3, 211, 90, 241, 70, 206, 101, 208, 133, 117, 3,
-    207, 88, 241, 70, 206, 101, 208, 133, 117, 3, 244, 247, 26, 210, 188,
-    206, 101, 208, 133, 117, 3, 244, 247, 26, 99, 236, 224, 206, 101, 208,
-    133, 117, 3, 244, 247, 26, 235, 7, 236, 224, 206, 101, 1, 202, 155, 251,
-    131, 68, 206, 101, 1, 200, 217, 251, 131, 68, 206, 101, 1, 200, 217, 251,
-    131, 226, 120, 206, 101, 1, 251, 131, 66, 206, 101, 18, 2, 251, 131, 66,
-    206, 101, 18, 2, 251, 131, 199, 245, 218, 236, 1, 63, 218, 236, 1, 252,
-    168, 218, 236, 1, 68, 218, 236, 1, 226, 120, 218, 236, 1, 66, 218, 236,
-    1, 199, 245, 218, 236, 1, 110, 144, 218, 236, 1, 110, 209, 182, 218, 236,
-    1, 110, 159, 218, 236, 1, 110, 222, 38, 218, 236, 1, 69, 218, 236, 1,
-    251, 200, 218, 236, 1, 72, 218, 236, 1, 250, 150, 218, 236, 1, 155, 218,
-    236, 1, 224, 146, 218, 236, 1, 234, 123, 218, 236, 1, 233, 230, 218, 236,
-    1, 217, 71, 218, 236, 1, 247, 174, 218, 236, 1, 247, 16, 218, 236, 1,
-    225, 214, 218, 236, 1, 225, 180, 218, 236, 1, 215, 109, 218, 236, 1, 201,
-    78, 218, 236, 1, 201, 66, 218, 236, 1, 240, 41, 218, 236, 1, 240, 25,
-    218, 236, 1, 216, 86, 218, 236, 1, 189, 218, 236, 1, 202, 233, 218, 236,
-    1, 240, 136, 218, 236, 1, 239, 176, 218, 236, 1, 176, 218, 236, 1, 161,
-    218, 236, 1, 213, 6, 218, 236, 1, 249, 145, 218, 236, 1, 248, 197, 218,
-    236, 1, 166, 218, 236, 1, 164, 218, 236, 1, 169, 218, 236, 1, 172, 218,
-    236, 1, 199, 152, 218, 236, 1, 207, 50, 218, 236, 1, 205, 80, 218, 236,
-    1, 183, 218, 236, 1, 142, 218, 236, 1, 222, 37, 218, 236, 18, 2, 252,
-    168, 218, 236, 18, 2, 68, 218, 236, 18, 2, 226, 120, 218, 236, 18, 2, 66,
-    218, 236, 18, 2, 199, 245, 218, 236, 18, 2, 110, 144, 218, 236, 18, 2,
-    110, 209, 182, 218, 236, 18, 2, 110, 159, 218, 236, 18, 2, 110, 222, 38,
-    218, 236, 18, 2, 69, 218, 236, 18, 2, 251, 200, 218, 236, 18, 2, 72, 218,
-    236, 18, 2, 250, 150, 218, 236, 2, 251, 51, 218, 236, 2, 199, 2, 218,
-    236, 2, 199, 7, 218, 236, 2, 250, 248, 218, 236, 240, 88, 218, 236, 52,
-    240, 88, 218, 236, 252, 30, 55, 218, 236, 2, 231, 45, 218, 236, 17, 195,
-    79, 218, 236, 17, 100, 218, 236, 17, 102, 218, 236, 17, 134, 218, 236,
-    17, 136, 218, 236, 17, 146, 218, 236, 17, 167, 218, 236, 17, 178, 218,
-    236, 17, 171, 218, 236, 17, 182, 96, 248, 155, 3, 214, 59, 96, 209, 194,
-    248, 154, 96, 52, 248, 155, 3, 214, 59, 96, 201, 165, 248, 155, 3, 214,
-    59, 96, 248, 155, 3, 52, 214, 59, 96, 209, 194, 248, 155, 3, 214, 59, 96,
-    209, 194, 248, 155, 3, 52, 214, 59, 96, 226, 17, 248, 154, 96, 226, 17,
-    248, 155, 3, 52, 214, 59, 96, 204, 51, 248, 154, 96, 204, 51, 248, 155,
-    3, 214, 59, 96, 204, 51, 248, 155, 3, 52, 214, 59, 96, 163, 204, 51, 248,
-    155, 3, 52, 214, 59, 203, 125, 1, 63, 203, 125, 1, 252, 168, 203, 125, 1,
-    68, 203, 125, 1, 226, 120, 203, 125, 1, 66, 203, 125, 1, 199, 245, 203,
-    125, 1, 69, 203, 125, 1, 251, 200, 203, 125, 1, 72, 203, 125, 1, 250,
-    150, 203, 125, 1, 155, 203, 125, 1, 224, 146, 203, 125, 1, 234, 123, 203,
-    125, 1, 233, 230, 203, 125, 1, 217, 71, 203, 125, 1, 247, 174, 203, 125,
-    1, 247, 16, 203, 125, 1, 225, 214, 203, 125, 1, 225, 180, 203, 125, 1,
-    215, 109, 203, 125, 1, 201, 78, 203, 125, 1, 201, 66, 203, 125, 1, 240,
-    41, 203, 125, 1, 240, 25, 203, 125, 1, 216, 86, 203, 125, 1, 189, 203,
-    125, 1, 202, 233, 203, 125, 1, 240, 136, 203, 125, 1, 239, 176, 203, 125,
-    1, 176, 203, 125, 1, 161, 203, 125, 1, 213, 6, 203, 125, 1, 249, 145,
-    203, 125, 1, 248, 197, 203, 125, 1, 166, 203, 125, 1, 164, 203, 125, 1,
-    169, 203, 125, 1, 172, 203, 125, 1, 199, 152, 203, 125, 1, 207, 50, 203,
-    125, 1, 183, 203, 125, 1, 142, 203, 125, 1, 209, 181, 203, 125, 2, 251,
-    51, 203, 125, 2, 199, 2, 203, 125, 18, 2, 252, 168, 203, 125, 18, 2, 68,
-    203, 125, 18, 2, 226, 120, 203, 125, 18, 2, 66, 203, 125, 18, 2, 199,
-    245, 203, 125, 18, 2, 69, 203, 125, 18, 2, 251, 200, 203, 125, 18, 2, 72,
-    203, 125, 18, 2, 250, 150, 203, 125, 2, 199, 7, 203, 125, 2, 215, 149,
-    203, 125, 1, 250, 251, 224, 146, 203, 125, 17, 195, 79, 203, 125, 17,
-    100, 203, 125, 17, 102, 203, 125, 17, 134, 203, 125, 17, 136, 203, 125,
-    17, 146, 203, 125, 17, 167, 203, 125, 17, 178, 203, 125, 17, 171, 203,
-    125, 17, 182, 251, 204, 1, 155, 251, 204, 1, 224, 146, 251, 204, 1, 217,
-    71, 251, 204, 1, 176, 251, 204, 1, 189, 251, 204, 1, 251, 131, 189, 251,
-    204, 1, 161, 251, 204, 1, 213, 6, 251, 204, 1, 249, 145, 251, 204, 1,
-    166, 251, 204, 1, 225, 214, 251, 204, 1, 247, 16, 251, 204, 1, 202, 233,
-    251, 204, 1, 169, 251, 204, 1, 172, 251, 204, 1, 183, 251, 204, 1, 215,
-    109, 251, 204, 1, 142, 251, 204, 1, 63, 251, 204, 1, 240, 136, 251, 204,
-    1, 239, 176, 251, 204, 1, 234, 123, 251, 204, 1, 251, 131, 234, 123, 251,
-    204, 1, 233, 230, 251, 204, 1, 248, 197, 251, 204, 1, 225, 180, 251, 204,
-    1, 251, 131, 249, 145, 251, 204, 108, 2, 219, 194, 172, 251, 204, 108, 2,
-    219, 194, 169, 251, 204, 108, 2, 219, 194, 222, 96, 169, 251, 204, 18, 2,
-    63, 251, 204, 18, 2, 252, 168, 251, 204, 18, 2, 68, 251, 204, 18, 2, 226,
-    120, 251, 204, 18, 2, 66, 251, 204, 18, 2, 199, 245, 251, 204, 18, 2, 69,
-    251, 204, 18, 2, 250, 127, 251, 204, 18, 2, 72, 251, 204, 18, 2, 251,
-    200, 251, 204, 18, 2, 251, 123, 251, 204, 2, 224, 78, 251, 204, 17, 195,
-    79, 251, 204, 17, 100, 251, 204, 17, 102, 251, 204, 17, 134, 251, 204,
-    17, 136, 251, 204, 17, 146, 251, 204, 17, 167, 251, 204, 17, 178, 251,
-    204, 17, 171, 251, 204, 17, 182, 251, 204, 31, 203, 23, 251, 204, 31,
-    200, 234, 251, 204, 2, 4, 208, 132, 251, 204, 2, 208, 132, 251, 204, 2,
-    209, 125, 251, 204, 16, 199, 34, 239, 16, 1, 63, 239, 16, 1, 252, 168,
-    239, 16, 1, 68, 239, 16, 1, 226, 120, 239, 16, 1, 66, 239, 16, 1, 199,
-    245, 239, 16, 1, 69, 239, 16, 1, 251, 200, 239, 16, 1, 72, 239, 16, 1,
-    250, 150, 239, 16, 1, 155, 239, 16, 1, 224, 146, 239, 16, 1, 234, 123,
-    239, 16, 1, 233, 230, 239, 16, 1, 217, 71, 239, 16, 1, 247, 174, 239, 16,
-    1, 247, 16, 239, 16, 1, 225, 214, 239, 16, 1, 225, 180, 239, 16, 1, 215,
-    109, 239, 16, 1, 201, 78, 239, 16, 1, 201, 66, 239, 16, 1, 240, 41, 239,
-    16, 1, 240, 25, 239, 16, 1, 216, 86, 239, 16, 1, 189, 239, 16, 1, 202,
-    233, 239, 16, 1, 240, 136, 239, 16, 1, 239, 176, 239, 16, 1, 176, 239,
-    16, 1, 161, 239, 16, 1, 213, 6, 239, 16, 1, 249, 145, 239, 16, 1, 248,
-    197, 239, 16, 1, 166, 239, 16, 1, 164, 239, 16, 1, 169, 239, 16, 1, 172,
-    239, 16, 1, 199, 152, 239, 16, 1, 207, 50, 239, 16, 1, 205, 80, 239, 16,
-    1, 183, 239, 16, 1, 142, 239, 16, 1, 209, 181, 239, 16, 18, 2, 252, 168,
-    239, 16, 18, 2, 68, 239, 16, 18, 2, 226, 120, 239, 16, 18, 2, 66, 239,
-    16, 18, 2, 199, 245, 239, 16, 18, 2, 110, 144, 239, 16, 18, 2, 110, 209,
-    182, 239, 16, 18, 2, 69, 239, 16, 18, 2, 251, 200, 239, 16, 18, 2, 72,
-    239, 16, 18, 2, 250, 150, 239, 16, 2, 251, 51, 239, 16, 2, 199, 2, 239,
-    16, 2, 199, 7, 239, 16, 2, 215, 149, 239, 16, 252, 30, 55, 197, 139, 244,
-    236, 6, 1, 217, 70, 197, 139, 244, 236, 6, 1, 63, 197, 139, 244, 236, 6,
-    1, 197, 70, 197, 139, 244, 236, 6, 1, 195, 217, 197, 139, 244, 236, 6, 1,
-    164, 197, 139, 244, 236, 6, 1, 196, 3, 197, 139, 244, 236, 6, 1, 226,
-    120, 197, 139, 244, 236, 6, 1, 199, 245, 197, 139, 244, 236, 6, 1, 69,
-    197, 139, 244, 236, 6, 1, 72, 197, 139, 244, 236, 6, 1, 251, 97, 197,
-    139, 244, 236, 6, 1, 234, 123, 197, 139, 244, 236, 6, 1, 224, 11, 197,
-    139, 244, 236, 6, 1, 236, 193, 197, 139, 244, 236, 6, 1, 195, 196, 197,
-    139, 244, 236, 6, 1, 200, 106, 197, 139, 244, 236, 6, 1, 236, 212, 197,
-    139, 244, 236, 6, 1, 214, 167, 197, 139, 244, 236, 6, 1, 201, 73, 197,
-    139, 244, 236, 6, 1, 215, 135, 197, 139, 244, 236, 6, 1, 240, 136, 197,
-    139, 244, 236, 6, 1, 250, 168, 197, 139, 244, 236, 6, 1, 251, 123, 197,
-    139, 244, 236, 6, 1, 248, 21, 197, 139, 244, 236, 6, 1, 211, 227, 197,
-    139, 244, 236, 6, 1, 232, 29, 197, 139, 244, 236, 6, 1, 231, 173, 197,
-    139, 244, 236, 6, 1, 231, 100, 197, 139, 244, 236, 6, 1, 232, 175, 197,
-    139, 244, 236, 6, 1, 205, 31, 197, 139, 244, 236, 6, 1, 206, 84, 197,
-    139, 244, 236, 6, 1, 198, 249, 197, 139, 244, 236, 4, 1, 217, 70, 197,
-    139, 244, 236, 4, 1, 63, 197, 139, 244, 236, 4, 1, 197, 70, 197, 139,
-    244, 236, 4, 1, 195, 217, 197, 139, 244, 236, 4, 1, 164, 197, 139, 244,
-    236, 4, 1, 196, 3, 197, 139, 244, 236, 4, 1, 226, 120, 197, 139, 244,
-    236, 4, 1, 199, 245, 197, 139, 244, 236, 4, 1, 69, 197, 139, 244, 236, 4,
-    1, 72, 197, 139, 244, 236, 4, 1, 251, 97, 197, 139, 244, 236, 4, 1, 234,
-    123, 197, 139, 244, 236, 4, 1, 224, 11, 197, 139, 244, 236, 4, 1, 236,
-    193, 197, 139, 244, 236, 4, 1, 195, 196, 197, 139, 244, 236, 4, 1, 200,
-    106, 197, 139, 244, 236, 4, 1, 236, 212, 197, 139, 244, 236, 4, 1, 214,
-    167, 197, 139, 244, 236, 4, 1, 201, 73, 197, 139, 244, 236, 4, 1, 215,
-    135, 197, 139, 244, 236, 4, 1, 240, 136, 197, 139, 244, 236, 4, 1, 250,
-    168, 197, 139, 244, 236, 4, 1, 251, 123, 197, 139, 244, 236, 4, 1, 248,
-    21, 197, 139, 244, 236, 4, 1, 211, 227, 197, 139, 244, 236, 4, 1, 232,
-    29, 197, 139, 244, 236, 4, 1, 231, 173, 197, 139, 244, 236, 4, 1, 231,
-    100, 197, 139, 244, 236, 4, 1, 232, 175, 197, 139, 244, 236, 4, 1, 205,
-    31, 197, 139, 244, 236, 4, 1, 206, 84, 197, 139, 244, 236, 4, 1, 198,
-    249, 197, 139, 244, 236, 17, 195, 79, 197, 139, 244, 236, 17, 100, 197,
-    139, 244, 236, 17, 102, 197, 139, 244, 236, 17, 134, 197, 139, 244, 236,
-    17, 136, 197, 139, 244, 236, 17, 146, 197, 139, 244, 236, 17, 167, 197,
-    139, 244, 236, 17, 178, 197, 139, 244, 236, 17, 171, 197, 139, 244, 236,
-    17, 182, 197, 139, 244, 236, 31, 203, 23, 197, 139, 244, 236, 31, 200,
-    234, 197, 139, 244, 236, 31, 202, 177, 197, 139, 244, 236, 31, 235, 14,
-    197, 139, 244, 236, 31, 235, 145, 197, 139, 244, 236, 31, 206, 13, 197,
-    139, 244, 236, 31, 207, 65, 197, 139, 244, 236, 31, 237, 20, 197, 139,
-    244, 236, 31, 216, 174, 197, 139, 244, 236, 214, 127, 217, 218, 1, 63,
-    217, 218, 1, 252, 168, 217, 218, 1, 68, 217, 218, 1, 226, 120, 217, 218,
-    1, 66, 217, 218, 1, 199, 245, 217, 218, 1, 110, 144, 217, 218, 1, 110,
-    209, 182, 217, 218, 1, 69, 217, 218, 1, 251, 200, 217, 218, 1, 72, 217,
-    218, 1, 250, 150, 217, 218, 1, 155, 217, 218, 1, 224, 146, 217, 218, 1,
-    234, 123, 217, 218, 1, 233, 230, 217, 218, 1, 217, 71, 217, 218, 1, 247,
-    174, 217, 218, 1, 247, 16, 217, 218, 1, 225, 214, 217, 218, 1, 225, 180,
-    217, 218, 1, 215, 109, 217, 218, 1, 201, 78, 217, 218, 1, 201, 66, 217,
-    218, 1, 240, 41, 217, 218, 1, 240, 25, 217, 218, 1, 216, 86, 217, 218, 1,
-    189, 217, 218, 1, 202, 233, 217, 218, 1, 240, 136, 217, 218, 1, 239, 176,
-    217, 218, 1, 176, 217, 218, 1, 161, 217, 218, 1, 213, 6, 217, 218, 1,
-    249, 145, 217, 218, 1, 248, 197, 217, 218, 1, 166, 217, 218, 1, 164, 217,
-    218, 1, 169, 217, 218, 1, 172, 217, 218, 1, 199, 152, 217, 218, 1, 207,
-    50, 217, 218, 1, 205, 80, 217, 218, 1, 183, 217, 218, 1, 142, 217, 218,
-    1, 222, 37, 217, 218, 1, 209, 181, 217, 218, 18, 2, 252, 168, 217, 218,
-    18, 2, 68, 217, 218, 18, 2, 226, 120, 217, 218, 18, 2, 66, 217, 218, 18,
-    2, 199, 245, 217, 218, 18, 2, 110, 144, 217, 218, 18, 2, 110, 209, 182,
-    217, 218, 18, 2, 69, 217, 218, 18, 2, 251, 200, 217, 218, 18, 2, 72, 217,
-    218, 18, 2, 250, 150, 217, 218, 2, 251, 51, 217, 218, 2, 199, 2, 217,
-    218, 2, 199, 7, 217, 218, 2, 250, 132, 217, 218, 2, 206, 100, 217, 218,
-    232, 130, 217, 218, 18, 2, 212, 11, 69, 195, 102, 47, 1, 63, 195, 102,
-    47, 18, 2, 68, 195, 102, 47, 18, 2, 200, 99, 195, 102, 47, 18, 2, 66,
-    195, 102, 47, 18, 2, 69, 195, 102, 47, 18, 2, 214, 164, 195, 102, 47, 18,
-    2, 72, 195, 102, 47, 18, 2, 251, 200, 195, 102, 47, 18, 2, 250, 150, 195,
-    102, 47, 18, 2, 210, 89, 68, 195, 102, 47, 18, 222, 158, 78, 195, 102,
-    47, 1, 155, 195, 102, 47, 1, 224, 146, 195, 102, 47, 1, 234, 123, 195,
-    102, 47, 1, 233, 230, 195, 102, 47, 1, 217, 71, 195, 102, 47, 1, 247,
-    174, 195, 102, 47, 1, 247, 16, 195, 102, 47, 1, 225, 214, 195, 102, 47,
-    1, 215, 109, 195, 102, 47, 1, 201, 78, 195, 102, 47, 1, 201, 66, 195,
-    102, 47, 1, 240, 41, 195, 102, 47, 1, 240, 25, 195, 102, 47, 1, 216, 86,
-    195, 102, 47, 1, 189, 195, 102, 47, 1, 202, 233, 195, 102, 47, 1, 240,
-    136, 195, 102, 47, 1, 239, 176, 195, 102, 47, 1, 176, 195, 102, 47, 1,
-    161, 195, 102, 47, 1, 213, 6, 195, 102, 47, 1, 249, 145, 195, 102, 47, 1,
-    248, 197, 195, 102, 47, 1, 166, 195, 102, 47, 1, 201, 113, 195, 102, 47,
-    1, 201, 103, 195, 102, 47, 1, 237, 156, 195, 102, 47, 1, 237, 150, 195,
-    102, 47, 1, 195, 74, 195, 102, 47, 1, 195, 115, 195, 102, 47, 1, 255,
-    176, 195, 102, 47, 1, 164, 195, 102, 47, 1, 169, 195, 102, 47, 1, 172,
-    195, 102, 47, 1, 199, 152, 195, 102, 47, 1, 207, 50, 195, 102, 47, 1,
-    205, 80, 195, 102, 47, 1, 183, 195, 102, 47, 1, 142, 195, 102, 47, 1,
-    223, 201, 195, 102, 47, 48, 108, 78, 195, 102, 47, 2, 199, 7, 195, 102,
-    47, 2, 247, 133, 195, 102, 47, 2, 247, 134, 3, 214, 59, 195, 102, 47, 2,
-    247, 136, 3, 214, 59, 195, 102, 47, 2, 251, 51, 195, 102, 47, 2, 199, 2,
-    195, 102, 47, 244, 185, 1, 169, 195, 102, 47, 244, 186, 1, 164, 195, 102,
-    47, 244, 186, 1, 169, 195, 102, 47, 244, 186, 1, 172, 195, 102, 47, 244,
-    186, 1, 199, 152, 195, 102, 47, 84, 232, 138, 78, 195, 102, 47, 244, 199,
-    232, 138, 78, 195, 102, 47, 117, 201, 98, 195, 102, 47, 117, 207, 42,
-    195, 102, 47, 117, 52, 207, 42, 195, 102, 47, 117, 181, 201, 98, 195,
-    102, 47, 84, 237, 242, 232, 138, 78, 195, 102, 47, 244, 199, 237, 242,
-    232, 138, 78, 195, 102, 47, 204, 151, 205, 152, 1, 63, 205, 152, 18, 2,
-    68, 205, 152, 18, 2, 200, 99, 205, 152, 18, 2, 66, 205, 152, 18, 2, 69,
-    205, 152, 18, 2, 72, 205, 152, 18, 2, 214, 164, 205, 152, 18, 2, 251,
-    200, 205, 152, 18, 2, 250, 150, 205, 152, 18, 2, 110, 144, 205, 152, 18,
-    2, 110, 159, 205, 152, 18, 222, 158, 78, 205, 152, 1, 155, 205, 152, 1,
-    224, 146, 205, 152, 1, 234, 123, 205, 152, 1, 233, 230, 205, 152, 1, 217,
-    71, 205, 152, 1, 247, 174, 205, 152, 1, 247, 16, 205, 152, 1, 225, 214,
-    205, 152, 1, 225, 180, 205, 152, 1, 215, 109, 205, 152, 1, 201, 78, 205,
-    152, 1, 201, 66, 205, 152, 1, 240, 41, 205, 152, 1, 240, 25, 205, 152, 1,
-    216, 86, 205, 152, 1, 189, 205, 152, 1, 202, 233, 205, 152, 1, 240, 136,
-    205, 152, 1, 239, 176, 205, 152, 1, 176, 205, 152, 1, 161, 205, 152, 1,
-    213, 6, 205, 152, 1, 249, 145, 205, 152, 1, 248, 197, 205, 152, 1, 166,
-    205, 152, 1, 201, 113, 205, 152, 1, 201, 103, 205, 152, 1, 237, 156, 205,
-    152, 1, 195, 74, 205, 152, 1, 195, 115, 205, 152, 1, 255, 176, 205, 152,
-    1, 164, 205, 152, 1, 169, 205, 152, 1, 172, 205, 152, 1, 199, 152, 205,
-    152, 1, 207, 50, 205, 152, 1, 205, 80, 205, 152, 1, 183, 205, 152, 1,
-    142, 205, 152, 1, 223, 201, 205, 152, 2, 225, 165, 205, 152, 2, 200, 34,
-    205, 152, 244, 185, 1, 169, 205, 152, 244, 185, 1, 172, 205, 152, 244,
-    185, 1, 207, 50, 205, 152, 244, 185, 1, 183, 205, 152, 48, 108, 2, 234,
-    190, 205, 152, 48, 108, 2, 225, 80, 205, 152, 48, 108, 2, 217, 73, 205,
-    152, 48, 108, 2, 240, 231, 205, 152, 48, 108, 2, 218, 55, 205, 152, 48,
-    108, 2, 250, 112, 205, 152, 48, 108, 2, 221, 136, 205, 152, 48, 108, 2,
-    144, 205, 152, 48, 108, 2, 159, 205, 152, 48, 108, 2, 207, 52, 205, 152,
-    48, 108, 2, 209, 80, 205, 152, 48, 108, 2, 255, 176, 205, 152, 2, 251,
-    51, 205, 152, 2, 199, 2, 205, 152, 234, 36, 78, 205, 152, 204, 151, 205,
-    152, 117, 201, 98, 205, 152, 117, 207, 42, 205, 152, 117, 52, 207, 42,
-    205, 152, 117, 212, 123, 205, 152, 232, 138, 117, 3, 218, 190, 26, 204,
-    112, 26, 201, 165, 235, 86, 205, 152, 232, 138, 117, 3, 218, 190, 26,
-    204, 112, 26, 235, 86, 205, 152, 232, 138, 117, 3, 218, 190, 26, 204,
-    111, 205, 152, 203, 9, 220, 28, 205, 152, 203, 9, 220, 27, 213, 109, 244,
-    254, 232, 159, 1, 161, 213, 109, 244, 254, 232, 159, 1, 155, 213, 109,
-    244, 254, 232, 159, 1, 172, 213, 109, 244, 254, 232, 159, 1, 166, 213,
-    109, 244, 254, 232, 159, 1, 240, 136, 213, 109, 244, 254, 232, 159, 1,
-    195, 115, 213, 109, 244, 254, 232, 159, 1, 199, 152, 213, 109, 244, 254,
-    232, 159, 1, 217, 71, 213, 109, 244, 254, 232, 159, 1, 142, 213, 109,
-    244, 254, 232, 159, 1, 234, 123, 213, 109, 244, 254, 232, 159, 1, 224,
-    146, 213, 109, 244, 254, 232, 159, 1, 183, 213, 109, 244, 254, 232, 159,
-    1, 249, 145, 213, 109, 244, 254, 232, 159, 1, 247, 174, 213, 109, 244,
-    254, 232, 159, 1, 189, 213, 109, 244, 254, 232, 159, 1, 202, 233, 213,
-    109, 244, 254, 232, 159, 1, 176, 213, 109, 244, 254, 232, 159, 1, 213, 6,
-    213, 109, 244, 254, 232, 159, 1, 169, 213, 109, 244, 254, 232, 159, 1,
-    235, 239, 213, 109, 244, 254, 232, 159, 1, 247, 16, 213, 109, 244, 254,
-    232, 159, 1, 63, 213, 109, 244, 254, 232, 159, 1, 69, 213, 109, 244, 254,
-    232, 159, 1, 68, 213, 109, 244, 254, 232, 159, 1, 72, 213, 109, 244, 254,
-    232, 159, 1, 66, 213, 109, 244, 254, 232, 159, 1, 200, 114, 213, 109,
-    244, 254, 232, 159, 1, 230, 210, 213, 109, 244, 254, 232, 159, 1, 48,
-    214, 3, 213, 109, 244, 254, 232, 159, 1, 48, 225, 80, 213, 109, 244, 254,
-    232, 159, 1, 48, 203, 216, 213, 109, 244, 254, 232, 159, 1, 48, 221, 136,
-    213, 109, 244, 254, 232, 159, 1, 48, 218, 55, 213, 109, 244, 254, 232,
-    159, 1, 48, 159, 213, 109, 244, 254, 232, 159, 1, 48, 197, 199, 213, 109,
-    244, 254, 232, 159, 1, 48, 217, 73, 213, 109, 244, 254, 232, 159, 1, 48,
-    196, 148, 213, 109, 244, 254, 232, 159, 209, 250, 152, 221, 240, 213,
-    109, 244, 254, 232, 159, 209, 250, 202, 11, 213, 109, 244, 254, 232, 159,
-    208, 215, 233, 152, 204, 226, 213, 109, 244, 254, 232, 159, 209, 250,
-    152, 181, 235, 130, 213, 109, 244, 254, 232, 159, 209, 250, 152, 235,
-    130, 213, 109, 244, 254, 232, 159, 208, 215, 233, 152, 204, 227, 235,
-    130, 213, 109, 244, 254, 232, 159, 208, 215, 152, 221, 240, 213, 109,
-    244, 254, 232, 159, 208, 215, 202, 11, 213, 109, 244, 254, 232, 159, 208,
-    215, 152, 181, 235, 130, 213, 109, 244, 254, 232, 159, 208, 215, 152,
-    235, 130, 213, 109, 244, 254, 232, 159, 219, 64, 202, 11, 213, 109, 244,
-    254, 232, 159, 233, 152, 204, 227, 199, 131, 213, 109, 244, 254, 232,
-    159, 219, 64, 152, 181, 235, 130, 213, 109, 244, 254, 232, 159, 219, 64,
-    152, 235, 130, 213, 109, 244, 254, 232, 159, 221, 206, 152, 221, 240,
-    213, 109, 244, 254, 232, 159, 221, 206, 202, 11, 213, 109, 244, 254, 232,
-    159, 233, 152, 204, 226, 213, 109, 244, 254, 232, 159, 221, 206, 152,
-    181, 235, 130, 213, 109, 244, 254, 232, 159, 221, 206, 152, 235, 130,
-    213, 109, 244, 254, 232, 159, 233, 152, 204, 227, 235, 130, 248, 195, 1,
-    63, 248, 195, 1, 252, 168, 248, 195, 1, 68, 248, 195, 1, 226, 120, 248,
-    195, 1, 66, 248, 195, 1, 199, 245, 248, 195, 1, 110, 144, 248, 195, 1,
-    110, 209, 182, 248, 195, 1, 110, 159, 248, 195, 1, 69, 248, 195, 1, 251,
-    200, 248, 195, 1, 72, 248, 195, 1, 250, 150, 248, 195, 1, 155, 248, 195,
-    1, 224, 146, 248, 195, 1, 234, 123, 248, 195, 1, 233, 230, 248, 195, 1,
-    217, 71, 248, 195, 1, 247, 174, 248, 195, 1, 247, 16, 248, 195, 1, 225,
-    214, 248, 195, 1, 225, 180, 248, 195, 1, 215, 109, 248, 195, 1, 201, 78,
-    248, 195, 1, 201, 66, 248, 195, 1, 240, 41, 248, 195, 1, 240, 25, 248,
-    195, 1, 216, 86, 248, 195, 1, 189, 248, 195, 1, 202, 233, 248, 195, 1,
-    240, 136, 248, 195, 1, 239, 176, 248, 195, 1, 176, 248, 195, 1, 161, 248,
-    195, 1, 213, 6, 248, 195, 1, 249, 145, 248, 195, 1, 248, 197, 248, 195,
-    1, 166, 248, 195, 1, 164, 248, 195, 1, 169, 248, 195, 1, 172, 248, 195,
-    1, 199, 152, 248, 195, 1, 207, 50, 248, 195, 1, 205, 80, 248, 195, 1,
-    183, 248, 195, 1, 142, 248, 195, 18, 2, 252, 168, 248, 195, 18, 2, 68,
-    248, 195, 18, 2, 226, 120, 248, 195, 18, 2, 66, 248, 195, 18, 2, 199,
-    245, 248, 195, 18, 2, 110, 144, 248, 195, 18, 2, 110, 209, 182, 248, 195,
-    18, 2, 110, 159, 248, 195, 18, 2, 69, 248, 195, 18, 2, 251, 200, 248,
-    195, 18, 2, 72, 248, 195, 18, 2, 250, 150, 248, 195, 2, 247, 133, 248,
-    195, 2, 251, 51, 248, 195, 2, 199, 2, 248, 195, 2, 199, 7, 248, 195, 2,
-    250, 132, 248, 195, 240, 88, 248, 195, 52, 240, 88, 248, 195, 197, 9,
-    207, 90, 248, 195, 234, 87, 235, 133, 248, 195, 234, 87, 235, 132, 248,
-    195, 17, 195, 79, 248, 195, 17, 100, 248, 195, 17, 102, 248, 195, 17,
-    134, 248, 195, 17, 136, 248, 195, 17, 146, 248, 195, 17, 167, 248, 195,
-    17, 178, 248, 195, 17, 171, 248, 195, 17, 182, 248, 195, 31, 100, 248,
-    195, 31, 102, 248, 195, 31, 134, 248, 195, 31, 136, 248, 195, 31, 146,
-    248, 195, 31, 167, 248, 195, 31, 178, 248, 195, 31, 171, 248, 195, 31,
-    182, 248, 195, 31, 203, 23, 248, 195, 31, 200, 234, 248, 195, 31, 202,
-    177, 248, 195, 31, 235, 14, 248, 195, 31, 235, 145, 248, 195, 31, 206,
-    13, 248, 195, 31, 207, 65, 248, 195, 31, 237, 20, 248, 195, 31, 216, 174,
-    248, 195, 231, 56, 200, 50, 78, 220, 30, 232, 138, 78, 220, 30, 117, 207,
-    42, 220, 30, 1, 155, 220, 30, 1, 224, 146, 220, 30, 1, 234, 123, 220, 30,
-    1, 217, 71, 220, 30, 1, 247, 174, 220, 30, 1, 247, 16, 220, 30, 1, 225,
-    214, 220, 30, 1, 215, 109, 220, 30, 1, 189, 220, 30, 1, 202, 233, 220,
-    30, 1, 240, 136, 220, 30, 1, 176, 220, 30, 1, 161, 220, 30, 1, 213, 6,
-    220, 30, 1, 249, 145, 220, 30, 1, 166, 220, 30, 1, 201, 113, 220, 30, 1,
-    201, 103, 220, 30, 1, 237, 156, 220, 30, 1, 197, 166, 220, 30, 1, 195,
-    74, 220, 30, 1, 195, 115, 220, 30, 1, 255, 176, 220, 30, 1, 164, 220, 30,
-    1, 169, 220, 30, 1, 172, 220, 30, 1, 207, 50, 220, 30, 1, 183, 220, 30,
-    1, 142, 220, 30, 1, 63, 220, 30, 204, 152, 1, 155, 220, 30, 204, 152, 1,
-    224, 146, 220, 30, 204, 152, 1, 234, 123, 220, 30, 204, 152, 1, 217, 71,
-    220, 30, 204, 152, 1, 247, 174, 220, 30, 204, 152, 1, 247, 16, 220, 30,
-    204, 152, 1, 225, 214, 220, 30, 204, 152, 1, 215, 109, 220, 30, 204, 152,
-    1, 189, 220, 30, 204, 152, 1, 202, 233, 220, 30, 204, 152, 1, 240, 136,
-    220, 30, 204, 152, 1, 176, 220, 30, 204, 152, 1, 161, 220, 30, 204, 152,
-    1, 213, 6, 220, 30, 204, 152, 1, 249, 145, 220, 30, 204, 152, 1, 166,
-    220, 30, 204, 152, 1, 201, 113, 220, 30, 204, 152, 1, 201, 103, 220, 30,
-    204, 152, 1, 237, 156, 220, 30, 204, 152, 1, 197, 166, 220, 30, 204, 152,
-    1, 195, 74, 220, 30, 204, 152, 1, 195, 115, 220, 30, 204, 152, 1, 164,
-    220, 30, 204, 152, 1, 169, 220, 30, 204, 152, 1, 172, 220, 30, 204, 152,
-    1, 207, 50, 220, 30, 204, 152, 1, 183, 220, 30, 204, 152, 1, 142, 220,
-    30, 204, 152, 1, 63, 220, 30, 18, 2, 252, 168, 220, 30, 18, 2, 68, 220,
-    30, 18, 2, 66, 220, 30, 18, 2, 69, 220, 30, 18, 2, 72, 220, 30, 2, 251,
-    51, 220, 30, 2, 247, 133, 220, 14, 121, 1, 63, 220, 14, 121, 1, 252, 168,
-    220, 14, 121, 1, 68, 220, 14, 121, 1, 226, 120, 220, 14, 121, 1, 66, 220,
-    14, 121, 1, 199, 245, 220, 14, 121, 1, 69, 220, 14, 121, 1, 251, 200,
-    220, 14, 121, 1, 72, 220, 14, 121, 1, 250, 150, 220, 14, 121, 1, 155,
-    220, 14, 121, 1, 224, 146, 220, 14, 121, 1, 234, 123, 220, 14, 121, 1,
-    233, 230, 220, 14, 121, 1, 217, 71, 220, 14, 121, 1, 247, 174, 220, 14,
-    121, 1, 247, 16, 220, 14, 121, 1, 225, 214, 220, 14, 121, 1, 225, 180,
-    220, 14, 121, 1, 215, 109, 220, 14, 121, 1, 201, 78, 220, 14, 121, 1,
-    201, 66, 220, 14, 121, 1, 240, 41, 220, 14, 121, 1, 240, 25, 220, 14,
-    121, 1, 216, 86, 220, 14, 121, 1, 189, 220, 14, 121, 1, 202, 233, 220,
-    14, 121, 1, 240, 136, 220, 14, 121, 1, 239, 176, 220, 14, 121, 1, 176,
-    220, 14, 121, 1, 161, 220, 14, 121, 1, 213, 6, 220, 14, 121, 1, 249, 145,
-    220, 14, 121, 1, 248, 197, 220, 14, 121, 1, 166, 220, 14, 121, 1, 164,
-    220, 14, 121, 1, 169, 220, 14, 121, 1, 172, 220, 14, 121, 1, 199, 152,
-    220, 14, 121, 1, 207, 50, 220, 14, 121, 1, 205, 80, 220, 14, 121, 1, 183,
-    220, 14, 121, 1, 142, 220, 14, 121, 1, 222, 37, 220, 14, 121, 1, 223,
-    201, 220, 14, 121, 1, 225, 130, 220, 14, 121, 1, 201, 217, 220, 14, 121,
-    18, 2, 252, 168, 220, 14, 121, 18, 2, 68, 220, 14, 121, 18, 2, 226, 120,
-    220, 14, 121, 18, 2, 66, 220, 14, 121, 18, 2, 199, 245, 220, 14, 121, 18,
-    2, 110, 144, 220, 14, 121, 18, 2, 69, 220, 14, 121, 18, 2, 251, 200, 220,
-    14, 121, 18, 2, 72, 220, 14, 121, 18, 2, 250, 150, 220, 14, 121, 2, 251,
-    51, 220, 14, 121, 2, 199, 2, 220, 14, 121, 2, 215, 149, 220, 14, 121, 2,
-    247, 135, 220, 14, 121, 2, 232, 227, 220, 14, 121, 199, 7, 220, 14, 121,
-    210, 115, 220, 14, 121, 210, 247, 220, 14, 121, 17, 195, 79, 220, 14,
-    121, 17, 100, 220, 14, 121, 17, 102, 220, 14, 121, 17, 134, 220, 14, 121,
-    17, 136, 220, 14, 121, 17, 146, 220, 14, 121, 17, 167, 220, 14, 121, 17,
-    178, 220, 14, 121, 17, 171, 220, 14, 121, 17, 182, 233, 54, 121, 1, 63,
-    233, 54, 121, 1, 252, 168, 233, 54, 121, 1, 68, 233, 54, 121, 1, 226,
-    120, 233, 54, 121, 1, 66, 233, 54, 121, 1, 199, 245, 233, 54, 121, 1,
-    237, 54, 233, 54, 121, 1, 251, 200, 233, 54, 121, 1, 214, 102, 233, 54,
-    121, 1, 250, 150, 233, 54, 121, 1, 164, 233, 54, 121, 1, 199, 152, 233,
-    54, 121, 1, 249, 145, 233, 54, 121, 1, 248, 197, 233, 54, 121, 1, 166,
-    233, 54, 121, 1, 155, 233, 54, 121, 1, 224, 146, 233, 54, 121, 1, 189,
-    233, 54, 121, 1, 202, 233, 233, 54, 121, 1, 172, 233, 54, 121, 1, 234,
-    123, 233, 54, 121, 1, 233, 230, 233, 54, 121, 1, 240, 136, 233, 54, 121,
-    1, 239, 176, 233, 54, 121, 1, 176, 233, 54, 121, 1, 247, 174, 233, 54,
-    121, 1, 247, 16, 233, 54, 121, 1, 201, 78, 233, 54, 121, 1, 201, 66, 233,
-    54, 121, 1, 222, 37, 233, 54, 121, 1, 225, 214, 233, 54, 121, 1, 225,
-    180, 233, 54, 121, 1, 240, 41, 233, 54, 121, 1, 240, 25, 233, 54, 121, 1,
-    217, 71, 233, 54, 121, 1, 161, 233, 54, 121, 1, 213, 6, 233, 54, 121, 1,
-    142, 233, 54, 121, 1, 169, 233, 54, 121, 1, 183, 233, 54, 121, 18, 2,
-    252, 168, 233, 54, 121, 18, 2, 68, 233, 54, 121, 18, 2, 226, 120, 233,
-    54, 121, 18, 2, 66, 233, 54, 121, 18, 2, 199, 245, 233, 54, 121, 18, 2,
-    237, 54, 233, 54, 121, 18, 2, 251, 200, 233, 54, 121, 18, 2, 214, 102,
-    233, 54, 121, 18, 2, 250, 150, 233, 54, 121, 2, 251, 51, 233, 54, 121, 2,
-    199, 2, 233, 54, 121, 199, 7, 233, 54, 121, 214, 127, 233, 54, 121, 17,
-    195, 79, 233, 54, 121, 17, 100, 233, 54, 121, 17, 102, 233, 54, 121, 17,
-    134, 233, 54, 121, 17, 136, 233, 54, 121, 17, 146, 233, 54, 121, 17, 167,
-    233, 54, 121, 17, 178, 233, 54, 121, 17, 171, 233, 54, 121, 17, 182, 220,
-    71, 1, 155, 220, 71, 1, 234, 123, 220, 71, 1, 217, 71, 220, 71, 1, 161,
-    220, 71, 1, 249, 145, 220, 71, 1, 166, 220, 71, 1, 189, 220, 71, 1, 240,
-    136, 220, 71, 1, 176, 220, 71, 1, 247, 174, 220, 71, 1, 225, 214, 220,
-    71, 1, 215, 109, 220, 71, 1, 164, 220, 71, 1, 169, 220, 71, 1, 172, 220,
-    71, 1, 199, 152, 220, 71, 1, 183, 220, 71, 1, 63, 220, 71, 251, 93, 220,
-    71, 18, 2, 68, 220, 71, 18, 2, 66, 220, 71, 18, 2, 69, 220, 71, 18, 2,
-    72, 220, 71, 213, 121, 220, 71, 236, 222, 77, 208, 132, 42, 191, 97, 202,
-    151, 42, 191, 97, 214, 115, 42, 191, 97, 237, 23, 42, 191, 97, 206, 11,
-    42, 191, 97, 235, 17, 42, 191, 97, 202, 173, 42, 191, 115, 237, 22, 42,
-    191, 115, 206, 10, 42, 191, 97, 200, 237, 42, 191, 97, 206, 20, 42, 191,
-    97, 206, 19, 42, 191, 97, 203, 14, 42, 191, 97, 237, 26, 42, 191, 115,
-    200, 236, 42, 191, 115, 206, 18, 42, 191, 97, 235, 148, 42, 191, 97, 211,
-    87, 42, 191, 97, 232, 224, 42, 191, 97, 232, 223, 42, 191, 115, 211, 85,
-    42, 191, 237, 233, 235, 223, 224, 79, 42, 2, 217, 102, 42, 2, 247, 21,
-    42, 2, 252, 119, 42, 2, 199, 233, 42, 2, 218, 82, 42, 2, 223, 151, 42, 2,
-    213, 112, 42, 2, 218, 126, 42, 2, 225, 52, 42, 2, 213, 189, 42, 2, 212,
-    93, 42, 2, 199, 137, 42, 2, 213, 238, 42, 2, 223, 140, 42, 2, 199, 108,
-    42, 197, 85, 241, 33, 55, 42, 237, 204, 241, 33, 55, 42, 222, 237, 55,
-    42, 208, 234, 213, 192, 55, 42, 201, 212, 241, 74, 55, 42, 201, 212, 31,
-    55, 42, 241, 16, 55, 42, 26, 214, 168, 55, 42, 205, 129, 55, 42, 201,
-    228, 55, 42, 226, 87, 212, 76, 55, 42, 205, 1, 234, 235, 55, 42, 2, 218,
-    86, 42, 2, 199, 145, 42, 211, 214, 236, 222, 77, 202, 237, 10, 2, 63, 10,
-    2, 39, 24, 63, 10, 2, 39, 24, 249, 127, 10, 2, 39, 24, 234, 92, 203, 12,
-    10, 2, 39, 24, 142, 10, 2, 39, 24, 226, 122, 10, 2, 39, 24, 223, 61, 233,
-    52, 10, 2, 39, 24, 218, 93, 10, 2, 39, 24, 209, 1, 10, 2, 254, 177, 10,
-    2, 252, 117, 10, 2, 252, 118, 24, 250, 193, 10, 2, 252, 118, 24, 237,
-    187, 233, 52, 10, 2, 252, 118, 24, 234, 105, 10, 2, 252, 118, 24, 234,
-    92, 203, 12, 10, 2, 252, 118, 24, 142, 10, 2, 252, 118, 24, 226, 123,
-    233, 52, 10, 2, 252, 118, 24, 226, 96, 10, 2, 252, 118, 24, 223, 62, 10,
-    2, 252, 118, 24, 206, 239, 10, 2, 252, 118, 24, 118, 98, 118, 98, 66, 10,
-    2, 252, 118, 233, 52, 10, 2, 252, 34, 10, 2, 252, 35, 24, 249, 106, 10,
-    2, 252, 35, 24, 234, 92, 203, 12, 10, 2, 252, 35, 24, 219, 208, 98, 236,
-    230, 10, 2, 252, 35, 24, 207, 48, 10, 2, 252, 35, 24, 203, 129, 10, 2,
-    252, 6, 10, 2, 251, 181, 10, 2, 251, 182, 24, 236, 157, 10, 2, 251, 182,
-    24, 206, 201, 98, 233, 164, 10, 2, 251, 173, 10, 2, 251, 174, 24, 251,
-    173, 10, 2, 251, 174, 24, 239, 105, 10, 2, 251, 174, 24, 233, 164, 10, 2,
-    251, 174, 24, 142, 10, 2, 251, 174, 24, 225, 40, 10, 2, 251, 174, 24,
-    224, 101, 10, 2, 251, 174, 24, 206, 255, 10, 2, 251, 174, 24, 199, 253,
-    10, 2, 251, 170, 10, 2, 251, 162, 10, 2, 251, 119, 10, 2, 251, 120, 24,
-    206, 255, 10, 2, 251, 106, 10, 2, 251, 107, 127, 251, 106, 10, 2, 251,
-    107, 115, 202, 76, 10, 2, 251, 107, 98, 217, 235, 214, 79, 251, 107, 98,
-    217, 234, 10, 2, 251, 107, 98, 217, 235, 205, 93, 10, 2, 251, 71, 10, 2,
-    251, 41, 10, 2, 251, 7, 10, 2, 251, 8, 24, 223, 154, 10, 2, 250, 235, 10,
-    2, 250, 200, 10, 2, 250, 195, 10, 2, 250, 196, 195, 29, 203, 12, 10, 2,
-    250, 196, 225, 44, 203, 12, 10, 2, 250, 196, 127, 250, 196, 201, 29, 127,
-    201, 29, 201, 29, 127, 201, 29, 213, 163, 10, 2, 250, 196, 127, 250, 196,
-    127, 250, 195, 10, 2, 250, 196, 127, 250, 196, 127, 250, 196, 241, 55,
-    250, 196, 127, 250, 196, 127, 250, 195, 10, 2, 250, 193, 10, 2, 250, 189,
-    10, 2, 249, 145, 10, 2, 249, 127, 10, 2, 249, 121, 10, 2, 249, 113, 10,
-    2, 249, 107, 10, 2, 249, 108, 127, 249, 107, 10, 2, 249, 106, 10, 2, 154,
-    10, 2, 249, 79, 10, 2, 248, 184, 10, 2, 248, 185, 24, 63, 10, 2, 248,
-    185, 24, 234, 83, 10, 2, 248, 185, 24, 226, 123, 233, 52, 10, 2, 248, 21,
-    10, 2, 248, 22, 127, 248, 22, 252, 117, 10, 2, 248, 22, 127, 248, 22,
-    200, 72, 10, 2, 248, 22, 241, 55, 248, 21, 10, 2, 247, 255, 10, 2, 248,
-    0, 127, 247, 255, 10, 2, 247, 244, 10, 2, 247, 243, 10, 2, 240, 136, 10,
-    2, 240, 126, 10, 2, 240, 127, 224, 60, 24, 39, 98, 220, 12, 10, 2, 240,
-    127, 224, 60, 24, 251, 119, 10, 2, 240, 127, 224, 60, 24, 249, 106, 10,
-    2, 240, 127, 224, 60, 24, 248, 184, 10, 2, 240, 127, 224, 60, 24, 234,
-    123, 10, 2, 240, 127, 224, 60, 24, 234, 124, 98, 220, 12, 10, 2, 240,
-    127, 224, 60, 24, 233, 192, 10, 2, 240, 127, 224, 60, 24, 233, 173, 10,
-    2, 240, 127, 224, 60, 24, 233, 65, 10, 2, 240, 127, 224, 60, 24, 142, 10,
-    2, 240, 127, 224, 60, 24, 226, 1, 10, 2, 240, 127, 224, 60, 24, 226, 2,
-    98, 221, 191, 10, 2, 240, 127, 224, 60, 24, 225, 25, 10, 2, 240, 127,
-    224, 60, 24, 172, 10, 2, 240, 127, 224, 60, 24, 221, 191, 10, 2, 240,
-    127, 224, 60, 24, 221, 192, 98, 220, 11, 10, 2, 240, 127, 224, 60, 24,
-    221, 174, 10, 2, 240, 127, 224, 60, 24, 217, 118, 10, 2, 240, 127, 224,
-    60, 24, 213, 164, 98, 213, 163, 10, 2, 240, 127, 224, 60, 24, 206, 112,
-    10, 2, 240, 127, 224, 60, 24, 203, 129, 10, 2, 240, 127, 224, 60, 24,
-    200, 116, 98, 233, 173, 10, 2, 240, 127, 224, 60, 24, 199, 253, 10, 2,
-    240, 98, 10, 2, 240, 75, 10, 2, 240, 74, 10, 2, 240, 73, 10, 2, 239, 152,
-    10, 2, 239, 134, 10, 2, 239, 107, 10, 2, 239, 108, 24, 206, 255, 10, 2,
-    239, 105, 10, 2, 239, 95, 10, 2, 239, 96, 224, 241, 118, 233, 53, 239,
-    75, 10, 2, 239, 75, 10, 2, 237, 201, 10, 2, 237, 202, 127, 237, 201, 10,
-    2, 237, 202, 233, 52, 10, 2, 237, 202, 206, 236, 10, 2, 237, 199, 10, 2,
-    237, 200, 24, 236, 138, 10, 2, 237, 198, 10, 2, 237, 195, 10, 2, 237,
-    194, 10, 2, 237, 193, 10, 2, 237, 188, 10, 2, 237, 186, 10, 2, 237, 187,
-    233, 52, 10, 2, 237, 187, 233, 53, 233, 52, 10, 2, 237, 185, 10, 2, 237,
-    178, 10, 2, 69, 10, 2, 237, 136, 24, 213, 163, 10, 2, 237, 136, 127, 237,
-    136, 215, 139, 127, 215, 138, 10, 2, 237, 83, 10, 2, 237, 84, 24, 39, 98,
-    233, 4, 98, 240, 136, 10, 2, 237, 84, 24, 234, 83, 10, 2, 237, 84, 24,
-    219, 78, 10, 2, 237, 84, 24, 208, 241, 10, 2, 237, 84, 24, 206, 255, 10,
-    2, 237, 84, 24, 66, 10, 2, 237, 56, 10, 2, 237, 44, 10, 2, 237, 7, 10, 2,
-    236, 230, 10, 2, 236, 231, 24, 234, 91, 10, 2, 236, 231, 24, 234, 92,
-    203, 12, 10, 2, 236, 231, 24, 219, 207, 10, 2, 236, 231, 241, 55, 236,
-    230, 10, 2, 236, 231, 214, 79, 236, 230, 10, 2, 236, 231, 205, 93, 10, 2,
-    236, 160, 10, 2, 236, 157, 10, 2, 236, 138, 10, 2, 236, 54, 10, 2, 236,
-    55, 24, 63, 10, 2, 236, 55, 24, 39, 98, 222, 251, 10, 2, 236, 55, 24, 39,
-    98, 222, 252, 24, 222, 251, 10, 2, 236, 55, 24, 251, 106, 10, 2, 236, 55,
-    24, 249, 127, 10, 2, 236, 55, 24, 237, 187, 233, 52, 10, 2, 236, 55, 24,
-    237, 187, 233, 53, 233, 52, 10, 2, 236, 55, 24, 142, 10, 2, 236, 55, 24,
-    233, 4, 233, 52, 10, 2, 236, 55, 24, 226, 123, 233, 52, 10, 2, 236, 55,
-    24, 224, 240, 10, 2, 236, 55, 24, 224, 241, 205, 93, 10, 2, 236, 55, 24,
-    223, 178, 10, 2, 236, 55, 24, 172, 10, 2, 236, 55, 24, 222, 252, 24, 222,
-    251, 10, 2, 236, 55, 24, 222, 109, 10, 2, 236, 55, 24, 221, 191, 10, 2,
-    236, 55, 24, 200, 115, 10, 2, 236, 55, 24, 200, 104, 10, 2, 234, 123, 10,
-    2, 234, 124, 233, 52, 10, 2, 234, 121, 10, 2, 234, 122, 24, 39, 98, 240,
-    137, 98, 142, 10, 2, 234, 122, 24, 39, 98, 142, 10, 2, 234, 122, 24, 39,
-    98, 226, 122, 10, 2, 234, 122, 24, 252, 35, 203, 13, 98, 203, 154, 10, 2,
-    234, 122, 24, 251, 106, 10, 2, 234, 122, 24, 250, 195, 10, 2, 234, 122,
-    24, 250, 194, 98, 234, 105, 10, 2, 234, 122, 24, 249, 127, 10, 2, 234,
-    122, 24, 249, 80, 98, 169, 10, 2, 234, 122, 24, 247, 244, 10, 2, 234,
-    122, 24, 247, 245, 98, 169, 10, 2, 234, 122, 24, 240, 136, 10, 2, 234,
-    122, 24, 239, 152, 10, 2, 234, 122, 24, 239, 108, 24, 206, 255, 10, 2,
-    234, 122, 24, 237, 199, 10, 2, 234, 122, 24, 237, 7, 10, 2, 234, 122, 24,
-    237, 8, 98, 172, 10, 2, 234, 122, 24, 236, 230, 10, 2, 234, 122, 24, 236,
-    231, 24, 234, 92, 203, 12, 10, 2, 234, 122, 24, 234, 92, 203, 12, 10, 2,
-    234, 122, 24, 234, 83, 10, 2, 234, 122, 24, 233, 192, 10, 2, 234, 122,
-    24, 233, 190, 10, 2, 234, 122, 24, 233, 191, 98, 63, 10, 2, 234, 122, 24,
-    233, 174, 98, 204, 172, 10, 2, 234, 122, 24, 233, 4, 98, 221, 192, 98,
-    236, 138, 10, 2, 234, 122, 24, 232, 228, 10, 2, 234, 122, 24, 232, 229,
-    98, 172, 10, 2, 234, 122, 24, 232, 72, 98, 222, 109, 10, 2, 234, 122, 24,
-    231, 67, 10, 2, 234, 122, 24, 226, 123, 233, 52, 10, 2, 234, 122, 24,
-    225, 243, 98, 231, 76, 98, 250, 195, 10, 2, 234, 122, 24, 225, 25, 10, 2,
-    234, 122, 24, 224, 240, 10, 2, 234, 122, 24, 224, 87, 10, 2, 234, 122,
-    24, 224, 88, 98, 222, 251, 10, 2, 234, 122, 24, 223, 179, 98, 251, 106,
-    10, 2, 234, 122, 24, 172, 10, 2, 234, 122, 24, 219, 208, 98, 236, 230,
-    10, 2, 234, 122, 24, 219, 78, 10, 2, 234, 122, 24, 215, 138, 10, 2, 234,
-    122, 24, 215, 139, 127, 215, 138, 10, 2, 234, 122, 24, 161, 10, 2, 234,
-    122, 24, 208, 241, 10, 2, 234, 122, 24, 208, 204, 10, 2, 234, 122, 24,
-    206, 255, 10, 2, 234, 122, 24, 207, 0, 98, 201, 10, 10, 2, 234, 122, 24,
-    206, 221, 10, 2, 234, 122, 24, 204, 117, 10, 2, 234, 122, 24, 203, 129,
-    10, 2, 234, 122, 24, 66, 10, 2, 234, 122, 24, 200, 104, 10, 2, 234, 122,
-    24, 200, 105, 98, 237, 201, 10, 2, 234, 122, 127, 234, 121, 10, 2, 234,
-    116, 10, 2, 234, 117, 241, 55, 234, 116, 10, 2, 234, 114, 10, 2, 234,
-    115, 127, 234, 115, 234, 84, 127, 234, 83, 10, 2, 234, 105, 10, 2, 234,
-    106, 234, 115, 127, 234, 115, 234, 84, 127, 234, 83, 10, 2, 234, 104, 10,
-    2, 234, 102, 10, 2, 234, 93, 10, 2, 234, 91, 10, 2, 234, 92, 203, 12, 10,
-    2, 234, 92, 127, 234, 91, 10, 2, 234, 92, 241, 55, 234, 91, 10, 2, 234,
-    83, 10, 2, 234, 82, 10, 2, 234, 76, 10, 2, 234, 17, 10, 2, 234, 18, 24,
-    223, 154, 10, 2, 233, 192, 10, 2, 233, 193, 24, 69, 10, 2, 233, 193, 24,
-    66, 10, 2, 233, 193, 241, 55, 233, 192, 10, 2, 233, 190, 10, 2, 233, 191,
-    127, 233, 190, 10, 2, 233, 191, 241, 55, 233, 190, 10, 2, 233, 187, 10,
-    2, 233, 173, 10, 2, 233, 174, 233, 52, 10, 2, 233, 171, 10, 2, 233, 172,
-    24, 39, 98, 226, 122, 10, 2, 233, 172, 24, 234, 92, 203, 12, 10, 2, 233,
-    172, 24, 226, 122, 10, 2, 233, 172, 24, 221, 192, 98, 226, 122, 10, 2,
-    233, 172, 24, 161, 10, 2, 233, 166, 10, 2, 233, 164, 10, 2, 233, 165,
-    241, 55, 233, 164, 10, 2, 233, 165, 24, 249, 127, 10, 2, 233, 165, 24,
-    203, 129, 10, 2, 233, 165, 203, 12, 10, 2, 233, 76, 10, 2, 233, 77, 241,
-    55, 233, 76, 10, 2, 233, 74, 10, 2, 233, 75, 24, 225, 25, 10, 2, 233, 75,
-    24, 225, 26, 24, 226, 123, 233, 52, 10, 2, 233, 75, 24, 215, 138, 10, 2,
-    233, 75, 24, 208, 242, 98, 201, 28, 10, 2, 233, 75, 233, 52, 10, 2, 233,
-    65, 10, 2, 233, 66, 24, 39, 98, 223, 154, 10, 2, 233, 66, 24, 223, 154,
-    10, 2, 233, 66, 127, 233, 66, 221, 182, 10, 2, 233, 57, 10, 2, 233, 55,
-    10, 2, 233, 56, 24, 206, 255, 10, 2, 233, 46, 10, 2, 233, 45, 10, 2, 233,
-    41, 10, 2, 233, 40, 10, 2, 142, 10, 2, 233, 4, 203, 12, 10, 2, 233, 4,
-    233, 52, 10, 2, 232, 228, 10, 2, 232, 71, 10, 2, 232, 72, 24, 250, 195,
-    10, 2, 232, 72, 24, 250, 193, 10, 2, 232, 72, 24, 249, 127, 10, 2, 232,
-    72, 24, 239, 75, 10, 2, 232, 72, 24, 234, 114, 10, 2, 232, 72, 24, 224,
-    76, 10, 2, 232, 72, 24, 215, 138, 10, 2, 232, 72, 24, 206, 255, 10, 2,
-    232, 72, 24, 66, 10, 2, 231, 75, 10, 2, 231, 67, 10, 2, 231, 68, 24, 251,
-    106, 10, 2, 231, 68, 24, 232, 228, 10, 2, 231, 68, 24, 224, 240, 10, 2,
-    231, 68, 24, 222, 53, 10, 2, 231, 68, 24, 200, 104, 10, 2, 231, 63, 10,
-    2, 68, 10, 2, 230, 249, 63, 10, 2, 230, 205, 10, 2, 226, 150, 10, 2, 226,
-    151, 127, 226, 151, 247, 244, 10, 2, 226, 151, 127, 226, 151, 205, 93,
-    10, 2, 226, 125, 10, 2, 226, 122, 10, 2, 226, 123, 239, 134, 10, 2, 226,
-    123, 210, 72, 10, 2, 226, 123, 127, 226, 123, 206, 205, 127, 206, 205,
-    200, 105, 127, 200, 104, 10, 2, 226, 123, 233, 52, 10, 2, 226, 114, 10,
-    2, 226, 115, 24, 234, 92, 203, 12, 10, 2, 226, 113, 10, 2, 226, 103, 10,
-    2, 226, 104, 24, 203, 129, 10, 2, 226, 104, 241, 55, 226, 103, 10, 2,
-    226, 104, 214, 79, 226, 103, 10, 2, 226, 104, 205, 93, 10, 2, 226, 96,
-    10, 2, 226, 86, 10, 2, 226, 1, 10, 2, 225, 242, 10, 2, 155, 10, 2, 225,
-    70, 24, 63, 10, 2, 225, 70, 24, 252, 6, 10, 2, 225, 70, 24, 252, 7, 98,
-    223, 178, 10, 2, 225, 70, 24, 250, 193, 10, 2, 225, 70, 24, 249, 127, 10,
-    2, 225, 70, 24, 249, 106, 10, 2, 225, 70, 24, 154, 10, 2, 225, 70, 24,
-    248, 184, 10, 2, 225, 70, 24, 236, 157, 10, 2, 225, 70, 24, 236, 138, 10,
-    2, 225, 70, 24, 234, 123, 10, 2, 225, 70, 24, 234, 105, 10, 2, 225, 70,
-    24, 234, 92, 203, 12, 10, 2, 225, 70, 24, 234, 83, 10, 2, 225, 70, 24,
-    234, 84, 98, 207, 49, 98, 63, 10, 2, 225, 70, 24, 233, 192, 10, 2, 225,
-    70, 24, 233, 173, 10, 2, 225, 70, 24, 233, 165, 98, 208, 204, 10, 2, 225,
-    70, 24, 233, 165, 241, 55, 233, 164, 10, 2, 225, 70, 24, 233, 76, 10, 2,
-    225, 70, 24, 233, 45, 10, 2, 225, 70, 24, 226, 122, 10, 2, 225, 70, 24,
-    226, 103, 10, 2, 225, 70, 24, 225, 25, 10, 2, 225, 70, 24, 224, 101, 10,
-    2, 225, 70, 24, 224, 87, 10, 2, 225, 70, 24, 222, 109, 10, 2, 225, 70,
-    24, 221, 191, 10, 2, 225, 70, 24, 219, 207, 10, 2, 225, 70, 24, 219, 208,
-    98, 237, 201, 10, 2, 225, 70, 24, 219, 208, 98, 233, 192, 10, 2, 225, 70,
-    24, 219, 208, 98, 203, 68, 10, 2, 225, 70, 24, 219, 78, 10, 2, 225, 70,
-    24, 219, 79, 98, 215, 133, 10, 2, 225, 70, 24, 217, 118, 10, 2, 225, 70,
-    24, 215, 138, 10, 2, 225, 70, 24, 212, 220, 10, 2, 225, 70, 24, 209, 140,
-    10, 2, 225, 70, 24, 183, 10, 2, 225, 70, 24, 208, 204, 10, 2, 225, 70,
-    24, 207, 50, 10, 2, 225, 70, 24, 206, 255, 10, 2, 225, 70, 24, 206, 221,
-    10, 2, 225, 70, 24, 206, 151, 10, 2, 225, 70, 24, 206, 91, 10, 2, 225,
-    70, 24, 204, 126, 10, 2, 225, 70, 24, 203, 101, 10, 2, 225, 70, 24, 66,
-    10, 2, 225, 70, 24, 200, 115, 10, 2, 225, 70, 24, 200, 104, 10, 2, 225,
-    70, 24, 200, 75, 24, 161, 10, 2, 225, 70, 24, 199, 253, 10, 2, 225, 70,
-    24, 195, 33, 10, 2, 225, 56, 10, 2, 225, 57, 241, 55, 225, 56, 10, 2,
-    225, 45, 10, 2, 225, 42, 10, 2, 225, 40, 10, 2, 225, 39, 10, 2, 225, 37,
-    10, 2, 225, 38, 127, 225, 37, 10, 2, 225, 25, 10, 2, 225, 26, 24, 226,
-    123, 233, 52, 10, 2, 225, 21, 10, 2, 225, 22, 24, 249, 127, 10, 2, 225,
-    22, 241, 55, 225, 21, 10, 2, 225, 19, 10, 2, 225, 18, 10, 2, 224, 240,
-    10, 2, 224, 241, 223, 63, 24, 118, 127, 223, 63, 24, 66, 10, 2, 224, 241,
-    127, 224, 241, 223, 63, 24, 118, 127, 223, 63, 24, 66, 10, 2, 224, 173,
-    10, 2, 224, 101, 10, 2, 224, 102, 24, 249, 127, 10, 2, 224, 102, 24, 66,
-    10, 2, 224, 102, 24, 200, 104, 10, 2, 224, 87, 10, 2, 224, 76, 10, 2,
-    224, 62, 10, 2, 224, 61, 10, 2, 224, 59, 10, 2, 224, 60, 127, 224, 59,
-    10, 2, 223, 187, 10, 2, 223, 188, 127, 232, 72, 24, 250, 194, 223, 188,
-    127, 232, 72, 24, 250, 193, 10, 2, 223, 178, 10, 2, 223, 176, 10, 2, 223,
-    177, 199, 132, 20, 10, 2, 223, 175, 10, 2, 223, 167, 10, 2, 223, 168,
-    233, 52, 10, 2, 223, 166, 10, 2, 223, 154, 10, 2, 223, 155, 214, 79, 223,
-    154, 10, 2, 223, 147, 10, 2, 223, 124, 10, 2, 172, 10, 2, 223, 62, 10, 2,
-    223, 63, 24, 63, 10, 2, 223, 63, 24, 39, 98, 240, 137, 98, 142, 10, 2,
-    223, 63, 24, 39, 98, 234, 83, 10, 2, 223, 63, 24, 39, 98, 222, 251, 10,
-    2, 223, 63, 24, 251, 173, 10, 2, 223, 63, 24, 251, 106, 10, 2, 223, 63,
-    24, 250, 196, 195, 29, 203, 12, 10, 2, 223, 63, 24, 249, 127, 10, 2, 223,
-    63, 24, 248, 184, 10, 2, 223, 63, 24, 240, 75, 10, 2, 223, 63, 24, 236,
-    230, 10, 2, 223, 63, 24, 234, 123, 10, 2, 223, 63, 24, 234, 83, 10, 2,
-    223, 63, 24, 233, 65, 10, 2, 223, 63, 24, 233, 66, 98, 233, 65, 10, 2,
-    223, 63, 24, 142, 10, 2, 223, 63, 24, 232, 228, 10, 2, 223, 63, 24, 232,
-    72, 24, 215, 138, 10, 2, 223, 63, 24, 226, 123, 233, 52, 10, 2, 223, 63,
-    24, 226, 103, 10, 2, 223, 63, 24, 226, 104, 98, 142, 10, 2, 223, 63, 24,
-    226, 104, 98, 221, 191, 10, 2, 223, 63, 24, 224, 101, 10, 2, 223, 63, 24,
-    224, 76, 10, 2, 223, 63, 24, 223, 178, 10, 2, 223, 63, 24, 223, 167, 10,
-    2, 223, 63, 24, 223, 168, 98, 232, 72, 98, 63, 10, 2, 223, 63, 24, 223,
-    62, 10, 2, 223, 63, 24, 222, 53, 10, 2, 223, 63, 24, 221, 191, 10, 2,
-    223, 63, 24, 221, 176, 10, 2, 223, 63, 24, 219, 207, 10, 2, 223, 63, 24,
-    219, 208, 98, 236, 230, 10, 2, 223, 63, 24, 218, 93, 10, 2, 223, 63, 24,
-    217, 118, 10, 2, 223, 63, 24, 207, 0, 98, 204, 117, 10, 2, 223, 63, 24,
-    206, 201, 98, 233, 165, 98, 236, 157, 10, 2, 223, 63, 24, 206, 201, 98,
-    233, 165, 203, 12, 10, 2, 223, 63, 24, 206, 149, 10, 2, 223, 63, 24, 206,
-    150, 98, 206, 149, 10, 2, 223, 63, 24, 204, 117, 10, 2, 223, 63, 24, 203,
-    143, 10, 2, 223, 63, 24, 203, 129, 10, 2, 223, 63, 24, 203, 69, 98, 39,
-    98, 204, 173, 98, 176, 10, 2, 223, 63, 24, 66, 10, 2, 223, 63, 24, 118,
-    98, 63, 10, 2, 223, 63, 24, 118, 98, 118, 98, 66, 10, 2, 223, 63, 24,
-    200, 116, 98, 250, 195, 10, 2, 223, 63, 24, 200, 104, 10, 2, 223, 63, 24,
-    199, 253, 10, 2, 223, 63, 205, 93, 10, 2, 223, 60, 10, 2, 223, 61, 24,
-    206, 255, 10, 2, 223, 61, 24, 207, 0, 98, 204, 117, 10, 2, 223, 61, 233,
-    52, 10, 2, 223, 61, 233, 53, 127, 223, 61, 233, 53, 206, 255, 10, 2, 223,
-    56, 10, 2, 222, 251, 10, 2, 222, 252, 24, 222, 251, 10, 2, 222, 249, 10,
-    2, 222, 250, 24, 223, 154, 10, 2, 222, 250, 24, 223, 155, 98, 209, 140,
-    10, 2, 222, 109, 10, 2, 222, 90, 10, 2, 222, 78, 10, 2, 222, 53, 10, 2,
-    221, 191, 10, 2, 221, 192, 24, 249, 127, 10, 2, 221, 189, 10, 2, 221,
-    190, 24, 251, 173, 10, 2, 221, 190, 24, 249, 127, 10, 2, 221, 190, 24,
-    236, 138, 10, 2, 221, 190, 24, 236, 139, 203, 12, 10, 2, 221, 190, 24,
-    234, 92, 203, 12, 10, 2, 221, 190, 24, 232, 72, 24, 249, 127, 10, 2, 221,
-    190, 24, 226, 103, 10, 2, 221, 190, 24, 225, 42, 10, 2, 221, 190, 24,
-    225, 40, 10, 2, 221, 190, 24, 225, 41, 98, 250, 195, 10, 2, 221, 190, 24,
-    224, 101, 10, 2, 221, 190, 24, 223, 83, 98, 250, 195, 10, 2, 221, 190,
-    24, 223, 62, 10, 2, 221, 190, 24, 219, 208, 98, 236, 230, 10, 2, 221,
-    190, 24, 217, 118, 10, 2, 221, 190, 24, 215, 186, 10, 2, 221, 190, 24,
-    206, 113, 98, 250, 195, 10, 2, 221, 190, 24, 206, 83, 98, 248, 21, 10, 2,
-    221, 190, 24, 201, 28, 10, 2, 221, 190, 203, 12, 10, 2, 221, 190, 241,
-    55, 221, 189, 10, 2, 221, 190, 214, 79, 221, 189, 10, 2, 221, 190, 205,
-    93, 10, 2, 221, 190, 206, 236, 10, 2, 221, 188, 10, 2, 221, 182, 10, 2,
-    221, 183, 127, 221, 182, 10, 2, 221, 183, 214, 79, 221, 182, 10, 2, 221,
-    183, 206, 236, 10, 2, 221, 179, 10, 2, 221, 176, 10, 2, 221, 174, 10, 2,
-    221, 175, 127, 221, 174, 10, 2, 221, 175, 127, 221, 175, 234, 84, 127,
-    234, 83, 10, 2, 166, 10, 2, 220, 128, 24, 203, 129, 10, 2, 220, 128, 233,
-    52, 10, 2, 220, 120, 10, 2, 220, 89, 10, 2, 220, 37, 10, 2, 220, 12, 10,
-    2, 220, 11, 10, 2, 219, 207, 10, 2, 219, 151, 10, 2, 219, 78, 10, 2, 219,
-    23, 10, 2, 218, 145, 10, 2, 218, 146, 127, 218, 145, 10, 2, 218, 130, 10,
-    2, 218, 131, 233, 52, 10, 2, 218, 111, 10, 2, 218, 97, 10, 2, 218, 93,
-    10, 2, 218, 94, 24, 63, 10, 2, 218, 94, 24, 223, 154, 10, 2, 218, 94, 24,
-    195, 115, 10, 2, 218, 94, 127, 218, 93, 10, 2, 218, 94, 127, 218, 94, 24,
-    39, 98, 176, 10, 2, 218, 94, 241, 55, 218, 93, 10, 2, 218, 91, 10, 2,
-    218, 92, 24, 63, 10, 2, 218, 92, 24, 39, 98, 239, 152, 10, 2, 218, 92,
-    24, 239, 152, 10, 2, 218, 92, 233, 52, 10, 2, 176, 10, 2, 217, 247, 10,
-    2, 217, 234, 10, 2, 217, 235, 226, 16, 10, 2, 217, 235, 24, 206, 152,
-    203, 12, 10, 2, 217, 235, 214, 79, 217, 234, 10, 2, 217, 233, 10, 2, 217,
-    226, 215, 124, 10, 2, 217, 225, 10, 2, 217, 224, 10, 2, 217, 118, 10, 2,
-    217, 119, 24, 63, 10, 2, 217, 119, 24, 200, 104, 10, 2, 217, 119, 206,
-    236, 10, 2, 216, 223, 10, 2, 216, 224, 24, 69, 10, 2, 216, 214, 10, 2,
-    216, 184, 10, 2, 216, 185, 24, 234, 92, 203, 12, 10, 2, 216, 185, 24,
-    234, 84, 98, 234, 92, 203, 12, 10, 2, 216, 180, 10, 2, 216, 181, 24, 251,
-    106, 10, 2, 216, 181, 24, 250, 195, 10, 2, 216, 181, 24, 250, 196, 98,
-    250, 195, 10, 2, 216, 181, 24, 233, 65, 10, 2, 216, 181, 24, 219, 208,
-    98, 234, 92, 203, 12, 10, 2, 216, 181, 24, 217, 118, 10, 2, 216, 181, 24,
-    215, 138, 10, 2, 216, 181, 24, 206, 255, 10, 2, 216, 181, 24, 207, 0, 98,
-    39, 251, 106, 10, 2, 216, 181, 24, 207, 0, 98, 250, 195, 10, 2, 216, 181,
-    24, 207, 0, 98, 250, 196, 98, 250, 195, 10, 2, 216, 181, 24, 200, 116,
-    98, 250, 195, 10, 2, 216, 181, 24, 199, 253, 10, 2, 216, 169, 10, 2, 215,
-    186, 10, 2, 215, 155, 10, 2, 215, 138, 10, 2, 215, 139, 223, 61, 24, 234,
-    83, 10, 2, 215, 139, 223, 61, 24, 220, 12, 10, 2, 215, 139, 223, 61, 24,
-    208, 241, 10, 2, 215, 139, 223, 61, 24, 208, 242, 127, 215, 139, 223, 61,
-    24, 208, 241, 10, 2, 215, 139, 223, 61, 24, 199, 253, 10, 2, 215, 139,
-    203, 12, 10, 2, 215, 139, 127, 215, 138, 10, 2, 215, 139, 241, 55, 215,
-    138, 10, 2, 215, 139, 241, 55, 215, 139, 223, 61, 127, 223, 60, 10, 2,
-    215, 133, 10, 2, 215, 134, 252, 35, 24, 250, 189, 10, 2, 215, 134, 252,
-    35, 24, 248, 184, 10, 2, 215, 134, 252, 35, 24, 237, 195, 10, 2, 215,
-    134, 252, 35, 24, 233, 65, 10, 2, 215, 134, 252, 35, 24, 226, 123, 233,
-    52, 10, 2, 215, 134, 252, 35, 24, 225, 40, 10, 2, 215, 134, 252, 35, 24,
-    172, 10, 2, 215, 134, 252, 35, 24, 217, 118, 10, 2, 215, 134, 252, 35,
-    24, 206, 80, 10, 2, 215, 134, 252, 35, 24, 200, 115, 10, 2, 215, 134,
-    224, 60, 24, 248, 184, 10, 2, 215, 134, 224, 60, 24, 248, 185, 66, 10, 2,
-    161, 10, 2, 213, 233, 10, 2, 213, 191, 10, 2, 213, 163, 10, 2, 213, 21,
-    10, 2, 212, 220, 10, 2, 212, 221, 24, 63, 10, 2, 212, 221, 24, 252, 117,
-    10, 2, 212, 221, 24, 248, 184, 10, 2, 212, 221, 24, 248, 21, 10, 2, 212,
-    221, 24, 69, 10, 2, 212, 221, 24, 68, 10, 2, 212, 221, 24, 230, 205, 10,
-    2, 212, 221, 24, 66, 10, 2, 212, 221, 24, 200, 115, 10, 2, 212, 221, 241,
-    55, 212, 220, 10, 2, 212, 161, 10, 2, 212, 162, 24, 225, 21, 10, 2, 212,
-    162, 24, 200, 104, 10, 2, 212, 162, 24, 195, 115, 10, 2, 212, 162, 214,
-    79, 212, 161, 10, 2, 169, 10, 2, 210, 242, 10, 2, 210, 72, 10, 2, 209,
-    140, 10, 2, 183, 10, 2, 209, 2, 215, 124, 10, 2, 209, 1, 10, 2, 209, 2,
-    24, 63, 10, 2, 209, 2, 24, 237, 201, 10, 2, 209, 2, 24, 237, 199, 10, 2,
-    209, 2, 24, 142, 10, 2, 209, 2, 24, 225, 25, 10, 2, 209, 2, 24, 223, 154,
-    10, 2, 209, 2, 24, 221, 174, 10, 2, 209, 2, 24, 219, 78, 10, 2, 209, 2,
-    24, 215, 138, 10, 2, 209, 2, 24, 208, 241, 10, 2, 209, 2, 24, 206, 221,
-    10, 2, 209, 2, 24, 203, 154, 10, 2, 209, 2, 24, 200, 115, 10, 2, 209, 2,
-    24, 200, 110, 10, 2, 209, 2, 24, 200, 79, 10, 2, 209, 2, 24, 200, 21, 10,
-    2, 209, 2, 24, 199, 253, 10, 2, 209, 2, 127, 209, 1, 10, 2, 209, 2, 233,
-    52, 10, 2, 208, 241, 10, 2, 208, 242, 223, 63, 24, 250, 193, 10, 2, 208,
-    213, 10, 2, 208, 204, 10, 2, 207, 50, 10, 2, 207, 48, 10, 2, 207, 49, 24,
-    63, 10, 2, 207, 49, 24, 249, 127, 10, 2, 207, 49, 24, 233, 164, 10, 2,
-    207, 49, 24, 217, 118, 10, 2, 207, 49, 24, 206, 149, 10, 2, 207, 49, 24,
-    201, 10, 10, 2, 207, 49, 24, 66, 10, 2, 207, 49, 24, 118, 98, 63, 10, 2,
-    207, 46, 10, 2, 207, 44, 10, 2, 207, 17, 10, 2, 206, 255, 10, 2, 207, 0,
-    231, 75, 10, 2, 207, 0, 127, 207, 0, 234, 115, 127, 234, 115, 234, 84,
-    127, 234, 83, 10, 2, 207, 0, 127, 207, 0, 203, 155, 127, 203, 155, 234,
-    84, 127, 234, 83, 10, 2, 206, 248, 10, 2, 206, 243, 10, 2, 206, 239, 10,
-    2, 206, 238, 10, 2, 206, 235, 10, 2, 206, 221, 10, 2, 206, 222, 24, 63,
-    10, 2, 206, 222, 24, 226, 103, 10, 2, 206, 215, 10, 2, 206, 216, 24, 63,
-    10, 2, 206, 216, 24, 249, 107, 10, 2, 206, 216, 24, 247, 255, 10, 2, 206,
-    216, 24, 239, 95, 10, 2, 206, 216, 24, 234, 83, 10, 2, 206, 216, 24, 226,
-    122, 10, 2, 206, 216, 24, 226, 123, 233, 52, 10, 2, 206, 216, 24, 223,
-    147, 10, 2, 206, 216, 24, 221, 176, 10, 2, 206, 216, 24, 218, 130, 10, 2,
-    206, 216, 24, 208, 241, 10, 2, 206, 209, 10, 2, 206, 204, 10, 2, 206,
-    205, 203, 12, 10, 2, 206, 205, 127, 206, 205, 247, 245, 127, 247, 244,
-    10, 2, 206, 200, 10, 2, 206, 151, 10, 2, 206, 152, 127, 226, 17, 206,
-    151, 10, 2, 206, 149, 10, 2, 206, 147, 10, 2, 206, 112, 10, 2, 206, 113,
-    233, 52, 10, 2, 206, 91, 10, 2, 206, 89, 10, 2, 206, 90, 127, 206, 90,
-    206, 149, 10, 2, 206, 82, 10, 2, 206, 80, 10, 2, 204, 172, 10, 2, 204,
-    173, 127, 204, 172, 10, 2, 204, 129, 10, 2, 204, 128, 10, 2, 204, 126,
-    10, 2, 204, 117, 10, 2, 204, 116, 10, 2, 204, 88, 10, 2, 204, 87, 10, 2,
-    189, 10, 2, 203, 169, 250, 179, 10, 2, 203, 169, 24, 232, 71, 10, 2, 203,
-    169, 24, 219, 78, 10, 2, 203, 169, 233, 52, 10, 2, 203, 154, 10, 2, 203,
-    155, 127, 203, 155, 216, 224, 127, 216, 224, 239, 76, 127, 239, 75, 10,
-    2, 203, 155, 205, 93, 10, 2, 203, 143, 10, 2, 184, 24, 248, 184, 10, 2,
-    184, 24, 233, 65, 10, 2, 184, 24, 206, 255, 10, 2, 184, 24, 206, 151, 10,
-    2, 184, 24, 201, 28, 10, 2, 184, 24, 200, 104, 10, 2, 203, 129, 10, 2,
-    203, 101, 10, 2, 203, 68, 10, 2, 203, 69, 233, 52, 10, 2, 202, 122, 10,
-    2, 202, 123, 203, 12, 10, 2, 202, 86, 10, 2, 202, 63, 10, 2, 202, 64, 24,
-    203, 129, 10, 2, 202, 64, 127, 202, 63, 10, 2, 202, 64, 127, 202, 64,
-    234, 115, 127, 234, 115, 234, 84, 127, 234, 83, 10, 2, 201, 40, 10, 2,
-    201, 28, 10, 2, 201, 26, 10, 2, 201, 22, 10, 2, 201, 10, 10, 2, 201, 11,
-    127, 201, 11, 195, 116, 127, 195, 115, 10, 2, 66, 10, 2, 118, 233, 65,
-    10, 2, 118, 118, 66, 10, 2, 118, 127, 118, 213, 244, 127, 213, 244, 234,
-    84, 127, 234, 83, 10, 2, 118, 127, 118, 204, 89, 127, 204, 88, 10, 2,
-    118, 127, 118, 118, 210, 89, 127, 118, 210, 88, 10, 2, 200, 115, 10, 2,
-    200, 110, 10, 2, 200, 104, 10, 2, 200, 105, 223, 147, 10, 2, 200, 105,
-    24, 249, 127, 10, 2, 200, 105, 24, 219, 78, 10, 2, 200, 105, 24, 118, 98,
-    118, 98, 66, 10, 2, 200, 105, 24, 118, 98, 118, 98, 118, 233, 52, 10, 2,
-    200, 105, 233, 52, 10, 2, 200, 105, 206, 236, 10, 2, 200, 105, 206, 237,
-    24, 249, 127, 10, 2, 200, 100, 10, 2, 200, 79, 10, 2, 200, 80, 24, 223,
-    62, 10, 2, 200, 80, 24, 219, 208, 98, 240, 136, 10, 2, 200, 80, 24, 207,
-    48, 10, 2, 200, 80, 24, 66, 10, 2, 200, 78, 10, 2, 200, 74, 10, 2, 200,
-    75, 24, 224, 240, 10, 2, 200, 75, 24, 161, 10, 2, 200, 72, 10, 2, 200,
-    73, 233, 52, 10, 2, 200, 21, 10, 2, 200, 22, 241, 55, 200, 21, 10, 2,
-    200, 22, 206, 236, 10, 2, 200, 19, 10, 2, 200, 20, 24, 39, 98, 142, 10,
-    2, 200, 20, 24, 39, 98, 176, 10, 2, 200, 20, 24, 251, 173, 10, 2, 200,
-    20, 24, 142, 10, 2, 200, 20, 24, 215, 138, 10, 2, 200, 20, 24, 200, 115,
-    10, 2, 200, 20, 24, 200, 116, 98, 250, 195, 10, 2, 200, 20, 24, 200, 116,
-    98, 248, 184, 10, 2, 200, 18, 10, 2, 200, 15, 10, 2, 200, 14, 10, 2, 200,
-    10, 10, 2, 200, 11, 24, 63, 10, 2, 200, 11, 24, 250, 189, 10, 2, 200, 11,
-    24, 154, 10, 2, 200, 11, 24, 237, 188, 10, 2, 200, 11, 24, 234, 123, 10,
-    2, 200, 11, 24, 234, 105, 10, 2, 200, 11, 24, 234, 92, 203, 12, 10, 2,
-    200, 11, 24, 234, 83, 10, 2, 200, 11, 24, 233, 76, 10, 2, 200, 11, 24,
-    142, 10, 2, 200, 11, 24, 226, 122, 10, 2, 200, 11, 24, 226, 103, 10, 2,
-    200, 11, 24, 225, 242, 10, 2, 200, 11, 24, 224, 101, 10, 2, 200, 11, 24,
-    221, 174, 10, 2, 200, 11, 24, 219, 23, 10, 2, 200, 11, 24, 161, 10, 2,
-    200, 11, 24, 206, 255, 10, 2, 200, 11, 24, 206, 89, 10, 2, 200, 11, 24,
-    201, 40, 10, 2, 200, 11, 24, 118, 98, 233, 65, 10, 2, 200, 11, 24, 200,
-    104, 10, 2, 200, 11, 24, 200, 8, 10, 2, 200, 8, 10, 2, 200, 9, 24, 66,
-    10, 2, 199, 253, 10, 2, 199, 254, 24, 63, 10, 2, 199, 254, 24, 223, 187,
-    10, 2, 199, 254, 24, 223, 154, 10, 2, 199, 254, 24, 203, 129, 10, 2, 199,
-    249, 10, 2, 199, 252, 10, 2, 199, 250, 10, 2, 199, 246, 10, 2, 199, 234,
-    10, 2, 199, 235, 24, 224, 240, 10, 2, 199, 232, 10, 2, 195, 115, 10, 2,
-    195, 116, 203, 12, 10, 2, 195, 116, 103, 24, 223, 154, 10, 2, 195, 111,
-    10, 2, 195, 103, 10, 2, 195, 87, 10, 2, 195, 33, 10, 2, 195, 34, 127,
-    195, 33, 10, 2, 195, 32, 10, 2, 195, 30, 10, 2, 195, 31, 225, 44, 203,
-    12, 10, 2, 195, 25, 10, 2, 195, 16, 10, 2, 194, 255, 10, 2, 194, 253, 10,
-    2, 194, 254, 24, 63, 10, 2, 194, 252, 10, 2, 194, 251, 10, 2, 225, 9,
-    237, 4, 10, 2, 252, 118, 24, 215, 138, 10, 2, 252, 35, 24, 63, 10, 2,
-    251, 120, 24, 223, 169, 10, 2, 240, 127, 224, 60, 24, 200, 116, 98, 220,
-    12, 10, 2, 240, 125, 10, 2, 239, 76, 98, 206, 151, 10, 2, 237, 200, 24,
-    206, 255, 10, 2, 236, 55, 24, 233, 65, 10, 2, 236, 55, 24, 206, 255, 10,
-    2, 234, 122, 24, 251, 107, 98, 225, 26, 98, 63, 10, 2, 234, 122, 24, 250,
-    193, 10, 2, 234, 47, 10, 2, 233, 181, 10, 2, 231, 48, 10, 2, 225, 70, 24,
-    251, 71, 10, 2, 225, 70, 24, 250, 192, 10, 2, 225, 70, 24, 233, 164, 10,
-    2, 225, 70, 24, 233, 65, 10, 2, 225, 70, 24, 232, 72, 24, 250, 193, 10,
-    2, 225, 70, 24, 221, 174, 10, 2, 225, 70, 24, 161, 10, 2, 225, 70, 24,
-    206, 143, 10, 2, 225, 70, 24, 201, 40, 10, 2, 225, 70, 24, 200, 19, 10,
-    2, 223, 63, 24, 233, 192, 10, 2, 221, 190, 206, 237, 24, 249, 127, 10, 2,
-    221, 190, 24, 236, 139, 98, 222, 251, 10, 2, 221, 190, 24, 206, 151, 10,
-    2, 219, 150, 10, 2, 218, 92, 24, 195, 115, 10, 2, 217, 246, 10, 2, 216,
-    183, 10, 2, 216, 182, 10, 2, 216, 181, 24, 249, 107, 10, 2, 216, 181, 24,
-    233, 192, 10, 2, 215, 156, 209, 194, 216, 175, 239, 230, 10, 2, 213, 22,
-    250, 179, 10, 2, 212, 165, 10, 2, 209, 2, 24, 226, 123, 233, 52, 10, 2,
-    202, 114, 10, 2, 200, 80, 24, 219, 207, 10, 2, 118, 66, 10, 156, 2, 99,
-    250, 195, 10, 156, 2, 115, 250, 195, 10, 156, 2, 235, 7, 250, 195, 10,
-    156, 2, 235, 101, 250, 195, 10, 156, 2, 206, 29, 250, 195, 10, 156, 2,
-    207, 71, 250, 195, 10, 156, 2, 237, 31, 250, 195, 10, 156, 2, 216, 179,
-    250, 195, 10, 156, 2, 115, 239, 75, 10, 156, 2, 235, 7, 239, 75, 10, 156,
-    2, 235, 101, 239, 75, 10, 156, 2, 206, 29, 239, 75, 10, 156, 2, 207, 71,
-    239, 75, 10, 156, 2, 237, 31, 239, 75, 10, 156, 2, 216, 179, 239, 75, 10,
-    156, 2, 235, 7, 66, 10, 156, 2, 235, 101, 66, 10, 156, 2, 206, 29, 66,
-    10, 156, 2, 207, 71, 66, 10, 156, 2, 237, 31, 66, 10, 156, 2, 216, 179,
-    66, 10, 156, 2, 97, 234, 19, 10, 156, 2, 99, 234, 19, 10, 156, 2, 115,
-    234, 19, 10, 156, 2, 235, 7, 234, 19, 10, 156, 2, 235, 101, 234, 19, 10,
-    156, 2, 206, 29, 234, 19, 10, 156, 2, 207, 71, 234, 19, 10, 156, 2, 237,
-    31, 234, 19, 10, 156, 2, 216, 179, 234, 19, 10, 156, 2, 97, 234, 16, 10,
-    156, 2, 99, 234, 16, 10, 156, 2, 115, 234, 16, 10, 156, 2, 235, 7, 234,
-    16, 10, 156, 2, 235, 101, 234, 16, 10, 156, 2, 99, 207, 17, 10, 156, 2,
-    115, 207, 17, 10, 156, 2, 115, 207, 18, 199, 132, 20, 10, 156, 2, 235, 7,
-    207, 17, 10, 156, 2, 235, 101, 207, 17, 10, 156, 2, 206, 29, 207, 17, 10,
-    156, 2, 207, 71, 207, 17, 10, 156, 2, 237, 31, 207, 17, 10, 156, 2, 216,
-    179, 207, 17, 10, 156, 2, 97, 207, 10, 10, 156, 2, 99, 207, 10, 10, 156,
-    2, 115, 207, 10, 10, 156, 2, 115, 207, 11, 199, 132, 20, 10, 156, 2, 235,
-    7, 207, 10, 10, 156, 2, 235, 101, 207, 10, 10, 156, 2, 207, 18, 24, 234,
-    106, 98, 239, 75, 10, 156, 2, 207, 18, 24, 234, 106, 98, 219, 23, 10,
-    156, 2, 97, 247, 240, 10, 156, 2, 99, 247, 240, 10, 156, 2, 115, 247,
-    240, 10, 156, 2, 115, 247, 241, 199, 132, 20, 10, 156, 2, 235, 7, 247,
-    240, 10, 156, 2, 235, 101, 247, 240, 10, 156, 2, 115, 199, 132, 235, 24,
-    236, 140, 10, 156, 2, 115, 199, 132, 235, 24, 236, 137, 10, 156, 2, 235,
-    7, 199, 132, 235, 24, 222, 79, 10, 156, 2, 235, 7, 199, 132, 235, 24,
-    222, 77, 10, 156, 2, 235, 7, 199, 132, 235, 24, 222, 80, 63, 10, 156, 2,
-    235, 7, 199, 132, 235, 24, 222, 80, 250, 112, 10, 156, 2, 206, 29, 199,
-    132, 235, 24, 250, 191, 10, 156, 2, 207, 71, 199, 132, 235, 24, 226, 95,
-    10, 156, 2, 207, 71, 199, 132, 235, 24, 226, 97, 63, 10, 156, 2, 207, 71,
-    199, 132, 235, 24, 226, 97, 250, 112, 10, 156, 2, 237, 31, 199, 132, 235,
-    24, 199, 248, 10, 156, 2, 237, 31, 199, 132, 235, 24, 199, 247, 10, 156,
-    2, 216, 179, 199, 132, 235, 24, 226, 111, 10, 156, 2, 216, 179, 199, 132,
-    235, 24, 226, 110, 10, 156, 2, 216, 179, 199, 132, 235, 24, 226, 109, 10,
-    156, 2, 216, 179, 199, 132, 235, 24, 226, 112, 63, 10, 156, 2, 99, 250,
-    196, 203, 12, 10, 156, 2, 115, 250, 196, 203, 12, 10, 156, 2, 235, 7,
-    250, 196, 203, 12, 10, 156, 2, 235, 101, 250, 196, 203, 12, 10, 156, 2,
-    206, 29, 250, 196, 203, 12, 10, 156, 2, 97, 249, 91, 10, 156, 2, 99, 249,
-    91, 10, 156, 2, 115, 249, 91, 10, 156, 2, 235, 7, 249, 91, 10, 156, 2,
-    235, 7, 249, 92, 199, 132, 20, 10, 156, 2, 235, 101, 249, 91, 10, 156, 2,
-    235, 101, 249, 92, 199, 132, 20, 10, 156, 2, 216, 192, 10, 156, 2, 216,
-    193, 10, 156, 2, 97, 236, 136, 10, 156, 2, 99, 236, 136, 10, 156, 2, 97,
-    202, 185, 239, 75, 10, 156, 2, 99, 202, 182, 239, 75, 10, 156, 2, 235,
-    101, 206, 16, 239, 75, 10, 156, 2, 97, 202, 185, 199, 132, 235, 24, 63,
-    10, 156, 2, 99, 202, 182, 199, 132, 235, 24, 63, 10, 156, 2, 97, 237, 27,
-    250, 195, 10, 156, 2, 97, 211, 88, 250, 195, 10, 156, 2, 37, 250, 182,
-    97, 206, 17, 10, 156, 2, 37, 250, 182, 97, 211, 87, 10, 156, 2, 97, 211,
-    88, 233, 46, 10, 156, 2, 97, 157, 233, 46, 10, 156, 2, 237, 5, 97, 202,
-    184, 10, 156, 2, 237, 5, 99, 202, 181, 10, 156, 2, 237, 5, 235, 14, 10,
-    156, 2, 237, 5, 235, 145, 10, 156, 2, 235, 7, 118, 199, 132, 20, 10, 156,
-    2, 235, 101, 118, 199, 132, 20, 10, 156, 2, 206, 29, 118, 199, 132, 20,
-    10, 156, 2, 207, 71, 118, 199, 132, 20, 10, 156, 2, 237, 31, 118, 199,
-    132, 20, 10, 156, 2, 216, 179, 118, 199, 132, 20, 10, 211, 214, 2, 37,
-    250, 182, 197, 9, 239, 59, 10, 211, 214, 2, 83, 244, 168, 10, 211, 214,
-    2, 239, 147, 244, 168, 10, 211, 214, 2, 239, 147, 201, 176, 10, 211, 214,
-    2, 239, 147, 211, 93, 10, 2, 252, 118, 24, 215, 139, 203, 12, 10, 2, 252,
-    118, 24, 206, 149, 10, 2, 252, 7, 24, 236, 138, 10, 2, 249, 128, 24, 239,
-    76, 203, 12, 10, 2, 249, 114, 24, 252, 34, 10, 2, 249, 114, 24, 216, 223,
-    10, 2, 249, 114, 24, 195, 115, 10, 2, 248, 22, 127, 248, 22, 24, 217,
-    247, 10, 2, 240, 137, 24, 203, 129, 10, 2, 240, 127, 24, 223, 154, 10, 2,
-    239, 108, 24, 226, 122, 10, 2, 239, 108, 24, 118, 118, 66, 10, 2, 239,
-    106, 24, 200, 104, 10, 2, 237, 196, 24, 251, 71, 10, 2, 237, 196, 24,
-    250, 195, 10, 2, 237, 196, 24, 250, 196, 250, 169, 222, 184, 10, 2, 237,
-    196, 24, 239, 95, 10, 2, 237, 196, 24, 237, 188, 10, 2, 237, 196, 24,
-    236, 157, 10, 2, 237, 196, 24, 234, 123, 10, 2, 237, 196, 24, 233, 192,
-    10, 2, 237, 196, 24, 233, 174, 233, 52, 10, 2, 237, 196, 24, 233, 164,
-    10, 2, 237, 196, 24, 142, 10, 2, 237, 196, 24, 232, 71, 10, 2, 237, 196,
-    24, 226, 123, 233, 52, 10, 2, 237, 196, 24, 224, 240, 10, 2, 237, 196,
-    24, 223, 154, 10, 2, 237, 196, 24, 223, 147, 10, 2, 237, 196, 24, 223,
-    148, 98, 224, 240, 10, 2, 237, 196, 24, 223, 50, 10, 2, 237, 196, 24,
-    222, 249, 10, 2, 237, 196, 24, 222, 250, 24, 223, 154, 10, 2, 237, 196,
-    24, 221, 180, 98, 233, 164, 10, 2, 237, 196, 24, 220, 12, 10, 2, 237,
-    196, 24, 219, 151, 10, 2, 237, 196, 24, 219, 78, 10, 2, 237, 196, 24,
-    216, 223, 10, 2, 237, 196, 24, 212, 220, 10, 2, 237, 196, 24, 206, 255,
-    10, 2, 237, 196, 24, 206, 113, 233, 52, 10, 2, 237, 84, 24, 223, 154, 10,
-    2, 237, 84, 24, 213, 163, 10, 2, 236, 158, 196, 222, 10, 2, 236, 139,
-    241, 55, 236, 138, 10, 2, 236, 55, 206, 237, 24, 250, 195, 10, 2, 236,
-    55, 206, 237, 24, 232, 71, 10, 2, 236, 55, 206, 237, 24, 226, 123, 233,
-    52, 10, 2, 236, 55, 206, 237, 24, 172, 10, 2, 236, 55, 206, 237, 24, 222,
-    251, 10, 2, 236, 55, 206, 237, 24, 219, 207, 10, 2, 236, 55, 206, 237,
-    24, 219, 151, 10, 2, 236, 55, 206, 237, 24, 204, 172, 10, 2, 236, 55, 24,
-    204, 172, 10, 2, 234, 122, 24, 249, 113, 10, 2, 234, 122, 24, 239, 108,
-    233, 52, 10, 2, 234, 122, 24, 237, 196, 24, 226, 123, 233, 52, 10, 2,
-    234, 122, 24, 237, 196, 24, 224, 240, 10, 2, 234, 122, 24, 236, 160, 10,
-    2, 234, 122, 24, 234, 123, 10, 2, 234, 122, 24, 234, 84, 98, 239, 152,
-    10, 2, 234, 122, 24, 234, 84, 98, 217, 118, 10, 2, 234, 122, 24, 233, 4,
-    98, 63, 10, 2, 234, 122, 24, 223, 148, 98, 224, 240, 10, 2, 234, 122, 24,
-    222, 249, 10, 2, 234, 122, 24, 222, 250, 24, 223, 154, 10, 2, 234, 122,
-    24, 221, 179, 10, 2, 234, 122, 24, 218, 93, 10, 2, 234, 122, 24, 217,
-    118, 10, 2, 234, 122, 24, 217, 119, 98, 237, 83, 10, 2, 234, 122, 24,
-    217, 119, 98, 233, 192, 10, 2, 234, 122, 24, 206, 215, 10, 2, 234, 122,
-    24, 195, 16, 10, 2, 234, 117, 209, 194, 216, 175, 239, 230, 10, 2, 234,
-    18, 24, 66, 10, 2, 233, 165, 24, 233, 165, 241, 55, 233, 164, 10, 2, 233,
-    75, 24, 226, 123, 233, 52, 10, 2, 233, 66, 98, 233, 165, 24, 203, 129,
-    10, 2, 233, 4, 203, 13, 233, 52, 10, 2, 232, 72, 24, 250, 196, 127, 232,
-    72, 24, 250, 195, 10, 2, 225, 70, 24, 248, 21, 10, 2, 225, 70, 24, 155,
-    10, 2, 225, 70, 24, 118, 118, 66, 10, 2, 225, 70, 24, 200, 21, 10, 2,
-    223, 63, 24, 195, 0, 127, 194, 255, 10, 2, 223, 51, 10, 2, 223, 49, 10,
-    2, 223, 48, 10, 2, 223, 47, 10, 2, 223, 46, 10, 2, 223, 45, 10, 2, 223,
-    44, 10, 2, 223, 43, 127, 223, 43, 233, 52, 10, 2, 223, 42, 10, 2, 223,
-    41, 127, 223, 40, 10, 2, 223, 39, 10, 2, 223, 38, 10, 2, 223, 37, 10, 2,
-    223, 36, 10, 2, 223, 35, 10, 2, 223, 34, 10, 2, 223, 33, 10, 2, 223, 32,
-    10, 2, 223, 31, 10, 2, 223, 30, 10, 2, 223, 29, 10, 2, 223, 28, 10, 2,
-    223, 27, 10, 2, 223, 26, 10, 2, 223, 25, 10, 2, 223, 24, 10, 2, 223, 23,
-    10, 2, 223, 22, 10, 2, 223, 20, 10, 2, 223, 21, 24, 233, 76, 10, 2, 223,
-    21, 24, 226, 122, 10, 2, 223, 21, 24, 213, 164, 98, 221, 188, 10, 2, 223,
-    21, 24, 213, 164, 98, 213, 164, 98, 221, 188, 10, 2, 223, 21, 24, 200,
-    116, 98, 249, 145, 10, 2, 223, 19, 10, 2, 223, 18, 10, 2, 223, 17, 10, 2,
-    223, 16, 10, 2, 223, 15, 10, 2, 223, 14, 10, 2, 223, 13, 10, 2, 223, 12,
-    10, 2, 223, 11, 10, 2, 223, 10, 10, 2, 223, 8, 10, 2, 223, 9, 24, 250,
-    195, 10, 2, 223, 9, 24, 249, 127, 10, 2, 223, 9, 24, 237, 187, 233, 53,
-    233, 52, 10, 2, 223, 9, 24, 223, 178, 10, 2, 223, 9, 24, 172, 10, 2, 223,
-    9, 24, 203, 101, 10, 2, 223, 9, 24, 203, 68, 10, 2, 223, 9, 24, 200, 115,
-    10, 2, 223, 9, 24, 200, 104, 10, 2, 223, 9, 24, 200, 8, 10, 2, 223, 7,
-    10, 2, 223, 5, 10, 2, 223, 6, 24, 237, 199, 10, 2, 223, 6, 24, 234, 123,
-    10, 2, 223, 6, 24, 226, 122, 10, 2, 223, 6, 24, 226, 123, 233, 52, 10, 2,
-    223, 6, 24, 216, 223, 10, 2, 223, 6, 24, 213, 164, 98, 213, 164, 98, 221,
-    188, 10, 2, 223, 6, 24, 206, 240, 98, 224, 101, 10, 2, 223, 6, 24, 200,
-    104, 10, 2, 223, 6, 24, 200, 8, 10, 2, 223, 3, 10, 2, 223, 2, 10, 2, 221,
-    190, 233, 53, 24, 250, 195, 10, 2, 221, 190, 24, 239, 75, 10, 2, 221,
-    190, 24, 232, 228, 10, 2, 221, 190, 24, 213, 163, 10, 2, 221, 190, 24,
-    213, 164, 98, 213, 164, 98, 221, 188, 10, 2, 221, 190, 24, 203, 129, 10,
-    2, 219, 79, 98, 195, 114, 10, 2, 218, 94, 127, 218, 94, 24, 234, 123, 10,
-    2, 218, 94, 127, 218, 94, 24, 225, 25, 10, 2, 216, 181, 24, 239, 108,
-    233, 52, 10, 2, 216, 181, 24, 233, 164, 10, 2, 216, 181, 24, 233, 57, 10,
-    2, 216, 181, 24, 232, 71, 10, 2, 216, 181, 24, 224, 173, 10, 2, 216, 181,
-    24, 223, 46, 10, 2, 216, 181, 24, 220, 12, 10, 2, 216, 181, 24, 213, 164,
-    98, 213, 163, 10, 2, 216, 181, 24, 66, 10, 2, 216, 181, 24, 118, 98, 66,
-    10, 2, 216, 181, 24, 200, 8, 10, 2, 209, 2, 233, 53, 24, 142, 10, 2, 209,
-    2, 24, 236, 230, 10, 2, 209, 2, 24, 207, 0, 250, 169, 222, 184, 10, 2,
-    209, 2, 24, 203, 129, 10, 2, 207, 47, 203, 12, 10, 2, 207, 0, 127, 206,
-    255, 10, 2, 207, 0, 98, 231, 67, 10, 2, 207, 0, 98, 217, 224, 10, 2, 207,
-    0, 98, 208, 204, 10, 2, 206, 150, 98, 237, 196, 24, 216, 223, 10, 2, 206,
-    150, 98, 237, 84, 24, 251, 106, 10, 2, 206, 113, 24, 203, 129, 10, 2,
-    203, 130, 98, 209, 1, 10, 2, 201, 23, 24, 234, 92, 203, 12, 10, 2, 201,
-    23, 24, 115, 239, 75, 10, 2, 200, 20, 226, 16, 10, 2, 200, 20, 24, 200,
-    104, 10, 2, 200, 11, 24, 240, 74, 10, 2, 200, 11, 24, 223, 4, 10, 2, 200,
-    11, 24, 221, 188, 10, 2, 195, 114, 10, 2, 195, 0, 127, 195, 0, 98, 208,
-    204, 10, 2, 194, 254, 24, 115, 239, 76, 203, 12, 14, 7, 255, 161, 14, 7,
-    255, 160, 14, 7, 255, 159, 14, 7, 255, 158, 14, 7, 255, 157, 14, 7, 255,
-    156, 14, 7, 255, 155, 14, 7, 255, 154, 14, 7, 255, 153, 14, 7, 255, 152,
-    14, 7, 255, 151, 14, 7, 255, 150, 14, 7, 255, 149, 14, 7, 255, 147, 14,
-    7, 255, 146, 14, 7, 255, 145, 14, 7, 255, 144, 14, 7, 255, 143, 14, 7,
-    255, 142, 14, 7, 255, 141, 14, 7, 255, 140, 14, 7, 255, 139, 14, 7, 255,
-    138, 14, 7, 255, 137, 14, 7, 255, 136, 14, 7, 255, 135, 14, 7, 255, 134,
-    14, 7, 255, 133, 14, 7, 255, 132, 14, 7, 255, 131, 14, 7, 255, 130, 14,
-    7, 255, 128, 14, 7, 255, 127, 14, 7, 255, 125, 14, 7, 255, 124, 14, 7,
-    255, 123, 14, 7, 255, 122, 14, 7, 255, 121, 14, 7, 255, 120, 14, 7, 255,
-    119, 14, 7, 255, 118, 14, 7, 255, 117, 14, 7, 255, 116, 14, 7, 255, 115,
-    14, 7, 255, 114, 14, 7, 255, 112, 14, 7, 255, 111, 14, 7, 255, 110, 14,
-    7, 255, 108, 14, 7, 255, 107, 14, 7, 255, 106, 14, 7, 255, 105, 14, 7,
-    255, 104, 14, 7, 255, 103, 14, 7, 255, 102, 14, 7, 255, 101, 14, 7, 255,
-    98, 14, 7, 255, 97, 14, 7, 255, 96, 14, 7, 255, 95, 14, 7, 255, 94, 14,
-    7, 255, 93, 14, 7, 255, 92, 14, 7, 255, 91, 14, 7, 255, 90, 14, 7, 255,
-    89, 14, 7, 255, 88, 14, 7, 255, 87, 14, 7, 255, 86, 14, 7, 255, 85, 14,
-    7, 255, 84, 14, 7, 255, 83, 14, 7, 255, 82, 14, 7, 255, 81, 14, 7, 255,
-    80, 14, 7, 255, 79, 14, 7, 255, 75, 14, 7, 255, 74, 14, 7, 255, 73, 14,
-    7, 255, 72, 14, 7, 250, 110, 14, 7, 250, 108, 14, 7, 250, 106, 14, 7,
-    250, 104, 14, 7, 250, 102, 14, 7, 250, 101, 14, 7, 250, 99, 14, 7, 250,
-    97, 14, 7, 250, 95, 14, 7, 250, 93, 14, 7, 247, 203, 14, 7, 247, 202, 14,
-    7, 247, 201, 14, 7, 247, 200, 14, 7, 247, 199, 14, 7, 247, 198, 14, 7,
-    247, 197, 14, 7, 247, 196, 14, 7, 247, 195, 14, 7, 247, 194, 14, 7, 247,
-    193, 14, 7, 247, 192, 14, 7, 247, 191, 14, 7, 247, 190, 14, 7, 247, 189,
-    14, 7, 247, 188, 14, 7, 247, 187, 14, 7, 247, 186, 14, 7, 247, 185, 14,
-    7, 247, 184, 14, 7, 247, 183, 14, 7, 247, 182, 14, 7, 247, 181, 14, 7,
-    247, 180, 14, 7, 247, 179, 14, 7, 247, 178, 14, 7, 247, 177, 14, 7, 247,
-    176, 14, 7, 240, 230, 14, 7, 240, 229, 14, 7, 240, 228, 14, 7, 240, 227,
-    14, 7, 240, 226, 14, 7, 240, 225, 14, 7, 240, 224, 14, 7, 240, 223, 14,
-    7, 240, 222, 14, 7, 240, 221, 14, 7, 240, 220, 14, 7, 240, 219, 14, 7,
-    240, 218, 14, 7, 240, 217, 14, 7, 240, 216, 14, 7, 240, 215, 14, 7, 240,
-    214, 14, 7, 240, 213, 14, 7, 240, 212, 14, 7, 240, 211, 14, 7, 240, 210,
-    14, 7, 240, 209, 14, 7, 240, 208, 14, 7, 240, 207, 14, 7, 240, 206, 14,
-    7, 240, 205, 14, 7, 240, 204, 14, 7, 240, 203, 14, 7, 240, 202, 14, 7,
-    240, 201, 14, 7, 240, 200, 14, 7, 240, 199, 14, 7, 240, 198, 14, 7, 240,
-    197, 14, 7, 240, 196, 14, 7, 240, 195, 14, 7, 240, 194, 14, 7, 240, 193,
-    14, 7, 240, 192, 14, 7, 240, 191, 14, 7, 240, 190, 14, 7, 240, 189, 14,
-    7, 240, 188, 14, 7, 240, 187, 14, 7, 240, 186, 14, 7, 240, 185, 14, 7,
-    240, 184, 14, 7, 240, 183, 14, 7, 240, 182, 14, 7, 240, 181, 14, 7, 240,
-    180, 14, 7, 240, 179, 14, 7, 240, 178, 14, 7, 240, 177, 14, 7, 240, 176,
-    14, 7, 240, 175, 14, 7, 240, 174, 14, 7, 240, 173, 14, 7, 240, 172, 14,
-    7, 240, 171, 14, 7, 240, 170, 14, 7, 240, 169, 14, 7, 240, 168, 14, 7,
-    240, 167, 14, 7, 240, 166, 14, 7, 240, 165, 14, 7, 240, 164, 14, 7, 240,
-    163, 14, 7, 240, 162, 14, 7, 240, 161, 14, 7, 240, 160, 14, 7, 240, 159,
-    14, 7, 240, 158, 14, 7, 240, 157, 14, 7, 240, 156, 14, 7, 240, 155, 14,
-    7, 240, 154, 14, 7, 240, 153, 14, 7, 240, 152, 14, 7, 240, 151, 14, 7,
-    240, 150, 14, 7, 240, 149, 14, 7, 240, 148, 14, 7, 240, 147, 14, 7, 240,
-    146, 14, 7, 240, 145, 14, 7, 240, 144, 14, 7, 240, 143, 14, 7, 240, 142,
-    14, 7, 240, 141, 14, 7, 240, 140, 14, 7, 240, 139, 14, 7, 237, 128, 14,
-    7, 237, 127, 14, 7, 237, 126, 14, 7, 237, 125, 14, 7, 237, 124, 14, 7,
-    237, 123, 14, 7, 237, 122, 14, 7, 237, 121, 14, 7, 237, 120, 14, 7, 237,
-    119, 14, 7, 237, 118, 14, 7, 237, 117, 14, 7, 237, 116, 14, 7, 237, 115,
-    14, 7, 237, 114, 14, 7, 237, 113, 14, 7, 237, 112, 14, 7, 237, 111, 14,
-    7, 237, 110, 14, 7, 237, 109, 14, 7, 237, 108, 14, 7, 237, 107, 14, 7,
-    237, 106, 14, 7, 237, 105, 14, 7, 237, 104, 14, 7, 237, 103, 14, 7, 237,
-    102, 14, 7, 237, 101, 14, 7, 237, 100, 14, 7, 237, 99, 14, 7, 237, 98,
-    14, 7, 237, 97, 14, 7, 237, 96, 14, 7, 237, 95, 14, 7, 237, 94, 14, 7,
-    237, 93, 14, 7, 237, 92, 14, 7, 237, 91, 14, 7, 237, 90, 14, 7, 237, 89,
-    14, 7, 237, 88, 14, 7, 237, 87, 14, 7, 237, 86, 14, 7, 237, 85, 14, 7,
-    236, 48, 14, 7, 236, 47, 14, 7, 236, 46, 14, 7, 236, 45, 14, 7, 236, 44,
-    14, 7, 236, 43, 14, 7, 236, 42, 14, 7, 236, 41, 14, 7, 236, 40, 14, 7,
-    236, 39, 14, 7, 236, 38, 14, 7, 236, 37, 14, 7, 236, 36, 14, 7, 236, 35,
-    14, 7, 236, 34, 14, 7, 236, 33, 14, 7, 236, 32, 14, 7, 236, 31, 14, 7,
-    236, 30, 14, 7, 236, 29, 14, 7, 236, 28, 14, 7, 236, 27, 14, 7, 236, 26,
-    14, 7, 236, 25, 14, 7, 236, 24, 14, 7, 236, 23, 14, 7, 236, 22, 14, 7,
-    236, 21, 14, 7, 236, 20, 14, 7, 236, 19, 14, 7, 236, 18, 14, 7, 236, 17,
-    14, 7, 236, 16, 14, 7, 236, 15, 14, 7, 236, 14, 14, 7, 236, 13, 14, 7,
-    236, 12, 14, 7, 236, 11, 14, 7, 236, 10, 14, 7, 236, 9, 14, 7, 236, 8,
-    14, 7, 236, 7, 14, 7, 236, 6, 14, 7, 236, 5, 14, 7, 236, 4, 14, 7, 236,
-    3, 14, 7, 236, 2, 14, 7, 236, 1, 14, 7, 236, 0, 14, 7, 235, 255, 14, 7,
-    235, 254, 14, 7, 235, 253, 14, 7, 235, 252, 14, 7, 235, 251, 14, 7, 235,
-    250, 14, 7, 235, 249, 14, 7, 235, 248, 14, 7, 235, 247, 14, 7, 235, 246,
-    14, 7, 235, 245, 14, 7, 235, 244, 14, 7, 235, 243, 14, 7, 235, 242, 14,
-    7, 235, 241, 14, 7, 235, 240, 14, 7, 234, 189, 14, 7, 234, 188, 14, 7,
-    234, 187, 14, 7, 234, 186, 14, 7, 234, 185, 14, 7, 234, 184, 14, 7, 234,
-    183, 14, 7, 234, 182, 14, 7, 234, 181, 14, 7, 234, 180, 14, 7, 234, 179,
-    14, 7, 234, 178, 14, 7, 234, 177, 14, 7, 234, 176, 14, 7, 234, 175, 14,
-    7, 234, 174, 14, 7, 234, 173, 14, 7, 234, 172, 14, 7, 234, 171, 14, 7,
-    234, 170, 14, 7, 234, 169, 14, 7, 234, 168, 14, 7, 234, 167, 14, 7, 234,
-    166, 14, 7, 234, 165, 14, 7, 234, 164, 14, 7, 234, 163, 14, 7, 234, 162,
-    14, 7, 234, 161, 14, 7, 234, 160, 14, 7, 234, 159, 14, 7, 234, 158, 14,
-    7, 234, 157, 14, 7, 234, 156, 14, 7, 234, 155, 14, 7, 234, 154, 14, 7,
-    234, 153, 14, 7, 234, 152, 14, 7, 234, 151, 14, 7, 234, 150, 14, 7, 234,
-    149, 14, 7, 234, 148, 14, 7, 234, 147, 14, 7, 234, 146, 14, 7, 234, 145,
-    14, 7, 234, 144, 14, 7, 234, 143, 14, 7, 234, 142, 14, 7, 234, 141, 14,
-    7, 234, 140, 14, 7, 234, 139, 14, 7, 234, 138, 14, 7, 234, 137, 14, 7,
-    234, 136, 14, 7, 234, 135, 14, 7, 234, 134, 14, 7, 234, 133, 14, 7, 234,
-    132, 14, 7, 234, 131, 14, 7, 234, 130, 14, 7, 234, 129, 14, 7, 234, 128,
-    14, 7, 234, 127, 14, 7, 234, 126, 14, 7, 233, 13, 14, 7, 233, 12, 14, 7,
-    233, 11, 14, 7, 233, 10, 14, 7, 233, 9, 14, 7, 233, 8, 14, 7, 233, 7, 14,
-    7, 233, 6, 14, 7, 233, 5, 14, 7, 230, 229, 14, 7, 230, 228, 14, 7, 230,
-    227, 14, 7, 230, 226, 14, 7, 230, 225, 14, 7, 230, 224, 14, 7, 230, 223,
-    14, 7, 230, 222, 14, 7, 230, 221, 14, 7, 230, 220, 14, 7, 230, 219, 14,
-    7, 230, 218, 14, 7, 230, 217, 14, 7, 230, 216, 14, 7, 230, 215, 14, 7,
-    230, 214, 14, 7, 230, 213, 14, 7, 230, 212, 14, 7, 230, 211, 14, 7, 225,
-    79, 14, 7, 225, 78, 14, 7, 225, 77, 14, 7, 225, 76, 14, 7, 225, 75, 14,
-    7, 225, 74, 14, 7, 225, 73, 14, 7, 225, 72, 14, 7, 223, 97, 14, 7, 223,
-    96, 14, 7, 223, 95, 14, 7, 223, 94, 14, 7, 223, 93, 14, 7, 223, 92, 14,
-    7, 223, 91, 14, 7, 223, 90, 14, 7, 223, 89, 14, 7, 223, 88, 14, 7, 221,
-    134, 14, 7, 221, 133, 14, 7, 221, 132, 14, 7, 221, 130, 14, 7, 221, 128,
-    14, 7, 221, 127, 14, 7, 221, 125, 14, 7, 221, 123, 14, 7, 221, 121, 14,
-    7, 221, 119, 14, 7, 221, 117, 14, 7, 221, 115, 14, 7, 221, 113, 14, 7,
-    221, 112, 14, 7, 221, 110, 14, 7, 221, 108, 14, 7, 221, 107, 14, 7, 221,
-    106, 14, 7, 221, 105, 14, 7, 221, 104, 14, 7, 221, 103, 14, 7, 221, 102,
-    14, 7, 221, 101, 14, 7, 221, 100, 14, 7, 221, 98, 14, 7, 221, 96, 14, 7,
-    221, 94, 14, 7, 221, 93, 14, 7, 221, 91, 14, 7, 221, 90, 14, 7, 221, 88,
-    14, 7, 221, 87, 14, 7, 221, 85, 14, 7, 221, 83, 14, 7, 221, 81, 14, 7,
-    221, 79, 14, 7, 221, 77, 14, 7, 221, 76, 14, 7, 221, 74, 14, 7, 221, 72,
-    14, 7, 221, 71, 14, 7, 221, 69, 14, 7, 221, 67, 14, 7, 221, 65, 14, 7,
-    221, 63, 14, 7, 221, 62, 14, 7, 221, 60, 14, 7, 221, 58, 14, 7, 221, 56,
-    14, 7, 221, 55, 14, 7, 221, 53, 14, 7, 221, 51, 14, 7, 221, 50, 14, 7,
-    221, 49, 14, 7, 221, 47, 14, 7, 221, 45, 14, 7, 221, 43, 14, 7, 221, 41,
-    14, 7, 221, 39, 14, 7, 221, 37, 14, 7, 221, 35, 14, 7, 221, 34, 14, 7,
-    221, 32, 14, 7, 221, 30, 14, 7, 221, 28, 14, 7, 221, 26, 14, 7, 218, 50,
-    14, 7, 218, 49, 14, 7, 218, 48, 14, 7, 218, 47, 14, 7, 218, 46, 14, 7,
-    218, 45, 14, 7, 218, 44, 14, 7, 218, 43, 14, 7, 218, 42, 14, 7, 218, 41,
-    14, 7, 218, 40, 14, 7, 218, 39, 14, 7, 218, 38, 14, 7, 218, 37, 14, 7,
-    218, 36, 14, 7, 218, 35, 14, 7, 218, 34, 14, 7, 218, 33, 14, 7, 218, 32,
-    14, 7, 218, 31, 14, 7, 218, 30, 14, 7, 218, 29, 14, 7, 218, 28, 14, 7,
-    218, 27, 14, 7, 218, 26, 14, 7, 218, 25, 14, 7, 218, 24, 14, 7, 218, 23,
-    14, 7, 218, 22, 14, 7, 218, 21, 14, 7, 218, 20, 14, 7, 218, 19, 14, 7,
-    218, 18, 14, 7, 218, 17, 14, 7, 218, 16, 14, 7, 218, 15, 14, 7, 218, 14,
-    14, 7, 218, 13, 14, 7, 218, 12, 14, 7, 218, 11, 14, 7, 218, 10, 14, 7,
-    218, 9, 14, 7, 218, 8, 14, 7, 218, 7, 14, 7, 218, 6, 14, 7, 218, 5, 14,
-    7, 218, 4, 14, 7, 218, 3, 14, 7, 218, 2, 14, 7, 216, 111, 14, 7, 216,
-    110, 14, 7, 216, 109, 14, 7, 216, 108, 14, 7, 216, 107, 14, 7, 216, 106,
-    14, 7, 216, 105, 14, 7, 216, 104, 14, 7, 216, 103, 14, 7, 216, 102, 14,
-    7, 216, 101, 14, 7, 216, 100, 14, 7, 216, 99, 14, 7, 216, 98, 14, 7, 216,
-    97, 14, 7, 216, 96, 14, 7, 216, 95, 14, 7, 216, 94, 14, 7, 216, 93, 14,
-    7, 216, 92, 14, 7, 216, 91, 14, 7, 216, 90, 14, 7, 215, 182, 14, 7, 215,
-    181, 14, 7, 215, 180, 14, 7, 215, 179, 14, 7, 215, 178, 14, 7, 215, 177,
-    14, 7, 215, 176, 14, 7, 215, 175, 14, 7, 215, 174, 14, 7, 215, 173, 14,
-    7, 215, 172, 14, 7, 215, 171, 14, 7, 215, 170, 14, 7, 215, 169, 14, 7,
-    215, 168, 14, 7, 215, 167, 14, 7, 215, 166, 14, 7, 215, 165, 14, 7, 215,
-    164, 14, 7, 215, 163, 14, 7, 215, 162, 14, 7, 215, 161, 14, 7, 215, 160,
-    14, 7, 215, 159, 14, 7, 215, 158, 14, 7, 215, 157, 14, 7, 215, 10, 14, 7,
-    215, 9, 14, 7, 215, 8, 14, 7, 215, 7, 14, 7, 215, 6, 14, 7, 215, 5, 14,
-    7, 215, 4, 14, 7, 215, 3, 14, 7, 215, 2, 14, 7, 215, 1, 14, 7, 215, 0,
-    14, 7, 214, 255, 14, 7, 214, 254, 14, 7, 214, 253, 14, 7, 214, 252, 14,
-    7, 214, 251, 14, 7, 214, 250, 14, 7, 214, 249, 14, 7, 214, 248, 14, 7,
-    214, 247, 14, 7, 214, 246, 14, 7, 214, 245, 14, 7, 214, 244, 14, 7, 214,
-    243, 14, 7, 214, 242, 14, 7, 214, 241, 14, 7, 214, 240, 14, 7, 214, 239,
-    14, 7, 214, 238, 14, 7, 214, 237, 14, 7, 214, 236, 14, 7, 214, 235, 14,
-    7, 214, 234, 14, 7, 214, 233, 14, 7, 214, 232, 14, 7, 214, 231, 14, 7,
-    214, 230, 14, 7, 214, 229, 14, 7, 214, 228, 14, 7, 214, 227, 14, 7, 214,
-    226, 14, 7, 214, 225, 14, 7, 214, 224, 14, 7, 214, 223, 14, 7, 214, 222,
-    14, 7, 214, 221, 14, 7, 214, 220, 14, 7, 214, 219, 14, 7, 214, 218, 14,
-    7, 214, 217, 14, 7, 214, 216, 14, 7, 214, 215, 14, 7, 214, 214, 14, 7,
-    214, 213, 14, 7, 214, 212, 14, 7, 214, 211, 14, 7, 214, 210, 14, 7, 214,
-    209, 14, 7, 214, 208, 14, 7, 214, 207, 14, 7, 214, 206, 14, 7, 214, 205,
-    14, 7, 214, 204, 14, 7, 214, 203, 14, 7, 214, 202, 14, 7, 214, 201, 14,
-    7, 214, 200, 14, 7, 214, 199, 14, 7, 214, 198, 14, 7, 214, 197, 14, 7,
-    214, 196, 14, 7, 214, 195, 14, 7, 214, 194, 14, 7, 214, 193, 14, 7, 214,
-    192, 14, 7, 214, 2, 14, 7, 214, 1, 14, 7, 214, 0, 14, 7, 213, 255, 14, 7,
-    213, 254, 14, 7, 213, 253, 14, 7, 213, 252, 14, 7, 213, 251, 14, 7, 213,
-    250, 14, 7, 213, 249, 14, 7, 213, 248, 14, 7, 213, 247, 14, 7, 213, 246,
-    14, 7, 211, 166, 14, 7, 211, 165, 14, 7, 211, 164, 14, 7, 211, 163, 14,
-    7, 211, 162, 14, 7, 211, 161, 14, 7, 211, 160, 14, 7, 211, 30, 14, 7,
-    211, 29, 14, 7, 211, 28, 14, 7, 211, 27, 14, 7, 211, 26, 14, 7, 211, 25,
-    14, 7, 211, 24, 14, 7, 211, 23, 14, 7, 211, 22, 14, 7, 211, 21, 14, 7,
-    211, 20, 14, 7, 211, 19, 14, 7, 211, 18, 14, 7, 211, 17, 14, 7, 211, 16,
-    14, 7, 211, 15, 14, 7, 211, 14, 14, 7, 211, 13, 14, 7, 211, 12, 14, 7,
-    211, 11, 14, 7, 211, 10, 14, 7, 211, 9, 14, 7, 211, 8, 14, 7, 211, 7, 14,
-    7, 211, 6, 14, 7, 211, 5, 14, 7, 211, 4, 14, 7, 211, 3, 14, 7, 211, 2,
-    14, 7, 211, 1, 14, 7, 211, 0, 14, 7, 210, 255, 14, 7, 210, 254, 14, 7,
-    210, 253, 14, 7, 209, 77, 14, 7, 209, 76, 14, 7, 209, 75, 14, 7, 209, 74,
-    14, 7, 209, 73, 14, 7, 209, 72, 14, 7, 209, 71, 14, 7, 209, 70, 14, 7,
-    209, 69, 14, 7, 209, 68, 14, 7, 209, 67, 14, 7, 209, 66, 14, 7, 209, 65,
-    14, 7, 209, 64, 14, 7, 209, 63, 14, 7, 209, 62, 14, 7, 209, 61, 14, 7,
-    209, 60, 14, 7, 209, 59, 14, 7, 209, 58, 14, 7, 209, 57, 14, 7, 209, 56,
-    14, 7, 209, 55, 14, 7, 209, 54, 14, 7, 209, 53, 14, 7, 209, 52, 14, 7,
-    209, 51, 14, 7, 209, 50, 14, 7, 209, 49, 14, 7, 209, 48, 14, 7, 209, 47,
-    14, 7, 209, 46, 14, 7, 209, 45, 14, 7, 209, 44, 14, 7, 209, 43, 14, 7,
-    209, 42, 14, 7, 209, 41, 14, 7, 209, 40, 14, 7, 209, 39, 14, 7, 209, 38,
-    14, 7, 209, 37, 14, 7, 209, 36, 14, 7, 209, 35, 14, 7, 209, 34, 14, 7,
-    209, 33, 14, 7, 209, 32, 14, 7, 209, 31, 14, 7, 209, 30, 14, 7, 209, 29,
-    14, 7, 209, 28, 14, 7, 209, 27, 14, 7, 209, 26, 14, 7, 209, 25, 14, 7,
-    209, 24, 14, 7, 203, 213, 14, 7, 203, 212, 14, 7, 203, 211, 14, 7, 203,
-    210, 14, 7, 203, 209, 14, 7, 203, 208, 14, 7, 203, 207, 14, 7, 203, 206,
-    14, 7, 203, 205, 14, 7, 203, 204, 14, 7, 203, 203, 14, 7, 203, 202, 14,
-    7, 203, 201, 14, 7, 203, 200, 14, 7, 203, 199, 14, 7, 203, 198, 14, 7,
-    203, 197, 14, 7, 203, 196, 14, 7, 203, 195, 14, 7, 203, 194, 14, 7, 203,
-    193, 14, 7, 203, 192, 14, 7, 203, 191, 14, 7, 203, 190, 14, 7, 203, 189,
-    14, 7, 203, 188, 14, 7, 203, 187, 14, 7, 203, 186, 14, 7, 203, 185, 14,
-    7, 203, 184, 14, 7, 203, 183, 14, 7, 203, 182, 14, 7, 203, 181, 14, 7,
-    203, 180, 14, 7, 203, 179, 14, 7, 203, 178, 14, 7, 203, 177, 14, 7, 203,
-    176, 14, 7, 203, 175, 14, 7, 203, 174, 14, 7, 203, 173, 14, 7, 203, 172,
-    14, 7, 203, 171, 14, 7, 203, 170, 14, 7, 200, 163, 14, 7, 200, 162, 14,
-    7, 200, 161, 14, 7, 200, 160, 14, 7, 200, 159, 14, 7, 200, 158, 14, 7,
-    200, 157, 14, 7, 200, 156, 14, 7, 200, 155, 14, 7, 200, 154, 14, 7, 200,
-    153, 14, 7, 200, 152, 14, 7, 200, 151, 14, 7, 200, 150, 14, 7, 200, 149,
-    14, 7, 200, 148, 14, 7, 200, 147, 14, 7, 200, 146, 14, 7, 200, 145, 14,
-    7, 200, 144, 14, 7, 200, 143, 14, 7, 200, 142, 14, 7, 200, 141, 14, 7,
-    200, 140, 14, 7, 200, 139, 14, 7, 200, 138, 14, 7, 200, 137, 14, 7, 200,
-    136, 14, 7, 200, 135, 14, 7, 200, 134, 14, 7, 200, 133, 14, 7, 200, 132,
-    14, 7, 200, 131, 14, 7, 200, 130, 14, 7, 200, 129, 14, 7, 200, 128, 14,
-    7, 200, 127, 14, 7, 200, 126, 14, 7, 200, 125, 14, 7, 200, 124, 14, 7,
-    200, 123, 14, 7, 200, 122, 14, 7, 200, 121, 14, 7, 200, 120, 14, 7, 200,
-    119, 14, 7, 200, 118, 14, 7, 200, 117, 14, 7, 199, 229, 14, 7, 199, 228,
-    14, 7, 199, 227, 14, 7, 199, 226, 14, 7, 199, 225, 14, 7, 199, 224, 14,
-    7, 199, 223, 14, 7, 199, 222, 14, 7, 199, 221, 14, 7, 199, 220, 14, 7,
-    199, 219, 14, 7, 199, 218, 14, 7, 199, 217, 14, 7, 199, 216, 14, 7, 199,
-    215, 14, 7, 199, 214, 14, 7, 199, 213, 14, 7, 199, 212, 14, 7, 199, 211,
-    14, 7, 199, 210, 14, 7, 199, 209, 14, 7, 199, 208, 14, 7, 199, 207, 14,
-    7, 199, 206, 14, 7, 199, 205, 14, 7, 199, 204, 14, 7, 199, 203, 14, 7,
-    199, 202, 14, 7, 199, 201, 14, 7, 199, 200, 14, 7, 199, 199, 14, 7, 199,
-    198, 14, 7, 199, 197, 14, 7, 199, 196, 14, 7, 199, 195, 14, 7, 199, 194,
-    14, 7, 199, 193, 14, 7, 199, 192, 14, 7, 199, 191, 14, 7, 199, 190, 14,
-    7, 199, 189, 14, 7, 199, 188, 14, 7, 199, 187, 14, 7, 199, 186, 14, 7,
-    199, 185, 14, 7, 199, 184, 14, 7, 199, 183, 14, 7, 199, 182, 14, 7, 199,
-    181, 14, 7, 199, 180, 14, 7, 199, 179, 14, 7, 199, 178, 14, 7, 199, 177,
-    14, 7, 199, 176, 14, 7, 199, 175, 14, 7, 199, 174, 14, 7, 199, 173, 14,
-    7, 199, 172, 14, 7, 199, 171, 14, 7, 199, 170, 14, 7, 199, 169, 14, 7,
-    199, 168, 14, 7, 199, 167, 14, 7, 199, 166, 14, 7, 199, 165, 14, 7, 199,
-    164, 14, 7, 199, 163, 14, 7, 199, 162, 14, 7, 199, 161, 14, 7, 199, 160,
-    14, 7, 199, 159, 14, 7, 199, 158, 14, 7, 199, 157, 14, 7, 199, 156, 14,
-    7, 199, 155, 14, 7, 199, 154, 14, 7, 199, 153, 14, 7, 197, 198, 14, 7,
-    197, 197, 14, 7, 197, 196, 14, 7, 197, 195, 14, 7, 197, 194, 14, 7, 197,
-    193, 14, 7, 197, 192, 14, 7, 197, 191, 14, 7, 197, 190, 14, 7, 197, 189,
-    14, 7, 197, 188, 14, 7, 197, 187, 14, 7, 197, 186, 14, 7, 197, 185, 14,
-    7, 197, 184, 14, 7, 197, 183, 14, 7, 197, 182, 14, 7, 197, 181, 14, 7,
-    197, 180, 14, 7, 197, 179, 14, 7, 197, 178, 14, 7, 197, 177, 14, 7, 197,
-    176, 14, 7, 197, 175, 14, 7, 197, 174, 14, 7, 197, 173, 14, 7, 197, 172,
-    14, 7, 197, 171, 14, 7, 197, 170, 14, 7, 197, 169, 14, 7, 197, 168, 14,
-    7, 197, 167, 14, 7, 196, 220, 14, 7, 196, 219, 14, 7, 196, 218, 14, 7,
-    196, 217, 14, 7, 196, 216, 14, 7, 196, 215, 14, 7, 196, 214, 14, 7, 196,
-    213, 14, 7, 196, 212, 14, 7, 196, 211, 14, 7, 196, 210, 14, 7, 196, 209,
-    14, 7, 196, 146, 14, 7, 196, 145, 14, 7, 196, 144, 14, 7, 196, 143, 14,
-    7, 196, 142, 14, 7, 196, 141, 14, 7, 196, 140, 14, 7, 196, 139, 14, 7,
-    196, 138, 14, 7, 195, 157, 14, 7, 195, 156, 14, 7, 195, 155, 14, 7, 195,
-    154, 14, 7, 195, 153, 14, 7, 195, 152, 14, 7, 195, 151, 14, 7, 195, 150,
-    14, 7, 195, 149, 14, 7, 195, 148, 14, 7, 195, 147, 14, 7, 195, 146, 14,
-    7, 195, 145, 14, 7, 195, 144, 14, 7, 195, 143, 14, 7, 195, 142, 14, 7,
-    195, 141, 14, 7, 195, 140, 14, 7, 195, 139, 14, 7, 195, 138, 14, 7, 195,
-    137, 14, 7, 195, 136, 14, 7, 195, 135, 14, 7, 195, 134, 14, 7, 195, 133,
-    14, 7, 195, 132, 14, 7, 195, 131, 14, 7, 195, 130, 14, 7, 195, 129, 14,
-    7, 195, 128, 14, 7, 195, 127, 14, 7, 195, 126, 14, 7, 195, 125, 14, 7,
-    195, 124, 14, 7, 195, 123, 14, 7, 195, 122, 14, 7, 195, 121, 14, 7, 195,
-    120, 14, 7, 195, 119, 14, 7, 195, 118, 14, 7, 195, 117, 14, 7, 252, 167,
-    14, 7, 252, 166, 14, 7, 252, 165, 14, 7, 252, 164, 14, 7, 252, 163, 14,
-    7, 252, 162, 14, 7, 252, 161, 14, 7, 252, 160, 14, 7, 252, 159, 14, 7,
-    252, 158, 14, 7, 252, 157, 14, 7, 252, 156, 14, 7, 252, 155, 14, 7, 252,
-    154, 14, 7, 252, 153, 14, 7, 252, 152, 14, 7, 252, 151, 14, 7, 252, 150,
-    14, 7, 252, 149, 14, 7, 252, 148, 14, 7, 252, 147, 14, 7, 252, 146, 14,
-    7, 252, 145, 14, 7, 252, 144, 14, 7, 252, 143, 14, 7, 252, 142, 14, 7,
-    252, 141, 14, 7, 252, 140, 14, 7, 252, 139, 14, 7, 252, 138, 14, 7, 252,
-    137, 14, 7, 252, 136, 14, 7, 252, 135, 14, 7, 252, 134, 14, 7, 83, 225,
-    124, 14, 7, 231, 155, 225, 124, 14, 7, 226, 44, 250, 169, 201, 243, 205,
-    2, 14, 7, 226, 44, 250, 169, 248, 85, 205, 2, 14, 7, 226, 44, 250, 169,
-    201, 243, 236, 221, 14, 7, 226, 44, 250, 169, 248, 85, 236, 221, 14, 7,
-    214, 21, 219, 63, 14, 7, 248, 243, 208, 122, 14, 7, 236, 222, 208, 122,
-    28, 7, 255, 161, 28, 7, 255, 160, 28, 7, 255, 159, 28, 7, 255, 158, 28,
-    7, 255, 157, 28, 7, 255, 155, 28, 7, 255, 152, 28, 7, 255, 151, 28, 7,
-    255, 150, 28, 7, 255, 149, 28, 7, 255, 148, 28, 7, 255, 147, 28, 7, 255,
-    146, 28, 7, 255, 145, 28, 7, 255, 144, 28, 7, 255, 142, 28, 7, 255, 141,
-    28, 7, 255, 140, 28, 7, 255, 138, 28, 7, 255, 137, 28, 7, 255, 136, 28,
-    7, 255, 135, 28, 7, 255, 134, 28, 7, 255, 133, 28, 7, 255, 132, 28, 7,
-    255, 131, 28, 7, 255, 130, 28, 7, 255, 129, 28, 7, 255, 128, 28, 7, 255,
-    127, 28, 7, 255, 125, 28, 7, 255, 124, 28, 7, 255, 123, 28, 7, 255, 122,
-    28, 7, 255, 120, 28, 7, 255, 119, 28, 7, 255, 118, 28, 7, 255, 117, 28,
-    7, 255, 116, 28, 7, 255, 115, 28, 7, 255, 114, 28, 7, 255, 113, 28, 7,
-    255, 112, 28, 7, 255, 110, 28, 7, 255, 109, 28, 7, 255, 108, 28, 7, 255,
-    106, 28, 7, 255, 104, 28, 7, 255, 103, 28, 7, 255, 102, 28, 7, 255, 101,
-    28, 7, 255, 100, 28, 7, 255, 99, 28, 7, 255, 98, 28, 7, 255, 97, 28, 7,
-    255, 96, 28, 7, 255, 95, 28, 7, 255, 94, 28, 7, 255, 93, 28, 7, 255, 92,
-    28, 7, 255, 91, 28, 7, 255, 90, 28, 7, 255, 89, 28, 7, 255, 88, 28, 7,
-    255, 87, 28, 7, 255, 86, 28, 7, 255, 85, 28, 7, 255, 84, 28, 7, 255, 83,
-    28, 7, 255, 82, 28, 7, 255, 81, 28, 7, 255, 80, 28, 7, 255, 79, 28, 7,
-    255, 78, 28, 7, 255, 77, 28, 7, 255, 76, 28, 7, 255, 75, 28, 7, 255, 74,
-    28, 7, 255, 73, 28, 7, 255, 72, 28, 7, 255, 71, 28, 7, 255, 70, 28, 7,
-    255, 69, 28, 7, 255, 68, 28, 7, 255, 67, 28, 7, 255, 66, 28, 7, 255, 65,
-    28, 7, 255, 64, 28, 7, 255, 63, 28, 7, 255, 62, 28, 7, 255, 61, 28, 7,
-    255, 60, 28, 7, 255, 59, 28, 7, 255, 58, 28, 7, 255, 57, 28, 7, 255, 56,
-    28, 7, 255, 55, 28, 7, 255, 54, 28, 7, 255, 53, 28, 7, 255, 52, 28, 7,
-    255, 51, 28, 7, 255, 50, 28, 7, 255, 49, 28, 7, 255, 48, 28, 7, 255, 47,
-    28, 7, 255, 46, 28, 7, 255, 45, 28, 7, 255, 44, 28, 7, 255, 43, 28, 7,
-    255, 42, 28, 7, 255, 41, 28, 7, 255, 40, 28, 7, 255, 38, 28, 7, 255, 37,
-    28, 7, 255, 36, 28, 7, 255, 35, 28, 7, 255, 34, 28, 7, 255, 33, 28, 7,
-    255, 32, 28, 7, 255, 31, 28, 7, 255, 30, 28, 7, 255, 29, 28, 7, 255, 28,
-    28, 7, 255, 27, 28, 7, 255, 26, 28, 7, 255, 25, 28, 7, 255, 24, 28, 7,
-    255, 23, 28, 7, 255, 22, 28, 7, 255, 21, 28, 7, 255, 20, 28, 7, 255, 19,
-    28, 7, 255, 18, 28, 7, 255, 17, 28, 7, 255, 16, 28, 7, 255, 15, 28, 7,
-    255, 14, 28, 7, 255, 13, 28, 7, 255, 12, 28, 7, 255, 11, 28, 7, 255, 10,
-    28, 7, 255, 9, 28, 7, 255, 8, 28, 7, 255, 7, 28, 7, 255, 6, 28, 7, 255,
-    5, 28, 7, 255, 3, 28, 7, 255, 2, 28, 7, 255, 1, 28, 7, 255, 0, 28, 7,
-    254, 255, 28, 7, 254, 254, 28, 7, 254, 253, 28, 7, 254, 252, 28, 7, 254,
-    251, 28, 7, 254, 250, 28, 7, 254, 249, 28, 7, 254, 248, 28, 7, 254, 246,
-    28, 7, 254, 245, 28, 7, 254, 244, 28, 7, 254, 243, 28, 7, 254, 242, 28,
-    7, 254, 241, 28, 7, 254, 240, 28, 7, 254, 239, 28, 7, 254, 238, 28, 7,
-    254, 237, 28, 7, 254, 236, 28, 7, 254, 235, 28, 7, 254, 234, 28, 7, 254,
-    233, 28, 7, 254, 232, 28, 7, 254, 231, 28, 7, 254, 230, 28, 7, 254, 229,
-    28, 7, 254, 228, 28, 7, 254, 227, 28, 7, 254, 226, 28, 7, 254, 225, 28,
-    7, 254, 224, 28, 7, 254, 223, 28, 7, 254, 222, 28, 7, 254, 221, 28, 7,
-    254, 220, 28, 7, 254, 219, 28, 7, 254, 218, 28, 7, 254, 217, 28, 7, 254,
-    216, 28, 7, 254, 215, 28, 7, 254, 214, 28, 7, 254, 213, 28, 7, 254, 212,
-    28, 7, 254, 211, 28, 7, 254, 210, 28, 7, 254, 209, 28, 7, 254, 208, 28,
-    7, 254, 207, 28, 7, 254, 206, 28, 7, 254, 205, 28, 7, 254, 204, 28, 7,
-    254, 203, 28, 7, 254, 202, 28, 7, 254, 201, 28, 7, 254, 200, 28, 7, 254,
-    199, 28, 7, 254, 198, 28, 7, 254, 197, 28, 7, 254, 196, 28, 7, 254, 195,
-    28, 7, 254, 194, 28, 7, 254, 193, 28, 7, 254, 192, 28, 7, 254, 191, 28,
-    7, 254, 190, 28, 7, 254, 189, 28, 7, 254, 188, 28, 7, 254, 187, 28, 7,
-    254, 186, 28, 7, 254, 185, 28, 7, 254, 184, 28, 7, 254, 183, 28, 7, 254,
-    182, 28, 7, 254, 181, 28, 7, 254, 180, 28, 7, 254, 179, 28, 7, 254, 178,
-    28, 7, 254, 176, 28, 7, 254, 175, 28, 7, 254, 174, 28, 7, 254, 173, 28,
-    7, 254, 172, 28, 7, 254, 171, 28, 7, 254, 170, 28, 7, 254, 169, 28, 7,
-    254, 168, 28, 7, 254, 167, 28, 7, 254, 166, 28, 7, 254, 165, 28, 7, 254,
-    164, 28, 7, 254, 163, 28, 7, 254, 162, 28, 7, 254, 161, 28, 7, 254, 160,
-    28, 7, 254, 159, 28, 7, 254, 158, 28, 7, 254, 157, 28, 7, 254, 156, 28,
-    7, 254, 155, 28, 7, 254, 154, 28, 7, 254, 153, 28, 7, 254, 152, 28, 7,
-    254, 151, 28, 7, 254, 150, 28, 7, 254, 149, 28, 7, 254, 148, 28, 7, 254,
-    147, 28, 7, 254, 146, 28, 7, 254, 145, 28, 7, 254, 144, 28, 7, 254, 143,
-    28, 7, 254, 142, 28, 7, 254, 141, 28, 7, 254, 140, 28, 7, 254, 139, 28,
-    7, 254, 138, 28, 7, 254, 137, 28, 7, 254, 136, 28, 7, 254, 135, 28, 7,
-    254, 134, 28, 7, 254, 133, 28, 7, 254, 132, 28, 7, 254, 131, 28, 7, 254,
-    130, 28, 7, 254, 129, 28, 7, 254, 128, 28, 7, 254, 127, 28, 7, 254, 126,
-    28, 7, 254, 125, 28, 7, 254, 124, 28, 7, 254, 123, 28, 7, 254, 122, 28,
-    7, 254, 121, 28, 7, 254, 120, 28, 7, 254, 119, 28, 7, 254, 118, 28, 7,
-    254, 117, 28, 7, 254, 116, 28, 7, 254, 115, 28, 7, 254, 114, 28, 7, 254,
-    113, 28, 7, 254, 112, 28, 7, 254, 111, 28, 7, 254, 110, 28, 7, 254, 109,
-    28, 7, 254, 108, 28, 7, 254, 107, 28, 7, 254, 106, 28, 7, 254, 105, 28,
-    7, 254, 104, 28, 7, 254, 103, 28, 7, 254, 102, 28, 7, 254, 101, 28, 7,
-    254, 100, 28, 7, 254, 99, 28, 7, 254, 98, 28, 7, 254, 97, 28, 7, 254, 96,
-    28, 7, 254, 95, 28, 7, 254, 94, 28, 7, 254, 93, 28, 7, 254, 92, 28, 7,
-    254, 91, 28, 7, 254, 90, 28, 7, 254, 89, 28, 7, 254, 88, 28, 7, 254, 87,
-    28, 7, 254, 86, 28, 7, 254, 85, 28, 7, 254, 84, 28, 7, 254, 83, 28, 7,
-    254, 82, 28, 7, 254, 81, 28, 7, 254, 80, 28, 7, 254, 79, 28, 7, 254, 78,
-    28, 7, 254, 77, 28, 7, 254, 76, 28, 7, 254, 75, 28, 7, 254, 74, 28, 7,
-    254, 73, 28, 7, 254, 72, 28, 7, 254, 71, 28, 7, 254, 70, 28, 7, 254, 69,
-    28, 7, 254, 68, 28, 7, 254, 67, 28, 7, 254, 66, 28, 7, 254, 64, 28, 7,
-    254, 63, 28, 7, 254, 62, 28, 7, 254, 61, 28, 7, 254, 60, 28, 7, 254, 59,
-    28, 7, 254, 58, 28, 7, 254, 57, 28, 7, 254, 56, 28, 7, 254, 55, 28, 7,
-    254, 54, 28, 7, 254, 51, 28, 7, 254, 50, 28, 7, 254, 49, 28, 7, 254, 48,
-    28, 7, 254, 44, 28, 7, 254, 43, 28, 7, 254, 42, 28, 7, 254, 41, 28, 7,
-    254, 40, 28, 7, 254, 39, 28, 7, 254, 38, 28, 7, 254, 37, 28, 7, 254, 36,
-    28, 7, 254, 35, 28, 7, 254, 34, 28, 7, 254, 33, 28, 7, 254, 32, 28, 7,
-    254, 31, 28, 7, 254, 30, 28, 7, 254, 29, 28, 7, 254, 28, 28, 7, 254, 27,
-    28, 7, 254, 26, 28, 7, 254, 24, 28, 7, 254, 23, 28, 7, 254, 22, 28, 7,
-    254, 21, 28, 7, 254, 20, 28, 7, 254, 19, 28, 7, 254, 18, 28, 7, 254, 17,
-    28, 7, 254, 16, 28, 7, 254, 15, 28, 7, 254, 14, 28, 7, 254, 13, 28, 7,
-    254, 12, 28, 7, 254, 11, 28, 7, 254, 10, 28, 7, 254, 9, 28, 7, 254, 8,
-    28, 7, 254, 7, 28, 7, 254, 6, 28, 7, 254, 5, 28, 7, 254, 4, 28, 7, 254,
-    3, 28, 7, 254, 2, 28, 7, 254, 1, 28, 7, 254, 0, 28, 7, 253, 255, 28, 7,
-    253, 254, 28, 7, 253, 253, 28, 7, 253, 252, 28, 7, 253, 251, 28, 7, 253,
-    250, 28, 7, 253, 249, 28, 7, 253, 248, 28, 7, 253, 247, 28, 7, 253, 246,
-    28, 7, 253, 245, 28, 7, 253, 244, 28, 7, 253, 243, 28, 7, 253, 242, 28,
-    7, 253, 241, 28, 7, 253, 240, 28, 7, 253, 239, 28, 7, 253, 238, 28, 7,
-    253, 237, 28, 7, 253, 236, 28, 7, 253, 235, 28, 7, 253, 234, 28, 7, 253,
-    233, 28, 7, 253, 232, 28, 7, 253, 231, 28, 7, 253, 230, 28, 7, 253, 229,
-    28, 7, 253, 228, 28, 7, 253, 227, 28, 7, 253, 226, 28, 7, 253, 225, 28,
-    7, 253, 224, 28, 7, 253, 223, 28, 7, 253, 222, 28, 7, 253, 221, 28, 7,
-    253, 220, 28, 7, 253, 219, 210, 252, 214, 73, 210, 72, 28, 7, 253, 218,
-    28, 7, 253, 217, 28, 7, 253, 216, 28, 7, 253, 215, 28, 7, 253, 214, 28,
-    7, 253, 213, 28, 7, 253, 212, 28, 7, 253, 211, 28, 7, 253, 210, 28, 7,
-    253, 209, 28, 7, 253, 208, 28, 7, 253, 207, 171, 28, 7, 253, 206, 28, 7,
-    253, 205, 28, 7, 253, 204, 28, 7, 253, 203, 28, 7, 253, 202, 28, 7, 253,
-    201, 28, 7, 253, 200, 28, 7, 253, 198, 28, 7, 253, 196, 28, 7, 253, 194,
-    28, 7, 253, 192, 28, 7, 253, 190, 28, 7, 253, 188, 28, 7, 253, 186, 28,
-    7, 253, 184, 28, 7, 253, 182, 28, 7, 253, 180, 248, 243, 221, 248, 78,
-    28, 7, 253, 178, 236, 222, 221, 248, 78, 28, 7, 253, 177, 28, 7, 253,
-    175, 28, 7, 253, 173, 28, 7, 253, 171, 28, 7, 253, 169, 28, 7, 253, 167,
-    28, 7, 253, 165, 28, 7, 253, 163, 28, 7, 253, 161, 28, 7, 253, 160, 28,
-    7, 253, 159, 28, 7, 253, 158, 28, 7, 253, 157, 28, 7, 253, 156, 28, 7,
-    253, 155, 28, 7, 253, 154, 28, 7, 253, 153, 28, 7, 253, 152, 28, 7, 253,
-    151, 28, 7, 253, 150, 28, 7, 253, 149, 28, 7, 253, 148, 28, 7, 253, 147,
-    28, 7, 253, 146, 28, 7, 253, 145, 28, 7, 253, 144, 28, 7, 253, 143, 28,
-    7, 253, 142, 28, 7, 253, 141, 28, 7, 253, 140, 28, 7, 253, 139, 28, 7,
-    253, 138, 28, 7, 253, 137, 28, 7, 253, 136, 28, 7, 253, 135, 28, 7, 253,
-    134, 28, 7, 253, 133, 28, 7, 253, 132, 28, 7, 253, 131, 28, 7, 253, 130,
-    28, 7, 253, 129, 28, 7, 253, 128, 28, 7, 253, 127, 28, 7, 253, 126, 28,
-    7, 253, 125, 28, 7, 253, 124, 28, 7, 253, 123, 28, 7, 253, 122, 28, 7,
-    253, 121, 28, 7, 253, 120, 28, 7, 253, 119, 28, 7, 253, 118, 28, 7, 253,
-    117, 28, 7, 253, 116, 28, 7, 253, 115, 28, 7, 253, 114, 28, 7, 253, 113,
-    28, 7, 253, 112, 28, 7, 253, 111, 28, 7, 253, 110, 28, 7, 253, 109, 28,
-    7, 253, 108, 28, 7, 253, 107, 28, 7, 253, 106, 28, 7, 253, 105, 28, 7,
-    253, 104, 28, 7, 253, 103, 28, 7, 253, 102, 28, 7, 253, 101, 28, 7, 253,
-    100, 28, 7, 253, 99, 28, 7, 253, 98, 28, 7, 253, 97, 28, 7, 253, 96, 28,
-    7, 253, 95, 28, 7, 253, 94, 28, 7, 253, 93, 28, 7, 253, 92, 28, 7, 253,
-    91, 28, 7, 253, 90, 28, 7, 253, 89, 28, 7, 253, 88, 28, 7, 253, 87, 28,
-    7, 253, 86, 28, 7, 253, 85, 28, 7, 253, 84, 28, 7, 253, 83, 28, 7, 253,
-    82, 28, 7, 253, 81, 28, 7, 253, 80, 28, 7, 253, 79, 28, 7, 253, 78, 28,
-    7, 253, 77, 28, 7, 253, 76, 28, 7, 253, 75, 28, 7, 253, 74, 28, 7, 253,
-    73, 28, 7, 253, 72, 28, 7, 253, 71, 28, 7, 253, 70, 28, 7, 253, 69, 28,
-    7, 253, 68, 28, 7, 253, 67, 28, 7, 253, 66, 28, 7, 253, 65, 28, 7, 253,
-    64, 28, 7, 253, 63, 28, 7, 253, 62, 28, 7, 253, 61, 28, 7, 253, 60, 28,
-    7, 253, 59, 28, 7, 253, 58, 28, 7, 253, 57, 28, 7, 253, 56, 28, 7, 253,
-    55, 28, 7, 253, 54, 28, 7, 253, 53, 28, 7, 253, 52, 28, 7, 253, 51, 25,
-    1, 212, 252, 217, 4, 219, 120, 25, 1, 212, 252, 234, 56, 235, 43, 25, 1,
-    212, 252, 212, 94, 219, 121, 212, 167, 25, 1, 212, 252, 212, 94, 219,
-    121, 212, 168, 25, 1, 212, 252, 217, 245, 219, 120, 25, 1, 212, 252, 206,
-    146, 25, 1, 212, 252, 202, 56, 219, 120, 25, 1, 212, 252, 215, 55, 219,
-    120, 25, 1, 212, 252, 206, 210, 213, 244, 216, 148, 25, 1, 212, 252, 212,
-    94, 213, 244, 216, 149, 212, 167, 25, 1, 212, 252, 212, 94, 213, 244,
-    216, 149, 212, 168, 25, 1, 212, 252, 220, 99, 25, 1, 212, 252, 201, 41,
-    220, 100, 25, 1, 212, 252, 217, 65, 25, 1, 212, 252, 220, 96, 25, 1, 212,
-    252, 220, 49, 25, 1, 212, 252, 218, 78, 25, 1, 212, 252, 207, 73, 25, 1,
-    212, 252, 215, 195, 25, 1, 212, 252, 224, 165, 25, 1, 212, 252, 216, 115,
-    25, 1, 212, 252, 204, 74, 25, 1, 212, 252, 217, 3, 25, 1, 212, 252, 222,
-    230, 25, 1, 212, 252, 222, 137, 223, 145, 25, 1, 212, 252, 215, 205, 219,
-    128, 25, 1, 212, 252, 220, 103, 25, 1, 212, 252, 213, 125, 25, 1, 212,
-    252, 233, 211, 25, 1, 212, 252, 213, 195, 25, 1, 212, 252, 218, 216, 217,
-    38, 25, 1, 212, 252, 215, 36, 219, 131, 25, 1, 212, 252, 118, 195, 187,
-    217, 238, 25, 1, 212, 252, 233, 212, 25, 1, 212, 252, 215, 205, 215, 206,
-    25, 1, 212, 252, 206, 32, 25, 1, 212, 252, 219, 113, 25, 1, 212, 252,
-    219, 134, 25, 1, 212, 252, 218, 191, 25, 1, 212, 252, 225, 34, 25, 1,
-    212, 252, 213, 244, 222, 185, 25, 1, 212, 252, 217, 160, 222, 185, 25, 1,
-    212, 252, 213, 18, 25, 1, 212, 252, 220, 97, 25, 1, 212, 252, 216, 189,
-    25, 1, 212, 252, 211, 206, 25, 1, 212, 252, 201, 33, 25, 1, 212, 252,
-    221, 187, 25, 1, 212, 252, 205, 172, 25, 1, 212, 252, 202, 242, 25, 1,
-    212, 252, 220, 94, 25, 1, 212, 252, 224, 172, 25, 1, 212, 252, 217, 156,
-    25, 1, 212, 252, 223, 159, 25, 1, 212, 252, 218, 192, 25, 1, 212, 252,
-    206, 142, 25, 1, 212, 252, 221, 241, 25, 1, 212, 252, 235, 114, 25, 1,
-    212, 252, 209, 209, 25, 1, 212, 252, 223, 212, 25, 1, 212, 252, 205, 168,
-    25, 1, 212, 252, 220, 44, 212, 210, 25, 1, 212, 252, 206, 203, 25, 1,
-    212, 252, 215, 204, 25, 1, 212, 252, 206, 184, 215, 216, 195, 195, 25, 1,
-    212, 252, 215, 77, 218, 212, 25, 1, 212, 252, 213, 239, 25, 1, 212, 252,
-    216, 117, 25, 1, 212, 252, 200, 44, 25, 1, 212, 252, 217, 41, 25, 1, 212,
-    252, 220, 93, 25, 1, 212, 252, 216, 160, 25, 1, 212, 252, 219, 236, 25,
-    1, 212, 252, 215, 92, 25, 1, 212, 252, 202, 246, 25, 1, 212, 252, 205,
-    165, 25, 1, 212, 252, 213, 240, 25, 1, 212, 252, 215, 220, 25, 1, 212,
-    252, 220, 101, 25, 1, 212, 252, 215, 89, 25, 1, 212, 252, 224, 252, 25,
-    1, 212, 252, 215, 223, 25, 1, 212, 252, 199, 113, 25, 1, 212, 252, 221,
-    191, 25, 1, 212, 252, 217, 101, 25, 1, 212, 252, 217, 212, 25, 1, 212,
-    252, 219, 235, 25, 1, 212, 251, 215, 218, 25, 1, 212, 251, 201, 41, 220,
-    98, 25, 1, 212, 251, 206, 94, 25, 1, 212, 251, 207, 77, 201, 40, 25, 1,
-    212, 251, 221, 243, 215, 201, 25, 1, 212, 251, 219, 242, 220, 102, 25, 1,
-    212, 251, 224, 85, 25, 1, 212, 251, 196, 32, 25, 1, 212, 251, 219, 237,
-    25, 1, 212, 251, 225, 20, 25, 1, 212, 251, 213, 75, 25, 1, 212, 251, 196,
-    115, 222, 185, 25, 1, 212, 251, 222, 250, 215, 216, 215, 103, 25, 1, 212,
-    251, 215, 198, 206, 229, 25, 1, 212, 251, 217, 127, 216, 163, 25, 1, 212,
-    251, 233, 209, 25, 1, 212, 251, 212, 157, 25, 1, 212, 251, 201, 41, 215,
-    214, 25, 1, 212, 251, 206, 234, 216, 158, 25, 1, 212, 251, 206, 230, 25,
-    1, 212, 251, 219, 121, 202, 245, 25, 1, 212, 251, 219, 224, 219, 238, 25,
-    1, 212, 251, 215, 90, 215, 201, 25, 1, 212, 251, 224, 161, 25, 1, 212,
-    251, 233, 210, 25, 1, 212, 251, 224, 157, 25, 1, 212, 251, 223, 77, 25,
-    1, 212, 251, 213, 128, 25, 1, 212, 251, 199, 42, 25, 1, 212, 251, 217, 5,
-    218, 76, 25, 1, 212, 251, 217, 40, 219, 220, 25, 1, 212, 251, 196, 241,
-    25, 1, 212, 251, 208, 247, 25, 1, 212, 251, 203, 158, 25, 1, 212, 251,
-    219, 133, 25, 1, 212, 251, 217, 24, 25, 1, 212, 251, 217, 25, 222, 227,
-    25, 1, 212, 251, 219, 123, 25, 1, 212, 251, 204, 127, 25, 1, 212, 251,
-    219, 228, 25, 1, 212, 251, 218, 196, 25, 1, 212, 251, 215, 107, 25, 1,
-    212, 251, 211, 210, 25, 1, 212, 251, 219, 132, 217, 42, 25, 1, 212, 251,
-    235, 158, 25, 1, 212, 251, 219, 215, 25, 1, 212, 251, 235, 182, 25, 1,
-    212, 251, 224, 169, 25, 1, 212, 251, 220, 128, 216, 152, 25, 1, 212, 251,
-    220, 128, 216, 128, 25, 1, 212, 251, 222, 136, 25, 1, 212, 251, 217, 48,
-    25, 1, 212, 251, 215, 225, 25, 1, 212, 251, 166, 25, 1, 212, 251, 224,
-    68, 25, 1, 212, 251, 216, 249, 25, 1, 193, 217, 4, 220, 100, 25, 1, 193,
-    215, 54, 25, 1, 193, 195, 195, 25, 1, 193, 197, 143, 25, 1, 193, 217, 41,
-    25, 1, 193, 217, 148, 25, 1, 193, 217, 11, 25, 1, 193, 233, 219, 25, 1,
-    193, 219, 232, 25, 1, 193, 234, 63, 25, 1, 193, 215, 79, 219, 4, 219,
-    135, 25, 1, 193, 215, 192, 219, 223, 25, 1, 193, 219, 229, 25, 1, 193,
-    212, 163, 25, 1, 193, 217, 133, 25, 1, 193, 219, 240, 247, 170, 25, 1,
-    193, 224, 159, 25, 1, 193, 233, 220, 25, 1, 193, 224, 166, 25, 1, 193,
-    195, 218, 218, 109, 25, 1, 193, 215, 48, 25, 1, 193, 219, 217, 25, 1,
-    193, 215, 224, 25, 1, 193, 219, 223, 25, 1, 193, 196, 33, 25, 1, 193,
-    223, 220, 25, 1, 193, 225, 55, 25, 1, 193, 207, 72, 25, 1, 193, 217, 142,
-    25, 1, 193, 203, 156, 25, 1, 193, 216, 132, 25, 1, 193, 202, 56, 195,
-    199, 25, 1, 193, 204, 159, 25, 1, 193, 217, 31, 215, 103, 25, 1, 193,
-    199, 41, 25, 1, 193, 217, 215, 25, 1, 193, 220, 128, 224, 168, 25, 1,
-    193, 215, 206, 25, 1, 193, 217, 26, 25, 1, 193, 222, 231, 25, 1, 193,
-    219, 225, 25, 1, 193, 219, 112, 25, 1, 193, 215, 200, 25, 1, 193, 202,
-    241, 25, 1, 193, 217, 28, 25, 1, 193, 234, 221, 25, 1, 193, 217, 147, 25,
-    1, 193, 215, 226, 25, 1, 193, 215, 222, 25, 1, 193, 247, 253, 25, 1, 193,
-    199, 43, 25, 1, 193, 219, 230, 25, 1, 193, 209, 140, 25, 1, 193, 216,
-    162, 25, 1, 193, 222, 249, 25, 1, 193, 202, 53, 25, 1, 193, 215, 208,
-    216, 249, 25, 1, 193, 216, 154, 25, 1, 193, 224, 172, 25, 1, 193, 217,
-    33, 25, 1, 193, 220, 93, 25, 1, 193, 219, 218, 25, 1, 193, 221, 191, 25,
-    1, 193, 223, 145, 25, 1, 193, 216, 160, 25, 1, 193, 216, 249, 25, 1, 193,
-    196, 231, 25, 1, 193, 217, 29, 25, 1, 193, 215, 211, 25, 1, 193, 215,
-    202, 25, 1, 193, 223, 161, 216, 117, 25, 1, 193, 215, 209, 25, 1, 193,
-    217, 155, 25, 1, 193, 220, 128, 215, 214, 25, 1, 193, 196, 129, 25, 1,
-    193, 217, 154, 25, 1, 193, 206, 145, 25, 1, 193, 207, 75, 25, 1, 193,
-    219, 226, 25, 1, 193, 220, 100, 25, 1, 193, 219, 236, 25, 1, 193, 224,
-    160, 25, 1, 193, 219, 227, 25, 1, 193, 224, 164, 25, 1, 193, 219, 240,
-    212, 215, 25, 1, 193, 195, 178, 25, 1, 193, 216, 150, 25, 1, 193, 219,
-    59, 25, 1, 193, 218, 139, 25, 1, 193, 206, 206, 25, 1, 193, 224, 183,
-    222, 209, 25, 1, 193, 224, 183, 235, 195, 25, 1, 193, 217, 63, 25, 1,
-    193, 217, 212, 25, 1, 193, 222, 57, 25, 1, 193, 212, 176, 25, 1, 193,
-    213, 65, 25, 1, 193, 203, 1, 25, 1, 148, 219, 216, 25, 1, 148, 197, 141,
-    25, 1, 148, 216, 148, 25, 1, 148, 219, 120, 25, 1, 148, 216, 146, 25, 1,
-    148, 222, 102, 25, 1, 148, 216, 151, 25, 1, 148, 215, 221, 25, 1, 148,
-    217, 47, 25, 1, 148, 215, 103, 25, 1, 148, 196, 242, 25, 1, 148, 217, 1,
-    25, 1, 148, 206, 253, 25, 1, 148, 217, 12, 25, 1, 148, 224, 167, 25, 1,
-    148, 202, 243, 25, 1, 148, 206, 232, 25, 1, 148, 216, 159, 25, 1, 148,
-    204, 127, 25, 1, 148, 224, 172, 25, 1, 148, 196, 117, 25, 1, 148, 223,
-    162, 25, 1, 148, 208, 207, 25, 1, 148, 219, 125, 25, 1, 148, 217, 146,
-    25, 1, 148, 220, 65, 25, 1, 148, 219, 131, 25, 1, 148, 207, 74, 25, 1,
-    148, 196, 59, 25, 1, 148, 216, 153, 25, 1, 148, 224, 163, 219, 219, 25,
-    1, 148, 217, 8, 25, 1, 148, 201, 40, 25, 1, 148, 233, 229, 25, 1, 148,
-    216, 254, 25, 1, 148, 235, 159, 25, 1, 148, 217, 150, 25, 1, 148, 219,
-    104, 25, 1, 148, 222, 130, 25, 1, 148, 217, 132, 25, 1, 148, 218, 211,
-    25, 1, 148, 219, 108, 25, 1, 148, 211, 190, 25, 1, 148, 219, 106, 25, 1,
-    148, 219, 122, 25, 1, 148, 221, 174, 25, 1, 148, 215, 213, 25, 1, 148,
-    219, 239, 25, 1, 148, 223, 134, 25, 1, 148, 215, 92, 25, 1, 148, 202,
-    246, 25, 1, 148, 205, 165, 25, 1, 148, 195, 178, 25, 1, 148, 224, 164,
-    25, 1, 148, 210, 228, 25, 1, 148, 203, 47, 25, 1, 148, 217, 9, 25, 1,
-    148, 219, 127, 25, 1, 148, 215, 212, 25, 1, 148, 224, 162, 25, 1, 148,
-    212, 169, 25, 1, 148, 213, 11, 25, 1, 148, 215, 65, 25, 1, 148, 222, 136,
-    25, 1, 148, 217, 48, 25, 1, 148, 219, 124, 25, 1, 148, 217, 21, 25, 1,
-    148, 195, 192, 25, 1, 148, 213, 163, 25, 1, 148, 195, 191, 25, 1, 148,
-    217, 155, 25, 1, 148, 215, 201, 25, 1, 148, 204, 161, 25, 1, 148, 223,
-    166, 25, 1, 148, 217, 37, 25, 1, 148, 217, 6, 25, 1, 148, 201, 15, 25, 1,
-    148, 219, 135, 25, 1, 148, 223, 156, 25, 1, 148, 215, 210, 25, 1, 148,
-    202, 244, 25, 1, 148, 220, 95, 25, 1, 148, 217, 46, 25, 1, 148, 222, 129,
-    25, 1, 148, 217, 27, 25, 1, 148, 215, 215, 25, 1, 148, 216, 132, 25, 1,
-    148, 233, 213, 25, 1, 148, 223, 187, 25, 1, 148, 210, 127, 214, 133, 25,
-    1, 148, 203, 145, 25, 1, 148, 201, 239, 25, 1, 148, 215, 89, 25, 1, 148,
-    210, 9, 25, 1, 148, 222, 187, 25, 1, 148, 219, 187, 25, 1, 148, 221, 136,
-    25, 1, 148, 204, 74, 25, 1, 148, 218, 145, 25, 1, 148, 206, 218, 25, 1,
-    148, 206, 228, 25, 1, 148, 223, 106, 25, 1, 148, 215, 186, 25, 1, 148,
-    206, 151, 25, 1, 148, 215, 203, 25, 1, 148, 213, 79, 25, 1, 148, 216,
-    223, 25, 1, 148, 206, 183, 25, 1, 148, 211, 205, 25, 1, 148, 218, 76, 25,
-    1, 148, 221, 221, 25, 1, 148, 210, 127, 218, 134, 25, 1, 148, 202, 122,
-    25, 1, 148, 215, 189, 25, 1, 148, 219, 240, 178, 25, 1, 148, 208, 205,
-    25, 1, 148, 235, 238, 25, 1, 104, 217, 154, 25, 1, 104, 201, 245, 25, 1,
-    104, 219, 229, 25, 1, 104, 222, 231, 25, 1, 104, 198, 235, 25, 1, 104,
-    221, 227, 25, 1, 104, 213, 243, 25, 1, 104, 205, 176, 25, 1, 104, 210,
-    202, 25, 1, 104, 215, 217, 25, 1, 104, 217, 125, 25, 1, 104, 211, 223,
-    25, 1, 104, 203, 117, 25, 1, 104, 217, 14, 25, 1, 104, 223, 216, 25, 1,
-    104, 196, 234, 25, 1, 104, 208, 129, 25, 1, 104, 217, 38, 25, 1, 104,
-    213, 240, 25, 1, 104, 201, 247, 25, 1, 104, 223, 160, 25, 1, 104, 221,
-    242, 25, 1, 104, 215, 220, 25, 1, 104, 216, 246, 25, 1, 104, 220, 101,
-    25, 1, 104, 217, 7, 25, 1, 104, 216, 245, 25, 1, 104, 215, 219, 25, 1,
-    104, 210, 6, 25, 1, 104, 216, 150, 25, 1, 104, 213, 77, 25, 1, 104, 209,
-    13, 25, 1, 104, 217, 22, 25, 1, 104, 219, 114, 25, 1, 104, 233, 207, 25,
-    1, 104, 217, 10, 25, 1, 104, 216, 161, 25, 1, 104, 220, 43, 25, 1, 104,
-    221, 223, 25, 1, 104, 217, 43, 25, 1, 104, 217, 138, 25, 1, 104, 203,
-    144, 215, 201, 25, 1, 104, 207, 76, 25, 1, 104, 211, 216, 25, 1, 104,
-    217, 158, 205, 184, 25, 1, 104, 217, 30, 215, 103, 25, 1, 104, 196, 20,
-    25, 1, 104, 233, 208, 25, 1, 104, 201, 34, 25, 1, 104, 196, 36, 25, 1,
-    104, 212, 117, 25, 1, 104, 201, 21, 25, 1, 104, 224, 170, 25, 1, 104,
-    204, 160, 25, 1, 104, 202, 245, 25, 1, 104, 199, 44, 25, 1, 104, 197, 84,
-    25, 1, 104, 223, 80, 25, 1, 104, 211, 227, 25, 1, 104, 203, 157, 25, 1,
-    104, 233, 228, 25, 1, 104, 217, 53, 25, 1, 104, 206, 231, 25, 1, 104,
-    219, 109, 25, 1, 104, 219, 233, 25, 1, 104, 215, 52, 25, 1, 104, 216,
-    113, 25, 1, 104, 234, 59, 25, 1, 104, 201, 22, 25, 1, 104, 223, 170, 25,
-    1, 104, 196, 93, 25, 1, 104, 215, 90, 244, 220, 25, 1, 104, 196, 9, 25,
-    1, 104, 219, 126, 25, 1, 104, 217, 143, 25, 1, 104, 212, 211, 25, 1, 104,
-    195, 198, 25, 1, 104, 222, 131, 25, 1, 104, 234, 221, 25, 1, 104, 234,
-    58, 25, 1, 104, 217, 0, 25, 1, 104, 224, 172, 25, 1, 104, 220, 104, 25,
-    1, 104, 217, 13, 25, 1, 104, 233, 214, 25, 1, 104, 235, 239, 25, 1, 104,
-    215, 190, 25, 1, 104, 213, 12, 25, 1, 104, 196, 34, 25, 1, 104, 217, 39,
-    25, 1, 104, 215, 90, 248, 203, 25, 1, 104, 215, 32, 25, 1, 104, 212, 89,
-    25, 1, 104, 219, 59, 25, 1, 104, 234, 219, 25, 1, 104, 217, 238, 25, 1,
-    104, 218, 139, 25, 1, 104, 233, 213, 25, 1, 104, 234, 224, 68, 25, 1,
-    104, 218, 77, 25, 1, 104, 211, 222, 25, 1, 104, 217, 2, 25, 1, 104, 223,
-    145, 25, 1, 104, 212, 208, 25, 1, 104, 215, 204, 25, 1, 104, 196, 35, 25,
-    1, 104, 217, 23, 25, 1, 104, 213, 244, 213, 51, 25, 1, 104, 234, 224,
-    247, 152, 25, 1, 104, 235, 44, 25, 1, 104, 216, 155, 25, 1, 104, 63, 25,
-    1, 104, 201, 239, 25, 1, 104, 72, 25, 1, 104, 68, 25, 1, 104, 222, 229,
-    25, 1, 104, 213, 244, 212, 126, 25, 1, 104, 203, 162, 25, 1, 104, 203,
-    102, 25, 1, 104, 217, 158, 218, 64, 231, 87, 25, 1, 104, 206, 206, 25, 1,
-    104, 196, 31, 25, 1, 104, 216, 239, 25, 1, 104, 195, 203, 25, 1, 104,
-    195, 235, 204, 53, 25, 1, 104, 195, 235, 241, 86, 25, 1, 104, 195, 186,
-    25, 1, 104, 195, 194, 25, 1, 104, 224, 158, 25, 1, 104, 213, 10, 25, 1,
-    104, 216, 156, 236, 176, 25, 1, 104, 211, 218, 25, 1, 104, 196, 240, 25,
-    1, 104, 235, 182, 25, 1, 104, 199, 113, 25, 1, 104, 221, 191, 25, 1, 104,
-    219, 78, 25, 1, 104, 210, 91, 25, 1, 104, 210, 229, 25, 1, 104, 216, 238,
-    25, 1, 104, 217, 71, 25, 1, 104, 206, 198, 25, 1, 104, 206, 183, 25, 1,
-    104, 234, 224, 210, 130, 25, 1, 104, 176, 25, 1, 104, 212, 220, 25, 1,
-    104, 221, 221, 25, 1, 104, 224, 11, 25, 1, 104, 219, 164, 25, 1, 104,
-    166, 25, 1, 104, 220, 40, 25, 1, 104, 202, 247, 25, 1, 104, 224, 101, 25,
-    1, 104, 218, 215, 25, 1, 104, 203, 23, 25, 1, 104, 235, 206, 25, 1, 104,
-    233, 201, 25, 1, 212, 250, 155, 25, 1, 212, 250, 66, 25, 1, 212, 250,
-    223, 187, 25, 1, 212, 250, 237, 54, 25, 1, 212, 250, 210, 155, 25, 1,
-    212, 250, 203, 145, 25, 1, 212, 250, 215, 89, 25, 1, 212, 250, 172, 25,
-    1, 212, 250, 210, 9, 25, 1, 212, 250, 210, 57, 25, 1, 212, 250, 219, 187,
-    25, 1, 212, 250, 203, 162, 25, 1, 212, 250, 217, 157, 25, 1, 212, 250,
-    216, 162, 25, 1, 212, 250, 221, 136, 25, 1, 212, 250, 204, 74, 25, 1,
-    212, 250, 206, 218, 25, 1, 212, 250, 206, 112, 25, 1, 212, 250, 207, 72,
-    25, 1, 212, 250, 223, 106, 25, 1, 212, 250, 224, 172, 25, 1, 212, 250,
-    215, 154, 25, 1, 212, 250, 215, 186, 25, 1, 212, 250, 216, 133, 25, 1,
-    212, 250, 195, 234, 25, 1, 212, 250, 206, 151, 25, 1, 212, 250, 164, 25,
-    1, 212, 250, 215, 223, 25, 1, 212, 250, 213, 10, 25, 1, 212, 250, 215,
-    203, 25, 1, 212, 250, 196, 240, 25, 1, 212, 250, 213, 79, 25, 1, 212,
-    250, 209, 140, 25, 1, 212, 250, 216, 223, 25, 1, 212, 250, 210, 91, 25,
-    1, 212, 250, 224, 182, 25, 1, 212, 250, 216, 255, 25, 1, 212, 250, 217,
-    50, 25, 1, 212, 250, 206, 198, 25, 1, 212, 250, 211, 223, 25, 1, 212,
-    250, 235, 44, 25, 1, 212, 250, 197, 166, 25, 1, 212, 250, 222, 109, 25,
-    1, 212, 250, 221, 221, 25, 1, 212, 250, 224, 11, 25, 1, 212, 250, 219,
-    231, 25, 1, 212, 250, 210, 126, 25, 1, 212, 250, 166, 25, 1, 212, 250,
-    218, 251, 25, 1, 212, 250, 219, 239, 25, 1, 212, 250, 203, 1, 25, 1, 212,
-    250, 223, 223, 25, 1, 212, 250, 208, 227, 25, 1, 212, 250, 197, 219, 218,
-    149, 1, 189, 218, 149, 1, 217, 19, 218, 149, 1, 196, 3, 218, 149, 1, 219,
-    25, 218, 149, 1, 249, 145, 218, 149, 1, 240, 136, 218, 149, 1, 63, 218,
-    149, 1, 212, 246, 218, 149, 1, 224, 141, 218, 149, 1, 232, 178, 218, 149,
-    1, 240, 111, 218, 149, 1, 245, 30, 218, 149, 1, 224, 202, 218, 149, 1,
-    214, 134, 218, 149, 1, 220, 101, 218, 149, 1, 216, 183, 218, 149, 1, 161,
-    218, 149, 1, 214, 102, 218, 149, 1, 72, 218, 149, 1, 209, 232, 218, 149,
-    1, 206, 223, 218, 149, 1, 202, 216, 218, 149, 1, 237, 82, 218, 149, 1,
-    197, 166, 218, 149, 1, 69, 218, 149, 1, 224, 11, 218, 149, 1, 222, 238,
-    218, 149, 1, 172, 218, 149, 1, 232, 235, 218, 149, 1, 210, 72, 218, 149,
-    1, 203, 37, 218, 149, 17, 195, 79, 218, 149, 17, 100, 218, 149, 17, 102,
-    218, 149, 17, 134, 218, 149, 17, 136, 218, 149, 17, 146, 218, 149, 17,
-    167, 218, 149, 17, 178, 218, 149, 17, 171, 218, 149, 17, 182, 218, 149,
-    240, 88, 218, 149, 52, 240, 88, 249, 59, 199, 149, 1, 236, 211, 249, 59,
-    199, 149, 1, 155, 249, 59, 199, 149, 1, 208, 147, 249, 59, 199, 149, 1,
-    235, 239, 249, 59, 199, 149, 1, 219, 234, 249, 59, 199, 149, 1, 196, 21,
-    249, 59, 199, 149, 1, 234, 108, 249, 59, 199, 149, 1, 239, 157, 249, 59,
-    199, 149, 1, 223, 222, 249, 59, 199, 149, 1, 225, 129, 249, 59, 199, 149,
-    1, 231, 42, 249, 59, 199, 149, 1, 197, 166, 249, 59, 199, 149, 1, 195,
-    11, 249, 59, 199, 149, 1, 234, 52, 249, 59, 199, 149, 1, 239, 28, 249,
-    59, 199, 149, 1, 247, 57, 249, 59, 199, 149, 1, 199, 238, 249, 59, 199,
-    149, 1, 149, 249, 59, 199, 149, 1, 249, 145, 249, 59, 199, 149, 1, 197,
-    220, 249, 59, 199, 149, 1, 196, 63, 249, 59, 199, 149, 1, 161, 249, 59,
-    199, 149, 1, 197, 158, 249, 59, 199, 149, 1, 63, 249, 59, 199, 149, 1,
-    72, 249, 59, 199, 149, 1, 214, 102, 249, 59, 199, 149, 1, 66, 249, 59,
-    199, 149, 1, 237, 54, 249, 59, 199, 149, 1, 69, 249, 59, 199, 149, 1, 68,
-    249, 59, 199, 149, 38, 130, 202, 11, 249, 59, 199, 149, 38, 126, 202, 11,
-    249, 59, 199, 149, 38, 219, 65, 202, 11, 249, 59, 199, 149, 38, 221, 205,
-    202, 11, 249, 59, 199, 149, 38, 232, 46, 202, 11, 249, 59, 199, 149, 234,
-    217, 204, 226, 133, 86, 18, 224, 199, 133, 86, 18, 224, 195, 133, 86, 18,
-    224, 90, 133, 86, 18, 224, 53, 133, 86, 18, 224, 227, 133, 86, 18, 224,
-    224, 133, 86, 18, 223, 171, 133, 86, 18, 223, 142, 133, 86, 18, 224, 201,
-    133, 86, 18, 224, 156, 133, 86, 18, 225, 30, 133, 86, 18, 225, 27, 133,
-    86, 18, 223, 241, 133, 86, 18, 223, 238, 133, 86, 18, 224, 220, 133, 86,
-    18, 224, 218, 133, 86, 18, 223, 173, 133, 86, 18, 223, 172, 133, 86, 18,
-    224, 4, 133, 86, 18, 223, 227, 133, 86, 18, 224, 92, 133, 86, 18, 224,
-    91, 133, 86, 18, 225, 45, 133, 86, 18, 224, 223, 133, 86, 18, 223, 132,
-    133, 86, 18, 223, 123, 133, 86, 18, 225, 54, 133, 86, 18, 225, 46, 133,
-    86, 108, 199, 124, 133, 86, 108, 215, 193, 133, 86, 108, 222, 215, 133,
-    86, 108, 232, 158, 133, 86, 108, 216, 89, 133, 86, 108, 210, 193, 133,
-    86, 108, 216, 116, 133, 86, 108, 211, 133, 133, 86, 108, 196, 80, 133,
-    86, 108, 232, 22, 133, 86, 108, 219, 255, 133, 86, 108, 245, 107, 133,
-    86, 108, 217, 162, 133, 86, 108, 231, 214, 133, 86, 108, 212, 134, 133,
-    86, 108, 215, 199, 133, 86, 108, 217, 202, 133, 86, 108, 250, 150, 133,
-    86, 108, 196, 204, 133, 86, 108, 247, 90, 133, 86, 117, 244, 255, 201,
-    31, 133, 86, 117, 244, 255, 205, 200, 133, 86, 117, 244, 255, 224, 174,
-    133, 86, 117, 244, 255, 224, 132, 133, 86, 117, 244, 255, 204, 158, 133,
-    86, 117, 244, 255, 231, 172, 133, 86, 117, 244, 255, 203, 88, 133, 86, 2,
-    198, 230, 202, 166, 133, 86, 2, 198, 230, 201, 102, 247, 48, 133, 86, 2,
-    244, 255, 245, 96, 133, 86, 2, 198, 230, 202, 194, 133, 86, 2, 198, 230,
-    235, 179, 133, 86, 2, 196, 160, 215, 187, 133, 86, 2, 196, 160, 210, 74,
-    133, 86, 2, 196, 160, 201, 222, 133, 86, 2, 196, 160, 235, 220, 133, 86,
-    2, 198, 230, 208, 123, 133, 86, 2, 219, 186, 204, 162, 133, 86, 2, 198,
-    230, 215, 239, 133, 86, 2, 230, 206, 196, 100, 133, 86, 2, 196, 203, 133,
-    86, 2, 244, 255, 201, 89, 209, 215, 133, 86, 17, 195, 79, 133, 86, 17,
-    100, 133, 86, 17, 102, 133, 86, 17, 134, 133, 86, 17, 136, 133, 86, 17,
-    146, 133, 86, 17, 167, 133, 86, 17, 178, 133, 86, 17, 171, 133, 86, 17,
-    182, 133, 86, 31, 203, 18, 133, 86, 31, 231, 55, 133, 86, 31, 203, 24,
-    202, 157, 133, 86, 31, 219, 26, 133, 86, 31, 231, 58, 219, 26, 133, 86,
-    31, 203, 24, 248, 165, 133, 86, 31, 201, 167, 133, 86, 2, 198, 230, 221,
-    186, 133, 86, 2, 196, 157, 133, 86, 2, 232, 17, 133, 86, 2, 202, 183,
-    232, 17, 133, 86, 2, 194, 240, 202, 227, 133, 86, 2, 231, 198, 133, 86,
-    2, 215, 253, 133, 86, 2, 196, 195, 133, 86, 2, 215, 191, 133, 86, 2, 250,
-    133, 133, 86, 2, 200, 209, 247, 47, 133, 86, 2, 219, 186, 201, 105, 133,
-    86, 2, 203, 89, 133, 86, 2, 221, 218, 133, 86, 2, 218, 95, 133, 86, 2,
-    244, 255, 232, 231, 221, 164, 215, 197, 215, 196, 133, 86, 2, 244, 255,
-    241, 40, 201, 96, 133, 86, 2, 244, 255, 200, 207, 133, 86, 2, 244, 255,
-    200, 208, 245, 18, 133, 86, 2, 244, 255, 211, 221, 240, 56, 133, 86, 2,
-    244, 255, 215, 246, 201, 230, 133, 86, 244, 227, 2, 201, 100, 133, 86,
-    244, 227, 2, 196, 65, 133, 86, 244, 227, 2, 222, 54, 133, 86, 244, 227,
-    2, 222, 213, 133, 86, 244, 227, 2, 196, 156, 133, 86, 244, 227, 2, 223,
-    242, 133, 86, 244, 227, 2, 232, 155, 133, 86, 244, 227, 2, 218, 137, 133,
-    86, 244, 227, 2, 202, 167, 133, 86, 244, 227, 2, 201, 110, 133, 86, 244,
-    227, 2, 213, 3, 133, 86, 244, 227, 2, 224, 144, 133, 86, 244, 227, 2,
-    232, 219, 133, 86, 244, 227, 2, 199, 146, 133, 86, 244, 227, 2, 235, 216,
-    133, 86, 244, 227, 2, 196, 107, 133, 86, 244, 227, 2, 201, 83, 133, 86,
-    244, 227, 2, 223, 127, 133, 86, 244, 227, 2, 197, 208, 219, 195, 6, 1,
-    221, 136, 219, 195, 6, 1, 209, 80, 219, 195, 6, 1, 199, 230, 219, 195, 6,
-    1, 197, 199, 219, 195, 6, 1, 250, 162, 219, 195, 6, 1, 195, 158, 219,
-    195, 6, 1, 223, 224, 219, 195, 6, 1, 214, 3, 219, 195, 6, 1, 203, 216,
-    219, 195, 6, 1, 234, 190, 219, 195, 6, 1, 236, 49, 219, 195, 6, 1, 68,
-    219, 195, 6, 1, 225, 80, 219, 195, 6, 1, 63, 219, 195, 6, 1, 225, 217,
-    219, 195, 6, 1, 69, 219, 195, 6, 1, 250, 112, 219, 195, 6, 1, 247, 207,
-    219, 195, 6, 1, 66, 219, 195, 6, 1, 195, 217, 219, 195, 6, 1, 159, 219,
-    195, 6, 1, 211, 167, 219, 195, 6, 1, 231, 84, 219, 195, 6, 1, 215, 111,
-    219, 195, 6, 1, 196, 222, 219, 195, 6, 1, 240, 231, 219, 195, 6, 1, 214,
-    164, 219, 195, 6, 1, 218, 55, 219, 195, 6, 1, 144, 219, 195, 6, 1, 72,
-    219, 195, 6, 1, 251, 200, 219, 195, 6, 1, 196, 148, 219, 195, 4, 1, 221,
-    136, 219, 195, 4, 1, 209, 80, 219, 195, 4, 1, 199, 230, 219, 195, 4, 1,
-    197, 199, 219, 195, 4, 1, 250, 162, 219, 195, 4, 1, 195, 158, 219, 195,
-    4, 1, 223, 224, 219, 195, 4, 1, 214, 3, 219, 195, 4, 1, 203, 216, 219,
-    195, 4, 1, 234, 190, 219, 195, 4, 1, 236, 49, 219, 195, 4, 1, 68, 219,
-    195, 4, 1, 225, 80, 219, 195, 4, 1, 63, 219, 195, 4, 1, 225, 217, 219,
-    195, 4, 1, 69, 219, 195, 4, 1, 250, 112, 219, 195, 4, 1, 247, 207, 219,
-    195, 4, 1, 66, 219, 195, 4, 1, 195, 217, 219, 195, 4, 1, 159, 219, 195,
-    4, 1, 211, 167, 219, 195, 4, 1, 231, 84, 219, 195, 4, 1, 215, 111, 219,
-    195, 4, 1, 196, 222, 219, 195, 4, 1, 240, 231, 219, 195, 4, 1, 214, 164,
-    219, 195, 4, 1, 218, 55, 219, 195, 4, 1, 144, 219, 195, 4, 1, 72, 219,
-    195, 4, 1, 251, 200, 219, 195, 4, 1, 196, 148, 219, 195, 17, 195, 79,
-    219, 195, 17, 100, 219, 195, 17, 102, 219, 195, 17, 134, 219, 195, 17,
-    136, 219, 195, 17, 146, 219, 195, 17, 167, 219, 195, 17, 178, 219, 195,
-    17, 171, 219, 195, 17, 182, 219, 195, 31, 203, 23, 219, 195, 31, 236,
-    252, 219, 195, 31, 200, 239, 219, 195, 31, 202, 179, 219, 195, 31, 235,
-    1, 219, 195, 31, 235, 149, 219, 195, 31, 206, 23, 219, 195, 31, 207, 68,
-    219, 195, 31, 237, 28, 219, 195, 31, 216, 176, 219, 195, 17, 97, 251,
-    131, 20, 219, 195, 17, 99, 251, 131, 20, 219, 195, 17, 115, 251, 131, 20,
-    219, 195, 244, 159, 219, 195, 234, 217, 204, 226, 219, 195, 16, 251, 185,
-    219, 195, 236, 90, 214, 149, 109, 1, 161, 109, 1, 249, 145, 109, 1, 11,
-    161, 109, 1, 212, 150, 109, 1, 166, 109, 1, 219, 81, 109, 1, 250, 251,
-    166, 109, 1, 235, 239, 109, 1, 199, 152, 109, 1, 199, 36, 109, 1, 189,
-    109, 1, 240, 136, 109, 1, 11, 201, 78, 109, 1, 11, 189, 109, 1, 201, 78,
-    109, 1, 240, 41, 109, 1, 176, 109, 1, 216, 227, 109, 1, 11, 216, 86, 109,
-    1, 250, 251, 176, 109, 1, 216, 86, 109, 1, 216, 72, 109, 1, 172, 109, 1,
-    221, 150, 109, 1, 222, 122, 109, 1, 222, 111, 109, 1, 202, 44, 109, 1,
-    239, 37, 109, 1, 202, 36, 109, 1, 239, 36, 109, 1, 155, 109, 1, 234, 123,
-    109, 1, 11, 155, 109, 1, 211, 159, 109, 1, 211, 136, 109, 1, 217, 71,
-    109, 1, 217, 20, 109, 1, 250, 251, 217, 71, 109, 1, 142, 109, 1, 196,
-    208, 109, 1, 233, 230, 109, 1, 233, 205, 109, 1, 201, 88, 109, 1, 237,
-    139, 109, 1, 215, 109, 109, 1, 215, 91, 109, 1, 201, 103, 109, 1, 237,
-    150, 109, 1, 11, 201, 103, 109, 1, 11, 237, 150, 109, 1, 210, 153, 201,
-    103, 109, 1, 207, 50, 109, 1, 205, 80, 109, 1, 195, 74, 109, 1, 195, 1,
-    109, 1, 201, 113, 109, 1, 237, 156, 109, 1, 11, 201, 113, 109, 1, 183,
-    109, 1, 195, 115, 109, 1, 195, 2, 109, 1, 194, 228, 109, 1, 194, 208,
-    109, 1, 250, 251, 194, 228, 109, 1, 194, 200, 109, 1, 194, 207, 109, 1,
-    197, 166, 109, 1, 251, 209, 109, 1, 232, 80, 109, 1, 248, 43, 109, 1,
-    204, 42, 109, 1, 237, 140, 109, 1, 203, 68, 109, 1, 201, 107, 109, 1,
-    209, 143, 109, 2, 108, 73, 154, 109, 1, 217, 207, 109, 2, 250, 185, 109,
-    2, 210, 153, 198, 242, 109, 2, 210, 153, 250, 185, 109, 18, 2, 63, 109,
-    18, 2, 252, 168, 109, 18, 2, 251, 205, 109, 18, 2, 251, 106, 109, 18, 2,
-    251, 97, 109, 18, 2, 72, 109, 18, 2, 214, 102, 109, 18, 2, 197, 34, 109,
-    18, 2, 197, 199, 109, 18, 2, 69, 109, 18, 2, 236, 230, 109, 18, 2, 236,
-    215, 109, 18, 2, 214, 160, 109, 18, 2, 68, 109, 18, 2, 230, 210, 109, 18,
-    2, 230, 209, 109, 18, 2, 230, 208, 109, 18, 2, 226, 12, 109, 18, 2, 226,
-    147, 109, 18, 2, 226, 120, 109, 18, 2, 225, 230, 109, 18, 2, 226, 60,
-    109, 18, 2, 66, 109, 18, 2, 200, 114, 109, 18, 2, 200, 113, 109, 18, 2,
-    200, 112, 109, 18, 2, 199, 245, 109, 18, 2, 200, 96, 109, 18, 2, 200, 56,
-    109, 18, 2, 196, 148, 109, 18, 2, 196, 24, 109, 18, 2, 251, 245, 109, 18,
-    2, 251, 241, 109, 18, 2, 236, 155, 109, 18, 2, 209, 185, 236, 155, 109,
-    18, 2, 236, 163, 109, 18, 2, 209, 185, 236, 163, 109, 18, 2, 251, 200,
-    109, 18, 2, 237, 33, 109, 18, 2, 250, 150, 109, 18, 2, 214, 39, 109, 18,
-    2, 218, 55, 109, 18, 2, 217, 73, 109, 18, 2, 200, 40, 109, 18, 2, 195,
-    197, 109, 18, 2, 214, 154, 109, 18, 2, 214, 161, 109, 18, 2, 197, 210,
-    109, 18, 2, 226, 125, 109, 18, 2, 237, 82, 109, 18, 2, 226, 10, 109, 18,
-    2, 200, 90, 109, 152, 210, 22, 109, 152, 201, 243, 210, 22, 109, 152, 57,
-    109, 152, 60, 109, 1, 202, 9, 109, 1, 202, 8, 109, 1, 202, 7, 109, 1,
-    202, 6, 109, 1, 202, 5, 109, 1, 202, 4, 109, 1, 202, 3, 109, 1, 210, 153,
-    202, 10, 109, 1, 210, 153, 202, 9, 109, 1, 210, 153, 202, 7, 109, 1, 210,
-    153, 202, 6, 109, 1, 210, 153, 202, 5, 109, 1, 210, 153, 202, 3, 19, 225,
-    232, 78, 43, 225, 232, 78, 37, 245, 61, 231, 165, 78, 37, 245, 61, 225,
-    232, 78, 19, 244, 148, 19, 244, 147, 19, 244, 146, 19, 244, 145, 19, 244,
-    144, 19, 244, 143, 19, 244, 142, 19, 244, 141, 19, 244, 140, 19, 244,
-    139, 19, 244, 138, 19, 244, 137, 19, 244, 136, 19, 244, 135, 19, 244,
-    134, 19, 244, 133, 19, 244, 132, 19, 244, 131, 19, 244, 130, 19, 244,
-    129, 19, 244, 128, 19, 244, 127, 19, 244, 126, 19, 244, 125, 19, 244,
-    124, 19, 244, 123, 19, 244, 122, 19, 244, 121, 19, 244, 120, 19, 244,
-    119, 19, 244, 118, 19, 244, 117, 19, 244, 116, 19, 244, 115, 19, 244,
-    114, 19, 244, 113, 19, 244, 112, 19, 244, 111, 19, 244, 110, 19, 244,
-    109, 19, 244, 108, 19, 244, 107, 19, 244, 106, 19, 244, 105, 19, 244,
-    104, 19, 244, 103, 19, 244, 102, 19, 244, 101, 19, 244, 100, 19, 244, 99,
-    19, 244, 98, 19, 244, 97, 19, 244, 96, 19, 244, 95, 19, 244, 94, 19, 244,
-    93, 19, 244, 92, 19, 244, 91, 19, 244, 90, 19, 244, 89, 19, 244, 88, 19,
-    244, 87, 19, 244, 86, 19, 244, 85, 19, 244, 84, 19, 244, 83, 19, 244, 82,
-    19, 244, 81, 19, 244, 80, 19, 244, 79, 19, 244, 78, 19, 244, 77, 19, 244,
-    76, 19, 244, 75, 19, 244, 74, 19, 244, 73, 19, 244, 72, 19, 244, 71, 19,
-    244, 70, 19, 244, 69, 19, 244, 68, 19, 244, 67, 19, 244, 66, 19, 244, 65,
-    19, 244, 64, 19, 244, 63, 19, 244, 62, 19, 244, 61, 19, 244, 60, 19, 244,
-    59, 19, 244, 58, 19, 244, 57, 19, 244, 56, 19, 244, 55, 19, 244, 54, 19,
-    244, 53, 19, 244, 52, 19, 244, 51, 19, 244, 50, 19, 244, 49, 19, 244, 48,
-    19, 244, 47, 19, 244, 46, 19, 244, 45, 19, 244, 44, 19, 244, 43, 19, 244,
-    42, 19, 244, 41, 19, 244, 40, 19, 244, 39, 19, 244, 38, 19, 244, 37, 19,
-    244, 36, 19, 244, 35, 19, 244, 34, 19, 244, 33, 19, 244, 32, 19, 244, 31,
-    19, 244, 30, 19, 244, 29, 19, 244, 28, 19, 244, 27, 19, 244, 26, 19, 244,
-    25, 19, 244, 24, 19, 244, 23, 19, 244, 22, 19, 244, 21, 19, 244, 20, 19,
-    244, 19, 19, 244, 18, 19, 244, 17, 19, 244, 16, 19, 244, 15, 19, 244, 14,
-    19, 244, 13, 19, 244, 12, 19, 244, 11, 19, 244, 10, 19, 244, 9, 19, 244,
-    8, 19, 244, 7, 19, 244, 6, 19, 244, 5, 19, 244, 4, 19, 244, 3, 19, 244,
-    2, 19, 244, 1, 19, 244, 0, 19, 243, 255, 19, 243, 254, 19, 243, 253, 19,
-    243, 252, 19, 243, 251, 19, 243, 250, 19, 243, 249, 19, 243, 248, 19,
-    243, 247, 19, 243, 246, 19, 243, 245, 19, 243, 244, 19, 243, 243, 19,
-    243, 242, 19, 243, 241, 19, 243, 240, 19, 243, 239, 19, 243, 238, 19,
-    243, 237, 19, 243, 236, 19, 243, 235, 19, 243, 234, 19, 243, 233, 19,
-    243, 232, 19, 243, 231, 19, 243, 230, 19, 243, 229, 19, 243, 228, 19,
-    243, 227, 19, 243, 226, 19, 243, 225, 19, 243, 224, 19, 243, 223, 19,
-    243, 222, 19, 243, 221, 19, 243, 220, 19, 243, 219, 19, 243, 218, 19,
-    243, 217, 19, 243, 216, 19, 243, 215, 19, 243, 214, 19, 243, 213, 19,
-    243, 212, 19, 243, 211, 19, 243, 210, 19, 243, 209, 19, 243, 208, 19,
-    243, 207, 19, 243, 206, 19, 243, 205, 19, 243, 204, 19, 243, 203, 19,
-    243, 202, 19, 243, 201, 19, 243, 200, 19, 243, 199, 19, 243, 198, 19,
-    243, 197, 19, 243, 196, 19, 243, 195, 19, 243, 194, 19, 243, 193, 19,
-    243, 192, 19, 243, 191, 19, 243, 190, 19, 243, 189, 19, 243, 188, 19,
-    243, 187, 19, 243, 186, 19, 243, 185, 19, 243, 184, 19, 243, 183, 19,
-    243, 182, 19, 243, 181, 19, 243, 180, 19, 243, 179, 19, 243, 178, 19,
-    243, 177, 19, 243, 176, 19, 243, 175, 19, 243, 174, 19, 243, 173, 19,
-    243, 172, 19, 243, 171, 19, 243, 170, 19, 243, 169, 19, 243, 168, 19,
-    243, 167, 19, 243, 166, 19, 243, 165, 19, 243, 164, 19, 243, 163, 19,
-    243, 162, 19, 243, 161, 19, 243, 160, 19, 243, 159, 19, 243, 158, 19,
-    243, 157, 19, 243, 156, 19, 243, 155, 19, 243, 154, 19, 243, 153, 19,
-    243, 152, 19, 243, 151, 19, 243, 150, 19, 243, 149, 19, 243, 148, 19,
-    243, 147, 19, 243, 146, 19, 243, 145, 19, 243, 144, 19, 243, 143, 19,
-    243, 142, 19, 243, 141, 19, 243, 140, 19, 243, 139, 19, 243, 138, 19,
-    243, 137, 19, 243, 136, 19, 243, 135, 19, 243, 134, 19, 243, 133, 19,
-    243, 132, 19, 243, 131, 19, 243, 130, 19, 243, 129, 19, 243, 128, 19,
-    243, 127, 19, 243, 126, 19, 243, 125, 19, 243, 124, 19, 243, 123, 19,
-    243, 122, 19, 243, 121, 19, 243, 120, 19, 243, 119, 19, 243, 118, 19,
-    243, 117, 19, 243, 116, 19, 243, 115, 19, 243, 114, 19, 243, 113, 19,
-    243, 112, 19, 243, 111, 19, 243, 110, 19, 243, 109, 19, 243, 108, 19,
-    243, 107, 19, 243, 106, 19, 243, 105, 19, 243, 104, 19, 243, 103, 19,
-    243, 102, 19, 243, 101, 19, 243, 100, 19, 243, 99, 19, 243, 98, 19, 243,
-    97, 19, 243, 96, 19, 243, 95, 19, 243, 94, 19, 243, 93, 19, 243, 92, 19,
-    243, 91, 19, 243, 90, 19, 243, 89, 19, 243, 88, 19, 243, 87, 19, 243, 86,
-    19, 243, 85, 19, 243, 84, 19, 243, 83, 19, 243, 82, 19, 243, 81, 19, 243,
-    80, 19, 243, 79, 19, 243, 78, 19, 243, 77, 19, 243, 76, 19, 243, 75, 19,
-    243, 74, 19, 243, 73, 19, 243, 72, 19, 243, 71, 19, 243, 70, 19, 243, 69,
-    19, 243, 68, 19, 243, 67, 19, 243, 66, 19, 243, 65, 19, 243, 64, 19, 243,
-    63, 19, 243, 62, 19, 243, 61, 19, 243, 60, 19, 243, 59, 19, 243, 58, 19,
-    243, 57, 19, 243, 56, 19, 243, 55, 19, 243, 54, 19, 243, 53, 19, 243, 52,
-    19, 243, 51, 19, 243, 50, 19, 243, 49, 19, 243, 48, 19, 243, 47, 19, 243,
-    46, 19, 243, 45, 19, 243, 44, 19, 243, 43, 19, 243, 42, 19, 243, 41, 19,
-    243, 40, 19, 243, 39, 19, 243, 38, 19, 243, 37, 19, 243, 36, 19, 243, 35,
-    19, 243, 34, 19, 243, 33, 19, 243, 32, 19, 243, 31, 19, 243, 30, 19, 243,
-    29, 19, 243, 28, 19, 243, 27, 19, 243, 26, 19, 243, 25, 19, 243, 24, 19,
-    243, 23, 19, 243, 22, 19, 243, 21, 19, 243, 20, 19, 243, 19, 19, 243, 18,
-    19, 243, 17, 19, 243, 16, 19, 243, 15, 19, 243, 14, 19, 243, 13, 19, 243,
-    12, 19, 243, 11, 19, 243, 10, 19, 243, 9, 19, 243, 8, 19, 243, 7, 19,
-    243, 6, 19, 243, 5, 19, 243, 4, 19, 243, 3, 19, 243, 2, 19, 243, 1, 19,
-    243, 0, 19, 242, 255, 19, 242, 254, 19, 242, 253, 19, 242, 252, 19, 242,
-    251, 19, 242, 250, 19, 242, 249, 19, 242, 248, 19, 242, 247, 19, 242,
-    246, 19, 242, 245, 19, 242, 244, 19, 242, 243, 19, 242, 242, 19, 242,
-    241, 19, 242, 240, 19, 242, 239, 19, 242, 238, 19, 242, 237, 19, 242,
-    236, 19, 242, 235, 19, 242, 234, 19, 242, 233, 19, 242, 232, 19, 242,
-    231, 19, 242, 230, 19, 242, 229, 19, 242, 228, 19, 242, 227, 19, 242,
-    226, 19, 242, 225, 19, 242, 224, 19, 242, 223, 19, 242, 222, 19, 242,
-    221, 19, 242, 220, 19, 242, 219, 19, 242, 218, 19, 242, 217, 19, 242,
-    216, 19, 242, 215, 19, 242, 214, 19, 242, 213, 19, 242, 212, 19, 242,
-    211, 19, 242, 210, 19, 242, 209, 19, 242, 208, 19, 242, 207, 19, 242,
-    206, 19, 242, 205, 19, 242, 204, 19, 242, 203, 19, 242, 202, 19, 242,
-    201, 19, 242, 200, 19, 242, 199, 19, 242, 198, 19, 242, 197, 19, 242,
-    196, 19, 242, 195, 19, 242, 194, 19, 242, 193, 19, 242, 192, 19, 242,
-    191, 19, 242, 190, 19, 242, 189, 19, 242, 188, 19, 242, 187, 19, 242,
-    186, 19, 242, 185, 19, 242, 184, 19, 242, 183, 19, 242, 182, 19, 242,
-    181, 19, 242, 180, 19, 242, 179, 19, 242, 178, 19, 242, 177, 19, 242,
-    176, 19, 242, 175, 19, 242, 174, 19, 242, 173, 19, 242, 172, 19, 242,
-    171, 19, 242, 170, 19, 242, 169, 19, 242, 168, 19, 242, 167, 19, 242,
-    166, 19, 242, 165, 19, 242, 164, 19, 242, 163, 19, 242, 162, 19, 242,
-    161, 19, 242, 160, 19, 242, 159, 19, 242, 158, 19, 242, 157, 19, 242,
-    156, 19, 242, 155, 19, 242, 154, 19, 242, 153, 19, 242, 152, 19, 242,
-    151, 19, 242, 150, 19, 242, 149, 19, 242, 148, 19, 242, 147, 19, 242,
-    146, 19, 242, 145, 19, 242, 144, 19, 242, 143, 19, 242, 142, 19, 242,
-    141, 19, 242, 140, 19, 242, 139, 19, 242, 138, 19, 242, 137, 19, 242,
-    136, 19, 242, 135, 19, 242, 134, 19, 242, 133, 19, 242, 132, 19, 242,
-    131, 19, 242, 130, 19, 242, 129, 19, 242, 128, 19, 242, 127, 19, 242,
-    126, 19, 242, 125, 19, 242, 124, 19, 242, 123, 19, 242, 122, 19, 242,
-    121, 19, 242, 120, 19, 242, 119, 19, 242, 118, 19, 242, 117, 19, 242,
-    116, 19, 242, 115, 19, 242, 114, 19, 242, 113, 19, 242, 112, 19, 242,
-    111, 19, 242, 110, 19, 242, 109, 19, 242, 108, 19, 242, 107, 19, 242,
-    106, 19, 242, 105, 19, 242, 104, 19, 242, 103, 19, 242, 102, 19, 242,
-    101, 19, 242, 100, 19, 242, 99, 19, 242, 98, 19, 242, 97, 19, 242, 96,
-    19, 242, 95, 19, 242, 94, 19, 242, 93, 19, 242, 92, 19, 242, 91, 19, 242,
-    90, 19, 242, 89, 19, 242, 88, 19, 242, 87, 19, 242, 86, 19, 242, 85, 19,
-    242, 84, 19, 242, 83, 19, 242, 82, 19, 242, 81, 19, 242, 80, 19, 242, 79,
-    19, 242, 78, 19, 242, 77, 19, 242, 76, 19, 242, 75, 19, 242, 74, 19, 242,
-    73, 19, 242, 72, 19, 242, 71, 19, 242, 70, 19, 242, 69, 19, 242, 68, 19,
-    242, 67, 19, 242, 66, 19, 242, 65, 19, 242, 64, 19, 242, 63, 19, 242, 62,
-    19, 242, 61, 19, 242, 60, 19, 242, 59, 19, 242, 58, 19, 242, 57, 19, 242,
-    56, 19, 242, 55, 19, 242, 54, 19, 242, 53, 19, 242, 52, 19, 242, 51, 19,
-    242, 50, 19, 242, 49, 19, 242, 48, 19, 242, 47, 19, 242, 46, 19, 242, 45,
-    19, 242, 44, 19, 242, 43, 19, 242, 42, 19, 242, 41, 19, 242, 40, 19, 242,
-    39, 19, 242, 38, 19, 242, 37, 19, 242, 36, 19, 242, 35, 19, 242, 34, 19,
-    242, 33, 19, 242, 32, 19, 242, 31, 19, 242, 30, 19, 242, 29, 19, 242, 28,
-    19, 242, 27, 19, 242, 26, 19, 242, 25, 19, 242, 24, 19, 242, 23, 19, 242,
-    22, 19, 242, 21, 19, 242, 20, 19, 242, 19, 19, 242, 18, 19, 242, 17, 19,
-    242, 16, 19, 242, 15, 19, 242, 14, 19, 242, 13, 19, 242, 12, 19, 242, 11,
-    19, 242, 10, 19, 242, 9, 19, 242, 8, 19, 242, 7, 19, 242, 6, 19, 242, 5,
-    19, 242, 4, 19, 242, 3, 19, 242, 2, 19, 242, 1, 19, 242, 0, 19, 241, 255,
-    19, 241, 254, 19, 241, 253, 19, 241, 252, 19, 241, 251, 19, 241, 250, 19,
-    241, 249, 19, 241, 248, 19, 241, 247, 19, 241, 246, 19, 241, 245, 19,
-    241, 244, 19, 241, 243, 19, 241, 242, 19, 241, 241, 19, 241, 240, 19,
-    241, 239, 19, 241, 238, 19, 241, 237, 19, 241, 236, 19, 241, 235, 19,
-    241, 234, 19, 241, 233, 19, 241, 232, 19, 241, 231, 19, 241, 230, 19,
-    241, 229, 19, 241, 228, 19, 241, 227, 19, 241, 226, 19, 241, 225, 19,
-    241, 224, 19, 241, 223, 19, 241, 222, 19, 241, 221, 19, 241, 220, 19,
-    241, 219, 19, 241, 218, 19, 241, 217, 19, 241, 216, 19, 241, 215, 19,
-    241, 214, 19, 241, 213, 19, 241, 212, 19, 241, 211, 19, 241, 210, 19,
-    241, 209, 19, 241, 208, 19, 241, 207, 19, 241, 206, 19, 241, 205, 19,
-    241, 204, 19, 241, 203, 19, 241, 202, 19, 241, 201, 19, 241, 200, 19,
-    241, 199, 19, 241, 198, 19, 241, 197, 19, 241, 196, 19, 241, 195, 19,
-    241, 194, 19, 241, 193, 19, 241, 192, 19, 241, 191, 19, 241, 190, 19,
-    241, 189, 19, 241, 188, 19, 241, 187, 19, 241, 186, 19, 241, 185, 19,
-    241, 184, 19, 241, 183, 19, 241, 182, 19, 241, 181, 19, 241, 180, 19,
-    241, 179, 19, 241, 178, 19, 241, 177, 19, 241, 176, 19, 241, 175, 19,
-    241, 174, 19, 241, 173, 19, 241, 172, 19, 241, 171, 19, 241, 170, 19,
-    241, 169, 19, 241, 168, 19, 241, 167, 19, 241, 166, 19, 241, 165, 19,
-    241, 164, 19, 241, 163, 19, 241, 162, 71, 1, 250, 251, 69, 188, 1, 250,
-    251, 196, 69, 56, 1, 255, 168, 56, 1, 255, 167, 56, 1, 255, 166, 56, 1,
-    255, 162, 56, 1, 230, 248, 56, 1, 230, 247, 56, 1, 230, 246, 56, 1, 230,
-    245, 56, 1, 200, 177, 56, 1, 200, 176, 56, 1, 200, 175, 56, 1, 200, 174,
-    56, 1, 200, 173, 56, 1, 237, 134, 56, 1, 237, 133, 56, 1, 237, 132, 56,
-    1, 237, 131, 56, 1, 237, 130, 56, 1, 215, 22, 56, 1, 215, 21, 56, 1, 215,
-    20, 56, 1, 225, 69, 56, 1, 225, 66, 56, 1, 225, 65, 56, 1, 225, 64, 56,
-    1, 225, 63, 56, 1, 225, 62, 56, 1, 225, 61, 56, 1, 225, 60, 56, 1, 225,
-    59, 56, 1, 225, 68, 56, 1, 225, 67, 56, 1, 225, 58, 56, 1, 224, 100, 56,
-    1, 224, 99, 56, 1, 224, 98, 56, 1, 224, 97, 56, 1, 224, 96, 56, 1, 224,
-    95, 56, 1, 224, 94, 56, 1, 224, 93, 56, 1, 223, 186, 56, 1, 223, 185, 56,
-    1, 223, 184, 56, 1, 223, 183, 56, 1, 223, 182, 56, 1, 223, 181, 56, 1,
-    223, 180, 56, 1, 224, 208, 56, 1, 224, 207, 56, 1, 224, 206, 56, 1, 224,
-    205, 56, 1, 224, 204, 56, 1, 224, 203, 56, 1, 224, 10, 56, 1, 224, 9, 56,
-    1, 224, 8, 56, 1, 224, 7, 56, 1, 209, 22, 56, 1, 209, 21, 56, 1, 209, 20,
-    56, 1, 209, 19, 56, 1, 209, 18, 56, 1, 209, 17, 56, 1, 209, 16, 56, 1,
-    209, 15, 56, 1, 206, 111, 56, 1, 206, 110, 56, 1, 206, 109, 56, 1, 206,
-    108, 56, 1, 206, 107, 56, 1, 206, 106, 56, 1, 204, 171, 56, 1, 204, 170,
-    56, 1, 204, 169, 56, 1, 204, 168, 56, 1, 204, 167, 56, 1, 204, 166, 56,
-    1, 204, 165, 56, 1, 204, 164, 56, 1, 208, 146, 56, 1, 208, 145, 56, 1,
-    208, 144, 56, 1, 208, 143, 56, 1, 208, 142, 56, 1, 205, 199, 56, 1, 205,
-    198, 56, 1, 205, 197, 56, 1, 205, 196, 56, 1, 205, 195, 56, 1, 205, 194,
-    56, 1, 205, 193, 56, 1, 203, 168, 56, 1, 203, 167, 56, 1, 203, 166, 56,
-    1, 203, 165, 56, 1, 202, 121, 56, 1, 202, 120, 56, 1, 202, 119, 56, 1,
-    202, 118, 56, 1, 202, 117, 56, 1, 202, 116, 56, 1, 202, 115, 56, 1, 201,
-    39, 56, 1, 201, 38, 56, 1, 201, 37, 56, 1, 201, 36, 56, 1, 201, 35, 56,
-    1, 203, 67, 56, 1, 203, 66, 56, 1, 203, 65, 56, 1, 203, 64, 56, 1, 203,
-    63, 56, 1, 203, 62, 56, 1, 203, 61, 56, 1, 203, 60, 56, 1, 203, 59, 56,
-    1, 202, 29, 56, 1, 202, 28, 56, 1, 202, 27, 56, 1, 202, 26, 56, 1, 202,
-    25, 56, 1, 202, 24, 56, 1, 202, 23, 56, 1, 218, 0, 56, 1, 217, 255, 56,
-    1, 217, 254, 56, 1, 217, 253, 56, 1, 217, 252, 56, 1, 217, 251, 56, 1,
-    217, 250, 56, 1, 217, 249, 56, 1, 217, 248, 56, 1, 216, 222, 56, 1, 216,
-    221, 56, 1, 216, 220, 56, 1, 216, 219, 56, 1, 216, 218, 56, 1, 216, 217,
-    56, 1, 216, 216, 56, 1, 216, 215, 56, 1, 215, 185, 56, 1, 215, 184, 56,
-    1, 215, 183, 56, 1, 217, 117, 56, 1, 217, 116, 56, 1, 217, 115, 56, 1,
-    217, 114, 56, 1, 217, 113, 56, 1, 217, 112, 56, 1, 217, 111, 56, 1, 216,
-    49, 56, 1, 216, 48, 56, 1, 216, 47, 56, 1, 216, 46, 56, 1, 216, 45, 56,
-    1, 233, 3, 56, 1, 233, 0, 56, 1, 232, 255, 56, 1, 232, 254, 56, 1, 232,
-    253, 56, 1, 232, 252, 56, 1, 232, 251, 56, 1, 232, 250, 56, 1, 232, 249,
-    56, 1, 233, 2, 56, 1, 233, 1, 56, 1, 232, 70, 56, 1, 232, 69, 56, 1, 232,
-    68, 56, 1, 232, 67, 56, 1, 232, 66, 56, 1, 232, 65, 56, 1, 232, 64, 56,
-    1, 231, 74, 56, 1, 231, 73, 56, 1, 231, 72, 56, 1, 232, 146, 56, 1, 232,
-    145, 56, 1, 232, 144, 56, 1, 232, 143, 56, 1, 232, 142, 56, 1, 232, 141,
-    56, 1, 232, 140, 56, 1, 231, 192, 56, 1, 231, 191, 56, 1, 231, 190, 56,
-    1, 231, 189, 56, 1, 231, 188, 56, 1, 231, 187, 56, 1, 231, 186, 56, 1,
-    231, 185, 56, 1, 220, 127, 56, 1, 220, 126, 56, 1, 220, 125, 56, 1, 220,
-    124, 56, 1, 220, 123, 56, 1, 220, 122, 56, 1, 220, 121, 56, 1, 219, 77,
-    56, 1, 219, 76, 56, 1, 219, 75, 56, 1, 219, 74, 56, 1, 219, 73, 56, 1,
-    219, 72, 56, 1, 219, 71, 56, 1, 218, 144, 56, 1, 218, 143, 56, 1, 218,
-    142, 56, 1, 218, 141, 56, 1, 219, 206, 56, 1, 219, 205, 56, 1, 219, 204,
-    56, 1, 218, 250, 56, 1, 218, 249, 56, 1, 218, 248, 56, 1, 218, 247, 56,
-    1, 218, 246, 56, 1, 218, 245, 56, 1, 196, 137, 56, 1, 196, 136, 56, 1,
-    196, 135, 56, 1, 196, 134, 56, 1, 196, 133, 56, 1, 196, 130, 56, 1, 195,
-    216, 56, 1, 195, 215, 56, 1, 195, 214, 56, 1, 195, 213, 56, 1, 196, 2,
-    56, 1, 196, 1, 56, 1, 196, 0, 56, 1, 195, 255, 56, 1, 195, 254, 56, 1,
-    195, 253, 56, 1, 210, 251, 56, 1, 210, 250, 56, 1, 210, 249, 56, 1, 210,
-    248, 56, 1, 210, 71, 56, 1, 210, 70, 56, 1, 210, 69, 56, 1, 210, 68, 56,
-    1, 210, 67, 56, 1, 210, 66, 56, 1, 210, 65, 56, 1, 209, 139, 56, 1, 209,
-    138, 56, 1, 209, 137, 56, 1, 209, 136, 56, 1, 209, 135, 56, 1, 209, 134,
-    56, 1, 210, 182, 56, 1, 210, 181, 56, 1, 210, 180, 56, 1, 210, 179, 56,
-    1, 209, 231, 56, 1, 209, 230, 56, 1, 209, 229, 56, 1, 209, 228, 56, 1,
-    209, 227, 56, 1, 209, 226, 56, 1, 197, 165, 56, 1, 197, 164, 56, 1, 197,
-    163, 56, 1, 197, 162, 56, 1, 197, 161, 56, 1, 197, 69, 56, 1, 197, 68,
-    56, 1, 197, 67, 56, 1, 197, 66, 56, 1, 197, 65, 56, 1, 197, 108, 56, 1,
-    197, 107, 56, 1, 197, 106, 56, 1, 197, 105, 56, 1, 197, 33, 56, 1, 197,
-    32, 56, 1, 197, 31, 56, 1, 197, 30, 56, 1, 197, 29, 56, 1, 197, 28, 56,
-    1, 197, 27, 56, 1, 218, 52, 56, 1, 218, 51, 188, 1, 4, 197, 70, 188, 1,
-    4, 197, 109, 188, 1, 4, 197, 34, 71, 1, 4, 197, 70, 71, 1, 4, 197, 109,
-    71, 1, 4, 197, 34, 71, 1, 4, 218, 55, 43, 246, 254, 43, 246, 253, 43,
-    246, 252, 43, 246, 251, 43, 246, 250, 43, 246, 249, 43, 246, 248, 43,
-    246, 247, 43, 246, 246, 43, 246, 245, 43, 246, 244, 43, 246, 243, 43,
-    246, 242, 43, 246, 241, 43, 246, 240, 43, 246, 239, 43, 246, 238, 43,
-    246, 237, 43, 246, 236, 43, 246, 235, 43, 246, 234, 43, 246, 233, 43,
-    246, 232, 43, 246, 231, 43, 246, 230, 43, 246, 229, 43, 246, 228, 43,
-    246, 227, 43, 246, 226, 43, 246, 225, 43, 246, 224, 43, 246, 223, 43,
-    246, 222, 43, 246, 221, 43, 246, 220, 43, 246, 219, 43, 246, 218, 43,
-    246, 217, 43, 246, 216, 43, 246, 215, 43, 246, 214, 43, 246, 213, 43,
-    246, 212, 43, 246, 211, 43, 246, 210, 43, 246, 209, 43, 246, 208, 43,
-    246, 207, 43, 246, 206, 43, 246, 205, 43, 246, 204, 43, 246, 203, 43,
-    246, 202, 43, 246, 201, 43, 246, 200, 43, 246, 199, 43, 246, 198, 43,
-    246, 197, 43, 246, 196, 43, 246, 195, 43, 246, 194, 43, 246, 193, 43,
-    246, 192, 43, 246, 191, 43, 246, 190, 43, 246, 189, 43, 246, 188, 43,
-    246, 187, 43, 246, 186, 43, 246, 185, 43, 246, 184, 43, 246, 183, 43,
-    246, 182, 43, 246, 181, 43, 246, 180, 43, 246, 179, 43, 246, 178, 43,
-    246, 177, 43, 246, 176, 43, 246, 175, 43, 246, 174, 43, 246, 173, 43,
-    246, 172, 43, 246, 171, 43, 246, 170, 43, 246, 169, 43, 246, 168, 43,
-    246, 167, 43, 246, 166, 43, 246, 165, 43, 246, 164, 43, 246, 163, 43,
-    246, 162, 43, 246, 161, 43, 246, 160, 43, 246, 159, 43, 246, 158, 43,
-    246, 157, 43, 246, 156, 43, 246, 155, 43, 246, 154, 43, 246, 153, 43,
-    246, 152, 43, 246, 151, 43, 246, 150, 43, 246, 149, 43, 246, 148, 43,
-    246, 147, 43, 246, 146, 43, 246, 145, 43, 246, 144, 43, 246, 143, 43,
-    246, 142, 43, 246, 141, 43, 246, 140, 43, 246, 139, 43, 246, 138, 43,
-    246, 137, 43, 246, 136, 43, 246, 135, 43, 246, 134, 43, 246, 133, 43,
-    246, 132, 43, 246, 131, 43, 246, 130, 43, 246, 129, 43, 246, 128, 43,
-    246, 127, 43, 246, 126, 43, 246, 125, 43, 246, 124, 43, 246, 123, 43,
-    246, 122, 43, 246, 121, 43, 246, 120, 43, 246, 119, 43, 246, 118, 43,
-    246, 117, 43, 246, 116, 43, 246, 115, 43, 246, 114, 43, 246, 113, 43,
-    246, 112, 43, 246, 111, 43, 246, 110, 43, 246, 109, 43, 246, 108, 43,
-    246, 107, 43, 246, 106, 43, 246, 105, 43, 246, 104, 43, 246, 103, 43,
-    246, 102, 43, 246, 101, 43, 246, 100, 43, 246, 99, 43, 246, 98, 43, 246,
-    97, 43, 246, 96, 43, 246, 95, 43, 246, 94, 43, 246, 93, 43, 246, 92, 43,
-    246, 91, 43, 246, 90, 43, 246, 89, 43, 246, 88, 43, 246, 87, 43, 246, 86,
-    43, 246, 85, 43, 246, 84, 43, 246, 83, 43, 246, 82, 43, 246, 81, 43, 246,
-    80, 43, 246, 79, 43, 246, 78, 43, 246, 77, 43, 246, 76, 43, 246, 75, 43,
-    246, 74, 43, 246, 73, 43, 246, 72, 43, 246, 71, 43, 246, 70, 43, 246, 69,
-    43, 246, 68, 43, 246, 67, 43, 246, 66, 43, 246, 65, 43, 246, 64, 43, 246,
-    63, 43, 246, 62, 43, 246, 61, 43, 246, 60, 43, 246, 59, 43, 246, 58, 43,
-    246, 57, 43, 246, 56, 43, 246, 55, 43, 246, 54, 43, 246, 53, 43, 246, 52,
-    43, 246, 51, 43, 246, 50, 43, 246, 49, 43, 246, 48, 43, 246, 47, 43, 246,
-    46, 43, 246, 45, 43, 246, 44, 43, 246, 43, 43, 246, 42, 43, 246, 41, 43,
-    246, 40, 43, 246, 39, 43, 246, 38, 43, 246, 37, 43, 246, 36, 43, 246, 35,
-    43, 246, 34, 43, 246, 33, 43, 246, 32, 43, 246, 31, 43, 246, 30, 43, 246,
-    29, 43, 246, 28, 43, 246, 27, 43, 246, 26, 43, 246, 25, 43, 246, 24, 43,
-    246, 23, 43, 246, 22, 43, 246, 21, 43, 246, 20, 43, 246, 19, 43, 246, 18,
-    43, 246, 17, 43, 246, 16, 43, 246, 15, 43, 246, 14, 43, 246, 13, 43, 246,
-    12, 43, 246, 11, 43, 246, 10, 43, 246, 9, 43, 246, 8, 43, 246, 7, 43,
-    246, 6, 43, 246, 5, 43, 246, 4, 43, 246, 3, 43, 246, 2, 43, 246, 1, 43,
-    246, 0, 43, 245, 255, 43, 245, 254, 43, 245, 253, 43, 245, 252, 43, 245,
-    251, 43, 245, 250, 43, 245, 249, 43, 245, 248, 43, 245, 247, 43, 245,
-    246, 43, 245, 245, 43, 245, 244, 43, 245, 243, 43, 245, 242, 43, 245,
-    241, 43, 245, 240, 43, 245, 239, 43, 245, 238, 43, 245, 237, 43, 245,
-    236, 43, 245, 235, 43, 245, 234, 43, 245, 233, 43, 245, 232, 43, 245,
-    231, 43, 245, 230, 43, 245, 229, 43, 245, 228, 43, 245, 227, 43, 245,
-    226, 43, 245, 225, 43, 245, 224, 43, 245, 223, 43, 245, 222, 43, 245,
-    221, 43, 245, 220, 43, 245, 219, 43, 245, 218, 43, 245, 217, 43, 245,
-    216, 43, 245, 215, 43, 245, 214, 43, 245, 213, 43, 245, 212, 43, 245,
-    211, 43, 245, 210, 43, 245, 209, 43, 245, 208, 43, 245, 207, 43, 245,
-    206, 43, 245, 205, 43, 245, 204, 43, 245, 203, 43, 245, 202, 43, 245,
-    201, 43, 245, 200, 43, 245, 199, 43, 245, 198, 43, 245, 197, 43, 245,
-    196, 43, 245, 195, 43, 245, 194, 43, 245, 193, 43, 245, 192, 43, 245,
-    191, 43, 245, 190, 43, 245, 189, 43, 245, 188, 43, 245, 187, 43, 245,
-    186, 43, 245, 185, 43, 245, 184, 43, 245, 183, 43, 245, 182, 43, 245,
-    181, 43, 245, 180, 43, 245, 179, 43, 245, 178, 43, 245, 177, 43, 245,
-    176, 43, 245, 175, 43, 245, 174, 43, 245, 173, 43, 245, 172, 43, 245,
-    171, 43, 245, 170, 43, 245, 169, 43, 245, 168, 43, 245, 167, 43, 245,
-    166, 43, 245, 165, 43, 245, 164, 43, 245, 163, 43, 245, 162, 43, 245,
-    161, 43, 245, 160, 43, 245, 159, 43, 245, 158, 43, 245, 157, 43, 245,
-    156, 43, 245, 155, 43, 245, 154, 43, 245, 153, 43, 245, 152, 43, 245,
-    151, 43, 245, 150, 43, 245, 149, 43, 245, 148, 43, 245, 147, 43, 245,
-    146, 43, 245, 145, 43, 245, 144, 43, 245, 143, 43, 245, 142, 43, 245,
-    141, 43, 245, 140, 43, 245, 139, 43, 245, 138, 43, 245, 137, 43, 245,
-    136, 43, 245, 135, 43, 245, 134, 43, 245, 133, 43, 245, 132, 43, 245,
-    131, 43, 245, 130, 43, 245, 129, 43, 245, 128, 43, 245, 127, 43, 245,
-    126, 43, 245, 125, 43, 245, 124, 43, 245, 123, 43, 245, 122, 43, 245,
-    121, 43, 245, 120, 43, 245, 119, 43, 245, 118, 43, 245, 117, 43, 245,
-    116, 43, 245, 115, 114, 1, 233, 15, 114, 1, 196, 222, 114, 1, 214, 3,
-    114, 1, 203, 216, 114, 1, 236, 49, 114, 1, 225, 80, 114, 1, 159, 114, 1,
-    250, 112, 114, 1, 240, 231, 114, 1, 199, 230, 114, 1, 234, 190, 114, 1,
-    144, 114, 1, 214, 4, 218, 55, 114, 1, 240, 232, 209, 80, 114, 1, 236, 50,
-    218, 55, 114, 1, 225, 81, 221, 136, 114, 1, 211, 32, 209, 80, 114, 1,
-    202, 235, 114, 1, 205, 234, 239, 177, 114, 1, 239, 177, 114, 1, 224, 37,
-    114, 1, 205, 234, 225, 217, 114, 1, 232, 26, 114, 1, 222, 123, 114, 1,
-    210, 78, 114, 1, 221, 136, 114, 1, 218, 55, 114, 1, 225, 217, 114, 1,
-    209, 80, 114, 1, 221, 137, 218, 55, 114, 1, 218, 56, 221, 136, 114, 1,
-    225, 218, 221, 136, 114, 1, 209, 81, 225, 217, 114, 1, 221, 137, 3, 238,
-    253, 114, 1, 218, 56, 3, 238, 253, 114, 1, 225, 218, 3, 238, 253, 114, 1,
-    225, 218, 3, 238, 251, 226, 42, 26, 57, 114, 1, 209, 81, 3, 238, 253,
-    114, 1, 209, 81, 3, 76, 60, 114, 1, 221, 137, 209, 80, 114, 1, 218, 56,
-    209, 80, 114, 1, 225, 218, 209, 80, 114, 1, 209, 81, 209, 80, 114, 1,
-    221, 137, 218, 56, 209, 80, 114, 1, 218, 56, 221, 137, 209, 80, 114, 1,
-    225, 218, 221, 137, 209, 80, 114, 1, 209, 81, 225, 218, 209, 80, 114, 1,
-    225, 218, 209, 81, 3, 238, 253, 114, 1, 225, 218, 218, 55, 114, 1, 225,
-    218, 218, 56, 209, 80, 114, 1, 209, 81, 203, 216, 114, 1, 209, 81, 203,
-    217, 144, 114, 1, 209, 81, 214, 3, 114, 1, 209, 81, 214, 4, 144, 114, 1,
-    203, 217, 209, 80, 114, 1, 203, 217, 211, 32, 209, 80, 114, 1, 197, 199,
-    114, 1, 197, 81, 114, 1, 197, 200, 144, 114, 1, 209, 81, 218, 55, 114, 1,
-    209, 81, 221, 136, 114, 1, 225, 81, 211, 32, 209, 80, 114, 1, 234, 191,
-    211, 32, 209, 80, 114, 1, 209, 81, 225, 80, 114, 1, 209, 81, 225, 81,
-    144, 114, 1, 63, 114, 1, 205, 234, 214, 16, 114, 1, 214, 190, 114, 1, 72,
-    114, 1, 251, 47, 114, 1, 68, 114, 1, 69, 114, 1, 226, 147, 114, 1, 206,
-    182, 68, 114, 1, 200, 90, 114, 1, 237, 54, 114, 1, 205, 234, 237, 40,
-    114, 1, 209, 207, 68, 114, 1, 205, 234, 237, 54, 114, 1, 181, 68, 114, 1,
-    196, 69, 114, 1, 66, 114, 1, 236, 116, 114, 1, 196, 171, 114, 1, 118,
-    218, 55, 114, 1, 181, 66, 114, 1, 209, 207, 66, 114, 1, 200, 92, 114, 1,
-    205, 234, 66, 114, 1, 214, 99, 114, 1, 214, 16, 114, 1, 214, 39, 114, 1,
-    197, 166, 114, 1, 197, 34, 114, 1, 197, 70, 114, 1, 197, 96, 114, 1, 197,
-    1, 114, 1, 217, 209, 66, 114, 1, 217, 209, 72, 114, 1, 217, 209, 68, 114,
-    1, 217, 209, 63, 114, 1, 213, 34, 251, 106, 114, 1, 213, 34, 251, 123,
-    114, 1, 205, 234, 236, 230, 114, 1, 205, 234, 251, 106, 114, 1, 205, 234,
-    214, 119, 114, 1, 110, 221, 136, 114, 251, 224, 50, 231, 155, 208, 137,
-    114, 251, 224, 219, 65, 231, 155, 208, 137, 114, 251, 224, 53, 231, 155,
-    208, 137, 114, 251, 224, 126, 83, 208, 137, 114, 251, 224, 219, 65, 83,
-    208, 137, 114, 251, 224, 130, 83, 208, 137, 114, 251, 224, 250, 156, 208,
-    137, 114, 251, 224, 250, 156, 222, 175, 208, 137, 114, 251, 224, 250,
-    156, 203, 109, 114, 251, 224, 250, 156, 203, 135, 114, 251, 224, 250,
-    156, 237, 136, 122, 114, 251, 224, 250, 156, 230, 249, 122, 114, 251,
-    224, 250, 156, 203, 110, 122, 114, 251, 224, 130, 186, 114, 251, 224,
-    130, 202, 101, 186, 114, 251, 224, 130, 233, 100, 114, 251, 224, 130,
-    181, 233, 100, 114, 251, 224, 130, 238, 253, 114, 251, 224, 130, 244,
-    249, 114, 251, 224, 130, 222, 75, 114, 251, 224, 130, 197, 122, 114, 251,
-    224, 130, 199, 100, 114, 251, 224, 126, 186, 114, 251, 224, 126, 202,
-    101, 186, 114, 251, 224, 126, 233, 100, 114, 251, 224, 126, 181, 233,
-    100, 114, 251, 224, 126, 238, 253, 114, 251, 224, 126, 244, 249, 114,
-    251, 224, 126, 222, 75, 114, 251, 224, 126, 197, 122, 114, 251, 224, 126,
-    199, 100, 114, 251, 224, 126, 51, 114, 2, 177, 3, 241, 61, 114, 202, 193,
-    1, 208, 114, 114, 52, 78, 114, 211, 214, 245, 59, 234, 217, 204, 226,
-    206, 169, 235, 23, 1, 214, 23, 206, 169, 235, 23, 241, 127, 214, 23, 206,
-    169, 235, 23, 135, 204, 241, 206, 169, 235, 23, 124, 204, 241, 67, 34,
-    16, 211, 231, 67, 34, 16, 240, 67, 67, 34, 16, 213, 38, 67, 34, 16, 214,
-    12, 237, 11, 67, 34, 16, 214, 12, 239, 90, 67, 34, 16, 199, 136, 237, 11,
-    67, 34, 16, 199, 136, 239, 90, 67, 34, 16, 224, 230, 67, 34, 16, 203,
-    233, 67, 34, 16, 213, 147, 67, 34, 16, 195, 223, 67, 34, 16, 195, 224,
-    239, 90, 67, 34, 16, 223, 205, 67, 34, 16, 251, 42, 237, 11, 67, 34, 16,
-    236, 84, 237, 11, 67, 34, 16, 203, 35, 67, 34, 16, 224, 178, 67, 34, 16,
-    251, 31, 67, 34, 16, 251, 32, 239, 90, 67, 34, 16, 203, 240, 67, 34, 16,
-    202, 172, 67, 34, 16, 214, 130, 250, 249, 67, 34, 16, 233, 127, 250, 249,
-    67, 34, 16, 211, 230, 67, 34, 16, 247, 7, 67, 34, 16, 199, 125, 67, 34,
-    16, 225, 239, 250, 249, 67, 34, 16, 224, 180, 250, 249, 67, 34, 16, 224,
-    179, 250, 249, 67, 34, 16, 208, 182, 67, 34, 16, 213, 137, 67, 34, 16,
-    204, 251, 251, 35, 67, 34, 16, 214, 11, 250, 249, 67, 34, 16, 199, 135,
-    250, 249, 67, 34, 16, 251, 36, 250, 249, 67, 34, 16, 251, 29, 67, 34, 16,
-    224, 27, 67, 34, 16, 210, 85, 67, 34, 16, 212, 218, 250, 249, 67, 34, 16,
-    202, 74, 67, 34, 16, 251, 103, 67, 34, 16, 208, 117, 67, 34, 16, 203,
-    244, 250, 249, 67, 34, 16, 203, 244, 219, 144, 204, 249, 67, 34, 16, 214,
-    6, 250, 249, 67, 34, 16, 202, 211, 67, 34, 16, 222, 162, 67, 34, 16, 237,
-    159, 67, 34, 16, 201, 182, 67, 34, 16, 203, 4, 67, 34, 16, 223, 208, 67,
-    34, 16, 251, 42, 236, 84, 217, 97, 67, 34, 16, 234, 225, 250, 249, 67,
-    34, 16, 226, 99, 67, 34, 16, 201, 151, 250, 249, 67, 34, 16, 224, 233,
-    201, 150, 67, 34, 16, 213, 67, 67, 34, 16, 211, 235, 67, 34, 16, 223,
-    243, 67, 34, 16, 245, 42, 250, 249, 67, 34, 16, 210, 203, 67, 34, 16,
-    213, 150, 250, 249, 67, 34, 16, 213, 148, 250, 249, 67, 34, 16, 230, 199,
-    67, 34, 16, 217, 220, 67, 34, 16, 213, 16, 67, 34, 16, 223, 244, 251,
-    141, 67, 34, 16, 201, 151, 251, 141, 67, 34, 16, 204, 220, 67, 34, 16,
-    233, 86, 67, 34, 16, 225, 239, 217, 97, 67, 34, 16, 214, 130, 217, 97,
-    67, 34, 16, 214, 12, 217, 97, 67, 34, 16, 213, 15, 67, 34, 16, 223, 228,
-    67, 34, 16, 213, 14, 67, 34, 16, 223, 207, 67, 34, 16, 213, 68, 217, 97,
-    67, 34, 16, 224, 179, 217, 98, 251, 73, 67, 34, 16, 224, 180, 217, 98,
-    251, 73, 67, 34, 16, 195, 221, 67, 34, 16, 251, 32, 217, 97, 67, 34, 16,
-    251, 33, 203, 241, 217, 97, 67, 34, 16, 195, 222, 67, 34, 16, 223, 206,
-    67, 34, 16, 237, 6, 67, 34, 16, 247, 8, 67, 34, 16, 219, 36, 225, 238,
-    67, 34, 16, 199, 136, 217, 97, 67, 34, 16, 212, 218, 217, 97, 67, 34, 16,
-    211, 236, 217, 97, 67, 34, 16, 214, 126, 67, 34, 16, 251, 60, 67, 34, 16,
-    221, 147, 67, 34, 16, 213, 148, 217, 97, 67, 34, 16, 213, 150, 217, 97,
-    67, 34, 16, 236, 122, 213, 149, 67, 34, 16, 223, 104, 67, 34, 16, 251,
-    61, 67, 34, 16, 201, 151, 217, 97, 67, 34, 16, 237, 9, 67, 34, 16, 203,
-    244, 217, 97, 67, 34, 16, 203, 234, 67, 34, 16, 245, 42, 217, 97, 67, 34,
-    16, 236, 180, 67, 34, 16, 208, 118, 217, 97, 67, 34, 16, 196, 188, 224,
-    27, 67, 34, 16, 201, 148, 67, 34, 16, 211, 237, 67, 34, 16, 201, 152, 67,
-    34, 16, 201, 149, 67, 34, 16, 211, 234, 67, 34, 16, 201, 147, 67, 34, 16,
-    211, 233, 67, 34, 16, 233, 126, 67, 34, 16, 250, 241, 67, 34, 16, 236,
-    122, 250, 241, 67, 34, 16, 214, 6, 217, 97, 67, 34, 16, 202, 210, 236,
-    135, 67, 34, 16, 202, 210, 236, 83, 67, 34, 16, 202, 212, 251, 37, 67,
-    34, 16, 202, 204, 225, 32, 251, 28, 67, 34, 16, 224, 232, 67, 34, 16,
-    236, 217, 67, 34, 16, 196, 28, 224, 229, 67, 34, 16, 196, 28, 251, 73,
-    67, 34, 16, 204, 250, 67, 34, 16, 224, 28, 251, 73, 67, 34, 16, 239, 91,
-    250, 249, 67, 34, 16, 223, 209, 250, 249, 67, 34, 16, 223, 209, 251, 141,
-    67, 34, 16, 223, 209, 217, 97, 67, 34, 16, 251, 36, 217, 97, 67, 34, 16,
-    251, 38, 67, 34, 16, 239, 90, 67, 34, 16, 201, 163, 67, 34, 16, 202, 250,
-    67, 34, 16, 223, 232, 67, 34, 16, 222, 167, 236, 210, 245, 32, 67, 34,
-    16, 222, 167, 237, 160, 245, 33, 67, 34, 16, 222, 167, 201, 166, 245, 33,
-    67, 34, 16, 222, 167, 203, 6, 245, 33, 67, 34, 16, 222, 167, 226, 94,
-    245, 32, 67, 34, 16, 233, 127, 217, 98, 251, 73, 67, 34, 16, 233, 127,
-    213, 138, 250, 237, 67, 34, 16, 233, 127, 213, 138, 239, 181, 67, 34, 16,
-    239, 115, 67, 34, 16, 239, 116, 213, 138, 250, 238, 224, 229, 67, 34, 16,
-    239, 116, 213, 138, 250, 238, 251, 73, 67, 34, 16, 239, 116, 213, 138,
-    239, 181, 67, 34, 16, 201, 171, 67, 34, 16, 250, 242, 67, 34, 16, 226,
-    101, 67, 34, 16, 239, 138, 67, 34, 16, 251, 211, 212, 100, 250, 243, 67,
-    34, 16, 251, 211, 250, 240, 67, 34, 16, 251, 211, 250, 243, 67, 34, 16,
-    251, 211, 219, 138, 67, 34, 16, 251, 211, 219, 149, 67, 34, 16, 251, 211,
-    233, 128, 67, 34, 16, 251, 211, 233, 125, 67, 34, 16, 251, 211, 212, 100,
-    233, 128, 67, 34, 16, 220, 18, 211, 243, 230, 197, 67, 34, 16, 220, 18,
-    251, 143, 211, 243, 230, 197, 67, 34, 16, 220, 18, 239, 180, 230, 197,
-    67, 34, 16, 220, 18, 251, 143, 239, 180, 230, 197, 67, 34, 16, 220, 18,
-    201, 158, 230, 197, 67, 34, 16, 220, 18, 201, 172, 67, 34, 16, 220, 18,
-    202, 255, 230, 197, 67, 34, 16, 220, 18, 202, 255, 222, 171, 230, 197,
-    67, 34, 16, 220, 18, 222, 171, 230, 197, 67, 34, 16, 220, 18, 212, 146,
-    230, 197, 67, 34, 16, 225, 246, 203, 28, 230, 198, 67, 34, 16, 251, 33,
-    203, 28, 230, 198, 67, 34, 16, 235, 209, 202, 252, 67, 34, 16, 235, 209,
-    218, 206, 67, 34, 16, 235, 209, 239, 121, 67, 34, 16, 220, 18, 199, 129,
-    230, 197, 67, 34, 16, 220, 18, 211, 242, 230, 197, 67, 34, 16, 220, 18,
-    212, 146, 202, 255, 230, 197, 67, 34, 16, 233, 122, 218, 56, 251, 37, 67,
-    34, 16, 233, 122, 218, 56, 239, 89, 67, 34, 16, 236, 228, 225, 32, 234,
-    225, 198, 228, 67, 34, 16, 226, 100, 67, 34, 16, 226, 98, 67, 34, 16,
-    234, 225, 250, 250, 239, 179, 230, 196, 67, 34, 16, 234, 225, 239, 136,
-    161, 67, 34, 16, 234, 225, 239, 136, 217, 220, 67, 34, 16, 234, 225, 217,
-    214, 230, 197, 67, 34, 16, 234, 225, 239, 136, 239, 152, 67, 34, 16, 234,
-    225, 206, 0, 239, 135, 239, 152, 67, 34, 16, 234, 225, 239, 136, 224,
-    209, 67, 34, 16, 234, 225, 239, 136, 195, 11, 67, 34, 16, 234, 225, 239,
-    136, 216, 224, 224, 229, 67, 34, 16, 234, 225, 239, 136, 216, 224, 251,
-    73, 67, 34, 16, 234, 225, 220, 68, 245, 34, 239, 121, 67, 34, 16, 234,
-    225, 220, 68, 245, 34, 218, 206, 67, 34, 16, 235, 154, 206, 0, 245, 34,
-    199, 128, 67, 34, 16, 234, 225, 206, 0, 245, 34, 203, 245, 67, 34, 16,
-    234, 225, 217, 100, 67, 34, 16, 245, 35, 194, 234, 67, 34, 16, 245, 35,
-    224, 26, 67, 34, 16, 245, 35, 205, 139, 67, 34, 16, 234, 225, 230, 249,
-    196, 27, 203, 0, 67, 34, 16, 234, 225, 236, 229, 251, 62, 67, 34, 16,
-    196, 27, 201, 159, 67, 34, 16, 239, 129, 201, 159, 67, 34, 16, 239, 129,
-    203, 0, 67, 34, 16, 239, 129, 251, 39, 237, 160, 239, 20, 67, 34, 16,
-    239, 129, 218, 204, 203, 5, 239, 20, 67, 34, 16, 239, 129, 239, 112, 236,
-    96, 239, 20, 67, 34, 16, 239, 129, 201, 169, 214, 136, 239, 20, 67, 34,
-    16, 196, 27, 251, 39, 237, 160, 239, 20, 67, 34, 16, 196, 27, 218, 204,
-    203, 5, 239, 20, 67, 34, 16, 196, 27, 239, 112, 236, 96, 239, 20, 67, 34,
-    16, 196, 27, 201, 169, 214, 136, 239, 20, 67, 34, 16, 234, 30, 239, 128,
-    67, 34, 16, 234, 30, 196, 26, 67, 34, 16, 239, 137, 251, 39, 219, 37, 67,
-    34, 16, 239, 137, 251, 39, 219, 179, 67, 34, 16, 239, 137, 239, 90, 67,
-    34, 16, 239, 137, 202, 202, 67, 34, 16, 206, 72, 202, 202, 67, 34, 16,
-    206, 72, 202, 203, 239, 74, 67, 34, 16, 206, 72, 202, 203, 201, 160, 67,
-    34, 16, 206, 72, 202, 203, 202, 248, 67, 34, 16, 206, 72, 250, 211, 67,
-    34, 16, 206, 72, 250, 212, 239, 74, 67, 34, 16, 206, 72, 250, 212, 201,
-    160, 67, 34, 16, 206, 72, 250, 212, 202, 248, 67, 34, 16, 239, 113, 234,
-    11, 67, 34, 16, 239, 120, 214, 39, 67, 34, 16, 204, 236, 67, 34, 16, 250,
-    234, 161, 67, 34, 16, 250, 234, 198, 228, 67, 34, 16, 250, 234, 234, 123,
-    67, 34, 16, 250, 234, 239, 152, 67, 34, 16, 250, 234, 224, 209, 67, 34,
-    16, 250, 234, 195, 11, 67, 34, 16, 250, 234, 216, 223, 67, 34, 16, 224,
-    179, 217, 98, 219, 148, 67, 34, 16, 224, 180, 217, 98, 219, 148, 67, 34,
-    16, 224, 179, 217, 98, 224, 229, 67, 34, 16, 224, 180, 217, 98, 224, 229,
-    67, 34, 16, 224, 28, 224, 229, 67, 34, 16, 233, 127, 217, 98, 224, 229,
-    34, 16, 206, 62, 249, 75, 34, 16, 52, 249, 75, 34, 16, 48, 249, 75, 34,
-    16, 210, 90, 48, 249, 75, 34, 16, 240, 64, 249, 75, 34, 16, 206, 182,
-    249, 75, 34, 16, 50, 210, 120, 55, 34, 16, 53, 210, 120, 55, 34, 16, 210,
-    120, 238, 250, 34, 16, 240, 108, 208, 121, 34, 16, 240, 137, 247, 122,
-    34, 16, 208, 121, 34, 16, 244, 176, 34, 16, 210, 118, 235, 142, 34, 16,
-    210, 118, 235, 141, 34, 16, 210, 118, 235, 140, 34, 16, 235, 164, 34, 16,
-    235, 165, 60, 34, 16, 248, 49, 78, 34, 16, 247, 164, 34, 16, 248, 63, 34,
-    16, 179, 34, 16, 214, 114, 205, 16, 34, 16, 200, 214, 205, 16, 34, 16,
-    202, 149, 205, 16, 34, 16, 235, 6, 205, 16, 34, 16, 235, 100, 205, 16,
-    34, 16, 206, 28, 205, 16, 34, 16, 206, 26, 234, 242, 34, 16, 235, 4, 234,
-    242, 34, 16, 234, 191, 244, 218, 34, 16, 234, 191, 244, 219, 214, 43,
-    251, 132, 34, 16, 234, 191, 244, 219, 214, 43, 249, 58, 34, 16, 247, 208,
-    244, 218, 34, 16, 236, 50, 244, 218, 34, 16, 236, 50, 244, 219, 214, 43,
-    251, 132, 34, 16, 236, 50, 244, 219, 214, 43, 249, 58, 34, 16, 237, 207,
-    244, 217, 34, 16, 237, 207, 244, 216, 34, 16, 218, 120, 219, 203, 210,
-    101, 34, 16, 52, 207, 12, 34, 16, 52, 235, 82, 34, 16, 235, 83, 200, 36,
-    34, 16, 235, 83, 237, 235, 34, 16, 217, 203, 200, 36, 34, 16, 217, 203,
-    237, 235, 34, 16, 207, 13, 200, 36, 34, 16, 207, 13, 237, 235, 34, 16,
-    211, 88, 152, 207, 12, 34, 16, 211, 88, 152, 235, 82, 34, 16, 244, 156,
-    202, 78, 34, 16, 241, 2, 202, 78, 34, 16, 214, 43, 251, 132, 34, 16, 214,
-    43, 249, 58, 34, 16, 211, 69, 251, 132, 34, 16, 211, 69, 249, 58, 34, 16,
-    218, 123, 210, 101, 34, 16, 197, 71, 210, 101, 34, 16, 157, 210, 101, 34,
-    16, 211, 88, 210, 101, 34, 16, 237, 27, 210, 101, 34, 16, 206, 22, 210,
-    101, 34, 16, 202, 174, 210, 101, 34, 16, 206, 12, 210, 101, 34, 16, 97,
-    231, 58, 200, 232, 210, 101, 34, 16, 196, 223, 216, 9, 34, 16, 98, 216,
-    9, 34, 16, 244, 250, 196, 223, 216, 9, 34, 16, 47, 216, 10, 197, 73, 34,
-    16, 47, 216, 10, 248, 136, 34, 16, 201, 181, 216, 10, 124, 197, 73, 34,
-    16, 201, 181, 216, 10, 124, 248, 136, 34, 16, 201, 181, 216, 10, 50, 197,
-    73, 34, 16, 201, 181, 216, 10, 50, 248, 136, 34, 16, 201, 181, 216, 10,
-    53, 197, 73, 34, 16, 201, 181, 216, 10, 53, 248, 136, 34, 16, 201, 181,
-    216, 10, 135, 197, 73, 34, 16, 201, 181, 216, 10, 135, 248, 136, 34, 16,
-    201, 181, 216, 10, 124, 53, 197, 73, 34, 16, 201, 181, 216, 10, 124, 53,
-    248, 136, 34, 16, 218, 190, 216, 10, 197, 73, 34, 16, 218, 190, 216, 10,
-    248, 136, 34, 16, 201, 178, 216, 10, 135, 197, 73, 34, 16, 201, 178, 216,
-    10, 135, 248, 136, 34, 16, 213, 141, 216, 9, 34, 16, 198, 241, 216, 9,
-    34, 16, 216, 10, 248, 136, 34, 16, 215, 147, 216, 9, 34, 16, 244, 187,
-    216, 10, 197, 73, 34, 16, 244, 187, 216, 10, 248, 136, 34, 16, 248, 47,
-    34, 16, 197, 71, 216, 13, 34, 16, 157, 216, 13, 34, 16, 211, 88, 216, 13,
-    34, 16, 237, 27, 216, 13, 34, 16, 206, 22, 216, 13, 34, 16, 202, 174,
-    216, 13, 34, 16, 206, 12, 216, 13, 34, 16, 97, 231, 58, 200, 232, 216,
-    13, 34, 16, 38, 204, 243, 34, 16, 38, 205, 101, 204, 243, 34, 16, 38,
-    201, 189, 34, 16, 38, 201, 188, 34, 16, 38, 201, 187, 34, 16, 235, 125,
-    201, 189, 34, 16, 235, 125, 201, 188, 34, 16, 235, 125, 201, 187, 34, 16,
-    38, 250, 147, 238, 253, 34, 16, 38, 235, 92, 34, 16, 38, 235, 91, 34, 16,
-    38, 235, 90, 34, 16, 38, 235, 89, 34, 16, 38, 235, 88, 34, 16, 248, 243,
-    249, 6, 34, 16, 236, 222, 249, 6, 34, 16, 248, 243, 202, 107, 34, 16,
-    236, 222, 202, 107, 34, 16, 248, 243, 205, 225, 34, 16, 236, 222, 205,
-    225, 34, 16, 248, 243, 212, 227, 34, 16, 236, 222, 212, 227, 34, 16, 38,
-    252, 22, 34, 16, 38, 205, 20, 34, 16, 38, 203, 11, 34, 16, 38, 205, 21,
-    34, 16, 38, 220, 33, 34, 16, 38, 220, 32, 34, 16, 38, 252, 21, 34, 16,
-    38, 221, 210, 34, 16, 250, 223, 200, 36, 34, 16, 250, 223, 237, 235, 34,
-    16, 38, 239, 13, 34, 16, 38, 209, 254, 34, 16, 38, 235, 71, 34, 16, 38,
-    205, 221, 34, 16, 38, 248, 221, 34, 16, 38, 52, 201, 249, 34, 16, 38,
-    201, 165, 201, 249, 34, 16, 210, 4, 34, 16, 204, 154, 34, 16, 195, 158,
-    34, 16, 212, 219, 34, 16, 219, 129, 34, 16, 235, 18, 34, 16, 241, 73, 34,
-    16, 239, 238, 34, 16, 233, 117, 216, 14, 205, 248, 34, 16, 233, 117, 216,
-    14, 216, 51, 205, 248, 34, 16, 201, 218, 34, 16, 201, 4, 34, 16, 226, 17,
-    201, 4, 34, 16, 201, 5, 205, 248, 34, 16, 201, 5, 200, 36, 34, 16, 214,
-    60, 204, 195, 34, 16, 214, 60, 204, 192, 34, 16, 214, 60, 204, 191, 34,
-    16, 214, 60, 204, 190, 34, 16, 214, 60, 204, 189, 34, 16, 214, 60, 204,
-    188, 34, 16, 214, 60, 204, 187, 34, 16, 214, 60, 204, 186, 34, 16, 214,
-    60, 204, 185, 34, 16, 214, 60, 204, 194, 34, 16, 214, 60, 204, 193, 34,
-    16, 232, 157, 34, 16, 217, 110, 34, 16, 236, 222, 77, 204, 232, 34, 16,
-    239, 231, 205, 248, 34, 16, 38, 135, 248, 77, 34, 16, 38, 124, 248, 77,
-    34, 16, 38, 232, 170, 34, 16, 38, 205, 211, 212, 151, 34, 16, 213, 84,
-    78, 34, 16, 213, 84, 124, 78, 34, 16, 157, 213, 84, 78, 34, 16, 233, 154,
-    200, 36, 34, 16, 233, 154, 237, 235, 34, 16, 3, 235, 124, 34, 16, 240,
-    91, 34, 16, 240, 92, 251, 146, 34, 16, 219, 253, 34, 16, 221, 231, 34,
-    16, 248, 44, 34, 16, 207, 109, 197, 73, 34, 16, 207, 109, 248, 136, 34,
-    16, 219, 19, 34, 16, 219, 20, 248, 136, 34, 16, 207, 103, 197, 73, 34,
-    16, 207, 103, 248, 136, 34, 16, 234, 208, 197, 73, 34, 16, 234, 208, 248,
-    136, 34, 16, 221, 232, 213, 43, 210, 101, 34, 16, 221, 232, 226, 91, 210,
-    101, 34, 16, 248, 45, 210, 101, 34, 16, 207, 109, 210, 101, 34, 16, 219,
-    20, 210, 101, 34, 16, 207, 103, 210, 101, 34, 16, 203, 25, 213, 41, 241,
-    32, 211, 253, 213, 42, 34, 16, 203, 25, 213, 41, 241, 32, 211, 253, 226,
-    90, 34, 16, 203, 25, 213, 41, 241, 32, 211, 253, 213, 43, 239, 100, 34,
-    16, 203, 25, 226, 89, 241, 32, 211, 253, 213, 42, 34, 16, 203, 25, 226,
-    89, 241, 32, 211, 253, 226, 90, 34, 16, 203, 25, 226, 89, 241, 32, 211,
-    253, 226, 91, 239, 100, 34, 16, 203, 25, 226, 89, 241, 32, 211, 253, 226,
-    91, 239, 99, 34, 16, 203, 25, 226, 89, 241, 32, 211, 253, 226, 91, 239,
-    98, 34, 16, 241, 64, 34, 16, 233, 89, 247, 208, 244, 218, 34, 16, 233,
-    89, 236, 50, 244, 218, 34, 16, 47, 250, 112, 34, 16, 199, 6, 34, 16, 212,
-    114, 34, 16, 244, 208, 34, 16, 208, 172, 34, 16, 244, 213, 34, 16, 201,
-    236, 34, 16, 212, 82, 34, 16, 212, 83, 235, 74, 34, 16, 208, 173, 235,
-    74, 34, 16, 201, 237, 210, 98, 34, 16, 213, 24, 204, 144, 34, 16, 224,
-    83, 247, 208, 244, 218, 34, 16, 224, 83, 236, 222, 77, 212, 212, 34, 16,
-    224, 83, 48, 216, 13, 34, 16, 224, 83, 210, 170, 78, 34, 16, 224, 83,
-    197, 71, 216, 13, 34, 16, 224, 83, 157, 216, 13, 34, 16, 224, 83, 211,
-    88, 216, 14, 204, 244, 237, 235, 34, 16, 224, 83, 211, 88, 216, 14, 204,
-    244, 200, 36, 34, 16, 224, 83, 237, 27, 216, 14, 204, 244, 237, 235, 34,
-    16, 224, 83, 237, 27, 216, 14, 204, 244, 200, 36, 34, 16, 224, 83, 235,
-    83, 55, 32, 198, 247, 216, 17, 204, 40, 32, 198, 247, 216, 17, 204, 29,
-    32, 198, 247, 216, 17, 204, 19, 32, 198, 247, 216, 17, 204, 12, 32, 198,
-    247, 216, 17, 204, 4, 32, 198, 247, 216, 17, 203, 254, 32, 198, 247, 216,
-    17, 203, 253, 32, 198, 247, 216, 17, 203, 252, 32, 198, 247, 216, 17,
-    203, 251, 32, 198, 247, 216, 17, 204, 39, 32, 198, 247, 216, 17, 204, 38,
-    32, 198, 247, 216, 17, 204, 37, 32, 198, 247, 216, 17, 204, 36, 32, 198,
-    247, 216, 17, 204, 35, 32, 198, 247, 216, 17, 204, 34, 32, 198, 247, 216,
-    17, 204, 33, 32, 198, 247, 216, 17, 204, 32, 32, 198, 247, 216, 17, 204,
-    31, 32, 198, 247, 216, 17, 204, 30, 32, 198, 247, 216, 17, 204, 28, 32,
-    198, 247, 216, 17, 204, 27, 32, 198, 247, 216, 17, 204, 26, 32, 198, 247,
-    216, 17, 204, 25, 32, 198, 247, 216, 17, 204, 24, 32, 198, 247, 216, 17,
-    204, 3, 32, 198, 247, 216, 17, 204, 2, 32, 198, 247, 216, 17, 204, 1, 32,
-    198, 247, 216, 17, 204, 0, 32, 198, 247, 216, 17, 203, 255, 32, 226, 40,
-    216, 17, 204, 40, 32, 226, 40, 216, 17, 204, 29, 32, 226, 40, 216, 17,
-    204, 12, 32, 226, 40, 216, 17, 204, 4, 32, 226, 40, 216, 17, 203, 253,
-    32, 226, 40, 216, 17, 203, 252, 32, 226, 40, 216, 17, 204, 38, 32, 226,
-    40, 216, 17, 204, 37, 32, 226, 40, 216, 17, 204, 36, 32, 226, 40, 216,
-    17, 204, 35, 32, 226, 40, 216, 17, 204, 32, 32, 226, 40, 216, 17, 204,
-    31, 32, 226, 40, 216, 17, 204, 30, 32, 226, 40, 216, 17, 204, 25, 32,
-    226, 40, 216, 17, 204, 24, 32, 226, 40, 216, 17, 204, 23, 32, 226, 40,
-    216, 17, 204, 22, 32, 226, 40, 216, 17, 204, 21, 32, 226, 40, 216, 17,
-    204, 20, 32, 226, 40, 216, 17, 204, 18, 32, 226, 40, 216, 17, 204, 17,
-    32, 226, 40, 216, 17, 204, 16, 32, 226, 40, 216, 17, 204, 15, 32, 226,
-    40, 216, 17, 204, 14, 32, 226, 40, 216, 17, 204, 13, 32, 226, 40, 216,
-    17, 204, 11, 32, 226, 40, 216, 17, 204, 10, 32, 226, 40, 216, 17, 204, 9,
-    32, 226, 40, 216, 17, 204, 8, 32, 226, 40, 216, 17, 204, 7, 32, 226, 40,
-    216, 17, 204, 6, 32, 226, 40, 216, 17, 204, 5, 32, 226, 40, 216, 17, 204,
-    3, 32, 226, 40, 216, 17, 204, 2, 32, 226, 40, 216, 17, 204, 1, 32, 226,
-    40, 216, 17, 204, 0, 32, 226, 40, 216, 17, 203, 255, 38, 32, 34, 201,
-    161, 38, 32, 34, 202, 249, 38, 32, 34, 213, 53, 32, 34, 222, 166, 219,
-    250, 215, 142, 195, 79, 219, 250, 215, 142, 100, 219, 250, 215, 142, 102,
-    219, 250, 215, 142, 134, 219, 250, 215, 142, 136, 219, 250, 215, 142,
-    146, 219, 250, 215, 142, 167, 219, 250, 215, 142, 178, 219, 250, 215,
-    142, 171, 219, 250, 215, 142, 182, 219, 250, 215, 142, 203, 23, 219, 250,
-    215, 142, 236, 252, 219, 250, 215, 142, 200, 239, 219, 250, 215, 142,
-    202, 179, 219, 250, 215, 142, 235, 1, 219, 250, 215, 142, 235, 149, 219,
-    250, 215, 142, 206, 23, 219, 250, 215, 142, 207, 68, 219, 250, 215, 142,
-    237, 28, 219, 250, 215, 142, 216, 176, 218, 205, 36, 237, 72, 239, 114,
-    36, 232, 121, 237, 72, 239, 114, 36, 231, 62, 237, 72, 239, 114, 36, 237,
-    71, 232, 122, 239, 114, 36, 237, 71, 231, 61, 239, 114, 36, 237, 72, 202,
-    251, 36, 247, 36, 202, 251, 36, 234, 217, 244, 249, 202, 251, 36, 219,
-    11, 202, 251, 36, 249, 70, 202, 251, 36, 224, 197, 205, 224, 202, 251,
-    36, 241, 122, 202, 251, 36, 250, 197, 202, 251, 36, 214, 78, 202, 251,
-    36, 248, 55, 214, 34, 202, 251, 36, 239, 233, 214, 73, 239, 66, 202, 251,
-    36, 239, 63, 202, 251, 36, 195, 229, 202, 251, 36, 226, 77, 202, 251, 36,
-    213, 63, 202, 251, 36, 210, 178, 202, 251, 36, 241, 134, 202, 251, 36,
-    231, 176, 249, 138, 202, 251, 36, 197, 152, 202, 251, 36, 235, 46, 202,
-    251, 36, 251, 248, 202, 251, 36, 210, 133, 202, 251, 36, 210, 105, 202,
-    251, 36, 237, 70, 202, 251, 36, 225, 113, 202, 251, 36, 241, 129, 202,
-    251, 36, 236, 220, 202, 251, 36, 237, 172, 202, 251, 36, 247, 3, 202,
-    251, 36, 239, 243, 202, 251, 36, 27, 210, 104, 202, 251, 36, 213, 234,
-    202, 251, 36, 222, 170, 202, 251, 36, 244, 201, 202, 251, 36, 224, 71,
-    202, 251, 36, 234, 72, 202, 251, 36, 204, 207, 202, 251, 36, 211, 202,
-    202, 251, 36, 234, 216, 202, 251, 36, 210, 106, 202, 251, 36, 222, 210,
-    214, 73, 218, 241, 202, 251, 36, 210, 102, 202, 251, 36, 233, 137, 202,
-    30, 219, 183, 202, 251, 36, 236, 223, 202, 251, 36, 204, 221, 202, 251,
-    36, 233, 92, 202, 251, 36, 236, 213, 202, 251, 36, 213, 110, 202, 251,
-    36, 209, 247, 202, 251, 36, 235, 72, 202, 251, 36, 199, 127, 214, 73,
-    197, 131, 202, 251, 36, 241, 139, 202, 251, 36, 219, 202, 202, 251, 36,
-    236, 123, 202, 251, 36, 200, 47, 202, 251, 36, 239, 101, 202, 251, 36,
-    244, 203, 218, 164, 202, 251, 36, 233, 68, 202, 251, 36, 234, 73, 226,
-    86, 202, 251, 36, 220, 6, 202, 251, 36, 252, 17, 202, 251, 36, 236, 239,
-    202, 251, 36, 237, 239, 202, 251, 36, 197, 129, 202, 251, 36, 206, 57,
-    202, 251, 36, 226, 50, 202, 251, 36, 239, 200, 202, 251, 36, 240, 69,
-    202, 251, 36, 239, 97, 202, 251, 36, 236, 87, 202, 251, 36, 207, 64, 202,
-    251, 36, 204, 225, 202, 251, 36, 232, 172, 202, 251, 36, 244, 151, 202,
-    251, 36, 244, 198, 202, 251, 36, 235, 218, 202, 251, 36, 251, 212, 202,
-    251, 36, 244, 150, 202, 251, 36, 214, 120, 202, 218, 199, 103, 202, 251,
-    36, 239, 123, 202, 251, 36, 223, 70, 202, 251, 36, 235, 10, 241, 88, 209,
-    216, 200, 50, 17, 100, 241, 88, 209, 216, 200, 50, 17, 102, 241, 88, 209,
-    216, 200, 50, 17, 134, 241, 88, 209, 216, 200, 50, 17, 136, 241, 88, 209,
-    216, 200, 50, 17, 146, 241, 88, 209, 216, 200, 50, 17, 167, 241, 88, 209,
-    216, 200, 50, 17, 178, 241, 88, 209, 216, 200, 50, 17, 171, 241, 88, 209,
-    216, 200, 50, 17, 182, 241, 88, 209, 216, 203, 19, 17, 100, 241, 88, 209,
-    216, 203, 19, 17, 102, 241, 88, 209, 216, 203, 19, 17, 134, 241, 88, 209,
-    216, 203, 19, 17, 136, 241, 88, 209, 216, 203, 19, 17, 146, 241, 88, 209,
-    216, 203, 19, 17, 167, 241, 88, 209, 216, 203, 19, 17, 178, 241, 88, 209,
-    216, 203, 19, 17, 171, 241, 88, 209, 216, 203, 19, 17, 182, 143, 203,
-    118, 117, 100, 143, 203, 118, 117, 102, 143, 203, 118, 117, 134, 143,
-    203, 118, 117, 136, 143, 203, 118, 117, 146, 203, 118, 117, 100, 203,
-    118, 117, 146, 13, 27, 6, 63, 13, 27, 6, 250, 112, 13, 27, 6, 247, 207,
-    13, 27, 6, 240, 231, 13, 27, 6, 69, 13, 27, 6, 236, 49, 13, 27, 6, 234,
-    190, 13, 27, 6, 233, 15, 13, 27, 6, 68, 13, 27, 6, 225, 217, 13, 27, 6,
-    225, 80, 13, 27, 6, 159, 13, 27, 6, 221, 136, 13, 27, 6, 218, 55, 13, 27,
-    6, 72, 13, 27, 6, 214, 3, 13, 27, 6, 211, 167, 13, 27, 6, 144, 13, 27, 6,
-    209, 80, 13, 27, 6, 203, 216, 13, 27, 6, 66, 13, 27, 6, 199, 230, 13, 27,
-    6, 197, 199, 13, 27, 6, 196, 222, 13, 27, 6, 196, 148, 13, 27, 6, 195,
-    158, 13, 27, 4, 63, 13, 27, 4, 250, 112, 13, 27, 4, 247, 207, 13, 27, 4,
-    240, 231, 13, 27, 4, 69, 13, 27, 4, 236, 49, 13, 27, 4, 234, 190, 13, 27,
-    4, 233, 15, 13, 27, 4, 68, 13, 27, 4, 225, 217, 13, 27, 4, 225, 80, 13,
-    27, 4, 159, 13, 27, 4, 221, 136, 13, 27, 4, 218, 55, 13, 27, 4, 72, 13,
-    27, 4, 214, 3, 13, 27, 4, 211, 167, 13, 27, 4, 144, 13, 27, 4, 209, 80,
-    13, 27, 4, 203, 216, 13, 27, 4, 66, 13, 27, 4, 199, 230, 13, 27, 4, 197,
-    199, 13, 27, 4, 196, 222, 13, 27, 4, 196, 148, 13, 27, 4, 195, 158, 13,
-    41, 6, 63, 13, 41, 6, 250, 112, 13, 41, 6, 247, 207, 13, 41, 6, 240, 231,
-    13, 41, 6, 69, 13, 41, 6, 236, 49, 13, 41, 6, 234, 190, 13, 41, 6, 233,
-    15, 13, 41, 6, 68, 13, 41, 6, 225, 217, 13, 41, 6, 225, 80, 13, 41, 6,
-    159, 13, 41, 6, 221, 136, 13, 41, 6, 218, 55, 13, 41, 6, 72, 13, 41, 6,
-    214, 3, 13, 41, 6, 211, 167, 13, 41, 6, 144, 13, 41, 6, 209, 80, 13, 41,
-    6, 203, 216, 13, 41, 6, 66, 13, 41, 6, 199, 230, 13, 41, 6, 197, 199, 13,
-    41, 6, 196, 222, 13, 41, 6, 196, 148, 13, 41, 6, 195, 158, 13, 41, 4, 63,
-    13, 41, 4, 250, 112, 13, 41, 4, 247, 207, 13, 41, 4, 240, 231, 13, 41, 4,
-    69, 13, 41, 4, 236, 49, 13, 41, 4, 234, 190, 13, 41, 4, 68, 13, 41, 4,
-    225, 217, 13, 41, 4, 225, 80, 13, 41, 4, 159, 13, 41, 4, 221, 136, 13,
-    41, 4, 218, 55, 13, 41, 4, 72, 13, 41, 4, 214, 3, 13, 41, 4, 211, 167,
-    13, 41, 4, 144, 13, 41, 4, 209, 80, 13, 41, 4, 203, 216, 13, 41, 4, 66,
-    13, 41, 4, 199, 230, 13, 41, 4, 197, 199, 13, 41, 4, 196, 222, 13, 41, 4,
-    196, 148, 13, 41, 4, 195, 158, 13, 27, 41, 6, 63, 13, 27, 41, 6, 250,
-    112, 13, 27, 41, 6, 247, 207, 13, 27, 41, 6, 240, 231, 13, 27, 41, 6, 69,
-    13, 27, 41, 6, 236, 49, 13, 27, 41, 6, 234, 190, 13, 27, 41, 6, 233, 15,
-    13, 27, 41, 6, 68, 13, 27, 41, 6, 225, 217, 13, 27, 41, 6, 225, 80, 13,
-    27, 41, 6, 159, 13, 27, 41, 6, 221, 136, 13, 27, 41, 6, 218, 55, 13, 27,
-    41, 6, 72, 13, 27, 41, 6, 214, 3, 13, 27, 41, 6, 211, 167, 13, 27, 41, 6,
-    144, 13, 27, 41, 6, 209, 80, 13, 27, 41, 6, 203, 216, 13, 27, 41, 6, 66,
-    13, 27, 41, 6, 199, 230, 13, 27, 41, 6, 197, 199, 13, 27, 41, 6, 196,
-    222, 13, 27, 41, 6, 196, 148, 13, 27, 41, 6, 195, 158, 13, 27, 41, 4, 63,
-    13, 27, 41, 4, 250, 112, 13, 27, 41, 4, 247, 207, 13, 27, 41, 4, 240,
-    231, 13, 27, 41, 4, 69, 13, 27, 41, 4, 236, 49, 13, 27, 41, 4, 234, 190,
-    13, 27, 41, 4, 233, 15, 13, 27, 41, 4, 68, 13, 27, 41, 4, 225, 217, 13,
-    27, 41, 4, 225, 80, 13, 27, 41, 4, 159, 13, 27, 41, 4, 221, 136, 13, 27,
-    41, 4, 218, 55, 13, 27, 41, 4, 72, 13, 27, 41, 4, 214, 3, 13, 27, 41, 4,
-    211, 167, 13, 27, 41, 4, 144, 13, 27, 41, 4, 209, 80, 13, 27, 41, 4, 203,
-    216, 13, 27, 41, 4, 66, 13, 27, 41, 4, 199, 230, 13, 27, 41, 4, 197, 199,
-    13, 27, 41, 4, 196, 222, 13, 27, 41, 4, 196, 148, 13, 27, 41, 4, 195,
-    158, 13, 145, 6, 63, 13, 145, 6, 247, 207, 13, 145, 6, 240, 231, 13, 145,
-    6, 234, 190, 13, 145, 6, 225, 217, 13, 145, 6, 225, 80, 13, 145, 6, 218,
-    55, 13, 145, 6, 72, 13, 145, 6, 214, 3, 13, 145, 6, 211, 167, 13, 145, 6,
-    209, 80, 13, 145, 6, 203, 216, 13, 145, 6, 66, 13, 145, 6, 199, 230, 13,
-    145, 6, 197, 199, 13, 145, 6, 196, 222, 13, 145, 6, 196, 148, 13, 145, 6,
-    195, 158, 13, 145, 4, 63, 13, 145, 4, 250, 112, 13, 145, 4, 247, 207, 13,
-    145, 4, 240, 231, 13, 145, 4, 236, 49, 13, 145, 4, 233, 15, 13, 145, 4,
-    68, 13, 145, 4, 225, 217, 13, 145, 4, 225, 80, 13, 145, 4, 159, 13, 145,
-    4, 221, 136, 13, 145, 4, 218, 55, 13, 145, 4, 214, 3, 13, 145, 4, 211,
-    167, 13, 145, 4, 144, 13, 145, 4, 209, 80, 13, 145, 4, 203, 216, 13, 145,
-    4, 66, 13, 145, 4, 199, 230, 13, 145, 4, 197, 199, 13, 145, 4, 196, 222,
-    13, 145, 4, 196, 148, 13, 145, 4, 195, 158, 13, 27, 145, 6, 63, 13, 27,
-    145, 6, 250, 112, 13, 27, 145, 6, 247, 207, 13, 27, 145, 6, 240, 231, 13,
-    27, 145, 6, 69, 13, 27, 145, 6, 236, 49, 13, 27, 145, 6, 234, 190, 13,
-    27, 145, 6, 233, 15, 13, 27, 145, 6, 68, 13, 27, 145, 6, 225, 217, 13,
-    27, 145, 6, 225, 80, 13, 27, 145, 6, 159, 13, 27, 145, 6, 221, 136, 13,
-    27, 145, 6, 218, 55, 13, 27, 145, 6, 72, 13, 27, 145, 6, 214, 3, 13, 27,
-    145, 6, 211, 167, 13, 27, 145, 6, 144, 13, 27, 145, 6, 209, 80, 13, 27,
-    145, 6, 203, 216, 13, 27, 145, 6, 66, 13, 27, 145, 6, 199, 230, 13, 27,
-    145, 6, 197, 199, 13, 27, 145, 6, 196, 222, 13, 27, 145, 6, 196, 148, 13,
-    27, 145, 6, 195, 158, 13, 27, 145, 4, 63, 13, 27, 145, 4, 250, 112, 13,
-    27, 145, 4, 247, 207, 13, 27, 145, 4, 240, 231, 13, 27, 145, 4, 69, 13,
-    27, 145, 4, 236, 49, 13, 27, 145, 4, 234, 190, 13, 27, 145, 4, 233, 15,
-    13, 27, 145, 4, 68, 13, 27, 145, 4, 225, 217, 13, 27, 145, 4, 225, 80,
-    13, 27, 145, 4, 159, 13, 27, 145, 4, 221, 136, 13, 27, 145, 4, 218, 55,
-    13, 27, 145, 4, 72, 13, 27, 145, 4, 214, 3, 13, 27, 145, 4, 211, 167, 13,
-    27, 145, 4, 144, 13, 27, 145, 4, 209, 80, 13, 27, 145, 4, 203, 216, 13,
-    27, 145, 4, 66, 13, 27, 145, 4, 199, 230, 13, 27, 145, 4, 197, 199, 13,
-    27, 145, 4, 196, 222, 13, 27, 145, 4, 196, 148, 13, 27, 145, 4, 195, 158,
-    13, 187, 6, 63, 13, 187, 6, 250, 112, 13, 187, 6, 240, 231, 13, 187, 6,
-    69, 13, 187, 6, 236, 49, 13, 187, 6, 234, 190, 13, 187, 6, 225, 217, 13,
-    187, 6, 225, 80, 13, 187, 6, 159, 13, 187, 6, 221, 136, 13, 187, 6, 218,
-    55, 13, 187, 6, 72, 13, 187, 6, 214, 3, 13, 187, 6, 211, 167, 13, 187, 6,
-    209, 80, 13, 187, 6, 203, 216, 13, 187, 6, 66, 13, 187, 6, 199, 230, 13,
-    187, 6, 197, 199, 13, 187, 6, 196, 222, 13, 187, 6, 196, 148, 13, 187, 4,
-    63, 13, 187, 4, 250, 112, 13, 187, 4, 247, 207, 13, 187, 4, 240, 231, 13,
-    187, 4, 69, 13, 187, 4, 236, 49, 13, 187, 4, 234, 190, 13, 187, 4, 233,
-    15, 13, 187, 4, 68, 13, 187, 4, 225, 217, 13, 187, 4, 225, 80, 13, 187,
-    4, 159, 13, 187, 4, 221, 136, 13, 187, 4, 218, 55, 13, 187, 4, 72, 13,
-    187, 4, 214, 3, 13, 187, 4, 211, 167, 13, 187, 4, 144, 13, 187, 4, 209,
-    80, 13, 187, 4, 203, 216, 13, 187, 4, 66, 13, 187, 4, 199, 230, 13, 187,
-    4, 197, 199, 13, 187, 4, 196, 222, 13, 187, 4, 196, 148, 13, 187, 4, 195,
-    158, 13, 237, 241, 6, 63, 13, 237, 241, 6, 250, 112, 13, 237, 241, 6,
-    240, 231, 13, 237, 241, 6, 69, 13, 237, 241, 6, 236, 49, 13, 237, 241, 6,
-    234, 190, 13, 237, 241, 6, 68, 13, 237, 241, 6, 225, 217, 13, 237, 241,
-    6, 225, 80, 13, 237, 241, 6, 159, 13, 237, 241, 6, 221, 136, 13, 237,
-    241, 6, 72, 13, 237, 241, 6, 209, 80, 13, 237, 241, 6, 203, 216, 13, 237,
-    241, 6, 66, 13, 237, 241, 6, 199, 230, 13, 237, 241, 6, 197, 199, 13,
-    237, 241, 6, 196, 222, 13, 237, 241, 6, 196, 148, 13, 237, 241, 4, 63,
-    13, 237, 241, 4, 250, 112, 13, 237, 241, 4, 247, 207, 13, 237, 241, 4,
-    240, 231, 13, 237, 241, 4, 69, 13, 237, 241, 4, 236, 49, 13, 237, 241, 4,
-    234, 190, 13, 237, 241, 4, 233, 15, 13, 237, 241, 4, 68, 13, 237, 241, 4,
-    225, 217, 13, 237, 241, 4, 225, 80, 13, 237, 241, 4, 159, 13, 237, 241,
-    4, 221, 136, 13, 237, 241, 4, 218, 55, 13, 237, 241, 4, 72, 13, 237, 241,
-    4, 214, 3, 13, 237, 241, 4, 211, 167, 13, 237, 241, 4, 144, 13, 237, 241,
-    4, 209, 80, 13, 237, 241, 4, 203, 216, 13, 237, 241, 4, 66, 13, 237, 241,
-    4, 199, 230, 13, 237, 241, 4, 197, 199, 13, 237, 241, 4, 196, 222, 13,
-    237, 241, 4, 196, 148, 13, 237, 241, 4, 195, 158, 13, 27, 187, 6, 63, 13,
-    27, 187, 6, 250, 112, 13, 27, 187, 6, 247, 207, 13, 27, 187, 6, 240, 231,
-    13, 27, 187, 6, 69, 13, 27, 187, 6, 236, 49, 13, 27, 187, 6, 234, 190,
-    13, 27, 187, 6, 233, 15, 13, 27, 187, 6, 68, 13, 27, 187, 6, 225, 217,
-    13, 27, 187, 6, 225, 80, 13, 27, 187, 6, 159, 13, 27, 187, 6, 221, 136,
-    13, 27, 187, 6, 218, 55, 13, 27, 187, 6, 72, 13, 27, 187, 6, 214, 3, 13,
-    27, 187, 6, 211, 167, 13, 27, 187, 6, 144, 13, 27, 187, 6, 209, 80, 13,
-    27, 187, 6, 203, 216, 13, 27, 187, 6, 66, 13, 27, 187, 6, 199, 230, 13,
-    27, 187, 6, 197, 199, 13, 27, 187, 6, 196, 222, 13, 27, 187, 6, 196, 148,
-    13, 27, 187, 6, 195, 158, 13, 27, 187, 4, 63, 13, 27, 187, 4, 250, 112,
-    13, 27, 187, 4, 247, 207, 13, 27, 187, 4, 240, 231, 13, 27, 187, 4, 69,
-    13, 27, 187, 4, 236, 49, 13, 27, 187, 4, 234, 190, 13, 27, 187, 4, 233,
-    15, 13, 27, 187, 4, 68, 13, 27, 187, 4, 225, 217, 13, 27, 187, 4, 225,
-    80, 13, 27, 187, 4, 159, 13, 27, 187, 4, 221, 136, 13, 27, 187, 4, 218,
-    55, 13, 27, 187, 4, 72, 13, 27, 187, 4, 214, 3, 13, 27, 187, 4, 211, 167,
-    13, 27, 187, 4, 144, 13, 27, 187, 4, 209, 80, 13, 27, 187, 4, 203, 216,
-    13, 27, 187, 4, 66, 13, 27, 187, 4, 199, 230, 13, 27, 187, 4, 197, 199,
-    13, 27, 187, 4, 196, 222, 13, 27, 187, 4, 196, 148, 13, 27, 187, 4, 195,
-    158, 13, 45, 6, 63, 13, 45, 6, 250, 112, 13, 45, 6, 247, 207, 13, 45, 6,
-    240, 231, 13, 45, 6, 69, 13, 45, 6, 236, 49, 13, 45, 6, 234, 190, 13, 45,
-    6, 233, 15, 13, 45, 6, 68, 13, 45, 6, 225, 217, 13, 45, 6, 225, 80, 13,
-    45, 6, 159, 13, 45, 6, 221, 136, 13, 45, 6, 218, 55, 13, 45, 6, 72, 13,
-    45, 6, 214, 3, 13, 45, 6, 211, 167, 13, 45, 6, 144, 13, 45, 6, 209, 80,
-    13, 45, 6, 203, 216, 13, 45, 6, 66, 13, 45, 6, 199, 230, 13, 45, 6, 197,
-    199, 13, 45, 6, 196, 222, 13, 45, 6, 196, 148, 13, 45, 6, 195, 158, 13,
-    45, 4, 63, 13, 45, 4, 250, 112, 13, 45, 4, 247, 207, 13, 45, 4, 240, 231,
-    13, 45, 4, 69, 13, 45, 4, 236, 49, 13, 45, 4, 234, 190, 13, 45, 4, 233,
-    15, 13, 45, 4, 68, 13, 45, 4, 225, 217, 13, 45, 4, 225, 80, 13, 45, 4,
-    159, 13, 45, 4, 221, 136, 13, 45, 4, 218, 55, 13, 45, 4, 72, 13, 45, 4,
-    214, 3, 13, 45, 4, 211, 167, 13, 45, 4, 144, 13, 45, 4, 209, 80, 13, 45,
-    4, 203, 216, 13, 45, 4, 66, 13, 45, 4, 199, 230, 13, 45, 4, 197, 199, 13,
-    45, 4, 196, 222, 13, 45, 4, 196, 148, 13, 45, 4, 195, 158, 13, 45, 27, 6,
-    63, 13, 45, 27, 6, 250, 112, 13, 45, 27, 6, 247, 207, 13, 45, 27, 6, 240,
-    231, 13, 45, 27, 6, 69, 13, 45, 27, 6, 236, 49, 13, 45, 27, 6, 234, 190,
-    13, 45, 27, 6, 233, 15, 13, 45, 27, 6, 68, 13, 45, 27, 6, 225, 217, 13,
-    45, 27, 6, 225, 80, 13, 45, 27, 6, 159, 13, 45, 27, 6, 221, 136, 13, 45,
-    27, 6, 218, 55, 13, 45, 27, 6, 72, 13, 45, 27, 6, 214, 3, 13, 45, 27, 6,
-    211, 167, 13, 45, 27, 6, 144, 13, 45, 27, 6, 209, 80, 13, 45, 27, 6, 203,
-    216, 13, 45, 27, 6, 66, 13, 45, 27, 6, 199, 230, 13, 45, 27, 6, 197, 199,
-    13, 45, 27, 6, 196, 222, 13, 45, 27, 6, 196, 148, 13, 45, 27, 6, 195,
-    158, 13, 45, 27, 4, 63, 13, 45, 27, 4, 250, 112, 13, 45, 27, 4, 247, 207,
-    13, 45, 27, 4, 240, 231, 13, 45, 27, 4, 69, 13, 45, 27, 4, 236, 49, 13,
-    45, 27, 4, 234, 190, 13, 45, 27, 4, 233, 15, 13, 45, 27, 4, 68, 13, 45,
-    27, 4, 225, 217, 13, 45, 27, 4, 225, 80, 13, 45, 27, 4, 159, 13, 45, 27,
-    4, 221, 136, 13, 45, 27, 4, 218, 55, 13, 45, 27, 4, 72, 13, 45, 27, 4,
-    214, 3, 13, 45, 27, 4, 211, 167, 13, 45, 27, 4, 144, 13, 45, 27, 4, 209,
-    80, 13, 45, 27, 4, 203, 216, 13, 45, 27, 4, 66, 13, 45, 27, 4, 199, 230,
-    13, 45, 27, 4, 197, 199, 13, 45, 27, 4, 196, 222, 13, 45, 27, 4, 196,
-    148, 13, 45, 27, 4, 195, 158, 13, 45, 41, 6, 63, 13, 45, 41, 6, 250, 112,
-    13, 45, 41, 6, 247, 207, 13, 45, 41, 6, 240, 231, 13, 45, 41, 6, 69, 13,
-    45, 41, 6, 236, 49, 13, 45, 41, 6, 234, 190, 13, 45, 41, 6, 233, 15, 13,
-    45, 41, 6, 68, 13, 45, 41, 6, 225, 217, 13, 45, 41, 6, 225, 80, 13, 45,
-    41, 6, 159, 13, 45, 41, 6, 221, 136, 13, 45, 41, 6, 218, 55, 13, 45, 41,
-    6, 72, 13, 45, 41, 6, 214, 3, 13, 45, 41, 6, 211, 167, 13, 45, 41, 6,
-    144, 13, 45, 41, 6, 209, 80, 13, 45, 41, 6, 203, 216, 13, 45, 41, 6, 66,
-    13, 45, 41, 6, 199, 230, 13, 45, 41, 6, 197, 199, 13, 45, 41, 6, 196,
-    222, 13, 45, 41, 6, 196, 148, 13, 45, 41, 6, 195, 158, 13, 45, 41, 4, 63,
-    13, 45, 41, 4, 250, 112, 13, 45, 41, 4, 247, 207, 13, 45, 41, 4, 240,
-    231, 13, 45, 41, 4, 69, 13, 45, 41, 4, 236, 49, 13, 45, 41, 4, 234, 190,
-    13, 45, 41, 4, 233, 15, 13, 45, 41, 4, 68, 13, 45, 41, 4, 225, 217, 13,
-    45, 41, 4, 225, 80, 13, 45, 41, 4, 159, 13, 45, 41, 4, 221, 136, 13, 45,
-    41, 4, 218, 55, 13, 45, 41, 4, 72, 13, 45, 41, 4, 214, 3, 13, 45, 41, 4,
-    211, 167, 13, 45, 41, 4, 144, 13, 45, 41, 4, 209, 80, 13, 45, 41, 4, 203,
-    216, 13, 45, 41, 4, 66, 13, 45, 41, 4, 199, 230, 13, 45, 41, 4, 197, 199,
-    13, 45, 41, 4, 196, 222, 13, 45, 41, 4, 196, 148, 13, 45, 41, 4, 195,
-    158, 13, 45, 27, 41, 6, 63, 13, 45, 27, 41, 6, 250, 112, 13, 45, 27, 41,
-    6, 247, 207, 13, 45, 27, 41, 6, 240, 231, 13, 45, 27, 41, 6, 69, 13, 45,
-    27, 41, 6, 236, 49, 13, 45, 27, 41, 6, 234, 190, 13, 45, 27, 41, 6, 233,
-    15, 13, 45, 27, 41, 6, 68, 13, 45, 27, 41, 6, 225, 217, 13, 45, 27, 41,
-    6, 225, 80, 13, 45, 27, 41, 6, 159, 13, 45, 27, 41, 6, 221, 136, 13, 45,
-    27, 41, 6, 218, 55, 13, 45, 27, 41, 6, 72, 13, 45, 27, 41, 6, 214, 3, 13,
-    45, 27, 41, 6, 211, 167, 13, 45, 27, 41, 6, 144, 13, 45, 27, 41, 6, 209,
-    80, 13, 45, 27, 41, 6, 203, 216, 13, 45, 27, 41, 6, 66, 13, 45, 27, 41,
-    6, 199, 230, 13, 45, 27, 41, 6, 197, 199, 13, 45, 27, 41, 6, 196, 222,
-    13, 45, 27, 41, 6, 196, 148, 13, 45, 27, 41, 6, 195, 158, 13, 45, 27, 41,
-    4, 63, 13, 45, 27, 41, 4, 250, 112, 13, 45, 27, 41, 4, 247, 207, 13, 45,
-    27, 41, 4, 240, 231, 13, 45, 27, 41, 4, 69, 13, 45, 27, 41, 4, 236, 49,
-    13, 45, 27, 41, 4, 234, 190, 13, 45, 27, 41, 4, 233, 15, 13, 45, 27, 41,
-    4, 68, 13, 45, 27, 41, 4, 225, 217, 13, 45, 27, 41, 4, 225, 80, 13, 45,
-    27, 41, 4, 159, 13, 45, 27, 41, 4, 221, 136, 13, 45, 27, 41, 4, 218, 55,
-    13, 45, 27, 41, 4, 72, 13, 45, 27, 41, 4, 214, 3, 13, 45, 27, 41, 4, 211,
-    167, 13, 45, 27, 41, 4, 144, 13, 45, 27, 41, 4, 209, 80, 13, 45, 27, 41,
-    4, 203, 216, 13, 45, 27, 41, 4, 66, 13, 45, 27, 41, 4, 199, 230, 13, 45,
-    27, 41, 4, 197, 199, 13, 45, 27, 41, 4, 196, 222, 13, 45, 27, 41, 4, 196,
-    148, 13, 45, 27, 41, 4, 195, 158, 13, 218, 201, 6, 63, 13, 218, 201, 6,
-    250, 112, 13, 218, 201, 6, 247, 207, 13, 218, 201, 6, 240, 231, 13, 218,
-    201, 6, 69, 13, 218, 201, 6, 236, 49, 13, 218, 201, 6, 234, 190, 13, 218,
-    201, 6, 233, 15, 13, 218, 201, 6, 68, 13, 218, 201, 6, 225, 217, 13, 218,
-    201, 6, 225, 80, 13, 218, 201, 6, 159, 13, 218, 201, 6, 221, 136, 13,
-    218, 201, 6, 218, 55, 13, 218, 201, 6, 72, 13, 218, 201, 6, 214, 3, 13,
-    218, 201, 6, 211, 167, 13, 218, 201, 6, 144, 13, 218, 201, 6, 209, 80,
-    13, 218, 201, 6, 203, 216, 13, 218, 201, 6, 66, 13, 218, 201, 6, 199,
-    230, 13, 218, 201, 6, 197, 199, 13, 218, 201, 6, 196, 222, 13, 218, 201,
-    6, 196, 148, 13, 218, 201, 6, 195, 158, 13, 218, 201, 4, 63, 13, 218,
-    201, 4, 250, 112, 13, 218, 201, 4, 247, 207, 13, 218, 201, 4, 240, 231,
-    13, 218, 201, 4, 69, 13, 218, 201, 4, 236, 49, 13, 218, 201, 4, 234, 190,
-    13, 218, 201, 4, 233, 15, 13, 218, 201, 4, 68, 13, 218, 201, 4, 225, 217,
-    13, 218, 201, 4, 225, 80, 13, 218, 201, 4, 159, 13, 218, 201, 4, 221,
-    136, 13, 218, 201, 4, 218, 55, 13, 218, 201, 4, 72, 13, 218, 201, 4, 214,
-    3, 13, 218, 201, 4, 211, 167, 13, 218, 201, 4, 144, 13, 218, 201, 4, 209,
-    80, 13, 218, 201, 4, 203, 216, 13, 218, 201, 4, 66, 13, 218, 201, 4, 199,
-    230, 13, 218, 201, 4, 197, 199, 13, 218, 201, 4, 196, 222, 13, 218, 201,
-    4, 196, 148, 13, 218, 201, 4, 195, 158, 13, 41, 4, 238, 252, 68, 13, 41,
-    4, 238, 252, 225, 217, 13, 27, 6, 251, 134, 13, 27, 6, 248, 206, 13, 27,
-    6, 234, 94, 13, 27, 6, 239, 212, 13, 27, 6, 236, 174, 13, 27, 6, 195, 78,
-    13, 27, 6, 236, 126, 13, 27, 6, 202, 199, 13, 27, 6, 226, 7, 13, 27, 6,
-    225, 2, 13, 27, 6, 222, 245, 13, 27, 6, 218, 145, 13, 27, 6, 215, 186,
-    13, 27, 6, 196, 196, 13, 27, 6, 214, 122, 13, 27, 6, 212, 220, 13, 27, 6,
-    210, 74, 13, 27, 6, 202, 200, 105, 13, 27, 6, 206, 86, 13, 27, 6, 203,
-    89, 13, 27, 6, 200, 28, 13, 27, 6, 212, 246, 13, 27, 6, 245, 75, 13, 27,
-    6, 211, 238, 13, 27, 6, 214, 124, 13, 27, 217, 239, 13, 27, 4, 251, 134,
-    13, 27, 4, 248, 206, 13, 27, 4, 234, 94, 13, 27, 4, 239, 212, 13, 27, 4,
-    236, 174, 13, 27, 4, 195, 78, 13, 27, 4, 236, 126, 13, 27, 4, 202, 199,
-    13, 27, 4, 226, 7, 13, 27, 4, 225, 2, 13, 27, 4, 222, 245, 13, 27, 4,
-    218, 145, 13, 27, 4, 215, 186, 13, 27, 4, 196, 196, 13, 27, 4, 214, 122,
-    13, 27, 4, 212, 220, 13, 27, 4, 210, 74, 13, 27, 4, 48, 206, 86, 13, 27,
-    4, 206, 86, 13, 27, 4, 203, 89, 13, 27, 4, 200, 28, 13, 27, 4, 212, 246,
-    13, 27, 4, 245, 75, 13, 27, 4, 211, 238, 13, 27, 4, 214, 124, 13, 27,
-    213, 132, 239, 124, 13, 27, 236, 175, 105, 13, 27, 202, 200, 105, 13, 27,
-    225, 3, 105, 13, 27, 212, 247, 105, 13, 27, 210, 75, 105, 13, 27, 212,
-    221, 105, 13, 41, 6, 251, 134, 13, 41, 6, 248, 206, 13, 41, 6, 234, 94,
-    13, 41, 6, 239, 212, 13, 41, 6, 236, 174, 13, 41, 6, 195, 78, 13, 41, 6,
-    236, 126, 13, 41, 6, 202, 199, 13, 41, 6, 226, 7, 13, 41, 6, 225, 2, 13,
-    41, 6, 222, 245, 13, 41, 6, 218, 145, 13, 41, 6, 215, 186, 13, 41, 6,
-    196, 196, 13, 41, 6, 214, 122, 13, 41, 6, 212, 220, 13, 41, 6, 210, 74,
-    13, 41, 6, 202, 200, 105, 13, 41, 6, 206, 86, 13, 41, 6, 203, 89, 13, 41,
-    6, 200, 28, 13, 41, 6, 212, 246, 13, 41, 6, 245, 75, 13, 41, 6, 211, 238,
-    13, 41, 6, 214, 124, 13, 41, 217, 239, 13, 41, 4, 251, 134, 13, 41, 4,
-    248, 206, 13, 41, 4, 234, 94, 13, 41, 4, 239, 212, 13, 41, 4, 236, 174,
-    13, 41, 4, 195, 78, 13, 41, 4, 236, 126, 13, 41, 4, 202, 199, 13, 41, 4,
-    226, 7, 13, 41, 4, 225, 2, 13, 41, 4, 222, 245, 13, 41, 4, 218, 145, 13,
-    41, 4, 215, 186, 13, 41, 4, 196, 196, 13, 41, 4, 214, 122, 13, 41, 4,
-    212, 220, 13, 41, 4, 210, 74, 13, 41, 4, 48, 206, 86, 13, 41, 4, 206, 86,
-    13, 41, 4, 203, 89, 13, 41, 4, 200, 28, 13, 41, 4, 212, 246, 13, 41, 4,
-    245, 75, 13, 41, 4, 211, 238, 13, 41, 4, 214, 124, 13, 41, 213, 132, 239,
-    124, 13, 41, 236, 175, 105, 13, 41, 202, 200, 105, 13, 41, 225, 3, 105,
-    13, 41, 212, 247, 105, 13, 41, 210, 75, 105, 13, 41, 212, 221, 105, 13,
-    27, 41, 6, 251, 134, 13, 27, 41, 6, 248, 206, 13, 27, 41, 6, 234, 94, 13,
-    27, 41, 6, 239, 212, 13, 27, 41, 6, 236, 174, 13, 27, 41, 6, 195, 78, 13,
-    27, 41, 6, 236, 126, 13, 27, 41, 6, 202, 199, 13, 27, 41, 6, 226, 7, 13,
-    27, 41, 6, 225, 2, 13, 27, 41, 6, 222, 245, 13, 27, 41, 6, 218, 145, 13,
-    27, 41, 6, 215, 186, 13, 27, 41, 6, 196, 196, 13, 27, 41, 6, 214, 122,
-    13, 27, 41, 6, 212, 220, 13, 27, 41, 6, 210, 74, 13, 27, 41, 6, 202, 200,
-    105, 13, 27, 41, 6, 206, 86, 13, 27, 41, 6, 203, 89, 13, 27, 41, 6, 200,
-    28, 13, 27, 41, 6, 212, 246, 13, 27, 41, 6, 245, 75, 13, 27, 41, 6, 211,
-    238, 13, 27, 41, 6, 214, 124, 13, 27, 41, 217, 239, 13, 27, 41, 4, 251,
-    134, 13, 27, 41, 4, 248, 206, 13, 27, 41, 4, 234, 94, 13, 27, 41, 4, 239,
-    212, 13, 27, 41, 4, 236, 174, 13, 27, 41, 4, 195, 78, 13, 27, 41, 4, 236,
-    126, 13, 27, 41, 4, 202, 199, 13, 27, 41, 4, 226, 7, 13, 27, 41, 4, 225,
-    2, 13, 27, 41, 4, 222, 245, 13, 27, 41, 4, 218, 145, 13, 27, 41, 4, 215,
-    186, 13, 27, 41, 4, 196, 196, 13, 27, 41, 4, 214, 122, 13, 27, 41, 4,
-    212, 220, 13, 27, 41, 4, 210, 74, 13, 27, 41, 4, 48, 206, 86, 13, 27, 41,
-    4, 206, 86, 13, 27, 41, 4, 203, 89, 13, 27, 41, 4, 200, 28, 13, 27, 41,
-    4, 212, 246, 13, 27, 41, 4, 245, 75, 13, 27, 41, 4, 211, 238, 13, 27, 41,
-    4, 214, 124, 13, 27, 41, 213, 132, 239, 124, 13, 27, 41, 236, 175, 105,
-    13, 27, 41, 202, 200, 105, 13, 27, 41, 225, 3, 105, 13, 27, 41, 212, 247,
-    105, 13, 27, 41, 210, 75, 105, 13, 27, 41, 212, 221, 105, 13, 45, 27, 6,
-    251, 134, 13, 45, 27, 6, 248, 206, 13, 45, 27, 6, 234, 94, 13, 45, 27, 6,
-    239, 212, 13, 45, 27, 6, 236, 174, 13, 45, 27, 6, 195, 78, 13, 45, 27, 6,
-    236, 126, 13, 45, 27, 6, 202, 199, 13, 45, 27, 6, 226, 7, 13, 45, 27, 6,
-    225, 2, 13, 45, 27, 6, 222, 245, 13, 45, 27, 6, 218, 145, 13, 45, 27, 6,
-    215, 186, 13, 45, 27, 6, 196, 196, 13, 45, 27, 6, 214, 122, 13, 45, 27,
-    6, 212, 220, 13, 45, 27, 6, 210, 74, 13, 45, 27, 6, 202, 200, 105, 13,
-    45, 27, 6, 206, 86, 13, 45, 27, 6, 203, 89, 13, 45, 27, 6, 200, 28, 13,
-    45, 27, 6, 212, 246, 13, 45, 27, 6, 245, 75, 13, 45, 27, 6, 211, 238, 13,
-    45, 27, 6, 214, 124, 13, 45, 27, 217, 239, 13, 45, 27, 4, 251, 134, 13,
-    45, 27, 4, 248, 206, 13, 45, 27, 4, 234, 94, 13, 45, 27, 4, 239, 212, 13,
-    45, 27, 4, 236, 174, 13, 45, 27, 4, 195, 78, 13, 45, 27, 4, 236, 126, 13,
-    45, 27, 4, 202, 199, 13, 45, 27, 4, 226, 7, 13, 45, 27, 4, 225, 2, 13,
-    45, 27, 4, 222, 245, 13, 45, 27, 4, 218, 145, 13, 45, 27, 4, 215, 186,
-    13, 45, 27, 4, 196, 196, 13, 45, 27, 4, 214, 122, 13, 45, 27, 4, 212,
-    220, 13, 45, 27, 4, 210, 74, 13, 45, 27, 4, 48, 206, 86, 13, 45, 27, 4,
-    206, 86, 13, 45, 27, 4, 203, 89, 13, 45, 27, 4, 200, 28, 13, 45, 27, 4,
-    212, 246, 13, 45, 27, 4, 245, 75, 13, 45, 27, 4, 211, 238, 13, 45, 27, 4,
-    214, 124, 13, 45, 27, 213, 132, 239, 124, 13, 45, 27, 236, 175, 105, 13,
-    45, 27, 202, 200, 105, 13, 45, 27, 225, 3, 105, 13, 45, 27, 212, 247,
-    105, 13, 45, 27, 210, 75, 105, 13, 45, 27, 212, 221, 105, 13, 45, 27, 41,
-    6, 251, 134, 13, 45, 27, 41, 6, 248, 206, 13, 45, 27, 41, 6, 234, 94, 13,
-    45, 27, 41, 6, 239, 212, 13, 45, 27, 41, 6, 236, 174, 13, 45, 27, 41, 6,
-    195, 78, 13, 45, 27, 41, 6, 236, 126, 13, 45, 27, 41, 6, 202, 199, 13,
-    45, 27, 41, 6, 226, 7, 13, 45, 27, 41, 6, 225, 2, 13, 45, 27, 41, 6, 222,
-    245, 13, 45, 27, 41, 6, 218, 145, 13, 45, 27, 41, 6, 215, 186, 13, 45,
-    27, 41, 6, 196, 196, 13, 45, 27, 41, 6, 214, 122, 13, 45, 27, 41, 6, 212,
-    220, 13, 45, 27, 41, 6, 210, 74, 13, 45, 27, 41, 6, 202, 200, 105, 13,
-    45, 27, 41, 6, 206, 86, 13, 45, 27, 41, 6, 203, 89, 13, 45, 27, 41, 6,
-    200, 28, 13, 45, 27, 41, 6, 212, 246, 13, 45, 27, 41, 6, 245, 75, 13, 45,
-    27, 41, 6, 211, 238, 13, 45, 27, 41, 6, 214, 124, 13, 45, 27, 41, 217,
-    239, 13, 45, 27, 41, 4, 251, 134, 13, 45, 27, 41, 4, 248, 206, 13, 45,
-    27, 41, 4, 234, 94, 13, 45, 27, 41, 4, 239, 212, 13, 45, 27, 41, 4, 236,
-    174, 13, 45, 27, 41, 4, 195, 78, 13, 45, 27, 41, 4, 236, 126, 13, 45, 27,
-    41, 4, 202, 199, 13, 45, 27, 41, 4, 226, 7, 13, 45, 27, 41, 4, 225, 2,
-    13, 45, 27, 41, 4, 222, 245, 13, 45, 27, 41, 4, 218, 145, 13, 45, 27, 41,
-    4, 215, 186, 13, 45, 27, 41, 4, 196, 196, 13, 45, 27, 41, 4, 214, 122,
-    13, 45, 27, 41, 4, 212, 220, 13, 45, 27, 41, 4, 210, 74, 13, 45, 27, 41,
-    4, 48, 206, 86, 13, 45, 27, 41, 4, 206, 86, 13, 45, 27, 41, 4, 203, 89,
-    13, 45, 27, 41, 4, 200, 28, 13, 45, 27, 41, 4, 212, 246, 13, 45, 27, 41,
-    4, 245, 75, 13, 45, 27, 41, 4, 211, 238, 13, 45, 27, 41, 4, 214, 124, 13,
-    45, 27, 41, 213, 132, 239, 124, 13, 45, 27, 41, 236, 175, 105, 13, 45,
-    27, 41, 202, 200, 105, 13, 45, 27, 41, 225, 3, 105, 13, 45, 27, 41, 212,
-    247, 105, 13, 45, 27, 41, 210, 75, 105, 13, 45, 27, 41, 212, 221, 105,
-    13, 27, 6, 239, 118, 13, 27, 4, 239, 118, 13, 27, 17, 195, 79, 13, 27,
-    17, 100, 13, 27, 17, 102, 13, 27, 17, 134, 13, 27, 17, 136, 13, 27, 17,
-    146, 13, 27, 17, 167, 13, 27, 17, 178, 13, 27, 17, 171, 13, 27, 17, 182,
-    13, 237, 241, 17, 195, 79, 13, 237, 241, 17, 100, 13, 237, 241, 17, 102,
-    13, 237, 241, 17, 134, 13, 237, 241, 17, 136, 13, 237, 241, 17, 146, 13,
-    237, 241, 17, 167, 13, 237, 241, 17, 178, 13, 237, 241, 17, 171, 13, 237,
-    241, 17, 182, 13, 45, 17, 195, 79, 13, 45, 17, 100, 13, 45, 17, 102, 13,
-    45, 17, 134, 13, 45, 17, 136, 13, 45, 17, 146, 13, 45, 17, 167, 13, 45,
-    17, 178, 13, 45, 17, 171, 13, 45, 17, 182, 13, 45, 27, 17, 195, 79, 13,
-    45, 27, 17, 100, 13, 45, 27, 17, 102, 13, 45, 27, 17, 134, 13, 45, 27,
-    17, 136, 13, 45, 27, 17, 146, 13, 45, 27, 17, 167, 13, 45, 27, 17, 178,
-    13, 45, 27, 17, 171, 13, 45, 27, 17, 182, 13, 218, 201, 17, 195, 79, 13,
-    218, 201, 17, 100, 13, 218, 201, 17, 102, 13, 218, 201, 17, 134, 13, 218,
-    201, 17, 136, 13, 218, 201, 17, 146, 13, 218, 201, 17, 167, 13, 218, 201,
-    17, 178, 13, 218, 201, 17, 171, 13, 218, 201, 17, 182, 23, 139, 226, 72,
-    23, 232, 206, 226, 72, 23, 232, 202, 226, 72, 23, 232, 191, 226, 72, 23,
-    232, 195, 226, 72, 23, 232, 208, 226, 72, 23, 139, 132, 248, 217, 23,
-    232, 206, 132, 248, 217, 23, 139, 162, 200, 64, 132, 248, 217, 23, 139,
-    132, 210, 215, 224, 14, 23, 139, 132, 241, 23, 23, 139, 132, 232, 37, 23,
-    139, 132, 232, 38, 221, 208, 23, 232, 206, 132, 232, 39, 23, 139, 132,
-    219, 63, 23, 232, 206, 132, 219, 63, 23, 139, 132, 112, 248, 217, 23,
-    139, 132, 112, 210, 215, 224, 13, 23, 139, 132, 112, 232, 37, 23, 139,
-    132, 124, 112, 232, 37, 23, 139, 132, 232, 38, 112, 200, 36, 23, 139,
-    132, 112, 241, 144, 23, 139, 132, 112, 241, 145, 132, 248, 217, 23, 139,
-    132, 112, 241, 145, 112, 248, 217, 23, 139, 132, 112, 241, 145, 241, 23,
-    23, 139, 132, 112, 241, 145, 232, 37, 23, 139, 132, 112, 241, 58, 23,
-    232, 206, 132, 112, 241, 58, 23, 139, 112, 248, 218, 127, 226, 72, 23,
-    139, 132, 248, 218, 127, 219, 63, 23, 139, 132, 112, 202, 141, 23, 232,
-    206, 132, 112, 202, 141, 23, 139, 132, 112, 204, 218, 162, 248, 217, 23,
-    139, 132, 112, 248, 218, 162, 204, 217, 23, 139, 132, 112, 162, 248, 217,
-    23, 139, 132, 112, 232, 38, 205, 103, 162, 206, 97, 23, 139, 132, 124,
-    112, 232, 38, 162, 206, 97, 23, 139, 132, 124, 112, 232, 38, 162, 241,
-    144, 23, 139, 132, 232, 38, 112, 124, 162, 206, 97, 23, 139, 132, 112,
-    124, 205, 103, 162, 235, 11, 23, 139, 132, 112, 162, 241, 23, 23, 139,
-    132, 112, 162, 244, 248, 23, 139, 132, 112, 162, 231, 163, 23, 139, 132,
-    112, 162, 232, 37, 23, 139, 162, 248, 204, 132, 112, 204, 217, 23, 139,
-    132, 112, 241, 145, 162, 206, 97, 23, 139, 132, 112, 241, 145, 162, 206,
-    98, 241, 144, 23, 139, 132, 112, 241, 145, 162, 206, 98, 248, 217, 23,
-    139, 112, 162, 231, 164, 132, 200, 36, 23, 139, 132, 162, 231, 164, 112,
-    200, 36, 23, 139, 132, 112, 241, 145, 232, 38, 162, 206, 97, 23, 139,
-    132, 112, 241, 59, 162, 206, 97, 23, 139, 132, 112, 241, 145, 162, 235,
-    11, 23, 139, 132, 112, 241, 145, 241, 24, 162, 235, 11, 23, 139, 112,
-    162, 241, 24, 132, 200, 36, 23, 139, 132, 162, 241, 24, 112, 200, 36, 23,
-    139, 112, 162, 46, 132, 200, 36, 23, 139, 112, 162, 46, 132, 232, 37, 23,
-    139, 132, 162, 251, 89, 214, 35, 112, 200, 36, 23, 139, 132, 162, 251,
-    89, 226, 87, 112, 200, 36, 23, 139, 132, 162, 46, 112, 200, 36, 23, 139,
-    132, 112, 162, 241, 145, 232, 37, 23, 139, 132, 112, 162, 251, 89, 214,
-    34, 23, 139, 132, 112, 162, 251, 88, 23, 139, 112, 162, 251, 89, 214, 35,
-    132, 200, 36, 23, 139, 112, 162, 251, 89, 214, 35, 132, 241, 58, 23, 139,
-    112, 162, 251, 89, 132, 200, 36, 23, 139, 132, 162, 231, 164, 112, 232,
-    37, 23, 232, 197, 235, 7, 235, 122, 23, 232, 197, 235, 7, 235, 123, 248,
-    217, 23, 232, 197, 235, 7, 235, 123, 232, 37, 23, 232, 197, 235, 7, 235,
-    123, 241, 144, 23, 232, 197, 235, 7, 235, 123, 241, 145, 205, 112, 23,
-    232, 204, 235, 7, 235, 123, 241, 144, 23, 139, 235, 7, 235, 123, 241,
-    145, 248, 217, 23, 232, 195, 235, 7, 235, 123, 241, 144, 23, 232, 197,
-    235, 101, 235, 123, 205, 102, 23, 232, 197, 232, 116, 235, 101, 235, 123,
-    205, 102, 23, 232, 197, 235, 101, 235, 123, 205, 103, 235, 7, 248, 217,
-    23, 232, 197, 232, 116, 235, 101, 235, 123, 205, 103, 235, 7, 248, 217,
-    23, 232, 197, 235, 101, 235, 123, 205, 103, 248, 217, 23, 232, 197, 232,
-    116, 235, 101, 235, 123, 205, 103, 248, 217, 23, 232, 197, 235, 101, 235,
-    123, 205, 103, 162, 235, 11, 23, 232, 202, 235, 101, 235, 123, 205, 102,
-    23, 232, 202, 235, 101, 235, 123, 205, 103, 214, 92, 23, 232, 195, 235,
-    101, 235, 123, 205, 103, 214, 92, 23, 232, 191, 235, 101, 235, 123, 205,
-    102, 23, 232, 197, 235, 101, 235, 123, 205, 103, 232, 37, 23, 232, 197,
-    235, 101, 235, 123, 205, 103, 232, 38, 162, 206, 97, 23, 232, 197, 235,
-    101, 235, 123, 205, 103, 232, 38, 216, 51, 202, 141, 23, 232, 196, 23,
-    232, 197, 248, 204, 213, 207, 235, 225, 23, 232, 197, 232, 115, 23, 232,
-    197, 162, 206, 97, 23, 232, 197, 232, 116, 162, 206, 97, 23, 232, 197,
-    162, 248, 217, 23, 232, 197, 162, 235, 11, 23, 232, 197, 205, 113, 132,
-    162, 206, 97, 23, 232, 197, 205, 113, 247, 36, 23, 232, 197, 205, 113,
-    247, 37, 162, 206, 97, 23, 232, 197, 205, 113, 247, 37, 162, 206, 98,
-    248, 217, 23, 232, 197, 205, 113, 222, 46, 23, 232, 203, 23, 232, 204,
-    162, 206, 97, 23, 232, 204, 216, 51, 202, 141, 23, 232, 204, 162, 235,
-    11, 23, 232, 193, 241, 20, 23, 232, 192, 23, 232, 202, 214, 92, 23, 232,
-    201, 23, 232, 202, 192, 162, 206, 97, 23, 232, 202, 162, 206, 97, 23,
-    232, 202, 192, 216, 51, 202, 141, 23, 232, 202, 216, 51, 202, 141, 23,
-    232, 202, 192, 162, 235, 11, 23, 232, 202, 162, 235, 11, 23, 232, 200,
-    214, 92, 23, 232, 199, 23, 232, 205, 23, 232, 190, 23, 232, 191, 162,
-    206, 97, 23, 232, 191, 216, 51, 202, 141, 23, 232, 191, 162, 235, 11, 23,
-    232, 195, 214, 92, 23, 232, 195, 192, 162, 235, 11, 23, 232, 194, 23,
-    232, 195, 205, 224, 23, 232, 195, 192, 162, 206, 97, 23, 232, 195, 162,
-    206, 97, 23, 232, 195, 192, 216, 51, 202, 141, 23, 232, 195, 216, 51,
-    202, 141, 23, 232, 195, 162, 206, 98, 201, 225, 226, 72, 23, 232, 195,
-    162, 248, 204, 112, 210, 2, 23, 232, 207, 23, 139, 132, 112, 210, 2, 23,
-    232, 206, 132, 112, 210, 2, 23, 232, 195, 132, 112, 210, 2, 23, 232, 208,
-    132, 112, 210, 2, 23, 232, 195, 222, 46, 23, 139, 132, 112, 210, 3, 248,
-    217, 23, 139, 132, 112, 210, 3, 241, 144, 23, 232, 195, 132, 112, 210, 3,
-    241, 144, 23, 139, 222, 47, 237, 235, 23, 139, 222, 47, 135, 209, 253,
-    204, 217, 23, 139, 222, 47, 135, 209, 253, 241, 9, 23, 139, 222, 47, 135,
-    214, 45, 244, 248, 23, 139, 222, 47, 200, 36, 23, 139, 162, 200, 64, 222,
-    47, 200, 36, 23, 232, 206, 222, 47, 200, 36, 23, 232, 191, 222, 47, 200,
-    36, 23, 232, 208, 222, 47, 200, 36, 23, 139, 222, 47, 210, 215, 224, 14,
-    23, 139, 222, 47, 248, 217, 23, 139, 222, 47, 201, 226, 202, 141, 23,
-    139, 222, 47, 202, 141, 23, 232, 195, 222, 47, 202, 141, 23, 139, 222,
-    47, 132, 202, 141, 23, 232, 195, 222, 47, 132, 202, 141, 23, 232, 208,
-    222, 47, 132, 162, 132, 162, 214, 34, 23, 232, 208, 222, 47, 132, 162,
-    132, 202, 141, 23, 139, 222, 47, 226, 72, 23, 232, 206, 222, 47, 226, 72,
-    23, 232, 195, 222, 47, 226, 72, 23, 232, 208, 222, 47, 226, 72, 23, 139,
-    132, 112, 222, 46, 23, 232, 206, 132, 112, 222, 46, 23, 232, 195, 132,
-    112, 222, 46, 23, 232, 195, 210, 2, 23, 232, 208, 132, 112, 222, 46, 23,
-    139, 132, 112, 241, 62, 222, 46, 23, 232, 206, 132, 112, 241, 62, 222,
-    46, 23, 139, 210, 3, 237, 235, 23, 232, 195, 210, 3, 135, 132, 162, 231,
-    165, 219, 63, 23, 232, 208, 210, 3, 135, 112, 162, 132, 241, 61, 23, 139,
-    210, 3, 200, 36, 23, 139, 210, 3, 210, 215, 224, 14, 23, 139, 210, 3,
-    222, 46, 23, 232, 206, 210, 3, 222, 46, 23, 232, 191, 210, 3, 222, 46,
-    23, 232, 208, 210, 3, 222, 46, 23, 139, 210, 3, 219, 63, 23, 139, 210, 3,
-    112, 241, 144, 23, 139, 210, 3, 112, 210, 215, 224, 13, 23, 139, 210, 3,
-    226, 72, 23, 139, 210, 3, 202, 141, 23, 232, 193, 210, 3, 202, 141, 23,
-    139, 132, 210, 3, 222, 46, 23, 232, 206, 132, 210, 3, 222, 46, 23, 232,
-    200, 132, 210, 3, 222, 47, 214, 119, 23, 232, 193, 132, 210, 3, 222, 47,
-    214, 34, 23, 232, 193, 132, 210, 3, 222, 47, 226, 86, 23, 232, 193, 132,
-    210, 3, 222, 47, 200, 63, 23, 232, 202, 132, 210, 3, 222, 46, 23, 232,
-    195, 132, 210, 3, 222, 46, 23, 232, 208, 132, 210, 3, 222, 47, 214, 34,
-    23, 232, 208, 132, 210, 3, 222, 46, 23, 139, 112, 237, 235, 23, 232, 195,
-    219, 63, 23, 139, 112, 200, 36, 23, 232, 206, 112, 200, 36, 23, 139, 112,
-    210, 215, 224, 14, 23, 139, 112, 124, 162, 206, 97, 23, 232, 193, 112,
-    202, 141, 23, 139, 112, 162, 222, 46, 23, 139, 112, 222, 46, 23, 139,
-    112, 210, 3, 222, 46, 23, 232, 206, 112, 210, 3, 222, 46, 23, 232, 200,
-    112, 210, 3, 222, 47, 214, 119, 23, 232, 202, 112, 210, 3, 222, 46, 23,
-    232, 195, 112, 210, 3, 222, 46, 23, 232, 208, 112, 210, 3, 222, 47, 214,
-    34, 23, 232, 208, 112, 210, 3, 222, 47, 226, 86, 23, 232, 208, 112, 210,
-    3, 222, 46, 23, 232, 206, 112, 210, 3, 222, 47, 248, 217, 23, 232, 204,
-    112, 210, 3, 222, 47, 241, 144, 23, 232, 204, 112, 210, 3, 222, 47, 241,
-    145, 206, 97, 23, 232, 193, 112, 210, 3, 222, 47, 241, 145, 214, 34, 23,
-    232, 193, 112, 210, 3, 222, 47, 241, 145, 226, 86, 23, 232, 193, 112,
-    210, 3, 222, 47, 241, 144, 23, 232, 195, 132, 232, 37, 23, 139, 132, 162,
-    206, 97, 23, 232, 195, 132, 162, 206, 97, 23, 139, 132, 162, 206, 98,
-    162, 239, 146, 23, 139, 132, 162, 206, 98, 162, 241, 144, 23, 139, 132,
-    162, 206, 98, 162, 248, 217, 23, 139, 132, 162, 206, 98, 132, 248, 217,
-    23, 139, 132, 162, 206, 98, 248, 88, 248, 217, 23, 139, 132, 162, 206,
-    98, 132, 232, 39, 23, 139, 132, 162, 235, 12, 132, 204, 217, 23, 139,
-    132, 162, 235, 12, 132, 248, 217, 23, 139, 132, 162, 122, 23, 139, 132,
-    162, 241, 20, 23, 139, 132, 162, 241, 12, 162, 226, 41, 23, 232, 204,
-    132, 162, 241, 12, 162, 226, 41, 23, 139, 132, 162, 241, 12, 162, 200,
-    63, 23, 139, 132, 162, 244, 249, 23, 232, 202, 132, 202, 141, 23, 232,
-    202, 132, 162, 214, 92, 23, 232, 195, 132, 162, 214, 92, 23, 232, 195,
-    132, 162, 222, 227, 23, 232, 195, 132, 202, 141, 23, 232, 195, 132, 162,
-    205, 224, 23, 232, 208, 132, 162, 214, 34, 23, 232, 208, 132, 162, 226,
-    86, 23, 232, 208, 132, 202, 141, 23, 139, 202, 141, 23, 139, 162, 232,
-    115, 23, 139, 162, 206, 98, 239, 146, 23, 139, 162, 206, 98, 241, 144,
-    23, 139, 162, 206, 98, 248, 217, 23, 139, 162, 235, 11, 23, 139, 162,
-    248, 204, 132, 219, 63, 23, 139, 162, 248, 204, 112, 210, 2, 23, 139,
-    162, 248, 204, 210, 3, 222, 46, 23, 139, 162, 200, 64, 99, 235, 122, 23,
-    139, 162, 127, 99, 235, 122, 23, 139, 162, 200, 64, 115, 235, 122, 23,
-    139, 162, 200, 64, 235, 7, 235, 122, 23, 139, 162, 127, 235, 7, 210, 215,
-    224, 13, 23, 232, 198, 23, 139, 232, 115, 23, 201, 227, 206, 61, 23, 201,
-    227, 218, 119, 23, 201, 227, 248, 203, 23, 233, 105, 206, 61, 23, 233,
-    105, 218, 119, 23, 233, 105, 248, 203, 23, 204, 201, 206, 61, 23, 204,
-    201, 218, 119, 23, 204, 201, 248, 203, 23, 248, 29, 206, 61, 23, 248, 29,
-    218, 119, 23, 248, 29, 248, 203, 23, 209, 132, 206, 61, 23, 209, 132,
-    218, 119, 23, 209, 132, 248, 203, 23, 204, 84, 203, 249, 23, 204, 84,
-    248, 203, 23, 205, 90, 222, 228, 206, 61, 23, 205, 90, 4, 206, 61, 23,
-    205, 90, 222, 228, 218, 119, 23, 205, 90, 4, 218, 119, 23, 205, 90, 207,
-    86, 23, 235, 73, 222, 228, 206, 61, 23, 235, 73, 4, 206, 61, 23, 235, 73,
-    222, 228, 218, 119, 23, 235, 73, 4, 218, 119, 23, 235, 73, 207, 86, 23,
-    205, 90, 235, 73, 251, 128, 23, 218, 157, 124, 135, 222, 227, 23, 218,
-    157, 124, 135, 205, 224, 23, 218, 157, 124, 207, 86, 23, 218, 157, 135,
-    207, 86, 23, 218, 157, 124, 135, 251, 129, 222, 227, 23, 218, 157, 124,
-    135, 251, 129, 205, 224, 23, 218, 157, 206, 98, 202, 30, 206, 98, 208,
-    161, 23, 218, 156, 235, 128, 241, 134, 23, 218, 158, 235, 128, 241, 134,
-    23, 218, 156, 206, 62, 204, 218, 205, 224, 23, 218, 156, 206, 62, 204,
-    218, 219, 189, 23, 218, 156, 206, 62, 204, 218, 222, 227, 23, 218, 156,
-    206, 62, 204, 218, 222, 225, 23, 218, 156, 206, 62, 196, 247, 235, 76,
-    23, 218, 156, 52, 204, 217, 23, 218, 156, 52, 196, 247, 235, 76, 23, 218,
-    156, 52, 251, 128, 23, 218, 156, 52, 251, 129, 196, 247, 235, 76, 23,
-    218, 156, 241, 61, 23, 218, 156, 201, 165, 204, 218, 218, 160, 23, 218,
-    156, 201, 165, 196, 247, 235, 76, 23, 218, 156, 201, 165, 251, 128, 23,
-    218, 156, 201, 165, 251, 129, 196, 247, 235, 76, 23, 218, 156, 248, 222,
-    205, 224, 23, 218, 156, 248, 222, 219, 189, 23, 218, 156, 248, 222, 222,
-    227, 23, 218, 156, 241, 102, 205, 224, 23, 218, 156, 241, 102, 219, 189,
-    23, 218, 156, 241, 102, 222, 227, 23, 218, 156, 241, 102, 209, 192, 23,
-    218, 156, 245, 102, 205, 224, 23, 218, 156, 245, 102, 219, 189, 23, 218,
-    156, 245, 102, 222, 227, 23, 218, 156, 111, 205, 224, 23, 218, 156, 111,
-    219, 189, 23, 218, 156, 111, 222, 227, 23, 218, 156, 195, 24, 205, 224,
-    23, 218, 156, 195, 24, 219, 189, 23, 218, 156, 195, 24, 222, 227, 23,
-    218, 156, 213, 87, 205, 224, 23, 218, 156, 213, 87, 219, 189, 23, 218,
-    156, 213, 87, 222, 227, 23, 201, 195, 209, 190, 206, 61, 23, 201, 195,
-    209, 190, 237, 245, 23, 201, 195, 209, 190, 251, 128, 23, 201, 195, 209,
-    191, 206, 61, 23, 201, 195, 209, 191, 237, 245, 23, 201, 195, 209, 191,
-    251, 128, 23, 201, 195, 207, 30, 23, 201, 195, 250, 232, 205, 121, 206,
-    61, 23, 201, 195, 250, 232, 205, 121, 237, 245, 23, 201, 195, 250, 232,
-    205, 121, 201, 164, 23, 218, 159, 250, 126, 205, 224, 23, 218, 159, 250,
-    126, 219, 189, 23, 218, 159, 250, 126, 222, 227, 23, 218, 159, 250, 126,
-    222, 225, 23, 218, 159, 201, 221, 205, 224, 23, 218, 159, 201, 221, 219,
-    189, 23, 218, 159, 201, 221, 222, 227, 23, 218, 159, 201, 221, 222, 225,
-    23, 218, 159, 248, 204, 250, 126, 205, 224, 23, 218, 159, 248, 204, 250,
-    126, 219, 189, 23, 218, 159, 248, 204, 250, 126, 222, 227, 23, 218, 159,
-    248, 204, 250, 126, 222, 225, 23, 218, 159, 248, 204, 201, 221, 205, 224,
-    23, 218, 159, 248, 204, 201, 221, 219, 189, 23, 218, 159, 248, 204, 201,
-    221, 222, 227, 23, 218, 159, 248, 204, 201, 221, 222, 225, 23, 218, 158,
-    206, 62, 204, 218, 205, 224, 23, 218, 158, 206, 62, 204, 218, 219, 189,
-    23, 218, 158, 206, 62, 204, 218, 222, 227, 23, 218, 158, 206, 62, 204,
-    218, 222, 225, 23, 218, 158, 206, 62, 196, 247, 235, 76, 23, 218, 158,
-    52, 204, 217, 23, 218, 158, 52, 196, 247, 235, 76, 23, 218, 158, 52, 251,
-    128, 23, 218, 158, 52, 251, 129, 196, 247, 235, 76, 23, 218, 158, 241,
-    61, 23, 218, 158, 201, 165, 204, 218, 218, 160, 23, 218, 158, 201, 165,
-    196, 247, 235, 76, 23, 218, 158, 201, 165, 251, 129, 218, 160, 23, 218,
-    158, 201, 165, 251, 129, 196, 247, 235, 76, 23, 218, 158, 248, 221, 23,
-    218, 158, 241, 102, 205, 224, 23, 218, 158, 241, 102, 219, 189, 23, 218,
-    158, 241, 102, 222, 227, 23, 218, 158, 245, 101, 23, 218, 158, 111, 205,
-    224, 23, 218, 158, 111, 219, 189, 23, 218, 158, 111, 222, 227, 23, 218,
-    158, 195, 24, 205, 224, 23, 218, 158, 195, 24, 219, 189, 23, 218, 158,
-    195, 24, 222, 227, 23, 218, 158, 213, 87, 205, 224, 23, 218, 158, 213,
-    87, 219, 189, 23, 218, 158, 213, 87, 222, 227, 23, 201, 196, 209, 191,
-    206, 61, 23, 201, 196, 209, 191, 237, 245, 23, 201, 196, 209, 191, 251,
-    128, 23, 201, 196, 209, 190, 206, 61, 23, 201, 196, 209, 190, 237, 245,
-    23, 201, 196, 209, 190, 251, 128, 23, 201, 196, 207, 30, 23, 218, 156,
-    241, 12, 211, 88, 205, 224, 23, 218, 156, 241, 12, 211, 88, 219, 189, 23,
-    218, 156, 241, 12, 211, 88, 222, 227, 23, 218, 156, 241, 12, 211, 88,
-    222, 225, 23, 218, 156, 241, 12, 232, 222, 205, 224, 23, 218, 156, 241,
-    12, 232, 222, 219, 189, 23, 218, 156, 241, 12, 232, 222, 222, 227, 23,
-    218, 156, 241, 12, 232, 222, 222, 225, 23, 218, 156, 241, 12, 202, 147,
-    244, 250, 205, 224, 23, 218, 156, 241, 12, 202, 147, 244, 250, 219, 189,
-    23, 218, 156, 231, 60, 205, 224, 23, 218, 156, 231, 60, 219, 189, 23,
-    218, 156, 231, 60, 222, 227, 23, 218, 156, 221, 226, 205, 224, 23, 218,
-    156, 221, 226, 219, 189, 23, 218, 156, 221, 226, 222, 227, 23, 218, 156,
-    221, 226, 4, 237, 245, 23, 218, 156, 197, 123, 241, 12, 52, 205, 224, 23,
-    218, 156, 197, 123, 241, 12, 52, 219, 189, 23, 218, 156, 197, 123, 241,
-    12, 52, 222, 227, 23, 218, 156, 197, 123, 241, 12, 201, 165, 205, 224,
-    23, 218, 156, 197, 123, 241, 12, 201, 165, 219, 189, 23, 218, 156, 197,
-    123, 241, 12, 201, 165, 222, 227, 23, 218, 156, 241, 12, 202, 209, 204,
-    217, 23, 218, 156, 241, 10, 241, 62, 205, 224, 23, 218, 156, 241, 10,
-    241, 62, 219, 189, 23, 209, 190, 206, 61, 23, 209, 190, 237, 245, 23,
-    209, 190, 251, 130, 23, 218, 156, 207, 30, 23, 218, 156, 241, 12, 232,
-    30, 234, 234, 197, 148, 23, 218, 156, 231, 60, 232, 30, 234, 234, 197,
-    148, 23, 218, 156, 221, 226, 232, 30, 234, 234, 197, 148, 23, 218, 156,
-    197, 123, 232, 30, 234, 234, 197, 148, 23, 209, 190, 206, 62, 232, 30,
-    234, 234, 197, 148, 23, 209, 190, 52, 232, 30, 234, 234, 197, 148, 23,
-    209, 190, 251, 129, 232, 30, 234, 234, 197, 148, 23, 218, 156, 241, 12,
-    232, 30, 245, 82, 23, 218, 156, 231, 60, 232, 30, 245, 82, 23, 218, 156,
-    221, 226, 232, 30, 245, 82, 23, 218, 156, 197, 123, 232, 30, 245, 82, 23,
-    209, 190, 206, 62, 232, 30, 245, 82, 23, 209, 190, 52, 232, 30, 245, 82,
-    23, 209, 190, 251, 129, 232, 30, 245, 82, 23, 218, 156, 197, 123, 239,
-    147, 213, 113, 205, 224, 23, 218, 156, 197, 123, 239, 147, 213, 113, 219,
-    189, 23, 218, 156, 197, 123, 239, 147, 213, 113, 222, 227, 23, 218, 158,
-    241, 12, 232, 30, 247, 46, 205, 224, 23, 218, 158, 241, 12, 232, 30, 247,
-    46, 222, 227, 23, 218, 158, 231, 60, 232, 30, 247, 46, 4, 237, 245, 23,
-    218, 158, 231, 60, 232, 30, 247, 46, 222, 228, 237, 245, 23, 218, 158,
-    231, 60, 232, 30, 247, 46, 4, 201, 164, 23, 218, 158, 231, 60, 232, 30,
-    247, 46, 222, 228, 201, 164, 23, 218, 158, 221, 226, 232, 30, 247, 46, 4,
-    206, 61, 23, 218, 158, 221, 226, 232, 30, 247, 46, 222, 228, 206, 61, 23,
-    218, 158, 221, 226, 232, 30, 247, 46, 4, 237, 245, 23, 218, 158, 221,
-    226, 232, 30, 247, 46, 222, 228, 237, 245, 23, 218, 158, 197, 123, 232,
-    30, 247, 46, 205, 224, 23, 218, 158, 197, 123, 232, 30, 247, 46, 222,
-    227, 23, 209, 191, 206, 62, 232, 30, 247, 45, 23, 209, 191, 52, 232, 30,
-    247, 45, 23, 209, 191, 251, 129, 232, 30, 247, 45, 23, 218, 158, 241, 12,
-    232, 30, 235, 70, 205, 224, 23, 218, 158, 241, 12, 232, 30, 235, 70, 222,
-    227, 23, 218, 158, 231, 60, 232, 30, 235, 70, 4, 237, 245, 23, 218, 158,
-    231, 60, 232, 30, 235, 70, 222, 228, 237, 245, 23, 218, 158, 231, 60,
-    232, 30, 235, 70, 201, 165, 4, 201, 164, 23, 218, 158, 231, 60, 232, 30,
-    235, 70, 201, 165, 222, 228, 201, 164, 23, 218, 158, 221, 226, 232, 30,
-    235, 70, 4, 206, 61, 23, 218, 158, 221, 226, 232, 30, 235, 70, 222, 228,
-    206, 61, 23, 218, 158, 221, 226, 232, 30, 235, 70, 4, 237, 245, 23, 218,
-    158, 221, 226, 232, 30, 235, 70, 222, 228, 237, 245, 23, 218, 158, 197,
-    123, 232, 30, 235, 70, 205, 224, 23, 218, 158, 197, 123, 232, 30, 235,
-    70, 222, 227, 23, 209, 191, 206, 62, 232, 30, 235, 69, 23, 209, 191, 52,
-    232, 30, 235, 69, 23, 209, 191, 251, 129, 232, 30, 235, 69, 23, 218, 158,
-    241, 12, 205, 224, 23, 218, 158, 241, 12, 219, 189, 23, 218, 158, 241,
-    12, 222, 227, 23, 218, 158, 241, 12, 222, 225, 23, 218, 158, 241, 12,
-    244, 163, 23, 218, 158, 231, 60, 205, 224, 23, 218, 158, 221, 226, 205,
-    224, 23, 218, 158, 197, 123, 205, 212, 23, 218, 158, 197, 123, 205, 224,
-    23, 218, 158, 197, 123, 222, 227, 23, 209, 191, 206, 61, 23, 209, 191,
-    237, 245, 23, 209, 191, 251, 128, 23, 218, 158, 207, 31, 213, 145, 23,
-    218, 156, 250, 232, 244, 250, 4, 206, 61, 23, 218, 156, 250, 232, 244,
-    250, 219, 190, 206, 61, 23, 218, 156, 250, 232, 244, 250, 4, 237, 245,
-    23, 218, 156, 250, 232, 244, 250, 219, 190, 237, 245, 23, 218, 158, 250,
-    232, 244, 250, 232, 30, 197, 149, 4, 206, 61, 23, 218, 158, 250, 232,
-    244, 250, 232, 30, 197, 149, 219, 190, 206, 61, 23, 218, 158, 250, 232,
-    244, 250, 232, 30, 197, 149, 222, 228, 206, 61, 23, 218, 158, 250, 232,
-    244, 250, 232, 30, 197, 149, 4, 237, 245, 23, 218, 158, 250, 232, 244,
-    250, 232, 30, 197, 149, 219, 190, 237, 245, 23, 218, 158, 250, 232, 244,
-    250, 232, 30, 197, 149, 222, 228, 237, 245, 23, 218, 156, 196, 247, 244,
-    250, 234, 234, 206, 61, 23, 218, 156, 196, 247, 244, 250, 234, 234, 237,
-    245, 23, 218, 158, 196, 247, 244, 250, 232, 30, 197, 149, 206, 61, 23,
-    218, 158, 196, 247, 244, 250, 232, 30, 197, 149, 237, 245, 23, 218, 156,
-    235, 128, 244, 247, 206, 61, 23, 218, 156, 235, 128, 244, 247, 237, 245,
-    23, 218, 158, 235, 128, 244, 247, 232, 30, 197, 149, 206, 61, 23, 218,
-    158, 235, 128, 244, 247, 232, 30, 197, 149, 237, 245, 23, 237, 161, 250,
-    218, 205, 224, 23, 237, 161, 250, 218, 222, 227, 23, 237, 161, 235, 203,
-    23, 237, 161, 205, 227, 23, 237, 161, 203, 16, 23, 237, 161, 210, 134,
-    23, 237, 161, 206, 67, 23, 237, 161, 206, 68, 251, 128, 23, 237, 161,
-    236, 99, 214, 46, 202, 78, 23, 237, 161, 233, 115, 23, 232, 137, 23, 232,
-    138, 210, 7, 23, 232, 138, 218, 156, 204, 217, 23, 232, 138, 218, 156,
-    202, 81, 23, 232, 138, 218, 158, 204, 217, 23, 232, 138, 218, 156, 241,
-    11, 23, 232, 138, 218, 158, 241, 11, 23, 232, 138, 218, 161, 244, 249,
-    23, 235, 234, 239, 85, 212, 79, 216, 21, 235, 12, 202, 79, 23, 235, 234,
-    239, 85, 212, 79, 216, 21, 124, 214, 73, 237, 235, 23, 235, 234, 239, 85,
-    212, 79, 216, 21, 124, 214, 73, 135, 202, 79, 23, 236, 65, 204, 218, 200,
-    36, 23, 236, 65, 204, 218, 217, 84, 23, 236, 65, 204, 218, 237, 235, 23,
-    237, 219, 236, 65, 217, 85, 237, 235, 23, 237, 219, 236, 65, 135, 217,
-    84, 23, 237, 219, 236, 65, 124, 217, 84, 23, 237, 219, 236, 65, 217, 85,
-    200, 36, 23, 235, 29, 217, 84, 23, 235, 29, 241, 134, 23, 235, 29, 196,
-    250, 23, 236, 60, 214, 92, 23, 236, 60, 205, 89, 23, 236, 60, 244, 202,
-    23, 236, 68, 248, 127, 206, 61, 23, 236, 68, 248, 127, 218, 119, 23, 236,
-    60, 157, 214, 92, 23, 236, 60, 197, 62, 214, 92, 23, 236, 60, 157, 244,
-    202, 23, 236, 60, 197, 60, 218, 160, 23, 236, 68, 197, 43, 23, 236, 61,
-    200, 36, 23, 236, 61, 237, 235, 23, 236, 61, 235, 56, 23, 236, 63, 204,
-    217, 23, 236, 63, 204, 218, 237, 245, 23, 236, 63, 204, 218, 251, 128,
-    23, 236, 64, 204, 217, 23, 236, 64, 204, 218, 237, 245, 23, 236, 64, 204,
-    218, 251, 128, 23, 236, 63, 241, 9, 23, 236, 64, 241, 9, 23, 236, 63,
-    244, 244, 23, 245, 97, 211, 217, 23, 245, 97, 217, 84, 23, 245, 97, 204,
-    131, 23, 203, 17, 245, 97, 232, 48, 23, 203, 17, 245, 97, 219, 63, 23,
-    203, 17, 245, 97, 221, 208, 23, 237, 74, 23, 216, 21, 217, 84, 23, 216,
-    21, 241, 134, 23, 216, 21, 196, 248, 23, 216, 21, 197, 57, 23, 251, 190,
-    248, 120, 214, 34, 23, 251, 190, 204, 130, 226, 86, 23, 251, 190, 248,
-    122, 4, 209, 189, 23, 251, 190, 204, 132, 4, 209, 189, 23, 248, 49, 226,
-    58, 23, 248, 49, 236, 88, 23, 218, 165, 244, 203, 217, 84, 23, 218, 165,
-    244, 203, 235, 11, 23, 218, 165, 244, 203, 241, 134, 23, 218, 165, 205,
-    219, 23, 218, 165, 205, 220, 196, 250, 23, 218, 165, 205, 220, 214, 92,
-    23, 218, 165, 234, 230, 23, 218, 165, 234, 231, 196, 250, 23, 218, 165,
-    234, 231, 214, 92, 23, 218, 165, 192, 244, 249, 23, 218, 165, 192, 235,
-    11, 23, 218, 165, 192, 196, 250, 23, 218, 165, 192, 214, 27, 23, 218,
-    165, 192, 214, 28, 196, 250, 23, 218, 165, 192, 214, 28, 196, 77, 23,
-    218, 165, 192, 210, 163, 23, 218, 165, 192, 210, 164, 196, 250, 23, 218,
-    165, 192, 210, 164, 196, 77, 23, 218, 165, 224, 57, 23, 218, 165, 224,
-    58, 235, 11, 23, 218, 165, 224, 58, 196, 250, 23, 218, 165, 203, 16, 23,
-    218, 165, 203, 17, 235, 11, 23, 218, 165, 203, 17, 204, 131, 23, 222, 60,
-    212, 23, 202, 19, 23, 222, 62, 221, 203, 127, 200, 32, 23, 222, 62, 200,
-    33, 127, 221, 202, 23, 218, 165, 241, 100, 23, 218, 165, 196, 249, 206,
-    61, 23, 218, 165, 196, 249, 237, 245, 23, 201, 250, 204, 237, 214, 35,
-    235, 205, 23, 201, 250, 222, 105, 222, 59, 23, 201, 250, 202, 68, 248,
-    204, 222, 59, 23, 201, 250, 202, 68, 201, 225, 226, 42, 218, 164, 23,
-    201, 250, 226, 42, 218, 165, 210, 134, 23, 201, 250, 218, 155, 251, 215,
-    245, 98, 23, 201, 250, 247, 37, 204, 237, 214, 34, 23, 201, 250, 247, 37,
-    226, 42, 218, 164, 23, 203, 44, 23, 203, 45, 218, 160, 23, 203, 45, 214,
-    120, 201, 249, 23, 203, 45, 214, 120, 201, 250, 218, 160, 23, 203, 45,
-    214, 120, 222, 59, 23, 203, 45, 214, 120, 222, 60, 218, 160, 23, 203, 45,
-    248, 143, 222, 59, 23, 218, 156, 225, 197, 23, 218, 158, 225, 197, 23,
-    217, 109, 23, 232, 233, 23, 236, 91, 23, 206, 164, 232, 36, 205, 122, 23,
-    206, 164, 232, 36, 212, 77, 23, 197, 147, 206, 164, 232, 36, 218, 163,
-    23, 235, 68, 206, 164, 232, 36, 218, 163, 23, 206, 164, 202, 80, 234,
-    235, 197, 153, 23, 201, 232, 204, 218, 204, 205, 23, 201, 232, 241, 10,
-    248, 221, 23, 201, 233, 200, 218, 23, 200, 33, 248, 111, 202, 80, 234,
-    235, 232, 36, 225, 123, 23, 222, 87, 244, 164, 23, 222, 87, 222, 157, 23,
-    222, 87, 222, 156, 23, 222, 87, 222, 155, 23, 222, 87, 222, 154, 23, 222,
-    87, 222, 153, 23, 222, 87, 222, 152, 23, 222, 87, 222, 151, 23, 235, 127,
-    23, 222, 1, 205, 148, 23, 222, 2, 205, 148, 23, 222, 4, 232, 111, 23,
-    222, 4, 197, 58, 23, 222, 4, 239, 199, 23, 222, 4, 232, 138, 217, 109,
-    23, 222, 4, 201, 234, 23, 222, 4, 222, 86, 239, 117, 23, 244, 159, 23,
-    234, 217, 204, 226, 23, 207, 105, 23, 244, 168, 23, 213, 140, 23, 235,
-    137, 218, 227, 23, 235, 137, 218, 226, 23, 235, 137, 218, 225, 23, 235,
-    137, 218, 224, 23, 235, 137, 218, 223, 23, 209, 193, 218, 227, 23, 209,
-    193, 218, 226, 23, 209, 193, 218, 225, 23, 209, 193, 218, 224, 23, 209,
-    193, 218, 223, 23, 209, 193, 218, 222, 23, 209, 193, 218, 221, 23, 209,
-    193, 218, 220, 23, 209, 193, 218, 234, 23, 209, 193, 218, 233, 23, 209,
-    193, 218, 232, 23, 209, 193, 218, 231, 23, 209, 193, 218, 230, 23, 209,
-    193, 218, 229, 23, 209, 193, 218, 228, 38, 125, 1, 250, 113, 38, 125, 1,
-    248, 9, 38, 125, 1, 199, 116, 38, 125, 1, 233, 159, 38, 125, 1, 239, 23,
-    38, 125, 1, 196, 38, 38, 125, 1, 195, 58, 38, 125, 1, 195, 84, 38, 125,
-    1, 225, 221, 38, 125, 1, 84, 225, 221, 38, 125, 1, 68, 38, 125, 1, 239,
-    44, 38, 125, 1, 225, 23, 38, 125, 1, 222, 39, 38, 125, 1, 218, 59, 38,
-    125, 1, 217, 206, 38, 125, 1, 214, 104, 38, 125, 1, 212, 104, 38, 125, 1,
-    209, 249, 38, 125, 1, 205, 229, 38, 125, 1, 200, 246, 38, 125, 1, 200,
-    83, 38, 125, 1, 234, 238, 38, 125, 1, 232, 91, 38, 125, 1, 206, 154, 38,
-    125, 1, 201, 92, 38, 125, 1, 245, 36, 38, 125, 1, 207, 50, 38, 125, 1,
-    196, 47, 38, 125, 1, 196, 49, 38, 125, 1, 196, 82, 38, 125, 1, 195, 217,
-    38, 125, 1, 4, 195, 182, 38, 125, 1, 196, 3, 38, 125, 1, 226, 6, 4, 195,
-    182, 38, 125, 1, 248, 171, 195, 182, 38, 125, 1, 226, 6, 248, 171, 195,
-    182, 38, 125, 1, 235, 103, 215, 88, 211, 224, 86, 1, 166, 215, 88, 211,
-    224, 86, 1, 201, 113, 215, 88, 211, 224, 86, 1, 215, 207, 215, 88, 211,
-    224, 86, 1, 189, 215, 88, 211, 224, 86, 1, 142, 215, 88, 211, 224, 86, 1,
-    176, 215, 88, 211, 224, 86, 1, 196, 208, 215, 88, 211, 224, 86, 1, 216,
-    118, 215, 88, 211, 224, 86, 1, 247, 174, 215, 88, 211, 224, 86, 1, 172,
-    215, 88, 211, 224, 86, 1, 183, 215, 88, 211, 224, 86, 1, 195, 115, 215,
-    88, 211, 224, 86, 1, 217, 163, 215, 88, 211, 224, 86, 1, 215, 194, 215,
-    88, 211, 224, 86, 1, 155, 215, 88, 211, 224, 86, 1, 240, 136, 215, 88,
-    211, 224, 86, 1, 215, 109, 215, 88, 211, 224, 86, 1, 215, 252, 215, 88,
-    211, 224, 86, 1, 199, 152, 215, 88, 211, 224, 86, 1, 215, 188, 215, 88,
-    211, 224, 86, 1, 200, 210, 215, 88, 211, 224, 86, 1, 235, 239, 215, 88,
-    211, 224, 86, 1, 169, 215, 88, 211, 224, 86, 1, 211, 159, 215, 88, 211,
-    224, 86, 1, 164, 215, 88, 211, 224, 86, 1, 215, 254, 215, 88, 211, 224,
-    86, 1, 161, 215, 88, 211, 224, 86, 1, 196, 164, 215, 88, 211, 224, 86, 1,
-    216, 0, 215, 88, 211, 224, 86, 1, 239, 40, 215, 88, 211, 224, 86, 1, 215,
-    255, 215, 88, 211, 224, 86, 1, 232, 236, 215, 88, 211, 224, 86, 1, 219,
-    2, 215, 88, 211, 224, 86, 1, 212, 150, 215, 88, 211, 224, 86, 1, 234,
-    123, 215, 88, 211, 224, 86, 1, 209, 181, 215, 88, 211, 224, 86, 1, 63,
-    215, 88, 211, 224, 86, 1, 252, 168, 215, 88, 211, 224, 86, 1, 68, 215,
-    88, 211, 224, 86, 1, 66, 215, 88, 211, 224, 86, 1, 72, 215, 88, 211, 224,
-    86, 1, 214, 102, 215, 88, 211, 224, 86, 1, 69, 215, 88, 211, 224, 86, 1,
-    237, 54, 215, 88, 211, 224, 86, 1, 197, 199, 215, 88, 211, 224, 86, 202,
-    2, 215, 88, 211, 224, 86, 201, 254, 215, 88, 211, 224, 86, 201, 255, 215,
-    88, 211, 224, 86, 201, 252, 215, 88, 211, 224, 86, 201, 253, 215, 88,
-    211, 224, 86, 202, 0, 215, 88, 211, 224, 86, 202, 1, 215, 88, 211, 224,
-    86, 2, 36, 213, 28, 215, 88, 211, 224, 86, 2, 36, 202, 187, 215, 88, 211,
-    224, 86, 2, 36, 222, 3, 215, 88, 211, 224, 86, 2, 36, 251, 81, 215, 88,
-    211, 224, 86, 2, 36, 226, 18, 215, 88, 211, 224, 86, 2, 196, 172, 196,
-    171, 215, 88, 211, 224, 86, 5, 222, 150, 215, 88, 211, 224, 86, 17, 195,
-    79, 215, 88, 211, 224, 86, 17, 100, 215, 88, 211, 224, 86, 17, 102, 215,
-    88, 211, 224, 86, 17, 134, 215, 88, 211, 224, 86, 17, 136, 215, 88, 211,
-    224, 86, 17, 146, 215, 88, 211, 224, 86, 17, 167, 215, 88, 211, 224, 86,
-    17, 178, 215, 88, 211, 224, 86, 17, 171, 215, 88, 211, 224, 86, 17, 182,
-    215, 88, 211, 224, 86, 221, 248, 215, 104, 215, 88, 211, 224, 86, 46,
-    247, 174, 197, 145, 1, 252, 168, 197, 145, 1, 63, 197, 145, 1, 249, 145,
-    197, 145, 1, 247, 174, 197, 145, 1, 240, 136, 197, 145, 1, 234, 123, 197,
-    145, 1, 164, 197, 145, 1, 213, 6, 197, 145, 1, 172, 197, 145, 1, 176,
-    197, 145, 1, 161, 197, 145, 1, 189, 197, 145, 1, 202, 233, 197, 145, 1,
-    235, 239, 197, 145, 1, 183, 197, 145, 1, 207, 50, 197, 145, 1, 225, 214,
-    197, 145, 1, 195, 115, 197, 145, 1, 197, 166, 197, 145, 1, 199, 152, 197,
-    145, 1, 155, 197, 145, 1, 72, 197, 145, 1, 250, 150, 197, 145, 1, 169,
-    197, 145, 1, 166, 197, 145, 1, 224, 146, 197, 145, 1, 142, 197, 145, 1,
-    69, 197, 145, 1, 68, 197, 145, 1, 217, 71, 197, 145, 1, 66, 197, 145, 1,
-    222, 30, 197, 145, 1, 201, 113, 197, 145, 1, 201, 217, 197, 145, 1, 214,
-    109, 197, 145, 1, 252, 127, 197, 145, 1, 251, 97, 197, 145, 1, 226, 60,
-    197, 145, 1, 214, 119, 197, 145, 1, 236, 230, 197, 145, 1, 252, 128, 197,
-    145, 1, 215, 109, 197, 145, 1, 200, 95, 197, 145, 1, 196, 15, 197, 145,
-    152, 201, 13, 197, 145, 152, 201, 12, 197, 145, 152, 223, 255, 197, 145,
-    152, 223, 254, 197, 145, 17, 195, 79, 197, 145, 17, 100, 197, 145, 17,
-    102, 197, 145, 17, 134, 197, 145, 17, 136, 197, 145, 17, 146, 197, 145,
-    17, 167, 197, 145, 17, 178, 197, 145, 17, 171, 197, 145, 17, 182, 197,
-    145, 216, 235, 55, 81, 80, 5, 221, 135, 224, 101, 81, 80, 5, 221, 131,
-    155, 81, 80, 5, 221, 129, 223, 187, 81, 80, 5, 221, 5, 224, 200, 81, 80,
-    5, 220, 231, 224, 209, 81, 80, 5, 220, 250, 223, 242, 81, 80, 5, 221, 22,
-    224, 11, 81, 80, 5, 220, 147, 223, 174, 81, 80, 5, 221, 126, 197, 70, 81,
-    80, 5, 221, 124, 197, 166, 81, 80, 5, 221, 122, 196, 243, 81, 80, 5, 220,
-    200, 197, 98, 81, 80, 5, 220, 208, 197, 109, 81, 80, 5, 220, 212, 197,
-    15, 81, 80, 5, 221, 25, 197, 34, 81, 80, 5, 220, 132, 196, 239, 81, 80,
-    5, 220, 183, 197, 96, 81, 80, 5, 221, 9, 196, 227, 81, 80, 5, 221, 21,
-    196, 229, 81, 80, 5, 220, 187, 196, 228, 81, 80, 5, 221, 120, 219, 23,
-    81, 80, 5, 221, 118, 220, 62, 81, 80, 5, 221, 116, 218, 113, 81, 80, 5,
-    221, 11, 219, 164, 81, 80, 5, 220, 232, 218, 215, 81, 80, 5, 220, 172,
-    218, 138, 81, 80, 5, 220, 137, 218, 132, 81, 80, 5, 221, 114, 248, 184,
-    81, 80, 5, 221, 111, 249, 145, 81, 80, 5, 221, 109, 248, 21, 81, 80, 5,
-    220, 176, 248, 251, 81, 80, 5, 220, 229, 249, 9, 81, 80, 5, 220, 223,
-    248, 103, 81, 80, 5, 220, 188, 248, 116, 81, 80, 5, 221, 99, 68, 81, 80,
-    5, 221, 97, 63, 81, 80, 5, 221, 95, 66, 81, 80, 5, 220, 163, 237, 54, 81,
-    80, 5, 220, 226, 69, 81, 80, 5, 220, 161, 214, 102, 81, 80, 5, 220, 179,
-    72, 81, 80, 5, 220, 189, 237, 33, 81, 80, 5, 220, 195, 226, 86, 81, 80,
-    5, 220, 191, 226, 86, 81, 80, 5, 220, 131, 251, 106, 81, 80, 5, 220, 148,
-    236, 230, 81, 80, 5, 221, 84, 206, 112, 81, 80, 5, 221, 82, 183, 81, 80,
-    5, 221, 80, 204, 172, 81, 80, 5, 220, 164, 208, 129, 81, 80, 5, 220, 210,
-    208, 147, 81, 80, 5, 220, 190, 205, 171, 81, 80, 5, 220, 247, 205, 200,
-    81, 80, 5, 220, 130, 206, 105, 81, 80, 5, 221, 70, 222, 109, 81, 80, 5,
-    221, 68, 172, 81, 80, 5, 221, 66, 221, 191, 81, 80, 5, 220, 242, 222,
-    188, 81, 80, 5, 220, 253, 222, 197, 81, 80, 5, 221, 16, 221, 229, 81, 80,
-    5, 220, 173, 222, 7, 81, 80, 5, 220, 216, 181, 222, 197, 81, 80, 5, 221,
-    92, 239, 152, 81, 80, 5, 221, 89, 240, 136, 81, 80, 5, 221, 86, 237, 201,
-    81, 80, 5, 220, 237, 239, 237, 81, 80, 5, 220, 146, 239, 3, 81, 80, 5,
-    220, 145, 239, 28, 81, 80, 5, 221, 78, 202, 122, 81, 80, 5, 221, 75, 189,
-    81, 80, 5, 221, 73, 201, 40, 81, 80, 5, 220, 235, 203, 48, 81, 80, 5,
-    221, 15, 203, 68, 81, 80, 5, 220, 222, 201, 247, 81, 80, 5, 221, 1, 149,
-    81, 80, 5, 221, 64, 225, 172, 81, 80, 5, 221, 61, 225, 214, 81, 80, 5,
-    221, 59, 225, 110, 81, 80, 5, 220, 169, 225, 191, 81, 80, 5, 220, 213,
-    225, 193, 81, 80, 5, 220, 166, 225, 119, 81, 80, 5, 221, 7, 225, 129, 81,
-    80, 5, 220, 151, 181, 225, 129, 81, 80, 5, 221, 57, 196, 24, 81, 80, 5,
-    221, 54, 164, 81, 80, 5, 221, 52, 195, 217, 81, 80, 5, 220, 217, 196, 66,
-    81, 80, 5, 220, 246, 196, 69, 81, 80, 5, 220, 185, 195, 237, 81, 80, 5,
-    220, 205, 196, 3, 81, 80, 5, 221, 48, 235, 153, 81, 80, 5, 221, 46, 235,
-    239, 81, 80, 5, 221, 44, 234, 223, 81, 80, 5, 220, 248, 235, 182, 81, 80,
-    5, 220, 251, 235, 189, 81, 80, 5, 220, 193, 235, 40, 81, 80, 5, 220, 238,
-    235, 51, 81, 80, 5, 220, 129, 234, 222, 81, 80, 5, 220, 225, 235, 210,
-    81, 80, 5, 221, 42, 216, 183, 81, 80, 5, 221, 40, 217, 221, 81, 80, 5,
-    221, 38, 215, 138, 81, 80, 5, 220, 209, 217, 101, 81, 80, 5, 220, 157,
-    216, 38, 81, 80, 5, 220, 150, 232, 71, 81, 80, 5, 221, 33, 142, 81, 80,
-    5, 220, 140, 231, 75, 81, 80, 5, 221, 36, 232, 118, 81, 80, 5, 220, 230,
-    232, 147, 81, 80, 5, 221, 31, 231, 166, 81, 80, 5, 220, 186, 231, 193,
-    81, 80, 5, 220, 243, 232, 117, 81, 80, 5, 220, 198, 231, 159, 81, 80, 5,
-    221, 17, 232, 41, 81, 80, 5, 220, 196, 232, 212, 81, 80, 5, 220, 239,
-    231, 59, 81, 80, 5, 221, 18, 232, 101, 81, 80, 5, 220, 133, 231, 169, 81,
-    80, 5, 221, 24, 231, 71, 81, 80, 5, 220, 236, 217, 36, 81, 80, 5, 221,
-    29, 217, 50, 81, 80, 5, 220, 244, 217, 33, 81, 80, 5, 220, 211, 217, 44,
-    81, 80, 5, 220, 180, 217, 45, 81, 80, 5, 220, 170, 217, 34, 81, 80, 5,
-    220, 206, 217, 35, 81, 80, 5, 220, 167, 217, 49, 81, 80, 5, 220, 199,
-    217, 32, 81, 80, 5, 220, 240, 181, 217, 45, 81, 80, 5, 220, 220, 181,
-    217, 34, 81, 80, 5, 220, 143, 181, 217, 35, 81, 80, 5, 220, 171, 233,
-    192, 81, 80, 5, 220, 215, 234, 123, 81, 80, 5, 220, 158, 233, 76, 81, 80,
-    5, 220, 136, 234, 40, 81, 80, 5, 220, 160, 233, 62, 81, 80, 5, 220, 159,
-    233, 72, 81, 80, 5, 220, 142, 217, 55, 81, 80, 5, 221, 13, 216, 248, 81,
-    80, 5, 220, 149, 216, 237, 81, 80, 5, 221, 2, 212, 220, 81, 80, 5, 220,
-    227, 161, 81, 80, 5, 221, 20, 211, 227, 81, 80, 5, 220, 245, 213, 79, 81,
-    80, 5, 221, 19, 213, 92, 81, 80, 5, 220, 224, 212, 91, 81, 80, 5, 221, 4,
-    212, 117, 81, 80, 5, 220, 181, 219, 226, 81, 80, 5, 221, 8, 219, 241, 81,
-    80, 5, 220, 204, 219, 220, 81, 80, 5, 221, 23, 219, 233, 81, 80, 5, 220,
-    138, 219, 233, 81, 80, 5, 220, 254, 219, 234, 81, 80, 5, 220, 154, 219,
-    221, 81, 80, 5, 220, 152, 219, 222, 81, 80, 5, 220, 139, 219, 214, 81,
-    80, 5, 220, 165, 181, 219, 234, 81, 80, 5, 220, 221, 181, 219, 221, 81,
-    80, 5, 220, 184, 181, 219, 222, 81, 80, 5, 220, 194, 223, 215, 81, 80, 5,
-    220, 234, 223, 223, 81, 80, 5, 220, 252, 223, 211, 81, 80, 5, 221, 27,
-    223, 218, 81, 80, 5, 220, 218, 223, 219, 81, 80, 5, 220, 214, 223, 213,
-    81, 80, 5, 220, 168, 223, 214, 81, 80, 5, 220, 202, 234, 57, 81, 80, 5,
-    221, 14, 234, 65, 81, 80, 5, 220, 178, 234, 52, 81, 80, 5, 220, 233, 234,
-    61, 81, 80, 5, 220, 219, 234, 62, 81, 80, 5, 220, 255, 234, 53, 81, 80,
-    5, 221, 0, 234, 55, 81, 80, 5, 220, 155, 169, 81, 80, 5, 220, 203, 217,
-    144, 81, 80, 5, 220, 197, 217, 159, 81, 80, 5, 220, 201, 217, 126, 81,
-    80, 5, 220, 135, 217, 150, 81, 80, 5, 220, 207, 217, 151, 81, 80, 5, 221,
-    3, 217, 131, 81, 80, 5, 221, 6, 217, 135, 81, 80, 5, 220, 174, 216, 164,
-    81, 80, 5, 220, 134, 216, 134, 81, 80, 5, 220, 177, 216, 155, 81, 80, 5,
-    220, 192, 216, 138, 81, 80, 5, 220, 144, 199, 34, 81, 80, 5, 220, 141,
-    199, 152, 81, 80, 5, 220, 175, 197, 220, 81, 80, 5, 220, 153, 199, 113,
-    81, 80, 5, 220, 241, 199, 118, 81, 80, 5, 220, 182, 198, 233, 81, 80, 5,
-    220, 249, 198, 248, 81, 80, 5, 220, 162, 215, 82, 81, 80, 5, 221, 12,
-    215, 102, 81, 80, 5, 220, 156, 215, 64, 81, 80, 5, 220, 228, 215, 94, 81,
-    80, 5, 221, 10, 215, 71, 81, 80, 17, 100, 81, 80, 17, 102, 81, 80, 17,
-    134, 81, 80, 17, 136, 81, 80, 17, 146, 81, 80, 17, 167, 81, 80, 17, 178,
-    81, 80, 17, 171, 81, 80, 17, 182, 81, 80, 38, 31, 203, 46, 81, 80, 38,
-    31, 203, 18, 81, 80, 38, 31, 231, 55, 81, 80, 38, 31, 202, 157, 81, 80,
-    38, 31, 203, 24, 202, 157, 81, 80, 38, 31, 231, 58, 202, 157, 81, 80, 38,
-    31, 219, 26, 251, 253, 6, 1, 251, 152, 251, 253, 6, 1, 240, 133, 251,
-    253, 6, 1, 223, 80, 251, 253, 6, 1, 219, 39, 251, 253, 6, 1, 249, 145,
-    251, 253, 6, 1, 206, 56, 251, 253, 6, 1, 213, 92, 251, 253, 6, 1, 248,
-    192, 251, 253, 6, 1, 169, 251, 253, 6, 1, 69, 251, 253, 6, 1, 235, 239,
-    251, 253, 6, 1, 68, 251, 253, 6, 1, 72, 251, 253, 6, 1, 239, 176, 251,
-    253, 6, 1, 196, 25, 251, 253, 6, 1, 197, 117, 251, 253, 6, 1, 215, 138,
-    251, 253, 6, 1, 225, 35, 251, 253, 6, 1, 164, 251, 253, 6, 1, 66, 251,
-    253, 6, 1, 225, 163, 251, 253, 6, 1, 245, 75, 251, 253, 6, 1, 142, 251,
-    253, 6, 1, 211, 157, 251, 253, 6, 1, 234, 123, 251, 253, 6, 1, 215, 109,
-    251, 253, 6, 1, 201, 40, 251, 253, 6, 1, 216, 227, 251, 253, 6, 1, 199,
-    152, 251, 253, 6, 1, 224, 146, 251, 253, 6, 1, 234, 62, 251, 253, 6, 1,
-    195, 104, 251, 253, 6, 1, 223, 214, 251, 253, 6, 1, 207, 50, 251, 253, 4,
-    1, 251, 152, 251, 253, 4, 1, 240, 133, 251, 253, 4, 1, 223, 80, 251, 253,
-    4, 1, 219, 39, 251, 253, 4, 1, 249, 145, 251, 253, 4, 1, 206, 56, 251,
-    253, 4, 1, 213, 92, 251, 253, 4, 1, 248, 192, 251, 253, 4, 1, 169, 251,
-    253, 4, 1, 69, 251, 253, 4, 1, 235, 239, 251, 253, 4, 1, 68, 251, 253, 4,
-    1, 72, 251, 253, 4, 1, 239, 176, 251, 253, 4, 1, 196, 25, 251, 253, 4, 1,
-    197, 117, 251, 253, 4, 1, 215, 138, 251, 253, 4, 1, 225, 35, 251, 253, 4,
-    1, 164, 251, 253, 4, 1, 66, 251, 253, 4, 1, 225, 163, 251, 253, 4, 1,
-    245, 75, 251, 253, 4, 1, 142, 251, 253, 4, 1, 211, 157, 251, 253, 4, 1,
-    234, 123, 251, 253, 4, 1, 215, 109, 251, 253, 4, 1, 201, 40, 251, 253, 4,
-    1, 216, 227, 251, 253, 4, 1, 199, 152, 251, 253, 4, 1, 224, 146, 251,
-    253, 4, 1, 234, 62, 251, 253, 4, 1, 195, 104, 251, 253, 4, 1, 223, 214,
-    251, 253, 4, 1, 207, 50, 251, 253, 251, 153, 222, 150, 251, 253, 18, 222,
-    150, 251, 253, 234, 36, 78, 251, 253, 232, 213, 251, 253, 108, 218, 235,
-    251, 253, 234, 37, 108, 218, 235, 251, 253, 215, 149, 251, 253, 217, 208,
-    78, 251, 253, 17, 195, 79, 251, 253, 17, 100, 251, 253, 17, 102, 251,
-    253, 17, 134, 251, 253, 17, 136, 251, 253, 17, 146, 251, 253, 17, 167,
-    251, 253, 17, 178, 251, 253, 17, 171, 251, 253, 17, 182, 251, 253, 84,
-    236, 90, 78, 251, 253, 84, 211, 79, 78, 226, 70, 128, 31, 100, 226, 70,
-    128, 31, 102, 226, 70, 128, 31, 134, 226, 70, 128, 31, 136, 226, 70, 128,
-    31, 146, 226, 70, 128, 31, 167, 226, 70, 128, 31, 178, 226, 70, 128, 31,
-    171, 226, 70, 128, 31, 182, 226, 70, 128, 31, 203, 23, 226, 70, 128, 31,
-    200, 234, 226, 70, 128, 31, 202, 177, 226, 70, 128, 31, 235, 14, 226, 70,
-    128, 31, 235, 145, 226, 70, 128, 31, 206, 13, 226, 70, 128, 31, 207, 65,
-    226, 70, 128, 31, 237, 20, 226, 70, 128, 31, 216, 174, 226, 70, 128, 31,
-    97, 231, 57, 226, 70, 128, 31, 99, 231, 57, 226, 70, 128, 31, 115, 231,
-    57, 226, 70, 128, 31, 235, 7, 231, 57, 226, 70, 128, 31, 235, 101, 231,
-    57, 226, 70, 128, 31, 206, 29, 231, 57, 226, 70, 128, 31, 207, 71, 231,
-    57, 226, 70, 128, 31, 237, 31, 231, 57, 226, 70, 128, 31, 216, 179, 231,
-    57, 226, 70, 128, 31, 97, 170, 226, 70, 128, 31, 99, 170, 226, 70, 128,
-    31, 115, 170, 226, 70, 128, 31, 235, 7, 170, 226, 70, 128, 31, 235, 101,
-    170, 226, 70, 128, 31, 206, 29, 170, 226, 70, 128, 31, 207, 71, 170, 226,
-    70, 128, 31, 237, 31, 170, 226, 70, 128, 31, 216, 179, 170, 226, 70, 128,
-    31, 203, 24, 170, 226, 70, 128, 31, 200, 235, 170, 226, 70, 128, 31, 202,
-    178, 170, 226, 70, 128, 31, 235, 15, 170, 226, 70, 128, 31, 235, 146,
-    170, 226, 70, 128, 31, 206, 14, 170, 226, 70, 128, 31, 207, 66, 170, 226,
-    70, 128, 31, 237, 21, 170, 226, 70, 128, 31, 216, 175, 170, 226, 70, 128,
-    31, 222, 255, 226, 70, 128, 31, 222, 254, 226, 70, 128, 223, 0, 78, 226,
-    70, 128, 31, 224, 246, 226, 70, 128, 31, 224, 245, 226, 70, 128, 31, 212,
-    31, 100, 226, 70, 128, 31, 212, 31, 102, 226, 70, 128, 31, 212, 31, 134,
-    226, 70, 128, 31, 212, 31, 136, 226, 70, 128, 31, 212, 31, 146, 226, 70,
-    128, 31, 212, 31, 167, 226, 70, 128, 31, 212, 31, 178, 226, 70, 128, 31,
-    212, 31, 171, 226, 70, 128, 31, 212, 31, 182, 226, 70, 128, 212, 147,
-    226, 70, 128, 191, 97, 211, 87, 226, 70, 128, 191, 97, 232, 225, 226, 70,
-    128, 191, 115, 211, 85, 226, 70, 128, 209, 108, 78, 226, 70, 128, 31,
-    251, 131, 100, 226, 70, 128, 31, 251, 131, 102, 226, 70, 128, 31, 251,
-    131, 203, 24, 170, 226, 70, 128, 251, 131, 223, 0, 78, 214, 41, 128, 31,
-    100, 214, 41, 128, 31, 102, 214, 41, 128, 31, 134, 214, 41, 128, 31, 136,
-    214, 41, 128, 31, 146, 214, 41, 128, 31, 167, 214, 41, 128, 31, 178, 214,
-    41, 128, 31, 171, 214, 41, 128, 31, 182, 214, 41, 128, 31, 203, 23, 214,
-    41, 128, 31, 200, 234, 214, 41, 128, 31, 202, 177, 214, 41, 128, 31, 235,
-    14, 214, 41, 128, 31, 235, 145, 214, 41, 128, 31, 206, 13, 214, 41, 128,
-    31, 207, 65, 214, 41, 128, 31, 237, 20, 214, 41, 128, 31, 216, 174, 214,
-    41, 128, 31, 97, 231, 57, 214, 41, 128, 31, 99, 231, 57, 214, 41, 128,
-    31, 115, 231, 57, 214, 41, 128, 31, 235, 7, 231, 57, 214, 41, 128, 31,
-    235, 101, 231, 57, 214, 41, 128, 31, 206, 29, 231, 57, 214, 41, 128, 31,
-    207, 71, 231, 57, 214, 41, 128, 31, 237, 31, 231, 57, 214, 41, 128, 31,
-    216, 179, 231, 57, 214, 41, 128, 31, 97, 170, 214, 41, 128, 31, 99, 170,
-    214, 41, 128, 31, 115, 170, 214, 41, 128, 31, 235, 7, 170, 214, 41, 128,
-    31, 235, 101, 170, 214, 41, 128, 31, 206, 29, 170, 214, 41, 128, 31, 207,
-    71, 170, 214, 41, 128, 31, 237, 31, 170, 214, 41, 128, 31, 216, 179, 170,
-    214, 41, 128, 31, 203, 24, 170, 214, 41, 128, 31, 200, 235, 170, 214, 41,
-    128, 31, 202, 178, 170, 214, 41, 128, 31, 235, 15, 170, 214, 41, 128, 31,
-    235, 146, 170, 214, 41, 128, 31, 206, 14, 170, 214, 41, 128, 31, 207, 66,
-    170, 214, 41, 128, 31, 237, 21, 170, 214, 41, 128, 31, 216, 175, 170,
-    214, 41, 128, 220, 22, 214, 41, 128, 251, 131, 31, 102, 214, 41, 128,
-    251, 131, 31, 134, 214, 41, 128, 251, 131, 31, 136, 214, 41, 128, 251,
-    131, 31, 146, 214, 41, 128, 251, 131, 31, 167, 214, 41, 128, 251, 131,
-    31, 178, 214, 41, 128, 251, 131, 31, 171, 214, 41, 128, 251, 131, 31,
-    182, 214, 41, 128, 251, 131, 31, 203, 23, 214, 41, 128, 251, 131, 31,
-    235, 7, 231, 57, 214, 41, 128, 251, 131, 31, 206, 29, 231, 57, 214, 41,
-    128, 251, 131, 31, 99, 170, 214, 41, 128, 251, 131, 31, 203, 24, 170,
-    214, 41, 128, 191, 97, 232, 225, 214, 41, 128, 191, 97, 206, 17, 9, 13,
-    251, 164, 9, 13, 248, 239, 9, 13, 225, 189, 9, 13, 240, 107, 9, 13, 197,
-    117, 9, 13, 195, 106, 9, 13, 232, 236, 9, 13, 203, 139, 9, 13, 196, 64,
-    9, 13, 225, 35, 9, 13, 222, 249, 9, 13, 219, 185, 9, 13, 216, 31, 9, 13,
-    208, 125, 9, 13, 251, 194, 9, 13, 235, 176, 9, 13, 209, 8, 9, 13, 211,
-    152, 9, 13, 210, 142, 9, 13, 206, 251, 9, 13, 203, 41, 9, 13, 202, 213,
-    9, 13, 224, 142, 9, 13, 202, 225, 9, 13, 240, 130, 9, 13, 195, 109, 9,
-    13, 233, 225, 9, 13, 238, 252, 248, 239, 9, 13, 238, 252, 216, 31, 9, 13,
-    238, 252, 235, 176, 9, 13, 238, 252, 211, 152, 9, 13, 84, 248, 239, 9,
-    13, 84, 225, 189, 9, 13, 84, 232, 113, 9, 13, 84, 232, 236, 9, 13, 84,
-    196, 64, 9, 13, 84, 225, 35, 9, 13, 84, 222, 249, 9, 13, 84, 219, 185, 9,
-    13, 84, 216, 31, 9, 13, 84, 208, 125, 9, 13, 84, 251, 194, 9, 13, 84,
-    235, 176, 9, 13, 84, 209, 8, 9, 13, 84, 211, 152, 9, 13, 84, 206, 251, 9,
-    13, 84, 203, 41, 9, 13, 84, 202, 213, 9, 13, 84, 224, 142, 9, 13, 84,
-    240, 130, 9, 13, 84, 233, 225, 9, 13, 203, 134, 225, 189, 9, 13, 203,
-    134, 232, 236, 9, 13, 203, 134, 196, 64, 9, 13, 203, 134, 222, 249, 9,
-    13, 203, 134, 216, 31, 9, 13, 203, 134, 208, 125, 9, 13, 203, 134, 251,
-    194, 9, 13, 203, 134, 209, 8, 9, 13, 203, 134, 211, 152, 9, 13, 203, 134,
-    206, 251, 9, 13, 203, 134, 224, 142, 9, 13, 203, 134, 240, 130, 9, 13,
-    203, 134, 233, 225, 9, 13, 203, 134, 238, 252, 216, 31, 9, 13, 203, 134,
-    238, 252, 211, 152, 9, 13, 204, 204, 248, 239, 9, 13, 204, 204, 225, 189,
-    9, 13, 204, 204, 232, 113, 9, 13, 204, 204, 232, 236, 9, 13, 204, 204,
-    203, 139, 9, 13, 204, 204, 196, 64, 9, 13, 204, 204, 225, 35, 9, 13, 204,
-    204, 219, 185, 9, 13, 204, 204, 216, 31, 9, 13, 204, 204, 208, 125, 9,
-    13, 204, 204, 251, 194, 9, 13, 204, 204, 235, 176, 9, 13, 204, 204, 209,
-    8, 9, 13, 204, 204, 211, 152, 9, 13, 204, 204, 206, 251, 9, 13, 204, 204,
-    203, 41, 9, 13, 204, 204, 202, 213, 9, 13, 204, 204, 224, 142, 9, 13,
-    204, 204, 240, 130, 9, 13, 204, 204, 195, 109, 9, 13, 204, 204, 233, 225,
-    9, 13, 204, 204, 238, 252, 248, 239, 9, 13, 204, 204, 238, 252, 235, 176,
-    9, 13, 221, 224, 251, 164, 9, 13, 221, 224, 248, 239, 9, 13, 221, 224,
-    225, 189, 9, 13, 221, 224, 240, 107, 9, 13, 221, 224, 232, 113, 9, 13,
-    221, 224, 197, 117, 9, 13, 221, 224, 195, 106, 9, 13, 221, 224, 232, 236,
-    9, 13, 221, 224, 203, 139, 9, 13, 221, 224, 196, 64, 9, 13, 221, 224,
-    222, 249, 9, 13, 221, 224, 219, 185, 9, 13, 221, 224, 216, 31, 9, 13,
-    221, 224, 208, 125, 9, 13, 221, 224, 251, 194, 9, 13, 221, 224, 235, 176,
-    9, 13, 221, 224, 209, 8, 9, 13, 221, 224, 211, 152, 9, 13, 221, 224, 210,
-    142, 9, 13, 221, 224, 206, 251, 9, 13, 221, 224, 203, 41, 9, 13, 221,
-    224, 202, 213, 9, 13, 221, 224, 224, 142, 9, 13, 221, 224, 202, 225, 9,
-    13, 221, 224, 240, 130, 9, 13, 221, 224, 195, 109, 9, 13, 221, 224, 233,
-    225, 9, 13, 237, 241, 248, 239, 9, 13, 237, 241, 225, 189, 9, 13, 237,
-    241, 240, 107, 9, 13, 237, 241, 197, 117, 9, 13, 237, 241, 195, 106, 9,
-    13, 237, 241, 232, 236, 9, 13, 237, 241, 203, 139, 9, 13, 237, 241, 196,
-    64, 9, 13, 237, 241, 222, 249, 9, 13, 237, 241, 219, 185, 9, 13, 237,
-    241, 216, 31, 9, 13, 237, 241, 208, 125, 9, 13, 237, 241, 251, 194, 9,
-    13, 237, 241, 235, 176, 9, 13, 237, 241, 209, 8, 9, 13, 237, 241, 211,
-    152, 9, 13, 237, 241, 210, 142, 9, 13, 237, 241, 206, 251, 9, 13, 237,
-    241, 203, 41, 9, 13, 237, 241, 202, 213, 9, 13, 237, 241, 224, 142, 9,
-    13, 237, 241, 202, 225, 9, 13, 237, 241, 240, 130, 9, 13, 237, 241, 195,
-    109, 9, 13, 237, 241, 233, 225, 9, 13, 214, 83, 87, 3, 168, 3, 203, 91,
-    9, 13, 214, 83, 168, 3, 240, 107, 220, 83, 113, 237, 69, 197, 50, 220,
-    83, 113, 205, 159, 197, 50, 220, 83, 113, 197, 89, 197, 50, 220, 83, 113,
-    173, 197, 50, 220, 83, 113, 210, 158, 237, 223, 220, 83, 113, 233, 91,
-    237, 223, 220, 83, 113, 59, 237, 223, 220, 83, 113, 97, 77, 245, 114,
-    220, 83, 113, 99, 77, 245, 114, 220, 83, 113, 115, 77, 245, 114, 220, 83,
-    113, 235, 7, 77, 245, 114, 220, 83, 113, 235, 101, 77, 245, 114, 220, 83,
-    113, 206, 29, 77, 245, 114, 220, 83, 113, 207, 71, 77, 245, 114, 220, 83,
-    113, 237, 31, 77, 245, 114, 220, 83, 113, 216, 179, 77, 245, 114, 220,
-    83, 113, 97, 77, 249, 94, 220, 83, 113, 99, 77, 249, 94, 220, 83, 113,
-    115, 77, 249, 94, 220, 83, 113, 235, 7, 77, 249, 94, 220, 83, 113, 235,
-    101, 77, 249, 94, 220, 83, 113, 206, 29, 77, 249, 94, 220, 83, 113, 207,
-    71, 77, 249, 94, 220, 83, 113, 237, 31, 77, 249, 94, 220, 83, 113, 216,
-    179, 77, 249, 94, 220, 83, 113, 97, 77, 244, 246, 220, 83, 113, 99, 77,
-    244, 246, 220, 83, 113, 115, 77, 244, 246, 220, 83, 113, 235, 7, 77, 244,
-    246, 220, 83, 113, 235, 101, 77, 244, 246, 220, 83, 113, 206, 29, 77,
-    244, 246, 220, 83, 113, 207, 71, 77, 244, 246, 220, 83, 113, 237, 31, 77,
-    244, 246, 220, 83, 113, 216, 179, 77, 244, 246, 220, 83, 113, 212, 128,
-    220, 83, 113, 214, 69, 220, 83, 113, 249, 95, 220, 83, 113, 245, 31, 220,
-    83, 113, 205, 100, 220, 83, 113, 204, 113, 220, 83, 113, 250, 136, 220,
-    83, 113, 197, 41, 220, 83, 113, 225, 122, 220, 83, 113, 249, 138, 185,
-    113, 231, 155, 249, 138, 185, 113, 231, 153, 185, 113, 231, 152, 185,
-    113, 231, 151, 185, 113, 231, 150, 185, 113, 231, 149, 185, 113, 231,
-    148, 185, 113, 231, 147, 185, 113, 231, 146, 185, 113, 231, 145, 185,
-    113, 231, 144, 185, 113, 231, 143, 185, 113, 231, 142, 185, 113, 231,
-    141, 185, 113, 231, 140, 185, 113, 231, 139, 185, 113, 231, 138, 185,
-    113, 231, 137, 185, 113, 231, 136, 185, 113, 231, 135, 185, 113, 231,
-    134, 185, 113, 231, 133, 185, 113, 231, 132, 185, 113, 231, 131, 185,
-    113, 231, 130, 185, 113, 231, 129, 185, 113, 231, 128, 185, 113, 231,
-    127, 185, 113, 231, 126, 185, 113, 231, 125, 185, 113, 231, 124, 185,
-    113, 231, 123, 185, 113, 231, 122, 185, 113, 231, 121, 185, 113, 231,
-    120, 185, 113, 231, 119, 185, 113, 231, 118, 185, 113, 231, 117, 185,
-    113, 231, 116, 185, 113, 231, 115, 185, 113, 231, 114, 185, 113, 231,
-    113, 185, 113, 231, 112, 185, 113, 231, 111, 185, 113, 231, 110, 185,
-    113, 231, 109, 185, 113, 231, 108, 185, 113, 231, 107, 185, 113, 231,
-    106, 185, 113, 231, 105, 185, 113, 83, 249, 138, 185, 113, 199, 99, 185,
-    113, 199, 98, 185, 113, 199, 97, 185, 113, 199, 96, 185, 113, 199, 95,
-    185, 113, 199, 94, 185, 113, 199, 93, 185, 113, 199, 92, 185, 113, 199,
-    91, 185, 113, 199, 90, 185, 113, 199, 89, 185, 113, 199, 88, 185, 113,
-    199, 87, 185, 113, 199, 86, 185, 113, 199, 85, 185, 113, 199, 84, 185,
-    113, 199, 83, 185, 113, 199, 82, 185, 113, 199, 81, 185, 113, 199, 80,
-    185, 113, 199, 79, 185, 113, 199, 78, 185, 113, 199, 77, 185, 113, 199,
-    76, 185, 113, 199, 75, 185, 113, 199, 74, 185, 113, 199, 73, 185, 113,
-    199, 72, 185, 113, 199, 71, 185, 113, 199, 70, 185, 113, 199, 69, 185,
-    113, 199, 68, 185, 113, 199, 67, 185, 113, 199, 66, 185, 113, 199, 65,
-    185, 113, 199, 64, 185, 113, 199, 63, 185, 113, 199, 62, 185, 113, 199,
-    61, 185, 113, 199, 60, 185, 113, 199, 59, 185, 113, 199, 58, 185, 113,
-    199, 57, 185, 113, 199, 56, 185, 113, 199, 55, 185, 113, 199, 54, 185,
-    113, 199, 53, 185, 113, 199, 52, 185, 113, 199, 51, 212, 138, 247, 115,
-    249, 138, 212, 138, 247, 115, 252, 16, 77, 205, 145, 212, 138, 247, 115,
-    99, 77, 205, 145, 212, 138, 247, 115, 115, 77, 205, 145, 212, 138, 247,
-    115, 235, 7, 77, 205, 145, 212, 138, 247, 115, 235, 101, 77, 205, 145,
-    212, 138, 247, 115, 206, 29, 77, 205, 145, 212, 138, 247, 115, 207, 71,
-    77, 205, 145, 212, 138, 247, 115, 237, 31, 77, 205, 145, 212, 138, 247,
-    115, 216, 179, 77, 205, 145, 212, 138, 247, 115, 203, 24, 77, 205, 145,
-    212, 138, 247, 115, 225, 212, 77, 205, 145, 212, 138, 247, 115, 224, 20,
-    77, 205, 145, 212, 138, 247, 115, 211, 81, 77, 205, 145, 212, 138, 247,
-    115, 224, 74, 77, 205, 145, 212, 138, 247, 115, 252, 16, 77, 232, 124,
-    212, 138, 247, 115, 99, 77, 232, 124, 212, 138, 247, 115, 115, 77, 232,
-    124, 212, 138, 247, 115, 235, 7, 77, 232, 124, 212, 138, 247, 115, 235,
-    101, 77, 232, 124, 212, 138, 247, 115, 206, 29, 77, 232, 124, 212, 138,
-    247, 115, 207, 71, 77, 232, 124, 212, 138, 247, 115, 237, 31, 77, 232,
-    124, 212, 138, 247, 115, 216, 179, 77, 232, 124, 212, 138, 247, 115, 203,
-    24, 77, 232, 124, 212, 138, 247, 115, 225, 212, 77, 232, 124, 212, 138,
-    247, 115, 224, 20, 77, 232, 124, 212, 138, 247, 115, 211, 81, 77, 232,
-    124, 212, 138, 247, 115, 224, 74, 77, 232, 124, 212, 138, 247, 115, 210,
-    158, 225, 122, 212, 138, 247, 115, 252, 16, 77, 239, 139, 212, 138, 247,
-    115, 99, 77, 239, 139, 212, 138, 247, 115, 115, 77, 239, 139, 212, 138,
-    247, 115, 235, 7, 77, 239, 139, 212, 138, 247, 115, 235, 101, 77, 239,
-    139, 212, 138, 247, 115, 206, 29, 77, 239, 139, 212, 138, 247, 115, 207,
-    71, 77, 239, 139, 212, 138, 247, 115, 237, 31, 77, 239, 139, 212, 138,
-    247, 115, 216, 179, 77, 239, 139, 212, 138, 247, 115, 203, 24, 77, 239,
-    139, 212, 138, 247, 115, 225, 212, 77, 239, 139, 212, 138, 247, 115, 224,
-    20, 77, 239, 139, 212, 138, 247, 115, 211, 81, 77, 239, 139, 212, 138,
-    247, 115, 224, 74, 77, 239, 139, 212, 138, 247, 115, 58, 225, 122, 212,
-    138, 247, 115, 252, 16, 77, 244, 188, 212, 138, 247, 115, 99, 77, 244,
-    188, 212, 138, 247, 115, 115, 77, 244, 188, 212, 138, 247, 115, 235, 7,
-    77, 244, 188, 212, 138, 247, 115, 235, 101, 77, 244, 188, 212, 138, 247,
-    115, 206, 29, 77, 244, 188, 212, 138, 247, 115, 207, 71, 77, 244, 188,
-    212, 138, 247, 115, 237, 31, 77, 244, 188, 212, 138, 247, 115, 216, 179,
-    77, 244, 188, 212, 138, 247, 115, 203, 24, 77, 244, 188, 212, 138, 247,
-    115, 225, 212, 77, 244, 188, 212, 138, 247, 115, 224, 20, 77, 244, 188,
-    212, 138, 247, 115, 211, 81, 77, 244, 188, 212, 138, 247, 115, 224, 74,
-    77, 244, 188, 212, 138, 247, 115, 59, 225, 122, 212, 138, 247, 115, 235,
-    38, 212, 138, 247, 115, 201, 141, 212, 138, 247, 115, 201, 130, 212, 138,
-    247, 115, 201, 127, 212, 138, 247, 115, 201, 126, 212, 138, 247, 115,
-    201, 125, 212, 138, 247, 115, 201, 124, 212, 138, 247, 115, 201, 123,
-    212, 138, 247, 115, 201, 122, 212, 138, 247, 115, 201, 121, 212, 138,
-    247, 115, 201, 140, 212, 138, 247, 115, 201, 139, 212, 138, 247, 115,
-    201, 138, 212, 138, 247, 115, 201, 137, 212, 138, 247, 115, 201, 136,
-    212, 138, 247, 115, 201, 135, 212, 138, 247, 115, 201, 134, 212, 138,
-    247, 115, 201, 133, 212, 138, 247, 115, 201, 132, 212, 138, 247, 115,
-    201, 131, 212, 138, 247, 115, 201, 129, 212, 138, 247, 115, 201, 128, 17,
-    195, 80, 234, 217, 204, 226, 17, 195, 80, 244, 159, 17, 97, 244, 159, 17,
-    99, 244, 159, 17, 115, 244, 159, 17, 235, 7, 244, 159, 17, 235, 101, 244,
-    159, 17, 206, 29, 244, 159, 17, 207, 71, 244, 159, 17, 237, 31, 244, 159,
-    17, 216, 179, 244, 159, 239, 93, 46, 45, 17, 195, 79, 239, 93, 217, 104,
-    46, 45, 17, 195, 79, 119, 8, 6, 1, 63, 119, 8, 6, 1, 250, 112, 119, 8, 6,
-    1, 247, 207, 119, 8, 6, 1, 240, 231, 119, 8, 6, 1, 69, 119, 8, 6, 1, 236,
-    49, 119, 8, 6, 1, 234, 190, 119, 8, 6, 1, 233, 15, 119, 8, 6, 1, 68, 119,
-    8, 6, 1, 225, 217, 119, 8, 6, 1, 225, 80, 119, 8, 6, 1, 159, 119, 8, 6,
-    1, 221, 136, 119, 8, 6, 1, 218, 55, 119, 8, 6, 1, 72, 119, 8, 6, 1, 214,
-    3, 119, 8, 6, 1, 211, 167, 119, 8, 6, 1, 144, 119, 8, 6, 1, 209, 80, 119,
-    8, 6, 1, 203, 216, 119, 8, 6, 1, 66, 119, 8, 6, 1, 199, 230, 119, 8, 6,
-    1, 197, 199, 119, 8, 6, 1, 196, 222, 119, 8, 6, 1, 196, 148, 119, 8, 6,
-    1, 195, 158, 201, 231, 206, 245, 248, 61, 8, 6, 1, 209, 80, 46, 41, 8, 6,
-    1, 247, 207, 46, 41, 8, 6, 1, 144, 46, 247, 58, 46, 196, 224, 241, 106,
-    105, 103, 8, 6, 1, 63, 103, 8, 6, 1, 250, 112, 103, 8, 6, 1, 247, 207,
-    103, 8, 6, 1, 240, 231, 103, 8, 6, 1, 69, 103, 8, 6, 1, 236, 49, 103, 8,
-    6, 1, 234, 190, 103, 8, 6, 1, 233, 15, 103, 8, 6, 1, 68, 103, 8, 6, 1,
-    225, 217, 103, 8, 6, 1, 225, 80, 103, 8, 6, 1, 159, 103, 8, 6, 1, 221,
-    136, 103, 8, 6, 1, 218, 55, 103, 8, 6, 1, 72, 103, 8, 6, 1, 214, 3, 103,
-    8, 6, 1, 211, 167, 103, 8, 6, 1, 144, 103, 8, 6, 1, 209, 80, 103, 8, 6,
-    1, 203, 216, 103, 8, 6, 1, 66, 103, 8, 6, 1, 199, 230, 103, 8, 6, 1, 197,
-    199, 103, 8, 6, 1, 196, 222, 103, 8, 6, 1, 196, 148, 103, 8, 6, 1, 195,
-    158, 103, 231, 44, 103, 218, 79, 103, 208, 149, 103, 205, 83, 103, 212,
-    52, 103, 197, 110, 217, 104, 46, 8, 6, 1, 63, 217, 104, 46, 8, 6, 1, 250,
-    112, 217, 104, 46, 8, 6, 1, 247, 207, 217, 104, 46, 8, 6, 1, 240, 231,
-    217, 104, 46, 8, 6, 1, 69, 217, 104, 46, 8, 6, 1, 236, 49, 217, 104, 46,
-    8, 6, 1, 234, 190, 217, 104, 46, 8, 6, 1, 233, 15, 217, 104, 46, 8, 6, 1,
-    68, 217, 104, 46, 8, 6, 1, 225, 217, 217, 104, 46, 8, 6, 1, 225, 80, 217,
-    104, 46, 8, 6, 1, 159, 217, 104, 46, 8, 6, 1, 221, 136, 217, 104, 46, 8,
-    6, 1, 218, 55, 217, 104, 46, 8, 6, 1, 72, 217, 104, 46, 8, 6, 1, 214, 3,
-    217, 104, 46, 8, 6, 1, 211, 167, 217, 104, 46, 8, 6, 1, 144, 217, 104,
-    46, 8, 6, 1, 209, 80, 217, 104, 46, 8, 6, 1, 203, 216, 217, 104, 46, 8,
-    6, 1, 66, 217, 104, 46, 8, 6, 1, 199, 230, 217, 104, 46, 8, 6, 1, 197,
-    199, 217, 104, 46, 8, 6, 1, 196, 222, 217, 104, 46, 8, 6, 1, 196, 148,
-    217, 104, 46, 8, 6, 1, 195, 158, 210, 215, 219, 213, 55, 210, 215, 219,
-    210, 55, 210, 215, 218, 150, 55, 217, 104, 103, 8, 6, 1, 63, 217, 104,
-    103, 8, 6, 1, 250, 112, 217, 104, 103, 8, 6, 1, 247, 207, 217, 104, 103,
-    8, 6, 1, 240, 231, 217, 104, 103, 8, 6, 1, 69, 217, 104, 103, 8, 6, 1,
-    236, 49, 217, 104, 103, 8, 6, 1, 234, 190, 217, 104, 103, 8, 6, 1, 233,
-    15, 217, 104, 103, 8, 6, 1, 68, 217, 104, 103, 8, 6, 1, 225, 217, 217,
-    104, 103, 8, 6, 1, 225, 80, 217, 104, 103, 8, 6, 1, 159, 217, 104, 103,
-    8, 6, 1, 221, 136, 217, 104, 103, 8, 6, 1, 218, 55, 217, 104, 103, 8, 6,
-    1, 72, 217, 104, 103, 8, 6, 1, 214, 3, 217, 104, 103, 8, 6, 1, 211, 167,
-    217, 104, 103, 8, 6, 1, 144, 217, 104, 103, 8, 6, 1, 209, 80, 217, 104,
-    103, 8, 6, 1, 203, 216, 217, 104, 103, 8, 6, 1, 66, 217, 104, 103, 8, 6,
-    1, 199, 230, 217, 104, 103, 8, 6, 1, 197, 199, 217, 104, 103, 8, 6, 1,
-    196, 222, 217, 104, 103, 8, 6, 1, 196, 148, 217, 104, 103, 8, 6, 1, 195,
-    158, 241, 59, 217, 104, 103, 8, 6, 1, 214, 3, 217, 104, 103, 230, 203,
-    217, 104, 103, 161, 217, 104, 103, 183, 217, 104, 103, 252, 117, 217,
-    104, 103, 197, 110, 47, 239, 48, 103, 244, 230, 103, 241, 113, 103, 234,
-    245, 103, 230, 194, 103, 217, 82, 103, 217, 73, 103, 214, 139, 103, 205,
-    166, 103, 124, 3, 236, 90, 78, 103, 198, 223, 103, 115, 240, 231, 103,
-    208, 136, 208, 154, 103, 99, 225, 80, 103, 235, 7, 225, 80, 103, 237, 31,
-    225, 80, 103, 235, 101, 212, 111, 100, 103, 207, 71, 212, 111, 100, 103,
-    200, 223, 212, 111, 102, 103, 206, 14, 214, 3, 103, 97, 231, 58, 200,
-    235, 214, 3, 103, 8, 4, 1, 240, 231, 103, 232, 150, 103, 232, 149, 103,
-    232, 63, 103, 221, 217, 103, 206, 131, 103, 200, 91, 103, 198, 245, 210,
-    150, 226, 69, 16, 1, 63, 210, 150, 226, 69, 16, 1, 250, 112, 210, 150,
-    226, 69, 16, 1, 247, 207, 210, 150, 226, 69, 16, 1, 240, 231, 210, 150,
-    226, 69, 16, 1, 69, 210, 150, 226, 69, 16, 1, 236, 49, 210, 150, 226, 69,
-    16, 1, 234, 190, 210, 150, 226, 69, 16, 1, 233, 15, 210, 150, 226, 69,
-    16, 1, 68, 210, 150, 226, 69, 16, 1, 225, 217, 210, 150, 226, 69, 16, 1,
-    225, 80, 210, 150, 226, 69, 16, 1, 159, 210, 150, 226, 69, 16, 1, 221,
-    136, 210, 150, 226, 69, 16, 1, 218, 55, 210, 150, 226, 69, 16, 1, 72,
-    210, 150, 226, 69, 16, 1, 214, 3, 210, 150, 226, 69, 16, 1, 211, 167,
-    210, 150, 226, 69, 16, 1, 144, 210, 150, 226, 69, 16, 1, 209, 80, 210,
-    150, 226, 69, 16, 1, 203, 216, 210, 150, 226, 69, 16, 1, 66, 210, 150,
-    226, 69, 16, 1, 199, 230, 210, 150, 226, 69, 16, 1, 197, 199, 210, 150,
-    226, 69, 16, 1, 196, 222, 210, 150, 226, 69, 16, 1, 196, 148, 210, 150,
-    226, 69, 16, 1, 195, 158, 47, 188, 231, 179, 103, 71, 223, 250, 103, 71,
-    183, 103, 12, 200, 54, 228, 138, 103, 12, 200, 54, 228, 142, 103, 12,
-    200, 54, 228, 150, 103, 71, 239, 252, 103, 12, 200, 54, 228, 157, 103,
-    12, 200, 54, 228, 144, 103, 12, 200, 54, 228, 116, 103, 12, 200, 54, 228,
-    143, 103, 12, 200, 54, 228, 156, 103, 12, 200, 54, 228, 130, 103, 12,
-    200, 54, 228, 123, 103, 12, 200, 54, 228, 132, 103, 12, 200, 54, 228,
-    153, 103, 12, 200, 54, 228, 139, 103, 12, 200, 54, 228, 155, 103, 12,
-    200, 54, 228, 131, 103, 12, 200, 54, 228, 154, 103, 12, 200, 54, 228,
-    117, 103, 12, 200, 54, 228, 122, 103, 12, 200, 54, 228, 115, 103, 12,
-    200, 54, 228, 145, 103, 12, 200, 54, 228, 147, 103, 12, 200, 54, 228,
-    125, 103, 12, 200, 54, 228, 136, 103, 12, 200, 54, 228, 134, 103, 12,
-    200, 54, 228, 160, 103, 12, 200, 54, 228, 159, 103, 12, 200, 54, 228,
-    113, 103, 12, 200, 54, 228, 140, 103, 12, 200, 54, 228, 158, 103, 12,
-    200, 54, 228, 149, 103, 12, 200, 54, 228, 135, 103, 12, 200, 54, 228,
-    114, 103, 12, 200, 54, 228, 137, 103, 12, 200, 54, 228, 119, 103, 12,
-    200, 54, 228, 118, 103, 12, 200, 54, 228, 148, 103, 12, 200, 54, 228,
-    126, 103, 12, 200, 54, 228, 128, 103, 12, 200, 54, 228, 129, 103, 12,
-    200, 54, 228, 121, 103, 12, 200, 54, 228, 152, 103, 12, 200, 54, 228,
-    146, 103, 12, 200, 54, 228, 112, 201, 231, 206, 245, 248, 61, 12, 200,
-    54, 228, 127, 201, 231, 206, 245, 248, 61, 12, 200, 54, 228, 159, 201,
-    231, 206, 245, 248, 61, 12, 200, 54, 228, 157, 201, 231, 206, 245, 248,
-    61, 12, 200, 54, 228, 141, 201, 231, 206, 245, 248, 61, 12, 200, 54, 228,
-    124, 201, 231, 206, 245, 248, 61, 12, 200, 54, 228, 137, 201, 231, 206,
-    245, 248, 61, 12, 200, 54, 228, 120, 201, 231, 206, 245, 248, 61, 12,
-    200, 54, 228, 151, 201, 231, 206, 245, 248, 61, 12, 200, 54, 228, 133,
-    46, 230, 191, 251, 247, 46, 230, 191, 252, 20, 209, 185, 16, 36, 234,
-    223, 209, 185, 16, 36, 221, 191, 209, 185, 16, 36, 206, 165, 209, 185,
-    16, 36, 196, 196, 209, 185, 16, 36, 206, 148, 209, 185, 16, 36, 247, 162,
-    240, 242, 235, 49, 244, 203, 200, 76, 216, 195, 3, 205, 4, 204, 106, 127,
-    218, 168, 204, 105, 244, 234, 250, 169, 237, 174, 204, 104, 127, 248, 10,
-    210, 216, 248, 40, 250, 169, 216, 194, 197, 128, 197, 122, 198, 239, 219,
-    31, 197, 112, 237, 73, 233, 153, 236, 106, 237, 73, 233, 153, 251, 114,
-    237, 73, 233, 153, 250, 188, 233, 153, 3, 219, 155, 217, 83, 218, 190,
-    105, 197, 114, 241, 72, 218, 190, 105, 235, 113, 211, 88, 218, 190, 105,
-    197, 114, 233, 188, 218, 190, 105, 234, 217, 218, 190, 105, 197, 142,
-    233, 188, 218, 190, 105, 222, 221, 211, 88, 218, 190, 105, 197, 142, 241,
-    72, 218, 190, 105, 241, 72, 218, 189, 217, 83, 218, 190, 3, 235, 233,
-    235, 113, 211, 88, 218, 190, 3, 235, 233, 222, 221, 211, 88, 218, 190, 3,
-    235, 233, 234, 217, 218, 190, 3, 235, 233, 204, 112, 3, 235, 233, 233,
-    149, 205, 7, 206, 187, 205, 7, 202, 205, 58, 237, 209, 59, 204, 111, 59,
-    204, 112, 3, 4, 244, 194, 59, 204, 112, 248, 236, 244, 194, 59, 204, 112,
-    248, 236, 244, 195, 3, 210, 217, 244, 195, 3, 210, 217, 244, 195, 3, 205,
-    206, 244, 195, 3, 222, 92, 244, 195, 3, 201, 235, 235, 50, 197, 51, 248,
-    120, 235, 233, 231, 96, 239, 17, 203, 146, 247, 242, 245, 81, 208, 127,
-    236, 100, 201, 190, 239, 245, 201, 190, 213, 207, 201, 190, 247, 167,
-    231, 96, 213, 47, 201, 24, 245, 85, 248, 123, 209, 198, 232, 62, 204,
-    109, 248, 123, 237, 77, 77, 220, 72, 237, 77, 77, 210, 60, 232, 96, 235,
-    7, 222, 193, 244, 193, 220, 41, 222, 192, 235, 214, 222, 192, 222, 193,
-    235, 57, 226, 87, 197, 50, 218, 90, 202, 15, 250, 149, 233, 108, 219,
-    173, 197, 126, 203, 108, 222, 161, 249, 90, 212, 172, 210, 158, 251, 27,
-    233, 91, 251, 27, 213, 85, 213, 89, 245, 86, 204, 209, 232, 218, 205,
-    240, 77, 212, 152, 219, 200, 214, 120, 248, 104, 212, 64, 222, 172, 210,
-    61, 241, 78, 210, 61, 249, 103, 241, 116, 210, 60, 241, 14, 26, 210, 60,
-    204, 246, 248, 74, 205, 144, 248, 53, 234, 243, 234, 239, 209, 222, 204,
-    59, 212, 66, 240, 85, 214, 166, 204, 78, 234, 240, 206, 157, 235, 112,
-    247, 161, 3, 204, 51, 239, 188, 205, 186, 230, 202, 241, 76, 207, 7, 230,
-    201, 230, 202, 241, 76, 237, 238, 241, 115, 245, 47, 154, 247, 132, 221,
-    244, 241, 5, 231, 168, 212, 68, 206, 171, 248, 216, 248, 70, 212, 69, 77,
-    235, 39, 241, 114, 235, 28, 26, 224, 21, 203, 57, 197, 37, 232, 187, 208,
-    248, 248, 87, 26, 241, 27, 197, 47, 233, 157, 244, 178, 233, 157, 201,
-    145, 237, 216, 248, 247, 218, 130, 244, 210, 248, 247, 218, 129, 249,
-    141, 248, 86, 235, 28, 26, 224, 22, 3, 212, 139, 248, 87, 3, 212, 84,
-    241, 103, 212, 86, 210, 62, 196, 254, 212, 26, 248, 153, 247, 160, 225,
-    211, 245, 38, 201, 190, 235, 197, 245, 37, 235, 115, 235, 116, 205, 142,
-    249, 101, 213, 129, 212, 85, 241, 152, 249, 103, 203, 112, 201, 190, 241,
-    59, 235, 87, 212, 173, 239, 242, 225, 202, 239, 9, 247, 104, 204, 208,
-    197, 51, 245, 63, 218, 190, 199, 21, 247, 23, 208, 167, 208, 197, 233,
-    114, 247, 125, 232, 127, 3, 202, 68, 214, 120, 202, 218, 222, 184, 248,
-    80, 77, 235, 61, 219, 33, 219, 196, 210, 129, 210, 62, 34, 224, 152, 3,
-    225, 210, 204, 179, 219, 67, 222, 128, 205, 238, 241, 121, 224, 15, 249,
-    5, 250, 198, 34, 216, 8, 249, 5, 239, 194, 34, 216, 8, 235, 131, 234,
-    249, 251, 251, 202, 109, 247, 105, 231, 98, 235, 163, 197, 77, 209, 211,
-    244, 180, 235, 107, 212, 102, 26, 235, 111, 219, 67, 218, 154, 247, 146,
-    244, 253, 232, 133, 250, 207, 213, 211, 201, 243, 232, 165, 244, 239,
-    203, 15, 202, 110, 244, 225, 248, 113, 213, 40, 250, 205, 199, 30, 234,
-    97, 239, 86, 232, 31, 205, 231, 220, 116, 248, 166, 234, 98, 239, 132,
-    248, 73, 235, 63, 212, 138, 247, 113, 34, 216, 13, 218, 120, 34, 216, 8,
-    208, 181, 233, 59, 34, 224, 151, 201, 120, 199, 9, 34, 208, 159, 209,
-    114, 206, 202, 3, 208, 200, 203, 20, 210, 236, 26, 249, 103, 206, 3, 26,
-    206, 3, 248, 97, 249, 60, 26, 231, 161, 245, 87, 235, 93, 205, 205, 209,
-    115, 204, 83, 205, 106, 219, 196, 201, 146, 231, 99, 210, 237, 251, 115,
-    235, 36, 209, 128, 235, 36, 204, 54, 197, 94, 222, 97, 233, 134, 210,
-    238, 218, 176, 210, 238, 247, 116, 241, 69, 249, 57, 26, 249, 103, 198,
-    238, 235, 152, 231, 182, 204, 238, 26, 249, 103, 230, 202, 231, 182, 204,
-    238, 26, 211, 219, 203, 153, 203, 20, 213, 230, 26, 249, 103, 205, 207,
-    247, 121, 218, 169, 247, 144, 249, 8, 3, 200, 76, 248, 12, 241, 135, 231,
-    88, 248, 10, 244, 233, 239, 198, 231, 88, 248, 11, 244, 223, 248, 11,
-    239, 190, 239, 191, 225, 241, 217, 204, 213, 136, 205, 18, 231, 88, 248,
-    11, 231, 88, 3, 234, 81, 214, 157, 248, 11, 225, 202, 212, 74, 214, 156,
-    236, 105, 212, 74, 214, 156, 231, 97, 249, 84, 250, 138, 203, 29, 220,
-    116, 231, 93, 221, 209, 231, 93, 241, 119, 204, 222, 208, 166, 239, 201,
-    204, 222, 235, 222, 225, 222, 222, 233, 225, 202, 247, 94, 236, 105, 247,
-    94, 59, 213, 59, 58, 213, 59, 197, 120, 59, 235, 93, 197, 120, 58, 235,
-    93, 209, 197, 58, 209, 197, 223, 74, 249, 124, 210, 236, 26, 206, 134,
-    248, 78, 26, 51, 251, 110, 236, 236, 73, 235, 102, 200, 199, 236, 236,
-    73, 235, 102, 200, 196, 236, 236, 73, 235, 102, 200, 194, 236, 236, 73,
-    235, 102, 200, 192, 236, 236, 73, 235, 102, 200, 190, 210, 198, 218, 166,
-    214, 13, 197, 128, 248, 16, 241, 83, 202, 102, 222, 145, 210, 240, 247,
-    92, 237, 223, 241, 67, 197, 80, 205, 214, 205, 212, 231, 98, 210, 210,
-    233, 140, 206, 249, 218, 209, 209, 201, 245, 73, 239, 17, 212, 184, 248,
-    114, 236, 255, 214, 169, 205, 121, 206, 244, 248, 15, 251, 69, 231, 167,
-    223, 66, 248, 245, 235, 111, 201, 145, 235, 111, 248, 121, 201, 1, 232,
-    163, 245, 74, 249, 141, 245, 74, 234, 233, 249, 141, 245, 74, 248, 156,
-    213, 61, 224, 5, 212, 90, 237, 213, 247, 148, 249, 129, 247, 148, 239, 8,
-    218, 167, 235, 233, 241, 84, 235, 233, 202, 103, 235, 233, 210, 241, 235,
-    233, 247, 93, 235, 233, 237, 224, 235, 233, 205, 104, 197, 80, 231, 99,
-    235, 233, 218, 210, 235, 233, 239, 18, 235, 233, 212, 185, 235, 233, 234,
-    237, 235, 233, 232, 215, 235, 233, 197, 24, 235, 233, 249, 3, 235, 233,
-    213, 187, 235, 233, 212, 185, 216, 20, 213, 105, 212, 12, 245, 58, 236,
-    59, 236, 67, 237, 76, 216, 20, 218, 164, 201, 249, 59, 124, 212, 107,
-    249, 136, 226, 72, 59, 135, 212, 107, 249, 136, 226, 72, 59, 50, 212,
-    107, 249, 136, 226, 72, 59, 53, 212, 107, 249, 136, 226, 72, 235, 105,
-    232, 210, 55, 197, 120, 232, 210, 55, 214, 140, 232, 210, 55, 202, 140,
-    124, 55, 202, 140, 135, 55, 244, 224, 232, 185, 55, 192, 232, 185, 55,
-    241, 53, 197, 20, 232, 165, 236, 62, 217, 108, 203, 214, 225, 192, 237,
-    218, 224, 77, 248, 169, 197, 20, 244, 196, 211, 199, 232, 189, 212, 65,
-    220, 50, 206, 194, 250, 164, 206, 194, 232, 47, 206, 194, 197, 20, 208,
-    216, 197, 20, 248, 96, 235, 34, 247, 234, 226, 87, 206, 78, 247, 233,
-    226, 87, 206, 78, 248, 68, 233, 169, 220, 62, 197, 21, 235, 211, 220, 63,
-    26, 197, 22, 231, 176, 232, 184, 99, 219, 165, 231, 176, 232, 184, 99,
-    197, 19, 231, 176, 232, 184, 212, 99, 214, 155, 197, 22, 3, 247, 252,
-    237, 74, 248, 41, 3, 199, 109, 213, 29, 3, 248, 125, 232, 233, 220, 63,
-    3, 233, 73, 212, 221, 220, 45, 220, 63, 3, 201, 9, 214, 132, 220, 62,
-    214, 132, 197, 21, 249, 140, 241, 136, 197, 5, 212, 17, 225, 202, 214,
-    150, 225, 202, 233, 139, 233, 200, 249, 141, 251, 95, 236, 72, 251, 154,
-    251, 155, 218, 199, 226, 92, 205, 254, 226, 61, 239, 187, 213, 28, 233,
-    67, 240, 90, 222, 58, 217, 229, 212, 98, 235, 234, 220, 7, 232, 232, 249,
-    78, 212, 101, 203, 235, 212, 177, 224, 58, 78, 221, 209, 222, 135, 210,
-    2, 234, 38, 204, 228, 224, 57, 248, 79, 241, 87, 3, 232, 126, 197, 101,
-    248, 255, 232, 126, 248, 33, 232, 126, 99, 232, 124, 205, 140, 232, 126,
-    233, 83, 232, 126, 232, 127, 3, 51, 248, 119, 232, 126, 233, 91, 232,
-    126, 196, 62, 232, 126, 211, 200, 232, 126, 232, 127, 3, 210, 62, 210,
-    83, 232, 124, 232, 127, 239, 242, 239, 141, 207, 21, 3, 39, 76, 226, 41,
-    237, 2, 175, 248, 8, 251, 94, 105, 248, 105, 205, 243, 105, 244, 170,
-    105, 205, 115, 204, 61, 105, 237, 209, 240, 66, 105, 212, 178, 77, 212,
-    91, 235, 75, 248, 181, 239, 49, 105, 205, 132, 249, 101, 202, 160, 249,
-    101, 59, 235, 62, 231, 58, 212, 105, 105, 218, 214, 249, 122, 241, 17,
-    236, 92, 85, 239, 10, 55, 241, 74, 247, 114, 249, 83, 3, 196, 60, 55,
-    249, 83, 3, 239, 10, 55, 249, 83, 3, 236, 108, 55, 249, 83, 3, 212, 63,
-    55, 218, 214, 3, 197, 45, 245, 111, 3, 200, 24, 201, 186, 26, 196, 60,
-    55, 208, 139, 213, 27, 241, 157, 248, 39, 219, 21, 235, 67, 239, 73, 214,
-    76, 239, 78, 237, 169, 235, 138, 235, 47, 192, 235, 138, 235, 47, 213,
-    228, 3, 241, 21, 213, 228, 235, 226, 200, 36, 247, 154, 203, 56, 247,
-    154, 247, 115, 226, 72, 245, 111, 3, 200, 24, 201, 185, 245, 111, 3, 237,
-    231, 201, 185, 249, 80, 245, 110, 244, 209, 211, 195, 209, 187, 211, 195,
-    213, 160, 204, 218, 209, 122, 201, 177, 209, 122, 248, 101, 203, 151,
-    222, 189, 216, 11, 216, 12, 3, 239, 241, 241, 86, 244, 203, 248, 102,
-    192, 248, 102, 233, 91, 248, 102, 248, 119, 248, 102, 214, 71, 248, 102,
-    248, 99, 217, 223, 249, 126, 208, 152, 219, 166, 203, 34, 210, 172, 213,
-    226, 235, 194, 220, 116, 208, 196, 251, 66, 211, 220, 252, 3, 221, 211,
-    245, 95, 219, 178, 214, 33, 201, 194, 226, 83, 201, 194, 213, 235, 237,
-    129, 105, 226, 80, 236, 194, 236, 195, 3, 237, 231, 61, 57, 244, 203,
-    220, 78, 3, 221, 201, 235, 93, 244, 203, 220, 78, 3, 210, 215, 235, 93,
-    192, 220, 78, 3, 210, 215, 235, 93, 192, 220, 78, 3, 221, 201, 235, 93,
-    212, 71, 212, 72, 231, 102, 217, 78, 218, 243, 212, 229, 218, 243, 212,
-    230, 3, 91, 61, 250, 169, 222, 184, 199, 33, 218, 242, 218, 243, 212,
-    230, 214, 158, 216, 51, 218, 243, 212, 228, 251, 67, 3, 249, 68, 247,
-    146, 247, 147, 3, 235, 84, 199, 30, 247, 146, 203, 31, 210, 231, 199, 29,
-    235, 131, 211, 254, 212, 81, 204, 240, 212, 40, 249, 7, 200, 219, 91,
-    250, 214, 244, 205, 91, 26, 107, 192, 244, 250, 250, 214, 244, 205, 91,
-    26, 107, 192, 244, 250, 250, 215, 3, 46, 97, 214, 20, 244, 205, 237, 231,
-    26, 200, 24, 192, 244, 250, 250, 214, 251, 65, 237, 231, 26, 200, 24,
-    192, 244, 250, 250, 214, 126, 248, 37, 105, 130, 248, 37, 105, 205, 137,
-    3, 247, 139, 106, 205, 136, 205, 137, 3, 97, 205, 162, 197, 122, 205,
-    137, 3, 115, 205, 162, 197, 121, 249, 50, 237, 2, 212, 130, 222, 179,
-    220, 90, 233, 157, 210, 17, 220, 90, 233, 157, 221, 255, 3, 226, 53, 213,
-    65, 244, 203, 221, 255, 3, 224, 153, 224, 153, 221, 254, 192, 221, 254,
-    248, 229, 248, 230, 3, 247, 139, 106, 248, 100, 222, 66, 105, 210, 232,
-    247, 227, 249, 139, 3, 107, 61, 57, 236, 222, 3, 107, 61, 57, 214, 120,
-    3, 236, 90, 117, 3, 50, 53, 61, 57, 205, 170, 3, 91, 61, 57, 201, 243, 3,
-    200, 24, 61, 57, 216, 51, 97, 200, 64, 237, 29, 105, 224, 150, 203, 23,
-    226, 47, 16, 36, 8, 6, 222, 134, 226, 47, 16, 36, 8, 4, 222, 134, 226,
-    47, 16, 36, 215, 143, 226, 47, 16, 36, 203, 249, 226, 47, 16, 36, 8, 222,
-    134, 235, 118, 237, 2, 201, 238, 196, 252, 232, 216, 215, 126, 26, 248,
-    107, 231, 183, 212, 158, 219, 66, 203, 32, 241, 43, 249, 103, 206, 29,
-    212, 109, 205, 8, 3, 112, 238, 253, 225, 202, 16, 36, 248, 242, 201, 175,
-    236, 238, 58, 47, 247, 227, 59, 47, 247, 227, 222, 228, 210, 158, 244,
-    249, 222, 228, 248, 119, 244, 249, 222, 228, 214, 71, 239, 140, 222, 228,
-    248, 119, 239, 140, 4, 214, 71, 239, 140, 4, 248, 119, 239, 140, 200, 35,
-    210, 158, 201, 180, 237, 234, 210, 158, 201, 180, 200, 35, 4, 210, 158,
-    201, 180, 237, 234, 4, 210, 158, 201, 180, 221, 203, 53, 207, 37, 59,
-    244, 249, 200, 33, 53, 207, 37, 59, 244, 249, 46, 241, 62, 212, 95, 241,
-    62, 212, 96, 3, 232, 222, 60, 241, 62, 212, 95, 216, 15, 50, 207, 108, 3,
-    115, 238, 250, 216, 15, 53, 207, 108, 3, 115, 238, 250, 16, 36, 220, 23,
-    247, 1, 59, 8, 241, 61, 85, 8, 241, 61, 247, 41, 241, 61, 214, 128, 105,
-    237, 237, 77, 213, 90, 225, 53, 218, 182, 203, 243, 219, 161, 3, 216,
-    179, 248, 56, 248, 75, 77, 231, 9, 244, 207, 235, 234, 97, 214, 175, 244,
-    207, 235, 234, 99, 214, 175, 244, 207, 235, 234, 115, 214, 175, 244, 207,
-    235, 234, 235, 7, 214, 175, 244, 207, 235, 234, 235, 101, 214, 175, 244,
-    207, 235, 234, 206, 29, 214, 175, 244, 207, 235, 234, 207, 71, 214, 175,
-    244, 207, 235, 234, 237, 31, 214, 175, 244, 207, 235, 234, 216, 179, 214,
-    175, 244, 207, 235, 234, 203, 24, 214, 175, 244, 207, 235, 234, 236, 253,
-    214, 175, 244, 207, 235, 234, 200, 240, 214, 175, 244, 207, 235, 234,
-    214, 112, 244, 207, 235, 234, 200, 213, 244, 207, 235, 234, 202, 146,
-    244, 207, 235, 234, 235, 3, 244, 207, 235, 234, 235, 99, 244, 207, 235,
-    234, 206, 25, 244, 207, 235, 234, 207, 70, 244, 207, 235, 234, 237, 30,
-    244, 207, 235, 234, 216, 178, 244, 207, 235, 234, 203, 22, 244, 207, 235,
-    234, 236, 251, 244, 207, 235, 234, 200, 238, 53, 205, 136, 53, 205, 137,
-    3, 97, 205, 162, 197, 122, 53, 205, 137, 3, 115, 205, 162, 197, 121, 248,
-    3, 248, 4, 3, 205, 162, 197, 121, 210, 0, 248, 229, 248, 102, 247, 137,
-    220, 47, 244, 206, 58, 205, 255, 26, 241, 60, 216, 51, 212, 164, 231,
-    175, 220, 63, 226, 87, 247, 236, 204, 125, 222, 127, 205, 241, 214, 73,
-    205, 95, 240, 71, 204, 107, 205, 124, 205, 125, 197, 102, 225, 111, 220,
-    63, 240, 89, 50, 232, 210, 203, 34, 210, 172, 203, 34, 210, 173, 3, 213,
-    227, 53, 232, 210, 203, 34, 210, 172, 59, 201, 224, 203, 33, 58, 201,
-    224, 203, 33, 203, 34, 214, 120, 201, 243, 77, 218, 239, 244, 228, 218,
-    243, 212, 229, 249, 139, 77, 236, 194, 205, 14, 236, 194, 236, 195, 3,
-    222, 92, 235, 54, 236, 194, 213, 66, 127, 205, 14, 236, 194, 222, 65,
-    213, 159, 58, 211, 195, 221, 203, 50, 213, 64, 221, 203, 50, 249, 97,
-    213, 65, 221, 203, 50, 235, 9, 213, 65, 221, 203, 50, 213, 220, 221, 203,
-    50, 241, 77, 50, 196, 246, 232, 209, 163, 214, 140, 232, 210, 55, 210,
-    215, 232, 210, 3, 235, 123, 205, 114, 210, 89, 210, 215, 232, 210, 3,
-    235, 123, 205, 114, 210, 89, 202, 140, 124, 55, 210, 89, 202, 140, 135,
-    55, 210, 89, 199, 32, 232, 209, 210, 89, 232, 210, 3, 112, 235, 128, 236,
-    78, 210, 215, 232, 210, 3, 213, 134, 248, 204, 112, 26, 210, 3, 235, 122,
-    59, 135, 212, 107, 50, 232, 210, 226, 72, 206, 96, 59, 50, 212, 107, 226,
-    72, 206, 96, 59, 53, 212, 107, 226, 72, 206, 96, 58, 50, 212, 107, 226,
-    72, 206, 96, 58, 53, 212, 107, 226, 72, 58, 50, 212, 107, 249, 136, 226,
-    72, 58, 53, 212, 107, 249, 136, 226, 72, 206, 96, 59, 124, 212, 107, 226,
-    72, 206, 96, 59, 135, 212, 107, 226, 72, 206, 96, 58, 124, 212, 107, 226,
-    72, 206, 96, 58, 135, 212, 107, 226, 72, 58, 124, 212, 107, 249, 136,
-    226, 72, 58, 135, 212, 107, 249, 136, 226, 72, 58, 232, 126, 239, 186,
-    241, 157, 224, 152, 26, 218, 166, 115, 217, 87, 241, 156, 212, 13, 212,
-    115, 247, 156, 58, 232, 173, 206, 245, 235, 67, 239, 73, 59, 232, 173,
-    206, 245, 235, 67, 239, 73, 205, 186, 206, 245, 235, 67, 239, 73, 203,
-    104, 247, 98, 197, 40, 224, 151, 97, 247, 228, 218, 166, 99, 247, 228,
-    218, 166, 115, 247, 228, 218, 166, 201, 215, 37, 213, 27, 241, 157, 232,
-    173, 239, 73, 208, 154, 212, 14, 230, 195, 235, 194, 230, 195, 214, 76,
-    239, 79, 230, 195, 239, 22, 3, 202, 237, 239, 22, 3, 202, 238, 26, 212,
-    214, 239, 22, 3, 212, 214, 234, 251, 3, 212, 214, 234, 251, 3, 202, 82,
-    234, 251, 3, 251, 107, 196, 222, 58, 235, 47, 235, 47, 192, 235, 47, 247,
-    115, 132, 239, 58, 247, 115, 235, 138, 248, 70, 235, 138, 247, 169, 236,
-    232, 216, 13, 236, 232, 216, 14, 213, 227, 236, 232, 216, 14, 213, 233,
-    216, 13, 216, 14, 213, 227, 216, 14, 213, 233, 236, 232, 239, 21, 236,
-    232, 213, 227, 236, 232, 213, 225, 239, 21, 213, 227, 213, 225, 197, 132,
-    205, 121, 216, 14, 213, 233, 205, 121, 247, 155, 213, 233, 239, 186, 197,
-    49, 219, 18, 219, 252, 214, 23, 244, 205, 53, 26, 50, 207, 108, 250, 214,
-    247, 139, 196, 222, 226, 78, 235, 41, 206, 9, 105, 239, 240, 235, 41,
-    206, 9, 105, 241, 158, 37, 224, 153, 209, 212, 217, 78, 213, 228, 3, 46,
-    202, 237, 204, 230, 245, 110, 240, 119, 224, 21, 222, 59, 205, 135, 232,
-    138, 226, 87, 206, 78, 115, 210, 189, 57, 115, 210, 189, 60, 115, 210,
-    189, 222, 184, 115, 210, 189, 210, 22, 50, 205, 132, 248, 20, 53, 205,
-    132, 248, 20, 99, 205, 132, 248, 19, 115, 205, 132, 248, 19, 50, 202,
-    160, 248, 20, 53, 202, 160, 248, 20, 50, 251, 94, 248, 20, 53, 251, 94,
-    248, 20, 218, 194, 248, 20, 222, 93, 218, 194, 248, 20, 222, 93, 218,
-    193, 249, 99, 111, 3, 249, 98, 249, 99, 145, 196, 222, 249, 99, 111, 3,
-    145, 196, 222, 249, 99, 27, 145, 196, 222, 249, 99, 111, 3, 27, 145, 196,
-    222, 175, 245, 102, 78, 249, 99, 111, 3, 27, 245, 101, 197, 4, 220, 43,
-    218, 171, 234, 218, 202, 17, 201, 220, 204, 253, 77, 222, 107, 206, 79,
-    77, 225, 203, 218, 152, 233, 87, 235, 233, 233, 87, 235, 234, 3, 205,
-    218, 236, 59, 235, 234, 3, 203, 52, 77, 225, 113, 205, 218, 235, 234, 3,
-    192, 218, 164, 205, 218, 235, 234, 3, 192, 218, 165, 26, 205, 218, 236,
-    59, 205, 218, 235, 234, 3, 192, 218, 165, 26, 244, 172, 204, 60, 205,
-    218, 235, 234, 3, 192, 218, 165, 26, 202, 100, 236, 59, 205, 218, 235,
-    234, 3, 232, 221, 205, 218, 235, 234, 3, 231, 101, 197, 42, 235, 233,
-    205, 218, 235, 234, 3, 205, 218, 236, 59, 235, 234, 208, 186, 239, 220,
-    235, 39, 210, 132, 235, 233, 205, 218, 235, 234, 3, 232, 125, 236, 59,
-    205, 218, 235, 234, 3, 204, 107, 205, 217, 235, 233, 217, 85, 235, 233,
-    236, 80, 235, 233, 200, 70, 235, 233, 235, 234, 3, 244, 172, 204, 60,
-    213, 57, 235, 233, 241, 149, 235, 233, 241, 150, 235, 233, 224, 56, 235,
-    233, 235, 234, 202, 143, 39, 224, 57, 224, 56, 235, 234, 3, 205, 218,
-    236, 59, 224, 56, 235, 234, 3, 244, 203, 236, 59, 235, 234, 3, 204, 180,
-    201, 249, 235, 234, 3, 204, 180, 201, 250, 26, 197, 42, 236, 67, 235,
-    234, 3, 204, 180, 201, 250, 26, 202, 100, 236, 59, 239, 80, 235, 233,
-    197, 3, 235, 233, 251, 86, 235, 233, 212, 62, 235, 233, 241, 45, 235,
-    233, 213, 31, 235, 233, 235, 234, 3, 221, 228, 77, 201, 157, 239, 80,
-    247, 232, 210, 132, 235, 233, 234, 229, 235, 234, 3, 192, 218, 164, 251,
-    84, 235, 233, 235, 187, 235, 233, 197, 103, 235, 233, 205, 242, 235, 233,
-    202, 62, 235, 233, 233, 88, 235, 233, 221, 212, 241, 45, 235, 233, 235,
-    234, 3, 192, 218, 164, 231, 47, 235, 233, 235, 234, 3, 192, 218, 165, 26,
-    244, 172, 204, 60, 235, 234, 208, 156, 226, 87, 235, 188, 250, 176, 235,
-    233, 235, 59, 235, 233, 205, 243, 235, 233, 239, 49, 235, 233, 235, 234,
-    197, 37, 218, 164, 235, 234, 3, 219, 193, 220, 9, 233, 87, 247, 93, 235,
-    234, 3, 205, 218, 236, 59, 247, 93, 235, 234, 3, 203, 52, 77, 225, 113,
-    205, 218, 247, 93, 235, 234, 3, 192, 218, 164, 205, 218, 247, 93, 235,
-    234, 3, 232, 125, 236, 59, 247, 93, 235, 234, 3, 196, 244, 205, 219, 224,
-    56, 247, 93, 235, 234, 3, 244, 203, 236, 59, 212, 62, 247, 93, 235, 233,
-    241, 45, 247, 93, 235, 233, 197, 103, 247, 93, 235, 233, 205, 236, 234,
-    229, 235, 233, 205, 236, 205, 218, 235, 233, 200, 30, 235, 233, 235, 234,
-    3, 209, 210, 236, 59, 235, 234, 3, 216, 51, 233, 131, 234, 15, 235, 234,
-    3, 214, 140, 234, 15, 213, 29, 248, 76, 239, 235, 208, 128, 218, 209,
-    232, 129, 218, 209, 205, 138, 218, 209, 232, 176, 213, 29, 210, 213, 97,
-    232, 209, 213, 29, 210, 213, 248, 88, 232, 185, 226, 87, 247, 43, 213,
-    29, 234, 228, 213, 29, 3, 212, 62, 235, 233, 213, 29, 3, 235, 48, 232,
-    184, 173, 197, 89, 212, 107, 222, 192, 205, 159, 197, 89, 212, 107, 222,
-    192, 173, 237, 69, 212, 107, 222, 192, 205, 159, 237, 69, 212, 107, 222,
-    192, 163, 173, 197, 89, 212, 107, 222, 192, 163, 205, 159, 197, 89, 212,
-    107, 222, 192, 163, 173, 237, 69, 212, 107, 222, 192, 163, 205, 159, 237,
-    69, 212, 107, 222, 192, 173, 197, 89, 212, 107, 199, 15, 222, 192, 205,
-    159, 197, 89, 212, 107, 199, 15, 222, 192, 173, 237, 69, 212, 107, 199,
-    15, 222, 192, 205, 159, 237, 69, 212, 107, 199, 15, 222, 192, 85, 173,
-    197, 89, 212, 107, 199, 15, 222, 192, 85, 205, 159, 197, 89, 212, 107,
-    199, 15, 222, 192, 85, 173, 237, 69, 212, 107, 199, 15, 222, 192, 85,
-    205, 159, 237, 69, 212, 107, 199, 15, 222, 192, 173, 197, 89, 212, 107,
-    248, 17, 205, 159, 197, 89, 212, 107, 248, 17, 173, 237, 69, 212, 107,
-    248, 17, 205, 159, 237, 69, 212, 107, 248, 17, 85, 173, 197, 89, 212,
-    107, 248, 17, 85, 205, 159, 197, 89, 212, 107, 248, 17, 85, 173, 237, 69,
-    212, 107, 248, 17, 85, 205, 159, 237, 69, 212, 107, 248, 17, 231, 174,
-    211, 72, 47, 214, 59, 231, 174, 211, 72, 47, 214, 60, 226, 87, 58, 205,
-    94, 205, 179, 211, 72, 47, 214, 59, 205, 179, 211, 72, 47, 214, 60, 226,
-    87, 58, 205, 94, 107, 209, 217, 200, 24, 209, 217, 91, 209, 217, 237,
-    231, 209, 217, 145, 33, 236, 129, 214, 59, 85, 145, 33, 236, 129, 214,
-    59, 33, 192, 236, 129, 214, 59, 85, 33, 192, 236, 129, 214, 59, 85, 251,
-    112, 214, 59, 204, 63, 251, 112, 214, 59, 45, 85, 52, 163, 244, 160, 211,
-    62, 117, 214, 59, 45, 85, 52, 244, 160, 211, 62, 117, 214, 59, 45, 85,
-    126, 52, 244, 160, 211, 62, 117, 214, 59, 85, 226, 27, 214, 59, 45, 226,
-    27, 214, 59, 85, 45, 226, 27, 214, 59, 199, 48, 85, 205, 177, 199, 48,
-    85, 210, 90, 205, 177, 245, 100, 248, 113, 210, 90, 245, 100, 248, 113,
-    209, 217, 232, 108, 204, 248, 221, 252, 210, 220, 247, 116, 232, 44, 201,
-    207, 232, 44, 201, 208, 3, 248, 6, 216, 20, 201, 207, 219, 136, 175, 210,
-    221, 204, 254, 201, 205, 201, 206, 247, 116, 247, 237, 214, 116, 247,
-    237, 201, 153, 247, 238, 204, 226, 219, 22, 251, 116, 235, 119, 236, 214,
-    212, 99, 247, 116, 214, 116, 212, 99, 247, 116, 203, 78, 214, 116, 203,
-    78, 250, 137, 214, 116, 250, 137, 210, 165, 199, 110, 239, 216, 201, 144,
-    250, 208, 221, 219, 201, 214, 218, 202, 218, 170, 210, 219, 204, 77, 210,
-    219, 218, 170, 247, 168, 251, 231, 201, 204, 206, 207, 209, 184, 205,
-    130, 231, 155, 201, 211, 222, 95, 83, 201, 211, 222, 95, 241, 136, 55,
-    212, 99, 247, 100, 210, 83, 222, 95, 201, 177, 235, 94, 214, 120, 212,
-    73, 239, 1, 216, 51, 236, 200, 55, 205, 216, 105, 216, 51, 205, 216, 105,
-    211, 194, 222, 48, 226, 87, 225, 231, 212, 149, 105, 239, 29, 216, 19,
-    222, 48, 105, 212, 67, 197, 128, 105, 216, 35, 197, 128, 105, 248, 180,
-    216, 51, 248, 179, 248, 178, 218, 170, 248, 178, 213, 81, 216, 51, 213,
-    80, 245, 65, 241, 54, 219, 160, 105, 197, 18, 105, 210, 99, 249, 141,
-    105, 202, 18, 197, 128, 244, 200, 206, 162, 249, 53, 249, 51, 213, 118,
-    241, 120, 241, 3, 249, 118, 244, 229, 50, 221, 181, 201, 181, 3, 209,
-    185, 241, 100, 212, 1, 55, 46, 226, 61, 205, 160, 248, 67, 105, 233, 168,
-    105, 241, 92, 26, 222, 239, 205, 243, 252, 19, 206, 185, 249, 117, 248,
-    228, 248, 229, 248, 252, 212, 149, 77, 197, 2, 214, 172, 55, 206, 185,
-    201, 154, 204, 176, 213, 224, 232, 40, 203, 26, 232, 217, 26, 196, 252,
-    206, 220, 214, 145, 237, 206, 218, 174, 210, 220, 201, 216, 218, 177,
-    248, 112, 200, 35, 219, 33, 251, 187, 200, 35, 251, 187, 200, 35, 4, 251,
-    187, 4, 251, 187, 216, 24, 251, 187, 251, 188, 239, 200, 251, 188, 250,
-    220, 208, 195, 214, 116, 235, 119, 236, 214, 239, 130, 221, 252, 213,
-    122, 206, 207, 208, 160, 218, 177, 208, 160, 247, 127, 205, 245, 235, 54,
-    208, 190, 206, 5, 250, 139, 210, 58, 150, 16, 36, 211, 68, 150, 16, 36,
-    251, 189, 150, 16, 36, 235, 118, 150, 16, 36, 237, 72, 150, 16, 36, 197,
-    127, 150, 16, 36, 251, 16, 150, 16, 36, 251, 17, 210, 152, 150, 16, 36,
-    251, 17, 210, 151, 150, 16, 36, 251, 17, 198, 254, 150, 16, 36, 251, 17,
-    198, 253, 150, 16, 36, 199, 12, 150, 16, 36, 199, 11, 150, 16, 36, 199,
-    10, 150, 16, 36, 204, 118, 150, 16, 36, 212, 238, 204, 118, 150, 16, 36,
-    58, 204, 118, 150, 16, 36, 219, 159, 204, 149, 150, 16, 36, 219, 159,
-    204, 148, 150, 16, 36, 219, 159, 204, 147, 150, 16, 36, 244, 252, 150,
-    16, 36, 208, 233, 150, 16, 36, 216, 167, 150, 16, 36, 198, 252, 150, 16,
-    36, 198, 251, 150, 16, 36, 209, 218, 208, 233, 150, 16, 36, 209, 218,
-    208, 232, 150, 16, 36, 233, 135, 150, 16, 36, 206, 75, 150, 16, 36, 225,
-    254, 214, 66, 150, 16, 36, 225, 254, 214, 65, 150, 16, 36, 241, 66, 77,
-    225, 253, 150, 16, 36, 210, 148, 77, 225, 253, 150, 16, 36, 241, 111,
-    214, 66, 150, 16, 36, 225, 252, 214, 66, 150, 16, 36, 204, 150, 77, 241,
-    110, 150, 16, 36, 241, 66, 77, 241, 110, 150, 16, 36, 241, 66, 77, 241,
-    109, 150, 16, 36, 241, 111, 251, 59, 150, 16, 36, 208, 234, 77, 241, 111,
-    251, 59, 150, 16, 36, 204, 150, 77, 208, 234, 77, 241, 110, 150, 16, 36,
-    199, 104, 150, 16, 36, 202, 75, 214, 66, 150, 16, 36, 222, 196, 214, 66,
-    150, 16, 36, 251, 58, 214, 66, 150, 16, 36, 204, 150, 77, 251, 57, 150,
-    16, 36, 208, 234, 77, 251, 57, 150, 16, 36, 204, 150, 77, 208, 234, 77,
-    251, 57, 150, 16, 36, 199, 13, 77, 251, 57, 150, 16, 36, 210, 148, 77,
-    251, 57, 150, 16, 36, 210, 148, 77, 251, 56, 150, 16, 36, 210, 147, 150,
-    16, 36, 210, 146, 150, 16, 36, 210, 145, 150, 16, 36, 210, 144, 150, 16,
-    36, 251, 149, 150, 16, 36, 251, 148, 150, 16, 36, 220, 34, 150, 16, 36,
-    208, 240, 150, 16, 36, 250, 213, 150, 16, 36, 210, 176, 150, 16, 36, 210,
-    175, 150, 16, 36, 250, 141, 150, 16, 36, 248, 146, 214, 66, 150, 16, 36,
-    203, 99, 150, 16, 36, 203, 98, 150, 16, 36, 211, 74, 222, 84, 150, 16,
-    36, 248, 93, 150, 16, 36, 248, 92, 150, 16, 36, 248, 91, 150, 16, 36,
-    251, 125, 150, 16, 36, 214, 144, 150, 16, 36, 205, 117, 150, 16, 36, 202,
-    73, 150, 16, 36, 233, 55, 150, 16, 36, 197, 115, 150, 16, 36, 212, 61,
-    150, 16, 36, 247, 151, 150, 16, 36, 200, 252, 150, 16, 36, 247, 118, 218,
-    183, 150, 16, 36, 208, 170, 77, 225, 115, 150, 16, 36, 247, 165, 150, 16,
-    36, 201, 174, 150, 16, 36, 205, 5, 201, 174, 150, 16, 36, 221, 251, 150,
-    16, 36, 205, 191, 150, 16, 36, 200, 13, 150, 16, 36, 231, 99, 237, 184,
-    150, 16, 36, 250, 190, 150, 16, 36, 212, 69, 250, 190, 150, 16, 36, 248,
-    42, 150, 16, 36, 212, 60, 248, 42, 150, 16, 36, 251, 122, 150, 16, 36,
-    204, 213, 204, 99, 204, 212, 150, 16, 36, 204, 213, 204, 99, 204, 211,
-    150, 16, 36, 204, 146, 150, 16, 36, 212, 33, 150, 16, 36, 239, 68, 150,
-    16, 36, 239, 70, 150, 16, 36, 239, 69, 150, 16, 36, 211, 203, 150, 16,
-    36, 211, 192, 150, 16, 36, 241, 52, 150, 16, 36, 241, 51, 150, 16, 36,
-    241, 50, 150, 16, 36, 241, 49, 150, 16, 36, 241, 48, 150, 16, 36, 251,
-    163, 150, 16, 36, 249, 54, 77, 220, 15, 150, 16, 36, 249, 54, 77, 199,
-    138, 150, 16, 36, 210, 97, 150, 16, 36, 231, 91, 150, 16, 36, 216, 194,
-    150, 16, 36, 240, 53, 150, 16, 36, 218, 197, 150, 16, 36, 157, 237, 221,
-    150, 16, 36, 157, 214, 37, 58, 222, 179, 225, 237, 53, 201, 180, 58, 200,
-    35, 225, 237, 53, 201, 180, 58, 210, 17, 225, 237, 53, 201, 180, 58, 237,
-    234, 225, 237, 53, 201, 180, 58, 205, 236, 4, 244, 249, 219, 190, 27, 59,
-    244, 249, 27, 59, 244, 249, 85, 59, 244, 249, 199, 48, 85, 59, 244, 249,
-    236, 71, 85, 59, 244, 249, 59, 244, 250, 241, 132, 58, 4, 244, 249, 209,
-    187, 203, 100, 58, 202, 70, 205, 94, 58, 205, 236, 4, 205, 94, 175, 59,
-    205, 94, 219, 190, 59, 205, 94, 27, 59, 205, 94, 85, 59, 205, 94, 199,
-    48, 85, 59, 205, 94, 236, 71, 85, 59, 205, 94, 59, 47, 241, 132, 58, 199,
-    48, 4, 205, 94, 59, 47, 241, 132, 58, 219, 190, 205, 94, 47, 203, 100,
-    58, 202, 70, 239, 140, 58, 199, 48, 4, 239, 140, 58, 219, 190, 4, 239,
-    140, 59, 239, 141, 241, 132, 58, 199, 48, 4, 239, 140, 59, 239, 141, 241,
-    132, 58, 219, 190, 239, 140, 239, 141, 203, 100, 58, 202, 70, 221, 198,
-    58, 199, 48, 4, 221, 198, 58, 219, 190, 4, 221, 198, 59, 221, 199, 241,
-    132, 58, 4, 221, 198, 202, 188, 32, 241, 61, 175, 32, 241, 61, 219, 190,
-    32, 241, 61, 27, 32, 241, 61, 199, 48, 27, 32, 241, 61, 199, 48, 85, 32,
-    241, 61, 236, 71, 85, 32, 241, 61, 202, 188, 208, 230, 175, 208, 230,
-    219, 190, 208, 230, 27, 208, 230, 85, 208, 230, 199, 48, 85, 208, 230,
-    236, 71, 85, 208, 230, 175, 235, 101, 205, 110, 250, 179, 219, 190, 235,
-    101, 205, 110, 250, 179, 27, 235, 101, 205, 110, 250, 179, 85, 235, 101,
-    205, 110, 250, 179, 199, 48, 85, 235, 101, 205, 110, 250, 179, 236, 71,
-    85, 235, 101, 205, 110, 250, 179, 175, 206, 29, 205, 110, 250, 179, 219,
-    190, 206, 29, 205, 110, 250, 179, 27, 206, 29, 205, 110, 250, 179, 85,
-    206, 29, 205, 110, 250, 179, 199, 48, 85, 206, 29, 205, 110, 250, 179,
-    236, 71, 85, 206, 29, 205, 110, 250, 179, 175, 237, 31, 205, 110, 250,
-    179, 219, 190, 237, 31, 205, 110, 250, 179, 27, 237, 31, 205, 110, 250,
-    179, 85, 237, 31, 205, 110, 250, 179, 199, 48, 85, 237, 31, 205, 110,
-    250, 179, 175, 115, 212, 109, 58, 205, 7, 219, 190, 115, 212, 109, 58,
-    205, 7, 115, 212, 109, 58, 205, 7, 219, 190, 115, 212, 109, 212, 170,
-    205, 7, 175, 235, 7, 212, 109, 58, 205, 7, 219, 190, 235, 7, 212, 109,
-    58, 205, 7, 235, 7, 212, 109, 58, 205, 7, 219, 190, 235, 7, 212, 109,
-    212, 170, 205, 7, 210, 90, 175, 235, 7, 212, 109, 212, 170, 205, 7, 175,
-    235, 101, 212, 109, 58, 205, 7, 85, 235, 101, 212, 109, 58, 205, 7, 219,
-    190, 206, 29, 212, 109, 58, 205, 7, 85, 206, 29, 212, 109, 58, 205, 7,
-    206, 29, 212, 109, 212, 170, 205, 7, 219, 190, 237, 31, 212, 109, 58,
-    205, 7, 85, 237, 31, 212, 109, 58, 205, 7, 199, 48, 85, 237, 31, 212,
-    109, 58, 205, 7, 85, 237, 31, 212, 109, 212, 170, 205, 7, 175, 200, 240,
-    212, 109, 58, 205, 7, 85, 200, 240, 212, 109, 58, 205, 7, 85, 200, 240,
-    212, 109, 212, 170, 205, 7, 46, 201, 180, 217, 104, 46, 201, 180, 46,
-    205, 94, 217, 104, 46, 205, 94, 222, 228, 214, 71, 244, 249, 222, 228,
-    196, 62, 244, 249, 222, 228, 233, 91, 244, 249, 222, 228, 211, 200, 244,
-    249, 222, 228, 248, 30, 244, 249, 222, 228, 210, 158, 205, 94, 222, 228,
-    248, 119, 205, 94, 222, 228, 214, 71, 205, 94, 222, 228, 196, 62, 205,
-    94, 222, 228, 233, 91, 205, 94, 222, 228, 211, 200, 205, 94, 222, 228,
-    248, 30, 205, 94, 107, 61, 3, 4, 201, 181, 250, 217, 200, 24, 61, 3, 4,
-    201, 181, 250, 217, 91, 61, 3, 4, 201, 181, 250, 217, 237, 231, 61, 3, 4,
-    201, 181, 250, 217, 107, 61, 3, 219, 190, 201, 181, 250, 217, 200, 24,
-    61, 3, 219, 190, 201, 181, 250, 217, 91, 61, 3, 219, 190, 201, 181, 250,
-    217, 237, 231, 61, 3, 219, 190, 201, 181, 250, 217, 107, 61, 3, 222, 228,
-    201, 181, 250, 217, 200, 24, 61, 3, 222, 228, 201, 181, 250, 217, 91, 61,
-    3, 222, 228, 201, 181, 250, 217, 237, 231, 61, 3, 222, 228, 201, 181,
-    250, 217, 107, 61, 3, 4, 236, 166, 250, 217, 200, 24, 61, 3, 4, 236, 166,
-    250, 217, 91, 61, 3, 4, 236, 166, 250, 217, 237, 231, 61, 3, 4, 236, 166,
-    250, 217, 107, 61, 3, 236, 166, 250, 217, 200, 24, 61, 3, 236, 166, 250,
-    217, 91, 61, 3, 236, 166, 250, 217, 237, 231, 61, 3, 236, 166, 250, 217,
-    85, 107, 61, 3, 236, 166, 250, 217, 85, 200, 24, 61, 3, 236, 166, 250,
-    217, 85, 91, 61, 3, 236, 166, 250, 217, 85, 237, 231, 61, 3, 236, 166,
-    250, 217, 85, 107, 61, 3, 222, 228, 236, 166, 250, 217, 85, 200, 24, 61,
-    3, 222, 228, 236, 166, 250, 217, 85, 91, 61, 3, 222, 228, 236, 166, 250,
-    217, 85, 237, 231, 61, 3, 222, 228, 236, 166, 250, 217, 107, 201, 179,
-    61, 3, 217, 210, 207, 35, 200, 24, 201, 179, 61, 3, 217, 210, 207, 35,
-    91, 201, 179, 61, 3, 217, 210, 207, 35, 237, 231, 201, 179, 61, 3, 217,
-    210, 207, 35, 107, 201, 179, 61, 3, 219, 190, 207, 35, 200, 24, 201, 179,
-    61, 3, 219, 190, 207, 35, 91, 201, 179, 61, 3, 219, 190, 207, 35, 237,
-    231, 201, 179, 61, 3, 219, 190, 207, 35, 107, 201, 179, 61, 3, 27, 207,
-    35, 200, 24, 201, 179, 61, 3, 27, 207, 35, 91, 201, 179, 61, 3, 27, 207,
-    35, 237, 231, 201, 179, 61, 3, 27, 207, 35, 107, 201, 179, 61, 3, 85,
-    207, 35, 200, 24, 201, 179, 61, 3, 85, 207, 35, 91, 201, 179, 61, 3, 85,
-    207, 35, 237, 231, 201, 179, 61, 3, 85, 207, 35, 107, 201, 179, 61, 3,
-    199, 48, 85, 207, 35, 200, 24, 201, 179, 61, 3, 199, 48, 85, 207, 35, 91,
-    201, 179, 61, 3, 199, 48, 85, 207, 35, 237, 231, 201, 179, 61, 3, 199,
-    48, 85, 207, 35, 107, 235, 126, 51, 200, 24, 235, 126, 51, 91, 235, 126,
-    51, 237, 231, 235, 126, 51, 107, 103, 51, 200, 24, 103, 51, 91, 103, 51,
-    237, 231, 103, 51, 107, 241, 159, 51, 200, 24, 241, 159, 51, 91, 241,
-    159, 51, 237, 231, 241, 159, 51, 107, 85, 241, 159, 51, 200, 24, 85, 241,
-    159, 51, 91, 85, 241, 159, 51, 237, 231, 85, 241, 159, 51, 107, 85, 51,
-    200, 24, 85, 51, 91, 85, 51, 237, 231, 85, 51, 107, 45, 51, 200, 24, 45,
-    51, 91, 45, 51, 237, 231, 45, 51, 173, 197, 89, 45, 51, 173, 237, 69, 45,
-    51, 205, 159, 237, 69, 45, 51, 205, 159, 197, 89, 45, 51, 50, 53, 45, 51,
-    124, 135, 45, 51, 197, 61, 107, 175, 165, 51, 197, 61, 200, 24, 175, 165,
-    51, 197, 61, 91, 175, 165, 51, 197, 61, 237, 231, 175, 165, 51, 197, 61,
-    173, 197, 89, 175, 165, 51, 197, 61, 173, 237, 69, 175, 165, 51, 197, 61,
-    205, 159, 237, 69, 175, 165, 51, 197, 61, 205, 159, 197, 89, 175, 165,
-    51, 197, 61, 107, 165, 51, 197, 61, 200, 24, 165, 51, 197, 61, 91, 165,
-    51, 197, 61, 237, 231, 165, 51, 197, 61, 173, 197, 89, 165, 51, 197, 61,
-    173, 237, 69, 165, 51, 197, 61, 205, 159, 237, 69, 165, 51, 197, 61, 205,
-    159, 197, 89, 165, 51, 197, 61, 107, 219, 190, 165, 51, 197, 61, 200, 24,
-    219, 190, 165, 51, 197, 61, 91, 219, 190, 165, 51, 197, 61, 237, 231,
-    219, 190, 165, 51, 197, 61, 173, 197, 89, 219, 190, 165, 51, 197, 61,
-    173, 237, 69, 219, 190, 165, 51, 197, 61, 205, 159, 237, 69, 219, 190,
-    165, 51, 197, 61, 205, 159, 197, 89, 219, 190, 165, 51, 197, 61, 107, 85,
-    165, 51, 197, 61, 200, 24, 85, 165, 51, 197, 61, 91, 85, 165, 51, 197,
-    61, 237, 231, 85, 165, 51, 197, 61, 173, 197, 89, 85, 165, 51, 197, 61,
-    173, 237, 69, 85, 165, 51, 197, 61, 205, 159, 237, 69, 85, 165, 51, 197,
-    61, 205, 159, 197, 89, 85, 165, 51, 197, 61, 107, 199, 48, 85, 165, 51,
-    197, 61, 200, 24, 199, 48, 85, 165, 51, 197, 61, 91, 199, 48, 85, 165,
-    51, 197, 61, 237, 231, 199, 48, 85, 165, 51, 197, 61, 173, 197, 89, 199,
-    48, 85, 165, 51, 197, 61, 173, 237, 69, 199, 48, 85, 165, 51, 197, 61,
-    205, 159, 237, 69, 199, 48, 85, 165, 51, 197, 61, 205, 159, 197, 89, 199,
-    48, 85, 165, 51, 107, 201, 181, 250, 217, 200, 24, 201, 181, 250, 217,
-    91, 201, 181, 250, 217, 237, 231, 201, 181, 250, 217, 107, 59, 61, 197,
-    39, 201, 181, 250, 217, 200, 24, 59, 61, 197, 39, 201, 181, 250, 217, 91,
-    59, 61, 197, 39, 201, 181, 250, 217, 237, 231, 59, 61, 197, 39, 201, 181,
-    250, 217, 107, 61, 3, 216, 15, 203, 135, 200, 24, 61, 3, 216, 15, 203,
-    135, 91, 61, 3, 216, 15, 203, 135, 237, 231, 61, 3, 216, 15, 203, 135,
-    85, 61, 207, 36, 197, 59, 100, 85, 61, 207, 36, 197, 59, 99, 202, 181,
-    85, 61, 207, 36, 197, 59, 97, 232, 225, 85, 61, 207, 36, 197, 59, 97,
-    202, 184, 107, 248, 82, 59, 51, 91, 248, 85, 207, 38, 59, 51, 107, 201,
-    243, 207, 38, 59, 51, 91, 201, 243, 207, 38, 59, 51, 107, 222, 178, 59,
-    51, 91, 210, 16, 59, 51, 107, 210, 16, 59, 51, 91, 222, 178, 59, 51, 107,
-    249, 137, 207, 37, 59, 51, 91, 249, 137, 207, 37, 59, 51, 107, 234, 232,
-    207, 37, 59, 51, 91, 234, 232, 207, 37, 59, 51, 59, 61, 207, 36, 197, 59,
-    100, 59, 61, 207, 36, 197, 59, 99, 202, 181, 46, 241, 62, 235, 21, 3,
-    235, 7, 238, 250, 46, 241, 62, 235, 21, 3, 99, 238, 250, 46, 241, 62,
-    235, 20, 50, 157, 244, 250, 3, 235, 7, 238, 250, 50, 157, 244, 250, 3,
-    115, 238, 250, 50, 157, 244, 250, 3, 99, 238, 250, 50, 157, 244, 250, 3,
-    238, 253, 50, 157, 244, 249, 237, 232, 235, 226, 122, 237, 232, 235, 226,
-    216, 15, 122, 237, 232, 235, 226, 231, 165, 3, 238, 253, 237, 232, 235,
-    226, 216, 15, 231, 165, 3, 238, 253, 59, 232, 126, 248, 30, 232, 126,
-    212, 174, 232, 209, 195, 20, 235, 233, 218, 213, 235, 233, 235, 234, 3,
-    202, 205, 217, 92, 235, 233, 202, 186, 235, 233, 235, 234, 3, 232, 136,
-    209, 220, 235, 233, 231, 66, 235, 233, 2, 77, 202, 218, 231, 101, 247,
-    153, 219, 208, 232, 209, 210, 215, 249, 139, 77, 232, 209, 222, 183, 235,
-    106, 210, 21, 235, 106, 232, 183, 232, 210, 3, 132, 26, 112, 235, 123,
-    241, 58, 230, 249, 221, 209, 195, 231, 232, 210, 55, 235, 234, 3, 241,
-    82, 232, 165, 244, 192, 235, 233, 217, 199, 235, 233, 209, 210, 214, 120,
-    202, 218, 235, 70, 222, 214, 237, 212, 235, 233, 221, 146, 235, 233, 235,
-    234, 213, 206, 205, 210, 235, 233, 235, 234, 3, 97, 236, 66, 210, 214,
-    233, 87, 235, 234, 3, 205, 8, 236, 59, 233, 87, 235, 234, 3, 97, 222,
-    228, 26, 97, 4, 236, 67, 235, 234, 3, 235, 128, 241, 85, 244, 203, 222,
-    59, 207, 82, 235, 234, 3, 203, 250, 241, 85, 218, 164, 205, 218, 235,
-    234, 3, 205, 218, 236, 60, 26, 232, 210, 241, 85, 218, 164, 235, 234, 3,
-    192, 218, 165, 198, 234, 206, 196, 235, 234, 3, 236, 82, 232, 137, 212,
-    30, 197, 21, 248, 50, 213, 205, 124, 202, 19, 207, 111, 212, 18, 220, 63,
-    226, 87, 200, 248, 218, 179, 245, 37, 206, 155, 213, 29, 239, 14, 247,
-    97, 225, 105, 235, 168, 218, 238, 213, 52, 196, 251, 197, 128, 212, 97,
-    232, 188, 239, 55, 220, 9, 197, 53, 235, 62, 237, 207, 3, 237, 205, 244,
-    210, 233, 156, 201, 20, 233, 157, 205, 107, 233, 142, 217, 88, 210, 23,
-    235, 113, 212, 149, 219, 196, 208, 136, 212, 149, 219, 196, 202, 185,
-    212, 149, 219, 196, 248, 69, 233, 151, 220, 19, 250, 206, 200, 53, 241,
-    19, 204, 228, 223, 67, 204, 238, 26, 249, 103, 205, 185, 235, 54, 239,
-    78, 241, 65, 250, 128, 241, 34, 249, 130, 212, 66, 247, 101, 249, 116,
-    248, 53, 233, 91, 208, 238, 207, 28, 213, 192, 77, 235, 39, 204, 177,
-    235, 81, 237, 45, 233, 158, 77, 219, 32, 213, 86, 224, 51, 213, 188, 237,
-    189, 235, 16, 241, 115, 203, 127, 248, 70, 245, 43, 248, 75, 3, 205, 107,
-    241, 28, 3, 204, 210, 244, 177, 248, 34, 212, 213, 212, 22, 241, 2, 77,
-    219, 199, 208, 214, 247, 129, 235, 39, 222, 191, 233, 90, 220, 54, 218,
-    190, 247, 160, 249, 119, 205, 218, 235, 234, 3, 205, 218, 236, 60, 26,
-    115, 232, 124, 196, 76, 235, 233, 235, 234, 3, 213, 129, 231, 103, 26,
-    213, 129, 232, 165, 235, 234, 3, 200, 57, 236, 60, 26, 197, 119, 218,
-    164, 214, 25, 235, 233, 234, 244, 235, 233, 235, 234, 3, 212, 136, 236,
-    59, 208, 202, 223, 76, 244, 179, 233, 138, 232, 42, 248, 97, 235, 83,
-    206, 194, 241, 79, 222, 63, 235, 233, 208, 158, 201, 8, 200, 55, 235,
-    233, 237, 79, 237, 197, 249, 56, 207, 14, 214, 15, 234, 255, 235, 233,
-    247, 229, 239, 234, 233, 124, 222, 42, 210, 76, 206, 157, 205, 88, 233,
-    170, 235, 233, 195, 86, 235, 233, 232, 119, 208, 187, 203, 215, 241, 68,
-    225, 12, 222, 34, 213, 88, 232, 34, 213, 135, 210, 239, 222, 5, 218, 181,
-    219, 68, 249, 125, 204, 65, 205, 230, 214, 42, 214, 70, 205, 253, 235,
-    85, 214, 5, 233, 60, 239, 17, 212, 7, 247, 131, 236, 236, 244, 149, 210,
-    158, 232, 233, 236, 236, 244, 149, 241, 18, 232, 233, 236, 236, 244, 149,
-    249, 105, 236, 236, 244, 149, 59, 232, 233, 248, 104, 222, 172, 235, 37,
-    201, 244, 204, 97, 204, 92, 209, 4, 199, 46, 237, 77, 3, 232, 128, 251,
-    199, 218, 175, 197, 75, 220, 46, 197, 75, 219, 198, 250, 231, 219, 198,
-    222, 172, 245, 94, 197, 100, 241, 26, 208, 234, 207, 32, 248, 202, 248,
-    70, 234, 80, 214, 108, 235, 215, 197, 155, 247, 230, 220, 3, 237, 216,
-    230, 202, 241, 36, 205, 10, 213, 28, 224, 23, 213, 28, 239, 250, 213, 28,
-    235, 234, 3, 218, 208, 251, 249, 245, 66, 214, 132, 251, 249, 249, 1,
-    213, 28, 213, 29, 3, 232, 132, 213, 29, 226, 87, 204, 245, 209, 202, 213,
-    29, 244, 212, 213, 29, 226, 87, 221, 214, 212, 78, 220, 92, 235, 217,
-    199, 141, 219, 152, 236, 250, 234, 31, 195, 9, 248, 60, 214, 71, 232,
-    126, 248, 167, 247, 125, 208, 171, 233, 150, 244, 179, 205, 188, 210,
-    158, 233, 182, 236, 194, 235, 117, 225, 166, 211, 188, 212, 212, 203, 3,
-    201, 30, 213, 13, 239, 75, 239, 30, 52, 232, 107, 244, 154, 252, 33, 235,
-    119, 236, 76, 201, 246, 248, 42, 220, 91, 221, 181, 221, 215, 248, 86,
-    205, 108, 77, 202, 156, 249, 104, 77, 196, 89, 209, 4, 212, 176, 203, 51,
-    249, 2, 248, 31, 249, 61, 209, 213, 77, 213, 161, 249, 80, 77, 205, 191,
-    205, 109, 210, 174, 217, 193, 251, 108, 217, 85, 245, 83, 224, 73, 217,
-    85, 245, 83, 211, 80, 217, 85, 245, 83, 209, 203, 217, 85, 245, 83, 248,
-    148, 217, 85, 245, 83, 224, 19, 217, 85, 245, 83, 213, 103, 59, 245, 83,
-    224, 20, 209, 194, 235, 13, 239, 230, 58, 245, 83, 224, 20, 209, 194,
-    235, 13, 239, 230, 217, 85, 245, 83, 224, 20, 209, 194, 235, 13, 239,
-    230, 59, 245, 83, 224, 74, 209, 194, 216, 175, 239, 230, 59, 245, 83,
-    211, 81, 209, 194, 216, 175, 239, 230, 59, 245, 83, 209, 204, 209, 194,
-    216, 175, 239, 230, 59, 245, 83, 248, 149, 209, 194, 216, 175, 239, 230,
-    59, 245, 83, 224, 20, 209, 194, 216, 175, 239, 230, 59, 245, 83, 213,
-    104, 209, 194, 216, 175, 239, 230, 58, 245, 83, 224, 74, 209, 194, 216,
-    175, 239, 230, 58, 245, 83, 211, 81, 209, 194, 216, 175, 239, 230, 58,
-    245, 83, 209, 204, 209, 194, 216, 175, 239, 230, 58, 245, 83, 248, 149,
-    209, 194, 216, 175, 239, 230, 58, 245, 83, 224, 20, 209, 194, 216, 175,
-    239, 230, 58, 245, 83, 213, 104, 209, 194, 216, 175, 239, 230, 217, 85,
-    245, 83, 224, 74, 209, 194, 216, 175, 239, 230, 217, 85, 245, 83, 211,
-    81, 209, 194, 216, 175, 239, 230, 217, 85, 245, 83, 209, 204, 209, 194,
-    216, 175, 239, 230, 217, 85, 245, 83, 248, 149, 209, 194, 216, 175, 239,
-    230, 217, 85, 245, 83, 224, 20, 209, 194, 216, 175, 239, 230, 217, 85,
-    245, 83, 213, 104, 209, 194, 216, 175, 239, 230, 59, 245, 83, 224, 20,
-    209, 194, 97, 231, 58, 202, 176, 239, 230, 58, 245, 83, 224, 20, 209,
-    194, 97, 231, 58, 202, 176, 239, 230, 217, 85, 245, 83, 224, 20, 209,
-    194, 97, 231, 58, 202, 176, 239, 230, 59, 245, 83, 163, 224, 73, 59, 245,
-    83, 163, 211, 80, 59, 245, 83, 163, 209, 203, 59, 245, 83, 163, 248, 148,
-    59, 245, 83, 163, 224, 19, 59, 245, 83, 163, 213, 103, 58, 245, 83, 163,
-    224, 73, 58, 245, 83, 163, 211, 80, 58, 245, 83, 163, 209, 203, 58, 245,
-    83, 163, 248, 148, 58, 245, 83, 163, 224, 19, 58, 245, 83, 163, 213, 103,
-    217, 85, 245, 83, 163, 224, 73, 217, 85, 245, 83, 163, 211, 80, 217, 85,
-    245, 83, 163, 209, 203, 217, 85, 245, 83, 163, 248, 148, 217, 85, 245,
-    83, 163, 224, 19, 217, 85, 245, 83, 163, 213, 103, 59, 245, 83, 224, 20,
-    209, 194, 99, 231, 58, 200, 231, 239, 230, 58, 245, 83, 224, 20, 209,
-    194, 99, 231, 58, 200, 231, 239, 230, 217, 85, 245, 83, 224, 20, 209,
-    194, 99, 231, 58, 200, 231, 239, 230, 59, 245, 83, 224, 74, 209, 194, 99,
-    231, 58, 207, 66, 239, 230, 59, 245, 83, 211, 81, 209, 194, 99, 231, 58,
-    207, 66, 239, 230, 59, 245, 83, 209, 204, 209, 194, 99, 231, 58, 207, 66,
-    239, 230, 59, 245, 83, 248, 149, 209, 194, 99, 231, 58, 207, 66, 239,
-    230, 59, 245, 83, 224, 20, 209, 194, 99, 231, 58, 207, 66, 239, 230, 59,
-    245, 83, 213, 104, 209, 194, 99, 231, 58, 207, 66, 239, 230, 58, 245, 83,
-    224, 74, 209, 194, 99, 231, 58, 207, 66, 239, 230, 58, 245, 83, 211, 81,
-    209, 194, 99, 231, 58, 207, 66, 239, 230, 58, 245, 83, 209, 204, 209,
-    194, 99, 231, 58, 207, 66, 239, 230, 58, 245, 83, 248, 149, 209, 194, 99,
-    231, 58, 207, 66, 239, 230, 58, 245, 83, 224, 20, 209, 194, 99, 231, 58,
-    207, 66, 239, 230, 58, 245, 83, 213, 104, 209, 194, 99, 231, 58, 207, 66,
-    239, 230, 217, 85, 245, 83, 224, 74, 209, 194, 99, 231, 58, 207, 66, 239,
-    230, 217, 85, 245, 83, 211, 81, 209, 194, 99, 231, 58, 207, 66, 239, 230,
-    217, 85, 245, 83, 209, 204, 209, 194, 99, 231, 58, 207, 66, 239, 230,
-    217, 85, 245, 83, 248, 149, 209, 194, 99, 231, 58, 207, 66, 239, 230,
-    217, 85, 245, 83, 224, 20, 209, 194, 99, 231, 58, 207, 66, 239, 230, 217,
-    85, 245, 83, 213, 104, 209, 194, 99, 231, 58, 207, 66, 239, 230, 59, 245,
-    83, 224, 20, 209, 194, 115, 231, 58, 235, 150, 239, 230, 58, 245, 83,
-    224, 20, 209, 194, 115, 231, 58, 235, 150, 239, 230, 217, 85, 245, 83,
-    224, 20, 209, 194, 115, 231, 58, 235, 150, 239, 230, 59, 245, 83, 236,
-    167, 58, 245, 83, 236, 167, 217, 85, 245, 83, 236, 167, 59, 245, 83, 236,
-    168, 209, 194, 216, 175, 239, 230, 58, 245, 83, 236, 168, 209, 194, 216,
-    175, 239, 230, 217, 85, 245, 83, 236, 168, 209, 194, 216, 175, 239, 230,
-    59, 245, 83, 224, 17, 59, 245, 83, 224, 16, 59, 245, 83, 224, 18, 58,
-    245, 83, 224, 17, 58, 245, 83, 224, 16, 58, 245, 83, 224, 18, 196, 194,
-    210, 158, 234, 33, 196, 194, 210, 158, 220, 56, 196, 194, 210, 158, 236,
-    255, 196, 194, 210, 158, 231, 98, 196, 194, 210, 158, 245, 112, 196, 194,
-    210, 158, 247, 128, 196, 194, 210, 158, 205, 180, 196, 194, 58, 234, 33,
-    196, 194, 58, 220, 56, 196, 194, 58, 236, 255, 196, 194, 58, 231, 98,
-    196, 194, 58, 245, 112, 196, 194, 58, 247, 128, 196, 194, 58, 205, 180,
-    249, 102, 206, 193, 214, 113, 204, 52, 248, 38, 206, 167, 237, 211, 77,
-    248, 124, 251, 255, 249, 88, 204, 239, 195, 244, 224, 54, 213, 155, 210,
-    1, 212, 141, 247, 11, 210, 187, 250, 123, 239, 50, 222, 239, 249, 86, 12,
-    15, 230, 190, 12, 15, 230, 189, 12, 15, 230, 188, 12, 15, 230, 187, 12,
-    15, 230, 186, 12, 15, 230, 185, 12, 15, 230, 184, 12, 15, 230, 183, 12,
-    15, 230, 182, 12, 15, 230, 181, 12, 15, 230, 180, 12, 15, 230, 179, 12,
-    15, 230, 178, 12, 15, 230, 177, 12, 15, 230, 176, 12, 15, 230, 175, 12,
-    15, 230, 174, 12, 15, 230, 173, 12, 15, 230, 172, 12, 15, 230, 171, 12,
-    15, 230, 170, 12, 15, 230, 169, 12, 15, 230, 168, 12, 15, 230, 167, 12,
-    15, 230, 166, 12, 15, 230, 165, 12, 15, 230, 164, 12, 15, 230, 163, 12,
-    15, 230, 162, 12, 15, 230, 161, 12, 15, 230, 160, 12, 15, 230, 159, 12,
-    15, 230, 158, 12, 15, 230, 157, 12, 15, 230, 156, 12, 15, 230, 155, 12,
-    15, 230, 154, 12, 15, 230, 153, 12, 15, 230, 152, 12, 15, 230, 151, 12,
-    15, 230, 150, 12, 15, 230, 149, 12, 15, 230, 148, 12, 15, 230, 147, 12,
-    15, 230, 146, 12, 15, 230, 145, 12, 15, 230, 144, 12, 15, 230, 143, 12,
-    15, 230, 142, 12, 15, 230, 141, 12, 15, 230, 140, 12, 15, 230, 139, 12,
-    15, 230, 138, 12, 15, 230, 137, 12, 15, 230, 136, 12, 15, 230, 135, 12,
-    15, 230, 134, 12, 15, 230, 133, 12, 15, 230, 132, 12, 15, 230, 131, 12,
-    15, 230, 130, 12, 15, 230, 129, 12, 15, 230, 128, 12, 15, 230, 127, 12,
-    15, 230, 126, 12, 15, 230, 125, 12, 15, 230, 124, 12, 15, 230, 123, 12,
-    15, 230, 122, 12, 15, 230, 121, 12, 15, 230, 120, 12, 15, 230, 119, 12,
-    15, 230, 118, 12, 15, 230, 117, 12, 15, 230, 116, 12, 15, 230, 115, 12,
-    15, 230, 114, 12, 15, 230, 113, 12, 15, 230, 112, 12, 15, 230, 111, 12,
-    15, 230, 110, 12, 15, 230, 109, 12, 15, 230, 108, 12, 15, 230, 107, 12,
-    15, 230, 106, 12, 15, 230, 105, 12, 15, 230, 104, 12, 15, 230, 103, 12,
-    15, 230, 102, 12, 15, 230, 101, 12, 15, 230, 100, 12, 15, 230, 99, 12,
-    15, 230, 98, 12, 15, 230, 97, 12, 15, 230, 96, 12, 15, 230, 95, 12, 15,
-    230, 94, 12, 15, 230, 93, 12, 15, 230, 92, 12, 15, 230, 91, 12, 15, 230,
-    90, 12, 15, 230, 89, 12, 15, 230, 88, 12, 15, 230, 87, 12, 15, 230, 86,
-    12, 15, 230, 85, 12, 15, 230, 84, 12, 15, 230, 83, 12, 15, 230, 82, 12,
-    15, 230, 81, 12, 15, 230, 80, 12, 15, 230, 79, 12, 15, 230, 78, 12, 15,
-    230, 77, 12, 15, 230, 76, 12, 15, 230, 75, 12, 15, 230, 74, 12, 15, 230,
-    73, 12, 15, 230, 72, 12, 15, 230, 71, 12, 15, 230, 70, 12, 15, 230, 69,
-    12, 15, 230, 68, 12, 15, 230, 67, 12, 15, 230, 66, 12, 15, 230, 65, 12,
-    15, 230, 64, 12, 15, 230, 63, 12, 15, 230, 62, 12, 15, 230, 61, 12, 15,
-    230, 60, 12, 15, 230, 59, 12, 15, 230, 58, 12, 15, 230, 57, 12, 15, 230,
-    56, 12, 15, 230, 55, 12, 15, 230, 54, 12, 15, 230, 53, 12, 15, 230, 52,
-    12, 15, 230, 51, 12, 15, 230, 50, 12, 15, 230, 49, 12, 15, 230, 48, 12,
-    15, 230, 47, 12, 15, 230, 46, 12, 15, 230, 45, 12, 15, 230, 44, 12, 15,
-    230, 43, 12, 15, 230, 42, 12, 15, 230, 41, 12, 15, 230, 40, 12, 15, 230,
-    39, 12, 15, 230, 38, 12, 15, 230, 37, 12, 15, 230, 36, 12, 15, 230, 35,
-    12, 15, 230, 34, 12, 15, 230, 33, 12, 15, 230, 32, 12, 15, 230, 31, 12,
-    15, 230, 30, 12, 15, 230, 29, 12, 15, 230, 28, 12, 15, 230, 27, 12, 15,
-    230, 26, 12, 15, 230, 25, 12, 15, 230, 24, 12, 15, 230, 23, 12, 15, 230,
-    22, 12, 15, 230, 21, 12, 15, 230, 20, 12, 15, 230, 19, 12, 15, 230, 18,
-    12, 15, 230, 17, 12, 15, 230, 16, 12, 15, 230, 15, 12, 15, 230, 14, 12,
-    15, 230, 13, 12, 15, 230, 12, 12, 15, 230, 11, 12, 15, 230, 10, 12, 15,
-    230, 9, 12, 15, 230, 8, 12, 15, 230, 7, 12, 15, 230, 6, 12, 15, 230, 5,
-    12, 15, 230, 4, 12, 15, 230, 3, 12, 15, 230, 2, 12, 15, 230, 1, 12, 15,
-    230, 0, 12, 15, 229, 255, 12, 15, 229, 254, 12, 15, 229, 253, 12, 15,
-    229, 252, 12, 15, 229, 251, 12, 15, 229, 250, 12, 15, 229, 249, 12, 15,
-    229, 248, 12, 15, 229, 247, 12, 15, 229, 246, 12, 15, 229, 245, 12, 15,
-    229, 244, 12, 15, 229, 243, 12, 15, 229, 242, 12, 15, 229, 241, 12, 15,
-    229, 240, 12, 15, 229, 239, 12, 15, 229, 238, 12, 15, 229, 237, 12, 15,
-    229, 236, 12, 15, 229, 235, 12, 15, 229, 234, 12, 15, 229, 233, 12, 15,
-    229, 232, 12, 15, 229, 231, 12, 15, 229, 230, 12, 15, 229, 229, 12, 15,
-    229, 228, 12, 15, 229, 227, 12, 15, 229, 226, 12, 15, 229, 225, 12, 15,
-    229, 224, 12, 15, 229, 223, 12, 15, 229, 222, 12, 15, 229, 221, 12, 15,
-    229, 220, 12, 15, 229, 219, 12, 15, 229, 218, 12, 15, 229, 217, 12, 15,
-    229, 216, 12, 15, 229, 215, 12, 15, 229, 214, 12, 15, 229, 213, 12, 15,
-    229, 212, 12, 15, 229, 211, 12, 15, 229, 210, 12, 15, 229, 209, 12, 15,
-    229, 208, 12, 15, 229, 207, 12, 15, 229, 206, 12, 15, 229, 205, 12, 15,
-    229, 204, 12, 15, 229, 203, 12, 15, 229, 202, 12, 15, 229, 201, 12, 15,
-    229, 200, 12, 15, 229, 199, 12, 15, 229, 198, 12, 15, 229, 197, 12, 15,
-    229, 196, 12, 15, 229, 195, 12, 15, 229, 194, 12, 15, 229, 193, 12, 15,
-    229, 192, 12, 15, 229, 191, 12, 15, 229, 190, 12, 15, 229, 189, 12, 15,
-    229, 188, 12, 15, 229, 187, 12, 15, 229, 186, 12, 15, 229, 185, 12, 15,
-    229, 184, 12, 15, 229, 183, 12, 15, 229, 182, 12, 15, 229, 181, 12, 15,
-    229, 180, 12, 15, 229, 179, 12, 15, 229, 178, 12, 15, 229, 177, 12, 15,
-    229, 176, 12, 15, 229, 175, 12, 15, 229, 174, 12, 15, 229, 173, 12, 15,
-    229, 172, 12, 15, 229, 171, 12, 15, 229, 170, 12, 15, 229, 169, 12, 15,
-    229, 168, 12, 15, 229, 167, 12, 15, 229, 166, 12, 15, 229, 165, 12, 15,
-    229, 164, 12, 15, 229, 163, 12, 15, 229, 162, 12, 15, 229, 161, 12, 15,
-    229, 160, 12, 15, 229, 159, 12, 15, 229, 158, 12, 15, 229, 157, 12, 15,
-    229, 156, 12, 15, 229, 155, 12, 15, 229, 154, 12, 15, 229, 153, 12, 15,
-    229, 152, 12, 15, 229, 151, 12, 15, 229, 150, 12, 15, 229, 149, 12, 15,
-    229, 148, 12, 15, 229, 147, 12, 15, 229, 146, 12, 15, 229, 145, 12, 15,
-    229, 144, 12, 15, 229, 143, 12, 15, 229, 142, 12, 15, 229, 141, 12, 15,
-    229, 140, 12, 15, 229, 139, 12, 15, 229, 138, 12, 15, 229, 137, 12, 15,
-    229, 136, 12, 15, 229, 135, 12, 15, 229, 134, 12, 15, 229, 133, 12, 15,
-    229, 132, 12, 15, 229, 131, 12, 15, 229, 130, 12, 15, 229, 129, 12, 15,
-    229, 128, 12, 15, 229, 127, 12, 15, 229, 126, 12, 15, 229, 125, 12, 15,
-    229, 124, 12, 15, 229, 123, 12, 15, 229, 122, 12, 15, 229, 121, 12, 15,
-    229, 120, 12, 15, 229, 119, 12, 15, 229, 118, 12, 15, 229, 117, 12, 15,
-    229, 116, 12, 15, 229, 115, 12, 15, 229, 114, 12, 15, 229, 113, 12, 15,
-    229, 112, 12, 15, 229, 111, 12, 15, 229, 110, 12, 15, 229, 109, 12, 15,
-    229, 108, 12, 15, 229, 107, 12, 15, 229, 106, 12, 15, 229, 105, 12, 15,
-    229, 104, 12, 15, 229, 103, 12, 15, 229, 102, 12, 15, 229, 101, 12, 15,
-    229, 100, 12, 15, 229, 99, 12, 15, 229, 98, 12, 15, 229, 97, 12, 15, 229,
-    96, 12, 15, 229, 95, 12, 15, 229, 94, 12, 15, 229, 93, 12, 15, 229, 92,
-    12, 15, 229, 91, 12, 15, 229, 90, 12, 15, 229, 89, 12, 15, 229, 88, 12,
-    15, 229, 87, 12, 15, 229, 86, 12, 15, 229, 85, 12, 15, 229, 84, 12, 15,
-    229, 83, 12, 15, 229, 82, 12, 15, 229, 81, 12, 15, 229, 80, 12, 15, 229,
-    79, 12, 15, 229, 78, 12, 15, 229, 77, 12, 15, 229, 76, 12, 15, 229, 75,
-    12, 15, 229, 74, 12, 15, 229, 73, 12, 15, 229, 72, 12, 15, 229, 71, 12,
-    15, 229, 70, 12, 15, 229, 69, 12, 15, 229, 68, 12, 15, 229, 67, 12, 15,
-    229, 66, 12, 15, 229, 65, 12, 15, 229, 64, 12, 15, 229, 63, 12, 15, 229,
-    62, 12, 15, 229, 61, 12, 15, 229, 60, 12, 15, 229, 59, 12, 15, 229, 58,
-    12, 15, 229, 57, 12, 15, 229, 56, 12, 15, 229, 55, 12, 15, 229, 54, 12,
-    15, 229, 53, 12, 15, 229, 52, 12, 15, 229, 51, 12, 15, 229, 50, 12, 15,
-    229, 49, 12, 15, 229, 48, 12, 15, 229, 47, 12, 15, 229, 46, 12, 15, 229,
-    45, 12, 15, 229, 44, 12, 15, 229, 43, 12, 15, 229, 42, 12, 15, 229, 41,
-    12, 15, 229, 40, 12, 15, 229, 39, 12, 15, 229, 38, 12, 15, 229, 37, 12,
-    15, 229, 36, 12, 15, 229, 35, 12, 15, 229, 34, 12, 15, 229, 33, 12, 15,
-    229, 32, 12, 15, 229, 31, 12, 15, 229, 30, 12, 15, 229, 29, 12, 15, 229,
-    28, 12, 15, 229, 27, 12, 15, 229, 26, 12, 15, 229, 25, 12, 15, 229, 24,
-    12, 15, 229, 23, 12, 15, 229, 22, 12, 15, 229, 21, 12, 15, 229, 20, 12,
-    15, 229, 19, 12, 15, 229, 18, 12, 15, 229, 17, 12, 15, 229, 16, 12, 15,
-    229, 15, 12, 15, 229, 14, 12, 15, 229, 13, 12, 15, 229, 12, 12, 15, 229,
-    11, 12, 15, 229, 10, 12, 15, 229, 9, 12, 15, 229, 8, 12, 15, 229, 7, 12,
-    15, 229, 6, 12, 15, 229, 5, 12, 15, 229, 4, 12, 15, 229, 3, 12, 15, 229,
-    2, 12, 15, 229, 1, 12, 15, 229, 0, 12, 15, 228, 255, 12, 15, 228, 254,
-    12, 15, 228, 253, 12, 15, 228, 252, 12, 15, 228, 251, 12, 15, 228, 250,
-    12, 15, 228, 249, 12, 15, 228, 248, 12, 15, 228, 247, 12, 15, 228, 246,
-    12, 15, 228, 245, 12, 15, 228, 244, 12, 15, 228, 243, 12, 15, 228, 242,
-    12, 15, 228, 241, 12, 15, 228, 240, 12, 15, 228, 239, 12, 15, 228, 238,
-    12, 15, 228, 237, 12, 15, 228, 236, 12, 15, 228, 235, 12, 15, 228, 234,
-    12, 15, 228, 233, 12, 15, 228, 232, 12, 15, 228, 231, 12, 15, 228, 230,
-    12, 15, 228, 229, 12, 15, 228, 228, 12, 15, 228, 227, 12, 15, 228, 226,
-    12, 15, 228, 225, 12, 15, 228, 224, 12, 15, 228, 223, 12, 15, 228, 222,
-    12, 15, 228, 221, 12, 15, 228, 220, 12, 15, 228, 219, 12, 15, 228, 218,
-    12, 15, 228, 217, 12, 15, 228, 216, 12, 15, 228, 215, 12, 15, 228, 214,
-    12, 15, 228, 213, 12, 15, 228, 212, 12, 15, 228, 211, 12, 15, 228, 210,
-    12, 15, 228, 209, 12, 15, 228, 208, 12, 15, 228, 207, 12, 15, 228, 206,
-    12, 15, 228, 205, 12, 15, 228, 204, 12, 15, 228, 203, 12, 15, 228, 202,
-    12, 15, 228, 201, 12, 15, 228, 200, 12, 15, 228, 199, 12, 15, 228, 198,
-    12, 15, 228, 197, 12, 15, 228, 196, 12, 15, 228, 195, 12, 15, 228, 194,
-    12, 15, 228, 193, 12, 15, 228, 192, 12, 15, 228, 191, 12, 15, 228, 190,
-    12, 15, 228, 189, 12, 15, 228, 188, 12, 15, 228, 187, 12, 15, 228, 186,
-    12, 15, 228, 185, 12, 15, 228, 184, 12, 15, 228, 183, 12, 15, 228, 182,
-    12, 15, 228, 181, 12, 15, 228, 180, 12, 15, 228, 179, 12, 15, 228, 178,
-    12, 15, 228, 177, 12, 15, 228, 176, 12, 15, 228, 175, 12, 15, 228, 174,
-    12, 15, 228, 173, 12, 15, 228, 172, 12, 15, 228, 171, 12, 15, 228, 170,
-    12, 15, 228, 169, 12, 15, 228, 168, 12, 15, 228, 167, 12, 15, 228, 166,
-    12, 15, 228, 165, 12, 15, 228, 164, 12, 15, 228, 163, 12, 15, 228, 162,
-    12, 15, 228, 161, 222, 234, 203, 143, 184, 205, 148, 184, 236, 90, 78,
-    184, 211, 62, 78, 184, 31, 55, 184, 239, 10, 55, 184, 213, 45, 55, 184,
-    251, 111, 184, 251, 30, 184, 50, 213, 140, 184, 53, 213, 140, 184, 250,
-    179, 184, 98, 55, 184, 244, 159, 184, 231, 6, 184, 234, 217, 204, 226,
-    184, 205, 177, 184, 17, 195, 79, 184, 17, 100, 184, 17, 102, 184, 17,
-    134, 184, 17, 136, 184, 17, 146, 184, 17, 167, 184, 17, 178, 184, 17,
-    171, 184, 17, 182, 184, 244, 168, 184, 207, 105, 184, 222, 140, 55, 184,
-    236, 172, 55, 184, 233, 94, 55, 184, 211, 79, 78, 184, 244, 157, 250,
-    168, 184, 8, 6, 1, 63, 184, 8, 6, 1, 250, 112, 184, 8, 6, 1, 247, 207,
-    184, 8, 6, 1, 240, 231, 184, 8, 6, 1, 69, 184, 8, 6, 1, 236, 49, 184, 8,
-    6, 1, 234, 190, 184, 8, 6, 1, 233, 15, 184, 8, 6, 1, 68, 184, 8, 6, 1,
-    225, 217, 184, 8, 6, 1, 225, 80, 184, 8, 6, 1, 159, 184, 8, 6, 1, 221,
-    136, 184, 8, 6, 1, 218, 55, 184, 8, 6, 1, 72, 184, 8, 6, 1, 214, 3, 184,
-    8, 6, 1, 211, 167, 184, 8, 6, 1, 144, 184, 8, 6, 1, 209, 80, 184, 8, 6,
-    1, 203, 216, 184, 8, 6, 1, 66, 184, 8, 6, 1, 199, 230, 184, 8, 6, 1, 197,
-    199, 184, 8, 6, 1, 196, 222, 184, 8, 6, 1, 196, 148, 184, 8, 6, 1, 195,
-    158, 184, 50, 47, 179, 184, 210, 90, 205, 177, 184, 53, 47, 179, 184,
-    244, 241, 252, 22, 184, 126, 222, 75, 184, 233, 101, 252, 22, 184, 8, 4,
-    1, 63, 184, 8, 4, 1, 250, 112, 184, 8, 4, 1, 247, 207, 184, 8, 4, 1, 240,
-    231, 184, 8, 4, 1, 69, 184, 8, 4, 1, 236, 49, 184, 8, 4, 1, 234, 190,
-    184, 8, 4, 1, 233, 15, 184, 8, 4, 1, 68, 184, 8, 4, 1, 225, 217, 184, 8,
-    4, 1, 225, 80, 184, 8, 4, 1, 159, 184, 8, 4, 1, 221, 136, 184, 8, 4, 1,
-    218, 55, 184, 8, 4, 1, 72, 184, 8, 4, 1, 214, 3, 184, 8, 4, 1, 211, 167,
-    184, 8, 4, 1, 144, 184, 8, 4, 1, 209, 80, 184, 8, 4, 1, 203, 216, 184, 8,
-    4, 1, 66, 184, 8, 4, 1, 199, 230, 184, 8, 4, 1, 197, 199, 184, 8, 4, 1,
-    196, 222, 184, 8, 4, 1, 196, 148, 184, 8, 4, 1, 195, 158, 184, 50, 241,
-    18, 179, 184, 83, 222, 75, 184, 53, 241, 18, 179, 184, 202, 84, 247, 141,
-    203, 143, 62, 208, 35, 62, 208, 24, 62, 208, 13, 62, 208, 1, 62, 207,
-    246, 62, 207, 235, 62, 207, 224, 62, 207, 213, 62, 207, 202, 62, 207,
-    194, 62, 207, 193, 62, 207, 192, 62, 207, 191, 62, 207, 189, 62, 207,
-    188, 62, 207, 187, 62, 207, 186, 62, 207, 185, 62, 207, 184, 62, 207,
-    183, 62, 207, 182, 62, 207, 181, 62, 207, 180, 62, 207, 178, 62, 207,
-    177, 62, 207, 176, 62, 207, 175, 62, 207, 174, 62, 207, 173, 62, 207,
-    172, 62, 207, 171, 62, 207, 170, 62, 207, 169, 62, 207, 167, 62, 207,
-    166, 62, 207, 165, 62, 207, 164, 62, 207, 163, 62, 207, 162, 62, 207,
-    161, 62, 207, 160, 62, 207, 159, 62, 207, 158, 62, 207, 156, 62, 207,
-    155, 62, 207, 154, 62, 207, 153, 62, 207, 152, 62, 207, 151, 62, 207,
-    150, 62, 207, 149, 62, 207, 148, 62, 207, 147, 62, 207, 145, 62, 207,
-    144, 62, 207, 143, 62, 207, 142, 62, 207, 141, 62, 207, 140, 62, 207,
-    139, 62, 207, 138, 62, 207, 137, 62, 207, 136, 62, 207, 134, 62, 207,
-    133, 62, 207, 132, 62, 207, 131, 62, 207, 130, 62, 207, 129, 62, 207,
-    128, 62, 207, 127, 62, 207, 126, 62, 207, 125, 62, 207, 123, 62, 207,
-    122, 62, 207, 121, 62, 207, 120, 62, 207, 119, 62, 207, 118, 62, 207,
-    117, 62, 207, 116, 62, 207, 115, 62, 207, 114, 62, 208, 111, 62, 208,
-    110, 62, 208, 109, 62, 208, 108, 62, 208, 107, 62, 208, 106, 62, 208,
-    105, 62, 208, 104, 62, 208, 103, 62, 208, 102, 62, 208, 100, 62, 208, 99,
-    62, 208, 98, 62, 208, 97, 62, 208, 96, 62, 208, 95, 62, 208, 94, 62, 208,
-    93, 62, 208, 92, 62, 208, 91, 62, 208, 89, 62, 208, 88, 62, 208, 87, 62,
-    208, 86, 62, 208, 85, 62, 208, 84, 62, 208, 83, 62, 208, 82, 62, 208, 81,
-    62, 208, 80, 62, 208, 78, 62, 208, 77, 62, 208, 76, 62, 208, 75, 62, 208,
-    74, 62, 208, 73, 62, 208, 72, 62, 208, 71, 62, 208, 70, 62, 208, 69, 62,
-    208, 67, 62, 208, 66, 62, 208, 65, 62, 208, 64, 62, 208, 63, 62, 208, 62,
-    62, 208, 61, 62, 208, 60, 62, 208, 59, 62, 208, 58, 62, 208, 56, 62, 208,
-    55, 62, 208, 54, 62, 208, 53, 62, 208, 52, 62, 208, 51, 62, 208, 50, 62,
-    208, 49, 62, 208, 48, 62, 208, 47, 62, 208, 45, 62, 208, 44, 62, 208, 43,
-    62, 208, 42, 62, 208, 41, 62, 208, 40, 62, 208, 39, 62, 208, 38, 62, 208,
-    37, 62, 208, 36, 62, 208, 34, 62, 208, 33, 62, 208, 32, 62, 208, 31, 62,
-    208, 30, 62, 208, 29, 62, 208, 28, 62, 208, 27, 62, 208, 26, 62, 208, 25,
-    62, 208, 23, 62, 208, 22, 62, 208, 21, 62, 208, 20, 62, 208, 19, 62, 208,
-    18, 62, 208, 17, 62, 208, 16, 62, 208, 15, 62, 208, 14, 62, 208, 12, 62,
-    208, 11, 62, 208, 10, 62, 208, 9, 62, 208, 8, 62, 208, 7, 62, 208, 6, 62,
-    208, 5, 62, 208, 4, 62, 208, 3, 62, 208, 0, 62, 207, 255, 62, 207, 254,
-    62, 207, 253, 62, 207, 252, 62, 207, 251, 62, 207, 250, 62, 207, 249, 62,
-    207, 248, 62, 207, 247, 62, 207, 245, 62, 207, 244, 62, 207, 243, 62,
-    207, 242, 62, 207, 241, 62, 207, 240, 62, 207, 239, 62, 207, 238, 62,
-    207, 237, 62, 207, 236, 62, 207, 234, 62, 207, 233, 62, 207, 232, 62,
-    207, 231, 62, 207, 230, 62, 207, 229, 62, 207, 228, 62, 207, 227, 62,
-    207, 226, 62, 207, 225, 62, 207, 223, 62, 207, 222, 62, 207, 221, 62,
-    207, 220, 62, 207, 219, 62, 207, 218, 62, 207, 217, 62, 207, 216, 62,
-    207, 215, 62, 207, 214, 62, 207, 212, 62, 207, 211, 62, 207, 210, 62,
-    207, 209, 62, 207, 208, 62, 207, 207, 62, 207, 206, 62, 207, 205, 62,
-    207, 204, 62, 207, 203, 62, 207, 201, 62, 207, 200, 62, 207, 199, 62,
-    207, 198, 62, 207, 197, 62, 207, 196, 62, 207, 195, 215, 146, 215, 148,
-    205, 3, 77, 232, 134, 205, 181, 205, 3, 77, 202, 237, 204, 174, 236, 222,
-    77, 202, 237, 236, 118, 236, 222, 77, 201, 202, 236, 184, 236, 208, 236,
-    209, 252, 14, 252, 15, 251, 161, 248, 232, 249, 132, 248, 27, 190, 203,
-    149, 231, 155, 203, 149, 231, 80, 203, 154, 222, 76, 235, 180, 217, 83,
-    222, 75, 236, 222, 77, 222, 75, 222, 124, 216, 112, 236, 187, 222, 76,
-    203, 149, 83, 203, 149, 197, 222, 235, 24, 235, 180, 235, 157, 247, 102,
-    210, 93, 241, 80, 206, 219, 214, 34, 221, 253, 100, 205, 200, 206, 219,
-    226, 86, 221, 253, 195, 79, 206, 112, 240, 60, 222, 66, 236, 143, 239,
-    39, 239, 183, 241, 121, 100, 240, 49, 239, 183, 241, 121, 102, 240, 48,
-    239, 183, 241, 121, 134, 240, 47, 239, 183, 241, 121, 136, 240, 46, 217,
-    104, 252, 14, 217, 227, 203, 242, 226, 149, 203, 246, 236, 222, 77, 201,
-    203, 248, 126, 236, 125, 247, 140, 247, 142, 236, 222, 77, 219, 189, 236,
-    185, 204, 139, 204, 157, 236, 143, 236, 144, 226, 61, 207, 91, 136, 235,
-    138, 207, 90, 234, 227, 226, 61, 207, 91, 134, 233, 84, 207, 90, 233, 81,
-    226, 61, 207, 91, 102, 210, 169, 207, 90, 209, 146, 226, 61, 207, 91,
-    100, 200, 50, 207, 90, 200, 4, 205, 151, 239, 222, 239, 224, 213, 231,
-    246, 255, 213, 233, 130, 214, 171, 212, 24, 231, 158, 248, 52, 213, 35,
-    232, 95, 248, 66, 216, 51, 248, 52, 232, 95, 217, 188, 226, 72, 226, 74,
-    217, 76, 222, 75, 217, 102, 205, 3, 77, 208, 116, 250, 245, 205, 80, 236,
-    222, 77, 208, 116, 250, 245, 236, 146, 190, 203, 150, 207, 76, 231, 155,
-    203, 150, 207, 76, 231, 77, 190, 203, 150, 3, 225, 92, 231, 155, 203,
-    150, 3, 225, 92, 231, 78, 222, 76, 203, 150, 207, 76, 83, 203, 150, 207,
-    76, 197, 221, 213, 132, 222, 76, 235, 11, 213, 132, 222, 76, 237, 235,
-    212, 137, 213, 132, 222, 76, 249, 131, 213, 132, 222, 76, 200, 36, 212,
-    131, 210, 90, 222, 76, 235, 180, 210, 90, 226, 72, 210, 72, 206, 62, 206,
-    219, 102, 206, 59, 205, 82, 206, 62, 206, 219, 134, 206, 58, 205, 81,
-    239, 183, 241, 121, 204, 198, 240, 44, 212, 9, 200, 3, 100, 212, 9, 200,
-    1, 211, 226, 212, 9, 200, 3, 102, 212, 9, 200, 0, 211, 225, 207, 77, 201,
-    201, 205, 0, 204, 181, 247, 141, 246, 255, 247, 76, 219, 147, 197, 152,
-    218, 73, 205, 3, 77, 233, 69, 250, 245, 205, 3, 77, 211, 244, 250, 245,
-    205, 150, 236, 222, 77, 233, 69, 250, 245, 236, 222, 77, 211, 244, 250,
-    245, 236, 182, 205, 3, 77, 204, 198, 205, 166, 206, 62, 233, 106, 190,
-    226, 20, 207, 55, 206, 62, 190, 226, 20, 208, 162, 241, 121, 207, 87,
-    226, 20, 241, 42, 204, 199, 203, 8, 205, 23, 214, 84, 203, 231, 244, 158,
-    214, 51, 212, 10, 219, 146, 212, 120, 251, 26, 212, 3, 244, 158, 251, 43,
-    217, 176, 206, 121, 8, 6, 1, 233, 230, 8, 4, 1, 233, 230, 247, 19, 251,
-    140, 203, 236, 204, 145, 244, 169, 206, 4, 222, 184, 225, 11, 1, 222, 26,
-    222, 232, 1, 235, 52, 235, 43, 222, 232, 1, 235, 52, 235, 192, 222, 232,
-    1, 209, 232, 222, 232, 1, 222, 7, 82, 117, 248, 138, 206, 192, 233, 193,
-    219, 96, 210, 80, 29, 116, 196, 43, 29, 116, 196, 39, 29, 116, 205, 58,
-    29, 116, 196, 44, 234, 204, 234, 203, 234, 202, 218, 75, 194, 236, 194,
-    237, 194, 239, 221, 195, 209, 240, 221, 197, 209, 242, 213, 95, 221, 194,
-    209, 239, 216, 82, 218, 255, 197, 36, 221, 196, 209, 241, 234, 226, 213,
-    94, 197, 95, 236, 246, 234, 214, 219, 70, 214, 120, 200, 5, 105, 219, 70,
-    240, 66, 105, 107, 201, 179, 61, 3, 52, 83, 106, 91, 201, 179, 61, 3, 52,
-    83, 106, 11, 5, 225, 232, 78, 198, 222, 198, 111, 198, 43, 198, 32, 198,
-    21, 198, 10, 197, 255, 197, 244, 197, 233, 198, 221, 198, 210, 198, 199,
-    198, 188, 198, 177, 198, 166, 198, 155, 212, 25, 235, 24, 36, 83, 53, 59,
-    222, 147, 179, 247, 212, 214, 68, 78, 248, 106, 194, 238, 10, 2, 215,
-    156, 203, 12, 10, 2, 215, 156, 127, 215, 156, 247, 245, 127, 247, 244,
-    219, 195, 6, 1, 233, 15, 219, 195, 6, 1, 217, 73, 219, 195, 4, 1, 233,
-    15, 219, 195, 4, 1, 217, 73, 56, 1, 237, 135, 67, 34, 16, 234, 225, 206,
-    0, 245, 34, 199, 128, 198, 144, 198, 133, 198, 122, 198, 110, 198, 99,
-    198, 88, 198, 77, 198, 66, 198, 55, 198, 47, 198, 46, 198, 45, 198, 44,
-    198, 42, 198, 41, 198, 40, 198, 39, 198, 38, 198, 37, 198, 36, 198, 35,
-    198, 34, 198, 33, 198, 31, 198, 30, 198, 29, 198, 28, 198, 27, 198, 26,
-    198, 25, 198, 24, 198, 23, 198, 22, 198, 20, 198, 19, 198, 18, 198, 17,
-    198, 16, 198, 15, 198, 14, 198, 13, 198, 12, 198, 11, 198, 9, 198, 8,
-    198, 7, 198, 6, 198, 5, 198, 4, 198, 3, 198, 2, 198, 1, 198, 0, 197, 254,
-    197, 253, 197, 252, 197, 251, 197, 250, 197, 249, 197, 248, 197, 247,
-    197, 246, 197, 245, 197, 243, 197, 242, 197, 241, 197, 240, 197, 239,
-    197, 238, 197, 237, 197, 236, 197, 235, 197, 234, 197, 232, 197, 231,
-    197, 230, 197, 229, 197, 228, 197, 227, 197, 226, 197, 225, 197, 224,
-    197, 223, 198, 220, 198, 219, 198, 218, 198, 217, 198, 216, 198, 215,
-    198, 214, 198, 213, 198, 212, 198, 211, 198, 209, 198, 208, 198, 207,
-    198, 206, 198, 205, 198, 204, 198, 203, 198, 202, 198, 201, 198, 200,
-    198, 198, 198, 197, 198, 196, 198, 195, 198, 194, 198, 193, 198, 192,
-    198, 191, 198, 190, 198, 189, 198, 187, 198, 186, 198, 185, 198, 184,
-    198, 183, 198, 182, 198, 181, 198, 180, 198, 179, 198, 178, 198, 176,
-    198, 175, 198, 174, 198, 173, 198, 172, 198, 171, 198, 170, 198, 169,
-    198, 168, 198, 167, 198, 165, 198, 164, 198, 163, 198, 162, 198, 161,
-    198, 160, 198, 159, 198, 158, 198, 157, 198, 156, 198, 154, 198, 153,
-    198, 152, 198, 151, 198, 150, 198, 149, 198, 148, 198, 147, 198, 146,
-    198, 145, 198, 143, 198, 142, 198, 141, 198, 140, 198, 139, 198, 138,
-    198, 137, 198, 136, 198, 135, 198, 134, 198, 132, 198, 131, 198, 130,
-    198, 129, 198, 128, 198, 127, 198, 126, 198, 125, 198, 124, 198, 123,
-    198, 121, 198, 120, 198, 119, 198, 118, 198, 117, 198, 116, 198, 115,
-    198, 114, 198, 113, 198, 112, 198, 109, 198, 108, 198, 107, 198, 106,
-    198, 105, 198, 104, 198, 103, 198, 102, 198, 101, 198, 100, 198, 98, 198,
-    97, 198, 96, 198, 95, 198, 94, 198, 93, 198, 92, 198, 91, 198, 90, 198,
-    89, 198, 87, 198, 86, 198, 85, 198, 84, 198, 83, 198, 82, 198, 81, 198,
-    80, 198, 79, 198, 78, 198, 76, 198, 75, 198, 74, 198, 73, 198, 72, 198,
-    71, 198, 70, 198, 69, 198, 68, 198, 67, 198, 65, 198, 64, 198, 63, 198,
-    62, 198, 61, 198, 60, 198, 59, 198, 58, 198, 57, 198, 56, 198, 54, 198,
-    53, 198, 52, 198, 51, 198, 50, 198, 49, 198, 48, 224, 150, 31, 55, 224,
-    150, 250, 179, 224, 150, 17, 195, 79, 224, 150, 17, 100, 224, 150, 17,
-    102, 224, 150, 17, 134, 224, 150, 17, 136, 224, 150, 17, 146, 224, 150,
-    17, 167, 224, 150, 17, 178, 224, 150, 17, 171, 224, 150, 17, 182, 8, 6,
-    1, 39, 3, 220, 115, 26, 233, 100, 8, 4, 1, 39, 3, 220, 115, 26, 233, 100,
-    8, 6, 1, 237, 136, 3, 83, 222, 76, 60, 8, 4, 1, 237, 136, 3, 83, 222, 76,
-    60, 8, 6, 1, 237, 136, 3, 83, 222, 76, 248, 227, 26, 233, 100, 8, 4, 1,
-    237, 136, 3, 83, 222, 76, 248, 227, 26, 233, 100, 8, 6, 1, 237, 136, 3,
-    83, 222, 76, 248, 227, 26, 186, 8, 4, 1, 237, 136, 3, 83, 222, 76, 248,
-    227, 26, 186, 8, 6, 1, 237, 136, 3, 244, 241, 26, 220, 114, 8, 4, 1, 237,
-    136, 3, 244, 241, 26, 220, 114, 8, 6, 1, 237, 136, 3, 244, 241, 26, 247,
-    106, 8, 4, 1, 237, 136, 3, 244, 241, 26, 247, 106, 8, 6, 1, 230, 249, 3,
-    220, 115, 26, 233, 100, 8, 4, 1, 230, 249, 3, 220, 115, 26, 233, 100, 8,
-    4, 1, 230, 249, 3, 76, 90, 26, 186, 8, 4, 1, 217, 74, 3, 202, 85, 57, 8,
-    6, 1, 177, 3, 83, 222, 76, 60, 8, 4, 1, 177, 3, 83, 222, 76, 60, 8, 6, 1,
-    177, 3, 83, 222, 76, 248, 227, 26, 233, 100, 8, 4, 1, 177, 3, 83, 222,
-    76, 248, 227, 26, 233, 100, 8, 6, 1, 177, 3, 83, 222, 76, 248, 227, 26,
-    186, 8, 4, 1, 177, 3, 83, 222, 76, 248, 227, 26, 186, 8, 6, 1, 209, 81,
-    3, 83, 222, 76, 60, 8, 4, 1, 209, 81, 3, 83, 222, 76, 60, 8, 6, 1, 118,
-    3, 220, 115, 26, 233, 100, 8, 4, 1, 118, 3, 220, 115, 26, 233, 100, 8, 6,
-    1, 39, 3, 214, 152, 26, 186, 8, 4, 1, 39, 3, 214, 152, 26, 186, 8, 6, 1,
-    39, 3, 214, 152, 26, 202, 84, 8, 4, 1, 39, 3, 214, 152, 26, 202, 84, 8,
-    6, 1, 237, 136, 3, 214, 152, 26, 186, 8, 4, 1, 237, 136, 3, 214, 152, 26,
-    186, 8, 6, 1, 237, 136, 3, 214, 152, 26, 202, 84, 8, 4, 1, 237, 136, 3,
-    214, 152, 26, 202, 84, 8, 6, 1, 237, 136, 3, 76, 90, 26, 186, 8, 4, 1,
-    237, 136, 3, 76, 90, 26, 186, 8, 6, 1, 237, 136, 3, 76, 90, 26, 202, 84,
-    8, 4, 1, 237, 136, 3, 76, 90, 26, 202, 84, 8, 4, 1, 230, 249, 3, 76, 90,
-    26, 233, 100, 8, 4, 1, 230, 249, 3, 76, 90, 26, 202, 84, 8, 6, 1, 230,
-    249, 3, 214, 152, 26, 186, 8, 4, 1, 230, 249, 3, 214, 152, 26, 76, 90,
-    26, 186, 8, 6, 1, 230, 249, 3, 214, 152, 26, 202, 84, 8, 4, 1, 230, 249,
-    3, 214, 152, 26, 76, 90, 26, 202, 84, 8, 6, 1, 225, 218, 3, 202, 84, 8,
-    4, 1, 225, 218, 3, 76, 90, 26, 202, 84, 8, 6, 1, 223, 100, 3, 202, 84, 8,
-    4, 1, 223, 100, 3, 202, 84, 8, 6, 1, 221, 137, 3, 202, 84, 8, 4, 1, 221,
-    137, 3, 202, 84, 8, 6, 1, 211, 32, 3, 202, 84, 8, 4, 1, 211, 32, 3, 202,
-    84, 8, 6, 1, 118, 3, 214, 152, 26, 186, 8, 4, 1, 118, 3, 214, 152, 26,
-    186, 8, 6, 1, 118, 3, 214, 152, 26, 202, 84, 8, 4, 1, 118, 3, 214, 152,
-    26, 202, 84, 8, 6, 1, 118, 3, 220, 115, 26, 186, 8, 4, 1, 118, 3, 220,
-    115, 26, 186, 8, 6, 1, 118, 3, 220, 115, 26, 202, 84, 8, 4, 1, 118, 3,
-    220, 115, 26, 202, 84, 8, 4, 1, 251, 246, 3, 233, 100, 8, 4, 1, 192, 177,
-    3, 233, 100, 8, 4, 1, 192, 177, 3, 186, 8, 4, 1, 163, 199, 231, 3, 233,
-    100, 8, 4, 1, 163, 199, 231, 3, 186, 8, 4, 1, 208, 164, 3, 233, 100, 8,
-    4, 1, 208, 164, 3, 186, 8, 4, 1, 231, 164, 208, 164, 3, 233, 100, 8, 4,
-    1, 231, 164, 208, 164, 3, 186, 9, 207, 87, 93, 3, 232, 214, 90, 3, 251,
-    164, 9, 207, 87, 93, 3, 232, 214, 90, 3, 197, 117, 9, 207, 87, 93, 3,
-    232, 214, 90, 3, 151, 220, 69, 9, 207, 87, 93, 3, 232, 214, 90, 3, 214,
-    164, 9, 207, 87, 93, 3, 232, 214, 90, 3, 66, 9, 207, 87, 93, 3, 232, 214,
-    90, 3, 195, 217, 9, 207, 87, 93, 3, 232, 214, 90, 3, 69, 9, 207, 87, 93,
-    3, 232, 214, 90, 3, 251, 245, 9, 207, 87, 216, 32, 3, 224, 191, 248, 219,
-    1, 224, 121, 42, 108, 225, 80, 42, 108, 217, 73, 42, 108, 247, 207, 42,
-    108, 215, 111, 42, 108, 201, 81, 42, 108, 216, 87, 42, 108, 203, 216, 42,
-    108, 218, 55, 42, 108, 214, 3, 42, 108, 221, 136, 42, 108, 196, 148, 42,
-    108, 144, 42, 108, 159, 42, 108, 199, 230, 42, 108, 222, 27, 42, 108,
-    222, 38, 42, 108, 209, 182, 42, 108, 216, 69, 42, 108, 225, 217, 42, 108,
-    207, 52, 42, 108, 205, 83, 42, 108, 209, 80, 42, 108, 233, 15, 42, 108,
-    223, 202, 42, 5, 225, 55, 42, 5, 224, 101, 42, 5, 224, 80, 42, 5, 223,
-    187, 42, 5, 223, 144, 42, 5, 224, 209, 42, 5, 224, 200, 42, 5, 225, 31,
-    42, 5, 224, 11, 42, 5, 223, 242, 42, 5, 224, 228, 42, 5, 217, 70, 42, 5,
-    217, 19, 42, 5, 217, 15, 42, 5, 216, 240, 42, 5, 216, 231, 42, 5, 217,
-    58, 42, 5, 217, 56, 42, 5, 217, 67, 42, 5, 216, 252, 42, 5, 216, 247, 42,
-    5, 217, 60, 42, 5, 247, 173, 42, 5, 245, 11, 42, 5, 245, 1, 42, 5, 241,
-    41, 42, 5, 241, 0, 42, 5, 247, 57, 42, 5, 247, 49, 42, 5, 247, 162, 42,
-    5, 244, 182, 42, 5, 241, 117, 42, 5, 247, 90, 42, 5, 215, 108, 42, 5,
-    215, 89, 42, 5, 215, 83, 42, 5, 215, 66, 42, 5, 215, 58, 42, 5, 215, 98,
-    42, 5, 215, 97, 42, 5, 215, 105, 42, 5, 215, 73, 42, 5, 215, 70, 42, 5,
-    215, 101, 42, 5, 201, 77, 42, 5, 201, 57, 42, 5, 201, 56, 42, 5, 201, 45,
-    42, 5, 201, 42, 42, 5, 201, 73, 42, 5, 201, 72, 42, 5, 201, 76, 42, 5,
-    201, 55, 42, 5, 201, 54, 42, 5, 201, 75, 42, 5, 216, 85, 42, 5, 216, 71,
-    42, 5, 216, 70, 42, 5, 216, 54, 42, 5, 216, 53, 42, 5, 216, 81, 42, 5,
-    216, 80, 42, 5, 216, 84, 42, 5, 216, 56, 42, 5, 216, 55, 42, 5, 216, 83,
-    42, 5, 203, 162, 42, 5, 202, 122, 42, 5, 202, 99, 42, 5, 201, 40, 42, 5,
-    200, 251, 42, 5, 203, 68, 42, 5, 203, 48, 42, 5, 203, 137, 42, 5, 149,
-    42, 5, 201, 247, 42, 5, 203, 89, 42, 5, 217, 244, 42, 5, 216, 223, 42, 5,
-    216, 190, 42, 5, 215, 186, 42, 5, 215, 123, 42, 5, 217, 118, 42, 5, 217,
-    107, 42, 5, 217, 230, 42, 5, 216, 50, 42, 5, 216, 33, 42, 5, 217, 202,
-    42, 5, 213, 243, 42, 5, 212, 220, 42, 5, 212, 182, 42, 5, 211, 227, 42,
-    5, 211, 191, 42, 5, 213, 92, 42, 5, 213, 79, 42, 5, 213, 221, 42, 5, 212,
-    117, 42, 5, 212, 91, 42, 5, 213, 108, 42, 5, 220, 119, 42, 5, 219, 78,
-    42, 5, 219, 40, 42, 5, 218, 145, 42, 5, 218, 85, 42, 5, 219, 207, 42, 5,
-    219, 188, 42, 5, 220, 81, 42, 5, 218, 251, 42, 5, 218, 195, 42, 5, 219,
-    255, 42, 5, 196, 129, 42, 5, 196, 24, 42, 5, 196, 14, 42, 5, 195, 217,
-    42, 5, 195, 180, 42, 5, 196, 69, 42, 5, 196, 66, 42, 5, 196, 108, 42, 5,
-    196, 3, 42, 5, 195, 237, 42, 5, 196, 80, 42, 5, 210, 244, 42, 5, 210, 72,
-    42, 5, 210, 9, 42, 5, 209, 140, 42, 5, 209, 101, 42, 5, 210, 183, 42, 5,
-    210, 155, 42, 5, 210, 224, 42, 5, 209, 232, 42, 5, 209, 206, 42, 5, 210,
-    193, 42, 5, 223, 82, 42, 5, 222, 109, 42, 5, 222, 91, 42, 5, 221, 191,
-    42, 5, 221, 162, 42, 5, 222, 197, 42, 5, 222, 188, 42, 5, 223, 54, 42, 5,
-    222, 7, 42, 5, 221, 229, 42, 5, 222, 215, 42, 5, 199, 151, 42, 5, 199,
-    34, 42, 5, 199, 18, 42, 5, 197, 220, 42, 5, 197, 212, 42, 5, 199, 118,
-    42, 5, 199, 113, 42, 5, 199, 147, 42, 5, 198, 248, 42, 5, 198, 233, 42,
-    5, 199, 124, 42, 5, 222, 25, 42, 5, 222, 20, 42, 5, 222, 19, 42, 5, 222,
-    16, 42, 5, 222, 15, 42, 5, 222, 22, 42, 5, 222, 21, 42, 5, 222, 24, 42,
-    5, 222, 18, 42, 5, 222, 17, 42, 5, 222, 23, 42, 5, 222, 36, 42, 5, 222,
-    29, 42, 5, 222, 28, 42, 5, 222, 12, 42, 5, 222, 11, 42, 5, 222, 32, 42,
-    5, 222, 31, 42, 5, 222, 35, 42, 5, 222, 14, 42, 5, 222, 13, 42, 5, 222,
-    33, 42, 5, 209, 180, 42, 5, 209, 169, 42, 5, 209, 168, 42, 5, 209, 161,
-    42, 5, 209, 154, 42, 5, 209, 176, 42, 5, 209, 175, 42, 5, 209, 179, 42,
-    5, 209, 167, 42, 5, 209, 166, 42, 5, 209, 178, 42, 5, 216, 67, 42, 5,
-    216, 62, 42, 5, 216, 61, 42, 5, 216, 58, 42, 5, 216, 57, 42, 5, 216, 64,
-    42, 5, 216, 63, 42, 5, 216, 66, 42, 5, 216, 60, 42, 5, 216, 59, 42, 5,
-    216, 65, 42, 5, 225, 213, 42, 5, 225, 172, 42, 5, 225, 164, 42, 5, 225,
-    110, 42, 5, 225, 90, 42, 5, 225, 193, 42, 5, 225, 191, 42, 5, 225, 207,
-    42, 5, 225, 129, 42, 5, 225, 119, 42, 5, 225, 200, 42, 5, 207, 45, 42, 5,
-    206, 223, 42, 5, 206, 218, 42, 5, 206, 151, 42, 5, 206, 133, 42, 5, 206,
-    255, 42, 5, 206, 253, 42, 5, 207, 34, 42, 5, 206, 198, 42, 5, 206, 190,
-    42, 5, 207, 8, 42, 5, 205, 79, 42, 5, 205, 47, 42, 5, 205, 43, 42, 5,
-    205, 34, 42, 5, 205, 31, 42, 5, 205, 53, 42, 5, 205, 52, 42, 5, 205, 78,
-    42, 5, 205, 39, 42, 5, 205, 38, 42, 5, 205, 55, 42, 5, 209, 13, 42, 5,
-    206, 112, 42, 5, 206, 84, 42, 5, 204, 172, 42, 5, 204, 74, 42, 5, 208,
-    147, 42, 5, 208, 129, 42, 5, 208, 253, 42, 5, 205, 200, 42, 5, 205, 171,
-    42, 5, 208, 191, 42, 5, 232, 246, 42, 5, 232, 71, 42, 5, 232, 43, 42, 5,
-    231, 75, 42, 5, 231, 46, 42, 5, 232, 147, 42, 5, 232, 118, 42, 5, 232,
-    235, 42, 5, 231, 193, 42, 5, 231, 166, 42, 5, 232, 158, 42, 5, 223, 201,
-    42, 5, 223, 200, 42, 5, 223, 195, 42, 5, 223, 194, 42, 5, 223, 191, 42,
-    5, 223, 190, 42, 5, 223, 197, 42, 5, 223, 196, 42, 5, 223, 199, 42, 5,
-    223, 193, 42, 5, 223, 192, 42, 5, 223, 198, 42, 5, 206, 158, 153, 108, 2,
-    196, 94, 153, 108, 2, 210, 212, 153, 108, 2, 210, 121, 94, 1, 200, 170,
-    89, 108, 2, 244, 175, 155, 89, 108, 2, 244, 175, 224, 146, 89, 108, 2,
-    244, 175, 224, 11, 89, 108, 2, 244, 175, 224, 117, 89, 108, 2, 244, 175,
-    216, 252, 89, 108, 2, 244, 175, 247, 174, 89, 108, 2, 244, 175, 247, 16,
-    89, 108, 2, 244, 175, 244, 182, 89, 108, 2, 244, 175, 245, 49, 89, 108,
-    2, 244, 175, 215, 73, 89, 108, 2, 244, 175, 240, 136, 89, 108, 2, 244,
-    175, 201, 66, 89, 108, 2, 244, 175, 239, 28, 89, 108, 2, 244, 175, 201,
-    61, 89, 108, 2, 244, 175, 176, 89, 108, 2, 244, 175, 189, 89, 108, 2,
-    244, 175, 202, 233, 89, 108, 2, 244, 175, 149, 89, 108, 2, 244, 175, 202,
-    169, 89, 108, 2, 244, 175, 216, 50, 89, 108, 2, 244, 175, 249, 145, 89,
-    108, 2, 244, 175, 213, 6, 89, 108, 2, 244, 175, 212, 117, 89, 108, 2,
-    244, 175, 212, 234, 89, 108, 2, 244, 175, 218, 251, 89, 108, 2, 244, 175,
-    196, 3, 89, 108, 2, 244, 175, 209, 232, 89, 108, 2, 244, 175, 222, 7, 89,
-    108, 2, 244, 175, 198, 248, 89, 108, 2, 244, 175, 207, 50, 89, 108, 2,
-    244, 175, 205, 80, 89, 108, 2, 244, 175, 183, 89, 108, 2, 244, 175, 142,
-    89, 108, 2, 244, 175, 172, 89, 18, 2, 244, 175, 211, 159, 89, 226, 73,
-    18, 2, 244, 175, 211, 97, 89, 226, 73, 18, 2, 244, 175, 209, 89, 89, 226,
-    73, 18, 2, 244, 175, 209, 82, 89, 226, 73, 18, 2, 244, 175, 211, 139, 89,
-    18, 2, 214, 127, 89, 18, 2, 252, 129, 188, 1, 248, 177, 217, 71, 188, 1,
-    248, 177, 217, 19, 188, 1, 248, 177, 216, 240, 188, 1, 248, 177, 217, 58,
-    188, 1, 248, 177, 216, 252, 71, 1, 248, 177, 217, 71, 71, 1, 248, 177,
-    217, 19, 71, 1, 248, 177, 216, 240, 71, 1, 248, 177, 217, 58, 71, 1, 248,
-    177, 216, 252, 71, 1, 251, 192, 247, 57, 71, 1, 251, 192, 201, 40, 71, 1,
-    251, 192, 149, 71, 1, 251, 192, 214, 3, 73, 1, 236, 74, 236, 73, 241,
-    125, 152, 154, 73, 1, 236, 73, 236, 74, 241, 125, 152, 154,
+    0, 202, 160, 233, 204, 77, 208, 142, 77, 31, 57, 236, 127, 57, 210, 133,
+    57, 250, 229, 250, 147, 46, 210, 230, 51, 210, 230, 250, 37, 102, 57,
+    242, 38, 228, 110, 232, 71, 201, 238, 202, 189, 17, 192, 76, 17, 101, 17,
+    104, 17, 133, 17, 134, 17, 151, 17, 170, 17, 179, 17, 174, 17, 182, 242,
+    47, 204, 180, 219, 240, 57, 234, 30, 57, 230, 204, 57, 208, 159, 77, 242,
+    36, 250, 26, 8, 6, 1, 64, 8, 6, 1, 249, 226, 8, 6, 1, 247, 52, 8, 6, 1,
+    238, 95, 8, 6, 1, 71, 8, 6, 1, 233, 163, 8, 6, 1, 232, 44, 8, 6, 1, 230,
+    124, 8, 6, 1, 70, 8, 6, 1, 223, 65, 8, 6, 1, 222, 184, 8, 6, 1, 165, 8,
+    6, 1, 218, 236, 8, 6, 1, 215, 151, 8, 6, 1, 74, 8, 6, 1, 211, 93, 8, 6,
+    1, 208, 247, 8, 6, 1, 150, 8, 6, 1, 206, 158, 8, 6, 1, 200, 228, 8, 6, 1,
+    68, 8, 6, 1, 196, 236, 8, 6, 1, 194, 202, 8, 6, 1, 193, 223, 8, 6, 1,
+    193, 148, 8, 6, 1, 192, 155, 46, 50, 186, 207, 169, 202, 189, 51, 50,
+    186, 242, 122, 251, 143, 132, 219, 175, 230, 211, 251, 143, 8, 2, 1, 64,
+    8, 2, 1, 249, 226, 8, 2, 1, 247, 52, 8, 2, 1, 238, 95, 8, 2, 1, 71, 8, 2,
+    1, 233, 163, 8, 2, 1, 232, 44, 8, 2, 1, 230, 124, 8, 2, 1, 70, 8, 2, 1,
+    223, 65, 8, 2, 1, 222, 184, 8, 2, 1, 165, 8, 2, 1, 218, 236, 8, 2, 1,
+    215, 151, 8, 2, 1, 74, 8, 2, 1, 211, 93, 8, 2, 1, 208, 247, 8, 2, 1, 150,
+    8, 2, 1, 206, 158, 8, 2, 1, 200, 228, 8, 2, 1, 68, 8, 2, 1, 196, 236, 8,
+    2, 1, 194, 202, 8, 2, 1, 193, 223, 8, 2, 1, 193, 148, 8, 2, 1, 192, 155,
+    46, 238, 138, 186, 84, 219, 175, 51, 238, 138, 186, 199, 90, 213, 136,
+    202, 160, 223, 121, 233, 204, 77, 246, 140, 57, 209, 143, 57, 238, 137,
+    57, 193, 60, 57, 247, 136, 161, 205, 209, 57, 237, 14, 238, 227, 57, 233,
+    28, 211, 158, 223, 172, 220, 23, 55, 250, 208, 208, 142, 77, 213, 111,
+    57, 202, 198, 228, 111, 207, 228, 57, 217, 214, 237, 95, 57, 209, 205,
+    57, 201, 107, 104, 201, 107, 133, 251, 130, 251, 143, 216, 166, 57, 210,
+    9, 57, 85, 236, 114, 246, 151, 201, 107, 101, 217, 111, 211, 158, 223,
+    172, 207, 96, 55, 250, 208, 208, 142, 77, 194, 220, 232, 109, 90, 208,
+    167, 194, 220, 232, 109, 90, 230, 78, 194, 220, 232, 109, 112, 208, 165,
+    223, 121, 208, 159, 77, 8, 6, 1, 41, 4, 230, 210, 8, 6, 1, 41, 4, 251,
+    129, 8, 6, 1, 41, 4, 242, 121, 8, 6, 1, 41, 4, 199, 90, 8, 6, 1, 41, 4,
+    237, 14, 8, 6, 1, 41, 4, 207, 82, 58, 8, 6, 1, 251, 108, 8, 6, 1, 247,
+    53, 4, 246, 151, 8, 6, 1, 234, 253, 4, 230, 210, 8, 6, 1, 234, 253, 4,
+    251, 129, 8, 6, 1, 234, 253, 4, 242, 121, 8, 6, 1, 234, 253, 4, 237, 14,
+    8, 6, 1, 228, 97, 4, 230, 210, 8, 6, 1, 228, 97, 4, 251, 129, 8, 6, 1,
+    228, 97, 4, 242, 121, 8, 6, 1, 228, 97, 4, 237, 14, 8, 6, 1, 233, 235, 8,
+    6, 1, 215, 152, 4, 199, 90, 8, 6, 1, 185, 4, 230, 210, 8, 6, 1, 185, 4,
+    251, 129, 8, 6, 1, 185, 4, 242, 121, 8, 6, 1, 185, 4, 199, 90, 8, 6, 1,
+    185, 4, 237, 14, 215, 214, 57, 8, 6, 1, 185, 4, 111, 8, 6, 1, 124, 4,
+    230, 210, 8, 6, 1, 124, 4, 251, 129, 8, 6, 1, 124, 4, 242, 121, 8, 6, 1,
+    124, 4, 237, 14, 8, 6, 1, 193, 149, 4, 251, 129, 8, 6, 1, 199, 168, 8, 2,
+    1, 204, 26, 206, 158, 8, 2, 1, 41, 4, 230, 210, 8, 2, 1, 41, 4, 251, 129,
+    8, 2, 1, 41, 4, 242, 121, 8, 2, 1, 41, 4, 199, 90, 8, 2, 1, 41, 4, 237,
+    14, 8, 2, 1, 41, 4, 207, 82, 58, 8, 2, 1, 251, 108, 8, 2, 1, 247, 53, 4,
+    246, 151, 8, 2, 1, 234, 253, 4, 230, 210, 8, 2, 1, 234, 253, 4, 251, 129,
+    8, 2, 1, 234, 253, 4, 242, 121, 8, 2, 1, 234, 253, 4, 237, 14, 8, 2, 1,
+    228, 97, 4, 230, 210, 8, 2, 1, 228, 97, 4, 251, 129, 8, 2, 1, 228, 97, 4,
+    242, 121, 8, 2, 1, 228, 97, 4, 237, 14, 8, 2, 1, 233, 235, 8, 2, 1, 215,
+    152, 4, 199, 90, 8, 2, 1, 185, 4, 230, 210, 8, 2, 1, 185, 4, 251, 129, 8,
+    2, 1, 185, 4, 242, 121, 8, 2, 1, 185, 4, 199, 90, 8, 2, 1, 185, 4, 237,
+    14, 236, 172, 57, 8, 2, 1, 185, 4, 111, 8, 2, 1, 124, 4, 230, 210, 8, 2,
+    1, 124, 4, 251, 129, 8, 2, 1, 124, 4, 242, 121, 8, 2, 1, 124, 4, 237, 14,
+    8, 2, 1, 193, 149, 4, 251, 129, 8, 2, 1, 199, 168, 8, 2, 1, 193, 149, 4,
+    237, 14, 8, 6, 1, 41, 4, 217, 214, 8, 2, 1, 41, 4, 217, 214, 8, 6, 1, 41,
+    4, 247, 150, 8, 2, 1, 41, 4, 247, 150, 8, 6, 1, 41, 4, 211, 243, 8, 2, 1,
+    41, 4, 211, 243, 8, 6, 1, 247, 53, 4, 251, 129, 8, 2, 1, 247, 53, 4, 251,
+    129, 8, 6, 1, 247, 53, 4, 242, 121, 8, 2, 1, 247, 53, 4, 242, 121, 8, 6,
+    1, 247, 53, 4, 78, 58, 8, 2, 1, 247, 53, 4, 78, 58, 8, 6, 1, 247, 53, 4,
+    246, 207, 8, 2, 1, 247, 53, 4, 246, 207, 8, 6, 1, 238, 96, 4, 246, 207,
+    8, 2, 1, 238, 96, 4, 246, 207, 8, 6, 1, 238, 96, 4, 111, 8, 2, 1, 238,
+    96, 4, 111, 8, 6, 1, 234, 253, 4, 217, 214, 8, 2, 1, 234, 253, 4, 217,
+    214, 8, 6, 1, 234, 253, 4, 247, 150, 8, 2, 1, 234, 253, 4, 247, 150, 8,
+    6, 1, 234, 253, 4, 78, 58, 8, 2, 1, 234, 253, 4, 78, 58, 8, 6, 1, 234,
+    253, 4, 211, 243, 8, 2, 1, 234, 253, 4, 211, 243, 8, 6, 1, 234, 253, 4,
+    246, 207, 8, 2, 1, 234, 253, 4, 246, 207, 8, 6, 1, 232, 45, 4, 242, 121,
+    8, 2, 1, 232, 45, 4, 242, 121, 8, 6, 1, 232, 45, 4, 247, 150, 8, 2, 1,
+    232, 45, 4, 247, 150, 8, 6, 1, 232, 45, 4, 78, 58, 8, 2, 1, 232, 45, 4,
+    78, 58, 8, 6, 1, 232, 45, 4, 246, 151, 8, 2, 1, 232, 45, 4, 246, 151, 8,
+    6, 1, 230, 125, 4, 242, 121, 8, 2, 1, 230, 125, 4, 242, 121, 8, 6, 1,
+    230, 125, 4, 111, 8, 2, 1, 230, 125, 4, 111, 8, 6, 1, 228, 97, 4, 199,
+    90, 8, 2, 1, 228, 97, 4, 199, 90, 8, 6, 1, 228, 97, 4, 217, 214, 8, 2, 1,
+    228, 97, 4, 217, 214, 8, 6, 1, 228, 97, 4, 247, 150, 8, 2, 1, 228, 97, 4,
+    247, 150, 8, 6, 1, 228, 97, 4, 211, 243, 8, 2, 1, 228, 97, 4, 211, 243,
+    8, 6, 1, 228, 97, 4, 78, 58, 8, 2, 1, 236, 113, 70, 8, 6, 34, 223, 222,
+    8, 2, 34, 223, 222, 8, 6, 1, 223, 66, 4, 242, 121, 8, 2, 1, 223, 66, 4,
+    242, 121, 8, 6, 1, 222, 185, 4, 246, 151, 8, 2, 1, 222, 185, 4, 246, 151,
+    8, 2, 1, 221, 56, 8, 6, 1, 220, 202, 4, 251, 129, 8, 2, 1, 220, 202, 4,
+    251, 129, 8, 6, 1, 220, 202, 4, 246, 151, 8, 2, 1, 220, 202, 4, 246, 151,
+    8, 6, 1, 220, 202, 4, 246, 207, 8, 2, 1, 220, 202, 4, 246, 207, 8, 6, 1,
+    220, 202, 4, 85, 236, 114, 8, 2, 1, 220, 202, 4, 85, 236, 114, 8, 6, 1,
+    220, 202, 4, 111, 8, 2, 1, 220, 202, 4, 111, 8, 6, 1, 215, 152, 4, 251,
+    129, 8, 2, 1, 215, 152, 4, 251, 129, 8, 6, 1, 215, 152, 4, 246, 151, 8,
+    2, 1, 215, 152, 4, 246, 151, 8, 6, 1, 215, 152, 4, 246, 207, 8, 2, 1,
+    215, 152, 4, 246, 207, 8, 2, 1, 215, 152, 209, 117, 247, 64, 250, 147, 8,
+    6, 1, 234, 73, 8, 2, 1, 234, 73, 8, 6, 1, 185, 4, 217, 214, 8, 2, 1, 185,
+    4, 217, 214, 8, 6, 1, 185, 4, 247, 150, 8, 2, 1, 185, 4, 247, 150, 8, 6,
+    1, 185, 4, 55, 251, 129, 8, 2, 1, 185, 4, 55, 251, 129, 8, 6, 34, 212, 0,
+    8, 2, 34, 212, 0, 8, 6, 1, 208, 112, 4, 251, 129, 8, 2, 1, 208, 112, 4,
+    251, 129, 8, 6, 1, 208, 112, 4, 246, 151, 8, 2, 1, 208, 112, 4, 246, 151,
+    8, 6, 1, 208, 112, 4, 246, 207, 8, 2, 1, 208, 112, 4, 246, 207, 8, 6, 1,
+    206, 159, 4, 251, 129, 8, 2, 1, 206, 159, 4, 251, 129, 8, 6, 1, 206, 159,
+    4, 242, 121, 8, 2, 1, 206, 159, 4, 242, 121, 8, 6, 1, 206, 159, 4, 246,
+    151, 8, 2, 1, 206, 159, 4, 246, 151, 8, 6, 1, 206, 159, 4, 246, 207, 8,
+    2, 1, 206, 159, 4, 246, 207, 8, 6, 1, 200, 229, 4, 246, 151, 8, 2, 1,
+    200, 229, 4, 246, 151, 8, 6, 1, 200, 229, 4, 246, 207, 8, 2, 1, 200, 229,
+    4, 246, 207, 8, 6, 1, 200, 229, 4, 111, 8, 2, 1, 200, 229, 4, 111, 8, 6,
+    1, 124, 4, 199, 90, 8, 2, 1, 124, 4, 199, 90, 8, 6, 1, 124, 4, 217, 214,
+    8, 2, 1, 124, 4, 217, 214, 8, 6, 1, 124, 4, 247, 150, 8, 2, 1, 124, 4,
+    247, 150, 8, 6, 1, 124, 4, 207, 82, 58, 8, 2, 1, 124, 4, 207, 82, 58, 8,
+    6, 1, 124, 4, 55, 251, 129, 8, 2, 1, 124, 4, 55, 251, 129, 8, 6, 1, 124,
+    4, 211, 243, 8, 2, 1, 124, 4, 211, 243, 8, 6, 1, 194, 203, 4, 242, 121,
+    8, 2, 1, 194, 203, 4, 242, 121, 8, 6, 1, 193, 149, 4, 242, 121, 8, 2, 1,
+    193, 149, 4, 242, 121, 8, 6, 1, 193, 149, 4, 237, 14, 8, 6, 1, 192, 156,
+    4, 251, 129, 8, 2, 1, 192, 156, 4, 251, 129, 8, 6, 1, 192, 156, 4, 78,
+    58, 8, 2, 1, 192, 156, 4, 78, 58, 8, 6, 1, 192, 156, 4, 246, 207, 8, 2,
+    1, 192, 156, 4, 246, 207, 8, 2, 1, 184, 206, 158, 8, 2, 1, 76, 4, 111, 8,
+    6, 1, 76, 4, 128, 8, 6, 1, 76, 4, 198, 246, 8, 2, 1, 76, 4, 198, 246, 8,
+    6, 1, 158, 170, 8, 2, 1, 158, 170, 8, 6, 1, 211, 184, 74, 8, 6, 1, 247,
+    53, 4, 128, 8, 2, 1, 247, 53, 4, 128, 8, 6, 1, 251, 83, 238, 95, 8, 6, 1,
+    238, 96, 4, 128, 8, 6, 1, 238, 96, 4, 198, 246, 8, 2, 1, 238, 96, 4, 198,
+    246, 8, 2, 1, 163, 237, 76, 8, 6, 1, 207, 168, 71, 8, 6, 1, 205, 240, 8,
+    6, 1, 211, 184, 71, 8, 6, 1, 233, 164, 4, 128, 8, 2, 1, 233, 164, 4, 128,
+    8, 6, 1, 232, 45, 4, 128, 8, 6, 1, 231, 204, 8, 2, 1, 228, 148, 8, 6, 1,
+    223, 111, 8, 6, 1, 228, 97, 4, 111, 8, 6, 1, 222, 185, 4, 128, 8, 2, 1,
+    222, 185, 4, 128, 8, 2, 1, 220, 202, 4, 161, 8, 2, 1, 220, 92, 4, 111, 8,
+    6, 1, 163, 218, 236, 8, 6, 1, 215, 152, 4, 46, 128, 8, 2, 1, 215, 152, 4,
+    184, 51, 220, 16, 8, 6, 1, 185, 4, 85, 199, 90, 8, 6, 1, 185, 4, 228,
+    208, 8, 2, 1, 185, 4, 228, 208, 8, 6, 1, 211, 238, 8, 2, 1, 211, 238, 8,
+    6, 1, 211, 94, 4, 128, 8, 2, 1, 211, 94, 4, 128, 8, 1, 192, 217, 8, 6, 1,
+    158, 104, 8, 2, 1, 158, 104, 8, 6, 1, 233, 255, 8, 1, 207, 168, 234, 0,
+    219, 69, 8, 2, 1, 200, 229, 4, 211, 49, 128, 8, 6, 1, 200, 229, 4, 128,
+    8, 2, 1, 200, 229, 4, 128, 8, 6, 1, 200, 229, 4, 207, 174, 128, 8, 6, 1,
+    124, 4, 228, 208, 8, 2, 1, 124, 4, 228, 208, 8, 6, 1, 197, 34, 8, 6, 1,
+    196, 237, 4, 128, 8, 6, 1, 193, 149, 4, 128, 8, 2, 1, 193, 149, 4, 128,
+    8, 6, 1, 192, 156, 4, 111, 8, 2, 1, 192, 156, 4, 111, 8, 6, 1, 233, 166,
+    8, 6, 1, 233, 167, 207, 167, 8, 2, 1, 233, 167, 207, 167, 8, 2, 1, 233,
+    167, 4, 200, 147, 8, 1, 103, 4, 111, 8, 6, 1, 158, 151, 8, 2, 1, 158,
+    151, 8, 1, 223, 121, 231, 6, 201, 239, 4, 111, 8, 1, 193, 226, 8, 1, 237,
+    69, 242, 96, 8, 1, 220, 63, 242, 96, 8, 1, 250, 242, 242, 96, 8, 1, 207,
+    174, 242, 96, 8, 6, 1, 235, 19, 4, 246, 207, 8, 6, 1, 238, 96, 4, 2, 1,
+    192, 156, 4, 246, 207, 8, 2, 1, 235, 19, 4, 246, 207, 8, 6, 1, 219, 141,
+    8, 6, 1, 220, 202, 4, 2, 1, 223, 65, 8, 2, 1, 219, 141, 8, 6, 1, 214, 1,
+    8, 6, 1, 215, 152, 4, 2, 1, 223, 65, 8, 2, 1, 214, 1, 8, 6, 1, 41, 4,
+    246, 207, 8, 2, 1, 41, 4, 246, 207, 8, 6, 1, 228, 97, 4, 246, 207, 8, 2,
+    1, 228, 97, 4, 246, 207, 8, 6, 1, 185, 4, 246, 207, 8, 2, 1, 185, 4, 246,
+    207, 8, 6, 1, 124, 4, 246, 207, 8, 2, 1, 124, 4, 246, 207, 8, 6, 1, 124,
+    4, 237, 15, 26, 217, 214, 8, 2, 1, 124, 4, 237, 15, 26, 217, 214, 8, 6,
+    1, 124, 4, 237, 15, 26, 251, 129, 8, 2, 1, 124, 4, 237, 15, 26, 251, 129,
+    8, 6, 1, 124, 4, 237, 15, 26, 246, 207, 8, 2, 1, 124, 4, 237, 15, 26,
+    246, 207, 8, 6, 1, 124, 4, 237, 15, 26, 230, 210, 8, 2, 1, 124, 4, 237,
+    15, 26, 230, 210, 8, 2, 1, 163, 71, 8, 6, 1, 41, 4, 237, 15, 26, 217,
+    214, 8, 2, 1, 41, 4, 237, 15, 26, 217, 214, 8, 6, 1, 41, 4, 78, 95, 26,
+    217, 214, 8, 2, 1, 41, 4, 78, 95, 26, 217, 214, 8, 6, 1, 251, 109, 4,
+    217, 214, 8, 2, 1, 251, 109, 4, 217, 214, 8, 6, 1, 232, 45, 4, 111, 8, 2,
+    1, 232, 45, 4, 111, 8, 6, 1, 232, 45, 4, 246, 207, 8, 2, 1, 232, 45, 4,
+    246, 207, 8, 6, 1, 222, 185, 4, 246, 207, 8, 2, 1, 222, 185, 4, 246, 207,
+    8, 6, 1, 185, 4, 211, 243, 8, 2, 1, 185, 4, 211, 243, 8, 6, 1, 185, 4,
+    211, 244, 26, 217, 214, 8, 2, 1, 185, 4, 211, 244, 26, 217, 214, 8, 6, 1,
+    233, 167, 4, 246, 207, 8, 2, 1, 233, 167, 4, 246, 207, 8, 2, 1, 223, 66,
+    4, 246, 207, 8, 6, 1, 235, 18, 8, 6, 1, 238, 96, 4, 2, 1, 192, 155, 8, 2,
+    1, 235, 18, 8, 6, 1, 232, 45, 4, 251, 129, 8, 2, 1, 232, 45, 4, 251, 129,
+    8, 6, 1, 228, 145, 8, 6, 1, 193, 226, 8, 6, 1, 215, 152, 4, 230, 210, 8,
+    2, 1, 215, 152, 4, 230, 210, 8, 6, 1, 41, 4, 207, 82, 95, 26, 251, 129,
+    8, 2, 1, 41, 4, 207, 82, 95, 26, 251, 129, 8, 6, 1, 251, 109, 4, 251,
+    129, 8, 2, 1, 251, 109, 4, 251, 129, 8, 6, 1, 185, 4, 201, 208, 26, 251,
+    129, 8, 2, 1, 185, 4, 201, 208, 26, 251, 129, 8, 6, 1, 41, 4, 55, 230,
+    210, 8, 2, 1, 41, 4, 55, 230, 210, 8, 6, 1, 41, 4, 223, 121, 247, 150, 8,
+    2, 1, 41, 4, 223, 121, 247, 150, 8, 6, 1, 234, 253, 4, 55, 230, 210, 8,
+    2, 1, 234, 253, 4, 55, 230, 210, 8, 6, 1, 234, 253, 4, 223, 121, 247,
+    150, 8, 2, 1, 234, 253, 4, 223, 121, 247, 150, 8, 6, 1, 228, 97, 4, 55,
+    230, 210, 8, 2, 1, 228, 97, 4, 55, 230, 210, 8, 6, 1, 228, 97, 4, 223,
+    121, 247, 150, 8, 2, 1, 228, 97, 4, 223, 121, 247, 150, 8, 6, 1, 185, 4,
+    55, 230, 210, 8, 2, 1, 185, 4, 55, 230, 210, 8, 6, 1, 185, 4, 223, 121,
+    247, 150, 8, 2, 1, 185, 4, 223, 121, 247, 150, 8, 6, 1, 208, 112, 4, 55,
+    230, 210, 8, 2, 1, 208, 112, 4, 55, 230, 210, 8, 6, 1, 208, 112, 4, 223,
+    121, 247, 150, 8, 2, 1, 208, 112, 4, 223, 121, 247, 150, 8, 6, 1, 124, 4,
+    55, 230, 210, 8, 2, 1, 124, 4, 55, 230, 210, 8, 6, 1, 124, 4, 223, 121,
+    247, 150, 8, 2, 1, 124, 4, 223, 121, 247, 150, 8, 6, 1, 206, 159, 4, 242,
+    39, 63, 8, 2, 1, 206, 159, 4, 242, 39, 63, 8, 6, 1, 200, 229, 4, 242, 39,
+    63, 8, 2, 1, 200, 229, 4, 242, 39, 63, 8, 6, 1, 192, 237, 8, 2, 1, 192,
+    237, 8, 6, 1, 230, 125, 4, 246, 207, 8, 2, 1, 230, 125, 4, 246, 207, 8,
+    6, 1, 215, 152, 4, 184, 51, 220, 16, 8, 2, 1, 238, 96, 4, 238, 142, 8, 6,
+    1, 211, 130, 8, 2, 1, 211, 130, 8, 6, 1, 192, 156, 4, 128, 8, 2, 1, 192,
+    156, 4, 128, 8, 6, 1, 41, 4, 78, 58, 8, 2, 1, 41, 4, 78, 58, 8, 6, 1,
+    234, 253, 4, 246, 151, 8, 2, 1, 234, 253, 4, 246, 151, 8, 6, 1, 185, 4,
+    237, 15, 26, 217, 214, 8, 2, 1, 185, 4, 237, 15, 26, 217, 214, 8, 6, 1,
+    185, 4, 199, 91, 26, 217, 214, 8, 2, 1, 185, 4, 199, 91, 26, 217, 214, 8,
+    6, 1, 185, 4, 78, 58, 8, 2, 1, 185, 4, 78, 58, 8, 6, 1, 185, 4, 78, 95,
+    26, 217, 214, 8, 2, 1, 185, 4, 78, 95, 26, 217, 214, 8, 6, 1, 193, 149,
+    4, 217, 214, 8, 2, 1, 193, 149, 4, 217, 214, 8, 2, 1, 220, 202, 4, 238,
+    142, 8, 2, 1, 215, 152, 4, 238, 142, 8, 2, 1, 200, 229, 4, 238, 142, 8,
+    2, 1, 236, 113, 223, 65, 8, 2, 1, 237, 171, 236, 230, 8, 2, 1, 208, 178,
+    236, 230, 8, 6, 1, 41, 4, 111, 8, 6, 1, 247, 53, 4, 111, 8, 2, 1, 247,
+    53, 4, 111, 8, 6, 1, 220, 202, 4, 161, 8, 6, 1, 200, 229, 4, 237, 11,
+    111, 8, 2, 1, 206, 159, 4, 201, 75, 200, 147, 8, 2, 1, 192, 156, 4, 201,
+    75, 200, 147, 8, 6, 1, 231, 6, 201, 238, 8, 2, 1, 231, 6, 201, 238, 8, 6,
+    1, 76, 4, 111, 8, 6, 1, 124, 161, 8, 6, 1, 163, 196, 236, 8, 6, 1, 234,
+    253, 4, 111, 8, 2, 1, 234, 253, 4, 111, 8, 6, 1, 223, 66, 4, 111, 8, 2,
+    1, 223, 66, 4, 111, 8, 6, 1, 2, 208, 248, 4, 229, 15, 200, 147, 8, 2, 1,
+    208, 248, 4, 229, 15, 200, 147, 8, 6, 1, 208, 112, 4, 111, 8, 2, 1, 208,
+    112, 4, 111, 8, 6, 1, 193, 149, 4, 111, 8, 2, 1, 193, 149, 4, 111, 8, 2,
+    1, 163, 64, 8, 2, 1, 250, 252, 8, 2, 1, 163, 250, 252, 8, 2, 1, 76, 4,
+    128, 8, 2, 1, 211, 184, 74, 8, 2, 1, 247, 53, 4, 238, 142, 8, 2, 1, 238,
+    96, 4, 200, 147, 8, 2, 1, 238, 96, 4, 128, 8, 2, 1, 207, 168, 71, 8, 2,
+    1, 205, 240, 8, 2, 1, 205, 241, 4, 128, 8, 2, 1, 211, 184, 71, 8, 2, 1,
+    207, 168, 211, 184, 71, 8, 2, 1, 207, 168, 211, 184, 234, 253, 4, 128, 8,
+    2, 1, 242, 84, 207, 168, 211, 184, 71, 8, 2, 1, 236, 113, 223, 66, 4,
+    111, 8, 2, 1, 232, 45, 4, 128, 8, 2, 1, 27, 232, 44, 8, 1, 2, 6, 232, 44,
+    8, 2, 1, 231, 204, 8, 2, 1, 208, 32, 228, 208, 8, 2, 1, 163, 230, 124, 8,
+    2, 1, 230, 125, 4, 128, 8, 2, 1, 229, 207, 4, 128, 8, 2, 1, 228, 97, 4,
+    111, 8, 2, 1, 223, 111, 8, 1, 2, 6, 70, 8, 2, 1, 220, 202, 4, 85, 199,
+    90, 8, 2, 1, 220, 202, 4, 248, 82, 8, 2, 1, 220, 202, 4, 207, 174, 128,
+    8, 2, 1, 219, 225, 8, 2, 1, 163, 218, 236, 8, 2, 1, 163, 218, 237, 4,
+    184, 220, 16, 8, 2, 1, 218, 237, 4, 128, 8, 2, 1, 215, 152, 4, 46, 128,
+    8, 2, 1, 215, 152, 4, 207, 174, 128, 8, 1, 2, 6, 215, 151, 8, 2, 1, 248,
+    188, 74, 8, 1, 2, 6, 212, 0, 8, 2, 1, 242, 84, 211, 216, 8, 2, 1, 210,
+    77, 8, 2, 1, 163, 150, 8, 2, 1, 163, 208, 112, 4, 184, 220, 16, 8, 2, 1,
+    163, 208, 112, 4, 128, 8, 2, 1, 208, 112, 4, 184, 220, 16, 8, 2, 1, 208,
+    112, 4, 200, 147, 8, 2, 1, 208, 112, 4, 232, 221, 8, 2, 1, 207, 168, 208,
+    112, 4, 232, 221, 8, 1, 2, 6, 150, 8, 1, 2, 6, 223, 121, 150, 8, 2, 1,
+    206, 159, 4, 128, 8, 2, 1, 233, 255, 8, 2, 1, 236, 113, 223, 66, 4, 201,
+    208, 26, 128, 8, 2, 1, 202, 103, 207, 168, 233, 255, 8, 2, 1, 234, 0, 4,
+    238, 142, 8, 2, 1, 163, 200, 228, 8, 2, 1, 200, 229, 4, 207, 174, 128, 8,
+    2, 1, 124, 161, 8, 2, 1, 197, 34, 8, 2, 1, 196, 237, 4, 128, 8, 2, 1,
+    163, 196, 236, 8, 2, 1, 163, 194, 202, 8, 2, 1, 163, 193, 148, 8, 1, 2,
+    6, 193, 148, 8, 2, 1, 192, 156, 4, 207, 174, 128, 8, 2, 1, 192, 156, 4,
+    238, 142, 8, 2, 1, 233, 166, 8, 2, 1, 233, 167, 4, 238, 142, 8, 1, 231,
+    6, 201, 238, 8, 1, 210, 85, 195, 248, 232, 95, 8, 1, 223, 121, 231, 6,
+    201, 238, 8, 1, 201, 216, 247, 52, 8, 1, 248, 25, 242, 96, 8, 1, 2, 6,
+    249, 226, 8, 2, 1, 242, 84, 211, 184, 71, 8, 1, 2, 6, 232, 45, 4, 128, 8,
+    1, 2, 6, 230, 124, 8, 2, 1, 223, 66, 4, 238, 178, 8, 2, 1, 163, 222, 184,
+    8, 1, 2, 6, 165, 8, 2, 1, 208, 248, 4, 128, 8, 1, 231, 6, 201, 239, 4,
+    111, 8, 1, 207, 168, 231, 6, 201, 239, 4, 111, 8, 2, 1, 235, 19, 236,
+    230, 8, 2, 1, 237, 42, 236, 230, 8, 2, 1, 235, 19, 236, 231, 4, 238, 142,
+    8, 2, 1, 198, 120, 236, 230, 8, 2, 1, 200, 14, 236, 230, 8, 2, 1, 200,
+    86, 236, 231, 4, 238, 142, 8, 2, 1, 233, 25, 236, 230, 8, 2, 1, 219, 38,
+    236, 230, 8, 2, 1, 218, 238, 236, 230, 8, 1, 248, 25, 210, 132, 8, 1,
+    248, 33, 210, 132, 8, 2, 1, 163, 230, 125, 4, 232, 221, 8, 2, 1, 163,
+    230, 125, 4, 232, 222, 26, 200, 147, 73, 1, 2, 230, 124, 73, 1, 2, 230,
+    125, 4, 128, 73, 1, 2, 223, 65, 73, 1, 2, 150, 73, 1, 2, 163, 150, 73, 1,
+    2, 163, 208, 112, 4, 128, 73, 1, 2, 6, 223, 121, 150, 73, 1, 2, 194, 202,
+    73, 1, 2, 193, 148, 73, 1, 209, 99, 73, 1, 55, 209, 99, 73, 1, 163, 242,
+    38, 73, 1, 250, 147, 73, 1, 207, 168, 242, 38, 73, 1, 51, 138, 207, 81,
+    73, 1, 46, 138, 207, 81, 73, 1, 231, 6, 201, 238, 73, 1, 207, 168, 231,
+    6, 201, 238, 73, 1, 46, 250, 77, 73, 1, 51, 250, 77, 73, 1, 130, 250, 77,
+    73, 1, 142, 250, 77, 73, 1, 242, 122, 251, 143, 246, 207, 73, 1, 84, 219,
+    175, 73, 1, 217, 214, 73, 1, 251, 130, 251, 143, 73, 1, 230, 211, 251,
+    143, 73, 1, 132, 84, 219, 175, 73, 1, 132, 217, 214, 73, 1, 132, 230,
+    211, 251, 143, 73, 1, 132, 251, 130, 251, 143, 73, 1, 198, 182, 242, 47,
+    73, 1, 138, 198, 182, 242, 47, 73, 1, 246, 136, 51, 138, 207, 81, 73, 1,
+    246, 136, 46, 138, 207, 81, 73, 1, 130, 200, 159, 73, 1, 142, 200, 159,
+    73, 1, 102, 57, 73, 1, 216, 113, 57, 247, 150, 78, 58, 207, 82, 58, 211,
+    243, 2, 199, 90, 55, 251, 130, 251, 143, 73, 1, 207, 152, 128, 73, 1,
+    238, 184, 251, 143, 73, 1, 2, 231, 204, 73, 1, 2, 165, 73, 1, 2, 206,
+    158, 73, 1, 2, 193, 223, 73, 1, 2, 207, 168, 231, 6, 201, 238, 73, 1,
+    233, 188, 158, 161, 73, 1, 139, 158, 161, 73, 1, 216, 162, 158, 161, 73,
+    1, 132, 158, 161, 73, 1, 233, 187, 158, 161, 73, 1, 193, 11, 237, 66,
+    158, 77, 73, 1, 193, 96, 237, 66, 158, 77, 73, 1, 195, 246, 73, 1, 197,
+    73, 73, 1, 55, 250, 147, 73, 1, 132, 142, 250, 77, 73, 1, 132, 130, 250,
+    77, 73, 1, 132, 46, 250, 77, 73, 1, 132, 51, 250, 77, 73, 1, 132, 207,
+    81, 73, 1, 85, 230, 211, 251, 143, 73, 1, 85, 55, 230, 211, 251, 143, 73,
+    1, 85, 55, 251, 130, 251, 143, 73, 1, 132, 199, 90, 73, 1, 208, 39, 242,
+    47, 73, 1, 248, 100, 139, 199, 18, 73, 1, 234, 80, 139, 199, 18, 73, 1,
+    248, 100, 132, 199, 18, 73, 1, 234, 80, 132, 199, 18, 73, 1, 204, 3, 73,
+    1, 211, 184, 204, 3, 73, 1, 132, 46, 54, 38, 230, 211, 251, 143, 38, 251,
+    130, 251, 143, 38, 242, 122, 251, 143, 38, 199, 90, 38, 217, 214, 38,
+    211, 109, 38, 247, 150, 38, 78, 58, 38, 237, 14, 38, 229, 15, 58, 38,
+    207, 82, 58, 38, 55, 251, 130, 251, 143, 38, 246, 207, 38, 84, 219, 176,
+    58, 38, 55, 84, 219, 176, 58, 38, 55, 230, 211, 251, 143, 38, 246, 234,
+    38, 223, 121, 247, 150, 38, 163, 242, 39, 58, 38, 242, 39, 58, 38, 207,
+    168, 242, 39, 58, 38, 242, 39, 95, 207, 101, 38, 230, 211, 251, 144, 63,
+    38, 251, 130, 251, 144, 63, 38, 46, 200, 160, 63, 38, 51, 200, 160, 63,
+    38, 46, 250, 208, 58, 38, 228, 208, 38, 46, 138, 207, 82, 63, 38, 130,
+    200, 160, 63, 38, 142, 200, 160, 63, 38, 102, 3, 63, 38, 216, 113, 3, 63,
+    38, 211, 47, 229, 15, 63, 38, 207, 174, 229, 15, 63, 38, 78, 63, 38, 237,
+    15, 63, 38, 207, 82, 63, 38, 242, 39, 63, 38, 246, 151, 38, 211, 243, 38,
+    84, 219, 176, 63, 38, 247, 143, 63, 38, 223, 121, 55, 250, 113, 63, 38,
+    246, 208, 63, 38, 242, 122, 251, 144, 63, 38, 247, 151, 63, 38, 223, 121,
+    247, 151, 63, 38, 199, 91, 63, 38, 217, 215, 63, 38, 132, 219, 175, 38,
+    55, 132, 219, 175, 38, 199, 91, 211, 110, 38, 203, 195, 201, 208, 211,
+    110, 38, 184, 201, 208, 211, 110, 38, 203, 195, 202, 190, 211, 110, 38,
+    184, 202, 190, 211, 110, 38, 51, 138, 207, 82, 63, 38, 223, 121, 247,
+    143, 63, 38, 50, 63, 38, 205, 217, 63, 38, 193, 224, 58, 38, 84, 199, 90,
+    38, 55, 211, 109, 38, 230, 211, 158, 77, 38, 251, 130, 158, 77, 38, 33,
+    210, 126, 38, 33, 221, 78, 38, 33, 237, 8, 198, 255, 38, 33, 192, 222,
+    38, 247, 143, 58, 38, 234, 30, 3, 63, 38, 55, 84, 219, 176, 63, 38, 46,
+    250, 208, 63, 38, 213, 111, 199, 91, 58, 38, 229, 21, 58, 38, 251, 1,
+    187, 115, 58, 38, 46, 51, 61, 63, 38, 197, 30, 61, 63, 38, 230, 217, 222,
+    228, 38, 51, 250, 78, 58, 38, 46, 138, 207, 82, 58, 38, 233, 22, 38, 193,
+    224, 63, 38, 46, 250, 78, 63, 38, 51, 250, 78, 63, 38, 51, 250, 78, 26,
+    130, 250, 78, 63, 38, 51, 138, 207, 82, 58, 38, 78, 95, 207, 101, 38,
+    250, 38, 63, 38, 55, 207, 82, 63, 38, 192, 21, 58, 38, 55, 247, 151, 63,
+    38, 55, 247, 150, 38, 55, 217, 214, 38, 55, 217, 215, 63, 38, 55, 199,
+    90, 38, 55, 223, 121, 247, 150, 38, 55, 94, 61, 63, 38, 8, 2, 1, 64, 38,
+    8, 2, 1, 71, 38, 8, 2, 1, 70, 38, 8, 2, 1, 74, 38, 8, 2, 1, 68, 38, 8, 2,
+    1, 247, 52, 38, 8, 2, 1, 238, 95, 38, 8, 2, 1, 230, 124, 38, 8, 2, 1,
+    218, 236, 38, 8, 2, 1, 150, 38, 8, 2, 1, 200, 228, 38, 8, 2, 1, 196, 236,
+    38, 8, 2, 1, 193, 223, 33, 6, 1, 229, 195, 33, 2, 1, 229, 195, 33, 6, 1,
+    250, 112, 206, 43, 33, 2, 1, 250, 112, 206, 43, 33, 212, 234, 57, 33,
+    106, 212, 234, 57, 33, 6, 1, 211, 30, 236, 238, 33, 2, 1, 211, 30, 236,
+    238, 33, 192, 222, 33, 2, 207, 168, 219, 18, 203, 100, 109, 33, 2, 235,
+    111, 219, 18, 203, 100, 109, 33, 2, 207, 168, 235, 111, 219, 18, 203,
+    100, 109, 33, 208, 159, 77, 33, 6, 1, 192, 229, 33, 198, 255, 33, 237, 8,
+    198, 255, 33, 6, 1, 250, 253, 4, 198, 255, 33, 250, 191, 200, 43, 33, 6,
+    1, 234, 33, 4, 198, 255, 33, 6, 1, 233, 241, 4, 198, 255, 33, 6, 1, 223,
+    112, 4, 198, 255, 33, 6, 1, 211, 215, 4, 198, 255, 33, 6, 1, 197, 35, 4,
+    198, 255, 33, 6, 1, 211, 217, 4, 198, 255, 33, 2, 1, 223, 112, 4, 237, 8,
+    26, 198, 255, 33, 6, 1, 250, 252, 33, 6, 1, 248, 63, 33, 6, 1, 231, 204,
+    33, 6, 1, 237, 76, 33, 6, 1, 234, 32, 33, 6, 1, 192, 75, 33, 6, 1, 233,
+    240, 33, 6, 1, 199, 206, 33, 6, 1, 223, 111, 33, 6, 1, 222, 106, 33, 6,
+    1, 220, 90, 33, 6, 1, 215, 241, 33, 6, 1, 213, 22, 33, 6, 1, 193, 196,
+    33, 6, 1, 211, 214, 33, 6, 1, 210, 51, 33, 6, 1, 207, 153, 33, 6, 1, 203,
+    99, 33, 6, 1, 200, 100, 33, 6, 1, 197, 34, 33, 6, 1, 210, 77, 33, 6, 1,
+    242, 215, 33, 6, 1, 209, 62, 33, 6, 1, 211, 216, 33, 6, 1, 223, 112, 4,
+    237, 7, 33, 6, 1, 197, 35, 4, 237, 7, 33, 2, 1, 250, 253, 4, 198, 255,
+    33, 2, 1, 234, 33, 4, 198, 255, 33, 2, 1, 233, 241, 4, 198, 255, 33, 2,
+    1, 223, 112, 4, 198, 255, 33, 2, 1, 197, 35, 4, 237, 8, 26, 198, 255, 33,
+    2, 1, 250, 252, 33, 2, 1, 248, 63, 33, 2, 1, 231, 204, 33, 2, 1, 237, 76,
+    33, 2, 1, 234, 32, 33, 2, 1, 192, 75, 33, 2, 1, 233, 240, 33, 2, 1, 199,
+    206, 33, 2, 1, 223, 111, 33, 2, 1, 222, 106, 33, 2, 1, 220, 90, 33, 2, 1,
+    215, 241, 33, 2, 1, 213, 22, 33, 2, 1, 193, 196, 33, 2, 1, 211, 214, 33,
+    2, 1, 210, 51, 33, 2, 1, 207, 153, 33, 2, 1, 52, 203, 99, 33, 2, 1, 203,
+    99, 33, 2, 1, 200, 100, 33, 2, 1, 197, 34, 33, 2, 1, 210, 77, 33, 2, 1,
+    242, 215, 33, 2, 1, 209, 62, 33, 2, 1, 211, 216, 33, 2, 1, 223, 112, 4,
+    237, 7, 33, 2, 1, 197, 35, 4, 237, 7, 33, 2, 1, 211, 215, 4, 198, 255,
+    33, 2, 1, 197, 35, 4, 198, 255, 33, 2, 1, 211, 217, 4, 198, 255, 33, 6,
+    222, 136, 109, 33, 248, 64, 109, 33, 199, 207, 109, 33, 197, 35, 4, 229,
+    15, 109, 33, 197, 35, 4, 251, 130, 26, 229, 15, 109, 33, 197, 35, 4, 237,
+    15, 26, 229, 15, 109, 33, 210, 78, 109, 33, 210, 52, 109, 33, 222, 136,
+    109, 33, 1, 250, 112, 221, 82, 33, 2, 1, 250, 112, 221, 82, 33, 1, 201,
+    248, 33, 2, 1, 201, 248, 33, 1, 236, 238, 33, 2, 1, 236, 238, 33, 1, 221,
+    82, 33, 2, 1, 221, 82, 33, 1, 206, 43, 33, 2, 1, 206, 43, 92, 6, 1, 204,
+    4, 92, 2, 1, 204, 4, 92, 6, 1, 233, 32, 92, 2, 1, 233, 32, 92, 6, 1, 221,
+    232, 92, 2, 1, 221, 232, 92, 6, 1, 229, 6, 92, 2, 1, 229, 6, 92, 6, 1,
+    231, 199, 92, 2, 1, 231, 199, 92, 6, 1, 203, 226, 92, 2, 1, 203, 226, 92,
+    6, 1, 237, 92, 92, 2, 1, 237, 92, 33, 222, 107, 109, 33, 207, 154, 109,
+    33, 219, 18, 203, 100, 109, 33, 1, 192, 229, 33, 6, 199, 207, 109, 33,
+    219, 18, 234, 33, 109, 33, 207, 168, 219, 18, 234, 33, 109, 33, 6, 1,
+    203, 211, 33, 2, 1, 203, 211, 33, 6, 219, 18, 203, 100, 109, 33, 6, 1,
+    206, 40, 33, 2, 1, 206, 40, 33, 207, 154, 4, 201, 208, 109, 33, 6, 207,
+    168, 219, 18, 203, 100, 109, 33, 6, 235, 111, 219, 18, 203, 100, 109, 33,
+    6, 207, 168, 235, 111, 219, 18, 203, 100, 109, 42, 6, 1, 223, 252, 4,
+    230, 210, 42, 6, 1, 223, 116, 42, 6, 1, 236, 164, 42, 6, 1, 231, 15, 42,
+    6, 1, 197, 89, 223, 251, 42, 6, 1, 235, 14, 42, 6, 1, 247, 62, 70, 42, 6,
+    1, 193, 22, 42, 6, 1, 223, 41, 42, 6, 1, 219, 140, 42, 6, 1, 213, 249,
+    42, 6, 1, 198, 106, 42, 6, 1, 221, 141, 42, 6, 1, 228, 97, 4, 230, 210,
+    42, 6, 1, 203, 195, 68, 42, 6, 1, 235, 10, 42, 6, 1, 64, 42, 6, 1, 248,
+    123, 42, 6, 1, 196, 123, 42, 6, 1, 231, 70, 42, 6, 1, 237, 116, 42, 6, 1,
+    223, 251, 42, 6, 1, 192, 62, 42, 6, 1, 192, 85, 42, 6, 1, 70, 42, 6, 1,
+    203, 195, 70, 42, 6, 1, 160, 42, 6, 1, 234, 124, 42, 6, 1, 234, 99, 42,
+    6, 1, 234, 88, 42, 6, 1, 74, 42, 6, 1, 210, 181, 42, 6, 1, 234, 21, 42,
+    6, 1, 234, 9, 42, 6, 1, 200, 79, 42, 6, 1, 68, 42, 6, 1, 234, 164, 42, 6,
+    1, 144, 42, 6, 1, 198, 112, 42, 6, 1, 242, 245, 42, 6, 1, 204, 64, 42, 6,
+    1, 204, 15, 42, 6, 1, 230, 26, 57, 42, 6, 1, 193, 47, 42, 6, 1, 202, 198,
+    57, 42, 6, 1, 71, 42, 6, 1, 192, 214, 42, 6, 1, 168, 42, 2, 1, 64, 42, 2,
+    1, 248, 123, 42, 2, 1, 196, 123, 42, 2, 1, 231, 70, 42, 2, 1, 237, 116,
+    42, 2, 1, 223, 251, 42, 2, 1, 192, 62, 42, 2, 1, 192, 85, 42, 2, 1, 70,
+    42, 2, 1, 203, 195, 70, 42, 2, 1, 160, 42, 2, 1, 234, 124, 42, 2, 1, 234,
+    99, 42, 2, 1, 234, 88, 42, 2, 1, 74, 42, 2, 1, 210, 181, 42, 2, 1, 234,
+    21, 42, 2, 1, 234, 9, 42, 2, 1, 200, 79, 42, 2, 1, 68, 42, 2, 1, 234,
+    164, 42, 2, 1, 144, 42, 2, 1, 198, 112, 42, 2, 1, 242, 245, 42, 2, 1,
+    204, 64, 42, 2, 1, 204, 15, 42, 2, 1, 230, 26, 57, 42, 2, 1, 193, 47, 42,
+    2, 1, 202, 198, 57, 42, 2, 1, 71, 42, 2, 1, 192, 214, 42, 2, 1, 168, 42,
+    2, 1, 223, 252, 4, 230, 210, 42, 2, 1, 223, 116, 42, 2, 1, 236, 164, 42,
+    2, 1, 231, 15, 42, 2, 1, 197, 89, 223, 251, 42, 2, 1, 235, 14, 42, 2, 1,
+    247, 62, 70, 42, 2, 1, 193, 22, 42, 2, 1, 223, 41, 42, 2, 1, 219, 140,
+    42, 2, 1, 213, 249, 42, 2, 1, 198, 106, 42, 2, 1, 221, 141, 42, 2, 1,
+    228, 97, 4, 230, 210, 42, 2, 1, 203, 195, 68, 42, 2, 1, 235, 10, 42, 6,
+    1, 211, 216, 42, 2, 1, 211, 216, 42, 6, 1, 193, 84, 42, 2, 1, 193, 84,
+    42, 6, 1, 223, 109, 71, 42, 2, 1, 223, 109, 71, 42, 6, 1, 219, 147, 192,
+    179, 42, 2, 1, 219, 147, 192, 179, 42, 6, 1, 223, 109, 219, 147, 192,
+    179, 42, 2, 1, 223, 109, 219, 147, 192, 179, 42, 6, 1, 248, 28, 192, 179,
+    42, 2, 1, 248, 28, 192, 179, 42, 6, 1, 223, 109, 248, 28, 192, 179, 42,
+    2, 1, 223, 109, 248, 28, 192, 179, 42, 6, 1, 221, 49, 42, 2, 1, 221, 49,
+    42, 6, 1, 209, 62, 42, 2, 1, 209, 62, 42, 6, 1, 232, 216, 42, 2, 1, 232,
+    216, 42, 6, 1, 223, 67, 42, 2, 1, 223, 67, 42, 6, 1, 223, 68, 4, 55, 230,
+    211, 251, 143, 42, 2, 1, 223, 68, 4, 55, 230, 211, 251, 143, 42, 6, 1,
+    197, 92, 42, 2, 1, 197, 92, 42, 6, 1, 207, 9, 211, 216, 42, 2, 1, 207, 9,
+    211, 216, 42, 6, 1, 211, 217, 4, 199, 60, 42, 2, 1, 211, 217, 4, 199, 60,
+    42, 6, 1, 211, 140, 42, 2, 1, 211, 140, 42, 6, 1, 221, 82, 42, 2, 1, 221,
+    82, 42, 199, 164, 57, 38, 42, 199, 60, 38, 42, 211, 48, 38, 42, 237, 183,
+    209, 200, 38, 42, 209, 56, 209, 200, 38, 42, 209, 184, 38, 42, 228, 163,
+    199, 164, 57, 38, 42, 216, 124, 57, 42, 6, 1, 203, 195, 228, 97, 4, 200,
+    147, 42, 2, 1, 203, 195, 228, 97, 4, 200, 147, 42, 6, 1, 204, 176, 57,
+    42, 2, 1, 204, 176, 57, 42, 6, 1, 234, 22, 4, 199, 117, 42, 2, 1, 234,
+    22, 4, 199, 117, 42, 6, 1, 231, 71, 4, 197, 33, 42, 2, 1, 231, 71, 4,
+    197, 33, 42, 6, 1, 231, 71, 4, 111, 42, 2, 1, 231, 71, 4, 111, 42, 6, 1,
+    231, 71, 4, 85, 128, 42, 2, 1, 231, 71, 4, 85, 128, 42, 6, 1, 192, 63, 4,
+    237, 59, 42, 2, 1, 192, 63, 4, 237, 59, 42, 6, 1, 192, 86, 4, 237, 59,
+    42, 2, 1, 192, 86, 4, 237, 59, 42, 6, 1, 222, 174, 4, 237, 59, 42, 2, 1,
+    222, 174, 4, 237, 59, 42, 6, 1, 222, 174, 4, 84, 111, 42, 2, 1, 222, 174,
+    4, 84, 111, 42, 6, 1, 222, 174, 4, 111, 42, 2, 1, 222, 174, 4, 111, 42,
+    6, 1, 248, 176, 160, 42, 2, 1, 248, 176, 160, 42, 6, 1, 234, 89, 4, 237,
+    59, 42, 2, 1, 234, 89, 4, 237, 59, 42, 6, 34, 234, 89, 231, 70, 42, 2,
+    34, 234, 89, 231, 70, 42, 6, 1, 210, 182, 4, 85, 128, 42, 2, 1, 210, 182,
+    4, 85, 128, 42, 6, 1, 251, 150, 144, 42, 2, 1, 251, 150, 144, 42, 6, 1,
+    234, 10, 4, 237, 59, 42, 2, 1, 234, 10, 4, 237, 59, 42, 6, 1, 200, 80, 4,
+    237, 59, 42, 2, 1, 200, 80, 4, 237, 59, 42, 6, 1, 201, 230, 68, 42, 2, 1,
+    201, 230, 68, 42, 6, 1, 201, 230, 124, 4, 111, 42, 2, 1, 201, 230, 124,
+    4, 111, 42, 6, 1, 230, 113, 4, 237, 59, 42, 2, 1, 230, 113, 4, 237, 59,
+    42, 6, 34, 200, 80, 198, 112, 42, 2, 34, 200, 80, 198, 112, 42, 6, 1,
+    242, 246, 4, 237, 59, 42, 2, 1, 242, 246, 4, 237, 59, 42, 6, 1, 242, 246,
+    4, 84, 111, 42, 2, 1, 242, 246, 4, 84, 111, 42, 6, 1, 203, 237, 42, 2, 1,
+    203, 237, 42, 6, 1, 251, 150, 242, 245, 42, 2, 1, 251, 150, 242, 245, 42,
+    6, 1, 251, 150, 242, 246, 4, 237, 59, 42, 2, 1, 251, 150, 242, 246, 4,
+    237, 59, 42, 1, 211, 37, 42, 6, 1, 192, 63, 4, 247, 150, 42, 2, 1, 192,
+    63, 4, 247, 150, 42, 6, 1, 222, 174, 4, 128, 42, 2, 1, 222, 174, 4, 128,
+    42, 6, 1, 234, 125, 4, 200, 147, 42, 2, 1, 234, 125, 4, 200, 147, 42, 6,
+    1, 234, 89, 4, 128, 42, 2, 1, 234, 89, 4, 128, 42, 6, 1, 234, 89, 4, 200,
+    147, 42, 2, 1, 234, 89, 4, 200, 147, 42, 6, 1, 221, 243, 242, 245, 42, 2,
+    1, 221, 243, 242, 245, 42, 6, 1, 234, 100, 4, 200, 147, 42, 2, 1, 234,
+    100, 4, 200, 147, 42, 2, 1, 211, 37, 42, 6, 1, 41, 4, 247, 150, 42, 2, 1,
+    41, 4, 247, 150, 42, 6, 1, 41, 4, 237, 14, 42, 2, 1, 41, 4, 237, 14, 42,
+    6, 34, 41, 223, 251, 42, 2, 34, 41, 223, 251, 42, 6, 1, 223, 252, 4, 247,
+    150, 42, 2, 1, 223, 252, 4, 247, 150, 42, 6, 1, 205, 240, 42, 2, 1, 205,
+    240, 42, 6, 1, 205, 241, 4, 237, 14, 42, 2, 1, 205, 241, 4, 237, 14, 42,
+    6, 1, 192, 63, 4, 237, 14, 42, 2, 1, 192, 63, 4, 237, 14, 42, 6, 1, 192,
+    86, 4, 237, 14, 42, 2, 1, 192, 86, 4, 237, 14, 42, 6, 1, 251, 150, 235,
+    14, 42, 2, 1, 251, 150, 235, 14, 42, 6, 1, 228, 97, 4, 217, 214, 42, 2,
+    1, 228, 97, 4, 217, 214, 42, 6, 1, 228, 97, 4, 237, 14, 42, 2, 1, 228,
+    97, 4, 237, 14, 42, 6, 1, 185, 4, 237, 14, 42, 2, 1, 185, 4, 237, 14, 42,
+    6, 1, 248, 188, 74, 42, 2, 1, 248, 188, 74, 42, 6, 1, 248, 188, 185, 4,
+    237, 14, 42, 2, 1, 248, 188, 185, 4, 237, 14, 42, 6, 1, 234, 253, 4, 237,
+    14, 42, 2, 1, 234, 253, 4, 237, 14, 42, 6, 1, 124, 4, 217, 214, 42, 2, 1,
+    124, 4, 217, 214, 42, 6, 1, 124, 4, 237, 14, 42, 2, 1, 124, 4, 237, 14,
+    42, 6, 1, 124, 4, 55, 251, 129, 42, 2, 1, 124, 4, 55, 251, 129, 42, 6, 1,
+    242, 246, 4, 237, 14, 42, 2, 1, 242, 246, 4, 237, 14, 42, 6, 1, 231, 71,
+    4, 237, 59, 42, 2, 1, 231, 71, 4, 237, 59, 42, 6, 1, 193, 48, 4, 237, 14,
+    42, 2, 1, 193, 48, 4, 237, 14, 42, 6, 1, 231, 71, 4, 201, 208, 26, 128,
+    42, 2, 1, 231, 71, 4, 201, 208, 26, 128, 42, 6, 1, 230, 113, 4, 128, 42,
+    2, 1, 230, 113, 4, 128, 42, 6, 1, 230, 113, 4, 111, 42, 2, 1, 230, 113,
+    4, 111, 42, 6, 1, 221, 92, 237, 116, 42, 2, 1, 221, 92, 237, 116, 42, 6,
+    1, 221, 92, 236, 164, 42, 2, 1, 221, 92, 236, 164, 42, 6, 1, 221, 92,
+    192, 12, 42, 2, 1, 221, 92, 192, 12, 42, 6, 1, 221, 92, 235, 6, 42, 2, 1,
+    221, 92, 235, 6, 42, 6, 1, 221, 92, 219, 140, 42, 2, 1, 221, 92, 219,
+    140, 42, 6, 1, 221, 92, 213, 249, 42, 2, 1, 221, 92, 213, 249, 42, 6, 1,
+    221, 92, 203, 20, 42, 2, 1, 221, 92, 203, 20, 42, 6, 1, 221, 92, 199, 54,
+    42, 2, 1, 221, 92, 199, 54, 42, 6, 1, 207, 168, 192, 85, 42, 2, 1, 207,
+    168, 192, 85, 42, 6, 1, 234, 125, 4, 128, 42, 2, 1, 234, 125, 4, 128, 42,
+    6, 1, 219, 222, 42, 2, 1, 219, 222, 42, 6, 1, 207, 156, 42, 2, 1, 207,
+    156, 42, 6, 1, 193, 118, 42, 2, 1, 193, 118, 42, 6, 1, 208, 239, 42, 2,
+    1, 208, 239, 42, 6, 1, 194, 111, 42, 2, 1, 194, 111, 42, 6, 1, 251, 22,
+    160, 42, 2, 1, 251, 22, 160, 42, 6, 1, 234, 125, 4, 85, 128, 42, 2, 1,
+    234, 125, 4, 85, 128, 42, 6, 1, 234, 89, 4, 85, 128, 42, 2, 1, 234, 89,
+    4, 85, 128, 42, 6, 1, 210, 182, 4, 237, 59, 42, 2, 1, 210, 182, 4, 237,
+    59, 42, 6, 1, 203, 238, 4, 237, 59, 42, 2, 1, 203, 238, 4, 237, 59, 42,
+    6, 1, 234, 89, 4, 46, 128, 42, 2, 1, 234, 89, 4, 46, 128, 42, 6, 1, 234,
+    254, 42, 2, 1, 234, 254, 42, 6, 1, 237, 165, 42, 2, 1, 237, 165, 42, 6,
+    1, 234, 125, 4, 237, 59, 42, 2, 1, 234, 125, 4, 237, 59, 250, 91, 6, 1,
+    249, 233, 250, 91, 6, 1, 248, 80, 250, 91, 6, 1, 231, 33, 250, 91, 6, 1,
+    238, 0, 250, 91, 6, 1, 234, 177, 250, 91, 6, 1, 192, 112, 250, 91, 6, 1,
+    234, 157, 250, 91, 6, 1, 233, 242, 250, 91, 6, 1, 155, 250, 91, 6, 1,
+    192, 62, 250, 91, 6, 1, 223, 159, 250, 91, 6, 1, 219, 144, 250, 91, 6, 1,
+    193, 201, 250, 91, 6, 1, 247, 19, 250, 91, 6, 1, 222, 30, 250, 91, 6, 1,
+    229, 43, 250, 91, 6, 1, 223, 62, 250, 91, 6, 1, 231, 81, 250, 91, 6, 1,
+    242, 235, 250, 91, 6, 1, 217, 5, 250, 91, 6, 1, 193, 22, 250, 91, 6, 1,
+    213, 96, 250, 91, 6, 1, 204, 64, 250, 91, 6, 1, 195, 252, 250, 91, 6, 1,
+    246, 117, 250, 91, 6, 1, 210, 161, 250, 91, 6, 1, 223, 23, 250, 91, 6, 1,
+    167, 250, 91, 6, 1, 205, 194, 250, 91, 6, 1, 196, 44, 250, 91, 6, 1, 199,
+    57, 250, 91, 6, 1, 207, 221, 250, 91, 6, 1, 242, 63, 250, 91, 6, 1, 193,
+    6, 250, 91, 6, 1, 209, 238, 250, 91, 6, 1, 222, 41, 250, 91, 6, 1, 211,
+    241, 250, 91, 6, 1, 233, 34, 250, 91, 73, 1, 46, 138, 207, 81, 250, 91,
+    250, 147, 250, 91, 234, 92, 77, 250, 91, 233, 204, 77, 250, 91, 242, 38,
+    250, 91, 208, 159, 77, 250, 91, 251, 151, 77, 250, 91, 2, 1, 163, 249,
+    233, 250, 91, 2, 1, 249, 233, 250, 91, 2, 1, 248, 80, 250, 91, 2, 1, 231,
+    33, 250, 91, 2, 1, 238, 0, 250, 91, 2, 1, 234, 177, 250, 91, 2, 1, 192,
+    112, 250, 91, 2, 1, 234, 157, 250, 91, 2, 1, 233, 242, 250, 91, 2, 1,
+    155, 250, 91, 2, 1, 192, 62, 250, 91, 2, 1, 223, 159, 250, 91, 2, 1, 219,
+    144, 250, 91, 2, 1, 193, 201, 250, 91, 2, 1, 247, 19, 250, 91, 2, 1, 222,
+    30, 250, 91, 2, 1, 229, 43, 250, 91, 2, 1, 223, 62, 250, 91, 2, 1, 231,
+    81, 250, 91, 2, 1, 242, 235, 250, 91, 2, 1, 217, 5, 250, 91, 2, 1, 193,
+    22, 250, 91, 2, 1, 213, 96, 250, 91, 2, 1, 204, 64, 250, 91, 2, 1, 195,
+    252, 250, 91, 2, 1, 246, 117, 250, 91, 2, 1, 210, 161, 250, 91, 2, 1,
+    223, 23, 250, 91, 2, 1, 167, 250, 91, 2, 1, 205, 194, 250, 91, 2, 1, 196,
+    44, 250, 91, 2, 1, 199, 57, 250, 91, 2, 1, 207, 221, 250, 91, 2, 1, 242,
+    63, 250, 91, 2, 1, 193, 6, 250, 91, 2, 1, 209, 238, 250, 91, 2, 1, 222,
+    41, 250, 91, 2, 1, 211, 241, 250, 91, 2, 1, 233, 34, 250, 91, 2, 34, 234,
+    178, 193, 6, 250, 91, 2, 1, 11, 4, 111, 250, 91, 232, 71, 201, 238, 250,
+    91, 228, 111, 207, 100, 250, 91, 233, 238, 57, 220, 27, 250, 91, 233,
+    238, 57, 250, 91, 235, 83, 57, 129, 251, 144, 233, 233, 129, 251, 144,
+    205, 195, 129, 251, 144, 204, 40, 129, 251, 144, 192, 97, 208, 222, 129,
+    251, 144, 192, 97, 231, 223, 129, 251, 144, 199, 72, 129, 251, 144, 207,
+    165, 129, 251, 144, 192, 95, 129, 251, 144, 210, 214, 129, 251, 144, 193,
+    37, 129, 251, 144, 199, 247, 129, 251, 144, 231, 132, 129, 251, 144, 231,
+    133, 215, 198, 129, 251, 144, 231, 130, 129, 251, 144, 208, 223, 210,
+    246, 129, 251, 144, 200, 38, 231, 151, 129, 251, 144, 210, 187, 129, 251,
+    144, 250, 17, 230, 93, 129, 251, 144, 215, 208, 129, 251, 144, 217, 185,
+    129, 251, 144, 216, 250, 129, 251, 144, 216, 251, 222, 42, 129, 251, 144,
+    237, 192, 129, 251, 144, 208, 234, 129, 251, 144, 200, 38, 208, 217, 129,
+    251, 144, 193, 50, 248, 81, 192, 236, 129, 251, 144, 211, 223, 129, 251,
+    144, 223, 210, 129, 251, 144, 237, 93, 129, 251, 144, 192, 19, 129, 122,
+    217, 105, 242, 130, 129, 209, 192, 203, 240, 129, 209, 192, 230, 17, 205,
+    195, 129, 209, 192, 230, 17, 210, 205, 129, 209, 192, 230, 17, 208, 227,
+    129, 209, 192, 229, 139, 129, 209, 192, 198, 109, 129, 209, 192, 205,
+    195, 129, 209, 192, 210, 205, 129, 209, 192, 208, 227, 129, 209, 192,
+    229, 27, 129, 209, 192, 229, 28, 230, 19, 39, 196, 127, 129, 209, 192,
+    208, 163, 129, 209, 192, 237, 241, 211, 164, 217, 140, 129, 209, 192,
+    216, 239, 129, 209, 38, 217, 137, 129, 209, 192, 208, 51, 129, 209, 38,
+    210, 216, 129, 209, 192, 203, 225, 236, 114, 129, 209, 192, 203, 79, 236,
+    114, 129, 209, 38, 202, 199, 210, 207, 129, 122, 113, 236, 114, 129, 122,
+    106, 236, 114, 129, 209, 38, 212, 231, 230, 92, 129, 209, 192, 208, 228,
+    208, 222, 129, 1, 251, 26, 129, 1, 248, 65, 129, 1, 231, 31, 129, 1, 237,
+    221, 129, 1, 229, 255, 129, 1, 196, 127, 129, 1, 192, 89, 129, 1, 229,
+    196, 129, 1, 200, 8, 129, 1, 192, 239, 129, 1, 52, 222, 139, 129, 1, 222,
+    139, 129, 1, 220, 86, 129, 1, 52, 217, 12, 129, 1, 217, 12, 129, 1, 52,
+    212, 230, 129, 1, 212, 230, 129, 1, 206, 46, 129, 1, 249, 231, 129, 1,
+    52, 210, 181, 129, 1, 210, 181, 129, 1, 52, 198, 113, 129, 1, 198, 113,
+    129, 1, 208, 186, 129, 1, 207, 188, 129, 1, 203, 224, 129, 1, 200, 96,
+    129, 192, 240, 198, 185, 129, 34, 193, 20, 55, 196, 127, 129, 34, 193,
+    20, 196, 128, 192, 239, 129, 34, 193, 20, 55, 192, 239, 129, 209, 38,
+    231, 132, 129, 209, 38, 231, 130, 9, 31, 57, 9, 3, 206, 39, 9, 232, 147,
+    217, 122, 9, 3, 206, 81, 9, 3, 206, 42, 9, 31, 122, 58, 250, 126, 238,
+    158, 207, 22, 250, 126, 232, 112, 207, 22, 9, 208, 15, 250, 126, 210,
+    134, 216, 126, 57, 250, 126, 210, 134, 200, 31, 199, 165, 57, 251, 85,
+    57, 9, 242, 38, 9, 237, 179, 204, 165, 9, 209, 194, 196, 107, 57, 9, 3,
+    216, 104, 9, 3, 206, 57, 251, 29, 194, 135, 9, 3, 251, 29, 250, 42, 9, 3,
+    208, 49, 251, 28, 9, 3, 208, 57, 251, 6, 250, 199, 9, 3, 200, 138, 9, 2,
+    139, 200, 151, 9, 2, 139, 34, 157, 4, 220, 95, 4, 193, 64, 9, 2, 139,
+    192, 103, 9, 2, 233, 58, 9, 2, 237, 215, 9, 2, 222, 86, 9, 204, 180, 9,
+    1, 77, 9, 198, 170, 78, 209, 38, 77, 9, 208, 159, 77, 9, 1, 222, 90, 193,
+    64, 9, 1, 230, 66, 9, 1, 157, 4, 217, 210, 58, 9, 1, 157, 4, 230, 67, 58,
+    9, 1, 194, 120, 4, 230, 67, 58, 9, 1, 157, 4, 230, 67, 63, 9, 1, 97, 4,
+    230, 67, 58, 9, 1, 251, 26, 9, 1, 248, 96, 9, 1, 200, 50, 217, 133, 9, 1,
+    200, 49, 9, 1, 199, 220, 9, 1, 223, 37, 9, 1, 230, 89, 9, 1, 221, 245, 9,
+    1, 237, 227, 9, 1, 199, 232, 9, 1, 207, 221, 9, 1, 192, 103, 9, 1, 205,
+    201, 9, 1, 204, 8, 9, 1, 206, 86, 9, 1, 237, 250, 9, 1, 200, 151, 9, 1,
+    192, 106, 9, 1, 251, 57, 9, 1, 231, 79, 9, 1, 222, 40, 4, 103, 236, 112,
+    58, 9, 1, 222, 40, 4, 112, 236, 112, 63, 9, 1, 233, 62, 97, 4, 223, 121,
+    196, 236, 9, 1, 233, 62, 97, 4, 103, 236, 112, 58, 9, 1, 233, 62, 97, 4,
+    112, 236, 112, 58, 9, 200, 102, 9, 1, 233, 34, 9, 1, 208, 232, 9, 1, 222,
+    139, 9, 1, 220, 94, 9, 1, 217, 26, 9, 1, 213, 123, 9, 1, 229, 220, 9, 1,
+    194, 119, 9, 1, 157, 217, 168, 9, 1, 193, 64, 9, 233, 56, 9, 237, 213, 9,
+    222, 84, 9, 233, 58, 9, 237, 215, 9, 222, 86, 9, 204, 54, 9, 201, 131, 9,
+    217, 208, 58, 9, 230, 67, 58, 9, 230, 67, 63, 9, 201, 155, 251, 26, 9,
+    223, 121, 237, 215, 9, 122, 213, 124, 231, 50, 9, 191, 238, 9, 18, 3, 2,
+    196, 237, 58, 9, 18, 3, 223, 121, 2, 196, 237, 58, 9, 18, 3, 78, 63, 9,
+    207, 168, 237, 215, 9, 233, 59, 4, 103, 236, 111, 9, 194, 121, 230, 67,
+    63, 250, 126, 17, 192, 76, 250, 126, 17, 101, 250, 126, 17, 104, 250,
+    126, 17, 133, 250, 126, 17, 134, 250, 126, 17, 151, 250, 126, 17, 170,
+    250, 126, 17, 179, 250, 126, 17, 174, 250, 126, 17, 182, 9, 210, 133, 57,
+    9, 237, 108, 204, 165, 9, 199, 164, 204, 165, 9, 232, 214, 209, 190, 202,
+    19, 9, 1, 236, 113, 248, 96, 9, 1, 236, 113, 208, 232, 9, 1, 201, 107,
+    251, 26, 9, 1, 157, 194, 136, 9, 1, 157, 4, 194, 121, 230, 67, 58, 9, 1,
+    157, 4, 194, 121, 230, 67, 63, 9, 1, 139, 230, 66, 9, 1, 139, 230, 67,
+    251, 26, 9, 1, 139, 230, 67, 194, 119, 9, 1, 124, 4, 230, 67, 58, 9, 1,
+    139, 230, 67, 193, 64, 9, 1, 198, 75, 9, 1, 198, 73, 9, 1, 248, 106, 9,
+    1, 200, 50, 4, 207, 81, 9, 1, 200, 50, 4, 112, 236, 112, 95, 235, 91, 9,
+    1, 210, 161, 9, 1, 200, 47, 9, 1, 248, 94, 9, 1, 176, 4, 230, 67, 58, 9,
+    1, 176, 4, 103, 236, 112, 84, 58, 9, 1, 212, 187, 9, 1, 235, 23, 9, 1,
+    176, 4, 112, 236, 112, 58, 9, 1, 200, 83, 9, 1, 200, 81, 9, 1, 237, 156,
+    9, 1, 237, 228, 4, 207, 81, 9, 1, 237, 228, 4, 78, 63, 9, 1, 237, 228, 4,
+    78, 248, 84, 26, 2, 200, 151, 9, 1, 237, 234, 9, 1, 237, 158, 9, 1, 235,
+    52, 9, 1, 237, 228, 4, 112, 236, 112, 95, 235, 91, 9, 1, 237, 228, 4,
+    232, 119, 236, 112, 58, 9, 1, 206, 251, 9, 1, 207, 222, 4, 2, 196, 236,
+    9, 1, 207, 222, 4, 207, 81, 9, 1, 207, 222, 4, 78, 63, 9, 1, 207, 222, 4,
+    2, 196, 237, 63, 9, 1, 207, 222, 4, 78, 248, 84, 26, 78, 58, 9, 1, 207,
+    222, 4, 103, 236, 112, 58, 9, 1, 223, 34, 9, 1, 207, 222, 4, 232, 119,
+    236, 112, 58, 9, 1, 205, 202, 4, 78, 248, 84, 26, 78, 58, 9, 1, 205, 202,
+    4, 112, 236, 112, 63, 9, 1, 205, 202, 4, 112, 236, 112, 248, 84, 26, 112,
+    236, 112, 58, 9, 1, 206, 87, 4, 103, 236, 112, 63, 9, 1, 206, 87, 4, 112,
+    236, 112, 58, 9, 1, 200, 152, 4, 112, 236, 112, 58, 9, 1, 251, 58, 4,
+    112, 236, 112, 58, 9, 1, 236, 113, 233, 34, 9, 1, 233, 35, 4, 78, 216, 2,
+    63, 9, 1, 233, 35, 4, 78, 63, 9, 1, 196, 116, 9, 1, 233, 35, 4, 112, 236,
+    112, 63, 9, 1, 210, 159, 9, 1, 208, 233, 4, 78, 58, 9, 1, 208, 233, 4,
+    112, 236, 112, 58, 9, 1, 222, 39, 9, 1, 201, 75, 222, 139, 9, 1, 222,
+    140, 4, 207, 81, 9, 1, 222, 140, 4, 78, 58, 9, 1, 214, 167, 9, 1, 222,
+    140, 4, 112, 236, 112, 63, 9, 1, 231, 220, 9, 1, 231, 221, 4, 207, 81, 9,
+    1, 214, 88, 9, 1, 231, 221, 4, 103, 236, 112, 63, 9, 1, 230, 173, 9, 1,
+    231, 221, 4, 112, 236, 112, 58, 9, 1, 220, 95, 4, 2, 196, 236, 9, 1, 220,
+    95, 4, 78, 58, 9, 1, 220, 95, 4, 112, 236, 112, 58, 9, 1, 220, 95, 4,
+    112, 236, 112, 63, 9, 1, 213, 124, 4, 78, 63, 9, 1, 213, 124, 231, 50, 9,
+    1, 207, 58, 9, 1, 213, 124, 4, 207, 81, 9, 1, 213, 124, 4, 112, 236, 112,
+    58, 9, 1, 229, 221, 236, 142, 9, 1, 200, 84, 4, 78, 58, 9, 1, 229, 221,
+    4, 97, 58, 9, 1, 229, 221, 230, 251, 9, 1, 229, 221, 230, 252, 4, 230,
+    67, 58, 9, 1, 200, 50, 217, 134, 230, 251, 9, 1, 194, 120, 4, 207, 81, 9,
+    1, 221, 170, 212, 0, 9, 1, 212, 0, 9, 1, 68, 9, 1, 192, 214, 9, 1, 221,
+    170, 192, 214, 9, 1, 194, 120, 4, 103, 236, 112, 58, 9, 1, 196, 123, 9,
+    1, 233, 62, 193, 64, 9, 1, 97, 4, 200, 147, 9, 1, 97, 4, 2, 196, 236, 9,
+    1, 194, 120, 4, 78, 58, 9, 1, 71, 9, 1, 97, 4, 112, 236, 112, 63, 9, 1,
+    97, 248, 186, 9, 1, 97, 248, 187, 4, 230, 67, 58, 9, 232, 71, 201, 238,
+    9, 1, 251, 108, 9, 2, 139, 34, 206, 87, 4, 220, 95, 4, 157, 217, 168, 9,
+    2, 139, 34, 208, 233, 4, 220, 95, 4, 157, 217, 168, 9, 2, 139, 91, 88,
+    20, 9, 2, 139, 220, 95, 251, 26, 9, 2, 139, 223, 37, 9, 2, 139, 112, 236,
+    111, 9, 2, 139, 205, 201, 9, 234, 80, 80, 249, 235, 9, 202, 15, 80, 206,
+    210, 234, 125, 229, 134, 9, 2, 139, 207, 7, 192, 76, 9, 2, 139, 197, 37,
+    207, 241, 192, 76, 9, 2, 139, 236, 113, 229, 246, 80, 221, 245, 9, 2,
+    139, 91, 72, 20, 9, 2, 132, 205, 201, 9, 2, 139, 217, 209, 9, 2, 194,
+    119, 9, 2, 193, 64, 9, 2, 139, 193, 64, 9, 2, 139, 213, 123, 9, 209, 232,
+    80, 206, 71, 9, 234, 90, 246, 138, 132, 201, 238, 9, 234, 90, 246, 138,
+    139, 201, 238, 9, 207, 7, 139, 201, 239, 4, 232, 248, 246, 137, 9, 2,
+    132, 217, 26, 9, 1, 237, 228, 4, 223, 121, 196, 236, 9, 1, 207, 222, 4,
+    223, 121, 196, 236, 233, 193, 250, 126, 17, 192, 76, 233, 193, 250, 126,
+    17, 101, 233, 193, 250, 126, 17, 104, 233, 193, 250, 126, 17, 133, 233,
+    193, 250, 126, 17, 134, 233, 193, 250, 126, 17, 151, 233, 193, 250, 126,
+    17, 170, 233, 193, 250, 126, 17, 179, 233, 193, 250, 126, 17, 174, 233,
+    193, 250, 126, 17, 182, 9, 1, 204, 9, 4, 78, 63, 9, 1, 237, 251, 4, 78,
+    63, 9, 1, 231, 80, 4, 78, 63, 9, 3, 203, 77, 250, 229, 9, 3, 203, 77,
+    209, 151, 217, 5, 9, 1, 229, 221, 4, 223, 121, 196, 236, 200, 248, 234,
+    80, 80, 210, 243, 200, 248, 201, 102, 232, 71, 201, 238, 200, 248, 201,
+    157, 232, 71, 201, 238, 200, 248, 201, 102, 242, 47, 200, 248, 201, 157,
+    242, 47, 200, 248, 229, 5, 242, 47, 200, 248, 242, 48, 203, 16, 220, 28,
+    200, 248, 242, 48, 203, 16, 207, 101, 200, 248, 201, 102, 242, 48, 203,
+    16, 220, 28, 200, 248, 201, 157, 242, 48, 203, 16, 207, 101, 200, 248,
+    238, 245, 200, 248, 230, 24, 212, 20, 200, 248, 230, 24, 216, 237, 200,
+    248, 230, 24, 250, 39, 200, 248, 251, 151, 77, 200, 248, 1, 251, 31, 200,
+    248, 1, 201, 107, 251, 31, 200, 248, 1, 248, 62, 200, 248, 1, 231, 210,
+    200, 248, 1, 231, 211, 231, 187, 200, 248, 1, 237, 224, 200, 248, 1, 236,
+    113, 237, 225, 207, 74, 200, 248, 1, 229, 255, 200, 248, 1, 194, 119,
+    200, 248, 1, 192, 103, 200, 248, 1, 229, 194, 200, 248, 1, 200, 4, 200,
+    248, 1, 200, 5, 231, 187, 200, 248, 1, 192, 197, 200, 248, 1, 192, 198,
+    229, 255, 200, 248, 1, 222, 109, 200, 248, 1, 220, 93, 200, 248, 1, 216,
+    122, 200, 248, 1, 212, 230, 200, 248, 1, 204, 173, 200, 248, 1, 52, 204,
+    173, 200, 248, 1, 71, 200, 248, 1, 210, 181, 200, 248, 1, 207, 168, 210,
+    181, 200, 248, 1, 206, 83, 200, 248, 1, 208, 226, 200, 248, 1, 207, 74,
+    200, 248, 1, 203, 224, 200, 248, 1, 200, 93, 200, 248, 1, 210, 118, 248,
+    47, 200, 248, 1, 210, 118, 231, 77, 200, 248, 1, 210, 118, 237, 35, 200,
+    248, 209, 52, 58, 200, 248, 209, 52, 63, 200, 248, 209, 52, 235, 110,
+    200, 248, 192, 1, 58, 200, 248, 192, 1, 63, 200, 248, 192, 1, 235, 110,
+    200, 248, 208, 10, 58, 200, 248, 208, 10, 63, 200, 248, 235, 111, 192, 9,
+    229, 4, 200, 248, 235, 111, 192, 9, 250, 200, 200, 248, 230, 4, 58, 200,
+    248, 230, 4, 63, 200, 248, 230, 3, 235, 110, 200, 248, 234, 3, 58, 200,
+    248, 234, 3, 63, 200, 248, 206, 174, 200, 248, 233, 28, 236, 114, 200,
+    248, 208, 136, 200, 248, 206, 204, 200, 248, 103, 84, 236, 112, 58, 200,
+    248, 103, 84, 236, 112, 63, 200, 248, 112, 236, 112, 58, 200, 248, 112,
+    236, 112, 63, 200, 248, 212, 18, 219, 176, 58, 200, 248, 212, 18, 219,
+    176, 63, 200, 248, 215, 184, 200, 248, 248, 185, 200, 248, 1, 202, 194,
+    192, 69, 200, 248, 1, 202, 194, 221, 238, 200, 248, 1, 202, 194, 233, 47,
+    9, 1, 248, 97, 4, 112, 236, 112, 228, 210, 63, 9, 1, 248, 97, 4, 78, 248,
+    84, 26, 112, 236, 112, 58, 9, 1, 248, 97, 4, 112, 236, 112, 209, 188,
+    197, 30, 63, 9, 1, 248, 97, 4, 112, 236, 112, 209, 188, 197, 30, 248, 84,
+    26, 103, 236, 112, 58, 9, 1, 248, 97, 4, 103, 236, 112, 248, 84, 26, 78,
+    58, 9, 1, 248, 97, 4, 223, 121, 2, 196, 237, 63, 9, 1, 248, 97, 4, 2,
+    196, 236, 9, 1, 176, 4, 103, 236, 112, 58, 9, 1, 176, 4, 112, 236, 112,
+    209, 188, 197, 30, 63, 9, 1, 237, 228, 4, 103, 236, 112, 196, 55, 248,
+    84, 26, 2, 200, 151, 9, 1, 237, 228, 4, 223, 121, 2, 196, 237, 63, 9, 1,
+    207, 222, 4, 111, 9, 1, 205, 202, 4, 232, 119, 236, 112, 58, 9, 1, 251,
+    58, 4, 103, 236, 112, 58, 9, 1, 251, 58, 4, 112, 236, 112, 209, 188, 235,
+    92, 58, 9, 1, 251, 58, 4, 103, 236, 112, 196, 55, 58, 9, 1, 233, 35, 4,
+    103, 236, 112, 63, 9, 1, 233, 35, 4, 112, 236, 112, 209, 188, 197, 30,
+    63, 9, 1, 222, 40, 4, 78, 58, 9, 1, 222, 40, 4, 112, 236, 112, 58, 9, 1,
+    222, 40, 4, 112, 236, 112, 209, 188, 197, 30, 63, 9, 1, 91, 4, 78, 58, 9,
+    1, 91, 4, 78, 63, 9, 1, 213, 124, 4, 103, 236, 112, 63, 9, 1, 213, 124,
+    4, 2, 200, 151, 9, 1, 213, 124, 4, 2, 196, 236, 9, 1, 220, 95, 4, 161, 9,
+    1, 207, 222, 4, 103, 236, 112, 196, 55, 58, 9, 1, 207, 222, 4, 230, 67,
+    58, 9, 1, 205, 202, 4, 103, 236, 112, 196, 55, 58, 9, 1, 176, 4, 2, 9, 1,
+    200, 152, 63, 9, 1, 176, 4, 2, 9, 1, 200, 152, 26, 103, 236, 111, 9, 1,
+    205, 202, 4, 2, 9, 1, 200, 152, 26, 103, 236, 111, 9, 1, 207, 222, 4, 2,
+    9, 1, 200, 152, 26, 103, 236, 111, 9, 1, 176, 4, 2, 9, 1, 200, 152, 58,
+    9, 1, 157, 4, 233, 193, 250, 126, 17, 103, 58, 9, 1, 157, 4, 233, 193,
+    250, 126, 17, 112, 58, 9, 1, 233, 62, 97, 4, 233, 193, 250, 126, 17, 103,
+    58, 9, 1, 233, 62, 97, 4, 233, 193, 250, 126, 17, 112, 58, 9, 1, 233, 62,
+    97, 4, 233, 193, 250, 126, 17, 232, 119, 63, 9, 1, 194, 120, 4, 233, 193,
+    250, 126, 17, 103, 58, 9, 1, 194, 120, 4, 233, 193, 250, 126, 17, 112,
+    58, 9, 1, 97, 248, 187, 4, 233, 193, 250, 126, 17, 103, 58, 9, 1, 97,
+    248, 187, 4, 233, 193, 250, 126, 17, 112, 58, 9, 1, 176, 4, 233, 193,
+    250, 126, 17, 232, 119, 63, 9, 1, 205, 202, 4, 233, 193, 250, 126, 17,
+    232, 119, 58, 9, 1, 205, 202, 4, 223, 121, 196, 236, 9, 1, 222, 140, 4,
+    103, 236, 112, 58, 199, 237, 1, 230, 99, 199, 237, 1, 204, 18, 199, 237,
+    1, 213, 122, 199, 237, 1, 208, 68, 199, 237, 1, 249, 1, 199, 237, 1, 219,
+    219, 199, 237, 1, 222, 154, 199, 237, 1, 251, 13, 199, 237, 1, 196, 155,
+    199, 237, 1, 217, 25, 199, 237, 1, 233, 95, 199, 237, 1, 237, 38, 199,
+    237, 1, 199, 239, 199, 237, 1, 220, 181, 199, 237, 1, 231, 229, 199, 237,
+    1, 231, 1, 199, 237, 1, 205, 200, 199, 237, 1, 237, 177, 199, 237, 1,
+    192, 92, 199, 237, 1, 200, 95, 199, 237, 1, 193, 129, 199, 237, 1, 210,
+    195, 199, 237, 1, 223, 46, 199, 237, 1, 242, 248, 199, 237, 1, 198, 82,
+    199, 237, 1, 229, 186, 199, 237, 1, 221, 249, 199, 237, 1, 199, 238, 199,
+    237, 1, 192, 110, 199, 237, 1, 204, 7, 199, 237, 1, 206, 90, 199, 237, 1,
+    237, 254, 199, 237, 1, 155, 199, 237, 1, 192, 8, 199, 237, 1, 251, 54,
+    199, 237, 1, 231, 78, 199, 237, 1, 208, 236, 199, 237, 1, 194, 162, 199,
+    237, 251, 153, 199, 237, 251, 254, 199, 237, 228, 52, 199, 237, 234, 170,
+    199, 237, 197, 112, 199, 237, 211, 193, 199, 237, 234, 180, 199, 237,
+    233, 183, 199, 237, 212, 17, 199, 237, 212, 25, 199, 237, 201, 131, 199,
+    237, 1, 215, 84, 213, 206, 17, 192, 76, 213, 206, 17, 101, 213, 206, 17,
+    104, 213, 206, 17, 133, 213, 206, 17, 134, 213, 206, 17, 151, 213, 206,
+    17, 170, 213, 206, 17, 179, 213, 206, 17, 174, 213, 206, 17, 182, 213,
+    206, 1, 64, 213, 206, 1, 234, 171, 213, 206, 1, 70, 213, 206, 1, 71, 213,
+    206, 1, 68, 213, 206, 1, 211, 194, 213, 206, 1, 74, 213, 206, 1, 237,
+    242, 213, 206, 1, 215, 151, 213, 206, 1, 249, 3, 213, 206, 1, 166, 213,
+    206, 1, 189, 213, 206, 1, 223, 62, 213, 206, 1, 246, 117, 213, 206, 1,
+    238, 0, 213, 206, 1, 167, 213, 206, 1, 207, 3, 213, 206, 1, 188, 213,
+    206, 1, 231, 175, 213, 206, 1, 233, 97, 213, 206, 1, 160, 213, 206, 1,
+    177, 213, 206, 1, 215, 97, 194, 25, 213, 206, 1, 172, 213, 206, 1, 212,
+    201, 213, 206, 1, 181, 213, 206, 1, 144, 213, 206, 1, 194, 169, 213, 206,
+    1, 168, 213, 206, 1, 212, 202, 194, 25, 213, 206, 1, 222, 225, 223, 62,
+    213, 206, 1, 222, 225, 246, 117, 213, 206, 1, 222, 225, 167, 213, 206,
+    38, 203, 195, 139, 199, 18, 213, 206, 38, 203, 195, 132, 199, 18, 213,
+    206, 38, 203, 195, 207, 73, 199, 18, 213, 206, 38, 184, 237, 58, 199, 18,
+    213, 206, 38, 184, 139, 199, 18, 213, 206, 38, 184, 132, 199, 18, 213,
+    206, 38, 184, 207, 73, 199, 18, 213, 206, 38, 215, 48, 77, 213, 206, 38,
+    55, 78, 58, 213, 206, 139, 158, 250, 147, 213, 206, 132, 158, 250, 147,
+    213, 206, 16, 211, 195, 237, 72, 213, 206, 16, 231, 174, 213, 206, 242,
+    38, 213, 206, 233, 204, 77, 213, 206, 220, 153, 213, 206, 237, 203, 213,
+    206, 236, 116, 57, 213, 206, 200, 127, 57, 206, 49, 1, 251, 33, 206, 49,
+    1, 248, 1, 206, 49, 1, 231, 209, 206, 49, 1, 237, 226, 206, 49, 1, 223,
+    73, 206, 49, 1, 249, 1, 206, 49, 1, 192, 79, 206, 49, 1, 223, 82, 206,
+    49, 1, 199, 63, 206, 49, 1, 192, 178, 206, 49, 1, 222, 155, 206, 49, 1,
+    220, 177, 206, 49, 1, 216, 122, 206, 49, 1, 212, 230, 206, 49, 1, 203,
+    75, 206, 49, 1, 223, 190, 206, 49, 1, 233, 11, 206, 49, 1, 198, 116, 206,
+    49, 1, 208, 156, 206, 49, 1, 207, 74, 206, 49, 1, 204, 37, 206, 49, 1,
+    200, 173, 206, 49, 122, 223, 190, 206, 49, 122, 223, 189, 206, 49, 122,
+    212, 12, 206, 49, 122, 237, 240, 206, 49, 73, 1, 234, 37, 192, 178, 206,
+    49, 122, 234, 37, 192, 178, 206, 49, 18, 3, 184, 71, 206, 49, 18, 3, 71,
+    206, 49, 18, 3, 211, 108, 252, 33, 206, 49, 18, 3, 184, 252, 33, 206, 49,
+    18, 3, 252, 33, 206, 49, 18, 3, 211, 108, 64, 206, 49, 18, 3, 184, 64,
+    206, 49, 18, 3, 64, 206, 49, 73, 1, 203, 195, 64, 206, 49, 18, 3, 203,
+    195, 64, 206, 49, 18, 3, 184, 68, 206, 49, 18, 3, 68, 206, 49, 73, 1, 70,
+    206, 49, 18, 3, 184, 70, 206, 49, 18, 3, 70, 206, 49, 18, 3, 74, 206, 49,
+    18, 3, 201, 131, 206, 49, 122, 214, 188, 206, 49, 209, 38, 214, 188, 206,
+    49, 209, 38, 251, 82, 206, 49, 209, 38, 250, 213, 206, 49, 209, 38, 248,
+    163, 206, 49, 209, 38, 250, 18, 206, 49, 209, 38, 203, 212, 206, 49, 251,
+    151, 77, 206, 49, 209, 38, 217, 15, 208, 192, 206, 49, 209, 38, 192, 16,
+    206, 49, 209, 38, 208, 192, 206, 49, 209, 38, 192, 109, 206, 49, 209, 38,
+    198, 5, 206, 49, 209, 38, 250, 97, 206, 49, 209, 38, 202, 199, 217, 108,
+    206, 49, 209, 38, 250, 194, 217, 156, 1, 230, 73, 217, 156, 1, 251, 238,
+    217, 156, 1, 251, 80, 217, 156, 1, 251, 125, 217, 156, 1, 251, 72, 217,
+    156, 1, 197, 1, 217, 156, 1, 249, 228, 217, 156, 1, 223, 82, 217, 156, 1,
+    250, 15, 217, 156, 1, 251, 39, 217, 156, 1, 251, 44, 217, 156, 1, 251,
+    35, 217, 156, 1, 250, 241, 217, 156, 1, 250, 224, 217, 156, 1, 250, 61,
+    217, 156, 1, 223, 190, 217, 156, 1, 250, 163, 217, 156, 1, 250, 28, 217,
+    156, 1, 250, 135, 217, 156, 1, 250, 131, 217, 156, 1, 250, 53, 217, 156,
+    1, 250, 26, 217, 156, 1, 235, 36, 217, 156, 1, 222, 147, 217, 156, 1,
+    251, 57, 217, 156, 251, 86, 77, 217, 156, 195, 250, 77, 217, 156, 231,
+    146, 77, 217, 156, 209, 37, 200, 248, 1, 135, 214, 165, 200, 248, 1, 135,
+    223, 62, 200, 248, 1, 135, 212, 201, 200, 248, 1, 135, 198, 83, 200, 248,
+    1, 135, 213, 178, 200, 248, 1, 135, 213, 160, 200, 248, 1, 135, 248, 54,
+    200, 248, 1, 135, 167, 200, 248, 1, 135, 219, 137, 200, 248, 1, 135, 219,
+    126, 200, 248, 1, 135, 202, 92, 9, 1, 248, 97, 4, 2, 196, 237, 63, 9, 1,
+    248, 97, 4, 230, 67, 58, 9, 1, 223, 38, 4, 103, 236, 112, 58, 9, 1, 200,
+    152, 4, 103, 236, 112, 58, 9, 1, 233, 35, 4, 78, 248, 84, 26, 112, 236,
+    112, 58, 9, 1, 208, 233, 4, 78, 63, 9, 1, 220, 95, 4, 55, 161, 9, 1, 91,
+    4, 112, 236, 112, 58, 9, 1, 97, 4, 103, 236, 112, 248, 84, 26, 230, 67,
+    58, 9, 1, 97, 4, 103, 236, 112, 248, 84, 26, 78, 58, 9, 1, 207, 222, 4,
+    219, 69, 9, 1, 194, 120, 4, 78, 194, 40, 9, 1, 207, 36, 193, 64, 9, 1,
+    132, 251, 26, 9, 1, 237, 228, 4, 112, 236, 112, 63, 9, 1, 206, 87, 4,
+    112, 236, 112, 63, 9, 1, 231, 221, 4, 223, 121, 111, 9, 1, 201, 230, 194,
+    119, 9, 1, 192, 104, 4, 223, 121, 196, 237, 58, 9, 1, 251, 58, 4, 112,
+    236, 112, 63, 9, 1, 222, 140, 4, 78, 63, 9, 1, 248, 97, 4, 2, 91, 58, 9,
+    1, 210, 162, 4, 2, 91, 58, 9, 1, 200, 50, 4, 2, 200, 50, 58, 9, 1, 207,
+    222, 4, 2, 213, 124, 58, 9, 1, 97, 4, 103, 236, 112, 248, 84, 26, 2, 213,
+    124, 58, 9, 1, 251, 83, 233, 34, 9, 1, 251, 83, 208, 232, 9, 1, 251, 83,
+    213, 123, 9, 1, 210, 162, 4, 2, 196, 236, 9, 1, 200, 50, 4, 2, 196, 236,
+    9, 1, 198, 76, 4, 2, 196, 236, 9, 1, 200, 84, 4, 2, 196, 236, 9, 1, 222,
+    40, 4, 2, 196, 236, 9, 1, 231, 80, 4, 112, 236, 112, 58, 9, 1, 251, 83,
+    208, 233, 4, 112, 236, 112, 58, 9, 1, 223, 38, 4, 112, 236, 112, 58, 9,
+    1, 223, 38, 4, 112, 236, 112, 63, 9, 1, 220, 95, 4, 2, 9, 1, 200, 152,
+    58, 9, 2, 132, 194, 119, 9, 2, 139, 194, 11, 250, 128, 9, 2, 139, 206,
+    86, 9, 2, 139, 251, 57, 9, 2, 139, 208, 232, 9, 2, 139, 213, 124, 4, 222,
+    86, 9, 2, 132, 213, 124, 4, 222, 86, 9, 2, 139, 194, 11, 250, 25, 9, 2,
+    139, 194, 11, 250, 60, 9, 2, 139, 194, 11, 250, 223, 9, 2, 139, 194, 11,
+    206, 65, 9, 2, 139, 194, 11, 208, 196, 9, 2, 139, 194, 11, 194, 142, 9,
+    2, 139, 232, 147, 217, 122, 9, 2, 139, 3, 206, 81, 9, 236, 190, 234, 80,
+    80, 249, 235, 9, 163, 237, 216, 63, 9, 238, 138, 233, 58, 9, 238, 138,
+    237, 215, 9, 238, 138, 222, 86, 9, 238, 138, 233, 56, 9, 238, 138, 237,
+    213, 9, 238, 138, 222, 84, 9, 158, 90, 78, 58, 9, 158, 103, 236, 112, 58,
+    9, 158, 219, 70, 58, 9, 158, 90, 78, 63, 9, 158, 103, 236, 112, 63, 9,
+    158, 219, 70, 63, 9, 211, 184, 233, 56, 9, 211, 184, 237, 213, 9, 211,
+    184, 222, 84, 9, 2, 139, 194, 119, 9, 233, 59, 4, 207, 81, 9, 233, 59, 4,
+    78, 58, 9, 222, 87, 4, 78, 63, 9, 46, 250, 78, 58, 9, 51, 250, 78, 58, 9,
+    46, 250, 78, 63, 9, 51, 250, 78, 63, 9, 55, 51, 250, 78, 58, 9, 55, 51,
+    250, 78, 95, 4, 236, 114, 9, 51, 250, 78, 95, 4, 236, 114, 9, 237, 216,
+    4, 236, 114, 9, 122, 203, 109, 213, 124, 231, 50, 107, 3, 223, 121, 246,
+    234, 107, 3, 246, 234, 107, 3, 250, 168, 107, 3, 196, 6, 107, 1, 203,
+    195, 64, 107, 1, 64, 107, 1, 252, 33, 107, 1, 70, 107, 1, 223, 224, 107,
+    1, 68, 107, 1, 196, 251, 107, 1, 118, 150, 107, 1, 118, 165, 107, 1, 246,
+    237, 71, 107, 1, 203, 195, 71, 107, 1, 71, 107, 1, 251, 63, 107, 1, 246,
+    237, 74, 107, 1, 203, 195, 74, 107, 1, 74, 107, 1, 250, 8, 107, 1, 160,
+    107, 1, 221, 250, 107, 1, 231, 233, 107, 1, 231, 84, 107, 1, 214, 165,
+    107, 1, 247, 19, 107, 1, 246, 117, 107, 1, 223, 62, 107, 1, 223, 28, 107,
+    1, 212, 201, 107, 1, 198, 83, 107, 1, 198, 71, 107, 1, 237, 161, 107, 1,
+    237, 145, 107, 1, 213, 178, 107, 1, 189, 107, 1, 199, 240, 107, 1, 238,
+    0, 107, 1, 237, 40, 107, 1, 181, 107, 1, 213, 160, 107, 1, 166, 107, 1,
+    210, 94, 107, 1, 249, 3, 107, 1, 248, 54, 107, 1, 172, 107, 1, 168, 107,
+    1, 167, 107, 1, 207, 3, 107, 1, 177, 107, 1, 219, 137, 107, 1, 219, 126,
+    107, 1, 196, 157, 107, 1, 204, 64, 107, 1, 202, 92, 107, 1, 188, 107, 1,
+    144, 107, 18, 3, 212, 0, 107, 18, 3, 211, 192, 107, 3, 212, 241, 107, 3,
+    249, 246, 107, 18, 3, 252, 33, 107, 18, 3, 70, 107, 18, 3, 223, 224, 107,
+    18, 3, 68, 107, 18, 3, 196, 251, 107, 18, 3, 118, 150, 107, 18, 3, 118,
+    207, 4, 107, 18, 3, 246, 237, 71, 107, 18, 3, 203, 195, 71, 107, 18, 3,
+    71, 107, 18, 3, 251, 63, 107, 18, 3, 246, 237, 74, 107, 18, 3, 203, 195,
+    74, 107, 18, 3, 74, 107, 18, 3, 250, 8, 107, 3, 196, 11, 107, 18, 3, 209,
+    91, 71, 107, 18, 3, 249, 241, 107, 211, 219, 107, 201, 218, 3, 197, 106,
+    107, 201, 218, 3, 250, 170, 107, 230, 211, 251, 143, 107, 251, 130, 251,
+    143, 107, 18, 3, 246, 237, 184, 71, 107, 18, 3, 197, 104, 107, 18, 3,
+    196, 250, 107, 1, 208, 239, 107, 1, 221, 230, 107, 1, 231, 59, 107, 1,
+    192, 112, 107, 1, 237, 150, 107, 1, 207, 156, 107, 1, 233, 97, 107, 1,
+    192, 164, 107, 1, 118, 207, 4, 107, 1, 118, 219, 138, 107, 18, 3, 118,
+    165, 107, 18, 3, 118, 219, 138, 107, 237, 208, 107, 55, 237, 208, 107,
+    17, 192, 76, 107, 17, 101, 107, 17, 104, 107, 17, 133, 107, 17, 134, 107,
+    17, 151, 107, 17, 170, 107, 17, 179, 107, 17, 174, 107, 17, 182, 107,
+    251, 151, 57, 107, 3, 139, 202, 159, 236, 114, 107, 1, 246, 237, 64, 107,
+    1, 212, 0, 107, 1, 211, 192, 107, 1, 249, 241, 107, 1, 197, 104, 107, 1,
+    196, 250, 107, 1, 217, 114, 237, 161, 107, 1, 192, 71, 107, 1, 87, 168,
+    107, 1, 231, 120, 107, 1, 223, 6, 107, 1, 231, 6, 201, 238, 107, 1, 237,
+    151, 107, 1, 248, 159, 248, 76, 250, 197, 248, 76, 3, 246, 234, 248, 76,
+    3, 250, 168, 248, 76, 3, 196, 6, 248, 76, 1, 64, 248, 76, 1, 252, 33,
+    248, 76, 1, 70, 248, 76, 1, 223, 224, 248, 76, 1, 68, 248, 76, 1, 196,
+    251, 248, 76, 1, 118, 150, 248, 76, 1, 118, 165, 248, 76, 1, 71, 248, 76,
+    1, 251, 63, 248, 76, 1, 74, 248, 76, 1, 250, 8, 248, 76, 1, 160, 248, 76,
+    1, 221, 250, 248, 76, 1, 231, 233, 248, 76, 1, 231, 84, 248, 76, 1, 214,
+    165, 248, 76, 1, 247, 19, 248, 76, 1, 246, 117, 248, 76, 1, 223, 62, 248,
+    76, 1, 223, 28, 248, 76, 1, 212, 201, 248, 76, 1, 198, 83, 248, 76, 1,
+    198, 71, 248, 76, 1, 237, 161, 248, 76, 1, 237, 145, 248, 76, 1, 213,
+    178, 248, 76, 1, 189, 248, 76, 1, 199, 240, 248, 76, 1, 238, 0, 248, 76,
+    1, 237, 40, 248, 76, 1, 181, 248, 76, 1, 166, 248, 76, 1, 210, 94, 248,
+    76, 1, 249, 3, 248, 76, 1, 248, 54, 248, 76, 1, 172, 248, 76, 1, 168,
+    248, 76, 1, 167, 248, 76, 1, 177, 248, 76, 1, 204, 64, 248, 76, 1, 202,
+    92, 248, 76, 1, 188, 248, 76, 1, 144, 248, 76, 3, 212, 241, 248, 76, 3,
+    249, 246, 248, 76, 18, 3, 252, 33, 248, 76, 18, 3, 70, 248, 76, 18, 3,
+    223, 224, 248, 76, 18, 3, 68, 248, 76, 18, 3, 196, 251, 248, 76, 18, 3,
+    118, 150, 248, 76, 18, 3, 118, 207, 4, 248, 76, 18, 3, 71, 248, 76, 18,
+    3, 251, 63, 248, 76, 18, 3, 74, 248, 76, 18, 3, 250, 8, 248, 76, 3, 196,
+    11, 248, 76, 1, 221, 240, 189, 248, 76, 250, 9, 220, 2, 77, 248, 76, 1,
+    207, 3, 248, 76, 1, 207, 156, 248, 76, 1, 192, 164, 248, 76, 1, 118, 207,
+    4, 248, 76, 1, 118, 219, 138, 248, 76, 18, 3, 118, 165, 248, 76, 18, 3,
+    118, 219, 138, 248, 76, 17, 192, 76, 248, 76, 17, 101, 248, 76, 17, 104,
+    248, 76, 17, 133, 248, 76, 17, 134, 248, 76, 17, 151, 248, 76, 17, 170,
+    248, 76, 17, 179, 248, 76, 17, 174, 248, 76, 17, 182, 248, 76, 1, 208,
+    76, 4, 85, 237, 10, 248, 76, 1, 208, 76, 4, 106, 237, 10, 248, 76, 206,
+    186, 77, 248, 76, 206, 186, 57, 248, 76, 238, 137, 212, 233, 101, 248,
+    76, 238, 137, 212, 233, 104, 248, 76, 238, 137, 212, 233, 133, 248, 76,
+    238, 137, 212, 233, 134, 248, 76, 238, 137, 212, 233, 90, 219, 241, 199,
+    230, 199, 225, 237, 70, 248, 76, 238, 137, 237, 71, 203, 35, 248, 76,
+    223, 83, 248, 76, 231, 200, 77, 248, 76, 1, 196, 120, 250, 168, 248, 76,
+    251, 151, 57, 248, 76, 206, 36, 77, 230, 152, 3, 251, 124, 248, 20, 230,
+    152, 3, 248, 20, 230, 152, 3, 196, 6, 230, 152, 1, 64, 230, 152, 1, 252,
+    33, 230, 152, 1, 70, 230, 152, 1, 223, 224, 230, 152, 1, 68, 230, 152, 1,
+    196, 251, 230, 152, 1, 234, 171, 230, 152, 1, 251, 63, 230, 152, 1, 211,
+    194, 230, 152, 1, 250, 8, 230, 152, 1, 160, 230, 152, 1, 221, 250, 230,
+    152, 1, 231, 233, 230, 152, 1, 231, 84, 230, 152, 1, 214, 165, 230, 152,
+    1, 247, 19, 230, 152, 1, 246, 117, 230, 152, 1, 223, 62, 230, 152, 1,
+    223, 28, 230, 152, 1, 212, 201, 230, 152, 1, 198, 83, 230, 152, 1, 198,
+    71, 230, 152, 1, 237, 161, 230, 152, 1, 237, 145, 230, 152, 1, 213, 178,
+    230, 152, 1, 189, 230, 152, 1, 199, 240, 230, 152, 1, 238, 0, 230, 152,
+    1, 237, 40, 230, 152, 1, 181, 230, 152, 1, 166, 230, 152, 1, 210, 94,
+    230, 152, 1, 249, 3, 230, 152, 1, 248, 54, 230, 152, 1, 172, 230, 152, 1,
+    168, 230, 152, 1, 167, 230, 152, 1, 177, 230, 152, 1, 219, 137, 230, 152,
+    1, 196, 157, 230, 152, 1, 204, 64, 230, 152, 1, 188, 230, 152, 1, 144,
+    230, 152, 3, 212, 241, 230, 152, 18, 3, 252, 33, 230, 152, 18, 3, 70,
+    230, 152, 18, 3, 223, 224, 230, 152, 18, 3, 68, 230, 152, 18, 3, 196,
+    251, 230, 152, 18, 3, 234, 171, 230, 152, 18, 3, 251, 63, 230, 152, 18,
+    3, 211, 194, 230, 152, 18, 3, 250, 8, 230, 152, 3, 196, 11, 230, 152, 3,
+    197, 108, 230, 152, 1, 221, 230, 230, 152, 1, 231, 59, 230, 152, 1, 192,
+    112, 230, 152, 1, 207, 3, 230, 152, 1, 233, 97, 230, 152, 17, 192, 76,
+    230, 152, 17, 101, 230, 152, 17, 104, 230, 152, 17, 133, 230, 152, 17,
+    134, 230, 152, 17, 151, 230, 152, 17, 170, 230, 152, 17, 179, 230, 152,
+    17, 174, 230, 152, 17, 182, 230, 152, 199, 71, 230, 152, 251, 123, 230,
+    152, 223, 103, 230, 152, 197, 23, 230, 152, 234, 132, 211, 199, 230, 152,
+    3, 193, 104, 230, 152, 251, 151, 57, 230, 168, 3, 246, 234, 230, 168, 3,
+    250, 168, 230, 168, 3, 196, 6, 230, 168, 1, 64, 230, 168, 1, 252, 33,
+    230, 168, 1, 70, 230, 168, 1, 223, 224, 230, 168, 1, 68, 230, 168, 1,
+    196, 251, 230, 168, 1, 118, 150, 230, 168, 1, 118, 165, 230, 168, 18,
+    246, 237, 71, 230, 168, 1, 71, 230, 168, 1, 251, 63, 230, 168, 18, 246,
+    237, 74, 230, 168, 1, 74, 230, 168, 1, 250, 8, 230, 168, 1, 160, 230,
+    168, 1, 221, 250, 230, 168, 1, 231, 233, 230, 168, 1, 231, 84, 230, 168,
+    1, 214, 165, 230, 168, 1, 247, 19, 230, 168, 1, 246, 117, 230, 168, 1,
+    223, 62, 230, 168, 1, 223, 28, 230, 168, 1, 212, 201, 230, 168, 1, 198,
+    83, 230, 168, 1, 198, 71, 230, 168, 1, 237, 161, 230, 168, 1, 237, 145,
+    230, 168, 1, 213, 178, 230, 168, 1, 189, 230, 168, 1, 199, 240, 230, 168,
+    1, 238, 0, 230, 168, 1, 237, 40, 230, 168, 1, 181, 230, 168, 1, 166, 230,
+    168, 1, 210, 94, 230, 168, 1, 249, 3, 230, 168, 1, 248, 54, 230, 168, 1,
+    172, 230, 168, 1, 168, 230, 168, 1, 167, 230, 168, 1, 177, 230, 168, 1,
+    219, 137, 230, 168, 1, 196, 157, 230, 168, 1, 204, 64, 230, 168, 1, 202,
+    92, 230, 168, 1, 188, 230, 168, 1, 144, 230, 168, 3, 212, 241, 230, 168,
+    3, 249, 246, 230, 168, 18, 3, 252, 33, 230, 168, 18, 3, 70, 230, 168, 18,
+    3, 223, 224, 230, 168, 18, 3, 68, 230, 168, 18, 3, 196, 251, 230, 168,
+    18, 3, 118, 150, 230, 168, 18, 3, 118, 207, 4, 230, 168, 18, 3, 246, 237,
+    71, 230, 168, 18, 3, 71, 230, 168, 18, 3, 251, 63, 230, 168, 18, 3, 246,
+    237, 74, 230, 168, 18, 3, 74, 230, 168, 18, 3, 250, 8, 230, 168, 3, 196,
+    11, 230, 168, 211, 219, 230, 168, 1, 118, 207, 4, 230, 168, 1, 118, 219,
+    138, 230, 168, 18, 3, 118, 165, 230, 168, 18, 3, 118, 219, 138, 230, 168,
+    17, 192, 76, 230, 168, 17, 101, 230, 168, 17, 104, 230, 168, 17, 133,
+    230, 168, 17, 134, 230, 168, 17, 151, 230, 168, 17, 170, 230, 168, 17,
+    179, 230, 168, 17, 174, 230, 168, 17, 182, 230, 168, 251, 151, 57, 230,
+    168, 206, 186, 57, 230, 168, 1, 192, 71, 230, 168, 3, 201, 131, 230, 168,
+    3, 204, 54, 230, 168, 3, 217, 207, 230, 168, 3, 199, 159, 212, 242, 58,
+    230, 168, 3, 242, 131, 212, 242, 58, 230, 168, 3, 197, 222, 212, 242, 58,
+    211, 153, 3, 246, 234, 211, 153, 3, 250, 168, 211, 153, 3, 196, 6, 211,
+    153, 1, 64, 211, 153, 1, 252, 33, 211, 153, 1, 70, 211, 153, 1, 223, 224,
+    211, 153, 1, 68, 211, 153, 1, 196, 251, 211, 153, 1, 118, 150, 211, 153,
+    1, 118, 165, 211, 153, 1, 71, 211, 153, 1, 251, 63, 211, 153, 1, 74, 211,
+    153, 1, 250, 8, 211, 153, 1, 160, 211, 153, 1, 221, 250, 211, 153, 1,
+    231, 233, 211, 153, 1, 231, 84, 211, 153, 1, 214, 165, 211, 153, 1, 247,
+    19, 211, 153, 1, 246, 117, 211, 153, 1, 223, 62, 211, 153, 1, 223, 28,
+    211, 153, 1, 212, 201, 211, 153, 1, 198, 83, 211, 153, 1, 198, 71, 211,
+    153, 1, 237, 161, 211, 153, 1, 237, 145, 211, 153, 1, 213, 178, 211, 153,
+    1, 189, 211, 153, 1, 199, 240, 211, 153, 1, 238, 0, 211, 153, 1, 237, 40,
+    211, 153, 1, 181, 211, 153, 1, 166, 211, 153, 1, 210, 94, 211, 153, 1,
+    249, 3, 211, 153, 1, 248, 54, 211, 153, 1, 172, 211, 153, 1, 168, 211,
+    153, 1, 167, 211, 153, 1, 177, 211, 153, 1, 219, 137, 211, 153, 1, 196,
+    157, 211, 153, 1, 204, 64, 211, 153, 1, 202, 92, 211, 153, 1, 188, 211,
+    153, 1, 144, 211, 153, 3, 212, 241, 211, 153, 3, 249, 246, 211, 153, 18,
+    3, 252, 33, 211, 153, 18, 3, 70, 211, 153, 18, 3, 223, 224, 211, 153, 18,
+    3, 68, 211, 153, 18, 3, 196, 251, 211, 153, 18, 3, 118, 150, 211, 153,
+    18, 3, 118, 207, 4, 211, 153, 18, 3, 71, 211, 153, 18, 3, 251, 63, 211,
+    153, 18, 3, 74, 211, 153, 18, 3, 250, 8, 211, 153, 3, 196, 11, 211, 153,
+    3, 211, 109, 211, 153, 251, 64, 220, 2, 77, 211, 153, 250, 9, 220, 2, 77,
+    211, 153, 1, 207, 3, 211, 153, 1, 207, 156, 211, 153, 1, 192, 164, 211,
+    153, 1, 118, 207, 4, 211, 153, 1, 118, 219, 138, 211, 153, 18, 3, 118,
+    165, 211, 153, 18, 3, 118, 219, 138, 211, 153, 17, 192, 76, 211, 153, 17,
+    101, 211, 153, 17, 104, 211, 153, 17, 133, 211, 153, 17, 134, 211, 153,
+    17, 151, 211, 153, 17, 170, 211, 153, 17, 179, 211, 153, 17, 174, 211,
+    153, 17, 182, 211, 153, 223, 83, 211, 153, 1, 194, 169, 211, 153, 232,
+    109, 90, 208, 167, 211, 153, 232, 109, 90, 230, 78, 211, 153, 232, 109,
+    112, 208, 165, 211, 153, 232, 109, 90, 203, 33, 211, 153, 232, 109, 90,
+    234, 143, 211, 153, 232, 109, 112, 203, 30, 44, 3, 250, 168, 44, 3, 196,
+    6, 44, 1, 64, 44, 1, 252, 33, 44, 1, 70, 44, 1, 223, 224, 44, 1, 68, 44,
+    1, 196, 251, 44, 1, 71, 44, 1, 234, 171, 44, 1, 251, 63, 44, 1, 74, 44,
+    1, 211, 194, 44, 1, 250, 8, 44, 1, 160, 44, 1, 214, 165, 44, 1, 247, 19,
+    44, 1, 223, 62, 44, 1, 212, 201, 44, 1, 198, 83, 44, 1, 213, 178, 44, 1,
+    189, 44, 1, 181, 44, 1, 213, 160, 44, 1, 166, 44, 1, 172, 44, 1, 168, 44,
+    1, 167, 44, 1, 207, 3, 44, 1, 177, 44, 1, 219, 137, 44, 1, 219, 126, 44,
+    1, 196, 157, 44, 1, 204, 64, 44, 1, 202, 92, 44, 1, 188, 44, 1, 144, 44,
+    18, 3, 252, 33, 44, 18, 3, 70, 44, 18, 3, 223, 224, 44, 18, 3, 68, 44,
+    18, 3, 196, 251, 44, 18, 3, 71, 44, 18, 3, 234, 171, 44, 18, 3, 251, 63,
+    44, 18, 3, 74, 44, 18, 3, 211, 194, 44, 18, 3, 250, 8, 44, 3, 196, 11,
+    44, 211, 219, 44, 250, 9, 220, 2, 77, 44, 17, 192, 76, 44, 17, 101, 44,
+    17, 104, 44, 17, 133, 44, 17, 134, 44, 17, 151, 44, 17, 170, 44, 17, 179,
+    44, 17, 174, 44, 17, 182, 44, 31, 200, 30, 44, 31, 90, 228, 162, 44, 31,
+    90, 180, 44, 237, 174, 57, 44, 216, 38, 57, 44, 193, 67, 57, 44, 237,
+    112, 57, 44, 238, 196, 57, 44, 250, 62, 95, 57, 44, 206, 186, 57, 44, 31,
+    57, 200, 34, 3, 38, 246, 235, 58, 200, 34, 3, 246, 234, 200, 34, 3, 250,
+    168, 200, 34, 3, 196, 6, 200, 34, 3, 38, 250, 169, 58, 200, 34, 1, 64,
+    200, 34, 1, 252, 33, 200, 34, 1, 70, 200, 34, 1, 223, 224, 200, 34, 1,
+    68, 200, 34, 1, 196, 251, 200, 34, 1, 118, 150, 200, 34, 1, 118, 165,
+    200, 34, 1, 71, 200, 34, 1, 234, 171, 200, 34, 1, 251, 63, 200, 34, 1,
+    74, 200, 34, 1, 211, 194, 200, 34, 1, 250, 8, 200, 34, 1, 160, 200, 34,
+    1, 221, 250, 200, 34, 1, 231, 233, 200, 34, 1, 231, 84, 200, 34, 1, 214,
+    165, 200, 34, 1, 247, 19, 200, 34, 1, 246, 117, 200, 34, 1, 223, 62, 200,
+    34, 1, 223, 28, 200, 34, 1, 212, 201, 200, 34, 1, 198, 83, 200, 34, 1,
+    198, 71, 200, 34, 1, 237, 161, 200, 34, 1, 237, 145, 200, 34, 1, 213,
+    178, 200, 34, 1, 189, 200, 34, 1, 199, 240, 200, 34, 1, 238, 0, 200, 34,
+    1, 237, 40, 200, 34, 1, 181, 200, 34, 1, 166, 200, 34, 1, 210, 94, 200,
+    34, 1, 249, 3, 200, 34, 1, 248, 54, 200, 34, 1, 172, 200, 34, 1, 168,
+    200, 34, 1, 167, 200, 34, 1, 207, 3, 200, 34, 1, 177, 200, 34, 1, 219,
+    137, 200, 34, 1, 219, 126, 200, 34, 1, 196, 157, 200, 34, 1, 204, 64,
+    200, 34, 1, 202, 92, 200, 34, 1, 188, 200, 34, 1, 144, 200, 34, 3, 249,
+    246, 200, 34, 18, 3, 252, 33, 200, 34, 18, 3, 70, 200, 34, 18, 3, 223,
+    224, 200, 34, 18, 3, 68, 200, 34, 18, 3, 196, 251, 200, 34, 18, 3, 118,
+    150, 200, 34, 18, 3, 118, 207, 4, 200, 34, 18, 3, 71, 200, 34, 18, 3,
+    234, 171, 200, 34, 18, 3, 251, 63, 200, 34, 18, 3, 74, 200, 34, 18, 3,
+    211, 194, 200, 34, 18, 3, 250, 8, 200, 34, 3, 196, 11, 200, 34, 220, 2,
+    77, 200, 34, 251, 64, 220, 2, 77, 200, 34, 1, 198, 118, 200, 34, 1, 235,
+    17, 200, 34, 1, 206, 240, 200, 34, 1, 118, 207, 4, 200, 34, 1, 118, 219,
+    138, 200, 34, 18, 3, 118, 165, 200, 34, 18, 3, 118, 219, 138, 200, 34,
+    17, 192, 76, 200, 34, 17, 101, 200, 34, 17, 104, 200, 34, 17, 133, 200,
+    34, 17, 134, 200, 34, 17, 151, 200, 34, 17, 170, 200, 34, 17, 179, 200,
+    34, 17, 174, 200, 34, 17, 182, 200, 34, 3, 203, 113, 200, 34, 232, 109,
+    17, 192, 77, 39, 212, 4, 209, 137, 80, 134, 200, 34, 232, 109, 17, 90,
+    39, 212, 4, 209, 137, 80, 134, 200, 34, 232, 109, 17, 103, 39, 212, 4,
+    209, 137, 80, 134, 200, 34, 232, 109, 17, 112, 39, 212, 4, 209, 137, 80,
+    134, 200, 34, 232, 109, 17, 90, 39, 233, 217, 209, 137, 80, 134, 200, 34,
+    232, 109, 17, 103, 39, 233, 217, 209, 137, 80, 134, 200, 34, 232, 109,
+    17, 112, 39, 233, 217, 209, 137, 80, 134, 200, 34, 3, 197, 255, 222, 115,
+    3, 202, 159, 246, 234, 222, 115, 3, 246, 234, 222, 115, 3, 250, 168, 222,
+    115, 3, 196, 6, 222, 115, 3, 203, 113, 222, 115, 1, 64, 222, 115, 1, 252,
+    33, 222, 115, 1, 70, 222, 115, 1, 223, 224, 222, 115, 1, 68, 222, 115, 1,
+    196, 251, 222, 115, 1, 118, 150, 222, 115, 1, 118, 165, 222, 115, 1, 71,
+    222, 115, 1, 234, 171, 222, 115, 1, 251, 63, 222, 115, 1, 74, 222, 115,
+    1, 211, 194, 222, 115, 1, 250, 8, 222, 115, 1, 160, 222, 115, 1, 221,
+    250, 222, 115, 1, 231, 233, 222, 115, 1, 231, 84, 222, 115, 1, 214, 165,
+    222, 115, 1, 247, 19, 222, 115, 1, 246, 117, 222, 115, 1, 223, 62, 222,
+    115, 1, 223, 28, 222, 115, 1, 212, 201, 222, 115, 1, 198, 83, 222, 115,
+    1, 198, 71, 222, 115, 1, 237, 161, 222, 115, 1, 237, 145, 222, 115, 1,
+    213, 178, 222, 115, 1, 189, 222, 115, 1, 199, 240, 222, 115, 1, 238, 0,
+    222, 115, 1, 237, 40, 222, 115, 1, 181, 222, 115, 1, 166, 222, 115, 1,
+    210, 94, 222, 115, 1, 249, 3, 222, 115, 1, 248, 54, 222, 115, 1, 172,
+    222, 115, 1, 168, 222, 115, 1, 167, 222, 115, 1, 207, 3, 222, 115, 1,
+    177, 222, 115, 1, 219, 137, 222, 115, 1, 196, 157, 222, 115, 1, 204, 64,
+    222, 115, 1, 202, 92, 222, 115, 1, 188, 222, 115, 1, 144, 222, 115, 3,
+    212, 241, 222, 115, 3, 249, 246, 222, 115, 18, 3, 252, 33, 222, 115, 18,
+    3, 70, 222, 115, 18, 3, 223, 224, 222, 115, 18, 3, 68, 222, 115, 18, 3,
+    196, 251, 222, 115, 18, 3, 118, 150, 222, 115, 18, 3, 118, 207, 4, 222,
+    115, 18, 3, 71, 222, 115, 18, 3, 234, 171, 222, 115, 18, 3, 251, 63, 222,
+    115, 18, 3, 74, 222, 115, 18, 3, 211, 194, 222, 115, 18, 3, 250, 8, 222,
+    115, 3, 196, 11, 222, 115, 220, 2, 77, 222, 115, 251, 64, 220, 2, 77,
+    222, 115, 1, 233, 97, 222, 115, 1, 118, 207, 4, 222, 115, 1, 118, 219,
+    138, 222, 115, 18, 3, 118, 165, 222, 115, 18, 3, 118, 219, 138, 222, 115,
+    17, 192, 76, 222, 115, 17, 101, 222, 115, 17, 104, 222, 115, 17, 133,
+    222, 115, 17, 134, 222, 115, 17, 151, 222, 115, 17, 170, 222, 115, 17,
+    179, 222, 115, 17, 174, 222, 115, 17, 182, 222, 115, 3, 223, 13, 222,
+    115, 3, 197, 39, 135, 3, 38, 250, 169, 58, 135, 3, 246, 234, 135, 3, 250,
+    168, 135, 3, 196, 6, 135, 1, 196, 120, 250, 168, 135, 1, 64, 135, 1, 252,
+    33, 135, 1, 70, 135, 1, 223, 224, 135, 1, 68, 135, 1, 196, 251, 135, 1,
+    118, 150, 135, 1, 118, 165, 135, 1, 71, 135, 1, 234, 171, 135, 1, 251,
+    63, 135, 1, 74, 135, 1, 211, 194, 135, 1, 250, 8, 135, 1, 160, 135, 1,
+    221, 250, 135, 1, 231, 233, 135, 1, 231, 84, 135, 1, 214, 165, 135, 1,
+    247, 19, 135, 1, 246, 117, 135, 1, 223, 62, 135, 1, 223, 28, 135, 1, 212,
+    201, 135, 1, 198, 83, 135, 1, 198, 71, 135, 1, 237, 161, 135, 1, 237,
+    145, 135, 1, 213, 178, 135, 1, 189, 135, 1, 199, 240, 135, 1, 238, 0,
+    135, 1, 237, 40, 135, 1, 181, 135, 1, 213, 160, 135, 1, 166, 135, 1, 210,
+    94, 135, 1, 249, 3, 135, 1, 248, 54, 135, 1, 172, 135, 1, 168, 135, 1,
+    167, 135, 1, 207, 3, 135, 1, 177, 135, 1, 219, 137, 135, 1, 219, 126,
+    135, 1, 196, 157, 135, 1, 204, 64, 135, 1, 202, 92, 135, 1, 188, 135, 1,
+    144, 135, 1, 198, 52, 135, 3, 84, 248, 194, 196, 11, 135, 3, 242, 124,
+    196, 11, 135, 3, 249, 246, 135, 18, 3, 252, 33, 135, 18, 3, 70, 135, 18,
+    3, 223, 224, 135, 18, 3, 68, 135, 18, 3, 196, 251, 135, 18, 3, 118, 150,
+    135, 18, 3, 118, 207, 4, 135, 18, 3, 71, 135, 18, 3, 234, 171, 135, 18,
+    3, 251, 63, 135, 18, 3, 74, 135, 18, 3, 211, 194, 135, 18, 3, 250, 8,
+    135, 3, 196, 11, 135, 1, 78, 207, 195, 135, 3, 210, 246, 135, 1, 242,
+    204, 218, 236, 135, 1, 242, 204, 193, 148, 135, 1, 242, 204, 219, 127,
+    135, 250, 9, 220, 2, 77, 135, 232, 109, 90, 211, 207, 135, 232, 109, 90,
+    232, 129, 135, 232, 109, 112, 234, 139, 135, 232, 109, 90, 197, 242, 135,
+    232, 109, 90, 200, 21, 135, 232, 109, 112, 197, 241, 135, 232, 109, 90,
+    233, 6, 135, 1, 250, 112, 223, 224, 135, 1, 118, 207, 4, 135, 1, 118,
+    219, 138, 135, 18, 3, 118, 165, 135, 18, 3, 118, 219, 138, 135, 17, 192,
+    76, 135, 17, 101, 135, 17, 104, 135, 17, 133, 135, 17, 134, 135, 17, 151,
+    135, 17, 170, 135, 17, 179, 135, 17, 174, 135, 17, 182, 135, 31, 200, 30,
+    135, 31, 90, 228, 162, 135, 31, 90, 180, 135, 232, 109, 90, 208, 167,
+    135, 232, 109, 90, 230, 78, 135, 232, 109, 112, 208, 165, 135, 232, 109,
+    90, 203, 33, 135, 232, 109, 90, 234, 143, 135, 232, 109, 112, 203, 30,
+    135, 237, 179, 77, 135, 1, 242, 204, 213, 179, 135, 1, 242, 204, 215,
+    151, 135, 1, 242, 204, 207, 4, 135, 1, 242, 204, 165, 135, 1, 242, 204,
+    219, 138, 135, 1, 242, 204, 222, 184, 159, 3, 246, 234, 159, 3, 250, 167,
+    159, 3, 196, 5, 159, 1, 249, 234, 159, 1, 251, 242, 159, 1, 251, 88, 159,
+    1, 251, 103, 159, 1, 223, 72, 159, 1, 223, 223, 159, 1, 196, 242, 159, 1,
+    196, 245, 159, 1, 223, 98, 159, 1, 223, 99, 159, 1, 223, 209, 159, 1,
+    223, 211, 159, 1, 233, 184, 159, 1, 234, 166, 159, 1, 251, 46, 159, 1,
+    211, 97, 159, 1, 211, 187, 159, 1, 249, 249, 159, 1, 250, 255, 222, 62,
+    159, 1, 217, 187, 222, 62, 159, 1, 250, 255, 231, 178, 159, 1, 217, 187,
+    231, 178, 159, 1, 222, 114, 215, 81, 159, 1, 206, 30, 231, 178, 159, 1,
+    250, 255, 246, 184, 159, 1, 217, 187, 246, 184, 159, 1, 250, 255, 223,
+    44, 159, 1, 217, 187, 223, 44, 159, 1, 200, 171, 215, 81, 159, 1, 200,
+    171, 206, 29, 215, 82, 159, 1, 206, 30, 223, 44, 159, 1, 250, 255, 198,
+    79, 159, 1, 217, 187, 198, 79, 159, 1, 250, 255, 237, 152, 159, 1, 217,
+    187, 237, 152, 159, 1, 215, 180, 215, 34, 159, 1, 206, 30, 237, 152, 159,
+    1, 250, 255, 200, 87, 159, 1, 217, 187, 200, 87, 159, 1, 250, 255, 237,
+    172, 159, 1, 217, 187, 237, 172, 159, 1, 237, 204, 215, 34, 159, 1, 206,
+    30, 237, 172, 159, 1, 250, 255, 210, 189, 159, 1, 217, 187, 210, 189,
+    159, 1, 250, 255, 248, 161, 159, 1, 217, 187, 248, 161, 159, 1, 217, 90,
+    159, 1, 250, 235, 248, 161, 159, 1, 193, 74, 159, 1, 208, 14, 159, 1,
+    237, 204, 220, 51, 159, 1, 196, 125, 159, 1, 200, 171, 206, 0, 159, 1,
+    215, 180, 206, 0, 159, 1, 237, 204, 206, 0, 159, 1, 230, 5, 159, 1, 215,
+    180, 220, 51, 159, 1, 233, 49, 159, 3, 251, 34, 159, 18, 3, 251, 98, 159,
+    18, 3, 222, 19, 251, 105, 159, 18, 3, 236, 239, 251, 105, 159, 18, 3,
+    222, 19, 223, 95, 159, 18, 3, 236, 239, 223, 95, 159, 18, 3, 222, 19,
+    211, 76, 159, 18, 3, 236, 239, 211, 76, 159, 18, 3, 231, 222, 159, 18, 3,
+    221, 93, 159, 18, 3, 236, 239, 221, 93, 159, 18, 3, 221, 95, 237, 90,
+    159, 18, 3, 221, 94, 230, 100, 251, 98, 159, 18, 3, 221, 94, 230, 100,
+    236, 239, 251, 98, 159, 18, 3, 221, 94, 230, 100, 231, 177, 159, 18, 3,
+    231, 177, 159, 219, 150, 17, 192, 76, 159, 219, 150, 17, 101, 159, 219,
+    150, 17, 104, 159, 219, 150, 17, 133, 159, 219, 150, 17, 134, 159, 219,
+    150, 17, 151, 159, 219, 150, 17, 170, 159, 219, 150, 17, 179, 159, 219,
+    150, 17, 174, 159, 219, 150, 17, 182, 159, 18, 3, 236, 239, 231, 222,
+    159, 18, 3, 236, 239, 231, 177, 159, 209, 38, 221, 11, 199, 235, 246,
+    100, 221, 114, 222, 135, 199, 235, 246, 100, 221, 221, 221, 244, 199,
+    235, 246, 100, 221, 221, 221, 212, 199, 235, 246, 100, 221, 221, 221,
+    207, 199, 235, 246, 100, 221, 221, 221, 217, 199, 235, 246, 100, 221,
+    221, 208, 35, 199, 235, 246, 100, 214, 91, 214, 78, 199, 235, 246, 100,
+    242, 189, 246, 106, 199, 235, 246, 100, 242, 189, 242, 199, 199, 235,
+    246, 100, 242, 189, 246, 105, 199, 235, 246, 100, 202, 213, 202, 212,
+    199, 235, 246, 100, 242, 189, 242, 185, 199, 235, 246, 100, 193, 2, 193,
+    9, 199, 235, 246, 100, 236, 147, 246, 114, 199, 235, 246, 100, 115, 210,
+    204, 199, 235, 246, 100, 199, 177, 199, 229, 199, 235, 246, 100, 199,
+    177, 215, 57, 199, 235, 246, 100, 199, 177, 210, 54, 199, 235, 246, 100,
+    213, 143, 214, 196, 199, 235, 246, 100, 236, 147, 237, 91, 199, 235, 246,
+    100, 115, 200, 117, 199, 235, 246, 100, 199, 177, 199, 142, 199, 235,
+    246, 100, 199, 177, 199, 236, 199, 235, 246, 100, 199, 177, 199, 171,
+    199, 235, 246, 100, 213, 143, 213, 22, 199, 235, 246, 100, 247, 221, 248,
+    224, 199, 235, 246, 100, 209, 199, 209, 234, 199, 235, 246, 100, 210, 66,
+    210, 56, 199, 235, 246, 100, 232, 165, 233, 97, 199, 235, 246, 100, 210,
+    66, 210, 87, 199, 235, 246, 100, 232, 165, 233, 68, 199, 235, 246, 100,
+    210, 66, 206, 44, 199, 235, 246, 100, 216, 92, 172, 199, 235, 246, 100,
+    193, 2, 193, 105, 199, 235, 246, 100, 207, 56, 206, 211, 199, 235, 246,
+    100, 206, 218, 199, 235, 246, 100, 219, 108, 219, 168, 199, 235, 246,
+    100, 219, 36, 199, 235, 246, 100, 194, 37, 194, 159, 199, 235, 246, 100,
+    202, 213, 206, 61, 199, 235, 246, 100, 202, 213, 206, 182, 199, 235, 246,
+    100, 202, 213, 201, 175, 199, 235, 246, 100, 229, 44, 229, 142, 199, 235,
+    246, 100, 219, 108, 242, 167, 199, 235, 246, 100, 185, 250, 214, 199,
+    235, 246, 100, 229, 44, 213, 133, 199, 235, 246, 100, 211, 51, 199, 235,
+    246, 100, 206, 24, 64, 199, 235, 246, 100, 217, 181, 230, 64, 199, 235,
+    246, 100, 206, 24, 252, 33, 199, 235, 246, 100, 206, 24, 250, 241, 199,
+    235, 246, 100, 206, 24, 70, 199, 235, 246, 100, 206, 24, 223, 224, 199,
+    235, 246, 100, 206, 24, 197, 104, 199, 235, 246, 100, 206, 24, 197, 102,
+    199, 235, 246, 100, 206, 24, 68, 199, 235, 246, 100, 206, 24, 196, 251,
+    199, 235, 246, 100, 210, 68, 199, 235, 238, 137, 16, 248, 225, 199, 235,
+    246, 100, 206, 24, 71, 199, 235, 246, 100, 206, 24, 251, 108, 199, 235,
+    246, 100, 206, 24, 74, 199, 235, 246, 100, 206, 24, 251, 64, 217, 175,
+    199, 235, 246, 100, 206, 24, 251, 64, 217, 176, 199, 235, 246, 100, 220,
+    98, 199, 235, 246, 100, 217, 172, 199, 235, 246, 100, 217, 173, 199, 235,
+    246, 100, 217, 181, 234, 131, 199, 235, 246, 100, 217, 181, 199, 176,
+    199, 235, 246, 100, 217, 181, 198, 188, 199, 235, 246, 100, 217, 181,
+    242, 250, 199, 235, 246, 100, 199, 227, 199, 235, 246, 100, 214, 24, 199,
+    235, 246, 100, 193, 99, 199, 235, 246, 100, 232, 154, 199, 235, 17, 192,
+    76, 199, 235, 17, 101, 199, 235, 17, 104, 199, 235, 17, 133, 199, 235,
+    17, 134, 199, 235, 17, 151, 199, 235, 17, 170, 199, 235, 17, 179, 199,
+    235, 17, 174, 199, 235, 17, 182, 199, 235, 246, 100, 250, 209, 199, 235,
+    246, 100, 221, 218, 220, 77, 1, 221, 113, 220, 77, 1, 221, 221, 201, 120,
+    220, 77, 1, 221, 221, 200, 129, 220, 77, 1, 211, 44, 231, 84, 220, 77, 1,
+    214, 90, 220, 77, 1, 242, 63, 220, 77, 1, 211, 44, 246, 117, 220, 77, 1,
+    202, 213, 200, 129, 220, 77, 1, 211, 44, 223, 28, 220, 77, 1, 212, 165,
+    220, 77, 1, 211, 44, 212, 201, 220, 77, 1, 211, 44, 198, 83, 220, 77, 1,
+    211, 44, 198, 71, 220, 77, 1, 211, 44, 237, 161, 220, 77, 1, 211, 44,
+    237, 145, 220, 77, 1, 211, 44, 213, 178, 220, 77, 1, 236, 146, 220, 77,
+    1, 155, 220, 77, 1, 199, 177, 201, 120, 220, 77, 1, 199, 177, 200, 129,
+    220, 77, 1, 211, 44, 237, 40, 220, 77, 1, 213, 142, 220, 77, 1, 247, 220,
+    220, 77, 1, 209, 198, 220, 77, 1, 210, 66, 201, 120, 220, 77, 1, 232,
+    165, 200, 129, 220, 77, 1, 210, 66, 200, 129, 220, 77, 1, 232, 165, 201,
+    120, 220, 77, 1, 211, 44, 248, 54, 220, 77, 1, 216, 91, 220, 77, 1, 193,
+    1, 220, 77, 1, 219, 108, 219, 168, 220, 77, 1, 219, 108, 219, 67, 220,
+    77, 1, 194, 36, 220, 77, 1, 206, 32, 204, 64, 220, 77, 1, 206, 32, 202,
+    92, 220, 77, 1, 202, 213, 201, 120, 220, 77, 1, 229, 44, 201, 120, 220,
+    77, 1, 211, 44, 219, 137, 220, 77, 1, 74, 220, 77, 1, 229, 44, 200, 129,
+    220, 77, 234, 105, 220, 77, 18, 3, 64, 220, 77, 18, 3, 217, 181, 222,
+    121, 220, 77, 18, 3, 252, 33, 220, 77, 18, 3, 250, 241, 220, 77, 18, 3,
+    70, 220, 77, 18, 3, 223, 224, 220, 77, 18, 3, 193, 148, 220, 77, 18, 3,
+    192, 165, 220, 77, 18, 3, 68, 220, 77, 18, 3, 196, 251, 220, 77, 3, 211,
+    44, 196, 11, 220, 77, 18, 3, 217, 181, 221, 91, 220, 77, 204, 175, 3,
+    219, 107, 220, 77, 204, 175, 3, 212, 165, 220, 77, 18, 3, 71, 220, 77,
+    18, 3, 234, 150, 220, 77, 18, 3, 74, 220, 77, 18, 3, 249, 236, 220, 77,
+    18, 3, 251, 63, 220, 77, 221, 114, 177, 220, 77, 158, 217, 181, 234, 131,
+    220, 77, 158, 217, 181, 199, 176, 220, 77, 158, 217, 181, 199, 128, 220,
+    77, 158, 217, 181, 246, 192, 220, 77, 246, 240, 77, 220, 77, 214, 33,
+    220, 77, 17, 192, 76, 220, 77, 17, 101, 220, 77, 17, 104, 220, 77, 17,
+    133, 220, 77, 17, 134, 220, 77, 17, 151, 220, 77, 17, 170, 220, 77, 17,
+    179, 220, 77, 17, 174, 220, 77, 17, 182, 220, 77, 229, 44, 213, 142, 220,
+    77, 229, 44, 216, 91, 220, 77, 1, 221, 222, 230, 254, 220, 77, 1, 221,
+    222, 212, 165, 86, 5, 211, 219, 86, 122, 230, 188, 193, 14, 216, 193,
+    198, 124, 64, 86, 122, 230, 188, 193, 14, 216, 193, 255, 34, 207, 60,
+    248, 125, 172, 86, 122, 230, 188, 193, 14, 216, 193, 255, 34, 230, 188,
+    198, 104, 172, 86, 122, 88, 193, 14, 216, 193, 217, 50, 172, 86, 122,
+    242, 80, 193, 14, 216, 193, 204, 71, 172, 86, 122, 246, 212, 193, 14,
+    216, 193, 210, 55, 204, 57, 172, 86, 122, 193, 14, 216, 193, 198, 104,
+    204, 57, 172, 86, 122, 205, 254, 204, 56, 86, 122, 247, 127, 193, 14,
+    216, 192, 86, 122, 247, 250, 203, 205, 193, 14, 216, 192, 86, 122, 223,
+    126, 198, 103, 86, 122, 237, 83, 198, 104, 247, 126, 86, 122, 204, 56,
+    86, 122, 212, 170, 204, 56, 86, 122, 198, 104, 204, 56, 86, 122, 212,
+    170, 198, 104, 204, 56, 86, 122, 207, 84, 242, 231, 202, 109, 204, 56,
+    86, 122, 207, 160, 230, 222, 204, 56, 86, 122, 246, 212, 255, 38, 206,
+    223, 217, 49, 184, 246, 243, 86, 122, 230, 188, 198, 103, 86, 219, 91, 3,
+    246, 115, 206, 222, 86, 219, 91, 3, 219, 220, 206, 222, 86, 250, 32, 3,
+    204, 67, 231, 161, 255, 39, 206, 222, 86, 250, 32, 3, 255, 36, 166, 86,
+    250, 32, 3, 205, 224, 198, 98, 86, 3, 208, 9, 236, 161, 231, 160, 86, 3,
+    208, 9, 236, 161, 231, 0, 86, 3, 208, 9, 236, 161, 230, 189, 86, 3, 208,
+    9, 215, 77, 231, 160, 86, 3, 208, 9, 215, 77, 231, 0, 86, 3, 208, 9, 236,
+    161, 208, 9, 215, 76, 86, 17, 192, 76, 86, 17, 101, 86, 17, 104, 86, 17,
+    133, 86, 17, 134, 86, 17, 151, 86, 17, 170, 86, 17, 179, 86, 17, 174, 86,
+    17, 182, 86, 17, 138, 101, 86, 17, 138, 104, 86, 17, 138, 133, 86, 17,
+    138, 134, 86, 17, 138, 151, 86, 17, 138, 170, 86, 17, 138, 179, 86, 17,
+    138, 174, 86, 17, 138, 182, 86, 17, 138, 192, 76, 86, 122, 247, 129, 206,
+    222, 86, 122, 214, 156, 247, 54, 212, 182, 192, 10, 86, 122, 246, 212,
+    255, 38, 206, 223, 247, 55, 216, 138, 246, 243, 86, 122, 214, 156, 247,
+    54, 204, 68, 206, 222, 86, 122, 242, 246, 216, 192, 86, 122, 198, 119,
+    255, 35, 86, 122, 230, 171, 206, 223, 230, 127, 86, 122, 230, 171, 206,
+    223, 230, 133, 86, 122, 250, 215, 221, 239, 230, 127, 86, 122, 250, 215,
+    221, 239, 230, 133, 86, 3, 193, 91, 198, 102, 86, 3, 217, 136, 198, 102,
+    86, 1, 160, 86, 1, 221, 250, 86, 1, 231, 233, 86, 1, 231, 84, 86, 1, 214,
+    165, 86, 1, 247, 19, 86, 1, 246, 117, 86, 1, 223, 62, 86, 1, 212, 201,
+    86, 1, 198, 83, 86, 1, 198, 71, 86, 1, 237, 161, 86, 1, 237, 145, 86, 1,
+    213, 178, 86, 1, 189, 86, 1, 199, 240, 86, 1, 238, 0, 86, 1, 237, 40, 86,
+    1, 181, 86, 1, 166, 86, 1, 210, 94, 86, 1, 249, 3, 86, 1, 248, 54, 86, 1,
+    172, 86, 1, 198, 118, 86, 1, 198, 108, 86, 1, 235, 17, 86, 1, 235, 11,
+    86, 1, 194, 169, 86, 1, 192, 71, 86, 1, 192, 112, 86, 1, 255, 41, 86, 1,
+    168, 86, 1, 167, 86, 1, 177, 86, 1, 204, 64, 86, 1, 202, 92, 86, 1, 188,
+    86, 1, 144, 86, 1, 64, 86, 1, 221, 47, 86, 1, 232, 210, 167, 86, 1, 221,
+    139, 86, 1, 207, 3, 86, 18, 3, 252, 33, 86, 18, 3, 70, 86, 18, 3, 223,
+    224, 86, 18, 3, 68, 86, 18, 3, 196, 251, 86, 18, 3, 118, 150, 86, 18, 3,
+    118, 207, 4, 86, 18, 3, 118, 165, 86, 18, 3, 118, 219, 138, 86, 18, 3,
+    71, 86, 18, 3, 234, 171, 86, 18, 3, 74, 86, 18, 3, 211, 194, 86, 3, 207,
+    66, 201, 185, 214, 166, 207, 55, 86, 3, 207, 60, 248, 124, 86, 18, 3,
+    207, 168, 70, 86, 18, 3, 207, 168, 223, 224, 86, 3, 212, 182, 192, 11,
+    215, 85, 238, 0, 86, 3, 202, 227, 220, 44, 86, 122, 230, 80, 86, 122,
+    211, 36, 86, 3, 220, 47, 206, 222, 86, 3, 193, 96, 206, 222, 86, 3, 220,
+    48, 198, 119, 246, 243, 86, 3, 217, 52, 246, 243, 86, 3, 230, 192, 246,
+    244, 207, 158, 86, 3, 230, 192, 217, 38, 207, 158, 86, 3, 223, 121, 217,
+    52, 246, 243, 86, 201, 164, 3, 220, 48, 198, 119, 246, 243, 86, 201, 164,
+    3, 217, 52, 246, 243, 86, 201, 164, 3, 223, 121, 217, 52, 246, 243, 86,
+    201, 164, 1, 160, 86, 201, 164, 1, 221, 250, 86, 201, 164, 1, 231, 233,
+    86, 201, 164, 1, 231, 84, 86, 201, 164, 1, 214, 165, 86, 201, 164, 1,
+    247, 19, 86, 201, 164, 1, 246, 117, 86, 201, 164, 1, 223, 62, 86, 201,
+    164, 1, 212, 201, 86, 201, 164, 1, 198, 83, 86, 201, 164, 1, 198, 71, 86,
+    201, 164, 1, 237, 161, 86, 201, 164, 1, 237, 145, 86, 201, 164, 1, 213,
+    178, 86, 201, 164, 1, 189, 86, 201, 164, 1, 199, 240, 86, 201, 164, 1,
+    238, 0, 86, 201, 164, 1, 237, 40, 86, 201, 164, 1, 181, 86, 201, 164, 1,
+    166, 86, 201, 164, 1, 210, 94, 86, 201, 164, 1, 249, 3, 86, 201, 164, 1,
+    248, 54, 86, 201, 164, 1, 172, 86, 201, 164, 1, 198, 118, 86, 201, 164,
+    1, 198, 108, 86, 201, 164, 1, 235, 17, 86, 201, 164, 1, 235, 11, 86, 201,
+    164, 1, 194, 169, 86, 201, 164, 1, 192, 71, 86, 201, 164, 1, 192, 112,
+    86, 201, 164, 1, 255, 41, 86, 201, 164, 1, 168, 86, 201, 164, 1, 167, 86,
+    201, 164, 1, 177, 86, 201, 164, 1, 204, 64, 86, 201, 164, 1, 202, 92, 86,
+    201, 164, 1, 188, 86, 201, 164, 1, 144, 86, 201, 164, 1, 64, 86, 201,
+    164, 1, 221, 47, 86, 201, 164, 1, 232, 210, 194, 169, 86, 201, 164, 1,
+    232, 210, 168, 86, 201, 164, 1, 232, 210, 167, 86, 221, 34, 206, 219,
+    221, 250, 86, 221, 34, 206, 219, 221, 251, 247, 55, 216, 138, 246, 243,
+    86, 246, 227, 3, 87, 248, 114, 86, 246, 227, 3, 152, 248, 114, 86, 246,
+    227, 3, 246, 231, 200, 69, 86, 246, 227, 3, 205, 253, 255, 40, 86, 16,
+    235, 78, 247, 124, 86, 16, 208, 8, 207, 67, 86, 16, 211, 63, 231, 159,
+    86, 16, 208, 8, 207, 68, 207, 160, 230, 221, 86, 16, 210, 55, 166, 86,
+    16, 213, 120, 247, 124, 86, 16, 213, 120, 247, 125, 212, 170, 255, 37,
+    86, 16, 213, 120, 247, 125, 230, 190, 255, 37, 86, 16, 213, 120, 247,
+    125, 247, 55, 255, 37, 86, 3, 208, 9, 215, 77, 208, 9, 236, 160, 86, 3,
+    208, 9, 215, 77, 230, 189, 86, 122, 247, 128, 203, 205, 231, 47, 216,
+    193, 207, 159, 86, 122, 216, 93, 193, 14, 231, 47, 216, 193, 207, 159,
+    86, 122, 212, 170, 198, 103, 86, 122, 88, 247, 157, 207, 57, 193, 14,
+    216, 193, 217, 50, 172, 86, 122, 242, 80, 247, 157, 207, 57, 193, 14,
+    216, 193, 204, 71, 172, 207, 100, 201, 81, 57, 220, 27, 201, 81, 57, 207,
+    100, 201, 81, 3, 4, 236, 111, 220, 27, 201, 81, 3, 4, 236, 111, 86, 122,
+    220, 39, 217, 53, 206, 222, 86, 122, 198, 215, 217, 53, 206, 222, 79, 1,
+    160, 79, 1, 221, 250, 79, 1, 231, 233, 79, 1, 231, 84, 79, 1, 214, 165,
+    79, 1, 247, 19, 79, 1, 246, 117, 79, 1, 223, 62, 79, 1, 223, 28, 79, 1,
+    212, 201, 79, 1, 213, 144, 79, 1, 198, 83, 79, 1, 198, 71, 79, 1, 237,
+    161, 79, 1, 237, 145, 79, 1, 213, 178, 79, 1, 189, 79, 1, 199, 240, 79,
+    1, 238, 0, 79, 1, 237, 40, 79, 1, 181, 79, 1, 166, 79, 1, 210, 94, 79, 1,
+    249, 3, 79, 1, 248, 54, 79, 1, 172, 79, 1, 168, 79, 1, 167, 79, 1, 177,
+    79, 1, 194, 169, 79, 1, 188, 79, 1, 144, 79, 1, 219, 137, 79, 1, 64, 79,
+    1, 204, 38, 64, 79, 1, 70, 79, 1, 223, 224, 79, 1, 68, 79, 1, 196, 251,
+    79, 1, 71, 79, 1, 216, 56, 71, 79, 1, 74, 79, 1, 250, 8, 79, 18, 3, 200,
+    132, 252, 33, 79, 18, 3, 252, 33, 79, 18, 3, 70, 79, 18, 3, 223, 224, 79,
+    18, 3, 68, 79, 18, 3, 196, 251, 79, 18, 3, 71, 79, 18, 3, 251, 63, 79,
+    18, 3, 216, 56, 223, 224, 79, 18, 3, 216, 56, 74, 79, 18, 3, 234, 253,
+    58, 79, 3, 250, 168, 79, 3, 78, 63, 79, 3, 196, 6, 79, 3, 196, 11, 79, 3,
+    250, 58, 79, 116, 3, 217, 35, 168, 79, 116, 3, 217, 35, 167, 79, 116, 3,
+    217, 35, 194, 169, 79, 116, 3, 217, 35, 144, 79, 1, 230, 206, 188, 79,
+    17, 192, 76, 79, 17, 101, 79, 17, 104, 79, 17, 133, 79, 17, 134, 79, 17,
+    151, 79, 17, 170, 79, 17, 179, 79, 17, 174, 79, 17, 182, 79, 3, 219, 147,
+    205, 208, 79, 3, 205, 208, 79, 16, 219, 100, 79, 16, 242, 31, 79, 16,
+    251, 84, 79, 16, 231, 139, 79, 1, 204, 64, 79, 1, 202, 92, 79, 1, 118,
+    150, 79, 1, 118, 207, 4, 79, 1, 118, 165, 79, 1, 118, 219, 138, 79, 18,
+    3, 118, 150, 79, 18, 3, 118, 207, 4, 79, 18, 3, 118, 165, 79, 18, 3, 118,
+    219, 138, 79, 1, 216, 56, 214, 165, 79, 1, 216, 56, 223, 28, 79, 1, 216,
+    56, 248, 159, 79, 1, 216, 56, 248, 154, 79, 116, 3, 216, 56, 217, 35,
+    181, 79, 116, 3, 216, 56, 217, 35, 172, 79, 116, 3, 216, 56, 217, 35,
+    177, 79, 1, 204, 70, 222, 96, 204, 64, 79, 18, 3, 204, 70, 222, 96, 233,
+    230, 79, 158, 122, 204, 70, 222, 96, 230, 14, 79, 158, 122, 204, 70, 222,
+    96, 222, 58, 210, 65, 79, 1, 194, 88, 209, 3, 222, 96, 199, 240, 79, 1,
+    194, 88, 209, 3, 222, 96, 209, 9, 79, 18, 3, 194, 88, 209, 3, 222, 96,
+    233, 230, 79, 18, 3, 194, 88, 209, 3, 222, 96, 197, 104, 79, 3, 194, 88,
+    209, 3, 222, 96, 199, 17, 79, 3, 194, 88, 209, 3, 222, 96, 199, 16, 79,
+    3, 194, 88, 209, 3, 222, 96, 199, 15, 79, 3, 194, 88, 209, 3, 222, 96,
+    199, 14, 79, 3, 194, 88, 209, 3, 222, 96, 199, 13, 79, 1, 234, 184, 209,
+    3, 222, 96, 213, 178, 79, 1, 234, 184, 209, 3, 222, 96, 192, 172, 79, 1,
+    234, 184, 209, 3, 222, 96, 231, 49, 79, 18, 3, 231, 154, 222, 96, 70, 79,
+    18, 3, 222, 63, 212, 0, 79, 18, 3, 222, 63, 68, 79, 18, 3, 222, 63, 234,
+    171, 79, 1, 204, 38, 160, 79, 1, 204, 38, 221, 250, 79, 1, 204, 38, 231,
+    233, 79, 1, 204, 38, 247, 19, 79, 1, 204, 38, 192, 112, 79, 1, 204, 38,
+    212, 201, 79, 1, 204, 38, 238, 0, 79, 1, 204, 38, 181, 79, 1, 204, 38,
+    210, 94, 79, 1, 204, 38, 233, 97, 79, 1, 204, 38, 249, 3, 79, 1, 204, 38,
+    199, 240, 79, 1, 204, 38, 144, 79, 116, 3, 204, 38, 217, 35, 194, 169,
+    79, 18, 3, 204, 38, 252, 33, 79, 18, 3, 204, 38, 71, 79, 18, 3, 204, 38,
+    234, 253, 58, 79, 18, 3, 204, 38, 52, 193, 148, 79, 3, 204, 38, 199, 16,
+    79, 3, 204, 38, 199, 15, 79, 3, 204, 38, 199, 13, 79, 3, 204, 38, 199,
+    12, 79, 3, 204, 38, 238, 213, 199, 16, 79, 3, 204, 38, 238, 213, 199, 15,
+    79, 3, 204, 38, 238, 213, 234, 91, 199, 18, 79, 1, 206, 197, 211, 46,
+    233, 97, 79, 3, 206, 197, 211, 46, 199, 13, 79, 204, 38, 17, 192, 76, 79,
+    204, 38, 17, 101, 79, 204, 38, 17, 104, 79, 204, 38, 17, 133, 79, 204,
+    38, 17, 134, 79, 204, 38, 17, 151, 79, 204, 38, 17, 170, 79, 204, 38, 17,
+    179, 79, 204, 38, 17, 174, 79, 204, 38, 17, 182, 79, 3, 221, 242, 199,
+    17, 79, 3, 221, 242, 199, 15, 79, 18, 3, 251, 49, 64, 79, 18, 3, 251, 49,
+    251, 63, 79, 16, 204, 38, 101, 79, 16, 204, 38, 233, 203, 98, 6, 1, 250,
+    224, 98, 6, 1, 248, 207, 98, 6, 1, 231, 203, 98, 6, 1, 236, 123, 98, 6,
+    1, 234, 88, 98, 6, 1, 196, 20, 98, 6, 1, 192, 79, 98, 6, 1, 200, 125, 98,
+    6, 1, 223, 190, 98, 6, 1, 222, 121, 98, 6, 1, 220, 67, 98, 6, 1, 217,
+    160, 98, 6, 1, 215, 51, 98, 6, 1, 211, 211, 98, 6, 1, 210, 247, 98, 6, 1,
+    192, 67, 98, 6, 1, 208, 53, 98, 6, 1, 206, 40, 98, 6, 1, 200, 112, 98, 6,
+    1, 197, 77, 98, 6, 1, 210, 86, 98, 6, 1, 221, 237, 98, 6, 1, 231, 75, 98,
+    6, 1, 208, 224, 98, 6, 1, 203, 224, 98, 6, 1, 242, 201, 98, 6, 1, 246,
+    243, 98, 6, 1, 223, 10, 98, 6, 1, 242, 138, 98, 6, 1, 246, 101, 98, 6, 1,
+    193, 207, 98, 6, 1, 223, 25, 98, 6, 1, 230, 95, 98, 6, 1, 229, 255, 98,
+    6, 1, 229, 165, 98, 6, 1, 194, 111, 98, 6, 1, 230, 28, 98, 6, 1, 229, 31,
+    98, 6, 1, 193, 3, 98, 6, 1, 251, 97, 98, 1, 250, 224, 98, 1, 248, 207,
+    98, 1, 231, 203, 98, 1, 236, 123, 98, 1, 234, 88, 98, 1, 196, 20, 98, 1,
+    192, 79, 98, 1, 200, 125, 98, 1, 223, 190, 98, 1, 222, 121, 98, 1, 220,
+    67, 98, 1, 217, 160, 98, 1, 215, 51, 98, 1, 211, 211, 98, 1, 210, 247,
+    98, 1, 192, 67, 98, 1, 208, 53, 98, 1, 206, 40, 98, 1, 200, 112, 98, 1,
+    197, 77, 98, 1, 210, 86, 98, 1, 221, 237, 98, 1, 231, 75, 98, 1, 208,
+    224, 98, 1, 203, 224, 98, 1, 242, 201, 98, 1, 246, 243, 98, 1, 223, 10,
+    98, 1, 242, 138, 98, 1, 246, 101, 98, 1, 193, 207, 98, 1, 223, 25, 98, 1,
+    230, 95, 98, 1, 229, 255, 98, 1, 229, 165, 98, 1, 194, 111, 98, 1, 230,
+    28, 98, 1, 229, 31, 98, 1, 233, 11, 98, 1, 193, 3, 98, 1, 234, 107, 98,
+    1, 163, 231, 203, 98, 1, 251, 57, 98, 210, 244, 204, 165, 73, 1, 98, 215,
+    51, 98, 1, 251, 97, 98, 1, 230, 26, 57, 98, 1, 220, 175, 57, 30, 143,
+    221, 151, 30, 143, 202, 84, 30, 143, 214, 45, 30, 143, 199, 103, 30, 143,
+    202, 73, 30, 143, 207, 133, 30, 143, 216, 153, 30, 143, 210, 36, 30, 143,
+    202, 81, 30, 143, 203, 64, 30, 143, 202, 78, 30, 143, 223, 247, 30, 143,
+    242, 144, 30, 143, 202, 88, 30, 143, 242, 211, 30, 143, 221, 225, 30,
+    143, 199, 198, 30, 143, 210, 75, 30, 143, 229, 162, 30, 143, 214, 41, 30,
+    143, 202, 82, 30, 143, 214, 35, 30, 143, 214, 39, 30, 143, 199, 100, 30,
+    143, 207, 121, 30, 143, 202, 80, 30, 143, 207, 131, 30, 143, 222, 102,
+    30, 143, 216, 146, 30, 143, 222, 105, 30, 143, 210, 31, 30, 143, 210, 29,
+    30, 143, 210, 17, 30, 143, 210, 25, 30, 143, 210, 23, 30, 143, 210, 20,
+    30, 143, 210, 22, 30, 143, 210, 19, 30, 143, 210, 24, 30, 143, 210, 34,
+    30, 143, 210, 35, 30, 143, 210, 18, 30, 143, 210, 28, 30, 143, 222, 103,
+    30, 143, 222, 101, 30, 143, 203, 57, 30, 143, 203, 55, 30, 143, 203, 47,
+    30, 143, 203, 50, 30, 143, 203, 56, 30, 143, 203, 52, 30, 143, 203, 51,
+    30, 143, 203, 49, 30, 143, 203, 60, 30, 143, 203, 62, 30, 143, 203, 63,
+    30, 143, 203, 58, 30, 143, 203, 48, 30, 143, 203, 53, 30, 143, 203, 61,
+    30, 143, 242, 192, 30, 143, 242, 190, 30, 143, 246, 130, 30, 143, 246,
+    128, 30, 143, 211, 8, 30, 143, 223, 242, 30, 143, 223, 233, 30, 143, 223,
+    241, 30, 143, 223, 238, 30, 143, 223, 236, 30, 143, 223, 240, 30, 143,
+    202, 85, 30, 143, 223, 245, 30, 143, 223, 246, 30, 143, 223, 234, 30,
+    143, 223, 239, 30, 143, 193, 46, 30, 143, 242, 143, 30, 143, 242, 193,
+    30, 143, 242, 191, 30, 143, 246, 131, 30, 143, 246, 129, 30, 143, 242,
+    209, 30, 143, 242, 210, 30, 143, 242, 194, 30, 143, 246, 132, 30, 143,
+    210, 73, 30, 143, 222, 104, 30, 143, 202, 86, 30, 143, 193, 52, 30, 143,
+    221, 142, 30, 143, 214, 37, 30, 143, 214, 43, 30, 143, 214, 42, 30, 143,
+    199, 97, 30, 143, 232, 247, 30, 222, 206, 232, 247, 30, 222, 206, 64, 30,
+    222, 206, 251, 108, 30, 222, 206, 168, 30, 222, 206, 193, 118, 30, 222,
+    206, 234, 50, 30, 222, 206, 71, 30, 222, 206, 193, 56, 30, 222, 206, 193,
+    69, 30, 222, 206, 74, 30, 222, 206, 194, 169, 30, 222, 206, 194, 160, 30,
+    222, 206, 212, 0, 30, 222, 206, 193, 1, 30, 222, 206, 68, 30, 222, 206,
+    194, 93, 30, 222, 206, 194, 111, 30, 222, 206, 194, 72, 30, 222, 206,
+    192, 214, 30, 222, 206, 233, 230, 30, 222, 206, 193, 22, 30, 222, 206,
+    70, 30, 222, 206, 255, 29, 30, 222, 206, 255, 28, 30, 222, 206, 193, 132,
+    30, 222, 206, 193, 130, 30, 222, 206, 234, 48, 30, 222, 206, 234, 47, 30,
+    222, 206, 234, 49, 30, 222, 206, 193, 55, 30, 222, 206, 193, 54, 30, 222,
+    206, 212, 110, 30, 222, 206, 212, 111, 30, 222, 206, 212, 104, 30, 222,
+    206, 212, 109, 30, 222, 206, 212, 107, 30, 222, 206, 192, 245, 30, 222,
+    206, 192, 244, 30, 222, 206, 192, 243, 30, 222, 206, 192, 246, 30, 222,
+    206, 192, 247, 30, 222, 206, 197, 177, 30, 222, 206, 197, 176, 30, 222,
+    206, 197, 174, 30, 222, 206, 197, 170, 30, 222, 206, 197, 171, 30, 222,
+    206, 192, 209, 30, 222, 206, 192, 206, 30, 222, 206, 192, 207, 30, 222,
+    206, 192, 201, 30, 222, 206, 192, 202, 30, 222, 206, 192, 203, 30, 222,
+    206, 192, 205, 30, 222, 206, 233, 224, 30, 222, 206, 233, 226, 30, 222,
+    206, 193, 21, 30, 222, 206, 228, 92, 30, 222, 206, 228, 84, 30, 222, 206,
+    228, 87, 30, 222, 206, 228, 85, 30, 222, 206, 228, 89, 30, 222, 206, 228,
+    91, 30, 222, 206, 250, 123, 30, 222, 206, 250, 120, 30, 222, 206, 250,
+    118, 30, 222, 206, 250, 119, 30, 222, 206, 202, 89, 30, 222, 206, 255,
+    30, 30, 222, 206, 193, 131, 30, 222, 206, 193, 53, 30, 222, 206, 212,
+    106, 30, 222, 206, 212, 105, 30, 123, 221, 151, 30, 123, 202, 84, 30,
+    123, 221, 144, 30, 123, 214, 45, 30, 123, 214, 43, 30, 123, 214, 42, 30,
+    123, 199, 103, 30, 123, 207, 133, 30, 123, 207, 128, 30, 123, 207, 125,
+    30, 123, 207, 118, 30, 123, 207, 113, 30, 123, 207, 108, 30, 123, 207,
+    119, 30, 123, 207, 131, 30, 123, 216, 153, 30, 123, 210, 36, 30, 123,
+    210, 25, 30, 123, 203, 64, 30, 123, 202, 78, 30, 123, 223, 247, 30, 123,
+    242, 144, 30, 123, 242, 211, 30, 123, 221, 225, 30, 123, 199, 198, 30,
+    123, 210, 75, 30, 123, 229, 162, 30, 123, 221, 145, 30, 123, 221, 143,
+    30, 123, 214, 41, 30, 123, 214, 35, 30, 123, 214, 37, 30, 123, 214, 40,
+    30, 123, 214, 36, 30, 123, 199, 100, 30, 123, 199, 97, 30, 123, 207, 126,
+    30, 123, 207, 121, 30, 123, 207, 107, 30, 123, 207, 106, 30, 123, 202,
+    80, 30, 123, 207, 123, 30, 123, 207, 122, 30, 123, 207, 115, 30, 123,
+    207, 117, 30, 123, 207, 130, 30, 123, 207, 110, 30, 123, 207, 120, 30,
+    123, 207, 129, 30, 123, 207, 105, 30, 123, 216, 149, 30, 123, 216, 144,
+    30, 123, 216, 146, 30, 123, 216, 143, 30, 123, 216, 141, 30, 123, 216,
+    147, 30, 123, 216, 152, 30, 123, 216, 150, 30, 123, 222, 105, 30, 123,
+    210, 27, 30, 123, 210, 28, 30, 123, 210, 33, 30, 123, 222, 103, 30, 123,
+    203, 57, 30, 123, 203, 47, 30, 123, 203, 50, 30, 123, 203, 52, 30, 123,
+    211, 8, 30, 123, 223, 242, 30, 123, 223, 235, 30, 123, 202, 85, 30, 123,
+    223, 243, 30, 123, 193, 46, 30, 123, 193, 40, 30, 123, 193, 41, 30, 123,
+    210, 73, 30, 123, 222, 104, 30, 123, 229, 160, 30, 123, 229, 158, 30,
+    123, 229, 161, 30, 123, 229, 159, 30, 123, 193, 52, 30, 123, 221, 147,
+    30, 123, 221, 146, 30, 123, 221, 150, 30, 123, 221, 148, 30, 123, 221,
+    149, 30, 123, 202, 82, 36, 5, 144, 36, 5, 228, 181, 36, 5, 229, 178, 36,
+    5, 230, 99, 36, 5, 229, 225, 36, 5, 229, 255, 36, 5, 229, 43, 36, 5, 229,
+    34, 36, 5, 177, 36, 5, 219, 36, 36, 5, 219, 209, 36, 5, 220, 184, 36, 5,
+    220, 32, 36, 5, 220, 42, 36, 5, 219, 107, 36, 5, 219, 3, 36, 5, 229, 187,
+    36, 5, 229, 181, 36, 5, 229, 183, 36, 5, 229, 186, 36, 5, 229, 184, 36,
+    5, 229, 185, 36, 5, 229, 182, 36, 5, 229, 180, 36, 5, 172, 36, 5, 215,
+    241, 36, 5, 216, 175, 36, 5, 217, 219, 36, 5, 217, 29, 36, 5, 217, 48,
+    36, 5, 216, 91, 36, 5, 215, 168, 36, 5, 200, 239, 36, 5, 200, 233, 36, 5,
+    200, 235, 36, 5, 200, 238, 36, 5, 200, 236, 36, 5, 200, 237, 36, 5, 200,
+    234, 36, 5, 200, 232, 36, 5, 167, 36, 5, 206, 218, 36, 5, 207, 151, 36,
+    5, 208, 68, 36, 5, 207, 234, 36, 5, 208, 7, 36, 5, 207, 55, 36, 5, 206,
+    176, 36, 5, 188, 36, 5, 201, 184, 36, 5, 203, 125, 36, 5, 206, 91, 36, 5,
+    205, 205, 36, 5, 205, 223, 36, 5, 202, 212, 36, 5, 201, 79, 36, 5, 204,
+    64, 36, 5, 203, 164, 36, 5, 203, 236, 36, 5, 204, 59, 36, 5, 204, 10, 36,
+    5, 204, 12, 36, 5, 203, 211, 36, 5, 203, 143, 36, 5, 208, 239, 36, 5,
+    208, 177, 36, 5, 208, 201, 36, 5, 208, 238, 36, 5, 208, 218, 36, 5, 208,
+    219, 36, 5, 208, 189, 36, 5, 208, 188, 36, 5, 208, 130, 36, 5, 208, 126,
+    36, 5, 208, 129, 36, 5, 208, 127, 36, 5, 208, 128, 36, 5, 208, 215, 36,
+    5, 208, 207, 36, 5, 208, 210, 36, 5, 208, 214, 36, 5, 208, 211, 36, 5,
+    208, 212, 36, 5, 208, 209, 36, 5, 208, 206, 36, 5, 208, 202, 36, 5, 208,
+    205, 36, 5, 208, 203, 36, 5, 208, 204, 36, 5, 249, 3, 36, 5, 247, 124,
+    36, 5, 248, 41, 36, 5, 249, 1, 36, 5, 248, 108, 36, 5, 248, 123, 36, 5,
+    247, 220, 36, 5, 247, 69, 36, 5, 196, 157, 36, 5, 194, 223, 36, 5, 196,
+    39, 36, 5, 196, 156, 36, 5, 196, 118, 36, 5, 196, 123, 36, 5, 195, 252,
+    36, 5, 194, 212, 36, 5, 189, 36, 5, 198, 45, 36, 5, 199, 128, 36, 5, 200,
+    174, 36, 5, 200, 56, 36, 5, 200, 79, 36, 5, 155, 36, 5, 197, 250, 36, 5,
+    247, 19, 36, 5, 238, 162, 36, 5, 242, 149, 36, 5, 247, 18, 36, 5, 246,
+    150, 36, 5, 246, 158, 36, 5, 242, 63, 36, 5, 238, 118, 36, 5, 193, 209,
+    36, 5, 193, 177, 36, 5, 193, 196, 36, 5, 193, 208, 36, 5, 193, 202, 36,
+    5, 193, 203, 36, 5, 193, 185, 36, 5, 193, 184, 36, 5, 193, 170, 36, 5,
+    193, 166, 36, 5, 193, 169, 36, 5, 193, 167, 36, 5, 193, 168, 36, 5, 181,
+    36, 5, 213, 22, 36, 5, 214, 60, 36, 5, 215, 84, 36, 5, 214, 203, 36, 5,
+    214, 214, 36, 5, 213, 142, 36, 5, 212, 210, 36, 5, 212, 201, 36, 5, 212,
+    158, 36, 5, 212, 181, 36, 5, 212, 200, 36, 5, 212, 189, 36, 5, 212, 190,
+    36, 5, 212, 165, 36, 5, 212, 148, 36, 5, 231, 6, 64, 36, 5, 231, 6, 68,
+    36, 5, 231, 6, 70, 36, 5, 231, 6, 252, 33, 36, 5, 231, 6, 234, 171, 36,
+    5, 231, 6, 71, 36, 5, 231, 6, 74, 36, 5, 231, 6, 194, 169, 36, 5, 160,
+    36, 5, 221, 33, 36, 5, 221, 204, 36, 5, 222, 159, 36, 5, 222, 48, 36, 5,
+    222, 57, 36, 5, 221, 113, 36, 5, 221, 108, 36, 5, 220, 238, 36, 5, 220,
+    231, 36, 5, 220, 237, 36, 5, 220, 232, 36, 5, 220, 233, 36, 5, 220, 224,
+    36, 5, 220, 218, 36, 5, 220, 220, 36, 5, 220, 223, 36, 5, 220, 221, 36,
+    5, 220, 222, 36, 5, 220, 219, 36, 5, 220, 217, 36, 5, 220, 213, 36, 5,
+    220, 216, 36, 5, 220, 214, 36, 5, 220, 215, 36, 5, 194, 169, 36, 5, 193,
+    244, 36, 5, 194, 72, 36, 5, 194, 163, 36, 5, 194, 100, 36, 5, 194, 111,
+    36, 5, 194, 36, 36, 5, 194, 28, 36, 5, 210, 85, 64, 36, 5, 210, 85, 68,
+    36, 5, 210, 85, 70, 36, 5, 210, 85, 252, 33, 36, 5, 210, 85, 234, 171,
+    36, 5, 210, 85, 71, 36, 5, 210, 85, 74, 36, 5, 192, 112, 36, 5, 191, 252,
+    36, 5, 192, 30, 36, 5, 192, 110, 36, 5, 192, 82, 36, 5, 192, 85, 36, 5,
+    192, 8, 36, 5, 191, 239, 36, 5, 192, 71, 36, 5, 192, 48, 36, 5, 192, 57,
+    36, 5, 192, 70, 36, 5, 192, 61, 36, 5, 192, 62, 36, 5, 192, 54, 36, 5,
+    192, 39, 36, 5, 168, 36, 5, 192, 214, 36, 5, 193, 22, 36, 5, 193, 129,
+    36, 5, 193, 66, 36, 5, 193, 69, 36, 5, 193, 1, 36, 5, 192, 241, 36, 5,
+    238, 0, 36, 5, 235, 62, 36, 5, 237, 16, 36, 5, 237, 255, 36, 5, 237, 101,
+    36, 5, 237, 116, 36, 5, 236, 146, 36, 5, 235, 28, 36, 5, 237, 161, 36, 5,
+    237, 126, 36, 5, 237, 138, 36, 5, 237, 160, 36, 5, 237, 148, 36, 5, 237,
+    149, 36, 5, 237, 131, 36, 5, 237, 117, 36, 5, 223, 62, 36, 5, 222, 214,
+    36, 5, 223, 20, 36, 5, 223, 61, 36, 5, 223, 39, 36, 5, 223, 41, 36, 5,
+    222, 233, 36, 5, 222, 192, 36, 5, 231, 233, 36, 5, 230, 186, 36, 5, 231,
+    46, 36, 5, 231, 230, 36, 5, 231, 150, 36, 5, 231, 158, 36, 5, 230, 254,
+    36, 5, 230, 253, 36, 5, 230, 143, 36, 5, 230, 139, 36, 5, 230, 142, 36,
+    5, 230, 140, 36, 5, 230, 141, 36, 5, 231, 120, 36, 5, 231, 100, 36, 5,
+    231, 110, 36, 5, 231, 119, 36, 5, 231, 114, 36, 5, 231, 115, 36, 5, 231,
+    104, 36, 5, 231, 89, 36, 5, 199, 240, 36, 5, 199, 148, 36, 5, 199, 202,
+    36, 5, 199, 239, 36, 5, 199, 222, 36, 5, 199, 224, 36, 5, 199, 176, 36,
+    5, 199, 139, 36, 5, 246, 117, 36, 5, 242, 168, 36, 5, 242, 215, 36, 5,
+    246, 116, 36, 5, 242, 241, 36, 5, 242, 245, 36, 5, 242, 188, 36, 5, 242,
+    157, 36, 5, 210, 94, 36, 5, 210, 57, 36, 5, 210, 77, 36, 5, 210, 93, 36,
+    5, 210, 79, 36, 5, 210, 80, 36, 5, 210, 65, 36, 5, 210, 53, 36, 5, 198,
+    118, 36, 5, 198, 91, 36, 5, 198, 97, 36, 5, 198, 117, 36, 5, 198, 111,
+    36, 5, 198, 112, 36, 5, 198, 95, 36, 5, 198, 89, 36, 5, 197, 191, 36, 5,
+    197, 183, 36, 5, 197, 187, 36, 5, 197, 190, 36, 5, 197, 188, 36, 5, 197,
+    189, 36, 5, 197, 185, 36, 5, 197, 184, 36, 5, 233, 97, 36, 5, 232, 77,
+    36, 5, 233, 11, 36, 5, 233, 96, 36, 5, 233, 40, 36, 5, 233, 47, 36, 5,
+    232, 164, 36, 5, 232, 55, 36, 5, 166, 36, 5, 209, 51, 36, 5, 210, 51, 36,
+    5, 211, 77, 36, 5, 210, 168, 36, 5, 210, 181, 36, 5, 209, 198, 36, 5,
+    209, 9, 36, 5, 206, 166, 36, 5, 215, 157, 36, 5, 232, 49, 36, 38, 231,
+    146, 26, 18, 220, 2, 77, 36, 38, 18, 220, 2, 77, 36, 38, 231, 146, 77,
+    36, 205, 209, 77, 36, 194, 10, 36, 232, 71, 201, 238, 36, 242, 38, 36,
+    204, 180, 36, 242, 47, 36, 209, 112, 242, 47, 36, 208, 159, 77, 36, 210,
+    244, 204, 165, 36, 17, 101, 36, 17, 104, 36, 17, 133, 36, 17, 134, 36,
+    17, 151, 36, 17, 170, 36, 17, 179, 36, 17, 174, 36, 17, 182, 36, 31, 200,
+    30, 36, 31, 197, 239, 36, 31, 199, 184, 36, 31, 232, 126, 36, 31, 233, 3,
+    36, 31, 203, 25, 36, 31, 204, 140, 36, 31, 234, 137, 36, 31, 214, 11, 36,
+    31, 228, 162, 36, 31, 200, 31, 180, 36, 5, 205, 214, 215, 168, 36, 5,
+    215, 164, 36, 5, 215, 165, 36, 5, 215, 166, 36, 5, 205, 214, 247, 69, 36,
+    5, 247, 66, 36, 5, 247, 67, 36, 5, 247, 68, 36, 5, 205, 214, 232, 55, 36,
+    5, 232, 51, 36, 5, 232, 52, 36, 5, 232, 53, 36, 5, 205, 214, 209, 9, 36,
+    5, 209, 5, 36, 5, 209, 6, 36, 5, 209, 7, 36, 199, 19, 122, 193, 4, 36,
+    199, 19, 122, 237, 61, 36, 199, 19, 122, 207, 87, 36, 199, 19, 122, 203,
+    195, 207, 87, 36, 199, 19, 122, 236, 246, 36, 199, 19, 122, 222, 29, 36,
+    199, 19, 122, 242, 196, 36, 199, 19, 122, 229, 167, 36, 199, 19, 122,
+    237, 60, 36, 199, 19, 122, 220, 254, 99, 1, 64, 99, 1, 71, 99, 1, 70, 99,
+    1, 74, 99, 1, 68, 99, 1, 196, 236, 99, 1, 231, 233, 99, 1, 160, 99, 1,
+    231, 158, 99, 1, 231, 46, 99, 1, 230, 254, 99, 1, 230, 186, 99, 1, 230,
+    146, 99, 1, 144, 99, 1, 229, 255, 99, 1, 229, 178, 99, 1, 229, 43, 99, 1,
+    228, 181, 99, 1, 228, 148, 99, 1, 177, 99, 1, 220, 42, 99, 1, 219, 209,
+    99, 1, 219, 107, 99, 1, 219, 36, 99, 1, 219, 4, 99, 1, 172, 99, 1, 217,
+    48, 99, 1, 216, 175, 99, 1, 216, 91, 99, 1, 215, 241, 99, 1, 181, 99, 1,
+    229, 67, 99, 1, 215, 71, 99, 1, 214, 214, 99, 1, 214, 60, 99, 1, 213,
+    142, 99, 1, 213, 22, 99, 1, 212, 212, 99, 1, 208, 176, 99, 1, 208, 162,
+    99, 1, 208, 155, 99, 1, 208, 145, 99, 1, 208, 134, 99, 1, 208, 132, 99,
+    1, 188, 99, 1, 206, 158, 99, 1, 205, 223, 99, 1, 203, 125, 99, 1, 202,
+    212, 99, 1, 201, 184, 99, 1, 201, 84, 99, 1, 238, 0, 99, 1, 189, 99, 1,
+    237, 116, 99, 1, 200, 79, 99, 1, 237, 16, 99, 1, 199, 128, 99, 1, 236,
+    146, 99, 1, 235, 62, 99, 1, 235, 31, 99, 1, 236, 158, 99, 1, 199, 53, 99,
+    1, 199, 52, 99, 1, 199, 41, 99, 1, 199, 40, 99, 1, 199, 39, 99, 1, 199,
+    38, 99, 1, 198, 118, 99, 1, 198, 112, 99, 1, 198, 97, 99, 1, 198, 95, 99,
+    1, 198, 91, 99, 1, 198, 90, 99, 1, 194, 169, 99, 1, 194, 111, 99, 1, 194,
+    72, 99, 1, 194, 36, 99, 1, 193, 244, 99, 1, 193, 231, 99, 1, 168, 99, 1,
+    193, 69, 99, 1, 193, 22, 99, 1, 193, 1, 99, 1, 192, 214, 99, 1, 192, 173,
+    99, 1, 215, 175, 99, 2, 1, 193, 69, 99, 2, 1, 193, 22, 99, 2, 1, 193, 1,
+    99, 2, 1, 192, 214, 99, 2, 1, 192, 173, 99, 2, 1, 215, 175, 21, 22, 228,
+    111, 21, 22, 71, 21, 22, 251, 253, 21, 22, 70, 21, 22, 223, 224, 21, 22,
+    74, 21, 22, 211, 194, 21, 22, 193, 147, 211, 194, 21, 22, 96, 234, 171,
+    21, 22, 96, 70, 21, 22, 64, 21, 22, 252, 33, 21, 22, 194, 111, 21, 22,
+    194, 89, 194, 111, 21, 22, 194, 72, 21, 22, 194, 89, 194, 72, 21, 22,
+    194, 56, 21, 22, 194, 89, 194, 56, 21, 22, 194, 36, 21, 22, 194, 89, 194,
+    36, 21, 22, 194, 17, 21, 22, 194, 89, 194, 17, 21, 22, 215, 45, 194, 17,
+    21, 22, 194, 169, 21, 22, 194, 89, 194, 169, 21, 22, 194, 163, 21, 22,
+    194, 89, 194, 163, 21, 22, 215, 45, 194, 163, 21, 22, 251, 63, 21, 22,
+    193, 147, 194, 202, 21, 22, 231, 6, 201, 238, 21, 22, 52, 251, 129, 21,
+    22, 52, 230, 210, 21, 22, 52, 247, 188, 138, 207, 81, 21, 22, 52, 198,
+    249, 138, 207, 81, 21, 22, 52, 51, 138, 207, 81, 21, 22, 52, 207, 81, 21,
+    22, 52, 55, 251, 129, 21, 22, 52, 55, 203, 195, 84, 201, 195, 21, 22, 52,
+    85, 236, 114, 21, 22, 52, 203, 195, 229, 5, 111, 21, 22, 52, 209, 206,
+    21, 22, 52, 142, 200, 159, 21, 22, 234, 88, 21, 22, 223, 190, 21, 22,
+    211, 211, 21, 22, 250, 224, 21, 22, 210, 181, 21, 22, 211, 75, 21, 22,
+    210, 51, 21, 22, 210, 12, 21, 22, 209, 198, 21, 22, 209, 172, 21, 22,
+    193, 147, 209, 172, 21, 22, 96, 229, 225, 21, 22, 96, 229, 178, 21, 22,
+    166, 21, 22, 211, 77, 21, 22, 209, 7, 21, 22, 194, 89, 209, 7, 21, 22,
+    209, 5, 21, 22, 194, 89, 209, 5, 21, 22, 209, 4, 21, 22, 194, 89, 209, 4,
+    21, 22, 209, 2, 21, 22, 194, 89, 209, 2, 21, 22, 209, 1, 21, 22, 194, 89,
+    209, 1, 21, 22, 209, 9, 21, 22, 194, 89, 209, 9, 21, 22, 209, 8, 21, 22,
+    194, 89, 209, 8, 21, 22, 193, 147, 209, 8, 21, 22, 211, 93, 21, 22, 194,
+    89, 211, 93, 21, 22, 96, 230, 124, 21, 22, 200, 79, 21, 22, 200, 172, 21,
+    22, 199, 128, 21, 22, 199, 105, 21, 22, 155, 21, 22, 198, 254, 21, 22,
+    193, 147, 198, 254, 21, 22, 96, 237, 101, 21, 22, 96, 237, 16, 21, 22,
+    189, 21, 22, 200, 174, 21, 22, 197, 248, 21, 22, 194, 89, 197, 248, 21,
+    22, 197, 226, 21, 22, 194, 89, 197, 226, 21, 22, 197, 225, 21, 22, 194,
+    89, 197, 225, 21, 22, 104, 21, 22, 194, 89, 104, 21, 22, 197, 216, 21,
+    22, 194, 89, 197, 216, 21, 22, 197, 250, 21, 22, 194, 89, 197, 250, 21,
+    22, 197, 249, 21, 22, 194, 89, 197, 249, 21, 22, 215, 45, 197, 249, 21,
+    22, 200, 228, 21, 22, 198, 78, 21, 22, 198, 62, 21, 22, 198, 60, 21, 22,
+    198, 83, 21, 22, 222, 57, 21, 22, 222, 153, 21, 22, 221, 204, 21, 22,
+    221, 183, 21, 22, 221, 113, 21, 22, 221, 88, 21, 22, 193, 147, 221, 88,
+    21, 22, 160, 21, 22, 222, 159, 21, 22, 220, 233, 21, 22, 194, 89, 220,
+    233, 21, 22, 220, 231, 21, 22, 194, 89, 220, 231, 21, 22, 220, 230, 21,
+    22, 194, 89, 220, 230, 21, 22, 220, 228, 21, 22, 194, 89, 220, 228, 21,
+    22, 220, 227, 21, 22, 194, 89, 220, 227, 21, 22, 220, 238, 21, 22, 194,
+    89, 220, 238, 21, 22, 220, 237, 21, 22, 194, 89, 220, 237, 21, 22, 215,
+    45, 220, 237, 21, 22, 222, 184, 21, 22, 220, 239, 21, 22, 202, 170, 222,
+    41, 21, 22, 202, 170, 221, 184, 21, 22, 202, 170, 221, 103, 21, 22, 202,
+    170, 222, 137, 21, 22, 246, 158, 21, 22, 247, 17, 21, 22, 242, 149, 21,
+    22, 242, 139, 21, 22, 242, 63, 21, 22, 238, 239, 21, 22, 193, 147, 238,
+    239, 21, 22, 247, 19, 21, 22, 247, 18, 21, 22, 238, 116, 21, 22, 194, 89,
+    238, 116, 21, 22, 238, 114, 21, 22, 194, 89, 238, 114, 21, 22, 238, 113,
+    21, 22, 194, 89, 238, 113, 21, 22, 238, 112, 21, 22, 194, 89, 238, 112,
+    21, 22, 238, 111, 21, 22, 194, 89, 238, 111, 21, 22, 238, 118, 21, 22,
+    194, 89, 238, 118, 21, 22, 238, 117, 21, 22, 194, 89, 238, 117, 21, 22,
+    215, 45, 238, 117, 21, 22, 247, 52, 21, 22, 205, 255, 199, 242, 21, 22,
+    217, 48, 21, 22, 217, 218, 21, 22, 216, 175, 21, 22, 216, 137, 21, 22,
+    216, 91, 21, 22, 216, 35, 21, 22, 193, 147, 216, 35, 21, 22, 172, 21, 22,
+    217, 219, 21, 22, 215, 166, 21, 22, 194, 89, 215, 166, 21, 22, 215, 164,
+    21, 22, 194, 89, 215, 164, 21, 22, 215, 163, 21, 22, 194, 89, 215, 163,
+    21, 22, 215, 162, 21, 22, 194, 89, 215, 162, 21, 22, 215, 161, 21, 22,
+    194, 89, 215, 161, 21, 22, 215, 168, 21, 22, 194, 89, 215, 168, 21, 22,
+    215, 167, 21, 22, 194, 89, 215, 167, 21, 22, 215, 45, 215, 167, 21, 22,
+    218, 236, 21, 22, 194, 89, 218, 236, 21, 22, 216, 179, 21, 22, 250, 24,
+    218, 236, 21, 22, 205, 255, 218, 236, 21, 22, 214, 214, 21, 22, 215, 83,
+    21, 22, 214, 60, 21, 22, 214, 27, 21, 22, 213, 142, 21, 22, 213, 125, 21,
+    22, 193, 147, 213, 125, 21, 22, 181, 21, 22, 215, 84, 21, 22, 212, 208,
+    21, 22, 194, 89, 212, 208, 21, 22, 212, 210, 21, 22, 194, 89, 212, 210,
+    21, 22, 212, 209, 21, 22, 194, 89, 212, 209, 21, 22, 215, 45, 212, 209,
+    21, 22, 215, 151, 21, 22, 96, 214, 167, 21, 22, 214, 66, 21, 22, 220, 42,
+    21, 22, 220, 183, 21, 22, 219, 209, 21, 22, 219, 191, 21, 22, 219, 107,
+    21, 22, 219, 73, 21, 22, 193, 147, 219, 73, 21, 22, 177, 21, 22, 220,
+    184, 21, 22, 219, 1, 21, 22, 194, 89, 219, 1, 21, 22, 219, 0, 21, 22,
+    194, 89, 219, 0, 21, 22, 218, 255, 21, 22, 194, 89, 218, 255, 21, 22,
+    218, 254, 21, 22, 194, 89, 218, 254, 21, 22, 218, 253, 21, 22, 194, 89,
+    218, 253, 21, 22, 219, 3, 21, 22, 194, 89, 219, 3, 21, 22, 219, 2, 21,
+    22, 194, 89, 219, 2, 21, 22, 165, 21, 22, 194, 89, 165, 21, 22, 217, 35,
+    165, 21, 22, 205, 223, 21, 22, 206, 89, 21, 22, 203, 125, 21, 22, 203,
+    97, 21, 22, 202, 212, 21, 22, 202, 183, 21, 22, 193, 147, 202, 183, 21,
+    22, 188, 21, 22, 206, 91, 21, 22, 201, 74, 21, 22, 194, 89, 201, 74, 21,
+    22, 201, 68, 21, 22, 194, 89, 201, 68, 21, 22, 201, 67, 21, 22, 194, 89,
+    201, 67, 21, 22, 201, 62, 21, 22, 194, 89, 201, 62, 21, 22, 201, 61, 21,
+    22, 194, 89, 201, 61, 21, 22, 201, 79, 21, 22, 194, 89, 201, 79, 21, 22,
+    201, 78, 21, 22, 194, 89, 201, 78, 21, 22, 215, 45, 201, 78, 21, 22, 206,
+    158, 21, 22, 250, 24, 206, 158, 21, 22, 201, 80, 21, 22, 247, 245, 206,
+    158, 21, 22, 216, 28, 203, 19, 21, 22, 215, 45, 203, 8, 21, 22, 215, 45,
+    206, 156, 21, 22, 215, 45, 202, 108, 21, 22, 215, 45, 201, 187, 21, 22,
+    215, 45, 203, 7, 21, 22, 215, 45, 205, 226, 21, 22, 204, 12, 21, 22, 203,
+    236, 21, 22, 203, 231, 21, 22, 203, 211, 21, 22, 203, 203, 21, 22, 204,
+    64, 21, 22, 204, 59, 21, 22, 203, 140, 21, 22, 194, 89, 203, 140, 21, 22,
+    203, 139, 21, 22, 194, 89, 203, 139, 21, 22, 203, 138, 21, 22, 194, 89,
+    203, 138, 21, 22, 203, 137, 21, 22, 194, 89, 203, 137, 21, 22, 203, 136,
+    21, 22, 194, 89, 203, 136, 21, 22, 203, 143, 21, 22, 194, 89, 203, 143,
+    21, 22, 203, 142, 21, 22, 194, 89, 203, 142, 21, 22, 204, 66, 21, 22,
+    193, 69, 21, 22, 193, 127, 21, 22, 193, 22, 21, 22, 193, 12, 21, 22, 193,
+    1, 21, 22, 192, 235, 21, 22, 193, 147, 192, 235, 21, 22, 168, 21, 22,
+    193, 129, 21, 22, 192, 170, 21, 22, 194, 89, 192, 170, 21, 22, 192, 169,
+    21, 22, 194, 89, 192, 169, 21, 22, 192, 168, 21, 22, 194, 89, 192, 168,
+    21, 22, 192, 167, 21, 22, 194, 89, 192, 167, 21, 22, 192, 166, 21, 22,
+    194, 89, 192, 166, 21, 22, 192, 172, 21, 22, 194, 89, 192, 172, 21, 22,
+    192, 171, 21, 22, 194, 89, 192, 171, 21, 22, 215, 45, 192, 171, 21, 22,
+    193, 148, 21, 22, 248, 39, 193, 148, 21, 22, 194, 89, 193, 148, 21, 22,
+    205, 255, 193, 22, 21, 22, 208, 7, 21, 22, 208, 111, 208, 7, 21, 22, 194,
+    89, 220, 42, 21, 22, 208, 67, 21, 22, 207, 151, 21, 22, 207, 88, 21, 22,
+    207, 55, 21, 22, 207, 28, 21, 22, 194, 89, 219, 107, 21, 22, 167, 21, 22,
+    208, 68, 21, 22, 194, 89, 177, 21, 22, 206, 175, 21, 22, 194, 89, 206,
+    175, 21, 22, 150, 21, 22, 194, 89, 150, 21, 22, 217, 35, 150, 21, 22,
+    233, 47, 21, 22, 233, 94, 21, 22, 233, 11, 21, 22, 232, 252, 21, 22, 232,
+    164, 21, 22, 232, 152, 21, 22, 233, 97, 21, 22, 233, 96, 21, 22, 232, 54,
+    21, 22, 194, 89, 232, 54, 21, 22, 233, 163, 21, 22, 199, 224, 21, 22,
+    215, 149, 199, 224, 21, 22, 199, 202, 21, 22, 215, 149, 199, 202, 21, 22,
+    199, 196, 21, 22, 215, 149, 199, 196, 21, 22, 199, 176, 21, 22, 199, 170,
+    21, 22, 199, 240, 21, 22, 199, 239, 21, 22, 199, 138, 21, 22, 194, 89,
+    199, 138, 21, 22, 199, 242, 21, 22, 198, 69, 21, 22, 198, 67, 21, 22,
+    198, 66, 21, 22, 198, 71, 21, 22, 198, 72, 21, 22, 197, 209, 21, 22, 197,
+    208, 21, 22, 197, 207, 21, 22, 197, 211, 21, 22, 212, 229, 229, 255, 21,
+    22, 212, 229, 229, 178, 21, 22, 212, 229, 229, 150, 21, 22, 212, 229,
+    229, 43, 21, 22, 212, 229, 229, 16, 21, 22, 212, 229, 144, 21, 22, 212,
+    229, 230, 99, 21, 22, 212, 229, 230, 124, 21, 22, 212, 228, 230, 124, 21,
+    22, 229, 133, 21, 22, 208, 235, 21, 22, 208, 201, 21, 22, 208, 195, 21,
+    22, 208, 189, 21, 22, 208, 184, 21, 22, 208, 239, 21, 22, 208, 238, 21,
+    22, 208, 247, 21, 22, 199, 49, 21, 22, 199, 47, 21, 22, 199, 46, 21, 22,
+    199, 50, 21, 22, 194, 89, 208, 7, 21, 22, 194, 89, 207, 151, 21, 22, 194,
+    89, 207, 55, 21, 22, 194, 89, 167, 21, 22, 214, 163, 21, 22, 214, 113,
+    21, 22, 214, 109, 21, 22, 214, 90, 21, 22, 214, 85, 21, 22, 214, 165, 21,
+    22, 214, 164, 21, 22, 214, 167, 21, 22, 213, 171, 21, 22, 205, 255, 204,
+    12, 21, 22, 205, 255, 203, 236, 21, 22, 205, 255, 203, 211, 21, 22, 205,
+    255, 204, 64, 21, 22, 194, 15, 199, 224, 21, 22, 194, 15, 199, 202, 21,
+    22, 194, 15, 199, 176, 21, 22, 194, 15, 199, 240, 21, 22, 194, 15, 199,
+    242, 21, 22, 219, 216, 21, 22, 219, 215, 21, 22, 219, 214, 21, 22, 219,
+    213, 21, 22, 219, 222, 21, 22, 219, 221, 21, 22, 219, 223, 21, 22, 199,
+    241, 199, 224, 21, 22, 199, 241, 199, 202, 21, 22, 199, 241, 199, 196,
+    21, 22, 199, 241, 199, 176, 21, 22, 199, 241, 199, 170, 21, 22, 199, 241,
+    199, 240, 21, 22, 199, 241, 199, 239, 21, 22, 199, 241, 199, 242, 21, 22,
+    251, 47, 249, 226, 21, 22, 247, 245, 71, 21, 22, 247, 245, 70, 21, 22,
+    247, 245, 74, 21, 22, 247, 245, 64, 21, 22, 247, 245, 194, 111, 21, 22,
+    247, 245, 194, 72, 21, 22, 247, 245, 194, 36, 21, 22, 247, 245, 194, 169,
+    21, 22, 247, 245, 214, 214, 21, 22, 247, 245, 214, 60, 21, 22, 247, 245,
+    213, 142, 21, 22, 247, 245, 181, 21, 22, 247, 245, 222, 57, 21, 22, 247,
+    245, 221, 204, 21, 22, 247, 245, 221, 113, 21, 22, 247, 245, 160, 21, 22,
+    205, 255, 229, 255, 21, 22, 205, 255, 229, 178, 21, 22, 205, 255, 229,
+    43, 21, 22, 205, 255, 144, 21, 22, 96, 231, 52, 21, 22, 96, 231, 56, 21,
+    22, 96, 231, 70, 21, 22, 96, 231, 69, 21, 22, 96, 231, 58, 21, 22, 96,
+    231, 84, 21, 22, 96, 206, 218, 21, 22, 96, 207, 55, 21, 22, 96, 208, 7,
+    21, 22, 96, 207, 234, 21, 22, 96, 207, 151, 21, 22, 96, 167, 21, 22, 96,
+    193, 244, 21, 22, 96, 194, 36, 21, 22, 96, 194, 111, 21, 22, 96, 194,
+    100, 21, 22, 96, 194, 72, 21, 22, 96, 194, 169, 21, 22, 96, 228, 140, 21,
+    22, 96, 228, 141, 21, 22, 96, 228, 144, 21, 22, 96, 228, 143, 21, 22, 96,
+    228, 142, 21, 22, 96, 228, 147, 21, 22, 96, 199, 148, 21, 22, 96, 199,
+    176, 21, 22, 96, 199, 224, 21, 22, 96, 199, 222, 21, 22, 96, 199, 202,
+    21, 22, 96, 199, 240, 21, 22, 96, 198, 50, 21, 22, 96, 198, 60, 21, 22,
+    96, 198, 78, 21, 22, 96, 198, 77, 21, 22, 96, 198, 62, 21, 22, 96, 198,
+    83, 21, 22, 96, 209, 51, 21, 22, 96, 209, 198, 21, 22, 96, 210, 181, 21,
+    22, 96, 210, 168, 21, 22, 96, 210, 51, 21, 22, 96, 166, 21, 22, 96, 211,
+    93, 21, 22, 96, 230, 186, 21, 22, 96, 230, 254, 21, 22, 96, 231, 158, 21,
+    22, 96, 231, 150, 21, 22, 96, 231, 46, 21, 22, 96, 231, 233, 21, 22, 96,
+    221, 213, 21, 22, 96, 221, 220, 21, 22, 96, 221, 234, 21, 22, 96, 221,
+    233, 21, 22, 96, 221, 227, 21, 22, 96, 221, 250, 21, 22, 96, 221, 134,
+    21, 22, 96, 221, 135, 21, 22, 96, 221, 138, 21, 22, 96, 221, 137, 21, 22,
+    96, 221, 136, 21, 22, 96, 221, 139, 21, 22, 96, 221, 140, 21, 22, 96,
+    213, 22, 21, 22, 96, 213, 142, 21, 22, 96, 214, 214, 21, 22, 96, 214,
+    203, 21, 22, 96, 214, 60, 21, 22, 96, 181, 21, 22, 96, 215, 241, 21, 22,
+    96, 216, 91, 21, 22, 96, 217, 48, 21, 22, 96, 217, 29, 21, 22, 96, 216,
+    175, 21, 22, 96, 172, 21, 22, 96, 192, 214, 21, 22, 96, 193, 1, 21, 22,
+    96, 193, 69, 21, 22, 96, 193, 66, 21, 22, 96, 193, 22, 21, 22, 96, 168,
+    21, 22, 96, 222, 214, 21, 22, 205, 255, 222, 214, 21, 22, 96, 222, 233,
+    21, 22, 96, 223, 41, 21, 22, 96, 223, 39, 21, 22, 96, 223, 20, 21, 22,
+    205, 255, 223, 20, 21, 22, 96, 223, 62, 21, 22, 96, 222, 247, 21, 22, 96,
+    222, 251, 21, 22, 96, 223, 5, 21, 22, 96, 223, 4, 21, 22, 96, 223, 3, 21,
+    22, 96, 223, 6, 21, 22, 96, 219, 36, 21, 22, 96, 219, 107, 21, 22, 96,
+    220, 42, 21, 22, 96, 220, 32, 21, 22, 96, 219, 209, 21, 22, 96, 177, 21,
+    22, 96, 236, 151, 21, 22, 96, 236, 152, 21, 22, 96, 236, 157, 21, 22, 96,
+    236, 156, 21, 22, 96, 236, 153, 21, 22, 96, 236, 158, 21, 22, 96, 219,
+    212, 21, 22, 96, 219, 214, 21, 22, 96, 219, 218, 21, 22, 96, 219, 217,
+    21, 22, 96, 219, 216, 21, 22, 96, 219, 222, 21, 22, 96, 199, 44, 21, 22,
+    96, 199, 46, 21, 22, 96, 199, 49, 21, 22, 96, 199, 48, 21, 22, 96, 199,
+    47, 21, 22, 96, 199, 50, 21, 22, 96, 199, 39, 21, 22, 96, 199, 40, 21,
+    22, 96, 199, 52, 21, 22, 96, 199, 51, 21, 22, 96, 199, 41, 21, 22, 96,
+    199, 53, 21, 22, 96, 191, 252, 21, 22, 96, 192, 8, 21, 22, 96, 192, 85,
+    21, 22, 96, 192, 82, 21, 22, 96, 192, 30, 21, 22, 96, 192, 112, 21, 22,
+    96, 192, 155, 21, 22, 96, 88, 192, 155, 21, 22, 96, 235, 4, 21, 22, 96,
+    235, 5, 21, 22, 96, 235, 14, 21, 22, 96, 235, 13, 21, 22, 96, 235, 8, 21,
+    22, 96, 235, 17, 21, 22, 96, 201, 184, 21, 22, 96, 202, 212, 21, 22, 96,
+    205, 223, 21, 22, 96, 205, 205, 21, 22, 96, 203, 125, 21, 22, 96, 188,
+    21, 22, 96, 203, 164, 21, 22, 96, 203, 211, 21, 22, 96, 204, 12, 21, 22,
+    96, 204, 10, 21, 22, 96, 203, 236, 21, 22, 96, 204, 64, 21, 22, 96, 204,
+    66, 21, 22, 96, 198, 91, 21, 22, 96, 198, 95, 21, 22, 96, 198, 112, 21,
+    22, 96, 198, 111, 21, 22, 96, 198, 97, 21, 22, 96, 198, 118, 21, 22, 96,
+    242, 168, 21, 22, 96, 242, 188, 21, 22, 96, 242, 245, 21, 22, 96, 242,
+    241, 21, 22, 96, 242, 215, 21, 22, 96, 246, 117, 21, 22, 96, 198, 53, 21,
+    22, 96, 198, 54, 21, 22, 96, 198, 57, 21, 22, 96, 198, 56, 21, 22, 96,
+    198, 55, 21, 22, 96, 198, 58, 21, 22, 242, 216, 57, 21, 22, 232, 71, 201,
+    238, 21, 22, 208, 231, 21, 22, 214, 161, 21, 22, 213, 168, 21, 22, 213,
+    167, 21, 22, 213, 166, 21, 22, 213, 165, 21, 22, 213, 170, 21, 22, 213,
+    169, 21, 22, 194, 15, 199, 136, 21, 22, 194, 15, 199, 135, 21, 22, 194,
+    15, 199, 134, 21, 22, 194, 15, 199, 133, 21, 22, 194, 15, 199, 132, 21,
+    22, 194, 15, 199, 139, 21, 22, 194, 15, 199, 138, 21, 22, 194, 15, 52,
+    199, 242, 21, 22, 247, 245, 194, 202, 211, 245, 202, 161, 77, 211, 245,
+    1, 248, 90, 211, 245, 1, 219, 22, 211, 245, 1, 233, 44, 211, 245, 1, 206,
+    73, 211, 245, 1, 214, 8, 211, 245, 1, 197, 116, 211, 245, 1, 237, 229,
+    211, 245, 1, 199, 77, 211, 245, 1, 242, 50, 211, 245, 1, 246, 145, 211,
+    245, 1, 215, 224, 211, 245, 1, 230, 233, 211, 245, 1, 214, 151, 211, 245,
+    1, 201, 231, 211, 245, 1, 206, 205, 211, 245, 1, 251, 59, 211, 245, 1,
+    211, 198, 211, 245, 1, 197, 27, 211, 245, 1, 234, 197, 211, 245, 1, 223,
+    115, 211, 245, 1, 234, 198, 211, 245, 1, 211, 163, 211, 245, 1, 197, 93,
+    211, 245, 1, 223, 230, 211, 245, 1, 234, 195, 211, 245, 1, 210, 158, 211,
+    245, 233, 43, 77, 211, 245, 207, 168, 233, 43, 77, 206, 194, 1, 233, 33,
+    233, 24, 233, 48, 233, 163, 206, 194, 1, 196, 236, 206, 194, 1, 197, 12,
+    197, 28, 68, 206, 194, 1, 192, 217, 206, 194, 1, 193, 148, 206, 194, 1,
+    194, 202, 206, 194, 1, 199, 141, 199, 140, 199, 168, 206, 194, 1, 233,
+    235, 206, 194, 1, 250, 187, 64, 206, 194, 1, 211, 145, 74, 206, 194, 1,
+    251, 147, 64, 206, 194, 1, 251, 92, 206, 194, 1, 219, 80, 74, 206, 194,
+    1, 203, 188, 74, 206, 194, 1, 74, 206, 194, 1, 212, 0, 206, 194, 1, 211,
+    211, 206, 194, 1, 208, 46, 208, 59, 207, 219, 150, 206, 194, 1, 222, 73,
+    206, 194, 1, 246, 141, 206, 194, 1, 222, 74, 222, 184, 206, 194, 1, 232,
+    44, 206, 194, 1, 234, 73, 206, 194, 1, 231, 153, 230, 130, 232, 44, 206,
+    194, 1, 231, 193, 206, 194, 1, 193, 236, 193, 227, 194, 202, 206, 194, 1,
+    230, 90, 230, 124, 206, 194, 1, 230, 94, 230, 124, 206, 194, 1, 219, 82,
+    230, 124, 206, 194, 1, 203, 191, 230, 124, 206, 194, 1, 215, 40, 212,
+    191, 215, 41, 215, 151, 206, 194, 1, 203, 189, 215, 151, 206, 194, 1,
+    235, 108, 206, 194, 1, 223, 93, 223, 97, 223, 84, 70, 206, 194, 1, 71,
+    206, 194, 1, 223, 31, 223, 65, 206, 194, 1, 231, 134, 206, 194, 1, 219,
+    83, 251, 108, 206, 194, 1, 203, 193, 64, 206, 194, 1, 223, 76, 234, 46,
+    206, 194, 1, 210, 113, 210, 138, 211, 93, 206, 194, 1, 251, 19, 234, 44,
+    206, 194, 1, 202, 167, 206, 158, 206, 194, 1, 203, 101, 219, 79, 206,
+    158, 206, 194, 1, 203, 187, 206, 158, 206, 194, 1, 247, 52, 206, 194, 1,
+    192, 155, 206, 194, 1, 199, 58, 199, 70, 197, 193, 200, 228, 206, 194, 1,
+    203, 186, 200, 228, 206, 194, 1, 238, 95, 206, 194, 1, 248, 68, 248, 71,
+    247, 251, 249, 226, 206, 194, 1, 203, 192, 249, 226, 206, 194, 1, 235,
+    107, 206, 194, 1, 211, 177, 206, 194, 1, 234, 151, 234, 158, 71, 206,
+    194, 1, 217, 149, 217, 161, 218, 236, 206, 194, 1, 219, 81, 218, 236,
+    206, 194, 1, 203, 190, 218, 236, 206, 194, 1, 220, 57, 220, 160, 219, 90,
+    165, 206, 194, 1, 235, 109, 206, 194, 1, 223, 163, 206, 194, 1, 223, 164,
+    206, 194, 1, 237, 243, 237, 249, 238, 95, 206, 194, 1, 211, 138, 233,
+    234, 74, 206, 194, 1, 234, 193, 206, 194, 1, 223, 113, 206, 194, 1, 238,
+    115, 206, 194, 1, 247, 2, 206, 194, 1, 246, 157, 206, 194, 1, 202, 25,
+    206, 194, 1, 219, 78, 206, 194, 1, 203, 185, 206, 194, 1, 228, 48, 206,
+    194, 1, 208, 247, 206, 194, 1, 193, 223, 206, 194, 203, 74, 209, 37, 206,
+    194, 215, 216, 209, 37, 206, 194, 238, 184, 209, 37, 206, 194, 250, 94,
+    109, 206, 194, 197, 252, 109, 206, 194, 248, 88, 109, 206, 194, 1, 222,
+    184, 206, 194, 1, 204, 66, 206, 194, 1, 211, 194, 206, 194, 1, 232, 101,
+    246, 196, 211, 144, 206, 194, 1, 232, 101, 246, 196, 223, 96, 206, 194,
+    1, 232, 101, 246, 196, 234, 157, 206, 194, 1, 232, 101, 246, 196, 251,
+    146, 206, 194, 1, 232, 101, 246, 196, 251, 92, 200, 154, 1, 64, 200, 154,
+    1, 70, 200, 154, 1, 68, 200, 154, 1, 160, 200, 154, 1, 231, 233, 200,
+    154, 1, 214, 165, 200, 154, 1, 189, 200, 154, 1, 238, 0, 200, 154, 1,
+    181, 200, 154, 1, 166, 200, 154, 1, 249, 3, 200, 154, 1, 172, 200, 154,
+    1, 168, 200, 154, 1, 177, 200, 154, 1, 194, 169, 200, 154, 1, 188, 200,
+    154, 1, 144, 200, 154, 18, 3, 70, 200, 154, 18, 3, 68, 200, 154, 3, 196,
+    11, 230, 32, 1, 64, 230, 32, 1, 70, 230, 32, 1, 68, 230, 32, 1, 160, 230,
+    32, 1, 231, 233, 230, 32, 1, 214, 165, 230, 32, 1, 189, 230, 32, 1, 238,
+    0, 230, 32, 1, 181, 230, 32, 1, 166, 230, 32, 1, 249, 3, 230, 32, 1, 172,
+    230, 32, 1, 168, 230, 32, 1, 167, 230, 32, 1, 177, 230, 32, 1, 194, 169,
+    230, 32, 1, 188, 230, 32, 1, 144, 230, 32, 18, 3, 70, 230, 32, 18, 3, 68,
+    230, 32, 3, 211, 28, 210, 70, 203, 74, 209, 37, 210, 70, 55, 209, 37,
+    247, 114, 1, 64, 247, 114, 1, 70, 247, 114, 1, 68, 247, 114, 1, 160, 247,
+    114, 1, 231, 233, 247, 114, 1, 214, 165, 247, 114, 1, 189, 247, 114, 1,
+    238, 0, 247, 114, 1, 181, 247, 114, 1, 166, 247, 114, 1, 249, 3, 247,
+    114, 1, 172, 247, 114, 1, 168, 247, 114, 1, 167, 247, 114, 1, 177, 247,
+    114, 1, 194, 169, 247, 114, 1, 188, 247, 114, 1, 144, 247, 114, 18, 3,
+    70, 247, 114, 18, 3, 68, 200, 153, 1, 64, 200, 153, 1, 70, 200, 153, 1,
+    68, 200, 153, 1, 160, 200, 153, 1, 231, 233, 200, 153, 1, 214, 165, 200,
+    153, 1, 189, 200, 153, 1, 238, 0, 200, 153, 1, 181, 200, 153, 1, 166,
+    200, 153, 1, 249, 3, 200, 153, 1, 172, 200, 153, 1, 168, 200, 153, 1,
+    177, 200, 153, 1, 194, 169, 200, 153, 1, 188, 200, 153, 18, 3, 70, 200,
+    153, 18, 3, 68, 93, 1, 160, 93, 1, 221, 250, 93, 1, 221, 113, 93, 1, 221,
+    220, 93, 1, 214, 90, 93, 1, 247, 19, 93, 1, 246, 117, 93, 1, 242, 63, 93,
+    1, 242, 188, 93, 1, 212, 165, 93, 1, 238, 0, 93, 1, 198, 71, 93, 1, 236,
+    146, 93, 1, 198, 66, 93, 1, 213, 148, 93, 1, 189, 93, 1, 199, 240, 93, 1,
+    155, 93, 1, 199, 176, 93, 1, 213, 142, 93, 1, 249, 3, 93, 1, 210, 94, 93,
+    1, 209, 198, 93, 1, 210, 65, 93, 1, 216, 91, 93, 1, 193, 1, 93, 1, 207,
+    55, 93, 1, 219, 107, 93, 1, 195, 252, 93, 1, 204, 64, 93, 1, 202, 51, 93,
+    1, 188, 93, 1, 144, 93, 1, 177, 93, 1, 208, 239, 93, 223, 177, 18, 208,
+    225, 93, 223, 177, 18, 208, 238, 93, 223, 177, 18, 208, 201, 93, 223,
+    177, 18, 208, 195, 93, 223, 177, 18, 208, 177, 93, 223, 177, 18, 208,
+    146, 93, 223, 177, 18, 208, 134, 93, 223, 177, 18, 208, 133, 93, 223,
+    177, 18, 206, 167, 93, 223, 177, 18, 206, 160, 93, 223, 177, 18, 218,
+    251, 93, 223, 177, 18, 218, 239, 93, 223, 177, 18, 208, 219, 93, 223,
+    177, 18, 208, 231, 93, 223, 177, 18, 208, 185, 197, 206, 101, 93, 223,
+    177, 18, 208, 185, 197, 206, 104, 93, 223, 177, 18, 208, 221, 93, 18,
+    223, 161, 250, 135, 93, 18, 223, 161, 252, 33, 93, 18, 3, 252, 33, 93,
+    18, 3, 70, 93, 18, 3, 223, 224, 93, 18, 3, 193, 148, 93, 18, 3, 192, 165,
+    93, 18, 3, 68, 93, 18, 3, 196, 251, 93, 18, 3, 197, 119, 93, 18, 3, 212,
+    0, 93, 18, 3, 168, 93, 18, 3, 223, 251, 93, 18, 3, 71, 93, 18, 3, 251,
+    108, 93, 18, 3, 251, 63, 93, 18, 3, 211, 194, 93, 18, 3, 250, 8, 93, 3,
+    214, 25, 93, 3, 208, 0, 93, 3, 192, 176, 93, 3, 215, 179, 93, 3, 198,
+    173, 93, 3, 248, 196, 93, 3, 207, 44, 93, 3, 199, 28, 93, 3, 222, 128,
+    93, 3, 251, 65, 93, 3, 206, 41, 206, 33, 93, 3, 196, 8, 93, 3, 242, 54,
+    93, 3, 248, 166, 93, 3, 221, 241, 93, 3, 248, 191, 93, 3, 246, 246, 210,
+    13, 220, 245, 93, 3, 220, 9, 198, 254, 93, 3, 248, 56, 93, 3, 210, 67,
+    215, 234, 93, 3, 221, 86, 93, 238, 137, 16, 207, 135, 93, 3, 249, 245,
+    93, 3, 250, 11, 93, 17, 192, 76, 93, 17, 101, 93, 17, 104, 93, 17, 133,
+    93, 17, 134, 93, 17, 151, 93, 17, 170, 93, 17, 179, 93, 17, 174, 93, 17,
+    182, 93, 16, 220, 9, 250, 13, 202, 186, 93, 16, 220, 9, 250, 13, 215,
+    200, 93, 16, 220, 9, 250, 13, 210, 12, 93, 16, 220, 9, 250, 13, 248, 91,
+    93, 16, 220, 9, 250, 13, 247, 94, 93, 16, 220, 9, 250, 13, 209, 129, 93,
+    16, 220, 9, 250, 13, 209, 123, 93, 16, 220, 9, 250, 13, 209, 121, 93, 16,
+    220, 9, 250, 13, 209, 127, 93, 16, 220, 9, 250, 13, 209, 125, 100, 248,
+    11, 100, 234, 105, 100, 242, 38, 100, 232, 71, 201, 238, 100, 242, 47,
+    100, 232, 119, 236, 111, 100, 199, 27, 202, 198, 228, 111, 100, 203, 117,
+    5, 247, 184, 217, 122, 100, 217, 157, 242, 38, 100, 217, 157, 232, 71,
+    201, 238, 100, 214, 6, 100, 232, 100, 65, 205, 190, 101, 100, 232, 100,
+    65, 205, 190, 104, 100, 232, 100, 65, 205, 190, 133, 100, 18, 204, 165,
+    100, 17, 192, 76, 100, 17, 101, 100, 17, 104, 100, 17, 133, 100, 17, 134,
+    100, 17, 151, 100, 17, 170, 100, 17, 179, 100, 17, 174, 100, 17, 182,
+    100, 1, 64, 100, 1, 71, 100, 1, 70, 100, 1, 74, 100, 1, 68, 100, 1, 212,
+    0, 100, 1, 197, 104, 100, 1, 234, 171, 100, 1, 181, 100, 1, 250, 214,
+    100, 1, 249, 3, 100, 1, 166, 100, 1, 208, 239, 100, 1, 231, 233, 100, 1,
+    172, 100, 1, 177, 100, 1, 188, 100, 1, 204, 64, 100, 1, 189, 100, 1, 238,
+    0, 100, 1, 246, 117, 100, 1, 223, 62, 100, 1, 168, 100, 1, 167, 100, 1,
+    194, 169, 100, 1, 233, 97, 100, 1, 160, 100, 1, 221, 250, 100, 1, 198,
+    118, 100, 1, 192, 112, 100, 1, 230, 99, 100, 1, 192, 0, 100, 1, 219, 222,
+    100, 1, 192, 57, 100, 1, 242, 215, 100, 1, 199, 27, 184, 18, 57, 100, 1,
+    199, 27, 71, 100, 1, 199, 27, 70, 100, 1, 199, 27, 74, 100, 1, 199, 27,
+    68, 100, 1, 199, 27, 212, 0, 100, 1, 199, 27, 197, 104, 100, 1, 199, 27,
+    250, 214, 100, 1, 199, 27, 249, 3, 100, 1, 199, 27, 166, 100, 1, 199, 27,
+    208, 239, 100, 1, 199, 27, 231, 233, 100, 1, 199, 27, 172, 100, 1, 199,
+    27, 189, 100, 1, 199, 27, 238, 0, 100, 1, 199, 27, 246, 117, 100, 1, 199,
+    27, 223, 62, 100, 1, 199, 27, 198, 118, 100, 1, 199, 27, 168, 100, 1,
+    199, 27, 194, 169, 100, 1, 199, 27, 160, 100, 1, 199, 27, 231, 230, 100,
+    1, 199, 27, 230, 99, 100, 1, 199, 27, 223, 19, 100, 1, 199, 27, 214, 50,
+    100, 1, 199, 27, 235, 17, 100, 1, 203, 117, 71, 100, 1, 203, 117, 70,
+    100, 1, 203, 117, 223, 73, 100, 1, 203, 117, 197, 104, 100, 1, 203, 117,
+    68, 100, 1, 203, 117, 250, 214, 100, 1, 203, 117, 160, 100, 1, 203, 117,
+    231, 233, 100, 1, 203, 117, 144, 100, 1, 203, 117, 166, 100, 1, 203, 117,
+    204, 64, 100, 1, 203, 117, 189, 100, 1, 203, 117, 238, 0, 100, 1, 203,
+    117, 223, 62, 100, 1, 203, 117, 233, 97, 100, 1, 203, 117, 231, 230, 100,
+    1, 203, 117, 230, 99, 100, 1, 203, 117, 198, 118, 100, 1, 203, 117, 192,
+    112, 100, 1, 203, 117, 208, 68, 100, 1, 203, 117, 246, 117, 100, 1, 203,
+    117, 192, 71, 100, 1, 217, 157, 70, 100, 1, 217, 157, 160, 100, 1, 217,
+    157, 167, 100, 1, 217, 157, 233, 97, 100, 1, 217, 157, 192, 71, 100, 1,
+    246, 118, 4, 103, 236, 111, 100, 1, 251, 18, 231, 213, 250, 169, 101,
+    100, 1, 251, 18, 231, 213, 196, 7, 101, 100, 1, 251, 18, 231, 213, 237,
+    217, 100, 1, 251, 18, 231, 213, 197, 114, 100, 1, 251, 18, 231, 213, 223,
+    121, 197, 114, 100, 1, 251, 18, 231, 213, 248, 210, 100, 1, 251, 18, 231,
+    213, 112, 248, 210, 100, 1, 251, 18, 231, 213, 64, 100, 1, 251, 18, 231,
+    213, 70, 100, 1, 251, 18, 231, 213, 160, 100, 1, 251, 18, 231, 213, 214,
+    165, 100, 1, 251, 18, 231, 213, 247, 19, 100, 1, 251, 18, 231, 213, 198,
+    83, 100, 1, 251, 18, 231, 213, 198, 71, 100, 1, 251, 18, 231, 213, 237,
+    161, 100, 1, 251, 18, 231, 213, 213, 178, 100, 1, 251, 18, 231, 213, 189,
+    100, 1, 251, 18, 231, 213, 238, 0, 100, 1, 251, 18, 231, 213, 166, 100,
+    1, 251, 18, 231, 213, 210, 94, 100, 1, 251, 18, 231, 213, 202, 92, 100,
+    1, 251, 18, 231, 213, 192, 71, 100, 1, 251, 18, 231, 213, 192, 112, 100,
+    1, 251, 18, 231, 213, 251, 72, 100, 1, 199, 27, 251, 18, 231, 213, 189,
+    100, 1, 199, 27, 251, 18, 231, 213, 192, 71, 100, 1, 217, 157, 251, 18,
+    231, 213, 231, 84, 100, 1, 217, 157, 251, 18, 231, 213, 214, 165, 100, 1,
+    217, 157, 251, 18, 231, 213, 247, 19, 100, 1, 217, 157, 251, 18, 231,
+    213, 223, 28, 100, 1, 217, 157, 251, 18, 231, 213, 198, 83, 100, 1, 217,
+    157, 251, 18, 231, 213, 237, 145, 100, 1, 217, 157, 251, 18, 231, 213,
+    189, 100, 1, 217, 157, 251, 18, 231, 213, 237, 40, 100, 1, 217, 157, 251,
+    18, 231, 213, 202, 92, 100, 1, 217, 157, 251, 18, 231, 213, 238, 109,
+    100, 1, 217, 157, 251, 18, 231, 213, 192, 71, 100, 1, 217, 157, 251, 18,
+    231, 213, 192, 112, 100, 1, 251, 18, 231, 213, 138, 68, 100, 1, 251, 18,
+    231, 213, 138, 168, 100, 1, 217, 157, 251, 18, 231, 213, 248, 54, 100, 1,
+    251, 18, 231, 213, 237, 244, 100, 1, 217, 157, 251, 18, 231, 213, 219,
+    222, 21, 22, 211, 98, 21, 22, 249, 236, 21, 22, 251, 243, 21, 22, 194,
+    114, 21, 22, 209, 135, 21, 22, 210, 190, 21, 22, 209, 0, 21, 22, 200, 88,
+    21, 22, 222, 64, 21, 22, 220, 235, 21, 22, 217, 92, 21, 22, 213, 93, 21,
+    22, 215, 35, 21, 22, 220, 52, 21, 22, 202, 165, 21, 22, 206, 1, 21, 22,
+    203, 173, 21, 22, 204, 16, 21, 22, 203, 135, 21, 22, 192, 223, 21, 22,
+    193, 75, 21, 22, 208, 15, 21, 22, 212, 207, 21, 22, 211, 233, 212, 207,
+    21, 22, 212, 206, 21, 22, 211, 233, 212, 206, 21, 22, 212, 205, 21, 22,
+    211, 233, 212, 205, 21, 22, 212, 204, 21, 22, 211, 233, 212, 204, 21, 22,
+    206, 172, 21, 22, 206, 171, 21, 22, 206, 170, 21, 22, 206, 169, 21, 22,
+    206, 168, 21, 22, 206, 176, 21, 22, 211, 233, 211, 93, 21, 22, 211, 233,
+    200, 228, 21, 22, 211, 233, 222, 184, 21, 22, 211, 233, 247, 52, 21, 22,
+    211, 233, 218, 236, 21, 22, 211, 233, 215, 151, 21, 22, 211, 233, 206,
+    158, 21, 22, 211, 233, 204, 66, 21, 22, 234, 184, 194, 202, 21, 22, 194,
+    88, 194, 202, 21, 22, 52, 2, 207, 81, 21, 22, 52, 208, 39, 236, 114, 21,
+    22, 208, 111, 206, 173, 21, 22, 194, 89, 219, 73, 21, 22, 194, 89, 220,
+    184, 21, 22, 199, 137, 21, 22, 199, 139, 21, 22, 198, 63, 21, 22, 198,
+    65, 21, 22, 198, 70, 21, 22, 199, 43, 21, 22, 199, 45, 21, 22, 205, 255,
+    203, 140, 21, 22, 205, 255, 203, 203, 21, 22, 205, 255, 229, 16, 21, 22,
+    96, 230, 138, 21, 22, 96, 237, 74, 231, 150, 21, 22, 96, 231, 230, 21,
+    22, 96, 230, 143, 21, 22, 205, 255, 222, 194, 21, 22, 96, 222, 192, 21,
+    22, 248, 112, 237, 74, 165, 21, 22, 248, 112, 237, 74, 150, 21, 22, 96,
+    237, 69, 206, 158, 219, 185, 195, 229, 219, 235, 219, 185, 1, 160, 219,
+    185, 1, 221, 250, 219, 185, 1, 231, 233, 219, 185, 1, 231, 84, 219, 185,
+    1, 214, 165, 219, 185, 1, 247, 19, 219, 185, 1, 246, 117, 219, 185, 1,
+    223, 62, 219, 185, 1, 223, 28, 219, 185, 1, 193, 97, 219, 185, 1, 189,
+    219, 185, 1, 199, 240, 219, 185, 1, 238, 0, 219, 185, 1, 237, 40, 219,
+    185, 1, 181, 219, 185, 1, 166, 219, 185, 1, 210, 94, 219, 185, 1, 249, 3,
+    219, 185, 1, 248, 54, 219, 185, 1, 172, 219, 185, 1, 168, 219, 185, 1,
+    167, 219, 185, 1, 177, 219, 185, 1, 194, 169, 219, 185, 1, 204, 64, 219,
+    185, 1, 202, 92, 219, 185, 1, 188, 219, 185, 1, 144, 219, 185, 1, 230,
+    134, 219, 185, 1, 198, 223, 219, 185, 18, 3, 64, 219, 185, 18, 3, 70,
+    219, 185, 18, 3, 68, 219, 185, 18, 3, 234, 171, 219, 185, 18, 3, 251, 63,
+    219, 185, 18, 3, 211, 194, 219, 185, 18, 3, 250, 8, 219, 185, 18, 3, 71,
+    219, 185, 18, 3, 74, 219, 185, 201, 164, 1, 168, 219, 185, 201, 164, 1,
+    167, 219, 185, 201, 164, 1, 194, 169, 219, 185, 2, 1, 160, 219, 185, 2,
+    1, 214, 165, 219, 185, 2, 1, 250, 168, 219, 185, 2, 1, 189, 219, 185, 2,
+    1, 181, 219, 185, 2, 1, 166, 219, 185, 2, 1, 172, 219, 185, 2, 1, 167,
+    219, 185, 2, 1, 177, 219, 185, 3, 215, 221, 219, 185, 3, 222, 36, 219,
+    185, 3, 206, 92, 219, 185, 3, 219, 73, 219, 185, 233, 204, 77, 219, 185,
+    208, 159, 77, 219, 185, 17, 192, 76, 219, 185, 17, 101, 219, 185, 17,
+    104, 219, 185, 17, 133, 219, 185, 17, 134, 219, 185, 17, 151, 219, 185,
+    17, 170, 219, 185, 17, 179, 219, 185, 17, 174, 219, 185, 17, 182, 53,
+    220, 43, 1, 160, 53, 220, 43, 1, 193, 209, 53, 220, 43, 1, 214, 165, 53,
+    220, 43, 1, 198, 118, 53, 220, 43, 1, 188, 53, 220, 43, 1, 168, 53, 220,
+    43, 1, 189, 53, 220, 43, 1, 199, 240, 53, 220, 43, 1, 177, 53, 220, 43,
+    1, 166, 53, 220, 43, 1, 210, 94, 53, 220, 43, 1, 172, 53, 220, 43, 1,
+    233, 97, 53, 220, 43, 1, 196, 157, 53, 220, 43, 1, 144, 53, 220, 43, 1,
+    208, 239, 53, 220, 43, 1, 221, 250, 53, 220, 43, 1, 198, 108, 53, 220,
+    43, 1, 181, 53, 220, 43, 1, 64, 53, 220, 43, 1, 70, 53, 220, 43, 1, 234,
+    171, 53, 220, 43, 1, 234, 157, 53, 220, 43, 1, 68, 53, 220, 43, 1, 211,
+    194, 53, 220, 43, 1, 74, 53, 220, 43, 1, 197, 104, 53, 220, 43, 1, 71,
+    53, 220, 43, 1, 250, 6, 53, 220, 43, 1, 251, 63, 53, 220, 43, 1, 199, 16,
+    53, 220, 43, 1, 199, 15, 53, 220, 43, 1, 199, 14, 53, 220, 43, 1, 199,
+    13, 53, 220, 43, 1, 199, 12, 214, 177, 53, 219, 30, 1, 139, 208, 239,
+    214, 177, 53, 219, 30, 1, 132, 208, 239, 214, 177, 53, 219, 30, 1, 139,
+    160, 214, 177, 53, 219, 30, 1, 139, 193, 209, 214, 177, 53, 219, 30, 1,
+    139, 214, 165, 214, 177, 53, 219, 30, 1, 132, 160, 214, 177, 53, 219, 30,
+    1, 132, 193, 209, 214, 177, 53, 219, 30, 1, 132, 214, 165, 214, 177, 53,
+    219, 30, 1, 139, 198, 118, 214, 177, 53, 219, 30, 1, 139, 188, 214, 177,
+    53, 219, 30, 1, 139, 168, 214, 177, 53, 219, 30, 1, 132, 198, 118, 214,
+    177, 53, 219, 30, 1, 132, 188, 214, 177, 53, 219, 30, 1, 132, 168, 214,
+    177, 53, 219, 30, 1, 139, 189, 214, 177, 53, 219, 30, 1, 139, 199, 240,
+    214, 177, 53, 219, 30, 1, 139, 181, 214, 177, 53, 219, 30, 1, 132, 189,
+    214, 177, 53, 219, 30, 1, 132, 199, 240, 214, 177, 53, 219, 30, 1, 132,
+    181, 214, 177, 53, 219, 30, 1, 139, 166, 214, 177, 53, 219, 30, 1, 139,
+    210, 94, 214, 177, 53, 219, 30, 1, 139, 172, 214, 177, 53, 219, 30, 1,
+    132, 166, 214, 177, 53, 219, 30, 1, 132, 210, 94, 214, 177, 53, 219, 30,
+    1, 132, 172, 214, 177, 53, 219, 30, 1, 139, 233, 97, 214, 177, 53, 219,
+    30, 1, 139, 196, 157, 214, 177, 53, 219, 30, 1, 139, 177, 214, 177, 53,
+    219, 30, 1, 132, 233, 97, 214, 177, 53, 219, 30, 1, 132, 196, 157, 214,
+    177, 53, 219, 30, 1, 132, 177, 214, 177, 53, 219, 30, 1, 139, 144, 214,
+    177, 53, 219, 30, 1, 139, 238, 0, 214, 177, 53, 219, 30, 1, 139, 249, 3,
+    214, 177, 53, 219, 30, 1, 132, 144, 214, 177, 53, 219, 30, 1, 132, 238,
+    0, 214, 177, 53, 219, 30, 1, 132, 249, 3, 214, 177, 53, 219, 30, 1, 139,
+    220, 240, 214, 177, 53, 219, 30, 1, 139, 193, 174, 214, 177, 53, 219, 30,
+    1, 132, 220, 240, 214, 177, 53, 219, 30, 1, 132, 193, 174, 214, 177, 53,
+    219, 30, 1, 139, 201, 175, 214, 177, 53, 219, 30, 1, 132, 201, 175, 214,
+    177, 53, 219, 30, 18, 3, 18, 203, 183, 214, 177, 53, 219, 30, 18, 3, 252,
+    33, 214, 177, 53, 219, 30, 18, 3, 223, 224, 214, 177, 53, 219, 30, 18, 3,
+    68, 214, 177, 53, 219, 30, 18, 3, 196, 251, 214, 177, 53, 219, 30, 18, 3,
+    71, 214, 177, 53, 219, 30, 18, 3, 251, 108, 214, 177, 53, 219, 30, 18, 3,
+    74, 214, 177, 53, 219, 30, 18, 3, 212, 26, 214, 177, 53, 219, 30, 18, 3,
+    197, 104, 214, 177, 53, 219, 30, 18, 3, 249, 236, 214, 177, 53, 219, 30,
+    18, 3, 251, 243, 214, 177, 53, 219, 30, 18, 3, 196, 243, 214, 177, 53,
+    219, 30, 18, 3, 211, 98, 214, 177, 53, 219, 30, 18, 3, 212, 23, 214, 177,
+    53, 219, 30, 18, 3, 197, 99, 214, 177, 53, 219, 30, 18, 3, 223, 73, 214,
+    177, 53, 219, 30, 1, 52, 196, 236, 214, 177, 53, 219, 30, 1, 52, 214,
+    167, 214, 177, 53, 219, 30, 1, 52, 215, 151, 214, 177, 53, 219, 30, 1,
+    52, 218, 236, 214, 177, 53, 219, 30, 1, 52, 222, 184, 214, 177, 53, 219,
+    30, 1, 52, 238, 95, 214, 177, 53, 219, 30, 1, 52, 249, 226, 214, 177, 53,
+    219, 30, 158, 217, 126, 214, 177, 53, 219, 30, 158, 217, 125, 214, 177,
+    53, 219, 30, 17, 192, 76, 214, 177, 53, 219, 30, 17, 101, 214, 177, 53,
+    219, 30, 17, 104, 214, 177, 53, 219, 30, 17, 133, 214, 177, 53, 219, 30,
+    17, 134, 214, 177, 53, 219, 30, 17, 151, 214, 177, 53, 219, 30, 17, 170,
+    214, 177, 53, 219, 30, 17, 179, 214, 177, 53, 219, 30, 17, 174, 214, 177,
+    53, 219, 30, 17, 182, 214, 177, 53, 219, 30, 126, 17, 101, 214, 177, 53,
+    219, 30, 3, 220, 166, 214, 177, 53, 219, 30, 3, 220, 165, 93, 16, 210,
+    201, 93, 16, 215, 201, 221, 105, 93, 16, 210, 13, 221, 105, 93, 16, 248,
+    92, 221, 105, 93, 16, 247, 95, 221, 105, 93, 16, 209, 130, 221, 105, 93,
+    16, 209, 124, 221, 105, 93, 16, 209, 122, 221, 105, 93, 16, 209, 128,
+    221, 105, 93, 16, 209, 126, 221, 105, 93, 16, 237, 202, 221, 105, 93, 16,
+    237, 198, 221, 105, 93, 16, 237, 197, 221, 105, 93, 16, 237, 200, 221,
+    105, 93, 16, 237, 199, 221, 105, 93, 16, 237, 196, 221, 105, 93, 16, 198,
+    2, 93, 16, 215, 201, 207, 42, 93, 16, 210, 13, 207, 42, 93, 16, 248, 92,
+    207, 42, 93, 16, 247, 95, 207, 42, 93, 16, 209, 130, 207, 42, 93, 16,
+    209, 124, 207, 42, 93, 16, 209, 122, 207, 42, 93, 16, 209, 128, 207, 42,
+    93, 16, 209, 126, 207, 42, 93, 16, 237, 202, 207, 42, 93, 16, 237, 198,
+    207, 42, 93, 16, 237, 197, 207, 42, 93, 16, 237, 200, 207, 42, 93, 16,
+    237, 199, 207, 42, 93, 16, 237, 196, 207, 42, 247, 115, 1, 160, 247, 115,
+    1, 231, 233, 247, 115, 1, 214, 165, 247, 115, 1, 214, 108, 247, 115, 1,
+    166, 247, 115, 1, 249, 3, 247, 115, 1, 172, 247, 115, 1, 215, 247, 247,
+    115, 1, 189, 247, 115, 1, 238, 0, 247, 115, 1, 181, 247, 115, 1, 213, 88,
+    247, 115, 1, 247, 19, 247, 115, 1, 223, 62, 247, 115, 1, 212, 201, 247,
+    115, 1, 212, 192, 247, 115, 1, 168, 247, 115, 1, 167, 247, 115, 1, 177,
+    247, 115, 1, 196, 157, 247, 115, 1, 188, 247, 115, 1, 64, 247, 115, 1,
+    144, 247, 115, 18, 3, 70, 247, 115, 18, 3, 68, 247, 115, 18, 3, 71, 247,
+    115, 18, 3, 74, 247, 115, 18, 3, 251, 108, 247, 115, 211, 42, 247, 115,
+    234, 80, 80, 205, 208, 53, 126, 1, 139, 160, 53, 126, 1, 139, 221, 250,
+    53, 126, 1, 139, 220, 224, 53, 126, 1, 132, 160, 53, 126, 1, 132, 220,
+    224, 53, 126, 1, 132, 221, 250, 53, 126, 1, 214, 165, 53, 126, 1, 139,
+    247, 19, 53, 126, 1, 139, 246, 117, 53, 126, 1, 132, 247, 19, 53, 126, 1,
+    132, 188, 53, 126, 1, 132, 246, 117, 53, 126, 1, 212, 201, 53, 126, 1,
+    208, 21, 53, 126, 1, 139, 208, 19, 53, 126, 1, 238, 0, 53, 126, 1, 132,
+    208, 19, 53, 126, 1, 208, 30, 53, 126, 1, 139, 189, 53, 126, 1, 139, 199,
+    240, 53, 126, 1, 132, 189, 53, 126, 1, 132, 199, 240, 53, 126, 1, 181,
+    53, 126, 1, 249, 3, 53, 126, 1, 139, 166, 53, 126, 1, 139, 210, 94, 53,
+    126, 1, 139, 233, 97, 53, 126, 1, 132, 166, 53, 126, 1, 132, 233, 97, 53,
+    126, 1, 132, 210, 94, 53, 126, 1, 172, 53, 126, 1, 132, 168, 53, 126, 1,
+    139, 168, 53, 126, 1, 167, 53, 126, 1, 206, 207, 53, 126, 1, 177, 53,
+    126, 1, 219, 29, 53, 126, 1, 194, 169, 53, 126, 1, 139, 204, 64, 53, 126,
+    1, 139, 202, 92, 53, 126, 1, 139, 188, 53, 126, 1, 139, 144, 53, 126, 1,
+    219, 137, 53, 126, 1, 64, 53, 126, 1, 132, 144, 53, 126, 1, 70, 53, 126,
+    1, 223, 224, 53, 126, 1, 68, 53, 126, 1, 196, 251, 53, 126, 1, 234, 171,
+    53, 126, 1, 211, 194, 53, 126, 1, 220, 166, 53, 126, 1, 230, 206, 188,
+    53, 126, 116, 3, 217, 35, 167, 53, 126, 116, 3, 217, 35, 177, 53, 126,
+    116, 3, 220, 185, 200, 122, 220, 155, 53, 126, 3, 217, 181, 222, 118,
+    220, 155, 53, 126, 116, 3, 52, 214, 165, 53, 126, 116, 3, 132, 166, 53,
+    126, 116, 3, 139, 208, 20, 211, 164, 132, 166, 53, 126, 116, 3, 172, 53,
+    126, 116, 3, 249, 3, 53, 126, 116, 3, 188, 53, 126, 3, 206, 66, 53, 126,
+    18, 3, 64, 53, 126, 18, 3, 217, 181, 206, 20, 53, 126, 18, 3, 252, 33,
+    53, 126, 18, 3, 200, 132, 252, 33, 53, 126, 18, 3, 70, 53, 126, 18, 3,
+    223, 224, 53, 126, 18, 3, 197, 104, 53, 126, 18, 3, 196, 250, 53, 126,
+    18, 3, 68, 53, 126, 18, 3, 196, 251, 53, 126, 18, 3, 74, 53, 126, 18, 3,
+    212, 27, 63, 53, 126, 18, 3, 211, 98, 53, 126, 18, 3, 71, 53, 126, 18, 3,
+    251, 108, 53, 126, 18, 3, 211, 194, 53, 126, 18, 3, 251, 63, 53, 126, 18,
+    3, 126, 251, 63, 53, 126, 18, 3, 212, 27, 58, 53, 126, 3, 217, 181, 222,
+    117, 53, 126, 3, 199, 17, 53, 126, 3, 199, 16, 53, 126, 3, 221, 209, 199,
+    15, 53, 126, 3, 221, 209, 199, 14, 53, 126, 3, 221, 209, 199, 13, 53,
+    126, 3, 208, 76, 230, 98, 53, 126, 3, 217, 181, 206, 50, 53, 126, 3, 221,
+    208, 222, 98, 53, 126, 38, 238, 165, 236, 114, 53, 126, 229, 7, 17, 192,
+    76, 53, 126, 229, 7, 17, 101, 53, 126, 229, 7, 17, 104, 53, 126, 229, 7,
+    17, 133, 53, 126, 229, 7, 17, 134, 53, 126, 229, 7, 17, 151, 53, 126,
+    229, 7, 17, 170, 53, 126, 229, 7, 17, 179, 53, 126, 229, 7, 17, 174, 53,
+    126, 229, 7, 17, 182, 53, 126, 126, 17, 192, 76, 53, 126, 126, 17, 101,
+    53, 126, 126, 17, 104, 53, 126, 126, 17, 133, 53, 126, 126, 17, 134, 53,
+    126, 126, 17, 151, 53, 126, 126, 17, 170, 53, 126, 126, 17, 179, 53, 126,
+    126, 17, 174, 53, 126, 126, 17, 182, 53, 126, 3, 194, 66, 53, 126, 3,
+    194, 65, 53, 126, 3, 206, 5, 53, 126, 3, 222, 25, 53, 126, 3, 228, 191,
+    53, 126, 3, 236, 129, 53, 126, 3, 207, 168, 207, 16, 208, 30, 53, 126, 3,
+    217, 181, 193, 98, 53, 126, 3, 222, 152, 53, 126, 3, 222, 151, 53, 126,
+    3, 206, 15, 53, 126, 3, 206, 14, 53, 126, 3, 230, 35, 53, 126, 3, 247,
+    16, 38, 235, 101, 242, 122, 251, 143, 38, 237, 13, 38, 223, 167, 38, 235,
+    92, 54, 38, 198, 170, 236, 114, 38, 193, 222, 63, 38, 194, 58, 219, 176,
+    63, 38, 211, 184, 122, 63, 38, 55, 211, 184, 122, 63, 38, 152, 246, 139,
+    201, 208, 63, 38, 201, 194, 246, 139, 201, 208, 63, 38, 210, 232, 58, 38,
+    55, 210, 232, 58, 38, 210, 232, 63, 38, 210, 232, 211, 110, 38, 8, 2, 1,
+    194, 203, 63, 38, 8, 2, 1, 163, 194, 203, 63, 148, 3, 197, 87, 207, 138,
+    148, 3, 197, 87, 246, 236, 148, 3, 246, 154, 148, 3, 201, 98, 148, 3,
+    248, 8, 148, 1, 251, 42, 148, 1, 251, 43, 200, 58, 148, 1, 223, 220, 148,
+    1, 223, 221, 200, 58, 148, 1, 197, 90, 148, 1, 197, 91, 200, 58, 148, 1,
+    208, 76, 207, 201, 148, 1, 208, 76, 207, 202, 200, 58, 148, 1, 220, 185,
+    220, 3, 148, 1, 220, 185, 220, 4, 200, 58, 148, 1, 234, 129, 148, 1, 251,
+    60, 148, 1, 211, 229, 148, 1, 211, 230, 200, 58, 148, 1, 160, 148, 1,
+    222, 174, 217, 184, 148, 1, 231, 233, 148, 1, 231, 234, 230, 239, 148, 1,
+    214, 165, 148, 1, 247, 19, 148, 1, 247, 20, 220, 171, 148, 1, 223, 62,
+    148, 1, 223, 63, 223, 32, 148, 1, 212, 201, 148, 1, 200, 181, 220, 62,
+    148, 1, 200, 181, 215, 196, 217, 184, 148, 1, 238, 1, 215, 196, 250, 254,
+    148, 1, 238, 1, 215, 196, 217, 184, 148, 1, 215, 97, 208, 33, 148, 1,
+    189, 148, 1, 200, 181, 200, 92, 148, 1, 238, 0, 148, 1, 238, 1, 217, 206,
+    148, 1, 181, 148, 1, 166, 148, 1, 211, 78, 222, 110, 148, 1, 249, 3, 148,
+    1, 249, 4, 222, 37, 148, 1, 172, 148, 1, 168, 148, 1, 167, 148, 1, 177,
+    148, 1, 194, 169, 148, 1, 206, 101, 206, 78, 148, 1, 206, 101, 206, 27,
+    148, 1, 188, 148, 1, 144, 148, 3, 207, 191, 148, 18, 3, 200, 58, 148, 18,
+    3, 197, 86, 148, 18, 3, 197, 87, 206, 23, 148, 18, 3, 201, 133, 148, 18,
+    3, 201, 134, 223, 212, 148, 18, 3, 208, 76, 207, 201, 148, 18, 3, 208,
+    76, 207, 202, 200, 58, 148, 18, 3, 220, 185, 220, 3, 148, 18, 3, 220,
+    185, 220, 4, 200, 58, 148, 18, 3, 200, 133, 148, 18, 3, 200, 134, 207,
+    201, 148, 18, 3, 200, 134, 200, 58, 148, 18, 3, 200, 134, 207, 202, 200,
+    58, 148, 18, 3, 210, 136, 148, 18, 3, 210, 137, 200, 58, 148, 251, 120,
+    251, 119, 148, 1, 222, 140, 206, 22, 148, 1, 221, 215, 206, 22, 148, 1,
+    197, 186, 206, 22, 148, 1, 234, 165, 206, 22, 148, 1, 196, 124, 206, 22,
+    148, 1, 192, 102, 206, 22, 148, 1, 250, 29, 206, 22, 148, 17, 192, 76,
+    148, 17, 101, 148, 17, 104, 148, 17, 133, 148, 17, 134, 148, 17, 151,
+    148, 17, 170, 148, 17, 179, 148, 17, 174, 148, 17, 182, 148, 211, 5, 148,
+    211, 34, 148, 194, 50, 148, 246, 209, 211, 27, 148, 246, 209, 203, 94,
+    148, 246, 209, 210, 229, 148, 211, 33, 148, 35, 16, 236, 121, 148, 35,
+    16, 237, 73, 148, 35, 16, 235, 45, 148, 35, 16, 237, 206, 148, 35, 16,
+    237, 207, 201, 98, 148, 35, 16, 236, 214, 148, 35, 16, 237, 248, 148, 35,
+    16, 237, 49, 148, 35, 16, 237, 230, 148, 35, 16, 237, 207, 231, 152, 148,
+    35, 16, 38, 200, 51, 148, 35, 16, 38, 234, 77, 148, 35, 16, 38, 222, 32,
+    148, 35, 16, 38, 222, 34, 148, 35, 16, 38, 223, 36, 148, 35, 16, 38, 222,
+    33, 4, 223, 36, 148, 35, 16, 38, 222, 35, 4, 223, 36, 148, 35, 16, 38,
+    248, 77, 148, 35, 16, 38, 230, 243, 148, 35, 16, 207, 99, 211, 184, 235,
+    56, 148, 35, 16, 207, 99, 211, 184, 237, 246, 148, 35, 16, 207, 99, 242,
+    84, 198, 31, 148, 35, 16, 207, 99, 242, 84, 200, 143, 148, 35, 16, 220,
+    26, 211, 184, 211, 19, 148, 35, 16, 220, 26, 211, 184, 209, 35, 148, 35,
+    16, 220, 26, 242, 84, 209, 228, 148, 35, 16, 220, 26, 242, 84, 209, 211,
+    148, 35, 16, 220, 26, 211, 184, 209, 255, 201, 122, 3, 211, 2, 201, 122,
+    3, 211, 15, 201, 122, 3, 211, 11, 201, 122, 1, 64, 201, 122, 1, 70, 201,
+    122, 1, 68, 201, 122, 1, 251, 108, 201, 122, 1, 74, 201, 122, 1, 71, 201,
+    122, 1, 233, 230, 201, 122, 1, 160, 201, 122, 1, 208, 239, 201, 122, 1,
+    231, 233, 201, 122, 1, 214, 165, 201, 122, 1, 247, 19, 201, 122, 1, 223,
+    62, 201, 122, 1, 192, 112, 201, 122, 1, 212, 201, 201, 122, 1, 189, 201,
+    122, 1, 238, 0, 201, 122, 1, 181, 201, 122, 1, 166, 201, 122, 1, 233, 97,
+    201, 122, 1, 196, 157, 201, 122, 1, 249, 3, 201, 122, 1, 172, 201, 122,
+    1, 168, 201, 122, 1, 167, 201, 122, 1, 177, 201, 122, 1, 194, 169, 201,
+    122, 1, 188, 201, 122, 1, 193, 209, 201, 122, 1, 144, 201, 122, 116, 3,
+    211, 31, 201, 122, 116, 3, 211, 4, 201, 122, 116, 3, 211, 1, 201, 122,
+    18, 3, 211, 18, 201, 122, 18, 3, 211, 0, 201, 122, 18, 3, 211, 24, 201,
+    122, 18, 3, 211, 10, 201, 122, 18, 3, 211, 32, 201, 122, 18, 3, 211, 20,
+    201, 122, 3, 211, 35, 201, 122, 3, 196, 11, 201, 122, 116, 3, 210, 217,
+    172, 201, 122, 116, 3, 210, 217, 194, 169, 201, 122, 1, 221, 250, 201,
+    122, 1, 201, 55, 201, 122, 17, 192, 76, 201, 122, 17, 101, 201, 122, 17,
+    104, 201, 122, 17, 133, 201, 122, 17, 134, 201, 122, 17, 151, 201, 122,
+    17, 170, 201, 122, 17, 179, 201, 122, 17, 174, 201, 122, 17, 182, 201,
+    122, 249, 246, 201, 122, 1, 207, 171, 201, 122, 1, 219, 232, 201, 122, 1,
+    248, 54, 201, 122, 1, 52, 222, 184, 201, 122, 1, 52, 218, 236, 248, 169,
+    1, 64, 248, 169, 1, 203, 86, 64, 248, 169, 1, 144, 248, 169, 1, 203, 86,
+    144, 248, 169, 1, 217, 155, 144, 248, 169, 1, 249, 3, 248, 169, 1, 222,
+    95, 249, 3, 248, 169, 1, 166, 248, 169, 1, 203, 86, 166, 248, 169, 1,
+    181, 248, 169, 1, 217, 155, 181, 248, 169, 1, 194, 169, 248, 169, 1, 203,
+    86, 194, 169, 248, 169, 1, 211, 50, 194, 169, 248, 169, 1, 231, 233, 248,
+    169, 1, 203, 86, 231, 233, 248, 169, 1, 223, 62, 248, 169, 1, 238, 0,
+    248, 169, 1, 167, 248, 169, 1, 203, 86, 167, 248, 169, 1, 172, 248, 169,
+    1, 203, 86, 172, 248, 169, 1, 202, 169, 189, 248, 169, 1, 213, 115, 189,
+    248, 169, 1, 188, 248, 169, 1, 203, 86, 188, 248, 169, 1, 217, 155, 188,
+    248, 169, 1, 168, 248, 169, 1, 203, 86, 168, 248, 169, 1, 214, 165, 248,
+    169, 1, 177, 248, 169, 1, 203, 86, 177, 248, 169, 1, 212, 201, 248, 169,
+    1, 247, 19, 248, 169, 1, 214, 255, 248, 169, 1, 217, 82, 248, 169, 1, 70,
+    248, 169, 1, 68, 248, 169, 3, 199, 21, 248, 169, 18, 3, 71, 248, 169, 18,
+    3, 211, 50, 71, 248, 169, 18, 3, 234, 171, 248, 169, 18, 3, 70, 248, 169,
+    18, 3, 222, 95, 70, 248, 169, 18, 3, 74, 248, 169, 18, 3, 222, 95, 74,
+    248, 169, 18, 3, 68, 248, 169, 18, 3, 124, 39, 203, 86, 188, 248, 169,
+    116, 3, 214, 167, 248, 169, 116, 3, 230, 124, 248, 169, 211, 13, 248,
+    169, 211, 9, 248, 169, 16, 248, 18, 215, 97, 216, 238, 248, 169, 16, 248,
+    18, 210, 5, 248, 169, 16, 248, 18, 222, 211, 248, 169, 16, 248, 18, 211,
+    13, 219, 243, 1, 160, 219, 243, 1, 221, 132, 219, 243, 1, 221, 250, 219,
+    243, 1, 231, 233, 219, 243, 1, 231, 14, 219, 243, 1, 214, 165, 219, 243,
+    1, 247, 19, 219, 243, 1, 246, 117, 219, 243, 1, 223, 62, 219, 243, 1,
+    212, 201, 219, 243, 1, 189, 219, 243, 1, 199, 240, 219, 243, 1, 238, 0,
+    219, 243, 1, 181, 219, 243, 1, 166, 219, 243, 1, 209, 234, 219, 243, 1,
+    210, 94, 219, 243, 1, 233, 97, 219, 243, 1, 232, 208, 219, 243, 1, 249,
+    3, 219, 243, 1, 247, 249, 219, 243, 1, 172, 219, 243, 1, 216, 98, 219,
+    243, 1, 198, 118, 219, 243, 1, 198, 108, 219, 243, 1, 235, 17, 219, 243,
+    1, 168, 219, 243, 1, 167, 219, 243, 1, 177, 219, 243, 1, 144, 219, 243,
+    1, 229, 131, 219, 243, 1, 196, 157, 219, 243, 1, 188, 219, 243, 1, 204,
+    64, 219, 243, 1, 194, 169, 219, 243, 1, 64, 219, 243, 201, 164, 1, 168,
+    219, 243, 201, 164, 1, 167, 219, 243, 18, 3, 252, 33, 219, 243, 18, 3,
+    70, 219, 243, 18, 3, 74, 219, 243, 18, 3, 211, 194, 219, 243, 18, 3, 68,
+    219, 243, 18, 3, 196, 251, 219, 243, 18, 3, 71, 219, 243, 116, 3, 222,
+    184, 219, 243, 116, 3, 218, 236, 219, 243, 116, 3, 165, 219, 243, 116, 3,
+    215, 151, 219, 243, 116, 3, 211, 93, 219, 243, 116, 3, 150, 219, 243,
+    116, 3, 200, 228, 219, 243, 116, 3, 212, 173, 219, 243, 116, 3, 222, 117,
+    219, 243, 3, 208, 31, 219, 243, 3, 212, 241, 219, 243, 209, 38, 200, 176,
+    219, 243, 209, 38, 212, 185, 199, 131, 200, 176, 219, 243, 209, 38, 246,
+    126, 219, 243, 209, 38, 198, 100, 246, 126, 219, 243, 209, 38, 198, 99,
+    219, 243, 17, 192, 76, 219, 243, 17, 101, 219, 243, 17, 104, 219, 243,
+    17, 133, 219, 243, 17, 134, 219, 243, 17, 151, 219, 243, 17, 170, 219,
+    243, 17, 179, 219, 243, 17, 174, 219, 243, 17, 182, 219, 243, 1, 198, 83,
+    219, 243, 1, 198, 71, 219, 243, 1, 237, 161, 211, 227, 242, 208, 17, 192,
+    76, 211, 227, 242, 208, 17, 101, 211, 227, 242, 208, 17, 104, 211, 227,
+    242, 208, 17, 133, 211, 227, 242, 208, 17, 134, 211, 227, 242, 208, 17,
+    151, 211, 227, 242, 208, 17, 170, 211, 227, 242, 208, 17, 179, 211, 227,
+    242, 208, 17, 174, 211, 227, 242, 208, 17, 182, 211, 227, 242, 208, 1,
+    177, 211, 227, 242, 208, 1, 250, 26, 211, 227, 242, 208, 1, 251, 80, 211,
+    227, 242, 208, 1, 250, 214, 211, 227, 242, 208, 1, 251, 35, 211, 227,
+    242, 208, 1, 220, 184, 211, 227, 242, 208, 1, 251, 251, 211, 227, 242,
+    208, 1, 251, 252, 211, 227, 242, 208, 1, 251, 250, 211, 227, 242, 208, 1,
+    251, 244, 211, 227, 242, 208, 1, 219, 209, 211, 227, 242, 208, 1, 223,
+    96, 211, 227, 242, 208, 1, 223, 225, 211, 227, 242, 208, 1, 223, 118,
+    211, 227, 242, 208, 1, 223, 105, 211, 227, 242, 208, 1, 219, 36, 211,
+    227, 242, 208, 1, 197, 111, 211, 227, 242, 208, 1, 197, 109, 211, 227,
+    242, 208, 1, 197, 47, 211, 227, 242, 208, 1, 196, 243, 211, 227, 242,
+    208, 1, 220, 42, 211, 227, 242, 208, 1, 234, 41, 211, 227, 242, 208, 1,
+    234, 174, 211, 227, 242, 208, 1, 234, 88, 211, 227, 242, 208, 1, 234, 13,
+    211, 227, 242, 208, 1, 219, 107, 211, 227, 242, 208, 1, 211, 135, 211,
+    227, 242, 208, 1, 212, 22, 211, 227, 242, 208, 1, 211, 120, 211, 227,
+    242, 208, 1, 211, 241, 211, 227, 242, 208, 215, 242, 198, 48, 211, 227,
+    242, 208, 231, 228, 198, 49, 211, 227, 242, 208, 215, 236, 198, 49, 211,
+    227, 242, 208, 207, 216, 211, 227, 242, 208, 210, 92, 211, 227, 242, 208,
+    251, 71, 211, 227, 242, 208, 209, 38, 215, 232, 211, 227, 242, 208, 209,
+    38, 55, 215, 232, 42, 2, 1, 207, 7, 196, 123, 42, 2, 1, 219, 77, 237,
+    116, 42, 2, 1, 215, 50, 74, 42, 2, 1, 194, 64, 234, 9, 42, 2, 1, 200,
+    132, 200, 79, 42, 2, 1, 199, 156, 200, 79, 42, 2, 1, 200, 132, 230, 26,
+    57, 42, 2, 1, 200, 132, 193, 84, 42, 2, 1, 197, 72, 197, 92, 98, 215,
+    243, 6, 1, 250, 224, 98, 215, 243, 6, 1, 248, 207, 98, 215, 243, 6, 1,
+    231, 203, 98, 215, 243, 6, 1, 236, 123, 98, 215, 243, 6, 1, 234, 88, 98,
+    215, 243, 6, 1, 196, 20, 98, 215, 243, 6, 1, 192, 79, 98, 215, 243, 6, 1,
+    200, 125, 98, 215, 243, 6, 1, 223, 190, 98, 215, 243, 6, 1, 222, 121, 98,
+    215, 243, 6, 1, 220, 67, 98, 215, 243, 6, 1, 217, 160, 98, 215, 243, 6,
+    1, 215, 51, 98, 215, 243, 6, 1, 211, 211, 98, 215, 243, 6, 1, 210, 247,
+    98, 215, 243, 6, 1, 192, 67, 98, 215, 243, 6, 1, 208, 53, 98, 215, 243,
+    6, 1, 206, 40, 98, 215, 243, 6, 1, 200, 112, 98, 215, 243, 6, 1, 197, 77,
+    98, 215, 243, 6, 1, 210, 86, 98, 215, 243, 6, 1, 221, 237, 98, 215, 243,
+    6, 1, 231, 75, 98, 215, 243, 6, 1, 208, 224, 98, 215, 243, 6, 1, 203,
+    224, 98, 215, 243, 6, 1, 242, 201, 98, 215, 243, 6, 1, 246, 243, 98, 215,
+    243, 6, 1, 223, 10, 98, 215, 243, 6, 1, 242, 138, 98, 215, 243, 6, 1,
+    246, 101, 98, 215, 243, 6, 1, 193, 207, 98, 215, 243, 6, 1, 223, 25, 98,
+    215, 243, 6, 1, 230, 95, 98, 215, 243, 6, 1, 229, 255, 98, 215, 243, 6,
+    1, 229, 165, 98, 215, 243, 6, 1, 194, 111, 98, 215, 243, 6, 1, 230, 28,
+    98, 215, 243, 6, 1, 229, 31, 98, 215, 243, 6, 1, 233, 11, 98, 215, 243,
+    6, 1, 193, 3, 98, 215, 243, 6, 1, 234, 107, 98, 215, 243, 6, 1, 163, 231,
+    203, 98, 215, 243, 6, 1, 251, 57, 98, 215, 243, 6, 1, 251, 97, 98, 215,
+    243, 6, 1, 230, 26, 57, 98, 215, 243, 6, 1, 220, 175, 57, 201, 122, 209,
+    38, 248, 18, 201, 91, 201, 122, 209, 38, 248, 18, 211, 14, 201, 122, 209,
+    38, 248, 18, 209, 25, 201, 122, 209, 38, 248, 18, 247, 4, 201, 122, 209,
+    38, 248, 18, 219, 233, 206, 19, 201, 122, 209, 38, 248, 18, 222, 174,
+    206, 19, 201, 122, 209, 38, 248, 18, 238, 1, 206, 19, 201, 122, 209, 38,
+    248, 18, 249, 4, 206, 19, 196, 120, 158, 222, 91, 196, 120, 158, 204, 29,
+    196, 120, 158, 209, 109, 196, 120, 3, 214, 28, 196, 120, 3, 193, 106,
+    216, 158, 201, 82, 196, 120, 158, 193, 106, 251, 76, 223, 177, 201, 82,
+    196, 120, 158, 193, 106, 223, 177, 201, 82, 196, 120, 158, 193, 106, 222,
+    79, 223, 177, 201, 82, 196, 120, 158, 246, 237, 63, 196, 120, 158, 193,
+    106, 222, 79, 223, 177, 201, 83, 205, 242, 196, 120, 158, 55, 201, 82,
+    196, 120, 158, 198, 170, 201, 82, 196, 120, 158, 222, 79, 250, 170, 196,
+    120, 158, 78, 63, 196, 120, 158, 103, 236, 112, 63, 196, 120, 158, 112,
+    236, 112, 63, 196, 120, 158, 207, 89, 222, 90, 223, 177, 201, 82, 196,
+    120, 158, 250, 23, 223, 177, 201, 82, 196, 120, 3, 196, 7, 201, 82, 196,
+    120, 3, 196, 7, 197, 106, 196, 120, 3, 207, 168, 196, 7, 197, 106, 196,
+    120, 3, 196, 7, 250, 170, 196, 120, 3, 207, 168, 196, 7, 250, 170, 196,
+    120, 3, 196, 7, 197, 107, 4, 200, 147, 196, 120, 3, 196, 7, 250, 171, 4,
+    200, 147, 196, 120, 3, 250, 169, 250, 185, 196, 120, 3, 250, 169, 248,
+    226, 196, 120, 3, 250, 169, 196, 147, 196, 120, 3, 250, 169, 196, 148, 4,
+    200, 147, 196, 120, 3, 199, 64, 196, 120, 3, 229, 190, 184, 250, 168,
+    196, 120, 3, 184, 250, 168, 196, 120, 3, 206, 220, 184, 250, 168, 196,
+    120, 3, 250, 169, 197, 113, 215, 223, 196, 120, 3, 250, 108, 196, 120, 3,
+    207, 16, 250, 108, 196, 120, 158, 246, 237, 58, 196, 120, 3, 223, 13,
+    196, 120, 3, 197, 39, 196, 120, 3, 250, 21, 196, 120, 158, 207, 82, 58,
+    196, 120, 158, 55, 207, 82, 58, 196, 120, 3, 55, 250, 169, 250, 185, 8,
+    1, 2, 6, 64, 8, 1, 2, 6, 251, 108, 8, 2, 1, 163, 251, 108, 8, 1, 2, 6,
+    248, 188, 249, 226, 8, 1, 2, 6, 247, 52, 8, 1, 2, 6, 238, 95, 8, 1, 2, 6,
+    233, 235, 8, 1, 2, 6, 71, 8, 2, 1, 163, 211, 184, 71, 8, 2, 1, 163, 70,
+    8, 1, 2, 6, 223, 65, 8, 1, 2, 6, 222, 184, 8, 1, 2, 6, 220, 202, 4, 111,
+    8, 1, 2, 6, 218, 236, 8, 1, 2, 6, 207, 168, 215, 151, 8, 1, 2, 6, 74, 8,
+    1, 2, 6, 211, 184, 74, 8, 2, 1, 203, 109, 74, 8, 2, 1, 203, 109, 211,
+    184, 74, 8, 2, 1, 203, 109, 185, 4, 111, 8, 2, 1, 163, 212, 0, 8, 1, 2,
+    6, 211, 130, 8, 2, 1, 198, 249, 138, 74, 8, 2, 1, 247, 188, 138, 74, 8,
+    1, 2, 6, 211, 93, 8, 1, 2, 6, 207, 168, 150, 8, 1, 2, 6, 163, 150, 8, 1,
+    2, 6, 200, 228, 8, 1, 2, 6, 68, 8, 2, 1, 203, 109, 68, 8, 2, 1, 203, 109,
+    237, 12, 68, 8, 2, 1, 203, 109, 163, 218, 236, 8, 1, 2, 6, 196, 236, 8,
+    1, 2, 6, 194, 202, 8, 1, 2, 6, 192, 155, 8, 1, 2, 6, 233, 166, 8, 1, 195,
+    248, 220, 68, 202, 131, 8, 1, 251, 57, 33, 1, 2, 6, 231, 204, 33, 1, 2,
+    6, 220, 90, 33, 1, 2, 6, 210, 51, 33, 1, 2, 6, 207, 153, 33, 1, 2, 6,
+    209, 62, 42, 1, 2, 6, 234, 124, 73, 1, 6, 64, 73, 1, 6, 251, 108, 73, 1,
+    6, 249, 226, 73, 1, 6, 248, 188, 249, 226, 73, 1, 6, 238, 95, 73, 1, 6,
+    71, 73, 1, 6, 207, 168, 71, 73, 1, 6, 232, 44, 73, 1, 6, 230, 124, 73, 1,
+    6, 70, 73, 1, 6, 223, 65, 73, 1, 6, 222, 184, 73, 1, 6, 165, 73, 1, 6,
+    218, 236, 73, 1, 6, 215, 151, 73, 1, 6, 207, 168, 215, 151, 73, 1, 6, 74,
+    73, 1, 6, 211, 130, 73, 1, 6, 211, 93, 73, 1, 6, 150, 73, 1, 6, 200, 228,
+    73, 1, 6, 68, 73, 1, 6, 194, 202, 73, 1, 2, 64, 73, 1, 2, 163, 64, 73, 1,
+    2, 250, 252, 73, 1, 2, 163, 251, 108, 73, 1, 2, 249, 226, 73, 1, 2, 238,
+    95, 73, 1, 2, 71, 73, 1, 2, 205, 240, 73, 1, 2, 211, 184, 71, 73, 1, 2,
+    163, 211, 184, 71, 73, 1, 2, 232, 44, 73, 1, 2, 163, 70, 73, 1, 2, 222,
+    184, 73, 1, 2, 218, 236, 73, 1, 2, 234, 73, 73, 1, 2, 74, 73, 1, 2, 211,
+    184, 74, 73, 1, 2, 198, 249, 138, 74, 73, 1, 2, 247, 188, 138, 74, 73, 1,
+    2, 211, 93, 73, 1, 2, 200, 228, 73, 1, 2, 68, 73, 1, 2, 203, 109, 68, 73,
+    1, 2, 163, 218, 236, 73, 1, 2, 196, 236, 73, 1, 2, 251, 57, 73, 1, 2,
+    248, 63, 73, 1, 2, 33, 231, 204, 73, 1, 2, 237, 76, 73, 1, 2, 33, 210,
+    77, 73, 1, 2, 242, 215, 8, 201, 155, 2, 1, 70, 8, 201, 155, 2, 1, 150, 8,
+    201, 155, 2, 1, 68, 8, 201, 155, 2, 1, 196, 236, 33, 201, 155, 2, 1, 248,
+    63, 33, 201, 155, 2, 1, 231, 204, 33, 201, 155, 2, 1, 207, 153, 33, 201,
+    155, 2, 1, 210, 77, 33, 201, 155, 2, 1, 242, 215, 8, 2, 1, 197, 104, 8,
+    2, 1, 76, 4, 85, 199, 90, 8, 2, 1, 238, 96, 4, 85, 199, 90, 8, 2, 1, 233,
+    164, 4, 85, 199, 90, 8, 2, 1, 218, 237, 4, 85, 199, 90, 8, 2, 1, 215,
+    152, 4, 85, 199, 90, 8, 2, 1, 211, 94, 4, 85, 199, 90, 8, 2, 1, 208, 112,
+    4, 85, 199, 90, 8, 2, 1, 208, 112, 4, 232, 222, 26, 85, 199, 90, 8, 2, 1,
+    206, 159, 4, 85, 199, 90, 8, 2, 1, 200, 229, 4, 85, 199, 90, 8, 2, 1,
+    192, 156, 4, 85, 199, 90, 8, 2, 1, 163, 232, 44, 73, 1, 42, 234, 88, 8,
+    2, 1, 223, 143, 232, 44, 8, 2, 1, 199, 243, 4, 201, 212, 8, 2, 6, 1, 228,
+    97, 4, 111, 8, 2, 1, 223, 112, 4, 111, 8, 2, 1, 211, 94, 4, 111, 8, 2, 6,
+    1, 124, 4, 111, 8, 2, 1, 197, 35, 4, 111, 8, 2, 1, 76, 4, 211, 49, 128,
+    8, 2, 1, 238, 96, 4, 211, 49, 128, 8, 2, 1, 233, 164, 4, 211, 49, 128, 8,
+    2, 1, 232, 45, 4, 211, 49, 128, 8, 2, 1, 222, 185, 4, 211, 49, 128, 8, 2,
+    1, 220, 202, 4, 211, 49, 128, 8, 2, 1, 218, 237, 4, 211, 49, 128, 8, 2,
+    1, 215, 152, 4, 211, 49, 128, 8, 2, 1, 211, 94, 4, 211, 49, 128, 8, 2, 1,
+    208, 112, 4, 211, 49, 128, 8, 2, 1, 206, 159, 4, 211, 49, 128, 8, 2, 1,
+    234, 0, 4, 211, 49, 128, 8, 2, 1, 196, 237, 4, 211, 49, 128, 8, 2, 1,
+    193, 224, 4, 211, 49, 128, 8, 2, 1, 192, 156, 4, 211, 49, 128, 8, 2, 1,
+    41, 4, 207, 174, 128, 8, 2, 1, 250, 253, 4, 207, 174, 128, 8, 2, 1, 238,
+    96, 4, 229, 15, 26, 200, 147, 8, 2, 1, 234, 253, 4, 207, 174, 128, 8, 2,
+    1, 211, 184, 234, 253, 4, 207, 174, 128, 8, 2, 1, 207, 168, 211, 184,
+    234, 253, 4, 207, 174, 128, 8, 2, 1, 205, 241, 4, 207, 174, 128, 8, 2, 1,
+    228, 97, 4, 207, 174, 128, 8, 2, 1, 211, 184, 185, 4, 207, 174, 128, 8,
+    2, 1, 234, 0, 4, 207, 174, 128, 8, 2, 1, 124, 4, 207, 174, 128, 8, 2, 1,
+    233, 167, 4, 207, 174, 128, 73, 1, 2, 163, 250, 252, 73, 1, 2, 247, 52,
+    73, 1, 2, 247, 53, 4, 238, 142, 73, 1, 2, 233, 235, 73, 1, 2, 207, 168,
+    211, 184, 71, 73, 1, 2, 233, 163, 73, 1, 2, 236, 113, 223, 66, 4, 111,
+    73, 1, 2, 27, 232, 44, 73, 1, 2, 163, 230, 124, 73, 1, 2, 228, 97, 4,
+    111, 73, 1, 2, 223, 111, 73, 1, 2, 6, 70, 73, 1, 2, 6, 228, 97, 4, 111,
+    73, 1, 2, 223, 66, 4, 238, 178, 73, 1, 2, 220, 202, 4, 207, 174, 128, 73,
+    1, 2, 220, 202, 4, 211, 49, 128, 73, 1, 2, 6, 165, 73, 1, 2, 218, 237, 4,
+    128, 73, 1, 2, 163, 218, 237, 4, 184, 220, 16, 73, 1, 2, 215, 152, 4, 46,
+    128, 73, 1, 2, 215, 152, 4, 207, 174, 128, 73, 1, 2, 6, 215, 151, 73, 1,
+    2, 248, 188, 74, 73, 1, 2, 210, 77, 73, 1, 2, 206, 159, 4, 128, 73, 1, 2,
+    233, 255, 73, 1, 2, 200, 229, 4, 211, 49, 128, 73, 1, 2, 124, 161, 73, 1,
+    2, 197, 34, 73, 1, 2, 6, 68, 73, 1, 2, 196, 237, 4, 128, 73, 1, 2, 163,
+    196, 236, 73, 1, 2, 192, 155, 73, 1, 2, 192, 156, 4, 207, 174, 128, 73,
+    1, 2, 192, 156, 4, 238, 142, 73, 1, 2, 233, 166, 73, 1, 2, 199, 206, 38,
+    235, 111, 230, 211, 251, 143, 38, 235, 111, 251, 130, 251, 143, 38, 202,
+    225, 63, 38, 201, 89, 77, 38, 217, 213, 38, 230, 208, 38, 217, 211, 38,
+    251, 127, 38, 230, 209, 38, 251, 128, 38, 8, 2, 1, 208, 112, 63, 38, 247,
+    149, 38, 217, 212, 38, 55, 242, 122, 58, 38, 211, 244, 58, 38, 192, 21,
+    63, 38, 223, 97, 63, 38, 197, 28, 58, 38, 197, 11, 58, 38, 8, 2, 1, 232,
+    192, 211, 184, 41, 58, 38, 8, 2, 1, 251, 108, 38, 8, 2, 1, 250, 166, 38,
+    8, 2, 1, 249, 247, 38, 8, 2, 1, 247, 53, 246, 151, 38, 8, 2, 1, 223, 143,
+    238, 95, 38, 8, 2, 1, 233, 235, 38, 8, 2, 1, 232, 44, 38, 8, 1, 2, 6,
+    232, 44, 38, 8, 2, 1, 222, 184, 38, 8, 2, 1, 165, 38, 8, 1, 2, 6, 165,
+    38, 8, 1, 2, 6, 218, 236, 38, 8, 2, 1, 215, 151, 38, 8, 1, 2, 6, 215,
+    151, 38, 8, 1, 2, 6, 150, 38, 8, 2, 1, 208, 112, 207, 10, 38, 8, 2, 1,
+    206, 158, 38, 8, 2, 1, 184, 206, 158, 38, 8, 2, 1, 192, 155, 38, 8, 2, 1,
+    250, 252, 38, 8, 2, 1, 249, 226, 38, 8, 2, 1, 248, 63, 38, 8, 2, 1, 205,
+    240, 38, 8, 2, 1, 233, 163, 38, 8, 2, 1, 220, 202, 4, 55, 85, 199, 90,
+    38, 8, 2, 1, 185, 4, 152, 246, 139, 111, 38, 8, 2, 1, 211, 93, 38, 8, 2,
+    1, 233, 255, 38, 8, 2, 1, 124, 4, 152, 246, 139, 111, 38, 8, 2, 1, 194,
+    202, 38, 8, 2, 1, 41, 4, 237, 14, 38, 8, 2, 1, 185, 4, 237, 14, 38, 8, 2,
+    1, 124, 4, 237, 14, 38, 130, 200, 160, 58, 38, 222, 70, 95, 207, 101, 38,
+    222, 70, 95, 220, 28, 38, 78, 95, 220, 28, 38, 194, 64, 223, 121, 247,
+    143, 63, 38, 237, 85, 77, 38, 55, 223, 121, 247, 151, 63, 38, 251, 1,
+    187, 115, 63, 38, 46, 250, 78, 58, 38, 51, 250, 78, 26, 142, 250, 78, 63,
+    8, 6, 1, 41, 4, 207, 82, 63, 8, 2, 1, 41, 4, 207, 82, 63, 8, 6, 1, 76, 4,
+    78, 58, 8, 2, 1, 76, 4, 78, 58, 8, 6, 1, 76, 4, 78, 63, 8, 2, 1, 76, 4,
+    78, 63, 8, 6, 1, 76, 4, 219, 176, 63, 8, 2, 1, 76, 4, 219, 176, 63, 8, 6,
+    1, 247, 53, 4, 246, 152, 26, 251, 129, 8, 2, 1, 247, 53, 4, 246, 152, 26,
+    251, 129, 8, 6, 1, 238, 96, 4, 78, 58, 8, 2, 1, 238, 96, 4, 78, 58, 8, 6,
+    1, 238, 96, 4, 78, 63, 8, 2, 1, 238, 96, 4, 78, 63, 8, 6, 1, 238, 96, 4,
+    219, 176, 63, 8, 2, 1, 238, 96, 4, 219, 176, 63, 8, 6, 1, 238, 96, 4,
+    246, 151, 8, 2, 1, 238, 96, 4, 246, 151, 8, 6, 1, 238, 96, 4, 242, 122,
+    63, 8, 2, 1, 238, 96, 4, 242, 122, 63, 8, 6, 1, 234, 253, 4, 217, 215,
+    26, 230, 210, 8, 2, 1, 234, 253, 4, 217, 215, 26, 230, 210, 8, 6, 1, 234,
+    253, 4, 217, 215, 26, 251, 129, 8, 2, 1, 234, 253, 4, 217, 215, 26, 251,
+    129, 8, 6, 1, 234, 253, 4, 242, 122, 63, 8, 2, 1, 234, 253, 4, 242, 122,
+    63, 8, 6, 1, 234, 253, 4, 199, 91, 63, 8, 2, 1, 234, 253, 4, 199, 91, 63,
+    8, 6, 1, 234, 253, 4, 246, 152, 26, 247, 150, 8, 2, 1, 234, 253, 4, 246,
+    152, 26, 247, 150, 8, 6, 1, 233, 164, 4, 78, 58, 8, 2, 1, 233, 164, 4,
+    78, 58, 8, 6, 1, 232, 45, 4, 217, 214, 8, 2, 1, 232, 45, 4, 217, 214, 8,
+    6, 1, 230, 125, 4, 78, 58, 8, 2, 1, 230, 125, 4, 78, 58, 8, 6, 1, 230,
+    125, 4, 78, 63, 8, 2, 1, 230, 125, 4, 78, 63, 8, 6, 1, 230, 125, 4, 237,
+    14, 8, 2, 1, 230, 125, 4, 237, 14, 8, 6, 1, 230, 125, 4, 246, 151, 8, 2,
+    1, 230, 125, 4, 246, 151, 8, 6, 1, 230, 125, 4, 247, 151, 63, 8, 2, 1,
+    230, 125, 4, 247, 151, 63, 8, 6, 1, 228, 97, 4, 199, 91, 63, 8, 2, 1,
+    228, 97, 4, 199, 91, 63, 8, 6, 1, 228, 97, 4, 237, 15, 26, 251, 129, 8,
+    2, 1, 228, 97, 4, 237, 15, 26, 251, 129, 8, 6, 1, 222, 185, 4, 251, 129,
+    8, 2, 1, 222, 185, 4, 251, 129, 8, 6, 1, 222, 185, 4, 78, 63, 8, 2, 1,
+    222, 185, 4, 78, 63, 8, 6, 1, 222, 185, 4, 219, 176, 63, 8, 2, 1, 222,
+    185, 4, 219, 176, 63, 8, 6, 1, 220, 202, 4, 78, 63, 8, 2, 1, 220, 202, 4,
+    78, 63, 8, 6, 1, 220, 202, 4, 78, 248, 84, 26, 217, 214, 8, 2, 1, 220,
+    202, 4, 78, 248, 84, 26, 217, 214, 8, 6, 1, 220, 202, 4, 219, 176, 63, 8,
+    2, 1, 220, 202, 4, 219, 176, 63, 8, 6, 1, 220, 202, 4, 242, 122, 63, 8,
+    2, 1, 220, 202, 4, 242, 122, 63, 8, 6, 1, 218, 237, 4, 251, 129, 8, 2, 1,
+    218, 237, 4, 251, 129, 8, 6, 1, 218, 237, 4, 78, 58, 8, 2, 1, 218, 237,
+    4, 78, 58, 8, 6, 1, 218, 237, 4, 78, 63, 8, 2, 1, 218, 237, 4, 78, 63, 8,
+    6, 1, 215, 152, 4, 78, 58, 8, 2, 1, 215, 152, 4, 78, 58, 8, 6, 1, 215,
+    152, 4, 78, 63, 8, 2, 1, 215, 152, 4, 78, 63, 8, 6, 1, 215, 152, 4, 219,
+    176, 63, 8, 2, 1, 215, 152, 4, 219, 176, 63, 8, 6, 1, 215, 152, 4, 242,
+    122, 63, 8, 2, 1, 215, 152, 4, 242, 122, 63, 8, 6, 1, 185, 4, 199, 91,
+    26, 251, 129, 8, 2, 1, 185, 4, 199, 91, 26, 251, 129, 8, 6, 1, 185, 4,
+    199, 91, 26, 237, 14, 8, 2, 1, 185, 4, 199, 91, 26, 237, 14, 8, 6, 1,
+    185, 4, 217, 215, 26, 230, 210, 8, 2, 1, 185, 4, 217, 215, 26, 230, 210,
+    8, 6, 1, 185, 4, 217, 215, 26, 251, 129, 8, 2, 1, 185, 4, 217, 215, 26,
+    251, 129, 8, 6, 1, 211, 94, 4, 251, 129, 8, 2, 1, 211, 94, 4, 251, 129,
+    8, 6, 1, 211, 94, 4, 78, 58, 8, 2, 1, 211, 94, 4, 78, 58, 8, 6, 1, 208,
+    112, 4, 78, 58, 8, 2, 1, 208, 112, 4, 78, 58, 8, 6, 1, 208, 112, 4, 78,
+    63, 8, 2, 1, 208, 112, 4, 78, 63, 8, 6, 1, 208, 112, 4, 78, 248, 84, 26,
+    217, 214, 8, 2, 1, 208, 112, 4, 78, 248, 84, 26, 217, 214, 8, 6, 1, 208,
+    112, 4, 219, 176, 63, 8, 2, 1, 208, 112, 4, 219, 176, 63, 8, 6, 1, 206,
+    159, 4, 78, 58, 8, 2, 1, 206, 159, 4, 78, 58, 8, 6, 1, 206, 159, 4, 78,
+    63, 8, 2, 1, 206, 159, 4, 78, 63, 8, 6, 1, 206, 159, 4, 251, 130, 26, 78,
+    58, 8, 2, 1, 206, 159, 4, 251, 130, 26, 78, 58, 8, 6, 1, 206, 159, 4,
+    246, 208, 26, 78, 58, 8, 2, 1, 206, 159, 4, 246, 208, 26, 78, 58, 8, 6,
+    1, 206, 159, 4, 78, 248, 84, 26, 78, 58, 8, 2, 1, 206, 159, 4, 78, 248,
+    84, 26, 78, 58, 8, 6, 1, 200, 229, 4, 78, 58, 8, 2, 1, 200, 229, 4, 78,
+    58, 8, 6, 1, 200, 229, 4, 78, 63, 8, 2, 1, 200, 229, 4, 78, 63, 8, 6, 1,
+    200, 229, 4, 219, 176, 63, 8, 2, 1, 200, 229, 4, 219, 176, 63, 8, 6, 1,
+    200, 229, 4, 242, 122, 63, 8, 2, 1, 200, 229, 4, 242, 122, 63, 8, 6, 1,
+    124, 4, 237, 15, 63, 8, 2, 1, 124, 4, 237, 15, 63, 8, 6, 1, 124, 4, 199,
+    91, 63, 8, 2, 1, 124, 4, 199, 91, 63, 8, 6, 1, 124, 4, 242, 122, 63, 8,
+    2, 1, 124, 4, 242, 122, 63, 8, 6, 1, 124, 4, 199, 91, 26, 251, 129, 8, 2,
+    1, 124, 4, 199, 91, 26, 251, 129, 8, 6, 1, 124, 4, 217, 215, 26, 237, 14,
+    8, 2, 1, 124, 4, 217, 215, 26, 237, 14, 8, 6, 1, 196, 237, 4, 199, 90, 8,
+    2, 1, 196, 237, 4, 199, 90, 8, 6, 1, 196, 237, 4, 78, 63, 8, 2, 1, 196,
+    237, 4, 78, 63, 8, 6, 1, 194, 203, 4, 230, 210, 8, 2, 1, 194, 203, 4,
+    230, 210, 8, 6, 1, 194, 203, 4, 251, 129, 8, 2, 1, 194, 203, 4, 251, 129,
+    8, 6, 1, 194, 203, 4, 237, 14, 8, 2, 1, 194, 203, 4, 237, 14, 8, 6, 1,
+    194, 203, 4, 78, 58, 8, 2, 1, 194, 203, 4, 78, 58, 8, 6, 1, 194, 203, 4,
+    78, 63, 8, 2, 1, 194, 203, 4, 78, 63, 8, 6, 1, 193, 224, 4, 78, 58, 8, 2,
+    1, 193, 224, 4, 78, 58, 8, 6, 1, 193, 224, 4, 237, 14, 8, 2, 1, 193, 224,
+    4, 237, 14, 8, 6, 1, 193, 149, 4, 78, 58, 8, 2, 1, 193, 149, 4, 78, 58,
+    8, 6, 1, 192, 156, 4, 242, 121, 8, 2, 1, 192, 156, 4, 242, 121, 8, 6, 1,
+    192, 156, 4, 78, 63, 8, 2, 1, 192, 156, 4, 78, 63, 8, 6, 1, 192, 156, 4,
+    219, 176, 63, 8, 2, 1, 192, 156, 4, 219, 176, 63, 8, 2, 1, 230, 125, 4,
+    219, 176, 63, 8, 2, 1, 200, 229, 4, 237, 14, 8, 2, 1, 194, 203, 4, 207,
+    82, 58, 8, 2, 1, 193, 149, 4, 207, 82, 58, 8, 2, 1, 41, 4, 51, 138, 207,
+    81, 8, 2, 1, 184, 206, 159, 4, 78, 58, 8, 2, 1, 184, 206, 159, 4, 237,
+    11, 111, 8, 2, 1, 184, 206, 159, 4, 139, 111, 8, 6, 1, 204, 26, 206, 158,
+    8, 2, 1, 237, 76, 8, 6, 1, 41, 4, 78, 63, 8, 2, 1, 41, 4, 78, 63, 8, 6,
+    1, 41, 4, 229, 15, 58, 8, 2, 1, 41, 4, 229, 15, 58, 8, 6, 1, 41, 4, 242,
+    122, 26, 251, 129, 8, 2, 1, 41, 4, 242, 122, 26, 251, 129, 8, 6, 1, 41,
+    4, 242, 122, 26, 230, 210, 8, 2, 1, 41, 4, 242, 122, 26, 230, 210, 8, 6,
+    1, 41, 4, 242, 122, 26, 229, 15, 58, 8, 2, 1, 41, 4, 242, 122, 26, 229,
+    15, 58, 8, 6, 1, 41, 4, 242, 122, 26, 199, 90, 8, 2, 1, 41, 4, 242, 122,
+    26, 199, 90, 8, 6, 1, 41, 4, 242, 122, 26, 78, 63, 8, 2, 1, 41, 4, 242,
+    122, 26, 78, 63, 8, 6, 1, 41, 4, 247, 151, 26, 251, 129, 8, 2, 1, 41, 4,
+    247, 151, 26, 251, 129, 8, 6, 1, 41, 4, 247, 151, 26, 230, 210, 8, 2, 1,
+    41, 4, 247, 151, 26, 230, 210, 8, 6, 1, 41, 4, 247, 151, 26, 229, 15, 58,
+    8, 2, 1, 41, 4, 247, 151, 26, 229, 15, 58, 8, 6, 1, 41, 4, 247, 151, 26,
+    199, 90, 8, 2, 1, 41, 4, 247, 151, 26, 199, 90, 8, 6, 1, 41, 4, 247, 151,
+    26, 78, 63, 8, 2, 1, 41, 4, 247, 151, 26, 78, 63, 8, 6, 1, 234, 253, 4,
+    78, 63, 8, 2, 1, 234, 253, 4, 78, 63, 8, 6, 1, 234, 253, 4, 229, 15, 58,
+    8, 2, 1, 234, 253, 4, 229, 15, 58, 8, 6, 1, 234, 253, 4, 199, 90, 8, 2,
+    1, 234, 253, 4, 199, 90, 8, 6, 1, 234, 253, 4, 242, 122, 26, 251, 129, 8,
+    2, 1, 234, 253, 4, 242, 122, 26, 251, 129, 8, 6, 1, 234, 253, 4, 242,
+    122, 26, 230, 210, 8, 2, 1, 234, 253, 4, 242, 122, 26, 230, 210, 8, 6, 1,
+    234, 253, 4, 242, 122, 26, 229, 15, 58, 8, 2, 1, 234, 253, 4, 242, 122,
+    26, 229, 15, 58, 8, 6, 1, 234, 253, 4, 242, 122, 26, 199, 90, 8, 2, 1,
+    234, 253, 4, 242, 122, 26, 199, 90, 8, 6, 1, 234, 253, 4, 242, 122, 26,
+    78, 63, 8, 2, 1, 234, 253, 4, 242, 122, 26, 78, 63, 8, 6, 1, 228, 97, 4,
+    229, 15, 58, 8, 2, 1, 228, 97, 4, 229, 15, 58, 8, 6, 1, 228, 97, 4, 78,
+    63, 8, 2, 1, 228, 97, 4, 78, 63, 8, 6, 1, 185, 4, 78, 63, 8, 2, 1, 185,
+    4, 78, 63, 8, 6, 1, 185, 4, 229, 15, 58, 8, 2, 1, 185, 4, 229, 15, 58, 8,
+    6, 1, 185, 4, 242, 122, 26, 251, 129, 8, 2, 1, 185, 4, 242, 122, 26, 251,
+    129, 8, 6, 1, 185, 4, 242, 122, 26, 230, 210, 8, 2, 1, 185, 4, 242, 122,
+    26, 230, 210, 8, 6, 1, 185, 4, 242, 122, 26, 229, 15, 58, 8, 2, 1, 185,
+    4, 242, 122, 26, 229, 15, 58, 8, 6, 1, 185, 4, 242, 122, 26, 199, 90, 8,
+    2, 1, 185, 4, 242, 122, 26, 199, 90, 8, 6, 1, 185, 4, 242, 122, 26, 78,
+    63, 8, 2, 1, 185, 4, 242, 122, 26, 78, 63, 8, 6, 1, 185, 4, 228, 209, 26,
+    251, 129, 8, 2, 1, 185, 4, 228, 209, 26, 251, 129, 8, 6, 1, 185, 4, 228,
+    209, 26, 230, 210, 8, 2, 1, 185, 4, 228, 209, 26, 230, 210, 8, 6, 1, 185,
+    4, 228, 209, 26, 229, 15, 58, 8, 2, 1, 185, 4, 228, 209, 26, 229, 15, 58,
+    8, 6, 1, 185, 4, 228, 209, 26, 199, 90, 8, 2, 1, 185, 4, 228, 209, 26,
+    199, 90, 8, 6, 1, 185, 4, 228, 209, 26, 78, 63, 8, 2, 1, 185, 4, 228,
+    209, 26, 78, 63, 8, 6, 1, 124, 4, 78, 63, 8, 2, 1, 124, 4, 78, 63, 8, 6,
+    1, 124, 4, 229, 15, 58, 8, 2, 1, 124, 4, 229, 15, 58, 8, 6, 1, 124, 4,
+    228, 209, 26, 251, 129, 8, 2, 1, 124, 4, 228, 209, 26, 251, 129, 8, 6, 1,
+    124, 4, 228, 209, 26, 230, 210, 8, 2, 1, 124, 4, 228, 209, 26, 230, 210,
+    8, 6, 1, 124, 4, 228, 209, 26, 229, 15, 58, 8, 2, 1, 124, 4, 228, 209,
+    26, 229, 15, 58, 8, 6, 1, 124, 4, 228, 209, 26, 199, 90, 8, 2, 1, 124, 4,
+    228, 209, 26, 199, 90, 8, 6, 1, 124, 4, 228, 209, 26, 78, 63, 8, 2, 1,
+    124, 4, 228, 209, 26, 78, 63, 8, 6, 1, 193, 149, 4, 230, 210, 8, 2, 1,
+    193, 149, 4, 230, 210, 8, 6, 1, 193, 149, 4, 78, 63, 8, 2, 1, 193, 149,
+    4, 78, 63, 8, 6, 1, 193, 149, 4, 229, 15, 58, 8, 2, 1, 193, 149, 4, 229,
+    15, 58, 8, 6, 1, 193, 149, 4, 199, 90, 8, 2, 1, 193, 149, 4, 199, 90, 8,
+    6, 1, 216, 159, 219, 138, 8, 2, 1, 216, 159, 219, 138, 8, 6, 1, 216, 159,
+    196, 236, 8, 2, 1, 216, 159, 196, 236, 8, 6, 1, 193, 149, 4, 219, 69, 8,
+    2, 1, 193, 149, 4, 219, 69, 33, 2, 1, 250, 253, 4, 209, 55, 33, 2, 1,
+    250, 253, 4, 237, 182, 33, 2, 1, 250, 253, 4, 209, 56, 26, 196, 138, 33,
+    2, 1, 250, 253, 4, 237, 183, 26, 196, 138, 33, 2, 1, 250, 253, 4, 209,
+    56, 26, 211, 99, 33, 2, 1, 250, 253, 4, 237, 183, 26, 211, 99, 33, 2, 1,
+    250, 253, 4, 209, 56, 26, 210, 126, 33, 2, 1, 250, 253, 4, 237, 183, 26,
+    210, 126, 33, 6, 1, 250, 253, 4, 209, 55, 33, 6, 1, 250, 253, 4, 237,
+    182, 33, 6, 1, 250, 253, 4, 209, 56, 26, 196, 138, 33, 6, 1, 250, 253, 4,
+    237, 183, 26, 196, 138, 33, 6, 1, 250, 253, 4, 209, 56, 26, 211, 99, 33,
+    6, 1, 250, 253, 4, 237, 183, 26, 211, 99, 33, 6, 1, 250, 253, 4, 209, 56,
+    26, 210, 126, 33, 6, 1, 250, 253, 4, 237, 183, 26, 210, 126, 33, 2, 1,
+    234, 33, 4, 209, 55, 33, 2, 1, 234, 33, 4, 237, 182, 33, 2, 1, 234, 33,
+    4, 209, 56, 26, 196, 138, 33, 2, 1, 234, 33, 4, 237, 183, 26, 196, 138,
+    33, 2, 1, 234, 33, 4, 209, 56, 26, 211, 99, 33, 2, 1, 234, 33, 4, 237,
+    183, 26, 211, 99, 33, 6, 1, 234, 33, 4, 209, 55, 33, 6, 1, 234, 33, 4,
+    237, 182, 33, 6, 1, 234, 33, 4, 209, 56, 26, 196, 138, 33, 6, 1, 234, 33,
+    4, 237, 183, 26, 196, 138, 33, 6, 1, 234, 33, 4, 209, 56, 26, 211, 99,
+    33, 6, 1, 234, 33, 4, 237, 183, 26, 211, 99, 33, 2, 1, 233, 241, 4, 209,
+    55, 33, 2, 1, 233, 241, 4, 237, 182, 33, 2, 1, 233, 241, 4, 209, 56, 26,
+    196, 138, 33, 2, 1, 233, 241, 4, 237, 183, 26, 196, 138, 33, 2, 1, 233,
+    241, 4, 209, 56, 26, 211, 99, 33, 2, 1, 233, 241, 4, 237, 183, 26, 211,
+    99, 33, 2, 1, 233, 241, 4, 209, 56, 26, 210, 126, 33, 2, 1, 233, 241, 4,
+    237, 183, 26, 210, 126, 33, 6, 1, 233, 241, 4, 209, 55, 33, 6, 1, 233,
+    241, 4, 237, 182, 33, 6, 1, 233, 241, 4, 209, 56, 26, 196, 138, 33, 6, 1,
+    233, 241, 4, 237, 183, 26, 196, 138, 33, 6, 1, 233, 241, 4, 209, 56, 26,
+    211, 99, 33, 6, 1, 233, 241, 4, 237, 183, 26, 211, 99, 33, 6, 1, 233,
+    241, 4, 209, 56, 26, 210, 126, 33, 6, 1, 233, 241, 4, 237, 183, 26, 210,
+    126, 33, 2, 1, 223, 112, 4, 209, 55, 33, 2, 1, 223, 112, 4, 237, 182, 33,
+    2, 1, 223, 112, 4, 209, 56, 26, 196, 138, 33, 2, 1, 223, 112, 4, 237,
+    183, 26, 196, 138, 33, 2, 1, 223, 112, 4, 209, 56, 26, 211, 99, 33, 2, 1,
+    223, 112, 4, 237, 183, 26, 211, 99, 33, 2, 1, 223, 112, 4, 209, 56, 26,
+    210, 126, 33, 2, 1, 223, 112, 4, 237, 183, 26, 210, 126, 33, 6, 1, 223,
+    112, 4, 209, 55, 33, 6, 1, 223, 112, 4, 237, 182, 33, 6, 1, 223, 112, 4,
+    209, 56, 26, 196, 138, 33, 6, 1, 223, 112, 4, 237, 183, 26, 196, 138, 33,
+    6, 1, 223, 112, 4, 209, 56, 26, 211, 99, 33, 6, 1, 223, 112, 4, 237, 183,
+    26, 211, 99, 33, 6, 1, 223, 112, 4, 209, 56, 26, 210, 126, 33, 6, 1, 223,
+    112, 4, 237, 183, 26, 210, 126, 33, 2, 1, 211, 215, 4, 209, 55, 33, 2, 1,
+    211, 215, 4, 237, 182, 33, 2, 1, 211, 215, 4, 209, 56, 26, 196, 138, 33,
+    2, 1, 211, 215, 4, 237, 183, 26, 196, 138, 33, 2, 1, 211, 215, 4, 209,
+    56, 26, 211, 99, 33, 2, 1, 211, 215, 4, 237, 183, 26, 211, 99, 33, 6, 1,
+    211, 215, 4, 209, 55, 33, 6, 1, 211, 215, 4, 237, 182, 33, 6, 1, 211,
+    215, 4, 209, 56, 26, 196, 138, 33, 6, 1, 211, 215, 4, 237, 183, 26, 196,
+    138, 33, 6, 1, 211, 215, 4, 209, 56, 26, 211, 99, 33, 6, 1, 211, 215, 4,
+    237, 183, 26, 211, 99, 33, 2, 1, 197, 35, 4, 209, 55, 33, 2, 1, 197, 35,
+    4, 237, 182, 33, 2, 1, 197, 35, 4, 209, 56, 26, 196, 138, 33, 2, 1, 197,
+    35, 4, 237, 183, 26, 196, 138, 33, 2, 1, 197, 35, 4, 209, 56, 26, 211,
+    99, 33, 2, 1, 197, 35, 4, 237, 183, 26, 211, 99, 33, 2, 1, 197, 35, 4,
+    209, 56, 26, 210, 126, 33, 2, 1, 197, 35, 4, 237, 183, 26, 210, 126, 33,
+    6, 1, 197, 35, 4, 237, 182, 33, 6, 1, 197, 35, 4, 237, 183, 26, 196, 138,
+    33, 6, 1, 197, 35, 4, 237, 183, 26, 211, 99, 33, 6, 1, 197, 35, 4, 237,
+    183, 26, 210, 126, 33, 2, 1, 211, 217, 4, 209, 55, 33, 2, 1, 211, 217, 4,
+    237, 182, 33, 2, 1, 211, 217, 4, 209, 56, 26, 196, 138, 33, 2, 1, 211,
+    217, 4, 237, 183, 26, 196, 138, 33, 2, 1, 211, 217, 4, 209, 56, 26, 211,
+    99, 33, 2, 1, 211, 217, 4, 237, 183, 26, 211, 99, 33, 2, 1, 211, 217, 4,
+    209, 56, 26, 210, 126, 33, 2, 1, 211, 217, 4, 237, 183, 26, 210, 126, 33,
+    6, 1, 211, 217, 4, 209, 55, 33, 6, 1, 211, 217, 4, 237, 182, 33, 6, 1,
+    211, 217, 4, 209, 56, 26, 196, 138, 33, 6, 1, 211, 217, 4, 237, 183, 26,
+    196, 138, 33, 6, 1, 211, 217, 4, 209, 56, 26, 211, 99, 33, 6, 1, 211,
+    217, 4, 237, 183, 26, 211, 99, 33, 6, 1, 211, 217, 4, 209, 56, 26, 210,
+    126, 33, 6, 1, 211, 217, 4, 237, 183, 26, 210, 126, 33, 2, 1, 250, 253,
+    4, 196, 138, 33, 2, 1, 250, 253, 4, 211, 99, 33, 2, 1, 234, 33, 4, 196,
+    138, 33, 2, 1, 234, 33, 4, 211, 99, 33, 2, 1, 233, 241, 4, 196, 138, 33,
+    2, 1, 233, 241, 4, 211, 99, 33, 2, 1, 223, 112, 4, 196, 138, 33, 2, 1,
+    223, 112, 4, 211, 99, 33, 2, 1, 211, 215, 4, 196, 138, 33, 2, 1, 211,
+    215, 4, 211, 99, 33, 2, 1, 197, 35, 4, 196, 138, 33, 2, 1, 197, 35, 4,
+    211, 99, 33, 2, 1, 211, 217, 4, 196, 138, 33, 2, 1, 211, 217, 4, 211, 99,
+    33, 2, 1, 250, 253, 4, 209, 56, 26, 192, 222, 33, 2, 1, 250, 253, 4, 237,
+    183, 26, 192, 222, 33, 2, 1, 250, 253, 4, 209, 56, 26, 196, 139, 26, 192,
+    222, 33, 2, 1, 250, 253, 4, 237, 183, 26, 196, 139, 26, 192, 222, 33, 2,
+    1, 250, 253, 4, 209, 56, 26, 211, 100, 26, 192, 222, 33, 2, 1, 250, 253,
+    4, 237, 183, 26, 211, 100, 26, 192, 222, 33, 2, 1, 250, 253, 4, 209, 56,
+    26, 210, 127, 26, 192, 222, 33, 2, 1, 250, 253, 4, 237, 183, 26, 210,
+    127, 26, 192, 222, 33, 6, 1, 250, 253, 4, 209, 56, 26, 209, 69, 33, 6, 1,
+    250, 253, 4, 237, 183, 26, 209, 69, 33, 6, 1, 250, 253, 4, 209, 56, 26,
+    196, 139, 26, 209, 69, 33, 6, 1, 250, 253, 4, 237, 183, 26, 196, 139, 26,
+    209, 69, 33, 6, 1, 250, 253, 4, 209, 56, 26, 211, 100, 26, 209, 69, 33,
+    6, 1, 250, 253, 4, 237, 183, 26, 211, 100, 26, 209, 69, 33, 6, 1, 250,
+    253, 4, 209, 56, 26, 210, 127, 26, 209, 69, 33, 6, 1, 250, 253, 4, 237,
+    183, 26, 210, 127, 26, 209, 69, 33, 2, 1, 233, 241, 4, 209, 56, 26, 192,
+    222, 33, 2, 1, 233, 241, 4, 237, 183, 26, 192, 222, 33, 2, 1, 233, 241,
+    4, 209, 56, 26, 196, 139, 26, 192, 222, 33, 2, 1, 233, 241, 4, 237, 183,
+    26, 196, 139, 26, 192, 222, 33, 2, 1, 233, 241, 4, 209, 56, 26, 211, 100,
+    26, 192, 222, 33, 2, 1, 233, 241, 4, 237, 183, 26, 211, 100, 26, 192,
+    222, 33, 2, 1, 233, 241, 4, 209, 56, 26, 210, 127, 26, 192, 222, 33, 2,
+    1, 233, 241, 4, 237, 183, 26, 210, 127, 26, 192, 222, 33, 6, 1, 233, 241,
+    4, 209, 56, 26, 209, 69, 33, 6, 1, 233, 241, 4, 237, 183, 26, 209, 69,
+    33, 6, 1, 233, 241, 4, 209, 56, 26, 196, 139, 26, 209, 69, 33, 6, 1, 233,
+    241, 4, 237, 183, 26, 196, 139, 26, 209, 69, 33, 6, 1, 233, 241, 4, 209,
+    56, 26, 211, 100, 26, 209, 69, 33, 6, 1, 233, 241, 4, 237, 183, 26, 211,
+    100, 26, 209, 69, 33, 6, 1, 233, 241, 4, 209, 56, 26, 210, 127, 26, 209,
+    69, 33, 6, 1, 233, 241, 4, 237, 183, 26, 210, 127, 26, 209, 69, 33, 2, 1,
+    211, 217, 4, 209, 56, 26, 192, 222, 33, 2, 1, 211, 217, 4, 237, 183, 26,
+    192, 222, 33, 2, 1, 211, 217, 4, 209, 56, 26, 196, 139, 26, 192, 222, 33,
+    2, 1, 211, 217, 4, 237, 183, 26, 196, 139, 26, 192, 222, 33, 2, 1, 211,
+    217, 4, 209, 56, 26, 211, 100, 26, 192, 222, 33, 2, 1, 211, 217, 4, 237,
+    183, 26, 211, 100, 26, 192, 222, 33, 2, 1, 211, 217, 4, 209, 56, 26, 210,
+    127, 26, 192, 222, 33, 2, 1, 211, 217, 4, 237, 183, 26, 210, 127, 26,
+    192, 222, 33, 6, 1, 211, 217, 4, 209, 56, 26, 209, 69, 33, 6, 1, 211,
+    217, 4, 237, 183, 26, 209, 69, 33, 6, 1, 211, 217, 4, 209, 56, 26, 196,
+    139, 26, 209, 69, 33, 6, 1, 211, 217, 4, 237, 183, 26, 196, 139, 26, 209,
+    69, 33, 6, 1, 211, 217, 4, 209, 56, 26, 211, 100, 26, 209, 69, 33, 6, 1,
+    211, 217, 4, 237, 183, 26, 211, 100, 26, 209, 69, 33, 6, 1, 211, 217, 4,
+    209, 56, 26, 210, 127, 26, 209, 69, 33, 6, 1, 211, 217, 4, 237, 183, 26,
+    210, 127, 26, 209, 69, 33, 2, 1, 250, 253, 4, 195, 227, 33, 2, 1, 250,
+    253, 4, 217, 214, 33, 2, 1, 250, 253, 4, 196, 139, 26, 192, 222, 33, 2,
+    1, 250, 253, 4, 192, 222, 33, 2, 1, 250, 253, 4, 211, 100, 26, 192, 222,
+    33, 2, 1, 250, 253, 4, 210, 126, 33, 2, 1, 250, 253, 4, 210, 127, 26,
+    192, 222, 33, 6, 1, 250, 253, 4, 195, 227, 33, 6, 1, 250, 253, 4, 217,
+    214, 33, 6, 1, 250, 253, 4, 196, 138, 33, 6, 1, 250, 253, 4, 211, 99, 33,
+    6, 1, 250, 253, 4, 209, 69, 33, 221, 78, 33, 209, 69, 33, 209, 55, 33,
+    210, 126, 33, 237, 8, 26, 210, 126, 33, 2, 1, 233, 241, 4, 196, 139, 26,
+    192, 222, 33, 2, 1, 233, 241, 4, 192, 222, 33, 2, 1, 233, 241, 4, 211,
+    100, 26, 192, 222, 33, 2, 1, 233, 241, 4, 210, 126, 33, 2, 1, 233, 241,
+    4, 210, 127, 26, 192, 222, 33, 6, 1, 234, 33, 4, 196, 138, 33, 6, 1, 234,
+    33, 4, 211, 99, 33, 6, 1, 233, 241, 4, 196, 138, 33, 6, 1, 233, 241, 4,
+    211, 99, 33, 6, 1, 233, 241, 4, 209, 69, 33, 209, 56, 26, 196, 138, 33,
+    209, 56, 26, 211, 99, 33, 209, 56, 26, 210, 126, 33, 2, 1, 223, 112, 4,
+    195, 227, 33, 2, 1, 223, 112, 4, 217, 214, 33, 2, 1, 223, 112, 4, 237, 8,
+    26, 196, 138, 33, 2, 1, 223, 112, 4, 237, 8, 26, 211, 99, 33, 2, 1, 223,
+    112, 4, 210, 126, 33, 2, 1, 223, 112, 4, 237, 8, 26, 210, 126, 33, 6, 1,
+    223, 112, 4, 195, 227, 33, 6, 1, 223, 112, 4, 217, 214, 33, 6, 1, 223,
+    112, 4, 196, 138, 33, 6, 1, 223, 112, 4, 211, 99, 33, 237, 183, 26, 196,
+    138, 33, 237, 183, 26, 211, 99, 33, 237, 183, 26, 210, 126, 33, 2, 1,
+    197, 35, 4, 195, 227, 33, 2, 1, 197, 35, 4, 217, 214, 33, 2, 1, 197, 35,
+    4, 237, 8, 26, 196, 138, 33, 2, 1, 197, 35, 4, 237, 8, 26, 211, 99, 33,
+    2, 1, 207, 154, 4, 209, 55, 33, 2, 1, 207, 154, 4, 237, 182, 33, 2, 1,
+    197, 35, 4, 210, 126, 33, 2, 1, 197, 35, 4, 237, 8, 26, 210, 126, 33, 6,
+    1, 197, 35, 4, 195, 227, 33, 6, 1, 197, 35, 4, 217, 214, 33, 6, 1, 197,
+    35, 4, 196, 138, 33, 6, 1, 197, 35, 4, 211, 99, 33, 6, 1, 207, 154, 4,
+    237, 182, 33, 237, 8, 26, 196, 138, 33, 237, 8, 26, 211, 99, 33, 196,
+    138, 33, 2, 1, 211, 217, 4, 196, 139, 26, 192, 222, 33, 2, 1, 211, 217,
+    4, 192, 222, 33, 2, 1, 211, 217, 4, 211, 100, 26, 192, 222, 33, 2, 1,
+    211, 217, 4, 210, 126, 33, 2, 1, 211, 217, 4, 210, 127, 26, 192, 222, 33,
+    6, 1, 211, 215, 4, 196, 138, 33, 6, 1, 211, 215, 4, 211, 99, 33, 6, 1,
+    211, 217, 4, 196, 138, 33, 6, 1, 211, 217, 4, 211, 99, 33, 6, 1, 211,
+    217, 4, 209, 69, 33, 211, 99, 33, 237, 182, 234, 89, 208, 174, 234, 100,
+    208, 174, 234, 89, 202, 160, 234, 100, 202, 160, 199, 154, 202, 160, 232,
+    117, 202, 160, 203, 39, 202, 160, 233, 1, 202, 160, 209, 38, 202, 160,
+    199, 195, 202, 160, 230, 87, 202, 160, 192, 77, 194, 61, 202, 160, 192,
+    77, 194, 61, 213, 128, 192, 77, 194, 61, 222, 228, 220, 19, 77, 207, 92,
+    77, 228, 111, 213, 129, 228, 111, 233, 1, 237, 185, 234, 89, 237, 185,
+    234, 100, 237, 185, 229, 5, 161, 55, 84, 219, 175, 55, 132, 219, 175, 46,
+    203, 74, 208, 142, 77, 51, 203, 74, 208, 142, 77, 203, 74, 219, 51, 208,
+    142, 77, 203, 74, 229, 152, 208, 142, 77, 46, 55, 208, 142, 77, 51, 55,
+    208, 142, 77, 55, 219, 51, 208, 142, 77, 55, 229, 152, 208, 142, 77, 237,
+    238, 55, 237, 238, 247, 106, 198, 182, 247, 106, 90, 78, 220, 40, 103,
+    78, 220, 40, 229, 5, 234, 105, 228, 109, 209, 191, 219, 176, 204, 165,
+    210, 244, 204, 165, 220, 19, 234, 98, 207, 92, 234, 98, 209, 169, 236,
+    204, 232, 134, 220, 19, 211, 107, 207, 92, 211, 107, 215, 50, 213, 136,
+    202, 160, 210, 134, 216, 126, 57, 210, 134, 200, 31, 199, 165, 57, 209,
+    99, 55, 209, 99, 198, 170, 209, 99, 207, 168, 209, 99, 207, 168, 55, 209,
+    99, 207, 168, 198, 170, 209, 99, 246, 211, 203, 74, 220, 23, 250, 208,
+    208, 142, 77, 203, 74, 207, 96, 250, 208, 208, 142, 77, 207, 233, 77, 55,
+    233, 204, 77, 223, 130, 211, 109, 197, 64, 246, 100, 199, 113, 246, 212,
+    223, 147, 209, 191, 250, 35, 228, 112, 247, 106, 232, 109, 203, 4, 46,
+    50, 247, 165, 4, 208, 153, 51, 50, 247, 165, 4, 208, 153, 55, 208, 159,
+    77, 208, 159, 233, 204, 77, 233, 204, 208, 159, 77, 199, 66, 3, 233, 242,
+    207, 168, 210, 9, 57, 60, 114, 247, 106, 60, 94, 247, 106, 132, 250, 37,
+    207, 168, 204, 180, 242, 85, 197, 41, 103, 250, 36, 251, 12, 196, 54,
+    242, 36, 216, 113, 57, 201, 58, 237, 185, 223, 121, 197, 64, 232, 176,
+    209, 38, 77, 112, 78, 209, 37, 208, 170, 209, 99, 232, 119, 78, 209, 37,
+    232, 214, 78, 209, 37, 103, 78, 209, 37, 232, 119, 78, 77, 235, 111, 238,
+    183, 198, 181, 84, 232, 119, 236, 111, 217, 31, 13, 202, 160, 194, 11,
+    222, 228, 232, 69, 250, 142, 223, 119, 199, 82, 223, 119, 204, 165, 223,
+    119, 209, 206, 220, 19, 223, 88, 207, 92, 223, 88, 232, 226, 201, 194,
+    223, 88, 209, 169, 236, 204, 223, 88, 223, 160, 201, 4, 201, 76, 251,
+    132, 201, 4, 201, 76, 223, 160, 9, 232, 136, 204, 32, 251, 132, 9, 232,
+    136, 204, 32, 215, 44, 17, 204, 33, 213, 132, 17, 204, 33, 201, 107, 192,
+    76, 201, 107, 8, 2, 1, 70, 201, 107, 134, 201, 107, 151, 201, 107, 170,
+    201, 107, 179, 201, 107, 174, 201, 107, 182, 201, 107, 102, 57, 201, 107,
+    216, 112, 201, 107, 234, 30, 57, 201, 107, 46, 210, 230, 201, 107, 51,
+    210, 230, 201, 107, 8, 2, 1, 215, 151, 201, 155, 192, 76, 201, 155, 101,
+    201, 155, 104, 201, 155, 133, 201, 155, 134, 201, 155, 151, 201, 155,
+    170, 201, 155, 179, 201, 155, 174, 201, 155, 182, 201, 155, 102, 57, 201,
+    155, 216, 112, 201, 155, 234, 30, 57, 201, 155, 46, 210, 230, 201, 155,
+    51, 210, 230, 8, 201, 155, 2, 1, 64, 8, 201, 155, 2, 1, 71, 8, 201, 155,
+    2, 1, 74, 8, 201, 155, 2, 1, 193, 223, 8, 201, 155, 2, 1, 205, 240, 8,
+    201, 155, 2, 1, 230, 124, 8, 201, 155, 2, 1, 222, 184, 8, 201, 155, 2, 1,
+    165, 8, 201, 155, 2, 1, 218, 236, 8, 201, 155, 2, 1, 215, 151, 8, 201,
+    155, 2, 1, 211, 93, 8, 201, 155, 2, 1, 206, 158, 8, 201, 155, 2, 1, 200,
+    228, 233, 221, 57, 242, 48, 57, 238, 167, 57, 232, 97, 232, 102, 57, 219,
+    155, 57, 216, 127, 57, 215, 68, 57, 210, 111, 57, 206, 186, 57, 194, 19,
+    57, 214, 177, 203, 254, 57, 236, 122, 57, 233, 222, 57, 221, 173, 57,
+    198, 32, 57, 235, 89, 57, 231, 131, 210, 147, 57, 210, 108, 57, 230, 181,
+    57, 249, 254, 57, 228, 187, 57, 246, 153, 57, 219, 145, 198, 229, 57,
+    202, 140, 57, 200, 28, 57, 223, 175, 206, 186, 57, 198, 11, 219, 155, 57,
+    213, 118, 122, 57, 217, 158, 57, 206, 209, 57, 220, 69, 57, 248, 0, 57,
+    38, 46, 230, 22, 58, 38, 51, 230, 22, 58, 38, 184, 84, 219, 176, 211,
+    110, 38, 203, 195, 84, 219, 176, 211, 110, 38, 250, 182, 61, 58, 38, 242,
+    86, 61, 58, 38, 46, 61, 58, 38, 51, 61, 58, 38, 207, 82, 211, 110, 38,
+    242, 86, 207, 82, 211, 110, 38, 250, 182, 207, 82, 211, 110, 38, 112,
+    236, 112, 58, 38, 232, 119, 236, 112, 58, 38, 234, 84, 242, 130, 38, 234,
+    84, 202, 106, 38, 234, 84, 237, 4, 38, 234, 84, 242, 131, 248, 247, 38,
+    46, 51, 61, 58, 38, 234, 84, 205, 231, 38, 234, 84, 221, 253, 38, 234,
+    84, 197, 32, 209, 188, 198, 185, 38, 207, 169, 202, 190, 211, 110, 38,
+    55, 84, 201, 208, 211, 110, 38, 250, 192, 109, 38, 198, 170, 197, 66, 38,
+    194, 64, 247, 143, 58, 38, 114, 61, 211, 110, 38, 184, 55, 202, 190, 211,
+    110, 38, 94, 230, 22, 4, 173, 235, 91, 38, 114, 230, 22, 4, 173, 235, 91,
+    38, 46, 61, 63, 38, 51, 61, 63, 38, 250, 38, 58, 251, 138, 211, 251, 251,
+    121, 115, 199, 225, 201, 165, 235, 102, 6, 247, 52, 237, 95, 246, 143,
+    246, 138, 219, 176, 109, 246, 213, 211, 251, 247, 11, 197, 76, 233, 223,
+    239, 3, 205, 227, 237, 95, 233, 79, 27, 2, 232, 44, 27, 6, 230, 124, 247,
+    246, 6, 230, 124, 235, 102, 6, 230, 124, 209, 227, 239, 3, 209, 227, 239,
+    4, 136, 103, 210, 51, 27, 6, 70, 247, 246, 6, 70, 27, 6, 165, 27, 2, 165,
+    220, 202, 76, 248, 194, 109, 235, 102, 6, 215, 151, 212, 232, 57, 202,
+    174, 207, 245, 238, 226, 27, 6, 211, 93, 235, 102, 6, 211, 93, 235, 102,
+    6, 208, 247, 27, 6, 150, 247, 246, 6, 150, 235, 102, 6, 150, 209, 107,
+    200, 140, 207, 181, 204, 156, 77, 200, 42, 57, 198, 219, 122, 57, 196,
+    106, 235, 102, 6, 192, 155, 211, 129, 57, 211, 240, 57, 223, 121, 211,
+    240, 57, 247, 246, 6, 192, 155, 163, 33, 2, 1, 223, 111, 222, 38, 57,
+    250, 202, 57, 27, 6, 249, 226, 247, 246, 6, 247, 52, 233, 247, 109, 27,
+    2, 71, 27, 6, 71, 27, 6, 233, 163, 163, 6, 233, 163, 27, 6, 218, 236, 27,
+    2, 74, 157, 109, 248, 66, 109, 231, 32, 109, 237, 222, 109, 223, 165,
+    202, 172, 207, 16, 6, 208, 247, 233, 82, 57, 235, 102, 2, 210, 51, 235,
+    102, 2, 231, 204, 235, 102, 6, 231, 204, 235, 102, 6, 210, 51, 235, 102,
+    215, 150, 201, 126, 163, 49, 6, 232, 44, 163, 49, 6, 165, 207, 168, 49,
+    6, 165, 163, 49, 6, 193, 148, 235, 102, 43, 6, 238, 95, 235, 102, 43, 2,
+    238, 95, 235, 102, 43, 2, 71, 235, 102, 43, 2, 70, 235, 102, 43, 2, 223,
+    65, 209, 73, 219, 175, 163, 250, 229, 210, 134, 57, 251, 38, 163, 2, 233,
+    163, 16, 39, 206, 49, 202, 172, 194, 220, 232, 109, 90, 204, 142, 194,
+    220, 232, 109, 90, 214, 9, 194, 220, 232, 109, 90, 200, 21, 194, 220,
+    232, 109, 90, 199, 191, 194, 220, 232, 109, 103, 199, 188, 194, 220, 232,
+    109, 90, 233, 6, 194, 220, 232, 109, 103, 233, 5, 194, 220, 232, 109,
+    112, 233, 5, 194, 220, 232, 109, 232, 119, 233, 5, 194, 220, 232, 109,
+    90, 203, 29, 194, 220, 232, 109, 232, 214, 203, 27, 194, 220, 232, 109,
+    90, 234, 143, 194, 220, 232, 109, 112, 234, 141, 194, 220, 232, 109, 232,
+    214, 234, 141, 194, 220, 232, 109, 204, 146, 234, 141, 232, 109, 212,
+    233, 101, 207, 30, 212, 234, 101, 207, 30, 212, 234, 104, 207, 30, 212,
+    234, 133, 207, 30, 212, 234, 134, 207, 30, 212, 234, 151, 207, 30, 212,
+    234, 170, 207, 30, 212, 234, 179, 207, 30, 212, 234, 174, 207, 30, 212,
+    234, 182, 207, 30, 212, 234, 200, 30, 207, 30, 212, 234, 234, 111, 207,
+    30, 212, 234, 197, 244, 207, 30, 212, 234, 233, 3, 207, 30, 212, 234, 90,
+    228, 162, 207, 30, 212, 234, 232, 214, 228, 162, 207, 30, 212, 234, 90,
+    180, 2, 207, 30, 212, 234, 101, 2, 207, 30, 212, 234, 104, 2, 207, 30,
+    212, 234, 133, 2, 207, 30, 212, 234, 134, 2, 207, 30, 212, 234, 151, 2,
+    207, 30, 212, 234, 170, 2, 207, 30, 212, 234, 179, 2, 207, 30, 212, 234,
+    174, 2, 207, 30, 212, 234, 182, 2, 207, 30, 212, 234, 200, 30, 2, 207,
+    30, 212, 234, 234, 111, 2, 207, 30, 212, 234, 197, 244, 2, 207, 30, 212,
+    234, 233, 3, 2, 207, 30, 212, 234, 90, 228, 162, 2, 207, 30, 212, 234,
+    232, 214, 228, 162, 2, 207, 30, 212, 234, 90, 180, 207, 30, 212, 234, 90,
+    199, 165, 247, 53, 238, 95, 207, 30, 212, 234, 232, 214, 180, 207, 30,
+    212, 234, 200, 31, 180, 207, 30, 212, 234, 207, 168, 90, 228, 162, 8, 2,
+    1, 207, 168, 247, 52, 207, 30, 212, 234, 203, 41, 220, 64, 20, 207, 30,
+    212, 234, 233, 4, 234, 192, 20, 207, 30, 212, 234, 233, 4, 180, 207, 30,
+    212, 234, 90, 228, 163, 180, 194, 220, 232, 109, 192, 77, 199, 188, 163,
+    17, 104, 163, 17, 133, 114, 54, 197, 30, 54, 94, 54, 235, 92, 54, 46, 51,
+    54, 130, 142, 54, 178, 194, 91, 54, 178, 234, 186, 54, 202, 171, 234,
+    186, 54, 202, 171, 194, 91, 54, 114, 61, 4, 111, 94, 61, 4, 111, 114,
+    194, 125, 54, 94, 194, 125, 54, 114, 103, 229, 243, 54, 197, 30, 103,
+    229, 243, 54, 94, 103, 229, 243, 54, 235, 92, 103, 229, 243, 54, 114, 61,
+    4, 200, 147, 94, 61, 4, 200, 147, 114, 61, 232, 89, 161, 197, 30, 61,
+    232, 89, 161, 94, 61, 232, 89, 161, 235, 92, 61, 232, 89, 161, 130, 142,
+    61, 4, 248, 180, 114, 61, 4, 128, 94, 61, 4, 128, 114, 61, 4, 219, 69,
+    94, 61, 4, 219, 69, 46, 51, 194, 125, 54, 46, 51, 61, 4, 111, 235, 92,
+    192, 21, 54, 197, 30, 61, 4, 199, 74, 220, 18, 197, 30, 61, 4, 199, 74,
+    207, 90, 235, 92, 61, 4, 199, 74, 220, 18, 235, 92, 61, 4, 199, 74, 207,
+    90, 94, 61, 4, 238, 224, 235, 91, 235, 92, 61, 4, 238, 224, 220, 18, 250,
+    182, 198, 249, 204, 183, 54, 242, 86, 198, 249, 204, 183, 54, 178, 194,
+    91, 61, 115, 184, 161, 114, 61, 115, 248, 194, 136, 94, 61, 115, 161,
+    250, 182, 211, 184, 242, 131, 54, 242, 86, 211, 184, 242, 131, 54, 114,
+    230, 22, 4, 173, 197, 29, 114, 230, 22, 4, 173, 235, 91, 197, 30, 230,
+    22, 4, 173, 207, 90, 197, 30, 230, 22, 4, 173, 220, 18, 94, 230, 22, 4,
+    173, 197, 29, 94, 230, 22, 4, 173, 235, 91, 235, 92, 230, 22, 4, 173,
+    207, 90, 235, 92, 230, 22, 4, 173, 220, 18, 94, 61, 136, 114, 54, 197,
+    30, 61, 114, 80, 235, 92, 54, 114, 61, 136, 94, 54, 114, 211, 53, 250,
+    73, 197, 30, 211, 53, 250, 73, 94, 211, 53, 250, 73, 235, 92, 211, 53,
+    250, 73, 114, 230, 22, 136, 94, 230, 21, 94, 230, 22, 136, 114, 230, 21,
+    114, 55, 61, 4, 111, 46, 51, 55, 61, 4, 111, 94, 55, 61, 4, 111, 114, 55,
+    54, 197, 30, 55, 54, 94, 55, 54, 235, 92, 55, 54, 46, 51, 55, 54, 130,
+    142, 55, 54, 178, 194, 91, 55, 54, 178, 234, 186, 55, 54, 202, 171, 234,
+    186, 55, 54, 202, 171, 194, 91, 55, 54, 114, 198, 170, 54, 94, 198, 170,
+    54, 114, 202, 99, 54, 94, 202, 99, 54, 197, 30, 61, 4, 55, 111, 235, 92,
+    61, 4, 55, 111, 114, 237, 184, 54, 197, 30, 237, 184, 54, 94, 237, 184,
+    54, 235, 92, 237, 184, 54, 114, 61, 115, 161, 94, 61, 115, 161, 114, 62,
+    54, 197, 30, 62, 54, 94, 62, 54, 235, 92, 62, 54, 197, 30, 62, 61, 232,
+    89, 161, 197, 30, 62, 61, 211, 212, 210, 171, 197, 30, 62, 61, 211, 212,
+    210, 172, 4, 229, 5, 161, 197, 30, 62, 61, 211, 212, 210, 172, 4, 84,
+    161, 197, 30, 62, 55, 54, 197, 30, 62, 55, 61, 211, 212, 210, 171, 94,
+    62, 61, 232, 89, 194, 151, 178, 194, 91, 61, 115, 238, 223, 202, 171,
+    234, 186, 61, 115, 238, 223, 130, 142, 62, 54, 51, 61, 4, 2, 242, 130,
+    235, 92, 61, 114, 80, 197, 30, 54, 112, 94, 250, 73, 114, 61, 4, 84, 111,
+    94, 61, 4, 84, 111, 46, 51, 61, 4, 84, 111, 114, 61, 4, 55, 84, 111, 94,
+    61, 4, 55, 84, 111, 46, 51, 61, 4, 55, 84, 111, 114, 211, 181, 54, 94,
+    211, 181, 54, 46, 51, 211, 181, 54, 39, 251, 8, 242, 32, 210, 222, 236,
+    244, 199, 215, 233, 199, 199, 215, 236, 136, 213, 111, 233, 200, 234, 90,
+    204, 151, 223, 179, 215, 79, 234, 116, 211, 251, 213, 111, 250, 225, 234,
+    116, 211, 251, 2, 234, 116, 211, 251, 238, 253, 250, 62, 217, 9, 236,
+    136, 213, 111, 238, 255, 250, 62, 217, 9, 2, 238, 253, 250, 62, 217, 9,
+    234, 80, 80, 209, 75, 215, 150, 209, 85, 215, 150, 238, 230, 215, 150,
+    201, 126, 216, 113, 57, 216, 111, 57, 78, 209, 206, 236, 172, 203, 4,
+    204, 152, 216, 112, 250, 38, 211, 173, 207, 82, 211, 173, 247, 107, 211,
+    173, 50, 207, 22, 238, 158, 207, 22, 232, 112, 207, 22, 209, 71, 155,
+    223, 167, 51, 250, 207, 250, 207, 217, 42, 250, 207, 202, 139, 250, 207,
+    236, 175, 236, 136, 213, 111, 236, 179, 210, 236, 155, 213, 111, 210,
+    236, 155, 219, 93, 250, 217, 219, 93, 211, 163, 223, 127, 197, 56, 223,
+    141, 55, 223, 141, 198, 170, 223, 141, 238, 247, 223, 141, 201, 96, 223,
+    141, 195, 239, 223, 141, 242, 86, 223, 141, 242, 86, 238, 247, 223, 141,
+    250, 182, 238, 247, 223, 141, 199, 214, 248, 110, 208, 18, 209, 72, 78,
+    216, 112, 233, 207, 231, 137, 209, 72, 229, 20, 199, 91, 211, 173, 207,
+    168, 199, 90, 223, 121, 220, 49, 206, 158, 203, 76, 194, 124, 193, 254,
+    209, 85, 213, 111, 199, 90, 216, 113, 199, 90, 250, 30, 187, 155, 213,
+    111, 250, 30, 187, 155, 250, 138, 187, 155, 250, 138, 247, 77, 213, 111,
+    251, 131, 187, 155, 214, 198, 250, 138, 213, 120, 251, 131, 187, 155,
+    251, 1, 187, 155, 213, 111, 251, 1, 187, 155, 251, 1, 187, 211, 164, 187,
+    155, 198, 170, 199, 90, 251, 9, 187, 155, 234, 23, 155, 231, 136, 234,
+    23, 155, 236, 245, 248, 60, 250, 140, 199, 225, 219, 183, 231, 136, 187,
+    155, 250, 138, 187, 115, 211, 164, 199, 225, 223, 206, 211, 251, 223,
+    206, 80, 211, 164, 250, 138, 187, 155, 242, 48, 234, 29, 234, 30, 242,
+    47, 207, 82, 223, 191, 187, 155, 207, 82, 187, 155, 238, 216, 155, 233,
+    246, 234, 28, 155, 202, 20, 234, 29, 237, 77, 187, 155, 187, 115, 247,
+    64, 237, 96, 217, 42, 247, 63, 208, 157, 187, 155, 213, 111, 187, 155,
+    228, 41, 155, 213, 111, 228, 41, 155, 201, 215, 234, 23, 155, 219, 240,
+    211, 164, 187, 155, 230, 204, 211, 164, 187, 155, 219, 240, 136, 187,
+    155, 230, 204, 136, 187, 155, 219, 240, 247, 77, 213, 111, 187, 155, 230,
+    204, 247, 77, 213, 111, 187, 155, 215, 231, 219, 239, 215, 231, 230, 203,
+    248, 60, 213, 111, 234, 23, 155, 213, 111, 219, 239, 213, 111, 230, 203,
+    214, 198, 219, 240, 213, 120, 187, 155, 214, 198, 230, 204, 213, 120,
+    187, 155, 219, 240, 211, 164, 234, 23, 155, 230, 204, 211, 164, 234, 23,
+    155, 214, 198, 219, 240, 213, 120, 234, 23, 155, 214, 198, 230, 204, 213,
+    120, 234, 23, 155, 219, 240, 211, 164, 230, 203, 230, 204, 211, 164, 219,
+    239, 214, 198, 219, 240, 213, 120, 230, 203, 214, 198, 230, 204, 213,
+    120, 219, 239, 209, 115, 201, 145, 209, 116, 211, 164, 187, 155, 201,
+    146, 211, 164, 187, 155, 209, 116, 211, 164, 234, 23, 155, 201, 146, 211,
+    164, 234, 23, 155, 236, 136, 213, 111, 209, 118, 236, 136, 213, 111, 201,
+    147, 201, 154, 211, 251, 201, 106, 211, 251, 213, 111, 41, 201, 154, 211,
+    251, 213, 111, 41, 201, 106, 211, 251, 201, 154, 80, 211, 164, 187, 155,
+    201, 106, 80, 211, 164, 187, 155, 214, 198, 41, 201, 154, 80, 213, 120,
+    187, 155, 214, 198, 41, 201, 106, 80, 213, 120, 187, 155, 201, 154, 80,
+    4, 213, 111, 187, 155, 201, 106, 80, 4, 213, 111, 187, 155, 215, 211,
+    215, 212, 215, 213, 215, 212, 197, 56, 50, 223, 206, 211, 251, 50, 211,
+    154, 211, 251, 50, 223, 206, 80, 211, 164, 187, 155, 50, 211, 154, 80,
+    211, 164, 187, 155, 50, 246, 226, 50, 238, 148, 47, 209, 206, 47, 216,
+    112, 47, 199, 82, 47, 236, 172, 203, 4, 47, 78, 211, 173, 47, 207, 82,
+    211, 173, 47, 250, 38, 211, 173, 47, 234, 29, 47, 237, 185, 108, 209,
+    206, 108, 216, 112, 108, 199, 82, 108, 78, 211, 173, 51, 200, 159, 46,
+    200, 159, 142, 200, 159, 130, 200, 159, 250, 41, 216, 80, 198, 147, 232,
+    142, 198, 170, 84, 248, 194, 51, 198, 8, 55, 84, 248, 194, 55, 51, 198,
+    8, 236, 136, 213, 111, 209, 65, 213, 111, 198, 147, 236, 136, 213, 111,
+    232, 143, 214, 201, 55, 84, 248, 194, 55, 51, 198, 8, 209, 116, 197, 69,
+    207, 215, 201, 146, 197, 69, 207, 215, 213, 117, 201, 168, 211, 251, 238,
+    253, 250, 62, 213, 117, 201, 167, 213, 117, 201, 168, 80, 211, 164, 187,
+    155, 238, 253, 250, 62, 213, 117, 201, 168, 211, 164, 187, 155, 211, 154,
+    211, 251, 223, 206, 211, 251, 215, 218, 229, 199, 239, 8, 217, 98, 223,
+    138, 193, 181, 215, 59, 213, 119, 51, 250, 208, 4, 250, 114, 51, 198,
+    185, 215, 150, 219, 93, 250, 217, 215, 150, 219, 93, 211, 163, 215, 150,
+    223, 127, 215, 150, 197, 56, 237, 5, 211, 173, 78, 211, 173, 202, 20,
+    211, 173, 236, 172, 199, 82, 247, 174, 46, 213, 117, 233, 81, 204, 179,
+    209, 85, 51, 213, 117, 233, 81, 204, 179, 209, 85, 46, 204, 179, 209, 85,
+    51, 204, 179, 209, 85, 207, 168, 199, 91, 234, 29, 238, 138, 219, 93,
+    211, 163, 238, 138, 219, 93, 250, 217, 55, 201, 153, 55, 201, 105, 55,
+    223, 127, 55, 197, 56, 209, 239, 187, 26, 210, 236, 155, 219, 240, 4,
+    236, 114, 230, 204, 4, 236, 114, 196, 53, 215, 231, 219, 239, 196, 53,
+    215, 231, 230, 203, 219, 240, 187, 115, 211, 164, 230, 203, 230, 204,
+    187, 115, 211, 164, 219, 239, 187, 115, 211, 164, 219, 239, 187, 115,
+    211, 164, 230, 203, 187, 115, 211, 164, 209, 115, 187, 115, 211, 164,
+    201, 145, 236, 136, 213, 111, 209, 119, 211, 164, 234, 31, 236, 136, 213,
+    111, 201, 148, 211, 164, 234, 31, 213, 111, 50, 223, 206, 80, 211, 164,
+    187, 155, 213, 111, 50, 211, 154, 80, 211, 164, 187, 155, 50, 223, 206,
+    80, 211, 164, 213, 111, 187, 155, 50, 211, 154, 80, 211, 164, 213, 111,
+    187, 155, 219, 240, 247, 77, 213, 111, 234, 23, 155, 230, 204, 247, 77,
+    213, 111, 234, 23, 155, 209, 116, 247, 77, 213, 111, 234, 23, 155, 201,
+    146, 247, 77, 213, 111, 234, 23, 155, 213, 111, 213, 117, 201, 168, 211,
+    251, 236, 136, 213, 111, 238, 255, 250, 62, 213, 117, 201, 167, 213, 111,
+    213, 117, 201, 168, 80, 211, 164, 187, 155, 236, 136, 213, 111, 238, 255,
+    250, 62, 213, 117, 201, 168, 211, 164, 234, 31, 84, 234, 105, 216, 158,
+    229, 5, 234, 105, 130, 51, 237, 11, 234, 105, 142, 51, 237, 11, 234, 105,
+    234, 116, 80, 4, 184, 229, 5, 111, 234, 116, 80, 4, 84, 248, 194, 250,
+    27, 234, 80, 80, 229, 5, 111, 2, 234, 116, 80, 4, 84, 248, 194, 250, 27,
+    234, 80, 80, 229, 5, 111, 234, 116, 80, 4, 78, 58, 234, 116, 80, 4, 211,
+    117, 2, 234, 116, 80, 4, 211, 117, 234, 116, 80, 4, 197, 67, 234, 116,
+    80, 4, 103, 229, 5, 201, 195, 238, 253, 4, 184, 229, 5, 111, 238, 253, 4,
+    84, 248, 194, 250, 27, 234, 80, 80, 229, 5, 111, 2, 238, 253, 4, 84, 248,
+    194, 250, 27, 234, 80, 80, 229, 5, 111, 238, 253, 4, 211, 117, 2, 238,
+    253, 4, 211, 117, 192, 156, 213, 109, 248, 237, 217, 8, 237, 6, 57, 234,
+    119, 54, 228, 193, 130, 250, 77, 142, 250, 77, 209, 79, 210, 114, 194,
+    121, 219, 175, 46, 246, 146, 51, 246, 146, 46, 232, 182, 51, 232, 182,
+    247, 188, 51, 238, 185, 247, 188, 46, 238, 185, 198, 249, 51, 238, 185,
+    198, 249, 46, 238, 185, 207, 168, 213, 111, 57, 50, 219, 43, 250, 114,
+    205, 198, 205, 207, 200, 42, 207, 246, 209, 160, 223, 172, 196, 26, 202,
+    106, 209, 232, 80, 223, 137, 57, 163, 213, 111, 57, 194, 131, 228, 195,
+    198, 249, 46, 238, 223, 198, 249, 51, 238, 223, 247, 188, 46, 238, 223,
+    247, 188, 51, 238, 223, 198, 249, 138, 223, 141, 247, 188, 138, 223, 141,
+    232, 84, 202, 231, 130, 250, 78, 248, 61, 103, 229, 5, 248, 182, 211,
+    166, 222, 1, 234, 19, 115, 199, 225, 207, 101, 193, 224, 223, 191, 41,
+    207, 243, 247, 173, 221, 255, 220, 23, 250, 208, 186, 207, 96, 250, 208,
+    186, 234, 19, 115, 199, 225, 220, 28, 248, 72, 207, 81, 238, 105, 251, 9,
+    250, 86, 201, 3, 198, 234, 206, 191, 236, 224, 211, 155, 239, 12, 200,
+    114, 202, 245, 238, 212, 238, 211, 250, 157, 232, 67, 16, 228, 90, 250,
+    157, 232, 67, 16, 202, 97, 208, 174, 250, 157, 232, 67, 16, 208, 175,
+    234, 31, 250, 157, 232, 67, 16, 208, 175, 236, 179, 250, 157, 232, 67,
+    16, 208, 175, 237, 4, 250, 157, 232, 67, 16, 208, 175, 222, 220, 250,
+    157, 232, 67, 16, 208, 175, 242, 130, 250, 157, 232, 67, 16, 242, 131,
+    201, 246, 250, 157, 232, 67, 16, 242, 131, 222, 220, 250, 157, 232, 67,
+    16, 203, 5, 161, 250, 157, 232, 67, 16, 248, 248, 161, 250, 157, 232, 67,
+    16, 208, 175, 203, 4, 250, 157, 232, 67, 16, 208, 175, 248, 247, 250,
+    157, 232, 67, 16, 208, 175, 219, 239, 250, 157, 232, 67, 16, 208, 175,
+    230, 203, 250, 157, 232, 67, 16, 114, 196, 145, 250, 157, 232, 67, 16,
+    94, 196, 145, 250, 157, 232, 67, 16, 208, 175, 114, 54, 250, 157, 232,
+    67, 16, 208, 175, 94, 54, 250, 157, 232, 67, 16, 242, 131, 248, 247, 250,
+    157, 232, 67, 16, 142, 200, 160, 197, 67, 250, 157, 232, 67, 16, 237, 77,
+    201, 246, 250, 157, 232, 67, 16, 208, 175, 142, 246, 211, 250, 157, 232,
+    67, 16, 208, 175, 237, 76, 250, 157, 232, 67, 16, 142, 200, 160, 222,
+    220, 250, 157, 232, 67, 16, 197, 30, 196, 145, 250, 157, 232, 67, 16,
+    208, 175, 197, 30, 54, 250, 157, 232, 67, 16, 130, 200, 160, 211, 117,
+    250, 157, 232, 67, 16, 237, 89, 201, 246, 250, 157, 232, 67, 16, 208,
+    175, 130, 246, 211, 250, 157, 232, 67, 16, 208, 175, 237, 88, 250, 157,
+    232, 67, 16, 130, 200, 160, 222, 220, 250, 157, 232, 67, 16, 235, 92,
+    196, 145, 250, 157, 232, 67, 16, 208, 175, 235, 92, 54, 250, 157, 232,
+    67, 16, 208, 141, 197, 67, 250, 157, 232, 67, 16, 237, 77, 197, 67, 250,
+    157, 232, 67, 16, 237, 5, 197, 67, 250, 157, 232, 67, 16, 222, 221, 197,
+    67, 250, 157, 232, 67, 16, 242, 131, 197, 67, 250, 157, 232, 67, 16, 130,
+    203, 208, 222, 220, 250, 157, 232, 67, 16, 208, 141, 208, 174, 250, 157,
+    232, 67, 16, 242, 131, 202, 19, 250, 157, 232, 67, 16, 208, 175, 242, 47,
+    250, 157, 232, 67, 16, 130, 200, 160, 237, 14, 250, 157, 232, 67, 16,
+    237, 89, 237, 14, 250, 157, 232, 67, 16, 202, 20, 237, 14, 250, 157, 232,
+    67, 16, 222, 221, 237, 14, 250, 157, 232, 67, 16, 242, 131, 237, 14, 250,
+    157, 232, 67, 16, 142, 203, 208, 201, 246, 250, 157, 232, 67, 16, 46,
+    203, 208, 201, 246, 250, 157, 232, 67, 16, 199, 91, 237, 14, 250, 157,
+    232, 67, 16, 230, 204, 237, 14, 250, 157, 232, 67, 16, 242, 39, 161, 250,
+    157, 232, 67, 16, 237, 89, 199, 90, 250, 157, 232, 67, 16, 192, 20, 250,
+    157, 232, 67, 16, 201, 247, 199, 90, 250, 157, 232, 67, 16, 204, 181,
+    197, 67, 250, 157, 232, 67, 16, 208, 175, 213, 111, 234, 31, 250, 157,
+    232, 67, 16, 208, 175, 208, 158, 250, 157, 232, 67, 16, 142, 246, 212,
+    199, 90, 250, 157, 232, 67, 16, 130, 246, 212, 199, 90, 250, 157, 232,
+    67, 16, 223, 111, 250, 157, 232, 67, 16, 207, 153, 250, 157, 232, 67, 16,
+    211, 216, 250, 157, 232, 67, 16, 250, 253, 197, 67, 250, 157, 232, 67,
+    16, 234, 33, 197, 67, 250, 157, 232, 67, 16, 223, 112, 197, 67, 250, 157,
+    232, 67, 16, 211, 217, 197, 67, 250, 157, 232, 67, 16, 250, 252, 213,
+    111, 242, 244, 77, 51, 250, 208, 4, 235, 92, 192, 21, 54, 203, 176, 211,
+    184, 247, 173, 248, 87, 109, 84, 219, 176, 4, 85, 236, 114, 223, 147,
+    109, 238, 248, 197, 65, 109, 236, 197, 197, 65, 109, 234, 92, 109, 239,
+    27, 109, 62, 50, 4, 246, 138, 84, 219, 175, 234, 63, 109, 250, 244, 222,
+    2, 109, 229, 212, 109, 47, 229, 5, 248, 194, 4, 213, 108, 47, 198, 186,
+    235, 96, 247, 136, 242, 131, 4, 213, 114, 54, 197, 63, 109, 216, 40, 109,
+    228, 107, 109, 211, 182, 230, 123, 109, 211, 182, 220, 200, 109, 210,
+    210, 109, 210, 209, 109, 236, 206, 238, 136, 16, 232, 136, 104, 202, 195,
+    109, 250, 157, 232, 67, 16, 208, 174, 237, 108, 204, 166, 222, 2, 109,
+    209, 101, 211, 61, 214, 170, 211, 61, 209, 96, 205, 232, 109, 242, 102,
+    205, 232, 109, 46, 210, 231, 113, 128, 46, 210, 231, 233, 191, 46, 210,
+    231, 106, 128, 51, 210, 231, 113, 128, 51, 210, 231, 233, 191, 51, 210,
+    231, 106, 128, 46, 50, 247, 165, 113, 238, 223, 46, 50, 247, 165, 233,
+    191, 46, 50, 247, 165, 106, 238, 223, 51, 50, 247, 165, 113, 238, 223,
+    51, 50, 247, 165, 233, 191, 51, 50, 247, 165, 106, 238, 223, 46, 238,
+    138, 247, 165, 113, 128, 46, 238, 138, 247, 165, 85, 210, 42, 46, 238,
+    138, 247, 165, 106, 128, 238, 138, 247, 165, 233, 191, 51, 238, 138, 247,
+    165, 113, 128, 51, 238, 138, 247, 165, 85, 210, 42, 51, 238, 138, 247,
+    165, 106, 128, 223, 142, 233, 191, 229, 5, 219, 176, 233, 191, 113, 46,
+    211, 164, 106, 51, 238, 138, 247, 165, 205, 208, 113, 51, 211, 164, 106,
+    46, 238, 138, 247, 165, 205, 208, 201, 127, 198, 248, 201, 127, 247, 187,
+    198, 249, 50, 186, 247, 188, 50, 186, 247, 188, 50, 247, 165, 136, 198,
+    249, 50, 186, 48, 16, 247, 187, 46, 84, 105, 219, 175, 51, 84, 105, 219,
+    175, 229, 5, 205, 251, 219, 174, 229, 5, 205, 251, 219, 173, 229, 5, 205,
+    251, 219, 172, 229, 5, 205, 251, 219, 171, 237, 68, 16, 152, 84, 26, 198,
+    249, 207, 101, 237, 68, 16, 152, 84, 26, 247, 188, 207, 101, 237, 68, 16,
+    152, 84, 4, 242, 130, 237, 68, 16, 152, 142, 26, 229, 5, 4, 242, 130,
+    237, 68, 16, 152, 130, 26, 229, 5, 4, 242, 130, 237, 68, 16, 152, 84, 4,
+    198, 185, 237, 68, 16, 152, 142, 26, 229, 5, 4, 198, 185, 237, 68, 16,
+    152, 130, 26, 229, 5, 4, 198, 185, 237, 68, 16, 152, 84, 26, 194, 124,
+    237, 68, 16, 152, 142, 26, 229, 5, 4, 194, 124, 237, 68, 16, 152, 130,
+    26, 229, 5, 4, 194, 124, 237, 68, 16, 152, 142, 26, 229, 4, 237, 68, 16,
+    152, 130, 26, 229, 4, 237, 68, 16, 152, 84, 26, 198, 249, 220, 28, 237,
+    68, 16, 152, 84, 26, 247, 188, 220, 28, 50, 232, 149, 207, 173, 109, 234,
+    133, 109, 84, 219, 176, 233, 191, 216, 234, 247, 150, 216, 234, 184, 136,
+    203, 194, 216, 234, 203, 195, 136, 219, 84, 216, 234, 184, 136, 103, 203,
+    180, 216, 234, 103, 203, 181, 136, 219, 84, 216, 234, 103, 203, 181, 222,
+    229, 216, 234, 198, 166, 216, 234, 200, 0, 216, 234, 210, 142, 234, 190,
+    230, 195, 232, 61, 198, 249, 210, 230, 247, 188, 210, 230, 198, 249, 238,
+    138, 186, 247, 188, 238, 138, 186, 198, 249, 198, 237, 204, 2, 186, 247,
+    188, 198, 237, 204, 2, 186, 62, 198, 202, 248, 72, 207, 82, 4, 242, 130,
+    201, 228, 232, 193, 251, 147, 238, 135, 234, 118, 223, 127, 237, 108,
+    233, 195, 109, 60, 207, 96, 55, 198, 185, 60, 220, 23, 55, 198, 185, 60,
+    197, 40, 55, 198, 185, 60, 235, 95, 55, 198, 185, 60, 207, 96, 55, 198,
+    186, 4, 84, 161, 60, 220, 23, 55, 198, 186, 4, 84, 161, 60, 207, 96, 198,
+    186, 4, 55, 84, 161, 251, 30, 242, 87, 201, 235, 199, 83, 242, 87, 228,
+    196, 4, 232, 173, 206, 38, 60, 217, 31, 220, 23, 198, 185, 60, 217, 31,
+    207, 96, 198, 185, 60, 217, 31, 197, 40, 198, 185, 60, 217, 31, 235, 95,
+    198, 185, 55, 84, 161, 60, 50, 39, 201, 238, 60, 242, 131, 39, 207, 247,
+    209, 139, 109, 209, 139, 211, 210, 109, 209, 139, 211, 212, 109, 209,
+    139, 203, 0, 109, 212, 14, 233, 182, 109, 16, 39, 212, 238, 16, 39, 202,
+    15, 80, 229, 242, 16, 39, 202, 15, 80, 199, 244, 16, 39, 234, 80, 80,
+    199, 244, 16, 39, 234, 80, 80, 198, 208, 16, 39, 234, 66, 16, 39, 251,
+    134, 16, 39, 248, 86, 16, 39, 248, 246, 16, 39, 229, 5, 200, 161, 16, 39,
+    219, 176, 233, 38, 16, 39, 84, 200, 161, 16, 39, 232, 136, 233, 38, 16,
+    39, 246, 203, 207, 172, 16, 39, 203, 232, 211, 125, 16, 39, 203, 232,
+    223, 190, 16, 39, 237, 180, 219, 166, 234, 1, 16, 39, 237, 47, 238, 243,
+    101, 16, 39, 237, 47, 238, 243, 104, 16, 39, 237, 47, 238, 243, 133, 16,
+    39, 237, 47, 238, 243, 134, 16, 39, 214, 199, 251, 134, 16, 39, 200, 254,
+    223, 253, 16, 39, 234, 80, 80, 198, 209, 247, 238, 16, 39, 246, 241, 16,
+    39, 234, 80, 80, 217, 30, 16, 39, 201, 151, 16, 39, 234, 1, 16, 39, 232,
+    251, 204, 165, 16, 39, 230, 194, 204, 165, 16, 39, 207, 248, 204, 165,
+    16, 39, 197, 55, 204, 165, 16, 39, 202, 160, 16, 39, 237, 86, 247, 242,
+    109, 211, 184, 247, 173, 16, 39, 214, 173, 16, 39, 237, 87, 232, 136,
+    104, 16, 39, 201, 152, 232, 136, 104, 212, 10, 128, 212, 10, 246, 112,
+    212, 10, 232, 139, 212, 10, 223, 121, 232, 139, 212, 10, 248, 83, 247,
+    119, 212, 10, 247, 181, 199, 113, 212, 10, 247, 161, 248, 199, 228, 40,
+    212, 10, 250, 231, 80, 242, 243, 212, 10, 237, 185, 212, 10, 238, 124,
+    251, 138, 212, 236, 212, 10, 55, 248, 247, 47, 17, 101, 47, 17, 104, 47,
+    17, 133, 47, 17, 134, 47, 17, 151, 47, 17, 170, 47, 17, 179, 47, 17, 174,
+    47, 17, 182, 47, 31, 200, 30, 47, 31, 234, 111, 47, 31, 197, 244, 47, 31,
+    199, 186, 47, 31, 232, 113, 47, 31, 233, 7, 47, 31, 203, 35, 47, 31, 204,
+    143, 47, 31, 234, 145, 47, 31, 214, 13, 47, 31, 197, 239, 125, 17, 101,
+    125, 17, 104, 125, 17, 133, 125, 17, 134, 125, 17, 151, 125, 17, 170,
+    125, 17, 179, 125, 17, 174, 125, 17, 182, 125, 31, 200, 30, 125, 31, 234,
+    111, 125, 31, 197, 244, 125, 31, 199, 186, 125, 31, 232, 113, 125, 31,
+    233, 7, 125, 31, 203, 35, 125, 31, 204, 143, 125, 31, 234, 145, 125, 31,
+    214, 13, 125, 31, 197, 239, 17, 90, 232, 71, 201, 238, 17, 103, 232, 71,
+    201, 238, 17, 112, 232, 71, 201, 238, 17, 232, 119, 232, 71, 201, 238,
+    17, 232, 214, 232, 71, 201, 238, 17, 203, 41, 232, 71, 201, 238, 17, 204,
+    146, 232, 71, 201, 238, 17, 234, 148, 232, 71, 201, 238, 17, 214, 16,
+    232, 71, 201, 238, 31, 200, 31, 232, 71, 201, 238, 31, 234, 112, 232, 71,
+    201, 238, 31, 197, 245, 232, 71, 201, 238, 31, 199, 187, 232, 71, 201,
+    238, 31, 232, 114, 232, 71, 201, 238, 31, 233, 8, 232, 71, 201, 238, 31,
+    203, 36, 232, 71, 201, 238, 31, 204, 144, 232, 71, 201, 238, 31, 234,
+    146, 232, 71, 201, 238, 31, 214, 14, 232, 71, 201, 238, 31, 197, 240,
+    232, 71, 201, 238, 125, 8, 2, 1, 64, 125, 8, 2, 1, 249, 226, 125, 8, 2,
+    1, 247, 52, 125, 8, 2, 1, 238, 95, 125, 8, 2, 1, 71, 125, 8, 2, 1, 233,
+    163, 125, 8, 2, 1, 232, 44, 125, 8, 2, 1, 230, 124, 125, 8, 2, 1, 70,
+    125, 8, 2, 1, 223, 65, 125, 8, 2, 1, 222, 184, 125, 8, 2, 1, 165, 125, 8,
+    2, 1, 218, 236, 125, 8, 2, 1, 215, 151, 125, 8, 2, 1, 74, 125, 8, 2, 1,
+    211, 93, 125, 8, 2, 1, 208, 247, 125, 8, 2, 1, 150, 125, 8, 2, 1, 206,
+    158, 125, 8, 2, 1, 200, 228, 125, 8, 2, 1, 68, 125, 8, 2, 1, 196, 236,
+    125, 8, 2, 1, 194, 202, 125, 8, 2, 1, 193, 223, 125, 8, 2, 1, 193, 148,
+    125, 8, 2, 1, 192, 155, 47, 8, 6, 1, 64, 47, 8, 6, 1, 249, 226, 47, 8, 6,
+    1, 247, 52, 47, 8, 6, 1, 238, 95, 47, 8, 6, 1, 71, 47, 8, 6, 1, 233, 163,
+    47, 8, 6, 1, 232, 44, 47, 8, 6, 1, 230, 124, 47, 8, 6, 1, 70, 47, 8, 6,
+    1, 223, 65, 47, 8, 6, 1, 222, 184, 47, 8, 6, 1, 165, 47, 8, 6, 1, 218,
+    236, 47, 8, 6, 1, 215, 151, 47, 8, 6, 1, 74, 47, 8, 6, 1, 211, 93, 47, 8,
+    6, 1, 208, 247, 47, 8, 6, 1, 150, 47, 8, 6, 1, 206, 158, 47, 8, 6, 1,
+    200, 228, 47, 8, 6, 1, 68, 47, 8, 6, 1, 196, 236, 47, 8, 6, 1, 194, 202,
+    47, 8, 6, 1, 193, 223, 47, 8, 6, 1, 193, 148, 47, 8, 6, 1, 192, 155, 47,
+    8, 2, 1, 64, 47, 8, 2, 1, 249, 226, 47, 8, 2, 1, 247, 52, 47, 8, 2, 1,
+    238, 95, 47, 8, 2, 1, 71, 47, 8, 2, 1, 233, 163, 47, 8, 2, 1, 232, 44,
+    47, 8, 2, 1, 230, 124, 47, 8, 2, 1, 70, 47, 8, 2, 1, 223, 65, 47, 8, 2,
+    1, 222, 184, 47, 8, 2, 1, 165, 47, 8, 2, 1, 218, 236, 47, 8, 2, 1, 215,
+    151, 47, 8, 2, 1, 74, 47, 8, 2, 1, 211, 93, 47, 8, 2, 1, 208, 247, 47, 8,
+    2, 1, 150, 47, 8, 2, 1, 206, 158, 47, 8, 2, 1, 200, 228, 47, 8, 2, 1, 68,
+    47, 8, 2, 1, 196, 236, 47, 8, 2, 1, 194, 202, 47, 8, 2, 1, 193, 223, 47,
+    8, 2, 1, 193, 148, 47, 8, 2, 1, 192, 155, 47, 17, 192, 76, 214, 199, 47,
+    31, 234, 111, 214, 199, 47, 31, 197, 244, 214, 199, 47, 31, 199, 186,
+    214, 199, 47, 31, 232, 113, 214, 199, 47, 31, 233, 7, 214, 199, 47, 31,
+    203, 35, 214, 199, 47, 31, 204, 143, 214, 199, 47, 31, 234, 145, 214,
+    199, 47, 31, 214, 13, 214, 199, 47, 31, 197, 239, 55, 47, 17, 101, 55,
+    47, 17, 104, 55, 47, 17, 133, 55, 47, 17, 134, 55, 47, 17, 151, 55, 47,
+    17, 170, 55, 47, 17, 179, 55, 47, 17, 174, 55, 47, 17, 182, 55, 47, 31,
+    200, 30, 214, 199, 47, 17, 192, 76, 105, 119, 152, 229, 4, 105, 119, 87,
+    229, 4, 105, 119, 152, 196, 105, 105, 119, 87, 196, 105, 105, 119, 152,
+    198, 170, 237, 186, 229, 4, 105, 119, 87, 198, 170, 237, 186, 229, 4,
+    105, 119, 152, 198, 170, 237, 186, 196, 105, 105, 119, 87, 198, 170, 237,
+    186, 196, 105, 105, 119, 152, 208, 170, 237, 186, 229, 4, 105, 119, 87,
+    208, 170, 237, 186, 229, 4, 105, 119, 152, 208, 170, 237, 186, 196, 105,
+    105, 119, 87, 208, 170, 237, 186, 196, 105, 105, 119, 152, 142, 26, 207,
+    101, 105, 119, 142, 152, 26, 51, 229, 227, 105, 119, 142, 87, 26, 51,
+    219, 195, 105, 119, 87, 142, 26, 207, 101, 105, 119, 152, 142, 26, 220,
+    28, 105, 119, 142, 152, 26, 46, 229, 227, 105, 119, 142, 87, 26, 46, 219,
+    195, 105, 119, 87, 142, 26, 220, 28, 105, 119, 152, 130, 26, 207, 101,
+    105, 119, 130, 152, 26, 51, 229, 227, 105, 119, 130, 87, 26, 51, 219,
+    195, 105, 119, 87, 130, 26, 207, 101, 105, 119, 152, 130, 26, 220, 28,
+    105, 119, 130, 152, 26, 46, 229, 227, 105, 119, 130, 87, 26, 46, 219,
+    195, 105, 119, 87, 130, 26, 220, 28, 105, 119, 152, 84, 26, 207, 101,
+    105, 119, 84, 152, 26, 51, 229, 227, 105, 119, 130, 87, 26, 51, 142, 219,
+    195, 105, 119, 142, 87, 26, 51, 130, 219, 195, 105, 119, 84, 87, 26, 51,
+    219, 195, 105, 119, 142, 152, 26, 51, 130, 229, 227, 105, 119, 130, 152,
+    26, 51, 142, 229, 227, 105, 119, 87, 84, 26, 207, 101, 105, 119, 152, 84,
+    26, 220, 28, 105, 119, 84, 152, 26, 46, 229, 227, 105, 119, 130, 87, 26,
+    46, 142, 219, 195, 105, 119, 142, 87, 26, 46, 130, 219, 195, 105, 119,
+    84, 87, 26, 46, 219, 195, 105, 119, 142, 152, 26, 46, 130, 229, 227, 105,
+    119, 130, 152, 26, 46, 142, 229, 227, 105, 119, 87, 84, 26, 220, 28, 105,
+    119, 152, 142, 26, 229, 4, 105, 119, 46, 87, 26, 51, 142, 219, 195, 105,
+    119, 51, 87, 26, 46, 142, 219, 195, 105, 119, 142, 152, 26, 229, 5, 229,
+    227, 105, 119, 142, 87, 26, 229, 5, 219, 195, 105, 119, 51, 152, 26, 46,
+    142, 229, 227, 105, 119, 46, 152, 26, 51, 142, 229, 227, 105, 119, 87,
+    142, 26, 229, 4, 105, 119, 152, 130, 26, 229, 4, 105, 119, 46, 87, 26,
+    51, 130, 219, 195, 105, 119, 51, 87, 26, 46, 130, 219, 195, 105, 119,
+    130, 152, 26, 229, 5, 229, 227, 105, 119, 130, 87, 26, 229, 5, 219, 195,
+    105, 119, 51, 152, 26, 46, 130, 229, 227, 105, 119, 46, 152, 26, 51, 130,
+    229, 227, 105, 119, 87, 130, 26, 229, 4, 105, 119, 152, 84, 26, 229, 4,
+    105, 119, 46, 87, 26, 51, 84, 219, 195, 105, 119, 51, 87, 26, 46, 84,
+    219, 195, 105, 119, 84, 152, 26, 229, 5, 229, 227, 105, 119, 130, 87, 26,
+    142, 229, 5, 219, 195, 105, 119, 142, 87, 26, 130, 229, 5, 219, 195, 105,
+    119, 84, 87, 26, 229, 5, 219, 195, 105, 119, 46, 130, 87, 26, 51, 142,
+    219, 195, 105, 119, 51, 130, 87, 26, 46, 142, 219, 195, 105, 119, 46,
+    142, 87, 26, 51, 130, 219, 195, 105, 119, 51, 142, 87, 26, 46, 130, 219,
+    195, 105, 119, 142, 152, 26, 130, 229, 5, 229, 227, 105, 119, 130, 152,
+    26, 142, 229, 5, 229, 227, 105, 119, 51, 152, 26, 46, 84, 229, 227, 105,
+    119, 46, 152, 26, 51, 84, 229, 227, 105, 119, 87, 84, 26, 229, 4, 105,
+    119, 152, 55, 237, 186, 229, 4, 105, 119, 87, 55, 237, 186, 229, 4, 105,
+    119, 152, 55, 237, 186, 196, 105, 105, 119, 87, 55, 237, 186, 196, 105,
+    105, 119, 55, 229, 4, 105, 119, 55, 196, 105, 105, 119, 142, 203, 74, 26,
+    51, 235, 106, 105, 119, 142, 55, 26, 51, 203, 73, 105, 119, 55, 142, 26,
+    207, 101, 105, 119, 142, 203, 74, 26, 46, 235, 106, 105, 119, 142, 55,
+    26, 46, 203, 73, 105, 119, 55, 142, 26, 220, 28, 105, 119, 130, 203, 74,
+    26, 51, 235, 106, 105, 119, 130, 55, 26, 51, 203, 73, 105, 119, 55, 130,
+    26, 207, 101, 105, 119, 130, 203, 74, 26, 46, 235, 106, 105, 119, 130,
+    55, 26, 46, 203, 73, 105, 119, 55, 130, 26, 220, 28, 105, 119, 84, 203,
+    74, 26, 51, 235, 106, 105, 119, 84, 55, 26, 51, 203, 73, 105, 119, 55,
+    84, 26, 207, 101, 105, 119, 84, 203, 74, 26, 46, 235, 106, 105, 119, 84,
+    55, 26, 46, 203, 73, 105, 119, 55, 84, 26, 220, 28, 105, 119, 142, 203,
+    74, 26, 229, 5, 235, 106, 105, 119, 142, 55, 26, 229, 5, 203, 73, 105,
+    119, 55, 142, 26, 229, 4, 105, 119, 130, 203, 74, 26, 229, 5, 235, 106,
+    105, 119, 130, 55, 26, 229, 5, 203, 73, 105, 119, 55, 130, 26, 229, 4,
+    105, 119, 84, 203, 74, 26, 229, 5, 235, 106, 105, 119, 84, 55, 26, 229,
+    5, 203, 73, 105, 119, 55, 84, 26, 229, 4, 105, 119, 152, 250, 115, 142,
+    26, 207, 101, 105, 119, 152, 250, 115, 142, 26, 220, 28, 105, 119, 152,
+    250, 115, 130, 26, 220, 28, 105, 119, 152, 250, 115, 130, 26, 207, 101,
+    105, 119, 152, 237, 11, 113, 51, 115, 106, 220, 28, 105, 119, 152, 237,
+    11, 113, 46, 115, 106, 207, 101, 105, 119, 152, 237, 11, 238, 183, 105,
+    119, 152, 220, 28, 105, 119, 152, 197, 41, 105, 119, 152, 207, 101, 105,
+    119, 152, 235, 96, 105, 119, 87, 220, 28, 105, 119, 87, 197, 41, 105,
+    119, 87, 207, 101, 105, 119, 87, 235, 96, 105, 119, 152, 46, 26, 87, 207,
+    101, 105, 119, 152, 130, 26, 87, 235, 96, 105, 119, 87, 46, 26, 152, 207,
+    101, 105, 119, 87, 130, 26, 152, 235, 96, 113, 138, 247, 238, 106, 90,
+    234, 144, 247, 238, 106, 90, 208, 168, 247, 238, 106, 112, 234, 142, 247,
+    238, 106, 138, 247, 238, 106, 232, 214, 234, 142, 247, 238, 106, 112,
+    208, 166, 247, 238, 106, 204, 146, 234, 142, 247, 238, 232, 71, 247, 238,
+    46, 204, 146, 234, 142, 247, 238, 46, 112, 208, 166, 247, 238, 46, 232,
+    214, 234, 142, 247, 238, 46, 138, 247, 238, 46, 112, 234, 142, 247, 238,
+    46, 90, 208, 168, 247, 238, 46, 90, 234, 144, 247, 238, 51, 138, 247,
+    238, 152, 204, 52, 217, 31, 204, 52, 237, 191, 204, 52, 113, 90, 234,
+    144, 247, 238, 51, 90, 234, 144, 247, 238, 208, 172, 106, 220, 28, 208,
+    172, 106, 207, 101, 208, 172, 113, 220, 28, 208, 172, 113, 46, 26, 106,
+    46, 26, 106, 207, 101, 208, 172, 113, 46, 26, 106, 207, 101, 208, 172,
+    113, 46, 26, 113, 51, 26, 106, 220, 28, 208, 172, 113, 46, 26, 113, 51,
+    26, 106, 207, 101, 208, 172, 113, 207, 101, 208, 172, 113, 51, 26, 106,
+    220, 28, 208, 172, 113, 51, 26, 106, 46, 26, 106, 207, 101, 60, 202, 106,
+    62, 202, 106, 62, 50, 4, 207, 7, 238, 222, 62, 50, 238, 254, 60, 2, 202,
+    106, 50, 4, 229, 5, 232, 249, 50, 4, 84, 232, 249, 50, 4, 211, 146, 238,
+    177, 232, 249, 50, 4, 113, 46, 115, 106, 51, 232, 249, 50, 4, 113, 51,
+    115, 106, 46, 232, 249, 50, 4, 237, 11, 238, 177, 232, 249, 60, 2, 202,
+    106, 62, 2, 202, 106, 60, 207, 242, 62, 207, 242, 60, 84, 207, 242, 62,
+    84, 207, 242, 60, 210, 234, 62, 210, 234, 60, 197, 40, 198, 185, 62, 197,
+    40, 198, 185, 60, 197, 40, 2, 198, 185, 62, 197, 40, 2, 198, 185, 60,
+    207, 96, 198, 185, 62, 207, 96, 198, 185, 60, 207, 96, 2, 198, 185, 62,
+    207, 96, 2, 198, 185, 60, 207, 96, 209, 189, 62, 207, 96, 209, 189, 60,
+    235, 95, 198, 185, 62, 235, 95, 198, 185, 60, 235, 95, 2, 198, 185, 62,
+    235, 95, 2, 198, 185, 60, 220, 23, 198, 185, 62, 220, 23, 198, 185, 60,
+    220, 23, 2, 198, 185, 62, 220, 23, 2, 198, 185, 60, 220, 23, 209, 189,
+    62, 220, 23, 209, 189, 60, 237, 4, 62, 237, 4, 62, 237, 5, 238, 254, 60,
+    2, 237, 4, 232, 223, 219, 43, 62, 242, 130, 235, 111, 242, 130, 242, 131,
+    4, 84, 232, 249, 247, 102, 60, 242, 130, 242, 131, 4, 46, 138, 247, 248,
+    242, 131, 4, 51, 138, 247, 248, 242, 131, 4, 106, 138, 247, 248, 242,
+    131, 4, 113, 138, 247, 248, 242, 131, 4, 113, 51, 208, 172, 247, 248,
+    242, 131, 4, 251, 9, 247, 77, 113, 46, 208, 172, 247, 248, 46, 138, 60,
+    242, 130, 51, 138, 60, 242, 130, 223, 123, 247, 106, 223, 123, 62, 242,
+    130, 113, 138, 223, 123, 62, 242, 130, 106, 138, 223, 123, 62, 242, 130,
+    113, 46, 208, 172, 242, 124, 250, 114, 113, 51, 208, 172, 242, 124, 250,
+    114, 106, 51, 208, 172, 242, 124, 250, 114, 106, 46, 208, 172, 242, 124,
+    250, 114, 113, 138, 242, 130, 106, 138, 242, 130, 60, 106, 51, 198, 185,
+    60, 106, 46, 198, 185, 60, 113, 46, 198, 185, 60, 113, 51, 198, 185, 62,
+    247, 106, 50, 4, 46, 138, 247, 248, 50, 4, 51, 138, 247, 248, 50, 4, 113,
+    46, 237, 11, 138, 247, 248, 50, 4, 106, 51, 237, 11, 138, 247, 248, 62,
+    50, 4, 84, 248, 7, 219, 175, 62, 197, 40, 198, 186, 4, 236, 114, 197, 40,
+    198, 186, 4, 46, 138, 247, 248, 197, 40, 198, 186, 4, 51, 138, 247, 248,
+    220, 73, 242, 130, 62, 50, 4, 113, 46, 208, 171, 62, 50, 4, 106, 46, 208,
+    171, 62, 50, 4, 106, 51, 208, 171, 62, 50, 4, 113, 51, 208, 171, 62, 242,
+    131, 4, 113, 46, 208, 171, 62, 242, 131, 4, 106, 46, 208, 171, 62, 242,
+    131, 4, 106, 51, 208, 171, 62, 242, 131, 4, 113, 51, 208, 171, 113, 46,
+    198, 185, 113, 51, 198, 185, 106, 46, 198, 185, 62, 217, 31, 202, 106,
+    60, 217, 31, 202, 106, 62, 217, 31, 2, 202, 106, 60, 217, 31, 2, 202,
+    106, 106, 51, 198, 185, 60, 201, 124, 4, 208, 12, 242, 75, 197, 81, 202,
+    214, 242, 41, 60, 202, 19, 62, 202, 19, 219, 192, 199, 143, 201, 123,
+    250, 57, 213, 134, 237, 58, 213, 134, 239, 7, 211, 169, 60, 200, 41, 62,
+    200, 41, 248, 213, 247, 173, 248, 213, 105, 4, 242, 243, 248, 213, 105,
+    4, 193, 223, 206, 51, 197, 82, 4, 208, 42, 235, 69, 228, 202, 248, 58,
+    62, 203, 204, 210, 42, 60, 203, 204, 210, 42, 204, 39, 207, 168, 207, 16,
+    232, 179, 229, 234, 247, 106, 60, 46, 209, 188, 223, 176, 60, 51, 209,
+    188, 223, 176, 62, 46, 209, 188, 223, 176, 62, 130, 209, 188, 223, 176,
+    62, 51, 209, 188, 223, 176, 62, 142, 209, 188, 223, 176, 203, 11, 26,
+    238, 181, 246, 187, 57, 208, 54, 57, 248, 15, 57, 247, 10, 250, 196, 211,
+    147, 238, 183, 242, 216, 207, 153, 238, 184, 80, 219, 64, 238, 184, 80,
+    223, 30, 202, 20, 26, 238, 193, 233, 62, 109, 251, 117, 204, 42, 230, 70,
+    26, 203, 116, 210, 180, 109, 193, 11, 193, 95, 198, 175, 39, 229, 229,
+    198, 175, 39, 220, 102, 198, 175, 39, 232, 231, 198, 175, 39, 199, 144,
+    198, 175, 39, 194, 52, 198, 175, 39, 194, 129, 198, 175, 39, 216, 9, 198,
+    175, 39, 234, 189, 194, 80, 80, 237, 32, 62, 232, 83, 233, 91, 62, 202,
+    230, 233, 91, 60, 202, 230, 233, 91, 62, 201, 124, 4, 208, 12, 232, 226,
+    208, 168, 216, 29, 220, 66, 208, 168, 216, 29, 216, 255, 233, 30, 57,
+    234, 189, 217, 166, 57, 222, 199, 206, 13, 197, 22, 214, 189, 209, 202,
+    250, 100, 200, 98, 231, 145, 246, 239, 219, 246, 196, 9, 219, 206, 205,
+    234, 206, 77, 246, 221, 250, 132, 209, 244, 62, 242, 225, 221, 176, 62,
+    242, 225, 208, 160, 62, 242, 225, 207, 25, 62, 242, 225, 248, 5, 62, 242,
+    225, 221, 122, 62, 242, 225, 210, 192, 60, 242, 225, 221, 176, 60, 242,
+    225, 208, 160, 60, 242, 225, 207, 25, 60, 242, 225, 248, 5, 60, 242, 225,
+    221, 122, 60, 242, 225, 210, 192, 60, 202, 158, 201, 136, 62, 229, 234,
+    201, 136, 62, 237, 5, 201, 136, 60, 242, 72, 201, 136, 62, 202, 158, 201,
+    136, 60, 229, 234, 201, 136, 60, 237, 5, 201, 136, 62, 242, 72, 201, 136,
+    228, 202, 202, 111, 208, 168, 213, 105, 234, 144, 213, 105, 248, 119,
+    234, 144, 213, 100, 248, 119, 203, 34, 213, 100, 215, 185, 232, 196, 57,
+    215, 185, 215, 43, 57, 215, 185, 204, 26, 57, 194, 91, 200, 248, 238,
+    183, 234, 186, 200, 248, 238, 183, 197, 51, 207, 238, 109, 207, 238, 16,
+    39, 197, 205, 209, 222, 207, 238, 16, 39, 197, 203, 209, 222, 207, 238,
+    16, 39, 197, 202, 209, 222, 207, 238, 16, 39, 197, 200, 209, 222, 207,
+    238, 16, 39, 197, 198, 209, 222, 207, 238, 16, 39, 197, 196, 209, 222,
+    207, 238, 16, 39, 197, 194, 209, 222, 207, 238, 16, 39, 231, 142, 217,
+    99, 60, 197, 51, 207, 238, 109, 207, 239, 210, 252, 109, 210, 221, 210,
+    252, 109, 210, 125, 210, 252, 57, 194, 78, 109, 236, 253, 233, 90, 236,
+    253, 233, 89, 236, 253, 233, 88, 236, 253, 233, 87, 236, 253, 233, 86,
+    236, 253, 233, 85, 62, 242, 131, 4, 78, 207, 101, 62, 242, 131, 4, 103,
+    236, 111, 60, 242, 131, 4, 62, 78, 207, 101, 60, 242, 131, 4, 103, 62,
+    236, 111, 216, 45, 39, 193, 95, 216, 45, 39, 193, 10, 236, 234, 39, 230,
+    205, 193, 95, 236, 234, 39, 219, 238, 193, 10, 236, 234, 39, 219, 238,
+    193, 95, 236, 234, 39, 230, 205, 193, 10, 62, 232, 206, 60, 232, 206,
+    230, 70, 26, 210, 47, 250, 219, 238, 180, 201, 59, 202, 29, 80, 251, 91,
+    205, 252, 251, 25, 232, 175, 231, 155, 202, 29, 80, 229, 201, 250, 16,
+    109, 232, 191, 211, 121, 62, 202, 19, 112, 219, 170, 238, 240, 207, 101,
+    112, 219, 170, 238, 240, 220, 28, 194, 140, 57, 139, 195, 240, 57, 235,
+    101, 233, 30, 57, 235, 101, 217, 166, 57, 223, 133, 233, 30, 26, 217,
+    166, 57, 217, 166, 26, 233, 30, 57, 217, 166, 4, 201, 208, 57, 217, 166,
+    4, 201, 208, 26, 217, 166, 26, 233, 30, 57, 84, 217, 166, 4, 201, 208,
+    57, 229, 5, 217, 166, 4, 201, 208, 57, 217, 31, 62, 242, 130, 217, 31,
+    60, 242, 130, 217, 31, 2, 62, 242, 130, 217, 119, 109, 236, 170, 109,
+    197, 48, 210, 220, 109, 242, 53, 232, 66, 197, 18, 214, 180, 246, 123,
+    211, 43, 222, 205, 196, 50, 242, 195, 60, 216, 30, 219, 189, 204, 75,
+    204, 177, 208, 150, 204, 154, 202, 202, 248, 217, 248, 179, 108, 222, 1,
+    62, 235, 81, 217, 160, 62, 235, 81, 221, 176, 60, 235, 81, 217, 160, 60,
+    235, 81, 221, 176, 202, 215, 194, 39, 202, 218, 201, 124, 248, 93, 242,
+    75, 208, 41, 60, 202, 214, 199, 145, 242, 76, 26, 208, 41, 163, 62, 203,
+    204, 210, 42, 163, 60, 203, 204, 210, 42, 62, 237, 5, 223, 191, 202, 106,
+    238, 176, 220, 80, 236, 201, 246, 217, 211, 172, 210, 47, 246, 218, 202,
+    249, 229, 211, 4, 62, 238, 183, 47, 238, 176, 220, 80, 246, 113, 213,
+    143, 234, 57, 250, 249, 211, 203, 46, 194, 115, 198, 216, 60, 197, 217,
+    46, 194, 115, 198, 216, 62, 197, 217, 46, 194, 115, 198, 216, 60, 46,
+    220, 81, 216, 254, 62, 46, 220, 81, 216, 254, 235, 76, 202, 240, 57, 87,
+    62, 235, 95, 198, 185, 46, 242, 84, 234, 57, 108, 206, 51, 233, 71, 237,
+    11, 223, 191, 62, 242, 131, 223, 191, 60, 202, 106, 60, 198, 149, 207,
+    179, 46, 234, 56, 207, 179, 46, 234, 55, 250, 31, 16, 39, 197, 22, 87,
+    242, 131, 4, 201, 208, 26, 103, 236, 112, 58, 210, 143, 207, 98, 223,
+    135, 210, 143, 220, 25, 223, 135, 210, 143, 223, 121, 210, 143, 60, 238,
+    184, 211, 212, 203, 233, 203, 221, 203, 169, 242, 160, 246, 195, 229,
+    138, 203, 42, 231, 156, 194, 39, 228, 175, 231, 156, 4, 230, 39, 217,
+    142, 16, 39, 219, 194, 216, 9, 197, 82, 211, 212, 230, 195, 232, 120,
+    232, 207, 223, 191, 229, 25, 233, 20, 206, 72, 50, 232, 119, 238, 222,
+    203, 14, 228, 50, 203, 18, 210, 117, 4, 248, 217, 200, 22, 223, 50, 248,
+    199, 109, 229, 239, 230, 207, 109, 232, 74, 209, 39, 238, 149, 211, 212,
+    60, 202, 106, 62, 232, 207, 4, 229, 5, 85, 60, 201, 209, 60, 206, 82,
+    205, 238, 113, 247, 243, 205, 238, 60, 205, 238, 106, 247, 243, 205, 238,
+    62, 205, 238, 62, 87, 242, 244, 77, 200, 42, 219, 104, 57, 200, 115, 235,
+    75, 251, 50, 234, 52, 208, 39, 232, 219, 208, 39, 230, 62, 196, 37, 230,
+    62, 193, 247, 230, 62, 106, 51, 210, 153, 210, 153, 113, 51, 210, 153,
+    62, 214, 49, 60, 214, 49, 242, 244, 77, 87, 242, 244, 77, 215, 214, 193,
+    223, 87, 215, 214, 193, 223, 248, 213, 193, 223, 87, 248, 213, 193, 223,
+    211, 121, 33, 238, 183, 87, 33, 238, 183, 211, 184, 246, 138, 238, 183,
+    87, 211, 184, 246, 138, 238, 183, 8, 238, 183, 204, 50, 62, 8, 238, 183,
+    211, 121, 8, 238, 183, 217, 163, 238, 183, 202, 20, 80, 237, 178, 232,
+    119, 200, 61, 250, 37, 232, 119, 248, 214, 250, 37, 87, 232, 119, 248,
+    214, 250, 37, 232, 119, 242, 70, 250, 37, 60, 232, 119, 209, 190, 202,
+    19, 62, 232, 119, 209, 190, 202, 19, 202, 153, 201, 218, 211, 121, 62,
+    202, 19, 47, 62, 202, 19, 211, 184, 246, 138, 60, 202, 19, 60, 246, 138,
+    62, 202, 19, 211, 121, 60, 202, 19, 87, 211, 121, 60, 202, 19, 209, 254,
+    202, 19, 204, 50, 62, 202, 19, 87, 250, 37, 211, 184, 246, 138, 250, 37,
+    234, 148, 202, 122, 250, 37, 234, 148, 209, 190, 60, 202, 19, 234, 148,
+    209, 190, 209, 254, 202, 19, 203, 41, 209, 190, 60, 202, 19, 234, 148,
+    209, 190, 207, 240, 60, 202, 19, 87, 234, 148, 209, 190, 207, 240, 60,
+    202, 19, 197, 245, 209, 190, 60, 202, 19, 203, 36, 209, 190, 250, 37,
+    200, 61, 250, 37, 211, 184, 246, 138, 200, 61, 250, 37, 87, 200, 61, 250,
+    37, 203, 41, 210, 105, 60, 26, 62, 232, 178, 60, 232, 178, 62, 232, 178,
+    234, 148, 210, 105, 211, 121, 60, 232, 178, 47, 211, 184, 246, 138, 234,
+    148, 209, 190, 202, 19, 87, 200, 61, 209, 254, 250, 37, 202, 216, 199,
+    107, 198, 178, 202, 216, 87, 242, 221, 202, 216, 202, 155, 87, 202, 155,
+    248, 214, 250, 37, 234, 148, 200, 61, 209, 74, 250, 37, 87, 234, 148,
+    200, 61, 209, 74, 250, 37, 238, 184, 77, 204, 50, 62, 242, 130, 214, 199,
+    108, 238, 184, 77, 106, 51, 235, 71, 62, 202, 106, 113, 51, 235, 71, 62,
+    202, 106, 106, 51, 204, 50, 62, 202, 106, 113, 51, 204, 50, 62, 202, 106,
+    60, 208, 159, 122, 211, 150, 62, 208, 159, 122, 211, 150, 62, 233, 204,
+    122, 211, 150, 60, 237, 5, 216, 113, 62, 193, 223, 87, 233, 204, 122,
+    109, 152, 84, 161, 217, 31, 84, 161, 87, 84, 161, 87, 203, 74, 163, 242,
+    39, 208, 142, 122, 211, 150, 87, 203, 74, 242, 39, 208, 142, 122, 211,
+    150, 87, 55, 163, 242, 39, 208, 142, 122, 211, 150, 87, 55, 242, 39, 208,
+    142, 122, 211, 150, 87, 132, 203, 74, 242, 39, 208, 142, 122, 211, 150,
+    87, 132, 55, 242, 39, 208, 142, 122, 211, 150, 238, 130, 202, 0, 210,
+    244, 3, 211, 150, 87, 233, 204, 122, 211, 150, 87, 229, 234, 233, 204,
+    122, 211, 150, 87, 60, 229, 233, 207, 16, 87, 60, 229, 234, 247, 106,
+    232, 179, 229, 233, 207, 16, 232, 179, 229, 234, 247, 106, 217, 31, 46,
+    210, 231, 211, 150, 217, 31, 51, 210, 231, 211, 150, 217, 31, 232, 192,
+    46, 210, 231, 211, 150, 217, 31, 232, 192, 51, 210, 231, 211, 150, 217,
+    31, 220, 23, 250, 208, 247, 165, 211, 150, 217, 31, 207, 96, 250, 208,
+    247, 165, 211, 150, 87, 220, 23, 250, 208, 208, 142, 122, 211, 150, 87,
+    207, 96, 250, 208, 208, 142, 122, 211, 150, 87, 220, 23, 250, 208, 247,
+    165, 211, 150, 87, 207, 96, 250, 208, 247, 165, 211, 150, 152, 46, 198,
+    237, 204, 2, 247, 165, 211, 150, 152, 51, 198, 237, 204, 2, 247, 165,
+    211, 150, 217, 31, 46, 238, 138, 247, 165, 211, 150, 217, 31, 51, 238,
+    138, 247, 165, 211, 150, 236, 213, 214, 199, 47, 17, 101, 236, 213, 214,
+    199, 47, 17, 104, 236, 213, 214, 199, 47, 17, 133, 236, 213, 214, 199,
+    47, 17, 134, 236, 213, 214, 199, 47, 17, 151, 236, 213, 214, 199, 47, 17,
+    170, 236, 213, 214, 199, 47, 17, 179, 236, 213, 214, 199, 47, 17, 174,
+    236, 213, 214, 199, 47, 17, 182, 236, 213, 214, 199, 47, 31, 200, 30,
+    236, 213, 47, 49, 17, 101, 236, 213, 47, 49, 17, 104, 236, 213, 47, 49,
+    17, 133, 236, 213, 47, 49, 17, 134, 236, 213, 47, 49, 17, 151, 236, 213,
+    47, 49, 17, 170, 236, 213, 47, 49, 17, 179, 236, 213, 47, 49, 17, 174,
+    236, 213, 47, 49, 17, 182, 236, 213, 47, 49, 31, 200, 30, 236, 213, 214,
+    199, 47, 49, 17, 101, 236, 213, 214, 199, 47, 49, 17, 104, 236, 213, 214,
+    199, 47, 49, 17, 133, 236, 213, 214, 199, 47, 49, 17, 134, 236, 213, 214,
+    199, 47, 49, 17, 151, 236, 213, 214, 199, 47, 49, 17, 170, 236, 213, 214,
+    199, 47, 49, 17, 179, 236, 213, 214, 199, 47, 49, 17, 174, 236, 213, 214,
+    199, 47, 49, 17, 182, 236, 213, 214, 199, 47, 49, 31, 200, 30, 87, 194,
+    63, 94, 54, 87, 102, 57, 87, 216, 113, 57, 87, 236, 172, 57, 87, 202,
+    171, 234, 186, 54, 87, 94, 54, 87, 178, 234, 186, 54, 235, 86, 209, 192,
+    94, 54, 87, 207, 8, 94, 54, 198, 184, 94, 54, 87, 198, 184, 94, 54, 237,
+    184, 198, 184, 94, 54, 87, 237, 184, 198, 184, 94, 54, 60, 94, 54, 199,
+    160, 198, 247, 94, 250, 77, 199, 160, 247, 186, 94, 250, 77, 60, 94, 250,
+    77, 87, 60, 238, 130, 235, 92, 26, 94, 54, 87, 60, 238, 130, 197, 30, 26,
+    94, 54, 202, 103, 60, 94, 54, 87, 239, 20, 60, 94, 54, 207, 95, 62, 94,
+    54, 220, 22, 62, 94, 54, 248, 251, 204, 50, 62, 94, 54, 232, 86, 204, 50,
+    62, 94, 54, 87, 106, 207, 94, 62, 94, 54, 87, 113, 207, 94, 62, 94, 54,
+    213, 107, 106, 207, 94, 62, 94, 54, 238, 138, 219, 69, 213, 107, 113,
+    207, 94, 62, 94, 54, 47, 87, 62, 94, 54, 194, 74, 94, 54, 247, 247, 202,
+    171, 234, 186, 54, 247, 247, 94, 54, 247, 247, 178, 234, 186, 54, 87,
+    247, 247, 202, 171, 234, 186, 54, 87, 247, 247, 94, 54, 87, 247, 247,
+    178, 234, 186, 54, 200, 63, 94, 54, 87, 200, 62, 94, 54, 194, 101, 94,
+    54, 87, 194, 101, 94, 54, 211, 178, 94, 54, 55, 238, 138, 219, 69, 112,
+    236, 223, 250, 207, 62, 198, 186, 238, 254, 2, 62, 198, 185, 210, 120,
+    211, 184, 201, 153, 211, 184, 201, 105, 46, 206, 157, 248, 237, 237, 82,
+    51, 206, 157, 248, 237, 237, 82, 211, 164, 4, 78, 223, 145, 207, 169,
+    202, 190, 209, 114, 201, 153, 201, 106, 209, 114, 202, 189, 84, 248, 194,
+    4, 229, 5, 111, 13, 207, 73, 237, 10, 184, 236, 171, 13, 233, 71, 237,
+    10, 108, 219, 93, 250, 217, 108, 219, 93, 211, 163, 62, 237, 5, 4, 246,
+    136, 236, 114, 26, 4, 236, 114, 234, 116, 80, 211, 176, 197, 29, 106, 51,
+    238, 224, 4, 236, 114, 113, 46, 238, 224, 4, 236, 114, 46, 211, 123, 222,
+    231, 51, 211, 123, 222, 231, 232, 71, 211, 123, 222, 231, 220, 73, 130,
+    200, 159, 220, 73, 142, 200, 159, 46, 26, 51, 55, 198, 8, 46, 26, 51,
+    200, 159, 46, 215, 218, 184, 51, 200, 159, 184, 46, 200, 159, 130, 200,
+    160, 4, 242, 131, 58, 219, 44, 236, 178, 247, 64, 229, 5, 206, 202, 62,
+    239, 19, 237, 4, 62, 239, 19, 237, 5, 4, 114, 199, 117, 62, 239, 19, 237,
+    5, 4, 94, 199, 117, 62, 50, 4, 114, 199, 117, 62, 50, 4, 94, 199, 117,
+    13, 46, 62, 50, 186, 13, 51, 62, 50, 186, 13, 46, 250, 208, 186, 13, 51,
+    250, 208, 186, 13, 46, 55, 250, 208, 186, 13, 51, 55, 250, 208, 186, 13,
+    46, 62, 198, 237, 204, 2, 186, 13, 51, 62, 198, 237, 204, 2, 186, 13, 46,
+    232, 192, 210, 230, 13, 51, 232, 192, 210, 230, 197, 30, 208, 170, 54,
+    235, 92, 208, 170, 54, 250, 182, 231, 195, 242, 131, 54, 242, 86, 231,
+    195, 242, 131, 54, 51, 61, 4, 47, 209, 206, 184, 114, 54, 184, 94, 54,
+    184, 46, 51, 54, 184, 114, 55, 54, 184, 94, 55, 54, 184, 46, 51, 55, 54,
+    184, 114, 61, 232, 89, 161, 184, 94, 61, 232, 89, 161, 184, 114, 55, 61,
+    232, 89, 161, 184, 94, 55, 61, 232, 89, 161, 184, 94, 202, 99, 54, 66,
+    67, 247, 241, 66, 67, 236, 110, 66, 67, 235, 238, 66, 67, 236, 109, 66,
+    67, 235, 174, 66, 67, 236, 45, 66, 67, 235, 237, 66, 67, 236, 108, 66,
+    67, 235, 142, 66, 67, 236, 13, 66, 67, 235, 205, 66, 67, 236, 76, 66, 67,
+    235, 173, 66, 67, 236, 44, 66, 67, 235, 236, 66, 67, 236, 107, 66, 67,
+    235, 126, 66, 67, 235, 253, 66, 67, 235, 189, 66, 67, 236, 60, 66, 67,
+    235, 157, 66, 67, 236, 28, 66, 67, 235, 220, 66, 67, 236, 91, 66, 67,
+    235, 141, 66, 67, 236, 12, 66, 67, 235, 204, 66, 67, 236, 75, 66, 67,
+    235, 172, 66, 67, 236, 43, 66, 67, 235, 235, 66, 67, 236, 106, 66, 67,
+    235, 118, 66, 67, 235, 245, 66, 67, 235, 181, 66, 67, 236, 52, 66, 67,
+    235, 149, 66, 67, 236, 20, 66, 67, 235, 212, 66, 67, 236, 83, 66, 67,
+    235, 133, 66, 67, 236, 4, 66, 67, 235, 196, 66, 67, 236, 67, 66, 67, 235,
+    164, 66, 67, 236, 35, 66, 67, 235, 227, 66, 67, 236, 98, 66, 67, 235,
+    125, 66, 67, 235, 252, 66, 67, 235, 188, 66, 67, 236, 59, 66, 67, 235,
+    156, 66, 67, 236, 27, 66, 67, 235, 219, 66, 67, 236, 90, 66, 67, 235,
+    140, 66, 67, 236, 11, 66, 67, 235, 203, 66, 67, 236, 74, 66, 67, 235,
+    171, 66, 67, 236, 42, 66, 67, 235, 234, 66, 67, 236, 105, 66, 67, 235,
+    114, 66, 67, 235, 241, 66, 67, 235, 177, 66, 67, 236, 48, 66, 67, 235,
+    145, 66, 67, 236, 16, 66, 67, 235, 208, 66, 67, 236, 79, 66, 67, 235,
+    129, 66, 67, 236, 0, 66, 67, 235, 192, 66, 67, 236, 63, 66, 67, 235, 160,
+    66, 67, 236, 31, 66, 67, 235, 223, 66, 67, 236, 94, 66, 67, 235, 121, 66,
+    67, 235, 248, 66, 67, 235, 184, 66, 67, 236, 55, 66, 67, 235, 152, 66,
+    67, 236, 23, 66, 67, 235, 215, 66, 67, 236, 86, 66, 67, 235, 136, 66, 67,
+    236, 7, 66, 67, 235, 199, 66, 67, 236, 70, 66, 67, 235, 167, 66, 67, 236,
+    38, 66, 67, 235, 230, 66, 67, 236, 101, 66, 67, 235, 117, 66, 67, 235,
+    244, 66, 67, 235, 180, 66, 67, 236, 51, 66, 67, 235, 148, 66, 67, 236,
+    19, 66, 67, 235, 211, 66, 67, 236, 82, 66, 67, 235, 132, 66, 67, 236, 3,
+    66, 67, 235, 195, 66, 67, 236, 66, 66, 67, 235, 163, 66, 67, 236, 34, 66,
+    67, 235, 226, 66, 67, 236, 97, 66, 67, 235, 124, 66, 67, 235, 251, 66,
+    67, 235, 187, 66, 67, 236, 58, 66, 67, 235, 155, 66, 67, 236, 26, 66, 67,
+    235, 218, 66, 67, 236, 89, 66, 67, 235, 139, 66, 67, 236, 10, 66, 67,
+    235, 202, 66, 67, 236, 73, 66, 67, 235, 170, 66, 67, 236, 41, 66, 67,
+    235, 233, 66, 67, 236, 104, 66, 67, 235, 112, 66, 67, 235, 239, 66, 67,
+    235, 175, 66, 67, 236, 46, 66, 67, 235, 143, 66, 67, 236, 14, 66, 67,
+    235, 206, 66, 67, 236, 77, 66, 67, 235, 127, 66, 67, 235, 254, 66, 67,
+    235, 190, 66, 67, 236, 61, 66, 67, 235, 158, 66, 67, 236, 29, 66, 67,
+    235, 221, 66, 67, 236, 92, 66, 67, 235, 119, 66, 67, 235, 246, 66, 67,
+    235, 182, 66, 67, 236, 53, 66, 67, 235, 150, 66, 67, 236, 21, 66, 67,
+    235, 213, 66, 67, 236, 84, 66, 67, 235, 134, 66, 67, 236, 5, 66, 67, 235,
+    197, 66, 67, 236, 68, 66, 67, 235, 165, 66, 67, 236, 36, 66, 67, 235,
+    228, 66, 67, 236, 99, 66, 67, 235, 115, 66, 67, 235, 242, 66, 67, 235,
+    178, 66, 67, 236, 49, 66, 67, 235, 146, 66, 67, 236, 17, 66, 67, 235,
+    209, 66, 67, 236, 80, 66, 67, 235, 130, 66, 67, 236, 1, 66, 67, 235, 193,
+    66, 67, 236, 64, 66, 67, 235, 161, 66, 67, 236, 32, 66, 67, 235, 224, 66,
+    67, 236, 95, 66, 67, 235, 122, 66, 67, 235, 249, 66, 67, 235, 185, 66,
+    67, 236, 56, 66, 67, 235, 153, 66, 67, 236, 24, 66, 67, 235, 216, 66, 67,
+    236, 87, 66, 67, 235, 137, 66, 67, 236, 8, 66, 67, 235, 200, 66, 67, 236,
+    71, 66, 67, 235, 168, 66, 67, 236, 39, 66, 67, 235, 231, 66, 67, 236,
+    102, 66, 67, 235, 113, 66, 67, 235, 240, 66, 67, 235, 176, 66, 67, 236,
+    47, 66, 67, 235, 144, 66, 67, 236, 15, 66, 67, 235, 207, 66, 67, 236, 78,
+    66, 67, 235, 128, 66, 67, 235, 255, 66, 67, 235, 191, 66, 67, 236, 62,
+    66, 67, 235, 159, 66, 67, 236, 30, 66, 67, 235, 222, 66, 67, 236, 93, 66,
+    67, 235, 120, 66, 67, 235, 247, 66, 67, 235, 183, 66, 67, 236, 54, 66,
+    67, 235, 151, 66, 67, 236, 22, 66, 67, 235, 214, 66, 67, 236, 85, 66, 67,
+    235, 135, 66, 67, 236, 6, 66, 67, 235, 198, 66, 67, 236, 69, 66, 67, 235,
+    166, 66, 67, 236, 37, 66, 67, 235, 229, 66, 67, 236, 100, 66, 67, 235,
+    116, 66, 67, 235, 243, 66, 67, 235, 179, 66, 67, 236, 50, 66, 67, 235,
+    147, 66, 67, 236, 18, 66, 67, 235, 210, 66, 67, 236, 81, 66, 67, 235,
+    131, 66, 67, 236, 2, 66, 67, 235, 194, 66, 67, 236, 65, 66, 67, 235, 162,
+    66, 67, 236, 33, 66, 67, 235, 225, 66, 67, 236, 96, 66, 67, 235, 123, 66,
+    67, 235, 250, 66, 67, 235, 186, 66, 67, 236, 57, 66, 67, 235, 154, 66,
+    67, 236, 25, 66, 67, 235, 217, 66, 67, 236, 88, 66, 67, 235, 138, 66, 67,
+    236, 9, 66, 67, 235, 201, 66, 67, 236, 72, 66, 67, 235, 169, 66, 67, 236,
+    40, 66, 67, 235, 232, 66, 67, 236, 103, 94, 197, 220, 61, 4, 84, 111, 94,
+    197, 220, 61, 4, 55, 84, 111, 114, 55, 61, 4, 84, 111, 94, 55, 61, 4, 84,
+    111, 46, 51, 55, 61, 4, 84, 111, 94, 197, 220, 61, 232, 89, 161, 114, 55,
+    61, 232, 89, 161, 94, 55, 61, 232, 89, 161, 235, 92, 61, 4, 229, 5, 111,
+    197, 30, 61, 4, 229, 5, 111, 197, 30, 198, 170, 54, 235, 92, 198, 170,
+    54, 114, 55, 237, 186, 54, 94, 55, 237, 186, 54, 114, 198, 170, 237, 186,
+    54, 94, 198, 170, 237, 186, 54, 94, 197, 220, 198, 170, 237, 186, 54, 94,
+    61, 4, 235, 111, 201, 255, 197, 30, 61, 115, 161, 235, 92, 61, 115, 161,
+    94, 61, 4, 200, 148, 4, 84, 111, 94, 61, 4, 200, 148, 4, 55, 84, 111, 94,
+    197, 220, 61, 4, 200, 147, 94, 197, 220, 61, 4, 200, 148, 4, 84, 111, 94,
+    197, 220, 61, 4, 200, 148, 4, 55, 84, 111, 114, 250, 79, 94, 250, 79,
+    114, 55, 250, 79, 94, 55, 250, 79, 114, 61, 115, 60, 237, 4, 94, 61, 115,
+    60, 237, 4, 114, 61, 232, 89, 248, 194, 115, 60, 237, 4, 94, 61, 232, 89,
+    248, 194, 115, 60, 237, 4, 178, 194, 91, 26, 202, 171, 234, 186, 54, 178,
+    234, 186, 26, 202, 171, 194, 91, 54, 178, 194, 91, 61, 4, 128, 178, 234,
+    186, 61, 4, 128, 202, 171, 234, 186, 61, 4, 128, 202, 171, 194, 91, 61,
+    4, 128, 178, 194, 91, 61, 26, 178, 234, 186, 54, 178, 234, 186, 61, 26,
+    202, 171, 234, 186, 54, 202, 171, 234, 186, 61, 26, 202, 171, 194, 91,
+    54, 202, 171, 194, 91, 61, 26, 178, 194, 91, 54, 207, 73, 237, 11, 238,
+    176, 233, 71, 237, 10, 233, 71, 237, 11, 238, 176, 207, 73, 237, 10, 202,
+    171, 234, 186, 61, 238, 176, 178, 234, 186, 54, 178, 234, 186, 61, 238,
+    176, 202, 171, 234, 186, 54, 233, 71, 237, 11, 238, 176, 178, 234, 186,
+    54, 207, 73, 237, 11, 238, 176, 202, 171, 234, 186, 54, 178, 234, 186,
+    61, 238, 176, 178, 194, 91, 54, 178, 194, 91, 61, 238, 176, 178, 234,
+    186, 54, 194, 125, 61, 209, 188, 236, 203, 207, 101, 61, 209, 188, 94,
+    199, 216, 238, 128, 197, 29, 61, 209, 188, 94, 199, 216, 238, 128, 235,
+    91, 61, 209, 188, 235, 92, 199, 216, 238, 128, 220, 18, 61, 209, 188,
+    235, 92, 199, 216, 238, 128, 207, 90, 207, 93, 250, 115, 242, 86, 54,
+    220, 21, 250, 115, 250, 182, 54, 198, 249, 250, 115, 250, 182, 54, 247,
+    188, 250, 115, 250, 182, 54, 198, 249, 250, 115, 242, 86, 61, 4, 216,
+    112, 198, 249, 250, 115, 250, 182, 61, 4, 209, 206, 106, 51, 204, 182,
+    242, 86, 54, 106, 46, 204, 182, 250, 182, 54, 250, 182, 242, 84, 242,
+    131, 54, 242, 86, 242, 84, 242, 131, 54, 94, 61, 95, 203, 195, 114, 54,
+    114, 61, 95, 203, 195, 94, 54, 203, 195, 94, 61, 95, 114, 54, 94, 61, 4,
+    102, 63, 114, 61, 4, 102, 63, 94, 61, 199, 151, 193, 223, 46, 51, 61,
+    199, 151, 2, 242, 130, 197, 30, 197, 220, 61, 232, 89, 2, 242, 130, 46,
+    173, 130, 51, 173, 142, 230, 21, 46, 173, 142, 51, 173, 130, 230, 21,
+    130, 173, 51, 142, 173, 46, 230, 21, 130, 173, 46, 142, 173, 51, 230, 21,
+    46, 173, 130, 51, 173, 130, 230, 21, 130, 173, 51, 142, 173, 51, 230, 21,
+    46, 173, 142, 51, 173, 142, 230, 21, 130, 173, 46, 142, 173, 46, 230, 21,
+    114, 230, 22, 4, 173, 130, 115, 161, 94, 230, 22, 4, 173, 130, 115, 161,
+    197, 30, 230, 22, 4, 173, 51, 115, 161, 235, 92, 230, 22, 4, 173, 51,
+    115, 161, 114, 230, 22, 4, 173, 142, 115, 161, 94, 230, 22, 4, 173, 142,
+    115, 161, 197, 30, 230, 22, 4, 173, 46, 115, 161, 235, 92, 230, 22, 4,
+    173, 46, 115, 161, 114, 230, 22, 4, 173, 130, 232, 89, 161, 94, 230, 22,
+    4, 173, 130, 232, 89, 161, 197, 30, 230, 22, 4, 173, 51, 232, 89, 161,
+    235, 92, 230, 22, 4, 173, 51, 232, 89, 161, 114, 230, 22, 4, 173, 142,
+    232, 89, 161, 94, 230, 22, 4, 173, 142, 232, 89, 161, 197, 30, 230, 22,
+    4, 173, 46, 232, 89, 161, 235, 92, 230, 22, 4, 173, 46, 232, 89, 161,
+    114, 230, 22, 4, 173, 130, 95, 114, 230, 22, 4, 173, 235, 96, 197, 30,
+    230, 22, 4, 173, 46, 248, 67, 197, 30, 230, 22, 4, 173, 207, 101, 94,
+    230, 22, 4, 173, 130, 95, 94, 230, 22, 4, 173, 235, 96, 235, 92, 230, 22,
+    4, 173, 46, 248, 67, 235, 92, 230, 22, 4, 173, 207, 101, 114, 230, 22, 4,
+    173, 130, 95, 94, 230, 22, 4, 173, 197, 41, 114, 230, 22, 4, 173, 142,
+    95, 94, 230, 22, 4, 173, 235, 96, 94, 230, 22, 4, 173, 130, 95, 114, 230,
+    22, 4, 173, 197, 41, 94, 230, 22, 4, 173, 142, 95, 114, 230, 22, 4, 173,
+    235, 96, 114, 230, 22, 4, 173, 130, 95, 184, 237, 185, 114, 230, 22, 4,
+    173, 142, 248, 84, 184, 237, 185, 94, 230, 22, 4, 173, 130, 95, 184, 237,
+    185, 94, 230, 22, 4, 173, 142, 248, 84, 184, 237, 185, 197, 30, 230, 22,
+    4, 173, 46, 248, 67, 235, 92, 230, 22, 4, 173, 207, 101, 235, 92, 230,
+    22, 4, 173, 46, 248, 67, 197, 30, 230, 22, 4, 173, 207, 101, 51, 55, 61,
+    4, 207, 7, 229, 245, 234, 30, 3, 95, 94, 54, 199, 91, 211, 174, 95, 94,
+    54, 114, 61, 95, 199, 91, 211, 173, 94, 61, 95, 199, 91, 211, 173, 94,
+    61, 95, 251, 1, 187, 155, 219, 240, 95, 114, 54, 114, 61, 199, 151, 219,
+    239, 230, 204, 95, 94, 54, 201, 154, 95, 94, 54, 114, 61, 199, 151, 201,
+    153, 201, 106, 95, 114, 54, 46, 232, 225, 200, 147, 51, 232, 225, 200,
+    147, 130, 232, 225, 200, 147, 142, 232, 225, 200, 147, 198, 170, 84, 248,
+    194, 237, 82, 192, 156, 213, 109, 202, 117, 192, 156, 213, 109, 197, 206,
+    242, 47, 46, 62, 238, 138, 186, 51, 62, 238, 138, 186, 46, 62, 210, 230,
+    51, 62, 210, 230, 192, 156, 213, 109, 46, 223, 206, 186, 192, 156, 213,
+    109, 51, 223, 206, 186, 192, 156, 213, 109, 46, 248, 19, 186, 192, 156,
+    213, 109, 51, 248, 19, 186, 46, 50, 247, 165, 4, 197, 67, 51, 50, 247,
+    165, 4, 197, 67, 46, 50, 247, 165, 4, 199, 118, 223, 191, 198, 249, 238,
+    223, 51, 50, 247, 165, 4, 199, 118, 223, 191, 247, 188, 238, 223, 46, 50,
+    247, 165, 4, 199, 118, 223, 191, 247, 188, 238, 223, 51, 50, 247, 165, 4,
+    199, 118, 223, 191, 198, 249, 238, 223, 46, 250, 208, 247, 165, 4, 236,
+    114, 51, 250, 208, 247, 165, 4, 236, 114, 46, 250, 115, 219, 240, 186,
+    51, 250, 115, 230, 204, 186, 55, 46, 250, 115, 230, 204, 186, 55, 51,
+    250, 115, 219, 240, 186, 46, 60, 198, 237, 204, 2, 186, 51, 60, 198, 237,
+    204, 2, 186, 235, 111, 233, 27, 84, 192, 21, 219, 175, 217, 42, 250, 208,
+    211, 176, 220, 28, 51, 250, 208, 196, 137, 4, 202, 106, 217, 42, 51, 250,
+    208, 4, 236, 114, 250, 208, 4, 206, 159, 223, 145, 251, 130, 250, 207,
+    202, 139, 250, 208, 211, 176, 220, 28, 202, 139, 250, 208, 211, 176, 197,
+    41, 163, 250, 207, 207, 168, 250, 207, 250, 208, 4, 197, 67, 207, 168,
+    250, 208, 4, 197, 67, 212, 18, 250, 208, 211, 176, 197, 41, 212, 18, 250,
+    208, 211, 176, 235, 96, 217, 42, 250, 208, 4, 211, 184, 250, 93, 234, 76,
+    223, 191, 61, 209, 188, 130, 26, 207, 101, 217, 42, 250, 208, 4, 211,
+    184, 250, 93, 234, 76, 223, 191, 61, 209, 188, 130, 26, 220, 28, 217, 42,
+    250, 208, 4, 211, 184, 250, 93, 234, 76, 223, 191, 61, 209, 188, 142, 26,
+    207, 101, 217, 42, 250, 208, 4, 211, 184, 250, 93, 234, 76, 223, 191, 61,
+    209, 188, 142, 26, 220, 28, 217, 42, 250, 208, 4, 211, 184, 250, 93, 234,
+    76, 223, 191, 61, 209, 188, 51, 26, 197, 41, 217, 42, 250, 208, 4, 211,
+    184, 250, 93, 234, 76, 223, 191, 61, 209, 188, 46, 26, 197, 41, 217, 42,
+    250, 208, 4, 211, 184, 250, 93, 234, 76, 223, 191, 61, 209, 188, 51, 26,
+    235, 96, 217, 42, 250, 208, 4, 211, 184, 250, 93, 234, 76, 223, 191, 61,
+    209, 188, 46, 26, 235, 96, 207, 168, 234, 90, 204, 151, 234, 90, 204,
+    152, 4, 211, 117, 234, 90, 204, 152, 4, 2, 242, 131, 58, 234, 90, 204,
+    152, 4, 51, 61, 58, 234, 90, 204, 152, 4, 46, 61, 58, 242, 131, 4, 229,
+    5, 161, 47, 84, 161, 47, 210, 235, 47, 207, 169, 202, 189, 47, 210, 120,
+    242, 131, 236, 178, 247, 64, 229, 5, 248, 194, 26, 198, 249, 138, 236,
+    178, 247, 64, 84, 161, 242, 131, 4, 201, 108, 193, 223, 47, 250, 180,
+    236, 172, 57, 130, 61, 199, 151, 242, 130, 47, 62, 247, 106, 47, 247,
+    106, 47, 219, 239, 47, 230, 203, 242, 131, 4, 2, 242, 131, 115, 199, 225,
+    207, 101, 242, 131, 4, 103, 229, 5, 201, 196, 115, 199, 225, 207, 101,
+    108, 207, 73, 237, 11, 203, 4, 108, 233, 71, 237, 11, 203, 4, 108, 250,
+    37, 108, 2, 242, 130, 108, 202, 106, 103, 222, 230, 202, 104, 198, 186,
+    4, 78, 58, 198, 186, 4, 197, 67, 206, 159, 223, 191, 198, 185, 198, 186,
+    4, 204, 159, 250, 27, 247, 187, 51, 198, 186, 95, 46, 198, 185, 46, 198,
+    186, 248, 67, 84, 161, 84, 248, 194, 248, 67, 51, 198, 185, 247, 175, 4,
+    46, 138, 247, 248, 247, 175, 4, 51, 138, 247, 248, 60, 247, 174, 24, 4,
+    46, 138, 247, 248, 24, 4, 51, 138, 247, 248, 62, 228, 195, 60, 228, 195,
+    46, 194, 58, 233, 27, 51, 194, 58, 233, 27, 46, 55, 194, 58, 233, 27, 51,
+    55, 194, 58, 233, 27, 223, 183, 223, 167, 199, 114, 136, 223, 167, 223,
+    168, 214, 201, 4, 84, 161, 235, 105, 215, 218, 50, 4, 238, 246, 211, 122,
+    223, 180, 250, 61, 203, 157, 209, 85, 234, 30, 3, 26, 203, 6, 210, 235,
+    234, 30, 3, 26, 203, 6, 210, 236, 4, 199, 91, 58, 228, 41, 115, 26, 203,
+    6, 210, 235, 231, 9, 202, 18, 199, 213, 235, 95, 198, 186, 4, 46, 138,
+    247, 248, 235, 95, 198, 186, 4, 51, 138, 247, 248, 60, 237, 5, 4, 142,
+    54, 60, 219, 43, 62, 242, 131, 4, 142, 54, 60, 242, 131, 4, 142, 54, 234,
+    12, 62, 202, 106, 234, 12, 60, 202, 106, 234, 12, 62, 237, 4, 234, 12,
+    60, 237, 4, 234, 12, 62, 242, 130, 234, 12, 60, 242, 130, 206, 201, 207,
+    169, 202, 190, 211, 173, 202, 190, 4, 211, 117, 207, 169, 202, 190, 4,
+    229, 5, 111, 248, 28, 202, 189, 248, 28, 207, 169, 202, 189, 55, 209,
+    206, 198, 170, 209, 206, 220, 23, 238, 130, 250, 208, 186, 207, 96, 238,
+    130, 250, 208, 186, 199, 75, 216, 110, 215, 150, 47, 78, 211, 173, 215,
+    150, 47, 102, 211, 173, 215, 150, 47, 24, 211, 173, 215, 150, 197, 57,
+    211, 174, 4, 236, 114, 215, 150, 197, 57, 211, 174, 4, 209, 206, 215,
+    150, 50, 223, 128, 211, 173, 215, 150, 50, 197, 57, 211, 173, 103, 219,
+    93, 26, 211, 173, 103, 219, 93, 211, 164, 211, 173, 215, 150, 24, 211,
+    173, 216, 59, 103, 201, 129, 201, 127, 4, 223, 141, 208, 170, 223, 142,
+    211, 173, 232, 234, 210, 224, 223, 141, 223, 142, 4, 55, 111, 223, 142,
+    249, 244, 4, 203, 4, 242, 123, 232, 68, 250, 182, 223, 139, 219, 176,
+    223, 140, 4, 207, 241, 210, 203, 250, 87, 209, 182, 219, 176, 223, 140,
+    4, 204, 182, 210, 203, 250, 87, 209, 182, 219, 176, 223, 140, 213, 111,
+    223, 185, 199, 225, 209, 182, 223, 142, 250, 87, 41, 209, 192, 211, 173,
+    208, 164, 223, 142, 211, 173, 223, 142, 4, 114, 61, 4, 128, 223, 142, 4,
+    24, 57, 223, 142, 4, 223, 127, 223, 142, 4, 197, 56, 223, 142, 4, 211,
+    117, 223, 142, 4, 197, 67, 222, 231, 220, 73, 46, 198, 186, 211, 173,
+    192, 156, 213, 109, 205, 246, 239, 26, 192, 156, 213, 109, 205, 246, 209,
+    250, 192, 156, 213, 109, 205, 246, 209, 80, 102, 3, 4, 2, 242, 131, 58,
+    102, 3, 4, 242, 122, 251, 144, 58, 102, 3, 4, 199, 91, 58, 102, 3, 4, 78,
+    63, 102, 3, 4, 199, 91, 63, 102, 3, 4, 201, 155, 104, 102, 3, 4, 60, 198,
+    185, 216, 113, 3, 4, 242, 39, 58, 216, 113, 3, 4, 78, 63, 216, 113, 3, 4,
+    233, 71, 236, 111, 216, 113, 3, 4, 207, 73, 236, 111, 102, 3, 223, 191,
+    46, 138, 242, 130, 102, 3, 223, 191, 51, 138, 242, 130, 196, 122, 211,
+    164, 238, 184, 209, 85, 215, 214, 3, 4, 78, 58, 215, 214, 3, 4, 197, 67,
+    204, 179, 209, 86, 4, 247, 188, 242, 83, 202, 234, 209, 85, 215, 214, 3,
+    223, 191, 46, 138, 242, 130, 215, 214, 3, 223, 191, 51, 138, 242, 130,
+    47, 215, 214, 3, 4, 242, 122, 251, 143, 215, 214, 3, 223, 191, 55, 242,
+    130, 47, 236, 172, 57, 102, 3, 223, 191, 198, 185, 216, 113, 3, 223, 191,
+    198, 185, 215, 214, 3, 223, 191, 198, 185, 223, 136, 209, 85, 207, 91,
+    223, 136, 209, 85, 192, 156, 213, 109, 207, 214, 239, 26, 250, 239, 211,
+    164, 238, 230, 223, 128, 4, 236, 114, 197, 57, 4, 216, 113, 57, 197, 57,
+    4, 211, 117, 223, 128, 4, 211, 117, 223, 128, 4, 219, 93, 250, 217, 197,
+    57, 4, 219, 93, 211, 163, 197, 57, 95, 223, 127, 223, 128, 95, 197, 56,
+    197, 57, 95, 248, 194, 95, 223, 127, 223, 128, 95, 248, 194, 95, 197, 56,
+    197, 57, 248, 67, 26, 222, 230, 4, 197, 56, 223, 128, 248, 67, 26, 222,
+    230, 4, 223, 127, 242, 84, 197, 57, 4, 204, 158, 242, 84, 223, 128, 4,
+    204, 158, 55, 50, 223, 127, 55, 50, 197, 56, 242, 84, 197, 57, 4, 204,
+    159, 26, 202, 234, 209, 85, 219, 93, 26, 4, 78, 58, 219, 93, 211, 164, 4,
+    78, 58, 55, 219, 93, 250, 217, 55, 219, 93, 211, 163, 103, 223, 129, 219,
+    93, 250, 217, 103, 223, 129, 219, 93, 211, 163, 202, 244, 220, 73, 211,
+    163, 202, 244, 220, 73, 250, 217, 219, 93, 211, 164, 211, 112, 219, 93,
+    250, 217, 219, 93, 26, 4, 85, 201, 255, 219, 93, 211, 164, 4, 85, 201,
+    255, 219, 93, 26, 4, 229, 5, 237, 185, 219, 93, 211, 164, 4, 229, 5, 237,
+    185, 219, 93, 26, 4, 55, 211, 117, 219, 93, 26, 4, 197, 67, 219, 93, 26,
+    4, 55, 197, 67, 2, 196, 119, 4, 197, 67, 219, 93, 211, 164, 4, 55, 211,
+    117, 219, 93, 211, 164, 4, 55, 197, 67, 192, 156, 213, 109, 236, 124,
+    250, 172, 192, 156, 213, 109, 208, 29, 250, 172, 234, 30, 3, 4, 78, 63,
+    228, 41, 4, 78, 58, 198, 170, 229, 5, 248, 194, 4, 55, 84, 111, 198, 170,
+    229, 5, 248, 194, 4, 198, 170, 84, 111, 199, 91, 211, 174, 4, 78, 58,
+    199, 91, 211, 174, 4, 207, 73, 236, 111, 203, 84, 216, 113, 203, 83, 239,
+    13, 4, 78, 58, 234, 30, 4, 250, 37, 251, 1, 187, 115, 4, 242, 122, 251,
+    143, 250, 138, 187, 211, 164, 187, 155, 234, 30, 3, 95, 102, 57, 102, 3,
+    95, 234, 30, 57, 234, 30, 3, 95, 199, 91, 211, 173, 55, 242, 48, 234, 31,
+    103, 239, 6, 234, 30, 203, 98, 112, 239, 6, 234, 30, 203, 98, 234, 30, 3,
+    4, 103, 236, 112, 95, 26, 103, 236, 112, 63, 234, 23, 4, 232, 119, 236,
+    112, 58, 219, 240, 4, 242, 131, 223, 145, 230, 204, 4, 242, 131, 223,
+    145, 219, 240, 4, 208, 159, 122, 58, 230, 204, 4, 208, 159, 122, 58, 219,
+    240, 211, 164, 203, 6, 187, 155, 230, 204, 211, 164, 203, 6, 187, 155,
+    219, 240, 211, 164, 203, 6, 187, 115, 4, 78, 223, 145, 230, 204, 211,
+    164, 203, 6, 187, 115, 4, 78, 223, 145, 219, 240, 211, 164, 203, 6, 187,
+    115, 4, 78, 58, 230, 204, 211, 164, 203, 6, 187, 115, 4, 78, 58, 219,
+    240, 211, 164, 203, 6, 187, 115, 4, 78, 95, 207, 101, 230, 204, 211, 164,
+    203, 6, 187, 115, 4, 78, 95, 220, 28, 219, 240, 211, 164, 250, 139, 230,
+    204, 211, 164, 250, 139, 219, 240, 26, 203, 72, 213, 111, 187, 155, 230,
+    204, 26, 203, 72, 213, 111, 187, 155, 219, 240, 26, 213, 111, 250, 139,
+    230, 204, 26, 213, 111, 250, 139, 219, 240, 95, 235, 104, 187, 95, 230,
+    203, 230, 204, 95, 235, 104, 187, 95, 219, 239, 219, 240, 95, 203, 84,
+    211, 164, 234, 31, 230, 204, 95, 203, 84, 211, 164, 234, 31, 219, 240,
+    95, 203, 84, 95, 230, 203, 230, 204, 95, 203, 84, 95, 219, 239, 219, 240,
+    95, 230, 204, 95, 235, 104, 234, 31, 230, 204, 95, 219, 240, 95, 235,
+    104, 234, 31, 219, 240, 95, 203, 6, 187, 95, 230, 204, 95, 203, 6, 234,
+    31, 230, 204, 95, 203, 6, 187, 95, 219, 240, 95, 203, 6, 234, 31, 203, 6,
+    187, 115, 211, 164, 219, 239, 203, 6, 187, 115, 211, 164, 230, 203, 203,
+    6, 187, 115, 211, 164, 219, 240, 4, 78, 223, 145, 203, 6, 187, 115, 211,
+    164, 230, 204, 4, 78, 223, 145, 235, 104, 187, 115, 211, 164, 219, 239,
+    235, 104, 187, 115, 211, 164, 230, 203, 235, 104, 203, 6, 187, 115, 211,
+    164, 219, 239, 235, 104, 203, 6, 187, 115, 211, 164, 230, 203, 203, 84,
+    211, 164, 219, 239, 203, 84, 211, 164, 230, 203, 203, 84, 95, 219, 240,
+    95, 234, 30, 57, 203, 84, 95, 230, 204, 95, 234, 30, 57, 55, 214, 185,
+    219, 239, 55, 214, 185, 230, 203, 55, 214, 185, 219, 240, 4, 197, 67,
+    230, 204, 211, 112, 219, 239, 230, 204, 248, 67, 219, 239, 219, 240, 242,
+    84, 247, 64, 238, 131, 230, 204, 242, 84, 247, 64, 238, 131, 219, 240,
+    242, 84, 247, 64, 238, 132, 95, 203, 6, 234, 31, 230, 204, 242, 84, 247,
+    64, 238, 132, 95, 203, 6, 234, 31, 202, 235, 199, 229, 220, 71, 199, 229,
+    202, 235, 199, 230, 211, 164, 187, 155, 220, 71, 199, 230, 211, 164, 187,
+    155, 234, 30, 3, 4, 247, 99, 58, 209, 116, 95, 203, 72, 234, 30, 57, 201,
+    146, 95, 203, 72, 234, 30, 57, 209, 116, 95, 203, 72, 213, 111, 187, 155,
+    201, 146, 95, 203, 72, 213, 111, 187, 155, 209, 116, 95, 234, 30, 57,
+    201, 146, 95, 234, 30, 57, 209, 116, 95, 213, 111, 187, 155, 201, 146,
+    95, 213, 111, 187, 155, 209, 116, 95, 251, 1, 187, 155, 201, 146, 95,
+    251, 1, 187, 155, 209, 116, 95, 213, 111, 251, 1, 187, 155, 201, 146, 95,
+    213, 111, 251, 1, 187, 155, 55, 209, 115, 55, 201, 145, 201, 154, 4, 236,
+    114, 201, 106, 4, 236, 114, 201, 154, 4, 102, 3, 63, 201, 106, 4, 102, 3,
+    63, 201, 154, 4, 215, 214, 3, 63, 201, 106, 4, 215, 214, 3, 63, 201, 154,
+    80, 211, 164, 187, 115, 4, 78, 58, 201, 106, 80, 211, 164, 187, 115, 4,
+    78, 58, 201, 154, 80, 95, 234, 30, 57, 201, 106, 80, 95, 234, 30, 57,
+    201, 154, 80, 95, 199, 91, 211, 173, 201, 106, 80, 95, 199, 91, 211, 173,
+    201, 154, 80, 95, 251, 1, 187, 155, 201, 106, 80, 95, 251, 1, 187, 155,
+    201, 154, 80, 95, 213, 111, 187, 155, 201, 106, 80, 95, 213, 111, 187,
+    155, 50, 46, 211, 184, 105, 211, 173, 50, 51, 211, 184, 105, 211, 173,
+    242, 84, 201, 153, 242, 84, 201, 105, 242, 84, 201, 154, 211, 164, 187,
+    155, 242, 84, 201, 106, 211, 164, 187, 155, 201, 154, 95, 201, 105, 201,
+    106, 95, 201, 153, 201, 154, 95, 201, 153, 201, 106, 95, 201, 105, 201,
+    106, 248, 67, 201, 153, 201, 106, 248, 67, 26, 222, 230, 247, 64, 237,
+    186, 4, 201, 153, 234, 116, 80, 211, 176, 235, 91, 209, 240, 4, 200, 57,
+    198, 248, 198, 204, 223, 127, 232, 137, 213, 126, 203, 195, 46, 200, 159,
+    203, 195, 142, 200, 159, 203, 195, 130, 200, 159, 210, 121, 4, 206, 158,
+    84, 248, 194, 198, 170, 51, 198, 8, 55, 84, 248, 194, 46, 198, 8, 84,
+    248, 194, 55, 46, 198, 8, 55, 84, 248, 194, 55, 46, 198, 8, 184, 237,
+    186, 232, 89, 46, 217, 10, 80, 55, 196, 105, 203, 195, 142, 200, 160, 4,
+    211, 117, 203, 195, 130, 200, 160, 4, 197, 67, 203, 195, 130, 200, 160,
+    95, 203, 195, 142, 200, 159, 55, 142, 200, 159, 55, 130, 200, 159, 55,
+    201, 208, 213, 111, 57, 207, 168, 55, 201, 208, 213, 111, 57, 236, 136,
+    213, 111, 236, 180, 4, 207, 168, 214, 200, 203, 4, 84, 219, 176, 4, 242,
+    131, 58, 84, 219, 176, 4, 242, 131, 63, 142, 200, 160, 4, 242, 131, 63,
+    210, 236, 4, 229, 5, 111, 210, 236, 4, 199, 91, 211, 173, 198, 170, 84,
+    248, 194, 248, 21, 207, 215, 198, 170, 84, 248, 194, 4, 229, 5, 111, 198,
+    170, 242, 48, 211, 173, 198, 170, 214, 185, 219, 239, 198, 170, 214, 185,
+    230, 203, 235, 104, 203, 6, 219, 240, 211, 164, 187, 155, 235, 104, 203,
+    6, 230, 204, 211, 164, 187, 155, 198, 170, 202, 190, 248, 21, 207, 215,
+    220, 73, 198, 170, 84, 248, 194, 211, 173, 55, 202, 190, 211, 173, 62,
+    84, 161, 215, 150, 62, 84, 161, 178, 234, 186, 62, 54, 178, 194, 91, 62,
+    54, 202, 171, 234, 186, 62, 54, 202, 171, 194, 91, 62, 54, 46, 51, 62,
+    54, 114, 60, 54, 197, 30, 60, 54, 235, 92, 60, 54, 178, 234, 186, 60, 54,
+    178, 194, 91, 60, 54, 202, 171, 234, 186, 60, 54, 202, 171, 194, 91, 60,
+    54, 46, 51, 60, 54, 130, 142, 60, 54, 94, 61, 4, 199, 74, 235, 91, 94,
+    61, 4, 199, 74, 197, 29, 114, 61, 4, 199, 74, 235, 91, 114, 61, 4, 199,
+    74, 197, 29, 50, 4, 198, 249, 138, 247, 248, 50, 4, 247, 188, 138, 247,
+    248, 50, 4, 113, 51, 237, 11, 138, 247, 248, 50, 4, 106, 46, 237, 11,
+    138, 247, 248, 237, 5, 4, 46, 138, 247, 248, 237, 5, 4, 51, 138, 247,
+    248, 237, 5, 4, 198, 249, 138, 247, 248, 237, 5, 4, 247, 188, 138, 247,
+    248, 235, 111, 202, 106, 60, 220, 73, 202, 106, 62, 220, 73, 202, 106,
+    60, 196, 53, 2, 202, 106, 62, 196, 53, 2, 202, 106, 60, 210, 144, 62,
+    210, 144, 62, 229, 192, 60, 229, 192, 229, 5, 60, 229, 192, 60, 220, 73,
+    242, 130, 60, 217, 31, 237, 4, 62, 217, 31, 237, 4, 60, 217, 31, 219, 43,
+    62, 217, 31, 219, 43, 60, 2, 237, 4, 60, 2, 219, 43, 62, 2, 219, 43, 60,
+    229, 5, 234, 106, 62, 229, 5, 234, 106, 60, 84, 234, 106, 62, 84, 234,
+    106, 46, 61, 4, 2, 242, 130, 112, 114, 250, 73, 46, 61, 4, 47, 209, 206,
+    184, 114, 202, 99, 54, 114, 197, 220, 61, 4, 84, 111, 114, 197, 220, 61,
+    4, 55, 84, 111, 114, 197, 220, 61, 232, 89, 161, 114, 197, 220, 198, 170,
+    237, 186, 54, 114, 61, 4, 235, 111, 201, 255, 114, 61, 4, 200, 148, 4,
+    84, 111, 114, 61, 4, 200, 148, 4, 55, 84, 111, 114, 197, 220, 61, 4, 200,
+    147, 114, 197, 220, 61, 4, 200, 148, 4, 84, 111, 114, 197, 220, 61, 4,
+    200, 148, 4, 55, 84, 111, 114, 61, 199, 151, 193, 223, 194, 125, 61, 209,
+    188, 236, 203, 220, 28, 234, 30, 3, 95, 114, 54, 207, 169, 199, 91, 211,
+    174, 95, 114, 54, 114, 61, 95, 207, 169, 251, 1, 187, 155, 94, 61, 199,
+    151, 230, 203, 94, 61, 199, 151, 201, 105, 114, 208, 170, 54, 94, 208,
+    170, 54, 207, 169, 199, 91, 211, 174, 95, 94, 54, 94, 61, 95, 207, 169,
+    251, 1, 187, 155, 199, 91, 211, 174, 95, 114, 54, 114, 61, 95, 251, 1,
+    187, 155, 114, 61, 95, 207, 169, 199, 91, 211, 173, 94, 61, 95, 207, 169,
+    199, 91, 211, 173, 235, 92, 198, 184, 192, 21, 54, 203, 195, 203, 6, 178,
+    54, 203, 195, 248, 249, 202, 171, 54, 62, 217, 31, 202, 19, 60, 2, 202,
+    19, 62, 2, 202, 19, 60, 207, 96, 210, 144, 62, 207, 96, 210, 144, 87,
+    220, 73, 242, 130, 87, 211, 119, 4, 211, 119, 223, 145, 87, 242, 131, 4,
+    242, 131, 223, 145, 87, 242, 130, 87, 47, 206, 51, 203, 6, 178, 61, 4,
+    229, 14, 229, 245, 248, 249, 202, 171, 61, 4, 229, 14, 200, 147, 203, 6,
+    178, 61, 4, 229, 5, 200, 147, 248, 249, 202, 171, 61, 4, 229, 5, 200,
+    147, 248, 75, 61, 209, 188, 235, 92, 199, 216, 178, 234, 185, 203, 195,
+    248, 75, 61, 209, 188, 235, 92, 199, 216, 178, 234, 185, 114, 198, 184,
+    54, 197, 30, 198, 184, 54, 94, 198, 184, 54, 235, 92, 198, 184, 54, 46,
+    51, 198, 184, 54, 130, 142, 198, 184, 54, 178, 194, 91, 198, 184, 54,
+    178, 234, 186, 198, 184, 54, 202, 171, 234, 186, 198, 184, 54, 202, 171,
+    194, 91, 198, 184, 54, 114, 198, 184, 237, 184, 54, 197, 30, 198, 184,
+    237, 184, 54, 94, 198, 184, 237, 184, 54, 235, 92, 198, 184, 237, 184,
+    54, 242, 86, 198, 184, 211, 184, 242, 131, 54, 250, 182, 198, 184, 211,
+    184, 242, 131, 54, 114, 198, 184, 61, 115, 161, 197, 30, 198, 184, 61,
+    115, 161, 94, 198, 184, 61, 115, 161, 235, 92, 198, 184, 61, 115, 161,
+    178, 194, 91, 198, 184, 61, 115, 161, 178, 234, 186, 198, 184, 61, 115,
+    161, 202, 171, 234, 186, 198, 184, 61, 115, 161, 202, 171, 194, 91, 198,
+    184, 61, 115, 161, 114, 198, 184, 61, 4, 55, 229, 5, 111, 197, 30, 198,
+    184, 61, 4, 55, 229, 5, 111, 94, 198, 184, 61, 4, 55, 229, 5, 111, 235,
+    92, 198, 184, 61, 4, 55, 229, 5, 111, 229, 5, 200, 167, 222, 1, 84, 200,
+    167, 222, 1, 114, 198, 184, 61, 136, 94, 198, 184, 54, 197, 30, 198, 184,
+    61, 114, 80, 235, 92, 198, 184, 54, 94, 198, 184, 61, 136, 114, 198, 184,
+    54, 235, 92, 198, 184, 61, 114, 80, 197, 30, 198, 184, 54, 114, 198, 184,
+    211, 53, 250, 73, 197, 30, 198, 184, 211, 53, 250, 73, 94, 198, 184, 211,
+    53, 250, 73, 235, 92, 198, 184, 211, 53, 250, 73, 114, 60, 47, 62, 54,
+    197, 30, 60, 47, 62, 54, 94, 60, 47, 62, 54, 235, 92, 60, 47, 62, 54,
+    250, 182, 198, 184, 51, 197, 172, 54, 250, 182, 198, 184, 247, 188, 197,
+    172, 54, 250, 182, 198, 184, 46, 197, 172, 54, 250, 182, 198, 184, 198,
+    249, 197, 172, 54, 207, 173, 220, 28, 207, 173, 207, 101, 214, 174, 220,
+    28, 214, 174, 207, 101, 232, 119, 238, 224, 250, 74, 242, 126, 250, 181,
+    94, 60, 54, 16, 39, 197, 206, 41, 234, 117, 199, 160, 198, 247, 114, 234,
+    24, 250, 77, 199, 160, 207, 97, 197, 30, 234, 24, 250, 77, 199, 160, 198,
+    247, 94, 234, 24, 250, 77, 199, 160, 220, 24, 235, 92, 234, 24, 250, 77,
+    60, 114, 234, 24, 250, 77, 60, 197, 30, 234, 24, 250, 77, 60, 94, 234,
+    24, 250, 77, 60, 235, 92, 234, 24, 250, 77, 235, 92, 198, 184, 61, 4,
+    184, 199, 74, 220, 18, 235, 92, 198, 184, 61, 4, 184, 199, 74, 207, 90,
+    197, 30, 198, 184, 61, 4, 184, 199, 74, 220, 18, 197, 30, 198, 184, 61,
+    4, 184, 199, 74, 207, 90, 114, 198, 184, 61, 4, 184, 199, 74, 197, 29,
+    94, 198, 184, 61, 4, 184, 199, 74, 197, 29, 114, 198, 184, 61, 4, 184,
+    199, 74, 235, 91, 94, 198, 184, 61, 4, 184, 199, 74, 235, 91, 60, 238,
+    130, 235, 92, 26, 114, 54, 60, 238, 130, 235, 92, 26, 94, 54, 60, 238,
+    130, 197, 30, 26, 114, 54, 60, 238, 130, 197, 30, 26, 94, 54, 60, 238,
+    130, 114, 26, 197, 30, 54, 60, 238, 130, 94, 26, 197, 30, 54, 60, 238,
+    130, 114, 26, 235, 92, 54, 60, 238, 130, 94, 26, 235, 92, 54, 207, 142,
+    61, 142, 220, 28, 207, 142, 61, 142, 207, 101, 207, 142, 61, 130, 220,
+    28, 207, 142, 61, 130, 207, 101, 207, 142, 61, 46, 197, 41, 207, 142, 61,
+    51, 197, 41, 207, 142, 61, 46, 235, 96, 207, 142, 61, 51, 235, 96, 197,
+    30, 62, 61, 232, 89, 248, 194, 4, 229, 5, 161, 130, 250, 78, 223, 191,
+    41, 207, 243, 247, 173, 211, 112, 62, 202, 104, 211, 112, 62, 26, 60,
+    202, 104, 211, 112, 60, 202, 104, 248, 213, 105, 4, 152, 193, 223, 47,
+    193, 223, 47, 28, 193, 223, 60, 50, 246, 135, 60, 237, 5, 246, 135, 163,
+    60, 210, 144, 229, 5, 60, 212, 9, 60, 212, 9, 60, 217, 31, 197, 40, 198,
+    186, 246, 135, 60, 217, 31, 235, 95, 198, 186, 246, 135, 60, 217, 31,
+    220, 23, 198, 186, 246, 135, 60, 217, 31, 207, 96, 198, 186, 246, 135,
+    214, 190, 232, 136, 104, 198, 249, 138, 60, 242, 130, 247, 188, 138, 60,
+    242, 130, 152, 232, 119, 209, 190, 60, 238, 126, 207, 16, 152, 232, 119,
+    209, 190, 60, 238, 126, 62, 232, 119, 209, 190, 238, 126, 207, 16, 62,
+    232, 119, 209, 190, 238, 126, 50, 209, 160, 223, 172, 197, 71, 57, 230,
+    194, 77, 209, 203, 232, 136, 104, 209, 203, 232, 136, 133, 209, 203, 232,
+    136, 134, 209, 203, 232, 136, 151, 198, 206, 209, 70, 250, 33, 228, 114,
+    210, 62, 214, 186, 62, 216, 30, 204, 188, 60, 237, 5, 211, 212, 238, 183,
+    198, 148, 152, 216, 30, 250, 69, 238, 146, 230, 96, 192, 74, 221, 50,
+    250, 151, 251, 115, 194, 221, 209, 161, 46, 138, 60, 202, 19, 51, 138,
+    60, 202, 19, 202, 20, 4, 46, 138, 247, 248, 202, 20, 4, 51, 138, 247,
+    248, 114, 197, 220, 61, 4, 198, 186, 250, 75, 197, 30, 197, 220, 61, 4,
+    198, 186, 250, 75, 94, 197, 220, 61, 4, 198, 186, 250, 75, 235, 92, 197,
+    220, 61, 4, 198, 186, 250, 75, 234, 14, 232, 136, 101, 234, 14, 232, 136,
+    104, 205, 206, 206, 181, 250, 32, 16, 196, 23, 206, 181, 250, 32, 16,
+    213, 97, 206, 181, 250, 32, 16, 208, 147, 206, 181, 250, 32, 16, 248, 16,
+    206, 181, 250, 32, 16, 204, 171, 206, 181, 250, 32, 16, 198, 197, 234,
+    30, 3, 4, 223, 168, 63, 197, 53, 109, 204, 167, 109, 235, 101, 109, 210,
+    213, 109, 207, 168, 51, 250, 207, 229, 213, 210, 196, 109, 131, 6, 1,
+    249, 227, 131, 6, 1, 247, 110, 131, 6, 1, 196, 121, 131, 6, 1, 231, 13,
+    131, 6, 1, 236, 141, 131, 6, 1, 193, 38, 131, 6, 1, 192, 55, 131, 6, 1,
+    235, 12, 131, 6, 1, 192, 81, 131, 6, 1, 223, 69, 131, 6, 1, 88, 223, 69,
+    131, 6, 1, 70, 131, 6, 1, 236, 162, 131, 6, 1, 222, 127, 131, 6, 1, 219,
+    139, 131, 6, 1, 215, 155, 131, 6, 1, 215, 46, 131, 6, 1, 211, 196, 131,
+    6, 1, 209, 185, 131, 6, 1, 207, 72, 131, 6, 1, 202, 241, 131, 6, 1, 197,
+    251, 131, 6, 1, 197, 88, 131, 6, 1, 232, 92, 131, 6, 1, 229, 198, 131, 6,
+    1, 211, 131, 131, 6, 1, 210, 181, 131, 6, 1, 203, 167, 131, 6, 1, 198,
+    97, 131, 6, 1, 242, 174, 131, 6, 1, 204, 64, 131, 6, 1, 193, 47, 131, 6,
+    1, 193, 49, 131, 6, 1, 193, 82, 131, 6, 1, 202, 135, 144, 131, 6, 1, 192,
+    214, 131, 6, 1, 2, 192, 179, 131, 6, 1, 2, 192, 180, 4, 200, 147, 131, 6,
+    1, 193, 1, 131, 6, 1, 223, 110, 2, 192, 179, 131, 6, 1, 248, 28, 192,
+    179, 131, 6, 1, 223, 110, 248, 28, 192, 179, 131, 6, 1, 232, 216, 131, 6,
+    1, 223, 67, 131, 6, 1, 203, 166, 131, 6, 1, 198, 160, 64, 131, 6, 1, 220,
+    61, 215, 155, 131, 2, 1, 249, 227, 131, 2, 1, 247, 110, 131, 2, 1, 196,
+    121, 131, 2, 1, 231, 13, 131, 2, 1, 236, 141, 131, 2, 1, 193, 38, 131, 2,
+    1, 192, 55, 131, 2, 1, 235, 12, 131, 2, 1, 192, 81, 131, 2, 1, 223, 69,
+    131, 2, 1, 88, 223, 69, 131, 2, 1, 70, 131, 2, 1, 236, 162, 131, 2, 1,
+    222, 127, 131, 2, 1, 219, 139, 131, 2, 1, 215, 155, 131, 2, 1, 215, 46,
+    131, 2, 1, 211, 196, 131, 2, 1, 209, 185, 131, 2, 1, 207, 72, 131, 2, 1,
+    202, 241, 131, 2, 1, 197, 251, 131, 2, 1, 197, 88, 131, 2, 1, 232, 92,
+    131, 2, 1, 229, 198, 131, 2, 1, 211, 131, 131, 2, 1, 210, 181, 131, 2, 1,
+    203, 167, 131, 2, 1, 198, 97, 131, 2, 1, 242, 174, 131, 2, 1, 204, 64,
+    131, 2, 1, 193, 47, 131, 2, 1, 193, 49, 131, 2, 1, 193, 82, 131, 2, 1,
+    202, 135, 144, 131, 2, 1, 192, 214, 131, 2, 1, 2, 192, 179, 131, 2, 1, 2,
+    192, 180, 4, 200, 147, 131, 2, 1, 193, 1, 131, 2, 1, 223, 110, 2, 192,
+    179, 131, 2, 1, 248, 28, 192, 179, 131, 2, 1, 223, 110, 248, 28, 192,
+    179, 131, 2, 1, 232, 216, 131, 2, 1, 223, 67, 131, 2, 1, 203, 166, 131,
+    2, 1, 198, 160, 64, 131, 2, 1, 220, 61, 215, 155, 8, 6, 1, 220, 202, 4,
+    55, 161, 8, 2, 1, 220, 202, 4, 55, 161, 8, 6, 1, 220, 202, 4, 85, 199,
+    90, 8, 6, 1, 211, 94, 4, 111, 8, 6, 1, 208, 112, 4, 200, 147, 8, 2, 1,
+    41, 4, 111, 8, 2, 1, 200, 229, 4, 237, 11, 111, 8, 6, 1, 230, 125, 4,
+    237, 59, 8, 2, 1, 230, 125, 4, 237, 59, 8, 6, 1, 222, 185, 4, 237, 59, 8,
+    2, 1, 222, 185, 4, 237, 59, 8, 6, 1, 192, 156, 4, 237, 59, 8, 2, 1, 192,
+    156, 4, 237, 59, 8, 6, 1, 250, 252, 8, 6, 1, 218, 237, 4, 128, 8, 6, 1,
+    163, 64, 8, 6, 1, 163, 250, 252, 8, 2, 1, 196, 237, 4, 51, 128, 8, 6, 1,
+    194, 203, 4, 128, 8, 2, 1, 194, 203, 4, 128, 8, 2, 1, 196, 237, 4, 238,
+    142, 8, 6, 1, 138, 230, 124, 8, 2, 1, 138, 230, 124, 8, 2, 1, 200, 145,
+    210, 77, 8, 2, 1, 234, 253, 4, 213, 108, 8, 2, 1, 163, 208, 112, 4, 200,
+    147, 8, 2, 1, 185, 4, 132, 207, 82, 223, 145, 8, 1, 2, 6, 163, 71, 8,
+    201, 155, 2, 1, 223, 65, 73, 1, 6, 196, 236, 8, 6, 1, 206, 159, 4, 201,
+    75, 200, 147, 8, 6, 1, 192, 156, 4, 201, 75, 200, 147, 92, 6, 1, 251, 20,
+    92, 2, 1, 251, 20, 92, 6, 1, 196, 36, 92, 2, 1, 196, 36, 92, 6, 1, 231,
+    204, 92, 2, 1, 231, 204, 92, 6, 1, 237, 223, 92, 2, 1, 237, 223, 92, 6,
+    1, 234, 149, 92, 2, 1, 234, 149, 92, 6, 1, 202, 176, 92, 2, 1, 202, 176,
+    92, 6, 1, 192, 93, 92, 2, 1, 192, 93, 92, 6, 1, 230, 15, 92, 2, 1, 230,
+    15, 92, 6, 1, 199, 204, 92, 2, 1, 199, 204, 92, 6, 1, 228, 55, 92, 2, 1,
+    228, 55, 92, 6, 1, 222, 111, 92, 2, 1, 222, 111, 92, 6, 1, 220, 56, 92,
+    2, 1, 220, 56, 92, 6, 1, 216, 175, 92, 2, 1, 216, 175, 92, 6, 1, 214, 60,
+    92, 2, 1, 214, 60, 92, 6, 1, 221, 49, 92, 2, 1, 221, 49, 92, 6, 1, 74,
+    92, 2, 1, 74, 92, 6, 1, 210, 51, 92, 2, 1, 210, 51, 92, 6, 1, 207, 55,
+    92, 2, 1, 207, 55, 92, 6, 1, 203, 87, 92, 2, 1, 203, 87, 92, 6, 1, 200,
+    100, 92, 2, 1, 200, 100, 92, 6, 1, 197, 119, 92, 2, 1, 197, 119, 92, 6,
+    1, 233, 11, 92, 2, 1, 233, 11, 92, 6, 1, 221, 227, 92, 2, 1, 221, 227,
+    92, 6, 1, 209, 62, 92, 2, 1, 209, 62, 92, 6, 1, 211, 188, 92, 2, 1, 211,
+    188, 92, 6, 1, 237, 9, 251, 26, 92, 2, 1, 237, 9, 251, 26, 92, 6, 1, 40,
+    92, 251, 57, 92, 2, 1, 40, 92, 251, 57, 92, 6, 1, 238, 165, 234, 149, 92,
+    2, 1, 238, 165, 234, 149, 92, 6, 1, 237, 9, 222, 111, 92, 2, 1, 237, 9,
+    222, 111, 92, 6, 1, 237, 9, 214, 60, 92, 2, 1, 237, 9, 214, 60, 92, 6, 1,
+    238, 165, 214, 60, 92, 2, 1, 238, 165, 214, 60, 92, 6, 1, 40, 92, 211,
+    188, 92, 2, 1, 40, 92, 211, 188, 92, 6, 1, 206, 43, 92, 2, 1, 206, 43,
+    92, 6, 1, 238, 180, 204, 4, 92, 2, 1, 238, 180, 204, 4, 92, 6, 1, 40, 92,
+    204, 4, 92, 2, 1, 40, 92, 204, 4, 92, 6, 1, 40, 92, 233, 255, 92, 2, 1,
+    40, 92, 233, 255, 92, 6, 1, 251, 40, 221, 232, 92, 2, 1, 251, 40, 221,
+    232, 92, 6, 1, 237, 9, 229, 6, 92, 2, 1, 237, 9, 229, 6, 92, 6, 1, 40,
+    92, 229, 6, 92, 2, 1, 40, 92, 229, 6, 92, 6, 1, 40, 92, 144, 92, 2, 1,
+    40, 92, 144, 92, 6, 1, 220, 201, 144, 92, 2, 1, 220, 201, 144, 92, 6, 1,
+    40, 92, 229, 219, 92, 2, 1, 40, 92, 229, 219, 92, 6, 1, 40, 92, 230, 18,
+    92, 2, 1, 40, 92, 230, 18, 92, 6, 1, 40, 92, 231, 199, 92, 2, 1, 40, 92,
+    231, 199, 92, 6, 1, 40, 92, 236, 165, 92, 2, 1, 40, 92, 236, 165, 92, 6,
+    1, 40, 92, 203, 226, 92, 2, 1, 40, 92, 203, 226, 92, 6, 1, 40, 212, 245,
+    203, 226, 92, 2, 1, 40, 212, 245, 203, 226, 92, 6, 1, 40, 212, 245, 214,
+    113, 92, 2, 1, 40, 212, 245, 214, 113, 92, 6, 1, 40, 212, 245, 212, 181,
+    92, 2, 1, 40, 212, 245, 212, 181, 92, 6, 1, 40, 212, 245, 194, 126, 92,
+    2, 1, 40, 212, 245, 194, 126, 92, 16, 222, 135, 92, 16, 216, 176, 207,
+    55, 92, 16, 210, 52, 207, 55, 92, 16, 202, 8, 92, 16, 200, 101, 207, 55,
+    92, 16, 221, 228, 207, 55, 92, 16, 203, 227, 203, 87, 92, 6, 1, 238, 165,
+    204, 4, 92, 2, 1, 238, 165, 204, 4, 92, 6, 1, 238, 165, 231, 199, 92, 2,
+    1, 238, 165, 231, 199, 92, 38, 214, 61, 58, 92, 38, 202, 128, 250, 45,
+    92, 38, 202, 128, 219, 248, 92, 6, 1, 247, 212, 221, 232, 92, 2, 1, 247,
+    212, 221, 232, 92, 40, 212, 245, 232, 71, 201, 238, 92, 40, 212, 245,
+    236, 206, 208, 159, 77, 92, 40, 212, 245, 223, 170, 208, 159, 77, 92, 40,
+    212, 245, 196, 107, 236, 177, 92, 232, 109, 90, 230, 78, 92, 232, 71,
+    201, 238, 92, 216, 25, 236, 177, 98, 2, 1, 250, 224, 98, 2, 1, 248, 207,
+    98, 2, 1, 231, 203, 98, 2, 1, 236, 123, 98, 2, 1, 234, 88, 98, 2, 1, 196,
+    20, 98, 2, 1, 192, 79, 98, 2, 1, 200, 125, 98, 2, 1, 223, 190, 98, 2, 1,
+    222, 121, 98, 2, 1, 220, 67, 98, 2, 1, 217, 160, 98, 2, 1, 215, 51, 98,
+    2, 1, 211, 211, 98, 2, 1, 210, 247, 98, 2, 1, 192, 67, 98, 2, 1, 208, 53,
+    98, 2, 1, 206, 40, 98, 2, 1, 200, 112, 98, 2, 1, 197, 77, 98, 2, 1, 210,
+    86, 98, 2, 1, 221, 237, 98, 2, 1, 231, 75, 98, 2, 1, 208, 224, 98, 2, 1,
+    203, 224, 98, 2, 1, 242, 201, 98, 2, 1, 246, 243, 98, 2, 1, 223, 10, 98,
+    2, 1, 242, 138, 98, 2, 1, 246, 101, 98, 2, 1, 193, 207, 98, 2, 1, 223,
+    25, 98, 2, 1, 230, 95, 98, 2, 1, 229, 255, 98, 2, 1, 229, 165, 98, 2, 1,
+    194, 111, 98, 2, 1, 230, 28, 98, 2, 1, 229, 31, 98, 2, 1, 193, 3, 98, 2,
+    1, 251, 97, 199, 110, 1, 168, 199, 110, 1, 193, 125, 199, 110, 1, 193,
+    124, 199, 110, 1, 193, 114, 199, 110, 1, 193, 112, 199, 110, 1, 248, 69,
+    251, 145, 193, 107, 199, 110, 1, 193, 107, 199, 110, 1, 193, 122, 199,
+    110, 1, 193, 119, 199, 110, 1, 193, 121, 199, 110, 1, 193, 120, 199, 110,
+    1, 193, 29, 199, 110, 1, 193, 116, 199, 110, 1, 193, 105, 199, 110, 1,
+    198, 37, 193, 105, 199, 110, 1, 193, 102, 199, 110, 1, 193, 110, 199,
+    110, 1, 248, 69, 251, 145, 193, 110, 199, 110, 1, 198, 37, 193, 110, 199,
+    110, 1, 193, 109, 199, 110, 1, 193, 129, 199, 110, 1, 193, 103, 199, 110,
+    1, 198, 37, 193, 103, 199, 110, 1, 193, 92, 199, 110, 1, 198, 37, 193,
+    92, 199, 110, 1, 193, 22, 199, 110, 1, 193, 71, 199, 110, 1, 251, 70,
+    193, 71, 199, 110, 1, 198, 37, 193, 71, 199, 110, 1, 193, 101, 199, 110,
+    1, 193, 100, 199, 110, 1, 193, 97, 199, 110, 1, 198, 37, 193, 111, 199,
+    110, 1, 198, 37, 193, 95, 199, 110, 1, 193, 93, 199, 110, 1, 192, 214,
+    199, 110, 1, 193, 90, 199, 110, 1, 193, 88, 199, 110, 1, 193, 113, 199,
+    110, 1, 198, 37, 193, 113, 199, 110, 1, 249, 232, 193, 113, 199, 110, 1,
+    193, 87, 199, 110, 1, 193, 85, 199, 110, 1, 193, 86, 199, 110, 1, 193,
+    84, 199, 110, 1, 193, 83, 199, 110, 1, 193, 123, 199, 110, 1, 193, 81,
+    199, 110, 1, 193, 79, 199, 110, 1, 193, 78, 199, 110, 1, 193, 75, 199,
+    110, 1, 193, 72, 199, 110, 1, 200, 91, 193, 72, 199, 110, 1, 193, 70,
+    199, 110, 1, 193, 69, 199, 110, 1, 193, 1, 199, 110, 73, 1, 220, 174, 77,
+    199, 110, 204, 166, 77, 199, 110, 116, 222, 228, 36, 5, 219, 106, 36, 5,
+    216, 84, 36, 5, 207, 47, 36, 5, 202, 204, 36, 5, 203, 210, 36, 5, 247,
+    219, 36, 5, 199, 29, 36, 5, 242, 62, 36, 5, 213, 135, 36, 5, 212, 164,
+    36, 5, 231, 6, 212, 26, 36, 5, 192, 7, 36, 5, 236, 144, 36, 5, 237, 130,
+    36, 5, 222, 232, 36, 5, 199, 175, 36, 5, 242, 187, 36, 5, 210, 64, 36, 5,
+    209, 197, 36, 5, 231, 90, 36, 5, 231, 86, 36, 5, 231, 87, 36, 5, 231, 88,
+    36, 5, 202, 92, 36, 5, 202, 46, 36, 5, 202, 59, 36, 5, 202, 91, 36, 5,
+    202, 64, 36, 5, 202, 65, 36, 5, 202, 51, 36, 5, 246, 181, 36, 5, 246,
+    160, 36, 5, 246, 162, 36, 5, 246, 180, 36, 5, 246, 178, 36, 5, 246, 179,
+    36, 5, 246, 161, 36, 5, 191, 225, 36, 5, 191, 203, 36, 5, 191, 216, 36,
+    5, 191, 224, 36, 5, 191, 219, 36, 5, 191, 220, 36, 5, 191, 208, 36, 5,
+    246, 176, 36, 5, 246, 163, 36, 5, 246, 165, 36, 5, 246, 175, 36, 5, 246,
+    173, 36, 5, 246, 174, 36, 5, 246, 164, 36, 5, 208, 124, 36, 5, 208, 114,
+    36, 5, 208, 120, 36, 5, 208, 123, 36, 5, 208, 121, 36, 5, 208, 122, 36,
+    5, 208, 119, 36, 5, 220, 212, 36, 5, 220, 204, 36, 5, 220, 207, 36, 5,
+    220, 211, 36, 5, 220, 208, 36, 5, 220, 209, 36, 5, 220, 205, 36, 5, 193,
+    164, 36, 5, 193, 151, 36, 5, 193, 159, 36, 5, 193, 163, 36, 5, 193, 161,
+    36, 5, 193, 162, 36, 5, 193, 158, 36, 5, 230, 136, 36, 5, 230, 126, 36,
+    5, 230, 129, 36, 5, 230, 135, 36, 5, 230, 131, 36, 5, 230, 132, 36, 5,
+    230, 128, 38, 42, 1, 248, 123, 38, 42, 1, 196, 123, 38, 42, 1, 231, 70,
+    38, 42, 1, 237, 116, 38, 42, 1, 192, 62, 38, 42, 1, 192, 85, 38, 42, 1,
+    160, 38, 42, 1, 234, 124, 38, 42, 1, 234, 99, 38, 42, 1, 234, 88, 38, 42,
+    1, 74, 38, 42, 1, 210, 181, 38, 42, 1, 234, 21, 38, 42, 1, 234, 9, 38,
+    42, 1, 200, 79, 38, 42, 1, 144, 38, 42, 1, 198, 112, 38, 42, 1, 242, 245,
+    38, 42, 1, 204, 64, 38, 42, 1, 204, 15, 38, 42, 1, 232, 216, 38, 42, 1,
+    234, 5, 38, 42, 1, 64, 38, 42, 1, 223, 251, 38, 42, 1, 236, 163, 38, 42,
+    1, 216, 43, 197, 92, 38, 42, 1, 193, 84, 38, 42, 1, 192, 214, 38, 42, 1,
+    223, 109, 64, 38, 42, 1, 219, 147, 192, 179, 38, 42, 1, 248, 28, 192,
+    179, 38, 42, 1, 223, 109, 248, 28, 192, 179, 51, 250, 208, 201, 150, 217,
+    122, 51, 250, 208, 235, 111, 201, 150, 217, 122, 46, 201, 150, 186, 51,
+    201, 150, 186, 46, 235, 111, 201, 150, 186, 51, 235, 111, 201, 150, 186,
+    208, 39, 223, 132, 217, 122, 208, 39, 235, 111, 223, 132, 217, 122, 235,
+    111, 198, 205, 217, 122, 46, 198, 205, 186, 51, 198, 205, 186, 208, 39,
+    202, 106, 46, 208, 39, 211, 213, 186, 51, 208, 39, 211, 213, 186, 234,
+    172, 238, 220, 210, 242, 232, 138, 210, 242, 207, 168, 232, 138, 210,
+    242, 228, 108, 235, 111, 212, 21, 235, 92, 250, 218, 197, 30, 250, 218,
+    235, 111, 207, 96, 250, 207, 55, 212, 18, 228, 111, 223, 121, 223, 130,
+    211, 41, 247, 160, 228, 112, 4, 237, 14, 199, 91, 4, 207, 82, 58, 46,
+    132, 210, 233, 186, 51, 132, 210, 233, 186, 199, 91, 4, 78, 58, 199, 91,
+    4, 78, 63, 46, 84, 248, 194, 4, 208, 153, 51, 84, 248, 194, 4, 208, 153,
+    198, 249, 46, 138, 186, 198, 249, 51, 138, 186, 247, 188, 46, 138, 186,
+    247, 188, 51, 138, 186, 46, 203, 109, 124, 186, 51, 203, 109, 124, 186,
+    46, 55, 210, 230, 51, 55, 210, 230, 103, 236, 112, 136, 90, 78, 209, 37,
+    90, 78, 136, 103, 236, 112, 209, 37, 108, 232, 119, 78, 209, 37, 232,
+    214, 78, 77, 207, 168, 208, 159, 77, 84, 199, 90, 207, 82, 209, 191, 194,
+    11, 204, 166, 85, 236, 114, 163, 242, 38, 208, 39, 236, 114, 208, 39,
+    242, 38, 163, 204, 180, 237, 239, 4, 46, 230, 180, 237, 239, 4, 51, 230,
+    180, 163, 237, 238, 198, 249, 138, 205, 209, 57, 197, 221, 237, 185, 199,
+    158, 237, 185, 201, 254, 232, 71, 201, 238, 84, 203, 41, 236, 111, 194,
+    58, 84, 219, 175, 246, 224, 55, 228, 111, 207, 168, 242, 38, 55, 219, 48,
+    208, 142, 77, 237, 186, 4, 46, 197, 33, 55, 201, 89, 77, 223, 121, 132,
+    222, 69, 223, 121, 132, 222, 70, 4, 222, 70, 58, 132, 222, 69, 132, 222,
+    70, 4, 236, 114, 55, 202, 31, 242, 38, 235, 111, 202, 189, 198, 170, 237,
+    238, 217, 32, 242, 38, 210, 241, 77, 209, 36, 234, 113, 77, 238, 221,
+    196, 107, 236, 177, 238, 184, 210, 199, 4, 51, 238, 182, 238, 184, 210,
+    199, 4, 46, 238, 182, 199, 66, 3, 6, 233, 242, 12, 48, 207, 198, 12, 48,
+    242, 95, 12, 48, 205, 212, 101, 12, 48, 205, 212, 104, 12, 48, 205, 212,
+    133, 12, 48, 210, 116, 12, 48, 247, 173, 12, 48, 200, 164, 12, 48, 221,
+    125, 101, 12, 48, 221, 125, 104, 12, 48, 236, 174, 12, 48, 205, 216, 12,
+    48, 2, 101, 12, 48, 2, 104, 12, 48, 220, 89, 101, 12, 48, 220, 89, 104,
+    12, 48, 220, 89, 133, 12, 48, 220, 89, 134, 12, 48, 202, 224, 12, 48,
+    199, 162, 12, 48, 202, 221, 101, 12, 48, 202, 221, 104, 12, 48, 229, 234,
+    101, 12, 48, 229, 234, 104, 12, 48, 230, 62, 12, 48, 208, 28, 12, 48,
+    242, 184, 12, 48, 201, 123, 12, 48, 216, 29, 12, 48, 237, 113, 12, 48,
+    216, 18, 12, 48, 242, 113, 12, 48, 194, 130, 101, 12, 48, 194, 130, 104,
+    12, 48, 232, 231, 12, 48, 210, 194, 101, 12, 48, 210, 194, 104, 12, 48,
+    203, 82, 138, 198, 196, 198, 123, 12, 48, 238, 205, 12, 48, 236, 134, 12,
+    48, 223, 57, 12, 48, 247, 211, 80, 242, 78, 12, 48, 233, 181, 12, 48,
+    202, 130, 101, 12, 48, 202, 130, 104, 12, 48, 248, 209, 12, 48, 203, 89,
+    12, 48, 247, 49, 203, 89, 12, 48, 214, 183, 101, 12, 48, 214, 183, 104,
+    12, 48, 214, 183, 133, 12, 48, 214, 183, 134, 12, 48, 216, 247, 12, 48,
+    204, 6, 12, 48, 208, 34, 12, 48, 233, 211, 12, 48, 211, 225, 12, 48, 247,
+    132, 101, 12, 48, 247, 132, 104, 12, 48, 217, 40, 12, 48, 216, 24, 12,
+    48, 230, 214, 101, 12, 48, 230, 214, 104, 12, 48, 230, 214, 133, 12, 48,
+    199, 108, 12, 48, 242, 77, 12, 48, 194, 91, 101, 12, 48, 194, 91, 104,
+    12, 48, 247, 49, 205, 205, 12, 48, 203, 82, 228, 208, 12, 48, 228, 208,
+    12, 48, 247, 49, 202, 143, 12, 48, 247, 49, 204, 1, 12, 48, 232, 149, 12,
+    48, 247, 49, 246, 200, 12, 48, 203, 82, 194, 153, 12, 48, 194, 154, 101,
+    12, 48, 194, 154, 104, 12, 48, 242, 116, 12, 48, 247, 49, 230, 245, 12,
+    48, 184, 101, 12, 48, 184, 104, 12, 48, 247, 49, 219, 84, 12, 48, 247,
+    49, 231, 184, 12, 48, 216, 13, 101, 12, 48, 216, 13, 104, 12, 48, 208,
+    41, 12, 48, 247, 223, 12, 48, 247, 49, 200, 118, 220, 34, 12, 48, 247,
+    49, 220, 37, 12, 48, 247, 49, 194, 52, 12, 48, 247, 49, 232, 168, 12, 48,
+    234, 183, 101, 12, 48, 234, 183, 104, 12, 48, 234, 183, 133, 12, 48, 247,
+    49, 234, 182, 12, 48, 229, 245, 12, 48, 247, 49, 228, 204, 12, 48, 247,
+    207, 12, 48, 231, 54, 12, 48, 247, 49, 232, 224, 12, 48, 247, 49, 248,
+    13, 12, 48, 247, 49, 206, 55, 12, 48, 203, 82, 194, 81, 12, 48, 203, 82,
+    193, 61, 12, 48, 247, 49, 232, 90, 12, 48, 223, 64, 233, 216, 12, 48,
+    247, 49, 233, 216, 12, 48, 223, 64, 198, 251, 12, 48, 247, 49, 198, 251,
+    12, 48, 223, 64, 235, 84, 12, 48, 247, 49, 235, 84, 12, 48, 198, 6, 12,
+    48, 223, 64, 198, 6, 12, 48, 247, 49, 198, 6, 81, 48, 101, 81, 48, 219,
+    175, 81, 48, 236, 114, 81, 48, 203, 4, 81, 48, 205, 211, 81, 48, 128, 81,
+    48, 104, 81, 48, 219, 204, 81, 48, 217, 160, 81, 48, 220, 13, 81, 48,
+    234, 62, 81, 48, 174, 81, 48, 142, 247, 173, 81, 48, 238, 208, 81, 48,
+    228, 49, 81, 48, 200, 164, 81, 48, 211, 184, 247, 173, 81, 48, 221, 124,
+    81, 48, 209, 138, 81, 48, 194, 0, 81, 48, 202, 119, 81, 48, 51, 211, 184,
+    247, 173, 81, 48, 229, 166, 234, 83, 81, 48, 200, 30, 81, 48, 236, 174,
+    81, 48, 205, 216, 81, 48, 242, 95, 81, 48, 209, 88, 81, 48, 251, 79, 81,
+    48, 216, 4, 81, 48, 234, 83, 81, 48, 234, 189, 81, 48, 205, 245, 81, 48,
+    230, 254, 81, 48, 230, 255, 202, 238, 81, 48, 233, 215, 81, 48, 248, 27,
+    81, 48, 194, 23, 81, 48, 242, 206, 81, 48, 207, 27, 81, 48, 223, 186, 81,
+    48, 202, 236, 81, 48, 220, 88, 81, 48, 238, 218, 81, 48, 202, 110, 81,
+    48, 216, 9, 81, 48, 207, 69, 81, 48, 194, 8, 81, 48, 211, 202, 81, 48,
+    198, 14, 81, 48, 235, 64, 81, 48, 203, 195, 199, 162, 81, 48, 235, 111,
+    242, 95, 81, 48, 184, 201, 214, 81, 48, 103, 230, 37, 81, 48, 203, 201,
+    81, 48, 247, 180, 81, 48, 202, 220, 81, 48, 247, 139, 81, 48, 201, 253,
+    81, 48, 229, 233, 81, 48, 230, 79, 81, 48, 236, 118, 81, 48, 230, 62, 81,
+    48, 247, 160, 81, 48, 208, 28, 81, 48, 205, 229, 81, 48, 236, 208, 81,
+    48, 249, 237, 81, 48, 202, 106, 81, 48, 213, 110, 81, 48, 201, 123, 81,
+    48, 206, 1, 81, 48, 216, 29, 81, 48, 198, 195, 81, 48, 220, 170, 81, 48,
+    201, 238, 81, 48, 237, 113, 81, 48, 194, 106, 81, 48, 236, 147, 213, 110,
+    81, 48, 242, 34, 81, 48, 232, 64, 81, 48, 242, 107, 81, 48, 202, 3, 81,
+    48, 194, 129, 81, 48, 232, 231, 81, 48, 242, 103, 81, 48, 233, 54, 81,
+    48, 55, 193, 223, 81, 48, 138, 198, 196, 198, 123, 81, 48, 202, 251, 81,
+    48, 233, 66, 81, 48, 238, 205, 81, 48, 236, 134, 81, 48, 209, 84, 81, 48,
+    223, 57, 81, 48, 217, 14, 81, 48, 199, 89, 81, 48, 201, 70, 81, 48, 219,
+    198, 81, 48, 197, 8, 81, 48, 233, 9, 81, 48, 247, 211, 80, 242, 78, 81,
+    48, 203, 115, 81, 48, 235, 111, 200, 22, 81, 48, 194, 75, 81, 48, 203,
+    13, 81, 48, 236, 194, 81, 48, 233, 181, 81, 48, 202, 146, 81, 48, 54, 81,
+    48, 201, 240, 81, 48, 202, 129, 81, 48, 198, 222, 81, 48, 230, 223, 81,
+    48, 246, 186, 81, 48, 202, 24, 81, 48, 248, 209, 81, 48, 207, 139, 81,
+    48, 203, 89, 81, 48, 223, 49, 81, 48, 214, 182, 81, 48, 204, 6, 81, 48,
+    233, 42, 81, 48, 211, 225, 81, 48, 250, 217, 81, 48, 209, 214, 81, 48,
+    234, 193, 81, 48, 247, 131, 81, 48, 217, 40, 81, 48, 216, 114, 81, 48,
+    204, 187, 81, 48, 250, 81, 81, 48, 216, 24, 81, 48, 199, 0, 81, 48, 211,
+    171, 81, 48, 247, 215, 81, 48, 201, 236, 81, 48, 242, 46, 81, 48, 230,
+    213, 81, 48, 199, 108, 81, 48, 223, 149, 81, 48, 247, 229, 81, 48, 194,
+    154, 234, 83, 81, 48, 242, 77, 81, 48, 194, 90, 81, 48, 205, 205, 81, 48,
+    228, 208, 81, 48, 202, 143, 81, 48, 196, 149, 81, 48, 248, 118, 81, 48,
+    210, 14, 81, 48, 248, 239, 81, 48, 204, 1, 81, 48, 207, 236, 81, 48, 206,
+    195, 81, 48, 232, 149, 81, 48, 247, 213, 81, 48, 246, 200, 81, 48, 247,
+    253, 81, 48, 216, 26, 81, 48, 194, 153, 81, 48, 242, 116, 81, 48, 194,
+    48, 81, 48, 236, 186, 81, 48, 196, 21, 81, 48, 230, 245, 81, 48, 219, 84,
+    81, 48, 231, 184, 81, 48, 216, 12, 81, 48, 203, 3, 81, 48, 203, 195, 200,
+    146, 248, 13, 81, 48, 208, 41, 81, 48, 247, 223, 81, 48, 193, 246, 81,
+    48, 233, 91, 81, 48, 220, 34, 81, 48, 200, 118, 220, 34, 81, 48, 220, 30,
+    81, 48, 202, 173, 81, 48, 220, 37, 81, 48, 194, 52, 81, 48, 232, 168, 81,
+    48, 234, 182, 81, 48, 229, 245, 81, 48, 232, 107, 81, 48, 228, 204, 81,
+    48, 247, 207, 81, 48, 200, 131, 81, 48, 230, 86, 81, 48, 233, 2, 81, 48,
+    206, 88, 194, 48, 81, 48, 246, 188, 81, 48, 231, 54, 81, 48, 232, 224,
+    81, 48, 248, 13, 81, 48, 206, 55, 81, 48, 237, 98, 81, 48, 194, 81, 81,
+    48, 229, 209, 81, 48, 193, 61, 81, 48, 216, 125, 81, 48, 247, 248, 81,
+    48, 234, 95, 81, 48, 232, 90, 81, 48, 198, 167, 81, 48, 235, 67, 81, 48,
+    208, 22, 81, 48, 213, 112, 81, 48, 233, 216, 81, 48, 198, 251, 81, 48,
+    235, 84, 81, 48, 198, 6, 81, 48, 232, 171, 149, 237, 57, 246, 100, 46,
+    115, 207, 101, 149, 237, 57, 246, 100, 95, 115, 63, 149, 237, 57, 246,
+    100, 46, 115, 85, 26, 207, 101, 149, 237, 57, 246, 100, 95, 115, 85, 26,
+    63, 149, 237, 57, 246, 100, 232, 71, 201, 93, 149, 237, 57, 246, 100,
+    201, 94, 232, 89, 58, 149, 237, 57, 246, 100, 201, 94, 232, 89, 63, 149,
+    237, 57, 246, 100, 201, 94, 232, 89, 220, 28, 149, 237, 57, 246, 100,
+    201, 94, 232, 89, 113, 220, 28, 149, 237, 57, 246, 100, 201, 94, 232, 89,
+    113, 207, 101, 149, 237, 57, 246, 100, 201, 94, 232, 89, 106, 220, 28,
+    149, 237, 57, 246, 100, 211, 114, 149, 202, 160, 149, 242, 38, 149, 232,
+    71, 201, 238, 236, 183, 77, 223, 50, 223, 169, 202, 23, 109, 149, 223,
+    80, 77, 149, 242, 80, 77, 149, 31, 192, 76, 46, 250, 208, 186, 51, 250,
+    208, 186, 46, 55, 250, 208, 186, 51, 55, 250, 208, 186, 46, 238, 224,
+    186, 51, 238, 224, 186, 46, 62, 238, 224, 186, 51, 62, 238, 224, 186, 46,
+    60, 219, 247, 186, 51, 60, 219, 247, 186, 209, 153, 77, 231, 123, 77, 46,
+    198, 237, 204, 2, 186, 51, 198, 237, 204, 2, 186, 46, 62, 219, 247, 186,
+    51, 62, 219, 247, 186, 46, 62, 198, 237, 204, 2, 186, 51, 62, 198, 237,
+    204, 2, 186, 46, 62, 50, 186, 51, 62, 50, 186, 194, 125, 237, 185, 207,
+    168, 55, 209, 100, 208, 142, 77, 55, 209, 100, 208, 142, 77, 132, 55,
+    209, 100, 208, 142, 77, 209, 153, 122, 233, 91, 230, 34, 212, 234, 101,
+    230, 34, 212, 234, 104, 230, 34, 212, 234, 133, 230, 34, 212, 234, 134,
+    230, 34, 212, 234, 151, 230, 34, 212, 234, 170, 230, 34, 212, 234, 179,
+    230, 34, 212, 234, 174, 230, 34, 212, 234, 182, 149, 219, 228, 158, 77,
+    149, 207, 73, 158, 77, 149, 237, 66, 158, 77, 149, 234, 61, 158, 77, 30,
+    203, 74, 78, 158, 77, 30, 55, 78, 158, 77, 194, 121, 237, 185, 84, 222,
+    120, 207, 199, 77, 84, 222, 120, 207, 199, 4, 195, 248, 202, 174, 77, 84,
+    222, 120, 207, 199, 122, 113, 230, 78, 84, 222, 120, 207, 199, 4, 195,
+    248, 202, 174, 122, 113, 230, 78, 84, 222, 120, 207, 199, 122, 106, 230,
+    78, 47, 209, 153, 77, 149, 200, 44, 219, 176, 233, 39, 204, 166, 109,
+    230, 34, 212, 234, 200, 30, 230, 34, 212, 234, 197, 239, 230, 34, 212,
+    234, 199, 184, 84, 149, 223, 80, 77, 217, 102, 77, 210, 224, 250, 245,
+    77, 149, 65, 223, 172, 149, 138, 232, 250, 202, 160, 229, 140, 1, 2, 64,
+    229, 140, 1, 64, 229, 140, 1, 2, 70, 229, 140, 1, 70, 229, 140, 1, 2, 68,
+    229, 140, 1, 68, 229, 140, 1, 2, 71, 229, 140, 1, 71, 229, 140, 1, 2, 74,
+    229, 140, 1, 74, 229, 140, 1, 160, 229, 140, 1, 231, 233, 229, 140, 1,
+    221, 204, 229, 140, 1, 231, 46, 229, 140, 1, 221, 33, 229, 140, 1, 230,
+    186, 229, 140, 1, 222, 57, 229, 140, 1, 231, 158, 229, 140, 1, 221, 113,
+    229, 140, 1, 230, 254, 229, 140, 1, 188, 229, 140, 1, 192, 112, 229, 140,
+    1, 203, 125, 229, 140, 1, 192, 30, 229, 140, 1, 201, 184, 229, 140, 1,
+    191, 252, 229, 140, 1, 205, 223, 229, 140, 1, 192, 85, 229, 140, 1, 202,
+    212, 229, 140, 1, 192, 8, 229, 140, 1, 189, 229, 140, 1, 238, 0, 229,
+    140, 1, 199, 128, 229, 140, 1, 237, 16, 229, 140, 1, 2, 198, 45, 229,
+    140, 1, 198, 45, 229, 140, 1, 235, 62, 229, 140, 1, 200, 79, 229, 140, 1,
+    237, 116, 229, 140, 1, 155, 229, 140, 1, 236, 146, 229, 140, 1, 181, 229,
+    140, 1, 214, 60, 229, 140, 1, 213, 22, 229, 140, 1, 214, 214, 229, 140,
+    1, 213, 142, 229, 140, 1, 144, 229, 140, 1, 249, 3, 229, 140, 1, 166,
+    229, 140, 1, 229, 178, 229, 140, 1, 248, 41, 229, 140, 1, 210, 51, 229,
+    140, 1, 228, 181, 229, 140, 1, 247, 124, 229, 140, 1, 209, 51, 229, 140,
+    1, 229, 255, 229, 140, 1, 248, 123, 229, 140, 1, 210, 181, 229, 140, 1,
+    229, 43, 229, 140, 1, 247, 220, 229, 140, 1, 209, 198, 229, 140, 1, 172,
+    229, 140, 1, 216, 175, 229, 140, 1, 215, 241, 229, 140, 1, 217, 48, 229,
+    140, 1, 216, 91, 229, 140, 1, 2, 168, 229, 140, 1, 168, 229, 140, 1, 2,
+    192, 214, 229, 140, 1, 192, 214, 229, 140, 1, 2, 193, 1, 229, 140, 1,
+    193, 1, 229, 140, 1, 167, 229, 140, 1, 207, 151, 229, 140, 1, 206, 218,
+    229, 140, 1, 208, 7, 229, 140, 1, 207, 55, 229, 140, 1, 2, 194, 169, 229,
+    140, 1, 194, 169, 229, 140, 1, 194, 72, 229, 140, 1, 194, 111, 229, 140,
+    1, 194, 36, 229, 140, 1, 215, 151, 229, 140, 1, 194, 223, 229, 140, 1, 2,
+    160, 229, 140, 1, 2, 222, 57, 38, 222, 82, 195, 248, 202, 174, 77, 38,
+    222, 82, 204, 185, 202, 174, 77, 222, 82, 195, 248, 202, 174, 77, 222,
+    82, 204, 185, 202, 174, 77, 229, 140, 223, 80, 77, 229, 140, 195, 248,
+    223, 80, 77, 229, 140, 236, 231, 192, 231, 222, 82, 55, 228, 111, 75, 1,
+    2, 64, 75, 1, 64, 75, 1, 2, 70, 75, 1, 70, 75, 1, 2, 68, 75, 1, 68, 75,
+    1, 2, 71, 75, 1, 71, 75, 1, 2, 74, 75, 1, 74, 75, 1, 160, 75, 1, 231,
+    233, 75, 1, 221, 204, 75, 1, 231, 46, 75, 1, 221, 33, 75, 1, 230, 186,
+    75, 1, 222, 57, 75, 1, 231, 158, 75, 1, 221, 113, 75, 1, 230, 254, 75, 1,
+    188, 75, 1, 192, 112, 75, 1, 203, 125, 75, 1, 192, 30, 75, 1, 201, 184,
+    75, 1, 191, 252, 75, 1, 205, 223, 75, 1, 192, 85, 75, 1, 202, 212, 75, 1,
+    192, 8, 75, 1, 189, 75, 1, 238, 0, 75, 1, 199, 128, 75, 1, 237, 16, 75,
+    1, 2, 198, 45, 75, 1, 198, 45, 75, 1, 235, 62, 75, 1, 200, 79, 75, 1,
+    237, 116, 75, 1, 155, 75, 1, 236, 146, 75, 1, 181, 75, 1, 214, 60, 75, 1,
+    213, 22, 75, 1, 214, 214, 75, 1, 213, 142, 75, 1, 144, 75, 1, 249, 3, 75,
+    1, 166, 75, 1, 229, 178, 75, 1, 248, 41, 75, 1, 210, 51, 75, 1, 228, 181,
+    75, 1, 247, 124, 75, 1, 209, 51, 75, 1, 229, 255, 75, 1, 248, 123, 75, 1,
+    210, 181, 75, 1, 229, 43, 75, 1, 247, 220, 75, 1, 209, 198, 75, 1, 172,
+    75, 1, 216, 175, 75, 1, 215, 241, 75, 1, 217, 48, 75, 1, 216, 91, 75, 1,
+    2, 168, 75, 1, 168, 75, 1, 2, 192, 214, 75, 1, 192, 214, 75, 1, 2, 193,
+    1, 75, 1, 193, 1, 75, 1, 167, 75, 1, 207, 151, 75, 1, 206, 218, 75, 1,
+    208, 7, 75, 1, 207, 55, 75, 1, 2, 194, 169, 75, 1, 194, 169, 75, 1, 194,
+    72, 75, 1, 194, 111, 75, 1, 194, 36, 75, 1, 215, 151, 75, 1, 194, 223,
+    75, 1, 2, 160, 75, 1, 2, 222, 57, 75, 1, 196, 157, 75, 1, 196, 39, 75, 1,
+    196, 123, 75, 1, 195, 252, 75, 85, 236, 114, 222, 82, 209, 76, 202, 174,
+    77, 75, 223, 80, 77, 75, 195, 248, 223, 80, 77, 75, 236, 231, 221, 75,
+    247, 197, 1, 249, 226, 247, 197, 1, 211, 93, 247, 197, 1, 218, 236, 247,
+    197, 1, 233, 163, 247, 197, 1, 238, 95, 247, 197, 1, 200, 228, 247, 197,
+    1, 215, 151, 247, 197, 1, 165, 247, 197, 1, 232, 44, 247, 197, 1, 222,
+    184, 247, 197, 1, 230, 124, 247, 197, 1, 223, 65, 247, 197, 1, 208, 247,
+    247, 197, 1, 193, 223, 247, 197, 1, 192, 72, 247, 197, 1, 246, 119, 247,
+    197, 1, 204, 66, 247, 197, 1, 150, 247, 197, 1, 192, 155, 247, 197, 1,
+    247, 52, 247, 197, 1, 206, 158, 247, 197, 1, 64, 247, 197, 1, 74, 247,
+    197, 1, 71, 247, 197, 1, 234, 157, 247, 197, 1, 251, 63, 247, 197, 1,
+    234, 150, 247, 197, 1, 250, 8, 247, 197, 1, 211, 130, 247, 197, 1, 250,
+    224, 247, 197, 1, 234, 88, 247, 197, 1, 250, 214, 247, 197, 1, 234, 73,
+    247, 197, 1, 234, 21, 247, 197, 1, 70, 247, 197, 1, 68, 247, 197, 1, 223,
+    78, 247, 197, 1, 196, 236, 247, 197, 1, 214, 167, 247, 197, 1, 231, 2,
+    247, 197, 1, 223, 225, 247, 197, 1, 185, 4, 78, 58, 247, 197, 1, 213,
+    179, 30, 1, 221, 151, 30, 1, 202, 84, 30, 1, 221, 144, 30, 1, 214, 45,
+    30, 1, 214, 43, 30, 1, 214, 42, 30, 1, 199, 103, 30, 1, 202, 73, 30, 1,
+    207, 133, 30, 1, 207, 128, 30, 1, 207, 125, 30, 1, 207, 118, 30, 1, 207,
+    113, 30, 1, 207, 108, 30, 1, 207, 119, 30, 1, 207, 131, 30, 1, 216, 153,
+    30, 1, 210, 36, 30, 1, 202, 81, 30, 1, 210, 25, 30, 1, 203, 64, 30, 1,
+    202, 78, 30, 1, 223, 247, 30, 1, 242, 144, 30, 1, 202, 88, 30, 1, 242,
+    211, 30, 1, 221, 225, 30, 1, 199, 198, 30, 1, 210, 75, 30, 1, 229, 162,
+    30, 1, 64, 30, 1, 251, 108, 30, 1, 168, 30, 1, 193, 118, 30, 1, 234, 50,
+    30, 1, 71, 30, 1, 193, 56, 30, 1, 193, 69, 30, 1, 74, 30, 1, 194, 169,
+    30, 1, 194, 160, 30, 1, 212, 0, 30, 1, 193, 1, 30, 1, 68, 30, 1, 194, 93,
+    30, 1, 194, 111, 30, 1, 194, 72, 30, 1, 192, 214, 30, 1, 233, 230, 30, 1,
+    193, 22, 30, 1, 70, 30, 232, 247, 30, 1, 202, 82, 30, 1, 214, 35, 30, 1,
+    214, 37, 30, 1, 214, 40, 30, 1, 207, 126, 30, 1, 207, 107, 30, 1, 207,
+    115, 30, 1, 207, 120, 30, 1, 207, 105, 30, 1, 216, 146, 30, 1, 216, 143,
+    30, 1, 216, 147, 30, 1, 222, 105, 30, 1, 210, 31, 30, 1, 210, 17, 30, 1,
+    210, 23, 30, 1, 210, 20, 30, 1, 210, 34, 30, 1, 210, 18, 30, 1, 222, 103,
+    30, 1, 222, 101, 30, 1, 203, 57, 30, 1, 203, 55, 30, 1, 203, 47, 30, 1,
+    203, 52, 30, 1, 203, 62, 30, 1, 211, 8, 30, 1, 202, 85, 30, 1, 193, 46,
+    30, 1, 193, 40, 30, 1, 193, 41, 30, 1, 222, 104, 30, 1, 202, 86, 30, 1,
+    193, 52, 30, 1, 192, 245, 30, 1, 192, 244, 30, 1, 192, 247, 30, 1, 192,
+    201, 30, 1, 192, 202, 30, 1, 192, 205, 30, 1, 250, 123, 30, 1, 250, 117,
+    149, 250, 193, 219, 164, 77, 149, 250, 193, 207, 169, 77, 149, 250, 193,
+    90, 77, 149, 250, 193, 103, 77, 149, 250, 193, 112, 77, 149, 250, 193,
+    232, 119, 77, 149, 250, 193, 198, 249, 77, 149, 250, 193, 85, 77, 149,
+    250, 193, 247, 188, 77, 149, 250, 193, 232, 226, 77, 149, 250, 193, 205,
+    212, 77, 149, 250, 193, 199, 192, 77, 149, 250, 193, 232, 112, 77, 149,
+    250, 193, 229, 230, 77, 149, 250, 193, 234, 190, 77, 149, 250, 193, 217,
+    161, 77, 247, 197, 1, 247, 124, 247, 197, 1, 192, 30, 247, 197, 1, 223,
+    20, 247, 197, 1, 230, 186, 247, 197, 1, 234, 171, 247, 197, 1, 234, 70,
+    247, 197, 1, 211, 194, 247, 197, 1, 211, 198, 247, 197, 1, 223, 105, 247,
+    197, 1, 250, 195, 247, 197, 1, 223, 156, 247, 197, 1, 197, 47, 247, 197,
+    1, 223, 207, 247, 197, 1, 214, 145, 247, 197, 1, 251, 56, 247, 197, 1,
+    250, 3, 247, 197, 1, 250, 241, 247, 197, 1, 211, 219, 247, 197, 1, 211,
+    201, 247, 197, 1, 223, 153, 247, 197, 52, 1, 211, 93, 247, 197, 52, 1,
+    200, 228, 247, 197, 52, 1, 222, 184, 247, 197, 52, 1, 230, 124, 247, 197,
+    1, 231, 85, 247, 197, 1, 219, 223, 247, 197, 1, 191, 232, 247, 197, 52,
+    1, 232, 44, 247, 197, 1, 230, 144, 247, 197, 1, 220, 239, 247, 197, 1,
+    212, 0, 247, 197, 1, 251, 72, 12, 201, 208, 200, 228, 12, 201, 208, 194,
+    84, 12, 201, 208, 193, 198, 12, 201, 208, 247, 65, 12, 201, 208, 201, 80,
+    12, 201, 208, 228, 101, 12, 201, 208, 228, 105, 12, 201, 208, 228, 190,
+    12, 201, 208, 228, 102, 12, 201, 208, 200, 231, 12, 201, 208, 228, 104,
+    12, 201, 208, 228, 100, 12, 201, 208, 228, 188, 12, 201, 208, 228, 103,
+    12, 201, 208, 228, 99, 12, 201, 208, 215, 151, 12, 201, 208, 230, 124,
+    12, 201, 208, 206, 158, 12, 201, 208, 211, 93, 12, 201, 208, 202, 163,
+    12, 201, 208, 238, 95, 12, 201, 208, 228, 106, 12, 201, 208, 229, 188,
+    12, 201, 208, 200, 240, 12, 201, 208, 201, 57, 12, 201, 208, 202, 35, 12,
+    201, 208, 204, 72, 12, 201, 208, 210, 185, 12, 201, 208, 208, 249, 12,
+    201, 208, 199, 37, 12, 201, 208, 200, 230, 12, 201, 208, 201, 69, 12,
+    201, 208, 228, 116, 12, 201, 208, 228, 98, 12, 201, 208, 210, 96, 12,
+    201, 208, 208, 247, 75, 1, 2, 221, 33, 75, 1, 2, 203, 125, 75, 1, 2, 201,
+    184, 75, 1, 2, 155, 75, 1, 2, 213, 22, 75, 1, 2, 144, 75, 1, 2, 229, 178,
+    75, 1, 2, 228, 181, 75, 1, 2, 229, 255, 75, 1, 2, 229, 43, 75, 1, 2, 215,
+    241, 75, 1, 2, 167, 75, 1, 2, 207, 151, 75, 1, 2, 206, 218, 75, 1, 2,
+    208, 7, 75, 1, 2, 207, 55, 125, 30, 221, 151, 125, 30, 214, 45, 125, 30,
+    199, 103, 125, 30, 207, 133, 125, 30, 216, 153, 125, 30, 210, 36, 125,
+    30, 203, 64, 125, 30, 223, 247, 125, 30, 242, 144, 125, 30, 242, 211,
+    125, 30, 221, 225, 125, 30, 199, 198, 125, 30, 210, 75, 125, 30, 229,
+    162, 125, 30, 221, 152, 64, 125, 30, 214, 46, 64, 125, 30, 199, 104, 64,
+    125, 30, 207, 134, 64, 125, 30, 216, 154, 64, 125, 30, 210, 37, 64, 125,
+    30, 203, 65, 64, 125, 30, 223, 248, 64, 125, 30, 242, 145, 64, 125, 30,
+    242, 212, 64, 125, 30, 221, 226, 64, 125, 30, 199, 199, 64, 125, 30, 210,
+    76, 64, 125, 30, 229, 163, 64, 125, 30, 242, 145, 68, 125, 221, 79, 246,
+    100, 211, 234, 125, 221, 79, 246, 100, 185, 228, 181, 125, 228, 39, 101,
+    125, 228, 39, 104, 125, 228, 39, 133, 125, 228, 39, 134, 125, 228, 39,
+    151, 125, 228, 39, 170, 125, 228, 39, 179, 125, 228, 39, 174, 125, 228,
+    39, 182, 125, 228, 39, 200, 30, 125, 228, 39, 216, 29, 125, 228, 39, 232,
+    231, 125, 228, 39, 194, 129, 125, 228, 39, 194, 16, 125, 228, 39, 216,
+    240, 125, 228, 39, 234, 189, 125, 228, 39, 201, 123, 125, 228, 39, 201,
+    241, 125, 228, 39, 230, 9, 125, 228, 39, 202, 201, 125, 228, 39, 215, 62,
+    125, 228, 39, 202, 145, 125, 228, 39, 232, 242, 125, 228, 39, 239, 14,
+    125, 228, 39, 220, 173, 125, 228, 39, 207, 192, 125, 228, 39, 246, 253,
+    125, 228, 39, 201, 190, 125, 228, 39, 201, 103, 125, 228, 39, 234, 60,
+    125, 228, 39, 207, 182, 125, 228, 39, 251, 4, 125, 228, 39, 233, 19, 125,
+    228, 39, 207, 180, 125, 228, 39, 204, 187, 125, 228, 39, 208, 2, 47, 228,
+    39, 208, 158, 47, 228, 39, 221, 178, 47, 228, 39, 205, 243, 47, 228, 39,
+    221, 75, 47, 31, 200, 31, 211, 212, 60, 202, 106, 47, 31, 197, 240, 211,
+    212, 60, 202, 106, 47, 31, 199, 185, 211, 212, 60, 202, 106, 47, 31, 232,
+    127, 211, 212, 60, 202, 106, 47, 31, 233, 4, 211, 212, 60, 202, 106, 47,
+    31, 203, 26, 211, 212, 60, 202, 106, 47, 31, 204, 141, 211, 212, 60, 202,
+    106, 47, 31, 234, 138, 211, 212, 60, 202, 106, 210, 220, 57, 47, 31, 197,
+    240, 101, 47, 31, 197, 240, 104, 47, 31, 197, 240, 133, 47, 31, 197, 240,
+    134, 47, 31, 197, 240, 151, 47, 31, 197, 240, 170, 47, 31, 197, 240, 179,
+    47, 31, 197, 240, 174, 47, 31, 197, 240, 182, 47, 31, 199, 184, 47, 31,
+    199, 185, 101, 47, 31, 199, 185, 104, 47, 31, 199, 185, 133, 47, 31, 199,
+    185, 134, 47, 31, 199, 185, 151, 47, 30, 221, 151, 47, 30, 214, 45, 47,
+    30, 199, 103, 47, 30, 207, 133, 47, 30, 216, 153, 47, 30, 210, 36, 47,
+    30, 203, 64, 47, 30, 223, 247, 47, 30, 242, 144, 47, 30, 242, 211, 47,
+    30, 221, 225, 47, 30, 199, 198, 47, 30, 210, 75, 47, 30, 229, 162, 47,
+    30, 221, 152, 64, 47, 30, 214, 46, 64, 47, 30, 199, 104, 64, 47, 30, 207,
+    134, 64, 47, 30, 216, 154, 64, 47, 30, 210, 37, 64, 47, 30, 203, 65, 64,
+    47, 30, 223, 248, 64, 47, 30, 242, 145, 64, 47, 30, 242, 212, 64, 47, 30,
+    221, 226, 64, 47, 30, 199, 199, 64, 47, 30, 210, 76, 64, 47, 30, 229,
+    163, 64, 47, 221, 79, 246, 100, 246, 107, 47, 221, 79, 246, 100, 222,
+    210, 47, 30, 223, 248, 68, 221, 79, 202, 23, 109, 47, 228, 39, 101, 47,
+    228, 39, 104, 47, 228, 39, 133, 47, 228, 39, 134, 47, 228, 39, 151, 47,
+    228, 39, 170, 47, 228, 39, 179, 47, 228, 39, 174, 47, 228, 39, 182, 47,
+    228, 39, 200, 30, 47, 228, 39, 216, 29, 47, 228, 39, 232, 231, 47, 228,
+    39, 194, 129, 47, 228, 39, 194, 16, 47, 228, 39, 216, 240, 47, 228, 39,
+    234, 189, 47, 228, 39, 201, 123, 47, 228, 39, 201, 241, 47, 228, 39, 230,
+    9, 47, 228, 39, 202, 201, 47, 228, 39, 215, 62, 47, 228, 39, 202, 145,
+    47, 228, 39, 232, 242, 47, 228, 39, 239, 14, 47, 228, 39, 220, 173, 47,
+    228, 39, 205, 210, 47, 228, 39, 217, 165, 47, 228, 39, 233, 29, 47, 228,
+    39, 201, 135, 47, 228, 39, 233, 208, 47, 228, 39, 209, 95, 47, 228, 39,
+    250, 12, 47, 228, 39, 223, 81, 47, 228, 39, 207, 180, 47, 228, 39, 238,
+    229, 47, 228, 39, 238, 217, 47, 228, 39, 229, 155, 47, 228, 39, 246, 137,
+    47, 228, 39, 219, 52, 47, 228, 39, 220, 28, 47, 228, 39, 207, 101, 47,
+    228, 39, 217, 33, 47, 228, 39, 207, 210, 47, 228, 39, 201, 190, 47, 228,
+    39, 201, 103, 47, 228, 39, 234, 60, 47, 228, 39, 207, 182, 47, 228, 39,
+    251, 4, 47, 228, 39, 214, 31, 47, 31, 199, 185, 170, 47, 31, 199, 185,
+    179, 47, 31, 199, 185, 174, 47, 31, 199, 185, 182, 47, 31, 232, 126, 47,
+    31, 232, 127, 101, 47, 31, 232, 127, 104, 47, 31, 232, 127, 133, 47, 31,
+    232, 127, 134, 47, 31, 232, 127, 151, 47, 31, 232, 127, 170, 47, 31, 232,
+    127, 179, 47, 31, 232, 127, 174, 47, 31, 232, 127, 182, 47, 31, 233, 3,
+    149, 200, 44, 16, 39, 223, 52, 149, 200, 44, 16, 39, 233, 41, 149, 200,
+    44, 16, 39, 217, 129, 149, 200, 44, 16, 39, 250, 137, 149, 200, 44, 16,
+    39, 217, 92, 149, 200, 44, 16, 39, 222, 207, 149, 200, 44, 16, 39, 222,
+    208, 149, 200, 44, 16, 39, 250, 4, 149, 200, 44, 16, 39, 204, 164, 149,
+    200, 44, 16, 39, 212, 6, 149, 200, 44, 16, 39, 213, 98, 149, 200, 44, 16,
+    39, 237, 110, 50, 229, 188, 50, 234, 17, 50, 233, 218, 219, 181, 219,
+    208, 57, 47, 75, 64, 47, 75, 70, 47, 75, 68, 47, 75, 71, 47, 75, 74, 47,
+    75, 160, 47, 75, 221, 204, 47, 75, 221, 33, 47, 75, 222, 57, 47, 75, 221,
+    113, 47, 75, 188, 47, 75, 203, 125, 47, 75, 201, 184, 47, 75, 205, 223,
+    47, 75, 202, 212, 47, 75, 189, 47, 75, 199, 128, 47, 75, 198, 45, 47, 75,
+    200, 79, 47, 75, 155, 47, 75, 181, 47, 75, 214, 60, 47, 75, 213, 22, 47,
+    75, 214, 214, 47, 75, 213, 142, 47, 75, 144, 47, 75, 229, 178, 47, 75,
+    228, 181, 47, 75, 229, 255, 47, 75, 229, 43, 47, 75, 172, 47, 75, 216,
+    175, 47, 75, 215, 241, 47, 75, 217, 48, 47, 75, 216, 91, 47, 75, 168, 47,
+    75, 192, 214, 47, 75, 193, 1, 47, 75, 167, 47, 75, 207, 151, 47, 75, 206,
+    218, 47, 75, 208, 7, 47, 75, 207, 55, 47, 75, 194, 169, 47, 75, 194, 72,
+    47, 75, 194, 111, 47, 75, 194, 36, 50, 234, 20, 215, 63, 207, 218, 50,
+    250, 162, 50, 250, 63, 50, 250, 189, 50, 251, 246, 50, 223, 158, 50, 223,
+    125, 50, 197, 44, 50, 233, 245, 50, 234, 168, 50, 211, 197, 50, 211, 190,
+    50, 222, 133, 50, 222, 97, 50, 222, 92, 50, 231, 188, 50, 231, 198, 50,
+    231, 34, 50, 231, 30, 50, 220, 203, 50, 231, 21, 50, 221, 169, 50, 221,
+    168, 50, 221, 167, 50, 221, 166, 50, 230, 154, 50, 230, 153, 50, 220,
+    252, 50, 220, 255, 50, 222, 44, 50, 221, 77, 50, 221, 85, 50, 206, 74,
+    50, 206, 31, 50, 203, 45, 50, 204, 170, 50, 204, 169, 50, 237, 252, 50,
+    237, 53, 50, 236, 115, 50, 199, 20, 50, 215, 56, 50, 213, 99, 50, 230,
+    83, 50, 211, 71, 50, 211, 70, 50, 249, 0, 50, 210, 48, 50, 210, 10, 50,
+    210, 11, 50, 248, 9, 50, 228, 176, 50, 228, 170, 50, 247, 80, 50, 228,
+    154, 50, 229, 216, 50, 210, 107, 50, 210, 149, 50, 229, 197, 50, 210,
+    145, 50, 210, 163, 50, 248, 103, 50, 209, 187, 50, 247, 193, 50, 229, 19,
+    50, 209, 173, 50, 229, 10, 50, 229, 12, 50, 217, 178, 50, 217, 174, 50,
+    217, 183, 50, 217, 115, 50, 217, 146, 50, 216, 132, 50, 216, 107, 50,
+    216, 106, 50, 217, 21, 50, 217, 18, 50, 217, 22, 50, 193, 128, 50, 193,
+    126, 50, 192, 199, 50, 207, 71, 50, 207, 75, 50, 206, 185, 50, 206, 178,
+    50, 207, 207, 50, 207, 204, 50, 194, 127, 149, 200, 44, 16, 39, 228, 198,
+    192, 76, 149, 200, 44, 16, 39, 228, 198, 101, 149, 200, 44, 16, 39, 228,
+    198, 104, 149, 200, 44, 16, 39, 228, 198, 133, 149, 200, 44, 16, 39, 228,
+    198, 134, 149, 200, 44, 16, 39, 228, 198, 151, 149, 200, 44, 16, 39, 228,
+    198, 170, 149, 200, 44, 16, 39, 228, 198, 179, 149, 200, 44, 16, 39, 228,
+    198, 174, 149, 200, 44, 16, 39, 228, 198, 182, 149, 200, 44, 16, 39, 228,
+    198, 200, 30, 149, 200, 44, 16, 39, 228, 198, 234, 111, 149, 200, 44, 16,
+    39, 228, 198, 197, 244, 149, 200, 44, 16, 39, 228, 198, 199, 186, 149,
+    200, 44, 16, 39, 228, 198, 232, 113, 149, 200, 44, 16, 39, 228, 198, 233,
+    7, 149, 200, 44, 16, 39, 228, 198, 203, 35, 149, 200, 44, 16, 39, 228,
+    198, 204, 143, 149, 200, 44, 16, 39, 228, 198, 234, 145, 149, 200, 44,
+    16, 39, 228, 198, 214, 13, 149, 200, 44, 16, 39, 228, 198, 197, 239, 149,
+    200, 44, 16, 39, 228, 198, 197, 232, 149, 200, 44, 16, 39, 228, 198, 197,
+    227, 149, 200, 44, 16, 39, 228, 198, 197, 229, 149, 200, 44, 16, 39, 228,
+    198, 197, 234, 50, 228, 189, 50, 238, 0, 50, 250, 8, 50, 161, 50, 211,
+    120, 50, 210, 186, 50, 236, 149, 50, 236, 150, 202, 105, 50, 236, 150,
+    238, 156, 50, 223, 78, 50, 234, 20, 215, 63, 229, 217, 50, 234, 20, 215,
+    63, 200, 251, 50, 234, 20, 215, 63, 200, 144, 50, 234, 20, 215, 63, 217,
+    17, 50, 238, 219, 50, 211, 78, 250, 227, 50, 181, 50, 215, 242, 64, 50,
+    172, 50, 160, 50, 222, 60, 50, 217, 87, 50, 231, 176, 50, 247, 3, 50,
+    222, 59, 50, 210, 97, 50, 214, 169, 50, 215, 242, 233, 163, 50, 215, 242,
+    232, 44, 50, 216, 216, 50, 221, 252, 50, 228, 106, 50, 221, 206, 50, 216,
+    177, 50, 231, 48, 50, 199, 130, 50, 215, 242, 165, 50, 216, 99, 50, 236,
+    159, 50, 221, 133, 50, 232, 166, 50, 213, 180, 50, 215, 242, 218, 236,
+    50, 216, 96, 50, 242, 64, 50, 221, 127, 50, 216, 97, 202, 105, 50, 242,
+    65, 202, 105, 50, 218, 237, 202, 105, 50, 221, 128, 202, 105, 50, 216,
+    97, 238, 156, 50, 242, 65, 238, 156, 50, 218, 237, 238, 156, 50, 221,
+    128, 238, 156, 50, 218, 237, 136, 206, 158, 50, 218, 237, 136, 206, 159,
+    202, 105, 50, 166, 50, 221, 69, 50, 215, 247, 50, 230, 228, 50, 208, 58,
+    50, 208, 59, 136, 206, 158, 50, 208, 59, 136, 206, 159, 202, 105, 50,
+    209, 64, 50, 213, 63, 50, 215, 242, 206, 158, 50, 215, 244, 50, 209, 11,
+    50, 212, 212, 50, 215, 242, 196, 236, 50, 215, 175, 50, 220, 241, 50,
+    215, 176, 217, 21, 50, 209, 10, 50, 212, 211, 50, 215, 242, 194, 202, 50,
+    215, 169, 50, 220, 239, 50, 215, 170, 217, 21, 50, 222, 185, 211, 239,
+    50, 218, 237, 211, 239, 50, 250, 241, 50, 247, 168, 50, 246, 182, 50,
+    246, 159, 50, 247, 53, 136, 221, 252, 50, 242, 63, 50, 237, 170, 50, 230,
+    137, 50, 144, 50, 228, 190, 50, 223, 190, 50, 221, 140, 50, 221, 128,
+    246, 225, 50, 221, 35, 50, 219, 110, 50, 219, 109, 50, 219, 94, 50, 218,
+    252, 50, 217, 88, 202, 236, 50, 216, 131, 50, 216, 57, 50, 210, 95, 50,
+    209, 201, 50, 209, 133, 50, 209, 131, 50, 202, 96, 50, 201, 84, 50, 194,
+    113, 50, 196, 237, 136, 218, 236, 50, 41, 136, 218, 236, 149, 200, 44,
+    16, 39, 237, 174, 101, 149, 200, 44, 16, 39, 237, 174, 104, 149, 200, 44,
+    16, 39, 237, 174, 133, 149, 200, 44, 16, 39, 237, 174, 134, 149, 200, 44,
+    16, 39, 237, 174, 151, 149, 200, 44, 16, 39, 237, 174, 170, 149, 200, 44,
+    16, 39, 237, 174, 179, 149, 200, 44, 16, 39, 237, 174, 174, 149, 200, 44,
+    16, 39, 237, 174, 182, 149, 200, 44, 16, 39, 237, 174, 200, 30, 149, 200,
+    44, 16, 39, 237, 174, 234, 111, 149, 200, 44, 16, 39, 237, 174, 197, 244,
+    149, 200, 44, 16, 39, 237, 174, 199, 186, 149, 200, 44, 16, 39, 237, 174,
+    232, 113, 149, 200, 44, 16, 39, 237, 174, 233, 7, 149, 200, 44, 16, 39,
+    237, 174, 203, 35, 149, 200, 44, 16, 39, 237, 174, 204, 143, 149, 200,
+    44, 16, 39, 237, 174, 234, 145, 149, 200, 44, 16, 39, 237, 174, 214, 13,
+    149, 200, 44, 16, 39, 237, 174, 197, 239, 149, 200, 44, 16, 39, 237, 174,
+    197, 232, 149, 200, 44, 16, 39, 237, 174, 197, 227, 149, 200, 44, 16, 39,
+    237, 174, 197, 229, 149, 200, 44, 16, 39, 237, 174, 197, 234, 149, 200,
+    44, 16, 39, 237, 174, 197, 235, 149, 200, 44, 16, 39, 237, 174, 197, 230,
+    149, 200, 44, 16, 39, 237, 174, 197, 231, 149, 200, 44, 16, 39, 237, 174,
+    197, 238, 149, 200, 44, 16, 39, 237, 174, 197, 233, 149, 200, 44, 16, 39,
+    237, 174, 199, 184, 149, 200, 44, 16, 39, 237, 174, 199, 182, 50, 231,
+    215, 229, 191, 39, 199, 225, 238, 197, 229, 229, 229, 191, 39, 199, 225,
+    207, 250, 234, 189, 229, 191, 39, 236, 242, 250, 27, 199, 225, 248, 98,
+    229, 191, 39, 192, 227, 232, 158, 229, 191, 39, 194, 155, 229, 191, 39,
+    239, 17, 229, 191, 39, 199, 225, 250, 88, 229, 191, 39, 229, 26, 199, 26,
+    229, 191, 39, 2, 200, 126, 229, 191, 39, 198, 198, 229, 191, 39, 210,
+    179, 229, 191, 39, 202, 21, 229, 191, 39, 233, 31, 229, 191, 39, 230,
+    206, 209, 156, 229, 191, 39, 216, 77, 229, 191, 39, 234, 59, 229, 191,
+    39, 232, 159, 229, 191, 39, 194, 9, 211, 212, 199, 225, 237, 111, 229,
+    191, 39, 250, 141, 229, 191, 39, 238, 252, 229, 191, 39, 247, 254, 199,
+    150, 229, 191, 39, 230, 226, 229, 191, 39, 202, 123, 250, 161, 229, 191,
+    39, 207, 172, 229, 191, 39, 223, 152, 229, 191, 39, 230, 206, 200, 126,
+    229, 191, 39, 216, 5, 238, 222, 229, 191, 39, 230, 206, 209, 108, 229,
+    191, 39, 199, 225, 251, 148, 194, 129, 229, 191, 39, 199, 225, 242, 92,
+    232, 231, 229, 191, 39, 223, 166, 229, 191, 39, 235, 38, 229, 191, 39,
+    207, 175, 229, 191, 39, 230, 206, 209, 138, 229, 191, 39, 209, 82, 229,
+    191, 39, 237, 190, 80, 199, 225, 219, 195, 229, 191, 39, 199, 225, 233,
+    69, 229, 191, 39, 211, 169, 229, 191, 39, 212, 13, 229, 191, 39, 237, 81,
+    229, 191, 39, 237, 103, 229, 191, 39, 223, 181, 229, 191, 39, 247, 154,
+    229, 191, 39, 242, 40, 115, 217, 24, 229, 191, 39, 231, 183, 199, 26,
+    229, 191, 39, 209, 21, 197, 31, 229, 191, 39, 211, 168, 229, 191, 39,
+    199, 225, 194, 95, 229, 191, 39, 207, 163, 229, 191, 39, 199, 225, 246,
+    188, 229, 191, 39, 199, 225, 250, 84, 199, 144, 229, 191, 39, 199, 225,
+    222, 45, 201, 245, 216, 9, 229, 191, 39, 237, 48, 229, 191, 39, 199, 225,
+    217, 118, 217, 179, 229, 191, 39, 251, 149, 229, 191, 39, 199, 225, 194,
+    146, 229, 191, 39, 199, 225, 231, 138, 194, 52, 229, 191, 39, 199, 225,
+    222, 216, 220, 102, 229, 191, 39, 236, 191, 229, 191, 39, 219, 182, 229,
+    191, 39, 223, 155, 198, 122, 229, 191, 39, 2, 209, 108, 229, 191, 39,
+    251, 81, 242, 30, 229, 191, 39, 248, 101, 242, 30, 11, 5, 223, 82, 11, 5,
+    223, 74, 11, 5, 70, 11, 5, 223, 108, 11, 5, 223, 249, 11, 5, 223, 232,
+    11, 5, 223, 251, 11, 5, 223, 250, 11, 5, 250, 26, 11, 5, 249, 238, 11, 5,
+    64, 11, 5, 250, 163, 11, 5, 197, 42, 11, 5, 197, 46, 11, 5, 197, 43, 11,
+    5, 211, 140, 11, 5, 211, 103, 11, 5, 74, 11, 5, 211, 185, 11, 5, 233,
+    209, 11, 5, 71, 11, 5, 193, 244, 11, 5, 248, 1, 11, 5, 247, 252, 11, 5,
+    248, 41, 11, 5, 248, 14, 11, 5, 248, 30, 11, 5, 248, 29, 11, 5, 248, 32,
+    11, 5, 248, 31, 11, 5, 248, 170, 11, 5, 248, 162, 11, 5, 249, 3, 11, 5,
+    248, 195, 11, 5, 247, 92, 11, 5, 247, 96, 11, 5, 247, 93, 11, 5, 247,
+    192, 11, 5, 247, 173, 11, 5, 247, 220, 11, 5, 247, 198, 11, 5, 248, 57,
+    11, 5, 248, 123, 11, 5, 248, 70, 11, 5, 247, 76, 11, 5, 247, 70, 11, 5,
+    247, 124, 11, 5, 247, 91, 11, 5, 247, 84, 11, 5, 247, 89, 11, 5, 247, 58,
+    11, 5, 247, 56, 11, 5, 247, 63, 11, 5, 247, 61, 11, 5, 247, 59, 11, 5,
+    247, 60, 11, 5, 209, 241, 11, 5, 209, 237, 11, 5, 210, 51, 11, 5, 209,
+    253, 11, 5, 210, 16, 11, 5, 210, 43, 11, 5, 210, 39, 11, 5, 210, 206, 11,
+    5, 210, 191, 11, 5, 166, 11, 5, 210, 253, 11, 5, 209, 31, 11, 5, 209, 33,
+    11, 5, 209, 32, 11, 5, 209, 149, 11, 5, 209, 136, 11, 5, 209, 198, 11, 5,
+    209, 168, 11, 5, 209, 17, 11, 5, 209, 13, 11, 5, 209, 51, 11, 5, 209, 30,
+    11, 5, 209, 22, 11, 5, 209, 28, 11, 5, 208, 251, 11, 5, 208, 250, 11, 5,
+    208, 255, 11, 5, 208, 254, 11, 5, 208, 252, 11, 5, 208, 253, 11, 5, 248,
+    144, 11, 5, 248, 143, 11, 5, 248, 150, 11, 5, 248, 145, 11, 5, 248, 147,
+    11, 5, 248, 146, 11, 5, 248, 149, 11, 5, 248, 148, 11, 5, 248, 156, 11,
+    5, 248, 155, 11, 5, 248, 159, 11, 5, 248, 157, 11, 5, 248, 135, 11, 5,
+    248, 137, 11, 5, 248, 136, 11, 5, 248, 140, 11, 5, 248, 139, 11, 5, 248,
+    142, 11, 5, 248, 141, 11, 5, 248, 151, 11, 5, 248, 154, 11, 5, 248, 152,
+    11, 5, 248, 131, 11, 5, 248, 130, 11, 5, 248, 138, 11, 5, 248, 134, 11,
+    5, 248, 132, 11, 5, 248, 133, 11, 5, 248, 127, 11, 5, 248, 126, 11, 5,
+    248, 129, 11, 5, 248, 128, 11, 5, 215, 22, 11, 5, 215, 21, 11, 5, 215,
+    27, 11, 5, 215, 23, 11, 5, 215, 24, 11, 5, 215, 26, 11, 5, 215, 25, 11,
+    5, 215, 30, 11, 5, 215, 29, 11, 5, 215, 32, 11, 5, 215, 31, 11, 5, 215,
+    18, 11, 5, 215, 17, 11, 5, 215, 20, 11, 5, 215, 19, 11, 5, 215, 11, 11,
+    5, 215, 10, 11, 5, 215, 15, 11, 5, 215, 14, 11, 5, 215, 12, 11, 5, 215,
+    13, 11, 5, 215, 5, 11, 5, 215, 4, 11, 5, 215, 9, 11, 5, 215, 8, 11, 5,
+    215, 6, 11, 5, 215, 7, 11, 5, 229, 87, 11, 5, 229, 86, 11, 5, 229, 92,
+    11, 5, 229, 88, 11, 5, 229, 89, 11, 5, 229, 91, 11, 5, 229, 90, 11, 5,
+    229, 95, 11, 5, 229, 94, 11, 5, 229, 97, 11, 5, 229, 96, 11, 5, 229, 78,
+    11, 5, 229, 80, 11, 5, 229, 79, 11, 5, 229, 83, 11, 5, 229, 82, 11, 5,
+    229, 85, 11, 5, 229, 84, 11, 5, 229, 74, 11, 5, 229, 73, 11, 5, 229, 81,
+    11, 5, 229, 77, 11, 5, 229, 75, 11, 5, 229, 76, 11, 5, 229, 68, 11, 5,
+    229, 72, 11, 5, 229, 71, 11, 5, 229, 69, 11, 5, 229, 70, 11, 5, 216, 102,
+    11, 5, 216, 101, 11, 5, 216, 175, 11, 5, 216, 109, 11, 5, 216, 139, 11,
+    5, 216, 157, 11, 5, 216, 155, 11, 5, 217, 101, 11, 5, 217, 95, 11, 5,
+    172, 11, 5, 217, 141, 11, 5, 215, 203, 11, 5, 215, 202, 11, 5, 215, 206,
+    11, 5, 215, 204, 11, 5, 216, 20, 11, 5, 215, 249, 11, 5, 216, 91, 11, 5,
+    216, 27, 11, 5, 216, 227, 11, 5, 217, 48, 11, 5, 215, 183, 11, 5, 215,
+    177, 11, 5, 215, 241, 11, 5, 215, 199, 11, 5, 215, 192, 11, 5, 215, 197,
+    11, 5, 215, 154, 11, 5, 215, 153, 11, 5, 215, 159, 11, 5, 215, 156, 11,
+    5, 232, 217, 11, 5, 232, 211, 11, 5, 233, 11, 11, 5, 232, 233, 11, 5,
+    233, 60, 11, 5, 233, 51, 11, 5, 233, 97, 11, 5, 233, 65, 11, 5, 232, 110,
+    11, 5, 232, 164, 11, 5, 232, 144, 11, 5, 232, 60, 11, 5, 232, 59, 11, 5,
+    232, 77, 11, 5, 232, 65, 11, 5, 232, 63, 11, 5, 232, 64, 11, 5, 232, 47,
+    11, 5, 232, 46, 11, 5, 232, 50, 11, 5, 232, 48, 11, 5, 196, 3, 11, 5,
+    195, 254, 11, 5, 196, 39, 11, 5, 196, 12, 11, 5, 196, 28, 11, 5, 196, 24,
+    11, 5, 196, 31, 11, 5, 196, 30, 11, 5, 196, 131, 11, 5, 196, 126, 11, 5,
+    196, 157, 11, 5, 196, 144, 11, 5, 195, 232, 11, 5, 195, 228, 11, 5, 195,
+    252, 11, 5, 195, 234, 11, 5, 196, 43, 11, 5, 196, 111, 11, 5, 194, 216,
+    11, 5, 194, 214, 11, 5, 194, 223, 11, 5, 194, 219, 11, 5, 194, 217, 11,
+    5, 194, 218, 11, 5, 194, 206, 11, 5, 194, 205, 11, 5, 194, 210, 11, 5,
+    194, 209, 11, 5, 194, 207, 11, 5, 194, 208, 11, 5, 236, 184, 11, 5, 236,
+    169, 11, 5, 237, 16, 11, 5, 236, 212, 11, 5, 236, 247, 11, 5, 236, 252,
+    11, 5, 236, 251, 11, 5, 237, 181, 11, 5, 237, 175, 11, 5, 238, 0, 11, 5,
+    237, 201, 11, 5, 235, 43, 11, 5, 235, 44, 11, 5, 236, 114, 11, 5, 235,
+    90, 11, 5, 236, 146, 11, 5, 236, 117, 11, 5, 237, 46, 11, 5, 237, 116,
+    11, 5, 237, 67, 11, 5, 235, 34, 11, 5, 235, 32, 11, 5, 235, 62, 11, 5,
+    235, 42, 11, 5, 235, 37, 11, 5, 235, 40, 11, 5, 199, 63, 11, 5, 199, 55,
+    11, 5, 199, 128, 11, 5, 199, 73, 11, 5, 199, 111, 11, 5, 199, 113, 11, 5,
+    199, 112, 11, 5, 200, 105, 11, 5, 200, 90, 11, 5, 189, 11, 5, 200, 116,
+    11, 5, 198, 20, 11, 5, 198, 19, 11, 5, 198, 22, 11, 5, 198, 21, 11, 5,
+    198, 235, 11, 5, 198, 225, 11, 5, 155, 11, 5, 198, 248, 11, 5, 199, 246,
+    11, 5, 200, 79, 11, 5, 200, 17, 11, 5, 198, 3, 11, 5, 197, 254, 11, 5,
+    198, 45, 11, 5, 198, 18, 11, 5, 198, 4, 11, 5, 198, 15, 11, 5, 237, 133,
+    11, 5, 237, 132, 11, 5, 237, 138, 11, 5, 237, 134, 11, 5, 237, 135, 11,
+    5, 237, 137, 11, 5, 237, 136, 11, 5, 237, 154, 11, 5, 237, 153, 11, 5,
+    237, 161, 11, 5, 237, 155, 11, 5, 237, 123, 11, 5, 237, 125, 11, 5, 237,
+    124, 11, 5, 237, 128, 11, 5, 237, 127, 11, 5, 237, 131, 11, 5, 237, 129,
+    11, 5, 237, 146, 11, 5, 237, 149, 11, 5, 237, 147, 11, 5, 237, 119, 11,
+    5, 237, 118, 11, 5, 237, 126, 11, 5, 237, 122, 11, 5, 237, 120, 11, 5,
+    237, 121, 11, 5, 214, 233, 11, 5, 214, 232, 11, 5, 214, 240, 11, 5, 214,
+    235, 11, 5, 214, 236, 11, 5, 214, 237, 11, 5, 214, 249, 11, 5, 214, 248,
+    11, 5, 214, 255, 11, 5, 214, 250, 11, 5, 214, 225, 11, 5, 214, 224, 11,
+    5, 214, 231, 11, 5, 214, 226, 11, 5, 214, 241, 11, 5, 214, 247, 11, 5,
+    214, 245, 11, 5, 214, 217, 11, 5, 214, 216, 11, 5, 214, 222, 11, 5, 214,
+    220, 11, 5, 214, 218, 11, 5, 214, 219, 11, 5, 229, 53, 11, 5, 229, 52,
+    11, 5, 229, 59, 11, 5, 229, 54, 11, 5, 229, 56, 11, 5, 229, 55, 11, 5,
+    229, 58, 11, 5, 229, 57, 11, 5, 229, 65, 11, 5, 229, 63, 11, 5, 229, 67,
+    11, 5, 229, 66, 11, 5, 229, 46, 11, 5, 229, 47, 11, 5, 229, 50, 11, 5,
+    229, 49, 11, 5, 229, 51, 11, 5, 229, 60, 11, 5, 229, 62, 11, 5, 229, 61,
+    11, 5, 229, 45, 11, 5, 214, 4, 11, 5, 214, 2, 11, 5, 214, 60, 11, 5, 214,
+    7, 11, 5, 214, 34, 11, 5, 214, 48, 11, 5, 214, 47, 11, 5, 215, 37, 11, 5,
+    181, 11, 5, 215, 53, 11, 5, 212, 222, 11, 5, 212, 224, 11, 5, 212, 223,
+    11, 5, 213, 110, 11, 5, 213, 94, 11, 5, 213, 142, 11, 5, 213, 121, 11, 5,
+    214, 171, 11, 5, 214, 214, 11, 5, 214, 191, 11, 5, 212, 217, 11, 5, 212,
+    213, 11, 5, 213, 22, 11, 5, 212, 221, 11, 5, 212, 219, 11, 5, 212, 220,
+    11, 5, 229, 118, 11, 5, 229, 117, 11, 5, 229, 123, 11, 5, 229, 119, 11,
+    5, 229, 120, 11, 5, 229, 122, 11, 5, 229, 121, 11, 5, 229, 129, 11, 5,
+    229, 127, 11, 5, 229, 131, 11, 5, 229, 130, 11, 5, 229, 110, 11, 5, 229,
+    112, 11, 5, 229, 111, 11, 5, 229, 114, 11, 5, 229, 116, 11, 5, 229, 115,
+    11, 5, 229, 124, 11, 5, 229, 126, 11, 5, 229, 125, 11, 5, 229, 106, 11,
+    5, 229, 105, 11, 5, 229, 113, 11, 5, 229, 109, 11, 5, 229, 107, 11, 5,
+    229, 108, 11, 5, 229, 100, 11, 5, 229, 99, 11, 5, 229, 104, 11, 5, 229,
+    103, 11, 5, 229, 101, 11, 5, 229, 102, 11, 5, 219, 151, 11, 5, 219, 143,
+    11, 5, 219, 209, 11, 5, 219, 161, 11, 5, 219, 200, 11, 5, 219, 199, 11,
+    5, 219, 203, 11, 5, 219, 201, 11, 5, 220, 65, 11, 5, 220, 53, 11, 5, 177,
+    11, 5, 220, 76, 11, 5, 219, 13, 11, 5, 219, 12, 11, 5, 219, 15, 11, 5,
+    219, 14, 11, 5, 219, 60, 11, 5, 219, 45, 11, 5, 219, 107, 11, 5, 219, 66,
+    11, 5, 219, 226, 11, 5, 220, 42, 11, 5, 219, 244, 11, 5, 219, 7, 11, 5,
+    219, 5, 11, 5, 219, 36, 11, 5, 219, 11, 11, 5, 219, 9, 11, 5, 219, 10,
+    11, 5, 218, 241, 11, 5, 218, 240, 11, 5, 218, 251, 11, 5, 218, 244, 11,
+    5, 218, 242, 11, 5, 218, 243, 11, 5, 231, 17, 11, 5, 231, 16, 11, 5, 231,
+    46, 11, 5, 231, 29, 11, 5, 231, 38, 11, 5, 231, 37, 11, 5, 231, 40, 11,
+    5, 231, 39, 11, 5, 231, 185, 11, 5, 231, 180, 11, 5, 231, 233, 11, 5,
+    231, 196, 11, 5, 230, 159, 11, 5, 230, 158, 11, 5, 230, 161, 11, 5, 230,
+    160, 11, 5, 230, 231, 11, 5, 230, 229, 11, 5, 230, 254, 11, 5, 230, 240,
+    11, 5, 231, 124, 11, 5, 231, 122, 11, 5, 231, 158, 11, 5, 231, 135, 11,
+    5, 230, 148, 11, 5, 230, 147, 11, 5, 230, 186, 11, 5, 230, 157, 11, 5,
+    230, 149, 11, 5, 230, 156, 11, 5, 221, 158, 11, 5, 221, 153, 11, 5, 221,
+    204, 11, 5, 221, 172, 11, 5, 221, 185, 11, 5, 221, 189, 11, 5, 221, 187,
+    11, 5, 222, 83, 11, 5, 222, 65, 11, 5, 160, 11, 5, 222, 112, 11, 5, 221,
+    4, 11, 5, 221, 9, 11, 5, 221, 6, 11, 5, 221, 76, 11, 5, 221, 71, 11, 5,
+    221, 113, 11, 5, 221, 83, 11, 5, 222, 20, 11, 5, 222, 3, 11, 5, 222, 57,
+    11, 5, 222, 24, 11, 5, 220, 247, 11, 5, 220, 243, 11, 5, 221, 33, 11, 5,
+    221, 3, 11, 5, 220, 251, 11, 5, 221, 0, 11, 5, 231, 106, 11, 5, 231, 105,
+    11, 5, 231, 110, 11, 5, 231, 107, 11, 5, 231, 109, 11, 5, 231, 108, 11,
+    5, 231, 117, 11, 5, 231, 116, 11, 5, 231, 120, 11, 5, 231, 118, 11, 5,
+    231, 97, 11, 5, 231, 96, 11, 5, 231, 99, 11, 5, 231, 98, 11, 5, 231, 102,
+    11, 5, 231, 101, 11, 5, 231, 104, 11, 5, 231, 103, 11, 5, 231, 112, 11,
+    5, 231, 111, 11, 5, 231, 115, 11, 5, 231, 113, 11, 5, 231, 92, 11, 5,
+    231, 91, 11, 5, 231, 100, 11, 5, 231, 95, 11, 5, 231, 93, 11, 5, 231, 94,
+    11, 5, 216, 194, 11, 5, 216, 195, 11, 5, 216, 213, 11, 5, 216, 212, 11,
+    5, 216, 215, 11, 5, 216, 214, 11, 5, 216, 185, 11, 5, 216, 187, 11, 5,
+    216, 186, 11, 5, 216, 190, 11, 5, 216, 189, 11, 5, 216, 192, 11, 5, 216,
+    191, 11, 5, 216, 196, 11, 5, 216, 198, 11, 5, 216, 197, 11, 5, 216, 181,
+    11, 5, 216, 180, 11, 5, 216, 188, 11, 5, 216, 184, 11, 5, 216, 182, 11,
+    5, 216, 183, 11, 5, 228, 126, 11, 5, 228, 125, 11, 5, 228, 132, 11, 5,
+    228, 127, 11, 5, 228, 129, 11, 5, 228, 128, 11, 5, 228, 131, 11, 5, 228,
+    130, 11, 5, 228, 137, 11, 5, 228, 136, 11, 5, 228, 139, 11, 5, 228, 138,
+    11, 5, 228, 118, 11, 5, 228, 117, 11, 5, 228, 120, 11, 5, 228, 119, 11,
+    5, 228, 122, 11, 5, 228, 121, 11, 5, 228, 124, 11, 5, 228, 123, 11, 5,
+    228, 133, 11, 5, 228, 135, 11, 5, 228, 134, 11, 5, 214, 110, 11, 5, 214,
+    112, 11, 5, 214, 111, 11, 5, 214, 155, 11, 5, 214, 153, 11, 5, 214, 165,
+    11, 5, 214, 158, 11, 5, 214, 71, 11, 5, 214, 70, 11, 5, 214, 72, 11, 5,
+    214, 82, 11, 5, 214, 79, 11, 5, 214, 90, 11, 5, 214, 84, 11, 5, 214, 146,
+    11, 5, 214, 152, 11, 5, 214, 148, 11, 5, 229, 137, 11, 5, 229, 156, 11,
+    5, 229, 165, 11, 5, 230, 18, 11, 5, 230, 7, 11, 5, 144, 11, 5, 230, 30,
+    11, 5, 228, 156, 11, 5, 228, 155, 11, 5, 228, 158, 11, 5, 228, 157, 11,
+    5, 228, 201, 11, 5, 228, 192, 11, 5, 229, 43, 11, 5, 229, 8, 11, 5, 229,
+    193, 11, 5, 229, 255, 11, 5, 229, 205, 11, 5, 194, 132, 11, 5, 194, 117,
+    11, 5, 194, 169, 11, 5, 194, 143, 11, 5, 193, 233, 11, 5, 193, 235, 11,
+    5, 193, 234, 11, 5, 194, 1, 11, 5, 194, 36, 11, 5, 194, 12, 11, 5, 194,
+    85, 11, 5, 194, 111, 11, 5, 194, 92, 11, 5, 192, 15, 11, 5, 192, 14, 11,
+    5, 192, 30, 11, 5, 192, 18, 11, 5, 192, 23, 11, 5, 192, 25, 11, 5, 192,
+    24, 11, 5, 192, 94, 11, 5, 192, 91, 11, 5, 192, 112, 11, 5, 192, 98, 11,
+    5, 191, 245, 11, 5, 191, 247, 11, 5, 191, 246, 11, 5, 192, 3, 11, 5, 192,
+    2, 11, 5, 192, 8, 11, 5, 192, 4, 11, 5, 192, 73, 11, 5, 192, 85, 11, 5,
+    192, 78, 11, 5, 191, 241, 11, 5, 191, 240, 11, 5, 191, 252, 11, 5, 191,
+    244, 11, 5, 191, 242, 11, 5, 191, 243, 11, 5, 191, 227, 11, 5, 191, 226,
+    11, 5, 191, 232, 11, 5, 191, 230, 11, 5, 191, 228, 11, 5, 191, 229, 11,
+    5, 242, 119, 11, 5, 242, 112, 11, 5, 242, 149, 11, 5, 242, 132, 11, 5,
+    242, 146, 11, 5, 242, 140, 11, 5, 242, 148, 11, 5, 242, 147, 11, 5, 246,
+    193, 11, 5, 246, 185, 11, 5, 247, 19, 11, 5, 246, 226, 11, 5, 238, 150,
+    11, 5, 238, 152, 11, 5, 238, 151, 11, 5, 238, 215, 11, 5, 238, 203, 11,
+    5, 242, 63, 11, 5, 238, 234, 11, 5, 246, 121, 11, 5, 246, 158, 11, 5,
+    246, 127, 11, 5, 238, 121, 11, 5, 238, 119, 11, 5, 238, 162, 11, 5, 238,
+    148, 11, 5, 238, 127, 11, 5, 238, 143, 11, 5, 238, 98, 11, 5, 238, 97,
+    11, 5, 238, 110, 11, 5, 238, 104, 11, 5, 238, 99, 11, 5, 238, 101, 11, 5,
+    191, 210, 11, 5, 191, 209, 11, 5, 191, 216, 11, 5, 191, 211, 11, 5, 191,
+    213, 11, 5, 191, 212, 11, 5, 191, 215, 11, 5, 191, 214, 11, 5, 191, 222,
+    11, 5, 191, 221, 11, 5, 191, 225, 11, 5, 191, 223, 11, 5, 191, 206, 11,
+    5, 191, 208, 11, 5, 191, 207, 11, 5, 191, 217, 11, 5, 191, 220, 11, 5,
+    191, 218, 11, 5, 191, 199, 11, 5, 191, 203, 11, 5, 191, 202, 11, 5, 191,
+    200, 11, 5, 191, 201, 11, 5, 191, 193, 11, 5, 191, 192, 11, 5, 191, 198,
+    11, 5, 191, 196, 11, 5, 191, 194, 11, 5, 191, 195, 11, 5, 212, 133, 11,
+    5, 212, 132, 11, 5, 212, 138, 11, 5, 212, 134, 11, 5, 212, 135, 11, 5,
+    212, 137, 11, 5, 212, 136, 11, 5, 212, 143, 11, 5, 212, 142, 11, 5, 212,
+    146, 11, 5, 212, 145, 11, 5, 212, 126, 11, 5, 212, 127, 11, 5, 212, 130,
+    11, 5, 212, 131, 11, 5, 212, 139, 11, 5, 212, 141, 11, 5, 212, 121, 11,
+    5, 212, 129, 11, 5, 212, 125, 11, 5, 212, 122, 11, 5, 212, 123, 11, 5,
+    212, 116, 11, 5, 212, 115, 11, 5, 212, 120, 11, 5, 212, 119, 11, 5, 212,
+    117, 11, 5, 212, 118, 11, 5, 203, 43, 11, 5, 170, 11, 5, 203, 125, 11, 5,
+    203, 46, 11, 5, 203, 105, 11, 5, 203, 108, 11, 5, 203, 106, 11, 5, 206,
+    20, 11, 5, 206, 4, 11, 5, 188, 11, 5, 206, 28, 11, 5, 201, 113, 11, 5,
+    201, 115, 11, 5, 201, 114, 11, 5, 202, 177, 11, 5, 202, 166, 11, 5, 202,
+    212, 11, 5, 202, 181, 11, 5, 204, 137, 11, 5, 205, 223, 11, 5, 204, 168,
+    11, 5, 201, 88, 11, 5, 201, 85, 11, 5, 201, 184, 11, 5, 201, 112, 11, 5,
+    201, 92, 11, 5, 201, 100, 11, 5, 200, 242, 11, 5, 200, 241, 11, 5, 201,
+    56, 11, 5, 200, 250, 11, 5, 200, 244, 11, 5, 200, 249, 11, 5, 202, 53,
+    11, 5, 202, 52, 11, 5, 202, 59, 11, 5, 202, 54, 11, 5, 202, 56, 11, 5,
+    202, 58, 11, 5, 202, 57, 11, 5, 202, 68, 11, 5, 202, 66, 11, 5, 202, 92,
+    11, 5, 202, 69, 11, 5, 202, 48, 11, 5, 202, 47, 11, 5, 202, 51, 11, 5,
+    202, 49, 11, 5, 202, 62, 11, 5, 202, 65, 11, 5, 202, 63, 11, 5, 202, 44,
+    11, 5, 202, 42, 11, 5, 202, 46, 11, 5, 202, 45, 11, 5, 202, 37, 11, 5,
+    202, 36, 11, 5, 202, 41, 11, 5, 202, 40, 11, 5, 202, 38, 11, 5, 202, 39,
+    11, 5, 192, 66, 11, 5, 192, 65, 11, 5, 192, 71, 11, 5, 192, 68, 11, 5,
+    192, 45, 11, 5, 192, 47, 11, 5, 192, 46, 11, 5, 192, 50, 11, 5, 192, 49,
+    11, 5, 192, 54, 11, 5, 192, 51, 11, 5, 192, 59, 11, 5, 192, 58, 11, 5,
+    192, 62, 11, 5, 192, 60, 11, 5, 192, 41, 11, 5, 192, 40, 11, 5, 192, 48,
+    11, 5, 192, 44, 11, 5, 192, 42, 11, 5, 192, 43, 11, 5, 192, 33, 11, 5,
+    192, 32, 11, 5, 192, 37, 11, 5, 192, 36, 11, 5, 192, 34, 11, 5, 192, 35,
+    11, 5, 242, 251, 11, 5, 242, 247, 11, 5, 246, 117, 11, 5, 246, 103, 11,
+    5, 242, 164, 11, 5, 242, 163, 11, 5, 242, 166, 11, 5, 242, 165, 11, 5,
+    242, 179, 11, 5, 242, 178, 11, 5, 242, 188, 11, 5, 242, 183, 11, 5, 242,
+    222, 11, 5, 242, 219, 11, 5, 242, 245, 11, 5, 242, 230, 11, 5, 242, 158,
+    11, 5, 242, 168, 11, 5, 242, 162, 11, 5, 242, 159, 11, 5, 242, 161, 11,
+    5, 242, 151, 11, 5, 242, 150, 11, 5, 242, 155, 11, 5, 242, 154, 11, 5,
+    242, 152, 11, 5, 242, 153, 11, 5, 206, 255, 11, 5, 207, 3, 11, 5, 206,
+    237, 11, 5, 206, 238, 11, 5, 206, 242, 11, 5, 206, 241, 11, 5, 206, 245,
+    11, 5, 206, 243, 11, 5, 206, 249, 11, 5, 206, 248, 11, 5, 206, 254, 11,
+    5, 206, 250, 11, 5, 206, 233, 11, 5, 206, 231, 11, 5, 206, 239, 11, 5,
+    206, 236, 11, 5, 206, 234, 11, 5, 206, 235, 11, 5, 206, 226, 11, 5, 206,
+    225, 11, 5, 206, 230, 11, 5, 206, 229, 11, 5, 206, 227, 11, 5, 206, 228,
+    11, 5, 213, 86, 11, 5, 213, 85, 11, 5, 213, 88, 11, 5, 213, 87, 11, 5,
+    213, 77, 11, 5, 213, 79, 11, 5, 213, 78, 11, 5, 213, 81, 11, 5, 213, 80,
+    11, 5, 213, 84, 11, 5, 213, 83, 11, 5, 213, 71, 11, 5, 213, 70, 11, 5,
+    213, 76, 11, 5, 213, 74, 11, 5, 213, 72, 11, 5, 213, 73, 11, 5, 213, 65,
+    11, 5, 213, 64, 11, 5, 213, 69, 11, 5, 213, 68, 11, 5, 213, 66, 11, 5,
+    213, 67, 11, 5, 204, 22, 11, 5, 204, 17, 11, 5, 204, 64, 11, 5, 204, 35,
+    11, 5, 203, 152, 11, 5, 203, 154, 11, 5, 203, 153, 11, 5, 203, 179, 11,
+    5, 203, 174, 11, 5, 203, 211, 11, 5, 203, 199, 11, 5, 203, 246, 11, 5,
+    203, 239, 11, 5, 204, 12, 11, 5, 203, 255, 11, 5, 203, 148, 11, 5, 203,
+    145, 11, 5, 203, 164, 11, 5, 203, 151, 11, 5, 203, 149, 11, 5, 203, 150,
+    11, 5, 203, 128, 11, 5, 203, 127, 11, 5, 203, 134, 11, 5, 203, 131, 11,
+    5, 203, 129, 11, 5, 203, 130, 11, 5, 208, 22, 11, 5, 208, 16, 11, 5, 167,
+    11, 5, 208, 28, 11, 5, 206, 188, 11, 5, 206, 190, 11, 5, 206, 189, 11, 5,
+    207, 17, 11, 5, 207, 5, 11, 5, 207, 55, 11, 5, 207, 21, 11, 5, 207, 161,
+    11, 5, 208, 7, 11, 5, 207, 203, 11, 5, 206, 180, 11, 5, 206, 177, 11, 5,
+    206, 218, 11, 5, 206, 187, 11, 5, 206, 183, 11, 5, 206, 184, 11, 5, 206,
+    162, 11, 5, 206, 161, 11, 5, 206, 167, 11, 5, 206, 165, 11, 5, 206, 163,
+    11, 5, 206, 164, 11, 5, 223, 8, 11, 5, 223, 7, 11, 5, 223, 20, 11, 5,
+    223, 9, 11, 5, 223, 16, 11, 5, 223, 15, 11, 5, 223, 18, 11, 5, 223, 17,
+    11, 5, 222, 202, 11, 5, 222, 201, 11, 5, 222, 204, 11, 5, 222, 203, 11,
+    5, 222, 220, 11, 5, 222, 218, 11, 5, 222, 233, 11, 5, 222, 222, 11, 5,
+    222, 195, 11, 5, 222, 193, 11, 5, 222, 214, 11, 5, 222, 200, 11, 5, 222,
+    197, 11, 5, 222, 198, 11, 5, 222, 187, 11, 5, 222, 186, 11, 5, 222, 191,
+    11, 5, 222, 190, 11, 5, 222, 188, 11, 5, 222, 189, 11, 5, 208, 193, 11,
+    5, 208, 191, 11, 5, 208, 201, 11, 5, 208, 194, 11, 5, 208, 198, 11, 5,
+    208, 197, 11, 5, 208, 200, 11, 5, 208, 199, 11, 5, 208, 143, 11, 5, 208,
+    140, 11, 5, 208, 145, 11, 5, 208, 144, 11, 5, 208, 180, 11, 5, 208, 179,
+    11, 5, 208, 189, 11, 5, 208, 183, 11, 5, 208, 135, 11, 5, 208, 131, 11,
+    5, 208, 177, 11, 5, 208, 139, 11, 5, 208, 137, 11, 5, 208, 138, 11, 5,
+    208, 115, 11, 5, 208, 113, 11, 5, 208, 125, 11, 5, 208, 118, 11, 5, 208,
+    116, 11, 5, 208, 117, 11, 5, 222, 253, 11, 5, 222, 252, 11, 5, 223, 3,
+    11, 5, 222, 254, 11, 5, 223, 0, 11, 5, 222, 255, 11, 5, 223, 2, 11, 5,
+    223, 1, 11, 5, 222, 244, 11, 5, 222, 246, 11, 5, 222, 245, 11, 5, 222,
+    249, 11, 5, 222, 248, 11, 5, 222, 251, 11, 5, 222, 250, 11, 5, 222, 240,
+    11, 5, 222, 239, 11, 5, 222, 247, 11, 5, 222, 243, 11, 5, 222, 241, 11,
+    5, 222, 242, 11, 5, 222, 236, 11, 5, 222, 235, 11, 5, 222, 238, 11, 5,
+    222, 237, 11, 5, 213, 233, 11, 5, 213, 232, 11, 5, 213, 240, 11, 5, 213,
+    234, 11, 5, 213, 236, 11, 5, 213, 235, 11, 5, 213, 239, 11, 5, 213, 237,
+    11, 5, 213, 222, 11, 5, 213, 223, 11, 5, 213, 228, 11, 5, 213, 227, 11,
+    5, 213, 231, 11, 5, 213, 229, 11, 5, 213, 217, 11, 5, 213, 226, 11, 5,
+    213, 221, 11, 5, 213, 218, 11, 5, 213, 219, 11, 5, 213, 212, 11, 5, 213,
+    211, 11, 5, 213, 216, 11, 5, 213, 215, 11, 5, 213, 213, 11, 5, 213, 214,
+    11, 5, 212, 168, 11, 5, 212, 167, 11, 5, 212, 181, 11, 5, 212, 172, 11,
+    5, 212, 177, 11, 5, 212, 176, 11, 5, 212, 179, 11, 5, 212, 178, 11, 5,
+    212, 153, 11, 5, 212, 155, 11, 5, 212, 154, 11, 5, 212, 160, 11, 5, 212,
+    159, 11, 5, 212, 165, 11, 5, 212, 161, 11, 5, 212, 151, 11, 5, 212, 149,
+    11, 5, 212, 158, 11, 5, 212, 152, 11, 5, 193, 187, 11, 5, 193, 186, 11,
+    5, 193, 196, 11, 5, 193, 189, 11, 5, 193, 191, 11, 5, 193, 190, 11, 5,
+    193, 193, 11, 5, 193, 192, 11, 5, 193, 175, 11, 5, 193, 176, 11, 5, 193,
+    180, 11, 5, 193, 179, 11, 5, 193, 185, 11, 5, 193, 183, 11, 5, 193, 152,
+    11, 5, 193, 150, 11, 5, 193, 165, 11, 5, 193, 155, 11, 5, 193, 153, 11,
+    5, 193, 154, 11, 5, 193, 7, 11, 5, 193, 5, 11, 5, 193, 22, 11, 5, 193, 8,
+    11, 5, 193, 16, 11, 5, 193, 15, 11, 5, 193, 19, 11, 5, 193, 17, 11, 5,
+    192, 187, 11, 5, 192, 186, 11, 5, 192, 190, 11, 5, 192, 188, 11, 5, 192,
+    229, 11, 5, 192, 224, 11, 5, 193, 1, 11, 5, 192, 234, 11, 5, 192, 178,
+    11, 5, 192, 174, 11, 5, 192, 214, 11, 5, 192, 185, 11, 5, 192, 181, 11,
+    5, 192, 182, 11, 5, 192, 158, 11, 5, 192, 157, 11, 5, 192, 165, 11, 5,
+    192, 161, 11, 5, 192, 159, 11, 5, 192, 160, 11, 48, 208, 180, 11, 48,
+    219, 209, 11, 48, 221, 158, 11, 48, 212, 172, 11, 48, 238, 104, 11, 48,
+    202, 59, 11, 48, 231, 103, 11, 48, 231, 135, 11, 48, 216, 175, 11, 48,
+    228, 126, 11, 48, 218, 243, 11, 48, 248, 131, 11, 48, 216, 27, 11, 48,
+    193, 1, 11, 48, 209, 17, 11, 48, 228, 120, 11, 48, 200, 105, 11, 48, 231,
+    233, 11, 48, 191, 244, 11, 48, 238, 98, 11, 48, 237, 121, 11, 48, 247,
+    89, 11, 48, 231, 99, 11, 48, 212, 161, 11, 48, 198, 45, 11, 48, 211, 185,
+    11, 48, 222, 240, 11, 48, 192, 3, 11, 48, 208, 251, 11, 48, 229, 85, 11,
+    48, 193, 7, 11, 48, 194, 218, 11, 48, 203, 134, 11, 48, 196, 111, 11, 48,
+    192, 112, 11, 48, 222, 233, 11, 48, 212, 125, 11, 48, 222, 238, 11, 48,
+    230, 231, 11, 48, 223, 2, 11, 48, 194, 36, 11, 48, 235, 62, 11, 48, 203,
+    150, 11, 48, 219, 203, 11, 48, 238, 110, 11, 48, 238, 151, 11, 48, 242,
+    132, 11, 48, 228, 123, 11, 48, 204, 22, 11, 48, 191, 243, 11, 48, 203,
+    199, 11, 48, 242, 245, 11, 48, 191, 213, 11, 48, 215, 26, 11, 48, 222,
+    57, 219, 152, 1, 249, 3, 219, 152, 1, 166, 219, 152, 1, 210, 94, 219,
+    152, 1, 238, 0, 219, 152, 1, 189, 219, 152, 1, 199, 240, 219, 152, 1,
+    231, 233, 219, 152, 1, 160, 219, 152, 1, 221, 250, 219, 152, 1, 223, 62,
+    219, 152, 1, 247, 19, 219, 152, 1, 246, 117, 219, 152, 1, 235, 17, 219,
+    152, 1, 198, 118, 219, 152, 1, 198, 108, 219, 152, 1, 172, 219, 152, 1,
+    181, 219, 152, 1, 177, 219, 152, 1, 188, 219, 152, 1, 192, 71, 219, 152,
+    1, 192, 112, 219, 152, 1, 214, 165, 219, 152, 1, 144, 219, 152, 1, 193,
+    209, 219, 152, 1, 229, 187, 219, 152, 1, 233, 97, 219, 152, 1, 194, 169,
+    219, 152, 1, 204, 64, 219, 152, 1, 168, 219, 152, 1, 231, 84, 219, 152,
+    1, 64, 219, 152, 1, 251, 108, 219, 152, 1, 71, 219, 152, 1, 233, 230,
+    219, 152, 1, 70, 219, 152, 1, 74, 219, 152, 1, 68, 219, 152, 1, 197, 104,
+    219, 152, 1, 197, 97, 219, 152, 1, 212, 0, 219, 152, 1, 158, 215, 158,
+    199, 128, 219, 152, 1, 158, 215, 97, 209, 198, 219, 152, 1, 158, 215,
+    158, 238, 109, 219, 152, 1, 158, 215, 158, 247, 220, 219, 152, 1, 158,
+    215, 158, 181, 219, 152, 1, 158, 215, 158, 223, 29, 219, 152, 209, 38,
+    242, 38, 219, 152, 209, 38, 232, 71, 201, 238, 56, 5, 234, 171, 56, 5,
+    234, 167, 56, 5, 229, 225, 56, 5, 194, 100, 56, 5, 194, 99, 56, 5, 210,
+    168, 56, 5, 248, 48, 56, 5, 248, 108, 56, 5, 217, 74, 56, 5, 221, 64, 56,
+    5, 216, 207, 56, 5, 231, 171, 56, 5, 233, 40, 56, 5, 196, 118, 56, 5,
+    200, 56, 56, 5, 199, 222, 56, 5, 237, 30, 56, 5, 237, 27, 56, 5, 220, 32,
+    56, 5, 207, 234, 56, 5, 237, 101, 56, 5, 214, 246, 56, 5, 205, 205, 56,
+    5, 204, 10, 56, 5, 192, 82, 56, 5, 192, 61, 56, 5, 246, 150, 56, 5, 223,
+    39, 56, 5, 213, 247, 56, 5, 193, 66, 56, 5, 222, 48, 56, 5, 214, 138, 56,
+    5, 231, 150, 56, 5, 217, 29, 56, 5, 214, 203, 56, 5, 212, 189, 56, 5, 70,
+    56, 5, 223, 190, 56, 5, 229, 178, 56, 5, 229, 148, 56, 5, 194, 72, 56, 5,
+    194, 54, 56, 5, 210, 51, 56, 5, 248, 46, 56, 5, 248, 41, 56, 5, 217, 67,
+    56, 5, 221, 61, 56, 5, 216, 204, 56, 5, 231, 167, 56, 5, 233, 11, 56, 5,
+    196, 39, 56, 5, 199, 128, 56, 5, 199, 202, 56, 5, 237, 22, 56, 5, 237,
+    26, 56, 5, 219, 209, 56, 5, 207, 151, 56, 5, 237, 16, 56, 5, 214, 240,
+    56, 5, 203, 125, 56, 5, 203, 236, 56, 5, 192, 30, 56, 5, 192, 57, 56, 5,
+    242, 149, 56, 5, 223, 20, 56, 5, 213, 240, 56, 5, 193, 22, 56, 5, 221,
+    204, 56, 5, 214, 130, 56, 5, 231, 46, 56, 5, 216, 175, 56, 5, 214, 60,
+    56, 5, 212, 181, 56, 5, 64, 56, 5, 250, 224, 56, 5, 214, 160, 56, 5, 144,
+    56, 5, 230, 65, 56, 5, 194, 169, 56, 5, 194, 149, 56, 5, 166, 56, 5, 248,
+    54, 56, 5, 249, 3, 56, 5, 217, 82, 56, 5, 221, 69, 56, 5, 221, 67, 56, 5,
+    216, 211, 56, 5, 231, 175, 56, 5, 233, 97, 56, 5, 196, 157, 56, 5, 189,
+    56, 5, 199, 240, 56, 5, 237, 40, 56, 5, 237, 29, 56, 5, 177, 56, 5, 167,
+    56, 5, 238, 0, 56, 5, 214, 255, 56, 5, 188, 56, 5, 204, 64, 56, 5, 192,
+    112, 56, 5, 192, 71, 56, 5, 247, 19, 56, 5, 223, 62, 56, 5, 214, 0, 56,
+    5, 168, 56, 5, 160, 56, 5, 222, 121, 56, 5, 214, 144, 56, 5, 231, 233,
+    56, 5, 172, 56, 5, 181, 56, 5, 212, 201, 56, 5, 211, 194, 56, 5, 211,
+    189, 56, 5, 229, 16, 56, 5, 194, 17, 56, 5, 194, 13, 56, 5, 209, 172, 56,
+    5, 248, 44, 56, 5, 247, 206, 56, 5, 217, 62, 56, 5, 221, 59, 56, 5, 216,
+    200, 56, 5, 231, 163, 56, 5, 232, 152, 56, 5, 195, 236, 56, 5, 198, 254,
+    56, 5, 199, 170, 56, 5, 237, 19, 56, 5, 237, 24, 56, 5, 219, 73, 56, 5,
+    207, 28, 56, 5, 236, 120, 56, 5, 214, 227, 56, 5, 202, 183, 56, 5, 203,
+    203, 56, 5, 192, 5, 56, 5, 192, 52, 56, 5, 238, 239, 56, 5, 222, 223, 56,
+    5, 213, 230, 56, 5, 192, 235, 56, 5, 221, 88, 56, 5, 214, 128, 56, 5,
+    230, 242, 56, 5, 216, 35, 56, 5, 213, 125, 56, 5, 212, 162, 56, 5, 68,
+    56, 5, 197, 77, 56, 5, 228, 181, 56, 5, 228, 164, 56, 5, 193, 244, 56, 5,
+    193, 237, 56, 5, 209, 51, 56, 5, 248, 43, 56, 5, 247, 124, 56, 5, 217,
+    61, 56, 5, 221, 57, 56, 5, 216, 199, 56, 5, 231, 162, 56, 5, 232, 77, 56,
+    5, 194, 223, 56, 5, 198, 45, 56, 5, 199, 148, 56, 5, 237, 17, 56, 5, 237,
+    23, 56, 5, 219, 36, 56, 5, 206, 218, 56, 5, 235, 62, 56, 5, 214, 222, 56,
+    5, 201, 184, 56, 5, 203, 164, 56, 5, 191, 252, 56, 5, 192, 48, 56, 5,
+    238, 162, 56, 5, 222, 214, 56, 5, 213, 226, 56, 5, 192, 214, 56, 5, 221,
+    33, 56, 5, 214, 127, 56, 5, 230, 186, 56, 5, 215, 241, 56, 5, 213, 22,
+    56, 5, 212, 158, 56, 5, 74, 56, 5, 211, 211, 56, 5, 214, 86, 56, 5, 229,
+    43, 56, 5, 229, 19, 56, 5, 194, 36, 56, 5, 194, 18, 56, 5, 209, 198, 56,
+    5, 248, 45, 56, 5, 247, 220, 56, 5, 217, 63, 56, 5, 221, 60, 56, 5, 216,
+    202, 56, 5, 231, 165, 56, 5, 231, 164, 56, 5, 232, 164, 56, 5, 195, 252,
+    56, 5, 155, 56, 5, 199, 176, 56, 5, 237, 20, 56, 5, 237, 25, 56, 5, 219,
+    107, 56, 5, 207, 55, 56, 5, 236, 146, 56, 5, 214, 231, 56, 5, 202, 212,
+    56, 5, 203, 211, 56, 5, 192, 8, 56, 5, 192, 54, 56, 5, 242, 63, 56, 5,
+    222, 233, 56, 5, 213, 231, 56, 5, 193, 1, 56, 5, 221, 113, 56, 5, 214,
+    129, 56, 5, 230, 254, 56, 5, 216, 91, 56, 5, 213, 142, 56, 5, 212, 165,
+    56, 5, 71, 56, 5, 234, 88, 56, 5, 214, 149, 56, 5, 229, 255, 56, 5, 229,
+    208, 56, 5, 194, 111, 56, 5, 194, 94, 56, 5, 210, 181, 56, 5, 248, 49,
+    56, 5, 248, 123, 56, 5, 217, 75, 56, 5, 221, 65, 56, 5, 221, 63, 56, 5,
+    216, 208, 56, 5, 231, 172, 56, 5, 231, 170, 56, 5, 233, 47, 56, 5, 196,
+    123, 56, 5, 200, 79, 56, 5, 199, 224, 56, 5, 237, 31, 56, 5, 237, 28, 56,
+    5, 220, 42, 56, 5, 208, 7, 56, 5, 237, 116, 56, 5, 214, 247, 56, 5, 205,
+    223, 56, 5, 204, 12, 56, 5, 192, 85, 56, 5, 192, 62, 56, 5, 246, 158, 56,
+    5, 223, 41, 56, 5, 213, 249, 56, 5, 193, 69, 56, 5, 222, 57, 56, 5, 214,
+    139, 56, 5, 214, 135, 56, 5, 231, 158, 56, 5, 231, 144, 56, 5, 217, 48,
+    56, 5, 214, 214, 56, 5, 212, 190, 56, 5, 214, 167, 56, 5, 219, 250, 56,
+    242, 38, 56, 232, 71, 201, 238, 56, 208, 159, 77, 56, 5, 214, 230, 233,
+    97, 56, 5, 214, 230, 160, 56, 5, 214, 230, 202, 183, 56, 16, 233, 36, 56,
+    16, 222, 46, 56, 16, 199, 78, 56, 16, 214, 27, 56, 16, 248, 201, 56, 16,
+    233, 96, 56, 16, 200, 174, 56, 16, 237, 206, 56, 16, 236, 119, 56, 16,
+    221, 10, 56, 16, 199, 2, 56, 16, 236, 145, 56, 16, 222, 224, 56, 17, 192,
+    76, 56, 17, 101, 56, 17, 104, 56, 17, 133, 56, 17, 134, 56, 17, 151, 56,
+    17, 170, 56, 17, 179, 56, 17, 174, 56, 17, 182, 56, 5, 214, 230, 172, 56,
+    5, 214, 230, 236, 146, 42, 6, 1, 192, 80, 42, 2, 1, 192, 80, 42, 6, 1,
+    235, 12, 42, 2, 1, 235, 12, 42, 6, 1, 207, 168, 235, 14, 42, 2, 1, 207,
+    168, 235, 14, 42, 6, 1, 223, 111, 42, 2, 1, 223, 111, 42, 6, 1, 236, 163,
+    42, 2, 1, 236, 163, 42, 6, 1, 216, 43, 197, 92, 42, 2, 1, 216, 43, 197,
+    92, 42, 6, 1, 247, 138, 211, 216, 42, 2, 1, 247, 138, 211, 216, 42, 6, 1,
+    214, 179, 193, 51, 42, 2, 1, 214, 179, 193, 51, 42, 6, 1, 193, 48, 4,
+    248, 253, 193, 51, 42, 2, 1, 193, 48, 4, 248, 253, 193, 51, 42, 6, 1,
+    223, 109, 193, 84, 42, 2, 1, 223, 109, 193, 84, 42, 6, 1, 207, 168, 192,
+    214, 42, 2, 1, 207, 168, 192, 214, 42, 6, 1, 223, 109, 64, 42, 2, 1, 223,
+    109, 64, 42, 6, 1, 242, 84, 219, 147, 192, 179, 42, 2, 1, 242, 84, 219,
+    147, 192, 179, 42, 6, 1, 247, 240, 192, 179, 42, 2, 1, 247, 240, 192,
+    179, 42, 6, 1, 223, 109, 242, 84, 219, 147, 192, 179, 42, 2, 1, 223, 109,
+    242, 84, 219, 147, 192, 179, 42, 6, 1, 193, 3, 42, 2, 1, 193, 3, 42, 6,
+    1, 207, 168, 198, 112, 42, 2, 1, 207, 168, 198, 112, 42, 6, 1, 202, 198,
+    237, 116, 42, 2, 1, 202, 198, 237, 116, 42, 6, 1, 202, 198, 234, 124, 42,
+    2, 1, 202, 198, 234, 124, 42, 6, 1, 202, 198, 234, 99, 42, 2, 1, 202,
+    198, 234, 99, 42, 6, 1, 216, 47, 74, 42, 2, 1, 216, 47, 74, 42, 6, 1,
+    248, 17, 74, 42, 2, 1, 248, 17, 74, 42, 6, 1, 55, 216, 47, 74, 42, 2, 1,
+    55, 216, 47, 74, 42, 1, 215, 217, 74, 38, 42, 194, 204, 38, 42, 200, 31,
+    216, 124, 57, 38, 42, 228, 163, 216, 124, 57, 38, 42, 199, 165, 216, 124,
+    57, 203, 2, 250, 37, 38, 42, 1, 197, 89, 223, 251, 38, 42, 1, 70, 38, 42,
+    1, 193, 22, 38, 42, 1, 68, 38, 42, 1, 230, 26, 57, 38, 42, 1, 193, 47,
+    38, 42, 1, 202, 198, 57, 38, 42, 1, 211, 216, 38, 42, 222, 69, 38, 42,
+    210, 188, 42, 222, 69, 42, 210, 188, 42, 6, 1, 235, 27, 42, 2, 1, 235,
+    27, 42, 6, 1, 235, 3, 42, 2, 1, 235, 3, 42, 6, 1, 192, 38, 42, 2, 1, 192,
+    38, 42, 6, 1, 246, 174, 42, 2, 1, 246, 174, 42, 6, 1, 234, 255, 42, 2, 1,
+    234, 255, 42, 6, 1, 200, 80, 4, 85, 128, 42, 2, 1, 200, 80, 4, 85, 128,
+    42, 6, 1, 197, 248, 42, 2, 1, 197, 248, 42, 6, 1, 198, 87, 42, 2, 1, 198,
+    87, 42, 6, 1, 198, 92, 42, 2, 1, 198, 92, 42, 6, 1, 200, 85, 42, 2, 1,
+    200, 85, 42, 6, 1, 228, 144, 42, 2, 1, 228, 144, 42, 6, 1, 203, 140, 42,
+    2, 1, 203, 140, 42, 6, 1, 55, 74, 42, 2, 1, 55, 74, 42, 6, 1, 238, 180,
+    74, 42, 2, 1, 238, 180, 74, 73, 1, 42, 230, 26, 57, 73, 1, 42, 202, 198,
+    57, 38, 42, 1, 234, 164, 38, 42, 1, 223, 109, 71, 25, 1, 64, 25, 1, 160,
+    25, 1, 68, 25, 1, 221, 33, 25, 1, 234, 171, 25, 1, 207, 234, 25, 1, 200,
+    157, 25, 1, 74, 25, 1, 212, 181, 25, 1, 70, 25, 1, 177, 25, 1, 166, 25,
+    1, 207, 88, 25, 1, 207, 136, 25, 1, 220, 31, 25, 1, 217, 28, 25, 1, 200,
+    174, 25, 1, 214, 253, 25, 1, 213, 254, 25, 1, 218, 236, 25, 1, 201, 86,
+    25, 1, 215, 241, 25, 1, 203, 231, 25, 1, 203, 125, 25, 1, 203, 241, 25,
+    1, 204, 147, 25, 1, 220, 208, 25, 1, 222, 20, 25, 1, 212, 246, 25, 1,
+    213, 22, 25, 1, 213, 225, 25, 1, 192, 232, 25, 1, 203, 164, 25, 1, 192,
+    183, 25, 1, 168, 25, 1, 213, 59, 25, 1, 222, 6, 25, 1, 210, 98, 25, 1,
+    213, 247, 25, 1, 213, 39, 25, 1, 209, 42, 25, 1, 193, 241, 25, 1, 210,
+    168, 25, 1, 233, 40, 25, 1, 206, 218, 25, 1, 219, 36, 25, 1, 216, 175,
+    25, 1, 214, 60, 25, 1, 207, 170, 25, 1, 208, 53, 25, 1, 222, 30, 25, 1,
+    214, 93, 25, 1, 214, 144, 25, 1, 214, 165, 25, 1, 203, 211, 25, 1, 209,
+    47, 25, 1, 232, 77, 25, 1, 232, 157, 25, 1, 194, 169, 25, 1, 181, 25, 1,
+    219, 209, 25, 1, 210, 51, 25, 1, 219, 65, 25, 1, 221, 113, 25, 1, 217,
+    72, 25, 1, 207, 205, 25, 1, 217, 5, 25, 1, 172, 25, 1, 199, 128, 25, 1,
+    221, 204, 25, 1, 216, 91, 25, 1, 217, 80, 25, 1, 200, 8, 25, 1, 221, 69,
+    25, 1, 200, 30, 25, 1, 213, 25, 25, 1, 206, 48, 25, 1, 233, 93, 25, 1,
+    221, 72, 25, 1, 221, 104, 25, 38, 122, 221, 81, 25, 38, 122, 198, 30, 25,
+    213, 253, 25, 232, 71, 201, 238, 25, 242, 47, 25, 242, 38, 25, 204, 180,
+    25, 208, 159, 77, 73, 1, 242, 200, 158, 193, 11, 209, 255, 73, 1, 242,
+    200, 158, 193, 96, 209, 255, 73, 1, 242, 200, 158, 193, 11, 204, 36, 73,
+    1, 242, 200, 158, 193, 96, 204, 36, 73, 1, 242, 200, 158, 193, 11, 208,
+    177, 73, 1, 242, 200, 158, 193, 96, 208, 177, 73, 1, 242, 200, 158, 193,
+    11, 206, 218, 73, 1, 242, 200, 158, 193, 96, 206, 218, 73, 1, 233, 188,
+    235, 111, 158, 161, 73, 1, 139, 235, 111, 158, 161, 73, 1, 216, 162, 235,
+    111, 158, 161, 73, 1, 132, 235, 111, 158, 161, 73, 1, 233, 187, 235, 111,
+    158, 161, 73, 1, 233, 188, 235, 111, 220, 20, 158, 161, 73, 1, 139, 235,
+    111, 220, 20, 158, 161, 73, 1, 216, 162, 235, 111, 220, 20, 158, 161, 73,
+    1, 132, 235, 111, 220, 20, 158, 161, 73, 1, 233, 187, 235, 111, 220, 20,
+    158, 161, 73, 1, 233, 188, 220, 20, 158, 161, 73, 1, 139, 220, 20, 158,
+    161, 73, 1, 216, 162, 220, 20, 158, 161, 73, 1, 132, 220, 20, 158, 161,
+    73, 1, 233, 187, 220, 20, 158, 161, 73, 1, 78, 84, 161, 73, 1, 78, 203,
+    4, 73, 1, 78, 229, 5, 161, 73, 1, 106, 51, 238, 224, 250, 207, 73, 1,
+    208, 39, 130, 54, 73, 1, 208, 39, 142, 54, 73, 1, 208, 39, 233, 204, 77,
+    73, 1, 208, 39, 223, 121, 233, 204, 77, 73, 1, 132, 223, 121, 233, 204,
+    77, 73, 1, 201, 218, 26, 139, 199, 18, 73, 1, 201, 218, 26, 132, 199, 18,
+    8, 6, 1, 234, 159, 251, 26, 8, 2, 1, 234, 159, 251, 26, 8, 6, 1, 234,
+    159, 251, 57, 8, 2, 1, 234, 159, 251, 57, 8, 6, 1, 229, 206, 8, 2, 1,
+    229, 206, 8, 6, 1, 197, 192, 8, 2, 1, 197, 192, 8, 6, 1, 198, 189, 8, 2,
+    1, 198, 189, 8, 6, 1, 238, 159, 8, 2, 1, 238, 159, 8, 6, 1, 238, 160, 4,
+    242, 38, 8, 2, 1, 238, 160, 4, 242, 38, 8, 1, 2, 6, 233, 163, 8, 1, 2, 6,
+    206, 158, 8, 6, 1, 252, 33, 8, 2, 1, 252, 33, 8, 6, 1, 250, 166, 8, 2, 1,
+    250, 166, 8, 6, 1, 250, 8, 8, 2, 1, 250, 8, 8, 6, 1, 249, 247, 8, 2, 1,
+    249, 247, 8, 6, 1, 249, 248, 4, 229, 5, 161, 8, 2, 1, 249, 248, 4, 229,
+    5, 161, 8, 6, 1, 249, 236, 8, 2, 1, 249, 236, 8, 6, 1, 207, 168, 247, 53,
+    4, 236, 114, 8, 2, 1, 207, 168, 247, 53, 4, 236, 114, 8, 6, 1, 222, 185,
+    4, 111, 8, 2, 1, 222, 185, 4, 111, 8, 6, 1, 222, 185, 4, 237, 11, 111, 8,
+    2, 1, 222, 185, 4, 237, 11, 111, 8, 6, 1, 222, 185, 4, 201, 208, 26, 237,
+    11, 111, 8, 2, 1, 222, 185, 4, 201, 208, 26, 237, 11, 111, 8, 6, 1, 247,
+    136, 165, 8, 2, 1, 247, 136, 165, 8, 6, 1, 220, 202, 4, 139, 111, 8, 2,
+    1, 220, 202, 4, 139, 111, 8, 6, 1, 185, 4, 184, 201, 208, 211, 110, 8, 2,
+    1, 185, 4, 184, 201, 208, 211, 110, 8, 6, 1, 185, 4, 219, 69, 8, 2, 1,
+    185, 4, 219, 69, 8, 6, 1, 211, 194, 8, 2, 1, 211, 194, 8, 6, 1, 211, 94,
+    4, 201, 208, 199, 151, 237, 59, 8, 2, 1, 211, 94, 4, 201, 208, 199, 151,
+    237, 59, 8, 6, 1, 211, 94, 4, 232, 177, 8, 2, 1, 211, 94, 4, 232, 177, 8,
+    6, 1, 211, 94, 4, 202, 98, 200, 147, 8, 2, 1, 211, 94, 4, 202, 98, 200,
+    147, 8, 6, 1, 208, 248, 4, 201, 208, 199, 151, 237, 59, 8, 2, 1, 208,
+    248, 4, 201, 208, 199, 151, 237, 59, 8, 6, 1, 208, 248, 4, 237, 11, 111,
+    8, 2, 1, 208, 248, 4, 237, 11, 111, 8, 6, 1, 208, 112, 207, 10, 8, 2, 1,
+    208, 112, 207, 10, 8, 6, 1, 206, 199, 207, 10, 8, 2, 1, 206, 199, 207,
+    10, 8, 6, 1, 196, 237, 4, 237, 11, 111, 8, 2, 1, 196, 237, 4, 237, 11,
+    111, 8, 6, 1, 194, 210, 8, 2, 1, 194, 210, 8, 6, 1, 196, 4, 192, 155, 8,
+    2, 1, 196, 4, 192, 155, 8, 6, 1, 199, 169, 4, 111, 8, 2, 1, 199, 169, 4,
+    111, 8, 6, 1, 199, 169, 4, 201, 208, 199, 151, 237, 59, 8, 2, 1, 199,
+    169, 4, 201, 208, 199, 151, 237, 59, 8, 6, 1, 196, 112, 8, 2, 1, 196,
+    112, 8, 6, 1, 233, 242, 8, 2, 1, 233, 242, 8, 6, 1, 223, 96, 8, 2, 1,
+    223, 96, 8, 6, 1, 239, 21, 8, 2, 1, 239, 21, 73, 1, 197, 10, 8, 2, 1,
+    235, 51, 8, 2, 1, 219, 19, 8, 2, 1, 215, 210, 8, 2, 1, 212, 237, 8, 2, 1,
+    206, 198, 8, 1, 2, 6, 206, 198, 8, 2, 1, 198, 27, 8, 2, 1, 197, 84, 8, 6,
+    1, 223, 143, 238, 95, 8, 2, 1, 223, 143, 238, 95, 8, 6, 1, 223, 143, 233,
+    163, 8, 2, 1, 223, 143, 233, 163, 8, 6, 1, 223, 143, 232, 44, 8, 6, 1,
+    163, 223, 143, 232, 44, 8, 2, 1, 163, 223, 143, 232, 44, 8, 6, 1, 163,
+    165, 8, 2, 1, 163, 165, 8, 6, 1, 223, 143, 150, 8, 2, 1, 223, 143, 150,
+    8, 6, 1, 223, 143, 206, 158, 8, 2, 1, 223, 143, 206, 158, 8, 6, 1, 223,
+    143, 200, 228, 8, 2, 1, 223, 143, 200, 228, 73, 1, 132, 242, 122, 251,
+    143, 73, 1, 242, 47, 73, 1, 203, 195, 234, 30, 57, 8, 6, 1, 206, 53, 8,
+    2, 1, 206, 53, 8, 6, 1, 163, 230, 124, 8, 2, 1, 220, 202, 4, 207, 174,
+    229, 15, 26, 248, 82, 8, 1, 203, 67, 236, 114, 8, 6, 1, 215, 152, 4, 237,
+    59, 8, 2, 1, 215, 152, 4, 237, 59, 8, 6, 1, 247, 53, 4, 161, 8, 2, 1,
+    247, 53, 4, 161, 8, 2, 1, 247, 53, 4, 211, 49, 128, 8, 2, 1, 230, 125, 4,
+    211, 49, 128, 8, 6, 1, 76, 4, 232, 177, 8, 2, 1, 76, 4, 232, 177, 8, 6,
+    1, 233, 164, 4, 111, 8, 2, 1, 233, 164, 4, 111, 8, 6, 1, 195, 243, 251,
+    108, 8, 2, 1, 195, 243, 251, 108, 8, 6, 1, 195, 243, 212, 0, 8, 2, 1,
+    195, 243, 212, 0, 8, 6, 1, 195, 243, 197, 104, 8, 2, 1, 195, 243, 197,
+    104, 8, 6, 1, 232, 45, 4, 212, 18, 111, 8, 2, 1, 232, 45, 4, 212, 18,
+    111, 8, 6, 1, 222, 185, 4, 212, 18, 111, 8, 2, 1, 222, 185, 4, 212, 18,
+    111, 8, 6, 1, 215, 152, 4, 212, 18, 111, 8, 2, 1, 215, 152, 4, 212, 18,
+    111, 8, 6, 1, 208, 112, 4, 212, 18, 111, 8, 2, 1, 208, 112, 4, 212, 18,
+    111, 8, 6, 1, 206, 159, 4, 212, 18, 111, 8, 2, 1, 206, 159, 4, 212, 18,
+    111, 8, 6, 1, 230, 125, 4, 128, 8, 6, 1, 207, 168, 211, 184, 71, 8, 6, 1,
+    27, 232, 44, 8, 6, 1, 220, 202, 4, 248, 82, 8, 6, 1, 2, 6, 70, 8, 1, 2,
+    6, 208, 247, 8, 6, 1, 163, 222, 184, 8, 6, 1, 163, 200, 228, 8, 6, 1,
+    223, 66, 4, 238, 178, 8, 6, 1, 242, 215, 8, 6, 1, 248, 63, 8, 2, 1, 248,
+    63, 8, 6, 1, 211, 216, 8, 2, 1, 211, 216, 8, 6, 1, 124, 4, 111, 8, 2, 1,
+    124, 4, 111, 8, 6, 1, 231, 6, 64, 8, 2, 1, 231, 6, 64, 8, 6, 1, 231, 6,
+    70, 8, 2, 1, 231, 6, 70, 8, 6, 1, 231, 6, 68, 8, 2, 1, 231, 6, 68, 8, 6,
+    1, 250, 204, 194, 202, 8, 2, 1, 250, 204, 194, 202, 8, 6, 1, 247, 53, 4,
+    211, 49, 128, 8, 6, 1, 206, 159, 4, 128, 8, 6, 1, 192, 156, 4, 211, 49,
+    128, 8, 6, 1, 238, 96, 4, 203, 195, 201, 208, 211, 110, 8, 2, 1, 238, 96,
+    4, 203, 195, 201, 208, 211, 110, 8, 6, 1, 206, 159, 4, 203, 195, 201,
+    208, 211, 110, 8, 2, 1, 206, 159, 4, 203, 195, 201, 208, 211, 110, 8, 6,
+    1, 207, 168, 138, 230, 124, 8, 2, 1, 207, 168, 138, 230, 124, 8, 234, 35,
+    1, 203, 109, 70, 73, 1, 6, 230, 125, 4, 111, 73, 1, 2, 34, 212, 0, 8, 1,
+    2, 6, 163, 218, 236, 8, 234, 35, 1, 207, 168, 233, 163, 8, 234, 35, 1,
+    207, 168, 211, 93, 8, 234, 35, 1, 223, 121, 218, 236, 8, 234, 35, 1, 228,
+    97, 219, 75, 8, 234, 35, 1, 250, 112, 218, 236, 201, 53, 215, 72, 1, 64,
+    201, 53, 215, 72, 1, 70, 201, 53, 215, 72, 3, 235, 29, 201, 53, 215, 72,
+    1, 68, 201, 53, 215, 72, 1, 71, 201, 53, 215, 72, 1, 74, 201, 53, 215,
+    72, 3, 230, 20, 201, 53, 215, 72, 1, 221, 113, 201, 53, 215, 72, 1, 221,
+    220, 201, 53, 215, 72, 1, 230, 254, 201, 53, 215, 72, 1, 231, 56, 201,
+    53, 215, 72, 3, 250, 168, 201, 53, 215, 72, 1, 242, 63, 201, 53, 215, 72,
+    1, 242, 188, 201, 53, 215, 72, 1, 222, 233, 201, 53, 215, 72, 1, 223, 22,
+    201, 53, 215, 72, 1, 198, 60, 201, 53, 215, 72, 1, 198, 66, 201, 53, 215,
+    72, 1, 237, 131, 201, 53, 215, 72, 1, 237, 140, 201, 53, 215, 72, 1, 155,
+    201, 53, 215, 72, 1, 199, 176, 201, 53, 215, 72, 1, 236, 146, 201, 53,
+    215, 72, 1, 237, 20, 201, 53, 215, 72, 1, 213, 142, 201, 53, 215, 72, 1,
+    209, 198, 201, 53, 215, 72, 1, 210, 65, 201, 53, 215, 72, 1, 247, 220,
+    201, 53, 215, 72, 1, 248, 45, 201, 53, 215, 72, 1, 216, 91, 201, 53, 215,
+    72, 1, 207, 55, 201, 53, 215, 72, 1, 219, 107, 201, 53, 215, 72, 1, 206,
+    245, 201, 53, 215, 72, 1, 202, 212, 201, 53, 215, 72, 1, 229, 43, 201,
+    53, 215, 72, 18, 3, 64, 201, 53, 215, 72, 18, 3, 70, 201, 53, 215, 72,
+    18, 3, 68, 201, 53, 215, 72, 18, 3, 71, 201, 53, 215, 72, 18, 3, 211,
+    194, 201, 53, 215, 72, 209, 193, 217, 126, 201, 53, 215, 72, 209, 193,
+    217, 125, 201, 53, 215, 72, 209, 193, 217, 124, 201, 53, 215, 72, 209,
+    193, 217, 123, 201, 53, 215, 72, 3, 250, 249, 230, 20, 178, 223, 174,
+    232, 109, 90, 208, 167, 178, 223, 174, 232, 109, 90, 230, 78, 178, 223,
+    174, 232, 109, 112, 208, 165, 178, 223, 174, 232, 109, 90, 203, 33, 178,
+    223, 174, 232, 109, 90, 234, 143, 178, 223, 174, 232, 109, 112, 203, 30,
+    178, 223, 174, 208, 168, 77, 178, 223, 174, 209, 231, 77, 178, 223, 174,
+    206, 186, 77, 178, 223, 174, 208, 169, 77, 210, 90, 1, 160, 210, 90, 1,
+    221, 250, 210, 90, 1, 231, 233, 210, 90, 1, 214, 165, 210, 90, 1, 247,
+    19, 210, 90, 1, 246, 117, 210, 90, 1, 223, 62, 210, 90, 1, 212, 201, 210,
+    90, 1, 189, 210, 90, 1, 199, 240, 210, 90, 1, 238, 0, 210, 90, 1, 181,
+    210, 90, 1, 166, 210, 90, 1, 210, 94, 210, 90, 1, 249, 3, 210, 90, 1,
+    172, 210, 90, 1, 198, 118, 210, 90, 1, 198, 108, 210, 90, 1, 235, 17,
+    210, 90, 1, 194, 169, 210, 90, 1, 192, 71, 210, 90, 1, 192, 112, 210, 90,
+    1, 2, 64, 210, 90, 1, 168, 210, 90, 1, 167, 210, 90, 1, 177, 210, 90, 1,
+    204, 64, 210, 90, 1, 188, 210, 90, 1, 144, 210, 90, 1, 64, 210, 90, 1,
+    70, 210, 90, 1, 68, 210, 90, 1, 71, 210, 90, 1, 74, 210, 90, 1, 208, 239,
+    210, 90, 1, 193, 209, 210, 90, 1, 233, 97, 210, 90, 1, 231, 120, 210, 90,
+    1, 234, 171, 210, 90, 201, 164, 1, 194, 169, 210, 90, 201, 164, 1, 168,
+    210, 90, 1, 198, 83, 210, 90, 1, 198, 71, 210, 90, 1, 237, 161, 210, 90,
+    1, 213, 178, 210, 90, 1, 250, 249, 168, 210, 90, 1, 195, 247, 204, 64,
+    210, 90, 1, 195, 248, 144, 210, 90, 1, 250, 44, 233, 97, 210, 90, 201,
+    164, 1, 167, 210, 90, 201, 110, 1, 167, 210, 90, 1, 246, 234, 210, 90,
+    203, 74, 229, 246, 77, 210, 90, 55, 229, 246, 77, 210, 90, 122, 204, 56,
+    210, 90, 122, 55, 204, 56, 206, 9, 3, 250, 168, 206, 9, 3, 196, 6, 206,
+    9, 1, 64, 206, 9, 1, 252, 33, 206, 9, 1, 70, 206, 9, 1, 223, 224, 206, 9,
+    1, 68, 206, 9, 1, 196, 251, 206, 9, 1, 118, 150, 206, 9, 1, 118, 207, 4,
+    206, 9, 1, 118, 165, 206, 9, 1, 118, 219, 138, 206, 9, 1, 71, 206, 9, 1,
+    234, 171, 206, 9, 1, 251, 63, 206, 9, 1, 74, 206, 9, 1, 211, 194, 206, 9,
+    1, 250, 8, 206, 9, 1, 160, 206, 9, 1, 221, 250, 206, 9, 1, 231, 233, 206,
+    9, 1, 231, 84, 206, 9, 1, 214, 165, 206, 9, 1, 247, 19, 206, 9, 1, 246,
+    117, 206, 9, 1, 223, 62, 206, 9, 1, 223, 28, 206, 9, 1, 212, 201, 206, 9,
+    1, 198, 83, 206, 9, 1, 198, 71, 206, 9, 1, 237, 161, 206, 9, 1, 237, 145,
+    206, 9, 1, 213, 178, 206, 9, 1, 189, 206, 9, 1, 199, 240, 206, 9, 1, 238,
+    0, 206, 9, 1, 237, 40, 206, 9, 1, 181, 206, 9, 1, 166, 206, 9, 1, 210,
+    94, 206, 9, 1, 249, 3, 206, 9, 1, 248, 54, 206, 9, 1, 172, 206, 9, 1,
+    168, 206, 9, 1, 167, 206, 9, 1, 177, 206, 9, 1, 196, 157, 206, 9, 1, 204,
+    64, 206, 9, 1, 202, 92, 206, 9, 1, 188, 206, 9, 1, 144, 206, 9, 1, 219,
+    137, 206, 9, 116, 3, 230, 97, 206, 9, 18, 3, 252, 33, 206, 9, 18, 3, 70,
+    206, 9, 18, 3, 223, 224, 206, 9, 18, 3, 68, 206, 9, 18, 3, 196, 251, 206,
+    9, 18, 3, 118, 150, 206, 9, 18, 3, 118, 207, 4, 206, 9, 18, 3, 118, 165,
+    206, 9, 18, 3, 118, 219, 138, 206, 9, 18, 3, 71, 206, 9, 18, 3, 234, 171,
+    206, 9, 18, 3, 251, 63, 206, 9, 18, 3, 74, 206, 9, 18, 3, 211, 194, 206,
+    9, 18, 3, 250, 8, 206, 9, 3, 196, 11, 206, 9, 3, 246, 234, 206, 9, 237,
+    208, 206, 9, 55, 237, 208, 206, 9, 17, 192, 76, 206, 9, 17, 101, 206, 9,
+    17, 104, 206, 9, 17, 133, 206, 9, 17, 134, 206, 9, 17, 151, 206, 9, 17,
+    170, 206, 9, 17, 179, 206, 9, 17, 174, 206, 9, 17, 182, 38, 107, 17, 192,
+    76, 38, 107, 17, 101, 38, 107, 17, 104, 38, 107, 17, 133, 38, 107, 17,
+    134, 38, 107, 17, 151, 38, 107, 17, 170, 38, 107, 17, 179, 38, 107, 17,
+    174, 38, 107, 17, 182, 38, 107, 1, 64, 38, 107, 1, 68, 38, 107, 1, 160,
+    38, 107, 1, 181, 38, 107, 1, 166, 38, 107, 1, 167, 38, 107, 1, 196, 39,
+    38, 107, 3, 249, 246, 107, 3, 202, 159, 246, 234, 107, 3, 246, 235, 196,
+    11, 107, 3, 55, 246, 235, 196, 11, 107, 3, 246, 235, 104, 107, 3, 246,
+    235, 133, 107, 3, 246, 235, 249, 246, 107, 3, 209, 20, 107, 231, 197,
+    232, 247, 107, 246, 211, 107, 229, 237, 107, 3, 203, 113, 107, 223, 54,
+    211, 219, 107, 1, 249, 236, 107, 18, 3, 249, 236, 222, 63, 219, 210, 17,
+    192, 76, 222, 63, 219, 210, 17, 101, 222, 63, 219, 210, 17, 104, 222, 63,
+    219, 210, 17, 133, 222, 63, 219, 210, 17, 134, 222, 63, 219, 210, 17,
+    151, 222, 63, 219, 210, 17, 170, 222, 63, 219, 210, 17, 179, 222, 63,
+    219, 210, 17, 174, 222, 63, 219, 210, 17, 182, 222, 63, 219, 210, 1, 160,
+    222, 63, 219, 210, 1, 221, 250, 222, 63, 219, 210, 1, 231, 233, 222, 63,
+    219, 210, 1, 214, 165, 222, 63, 219, 210, 1, 188, 222, 63, 219, 210, 1,
+    204, 64, 222, 63, 219, 210, 1, 192, 112, 222, 63, 219, 210, 1, 212, 201,
+    222, 63, 219, 210, 1, 189, 222, 63, 219, 210, 1, 228, 185, 222, 63, 219,
+    210, 1, 181, 222, 63, 219, 210, 1, 166, 222, 63, 219, 210, 1, 210, 94,
+    222, 63, 219, 210, 1, 172, 222, 63, 219, 210, 1, 238, 0, 222, 63, 219,
+    210, 1, 249, 3, 222, 63, 219, 210, 1, 167, 222, 63, 219, 210, 1, 168,
+    222, 63, 219, 210, 1, 177, 222, 63, 219, 210, 1, 194, 169, 222, 63, 219,
+    210, 1, 199, 240, 222, 63, 219, 210, 1, 144, 222, 63, 219, 210, 1, 196,
+    157, 222, 63, 219, 210, 1, 247, 19, 222, 63, 219, 210, 1, 64, 222, 63,
+    219, 210, 1, 212, 0, 222, 63, 219, 210, 1, 70, 222, 63, 219, 210, 1, 211,
+    194, 222, 63, 219, 210, 18, 197, 104, 222, 63, 219, 210, 18, 71, 222, 63,
+    219, 210, 18, 68, 222, 63, 219, 210, 18, 234, 171, 222, 63, 219, 210, 18,
+    74, 222, 63, 219, 210, 158, 209, 215, 222, 63, 219, 210, 158, 246, 250,
+    222, 63, 219, 210, 158, 246, 251, 209, 215, 222, 63, 219, 210, 3, 238,
+    114, 222, 63, 219, 210, 3, 203, 133, 207, 217, 1, 160, 207, 217, 1, 231,
+    233, 207, 217, 1, 214, 165, 207, 217, 1, 189, 207, 217, 1, 238, 0, 207,
+    217, 1, 181, 207, 217, 1, 166, 207, 217, 1, 249, 3, 207, 217, 1, 172,
+    207, 217, 1, 247, 19, 207, 217, 1, 223, 62, 207, 217, 1, 212, 201, 207,
+    217, 1, 188, 207, 217, 1, 167, 207, 217, 1, 177, 207, 217, 1, 168, 207,
+    217, 1, 194, 169, 207, 217, 1, 144, 207, 217, 1, 217, 82, 207, 217, 1,
+    214, 144, 207, 217, 1, 214, 255, 207, 217, 1, 212, 166, 207, 217, 1, 64,
+    207, 217, 18, 3, 70, 207, 217, 18, 3, 68, 207, 217, 18, 3, 71, 207, 217,
+    18, 3, 251, 63, 207, 217, 18, 3, 74, 207, 217, 18, 3, 250, 8, 207, 217,
+    18, 3, 233, 230, 207, 217, 18, 3, 234, 199, 207, 217, 116, 3, 214, 167,
+    207, 217, 116, 3, 215, 151, 207, 217, 116, 3, 150, 207, 217, 116, 3, 230,
+    124, 207, 217, 196, 11, 207, 217, 205, 209, 77, 30, 143, 199, 99, 30,
+    143, 199, 98, 30, 143, 199, 96, 30, 143, 199, 101, 30, 143, 207, 128, 30,
+    143, 207, 112, 30, 143, 207, 107, 30, 143, 207, 109, 30, 143, 207, 125,
+    30, 143, 207, 118, 30, 143, 207, 111, 30, 143, 207, 130, 30, 143, 207,
+    113, 30, 143, 207, 132, 30, 143, 207, 129, 30, 143, 216, 149, 30, 143,
+    216, 140, 30, 143, 216, 143, 30, 143, 210, 21, 30, 143, 210, 32, 30, 143,
+    210, 33, 30, 143, 202, 76, 30, 143, 223, 237, 30, 143, 223, 244, 30, 143,
+    202, 87, 30, 143, 202, 74, 30, 143, 210, 74, 30, 143, 229, 157, 30, 143,
+    202, 71, 223, 47, 3, 211, 3, 223, 47, 3, 246, 155, 223, 47, 3, 220, 50,
+    223, 47, 3, 194, 57, 223, 47, 1, 64, 223, 47, 1, 228, 97, 222, 67, 223,
+    47, 1, 70, 223, 47, 1, 223, 224, 223, 47, 1, 68, 223, 47, 1, 211, 78,
+    246, 125, 223, 47, 1, 214, 166, 220, 7, 223, 47, 1, 214, 166, 220, 8,
+    208, 23, 223, 47, 1, 71, 223, 47, 1, 251, 63, 223, 47, 1, 74, 223, 47, 1,
+    160, 223, 47, 1, 222, 174, 206, 22, 223, 47, 1, 222, 174, 215, 195, 223,
+    47, 1, 231, 233, 223, 47, 1, 231, 234, 215, 195, 223, 47, 1, 214, 165,
+    223, 47, 1, 247, 19, 223, 47, 1, 247, 20, 215, 195, 223, 47, 1, 223, 62,
+    223, 47, 1, 212, 202, 215, 195, 223, 47, 1, 223, 63, 217, 184, 223, 47,
+    1, 212, 201, 223, 47, 1, 198, 83, 223, 47, 1, 198, 84, 217, 184, 223, 47,
+    1, 237, 161, 223, 47, 1, 237, 162, 217, 184, 223, 47, 1, 215, 97, 215,
+    195, 223, 47, 1, 189, 223, 47, 1, 200, 181, 215, 195, 223, 47, 1, 238, 0,
+    223, 47, 1, 238, 1, 217, 184, 223, 47, 1, 181, 223, 47, 1, 166, 223, 47,
+    1, 211, 78, 215, 195, 223, 47, 1, 249, 3, 223, 47, 1, 249, 4, 215, 195,
+    223, 47, 1, 172, 223, 47, 1, 168, 223, 47, 1, 167, 223, 47, 1, 208, 76,
+    251, 73, 223, 47, 1, 177, 223, 47, 1, 194, 169, 223, 47, 1, 206, 101,
+    215, 195, 223, 47, 1, 206, 101, 217, 184, 223, 47, 1, 188, 223, 47, 1,
+    144, 223, 47, 3, 246, 156, 200, 35, 223, 47, 18, 3, 200, 108, 223, 47,
+    18, 3, 199, 23, 223, 47, 18, 3, 193, 238, 223, 47, 18, 3, 193, 239, 217,
+    16, 223, 47, 18, 3, 201, 133, 223, 47, 18, 3, 201, 134, 217, 4, 223, 47,
+    18, 3, 200, 133, 223, 47, 18, 3, 236, 202, 215, 194, 223, 47, 18, 3, 210,
+    136, 223, 47, 116, 3, 222, 23, 223, 47, 116, 3, 210, 151, 223, 47, 116,
+    3, 247, 4, 223, 47, 211, 16, 223, 47, 46, 207, 190, 223, 47, 51, 207,
+    190, 223, 47, 211, 66, 250, 216, 223, 47, 211, 66, 217, 205, 223, 47,
+    211, 66, 219, 23, 223, 47, 211, 66, 194, 50, 223, 47, 211, 66, 211, 17,
+    223, 47, 211, 66, 219, 167, 223, 47, 211, 66, 219, 16, 223, 47, 211, 66,
+    251, 119, 223, 47, 211, 66, 251, 120, 251, 119, 223, 47, 211, 66, 209,
+    243, 223, 47, 163, 211, 66, 209, 243, 223, 47, 211, 12, 223, 47, 17, 192,
+    76, 223, 47, 17, 101, 223, 47, 17, 104, 223, 47, 17, 133, 223, 47, 17,
+    134, 223, 47, 17, 151, 223, 47, 17, 170, 223, 47, 17, 179, 223, 47, 17,
+    174, 223, 47, 17, 182, 223, 47, 211, 66, 199, 65, 198, 24, 223, 47, 211,
+    66, 223, 92, 79, 1, 204, 38, 231, 84, 79, 1, 204, 38, 246, 117, 79, 1,
+    204, 38, 223, 28, 79, 1, 204, 38, 213, 178, 79, 1, 204, 38, 248, 54, 79,
+    3, 204, 38, 206, 6, 79, 73, 1, 204, 38, 207, 235, 79, 1, 53, 220, 154,
+    212, 201, 79, 1, 53, 220, 154, 233, 97, 79, 1, 53, 220, 154, 231, 233,
+    79, 1, 53, 220, 154, 231, 84, 79, 1, 53, 220, 154, 223, 62, 79, 1, 53,
+    220, 154, 223, 28, 79, 1, 53, 220, 154, 237, 161, 79, 1, 53, 220, 154,
+    237, 145, 79, 1, 53, 220, 154, 213, 178, 79, 53, 220, 154, 17, 192, 76,
+    79, 53, 220, 154, 17, 101, 79, 53, 220, 154, 17, 104, 79, 53, 220, 154,
+    17, 133, 79, 53, 220, 154, 17, 134, 79, 53, 220, 154, 17, 151, 79, 53,
+    220, 154, 17, 170, 79, 53, 220, 154, 17, 179, 79, 53, 220, 154, 17, 174,
+    79, 53, 220, 154, 17, 182, 79, 1, 53, 220, 154, 219, 137, 79, 1, 53, 220,
+    154, 238, 0, 79, 1, 53, 220, 154, 237, 40, 79, 1, 53, 220, 154, 249, 3,
+    79, 1, 53, 220, 154, 248, 54, 246, 110, 1, 64, 246, 110, 1, 70, 246, 110,
+    1, 68, 246, 110, 1, 71, 246, 110, 1, 251, 63, 246, 110, 1, 74, 246, 110,
+    1, 160, 246, 110, 1, 221, 250, 246, 110, 1, 231, 233, 246, 110, 1, 231,
+    84, 246, 110, 1, 214, 74, 246, 110, 1, 214, 165, 246, 110, 1, 246, 117,
+    246, 110, 1, 242, 218, 246, 110, 1, 223, 62, 246, 110, 1, 223, 28, 246,
+    110, 1, 214, 62, 246, 110, 1, 214, 65, 246, 110, 1, 214, 63, 246, 110, 1,
+    189, 246, 110, 1, 199, 240, 246, 110, 1, 238, 0, 246, 110, 1, 237, 40,
+    246, 110, 1, 212, 244, 246, 110, 1, 181, 246, 110, 1, 237, 161, 246, 110,
+    1, 166, 246, 110, 1, 209, 134, 246, 110, 1, 210, 94, 246, 110, 1, 249, 3,
+    246, 110, 1, 248, 54, 246, 110, 1, 215, 229, 246, 110, 1, 172, 246, 110,
+    1, 248, 159, 246, 110, 1, 168, 246, 110, 1, 167, 246, 110, 1, 177, 246,
+    110, 1, 196, 157, 246, 110, 1, 202, 92, 246, 110, 1, 188, 246, 110, 1,
+    144, 246, 110, 18, 3, 252, 33, 246, 110, 18, 3, 70, 246, 110, 18, 3, 223,
+    224, 246, 110, 18, 3, 234, 150, 246, 110, 18, 3, 68, 246, 110, 18, 3,
+    212, 0, 246, 110, 18, 3, 74, 246, 110, 18, 3, 251, 63, 246, 110, 18, 3,
+    250, 8, 246, 110, 18, 3, 197, 104, 246, 110, 116, 3, 168, 246, 110, 116,
+    3, 167, 246, 110, 116, 3, 177, 246, 110, 116, 3, 194, 169, 246, 110, 1,
+    52, 222, 184, 246, 110, 1, 52, 232, 44, 246, 110, 1, 52, 214, 167, 246,
+    110, 116, 3, 52, 214, 167, 246, 110, 1, 52, 246, 119, 246, 110, 1, 52,
+    200, 228, 246, 110, 1, 52, 215, 151, 246, 110, 1, 52, 211, 93, 246, 110,
+    1, 52, 193, 148, 246, 110, 1, 52, 150, 246, 110, 1, 52, 165, 246, 110, 1,
+    52, 202, 95, 246, 110, 116, 3, 52, 218, 236, 246, 110, 116, 3, 52, 230,
+    124, 246, 110, 17, 192, 76, 246, 110, 17, 101, 246, 110, 17, 104, 246,
+    110, 17, 133, 246, 110, 17, 134, 246, 110, 17, 151, 246, 110, 17, 170,
+    246, 110, 17, 179, 246, 110, 17, 174, 246, 110, 17, 182, 246, 110, 209,
+    38, 202, 132, 246, 110, 209, 38, 237, 208, 246, 110, 209, 38, 55, 237,
+    208, 246, 110, 209, 38, 198, 170, 237, 208, 79, 1, 221, 242, 231, 233,
+    79, 1, 221, 242, 247, 19, 79, 1, 221, 242, 246, 117, 79, 1, 221, 242,
+    223, 62, 79, 1, 221, 242, 223, 28, 79, 1, 221, 242, 212, 201, 79, 1, 221,
+    242, 198, 83, 79, 1, 221, 242, 198, 71, 79, 1, 221, 242, 237, 161, 79, 1,
+    221, 242, 237, 145, 79, 1, 221, 242, 237, 40, 79, 1, 221, 242, 181, 79,
+    1, 221, 242, 188, 79, 1, 221, 242, 144, 79, 1, 221, 242, 229, 187, 79, 1,
+    221, 242, 233, 97, 79, 73, 1, 221, 242, 207, 235, 79, 1, 221, 242, 193,
+    209, 79, 1, 221, 242, 192, 112, 79, 1, 221, 242, 167, 79, 219, 92, 221,
+    242, 212, 23, 79, 219, 92, 221, 242, 208, 190, 79, 219, 92, 221, 242,
+    229, 98, 79, 16, 251, 49, 233, 203, 79, 16, 251, 49, 101, 79, 16, 251,
+    49, 104, 79, 1, 251, 49, 167, 79, 3, 210, 255, 222, 96, 199, 18, 79, 3,
+    53, 220, 154, 199, 16, 79, 3, 53, 220, 154, 199, 13, 79, 1, 203, 141,
+    211, 46, 246, 117, 79, 1, 203, 141, 211, 46, 204, 64, 53, 196, 29, 1,
+    132, 221, 113, 53, 196, 29, 1, 139, 221, 113, 53, 196, 29, 1, 132, 221,
+    220, 53, 196, 29, 1, 139, 221, 220, 53, 196, 29, 1, 132, 221, 229, 53,
+    196, 29, 1, 139, 221, 229, 53, 196, 29, 1, 132, 230, 254, 53, 196, 29, 1,
+    139, 230, 254, 53, 196, 29, 1, 132, 214, 90, 53, 196, 29, 1, 139, 214,
+    90, 53, 196, 29, 1, 132, 242, 63, 53, 196, 29, 1, 139, 242, 63, 53, 196,
+    29, 1, 132, 242, 188, 53, 196, 29, 1, 139, 242, 188, 53, 196, 29, 1, 132,
+    202, 212, 53, 196, 29, 1, 139, 202, 212, 53, 196, 29, 1, 132, 212, 165,
+    53, 196, 29, 1, 139, 212, 165, 53, 196, 29, 1, 132, 236, 146, 53, 196,
+    29, 1, 139, 236, 146, 53, 196, 29, 1, 132, 155, 53, 196, 29, 1, 139, 155,
+    53, 196, 29, 1, 132, 199, 176, 53, 196, 29, 1, 139, 199, 176, 53, 196,
+    29, 1, 132, 213, 142, 53, 196, 29, 1, 139, 213, 142, 53, 196, 29, 1, 132,
+    247, 220, 53, 196, 29, 1, 139, 247, 220, 53, 196, 29, 1, 132, 209, 198,
+    53, 196, 29, 1, 139, 209, 198, 53, 196, 29, 1, 132, 210, 65, 53, 196, 29,
+    1, 139, 210, 65, 53, 196, 29, 1, 132, 232, 164, 53, 196, 29, 1, 139, 232,
+    164, 53, 196, 29, 1, 132, 216, 91, 53, 196, 29, 1, 139, 216, 91, 53, 196,
+    29, 1, 132, 193, 1, 53, 196, 29, 1, 139, 193, 1, 53, 196, 29, 1, 132,
+    207, 55, 53, 196, 29, 1, 139, 207, 55, 53, 196, 29, 1, 132, 219, 107, 53,
+    196, 29, 1, 139, 219, 107, 53, 196, 29, 1, 132, 195, 252, 53, 196, 29, 1,
+    139, 195, 252, 53, 196, 29, 1, 132, 229, 43, 53, 196, 29, 1, 139, 229,
+    43, 53, 196, 29, 1, 132, 74, 53, 196, 29, 1, 139, 74, 53, 196, 29, 217,
+    181, 222, 117, 53, 196, 29, 18, 252, 33, 53, 196, 29, 18, 70, 53, 196,
+    29, 18, 197, 104, 53, 196, 29, 18, 68, 53, 196, 29, 18, 71, 53, 196, 29,
+    18, 74, 53, 196, 29, 217, 181, 221, 223, 53, 196, 29, 18, 228, 58, 53,
+    196, 29, 18, 197, 103, 53, 196, 29, 18, 197, 119, 53, 196, 29, 18, 250,
+    6, 53, 196, 29, 18, 249, 236, 53, 196, 29, 18, 250, 224, 53, 196, 29, 18,
+    250, 241, 53, 196, 29, 158, 217, 181, 234, 131, 53, 196, 29, 158, 217,
+    181, 212, 243, 53, 196, 29, 158, 217, 181, 199, 176, 53, 196, 29, 158,
+    217, 181, 202, 185, 53, 196, 29, 16, 221, 91, 53, 196, 29, 16, 212, 243,
+    53, 196, 29, 16, 206, 50, 53, 196, 29, 16, 229, 44, 229, 30, 53, 196, 29,
+    16, 221, 102, 221, 101, 217, 23, 217, 89, 1, 71, 217, 23, 217, 89, 1, 74,
+    217, 23, 217, 89, 1, 246, 117, 217, 23, 217, 89, 1, 212, 201, 217, 23,
+    217, 89, 1, 198, 83, 217, 23, 217, 89, 1, 198, 71, 217, 23, 217, 89, 1,
+    237, 161, 217, 23, 217, 89, 1, 237, 145, 217, 23, 217, 89, 1, 213, 178,
+    217, 23, 217, 89, 1, 204, 64, 217, 23, 217, 89, 1, 202, 92, 217, 23, 217,
+    89, 18, 3, 223, 224, 217, 23, 217, 89, 18, 3, 196, 251, 217, 23, 217, 89,
+    18, 3, 251, 253, 217, 23, 217, 89, 18, 3, 250, 8, 217, 23, 217, 89, 18,
+    3, 251, 245, 217, 23, 217, 89, 242, 234, 217, 23, 217, 89, 251, 69, 221,
+    211, 217, 23, 217, 89, 250, 197, 217, 23, 217, 89, 5, 207, 196, 77, 217,
+    23, 217, 89, 194, 11, 207, 196, 77, 217, 23, 217, 89, 18, 3, 196, 6, 217,
+    23, 217, 89, 196, 11, 36, 5, 198, 64, 36, 5, 198, 67, 36, 5, 198, 70, 36,
+    5, 198, 68, 36, 5, 198, 69, 36, 5, 198, 66, 36, 5, 237, 139, 36, 5, 237,
+    141, 36, 5, 237, 144, 36, 5, 237, 142, 36, 5, 237, 143, 36, 5, 237, 140,
+    36, 5, 235, 4, 36, 5, 235, 8, 36, 5, 235, 16, 36, 5, 235, 13, 36, 5, 235,
+    14, 36, 5, 235, 5, 36, 5, 246, 172, 36, 5, 246, 166, 36, 5, 246, 168, 36,
+    5, 246, 171, 36, 5, 246, 169, 36, 5, 246, 170, 36, 5, 246, 167, 36, 5,
+    248, 159, 36, 5, 248, 138, 36, 5, 248, 150, 36, 5, 248, 158, 36, 5, 248,
+    153, 36, 5, 248, 154, 36, 5, 248, 142, 8, 2, 1, 248, 188, 250, 252, 8, 2,
+    1, 41, 207, 166, 8, 2, 1, 247, 244, 71, 8, 2, 1, 248, 188, 71, 8, 2, 1,
+    234, 253, 4, 232, 177, 8, 2, 1, 219, 249, 233, 163, 8, 2, 1, 27, 232, 45,
+    4, 238, 178, 8, 2, 1, 220, 202, 4, 223, 121, 220, 49, 206, 158, 8, 2, 1,
+    220, 202, 4, 55, 85, 199, 90, 8, 2, 1, 220, 202, 4, 85, 207, 81, 8, 2, 1,
+    218, 237, 4, 238, 178, 8, 2, 1, 215, 152, 4, 238, 178, 8, 2, 1, 234, 74,
+    4, 238, 178, 8, 2, 1, 247, 244, 74, 8, 2, 1, 247, 244, 185, 4, 111, 8, 2,
+    1, 211, 184, 185, 4, 111, 8, 2, 1, 223, 121, 212, 0, 8, 2, 1, 163, 212,
+    1, 4, 111, 8, 2, 1, 163, 212, 1, 4, 229, 5, 111, 8, 2, 1, 163, 185, 211,
+    179, 8, 2, 1, 163, 185, 211, 180, 4, 111, 8, 2, 1, 201, 243, 150, 8, 1,
+    2, 6, 208, 112, 4, 51, 220, 16, 8, 2, 1, 208, 112, 194, 39, 230, 40, 8,
+    2, 1, 55, 150, 8, 2, 1, 208, 112, 4, 238, 178, 8, 2, 1, 55, 208, 112, 4,
+    238, 178, 8, 2, 1, 27, 150, 8, 2, 1, 27, 208, 112, 4, 207, 81, 8, 2, 1,
+    248, 178, 233, 255, 8, 2, 1, 124, 4, 203, 195, 51, 220, 16, 8, 2, 1, 124,
+    248, 194, 4, 203, 195, 51, 220, 16, 8, 2, 1, 197, 95, 8, 2, 1, 163, 197,
+    95, 8, 2, 1, 124, 4, 46, 128, 8, 2, 1, 242, 215, 8, 2, 1, 242, 216, 4,
+    132, 51, 207, 81, 8, 2, 1, 242, 216, 4, 132, 46, 204, 160, 8, 2, 1, 193,
+    224, 4, 132, 51, 207, 81, 8, 2, 1, 193, 224, 4, 184, 46, 220, 16, 8, 2,
+    1, 193, 224, 4, 184, 46, 220, 17, 26, 132, 51, 207, 81, 8, 2, 1, 193,
+    224, 4, 184, 46, 220, 17, 4, 204, 160, 8, 2, 1, 193, 149, 4, 203, 195,
+    51, 220, 16, 73, 247, 151, 4, 223, 121, 247, 150, 73, 1, 2, 229, 206, 73,
+    1, 2, 220, 202, 4, 223, 121, 220, 49, 206, 158, 73, 1, 2, 220, 202, 4,
+    85, 199, 90, 73, 1, 2, 124, 4, 46, 128, 8, 2, 1, 206, 68, 193, 84, 8, 2,
+    1, 223, 109, 71, 8, 2, 1, 211, 184, 212, 0, 8, 2, 1, 197, 46, 8, 2, 1,
+    223, 121, 250, 252, 33, 1, 2, 6, 211, 216, 8, 2, 1, 235, 19, 236, 231, 4,
+    207, 174, 128, 8, 2, 1, 198, 120, 236, 231, 4, 207, 174, 128, 8, 2, 1,
+    163, 208, 112, 4, 85, 199, 90, 73, 1, 2, 163, 194, 202, 73, 1, 46, 200,
+    159, 73, 1, 51, 200, 159, 99, 2, 1, 64, 99, 2, 1, 71, 99, 2, 1, 70, 99,
+    2, 1, 74, 99, 2, 1, 68, 99, 2, 1, 196, 236, 99, 2, 1, 231, 233, 99, 2, 1,
+    160, 99, 2, 1, 231, 158, 99, 2, 1, 231, 46, 99, 2, 1, 230, 254, 99, 2, 1,
+    230, 186, 99, 2, 1, 230, 146, 99, 2, 1, 144, 99, 2, 1, 229, 255, 99, 2,
+    1, 229, 178, 99, 2, 1, 229, 43, 99, 2, 1, 228, 181, 99, 2, 1, 228, 148,
+    99, 2, 1, 177, 99, 2, 1, 220, 42, 99, 2, 1, 219, 209, 99, 2, 1, 219, 107,
+    99, 2, 1, 219, 36, 99, 2, 1, 219, 4, 99, 2, 1, 172, 99, 2, 1, 217, 48,
+    99, 2, 1, 216, 175, 99, 2, 1, 216, 91, 99, 2, 1, 215, 241, 99, 2, 1, 181,
+    99, 2, 1, 229, 67, 99, 2, 1, 215, 71, 99, 2, 1, 214, 214, 99, 2, 1, 214,
+    60, 99, 2, 1, 213, 142, 99, 2, 1, 213, 22, 99, 2, 1, 212, 212, 99, 2, 1,
+    208, 176, 99, 2, 1, 208, 162, 99, 2, 1, 208, 155, 99, 2, 1, 208, 145, 99,
+    2, 1, 208, 134, 99, 2, 1, 208, 132, 99, 2, 1, 188, 99, 2, 1, 206, 158,
+    99, 2, 1, 205, 223, 99, 2, 1, 203, 125, 99, 2, 1, 202, 212, 99, 2, 1,
+    201, 184, 99, 2, 1, 201, 84, 99, 2, 1, 238, 0, 99, 2, 1, 189, 99, 2, 1,
+    237, 116, 99, 2, 1, 200, 79, 99, 2, 1, 237, 16, 99, 2, 1, 199, 128, 99,
+    2, 1, 236, 146, 99, 2, 1, 235, 62, 99, 2, 1, 235, 31, 99, 2, 1, 236, 158,
+    99, 2, 1, 199, 53, 99, 2, 1, 199, 52, 99, 2, 1, 199, 41, 99, 2, 1, 199,
+    40, 99, 2, 1, 199, 39, 99, 2, 1, 199, 38, 99, 2, 1, 198, 118, 99, 2, 1,
+    198, 112, 99, 2, 1, 198, 97, 99, 2, 1, 198, 95, 99, 2, 1, 198, 91, 99, 2,
+    1, 198, 90, 99, 2, 1, 194, 169, 99, 2, 1, 194, 111, 99, 2, 1, 194, 72,
+    99, 2, 1, 194, 36, 99, 2, 1, 193, 244, 99, 2, 1, 193, 231, 99, 2, 1, 168,
+    217, 23, 217, 89, 1, 221, 98, 217, 23, 217, 89, 1, 206, 50, 217, 23, 217,
+    89, 1, 220, 155, 217, 23, 217, 89, 1, 216, 102, 217, 23, 217, 89, 1, 166,
+    217, 23, 217, 89, 1, 181, 217, 23, 217, 89, 1, 242, 207, 217, 23, 217,
+    89, 1, 199, 92, 217, 23, 217, 89, 1, 221, 214, 217, 23, 217, 89, 1, 214,
+    80, 217, 23, 217, 89, 1, 199, 167, 217, 23, 217, 89, 1, 194, 157, 217,
+    23, 217, 89, 1, 193, 95, 217, 23, 217, 89, 1, 228, 169, 217, 23, 217, 89,
+    1, 197, 77, 217, 23, 217, 89, 1, 70, 217, 23, 217, 89, 1, 210, 88, 217,
+    23, 217, 89, 1, 250, 19, 217, 23, 217, 89, 1, 230, 246, 217, 23, 217, 89,
+    1, 223, 26, 217, 23, 217, 89, 1, 208, 48, 217, 23, 217, 89, 1, 249, 3,
+    217, 23, 217, 89, 1, 223, 10, 217, 23, 217, 89, 1, 236, 229, 217, 23,
+    217, 89, 1, 231, 53, 217, 23, 217, 89, 1, 237, 18, 217, 23, 217, 89, 1,
+    248, 51, 217, 23, 217, 89, 1, 221, 99, 219, 74, 217, 23, 217, 89, 1, 220,
+    156, 219, 74, 217, 23, 217, 89, 1, 216, 103, 219, 74, 217, 23, 217, 89,
+    1, 211, 78, 219, 74, 217, 23, 217, 89, 1, 215, 97, 219, 74, 217, 23, 217,
+    89, 1, 199, 93, 219, 74, 217, 23, 217, 89, 1, 214, 81, 219, 74, 217, 23,
+    217, 89, 1, 228, 97, 219, 74, 217, 23, 217, 89, 18, 3, 211, 209, 217, 23,
+    217, 89, 18, 3, 223, 188, 217, 23, 217, 89, 18, 3, 250, 222, 217, 23,
+    217, 89, 18, 3, 193, 58, 217, 23, 217, 89, 18, 3, 202, 175, 217, 23, 217,
+    89, 18, 3, 197, 74, 217, 23, 217, 89, 18, 3, 242, 232, 217, 23, 217, 89,
+    18, 3, 212, 227, 217, 23, 217, 89, 242, 233, 217, 23, 217, 89, 219, 20,
+    223, 71, 217, 23, 217, 89, 250, 136, 223, 71, 217, 23, 217, 89, 17, 192,
+    76, 217, 23, 217, 89, 17, 101, 217, 23, 217, 89, 17, 104, 217, 23, 217,
+    89, 17, 133, 217, 23, 217, 89, 17, 134, 217, 23, 217, 89, 17, 151, 217,
+    23, 217, 89, 17, 170, 217, 23, 217, 89, 17, 179, 217, 23, 217, 89, 17,
+    174, 217, 23, 217, 89, 17, 182, 30, 222, 206, 212, 103, 30, 222, 206,
+    212, 108, 30, 222, 206, 192, 250, 30, 222, 206, 192, 249, 30, 222, 206,
+    192, 248, 30, 222, 206, 197, 169, 30, 222, 206, 197, 173, 30, 222, 206,
+    192, 208, 30, 222, 206, 192, 204, 30, 222, 206, 233, 229, 30, 222, 206,
+    233, 227, 30, 222, 206, 233, 228, 30, 222, 206, 233, 225, 30, 222, 206,
+    228, 83, 30, 222, 206, 228, 82, 30, 222, 206, 228, 80, 30, 222, 206, 228,
+    81, 30, 222, 206, 228, 86, 30, 222, 206, 228, 79, 30, 222, 206, 228, 78,
+    30, 222, 206, 228, 88, 30, 222, 206, 250, 122, 30, 222, 206, 250, 121,
+    30, 123, 214, 38, 30, 123, 214, 44, 30, 123, 202, 73, 30, 123, 202, 72,
+    30, 123, 199, 98, 30, 123, 199, 96, 30, 123, 199, 95, 30, 123, 199, 101,
+    30, 123, 199, 102, 30, 123, 199, 94, 30, 123, 207, 112, 30, 123, 207,
+    127, 30, 123, 202, 79, 30, 123, 207, 124, 30, 123, 207, 114, 30, 123,
+    207, 116, 30, 123, 207, 103, 30, 123, 207, 104, 30, 123, 222, 102, 30,
+    123, 216, 148, 30, 123, 216, 142, 30, 123, 202, 83, 30, 123, 216, 145,
+    30, 123, 216, 151, 30, 123, 210, 17, 30, 123, 210, 26, 30, 123, 210, 30,
+    30, 123, 202, 81, 30, 123, 210, 20, 30, 123, 210, 34, 30, 123, 210, 35,
+    30, 123, 203, 56, 30, 123, 203, 59, 30, 123, 202, 77, 30, 123, 202, 75,
+    30, 123, 203, 54, 30, 123, 203, 62, 30, 123, 203, 63, 30, 123, 203, 48,
+    30, 123, 203, 61, 30, 123, 211, 6, 30, 123, 211, 7, 30, 123, 193, 42, 30,
+    123, 193, 45, 30, 123, 242, 142, 30, 123, 242, 141, 30, 123, 202, 88, 30,
+    123, 210, 72, 30, 123, 210, 71, 12, 15, 225, 215, 12, 15, 225, 214, 12,
+    15, 225, 213, 12, 15, 225, 212, 12, 15, 225, 211, 12, 15, 225, 210, 12,
+    15, 225, 209, 12, 15, 225, 208, 12, 15, 225, 207, 12, 15, 225, 206, 12,
+    15, 225, 205, 12, 15, 225, 204, 12, 15, 225, 203, 12, 15, 225, 202, 12,
+    15, 225, 201, 12, 15, 225, 200, 12, 15, 225, 199, 12, 15, 225, 198, 12,
+    15, 225, 197, 12, 15, 225, 196, 12, 15, 225, 195, 12, 15, 225, 194, 12,
+    15, 225, 193, 12, 15, 225, 192, 12, 15, 225, 191, 12, 15, 225, 190, 12,
+    15, 225, 189, 12, 15, 225, 188, 12, 15, 225, 187, 12, 15, 225, 186, 12,
+    15, 225, 185, 12, 15, 225, 184, 12, 15, 225, 183, 12, 15, 225, 182, 12,
+    15, 225, 181, 12, 15, 225, 180, 12, 15, 225, 179, 12, 15, 225, 178, 12,
+    15, 225, 177, 12, 15, 225, 176, 12, 15, 225, 175, 12, 15, 225, 174, 12,
+    15, 225, 173, 12, 15, 225, 172, 12, 15, 225, 171, 12, 15, 225, 170, 12,
+    15, 225, 169, 12, 15, 225, 168, 12, 15, 225, 167, 12, 15, 225, 166, 12,
+    15, 225, 165, 12, 15, 225, 164, 12, 15, 225, 163, 12, 15, 225, 162, 12,
+    15, 225, 161, 12, 15, 225, 160, 12, 15, 225, 159, 12, 15, 225, 158, 12,
+    15, 225, 157, 12, 15, 225, 156, 12, 15, 225, 155, 12, 15, 225, 154, 12,
+    15, 225, 153, 12, 15, 225, 152, 12, 15, 225, 151, 12, 15, 225, 150, 12,
+    15, 225, 149, 12, 15, 225, 148, 12, 15, 225, 147, 12, 15, 225, 146, 12,
+    15, 225, 145, 12, 15, 225, 144, 12, 15, 225, 143, 12, 15, 225, 142, 12,
+    15, 225, 141, 12, 15, 225, 140, 12, 15, 225, 139, 12, 15, 225, 138, 12,
+    15, 225, 137, 12, 15, 225, 136, 12, 15, 225, 135, 12, 15, 225, 134, 12,
+    15, 225, 133, 12, 15, 225, 132, 12, 15, 225, 131, 12, 15, 225, 130, 12,
+    15, 225, 129, 12, 15, 225, 128, 12, 15, 225, 127, 12, 15, 225, 126, 12,
+    15, 225, 125, 12, 15, 225, 124, 12, 15, 225, 123, 12, 15, 225, 122, 12,
+    15, 225, 121, 12, 15, 225, 120, 12, 15, 225, 119, 12, 15, 225, 118, 12,
+    15, 225, 117, 12, 15, 225, 116, 12, 15, 225, 115, 12, 15, 225, 114, 12,
+    15, 225, 113, 12, 15, 225, 112, 12, 15, 225, 111, 12, 15, 225, 110, 12,
+    15, 225, 109, 12, 15, 225, 108, 12, 15, 225, 107, 12, 15, 225, 106, 12,
+    15, 225, 105, 12, 15, 225, 104, 12, 15, 225, 103, 12, 15, 225, 102, 12,
+    15, 225, 101, 12, 15, 225, 100, 12, 15, 225, 99, 12, 15, 225, 98, 12, 15,
+    225, 97, 12, 15, 225, 96, 12, 15, 225, 95, 12, 15, 225, 94, 12, 15, 225,
+    93, 12, 15, 225, 92, 12, 15, 225, 91, 12, 15, 225, 90, 12, 15, 225, 89,
+    12, 15, 225, 88, 12, 15, 225, 87, 12, 15, 225, 86, 12, 15, 225, 85, 12,
+    15, 225, 84, 12, 15, 225, 83, 12, 15, 225, 82, 12, 15, 225, 81, 12, 15,
+    225, 80, 12, 15, 225, 79, 12, 15, 225, 78, 12, 15, 225, 77, 12, 15, 225,
+    76, 12, 15, 225, 75, 12, 15, 225, 74, 12, 15, 225, 73, 12, 15, 225, 72,
+    12, 15, 225, 71, 12, 15, 225, 70, 12, 15, 225, 69, 12, 15, 225, 68, 12,
+    15, 225, 67, 12, 15, 225, 66, 12, 15, 225, 65, 12, 15, 225, 64, 12, 15,
+    225, 63, 12, 15, 225, 62, 12, 15, 225, 61, 12, 15, 225, 60, 12, 15, 225,
+    59, 12, 15, 225, 58, 12, 15, 225, 57, 12, 15, 225, 56, 12, 15, 225, 55,
+    12, 15, 225, 54, 12, 15, 225, 53, 12, 15, 225, 52, 12, 15, 225, 51, 12,
+    15, 225, 50, 12, 15, 225, 49, 12, 15, 225, 48, 12, 15, 225, 47, 12, 15,
+    225, 46, 12, 15, 225, 45, 12, 15, 225, 44, 12, 15, 225, 43, 12, 15, 225,
+    42, 12, 15, 225, 41, 12, 15, 225, 40, 12, 15, 225, 39, 12, 15, 225, 38,
+    12, 15, 225, 37, 12, 15, 225, 36, 12, 15, 225, 35, 12, 15, 225, 34, 12,
+    15, 225, 33, 12, 15, 225, 32, 12, 15, 225, 31, 12, 15, 225, 30, 12, 15,
+    225, 29, 12, 15, 225, 28, 12, 15, 225, 27, 12, 15, 225, 26, 12, 15, 225,
+    25, 12, 15, 225, 24, 12, 15, 225, 23, 12, 15, 225, 22, 12, 15, 225, 21,
+    12, 15, 225, 20, 12, 15, 225, 19, 12, 15, 225, 18, 12, 15, 225, 17, 12,
+    15, 225, 16, 12, 15, 225, 15, 12, 15, 225, 14, 12, 15, 225, 13, 12, 15,
+    225, 12, 12, 15, 225, 11, 12, 15, 225, 10, 12, 15, 225, 9, 12, 15, 225,
+    8, 12, 15, 225, 7, 12, 15, 225, 6, 12, 15, 225, 5, 12, 15, 225, 4, 12,
+    15, 225, 3, 12, 15, 225, 2, 12, 15, 225, 1, 12, 15, 225, 0, 12, 15, 224,
+    255, 12, 15, 224, 254, 12, 15, 224, 253, 12, 15, 224, 252, 12, 15, 224,
+    251, 12, 15, 224, 250, 12, 15, 224, 249, 12, 15, 224, 248, 12, 15, 224,
+    247, 12, 15, 224, 246, 12, 15, 224, 245, 12, 15, 224, 244, 12, 15, 224,
+    243, 12, 15, 224, 242, 12, 15, 224, 241, 12, 15, 224, 240, 12, 15, 224,
+    239, 12, 15, 224, 238, 12, 15, 224, 237, 12, 15, 224, 236, 12, 15, 224,
+    235, 12, 15, 224, 234, 12, 15, 224, 233, 12, 15, 224, 232, 12, 15, 224,
+    231, 12, 15, 224, 230, 12, 15, 224, 229, 12, 15, 224, 228, 12, 15, 224,
+    227, 12, 15, 224, 226, 12, 15, 224, 225, 12, 15, 224, 224, 12, 15, 224,
+    223, 12, 15, 224, 222, 12, 15, 224, 221, 12, 15, 224, 220, 12, 15, 224,
+    219, 12, 15, 224, 218, 12, 15, 224, 217, 12, 15, 224, 216, 12, 15, 224,
+    215, 12, 15, 224, 214, 12, 15, 224, 213, 12, 15, 224, 212, 12, 15, 224,
+    211, 12, 15, 224, 210, 12, 15, 224, 209, 12, 15, 224, 208, 12, 15, 224,
+    207, 12, 15, 224, 206, 12, 15, 224, 205, 12, 15, 224, 204, 12, 15, 224,
+    203, 12, 15, 224, 202, 12, 15, 224, 201, 12, 15, 224, 200, 12, 15, 224,
+    199, 12, 15, 224, 198, 12, 15, 224, 197, 12, 15, 224, 196, 12, 15, 224,
+    195, 12, 15, 224, 194, 12, 15, 224, 193, 12, 15, 224, 192, 12, 15, 224,
+    191, 12, 15, 224, 190, 12, 15, 224, 189, 12, 15, 224, 188, 12, 15, 224,
+    187, 12, 15, 224, 186, 12, 15, 224, 185, 12, 15, 224, 184, 12, 15, 224,
+    183, 12, 15, 224, 182, 12, 15, 224, 181, 12, 15, 224, 180, 12, 15, 224,
+    179, 12, 15, 224, 178, 12, 15, 224, 177, 12, 15, 224, 176, 12, 15, 224,
+    175, 12, 15, 224, 174, 12, 15, 224, 173, 12, 15, 224, 172, 12, 15, 224,
+    171, 12, 15, 224, 170, 12, 15, 224, 169, 12, 15, 224, 168, 12, 15, 224,
+    167, 12, 15, 224, 166, 12, 15, 224, 165, 12, 15, 224, 164, 12, 15, 224,
+    163, 12, 15, 224, 162, 12, 15, 224, 161, 12, 15, 224, 160, 12, 15, 224,
+    159, 12, 15, 224, 158, 12, 15, 224, 157, 12, 15, 224, 156, 12, 15, 224,
+    155, 12, 15, 224, 154, 12, 15, 224, 153, 12, 15, 224, 152, 12, 15, 224,
+    151, 12, 15, 224, 150, 12, 15, 224, 149, 12, 15, 224, 148, 12, 15, 224,
+    147, 12, 15, 224, 146, 12, 15, 224, 145, 12, 15, 224, 144, 12, 15, 224,
+    143, 12, 15, 224, 142, 12, 15, 224, 141, 12, 15, 224, 140, 12, 15, 224,
+    139, 12, 15, 224, 138, 12, 15, 224, 137, 12, 15, 224, 136, 12, 15, 224,
+    135, 12, 15, 224, 134, 12, 15, 224, 133, 12, 15, 224, 132, 12, 15, 224,
+    131, 12, 15, 224, 130, 12, 15, 224, 129, 12, 15, 224, 128, 12, 15, 224,
+    127, 12, 15, 224, 126, 12, 15, 224, 125, 12, 15, 224, 124, 12, 15, 224,
+    123, 12, 15, 224, 122, 12, 15, 224, 121, 12, 15, 224, 120, 12, 15, 224,
+    119, 12, 15, 224, 118, 12, 15, 224, 117, 12, 15, 224, 116, 12, 15, 224,
+    115, 12, 15, 224, 114, 12, 15, 224, 113, 12, 15, 224, 112, 12, 15, 224,
+    111, 12, 15, 224, 110, 12, 15, 224, 109, 12, 15, 224, 108, 12, 15, 224,
+    107, 12, 15, 224, 106, 12, 15, 224, 105, 12, 15, 224, 104, 12, 15, 224,
+    103, 12, 15, 224, 102, 12, 15, 224, 101, 12, 15, 224, 100, 12, 15, 224,
+    99, 12, 15, 224, 98, 12, 15, 224, 97, 12, 15, 224, 96, 12, 15, 224, 95,
+    12, 15, 224, 94, 12, 15, 224, 93, 12, 15, 224, 92, 12, 15, 224, 91, 12,
+    15, 224, 90, 12, 15, 224, 89, 12, 15, 224, 88, 12, 15, 224, 87, 12, 15,
+    224, 86, 12, 15, 224, 85, 12, 15, 224, 84, 12, 15, 224, 83, 12, 15, 224,
+    82, 12, 15, 224, 81, 12, 15, 224, 80, 12, 15, 224, 79, 12, 15, 224, 78,
+    12, 15, 224, 77, 12, 15, 224, 76, 12, 15, 224, 75, 12, 15, 224, 74, 12,
+    15, 224, 73, 12, 15, 224, 72, 12, 15, 224, 71, 12, 15, 224, 70, 12, 15,
+    224, 69, 12, 15, 224, 68, 12, 15, 224, 67, 12, 15, 224, 66, 12, 15, 224,
+    65, 12, 15, 224, 64, 12, 15, 224, 63, 12, 15, 224, 62, 12, 15, 224, 61,
+    12, 15, 224, 60, 12, 15, 224, 59, 12, 15, 224, 58, 12, 15, 224, 57, 12,
+    15, 224, 56, 12, 15, 224, 55, 12, 15, 224, 54, 12, 15, 224, 53, 12, 15,
+    224, 52, 12, 15, 224, 51, 12, 15, 224, 50, 12, 15, 224, 49, 12, 15, 224,
+    48, 12, 15, 224, 47, 12, 15, 224, 46, 12, 15, 224, 45, 12, 15, 224, 44,
+    12, 15, 224, 43, 12, 15, 224, 42, 12, 15, 224, 41, 12, 15, 224, 40, 12,
+    15, 224, 39, 12, 15, 224, 38, 12, 15, 224, 37, 12, 15, 224, 36, 12, 15,
+    224, 35, 12, 15, 224, 34, 12, 15, 224, 33, 12, 15, 224, 32, 12, 15, 224,
+    31, 12, 15, 224, 30, 12, 15, 224, 29, 12, 15, 224, 28, 12, 15, 224, 27,
+    12, 15, 224, 26, 12, 15, 224, 25, 12, 15, 224, 24, 12, 15, 224, 23, 12,
+    15, 224, 22, 12, 15, 224, 21, 12, 15, 224, 20, 12, 15, 224, 19, 12, 15,
+    224, 18, 12, 15, 224, 17, 12, 15, 224, 16, 12, 15, 224, 15, 12, 15, 224,
+    14, 12, 15, 224, 13, 12, 15, 224, 12, 12, 15, 224, 11, 12, 15, 224, 10,
+    12, 15, 224, 9, 12, 15, 224, 8, 12, 15, 224, 7, 12, 15, 224, 6, 12, 15,
+    224, 5, 12, 15, 224, 4, 12, 15, 224, 3, 12, 15, 224, 2, 12, 15, 224, 1,
+    12, 15, 224, 0, 8, 2, 34, 233, 15, 8, 2, 34, 233, 11, 8, 2, 34, 232, 209,
+    8, 2, 34, 233, 14, 8, 2, 34, 233, 13, 8, 2, 34, 184, 206, 159, 200, 228,
+    8, 2, 34, 202, 35, 250, 91, 2, 34, 217, 6, 213, 96, 250, 91, 2, 34, 217,
+    6, 234, 177, 250, 91, 2, 34, 217, 6, 223, 159, 250, 91, 2, 34, 196, 45,
+    213, 96, 250, 91, 2, 34, 217, 6, 193, 201, 129, 1, 192, 240, 4, 229, 139,
+    129, 209, 192, 222, 213, 196, 135, 129, 34, 193, 20, 192, 240, 192, 240,
+    210, 205, 129, 1, 250, 244, 249, 231, 129, 1, 194, 64, 251, 26, 129, 1,
+    194, 64, 237, 221, 129, 1, 194, 64, 229, 255, 129, 1, 194, 64, 222, 139,
+    129, 1, 194, 64, 220, 86, 129, 1, 194, 64, 52, 217, 12, 129, 1, 194, 64,
+    207, 188, 129, 1, 194, 64, 200, 96, 129, 1, 250, 244, 102, 57, 129, 1,
+    203, 225, 4, 203, 225, 236, 114, 129, 1, 203, 225, 4, 203, 79, 236, 114,
+    129, 1, 203, 225, 4, 237, 241, 26, 203, 225, 236, 114, 129, 1, 203, 225,
+    4, 237, 241, 26, 203, 79, 236, 114, 129, 1, 157, 4, 210, 205, 129, 1,
+    157, 4, 208, 227, 129, 1, 157, 4, 217, 140, 129, 1, 248, 66, 4, 237, 240,
+    129, 1, 231, 32, 4, 237, 240, 129, 1, 237, 222, 4, 237, 240, 129, 1, 230,
+    0, 4, 217, 140, 129, 1, 196, 128, 4, 237, 240, 129, 1, 192, 90, 4, 237,
+    240, 129, 1, 200, 9, 4, 237, 240, 129, 1, 192, 240, 4, 237, 240, 129, 1,
+    52, 222, 140, 4, 237, 240, 129, 1, 222, 140, 4, 237, 240, 129, 1, 220,
+    87, 4, 237, 240, 129, 1, 217, 13, 4, 237, 240, 129, 1, 212, 231, 4, 237,
+    240, 129, 1, 206, 47, 4, 237, 240, 129, 1, 52, 210, 182, 4, 237, 240,
+    129, 1, 210, 182, 4, 237, 240, 129, 1, 198, 114, 4, 237, 240, 129, 1,
+    208, 187, 4, 237, 240, 129, 1, 207, 189, 4, 237, 240, 129, 1, 203, 225,
+    4, 237, 240, 129, 1, 200, 97, 4, 237, 240, 129, 1, 196, 128, 4, 229, 27,
+    129, 1, 248, 66, 4, 208, 51, 129, 1, 222, 140, 4, 208, 51, 129, 1, 210,
+    182, 4, 208, 51, 129, 34, 157, 220, 86, 9, 1, 157, 194, 137, 72, 20, 9,
+    1, 157, 194, 137, 52, 20, 9, 1, 248, 107, 72, 20, 9, 1, 248, 107, 52, 20,
+    9, 1, 248, 107, 88, 20, 9, 1, 248, 107, 217, 35, 20, 9, 1, 210, 162, 72,
+    20, 9, 1, 210, 162, 52, 20, 9, 1, 210, 162, 88, 20, 9, 1, 210, 162, 217,
+    35, 20, 9, 1, 248, 95, 72, 20, 9, 1, 248, 95, 52, 20, 9, 1, 248, 95, 88,
+    20, 9, 1, 248, 95, 217, 35, 20, 9, 1, 198, 74, 72, 20, 9, 1, 198, 74, 52,
+    20, 9, 1, 198, 74, 88, 20, 9, 1, 198, 74, 217, 35, 20, 9, 1, 200, 48, 72,
+    20, 9, 1, 200, 48, 52, 20, 9, 1, 200, 48, 88, 20, 9, 1, 200, 48, 217, 35,
+    20, 9, 1, 198, 76, 72, 20, 9, 1, 198, 76, 52, 20, 9, 1, 198, 76, 88, 20,
+    9, 1, 198, 76, 217, 35, 20, 9, 1, 196, 117, 72, 20, 9, 1, 196, 117, 52,
+    20, 9, 1, 196, 117, 88, 20, 9, 1, 196, 117, 217, 35, 20, 9, 1, 210, 160,
+    72, 20, 9, 1, 210, 160, 52, 20, 9, 1, 210, 160, 88, 20, 9, 1, 210, 160,
+    217, 35, 20, 9, 1, 235, 24, 72, 20, 9, 1, 235, 24, 52, 20, 9, 1, 235, 24,
+    88, 20, 9, 1, 235, 24, 217, 35, 20, 9, 1, 212, 188, 72, 20, 9, 1, 212,
+    188, 52, 20, 9, 1, 212, 188, 88, 20, 9, 1, 212, 188, 217, 35, 20, 9, 1,
+    200, 84, 72, 20, 9, 1, 200, 84, 52, 20, 9, 1, 200, 84, 88, 20, 9, 1, 200,
+    84, 217, 35, 20, 9, 1, 200, 82, 72, 20, 9, 1, 200, 82, 52, 20, 9, 1, 200,
+    82, 88, 20, 9, 1, 200, 82, 217, 35, 20, 9, 1, 237, 159, 72, 20, 9, 1,
+    237, 159, 52, 20, 9, 1, 237, 235, 72, 20, 9, 1, 237, 235, 52, 20, 9, 1,
+    235, 53, 72, 20, 9, 1, 235, 53, 52, 20, 9, 1, 237, 157, 72, 20, 9, 1,
+    237, 157, 52, 20, 9, 1, 223, 35, 72, 20, 9, 1, 223, 35, 52, 20, 9, 1,
+    206, 252, 72, 20, 9, 1, 206, 252, 52, 20, 9, 1, 222, 40, 72, 20, 9, 1,
+    222, 40, 52, 20, 9, 1, 222, 40, 88, 20, 9, 1, 222, 40, 217, 35, 20, 9, 1,
+    231, 221, 72, 20, 9, 1, 231, 221, 52, 20, 9, 1, 231, 221, 88, 20, 9, 1,
+    231, 221, 217, 35, 20, 9, 1, 230, 174, 72, 20, 9, 1, 230, 174, 52, 20, 9,
+    1, 230, 174, 88, 20, 9, 1, 230, 174, 217, 35, 20, 9, 1, 214, 89, 72, 20,
+    9, 1, 214, 89, 52, 20, 9, 1, 214, 89, 88, 20, 9, 1, 214, 89, 217, 35, 20,
+    9, 1, 213, 124, 231, 51, 72, 20, 9, 1, 213, 124, 231, 51, 52, 20, 9, 1,
+    207, 59, 72, 20, 9, 1, 207, 59, 52, 20, 9, 1, 207, 59, 88, 20, 9, 1, 207,
+    59, 217, 35, 20, 9, 1, 229, 221, 4, 97, 95, 72, 20, 9, 1, 229, 221, 4,
+    97, 95, 52, 20, 9, 1, 229, 221, 230, 252, 72, 20, 9, 1, 229, 221, 230,
+    252, 52, 20, 9, 1, 229, 221, 230, 252, 88, 20, 9, 1, 229, 221, 230, 252,
+    217, 35, 20, 9, 1, 229, 221, 236, 143, 72, 20, 9, 1, 229, 221, 236, 143,
+    52, 20, 9, 1, 229, 221, 236, 143, 88, 20, 9, 1, 229, 221, 236, 143, 217,
+    35, 20, 9, 1, 97, 248, 187, 72, 20, 9, 1, 97, 248, 187, 52, 20, 9, 1, 97,
+    248, 187, 4, 230, 67, 95, 72, 20, 9, 1, 97, 248, 187, 4, 230, 67, 95, 52,
+    20, 9, 16, 78, 58, 9, 16, 78, 63, 9, 16, 103, 236, 112, 58, 9, 16, 103,
+    236, 112, 63, 9, 16, 112, 236, 112, 58, 9, 16, 112, 236, 112, 63, 9, 16,
+    112, 236, 112, 209, 188, 235, 92, 58, 9, 16, 112, 236, 112, 209, 188,
+    235, 92, 63, 9, 16, 232, 119, 236, 112, 58, 9, 16, 232, 119, 236, 112,
+    63, 9, 16, 55, 84, 248, 194, 63, 9, 16, 103, 236, 112, 196, 55, 58, 9,
+    16, 103, 236, 112, 196, 55, 63, 9, 16, 207, 81, 9, 16, 2, 200, 152, 58,
+    9, 16, 2, 200, 152, 63, 9, 1, 214, 168, 72, 20, 9, 1, 214, 168, 52, 20,
+    9, 1, 214, 168, 88, 20, 9, 1, 214, 168, 217, 35, 20, 9, 1, 124, 72, 20,
+    9, 1, 124, 52, 20, 9, 1, 212, 1, 72, 20, 9, 1, 212, 1, 52, 20, 9, 1, 192,
+    215, 72, 20, 9, 1, 192, 215, 52, 20, 9, 1, 124, 4, 230, 67, 95, 72, 20,
+    9, 1, 196, 124, 72, 20, 9, 1, 196, 124, 52, 20, 9, 1, 221, 170, 212, 1,
+    72, 20, 9, 1, 221, 170, 212, 1, 52, 20, 9, 1, 221, 170, 192, 215, 72, 20,
+    9, 1, 221, 170, 192, 215, 52, 20, 9, 1, 234, 253, 72, 20, 9, 1, 234, 253,
+    52, 20, 9, 1, 234, 253, 88, 20, 9, 1, 234, 253, 217, 35, 20, 9, 1, 197,
+    94, 222, 61, 221, 170, 157, 217, 169, 88, 20, 9, 1, 197, 94, 222, 61,
+    221, 170, 157, 217, 169, 217, 35, 20, 9, 34, 97, 4, 230, 67, 95, 4, 157,
+    72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 157, 52, 20, 9, 34, 97, 4, 230, 67,
+    95, 4, 251, 109, 72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 251, 109, 52, 20,
+    9, 34, 97, 4, 230, 67, 95, 4, 194, 120, 72, 20, 9, 34, 97, 4, 230, 67,
+    95, 4, 194, 120, 52, 20, 9, 34, 97, 4, 230, 67, 95, 4, 124, 72, 20, 9,
+    34, 97, 4, 230, 67, 95, 4, 124, 52, 20, 9, 34, 97, 4, 230, 67, 95, 4,
+    212, 1, 72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 212, 1, 52, 20, 9, 34, 97,
+    4, 230, 67, 95, 4, 192, 215, 72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 192,
+    215, 52, 20, 9, 34, 97, 4, 230, 67, 95, 4, 234, 253, 72, 20, 9, 34, 97,
+    4, 230, 67, 95, 4, 234, 253, 52, 20, 9, 34, 97, 4, 230, 67, 95, 4, 234,
+    253, 88, 20, 9, 34, 197, 94, 221, 170, 97, 4, 230, 67, 95, 4, 157, 217,
+    169, 72, 20, 9, 34, 197, 94, 221, 170, 97, 4, 230, 67, 95, 4, 157, 217,
+    169, 52, 20, 9, 34, 197, 94, 221, 170, 97, 4, 230, 67, 95, 4, 157, 217,
+    169, 88, 20, 9, 1, 233, 62, 97, 72, 20, 9, 1, 233, 62, 97, 52, 20, 9, 1,
+    233, 62, 97, 88, 20, 9, 1, 233, 62, 97, 217, 35, 20, 9, 34, 97, 4, 230,
+    67, 95, 4, 223, 38, 72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 176, 72, 20, 9,
+    34, 97, 4, 230, 67, 95, 4, 91, 72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 157,
+    217, 169, 72, 20, 9, 34, 97, 4, 230, 67, 95, 4, 97, 72, 20, 9, 34, 248,
+    97, 4, 223, 38, 72, 20, 9, 34, 248, 97, 4, 176, 72, 20, 9, 34, 248, 97,
+    4, 221, 246, 72, 20, 9, 34, 248, 97, 4, 91, 72, 20, 9, 34, 248, 97, 4,
+    157, 217, 169, 72, 20, 9, 34, 248, 97, 4, 97, 72, 20, 9, 34, 200, 50, 4,
+    223, 38, 72, 20, 9, 34, 200, 50, 4, 176, 72, 20, 9, 34, 200, 50, 4, 221,
+    246, 72, 20, 9, 34, 200, 50, 4, 91, 72, 20, 9, 34, 200, 50, 4, 157, 217,
+    169, 72, 20, 9, 34, 200, 50, 4, 97, 72, 20, 9, 34, 199, 221, 4, 223, 38,
+    72, 20, 9, 34, 199, 221, 4, 91, 72, 20, 9, 34, 199, 221, 4, 157, 217,
+    169, 72, 20, 9, 34, 199, 221, 4, 97, 72, 20, 9, 34, 223, 38, 4, 176, 72,
+    20, 9, 34, 223, 38, 4, 91, 72, 20, 9, 34, 176, 4, 223, 38, 72, 20, 9, 34,
+    176, 4, 91, 72, 20, 9, 34, 221, 246, 4, 223, 38, 72, 20, 9, 34, 221, 246,
+    4, 176, 72, 20, 9, 34, 221, 246, 4, 91, 72, 20, 9, 34, 205, 202, 4, 223,
+    38, 72, 20, 9, 34, 205, 202, 4, 176, 72, 20, 9, 34, 205, 202, 4, 221,
+    246, 72, 20, 9, 34, 205, 202, 4, 91, 72, 20, 9, 34, 206, 87, 4, 176, 72,
+    20, 9, 34, 206, 87, 4, 91, 72, 20, 9, 34, 237, 251, 4, 223, 38, 72, 20,
+    9, 34, 237, 251, 4, 176, 72, 20, 9, 34, 237, 251, 4, 221, 246, 72, 20, 9,
+    34, 237, 251, 4, 91, 72, 20, 9, 34, 200, 152, 4, 176, 72, 20, 9, 34, 200,
+    152, 4, 91, 72, 20, 9, 34, 192, 107, 4, 91, 72, 20, 9, 34, 251, 58, 4,
+    223, 38, 72, 20, 9, 34, 251, 58, 4, 91, 72, 20, 9, 34, 231, 80, 4, 223,
+    38, 72, 20, 9, 34, 231, 80, 4, 91, 72, 20, 9, 34, 233, 35, 4, 223, 38,
+    72, 20, 9, 34, 233, 35, 4, 176, 72, 20, 9, 34, 233, 35, 4, 221, 246, 72,
+    20, 9, 34, 233, 35, 4, 91, 72, 20, 9, 34, 233, 35, 4, 157, 217, 169, 72,
+    20, 9, 34, 233, 35, 4, 97, 72, 20, 9, 34, 208, 233, 4, 176, 72, 20, 9,
+    34, 208, 233, 4, 91, 72, 20, 9, 34, 208, 233, 4, 157, 217, 169, 72, 20,
+    9, 34, 208, 233, 4, 97, 72, 20, 9, 34, 222, 140, 4, 157, 72, 20, 9, 34,
+    222, 140, 4, 223, 38, 72, 20, 9, 34, 222, 140, 4, 176, 72, 20, 9, 34,
+    222, 140, 4, 221, 246, 72, 20, 9, 34, 222, 140, 4, 220, 95, 72, 20, 9,
+    34, 222, 140, 4, 91, 72, 20, 9, 34, 222, 140, 4, 157, 217, 169, 72, 20,
+    9, 34, 222, 140, 4, 97, 72, 20, 9, 34, 220, 95, 4, 223, 38, 72, 20, 9,
+    34, 220, 95, 4, 176, 72, 20, 9, 34, 220, 95, 4, 221, 246, 72, 20, 9, 34,
+    220, 95, 4, 91, 72, 20, 9, 34, 220, 95, 4, 157, 217, 169, 72, 20, 9, 34,
+    220, 95, 4, 97, 72, 20, 9, 34, 91, 4, 223, 38, 72, 20, 9, 34, 91, 4, 176,
+    72, 20, 9, 34, 91, 4, 221, 246, 72, 20, 9, 34, 91, 4, 91, 72, 20, 9, 34,
+    91, 4, 157, 217, 169, 72, 20, 9, 34, 91, 4, 97, 72, 20, 9, 34, 213, 124,
+    4, 223, 38, 72, 20, 9, 34, 213, 124, 4, 176, 72, 20, 9, 34, 213, 124, 4,
+    221, 246, 72, 20, 9, 34, 213, 124, 4, 91, 72, 20, 9, 34, 213, 124, 4,
+    157, 217, 169, 72, 20, 9, 34, 213, 124, 4, 97, 72, 20, 9, 34, 229, 221,
+    4, 223, 38, 72, 20, 9, 34, 229, 221, 4, 91, 72, 20, 9, 34, 229, 221, 4,
+    157, 217, 169, 72, 20, 9, 34, 229, 221, 4, 97, 72, 20, 9, 34, 97, 4, 223,
+    38, 72, 20, 9, 34, 97, 4, 176, 72, 20, 9, 34, 97, 4, 221, 246, 72, 20, 9,
+    34, 97, 4, 91, 72, 20, 9, 34, 97, 4, 157, 217, 169, 72, 20, 9, 34, 97, 4,
+    97, 72, 20, 9, 34, 199, 233, 4, 201, 107, 157, 72, 20, 9, 34, 207, 222,
+    4, 201, 107, 157, 72, 20, 9, 34, 157, 217, 169, 4, 201, 107, 157, 72, 20,
+    9, 34, 204, 55, 4, 237, 214, 72, 20, 9, 34, 204, 55, 4, 222, 85, 72, 20,
+    9, 34, 204, 55, 4, 233, 59, 72, 20, 9, 34, 204, 55, 4, 237, 216, 72, 20,
+    9, 34, 204, 55, 4, 222, 87, 72, 20, 9, 34, 204, 55, 4, 201, 107, 157, 72,
+    20, 9, 34, 97, 4, 230, 67, 95, 4, 207, 222, 52, 20, 9, 34, 97, 4, 230,
+    67, 95, 4, 192, 104, 52, 20, 9, 34, 97, 4, 230, 67, 95, 4, 91, 52, 20, 9,
+    34, 97, 4, 230, 67, 95, 4, 213, 124, 52, 20, 9, 34, 97, 4, 230, 67, 95,
+    4, 157, 217, 169, 52, 20, 9, 34, 97, 4, 230, 67, 95, 4, 97, 52, 20, 9,
+    34, 248, 97, 4, 207, 222, 52, 20, 9, 34, 248, 97, 4, 192, 104, 52, 20, 9,
+    34, 248, 97, 4, 91, 52, 20, 9, 34, 248, 97, 4, 213, 124, 52, 20, 9, 34,
+    248, 97, 4, 157, 217, 169, 52, 20, 9, 34, 248, 97, 4, 97, 52, 20, 9, 34,
+    200, 50, 4, 207, 222, 52, 20, 9, 34, 200, 50, 4, 192, 104, 52, 20, 9, 34,
+    200, 50, 4, 91, 52, 20, 9, 34, 200, 50, 4, 213, 124, 52, 20, 9, 34, 200,
+    50, 4, 157, 217, 169, 52, 20, 9, 34, 200, 50, 4, 97, 52, 20, 9, 34, 199,
+    221, 4, 207, 222, 52, 20, 9, 34, 199, 221, 4, 192, 104, 52, 20, 9, 34,
+    199, 221, 4, 91, 52, 20, 9, 34, 199, 221, 4, 213, 124, 52, 20, 9, 34,
+    199, 221, 4, 157, 217, 169, 52, 20, 9, 34, 199, 221, 4, 97, 52, 20, 9,
+    34, 233, 35, 4, 157, 217, 169, 52, 20, 9, 34, 233, 35, 4, 97, 52, 20, 9,
+    34, 208, 233, 4, 157, 217, 169, 52, 20, 9, 34, 208, 233, 4, 97, 52, 20,
+    9, 34, 222, 140, 4, 157, 52, 20, 9, 34, 222, 140, 4, 220, 95, 52, 20, 9,
+    34, 222, 140, 4, 91, 52, 20, 9, 34, 222, 140, 4, 157, 217, 169, 52, 20,
+    9, 34, 222, 140, 4, 97, 52, 20, 9, 34, 220, 95, 4, 91, 52, 20, 9, 34,
+    220, 95, 4, 157, 217, 169, 52, 20, 9, 34, 220, 95, 4, 97, 52, 20, 9, 34,
+    91, 4, 157, 52, 20, 9, 34, 91, 4, 91, 52, 20, 9, 34, 213, 124, 4, 207,
+    222, 52, 20, 9, 34, 213, 124, 4, 192, 104, 52, 20, 9, 34, 213, 124, 4,
+    91, 52, 20, 9, 34, 213, 124, 4, 213, 124, 52, 20, 9, 34, 213, 124, 4,
+    157, 217, 169, 52, 20, 9, 34, 213, 124, 4, 97, 52, 20, 9, 34, 157, 217,
+    169, 4, 201, 107, 157, 52, 20, 9, 34, 97, 4, 207, 222, 52, 20, 9, 34, 97,
+    4, 192, 104, 52, 20, 9, 34, 97, 4, 91, 52, 20, 9, 34, 97, 4, 213, 124,
+    52, 20, 9, 34, 97, 4, 157, 217, 169, 52, 20, 9, 34, 97, 4, 97, 52, 20, 9,
+    34, 97, 4, 230, 67, 95, 4, 223, 38, 88, 20, 9, 34, 97, 4, 230, 67, 95, 4,
+    176, 88, 20, 9, 34, 97, 4, 230, 67, 95, 4, 221, 246, 88, 20, 9, 34, 97,
+    4, 230, 67, 95, 4, 91, 88, 20, 9, 34, 97, 4, 230, 67, 95, 4, 229, 221,
+    88, 20, 9, 34, 248, 97, 4, 223, 38, 88, 20, 9, 34, 248, 97, 4, 176, 88,
+    20, 9, 34, 248, 97, 4, 221, 246, 88, 20, 9, 34, 248, 97, 4, 91, 88, 20,
+    9, 34, 248, 97, 4, 229, 221, 88, 20, 9, 34, 200, 50, 4, 223, 38, 88, 20,
+    9, 34, 200, 50, 4, 176, 88, 20, 9, 34, 200, 50, 4, 221, 246, 88, 20, 9,
+    34, 200, 50, 4, 91, 88, 20, 9, 34, 200, 50, 4, 229, 221, 88, 20, 9, 34,
+    199, 221, 4, 91, 88, 20, 9, 34, 223, 38, 4, 176, 88, 20, 9, 34, 223, 38,
+    4, 91, 88, 20, 9, 34, 176, 4, 223, 38, 88, 20, 9, 34, 176, 4, 91, 88, 20,
+    9, 34, 221, 246, 4, 223, 38, 88, 20, 9, 34, 221, 246, 4, 91, 88, 20, 9,
+    34, 205, 202, 4, 223, 38, 88, 20, 9, 34, 205, 202, 4, 176, 88, 20, 9, 34,
+    205, 202, 4, 221, 246, 88, 20, 9, 34, 205, 202, 4, 91, 88, 20, 9, 34,
+    206, 87, 4, 176, 88, 20, 9, 34, 206, 87, 4, 221, 246, 88, 20, 9, 34, 206,
+    87, 4, 91, 88, 20, 9, 34, 237, 251, 4, 223, 38, 88, 20, 9, 34, 237, 251,
+    4, 176, 88, 20, 9, 34, 237, 251, 4, 221, 246, 88, 20, 9, 34, 237, 251, 4,
+    91, 88, 20, 9, 34, 200, 152, 4, 176, 88, 20, 9, 34, 192, 107, 4, 91, 88,
+    20, 9, 34, 251, 58, 4, 223, 38, 88, 20, 9, 34, 251, 58, 4, 91, 88, 20, 9,
+    34, 231, 80, 4, 223, 38, 88, 20, 9, 34, 231, 80, 4, 91, 88, 20, 9, 34,
+    233, 35, 4, 223, 38, 88, 20, 9, 34, 233, 35, 4, 176, 88, 20, 9, 34, 233,
+    35, 4, 221, 246, 88, 20, 9, 34, 233, 35, 4, 91, 88, 20, 9, 34, 208, 233,
+    4, 176, 88, 20, 9, 34, 208, 233, 4, 91, 88, 20, 9, 34, 222, 140, 4, 223,
+    38, 88, 20, 9, 34, 222, 140, 4, 176, 88, 20, 9, 34, 222, 140, 4, 221,
+    246, 88, 20, 9, 34, 222, 140, 4, 220, 95, 88, 20, 9, 34, 222, 140, 4, 91,
+    88, 20, 9, 34, 220, 95, 4, 223, 38, 88, 20, 9, 34, 220, 95, 4, 176, 88,
+    20, 9, 34, 220, 95, 4, 221, 246, 88, 20, 9, 34, 220, 95, 4, 91, 88, 20,
+    9, 34, 220, 95, 4, 229, 221, 88, 20, 9, 34, 91, 4, 223, 38, 88, 20, 9,
+    34, 91, 4, 176, 88, 20, 9, 34, 91, 4, 221, 246, 88, 20, 9, 34, 91, 4, 91,
+    88, 20, 9, 34, 213, 124, 4, 223, 38, 88, 20, 9, 34, 213, 124, 4, 176, 88,
+    20, 9, 34, 213, 124, 4, 221, 246, 88, 20, 9, 34, 213, 124, 4, 91, 88, 20,
+    9, 34, 213, 124, 4, 229, 221, 88, 20, 9, 34, 229, 221, 4, 223, 38, 88,
+    20, 9, 34, 229, 221, 4, 91, 88, 20, 9, 34, 229, 221, 4, 201, 107, 157,
+    88, 20, 9, 34, 97, 4, 223, 38, 88, 20, 9, 34, 97, 4, 176, 88, 20, 9, 34,
+    97, 4, 221, 246, 88, 20, 9, 34, 97, 4, 91, 88, 20, 9, 34, 97, 4, 229,
+    221, 88, 20, 9, 34, 97, 4, 230, 67, 95, 4, 91, 217, 35, 20, 9, 34, 97, 4,
+    230, 67, 95, 4, 229, 221, 217, 35, 20, 9, 34, 248, 97, 4, 91, 217, 35,
+    20, 9, 34, 248, 97, 4, 229, 221, 217, 35, 20, 9, 34, 200, 50, 4, 91, 217,
+    35, 20, 9, 34, 200, 50, 4, 229, 221, 217, 35, 20, 9, 34, 199, 221, 4, 91,
+    217, 35, 20, 9, 34, 199, 221, 4, 229, 221, 217, 35, 20, 9, 34, 205, 202,
+    4, 91, 217, 35, 20, 9, 34, 205, 202, 4, 229, 221, 217, 35, 20, 9, 34,
+    204, 9, 4, 91, 217, 35, 20, 9, 34, 204, 9, 4, 229, 221, 217, 35, 20, 9,
+    34, 222, 140, 4, 220, 95, 217, 35, 20, 9, 34, 222, 140, 4, 91, 217, 35,
+    20, 9, 34, 220, 95, 4, 91, 217, 35, 20, 9, 34, 213, 124, 4, 91, 217, 35,
+    20, 9, 34, 213, 124, 4, 229, 221, 217, 35, 20, 9, 34, 97, 4, 91, 217, 35,
+    20, 9, 34, 97, 4, 229, 221, 217, 35, 20, 9, 34, 204, 55, 4, 233, 59, 217,
+    35, 20, 9, 34, 204, 55, 4, 237, 216, 217, 35, 20, 9, 34, 204, 55, 4, 222,
+    87, 217, 35, 20, 9, 34, 200, 152, 4, 157, 217, 169, 72, 20, 9, 34, 200,
+    152, 4, 97, 72, 20, 9, 34, 251, 58, 4, 157, 217, 169, 72, 20, 9, 34, 251,
+    58, 4, 97, 72, 20, 9, 34, 231, 80, 4, 157, 217, 169, 72, 20, 9, 34, 231,
+    80, 4, 97, 72, 20, 9, 34, 205, 202, 4, 157, 217, 169, 72, 20, 9, 34, 205,
+    202, 4, 97, 72, 20, 9, 34, 204, 9, 4, 157, 217, 169, 72, 20, 9, 34, 204,
+    9, 4, 97, 72, 20, 9, 34, 176, 4, 157, 217, 169, 72, 20, 9, 34, 176, 4,
+    97, 72, 20, 9, 34, 223, 38, 4, 157, 217, 169, 72, 20, 9, 34, 223, 38, 4,
+    97, 72, 20, 9, 34, 221, 246, 4, 157, 217, 169, 72, 20, 9, 34, 221, 246,
+    4, 97, 72, 20, 9, 34, 206, 87, 4, 157, 217, 169, 72, 20, 9, 34, 206, 87,
+    4, 97, 72, 20, 9, 34, 237, 251, 4, 157, 217, 169, 72, 20, 9, 34, 237,
+    251, 4, 97, 72, 20, 9, 34, 204, 9, 4, 223, 38, 72, 20, 9, 34, 204, 9, 4,
+    176, 72, 20, 9, 34, 204, 9, 4, 221, 246, 72, 20, 9, 34, 204, 9, 4, 91,
+    72, 20, 9, 34, 204, 9, 4, 207, 222, 72, 20, 9, 34, 205, 202, 4, 207, 222,
+    72, 20, 9, 34, 206, 87, 4, 207, 222, 72, 20, 9, 34, 237, 251, 4, 207,
+    222, 72, 20, 9, 34, 200, 152, 4, 157, 217, 169, 52, 20, 9, 34, 200, 152,
+    4, 97, 52, 20, 9, 34, 251, 58, 4, 157, 217, 169, 52, 20, 9, 34, 251, 58,
+    4, 97, 52, 20, 9, 34, 231, 80, 4, 157, 217, 169, 52, 20, 9, 34, 231, 80,
+    4, 97, 52, 20, 9, 34, 205, 202, 4, 157, 217, 169, 52, 20, 9, 34, 205,
+    202, 4, 97, 52, 20, 9, 34, 204, 9, 4, 157, 217, 169, 52, 20, 9, 34, 204,
+    9, 4, 97, 52, 20, 9, 34, 176, 4, 157, 217, 169, 52, 20, 9, 34, 176, 4,
+    97, 52, 20, 9, 34, 223, 38, 4, 157, 217, 169, 52, 20, 9, 34, 223, 38, 4,
+    97, 52, 20, 9, 34, 221, 246, 4, 157, 217, 169, 52, 20, 9, 34, 221, 246,
+    4, 97, 52, 20, 9, 34, 206, 87, 4, 157, 217, 169, 52, 20, 9, 34, 206, 87,
+    4, 97, 52, 20, 9, 34, 237, 251, 4, 157, 217, 169, 52, 20, 9, 34, 237,
+    251, 4, 97, 52, 20, 9, 34, 204, 9, 4, 223, 38, 52, 20, 9, 34, 204, 9, 4,
+    176, 52, 20, 9, 34, 204, 9, 4, 221, 246, 52, 20, 9, 34, 204, 9, 4, 91,
+    52, 20, 9, 34, 204, 9, 4, 207, 222, 52, 20, 9, 34, 205, 202, 4, 207, 222,
+    52, 20, 9, 34, 206, 87, 4, 207, 222, 52, 20, 9, 34, 237, 251, 4, 207,
+    222, 52, 20, 9, 34, 204, 9, 4, 223, 38, 88, 20, 9, 34, 204, 9, 4, 176,
+    88, 20, 9, 34, 204, 9, 4, 221, 246, 88, 20, 9, 34, 204, 9, 4, 91, 88, 20,
+    9, 34, 205, 202, 4, 229, 221, 88, 20, 9, 34, 204, 9, 4, 229, 221, 88, 20,
+    9, 34, 200, 152, 4, 91, 88, 20, 9, 34, 205, 202, 4, 223, 38, 217, 35, 20,
+    9, 34, 205, 202, 4, 176, 217, 35, 20, 9, 34, 205, 202, 4, 221, 246, 217,
+    35, 20, 9, 34, 204, 9, 4, 223, 38, 217, 35, 20, 9, 34, 204, 9, 4, 176,
+    217, 35, 20, 9, 34, 204, 9, 4, 221, 246, 217, 35, 20, 9, 34, 200, 152, 4,
+    91, 217, 35, 20, 9, 34, 192, 107, 4, 91, 217, 35, 20, 9, 34, 157, 4, 233,
+    57, 52, 20, 9, 34, 157, 4, 233, 57, 72, 20, 211, 148, 46, 210, 230, 211,
+    148, 51, 210, 230, 9, 34, 200, 50, 4, 223, 38, 4, 91, 88, 20, 9, 34, 200,
+    50, 4, 176, 4, 223, 38, 52, 20, 9, 34, 200, 50, 4, 176, 4, 223, 38, 88,
+    20, 9, 34, 200, 50, 4, 176, 4, 91, 88, 20, 9, 34, 200, 50, 4, 221, 246,
+    4, 91, 88, 20, 9, 34, 200, 50, 4, 91, 4, 223, 38, 88, 20, 9, 34, 200, 50,
+    4, 91, 4, 176, 88, 20, 9, 34, 200, 50, 4, 91, 4, 221, 246, 88, 20, 9, 34,
+    223, 38, 4, 91, 4, 176, 52, 20, 9, 34, 223, 38, 4, 91, 4, 176, 88, 20, 9,
+    34, 176, 4, 91, 4, 97, 52, 20, 9, 34, 176, 4, 91, 4, 157, 217, 169, 52,
+    20, 9, 34, 205, 202, 4, 176, 4, 223, 38, 88, 20, 9, 34, 205, 202, 4, 223,
+    38, 4, 176, 88, 20, 9, 34, 205, 202, 4, 223, 38, 4, 157, 217, 169, 52,
+    20, 9, 34, 205, 202, 4, 91, 4, 176, 52, 20, 9, 34, 205, 202, 4, 91, 4,
+    176, 88, 20, 9, 34, 205, 202, 4, 91, 4, 223, 38, 88, 20, 9, 34, 205, 202,
+    4, 91, 4, 91, 52, 20, 9, 34, 205, 202, 4, 91, 4, 91, 88, 20, 9, 34, 206,
+    87, 4, 176, 4, 176, 52, 20, 9, 34, 206, 87, 4, 176, 4, 176, 88, 20, 9,
+    34, 206, 87, 4, 91, 4, 91, 52, 20, 9, 34, 204, 9, 4, 176, 4, 91, 52, 20,
+    9, 34, 204, 9, 4, 176, 4, 91, 88, 20, 9, 34, 204, 9, 4, 223, 38, 4, 97,
+    52, 20, 9, 34, 204, 9, 4, 91, 4, 221, 246, 52, 20, 9, 34, 204, 9, 4, 91,
+    4, 221, 246, 88, 20, 9, 34, 204, 9, 4, 91, 4, 91, 52, 20, 9, 34, 204, 9,
+    4, 91, 4, 91, 88, 20, 9, 34, 237, 251, 4, 176, 4, 157, 217, 169, 52, 20,
+    9, 34, 237, 251, 4, 221, 246, 4, 91, 52, 20, 9, 34, 237, 251, 4, 221,
+    246, 4, 91, 88, 20, 9, 34, 200, 152, 4, 91, 4, 176, 52, 20, 9, 34, 200,
+    152, 4, 91, 4, 176, 88, 20, 9, 34, 200, 152, 4, 91, 4, 91, 88, 20, 9, 34,
+    200, 152, 4, 91, 4, 97, 52, 20, 9, 34, 251, 58, 4, 223, 38, 4, 91, 52,
+    20, 9, 34, 251, 58, 4, 91, 4, 91, 52, 20, 9, 34, 251, 58, 4, 91, 4, 91,
+    88, 20, 9, 34, 251, 58, 4, 91, 4, 157, 217, 169, 52, 20, 9, 34, 231, 80,
+    4, 91, 4, 91, 52, 20, 9, 34, 231, 80, 4, 91, 4, 97, 52, 20, 9, 34, 231,
+    80, 4, 91, 4, 157, 217, 169, 52, 20, 9, 34, 233, 35, 4, 221, 246, 4, 91,
+    52, 20, 9, 34, 233, 35, 4, 221, 246, 4, 91, 88, 20, 9, 34, 208, 233, 4,
+    91, 4, 176, 52, 20, 9, 34, 208, 233, 4, 91, 4, 91, 52, 20, 9, 34, 220,
+    95, 4, 176, 4, 91, 52, 20, 9, 34, 220, 95, 4, 176, 4, 97, 52, 20, 9, 34,
+    220, 95, 4, 176, 4, 157, 217, 169, 52, 20, 9, 34, 220, 95, 4, 223, 38, 4,
+    223, 38, 88, 20, 9, 34, 220, 95, 4, 223, 38, 4, 223, 38, 52, 20, 9, 34,
+    220, 95, 4, 221, 246, 4, 91, 52, 20, 9, 34, 220, 95, 4, 221, 246, 4, 91,
+    88, 20, 9, 34, 220, 95, 4, 91, 4, 176, 52, 20, 9, 34, 220, 95, 4, 91, 4,
+    176, 88, 20, 9, 34, 91, 4, 176, 4, 223, 38, 88, 20, 9, 34, 91, 4, 176, 4,
+    91, 88, 20, 9, 34, 91, 4, 176, 4, 97, 52, 20, 9, 34, 91, 4, 223, 38, 4,
+    176, 88, 20, 9, 34, 91, 4, 223, 38, 4, 91, 88, 20, 9, 34, 91, 4, 221,
+    246, 4, 223, 38, 88, 20, 9, 34, 91, 4, 221, 246, 4, 91, 88, 20, 9, 34,
+    91, 4, 223, 38, 4, 221, 246, 88, 20, 9, 34, 229, 221, 4, 91, 4, 223, 38,
+    88, 20, 9, 34, 229, 221, 4, 91, 4, 91, 88, 20, 9, 34, 213, 124, 4, 176,
+    4, 91, 88, 20, 9, 34, 213, 124, 4, 176, 4, 157, 217, 169, 52, 20, 9, 34,
+    213, 124, 4, 223, 38, 4, 91, 52, 20, 9, 34, 213, 124, 4, 223, 38, 4, 91,
+    88, 20, 9, 34, 213, 124, 4, 223, 38, 4, 157, 217, 169, 52, 20, 9, 34,
+    213, 124, 4, 91, 4, 97, 52, 20, 9, 34, 213, 124, 4, 91, 4, 157, 217, 169,
+    52, 20, 9, 34, 97, 4, 91, 4, 91, 52, 20, 9, 34, 97, 4, 91, 4, 91, 88, 20,
+    9, 34, 248, 97, 4, 221, 246, 4, 97, 52, 20, 9, 34, 200, 50, 4, 223, 38,
+    4, 97, 52, 20, 9, 34, 200, 50, 4, 223, 38, 4, 157, 217, 169, 52, 20, 9,
+    34, 200, 50, 4, 221, 246, 4, 97, 52, 20, 9, 34, 200, 50, 4, 221, 246, 4,
+    157, 217, 169, 52, 20, 9, 34, 200, 50, 4, 91, 4, 97, 52, 20, 9, 34, 200,
+    50, 4, 91, 4, 157, 217, 169, 52, 20, 9, 34, 223, 38, 4, 91, 4, 97, 52,
+    20, 9, 34, 223, 38, 4, 176, 4, 157, 217, 169, 52, 20, 9, 34, 223, 38, 4,
+    91, 4, 157, 217, 169, 52, 20, 9, 34, 205, 202, 4, 221, 246, 4, 157, 217,
+    169, 52, 20, 9, 34, 206, 87, 4, 176, 4, 97, 52, 20, 9, 34, 204, 9, 4,
+    176, 4, 97, 52, 20, 9, 34, 237, 251, 4, 176, 4, 97, 52, 20, 9, 34, 220,
+    95, 4, 223, 38, 4, 97, 52, 20, 9, 34, 220, 95, 4, 91, 4, 97, 52, 20, 9,
+    34, 97, 4, 176, 4, 97, 52, 20, 9, 34, 97, 4, 223, 38, 4, 97, 52, 20, 9,
+    34, 97, 4, 91, 4, 97, 52, 20, 9, 34, 91, 4, 91, 4, 97, 52, 20, 9, 34,
+    208, 233, 4, 91, 4, 97, 52, 20, 9, 34, 213, 124, 4, 176, 4, 97, 52, 20,
+    9, 34, 208, 233, 4, 91, 4, 176, 88, 20, 9, 34, 220, 95, 4, 176, 4, 91,
+    88, 20, 9, 34, 251, 58, 4, 91, 4, 97, 52, 20, 9, 34, 222, 140, 4, 91, 4,
+    97, 52, 20, 9, 34, 213, 124, 4, 223, 38, 4, 176, 88, 20, 9, 34, 91, 4,
+    221, 246, 4, 97, 52, 20, 9, 34, 220, 95, 4, 223, 38, 4, 91, 88, 20, 9,
+    34, 222, 140, 4, 91, 4, 91, 52, 20, 9, 34, 220, 95, 4, 223, 38, 4, 91,
+    52, 20, 9, 34, 213, 124, 4, 223, 38, 4, 176, 52, 20, 9, 34, 223, 38, 4,
+    176, 4, 97, 52, 20, 9, 34, 176, 4, 223, 38, 4, 97, 52, 20, 9, 34, 91, 4,
+    223, 38, 4, 97, 52, 20, 9, 34, 233, 35, 4, 91, 4, 97, 52, 20, 9, 34, 248,
+    97, 4, 176, 4, 97, 52, 20, 9, 34, 222, 140, 4, 91, 4, 91, 88, 20, 9, 34,
+    251, 58, 4, 223, 38, 4, 91, 88, 20, 9, 34, 206, 87, 4, 91, 4, 91, 88, 20,
+    9, 34, 205, 202, 4, 221, 246, 4, 97, 52, 20, 9, 34, 213, 124, 4, 223, 38,
+    4, 97, 52, 20, 9, 34, 206, 58, 197, 5, 250, 62, 221, 80, 201, 239, 3, 72,
+    20, 9, 34, 208, 229, 197, 5, 250, 62, 221, 80, 201, 239, 3, 72, 20, 9,
+    34, 251, 7, 72, 20, 9, 34, 251, 41, 72, 20, 9, 34, 216, 58, 72, 20, 9,
+    34, 206, 59, 72, 20, 9, 34, 208, 24, 72, 20, 9, 34, 251, 29, 72, 20, 9,
+    34, 194, 139, 72, 20, 9, 34, 206, 58, 72, 20, 9, 34, 206, 57, 251, 29,
+    194, 138, 9, 34, 223, 53, 207, 143, 57, 9, 34, 248, 4, 250, 129, 250,
+    130, 65, 205, 188, 65, 205, 77, 65, 205, 9, 65, 204, 254, 65, 204, 243,
+    65, 204, 232, 65, 204, 221, 65, 204, 210, 65, 204, 199, 65, 205, 187, 65,
+    205, 176, 65, 205, 165, 65, 205, 154, 65, 205, 143, 65, 205, 132, 65,
+    205, 121, 209, 105, 232, 136, 39, 84, 242, 38, 209, 105, 232, 136, 39,
+    84, 149, 242, 38, 209, 105, 232, 136, 39, 84, 149, 232, 71, 201, 238,
+    209, 105, 232, 136, 39, 84, 242, 47, 209, 105, 232, 136, 39, 84, 204,
+    180, 209, 105, 232, 136, 39, 84, 233, 204, 77, 209, 105, 232, 136, 39,
+    84, 208, 159, 77, 209, 105, 232, 136, 39, 84, 46, 62, 219, 247, 186, 209,
+    105, 232, 136, 39, 84, 51, 62, 219, 247, 247, 162, 209, 105, 232, 136,
+    39, 84, 229, 5, 234, 105, 38, 34, 46, 230, 78, 38, 34, 51, 230, 78, 38,
+    55, 199, 91, 46, 230, 78, 38, 55, 199, 91, 51, 230, 78, 38, 217, 215, 46,
+    230, 78, 38, 217, 215, 51, 230, 78, 38, 239, 9, 217, 214, 38, 34, 46,
+    138, 63, 38, 34, 51, 138, 63, 38, 199, 91, 46, 138, 63, 38, 199, 91, 51,
+    138, 63, 38, 217, 215, 46, 138, 63, 38, 217, 215, 51, 138, 63, 38, 239,
+    9, 217, 215, 63, 38, 42, 199, 61, 46, 230, 78, 38, 42, 199, 61, 51, 230,
+    78, 209, 105, 232, 136, 39, 84, 103, 78, 220, 40, 209, 105, 232, 136, 39,
+    84, 234, 100, 237, 185, 209, 105, 232, 136, 39, 84, 234, 89, 237, 185,
+    209, 105, 232, 136, 39, 84, 132, 219, 175, 209, 105, 232, 136, 39, 84,
+    194, 121, 132, 219, 175, 209, 105, 232, 136, 39, 84, 46, 210, 230, 209,
+    105, 232, 136, 39, 84, 51, 210, 230, 209, 105, 232, 136, 39, 84, 46, 238,
+    138, 186, 209, 105, 232, 136, 39, 84, 51, 238, 138, 186, 209, 105, 232,
+    136, 39, 84, 46, 198, 237, 204, 2, 186, 209, 105, 232, 136, 39, 84, 51,
+    198, 237, 204, 2, 186, 209, 105, 232, 136, 39, 84, 46, 60, 219, 247, 186,
+    209, 105, 232, 136, 39, 84, 51, 60, 219, 247, 186, 209, 105, 232, 136,
+    39, 84, 46, 55, 250, 208, 186, 209, 105, 232, 136, 39, 84, 51, 55, 250,
+    208, 186, 209, 105, 232, 136, 39, 84, 46, 250, 208, 186, 209, 105, 232,
+    136, 39, 84, 51, 250, 208, 186, 209, 105, 232, 136, 39, 84, 46, 238, 224,
+    186, 209, 105, 232, 136, 39, 84, 51, 238, 224, 186, 209, 105, 232, 136,
+    39, 84, 46, 62, 238, 224, 186, 209, 105, 232, 136, 39, 84, 51, 62, 238,
+    224, 186, 204, 155, 236, 114, 62, 204, 155, 236, 114, 209, 105, 232, 136,
+    39, 84, 46, 50, 186, 209, 105, 232, 136, 39, 84, 51, 50, 186, 237, 184,
+    211, 109, 246, 134, 211, 109, 194, 121, 211, 109, 55, 194, 121, 211, 109,
+    237, 184, 132, 219, 175, 246, 134, 132, 219, 175, 194, 121, 132, 219,
+    175, 2, 242, 38, 2, 149, 242, 38, 2, 232, 71, 201, 238, 2, 204, 180, 2,
+    242, 47, 2, 208, 159, 77, 2, 233, 204, 77, 2, 234, 100, 237, 185, 2, 46,
+    210, 230, 2, 51, 210, 230, 2, 46, 238, 138, 186, 2, 51, 238, 138, 186, 2,
+    46, 198, 237, 204, 2, 186, 2, 51, 198, 237, 204, 2, 186, 2, 31, 57, 2,
+    250, 229, 2, 250, 37, 2, 102, 57, 2, 228, 110, 2, 219, 240, 57, 2, 230,
+    204, 57, 2, 234, 30, 57, 2, 207, 169, 202, 189, 2, 236, 127, 57, 2, 210,
+    133, 57, 2, 242, 36, 250, 26, 9, 233, 57, 72, 20, 9, 200, 103, 4, 233,
+    57, 58, 9, 237, 214, 72, 20, 9, 200, 148, 232, 108, 9, 222, 85, 72, 20,
+    9, 233, 59, 72, 20, 9, 233, 59, 217, 35, 20, 9, 237, 216, 72, 20, 9, 237,
+    216, 217, 35, 20, 9, 222, 87, 72, 20, 9, 222, 87, 217, 35, 20, 9, 204,
+    55, 72, 20, 9, 204, 55, 217, 35, 20, 9, 201, 132, 72, 20, 9, 201, 132,
+    217, 35, 20, 9, 1, 230, 67, 72, 20, 9, 1, 157, 4, 217, 210, 95, 72, 20,
+    9, 1, 157, 4, 217, 210, 95, 52, 20, 9, 1, 157, 4, 230, 67, 95, 72, 20, 9,
+    1, 157, 4, 230, 67, 95, 52, 20, 9, 1, 194, 120, 4, 230, 67, 95, 72, 20,
+    9, 1, 194, 120, 4, 230, 67, 95, 52, 20, 9, 1, 157, 4, 230, 67, 248, 84,
+    72, 20, 9, 1, 157, 4, 230, 67, 248, 84, 52, 20, 9, 1, 97, 4, 230, 67, 95,
+    72, 20, 9, 1, 97, 4, 230, 67, 95, 52, 20, 9, 1, 97, 4, 230, 67, 95, 88,
+    20, 9, 1, 97, 4, 230, 67, 95, 217, 35, 20, 9, 1, 157, 72, 20, 9, 1, 157,
+    52, 20, 9, 1, 248, 97, 72, 20, 9, 1, 248, 97, 52, 20, 9, 1, 248, 97, 88,
+    20, 9, 1, 248, 97, 217, 35, 20, 9, 1, 200, 50, 217, 134, 72, 20, 9, 1,
+    200, 50, 217, 134, 52, 20, 9, 1, 200, 50, 72, 20, 9, 1, 200, 50, 52, 20,
+    9, 1, 200, 50, 88, 20, 9, 1, 200, 50, 217, 35, 20, 9, 1, 199, 221, 72,
+    20, 9, 1, 199, 221, 52, 20, 9, 1, 199, 221, 88, 20, 9, 1, 199, 221, 217,
+    35, 20, 9, 1, 223, 38, 72, 20, 9, 1, 223, 38, 52, 20, 9, 1, 223, 38, 88,
+    20, 9, 1, 223, 38, 217, 35, 20, 9, 1, 176, 72, 20, 9, 1, 176, 52, 20, 9,
+    1, 176, 88, 20, 9, 1, 176, 217, 35, 20, 9, 1, 221, 246, 72, 20, 9, 1,
+    221, 246, 52, 20, 9, 1, 221, 246, 88, 20, 9, 1, 221, 246, 217, 35, 20, 9,
+    1, 237, 228, 72, 20, 9, 1, 237, 228, 52, 20, 9, 1, 199, 233, 72, 20, 9,
+    1, 199, 233, 52, 20, 9, 1, 207, 222, 72, 20, 9, 1, 207, 222, 52, 20, 9,
+    1, 192, 104, 72, 20, 9, 1, 192, 104, 52, 20, 9, 1, 205, 202, 72, 20, 9,
+    1, 205, 202, 52, 20, 9, 1, 205, 202, 88, 20, 9, 1, 205, 202, 217, 35, 20,
+    9, 1, 204, 9, 72, 20, 9, 1, 204, 9, 52, 20, 9, 1, 204, 9, 88, 20, 9, 1,
+    204, 9, 217, 35, 20, 9, 1, 206, 87, 72, 20, 9, 1, 206, 87, 52, 20, 9, 1,
+    206, 87, 88, 20, 9, 1, 206, 87, 217, 35, 20, 9, 1, 237, 251, 72, 20, 9,
+    1, 237, 251, 52, 20, 9, 1, 237, 251, 88, 20, 9, 1, 237, 251, 217, 35, 20,
+    9, 1, 200, 152, 72, 20, 9, 1, 200, 152, 52, 20, 9, 1, 200, 152, 88, 20,
+    9, 1, 200, 152, 217, 35, 20, 9, 1, 192, 107, 72, 20, 9, 1, 192, 107, 52,
+    20, 9, 1, 192, 107, 88, 20, 9, 1, 192, 107, 217, 35, 20, 9, 1, 251, 58,
+    72, 20, 9, 1, 251, 58, 52, 20, 9, 1, 251, 58, 88, 20, 9, 1, 251, 58, 217,
+    35, 20, 9, 1, 231, 80, 72, 20, 9, 1, 231, 80, 52, 20, 9, 1, 231, 80, 88,
+    20, 9, 1, 231, 80, 217, 35, 20, 9, 1, 233, 35, 72, 20, 9, 1, 233, 35, 52,
+    20, 9, 1, 233, 35, 88, 20, 9, 1, 233, 35, 217, 35, 20, 9, 1, 208, 233,
+    72, 20, 9, 1, 208, 233, 52, 20, 9, 1, 208, 233, 88, 20, 9, 1, 208, 233,
+    217, 35, 20, 9, 1, 222, 140, 72, 20, 9, 1, 222, 140, 52, 20, 9, 1, 222,
+    140, 88, 20, 9, 1, 222, 140, 217, 35, 20, 9, 1, 220, 95, 72, 20, 9, 1,
+    220, 95, 52, 20, 9, 1, 220, 95, 88, 20, 9, 1, 220, 95, 217, 35, 20, 9, 1,
+    91, 72, 20, 9, 1, 91, 52, 20, 9, 1, 91, 88, 20, 9, 1, 91, 217, 35, 20, 9,
+    1, 213, 124, 72, 20, 9, 1, 213, 124, 52, 20, 9, 1, 213, 124, 88, 20, 9,
+    1, 213, 124, 217, 35, 20, 9, 1, 229, 221, 72, 20, 9, 1, 229, 221, 52, 20,
+    9, 1, 229, 221, 88, 20, 9, 1, 229, 221, 217, 35, 20, 9, 1, 194, 120, 72,
+    20, 9, 1, 194, 120, 52, 20, 9, 1, 157, 217, 169, 72, 20, 9, 1, 157, 217,
+    169, 52, 20, 9, 1, 97, 72, 20, 9, 1, 97, 52, 20, 9, 1, 97, 88, 20, 9, 1,
+    97, 217, 35, 20, 9, 34, 220, 95, 4, 157, 4, 217, 210, 95, 72, 20, 9, 34,
+    220, 95, 4, 157, 4, 217, 210, 95, 52, 20, 9, 34, 220, 95, 4, 157, 4, 230,
+    67, 95, 72, 20, 9, 34, 220, 95, 4, 157, 4, 230, 67, 95, 52, 20, 9, 34,
+    220, 95, 4, 157, 4, 230, 67, 248, 84, 72, 20, 9, 34, 220, 95, 4, 157, 4,
+    230, 67, 248, 84, 52, 20, 9, 34, 220, 95, 4, 157, 72, 20, 9, 34, 220, 95,
+    4, 157, 52, 20, 192, 77, 194, 61, 213, 136, 202, 160, 183, 233, 204, 77,
+    183, 208, 142, 77, 183, 31, 57, 183, 236, 127, 57, 183, 210, 133, 57,
+    183, 250, 229, 183, 250, 147, 183, 46, 210, 230, 183, 51, 210, 230, 183,
+    250, 37, 183, 102, 57, 183, 242, 38, 183, 228, 110, 183, 232, 71, 201,
+    238, 183, 202, 189, 183, 17, 192, 76, 183, 17, 101, 183, 17, 104, 183,
+    17, 133, 183, 17, 134, 183, 17, 151, 183, 17, 170, 183, 17, 179, 183, 17,
+    174, 183, 17, 182, 183, 242, 47, 183, 204, 180, 183, 219, 240, 57, 183,
+    234, 30, 57, 183, 230, 204, 57, 183, 208, 159, 77, 183, 242, 36, 250, 26,
+    183, 8, 6, 1, 64, 183, 8, 6, 1, 249, 226, 183, 8, 6, 1, 247, 52, 183, 8,
+    6, 1, 238, 95, 183, 8, 6, 1, 71, 183, 8, 6, 1, 233, 163, 183, 8, 6, 1,
+    232, 44, 183, 8, 6, 1, 230, 124, 183, 8, 6, 1, 70, 183, 8, 6, 1, 223, 65,
+    183, 8, 6, 1, 222, 184, 183, 8, 6, 1, 165, 183, 8, 6, 1, 218, 236, 183,
+    8, 6, 1, 215, 151, 183, 8, 6, 1, 74, 183, 8, 6, 1, 211, 93, 183, 8, 6, 1,
+    208, 247, 183, 8, 6, 1, 150, 183, 8, 6, 1, 206, 158, 183, 8, 6, 1, 200,
+    228, 183, 8, 6, 1, 68, 183, 8, 6, 1, 196, 236, 183, 8, 6, 1, 194, 202,
+    183, 8, 6, 1, 193, 223, 183, 8, 6, 1, 193, 148, 183, 8, 6, 1, 192, 155,
+    183, 46, 50, 186, 183, 207, 169, 202, 189, 183, 51, 50, 186, 183, 242,
+    122, 251, 143, 183, 132, 219, 175, 183, 230, 211, 251, 143, 183, 8, 2, 1,
+    64, 183, 8, 2, 1, 249, 226, 183, 8, 2, 1, 247, 52, 183, 8, 2, 1, 238, 95,
+    183, 8, 2, 1, 71, 183, 8, 2, 1, 233, 163, 183, 8, 2, 1, 232, 44, 183, 8,
+    2, 1, 230, 124, 183, 8, 2, 1, 70, 183, 8, 2, 1, 223, 65, 183, 8, 2, 1,
+    222, 184, 183, 8, 2, 1, 165, 183, 8, 2, 1, 218, 236, 183, 8, 2, 1, 215,
+    151, 183, 8, 2, 1, 74, 183, 8, 2, 1, 211, 93, 183, 8, 2, 1, 208, 247,
+    183, 8, 2, 1, 150, 183, 8, 2, 1, 206, 158, 183, 8, 2, 1, 200, 228, 183,
+    8, 2, 1, 68, 183, 8, 2, 1, 196, 236, 183, 8, 2, 1, 194, 202, 183, 8, 2,
+    1, 193, 223, 183, 8, 2, 1, 193, 148, 183, 8, 2, 1, 192, 155, 183, 46,
+    238, 138, 186, 183, 84, 219, 175, 183, 51, 238, 138, 186, 183, 199, 90,
+    183, 46, 62, 210, 230, 183, 51, 62, 210, 230, 145, 149, 232, 71, 201,
+    238, 145, 46, 238, 224, 186, 145, 51, 238, 224, 186, 145, 149, 242, 38,
+    145, 75, 85, 236, 114, 145, 75, 1, 194, 36, 145, 75, 1, 2, 64, 145, 75,
+    1, 2, 70, 145, 75, 1, 2, 68, 145, 75, 1, 2, 71, 145, 75, 1, 2, 74, 145,
+    75, 1, 2, 168, 145, 75, 1, 2, 192, 214, 145, 75, 1, 2, 193, 1, 145, 75,
+    1, 2, 198, 45, 145, 222, 82, 209, 76, 202, 174, 77, 145, 75, 1, 64, 145,
+    75, 1, 70, 145, 75, 1, 68, 145, 75, 1, 71, 145, 75, 1, 74, 145, 75, 1,
+    160, 145, 75, 1, 221, 204, 145, 75, 1, 221, 33, 145, 75, 1, 222, 57, 145,
+    75, 1, 221, 113, 145, 75, 1, 188, 145, 75, 1, 203, 125, 145, 75, 1, 201,
+    184, 145, 75, 1, 205, 223, 145, 75, 1, 202, 212, 145, 75, 1, 189, 145,
+    75, 1, 199, 128, 145, 75, 1, 198, 45, 145, 75, 1, 200, 79, 145, 75, 1,
+    155, 145, 75, 1, 181, 145, 75, 1, 214, 60, 145, 75, 1, 213, 22, 145, 75,
+    1, 214, 214, 145, 75, 1, 213, 142, 145, 75, 1, 144, 145, 75, 1, 229, 178,
+    145, 75, 1, 228, 181, 145, 75, 1, 229, 255, 145, 75, 1, 229, 43, 145, 75,
+    1, 172, 145, 75, 1, 216, 175, 145, 75, 1, 215, 241, 145, 75, 1, 217, 48,
+    145, 75, 1, 216, 91, 145, 75, 1, 168, 145, 75, 1, 192, 214, 145, 75, 1,
+    193, 1, 145, 75, 1, 167, 145, 75, 1, 207, 151, 145, 75, 1, 206, 218, 145,
+    75, 1, 208, 7, 145, 75, 1, 207, 55, 145, 75, 1, 194, 169, 145, 75, 1,
+    215, 151, 145, 75, 195, 248, 202, 174, 77, 145, 75, 204, 185, 202, 174,
+    77, 145, 30, 232, 247, 145, 30, 1, 221, 151, 145, 30, 1, 202, 84, 145,
+    30, 1, 221, 144, 145, 30, 1, 214, 45, 145, 30, 1, 214, 43, 145, 30, 1,
+    214, 42, 145, 30, 1, 199, 103, 145, 30, 1, 202, 73, 145, 30, 1, 207, 133,
+    145, 30, 1, 207, 128, 145, 30, 1, 207, 125, 145, 30, 1, 207, 118, 145,
+    30, 1, 207, 113, 145, 30, 1, 207, 108, 145, 30, 1, 207, 119, 145, 30, 1,
+    207, 131, 145, 30, 1, 216, 153, 145, 30, 1, 210, 36, 145, 30, 1, 202, 81,
+    145, 30, 1, 210, 25, 145, 30, 1, 203, 64, 145, 30, 1, 202, 78, 145, 30,
+    1, 223, 247, 145, 30, 1, 242, 144, 145, 30, 1, 202, 88, 145, 30, 1, 242,
+    211, 145, 30, 1, 221, 225, 145, 30, 1, 199, 198, 145, 30, 1, 210, 75,
+    145, 30, 1, 229, 162, 145, 30, 1, 64, 145, 30, 1, 251, 108, 145, 30, 1,
+    168, 145, 30, 1, 193, 118, 145, 30, 1, 234, 50, 145, 30, 1, 71, 145, 30,
+    1, 193, 56, 145, 30, 1, 193, 69, 145, 30, 1, 74, 145, 30, 1, 194, 169,
+    145, 30, 1, 194, 160, 145, 30, 1, 212, 0, 145, 30, 1, 193, 1, 145, 30, 1,
+    68, 145, 30, 1, 194, 93, 145, 30, 1, 194, 111, 145, 30, 1, 194, 72, 145,
+    30, 1, 192, 214, 145, 30, 1, 233, 230, 145, 30, 1, 193, 22, 145, 30, 1,
+    70, 183, 246, 140, 57, 183, 209, 143, 57, 183, 213, 111, 57, 183, 217,
+    214, 183, 247, 136, 161, 183, 193, 60, 57, 183, 194, 19, 57, 145, 232,
+    131, 152, 196, 105, 145, 114, 54, 145, 197, 30, 54, 145, 94, 54, 145,
+    235, 92, 54, 145, 60, 202, 106, 145, 62, 242, 130, 223, 134, 250, 193,
+    250, 219, 223, 134, 250, 193, 204, 165, 223, 134, 250, 193, 200, 15, 212,
+    19, 207, 193, 246, 99, 207, 193, 246, 99, 32, 76, 5, 249, 210, 64, 32,
+    76, 5, 249, 179, 71, 32, 76, 5, 249, 188, 70, 32, 76, 5, 249, 156, 74,
+    32, 76, 5, 249, 206, 68, 32, 76, 5, 249, 225, 238, 0, 32, 76, 5, 249,
+    172, 237, 116, 32, 76, 5, 249, 212, 237, 16, 32, 76, 5, 249, 202, 236,
+    146, 32, 76, 5, 249, 166, 235, 62, 32, 76, 5, 249, 160, 223, 62, 32, 76,
+    5, 249, 171, 223, 41, 32, 76, 5, 249, 181, 222, 233, 32, 76, 5, 249, 152,
+    222, 214, 32, 76, 5, 249, 140, 160, 32, 76, 5, 249, 173, 222, 57, 32, 76,
+    5, 249, 150, 221, 204, 32, 76, 5, 249, 147, 221, 113, 32, 76, 5, 249,
+    136, 221, 33, 32, 76, 5, 249, 137, 172, 32, 76, 5, 249, 203, 217, 48, 32,
+    76, 5, 249, 144, 216, 175, 32, 76, 5, 249, 201, 216, 91, 32, 76, 5, 249,
+    193, 215, 241, 32, 76, 5, 249, 214, 181, 32, 76, 5, 249, 192, 214, 214,
+    32, 76, 5, 249, 186, 214, 60, 32, 76, 5, 249, 165, 213, 142, 32, 76, 5,
+    249, 162, 213, 22, 32, 76, 5, 249, 221, 166, 32, 76, 5, 249, 145, 210,
+    181, 32, 76, 5, 249, 178, 210, 51, 32, 76, 5, 249, 205, 209, 198, 32, 76,
+    5, 249, 167, 209, 51, 32, 76, 5, 249, 200, 208, 239, 32, 76, 5, 249, 139,
+    208, 219, 32, 76, 5, 249, 195, 208, 201, 32, 76, 5, 249, 184, 208, 189,
+    32, 76, 5, 249, 157, 167, 32, 76, 5, 249, 189, 208, 7, 32, 76, 5, 249,
+    164, 207, 151, 32, 76, 5, 249, 223, 207, 55, 32, 76, 5, 249, 190, 206,
+    218, 32, 76, 5, 249, 185, 188, 32, 76, 5, 249, 208, 205, 223, 32, 76, 5,
+    249, 176, 203, 125, 32, 76, 5, 249, 204, 202, 212, 32, 76, 5, 249, 159,
+    201, 184, 32, 76, 5, 249, 158, 189, 32, 76, 5, 249, 219, 200, 79, 32, 76,
+    5, 249, 180, 199, 128, 32, 76, 5, 249, 217, 155, 32, 76, 5, 249, 148,
+    198, 45, 32, 76, 5, 249, 163, 194, 169, 32, 76, 5, 249, 142, 194, 111,
+    32, 76, 5, 249, 177, 194, 72, 32, 76, 5, 249, 175, 194, 36, 32, 76, 5,
+    249, 199, 192, 112, 32, 76, 5, 249, 143, 192, 85, 32, 76, 5, 249, 196,
+    192, 8, 32, 76, 5, 249, 191, 254, 42, 32, 76, 5, 249, 174, 253, 186, 32,
+    76, 5, 249, 133, 250, 8, 32, 76, 5, 249, 146, 235, 27, 32, 76, 5, 249,
+    129, 235, 26, 32, 76, 5, 249, 169, 212, 210, 32, 76, 5, 249, 187, 209,
+    49, 32, 76, 5, 249, 155, 209, 53, 32, 76, 5, 249, 141, 208, 70, 32, 76,
+    5, 249, 183, 208, 69, 32, 76, 5, 249, 149, 207, 48, 32, 76, 5, 249, 151,
+    200, 175, 32, 76, 5, 249, 131, 197, 248, 32, 76, 5, 249, 128, 104, 32,
+    76, 16, 249, 198, 32, 76, 16, 249, 197, 32, 76, 16, 249, 194, 32, 76, 16,
+    249, 182, 32, 76, 16, 249, 170, 32, 76, 16, 249, 168, 32, 76, 16, 249,
+    161, 32, 76, 16, 249, 154, 32, 76, 16, 249, 153, 32, 76, 16, 249, 138,
+    32, 76, 16, 249, 135, 32, 76, 16, 249, 134, 32, 76, 16, 249, 132, 32, 76,
+    16, 249, 130, 32, 76, 153, 249, 127, 217, 160, 32, 76, 153, 249, 126,
+    194, 23, 32, 76, 153, 249, 125, 237, 98, 32, 76, 153, 249, 124, 234, 27,
+    32, 76, 153, 249, 123, 217, 127, 32, 76, 153, 249, 122, 202, 27, 32, 76,
+    153, 249, 121, 233, 211, 32, 76, 153, 249, 120, 208, 34, 32, 76, 153,
+    249, 119, 204, 11, 32, 76, 153, 249, 118, 229, 247, 32, 76, 153, 249,
+    117, 202, 168, 32, 76, 153, 249, 116, 247, 218, 32, 76, 153, 249, 115,
+    238, 205, 32, 76, 153, 249, 114, 247, 108, 32, 76, 153, 249, 113, 194,
+    81, 32, 76, 153, 249, 112, 248, 190, 32, 76, 153, 249, 111, 211, 221, 32,
+    76, 153, 249, 110, 202, 138, 32, 76, 153, 249, 109, 238, 103, 32, 76,
+    216, 45, 249, 108, 222, 108, 32, 76, 216, 45, 249, 107, 222, 119, 32, 76,
+    153, 249, 106, 211, 236, 32, 76, 153, 249, 105, 194, 48, 32, 76, 153,
+    249, 104, 32, 76, 216, 45, 249, 103, 250, 105, 32, 76, 216, 45, 249, 102,
+    216, 253, 32, 76, 153, 249, 101, 247, 135, 32, 76, 153, 249, 100, 230,
+    245, 32, 76, 153, 249, 99, 32, 76, 153, 249, 98, 194, 14, 32, 76, 153,
+    249, 97, 32, 76, 153, 249, 96, 32, 76, 153, 249, 95, 228, 208, 32, 76,
+    153, 249, 94, 32, 76, 153, 249, 93, 32, 76, 153, 249, 92, 32, 76, 216,
+    45, 249, 90, 198, 7, 32, 76, 153, 249, 89, 32, 76, 153, 249, 88, 32, 76,
+    153, 249, 87, 242, 78, 32, 76, 153, 249, 86, 32, 76, 153, 249, 85, 32,
+    76, 153, 249, 84, 231, 189, 32, 76, 153, 249, 83, 250, 90, 32, 76, 153,
+    249, 82, 32, 76, 153, 249, 81, 32, 76, 153, 249, 80, 32, 76, 153, 249,
+    79, 32, 76, 153, 249, 78, 32, 76, 153, 249, 77, 32, 76, 153, 249, 76, 32,
+    76, 153, 249, 75, 32, 76, 153, 249, 74, 32, 76, 153, 249, 73, 216, 37,
+    32, 76, 153, 249, 72, 32, 76, 153, 249, 71, 198, 195, 32, 76, 153, 249,
+    70, 32, 76, 153, 249, 69, 32, 76, 153, 249, 68, 32, 76, 153, 249, 67, 32,
+    76, 153, 249, 66, 32, 76, 153, 249, 65, 32, 76, 153, 249, 64, 32, 76,
+    153, 249, 63, 32, 76, 153, 249, 62, 32, 76, 153, 249, 61, 32, 76, 153,
+    249, 60, 32, 76, 153, 249, 59, 229, 210, 32, 76, 153, 249, 38, 232, 145,
+    32, 76, 153, 249, 35, 248, 165, 32, 76, 153, 249, 30, 202, 146, 32, 76,
+    153, 249, 29, 54, 32, 76, 153, 249, 28, 32, 76, 153, 249, 27, 201, 60,
+    32, 76, 153, 249, 26, 32, 76, 153, 249, 25, 32, 76, 153, 249, 24, 194,
+    76, 242, 254, 32, 76, 153, 249, 23, 242, 254, 32, 76, 153, 249, 22, 242,
+    255, 232, 104, 32, 76, 153, 249, 21, 194, 79, 32, 76, 153, 249, 20, 32,
+    76, 153, 249, 19, 32, 76, 216, 45, 249, 18, 236, 207, 32, 76, 153, 249,
+    17, 32, 76, 153, 249, 16, 32, 76, 153, 249, 14, 32, 76, 153, 249, 13, 32,
+    76, 153, 249, 12, 32, 76, 153, 249, 11, 237, 188, 32, 76, 153, 249, 10,
+    32, 76, 153, 249, 9, 32, 76, 153, 249, 8, 32, 76, 153, 249, 7, 32, 76,
+    153, 249, 6, 32, 76, 153, 196, 52, 249, 91, 32, 76, 153, 196, 52, 249,
+    58, 32, 76, 153, 196, 52, 249, 57, 32, 76, 153, 196, 52, 249, 56, 32, 76,
+    153, 196, 52, 249, 55, 32, 76, 153, 196, 52, 249, 54, 32, 76, 153, 196,
+    52, 249, 53, 32, 76, 153, 196, 52, 249, 52, 32, 76, 153, 196, 52, 249,
+    51, 32, 76, 153, 196, 52, 249, 50, 32, 76, 153, 196, 52, 249, 49, 32, 76,
+    153, 196, 52, 249, 48, 32, 76, 153, 196, 52, 249, 47, 32, 76, 153, 196,
+    52, 249, 46, 32, 76, 153, 196, 52, 249, 45, 32, 76, 153, 196, 52, 249,
+    44, 32, 76, 153, 196, 52, 249, 43, 32, 76, 153, 196, 52, 249, 42, 32, 76,
+    153, 196, 52, 249, 41, 32, 76, 153, 196, 52, 249, 40, 32, 76, 153, 196,
+    52, 249, 39, 32, 76, 153, 196, 52, 249, 37, 32, 76, 153, 196, 52, 249,
+    36, 32, 76, 153, 196, 52, 249, 34, 32, 76, 153, 196, 52, 249, 33, 32, 76,
+    153, 196, 52, 249, 32, 32, 76, 153, 196, 52, 249, 31, 32, 76, 153, 196,
+    52, 249, 15, 32, 76, 153, 196, 52, 249, 5, 251, 101, 194, 11, 204, 166,
+    219, 175, 251, 101, 194, 11, 204, 166, 236, 114, 251, 101, 242, 244, 77,
+    251, 101, 31, 101, 251, 101, 31, 104, 251, 101, 31, 133, 251, 101, 31,
+    134, 251, 101, 31, 151, 251, 101, 31, 170, 251, 101, 31, 179, 251, 101,
+    31, 174, 251, 101, 31, 182, 251, 101, 31, 200, 30, 251, 101, 31, 197,
+    239, 251, 101, 31, 199, 184, 251, 101, 31, 232, 126, 251, 101, 31, 233,
+    3, 251, 101, 31, 203, 25, 251, 101, 31, 204, 140, 251, 101, 31, 234, 137,
+    251, 101, 31, 214, 11, 251, 101, 31, 90, 228, 162, 251, 101, 31, 103,
+    228, 162, 251, 101, 31, 112, 228, 162, 251, 101, 31, 232, 119, 228, 162,
+    251, 101, 31, 232, 214, 228, 162, 251, 101, 31, 203, 41, 228, 162, 251,
+    101, 31, 204, 146, 228, 162, 251, 101, 31, 234, 148, 228, 162, 251, 101,
+    31, 214, 16, 228, 162, 251, 101, 31, 90, 180, 251, 101, 31, 103, 180,
+    251, 101, 31, 112, 180, 251, 101, 31, 232, 119, 180, 251, 101, 31, 232,
+    214, 180, 251, 101, 31, 203, 41, 180, 251, 101, 31, 204, 146, 180, 251,
+    101, 31, 234, 148, 180, 251, 101, 31, 214, 16, 180, 251, 101, 31, 200,
+    31, 180, 251, 101, 31, 197, 240, 180, 251, 101, 31, 199, 185, 180, 251,
+    101, 31, 232, 127, 180, 251, 101, 31, 233, 4, 180, 251, 101, 31, 203, 26,
+    180, 251, 101, 31, 204, 141, 180, 251, 101, 31, 234, 138, 180, 251, 101,
+    31, 214, 12, 180, 251, 101, 194, 96, 248, 181, 197, 54, 251, 101, 194,
+    96, 232, 226, 201, 149, 251, 101, 194, 96, 205, 212, 201, 149, 251, 101,
+    194, 96, 199, 192, 201, 149, 251, 101, 194, 96, 232, 112, 201, 149, 251,
+    101, 235, 65, 217, 44, 232, 226, 201, 149, 251, 101, 219, 156, 217, 44,
+    232, 226, 201, 149, 251, 101, 217, 44, 205, 212, 201, 149, 251, 101, 217,
+    44, 199, 192, 201, 149, 33, 251, 133, 250, 10, 90, 208, 167, 33, 251,
+    133, 250, 10, 90, 230, 78, 33, 251, 133, 250, 10, 90, 235, 88, 33, 251,
+    133, 250, 10, 151, 33, 251, 133, 250, 10, 233, 3, 33, 251, 133, 250, 10,
+    232, 214, 228, 162, 33, 251, 133, 250, 10, 232, 214, 180, 33, 251, 133,
+    250, 10, 233, 4, 180, 33, 251, 133, 250, 10, 232, 214, 200, 135, 33, 251,
+    133, 250, 10, 200, 31, 200, 135, 33, 251, 133, 250, 10, 233, 4, 200, 135,
+    33, 251, 133, 250, 10, 90, 228, 163, 200, 135, 33, 251, 133, 250, 10,
+    232, 214, 228, 163, 200, 135, 33, 251, 133, 250, 10, 90, 199, 165, 200,
+    135, 33, 251, 133, 250, 10, 232, 214, 199, 165, 200, 135, 33, 251, 133,
+    250, 10, 232, 214, 202, 11, 33, 251, 133, 250, 10, 200, 31, 202, 11, 33,
+    251, 133, 250, 10, 233, 4, 202, 11, 33, 251, 133, 250, 10, 90, 228, 163,
+    202, 11, 33, 251, 133, 250, 10, 232, 214, 228, 163, 202, 11, 33, 251,
+    133, 250, 10, 90, 199, 165, 202, 11, 33, 251, 133, 250, 10, 200, 31, 199,
+    165, 202, 11, 33, 251, 133, 250, 10, 233, 4, 199, 165, 202, 11, 33, 251,
+    133, 250, 10, 200, 31, 216, 94, 33, 251, 133, 229, 204, 90, 209, 217, 33,
+    251, 133, 199, 208, 101, 33, 251, 133, 229, 200, 101, 33, 251, 133, 234,
+    36, 104, 33, 251, 133, 199, 208, 104, 33, 251, 133, 238, 100, 103, 235,
+    87, 33, 251, 133, 234, 36, 103, 235, 87, 33, 251, 133, 198, 161, 151, 33,
+    251, 133, 198, 161, 200, 30, 33, 251, 133, 198, 161, 200, 31, 250, 249,
+    20, 33, 251, 133, 229, 200, 200, 30, 33, 251, 133, 216, 242, 200, 30, 33,
+    251, 133, 199, 208, 200, 30, 33, 251, 133, 199, 208, 199, 184, 33, 251,
+    133, 198, 161, 233, 3, 33, 251, 133, 198, 161, 233, 4, 250, 249, 20, 33,
+    251, 133, 229, 200, 233, 3, 33, 251, 133, 199, 208, 233, 3, 33, 251, 133,
+    199, 208, 90, 228, 162, 33, 251, 133, 199, 208, 112, 228, 162, 33, 251,
+    133, 234, 36, 232, 214, 228, 162, 33, 251, 133, 198, 161, 232, 214, 228,
+    162, 33, 251, 133, 199, 208, 232, 214, 228, 162, 33, 251, 133, 246, 197,
+    232, 214, 228, 162, 33, 251, 133, 215, 36, 232, 214, 228, 162, 33, 251,
+    133, 199, 208, 90, 180, 33, 251, 133, 199, 208, 232, 214, 180, 33, 251,
+    133, 237, 79, 232, 214, 216, 94, 33, 251, 133, 201, 226, 233, 4, 216, 94,
+    33, 90, 138, 57, 33, 90, 138, 3, 250, 249, 20, 33, 103, 199, 189, 57, 33,
+    112, 208, 166, 57, 33, 193, 67, 57, 33, 200, 136, 57, 33, 235, 89, 57,
+    33, 212, 16, 57, 33, 103, 212, 15, 57, 33, 112, 212, 15, 57, 33, 232,
+    119, 212, 15, 57, 33, 232, 214, 212, 15, 57, 33, 216, 236, 57, 33, 220,
+    210, 248, 181, 57, 33, 219, 149, 57, 33, 211, 127, 57, 33, 193, 200, 57,
+    33, 250, 68, 57, 33, 250, 85, 57, 33, 230, 220, 57, 33, 198, 121, 248,
+    181, 57, 33, 192, 77, 57, 33, 90, 208, 168, 57, 33, 203, 66, 57, 33, 223,
+    171, 57, 213, 131, 57, 207, 30, 204, 136, 57, 207, 30, 197, 70, 57, 207,
+    30, 204, 172, 57, 207, 30, 204, 74, 57, 207, 30, 236, 222, 204, 74, 57,
+    207, 30, 203, 90, 57, 207, 30, 237, 75, 57, 207, 30, 208, 151, 57, 207,
+    30, 204, 153, 57, 207, 30, 235, 41, 57, 207, 30, 250, 62, 57, 207, 30,
+    246, 133, 57, 250, 55, 109, 33, 16, 200, 101, 207, 153, 210, 89, 236,
+    199, 3, 210, 170, 210, 89, 236, 199, 3, 209, 209, 229, 245, 210, 89, 236,
+    199, 3, 200, 104, 229, 245, 210, 89, 236, 199, 3, 246, 220, 210, 89, 236,
+    199, 3, 242, 206, 210, 89, 236, 199, 3, 194, 23, 210, 89, 236, 199, 3,
+    229, 210, 210, 89, 236, 199, 3, 231, 181, 210, 89, 236, 199, 3, 199, 119,
+    210, 89, 236, 199, 3, 54, 210, 89, 236, 199, 3, 247, 180, 210, 89, 236,
+    199, 3, 203, 233, 210, 89, 236, 199, 3, 242, 71, 210, 89, 236, 199, 3,
+    217, 159, 210, 89, 236, 199, 3, 217, 97, 210, 89, 236, 199, 3, 206, 6,
+    210, 89, 236, 199, 3, 219, 204, 210, 89, 236, 199, 3, 247, 201, 210, 89,
+    236, 199, 3, 246, 204, 209, 225, 210, 89, 236, 199, 3, 236, 128, 210, 89,
+    236, 199, 3, 242, 44, 210, 89, 236, 199, 3, 202, 247, 210, 89, 236, 199,
+    3, 242, 45, 210, 89, 236, 199, 3, 248, 105, 210, 89, 236, 199, 3, 203,
+    220, 210, 89, 236, 199, 3, 228, 208, 210, 89, 236, 199, 3, 229, 168, 210,
+    89, 236, 199, 3, 247, 103, 220, 16, 210, 89, 236, 199, 3, 246, 193, 210,
+    89, 236, 199, 3, 208, 34, 210, 89, 236, 199, 3, 234, 196, 210, 89, 236,
+    199, 3, 235, 97, 210, 89, 236, 199, 3, 198, 23, 210, 89, 236, 199, 3,
+    248, 108, 210, 89, 236, 199, 3, 209, 226, 198, 195, 210, 89, 236, 199, 3,
+    196, 18, 210, 89, 236, 199, 3, 210, 248, 210, 89, 236, 199, 3, 207, 19,
+    210, 89, 236, 199, 3, 219, 188, 210, 89, 236, 199, 3, 211, 104, 248, 252,
+    210, 89, 236, 199, 3, 232, 171, 210, 89, 236, 199, 3, 230, 212, 210, 89,
+    236, 199, 3, 201, 227, 210, 89, 236, 199, 3, 2, 249, 237, 210, 89, 236,
+    199, 3, 194, 121, 248, 203, 210, 89, 236, 199, 3, 38, 212, 18, 111, 218,
+    249, 1, 64, 218, 249, 1, 71, 218, 249, 1, 249, 226, 218, 249, 1, 248, 55,
+    218, 249, 1, 232, 44, 218, 249, 1, 238, 95, 218, 249, 1, 70, 218, 249, 1,
+    194, 202, 218, 249, 1, 192, 155, 218, 249, 1, 199, 242, 218, 249, 1, 223,
+    65, 218, 249, 1, 222, 184, 218, 249, 1, 208, 247, 218, 249, 1, 165, 218,
+    249, 1, 218, 236, 218, 249, 1, 215, 151, 218, 249, 1, 216, 96, 218, 249,
+    1, 213, 179, 218, 249, 1, 68, 218, 249, 1, 211, 93, 218, 249, 1, 221,
+    140, 218, 249, 1, 150, 218, 249, 1, 206, 158, 218, 249, 1, 200, 228, 218,
+    249, 1, 198, 86, 218, 249, 1, 250, 224, 218, 249, 1, 234, 88, 218, 249,
+    1, 230, 124, 218, 249, 1, 193, 223, 246, 210, 1, 64, 246, 210, 1, 211,
+    79, 246, 210, 1, 238, 95, 246, 210, 1, 165, 246, 210, 1, 196, 249, 246,
+    210, 1, 150, 246, 210, 1, 220, 46, 246, 210, 1, 254, 42, 246, 210, 1,
+    208, 247, 246, 210, 1, 249, 226, 246, 210, 1, 218, 236, 246, 210, 1, 74,
+    246, 210, 1, 238, 2, 246, 210, 1, 200, 228, 246, 210, 1, 204, 66, 246,
+    210, 1, 204, 65, 246, 210, 1, 206, 158, 246, 210, 1, 247, 51, 246, 210,
+    1, 68, 246, 210, 1, 213, 179, 246, 210, 1, 193, 223, 246, 210, 1, 215,
+    151, 246, 210, 1, 198, 85, 246, 210, 1, 211, 93, 246, 210, 1, 202, 95,
+    246, 210, 1, 70, 246, 210, 1, 71, 246, 210, 1, 196, 246, 246, 210, 1,
+    222, 184, 246, 210, 1, 222, 175, 246, 210, 1, 215, 1, 246, 210, 1, 196,
+    251, 246, 210, 1, 232, 44, 246, 210, 1, 231, 235, 246, 210, 1, 202, 35,
+    246, 210, 1, 202, 34, 246, 210, 1, 214, 167, 246, 210, 1, 223, 224, 246,
+    210, 1, 247, 50, 246, 210, 1, 198, 86, 246, 210, 1, 196, 248, 246, 210,
+    1, 207, 4, 246, 210, 1, 217, 87, 246, 210, 1, 217, 86, 246, 210, 1, 217,
+    85, 246, 210, 1, 217, 84, 246, 210, 1, 220, 45, 246, 210, 1, 234, 200,
+    246, 210, 1, 196, 247, 92, 234, 39, 199, 164, 77, 92, 234, 39, 17, 101,
+    92, 234, 39, 17, 104, 92, 234, 39, 17, 133, 92, 234, 39, 17, 134, 92,
+    234, 39, 17, 151, 92, 234, 39, 17, 170, 92, 234, 39, 17, 179, 92, 234,
+    39, 17, 174, 92, 234, 39, 17, 182, 92, 234, 39, 31, 200, 30, 92, 234, 39,
+    31, 197, 239, 92, 234, 39, 31, 199, 184, 92, 234, 39, 31, 232, 126, 92,
+    234, 39, 31, 233, 3, 92, 234, 39, 31, 203, 25, 92, 234, 39, 31, 204, 140,
+    92, 234, 39, 31, 234, 137, 92, 234, 39, 31, 214, 11, 92, 234, 39, 31, 90,
+    228, 162, 92, 234, 39, 31, 103, 228, 162, 92, 234, 39, 31, 112, 228, 162,
+    92, 234, 39, 31, 232, 119, 228, 162, 92, 234, 39, 31, 232, 214, 228, 162,
+    92, 234, 39, 31, 203, 41, 228, 162, 92, 234, 39, 31, 204, 146, 228, 162,
+    92, 234, 39, 31, 234, 148, 228, 162, 92, 234, 39, 31, 214, 16, 228, 162,
+    40, 43, 1, 64, 40, 43, 1, 248, 123, 40, 43, 1, 222, 57, 40, 43, 1, 237,
+    116, 40, 43, 1, 71, 40, 43, 1, 196, 123, 40, 43, 1, 192, 85, 40, 43, 1,
+    229, 255, 40, 43, 1, 199, 224, 40, 43, 1, 70, 40, 43, 1, 160, 40, 43, 1,
+    234, 124, 40, 43, 1, 234, 99, 40, 43, 1, 234, 88, 40, 43, 1, 233, 255,
+    40, 43, 1, 74, 40, 43, 1, 210, 181, 40, 43, 1, 204, 12, 40, 43, 1, 221,
+    33, 40, 43, 1, 234, 21, 40, 43, 1, 234, 9, 40, 43, 1, 200, 79, 40, 43, 1,
+    68, 40, 43, 1, 234, 127, 40, 43, 1, 210, 80, 40, 43, 1, 221, 234, 40, 43,
+    1, 234, 164, 40, 43, 1, 234, 11, 40, 43, 1, 242, 245, 40, 43, 1, 223,
+    224, 40, 43, 1, 196, 251, 40, 43, 1, 233, 248, 40, 43, 212, 234, 101, 40,
+    43, 212, 234, 151, 40, 43, 212, 234, 200, 30, 40, 43, 212, 234, 233, 3,
+    40, 43, 1, 193, 69, 40, 43, 1, 213, 115, 198, 112, 40, 43, 1, 202, 169,
+    198, 112, 230, 230, 1, 251, 66, 230, 230, 1, 248, 223, 230, 230, 1, 231,
+    43, 230, 230, 1, 237, 237, 230, 230, 1, 251, 61, 230, 230, 1, 208, 230,
+    230, 230, 1, 223, 77, 230, 230, 1, 230, 91, 230, 230, 1, 199, 178, 230,
+    230, 1, 234, 135, 230, 230, 1, 220, 248, 230, 230, 1, 220, 159, 230, 230,
+    1, 217, 150, 230, 230, 1, 215, 38, 230, 230, 1, 223, 33, 230, 230, 1,
+    197, 13, 230, 230, 1, 211, 52, 230, 230, 1, 214, 11, 230, 230, 1, 208,
+    47, 230, 230, 1, 206, 10, 230, 230, 1, 200, 46, 230, 230, 1, 194, 46,
+    230, 230, 1, 233, 77, 230, 230, 1, 223, 228, 230, 230, 1, 228, 145, 230,
+    230, 1, 211, 139, 230, 230, 1, 214, 16, 228, 162, 40, 210, 124, 1, 250,
+    224, 40, 210, 124, 1, 247, 89, 40, 210, 124, 1, 231, 217, 40, 210, 124,
+    1, 236, 132, 40, 210, 124, 1, 71, 40, 210, 124, 1, 192, 53, 40, 210, 124,
+    1, 235, 9, 40, 210, 124, 1, 192, 93, 40, 210, 124, 1, 235, 7, 40, 210,
+    124, 1, 70, 40, 210, 124, 1, 221, 97, 40, 210, 124, 1, 220, 12, 40, 210,
+    124, 1, 217, 3, 40, 210, 124, 1, 214, 194, 40, 210, 124, 1, 195, 235, 40,
+    210, 124, 1, 210, 167, 40, 210, 124, 1, 207, 220, 40, 210, 124, 1, 203,
+    97, 40, 210, 124, 1, 200, 149, 40, 210, 124, 1, 68, 40, 210, 124, 1, 242,
+    226, 40, 210, 124, 1, 203, 202, 40, 210, 124, 1, 204, 14, 40, 210, 124,
+    1, 192, 216, 40, 210, 124, 1, 193, 47, 40, 210, 124, 1, 74, 40, 210, 124,
+    1, 211, 194, 40, 210, 124, 1, 234, 164, 40, 210, 124, 1, 144, 40, 210,
+    124, 1, 198, 96, 40, 210, 124, 1, 196, 110, 40, 210, 124, 1, 193, 51, 40,
+    210, 124, 1, 193, 49, 40, 210, 124, 1, 193, 84, 40, 210, 124, 1, 223,
+    251, 40, 210, 124, 1, 192, 214, 40, 210, 124, 1, 168, 40, 210, 124, 1,
+    228, 58, 38, 40, 210, 124, 1, 250, 224, 38, 40, 210, 124, 1, 236, 132,
+    38, 40, 210, 124, 1, 192, 93, 38, 40, 210, 124, 1, 214, 194, 38, 40, 210,
+    124, 1, 203, 97, 197, 98, 1, 251, 0, 197, 98, 1, 248, 63, 197, 98, 1,
+    231, 205, 197, 98, 1, 221, 250, 197, 98, 1, 237, 76, 197, 98, 1, 229, 43,
+    197, 98, 1, 194, 36, 197, 98, 1, 192, 75, 197, 98, 1, 228, 200, 197, 98,
+    1, 200, 8, 197, 98, 1, 192, 239, 197, 98, 1, 222, 139, 197, 98, 1, 203,
+    224, 197, 98, 1, 220, 90, 197, 98, 1, 217, 12, 197, 98, 1, 237, 36, 197,
+    98, 1, 212, 230, 197, 98, 1, 191, 252, 197, 98, 1, 206, 45, 197, 98, 1,
+    251, 57, 197, 98, 1, 209, 51, 197, 98, 1, 206, 85, 197, 98, 1, 208, 182,
+    197, 98, 1, 208, 25, 197, 98, 1, 199, 228, 197, 98, 1, 231, 79, 197, 98,
+    1, 155, 197, 98, 1, 70, 197, 98, 1, 68, 197, 98, 1, 202, 46, 197, 98,
+    194, 11, 236, 177, 40, 210, 118, 3, 64, 40, 210, 118, 3, 70, 40, 210,
+    118, 3, 68, 40, 210, 118, 3, 160, 40, 210, 118, 3, 221, 33, 40, 210, 118,
+    3, 231, 233, 40, 210, 118, 3, 230, 186, 40, 210, 118, 3, 193, 209, 40,
+    210, 118, 3, 247, 19, 40, 210, 118, 3, 223, 62, 40, 210, 118, 3, 223, 20,
+    40, 210, 118, 3, 189, 40, 210, 118, 3, 198, 45, 40, 210, 118, 3, 238, 0,
+    40, 210, 118, 3, 237, 16, 40, 210, 118, 3, 235, 62, 40, 210, 118, 3, 199,
+    240, 40, 210, 118, 3, 166, 40, 210, 118, 3, 249, 3, 40, 210, 118, 3, 233,
+    97, 40, 210, 118, 3, 181, 40, 210, 118, 3, 213, 22, 40, 210, 118, 3, 172,
+    40, 210, 118, 3, 216, 175, 40, 210, 118, 3, 215, 241, 40, 210, 118, 3,
+    168, 40, 210, 118, 3, 196, 157, 40, 210, 118, 3, 196, 39, 40, 210, 118,
+    3, 167, 40, 210, 118, 3, 206, 218, 40, 210, 118, 3, 177, 40, 210, 118, 3,
+    188, 40, 210, 118, 3, 192, 112, 40, 210, 118, 3, 204, 64, 40, 210, 118,
+    3, 202, 92, 40, 210, 118, 3, 144, 40, 210, 118, 3, 250, 2, 40, 210, 118,
+    3, 250, 1, 40, 210, 118, 3, 250, 0, 40, 210, 118, 3, 193, 178, 40, 210,
+    118, 3, 237, 233, 40, 210, 118, 3, 237, 232, 40, 210, 118, 3, 248, 234,
+    40, 210, 118, 3, 247, 71, 40, 210, 118, 194, 11, 236, 177, 40, 210, 118,
+    31, 101, 40, 210, 118, 31, 104, 40, 210, 118, 31, 200, 30, 40, 210, 118,
+    31, 197, 239, 40, 210, 118, 31, 228, 162, 237, 56, 6, 1, 184, 70, 237,
+    56, 6, 1, 184, 71, 237, 56, 6, 1, 184, 64, 237, 56, 6, 1, 184, 251, 72,
+    237, 56, 6, 1, 184, 74, 237, 56, 6, 1, 184, 211, 194, 237, 56, 6, 1, 203,
+    195, 70, 237, 56, 6, 1, 203, 195, 71, 237, 56, 6, 1, 203, 195, 64, 237,
+    56, 6, 1, 203, 195, 251, 72, 237, 56, 6, 1, 203, 195, 74, 237, 56, 6, 1,
+    203, 195, 211, 194, 237, 56, 6, 1, 249, 236, 237, 56, 6, 1, 211, 106,
+    237, 56, 6, 1, 193, 244, 237, 56, 6, 1, 193, 66, 237, 56, 6, 1, 230, 124,
+    237, 56, 6, 1, 210, 168, 237, 56, 6, 1, 248, 108, 237, 56, 6, 1, 200, 56,
+    237, 56, 6, 1, 237, 101, 237, 56, 6, 1, 242, 241, 237, 56, 6, 1, 223, 39,
+    237, 56, 6, 1, 222, 64, 237, 56, 6, 1, 231, 179, 237, 56, 6, 1, 234, 164,
+    237, 56, 6, 1, 196, 118, 237, 56, 6, 1, 233, 235, 237, 56, 6, 1, 199,
+    222, 237, 56, 6, 1, 234, 9, 237, 56, 6, 1, 192, 82, 237, 56, 6, 1, 233,
+    255, 237, 56, 6, 1, 192, 61, 237, 56, 6, 1, 234, 21, 237, 56, 6, 1, 234,
+    124, 237, 56, 6, 1, 234, 99, 237, 56, 6, 1, 234, 88, 237, 56, 6, 1, 234,
+    73, 237, 56, 6, 1, 211, 238, 237, 56, 6, 1, 233, 212, 237, 56, 2, 1, 184,
+    70, 237, 56, 2, 1, 184, 71, 237, 56, 2, 1, 184, 64, 237, 56, 2, 1, 184,
+    251, 72, 237, 56, 2, 1, 184, 74, 237, 56, 2, 1, 184, 211, 194, 237, 56,
+    2, 1, 203, 195, 70, 237, 56, 2, 1, 203, 195, 71, 237, 56, 2, 1, 203, 195,
+    64, 237, 56, 2, 1, 203, 195, 251, 72, 237, 56, 2, 1, 203, 195, 74, 237,
+    56, 2, 1, 203, 195, 211, 194, 237, 56, 2, 1, 249, 236, 237, 56, 2, 1,
+    211, 106, 237, 56, 2, 1, 193, 244, 237, 56, 2, 1, 193, 66, 237, 56, 2, 1,
+    230, 124, 237, 56, 2, 1, 210, 168, 237, 56, 2, 1, 248, 108, 237, 56, 2,
+    1, 200, 56, 237, 56, 2, 1, 237, 101, 237, 56, 2, 1, 242, 241, 237, 56, 2,
+    1, 223, 39, 237, 56, 2, 1, 222, 64, 237, 56, 2, 1, 231, 179, 237, 56, 2,
+    1, 234, 164, 237, 56, 2, 1, 196, 118, 237, 56, 2, 1, 233, 235, 237, 56,
+    2, 1, 199, 222, 237, 56, 2, 1, 234, 9, 237, 56, 2, 1, 192, 82, 237, 56,
+    2, 1, 233, 255, 237, 56, 2, 1, 192, 61, 237, 56, 2, 1, 234, 21, 237, 56,
+    2, 1, 234, 124, 237, 56, 2, 1, 234, 99, 237, 56, 2, 1, 234, 88, 237, 56,
+    2, 1, 234, 73, 237, 56, 2, 1, 211, 238, 237, 56, 2, 1, 233, 212, 204, 19,
+    1, 210, 165, 204, 19, 1, 198, 235, 204, 19, 1, 221, 192, 204, 19, 1, 233,
+    40, 204, 19, 1, 199, 197, 204, 19, 1, 202, 212, 204, 19, 1, 201, 97, 204,
+    19, 1, 242, 160, 204, 19, 1, 193, 68, 204, 19, 1, 228, 159, 204, 19, 1,
+    248, 40, 204, 19, 1, 237, 115, 204, 19, 1, 231, 219, 204, 19, 1, 195,
+    230, 204, 19, 1, 199, 203, 204, 19, 1, 192, 5, 204, 19, 1, 217, 43, 204,
+    19, 1, 222, 212, 204, 19, 1, 194, 27, 204, 19, 1, 230, 101, 204, 19, 1,
+    219, 89, 204, 19, 1, 216, 121, 204, 19, 1, 223, 231, 204, 19, 1, 234,
+    162, 204, 19, 1, 250, 53, 204, 19, 1, 251, 113, 204, 19, 1, 211, 211,
+    204, 19, 1, 194, 14, 204, 19, 1, 211, 125, 204, 19, 1, 251, 72, 204, 19,
+    1, 207, 46, 204, 19, 1, 212, 230, 204, 19, 1, 234, 182, 204, 19, 1, 251,
+    77, 204, 19, 1, 228, 49, 204, 19, 1, 197, 41, 204, 19, 1, 212, 24, 204,
+    19, 1, 211, 186, 204, 19, 1, 211, 236, 204, 19, 1, 249, 239, 204, 19, 1,
+    250, 107, 204, 19, 1, 211, 163, 204, 19, 1, 251, 52, 204, 19, 1, 234, 13,
+    204, 19, 1, 250, 82, 204, 19, 1, 234, 193, 204, 19, 1, 228, 57, 204, 19,
+    1, 193, 30, 211, 141, 1, 251, 26, 211, 141, 1, 249, 3, 211, 141, 1, 189,
+    211, 141, 1, 223, 62, 211, 141, 1, 193, 209, 211, 141, 1, 221, 250, 211,
+    141, 1, 237, 100, 211, 141, 1, 167, 211, 141, 1, 188, 211, 141, 1, 203,
+    230, 211, 141, 1, 237, 40, 211, 141, 1, 246, 183, 211, 141, 1, 231, 233,
+    211, 141, 1, 233, 97, 211, 141, 1, 208, 237, 211, 141, 1, 222, 155, 211,
+    141, 1, 220, 180, 211, 141, 1, 216, 135, 211, 141, 1, 212, 214, 211, 141,
+    1, 194, 119, 211, 141, 1, 144, 211, 141, 1, 168, 211, 141, 1, 64, 211,
+    141, 1, 71, 211, 141, 1, 70, 211, 141, 1, 74, 211, 141, 1, 68, 211, 141,
+    1, 252, 33, 211, 141, 1, 234, 171, 211, 141, 1, 211, 194, 211, 141, 17,
+    192, 76, 211, 141, 17, 101, 211, 141, 17, 104, 211, 141, 17, 133, 211,
+    141, 17, 134, 211, 141, 17, 151, 211, 141, 17, 170, 211, 141, 17, 179,
+    211, 141, 17, 174, 211, 141, 17, 182, 211, 143, 6, 1, 64, 211, 143, 6, 1,
+    251, 63, 211, 143, 6, 1, 251, 57, 211, 143, 6, 1, 251, 72, 211, 143, 6,
+    1, 247, 167, 211, 143, 6, 1, 246, 117, 211, 143, 6, 1, 234, 156, 211,
+    143, 6, 1, 71, 211, 143, 6, 1, 234, 136, 211, 143, 6, 1, 144, 211, 143,
+    6, 1, 228, 115, 211, 143, 6, 1, 70, 211, 143, 6, 1, 160, 211, 143, 6, 1,
+    234, 155, 211, 143, 6, 1, 220, 212, 211, 143, 6, 1, 177, 211, 143, 6, 1,
+    172, 211, 143, 6, 1, 181, 211, 143, 6, 1, 74, 211, 143, 6, 1, 211, 235,
+    211, 143, 6, 1, 166, 211, 143, 6, 1, 234, 154, 211, 143, 6, 1, 188, 211,
+    143, 6, 1, 204, 64, 211, 143, 6, 1, 189, 211, 143, 6, 1, 234, 153, 211,
+    143, 6, 1, 198, 118, 211, 143, 6, 1, 234, 152, 211, 143, 6, 1, 198, 108,
+    211, 143, 6, 1, 237, 40, 211, 143, 6, 1, 68, 211, 143, 6, 1, 194, 169,
+    211, 143, 6, 1, 221, 250, 211, 143, 6, 1, 231, 84, 211, 143, 6, 1, 192,
+    112, 211, 143, 6, 1, 192, 71, 211, 143, 2, 1, 64, 211, 143, 2, 1, 251,
+    63, 211, 143, 2, 1, 251, 57, 211, 143, 2, 1, 251, 72, 211, 143, 2, 1,
+    247, 167, 211, 143, 2, 1, 246, 117, 211, 143, 2, 1, 234, 156, 211, 143,
+    2, 1, 71, 211, 143, 2, 1, 234, 136, 211, 143, 2, 1, 144, 211, 143, 2, 1,
+    228, 115, 211, 143, 2, 1, 70, 211, 143, 2, 1, 160, 211, 143, 2, 1, 234,
+    155, 211, 143, 2, 1, 220, 212, 211, 143, 2, 1, 177, 211, 143, 2, 1, 172,
+    211, 143, 2, 1, 181, 211, 143, 2, 1, 74, 211, 143, 2, 1, 211, 235, 211,
+    143, 2, 1, 166, 211, 143, 2, 1, 234, 154, 211, 143, 2, 1, 188, 211, 143,
+    2, 1, 204, 64, 211, 143, 2, 1, 189, 211, 143, 2, 1, 234, 153, 211, 143,
+    2, 1, 198, 118, 211, 143, 2, 1, 234, 152, 211, 143, 2, 1, 198, 108, 211,
+    143, 2, 1, 237, 40, 211, 143, 2, 1, 68, 211, 143, 2, 1, 194, 169, 211,
+    143, 2, 1, 221, 250, 211, 143, 2, 1, 231, 84, 211, 143, 2, 1, 192, 112,
+    211, 143, 2, 1, 192, 71, 234, 120, 1, 64, 234, 120, 1, 248, 123, 234,
+    120, 1, 246, 158, 234, 120, 1, 242, 245, 234, 120, 1, 237, 116, 234, 120,
+    1, 214, 247, 234, 120, 1, 237, 31, 234, 120, 1, 234, 150, 234, 120, 1,
+    71, 234, 120, 1, 233, 47, 234, 120, 1, 231, 158, 234, 120, 1, 231, 15,
+    234, 120, 1, 229, 255, 234, 120, 1, 70, 234, 120, 1, 223, 41, 234, 120,
+    1, 222, 57, 234, 120, 1, 220, 42, 234, 120, 1, 219, 132, 234, 120, 1,
+    217, 48, 234, 120, 1, 214, 214, 234, 120, 1, 181, 234, 120, 1, 213, 249,
+    234, 120, 1, 74, 234, 120, 1, 210, 181, 234, 120, 1, 208, 219, 234, 120,
+    1, 208, 7, 234, 120, 1, 206, 254, 234, 120, 1, 205, 223, 234, 120, 1,
+    204, 12, 234, 120, 1, 200, 79, 234, 120, 1, 199, 224, 234, 120, 1, 68,
+    234, 120, 1, 196, 123, 234, 120, 1, 193, 203, 234, 120, 1, 193, 148, 234,
+    120, 1, 192, 85, 234, 120, 1, 192, 62, 234, 120, 1, 231, 70, 234, 120, 1,
+    231, 76, 234, 120, 1, 221, 234, 246, 190, 251, 27, 1, 250, 251, 246, 190,
+    251, 27, 1, 248, 65, 246, 190, 251, 27, 1, 231, 33, 246, 190, 251, 27, 1,
+    237, 181, 246, 190, 251, 27, 1, 234, 181, 246, 190, 251, 27, 1, 192, 96,
+    246, 190, 251, 27, 1, 233, 172, 246, 190, 251, 27, 1, 192, 56, 246, 190,
+    251, 27, 1, 200, 107, 246, 190, 251, 27, 1, 246, 117, 246, 190, 251, 27,
+    1, 192, 225, 246, 190, 251, 27, 1, 192, 71, 246, 190, 251, 27, 1, 223,
+    104, 246, 190, 251, 27, 1, 204, 64, 246, 190, 251, 27, 1, 220, 83, 246,
+    190, 251, 27, 1, 223, 117, 246, 190, 251, 27, 1, 193, 199, 246, 190, 251,
+    27, 1, 235, 25, 246, 190, 251, 27, 1, 246, 217, 246, 190, 251, 27, 1,
+    223, 21, 246, 190, 251, 27, 1, 222, 99, 246, 190, 251, 27, 1, 218, 245,
+    246, 190, 251, 27, 1, 229, 189, 246, 190, 251, 27, 1, 208, 220, 246, 190,
+    251, 27, 1, 250, 165, 246, 190, 251, 27, 1, 242, 177, 246, 190, 251, 27,
+    1, 242, 215, 246, 190, 251, 27, 1, 238, 107, 246, 190, 251, 27, 1, 217,
+    138, 246, 190, 251, 27, 1, 208, 224, 246, 190, 251, 27, 1, 213, 95, 246,
+    190, 251, 27, 1, 235, 2, 246, 190, 251, 27, 1, 204, 46, 246, 190, 251,
+    27, 1, 223, 42, 246, 190, 251, 27, 1, 211, 211, 246, 190, 251, 27, 1,
+    197, 210, 246, 190, 251, 27, 1, 233, 70, 246, 190, 251, 27, 1, 235, 15,
+    246, 190, 251, 27, 1, 242, 251, 246, 190, 251, 27, 1, 210, 154, 246, 190,
+    251, 27, 1, 231, 60, 246, 190, 251, 27, 1, 208, 22, 246, 190, 251, 27, 1,
+    204, 73, 246, 190, 251, 27, 1, 196, 42, 246, 190, 251, 27, 1, 199, 56,
+    246, 190, 251, 27, 1, 203, 173, 246, 190, 251, 27, 1, 223, 75, 246, 190,
+    251, 27, 1, 238, 108, 246, 190, 251, 27, 1, 246, 183, 246, 190, 251, 27,
+    1, 193, 73, 246, 190, 251, 27, 1, 209, 238, 246, 190, 251, 27, 1, 221,
+    155, 246, 190, 251, 27, 242, 118, 77, 32, 41, 3, 251, 237, 32, 41, 3,
+    251, 236, 32, 41, 3, 251, 235, 32, 41, 3, 251, 234, 32, 41, 3, 251, 233,
+    32, 41, 3, 251, 232, 32, 41, 3, 251, 231, 32, 41, 3, 251, 230, 32, 41, 3,
+    251, 229, 32, 41, 3, 251, 228, 32, 41, 3, 251, 227, 32, 41, 3, 251, 226,
+    32, 41, 3, 251, 225, 32, 41, 3, 251, 224, 32, 41, 3, 251, 223, 32, 41, 3,
+    251, 222, 32, 41, 3, 251, 221, 32, 41, 3, 251, 220, 32, 41, 3, 251, 219,
+    32, 41, 3, 251, 218, 32, 41, 3, 251, 217, 32, 41, 3, 251, 216, 32, 41, 3,
+    251, 215, 32, 41, 3, 251, 214, 32, 41, 3, 251, 213, 32, 41, 3, 251, 212,
+    32, 41, 3, 251, 211, 32, 41, 3, 254, 247, 32, 41, 3, 251, 210, 32, 41, 3,
+    251, 209, 32, 41, 3, 251, 208, 32, 41, 3, 251, 207, 32, 41, 3, 251, 206,
+    32, 41, 3, 251, 205, 32, 41, 3, 251, 204, 32, 41, 3, 251, 203, 32, 41, 3,
+    251, 202, 32, 41, 3, 251, 201, 32, 41, 3, 251, 200, 32, 41, 3, 251, 199,
+    32, 41, 3, 251, 198, 32, 41, 3, 251, 197, 32, 41, 3, 251, 196, 32, 41, 3,
+    251, 195, 32, 41, 3, 251, 194, 32, 41, 3, 251, 193, 32, 41, 3, 251, 192,
+    32, 41, 3, 251, 191, 32, 41, 3, 251, 190, 32, 41, 3, 251, 189, 32, 41, 3,
+    251, 188, 32, 41, 3, 251, 187, 32, 41, 3, 251, 186, 32, 41, 3, 251, 185,
+    32, 41, 3, 251, 184, 32, 41, 3, 251, 183, 32, 41, 3, 251, 182, 32, 41, 3,
+    251, 181, 32, 41, 3, 251, 180, 32, 41, 3, 251, 179, 32, 41, 3, 251, 178,
+    32, 41, 3, 251, 177, 32, 41, 3, 251, 176, 32, 41, 3, 251, 175, 32, 41, 3,
+    251, 174, 32, 41, 3, 251, 173, 32, 41, 3, 251, 172, 32, 41, 3, 251, 171,
+    32, 41, 3, 251, 170, 32, 41, 3, 251, 169, 32, 41, 3, 251, 168, 32, 41, 3,
+    254, 160, 32, 41, 3, 251, 167, 32, 41, 3, 251, 166, 32, 41, 3, 254, 125,
+    32, 41, 3, 251, 165, 32, 41, 3, 251, 164, 32, 41, 3, 251, 163, 32, 41, 3,
+    251, 162, 32, 41, 3, 254, 112, 32, 41, 3, 251, 161, 32, 41, 3, 251, 160,
+    32, 41, 3, 251, 159, 32, 41, 3, 251, 158, 32, 41, 3, 251, 157, 32, 41, 3,
+    253, 184, 32, 41, 3, 253, 183, 32, 41, 3, 253, 182, 32, 41, 3, 253, 181,
+    32, 41, 3, 253, 180, 32, 41, 3, 253, 179, 32, 41, 3, 253, 178, 32, 41, 3,
+    253, 177, 32, 41, 3, 253, 175, 32, 41, 3, 253, 174, 32, 41, 3, 253, 173,
+    32, 41, 3, 253, 172, 32, 41, 3, 253, 171, 32, 41, 3, 253, 170, 32, 41, 3,
+    253, 168, 32, 41, 3, 253, 167, 32, 41, 3, 253, 166, 32, 41, 3, 253, 165,
+    32, 41, 3, 253, 164, 32, 41, 3, 253, 163, 32, 41, 3, 253, 162, 32, 41, 3,
+    253, 161, 32, 41, 3, 253, 160, 32, 41, 3, 253, 159, 32, 41, 3, 253, 158,
+    32, 41, 3, 253, 157, 32, 41, 3, 253, 156, 32, 41, 3, 253, 155, 32, 41, 3,
+    253, 154, 32, 41, 3, 253, 153, 32, 41, 3, 253, 152, 32, 41, 3, 253, 151,
+    32, 41, 3, 253, 150, 32, 41, 3, 253, 148, 32, 41, 3, 253, 147, 32, 41, 3,
+    253, 146, 32, 41, 3, 253, 142, 32, 41, 3, 253, 141, 32, 41, 3, 253, 140,
+    32, 41, 3, 253, 139, 32, 41, 3, 253, 135, 32, 41, 3, 253, 134, 32, 41, 3,
+    253, 133, 32, 41, 3, 253, 132, 32, 41, 3, 253, 131, 32, 41, 3, 253, 130,
+    32, 41, 3, 253, 129, 32, 41, 3, 253, 128, 32, 41, 3, 253, 127, 32, 41, 3,
+    253, 126, 32, 41, 3, 253, 125, 32, 41, 3, 253, 124, 32, 41, 3, 253, 123,
+    32, 41, 3, 253, 122, 32, 41, 3, 253, 121, 32, 41, 3, 253, 120, 32, 41, 3,
+    253, 119, 32, 41, 3, 253, 118, 32, 41, 3, 253, 117, 32, 41, 3, 253, 116,
+    32, 41, 3, 253, 115, 32, 41, 3, 253, 114, 32, 41, 3, 253, 113, 32, 41, 3,
+    253, 111, 32, 41, 3, 253, 110, 32, 41, 3, 253, 109, 32, 41, 3, 253, 108,
+    32, 41, 3, 253, 107, 32, 41, 3, 253, 105, 32, 41, 3, 253, 104, 32, 41, 3,
+    253, 103, 32, 41, 3, 253, 102, 32, 41, 3, 253, 100, 32, 41, 3, 253, 99,
+    32, 41, 3, 253, 98, 32, 41, 3, 253, 64, 32, 41, 3, 253, 62, 32, 41, 3,
+    253, 60, 32, 41, 3, 253, 58, 32, 41, 3, 253, 56, 32, 41, 3, 253, 54, 32,
+    41, 3, 253, 52, 32, 41, 3, 253, 50, 32, 41, 3, 253, 48, 32, 41, 3, 253,
+    46, 32, 41, 3, 253, 44, 32, 41, 3, 253, 41, 32, 41, 3, 253, 39, 32, 41,
+    3, 253, 37, 32, 41, 3, 253, 35, 32, 41, 3, 253, 33, 32, 41, 3, 253, 31,
+    32, 41, 3, 253, 29, 32, 41, 3, 253, 27, 32, 41, 3, 252, 201, 32, 41, 3,
+    252, 200, 32, 41, 3, 252, 199, 32, 41, 3, 252, 198, 32, 41, 3, 252, 197,
+    32, 41, 3, 252, 196, 32, 41, 3, 252, 194, 32, 41, 3, 252, 193, 32, 41, 3,
+    252, 192, 32, 41, 3, 252, 191, 32, 41, 3, 252, 190, 32, 41, 3, 252, 189,
+    32, 41, 3, 252, 187, 32, 41, 3, 252, 186, 32, 41, 3, 252, 182, 32, 41, 3,
+    252, 181, 32, 41, 3, 252, 179, 32, 41, 3, 252, 178, 32, 41, 3, 252, 177,
+    32, 41, 3, 252, 176, 32, 41, 3, 252, 175, 32, 41, 3, 252, 174, 32, 41, 3,
+    252, 173, 32, 41, 3, 252, 172, 32, 41, 3, 252, 171, 32, 41, 3, 252, 170,
+    32, 41, 3, 252, 169, 32, 41, 3, 252, 168, 32, 41, 3, 252, 167, 32, 41, 3,
+    252, 166, 32, 41, 3, 252, 165, 32, 41, 3, 252, 164, 32, 41, 3, 252, 163,
+    32, 41, 3, 252, 162, 32, 41, 3, 252, 161, 32, 41, 3, 252, 160, 32, 41, 3,
+    252, 159, 32, 41, 3, 252, 158, 32, 41, 3, 252, 157, 32, 41, 3, 252, 156,
+    32, 41, 3, 252, 155, 32, 41, 3, 252, 154, 32, 41, 3, 252, 153, 32, 41, 3,
+    252, 152, 32, 41, 3, 252, 151, 32, 41, 3, 252, 150, 32, 41, 3, 252, 149,
+    32, 41, 3, 252, 148, 32, 41, 3, 252, 147, 32, 41, 3, 252, 146, 32, 41, 3,
+    252, 145, 32, 41, 3, 252, 144, 32, 41, 3, 252, 143, 32, 41, 3, 252, 142,
+    32, 41, 3, 252, 141, 32, 41, 3, 252, 140, 32, 41, 3, 252, 139, 32, 41, 3,
+    252, 138, 32, 41, 3, 252, 137, 32, 41, 3, 252, 136, 32, 41, 3, 252, 135,
+    32, 41, 3, 252, 134, 32, 41, 3, 252, 133, 32, 41, 3, 252, 132, 32, 41, 3,
+    252, 131, 32, 41, 3, 252, 130, 32, 41, 3, 252, 129, 32, 41, 3, 252, 128,
+    32, 41, 3, 252, 127, 32, 41, 3, 252, 126, 32, 41, 3, 252, 125, 32, 41, 3,
+    252, 124, 32, 41, 3, 252, 123, 32, 41, 3, 252, 122, 32, 41, 3, 252, 121,
+    32, 41, 3, 252, 120, 32, 41, 3, 252, 119, 32, 41, 3, 252, 118, 32, 41, 3,
+    252, 117, 32, 41, 3, 252, 116, 32, 41, 3, 252, 115, 32, 41, 3, 252, 114,
+    32, 41, 3, 252, 113, 32, 41, 3, 252, 112, 32, 41, 3, 252, 111, 32, 41, 3,
+    252, 110, 32, 41, 3, 252, 109, 32, 41, 3, 252, 108, 32, 41, 3, 252, 107,
+    32, 41, 3, 252, 106, 32, 41, 3, 252, 105, 32, 41, 3, 252, 104, 32, 41, 3,
+    252, 103, 32, 41, 3, 252, 102, 32, 41, 3, 252, 101, 32, 41, 3, 252, 100,
+    32, 41, 3, 252, 99, 32, 41, 3, 252, 98, 32, 41, 3, 252, 97, 32, 41, 3,
+    252, 96, 32, 41, 3, 252, 95, 32, 41, 3, 252, 94, 32, 41, 3, 252, 93, 32,
+    41, 3, 252, 92, 32, 41, 3, 252, 91, 32, 41, 3, 252, 90, 32, 41, 3, 252,
+    89, 32, 41, 3, 252, 88, 32, 41, 3, 252, 87, 32, 41, 3, 252, 86, 32, 41,
+    3, 252, 85, 32, 41, 3, 252, 84, 32, 41, 3, 252, 83, 32, 41, 3, 252, 82,
+    32, 41, 3, 252, 81, 32, 41, 3, 252, 80, 32, 41, 3, 252, 79, 32, 41, 3,
+    252, 78, 32, 41, 3, 252, 77, 32, 41, 3, 252, 76, 32, 41, 3, 252, 75, 32,
+    41, 3, 252, 74, 32, 41, 3, 252, 73, 32, 41, 3, 252, 72, 32, 41, 3, 252,
+    71, 32, 41, 3, 252, 70, 32, 41, 3, 252, 69, 32, 41, 3, 252, 68, 32, 41,
+    3, 252, 67, 32, 41, 3, 252, 66, 32, 41, 3, 252, 65, 32, 41, 3, 252, 64,
+    32, 41, 3, 252, 63, 64, 32, 41, 3, 252, 62, 249, 226, 32, 41, 3, 252, 61,
+    238, 95, 32, 41, 3, 252, 60, 71, 32, 41, 3, 252, 59, 233, 163, 32, 41, 3,
+    252, 58, 230, 124, 32, 41, 3, 252, 57, 223, 65, 32, 41, 3, 252, 56, 222,
+    184, 32, 41, 3, 252, 55, 165, 32, 41, 3, 252, 54, 220, 189, 32, 41, 3,
+    252, 53, 220, 188, 32, 41, 3, 252, 52, 220, 187, 32, 41, 3, 252, 51, 220,
+    186, 32, 41, 3, 252, 50, 194, 202, 32, 41, 3, 252, 49, 193, 223, 32, 41,
+    3, 252, 48, 193, 148, 32, 41, 3, 252, 47, 211, 216, 32, 41, 3, 252, 46,
+    251, 152, 32, 41, 3, 252, 45, 248, 160, 32, 41, 3, 252, 44, 237, 163, 32,
+    41, 3, 252, 43, 233, 171, 32, 41, 3, 252, 42, 223, 41, 32, 41, 3, 252,
+    41, 32, 41, 3, 252, 40, 32, 41, 3, 252, 39, 32, 41, 3, 252, 38, 32, 41,
+    3, 252, 37, 32, 41, 3, 252, 36, 32, 41, 3, 252, 35, 32, 41, 3, 252, 34,
+    238, 102, 5, 64, 238, 102, 5, 71, 238, 102, 5, 70, 238, 102, 5, 74, 238,
+    102, 5, 68, 238, 102, 5, 223, 62, 238, 102, 5, 222, 233, 238, 102, 5,
+    160, 238, 102, 5, 222, 57, 238, 102, 5, 221, 204, 238, 102, 5, 221, 113,
+    238, 102, 5, 221, 33, 238, 102, 5, 177, 238, 102, 5, 220, 42, 238, 102,
+    5, 219, 209, 238, 102, 5, 219, 107, 238, 102, 5, 219, 36, 238, 102, 5,
+    172, 238, 102, 5, 217, 48, 238, 102, 5, 216, 175, 238, 102, 5, 216, 91,
+    238, 102, 5, 215, 241, 238, 102, 5, 181, 238, 102, 5, 214, 214, 238, 102,
+    5, 214, 60, 238, 102, 5, 213, 142, 238, 102, 5, 213, 22, 238, 102, 5,
+    166, 238, 102, 5, 210, 181, 238, 102, 5, 210, 51, 238, 102, 5, 209, 198,
+    238, 102, 5, 209, 51, 238, 102, 5, 167, 238, 102, 5, 208, 7, 238, 102, 5,
+    207, 151, 238, 102, 5, 207, 55, 238, 102, 5, 206, 218, 238, 102, 5, 188,
+    238, 102, 5, 205, 223, 238, 102, 5, 203, 125, 238, 102, 5, 202, 212, 238,
+    102, 5, 201, 184, 238, 102, 5, 189, 238, 102, 5, 200, 79, 238, 102, 5,
+    199, 128, 238, 102, 5, 155, 238, 102, 5, 198, 45, 238, 102, 5, 194, 169,
+    238, 102, 5, 194, 111, 238, 102, 5, 194, 72, 238, 102, 5, 194, 36, 238,
+    102, 5, 193, 209, 238, 102, 5, 193, 203, 238, 102, 5, 192, 112, 238, 102,
+    5, 192, 8, 223, 192, 250, 116, 1, 251, 24, 223, 192, 250, 116, 1, 248,
+    62, 223, 192, 250, 116, 1, 231, 31, 223, 192, 250, 116, 1, 237, 220, 223,
+    192, 250, 116, 1, 229, 255, 223, 192, 250, 116, 1, 194, 119, 223, 192,
+    250, 116, 1, 192, 89, 223, 192, 250, 116, 1, 229, 194, 223, 192, 250,
+    116, 1, 200, 4, 223, 192, 250, 116, 1, 192, 238, 223, 192, 250, 116, 1,
+    222, 109, 223, 192, 250, 116, 1, 220, 85, 223, 192, 250, 116, 1, 217, 12,
+    223, 192, 250, 116, 1, 212, 230, 223, 192, 250, 116, 1, 206, 46, 223,
+    192, 250, 116, 1, 249, 231, 223, 192, 250, 116, 1, 210, 181, 223, 192,
+    250, 116, 1, 206, 83, 223, 192, 250, 116, 1, 208, 181, 223, 192, 250,
+    116, 1, 207, 188, 223, 192, 250, 116, 1, 203, 224, 223, 192, 250, 116, 1,
+    200, 93, 223, 192, 250, 116, 205, 209, 57, 223, 192, 250, 116, 31, 101,
+    223, 192, 250, 116, 31, 104, 223, 192, 250, 116, 31, 133, 223, 192, 250,
+    116, 31, 200, 30, 223, 192, 250, 116, 31, 197, 239, 223, 192, 250, 116,
+    31, 90, 228, 162, 223, 192, 250, 116, 31, 90, 180, 223, 192, 250, 116,
+    31, 200, 31, 180, 211, 38, 1, 251, 24, 211, 38, 1, 248, 62, 211, 38, 1,
+    231, 31, 211, 38, 1, 237, 220, 211, 38, 1, 229, 255, 211, 38, 1, 194,
+    119, 211, 38, 1, 192, 89, 211, 38, 1, 229, 194, 211, 38, 1, 200, 4, 211,
+    38, 1, 192, 238, 211, 38, 1, 222, 109, 211, 38, 1, 220, 85, 211, 38, 1,
+    217, 12, 211, 38, 1, 52, 212, 230, 211, 38, 1, 212, 230, 211, 38, 1, 206,
+    46, 211, 38, 1, 249, 231, 211, 38, 1, 210, 181, 211, 38, 1, 206, 83, 211,
+    38, 1, 208, 181, 211, 38, 1, 207, 188, 211, 38, 1, 203, 224, 211, 38, 1,
+    200, 93, 211, 38, 220, 23, 232, 190, 211, 38, 207, 96, 232, 190, 211, 38,
+    31, 101, 211, 38, 31, 104, 211, 38, 31, 133, 211, 38, 31, 134, 211, 38,
+    31, 151, 211, 38, 31, 200, 30, 211, 38, 31, 197, 239, 215, 80, 1, 52,
+    251, 24, 215, 80, 1, 251, 24, 215, 80, 1, 52, 248, 62, 215, 80, 1, 248,
+    62, 215, 80, 1, 231, 31, 215, 80, 1, 237, 220, 215, 80, 1, 52, 229, 255,
+    215, 80, 1, 229, 255, 215, 80, 1, 194, 119, 215, 80, 1, 192, 89, 215, 80,
+    1, 229, 194, 215, 80, 1, 200, 4, 215, 80, 1, 52, 192, 238, 215, 80, 1,
+    192, 238, 215, 80, 1, 52, 222, 109, 215, 80, 1, 222, 109, 215, 80, 1, 52,
+    220, 85, 215, 80, 1, 220, 85, 215, 80, 1, 52, 217, 12, 215, 80, 1, 217,
+    12, 215, 80, 1, 52, 212, 230, 215, 80, 1, 212, 230, 215, 80, 1, 206, 46,
+    215, 80, 1, 249, 231, 215, 80, 1, 210, 181, 215, 80, 1, 206, 83, 215, 80,
+    1, 208, 181, 215, 80, 1, 207, 188, 215, 80, 1, 52, 203, 224, 215, 80, 1,
+    203, 224, 215, 80, 1, 200, 93, 215, 80, 31, 101, 215, 80, 31, 104, 215,
+    80, 31, 133, 215, 80, 31, 134, 215, 80, 238, 168, 31, 134, 215, 80, 31,
+    151, 215, 80, 31, 200, 30, 215, 80, 31, 197, 239, 215, 80, 31, 90, 228,
+    162, 230, 13, 1, 251, 24, 230, 13, 1, 248, 62, 230, 13, 1, 231, 31, 230,
+    13, 1, 237, 219, 230, 13, 1, 229, 255, 230, 13, 1, 194, 119, 230, 13, 1,
+    192, 87, 230, 13, 1, 229, 194, 230, 13, 1, 200, 4, 230, 13, 1, 192, 238,
+    230, 13, 1, 222, 109, 230, 13, 1, 220, 85, 230, 13, 1, 217, 12, 230, 13,
+    1, 212, 230, 230, 13, 1, 206, 46, 230, 13, 1, 249, 229, 230, 13, 1, 210,
+    181, 230, 13, 1, 206, 83, 230, 13, 1, 208, 181, 230, 13, 1, 203, 224,
+    230, 13, 1, 200, 93, 230, 13, 31, 101, 230, 13, 31, 151, 230, 13, 31,
+    200, 30, 230, 13, 31, 197, 239, 230, 13, 31, 90, 228, 162, 210, 63, 1,
+    251, 21, 210, 63, 1, 248, 65, 210, 63, 1, 231, 206, 210, 63, 1, 237, 78,
+    210, 63, 1, 229, 255, 210, 63, 1, 194, 126, 210, 63, 1, 192, 105, 210,
+    63, 1, 229, 196, 210, 63, 1, 200, 8, 210, 63, 1, 192, 239, 210, 63, 1,
+    222, 139, 210, 63, 1, 220, 91, 210, 63, 1, 217, 12, 210, 63, 1, 212, 230,
+    210, 63, 1, 204, 174, 210, 63, 1, 251, 57, 210, 63, 1, 210, 181, 210, 63,
+    1, 206, 85, 210, 63, 1, 208, 186, 210, 63, 1, 207, 18, 210, 63, 1, 203,
+    224, 210, 63, 1, 200, 100, 210, 63, 31, 101, 210, 63, 31, 200, 30, 210,
+    63, 31, 197, 239, 210, 63, 31, 90, 228, 162, 210, 63, 31, 104, 210, 63,
+    31, 133, 210, 63, 194, 11, 204, 165, 218, 248, 1, 64, 218, 248, 1, 249,
+    226, 218, 248, 1, 232, 44, 218, 248, 1, 238, 95, 218, 248, 1, 71, 218,
+    248, 1, 196, 236, 218, 248, 1, 70, 218, 248, 1, 193, 148, 218, 248, 1,
+    222, 184, 218, 248, 1, 165, 218, 248, 1, 218, 236, 218, 248, 1, 215, 151,
+    218, 248, 1, 74, 218, 248, 1, 150, 218, 248, 1, 202, 95, 218, 248, 1,
+    200, 228, 218, 248, 1, 68, 218, 248, 1, 233, 163, 218, 248, 1, 208, 247,
+    218, 248, 1, 206, 158, 218, 248, 1, 198, 86, 218, 248, 1, 250, 224, 218,
+    248, 1, 234, 88, 218, 248, 1, 218, 251, 218, 248, 1, 213, 179, 218, 248,
+    1, 247, 52, 218, 248, 198, 182, 77, 147, 229, 164, 1, 64, 147, 229, 164,
+    1, 71, 147, 229, 164, 1, 70, 147, 229, 164, 1, 74, 147, 229, 164, 1, 168,
+    147, 229, 164, 1, 194, 169, 147, 229, 164, 1, 249, 3, 147, 229, 164, 1,
+    249, 2, 147, 229, 164, 1, 166, 147, 229, 164, 1, 172, 147, 229, 164, 1,
+    181, 147, 229, 164, 1, 215, 95, 147, 229, 164, 1, 214, 214, 147, 229,
+    164, 1, 214, 212, 147, 229, 164, 1, 167, 147, 229, 164, 1, 208, 74, 147,
+    229, 164, 1, 177, 147, 229, 164, 1, 221, 250, 147, 229, 164, 1, 229, 187,
+    147, 229, 164, 1, 188, 147, 229, 164, 1, 206, 99, 147, 229, 164, 1, 205,
+    223, 147, 229, 164, 1, 160, 147, 229, 164, 1, 208, 239, 147, 229, 164, 1,
+    189, 147, 229, 164, 1, 200, 179, 147, 229, 164, 1, 200, 79, 147, 229,
+    164, 1, 200, 77, 147, 229, 164, 1, 155, 147, 229, 164, 1, 238, 0, 147,
+    229, 164, 16, 196, 33, 147, 229, 164, 16, 196, 32, 147, 238, 133, 1, 64,
+    147, 238, 133, 1, 71, 147, 238, 133, 1, 70, 147, 238, 133, 1, 74, 147,
+    238, 133, 1, 168, 147, 238, 133, 1, 194, 169, 147, 238, 133, 1, 249, 3,
+    147, 238, 133, 1, 166, 147, 238, 133, 1, 172, 147, 238, 133, 1, 181, 147,
+    238, 133, 1, 214, 214, 147, 238, 133, 1, 167, 147, 238, 133, 1, 177, 147,
+    238, 133, 1, 221, 250, 147, 238, 133, 1, 229, 187, 147, 238, 133, 1, 188,
+    147, 238, 133, 1, 250, 112, 188, 147, 238, 133, 1, 205, 223, 147, 238,
+    133, 1, 160, 147, 238, 133, 1, 208, 239, 147, 238, 133, 1, 189, 147, 238,
+    133, 1, 200, 79, 147, 238, 133, 1, 155, 147, 238, 133, 1, 238, 0, 147,
+    238, 133, 232, 109, 234, 112, 197, 246, 147, 238, 133, 232, 109, 90, 230,
+    78, 147, 238, 133, 219, 92, 207, 61, 147, 238, 133, 219, 92, 223, 197,
+    147, 238, 133, 31, 101, 147, 238, 133, 31, 104, 147, 238, 133, 31, 133,
+    147, 238, 133, 31, 134, 147, 238, 133, 31, 151, 147, 238, 133, 31, 170,
+    147, 238, 133, 31, 179, 147, 238, 133, 31, 174, 147, 238, 133, 31, 182,
+    147, 238, 133, 31, 200, 30, 147, 238, 133, 31, 197, 239, 147, 238, 133,
+    31, 199, 184, 147, 238, 133, 31, 232, 126, 147, 238, 133, 31, 233, 3,
+    147, 238, 133, 31, 203, 25, 147, 238, 133, 31, 204, 140, 147, 238, 133,
+    31, 90, 228, 162, 147, 238, 133, 31, 103, 228, 162, 147, 238, 133, 31,
+    112, 228, 162, 147, 238, 133, 31, 232, 119, 228, 162, 147, 238, 133, 31,
+    232, 214, 228, 162, 147, 238, 133, 31, 203, 41, 228, 162, 147, 238, 133,
+    31, 204, 146, 228, 162, 147, 238, 133, 31, 234, 148, 228, 162, 147, 238,
+    133, 31, 214, 16, 228, 162, 147, 238, 133, 31, 90, 180, 147, 238, 133,
+    31, 103, 180, 147, 238, 133, 31, 112, 180, 147, 238, 133, 31, 232, 119,
+    180, 147, 238, 133, 31, 232, 214, 180, 147, 238, 133, 31, 203, 41, 180,
+    147, 238, 133, 31, 204, 146, 180, 147, 238, 133, 31, 234, 148, 180, 147,
+    238, 133, 31, 214, 16, 180, 147, 238, 133, 31, 200, 31, 180, 147, 238,
+    133, 31, 197, 240, 180, 147, 238, 133, 31, 199, 185, 180, 147, 238, 133,
+    31, 232, 127, 180, 147, 238, 133, 31, 233, 4, 180, 147, 238, 133, 31,
+    203, 26, 180, 147, 238, 133, 31, 204, 141, 180, 147, 238, 133, 31, 234,
+    138, 180, 147, 238, 133, 31, 214, 12, 180, 147, 238, 133, 31, 90, 228,
+    163, 180, 147, 238, 133, 31, 103, 228, 163, 180, 147, 238, 133, 31, 112,
+    228, 163, 180, 147, 238, 133, 31, 232, 119, 228, 163, 180, 147, 238, 133,
+    31, 232, 214, 228, 163, 180, 147, 238, 133, 31, 203, 41, 228, 163, 180,
+    147, 238, 133, 31, 204, 146, 228, 163, 180, 147, 238, 133, 31, 234, 148,
+    228, 163, 180, 147, 238, 133, 31, 214, 16, 228, 163, 180, 147, 238, 133,
+    232, 109, 90, 197, 247, 147, 238, 133, 232, 109, 103, 197, 246, 147, 238,
+    133, 232, 109, 112, 197, 246, 147, 238, 133, 232, 109, 232, 119, 197,
+    246, 147, 238, 133, 232, 109, 232, 214, 197, 246, 147, 238, 133, 232,
+    109, 203, 41, 197, 246, 147, 238, 133, 232, 109, 204, 146, 197, 246, 147,
+    238, 133, 232, 109, 234, 148, 197, 246, 147, 238, 133, 232, 109, 214, 16,
+    197, 246, 147, 238, 133, 232, 109, 200, 31, 197, 246, 221, 236, 1, 64,
+    221, 236, 18, 3, 70, 221, 236, 18, 3, 68, 221, 236, 18, 3, 118, 150, 221,
+    236, 18, 3, 71, 221, 236, 18, 3, 74, 221, 236, 18, 220, 2, 77, 221, 236,
+    3, 55, 207, 82, 63, 221, 236, 3, 250, 168, 221, 236, 3, 196, 6, 221, 236,
+    1, 160, 221, 236, 1, 221, 250, 221, 236, 1, 231, 233, 221, 236, 1, 231,
+    84, 221, 236, 1, 247, 19, 221, 236, 1, 246, 117, 221, 236, 1, 223, 62,
+    221, 236, 1, 212, 201, 221, 236, 1, 198, 83, 221, 236, 1, 198, 71, 221,
+    236, 1, 237, 161, 221, 236, 1, 237, 145, 221, 236, 1, 213, 178, 221, 236,
+    1, 189, 221, 236, 1, 199, 240, 221, 236, 1, 238, 0, 221, 236, 1, 237, 40,
+    221, 236, 1, 181, 221, 236, 1, 166, 221, 236, 1, 210, 94, 221, 236, 1,
+    249, 3, 221, 236, 1, 248, 54, 221, 236, 1, 172, 221, 236, 1, 168, 221,
+    236, 1, 167, 221, 236, 1, 177, 221, 236, 1, 196, 157, 221, 236, 1, 204,
+    64, 221, 236, 1, 202, 92, 221, 236, 1, 188, 221, 236, 1, 192, 112, 221,
+    236, 1, 144, 221, 236, 1, 221, 139, 221, 236, 1, 198, 51, 221, 236, 1,
+    198, 52, 221, 236, 1, 196, 40, 221, 236, 3, 248, 194, 58, 221, 236, 3,
+    246, 189, 221, 236, 3, 78, 63, 221, 236, 196, 11, 221, 236, 17, 101, 221,
+    236, 17, 104, 221, 236, 17, 133, 221, 236, 17, 134, 221, 236, 31, 200,
+    30, 221, 236, 31, 197, 239, 221, 236, 31, 90, 228, 162, 221, 236, 31, 90,
+    180, 221, 236, 232, 109, 90, 230, 78, 221, 236, 209, 38, 236, 114, 221,
+    236, 209, 38, 2, 242, 130, 221, 236, 209, 38, 242, 130, 221, 236, 209,
+    38, 238, 194, 161, 221, 236, 209, 38, 217, 153, 221, 236, 209, 38, 219,
+    57, 221, 236, 209, 38, 237, 208, 221, 236, 209, 38, 55, 237, 208, 221,
+    236, 209, 38, 219, 169, 40, 202, 171, 250, 127, 1, 229, 255, 40, 202,
+    171, 250, 127, 1, 220, 85, 40, 202, 171, 250, 127, 1, 229, 194, 40, 202,
+    171, 250, 127, 1, 217, 12, 40, 202, 171, 250, 127, 1, 208, 181, 40, 202,
+    171, 250, 127, 1, 194, 119, 40, 202, 171, 250, 127, 1, 203, 224, 40, 202,
+    171, 250, 127, 1, 207, 188, 40, 202, 171, 250, 127, 1, 248, 62, 40, 202,
+    171, 250, 127, 1, 200, 93, 40, 202, 171, 250, 127, 1, 206, 20, 40, 202,
+    171, 250, 127, 1, 222, 109, 40, 202, 171, 250, 127, 1, 212, 230, 40, 202,
+    171, 250, 127, 1, 221, 231, 40, 202, 171, 250, 127, 1, 206, 83, 40, 202,
+    171, 250, 127, 1, 206, 46, 40, 202, 171, 250, 127, 1, 233, 47, 40, 202,
+    171, 250, 127, 1, 251, 26, 40, 202, 171, 250, 127, 1, 249, 229, 40, 202,
+    171, 250, 127, 1, 237, 37, 40, 202, 171, 250, 127, 1, 231, 31, 40, 202,
+    171, 250, 127, 1, 237, 220, 40, 202, 171, 250, 127, 1, 231, 72, 40, 202,
+    171, 250, 127, 1, 200, 4, 40, 202, 171, 250, 127, 1, 192, 87, 40, 202,
+    171, 250, 127, 1, 237, 34, 40, 202, 171, 250, 127, 1, 192, 238, 40, 202,
+    171, 250, 127, 1, 199, 226, 40, 202, 171, 250, 127, 1, 199, 205, 40, 202,
+    171, 250, 127, 31, 101, 40, 202, 171, 250, 127, 31, 233, 3, 40, 202, 171,
+    250, 127, 162, 223, 172, 40, 178, 250, 127, 1, 229, 220, 40, 178, 250,
+    127, 1, 220, 94, 40, 178, 250, 127, 1, 230, 89, 40, 178, 250, 127, 1,
+    217, 26, 40, 178, 250, 127, 1, 208, 232, 40, 178, 250, 127, 1, 194, 119,
+    40, 178, 250, 127, 1, 234, 7, 40, 178, 250, 127, 1, 207, 221, 40, 178,
+    250, 127, 1, 248, 96, 40, 178, 250, 127, 1, 200, 49, 40, 178, 250, 127,
+    1, 234, 8, 40, 178, 250, 127, 1, 222, 139, 40, 178, 250, 127, 1, 213,
+    123, 40, 178, 250, 127, 1, 221, 245, 40, 178, 250, 127, 1, 206, 86, 40,
+    178, 250, 127, 1, 234, 6, 40, 178, 250, 127, 1, 233, 34, 40, 178, 250,
+    127, 1, 251, 26, 40, 178, 250, 127, 1, 251, 57, 40, 178, 250, 127, 1,
+    237, 250, 40, 178, 250, 127, 1, 231, 149, 40, 178, 250, 127, 1, 237, 227,
+    40, 178, 250, 127, 1, 231, 79, 40, 178, 250, 127, 1, 200, 151, 40, 178,
+    250, 127, 1, 192, 103, 40, 178, 250, 127, 1, 199, 232, 40, 178, 250, 127,
+    1, 193, 64, 40, 178, 250, 127, 1, 199, 220, 40, 178, 250, 127, 1, 192,
+    106, 40, 178, 250, 127, 31, 101, 40, 178, 250, 127, 31, 200, 30, 40, 178,
+    250, 127, 31, 197, 239, 217, 151, 1, 251, 24, 217, 151, 1, 248, 62, 217,
+    151, 1, 248, 47, 217, 151, 1, 231, 31, 217, 151, 1, 231, 57, 217, 151, 1,
+    237, 220, 217, 151, 1, 229, 255, 217, 151, 1, 194, 119, 217, 151, 3, 197,
+    109, 217, 151, 1, 192, 89, 217, 151, 1, 192, 64, 217, 151, 1, 223, 43,
+    217, 151, 1, 223, 24, 217, 151, 1, 229, 194, 217, 151, 1, 200, 4, 217,
+    151, 1, 192, 238, 217, 151, 1, 222, 109, 217, 151, 1, 193, 206, 217, 151,
+    1, 221, 238, 217, 151, 1, 220, 85, 217, 151, 1, 237, 33, 217, 151, 1,
+    199, 231, 217, 151, 1, 217, 12, 217, 151, 1, 212, 230, 217, 151, 1, 206,
+    46, 217, 151, 1, 249, 231, 217, 151, 1, 251, 241, 217, 151, 1, 210, 181,
+    217, 151, 1, 233, 47, 217, 151, 1, 206, 83, 217, 151, 1, 208, 181, 217,
+    151, 1, 193, 182, 217, 151, 1, 208, 208, 217, 151, 1, 207, 188, 217, 151,
+    1, 203, 224, 217, 151, 1, 202, 60, 217, 151, 1, 200, 93, 217, 151, 251,
+    151, 122, 58, 217, 151, 251, 151, 122, 63, 217, 151, 31, 101, 217, 151,
+    31, 151, 217, 151, 31, 200, 30, 217, 151, 31, 197, 239, 217, 151, 31, 90,
+    228, 162, 217, 151, 209, 38, 202, 19, 217, 151, 209, 38, 232, 190, 217,
+    151, 209, 38, 55, 78, 194, 41, 236, 114, 217, 151, 209, 38, 78, 194, 41,
+    236, 114, 217, 151, 209, 38, 236, 114, 217, 151, 209, 38, 103, 236, 111,
+    217, 151, 209, 38, 219, 176, 232, 247, 249, 243, 1, 64, 249, 243, 1, 252,
+    33, 249, 243, 1, 250, 166, 249, 243, 1, 251, 247, 249, 243, 1, 250, 224,
+    249, 243, 1, 251, 249, 249, 243, 1, 251, 108, 249, 243, 1, 251, 104, 249,
+    243, 1, 71, 249, 243, 1, 234, 171, 249, 243, 1, 74, 249, 243, 1, 211,
+    194, 249, 243, 1, 70, 249, 243, 1, 223, 224, 249, 243, 1, 68, 249, 243,
+    1, 196, 251, 249, 243, 1, 222, 57, 249, 243, 1, 193, 203, 249, 243, 1,
+    193, 162, 249, 243, 1, 193, 173, 249, 243, 1, 231, 158, 249, 243, 1, 231,
+    115, 249, 243, 1, 231, 70, 249, 243, 1, 246, 158, 249, 243, 1, 223, 41,
+    249, 243, 1, 200, 79, 249, 243, 1, 199, 224, 249, 243, 1, 237, 116, 249,
+    243, 1, 237, 31, 249, 243, 1, 198, 78, 249, 243, 1, 210, 181, 249, 243,
+    1, 233, 47, 249, 243, 1, 248, 123, 249, 243, 1, 248, 49, 249, 243, 1,
+    214, 152, 249, 243, 1, 214, 67, 249, 243, 1, 214, 68, 249, 243, 1, 214,
+    214, 249, 243, 1, 212, 190, 249, 243, 1, 213, 173, 249, 243, 1, 217, 48,
+    249, 243, 1, 229, 93, 249, 243, 1, 192, 162, 249, 243, 1, 193, 69, 249,
+    243, 1, 196, 123, 249, 243, 1, 208, 7, 249, 243, 1, 220, 42, 249, 243, 1,
+    205, 223, 249, 243, 1, 192, 85, 249, 243, 1, 204, 12, 249, 243, 1, 192,
+    62, 249, 243, 1, 203, 132, 249, 243, 1, 202, 61, 249, 243, 1, 229, 255,
+    249, 243, 251, 151, 77, 199, 76, 103, 236, 112, 136, 90, 78, 209, 37, 2,
+    103, 236, 112, 136, 90, 78, 209, 37, 220, 73, 103, 236, 112, 136, 90, 78,
+    209, 37, 220, 73, 90, 78, 136, 103, 236, 112, 209, 37, 220, 73, 103, 207,
+    78, 136, 90, 207, 82, 209, 37, 220, 73, 90, 207, 82, 136, 103, 207, 78,
+    209, 37, 223, 150, 210, 223, 1, 251, 24, 223, 150, 210, 223, 1, 248, 62,
+    223, 150, 210, 223, 1, 231, 31, 223, 150, 210, 223, 1, 237, 220, 223,
+    150, 210, 223, 1, 229, 255, 223, 150, 210, 223, 1, 194, 119, 223, 150,
+    210, 223, 1, 192, 89, 223, 150, 210, 223, 1, 229, 194, 223, 150, 210,
+    223, 1, 200, 4, 223, 150, 210, 223, 1, 192, 238, 223, 150, 210, 223, 1,
+    222, 109, 223, 150, 210, 223, 1, 220, 85, 223, 150, 210, 223, 1, 217, 12,
+    223, 150, 210, 223, 1, 212, 230, 223, 150, 210, 223, 1, 206, 46, 223,
+    150, 210, 223, 1, 249, 231, 223, 150, 210, 223, 1, 210, 181, 223, 150,
+    210, 223, 1, 206, 83, 223, 150, 210, 223, 1, 208, 181, 223, 150, 210,
+    223, 1, 207, 188, 223, 150, 210, 223, 1, 203, 224, 223, 150, 210, 223, 1,
+    200, 93, 223, 150, 210, 223, 31, 101, 223, 150, 210, 223, 31, 104, 223,
+    150, 210, 223, 31, 133, 223, 150, 210, 223, 31, 134, 223, 150, 210, 223,
+    31, 200, 30, 223, 150, 210, 223, 31, 197, 239, 223, 150, 210, 223, 31,
+    90, 228, 162, 223, 150, 210, 223, 31, 90, 180, 223, 150, 211, 56, 1, 251,
+    24, 223, 150, 211, 56, 1, 248, 62, 223, 150, 211, 56, 1, 231, 31, 223,
+    150, 211, 56, 1, 237, 220, 223, 150, 211, 56, 1, 229, 255, 223, 150, 211,
+    56, 1, 194, 118, 223, 150, 211, 56, 1, 192, 89, 223, 150, 211, 56, 1,
+    229, 194, 223, 150, 211, 56, 1, 200, 4, 223, 150, 211, 56, 1, 192, 238,
+    223, 150, 211, 56, 1, 222, 109, 223, 150, 211, 56, 1, 220, 85, 223, 150,
+    211, 56, 1, 217, 11, 223, 150, 211, 56, 1, 212, 230, 223, 150, 211, 56,
+    1, 206, 46, 223, 150, 211, 56, 1, 210, 181, 223, 150, 211, 56, 1, 206,
+    83, 223, 150, 211, 56, 1, 203, 224, 223, 150, 211, 56, 1, 200, 93, 223,
+    150, 211, 56, 31, 101, 223, 150, 211, 56, 31, 104, 223, 150, 211, 56, 31,
+    133, 223, 150, 211, 56, 31, 134, 223, 150, 211, 56, 31, 200, 30, 223,
+    150, 211, 56, 31, 197, 239, 223, 150, 211, 56, 31, 90, 228, 162, 223,
+    150, 211, 56, 31, 90, 180, 209, 63, 211, 56, 1, 251, 24, 209, 63, 211,
+    56, 1, 248, 62, 209, 63, 211, 56, 1, 231, 31, 209, 63, 211, 56, 1, 237,
+    220, 209, 63, 211, 56, 1, 229, 255, 209, 63, 211, 56, 1, 194, 118, 209,
+    63, 211, 56, 1, 192, 89, 209, 63, 211, 56, 1, 229, 194, 209, 63, 211, 56,
+    1, 192, 238, 209, 63, 211, 56, 1, 222, 109, 209, 63, 211, 56, 1, 220, 85,
+    209, 63, 211, 56, 1, 217, 11, 209, 63, 211, 56, 1, 212, 230, 209, 63,
+    211, 56, 1, 206, 46, 209, 63, 211, 56, 1, 210, 181, 209, 63, 211, 56, 1,
+    206, 83, 209, 63, 211, 56, 1, 203, 224, 209, 63, 211, 56, 1, 200, 93,
+    209, 63, 211, 56, 205, 209, 77, 209, 63, 211, 56, 163, 205, 209, 77, 209,
+    63, 211, 56, 232, 119, 236, 112, 4, 238, 183, 209, 63, 211, 56, 232, 119,
+    236, 112, 4, 236, 114, 209, 63, 211, 56, 31, 101, 209, 63, 211, 56, 31,
+    104, 209, 63, 211, 56, 31, 133, 209, 63, 211, 56, 31, 134, 209, 63, 211,
+    56, 31, 200, 30, 209, 63, 211, 56, 31, 197, 239, 209, 63, 211, 56, 31,
+    90, 228, 162, 40, 198, 12, 1, 211, 152, 64, 40, 198, 12, 1, 193, 57, 64,
+    40, 198, 12, 1, 193, 57, 251, 108, 40, 198, 12, 1, 211, 152, 70, 40, 198,
+    12, 1, 193, 57, 70, 40, 198, 12, 1, 193, 57, 71, 40, 198, 12, 1, 211,
+    152, 74, 40, 198, 12, 1, 211, 152, 212, 0, 40, 198, 12, 1, 193, 57, 212,
+    0, 40, 198, 12, 1, 211, 152, 251, 238, 40, 198, 12, 1, 193, 57, 251, 238,
+    40, 198, 12, 1, 211, 152, 251, 107, 40, 198, 12, 1, 193, 57, 251, 107,
+    40, 198, 12, 1, 211, 152, 251, 80, 40, 198, 12, 1, 193, 57, 251, 80, 40,
+    198, 12, 1, 211, 152, 251, 102, 40, 198, 12, 1, 193, 57, 251, 102, 40,
+    198, 12, 1, 211, 152, 251, 125, 40, 198, 12, 1, 193, 57, 251, 125, 40,
+    198, 12, 1, 211, 152, 251, 106, 40, 198, 12, 1, 211, 152, 233, 170, 40,
+    198, 12, 1, 193, 57, 233, 170, 40, 198, 12, 1, 211, 152, 249, 236, 40,
+    198, 12, 1, 193, 57, 249, 236, 40, 198, 12, 1, 211, 152, 251, 89, 40,
+    198, 12, 1, 193, 57, 251, 89, 40, 198, 12, 1, 211, 152, 251, 100, 40,
+    198, 12, 1, 193, 57, 251, 100, 40, 198, 12, 1, 211, 152, 211, 254, 40,
+    198, 12, 1, 193, 57, 211, 254, 40, 198, 12, 1, 211, 152, 251, 35, 40,
+    198, 12, 1, 193, 57, 251, 35, 40, 198, 12, 1, 211, 152, 251, 99, 40, 198,
+    12, 1, 211, 152, 234, 103, 40, 198, 12, 1, 211, 152, 234, 99, 40, 198,
+    12, 1, 211, 152, 250, 224, 40, 198, 12, 1, 211, 152, 251, 97, 40, 198,
+    12, 1, 193, 57, 251, 97, 40, 198, 12, 1, 211, 152, 234, 65, 40, 198, 12,
+    1, 193, 57, 234, 65, 40, 198, 12, 1, 211, 152, 234, 85, 40, 198, 12, 1,
+    193, 57, 234, 85, 40, 198, 12, 1, 211, 152, 234, 51, 40, 198, 12, 1, 193,
+    57, 234, 51, 40, 198, 12, 1, 193, 57, 250, 214, 40, 198, 12, 1, 211, 152,
+    234, 73, 40, 198, 12, 1, 193, 57, 251, 96, 40, 198, 12, 1, 211, 152, 234,
+    41, 40, 198, 12, 1, 211, 152, 211, 185, 40, 198, 12, 1, 211, 152, 228,
+    51, 40, 198, 12, 1, 211, 152, 234, 179, 40, 198, 12, 1, 193, 57, 234,
+    179, 40, 198, 12, 1, 211, 152, 250, 135, 40, 198, 12, 1, 193, 57, 250,
+    135, 40, 198, 12, 1, 211, 152, 223, 107, 40, 198, 12, 1, 193, 57, 223,
+    107, 40, 198, 12, 1, 211, 152, 211, 165, 40, 198, 12, 1, 193, 57, 211,
+    165, 40, 198, 12, 1, 211, 152, 250, 131, 40, 198, 12, 1, 193, 57, 250,
+    131, 40, 198, 12, 1, 211, 152, 251, 95, 40, 198, 12, 1, 211, 152, 250,
+    61, 40, 198, 12, 1, 211, 152, 251, 93, 40, 198, 12, 1, 211, 152, 250, 53,
+    40, 198, 12, 1, 193, 57, 250, 53, 40, 198, 12, 1, 211, 152, 233, 255, 40,
+    198, 12, 1, 193, 57, 233, 255, 40, 198, 12, 1, 211, 152, 250, 26, 40,
+    198, 12, 1, 193, 57, 250, 26, 40, 198, 12, 1, 211, 152, 251, 90, 40, 198,
+    12, 1, 193, 57, 251, 90, 40, 198, 12, 1, 211, 152, 211, 140, 40, 198, 12,
+    1, 211, 152, 248, 177, 40, 169, 6, 1, 64, 40, 169, 6, 1, 252, 33, 40,
+    169, 6, 1, 234, 181, 40, 169, 6, 1, 250, 236, 40, 169, 6, 1, 234, 179,
+    40, 169, 6, 1, 234, 85, 40, 169, 6, 1, 234, 176, 40, 169, 6, 1, 234, 175,
+    40, 169, 6, 1, 250, 217, 40, 169, 6, 1, 71, 40, 169, 6, 1, 242, 85, 71,
+    40, 169, 6, 1, 234, 171, 40, 169, 6, 1, 234, 164, 40, 169, 6, 1, 234,
+    163, 40, 169, 6, 1, 234, 160, 40, 169, 6, 1, 234, 157, 40, 169, 6, 1, 70,
+    40, 169, 6, 1, 223, 224, 40, 169, 6, 1, 234, 134, 40, 169, 6, 1, 234,
+    131, 40, 169, 6, 1, 251, 44, 40, 169, 6, 1, 197, 50, 40, 169, 6, 1, 234,
+    124, 40, 169, 6, 1, 234, 102, 40, 169, 6, 1, 234, 99, 40, 169, 6, 1, 234,
+    88, 40, 169, 6, 1, 234, 51, 40, 169, 6, 1, 74, 40, 169, 6, 1, 211, 194,
+    40, 169, 6, 1, 214, 23, 212, 0, 40, 169, 6, 1, 206, 208, 212, 0, 40, 169,
+    6, 1, 211, 255, 40, 169, 6, 1, 234, 41, 40, 169, 6, 1, 234, 93, 40, 169,
+    6, 1, 234, 21, 40, 169, 6, 1, 203, 195, 234, 21, 40, 169, 6, 1, 234, 9,
+    40, 169, 6, 1, 233, 244, 40, 169, 6, 1, 233, 242, 40, 169, 6, 1, 234, 65,
+    40, 169, 6, 1, 233, 231, 40, 169, 6, 1, 234, 177, 40, 169, 6, 1, 68, 40,
+    169, 6, 1, 196, 251, 40, 169, 6, 1, 214, 23, 197, 104, 40, 169, 6, 1,
+    206, 208, 197, 104, 40, 169, 6, 1, 233, 218, 40, 169, 6, 1, 233, 170, 40,
+    169, 6, 1, 233, 165, 40, 169, 6, 1, 234, 64, 57, 40, 169, 6, 1, 197, 10,
+    40, 169, 2, 1, 64, 40, 169, 2, 1, 252, 33, 40, 169, 2, 1, 234, 181, 40,
+    169, 2, 1, 250, 236, 40, 169, 2, 1, 234, 179, 40, 169, 2, 1, 234, 85, 40,
+    169, 2, 1, 234, 176, 40, 169, 2, 1, 234, 175, 40, 169, 2, 1, 250, 217,
+    40, 169, 2, 1, 71, 40, 169, 2, 1, 242, 85, 71, 40, 169, 2, 1, 234, 171,
+    40, 169, 2, 1, 234, 164, 40, 169, 2, 1, 234, 163, 40, 169, 2, 1, 234,
+    160, 40, 169, 2, 1, 234, 157, 40, 169, 2, 1, 70, 40, 169, 2, 1, 223, 224,
+    40, 169, 2, 1, 234, 134, 40, 169, 2, 1, 234, 131, 40, 169, 2, 1, 251, 44,
+    40, 169, 2, 1, 197, 50, 40, 169, 2, 1, 234, 124, 40, 169, 2, 1, 234, 102,
+    40, 169, 2, 1, 234, 99, 40, 169, 2, 1, 234, 88, 40, 169, 2, 1, 234, 51,
+    40, 169, 2, 1, 74, 40, 169, 2, 1, 211, 194, 40, 169, 2, 1, 214, 23, 212,
+    0, 40, 169, 2, 1, 206, 208, 212, 0, 40, 169, 2, 1, 211, 255, 40, 169, 2,
+    1, 234, 41, 40, 169, 2, 1, 234, 93, 40, 169, 2, 1, 234, 21, 40, 169, 2,
+    1, 203, 195, 234, 21, 40, 169, 2, 1, 234, 9, 40, 169, 2, 1, 233, 244, 40,
+    169, 2, 1, 233, 242, 40, 169, 2, 1, 234, 65, 40, 169, 2, 1, 233, 231, 40,
+    169, 2, 1, 234, 177, 40, 169, 2, 1, 68, 40, 169, 2, 1, 196, 251, 40, 169,
+    2, 1, 214, 23, 197, 104, 40, 169, 2, 1, 206, 208, 197, 104, 40, 169, 2,
+    1, 233, 218, 40, 169, 2, 1, 233, 170, 40, 169, 2, 1, 233, 165, 40, 169,
+    2, 1, 234, 64, 57, 40, 169, 2, 1, 197, 10, 40, 169, 31, 101, 40, 169, 31,
+    151, 40, 169, 31, 200, 30, 40, 169, 31, 233, 3, 40, 169, 31, 90, 228,
+    162, 40, 169, 31, 90, 180, 230, 33, 207, 36, 1, 64, 230, 33, 207, 36, 1,
+    249, 3, 230, 33, 207, 36, 1, 166, 230, 33, 207, 36, 1, 189, 230, 33, 207,
+    36, 1, 198, 83, 230, 33, 207, 36, 1, 223, 62, 230, 33, 207, 36, 1, 247,
+    19, 230, 33, 207, 36, 1, 144, 230, 33, 207, 36, 1, 221, 250, 230, 33,
+    207, 36, 1, 233, 97, 230, 33, 207, 36, 1, 238, 0, 230, 33, 207, 36, 1,
+    237, 161, 230, 33, 207, 36, 1, 167, 230, 33, 207, 36, 1, 207, 3, 230, 33,
+    207, 36, 1, 192, 112, 230, 33, 207, 36, 1, 188, 230, 33, 207, 36, 1, 204,
+    64, 230, 33, 207, 36, 1, 160, 230, 33, 207, 36, 1, 231, 233, 230, 33,
+    207, 36, 1, 177, 230, 33, 207, 36, 1, 172, 230, 33, 207, 36, 1, 181, 230,
+    33, 207, 36, 1, 194, 169, 230, 33, 207, 36, 1, 221, 175, 194, 169, 230,
+    33, 207, 36, 1, 168, 230, 33, 207, 36, 1, 221, 175, 168, 230, 33, 207,
+    36, 1, 214, 165, 230, 33, 207, 36, 1, 212, 201, 230, 33, 207, 36, 1, 196,
+    157, 230, 33, 207, 36, 18, 64, 230, 33, 207, 36, 18, 70, 230, 33, 207,
+    36, 18, 68, 230, 33, 207, 36, 18, 71, 230, 33, 207, 36, 18, 74, 230, 33,
+    207, 36, 122, 206, 67, 230, 33, 207, 36, 122, 215, 97, 221, 216, 230, 33,
+    207, 36, 3, 230, 27, 230, 33, 207, 36, 3, 200, 150, 230, 33, 207, 36, 3,
+    200, 124, 230, 33, 207, 36, 3, 200, 106, 230, 33, 207, 36, 17, 192, 76,
+    230, 33, 207, 36, 17, 101, 230, 33, 207, 36, 17, 104, 230, 33, 207, 36,
+    17, 133, 230, 33, 207, 36, 17, 134, 230, 33, 207, 36, 17, 151, 230, 33,
+    207, 36, 17, 170, 230, 33, 207, 36, 17, 179, 230, 33, 207, 36, 17, 174,
+    230, 33, 207, 36, 17, 182, 206, 196, 17, 101, 206, 196, 17, 104, 206,
+    196, 17, 133, 206, 196, 17, 134, 206, 196, 17, 151, 206, 196, 17, 170,
+    206, 196, 17, 179, 206, 196, 17, 174, 206, 196, 17, 182, 206, 196, 31,
+    200, 30, 206, 196, 31, 197, 239, 206, 196, 31, 199, 184, 206, 196, 31,
+    232, 126, 206, 196, 31, 233, 3, 206, 196, 31, 203, 25, 206, 196, 31, 204,
+    140, 206, 196, 31, 234, 137, 206, 196, 31, 214, 11, 206, 196, 31, 90,
+    228, 162, 206, 196, 31, 103, 228, 162, 206, 196, 31, 112, 228, 162, 206,
+    196, 31, 232, 119, 228, 162, 206, 196, 31, 232, 214, 228, 162, 206, 196,
+    31, 203, 41, 228, 162, 206, 196, 31, 204, 146, 228, 162, 206, 196, 31,
+    234, 148, 228, 162, 206, 196, 31, 214, 16, 228, 162, 206, 196, 232, 109,
+    90, 230, 78, 206, 196, 232, 109, 90, 208, 167, 206, 196, 232, 109, 90,
+    199, 191, 206, 196, 232, 109, 103, 199, 188, 193, 28, 1, 234, 108, 193,
+    28, 1, 248, 123, 193, 28, 1, 210, 181, 193, 28, 1, 210, 80, 193, 28, 1,
+    199, 224, 193, 28, 1, 205, 223, 193, 28, 1, 242, 136, 193, 28, 1, 242,
+    203, 193, 28, 1, 242, 217, 193, 28, 1, 229, 187, 193, 28, 1, 193, 209,
+    193, 28, 1, 237, 227, 193, 28, 1, 192, 101, 193, 28, 1, 167, 193, 28, 1,
+    207, 156, 193, 28, 1, 192, 112, 193, 28, 1, 223, 62, 193, 28, 1, 203, 78,
+    193, 28, 1, 203, 224, 193, 28, 1, 206, 86, 193, 28, 1, 237, 250, 193, 28,
+    1, 189, 193, 28, 1, 192, 85, 193, 28, 1, 233, 172, 193, 28, 1, 193, 197,
+    193, 28, 1, 233, 97, 193, 28, 1, 196, 157, 193, 28, 1, 196, 158, 250,
+    249, 20, 193, 28, 1, 208, 232, 193, 28, 1, 222, 139, 193, 28, 1, 221,
+    247, 193, 28, 1, 231, 220, 193, 28, 1, 220, 94, 193, 28, 1, 216, 122,
+    193, 28, 1, 212, 230, 193, 28, 1, 197, 84, 193, 28, 1, 194, 119, 193, 28,
+    1, 211, 106, 193, 28, 1, 233, 212, 193, 28, 1, 230, 6, 193, 28, 1, 192,
+    229, 193, 28, 1, 233, 242, 193, 28, 38, 230, 67, 77, 193, 28, 38, 217,
+    210, 77, 193, 28, 228, 109, 77, 193, 28, 1, 220, 95, 4, 78, 58, 193, 28,
+    1, 192, 230, 4, 242, 122, 58, 40, 202, 194, 1, 251, 24, 40, 202, 194, 1,
+    52, 251, 24, 40, 202, 194, 1, 248, 62, 40, 202, 194, 1, 52, 248, 62, 40,
+    202, 194, 1, 231, 31, 40, 202, 194, 1, 229, 255, 40, 202, 194, 1, 52,
+    229, 255, 40, 202, 194, 1, 194, 119, 40, 202, 194, 1, 192, 89, 40, 202,
+    194, 1, 229, 194, 40, 202, 194, 1, 192, 238, 40, 202, 194, 1, 222, 109,
+    40, 202, 194, 1, 220, 85, 40, 202, 194, 1, 217, 12, 40, 202, 194, 1, 212,
+    230, 40, 202, 194, 1, 52, 212, 230, 40, 202, 194, 1, 52, 212, 231, 4, 84,
+    200, 147, 40, 202, 194, 1, 206, 46, 40, 202, 194, 1, 249, 231, 40, 202,
+    194, 1, 250, 249, 249, 231, 40, 202, 194, 1, 210, 181, 40, 202, 194, 1,
+    206, 83, 40, 202, 194, 1, 52, 206, 83, 40, 202, 194, 1, 52, 206, 84, 4,
+    84, 200, 147, 40, 202, 194, 1, 207, 186, 40, 202, 194, 1, 203, 224, 40,
+    202, 194, 1, 200, 93, 40, 202, 194, 1, 52, 200, 93, 40, 202, 194, 1, 52,
+    200, 94, 4, 84, 200, 147, 40, 202, 194, 31, 101, 40, 202, 194, 31, 104,
+    40, 202, 194, 31, 133, 40, 202, 194, 31, 134, 40, 202, 194, 31, 151, 40,
+    202, 194, 31, 200, 30, 40, 202, 194, 31, 197, 239, 40, 202, 194, 31, 199,
+    184, 40, 202, 194, 31, 90, 228, 162, 40, 202, 194, 232, 109, 90, 230, 78,
+    40, 202, 194, 34, 249, 230, 202, 194, 1, 251, 24, 202, 194, 1, 248, 62,
+    202, 194, 1, 231, 31, 202, 194, 1, 229, 255, 202, 194, 1, 194, 119, 202,
+    194, 1, 192, 89, 202, 194, 1, 229, 194, 202, 194, 1, 192, 238, 202, 194,
+    1, 222, 109, 202, 194, 1, 220, 85, 202, 194, 1, 217, 12, 202, 194, 1,
+    212, 230, 202, 194, 1, 206, 46, 202, 194, 1, 249, 231, 202, 194, 1, 210,
+    181, 202, 194, 1, 206, 83, 202, 194, 1, 207, 187, 202, 194, 1, 203, 224,
+    202, 194, 1, 200, 93, 202, 194, 1, 233, 18, 202, 194, 1, 219, 242, 202,
+    194, 223, 177, 203, 224, 202, 194, 38, 78, 63, 202, 194, 38, 103, 236,
+    112, 63, 202, 194, 38, 78, 58, 202, 194, 38, 103, 236, 112, 58, 202, 194,
+    38, 238, 132, 58, 202, 194, 38, 238, 132, 63, 202, 194, 38, 229, 15, 58,
+    202, 194, 38, 229, 15, 63, 202, 194, 38, 184, 229, 15, 63, 202, 194, 38,
+    207, 189, 63, 202, 194, 38, 201, 208, 63, 202, 194, 31, 101, 202, 194,
+    31, 200, 30, 202, 194, 31, 197, 239, 202, 194, 31, 90, 228, 162, 202,
+    194, 209, 38, 103, 84, 248, 182, 202, 194, 209, 38, 103, 84, 248, 183, 4,
+    236, 111, 202, 194, 209, 38, 242, 131, 4, 236, 114, 202, 194, 209, 38,
+    103, 242, 128, 4, 236, 111, 202, 194, 209, 38, 138, 242, 131, 4, 236,
+    114, 242, 181, 1, 251, 24, 242, 181, 1, 2, 251, 24, 242, 181, 1, 248, 62,
+    242, 181, 1, 231, 31, 242, 181, 1, 237, 220, 242, 181, 1, 229, 255, 242,
+    181, 1, 194, 119, 242, 181, 1, 238, 141, 194, 119, 242, 181, 1, 192, 89,
+    242, 181, 1, 229, 194, 242, 181, 1, 192, 238, 242, 181, 1, 222, 109, 242,
+    181, 1, 220, 85, 242, 181, 1, 217, 12, 242, 181, 1, 212, 230, 242, 181,
+    1, 206, 46, 242, 181, 1, 249, 231, 242, 181, 1, 210, 181, 242, 181, 1,
+    207, 188, 242, 181, 1, 203, 224, 242, 181, 1, 200, 93, 242, 181, 31, 101,
+    242, 181, 31, 104, 242, 181, 31, 133, 242, 181, 31, 134, 242, 181, 31,
+    200, 30, 242, 181, 31, 197, 239, 242, 181, 31, 90, 228, 162, 234, 101, 1,
+    251, 24, 234, 101, 1, 248, 62, 234, 101, 1, 231, 31, 234, 101, 1, 237,
+    220, 234, 101, 1, 229, 255, 234, 101, 1, 194, 119, 234, 101, 1, 192, 89,
+    234, 101, 1, 229, 194, 234, 101, 1, 200, 4, 234, 101, 1, 192, 238, 234,
+    101, 1, 222, 109, 234, 101, 1, 220, 85, 234, 101, 1, 217, 12, 234, 101,
+    1, 212, 230, 234, 101, 1, 206, 46, 234, 101, 1, 249, 231, 234, 101, 1,
+    210, 181, 234, 101, 1, 206, 83, 234, 101, 1, 208, 181, 234, 101, 1, 207,
+    188, 234, 101, 1, 203, 224, 234, 101, 1, 200, 93, 234, 101, 34, 192, 88,
+    164, 3, 246, 234, 164, 3, 250, 168, 164, 3, 196, 6, 164, 3, 223, 13, 164,
+    3, 197, 39, 164, 1, 64, 164, 1, 252, 33, 164, 1, 70, 164, 1, 223, 224,
+    164, 1, 68, 164, 1, 196, 251, 164, 1, 118, 150, 164, 1, 118, 207, 4, 164,
+    1, 118, 165, 164, 1, 118, 219, 138, 164, 1, 71, 164, 1, 251, 63, 164, 1,
+    74, 164, 1, 250, 8, 164, 1, 160, 164, 1, 221, 250, 164, 1, 231, 233, 164,
+    1, 231, 84, 164, 1, 214, 165, 164, 1, 247, 19, 164, 1, 246, 117, 164, 1,
+    223, 62, 164, 1, 223, 28, 164, 1, 212, 201, 164, 1, 198, 83, 164, 1, 198,
+    71, 164, 1, 237, 161, 164, 1, 237, 145, 164, 1, 213, 178, 164, 1, 189,
+    164, 1, 199, 240, 164, 1, 238, 0, 164, 1, 237, 40, 164, 1, 181, 164, 1,
+    166, 164, 1, 210, 94, 164, 1, 249, 3, 164, 1, 248, 54, 164, 1, 172, 164,
+    1, 168, 164, 1, 167, 164, 1, 177, 164, 1, 196, 157, 164, 1, 204, 64, 164,
+    1, 202, 92, 164, 1, 188, 164, 1, 144, 164, 1, 219, 137, 164, 1, 40, 44,
+    219, 126, 164, 1, 40, 44, 207, 3, 164, 1, 40, 44, 213, 160, 164, 18, 3,
+    252, 33, 164, 18, 3, 248, 50, 252, 33, 164, 18, 3, 70, 164, 18, 3, 223,
+    224, 164, 18, 3, 68, 164, 18, 3, 196, 251, 164, 18, 3, 118, 150, 164, 18,
+    3, 118, 207, 4, 164, 18, 3, 118, 165, 164, 18, 3, 118, 219, 138, 164, 18,
+    3, 71, 164, 18, 3, 251, 63, 164, 18, 3, 74, 164, 18, 3, 250, 8, 164, 196,
+    11, 164, 237, 208, 164, 55, 237, 208, 164, 209, 38, 236, 114, 164, 209,
+    38, 55, 236, 114, 164, 209, 38, 219, 175, 164, 209, 38, 238, 194, 161,
+    164, 209, 38, 219, 57, 164, 31, 101, 164, 31, 104, 164, 31, 133, 164, 31,
+    134, 164, 31, 151, 164, 31, 170, 164, 31, 179, 164, 31, 174, 164, 31,
+    182, 164, 31, 200, 30, 164, 31, 197, 239, 164, 31, 199, 184, 164, 31,
+    232, 126, 164, 31, 233, 3, 164, 31, 203, 25, 164, 31, 204, 140, 164, 31,
+    234, 137, 164, 31, 214, 11, 164, 31, 90, 228, 162, 164, 31, 90, 180, 164,
+    17, 192, 76, 164, 17, 101, 164, 17, 104, 164, 17, 133, 164, 17, 134, 164,
+    17, 151, 164, 17, 170, 164, 17, 179, 164, 17, 174, 164, 17, 182, 164, 31,
+    222, 228, 222, 132, 3, 246, 234, 222, 132, 3, 250, 168, 222, 132, 3, 196,
+    6, 222, 132, 1, 64, 222, 132, 1, 252, 33, 222, 132, 1, 70, 222, 132, 1,
+    223, 224, 222, 132, 1, 68, 222, 132, 1, 196, 251, 222, 132, 1, 71, 222,
+    132, 1, 251, 63, 222, 132, 1, 74, 222, 132, 1, 250, 8, 222, 132, 1, 160,
+    222, 132, 1, 221, 250, 222, 132, 1, 231, 233, 222, 132, 1, 231, 84, 222,
+    132, 1, 214, 165, 222, 132, 1, 247, 19, 222, 132, 1, 246, 117, 222, 132,
+    1, 223, 62, 222, 132, 1, 223, 28, 222, 132, 1, 212, 201, 222, 132, 1,
+    198, 83, 222, 132, 1, 198, 71, 222, 132, 1, 237, 161, 222, 132, 1, 237,
+    150, 222, 132, 1, 237, 145, 222, 132, 1, 207, 156, 222, 132, 1, 213, 178,
+    222, 132, 1, 189, 222, 132, 1, 199, 240, 222, 132, 1, 238, 0, 222, 132,
+    1, 237, 40, 222, 132, 1, 181, 222, 132, 1, 166, 222, 132, 1, 210, 94,
+    222, 132, 1, 249, 3, 222, 132, 1, 248, 54, 222, 132, 1, 172, 222, 132, 1,
+    168, 222, 132, 1, 167, 222, 132, 1, 177, 222, 132, 1, 196, 157, 222, 132,
+    1, 204, 64, 222, 132, 1, 202, 92, 222, 132, 1, 188, 222, 132, 1, 144,
+    222, 132, 18, 3, 252, 33, 222, 132, 18, 3, 70, 222, 132, 18, 3, 223, 224,
+    222, 132, 18, 3, 68, 222, 132, 18, 3, 196, 251, 222, 132, 18, 3, 71, 222,
+    132, 18, 3, 251, 63, 222, 132, 18, 3, 74, 222, 132, 18, 3, 250, 8, 222,
+    132, 3, 196, 11, 222, 132, 3, 212, 241, 222, 132, 251, 151, 57, 222, 132,
+    234, 54, 57, 222, 132, 31, 57, 222, 132, 205, 209, 77, 222, 132, 55, 205,
+    209, 77, 222, 132, 237, 208, 222, 132, 55, 237, 208, 222, 132, 31, 3, 58,
+    202, 179, 202, 187, 1, 206, 76, 202, 179, 202, 187, 1, 200, 151, 202,
+    179, 202, 187, 1, 248, 229, 202, 179, 202, 187, 1, 247, 8, 202, 179, 202,
+    187, 1, 237, 236, 202, 179, 202, 187, 1, 231, 218, 202, 179, 202, 187, 1,
+    217, 188, 202, 179, 202, 187, 1, 214, 162, 202, 179, 202, 187, 1, 220,
+    158, 202, 179, 202, 187, 1, 215, 71, 202, 179, 202, 187, 1, 196, 153,
+    202, 179, 202, 187, 1, 211, 57, 202, 179, 202, 187, 1, 193, 110, 202,
+    179, 202, 187, 1, 208, 50, 202, 179, 202, 187, 1, 230, 89, 202, 179, 202,
+    187, 1, 222, 137, 202, 179, 202, 187, 1, 223, 56, 202, 179, 202, 187, 1,
+    212, 198, 202, 179, 202, 187, 1, 251, 72, 202, 179, 202, 187, 1, 234,
+    169, 202, 179, 202, 187, 1, 223, 225, 202, 179, 202, 187, 1, 197, 97,
+    202, 179, 202, 187, 1, 211, 241, 202, 179, 202, 187, 1, 234, 157, 202,
+    179, 202, 187, 1, 217, 204, 202, 179, 202, 187, 17, 192, 76, 202, 179,
+    202, 187, 17, 101, 202, 179, 202, 187, 17, 104, 202, 179, 202, 187, 17,
+    133, 202, 179, 202, 187, 17, 134, 202, 179, 202, 187, 17, 151, 202, 179,
+    202, 187, 17, 170, 202, 179, 202, 187, 17, 179, 202, 179, 202, 187, 17,
+    174, 202, 179, 202, 187, 17, 182, 246, 111, 3, 246, 234, 246, 111, 3,
+    250, 168, 246, 111, 3, 196, 6, 246, 111, 1, 252, 33, 246, 111, 1, 70,
+    246, 111, 1, 68, 246, 111, 1, 71, 246, 111, 1, 222, 159, 246, 111, 1,
+    221, 249, 246, 111, 1, 231, 230, 246, 111, 1, 231, 83, 246, 111, 1, 214,
+    164, 246, 111, 1, 247, 18, 246, 111, 1, 246, 116, 246, 111, 1, 223, 61,
+    246, 111, 1, 223, 27, 246, 111, 1, 212, 200, 246, 111, 1, 198, 82, 246,
+    111, 1, 198, 70, 246, 111, 1, 237, 160, 246, 111, 1, 237, 144, 246, 111,
+    1, 213, 177, 246, 111, 1, 200, 174, 246, 111, 1, 199, 239, 246, 111, 1,
+    237, 255, 246, 111, 1, 237, 39, 246, 111, 1, 215, 84, 246, 111, 1, 211,
+    77, 246, 111, 1, 210, 93, 246, 111, 1, 249, 1, 246, 111, 1, 248, 53, 246,
+    111, 1, 217, 219, 246, 111, 1, 192, 163, 246, 111, 1, 193, 129, 246, 111,
+    1, 208, 68, 246, 111, 1, 220, 184, 246, 111, 1, 194, 163, 246, 111, 1,
+    206, 91, 246, 111, 1, 230, 99, 246, 111, 18, 3, 64, 246, 111, 18, 3, 70,
+    246, 111, 18, 3, 223, 224, 246, 111, 18, 3, 68, 246, 111, 18, 3, 196,
+    251, 246, 111, 18, 3, 71, 246, 111, 18, 3, 251, 63, 246, 111, 18, 3, 74,
+    246, 111, 18, 3, 250, 8, 246, 111, 18, 3, 211, 238, 246, 111, 185, 77,
+    246, 111, 250, 9, 77, 246, 111, 196, 11, 246, 111, 217, 217, 246, 111,
+    17, 192, 76, 246, 111, 17, 101, 246, 111, 17, 104, 246, 111, 17, 133,
+    246, 111, 17, 134, 246, 111, 17, 151, 246, 111, 17, 170, 246, 111, 17,
+    179, 246, 111, 17, 174, 246, 111, 17, 182, 246, 111, 205, 209, 77, 246,
+    111, 237, 208, 246, 111, 55, 237, 208, 246, 111, 208, 159, 77, 246, 111,
+    1, 219, 221, 246, 111, 18, 3, 252, 33, 246, 111, 18, 3, 234, 150, 246,
+    111, 1, 196, 156, 217, 186, 1, 64, 217, 186, 1, 70, 217, 186, 1, 68, 217,
+    186, 1, 71, 217, 186, 1, 74, 217, 186, 1, 160, 217, 186, 1, 221, 250,
+    217, 186, 1, 231, 233, 217, 186, 1, 231, 84, 217, 186, 1, 247, 19, 217,
+    186, 1, 246, 117, 217, 186, 1, 223, 62, 217, 186, 1, 223, 28, 217, 186,
+    1, 212, 201, 217, 186, 1, 198, 83, 217, 186, 1, 198, 71, 217, 186, 1,
+    237, 161, 217, 186, 1, 237, 145, 217, 186, 1, 213, 178, 217, 186, 1, 189,
+    217, 186, 1, 199, 240, 217, 186, 1, 238, 0, 217, 186, 1, 237, 40, 217,
+    186, 1, 181, 217, 186, 1, 166, 217, 186, 1, 210, 94, 217, 186, 1, 249, 3,
+    217, 186, 1, 248, 54, 217, 186, 1, 172, 217, 186, 1, 167, 217, 186, 1,
+    177, 217, 186, 1, 196, 157, 217, 186, 1, 188, 217, 186, 1, 144, 217, 186,
+    1, 207, 3, 217, 186, 3, 212, 241, 217, 186, 251, 151, 57, 217, 186, 205,
+    209, 77, 217, 186, 34, 203, 172, 204, 28, 3, 246, 234, 204, 28, 3, 250,
+    168, 204, 28, 3, 196, 6, 204, 28, 1, 64, 204, 28, 1, 252, 33, 204, 28, 1,
+    70, 204, 28, 1, 223, 224, 204, 28, 1, 68, 204, 28, 1, 196, 251, 204, 28,
+    1, 118, 150, 204, 28, 1, 118, 207, 4, 204, 28, 1, 118, 165, 204, 28, 1,
+    118, 219, 138, 204, 28, 1, 71, 204, 28, 1, 251, 63, 204, 28, 1, 74, 204,
+    28, 1, 250, 8, 204, 28, 1, 160, 204, 28, 1, 221, 250, 204, 28, 1, 231,
+    233, 204, 28, 1, 231, 84, 204, 28, 1, 214, 165, 204, 28, 1, 247, 19, 204,
+    28, 1, 246, 117, 204, 28, 1, 223, 62, 204, 28, 1, 223, 28, 204, 28, 1,
+    212, 201, 204, 28, 1, 198, 83, 204, 28, 1, 198, 71, 204, 28, 1, 237, 161,
+    204, 28, 1, 237, 145, 204, 28, 1, 213, 178, 204, 28, 1, 189, 204, 28, 1,
+    199, 240, 204, 28, 1, 238, 0, 204, 28, 1, 237, 40, 204, 28, 1, 181, 204,
+    28, 1, 166, 204, 28, 1, 210, 94, 204, 28, 1, 249, 3, 204, 28, 1, 248, 54,
+    204, 28, 1, 172, 204, 28, 1, 168, 204, 28, 1, 167, 204, 28, 1, 177, 204,
+    28, 1, 219, 137, 204, 28, 1, 196, 157, 204, 28, 1, 204, 64, 204, 28, 1,
+    202, 92, 204, 28, 1, 188, 204, 28, 1, 144, 204, 28, 18, 3, 252, 33, 204,
+    28, 18, 3, 70, 204, 28, 18, 3, 223, 224, 204, 28, 18, 3, 68, 204, 28, 18,
+    3, 196, 251, 204, 28, 18, 3, 118, 150, 204, 28, 18, 3, 118, 207, 4, 204,
+    28, 18, 3, 118, 165, 204, 28, 18, 3, 118, 219, 138, 204, 28, 18, 3, 71,
+    204, 28, 18, 3, 251, 63, 204, 28, 18, 3, 74, 204, 28, 18, 3, 250, 8, 204,
+    28, 3, 196, 11, 204, 28, 3, 249, 246, 204, 28, 3, 223, 13, 204, 28, 3,
+    197, 39, 204, 28, 211, 219, 204, 28, 237, 208, 204, 28, 55, 237, 208,
+    204, 28, 251, 151, 57, 204, 28, 204, 165, 204, 28, 206, 36, 77, 204, 28,
+    3, 212, 241, 204, 28, 18, 73, 77, 204, 28, 233, 189, 203, 195, 18, 77,
+    204, 28, 201, 87, 77, 204, 28, 18, 3, 209, 91, 71, 204, 28, 3, 223, 121,
+    246, 234, 204, 28, 17, 192, 76, 204, 28, 17, 101, 204, 28, 17, 104, 204,
+    28, 17, 133, 204, 28, 17, 134, 204, 28, 17, 151, 204, 28, 17, 170, 204,
+    28, 17, 179, 204, 28, 17, 174, 204, 28, 17, 182, 204, 28, 234, 130, 204,
+    28, 3, 203, 113, 204, 28, 229, 237, 204, 28, 238, 250, 57, 204, 28, 205,
+    209, 217, 126, 204, 28, 205, 209, 217, 125, 159, 250, 112, 17, 101, 159,
+    250, 112, 17, 104, 159, 250, 112, 17, 133, 159, 250, 112, 17, 134, 159,
+    250, 112, 17, 151, 159, 250, 112, 17, 170, 159, 250, 112, 17, 179, 159,
+    250, 112, 17, 174, 159, 250, 112, 17, 182, 159, 250, 112, 31, 200, 30,
+    159, 250, 112, 31, 197, 239, 159, 250, 112, 31, 199, 184, 159, 250, 112,
+    31, 232, 126, 159, 250, 112, 31, 233, 3, 159, 250, 112, 31, 203, 25, 159,
+    250, 112, 31, 204, 140, 159, 250, 112, 31, 234, 137, 159, 250, 112, 31,
+    214, 11, 159, 250, 112, 31, 90, 228, 162, 159, 250, 112, 31, 90, 180,
+    221, 219, 1, 64, 221, 219, 1, 252, 33, 221, 219, 1, 70, 221, 219, 1, 68,
+    221, 219, 1, 71, 221, 219, 1, 251, 63, 221, 219, 1, 74, 221, 219, 1, 250,
+    8, 221, 219, 1, 160, 221, 219, 1, 221, 250, 221, 219, 1, 231, 233, 221,
+    219, 1, 231, 120, 221, 219, 1, 231, 84, 221, 219, 1, 214, 165, 221, 219,
+    1, 247, 19, 221, 219, 1, 246, 117, 221, 219, 1, 223, 62, 221, 219, 1,
+    223, 6, 221, 219, 1, 212, 201, 221, 219, 1, 198, 83, 221, 219, 1, 198,
+    71, 221, 219, 1, 237, 161, 221, 219, 1, 237, 145, 221, 219, 1, 213, 178,
+    221, 219, 1, 189, 221, 219, 1, 199, 240, 221, 219, 1, 238, 0, 221, 219,
+    1, 237, 151, 221, 219, 1, 237, 40, 221, 219, 1, 181, 221, 219, 1, 166,
+    221, 219, 1, 210, 94, 221, 219, 1, 249, 3, 221, 219, 1, 248, 159, 221,
+    219, 1, 248, 54, 221, 219, 1, 172, 221, 219, 1, 168, 221, 219, 1, 167,
+    221, 219, 1, 177, 221, 219, 1, 196, 157, 221, 219, 1, 188, 221, 219, 1,
+    144, 221, 219, 1, 219, 137, 221, 219, 18, 3, 252, 33, 221, 219, 18, 3,
+    70, 221, 219, 18, 3, 223, 224, 221, 219, 18, 3, 68, 221, 219, 18, 3, 71,
+    221, 219, 18, 3, 251, 63, 221, 219, 18, 3, 74, 221, 219, 18, 3, 250, 8,
+    221, 219, 3, 250, 168, 221, 219, 3, 196, 11, 221, 219, 3, 212, 241, 221,
+    219, 3, 204, 54, 221, 219, 237, 208, 221, 219, 55, 237, 208, 221, 219,
+    194, 11, 204, 165, 221, 219, 205, 209, 77, 221, 219, 55, 205, 209, 77,
+    221, 219, 251, 151, 57, 221, 219, 3, 201, 131, 215, 220, 1, 64, 215, 220,
+    1, 70, 215, 220, 1, 68, 215, 220, 1, 71, 215, 220, 1, 160, 215, 220, 1,
+    221, 250, 215, 220, 1, 231, 233, 215, 220, 1, 231, 84, 215, 220, 1, 247,
+    19, 215, 220, 1, 246, 117, 215, 220, 1, 223, 62, 215, 220, 1, 223, 6,
+    215, 220, 1, 212, 201, 215, 220, 1, 198, 83, 215, 220, 1, 198, 71, 215,
+    220, 1, 237, 161, 215, 220, 1, 237, 151, 215, 220, 1, 237, 145, 215, 220,
+    1, 213, 178, 215, 220, 1, 189, 215, 220, 1, 199, 240, 215, 220, 1, 238,
+    0, 215, 220, 1, 237, 40, 215, 220, 1, 181, 215, 220, 1, 166, 215, 220, 1,
+    210, 94, 215, 220, 1, 249, 3, 215, 220, 1, 248, 54, 215, 220, 1, 172,
+    215, 220, 1, 168, 215, 220, 1, 167, 215, 220, 1, 177, 215, 220, 1, 196,
+    157, 215, 220, 1, 188, 215, 220, 1, 144, 215, 220, 1, 207, 3, 215, 220,
+    1, 207, 156, 215, 220, 205, 209, 77, 221, 210, 1, 64, 221, 210, 1, 252,
+    33, 221, 210, 1, 70, 221, 210, 1, 223, 224, 221, 210, 1, 68, 221, 210, 1,
+    196, 251, 221, 210, 1, 71, 221, 210, 1, 251, 63, 221, 210, 1, 74, 221,
+    210, 1, 250, 8, 221, 210, 1, 160, 221, 210, 1, 221, 250, 221, 210, 1,
+    231, 233, 221, 210, 1, 231, 120, 221, 210, 1, 231, 84, 221, 210, 1, 214,
+    165, 221, 210, 1, 247, 19, 221, 210, 1, 246, 117, 221, 210, 1, 223, 62,
+    221, 210, 1, 223, 6, 221, 210, 1, 223, 28, 221, 210, 1, 212, 201, 221,
+    210, 1, 198, 83, 221, 210, 1, 198, 71, 221, 210, 1, 237, 161, 221, 210,
+    1, 237, 151, 221, 210, 1, 207, 3, 221, 210, 1, 237, 145, 221, 210, 1,
+    213, 178, 221, 210, 1, 189, 221, 210, 1, 199, 240, 221, 210, 1, 238, 0,
+    221, 210, 1, 237, 40, 221, 210, 1, 181, 221, 210, 1, 166, 221, 210, 1,
+    210, 94, 221, 210, 1, 249, 3, 221, 210, 1, 248, 159, 221, 210, 1, 248,
+    54, 221, 210, 1, 172, 221, 210, 1, 168, 221, 210, 1, 167, 221, 210, 1,
+    177, 221, 210, 1, 196, 157, 221, 210, 1, 204, 64, 221, 210, 1, 188, 221,
+    210, 1, 144, 221, 210, 3, 250, 168, 221, 210, 18, 3, 252, 33, 221, 210,
+    18, 3, 70, 221, 210, 18, 3, 223, 224, 221, 210, 18, 3, 68, 221, 210, 18,
+    3, 196, 251, 221, 210, 18, 3, 71, 221, 210, 18, 3, 251, 63, 221, 210, 18,
+    3, 74, 221, 210, 18, 3, 250, 8, 221, 210, 3, 212, 241, 221, 210, 3, 196,
+    11, 221, 210, 17, 192, 76, 221, 210, 17, 101, 221, 210, 17, 104, 221,
+    210, 17, 133, 221, 210, 17, 134, 221, 210, 17, 151, 221, 210, 17, 170,
+    221, 210, 17, 179, 221, 210, 17, 174, 221, 210, 17, 182, 230, 219, 3, 38,
+    250, 169, 58, 230, 219, 3, 246, 234, 230, 219, 3, 250, 168, 230, 219, 3,
+    196, 6, 230, 219, 1, 64, 230, 219, 1, 252, 33, 230, 219, 1, 70, 230, 219,
+    1, 223, 224, 230, 219, 1, 68, 230, 219, 1, 196, 251, 230, 219, 1, 118,
+    150, 230, 219, 1, 118, 165, 230, 219, 1, 234, 171, 230, 219, 1, 251, 63,
+    230, 219, 1, 211, 194, 230, 219, 1, 250, 8, 230, 219, 1, 160, 230, 219,
+    1, 221, 250, 230, 219, 1, 231, 233, 230, 219, 1, 231, 84, 230, 219, 1,
+    214, 165, 230, 219, 1, 247, 19, 230, 219, 1, 246, 117, 230, 219, 1, 223,
+    62, 230, 219, 1, 223, 28, 230, 219, 1, 212, 201, 230, 219, 1, 198, 83,
+    230, 219, 1, 198, 71, 230, 219, 1, 237, 161, 230, 219, 1, 237, 145, 230,
+    219, 1, 213, 178, 230, 219, 1, 189, 230, 219, 1, 199, 240, 230, 219, 1,
+    238, 0, 230, 219, 1, 237, 40, 230, 219, 1, 181, 230, 219, 1, 166, 230,
+    219, 1, 210, 94, 230, 219, 1, 249, 3, 230, 219, 1, 248, 54, 230, 219, 1,
+    172, 230, 219, 1, 168, 230, 219, 1, 167, 230, 219, 1, 177, 230, 219, 1,
+    219, 137, 230, 219, 1, 196, 157, 230, 219, 1, 204, 64, 230, 219, 1, 202,
+    92, 230, 219, 1, 188, 230, 219, 1, 144, 38, 248, 18, 63, 230, 219, 3,
+    212, 241, 230, 219, 3, 249, 246, 230, 219, 18, 3, 252, 33, 230, 219, 18,
+    3, 70, 230, 219, 18, 3, 223, 224, 230, 219, 18, 3, 68, 230, 219, 18, 3,
+    196, 251, 230, 219, 18, 3, 118, 150, 230, 219, 18, 3, 118, 207, 4, 230,
+    219, 18, 3, 234, 171, 230, 219, 18, 3, 251, 63, 230, 219, 18, 3, 211,
+    194, 230, 219, 18, 3, 250, 8, 230, 219, 3, 196, 11, 230, 219, 211, 219,
+    230, 219, 250, 9, 220, 2, 77, 230, 219, 3, 209, 204, 230, 219, 1, 196,
+    120, 250, 168, 230, 219, 1, 196, 120, 55, 250, 168, 230, 219, 1, 118,
+    207, 4, 230, 219, 1, 118, 219, 138, 230, 219, 18, 3, 118, 165, 230, 219,
+    18, 3, 118, 219, 138, 38, 230, 219, 17, 192, 76, 38, 230, 219, 17, 101,
+    38, 230, 219, 17, 104, 38, 230, 219, 17, 133, 38, 230, 219, 17, 134, 38,
+    230, 219, 17, 151, 38, 230, 219, 17, 170, 38, 230, 219, 1, 64, 38, 230,
+    219, 1, 160, 38, 230, 219, 1, 181, 38, 230, 219, 1, 196, 39, 38, 230,
+    219, 1, 166, 214, 175, 1, 64, 214, 175, 1, 252, 33, 214, 175, 1, 70, 214,
+    175, 1, 223, 224, 214, 175, 1, 68, 214, 175, 1, 196, 251, 214, 175, 1,
+    118, 150, 214, 175, 1, 118, 207, 4, 214, 175, 1, 118, 165, 214, 175, 1,
+    118, 219, 138, 214, 175, 1, 71, 214, 175, 1, 251, 63, 214, 175, 1, 74,
+    214, 175, 1, 250, 8, 214, 175, 1, 160, 214, 175, 1, 221, 250, 214, 175,
+    1, 231, 233, 214, 175, 1, 231, 84, 214, 175, 1, 214, 165, 214, 175, 1,
+    214, 114, 214, 175, 1, 247, 19, 214, 175, 1, 246, 117, 214, 175, 1, 223,
+    62, 214, 175, 1, 223, 28, 214, 175, 1, 212, 201, 214, 175, 1, 212, 183,
+    214, 175, 1, 198, 83, 214, 175, 1, 198, 71, 214, 175, 1, 237, 161, 214,
+    175, 1, 237, 145, 214, 175, 1, 213, 178, 214, 175, 1, 189, 214, 175, 1,
+    199, 240, 214, 175, 1, 238, 0, 214, 175, 1, 237, 40, 214, 175, 1, 181,
+    214, 175, 1, 214, 65, 214, 175, 1, 166, 214, 175, 1, 210, 94, 214, 175,
+    1, 249, 3, 214, 175, 1, 248, 54, 214, 175, 1, 172, 214, 175, 1, 216, 178,
+    214, 175, 1, 168, 214, 175, 1, 167, 214, 175, 1, 207, 156, 214, 175, 1,
+    177, 214, 175, 1, 219, 222, 214, 175, 1, 194, 169, 214, 175, 1, 204, 64,
+    214, 175, 1, 202, 92, 214, 175, 1, 188, 214, 175, 1, 144, 214, 175, 18,
+    3, 252, 33, 214, 175, 18, 3, 70, 214, 175, 18, 3, 223, 224, 214, 175, 18,
+    3, 68, 214, 175, 18, 3, 196, 251, 214, 175, 18, 3, 118, 150, 214, 175,
+    18, 3, 118, 207, 4, 214, 175, 18, 3, 118, 165, 214, 175, 18, 3, 118, 219,
+    138, 214, 175, 18, 3, 71, 214, 175, 18, 3, 251, 63, 214, 175, 18, 3, 74,
+    214, 175, 18, 3, 250, 8, 214, 175, 3, 196, 11, 214, 175, 3, 246, 234,
+    214, 175, 3, 250, 168, 214, 175, 3, 196, 6, 214, 175, 3, 212, 241, 214,
+    175, 3, 249, 246, 214, 175, 3, 52, 250, 168, 214, 175, 211, 219, 214,
+    175, 203, 112, 214, 175, 237, 208, 214, 175, 55, 237, 208, 214, 175, 242,
+    38, 214, 175, 231, 197, 232, 247, 214, 175, 251, 151, 57, 214, 175, 17,
+    192, 76, 214, 175, 17, 101, 214, 175, 17, 104, 214, 175, 17, 133, 214,
+    175, 17, 134, 214, 175, 17, 151, 214, 175, 17, 170, 214, 175, 17, 179,
+    214, 175, 17, 174, 214, 175, 17, 182, 214, 175, 55, 242, 38, 214, 175,
+    209, 231, 77, 214, 175, 223, 147, 57, 214, 175, 206, 36, 77, 214, 175, 1,
+    196, 120, 250, 168, 214, 175, 3, 223, 13, 214, 175, 3, 197, 39, 199, 67,
+    250, 197, 199, 67, 1, 64, 199, 67, 1, 252, 33, 199, 67, 1, 70, 199, 67,
+    1, 223, 224, 199, 67, 1, 68, 199, 67, 1, 196, 251, 199, 67, 1, 118, 150,
+    199, 67, 1, 118, 207, 4, 199, 67, 1, 118, 165, 199, 67, 1, 118, 219, 138,
+    199, 67, 1, 71, 199, 67, 1, 251, 63, 199, 67, 1, 74, 199, 67, 1, 250, 8,
+    199, 67, 1, 160, 199, 67, 1, 221, 250, 199, 67, 1, 231, 233, 199, 67, 1,
+    231, 84, 199, 67, 1, 214, 165, 199, 67, 1, 247, 19, 199, 67, 1, 246, 117,
+    199, 67, 1, 223, 62, 199, 67, 1, 223, 28, 199, 67, 1, 212, 201, 199, 67,
+    1, 198, 83, 199, 67, 1, 198, 71, 199, 67, 1, 237, 161, 199, 67, 1, 237,
+    145, 199, 67, 1, 213, 178, 199, 67, 1, 189, 199, 67, 1, 199, 240, 199,
+    67, 1, 238, 0, 199, 67, 1, 237, 40, 199, 67, 1, 181, 199, 67, 1, 166,
+    199, 67, 1, 210, 94, 199, 67, 1, 249, 3, 199, 67, 1, 248, 54, 199, 67, 1,
+    172, 199, 67, 1, 168, 199, 67, 1, 167, 199, 67, 1, 177, 199, 67, 1, 196,
+    157, 199, 67, 1, 204, 64, 199, 67, 1, 202, 92, 199, 67, 1, 188, 199, 67,
+    1, 144, 199, 67, 18, 3, 252, 33, 199, 67, 18, 3, 70, 199, 67, 18, 3, 223,
+    224, 199, 67, 18, 3, 68, 199, 67, 18, 3, 196, 251, 199, 67, 18, 3, 118,
+    150, 199, 67, 18, 3, 118, 207, 4, 199, 67, 18, 3, 118, 165, 199, 67, 18,
+    3, 118, 219, 138, 199, 67, 18, 3, 71, 199, 67, 18, 3, 203, 195, 71, 199,
+    67, 18, 3, 251, 63, 199, 67, 18, 3, 74, 199, 67, 18, 3, 203, 195, 74,
+    199, 67, 18, 3, 250, 8, 199, 67, 3, 246, 234, 199, 67, 3, 250, 168, 199,
+    67, 3, 196, 6, 199, 67, 3, 196, 11, 199, 67, 3, 212, 241, 199, 67, 3,
+    249, 246, 199, 67, 230, 145, 199, 67, 251, 151, 57, 199, 67, 211, 219,
+    199, 67, 17, 192, 76, 199, 67, 17, 101, 199, 67, 17, 104, 199, 67, 17,
+    133, 199, 67, 17, 134, 199, 67, 17, 151, 199, 67, 17, 170, 199, 67, 17,
+    179, 199, 67, 17, 174, 199, 67, 17, 182, 203, 114, 1, 64, 203, 114, 1,
+    252, 33, 203, 114, 1, 70, 203, 114, 1, 223, 224, 203, 114, 1, 68, 203,
+    114, 1, 196, 251, 203, 114, 1, 118, 150, 203, 114, 1, 118, 207, 4, 203,
+    114, 1, 118, 165, 203, 114, 1, 118, 219, 138, 203, 114, 1, 71, 203, 114,
+    1, 251, 63, 203, 114, 1, 74, 203, 114, 1, 250, 8, 203, 114, 1, 160, 203,
+    114, 1, 221, 250, 203, 114, 1, 231, 233, 203, 114, 1, 231, 84, 203, 114,
+    1, 214, 165, 203, 114, 1, 247, 19, 203, 114, 1, 246, 117, 203, 114, 1,
+    223, 62, 203, 114, 1, 223, 28, 203, 114, 1, 212, 201, 203, 114, 1, 198,
+    83, 203, 114, 1, 198, 71, 203, 114, 1, 237, 161, 203, 114, 1, 237, 145,
+    203, 114, 1, 213, 178, 203, 114, 1, 189, 203, 114, 1, 199, 240, 203, 114,
+    1, 238, 0, 203, 114, 1, 237, 40, 203, 114, 1, 181, 203, 114, 1, 166, 203,
+    114, 1, 210, 94, 203, 114, 1, 249, 3, 203, 114, 1, 248, 54, 203, 114, 1,
+    172, 203, 114, 1, 168, 203, 114, 1, 167, 203, 114, 1, 177, 203, 114, 1,
+    196, 157, 203, 114, 1, 204, 64, 203, 114, 1, 202, 92, 203, 114, 1, 188,
+    203, 114, 1, 144, 203, 114, 18, 3, 252, 33, 203, 114, 18, 3, 70, 203,
+    114, 18, 3, 223, 224, 203, 114, 18, 3, 68, 203, 114, 18, 3, 196, 251,
+    203, 114, 18, 3, 118, 150, 203, 114, 18, 3, 118, 207, 4, 203, 114, 18, 3,
+    71, 203, 114, 18, 3, 251, 63, 203, 114, 18, 3, 74, 203, 114, 18, 3, 250,
+    8, 203, 114, 3, 246, 234, 203, 114, 3, 250, 168, 203, 114, 3, 196, 6,
+    203, 114, 3, 196, 11, 203, 114, 3, 212, 241, 203, 114, 3, 203, 113, 203,
+    114, 237, 208, 203, 114, 55, 237, 208, 203, 114, 204, 166, 236, 114, 203,
+    114, 204, 166, 161, 203, 114, 207, 196, 217, 126, 203, 114, 207, 196,
+    217, 125, 203, 114, 207, 196, 217, 124, 203, 114, 234, 80, 80, 199, 245,
+    77, 203, 114, 205, 209, 122, 4, 198, 180, 26, 197, 172, 211, 149, 203,
+    114, 205, 209, 122, 4, 198, 180, 26, 235, 111, 238, 192, 203, 114, 205,
+    209, 122, 4, 208, 13, 26, 235, 111, 238, 192, 203, 114, 205, 209, 122, 4,
+    208, 13, 26, 235, 111, 55, 238, 192, 203, 114, 205, 209, 122, 4, 208, 13,
+    26, 235, 111, 198, 170, 238, 192, 203, 114, 205, 209, 122, 55, 207, 81,
+    203, 114, 205, 209, 122, 55, 207, 82, 4, 208, 12, 203, 114, 205, 209,
+    122, 4, 55, 238, 192, 203, 114, 205, 209, 122, 4, 198, 170, 238, 192,
+    203, 114, 205, 209, 122, 4, 208, 170, 238, 192, 203, 114, 205, 209, 122,
+    4, 204, 163, 238, 192, 203, 114, 205, 209, 122, 4, 242, 128, 26, 208, 12,
+    203, 114, 205, 209, 122, 4, 242, 128, 26, 103, 234, 82, 203, 114, 205,
+    209, 122, 4, 242, 128, 26, 232, 119, 234, 82, 203, 114, 1, 199, 161, 250,
+    249, 70, 203, 114, 1, 197, 222, 250, 249, 70, 203, 114, 1, 197, 222, 250,
+    249, 223, 224, 203, 114, 1, 250, 249, 68, 203, 114, 18, 3, 250, 249, 68,
+    203, 114, 18, 3, 250, 249, 196, 251, 216, 76, 1, 64, 216, 76, 1, 252, 33,
+    216, 76, 1, 70, 216, 76, 1, 223, 224, 216, 76, 1, 68, 216, 76, 1, 196,
+    251, 216, 76, 1, 118, 150, 216, 76, 1, 118, 207, 4, 216, 76, 1, 118, 165,
+    216, 76, 1, 118, 219, 138, 216, 76, 1, 71, 216, 76, 1, 251, 63, 216, 76,
+    1, 74, 216, 76, 1, 250, 8, 216, 76, 1, 160, 216, 76, 1, 221, 250, 216,
+    76, 1, 231, 233, 216, 76, 1, 231, 84, 216, 76, 1, 214, 165, 216, 76, 1,
+    247, 19, 216, 76, 1, 246, 117, 216, 76, 1, 223, 62, 216, 76, 1, 223, 28,
+    216, 76, 1, 212, 201, 216, 76, 1, 198, 83, 216, 76, 1, 198, 71, 216, 76,
+    1, 237, 161, 216, 76, 1, 237, 145, 216, 76, 1, 213, 178, 216, 76, 1, 189,
+    216, 76, 1, 199, 240, 216, 76, 1, 238, 0, 216, 76, 1, 237, 40, 216, 76,
+    1, 181, 216, 76, 1, 166, 216, 76, 1, 210, 94, 216, 76, 1, 249, 3, 216,
+    76, 1, 248, 54, 216, 76, 1, 172, 216, 76, 1, 168, 216, 76, 1, 167, 216,
+    76, 1, 177, 216, 76, 1, 196, 157, 216, 76, 1, 204, 64, 216, 76, 1, 202,
+    92, 216, 76, 1, 188, 216, 76, 1, 144, 216, 76, 1, 219, 137, 216, 76, 18,
+    3, 252, 33, 216, 76, 18, 3, 70, 216, 76, 18, 3, 223, 224, 216, 76, 18, 3,
+    68, 216, 76, 18, 3, 196, 251, 216, 76, 18, 3, 118, 150, 216, 76, 18, 3,
+    118, 207, 4, 216, 76, 18, 3, 118, 165, 216, 76, 18, 3, 118, 219, 138,
+    216, 76, 18, 3, 71, 216, 76, 18, 3, 251, 63, 216, 76, 18, 3, 74, 216, 76,
+    18, 3, 250, 8, 216, 76, 3, 250, 168, 216, 76, 3, 196, 6, 216, 76, 3, 196,
+    11, 216, 76, 3, 250, 109, 216, 76, 237, 208, 216, 76, 55, 237, 208, 216,
+    76, 251, 151, 57, 216, 76, 3, 228, 149, 216, 76, 17, 192, 76, 216, 76,
+    17, 101, 216, 76, 17, 104, 216, 76, 17, 133, 216, 76, 17, 134, 216, 76,
+    17, 151, 216, 76, 17, 170, 216, 76, 17, 179, 216, 76, 17, 174, 216, 76,
+    17, 182, 100, 248, 12, 4, 211, 150, 100, 207, 16, 248, 11, 100, 55, 248,
+    12, 4, 211, 150, 100, 198, 170, 248, 12, 4, 211, 150, 100, 248, 12, 4,
+    55, 211, 150, 100, 207, 16, 248, 12, 4, 211, 150, 100, 207, 16, 248, 12,
+    4, 55, 211, 150, 100, 223, 121, 248, 11, 100, 223, 121, 248, 12, 4, 55,
+    211, 150, 100, 201, 63, 248, 11, 100, 201, 63, 248, 12, 4, 211, 150, 100,
+    201, 63, 248, 12, 4, 55, 211, 150, 100, 163, 201, 63, 248, 12, 4, 55,
+    211, 150, 200, 137, 1, 64, 200, 137, 1, 252, 33, 200, 137, 1, 70, 200,
+    137, 1, 223, 224, 200, 137, 1, 68, 200, 137, 1, 196, 251, 200, 137, 1,
+    71, 200, 137, 1, 251, 63, 200, 137, 1, 74, 200, 137, 1, 250, 8, 200, 137,
+    1, 160, 200, 137, 1, 221, 250, 200, 137, 1, 231, 233, 200, 137, 1, 231,
+    84, 200, 137, 1, 214, 165, 200, 137, 1, 247, 19, 200, 137, 1, 246, 117,
+    200, 137, 1, 223, 62, 200, 137, 1, 223, 28, 200, 137, 1, 212, 201, 200,
+    137, 1, 198, 83, 200, 137, 1, 198, 71, 200, 137, 1, 237, 161, 200, 137,
+    1, 237, 145, 200, 137, 1, 213, 178, 200, 137, 1, 189, 200, 137, 1, 199,
+    240, 200, 137, 1, 238, 0, 200, 137, 1, 237, 40, 200, 137, 1, 181, 200,
+    137, 1, 166, 200, 137, 1, 210, 94, 200, 137, 1, 249, 3, 200, 137, 1, 248,
+    54, 200, 137, 1, 172, 200, 137, 1, 168, 200, 137, 1, 167, 200, 137, 1,
+    177, 200, 137, 1, 196, 157, 200, 137, 1, 204, 64, 200, 137, 1, 188, 200,
+    137, 1, 144, 200, 137, 1, 207, 3, 200, 137, 3, 250, 168, 200, 137, 3,
+    196, 6, 200, 137, 18, 3, 252, 33, 200, 137, 18, 3, 70, 200, 137, 18, 3,
+    223, 224, 200, 137, 18, 3, 68, 200, 137, 18, 3, 196, 251, 200, 137, 18,
+    3, 71, 200, 137, 18, 3, 251, 63, 200, 137, 18, 3, 74, 200, 137, 18, 3,
+    250, 8, 200, 137, 3, 196, 11, 200, 137, 3, 212, 241, 200, 137, 1, 250,
+    112, 221, 250, 200, 137, 17, 192, 76, 200, 137, 17, 101, 200, 137, 17,
+    104, 200, 137, 17, 133, 200, 137, 17, 134, 200, 137, 17, 151, 200, 137,
+    17, 170, 200, 137, 17, 179, 200, 137, 17, 174, 200, 137, 17, 182, 251,
+    67, 1, 160, 251, 67, 1, 221, 250, 251, 67, 1, 214, 165, 251, 67, 1, 181,
+    251, 67, 1, 189, 251, 67, 1, 250, 249, 189, 251, 67, 1, 166, 251, 67, 1,
+    210, 94, 251, 67, 1, 249, 3, 251, 67, 1, 172, 251, 67, 1, 223, 62, 251,
+    67, 1, 246, 117, 251, 67, 1, 199, 240, 251, 67, 1, 167, 251, 67, 1, 177,
+    251, 67, 1, 188, 251, 67, 1, 212, 201, 251, 67, 1, 144, 251, 67, 1, 64,
+    251, 67, 1, 238, 0, 251, 67, 1, 237, 40, 251, 67, 1, 231, 233, 251, 67,
+    1, 250, 249, 231, 233, 251, 67, 1, 231, 84, 251, 67, 1, 248, 54, 251, 67,
+    1, 223, 28, 251, 67, 1, 250, 249, 249, 3, 251, 67, 116, 3, 217, 35, 177,
+    251, 67, 116, 3, 217, 35, 167, 251, 67, 116, 3, 217, 35, 219, 196, 167,
+    251, 67, 18, 3, 64, 251, 67, 18, 3, 252, 33, 251, 67, 18, 3, 70, 251, 67,
+    18, 3, 223, 224, 251, 67, 18, 3, 68, 251, 67, 18, 3, 196, 251, 251, 67,
+    18, 3, 71, 251, 67, 18, 3, 249, 241, 251, 67, 18, 3, 74, 251, 67, 18, 3,
+    251, 63, 251, 67, 18, 3, 250, 241, 251, 67, 3, 221, 181, 251, 67, 17,
+    192, 76, 251, 67, 17, 101, 251, 67, 17, 104, 251, 67, 17, 133, 251, 67,
+    17, 134, 251, 67, 17, 151, 251, 67, 17, 170, 251, 67, 17, 179, 251, 67,
+    17, 174, 251, 67, 17, 182, 251, 67, 31, 200, 30, 251, 67, 31, 197, 239,
+    251, 67, 3, 2, 205, 208, 251, 67, 3, 205, 208, 251, 67, 3, 206, 203, 251,
+    67, 16, 196, 39, 236, 133, 1, 64, 236, 133, 1, 252, 33, 236, 133, 1, 70,
+    236, 133, 1, 223, 224, 236, 133, 1, 68, 236, 133, 1, 196, 251, 236, 133,
+    1, 71, 236, 133, 1, 251, 63, 236, 133, 1, 74, 236, 133, 1, 250, 8, 236,
+    133, 1, 160, 236, 133, 1, 221, 250, 236, 133, 1, 231, 233, 236, 133, 1,
+    231, 84, 236, 133, 1, 214, 165, 236, 133, 1, 247, 19, 236, 133, 1, 246,
+    117, 236, 133, 1, 223, 62, 236, 133, 1, 223, 28, 236, 133, 1, 212, 201,
+    236, 133, 1, 198, 83, 236, 133, 1, 198, 71, 236, 133, 1, 237, 161, 236,
+    133, 1, 237, 145, 236, 133, 1, 213, 178, 236, 133, 1, 189, 236, 133, 1,
+    199, 240, 236, 133, 1, 238, 0, 236, 133, 1, 237, 40, 236, 133, 1, 181,
+    236, 133, 1, 166, 236, 133, 1, 210, 94, 236, 133, 1, 249, 3, 236, 133, 1,
+    248, 54, 236, 133, 1, 172, 236, 133, 1, 168, 236, 133, 1, 167, 236, 133,
+    1, 177, 236, 133, 1, 196, 157, 236, 133, 1, 204, 64, 236, 133, 1, 202,
+    92, 236, 133, 1, 188, 236, 133, 1, 144, 236, 133, 1, 207, 3, 236, 133,
+    18, 3, 252, 33, 236, 133, 18, 3, 70, 236, 133, 18, 3, 223, 224, 236, 133,
+    18, 3, 68, 236, 133, 18, 3, 196, 251, 236, 133, 18, 3, 118, 150, 236,
+    133, 18, 3, 118, 207, 4, 236, 133, 18, 3, 71, 236, 133, 18, 3, 251, 63,
+    236, 133, 18, 3, 74, 236, 133, 18, 3, 250, 8, 236, 133, 3, 250, 168, 236,
+    133, 3, 196, 6, 236, 133, 3, 196, 11, 236, 133, 3, 212, 241, 236, 133,
+    251, 151, 57, 194, 141, 242, 117, 6, 1, 214, 164, 194, 141, 242, 117, 6,
+    1, 64, 194, 141, 242, 117, 6, 1, 194, 72, 194, 141, 242, 117, 6, 1, 192,
+    214, 194, 141, 242, 117, 6, 1, 168, 194, 141, 242, 117, 6, 1, 193, 1,
+    194, 141, 242, 117, 6, 1, 223, 224, 194, 141, 242, 117, 6, 1, 196, 251,
+    194, 141, 242, 117, 6, 1, 71, 194, 141, 242, 117, 6, 1, 74, 194, 141,
+    242, 117, 6, 1, 250, 214, 194, 141, 242, 117, 6, 1, 231, 233, 194, 141,
+    242, 117, 6, 1, 221, 113, 194, 141, 242, 117, 6, 1, 234, 51, 194, 141,
+    242, 117, 6, 1, 192, 193, 194, 141, 242, 117, 6, 1, 197, 111, 194, 141,
+    242, 117, 6, 1, 234, 70, 194, 141, 242, 117, 6, 1, 212, 3, 194, 141, 242,
+    117, 6, 1, 198, 78, 194, 141, 242, 117, 6, 1, 212, 227, 194, 141, 242,
+    117, 6, 1, 238, 0, 194, 141, 242, 117, 6, 1, 250, 26, 194, 141, 242, 117,
+    6, 1, 250, 241, 194, 141, 242, 117, 6, 1, 247, 124, 194, 141, 242, 117,
+    6, 1, 209, 51, 194, 141, 242, 117, 6, 1, 229, 135, 194, 141, 242, 117, 6,
+    1, 229, 23, 194, 141, 242, 117, 6, 1, 228, 206, 194, 141, 242, 117, 6, 1,
+    230, 28, 194, 141, 242, 117, 6, 1, 202, 43, 194, 141, 242, 117, 6, 1,
+    203, 97, 194, 141, 242, 117, 6, 1, 195, 253, 194, 141, 242, 117, 2, 1,
+    214, 164, 194, 141, 242, 117, 2, 1, 64, 194, 141, 242, 117, 2, 1, 194,
+    72, 194, 141, 242, 117, 2, 1, 192, 214, 194, 141, 242, 117, 2, 1, 168,
+    194, 141, 242, 117, 2, 1, 193, 1, 194, 141, 242, 117, 2, 1, 223, 224,
+    194, 141, 242, 117, 2, 1, 196, 251, 194, 141, 242, 117, 2, 1, 71, 194,
+    141, 242, 117, 2, 1, 74, 194, 141, 242, 117, 2, 1, 250, 214, 194, 141,
+    242, 117, 2, 1, 231, 233, 194, 141, 242, 117, 2, 1, 221, 113, 194, 141,
+    242, 117, 2, 1, 234, 51, 194, 141, 242, 117, 2, 1, 192, 193, 194, 141,
+    242, 117, 2, 1, 197, 111, 194, 141, 242, 117, 2, 1, 234, 70, 194, 141,
+    242, 117, 2, 1, 212, 3, 194, 141, 242, 117, 2, 1, 198, 78, 194, 141, 242,
+    117, 2, 1, 212, 227, 194, 141, 242, 117, 2, 1, 238, 0, 194, 141, 242,
+    117, 2, 1, 250, 26, 194, 141, 242, 117, 2, 1, 250, 241, 194, 141, 242,
+    117, 2, 1, 247, 124, 194, 141, 242, 117, 2, 1, 209, 51, 194, 141, 242,
+    117, 2, 1, 229, 135, 194, 141, 242, 117, 2, 1, 229, 23, 194, 141, 242,
+    117, 2, 1, 228, 206, 194, 141, 242, 117, 2, 1, 230, 28, 194, 141, 242,
+    117, 2, 1, 202, 43, 194, 141, 242, 117, 2, 1, 203, 97, 194, 141, 242,
+    117, 2, 1, 195, 253, 194, 141, 242, 117, 17, 192, 76, 194, 141, 242, 117,
+    17, 101, 194, 141, 242, 117, 17, 104, 194, 141, 242, 117, 17, 133, 194,
+    141, 242, 117, 17, 134, 194, 141, 242, 117, 17, 151, 194, 141, 242, 117,
+    17, 170, 194, 141, 242, 117, 17, 179, 194, 141, 242, 117, 17, 174, 194,
+    141, 242, 117, 17, 182, 194, 141, 242, 117, 31, 200, 30, 194, 141, 242,
+    117, 31, 197, 239, 194, 141, 242, 117, 31, 199, 184, 194, 141, 242, 117,
+    31, 232, 126, 194, 141, 242, 117, 31, 233, 3, 194, 141, 242, 117, 31,
+    203, 25, 194, 141, 242, 117, 31, 204, 140, 194, 141, 242, 117, 31, 234,
+    137, 194, 141, 242, 117, 31, 214, 11, 194, 141, 242, 117, 211, 219, 236,
+    181, 251, 37, 1, 64, 236, 181, 251, 37, 1, 252, 33, 236, 181, 251, 37, 1,
+    70, 236, 181, 251, 37, 1, 223, 224, 236, 181, 251, 37, 1, 68, 236, 181,
+    251, 37, 1, 196, 251, 236, 181, 251, 37, 1, 71, 236, 181, 251, 37, 1, 74,
+    236, 181, 251, 37, 1, 160, 236, 181, 251, 37, 1, 221, 250, 236, 181, 251,
+    37, 1, 231, 233, 236, 181, 251, 37, 1, 231, 84, 236, 181, 251, 37, 1,
+    214, 165, 236, 181, 251, 37, 1, 247, 19, 236, 181, 251, 37, 1, 246, 117,
+    236, 181, 251, 37, 1, 223, 62, 236, 181, 251, 37, 1, 212, 201, 236, 181,
+    251, 37, 1, 198, 83, 236, 181, 251, 37, 1, 237, 161, 236, 181, 251, 37,
+    1, 237, 145, 236, 181, 251, 37, 1, 213, 178, 236, 181, 251, 37, 1, 189,
+    236, 181, 251, 37, 1, 199, 240, 236, 181, 251, 37, 1, 238, 0, 236, 181,
+    251, 37, 1, 237, 40, 236, 181, 251, 37, 1, 181, 236, 181, 251, 37, 1,
+    166, 236, 181, 251, 37, 1, 210, 94, 236, 181, 251, 37, 1, 249, 3, 236,
+    181, 251, 37, 1, 248, 54, 236, 181, 251, 37, 1, 172, 236, 181, 251, 37,
+    1, 168, 236, 181, 251, 37, 1, 192, 164, 236, 181, 251, 37, 1, 167, 236,
+    181, 251, 37, 1, 177, 236, 181, 251, 37, 1, 196, 157, 236, 181, 251, 37,
+    1, 204, 64, 236, 181, 251, 37, 1, 202, 92, 236, 181, 251, 37, 1, 188,
+    236, 181, 251, 37, 1, 144, 236, 181, 251, 37, 1, 219, 137, 236, 181, 251,
+    37, 1, 192, 112, 236, 181, 251, 37, 18, 3, 252, 33, 236, 181, 251, 37,
+    18, 3, 70, 236, 181, 251, 37, 18, 3, 223, 224, 236, 181, 251, 37, 18, 3,
+    68, 236, 181, 251, 37, 18, 3, 196, 251, 236, 181, 251, 37, 18, 3, 71,
+    236, 181, 251, 37, 18, 3, 251, 63, 236, 181, 251, 37, 18, 3, 74, 236,
+    181, 251, 37, 3, 250, 168, 236, 181, 251, 37, 3, 246, 234, 236, 181, 251,
+    37, 3, 230, 80, 236, 181, 251, 37, 196, 11, 236, 181, 251, 37, 209, 111,
+    215, 49, 57, 236, 181, 251, 37, 217, 35, 168, 236, 181, 251, 37, 88, 167,
+    236, 181, 251, 37, 217, 35, 167, 236, 181, 251, 37, 3, 212, 241, 236,
+    181, 251, 37, 55, 237, 208, 236, 181, 251, 37, 231, 197, 232, 247, 236,
+    181, 251, 37, 234, 80, 80, 199, 245, 77, 236, 181, 251, 37, 17, 192, 76,
+    236, 181, 251, 37, 17, 101, 236, 181, 251, 37, 17, 104, 236, 181, 251,
+    37, 17, 133, 236, 181, 251, 37, 17, 134, 236, 181, 251, 37, 17, 151, 236,
+    181, 251, 37, 17, 170, 236, 181, 251, 37, 17, 179, 236, 181, 251, 37, 17,
+    174, 236, 181, 251, 37, 17, 182, 215, 58, 1, 64, 215, 58, 1, 252, 33,
+    215, 58, 1, 70, 215, 58, 1, 223, 224, 215, 58, 1, 68, 215, 58, 1, 196,
+    251, 215, 58, 1, 118, 150, 215, 58, 1, 118, 207, 4, 215, 58, 1, 71, 215,
+    58, 1, 251, 63, 215, 58, 1, 74, 215, 58, 1, 250, 8, 215, 58, 1, 160, 215,
+    58, 1, 221, 250, 215, 58, 1, 231, 233, 215, 58, 1, 231, 84, 215, 58, 1,
+    214, 165, 215, 58, 1, 247, 19, 215, 58, 1, 246, 117, 215, 58, 1, 223, 62,
+    215, 58, 1, 223, 28, 215, 58, 1, 212, 201, 215, 58, 1, 198, 83, 215, 58,
+    1, 198, 71, 215, 58, 1, 237, 161, 215, 58, 1, 237, 145, 215, 58, 1, 213,
+    178, 215, 58, 1, 189, 215, 58, 1, 199, 240, 215, 58, 1, 238, 0, 215, 58,
+    1, 237, 40, 215, 58, 1, 181, 215, 58, 1, 166, 215, 58, 1, 210, 94, 215,
+    58, 1, 249, 3, 215, 58, 1, 248, 54, 215, 58, 1, 172, 215, 58, 1, 168,
+    215, 58, 1, 167, 215, 58, 1, 177, 215, 58, 1, 196, 157, 215, 58, 1, 204,
+    64, 215, 58, 1, 202, 92, 215, 58, 1, 188, 215, 58, 1, 144, 215, 58, 1,
+    219, 137, 215, 58, 1, 207, 3, 215, 58, 18, 3, 252, 33, 215, 58, 18, 3,
+    70, 215, 58, 18, 3, 223, 224, 215, 58, 18, 3, 68, 215, 58, 18, 3, 196,
+    251, 215, 58, 18, 3, 118, 150, 215, 58, 18, 3, 118, 207, 4, 215, 58, 18,
+    3, 71, 215, 58, 18, 3, 251, 63, 215, 58, 18, 3, 74, 215, 58, 18, 3, 250,
+    8, 215, 58, 3, 250, 168, 215, 58, 3, 196, 6, 215, 58, 3, 196, 11, 215,
+    58, 3, 249, 246, 215, 58, 3, 203, 113, 215, 58, 229, 237, 215, 58, 18, 3,
+    209, 91, 71, 192, 99, 50, 1, 64, 192, 99, 50, 18, 3, 70, 192, 99, 50, 18,
+    3, 197, 104, 192, 99, 50, 18, 3, 68, 192, 99, 50, 18, 3, 71, 192, 99, 50,
+    18, 3, 212, 0, 192, 99, 50, 18, 3, 74, 192, 99, 50, 18, 3, 251, 63, 192,
+    99, 50, 18, 3, 250, 8, 192, 99, 50, 18, 3, 207, 168, 70, 192, 99, 50, 18,
+    220, 2, 77, 192, 99, 50, 1, 160, 192, 99, 50, 1, 221, 250, 192, 99, 50,
+    1, 231, 233, 192, 99, 50, 1, 231, 84, 192, 99, 50, 1, 214, 165, 192, 99,
+    50, 1, 247, 19, 192, 99, 50, 1, 246, 117, 192, 99, 50, 1, 223, 62, 192,
+    99, 50, 1, 212, 201, 192, 99, 50, 1, 198, 83, 192, 99, 50, 1, 198, 71,
+    192, 99, 50, 1, 237, 161, 192, 99, 50, 1, 237, 145, 192, 99, 50, 1, 213,
+    178, 192, 99, 50, 1, 189, 192, 99, 50, 1, 199, 240, 192, 99, 50, 1, 238,
+    0, 192, 99, 50, 1, 237, 40, 192, 99, 50, 1, 181, 192, 99, 50, 1, 166,
+    192, 99, 50, 1, 210, 94, 192, 99, 50, 1, 249, 3, 192, 99, 50, 1, 248, 54,
+    192, 99, 50, 1, 172, 192, 99, 50, 1, 198, 118, 192, 99, 50, 1, 198, 108,
+    192, 99, 50, 1, 235, 17, 192, 99, 50, 1, 235, 11, 192, 99, 50, 1, 192,
+    71, 192, 99, 50, 1, 192, 112, 192, 99, 50, 1, 255, 41, 192, 99, 50, 1,
+    168, 192, 99, 50, 1, 167, 192, 99, 50, 1, 177, 192, 99, 50, 1, 196, 157,
+    192, 99, 50, 1, 204, 64, 192, 99, 50, 1, 202, 92, 192, 99, 50, 1, 188,
+    192, 99, 50, 1, 144, 192, 99, 50, 1, 221, 47, 192, 99, 50, 52, 116, 77,
+    192, 99, 50, 3, 196, 11, 192, 99, 50, 3, 246, 234, 192, 99, 50, 3, 246,
+    235, 4, 211, 150, 192, 99, 50, 3, 246, 237, 4, 211, 150, 192, 99, 50, 3,
+    250, 168, 192, 99, 50, 3, 196, 6, 192, 99, 50, 242, 66, 1, 167, 192, 99,
+    50, 242, 67, 1, 168, 192, 99, 50, 242, 67, 1, 167, 192, 99, 50, 242, 67,
+    1, 177, 192, 99, 50, 242, 67, 1, 196, 157, 192, 99, 50, 88, 229, 246, 77,
+    192, 99, 50, 242, 80, 229, 246, 77, 192, 99, 50, 122, 198, 103, 192, 99,
+    50, 122, 204, 56, 192, 99, 50, 122, 55, 204, 56, 192, 99, 50, 122, 184,
+    198, 103, 192, 99, 50, 88, 235, 103, 229, 246, 77, 192, 99, 50, 242, 80,
+    235, 103, 229, 246, 77, 192, 99, 50, 201, 163, 202, 164, 1, 64, 202, 164,
+    18, 3, 70, 202, 164, 18, 3, 197, 104, 202, 164, 18, 3, 68, 202, 164, 18,
+    3, 71, 202, 164, 18, 3, 74, 202, 164, 18, 3, 212, 0, 202, 164, 18, 3,
+    251, 63, 202, 164, 18, 3, 250, 8, 202, 164, 18, 3, 118, 150, 202, 164,
+    18, 3, 118, 165, 202, 164, 18, 220, 2, 77, 202, 164, 1, 160, 202, 164, 1,
+    221, 250, 202, 164, 1, 231, 233, 202, 164, 1, 231, 84, 202, 164, 1, 214,
+    165, 202, 164, 1, 247, 19, 202, 164, 1, 246, 117, 202, 164, 1, 223, 62,
+    202, 164, 1, 223, 28, 202, 164, 1, 212, 201, 202, 164, 1, 198, 83, 202,
+    164, 1, 198, 71, 202, 164, 1, 237, 161, 202, 164, 1, 237, 145, 202, 164,
+    1, 213, 178, 202, 164, 1, 189, 202, 164, 1, 199, 240, 202, 164, 1, 238,
+    0, 202, 164, 1, 237, 40, 202, 164, 1, 181, 202, 164, 1, 166, 202, 164, 1,
+    210, 94, 202, 164, 1, 249, 3, 202, 164, 1, 248, 54, 202, 164, 1, 172,
+    202, 164, 1, 198, 118, 202, 164, 1, 198, 108, 202, 164, 1, 235, 17, 202,
+    164, 1, 192, 71, 202, 164, 1, 192, 112, 202, 164, 1, 255, 41, 202, 164,
+    1, 168, 202, 164, 1, 167, 202, 164, 1, 177, 202, 164, 1, 196, 157, 202,
+    164, 1, 204, 64, 202, 164, 1, 202, 92, 202, 164, 1, 188, 202, 164, 1,
+    144, 202, 164, 1, 221, 47, 202, 164, 3, 223, 13, 202, 164, 3, 197, 39,
+    202, 164, 242, 66, 1, 167, 202, 164, 242, 66, 1, 177, 202, 164, 242, 66,
+    1, 204, 64, 202, 164, 242, 66, 1, 188, 202, 164, 52, 116, 3, 232, 44,
+    202, 164, 52, 116, 3, 222, 184, 202, 164, 52, 116, 3, 214, 167, 202, 164,
+    52, 116, 3, 238, 95, 202, 164, 52, 116, 3, 215, 151, 202, 164, 52, 116,
+    3, 249, 226, 202, 164, 52, 116, 3, 218, 236, 202, 164, 52, 116, 3, 150,
+    202, 164, 52, 116, 3, 165, 202, 164, 52, 116, 3, 204, 66, 202, 164, 52,
+    116, 3, 206, 158, 202, 164, 52, 116, 3, 255, 41, 202, 164, 3, 250, 168,
+    202, 164, 3, 196, 6, 202, 164, 231, 146, 77, 202, 164, 201, 163, 202,
+    164, 122, 198, 103, 202, 164, 122, 204, 56, 202, 164, 122, 55, 204, 56,
+    202, 164, 122, 209, 204, 202, 164, 229, 246, 122, 4, 216, 30, 26, 201,
+    124, 26, 198, 170, 232, 199, 202, 164, 229, 246, 122, 4, 216, 30, 26,
+    201, 124, 26, 232, 199, 202, 164, 229, 246, 122, 4, 216, 30, 26, 201,
+    123, 202, 164, 200, 16, 217, 126, 202, 164, 200, 16, 217, 125, 210, 198,
+    242, 135, 230, 12, 1, 166, 210, 198, 242, 135, 230, 12, 1, 160, 210, 198,
+    242, 135, 230, 12, 1, 177, 210, 198, 242, 135, 230, 12, 1, 172, 210, 198,
+    242, 135, 230, 12, 1, 238, 0, 210, 198, 242, 135, 230, 12, 1, 192, 112,
+    210, 198, 242, 135, 230, 12, 1, 196, 157, 210, 198, 242, 135, 230, 12, 1,
+    214, 165, 210, 198, 242, 135, 230, 12, 1, 144, 210, 198, 242, 135, 230,
+    12, 1, 231, 233, 210, 198, 242, 135, 230, 12, 1, 221, 250, 210, 198, 242,
+    135, 230, 12, 1, 188, 210, 198, 242, 135, 230, 12, 1, 249, 3, 210, 198,
+    242, 135, 230, 12, 1, 247, 19, 210, 198, 242, 135, 230, 12, 1, 189, 210,
+    198, 242, 135, 230, 12, 1, 199, 240, 210, 198, 242, 135, 230, 12, 1, 181,
+    210, 198, 242, 135, 230, 12, 1, 210, 94, 210, 198, 242, 135, 230, 12, 1,
+    167, 210, 198, 242, 135, 230, 12, 1, 233, 97, 210, 198, 242, 135, 230,
+    12, 1, 246, 117, 210, 198, 242, 135, 230, 12, 1, 64, 210, 198, 242, 135,
+    230, 12, 1, 71, 210, 198, 242, 135, 230, 12, 1, 70, 210, 198, 242, 135,
+    230, 12, 1, 74, 210, 198, 242, 135, 230, 12, 1, 68, 210, 198, 242, 135,
+    230, 12, 1, 197, 119, 210, 198, 242, 135, 230, 12, 1, 228, 58, 210, 198,
+    242, 135, 230, 12, 1, 52, 211, 93, 210, 198, 242, 135, 230, 12, 1, 52,
+    222, 184, 210, 198, 242, 135, 230, 12, 1, 52, 200, 228, 210, 198, 242,
+    135, 230, 12, 1, 52, 218, 236, 210, 198, 242, 135, 230, 12, 1, 52, 215,
+    151, 210, 198, 242, 135, 230, 12, 1, 52, 165, 210, 198, 242, 135, 230,
+    12, 1, 52, 194, 202, 210, 198, 242, 135, 230, 12, 1, 52, 214, 167, 210,
+    198, 242, 135, 230, 12, 1, 52, 193, 148, 210, 198, 242, 135, 230, 12,
+    207, 73, 158, 219, 84, 210, 198, 242, 135, 230, 12, 207, 73, 199, 18,
+    210, 198, 242, 135, 230, 12, 206, 36, 231, 6, 201, 238, 210, 198, 242,
+    135, 230, 12, 207, 73, 158, 184, 232, 243, 210, 198, 242, 135, 230, 12,
+    207, 73, 158, 232, 243, 210, 198, 242, 135, 230, 12, 206, 36, 231, 6,
+    201, 239, 232, 243, 210, 198, 242, 135, 230, 12, 206, 36, 158, 219, 84,
+    210, 198, 242, 135, 230, 12, 206, 36, 199, 18, 210, 198, 242, 135, 230,
+    12, 206, 36, 158, 184, 232, 243, 210, 198, 242, 135, 230, 12, 206, 36,
+    158, 232, 243, 210, 198, 242, 135, 230, 12, 216, 161, 199, 18, 210, 198,
+    242, 135, 230, 12, 231, 6, 201, 239, 196, 136, 210, 198, 242, 135, 230,
+    12, 216, 161, 158, 184, 232, 243, 210, 198, 242, 135, 230, 12, 216, 161,
+    158, 232, 243, 210, 198, 242, 135, 230, 12, 219, 50, 158, 219, 84, 210,
+    198, 242, 135, 230, 12, 219, 50, 199, 18, 210, 198, 242, 135, 230, 12,
+    231, 6, 201, 238, 210, 198, 242, 135, 230, 12, 219, 50, 158, 184, 232,
+    243, 210, 198, 242, 135, 230, 12, 219, 50, 158, 232, 243, 210, 198, 242,
+    135, 230, 12, 231, 6, 201, 239, 232, 243, 248, 52, 1, 64, 248, 52, 1,
+    252, 33, 248, 52, 1, 70, 248, 52, 1, 223, 224, 248, 52, 1, 68, 248, 52,
+    1, 196, 251, 248, 52, 1, 118, 150, 248, 52, 1, 118, 207, 4, 248, 52, 1,
+    118, 165, 248, 52, 1, 71, 248, 52, 1, 251, 63, 248, 52, 1, 74, 248, 52,
+    1, 250, 8, 248, 52, 1, 160, 248, 52, 1, 221, 250, 248, 52, 1, 231, 233,
+    248, 52, 1, 231, 84, 248, 52, 1, 214, 165, 248, 52, 1, 247, 19, 248, 52,
+    1, 246, 117, 248, 52, 1, 223, 62, 248, 52, 1, 223, 28, 248, 52, 1, 212,
+    201, 248, 52, 1, 198, 83, 248, 52, 1, 198, 71, 248, 52, 1, 237, 161, 248,
+    52, 1, 237, 145, 248, 52, 1, 213, 178, 248, 52, 1, 189, 248, 52, 1, 199,
+    240, 248, 52, 1, 238, 0, 248, 52, 1, 237, 40, 248, 52, 1, 181, 248, 52,
+    1, 166, 248, 52, 1, 210, 94, 248, 52, 1, 249, 3, 248, 52, 1, 248, 54,
+    248, 52, 1, 172, 248, 52, 1, 168, 248, 52, 1, 167, 248, 52, 1, 177, 248,
+    52, 1, 196, 157, 248, 52, 1, 204, 64, 248, 52, 1, 202, 92, 248, 52, 1,
+    188, 248, 52, 1, 144, 248, 52, 18, 3, 252, 33, 248, 52, 18, 3, 70, 248,
+    52, 18, 3, 223, 224, 248, 52, 18, 3, 68, 248, 52, 18, 3, 196, 251, 248,
+    52, 18, 3, 118, 150, 248, 52, 18, 3, 118, 207, 4, 248, 52, 18, 3, 118,
+    165, 248, 52, 18, 3, 71, 248, 52, 18, 3, 251, 63, 248, 52, 18, 3, 74,
+    248, 52, 18, 3, 250, 8, 248, 52, 3, 246, 234, 248, 52, 3, 250, 168, 248,
+    52, 3, 196, 6, 248, 52, 3, 196, 11, 248, 52, 3, 249, 246, 248, 52, 237,
+    208, 248, 52, 55, 237, 208, 248, 52, 194, 11, 204, 165, 248, 52, 231,
+    197, 232, 246, 248, 52, 231, 197, 232, 245, 248, 52, 17, 192, 76, 248,
+    52, 17, 101, 248, 52, 17, 104, 248, 52, 17, 133, 248, 52, 17, 134, 248,
+    52, 17, 151, 248, 52, 17, 170, 248, 52, 17, 179, 248, 52, 17, 174, 248,
+    52, 17, 182, 248, 52, 31, 101, 248, 52, 31, 104, 248, 52, 31, 133, 248,
+    52, 31, 134, 248, 52, 31, 151, 248, 52, 31, 170, 248, 52, 31, 179, 248,
+    52, 31, 174, 248, 52, 31, 182, 248, 52, 31, 200, 30, 248, 52, 31, 197,
+    239, 248, 52, 31, 199, 184, 248, 52, 31, 232, 126, 248, 52, 31, 233, 3,
+    248, 52, 31, 203, 25, 248, 52, 31, 204, 140, 248, 52, 31, 234, 137, 248,
+    52, 31, 214, 11, 248, 52, 228, 161, 197, 55, 77, 217, 128, 229, 246, 77,
+    217, 128, 122, 204, 56, 217, 128, 1, 160, 217, 128, 1, 221, 250, 217,
+    128, 1, 231, 233, 217, 128, 1, 214, 165, 217, 128, 1, 247, 19, 217, 128,
+    1, 246, 117, 217, 128, 1, 223, 62, 217, 128, 1, 212, 201, 217, 128, 1,
+    189, 217, 128, 1, 199, 240, 217, 128, 1, 238, 0, 217, 128, 1, 181, 217,
+    128, 1, 166, 217, 128, 1, 210, 94, 217, 128, 1, 249, 3, 217, 128, 1, 172,
+    217, 128, 1, 198, 118, 217, 128, 1, 198, 108, 217, 128, 1, 235, 17, 217,
+    128, 1, 194, 169, 217, 128, 1, 192, 71, 217, 128, 1, 192, 112, 217, 128,
+    1, 255, 41, 217, 128, 1, 168, 217, 128, 1, 167, 217, 128, 1, 177, 217,
+    128, 1, 204, 64, 217, 128, 1, 188, 217, 128, 1, 144, 217, 128, 1, 64,
+    217, 128, 201, 164, 1, 160, 217, 128, 201, 164, 1, 221, 250, 217, 128,
+    201, 164, 1, 231, 233, 217, 128, 201, 164, 1, 214, 165, 217, 128, 201,
+    164, 1, 247, 19, 217, 128, 201, 164, 1, 246, 117, 217, 128, 201, 164, 1,
+    223, 62, 217, 128, 201, 164, 1, 212, 201, 217, 128, 201, 164, 1, 189,
+    217, 128, 201, 164, 1, 199, 240, 217, 128, 201, 164, 1, 238, 0, 217, 128,
+    201, 164, 1, 181, 217, 128, 201, 164, 1, 166, 217, 128, 201, 164, 1, 210,
+    94, 217, 128, 201, 164, 1, 249, 3, 217, 128, 201, 164, 1, 172, 217, 128,
+    201, 164, 1, 198, 118, 217, 128, 201, 164, 1, 198, 108, 217, 128, 201,
+    164, 1, 235, 17, 217, 128, 201, 164, 1, 194, 169, 217, 128, 201, 164, 1,
+    192, 71, 217, 128, 201, 164, 1, 192, 112, 217, 128, 201, 164, 1, 168,
+    217, 128, 201, 164, 1, 167, 217, 128, 201, 164, 1, 177, 217, 128, 201,
+    164, 1, 204, 64, 217, 128, 201, 164, 1, 188, 217, 128, 201, 164, 1, 144,
+    217, 128, 201, 164, 1, 64, 217, 128, 18, 3, 252, 33, 217, 128, 18, 3, 70,
+    217, 128, 18, 3, 68, 217, 128, 18, 3, 71, 217, 128, 18, 3, 74, 217, 128,
+    3, 250, 168, 217, 128, 3, 246, 234, 217, 112, 127, 1, 64, 217, 112, 127,
+    1, 252, 33, 217, 112, 127, 1, 70, 217, 112, 127, 1, 223, 224, 217, 112,
+    127, 1, 68, 217, 112, 127, 1, 196, 251, 217, 112, 127, 1, 71, 217, 112,
+    127, 1, 251, 63, 217, 112, 127, 1, 74, 217, 112, 127, 1, 250, 8, 217,
+    112, 127, 1, 160, 217, 112, 127, 1, 221, 250, 217, 112, 127, 1, 231, 233,
+    217, 112, 127, 1, 231, 84, 217, 112, 127, 1, 214, 165, 217, 112, 127, 1,
+    247, 19, 217, 112, 127, 1, 246, 117, 217, 112, 127, 1, 223, 62, 217, 112,
+    127, 1, 223, 28, 217, 112, 127, 1, 212, 201, 217, 112, 127, 1, 198, 83,
+    217, 112, 127, 1, 198, 71, 217, 112, 127, 1, 237, 161, 217, 112, 127, 1,
+    237, 145, 217, 112, 127, 1, 213, 178, 217, 112, 127, 1, 189, 217, 112,
+    127, 1, 199, 240, 217, 112, 127, 1, 238, 0, 217, 112, 127, 1, 237, 40,
+    217, 112, 127, 1, 181, 217, 112, 127, 1, 166, 217, 112, 127, 1, 210, 94,
+    217, 112, 127, 1, 249, 3, 217, 112, 127, 1, 248, 54, 217, 112, 127, 1,
+    172, 217, 112, 127, 1, 168, 217, 112, 127, 1, 167, 217, 112, 127, 1, 177,
+    217, 112, 127, 1, 196, 157, 217, 112, 127, 1, 204, 64, 217, 112, 127, 1,
+    202, 92, 217, 112, 127, 1, 188, 217, 112, 127, 1, 144, 217, 112, 127, 1,
+    219, 137, 217, 112, 127, 1, 221, 47, 217, 112, 127, 1, 222, 234, 217,
+    112, 127, 1, 198, 223, 217, 112, 127, 18, 3, 252, 33, 217, 112, 127, 18,
+    3, 70, 217, 112, 127, 18, 3, 223, 224, 217, 112, 127, 18, 3, 68, 217,
+    112, 127, 18, 3, 196, 251, 217, 112, 127, 18, 3, 118, 150, 217, 112, 127,
+    18, 3, 71, 217, 112, 127, 18, 3, 251, 63, 217, 112, 127, 18, 3, 74, 217,
+    112, 127, 18, 3, 250, 8, 217, 112, 127, 3, 250, 168, 217, 112, 127, 3,
+    196, 6, 217, 112, 127, 3, 212, 241, 217, 112, 127, 3, 246, 236, 217, 112,
+    127, 3, 230, 80, 217, 112, 127, 196, 11, 217, 112, 127, 207, 194, 217,
+    112, 127, 208, 71, 217, 112, 127, 17, 192, 76, 217, 112, 127, 17, 101,
+    217, 112, 127, 17, 104, 217, 112, 127, 17, 133, 217, 112, 127, 17, 134,
+    217, 112, 127, 17, 151, 217, 112, 127, 17, 170, 217, 112, 127, 17, 179,
+    217, 112, 127, 17, 174, 217, 112, 127, 17, 182, 230, 164, 127, 1, 64,
+    230, 164, 127, 1, 252, 33, 230, 164, 127, 1, 70, 230, 164, 127, 1, 223,
+    224, 230, 164, 127, 1, 68, 230, 164, 127, 1, 196, 251, 230, 164, 127, 1,
+    234, 171, 230, 164, 127, 1, 251, 63, 230, 164, 127, 1, 211, 194, 230,
+    164, 127, 1, 250, 8, 230, 164, 127, 1, 168, 230, 164, 127, 1, 196, 157,
+    230, 164, 127, 1, 249, 3, 230, 164, 127, 1, 248, 54, 230, 164, 127, 1,
+    172, 230, 164, 127, 1, 160, 230, 164, 127, 1, 221, 250, 230, 164, 127, 1,
+    189, 230, 164, 127, 1, 199, 240, 230, 164, 127, 1, 177, 230, 164, 127, 1,
+    231, 233, 230, 164, 127, 1, 231, 84, 230, 164, 127, 1, 238, 0, 230, 164,
+    127, 1, 237, 40, 230, 164, 127, 1, 181, 230, 164, 127, 1, 247, 19, 230,
+    164, 127, 1, 246, 117, 230, 164, 127, 1, 198, 83, 230, 164, 127, 1, 198,
+    71, 230, 164, 127, 1, 219, 137, 230, 164, 127, 1, 223, 62, 230, 164, 127,
+    1, 223, 28, 230, 164, 127, 1, 237, 161, 230, 164, 127, 1, 237, 145, 230,
+    164, 127, 1, 214, 165, 230, 164, 127, 1, 166, 230, 164, 127, 1, 210, 94,
+    230, 164, 127, 1, 144, 230, 164, 127, 1, 167, 230, 164, 127, 1, 188, 230,
+    164, 127, 18, 3, 252, 33, 230, 164, 127, 18, 3, 70, 230, 164, 127, 18, 3,
+    223, 224, 230, 164, 127, 18, 3, 68, 230, 164, 127, 18, 3, 196, 251, 230,
+    164, 127, 18, 3, 234, 171, 230, 164, 127, 18, 3, 251, 63, 230, 164, 127,
+    18, 3, 211, 194, 230, 164, 127, 18, 3, 250, 8, 230, 164, 127, 3, 250,
+    168, 230, 164, 127, 3, 196, 6, 230, 164, 127, 196, 11, 230, 164, 127,
+    211, 219, 230, 164, 127, 17, 192, 76, 230, 164, 127, 17, 101, 230, 164,
+    127, 17, 104, 230, 164, 127, 17, 133, 230, 164, 127, 17, 134, 230, 164,
+    127, 17, 151, 230, 164, 127, 17, 170, 230, 164, 127, 17, 179, 230, 164,
+    127, 17, 174, 230, 164, 127, 17, 182, 217, 170, 1, 160, 217, 170, 1, 231,
+    233, 217, 170, 1, 214, 165, 217, 170, 1, 166, 217, 170, 1, 249, 3, 217,
+    170, 1, 172, 217, 170, 1, 189, 217, 170, 1, 238, 0, 217, 170, 1, 181,
+    217, 170, 1, 247, 19, 217, 170, 1, 223, 62, 217, 170, 1, 212, 201, 217,
+    170, 1, 168, 217, 170, 1, 167, 217, 170, 1, 177, 217, 170, 1, 196, 157,
+    217, 170, 1, 188, 217, 170, 1, 64, 217, 170, 250, 210, 217, 170, 18, 3,
+    70, 217, 170, 18, 3, 68, 217, 170, 18, 3, 71, 217, 170, 18, 3, 74, 217,
+    170, 210, 211, 217, 170, 234, 80, 80, 205, 208, 219, 152, 1, 193, 24, 44,
+    232, 109, 90, 199, 157, 44, 232, 109, 90, 211, 207, 44, 232, 109, 90,
+    234, 140, 44, 232, 109, 90, 203, 23, 44, 232, 109, 90, 232, 129, 44, 232,
+    109, 90, 199, 180, 44, 232, 109, 112, 234, 139, 44, 232, 109, 112, 203,
+    22, 44, 232, 109, 90, 197, 242, 44, 232, 109, 90, 203, 32, 44, 232, 109,
+    90, 203, 31, 44, 232, 109, 90, 200, 21, 44, 232, 109, 90, 234, 143, 44,
+    232, 109, 112, 197, 241, 44, 232, 109, 112, 203, 30, 44, 232, 109, 90,
+    233, 6, 44, 232, 109, 90, 208, 167, 44, 232, 109, 90, 230, 77, 44, 232,
+    109, 90, 230, 76, 44, 232, 109, 112, 208, 165, 44, 232, 109, 235, 94,
+    233, 81, 221, 182, 44, 3, 214, 197, 44, 3, 246, 122, 44, 3, 251, 240, 44,
+    3, 196, 239, 44, 3, 215, 178, 44, 3, 220, 253, 44, 3, 210, 202, 44, 3,
+    215, 222, 44, 3, 222, 156, 44, 3, 211, 23, 44, 3, 209, 174, 44, 3, 196,
+    142, 44, 3, 211, 72, 44, 3, 220, 242, 44, 3, 196, 113, 44, 194, 87, 238,
+    154, 57, 44, 235, 65, 238, 154, 57, 44, 220, 82, 57, 44, 206, 56, 211,
+    26, 57, 44, 198, 218, 238, 196, 57, 44, 198, 218, 31, 57, 44, 238, 136,
+    57, 44, 26, 212, 4, 57, 44, 202, 141, 57, 44, 198, 234, 57, 44, 223, 191,
+    209, 157, 57, 44, 202, 13, 232, 89, 57, 44, 3, 215, 182, 44, 3, 196, 150,
+    44, 209, 38, 234, 80, 80, 199, 244, 10, 3, 64, 10, 3, 41, 24, 64, 10, 3,
+    41, 24, 248, 241, 10, 3, 41, 24, 231, 202, 200, 19, 10, 3, 41, 24, 144,
+    10, 3, 41, 24, 223, 226, 10, 3, 41, 24, 220, 162, 230, 162, 10, 3, 41,
+    24, 215, 189, 10, 3, 41, 24, 206, 79, 10, 3, 254, 42, 10, 3, 251, 238,
+    10, 3, 251, 239, 24, 250, 51, 10, 3, 251, 239, 24, 235, 48, 230, 162, 10,
+    3, 251, 239, 24, 231, 215, 10, 3, 251, 239, 24, 231, 202, 200, 19, 10, 3,
+    251, 239, 24, 144, 10, 3, 251, 239, 24, 223, 227, 230, 162, 10, 3, 251,
+    239, 24, 223, 200, 10, 3, 251, 239, 24, 220, 163, 10, 3, 251, 239, 24,
+    203, 252, 10, 3, 251, 239, 24, 124, 102, 124, 102, 68, 10, 3, 251, 239,
+    230, 162, 10, 3, 251, 155, 10, 3, 251, 156, 24, 248, 220, 10, 3, 251,
+    156, 24, 231, 202, 200, 19, 10, 3, 251, 156, 24, 217, 49, 102, 234, 88,
+    10, 3, 251, 156, 24, 204, 62, 10, 3, 251, 156, 24, 200, 141, 10, 3, 251,
+    125, 10, 3, 251, 44, 10, 3, 251, 45, 24, 234, 15, 10, 3, 251, 45, 24,
+    203, 214, 102, 231, 18, 10, 3, 251, 35, 10, 3, 251, 36, 24, 251, 35, 10,
+    3, 251, 36, 24, 236, 225, 10, 3, 251, 36, 24, 231, 18, 10, 3, 251, 36,
+    24, 144, 10, 3, 251, 36, 24, 222, 144, 10, 3, 251, 36, 24, 221, 204, 10,
+    3, 251, 36, 24, 204, 12, 10, 3, 251, 36, 24, 197, 3, 10, 3, 251, 32, 10,
+    3, 251, 24, 10, 3, 250, 237, 10, 3, 250, 238, 24, 204, 12, 10, 3, 250,
+    224, 10, 3, 250, 225, 136, 250, 224, 10, 3, 250, 225, 112, 199, 82, 10,
+    3, 250, 225, 102, 215, 75, 211, 170, 250, 225, 102, 215, 74, 10, 3, 250,
+    225, 102, 215, 75, 202, 105, 10, 3, 250, 188, 10, 3, 250, 158, 10, 3,
+    250, 124, 10, 3, 250, 125, 24, 221, 0, 10, 3, 250, 96, 10, 3, 250, 59,
+    10, 3, 250, 53, 10, 3, 250, 54, 192, 26, 200, 19, 10, 3, 250, 54, 222,
+    148, 200, 19, 10, 3, 250, 54, 136, 250, 54, 198, 34, 136, 198, 34, 198,
+    34, 136, 198, 34, 210, 253, 10, 3, 250, 54, 136, 250, 54, 136, 250, 53,
+    10, 3, 250, 54, 136, 250, 54, 136, 250, 54, 238, 176, 250, 54, 136, 250,
+    54, 136, 250, 53, 10, 3, 250, 51, 10, 3, 250, 47, 10, 3, 249, 3, 10, 3,
+    248, 241, 10, 3, 248, 235, 10, 3, 248, 227, 10, 3, 248, 221, 10, 3, 248,
+    222, 136, 248, 221, 10, 3, 248, 220, 10, 3, 161, 10, 3, 248, 193, 10, 3,
+    248, 41, 10, 3, 248, 42, 24, 64, 10, 3, 248, 42, 24, 231, 193, 10, 3,
+    248, 42, 24, 223, 227, 230, 162, 10, 3, 247, 124, 10, 3, 247, 125, 136,
+    247, 125, 251, 238, 10, 3, 247, 125, 136, 247, 125, 197, 77, 10, 3, 247,
+    125, 238, 176, 247, 124, 10, 3, 247, 100, 10, 3, 247, 101, 136, 247, 100,
+    10, 3, 247, 89, 10, 3, 247, 88, 10, 3, 238, 0, 10, 3, 237, 246, 10, 3,
+    237, 247, 221, 163, 24, 41, 102, 217, 110, 10, 3, 237, 247, 221, 163, 24,
+    250, 237, 10, 3, 237, 247, 221, 163, 24, 248, 220, 10, 3, 237, 247, 221,
+    163, 24, 248, 41, 10, 3, 237, 247, 221, 163, 24, 231, 233, 10, 3, 237,
+    247, 221, 163, 24, 231, 234, 102, 217, 110, 10, 3, 237, 247, 221, 163,
+    24, 231, 46, 10, 3, 237, 247, 221, 163, 24, 231, 27, 10, 3, 237, 247,
+    221, 163, 24, 230, 175, 10, 3, 237, 247, 221, 163, 24, 144, 10, 3, 237,
+    247, 221, 163, 24, 223, 105, 10, 3, 237, 247, 221, 163, 24, 223, 106,
+    102, 219, 36, 10, 3, 237, 247, 221, 163, 24, 222, 129, 10, 3, 237, 247,
+    221, 163, 24, 177, 10, 3, 237, 247, 221, 163, 24, 219, 36, 10, 3, 237,
+    247, 221, 163, 24, 219, 37, 102, 217, 109, 10, 3, 237, 247, 221, 163, 24,
+    219, 19, 10, 3, 237, 247, 221, 163, 24, 214, 214, 10, 3, 237, 247, 221,
+    163, 24, 210, 254, 102, 210, 253, 10, 3, 237, 247, 221, 163, 24, 203,
+    125, 10, 3, 237, 247, 221, 163, 24, 200, 141, 10, 3, 237, 247, 221, 163,
+    24, 197, 121, 102, 231, 27, 10, 3, 237, 247, 221, 163, 24, 197, 3, 10, 3,
+    237, 218, 10, 3, 237, 195, 10, 3, 237, 194, 10, 3, 237, 193, 10, 3, 237,
+    16, 10, 3, 236, 254, 10, 3, 236, 227, 10, 3, 236, 228, 24, 204, 12, 10,
+    3, 236, 225, 10, 3, 236, 215, 10, 3, 236, 216, 222, 89, 124, 230, 163,
+    236, 194, 10, 3, 236, 194, 10, 3, 235, 62, 10, 3, 235, 63, 136, 235, 62,
+    10, 3, 235, 63, 230, 162, 10, 3, 235, 63, 203, 249, 10, 3, 235, 60, 10,
+    3, 235, 61, 24, 233, 252, 10, 3, 235, 59, 10, 3, 235, 56, 10, 3, 235, 55,
+    10, 3, 235, 54, 10, 3, 235, 49, 10, 3, 235, 47, 10, 3, 235, 48, 230, 162,
+    10, 3, 235, 48, 230, 163, 230, 162, 10, 3, 235, 46, 10, 3, 235, 39, 10,
+    3, 71, 10, 3, 234, 253, 24, 210, 253, 10, 3, 234, 253, 136, 234, 253,
+    212, 231, 136, 212, 230, 10, 3, 234, 200, 10, 3, 234, 201, 24, 41, 102,
+    230, 113, 102, 238, 0, 10, 3, 234, 201, 24, 231, 193, 10, 3, 234, 201,
+    24, 216, 175, 10, 3, 234, 201, 24, 206, 63, 10, 3, 234, 201, 24, 204, 12,
+    10, 3, 234, 201, 24, 68, 10, 3, 234, 173, 10, 3, 234, 161, 10, 3, 234,
+    124, 10, 3, 234, 88, 10, 3, 234, 89, 24, 231, 201, 10, 3, 234, 89, 24,
+    231, 202, 200, 19, 10, 3, 234, 89, 24, 217, 48, 10, 3, 234, 89, 238, 176,
+    234, 88, 10, 3, 234, 89, 211, 170, 234, 88, 10, 3, 234, 89, 202, 105, 10,
+    3, 234, 18, 10, 3, 234, 15, 10, 3, 233, 252, 10, 3, 233, 168, 10, 3, 233,
+    169, 24, 64, 10, 3, 233, 169, 24, 41, 102, 220, 96, 10, 3, 233, 169, 24,
+    41, 102, 220, 97, 24, 220, 96, 10, 3, 233, 169, 24, 250, 224, 10, 3, 233,
+    169, 24, 248, 241, 10, 3, 233, 169, 24, 235, 48, 230, 162, 10, 3, 233,
+    169, 24, 235, 48, 230, 163, 230, 162, 10, 3, 233, 169, 24, 144, 10, 3,
+    233, 169, 24, 230, 113, 230, 162, 10, 3, 233, 169, 24, 223, 227, 230,
+    162, 10, 3, 233, 169, 24, 222, 88, 10, 3, 233, 169, 24, 222, 89, 202,
+    105, 10, 3, 233, 169, 24, 221, 24, 10, 3, 233, 169, 24, 177, 10, 3, 233,
+    169, 24, 220, 97, 24, 220, 96, 10, 3, 233, 169, 24, 219, 209, 10, 3, 233,
+    169, 24, 219, 36, 10, 3, 233, 169, 24, 197, 120, 10, 3, 233, 169, 24,
+    197, 109, 10, 3, 231, 233, 10, 3, 231, 234, 230, 162, 10, 3, 231, 231,
+    10, 3, 231, 232, 24, 41, 102, 238, 1, 102, 144, 10, 3, 231, 232, 24, 41,
+    102, 144, 10, 3, 231, 232, 24, 41, 102, 223, 226, 10, 3, 231, 232, 24,
+    251, 156, 200, 20, 102, 200, 166, 10, 3, 231, 232, 24, 250, 224, 10, 3,
+    231, 232, 24, 250, 53, 10, 3, 231, 232, 24, 250, 52, 102, 231, 215, 10,
+    3, 231, 232, 24, 248, 241, 10, 3, 231, 232, 24, 248, 194, 102, 167, 10,
+    3, 231, 232, 24, 247, 89, 10, 3, 231, 232, 24, 247, 90, 102, 167, 10, 3,
+    231, 232, 24, 238, 0, 10, 3, 231, 232, 24, 237, 16, 10, 3, 231, 232, 24,
+    236, 228, 24, 204, 12, 10, 3, 231, 232, 24, 235, 60, 10, 3, 231, 232, 24,
+    234, 124, 10, 3, 231, 232, 24, 234, 125, 102, 177, 10, 3, 231, 232, 24,
+    234, 88, 10, 3, 231, 232, 24, 234, 89, 24, 231, 202, 200, 19, 10, 3, 231,
+    232, 24, 231, 202, 200, 19, 10, 3, 231, 232, 24, 231, 193, 10, 3, 231,
+    232, 24, 231, 46, 10, 3, 231, 232, 24, 231, 44, 10, 3, 231, 232, 24, 231,
+    45, 102, 64, 10, 3, 231, 232, 24, 231, 28, 102, 201, 184, 10, 3, 231,
+    232, 24, 230, 113, 102, 219, 37, 102, 233, 252, 10, 3, 231, 232, 24, 230,
+    81, 10, 3, 231, 232, 24, 230, 82, 102, 177, 10, 3, 231, 232, 24, 229,
+    179, 102, 219, 209, 10, 3, 231, 232, 24, 228, 173, 10, 3, 231, 232, 24,
+    223, 227, 230, 162, 10, 3, 231, 232, 24, 223, 91, 102, 228, 182, 102,
+    250, 53, 10, 3, 231, 232, 24, 222, 129, 10, 3, 231, 232, 24, 222, 88, 10,
+    3, 231, 232, 24, 221, 190, 10, 3, 231, 232, 24, 221, 191, 102, 220, 96,
+    10, 3, 231, 232, 24, 221, 25, 102, 250, 224, 10, 3, 231, 232, 24, 177,
+    10, 3, 231, 232, 24, 217, 49, 102, 234, 88, 10, 3, 231, 232, 24, 216,
+    175, 10, 3, 231, 232, 24, 212, 230, 10, 3, 231, 232, 24, 212, 231, 136,
+    212, 230, 10, 3, 231, 232, 24, 166, 10, 3, 231, 232, 24, 206, 63, 10, 3,
+    231, 232, 24, 206, 25, 10, 3, 231, 232, 24, 204, 12, 10, 3, 231, 232, 24,
+    204, 13, 102, 198, 15, 10, 3, 231, 232, 24, 203, 234, 10, 3, 231, 232,
+    24, 201, 129, 10, 3, 231, 232, 24, 200, 141, 10, 3, 231, 232, 24, 68, 10,
+    3, 231, 232, 24, 197, 109, 10, 3, 231, 232, 24, 197, 110, 102, 235, 62,
+    10, 3, 231, 232, 136, 231, 231, 10, 3, 231, 226, 10, 3, 231, 227, 238,
+    176, 231, 226, 10, 3, 231, 224, 10, 3, 231, 225, 136, 231, 225, 231, 194,
+    136, 231, 193, 10, 3, 231, 215, 10, 3, 231, 216, 231, 225, 136, 231, 225,
+    231, 194, 136, 231, 193, 10, 3, 231, 214, 10, 3, 231, 212, 10, 3, 231,
+    203, 10, 3, 231, 201, 10, 3, 231, 202, 200, 19, 10, 3, 231, 202, 136,
+    231, 201, 10, 3, 231, 202, 238, 176, 231, 201, 10, 3, 231, 193, 10, 3,
+    231, 192, 10, 3, 231, 186, 10, 3, 231, 127, 10, 3, 231, 128, 24, 221, 0,
+    10, 3, 231, 46, 10, 3, 231, 47, 24, 71, 10, 3, 231, 47, 24, 68, 10, 3,
+    231, 47, 238, 176, 231, 46, 10, 3, 231, 44, 10, 3, 231, 45, 136, 231, 44,
+    10, 3, 231, 45, 238, 176, 231, 44, 10, 3, 231, 41, 10, 3, 231, 27, 10, 3,
+    231, 28, 230, 162, 10, 3, 231, 25, 10, 3, 231, 26, 24, 41, 102, 223, 226,
+    10, 3, 231, 26, 24, 231, 202, 200, 19, 10, 3, 231, 26, 24, 223, 226, 10,
+    3, 231, 26, 24, 219, 37, 102, 223, 226, 10, 3, 231, 26, 24, 166, 10, 3,
+    231, 20, 10, 3, 231, 18, 10, 3, 231, 19, 238, 176, 231, 18, 10, 3, 231,
+    19, 24, 248, 241, 10, 3, 231, 19, 24, 200, 141, 10, 3, 231, 19, 200, 19,
+    10, 3, 230, 186, 10, 3, 230, 187, 238, 176, 230, 186, 10, 3, 230, 184,
+    10, 3, 230, 185, 24, 222, 129, 10, 3, 230, 185, 24, 222, 130, 24, 223,
+    227, 230, 162, 10, 3, 230, 185, 24, 212, 230, 10, 3, 230, 185, 24, 206,
+    64, 102, 198, 33, 10, 3, 230, 185, 230, 162, 10, 3, 230, 175, 10, 3, 230,
+    176, 24, 41, 102, 221, 0, 10, 3, 230, 176, 24, 221, 0, 10, 3, 230, 176,
+    136, 230, 176, 219, 27, 10, 3, 230, 167, 10, 3, 230, 165, 10, 3, 230,
+    166, 24, 204, 12, 10, 3, 230, 156, 10, 3, 230, 155, 10, 3, 230, 151, 10,
+    3, 230, 150, 10, 3, 144, 10, 3, 230, 113, 200, 19, 10, 3, 230, 113, 230,
+    162, 10, 3, 230, 81, 10, 3, 229, 178, 10, 3, 229, 179, 24, 250, 53, 10,
+    3, 229, 179, 24, 250, 51, 10, 3, 229, 179, 24, 248, 241, 10, 3, 229, 179,
+    24, 236, 194, 10, 3, 229, 179, 24, 231, 224, 10, 3, 229, 179, 24, 221,
+    179, 10, 3, 229, 179, 24, 212, 230, 10, 3, 229, 179, 24, 204, 12, 10, 3,
+    229, 179, 24, 68, 10, 3, 228, 181, 10, 3, 228, 173, 10, 3, 228, 174, 24,
+    250, 224, 10, 3, 228, 174, 24, 230, 81, 10, 3, 228, 174, 24, 222, 88, 10,
+    3, 228, 174, 24, 219, 153, 10, 3, 228, 174, 24, 197, 109, 10, 3, 228,
+    168, 10, 3, 70, 10, 3, 228, 97, 64, 10, 3, 228, 53, 10, 3, 223, 254, 10,
+    3, 223, 255, 136, 223, 255, 247, 89, 10, 3, 223, 255, 136, 223, 255, 202,
+    105, 10, 3, 223, 229, 10, 3, 223, 226, 10, 3, 223, 227, 236, 254, 10, 3,
+    223, 227, 207, 151, 10, 3, 223, 227, 136, 223, 227, 203, 218, 136, 203,
+    218, 197, 110, 136, 197, 109, 10, 3, 223, 227, 230, 162, 10, 3, 223, 218,
+    10, 3, 223, 219, 24, 231, 202, 200, 19, 10, 3, 223, 217, 10, 3, 223, 207,
+    10, 3, 223, 208, 24, 200, 141, 10, 3, 223, 208, 238, 176, 223, 207, 10,
+    3, 223, 208, 211, 170, 223, 207, 10, 3, 223, 208, 202, 105, 10, 3, 223,
+    200, 10, 3, 223, 190, 10, 3, 223, 105, 10, 3, 223, 90, 10, 3, 160, 10, 3,
+    222, 174, 24, 64, 10, 3, 222, 174, 24, 251, 125, 10, 3, 222, 174, 24,
+    251, 126, 102, 221, 24, 10, 3, 222, 174, 24, 250, 51, 10, 3, 222, 174,
+    24, 248, 241, 10, 3, 222, 174, 24, 248, 220, 10, 3, 222, 174, 24, 161,
+    10, 3, 222, 174, 24, 248, 41, 10, 3, 222, 174, 24, 234, 15, 10, 3, 222,
+    174, 24, 233, 252, 10, 3, 222, 174, 24, 231, 233, 10, 3, 222, 174, 24,
+    231, 215, 10, 3, 222, 174, 24, 231, 202, 200, 19, 10, 3, 222, 174, 24,
+    231, 193, 10, 3, 222, 174, 24, 231, 194, 102, 204, 63, 102, 64, 10, 3,
+    222, 174, 24, 231, 46, 10, 3, 222, 174, 24, 231, 27, 10, 3, 222, 174, 24,
+    231, 19, 102, 206, 25, 10, 3, 222, 174, 24, 231, 19, 238, 176, 231, 18,
+    10, 3, 222, 174, 24, 230, 186, 10, 3, 222, 174, 24, 230, 155, 10, 3, 222,
+    174, 24, 223, 226, 10, 3, 222, 174, 24, 223, 207, 10, 3, 222, 174, 24,
+    222, 129, 10, 3, 222, 174, 24, 221, 204, 10, 3, 222, 174, 24, 221, 190,
+    10, 3, 222, 174, 24, 219, 209, 10, 3, 222, 174, 24, 219, 36, 10, 3, 222,
+    174, 24, 217, 48, 10, 3, 222, 174, 24, 217, 49, 102, 235, 62, 10, 3, 222,
+    174, 24, 217, 49, 102, 231, 46, 10, 3, 222, 174, 24, 217, 49, 102, 200,
+    79, 10, 3, 222, 174, 24, 216, 175, 10, 3, 222, 174, 24, 216, 176, 102,
+    212, 225, 10, 3, 222, 174, 24, 214, 214, 10, 3, 222, 174, 24, 212, 230,
+    10, 3, 222, 174, 24, 210, 51, 10, 3, 222, 174, 24, 206, 218, 10, 3, 222,
+    174, 24, 188, 10, 3, 222, 174, 24, 206, 25, 10, 3, 222, 174, 24, 204, 64,
+    10, 3, 222, 174, 24, 204, 12, 10, 3, 222, 174, 24, 203, 234, 10, 3, 222,
+    174, 24, 203, 164, 10, 3, 222, 174, 24, 203, 104, 10, 3, 222, 174, 24,
+    201, 138, 10, 3, 222, 174, 24, 200, 112, 10, 3, 222, 174, 24, 68, 10, 3,
+    222, 174, 24, 197, 120, 10, 3, 222, 174, 24, 197, 109, 10, 3, 222, 174,
+    24, 197, 80, 24, 166, 10, 3, 222, 174, 24, 197, 3, 10, 3, 222, 174, 24,
+    192, 30, 10, 3, 222, 160, 10, 3, 222, 161, 238, 176, 222, 160, 10, 3,
+    222, 149, 10, 3, 222, 146, 10, 3, 222, 144, 10, 3, 222, 143, 10, 3, 222,
+    141, 10, 3, 222, 142, 136, 222, 141, 10, 3, 222, 129, 10, 3, 222, 130,
+    24, 223, 227, 230, 162, 10, 3, 222, 125, 10, 3, 222, 126, 24, 248, 241,
+    10, 3, 222, 126, 238, 176, 222, 125, 10, 3, 222, 123, 10, 3, 222, 122,
+    10, 3, 222, 88, 10, 3, 222, 89, 220, 164, 24, 124, 136, 220, 164, 24, 68,
+    10, 3, 222, 89, 136, 222, 89, 220, 164, 24, 124, 136, 220, 164, 24, 68,
+    10, 3, 222, 21, 10, 3, 221, 204, 10, 3, 221, 205, 24, 248, 241, 10, 3,
+    221, 205, 24, 68, 10, 3, 221, 205, 24, 197, 109, 10, 3, 221, 190, 10, 3,
+    221, 179, 10, 3, 221, 165, 10, 3, 221, 164, 10, 3, 221, 162, 10, 3, 221,
+    163, 136, 221, 162, 10, 3, 221, 33, 10, 3, 221, 34, 136, 229, 179, 24,
+    250, 52, 221, 34, 136, 229, 179, 24, 250, 51, 10, 3, 221, 24, 10, 3, 221,
+    22, 10, 3, 221, 23, 196, 137, 20, 10, 3, 221, 21, 10, 3, 221, 13, 10, 3,
+    221, 14, 230, 162, 10, 3, 221, 12, 10, 3, 221, 0, 10, 3, 221, 1, 211,
+    170, 221, 0, 10, 3, 220, 249, 10, 3, 220, 226, 10, 3, 177, 10, 3, 220,
+    163, 10, 3, 220, 164, 24, 64, 10, 3, 220, 164, 24, 41, 102, 238, 1, 102,
+    144, 10, 3, 220, 164, 24, 41, 102, 231, 193, 10, 3, 220, 164, 24, 41,
+    102, 220, 96, 10, 3, 220, 164, 24, 251, 35, 10, 3, 220, 164, 24, 250,
+    224, 10, 3, 220, 164, 24, 250, 54, 192, 26, 200, 19, 10, 3, 220, 164, 24,
+    248, 241, 10, 3, 220, 164, 24, 248, 41, 10, 3, 220, 164, 24, 237, 195,
+    10, 3, 220, 164, 24, 234, 88, 10, 3, 220, 164, 24, 231, 233, 10, 3, 220,
+    164, 24, 231, 193, 10, 3, 220, 164, 24, 230, 175, 10, 3, 220, 164, 24,
+    230, 176, 102, 230, 175, 10, 3, 220, 164, 24, 144, 10, 3, 220, 164, 24,
+    230, 81, 10, 3, 220, 164, 24, 229, 179, 24, 212, 230, 10, 3, 220, 164,
+    24, 223, 227, 230, 162, 10, 3, 220, 164, 24, 223, 207, 10, 3, 220, 164,
+    24, 223, 208, 102, 144, 10, 3, 220, 164, 24, 223, 208, 102, 219, 36, 10,
+    3, 220, 164, 24, 221, 204, 10, 3, 220, 164, 24, 221, 179, 10, 3, 220,
+    164, 24, 221, 24, 10, 3, 220, 164, 24, 221, 13, 10, 3, 220, 164, 24, 221,
+    14, 102, 229, 179, 102, 64, 10, 3, 220, 164, 24, 220, 163, 10, 3, 220,
+    164, 24, 219, 153, 10, 3, 220, 164, 24, 219, 36, 10, 3, 220, 164, 24,
+    219, 21, 10, 3, 220, 164, 24, 217, 48, 10, 3, 220, 164, 24, 217, 49, 102,
+    234, 88, 10, 3, 220, 164, 24, 215, 189, 10, 3, 220, 164, 24, 214, 214,
+    10, 3, 220, 164, 24, 204, 13, 102, 201, 129, 10, 3, 220, 164, 24, 203,
+    214, 102, 231, 19, 102, 234, 15, 10, 3, 220, 164, 24, 203, 214, 102, 231,
+    19, 200, 19, 10, 3, 220, 164, 24, 203, 162, 10, 3, 220, 164, 24, 203,
+    163, 102, 203, 162, 10, 3, 220, 164, 24, 201, 129, 10, 3, 220, 164, 24,
+    200, 155, 10, 3, 220, 164, 24, 200, 141, 10, 3, 220, 164, 24, 200, 80,
+    102, 41, 102, 201, 185, 102, 181, 10, 3, 220, 164, 24, 68, 10, 3, 220,
+    164, 24, 124, 102, 64, 10, 3, 220, 164, 24, 124, 102, 124, 102, 68, 10,
+    3, 220, 164, 24, 197, 121, 102, 250, 53, 10, 3, 220, 164, 24, 197, 109,
+    10, 3, 220, 164, 24, 197, 3, 10, 3, 220, 164, 202, 105, 10, 3, 220, 161,
+    10, 3, 220, 162, 24, 204, 12, 10, 3, 220, 162, 24, 204, 13, 102, 201,
+    129, 10, 3, 220, 162, 230, 162, 10, 3, 220, 162, 230, 163, 136, 220, 162,
+    230, 163, 204, 12, 10, 3, 220, 157, 10, 3, 220, 96, 10, 3, 220, 97, 24,
+    220, 96, 10, 3, 220, 94, 10, 3, 220, 95, 24, 221, 0, 10, 3, 220, 95, 24,
+    221, 1, 102, 206, 218, 10, 3, 219, 209, 10, 3, 219, 190, 10, 3, 219, 178,
+    10, 3, 219, 153, 10, 3, 219, 36, 10, 3, 219, 37, 24, 248, 241, 10, 3,
+    219, 34, 10, 3, 219, 35, 24, 251, 35, 10, 3, 219, 35, 24, 248, 241, 10,
+    3, 219, 35, 24, 233, 252, 10, 3, 219, 35, 24, 233, 253, 200, 19, 10, 3,
+    219, 35, 24, 231, 202, 200, 19, 10, 3, 219, 35, 24, 229, 179, 24, 248,
+    241, 10, 3, 219, 35, 24, 223, 207, 10, 3, 219, 35, 24, 222, 146, 10, 3,
+    219, 35, 24, 222, 144, 10, 3, 219, 35, 24, 222, 145, 102, 250, 53, 10, 3,
+    219, 35, 24, 221, 204, 10, 3, 219, 35, 24, 220, 185, 102, 250, 53, 10, 3,
+    219, 35, 24, 220, 163, 10, 3, 219, 35, 24, 217, 49, 102, 234, 88, 10, 3,
+    219, 35, 24, 214, 214, 10, 3, 219, 35, 24, 213, 22, 10, 3, 219, 35, 24,
+    203, 126, 102, 250, 53, 10, 3, 219, 35, 24, 203, 96, 102, 247, 124, 10,
+    3, 219, 35, 24, 198, 33, 10, 3, 219, 35, 200, 19, 10, 3, 219, 35, 238,
+    176, 219, 34, 10, 3, 219, 35, 211, 170, 219, 34, 10, 3, 219, 35, 202,
+    105, 10, 3, 219, 35, 203, 249, 10, 3, 219, 33, 10, 3, 219, 27, 10, 3,
+    219, 28, 136, 219, 27, 10, 3, 219, 28, 211, 170, 219, 27, 10, 3, 219, 28,
+    203, 249, 10, 3, 219, 24, 10, 3, 219, 21, 10, 3, 219, 19, 10, 3, 219, 20,
+    136, 219, 19, 10, 3, 219, 20, 136, 219, 20, 231, 194, 136, 231, 193, 10,
+    3, 172, 10, 3, 217, 228, 24, 200, 141, 10, 3, 217, 228, 230, 162, 10, 3,
+    217, 220, 10, 3, 217, 188, 10, 3, 217, 135, 10, 3, 217, 110, 10, 3, 217,
+    109, 10, 3, 217, 48, 10, 3, 216, 248, 10, 3, 216, 175, 10, 3, 216, 120,
+    10, 3, 215, 241, 10, 3, 215, 242, 136, 215, 241, 10, 3, 215, 226, 10, 3,
+    215, 227, 230, 162, 10, 3, 215, 207, 10, 3, 215, 193, 10, 3, 215, 189,
+    10, 3, 215, 190, 24, 64, 10, 3, 215, 190, 24, 221, 0, 10, 3, 215, 190,
+    24, 192, 112, 10, 3, 215, 190, 136, 215, 189, 10, 3, 215, 190, 136, 215,
+    190, 24, 41, 102, 181, 10, 3, 215, 190, 238, 176, 215, 189, 10, 3, 215,
+    187, 10, 3, 215, 188, 24, 64, 10, 3, 215, 188, 24, 41, 102, 237, 16, 10,
+    3, 215, 188, 24, 237, 16, 10, 3, 215, 188, 230, 162, 10, 3, 181, 10, 3,
+    215, 87, 10, 3, 215, 74, 10, 3, 215, 75, 223, 120, 10, 3, 215, 75, 24,
+    203, 165, 200, 19, 10, 3, 215, 75, 211, 170, 215, 74, 10, 3, 215, 73, 10,
+    3, 215, 66, 212, 216, 10, 3, 215, 65, 10, 3, 215, 64, 10, 3, 214, 214,
+    10, 3, 214, 215, 24, 64, 10, 3, 214, 215, 24, 197, 109, 10, 3, 214, 215,
+    203, 249, 10, 3, 214, 60, 10, 3, 214, 61, 24, 71, 10, 3, 214, 51, 10, 3,
+    214, 21, 10, 3, 214, 22, 24, 231, 202, 200, 19, 10, 3, 214, 22, 24, 231,
+    194, 102, 231, 202, 200, 19, 10, 3, 214, 17, 10, 3, 214, 18, 24, 250,
+    224, 10, 3, 214, 18, 24, 250, 53, 10, 3, 214, 18, 24, 250, 54, 102, 250,
+    53, 10, 3, 214, 18, 24, 230, 175, 10, 3, 214, 18, 24, 217, 49, 102, 231,
+    202, 200, 19, 10, 3, 214, 18, 24, 214, 214, 10, 3, 214, 18, 24, 212, 230,
+    10, 3, 214, 18, 24, 204, 12, 10, 3, 214, 18, 24, 204, 13, 102, 41, 250,
+    224, 10, 3, 214, 18, 24, 204, 13, 102, 250, 53, 10, 3, 214, 18, 24, 204,
+    13, 102, 250, 54, 102, 250, 53, 10, 3, 214, 18, 24, 197, 121, 102, 250,
+    53, 10, 3, 214, 18, 24, 197, 3, 10, 3, 214, 5, 10, 3, 213, 22, 10, 3,
+    212, 247, 10, 3, 212, 230, 10, 3, 212, 231, 220, 162, 24, 231, 193, 10,
+    3, 212, 231, 220, 162, 24, 217, 110, 10, 3, 212, 231, 220, 162, 24, 206,
+    63, 10, 3, 212, 231, 220, 162, 24, 206, 64, 136, 212, 231, 220, 162, 24,
+    206, 63, 10, 3, 212, 231, 220, 162, 24, 197, 3, 10, 3, 212, 231, 200, 19,
+    10, 3, 212, 231, 136, 212, 230, 10, 3, 212, 231, 238, 176, 212, 230, 10,
+    3, 212, 231, 238, 176, 212, 231, 220, 162, 136, 220, 161, 10, 3, 212,
+    225, 10, 3, 212, 226, 251, 156, 24, 250, 47, 10, 3, 212, 226, 251, 156,
+    24, 248, 41, 10, 3, 212, 226, 251, 156, 24, 235, 56, 10, 3, 212, 226,
+    251, 156, 24, 230, 175, 10, 3, 212, 226, 251, 156, 24, 223, 227, 230,
+    162, 10, 3, 212, 226, 251, 156, 24, 222, 144, 10, 3, 212, 226, 251, 156,
+    24, 177, 10, 3, 212, 226, 251, 156, 24, 214, 214, 10, 3, 212, 226, 251,
+    156, 24, 203, 93, 10, 3, 212, 226, 251, 156, 24, 197, 120, 10, 3, 212,
+    226, 221, 163, 24, 248, 41, 10, 3, 212, 226, 221, 163, 24, 248, 42, 68,
+    10, 3, 166, 10, 3, 211, 67, 10, 3, 211, 25, 10, 3, 210, 253, 10, 3, 210,
+    109, 10, 3, 210, 51, 10, 3, 210, 52, 24, 64, 10, 3, 210, 52, 24, 251,
+    238, 10, 3, 210, 52, 24, 248, 41, 10, 3, 210, 52, 24, 247, 124, 10, 3,
+    210, 52, 24, 71, 10, 3, 210, 52, 24, 70, 10, 3, 210, 52, 24, 228, 53, 10,
+    3, 210, 52, 24, 68, 10, 3, 210, 52, 24, 197, 120, 10, 3, 210, 52, 238,
+    176, 210, 51, 10, 3, 209, 245, 10, 3, 209, 246, 24, 222, 125, 10, 3, 209,
+    246, 24, 197, 109, 10, 3, 209, 246, 24, 192, 112, 10, 3, 209, 246, 211,
+    170, 209, 245, 10, 3, 167, 10, 3, 208, 66, 10, 3, 207, 151, 10, 3, 206,
+    218, 10, 3, 188, 10, 3, 206, 80, 212, 216, 10, 3, 206, 79, 10, 3, 206,
+    80, 24, 64, 10, 3, 206, 80, 24, 235, 62, 10, 3, 206, 80, 24, 235, 60, 10,
+    3, 206, 80, 24, 144, 10, 3, 206, 80, 24, 222, 129, 10, 3, 206, 80, 24,
+    221, 0, 10, 3, 206, 80, 24, 219, 19, 10, 3, 206, 80, 24, 216, 175, 10, 3,
+    206, 80, 24, 212, 230, 10, 3, 206, 80, 24, 206, 63, 10, 3, 206, 80, 24,
+    203, 234, 10, 3, 206, 80, 24, 200, 166, 10, 3, 206, 80, 24, 197, 120, 10,
+    3, 206, 80, 24, 197, 115, 10, 3, 206, 80, 24, 197, 84, 10, 3, 206, 80,
+    24, 197, 27, 10, 3, 206, 80, 24, 197, 3, 10, 3, 206, 80, 136, 206, 79,
+    10, 3, 206, 80, 230, 162, 10, 3, 206, 63, 10, 3, 206, 64, 220, 164, 24,
+    250, 51, 10, 3, 206, 34, 10, 3, 206, 25, 10, 3, 204, 64, 10, 3, 204, 62,
+    10, 3, 204, 63, 24, 64, 10, 3, 204, 63, 24, 248, 241, 10, 3, 204, 63, 24,
+    231, 18, 10, 3, 204, 63, 24, 214, 214, 10, 3, 204, 63, 24, 203, 162, 10,
+    3, 204, 63, 24, 198, 15, 10, 3, 204, 63, 24, 68, 10, 3, 204, 63, 24, 124,
+    102, 64, 10, 3, 204, 60, 10, 3, 204, 58, 10, 3, 204, 30, 10, 3, 204, 12,
+    10, 3, 204, 13, 228, 181, 10, 3, 204, 13, 136, 204, 13, 231, 225, 136,
+    231, 225, 231, 194, 136, 231, 193, 10, 3, 204, 13, 136, 204, 13, 200,
+    167, 136, 200, 167, 231, 194, 136, 231, 193, 10, 3, 204, 5, 10, 3, 204,
+    0, 10, 3, 203, 252, 10, 3, 203, 251, 10, 3, 203, 248, 10, 3, 203, 234,
+    10, 3, 203, 235, 24, 64, 10, 3, 203, 235, 24, 223, 207, 10, 3, 203, 228,
+    10, 3, 203, 229, 24, 64, 10, 3, 203, 229, 24, 248, 221, 10, 3, 203, 229,
+    24, 247, 100, 10, 3, 203, 229, 24, 236, 215, 10, 3, 203, 229, 24, 231,
+    193, 10, 3, 203, 229, 24, 223, 226, 10, 3, 203, 229, 24, 223, 227, 230,
+    162, 10, 3, 203, 229, 24, 220, 249, 10, 3, 203, 229, 24, 219, 21, 10, 3,
+    203, 229, 24, 215, 226, 10, 3, 203, 229, 24, 206, 63, 10, 3, 203, 222,
+    10, 3, 203, 217, 10, 3, 203, 218, 200, 19, 10, 3, 203, 218, 136, 203,
+    218, 247, 90, 136, 247, 89, 10, 3, 203, 213, 10, 3, 203, 164, 10, 3, 203,
+    165, 136, 223, 121, 203, 164, 10, 3, 203, 162, 10, 3, 203, 160, 10, 3,
+    203, 125, 10, 3, 203, 126, 230, 162, 10, 3, 203, 104, 10, 3, 203, 102,
+    10, 3, 203, 103, 136, 203, 103, 203, 162, 10, 3, 203, 95, 10, 3, 203, 93,
+    10, 3, 201, 184, 10, 3, 201, 185, 136, 201, 184, 10, 3, 201, 141, 10, 3,
+    201, 140, 10, 3, 201, 138, 10, 3, 201, 129, 10, 3, 201, 128, 10, 3, 201,
+    100, 10, 3, 201, 99, 10, 3, 189, 10, 3, 200, 181, 250, 37, 10, 3, 200,
+    181, 24, 229, 178, 10, 3, 200, 181, 24, 216, 175, 10, 3, 200, 181, 230,
+    162, 10, 3, 200, 166, 10, 3, 200, 167, 136, 200, 167, 214, 61, 136, 214,
+    61, 236, 195, 136, 236, 194, 10, 3, 200, 167, 202, 105, 10, 3, 200, 155,
+    10, 3, 190, 24, 248, 41, 10, 3, 190, 24, 230, 175, 10, 3, 190, 24, 204,
+    12, 10, 3, 190, 24, 203, 164, 10, 3, 190, 24, 198, 33, 10, 3, 190, 24,
+    197, 109, 10, 3, 200, 141, 10, 3, 200, 112, 10, 3, 200, 79, 10, 3, 200,
+    80, 230, 162, 10, 3, 199, 128, 10, 3, 199, 129, 200, 19, 10, 3, 199, 92,
+    10, 3, 199, 69, 10, 3, 199, 70, 24, 200, 141, 10, 3, 199, 70, 136, 199,
+    69, 10, 3, 199, 70, 136, 199, 70, 231, 225, 136, 231, 225, 231, 194, 136,
+    231, 193, 10, 3, 198, 45, 10, 3, 198, 33, 10, 3, 198, 31, 10, 3, 198, 27,
+    10, 3, 198, 15, 10, 3, 198, 16, 136, 198, 16, 192, 113, 136, 192, 112,
+    10, 3, 68, 10, 3, 124, 230, 175, 10, 3, 124, 124, 68, 10, 3, 124, 136,
+    124, 211, 78, 136, 211, 78, 231, 194, 136, 231, 193, 10, 3, 124, 136,
+    124, 201, 101, 136, 201, 100, 10, 3, 124, 136, 124, 124, 207, 168, 136,
+    124, 207, 167, 10, 3, 197, 120, 10, 3, 197, 115, 10, 3, 197, 109, 10, 3,
+    197, 110, 220, 249, 10, 3, 197, 110, 24, 248, 241, 10, 3, 197, 110, 24,
+    216, 175, 10, 3, 197, 110, 24, 124, 102, 124, 102, 68, 10, 3, 197, 110,
+    24, 124, 102, 124, 102, 124, 230, 162, 10, 3, 197, 110, 230, 162, 10, 3,
+    197, 110, 203, 249, 10, 3, 197, 110, 203, 250, 24, 248, 241, 10, 3, 197,
+    105, 10, 3, 197, 84, 10, 3, 197, 85, 24, 220, 163, 10, 3, 197, 85, 24,
+    217, 49, 102, 238, 0, 10, 3, 197, 85, 24, 204, 62, 10, 3, 197, 85, 24,
+    68, 10, 3, 197, 83, 10, 3, 197, 79, 10, 3, 197, 80, 24, 222, 88, 10, 3,
+    197, 80, 24, 166, 10, 3, 197, 77, 10, 3, 197, 78, 230, 162, 10, 3, 197,
+    27, 10, 3, 197, 28, 238, 176, 197, 27, 10, 3, 197, 28, 203, 249, 10, 3,
+    197, 25, 10, 3, 197, 26, 24, 41, 102, 144, 10, 3, 197, 26, 24, 41, 102,
+    181, 10, 3, 197, 26, 24, 251, 35, 10, 3, 197, 26, 24, 144, 10, 3, 197,
+    26, 24, 212, 230, 10, 3, 197, 26, 24, 197, 120, 10, 3, 197, 26, 24, 197,
+    121, 102, 250, 53, 10, 3, 197, 26, 24, 197, 121, 102, 248, 41, 10, 3,
+    197, 24, 10, 3, 197, 21, 10, 3, 197, 20, 10, 3, 197, 16, 10, 3, 197, 17,
+    24, 64, 10, 3, 197, 17, 24, 250, 47, 10, 3, 197, 17, 24, 161, 10, 3, 197,
+    17, 24, 235, 49, 10, 3, 197, 17, 24, 231, 233, 10, 3, 197, 17, 24, 231,
+    215, 10, 3, 197, 17, 24, 231, 202, 200, 19, 10, 3, 197, 17, 24, 231, 193,
+    10, 3, 197, 17, 24, 230, 186, 10, 3, 197, 17, 24, 144, 10, 3, 197, 17,
+    24, 223, 226, 10, 3, 197, 17, 24, 223, 207, 10, 3, 197, 17, 24, 223, 90,
+    10, 3, 197, 17, 24, 221, 204, 10, 3, 197, 17, 24, 219, 19, 10, 3, 197,
+    17, 24, 216, 120, 10, 3, 197, 17, 24, 166, 10, 3, 197, 17, 24, 204, 12,
+    10, 3, 197, 17, 24, 203, 102, 10, 3, 197, 17, 24, 198, 45, 10, 3, 197,
+    17, 24, 124, 102, 230, 175, 10, 3, 197, 17, 24, 197, 109, 10, 3, 197, 17,
+    24, 197, 14, 10, 3, 197, 14, 10, 3, 197, 15, 24, 68, 10, 3, 197, 3, 10,
+    3, 197, 4, 24, 64, 10, 3, 197, 4, 24, 221, 33, 10, 3, 197, 4, 24, 221, 0,
+    10, 3, 197, 4, 24, 200, 141, 10, 3, 196, 255, 10, 3, 197, 2, 10, 3, 197,
+    0, 10, 3, 196, 252, 10, 3, 196, 240, 10, 3, 196, 241, 24, 222, 88, 10, 3,
+    196, 238, 10, 3, 192, 112, 10, 3, 192, 113, 200, 19, 10, 3, 192, 113,
+    108, 24, 221, 0, 10, 3, 192, 108, 10, 3, 192, 100, 10, 3, 192, 84, 10, 3,
+    192, 30, 10, 3, 192, 31, 136, 192, 30, 10, 3, 192, 29, 10, 3, 192, 27,
+    10, 3, 192, 28, 222, 148, 200, 19, 10, 3, 192, 22, 10, 3, 192, 13, 10, 3,
+    191, 252, 10, 3, 191, 250, 10, 3, 191, 251, 24, 64, 10, 3, 191, 249, 10,
+    3, 191, 248, 10, 3, 222, 113, 234, 121, 10, 3, 251, 239, 24, 212, 230,
+    10, 3, 251, 156, 24, 64, 10, 3, 250, 238, 24, 221, 15, 10, 3, 237, 247,
+    221, 163, 24, 197, 121, 102, 217, 110, 10, 3, 237, 245, 10, 3, 236, 195,
+    102, 203, 164, 10, 3, 235, 61, 24, 204, 12, 10, 3, 233, 169, 24, 230,
+    175, 10, 3, 233, 169, 24, 204, 12, 10, 3, 231, 232, 24, 250, 225, 102,
+    222, 130, 102, 64, 10, 3, 231, 232, 24, 250, 51, 10, 3, 231, 157, 10, 3,
+    231, 35, 10, 3, 228, 153, 10, 3, 222, 174, 24, 250, 188, 10, 3, 222, 174,
+    24, 250, 50, 10, 3, 222, 174, 24, 231, 18, 10, 3, 222, 174, 24, 230, 175,
+    10, 3, 222, 174, 24, 229, 179, 24, 250, 51, 10, 3, 222, 174, 24, 219, 19,
+    10, 3, 222, 174, 24, 166, 10, 3, 222, 174, 24, 203, 156, 10, 3, 222, 174,
+    24, 198, 45, 10, 3, 222, 174, 24, 197, 25, 10, 3, 220, 164, 24, 231, 46,
+    10, 3, 219, 35, 203, 250, 24, 248, 241, 10, 3, 219, 35, 24, 233, 253,
+    102, 220, 96, 10, 3, 219, 35, 24, 203, 164, 10, 3, 216, 247, 10, 3, 215,
+    188, 24, 192, 112, 10, 3, 215, 86, 10, 3, 214, 20, 10, 3, 214, 19, 10, 3,
+    214, 18, 24, 248, 221, 10, 3, 214, 18, 24, 231, 46, 10, 3, 212, 248, 207,
+    16, 214, 12, 237, 94, 10, 3, 210, 110, 250, 37, 10, 3, 209, 249, 10, 3,
+    206, 80, 24, 223, 227, 230, 162, 10, 3, 199, 120, 10, 3, 197, 85, 24,
+    217, 48, 10, 3, 124, 68, 10, 162, 3, 103, 250, 53, 10, 162, 3, 112, 250,
+    53, 10, 162, 3, 232, 119, 250, 53, 10, 162, 3, 232, 214, 250, 53, 10,
+    162, 3, 203, 41, 250, 53, 10, 162, 3, 204, 146, 250, 53, 10, 162, 3, 234,
+    148, 250, 53, 10, 162, 3, 214, 16, 250, 53, 10, 162, 3, 112, 236, 194,
+    10, 162, 3, 232, 119, 236, 194, 10, 162, 3, 232, 214, 236, 194, 10, 162,
+    3, 203, 41, 236, 194, 10, 162, 3, 204, 146, 236, 194, 10, 162, 3, 234,
+    148, 236, 194, 10, 162, 3, 214, 16, 236, 194, 10, 162, 3, 232, 119, 68,
+    10, 162, 3, 232, 214, 68, 10, 162, 3, 203, 41, 68, 10, 162, 3, 204, 146,
+    68, 10, 162, 3, 234, 148, 68, 10, 162, 3, 214, 16, 68, 10, 162, 3, 90,
+    231, 129, 10, 162, 3, 103, 231, 129, 10, 162, 3, 112, 231, 129, 10, 162,
+    3, 232, 119, 231, 129, 10, 162, 3, 232, 214, 231, 129, 10, 162, 3, 203,
+    41, 231, 129, 10, 162, 3, 204, 146, 231, 129, 10, 162, 3, 234, 148, 231,
+    129, 10, 162, 3, 214, 16, 231, 129, 10, 162, 3, 90, 231, 126, 10, 162, 3,
+    103, 231, 126, 10, 162, 3, 112, 231, 126, 10, 162, 3, 232, 119, 231, 126,
+    10, 162, 3, 232, 214, 231, 126, 10, 162, 3, 103, 204, 30, 10, 162, 3,
+    112, 204, 30, 10, 162, 3, 112, 204, 31, 196, 137, 20, 10, 162, 3, 232,
+    119, 204, 30, 10, 162, 3, 232, 214, 204, 30, 10, 162, 3, 203, 41, 204,
+    30, 10, 162, 3, 204, 146, 204, 30, 10, 162, 3, 234, 148, 204, 30, 10,
+    162, 3, 214, 16, 204, 30, 10, 162, 3, 90, 204, 23, 10, 162, 3, 103, 204,
+    23, 10, 162, 3, 112, 204, 23, 10, 162, 3, 112, 204, 24, 196, 137, 20, 10,
+    162, 3, 232, 119, 204, 23, 10, 162, 3, 232, 214, 204, 23, 10, 162, 3,
+    204, 31, 24, 231, 216, 102, 236, 194, 10, 162, 3, 204, 31, 24, 231, 216,
+    102, 216, 120, 10, 162, 3, 90, 247, 85, 10, 162, 3, 103, 247, 85, 10,
+    162, 3, 112, 247, 85, 10, 162, 3, 112, 247, 86, 196, 137, 20, 10, 162, 3,
+    232, 119, 247, 85, 10, 162, 3, 232, 214, 247, 85, 10, 162, 3, 112, 196,
+    137, 232, 136, 233, 254, 10, 162, 3, 112, 196, 137, 232, 136, 233, 251,
+    10, 162, 3, 232, 119, 196, 137, 232, 136, 219, 179, 10, 162, 3, 232, 119,
+    196, 137, 232, 136, 219, 177, 10, 162, 3, 232, 119, 196, 137, 232, 136,
+    219, 180, 64, 10, 162, 3, 232, 119, 196, 137, 232, 136, 219, 180, 249,
+    226, 10, 162, 3, 203, 41, 196, 137, 232, 136, 250, 49, 10, 162, 3, 204,
+    146, 196, 137, 232, 136, 223, 199, 10, 162, 3, 204, 146, 196, 137, 232,
+    136, 223, 201, 64, 10, 162, 3, 204, 146, 196, 137, 232, 136, 223, 201,
+    249, 226, 10, 162, 3, 234, 148, 196, 137, 232, 136, 196, 254, 10, 162, 3,
+    234, 148, 196, 137, 232, 136, 196, 253, 10, 162, 3, 214, 16, 196, 137,
+    232, 136, 223, 215, 10, 162, 3, 214, 16, 196, 137, 232, 136, 223, 214,
+    10, 162, 3, 214, 16, 196, 137, 232, 136, 223, 213, 10, 162, 3, 214, 16,
+    196, 137, 232, 136, 223, 216, 64, 10, 162, 3, 103, 250, 54, 200, 19, 10,
+    162, 3, 112, 250, 54, 200, 19, 10, 162, 3, 232, 119, 250, 54, 200, 19,
+    10, 162, 3, 232, 214, 250, 54, 200, 19, 10, 162, 3, 203, 41, 250, 54,
+    200, 19, 10, 162, 3, 90, 248, 205, 10, 162, 3, 103, 248, 205, 10, 162, 3,
+    112, 248, 205, 10, 162, 3, 232, 119, 248, 205, 10, 162, 3, 232, 119, 248,
+    206, 196, 137, 20, 10, 162, 3, 232, 214, 248, 205, 10, 162, 3, 232, 214,
+    248, 206, 196, 137, 20, 10, 162, 3, 214, 29, 10, 162, 3, 214, 30, 10,
+    162, 3, 90, 233, 250, 10, 162, 3, 103, 233, 250, 10, 162, 3, 90, 199,
+    192, 236, 194, 10, 162, 3, 103, 199, 189, 236, 194, 10, 162, 3, 232, 214,
+    203, 28, 236, 194, 10, 162, 3, 90, 199, 192, 196, 137, 232, 136, 64, 10,
+    162, 3, 103, 199, 189, 196, 137, 232, 136, 64, 10, 162, 3, 90, 234, 144,
+    250, 53, 10, 162, 3, 90, 208, 168, 250, 53, 10, 162, 3, 40, 250, 40, 90,
+    203, 29, 10, 162, 3, 40, 250, 40, 90, 208, 167, 10, 162, 3, 90, 208, 168,
+    230, 156, 10, 162, 3, 90, 138, 230, 156, 10, 162, 3, 234, 122, 90, 199,
+    191, 10, 162, 3, 234, 122, 103, 199, 188, 10, 162, 3, 234, 122, 232, 126,
+    10, 162, 3, 234, 122, 233, 3, 10, 162, 3, 232, 119, 124, 196, 137, 20,
+    10, 162, 3, 232, 214, 124, 196, 137, 20, 10, 162, 3, 203, 41, 124, 196,
+    137, 20, 10, 162, 3, 204, 146, 124, 196, 137, 20, 10, 162, 3, 234, 148,
+    124, 196, 137, 20, 10, 162, 3, 214, 16, 124, 196, 137, 20, 10, 209, 38,
+    3, 40, 250, 40, 194, 11, 236, 177, 10, 209, 38, 3, 84, 242, 47, 10, 209,
+    38, 3, 237, 11, 242, 47, 10, 209, 38, 3, 237, 11, 198, 181, 10, 209, 38,
+    3, 237, 11, 208, 173, 10, 3, 251, 239, 24, 212, 231, 200, 19, 10, 3, 251,
+    239, 24, 203, 162, 10, 3, 251, 126, 24, 233, 252, 10, 3, 248, 242, 24,
+    236, 195, 200, 19, 10, 3, 248, 228, 24, 251, 155, 10, 3, 248, 228, 24,
+    214, 60, 10, 3, 248, 228, 24, 192, 112, 10, 3, 247, 125, 136, 247, 125,
+    24, 215, 87, 10, 3, 238, 1, 24, 200, 141, 10, 3, 237, 247, 24, 221, 0,
+    10, 3, 236, 228, 24, 223, 226, 10, 3, 236, 228, 24, 124, 124, 68, 10, 3,
+    236, 226, 24, 197, 109, 10, 3, 235, 57, 24, 250, 188, 10, 3, 235, 57, 24,
+    250, 53, 10, 3, 235, 57, 24, 250, 54, 250, 27, 220, 28, 10, 3, 235, 57,
+    24, 236, 215, 10, 3, 235, 57, 24, 235, 49, 10, 3, 235, 57, 24, 234, 15,
+    10, 3, 235, 57, 24, 231, 233, 10, 3, 235, 57, 24, 231, 46, 10, 3, 235,
+    57, 24, 231, 28, 230, 162, 10, 3, 235, 57, 24, 231, 18, 10, 3, 235, 57,
+    24, 144, 10, 3, 235, 57, 24, 229, 178, 10, 3, 235, 57, 24, 223, 227, 230,
+    162, 10, 3, 235, 57, 24, 222, 88, 10, 3, 235, 57, 24, 221, 0, 10, 3, 235,
+    57, 24, 220, 249, 10, 3, 235, 57, 24, 220, 250, 102, 222, 88, 10, 3, 235,
+    57, 24, 220, 151, 10, 3, 235, 57, 24, 220, 94, 10, 3, 235, 57, 24, 220,
+    95, 24, 221, 0, 10, 3, 235, 57, 24, 219, 25, 102, 231, 18, 10, 3, 235,
+    57, 24, 217, 110, 10, 3, 235, 57, 24, 216, 248, 10, 3, 235, 57, 24, 216,
+    175, 10, 3, 235, 57, 24, 214, 60, 10, 3, 235, 57, 24, 210, 51, 10, 3,
+    235, 57, 24, 204, 12, 10, 3, 235, 57, 24, 203, 126, 230, 162, 10, 3, 234,
+    201, 24, 221, 0, 10, 3, 234, 201, 24, 210, 253, 10, 3, 234, 16, 193, 223,
+    10, 3, 233, 253, 238, 176, 233, 252, 10, 3, 233, 169, 203, 250, 24, 250,
+    53, 10, 3, 233, 169, 203, 250, 24, 229, 178, 10, 3, 233, 169, 203, 250,
+    24, 223, 227, 230, 162, 10, 3, 233, 169, 203, 250, 24, 177, 10, 3, 233,
+    169, 203, 250, 24, 220, 96, 10, 3, 233, 169, 203, 250, 24, 217, 48, 10,
+    3, 233, 169, 203, 250, 24, 216, 248, 10, 3, 233, 169, 203, 250, 24, 201,
+    184, 10, 3, 233, 169, 24, 201, 184, 10, 3, 231, 232, 24, 248, 227, 10, 3,
+    231, 232, 24, 236, 228, 230, 162, 10, 3, 231, 232, 24, 235, 57, 24, 223,
+    227, 230, 162, 10, 3, 231, 232, 24, 235, 57, 24, 222, 88, 10, 3, 231,
+    232, 24, 234, 18, 10, 3, 231, 232, 24, 231, 233, 10, 3, 231, 232, 24,
+    231, 194, 102, 237, 16, 10, 3, 231, 232, 24, 231, 194, 102, 214, 214, 10,
+    3, 231, 232, 24, 230, 113, 102, 64, 10, 3, 231, 232, 24, 220, 250, 102,
+    222, 88, 10, 3, 231, 232, 24, 220, 94, 10, 3, 231, 232, 24, 220, 95, 24,
+    221, 0, 10, 3, 231, 232, 24, 219, 24, 10, 3, 231, 232, 24, 215, 189, 10,
+    3, 231, 232, 24, 214, 214, 10, 3, 231, 232, 24, 214, 215, 102, 234, 200,
+    10, 3, 231, 232, 24, 214, 215, 102, 231, 46, 10, 3, 231, 232, 24, 203,
+    228, 10, 3, 231, 232, 24, 192, 13, 10, 3, 231, 227, 207, 16, 214, 12,
+    237, 94, 10, 3, 231, 128, 24, 68, 10, 3, 231, 19, 24, 231, 19, 238, 176,
+    231, 18, 10, 3, 230, 185, 24, 223, 227, 230, 162, 10, 3, 230, 176, 102,
+    231, 19, 24, 200, 141, 10, 3, 230, 113, 200, 20, 230, 162, 10, 3, 229,
+    179, 24, 250, 54, 136, 229, 179, 24, 250, 53, 10, 3, 222, 174, 24, 247,
+    124, 10, 3, 222, 174, 24, 160, 10, 3, 222, 174, 24, 124, 124, 68, 10, 3,
+    222, 174, 24, 197, 27, 10, 3, 220, 164, 24, 191, 253, 136, 191, 252, 10,
+    3, 220, 152, 10, 3, 220, 150, 10, 3, 220, 149, 10, 3, 220, 148, 10, 3,
+    220, 147, 10, 3, 220, 146, 10, 3, 220, 145, 10, 3, 220, 144, 136, 220,
+    144, 230, 162, 10, 3, 220, 143, 10, 3, 220, 142, 136, 220, 141, 10, 3,
+    220, 140, 10, 3, 220, 139, 10, 3, 220, 138, 10, 3, 220, 137, 10, 3, 220,
+    136, 10, 3, 220, 135, 10, 3, 220, 134, 10, 3, 220, 133, 10, 3, 220, 132,
+    10, 3, 220, 131, 10, 3, 220, 130, 10, 3, 220, 129, 10, 3, 220, 128, 10,
+    3, 220, 127, 10, 3, 220, 126, 10, 3, 220, 125, 10, 3, 220, 124, 10, 3,
+    220, 123, 10, 3, 220, 121, 10, 3, 220, 122, 24, 230, 186, 10, 3, 220,
+    122, 24, 223, 226, 10, 3, 220, 122, 24, 210, 254, 102, 219, 33, 10, 3,
+    220, 122, 24, 210, 254, 102, 210, 254, 102, 219, 33, 10, 3, 220, 122, 24,
+    197, 121, 102, 249, 3, 10, 3, 220, 120, 10, 3, 220, 119, 10, 3, 220, 118,
+    10, 3, 220, 117, 10, 3, 220, 116, 10, 3, 220, 115, 10, 3, 220, 114, 10,
+    3, 220, 113, 10, 3, 220, 112, 10, 3, 220, 111, 10, 3, 220, 109, 10, 3,
+    220, 110, 24, 250, 53, 10, 3, 220, 110, 24, 248, 241, 10, 3, 220, 110,
+    24, 235, 48, 230, 163, 230, 162, 10, 3, 220, 110, 24, 221, 24, 10, 3,
+    220, 110, 24, 177, 10, 3, 220, 110, 24, 200, 112, 10, 3, 220, 110, 24,
+    200, 79, 10, 3, 220, 110, 24, 197, 120, 10, 3, 220, 110, 24, 197, 109,
+    10, 3, 220, 110, 24, 197, 14, 10, 3, 220, 108, 10, 3, 220, 106, 10, 3,
+    220, 107, 24, 235, 60, 10, 3, 220, 107, 24, 231, 233, 10, 3, 220, 107,
+    24, 223, 226, 10, 3, 220, 107, 24, 223, 227, 230, 162, 10, 3, 220, 107,
+    24, 214, 60, 10, 3, 220, 107, 24, 210, 254, 102, 210, 254, 102, 219, 33,
+    10, 3, 220, 107, 24, 203, 253, 102, 221, 204, 10, 3, 220, 107, 24, 197,
+    109, 10, 3, 220, 107, 24, 197, 14, 10, 3, 220, 104, 10, 3, 220, 103, 10,
+    3, 219, 35, 230, 163, 24, 250, 53, 10, 3, 219, 35, 24, 236, 194, 10, 3,
+    219, 35, 24, 230, 81, 10, 3, 219, 35, 24, 210, 253, 10, 3, 219, 35, 24,
+    210, 254, 102, 210, 254, 102, 219, 33, 10, 3, 219, 35, 24, 200, 141, 10,
+    3, 216, 176, 102, 192, 111, 10, 3, 215, 190, 136, 215, 190, 24, 231, 233,
+    10, 3, 215, 190, 136, 215, 190, 24, 222, 129, 10, 3, 214, 18, 24, 236,
+    228, 230, 162, 10, 3, 214, 18, 24, 231, 18, 10, 3, 214, 18, 24, 230, 167,
+    10, 3, 214, 18, 24, 229, 178, 10, 3, 214, 18, 24, 222, 21, 10, 3, 214,
+    18, 24, 220, 147, 10, 3, 214, 18, 24, 217, 110, 10, 3, 214, 18, 24, 210,
+    254, 102, 210, 253, 10, 3, 214, 18, 24, 68, 10, 3, 214, 18, 24, 124, 102,
+    68, 10, 3, 214, 18, 24, 197, 14, 10, 3, 206, 80, 230, 163, 24, 144, 10,
+    3, 206, 80, 24, 234, 88, 10, 3, 206, 80, 24, 204, 13, 250, 27, 220, 28,
+    10, 3, 206, 80, 24, 200, 141, 10, 3, 204, 61, 200, 19, 10, 3, 204, 13,
+    136, 204, 12, 10, 3, 204, 13, 102, 228, 173, 10, 3, 204, 13, 102, 215,
+    64, 10, 3, 204, 13, 102, 206, 25, 10, 3, 203, 163, 102, 235, 57, 24, 214,
+    60, 10, 3, 203, 163, 102, 234, 201, 24, 250, 224, 10, 3, 203, 126, 24,
+    200, 141, 10, 3, 200, 142, 102, 206, 79, 10, 3, 198, 28, 24, 231, 202,
+    200, 19, 10, 3, 198, 28, 24, 112, 236, 194, 10, 3, 197, 26, 223, 120, 10,
+    3, 197, 26, 24, 197, 109, 10, 3, 197, 17, 24, 237, 194, 10, 3, 197, 17,
+    24, 220, 105, 10, 3, 197, 17, 24, 219, 33, 10, 3, 192, 111, 10, 3, 191,
+    253, 136, 191, 253, 102, 206, 25, 10, 3, 191, 251, 24, 112, 236, 195,
+    200, 19, 14, 7, 255, 26, 14, 7, 255, 25, 14, 7, 255, 24, 14, 7, 255, 23,
+    14, 7, 255, 22, 14, 7, 255, 21, 14, 7, 255, 20, 14, 7, 255, 19, 14, 7,
+    255, 18, 14, 7, 255, 17, 14, 7, 255, 16, 14, 7, 255, 15, 14, 7, 255, 14,
+    14, 7, 255, 12, 14, 7, 255, 11, 14, 7, 255, 10, 14, 7, 255, 9, 14, 7,
+    255, 8, 14, 7, 255, 7, 14, 7, 255, 6, 14, 7, 255, 5, 14, 7, 255, 4, 14,
+    7, 255, 3, 14, 7, 255, 2, 14, 7, 255, 1, 14, 7, 255, 0, 14, 7, 254, 255,
+    14, 7, 254, 254, 14, 7, 254, 253, 14, 7, 254, 252, 14, 7, 254, 251, 14,
+    7, 254, 249, 14, 7, 254, 248, 14, 7, 254, 246, 14, 7, 254, 245, 14, 7,
+    254, 244, 14, 7, 254, 243, 14, 7, 254, 242, 14, 7, 254, 241, 14, 7, 254,
+    240, 14, 7, 254, 239, 14, 7, 254, 238, 14, 7, 254, 237, 14, 7, 254, 236,
+    14, 7, 254, 235, 14, 7, 254, 233, 14, 7, 254, 232, 14, 7, 254, 231, 14,
+    7, 254, 229, 14, 7, 254, 228, 14, 7, 254, 227, 14, 7, 254, 226, 14, 7,
+    254, 225, 14, 7, 254, 224, 14, 7, 254, 223, 14, 7, 254, 222, 14, 7, 254,
+    219, 14, 7, 254, 218, 14, 7, 254, 217, 14, 7, 254, 216, 14, 7, 254, 215,
+    14, 7, 254, 214, 14, 7, 254, 213, 14, 7, 254, 212, 14, 7, 254, 211, 14,
+    7, 254, 210, 14, 7, 254, 209, 14, 7, 254, 208, 14, 7, 254, 207, 14, 7,
+    254, 206, 14, 7, 254, 205, 14, 7, 254, 204, 14, 7, 254, 203, 14, 7, 254,
+    202, 14, 7, 254, 201, 14, 7, 254, 200, 14, 7, 254, 196, 14, 7, 254, 195,
+    14, 7, 254, 194, 14, 7, 254, 193, 14, 7, 249, 224, 14, 7, 249, 222, 14,
+    7, 249, 220, 14, 7, 249, 218, 14, 7, 249, 216, 14, 7, 249, 215, 14, 7,
+    249, 213, 14, 7, 249, 211, 14, 7, 249, 209, 14, 7, 249, 207, 14, 7, 247,
+    48, 14, 7, 247, 47, 14, 7, 247, 46, 14, 7, 247, 45, 14, 7, 247, 44, 14,
+    7, 247, 43, 14, 7, 247, 42, 14, 7, 247, 41, 14, 7, 247, 40, 14, 7, 247,
+    39, 14, 7, 247, 38, 14, 7, 247, 37, 14, 7, 247, 36, 14, 7, 247, 35, 14,
+    7, 247, 34, 14, 7, 247, 33, 14, 7, 247, 32, 14, 7, 247, 31, 14, 7, 247,
+    30, 14, 7, 247, 29, 14, 7, 247, 28, 14, 7, 247, 27, 14, 7, 247, 26, 14,
+    7, 247, 25, 14, 7, 247, 24, 14, 7, 247, 23, 14, 7, 247, 22, 14, 7, 247,
+    21, 14, 7, 238, 94, 14, 7, 238, 93, 14, 7, 238, 92, 14, 7, 238, 91, 14,
+    7, 238, 90, 14, 7, 238, 89, 14, 7, 238, 88, 14, 7, 238, 87, 14, 7, 238,
+    86, 14, 7, 238, 85, 14, 7, 238, 84, 14, 7, 238, 83, 14, 7, 238, 82, 14,
+    7, 238, 81, 14, 7, 238, 80, 14, 7, 238, 79, 14, 7, 238, 78, 14, 7, 238,
+    77, 14, 7, 238, 76, 14, 7, 238, 75, 14, 7, 238, 74, 14, 7, 238, 73, 14,
+    7, 238, 72, 14, 7, 238, 71, 14, 7, 238, 70, 14, 7, 238, 69, 14, 7, 238,
+    68, 14, 7, 238, 67, 14, 7, 238, 66, 14, 7, 238, 65, 14, 7, 238, 64, 14,
+    7, 238, 63, 14, 7, 238, 62, 14, 7, 238, 61, 14, 7, 238, 60, 14, 7, 238,
+    59, 14, 7, 238, 58, 14, 7, 238, 57, 14, 7, 238, 56, 14, 7, 238, 55, 14,
+    7, 238, 54, 14, 7, 238, 53, 14, 7, 238, 52, 14, 7, 238, 51, 14, 7, 238,
+    50, 14, 7, 238, 49, 14, 7, 238, 48, 14, 7, 238, 47, 14, 7, 238, 46, 14,
+    7, 238, 45, 14, 7, 238, 44, 14, 7, 238, 43, 14, 7, 238, 42, 14, 7, 238,
+    41, 14, 7, 238, 40, 14, 7, 238, 39, 14, 7, 238, 38, 14, 7, 238, 37, 14,
+    7, 238, 36, 14, 7, 238, 35, 14, 7, 238, 34, 14, 7, 238, 33, 14, 7, 238,
+    32, 14, 7, 238, 31, 14, 7, 238, 30, 14, 7, 238, 29, 14, 7, 238, 28, 14,
+    7, 238, 27, 14, 7, 238, 26, 14, 7, 238, 25, 14, 7, 238, 24, 14, 7, 238,
+    23, 14, 7, 238, 22, 14, 7, 238, 21, 14, 7, 238, 20, 14, 7, 238, 19, 14,
+    7, 238, 18, 14, 7, 238, 17, 14, 7, 238, 16, 14, 7, 238, 15, 14, 7, 238,
+    14, 14, 7, 238, 13, 14, 7, 238, 12, 14, 7, 238, 11, 14, 7, 238, 10, 14,
+    7, 238, 9, 14, 7, 238, 8, 14, 7, 238, 7, 14, 7, 238, 6, 14, 7, 238, 5,
+    14, 7, 238, 4, 14, 7, 238, 3, 14, 7, 234, 245, 14, 7, 234, 244, 14, 7,
+    234, 243, 14, 7, 234, 242, 14, 7, 234, 241, 14, 7, 234, 240, 14, 7, 234,
+    239, 14, 7, 234, 238, 14, 7, 234, 237, 14, 7, 234, 236, 14, 7, 234, 235,
+    14, 7, 234, 234, 14, 7, 234, 233, 14, 7, 234, 232, 14, 7, 234, 231, 14,
+    7, 234, 230, 14, 7, 234, 229, 14, 7, 234, 228, 14, 7, 234, 227, 14, 7,
+    234, 226, 14, 7, 234, 225, 14, 7, 234, 224, 14, 7, 234, 223, 14, 7, 234,
+    222, 14, 7, 234, 221, 14, 7, 234, 220, 14, 7, 234, 219, 14, 7, 234, 218,
+    14, 7, 234, 217, 14, 7, 234, 216, 14, 7, 234, 215, 14, 7, 234, 214, 14,
+    7, 234, 213, 14, 7, 234, 212, 14, 7, 234, 211, 14, 7, 234, 210, 14, 7,
+    234, 209, 14, 7, 234, 208, 14, 7, 234, 207, 14, 7, 234, 206, 14, 7, 234,
+    205, 14, 7, 234, 204, 14, 7, 234, 203, 14, 7, 234, 202, 14, 7, 233, 162,
+    14, 7, 233, 161, 14, 7, 233, 160, 14, 7, 233, 159, 14, 7, 233, 158, 14,
+    7, 233, 157, 14, 7, 233, 156, 14, 7, 233, 155, 14, 7, 233, 154, 14, 7,
+    233, 153, 14, 7, 233, 152, 14, 7, 233, 151, 14, 7, 233, 150, 14, 7, 233,
+    149, 14, 7, 233, 148, 14, 7, 233, 147, 14, 7, 233, 146, 14, 7, 233, 145,
+    14, 7, 233, 144, 14, 7, 233, 143, 14, 7, 233, 142, 14, 7, 233, 141, 14,
+    7, 233, 140, 14, 7, 233, 139, 14, 7, 233, 138, 14, 7, 233, 137, 14, 7,
+    233, 136, 14, 7, 233, 135, 14, 7, 233, 134, 14, 7, 233, 133, 14, 7, 233,
+    132, 14, 7, 233, 131, 14, 7, 233, 130, 14, 7, 233, 129, 14, 7, 233, 128,
+    14, 7, 233, 127, 14, 7, 233, 126, 14, 7, 233, 125, 14, 7, 233, 124, 14,
+    7, 233, 123, 14, 7, 233, 122, 14, 7, 233, 121, 14, 7, 233, 120, 14, 7,
+    233, 119, 14, 7, 233, 118, 14, 7, 233, 117, 14, 7, 233, 116, 14, 7, 233,
+    115, 14, 7, 233, 114, 14, 7, 233, 113, 14, 7, 233, 112, 14, 7, 233, 111,
+    14, 7, 233, 110, 14, 7, 233, 109, 14, 7, 233, 108, 14, 7, 233, 107, 14,
+    7, 233, 106, 14, 7, 233, 105, 14, 7, 233, 104, 14, 7, 233, 103, 14, 7,
+    233, 102, 14, 7, 233, 101, 14, 7, 233, 100, 14, 7, 233, 99, 14, 7, 233,
+    98, 14, 7, 232, 43, 14, 7, 232, 42, 14, 7, 232, 41, 14, 7, 232, 40, 14,
+    7, 232, 39, 14, 7, 232, 38, 14, 7, 232, 37, 14, 7, 232, 36, 14, 7, 232,
+    35, 14, 7, 232, 34, 14, 7, 232, 33, 14, 7, 232, 32, 14, 7, 232, 31, 14,
+    7, 232, 30, 14, 7, 232, 29, 14, 7, 232, 28, 14, 7, 232, 27, 14, 7, 232,
+    26, 14, 7, 232, 25, 14, 7, 232, 24, 14, 7, 232, 23, 14, 7, 232, 22, 14,
+    7, 232, 21, 14, 7, 232, 20, 14, 7, 232, 19, 14, 7, 232, 18, 14, 7, 232,
+    17, 14, 7, 232, 16, 14, 7, 232, 15, 14, 7, 232, 14, 14, 7, 232, 13, 14,
+    7, 232, 12, 14, 7, 232, 11, 14, 7, 232, 10, 14, 7, 232, 9, 14, 7, 232, 8,
+    14, 7, 232, 7, 14, 7, 232, 6, 14, 7, 232, 5, 14, 7, 232, 4, 14, 7, 232,
+    3, 14, 7, 232, 2, 14, 7, 232, 1, 14, 7, 232, 0, 14, 7, 231, 255, 14, 7,
+    231, 254, 14, 7, 231, 253, 14, 7, 231, 252, 14, 7, 231, 251, 14, 7, 231,
+    250, 14, 7, 231, 249, 14, 7, 231, 248, 14, 7, 231, 247, 14, 7, 231, 246,
+    14, 7, 231, 245, 14, 7, 231, 244, 14, 7, 231, 243, 14, 7, 231, 242, 14,
+    7, 231, 241, 14, 7, 231, 240, 14, 7, 231, 239, 14, 7, 231, 238, 14, 7,
+    231, 237, 14, 7, 231, 236, 14, 7, 230, 122, 14, 7, 230, 121, 14, 7, 230,
+    120, 14, 7, 230, 119, 14, 7, 230, 118, 14, 7, 230, 117, 14, 7, 230, 116,
+    14, 7, 230, 115, 14, 7, 230, 114, 14, 7, 228, 77, 14, 7, 228, 76, 14, 7,
+    228, 75, 14, 7, 228, 74, 14, 7, 228, 73, 14, 7, 228, 72, 14, 7, 228, 71,
+    14, 7, 228, 70, 14, 7, 228, 69, 14, 7, 228, 68, 14, 7, 228, 67, 14, 7,
+    228, 66, 14, 7, 228, 65, 14, 7, 228, 64, 14, 7, 228, 63, 14, 7, 228, 62,
+    14, 7, 228, 61, 14, 7, 228, 60, 14, 7, 228, 59, 14, 7, 222, 183, 14, 7,
+    222, 182, 14, 7, 222, 181, 14, 7, 222, 180, 14, 7, 222, 179, 14, 7, 222,
+    178, 14, 7, 222, 177, 14, 7, 222, 176, 14, 7, 220, 199, 14, 7, 220, 198,
+    14, 7, 220, 197, 14, 7, 220, 196, 14, 7, 220, 195, 14, 7, 220, 194, 14,
+    7, 220, 193, 14, 7, 220, 192, 14, 7, 220, 191, 14, 7, 220, 190, 14, 7,
+    218, 234, 14, 7, 218, 233, 14, 7, 218, 232, 14, 7, 218, 230, 14, 7, 218,
+    228, 14, 7, 218, 227, 14, 7, 218, 225, 14, 7, 218, 223, 14, 7, 218, 221,
+    14, 7, 218, 219, 14, 7, 218, 217, 14, 7, 218, 215, 14, 7, 218, 213, 14,
+    7, 218, 212, 14, 7, 218, 210, 14, 7, 218, 208, 14, 7, 218, 207, 14, 7,
+    218, 206, 14, 7, 218, 205, 14, 7, 218, 204, 14, 7, 218, 203, 14, 7, 218,
+    202, 14, 7, 218, 201, 14, 7, 218, 200, 14, 7, 218, 198, 14, 7, 218, 196,
+    14, 7, 218, 194, 14, 7, 218, 193, 14, 7, 218, 191, 14, 7, 218, 190, 14,
+    7, 218, 188, 14, 7, 218, 187, 14, 7, 218, 185, 14, 7, 218, 183, 14, 7,
+    218, 181, 14, 7, 218, 179, 14, 7, 218, 177, 14, 7, 218, 176, 14, 7, 218,
+    174, 14, 7, 218, 172, 14, 7, 218, 171, 14, 7, 218, 169, 14, 7, 218, 167,
+    14, 7, 218, 165, 14, 7, 218, 163, 14, 7, 218, 162, 14, 7, 218, 160, 14,
+    7, 218, 158, 14, 7, 218, 156, 14, 7, 218, 155, 14, 7, 218, 153, 14, 7,
+    218, 151, 14, 7, 218, 150, 14, 7, 218, 149, 14, 7, 218, 147, 14, 7, 218,
+    145, 14, 7, 218, 143, 14, 7, 218, 141, 14, 7, 218, 139, 14, 7, 218, 137,
+    14, 7, 218, 135, 14, 7, 218, 134, 14, 7, 218, 132, 14, 7, 218, 130, 14,
+    7, 218, 128, 14, 7, 218, 126, 14, 7, 215, 146, 14, 7, 215, 145, 14, 7,
+    215, 144, 14, 7, 215, 143, 14, 7, 215, 142, 14, 7, 215, 141, 14, 7, 215,
+    140, 14, 7, 215, 139, 14, 7, 215, 138, 14, 7, 215, 137, 14, 7, 215, 136,
+    14, 7, 215, 135, 14, 7, 215, 134, 14, 7, 215, 133, 14, 7, 215, 132, 14,
+    7, 215, 131, 14, 7, 215, 130, 14, 7, 215, 129, 14, 7, 215, 128, 14, 7,
+    215, 127, 14, 7, 215, 126, 14, 7, 215, 125, 14, 7, 215, 124, 14, 7, 215,
+    123, 14, 7, 215, 122, 14, 7, 215, 121, 14, 7, 215, 120, 14, 7, 215, 119,
+    14, 7, 215, 118, 14, 7, 215, 117, 14, 7, 215, 116, 14, 7, 215, 115, 14,
+    7, 215, 114, 14, 7, 215, 113, 14, 7, 215, 112, 14, 7, 215, 111, 14, 7,
+    215, 110, 14, 7, 215, 109, 14, 7, 215, 108, 14, 7, 215, 107, 14, 7, 215,
+    106, 14, 7, 215, 105, 14, 7, 215, 104, 14, 7, 215, 103, 14, 7, 215, 102,
+    14, 7, 215, 101, 14, 7, 215, 100, 14, 7, 215, 99, 14, 7, 215, 98, 14, 7,
+    213, 203, 14, 7, 213, 202, 14, 7, 213, 201, 14, 7, 213, 200, 14, 7, 213,
+    199, 14, 7, 213, 198, 14, 7, 213, 197, 14, 7, 213, 196, 14, 7, 213, 195,
+    14, 7, 213, 194, 14, 7, 213, 193, 14, 7, 213, 192, 14, 7, 213, 191, 14,
+    7, 213, 190, 14, 7, 213, 189, 14, 7, 213, 188, 14, 7, 213, 187, 14, 7,
+    213, 186, 14, 7, 213, 185, 14, 7, 213, 184, 14, 7, 213, 183, 14, 7, 213,
+    182, 14, 7, 213, 18, 14, 7, 213, 17, 14, 7, 213, 16, 14, 7, 213, 15, 14,
+    7, 213, 14, 14, 7, 213, 13, 14, 7, 213, 12, 14, 7, 213, 11, 14, 7, 213,
+    10, 14, 7, 213, 9, 14, 7, 213, 8, 14, 7, 213, 7, 14, 7, 213, 6, 14, 7,
+    213, 5, 14, 7, 213, 4, 14, 7, 213, 3, 14, 7, 213, 2, 14, 7, 213, 1, 14,
+    7, 213, 0, 14, 7, 212, 255, 14, 7, 212, 254, 14, 7, 212, 253, 14, 7, 212,
+    252, 14, 7, 212, 251, 14, 7, 212, 250, 14, 7, 212, 249, 14, 7, 212, 102,
+    14, 7, 212, 101, 14, 7, 212, 100, 14, 7, 212, 99, 14, 7, 212, 98, 14, 7,
+    212, 97, 14, 7, 212, 96, 14, 7, 212, 95, 14, 7, 212, 94, 14, 7, 212, 93,
+    14, 7, 212, 92, 14, 7, 212, 91, 14, 7, 212, 90, 14, 7, 212, 89, 14, 7,
+    212, 88, 14, 7, 212, 87, 14, 7, 212, 86, 14, 7, 212, 85, 14, 7, 212, 84,
+    14, 7, 212, 83, 14, 7, 212, 82, 14, 7, 212, 81, 14, 7, 212, 80, 14, 7,
+    212, 79, 14, 7, 212, 78, 14, 7, 212, 77, 14, 7, 212, 76, 14, 7, 212, 75,
+    14, 7, 212, 74, 14, 7, 212, 73, 14, 7, 212, 72, 14, 7, 212, 71, 14, 7,
+    212, 70, 14, 7, 212, 69, 14, 7, 212, 68, 14, 7, 212, 67, 14, 7, 212, 66,
+    14, 7, 212, 65, 14, 7, 212, 64, 14, 7, 212, 63, 14, 7, 212, 62, 14, 7,
+    212, 61, 14, 7, 212, 60, 14, 7, 212, 59, 14, 7, 212, 58, 14, 7, 212, 57,
+    14, 7, 212, 56, 14, 7, 212, 55, 14, 7, 212, 54, 14, 7, 212, 53, 14, 7,
+    212, 52, 14, 7, 212, 51, 14, 7, 212, 50, 14, 7, 212, 49, 14, 7, 212, 48,
+    14, 7, 212, 47, 14, 7, 212, 46, 14, 7, 212, 45, 14, 7, 212, 44, 14, 7,
+    212, 43, 14, 7, 212, 42, 14, 7, 212, 41, 14, 7, 212, 40, 14, 7, 212, 39,
+    14, 7, 212, 38, 14, 7, 212, 37, 14, 7, 212, 36, 14, 7, 212, 35, 14, 7,
+    212, 34, 14, 7, 212, 33, 14, 7, 212, 32, 14, 7, 212, 31, 14, 7, 212, 30,
+    14, 7, 212, 29, 14, 7, 212, 28, 14, 7, 211, 92, 14, 7, 211, 91, 14, 7,
+    211, 90, 14, 7, 211, 89, 14, 7, 211, 88, 14, 7, 211, 87, 14, 7, 211, 86,
+    14, 7, 211, 85, 14, 7, 211, 84, 14, 7, 211, 83, 14, 7, 211, 82, 14, 7,
+    211, 81, 14, 7, 211, 80, 14, 7, 208, 246, 14, 7, 208, 245, 14, 7, 208,
+    244, 14, 7, 208, 243, 14, 7, 208, 242, 14, 7, 208, 241, 14, 7, 208, 240,
+    14, 7, 208, 110, 14, 7, 208, 109, 14, 7, 208, 108, 14, 7, 208, 107, 14,
+    7, 208, 106, 14, 7, 208, 105, 14, 7, 208, 104, 14, 7, 208, 103, 14, 7,
+    208, 102, 14, 7, 208, 101, 14, 7, 208, 100, 14, 7, 208, 99, 14, 7, 208,
+    98, 14, 7, 208, 97, 14, 7, 208, 96, 14, 7, 208, 95, 14, 7, 208, 94, 14,
+    7, 208, 93, 14, 7, 208, 92, 14, 7, 208, 91, 14, 7, 208, 90, 14, 7, 208,
+    89, 14, 7, 208, 88, 14, 7, 208, 87, 14, 7, 208, 86, 14, 7, 208, 85, 14,
+    7, 208, 84, 14, 7, 208, 83, 14, 7, 208, 82, 14, 7, 208, 81, 14, 7, 208,
+    80, 14, 7, 208, 79, 14, 7, 208, 78, 14, 7, 208, 77, 14, 7, 206, 155, 14,
+    7, 206, 154, 14, 7, 206, 153, 14, 7, 206, 152, 14, 7, 206, 151, 14, 7,
+    206, 150, 14, 7, 206, 149, 14, 7, 206, 148, 14, 7, 206, 147, 14, 7, 206,
+    146, 14, 7, 206, 145, 14, 7, 206, 144, 14, 7, 206, 143, 14, 7, 206, 142,
+    14, 7, 206, 141, 14, 7, 206, 140, 14, 7, 206, 139, 14, 7, 206, 138, 14,
+    7, 206, 137, 14, 7, 206, 136, 14, 7, 206, 135, 14, 7, 206, 134, 14, 7,
+    206, 133, 14, 7, 206, 132, 14, 7, 206, 131, 14, 7, 206, 130, 14, 7, 206,
+    129, 14, 7, 206, 128, 14, 7, 206, 127, 14, 7, 206, 126, 14, 7, 206, 125,
+    14, 7, 206, 124, 14, 7, 206, 123, 14, 7, 206, 122, 14, 7, 206, 121, 14,
+    7, 206, 120, 14, 7, 206, 119, 14, 7, 206, 118, 14, 7, 206, 117, 14, 7,
+    206, 116, 14, 7, 206, 115, 14, 7, 206, 114, 14, 7, 206, 113, 14, 7, 206,
+    112, 14, 7, 206, 111, 14, 7, 206, 110, 14, 7, 206, 109, 14, 7, 206, 108,
+    14, 7, 206, 107, 14, 7, 206, 106, 14, 7, 206, 105, 14, 7, 206, 104, 14,
+    7, 206, 103, 14, 7, 206, 102, 14, 7, 200, 225, 14, 7, 200, 224, 14, 7,
+    200, 223, 14, 7, 200, 222, 14, 7, 200, 221, 14, 7, 200, 220, 14, 7, 200,
+    219, 14, 7, 200, 218, 14, 7, 200, 217, 14, 7, 200, 216, 14, 7, 200, 215,
+    14, 7, 200, 214, 14, 7, 200, 213, 14, 7, 200, 212, 14, 7, 200, 211, 14,
+    7, 200, 210, 14, 7, 200, 209, 14, 7, 200, 208, 14, 7, 200, 207, 14, 7,
+    200, 206, 14, 7, 200, 205, 14, 7, 200, 204, 14, 7, 200, 203, 14, 7, 200,
+    202, 14, 7, 200, 201, 14, 7, 200, 200, 14, 7, 200, 199, 14, 7, 200, 198,
+    14, 7, 200, 197, 14, 7, 200, 196, 14, 7, 200, 195, 14, 7, 200, 194, 14,
+    7, 200, 193, 14, 7, 200, 192, 14, 7, 200, 191, 14, 7, 200, 190, 14, 7,
+    200, 189, 14, 7, 200, 188, 14, 7, 200, 187, 14, 7, 200, 186, 14, 7, 200,
+    185, 14, 7, 200, 184, 14, 7, 200, 183, 14, 7, 200, 182, 14, 7, 197, 168,
+    14, 7, 197, 167, 14, 7, 197, 166, 14, 7, 197, 165, 14, 7, 197, 164, 14,
+    7, 197, 163, 14, 7, 197, 162, 14, 7, 197, 161, 14, 7, 197, 160, 14, 7,
+    197, 159, 14, 7, 197, 158, 14, 7, 197, 157, 14, 7, 197, 156, 14, 7, 197,
+    155, 14, 7, 197, 154, 14, 7, 197, 153, 14, 7, 197, 152, 14, 7, 197, 151,
+    14, 7, 197, 150, 14, 7, 197, 149, 14, 7, 197, 148, 14, 7, 197, 147, 14,
+    7, 197, 146, 14, 7, 197, 145, 14, 7, 197, 144, 14, 7, 197, 143, 14, 7,
+    197, 142, 14, 7, 197, 141, 14, 7, 197, 140, 14, 7, 197, 139, 14, 7, 197,
+    138, 14, 7, 197, 137, 14, 7, 197, 136, 14, 7, 197, 135, 14, 7, 197, 134,
+    14, 7, 197, 133, 14, 7, 197, 132, 14, 7, 197, 131, 14, 7, 197, 130, 14,
+    7, 197, 129, 14, 7, 197, 128, 14, 7, 197, 127, 14, 7, 197, 126, 14, 7,
+    197, 125, 14, 7, 197, 124, 14, 7, 197, 123, 14, 7, 197, 122, 14, 7, 196,
+    235, 14, 7, 196, 234, 14, 7, 196, 233, 14, 7, 196, 232, 14, 7, 196, 231,
+    14, 7, 196, 230, 14, 7, 196, 229, 14, 7, 196, 228, 14, 7, 196, 227, 14,
+    7, 196, 226, 14, 7, 196, 225, 14, 7, 196, 224, 14, 7, 196, 223, 14, 7,
+    196, 222, 14, 7, 196, 221, 14, 7, 196, 220, 14, 7, 196, 219, 14, 7, 196,
+    218, 14, 7, 196, 217, 14, 7, 196, 216, 14, 7, 196, 215, 14, 7, 196, 214,
+    14, 7, 196, 213, 14, 7, 196, 212, 14, 7, 196, 211, 14, 7, 196, 210, 14,
+    7, 196, 209, 14, 7, 196, 208, 14, 7, 196, 207, 14, 7, 196, 206, 14, 7,
+    196, 205, 14, 7, 196, 204, 14, 7, 196, 203, 14, 7, 196, 202, 14, 7, 196,
+    201, 14, 7, 196, 200, 14, 7, 196, 199, 14, 7, 196, 198, 14, 7, 196, 197,
+    14, 7, 196, 196, 14, 7, 196, 195, 14, 7, 196, 194, 14, 7, 196, 193, 14,
+    7, 196, 192, 14, 7, 196, 191, 14, 7, 196, 190, 14, 7, 196, 189, 14, 7,
+    196, 188, 14, 7, 196, 187, 14, 7, 196, 186, 14, 7, 196, 185, 14, 7, 196,
+    184, 14, 7, 196, 183, 14, 7, 196, 182, 14, 7, 196, 181, 14, 7, 196, 180,
+    14, 7, 196, 179, 14, 7, 196, 178, 14, 7, 196, 177, 14, 7, 196, 176, 14,
+    7, 196, 175, 14, 7, 196, 174, 14, 7, 196, 173, 14, 7, 196, 172, 14, 7,
+    196, 171, 14, 7, 196, 170, 14, 7, 196, 169, 14, 7, 196, 168, 14, 7, 196,
+    167, 14, 7, 196, 166, 14, 7, 196, 165, 14, 7, 196, 164, 14, 7, 196, 163,
+    14, 7, 196, 162, 14, 7, 196, 161, 14, 7, 196, 160, 14, 7, 196, 159, 14,
+    7, 194, 201, 14, 7, 194, 200, 14, 7, 194, 199, 14, 7, 194, 198, 14, 7,
+    194, 197, 14, 7, 194, 196, 14, 7, 194, 195, 14, 7, 194, 194, 14, 7, 194,
+    193, 14, 7, 194, 192, 14, 7, 194, 191, 14, 7, 194, 190, 14, 7, 194, 189,
+    14, 7, 194, 188, 14, 7, 194, 187, 14, 7, 194, 186, 14, 7, 194, 185, 14,
+    7, 194, 184, 14, 7, 194, 183, 14, 7, 194, 182, 14, 7, 194, 181, 14, 7,
+    194, 180, 14, 7, 194, 179, 14, 7, 194, 178, 14, 7, 194, 177, 14, 7, 194,
+    176, 14, 7, 194, 175, 14, 7, 194, 174, 14, 7, 194, 173, 14, 7, 194, 172,
+    14, 7, 194, 171, 14, 7, 194, 170, 14, 7, 193, 221, 14, 7, 193, 220, 14,
+    7, 193, 219, 14, 7, 193, 218, 14, 7, 193, 217, 14, 7, 193, 216, 14, 7,
+    193, 215, 14, 7, 193, 214, 14, 7, 193, 213, 14, 7, 193, 212, 14, 7, 193,
+    211, 14, 7, 193, 210, 14, 7, 193, 146, 14, 7, 193, 145, 14, 7, 193, 144,
+    14, 7, 193, 143, 14, 7, 193, 142, 14, 7, 193, 141, 14, 7, 193, 140, 14,
+    7, 193, 139, 14, 7, 193, 138, 14, 7, 192, 154, 14, 7, 192, 153, 14, 7,
+    192, 152, 14, 7, 192, 151, 14, 7, 192, 150, 14, 7, 192, 149, 14, 7, 192,
+    148, 14, 7, 192, 147, 14, 7, 192, 146, 14, 7, 192, 145, 14, 7, 192, 144,
+    14, 7, 192, 143, 14, 7, 192, 142, 14, 7, 192, 141, 14, 7, 192, 140, 14,
+    7, 192, 139, 14, 7, 192, 138, 14, 7, 192, 137, 14, 7, 192, 136, 14, 7,
+    192, 135, 14, 7, 192, 134, 14, 7, 192, 133, 14, 7, 192, 132, 14, 7, 192,
+    131, 14, 7, 192, 130, 14, 7, 192, 129, 14, 7, 192, 128, 14, 7, 192, 127,
+    14, 7, 192, 126, 14, 7, 192, 125, 14, 7, 192, 124, 14, 7, 192, 123, 14,
+    7, 192, 122, 14, 7, 192, 121, 14, 7, 192, 120, 14, 7, 192, 119, 14, 7,
+    192, 118, 14, 7, 192, 117, 14, 7, 192, 116, 14, 7, 192, 115, 14, 7, 192,
+    114, 14, 7, 252, 32, 14, 7, 252, 31, 14, 7, 252, 30, 14, 7, 252, 29, 14,
+    7, 252, 28, 14, 7, 252, 27, 14, 7, 252, 26, 14, 7, 252, 25, 14, 7, 252,
+    24, 14, 7, 252, 23, 14, 7, 252, 22, 14, 7, 252, 21, 14, 7, 252, 20, 14,
+    7, 252, 19, 14, 7, 252, 18, 14, 7, 252, 17, 14, 7, 252, 16, 14, 7, 252,
+    15, 14, 7, 252, 14, 14, 7, 252, 13, 14, 7, 252, 12, 14, 7, 252, 11, 14,
+    7, 252, 10, 14, 7, 252, 9, 14, 7, 252, 8, 14, 7, 252, 7, 14, 7, 252, 6,
+    14, 7, 252, 5, 14, 7, 252, 4, 14, 7, 252, 3, 14, 7, 252, 2, 14, 7, 252,
+    1, 14, 7, 252, 0, 14, 7, 251, 255, 14, 7, 84, 222, 228, 14, 7, 229, 5,
+    222, 228, 14, 7, 223, 148, 250, 27, 198, 249, 202, 14, 14, 7, 223, 148,
+    250, 27, 247, 188, 202, 14, 14, 7, 223, 148, 250, 27, 198, 249, 234, 79,
+    14, 7, 223, 148, 250, 27, 247, 188, 234, 79, 14, 7, 211, 111, 216, 160,
+    14, 7, 248, 100, 205, 198, 14, 7, 234, 80, 205, 198, 29, 7, 255, 26, 29,
+    7, 255, 25, 29, 7, 255, 24, 29, 7, 255, 23, 29, 7, 255, 22, 29, 7, 255,
+    20, 29, 7, 255, 17, 29, 7, 255, 16, 29, 7, 255, 15, 29, 7, 255, 14, 29,
+    7, 255, 13, 29, 7, 255, 12, 29, 7, 255, 11, 29, 7, 255, 10, 29, 7, 255,
+    9, 29, 7, 255, 7, 29, 7, 255, 6, 29, 7, 255, 5, 29, 7, 255, 3, 29, 7,
+    255, 2, 29, 7, 255, 1, 29, 7, 255, 0, 29, 7, 254, 255, 29, 7, 254, 254,
+    29, 7, 254, 253, 29, 7, 254, 252, 29, 7, 254, 251, 29, 7, 254, 250, 29,
+    7, 254, 249, 29, 7, 254, 248, 29, 7, 254, 246, 29, 7, 254, 245, 29, 7,
+    254, 244, 29, 7, 254, 243, 29, 7, 254, 241, 29, 7, 254, 240, 29, 7, 254,
+    239, 29, 7, 254, 238, 29, 7, 254, 237, 29, 7, 254, 236, 29, 7, 254, 235,
+    29, 7, 254, 234, 29, 7, 254, 233, 29, 7, 254, 231, 29, 7, 254, 230, 29,
+    7, 254, 229, 29, 7, 254, 227, 29, 7, 254, 225, 29, 7, 254, 224, 29, 7,
+    254, 223, 29, 7, 254, 222, 29, 7, 254, 221, 29, 7, 254, 220, 29, 7, 254,
+    219, 29, 7, 254, 218, 29, 7, 254, 217, 29, 7, 254, 216, 29, 7, 254, 215,
+    29, 7, 254, 214, 29, 7, 254, 213, 29, 7, 254, 212, 29, 7, 254, 211, 29,
+    7, 254, 210, 29, 7, 254, 209, 29, 7, 254, 208, 29, 7, 254, 207, 29, 7,
+    254, 206, 29, 7, 254, 205, 29, 7, 254, 204, 29, 7, 254, 203, 29, 7, 254,
+    202, 29, 7, 254, 201, 29, 7, 254, 200, 29, 7, 254, 199, 29, 7, 254, 198,
+    29, 7, 254, 197, 29, 7, 254, 196, 29, 7, 254, 195, 29, 7, 254, 194, 29,
+    7, 254, 193, 29, 7, 254, 192, 29, 7, 254, 191, 29, 7, 254, 190, 29, 7,
+    254, 189, 29, 7, 254, 188, 29, 7, 254, 187, 29, 7, 254, 186, 29, 7, 254,
+    185, 29, 7, 254, 184, 29, 7, 254, 183, 29, 7, 254, 182, 29, 7, 254, 181,
+    29, 7, 254, 180, 29, 7, 254, 179, 29, 7, 254, 178, 29, 7, 254, 177, 29,
+    7, 254, 176, 29, 7, 254, 175, 29, 7, 254, 174, 29, 7, 254, 173, 29, 7,
+    254, 172, 29, 7, 254, 171, 29, 7, 254, 170, 29, 7, 254, 169, 29, 7, 254,
+    168, 29, 7, 254, 167, 29, 7, 254, 166, 29, 7, 254, 165, 29, 7, 254, 164,
+    29, 7, 254, 163, 29, 7, 254, 162, 29, 7, 254, 161, 29, 7, 254, 159, 29,
+    7, 254, 158, 29, 7, 254, 157, 29, 7, 254, 156, 29, 7, 254, 155, 29, 7,
+    254, 154, 29, 7, 254, 153, 29, 7, 254, 152, 29, 7, 254, 151, 29, 7, 254,
+    150, 29, 7, 254, 149, 29, 7, 254, 148, 29, 7, 254, 147, 29, 7, 254, 146,
+    29, 7, 254, 145, 29, 7, 254, 144, 29, 7, 254, 143, 29, 7, 254, 142, 29,
+    7, 254, 141, 29, 7, 254, 140, 29, 7, 254, 139, 29, 7, 254, 138, 29, 7,
+    254, 137, 29, 7, 254, 136, 29, 7, 254, 135, 29, 7, 254, 134, 29, 7, 254,
+    133, 29, 7, 254, 132, 29, 7, 254, 131, 29, 7, 254, 130, 29, 7, 254, 129,
+    29, 7, 254, 128, 29, 7, 254, 127, 29, 7, 254, 126, 29, 7, 254, 124, 29,
+    7, 254, 123, 29, 7, 254, 122, 29, 7, 254, 121, 29, 7, 254, 120, 29, 7,
+    254, 119, 29, 7, 254, 118, 29, 7, 254, 117, 29, 7, 254, 116, 29, 7, 254,
+    115, 29, 7, 254, 114, 29, 7, 254, 113, 29, 7, 254, 111, 29, 7, 254, 110,
+    29, 7, 254, 109, 29, 7, 254, 108, 29, 7, 254, 107, 29, 7, 254, 106, 29,
+    7, 254, 105, 29, 7, 254, 104, 29, 7, 254, 103, 29, 7, 254, 102, 29, 7,
+    254, 101, 29, 7, 254, 100, 29, 7, 254, 99, 29, 7, 254, 98, 29, 7, 254,
+    97, 29, 7, 254, 96, 29, 7, 254, 95, 29, 7, 254, 94, 29, 7, 254, 93, 29,
+    7, 254, 92, 29, 7, 254, 91, 29, 7, 254, 90, 29, 7, 254, 89, 29, 7, 254,
+    88, 29, 7, 254, 87, 29, 7, 254, 86, 29, 7, 254, 85, 29, 7, 254, 84, 29,
+    7, 254, 83, 29, 7, 254, 82, 29, 7, 254, 81, 29, 7, 254, 80, 29, 7, 254,
+    79, 29, 7, 254, 78, 29, 7, 254, 77, 29, 7, 254, 76, 29, 7, 254, 75, 29,
+    7, 254, 74, 29, 7, 254, 73, 29, 7, 254, 72, 29, 7, 254, 71, 29, 7, 254,
+    70, 29, 7, 254, 69, 29, 7, 254, 68, 29, 7, 254, 67, 29, 7, 254, 66, 29,
+    7, 254, 65, 29, 7, 254, 64, 29, 7, 254, 63, 29, 7, 254, 62, 29, 7, 254,
+    61, 29, 7, 254, 60, 29, 7, 254, 59, 29, 7, 254, 58, 29, 7, 254, 57, 29,
+    7, 254, 56, 29, 7, 254, 55, 29, 7, 254, 54, 29, 7, 254, 53, 29, 7, 254,
+    52, 29, 7, 254, 51, 29, 7, 254, 50, 29, 7, 254, 49, 29, 7, 254, 48, 29,
+    7, 254, 47, 29, 7, 254, 46, 29, 7, 254, 45, 29, 7, 254, 44, 29, 7, 254,
+    43, 29, 7, 254, 41, 29, 7, 254, 40, 29, 7, 254, 39, 29, 7, 254, 38, 29,
+    7, 254, 37, 29, 7, 254, 36, 29, 7, 254, 35, 29, 7, 254, 34, 29, 7, 254,
+    33, 29, 7, 254, 32, 29, 7, 254, 31, 29, 7, 254, 30, 29, 7, 254, 29, 29,
+    7, 254, 28, 29, 7, 254, 27, 29, 7, 254, 26, 29, 7, 254, 25, 29, 7, 254,
+    24, 29, 7, 254, 23, 29, 7, 254, 22, 29, 7, 254, 21, 29, 7, 254, 20, 29,
+    7, 254, 19, 29, 7, 254, 18, 29, 7, 254, 17, 29, 7, 254, 16, 29, 7, 254,
+    15, 29, 7, 254, 14, 29, 7, 254, 13, 29, 7, 254, 12, 29, 7, 254, 11, 29,
+    7, 254, 10, 29, 7, 254, 9, 29, 7, 254, 8, 29, 7, 254, 7, 29, 7, 254, 6,
+    29, 7, 254, 5, 29, 7, 254, 4, 29, 7, 254, 3, 29, 7, 254, 2, 29, 7, 254,
+    1, 29, 7, 254, 0, 29, 7, 253, 255, 29, 7, 253, 254, 29, 7, 253, 253, 29,
+    7, 253, 252, 29, 7, 253, 251, 29, 7, 253, 250, 29, 7, 253, 249, 29, 7,
+    253, 248, 29, 7, 253, 247, 29, 7, 253, 246, 29, 7, 253, 245, 29, 7, 253,
+    244, 29, 7, 253, 243, 29, 7, 253, 242, 29, 7, 253, 241, 29, 7, 253, 240,
+    29, 7, 253, 239, 29, 7, 253, 238, 29, 7, 253, 237, 29, 7, 253, 236, 29,
+    7, 253, 235, 29, 7, 253, 234, 29, 7, 253, 233, 29, 7, 253, 232, 29, 7,
+    253, 231, 29, 7, 253, 230, 29, 7, 253, 229, 29, 7, 253, 228, 29, 7, 253,
+    227, 29, 7, 253, 226, 29, 7, 253, 225, 29, 7, 253, 224, 29, 7, 253, 223,
+    29, 7, 253, 222, 29, 7, 253, 221, 29, 7, 253, 220, 29, 7, 253, 219, 29,
+    7, 253, 218, 29, 7, 253, 217, 29, 7, 253, 216, 29, 7, 253, 215, 29, 7,
+    253, 214, 29, 7, 253, 213, 29, 7, 253, 212, 29, 7, 253, 211, 29, 7, 253,
+    210, 29, 7, 253, 209, 29, 7, 253, 208, 29, 7, 253, 207, 29, 7, 253, 206,
+    29, 7, 253, 205, 29, 7, 253, 204, 29, 7, 253, 203, 29, 7, 253, 202, 29,
+    7, 253, 201, 29, 7, 253, 200, 29, 7, 253, 199, 29, 7, 253, 198, 29, 7,
+    253, 197, 29, 7, 253, 196, 29, 7, 253, 195, 29, 7, 253, 194, 29, 7, 253,
+    193, 29, 7, 253, 192, 29, 7, 253, 191, 29, 7, 253, 190, 29, 7, 253, 189,
+    29, 7, 253, 188, 29, 7, 253, 187, 29, 7, 253, 185, 29, 7, 253, 184, 29,
+    7, 253, 183, 29, 7, 253, 182, 29, 7, 253, 181, 29, 7, 253, 180, 29, 7,
+    253, 179, 29, 7, 253, 178, 29, 7, 253, 177, 29, 7, 253, 176, 29, 7, 253,
+    175, 29, 7, 253, 172, 29, 7, 253, 171, 29, 7, 253, 170, 29, 7, 253, 169,
+    29, 7, 253, 165, 29, 7, 253, 164, 29, 7, 253, 163, 29, 7, 253, 162, 29,
+    7, 253, 161, 29, 7, 253, 160, 29, 7, 253, 159, 29, 7, 253, 158, 29, 7,
+    253, 157, 29, 7, 253, 156, 29, 7, 253, 155, 29, 7, 253, 154, 29, 7, 253,
+    153, 29, 7, 253, 152, 29, 7, 253, 151, 29, 7, 253, 150, 29, 7, 253, 149,
+    29, 7, 253, 148, 29, 7, 253, 147, 29, 7, 253, 145, 29, 7, 253, 144, 29,
+    7, 253, 143, 29, 7, 253, 142, 29, 7, 253, 141, 29, 7, 253, 140, 29, 7,
+    253, 139, 29, 7, 253, 138, 29, 7, 253, 137, 29, 7, 253, 136, 29, 7, 253,
+    135, 29, 7, 253, 134, 29, 7, 253, 133, 29, 7, 253, 132, 29, 7, 253, 131,
+    29, 7, 253, 130, 29, 7, 253, 129, 29, 7, 253, 128, 29, 7, 253, 127, 29,
+    7, 253, 126, 29, 7, 253, 125, 29, 7, 253, 124, 29, 7, 253, 123, 29, 7,
+    253, 122, 29, 7, 253, 121, 29, 7, 253, 120, 29, 7, 253, 119, 29, 7, 253,
+    118, 29, 7, 253, 117, 29, 7, 253, 116, 29, 7, 253, 115, 29, 7, 253, 114,
+    29, 7, 253, 113, 29, 7, 253, 112, 29, 7, 253, 111, 29, 7, 253, 110, 29,
+    7, 253, 109, 29, 7, 253, 108, 29, 7, 253, 107, 29, 7, 253, 106, 29, 7,
+    253, 105, 29, 7, 253, 104, 29, 7, 253, 103, 29, 7, 253, 102, 29, 7, 253,
+    101, 29, 7, 253, 100, 29, 7, 253, 99, 29, 7, 253, 98, 29, 7, 253, 97, 29,
+    7, 253, 96, 29, 7, 253, 95, 29, 7, 253, 94, 29, 7, 253, 93, 29, 7, 253,
+    92, 29, 7, 253, 91, 29, 7, 253, 90, 29, 7, 253, 89, 29, 7, 253, 88, 29,
+    7, 253, 87, 29, 7, 253, 86, 29, 7, 253, 85, 29, 7, 253, 84, 208, 76, 211,
+    164, 207, 151, 29, 7, 253, 83, 29, 7, 253, 82, 29, 7, 253, 81, 29, 7,
+    253, 80, 29, 7, 253, 79, 29, 7, 253, 78, 29, 7, 253, 77, 29, 7, 253, 76,
+    29, 7, 253, 75, 29, 7, 253, 74, 29, 7, 253, 73, 29, 7, 253, 72, 174, 29,
+    7, 253, 71, 29, 7, 253, 70, 29, 7, 253, 69, 29, 7, 253, 68, 29, 7, 253,
+    67, 29, 7, 253, 66, 29, 7, 253, 65, 29, 7, 253, 63, 29, 7, 253, 61, 29,
+    7, 253, 59, 29, 7, 253, 57, 29, 7, 253, 55, 29, 7, 253, 53, 29, 7, 253,
+    51, 29, 7, 253, 49, 29, 7, 253, 47, 29, 7, 253, 45, 248, 100, 219, 92,
+    77, 29, 7, 253, 43, 234, 80, 219, 92, 77, 29, 7, 253, 42, 29, 7, 253, 40,
+    29, 7, 253, 38, 29, 7, 253, 36, 29, 7, 253, 34, 29, 7, 253, 32, 29, 7,
+    253, 30, 29, 7, 253, 28, 29, 7, 253, 26, 29, 7, 253, 25, 29, 7, 253, 24,
+    29, 7, 253, 23, 29, 7, 253, 22, 29, 7, 253, 21, 29, 7, 253, 20, 29, 7,
+    253, 19, 29, 7, 253, 18, 29, 7, 253, 17, 29, 7, 253, 16, 29, 7, 253, 15,
+    29, 7, 253, 14, 29, 7, 253, 13, 29, 7, 253, 12, 29, 7, 253, 11, 29, 7,
+    253, 10, 29, 7, 253, 9, 29, 7, 253, 8, 29, 7, 253, 7, 29, 7, 253, 6, 29,
+    7, 253, 5, 29, 7, 253, 4, 29, 7, 253, 3, 29, 7, 253, 2, 29, 7, 253, 1,
+    29, 7, 253, 0, 29, 7, 252, 255, 29, 7, 252, 254, 29, 7, 252, 253, 29, 7,
+    252, 252, 29, 7, 252, 251, 29, 7, 252, 250, 29, 7, 252, 249, 29, 7, 252,
+    248, 29, 7, 252, 247, 29, 7, 252, 246, 29, 7, 252, 245, 29, 7, 252, 244,
+    29, 7, 252, 243, 29, 7, 252, 242, 29, 7, 252, 241, 29, 7, 252, 240, 29,
+    7, 252, 239, 29, 7, 252, 238, 29, 7, 252, 237, 29, 7, 252, 236, 29, 7,
+    252, 235, 29, 7, 252, 234, 29, 7, 252, 233, 29, 7, 252, 232, 29, 7, 252,
+    231, 29, 7, 252, 230, 29, 7, 252, 229, 29, 7, 252, 228, 29, 7, 252, 227,
+    29, 7, 252, 226, 29, 7, 252, 225, 29, 7, 252, 224, 29, 7, 252, 223, 29,
+    7, 252, 222, 29, 7, 252, 221, 29, 7, 252, 220, 29, 7, 252, 219, 29, 7,
+    252, 218, 29, 7, 252, 217, 29, 7, 252, 216, 29, 7, 252, 215, 29, 7, 252,
+    214, 29, 7, 252, 213, 29, 7, 252, 212, 29, 7, 252, 211, 29, 7, 252, 210,
+    29, 7, 252, 209, 29, 7, 252, 208, 29, 7, 252, 207, 29, 7, 252, 206, 29,
+    7, 252, 205, 29, 7, 252, 204, 29, 7, 252, 203, 29, 7, 252, 202, 29, 7,
+    252, 201, 29, 7, 252, 200, 29, 7, 252, 199, 29, 7, 252, 198, 29, 7, 252,
+    197, 29, 7, 252, 196, 29, 7, 252, 195, 29, 7, 252, 194, 29, 7, 252, 193,
+    29, 7, 252, 192, 29, 7, 252, 191, 29, 7, 252, 190, 29, 7, 252, 189, 29,
+    7, 252, 188, 29, 7, 252, 187, 29, 7, 252, 186, 29, 7, 252, 185, 29, 7,
+    252, 184, 29, 7, 252, 183, 29, 7, 252, 182, 29, 7, 252, 181, 29, 7, 252,
+    180, 29, 7, 252, 179, 29, 7, 252, 178, 29, 7, 252, 177, 29, 7, 252, 176,
+    29, 7, 252, 175, 29, 7, 252, 174, 29, 7, 252, 173, 29, 7, 252, 172, 25,
+    1, 210, 84, 214, 98, 216, 217, 25, 1, 210, 84, 231, 166, 232, 156, 25, 1,
+    210, 84, 209, 175, 216, 218, 209, 251, 25, 1, 210, 84, 209, 175, 216,
+    218, 209, 252, 25, 1, 210, 84, 215, 85, 216, 217, 25, 1, 210, 84, 203,
+    159, 25, 1, 210, 84, 199, 62, 216, 217, 25, 1, 210, 84, 212, 147, 216,
+    217, 25, 1, 210, 84, 203, 223, 211, 78, 213, 240, 25, 1, 210, 84, 209,
+    175, 211, 78, 213, 241, 209, 251, 25, 1, 210, 84, 209, 175, 211, 78, 213,
+    241, 209, 252, 25, 1, 210, 84, 217, 199, 25, 1, 210, 84, 198, 46, 217,
+    200, 25, 1, 210, 84, 214, 159, 25, 1, 210, 84, 217, 196, 25, 1, 210, 84,
+    217, 147, 25, 1, 210, 84, 215, 174, 25, 1, 210, 84, 204, 148, 25, 1, 210,
+    84, 213, 31, 25, 1, 210, 84, 222, 13, 25, 1, 210, 84, 213, 207, 25, 1,
+    210, 84, 201, 86, 25, 1, 210, 84, 214, 97, 25, 1, 210, 84, 220, 75, 25,
+    1, 210, 84, 219, 237, 220, 247, 25, 1, 210, 84, 213, 41, 216, 225, 25, 1,
+    210, 84, 217, 203, 25, 1, 210, 84, 210, 215, 25, 1, 210, 84, 231, 65, 25,
+    1, 210, 84, 211, 29, 25, 1, 210, 84, 216, 56, 214, 132, 25, 1, 210, 84,
+    212, 128, 216, 228, 25, 1, 210, 84, 124, 192, 184, 215, 78, 25, 1, 210,
+    84, 231, 66, 25, 1, 210, 84, 213, 41, 213, 42, 25, 1, 210, 84, 203, 44,
+    25, 1, 210, 84, 216, 210, 25, 1, 210, 84, 216, 231, 25, 1, 210, 84, 216,
+    31, 25, 1, 210, 84, 222, 138, 25, 1, 210, 84, 211, 78, 220, 29, 25, 1,
+    210, 84, 215, 0, 220, 29, 25, 1, 210, 84, 210, 106, 25, 1, 210, 84, 217,
+    197, 25, 1, 210, 84, 214, 26, 25, 1, 210, 84, 209, 30, 25, 1, 210, 84,
+    198, 38, 25, 1, 210, 84, 219, 32, 25, 1, 210, 84, 202, 184, 25, 1, 210,
+    84, 199, 249, 25, 1, 210, 84, 217, 194, 25, 1, 210, 84, 222, 20, 25, 1,
+    210, 84, 214, 252, 25, 1, 210, 84, 221, 5, 25, 1, 210, 84, 216, 32, 25,
+    1, 210, 84, 203, 155, 25, 1, 210, 84, 219, 85, 25, 1, 210, 84, 232, 227,
+    25, 1, 210, 84, 207, 31, 25, 1, 210, 84, 221, 58, 25, 1, 210, 84, 202,
+    180, 25, 1, 210, 84, 217, 142, 210, 40, 25, 1, 210, 84, 203, 216, 25, 1,
+    210, 84, 213, 40, 25, 1, 210, 84, 203, 197, 213, 52, 192, 192, 25, 1,
+    210, 84, 212, 169, 216, 52, 25, 1, 210, 84, 211, 73, 25, 1, 210, 84, 213,
+    209, 25, 1, 210, 84, 197, 49, 25, 1, 210, 84, 214, 135, 25, 1, 210, 84,
+    217, 193, 25, 1, 210, 84, 213, 252, 25, 1, 210, 84, 217, 77, 25, 1, 210,
+    84, 212, 184, 25, 1, 210, 84, 199, 253, 25, 1, 210, 84, 202, 177, 25, 1,
+    210, 84, 211, 74, 25, 1, 210, 84, 213, 56, 25, 1, 210, 84, 217, 201, 25,
+    1, 210, 84, 212, 181, 25, 1, 210, 84, 222, 100, 25, 1, 210, 84, 213, 59,
+    25, 1, 210, 84, 196, 118, 25, 1, 210, 84, 219, 36, 25, 1, 210, 84, 214,
+    196, 25, 1, 210, 84, 215, 52, 25, 1, 210, 84, 217, 76, 25, 1, 210, 83,
+    213, 54, 25, 1, 210, 83, 198, 46, 217, 198, 25, 1, 210, 83, 203, 107, 25,
+    1, 210, 83, 204, 152, 198, 45, 25, 1, 210, 83, 219, 87, 213, 37, 25, 1,
+    210, 83, 217, 83, 217, 202, 25, 1, 210, 83, 221, 188, 25, 1, 210, 83,
+    193, 32, 25, 1, 210, 83, 217, 78, 25, 1, 210, 83, 222, 124, 25, 1, 210,
+    83, 210, 164, 25, 1, 210, 83, 193, 115, 220, 29, 25, 1, 210, 83, 220, 95,
+    213, 52, 212, 195, 25, 1, 210, 83, 213, 34, 203, 242, 25, 1, 210, 83,
+    214, 223, 213, 255, 25, 1, 210, 83, 231, 63, 25, 1, 210, 83, 209, 241,
+    25, 1, 210, 83, 198, 46, 213, 50, 25, 1, 210, 83, 203, 247, 213, 250, 25,
+    1, 210, 83, 203, 243, 25, 1, 210, 83, 216, 218, 199, 252, 25, 1, 210, 83,
+    217, 65, 217, 79, 25, 1, 210, 83, 212, 182, 213, 37, 25, 1, 210, 83, 222,
+    9, 25, 1, 210, 83, 231, 64, 25, 1, 210, 83, 222, 5, 25, 1, 210, 83, 220,
+    179, 25, 1, 210, 83, 210, 218, 25, 1, 210, 83, 196, 47, 25, 1, 210, 83,
+    214, 99, 215, 172, 25, 1, 210, 83, 214, 134, 217, 61, 25, 1, 210, 83,
+    193, 242, 25, 1, 210, 83, 206, 69, 25, 1, 210, 83, 200, 170, 25, 1, 210,
+    83, 216, 230, 25, 1, 210, 83, 214, 118, 25, 1, 210, 83, 214, 119, 220,
+    72, 25, 1, 210, 83, 216, 220, 25, 1, 210, 83, 201, 139, 25, 1, 210, 83,
+    217, 69, 25, 1, 210, 83, 216, 36, 25, 1, 210, 83, 212, 199, 25, 1, 210,
+    83, 209, 34, 25, 1, 210, 83, 216, 229, 214, 136, 25, 1, 210, 83, 233, 16,
+    25, 1, 210, 83, 217, 56, 25, 1, 210, 83, 233, 40, 25, 1, 210, 83, 222,
+    17, 25, 1, 210, 83, 217, 228, 213, 244, 25, 1, 210, 83, 217, 228, 213,
+    220, 25, 1, 210, 83, 219, 236, 25, 1, 210, 83, 214, 142, 25, 1, 210, 83,
+    213, 61, 25, 1, 210, 83, 172, 25, 1, 210, 83, 221, 171, 25, 1, 210, 83,
+    214, 87, 25, 1, 210, 82, 214, 98, 217, 200, 25, 1, 210, 82, 212, 146, 25,
+    1, 210, 82, 192, 192, 25, 1, 210, 82, 194, 145, 25, 1, 210, 82, 214, 135,
+    25, 1, 210, 82, 214, 244, 25, 1, 210, 82, 214, 105, 25, 1, 210, 82, 231,
+    73, 25, 1, 210, 82, 217, 73, 25, 1, 210, 82, 231, 173, 25, 1, 210, 82,
+    212, 171, 216, 100, 216, 232, 25, 1, 210, 82, 213, 28, 217, 64, 25, 1,
+    210, 82, 217, 70, 25, 1, 210, 82, 209, 247, 25, 1, 210, 82, 214, 229, 25,
+    1, 210, 82, 217, 81, 247, 15, 25, 1, 210, 82, 222, 7, 25, 1, 210, 82,
+    231, 74, 25, 1, 210, 82, 222, 14, 25, 1, 210, 82, 192, 215, 215, 205, 25,
+    1, 210, 82, 212, 140, 25, 1, 210, 82, 217, 58, 25, 1, 210, 82, 213, 60,
+    25, 1, 210, 82, 217, 64, 25, 1, 210, 82, 193, 33, 25, 1, 210, 82, 221,
+    66, 25, 1, 210, 82, 222, 159, 25, 1, 210, 82, 204, 147, 25, 1, 210, 82,
+    214, 238, 25, 1, 210, 82, 200, 168, 25, 1, 210, 82, 213, 224, 25, 1, 210,
+    82, 199, 62, 192, 196, 25, 1, 210, 82, 201, 171, 25, 1, 210, 82, 214,
+    125, 212, 195, 25, 1, 210, 82, 196, 46, 25, 1, 210, 82, 215, 55, 25, 1,
+    210, 82, 217, 228, 222, 16, 25, 1, 210, 82, 213, 42, 25, 1, 210, 82, 214,
+    120, 25, 1, 210, 82, 220, 76, 25, 1, 210, 82, 217, 66, 25, 1, 210, 82,
+    216, 209, 25, 1, 210, 82, 213, 36, 25, 1, 210, 82, 199, 248, 25, 1, 210,
+    82, 214, 122, 25, 1, 210, 82, 232, 75, 25, 1, 210, 82, 214, 243, 25, 1,
+    210, 82, 213, 62, 25, 1, 210, 82, 213, 58, 25, 1, 210, 82, 247, 98, 25,
+    1, 210, 82, 196, 48, 25, 1, 210, 82, 217, 71, 25, 1, 210, 82, 206, 218,
+    25, 1, 210, 82, 213, 254, 25, 1, 210, 82, 220, 94, 25, 1, 210, 82, 199,
+    59, 25, 1, 210, 82, 213, 44, 214, 87, 25, 1, 210, 82, 213, 246, 25, 1,
+    210, 82, 222, 20, 25, 1, 210, 82, 214, 127, 25, 1, 210, 82, 217, 193, 25,
+    1, 210, 82, 217, 59, 25, 1, 210, 82, 219, 36, 25, 1, 210, 82, 220, 247,
+    25, 1, 210, 82, 213, 252, 25, 1, 210, 82, 214, 87, 25, 1, 210, 82, 193,
+    232, 25, 1, 210, 82, 214, 123, 25, 1, 210, 82, 213, 47, 25, 1, 210, 82,
+    213, 38, 25, 1, 210, 82, 221, 7, 213, 209, 25, 1, 210, 82, 213, 45, 25,
+    1, 210, 82, 214, 251, 25, 1, 210, 82, 217, 228, 213, 50, 25, 1, 210, 82,
+    193, 129, 25, 1, 210, 82, 214, 250, 25, 1, 210, 82, 203, 158, 25, 1, 210,
+    82, 204, 150, 25, 1, 210, 82, 217, 67, 25, 1, 210, 82, 217, 200, 25, 1,
+    210, 82, 217, 77, 25, 1, 210, 82, 222, 8, 25, 1, 210, 82, 217, 68, 25, 1,
+    210, 82, 222, 12, 25, 1, 210, 82, 217, 81, 210, 46, 25, 1, 210, 82, 192,
+    175, 25, 1, 210, 82, 213, 242, 25, 1, 210, 82, 216, 156, 25, 1, 210, 82,
+    215, 235, 25, 1, 210, 82, 203, 219, 25, 1, 210, 82, 222, 31, 220, 54, 25,
+    1, 210, 82, 222, 31, 233, 53, 25, 1, 210, 82, 214, 157, 25, 1, 210, 82,
+    215, 52, 25, 1, 210, 82, 219, 157, 25, 1, 210, 82, 210, 6, 25, 1, 210,
+    82, 210, 154, 25, 1, 210, 82, 200, 8, 25, 1, 154, 217, 57, 25, 1, 154,
+    194, 143, 25, 1, 154, 213, 240, 25, 1, 154, 216, 217, 25, 1, 154, 213,
+    238, 25, 1, 154, 219, 202, 25, 1, 154, 213, 243, 25, 1, 154, 213, 57, 25,
+    1, 154, 214, 141, 25, 1, 154, 212, 195, 25, 1, 154, 193, 243, 25, 1, 154,
+    214, 95, 25, 1, 154, 204, 10, 25, 1, 154, 214, 106, 25, 1, 154, 222, 15,
+    25, 1, 154, 199, 250, 25, 1, 154, 203, 245, 25, 1, 154, 213, 251, 25, 1,
+    154, 201, 139, 25, 1, 154, 222, 20, 25, 1, 154, 193, 117, 25, 1, 154,
+    221, 8, 25, 1, 154, 206, 28, 25, 1, 154, 216, 222, 25, 1, 154, 214, 242,
+    25, 1, 154, 217, 164, 25, 1, 154, 216, 228, 25, 1, 154, 204, 149, 25, 1,
+    154, 193, 59, 25, 1, 154, 213, 245, 25, 1, 154, 222, 11, 217, 60, 25, 1,
+    154, 214, 102, 25, 1, 154, 198, 45, 25, 1, 154, 231, 83, 25, 1, 154, 214,
+    92, 25, 1, 154, 233, 17, 25, 1, 154, 214, 246, 25, 1, 154, 216, 201, 25,
+    1, 154, 219, 230, 25, 1, 154, 214, 228, 25, 1, 154, 216, 51, 25, 1, 154,
+    216, 205, 25, 1, 154, 209, 14, 25, 1, 154, 216, 203, 25, 1, 154, 216,
+    219, 25, 1, 154, 219, 19, 25, 1, 154, 213, 49, 25, 1, 154, 217, 80, 25,
+    1, 154, 220, 236, 25, 1, 154, 212, 184, 25, 1, 154, 199, 253, 25, 1, 154,
+    202, 177, 25, 1, 154, 192, 175, 25, 1, 154, 222, 12, 25, 1, 154, 208, 52,
+    25, 1, 154, 200, 55, 25, 1, 154, 214, 103, 25, 1, 154, 216, 224, 25, 1,
+    154, 213, 48, 25, 1, 154, 222, 10, 25, 1, 154, 209, 253, 25, 1, 154, 210,
+    99, 25, 1, 154, 212, 157, 25, 1, 154, 219, 236, 25, 1, 154, 214, 142, 25,
+    1, 154, 216, 221, 25, 1, 154, 214, 115, 25, 1, 154, 192, 189, 25, 1, 154,
+    210, 253, 25, 1, 154, 192, 188, 25, 1, 154, 214, 251, 25, 1, 154, 213,
+    37, 25, 1, 154, 201, 173, 25, 1, 154, 221, 12, 25, 1, 154, 214, 131, 25,
+    1, 154, 214, 100, 25, 1, 154, 198, 20, 25, 1, 154, 216, 232, 25, 1, 154,
+    221, 2, 25, 1, 154, 213, 46, 25, 1, 154, 199, 251, 25, 1, 154, 217, 195,
+    25, 1, 154, 214, 140, 25, 1, 154, 219, 229, 25, 1, 154, 214, 121, 25, 1,
+    154, 213, 51, 25, 1, 154, 213, 224, 25, 1, 154, 231, 67, 25, 1, 154, 221,
+    33, 25, 1, 154, 207, 206, 211, 225, 25, 1, 154, 200, 157, 25, 1, 154,
+    198, 245, 25, 1, 154, 212, 181, 25, 1, 154, 207, 88, 25, 1, 154, 220, 31,
+    25, 1, 154, 217, 28, 25, 1, 154, 218, 236, 25, 1, 154, 201, 86, 25, 1,
+    154, 215, 241, 25, 1, 154, 203, 231, 25, 1, 154, 203, 241, 25, 1, 154,
+    220, 208, 25, 1, 154, 213, 22, 25, 1, 154, 203, 164, 25, 1, 154, 213, 39,
+    25, 1, 154, 210, 168, 25, 1, 154, 214, 60, 25, 1, 154, 203, 196, 25, 1,
+    154, 209, 29, 25, 1, 154, 215, 172, 25, 1, 154, 219, 65, 25, 1, 154, 207,
+    206, 215, 230, 25, 1, 154, 199, 128, 25, 1, 154, 213, 25, 25, 1, 154,
+    217, 81, 179, 25, 1, 154, 206, 26, 25, 1, 154, 233, 96, 25, 1, 110, 214,
+    250, 25, 1, 110, 198, 252, 25, 1, 110, 217, 70, 25, 1, 110, 220, 76, 25,
+    1, 110, 195, 238, 25, 1, 110, 219, 71, 25, 1, 110, 211, 77, 25, 1, 110,
+    202, 188, 25, 1, 110, 208, 26, 25, 1, 110, 213, 53, 25, 1, 110, 214, 221,
+    25, 1, 110, 209, 47, 25, 1, 110, 200, 129, 25, 1, 110, 214, 108, 25, 1,
+    110, 221, 62, 25, 1, 110, 193, 235, 25, 1, 110, 205, 205, 25, 1, 110,
+    214, 132, 25, 1, 110, 211, 74, 25, 1, 110, 198, 254, 25, 1, 110, 221, 6,
+    25, 1, 110, 219, 86, 25, 1, 110, 213, 56, 25, 1, 110, 214, 84, 25, 1,
+    110, 217, 201, 25, 1, 110, 214, 101, 25, 1, 110, 214, 83, 25, 1, 110,
+    213, 55, 25, 1, 110, 207, 85, 25, 1, 110, 213, 242, 25, 1, 110, 210, 166,
+    25, 1, 110, 206, 91, 25, 1, 110, 214, 116, 25, 1, 110, 216, 211, 25, 1,
+    110, 231, 61, 25, 1, 110, 214, 104, 25, 1, 110, 213, 253, 25, 1, 110,
+    217, 141, 25, 1, 110, 219, 67, 25, 1, 110, 214, 137, 25, 1, 110, 214,
+    234, 25, 1, 110, 200, 156, 213, 37, 25, 1, 110, 204, 151, 25, 1, 110,
+    209, 40, 25, 1, 110, 214, 254, 202, 196, 25, 1, 110, 214, 124, 212, 195,
+    25, 1, 110, 193, 18, 25, 1, 110, 231, 62, 25, 1, 110, 198, 39, 25, 1,
+    110, 193, 36, 25, 1, 110, 209, 198, 25, 1, 110, 198, 26, 25, 1, 110, 222,
+    18, 25, 1, 110, 201, 172, 25, 1, 110, 199, 252, 25, 1, 110, 196, 49, 25,
+    1, 110, 194, 86, 25, 1, 110, 220, 182, 25, 1, 110, 209, 51, 25, 1, 110,
+    200, 169, 25, 1, 110, 231, 82, 25, 1, 110, 214, 147, 25, 1, 110, 203,
+    244, 25, 1, 110, 216, 206, 25, 1, 110, 217, 74, 25, 1, 110, 212, 144, 25,
+    1, 110, 213, 205, 25, 1, 110, 231, 169, 25, 1, 110, 198, 27, 25, 1, 110,
+    221, 16, 25, 1, 110, 193, 93, 25, 1, 110, 212, 182, 242, 101, 25, 1, 110,
+    193, 7, 25, 1, 110, 216, 223, 25, 1, 110, 214, 239, 25, 1, 110, 210, 41,
+    25, 1, 110, 192, 195, 25, 1, 110, 219, 231, 25, 1, 110, 232, 75, 25, 1,
+    110, 231, 168, 25, 1, 110, 214, 94, 25, 1, 110, 222, 20, 25, 1, 110, 217,
+    204, 25, 1, 110, 214, 107, 25, 1, 110, 231, 68, 25, 1, 110, 233, 97, 25,
+    1, 110, 213, 26, 25, 1, 110, 210, 100, 25, 1, 110, 193, 34, 25, 1, 110,
+    214, 133, 25, 1, 110, 212, 182, 248, 60, 25, 1, 110, 212, 124, 25, 1,
+    110, 209, 170, 25, 1, 110, 216, 156, 25, 1, 110, 232, 73, 25, 1, 110,
+    215, 78, 25, 1, 110, 215, 235, 25, 1, 110, 231, 67, 25, 1, 110, 232, 78,
+    70, 25, 1, 110, 215, 173, 25, 1, 110, 209, 46, 25, 1, 110, 214, 96, 25,
+    1, 110, 220, 247, 25, 1, 110, 210, 38, 25, 1, 110, 213, 40, 25, 1, 110,
+    193, 35, 25, 1, 110, 214, 117, 25, 1, 110, 211, 78, 210, 139, 25, 1, 110,
+    232, 78, 246, 253, 25, 1, 110, 232, 157, 25, 1, 110, 213, 247, 25, 1,
+    110, 64, 25, 1, 110, 198, 245, 25, 1, 110, 74, 25, 1, 110, 70, 25, 1,
+    110, 220, 74, 25, 1, 110, 211, 78, 209, 207, 25, 1, 110, 200, 174, 25, 1,
+    110, 200, 113, 25, 1, 110, 214, 254, 215, 160, 228, 193, 25, 1, 110, 203,
+    219, 25, 1, 110, 193, 31, 25, 1, 110, 214, 77, 25, 1, 110, 192, 200, 25,
+    1, 110, 192, 233, 201, 65, 25, 1, 110, 192, 233, 238, 208, 25, 1, 110,
+    192, 183, 25, 1, 110, 192, 191, 25, 1, 110, 222, 6, 25, 1, 110, 210, 98,
+    25, 1, 110, 213, 248, 234, 34, 25, 1, 110, 209, 42, 25, 1, 110, 193, 241,
+    25, 1, 110, 233, 40, 25, 1, 110, 196, 118, 25, 1, 110, 219, 36, 25, 1,
+    110, 216, 175, 25, 1, 110, 207, 170, 25, 1, 110, 208, 53, 25, 1, 110,
+    214, 76, 25, 1, 110, 214, 165, 25, 1, 110, 203, 211, 25, 1, 110, 203,
+    196, 25, 1, 110, 232, 78, 207, 209, 25, 1, 110, 181, 25, 1, 110, 210, 51,
+    25, 1, 110, 219, 65, 25, 1, 110, 221, 113, 25, 1, 110, 217, 5, 25, 1,
+    110, 172, 25, 1, 110, 217, 138, 25, 1, 110, 199, 254, 25, 1, 110, 221,
+    204, 25, 1, 110, 216, 55, 25, 1, 110, 200, 30, 25, 1, 110, 233, 64, 25,
+    1, 110, 231, 55, 25, 1, 210, 81, 160, 25, 1, 210, 81, 68, 25, 1, 210, 81,
+    221, 33, 25, 1, 210, 81, 234, 171, 25, 1, 210, 81, 207, 234, 25, 1, 210,
+    81, 200, 157, 25, 1, 210, 81, 212, 181, 25, 1, 210, 81, 177, 25, 1, 210,
+    81, 207, 88, 25, 1, 210, 81, 207, 136, 25, 1, 210, 81, 217, 28, 25, 1,
+    210, 81, 200, 174, 25, 1, 210, 81, 214, 253, 25, 1, 210, 81, 213, 254,
+    25, 1, 210, 81, 218, 236, 25, 1, 210, 81, 201, 86, 25, 1, 210, 81, 203,
+    231, 25, 1, 210, 81, 203, 125, 25, 1, 210, 81, 204, 147, 25, 1, 210, 81,
+    220, 208, 25, 1, 210, 81, 222, 20, 25, 1, 210, 81, 212, 246, 25, 1, 210,
+    81, 213, 22, 25, 1, 210, 81, 213, 225, 25, 1, 210, 81, 192, 232, 25, 1,
+    210, 81, 203, 164, 25, 1, 210, 81, 168, 25, 1, 210, 81, 213, 59, 25, 1,
+    210, 81, 210, 98, 25, 1, 210, 81, 213, 39, 25, 1, 210, 81, 193, 241, 25,
+    1, 210, 81, 210, 168, 25, 1, 210, 81, 206, 218, 25, 1, 210, 81, 214, 60,
+    25, 1, 210, 81, 207, 170, 25, 1, 210, 81, 222, 30, 25, 1, 210, 81, 214,
+    93, 25, 1, 210, 81, 214, 144, 25, 1, 210, 81, 203, 211, 25, 1, 210, 81,
+    209, 47, 25, 1, 210, 81, 232, 157, 25, 1, 210, 81, 194, 169, 25, 1, 210,
+    81, 219, 209, 25, 1, 210, 81, 219, 65, 25, 1, 210, 81, 221, 113, 25, 1,
+    210, 81, 217, 72, 25, 1, 210, 81, 207, 205, 25, 1, 210, 81, 172, 25, 1,
+    210, 81, 216, 91, 25, 1, 210, 81, 217, 80, 25, 1, 210, 81, 200, 8, 25, 1,
+    210, 81, 221, 69, 25, 1, 210, 81, 206, 48, 25, 1, 210, 81, 194, 222, 215,
+    245, 1, 189, 215, 245, 1, 214, 113, 215, 245, 1, 193, 1, 215, 245, 1,
+    216, 122, 215, 245, 1, 249, 3, 215, 245, 1, 238, 0, 215, 245, 1, 64, 215,
+    245, 1, 210, 77, 215, 245, 1, 221, 244, 215, 245, 1, 230, 31, 215, 245,
+    1, 237, 231, 215, 245, 1, 242, 168, 215, 245, 1, 222, 50, 215, 245, 1,
+    211, 226, 215, 245, 1, 217, 201, 215, 245, 1, 214, 20, 215, 245, 1, 166,
+    215, 245, 1, 211, 194, 215, 245, 1, 74, 215, 245, 1, 207, 55, 215, 245,
+    1, 203, 236, 215, 245, 1, 199, 223, 215, 245, 1, 234, 199, 215, 245, 1,
+    194, 169, 215, 245, 1, 71, 215, 245, 1, 221, 113, 215, 245, 1, 220, 83,
+    215, 245, 1, 177, 215, 245, 1, 230, 88, 215, 245, 1, 207, 151, 215, 245,
+    1, 200, 45, 215, 245, 17, 192, 76, 215, 245, 17, 101, 215, 245, 17, 104,
+    215, 245, 17, 133, 215, 245, 17, 134, 215, 245, 17, 151, 215, 245, 17,
+    170, 215, 245, 17, 179, 215, 245, 17, 174, 215, 245, 17, 182, 215, 245,
+    237, 208, 215, 245, 55, 237, 208, 248, 173, 196, 154, 1, 234, 69, 248,
+    173, 196, 154, 1, 160, 248, 173, 196, 154, 1, 205, 223, 248, 173, 196,
+    154, 1, 233, 97, 248, 173, 196, 154, 1, 217, 75, 248, 173, 196, 154, 1,
+    193, 19, 248, 173, 196, 154, 1, 231, 218, 248, 173, 196, 154, 1, 237, 21,
+    248, 173, 196, 154, 1, 221, 68, 248, 173, 196, 154, 1, 222, 233, 248,
+    173, 196, 154, 1, 228, 146, 248, 173, 196, 154, 1, 194, 169, 248, 173,
+    196, 154, 1, 192, 8, 248, 173, 196, 154, 1, 231, 162, 248, 173, 196, 154,
+    1, 236, 146, 248, 173, 196, 154, 1, 246, 158, 248, 173, 196, 154, 1, 196,
+    244, 248, 173, 196, 154, 1, 155, 248, 173, 196, 154, 1, 249, 3, 248, 173,
+    196, 154, 1, 194, 223, 248, 173, 196, 154, 1, 193, 63, 248, 173, 196,
+    154, 1, 166, 248, 173, 196, 154, 1, 194, 161, 248, 173, 196, 154, 1, 64,
+    248, 173, 196, 154, 1, 74, 248, 173, 196, 154, 1, 211, 194, 248, 173,
+    196, 154, 1, 68, 248, 173, 196, 154, 1, 234, 171, 248, 173, 196, 154, 1,
+    71, 248, 173, 196, 154, 1, 70, 248, 173, 196, 154, 38, 139, 199, 18, 248,
+    173, 196, 154, 38, 132, 199, 18, 248, 173, 196, 154, 38, 216, 162, 199,
+    18, 248, 173, 196, 154, 38, 219, 49, 199, 18, 248, 173, 196, 154, 38,
+    229, 153, 199, 18, 248, 173, 196, 154, 232, 71, 201, 238, 141, 89, 18,
+    222, 47, 141, 89, 18, 222, 43, 141, 89, 18, 221, 193, 141, 89, 18, 221,
+    156, 141, 89, 18, 222, 75, 141, 89, 18, 222, 72, 141, 89, 18, 221, 17,
+    141, 89, 18, 220, 244, 141, 89, 18, 222, 49, 141, 89, 18, 222, 4, 141,
+    89, 18, 222, 134, 141, 89, 18, 222, 131, 141, 89, 18, 221, 87, 141, 89,
+    18, 221, 84, 141, 89, 18, 222, 68, 141, 89, 18, 222, 66, 141, 89, 18,
+    221, 19, 141, 89, 18, 221, 18, 141, 89, 18, 221, 106, 141, 89, 18, 221,
+    73, 141, 89, 18, 221, 195, 141, 89, 18, 221, 194, 141, 89, 18, 222, 149,
+    141, 89, 18, 222, 71, 141, 89, 18, 220, 234, 141, 89, 18, 220, 225, 141,
+    89, 18, 222, 158, 141, 89, 18, 222, 150, 141, 89, 116, 196, 129, 141, 89,
+    116, 213, 29, 141, 89, 116, 220, 60, 141, 89, 116, 230, 11, 141, 89, 116,
+    213, 181, 141, 89, 116, 208, 17, 141, 89, 116, 213, 208, 141, 89, 116,
+    208, 213, 141, 89, 116, 193, 80, 141, 89, 116, 229, 128, 141, 89, 116,
+    217, 96, 141, 89, 116, 242, 249, 141, 89, 116, 215, 2, 141, 89, 116, 229,
+    64, 141, 89, 116, 209, 216, 141, 89, 116, 213, 35, 141, 89, 116, 215, 42,
+    141, 89, 116, 250, 8, 141, 89, 116, 193, 205, 141, 89, 116, 246, 191,
+    141, 89, 122, 242, 137, 198, 36, 141, 89, 122, 242, 137, 202, 212, 141,
+    89, 122, 242, 137, 222, 22, 141, 89, 122, 242, 137, 221, 235, 141, 89,
+    122, 242, 137, 201, 170, 141, 89, 122, 242, 137, 229, 22, 141, 89, 122,
+    242, 137, 200, 99, 141, 89, 3, 195, 233, 199, 173, 141, 89, 3, 195, 233,
+    198, 107, 246, 149, 141, 89, 3, 242, 137, 242, 238, 141, 89, 3, 195, 233,
+    199, 201, 141, 89, 3, 195, 233, 233, 37, 141, 89, 3, 193, 160, 213, 23,
+    141, 89, 3, 193, 160, 207, 153, 141, 89, 3, 193, 160, 198, 228, 141, 89,
+    3, 193, 160, 233, 78, 141, 89, 3, 195, 233, 205, 199, 141, 89, 3, 217,
+    27, 201, 174, 141, 89, 3, 195, 233, 213, 75, 141, 89, 3, 228, 54, 193,
+    100, 141, 89, 3, 193, 204, 141, 89, 3, 242, 137, 198, 94, 207, 37, 141,
+    89, 17, 192, 76, 141, 89, 17, 101, 141, 89, 17, 104, 141, 89, 17, 133,
+    141, 89, 17, 134, 141, 89, 17, 151, 141, 89, 17, 170, 141, 89, 17, 179,
+    141, 89, 17, 174, 141, 89, 17, 182, 141, 89, 31, 200, 25, 141, 89, 31,
+    228, 160, 141, 89, 31, 200, 31, 199, 163, 141, 89, 31, 216, 123, 141, 89,
+    31, 228, 163, 216, 123, 141, 89, 31, 200, 31, 248, 22, 141, 89, 31, 198,
+    172, 141, 89, 3, 195, 233, 219, 31, 141, 89, 3, 193, 157, 141, 89, 3,
+    229, 123, 141, 89, 3, 199, 190, 229, 123, 141, 89, 3, 191, 237, 199, 234,
+    141, 89, 3, 229, 48, 141, 89, 3, 213, 89, 141, 89, 3, 193, 195, 141, 89,
+    3, 213, 27, 141, 89, 3, 249, 247, 141, 89, 3, 197, 214, 246, 148, 141,
+    89, 3, 217, 27, 198, 110, 141, 89, 3, 200, 100, 141, 89, 3, 219, 62, 141,
+    89, 3, 215, 191, 141, 89, 3, 242, 137, 230, 84, 219, 8, 213, 33, 213, 32,
+    141, 89, 3, 242, 137, 238, 161, 198, 101, 141, 89, 3, 242, 137, 197, 212,
+    141, 89, 3, 242, 137, 197, 213, 242, 156, 141, 89, 3, 242, 137, 209, 45,
+    237, 176, 141, 89, 3, 242, 137, 213, 82, 198, 236, 141, 89, 242, 108, 3,
+    198, 105, 141, 89, 242, 108, 3, 193, 65, 141, 89, 242, 108, 3, 219, 154,
+    141, 89, 242, 108, 3, 220, 58, 141, 89, 242, 108, 3, 193, 156, 141, 89,
+    242, 108, 3, 221, 88, 141, 89, 242, 108, 3, 230, 8, 141, 89, 242, 108, 3,
+    215, 233, 141, 89, 242, 108, 3, 199, 174, 141, 89, 242, 108, 3, 198, 115,
+    141, 89, 242, 108, 3, 210, 91, 141, 89, 242, 108, 3, 221, 248, 141, 89,
+    242, 108, 3, 230, 72, 141, 89, 242, 108, 3, 196, 151, 141, 89, 242, 108,
+    3, 233, 74, 141, 89, 242, 108, 3, 193, 107, 141, 89, 242, 108, 3, 198,
+    88, 141, 89, 242, 108, 3, 220, 229, 141, 89, 242, 108, 3, 194, 211, 217,
+    36, 6, 1, 218, 236, 217, 36, 6, 1, 206, 158, 217, 36, 6, 1, 196, 236,
+    217, 36, 6, 1, 194, 202, 217, 36, 6, 1, 250, 20, 217, 36, 6, 1, 192, 155,
+    217, 36, 6, 1, 221, 70, 217, 36, 6, 1, 211, 93, 217, 36, 6, 1, 200, 228,
+    217, 36, 6, 1, 232, 44, 217, 36, 6, 1, 233, 163, 217, 36, 6, 1, 70, 217,
+    36, 6, 1, 222, 184, 217, 36, 6, 1, 64, 217, 36, 6, 1, 223, 65, 217, 36,
+    6, 1, 71, 217, 36, 6, 1, 249, 226, 217, 36, 6, 1, 247, 52, 217, 36, 6, 1,
+    68, 217, 36, 6, 1, 192, 214, 217, 36, 6, 1, 165, 217, 36, 6, 1, 208, 247,
+    217, 36, 6, 1, 228, 190, 217, 36, 6, 1, 212, 203, 217, 36, 6, 1, 193,
+    223, 217, 36, 6, 1, 238, 95, 217, 36, 6, 1, 212, 0, 217, 36, 6, 1, 215,
+    151, 217, 36, 6, 1, 150, 217, 36, 6, 1, 74, 217, 36, 6, 1, 251, 63, 217,
+    36, 6, 1, 193, 148, 217, 36, 2, 1, 218, 236, 217, 36, 2, 1, 206, 158,
+    217, 36, 2, 1, 196, 236, 217, 36, 2, 1, 194, 202, 217, 36, 2, 1, 250, 20,
+    217, 36, 2, 1, 192, 155, 217, 36, 2, 1, 221, 70, 217, 36, 2, 1, 211, 93,
+    217, 36, 2, 1, 200, 228, 217, 36, 2, 1, 232, 44, 217, 36, 2, 1, 233, 163,
+    217, 36, 2, 1, 70, 217, 36, 2, 1, 222, 184, 217, 36, 2, 1, 64, 217, 36,
+    2, 1, 223, 65, 217, 36, 2, 1, 71, 217, 36, 2, 1, 249, 226, 217, 36, 2, 1,
+    247, 52, 217, 36, 2, 1, 68, 217, 36, 2, 1, 192, 214, 217, 36, 2, 1, 165,
+    217, 36, 2, 1, 208, 247, 217, 36, 2, 1, 228, 190, 217, 36, 2, 1, 212,
+    203, 217, 36, 2, 1, 193, 223, 217, 36, 2, 1, 238, 95, 217, 36, 2, 1, 212,
+    0, 217, 36, 2, 1, 215, 151, 217, 36, 2, 1, 150, 217, 36, 2, 1, 74, 217,
+    36, 2, 1, 251, 63, 217, 36, 2, 1, 193, 148, 217, 36, 17, 192, 76, 217,
+    36, 17, 101, 217, 36, 17, 104, 217, 36, 17, 133, 217, 36, 17, 134, 217,
+    36, 17, 151, 217, 36, 17, 170, 217, 36, 17, 179, 217, 36, 17, 174, 217,
+    36, 17, 182, 217, 36, 31, 200, 30, 217, 36, 31, 234, 111, 217, 36, 31,
+    197, 244, 217, 36, 31, 199, 186, 217, 36, 31, 232, 113, 217, 36, 31, 233,
+    7, 217, 36, 31, 203, 35, 217, 36, 31, 204, 143, 217, 36, 31, 234, 145,
+    217, 36, 31, 214, 13, 217, 36, 17, 90, 250, 249, 20, 217, 36, 17, 103,
+    250, 249, 20, 217, 36, 17, 112, 250, 249, 20, 217, 36, 242, 38, 217, 36,
+    232, 71, 201, 238, 217, 36, 16, 251, 48, 217, 36, 233, 204, 211, 241,
+    117, 1, 166, 117, 1, 249, 3, 117, 1, 11, 166, 117, 1, 209, 234, 117, 1,
+    172, 117, 1, 216, 178, 117, 1, 250, 112, 172, 117, 1, 233, 97, 117, 1,
+    196, 157, 117, 1, 196, 41, 117, 1, 189, 117, 1, 238, 0, 117, 1, 11, 198,
+    83, 117, 1, 11, 189, 117, 1, 198, 83, 117, 1, 237, 161, 117, 1, 181, 117,
+    1, 214, 65, 117, 1, 11, 213, 178, 117, 1, 250, 112, 181, 117, 1, 213,
+    178, 117, 1, 213, 164, 117, 1, 177, 117, 1, 218, 250, 117, 1, 219, 222,
+    117, 1, 219, 211, 117, 1, 199, 50, 117, 1, 236, 155, 117, 1, 199, 42,
+    117, 1, 236, 154, 117, 1, 160, 117, 1, 231, 233, 117, 1, 11, 160, 117, 1,
+    208, 239, 117, 1, 208, 216, 117, 1, 214, 165, 117, 1, 214, 114, 117, 1,
+    250, 112, 214, 165, 117, 1, 144, 117, 1, 193, 209, 117, 1, 231, 84, 117,
+    1, 231, 59, 117, 1, 198, 93, 117, 1, 235, 0, 117, 1, 212, 201, 117, 1,
+    212, 183, 117, 1, 198, 108, 117, 1, 235, 11, 117, 1, 11, 198, 108, 117,
+    1, 11, 235, 11, 117, 1, 207, 232, 198, 108, 117, 1, 204, 64, 117, 1, 202,
+    92, 117, 1, 192, 71, 117, 1, 191, 254, 117, 1, 198, 118, 117, 1, 235, 17,
+    117, 1, 11, 198, 118, 117, 1, 188, 117, 1, 192, 112, 117, 1, 191, 255,
+    117, 1, 191, 225, 117, 1, 191, 205, 117, 1, 250, 112, 191, 225, 117, 1,
+    191, 197, 117, 1, 191, 204, 117, 1, 194, 169, 117, 1, 251, 72, 117, 1,
+    229, 187, 117, 1, 247, 146, 117, 1, 201, 54, 117, 1, 235, 1, 117, 1, 200,
+    79, 117, 1, 198, 112, 117, 1, 206, 221, 117, 3, 116, 73, 161, 117, 1,
+    215, 47, 117, 3, 250, 43, 117, 3, 207, 232, 195, 246, 117, 3, 207, 232,
+    250, 43, 117, 18, 3, 64, 117, 18, 3, 252, 33, 117, 18, 3, 251, 68, 117,
+    18, 3, 250, 224, 117, 18, 3, 250, 214, 117, 18, 3, 74, 117, 18, 3, 211,
+    194, 117, 18, 3, 194, 36, 117, 18, 3, 194, 202, 117, 18, 3, 71, 117, 18,
+    3, 234, 88, 117, 18, 3, 234, 73, 117, 18, 3, 211, 252, 117, 18, 3, 70,
+    117, 18, 3, 228, 58, 117, 18, 3, 228, 57, 117, 18, 3, 228, 56, 117, 18,
+    3, 223, 116, 117, 18, 3, 223, 251, 117, 18, 3, 223, 224, 117, 18, 3, 223,
+    78, 117, 18, 3, 223, 164, 117, 18, 3, 68, 117, 18, 3, 197, 119, 117, 18,
+    3, 197, 118, 117, 18, 3, 197, 117, 117, 18, 3, 196, 251, 117, 18, 3, 197,
+    101, 117, 18, 3, 197, 61, 117, 18, 3, 193, 148, 117, 18, 3, 193, 22, 117,
+    18, 3, 251, 108, 117, 18, 3, 251, 104, 117, 18, 3, 234, 13, 117, 18, 3,
+    207, 7, 234, 13, 117, 18, 3, 234, 21, 117, 18, 3, 207, 7, 234, 21, 117,
+    18, 3, 251, 63, 117, 18, 3, 234, 150, 117, 18, 3, 250, 8, 117, 18, 3,
+    211, 130, 117, 18, 3, 215, 151, 117, 18, 3, 214, 167, 117, 18, 3, 197,
+    45, 117, 18, 3, 192, 194, 117, 18, 3, 211, 246, 117, 18, 3, 211, 253,
+    117, 18, 3, 194, 213, 117, 18, 3, 223, 229, 117, 18, 3, 234, 199, 117,
+    18, 3, 223, 114, 117, 18, 3, 197, 95, 117, 158, 207, 101, 117, 158, 198,
+    249, 207, 101, 117, 158, 58, 117, 158, 63, 117, 1, 199, 16, 117, 1, 199,
+    15, 117, 1, 199, 14, 117, 1, 199, 13, 117, 1, 199, 12, 117, 1, 199, 11,
+    117, 1, 199, 10, 117, 1, 207, 232, 199, 17, 117, 1, 207, 232, 199, 16,
+    117, 1, 207, 232, 199, 14, 117, 1, 207, 232, 199, 13, 117, 1, 207, 232,
+    199, 12, 117, 1, 207, 232, 199, 10, 19, 223, 80, 77, 45, 223, 80, 77, 40,
+    242, 200, 229, 15, 77, 40, 242, 200, 223, 80, 77, 37, 2, 27, 232, 247,
+    196, 27, 250, 249, 208, 1, 122, 247, 19, 196, 27, 250, 249, 208, 1, 122,
+    214, 64, 19, 242, 27, 19, 242, 26, 19, 242, 25, 19, 242, 24, 19, 242, 23,
+    19, 242, 22, 19, 242, 21, 19, 242, 20, 19, 242, 19, 19, 242, 18, 19, 242,
+    17, 19, 242, 16, 19, 242, 15, 19, 242, 14, 19, 242, 13, 19, 242, 12, 19,
+    242, 11, 19, 242, 10, 19, 242, 9, 19, 242, 8, 19, 242, 7, 19, 242, 6, 19,
+    242, 5, 19, 242, 4, 19, 242, 3, 19, 242, 2, 19, 242, 1, 19, 242, 0, 19,
+    241, 255, 19, 241, 254, 19, 241, 253, 19, 241, 252, 19, 241, 251, 19,
+    241, 250, 19, 241, 249, 19, 241, 248, 19, 241, 247, 19, 241, 246, 19,
+    241, 245, 19, 241, 244, 19, 241, 243, 19, 241, 242, 19, 241, 241, 19,
+    241, 240, 19, 241, 239, 19, 241, 238, 19, 241, 237, 19, 241, 236, 19,
+    241, 235, 19, 241, 234, 19, 241, 233, 19, 241, 232, 19, 241, 231, 19,
+    241, 230, 19, 241, 229, 19, 241, 228, 19, 241, 227, 19, 241, 226, 19,
+    241, 225, 19, 241, 224, 19, 241, 223, 19, 241, 222, 19, 241, 221, 19,
+    241, 220, 19, 241, 219, 19, 241, 218, 19, 241, 217, 19, 241, 216, 19,
+    241, 215, 19, 241, 214, 19, 241, 213, 19, 241, 212, 19, 241, 211, 19,
+    241, 210, 19, 241, 209, 19, 241, 208, 19, 241, 207, 19, 241, 206, 19,
+    241, 205, 19, 241, 204, 19, 241, 203, 19, 241, 202, 19, 241, 201, 19,
+    241, 200, 19, 241, 199, 19, 241, 198, 19, 241, 197, 19, 241, 196, 19,
+    241, 195, 19, 241, 194, 19, 241, 193, 19, 241, 192, 19, 241, 191, 19,
+    241, 190, 19, 241, 189, 19, 241, 188, 19, 241, 187, 19, 241, 186, 19,
+    241, 185, 19, 241, 184, 19, 241, 183, 19, 241, 182, 19, 241, 181, 19,
+    241, 180, 19, 241, 179, 19, 241, 178, 19, 241, 177, 19, 241, 176, 19,
+    241, 175, 19, 241, 174, 19, 241, 173, 19, 241, 172, 19, 241, 171, 19,
+    241, 170, 19, 241, 169, 19, 241, 168, 19, 241, 167, 19, 241, 166, 19,
+    241, 165, 19, 241, 164, 19, 241, 163, 19, 241, 162, 19, 241, 161, 19,
+    241, 160, 19, 241, 159, 19, 241, 158, 19, 241, 157, 19, 241, 156, 19,
+    241, 155, 19, 241, 154, 19, 241, 153, 19, 241, 152, 19, 241, 151, 19,
+    241, 150, 19, 241, 149, 19, 241, 148, 19, 241, 147, 19, 241, 146, 19,
+    241, 145, 19, 241, 144, 19, 241, 143, 19, 241, 142, 19, 241, 141, 19,
+    241, 140, 19, 241, 139, 19, 241, 138, 19, 241, 137, 19, 241, 136, 19,
+    241, 135, 19, 241, 134, 19, 241, 133, 19, 241, 132, 19, 241, 131, 19,
+    241, 130, 19, 241, 129, 19, 241, 128, 19, 241, 127, 19, 241, 126, 19,
+    241, 125, 19, 241, 124, 19, 241, 123, 19, 241, 122, 19, 241, 121, 19,
+    241, 120, 19, 241, 119, 19, 241, 118, 19, 241, 117, 19, 241, 116, 19,
+    241, 115, 19, 241, 114, 19, 241, 113, 19, 241, 112, 19, 241, 111, 19,
+    241, 110, 19, 241, 109, 19, 241, 108, 19, 241, 107, 19, 241, 106, 19,
+    241, 105, 19, 241, 104, 19, 241, 103, 19, 241, 102, 19, 241, 101, 19,
+    241, 100, 19, 241, 99, 19, 241, 98, 19, 241, 97, 19, 241, 96, 19, 241,
+    95, 19, 241, 94, 19, 241, 93, 19, 241, 92, 19, 241, 91, 19, 241, 90, 19,
+    241, 89, 19, 241, 88, 19, 241, 87, 19, 241, 86, 19, 241, 85, 19, 241, 84,
+    19, 241, 83, 19, 241, 82, 19, 241, 81, 19, 241, 80, 19, 241, 79, 19, 241,
+    78, 19, 241, 77, 19, 241, 76, 19, 241, 75, 19, 241, 74, 19, 241, 73, 19,
+    241, 72, 19, 241, 71, 19, 241, 70, 19, 241, 69, 19, 241, 68, 19, 241, 67,
+    19, 241, 66, 19, 241, 65, 19, 241, 64, 19, 241, 63, 19, 241, 62, 19, 241,
+    61, 19, 241, 60, 19, 241, 59, 19, 241, 58, 19, 241, 57, 19, 241, 56, 19,
+    241, 55, 19, 241, 54, 19, 241, 53, 19, 241, 52, 19, 241, 51, 19, 241, 50,
+    19, 241, 49, 19, 241, 48, 19, 241, 47, 19, 241, 46, 19, 241, 45, 19, 241,
+    44, 19, 241, 43, 19, 241, 42, 19, 241, 41, 19, 241, 40, 19, 241, 39, 19,
+    241, 38, 19, 241, 37, 19, 241, 36, 19, 241, 35, 19, 241, 34, 19, 241, 33,
+    19, 241, 32, 19, 241, 31, 19, 241, 30, 19, 241, 29, 19, 241, 28, 19, 241,
+    27, 19, 241, 26, 19, 241, 25, 19, 241, 24, 19, 241, 23, 19, 241, 22, 19,
+    241, 21, 19, 241, 20, 19, 241, 19, 19, 241, 18, 19, 241, 17, 19, 241, 16,
+    19, 241, 15, 19, 241, 14, 19, 241, 13, 19, 241, 12, 19, 241, 11, 19, 241,
+    10, 19, 241, 9, 19, 241, 8, 19, 241, 7, 19, 241, 6, 19, 241, 5, 19, 241,
+    4, 19, 241, 3, 19, 241, 2, 19, 241, 1, 19, 241, 0, 19, 240, 255, 19, 240,
+    254, 19, 240, 253, 19, 240, 252, 19, 240, 251, 19, 240, 250, 19, 240,
+    249, 19, 240, 248, 19, 240, 247, 19, 240, 246, 19, 240, 245, 19, 240,
+    244, 19, 240, 243, 19, 240, 242, 19, 240, 241, 19, 240, 240, 19, 240,
+    239, 19, 240, 238, 19, 240, 237, 19, 240, 236, 19, 240, 235, 19, 240,
+    234, 19, 240, 233, 19, 240, 232, 19, 240, 231, 19, 240, 230, 19, 240,
+    229, 19, 240, 228, 19, 240, 227, 19, 240, 226, 19, 240, 225, 19, 240,
+    224, 19, 240, 223, 19, 240, 222, 19, 240, 221, 19, 240, 220, 19, 240,
+    219, 19, 240, 218, 19, 240, 217, 19, 240, 216, 19, 240, 215, 19, 240,
+    214, 19, 240, 213, 19, 240, 212, 19, 240, 211, 19, 240, 210, 19, 240,
+    209, 19, 240, 208, 19, 240, 207, 19, 240, 206, 19, 240, 205, 19, 240,
+    204, 19, 240, 203, 19, 240, 202, 19, 240, 201, 19, 240, 200, 19, 240,
+    199, 19, 240, 198, 19, 240, 197, 19, 240, 196, 19, 240, 195, 19, 240,
+    194, 19, 240, 193, 19, 240, 192, 19, 240, 191, 19, 240, 190, 19, 240,
+    189, 19, 240, 188, 19, 240, 187, 19, 240, 186, 19, 240, 185, 19, 240,
+    184, 19, 240, 183, 19, 240, 182, 19, 240, 181, 19, 240, 180, 19, 240,
+    179, 19, 240, 178, 19, 240, 177, 19, 240, 176, 19, 240, 175, 19, 240,
+    174, 19, 240, 173, 19, 240, 172, 19, 240, 171, 19, 240, 170, 19, 240,
+    169, 19, 240, 168, 19, 240, 167, 19, 240, 166, 19, 240, 165, 19, 240,
+    164, 19, 240, 163, 19, 240, 162, 19, 240, 161, 19, 240, 160, 19, 240,
+    159, 19, 240, 158, 19, 240, 157, 19, 240, 156, 19, 240, 155, 19, 240,
+    154, 19, 240, 153, 19, 240, 152, 19, 240, 151, 19, 240, 150, 19, 240,
+    149, 19, 240, 148, 19, 240, 147, 19, 240, 146, 19, 240, 145, 19, 240,
+    144, 19, 240, 143, 19, 240, 142, 19, 240, 141, 19, 240, 140, 19, 240,
+    139, 19, 240, 138, 19, 240, 137, 19, 240, 136, 19, 240, 135, 19, 240,
+    134, 19, 240, 133, 19, 240, 132, 19, 240, 131, 19, 240, 130, 19, 240,
+    129, 19, 240, 128, 19, 240, 127, 19, 240, 126, 19, 240, 125, 19, 240,
+    124, 19, 240, 123, 19, 240, 122, 19, 240, 121, 19, 240, 120, 19, 240,
+    119, 19, 240, 118, 19, 240, 117, 19, 240, 116, 19, 240, 115, 19, 240,
+    114, 19, 240, 113, 19, 240, 112, 19, 240, 111, 19, 240, 110, 19, 240,
+    109, 19, 240, 108, 19, 240, 107, 19, 240, 106, 19, 240, 105, 19, 240,
+    104, 19, 240, 103, 19, 240, 102, 19, 240, 101, 19, 240, 100, 19, 240, 99,
+    19, 240, 98, 19, 240, 97, 19, 240, 96, 19, 240, 95, 19, 240, 94, 19, 240,
+    93, 19, 240, 92, 19, 240, 91, 19, 240, 90, 19, 240, 89, 19, 240, 88, 19,
+    240, 87, 19, 240, 86, 19, 240, 85, 19, 240, 84, 19, 240, 83, 19, 240, 82,
+    19, 240, 81, 19, 240, 80, 19, 240, 79, 19, 240, 78, 19, 240, 77, 19, 240,
+    76, 19, 240, 75, 19, 240, 74, 19, 240, 73, 19, 240, 72, 19, 240, 71, 19,
+    240, 70, 19, 240, 69, 19, 240, 68, 19, 240, 67, 19, 240, 66, 19, 240, 65,
+    19, 240, 64, 19, 240, 63, 19, 240, 62, 19, 240, 61, 19, 240, 60, 19, 240,
+    59, 19, 240, 58, 19, 240, 57, 19, 240, 56, 19, 240, 55, 19, 240, 54, 19,
+    240, 53, 19, 240, 52, 19, 240, 51, 19, 240, 50, 19, 240, 49, 19, 240, 48,
+    19, 240, 47, 19, 240, 46, 19, 240, 45, 19, 240, 44, 19, 240, 43, 19, 240,
+    42, 19, 240, 41, 19, 240, 40, 19, 240, 39, 19, 240, 38, 19, 240, 37, 19,
+    240, 36, 19, 240, 35, 19, 240, 34, 19, 240, 33, 19, 240, 32, 19, 240, 31,
+    19, 240, 30, 19, 240, 29, 19, 240, 28, 19, 240, 27, 19, 240, 26, 19, 240,
+    25, 19, 240, 24, 19, 240, 23, 19, 240, 22, 19, 240, 21, 19, 240, 20, 19,
+    240, 19, 19, 240, 18, 19, 240, 17, 19, 240, 16, 19, 240, 15, 19, 240, 14,
+    19, 240, 13, 19, 240, 12, 19, 240, 11, 19, 240, 10, 19, 240, 9, 19, 240,
+    8, 19, 240, 7, 19, 240, 6, 19, 240, 5, 19, 240, 4, 19, 240, 3, 19, 240,
+    2, 19, 240, 1, 19, 240, 0, 19, 239, 255, 19, 239, 254, 19, 239, 253, 19,
+    239, 252, 19, 239, 251, 19, 239, 250, 19, 239, 249, 19, 239, 248, 19,
+    239, 247, 19, 239, 246, 19, 239, 245, 19, 239, 244, 19, 239, 243, 19,
+    239, 242, 19, 239, 241, 19, 239, 240, 19, 239, 239, 19, 239, 238, 19,
+    239, 237, 19, 239, 236, 19, 239, 235, 19, 239, 234, 19, 239, 233, 19,
+    239, 232, 19, 239, 231, 19, 239, 230, 19, 239, 229, 19, 239, 228, 19,
+    239, 227, 19, 239, 226, 19, 239, 225, 19, 239, 224, 19, 239, 223, 19,
+    239, 222, 19, 239, 221, 19, 239, 220, 19, 239, 219, 19, 239, 218, 19,
+    239, 217, 19, 239, 216, 19, 239, 215, 19, 239, 214, 19, 239, 213, 19,
+    239, 212, 19, 239, 211, 19, 239, 210, 19, 239, 209, 19, 239, 208, 19,
+    239, 207, 19, 239, 206, 19, 239, 205, 19, 239, 204, 19, 239, 203, 19,
+    239, 202, 19, 239, 201, 19, 239, 200, 19, 239, 199, 19, 239, 198, 19,
+    239, 197, 19, 239, 196, 19, 239, 195, 19, 239, 194, 19, 239, 193, 19,
+    239, 192, 19, 239, 191, 19, 239, 190, 19, 239, 189, 19, 239, 188, 19,
+    239, 187, 19, 239, 186, 19, 239, 185, 19, 239, 184, 19, 239, 183, 19,
+    239, 182, 19, 239, 181, 19, 239, 180, 19, 239, 179, 19, 239, 178, 19,
+    239, 177, 19, 239, 176, 19, 239, 175, 19, 239, 174, 19, 239, 173, 19,
+    239, 172, 19, 239, 171, 19, 239, 170, 19, 239, 169, 19, 239, 168, 19,
+    239, 167, 19, 239, 166, 19, 239, 165, 19, 239, 164, 19, 239, 163, 19,
+    239, 162, 19, 239, 161, 19, 239, 160, 19, 239, 159, 19, 239, 158, 19,
+    239, 157, 19, 239, 156, 19, 239, 155, 19, 239, 154, 19, 239, 153, 19,
+    239, 152, 19, 239, 151, 19, 239, 150, 19, 239, 149, 19, 239, 148, 19,
+    239, 147, 19, 239, 146, 19, 239, 145, 19, 239, 144, 19, 239, 143, 19,
+    239, 142, 19, 239, 141, 19, 239, 140, 19, 239, 139, 19, 239, 138, 19,
+    239, 137, 19, 239, 136, 19, 239, 135, 19, 239, 134, 19, 239, 133, 19,
+    239, 132, 19, 239, 131, 19, 239, 130, 19, 239, 129, 19, 239, 128, 19,
+    239, 127, 19, 239, 126, 19, 239, 125, 19, 239, 124, 19, 239, 123, 19,
+    239, 122, 19, 239, 121, 19, 239, 120, 19, 239, 119, 19, 239, 118, 19,
+    239, 117, 19, 239, 116, 19, 239, 115, 19, 239, 114, 19, 239, 113, 19,
+    239, 112, 19, 239, 111, 19, 239, 110, 19, 239, 109, 19, 239, 108, 19,
+    239, 107, 19, 239, 106, 19, 239, 105, 19, 239, 104, 19, 239, 103, 19,
+    239, 102, 19, 239, 101, 19, 239, 100, 19, 239, 99, 19, 239, 98, 19, 239,
+    97, 19, 239, 96, 19, 239, 95, 19, 239, 94, 19, 239, 93, 19, 239, 92, 19,
+    239, 91, 19, 239, 90, 19, 239, 89, 19, 239, 88, 19, 239, 87, 19, 239, 86,
+    19, 239, 85, 19, 239, 84, 19, 239, 83, 19, 239, 82, 19, 239, 81, 19, 239,
+    80, 19, 239, 79, 19, 239, 78, 19, 239, 77, 19, 239, 76, 19, 239, 75, 19,
+    239, 74, 19, 239, 73, 19, 239, 72, 19, 239, 71, 19, 239, 70, 19, 239, 69,
+    19, 239, 68, 19, 239, 67, 19, 239, 66, 19, 239, 65, 19, 239, 64, 19, 239,
+    63, 19, 239, 62, 19, 239, 61, 19, 239, 60, 19, 239, 59, 19, 239, 58, 19,
+    239, 57, 19, 239, 56, 19, 239, 55, 19, 239, 54, 19, 239, 53, 19, 239, 52,
+    19, 239, 51, 19, 239, 50, 19, 239, 49, 19, 239, 48, 19, 239, 47, 19, 239,
+    46, 19, 239, 45, 19, 239, 44, 19, 239, 43, 19, 239, 42, 19, 239, 41, 19,
+    239, 40, 19, 239, 39, 19, 239, 38, 19, 239, 37, 19, 239, 36, 19, 239, 35,
+    19, 239, 34, 19, 239, 33, 19, 239, 32, 19, 239, 31, 19, 239, 30, 19, 239,
+    29, 19, 239, 28, 37, 2, 27, 246, 98, 37, 2, 27, 246, 97, 37, 2, 27, 246,
+    96, 37, 2, 27, 246, 95, 37, 2, 27, 246, 94, 37, 2, 27, 246, 93, 37, 2,
+    27, 246, 92, 37, 2, 27, 246, 91, 37, 2, 27, 246, 90, 37, 2, 27, 246, 89,
+    37, 2, 27, 246, 88, 37, 2, 27, 246, 87, 37, 2, 27, 246, 86, 37, 2, 27,
+    246, 85, 37, 2, 27, 246, 84, 37, 2, 27, 246, 83, 37, 2, 27, 246, 82, 37,
+    2, 27, 246, 81, 37, 2, 27, 246, 80, 37, 2, 27, 246, 79, 37, 2, 27, 246,
+    78, 37, 2, 27, 246, 77, 37, 2, 27, 246, 76, 37, 2, 27, 246, 75, 37, 2,
+    27, 246, 74, 37, 2, 27, 246, 73, 37, 2, 27, 246, 72, 37, 2, 27, 246, 71,
+    37, 2, 27, 246, 70, 37, 2, 27, 246, 69, 37, 2, 27, 246, 68, 37, 2, 27,
+    246, 67, 37, 2, 27, 246, 66, 37, 2, 27, 246, 65, 37, 2, 27, 246, 64, 37,
+    2, 27, 246, 63, 37, 2, 27, 246, 62, 37, 2, 27, 246, 61, 37, 2, 27, 246,
+    60, 37, 2, 27, 246, 59, 37, 2, 27, 246, 58, 37, 2, 27, 246, 57, 37, 2,
+    27, 246, 56, 37, 2, 27, 246, 55, 37, 2, 27, 246, 54, 37, 2, 27, 246, 53,
+    37, 2, 27, 246, 52, 37, 2, 27, 246, 51, 37, 2, 27, 246, 50, 37, 2, 27,
+    246, 49, 37, 2, 27, 246, 48, 37, 2, 27, 246, 47, 37, 2, 27, 246, 46, 37,
+    2, 27, 246, 45, 37, 2, 27, 246, 44, 37, 2, 27, 246, 43, 37, 2, 27, 246,
+    42, 37, 2, 27, 246, 41, 37, 2, 27, 246, 40, 37, 2, 27, 246, 39, 37, 2,
+    27, 246, 38, 37, 2, 27, 246, 37, 37, 2, 27, 246, 36, 37, 2, 27, 246, 35,
+    37, 2, 27, 246, 34, 37, 2, 27, 246, 33, 37, 2, 27, 246, 32, 37, 2, 27,
+    246, 31, 37, 2, 27, 246, 30, 37, 2, 27, 246, 29, 37, 2, 27, 246, 28, 37,
+    2, 27, 246, 27, 37, 2, 27, 246, 26, 37, 2, 27, 246, 25, 37, 2, 27, 246,
+    24, 37, 2, 27, 246, 23, 37, 2, 27, 246, 22, 37, 2, 27, 246, 21, 37, 2,
+    27, 246, 20, 37, 2, 27, 246, 19, 37, 2, 27, 246, 18, 37, 2, 27, 246, 17,
+    37, 2, 27, 246, 16, 37, 2, 27, 246, 15, 37, 2, 27, 246, 14, 37, 2, 27,
+    246, 13, 37, 2, 27, 246, 12, 37, 2, 27, 246, 11, 37, 2, 27, 246, 10, 37,
+    2, 27, 246, 9, 37, 2, 27, 246, 8, 37, 2, 27, 246, 7, 37, 2, 27, 246, 6,
+    37, 2, 27, 246, 5, 37, 2, 27, 246, 4, 37, 2, 27, 246, 3, 37, 2, 27, 246,
+    2, 37, 2, 27, 246, 1, 37, 2, 27, 246, 0, 37, 2, 27, 245, 255, 37, 2, 27,
+    245, 254, 37, 2, 27, 245, 253, 37, 2, 27, 245, 252, 37, 2, 27, 245, 251,
+    37, 2, 27, 245, 250, 37, 2, 27, 245, 249, 37, 2, 27, 245, 248, 37, 2, 27,
+    245, 247, 37, 2, 27, 245, 246, 37, 2, 27, 245, 245, 37, 2, 27, 245, 244,
+    37, 2, 27, 245, 243, 37, 2, 27, 245, 242, 37, 2, 27, 245, 241, 37, 2, 27,
+    245, 240, 37, 2, 27, 245, 239, 37, 2, 27, 245, 238, 37, 2, 27, 245, 237,
+    37, 2, 27, 245, 236, 37, 2, 27, 245, 235, 37, 2, 27, 245, 234, 37, 2, 27,
+    245, 233, 37, 2, 27, 245, 232, 37, 2, 27, 245, 231, 37, 2, 27, 245, 230,
+    37, 2, 27, 245, 229, 37, 2, 27, 245, 228, 37, 2, 27, 245, 227, 37, 2, 27,
+    245, 226, 37, 2, 27, 245, 225, 37, 2, 27, 245, 224, 37, 2, 27, 245, 223,
+    37, 2, 27, 245, 222, 37, 2, 27, 245, 221, 37, 2, 27, 245, 220, 37, 2, 27,
+    245, 219, 37, 2, 27, 245, 218, 37, 2, 27, 245, 217, 37, 2, 27, 245, 216,
+    37, 2, 27, 245, 215, 37, 2, 27, 245, 214, 37, 2, 27, 245, 213, 37, 2, 27,
+    245, 212, 37, 2, 27, 245, 211, 37, 2, 27, 245, 210, 37, 2, 27, 245, 209,
+    37, 2, 27, 245, 208, 37, 2, 27, 245, 207, 37, 2, 27, 245, 206, 37, 2, 27,
+    245, 205, 37, 2, 27, 245, 204, 37, 2, 27, 245, 203, 37, 2, 27, 245, 202,
+    37, 2, 27, 245, 201, 37, 2, 27, 245, 200, 37, 2, 27, 245, 199, 37, 2, 27,
+    245, 198, 37, 2, 27, 245, 197, 37, 2, 27, 245, 196, 37, 2, 27, 245, 195,
+    37, 2, 27, 245, 194, 37, 2, 27, 245, 193, 37, 2, 27, 245, 192, 37, 2, 27,
+    245, 191, 37, 2, 27, 245, 190, 37, 2, 27, 245, 189, 37, 2, 27, 245, 188,
+    37, 2, 27, 245, 187, 37, 2, 27, 245, 186, 37, 2, 27, 245, 185, 37, 2, 27,
+    245, 184, 37, 2, 27, 245, 183, 37, 2, 27, 245, 182, 37, 2, 27, 245, 181,
+    37, 2, 27, 245, 180, 37, 2, 27, 245, 179, 37, 2, 27, 245, 178, 37, 2, 27,
+    245, 177, 37, 2, 27, 245, 176, 37, 2, 27, 245, 175, 37, 2, 27, 245, 174,
+    37, 2, 27, 245, 173, 37, 2, 27, 245, 172, 37, 2, 27, 245, 171, 37, 2, 27,
+    245, 170, 37, 2, 27, 245, 169, 37, 2, 27, 245, 168, 37, 2, 27, 245, 167,
+    37, 2, 27, 245, 166, 37, 2, 27, 245, 165, 37, 2, 27, 245, 164, 37, 2, 27,
+    245, 163, 37, 2, 27, 245, 162, 37, 2, 27, 245, 161, 37, 2, 27, 245, 160,
+    37, 2, 27, 245, 159, 37, 2, 27, 245, 158, 37, 2, 27, 245, 157, 37, 2, 27,
+    245, 156, 37, 2, 27, 245, 155, 37, 2, 27, 245, 154, 37, 2, 27, 245, 153,
+    37, 2, 27, 245, 152, 37, 2, 27, 245, 151, 37, 2, 27, 245, 150, 37, 2, 27,
+    245, 149, 37, 2, 27, 245, 148, 37, 2, 27, 245, 147, 37, 2, 27, 245, 146,
+    37, 2, 27, 245, 145, 37, 2, 27, 245, 144, 37, 2, 27, 245, 143, 37, 2, 27,
+    245, 142, 37, 2, 27, 245, 141, 37, 2, 27, 245, 140, 37, 2, 27, 245, 139,
+    37, 2, 27, 245, 138, 37, 2, 27, 245, 137, 37, 2, 27, 245, 136, 37, 2, 27,
+    245, 135, 37, 2, 27, 245, 134, 37, 2, 27, 245, 133, 37, 2, 27, 245, 132,
+    37, 2, 27, 245, 131, 37, 2, 27, 245, 130, 37, 2, 27, 245, 129, 37, 2, 27,
+    245, 128, 37, 2, 27, 245, 127, 37, 2, 27, 245, 126, 37, 2, 27, 245, 125,
+    37, 2, 27, 245, 124, 37, 2, 27, 245, 123, 37, 2, 27, 245, 122, 37, 2, 27,
+    245, 121, 37, 2, 27, 245, 120, 37, 2, 27, 245, 119, 37, 2, 27, 245, 118,
+    37, 2, 27, 245, 117, 37, 2, 27, 245, 116, 37, 2, 27, 245, 115, 37, 2, 27,
+    245, 114, 37, 2, 27, 245, 113, 37, 2, 27, 245, 112, 37, 2, 27, 245, 111,
+    37, 2, 27, 245, 110, 37, 2, 27, 245, 109, 37, 2, 27, 245, 108, 37, 2, 27,
+    245, 107, 37, 2, 27, 245, 106, 37, 2, 27, 245, 105, 37, 2, 27, 245, 104,
+    37, 2, 27, 245, 103, 37, 2, 27, 245, 102, 37, 2, 27, 245, 101, 37, 2, 27,
+    245, 100, 37, 2, 27, 245, 99, 37, 2, 27, 245, 98, 37, 2, 27, 245, 97, 37,
+    2, 27, 245, 96, 37, 2, 27, 245, 95, 37, 2, 27, 245, 94, 37, 2, 27, 245,
+    93, 37, 2, 27, 245, 92, 37, 2, 27, 245, 91, 37, 2, 27, 245, 90, 37, 2,
+    27, 245, 89, 37, 2, 27, 245, 88, 37, 2, 27, 245, 87, 37, 2, 27, 245, 86,
+    37, 2, 27, 245, 85, 37, 2, 27, 245, 84, 37, 2, 27, 245, 83, 37, 2, 27,
+    245, 82, 37, 2, 27, 245, 81, 37, 2, 27, 245, 80, 37, 2, 27, 245, 79, 37,
+    2, 27, 245, 78, 37, 2, 27, 245, 77, 37, 2, 27, 245, 76, 37, 2, 27, 245,
+    75, 37, 2, 27, 245, 74, 37, 2, 27, 245, 73, 37, 2, 27, 245, 72, 37, 2,
+    27, 245, 71, 37, 2, 27, 245, 70, 37, 2, 27, 245, 69, 37, 2, 27, 245, 68,
+    37, 2, 27, 245, 67, 37, 2, 27, 245, 66, 37, 2, 27, 245, 65, 37, 2, 27,
+    245, 64, 37, 2, 27, 245, 63, 37, 2, 27, 245, 62, 37, 2, 27, 245, 61, 37,
+    2, 27, 245, 60, 37, 2, 27, 245, 59, 37, 2, 27, 245, 58, 37, 2, 27, 245,
+    57, 37, 2, 27, 245, 56, 37, 2, 27, 245, 55, 37, 2, 27, 245, 54, 37, 2,
+    27, 245, 53, 37, 2, 27, 245, 52, 37, 2, 27, 245, 51, 37, 2, 27, 245, 50,
+    37, 2, 27, 245, 49, 37, 2, 27, 245, 48, 37, 2, 27, 245, 47, 37, 2, 27,
+    245, 46, 37, 2, 27, 245, 45, 37, 2, 27, 245, 44, 37, 2, 27, 245, 43, 37,
+    2, 27, 245, 42, 37, 2, 27, 245, 41, 37, 2, 27, 245, 40, 37, 2, 27, 245,
+    39, 37, 2, 27, 245, 38, 37, 2, 27, 245, 37, 37, 2, 27, 245, 36, 37, 2,
+    27, 245, 35, 37, 2, 27, 245, 34, 37, 2, 27, 245, 33, 37, 2, 27, 245, 32,
+    37, 2, 27, 245, 31, 37, 2, 27, 245, 30, 37, 2, 27, 245, 29, 37, 2, 27,
+    245, 28, 37, 2, 27, 245, 27, 37, 2, 27, 245, 26, 37, 2, 27, 245, 25, 37,
+    2, 27, 245, 24, 37, 2, 27, 245, 23, 37, 2, 27, 245, 22, 37, 2, 27, 245,
+    21, 37, 2, 27, 245, 20, 37, 2, 27, 245, 19, 37, 2, 27, 245, 18, 37, 2,
+    27, 245, 17, 37, 2, 27, 245, 16, 37, 2, 27, 245, 15, 37, 2, 27, 245, 14,
+    37, 2, 27, 245, 13, 37, 2, 27, 245, 12, 37, 2, 27, 245, 11, 37, 2, 27,
+    245, 10, 37, 2, 27, 245, 9, 37, 2, 27, 245, 8, 37, 2, 27, 245, 7, 37, 2,
+    27, 245, 6, 37, 2, 27, 245, 5, 37, 2, 27, 245, 4, 37, 2, 27, 245, 3, 37,
+    2, 27, 245, 2, 37, 2, 27, 245, 1, 37, 2, 27, 245, 0, 37, 2, 27, 244, 255,
+    37, 2, 27, 244, 254, 37, 2, 27, 244, 253, 37, 2, 27, 244, 252, 37, 2, 27,
+    244, 251, 37, 2, 27, 244, 250, 37, 2, 27, 244, 249, 37, 2, 27, 244, 248,
+    37, 2, 27, 244, 247, 37, 2, 27, 244, 246, 37, 2, 27, 244, 245, 37, 2, 27,
+    244, 244, 37, 2, 27, 244, 243, 37, 2, 27, 244, 242, 37, 2, 27, 244, 241,
+    37, 2, 27, 244, 240, 37, 2, 27, 244, 239, 37, 2, 27, 244, 238, 37, 2, 27,
+    244, 237, 37, 2, 27, 244, 236, 37, 2, 27, 244, 235, 37, 2, 27, 244, 234,
+    37, 2, 27, 244, 233, 37, 2, 27, 244, 232, 37, 2, 27, 244, 231, 37, 2, 27,
+    244, 230, 37, 2, 27, 244, 229, 37, 2, 27, 244, 228, 37, 2, 27, 244, 227,
+    37, 2, 27, 244, 226, 37, 2, 27, 244, 225, 37, 2, 27, 244, 224, 37, 2, 27,
+    244, 223, 37, 2, 27, 244, 222, 37, 2, 27, 244, 221, 37, 2, 27, 244, 220,
+    37, 2, 27, 244, 219, 37, 2, 27, 244, 218, 37, 2, 27, 244, 217, 37, 2, 27,
+    244, 216, 37, 2, 27, 244, 215, 37, 2, 27, 244, 214, 37, 2, 27, 244, 213,
+    37, 2, 27, 244, 212, 37, 2, 27, 244, 211, 37, 2, 27, 244, 210, 37, 2, 27,
+    244, 209, 37, 2, 27, 244, 208, 37, 2, 27, 244, 207, 37, 2, 27, 244, 206,
+    37, 2, 27, 244, 205, 37, 2, 27, 244, 204, 37, 2, 27, 244, 203, 37, 2, 27,
+    244, 202, 37, 2, 27, 244, 201, 37, 2, 27, 244, 200, 37, 2, 27, 244, 199,
+    37, 2, 27, 244, 198, 37, 2, 27, 244, 197, 37, 2, 27, 244, 196, 37, 2, 27,
+    244, 195, 37, 2, 27, 244, 194, 37, 2, 27, 244, 193, 37, 2, 27, 244, 192,
+    37, 2, 27, 244, 191, 37, 2, 27, 244, 190, 37, 2, 27, 244, 189, 37, 2, 27,
+    244, 188, 37, 2, 27, 244, 187, 37, 2, 27, 244, 186, 37, 2, 27, 244, 185,
+    37, 2, 27, 244, 184, 37, 2, 27, 244, 183, 37, 2, 27, 244, 182, 37, 2, 27,
+    244, 181, 37, 2, 27, 244, 180, 37, 2, 27, 244, 179, 37, 2, 27, 244, 178,
+    37, 2, 27, 244, 177, 37, 2, 27, 244, 176, 37, 2, 27, 244, 175, 37, 2, 27,
+    244, 174, 37, 2, 27, 244, 173, 37, 2, 27, 244, 172, 37, 2, 27, 244, 171,
+    37, 2, 27, 244, 170, 37, 2, 27, 244, 169, 37, 2, 27, 244, 168, 37, 2, 27,
+    244, 167, 37, 2, 27, 244, 166, 37, 2, 27, 244, 165, 37, 2, 27, 244, 164,
+    37, 2, 27, 244, 163, 37, 2, 27, 244, 162, 37, 2, 27, 244, 161, 37, 2, 27,
+    244, 160, 37, 2, 27, 244, 159, 37, 2, 27, 244, 158, 37, 2, 27, 244, 157,
+    37, 2, 27, 244, 156, 37, 2, 27, 244, 155, 37, 2, 27, 244, 154, 37, 2, 27,
+    244, 153, 37, 2, 27, 244, 152, 37, 2, 27, 244, 151, 37, 2, 27, 244, 150,
+    37, 2, 27, 244, 149, 37, 2, 27, 244, 148, 37, 2, 27, 244, 147, 37, 2, 27,
+    244, 146, 37, 2, 27, 244, 145, 37, 2, 27, 244, 144, 37, 2, 27, 244, 143,
+    37, 2, 27, 244, 142, 37, 2, 27, 244, 141, 75, 1, 250, 112, 71, 229, 140,
+    1, 250, 112, 193, 69, 59, 1, 255, 33, 59, 1, 255, 32, 59, 1, 255, 31, 59,
+    1, 255, 27, 59, 1, 228, 96, 59, 1, 228, 95, 59, 1, 228, 94, 59, 1, 228,
+    93, 59, 1, 197, 182, 59, 1, 197, 181, 59, 1, 197, 180, 59, 1, 197, 179,
+    59, 1, 197, 178, 59, 1, 234, 251, 59, 1, 234, 250, 59, 1, 234, 249, 59,
+    1, 234, 248, 59, 1, 234, 247, 59, 1, 212, 114, 59, 1, 212, 113, 59, 1,
+    212, 112, 59, 1, 222, 173, 59, 1, 222, 170, 59, 1, 222, 169, 59, 1, 222,
+    168, 59, 1, 222, 167, 59, 1, 222, 166, 59, 1, 222, 165, 59, 1, 222, 164,
+    59, 1, 222, 163, 59, 1, 222, 172, 59, 1, 222, 171, 59, 1, 222, 162, 59,
+    1, 221, 203, 59, 1, 221, 202, 59, 1, 221, 201, 59, 1, 221, 200, 59, 1,
+    221, 199, 59, 1, 221, 198, 59, 1, 221, 197, 59, 1, 221, 196, 59, 1, 221,
+    32, 59, 1, 221, 31, 59, 1, 221, 30, 59, 1, 221, 29, 59, 1, 221, 28, 59,
+    1, 221, 27, 59, 1, 221, 26, 59, 1, 222, 56, 59, 1, 222, 55, 59, 1, 222,
+    54, 59, 1, 222, 53, 59, 1, 222, 52, 59, 1, 222, 51, 59, 1, 221, 112, 59,
+    1, 221, 111, 59, 1, 221, 110, 59, 1, 221, 109, 59, 1, 206, 100, 59, 1,
+    206, 99, 59, 1, 206, 98, 59, 1, 206, 97, 59, 1, 206, 96, 59, 1, 206, 95,
+    59, 1, 206, 94, 59, 1, 206, 93, 59, 1, 203, 124, 59, 1, 203, 123, 59, 1,
+    203, 122, 59, 1, 203, 121, 59, 1, 203, 120, 59, 1, 203, 119, 59, 1, 201,
+    183, 59, 1, 201, 182, 59, 1, 201, 181, 59, 1, 201, 180, 59, 1, 201, 179,
+    59, 1, 201, 178, 59, 1, 201, 177, 59, 1, 201, 176, 59, 1, 205, 222, 59,
+    1, 205, 221, 59, 1, 205, 220, 59, 1, 205, 219, 59, 1, 205, 218, 59, 1,
+    202, 211, 59, 1, 202, 210, 59, 1, 202, 209, 59, 1, 202, 208, 59, 1, 202,
+    207, 59, 1, 202, 206, 59, 1, 202, 205, 59, 1, 200, 180, 59, 1, 200, 179,
+    59, 1, 200, 178, 59, 1, 200, 177, 59, 1, 199, 127, 59, 1, 199, 126, 59,
+    1, 199, 125, 59, 1, 199, 124, 59, 1, 199, 123, 59, 1, 199, 122, 59, 1,
+    199, 121, 59, 1, 198, 44, 59, 1, 198, 43, 59, 1, 198, 42, 59, 1, 198, 41,
+    59, 1, 198, 40, 59, 1, 200, 78, 59, 1, 200, 77, 59, 1, 200, 76, 59, 1,
+    200, 75, 59, 1, 200, 74, 59, 1, 200, 73, 59, 1, 200, 72, 59, 1, 200, 71,
+    59, 1, 200, 70, 59, 1, 199, 36, 59, 1, 199, 35, 59, 1, 199, 34, 59, 1,
+    199, 33, 59, 1, 199, 32, 59, 1, 199, 31, 59, 1, 199, 30, 59, 1, 215, 96,
+    59, 1, 215, 95, 59, 1, 215, 94, 59, 1, 215, 93, 59, 1, 215, 92, 59, 1,
+    215, 91, 59, 1, 215, 90, 59, 1, 215, 89, 59, 1, 215, 88, 59, 1, 214, 59,
+    59, 1, 214, 58, 59, 1, 214, 57, 59, 1, 214, 56, 59, 1, 214, 55, 59, 1,
+    214, 54, 59, 1, 214, 53, 59, 1, 214, 52, 59, 1, 213, 21, 59, 1, 213, 20,
+    59, 1, 213, 19, 59, 1, 214, 213, 59, 1, 214, 212, 59, 1, 214, 211, 59, 1,
+    214, 210, 59, 1, 214, 209, 59, 1, 214, 208, 59, 1, 214, 207, 59, 1, 213,
+    141, 59, 1, 213, 140, 59, 1, 213, 139, 59, 1, 213, 138, 59, 1, 213, 137,
+    59, 1, 230, 112, 59, 1, 230, 109, 59, 1, 230, 108, 59, 1, 230, 107, 59,
+    1, 230, 106, 59, 1, 230, 105, 59, 1, 230, 104, 59, 1, 230, 103, 59, 1,
+    230, 102, 59, 1, 230, 111, 59, 1, 230, 110, 59, 1, 229, 177, 59, 1, 229,
+    176, 59, 1, 229, 175, 59, 1, 229, 174, 59, 1, 229, 173, 59, 1, 229, 172,
+    59, 1, 229, 171, 59, 1, 228, 180, 59, 1, 228, 179, 59, 1, 228, 178, 59,
+    1, 229, 254, 59, 1, 229, 253, 59, 1, 229, 252, 59, 1, 229, 251, 59, 1,
+    229, 250, 59, 1, 229, 249, 59, 1, 229, 248, 59, 1, 229, 42, 59, 1, 229,
+    41, 59, 1, 229, 40, 59, 1, 229, 39, 59, 1, 229, 38, 59, 1, 229, 37, 59,
+    1, 229, 36, 59, 1, 229, 35, 59, 1, 217, 227, 59, 1, 217, 226, 59, 1, 217,
+    225, 59, 1, 217, 224, 59, 1, 217, 223, 59, 1, 217, 222, 59, 1, 217, 221,
+    59, 1, 216, 174, 59, 1, 216, 173, 59, 1, 216, 172, 59, 1, 216, 171, 59,
+    1, 216, 170, 59, 1, 216, 169, 59, 1, 216, 168, 59, 1, 215, 240, 59, 1,
+    215, 239, 59, 1, 215, 238, 59, 1, 215, 237, 59, 1, 217, 47, 59, 1, 217,
+    46, 59, 1, 217, 45, 59, 1, 216, 90, 59, 1, 216, 89, 59, 1, 216, 88, 59,
+    1, 216, 87, 59, 1, 216, 86, 59, 1, 216, 85, 59, 1, 193, 137, 59, 1, 193,
+    136, 59, 1, 193, 135, 59, 1, 193, 134, 59, 1, 193, 133, 59, 1, 193, 130,
+    59, 1, 192, 213, 59, 1, 192, 212, 59, 1, 192, 211, 59, 1, 192, 210, 59,
+    1, 193, 0, 59, 1, 192, 255, 59, 1, 192, 254, 59, 1, 192, 253, 59, 1, 192,
+    252, 59, 1, 192, 251, 59, 1, 208, 75, 59, 1, 208, 74, 59, 1, 208, 73, 59,
+    1, 208, 72, 59, 1, 207, 150, 59, 1, 207, 149, 59, 1, 207, 148, 59, 1,
+    207, 147, 59, 1, 207, 146, 59, 1, 207, 145, 59, 1, 207, 144, 59, 1, 206,
+    217, 59, 1, 206, 216, 59, 1, 206, 215, 59, 1, 206, 214, 59, 1, 206, 213,
+    59, 1, 206, 212, 59, 1, 208, 6, 59, 1, 208, 5, 59, 1, 208, 4, 59, 1, 208,
+    3, 59, 1, 207, 54, 59, 1, 207, 53, 59, 1, 207, 52, 59, 1, 207, 51, 59, 1,
+    207, 50, 59, 1, 207, 49, 59, 1, 194, 168, 59, 1, 194, 167, 59, 1, 194,
+    166, 59, 1, 194, 165, 59, 1, 194, 164, 59, 1, 194, 71, 59, 1, 194, 70,
+    59, 1, 194, 69, 59, 1, 194, 68, 59, 1, 194, 67, 59, 1, 194, 110, 59, 1,
+    194, 109, 59, 1, 194, 108, 59, 1, 194, 107, 59, 1, 194, 35, 59, 1, 194,
+    34, 59, 1, 194, 33, 59, 1, 194, 32, 59, 1, 194, 31, 59, 1, 194, 30, 59,
+    1, 194, 29, 59, 1, 215, 148, 59, 1, 215, 147, 229, 140, 1, 2, 194, 72,
+    229, 140, 1, 2, 194, 111, 229, 140, 1, 2, 194, 36, 75, 1, 2, 194, 72, 75,
+    1, 2, 194, 111, 75, 1, 2, 194, 36, 75, 1, 2, 215, 151, 45, 244, 140, 45,
+    244, 139, 45, 244, 138, 45, 244, 137, 45, 244, 136, 45, 244, 135, 45,
+    244, 134, 45, 244, 133, 45, 244, 132, 45, 244, 131, 45, 244, 130, 45,
+    244, 129, 45, 244, 128, 45, 244, 127, 45, 244, 126, 45, 244, 125, 45,
+    244, 124, 45, 244, 123, 45, 244, 122, 45, 244, 121, 45, 244, 120, 45,
+    244, 119, 45, 244, 118, 45, 244, 117, 45, 244, 116, 45, 244, 115, 45,
+    244, 114, 45, 244, 113, 45, 244, 112, 45, 244, 111, 45, 244, 110, 45,
+    244, 109, 45, 244, 108, 45, 244, 107, 45, 244, 106, 45, 244, 105, 45,
+    244, 104, 45, 244, 103, 45, 244, 102, 45, 244, 101, 45, 244, 100, 45,
+    244, 99, 45, 244, 98, 45, 244, 97, 45, 244, 96, 45, 244, 95, 45, 244, 94,
+    45, 244, 93, 45, 244, 92, 45, 244, 91, 45, 244, 90, 45, 244, 89, 45, 244,
+    88, 45, 244, 87, 45, 244, 86, 45, 244, 85, 45, 244, 84, 45, 244, 83, 45,
+    244, 82, 45, 244, 81, 45, 244, 80, 45, 244, 79, 45, 244, 78, 45, 244, 77,
+    45, 244, 76, 45, 244, 75, 45, 244, 74, 45, 244, 73, 45, 244, 72, 45, 244,
+    71, 45, 244, 70, 45, 244, 69, 45, 244, 68, 45, 244, 67, 45, 244, 66, 45,
+    244, 65, 45, 244, 64, 45, 244, 63, 45, 244, 62, 45, 244, 61, 45, 244, 60,
+    45, 244, 59, 45, 244, 58, 45, 244, 57, 45, 244, 56, 45, 244, 55, 45, 244,
+    54, 45, 244, 53, 45, 244, 52, 45, 244, 51, 45, 244, 50, 45, 244, 49, 45,
+    244, 48, 45, 244, 47, 45, 244, 46, 45, 244, 45, 45, 244, 44, 45, 244, 43,
+    45, 244, 42, 45, 244, 41, 45, 244, 40, 45, 244, 39, 45, 244, 38, 45, 244,
+    37, 45, 244, 36, 45, 244, 35, 45, 244, 34, 45, 244, 33, 45, 244, 32, 45,
+    244, 31, 45, 244, 30, 45, 244, 29, 45, 244, 28, 45, 244, 27, 45, 244, 26,
+    45, 244, 25, 45, 244, 24, 45, 244, 23, 45, 244, 22, 45, 244, 21, 45, 244,
+    20, 45, 244, 19, 45, 244, 18, 45, 244, 17, 45, 244, 16, 45, 244, 15, 45,
+    244, 14, 45, 244, 13, 45, 244, 12, 45, 244, 11, 45, 244, 10, 45, 244, 9,
+    45, 244, 8, 45, 244, 7, 45, 244, 6, 45, 244, 5, 45, 244, 4, 45, 244, 3,
+    45, 244, 2, 45, 244, 1, 45, 244, 0, 45, 243, 255, 45, 243, 254, 45, 243,
+    253, 45, 243, 252, 45, 243, 251, 45, 243, 250, 45, 243, 249, 45, 243,
+    248, 45, 243, 247, 45, 243, 246, 45, 243, 245, 45, 243, 244, 45, 243,
+    243, 45, 243, 242, 45, 243, 241, 45, 243, 240, 45, 243, 239, 45, 243,
+    238, 45, 243, 237, 45, 243, 236, 45, 243, 235, 45, 243, 234, 45, 243,
+    233, 45, 243, 232, 45, 243, 231, 45, 243, 230, 45, 243, 229, 45, 243,
+    228, 45, 243, 227, 45, 243, 226, 45, 243, 225, 45, 243, 224, 45, 243,
+    223, 45, 243, 222, 45, 243, 221, 45, 243, 220, 45, 243, 219, 45, 243,
+    218, 45, 243, 217, 45, 243, 216, 45, 243, 215, 45, 243, 214, 45, 243,
+    213, 45, 243, 212, 45, 243, 211, 45, 243, 210, 45, 243, 209, 45, 243,
+    208, 45, 243, 207, 45, 243, 206, 45, 243, 205, 45, 243, 204, 45, 243,
+    203, 45, 243, 202, 45, 243, 201, 45, 243, 200, 45, 243, 199, 45, 243,
+    198, 45, 243, 197, 45, 243, 196, 45, 243, 195, 45, 243, 194, 45, 243,
+    193, 45, 243, 192, 45, 243, 191, 45, 243, 190, 45, 243, 189, 45, 243,
+    188, 45, 243, 187, 45, 243, 186, 45, 243, 185, 45, 243, 184, 45, 243,
+    183, 45, 243, 182, 45, 243, 181, 45, 243, 180, 45, 243, 179, 45, 243,
+    178, 45, 243, 177, 45, 243, 176, 45, 243, 175, 45, 243, 174, 45, 243,
+    173, 45, 243, 172, 45, 243, 171, 45, 243, 170, 45, 243, 169, 45, 243,
+    168, 45, 243, 167, 45, 243, 166, 45, 243, 165, 45, 243, 164, 45, 243,
+    163, 45, 243, 162, 45, 243, 161, 45, 243, 160, 45, 243, 159, 45, 243,
+    158, 45, 243, 157, 45, 243, 156, 45, 243, 155, 45, 243, 154, 45, 243,
+    153, 45, 243, 152, 45, 243, 151, 45, 243, 150, 45, 243, 149, 45, 243,
+    148, 45, 243, 147, 45, 243, 146, 45, 243, 145, 45, 243, 144, 45, 243,
+    143, 45, 243, 142, 45, 243, 141, 45, 243, 140, 45, 243, 139, 45, 243,
+    138, 45, 243, 137, 45, 243, 136, 45, 243, 135, 45, 243, 134, 45, 243,
+    133, 45, 243, 132, 45, 243, 131, 45, 243, 130, 45, 243, 129, 45, 243,
+    128, 45, 243, 127, 45, 243, 126, 45, 243, 125, 45, 243, 124, 45, 243,
+    123, 45, 243, 122, 45, 243, 121, 45, 243, 120, 45, 243, 119, 45, 243,
+    118, 45, 243, 117, 45, 243, 116, 45, 243, 115, 45, 243, 114, 45, 243,
+    113, 45, 243, 112, 45, 243, 111, 45, 243, 110, 45, 243, 109, 45, 243,
+    108, 45, 243, 107, 45, 243, 106, 45, 243, 105, 45, 243, 104, 45, 243,
+    103, 45, 243, 102, 45, 243, 101, 45, 243, 100, 45, 243, 99, 45, 243, 98,
+    45, 243, 97, 45, 243, 96, 45, 243, 95, 45, 243, 94, 45, 243, 93, 45, 243,
+    92, 45, 243, 91, 45, 243, 90, 45, 243, 89, 45, 243, 88, 45, 243, 87, 45,
+    243, 86, 45, 243, 85, 45, 243, 84, 45, 243, 83, 45, 243, 82, 45, 243, 81,
+    45, 243, 80, 45, 243, 79, 45, 243, 78, 45, 243, 77, 45, 243, 76, 45, 243,
+    75, 45, 243, 74, 45, 243, 73, 45, 243, 72, 45, 243, 71, 45, 243, 70, 45,
+    243, 69, 45, 243, 68, 45, 243, 67, 45, 243, 66, 45, 243, 65, 45, 243, 64,
+    45, 243, 63, 45, 243, 62, 45, 243, 61, 45, 243, 60, 45, 243, 59, 45, 243,
+    58, 45, 243, 57, 45, 243, 56, 45, 243, 55, 45, 243, 54, 45, 243, 53, 45,
+    243, 52, 45, 243, 51, 45, 243, 50, 45, 243, 49, 45, 243, 48, 45, 243, 47,
+    45, 243, 46, 45, 243, 45, 45, 243, 44, 45, 243, 43, 45, 243, 42, 45, 243,
+    41, 45, 243, 40, 45, 243, 39, 45, 243, 38, 45, 243, 37, 45, 243, 36, 45,
+    243, 35, 45, 243, 34, 45, 243, 33, 45, 243, 32, 45, 243, 31, 45, 243, 30,
+    45, 243, 29, 45, 243, 28, 45, 243, 27, 45, 243, 26, 45, 243, 25, 45, 243,
+    24, 45, 243, 23, 45, 243, 22, 45, 243, 21, 45, 243, 20, 45, 243, 19, 45,
+    243, 18, 45, 243, 17, 45, 243, 16, 45, 243, 15, 45, 243, 14, 45, 243, 13,
+    45, 243, 12, 45, 243, 11, 45, 243, 10, 45, 243, 9, 45, 243, 8, 45, 243,
+    7, 45, 243, 6, 45, 243, 5, 45, 243, 4, 45, 243, 3, 45, 243, 2, 45, 243,
+    1, 121, 1, 230, 124, 121, 1, 193, 223, 121, 1, 211, 93, 121, 1, 200, 228,
+    121, 1, 233, 163, 121, 1, 222, 184, 121, 1, 165, 121, 1, 249, 226, 121,
+    1, 238, 95, 121, 1, 196, 236, 121, 1, 232, 44, 121, 1, 150, 121, 1, 211,
+    94, 215, 151, 121, 1, 238, 96, 206, 158, 121, 1, 233, 164, 215, 151, 121,
+    1, 222, 185, 218, 236, 121, 1, 208, 112, 206, 158, 121, 1, 199, 242, 121,
+    1, 202, 246, 237, 41, 121, 1, 237, 41, 121, 1, 221, 140, 121, 1, 202,
+    246, 223, 65, 121, 1, 229, 132, 121, 1, 219, 223, 121, 1, 207, 157, 121,
+    1, 218, 236, 121, 1, 215, 151, 121, 1, 223, 65, 121, 1, 206, 158, 121, 1,
+    218, 237, 215, 151, 121, 1, 215, 152, 218, 236, 121, 1, 223, 66, 218,
+    236, 121, 1, 206, 159, 223, 65, 121, 1, 218, 237, 4, 236, 114, 121, 1,
+    215, 152, 4, 236, 114, 121, 1, 223, 66, 4, 236, 114, 121, 1, 223, 66, 4,
+    236, 112, 223, 146, 26, 58, 121, 1, 206, 159, 4, 236, 114, 121, 1, 206,
+    159, 4, 78, 63, 121, 1, 218, 237, 206, 158, 121, 1, 215, 152, 206, 158,
+    121, 1, 223, 66, 206, 158, 121, 1, 206, 159, 206, 158, 121, 1, 218, 237,
+    215, 152, 206, 158, 121, 1, 215, 152, 218, 237, 206, 158, 121, 1, 223,
+    66, 218, 237, 206, 158, 121, 1, 206, 159, 223, 66, 206, 158, 121, 1, 223,
+    66, 206, 159, 4, 236, 114, 121, 1, 223, 66, 215, 151, 121, 1, 223, 66,
+    215, 152, 206, 158, 121, 1, 206, 159, 200, 228, 121, 1, 206, 159, 200,
+    229, 150, 121, 1, 206, 159, 211, 93, 121, 1, 206, 159, 211, 94, 150, 121,
+    1, 200, 229, 206, 158, 121, 1, 200, 229, 208, 112, 206, 158, 121, 1, 194,
+    202, 121, 1, 194, 83, 121, 1, 194, 203, 150, 121, 1, 206, 159, 215, 151,
+    121, 1, 206, 159, 218, 236, 121, 1, 222, 185, 208, 112, 206, 158, 121, 1,
+    232, 45, 208, 112, 206, 158, 121, 1, 206, 159, 222, 184, 121, 1, 206,
+    159, 222, 185, 150, 121, 1, 64, 121, 1, 202, 246, 211, 106, 121, 1, 212,
+    26, 121, 1, 74, 121, 1, 250, 164, 121, 1, 70, 121, 1, 71, 121, 1, 223,
+    251, 121, 1, 203, 195, 70, 121, 1, 197, 95, 121, 1, 234, 171, 121, 1,
+    202, 246, 234, 157, 121, 1, 207, 29, 70, 121, 1, 202, 246, 234, 171, 121,
+    1, 184, 70, 121, 1, 193, 69, 121, 1, 68, 121, 1, 233, 230, 121, 1, 193,
+    171, 121, 1, 124, 215, 151, 121, 1, 184, 68, 121, 1, 207, 29, 68, 121, 1,
+    197, 97, 121, 1, 202, 246, 68, 121, 1, 211, 191, 121, 1, 211, 106, 121,
+    1, 211, 130, 121, 1, 194, 169, 121, 1, 194, 36, 121, 1, 194, 72, 121, 1,
+    194, 98, 121, 1, 194, 2, 121, 1, 215, 49, 68, 121, 1, 215, 49, 74, 121,
+    1, 215, 49, 70, 121, 1, 215, 49, 64, 121, 1, 210, 122, 250, 224, 121, 1,
+    210, 122, 250, 241, 121, 1, 202, 246, 234, 88, 121, 1, 202, 246, 250,
+    224, 121, 1, 202, 246, 211, 211, 121, 1, 118, 218, 236, 121, 251, 87, 46,
+    229, 5, 205, 213, 121, 251, 87, 216, 162, 229, 5, 205, 213, 121, 251, 87,
+    51, 229, 5, 205, 213, 121, 251, 87, 132, 84, 205, 213, 121, 251, 87, 216,
+    162, 84, 205, 213, 121, 251, 87, 139, 84, 205, 213, 121, 251, 87, 250,
+    14, 205, 213, 121, 251, 87, 250, 14, 220, 19, 205, 213, 121, 251, 87,
+    250, 14, 200, 120, 121, 251, 87, 250, 14, 200, 147, 121, 251, 87, 250,
+    14, 234, 253, 128, 121, 251, 87, 250, 14, 228, 97, 128, 121, 251, 87,
+    250, 14, 200, 121, 128, 121, 251, 87, 139, 251, 129, 121, 251, 87, 139,
+    199, 107, 251, 129, 121, 251, 87, 139, 230, 210, 121, 251, 87, 139, 184,
+    230, 210, 121, 251, 87, 139, 236, 114, 121, 251, 87, 139, 242, 130, 121,
+    251, 87, 139, 219, 175, 121, 251, 87, 139, 194, 124, 121, 251, 87, 139,
+    196, 105, 121, 251, 87, 132, 251, 129, 121, 251, 87, 132, 199, 107, 251,
+    129, 121, 251, 87, 132, 230, 210, 121, 251, 87, 132, 184, 230, 210, 121,
+    251, 87, 132, 236, 114, 121, 251, 87, 132, 242, 130, 121, 251, 87, 132,
+    219, 175, 121, 251, 87, 132, 194, 124, 121, 251, 87, 132, 196, 105, 121,
+    251, 87, 132, 54, 121, 3, 185, 4, 238, 183, 121, 199, 200, 1, 205, 189,
+    121, 55, 77, 121, 209, 38, 242, 198, 232, 71, 201, 238, 203, 182, 232,
+    135, 1, 211, 113, 203, 182, 232, 135, 238, 249, 211, 113, 203, 182, 232,
+    135, 142, 201, 253, 203, 182, 232, 135, 130, 201, 253, 69, 35, 16, 209,
+    55, 69, 35, 16, 237, 187, 69, 35, 16, 210, 126, 69, 35, 16, 211, 102,
+    234, 128, 69, 35, 16, 211, 102, 236, 210, 69, 35, 16, 196, 141, 234, 128,
+    69, 35, 16, 196, 141, 236, 210, 69, 35, 16, 222, 78, 69, 35, 16, 200,
+    245, 69, 35, 16, 210, 237, 69, 35, 16, 192, 220, 69, 35, 16, 192, 221,
+    236, 210, 69, 35, 16, 221, 51, 69, 35, 16, 250, 159, 234, 128, 69, 35,
+    16, 233, 198, 234, 128, 69, 35, 16, 200, 43, 69, 35, 16, 222, 26, 69, 35,
+    16, 250, 148, 69, 35, 16, 250, 149, 236, 210, 69, 35, 16, 200, 252, 69,
+    35, 16, 199, 179, 69, 35, 16, 211, 222, 250, 110, 69, 35, 16, 230, 237,
+    250, 110, 69, 35, 16, 209, 54, 69, 35, 16, 246, 108, 69, 35, 16, 196,
+    130, 69, 35, 16, 223, 87, 250, 110, 69, 35, 16, 222, 28, 250, 110, 69,
+    35, 16, 222, 27, 250, 110, 69, 35, 16, 206, 3, 69, 35, 16, 210, 227, 69,
+    35, 16, 202, 7, 250, 152, 69, 35, 16, 211, 101, 250, 110, 69, 35, 16,
+    196, 140, 250, 110, 69, 35, 16, 250, 153, 250, 110, 69, 35, 16, 250, 146,
+    69, 35, 16, 221, 130, 69, 35, 16, 207, 164, 69, 35, 16, 210, 49, 250,
+    110, 69, 35, 16, 199, 80, 69, 35, 16, 250, 220, 69, 35, 16, 205, 192, 69,
+    35, 16, 201, 0, 250, 110, 69, 35, 16, 201, 0, 216, 241, 202, 5, 69, 35,
+    16, 211, 96, 250, 110, 69, 35, 16, 199, 218, 69, 35, 16, 220, 6, 69, 35,
+    16, 235, 20, 69, 35, 16, 198, 187, 69, 35, 16, 200, 11, 69, 35, 16, 221,
+    54, 69, 35, 16, 250, 159, 233, 198, 214, 192, 69, 35, 16, 232, 79, 250,
+    110, 69, 35, 16, 223, 203, 69, 35, 16, 198, 156, 250, 110, 69, 35, 16,
+    222, 81, 198, 155, 69, 35, 16, 210, 156, 69, 35, 16, 209, 59, 69, 35, 16,
+    221, 89, 69, 35, 16, 242, 180, 250, 110, 69, 35, 16, 208, 27, 69, 35, 16,
+    210, 240, 250, 110, 69, 35, 16, 210, 238, 250, 110, 69, 35, 16, 228, 47,
+    69, 35, 16, 215, 60, 69, 35, 16, 210, 104, 69, 35, 16, 221, 90, 251, 3,
+    69, 35, 16, 198, 156, 251, 3, 69, 35, 16, 201, 232, 69, 35, 16, 230, 196,
+    69, 35, 16, 223, 87, 214, 192, 69, 35, 16, 211, 222, 214, 192, 69, 35,
+    16, 211, 102, 214, 192, 69, 35, 16, 210, 103, 69, 35, 16, 221, 74, 69,
+    35, 16, 210, 102, 69, 35, 16, 221, 53, 69, 35, 16, 210, 157, 214, 192,
+    69, 35, 16, 222, 27, 214, 193, 250, 190, 69, 35, 16, 222, 28, 214, 193,
+    250, 190, 69, 35, 16, 192, 218, 69, 35, 16, 250, 149, 214, 192, 69, 35,
+    16, 250, 150, 200, 253, 214, 192, 69, 35, 16, 192, 219, 69, 35, 16, 221,
+    52, 69, 35, 16, 234, 123, 69, 35, 16, 246, 109, 69, 35, 16, 216, 133,
+    223, 86, 69, 35, 16, 196, 141, 214, 192, 69, 35, 16, 210, 49, 214, 192,
+    69, 35, 16, 209, 60, 214, 192, 69, 35, 16, 211, 218, 69, 35, 16, 250,
+    177, 69, 35, 16, 218, 247, 69, 35, 16, 210, 238, 214, 192, 69, 35, 16,
+    210, 240, 214, 192, 69, 35, 16, 233, 236, 210, 239, 69, 35, 16, 220, 206,
+    69, 35, 16, 250, 178, 69, 35, 16, 198, 156, 214, 192, 69, 35, 16, 234,
+    126, 69, 35, 16, 201, 0, 214, 192, 69, 35, 16, 200, 246, 69, 35, 16, 242,
+    180, 214, 192, 69, 35, 16, 234, 38, 69, 35, 16, 205, 193, 214, 192, 69,
+    35, 16, 193, 188, 221, 130, 69, 35, 16, 198, 153, 69, 35, 16, 209, 61,
+    69, 35, 16, 198, 157, 69, 35, 16, 198, 154, 69, 35, 16, 209, 58, 69, 35,
+    16, 198, 152, 69, 35, 16, 209, 57, 69, 35, 16, 230, 236, 69, 35, 16, 250,
+    102, 69, 35, 16, 233, 236, 250, 102, 69, 35, 16, 211, 96, 214, 192, 69,
+    35, 16, 199, 217, 233, 249, 69, 35, 16, 199, 217, 233, 197, 69, 35, 16,
+    199, 219, 250, 154, 69, 35, 16, 199, 211, 222, 136, 250, 145, 69, 35, 16,
+    222, 80, 69, 35, 16, 234, 75, 69, 35, 16, 193, 27, 222, 77, 69, 35, 16,
+    193, 27, 250, 190, 69, 35, 16, 202, 6, 69, 35, 16, 221, 131, 250, 190,
+    69, 35, 16, 236, 211, 250, 110, 69, 35, 16, 221, 55, 250, 110, 69, 35,
+    16, 221, 55, 251, 3, 69, 35, 16, 221, 55, 214, 192, 69, 35, 16, 250, 153,
+    214, 192, 69, 35, 16, 250, 155, 69, 35, 16, 236, 210, 69, 35, 16, 198,
+    168, 69, 35, 16, 200, 1, 69, 35, 16, 221, 78, 69, 35, 16, 220, 11, 234,
+    68, 242, 170, 69, 35, 16, 220, 11, 235, 21, 242, 171, 69, 35, 16, 220,
+    11, 198, 171, 242, 171, 69, 35, 16, 220, 11, 200, 13, 242, 171, 69, 35,
+    16, 220, 11, 223, 198, 242, 170, 69, 35, 16, 230, 237, 214, 193, 250,
+    190, 69, 35, 16, 230, 237, 210, 228, 250, 98, 69, 35, 16, 230, 237, 210,
+    228, 237, 45, 69, 35, 16, 236, 235, 69, 35, 16, 236, 236, 210, 228, 250,
+    99, 222, 77, 69, 35, 16, 236, 236, 210, 228, 250, 99, 250, 190, 69, 35,
+    16, 236, 236, 210, 228, 237, 45, 69, 35, 16, 198, 176, 69, 35, 16, 250,
+    103, 69, 35, 16, 223, 205, 69, 35, 16, 237, 2, 69, 35, 16, 251, 74, 209,
+    181, 250, 104, 69, 35, 16, 251, 74, 250, 101, 69, 35, 16, 251, 74, 250,
+    104, 69, 35, 16, 251, 74, 216, 235, 69, 35, 16, 251, 74, 216, 246, 69,
+    35, 16, 251, 74, 230, 238, 69, 35, 16, 251, 74, 230, 235, 69, 35, 16,
+    251, 74, 209, 181, 230, 238, 69, 35, 16, 217, 116, 209, 67, 228, 45, 69,
+    35, 16, 217, 116, 251, 5, 209, 67, 228, 45, 69, 35, 16, 217, 116, 237,
+    44, 228, 45, 69, 35, 16, 217, 116, 251, 5, 237, 44, 228, 45, 69, 35, 16,
+    217, 116, 198, 163, 228, 45, 69, 35, 16, 217, 116, 198, 177, 69, 35, 16,
+    217, 116, 200, 6, 228, 45, 69, 35, 16, 217, 116, 200, 6, 220, 15, 228,
+    45, 69, 35, 16, 217, 116, 220, 15, 228, 45, 69, 35, 16, 217, 116, 209,
+    229, 228, 45, 69, 35, 16, 223, 94, 200, 36, 228, 46, 69, 35, 16, 250,
+    150, 200, 36, 228, 46, 69, 35, 16, 233, 67, 200, 3, 69, 35, 16, 233, 67,
+    216, 46, 69, 35, 16, 233, 67, 236, 241, 69, 35, 16, 217, 116, 196, 134,
+    228, 45, 69, 35, 16, 217, 116, 209, 66, 228, 45, 69, 35, 16, 217, 116,
+    209, 229, 200, 6, 228, 45, 69, 35, 16, 230, 232, 215, 152, 250, 154, 69,
+    35, 16, 230, 232, 215, 152, 236, 209, 69, 35, 16, 234, 86, 222, 136, 232,
+    79, 195, 231, 69, 35, 16, 223, 204, 69, 35, 16, 223, 202, 69, 35, 16,
+    232, 79, 250, 111, 237, 43, 228, 44, 69, 35, 16, 232, 79, 237, 0, 166,
+    69, 35, 16, 232, 79, 237, 0, 215, 60, 69, 35, 16, 232, 79, 215, 54, 228,
+    45, 69, 35, 16, 232, 79, 237, 0, 237, 16, 69, 35, 16, 232, 79, 203, 12,
+    236, 255, 237, 16, 69, 35, 16, 232, 79, 237, 0, 222, 57, 69, 35, 16, 232,
+    79, 237, 0, 192, 8, 69, 35, 16, 232, 79, 237, 0, 214, 61, 222, 77, 69,
+    35, 16, 232, 79, 237, 0, 214, 61, 250, 190, 69, 35, 16, 232, 79, 217,
+    167, 242, 172, 236, 241, 69, 35, 16, 232, 79, 217, 167, 242, 172, 216,
+    46, 69, 35, 16, 233, 12, 203, 12, 242, 172, 196, 133, 69, 35, 16, 232,
+    79, 203, 12, 242, 172, 201, 1, 69, 35, 16, 232, 79, 214, 195, 69, 35, 16,
+    242, 173, 191, 231, 69, 35, 16, 242, 173, 221, 129, 69, 35, 16, 242, 173,
+    202, 151, 69, 35, 16, 232, 79, 228, 97, 193, 26, 200, 7, 69, 35, 16, 232,
+    79, 234, 87, 250, 179, 69, 35, 16, 193, 26, 198, 164, 69, 35, 16, 236,
+    249, 198, 164, 69, 35, 16, 236, 249, 200, 7, 69, 35, 16, 236, 249, 250,
+    156, 235, 21, 236, 138, 69, 35, 16, 236, 249, 216, 44, 200, 12, 236, 138,
+    69, 35, 16, 236, 249, 236, 232, 233, 210, 236, 138, 69, 35, 16, 236, 249,
+    198, 174, 211, 228, 236, 138, 69, 35, 16, 193, 26, 250, 156, 235, 21,
+    236, 138, 69, 35, 16, 193, 26, 216, 44, 200, 12, 236, 138, 69, 35, 16,
+    193, 26, 236, 232, 233, 210, 236, 138, 69, 35, 16, 193, 26, 198, 174,
+    211, 228, 236, 138, 69, 35, 16, 231, 140, 236, 248, 69, 35, 16, 231, 140,
+    193, 25, 69, 35, 16, 237, 1, 250, 156, 216, 134, 69, 35, 16, 237, 1, 250,
+    156, 217, 20, 69, 35, 16, 237, 1, 236, 210, 69, 35, 16, 237, 1, 199, 209,
+    69, 35, 16, 203, 85, 199, 209, 69, 35, 16, 203, 85, 199, 210, 236, 193,
+    69, 35, 16, 203, 85, 199, 210, 198, 165, 69, 35, 16, 203, 85, 199, 210,
+    199, 255, 69, 35, 16, 203, 85, 250, 70, 69, 35, 16, 203, 85, 250, 71,
+    236, 193, 69, 35, 16, 203, 85, 250, 71, 198, 165, 69, 35, 16, 203, 85,
+    250, 71, 199, 255, 69, 35, 16, 236, 233, 231, 121, 69, 35, 16, 236, 240,
+    211, 130, 69, 35, 16, 201, 248, 69, 35, 16, 250, 95, 166, 69, 35, 16,
+    250, 95, 195, 231, 69, 35, 16, 250, 95, 231, 233, 69, 35, 16, 250, 95,
+    237, 16, 69, 35, 16, 250, 95, 222, 57, 69, 35, 16, 250, 95, 192, 8, 69,
+    35, 16, 250, 95, 214, 60, 69, 35, 16, 222, 27, 214, 193, 216, 245, 69,
+    35, 16, 222, 28, 214, 193, 216, 245, 69, 35, 16, 222, 27, 214, 193, 222,
+    77, 69, 35, 16, 222, 28, 214, 193, 222, 77, 69, 35, 16, 221, 131, 222,
+    77, 69, 35, 16, 230, 237, 214, 193, 222, 77, 35, 16, 203, 74, 248, 189,
+    35, 16, 55, 248, 189, 35, 16, 52, 248, 189, 35, 16, 207, 169, 52, 248,
+    189, 35, 16, 237, 184, 248, 189, 35, 16, 203, 195, 248, 189, 35, 16, 46,
+    207, 199, 57, 35, 16, 51, 207, 199, 57, 35, 16, 207, 199, 236, 111, 35,
+    16, 237, 228, 205, 196, 35, 16, 238, 1, 246, 223, 35, 16, 205, 196, 35,
+    16, 242, 56, 35, 16, 207, 197, 232, 255, 35, 16, 207, 197, 232, 254, 35,
+    16, 207, 197, 232, 253, 35, 16, 233, 22, 35, 16, 233, 23, 63, 35, 16,
+    247, 152, 77, 35, 16, 247, 9, 35, 16, 247, 166, 35, 16, 186, 35, 16, 211,
+    206, 202, 28, 35, 16, 197, 219, 202, 28, 35, 16, 199, 155, 202, 28, 35,
+    16, 232, 118, 202, 28, 35, 16, 232, 213, 202, 28, 35, 16, 203, 40, 202,
+    28, 35, 16, 203, 38, 232, 96, 35, 16, 232, 116, 232, 96, 35, 16, 232, 45,
+    242, 99, 35, 16, 232, 45, 242, 100, 211, 134, 250, 250, 35, 16, 232, 45,
+    242, 100, 211, 134, 248, 172, 35, 16, 247, 53, 242, 99, 35, 16, 233, 164,
+    242, 99, 35, 16, 233, 164, 242, 100, 211, 134, 250, 250, 35, 16, 233,
+    164, 242, 100, 211, 134, 248, 172, 35, 16, 235, 68, 242, 98, 35, 16, 235,
+    68, 242, 97, 35, 16, 215, 216, 217, 44, 207, 180, 35, 16, 55, 204, 25,
+    35, 16, 55, 232, 195, 35, 16, 232, 196, 197, 41, 35, 16, 232, 196, 235,
+    96, 35, 16, 215, 43, 197, 41, 35, 16, 215, 43, 235, 96, 35, 16, 204, 26,
+    197, 41, 35, 16, 204, 26, 235, 96, 35, 16, 208, 168, 158, 204, 25, 35,
+    16, 208, 168, 158, 232, 195, 35, 16, 242, 35, 199, 84, 35, 16, 238, 122,
+    199, 84, 35, 16, 211, 134, 250, 250, 35, 16, 211, 134, 248, 172, 35, 16,
+    208, 149, 250, 250, 35, 16, 208, 149, 248, 172, 35, 16, 215, 219, 207,
+    180, 35, 16, 194, 73, 207, 180, 35, 16, 138, 207, 180, 35, 16, 208, 168,
+    207, 180, 35, 16, 234, 144, 207, 180, 35, 16, 203, 34, 207, 180, 35, 16,
+    199, 181, 207, 180, 35, 16, 203, 24, 207, 180, 35, 16, 90, 228, 163, 197,
+    237, 207, 180, 35, 16, 193, 224, 213, 101, 35, 16, 102, 213, 101, 35, 16,
+    242, 131, 193, 224, 213, 101, 35, 16, 50, 213, 102, 194, 75, 35, 16, 50,
+    213, 102, 247, 248, 35, 16, 198, 186, 213, 102, 130, 194, 75, 35, 16,
+    198, 186, 213, 102, 130, 247, 248, 35, 16, 198, 186, 213, 102, 46, 194,
+    75, 35, 16, 198, 186, 213, 102, 46, 247, 248, 35, 16, 198, 186, 213, 102,
+    51, 194, 75, 35, 16, 198, 186, 213, 102, 51, 247, 248, 35, 16, 198, 186,
+    213, 102, 142, 194, 75, 35, 16, 198, 186, 213, 102, 142, 247, 248, 35,
+    16, 198, 186, 213, 102, 130, 51, 194, 75, 35, 16, 198, 186, 213, 102,
+    130, 51, 247, 248, 35, 16, 216, 30, 213, 102, 194, 75, 35, 16, 216, 30,
+    213, 102, 247, 248, 35, 16, 198, 183, 213, 102, 142, 194, 75, 35, 16,
+    198, 183, 213, 102, 142, 247, 248, 35, 16, 210, 231, 213, 101, 35, 16,
+    195, 245, 213, 101, 35, 16, 213, 102, 247, 248, 35, 16, 212, 239, 213,
+    101, 35, 16, 242, 68, 213, 102, 194, 75, 35, 16, 242, 68, 213, 102, 247,
+    248, 35, 16, 247, 150, 35, 16, 194, 73, 213, 105, 35, 16, 138, 213, 105,
+    35, 16, 208, 168, 213, 105, 35, 16, 234, 144, 213, 105, 35, 16, 203, 34,
+    213, 105, 35, 16, 199, 181, 213, 105, 35, 16, 203, 24, 213, 105, 35, 16,
+    90, 228, 163, 197, 237, 213, 105, 35, 16, 38, 201, 255, 35, 16, 38, 202,
+    113, 201, 255, 35, 16, 38, 198, 194, 35, 16, 38, 198, 193, 35, 16, 38,
+    198, 192, 35, 16, 232, 238, 198, 194, 35, 16, 232, 238, 198, 193, 35, 16,
+    232, 238, 198, 192, 35, 16, 38, 250, 5, 236, 114, 35, 16, 38, 232, 205,
+    35, 16, 38, 232, 204, 35, 16, 38, 232, 203, 35, 16, 38, 232, 202, 35, 16,
+    38, 232, 201, 35, 16, 248, 100, 248, 120, 35, 16, 234, 80, 248, 120, 35,
+    16, 248, 100, 199, 113, 35, 16, 234, 80, 199, 113, 35, 16, 248, 100, 202,
+    237, 35, 16, 234, 80, 202, 237, 35, 16, 248, 100, 210, 58, 35, 16, 234,
+    80, 210, 58, 35, 16, 38, 251, 143, 35, 16, 38, 202, 32, 35, 16, 38, 200,
+    18, 35, 16, 38, 202, 33, 35, 16, 38, 217, 131, 35, 16, 38, 217, 130, 35,
+    16, 38, 251, 142, 35, 16, 38, 219, 54, 35, 16, 250, 83, 197, 41, 35, 16,
+    250, 83, 235, 96, 35, 16, 38, 236, 130, 35, 16, 38, 207, 77, 35, 16, 38,
+    232, 184, 35, 16, 38, 202, 233, 35, 16, 38, 248, 78, 35, 16, 38, 55, 199,
+    0, 35, 16, 38, 198, 170, 199, 0, 35, 16, 207, 83, 35, 16, 201, 166, 35,
+    16, 192, 155, 35, 16, 210, 50, 35, 16, 216, 226, 35, 16, 232, 130, 35,
+    16, 238, 195, 35, 16, 237, 102, 35, 16, 230, 227, 213, 106, 203, 4, 35,
+    16, 230, 227, 213, 106, 213, 143, 203, 4, 35, 16, 198, 224, 35, 16, 198,
+    9, 35, 16, 223, 121, 198, 9, 35, 16, 198, 10, 203, 4, 35, 16, 198, 10,
+    197, 41, 35, 16, 211, 151, 201, 207, 35, 16, 211, 151, 201, 204, 35, 16,
+    211, 151, 201, 203, 35, 16, 211, 151, 201, 202, 35, 16, 211, 151, 201,
+    201, 35, 16, 211, 151, 201, 200, 35, 16, 211, 151, 201, 199, 35, 16, 211,
+    151, 201, 198, 35, 16, 211, 151, 201, 197, 35, 16, 211, 151, 201, 206,
+    35, 16, 211, 151, 201, 205, 35, 16, 230, 10, 35, 16, 214, 206, 35, 16,
+    234, 80, 80, 201, 244, 35, 16, 237, 95, 203, 4, 35, 16, 38, 142, 247,
+    180, 35, 16, 38, 130, 247, 180, 35, 16, 38, 230, 23, 35, 16, 38, 202,
+    223, 209, 235, 35, 16, 210, 173, 77, 35, 16, 210, 173, 130, 77, 35, 16,
+    138, 210, 173, 77, 35, 16, 231, 8, 197, 41, 35, 16, 231, 8, 235, 96, 35,
+    16, 4, 232, 237, 35, 16, 237, 211, 35, 16, 237, 212, 251, 8, 35, 16, 217,
+    94, 35, 16, 219, 75, 35, 16, 247, 147, 35, 16, 204, 184, 194, 75, 35, 16,
+    204, 184, 247, 248, 35, 16, 216, 116, 35, 16, 216, 117, 247, 248, 35, 16,
+    204, 178, 194, 75, 35, 16, 204, 178, 247, 248, 35, 16, 232, 62, 194, 75,
+    35, 16, 232, 62, 247, 248, 35, 16, 219, 76, 210, 131, 207, 180, 35, 16,
+    219, 76, 223, 195, 207, 180, 35, 16, 247, 148, 207, 180, 35, 16, 204,
+    184, 207, 180, 35, 16, 216, 117, 207, 180, 35, 16, 204, 178, 207, 180,
+    35, 16, 200, 32, 210, 129, 238, 153, 209, 77, 210, 130, 35, 16, 200, 32,
+    210, 129, 238, 153, 209, 77, 223, 194, 35, 16, 200, 32, 210, 129, 238,
+    153, 209, 77, 210, 131, 236, 220, 35, 16, 200, 32, 223, 193, 238, 153,
+    209, 77, 210, 130, 35, 16, 200, 32, 223, 193, 238, 153, 209, 77, 223,
+    194, 35, 16, 200, 32, 223, 193, 238, 153, 209, 77, 223, 195, 236, 220,
+    35, 16, 200, 32, 223, 193, 238, 153, 209, 77, 223, 195, 236, 219, 35, 16,
+    200, 32, 223, 193, 238, 153, 209, 77, 223, 195, 236, 218, 35, 16, 238,
+    186, 35, 16, 230, 199, 247, 53, 242, 99, 35, 16, 230, 199, 233, 164, 242,
+    99, 35, 16, 50, 249, 226, 35, 16, 196, 10, 35, 16, 209, 195, 35, 16, 242,
+    89, 35, 16, 205, 249, 35, 16, 242, 94, 35, 16, 198, 242, 35, 16, 209,
+    163, 35, 16, 209, 164, 232, 187, 35, 16, 205, 250, 232, 187, 35, 16, 198,
+    243, 207, 177, 35, 16, 210, 112, 201, 156, 35, 16, 221, 186, 247, 53,
+    242, 99, 35, 16, 221, 186, 234, 80, 80, 210, 42, 35, 16, 221, 186, 52,
+    213, 105, 35, 16, 221, 186, 207, 249, 77, 35, 16, 221, 186, 194, 73, 213,
+    105, 35, 16, 221, 186, 138, 213, 105, 35, 16, 221, 186, 208, 168, 213,
+    106, 202, 0, 235, 96, 35, 16, 221, 186, 208, 168, 213, 106, 202, 0, 197,
+    41, 35, 16, 221, 186, 234, 144, 213, 106, 202, 0, 235, 96, 35, 16, 221,
+    186, 234, 144, 213, 106, 202, 0, 197, 41, 35, 16, 221, 186, 232, 196, 57,
+    33, 195, 251, 213, 109, 201, 52, 33, 195, 251, 213, 109, 201, 41, 33,
+    195, 251, 213, 109, 201, 31, 33, 195, 251, 213, 109, 201, 24, 33, 195,
+    251, 213, 109, 201, 16, 33, 195, 251, 213, 109, 201, 10, 33, 195, 251,
+    213, 109, 201, 9, 33, 195, 251, 213, 109, 201, 8, 33, 195, 251, 213, 109,
+    201, 7, 33, 195, 251, 213, 109, 201, 51, 33, 195, 251, 213, 109, 201, 50,
+    33, 195, 251, 213, 109, 201, 49, 33, 195, 251, 213, 109, 201, 48, 33,
+    195, 251, 213, 109, 201, 47, 33, 195, 251, 213, 109, 201, 46, 33, 195,
+    251, 213, 109, 201, 45, 33, 195, 251, 213, 109, 201, 44, 33, 195, 251,
+    213, 109, 201, 43, 33, 195, 251, 213, 109, 201, 42, 33, 195, 251, 213,
+    109, 201, 40, 33, 195, 251, 213, 109, 201, 39, 33, 195, 251, 213, 109,
+    201, 38, 33, 195, 251, 213, 109, 201, 37, 33, 195, 251, 213, 109, 201,
+    36, 33, 195, 251, 213, 109, 201, 15, 33, 195, 251, 213, 109, 201, 14, 33,
+    195, 251, 213, 109, 201, 13, 33, 195, 251, 213, 109, 201, 12, 33, 195,
+    251, 213, 109, 201, 11, 33, 223, 144, 213, 109, 201, 52, 33, 223, 144,
+    213, 109, 201, 41, 33, 223, 144, 213, 109, 201, 24, 33, 223, 144, 213,
+    109, 201, 16, 33, 223, 144, 213, 109, 201, 9, 33, 223, 144, 213, 109,
+    201, 8, 33, 223, 144, 213, 109, 201, 50, 33, 223, 144, 213, 109, 201, 49,
+    33, 223, 144, 213, 109, 201, 48, 33, 223, 144, 213, 109, 201, 47, 33,
+    223, 144, 213, 109, 201, 44, 33, 223, 144, 213, 109, 201, 43, 33, 223,
+    144, 213, 109, 201, 42, 33, 223, 144, 213, 109, 201, 37, 33, 223, 144,
+    213, 109, 201, 36, 33, 223, 144, 213, 109, 201, 35, 33, 223, 144, 213,
+    109, 201, 34, 33, 223, 144, 213, 109, 201, 33, 33, 223, 144, 213, 109,
+    201, 32, 33, 223, 144, 213, 109, 201, 30, 33, 223, 144, 213, 109, 201,
+    29, 33, 223, 144, 213, 109, 201, 28, 33, 223, 144, 213, 109, 201, 27, 33,
+    223, 144, 213, 109, 201, 26, 33, 223, 144, 213, 109, 201, 25, 33, 223,
+    144, 213, 109, 201, 23, 33, 223, 144, 213, 109, 201, 22, 33, 223, 144,
+    213, 109, 201, 21, 33, 223, 144, 213, 109, 201, 20, 33, 223, 144, 213,
+    109, 201, 19, 33, 223, 144, 213, 109, 201, 18, 33, 223, 144, 213, 109,
+    201, 17, 33, 223, 144, 213, 109, 201, 15, 33, 223, 144, 213, 109, 201,
+    14, 33, 223, 144, 213, 109, 201, 13, 33, 223, 144, 213, 109, 201, 12, 33,
+    223, 144, 213, 109, 201, 11, 38, 33, 35, 198, 166, 38, 33, 35, 200, 0,
+    38, 33, 35, 210, 142, 33, 35, 220, 10, 217, 91, 212, 234, 192, 76, 217,
+    91, 212, 234, 101, 217, 91, 212, 234, 104, 217, 91, 212, 234, 133, 217,
+    91, 212, 234, 134, 217, 91, 212, 234, 151, 217, 91, 212, 234, 170, 217,
+    91, 212, 234, 179, 217, 91, 212, 234, 174, 217, 91, 212, 234, 182, 217,
+    91, 212, 234, 200, 30, 217, 91, 212, 234, 234, 111, 217, 91, 212, 234,
+    197, 244, 217, 91, 212, 234, 199, 186, 217, 91, 212, 234, 232, 113, 217,
+    91, 212, 234, 233, 7, 217, 91, 212, 234, 203, 35, 217, 91, 212, 234, 204,
+    143, 217, 91, 212, 234, 234, 145, 217, 91, 212, 234, 214, 13, 216, 45,
+    39, 234, 189, 236, 234, 39, 229, 228, 234, 189, 236, 234, 39, 228, 167,
+    234, 189, 236, 234, 39, 234, 188, 229, 229, 236, 234, 39, 234, 188, 228,
+    166, 236, 234, 39, 234, 189, 200, 2, 39, 246, 137, 200, 2, 39, 232, 71,
+    242, 130, 200, 2, 39, 216, 108, 200, 2, 39, 248, 184, 200, 2, 39, 222,
+    45, 202, 236, 200, 2, 39, 238, 244, 200, 2, 39, 250, 56, 200, 2, 39, 211,
+    169, 200, 2, 39, 247, 158, 211, 125, 200, 2, 39, 237, 97, 211, 164, 236,
+    185, 200, 2, 39, 236, 182, 200, 2, 39, 192, 226, 200, 2, 39, 223, 181,
+    200, 2, 39, 210, 152, 200, 2, 39, 208, 2, 200, 2, 39, 239, 0, 200, 2, 39,
+    229, 26, 248, 252, 200, 2, 39, 194, 155, 200, 2, 39, 232, 159, 200, 2,
+    39, 251, 111, 200, 2, 39, 207, 212, 200, 2, 39, 207, 184, 200, 2, 39,
+    234, 187, 200, 2, 39, 222, 217, 200, 2, 39, 238, 251, 200, 2, 39, 234,
+    78, 200, 2, 39, 235, 33, 200, 2, 39, 246, 104, 200, 2, 39, 237, 107, 200,
+    2, 39, 28, 207, 183, 200, 2, 39, 211, 68, 200, 2, 39, 220, 14, 200, 2,
+    39, 242, 82, 200, 2, 39, 221, 174, 200, 2, 39, 231, 182, 200, 2, 39, 201,
+    219, 200, 2, 39, 209, 26, 200, 2, 39, 232, 70, 200, 2, 39, 207, 185, 200,
+    2, 39, 220, 55, 211, 164, 216, 81, 200, 2, 39, 207, 181, 200, 2, 39, 230,
+    247, 115, 217, 24, 200, 2, 39, 234, 81, 200, 2, 39, 201, 233, 200, 2, 39,
+    230, 202, 200, 2, 39, 234, 71, 200, 2, 39, 210, 200, 200, 2, 39, 207, 70,
+    200, 2, 39, 232, 185, 200, 2, 39, 196, 132, 211, 164, 194, 133, 200, 2,
+    39, 239, 5, 200, 2, 39, 217, 43, 200, 2, 39, 233, 237, 200, 2, 39, 197,
+    52, 200, 2, 39, 236, 221, 200, 2, 39, 242, 84, 216, 4, 200, 2, 39, 230,
+    178, 200, 2, 39, 231, 183, 223, 190, 200, 2, 39, 217, 103, 200, 2, 39,
+    251, 137, 200, 2, 39, 234, 97, 200, 2, 39, 235, 100, 200, 2, 39, 194,
+    131, 200, 2, 39, 203, 69, 200, 2, 39, 223, 154, 200, 2, 39, 237, 64, 200,
+    2, 39, 237, 189, 200, 2, 39, 236, 217, 200, 2, 39, 233, 201, 200, 2, 39,
+    204, 139, 200, 2, 39, 201, 237, 200, 2, 39, 230, 25, 200, 2, 39, 242, 30,
+    200, 2, 39, 242, 79, 200, 2, 39, 233, 76, 200, 2, 39, 251, 75, 200, 2,
+    39, 242, 29, 200, 2, 39, 211, 212, 199, 225, 196, 108, 200, 2, 39, 236,
+    243, 200, 2, 39, 220, 172, 200, 2, 39, 232, 122, 238, 210, 207, 38, 197,
+    55, 17, 101, 238, 210, 207, 38, 197, 55, 17, 104, 238, 210, 207, 38, 197,
+    55, 17, 133, 238, 210, 207, 38, 197, 55, 17, 134, 238, 210, 207, 38, 197,
+    55, 17, 151, 238, 210, 207, 38, 197, 55, 17, 170, 238, 210, 207, 38, 197,
+    55, 17, 179, 238, 210, 207, 38, 197, 55, 17, 174, 238, 210, 207, 38, 197,
+    55, 17, 182, 238, 210, 207, 38, 200, 26, 17, 101, 238, 210, 207, 38, 200,
+    26, 17, 104, 238, 210, 207, 38, 200, 26, 17, 133, 238, 210, 207, 38, 200,
+    26, 17, 134, 238, 210, 207, 38, 200, 26, 17, 151, 238, 210, 207, 38, 200,
+    26, 17, 170, 238, 210, 207, 38, 200, 26, 17, 179, 238, 210, 207, 38, 200,
+    26, 17, 174, 238, 210, 207, 38, 200, 26, 17, 182, 149, 200, 130, 122,
+    101, 149, 200, 130, 122, 104, 149, 200, 130, 122, 133, 149, 200, 130,
+    122, 134, 149, 200, 130, 122, 151, 200, 130, 122, 101, 200, 130, 122,
+    151, 13, 28, 6, 64, 13, 28, 6, 249, 226, 13, 28, 6, 247, 52, 13, 28, 6,
+    238, 95, 13, 28, 6, 71, 13, 28, 6, 233, 163, 13, 28, 6, 232, 44, 13, 28,
+    6, 230, 124, 13, 28, 6, 70, 13, 28, 6, 223, 65, 13, 28, 6, 222, 184, 13,
+    28, 6, 165, 13, 28, 6, 218, 236, 13, 28, 6, 215, 151, 13, 28, 6, 74, 13,
+    28, 6, 211, 93, 13, 28, 6, 208, 247, 13, 28, 6, 150, 13, 28, 6, 206, 158,
+    13, 28, 6, 200, 228, 13, 28, 6, 68, 13, 28, 6, 196, 236, 13, 28, 6, 194,
+    202, 13, 28, 6, 193, 223, 13, 28, 6, 193, 148, 13, 28, 6, 192, 155, 13,
+    28, 2, 64, 13, 28, 2, 249, 226, 13, 28, 2, 247, 52, 13, 28, 2, 238, 95,
+    13, 28, 2, 71, 13, 28, 2, 233, 163, 13, 28, 2, 232, 44, 13, 28, 2, 230,
+    124, 13, 28, 2, 70, 13, 28, 2, 223, 65, 13, 28, 2, 222, 184, 13, 28, 2,
+    165, 13, 28, 2, 218, 236, 13, 28, 2, 215, 151, 13, 28, 2, 74, 13, 28, 2,
+    211, 93, 13, 28, 2, 208, 247, 13, 28, 2, 150, 13, 28, 2, 206, 158, 13,
+    28, 2, 200, 228, 13, 28, 2, 68, 13, 28, 2, 196, 236, 13, 28, 2, 194, 202,
+    13, 28, 2, 193, 223, 13, 28, 2, 193, 148, 13, 28, 2, 192, 155, 13, 43, 6,
+    64, 13, 43, 6, 249, 226, 13, 43, 6, 247, 52, 13, 43, 6, 238, 95, 13, 43,
+    6, 71, 13, 43, 6, 233, 163, 13, 43, 6, 232, 44, 13, 43, 6, 230, 124, 13,
+    43, 6, 70, 13, 43, 6, 223, 65, 13, 43, 6, 222, 184, 13, 43, 6, 165, 13,
+    43, 6, 218, 236, 13, 43, 6, 215, 151, 13, 43, 6, 74, 13, 43, 6, 211, 93,
+    13, 43, 6, 208, 247, 13, 43, 6, 150, 13, 43, 6, 206, 158, 13, 43, 6, 200,
+    228, 13, 43, 6, 68, 13, 43, 6, 196, 236, 13, 43, 6, 194, 202, 13, 43, 6,
+    193, 223, 13, 43, 6, 193, 148, 13, 43, 6, 192, 155, 13, 43, 2, 64, 13,
+    43, 2, 249, 226, 13, 43, 2, 247, 52, 13, 43, 2, 238, 95, 13, 43, 2, 71,
+    13, 43, 2, 233, 163, 13, 43, 2, 232, 44, 13, 43, 2, 70, 13, 43, 2, 223,
+    65, 13, 43, 2, 222, 184, 13, 43, 2, 165, 13, 43, 2, 218, 236, 13, 43, 2,
+    215, 151, 13, 43, 2, 74, 13, 43, 2, 211, 93, 13, 43, 2, 208, 247, 13, 43,
+    2, 150, 13, 43, 2, 206, 158, 13, 43, 2, 200, 228, 13, 43, 2, 68, 13, 43,
+    2, 196, 236, 13, 43, 2, 194, 202, 13, 43, 2, 193, 223, 13, 43, 2, 193,
+    148, 13, 43, 2, 192, 155, 13, 28, 43, 6, 64, 13, 28, 43, 6, 249, 226, 13,
+    28, 43, 6, 247, 52, 13, 28, 43, 6, 238, 95, 13, 28, 43, 6, 71, 13, 28,
+    43, 6, 233, 163, 13, 28, 43, 6, 232, 44, 13, 28, 43, 6, 230, 124, 13, 28,
+    43, 6, 70, 13, 28, 43, 6, 223, 65, 13, 28, 43, 6, 222, 184, 13, 28, 43,
+    6, 165, 13, 28, 43, 6, 218, 236, 13, 28, 43, 6, 215, 151, 13, 28, 43, 6,
+    74, 13, 28, 43, 6, 211, 93, 13, 28, 43, 6, 208, 247, 13, 28, 43, 6, 150,
+    13, 28, 43, 6, 206, 158, 13, 28, 43, 6, 200, 228, 13, 28, 43, 6, 68, 13,
+    28, 43, 6, 196, 236, 13, 28, 43, 6, 194, 202, 13, 28, 43, 6, 193, 223,
+    13, 28, 43, 6, 193, 148, 13, 28, 43, 6, 192, 155, 13, 28, 43, 2, 64, 13,
+    28, 43, 2, 249, 226, 13, 28, 43, 2, 247, 52, 13, 28, 43, 2, 238, 95, 13,
+    28, 43, 2, 71, 13, 28, 43, 2, 233, 163, 13, 28, 43, 2, 232, 44, 13, 28,
+    43, 2, 230, 124, 13, 28, 43, 2, 70, 13, 28, 43, 2, 223, 65, 13, 28, 43,
+    2, 222, 184, 13, 28, 43, 2, 165, 13, 28, 43, 2, 218, 236, 13, 28, 43, 2,
+    215, 151, 13, 28, 43, 2, 74, 13, 28, 43, 2, 211, 93, 13, 28, 43, 2, 208,
+    247, 13, 28, 43, 2, 150, 13, 28, 43, 2, 206, 158, 13, 28, 43, 2, 200,
+    228, 13, 28, 43, 2, 68, 13, 28, 43, 2, 196, 236, 13, 28, 43, 2, 194, 202,
+    13, 28, 43, 2, 193, 223, 13, 28, 43, 2, 193, 148, 13, 28, 43, 2, 192,
+    155, 13, 27, 6, 64, 13, 27, 6, 247, 52, 13, 27, 6, 238, 95, 13, 27, 6,
+    232, 44, 13, 27, 6, 223, 65, 13, 27, 6, 222, 184, 13, 27, 6, 215, 151,
+    13, 27, 6, 74, 13, 27, 6, 211, 93, 13, 27, 6, 208, 247, 13, 27, 6, 206,
+    158, 13, 27, 6, 200, 228, 13, 27, 6, 68, 13, 27, 6, 196, 236, 13, 27, 6,
+    194, 202, 13, 27, 6, 193, 223, 13, 27, 6, 193, 148, 13, 27, 6, 192, 155,
+    13, 27, 2, 64, 13, 27, 2, 249, 226, 13, 27, 2, 247, 52, 13, 27, 2, 238,
+    95, 13, 27, 2, 233, 163, 13, 27, 2, 230, 124, 13, 27, 2, 70, 13, 27, 2,
+    223, 65, 13, 27, 2, 222, 184, 13, 27, 2, 165, 13, 27, 2, 218, 236, 13,
+    27, 2, 215, 151, 13, 27, 2, 211, 93, 13, 27, 2, 208, 247, 13, 27, 2, 150,
+    13, 27, 2, 206, 158, 13, 27, 2, 200, 228, 13, 27, 2, 68, 13, 27, 2, 196,
+    236, 13, 27, 2, 194, 202, 13, 27, 2, 193, 223, 13, 27, 2, 193, 148, 13,
+    27, 2, 192, 155, 13, 28, 27, 6, 64, 13, 28, 27, 6, 249, 226, 13, 28, 27,
+    6, 247, 52, 13, 28, 27, 6, 238, 95, 13, 28, 27, 6, 71, 13, 28, 27, 6,
+    233, 163, 13, 28, 27, 6, 232, 44, 13, 28, 27, 6, 230, 124, 13, 28, 27, 6,
+    70, 13, 28, 27, 6, 223, 65, 13, 28, 27, 6, 222, 184, 13, 28, 27, 6, 165,
+    13, 28, 27, 6, 218, 236, 13, 28, 27, 6, 215, 151, 13, 28, 27, 6, 74, 13,
+    28, 27, 6, 211, 93, 13, 28, 27, 6, 208, 247, 13, 28, 27, 6, 150, 13, 28,
+    27, 6, 206, 158, 13, 28, 27, 6, 200, 228, 13, 28, 27, 6, 68, 13, 28, 27,
+    6, 196, 236, 13, 28, 27, 6, 194, 202, 13, 28, 27, 6, 193, 223, 13, 28,
+    27, 6, 193, 148, 13, 28, 27, 6, 192, 155, 13, 28, 27, 2, 64, 13, 28, 27,
+    2, 249, 226, 13, 28, 27, 2, 247, 52, 13, 28, 27, 2, 238, 95, 13, 28, 27,
+    2, 71, 13, 28, 27, 2, 233, 163, 13, 28, 27, 2, 232, 44, 13, 28, 27, 2,
+    230, 124, 13, 28, 27, 2, 70, 13, 28, 27, 2, 223, 65, 13, 28, 27, 2, 222,
+    184, 13, 28, 27, 2, 165, 13, 28, 27, 2, 218, 236, 13, 28, 27, 2, 215,
+    151, 13, 28, 27, 2, 74, 13, 28, 27, 2, 211, 93, 13, 28, 27, 2, 208, 247,
+    13, 28, 27, 2, 150, 13, 28, 27, 2, 206, 158, 13, 28, 27, 2, 200, 228, 13,
+    28, 27, 2, 68, 13, 28, 27, 2, 196, 236, 13, 28, 27, 2, 194, 202, 13, 28,
+    27, 2, 193, 223, 13, 28, 27, 2, 193, 148, 13, 28, 27, 2, 192, 155, 13,
+    232, 106, 6, 64, 13, 232, 106, 6, 249, 226, 13, 232, 106, 6, 238, 95, 13,
+    232, 106, 6, 71, 13, 232, 106, 6, 233, 163, 13, 232, 106, 6, 232, 44, 13,
+    232, 106, 6, 223, 65, 13, 232, 106, 6, 222, 184, 13, 232, 106, 6, 165,
+    13, 232, 106, 6, 218, 236, 13, 232, 106, 6, 215, 151, 13, 232, 106, 6,
+    74, 13, 232, 106, 6, 211, 93, 13, 232, 106, 6, 208, 247, 13, 232, 106, 6,
+    206, 158, 13, 232, 106, 6, 200, 228, 13, 232, 106, 6, 68, 13, 232, 106,
+    6, 196, 236, 13, 232, 106, 6, 194, 202, 13, 232, 106, 6, 193, 223, 13,
+    232, 106, 6, 193, 148, 13, 232, 106, 2, 64, 13, 232, 106, 2, 249, 226,
+    13, 232, 106, 2, 247, 52, 13, 232, 106, 2, 238, 95, 13, 232, 106, 2, 71,
+    13, 232, 106, 2, 233, 163, 13, 232, 106, 2, 232, 44, 13, 232, 106, 2,
+    230, 124, 13, 232, 106, 2, 70, 13, 232, 106, 2, 223, 65, 13, 232, 106, 2,
+    222, 184, 13, 232, 106, 2, 165, 13, 232, 106, 2, 218, 236, 13, 232, 106,
+    2, 215, 151, 13, 232, 106, 2, 74, 13, 232, 106, 2, 211, 93, 13, 232, 106,
+    2, 208, 247, 13, 232, 106, 2, 150, 13, 232, 106, 2, 206, 158, 13, 232,
+    106, 2, 200, 228, 13, 232, 106, 2, 68, 13, 232, 106, 2, 196, 236, 13,
+    232, 106, 2, 194, 202, 13, 232, 106, 2, 193, 223, 13, 232, 106, 2, 193,
+    148, 13, 232, 106, 2, 192, 155, 13, 235, 102, 6, 64, 13, 235, 102, 6,
+    249, 226, 13, 235, 102, 6, 238, 95, 13, 235, 102, 6, 71, 13, 235, 102, 6,
+    233, 163, 13, 235, 102, 6, 232, 44, 13, 235, 102, 6, 70, 13, 235, 102, 6,
+    223, 65, 13, 235, 102, 6, 222, 184, 13, 235, 102, 6, 165, 13, 235, 102,
+    6, 218, 236, 13, 235, 102, 6, 74, 13, 235, 102, 6, 206, 158, 13, 235,
+    102, 6, 200, 228, 13, 235, 102, 6, 68, 13, 235, 102, 6, 196, 236, 13,
+    235, 102, 6, 194, 202, 13, 235, 102, 6, 193, 223, 13, 235, 102, 6, 193,
+    148, 13, 235, 102, 2, 64, 13, 235, 102, 2, 249, 226, 13, 235, 102, 2,
+    247, 52, 13, 235, 102, 2, 238, 95, 13, 235, 102, 2, 71, 13, 235, 102, 2,
+    233, 163, 13, 235, 102, 2, 232, 44, 13, 235, 102, 2, 230, 124, 13, 235,
+    102, 2, 70, 13, 235, 102, 2, 223, 65, 13, 235, 102, 2, 222, 184, 13, 235,
+    102, 2, 165, 13, 235, 102, 2, 218, 236, 13, 235, 102, 2, 215, 151, 13,
+    235, 102, 2, 74, 13, 235, 102, 2, 211, 93, 13, 235, 102, 2, 208, 247, 13,
+    235, 102, 2, 150, 13, 235, 102, 2, 206, 158, 13, 235, 102, 2, 200, 228,
+    13, 235, 102, 2, 68, 13, 235, 102, 2, 196, 236, 13, 235, 102, 2, 194,
+    202, 13, 235, 102, 2, 193, 223, 13, 235, 102, 2, 193, 148, 13, 235, 102,
+    2, 192, 155, 13, 28, 232, 106, 6, 64, 13, 28, 232, 106, 6, 249, 226, 13,
+    28, 232, 106, 6, 247, 52, 13, 28, 232, 106, 6, 238, 95, 13, 28, 232, 106,
+    6, 71, 13, 28, 232, 106, 6, 233, 163, 13, 28, 232, 106, 6, 232, 44, 13,
+    28, 232, 106, 6, 230, 124, 13, 28, 232, 106, 6, 70, 13, 28, 232, 106, 6,
+    223, 65, 13, 28, 232, 106, 6, 222, 184, 13, 28, 232, 106, 6, 165, 13, 28,
+    232, 106, 6, 218, 236, 13, 28, 232, 106, 6, 215, 151, 13, 28, 232, 106,
+    6, 74, 13, 28, 232, 106, 6, 211, 93, 13, 28, 232, 106, 6, 208, 247, 13,
+    28, 232, 106, 6, 150, 13, 28, 232, 106, 6, 206, 158, 13, 28, 232, 106, 6,
+    200, 228, 13, 28, 232, 106, 6, 68, 13, 28, 232, 106, 6, 196, 236, 13, 28,
+    232, 106, 6, 194, 202, 13, 28, 232, 106, 6, 193, 223, 13, 28, 232, 106,
+    6, 193, 148, 13, 28, 232, 106, 6, 192, 155, 13, 28, 232, 106, 2, 64, 13,
+    28, 232, 106, 2, 249, 226, 13, 28, 232, 106, 2, 247, 52, 13, 28, 232,
+    106, 2, 238, 95, 13, 28, 232, 106, 2, 71, 13, 28, 232, 106, 2, 233, 163,
+    13, 28, 232, 106, 2, 232, 44, 13, 28, 232, 106, 2, 230, 124, 13, 28, 232,
+    106, 2, 70, 13, 28, 232, 106, 2, 223, 65, 13, 28, 232, 106, 2, 222, 184,
+    13, 28, 232, 106, 2, 165, 13, 28, 232, 106, 2, 218, 236, 13, 28, 232,
+    106, 2, 215, 151, 13, 28, 232, 106, 2, 74, 13, 28, 232, 106, 2, 211, 93,
+    13, 28, 232, 106, 2, 208, 247, 13, 28, 232, 106, 2, 150, 13, 28, 232,
+    106, 2, 206, 158, 13, 28, 232, 106, 2, 200, 228, 13, 28, 232, 106, 2, 68,
+    13, 28, 232, 106, 2, 196, 236, 13, 28, 232, 106, 2, 194, 202, 13, 28,
+    232, 106, 2, 193, 223, 13, 28, 232, 106, 2, 193, 148, 13, 28, 232, 106,
+    2, 192, 155, 13, 49, 6, 64, 13, 49, 6, 249, 226, 13, 49, 6, 247, 52, 13,
+    49, 6, 238, 95, 13, 49, 6, 71, 13, 49, 6, 233, 163, 13, 49, 6, 232, 44,
+    13, 49, 6, 230, 124, 13, 49, 6, 70, 13, 49, 6, 223, 65, 13, 49, 6, 222,
+    184, 13, 49, 6, 165, 13, 49, 6, 218, 236, 13, 49, 6, 215, 151, 13, 49, 6,
+    74, 13, 49, 6, 211, 93, 13, 49, 6, 208, 247, 13, 49, 6, 150, 13, 49, 6,
+    206, 158, 13, 49, 6, 200, 228, 13, 49, 6, 68, 13, 49, 6, 196, 236, 13,
+    49, 6, 194, 202, 13, 49, 6, 193, 223, 13, 49, 6, 193, 148, 13, 49, 6,
+    192, 155, 13, 49, 2, 64, 13, 49, 2, 249, 226, 13, 49, 2, 247, 52, 13, 49,
+    2, 238, 95, 13, 49, 2, 71, 13, 49, 2, 233, 163, 13, 49, 2, 232, 44, 13,
+    49, 2, 230, 124, 13, 49, 2, 70, 13, 49, 2, 223, 65, 13, 49, 2, 222, 184,
+    13, 49, 2, 165, 13, 49, 2, 218, 236, 13, 49, 2, 215, 151, 13, 49, 2, 74,
+    13, 49, 2, 211, 93, 13, 49, 2, 208, 247, 13, 49, 2, 150, 13, 49, 2, 206,
+    158, 13, 49, 2, 200, 228, 13, 49, 2, 68, 13, 49, 2, 196, 236, 13, 49, 2,
+    194, 202, 13, 49, 2, 193, 223, 13, 49, 2, 193, 148, 13, 49, 2, 192, 155,
+    13, 49, 28, 6, 64, 13, 49, 28, 6, 249, 226, 13, 49, 28, 6, 247, 52, 13,
+    49, 28, 6, 238, 95, 13, 49, 28, 6, 71, 13, 49, 28, 6, 233, 163, 13, 49,
+    28, 6, 232, 44, 13, 49, 28, 6, 230, 124, 13, 49, 28, 6, 70, 13, 49, 28,
+    6, 223, 65, 13, 49, 28, 6, 222, 184, 13, 49, 28, 6, 165, 13, 49, 28, 6,
+    218, 236, 13, 49, 28, 6, 215, 151, 13, 49, 28, 6, 74, 13, 49, 28, 6, 211,
+    93, 13, 49, 28, 6, 208, 247, 13, 49, 28, 6, 150, 13, 49, 28, 6, 206, 158,
+    13, 49, 28, 6, 200, 228, 13, 49, 28, 6, 68, 13, 49, 28, 6, 196, 236, 13,
+    49, 28, 6, 194, 202, 13, 49, 28, 6, 193, 223, 13, 49, 28, 6, 193, 148,
+    13, 49, 28, 6, 192, 155, 13, 49, 28, 2, 64, 13, 49, 28, 2, 249, 226, 13,
+    49, 28, 2, 247, 52, 13, 49, 28, 2, 238, 95, 13, 49, 28, 2, 71, 13, 49,
+    28, 2, 233, 163, 13, 49, 28, 2, 232, 44, 13, 49, 28, 2, 230, 124, 13, 49,
+    28, 2, 70, 13, 49, 28, 2, 223, 65, 13, 49, 28, 2, 222, 184, 13, 49, 28,
+    2, 165, 13, 49, 28, 2, 218, 236, 13, 49, 28, 2, 215, 151, 13, 49, 28, 2,
+    74, 13, 49, 28, 2, 211, 93, 13, 49, 28, 2, 208, 247, 13, 49, 28, 2, 150,
+    13, 49, 28, 2, 206, 158, 13, 49, 28, 2, 200, 228, 13, 49, 28, 2, 68, 13,
+    49, 28, 2, 196, 236, 13, 49, 28, 2, 194, 202, 13, 49, 28, 2, 193, 223,
+    13, 49, 28, 2, 193, 148, 13, 49, 28, 2, 192, 155, 13, 49, 43, 6, 64, 13,
+    49, 43, 6, 249, 226, 13, 49, 43, 6, 247, 52, 13, 49, 43, 6, 238, 95, 13,
+    49, 43, 6, 71, 13, 49, 43, 6, 233, 163, 13, 49, 43, 6, 232, 44, 13, 49,
+    43, 6, 230, 124, 13, 49, 43, 6, 70, 13, 49, 43, 6, 223, 65, 13, 49, 43,
+    6, 222, 184, 13, 49, 43, 6, 165, 13, 49, 43, 6, 218, 236, 13, 49, 43, 6,
+    215, 151, 13, 49, 43, 6, 74, 13, 49, 43, 6, 211, 93, 13, 49, 43, 6, 208,
+    247, 13, 49, 43, 6, 150, 13, 49, 43, 6, 206, 158, 13, 49, 43, 6, 200,
+    228, 13, 49, 43, 6, 68, 13, 49, 43, 6, 196, 236, 13, 49, 43, 6, 194, 202,
+    13, 49, 43, 6, 193, 223, 13, 49, 43, 6, 193, 148, 13, 49, 43, 6, 192,
+    155, 13, 49, 43, 2, 64, 13, 49, 43, 2, 249, 226, 13, 49, 43, 2, 247, 52,
+    13, 49, 43, 2, 238, 95, 13, 49, 43, 2, 71, 13, 49, 43, 2, 233, 163, 13,
+    49, 43, 2, 232, 44, 13, 49, 43, 2, 230, 124, 13, 49, 43, 2, 70, 13, 49,
+    43, 2, 223, 65, 13, 49, 43, 2, 222, 184, 13, 49, 43, 2, 165, 13, 49, 43,
+    2, 218, 236, 13, 49, 43, 2, 215, 151, 13, 49, 43, 2, 74, 13, 49, 43, 2,
+    211, 93, 13, 49, 43, 2, 208, 247, 13, 49, 43, 2, 150, 13, 49, 43, 2, 206,
+    158, 13, 49, 43, 2, 200, 228, 13, 49, 43, 2, 68, 13, 49, 43, 2, 196, 236,
+    13, 49, 43, 2, 194, 202, 13, 49, 43, 2, 193, 223, 13, 49, 43, 2, 193,
+    148, 13, 49, 43, 2, 192, 155, 13, 49, 28, 43, 6, 64, 13, 49, 28, 43, 6,
+    249, 226, 13, 49, 28, 43, 6, 247, 52, 13, 49, 28, 43, 6, 238, 95, 13, 49,
+    28, 43, 6, 71, 13, 49, 28, 43, 6, 233, 163, 13, 49, 28, 43, 6, 232, 44,
+    13, 49, 28, 43, 6, 230, 124, 13, 49, 28, 43, 6, 70, 13, 49, 28, 43, 6,
+    223, 65, 13, 49, 28, 43, 6, 222, 184, 13, 49, 28, 43, 6, 165, 13, 49, 28,
+    43, 6, 218, 236, 13, 49, 28, 43, 6, 215, 151, 13, 49, 28, 43, 6, 74, 13,
+    49, 28, 43, 6, 211, 93, 13, 49, 28, 43, 6, 208, 247, 13, 49, 28, 43, 6,
+    150, 13, 49, 28, 43, 6, 206, 158, 13, 49, 28, 43, 6, 200, 228, 13, 49,
+    28, 43, 6, 68, 13, 49, 28, 43, 6, 196, 236, 13, 49, 28, 43, 6, 194, 202,
+    13, 49, 28, 43, 6, 193, 223, 13, 49, 28, 43, 6, 193, 148, 13, 49, 28, 43,
+    6, 192, 155, 13, 49, 28, 43, 2, 64, 13, 49, 28, 43, 2, 249, 226, 13, 49,
+    28, 43, 2, 247, 52, 13, 49, 28, 43, 2, 238, 95, 13, 49, 28, 43, 2, 71,
+    13, 49, 28, 43, 2, 233, 163, 13, 49, 28, 43, 2, 232, 44, 13, 49, 28, 43,
+    2, 230, 124, 13, 49, 28, 43, 2, 70, 13, 49, 28, 43, 2, 223, 65, 13, 49,
+    28, 43, 2, 222, 184, 13, 49, 28, 43, 2, 165, 13, 49, 28, 43, 2, 218, 236,
+    13, 49, 28, 43, 2, 215, 151, 13, 49, 28, 43, 2, 74, 13, 49, 28, 43, 2,
+    211, 93, 13, 49, 28, 43, 2, 208, 247, 13, 49, 28, 43, 2, 150, 13, 49, 28,
+    43, 2, 206, 158, 13, 49, 28, 43, 2, 200, 228, 13, 49, 28, 43, 2, 68, 13,
+    49, 28, 43, 2, 196, 236, 13, 49, 28, 43, 2, 194, 202, 13, 49, 28, 43, 2,
+    193, 223, 13, 49, 28, 43, 2, 193, 148, 13, 49, 28, 43, 2, 192, 155, 13,
+    216, 41, 6, 64, 13, 216, 41, 6, 249, 226, 13, 216, 41, 6, 247, 52, 13,
+    216, 41, 6, 238, 95, 13, 216, 41, 6, 71, 13, 216, 41, 6, 233, 163, 13,
+    216, 41, 6, 232, 44, 13, 216, 41, 6, 230, 124, 13, 216, 41, 6, 70, 13,
+    216, 41, 6, 223, 65, 13, 216, 41, 6, 222, 184, 13, 216, 41, 6, 165, 13,
+    216, 41, 6, 218, 236, 13, 216, 41, 6, 215, 151, 13, 216, 41, 6, 74, 13,
+    216, 41, 6, 211, 93, 13, 216, 41, 6, 208, 247, 13, 216, 41, 6, 150, 13,
+    216, 41, 6, 206, 158, 13, 216, 41, 6, 200, 228, 13, 216, 41, 6, 68, 13,
+    216, 41, 6, 196, 236, 13, 216, 41, 6, 194, 202, 13, 216, 41, 6, 193, 223,
+    13, 216, 41, 6, 193, 148, 13, 216, 41, 6, 192, 155, 13, 216, 41, 2, 64,
+    13, 216, 41, 2, 249, 226, 13, 216, 41, 2, 247, 52, 13, 216, 41, 2, 238,
+    95, 13, 216, 41, 2, 71, 13, 216, 41, 2, 233, 163, 13, 216, 41, 2, 232,
+    44, 13, 216, 41, 2, 230, 124, 13, 216, 41, 2, 70, 13, 216, 41, 2, 223,
+    65, 13, 216, 41, 2, 222, 184, 13, 216, 41, 2, 165, 13, 216, 41, 2, 218,
+    236, 13, 216, 41, 2, 215, 151, 13, 216, 41, 2, 74, 13, 216, 41, 2, 211,
+    93, 13, 216, 41, 2, 208, 247, 13, 216, 41, 2, 150, 13, 216, 41, 2, 206,
+    158, 13, 216, 41, 2, 200, 228, 13, 216, 41, 2, 68, 13, 216, 41, 2, 196,
+    236, 13, 216, 41, 2, 194, 202, 13, 216, 41, 2, 193, 223, 13, 216, 41, 2,
+    193, 148, 13, 216, 41, 2, 192, 155, 13, 43, 2, 236, 113, 70, 13, 43, 2,
+    236, 113, 223, 65, 13, 28, 6, 250, 252, 13, 28, 6, 248, 63, 13, 28, 6,
+    231, 204, 13, 28, 6, 237, 76, 13, 28, 6, 234, 32, 13, 28, 6, 192, 75, 13,
+    28, 6, 233, 240, 13, 28, 6, 199, 206, 13, 28, 6, 223, 111, 13, 28, 6,
+    222, 106, 13, 28, 6, 220, 90, 13, 28, 6, 215, 241, 13, 28, 6, 213, 22,
+    13, 28, 6, 193, 196, 13, 28, 6, 211, 214, 13, 28, 6, 210, 51, 13, 28, 6,
+    207, 153, 13, 28, 6, 199, 207, 109, 13, 28, 6, 203, 99, 13, 28, 6, 200,
+    100, 13, 28, 6, 197, 34, 13, 28, 6, 210, 77, 13, 28, 6, 242, 215, 13, 28,
+    6, 209, 62, 13, 28, 6, 211, 216, 13, 28, 215, 79, 13, 28, 2, 250, 252,
+    13, 28, 2, 248, 63, 13, 28, 2, 231, 204, 13, 28, 2, 237, 76, 13, 28, 2,
+    234, 32, 13, 28, 2, 192, 75, 13, 28, 2, 233, 240, 13, 28, 2, 199, 206,
+    13, 28, 2, 223, 111, 13, 28, 2, 222, 106, 13, 28, 2, 220, 90, 13, 28, 2,
+    215, 241, 13, 28, 2, 213, 22, 13, 28, 2, 193, 196, 13, 28, 2, 211, 214,
+    13, 28, 2, 210, 51, 13, 28, 2, 207, 153, 13, 28, 2, 52, 203, 99, 13, 28,
+    2, 203, 99, 13, 28, 2, 200, 100, 13, 28, 2, 197, 34, 13, 28, 2, 210, 77,
+    13, 28, 2, 242, 215, 13, 28, 2, 209, 62, 13, 28, 2, 211, 216, 13, 28,
+    210, 222, 236, 244, 13, 28, 234, 33, 109, 13, 28, 199, 207, 109, 13, 28,
+    222, 107, 109, 13, 28, 210, 78, 109, 13, 28, 207, 154, 109, 13, 28, 210,
+    52, 109, 13, 43, 6, 250, 252, 13, 43, 6, 248, 63, 13, 43, 6, 231, 204,
+    13, 43, 6, 237, 76, 13, 43, 6, 234, 32, 13, 43, 6, 192, 75, 13, 43, 6,
+    233, 240, 13, 43, 6, 199, 206, 13, 43, 6, 223, 111, 13, 43, 6, 222, 106,
+    13, 43, 6, 220, 90, 13, 43, 6, 215, 241, 13, 43, 6, 213, 22, 13, 43, 6,
+    193, 196, 13, 43, 6, 211, 214, 13, 43, 6, 210, 51, 13, 43, 6, 207, 153,
+    13, 43, 6, 199, 207, 109, 13, 43, 6, 203, 99, 13, 43, 6, 200, 100, 13,
+    43, 6, 197, 34, 13, 43, 6, 210, 77, 13, 43, 6, 242, 215, 13, 43, 6, 209,
+    62, 13, 43, 6, 211, 216, 13, 43, 215, 79, 13, 43, 2, 250, 252, 13, 43, 2,
+    248, 63, 13, 43, 2, 231, 204, 13, 43, 2, 237, 76, 13, 43, 2, 234, 32, 13,
+    43, 2, 192, 75, 13, 43, 2, 233, 240, 13, 43, 2, 199, 206, 13, 43, 2, 223,
+    111, 13, 43, 2, 222, 106, 13, 43, 2, 220, 90, 13, 43, 2, 215, 241, 13,
+    43, 2, 213, 22, 13, 43, 2, 193, 196, 13, 43, 2, 211, 214, 13, 43, 2, 210,
+    51, 13, 43, 2, 207, 153, 13, 43, 2, 52, 203, 99, 13, 43, 2, 203, 99, 13,
+    43, 2, 200, 100, 13, 43, 2, 197, 34, 13, 43, 2, 210, 77, 13, 43, 2, 242,
+    215, 13, 43, 2, 209, 62, 13, 43, 2, 211, 216, 13, 43, 210, 222, 236, 244,
+    13, 43, 234, 33, 109, 13, 43, 199, 207, 109, 13, 43, 222, 107, 109, 13,
+    43, 210, 78, 109, 13, 43, 207, 154, 109, 13, 43, 210, 52, 109, 13, 28,
+    43, 6, 250, 252, 13, 28, 43, 6, 248, 63, 13, 28, 43, 6, 231, 204, 13, 28,
+    43, 6, 237, 76, 13, 28, 43, 6, 234, 32, 13, 28, 43, 6, 192, 75, 13, 28,
+    43, 6, 233, 240, 13, 28, 43, 6, 199, 206, 13, 28, 43, 6, 223, 111, 13,
+    28, 43, 6, 222, 106, 13, 28, 43, 6, 220, 90, 13, 28, 43, 6, 215, 241, 13,
+    28, 43, 6, 213, 22, 13, 28, 43, 6, 193, 196, 13, 28, 43, 6, 211, 214, 13,
+    28, 43, 6, 210, 51, 13, 28, 43, 6, 207, 153, 13, 28, 43, 6, 199, 207,
+    109, 13, 28, 43, 6, 203, 99, 13, 28, 43, 6, 200, 100, 13, 28, 43, 6, 197,
+    34, 13, 28, 43, 6, 210, 77, 13, 28, 43, 6, 242, 215, 13, 28, 43, 6, 209,
+    62, 13, 28, 43, 6, 211, 216, 13, 28, 43, 215, 79, 13, 28, 43, 2, 250,
+    252, 13, 28, 43, 2, 248, 63, 13, 28, 43, 2, 231, 204, 13, 28, 43, 2, 237,
+    76, 13, 28, 43, 2, 234, 32, 13, 28, 43, 2, 192, 75, 13, 28, 43, 2, 233,
+    240, 13, 28, 43, 2, 199, 206, 13, 28, 43, 2, 223, 111, 13, 28, 43, 2,
+    222, 106, 13, 28, 43, 2, 220, 90, 13, 28, 43, 2, 215, 241, 13, 28, 43, 2,
+    213, 22, 13, 28, 43, 2, 193, 196, 13, 28, 43, 2, 211, 214, 13, 28, 43, 2,
+    210, 51, 13, 28, 43, 2, 207, 153, 13, 28, 43, 2, 52, 203, 99, 13, 28, 43,
+    2, 203, 99, 13, 28, 43, 2, 200, 100, 13, 28, 43, 2, 197, 34, 13, 28, 43,
+    2, 210, 77, 13, 28, 43, 2, 242, 215, 13, 28, 43, 2, 209, 62, 13, 28, 43,
+    2, 211, 216, 13, 28, 43, 210, 222, 236, 244, 13, 28, 43, 234, 33, 109,
+    13, 28, 43, 199, 207, 109, 13, 28, 43, 222, 107, 109, 13, 28, 43, 210,
+    78, 109, 13, 28, 43, 207, 154, 109, 13, 28, 43, 210, 52, 109, 13, 49, 28,
+    6, 250, 252, 13, 49, 28, 6, 248, 63, 13, 49, 28, 6, 231, 204, 13, 49, 28,
+    6, 237, 76, 13, 49, 28, 6, 234, 32, 13, 49, 28, 6, 192, 75, 13, 49, 28,
+    6, 233, 240, 13, 49, 28, 6, 199, 206, 13, 49, 28, 6, 223, 111, 13, 49,
+    28, 6, 222, 106, 13, 49, 28, 6, 220, 90, 13, 49, 28, 6, 215, 241, 13, 49,
+    28, 6, 213, 22, 13, 49, 28, 6, 193, 196, 13, 49, 28, 6, 211, 214, 13, 49,
+    28, 6, 210, 51, 13, 49, 28, 6, 207, 153, 13, 49, 28, 6, 199, 207, 109,
+    13, 49, 28, 6, 203, 99, 13, 49, 28, 6, 200, 100, 13, 49, 28, 6, 197, 34,
+    13, 49, 28, 6, 210, 77, 13, 49, 28, 6, 242, 215, 13, 49, 28, 6, 209, 62,
+    13, 49, 28, 6, 211, 216, 13, 49, 28, 215, 79, 13, 49, 28, 2, 250, 252,
+    13, 49, 28, 2, 248, 63, 13, 49, 28, 2, 231, 204, 13, 49, 28, 2, 237, 76,
+    13, 49, 28, 2, 234, 32, 13, 49, 28, 2, 192, 75, 13, 49, 28, 2, 233, 240,
+    13, 49, 28, 2, 199, 206, 13, 49, 28, 2, 223, 111, 13, 49, 28, 2, 222,
+    106, 13, 49, 28, 2, 220, 90, 13, 49, 28, 2, 215, 241, 13, 49, 28, 2, 213,
+    22, 13, 49, 28, 2, 193, 196, 13, 49, 28, 2, 211, 214, 13, 49, 28, 2, 210,
+    51, 13, 49, 28, 2, 207, 153, 13, 49, 28, 2, 52, 203, 99, 13, 49, 28, 2,
+    203, 99, 13, 49, 28, 2, 200, 100, 13, 49, 28, 2, 197, 34, 13, 49, 28, 2,
+    210, 77, 13, 49, 28, 2, 242, 215, 13, 49, 28, 2, 209, 62, 13, 49, 28, 2,
+    211, 216, 13, 49, 28, 210, 222, 236, 244, 13, 49, 28, 234, 33, 109, 13,
+    49, 28, 199, 207, 109, 13, 49, 28, 222, 107, 109, 13, 49, 28, 210, 78,
+    109, 13, 49, 28, 207, 154, 109, 13, 49, 28, 210, 52, 109, 13, 49, 28, 43,
+    6, 250, 252, 13, 49, 28, 43, 6, 248, 63, 13, 49, 28, 43, 6, 231, 204, 13,
+    49, 28, 43, 6, 237, 76, 13, 49, 28, 43, 6, 234, 32, 13, 49, 28, 43, 6,
+    192, 75, 13, 49, 28, 43, 6, 233, 240, 13, 49, 28, 43, 6, 199, 206, 13,
+    49, 28, 43, 6, 223, 111, 13, 49, 28, 43, 6, 222, 106, 13, 49, 28, 43, 6,
+    220, 90, 13, 49, 28, 43, 6, 215, 241, 13, 49, 28, 43, 6, 213, 22, 13, 49,
+    28, 43, 6, 193, 196, 13, 49, 28, 43, 6, 211, 214, 13, 49, 28, 43, 6, 210,
+    51, 13, 49, 28, 43, 6, 207, 153, 13, 49, 28, 43, 6, 199, 207, 109, 13,
+    49, 28, 43, 6, 203, 99, 13, 49, 28, 43, 6, 200, 100, 13, 49, 28, 43, 6,
+    197, 34, 13, 49, 28, 43, 6, 210, 77, 13, 49, 28, 43, 6, 242, 215, 13, 49,
+    28, 43, 6, 209, 62, 13, 49, 28, 43, 6, 211, 216, 13, 49, 28, 43, 215, 79,
+    13, 49, 28, 43, 2, 250, 252, 13, 49, 28, 43, 2, 248, 63, 13, 49, 28, 43,
+    2, 231, 204, 13, 49, 28, 43, 2, 237, 76, 13, 49, 28, 43, 2, 234, 32, 13,
+    49, 28, 43, 2, 192, 75, 13, 49, 28, 43, 2, 233, 240, 13, 49, 28, 43, 2,
+    199, 206, 13, 49, 28, 43, 2, 223, 111, 13, 49, 28, 43, 2, 222, 106, 13,
+    49, 28, 43, 2, 220, 90, 13, 49, 28, 43, 2, 215, 241, 13, 49, 28, 43, 2,
+    213, 22, 13, 49, 28, 43, 2, 193, 196, 13, 49, 28, 43, 2, 211, 214, 13,
+    49, 28, 43, 2, 210, 51, 13, 49, 28, 43, 2, 207, 153, 13, 49, 28, 43, 2,
+    52, 203, 99, 13, 49, 28, 43, 2, 203, 99, 13, 49, 28, 43, 2, 200, 100, 13,
+    49, 28, 43, 2, 197, 34, 13, 49, 28, 43, 2, 210, 77, 13, 49, 28, 43, 2,
+    242, 215, 13, 49, 28, 43, 2, 209, 62, 13, 49, 28, 43, 2, 211, 216, 13,
+    49, 28, 43, 210, 222, 236, 244, 13, 49, 28, 43, 234, 33, 109, 13, 49, 28,
+    43, 199, 207, 109, 13, 49, 28, 43, 222, 107, 109, 13, 49, 28, 43, 210,
+    78, 109, 13, 49, 28, 43, 207, 154, 109, 13, 49, 28, 43, 210, 52, 109, 13,
+    28, 6, 236, 238, 13, 28, 2, 236, 238, 13, 28, 17, 192, 76, 13, 28, 17,
+    101, 13, 28, 17, 104, 13, 28, 17, 133, 13, 28, 17, 134, 13, 28, 17, 151,
+    13, 28, 17, 170, 13, 28, 17, 179, 13, 28, 17, 174, 13, 28, 17, 182, 13,
+    235, 102, 17, 192, 76, 13, 235, 102, 17, 101, 13, 235, 102, 17, 104, 13,
+    235, 102, 17, 133, 13, 235, 102, 17, 134, 13, 235, 102, 17, 151, 13, 235,
+    102, 17, 170, 13, 235, 102, 17, 179, 13, 235, 102, 17, 174, 13, 235, 102,
+    17, 182, 13, 49, 17, 192, 76, 13, 49, 17, 101, 13, 49, 17, 104, 13, 49,
+    17, 133, 13, 49, 17, 134, 13, 49, 17, 151, 13, 49, 17, 170, 13, 49, 17,
+    179, 13, 49, 17, 174, 13, 49, 17, 182, 13, 49, 28, 17, 192, 76, 13, 49,
+    28, 17, 101, 13, 49, 28, 17, 104, 13, 49, 28, 17, 133, 13, 49, 28, 17,
+    134, 13, 49, 28, 17, 151, 13, 49, 28, 17, 170, 13, 49, 28, 17, 179, 13,
+    49, 28, 17, 174, 13, 49, 28, 17, 182, 13, 216, 41, 17, 192, 76, 13, 216,
+    41, 17, 101, 13, 216, 41, 17, 104, 13, 216, 41, 17, 133, 13, 216, 41, 17,
+    134, 13, 216, 41, 17, 151, 13, 216, 41, 17, 170, 13, 216, 41, 17, 179,
+    13, 216, 41, 17, 174, 13, 216, 41, 17, 182, 23, 146, 223, 176, 23, 230,
+    59, 223, 176, 23, 230, 55, 223, 176, 23, 230, 44, 223, 176, 23, 230, 48,
+    223, 176, 23, 230, 61, 223, 176, 23, 146, 140, 248, 74, 23, 230, 59, 140,
+    248, 74, 23, 146, 171, 197, 69, 140, 248, 74, 23, 146, 140, 208, 39, 221,
+    116, 23, 146, 140, 238, 144, 23, 146, 140, 229, 144, 23, 146, 140, 229,
+    145, 219, 52, 23, 230, 59, 140, 229, 146, 23, 146, 140, 216, 160, 23,
+    230, 59, 140, 216, 160, 23, 146, 140, 85, 248, 74, 23, 146, 140, 85, 208,
+    39, 221, 115, 23, 146, 140, 85, 229, 144, 23, 146, 140, 130, 85, 229,
+    144, 23, 146, 140, 229, 145, 85, 197, 41, 23, 146, 140, 85, 239, 10, 23,
+    146, 140, 85, 239, 11, 140, 248, 74, 23, 146, 140, 85, 239, 11, 85, 248,
+    74, 23, 146, 140, 85, 239, 11, 238, 144, 23, 146, 140, 85, 239, 11, 229,
+    144, 23, 146, 140, 85, 238, 179, 23, 230, 59, 140, 85, 238, 179, 23, 146,
+    85, 248, 75, 136, 223, 176, 23, 146, 140, 248, 75, 136, 216, 160, 23,
+    146, 140, 85, 199, 147, 23, 230, 59, 140, 85, 199, 147, 23, 146, 140, 85,
+    201, 230, 171, 248, 74, 23, 146, 140, 85, 248, 75, 171, 201, 229, 23,
+    146, 140, 85, 171, 248, 74, 23, 146, 140, 85, 229, 145, 202, 115, 171,
+    203, 110, 23, 146, 140, 130, 85, 229, 145, 171, 203, 110, 23, 146, 140,
+    130, 85, 229, 145, 171, 239, 10, 23, 146, 140, 229, 145, 85, 130, 171,
+    203, 110, 23, 146, 140, 85, 130, 202, 115, 171, 232, 123, 23, 146, 140,
+    85, 171, 238, 144, 23, 146, 140, 85, 171, 242, 129, 23, 146, 140, 85,
+    171, 229, 13, 23, 146, 140, 85, 171, 229, 144, 23, 146, 171, 248, 61,
+    140, 85, 201, 229, 23, 146, 140, 85, 239, 11, 171, 203, 110, 23, 146,
+    140, 85, 239, 11, 171, 203, 111, 239, 10, 23, 146, 140, 85, 239, 11, 171,
+    203, 111, 248, 74, 23, 146, 85, 171, 229, 14, 140, 197, 41, 23, 146, 140,
+    171, 229, 14, 85, 197, 41, 23, 146, 140, 85, 239, 11, 229, 145, 171, 203,
+    110, 23, 146, 140, 85, 238, 180, 171, 203, 110, 23, 146, 140, 85, 239,
+    11, 171, 232, 123, 23, 146, 140, 85, 239, 11, 238, 145, 171, 232, 123,
+    23, 146, 85, 171, 238, 145, 140, 197, 41, 23, 146, 140, 171, 238, 145,
+    85, 197, 41, 23, 146, 85, 171, 47, 140, 197, 41, 23, 146, 85, 171, 47,
+    140, 229, 144, 23, 146, 140, 171, 250, 206, 211, 126, 85, 197, 41, 23,
+    146, 140, 171, 250, 206, 223, 191, 85, 197, 41, 23, 146, 140, 171, 47,
+    85, 197, 41, 23, 146, 140, 85, 171, 239, 11, 229, 144, 23, 146, 140, 85,
+    171, 250, 206, 211, 125, 23, 146, 140, 85, 171, 250, 205, 23, 146, 85,
+    171, 250, 206, 211, 126, 140, 197, 41, 23, 146, 85, 171, 250, 206, 211,
+    126, 140, 238, 179, 23, 146, 85, 171, 250, 206, 140, 197, 41, 23, 146,
+    140, 171, 229, 14, 85, 229, 144, 23, 230, 50, 232, 119, 232, 235, 23,
+    230, 50, 232, 119, 232, 236, 248, 74, 23, 230, 50, 232, 119, 232, 236,
+    229, 144, 23, 230, 50, 232, 119, 232, 236, 239, 10, 23, 230, 50, 232,
+    119, 232, 236, 239, 11, 202, 124, 23, 230, 57, 232, 119, 232, 236, 239,
+    10, 23, 146, 232, 119, 232, 236, 239, 11, 248, 74, 23, 230, 48, 232, 119,
+    232, 236, 239, 10, 23, 230, 50, 232, 214, 232, 236, 202, 114, 23, 230,
+    50, 229, 223, 232, 214, 232, 236, 202, 114, 23, 230, 50, 232, 214, 232,
+    236, 202, 115, 232, 119, 248, 74, 23, 230, 50, 229, 223, 232, 214, 232,
+    236, 202, 115, 232, 119, 248, 74, 23, 230, 50, 232, 214, 232, 236, 202,
+    115, 248, 74, 23, 230, 50, 229, 223, 232, 214, 232, 236, 202, 115, 248,
+    74, 23, 230, 50, 232, 214, 232, 236, 202, 115, 171, 232, 123, 23, 230,
+    55, 232, 214, 232, 236, 202, 114, 23, 230, 55, 232, 214, 232, 236, 202,
+    115, 211, 183, 23, 230, 48, 232, 214, 232, 236, 202, 115, 211, 183, 23,
+    230, 44, 232, 214, 232, 236, 202, 114, 23, 230, 50, 232, 214, 232, 236,
+    202, 115, 229, 144, 23, 230, 50, 232, 214, 232, 236, 202, 115, 229, 145,
+    171, 203, 110, 23, 230, 50, 232, 214, 232, 236, 202, 115, 229, 145, 213,
+    143, 199, 147, 23, 230, 49, 23, 230, 50, 248, 61, 211, 41, 233, 83, 23,
+    230, 50, 229, 222, 23, 230, 50, 171, 203, 110, 23, 230, 50, 229, 223,
+    171, 203, 110, 23, 230, 50, 171, 248, 74, 23, 230, 50, 171, 232, 123, 23,
+    230, 50, 202, 125, 140, 171, 203, 110, 23, 230, 50, 202, 125, 246, 137,
+    23, 230, 50, 202, 125, 246, 138, 171, 203, 110, 23, 230, 50, 202, 125,
+    246, 138, 171, 203, 111, 248, 74, 23, 230, 50, 202, 125, 219, 146, 23,
+    230, 56, 23, 230, 57, 171, 203, 110, 23, 230, 57, 213, 143, 199, 147, 23,
+    230, 57, 171, 232, 123, 23, 230, 46, 238, 140, 23, 230, 45, 23, 230, 55,
+    211, 183, 23, 230, 54, 23, 230, 55, 211, 184, 171, 203, 110, 23, 230, 55,
+    171, 203, 110, 23, 230, 55, 211, 184, 213, 143, 199, 147, 23, 230, 55,
+    213, 143, 199, 147, 23, 230, 55, 211, 184, 171, 232, 123, 23, 230, 55,
+    171, 232, 123, 23, 230, 53, 211, 183, 23, 230, 52, 23, 230, 58, 23, 230,
+    43, 23, 230, 44, 171, 203, 110, 23, 230, 44, 213, 143, 199, 147, 23, 230,
+    44, 171, 232, 123, 23, 230, 48, 211, 183, 23, 230, 48, 211, 184, 171,
+    232, 123, 23, 230, 47, 23, 230, 48, 202, 236, 23, 230, 48, 211, 184, 171,
+    203, 110, 23, 230, 48, 171, 203, 110, 23, 230, 48, 211, 184, 213, 143,
+    199, 147, 23, 230, 48, 213, 143, 199, 147, 23, 230, 48, 171, 203, 111,
+    198, 231, 223, 176, 23, 230, 48, 171, 248, 61, 85, 207, 81, 23, 230, 60,
+    23, 146, 140, 85, 207, 81, 23, 230, 59, 140, 85, 207, 81, 23, 230, 48,
+    140, 85, 207, 81, 23, 230, 61, 140, 85, 207, 81, 23, 230, 48, 219, 146,
+    23, 146, 140, 85, 207, 82, 248, 74, 23, 146, 140, 85, 207, 82, 239, 10,
+    23, 230, 48, 140, 85, 207, 82, 239, 10, 23, 146, 219, 147, 235, 96, 23,
+    146, 219, 147, 142, 207, 76, 201, 229, 23, 146, 219, 147, 142, 207, 76,
+    238, 129, 23, 146, 219, 147, 142, 211, 136, 242, 129, 23, 146, 219, 147,
+    197, 41, 23, 146, 171, 197, 69, 219, 147, 197, 41, 23, 230, 59, 219, 147,
+    197, 41, 23, 230, 44, 219, 147, 197, 41, 23, 230, 61, 219, 147, 197, 41,
+    23, 146, 219, 147, 208, 39, 221, 116, 23, 146, 219, 147, 248, 74, 23,
+    146, 219, 147, 198, 232, 199, 147, 23, 146, 219, 147, 199, 147, 23, 230,
+    48, 219, 147, 199, 147, 23, 146, 219, 147, 140, 199, 147, 23, 230, 48,
+    219, 147, 140, 199, 147, 23, 230, 61, 219, 147, 140, 171, 140, 171, 211,
+    125, 23, 230, 61, 219, 147, 140, 171, 140, 199, 147, 23, 146, 219, 147,
+    223, 176, 23, 230, 59, 219, 147, 223, 176, 23, 230, 48, 219, 147, 223,
+    176, 23, 230, 61, 219, 147, 223, 176, 23, 146, 140, 85, 219, 146, 23,
+    230, 59, 140, 85, 219, 146, 23, 230, 48, 140, 85, 219, 146, 23, 230, 48,
+    207, 81, 23, 230, 61, 140, 85, 219, 146, 23, 146, 140, 85, 238, 184, 219,
+    146, 23, 230, 59, 140, 85, 238, 184, 219, 146, 23, 146, 207, 82, 235, 96,
+    23, 230, 48, 207, 82, 142, 140, 171, 229, 15, 216, 160, 23, 230, 61, 207,
+    82, 142, 85, 171, 140, 238, 183, 23, 146, 207, 82, 197, 41, 23, 146, 207,
+    82, 208, 39, 221, 116, 23, 146, 207, 82, 219, 146, 23, 230, 59, 207, 82,
+    219, 146, 23, 230, 44, 207, 82, 219, 146, 23, 230, 61, 207, 82, 219, 146,
+    23, 146, 207, 82, 216, 160, 23, 146, 207, 82, 85, 239, 10, 23, 146, 207,
+    82, 85, 208, 39, 221, 115, 23, 146, 207, 82, 223, 176, 23, 146, 207, 82,
+    199, 147, 23, 230, 46, 207, 82, 199, 147, 23, 146, 140, 207, 82, 219,
+    146, 23, 230, 59, 140, 207, 82, 219, 146, 23, 230, 53, 140, 207, 82, 219,
+    147, 211, 211, 23, 230, 46, 140, 207, 82, 219, 147, 211, 125, 23, 230,
+    46, 140, 207, 82, 219, 147, 223, 190, 23, 230, 46, 140, 207, 82, 219,
+    147, 197, 68, 23, 230, 55, 140, 207, 82, 219, 146, 23, 230, 48, 140, 207,
+    82, 219, 146, 23, 230, 61, 140, 207, 82, 219, 147, 211, 125, 23, 230, 61,
+    140, 207, 82, 219, 146, 23, 146, 85, 235, 96, 23, 230, 48, 216, 160, 23,
+    146, 85, 197, 41, 23, 230, 59, 85, 197, 41, 23, 146, 85, 208, 39, 221,
+    116, 23, 146, 85, 130, 171, 203, 110, 23, 230, 46, 85, 199, 147, 23, 146,
+    85, 171, 219, 146, 23, 146, 85, 219, 146, 23, 146, 85, 207, 82, 219, 146,
+    23, 230, 59, 85, 207, 82, 219, 146, 23, 230, 53, 85, 207, 82, 219, 147,
+    211, 211, 23, 230, 55, 85, 207, 82, 219, 146, 23, 230, 48, 85, 207, 82,
+    219, 146, 23, 230, 61, 85, 207, 82, 219, 147, 211, 125, 23, 230, 61, 85,
+    207, 82, 219, 147, 223, 190, 23, 230, 61, 85, 207, 82, 219, 146, 23, 230,
+    59, 85, 207, 82, 219, 147, 248, 74, 23, 230, 57, 85, 207, 82, 219, 147,
+    239, 10, 23, 230, 57, 85, 207, 82, 219, 147, 239, 11, 203, 110, 23, 230,
+    46, 85, 207, 82, 219, 147, 239, 11, 211, 125, 23, 230, 46, 85, 207, 82,
+    219, 147, 239, 11, 223, 190, 23, 230, 46, 85, 207, 82, 219, 147, 239, 10,
+    23, 230, 48, 140, 229, 144, 23, 146, 140, 171, 203, 110, 23, 230, 48,
+    140, 171, 203, 110, 23, 146, 140, 171, 203, 111, 171, 237, 10, 23, 146,
+    140, 171, 203, 111, 171, 239, 10, 23, 146, 140, 171, 203, 111, 171, 248,
+    74, 23, 146, 140, 171, 203, 111, 140, 248, 74, 23, 146, 140, 171, 203,
+    111, 247, 191, 248, 74, 23, 146, 140, 171, 203, 111, 140, 229, 146, 23,
+    146, 140, 171, 232, 124, 140, 201, 229, 23, 146, 140, 171, 232, 124, 140,
+    248, 74, 23, 146, 140, 171, 128, 23, 146, 140, 171, 238, 140, 23, 146,
+    140, 171, 238, 132, 171, 223, 145, 23, 230, 57, 140, 171, 238, 132, 171,
+    223, 145, 23, 146, 140, 171, 238, 132, 171, 197, 68, 23, 146, 140, 171,
+    242, 130, 23, 230, 55, 140, 199, 147, 23, 230, 55, 140, 171, 211, 183,
+    23, 230, 48, 140, 171, 211, 183, 23, 230, 48, 140, 171, 220, 72, 23, 230,
+    48, 140, 199, 147, 23, 230, 48, 140, 171, 202, 236, 23, 230, 61, 140,
+    171, 211, 125, 23, 230, 61, 140, 171, 223, 190, 23, 230, 61, 140, 199,
+    147, 23, 146, 199, 147, 23, 146, 171, 229, 222, 23, 146, 171, 203, 111,
+    237, 10, 23, 146, 171, 203, 111, 239, 10, 23, 146, 171, 203, 111, 248,
+    74, 23, 146, 171, 232, 123, 23, 146, 171, 248, 61, 140, 216, 160, 23,
+    146, 171, 248, 61, 85, 207, 81, 23, 146, 171, 248, 61, 207, 82, 219, 146,
+    23, 146, 171, 197, 69, 103, 232, 235, 23, 146, 171, 136, 103, 232, 235,
+    23, 146, 171, 197, 69, 112, 232, 235, 23, 146, 171, 197, 69, 232, 119,
+    232, 235, 23, 146, 171, 136, 232, 119, 208, 39, 221, 115, 23, 230, 51,
+    23, 146, 229, 222, 23, 198, 233, 203, 73, 23, 198, 233, 215, 215, 23,
+    198, 233, 248, 60, 23, 230, 215, 203, 73, 23, 230, 215, 215, 215, 23,
+    230, 215, 248, 60, 23, 201, 213, 203, 73, 23, 201, 213, 215, 215, 23,
+    201, 213, 248, 60, 23, 247, 132, 203, 73, 23, 247, 132, 215, 215, 23,
+    247, 132, 248, 60, 23, 206, 210, 203, 73, 23, 206, 210, 215, 215, 23,
+    206, 210, 248, 60, 23, 201, 96, 201, 5, 23, 201, 96, 248, 60, 23, 202,
+    102, 220, 73, 203, 73, 23, 202, 102, 2, 203, 73, 23, 202, 102, 220, 73,
+    215, 215, 23, 202, 102, 2, 215, 215, 23, 202, 102, 204, 161, 23, 232,
+    186, 220, 73, 203, 73, 23, 232, 186, 2, 203, 73, 23, 232, 186, 220, 73,
+    215, 215, 23, 232, 186, 2, 215, 215, 23, 232, 186, 204, 161, 23, 202,
+    102, 232, 186, 250, 246, 23, 215, 253, 130, 142, 220, 72, 23, 215, 253,
+    130, 142, 202, 236, 23, 215, 253, 130, 204, 161, 23, 215, 253, 142, 204,
+    161, 23, 215, 253, 130, 142, 250, 247, 220, 72, 23, 215, 253, 130, 142,
+    250, 247, 202, 236, 23, 215, 253, 203, 111, 115, 203, 111, 205, 238, 23,
+    215, 252, 232, 241, 239, 0, 23, 215, 254, 232, 241, 239, 0, 23, 215, 252,
+    203, 74, 201, 230, 202, 236, 23, 215, 252, 203, 74, 201, 230, 217, 30,
+    23, 215, 252, 203, 74, 201, 230, 220, 72, 23, 215, 252, 203, 74, 201,
+    230, 220, 70, 23, 215, 252, 203, 74, 193, 248, 232, 189, 23, 215, 252,
+    55, 201, 229, 23, 215, 252, 55, 193, 248, 232, 189, 23, 215, 252, 55,
+    250, 246, 23, 215, 252, 55, 250, 247, 193, 248, 232, 189, 23, 215, 252,
+    238, 183, 23, 215, 252, 198, 170, 201, 230, 216, 0, 23, 215, 252, 198,
+    170, 193, 248, 232, 189, 23, 215, 252, 198, 170, 250, 246, 23, 215, 252,
+    198, 170, 250, 247, 193, 248, 232, 189, 23, 215, 252, 248, 79, 202, 236,
+    23, 215, 252, 248, 79, 217, 30, 23, 215, 252, 248, 79, 220, 72, 23, 215,
+    252, 238, 224, 202, 236, 23, 215, 252, 238, 224, 217, 30, 23, 215, 252,
+    238, 224, 220, 72, 23, 215, 252, 238, 224, 207, 14, 23, 215, 252, 242,
+    244, 202, 236, 23, 215, 252, 242, 244, 217, 30, 23, 215, 252, 242, 244,
+    220, 72, 23, 215, 252, 105, 202, 236, 23, 215, 252, 105, 217, 30, 23,
+    215, 252, 105, 220, 72, 23, 215, 252, 192, 21, 202, 236, 23, 215, 252,
+    192, 21, 217, 30, 23, 215, 252, 192, 21, 220, 72, 23, 215, 252, 210, 176,
+    202, 236, 23, 215, 252, 210, 176, 217, 30, 23, 215, 252, 210, 176, 220,
+    72, 23, 198, 200, 207, 12, 203, 73, 23, 198, 200, 207, 12, 235, 106, 23,
+    198, 200, 207, 12, 250, 246, 23, 198, 200, 207, 13, 203, 73, 23, 198,
+    200, 207, 13, 235, 106, 23, 198, 200, 207, 13, 250, 246, 23, 198, 200,
+    204, 43, 23, 198, 200, 250, 93, 202, 133, 203, 73, 23, 198, 200, 250, 93,
+    202, 133, 235, 106, 23, 198, 200, 250, 93, 202, 133, 198, 169, 23, 215,
+    255, 249, 240, 202, 236, 23, 215, 255, 249, 240, 217, 30, 23, 215, 255,
+    249, 240, 220, 72, 23, 215, 255, 249, 240, 220, 70, 23, 215, 255, 198,
+    227, 202, 236, 23, 215, 255, 198, 227, 217, 30, 23, 215, 255, 198, 227,
+    220, 72, 23, 215, 255, 198, 227, 220, 70, 23, 215, 255, 248, 61, 249,
+    240, 202, 236, 23, 215, 255, 248, 61, 249, 240, 217, 30, 23, 215, 255,
+    248, 61, 249, 240, 220, 72, 23, 215, 255, 248, 61, 249, 240, 220, 70, 23,
+    215, 255, 248, 61, 198, 227, 202, 236, 23, 215, 255, 248, 61, 198, 227,
+    217, 30, 23, 215, 255, 248, 61, 198, 227, 220, 72, 23, 215, 255, 248, 61,
+    198, 227, 220, 70, 23, 215, 254, 203, 74, 201, 230, 202, 236, 23, 215,
+    254, 203, 74, 201, 230, 217, 30, 23, 215, 254, 203, 74, 201, 230, 220,
+    72, 23, 215, 254, 203, 74, 201, 230, 220, 70, 23, 215, 254, 203, 74, 193,
+    248, 232, 189, 23, 215, 254, 55, 201, 229, 23, 215, 254, 55, 193, 248,
+    232, 189, 23, 215, 254, 55, 250, 246, 23, 215, 254, 55, 250, 247, 193,
+    248, 232, 189, 23, 215, 254, 238, 183, 23, 215, 254, 198, 170, 201, 230,
+    216, 0, 23, 215, 254, 198, 170, 193, 248, 232, 189, 23, 215, 254, 198,
+    170, 250, 247, 216, 0, 23, 215, 254, 198, 170, 250, 247, 193, 248, 232,
+    189, 23, 215, 254, 248, 78, 23, 215, 254, 238, 224, 202, 236, 23, 215,
+    254, 238, 224, 217, 30, 23, 215, 254, 238, 224, 220, 72, 23, 215, 254,
+    242, 243, 23, 215, 254, 105, 202, 236, 23, 215, 254, 105, 217, 30, 23,
+    215, 254, 105, 220, 72, 23, 215, 254, 192, 21, 202, 236, 23, 215, 254,
+    192, 21, 217, 30, 23, 215, 254, 192, 21, 220, 72, 23, 215, 254, 210, 176,
+    202, 236, 23, 215, 254, 210, 176, 217, 30, 23, 215, 254, 210, 176, 220,
+    72, 23, 198, 201, 207, 13, 203, 73, 23, 198, 201, 207, 13, 235, 106, 23,
+    198, 201, 207, 13, 250, 246, 23, 198, 201, 207, 12, 203, 73, 23, 198,
+    201, 207, 12, 235, 106, 23, 198, 201, 207, 12, 250, 246, 23, 198, 201,
+    204, 43, 23, 215, 252, 238, 132, 208, 168, 202, 236, 23, 215, 252, 238,
+    132, 208, 168, 217, 30, 23, 215, 252, 238, 132, 208, 168, 220, 72, 23,
+    215, 252, 238, 132, 208, 168, 220, 70, 23, 215, 252, 238, 132, 230, 75,
+    202, 236, 23, 215, 252, 238, 132, 230, 75, 217, 30, 23, 215, 252, 238,
+    132, 230, 75, 220, 72, 23, 215, 252, 238, 132, 230, 75, 220, 70, 23, 215,
+    252, 238, 132, 199, 153, 242, 131, 202, 236, 23, 215, 252, 238, 132, 199,
+    153, 242, 131, 217, 30, 23, 215, 252, 228, 165, 202, 236, 23, 215, 252,
+    228, 165, 217, 30, 23, 215, 252, 228, 165, 220, 72, 23, 215, 252, 219,
+    70, 202, 236, 23, 215, 252, 219, 70, 217, 30, 23, 215, 252, 219, 70, 220,
+    72, 23, 215, 252, 219, 70, 2, 235, 106, 23, 215, 252, 194, 125, 238, 132,
+    55, 202, 236, 23, 215, 252, 194, 125, 238, 132, 55, 217, 30, 23, 215,
+    252, 194, 125, 238, 132, 55, 220, 72, 23, 215, 252, 194, 125, 238, 132,
+    198, 170, 202, 236, 23, 215, 252, 194, 125, 238, 132, 198, 170, 217, 30,
+    23, 215, 252, 194, 125, 238, 132, 198, 170, 220, 72, 23, 215, 252, 238,
+    132, 199, 216, 201, 229, 23, 215, 252, 238, 130, 238, 184, 202, 236, 23,
+    215, 252, 238, 130, 238, 184, 217, 30, 23, 207, 12, 203, 73, 23, 207, 12,
+    235, 106, 23, 207, 12, 250, 248, 23, 215, 252, 204, 43, 23, 215, 252,
+    238, 132, 229, 136, 232, 88, 194, 151, 23, 215, 252, 228, 165, 229, 136,
+    232, 88, 194, 151, 23, 215, 252, 219, 70, 229, 136, 232, 88, 194, 151,
+    23, 215, 252, 194, 125, 229, 136, 232, 88, 194, 151, 23, 207, 12, 203,
+    74, 229, 136, 232, 88, 194, 151, 23, 207, 12, 55, 229, 136, 232, 88, 194,
+    151, 23, 207, 12, 250, 247, 229, 136, 232, 88, 194, 151, 23, 215, 252,
+    238, 132, 229, 136, 242, 224, 23, 215, 252, 228, 165, 229, 136, 242, 224,
+    23, 215, 252, 219, 70, 229, 136, 242, 224, 23, 215, 252, 194, 125, 229,
+    136, 242, 224, 23, 207, 12, 203, 74, 229, 136, 242, 224, 23, 207, 12, 55,
+    229, 136, 242, 224, 23, 207, 12, 250, 247, 229, 136, 242, 224, 23, 215,
+    252, 194, 125, 237, 11, 210, 203, 202, 236, 23, 215, 252, 194, 125, 237,
+    11, 210, 203, 217, 30, 23, 215, 252, 194, 125, 237, 11, 210, 203, 220,
+    72, 23, 215, 254, 238, 132, 229, 136, 246, 147, 202, 236, 23, 215, 254,
+    238, 132, 229, 136, 246, 147, 220, 72, 23, 215, 254, 228, 165, 229, 136,
+    246, 147, 2, 235, 106, 23, 215, 254, 228, 165, 229, 136, 246, 147, 220,
+    73, 235, 106, 23, 215, 254, 228, 165, 229, 136, 246, 147, 2, 198, 169,
+    23, 215, 254, 228, 165, 229, 136, 246, 147, 220, 73, 198, 169, 23, 215,
+    254, 219, 70, 229, 136, 246, 147, 2, 203, 73, 23, 215, 254, 219, 70, 229,
+    136, 246, 147, 220, 73, 203, 73, 23, 215, 254, 219, 70, 229, 136, 246,
+    147, 2, 235, 106, 23, 215, 254, 219, 70, 229, 136, 246, 147, 220, 73,
+    235, 106, 23, 215, 254, 194, 125, 229, 136, 246, 147, 202, 236, 23, 215,
+    254, 194, 125, 229, 136, 246, 147, 220, 72, 23, 207, 13, 203, 74, 229,
+    136, 246, 146, 23, 207, 13, 55, 229, 136, 246, 146, 23, 207, 13, 250,
+    247, 229, 136, 246, 146, 23, 215, 254, 238, 132, 229, 136, 232, 183, 202,
+    236, 23, 215, 254, 238, 132, 229, 136, 232, 183, 220, 72, 23, 215, 254,
+    228, 165, 229, 136, 232, 183, 2, 235, 106, 23, 215, 254, 228, 165, 229,
+    136, 232, 183, 220, 73, 235, 106, 23, 215, 254, 228, 165, 229, 136, 232,
+    183, 198, 170, 2, 198, 169, 23, 215, 254, 228, 165, 229, 136, 232, 183,
+    198, 170, 220, 73, 198, 169, 23, 215, 254, 219, 70, 229, 136, 232, 183,
+    2, 203, 73, 23, 215, 254, 219, 70, 229, 136, 232, 183, 220, 73, 203, 73,
+    23, 215, 254, 219, 70, 229, 136, 232, 183, 2, 235, 106, 23, 215, 254,
+    219, 70, 229, 136, 232, 183, 220, 73, 235, 106, 23, 215, 254, 194, 125,
+    229, 136, 232, 183, 202, 236, 23, 215, 254, 194, 125, 229, 136, 232, 183,
+    220, 72, 23, 207, 13, 203, 74, 229, 136, 232, 182, 23, 207, 13, 55, 229,
+    136, 232, 182, 23, 207, 13, 250, 247, 229, 136, 232, 182, 23, 215, 254,
+    238, 132, 202, 236, 23, 215, 254, 238, 132, 217, 30, 23, 215, 254, 238,
+    132, 220, 72, 23, 215, 254, 238, 132, 220, 70, 23, 215, 254, 238, 132,
+    242, 42, 23, 215, 254, 228, 165, 202, 236, 23, 215, 254, 219, 70, 202,
+    236, 23, 215, 254, 194, 125, 202, 224, 23, 215, 254, 194, 125, 202, 236,
+    23, 215, 254, 194, 125, 220, 72, 23, 207, 13, 203, 73, 23, 207, 13, 235,
+    106, 23, 207, 13, 250, 246, 23, 215, 254, 204, 44, 210, 235, 23, 215,
+    252, 250, 93, 242, 131, 2, 203, 73, 23, 215, 252, 250, 93, 242, 131, 217,
+    31, 203, 73, 23, 215, 252, 250, 93, 242, 131, 2, 235, 106, 23, 215, 252,
+    250, 93, 242, 131, 217, 31, 235, 106, 23, 215, 254, 250, 93, 242, 131,
+    229, 136, 194, 152, 2, 203, 73, 23, 215, 254, 250, 93, 242, 131, 229,
+    136, 194, 152, 217, 31, 203, 73, 23, 215, 254, 250, 93, 242, 131, 229,
+    136, 194, 152, 220, 73, 203, 73, 23, 215, 254, 250, 93, 242, 131, 229,
+    136, 194, 152, 2, 235, 106, 23, 215, 254, 250, 93, 242, 131, 229, 136,
+    194, 152, 217, 31, 235, 106, 23, 215, 254, 250, 93, 242, 131, 229, 136,
+    194, 152, 220, 73, 235, 106, 23, 215, 252, 193, 248, 242, 131, 232, 88,
+    203, 73, 23, 215, 252, 193, 248, 242, 131, 232, 88, 235, 106, 23, 215,
+    254, 193, 248, 242, 131, 229, 136, 194, 152, 203, 73, 23, 215, 254, 193,
+    248, 242, 131, 229, 136, 194, 152, 235, 106, 23, 215, 252, 232, 241, 242,
+    128, 203, 73, 23, 215, 252, 232, 241, 242, 128, 235, 106, 23, 215, 254,
+    232, 241, 242, 128, 229, 136, 194, 152, 203, 73, 23, 215, 254, 232, 241,
+    242, 128, 229, 136, 194, 152, 235, 106, 23, 235, 22, 250, 78, 202, 236,
+    23, 235, 22, 250, 78, 220, 72, 23, 235, 22, 233, 61, 23, 235, 22, 202,
+    239, 23, 235, 22, 200, 23, 23, 235, 22, 207, 213, 23, 235, 22, 203, 80,
+    23, 235, 22, 203, 81, 250, 246, 23, 235, 22, 233, 213, 211, 137, 199, 84,
+    23, 235, 22, 230, 225, 23, 229, 245, 23, 229, 246, 207, 86, 23, 229, 246,
+    215, 252, 201, 229, 23, 229, 246, 215, 252, 199, 87, 23, 229, 246, 215,
+    254, 201, 229, 23, 229, 246, 215, 252, 238, 131, 23, 229, 246, 215, 254,
+    238, 131, 23, 229, 246, 216, 1, 242, 130, 23, 233, 92, 236, 205, 209,
+    160, 213, 113, 232, 124, 199, 85, 23, 233, 92, 236, 205, 209, 160, 213,
+    113, 130, 211, 164, 235, 96, 23, 233, 92, 236, 205, 209, 160, 213, 113,
+    130, 211, 164, 142, 199, 85, 23, 233, 179, 201, 230, 197, 41, 23, 233,
+    179, 201, 230, 214, 178, 23, 233, 179, 201, 230, 235, 96, 23, 235, 80,
+    233, 179, 214, 179, 235, 96, 23, 235, 80, 233, 179, 142, 214, 178, 23,
+    235, 80, 233, 179, 130, 214, 178, 23, 235, 80, 233, 179, 214, 179, 197,
+    41, 23, 232, 141, 214, 178, 23, 232, 141, 239, 0, 23, 232, 141, 193, 251,
+    23, 233, 174, 211, 183, 23, 233, 174, 202, 101, 23, 233, 174, 242, 83,
+    23, 233, 182, 247, 239, 203, 73, 23, 233, 182, 247, 239, 215, 215, 23,
+    233, 174, 138, 211, 183, 23, 233, 174, 194, 64, 211, 183, 23, 233, 174,
+    138, 242, 83, 23, 233, 174, 194, 62, 216, 0, 23, 233, 182, 194, 45, 23,
+    233, 175, 197, 41, 23, 233, 175, 235, 96, 23, 233, 175, 232, 169, 23,
+    233, 177, 201, 229, 23, 233, 177, 201, 230, 235, 106, 23, 233, 177, 201,
+    230, 250, 246, 23, 233, 178, 201, 229, 23, 233, 178, 201, 230, 235, 106,
+    23, 233, 178, 201, 230, 250, 246, 23, 233, 177, 238, 129, 23, 233, 178,
+    238, 129, 23, 233, 177, 242, 125, 23, 242, 239, 209, 41, 23, 242, 239,
+    214, 178, 23, 242, 239, 201, 143, 23, 200, 24, 242, 239, 229, 155, 23,
+    200, 24, 242, 239, 216, 160, 23, 200, 24, 242, 239, 219, 52, 23, 234,
+    191, 23, 213, 113, 214, 178, 23, 213, 113, 239, 0, 23, 213, 113, 193,
+    249, 23, 213, 113, 194, 59, 23, 251, 53, 247, 225, 211, 125, 23, 251, 53,
+    201, 142, 223, 190, 23, 251, 53, 247, 227, 2, 207, 11, 23, 251, 53, 201,
+    144, 2, 207, 11, 23, 247, 152, 223, 162, 23, 247, 152, 233, 202, 23, 216,
+    5, 242, 84, 214, 178, 23, 216, 5, 242, 84, 232, 123, 23, 216, 5, 242, 84,
+    239, 0, 23, 216, 5, 202, 231, 23, 216, 5, 202, 232, 193, 251, 23, 216, 5,
+    202, 232, 211, 183, 23, 216, 5, 232, 84, 23, 216, 5, 232, 85, 193, 251,
+    23, 216, 5, 232, 85, 211, 183, 23, 216, 5, 211, 184, 242, 130, 23, 216,
+    5, 211, 184, 232, 123, 23, 216, 5, 211, 184, 193, 251, 23, 216, 5, 211,
+    184, 211, 118, 23, 216, 5, 211, 184, 211, 119, 193, 251, 23, 216, 5, 211,
+    184, 211, 119, 193, 77, 23, 216, 5, 211, 184, 207, 242, 23, 216, 5, 211,
+    184, 207, 243, 193, 251, 23, 216, 5, 211, 184, 207, 243, 193, 77, 23,
+    216, 5, 221, 160, 23, 216, 5, 221, 161, 232, 123, 23, 216, 5, 221, 161,
+    193, 251, 23, 216, 5, 200, 23, 23, 216, 5, 200, 24, 232, 123, 23, 216, 5,
+    200, 24, 201, 143, 23, 219, 160, 209, 103, 199, 26, 23, 219, 162, 106,
+    136, 197, 38, 23, 219, 162, 113, 136, 219, 47, 23, 216, 5, 238, 222, 23,
+    216, 5, 193, 250, 203, 73, 23, 216, 5, 193, 250, 235, 106, 23, 199, 1,
+    201, 249, 211, 126, 233, 63, 23, 199, 1, 219, 205, 219, 159, 23, 199, 1,
+    199, 74, 248, 61, 219, 159, 23, 199, 1, 199, 74, 198, 231, 223, 146, 216,
+    4, 23, 199, 1, 223, 146, 216, 5, 207, 213, 23, 199, 1, 215, 251, 251, 78,
+    242, 240, 23, 199, 1, 246, 138, 201, 249, 211, 125, 23, 199, 1, 246, 138,
+    223, 146, 216, 4, 23, 200, 52, 23, 200, 53, 216, 0, 23, 200, 53, 211,
+    212, 199, 0, 23, 200, 53, 211, 212, 199, 1, 216, 0, 23, 200, 53, 211,
+    212, 219, 159, 23, 200, 53, 211, 212, 219, 160, 216, 0, 23, 200, 53, 247,
+    255, 219, 159, 23, 215, 252, 223, 45, 23, 215, 254, 223, 45, 23, 214,
+    205, 23, 230, 86, 23, 233, 205, 23, 203, 177, 229, 143, 202, 134, 23,
+    203, 177, 229, 143, 209, 158, 23, 194, 150, 203, 177, 229, 143, 216, 3,
+    23, 232, 181, 203, 177, 229, 143, 216, 3, 23, 203, 177, 199, 86, 232, 89,
+    194, 156, 23, 198, 238, 201, 230, 201, 217, 23, 198, 238, 238, 130, 248,
+    78, 23, 198, 239, 197, 223, 23, 113, 247, 214, 199, 86, 232, 89, 229,
+    143, 222, 227, 23, 219, 187, 242, 43, 23, 219, 187, 220, 1, 23, 219, 187,
+    220, 0, 23, 219, 187, 219, 255, 23, 219, 187, 219, 254, 23, 219, 187,
+    219, 253, 23, 219, 187, 219, 252, 23, 219, 187, 219, 251, 23, 232, 240,
+    23, 219, 101, 202, 160, 23, 219, 102, 202, 160, 23, 219, 104, 229, 218,
+    23, 219, 104, 194, 60, 23, 219, 104, 237, 63, 23, 219, 104, 229, 246,
+    214, 205, 23, 219, 104, 198, 240, 23, 219, 104, 219, 186, 236, 237, 23,
+    242, 38, 23, 232, 71, 201, 238, 23, 204, 180, 23, 242, 47, 23, 210, 230,
+    23, 232, 250, 216, 67, 23, 232, 250, 216, 66, 23, 232, 250, 216, 65, 23,
+    232, 250, 216, 64, 23, 232, 250, 216, 63, 23, 207, 15, 216, 67, 23, 207,
+    15, 216, 66, 23, 207, 15, 216, 65, 23, 207, 15, 216, 64, 23, 207, 15,
+    216, 63, 23, 207, 15, 216, 62, 23, 207, 15, 216, 61, 23, 207, 15, 216,
+    60, 23, 207, 15, 216, 74, 23, 207, 15, 216, 73, 23, 207, 15, 216, 72, 23,
+    207, 15, 216, 71, 23, 207, 15, 216, 70, 23, 207, 15, 216, 69, 23, 207,
+    15, 216, 68, 38, 131, 1, 249, 227, 38, 131, 1, 247, 110, 38, 131, 1, 196,
+    121, 38, 131, 1, 231, 13, 38, 131, 1, 236, 141, 38, 131, 1, 193, 38, 38,
+    131, 1, 192, 55, 38, 131, 1, 192, 81, 38, 131, 1, 223, 69, 38, 131, 1,
+    88, 223, 69, 38, 131, 1, 70, 38, 131, 1, 236, 162, 38, 131, 1, 222, 127,
+    38, 131, 1, 219, 139, 38, 131, 1, 215, 155, 38, 131, 1, 215, 46, 38, 131,
+    1, 211, 196, 38, 131, 1, 209, 185, 38, 131, 1, 207, 72, 38, 131, 1, 202,
+    241, 38, 131, 1, 197, 251, 38, 131, 1, 197, 88, 38, 131, 1, 232, 92, 38,
+    131, 1, 229, 198, 38, 131, 1, 203, 167, 38, 131, 1, 198, 97, 38, 131, 1,
+    242, 174, 38, 131, 1, 204, 64, 38, 131, 1, 193, 47, 38, 131, 1, 193, 49,
+    38, 131, 1, 193, 82, 38, 131, 1, 192, 214, 38, 131, 1, 2, 192, 179, 38,
+    131, 1, 193, 1, 38, 131, 1, 223, 110, 2, 192, 179, 38, 131, 1, 248, 28,
+    192, 179, 38, 131, 1, 223, 110, 248, 28, 192, 179, 38, 131, 1, 232, 216,
+    212, 180, 209, 48, 89, 1, 172, 212, 180, 209, 48, 89, 1, 198, 118, 212,
+    180, 209, 48, 89, 1, 213, 43, 212, 180, 209, 48, 89, 1, 189, 212, 180,
+    209, 48, 89, 1, 144, 212, 180, 209, 48, 89, 1, 181, 212, 180, 209, 48,
+    89, 1, 193, 209, 212, 180, 209, 48, 89, 1, 213, 210, 212, 180, 209, 48,
+    89, 1, 247, 19, 212, 180, 209, 48, 89, 1, 177, 212, 180, 209, 48, 89, 1,
+    188, 212, 180, 209, 48, 89, 1, 192, 112, 212, 180, 209, 48, 89, 1, 215,
+    3, 212, 180, 209, 48, 89, 1, 213, 30, 212, 180, 209, 48, 89, 1, 160, 212,
+    180, 209, 48, 89, 1, 238, 0, 212, 180, 209, 48, 89, 1, 212, 201, 212,
+    180, 209, 48, 89, 1, 213, 88, 212, 180, 209, 48, 89, 1, 196, 157, 212,
+    180, 209, 48, 89, 1, 213, 24, 212, 180, 209, 48, 89, 1, 197, 215, 212,
+    180, 209, 48, 89, 1, 233, 97, 212, 180, 209, 48, 89, 1, 167, 212, 180,
+    209, 48, 89, 1, 208, 239, 212, 180, 209, 48, 89, 1, 168, 212, 180, 209,
+    48, 89, 1, 213, 90, 212, 180, 209, 48, 89, 1, 166, 212, 180, 209, 48, 89,
+    1, 193, 164, 212, 180, 209, 48, 89, 1, 213, 92, 212, 180, 209, 48, 89, 1,
+    236, 158, 212, 180, 209, 48, 89, 1, 213, 91, 212, 180, 209, 48, 89, 1,
+    230, 89, 212, 180, 209, 48, 89, 1, 216, 98, 212, 180, 209, 48, 89, 1,
+    209, 234, 212, 180, 209, 48, 89, 1, 231, 233, 212, 180, 209, 48, 89, 1,
+    207, 3, 212, 180, 209, 48, 89, 1, 64, 212, 180, 209, 48, 89, 1, 252, 33,
+    212, 180, 209, 48, 89, 1, 70, 212, 180, 209, 48, 89, 1, 68, 212, 180,
+    209, 48, 89, 1, 74, 212, 180, 209, 48, 89, 1, 211, 194, 212, 180, 209,
+    48, 89, 1, 71, 212, 180, 209, 48, 89, 1, 234, 171, 212, 180, 209, 48, 89,
+    1, 194, 202, 212, 180, 209, 48, 89, 199, 9, 212, 180, 209, 48, 89, 199,
+    5, 212, 180, 209, 48, 89, 199, 6, 212, 180, 209, 48, 89, 199, 3, 212,
+    180, 209, 48, 89, 199, 4, 212, 180, 209, 48, 89, 199, 7, 212, 180, 209,
+    48, 89, 199, 8, 212, 180, 209, 48, 89, 3, 39, 210, 116, 212, 180, 209,
+    48, 89, 3, 39, 199, 194, 212, 180, 209, 48, 89, 3, 39, 219, 103, 212,
+    180, 209, 48, 89, 3, 39, 250, 198, 212, 180, 209, 48, 89, 3, 39, 223,
+    122, 212, 180, 209, 48, 89, 3, 193, 172, 193, 171, 212, 180, 209, 48, 89,
+    5, 219, 250, 212, 180, 209, 48, 89, 17, 192, 76, 212, 180, 209, 48, 89,
+    17, 101, 212, 180, 209, 48, 89, 17, 104, 212, 180, 209, 48, 89, 17, 133,
+    212, 180, 209, 48, 89, 17, 134, 212, 180, 209, 48, 89, 17, 151, 212, 180,
+    209, 48, 89, 17, 170, 212, 180, 209, 48, 89, 17, 179, 212, 180, 209, 48,
+    89, 17, 174, 212, 180, 209, 48, 89, 17, 182, 212, 180, 209, 48, 89, 219,
+    92, 212, 196, 212, 180, 209, 48, 89, 47, 247, 19, 194, 148, 1, 252, 33,
+    194, 148, 1, 64, 194, 148, 1, 249, 3, 194, 148, 1, 247, 19, 194, 148, 1,
+    238, 0, 194, 148, 1, 231, 233, 194, 148, 1, 168, 194, 148, 1, 210, 94,
+    194, 148, 1, 177, 194, 148, 1, 181, 194, 148, 1, 166, 194, 148, 1, 189,
+    194, 148, 1, 199, 240, 194, 148, 1, 233, 97, 194, 148, 1, 188, 194, 148,
+    1, 204, 64, 194, 148, 1, 223, 62, 194, 148, 1, 192, 112, 194, 148, 1,
+    194, 169, 194, 148, 1, 196, 157, 194, 148, 1, 160, 194, 148, 1, 74, 194,
+    148, 1, 250, 8, 194, 148, 1, 167, 194, 148, 1, 172, 194, 148, 1, 221,
+    250, 194, 148, 1, 144, 194, 148, 1, 71, 194, 148, 1, 70, 194, 148, 1,
+    214, 165, 194, 148, 1, 68, 194, 148, 1, 219, 130, 194, 148, 1, 198, 118,
+    194, 148, 1, 198, 223, 194, 148, 1, 211, 201, 194, 148, 1, 251, 248, 194,
+    148, 1, 250, 214, 194, 148, 1, 223, 164, 194, 148, 1, 211, 211, 194, 148,
+    1, 234, 88, 194, 148, 1, 251, 249, 194, 148, 1, 212, 201, 194, 148, 1,
+    197, 100, 194, 148, 1, 193, 13, 194, 148, 158, 198, 18, 194, 148, 158,
+    198, 17, 194, 148, 158, 221, 101, 194, 148, 158, 221, 100, 194, 148, 17,
+    192, 76, 194, 148, 17, 101, 194, 148, 17, 104, 194, 148, 17, 133, 194,
+    148, 17, 134, 194, 148, 17, 151, 194, 148, 17, 170, 194, 148, 17, 179,
+    194, 148, 17, 174, 194, 148, 17, 182, 194, 148, 214, 73, 57, 83, 82, 5,
+    218, 235, 221, 204, 83, 82, 5, 218, 231, 160, 83, 82, 5, 218, 229, 221,
+    33, 83, 82, 5, 218, 105, 222, 48, 83, 82, 5, 218, 75, 222, 57, 83, 82, 5,
+    218, 94, 221, 88, 83, 82, 5, 218, 122, 221, 113, 83, 82, 5, 217, 247,
+    221, 20, 83, 82, 5, 218, 226, 194, 72, 83, 82, 5, 218, 224, 194, 169, 83,
+    82, 5, 218, 222, 193, 244, 83, 82, 5, 218, 44, 194, 100, 83, 82, 5, 218,
+    52, 194, 111, 83, 82, 5, 218, 56, 194, 17, 83, 82, 5, 218, 125, 194, 36,
+    83, 82, 5, 217, 232, 193, 240, 83, 82, 5, 218, 27, 194, 98, 83, 82, 5,
+    218, 109, 193, 228, 83, 82, 5, 218, 121, 193, 230, 83, 82, 5, 218, 31,
+    193, 229, 83, 82, 5, 218, 220, 216, 120, 83, 82, 5, 218, 218, 217, 160,
+    83, 82, 5, 218, 216, 215, 209, 83, 82, 5, 218, 111, 217, 5, 83, 82, 5,
+    218, 76, 216, 55, 83, 82, 5, 218, 16, 215, 234, 83, 82, 5, 217, 237, 215,
+    228, 83, 82, 5, 218, 214, 248, 41, 83, 82, 5, 218, 211, 249, 3, 83, 82,
+    5, 218, 209, 247, 124, 83, 82, 5, 218, 20, 248, 108, 83, 82, 5, 218, 73,
+    248, 123, 83, 82, 5, 218, 67, 247, 206, 83, 82, 5, 218, 32, 247, 220, 83,
+    82, 5, 218, 199, 70, 83, 82, 5, 218, 197, 64, 83, 82, 5, 218, 195, 68,
+    83, 82, 5, 218, 7, 234, 171, 83, 82, 5, 218, 70, 71, 83, 82, 5, 218, 5,
+    211, 194, 83, 82, 5, 218, 23, 74, 83, 82, 5, 218, 33, 234, 150, 83, 82,
+    5, 218, 39, 223, 190, 83, 82, 5, 218, 35, 223, 190, 83, 82, 5, 217, 231,
+    250, 224, 83, 82, 5, 217, 248, 234, 88, 83, 82, 5, 218, 184, 203, 125,
+    83, 82, 5, 218, 182, 188, 83, 82, 5, 218, 180, 201, 184, 83, 82, 5, 218,
+    8, 205, 205, 83, 82, 5, 218, 54, 205, 223, 83, 82, 5, 218, 34, 202, 183,
+    83, 82, 5, 218, 91, 202, 212, 83, 82, 5, 217, 230, 203, 118, 83, 82, 5,
+    218, 170, 219, 209, 83, 82, 5, 218, 168, 177, 83, 82, 5, 218, 166, 219,
+    36, 83, 82, 5, 218, 86, 220, 32, 83, 82, 5, 218, 97, 220, 42, 83, 82, 5,
+    218, 116, 219, 73, 83, 82, 5, 218, 17, 219, 107, 83, 82, 5, 218, 60, 184,
+    220, 42, 83, 82, 5, 218, 192, 237, 16, 83, 82, 5, 218, 189, 238, 0, 83,
+    82, 5, 218, 186, 235, 62, 83, 82, 5, 218, 81, 237, 101, 83, 82, 5, 217,
+    246, 236, 120, 83, 82, 5, 217, 245, 236, 146, 83, 82, 5, 218, 178, 199,
+    128, 83, 82, 5, 218, 175, 189, 83, 82, 5, 218, 173, 198, 45, 83, 82, 5,
+    218, 79, 200, 56, 83, 82, 5, 218, 115, 200, 79, 83, 82, 5, 218, 66, 198,
+    254, 83, 82, 5, 218, 101, 155, 83, 82, 5, 218, 164, 223, 20, 83, 82, 5,
+    218, 161, 223, 62, 83, 82, 5, 218, 159, 222, 214, 83, 82, 5, 218, 13,
+    223, 39, 83, 82, 5, 218, 57, 223, 41, 83, 82, 5, 218, 10, 222, 223, 83,
+    82, 5, 218, 107, 222, 233, 83, 82, 5, 217, 251, 184, 222, 233, 83, 82, 5,
+    218, 157, 193, 22, 83, 82, 5, 218, 154, 168, 83, 82, 5, 218, 152, 192,
+    214, 83, 82, 5, 218, 61, 193, 66, 83, 82, 5, 218, 90, 193, 69, 83, 82, 5,
+    218, 29, 192, 235, 83, 82, 5, 218, 49, 193, 1, 83, 82, 5, 218, 148, 233,
+    11, 83, 82, 5, 218, 146, 233, 97, 83, 82, 5, 218, 144, 232, 77, 83, 82,
+    5, 218, 92, 233, 40, 83, 82, 5, 218, 95, 233, 47, 83, 82, 5, 218, 37,
+    232, 152, 83, 82, 5, 218, 82, 232, 164, 83, 82, 5, 217, 229, 232, 76, 83,
+    82, 5, 218, 69, 233, 68, 83, 82, 5, 218, 142, 214, 20, 83, 82, 5, 218,
+    140, 215, 61, 83, 82, 5, 218, 138, 212, 230, 83, 82, 5, 218, 53, 214,
+    196, 83, 82, 5, 218, 1, 213, 130, 83, 82, 5, 217, 250, 229, 178, 83, 82,
+    5, 218, 133, 144, 83, 82, 5, 217, 240, 228, 181, 83, 82, 5, 218, 136,
+    229, 225, 83, 82, 5, 218, 74, 229, 255, 83, 82, 5, 218, 131, 229, 16, 83,
+    82, 5, 218, 30, 229, 43, 83, 82, 5, 218, 87, 229, 224, 83, 82, 5, 218,
+    42, 229, 9, 83, 82, 5, 218, 117, 229, 148, 83, 82, 5, 218, 40, 230, 65,
+    83, 82, 5, 218, 83, 228, 164, 83, 82, 5, 218, 118, 229, 208, 83, 82, 5,
+    217, 233, 229, 19, 83, 82, 5, 218, 124, 228, 177, 83, 82, 5, 218, 80,
+    214, 130, 83, 82, 5, 218, 129, 214, 144, 83, 82, 5, 218, 88, 214, 127,
+    83, 82, 5, 218, 55, 214, 138, 83, 82, 5, 218, 24, 214, 139, 83, 82, 5,
+    218, 14, 214, 128, 83, 82, 5, 218, 50, 214, 129, 83, 82, 5, 218, 11, 214,
+    143, 83, 82, 5, 218, 43, 214, 126, 83, 82, 5, 218, 84, 184, 214, 139, 83,
+    82, 5, 218, 64, 184, 214, 128, 83, 82, 5, 217, 243, 184, 214, 129, 83,
+    82, 5, 218, 15, 231, 46, 83, 82, 5, 218, 59, 231, 233, 83, 82, 5, 218, 2,
+    230, 186, 83, 82, 5, 217, 236, 231, 150, 83, 82, 5, 218, 4, 230, 172, 83,
+    82, 5, 218, 3, 230, 182, 83, 82, 5, 217, 242, 214, 149, 83, 82, 5, 218,
+    113, 214, 86, 83, 82, 5, 217, 249, 214, 75, 83, 82, 5, 218, 102, 210, 51,
+    83, 82, 5, 218, 71, 166, 83, 82, 5, 218, 120, 209, 51, 83, 82, 5, 218,
+    89, 210, 168, 83, 82, 5, 218, 119, 210, 181, 83, 82, 5, 218, 68, 209,
+    172, 83, 82, 5, 218, 104, 209, 198, 83, 82, 5, 218, 25, 217, 67, 83, 82,
+    5, 218, 108, 217, 82, 83, 82, 5, 218, 48, 217, 61, 83, 82, 5, 218, 123,
+    217, 74, 83, 82, 5, 217, 238, 217, 74, 83, 82, 5, 218, 98, 217, 75, 83,
+    82, 5, 217, 254, 217, 62, 83, 82, 5, 217, 252, 217, 63, 83, 82, 5, 217,
+    239, 217, 55, 83, 82, 5, 218, 9, 184, 217, 75, 83, 82, 5, 218, 65, 184,
+    217, 62, 83, 82, 5, 218, 28, 184, 217, 63, 83, 82, 5, 218, 38, 221, 61,
+    83, 82, 5, 218, 78, 221, 69, 83, 82, 5, 218, 96, 221, 57, 83, 82, 5, 218,
+    127, 221, 64, 83, 82, 5, 218, 62, 221, 65, 83, 82, 5, 218, 58, 221, 59,
+    83, 82, 5, 218, 12, 221, 60, 83, 82, 5, 218, 46, 231, 167, 83, 82, 5,
+    218, 114, 231, 175, 83, 82, 5, 218, 22, 231, 162, 83, 82, 5, 218, 77,
+    231, 171, 83, 82, 5, 218, 63, 231, 172, 83, 82, 5, 218, 99, 231, 163, 83,
+    82, 5, 218, 100, 231, 165, 83, 82, 5, 217, 255, 167, 83, 82, 5, 218, 47,
+    214, 240, 83, 82, 5, 218, 41, 214, 255, 83, 82, 5, 218, 45, 214, 222, 83,
+    82, 5, 217, 235, 214, 246, 83, 82, 5, 218, 51, 214, 247, 83, 82, 5, 218,
+    103, 214, 227, 83, 82, 5, 218, 106, 214, 231, 83, 82, 5, 218, 18, 214, 0,
+    83, 82, 5, 217, 234, 213, 226, 83, 82, 5, 218, 21, 213, 247, 83, 82, 5,
+    218, 36, 213, 230, 83, 82, 5, 217, 244, 196, 39, 83, 82, 5, 217, 241,
+    196, 157, 83, 82, 5, 218, 19, 194, 223, 83, 82, 5, 217, 253, 196, 118,
+    83, 82, 5, 218, 85, 196, 123, 83, 82, 5, 218, 26, 195, 236, 83, 82, 5,
+    218, 93, 195, 252, 83, 82, 5, 218, 6, 212, 174, 83, 82, 5, 218, 112, 212,
+    194, 83, 82, 5, 218, 0, 212, 156, 83, 82, 5, 218, 72, 212, 186, 83, 82,
+    5, 218, 110, 212, 163, 83, 82, 17, 101, 83, 82, 17, 104, 83, 82, 17, 133,
+    83, 82, 17, 134, 83, 82, 17, 151, 83, 82, 17, 170, 83, 82, 17, 179, 83,
+    82, 17, 174, 83, 82, 17, 182, 83, 82, 38, 31, 200, 54, 83, 82, 38, 31,
+    200, 25, 83, 82, 38, 31, 228, 160, 83, 82, 38, 31, 199, 163, 83, 82, 38,
+    31, 200, 31, 199, 163, 83, 82, 38, 31, 228, 163, 199, 163, 83, 82, 38,
+    31, 216, 123, 251, 116, 6, 1, 251, 14, 251, 116, 6, 1, 237, 253, 251,
+    116, 6, 1, 220, 182, 251, 116, 6, 1, 216, 136, 251, 116, 6, 1, 249, 3,
+    251, 116, 6, 1, 203, 68, 251, 116, 6, 1, 210, 181, 251, 116, 6, 1, 248,
+    49, 251, 116, 6, 1, 167, 251, 116, 6, 1, 71, 251, 116, 6, 1, 233, 97,
+    251, 116, 6, 1, 70, 251, 116, 6, 1, 74, 251, 116, 6, 1, 237, 40, 251,
+    116, 6, 1, 193, 23, 251, 116, 6, 1, 194, 119, 251, 116, 6, 1, 212, 230,
+    251, 116, 6, 1, 222, 139, 251, 116, 6, 1, 168, 251, 116, 6, 1, 68, 251,
+    116, 6, 1, 223, 11, 251, 116, 6, 1, 242, 215, 251, 116, 6, 1, 144, 251,
+    116, 6, 1, 208, 237, 251, 116, 6, 1, 231, 233, 251, 116, 6, 1, 212, 201,
+    251, 116, 6, 1, 198, 45, 251, 116, 6, 1, 214, 65, 251, 116, 6, 1, 196,
+    157, 251, 116, 6, 1, 221, 250, 251, 116, 6, 1, 231, 172, 251, 116, 6, 1,
+    192, 101, 251, 116, 6, 1, 221, 60, 251, 116, 6, 1, 204, 64, 251, 116, 2,
+    1, 251, 14, 251, 116, 2, 1, 237, 253, 251, 116, 2, 1, 220, 182, 251, 116,
+    2, 1, 216, 136, 251, 116, 2, 1, 249, 3, 251, 116, 2, 1, 203, 68, 251,
+    116, 2, 1, 210, 181, 251, 116, 2, 1, 248, 49, 251, 116, 2, 1, 167, 251,
+    116, 2, 1, 71, 251, 116, 2, 1, 233, 97, 251, 116, 2, 1, 70, 251, 116, 2,
+    1, 74, 251, 116, 2, 1, 237, 40, 251, 116, 2, 1, 193, 23, 251, 116, 2, 1,
+    194, 119, 251, 116, 2, 1, 212, 230, 251, 116, 2, 1, 222, 139, 251, 116,
+    2, 1, 168, 251, 116, 2, 1, 68, 251, 116, 2, 1, 223, 11, 251, 116, 2, 1,
+    242, 215, 251, 116, 2, 1, 144, 251, 116, 2, 1, 208, 237, 251, 116, 2, 1,
+    231, 233, 251, 116, 2, 1, 212, 201, 251, 116, 2, 1, 198, 45, 251, 116, 2,
+    1, 214, 65, 251, 116, 2, 1, 196, 157, 251, 116, 2, 1, 221, 250, 251, 116,
+    2, 1, 231, 172, 251, 116, 2, 1, 192, 101, 251, 116, 2, 1, 221, 60, 251,
+    116, 2, 1, 204, 64, 251, 116, 251, 15, 219, 250, 251, 116, 18, 219, 250,
+    251, 116, 231, 146, 77, 251, 116, 230, 66, 251, 116, 116, 216, 75, 251,
+    116, 231, 147, 116, 216, 75, 251, 116, 212, 241, 251, 116, 215, 48, 77,
+    251, 116, 17, 192, 76, 251, 116, 17, 101, 251, 116, 17, 104, 251, 116,
+    17, 133, 251, 116, 17, 134, 251, 116, 17, 151, 251, 116, 17, 170, 251,
+    116, 17, 179, 251, 116, 17, 174, 251, 116, 17, 182, 251, 116, 88, 233,
+    204, 77, 251, 116, 88, 208, 159, 77, 223, 174, 137, 31, 101, 223, 174,
+    137, 31, 104, 223, 174, 137, 31, 133, 223, 174, 137, 31, 134, 223, 174,
+    137, 31, 151, 223, 174, 137, 31, 170, 223, 174, 137, 31, 179, 223, 174,
+    137, 31, 174, 223, 174, 137, 31, 182, 223, 174, 137, 31, 200, 30, 223,
+    174, 137, 31, 197, 239, 223, 174, 137, 31, 199, 184, 223, 174, 137, 31,
+    232, 126, 223, 174, 137, 31, 233, 3, 223, 174, 137, 31, 203, 25, 223,
+    174, 137, 31, 204, 140, 223, 174, 137, 31, 234, 137, 223, 174, 137, 31,
+    214, 11, 223, 174, 137, 31, 90, 228, 162, 223, 174, 137, 31, 103, 228,
+    162, 223, 174, 137, 31, 112, 228, 162, 223, 174, 137, 31, 232, 119, 228,
+    162, 223, 174, 137, 31, 232, 214, 228, 162, 223, 174, 137, 31, 203, 41,
+    228, 162, 223, 174, 137, 31, 204, 146, 228, 162, 223, 174, 137, 31, 234,
+    148, 228, 162, 223, 174, 137, 31, 214, 16, 228, 162, 223, 174, 137, 31,
+    90, 180, 223, 174, 137, 31, 103, 180, 223, 174, 137, 31, 112, 180, 223,
+    174, 137, 31, 232, 119, 180, 223, 174, 137, 31, 232, 214, 180, 223, 174,
+    137, 31, 203, 41, 180, 223, 174, 137, 31, 204, 146, 180, 223, 174, 137,
+    31, 234, 148, 180, 223, 174, 137, 31, 214, 16, 180, 223, 174, 137, 31,
+    200, 31, 180, 223, 174, 137, 31, 197, 240, 180, 223, 174, 137, 31, 199,
+    185, 180, 223, 174, 137, 31, 232, 127, 180, 223, 174, 137, 31, 233, 4,
+    180, 223, 174, 137, 31, 203, 26, 180, 223, 174, 137, 31, 204, 141, 180,
+    223, 174, 137, 31, 234, 138, 180, 223, 174, 137, 31, 214, 12, 180, 223,
+    174, 137, 31, 220, 100, 223, 174, 137, 31, 220, 99, 223, 174, 137, 220,
+    101, 77, 223, 174, 137, 31, 222, 94, 223, 174, 137, 31, 222, 93, 223,
+    174, 137, 31, 209, 111, 101, 223, 174, 137, 31, 209, 111, 104, 223, 174,
+    137, 31, 209, 111, 133, 223, 174, 137, 31, 209, 111, 134, 223, 174, 137,
+    31, 209, 111, 151, 223, 174, 137, 31, 209, 111, 170, 223, 174, 137, 31,
+    209, 111, 179, 223, 174, 137, 31, 209, 111, 174, 223, 174, 137, 31, 209,
+    111, 182, 223, 174, 137, 209, 230, 223, 174, 137, 232, 109, 90, 208, 167,
+    223, 174, 137, 232, 109, 90, 230, 78, 223, 174, 137, 232, 109, 112, 208,
+    165, 223, 174, 137, 206, 186, 77, 223, 174, 137, 31, 250, 249, 101, 223,
+    174, 137, 31, 250, 249, 104, 223, 174, 137, 31, 250, 249, 200, 31, 180,
+    223, 174, 137, 250, 249, 220, 101, 77, 211, 132, 137, 31, 101, 211, 132,
+    137, 31, 104, 211, 132, 137, 31, 133, 211, 132, 137, 31, 134, 211, 132,
+    137, 31, 151, 211, 132, 137, 31, 170, 211, 132, 137, 31, 179, 211, 132,
+    137, 31, 174, 211, 132, 137, 31, 182, 211, 132, 137, 31, 200, 30, 211,
+    132, 137, 31, 197, 239, 211, 132, 137, 31, 199, 184, 211, 132, 137, 31,
+    232, 126, 211, 132, 137, 31, 233, 3, 211, 132, 137, 31, 203, 25, 211,
+    132, 137, 31, 204, 140, 211, 132, 137, 31, 234, 137, 211, 132, 137, 31,
+    214, 11, 211, 132, 137, 31, 90, 228, 162, 211, 132, 137, 31, 103, 228,
+    162, 211, 132, 137, 31, 112, 228, 162, 211, 132, 137, 31, 232, 119, 228,
+    162, 211, 132, 137, 31, 232, 214, 228, 162, 211, 132, 137, 31, 203, 41,
+    228, 162, 211, 132, 137, 31, 204, 146, 228, 162, 211, 132, 137, 31, 234,
+    148, 228, 162, 211, 132, 137, 31, 214, 16, 228, 162, 211, 132, 137, 31,
+    90, 180, 211, 132, 137, 31, 103, 180, 211, 132, 137, 31, 112, 180, 211,
+    132, 137, 31, 232, 119, 180, 211, 132, 137, 31, 232, 214, 180, 211, 132,
+    137, 31, 203, 41, 180, 211, 132, 137, 31, 204, 146, 180, 211, 132, 137,
+    31, 234, 148, 180, 211, 132, 137, 31, 214, 16, 180, 211, 132, 137, 31,
+    200, 31, 180, 211, 132, 137, 31, 197, 240, 180, 211, 132, 137, 31, 199,
+    185, 180, 211, 132, 137, 31, 232, 127, 180, 211, 132, 137, 31, 233, 4,
+    180, 211, 132, 137, 31, 203, 26, 180, 211, 132, 137, 31, 204, 141, 180,
+    211, 132, 137, 31, 234, 138, 180, 211, 132, 137, 31, 214, 12, 180, 211,
+    132, 137, 217, 120, 211, 132, 137, 250, 249, 31, 104, 211, 132, 137, 250,
+    249, 31, 133, 211, 132, 137, 250, 249, 31, 134, 211, 132, 137, 250, 249,
+    31, 151, 211, 132, 137, 250, 249, 31, 170, 211, 132, 137, 250, 249, 31,
+    179, 211, 132, 137, 250, 249, 31, 174, 211, 132, 137, 250, 249, 31, 182,
+    211, 132, 137, 250, 249, 31, 200, 30, 211, 132, 137, 250, 249, 31, 232,
+    119, 228, 162, 211, 132, 137, 250, 249, 31, 203, 41, 228, 162, 211, 132,
+    137, 250, 249, 31, 103, 180, 211, 132, 137, 250, 249, 31, 200, 31, 180,
+    211, 132, 137, 232, 109, 90, 230, 78, 211, 132, 137, 232, 109, 90, 203,
+    29, 9, 13, 251, 26, 9, 13, 248, 96, 9, 13, 223, 37, 9, 13, 237, 227, 9,
+    13, 194, 119, 9, 13, 192, 103, 9, 13, 230, 89, 9, 13, 200, 151, 9, 13,
+    193, 64, 9, 13, 222, 139, 9, 13, 220, 94, 9, 13, 217, 26, 9, 13, 213,
+    123, 9, 13, 205, 201, 9, 13, 251, 57, 9, 13, 233, 34, 9, 13, 206, 86, 9,
+    13, 208, 232, 9, 13, 207, 221, 9, 13, 204, 8, 9, 13, 200, 49, 9, 13, 199,
+    220, 9, 13, 221, 245, 9, 13, 199, 232, 9, 13, 237, 250, 9, 13, 192, 106,
+    9, 13, 231, 79, 9, 13, 236, 113, 248, 96, 9, 13, 236, 113, 213, 123, 9,
+    13, 236, 113, 233, 34, 9, 13, 236, 113, 208, 232, 9, 13, 88, 248, 96, 9,
+    13, 88, 223, 37, 9, 13, 88, 229, 220, 9, 13, 88, 230, 89, 9, 13, 88, 193,
+    64, 9, 13, 88, 222, 139, 9, 13, 88, 220, 94, 9, 13, 88, 217, 26, 9, 13,
+    88, 213, 123, 9, 13, 88, 205, 201, 9, 13, 88, 251, 57, 9, 13, 88, 233,
+    34, 9, 13, 88, 206, 86, 9, 13, 88, 208, 232, 9, 13, 88, 204, 8, 9, 13,
+    88, 200, 49, 9, 13, 88, 199, 220, 9, 13, 88, 221, 245, 9, 13, 88, 237,
+    250, 9, 13, 88, 231, 79, 9, 13, 200, 146, 223, 37, 9, 13, 200, 146, 230,
+    89, 9, 13, 200, 146, 193, 64, 9, 13, 200, 146, 220, 94, 9, 13, 200, 146,
+    213, 123, 9, 13, 200, 146, 205, 201, 9, 13, 200, 146, 251, 57, 9, 13,
+    200, 146, 206, 86, 9, 13, 200, 146, 208, 232, 9, 13, 200, 146, 204, 8, 9,
+    13, 200, 146, 221, 245, 9, 13, 200, 146, 237, 250, 9, 13, 200, 146, 231,
+    79, 9, 13, 200, 146, 236, 113, 213, 123, 9, 13, 200, 146, 236, 113, 208,
+    232, 9, 13, 201, 216, 248, 96, 9, 13, 201, 216, 223, 37, 9, 13, 201, 216,
+    229, 220, 9, 13, 201, 216, 230, 89, 9, 13, 201, 216, 200, 151, 9, 13,
+    201, 216, 193, 64, 9, 13, 201, 216, 222, 139, 9, 13, 201, 216, 217, 26,
+    9, 13, 201, 216, 213, 123, 9, 13, 201, 216, 205, 201, 9, 13, 201, 216,
+    251, 57, 9, 13, 201, 216, 233, 34, 9, 13, 201, 216, 206, 86, 9, 13, 201,
+    216, 208, 232, 9, 13, 201, 216, 204, 8, 9, 13, 201, 216, 200, 49, 9, 13,
+    201, 216, 199, 220, 9, 13, 201, 216, 221, 245, 9, 13, 201, 216, 237, 250,
+    9, 13, 201, 216, 192, 106, 9, 13, 201, 216, 231, 79, 9, 13, 201, 216,
+    236, 113, 248, 96, 9, 13, 201, 216, 236, 113, 233, 34, 9, 13, 219, 68,
+    251, 26, 9, 13, 219, 68, 248, 96, 9, 13, 219, 68, 223, 37, 9, 13, 219,
+    68, 237, 227, 9, 13, 219, 68, 229, 220, 9, 13, 219, 68, 194, 119, 9, 13,
+    219, 68, 192, 103, 9, 13, 219, 68, 230, 89, 9, 13, 219, 68, 200, 151, 9,
+    13, 219, 68, 193, 64, 9, 13, 219, 68, 220, 94, 9, 13, 219, 68, 217, 26,
+    9, 13, 219, 68, 213, 123, 9, 13, 219, 68, 205, 201, 9, 13, 219, 68, 251,
+    57, 9, 13, 219, 68, 233, 34, 9, 13, 219, 68, 206, 86, 9, 13, 219, 68,
+    208, 232, 9, 13, 219, 68, 207, 221, 9, 13, 219, 68, 204, 8, 9, 13, 219,
+    68, 200, 49, 9, 13, 219, 68, 199, 220, 9, 13, 219, 68, 221, 245, 9, 13,
+    219, 68, 199, 232, 9, 13, 219, 68, 237, 250, 9, 13, 219, 68, 192, 106, 9,
+    13, 219, 68, 231, 79, 9, 13, 235, 102, 248, 96, 9, 13, 235, 102, 223, 37,
+    9, 13, 235, 102, 237, 227, 9, 13, 235, 102, 194, 119, 9, 13, 235, 102,
+    192, 103, 9, 13, 235, 102, 230, 89, 9, 13, 235, 102, 200, 151, 9, 13,
+    235, 102, 193, 64, 9, 13, 235, 102, 220, 94, 9, 13, 235, 102, 217, 26, 9,
+    13, 235, 102, 213, 123, 9, 13, 235, 102, 205, 201, 9, 13, 235, 102, 251,
+    57, 9, 13, 235, 102, 233, 34, 9, 13, 235, 102, 206, 86, 9, 13, 235, 102,
+    208, 232, 9, 13, 235, 102, 207, 221, 9, 13, 235, 102, 204, 8, 9, 13, 235,
+    102, 200, 49, 9, 13, 235, 102, 199, 220, 9, 13, 235, 102, 221, 245, 9,
+    13, 235, 102, 199, 232, 9, 13, 235, 102, 237, 250, 9, 13, 235, 102, 192,
+    106, 9, 13, 235, 102, 231, 79, 9, 13, 211, 174, 91, 4, 176, 4, 200, 102,
+    9, 13, 211, 174, 176, 4, 237, 227, 217, 182, 120, 234, 186, 194, 52, 217,
+    182, 120, 202, 171, 194, 52, 217, 182, 120, 194, 91, 194, 52, 217, 182,
+    120, 178, 194, 52, 217, 182, 120, 207, 237, 235, 84, 217, 182, 120, 230,
+    201, 235, 84, 217, 182, 120, 62, 235, 84, 217, 182, 120, 90, 80, 243, 0,
+    217, 182, 120, 103, 80, 243, 0, 217, 182, 120, 112, 80, 243, 0, 217, 182,
+    120, 232, 119, 80, 243, 0, 217, 182, 120, 232, 214, 80, 243, 0, 217, 182,
+    120, 203, 41, 80, 243, 0, 217, 182, 120, 204, 146, 80, 243, 0, 217, 182,
+    120, 234, 148, 80, 243, 0, 217, 182, 120, 214, 16, 80, 243, 0, 217, 182,
+    120, 90, 80, 248, 208, 217, 182, 120, 103, 80, 248, 208, 217, 182, 120,
+    112, 80, 248, 208, 217, 182, 120, 232, 119, 80, 248, 208, 217, 182, 120,
+    232, 214, 80, 248, 208, 217, 182, 120, 203, 41, 80, 248, 208, 217, 182,
+    120, 204, 146, 80, 248, 208, 217, 182, 120, 234, 148, 80, 248, 208, 217,
+    182, 120, 214, 16, 80, 248, 208, 217, 182, 120, 90, 80, 242, 127, 217,
+    182, 120, 103, 80, 242, 127, 217, 182, 120, 112, 80, 242, 127, 217, 182,
+    120, 232, 119, 80, 242, 127, 217, 182, 120, 232, 214, 80, 242, 127, 217,
+    182, 120, 203, 41, 80, 242, 127, 217, 182, 120, 204, 146, 80, 242, 127,
+    217, 182, 120, 234, 148, 80, 242, 127, 217, 182, 120, 214, 16, 80, 242,
+    127, 217, 182, 120, 209, 210, 217, 182, 120, 211, 160, 217, 182, 120,
+    248, 209, 217, 182, 120, 242, 169, 217, 182, 120, 202, 112, 217, 182,
+    120, 201, 125, 217, 182, 120, 249, 250, 217, 182, 120, 194, 43, 217, 182,
+    120, 222, 226, 217, 182, 120, 248, 252, 191, 191, 120, 229, 5, 248, 252,
+    191, 191, 120, 229, 3, 191, 191, 120, 229, 2, 191, 191, 120, 229, 1, 191,
+    191, 120, 229, 0, 191, 191, 120, 228, 255, 191, 191, 120, 228, 254, 191,
+    191, 120, 228, 253, 191, 191, 120, 228, 252, 191, 191, 120, 228, 251,
+    191, 191, 120, 228, 250, 191, 191, 120, 228, 249, 191, 191, 120, 228,
+    248, 191, 191, 120, 228, 247, 191, 191, 120, 228, 246, 191, 191, 120,
+    228, 245, 191, 191, 120, 228, 244, 191, 191, 120, 228, 243, 191, 191,
+    120, 228, 242, 191, 191, 120, 228, 241, 191, 191, 120, 228, 240, 191,
+    191, 120, 228, 239, 191, 191, 120, 228, 238, 191, 191, 120, 228, 237,
+    191, 191, 120, 228, 236, 191, 191, 120, 228, 235, 191, 191, 120, 228,
+    234, 191, 191, 120, 228, 233, 191, 191, 120, 228, 232, 191, 191, 120,
+    228, 231, 191, 191, 120, 228, 230, 191, 191, 120, 228, 229, 191, 191,
+    120, 228, 228, 191, 191, 120, 228, 227, 191, 191, 120, 228, 226, 191,
+    191, 120, 228, 225, 191, 191, 120, 228, 224, 191, 191, 120, 228, 223,
+    191, 191, 120, 228, 222, 191, 191, 120, 228, 221, 191, 191, 120, 228,
+    220, 191, 191, 120, 228, 219, 191, 191, 120, 228, 218, 191, 191, 120,
+    228, 217, 191, 191, 120, 228, 216, 191, 191, 120, 228, 215, 191, 191,
+    120, 228, 214, 191, 191, 120, 228, 213, 191, 191, 120, 228, 212, 191,
+    191, 120, 228, 211, 191, 191, 120, 84, 248, 252, 191, 191, 120, 196, 104,
+    191, 191, 120, 196, 103, 191, 191, 120, 196, 102, 191, 191, 120, 196,
+    101, 191, 191, 120, 196, 100, 191, 191, 120, 196, 99, 191, 191, 120, 196,
+    98, 191, 191, 120, 196, 97, 191, 191, 120, 196, 96, 191, 191, 120, 196,
+    95, 191, 191, 120, 196, 94, 191, 191, 120, 196, 93, 191, 191, 120, 196,
+    92, 191, 191, 120, 196, 91, 191, 191, 120, 196, 90, 191, 191, 120, 196,
+    89, 191, 191, 120, 196, 88, 191, 191, 120, 196, 87, 191, 191, 120, 196,
+    86, 191, 191, 120, 196, 85, 191, 191, 120, 196, 84, 191, 191, 120, 196,
+    83, 191, 191, 120, 196, 82, 191, 191, 120, 196, 81, 191, 191, 120, 196,
+    80, 191, 191, 120, 196, 79, 191, 191, 120, 196, 78, 191, 191, 120, 196,
+    77, 191, 191, 120, 196, 76, 191, 191, 120, 196, 75, 191, 191, 120, 196,
+    74, 191, 191, 120, 196, 73, 191, 191, 120, 196, 72, 191, 191, 120, 196,
+    71, 191, 191, 120, 196, 70, 191, 191, 120, 196, 69, 191, 191, 120, 196,
+    68, 191, 191, 120, 196, 67, 191, 191, 120, 196, 66, 191, 191, 120, 196,
+    65, 191, 191, 120, 196, 64, 191, 191, 120, 196, 63, 191, 191, 120, 196,
+    62, 191, 191, 120, 196, 61, 191, 191, 120, 196, 60, 191, 191, 120, 196,
+    59, 191, 191, 120, 196, 58, 191, 191, 120, 196, 57, 191, 191, 120, 196,
+    56, 209, 220, 246, 216, 248, 252, 209, 220, 246, 216, 251, 136, 80, 202,
+    157, 209, 220, 246, 216, 103, 80, 202, 157, 209, 220, 246, 216, 112, 80,
+    202, 157, 209, 220, 246, 216, 232, 119, 80, 202, 157, 209, 220, 246, 216,
+    232, 214, 80, 202, 157, 209, 220, 246, 216, 203, 41, 80, 202, 157, 209,
+    220, 246, 216, 204, 146, 80, 202, 157, 209, 220, 246, 216, 234, 148, 80,
+    202, 157, 209, 220, 246, 216, 214, 16, 80, 202, 157, 209, 220, 246, 216,
+    200, 31, 80, 202, 157, 209, 220, 246, 216, 223, 60, 80, 202, 157, 209,
+    220, 246, 216, 221, 123, 80, 202, 157, 209, 220, 246, 216, 208, 161, 80,
+    202, 157, 209, 220, 246, 216, 221, 177, 80, 202, 157, 209, 220, 246, 216,
+    251, 136, 80, 229, 231, 209, 220, 246, 216, 103, 80, 229, 231, 209, 220,
+    246, 216, 112, 80, 229, 231, 209, 220, 246, 216, 232, 119, 80, 229, 231,
+    209, 220, 246, 216, 232, 214, 80, 229, 231, 209, 220, 246, 216, 203, 41,
+    80, 229, 231, 209, 220, 246, 216, 204, 146, 80, 229, 231, 209, 220, 246,
+    216, 234, 148, 80, 229, 231, 209, 220, 246, 216, 214, 16, 80, 229, 231,
+    209, 220, 246, 216, 200, 31, 80, 229, 231, 209, 220, 246, 216, 223, 60,
+    80, 229, 231, 209, 220, 246, 216, 221, 123, 80, 229, 231, 209, 220, 246,
+    216, 208, 161, 80, 229, 231, 209, 220, 246, 216, 221, 177, 80, 229, 231,
+    209, 220, 246, 216, 207, 237, 222, 226, 209, 220, 246, 216, 251, 136, 80,
+    237, 3, 209, 220, 246, 216, 103, 80, 237, 3, 209, 220, 246, 216, 112, 80,
+    237, 3, 209, 220, 246, 216, 232, 119, 80, 237, 3, 209, 220, 246, 216,
+    232, 214, 80, 237, 3, 209, 220, 246, 216, 203, 41, 80, 237, 3, 209, 220,
+    246, 216, 204, 146, 80, 237, 3, 209, 220, 246, 216, 234, 148, 80, 237, 3,
+    209, 220, 246, 216, 214, 16, 80, 237, 3, 209, 220, 246, 216, 200, 31, 80,
+    237, 3, 209, 220, 246, 216, 223, 60, 80, 237, 3, 209, 220, 246, 216, 221,
+    123, 80, 237, 3, 209, 220, 246, 216, 208, 161, 80, 237, 3, 209, 220, 246,
+    216, 221, 177, 80, 237, 3, 209, 220, 246, 216, 60, 222, 226, 209, 220,
+    246, 216, 251, 136, 80, 242, 69, 209, 220, 246, 216, 103, 80, 242, 69,
+    209, 220, 246, 216, 112, 80, 242, 69, 209, 220, 246, 216, 232, 119, 80,
+    242, 69, 209, 220, 246, 216, 232, 214, 80, 242, 69, 209, 220, 246, 216,
+    203, 41, 80, 242, 69, 209, 220, 246, 216, 204, 146, 80, 242, 69, 209,
+    220, 246, 216, 234, 148, 80, 242, 69, 209, 220, 246, 216, 214, 16, 80,
+    242, 69, 209, 220, 246, 216, 200, 31, 80, 242, 69, 209, 220, 246, 216,
+    223, 60, 80, 242, 69, 209, 220, 246, 216, 221, 123, 80, 242, 69, 209,
+    220, 246, 216, 208, 161, 80, 242, 69, 209, 220, 246, 216, 221, 177, 80,
+    242, 69, 209, 220, 246, 216, 62, 222, 226, 209, 220, 246, 216, 232, 150,
+    209, 220, 246, 216, 198, 146, 209, 220, 246, 216, 198, 135, 209, 220,
+    246, 216, 198, 132, 209, 220, 246, 216, 198, 131, 209, 220, 246, 216,
+    198, 130, 209, 220, 246, 216, 198, 129, 209, 220, 246, 216, 198, 128,
+    209, 220, 246, 216, 198, 127, 209, 220, 246, 216, 198, 126, 209, 220,
+    246, 216, 198, 145, 209, 220, 246, 216, 198, 144, 209, 220, 246, 216,
+    198, 143, 209, 220, 246, 216, 198, 142, 209, 220, 246, 216, 198, 141,
+    209, 220, 246, 216, 198, 140, 209, 220, 246, 216, 198, 139, 209, 220,
+    246, 216, 198, 138, 209, 220, 246, 216, 198, 137, 209, 220, 246, 216,
+    198, 136, 209, 220, 246, 216, 198, 134, 209, 220, 246, 216, 198, 133, 17,
+    192, 77, 232, 71, 201, 238, 17, 192, 77, 242, 38, 17, 90, 242, 38, 17,
+    103, 242, 38, 17, 112, 242, 38, 17, 232, 119, 242, 38, 17, 232, 214, 242,
+    38, 17, 203, 41, 242, 38, 17, 204, 146, 242, 38, 17, 234, 148, 242, 38,
+    17, 214, 16, 242, 38, 236, 213, 47, 49, 17, 192, 76, 236, 213, 214, 199,
+    47, 49, 17, 192, 76, 47, 192, 77, 4, 203, 4, 47, 250, 182, 54, 47, 236,
+    127, 3, 4, 211, 115, 248, 247, 125, 8, 6, 1, 64, 125, 8, 6, 1, 249, 226,
+    125, 8, 6, 1, 247, 52, 125, 8, 6, 1, 238, 95, 125, 8, 6, 1, 71, 125, 8,
+    6, 1, 233, 163, 125, 8, 6, 1, 232, 44, 125, 8, 6, 1, 230, 124, 125, 8, 6,
+    1, 70, 125, 8, 6, 1, 223, 65, 125, 8, 6, 1, 222, 184, 125, 8, 6, 1, 165,
+    125, 8, 6, 1, 218, 236, 125, 8, 6, 1, 215, 151, 125, 8, 6, 1, 74, 125, 8,
+    6, 1, 211, 93, 125, 8, 6, 1, 208, 247, 125, 8, 6, 1, 150, 125, 8, 6, 1,
+    206, 158, 125, 8, 6, 1, 200, 228, 125, 8, 6, 1, 68, 125, 8, 6, 1, 196,
+    236, 125, 8, 6, 1, 194, 202, 125, 8, 6, 1, 193, 223, 125, 8, 6, 1, 193,
+    148, 125, 8, 6, 1, 192, 155, 198, 237, 204, 2, 247, 164, 8, 6, 1, 206,
+    158, 47, 43, 8, 6, 1, 247, 52, 47, 43, 8, 6, 1, 150, 47, 246, 159, 47,
+    193, 225, 238, 228, 109, 108, 8, 6, 1, 64, 108, 8, 6, 1, 249, 226, 108,
+    8, 6, 1, 247, 52, 108, 8, 6, 1, 238, 95, 108, 8, 6, 1, 71, 108, 8, 6, 1,
+    233, 163, 108, 8, 6, 1, 232, 44, 108, 8, 6, 1, 230, 124, 108, 8, 6, 1,
+    70, 108, 8, 6, 1, 223, 65, 108, 8, 6, 1, 222, 184, 108, 8, 6, 1, 165,
+    108, 8, 6, 1, 218, 236, 108, 8, 6, 1, 215, 151, 108, 8, 6, 1, 74, 108, 8,
+    6, 1, 211, 93, 108, 8, 6, 1, 208, 247, 108, 8, 6, 1, 150, 108, 8, 6, 1,
+    206, 158, 108, 8, 6, 1, 200, 228, 108, 8, 6, 1, 68, 108, 8, 6, 1, 196,
+    236, 108, 8, 6, 1, 194, 202, 108, 8, 6, 1, 193, 223, 108, 8, 6, 1, 193,
+    148, 108, 8, 6, 1, 192, 155, 108, 228, 148, 108, 215, 175, 108, 205, 225,
+    108, 202, 95, 108, 209, 132, 108, 194, 112, 214, 199, 47, 8, 6, 1, 64,
+    214, 199, 47, 8, 6, 1, 249, 226, 214, 199, 47, 8, 6, 1, 247, 52, 214,
+    199, 47, 8, 6, 1, 238, 95, 214, 199, 47, 8, 6, 1, 71, 214, 199, 47, 8, 6,
+    1, 233, 163, 214, 199, 47, 8, 6, 1, 232, 44, 214, 199, 47, 8, 6, 1, 230,
+    124, 214, 199, 47, 8, 6, 1, 70, 214, 199, 47, 8, 6, 1, 223, 65, 214, 199,
+    47, 8, 6, 1, 222, 184, 214, 199, 47, 8, 6, 1, 165, 214, 199, 47, 8, 6, 1,
+    218, 236, 214, 199, 47, 8, 6, 1, 215, 151, 214, 199, 47, 8, 6, 1, 74,
+    214, 199, 47, 8, 6, 1, 211, 93, 214, 199, 47, 8, 6, 1, 208, 247, 214,
+    199, 47, 8, 6, 1, 150, 214, 199, 47, 8, 6, 1, 206, 158, 214, 199, 47, 8,
+    6, 1, 200, 228, 214, 199, 47, 8, 6, 1, 68, 214, 199, 47, 8, 6, 1, 196,
+    236, 214, 199, 47, 8, 6, 1, 194, 202, 214, 199, 47, 8, 6, 1, 193, 223,
+    214, 199, 47, 8, 6, 1, 193, 148, 214, 199, 47, 8, 6, 1, 192, 155, 208,
+    39, 217, 54, 57, 208, 39, 217, 51, 57, 208, 39, 215, 246, 57, 47, 246,
+    182, 47, 247, 53, 4, 211, 115, 248, 247, 47, 228, 167, 233, 0, 214, 199,
+    108, 8, 6, 1, 64, 214, 199, 108, 8, 6, 1, 249, 226, 214, 199, 108, 8, 6,
+    1, 247, 52, 214, 199, 108, 8, 6, 1, 238, 95, 214, 199, 108, 8, 6, 1, 71,
+    214, 199, 108, 8, 6, 1, 233, 163, 214, 199, 108, 8, 6, 1, 232, 44, 214,
+    199, 108, 8, 6, 1, 230, 124, 214, 199, 108, 8, 6, 1, 70, 214, 199, 108,
+    8, 6, 1, 223, 65, 214, 199, 108, 8, 6, 1, 222, 184, 214, 199, 108, 8, 6,
+    1, 165, 214, 199, 108, 8, 6, 1, 218, 236, 214, 199, 108, 8, 6, 1, 215,
+    151, 214, 199, 108, 8, 6, 1, 74, 214, 199, 108, 8, 6, 1, 211, 93, 214,
+    199, 108, 8, 6, 1, 208, 247, 214, 199, 108, 8, 6, 1, 150, 214, 199, 108,
+    8, 6, 1, 206, 158, 214, 199, 108, 8, 6, 1, 200, 228, 214, 199, 108, 8, 6,
+    1, 68, 214, 199, 108, 8, 6, 1, 196, 236, 214, 199, 108, 8, 6, 1, 194,
+    202, 214, 199, 108, 8, 6, 1, 193, 223, 214, 199, 108, 8, 6, 1, 193, 148,
+    214, 199, 108, 8, 6, 1, 192, 155, 238, 180, 214, 199, 108, 8, 6, 1, 211,
+    93, 214, 199, 108, 228, 51, 214, 199, 108, 166, 214, 199, 108, 188, 214,
+    199, 108, 251, 238, 214, 199, 108, 194, 112, 50, 236, 166, 108, 242, 111,
+    108, 238, 235, 108, 232, 99, 108, 228, 42, 108, 214, 176, 108, 214, 167,
+    108, 211, 231, 108, 202, 178, 108, 130, 4, 233, 204, 77, 108, 195, 226,
+    108, 112, 238, 95, 108, 205, 212, 205, 231, 108, 103, 222, 184, 108, 232,
+    119, 222, 184, 108, 234, 148, 222, 184, 108, 232, 214, 209, 192, 101,
+    108, 204, 146, 209, 192, 101, 108, 197, 228, 209, 192, 104, 108, 203, 26,
+    211, 93, 108, 90, 228, 163, 197, 240, 211, 93, 108, 8, 2, 1, 238, 95,
+    108, 230, 2, 108, 230, 1, 108, 229, 170, 108, 219, 61, 108, 203, 144,
+    108, 197, 96, 108, 195, 249, 217, 107, 194, 9, 109, 207, 229, 223, 173,
+    16, 1, 64, 207, 229, 223, 173, 16, 1, 249, 226, 207, 229, 223, 173, 16,
+    1, 247, 52, 207, 229, 223, 173, 16, 1, 238, 95, 207, 229, 223, 173, 16,
+    1, 71, 207, 229, 223, 173, 16, 1, 233, 163, 207, 229, 223, 173, 16, 1,
+    232, 44, 207, 229, 223, 173, 16, 1, 230, 124, 207, 229, 223, 173, 16, 1,
+    70, 207, 229, 223, 173, 16, 1, 223, 65, 207, 229, 223, 173, 16, 1, 222,
+    184, 207, 229, 223, 173, 16, 1, 165, 207, 229, 223, 173, 16, 1, 218, 236,
+    207, 229, 223, 173, 16, 1, 215, 151, 207, 229, 223, 173, 16, 1, 74, 207,
+    229, 223, 173, 16, 1, 211, 93, 207, 229, 223, 173, 16, 1, 208, 247, 207,
+    229, 223, 173, 16, 1, 150, 207, 229, 223, 173, 16, 1, 206, 158, 207, 229,
+    223, 173, 16, 1, 200, 228, 207, 229, 223, 173, 16, 1, 68, 207, 229, 223,
+    173, 16, 1, 196, 236, 207, 229, 223, 173, 16, 1, 194, 202, 207, 229, 223,
+    173, 16, 1, 193, 223, 207, 229, 223, 173, 16, 1, 193, 148, 207, 229, 223,
+    173, 16, 1, 192, 155, 50, 229, 140, 229, 29, 108, 75, 221, 96, 108, 75,
+    188, 108, 12, 197, 59, 225, 242, 108, 12, 197, 59, 225, 246, 108, 12,
+    197, 59, 225, 254, 108, 75, 237, 116, 108, 12, 197, 59, 226, 5, 108, 12,
+    197, 59, 225, 248, 108, 12, 197, 59, 225, 220, 108, 12, 197, 59, 225,
+    247, 108, 12, 197, 59, 226, 4, 108, 12, 197, 59, 225, 234, 108, 12, 197,
+    59, 225, 227, 108, 12, 197, 59, 225, 236, 108, 12, 197, 59, 226, 1, 108,
+    12, 197, 59, 225, 243, 108, 12, 197, 59, 226, 3, 108, 12, 197, 59, 225,
+    235, 108, 12, 197, 59, 226, 2, 108, 12, 197, 59, 225, 221, 108, 12, 197,
+    59, 225, 226, 108, 12, 197, 59, 225, 219, 108, 12, 197, 59, 225, 249,
+    108, 12, 197, 59, 225, 251, 108, 12, 197, 59, 225, 229, 108, 12, 197, 59,
+    225, 240, 108, 12, 197, 59, 225, 238, 108, 12, 197, 59, 226, 8, 108, 12,
+    197, 59, 226, 7, 108, 12, 197, 59, 225, 217, 108, 12, 197, 59, 225, 244,
+    108, 12, 197, 59, 226, 6, 108, 12, 197, 59, 225, 253, 108, 12, 197, 59,
+    225, 239, 108, 12, 197, 59, 225, 218, 108, 12, 197, 59, 225, 241, 108,
+    12, 197, 59, 225, 223, 108, 12, 197, 59, 225, 222, 108, 12, 197, 59, 225,
+    252, 108, 12, 197, 59, 225, 230, 108, 12, 197, 59, 225, 232, 108, 12,
+    197, 59, 225, 233, 108, 12, 197, 59, 225, 225, 108, 12, 197, 59, 226, 0,
+    108, 12, 197, 59, 225, 250, 108, 12, 197, 59, 225, 216, 198, 237, 204, 2,
+    247, 164, 12, 197, 59, 225, 231, 198, 237, 204, 2, 247, 164, 12, 197, 59,
+    226, 7, 198, 237, 204, 2, 247, 164, 12, 197, 59, 226, 5, 198, 237, 204,
+    2, 247, 164, 12, 197, 59, 225, 245, 198, 237, 204, 2, 247, 164, 12, 197,
+    59, 225, 228, 198, 237, 204, 2, 247, 164, 12, 197, 59, 225, 241, 198,
+    237, 204, 2, 247, 164, 12, 197, 59, 225, 224, 198, 237, 204, 2, 247, 164,
+    12, 197, 59, 225, 255, 198, 237, 204, 2, 247, 164, 12, 197, 59, 225, 237,
+    47, 228, 39, 251, 110, 47, 228, 39, 251, 141, 207, 7, 16, 39, 232, 77,
+    207, 7, 16, 39, 219, 36, 207, 7, 16, 39, 203, 178, 207, 7, 16, 39, 193,
+    196, 207, 7, 16, 39, 203, 161, 207, 7, 16, 39, 247, 7, 238, 106, 232,
+    162, 242, 84, 197, 81, 214, 32, 4, 202, 16, 201, 118, 136, 216, 8, 201,
+    117, 242, 115, 250, 27, 235, 35, 201, 116, 136, 247, 111, 208, 40, 247,
+    143, 250, 27, 214, 31, 194, 130, 194, 124, 195, 242, 216, 128, 194, 114,
+    234, 190, 231, 7, 233, 220, 234, 190, 231, 7, 250, 232, 234, 190, 231, 7,
+    250, 46, 231, 7, 4, 216, 252, 214, 177, 216, 30, 109, 194, 116, 238, 194,
+    216, 30, 109, 232, 226, 208, 168, 216, 30, 109, 194, 116, 231, 42, 216,
+    30, 109, 232, 71, 216, 30, 109, 194, 144, 231, 42, 216, 30, 109, 220, 66,
+    208, 168, 216, 30, 109, 194, 144, 238, 194, 216, 30, 109, 238, 194, 216,
+    29, 214, 177, 216, 30, 4, 233, 91, 232, 226, 208, 168, 216, 30, 4, 233,
+    91, 220, 66, 208, 168, 216, 30, 4, 233, 91, 232, 71, 216, 30, 4, 233, 91,
+    201, 124, 4, 233, 91, 231, 3, 202, 19, 203, 200, 202, 19, 199, 212, 60,
+    235, 70, 62, 201, 123, 62, 201, 124, 4, 2, 242, 75, 62, 201, 124, 248,
+    93, 242, 75, 62, 201, 124, 248, 93, 242, 76, 4, 208, 41, 242, 76, 4, 208,
+    41, 242, 76, 4, 202, 218, 242, 76, 4, 219, 192, 242, 76, 4, 198, 241,
+    232, 163, 194, 53, 247, 225, 233, 91, 228, 202, 236, 134, 200, 158, 247,
+    87, 242, 223, 205, 203, 233, 214, 198, 195, 237, 109, 198, 195, 211, 41,
+    198, 195, 247, 12, 228, 202, 210, 135, 198, 29, 242, 227, 247, 228, 207,
+    20, 229, 169, 201, 121, 247, 228, 234, 194, 80, 217, 171, 234, 194, 80,
+    207, 139, 229, 203, 232, 119, 220, 38, 242, 74, 217, 139, 220, 37, 233,
+    72, 220, 37, 220, 38, 232, 170, 223, 191, 194, 52, 215, 186, 199, 22,
+    250, 7, 230, 218, 217, 14, 194, 128, 200, 119, 220, 5, 248, 204, 210, 0,
+    207, 237, 250, 144, 230, 201, 250, 144, 210, 174, 210, 178, 242, 228,
+    201, 221, 230, 71, 202, 252, 80, 209, 236, 217, 41, 211, 212, 247, 207,
+    209, 144, 220, 16, 207, 140, 238, 200, 207, 140, 248, 217, 238, 238, 207,
+    139, 238, 134, 26, 207, 139, 202, 2, 247, 177, 202, 156, 247, 156, 232,
+    97, 232, 93, 207, 45, 201, 71, 209, 147, 237, 205, 212, 2, 201, 90, 232,
+    94, 203, 170, 232, 225, 247, 6, 4, 201, 63, 237, 52, 202, 198, 228, 50,
+    238, 198, 204, 20, 228, 49, 228, 50, 238, 198, 235, 99, 238, 237, 242,
+    186, 161, 246, 233, 219, 88, 238, 125, 229, 18, 209, 149, 203, 184, 248,
+    73, 247, 173, 209, 150, 80, 232, 151, 238, 236, 232, 140, 26, 221, 124,
+    200, 67, 194, 39, 230, 40, 206, 70, 247, 190, 26, 238, 148, 194, 49, 231,
+    11, 242, 58, 231, 11, 198, 150, 235, 77, 248, 104, 215, 226, 242, 91,
+    248, 104, 215, 225, 248, 255, 247, 189, 232, 140, 26, 221, 125, 4, 209,
+    221, 247, 190, 4, 209, 165, 238, 225, 209, 167, 207, 141, 193, 255, 209,
+    106, 248, 10, 247, 5, 223, 59, 242, 176, 198, 195, 233, 55, 242, 175,
+    232, 228, 232, 229, 202, 154, 248, 215, 210, 219, 209, 166, 239, 18, 248,
+    217, 200, 123, 198, 195, 238, 180, 232, 200, 210, 1, 237, 106, 223, 50,
+    236, 126, 246, 205, 201, 220, 194, 53, 242, 202, 216, 30, 196, 25, 246,
+    124, 205, 244, 206, 18, 230, 224, 246, 226, 229, 234, 4, 199, 74, 211,
+    212, 199, 225, 220, 28, 247, 183, 80, 232, 174, 216, 130, 217, 37, 207,
+    208, 207, 141, 35, 222, 0, 4, 223, 58, 201, 191, 216, 164, 219, 228, 202,
+    250, 238, 243, 221, 118, 248, 119, 250, 57, 35, 213, 100, 248, 119, 237,
+    58, 35, 213, 100, 232, 244, 232, 103, 251, 114, 199, 115, 246, 206, 228,
+    204, 233, 21, 194, 79, 207, 33, 242, 61, 232, 220, 209, 183, 26, 232,
+    224, 216, 164, 215, 250, 246, 247, 242, 134, 229, 241, 250, 66, 211, 45,
+    198, 249, 230, 18, 242, 120, 200, 22, 199, 116, 242, 106, 247, 216, 210,
+    128, 250, 64, 196, 35, 231, 207, 236, 206, 229, 137, 202, 243, 217, 216,
+    248, 23, 231, 208, 236, 252, 247, 176, 232, 176, 209, 220, 246, 214, 35,
+    213, 105, 215, 216, 35, 213, 100, 206, 2, 230, 169, 35, 221, 255, 198,
+    125, 196, 13, 35, 205, 236, 206, 192, 203, 215, 4, 206, 21, 200, 27, 208,
+    60, 26, 248, 217, 203, 15, 26, 203, 15, 247, 200, 248, 174, 26, 229, 11,
+    242, 229, 232, 206, 202, 217, 206, 193, 201, 95, 202, 118, 217, 37, 198,
+    151, 228, 205, 208, 61, 250, 233, 232, 148, 206, 206, 232, 148, 201, 66,
+    194, 96, 219, 197, 230, 244, 208, 62, 216, 16, 208, 62, 246, 217, 238,
+    191, 248, 171, 26, 248, 217, 195, 241, 233, 10, 229, 32, 201, 250, 26,
+    248, 217, 228, 50, 229, 32, 201, 250, 26, 209, 43, 200, 165, 200, 27,
+    211, 64, 26, 248, 217, 202, 219, 246, 222, 216, 9, 246, 245, 248, 122, 4,
+    197, 81, 247, 113, 239, 1, 228, 194, 247, 111, 242, 114, 237, 62, 228,
+    194, 247, 112, 242, 104, 247, 112, 237, 54, 237, 55, 223, 89, 215, 44,
+    210, 226, 202, 30, 228, 194, 247, 112, 228, 194, 4, 231, 191, 211, 249,
+    247, 112, 223, 50, 209, 155, 211, 248, 233, 219, 209, 155, 211, 248, 228,
+    203, 248, 198, 249, 252, 200, 37, 217, 216, 228, 199, 219, 53, 228, 199,
+    238, 241, 201, 234, 205, 243, 237, 65, 201, 234, 233, 80, 223, 70, 220,
+    78, 223, 50, 246, 195, 233, 219, 246, 195, 62, 210, 148, 60, 210, 148,
+    194, 122, 62, 232, 206, 194, 122, 60, 232, 206, 207, 19, 60, 207, 19,
+    220, 176, 248, 238, 208, 60, 26, 203, 147, 247, 181, 26, 54, 250, 228,
+    234, 94, 73, 232, 215, 197, 204, 234, 94, 73, 232, 215, 197, 201, 234,
+    94, 73, 232, 215, 197, 199, 234, 94, 73, 232, 215, 197, 197, 234, 94, 73,
+    232, 215, 197, 195, 208, 22, 216, 6, 211, 103, 194, 130, 247, 117, 238,
+    205, 199, 108, 219, 245, 208, 64, 246, 193, 235, 84, 238, 189, 194, 82,
+    202, 226, 202, 224, 228, 204, 208, 34, 230, 250, 204, 6, 216, 49, 207,
+    23, 242, 213, 236, 134, 210, 14, 247, 218, 234, 115, 212, 5, 202, 133,
+    204, 1, 247, 116, 250, 186, 229, 17, 220, 167, 248, 102, 232, 224, 198,
+    150, 232, 224, 247, 226, 198, 6, 230, 16, 242, 214, 248, 255, 242, 214,
+    232, 87, 248, 255, 242, 214, 248, 13, 210, 150, 221, 107, 209, 171, 235,
+    74, 246, 249, 248, 243, 246, 249, 236, 125, 216, 7, 233, 91, 238, 206,
+    233, 91, 199, 109, 233, 91, 208, 65, 233, 91, 246, 194, 233, 91, 235, 85,
+    233, 91, 202, 116, 194, 82, 228, 205, 233, 91, 216, 50, 233, 91, 236,
+    135, 233, 91, 210, 15, 233, 91, 232, 91, 233, 91, 230, 68, 233, 91, 194,
+    26, 233, 91, 248, 117, 233, 91, 211, 21, 233, 91, 210, 15, 213, 112, 210,
+    194, 209, 92, 242, 197, 233, 173, 233, 181, 234, 193, 213, 112, 216, 4,
+    199, 0, 62, 130, 209, 188, 248, 250, 223, 176, 62, 142, 209, 188, 248,
+    250, 223, 176, 62, 46, 209, 188, 248, 250, 223, 176, 62, 51, 209, 188,
+    248, 250, 223, 176, 232, 218, 230, 63, 57, 194, 122, 230, 63, 57, 211,
+    232, 230, 63, 57, 199, 146, 130, 57, 199, 146, 142, 57, 242, 105, 230,
+    38, 57, 211, 184, 230, 38, 57, 238, 174, 194, 22, 230, 18, 233, 176, 214,
+    204, 200, 226, 223, 40, 235, 79, 221, 180, 248, 26, 194, 22, 242, 77,
+    209, 23, 230, 42, 209, 145, 217, 148, 203, 207, 250, 22, 203, 207, 229,
+    154, 203, 207, 194, 22, 206, 37, 194, 22, 247, 199, 232, 146, 247, 79,
+    223, 191, 203, 91, 247, 78, 223, 191, 203, 91, 247, 171, 231, 23, 217,
+    160, 194, 23, 233, 69, 217, 161, 26, 194, 24, 229, 26, 230, 37, 103, 217,
+    6, 229, 26, 230, 37, 103, 194, 21, 229, 26, 230, 37, 209, 180, 211, 247,
+    194, 24, 4, 247, 97, 234, 191, 247, 144, 4, 196, 114, 210, 117, 4, 247,
+    230, 230, 86, 217, 161, 4, 230, 183, 210, 52, 217, 143, 217, 161, 4, 198,
+    14, 211, 224, 217, 160, 211, 224, 194, 23, 248, 254, 239, 2, 194, 7, 209,
+    97, 223, 50, 211, 242, 223, 50, 230, 249, 231, 54, 248, 255, 250, 212,
+    233, 186, 251, 16, 251, 17, 216, 39, 223, 196, 203, 10, 223, 165, 237,
+    51, 210, 116, 230, 177, 237, 210, 219, 158, 215, 69, 209, 179, 233, 92,
+    217, 104, 230, 85, 248, 192, 209, 182, 200, 247, 210, 7, 221, 161, 77,
+    219, 53, 219, 235, 207, 81, 231, 148, 201, 240, 221, 160, 247, 182, 238,
+    209, 4, 229, 233, 194, 103, 248, 113, 229, 233, 247, 136, 229, 233, 103,
+    229, 231, 202, 152, 229, 233, 230, 193, 229, 233, 229, 234, 4, 54, 247,
+    224, 229, 233, 230, 201, 229, 233, 193, 62, 229, 233, 209, 24, 229, 233,
+    229, 234, 4, 207, 141, 207, 162, 229, 231, 229, 234, 237, 106, 237, 5,
+    204, 34, 4, 41, 78, 223, 145, 234, 119, 152, 247, 109, 250, 211, 109,
+    247, 208, 202, 255, 109, 242, 49, 109, 202, 127, 201, 73, 109, 235, 70,
+    237, 186, 109, 210, 8, 80, 209, 172, 232, 188, 248, 38, 236, 167, 109,
+    202, 144, 248, 215, 199, 166, 248, 215, 62, 232, 175, 228, 163, 209, 186,
+    109, 216, 54, 248, 236, 238, 137, 233, 206, 87, 236, 127, 57, 238, 196,
+    246, 215, 248, 197, 4, 193, 60, 57, 248, 197, 4, 236, 127, 57, 248, 197,
+    4, 233, 222, 57, 248, 197, 4, 209, 143, 57, 216, 54, 4, 194, 47, 242,
+    253, 4, 197, 30, 198, 191, 26, 193, 60, 57, 205, 215, 210, 115, 239, 23,
+    247, 142, 216, 118, 232, 180, 236, 192, 211, 167, 236, 198, 235, 30, 232,
+    251, 232, 160, 211, 184, 232, 251, 232, 160, 211, 62, 4, 238, 142, 211,
+    62, 233, 84, 197, 41, 246, 255, 200, 64, 246, 255, 246, 216, 223, 176,
+    242, 253, 4, 197, 30, 198, 190, 242, 253, 4, 235, 92, 198, 190, 248, 194,
+    242, 252, 242, 90, 209, 19, 207, 9, 209, 19, 210, 250, 201, 230, 206,
+    200, 198, 182, 206, 200, 247, 204, 200, 163, 220, 33, 213, 103, 213, 104,
+    4, 237, 105, 238, 208, 242, 84, 247, 205, 211, 184, 247, 205, 230, 201,
+    247, 205, 247, 224, 247, 205, 211, 162, 247, 205, 247, 202, 215, 63, 248,
+    240, 205, 228, 217, 7, 200, 42, 207, 251, 211, 60, 233, 52, 217, 216,
+    206, 17, 250, 183, 209, 44, 251, 122, 219, 55, 242, 237, 217, 19, 211,
+    124, 198, 199, 223, 187, 198, 199, 211, 69, 234, 246, 109, 223, 184, 234,
+    52, 234, 53, 4, 235, 92, 61, 58, 242, 84, 217, 177, 4, 219, 46, 232, 206,
+    242, 84, 217, 177, 4, 208, 39, 232, 206, 211, 184, 217, 177, 4, 208, 39,
+    232, 206, 211, 184, 217, 177, 4, 219, 46, 232, 206, 209, 152, 209, 153,
+    228, 208, 214, 172, 216, 83, 210, 60, 216, 83, 210, 61, 4, 94, 61, 250,
+    27, 220, 28, 196, 38, 216, 82, 216, 83, 210, 61, 211, 250, 213, 143, 216,
+    83, 210, 59, 250, 184, 4, 248, 182, 246, 247, 246, 248, 4, 232, 197, 196,
+    35, 246, 247, 200, 39, 208, 55, 196, 34, 232, 244, 209, 78, 209, 162,
+    201, 252, 209, 120, 248, 121, 197, 224, 94, 250, 73, 242, 86, 94, 26,
+    114, 211, 184, 242, 131, 250, 73, 242, 86, 94, 26, 114, 211, 184, 242,
+    131, 250, 74, 4, 47, 90, 211, 110, 242, 86, 235, 92, 26, 197, 30, 211,
+    184, 242, 131, 250, 73, 250, 182, 235, 92, 26, 197, 30, 211, 184, 242,
+    131, 250, 73, 132, 247, 140, 109, 139, 247, 140, 109, 202, 149, 4, 246,
+    240, 111, 202, 148, 202, 149, 4, 90, 202, 174, 194, 124, 202, 149, 4,
+    112, 202, 174, 194, 123, 248, 164, 234, 119, 209, 212, 220, 23, 217, 189,
+    231, 11, 207, 96, 217, 189, 231, 11, 219, 99, 4, 223, 157, 210, 154, 242,
+    84, 219, 99, 4, 222, 1, 222, 1, 219, 98, 211, 184, 219, 98, 248, 86, 248,
+    87, 4, 246, 240, 111, 247, 203, 219, 166, 109, 208, 56, 247, 72, 248,
+    253, 4, 114, 61, 58, 234, 80, 4, 114, 61, 58, 211, 212, 4, 233, 204, 122,
+    4, 46, 51, 61, 58, 202, 182, 4, 94, 61, 58, 198, 249, 4, 197, 30, 61, 58,
+    213, 143, 90, 197, 69, 234, 146, 109, 221, 254, 200, 30, 223, 151, 16,
+    39, 8, 6, 219, 234, 223, 151, 16, 39, 8, 2, 219, 234, 223, 151, 16, 39,
+    212, 235, 223, 151, 16, 39, 201, 5, 223, 151, 16, 39, 8, 219, 234, 232,
+    231, 234, 119, 198, 244, 193, 253, 230, 69, 212, 218, 26, 247, 210, 229,
+    33, 209, 242, 216, 163, 200, 40, 238, 164, 248, 217, 203, 41, 209, 190,
+    202, 20, 4, 85, 236, 114, 223, 50, 16, 39, 248, 99, 198, 180, 234, 96,
+    60, 50, 247, 72, 62, 50, 247, 72, 220, 73, 207, 237, 242, 130, 220, 73,
+    247, 224, 242, 130, 220, 73, 211, 162, 237, 4, 220, 73, 247, 224, 237, 4,
+    2, 211, 162, 237, 4, 2, 247, 224, 237, 4, 197, 40, 207, 237, 198, 185,
+    235, 95, 207, 237, 198, 185, 197, 40, 2, 207, 237, 198, 185, 235, 95, 2,
+    207, 237, 198, 185, 106, 51, 204, 50, 62, 242, 130, 113, 51, 204, 50, 62,
+    242, 130, 47, 238, 184, 209, 176, 238, 184, 209, 177, 4, 230, 75, 63,
+    238, 184, 209, 176, 213, 107, 46, 204, 183, 4, 112, 236, 111, 213, 107,
+    51, 204, 183, 4, 112, 236, 111, 16, 39, 217, 121, 246, 102, 62, 8, 238,
+    183, 87, 8, 238, 183, 246, 142, 238, 183, 211, 220, 109, 235, 98, 80,
+    210, 179, 222, 157, 216, 22, 200, 255, 217, 2, 4, 214, 16, 247, 159, 247,
+    178, 80, 228, 113, 242, 88, 233, 92, 90, 212, 11, 242, 88, 233, 92, 103,
+    212, 11, 242, 88, 233, 92, 112, 212, 11, 242, 88, 233, 92, 232, 119, 212,
+    11, 242, 88, 233, 92, 232, 214, 212, 11, 242, 88, 233, 92, 203, 41, 212,
+    11, 242, 88, 233, 92, 204, 146, 212, 11, 242, 88, 233, 92, 234, 148, 212,
+    11, 242, 88, 233, 92, 214, 16, 212, 11, 242, 88, 233, 92, 200, 31, 212,
+    11, 242, 88, 233, 92, 234, 112, 212, 11, 242, 88, 233, 92, 197, 245, 212,
+    11, 242, 88, 233, 92, 211, 204, 242, 88, 233, 92, 197, 218, 242, 88, 233,
+    92, 199, 152, 242, 88, 233, 92, 232, 115, 242, 88, 233, 92, 232, 212,
+    242, 88, 233, 92, 203, 37, 242, 88, 233, 92, 204, 145, 242, 88, 233, 92,
+    234, 147, 242, 88, 233, 92, 214, 15, 242, 88, 233, 92, 200, 29, 242, 88,
+    233, 92, 234, 110, 242, 88, 233, 92, 197, 243, 51, 202, 148, 51, 202,
+    149, 4, 90, 202, 174, 194, 124, 51, 202, 149, 4, 112, 202, 174, 194, 123,
+    247, 104, 247, 105, 4, 202, 174, 194, 123, 207, 79, 248, 86, 247, 205,
+    246, 238, 217, 145, 242, 87, 60, 203, 11, 26, 238, 181, 213, 143, 209,
+    248, 229, 25, 217, 161, 223, 191, 247, 81, 201, 137, 219, 227, 202, 253,
+    211, 164, 202, 107, 237, 191, 201, 119, 202, 136, 202, 137, 194, 104,
+    222, 215, 217, 161, 237, 209, 46, 230, 63, 200, 42, 207, 251, 200, 42,
+    207, 252, 4, 211, 61, 51, 230, 63, 200, 42, 207, 251, 62, 198, 230, 200,
+    41, 60, 198, 230, 200, 41, 200, 42, 211, 212, 198, 249, 80, 216, 79, 242,
+    109, 216, 83, 210, 60, 248, 253, 80, 234, 52, 202, 26, 234, 52, 234, 53,
+    4, 219, 192, 232, 167, 234, 52, 210, 155, 136, 202, 26, 234, 52, 219,
+    165, 210, 249, 60, 209, 19, 106, 46, 210, 153, 106, 46, 248, 211, 210,
+    154, 106, 46, 232, 121, 210, 154, 106, 46, 211, 54, 106, 46, 238, 199,
+    46, 193, 247, 230, 62, 163, 211, 232, 230, 63, 57, 208, 39, 230, 63, 4,
+    232, 236, 202, 126, 207, 168, 208, 39, 230, 63, 4, 232, 236, 202, 126,
+    207, 168, 199, 146, 130, 57, 207, 168, 199, 146, 142, 57, 207, 168, 196,
+    37, 230, 62, 207, 168, 230, 63, 4, 85, 232, 241, 233, 192, 208, 39, 230,
+    63, 4, 210, 224, 248, 61, 85, 26, 207, 82, 232, 235, 62, 142, 209, 188,
+    46, 230, 63, 223, 176, 203, 109, 62, 46, 209, 188, 223, 176, 203, 109,
+    62, 51, 209, 188, 223, 176, 203, 109, 60, 46, 209, 188, 223, 176, 203,
+    109, 60, 51, 209, 188, 223, 176, 60, 46, 209, 188, 248, 250, 223, 176,
+    60, 51, 209, 188, 248, 250, 223, 176, 203, 109, 62, 130, 209, 188, 223,
+    176, 203, 109, 62, 142, 209, 188, 223, 176, 203, 109, 60, 130, 209, 188,
+    223, 176, 203, 109, 60, 142, 209, 188, 223, 176, 60, 130, 209, 188, 248,
+    250, 223, 176, 60, 142, 209, 188, 248, 250, 223, 176, 60, 229, 233, 237,
+    50, 239, 23, 222, 0, 26, 216, 6, 112, 214, 181, 239, 22, 209, 93, 209,
+    196, 247, 1, 60, 230, 26, 204, 2, 232, 180, 236, 192, 62, 230, 26, 204,
+    2, 232, 180, 236, 192, 202, 198, 204, 2, 232, 180, 236, 192, 200, 115,
+    246, 199, 194, 42, 221, 255, 90, 247, 73, 216, 6, 103, 247, 73, 216, 6,
+    112, 247, 73, 216, 6, 198, 221, 40, 210, 115, 239, 23, 230, 26, 236, 192,
+    205, 231, 209, 94, 228, 43, 233, 52, 228, 43, 211, 167, 236, 199, 228,
+    43, 236, 140, 4, 199, 244, 236, 140, 4, 199, 245, 26, 210, 44, 236, 140,
+    4, 210, 44, 232, 105, 4, 210, 44, 232, 105, 4, 199, 88, 232, 105, 4, 250,
+    225, 193, 223, 60, 232, 160, 232, 160, 211, 184, 232, 160, 246, 216, 140,
+    236, 176, 246, 216, 232, 251, 247, 173, 232, 251, 247, 14, 234, 90, 213,
+    105, 234, 90, 213, 106, 211, 61, 234, 90, 213, 106, 211, 67, 213, 105,
+    213, 106, 211, 61, 213, 106, 211, 67, 234, 90, 236, 139, 234, 90, 211,
+    61, 234, 90, 211, 59, 236, 139, 211, 61, 211, 59, 194, 134, 202, 133,
+    213, 106, 211, 67, 202, 133, 247, 0, 211, 67, 237, 50, 194, 51, 216, 115,
+    217, 93, 211, 113, 242, 86, 51, 26, 46, 204, 183, 250, 73, 246, 240, 193,
+    223, 223, 182, 232, 153, 203, 21, 109, 237, 104, 232, 153, 203, 21, 109,
+    239, 24, 40, 222, 1, 207, 34, 214, 172, 211, 62, 4, 47, 199, 244, 201,
+    242, 242, 252, 237, 239, 221, 124, 219, 159, 202, 147, 229, 246, 223,
+    191, 203, 91, 112, 208, 13, 58, 112, 208, 13, 63, 112, 208, 13, 220, 28,
+    112, 208, 13, 207, 101, 46, 202, 144, 247, 122, 51, 202, 144, 247, 122,
+    103, 202, 144, 247, 121, 112, 202, 144, 247, 121, 46, 199, 166, 247, 122,
+    51, 199, 166, 247, 122, 46, 250, 211, 247, 122, 51, 250, 211, 247, 122,
+    216, 34, 247, 122, 219, 193, 216, 34, 247, 122, 219, 193, 216, 33, 248,
+    213, 105, 4, 248, 212, 248, 213, 27, 193, 223, 248, 213, 105, 4, 27, 193,
+    223, 248, 213, 28, 27, 193, 223, 248, 213, 105, 4, 28, 27, 193, 223, 152,
+    242, 244, 77, 248, 213, 105, 4, 28, 242, 243, 194, 6, 217, 141, 216, 11,
+    232, 72, 199, 24, 198, 226, 202, 9, 80, 219, 207, 203, 92, 80, 223, 51,
+    215, 248, 230, 197, 233, 91, 230, 197, 233, 92, 4, 202, 230, 233, 173,
+    233, 92, 4, 200, 60, 80, 222, 217, 202, 230, 233, 92, 4, 211, 184, 216,
+    4, 202, 230, 233, 92, 4, 211, 184, 216, 5, 26, 202, 230, 233, 173, 202,
+    230, 233, 92, 4, 211, 184, 216, 5, 26, 242, 51, 201, 72, 202, 230, 233,
+    92, 4, 211, 184, 216, 5, 26, 199, 106, 233, 173, 202, 230, 233, 92, 4,
+    230, 74, 202, 230, 233, 92, 4, 228, 207, 194, 44, 233, 91, 202, 230, 233,
+    92, 4, 202, 230, 233, 173, 233, 92, 206, 7, 237, 84, 232, 151, 207, 211,
+    233, 91, 202, 230, 233, 92, 4, 229, 232, 233, 173, 202, 230, 233, 92, 4,
+    201, 119, 202, 229, 233, 91, 214, 179, 233, 91, 233, 194, 233, 91, 197,
+    75, 233, 91, 233, 92, 4, 242, 51, 201, 72, 210, 146, 233, 91, 239, 15,
+    233, 91, 239, 16, 233, 91, 221, 159, 233, 91, 233, 92, 199, 149, 41, 221,
+    160, 221, 159, 233, 92, 4, 202, 230, 233, 173, 221, 159, 233, 92, 4, 242,
+    84, 233, 173, 233, 92, 4, 201, 192, 199, 0, 233, 92, 4, 201, 192, 199, 1,
+    26, 194, 44, 233, 181, 233, 92, 4, 201, 192, 199, 1, 26, 199, 106, 233,
+    173, 236, 200, 233, 91, 194, 4, 233, 91, 250, 203, 233, 91, 209, 142,
+    233, 91, 238, 166, 233, 91, 210, 119, 233, 91, 233, 92, 4, 219, 72, 80,
+    198, 162, 236, 200, 247, 77, 207, 211, 233, 91, 232, 83, 233, 92, 4, 211,
+    184, 216, 4, 250, 201, 233, 91, 233, 45, 233, 91, 194, 105, 233, 91, 202,
+    254, 233, 91, 199, 68, 233, 91, 230, 198, 233, 91, 219, 56, 238, 166,
+    233, 91, 233, 92, 4, 211, 184, 216, 4, 228, 152, 233, 91, 233, 92, 4,
+    211, 184, 216, 5, 26, 242, 51, 201, 72, 233, 92, 205, 233, 223, 191, 233,
+    46, 250, 34, 233, 91, 232, 172, 233, 91, 202, 255, 233, 91, 236, 167,
+    233, 91, 233, 92, 194, 39, 216, 4, 233, 92, 4, 217, 34, 217, 106, 230,
+    197, 246, 194, 233, 92, 4, 202, 230, 233, 173, 246, 194, 233, 92, 4, 200,
+    60, 80, 222, 217, 202, 230, 246, 194, 233, 92, 4, 211, 184, 216, 4, 202,
+    230, 246, 194, 233, 92, 4, 229, 232, 233, 173, 246, 194, 233, 92, 4, 193,
+    245, 202, 231, 221, 159, 246, 194, 233, 92, 4, 242, 84, 233, 173, 209,
+    142, 246, 194, 233, 91, 238, 166, 246, 194, 233, 91, 194, 105, 246, 194,
+    233, 91, 202, 248, 232, 83, 233, 91, 202, 248, 202, 230, 233, 91, 197,
+    36, 233, 91, 233, 92, 4, 207, 32, 233, 173, 233, 92, 4, 213, 143, 230,
+    241, 231, 125, 233, 92, 4, 211, 232, 231, 125, 210, 117, 247, 179, 237,
+    99, 205, 204, 216, 49, 229, 236, 216, 49, 202, 150, 216, 49, 230, 29,
+    210, 117, 208, 37, 90, 230, 62, 210, 117, 208, 37, 247, 191, 230, 38,
+    223, 191, 246, 144, 210, 117, 232, 82, 210, 117, 4, 209, 142, 233, 91,
+    210, 117, 4, 232, 161, 230, 37, 178, 194, 91, 209, 188, 220, 37, 202,
+    171, 194, 91, 209, 188, 220, 37, 178, 234, 186, 209, 188, 220, 37, 202,
+    171, 234, 186, 209, 188, 220, 37, 163, 178, 194, 91, 209, 188, 220, 37,
+    163, 202, 171, 194, 91, 209, 188, 220, 37, 163, 178, 234, 186, 209, 188,
+    220, 37, 163, 202, 171, 234, 186, 209, 188, 220, 37, 178, 194, 91, 209,
+    188, 196, 19, 220, 37, 202, 171, 194, 91, 209, 188, 196, 19, 220, 37,
+    178, 234, 186, 209, 188, 196, 19, 220, 37, 202, 171, 234, 186, 209, 188,
+    196, 19, 220, 37, 87, 178, 194, 91, 209, 188, 196, 19, 220, 37, 87, 202,
+    171, 194, 91, 209, 188, 196, 19, 220, 37, 87, 178, 234, 186, 209, 188,
+    196, 19, 220, 37, 87, 202, 171, 234, 186, 209, 188, 196, 19, 220, 37,
+    178, 194, 91, 209, 188, 247, 118, 202, 171, 194, 91, 209, 188, 247, 118,
+    178, 234, 186, 209, 188, 247, 118, 202, 171, 234, 186, 209, 188, 247,
+    118, 87, 178, 194, 91, 209, 188, 247, 118, 87, 202, 171, 194, 91, 209,
+    188, 247, 118, 87, 178, 234, 186, 209, 188, 247, 118, 87, 202, 171, 234,
+    186, 209, 188, 247, 118, 229, 24, 208, 152, 50, 211, 150, 229, 24, 208,
+    152, 50, 211, 151, 223, 191, 60, 202, 106, 202, 191, 208, 152, 50, 211,
+    150, 202, 191, 208, 152, 50, 211, 151, 223, 191, 60, 202, 106, 114, 207,
+    39, 197, 30, 207, 39, 94, 207, 39, 235, 92, 207, 39, 27, 34, 233, 243,
+    211, 150, 87, 27, 34, 233, 243, 211, 150, 34, 211, 184, 233, 243, 211,
+    150, 87, 34, 211, 184, 233, 243, 211, 150, 87, 250, 230, 211, 150, 201,
+    75, 250, 230, 211, 150, 49, 87, 55, 163, 242, 39, 208, 142, 122, 211,
+    150, 49, 87, 55, 242, 39, 208, 142, 122, 211, 150, 49, 87, 132, 55, 242,
+    39, 208, 142, 122, 211, 150, 87, 223, 131, 211, 150, 49, 223, 131, 211,
+    150, 87, 49, 223, 131, 211, 150, 196, 53, 87, 202, 189, 196, 53, 87, 207,
+    169, 202, 189, 242, 242, 247, 216, 207, 169, 242, 242, 247, 216, 207, 39,
+    229, 215, 202, 4, 219, 96, 208, 44, 246, 217, 229, 151, 198, 213, 229,
+    151, 198, 214, 4, 247, 107, 213, 112, 198, 213, 216, 233, 152, 208, 45,
+    202, 10, 198, 211, 198, 212, 246, 217, 247, 82, 211, 208, 247, 82, 198,
+    158, 247, 83, 201, 238, 216, 119, 250, 234, 232, 232, 234, 72, 209, 180,
+    246, 217, 211, 208, 209, 180, 246, 217, 200, 89, 211, 208, 200, 89, 249,
+    251, 211, 208, 249, 251, 207, 244, 196, 115, 237, 80, 198, 149, 250, 67,
+    219, 63, 198, 220, 216, 42, 216, 10, 208, 43, 201, 89, 208, 43, 216, 10,
+    247, 13, 251, 94, 198, 210, 203, 220, 207, 6, 202, 142, 229, 5, 198, 217,
+    219, 195, 84, 198, 217, 219, 195, 239, 2, 57, 209, 180, 246, 201, 207,
+    162, 219, 195, 198, 182, 232, 207, 211, 212, 209, 154, 236, 118, 213,
+    143, 234, 58, 57, 202, 228, 109, 213, 143, 202, 228, 109, 209, 18, 219,
+    148, 223, 191, 223, 79, 209, 232, 109, 236, 147, 213, 111, 219, 148, 109,
+    209, 148, 194, 130, 109, 213, 127, 194, 130, 109, 248, 37, 213, 143, 248,
+    36, 248, 35, 216, 10, 248, 35, 210, 170, 213, 143, 210, 169, 242, 205,
+    238, 175, 217, 1, 109, 194, 20, 109, 207, 178, 248, 255, 109, 199, 25,
+    194, 130, 242, 81, 203, 175, 248, 167, 248, 165, 210, 208, 238, 242, 238,
+    123, 248, 232, 242, 110, 46, 219, 26, 198, 186, 4, 207, 7, 238, 222, 209,
+    81, 57, 47, 223, 165, 202, 172, 247, 170, 109, 231, 22, 109, 238, 214,
+    26, 220, 84, 202, 255, 251, 140, 203, 198, 248, 231, 248, 85, 248, 86,
+    248, 109, 209, 232, 80, 194, 3, 212, 8, 57, 203, 198, 198, 159, 201, 188,
+    211, 58, 229, 147, 200, 33, 228, 151, 234, 114, 230, 70, 26, 193, 253,
+    203, 233, 211, 237, 235, 67, 216, 14, 208, 44, 198, 222, 216, 17, 247,
+    215, 197, 40, 216, 130, 251, 50, 197, 40, 251, 50, 197, 40, 2, 251, 50,
+    2, 251, 50, 213, 116, 251, 50, 251, 51, 237, 64, 251, 51, 250, 80, 206,
+    16, 211, 208, 232, 232, 234, 72, 236, 250, 219, 96, 210, 212, 203, 220,
+    205, 237, 216, 17, 205, 237, 246, 228, 203, 1, 232, 167, 206, 11, 203,
+    17, 249, 253, 207, 137, 210, 45, 198, 149, 207, 33, 203, 18, 156, 16, 39,
+    208, 148, 156, 16, 39, 251, 52, 156, 16, 39, 232, 231, 156, 16, 39, 234,
+    189, 156, 16, 39, 194, 129, 156, 16, 39, 250, 133, 156, 16, 39, 250, 134,
+    207, 231, 156, 16, 39, 250, 134, 207, 230, 156, 16, 39, 250, 134, 196, 2,
+    156, 16, 39, 250, 134, 196, 1, 156, 16, 39, 196, 16, 156, 16, 39, 196,
+    15, 156, 16, 39, 196, 14, 156, 16, 39, 201, 130, 156, 16, 39, 210, 69,
+    201, 130, 156, 16, 39, 60, 201, 130, 156, 16, 39, 217, 0, 201, 161, 156,
+    16, 39, 217, 0, 201, 160, 156, 16, 39, 217, 0, 201, 159, 156, 16, 39,
+    242, 133, 156, 16, 39, 206, 55, 156, 16, 39, 214, 3, 156, 16, 39, 196, 0,
+    156, 16, 39, 195, 255, 156, 16, 39, 207, 41, 206, 55, 156, 16, 39, 207,
+    41, 206, 54, 156, 16, 39, 230, 245, 156, 16, 39, 203, 88, 156, 16, 39,
+    223, 102, 211, 157, 156, 16, 39, 223, 102, 211, 156, 156, 16, 39, 238,
+    188, 80, 223, 101, 156, 16, 39, 207, 227, 80, 223, 101, 156, 16, 39, 238,
+    233, 211, 157, 156, 16, 39, 223, 100, 211, 157, 156, 16, 39, 201, 162,
+    80, 238, 232, 156, 16, 39, 238, 188, 80, 238, 232, 156, 16, 39, 238, 188,
+    80, 238, 231, 156, 16, 39, 238, 233, 250, 176, 156, 16, 39, 206, 56, 80,
+    238, 233, 250, 176, 156, 16, 39, 201, 162, 80, 206, 56, 80, 238, 232,
+    156, 16, 39, 196, 109, 156, 16, 39, 199, 81, 211, 157, 156, 16, 39, 220,
+    41, 211, 157, 156, 16, 39, 250, 175, 211, 157, 156, 16, 39, 201, 162, 80,
+    250, 174, 156, 16, 39, 206, 56, 80, 250, 174, 156, 16, 39, 201, 162, 80,
+    206, 56, 80, 250, 174, 156, 16, 39, 196, 17, 80, 250, 174, 156, 16, 39,
+    207, 227, 80, 250, 174, 156, 16, 39, 207, 227, 80, 250, 173, 156, 16, 39,
+    207, 226, 156, 16, 39, 207, 225, 156, 16, 39, 207, 224, 156, 16, 39, 207,
+    223, 156, 16, 39, 251, 11, 156, 16, 39, 251, 10, 156, 16, 39, 217, 132,
+    156, 16, 39, 206, 62, 156, 16, 39, 250, 72, 156, 16, 39, 207, 255, 156,
+    16, 39, 207, 254, 156, 16, 39, 249, 255, 156, 16, 39, 248, 3, 211, 157,
+    156, 16, 39, 200, 110, 156, 16, 39, 200, 109, 156, 16, 39, 208, 154, 219,
+    184, 156, 16, 39, 247, 196, 156, 16, 39, 247, 195, 156, 16, 39, 247, 194,
+    156, 16, 39, 250, 243, 156, 16, 39, 211, 236, 156, 16, 39, 202, 129, 156,
+    16, 39, 199, 79, 156, 16, 39, 230, 165, 156, 16, 39, 194, 117, 156, 16,
+    39, 209, 141, 156, 16, 39, 246, 252, 156, 16, 39, 198, 1, 156, 16, 39,
+    246, 219, 216, 23, 156, 16, 39, 205, 247, 80, 222, 219, 156, 16, 39, 247,
+    10, 156, 16, 39, 198, 179, 156, 16, 39, 202, 17, 198, 179, 156, 16, 39,
+    219, 95, 156, 16, 39, 202, 203, 156, 16, 39, 197, 19, 156, 16, 39, 228,
+    205, 235, 45, 156, 16, 39, 250, 48, 156, 16, 39, 209, 150, 250, 48, 156,
+    16, 39, 247, 145, 156, 16, 39, 209, 140, 247, 145, 156, 16, 39, 250, 240,
+    156, 16, 39, 201, 225, 201, 111, 201, 224, 156, 16, 39, 201, 225, 201,
+    111, 201, 223, 156, 16, 39, 201, 158, 156, 16, 39, 209, 113, 156, 16, 39,
+    236, 187, 156, 16, 39, 236, 189, 156, 16, 39, 236, 188, 156, 16, 39, 209,
+    27, 156, 16, 39, 209, 16, 156, 16, 39, 238, 173, 156, 16, 39, 238, 172,
+    156, 16, 39, 238, 171, 156, 16, 39, 238, 170, 156, 16, 39, 238, 169, 156,
+    16, 39, 251, 25, 156, 16, 39, 248, 168, 80, 217, 113, 156, 16, 39, 248,
+    168, 80, 196, 143, 156, 16, 39, 207, 176, 156, 16, 39, 228, 197, 156, 16,
+    39, 214, 31, 156, 16, 39, 237, 173, 156, 16, 39, 216, 37, 156, 16, 39,
+    138, 235, 82, 156, 16, 39, 138, 211, 128, 60, 220, 23, 223, 85, 51, 198,
+    185, 60, 197, 40, 223, 85, 51, 198, 185, 60, 207, 96, 223, 85, 51, 198,
+    185, 60, 235, 95, 223, 85, 51, 198, 185, 60, 202, 248, 2, 242, 130, 217,
+    31, 28, 62, 242, 130, 28, 62, 242, 130, 87, 62, 242, 130, 196, 53, 87,
+    62, 242, 130, 233, 185, 87, 62, 242, 130, 62, 242, 131, 238, 254, 60, 2,
+    242, 130, 207, 9, 200, 111, 60, 199, 76, 202, 106, 60, 202, 248, 2, 202,
+    106, 152, 62, 202, 106, 217, 31, 62, 202, 106, 28, 62, 202, 106, 87, 62,
+    202, 106, 196, 53, 87, 62, 202, 106, 233, 185, 87, 62, 202, 106, 62, 50,
+    238, 254, 60, 196, 53, 2, 202, 106, 62, 50, 238, 254, 60, 217, 31, 202,
+    106, 50, 200, 111, 60, 199, 76, 237, 4, 60, 196, 53, 2, 237, 4, 60, 217,
+    31, 2, 237, 4, 62, 237, 5, 238, 254, 60, 196, 53, 2, 237, 4, 62, 237, 5,
+    238, 254, 60, 217, 31, 237, 4, 237, 5, 200, 111, 60, 199, 76, 219, 43,
+    60, 196, 53, 2, 219, 43, 60, 217, 31, 2, 219, 43, 62, 219, 44, 238, 254,
+    60, 2, 219, 43, 199, 195, 33, 238, 183, 152, 33, 238, 183, 217, 31, 33,
+    238, 183, 28, 33, 238, 183, 196, 53, 28, 33, 238, 183, 196, 53, 87, 33,
+    238, 183, 233, 185, 87, 33, 238, 183, 199, 195, 206, 51, 152, 206, 51,
+    217, 31, 206, 51, 28, 206, 51, 87, 206, 51, 196, 53, 87, 206, 51, 233,
+    185, 87, 206, 51, 152, 232, 214, 202, 122, 250, 37, 217, 31, 232, 214,
+    202, 122, 250, 37, 28, 232, 214, 202, 122, 250, 37, 87, 232, 214, 202,
+    122, 250, 37, 196, 53, 87, 232, 214, 202, 122, 250, 37, 233, 185, 87,
+    232, 214, 202, 122, 250, 37, 152, 203, 41, 202, 122, 250, 37, 217, 31,
+    203, 41, 202, 122, 250, 37, 28, 203, 41, 202, 122, 250, 37, 87, 203, 41,
+    202, 122, 250, 37, 196, 53, 87, 203, 41, 202, 122, 250, 37, 233, 185, 87,
+    203, 41, 202, 122, 250, 37, 152, 234, 148, 202, 122, 250, 37, 217, 31,
+    234, 148, 202, 122, 250, 37, 28, 234, 148, 202, 122, 250, 37, 87, 234,
+    148, 202, 122, 250, 37, 196, 53, 87, 234, 148, 202, 122, 250, 37, 152,
+    112, 209, 190, 60, 202, 19, 217, 31, 112, 209, 190, 60, 202, 19, 112,
+    209, 190, 60, 202, 19, 217, 31, 112, 209, 190, 209, 254, 202, 19, 152,
+    232, 119, 209, 190, 60, 202, 19, 217, 31, 232, 119, 209, 190, 60, 202,
+    19, 232, 119, 209, 190, 60, 202, 19, 217, 31, 232, 119, 209, 190, 209,
+    254, 202, 19, 207, 169, 152, 232, 119, 209, 190, 209, 254, 202, 19, 152,
+    232, 214, 209, 190, 60, 202, 19, 87, 232, 214, 209, 190, 60, 202, 19,
+    217, 31, 203, 41, 209, 190, 60, 202, 19, 87, 203, 41, 209, 190, 60, 202,
+    19, 203, 41, 209, 190, 209, 254, 202, 19, 217, 31, 234, 148, 209, 190,
+    60, 202, 19, 87, 234, 148, 209, 190, 60, 202, 19, 196, 53, 87, 234, 148,
+    209, 190, 60, 202, 19, 87, 234, 148, 209, 190, 209, 254, 202, 19, 152,
+    197, 245, 209, 190, 60, 202, 19, 87, 197, 245, 209, 190, 60, 202, 19, 87,
+    197, 245, 209, 190, 209, 254, 202, 19, 47, 198, 185, 214, 199, 47, 198,
+    185, 47, 202, 106, 214, 199, 47, 202, 106, 220, 73, 211, 162, 242, 130,
+    220, 73, 193, 62, 242, 130, 220, 73, 230, 201, 242, 130, 220, 73, 209,
+    24, 242, 130, 220, 73, 247, 133, 242, 130, 220, 73, 207, 237, 202, 106,
+    220, 73, 247, 224, 202, 106, 220, 73, 211, 162, 202, 106, 220, 73, 193,
+    62, 202, 106, 220, 73, 230, 201, 202, 106, 220, 73, 209, 24, 202, 106,
+    220, 73, 247, 133, 202, 106, 114, 61, 4, 2, 198, 186, 250, 77, 197, 30,
+    61, 4, 2, 198, 186, 250, 77, 94, 61, 4, 2, 198, 186, 250, 77, 235, 92,
+    61, 4, 2, 198, 186, 250, 77, 114, 61, 4, 217, 31, 198, 186, 250, 77, 197,
+    30, 61, 4, 217, 31, 198, 186, 250, 77, 94, 61, 4, 217, 31, 198, 186, 250,
+    77, 235, 92, 61, 4, 217, 31, 198, 186, 250, 77, 114, 61, 4, 220, 73, 198,
+    186, 250, 77, 197, 30, 61, 4, 220, 73, 198, 186, 250, 77, 94, 61, 4, 220,
+    73, 198, 186, 250, 77, 235, 92, 61, 4, 220, 73, 198, 186, 250, 77, 114,
+    61, 4, 2, 234, 24, 250, 77, 197, 30, 61, 4, 2, 234, 24, 250, 77, 94, 61,
+    4, 2, 234, 24, 250, 77, 235, 92, 61, 4, 2, 234, 24, 250, 77, 114, 61, 4,
+    234, 24, 250, 77, 197, 30, 61, 4, 234, 24, 250, 77, 94, 61, 4, 234, 24,
+    250, 77, 235, 92, 61, 4, 234, 24, 250, 77, 87, 114, 61, 4, 234, 24, 250,
+    77, 87, 197, 30, 61, 4, 234, 24, 250, 77, 87, 94, 61, 4, 234, 24, 250,
+    77, 87, 235, 92, 61, 4, 234, 24, 250, 77, 87, 114, 61, 4, 220, 73, 234,
+    24, 250, 77, 87, 197, 30, 61, 4, 220, 73, 234, 24, 250, 77, 87, 94, 61,
+    4, 220, 73, 234, 24, 250, 77, 87, 235, 92, 61, 4, 220, 73, 234, 24, 250,
+    77, 114, 198, 184, 61, 4, 215, 50, 204, 48, 197, 30, 198, 184, 61, 4,
+    215, 50, 204, 48, 94, 198, 184, 61, 4, 215, 50, 204, 48, 235, 92, 198,
+    184, 61, 4, 215, 50, 204, 48, 114, 198, 184, 61, 4, 217, 31, 204, 48,
+    197, 30, 198, 184, 61, 4, 217, 31, 204, 48, 94, 198, 184, 61, 4, 217, 31,
+    204, 48, 235, 92, 198, 184, 61, 4, 217, 31, 204, 48, 114, 198, 184, 61,
+    4, 28, 204, 48, 197, 30, 198, 184, 61, 4, 28, 204, 48, 94, 198, 184, 61,
+    4, 28, 204, 48, 235, 92, 198, 184, 61, 4, 28, 204, 48, 114, 198, 184, 61,
+    4, 87, 204, 48, 197, 30, 198, 184, 61, 4, 87, 204, 48, 94, 198, 184, 61,
+    4, 87, 204, 48, 235, 92, 198, 184, 61, 4, 87, 204, 48, 114, 198, 184, 61,
+    4, 196, 53, 87, 204, 48, 197, 30, 198, 184, 61, 4, 196, 53, 87, 204, 48,
+    94, 198, 184, 61, 4, 196, 53, 87, 204, 48, 235, 92, 198, 184, 61, 4, 196,
+    53, 87, 204, 48, 114, 232, 239, 54, 197, 30, 232, 239, 54, 94, 232, 239,
+    54, 235, 92, 232, 239, 54, 114, 108, 54, 197, 30, 108, 54, 94, 108, 54,
+    235, 92, 108, 54, 114, 239, 25, 54, 197, 30, 239, 25, 54, 94, 239, 25,
+    54, 235, 92, 239, 25, 54, 114, 87, 239, 25, 54, 197, 30, 87, 239, 25, 54,
+    94, 87, 239, 25, 54, 235, 92, 87, 239, 25, 54, 114, 87, 54, 197, 30, 87,
+    54, 94, 87, 54, 235, 92, 87, 54, 114, 49, 54, 197, 30, 49, 54, 94, 49,
+    54, 235, 92, 49, 54, 178, 194, 91, 49, 54, 178, 234, 186, 49, 54, 202,
+    171, 234, 186, 49, 54, 202, 171, 194, 91, 49, 54, 46, 51, 49, 54, 130,
+    142, 49, 54, 194, 63, 114, 152, 173, 54, 194, 63, 197, 30, 152, 173, 54,
+    194, 63, 94, 152, 173, 54, 194, 63, 235, 92, 152, 173, 54, 194, 63, 178,
+    194, 91, 152, 173, 54, 194, 63, 178, 234, 186, 152, 173, 54, 194, 63,
+    202, 171, 234, 186, 152, 173, 54, 194, 63, 202, 171, 194, 91, 152, 173,
+    54, 194, 63, 114, 173, 54, 194, 63, 197, 30, 173, 54, 194, 63, 94, 173,
+    54, 194, 63, 235, 92, 173, 54, 194, 63, 178, 194, 91, 173, 54, 194, 63,
+    178, 234, 186, 173, 54, 194, 63, 202, 171, 234, 186, 173, 54, 194, 63,
+    202, 171, 194, 91, 173, 54, 194, 63, 114, 217, 31, 173, 54, 194, 63, 197,
+    30, 217, 31, 173, 54, 194, 63, 94, 217, 31, 173, 54, 194, 63, 235, 92,
+    217, 31, 173, 54, 194, 63, 178, 194, 91, 217, 31, 173, 54, 194, 63, 178,
+    234, 186, 217, 31, 173, 54, 194, 63, 202, 171, 234, 186, 217, 31, 173,
+    54, 194, 63, 202, 171, 194, 91, 217, 31, 173, 54, 194, 63, 114, 87, 173,
+    54, 194, 63, 197, 30, 87, 173, 54, 194, 63, 94, 87, 173, 54, 194, 63,
+    235, 92, 87, 173, 54, 194, 63, 178, 194, 91, 87, 173, 54, 194, 63, 178,
+    234, 186, 87, 173, 54, 194, 63, 202, 171, 234, 186, 87, 173, 54, 194, 63,
+    202, 171, 194, 91, 87, 173, 54, 194, 63, 114, 196, 53, 87, 173, 54, 194,
+    63, 197, 30, 196, 53, 87, 173, 54, 194, 63, 94, 196, 53, 87, 173, 54,
+    194, 63, 235, 92, 196, 53, 87, 173, 54, 194, 63, 178, 194, 91, 196, 53,
+    87, 173, 54, 194, 63, 178, 234, 186, 196, 53, 87, 173, 54, 194, 63, 202,
+    171, 234, 186, 196, 53, 87, 173, 54, 194, 63, 202, 171, 194, 91, 196, 53,
+    87, 173, 54, 114, 198, 186, 250, 77, 197, 30, 198, 186, 250, 77, 94, 198,
+    186, 250, 77, 235, 92, 198, 186, 250, 77, 114, 62, 61, 194, 41, 198, 186,
+    250, 77, 197, 30, 62, 61, 194, 41, 198, 186, 250, 77, 94, 62, 61, 194,
+    41, 198, 186, 250, 77, 235, 92, 62, 61, 194, 41, 198, 186, 250, 77, 114,
+    61, 4, 213, 107, 200, 147, 197, 30, 61, 4, 213, 107, 200, 147, 94, 61, 4,
+    213, 107, 200, 147, 235, 92, 61, 4, 213, 107, 200, 147, 87, 61, 204, 49,
+    194, 61, 101, 87, 61, 204, 49, 194, 61, 103, 199, 188, 87, 61, 204, 49,
+    194, 61, 90, 230, 78, 87, 61, 204, 49, 194, 61, 90, 199, 191, 114, 247,
+    185, 62, 54, 94, 247, 188, 204, 51, 62, 54, 114, 198, 249, 204, 51, 62,
+    54, 94, 198, 249, 204, 51, 62, 54, 114, 220, 22, 62, 54, 94, 207, 95, 62,
+    54, 114, 207, 95, 62, 54, 94, 220, 22, 62, 54, 114, 248, 251, 204, 50,
+    62, 54, 94, 248, 251, 204, 50, 62, 54, 114, 232, 86, 204, 50, 62, 54, 94,
+    232, 86, 204, 50, 62, 54, 62, 61, 204, 49, 194, 61, 101, 62, 61, 204, 49,
+    194, 61, 103, 199, 188, 61, 209, 188, 197, 30, 199, 216, 178, 194, 90,
+    61, 209, 188, 94, 199, 216, 238, 128, 202, 171, 194, 90, 47, 238, 184,
+    232, 133, 4, 232, 119, 236, 111, 47, 238, 184, 232, 133, 4, 103, 236,
+    111, 47, 238, 184, 232, 132, 46, 138, 242, 131, 4, 232, 119, 236, 111,
+    46, 138, 242, 131, 4, 112, 236, 111, 46, 138, 242, 131, 4, 103, 236, 111,
+    46, 138, 242, 131, 4, 236, 114, 46, 138, 242, 130, 235, 93, 233, 84, 128,
+    235, 93, 233, 84, 213, 107, 128, 235, 93, 233, 84, 229, 15, 4, 236, 114,
+    235, 93, 233, 84, 213, 107, 229, 15, 4, 236, 114, 210, 3, 232, 235, 62,
+    229, 233, 247, 133, 229, 233, 210, 2, 230, 62, 192, 17, 233, 91, 216, 53,
+    233, 91, 233, 92, 4, 199, 212, 214, 187, 233, 91, 199, 193, 233, 91, 233,
+    92, 4, 229, 244, 207, 43, 233, 91, 228, 172, 233, 91, 3, 80, 199, 225,
+    228, 207, 246, 254, 217, 49, 230, 62, 208, 39, 248, 253, 80, 230, 62,
+    220, 27, 232, 219, 207, 100, 232, 219, 230, 36, 230, 63, 4, 140, 26, 85,
+    232, 236, 238, 179, 228, 97, 219, 53, 192, 228, 230, 63, 57, 233, 92, 4,
+    238, 204, 230, 18, 242, 73, 233, 91, 215, 39, 233, 91, 207, 32, 211, 212,
+    199, 225, 232, 183, 220, 59, 235, 73, 233, 91, 218, 246, 233, 91, 233,
+    92, 211, 40, 202, 222, 233, 91, 233, 92, 4, 90, 233, 180, 208, 38, 230,
+    197, 233, 92, 4, 202, 20, 233, 173, 230, 197, 233, 92, 4, 90, 220, 73,
+    26, 90, 2, 233, 181, 233, 92, 4, 232, 241, 238, 207, 242, 84, 219, 159,
+    204, 157, 233, 92, 4, 201, 6, 238, 207, 216, 4, 202, 230, 233, 92, 4,
+    202, 230, 233, 174, 26, 230, 63, 238, 207, 216, 4, 233, 92, 4, 211, 184,
+    216, 5, 195, 237, 203, 209, 233, 92, 4, 233, 196, 229, 245, 209, 110,
+    194, 23, 247, 153, 211, 39, 130, 199, 26, 204, 186, 209, 98, 217, 161,
+    223, 191, 197, 253, 216, 19, 242, 175, 203, 168, 210, 117, 236, 131, 246,
+    198, 222, 209, 233, 26, 216, 78, 210, 141, 193, 252, 194, 130, 209, 178,
+    230, 41, 236, 173, 217, 106, 194, 55, 232, 175, 235, 68, 4, 235, 66, 242,
+    91, 231, 10, 198, 25, 231, 11, 202, 119, 230, 252, 214, 182, 207, 102,
+    232, 226, 209, 232, 217, 37, 205, 212, 209, 232, 217, 37, 199, 192, 209,
+    232, 217, 37, 247, 172, 231, 5, 217, 117, 250, 65, 197, 58, 238, 139,
+    201, 240, 220, 169, 201, 250, 26, 248, 217, 202, 197, 232, 167, 236, 198,
+    238, 187, 249, 242, 238, 155, 248, 244, 209, 147, 246, 202, 248, 230,
+    247, 156, 230, 201, 206, 60, 204, 41, 211, 26, 80, 232, 151, 201, 189,
+    232, 194, 234, 162, 231, 12, 80, 216, 129, 210, 175, 221, 154, 211, 22,
+    235, 50, 232, 128, 238, 237, 200, 139, 247, 173, 242, 182, 247, 178, 4,
+    202, 119, 238, 149, 4, 201, 222, 242, 57, 247, 137, 210, 43, 209, 102,
+    238, 122, 80, 217, 40, 206, 35, 246, 230, 232, 151, 220, 36, 230, 200,
+    217, 152, 216, 30, 247, 5, 248, 233, 202, 230, 233, 92, 4, 202, 230, 233,
+    174, 26, 112, 229, 231, 193, 76, 233, 91, 202, 230, 233, 92, 4, 200, 65,
+    233, 92, 4, 210, 219, 228, 209, 26, 210, 219, 230, 18, 233, 92, 4, 197,
+    62, 233, 174, 26, 194, 121, 216, 4, 211, 116, 233, 91, 232, 98, 233, 91,
+    214, 10, 236, 196, 233, 91, 233, 92, 4, 209, 218, 233, 173, 206, 23, 220,
+    178, 242, 60, 230, 248, 229, 149, 247, 200, 232, 196, 203, 207, 238, 201,
+    219, 163, 233, 91, 205, 235, 198, 13, 197, 60, 233, 91, 234, 196, 235,
+    58, 248, 170, 204, 27, 211, 105, 232, 111, 233, 91, 247, 74, 237, 98,
+    230, 234, 219, 142, 207, 155, 203, 170, 202, 100, 231, 24, 233, 91, 192,
+    83, 233, 91, 229, 226, 206, 8, 200, 227, 238, 190, 222, 116, 219, 134,
+    210, 177, 229, 141, 210, 225, 208, 63, 219, 105, 216, 21, 216, 165, 248,
+    239, 201, 77, 217, 162, 236, 137, 202, 242, 211, 133, 211, 161, 203, 9,
+    232, 198, 211, 95, 248, 111, 248, 2, 205, 216, 230, 170, 236, 134, 209,
+    87, 246, 232, 234, 94, 242, 28, 207, 237, 230, 86, 234, 94, 242, 28, 238,
+    138, 230, 86, 234, 94, 242, 28, 248, 219, 234, 94, 242, 28, 62, 230, 86,
+    247, 207, 220, 16, 232, 149, 198, 251, 201, 109, 201, 104, 206, 82, 196,
+    51, 234, 194, 4, 229, 235, 251, 62, 216, 15, 194, 77, 217, 144, 194, 77,
+    217, 39, 250, 92, 217, 39, 220, 16, 242, 236, 194, 102, 238, 147, 206,
+    56, 204, 45, 248, 59, 247, 173, 231, 190, 211, 200, 233, 73, 194, 158,
+    247, 75, 217, 100, 235, 77, 228, 50, 238, 157, 247, 123, 200, 68, 202,
+    22, 210, 116, 221, 126, 210, 116, 237, 114, 210, 116, 233, 92, 4, 216,
+    48, 251, 112, 242, 206, 211, 224, 251, 112, 248, 115, 210, 116, 210, 117,
+    4, 229, 240, 210, 117, 223, 191, 202, 1, 207, 24, 210, 117, 242, 93, 210,
+    117, 223, 191, 219, 58, 209, 159, 217, 192, 233, 75, 196, 146, 216, 249,
+    234, 109, 231, 141, 192, 6, 247, 163, 211, 162, 229, 233, 248, 24, 246,
+    226, 205, 248, 231, 4, 242, 60, 202, 200, 207, 237, 231, 36, 234, 52,
+    232, 230, 223, 14, 209, 12, 210, 42, 200, 10, 198, 35, 210, 101, 236,
+    194, 236, 148, 55, 229, 214, 242, 33, 251, 154, 232, 232, 233, 190, 198,
+    253, 247, 145, 217, 190, 219, 26, 219, 59, 247, 189, 202, 120, 80, 199,
+    162, 248, 218, 80, 193, 89, 206, 82, 210, 6, 200, 59, 248, 116, 247, 134,
+    248, 175, 207, 35, 80, 210, 251, 248, 194, 80, 202, 203, 202, 121, 207,
+    253, 215, 33, 250, 226, 214, 179, 242, 225, 221, 176, 214, 179, 242, 225,
+    208, 160, 214, 179, 242, 225, 207, 25, 214, 179, 242, 225, 248, 5, 214,
+    179, 242, 225, 221, 122, 214, 179, 242, 225, 210, 192, 62, 242, 225, 221,
+    123, 207, 16, 232, 125, 237, 94, 60, 242, 225, 221, 123, 207, 16, 232,
+    125, 237, 94, 214, 179, 242, 225, 221, 123, 207, 16, 232, 125, 237, 94,
+    62, 242, 225, 221, 177, 207, 16, 214, 12, 237, 94, 62, 242, 225, 208,
+    161, 207, 16, 214, 12, 237, 94, 62, 242, 225, 207, 26, 207, 16, 214, 12,
+    237, 94, 62, 242, 225, 248, 6, 207, 16, 214, 12, 237, 94, 62, 242, 225,
+    221, 123, 207, 16, 214, 12, 237, 94, 62, 242, 225, 210, 193, 207, 16,
+    214, 12, 237, 94, 60, 242, 225, 221, 177, 207, 16, 214, 12, 237, 94, 60,
+    242, 225, 208, 161, 207, 16, 214, 12, 237, 94, 60, 242, 225, 207, 26,
+    207, 16, 214, 12, 237, 94, 60, 242, 225, 248, 6, 207, 16, 214, 12, 237,
+    94, 60, 242, 225, 221, 123, 207, 16, 214, 12, 237, 94, 60, 242, 225, 210,
+    193, 207, 16, 214, 12, 237, 94, 214, 179, 242, 225, 221, 177, 207, 16,
+    214, 12, 237, 94, 214, 179, 242, 225, 208, 161, 207, 16, 214, 12, 237,
+    94, 214, 179, 242, 225, 207, 26, 207, 16, 214, 12, 237, 94, 214, 179,
+    242, 225, 248, 6, 207, 16, 214, 12, 237, 94, 214, 179, 242, 225, 221,
+    123, 207, 16, 214, 12, 237, 94, 214, 179, 242, 225, 210, 193, 207, 16,
+    214, 12, 237, 94, 62, 242, 225, 221, 123, 207, 16, 90, 228, 163, 199,
+    183, 237, 94, 60, 242, 225, 221, 123, 207, 16, 90, 228, 163, 199, 183,
+    237, 94, 214, 179, 242, 225, 221, 123, 207, 16, 90, 228, 163, 199, 183,
+    237, 94, 62, 242, 225, 163, 221, 176, 62, 242, 225, 163, 208, 160, 62,
+    242, 225, 163, 207, 25, 62, 242, 225, 163, 248, 5, 62, 242, 225, 163,
+    221, 122, 62, 242, 225, 163, 210, 192, 60, 242, 225, 163, 221, 176, 60,
+    242, 225, 163, 208, 160, 60, 242, 225, 163, 207, 25, 60, 242, 225, 163,
+    248, 5, 60, 242, 225, 163, 221, 122, 60, 242, 225, 163, 210, 192, 214,
+    179, 242, 225, 163, 221, 176, 214, 179, 242, 225, 163, 208, 160, 214,
+    179, 242, 225, 163, 207, 25, 214, 179, 242, 225, 163, 248, 5, 214, 179,
+    242, 225, 163, 221, 122, 214, 179, 242, 225, 163, 210, 192, 62, 242, 225,
+    221, 123, 207, 16, 103, 228, 163, 197, 236, 237, 94, 60, 242, 225, 221,
+    123, 207, 16, 103, 228, 163, 197, 236, 237, 94, 214, 179, 242, 225, 221,
+    123, 207, 16, 103, 228, 163, 197, 236, 237, 94, 62, 242, 225, 221, 177,
+    207, 16, 103, 228, 163, 204, 141, 237, 94, 62, 242, 225, 208, 161, 207,
+    16, 103, 228, 163, 204, 141, 237, 94, 62, 242, 225, 207, 26, 207, 16,
+    103, 228, 163, 204, 141, 237, 94, 62, 242, 225, 248, 6, 207, 16, 103,
+    228, 163, 204, 141, 237, 94, 62, 242, 225, 221, 123, 207, 16, 103, 228,
+    163, 204, 141, 237, 94, 62, 242, 225, 210, 193, 207, 16, 103, 228, 163,
+    204, 141, 237, 94, 60, 242, 225, 221, 177, 207, 16, 103, 228, 163, 204,
+    141, 237, 94, 60, 242, 225, 208, 161, 207, 16, 103, 228, 163, 204, 141,
+    237, 94, 60, 242, 225, 207, 26, 207, 16, 103, 228, 163, 204, 141, 237,
+    94, 60, 242, 225, 248, 6, 207, 16, 103, 228, 163, 204, 141, 237, 94, 60,
+    242, 225, 221, 123, 207, 16, 103, 228, 163, 204, 141, 237, 94, 60, 242,
+    225, 210, 193, 207, 16, 103, 228, 163, 204, 141, 237, 94, 214, 179, 242,
+    225, 221, 177, 207, 16, 103, 228, 163, 204, 141, 237, 94, 214, 179, 242,
+    225, 208, 161, 207, 16, 103, 228, 163, 204, 141, 237, 94, 214, 179, 242,
+    225, 207, 26, 207, 16, 103, 228, 163, 204, 141, 237, 94, 214, 179, 242,
+    225, 248, 6, 207, 16, 103, 228, 163, 204, 141, 237, 94, 214, 179, 242,
+    225, 221, 123, 207, 16, 103, 228, 163, 204, 141, 237, 94, 214, 179, 242,
+    225, 210, 193, 207, 16, 103, 228, 163, 204, 141, 237, 94, 62, 242, 225,
+    221, 123, 207, 16, 112, 228, 163, 233, 8, 237, 94, 60, 242, 225, 221,
+    123, 207, 16, 112, 228, 163, 233, 8, 237, 94, 214, 179, 242, 225, 221,
+    123, 207, 16, 112, 228, 163, 233, 8, 237, 94, 62, 242, 225, 234, 25, 60,
+    242, 225, 234, 25, 214, 179, 242, 225, 234, 25, 62, 242, 225, 234, 26,
+    207, 16, 214, 12, 237, 94, 60, 242, 225, 234, 26, 207, 16, 214, 12, 237,
+    94, 214, 179, 242, 225, 234, 26, 207, 16, 214, 12, 237, 94, 62, 242, 225,
+    221, 120, 62, 242, 225, 221, 119, 62, 242, 225, 221, 121, 60, 242, 225,
+    221, 120, 60, 242, 225, 221, 119, 60, 242, 225, 221, 121, 193, 194, 207,
+    237, 231, 143, 193, 194, 207, 237, 217, 154, 193, 194, 207, 237, 234,
+    115, 193, 194, 207, 237, 228, 204, 193, 194, 207, 237, 242, 254, 193,
+    194, 207, 237, 246, 229, 193, 194, 207, 237, 202, 192, 193, 194, 60, 231,
+    143, 193, 194, 60, 217, 154, 193, 194, 60, 234, 115, 193, 194, 60, 228,
+    204, 193, 194, 60, 242, 254, 193, 194, 60, 246, 229, 193, 194, 60, 202,
+    192, 248, 216, 203, 206, 211, 205, 201, 64, 247, 141, 203, 180, 199, 172,
+    206, 37, 235, 72, 80, 247, 229, 251, 118, 248, 202, 201, 251, 192, 242,
+    221, 157, 210, 245, 247, 201, 217, 191, 194, 147, 210, 4, 214, 184, 236,
+    126, 207, 80, 209, 224, 246, 112, 208, 11, 249, 237, 236, 168, 220, 84,
+    248, 200, 216, 130, 229, 210, 251, 139, 184, 235, 67, 242, 52, 246, 204,
+    206, 6, 205, 230, 220, 168, 128, 216, 105, 194, 51, 209, 208, 204, 138,
+    214, 202, 221, 117, 247, 120, 216, 7, 198, 203, 198, 250, 229, 238, 209,
+    233, 207, 40, 232, 168, 194, 5, 248, 102, 242, 59, 209, 146, 209, 223,
+    194, 16, 233, 42, 250, 221, 229, 233, 219, 17, 210, 140, 228, 171, 247,
+    222, 248, 87, 210, 135, 211, 221, 232, 194, 200, 128, 232, 155, 200, 66,
+    175, 204, 135, 175, 204, 105, 175, 204, 134, 175, 204, 90, 175, 204, 119,
+    175, 204, 104, 175, 204, 133, 175, 204, 82, 175, 204, 112, 175, 204, 96,
+    175, 204, 126, 175, 204, 89, 175, 204, 118, 175, 204, 103, 175, 204, 132,
+    175, 204, 78, 175, 204, 108, 175, 204, 93, 175, 204, 122, 175, 204, 85,
+    175, 204, 99, 175, 204, 129, 175, 204, 81, 175, 204, 111, 175, 204, 95,
+    175, 204, 125, 175, 204, 88, 175, 204, 117, 175, 204, 102, 175, 204, 131,
+    175, 204, 76, 175, 204, 106, 175, 204, 91, 175, 204, 120, 175, 204, 83,
+    175, 204, 113, 175, 204, 97, 175, 204, 127, 175, 204, 79, 175, 204, 109,
+    175, 204, 123, 175, 204, 86, 175, 204, 115, 175, 204, 100, 175, 204, 130,
+    175, 204, 77, 175, 204, 107, 175, 204, 92, 175, 204, 121, 175, 204, 84,
+    175, 204, 114, 175, 204, 98, 175, 204, 128, 175, 204, 80, 175, 204, 110,
+    175, 204, 94, 175, 204, 124, 175, 204, 87, 175, 204, 116, 175, 204, 101,
+    106, 46, 175, 237, 11, 106, 85, 46, 115, 106, 246, 137, 106, 46, 175,
+    237, 11, 106, 85, 46, 115, 106, 207, 101, 106, 46, 175, 237, 11, 113, 85,
+    46, 115, 106, 246, 137, 106, 46, 175, 237, 11, 113, 85, 46, 115, 106,
+    207, 101, 106, 46, 175, 237, 11, 113, 46, 115, 106, 246, 137, 106, 51,
+    175, 237, 11, 113, 85, 46, 115, 113, 246, 137, 106, 51, 175, 237, 11,
+    113, 85, 46, 115, 113, 207, 101, 106, 51, 175, 237, 11, 106, 85, 46, 115,
+    113, 246, 137, 106, 51, 175, 237, 11, 106, 85, 46, 115, 113, 207, 101,
+    106, 51, 175, 237, 11, 106, 46, 115, 113, 246, 137, 106, 51, 175, 237,
+    11, 106, 85, 46, 115, 113, 85, 207, 101, 106, 51, 175, 237, 11, 106, 246,
+    138, 115, 106, 85, 207, 101, 106, 51, 175, 237, 11, 106, 46, 115, 106,
+    85, 207, 101, 106, 51, 175, 237, 11, 106, 246, 138, 115, 113, 85, 207,
+    101, 106, 51, 175, 237, 11, 106, 46, 115, 113, 85, 207, 101, 106, 51,
+    175, 237, 11, 106, 246, 138, 115, 113, 207, 101, 106, 46, 175, 237, 11,
+    113, 246, 138, 115, 113, 85, 207, 101, 106, 46, 175, 237, 11, 113, 46,
+    115, 113, 85, 207, 101, 106, 46, 175, 237, 11, 113, 246, 138, 115, 106,
+    85, 207, 101, 106, 46, 175, 237, 11, 113, 46, 115, 106, 85, 207, 101,
+    106, 46, 175, 237, 11, 113, 246, 138, 115, 106, 207, 101, 106, 46, 175,
+    237, 11, 113, 85, 46, 115, 106, 85, 207, 101, 113, 51, 175, 237, 11, 106,
+    85, 46, 115, 106, 246, 137, 113, 51, 175, 237, 11, 106, 85, 46, 115, 106,
+    207, 101, 113, 51, 175, 237, 11, 113, 85, 46, 115, 106, 246, 137, 113,
+    51, 175, 237, 11, 113, 85, 46, 115, 106, 207, 101, 113, 51, 175, 237, 11,
+    113, 46, 115, 106, 246, 137, 113, 46, 175, 237, 11, 113, 85, 46, 115,
+    113, 246, 137, 113, 46, 175, 237, 11, 113, 85, 46, 115, 113, 207, 101,
+    113, 46, 175, 237, 11, 106, 85, 46, 115, 113, 246, 137, 113, 46, 175,
+    237, 11, 106, 85, 46, 115, 113, 207, 101, 113, 46, 175, 237, 11, 106, 46,
+    115, 113, 246, 137, 113, 46, 175, 237, 11, 106, 85, 46, 115, 113, 85,
+    207, 101, 113, 46, 175, 237, 11, 106, 246, 138, 115, 106, 85, 207, 101,
+    113, 46, 175, 237, 11, 106, 46, 115, 106, 85, 207, 101, 113, 46, 175,
+    237, 11, 106, 246, 138, 115, 113, 85, 207, 101, 113, 46, 175, 237, 11,
+    106, 46, 115, 113, 85, 207, 101, 113, 46, 175, 237, 11, 106, 246, 138,
+    115, 113, 207, 101, 113, 51, 175, 237, 11, 113, 246, 138, 115, 113, 85,
+    207, 101, 113, 51, 175, 237, 11, 113, 46, 115, 113, 85, 207, 101, 113,
+    51, 175, 237, 11, 113, 246, 138, 115, 106, 85, 207, 101, 113, 51, 175,
+    237, 11, 113, 46, 115, 106, 85, 207, 101, 113, 51, 175, 237, 11, 113,
+    246, 138, 115, 106, 207, 101, 113, 51, 175, 237, 11, 113, 85, 46, 115,
+    106, 85, 207, 101, 113, 26, 51, 26, 106, 198, 182, 112, 208, 166, 247,
+    238, 46, 26, 106, 26, 51, 198, 182, 112, 208, 166, 247, 238, 113, 26, 46,
+    26, 106, 198, 182, 112, 208, 166, 247, 238, 46, 26, 113, 26, 51, 198,
+    182, 112, 208, 166, 247, 238, 46, 198, 182, 90, 208, 168, 247, 238, 113,
+    198, 182, 90, 208, 168, 247, 238, 51, 198, 182, 90, 208, 168, 247, 238,
+    106, 198, 182, 90, 208, 168, 247, 238, 84, 90, 234, 144, 247, 236, 84,
+    90, 234, 144, 247, 235, 84, 90, 234, 144, 247, 234, 84, 90, 234, 144,
+    247, 233, 84, 90, 234, 144, 247, 232, 84, 90, 234, 144, 247, 231, 229, 5,
+    90, 234, 144, 247, 236, 229, 5, 90, 234, 144, 247, 235, 229, 5, 90, 234,
+    144, 247, 234, 229, 5, 90, 234, 144, 247, 233, 229, 5, 90, 234, 144, 247,
+    232, 229, 5, 90, 234, 144, 247, 231, 46, 26, 106, 90, 234, 144, 247, 238,
+    46, 26, 113, 90, 234, 144, 247, 238, 51, 26, 113, 90, 234, 144, 247, 238,
+    51, 26, 106, 90, 234, 144, 247, 238, 113, 26, 106, 90, 234, 144, 247,
+    238, 229, 5, 90, 234, 144, 247, 237, 113, 90, 208, 168, 247, 238, 113,
+    112, 234, 142, 247, 238, 113, 232, 214, 234, 142, 247, 238, 113, 112,
+    208, 166, 247, 238, 113, 204, 146, 234, 142, 247, 238, 51, 90, 208, 168,
+    247, 238, 51, 112, 234, 142, 247, 238, 51, 232, 214, 234, 142, 247, 238,
+    51, 112, 208, 166, 247, 238, 51, 204, 146, 234, 142, 247, 238, 46, 138,
+    217, 31, 204, 52, 51, 138, 217, 31, 204, 52, 113, 138, 217, 31, 204, 52,
+    106, 138, 217, 31, 204, 52, 223, 123, 217, 31, 204, 52, 113, 138, 175,
+    26, 106, 138, 223, 123, 217, 31, 204, 52, 113, 138, 223, 123, 217, 31,
+    204, 53, 26, 106, 138, 247, 238, 46, 138, 223, 123, 217, 31, 204, 53, 26,
+    51, 138, 247, 238, 242, 242, 247, 217, 232, 249, 223, 123, 242, 242, 247,
+    217, 232, 249, 87, 229, 5, 232, 249, 113, 46, 115, 106, 51, 232, 249,
+    113, 51, 115, 106, 46, 232, 249, 113, 26, 106, 198, 182, 138, 247, 238,
+    46, 26, 51, 198, 182, 138, 247, 238, 113, 46, 198, 182, 217, 31, 204, 52,
+    113, 51, 198, 182, 217, 31, 204, 52, 106, 51, 198, 182, 217, 31, 204, 52,
+    106, 46, 198, 182, 217, 31, 204, 52, 105, 119, 152, 237, 11, 113, 246,
+    138, 115, 85, 220, 28, 105, 119, 152, 237, 11, 113, 246, 138, 115, 85,
+    207, 101, 105, 119, 152, 237, 11, 85, 46, 115, 106, 246, 137, 105, 119,
+    152, 237, 11, 85, 51, 115, 106, 246, 137, 105, 119, 152, 237, 11, 113,
+    246, 138, 115, 85, 46, 115, 106, 246, 137, 105, 119, 152, 237, 11, 113,
+    246, 138, 115, 85, 51, 115, 106, 246, 137, 105, 119, 152, 237, 11, 85,
+    46, 115, 106, 246, 138, 115, 85, 207, 101, 105, 119, 152, 237, 11, 85,
+    46, 115, 113, 246, 138, 115, 85, 207, 101, 105, 119, 152, 237, 11, 113,
+    246, 138, 115, 85, 46, 26, 85, 51, 115, 106, 246, 137, 105, 119, 152,
+    237, 11, 113, 246, 138, 115, 85, 51, 26, 85, 46, 115, 106, 246, 137, 105,
+    119, 152, 237, 11, 113, 246, 138, 115, 85, 51, 115, 106, 246, 138, 115,
+    85, 220, 28, 105, 119, 152, 237, 11, 113, 246, 138, 115, 85, 46, 115,
+    106, 246, 138, 115, 85, 207, 101, 105, 119, 152, 237, 11, 85, 46, 115,
+    113, 246, 138, 115, 85, 51, 115, 106, 246, 137, 105, 119, 152, 237, 11,
+    85, 51, 115, 113, 246, 138, 115, 85, 46, 115, 106, 246, 137, 105, 119,
+    152, 237, 11, 237, 4, 105, 119, 152, 229, 5, 4, 84, 111, 250, 76, 209,
+    189, 223, 123, 242, 244, 77, 46, 138, 206, 192, 217, 160, 51, 138, 206,
+    192, 217, 160, 223, 123, 235, 92, 61, 4, 199, 74, 220, 18, 114, 61, 26,
+    113, 26, 106, 90, 234, 144, 247, 238, 94, 61, 26, 113, 26, 106, 90, 234,
+    144, 247, 238, 235, 92, 61, 26, 51, 90, 234, 144, 247, 238, 197, 30, 61,
+    26, 51, 90, 234, 144, 247, 238, 46, 138, 232, 160, 51, 138, 232, 160,
+    195, 244, 33, 238, 183, 51, 211, 184, 108, 236, 114, 214, 199, 237, 11,
+    238, 183, 214, 199, 237, 11, 85, 51, 115, 106, 246, 137, 214, 199, 237,
+    11, 237, 4, 62, 87, 206, 52, 4, 207, 7, 238, 222, 46, 199, 192, 62, 51,
+    209, 188, 223, 176, 85, 199, 192, 62, 51, 209, 188, 223, 176, 51, 199,
+    192, 62, 51, 209, 188, 223, 176, 214, 199, 108, 208, 159, 77, 201, 250,
+    233, 0, 201, 250, 233, 1, 4, 250, 89, 208, 38, 201, 250, 233, 1, 220, 35,
+    220, 28, 201, 250, 233, 1, 220, 35, 207, 101, 201, 250, 233, 1, 4, 235,
+    79, 62, 197, 40, 242, 220, 205, 197, 17, 192, 76, 205, 197, 17, 101, 205,
+    197, 17, 104, 205, 197, 17, 133, 205, 197, 17, 134, 205, 197, 17, 151,
+    205, 197, 17, 170, 205, 197, 17, 179, 205, 197, 17, 174, 205, 197, 17,
+    182, 12, 15, 228, 38, 12, 15, 228, 37, 12, 15, 228, 36, 12, 15, 228, 35,
+    12, 15, 228, 34, 12, 15, 228, 33, 12, 15, 228, 32, 12, 15, 228, 31, 12,
+    15, 228, 30, 12, 15, 228, 29, 12, 15, 228, 28, 12, 15, 228, 27, 12, 15,
+    228, 26, 12, 15, 228, 25, 12, 15, 228, 24, 12, 15, 228, 23, 12, 15, 228,
+    22, 12, 15, 228, 21, 12, 15, 228, 20, 12, 15, 228, 19, 12, 15, 228, 18,
+    12, 15, 228, 17, 12, 15, 228, 16, 12, 15, 228, 15, 12, 15, 228, 14, 12,
+    15, 228, 13, 12, 15, 228, 12, 12, 15, 228, 11, 12, 15, 228, 10, 12, 15,
+    228, 9, 12, 15, 228, 8, 12, 15, 228, 7, 12, 15, 228, 6, 12, 15, 228, 5,
+    12, 15, 228, 4, 12, 15, 228, 3, 12, 15, 228, 2, 12, 15, 228, 1, 12, 15,
+    228, 0, 12, 15, 227, 255, 12, 15, 227, 254, 12, 15, 227, 253, 12, 15,
+    227, 252, 12, 15, 227, 251, 12, 15, 227, 250, 12, 15, 227, 249, 12, 15,
+    227, 248, 12, 15, 227, 247, 12, 15, 227, 246, 12, 15, 227, 245, 12, 15,
+    227, 244, 12, 15, 227, 243, 12, 15, 227, 242, 12, 15, 227, 241, 12, 15,
+    227, 240, 12, 15, 227, 239, 12, 15, 227, 238, 12, 15, 227, 237, 12, 15,
+    227, 236, 12, 15, 227, 235, 12, 15, 227, 234, 12, 15, 227, 233, 12, 15,
+    227, 232, 12, 15, 227, 231, 12, 15, 227, 230, 12, 15, 227, 229, 12, 15,
+    227, 228, 12, 15, 227, 227, 12, 15, 227, 226, 12, 15, 227, 225, 12, 15,
+    227, 224, 12, 15, 227, 223, 12, 15, 227, 222, 12, 15, 227, 221, 12, 15,
+    227, 220, 12, 15, 227, 219, 12, 15, 227, 218, 12, 15, 227, 217, 12, 15,
+    227, 216, 12, 15, 227, 215, 12, 15, 227, 214, 12, 15, 227, 213, 12, 15,
+    227, 212, 12, 15, 227, 211, 12, 15, 227, 210, 12, 15, 227, 209, 12, 15,
+    227, 208, 12, 15, 227, 207, 12, 15, 227, 206, 12, 15, 227, 205, 12, 15,
+    227, 204, 12, 15, 227, 203, 12, 15, 227, 202, 12, 15, 227, 201, 12, 15,
+    227, 200, 12, 15, 227, 199, 12, 15, 227, 198, 12, 15, 227, 197, 12, 15,
+    227, 196, 12, 15, 227, 195, 12, 15, 227, 194, 12, 15, 227, 193, 12, 15,
+    227, 192, 12, 15, 227, 191, 12, 15, 227, 190, 12, 15, 227, 189, 12, 15,
+    227, 188, 12, 15, 227, 187, 12, 15, 227, 186, 12, 15, 227, 185, 12, 15,
+    227, 184, 12, 15, 227, 183, 12, 15, 227, 182, 12, 15, 227, 181, 12, 15,
+    227, 180, 12, 15, 227, 179, 12, 15, 227, 178, 12, 15, 227, 177, 12, 15,
+    227, 176, 12, 15, 227, 175, 12, 15, 227, 174, 12, 15, 227, 173, 12, 15,
+    227, 172, 12, 15, 227, 171, 12, 15, 227, 170, 12, 15, 227, 169, 12, 15,
+    227, 168, 12, 15, 227, 167, 12, 15, 227, 166, 12, 15, 227, 165, 12, 15,
+    227, 164, 12, 15, 227, 163, 12, 15, 227, 162, 12, 15, 227, 161, 12, 15,
+    227, 160, 12, 15, 227, 159, 12, 15, 227, 158, 12, 15, 227, 157, 12, 15,
+    227, 156, 12, 15, 227, 155, 12, 15, 227, 154, 12, 15, 227, 153, 12, 15,
+    227, 152, 12, 15, 227, 151, 12, 15, 227, 150, 12, 15, 227, 149, 12, 15,
+    227, 148, 12, 15, 227, 147, 12, 15, 227, 146, 12, 15, 227, 145, 12, 15,
+    227, 144, 12, 15, 227, 143, 12, 15, 227, 142, 12, 15, 227, 141, 12, 15,
+    227, 140, 12, 15, 227, 139, 12, 15, 227, 138, 12, 15, 227, 137, 12, 15,
+    227, 136, 12, 15, 227, 135, 12, 15, 227, 134, 12, 15, 227, 133, 12, 15,
+    227, 132, 12, 15, 227, 131, 12, 15, 227, 130, 12, 15, 227, 129, 12, 15,
+    227, 128, 12, 15, 227, 127, 12, 15, 227, 126, 12, 15, 227, 125, 12, 15,
+    227, 124, 12, 15, 227, 123, 12, 15, 227, 122, 12, 15, 227, 121, 12, 15,
+    227, 120, 12, 15, 227, 119, 12, 15, 227, 118, 12, 15, 227, 117, 12, 15,
+    227, 116, 12, 15, 227, 115, 12, 15, 227, 114, 12, 15, 227, 113, 12, 15,
+    227, 112, 12, 15, 227, 111, 12, 15, 227, 110, 12, 15, 227, 109, 12, 15,
+    227, 108, 12, 15, 227, 107, 12, 15, 227, 106, 12, 15, 227, 105, 12, 15,
+    227, 104, 12, 15, 227, 103, 12, 15, 227, 102, 12, 15, 227, 101, 12, 15,
+    227, 100, 12, 15, 227, 99, 12, 15, 227, 98, 12, 15, 227, 97, 12, 15, 227,
+    96, 12, 15, 227, 95, 12, 15, 227, 94, 12, 15, 227, 93, 12, 15, 227, 92,
+    12, 15, 227, 91, 12, 15, 227, 90, 12, 15, 227, 89, 12, 15, 227, 88, 12,
+    15, 227, 87, 12, 15, 227, 86, 12, 15, 227, 85, 12, 15, 227, 84, 12, 15,
+    227, 83, 12, 15, 227, 82, 12, 15, 227, 81, 12, 15, 227, 80, 12, 15, 227,
+    79, 12, 15, 227, 78, 12, 15, 227, 77, 12, 15, 227, 76, 12, 15, 227, 75,
+    12, 15, 227, 74, 12, 15, 227, 73, 12, 15, 227, 72, 12, 15, 227, 71, 12,
+    15, 227, 70, 12, 15, 227, 69, 12, 15, 227, 68, 12, 15, 227, 67, 12, 15,
+    227, 66, 12, 15, 227, 65, 12, 15, 227, 64, 12, 15, 227, 63, 12, 15, 227,
+    62, 12, 15, 227, 61, 12, 15, 227, 60, 12, 15, 227, 59, 12, 15, 227, 58,
+    12, 15, 227, 57, 12, 15, 227, 56, 12, 15, 227, 55, 12, 15, 227, 54, 12,
+    15, 227, 53, 12, 15, 227, 52, 12, 15, 227, 51, 12, 15, 227, 50, 12, 15,
+    227, 49, 12, 15, 227, 48, 12, 15, 227, 47, 12, 15, 227, 46, 12, 15, 227,
+    45, 12, 15, 227, 44, 12, 15, 227, 43, 12, 15, 227, 42, 12, 15, 227, 41,
+    12, 15, 227, 40, 12, 15, 227, 39, 12, 15, 227, 38, 12, 15, 227, 37, 12,
+    15, 227, 36, 12, 15, 227, 35, 12, 15, 227, 34, 12, 15, 227, 33, 12, 15,
+    227, 32, 12, 15, 227, 31, 12, 15, 227, 30, 12, 15, 227, 29, 12, 15, 227,
+    28, 12, 15, 227, 27, 12, 15, 227, 26, 12, 15, 227, 25, 12, 15, 227, 24,
+    12, 15, 227, 23, 12, 15, 227, 22, 12, 15, 227, 21, 12, 15, 227, 20, 12,
+    15, 227, 19, 12, 15, 227, 18, 12, 15, 227, 17, 12, 15, 227, 16, 12, 15,
+    227, 15, 12, 15, 227, 14, 12, 15, 227, 13, 12, 15, 227, 12, 12, 15, 227,
+    11, 12, 15, 227, 10, 12, 15, 227, 9, 12, 15, 227, 8, 12, 15, 227, 7, 12,
+    15, 227, 6, 12, 15, 227, 5, 12, 15, 227, 4, 12, 15, 227, 3, 12, 15, 227,
+    2, 12, 15, 227, 1, 12, 15, 227, 0, 12, 15, 226, 255, 12, 15, 226, 254,
+    12, 15, 226, 253, 12, 15, 226, 252, 12, 15, 226, 251, 12, 15, 226, 250,
+    12, 15, 226, 249, 12, 15, 226, 248, 12, 15, 226, 247, 12, 15, 226, 246,
+    12, 15, 226, 245, 12, 15, 226, 244, 12, 15, 226, 243, 12, 15, 226, 242,
+    12, 15, 226, 241, 12, 15, 226, 240, 12, 15, 226, 239, 12, 15, 226, 238,
+    12, 15, 226, 237, 12, 15, 226, 236, 12, 15, 226, 235, 12, 15, 226, 234,
+    12, 15, 226, 233, 12, 15, 226, 232, 12, 15, 226, 231, 12, 15, 226, 230,
+    12, 15, 226, 229, 12, 15, 226, 228, 12, 15, 226, 227, 12, 15, 226, 226,
+    12, 15, 226, 225, 12, 15, 226, 224, 12, 15, 226, 223, 12, 15, 226, 222,
+    12, 15, 226, 221, 12, 15, 226, 220, 12, 15, 226, 219, 12, 15, 226, 218,
+    12, 15, 226, 217, 12, 15, 226, 216, 12, 15, 226, 215, 12, 15, 226, 214,
+    12, 15, 226, 213, 12, 15, 226, 212, 12, 15, 226, 211, 12, 15, 226, 210,
+    12, 15, 226, 209, 12, 15, 226, 208, 12, 15, 226, 207, 12, 15, 226, 206,
+    12, 15, 226, 205, 12, 15, 226, 204, 12, 15, 226, 203, 12, 15, 226, 202,
+    12, 15, 226, 201, 12, 15, 226, 200, 12, 15, 226, 199, 12, 15, 226, 198,
+    12, 15, 226, 197, 12, 15, 226, 196, 12, 15, 226, 195, 12, 15, 226, 194,
+    12, 15, 226, 193, 12, 15, 226, 192, 12, 15, 226, 191, 12, 15, 226, 190,
+    12, 15, 226, 189, 12, 15, 226, 188, 12, 15, 226, 187, 12, 15, 226, 186,
+    12, 15, 226, 185, 12, 15, 226, 184, 12, 15, 226, 183, 12, 15, 226, 182,
+    12, 15, 226, 181, 12, 15, 226, 180, 12, 15, 226, 179, 12, 15, 226, 178,
+    12, 15, 226, 177, 12, 15, 226, 176, 12, 15, 226, 175, 12, 15, 226, 174,
+    12, 15, 226, 173, 12, 15, 226, 172, 12, 15, 226, 171, 12, 15, 226, 170,
+    12, 15, 226, 169, 12, 15, 226, 168, 12, 15, 226, 167, 12, 15, 226, 166,
+    12, 15, 226, 165, 12, 15, 226, 164, 12, 15, 226, 163, 12, 15, 226, 162,
+    12, 15, 226, 161, 12, 15, 226, 160, 12, 15, 226, 159, 12, 15, 226, 158,
+    12, 15, 226, 157, 12, 15, 226, 156, 12, 15, 226, 155, 12, 15, 226, 154,
+    12, 15, 226, 153, 12, 15, 226, 152, 12, 15, 226, 151, 12, 15, 226, 150,
+    12, 15, 226, 149, 12, 15, 226, 148, 12, 15, 226, 147, 12, 15, 226, 146,
+    12, 15, 226, 145, 12, 15, 226, 144, 12, 15, 226, 143, 12, 15, 226, 142,
+    12, 15, 226, 141, 12, 15, 226, 140, 12, 15, 226, 139, 12, 15, 226, 138,
+    12, 15, 226, 137, 12, 15, 226, 136, 12, 15, 226, 135, 12, 15, 226, 134,
+    12, 15, 226, 133, 12, 15, 226, 132, 12, 15, 226, 131, 12, 15, 226, 130,
+    12, 15, 226, 129, 12, 15, 226, 128, 12, 15, 226, 127, 12, 15, 226, 126,
+    12, 15, 226, 125, 12, 15, 226, 124, 12, 15, 226, 123, 12, 15, 226, 122,
+    12, 15, 226, 121, 12, 15, 226, 120, 12, 15, 226, 119, 12, 15, 226, 118,
+    12, 15, 226, 117, 12, 15, 226, 116, 12, 15, 226, 115, 12, 15, 226, 114,
+    12, 15, 226, 113, 12, 15, 226, 112, 12, 15, 226, 111, 12, 15, 226, 110,
+    12, 15, 226, 109, 12, 15, 226, 108, 12, 15, 226, 107, 12, 15, 226, 106,
+    12, 15, 226, 105, 12, 15, 226, 104, 12, 15, 226, 103, 12, 15, 226, 102,
+    12, 15, 226, 101, 12, 15, 226, 100, 12, 15, 226, 99, 12, 15, 226, 98, 12,
+    15, 226, 97, 12, 15, 226, 96, 12, 15, 226, 95, 12, 15, 226, 94, 12, 15,
+    226, 93, 12, 15, 226, 92, 12, 15, 226, 91, 12, 15, 226, 90, 12, 15, 226,
+    89, 12, 15, 226, 88, 12, 15, 226, 87, 12, 15, 226, 86, 12, 15, 226, 85,
+    12, 15, 226, 84, 12, 15, 226, 83, 12, 15, 226, 82, 12, 15, 226, 81, 12,
+    15, 226, 80, 12, 15, 226, 79, 12, 15, 226, 78, 12, 15, 226, 77, 12, 15,
+    226, 76, 12, 15, 226, 75, 12, 15, 226, 74, 12, 15, 226, 73, 12, 15, 226,
+    72, 12, 15, 226, 71, 12, 15, 226, 70, 12, 15, 226, 69, 12, 15, 226, 68,
+    12, 15, 226, 67, 12, 15, 226, 66, 12, 15, 226, 65, 12, 15, 226, 64, 12,
+    15, 226, 63, 12, 15, 226, 62, 12, 15, 226, 61, 12, 15, 226, 60, 12, 15,
+    226, 59, 12, 15, 226, 58, 12, 15, 226, 57, 12, 15, 226, 56, 12, 15, 226,
+    55, 12, 15, 226, 54, 12, 15, 226, 53, 12, 15, 226, 52, 12, 15, 226, 51,
+    12, 15, 226, 50, 12, 15, 226, 49, 12, 15, 226, 48, 12, 15, 226, 47, 12,
+    15, 226, 46, 12, 15, 226, 45, 12, 15, 226, 44, 12, 15, 226, 43, 12, 15,
+    226, 42, 12, 15, 226, 41, 12, 15, 226, 40, 12, 15, 226, 39, 12, 15, 226,
+    38, 12, 15, 226, 37, 12, 15, 226, 36, 12, 15, 226, 35, 12, 15, 226, 34,
+    12, 15, 226, 33, 12, 15, 226, 32, 12, 15, 226, 31, 12, 15, 226, 30, 12,
+    15, 226, 29, 12, 15, 226, 28, 12, 15, 226, 27, 12, 15, 226, 26, 12, 15,
+    226, 25, 12, 15, 226, 24, 12, 15, 226, 23, 12, 15, 226, 22, 12, 15, 226,
+    21, 12, 15, 226, 20, 12, 15, 226, 19, 12, 15, 226, 18, 12, 15, 226, 17,
+    12, 15, 226, 16, 12, 15, 226, 15, 12, 15, 226, 14, 12, 15, 226, 13, 12,
+    15, 226, 12, 12, 15, 226, 11, 12, 15, 226, 10, 12, 15, 226, 9, 220, 79,
+    200, 155, 190, 202, 160, 190, 233, 204, 77, 190, 208, 142, 77, 190, 31,
+    57, 190, 236, 127, 57, 190, 210, 133, 57, 190, 250, 229, 190, 250, 147,
+    190, 46, 210, 230, 190, 51, 210, 230, 190, 250, 37, 190, 102, 57, 190,
+    242, 38, 190, 228, 110, 190, 232, 71, 201, 238, 190, 202, 189, 190, 17,
+    192, 76, 190, 17, 101, 190, 17, 104, 190, 17, 133, 190, 17, 134, 190, 17,
+    151, 190, 17, 170, 190, 17, 179, 190, 17, 174, 190, 17, 182, 190, 242,
+    47, 190, 204, 180, 190, 219, 240, 57, 190, 234, 30, 57, 190, 230, 204,
+    57, 190, 208, 159, 77, 190, 242, 36, 250, 26, 190, 8, 6, 1, 64, 190, 8,
+    6, 1, 249, 226, 190, 8, 6, 1, 247, 52, 190, 8, 6, 1, 238, 95, 190, 8, 6,
+    1, 71, 190, 8, 6, 1, 233, 163, 190, 8, 6, 1, 232, 44, 190, 8, 6, 1, 230,
+    124, 190, 8, 6, 1, 70, 190, 8, 6, 1, 223, 65, 190, 8, 6, 1, 222, 184,
+    190, 8, 6, 1, 165, 190, 8, 6, 1, 218, 236, 190, 8, 6, 1, 215, 151, 190,
+    8, 6, 1, 74, 190, 8, 6, 1, 211, 93, 190, 8, 6, 1, 208, 247, 190, 8, 6, 1,
+    150, 190, 8, 6, 1, 206, 158, 190, 8, 6, 1, 200, 228, 190, 8, 6, 1, 68,
+    190, 8, 6, 1, 196, 236, 190, 8, 6, 1, 194, 202, 190, 8, 6, 1, 193, 223,
+    190, 8, 6, 1, 193, 148, 190, 8, 6, 1, 192, 155, 190, 46, 50, 186, 190,
+    207, 169, 202, 189, 190, 51, 50, 186, 190, 242, 122, 251, 143, 190, 132,
+    219, 175, 190, 230, 211, 251, 143, 190, 8, 2, 1, 64, 190, 8, 2, 1, 249,
+    226, 190, 8, 2, 1, 247, 52, 190, 8, 2, 1, 238, 95, 190, 8, 2, 1, 71, 190,
+    8, 2, 1, 233, 163, 190, 8, 2, 1, 232, 44, 190, 8, 2, 1, 230, 124, 190, 8,
+    2, 1, 70, 190, 8, 2, 1, 223, 65, 190, 8, 2, 1, 222, 184, 190, 8, 2, 1,
+    165, 190, 8, 2, 1, 218, 236, 190, 8, 2, 1, 215, 151, 190, 8, 2, 1, 74,
+    190, 8, 2, 1, 211, 93, 190, 8, 2, 1, 208, 247, 190, 8, 2, 1, 150, 190, 8,
+    2, 1, 206, 158, 190, 8, 2, 1, 200, 228, 190, 8, 2, 1, 68, 190, 8, 2, 1,
+    196, 236, 190, 8, 2, 1, 194, 202, 190, 8, 2, 1, 193, 223, 190, 8, 2, 1,
+    193, 148, 190, 8, 2, 1, 192, 155, 190, 46, 238, 138, 186, 190, 84, 219,
+    175, 190, 51, 238, 138, 186, 190, 199, 90, 246, 242, 200, 155, 65, 205,
+    110, 65, 205, 99, 65, 205, 88, 65, 205, 76, 65, 205, 65, 65, 205, 54, 65,
+    205, 43, 65, 205, 32, 65, 205, 21, 65, 205, 13, 65, 205, 12, 65, 205, 11,
+    65, 205, 10, 65, 205, 8, 65, 205, 7, 65, 205, 6, 65, 205, 5, 65, 205, 4,
+    65, 205, 3, 65, 205, 2, 65, 205, 1, 65, 205, 0, 65, 204, 255, 65, 204,
+    253, 65, 204, 252, 65, 204, 251, 65, 204, 250, 65, 204, 249, 65, 204,
+    248, 65, 204, 247, 65, 204, 246, 65, 204, 245, 65, 204, 244, 65, 204,
+    242, 65, 204, 241, 65, 204, 240, 65, 204, 239, 65, 204, 238, 65, 204,
+    237, 65, 204, 236, 65, 204, 235, 65, 204, 234, 65, 204, 233, 65, 204,
+    231, 65, 204, 230, 65, 204, 229, 65, 204, 228, 65, 204, 227, 65, 204,
+    226, 65, 204, 225, 65, 204, 224, 65, 204, 223, 65, 204, 222, 65, 204,
+    220, 65, 204, 219, 65, 204, 218, 65, 204, 217, 65, 204, 216, 65, 204,
+    215, 65, 204, 214, 65, 204, 213, 65, 204, 212, 65, 204, 211, 65, 204,
+    209, 65, 204, 208, 65, 204, 207, 65, 204, 206, 65, 204, 205, 65, 204,
+    204, 65, 204, 203, 65, 204, 202, 65, 204, 201, 65, 204, 200, 65, 204,
+    198, 65, 204, 197, 65, 204, 196, 65, 204, 195, 65, 204, 194, 65, 204,
+    193, 65, 204, 192, 65, 204, 191, 65, 204, 190, 65, 204, 189, 65, 205,
+    186, 65, 205, 185, 65, 205, 184, 65, 205, 183, 65, 205, 182, 65, 205,
+    181, 65, 205, 180, 65, 205, 179, 65, 205, 178, 65, 205, 177, 65, 205,
+    175, 65, 205, 174, 65, 205, 173, 65, 205, 172, 65, 205, 171, 65, 205,
+    170, 65, 205, 169, 65, 205, 168, 65, 205, 167, 65, 205, 166, 65, 205,
+    164, 65, 205, 163, 65, 205, 162, 65, 205, 161, 65, 205, 160, 65, 205,
+    159, 65, 205, 158, 65, 205, 157, 65, 205, 156, 65, 205, 155, 65, 205,
+    153, 65, 205, 152, 65, 205, 151, 65, 205, 150, 65, 205, 149, 65, 205,
+    148, 65, 205, 147, 65, 205, 146, 65, 205, 145, 65, 205, 144, 65, 205,
+    142, 65, 205, 141, 65, 205, 140, 65, 205, 139, 65, 205, 138, 65, 205,
+    137, 65, 205, 136, 65, 205, 135, 65, 205, 134, 65, 205, 133, 65, 205,
+    131, 65, 205, 130, 65, 205, 129, 65, 205, 128, 65, 205, 127, 65, 205,
+    126, 65, 205, 125, 65, 205, 124, 65, 205, 123, 65, 205, 122, 65, 205,
+    120, 65, 205, 119, 65, 205, 118, 65, 205, 117, 65, 205, 116, 65, 205,
+    115, 65, 205, 114, 65, 205, 113, 65, 205, 112, 65, 205, 111, 65, 205,
+    109, 65, 205, 108, 65, 205, 107, 65, 205, 106, 65, 205, 105, 65, 205,
+    104, 65, 205, 103, 65, 205, 102, 65, 205, 101, 65, 205, 100, 65, 205, 98,
+    65, 205, 97, 65, 205, 96, 65, 205, 95, 65, 205, 94, 65, 205, 93, 65, 205,
+    92, 65, 205, 91, 65, 205, 90, 65, 205, 89, 65, 205, 87, 65, 205, 86, 65,
+    205, 85, 65, 205, 84, 65, 205, 83, 65, 205, 82, 65, 205, 81, 65, 205, 80,
+    65, 205, 79, 65, 205, 78, 65, 205, 75, 65, 205, 74, 65, 205, 73, 65, 205,
+    72, 65, 205, 71, 65, 205, 70, 65, 205, 69, 65, 205, 68, 65, 205, 67, 65,
+    205, 66, 65, 205, 64, 65, 205, 63, 65, 205, 62, 65, 205, 61, 65, 205, 60,
+    65, 205, 59, 65, 205, 58, 65, 205, 57, 65, 205, 56, 65, 205, 55, 65, 205,
+    53, 65, 205, 52, 65, 205, 51, 65, 205, 50, 65, 205, 49, 65, 205, 48, 65,
+    205, 47, 65, 205, 46, 65, 205, 45, 65, 205, 44, 65, 205, 42, 65, 205, 41,
+    65, 205, 40, 65, 205, 39, 65, 205, 38, 65, 205, 37, 65, 205, 36, 65, 205,
+    35, 65, 205, 34, 65, 205, 33, 65, 205, 31, 65, 205, 30, 65, 205, 29, 65,
+    205, 28, 65, 205, 27, 65, 205, 26, 65, 205, 25, 65, 205, 24, 65, 205, 23,
+    65, 205, 22, 65, 205, 20, 65, 205, 19, 65, 205, 18, 65, 205, 17, 65, 205,
+    16, 65, 205, 15, 65, 205, 14, 212, 238, 212, 240, 202, 15, 80, 229, 242,
+    202, 193, 202, 15, 80, 199, 244, 201, 186, 234, 80, 80, 199, 244, 233,
+    232, 234, 80, 80, 198, 208, 234, 42, 234, 66, 234, 67, 251, 134, 251,
+    135, 251, 23, 248, 89, 248, 246, 247, 130, 246, 100, 200, 161, 229, 5,
+    200, 161, 228, 186, 200, 166, 219, 176, 233, 38, 214, 177, 219, 175, 234,
+    80, 80, 219, 175, 219, 224, 213, 204, 234, 45, 219, 176, 200, 161, 84,
+    200, 161, 194, 225, 232, 136, 233, 38, 233, 15, 246, 203, 207, 172, 238,
+    202, 203, 232, 211, 125, 219, 97, 101, 202, 212, 203, 232, 223, 190, 219,
+    97, 192, 76, 203, 125, 237, 180, 219, 166, 234, 1, 236, 157, 237, 47,
+    238, 243, 101, 237, 169, 237, 47, 238, 243, 104, 237, 168, 237, 47, 238,
+    243, 133, 237, 167, 237, 47, 238, 243, 134, 237, 166, 214, 199, 251, 134,
+    215, 67, 200, 254, 223, 253, 201, 2, 234, 80, 80, 198, 209, 247, 238,
+    233, 239, 246, 241, 246, 243, 234, 80, 80, 217, 30, 234, 43, 201, 151,
+    201, 169, 234, 1, 234, 2, 223, 165, 204, 166, 134, 232, 251, 204, 165,
+    232, 81, 223, 165, 204, 166, 133, 230, 194, 204, 165, 230, 191, 223, 165,
+    204, 166, 104, 207, 248, 204, 165, 206, 224, 223, 165, 204, 166, 101,
+    197, 55, 204, 165, 197, 10, 202, 163, 237, 86, 237, 88, 211, 65, 246, 99,
+    211, 67, 139, 212, 7, 209, 104, 229, 8, 247, 155, 210, 123, 229, 202,
+    247, 169, 213, 143, 247, 155, 229, 202, 215, 28, 223, 176, 223, 178, 214,
+    170, 219, 175, 214, 197, 202, 15, 80, 205, 191, 250, 106, 202, 92, 234,
+    80, 80, 205, 191, 250, 106, 234, 4, 246, 100, 200, 162, 204, 151, 229, 5,
+    200, 162, 204, 151, 228, 183, 246, 100, 200, 162, 4, 222, 196, 229, 5,
+    200, 162, 4, 222, 196, 228, 184, 219, 176, 200, 162, 204, 151, 84, 200,
+    162, 204, 151, 194, 224, 210, 222, 219, 176, 232, 123, 210, 222, 219,
+    176, 235, 96, 209, 219, 210, 222, 219, 176, 248, 245, 210, 222, 219, 176,
+    197, 41, 209, 213, 207, 169, 219, 176, 233, 38, 207, 169, 223, 176, 207,
+    151, 203, 74, 203, 232, 104, 203, 71, 202, 94, 203, 74, 203, 232, 133,
+    203, 70, 202, 93, 237, 47, 238, 243, 201, 210, 237, 164, 209, 89, 197, 9,
+    101, 209, 89, 197, 7, 209, 50, 209, 89, 197, 9, 104, 209, 89, 197, 6,
+    209, 49, 204, 152, 198, 207, 202, 12, 201, 193, 246, 242, 246, 99, 246,
+    177, 216, 244, 194, 155, 215, 169, 202, 15, 80, 230, 179, 250, 106, 202,
+    15, 80, 209, 68, 250, 106, 202, 162, 234, 80, 80, 230, 179, 250, 106,
+    234, 80, 80, 209, 68, 250, 106, 234, 40, 202, 15, 80, 201, 210, 202, 178,
+    203, 74, 230, 216, 246, 100, 223, 124, 204, 69, 203, 74, 246, 100, 223,
+    124, 205, 239, 238, 243, 204, 162, 223, 124, 238, 163, 201, 211, 200, 15,
+    202, 35, 211, 175, 200, 243, 242, 37, 211, 142, 209, 90, 216, 243, 209,
+    201, 250, 143, 209, 83, 242, 37, 250, 160, 215, 16, 203, 134, 8, 6, 1,
+    231, 84, 8, 2, 1, 231, 84, 246, 120, 251, 2, 200, 248, 201, 157, 242, 48,
+    203, 16, 220, 28, 222, 115, 1, 219, 126, 220, 77, 1, 232, 165, 232, 156,
+    220, 77, 1, 232, 165, 233, 50, 220, 77, 1, 207, 55, 220, 77, 1, 219, 107,
+    86, 122, 247, 250, 203, 205, 231, 47, 216, 193, 207, 159, 30, 123, 193,
+    43, 30, 123, 193, 39, 30, 123, 202, 70, 30, 123, 193, 44, 232, 58, 232,
+    57, 232, 56, 215, 171, 191, 233, 191, 234, 191, 236, 219, 40, 207, 63,
+    219, 42, 207, 65, 210, 184, 219, 39, 207, 62, 213, 174, 216, 95, 194, 38,
+    219, 41, 207, 64, 232, 80, 210, 183, 194, 97, 234, 104, 232, 68, 216,
+    167, 211, 212, 197, 11, 109, 216, 167, 237, 186, 109, 114, 198, 184, 61,
+    4, 55, 84, 111, 94, 198, 184, 61, 4, 55, 84, 111, 11, 5, 223, 80, 77,
+    195, 225, 195, 114, 195, 46, 195, 35, 195, 24, 195, 13, 195, 2, 194, 247,
+    194, 236, 195, 224, 195, 213, 195, 202, 195, 191, 195, 180, 195, 169,
+    195, 158, 209, 105, 232, 136, 39, 84, 51, 62, 219, 247, 186, 247, 57,
+    211, 159, 77, 247, 209, 191, 235, 10, 3, 212, 248, 200, 19, 10, 3, 212,
+    248, 136, 212, 248, 247, 90, 136, 247, 89, 217, 36, 6, 1, 230, 124, 217,
+    36, 6, 1, 214, 167, 217, 36, 2, 1, 230, 124, 217, 36, 2, 1, 214, 167, 59,
+    1, 234, 252, 69, 35, 16, 232, 79, 203, 12, 242, 172, 196, 133, 195, 147,
+    195, 136, 195, 125, 195, 113, 195, 102, 195, 91, 195, 80, 195, 69, 195,
+    58, 195, 50, 195, 49, 195, 48, 195, 47, 195, 45, 195, 44, 195, 43, 195,
+    42, 195, 41, 195, 40, 195, 39, 195, 38, 195, 37, 195, 36, 195, 34, 195,
+    33, 195, 32, 195, 31, 195, 30, 195, 29, 195, 28, 195, 27, 195, 26, 195,
+    25, 195, 23, 195, 22, 195, 21, 195, 20, 195, 19, 195, 18, 195, 17, 195,
+    16, 195, 15, 195, 14, 195, 12, 195, 11, 195, 10, 195, 9, 195, 8, 195, 7,
+    195, 6, 195, 5, 195, 4, 195, 3, 195, 1, 195, 0, 194, 255, 194, 254, 194,
+    253, 194, 252, 194, 251, 194, 250, 194, 249, 194, 248, 194, 246, 194,
+    245, 194, 244, 194, 243, 194, 242, 194, 241, 194, 240, 194, 239, 194,
+    238, 194, 237, 194, 235, 194, 234, 194, 233, 194, 232, 194, 231, 194,
+    230, 194, 229, 194, 228, 194, 227, 194, 226, 195, 223, 195, 222, 195,
+    221, 195, 220, 195, 219, 195, 218, 195, 217, 195, 216, 195, 215, 195,
+    214, 195, 212, 195, 211, 195, 210, 195, 209, 195, 208, 195, 207, 195,
+    206, 195, 205, 195, 204, 195, 203, 195, 201, 195, 200, 195, 199, 195,
+    198, 195, 197, 195, 196, 195, 195, 195, 194, 195, 193, 195, 192, 195,
+    190, 195, 189, 195, 188, 195, 187, 195, 186, 195, 185, 195, 184, 195,
+    183, 195, 182, 195, 181, 195, 179, 195, 178, 195, 177, 195, 176, 195,
+    175, 195, 174, 195, 173, 195, 172, 195, 171, 195, 170, 195, 168, 195,
+    167, 195, 166, 195, 165, 195, 164, 195, 163, 195, 162, 195, 161, 195,
+    160, 195, 159, 195, 157, 195, 156, 195, 155, 195, 154, 195, 153, 195,
+    152, 195, 151, 195, 150, 195, 149, 195, 148, 195, 146, 195, 145, 195,
+    144, 195, 143, 195, 142, 195, 141, 195, 140, 195, 139, 195, 138, 195,
+    137, 195, 135, 195, 134, 195, 133, 195, 132, 195, 131, 195, 130, 195,
+    129, 195, 128, 195, 127, 195, 126, 195, 124, 195, 123, 195, 122, 195,
+    121, 195, 120, 195, 119, 195, 118, 195, 117, 195, 116, 195, 115, 195,
+    112, 195, 111, 195, 110, 195, 109, 195, 108, 195, 107, 195, 106, 195,
+    105, 195, 104, 195, 103, 195, 101, 195, 100, 195, 99, 195, 98, 195, 97,
+    195, 96, 195, 95, 195, 94, 195, 93, 195, 92, 195, 90, 195, 89, 195, 88,
+    195, 87, 195, 86, 195, 85, 195, 84, 195, 83, 195, 82, 195, 81, 195, 79,
+    195, 78, 195, 77, 195, 76, 195, 75, 195, 74, 195, 73, 195, 72, 195, 71,
+    195, 70, 195, 68, 195, 67, 195, 66, 195, 65, 195, 64, 195, 63, 195, 62,
+    195, 61, 195, 60, 195, 59, 195, 57, 195, 56, 195, 55, 195, 54, 195, 53,
+    195, 52, 195, 51, 221, 254, 31, 57, 221, 254, 250, 37, 221, 254, 17, 192,
+    76, 221, 254, 17, 101, 221, 254, 17, 104, 221, 254, 17, 133, 221, 254,
+    17, 134, 221, 254, 17, 151, 221, 254, 17, 170, 221, 254, 17, 179, 221,
+    254, 17, 174, 221, 254, 17, 182, 8, 6, 1, 41, 4, 217, 215, 26, 230, 210,
+    8, 2, 1, 41, 4, 217, 215, 26, 230, 210, 8, 6, 1, 228, 97, 4, 217, 215,
+    26, 230, 210, 8, 2, 1, 228, 97, 4, 217, 215, 26, 230, 210, 8, 6, 1, 124,
+    4, 217, 215, 26, 230, 210, 8, 2, 1, 124, 4, 217, 215, 26, 230, 210, 8, 6,
+    1, 234, 253, 4, 84, 219, 176, 63, 8, 2, 1, 234, 253, 4, 84, 219, 176, 63,
+    8, 6, 1, 234, 253, 4, 84, 219, 176, 248, 84, 26, 230, 210, 8, 2, 1, 234,
+    253, 4, 84, 219, 176, 248, 84, 26, 230, 210, 8, 6, 1, 234, 253, 4, 84,
+    219, 176, 248, 84, 26, 251, 129, 8, 2, 1, 234, 253, 4, 84, 219, 176, 248,
+    84, 26, 251, 129, 8, 6, 1, 185, 4, 84, 219, 176, 63, 8, 2, 1, 185, 4, 84,
+    219, 176, 63, 8, 6, 1, 185, 4, 84, 219, 176, 248, 84, 26, 230, 210, 8, 2,
+    1, 185, 4, 84, 219, 176, 248, 84, 26, 230, 210, 8, 6, 1, 185, 4, 84, 219,
+    176, 248, 84, 26, 251, 129, 8, 2, 1, 185, 4, 84, 219, 176, 248, 84, 26,
+    251, 129, 8, 6, 1, 206, 159, 4, 84, 219, 176, 63, 8, 2, 1, 206, 159, 4,
+    84, 219, 176, 63, 8, 6, 1, 234, 253, 4, 242, 122, 26, 217, 214, 8, 2, 1,
+    234, 253, 4, 242, 122, 26, 217, 214, 8, 6, 1, 234, 253, 4, 242, 122, 26,
+    246, 207, 8, 2, 1, 234, 253, 4, 242, 122, 26, 246, 207, 8, 2, 1, 228, 97,
+    4, 78, 95, 26, 251, 129, 8, 2, 1, 214, 168, 4, 199, 91, 58, 8, 6, 1, 41,
+    4, 211, 244, 26, 251, 129, 8, 2, 1, 41, 4, 211, 244, 26, 251, 129, 8, 6,
+    1, 41, 4, 211, 244, 26, 199, 90, 8, 2, 1, 41, 4, 211, 244, 26, 199, 90,
+    8, 6, 1, 234, 253, 4, 211, 244, 26, 251, 129, 8, 2, 1, 234, 253, 4, 211,
+    244, 26, 251, 129, 8, 6, 1, 234, 253, 4, 211, 244, 26, 199, 90, 8, 2, 1,
+    234, 253, 4, 211, 244, 26, 199, 90, 8, 6, 1, 234, 253, 4, 78, 95, 26,
+    251, 129, 8, 2, 1, 234, 253, 4, 78, 95, 26, 251, 129, 8, 6, 1, 234, 253,
+    4, 78, 95, 26, 199, 90, 8, 2, 1, 234, 253, 4, 78, 95, 26, 199, 90, 8, 2,
+    1, 228, 97, 4, 78, 95, 26, 230, 210, 8, 2, 1, 228, 97, 4, 78, 95, 26,
+    199, 90, 8, 6, 1, 228, 97, 4, 211, 244, 26, 251, 129, 8, 2, 1, 228, 97,
+    4, 211, 244, 26, 78, 95, 26, 251, 129, 8, 6, 1, 228, 97, 4, 211, 244, 26,
+    199, 90, 8, 2, 1, 228, 97, 4, 211, 244, 26, 78, 95, 26, 199, 90, 8, 6, 1,
+    223, 66, 4, 199, 90, 8, 2, 1, 223, 66, 4, 78, 95, 26, 199, 90, 8, 6, 1,
+    220, 202, 4, 199, 90, 8, 2, 1, 220, 202, 4, 199, 90, 8, 6, 1, 218, 237,
+    4, 199, 90, 8, 2, 1, 218, 237, 4, 199, 90, 8, 6, 1, 208, 112, 4, 199, 90,
+    8, 2, 1, 208, 112, 4, 199, 90, 8, 6, 1, 124, 4, 211, 244, 26, 251, 129,
+    8, 2, 1, 124, 4, 211, 244, 26, 251, 129, 8, 6, 1, 124, 4, 211, 244, 26,
+    199, 90, 8, 2, 1, 124, 4, 211, 244, 26, 199, 90, 8, 6, 1, 124, 4, 217,
+    215, 26, 251, 129, 8, 2, 1, 124, 4, 217, 215, 26, 251, 129, 8, 6, 1, 124,
+    4, 217, 215, 26, 199, 90, 8, 2, 1, 124, 4, 217, 215, 26, 199, 90, 8, 2,
+    1, 251, 109, 4, 230, 210, 8, 2, 1, 211, 184, 185, 4, 230, 210, 8, 2, 1,
+    211, 184, 185, 4, 251, 129, 8, 2, 1, 163, 196, 237, 4, 230, 210, 8, 2, 1,
+    163, 196, 237, 4, 251, 129, 8, 2, 1, 205, 241, 4, 230, 210, 8, 2, 1, 205,
+    241, 4, 251, 129, 8, 2, 1, 229, 14, 205, 241, 4, 230, 210, 8, 2, 1, 229,
+    14, 205, 241, 4, 251, 129, 9, 204, 162, 97, 4, 230, 67, 95, 4, 251, 26,
+    9, 204, 162, 97, 4, 230, 67, 95, 4, 194, 119, 9, 204, 162, 97, 4, 230,
+    67, 95, 4, 157, 217, 168, 9, 204, 162, 97, 4, 230, 67, 95, 4, 212, 0, 9,
+    204, 162, 97, 4, 230, 67, 95, 4, 68, 9, 204, 162, 97, 4, 230, 67, 95, 4,
+    192, 214, 9, 204, 162, 97, 4, 230, 67, 95, 4, 71, 9, 204, 162, 97, 4,
+    230, 67, 95, 4, 251, 108, 9, 204, 162, 213, 124, 4, 222, 39, 248, 76, 1,
+    221, 224, 44, 116, 222, 184, 44, 116, 214, 167, 44, 116, 247, 52, 44,
+    116, 212, 203, 44, 116, 198, 86, 44, 116, 213, 179, 44, 116, 200, 228,
+    44, 116, 215, 151, 44, 116, 211, 93, 44, 116, 218, 236, 44, 116, 193,
+    148, 44, 116, 150, 44, 116, 165, 44, 116, 196, 236, 44, 116, 219, 127,
+    44, 116, 219, 138, 44, 116, 207, 4, 44, 116, 213, 161, 44, 116, 223, 65,
+    44, 116, 204, 66, 44, 116, 202, 95, 44, 116, 206, 158, 44, 116, 230, 124,
+    44, 116, 221, 48, 44, 5, 222, 159, 44, 5, 221, 204, 44, 5, 221, 183, 44,
+    5, 221, 33, 44, 5, 220, 246, 44, 5, 222, 57, 44, 5, 222, 48, 44, 5, 222,
+    135, 44, 5, 221, 113, 44, 5, 221, 88, 44, 5, 222, 76, 44, 5, 214, 164,
+    44, 5, 214, 113, 44, 5, 214, 109, 44, 5, 214, 78, 44, 5, 214, 69, 44, 5,
+    214, 152, 44, 5, 214, 150, 44, 5, 214, 161, 44, 5, 214, 90, 44, 5, 214,
+    85, 44, 5, 214, 154, 44, 5, 247, 18, 44, 5, 242, 149, 44, 5, 242, 139,
+    44, 5, 238, 162, 44, 5, 238, 120, 44, 5, 246, 158, 44, 5, 246, 150, 44,
+    5, 247, 7, 44, 5, 242, 63, 44, 5, 238, 239, 44, 5, 246, 191, 44, 5, 212,
+    200, 44, 5, 212, 181, 44, 5, 212, 175, 44, 5, 212, 158, 44, 5, 212, 150,
+    44, 5, 212, 190, 44, 5, 212, 189, 44, 5, 212, 197, 44, 5, 212, 165, 44,
+    5, 212, 162, 44, 5, 212, 193, 44, 5, 198, 82, 44, 5, 198, 62, 44, 5, 198,
+    61, 44, 5, 198, 50, 44, 5, 198, 47, 44, 5, 198, 78, 44, 5, 198, 77, 44,
+    5, 198, 81, 44, 5, 198, 60, 44, 5, 198, 59, 44, 5, 198, 80, 44, 5, 213,
+    177, 44, 5, 213, 163, 44, 5, 213, 162, 44, 5, 213, 146, 44, 5, 213, 145,
+    44, 5, 213, 173, 44, 5, 213, 172, 44, 5, 213, 176, 44, 5, 213, 148, 44,
+    5, 213, 147, 44, 5, 213, 175, 44, 5, 200, 174, 44, 5, 199, 128, 44, 5,
+    199, 105, 44, 5, 198, 45, 44, 5, 198, 0, 44, 5, 200, 79, 44, 5, 200, 56,
+    44, 5, 200, 149, 44, 5, 155, 44, 5, 198, 254, 44, 5, 200, 100, 44, 5,
+    215, 84, 44, 5, 214, 60, 44, 5, 214, 27, 44, 5, 213, 22, 44, 5, 212, 215,
+    44, 5, 214, 214, 44, 5, 214, 203, 44, 5, 215, 70, 44, 5, 213, 142, 44, 5,
+    213, 125, 44, 5, 215, 42, 44, 5, 211, 77, 44, 5, 210, 51, 44, 5, 210, 12,
+    44, 5, 209, 51, 44, 5, 209, 15, 44, 5, 210, 181, 44, 5, 210, 168, 44, 5,
+    211, 55, 44, 5, 209, 198, 44, 5, 209, 172, 44, 5, 210, 197, 44, 5, 217,
+    219, 44, 5, 216, 175, 44, 5, 216, 137, 44, 5, 215, 241, 44, 5, 215, 181,
+    44, 5, 217, 48, 44, 5, 217, 29, 44, 5, 217, 180, 44, 5, 216, 91, 44, 5,
+    216, 35, 44, 5, 217, 96, 44, 5, 193, 129, 44, 5, 193, 22, 44, 5, 193, 12,
+    44, 5, 192, 214, 44, 5, 192, 177, 44, 5, 193, 69, 44, 5, 193, 66, 44, 5,
+    193, 108, 44, 5, 193, 1, 44, 5, 192, 235, 44, 5, 193, 80, 44, 5, 208, 68,
+    44, 5, 207, 151, 44, 5, 207, 88, 44, 5, 206, 218, 44, 5, 206, 179, 44, 5,
+    208, 7, 44, 5, 207, 234, 44, 5, 208, 48, 44, 5, 207, 55, 44, 5, 207, 28,
+    44, 5, 208, 17, 44, 5, 220, 184, 44, 5, 219, 209, 44, 5, 219, 191, 44, 5,
+    219, 36, 44, 5, 219, 6, 44, 5, 220, 42, 44, 5, 220, 32, 44, 5, 220, 155,
+    44, 5, 219, 107, 44, 5, 219, 73, 44, 5, 220, 60, 44, 5, 196, 156, 44, 5,
+    196, 39, 44, 5, 196, 22, 44, 5, 194, 223, 44, 5, 194, 215, 44, 5, 196,
+    123, 44, 5, 196, 118, 44, 5, 196, 152, 44, 5, 195, 252, 44, 5, 195, 236,
+    44, 5, 196, 129, 44, 5, 219, 125, 44, 5, 219, 120, 44, 5, 219, 119, 44,
+    5, 219, 116, 44, 5, 219, 115, 44, 5, 219, 122, 44, 5, 219, 121, 44, 5,
+    219, 124, 44, 5, 219, 118, 44, 5, 219, 117, 44, 5, 219, 123, 44, 5, 219,
+    136, 44, 5, 219, 129, 44, 5, 219, 128, 44, 5, 219, 112, 44, 5, 219, 111,
+    44, 5, 219, 132, 44, 5, 219, 131, 44, 5, 219, 135, 44, 5, 219, 114, 44,
+    5, 219, 113, 44, 5, 219, 133, 44, 5, 207, 2, 44, 5, 206, 247, 44, 5, 206,
+    246, 44, 5, 206, 239, 44, 5, 206, 232, 44, 5, 206, 254, 44, 5, 206, 253,
+    44, 5, 207, 1, 44, 5, 206, 245, 44, 5, 206, 244, 44, 5, 207, 0, 44, 5,
+    213, 159, 44, 5, 213, 154, 44, 5, 213, 153, 44, 5, 213, 150, 44, 5, 213,
+    149, 44, 5, 213, 156, 44, 5, 213, 155, 44, 5, 213, 158, 44, 5, 213, 152,
+    44, 5, 213, 151, 44, 5, 213, 157, 44, 5, 223, 61, 44, 5, 223, 20, 44, 5,
+    223, 12, 44, 5, 222, 214, 44, 5, 222, 194, 44, 5, 223, 41, 44, 5, 223,
+    39, 44, 5, 223, 55, 44, 5, 222, 233, 44, 5, 222, 223, 44, 5, 223, 48, 44,
+    5, 204, 59, 44, 5, 203, 236, 44, 5, 203, 231, 44, 5, 203, 164, 44, 5,
+    203, 146, 44, 5, 204, 12, 44, 5, 204, 10, 44, 5, 204, 47, 44, 5, 203,
+    211, 44, 5, 203, 203, 44, 5, 204, 21, 44, 5, 202, 91, 44, 5, 202, 59, 44,
+    5, 202, 55, 44, 5, 202, 46, 44, 5, 202, 43, 44, 5, 202, 65, 44, 5, 202,
+    64, 44, 5, 202, 90, 44, 5, 202, 51, 44, 5, 202, 50, 44, 5, 202, 67, 44,
+    5, 206, 91, 44, 5, 203, 125, 44, 5, 203, 97, 44, 5, 201, 184, 44, 5, 201,
+    86, 44, 5, 205, 223, 44, 5, 205, 205, 44, 5, 206, 75, 44, 5, 202, 212,
+    44, 5, 202, 183, 44, 5, 206, 12, 44, 5, 230, 99, 44, 5, 229, 178, 44, 5,
+    229, 150, 44, 5, 228, 181, 44, 5, 228, 150, 44, 5, 229, 255, 44, 5, 229,
+    225, 44, 5, 230, 88, 44, 5, 229, 43, 44, 5, 229, 16, 44, 5, 230, 11, 44,
+    5, 221, 47, 44, 5, 221, 46, 44, 5, 221, 41, 44, 5, 221, 40, 44, 5, 221,
+    37, 44, 5, 221, 36, 44, 5, 221, 43, 44, 5, 221, 42, 44, 5, 221, 45, 44,
+    5, 221, 39, 44, 5, 221, 38, 44, 5, 221, 44, 44, 5, 203, 171, 159, 116, 3,
+    193, 94, 159, 116, 3, 208, 36, 159, 116, 3, 207, 200, 98, 1, 197, 175,
+    93, 116, 3, 242, 55, 160, 93, 116, 3, 242, 55, 221, 250, 93, 116, 3, 242,
+    55, 221, 113, 93, 116, 3, 242, 55, 221, 220, 93, 116, 3, 242, 55, 214,
+    90, 93, 116, 3, 242, 55, 247, 19, 93, 116, 3, 242, 55, 246, 117, 93, 116,
+    3, 242, 55, 242, 63, 93, 116, 3, 242, 55, 242, 188, 93, 116, 3, 242, 55,
+    212, 165, 93, 116, 3, 242, 55, 238, 0, 93, 116, 3, 242, 55, 198, 71, 93,
+    116, 3, 242, 55, 236, 146, 93, 116, 3, 242, 55, 198, 66, 93, 116, 3, 242,
+    55, 181, 93, 116, 3, 242, 55, 189, 93, 116, 3, 242, 55, 199, 240, 93,
+    116, 3, 242, 55, 155, 93, 116, 3, 242, 55, 199, 176, 93, 116, 3, 242, 55,
+    213, 142, 93, 116, 3, 242, 55, 249, 3, 93, 116, 3, 242, 55, 210, 94, 93,
+    116, 3, 242, 55, 209, 198, 93, 116, 3, 242, 55, 210, 65, 93, 116, 3, 242,
+    55, 216, 91, 93, 116, 3, 242, 55, 193, 1, 93, 116, 3, 242, 55, 207, 55,
+    93, 116, 3, 242, 55, 219, 107, 93, 116, 3, 242, 55, 195, 252, 93, 116, 3,
+    242, 55, 204, 64, 93, 116, 3, 242, 55, 202, 92, 93, 116, 3, 242, 55, 188,
+    93, 116, 3, 242, 55, 144, 93, 116, 3, 242, 55, 177, 93, 18, 3, 242, 55,
+    208, 239, 93, 223, 177, 18, 3, 242, 55, 208, 177, 93, 223, 177, 18, 3,
+    242, 55, 206, 167, 93, 223, 177, 18, 3, 242, 55, 206, 160, 93, 223, 177,
+    18, 3, 242, 55, 208, 219, 93, 18, 3, 211, 219, 93, 18, 3, 251, 250, 229,
+    140, 1, 248, 34, 214, 165, 229, 140, 1, 248, 34, 214, 113, 229, 140, 1,
+    248, 34, 214, 78, 229, 140, 1, 248, 34, 214, 152, 229, 140, 1, 248, 34,
+    214, 90, 75, 1, 248, 34, 214, 165, 75, 1, 248, 34, 214, 113, 75, 1, 248,
+    34, 214, 78, 75, 1, 248, 34, 214, 152, 75, 1, 248, 34, 214, 90, 75, 1,
+    251, 55, 246, 158, 75, 1, 251, 55, 198, 45, 75, 1, 251, 55, 155, 75, 1,
+    251, 55, 211, 93, 73, 1, 233, 188, 233, 187, 238, 247, 158, 161, 73, 1,
+    233, 187, 233, 188, 238, 247, 158, 161,
 };
 
-static const unsigned short phrasebook_offset1[] = {
+static const unsigned char phrasebook_offset1[] = {
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
     21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
-    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
-    57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
-    75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
-    93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
-    119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    130, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 131, 132, 133,
-    134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
-    148, 104, 149, 150, 151, 152, 153, 154, 104, 155, 156, 157, 104, 158,
-    159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 104, 169, 104, 170,
-    171, 172, 173, 174, 175, 176, 177, 178, 104, 179, 180, 104, 181, 182,
-    183, 184, 104, 185, 186, 104, 187, 188, 189, 104, 104, 190, 191, 192,
-    193, 104, 194, 104, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
-    205, 206, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 207, 208, 209, 210, 211,
-    212, 213, 214, 215, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 216, 217, 218, 219, 220, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 221, 222, 223, 224, 225,
-    226, 227, 228, 104, 104, 104, 104, 229, 230, 231, 232, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 233, 234, 235, 236, 237, 238, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 239,
-    240, 241, 242, 243, 244, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 245, 246, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 247, 248, 249, 250, 251, 252, 253,
-    104, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
-    267, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 268, 104, 269,
-    104, 104, 270, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 271,
-    272, 273, 104, 104, 104, 104, 104, 274, 275, 276, 104, 277, 278, 104,
-    104, 279, 280, 281, 282, 283, 104, 284, 285, 286, 287, 288, 289, 290,
-    291, 292, 293, 294, 295, 296, 297, 298, 299, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 300, 301, 302,
-    303, 304, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 305, 104, 306, 307, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 308, 309, 310,
-    311, 312, 313, 314, 315, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+    39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 55, 56, 57, 58,
+    59, 60, 61, 62, 63, 64, 65, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 66, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 67, 68, 69, 70, 71, 72,
+    73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+    91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 52, 101, 102, 103, 104, 105,
+    106, 107, 108, 109, 110, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 111,
+    112, 113, 114, 115, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 116, 117, 118, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 119, 120, 121, 122, 52, 52, 123, 124, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    125, 126, 127, 128, 129, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 130, 131, 132, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    133, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 52, 52,
+    52, 52, 52, 145, 146, 147, 52, 52, 52, 52, 52, 148, 149, 52, 52, 150,
+    151, 152, 52, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    165, 166, 167, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 168,
+    169, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 170, 171, 172, 173, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+    52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
 };
 
 static const unsigned int phrasebook_offset2[] = {
@@ -19711,2700 +20273,2705 @@
     339, 344, 349, 353, 356, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 366, 371,
     374, 377, 380, 383, 386, 389, 391, 394, 400, 408, 411, 415, 418, 420,
-    423, 426, 429, 432, 436, 439, 442, 445, 447, 450, 456, 464, 470, 476,
-    482, 487, 494, 500, 507, 514, 521, 529, 534, 542, 550, 557, 565, 573,
-    581, 588, 596, 604, 609, 617, 624, 630, 637, 644, 651, 654, 660, 667,
-    673, 680, 687, 694, 699, 706, 713, 719, 726, 733, 740, 748, 753, 761,
-    769, 776, 784, 792, 800, 807, 815, 823, 828, 836, 843, 849, 856, 863,
-    870, 873, 879, 886, 892, 899, 906, 913, 918, 926, 933, 940, 947, 954,
-    961, 968, 975, 982, 990, 998, 1006, 1014, 1022, 1030, 1038, 1046, 1053,
-    1060, 1068, 1076, 1084, 1092, 1100, 1108, 1116, 1124, 1132, 1140, 1148,
-    1156, 1164, 1172, 1180, 1188, 1196, 1204, 1212, 1220, 1227, 1234, 1242,
-    1250, 1258, 1266, 1274, 1282, 1290, 1298, 1306, 1312, 1317, 1322, 1330,
-    1338, 1346, 1354, 1359, 1366, 1373, 1381, 1389, 1397, 1405, 1414, 1423,
-    1430, 1437, 1444, 1451, 1459, 1467, 1475, 1483, 1494, 1499, 1504, 1511,
-    1518, 1525, 1532, 1539, 1546, 1551, 1556, 1563, 1570, 1578, 1586, 1594,
-    1602, 1609, 1616, 1624, 1632, 1640, 1648, 1656, 1664, 1672, 1680, 1688,
-    1696, 1703, 1710, 1717, 1724, 1731, 1738, 1745, 1752, 1760, 1768, 1775,
-    1782, 1789, 1796, 1804, 1812, 1820, 1828, 1836, 1843, 1850, 1858, 1866,
-    1874, 1882, 1888, 1894, 1900, 1907, 1914, 1919, 1924, 1929, 1936, 1943,
-    1950, 1957, 1965, 1973, 1979, 1985, 1990, 1995, 2002, 2009, 2016, 2021,
-    2026, 2031, 2038, 2045, 2052, 2059, 2066, 2072, 2080, 2090, 2098, 2105,
-    2112, 2117, 2122, 2129, 2136, 2140, 2145, 2150, 2155, 2163, 2172, 2179,
-    2186, 2195, 2202, 2209, 2214, 2221, 2228, 2235, 2242, 2249, 2254, 2261,
-    2268, 2276, 2281, 2286, 2291, 2301, 2305, 2311, 2317, 2323, 2329, 2337,
-    2350, 2358, 2363, 2373, 2378, 2383, 2393, 2398, 2405, 2412, 2420, 2428,
-    2435, 2442, 2449, 2456, 2466, 2476, 2485, 2494, 2504, 2514, 2524, 2534,
-    2539, 2549, 2559, 2569, 2579, 2587, 2595, 2602, 2609, 2617, 2625, 2633,
-    2641, 2648, 2655, 2665, 2675, 2683, 2691, 2699, 2704, 2714, 2719, 2726,
-    2733, 2738, 2743, 2751, 2759, 2769, 2779, 2786, 2793, 2802, 2811, 2819,
-    2827, 2836, 2845, 2854, 2863, 2873, 2883, 2892, 2901, 2911, 2921, 2929,
-    2937, 2946, 2955, 2964, 2973, 2983, 2993, 3001, 3009, 3018, 3027, 3036,
-    3045, 3054, 3063, 3068, 3073, 3081, 3089, 3099, 3107, 3112, 3117, 3124,
-    3131, 3138, 3145, 3153, 3161, 3171, 3181, 3191, 3201, 3208, 3215, 3225,
-    3235, 3243, 3251, 3259, 3267, 3275, 3282, 3289, 3296, 3302, 3309, 3316,
-    3323, 3332, 3342, 3352, 3359, 3366, 3372, 3377, 3383, 3390, 3397, 3404,
-    3411, 3422, 3432, 3439, 3446, 3453, 3460, 3465, 3470, 3476, 3482, 3487,
-    3495, 3503, 3510, 3516, 3521, 3528, 3533, 3540, 3550, 3559, 3568, 3575,
-    3581, 3587, 3592, 3599, 3605, 3612, 3619, 3626, 3631, 3636, 3645, 3653,
-    3662, 3667, 3673, 3683, 3690, 3698, 3707, 3713, 3719, 3725, 3732, 3737,
-    3742, 3752, 3760, 3769, 3777, 3785, 3795, 3800, 3807, 3814, 3819, 3831,
-    3840, 3848, 3854, 3863, 3868, 3873, 3880, 3886, 3892, 3898, 3904, 3913,
-    3921, 3926, 3934, 3940, 3948, 3956, 3962, 3968, 3974, 3981, 3989, 3995,
-    4003, 4009, 4014, 4021, 4029, 4039, 4046, 4053, 4063, 4070, 4077, 4087,
-    4094, 4101, 4108, 4114, 4120, 4129, 4141, 4146, 4153, 4158, 4162, 4167,
-    4175, 4182, 4187, 4192, 4196, 4201, 4206, 4210, 4216, 4222, 4228, 4234,
-    4242, 4247, 4252, 4257, 4262, 4268, 4270, 4275, 4279, 4285, 4291, 4297,
-    4302, 4309, 4316, 4322, 4329, 4337, 4345, 4350, 4355, 4359, 4364, 4366,
-    4368, 4371, 4373, 4376, 4381, 4386, 4392, 4397, 4401, 4406, 4411, 4420,
-    4426, 4431, 4437, 4442, 4448, 4456, 4464, 4468, 4472, 4477, 4483, 4489,
-    4495, 4501, 4506, 4513, 4521, 4529, 4534, 4540, 4547, 4554, 4561, 4568,
-    4572, 4577, 4582, 4587, 4592, 4597, 4600, 4603, 4606, 4609, 4612, 4615,
-    4619, 4623, 4629, 4632, 4637, 4643, 4649, 4652, 4657, 4662, 4666, 4672,
-    4678, 4684, 4690, 4695, 4700, 4705, 4708, 4714, 4719, 4724, 4728, 4733,
-    4739, 4745, 4748, 4752, 4756, 4760, 4763, 4766, 4771, 4775, 4782, 4786,
-    4792, 4796, 4802, 4806, 4810, 4814, 4819, 4824, 4831, 4837, 4844, 4850,
-    4856, 4862, 4865, 4869, 4873, 4877, 4881, 4886, 4891, 4895, 4899, 4905,
-    4909, 4913, 4918, 4924, 4929, 4935, 4939, 4946, 4951, 4956, 4961, 4966,
-    4972, 4975, 4979, 4984, 4989, 4998, 5004, 5009, 5013, 5018, 5022, 5027,
-    5031, 5035, 5040, 5044, 5050, 5055, 5060, 5065, 5070, 5075, 5080, 5086,
-    5092, 5098, 5104, 5109, 5115, 5121, 5127, 5132, 5137, 5144, 5151, 5155,
-    5161, 5168, 0, 0, 5175, 5178, 5187, 5196, 5207, 5211, 0, 0, 0, 0, 5216,
-    5219, 5224, 5232, 5237, 5245, 5253, 0, 5261, 0, 5269, 5277, 5285, 5296,
-    5301, 5306, 5311, 5316, 5321, 5326, 5331, 5336, 5341, 5346, 5351, 5356,
-    5361, 5366, 5371, 5376, 0, 5381, 5386, 5391, 5396, 5401, 5406, 5411,
-    5416, 5424, 5432, 5440, 5448, 5456, 5464, 5475, 5480, 5485, 5490, 5495,
-    5500, 5505, 5510, 5515, 5520, 5525, 5530, 5535, 5540, 5545, 5550, 5555,
-    5560, 5566, 5571, 5576, 5581, 5586, 5591, 5596, 5601, 5609, 5617, 5625,
-    5633, 5641, 5646, 5650, 5654, 5661, 5671, 5681, 5685, 5689, 5693, 5699,
-    5706, 5710, 5715, 5719, 5724, 5728, 5733, 5737, 5742, 5747, 5752, 5757,
-    5762, 5767, 5772, 5777, 5782, 5787, 5792, 5797, 5802, 5807, 5812, 5816,
-    5820, 5826, 5830, 5835, 5841, 5849, 5854, 5859, 5866, 5871, 5876, 5883,
-    5892, 5901, 5912, 5920, 5925, 5930, 5935, 5942, 5947, 5953, 5958, 5963,
-    5968, 5973, 5978, 5983, 5991, 5997, 6002, 6006, 6011, 6016, 6021, 6026,
-    6031, 6036, 6041, 6045, 6051, 6055, 6060, 6065, 6070, 6074, 6079, 6084,
-    6089, 6094, 6098, 6103, 6107, 6112, 6117, 6122, 6127, 6133, 6138, 6144,
-    6148, 6153, 6157, 6161, 6166, 6171, 6176, 6181, 6186, 6191, 6196, 6200,
-    6206, 6210, 6215, 6220, 6225, 6229, 6234, 6239, 6244, 6249, 6253, 6258,
-    6262, 6267, 6272, 6277, 6282, 6288, 6293, 6299, 6303, 6308, 6312, 6320,
-    6325, 6330, 6335, 6342, 6347, 6353, 6358, 6363, 6368, 6373, 6378, 6383,
-    6391, 6397, 6402, 6407, 6412, 6417, 6422, 6428, 6434, 6441, 6448, 6457,
-    6466, 6473, 6480, 6489, 6498, 6503, 6508, 6513, 6518, 6523, 6528, 6533,
-    6538, 6549, 6560, 6565, 6570, 6577, 6584, 6592, 6600, 6605, 6610, 6615,
-    6620, 6624, 6628, 6632, 6638, 6644, 6648, 6655, 6660, 6670, 6680, 6686,
-    6692, 6700, 6708, 6716, 6724, 6731, 6738, 6746, 6754, 6762, 6770, 6778,
-    6786, 6794, 6802, 6810, 6818, 6825, 6832, 6838, 6844, 6852, 6860, 6867,
-    6874, 6882, 6890, 6896, 6902, 6910, 6918, 6926, 6934, 6940, 6946, 6954,
-    6962, 6970, 6978, 6985, 6992, 7000, 7008, 7016, 7024, 7029, 7034, 7041,
-    7048, 7058, 7068, 7072, 7080, 7088, 7095, 7102, 7110, 7118, 7125, 7132,
-    7140, 7148, 7155, 7162, 7170, 7178, 7183, 7190, 7197, 7204, 7211, 7217,
-    7223, 7231, 7239, 7244, 7249, 7257, 7265, 7273, 7281, 7289, 7297, 7304,
-    7311, 7319, 7327, 7335, 7343, 7350, 7357, 7363, 7369, 7378, 7387, 7395,
-    7403, 7410, 7417, 7424, 7431, 7438, 7445, 7453, 7461, 7469, 7477, 7485,
-    7493, 7503, 7513, 7520, 7527, 7534, 7541, 7548, 7555, 7562, 7569, 7576,
-    7583, 7590, 7597, 7604, 7611, 7618, 7625, 7632, 7639, 7646, 7653, 7660,
-    7667, 7674, 7681, 7686, 7691, 7696, 7701, 7706, 7711, 7716, 7721, 7726,
-    7731, 7737, 7743, 7751, 7759, 7767, 7775, 7783, 7791, 7799, 7807, 7815,
-    7823, 7828, 7833, 7838, 7843, 7851, 0, 7859, 7865, 7871, 7877, 7883,
-    7889, 7895, 7901, 7907, 7912, 7918, 7924, 7930, 7936, 7942, 7948, 7954,
-    7960, 7966, 7972, 7978, 7984, 7990, 7996, 8002, 8008, 8014, 8020, 8025,
-    8031, 8037, 8043, 8049, 8055, 8061, 8067, 8073, 8079, 0, 0, 8085, 8093,
-    8097, 8102, 8107, 8111, 8116, 8121, 8128, 8134, 8140, 8146, 8152, 8158,
-    8164, 8170, 8176, 8181, 8187, 8193, 8199, 8205, 8211, 8217, 8223, 8229,
-    8235, 8241, 8247, 8253, 8259, 8265, 8271, 8277, 8283, 8289, 8294, 8300,
-    8306, 8312, 8318, 8324, 8330, 8336, 8342, 8348, 8354, 8362, 8369, 8375,
-    0, 0, 8379, 8386, 8393, 0, 8398, 8403, 8408, 8413, 8420, 8427, 8432,
-    8437, 8442, 8447, 8452, 8457, 8462, 8469, 8474, 8481, 8488, 8493, 8500,
-    8505, 8510, 8515, 8522, 8527, 8532, 8539, 8548, 8553, 8558, 8563, 8568,
-    8574, 8579, 8586, 8593, 8600, 8605, 8610, 8615, 8620, 8625, 8630, 8640,
-    8645, 8654, 8659, 8664, 8669, 8674, 8681, 8688, 8695, 8701, 8707, 8714,
-    0, 0, 0, 0, 0, 0, 0, 0, 8721, 8725, 8729, 8733, 8737, 8741, 8745, 8749,
-    8753, 8757, 8761, 8766, 8770, 8774, 8779, 8783, 8788, 8792, 8796, 8800,
-    8805, 8809, 8814, 8818, 8822, 8826, 8830, 0, 0, 0, 0, 8834, 8839, 8846,
-    8854, 8861, 8866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8871, 8874, 8878,
-    8883, 8887, 8891, 8895, 8901, 8907, 8910, 8917, 8926, 8929, 8932, 8937,
-    8943, 8947, 8955, 8961, 8967, 8975, 8979, 8984, 8995, 9000, 9004, 9008,
-    9012, 9015, 0, 9018, 9025, 9029, 9035, 9039, 9046, 9053, 9061, 9068,
-    9075, 9079, 9083, 9089, 9093, 9097, 9101, 9105, 9109, 9113, 9117, 9121,
-    9125, 9129, 9133, 9137, 9141, 9145, 9149, 9153, 9157, 9166, 9175, 9185,
-    9195, 9205, 9208, 9212, 9216, 9220, 9224, 9228, 9232, 9236, 9240, 9245,
-    9249, 9252, 9255, 9258, 9261, 9264, 9267, 9270, 9273, 9277, 9281, 9285,
-    9290, 9295, 9301, 9304, 9311, 9320, 9325, 9330, 9337, 9343, 9348, 9352,
-    9356, 9360, 9364, 9368, 9372, 9376, 9380, 9384, 9388, 9393, 9398, 9405,
-    9411, 9417, 9423, 9428, 9437, 9446, 9451, 9458, 9465, 9472, 9479, 9483,
-    9487, 9491, 9498, 9509, 9513, 9517, 9521, 9528, 9537, 9541, 9545, 9553,
-    9557, 9561, 9565, 9572, 9579, 9591, 9595, 9599, 9603, 9614, 9624, 9628,
-    9636, 9643, 9650, 9659, 9670, 9679, 9683, 9693, 9704, 9713, 9728, 9737,
-    9746, 9755, 9764, 9770, 9779, 9786, 9790, 9799, 9803, 9810, 9819, 9823,
-    9829, 9836, 9843, 9847, 9856, 9860, 9867, 9871, 9880, 9884, 9893, 9901,
-    9908, 9917, 9926, 9933, 9939, 9943, 9950, 9959, 9965, 9972, 9979, 9985,
-    9995, 10003, 10010, 10016, 10020, 10023, 10027, 10033, 10042, 10046,
-    10052, 10058, 10065, 10072, 10075, 10083, 10088, 10097, 10102, 10106,
-    10119, 10132, 10138, 10145, 10150, 10156, 10161, 10167, 10177, 10184,
-    10193, 10203, 10209, 10214, 10219, 10223, 10227, 10232, 10237, 10243,
-    10251, 10259, 10270, 10275, 10284, 10293, 10300, 10306, 10312, 10318,
-    10324, 10330, 10336, 10342, 10348, 10354, 10361, 10368, 10375, 10381,
-    10389, 10398, 10405, 10413, 10421, 10427, 10433, 10439, 10447, 10455,
-    10465, 10475, 10479, 10485, 10491, 0, 10497, 10502, 10507, 10514, 10519,
-    10524, 10531, 10536, 10545, 10550, 10555, 10560, 10565, 10570, 10577,
-    10582, 10589, 10594, 10599, 10604, 10609, 10614, 10620, 10624, 10629,
-    10636, 10641, 10646, 10651, 10656, 10661, 10668, 10675, 10682, 10687,
-    10692, 10698, 10703, 10708, 10714, 10719, 10724, 10732, 10740, 10745,
-    10750, 10756, 10761, 10766, 10770, 10776, 10780, 10784, 10791, 10798,
-    10804, 10810, 10817, 10824, 10828, 0, 0, 10832, 10839, 10846, 10853,
-    10864, 10877, 10890, 10909, 10922, 10933, 10941, 10949, 10961, 10977,
-    10988, 10994, 11004, 11013, 11026, 11037, 11046, 11059, 11066, 11075,
-    11088, 11094, 11100, 11109, 11117, 11125, 11131, 11142, 11150, 11161,
-    11171, 11184, 11198, 11212, 11222, 11233, 11244, 11257, 11270, 11284,
-    11296, 11308, 11321, 11334, 11346, 11359, 11368, 11377, 11382, 11387,
-    11392, 11397, 11402, 11407, 11412, 11417, 11422, 11427, 11432, 11437,
-    11442, 11447, 11452, 11457, 11462, 11467, 11472, 11477, 11482, 11487,
-    11492, 11497, 11502, 11507, 11512, 11517, 11522, 11527, 11532, 11537,
-    11541, 11546, 11551, 11556, 11561, 11566, 11570, 11574, 11578, 11582,
-    11586, 11590, 11594, 11598, 11602, 11606, 11610, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 11615, 11620, 11624, 11628, 11632, 11636, 11640, 11644,
-    11648, 11652, 11656, 11660, 11665, 11669, 11673, 11677, 11682, 11686,
-    11691, 11696, 11701, 11705, 11709, 11714, 11719, 11724, 11728, 11733,
-    11737, 11742, 11747, 11751, 11755, 11762, 11766, 11771, 11775, 11779,
-    11784, 11788, 11795, 11802, 11809, 11815, 11823, 11831, 11840, 11848,
-    11855, 11862, 11870, 11876, 11882, 11888, 11894, 11901, 11906, 11910,
-    11915, 0, 0, 11919, 11923, 11928, 11933, 11938, 11943, 11948, 11953,
-    11958, 11963, 11968, 11973, 11978, 11983, 11988, 11993, 11998, 12003,
-    12008, 12013, 12018, 12023, 12028, 12033, 12038, 12043, 12048, 12053,
-    12058, 12063, 12071, 12078, 12084, 12089, 12097, 12104, 12110, 12117,
-    12123, 12128, 12135, 12142, 12148, 12153, 12158, 12164, 12169, 12174,
-    12180, 0, 0, 12185, 12191, 12197, 12203, 12209, 12215, 12221, 12226,
-    12234, 12240, 12246, 12252, 12258, 12264, 12272, 0, 12278, 12283, 12288,
-    12293, 12298, 12303, 12308, 12313, 12318, 12323, 12328, 12333, 12338,
-    12343, 12348, 12353, 12358, 12363, 12368, 12373, 12378, 12383, 12388,
-    12393, 12398, 12403, 12408, 12413, 0, 0, 12418, 0, 12422, 12428, 12434,
-    12440, 12446, 12452, 12458, 12464, 12469, 12475, 12481, 0, 0, 0, 0, 0, 0,
+    423, 426, 429, 432, 436, 439, 442, 445, 447, 450, 456, 464, 471, 478,
+    485, 490, 497, 504, 511, 518, 525, 533, 538, 546, 554, 562, 570, 578,
+    586, 594, 602, 610, 615, 623, 630, 637, 644, 651, 658, 661, 667, 674,
+    681, 688, 695, 703, 708, 715, 722, 729, 736, 743, 750, 758, 763, 771,
+    779, 787, 795, 803, 811, 819, 827, 835, 840, 848, 855, 862, 869, 876,
+    883, 886, 892, 899, 906, 913, 920, 928, 933, 941, 948, 955, 962, 969,
+    976, 983, 991, 999, 1007, 1015, 1023, 1031, 1039, 1047, 1055, 1063, 1070,
+    1077, 1085, 1093, 1101, 1109, 1117, 1125, 1133, 1141, 1149, 1157, 1165,
+    1173, 1181, 1189, 1197, 1205, 1213, 1221, 1229, 1237, 1244, 1251, 1259,
+    1267, 1275, 1283, 1291, 1299, 1307, 1315, 1323, 1329, 1334, 1339, 1347,
+    1355, 1363, 1371, 1376, 1384, 1392, 1400, 1408, 1416, 1424, 1433, 1442,
+    1449, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1515, 1520, 1525, 1532,
+    1539, 1546, 1553, 1561, 1569, 1574, 1579, 1587, 1595, 1603, 1611, 1619,
+    1627, 1635, 1643, 1651, 1659, 1667, 1675, 1683, 1691, 1699, 1707, 1715,
+    1723, 1730, 1737, 1744, 1751, 1758, 1765, 1772, 1779, 1787, 1795, 1803,
+    1811, 1818, 1825, 1833, 1841, 1849, 1857, 1865, 1873, 1881, 1889, 1897,
+    1905, 1913, 1919, 1925, 1931, 1938, 1945, 1950, 1955, 1961, 1968, 1975,
+    1982, 1989, 1997, 2005, 2011, 2017, 2022, 2028, 2035, 2042, 2049, 2054,
+    2059, 2064, 2071, 2078, 2085, 2092, 2099, 2105, 2113, 2123, 2131, 2138,
+    2145, 2150, 2155, 2162, 2169, 2173, 2178, 2183, 2188, 2196, 2205, 2212,
+    2219, 2228, 2235, 2242, 2247, 2254, 2261, 2268, 2275, 2282, 2287, 2294,
+    2301, 2309, 2314, 2319, 2324, 2334, 2338, 2344, 2350, 2356, 2362, 2370,
+    2383, 2391, 2396, 2406, 2411, 2416, 2426, 2431, 2438, 2445, 2453, 2461,
+    2468, 2475, 2482, 2489, 2499, 2509, 2519, 2529, 2539, 2549, 2559, 2569,
+    2574, 2584, 2594, 2604, 2614, 2622, 2630, 2637, 2644, 2652, 2660, 2668,
+    2676, 2683, 2690, 2700, 2710, 2718, 2726, 2734, 2739, 2749, 2754, 2762,
+    2770, 2775, 2780, 2788, 2796, 2807, 2818, 2826, 2834, 2844, 2854, 2862,
+    2870, 2879, 2888, 2897, 2906, 2916, 2926, 2935, 2944, 2954, 2964, 2972,
+    2980, 2989, 2998, 3007, 3016, 3026, 3036, 3044, 3052, 3061, 3070, 3079,
+    3088, 3097, 3106, 3111, 3116, 3124, 3132, 3142, 3150, 3155, 3160, 3167,
+    3174, 3181, 3188, 3196, 3204, 3214, 3224, 3234, 3244, 3251, 3258, 3268,
+    3278, 3286, 3294, 3302, 3310, 3318, 3325, 3332, 3339, 3345, 3352, 3359,
+    3366, 3375, 3385, 3395, 3402, 3409, 3415, 3420, 3426, 3433, 3440, 3447,
+    3454, 3465, 3475, 3482, 3489, 3496, 3503, 3508, 3513, 3519, 3525, 3531,
+    3539, 3547, 3554, 3560, 3565, 3572, 3578, 3586, 3597, 3607, 3616, 3623,
+    3629, 3635, 3640, 3647, 3653, 3660, 3667, 3674, 3679, 3684, 3693, 3701,
+    3710, 3715, 3721, 3731, 3738, 3746, 3755, 3761, 3767, 3773, 3780, 3785,
+    3790, 3800, 3808, 3817, 3825, 3833, 3843, 3848, 3855, 3862, 3867, 3879,
+    3888, 3896, 3902, 3911, 3916, 3921, 3928, 3934, 3940, 3946, 3952, 3961,
+    3969, 3974, 3982, 3988, 3996, 4004, 4010, 4016, 4022, 4030, 4038, 4044,
+    4052, 4058, 4063, 4070, 4078, 4088, 4095, 4102, 4112, 4119, 4126, 4136,
+    4143, 4150, 4157, 4163, 4169, 4178, 4190, 4195, 4202, 4207, 4211, 4216,
+    4224, 4231, 4236, 4241, 4245, 4250, 4255, 4259, 4265, 4271, 4277, 4283,
+    4291, 4296, 4301, 4306, 4311, 4317, 4319, 4324, 4328, 4334, 4340, 4346,
+    4351, 4358, 4365, 4371, 4378, 4386, 4394, 4399, 4404, 4408, 4413, 4415,
+    4417, 4420, 4422, 4425, 4430, 4435, 4441, 4446, 4450, 4455, 4460, 4469,
+    4475, 4480, 4486, 4491, 4497, 4505, 4513, 4517, 4521, 4526, 4532, 4538,
+    4544, 4550, 4555, 4562, 4570, 4578, 4583, 4589, 4596, 4603, 4610, 4617,
+    4621, 4627, 4632, 4637, 4642, 4647, 4650, 4653, 4656, 4659, 4662, 4665,
+    4669, 4673, 4679, 4682, 4687, 4693, 4699, 4702, 4707, 4712, 4716, 4722,
+    4728, 4734, 4740, 4745, 4750, 4755, 4758, 4764, 4769, 4774, 4778, 4783,
+    4789, 4795, 4798, 4802, 4806, 4810, 4813, 4816, 4821, 4825, 4832, 4836,
+    4842, 4846, 4852, 4856, 4860, 4864, 4869, 4874, 4881, 4887, 4894, 4900,
+    4906, 4912, 4915, 4919, 4923, 4927, 4931, 4936, 4941, 4945, 4949, 4955,
+    4959, 4963, 4968, 4974, 4979, 4985, 4989, 4995, 5000, 5005, 5010, 5015,
+    5021, 5024, 5028, 5033, 5038, 5047, 5053, 5058, 5062, 5067, 5071, 5076,
+    5080, 5084, 5089, 5093, 5099, 5104, 5109, 5114, 5119, 5124, 5129, 5135,
+    5141, 5147, 5153, 5158, 5164, 5170, 5176, 5181, 5186, 5193, 5200, 5204,
+    5209, 5216, 0, 0, 5223, 5226, 5235, 5244, 5255, 5259, 0, 0, 0, 0, 5264,
+    5267, 5272, 5280, 5285, 5293, 5301, 0, 5309, 0, 5317, 5325, 5333, 5344,
+    5349, 5354, 5359, 5364, 5369, 5374, 5379, 5384, 5389, 5394, 5399, 5404,
+    5409, 5414, 5419, 5424, 0, 5429, 5434, 5439, 5444, 5449, 5454, 5459,
+    5464, 5472, 5480, 5488, 5496, 5504, 5512, 5523, 5528, 5533, 5538, 5543,
+    5548, 5553, 5558, 5563, 5568, 5573, 5578, 5583, 5588, 5593, 5598, 5603,
+    5608, 5614, 5619, 5624, 5629, 5634, 5639, 5644, 5649, 5657, 5665, 5673,
+    5681, 5689, 5694, 5698, 5702, 5709, 5719, 5729, 5733, 5737, 5741, 5747,
+    5754, 5758, 5763, 5767, 5772, 5776, 5781, 5785, 5790, 5795, 5800, 5805,
+    5810, 5815, 5820, 5825, 5830, 5835, 5840, 5845, 5850, 5855, 5860, 5864,
+    5868, 5874, 5878, 5883, 5889, 5897, 5902, 5907, 5914, 5919, 5924, 5931,
+    5940, 5949, 5960, 5968, 5973, 5978, 5983, 5990, 5995, 6001, 6006, 6011,
+    6016, 6021, 6026, 6031, 6039, 6045, 6050, 6054, 6059, 6064, 6069, 6074,
+    6079, 6084, 6089, 6093, 6099, 6103, 6108, 6113, 6118, 6122, 6127, 6132,
+    6137, 6142, 6146, 6151, 6155, 6160, 6165, 6170, 6175, 6181, 6186, 6192,
+    6196, 6201, 6205, 6209, 6214, 6219, 6224, 6229, 6234, 6239, 6244, 6248,
+    6254, 6258, 6263, 6268, 6273, 6277, 6282, 6287, 6292, 6297, 6301, 6306,
+    6310, 6315, 6320, 6325, 6330, 6336, 6341, 6347, 6351, 6356, 6360, 6368,
+    6373, 6378, 6383, 6390, 6395, 6401, 6406, 6411, 6416, 6421, 6426, 6431,
+    6439, 6445, 6450, 6455, 6460, 6465, 6470, 6476, 6482, 6489, 6496, 6505,
+    6514, 6521, 6528, 6537, 6546, 6551, 6556, 6561, 6566, 6571, 6576, 6581,
+    6586, 6597, 6608, 6613, 6618, 6625, 6632, 6640, 6648, 6653, 6658, 6663,
+    6668, 6672, 6676, 6680, 6686, 6692, 6696, 6703, 6708, 6718, 6728, 6734,
+    6740, 6748, 6756, 6764, 6772, 6779, 6786, 6794, 6802, 6810, 6818, 6826,
+    6834, 6842, 6850, 6858, 6866, 6873, 6880, 6886, 6892, 6900, 6908, 6915,
+    6922, 6930, 6938, 6944, 6950, 6958, 6966, 6974, 6982, 6988, 6994, 7002,
+    7010, 7018, 7026, 7033, 7040, 7048, 7056, 7064, 7072, 7077, 7082, 7089,
+    7096, 7106, 7116, 7120, 7128, 7136, 7143, 7150, 7158, 7166, 7173, 7180,
+    7188, 7196, 7203, 7210, 7218, 7226, 7231, 7238, 7245, 7252, 7259, 7265,
+    7271, 7279, 7287, 7292, 7297, 7305, 7313, 7321, 7329, 7337, 7345, 7352,
+    7359, 7367, 7375, 7383, 7391, 7398, 7405, 7411, 7417, 7426, 7435, 7443,
+    7451, 7458, 7465, 7472, 7479, 7487, 7495, 7503, 7511, 7519, 7527, 7535,
+    7543, 7553, 7563, 7570, 7577, 7584, 7591, 7598, 7605, 7612, 7619, 7626,
+    7633, 7640, 7647, 7654, 7661, 7668, 7675, 7682, 7689, 7696, 7703, 7710,
+    7717, 7724, 7731, 7736, 7741, 7746, 7751, 7756, 7761, 7766, 7771, 7776,
+    7781, 7787, 7793, 7801, 7809, 7817, 7825, 7833, 7841, 7849, 7857, 7865,
+    7873, 7878, 7883, 7888, 7893, 7901, 0, 7909, 7915, 7921, 7927, 7933,
+    7939, 7945, 7951, 7957, 7962, 7968, 7974, 7980, 7986, 7992, 7998, 8004,
+    8010, 8016, 8022, 8028, 8034, 8040, 8046, 8052, 8058, 8064, 8070, 8075,
+    8081, 8087, 8093, 8099, 8105, 8111, 8117, 8123, 8129, 0, 0, 8135, 8143,
+    8147, 8152, 8157, 8161, 8166, 8171, 8178, 8184, 8190, 8196, 8202, 8208,
+    8214, 8220, 8226, 8231, 8237, 8243, 8249, 8255, 8261, 8267, 8273, 8279,
+    8285, 8291, 8297, 8303, 8309, 8315, 8321, 8327, 8333, 8339, 8344, 8350,
+    8356, 8362, 8368, 8374, 8380, 8386, 8392, 8398, 8404, 8412, 8419, 8425,
+    0, 0, 8429, 8436, 8443, 0, 8448, 8453, 8458, 8463, 8470, 8477, 8482,
+    8487, 8492, 8497, 8502, 8507, 8512, 8519, 8524, 8531, 8538, 8543, 8550,
+    8555, 8560, 8565, 8572, 8577, 8582, 8589, 8598, 8603, 8608, 8613, 8618,
+    8624, 8629, 8636, 8643, 8650, 8655, 8660, 8665, 8670, 8675, 8680, 8690,
+    8695, 8704, 8709, 8714, 8719, 8724, 8731, 8738, 8745, 8750, 8755, 8762,
+    0, 0, 0, 0, 0, 0, 0, 0, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8797,
+    8801, 8805, 8809, 8814, 8818, 8822, 8827, 8831, 8836, 8840, 8844, 8848,
+    8853, 8857, 8862, 8866, 8870, 8874, 8878, 0, 0, 0, 0, 8882, 8887, 8894,
+    8902, 8909, 8914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8919, 8922, 8926,
+    8931, 8935, 8939, 8943, 8949, 8955, 8958, 8965, 8974, 8977, 8980, 8985,
+    8991, 8995, 9003, 9009, 9015, 9023, 9027, 9032, 9043, 9048, 9052, 9056,
+    9060, 9063, 0, 9066, 9073, 9077, 9083, 9087, 9094, 9101, 9109, 9116,
+    9123, 9127, 9131, 9137, 9141, 9145, 9149, 9153, 9157, 9161, 9165, 9169,
+    9173, 9177, 9181, 9185, 9189, 9193, 9197, 9201, 9205, 9214, 9223, 9233,
+    9243, 9253, 9256, 9260, 9264, 9268, 9272, 9276, 9280, 9284, 9288, 9293,
+    9297, 9300, 9303, 9306, 9309, 9312, 9315, 9318, 9321, 9325, 9329, 9333,
+    9338, 9343, 9349, 9352, 9359, 9368, 9373, 9378, 9385, 9391, 9396, 9400,
+    9404, 9408, 9412, 9416, 9420, 9424, 9428, 9432, 9436, 9441, 9446, 9453,
+    9459, 9465, 9471, 9476, 9485, 9494, 9499, 9506, 9513, 9520, 9527, 9531,
+    9535, 9539, 9546, 9557, 9561, 9565, 9569, 9576, 9585, 9589, 9593, 9601,
+    9605, 9609, 9613, 9620, 9627, 9639, 9643, 9647, 9651, 9662, 9672, 9676,
+    9684, 9691, 9698, 9707, 9718, 9727, 9731, 9741, 9752, 9761, 9776, 9785,
+    9794, 9803, 9812, 9818, 9827, 9834, 9838, 9847, 9851, 9858, 9867, 9871,
+    9877, 9884, 9891, 9895, 9904, 9908, 9915, 9919, 9928, 9932, 9941, 9949,
+    9956, 9965, 9974, 9981, 9987, 9991, 9998, 10007, 10013, 10020, 10027,
+    10033, 10043, 10051, 10058, 10064, 10068, 10071, 10075, 10081, 10090,
+    10094, 10100, 10106, 10113, 10120, 10123, 10131, 10136, 10145, 10150,
+    10154, 10167, 10180, 10186, 10193, 10198, 10204, 10209, 10215, 10225,
+    10232, 10241, 10251, 10257, 10262, 10267, 10271, 10275, 10280, 10285,
+    10291, 10299, 10307, 10318, 10323, 10332, 10341, 10348, 10354, 10360,
+    10366, 10372, 10378, 10384, 10390, 10396, 10402, 10409, 10416, 10423,
+    10429, 10437, 10446, 10453, 10461, 10469, 10475, 10481, 10487, 10495,
+    10503, 10513, 10523, 10527, 10533, 10539, 0, 10545, 10550, 10555, 10562,
+    10567, 10572, 10579, 10584, 10593, 10598, 10603, 10608, 10613, 10618,
+    10625, 10630, 10637, 10642, 10647, 10652, 10657, 10662, 10668, 10672,
+    10677, 10684, 10689, 10694, 10699, 10704, 10709, 10716, 10723, 10730,
+    10735, 10740, 10746, 10751, 10756, 10762, 10767, 10772, 10780, 10788,
+    10793, 10798, 10804, 10809, 10814, 10818, 10824, 10828, 10832, 10839,
+    10846, 10852, 10858, 10865, 10872, 10876, 0, 0, 10880, 10887, 10894,
+    10901, 10912, 10925, 10938, 10957, 10970, 10981, 10989, 10997, 11009,
+    11025, 11036, 11042, 11052, 11061, 11074, 11085, 11094, 11107, 11114,
+    11123, 11136, 11142, 11148, 11157, 11165, 11173, 11179, 11190, 11198,
+    11209, 11219, 11232, 11246, 11260, 11270, 11281, 11292, 11305, 11318,
+    11332, 11344, 11356, 11369, 11382, 11394, 11407, 11416, 11425, 11430,
+    11435, 11440, 11445, 11450, 11455, 11460, 11465, 11470, 11475, 11480,
+    11485, 11490, 11495, 11500, 11505, 11510, 11515, 11520, 11525, 11530,
+    11535, 11540, 11545, 11550, 11555, 11560, 11565, 11570, 11575, 11580,
+    11585, 11589, 11594, 11599, 11604, 11609, 11614, 11618, 11622, 11626,
+    11630, 11634, 11638, 11642, 11646, 11650, 11654, 11658, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 11663, 11668, 11672, 11676, 11680, 11684, 11688,
+    11692, 11696, 11700, 11704, 11708, 11713, 11717, 11721, 11725, 11730,
+    11734, 11739, 11744, 11749, 11753, 11757, 11762, 11767, 11772, 11776,
+    11781, 11785, 11790, 11795, 11799, 11803, 11810, 11814, 11819, 11823,
+    11827, 11832, 11836, 11843, 11850, 11857, 11863, 11871, 11879, 11888,
+    11896, 11903, 11910, 11918, 11924, 11930, 11936, 11942, 11949, 11954,
+    11958, 11963, 0, 0, 11967, 11971, 11976, 11981, 11986, 11991, 11996,
+    12001, 12006, 12011, 12016, 12021, 12026, 12031, 12036, 12041, 12046,
+    12051, 12056, 12061, 12066, 12071, 12076, 12081, 12086, 12091, 12096,
+    12101, 12106, 12111, 12119, 12126, 12132, 12137, 12145, 12152, 12158,
+    12165, 12171, 12176, 12183, 12190, 12196, 12201, 12206, 12212, 12217,
+    12222, 12228, 0, 0, 12233, 12239, 12245, 12251, 12257, 12263, 12269,
+    12274, 12282, 12288, 12294, 12300, 12306, 12312, 12320, 0, 12326, 12331,
+    12336, 12341, 12346, 12351, 12356, 12361, 12366, 12371, 12376, 12381,
+    12386, 12391, 12396, 12401, 12406, 12411, 12416, 12421, 12426, 12431,
+    12436, 12441, 12446, 12451, 12456, 12461, 0, 0, 12466, 0, 12470, 12476,
+    12482, 12488, 12494, 12500, 12506, 12512, 12517, 12523, 12529, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    12487, 12496, 12504, 12513, 12522, 12535, 12542, 12549, 12557, 12570,
-    12582, 12589, 12597, 12603, 12608, 12617, 12626, 12634, 12640, 12650,
-    12659, 0, 12666, 12674, 12682, 12691, 12700, 12714, 12720, 12726, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12732, 12737,
-    12744, 12749, 12754, 12759, 12767, 12775, 12782, 12789, 12796, 12803,
-    12810, 12817, 12824, 12830, 12838, 12843, 12848, 12853, 12858, 12863,
-    12868, 12873, 12878, 12884, 12889, 12894, 12900, 12905, 12909, 12913,
-    12917, 12922, 12928, 12934, 12940, 12945, 12950, 12955, 12960, 12966,
-    12975, 12983, 12989, 12997, 13003, 13007, 13011, 13015, 13020, 13023,
-    13027, 13030, 13034, 13037, 13041, 13045, 13049, 13054, 13059, 13062,
-    13066, 13071, 13076, 13079, 13083, 13086, 13090, 13094, 13098, 13102,
-    13106, 13110, 13114, 13118, 13122, 13126, 13130, 13134, 13138, 13142,
-    13145, 13149, 13153, 13157, 13160, 13164, 13167, 13171, 13175, 13179,
-    13182, 13185, 13188, 13192, 13195, 13199, 13203, 13207, 13211, 13215,
-    13218, 13221, 13226, 13231, 13235, 13239, 13244, 13248, 13253, 13257,
-    13262, 13267, 13273, 13279, 13285, 13289, 13294, 13300, 13306, 13310,
-    13315, 13319, 13325, 13330, 13333, 13339, 13345, 13350, 13355, 13362,
-    13367, 13372, 13376, 13380, 13384, 13388, 13392, 13396, 13400, 13404,
-    13409, 13414, 13419, 13425, 13428, 13432, 13436, 13439, 13442, 13445,
-    13448, 13451, 13454, 13457, 13460, 13463, 13467, 13474, 13479, 13483,
-    13487, 13491, 13495, 13499, 13505, 13509, 13513, 13517, 13521, 13527,
-    13531, 13535, 13539, 13544, 13549, 0, 13554, 13558, 13563, 13567, 13572,
-    13576, 13581, 13586, 0, 0, 13591, 13595, 0, 0, 13600, 13604, 13609,
-    13613, 13618, 13623, 13628, 13633, 13638, 13643, 13648, 13653, 13658,
-    13663, 13668, 13673, 13678, 13683, 13687, 13692, 13697, 13702, 0, 13706,
-    13710, 13715, 13720, 13725, 13729, 13733, 0, 13737, 0, 0, 0, 13741,
-    13746, 13751, 13755, 0, 0, 13759, 13764, 13769, 13775, 13780, 13786,
-    13791, 13797, 13803, 0, 0, 13810, 13815, 0, 0, 13821, 13826, 13832,
-    13837, 0, 0, 0, 0, 0, 0, 0, 0, 13843, 0, 0, 0, 0, 13850, 13855, 0, 13860,
-    13865, 13871, 13877, 13883, 0, 0, 13890, 13895, 13899, 13903, 13907,
-    13911, 13915, 13919, 13923, 13927, 13931, 13940, 13950, 13955, 13960,
-    13967, 13974, 13981, 13988, 14003, 14011, 14015, 14020, 14027, 14032, 0,
-    0, 14037, 14044, 14049, 0, 14054, 14058, 14063, 14067, 14072, 14076, 0,
-    0, 0, 0, 14081, 14086, 0, 0, 14091, 14096, 14101, 14105, 14110, 14115,
-    14120, 14125, 14130, 14135, 14140, 14145, 14150, 14155, 14160, 14165,
-    14170, 14175, 14179, 14184, 14189, 14194, 0, 14198, 14202, 14207, 14212,
-    14217, 14221, 14225, 0, 14229, 14233, 0, 14238, 14243, 0, 14248, 14252,
-    0, 0, 14256, 0, 14261, 14267, 14272, 14278, 14283, 0, 0, 0, 0, 14289,
-    14295, 0, 0, 14301, 14307, 14313, 0, 0, 0, 14318, 0, 0, 0, 0, 0, 0, 0,
-    14323, 14328, 14333, 14338, 0, 14343, 0, 0, 0, 0, 0, 0, 0, 14348, 14353,
-    14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 14393,
-    14397, 14401, 14405, 14411, 14416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14421,
-    14426, 14431, 0, 14436, 14440, 14445, 14449, 14454, 14458, 14463, 14468,
-    14473, 0, 14479, 14483, 14488, 0, 14494, 14498, 14503, 14507, 14512,
-    14517, 14522, 14527, 14532, 14537, 14542, 14547, 14552, 14557, 14562,
-    14567, 14572, 14577, 14581, 14586, 14591, 14596, 0, 14600, 14604, 14609,
-    14614, 14619, 14623, 14627, 0, 14631, 14635, 0, 14640, 14645, 14650,
-    14655, 14659, 0, 0, 14663, 14668, 14673, 14679, 14684, 14690, 14695,
-    14701, 14707, 14714, 0, 14721, 14726, 14732, 0, 14739, 14744, 14750, 0,
-    0, 14755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14759, 14765,
-    14771, 14777, 0, 0, 14784, 14789, 14793, 14797, 14801, 14805, 14809,
-    14813, 14817, 14821, 14825, 14830, 0, 0, 0, 0, 0, 0, 0, 14835, 14840,
-    14845, 14850, 14855, 14863, 14871, 0, 14879, 14884, 14889, 0, 14894,
-    14898, 14903, 14907, 14912, 14916, 14921, 14926, 0, 0, 14931, 14935, 0,
-    0, 14940, 14944, 14949, 14953, 14958, 14963, 14968, 14973, 14978, 14983,
-    14988, 14993, 14998, 15003, 15008, 15013, 15018, 15023, 15027, 15032,
-    15037, 15042, 0, 15046, 15050, 15055, 15060, 15065, 15069, 15073, 0,
-    15077, 15081, 0, 15086, 15091, 15096, 15101, 15105, 0, 0, 15109, 15114,
-    15119, 15125, 15130, 15136, 15141, 15147, 15153, 0, 0, 15160, 15165, 0,
-    0, 15171, 15176, 15182, 0, 0, 0, 0, 0, 0, 0, 0, 15187, 15194, 0, 0, 0, 0,
-    15201, 15206, 0, 15211, 15216, 15222, 15228, 15234, 0, 0, 15241, 15246,
-    15250, 15254, 15258, 15262, 15266, 15270, 15274, 15278, 15282, 15286,
-    15291, 15297, 15303, 15309, 15315, 15321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    15327, 15331, 0, 15335, 15338, 15342, 15345, 15349, 15352, 0, 0, 0,
-    15356, 15359, 15363, 0, 15367, 15370, 15374, 15378, 0, 0, 0, 15381,
-    15385, 0, 15389, 0, 15393, 15397, 0, 0, 0, 15401, 15405, 0, 0, 0, 15408,
-    15411, 15415, 0, 0, 0, 15418, 15421, 15424, 15427, 15431, 15434, 15438,
-    15442, 15446, 15450, 15454, 15457, 0, 0, 0, 0, 15460, 15465, 15469,
-    15474, 15478, 0, 0, 0, 15483, 15487, 15492, 0, 15497, 15501, 15506,
-    15511, 0, 0, 15515, 0, 0, 0, 0, 0, 0, 15518, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 15524, 15528, 15531, 15534, 15537, 15540, 15543, 15546,
-    15549, 15552, 15555, 15559, 15564, 15568, 15572, 15576, 15580, 15584,
-    15588, 15593, 15597, 0, 0, 0, 0, 0, 15600, 15607, 15612, 15617, 15622,
-    15629, 15633, 15638, 15642, 15647, 15651, 15656, 15661, 0, 15666, 15670,
-    15675, 0, 15680, 15684, 15689, 15694, 15698, 15703, 15708, 15713, 15718,
-    15723, 15728, 15733, 15738, 15743, 15748, 15753, 15758, 15763, 15768,
-    15772, 15777, 15782, 15787, 0, 15791, 15795, 15800, 15805, 15810, 15814,
-    15818, 15822, 15827, 15831, 15836, 15841, 15846, 15851, 15856, 15860, 0,
-    0, 0, 15864, 15869, 15875, 15880, 15886, 15891, 15897, 15903, 0, 15910,
-    15915, 15921, 0, 15927, 15932, 15938, 15944, 0, 0, 0, 0, 0, 0, 0, 15949,
-    15954, 0, 15961, 15966, 15971, 0, 0, 0, 0, 0, 15976, 15982, 15988, 15994,
-    0, 0, 16001, 16006, 16010, 16014, 16018, 16022, 16026, 16030, 16034,
-    16038, 0, 0, 0, 0, 0, 0, 0, 16042, 16047, 16060, 16072, 16084, 16096,
-    16108, 16120, 16132, 16137, 16144, 16149, 16154, 16159, 16164, 16168,
-    16173, 16177, 16182, 16186, 16191, 16196, 0, 16201, 16205, 16210, 0,
-    16215, 16219, 16224, 16229, 16233, 16238, 16243, 16248, 16253, 16258,
-    16263, 16268, 16273, 16278, 16283, 16288, 16293, 16298, 16303, 16307,
-    16312, 16317, 16322, 0, 16326, 16330, 16335, 16340, 16345, 16349, 16353,
-    16357, 16362, 16366, 0, 16371, 16376, 16381, 16386, 16390, 0, 0, 16394,
-    16399, 16404, 16410, 16415, 16421, 16426, 16432, 16438, 0, 16445, 16450,
-    16456, 0, 16462, 16467, 16473, 16479, 0, 0, 0, 0, 0, 0, 0, 16484, 16489,
-    0, 0, 0, 0, 0, 0, 0, 16496, 0, 16501, 16507, 16513, 16519, 0, 0, 16526,
-    16531, 16535, 16539, 16543, 16547, 16551, 16555, 16559, 16563, 0, 16567,
-    16572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16577, 16583, 16587, 16591,
-    0, 16595, 16598, 16602, 16605, 16609, 16612, 16616, 16620, 0, 16624,
-    16627, 16631, 0, 16635, 16638, 16642, 16646, 16649, 16653, 16657, 16661,
-    16665, 16669, 16673, 16677, 16681, 16685, 16689, 16693, 16697, 16701,
-    16705, 16708, 16712, 16716, 16720, 16723, 16727, 16730, 16734, 16738,
-    16742, 16745, 16748, 16751, 16755, 16758, 16762, 16766, 16770, 16774,
-    16778, 16781, 16784, 16788, 16795, 16801, 16805, 16810, 16814, 16819,
-    16823, 16828, 16833, 0, 16839, 16843, 16848, 0, 16853, 16857, 16862,
-    16867, 16871, 16876, 0, 0, 0, 0, 16880, 16886, 16892, 16898, 16904,
-    16909, 16914, 16919, 16924, 16929, 16934, 16939, 16945, 16950, 16955,
-    16960, 0, 0, 16966, 16970, 16973, 16976, 16979, 16982, 16985, 16988,
-    16991, 16994, 16997, 17001, 17006, 17010, 17015, 17020, 17025, 17030,
-    17035, 17040, 17044, 17050, 17056, 17062, 17067, 17073, 0, 0, 17079,
-    17083, 0, 17087, 17091, 17095, 17099, 17103, 17107, 17111, 17115, 17119,
-    17123, 17127, 17131, 17135, 17139, 17143, 17147, 17151, 17155, 0, 0, 0,
-    17159, 17165, 17171, 17177, 17183, 17189, 17195, 17201, 17207, 17213,
-    17219, 17225, 17233, 17239, 17245, 17251, 17257, 17263, 17269, 17275,
-    17281, 17287, 17293, 17299, 0, 17305, 17311, 17317, 17323, 17329, 17335,
-    17339, 17345, 17349, 0, 17353, 0, 0, 17359, 17363, 17369, 17375, 17381,
-    17385, 17391, 0, 0, 0, 17395, 0, 0, 0, 0, 17399, 17404, 17411, 17418,
-    17425, 17432, 0, 17439, 0, 17446, 17451, 17456, 17463, 17470, 17479,
-    17490, 17499, 0, 0, 0, 0, 0, 0, 17504, 17510, 17515, 17520, 17525, 17530,
-    17535, 17540, 17545, 17550, 0, 0, 17555, 17562, 17569, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 17574, 17581, 17588, 17595, 17602, 17609, 17616, 17623,
-    17630, 17637, 17644, 17651, 17658, 17665, 17672, 17679, 17686, 17693,
-    17700, 17707, 17714, 17721, 17728, 17735, 17742, 17749, 17756, 17763,
-    17770, 17777, 17784, 17791, 17798, 17804, 17811, 17818, 17823, 17830,
-    17835, 17842, 17849, 17856, 17863, 17870, 17877, 17883, 17890, 17895,
-    17901, 17908, 17915, 17922, 17928, 17935, 17942, 17949, 17955, 17962, 0,
-    0, 0, 0, 17967, 17974, 17980, 17987, 17993, 18002, 18011, 18016, 18021,
-    18026, 18033, 18040, 18047, 18054, 18059, 18064, 18069, 18074, 18079,
-    18083, 18087, 18091, 18095, 18099, 18103, 18107, 18111, 18115, 18120, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18125, 18130, 0, 18137, 0, 18144,
-    18151, 18156, 18161, 18168, 0, 18175, 18182, 18187, 18194, 18201, 18208,
-    18215, 18222, 18229, 18234, 18238, 18245, 18252, 18259, 18264, 18269,
-    18274, 18281, 18288, 18295, 18302, 18309, 18314, 18319, 0, 18326, 0,
-    18333, 18338, 18345, 18352, 18359, 18366, 18373, 18377, 18384, 18388,
-    18393, 18401, 18407, 18413, 18418, 18424, 18430, 18436, 18441, 18447,
-    18454, 18462, 18469, 0, 0, 18476, 18481, 18487, 18492, 18498, 0, 18504,
-    0, 18509, 18516, 18523, 18530, 18537, 18542, 0, 0, 18546, 18551, 18555,
-    18559, 18563, 18567, 18571, 18575, 18579, 18583, 0, 0, 18587, 18593,
-    18599, 18606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18613, 18617, 18628, 18643, 18658,
-    18668, 18679, 18692, 18703, 18709, 18717, 18727, 18733, 18741, 18745,
-    18751, 18757, 18765, 18775, 18783, 18796, 18802, 18810, 18818, 18830,
-    18837, 18845, 18853, 18861, 18869, 18877, 18885, 18895, 18899, 18902,
-    18905, 18908, 18911, 18914, 18917, 18920, 18923, 18926, 18930, 18934,
-    18938, 18942, 18946, 18950, 18954, 18958, 18962, 18967, 18973, 18983,
-    18997, 19007, 19013, 19019, 19027, 19035, 19043, 19051, 19057, 19063,
-    19066, 19070, 19074, 19078, 19082, 19086, 19090, 0, 19094, 19098, 19102,
-    19106, 19110, 19114, 19118, 19121, 19125, 19129, 19133, 19136, 19139,
-    19143, 19147, 19151, 19154, 19158, 19162, 19166, 19170, 19174, 19178,
-    19182, 19186, 19189, 19192, 19195, 19199, 19203, 19206, 19209, 19212,
-    19216, 19221, 19225, 0, 0, 0, 0, 19229, 19234, 19238, 19243, 19247,
-    19252, 19257, 19263, 19268, 19274, 19278, 19283, 19287, 19292, 19302,
-    19308, 19314, 19321, 19331, 19337, 19341, 19345, 19351, 19357, 19365,
-    19371, 19379, 19387, 19395, 19405, 19413, 19423, 19428, 19434, 19440,
-    19446, 19452, 19458, 19464, 0, 19470, 19476, 19482, 19488, 19494, 19500,
-    19506, 19511, 19517, 19523, 19529, 19534, 19539, 19545, 19551, 19557,
-    19562, 19568, 19574, 19580, 19586, 19592, 19598, 19604, 19610, 19615,
-    19620, 19625, 19631, 19637, 19642, 19647, 19652, 19658, 19666, 19673, 0,
-    19680, 19687, 19700, 19707, 19714, 19722, 19730, 19736, 19742, 19748,
-    19758, 19763, 19769, 19779, 19789, 0, 19799, 19809, 19817, 19829, 19841,
-    19847, 19861, 19876, 19881, 19886, 19894, 19902, 19910, 0, 0, 0, 0, 0, 0,
+    0, 0, 12535, 12544, 12552, 12561, 12570, 12583, 12590, 12597, 12605,
+    12618, 12630, 12637, 12645, 12651, 12656, 12665, 12674, 12682, 12688,
+    12698, 12707, 0, 12714, 12722, 12730, 12739, 12748, 12762, 12768, 12774,
+    12780, 12788, 12796, 12804, 12812, 12820, 12829, 12840, 12849, 12858, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12869, 12874, 12881, 12886, 12891, 12896,
+    12904, 12912, 12919, 12926, 12933, 12940, 12947, 12954, 12961, 12967,
+    12975, 12980, 12985, 12990, 12995, 13000, 13005, 13010, 13015, 13021,
+    13026, 13031, 13037, 13042, 13047, 13052, 13057, 13062, 13068, 13074,
+    13080, 13085, 13090, 13095, 13100, 13106, 13115, 13123, 13129, 13137,
+    13143, 13147, 13151, 13155, 13160, 13163, 13167, 13170, 13174, 13177,
+    13181, 13185, 13189, 13194, 13199, 13202, 13206, 13211, 13216, 13219,
+    13223, 13226, 13230, 13234, 13238, 13242, 13246, 13250, 13254, 13258,
+    13262, 13266, 13270, 13274, 13278, 13282, 13285, 13289, 13293, 13297,
+    13300, 13304, 13307, 13311, 13315, 13319, 13322, 13325, 13328, 13332,
+    13335, 13339, 13343, 13347, 13351, 13355, 13358, 13361, 13366, 13371,
+    13375, 13379, 13384, 13388, 13393, 13397, 13402, 13407, 13413, 13419,
+    13425, 13429, 13434, 13440, 13446, 13450, 13455, 13459, 13465, 13470,
+    13473, 13479, 13485, 13490, 13495, 13502, 13507, 13512, 13516, 13520,
+    13524, 13528, 13532, 13536, 13540, 13544, 13549, 13554, 13559, 13565,
+    13568, 13572, 13576, 13579, 13582, 13585, 13588, 13591, 13594, 13597,
+    13600, 13603, 13607, 13614, 13619, 13623, 13627, 13631, 13635, 13639,
+    13645, 13649, 13653, 13657, 13661, 13667, 13671, 13675, 13679, 13684,
+    13689, 0, 13694, 13698, 13703, 13707, 13712, 13716, 13721, 13726, 0, 0,
+    13731, 13735, 0, 0, 13740, 13744, 13749, 13753, 13758, 13763, 13768,
+    13773, 13778, 13783, 13788, 13793, 13798, 13803, 13808, 13813, 13818,
+    13823, 13827, 13832, 13837, 13842, 0, 13846, 13850, 13855, 13860, 13865,
+    13869, 13873, 0, 13877, 0, 0, 0, 13881, 13886, 13891, 13895, 0, 0, 13899,
+    13904, 13909, 13915, 13920, 13926, 13931, 13937, 13943, 0, 0, 13950,
+    13955, 0, 0, 13961, 13966, 13972, 13977, 0, 0, 0, 0, 0, 0, 0, 0, 13983,
+    0, 0, 0, 0, 13990, 13995, 0, 14000, 14005, 14011, 14017, 14023, 0, 0,
+    14030, 14035, 14039, 14043, 14047, 14051, 14055, 14059, 14063, 14067,
+    14071, 14080, 14089, 14094, 14099, 14106, 14113, 14120, 14127, 14142,
+    14150, 14154, 14159, 14166, 14171, 0, 0, 14176, 14183, 14188, 0, 14193,
+    14197, 14202, 14206, 14211, 14215, 0, 0, 0, 0, 14220, 14225, 0, 0, 14230,
+    14235, 14240, 14244, 14249, 14254, 14259, 14264, 14269, 14274, 14279,
+    14284, 14289, 14294, 14299, 14304, 14309, 14314, 14318, 14323, 14328,
+    14333, 0, 14337, 14341, 14346, 14351, 14356, 14360, 14364, 0, 14368,
+    14372, 0, 14377, 14382, 0, 14387, 14391, 0, 0, 14395, 0, 14400, 14406,
+    14411, 14417, 14422, 0, 0, 0, 0, 14428, 14434, 0, 0, 14440, 14446, 14452,
+    0, 0, 0, 14457, 0, 0, 0, 0, 0, 0, 0, 14462, 14467, 14472, 14477, 0,
+    14482, 0, 0, 0, 0, 0, 0, 0, 14487, 14492, 14496, 14500, 14504, 14508,
+    14512, 14516, 14520, 14524, 14528, 14532, 14536, 14540, 14544, 14550,
+    14555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14560, 14565, 14570, 0, 14575,
+    14579, 14584, 14588, 14593, 14597, 14602, 14607, 14612, 0, 14618, 14622,
+    14627, 0, 14633, 14637, 14642, 14646, 14651, 14656, 14661, 14666, 14671,
+    14676, 14681, 14686, 14691, 14696, 14701, 14706, 14711, 14716, 14720,
+    14725, 14730, 14735, 0, 14739, 14743, 14748, 14753, 14758, 14762, 14766,
+    0, 14770, 14774, 0, 14779, 14784, 14789, 14794, 14798, 0, 0, 14802,
+    14807, 14812, 14818, 14823, 14829, 14834, 14840, 14846, 14853, 0, 14860,
+    14865, 14871, 0, 14878, 14883, 14889, 0, 0, 14894, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 14898, 14904, 14910, 14916, 0, 0, 14923, 14928,
+    14932, 14936, 14940, 14944, 14948, 14952, 14956, 14960, 14964, 14969, 0,
+    0, 0, 0, 0, 0, 0, 14974, 14979, 14984, 14989, 14994, 15002, 15010, 0,
+    15018, 15023, 15028, 0, 15033, 15037, 15042, 15046, 15051, 15055, 15060,
+    15065, 0, 0, 15070, 15074, 0, 0, 15079, 15083, 15088, 15092, 15097,
+    15102, 15107, 15112, 15117, 15122, 15127, 15132, 15137, 15142, 15147,
+    15152, 15157, 15162, 15166, 15171, 15176, 15181, 0, 15185, 15189, 15194,
+    15199, 15204, 15208, 15212, 0, 15216, 15220, 0, 15225, 15230, 15235,
+    15240, 15244, 0, 0, 15248, 15253, 15258, 15264, 15269, 15275, 15280,
+    15286, 15292, 0, 0, 15299, 15304, 0, 0, 15310, 15315, 15321, 0, 0, 0, 0,
+    0, 0, 0, 15326, 15331, 15338, 0, 0, 0, 0, 15345, 15350, 0, 15355, 15360,
+    15366, 15372, 15378, 0, 0, 15385, 15390, 15394, 15398, 15402, 15406,
+    15410, 15414, 15418, 15422, 15426, 15430, 15435, 15442, 15449, 15456,
+    15463, 15470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15477, 15481, 0, 15485,
+    15488, 15492, 15495, 15499, 15502, 0, 0, 0, 15506, 15509, 15513, 0,
+    15517, 15520, 15524, 15528, 0, 0, 0, 15531, 15535, 0, 15539, 0, 15543,
+    15547, 0, 0, 0, 15551, 15555, 0, 0, 0, 15558, 15561, 15565, 0, 0, 0,
+    15568, 15571, 15574, 15577, 15581, 15584, 15588, 15592, 15596, 15600,
+    15604, 15607, 0, 0, 0, 0, 15610, 15615, 15619, 15624, 15628, 0, 0, 0,
+    15633, 15637, 15642, 0, 15647, 15651, 15656, 15661, 0, 0, 15665, 0, 0, 0,
+    0, 0, 0, 15668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15674, 15678,
+    15681, 15684, 15687, 15690, 15693, 15696, 15699, 15702, 15705, 15709,
+    15714, 15718, 15722, 15726, 15730, 15734, 15738, 15743, 15747, 0, 0, 0,
+    0, 0, 15750, 15757, 15762, 15767, 15772, 15779, 15783, 15788, 15792,
+    15797, 15801, 15806, 15811, 0, 15816, 15820, 15825, 0, 15830, 15834,
+    15839, 15844, 15848, 15853, 15858, 15863, 15868, 15873, 15878, 15883,
+    15888, 15893, 15898, 15903, 15908, 15913, 15918, 15922, 15927, 15932,
+    15937, 0, 15941, 15945, 15950, 15955, 15960, 15964, 15968, 15972, 15977,
+    15981, 15986, 15991, 15996, 16001, 16006, 16010, 0, 0, 0, 16014, 16019,
+    16025, 16030, 16036, 16041, 16047, 16053, 0, 16060, 16065, 16071, 0,
+    16077, 16082, 16088, 16094, 0, 0, 0, 0, 0, 0, 0, 16099, 16104, 0, 16111,
+    16116, 16121, 0, 0, 0, 0, 0, 16126, 16132, 16138, 16144, 0, 0, 16151,
+    16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 0, 0, 0,
+    0, 0, 0, 0, 16192, 16197, 16211, 16224, 16237, 16250, 16263, 16276,
+    16289, 16294, 16301, 16306, 16311, 16316, 16321, 16325, 16330, 16334,
+    16339, 16343, 16348, 16353, 0, 16358, 16362, 16367, 0, 16372, 16376,
+    16381, 16386, 16390, 16395, 16400, 16405, 16410, 16415, 16420, 16425,
+    16430, 16435, 16440, 16445, 16450, 16455, 16460, 16464, 16469, 16474,
+    16479, 0, 16483, 16487, 16492, 16497, 16502, 16506, 16510, 16514, 16519,
+    16523, 0, 16528, 16533, 16538, 16543, 16547, 0, 0, 16551, 16556, 16561,
+    16567, 16572, 16578, 16583, 16589, 16595, 0, 16602, 16607, 16613, 0,
+    16619, 16624, 16630, 16636, 0, 0, 0, 0, 0, 0, 0, 16641, 16646, 0, 0, 0,
+    0, 0, 0, 0, 16653, 0, 16658, 16664, 16670, 16676, 0, 0, 16683, 16688,
+    16692, 16696, 16700, 16704, 16708, 16712, 16716, 16720, 0, 16724, 16729,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16734, 16740, 16744, 16748, 16752,
+    16758, 16761, 16765, 16768, 16772, 16775, 16779, 16783, 0, 16787, 16790,
+    16794, 0, 16798, 16801, 16805, 16809, 16812, 16816, 16820, 16824, 16828,
+    16832, 16836, 16840, 16844, 16848, 16852, 16856, 16860, 16864, 16868,
+    16871, 16875, 16879, 16883, 16886, 16890, 16893, 16897, 16901, 16905,
+    16908, 16911, 16914, 16918, 16921, 16925, 16929, 16933, 16937, 16941,
+    16944, 16947, 16951, 16958, 16964, 16968, 16973, 16977, 16982, 16986,
+    16991, 16996, 0, 17002, 17006, 17011, 0, 17016, 17020, 17025, 17030,
+    17034, 17039, 0, 0, 0, 0, 17043, 17049, 17055, 17061, 17067, 17073,
+    17079, 17085, 17091, 17097, 17103, 17109, 17115, 17120, 17125, 17130, 0,
+    0, 17136, 17140, 17143, 17146, 17149, 17152, 17155, 17158, 17161, 17164,
+    17167, 17171, 17176, 17180, 17186, 17192, 17198, 17204, 17210, 17216,
+    17220, 17226, 17232, 17238, 17243, 17249, 0, 17255, 17259, 17263, 0,
+    17267, 17271, 17275, 17279, 17283, 17287, 17291, 17295, 17299, 17303,
+    17307, 17311, 17315, 17319, 17323, 17327, 17331, 17335, 0, 0, 0, 17339,
+    17345, 17351, 17357, 17363, 17369, 17375, 17381, 17387, 17393, 17399,
+    17405, 17413, 17419, 17425, 17431, 17437, 17443, 17449, 17455, 17461,
+    17467, 17473, 17479, 0, 17485, 17491, 17497, 17503, 17509, 17515, 17519,
+    17525, 17529, 0, 17533, 0, 0, 17539, 17543, 17549, 17555, 17561, 17565,
+    17571, 0, 0, 0, 17575, 0, 0, 0, 0, 17579, 17584, 17591, 17598, 17605,
+    17612, 0, 17619, 0, 17626, 17631, 17636, 17643, 17650, 17659, 17670,
+    17679, 0, 0, 0, 0, 0, 0, 17684, 17690, 17695, 17700, 17705, 17710, 17715,
+    17720, 17725, 17730, 0, 0, 17735, 17742, 17749, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 17754, 17762, 17770, 17778, 17786, 17794, 17802, 17810,
+    17818, 17826, 17834, 17842, 17850, 17858, 17866, 17873, 17881, 17889,
+    17897, 17905, 17913, 17920, 17928, 17936, 17944, 17952, 17960, 17968,
+    17976, 17984, 17992, 18000, 18008, 18015, 18023, 18031, 18037, 18045,
+    18051, 18059, 18067, 18075, 18083, 18091, 18099, 18106, 18114, 18120,
+    18127, 18135, 18143, 18151, 18158, 18166, 18174, 18182, 18189, 18197, 0,
+    0, 0, 0, 18203, 18210, 18217, 18225, 18232, 18242, 18252, 18258, 18264,
+    18270, 18278, 18286, 18294, 18302, 18308, 18314, 18320, 18326, 18331,
+    18335, 18339, 18343, 18347, 18351, 18355, 18359, 18363, 18367, 18373, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 19918, 19921, 19925, 19929, 19933, 19937, 19941,
-    19945, 19949, 19953, 19957, 19961, 19965, 19969, 19973, 19977, 19981,
-    19984, 19988, 19992, 19996, 19999, 20002, 20006, 20010, 20014, 20017,
-    20020, 20023, 20026, 20030, 20033, 20036, 20040, 20043, 20048, 20051,
-    20055, 20058, 20062, 20065, 20070, 20073, 20077, 20084, 20089, 20093,
-    20098, 20102, 20107, 20111, 20116, 20123, 20129, 20135, 20139, 20143,
-    20147, 20151, 20155, 20161, 20167, 20174, 20180, 20185, 20189, 20192,
-    20195, 20198, 20201, 20204, 20207, 20210, 20213, 20216, 20222, 20226,
-    20230, 20234, 20238, 20242, 20246, 20250, 20254, 20259, 20263, 20268,
-    20273, 20279, 20284, 20290, 20296, 20302, 20308, 20314, 20322, 20330,
-    20338, 20346, 20355, 20364, 20375, 20385, 20395, 20406, 20417, 20427,
-    20437, 20447, 20457, 20467, 20477, 20487, 20497, 20505, 20512, 20518,
-    20525, 20530, 20536, 20542, 20548, 20554, 20560, 20566, 20571, 20577,
-    20583, 20589, 20595, 20600, 20609, 20616, 20622, 20630, 20638, 20644,
-    20650, 20656, 20662, 20670, 20678, 20688, 20696, 20704, 20710, 20715,
-    20720, 20725, 20730, 20735, 20740, 20745, 20750, 20755, 20761, 20767,
-    20773, 20780, 20785, 20791, 20796, 20801, 20806, 20811, 20816, 20821,
-    20826, 20831, 20836, 20841, 20846, 20851, 20856, 20861, 20866, 20871,
-    20876, 20881, 20886, 20891, 20896, 20901, 20906, 20911, 20916, 20921,
-    20926, 20931, 20936, 20941, 20946, 20951, 20956, 20961, 20966, 20971,
-    20976, 0, 20981, 0, 0, 0, 0, 0, 20986, 0, 0, 20991, 20995, 20999, 21003,
-    21007, 21011, 21015, 21019, 21023, 21027, 21031, 21035, 21039, 21043,
-    21047, 21051, 21055, 21059, 21063, 21067, 21071, 21075, 21079, 21083,
-    21087, 21091, 21095, 21099, 21103, 21107, 21111, 21115, 21119, 21123,
-    21127, 21131, 21135, 21139, 21143, 21147, 21151, 21155, 21160, 21164,
-    21169, 21174, 21178, 21183, 21188, 21192, 21196, 21200, 21204, 21208,
-    21212, 21216, 21220, 21224, 21228, 21232, 21236, 21240, 21244, 21248,
-    21252, 21256, 21260, 21264, 21268, 21272, 21276, 21280, 21284, 21288,
-    21292, 21296, 21300, 21304, 21308, 21312, 21316, 21320, 21324, 21328,
-    21332, 21336, 21340, 21344, 21348, 21352, 21356, 21360, 21364, 21368,
-    21372, 21376, 21380, 21384, 21388, 21392, 21396, 21400, 21404, 21408,
-    21412, 21416, 21420, 21424, 21428, 21432, 21436, 21440, 21444, 21448,
-    21452, 21456, 21460, 21464, 21468, 21472, 21476, 21480, 21484, 21488,
-    21492, 21496, 21500, 21504, 21508, 21512, 21516, 21520, 21524, 21528,
-    21532, 21536, 21540, 21544, 21548, 21552, 21556, 21560, 21564, 21568,
-    21572, 21577, 21581, 21586, 21590, 21595, 21600, 21604, 21609, 21614,
-    21618, 21623, 21628, 21633, 21638, 21642, 21647, 21652, 21657, 21662,
-    21667, 21672, 21676, 21681, 21686, 21691, 21696, 21701, 21706, 21711,
-    21716, 21721, 21726, 21731, 21736, 21741, 21746, 21751, 21756, 21761,
-    21766, 21771, 21776, 21781, 21786, 21791, 21796, 21801, 21806, 21811,
-    21816, 21821, 21826, 21831, 21836, 21841, 21846, 21851, 21856, 21861,
-    21866, 21871, 21876, 21881, 21886, 21891, 21896, 21901, 21906, 21911,
-    21916, 21921, 21926, 21930, 21934, 21938, 21942, 21946, 21950, 21954,
-    21958, 21962, 21966, 21970, 21974, 21978, 21982, 21986, 21990, 21994,
-    21998, 22002, 22006, 22010, 22014, 22018, 22022, 22026, 22030, 22034,
-    22038, 22042, 22046, 22050, 22054, 22058, 22062, 22066, 22070, 22074,
-    22078, 22082, 22086, 22090, 22094, 22098, 22102, 22106, 22110, 22114,
-    22118, 22122, 22126, 22130, 22134, 22138, 22142, 22146, 22150, 22154,
-    22158, 22162, 22166, 22170, 22174, 22178, 22182, 22186, 22190, 22194,
-    22198, 22202, 22206, 22210, 22214, 22218, 22222, 22226, 22230, 22234,
-    22238, 22242, 22246, 22250, 22254, 22258, 22262, 22266, 22270, 22274,
-    22278, 22281, 22285, 22289, 22293, 22297, 22301, 22305, 22309, 22312,
-    22316, 22320, 22324, 22328, 22332, 22336, 22340, 22344, 22348, 22352,
-    22356, 22360, 22364, 22368, 22372, 22375, 22379, 22383, 22387, 22391,
-    22395, 22399, 22403, 22407, 22411, 22415, 22419, 22423, 22427, 22431,
-    22435, 22438, 22442, 22446, 22450, 22454, 22458, 22462, 22466, 22469,
-    22473, 22477, 22481, 22485, 22489, 22493, 22497, 22501, 22505, 22509,
-    22513, 22517, 22521, 22525, 22529, 22533, 22537, 22541, 22545, 22549,
-    22553, 22557, 22561, 0, 22565, 22569, 22573, 22577, 0, 0, 22581, 22585,
-    22589, 22593, 22597, 22601, 22605, 0, 22609, 0, 22613, 22617, 22621,
-    22625, 0, 0, 22629, 22633, 22637, 22641, 22645, 22649, 22653, 22657,
-    22661, 22665, 22669, 22673, 22677, 22681, 22685, 22689, 22693, 22696,
-    22700, 22704, 22708, 22712, 22716, 22719, 22723, 22727, 22731, 22735,
-    22739, 22743, 22747, 22751, 22755, 22759, 22763, 22767, 22771, 22775,
-    22779, 22783, 22787, 0, 22791, 22795, 22799, 22803, 0, 0, 22807, 22810,
-    22814, 22818, 22822, 22826, 22830, 22834, 22838, 22842, 22846, 22850,
-    22854, 22858, 22862, 22866, 22870, 22875, 22880, 22885, 22891, 22897,
-    22902, 22907, 22913, 22916, 22920, 22924, 22928, 22932, 22936, 22940,
-    22944, 0, 22948, 22952, 22956, 22960, 0, 0, 22964, 22968, 22972, 22976,
-    22980, 22984, 22988, 0, 22992, 0, 22996, 23000, 23004, 23008, 0, 0,
-    23012, 23016, 23020, 23024, 23028, 23032, 23036, 23040, 23044, 23049,
-    23054, 23059, 23065, 23071, 23076, 0, 23081, 23085, 23089, 23093, 23097,
-    23101, 23105, 23109, 23113, 23117, 23121, 23125, 23129, 23133, 23137,
-    23141, 23145, 23148, 23152, 23156, 23160, 23164, 23168, 23172, 23176,
-    23180, 23184, 23188, 23192, 23196, 23200, 23204, 23208, 23212, 23216,
-    23220, 23224, 23228, 23232, 23236, 23240, 23244, 23248, 23252, 23256,
-    23260, 23264, 23268, 23272, 23276, 23280, 23284, 23288, 23292, 23296,
-    23300, 23304, 0, 23308, 23312, 23316, 23320, 0, 0, 23324, 23328, 23332,
-    23336, 23340, 23344, 23348, 23352, 23356, 23360, 23364, 23368, 23372,
-    23376, 23380, 23384, 23388, 23392, 23396, 23400, 23404, 23408, 23412,
-    23416, 23420, 23424, 23428, 23432, 23436, 23440, 23444, 23448, 23452,
-    23456, 23460, 23464, 23468, 23472, 23476, 23480, 23484, 23488, 23492,
-    23496, 23500, 23504, 23508, 23512, 23516, 23520, 23524, 23528, 23532,
-    23536, 23540, 23544, 23548, 23551, 23555, 23559, 23563, 23567, 23571,
-    23575, 23579, 23583, 23587, 0, 0, 23591, 23600, 23606, 23611, 23615,
-    23618, 23623, 23626, 23629, 23632, 23637, 23641, 23646, 23649, 23652,
-    23655, 23658, 23661, 23664, 23667, 23670, 23673, 23677, 23681, 23685,
-    23689, 23693, 23697, 23701, 23705, 23709, 23713, 0, 0, 0, 23718, 23724,
-    23728, 23732, 23736, 23742, 23746, 23750, 23754, 23760, 23764, 23768,
-    23772, 23778, 23782, 23786, 23790, 23796, 23802, 23808, 23816, 23822,
-    23828, 23834, 23840, 23846, 0, 0, 0, 0, 0, 0, 23852, 23855, 23858, 23861,
-    23864, 23867, 23871, 23875, 23878, 23882, 23886, 23890, 23894, 23898,
-    23901, 23905, 23909, 23913, 23917, 23921, 23924, 23928, 23932, 23936,
-    23940, 23944, 23947, 23951, 23955, 23959, 23963, 23966, 23970, 23974,
-    23978, 23982, 23986, 23990, 23994, 23998, 24002, 24006, 24010, 24014,
-    24018, 24021, 24025, 24029, 24033, 24037, 24041, 24045, 24049, 24052,
-    24056, 24060, 24064, 24068, 24072, 24076, 24080, 24084, 24088, 24092,
-    24096, 24100, 24104, 24108, 24112, 24116, 24120, 24124, 24128, 24132,
-    24136, 24140, 24144, 24148, 24152, 24156, 24159, 24163, 24167, 24171,
-    24175, 24179, 0, 0, 24183, 24188, 24193, 24198, 24203, 24208, 0, 0,
-    24213, 24217, 24220, 24224, 24227, 24231, 24234, 24238, 24244, 24249,
-    24253, 24256, 24260, 24264, 24270, 24274, 24280, 24284, 24290, 24294,
-    24300, 24304, 24310, 24316, 24320, 24326, 24330, 24336, 24342, 24346,
-    24352, 24358, 24362, 24367, 24375, 24383, 24390, 24395, 24400, 24409,
-    24415, 24423, 24428, 24434, 24438, 24442, 24446, 24450, 24454, 24458,
-    24462, 24466, 24470, 24474, 24480, 24485, 24490, 24493, 24497, 24501,
-    24507, 24511, 24517, 24521, 24527, 24531, 24537, 24541, 24547, 24551,
-    24557, 24561, 24567, 24573, 24577, 24583, 24588, 24592, 24596, 24600,
-    24604, 24607, 24611, 24617, 24622, 24627, 24630, 24634, 24638, 24644,
-    24648, 24654, 24658, 24664, 24667, 24672, 24676, 24682, 24686, 24692,
-    24696, 24702, 24708, 24712, 24716, 24720, 24724, 24728, 24732, 24736,
-    24740, 24744, 24748, 24752, 24758, 24761, 24765, 24769, 24775, 24779,
-    24785, 24789, 24795, 24799, 24805, 24809, 24815, 24819, 24825, 24829,
-    24835, 24841, 24845, 24849, 24855, 24861, 24867, 24873, 24877, 24881,
-    24885, 24889, 24893, 24897, 24903, 24907, 24911, 24915, 24921, 24925,
-    24931, 24935, 24941, 24945, 24951, 24955, 24961, 24965, 24971, 24975,
-    24981, 24987, 24991, 24997, 25001, 25005, 25009, 25013, 25017, 25021,
-    25027, 25030, 25034, 25038, 25044, 25048, 25054, 25058, 25064, 25068,
-    25074, 25078, 25084, 25088, 25094, 25098, 25104, 25110, 25114, 25120,
-    25124, 25130, 25136, 25140, 25144, 25148, 25152, 25156, 25160, 25166,
-    25169, 25173, 25177, 25183, 25187, 25193, 25197, 25203, 25209, 25213,
-    25218, 25222, 25226, 25230, 25234, 25238, 25242, 25246, 25252, 25255,
-    25259, 25263, 25269, 25273, 25279, 25283, 25289, 25293, 25299, 25303,
-    25309, 25313, 25319, 25323, 25329, 25332, 25337, 25342, 25346, 25350,
-    25354, 25358, 25362, 25366, 25372, 25375, 25379, 25383, 25389, 25393,
-    25399, 25403, 25409, 25413, 25419, 25423, 25429, 25433, 25439, 25443,
-    25449, 25455, 25459, 25465, 25469, 25475, 25481, 25487, 25493, 25499,
-    25505, 25511, 25517, 25521, 25525, 25529, 25533, 25537, 25541, 25545,
-    25549, 25555, 25559, 25565, 25569, 25575, 25579, 25585, 25589, 25595,
-    25599, 25605, 25609, 25615, 25619, 25623, 25627, 25631, 25635, 25639,
-    25643, 25649, 25652, 25656, 25660, 25666, 25670, 25676, 25680, 25686,
-    25690, 25696, 25700, 25706, 25710, 25716, 25720, 25726, 25732, 25736,
-    25742, 25748, 25754, 25758, 25764, 25770, 25774, 25778, 25782, 25786,
-    25790, 25796, 25799, 25803, 25808, 25812, 25818, 25821, 25826, 25831,
-    25835, 25839, 25843, 25847, 25851, 25855, 25859, 25863, 25867, 25873,
-    25877, 25881, 25887, 25891, 25897, 25901, 25907, 25911, 25915, 25919,
-    25923, 25927, 25933, 25937, 25941, 25945, 25949, 25953, 25957, 25961,
-    25965, 25969, 25973, 25979, 25985, 25991, 25997, 26003, 26008, 26014,
-    26020, 26026, 26030, 26034, 26038, 26042, 26046, 26050, 26054, 26058,
-    26062, 26066, 26070, 26074, 26078, 26084, 26090, 26096, 26101, 26105,
-    26109, 26113, 26117, 26121, 26125, 26129, 26133, 26137, 26143, 26149,
-    26155, 26161, 26167, 26173, 26179, 26185, 26191, 26195, 26199, 26203,
-    26207, 26211, 26215, 26219, 26225, 26231, 26237, 26243, 26249, 26255,
-    26261, 26267, 26273, 26278, 26283, 26288, 26293, 26299, 26305, 26311,
-    26317, 26323, 26329, 26335, 26340, 26346, 26352, 26358, 26363, 26369,
-    26375, 26381, 26386, 26391, 26396, 26401, 26406, 26411, 26416, 26421,
-    26426, 26431, 26436, 26441, 26445, 26450, 26455, 26460, 26465, 26470,
-    26475, 26480, 26485, 26490, 26495, 26500, 26505, 26510, 26515, 26520,
-    26525, 26530, 26535, 26540, 26545, 26550, 26555, 26560, 26565, 26570,
-    26575, 26580, 26585, 26590, 26594, 26599, 26604, 26609, 26614, 26619,
-    26624, 26629, 26634, 26639, 26644, 26649, 26654, 26659, 26664, 26669,
-    26674, 26679, 26684, 26689, 26694, 26699, 26704, 26709, 26714, 26719,
-    26723, 26728, 26733, 26738, 26743, 26748, 26752, 26757, 26762, 26767,
-    26772, 26777, 26781, 26786, 26792, 26797, 26802, 26807, 26812, 26818,
-    26823, 26828, 26833, 26838, 26843, 26848, 26853, 26858, 26863, 26868,
-    26873, 26878, 26882, 26887, 26892, 26897, 26902, 26907, 26912, 26917,
-    26922, 26927, 26932, 26937, 26942, 26947, 26952, 26957, 26962, 26967,
-    26972, 26977, 26982, 26987, 26992, 26997, 27002, 27007, 27012, 27017,
-    27022, 27027, 27032, 27037, 27043, 27048, 27053, 27058, 27063, 27068,
-    27073, 27078, 27083, 27088, 27093, 27098, 27102, 27107, 27112, 27117,
-    27122, 27127, 27132, 27137, 27142, 27147, 27152, 27157, 27162, 27167,
-    27172, 27177, 27182, 27187, 27192, 27197, 27202, 27207, 27212, 27217,
-    27222, 27227, 27232, 27238, 27242, 27246, 27250, 27254, 27258, 27262,
-    27266, 27270, 27276, 27282, 27288, 27294, 27300, 27306, 27312, 27319,
-    27325, 27330, 27335, 27340, 27345, 27350, 27355, 27360, 27365, 27370,
-    27375, 27380, 27385, 27390, 27395, 27400, 27405, 27410, 27415, 27420,
-    27425, 27430, 27435, 27440, 27445, 27450, 27455, 27460, 27465, 0, 0, 0,
-    27472, 27483, 27488, 27496, 27501, 27506, 27511, 27520, 27525, 27531,
-    27537, 27543, 27548, 27554, 27560, 27564, 27569, 27574, 27584, 27589,
-    27594, 27601, 27606, 27611, 27620, 27625, 27634, 27641, 27648, 27655,
-    27662, 27673, 27680, 27685, 27695, 27699, 27706, 27711, 27718, 27724,
-    27731, 27740, 27747, 27754, 27763, 27770, 27775, 27780, 27791, 27798,
-    27803, 27814, 27821, 27826, 27831, 27839, 27848, 27855, 27862, 27872,
-    27877, 27882, 27887, 27896, 27904, 27909, 27914, 27919, 27924, 27929,
-    27934, 27939, 27944, 27949, 27954, 27959, 27965, 27971, 27977, 27982,
-    27987, 27992, 27997, 28002, 28007, 28016, 28025, 28034, 28043, 0, 0, 0,
-    0, 0, 0, 0, 28052, 28056, 28060, 28064, 28068, 28073, 28078, 28082,
-    28087, 28091, 28095, 28100, 28104, 0, 28108, 28112, 28117, 28121, 28125,
-    28130, 28135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28140, 28144, 28148,
-    28152, 28156, 28161, 28166, 28170, 28175, 28179, 28183, 28188, 28192,
-    28196, 28200, 28204, 28209, 28213, 28217, 28222, 28227, 28232, 28238, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 28243, 28247, 28251, 28255, 28259, 28264, 28269,
-    28273, 28278, 28282, 28286, 28291, 28295, 28299, 28303, 28307, 28312,
-    28316, 28320, 28325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28330, 28334,
-    28338, 28342, 28346, 28351, 28356, 28360, 28365, 28369, 28373, 28378,
-    28382, 0, 28386, 28390, 28395, 0, 28399, 28404, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 28409, 28412, 28416, 28420, 28424, 28428, 28432, 28436,
-    28440, 28444, 28448, 28452, 28456, 28460, 28464, 28468, 28471, 28475,
-    28478, 28482, 28486, 28490, 28494, 28498, 28502, 28506, 28510, 28514,
-    28518, 28522, 28526, 28530, 28533, 28536, 28539, 28543, 28549, 28555,
-    28561, 28567, 28573, 28579, 28585, 28591, 28597, 28603, 28609, 28615,
-    28621, 28627, 28636, 28645, 28651, 28657, 28663, 28668, 28672, 28677,
-    28682, 28687, 28691, 28696, 28701, 28706, 28710, 28715, 28719, 28724,
-    28729, 28734, 28739, 28743, 28747, 28751, 28755, 28759, 28763, 28767,
-    28771, 28775, 28779, 28785, 28789, 28793, 28797, 28801, 28805, 28813,
-    28819, 28823, 28829, 28833, 28839, 28843, 0, 0, 28847, 28851, 28854,
-    28857, 28860, 28863, 28866, 28869, 28872, 28875, 0, 0, 0, 0, 0, 0, 28878,
-    28886, 28894, 28902, 28910, 28918, 28926, 28934, 28942, 28950, 0, 0, 0,
-    0, 0, 0, 28958, 28961, 28964, 28967, 28972, 28975, 28980, 28987, 28995,
-    29000, 29007, 29010, 29017, 29024, 29031, 0, 29035, 29039, 29042, 29045,
-    29048, 29051, 29054, 29057, 29060, 29063, 0, 0, 0, 0, 0, 0, 29066, 29069,
-    29072, 29075, 29078, 29081, 29085, 29089, 29093, 29096, 29100, 29104,
-    29107, 29111, 29115, 29118, 29121, 29124, 29128, 29131, 29135, 29139,
-    29143, 29146, 29149, 29153, 29157, 29160, 29164, 29168, 29172, 29176,
-    29180, 29184, 29188, 29192, 29199, 29204, 29209, 29214, 29219, 29225,
-    29231, 29237, 29243, 29248, 29254, 29260, 29265, 29270, 29276, 29282,
-    29288, 29294, 29299, 29305, 29310, 29316, 29322, 29328, 29334, 29340,
-    29345, 29350, 29356, 29362, 29367, 29373, 29378, 29384, 29389, 29394,
-    29400, 29405, 29411, 29417, 29423, 29429, 29435, 29441, 29447, 29453,
-    29459, 29465, 29470, 29475, 29480, 29486, 29492, 0, 0, 0, 0, 0, 0, 0,
-    29500, 29509, 29518, 29526, 29534, 29544, 29552, 29561, 29568, 29575,
-    29582, 29590, 29598, 29606, 29614, 29622, 29630, 29637, 29645, 29652,
-    29660, 29668, 29676, 29684, 29692, 29701, 29711, 29721, 29731, 29741,
-    29751, 29761, 29771, 29780, 29790, 29800, 29810, 29820, 29830, 29838,
-    29846, 29856, 29864, 0, 0, 0, 0, 0, 29874, 29878, 29882, 29886, 29890,
-    29894, 29898, 29902, 29906, 29910, 29914, 29918, 29922, 29926, 29930,
-    29934, 29938, 29942, 29946, 29950, 29954, 29958, 29962, 29966, 29972,
-    29976, 29982, 29986, 29992, 29996, 30002, 30006, 30010, 30014, 30018,
-    30022, 30026, 30032, 30038, 30044, 30050, 30056, 30062, 30068, 30074,
-    30080, 30086, 30092, 30099, 30105, 30111, 30117, 30121, 30125, 30129,
-    30133, 30137, 30141, 30145, 30151, 30157, 30163, 30168, 30175, 30180,
-    30185, 30191, 30196, 30203, 30210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30217,
-    30223, 30227, 30232, 30237, 30242, 30247, 30252, 30257, 30262, 30267,
-    30272, 30276, 30281, 30286, 30291, 30295, 30299, 30304, 30309, 30314,
-    30318, 30322, 30326, 30330, 30335, 30340, 30345, 30349, 30353, 30358, 0,
-    30363, 30368, 30373, 30378, 30384, 30390, 30396, 30402, 30407, 30412,
-    30418, 30424, 0, 0, 0, 0, 30431, 30436, 30442, 30448, 30453, 30458,
-    30463, 30468, 30473, 30478, 30483, 30488, 0, 0, 0, 0, 30493, 0, 0, 0,
-    30498, 30503, 30508, 30513, 30517, 30521, 30525, 30529, 30533, 30537,
-    30541, 30545, 30549, 30554, 30560, 30566, 30572, 30577, 30582, 30587,
-    30593, 30598, 30603, 30609, 30614, 30620, 30626, 30631, 30637, 30643,
-    30649, 30654, 30659, 30664, 30670, 30676, 30681, 30687, 30692, 30698,
-    30703, 30709, 0, 0, 30715, 30721, 30727, 30733, 30739, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 30745, 30754, 30763, 30771, 30780, 30789, 30797, 30806,
-    30815, 30824, 30832, 30840, 30849, 30857, 30865, 30873, 30882, 30890,
-    30898, 30907, 30915, 30923, 30932, 30940, 30948, 30957, 30965, 30974,
-    30983, 30991, 31000, 31009, 31017, 31025, 31034, 31043, 31051, 31060,
-    31069, 31078, 31087, 31096, 31105, 31114, 0, 0, 0, 0, 31123, 31133,
-    31142, 31151, 31159, 31168, 31176, 31185, 31193, 31202, 31211, 31220,
-    31229, 31238, 31247, 31256, 31265, 31274, 31283, 31292, 31301, 31310,
-    31319, 31328, 31337, 31345, 0, 0, 0, 0, 0, 0, 31353, 31361, 31368, 31375,
-    31382, 31389, 31396, 31403, 31410, 31417, 31424, 0, 0, 0, 31432, 31440,
-    31448, 31452, 31458, 31464, 31470, 31476, 31482, 31488, 31494, 31500,
-    31506, 31512, 31518, 31524, 31530, 31536, 31542, 31546, 31552, 31558,
-    31564, 31570, 31576, 31582, 31588, 31594, 31600, 31606, 31612, 31618,
-    31624, 31630, 31636, 31640, 31645, 31650, 31655, 31659, 31664, 31668,
-    31673, 31677, 31682, 31686, 31691, 31696, 31701, 31706, 31711, 31715,
-    31719, 31723, 31728, 31732, 31736, 31740, 31745, 31750, 31755, 31760, 0,
-    0, 31766, 31770, 31777, 31782, 31788, 31794, 31799, 31805, 31811, 31816,
-    31822, 31828, 31834, 31839, 31845, 31850, 31855, 31861, 31866, 31872,
-    31877, 31882, 31888, 31893, 31899, 31903, 31908, 31913, 31919, 31925,
-    31930, 31936, 31942, 31946, 31951, 31956, 31960, 31965, 31969, 31974,
-    31979, 31985, 31991, 31996, 32001, 32006, 32010, 32015, 32019, 32024,
-    32028, 32033, 32038, 32043, 32048, 32054, 32061, 32068, 32078, 32087,
-    32094, 32100, 32111, 32116, 32122, 0, 32127, 32132, 32137, 32145, 32151,
-    32159, 32164, 32170, 32176, 32182, 32187, 32193, 32198, 32205, 32211,
-    32216, 32222, 32228, 32234, 32241, 32248, 32255, 32260, 32265, 32272,
-    32279, 32286, 32293, 32300, 0, 0, 32307, 32314, 32321, 32327, 32333,
-    32339, 32345, 32351, 32357, 32363, 32369, 0, 0, 0, 0, 0, 0, 32375, 32381,
-    32386, 32391, 32396, 32401, 32406, 32411, 32416, 32421, 0, 0, 0, 0, 0, 0,
-    32426, 32431, 32436, 32441, 32446, 32451, 32456, 32465, 32472, 32477,
-    32482, 32487, 32492, 32497, 0, 0, 32502, 32509, 32512, 32515, 32519,
-    32524, 32528, 32534, 32538, 32543, 32550, 32558, 32562, 32567, 32571, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18379, 18384, 0, 18391, 0, 18398,
+    18405, 18410, 18415, 18422, 0, 18429, 18436, 18441, 18448, 18455, 18462,
+    18469, 18476, 18483, 18488, 18492, 18499, 18506, 18513, 18518, 18523,
+    18528, 18535, 18542, 18549, 18556, 18563, 18568, 18573, 0, 18580, 0,
+    18587, 18592, 18599, 18606, 18613, 18620, 18627, 18631, 18638, 18642,
+    18647, 18655, 18661, 18667, 18672, 18678, 18684, 18690, 18695, 18701,
+    18708, 18716, 18723, 0, 0, 18730, 18735, 18741, 18746, 18752, 0, 18758,
+    0, 18763, 18770, 18777, 18784, 18791, 18796, 0, 0, 18800, 18805, 18809,
+    18813, 18817, 18821, 18825, 18829, 18833, 18837, 0, 0, 18841, 18847,
+    18853, 18860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18867, 18871, 18882, 18897, 18912,
+    18922, 18933, 18946, 18957, 18963, 18971, 18981, 18987, 18995, 18999,
+    19005, 19011, 19019, 19029, 19037, 19050, 19056, 19064, 19072, 19084,
+    19091, 19099, 19107, 19115, 19123, 19131, 19139, 19149, 19153, 19156,
+    19159, 19162, 19165, 19168, 19171, 19174, 19177, 19180, 19184, 19188,
+    19192, 19196, 19200, 19204, 19208, 19212, 19216, 19221, 19227, 19237,
+    19251, 19261, 19267, 19273, 19281, 19289, 19297, 19305, 19311, 19317,
+    19320, 19324, 19328, 19332, 19336, 19340, 19344, 0, 19348, 19352, 19356,
+    19360, 19364, 19368, 19372, 19375, 19379, 19383, 19387, 19390, 19393,
+    19397, 19401, 19405, 19408, 19412, 19416, 19420, 19424, 19428, 19432,
+    19436, 19440, 19443, 19446, 19449, 19453, 19457, 19460, 19463, 19466,
+    19470, 19475, 19479, 0, 0, 0, 0, 19483, 19488, 19492, 19497, 19501,
+    19506, 19511, 19517, 19522, 19528, 19532, 19537, 19541, 19546, 19556,
+    19562, 19568, 19575, 19585, 19591, 19595, 19599, 19605, 19611, 19619,
+    19625, 19633, 19641, 19649, 19659, 19667, 19677, 19682, 19688, 19694,
+    19700, 19706, 19712, 19718, 0, 19724, 19730, 19736, 19742, 19748, 19754,
+    19760, 19765, 19771, 19777, 19783, 19788, 19793, 19799, 19805, 19811,
+    19816, 19822, 19828, 19834, 19840, 19846, 19852, 19858, 19864, 19869,
+    19874, 19879, 19885, 19891, 19896, 19901, 19906, 19912, 19920, 19927, 0,
+    19934, 19941, 19954, 19961, 19968, 19976, 19984, 19990, 19996, 20002,
+    20012, 20017, 20023, 20033, 20043, 0, 20053, 20063, 20071, 20083, 20095,
+    20101, 20115, 20130, 20135, 20140, 20148, 20156, 20164, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 20172, 20175, 20179, 20183, 20187, 20191, 20195,
+    20199, 20203, 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235,
+    20238, 20242, 20246, 20250, 20253, 20256, 20260, 20264, 20268, 20271,
+    20274, 20277, 20280, 20284, 20287, 20290, 20294, 20297, 20302, 20305,
+    20309, 20312, 20316, 20319, 20324, 20327, 20331, 20338, 20343, 20347,
+    20352, 20356, 20361, 20365, 20370, 20377, 20383, 20389, 20393, 20397,
+    20401, 20405, 20409, 20415, 20421, 20428, 20434, 20439, 20443, 20446,
+    20449, 20452, 20455, 20458, 20461, 20464, 20467, 20470, 20476, 20480,
+    20484, 20488, 20492, 20496, 20500, 20504, 20508, 20513, 20517, 20522,
+    20527, 20533, 20538, 20544, 20550, 20556, 20562, 20568, 20576, 20584,
+    20592, 20600, 20609, 20618, 20629, 20639, 20649, 20660, 20671, 20681,
+    20691, 20701, 20711, 20721, 20731, 20741, 20751, 20759, 20766, 20772,
+    20779, 20784, 20790, 20796, 20802, 20808, 20814, 20820, 20825, 20831,
+    20837, 20843, 20849, 20854, 20863, 20870, 20876, 20884, 20892, 20898,
+    20904, 20910, 20916, 20924, 20932, 20942, 20950, 20958, 20964, 20969,
+    20974, 20979, 20984, 20989, 20994, 20999, 21004, 21009, 21015, 21021,
+    21027, 21034, 21039, 21045, 21050, 21055, 21060, 21065, 21070, 21075,
+    21080, 21085, 21090, 21095, 21100, 21105, 21110, 21115, 21120, 21125,
+    21130, 21135, 21140, 21145, 21150, 21155, 21160, 21165, 21170, 21175,
+    21180, 21185, 21190, 21195, 21200, 21205, 21210, 21215, 21220, 21225,
+    21230, 0, 21235, 0, 0, 0, 0, 0, 21240, 0, 0, 21245, 21249, 21253, 21257,
+    21261, 21265, 21269, 21273, 21277, 21281, 21285, 21289, 21293, 21297,
+    21301, 21305, 21309, 21313, 21317, 21321, 21325, 21329, 21333, 21337,
+    21341, 21345, 21349, 21353, 21357, 21361, 21365, 21369, 21373, 21377,
+    21381, 21385, 21389, 21393, 21397, 21401, 21405, 21409, 21414, 21418,
+    21423, 21428, 21432, 21437, 21442, 21446, 21450, 21454, 21458, 21462,
+    21466, 21470, 21474, 21478, 21482, 21486, 21490, 21494, 21498, 21502,
+    21506, 21510, 21514, 21518, 21522, 21526, 21530, 21534, 21538, 21542,
+    21546, 21550, 21554, 21558, 21562, 21566, 21570, 21574, 21578, 21582,
+    21586, 21590, 21594, 21598, 21602, 21606, 21610, 21614, 21618, 21622,
+    21626, 21630, 21634, 21638, 21642, 21646, 21650, 21654, 21658, 21662,
+    21666, 21670, 21674, 21678, 21682, 21686, 21690, 21694, 21698, 21702,
+    21706, 21710, 21714, 21718, 21722, 21726, 21730, 21734, 21738, 21742,
+    21746, 21750, 21754, 21758, 21762, 21766, 21770, 21774, 21778, 21782,
+    21786, 21790, 21794, 21798, 21802, 21806, 21810, 21814, 21818, 21822,
+    21826, 21831, 21835, 21840, 21844, 21849, 21854, 21858, 21863, 21868,
+    21872, 21877, 21882, 21887, 21892, 21896, 21901, 21906, 21911, 21916,
+    21921, 21926, 21930, 21935, 21940, 21945, 21950, 21955, 21960, 21965,
+    21970, 21975, 21980, 21985, 21990, 21995, 22000, 22005, 22010, 22015,
+    22020, 22025, 22030, 22035, 22040, 22045, 22050, 22055, 22060, 22065,
+    22070, 22075, 22080, 22085, 22090, 22095, 22100, 22105, 22110, 22115,
+    22120, 22125, 22130, 22135, 22140, 22145, 22150, 22155, 22160, 22165,
+    22170, 22175, 22180, 22184, 22188, 22192, 22196, 22200, 22204, 22208,
+    22212, 22216, 22220, 22224, 22228, 22232, 22236, 22240, 22244, 22248,
+    22252, 22256, 22260, 22264, 22268, 22272, 22276, 22280, 22284, 22288,
+    22292, 22296, 22300, 22304, 22308, 22312, 22316, 22320, 22324, 22328,
+    22332, 22336, 22340, 22344, 22348, 22352, 22356, 22360, 22364, 22368,
+    22372, 22376, 22380, 22384, 22388, 22392, 22396, 22400, 22404, 22408,
+    22412, 22416, 22420, 22424, 22428, 22432, 22436, 22440, 22444, 22448,
+    22452, 22456, 22460, 22464, 22468, 22472, 22476, 22480, 22484, 22488,
+    22492, 22496, 22500, 22504, 22508, 22512, 22516, 22520, 22524, 22528,
+    22532, 22535, 22539, 22543, 22547, 22551, 22555, 22559, 22563, 22566,
+    22570, 22574, 22578, 22582, 22586, 22590, 22594, 22598, 22602, 22606,
+    22610, 22614, 22618, 22622, 22626, 22629, 22633, 22637, 22641, 22645,
+    22649, 22653, 22657, 22661, 22665, 22669, 22673, 22677, 22681, 22685,
+    22689, 22692, 22696, 22700, 22704, 22708, 22712, 22716, 22720, 22723,
+    22727, 22731, 22735, 22739, 22743, 22747, 22751, 22755, 22759, 22763,
+    22767, 22771, 22775, 22779, 22783, 22787, 22791, 22795, 22799, 22803,
+    22807, 22811, 22815, 0, 22819, 22823, 22827, 22831, 0, 0, 22835, 22839,
+    22843, 22847, 22851, 22855, 22859, 0, 22863, 0, 22867, 22871, 22875,
+    22879, 0, 0, 22883, 22887, 22891, 22895, 22899, 22903, 22907, 22911,
+    22915, 22919, 22923, 22927, 22931, 22935, 22939, 22943, 22947, 22950,
+    22954, 22958, 22962, 22966, 22970, 22973, 22977, 22981, 22985, 22989,
+    22993, 22997, 23001, 23005, 23009, 23013, 23017, 23021, 23025, 23029,
+    23033, 23037, 23041, 0, 23045, 23049, 23053, 23057, 0, 0, 23061, 23064,
+    23068, 23072, 23076, 23080, 23084, 23088, 23092, 23096, 23100, 23104,
+    23108, 23112, 23116, 23120, 23124, 23129, 23134, 23139, 23145, 23151,
+    23156, 23161, 23167, 23170, 23174, 23178, 23182, 23186, 23190, 23194,
+    23198, 0, 23202, 23206, 23210, 23214, 0, 0, 23218, 23222, 23226, 23230,
+    23234, 23238, 23242, 0, 23246, 0, 23250, 23254, 23258, 23262, 0, 0,
+    23266, 23270, 23274, 23278, 23282, 23286, 23290, 23294, 23298, 23303,
+    23308, 23313, 23319, 23325, 23330, 0, 23335, 23339, 23343, 23347, 23351,
+    23355, 23359, 23363, 23367, 23371, 23375, 23379, 23383, 23387, 23391,
+    23395, 23399, 23402, 23406, 23410, 23414, 23418, 23422, 23426, 23430,
+    23434, 23438, 23442, 23446, 23450, 23454, 23458, 23462, 23466, 23470,
+    23474, 23478, 23482, 23486, 23490, 23494, 23498, 23502, 23506, 23510,
+    23514, 23518, 23522, 23526, 23530, 23534, 23538, 23542, 23546, 23550,
+    23554, 23558, 0, 23562, 23566, 23570, 23574, 0, 0, 23578, 23582, 23586,
+    23590, 23594, 23598, 23602, 23606, 23610, 23614, 23618, 23622, 23626,
+    23630, 23634, 23638, 23642, 23646, 23650, 23654, 23658, 23662, 23666,
+    23670, 23674, 23678, 23682, 23686, 23690, 23694, 23698, 23702, 23706,
+    23710, 23714, 23718, 23722, 23726, 23730, 23734, 23738, 23742, 23746,
+    23750, 23754, 23758, 23762, 23766, 23770, 23774, 23778, 23782, 23786,
+    23790, 23794, 23798, 23802, 23805, 23809, 23813, 23817, 23821, 23825,
+    23829, 23833, 23837, 23841, 0, 0, 23845, 23854, 23860, 23865, 23869,
+    23872, 23877, 23880, 23883, 23886, 23891, 23895, 23900, 23903, 23906,
+    23909, 23912, 23915, 23918, 23921, 23924, 23927, 23931, 23935, 23939,
+    23943, 23947, 23951, 23955, 23959, 23963, 23967, 0, 0, 0, 23972, 23978,
+    23982, 23986, 23990, 23996, 24000, 24004, 24008, 24014, 24018, 24022,
+    24026, 24032, 24036, 24040, 24044, 24050, 24056, 24062, 24070, 24076,
+    24082, 24088, 24094, 24100, 0, 0, 0, 0, 0, 0, 24106, 24109, 24112, 24115,
+    24118, 24121, 24125, 24129, 24132, 24136, 24140, 24144, 24148, 24152,
+    24155, 24159, 24163, 24167, 24171, 24175, 24178, 24182, 24186, 24190,
+    24194, 24198, 24201, 24205, 24209, 24213, 24217, 24220, 24224, 24228,
+    24232, 24236, 24240, 24244, 24248, 24252, 24256, 24260, 24264, 24268,
+    24272, 24275, 24279, 24283, 24287, 24291, 24295, 24299, 24303, 24306,
+    24310, 24314, 24318, 24322, 24326, 24330, 24334, 24338, 24342, 24346,
+    24350, 24354, 24358, 24362, 24366, 24370, 24374, 24378, 24382, 24386,
+    24390, 24394, 24398, 24402, 24406, 24410, 24413, 24417, 24421, 24425,
+    24429, 24433, 0, 0, 24437, 24442, 24447, 24452, 24457, 24462, 0, 0,
+    24467, 24471, 24474, 24478, 24481, 24485, 24488, 24492, 24498, 24503,
+    24507, 24510, 24514, 24518, 24524, 24528, 24534, 24538, 24544, 24548,
+    24554, 24558, 24564, 24570, 24574, 24580, 24584, 24590, 24596, 24600,
+    24606, 24612, 24617, 24622, 24630, 24638, 24645, 24650, 24656, 24665,
+    24671, 24679, 24684, 24690, 24694, 24698, 24702, 24706, 24710, 24714,
+    24718, 24722, 24726, 24730, 24736, 24741, 24746, 24749, 24753, 24757,
+    24763, 24767, 24773, 24777, 24783, 24787, 24793, 24797, 24803, 24807,
+    24813, 24817, 24823, 24829, 24833, 24839, 24844, 24848, 24852, 24856,
+    24860, 24863, 24867, 24873, 24878, 24883, 24886, 24890, 24894, 24900,
+    24904, 24910, 24914, 24920, 24923, 24928, 24932, 24938, 24942, 24948,
+    24952, 24958, 24964, 24968, 24972, 24976, 24980, 24984, 24988, 24992,
+    24996, 25000, 25004, 25008, 25014, 25017, 25021, 25025, 25031, 25035,
+    25041, 25045, 25051, 25055, 25061, 25065, 25071, 25075, 25081, 25085,
+    25091, 25097, 25101, 25105, 25111, 25117, 25123, 25129, 25133, 25137,
+    25141, 25145, 25149, 25153, 25159, 25163, 25167, 25171, 25177, 25181,
+    25187, 25191, 25197, 25201, 25207, 25211, 25217, 25221, 25227, 25231,
+    25237, 25243, 25247, 25253, 25257, 25261, 25265, 25269, 25273, 25277,
+    25283, 25286, 25290, 25294, 25300, 25304, 25310, 25314, 25320, 25324,
+    25330, 25334, 25340, 25344, 25350, 25354, 25360, 25366, 25370, 25376,
+    25380, 25386, 25392, 25396, 25400, 25404, 25408, 25412, 25416, 25422,
+    25425, 25429, 25433, 25439, 25443, 25449, 25453, 25459, 25465, 25469,
+    25474, 25478, 25482, 25486, 25490, 25494, 25498, 25502, 25508, 25511,
+    25515, 25519, 25525, 25529, 25535, 25539, 25545, 25549, 25555, 25559,
+    25565, 25569, 25575, 25579, 25585, 25588, 25593, 25598, 25602, 25606,
+    25610, 25614, 25618, 25622, 25628, 25631, 25635, 25639, 25645, 25649,
+    25655, 25659, 25665, 25669, 25675, 25679, 25685, 25689, 25695, 25699,
+    25705, 25711, 25715, 25721, 25725, 25731, 25737, 25743, 25749, 25755,
+    25761, 25767, 25773, 25777, 25781, 25785, 25789, 25793, 25797, 25801,
+    25805, 25811, 25815, 25821, 25825, 25831, 25835, 25841, 25845, 25851,
+    25855, 25861, 25865, 25871, 25875, 25879, 25883, 25887, 25891, 25895,
+    25899, 25905, 25908, 25912, 25916, 25922, 25926, 25932, 25936, 25942,
+    25946, 25952, 25956, 25962, 25966, 25972, 25976, 25982, 25988, 25992,
+    25998, 26004, 26010, 26014, 26020, 26026, 26030, 26034, 26038, 26042,
+    26046, 26052, 26055, 26059, 26064, 26068, 26074, 26077, 26082, 26087,
+    26091, 26095, 26099, 26103, 26107, 26111, 26115, 26119, 26123, 26129,
+    26133, 26137, 26143, 26147, 26153, 26157, 26163, 26167, 26171, 26175,
+    26179, 26183, 26189, 26193, 26197, 26201, 26205, 26209, 26213, 26217,
+    26221, 26225, 26229, 26235, 26241, 26247, 26253, 26259, 26264, 26270,
+    26276, 26282, 26286, 26290, 26294, 26298, 26302, 26306, 26310, 26314,
+    26318, 26322, 26326, 26330, 26334, 26340, 26346, 26352, 26357, 26361,
+    26365, 26369, 26373, 26377, 26381, 26385, 26389, 26393, 26399, 26405,
+    26411, 26417, 26423, 26429, 26435, 26441, 26447, 26451, 26455, 26459,
+    26463, 26467, 26471, 26475, 26481, 26487, 26493, 26499, 26505, 26511,
+    26517, 26523, 26529, 26534, 26539, 26544, 26549, 26555, 26561, 26567,
+    26573, 26579, 26585, 26591, 26596, 26602, 26608, 26614, 26619, 26625,
+    26631, 26637, 26642, 26647, 26652, 26657, 26662, 26667, 26672, 26677,
+    26682, 26687, 26692, 26697, 26701, 26706, 26711, 26716, 26721, 26726,
+    26731, 26736, 26741, 26746, 26751, 26756, 26761, 26766, 26771, 26776,
+    26781, 26786, 26791, 26796, 26801, 26806, 26811, 26816, 26821, 26826,
+    26831, 26836, 26841, 26846, 26850, 26855, 26860, 26865, 26870, 26875,
+    26880, 26885, 26890, 26895, 26900, 26905, 26910, 26915, 26920, 26925,
+    26930, 26935, 26940, 26945, 26950, 26955, 26960, 26965, 26970, 26975,
+    26979, 26984, 26989, 26994, 26999, 27004, 27008, 27013, 27018, 27023,
+    27028, 27033, 27037, 27042, 27048, 27053, 27058, 27063, 27068, 27074,
+    27079, 27084, 27089, 27094, 27099, 27104, 27109, 27114, 27119, 27124,
+    27129, 27134, 27138, 27143, 27148, 27153, 27158, 27163, 27168, 27173,
+    27178, 27183, 27188, 27193, 27198, 27203, 27208, 27213, 27218, 27223,
+    27228, 27233, 27238, 27243, 27248, 27253, 27258, 27263, 27268, 27273,
+    27278, 27283, 27288, 27293, 27299, 27304, 27309, 27314, 27319, 27324,
+    27329, 27334, 27339, 27344, 27349, 27354, 27358, 27363, 27368, 27373,
+    27378, 27383, 27388, 27393, 27398, 27403, 27408, 27413, 27418, 27423,
+    27428, 27433, 27438, 27443, 27448, 27453, 27458, 27463, 27468, 27473,
+    27478, 27483, 27488, 27494, 27498, 27502, 27506, 27510, 27514, 27518,
+    27522, 27526, 27532, 27538, 27544, 27550, 27556, 27562, 27568, 27575,
+    27581, 27586, 27591, 27596, 27601, 27606, 27611, 27616, 27621, 27626,
+    27631, 27636, 27641, 27646, 27651, 27656, 27661, 27666, 27671, 27676,
+    27681, 27686, 27691, 27696, 27701, 27706, 27711, 27716, 27721, 0, 0, 0,
+    27728, 27739, 27744, 27752, 27757, 27762, 27767, 27776, 27781, 27787,
+    27793, 27799, 27804, 27810, 27816, 27820, 27825, 27830, 27840, 27845,
+    27850, 27857, 27862, 27867, 27876, 27881, 27890, 27897, 27904, 27911,
+    27918, 27929, 27936, 27941, 27951, 27955, 27962, 27967, 27974, 27980,
+    27987, 27996, 28003, 28010, 28019, 28026, 28031, 28036, 28047, 28054,
+    28059, 28070, 28077, 28082, 28087, 28095, 28104, 28111, 28118, 28128,
+    28133, 28138, 28143, 28152, 28160, 28165, 28170, 28175, 28180, 28185,
+    28190, 28195, 28200, 28205, 28210, 28215, 28221, 28227, 28233, 28238,
+    28243, 28248, 28253, 28258, 28263, 28272, 28281, 28290, 28299, 0, 0, 0,
+    0, 0, 0, 0, 28308, 28312, 28316, 28320, 28324, 28329, 28334, 28338,
+    28343, 28347, 28351, 28356, 28360, 0, 28364, 28368, 28373, 28377, 28381,
+    28386, 28391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28396, 28400, 28404,
+    28408, 28412, 28417, 28422, 28426, 28431, 28435, 28439, 28444, 28448,
+    28452, 28456, 28460, 28465, 28469, 28473, 28478, 28483, 28488, 28494, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 28499, 28503, 28507, 28511, 28515, 28520, 28525,
+    28529, 28534, 28538, 28542, 28547, 28551, 28555, 28559, 28563, 28568,
+    28572, 28576, 28581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28586, 28590,
+    28594, 28598, 28602, 28607, 28612, 28616, 28621, 28625, 28629, 28634,
+    28638, 0, 28642, 28646, 28651, 0, 28655, 28660, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 28665, 28668, 28672, 28676, 28680, 28684, 28688, 28692,
+    28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, 28727, 28731,
+    28734, 28738, 28742, 28746, 28750, 28754, 28758, 28762, 28766, 28770,
+    28774, 28778, 28782, 28786, 28789, 28792, 28795, 28799, 28805, 28811,
+    28817, 28823, 28829, 28835, 28841, 28847, 28853, 28859, 28865, 28871,
+    28877, 28883, 28892, 28901, 28907, 28913, 28919, 28924, 28928, 28933,
+    28938, 28943, 28947, 28952, 28957, 28962, 28966, 28971, 28975, 28980,
+    28985, 28990, 28995, 28999, 29003, 29007, 29011, 29015, 29019, 29023,
+    29027, 29031, 29035, 29041, 29045, 29049, 29053, 29057, 29061, 29069,
+    29075, 29079, 29085, 29089, 29095, 29099, 0, 0, 29103, 29107, 29110,
+    29113, 29116, 29119, 29122, 29125, 29128, 29131, 0, 0, 0, 0, 0, 0, 29134,
+    29142, 29150, 29158, 29166, 29174, 29182, 29190, 29198, 29206, 0, 0, 0,
+    0, 0, 0, 29214, 29217, 29220, 29223, 29228, 29231, 29236, 29243, 29251,
+    29256, 29263, 29266, 29273, 29280, 29287, 0, 29291, 29295, 29298, 29301,
+    29304, 29307, 29310, 29313, 29316, 29319, 0, 0, 0, 0, 0, 0, 29322, 29325,
+    29328, 29331, 29334, 29337, 29341, 29345, 29349, 29352, 29356, 29360,
+    29363, 29367, 29371, 29374, 29377, 29380, 29384, 29387, 29391, 29395,
+    29399, 29402, 29405, 29409, 29413, 29416, 29420, 29424, 29428, 29432,
+    29436, 29440, 29444, 29448, 29455, 29460, 29465, 29470, 29475, 29481,
+    29487, 29493, 29499, 29504, 29510, 29516, 29521, 29526, 29532, 29538,
+    29544, 29550, 29555, 29561, 29566, 29572, 29578, 29584, 29590, 29596,
+    29601, 29606, 29612, 29618, 29623, 29629, 29634, 29640, 29645, 29650,
+    29656, 29661, 29667, 29673, 29679, 29685, 29691, 29697, 29703, 29709,
+    29715, 29721, 29726, 29731, 29736, 29742, 29748, 0, 0, 0, 0, 0, 0, 0,
+    29756, 29765, 29774, 29782, 29790, 29800, 29808, 29817, 29824, 29831,
+    29838, 29846, 29854, 29862, 29870, 29878, 29886, 29893, 29901, 29908,
+    29916, 29924, 29932, 29940, 29948, 29957, 29967, 29977, 29987, 29997,
+    30007, 30017, 30027, 30036, 30046, 30056, 30066, 30076, 30086, 30094,
+    30102, 30112, 30120, 0, 0, 0, 0, 0, 30130, 30134, 30138, 30142, 30146,
+    30150, 30154, 30158, 30162, 30166, 30170, 30174, 30178, 30182, 30186,
+    30190, 30194, 30198, 30202, 30206, 30210, 30214, 30218, 30222, 30228,
+    30232, 30238, 30242, 30248, 30252, 30258, 30262, 30266, 30270, 30274,
+    30278, 30282, 30288, 30294, 30300, 30306, 30312, 30318, 30324, 30330,
+    30336, 30342, 30348, 30355, 30361, 30367, 30373, 30377, 30381, 30385,
+    30389, 30393, 30397, 30401, 30407, 30413, 30419, 30424, 30431, 30436,
+    30441, 30447, 30452, 30459, 30466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30473,
+    30479, 30483, 30488, 30493, 30498, 30503, 30508, 30513, 30518, 30523,
+    30528, 30532, 30537, 30542, 30547, 30551, 30555, 30560, 30565, 30570,
+    30574, 30578, 30582, 30586, 30591, 30596, 30601, 30605, 30609, 30614, 0,
+    30619, 30624, 30629, 30634, 30640, 30646, 30652, 30658, 30663, 30668,
+    30674, 30680, 0, 0, 0, 0, 30687, 30692, 30698, 30704, 30709, 30714,
+    30719, 30724, 30729, 30734, 30739, 30744, 0, 0, 0, 0, 30749, 0, 0, 0,
+    30754, 30759, 30764, 30769, 30773, 30777, 30781, 30785, 30789, 30793,
+    30797, 30801, 30805, 30810, 30816, 30822, 30828, 30833, 30838, 30843,
+    30849, 30854, 30859, 30865, 30870, 30876, 30882, 30887, 30893, 30899,
+    30905, 30910, 30915, 30920, 30926, 30932, 30937, 30943, 30948, 30954,
+    30959, 30965, 0, 0, 30971, 30977, 30983, 30989, 30995, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 31001, 31010, 31019, 31027, 31036, 31045, 31053, 31062,
+    31071, 31080, 31088, 31096, 31105, 31113, 31121, 31129, 31138, 31146,
+    31154, 31163, 31171, 31179, 31188, 31196, 31204, 31213, 31221, 31230,
+    31239, 31247, 31256, 31265, 31273, 31281, 31290, 31299, 31307, 31316,
+    31325, 31334, 31343, 31352, 31361, 31370, 0, 0, 0, 0, 31379, 31389,
+    31398, 31407, 31415, 31424, 31432, 31441, 31449, 31458, 31467, 31476,
+    31485, 31494, 31503, 31512, 31521, 31530, 31539, 31548, 31557, 31566,
+    31575, 31584, 31593, 31601, 0, 0, 0, 0, 0, 0, 31609, 31617, 31624, 31631,
+    31638, 31645, 31652, 31659, 31666, 31673, 31680, 0, 0, 0, 31688, 31696,
+    31704, 31708, 31714, 31720, 31726, 31732, 31738, 31744, 31750, 31756,
+    31762, 31768, 31774, 31780, 31786, 31792, 31798, 31802, 31808, 31814,
+    31820, 31826, 31832, 31838, 31844, 31850, 31856, 31862, 31868, 31874,
+    31880, 31886, 31892, 31896, 31901, 31906, 31911, 31915, 31920, 31924,
+    31929, 31933, 31938, 31942, 31947, 31952, 31957, 31962, 31967, 31971,
+    31975, 31979, 31984, 31988, 31992, 31996, 32001, 32006, 32011, 32016, 0,
+    0, 32022, 32026, 32033, 32038, 32044, 32050, 32055, 32061, 32067, 32072,
+    32078, 32084, 32090, 32095, 32101, 32106, 32111, 32117, 32122, 32128,
+    32133, 32138, 32144, 32149, 32155, 32159, 32164, 32169, 32175, 32181,
+    32186, 32192, 32198, 32202, 32207, 32212, 32216, 32221, 32225, 32230,
+    32235, 32241, 32247, 32252, 32257, 32262, 32266, 32271, 32275, 32280,
+    32284, 32289, 32294, 32299, 32304, 32310, 32317, 32324, 32334, 32343,
+    32350, 32356, 32367, 32372, 32378, 0, 32383, 32388, 32393, 32401, 32407,
+    32415, 32420, 32426, 32432, 32438, 32443, 32449, 32454, 32461, 32467,
+    32472, 32478, 32484, 32490, 32497, 32504, 32511, 32516, 32521, 32528,
+    32535, 32542, 32549, 32556, 0, 0, 32563, 32570, 32577, 32583, 32589,
+    32595, 32601, 32607, 32613, 32619, 32625, 0, 0, 0, 0, 0, 0, 32631, 32637,
+    32642, 32647, 32652, 32657, 32662, 32667, 32672, 32677, 0, 0, 0, 0, 0, 0,
+    32682, 32687, 32692, 32697, 32702, 32707, 32712, 32721, 32728, 32733,
+    32738, 32743, 32748, 32753, 0, 0, 32758, 32765, 32768, 32771, 32775,
+    32780, 32784, 32790, 32795, 32801, 32808, 32816, 32820, 32825, 32829,
+    32834, 32841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32849, 32855,
+    32861, 32865, 32869, 32873, 32877, 32883, 32887, 32893, 32897, 32903,
+    32909, 32917, 32923, 32931, 32935, 32939, 32943, 32949, 32952, 32958,
+    32962, 32968, 32972, 32976, 32982, 32986, 32992, 32996, 33002, 33010,
+    33018, 33026, 33032, 33035, 33041, 33045, 33051, 33054, 33057, 33063,
+    33067, 33073, 33076, 33079, 33082, 33085, 33089, 33095, 33101, 33104,
+    33107, 33111, 33116, 33121, 33128, 33133, 33140, 33147, 33156, 33163,
+    33172, 33177, 33184, 33191, 33200, 33205, 33212, 33217, 33223, 33229,
+    33235, 33241, 33247, 33253, 0, 0, 0, 0, 33259, 33263, 33266, 33269,
+    33272, 33275, 33278, 33281, 33284, 33287, 33290, 33293, 33296, 33299,
+    33304, 33309, 33314, 33317, 33322, 33327, 33332, 33337, 33344, 33349,
+    33354, 33359, 33364, 33371, 33377, 33383, 33389, 33395, 33401, 33410,
+    33419, 33425, 33431, 33440, 33449, 33458, 33467, 33476, 33485, 33494,
+    33503, 0, 0, 0, 33512, 33517, 33522, 33527, 33531, 33535, 33539, 33544,
+    33548, 33552, 33557, 33561, 33566, 33571, 33576, 33581, 33586, 33591,
+    33596, 33600, 33605, 33609, 33613, 33618, 33623, 33628, 33632, 33636,
+    33640, 33644, 33649, 33653, 33658, 33662, 33668, 33674, 33680, 33686,
+    33692, 33698, 33704, 33710, 33716, 33721, 33726, 33733, 33741, 33746,
+    33751, 33756, 33760, 33764, 33768, 33772, 33776, 33780, 33784, 33788,
+    33792, 33796, 33801, 33806, 33811, 33817, 33823, 33827, 33833, 33837,
+    33843, 33849, 33854, 33861, 33865, 33871, 33875, 33881, 33886, 33893,
+    33900, 33905, 33912, 33917, 33922, 33926, 33932, 33936, 33942, 33948,
+    33954, 33958, 33964, 33970, 33974, 33980, 33985, 33989, 33995, 34000,
+    34005, 34010, 34015, 34019, 34023, 34028, 34033, 34040, 34046, 34051,
+    34058, 34063, 34070, 34075, 34084, 34090, 34096, 34100, 0, 0, 0, 0, 0, 0,
+    0, 0, 34104, 34113, 34120, 34127, 34134, 34138, 34143, 34148, 34153,
+    34158, 34163, 34168, 34173, 34178, 34183, 34187, 34192, 34197, 34201,
+    34205, 34210, 34215, 34220, 34225, 34230, 34235, 34239, 34244, 34249,
+    34254, 34259, 34263, 34267, 34271, 34275, 34280, 34285, 34289, 34294,
+    34299, 34303, 34309, 34315, 34321, 34326, 34331, 34337, 34342, 34348,
+    34353, 34359, 34365, 34370, 34376, 34382, 34387, 34393, 34399, 34405,
+    34410, 0, 0, 0, 34415, 34421, 34431, 34437, 34445, 34451, 34456, 34460,
+    34464, 34468, 34472, 34476, 34480, 34484, 34488, 0, 0, 0, 34492, 34497,
+    34502, 34507, 34514, 34520, 34526, 34532, 34538, 34544, 34550, 34556,
+    34562, 34568, 34574, 34581, 34588, 34595, 34602, 34609, 34616, 34623,
+    34630, 34637, 34644, 34651, 34658, 34665, 34672, 34679, 34686, 34693,
+    34700, 34707, 34714, 34721, 34728, 34735, 34742, 34749, 34756, 34763,
+    34770, 34777, 34785, 34793, 34801, 34807, 34813, 34819, 34827, 34836,
+    34843, 34850, 34856, 34863, 34870, 34877, 34885, 34892, 0, 0, 0, 0, 0, 0,
+    0, 34899, 34906, 34913, 34920, 34927, 34934, 34941, 34948, 34955, 34962,
+    34969, 34976, 34983, 34990, 34997, 35004, 35011, 35018, 35025, 35032,
+    35039, 35046, 35053, 35060, 35067, 35074, 35081, 35088, 35095, 35102,
+    35109, 35116, 35123, 35130, 35137, 35144, 35151, 35158, 35165, 35172,
+    35179, 35186, 35194, 0, 0, 35201, 35208, 35216, 35224, 35232, 35240,
+    35248, 35256, 35266, 35276, 35286, 0, 0, 0, 0, 0, 0, 0, 0, 35296, 35301,
+    35306, 35311, 35316, 35325, 35336, 35345, 35356, 35362, 35375, 35381,
+    35388, 35395, 35400, 35407, 35414, 35425, 35434, 35441, 35448, 35457,
+    35464, 35473, 35483, 35493, 35500, 35507, 35514, 35524, 35529, 35537,
+    35543, 35551, 35560, 35565, 35572, 35578, 35583, 35588, 35593, 35599,
+    35606, 0, 0, 0, 0, 0, 35614, 35619, 35625, 35631, 35639, 35645, 35651,
+    35657, 35662, 35669, 35674, 35680, 35686, 35694, 35700, 35708, 35713,
+    35720, 35726, 35734, 35742, 35748, 35754, 35761, 35768, 35774, 35781,
+    35787, 35793, 35798, 35804, 35812, 35820, 35826, 35832, 35838, 35844,
+    35852, 35856, 35862, 35868, 35874, 35880, 35886, 35892, 35896, 35901,
+    35906, 35913, 35918, 35922, 35928, 35933, 35938, 35942, 35947, 35952,
+    35956, 35961, 35966, 35973, 35977, 35982, 35987, 35991, 35996, 36000,
+    36005, 36009, 36014, 36019, 36025, 36030, 36035, 36039, 36044, 36050,
+    36057, 36062, 36067, 36072, 36077, 36082, 36086, 36092, 36099, 36106,
+    36111, 36116, 36120, 36126, 36132, 36137, 36142, 36147, 36153, 36158,
+    36164, 36169, 36175, 36181, 36187, 36194, 36201, 36208, 36215, 36222,
+    36229, 36234, 36242, 36251, 36260, 36269, 36278, 36287, 36296, 36308,
+    36317, 36326, 36335, 36341, 36346, 36353, 36361, 36369, 36376, 36383,
+    36390, 36397, 36405, 36414, 36423, 36432, 36441, 36450, 36459, 36468,
+    36477, 36486, 36495, 36504, 36513, 36522, 36531, 36539, 36548, 36559,
+    36568, 36579, 36592, 36601, 36610, 36620, 36629, 36637, 36646, 36652,
+    36657, 36665, 36670, 36678, 36683, 36692, 36698, 36704, 36711, 36716,
+    36721, 36729, 36737, 36746, 36755, 36760, 36767, 36777, 36785, 36794,
+    36800, 36806, 36811, 36818, 36823, 36832, 36837, 36842, 36847, 36854,
+    36860, 36865, 36874, 36882, 36887, 36892, 36899, 36906, 36910, 36914,
+    36917, 36920, 36923, 36926, 36929, 36932, 36939, 36942, 36945, 36950,
+    36954, 36958, 36962, 36966, 36970, 36980, 36986, 36992, 36998, 37006,
+    37014, 37020, 37026, 37033, 37039, 37044, 37050, 37057, 37063, 37070,
+    37076, 37084, 37090, 37097, 37103, 37109, 37115, 37121, 37127, 37133,
+    37144, 37154, 37160, 37166, 37176, 37182, 37190, 37198, 37206, 37211,
+    37217, 37223, 37228, 0, 37236, 37240, 37247, 37253, 37258, 37267, 37275,
+    37283, 37290, 37297, 37304, 37311, 37319, 37327, 37338, 37349, 37357,
+    37365, 37373, 37381, 37390, 37399, 37407, 37415, 37424, 37433, 37444,
+    37455, 37466, 37477, 37486, 37495, 37504, 37513, 37524, 37535, 37543,
+    37551, 37559, 37567, 37575, 37583, 37591, 37599, 37607, 37615, 37623,
+    37631, 37640, 37649, 37658, 37667, 37678, 37689, 37697, 37705, 37713,
+    37721, 37730, 37739, 37747, 37755, 37767, 37779, 37788, 37797, 37806,
+    37815, 37823, 37831, 37839, 37847, 37855, 37863, 37871, 37879, 37887,
+    37895, 37904, 37913, 37922, 37931, 37941, 37951, 37961, 37971, 37981,
+    37991, 38001, 38011, 38019, 38027, 38035, 38043, 38051, 38059, 38067,
+    38075, 38087, 38099, 38108, 38117, 38125, 38133, 38141, 38149, 38160,
+    38171, 38182, 38193, 38205, 38217, 38225, 38233, 38241, 38249, 38258,
+    38267, 38276, 38285, 38293, 38301, 38309, 38317, 38325, 38333, 38343,
+    38353, 38363, 38373, 38381, 38389, 38397, 38405, 38413, 38421, 38429,
+    38437, 38445, 38453, 38461, 38469, 38477, 38485, 38493, 38501, 38509,
+    38517, 38525, 38533, 38541, 38549, 38557, 38565, 38574, 38583, 38592,
+    38600, 38609, 38618, 38627, 38636, 38646, 38655, 38662, 38667, 38674,
+    38681, 38689, 38697, 38707, 38717, 38727, 38737, 38748, 38759, 38769,
+    38779, 38789, 38799, 38809, 38819, 38829, 38839, 38850, 38861, 38871,
+    38881, 38891, 38901, 38909, 38917, 38926, 38935, 38943, 38951, 38962,
+    38973, 38984, 38995, 39007, 39019, 39030, 39041, 39052, 39063, 39072,
+    39081, 39089, 39097, 39104, 39111, 39119, 39127, 39137, 39147, 39157,
+    39167, 39178, 39189, 39199, 39209, 39219, 39229, 39239, 39249, 39259,
+    39269, 39280, 39291, 39301, 39311, 39321, 39331, 39338, 39345, 39353,
+    39361, 39371, 39381, 39391, 39401, 39412, 39423, 39433, 39443, 39453,
+    39463, 39471, 39479, 39487, 39495, 39504, 39513, 39521, 39529, 39536,
+    39543, 39550, 39557, 39565, 39573, 39581, 39589, 39600, 39611, 39622,
+    39633, 39644, 39655, 39663, 39671, 39682, 39693, 39704, 39715, 39726,
+    39737, 39745, 39753, 39764, 39775, 39786, 0, 0, 39797, 39805, 39813,
+    39824, 39835, 39846, 0, 0, 39857, 39865, 39873, 39884, 39895, 39906,
+    39917, 39928, 39939, 39947, 39955, 39966, 39977, 39988, 39999, 40010,
+    40021, 40029, 40037, 40048, 40059, 40070, 40081, 40092, 40103, 40111,
+    40119, 40130, 40141, 40152, 40163, 40174, 40185, 40193, 40201, 40212,
+    40223, 40234, 0, 0, 40245, 40253, 40261, 40272, 40283, 40294, 0, 0,
+    40305, 40313, 40321, 40332, 40343, 40354, 40365, 40376, 0, 40387, 0,
+    40395, 0, 40406, 0, 40417, 40428, 40436, 40444, 40455, 40466, 40477,
+    40488, 40499, 40510, 40518, 40526, 40537, 40548, 40559, 40570, 40581,
+    40592, 40600, 40608, 40616, 40624, 40632, 40640, 40648, 40656, 40664,
+    40672, 40680, 40688, 40696, 0, 0, 40704, 40715, 40726, 40740, 40754,
+    40768, 40782, 40796, 40810, 40821, 40832, 40846, 40860, 40874, 40888,
+    40902, 40916, 40927, 40938, 40952, 40966, 40980, 40994, 41008, 41022,
+    41033, 41044, 41058, 41072, 41086, 41100, 41114, 41128, 41139, 41150,
+    41164, 41178, 41192, 41206, 41220, 41234, 41245, 41256, 41270, 41284,
+    41298, 41312, 41326, 41340, 41348, 41356, 41367, 41375, 0, 41386, 41394,
+    41405, 41413, 41421, 41429, 41437, 41445, 41448, 41451, 41454, 41457,
+    41463, 41474, 41482, 0, 41493, 41501, 41512, 41520, 41528, 41536, 41544,
+    41552, 41558, 41564, 41570, 41578, 41586, 41597, 0, 0, 41608, 41616,
+    41627, 41635, 41643, 41651, 0, 41659, 41665, 41671, 41677, 41685, 41693,
+    41704, 41715, 41723, 41731, 41739, 41750, 41758, 41766, 41774, 41782,
+    41790, 41796, 41802, 0, 0, 41805, 41816, 41824, 0, 41835, 41843, 41854,
+    41862, 41870, 41878, 41886, 41894, 41897, 0, 41900, 41904, 41908, 41912,
+    41916, 41920, 41924, 41928, 41932, 41936, 41940, 41944, 41950, 41956,
+    41962, 41965, 41968, 41970, 41974, 41978, 41982, 41986, 41989, 41993,
+    41997, 42003, 42009, 42016, 42023, 42028, 42033, 42039, 42045, 42047,
+    42050, 42052, 42056, 42060, 42064, 42068, 42072, 42076, 42080, 42084,
+    42088, 42094, 42098, 42102, 42108, 42113, 42120, 42122, 42125, 42129,
+    42133, 42138, 42144, 42146, 42155, 42164, 42167, 42171, 42173, 42175,
+    42177, 42181, 42187, 42189, 42193, 42197, 42204, 42211, 42215, 42220,
+    42225, 42230, 42235, 42239, 42243, 42246, 42250, 42254, 42261, 42266,
+    42270, 42274, 42279, 42283, 42287, 42292, 42297, 42301, 42305, 42309,
+    42311, 42316, 42321, 42325, 42329, 42333, 42337, 0, 42341, 42345, 42349,
+    42355, 42361, 42367, 42373, 42380, 42387, 42392, 42397, 42401, 0, 0,
+    42407, 42410, 42413, 42416, 42419, 42422, 42425, 42429, 42433, 42438,
+    42443, 42448, 42455, 42459, 42462, 42465, 42468, 42471, 42474, 42477,
+    42480, 42483, 42486, 42490, 42494, 42499, 42504, 0, 42509, 42515, 42521,
+    42527, 42534, 42541, 42548, 42555, 42561, 42568, 42575, 42582, 42589, 0,
+    0, 0, 42596, 42599, 42602, 42605, 42610, 42613, 42616, 42619, 42622,
+    42625, 42628, 42633, 42636, 42639, 42642, 42645, 42648, 42653, 42656,
+    42659, 42662, 42665, 42668, 42673, 42676, 42679, 42684, 42689, 42693,
+    42696, 42699, 42702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    42705, 42710, 42715, 42722, 42730, 42735, 42740, 42744, 42748, 42753,
+    42760, 42767, 42772, 42778, 42783, 42788, 42793, 42800, 42805, 42810,
+    42815, 42824, 42831, 42838, 42842, 42847, 42853, 42858, 42865, 42873,
+    42881, 42885, 42889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42893,
+    42897, 42904, 42909, 42913, 42918, 42922, 42926, 42930, 42932, 42936,
+    42940, 42944, 42949, 42954, 42958, 42966, 42969, 42973, 42976, 42979,
+    42985, 42990, 42993, 42999, 43003, 43008, 43013, 43016, 43020, 43024,
+    43028, 43030, 43033, 43036, 43040, 43042, 43047, 43050, 43053, 43058,
+    43063, 43069, 43072, 43075, 43079, 43084, 43087, 43090, 43093, 43097,
+    43101, 43105, 43108, 43110, 43113, 43116, 43119, 43123, 43128, 43131,
+    43136, 43141, 43146, 43151, 43157, 43162, 43166, 43171, 43176, 43182,
+    43188, 43193, 43198, 43204, 43208, 43211, 43214, 43216, 43220, 43226,
+    43233, 43240, 43247, 43254, 43261, 43268, 43275, 43282, 43290, 43297,
+    43305, 43312, 43319, 43327, 43335, 43340, 43345, 43350, 43355, 43360,
+    43365, 43370, 43375, 43380, 43385, 43391, 43397, 43403, 43409, 43416,
+    43424, 43430, 43436, 43442, 43448, 43454, 43460, 43466, 43472, 43478,
+    43484, 43491, 43498, 43505, 43512, 43520, 43529, 43536, 43547, 43554,
+    43561, 43570, 43577, 43586, 43595, 43602, 43610, 43618, 43621, 0, 0, 0,
+    0, 43624, 43626, 43629, 43631, 43634, 43637, 43640, 43644, 43648, 43653,
+    43658, 43662, 43666, 43670, 43674, 43679, 43685, 43690, 43696, 43701,
+    43706, 43711, 43717, 43722, 43728, 43734, 43738, 43742, 43747, 43752,
+    43757, 43762, 43767, 43775, 43783, 43791, 43799, 43806, 43814, 43821,
+    43828, 43835, 43845, 43852, 43859, 43866, 43873, 43881, 43889, 43896,
+    43903, 43911, 43919, 43924, 43932, 43937, 43942, 43948, 43953, 43959,
+    43966, 43973, 43978, 43984, 43989, 43992, 43996, 43999, 44003, 44007,
+    44011, 44016, 44021, 44027, 44033, 44037, 44041, 44045, 44049, 44055,
+    44061, 44065, 44070, 44074, 44079, 44083, 44087, 44090, 44094, 44097,
+    44101, 44108, 44116, 44128, 44139, 44144, 44153, 44160, 44167, 44175,
+    44179, 44185, 44193, 44197, 44202, 44207, 44213, 44219, 44225, 44232,
+    44236, 44240, 44245, 44248, 44250, 44254, 44258, 44266, 44270, 44272,
+    44274, 44278, 44286, 44291, 44297, 44307, 44314, 44319, 44323, 44327,
+    44331, 44334, 44337, 44340, 44344, 44348, 44352, 44356, 44360, 44363,
+    44367, 44371, 44374, 44376, 44379, 44381, 44385, 44389, 44391, 44397,
+    44400, 44405, 44409, 44413, 44415, 44417, 44419, 44422, 44426, 44430,
+    44434, 44438, 44442, 44448, 44454, 44456, 44458, 44460, 44462, 44465,
+    44467, 44471, 44473, 44477, 44481, 44487, 44491, 44495, 44499, 44503,
+    44507, 44513, 44517, 44527, 44537, 44541, 44547, 44554, 44558, 44562,
+    44565, 44570, 44574, 44580, 44584, 44596, 44605, 44609, 44613, 44619,
+    44623, 44626, 44628, 44631, 44635, 44639, 44645, 44649, 44653, 44657,
+    44660, 44665, 44670, 44676, 44682, 44687, 44692, 44700, 44708, 44712,
+    44716, 44718, 44723, 44727, 44731, 44739, 44747, 44754, 44761, 44770,
+    44779, 44785, 44791, 44799, 44807, 44809, 44811, 44817, 44823, 44830,
+    44837, 44843, 44849, 44853, 44857, 44864, 44871, 44878, 44885, 44895,
+    44905, 44913, 44921, 44923, 44927, 44931, 44936, 44941, 44949, 44957,
+    44960, 44963, 44966, 44969, 44972, 44977, 44981, 44986, 44991, 44994,
+    44997, 45000, 45003, 45006, 45010, 45013, 45016, 45019, 45022, 45024,
+    45026, 45028, 45030, 45038, 45046, 45052, 45056, 45062, 45072, 45078,
+    45084, 45090, 45098, 45107, 45119, 45123, 45127, 45129, 45135, 45137,
+    45139, 45141, 45143, 45149, 45152, 45158, 45164, 45168, 45172, 45176,
+    45179, 45183, 45187, 45189, 45198, 45207, 45212, 45217, 45223, 45229,
+    45235, 45238, 45241, 45244, 45247, 45249, 45254, 45259, 45264, 45270,
+    45276, 45284, 45292, 45298, 45304, 45310, 45316, 45326, 45336, 45346,
+    45356, 45366, 45376, 45385, 45394, 45403, 45412, 45420, 45432, 45443,
+    45459, 45462, 45468, 45474, 45480, 45488, 45503, 45519, 45525, 45531,
+    45538, 45544, 45553, 45560, 45574, 45589, 45594, 45600, 45608, 45611,
+    45614, 45616, 45619, 45622, 45624, 45626, 45630, 45633, 45636, 45639,
+    45642, 45647, 45652, 45657, 45662, 45667, 45670, 45672, 45674, 45676,
+    45680, 45684, 45688, 45694, 45698, 45700, 45702, 45707, 45712, 45717,
+    45722, 45727, 45732, 45734, 45736, 45746, 45750, 45757, 45766, 45768,
+    45773, 45778, 45785, 45789, 45791, 45795, 45797, 45801, 45805, 45809,
+    45811, 45813, 45815, 45822, 45831, 45840, 45849, 45858, 45867, 45876,
+    45885, 45894, 45902, 45910, 45919, 45928, 45937, 45946, 45954, 45962,
+    45971, 45980, 45989, 45999, 46008, 46018, 46027, 46037, 46046, 46056,
+    46066, 46075, 46085, 46094, 46104, 46113, 46123, 46132, 46141, 46150,
+    46159, 46168, 46178, 46187, 46196, 46205, 46215, 46224, 46233, 46242,
+    46251, 46261, 46271, 46280, 46289, 46297, 46306, 46313, 46322, 46331,
+    46342, 46351, 46361, 46371, 46378, 46385, 46392, 46401, 46410, 46419,
+    46428, 46435, 46440, 46449, 46455, 46458, 46465, 46468, 46473, 46478,
+    46481, 46484, 46492, 46495, 46500, 46503, 46511, 46516, 46524, 46527,
+    46530, 46533, 46538, 46543, 46546, 46549, 46557, 46560, 46567, 46574,
+    46578, 46582, 46587, 46592, 46597, 46602, 46607, 46612, 46617, 46622,
+    46629, 46635, 46642, 46649, 46655, 46662, 46669, 46677, 46684, 46690,
+    46697, 46705, 46712, 46716, 46722, 46734, 46746, 46750, 46754, 46758,
+    46762, 46772, 46776, 46781, 46786, 46792, 46798, 46804, 46810, 46820,
+    46830, 46838, 46849, 46860, 46868, 46879, 46890, 46898, 46909, 46920,
+    46928, 46936, 46946, 46956, 46959, 46962, 46965, 46970, 46974, 46980,
+    46987, 46994, 47002, 47009, 47013, 47017, 47021, 47025, 47027, 47031,
+    47035, 47040, 47045, 47052, 47059, 47062, 47069, 47071, 47073, 47077,
+    47081, 47086, 47092, 47098, 47104, 47110, 47119, 47128, 47137, 47141,
+    47143, 47147, 47154, 47161, 47168, 47175, 47182, 47185, 47190, 47196,
+    47199, 47204, 47209, 47214, 47219, 47223, 47230, 47237, 47244, 47251,
+    47255, 47259, 47263, 47267, 47273, 47279, 47284, 47290, 47296, 47302,
+    47308, 47316, 47323, 47330, 47337, 47344, 47350, 47356, 47365, 47369,
+    47376, 47380, 47384, 47390, 47396, 47402, 47408, 47412, 47416, 47419,
+    47423, 47427, 47434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 47441, 47444, 47448, 47452, 47458, 47464, 47470,
+    47478, 47485, 47489, 47497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 47502, 47505, 47508, 47511, 47514, 47517, 47520, 47523,
+    47526, 47529, 47533, 47537, 47541, 47545, 47549, 47553, 47557, 47561,
+    47565, 47569, 47573, 47576, 47579, 47582, 47585, 47588, 47591, 47594,
+    47597, 47600, 47604, 47608, 47612, 47616, 47620, 47624, 47628, 47632,
+    47636, 47640, 47644, 47650, 47656, 47662, 47669, 47676, 47683, 47690,
+    47697, 47704, 47711, 47718, 47725, 47732, 47739, 47746, 47753, 47760,
+    47767, 47774, 47781, 47786, 47792, 47798, 47804, 47809, 47815, 47821,
+    47827, 47832, 47838, 47844, 47849, 47855, 47861, 47866, 47872, 47878,
+    47883, 47889, 47895, 47900, 47906, 47912, 47918, 47924, 47930, 47935,
+    47941, 47947, 47953, 47958, 47964, 47970, 47976, 47981, 47987, 47993,
+    47998, 48004, 48010, 48015, 48021, 48027, 48032, 48038, 48044, 48049,
+    48055, 48061, 48067, 48073, 48079, 48084, 48090, 48096, 48102, 48107,
+    48113, 48119, 48125, 48130, 48136, 48142, 48147, 48153, 48159, 48164,
+    48170, 48176, 48181, 48187, 48193, 48198, 48204, 48210, 48216, 48222,
+    48228, 48232, 48238, 48244, 48250, 48256, 48262, 48268, 48274, 48280,
+    48286, 48292, 48296, 48300, 48304, 48308, 48312, 48316, 48320, 48324,
+    48328, 48333, 48339, 48344, 48349, 48354, 48359, 48368, 48377, 48386,
+    48395, 48404, 48413, 48422, 48431, 48438, 48446, 48454, 48461, 48468,
+    48476, 48484, 48491, 48498, 48506, 48514, 48521, 48528, 48536, 48544,
+    48551, 48558, 48566, 48575, 48584, 48592, 48601, 48610, 48617, 48624,
+    48632, 48641, 48650, 48658, 48667, 48676, 48683, 48690, 48699, 48708,
+    48717, 48726, 48735, 48744, 48751, 48758, 48767, 48776, 48785, 48794,
+    48803, 48812, 48819, 48826, 48835, 48844, 48853, 48863, 48873, 48882,
+    48892, 48902, 48912, 48922, 48932, 48942, 48951, 48960, 48967, 48975,
+    48983, 48991, 48999, 49004, 49009, 49018, 49026, 49033, 49042, 49050,
+    49057, 49066, 49074, 49081, 49090, 49098, 49105, 49114, 49122, 49129,
+    49138, 49146, 49153, 49163, 49172, 49179, 49189, 49198, 49205, 49215,
+    49224, 49231, 49240, 49249, 49258, 49267, 49278, 49289, 49296, 49301,
+    49306, 49311, 49316, 49321, 49326, 49331, 49336, 49344, 49352, 49360,
+    49368, 49372, 49378, 49384, 49390, 49394, 49401, 49407, 49414, 49418,
+    49425, 49431, 49438, 49442, 49448, 49454, 49460, 49464, 49467, 49471,
+    49475, 49481, 49487, 49492, 49497, 49502, 49513, 49521, 49532, 49543,
+    49548, 49556, 49567, 49570, 49573, 49580, 49588, 49594, 49599, 49607,
+    49616, 49625, 49633, 49637, 49641, 49644, 49647, 49651, 49655, 49658,
+    49661, 49666, 49671, 49677, 49683, 49688, 49693, 49699, 49705, 49710,
+    49715, 49720, 49725, 49731, 49737, 49742, 49747, 49753, 49759, 49764,
+    49769, 49772, 49775, 49784, 49786, 49788, 49791, 49795, 49801, 49803,
+    49806, 49813, 49820, 49827, 49834, 49843, 49856, 49861, 49866, 49870,
+    49875, 49882, 49889, 49897, 49905, 49913, 49921, 49925, 49929, 49934,
+    49939, 49944, 49949, 49952, 49958, 49964, 49973, 49982, 49990, 49998,
+    50007, 50016, 50020, 50027, 50034, 50041, 50048, 50056, 50064, 50072,
+    50080, 50084, 50088, 50092, 50097, 50102, 50108, 50114, 50118, 50124,
+    50126, 50128, 50130, 50132, 50135, 50138, 50140, 50142, 50144, 50148,
+    50152, 50154, 50156, 50159, 50162, 50166, 50172, 50178, 50180, 50187,
+    50191, 50196, 50201, 50203, 50213, 50219, 50225, 50231, 50237, 50243,
+    50249, 50254, 50257, 50260, 50263, 50265, 50267, 50271, 50275, 50280,
+    50285, 50290, 50293, 50297, 50302, 50305, 50309, 50314, 50319, 50324,
+    50329, 50334, 50339, 50344, 50349, 50354, 50359, 50364, 50369, 50375,
+    50381, 50387, 50389, 50392, 50394, 50397, 50399, 50401, 50403, 50405,
+    50407, 50409, 50411, 50413, 50415, 50417, 50419, 50421, 50423, 50425,
+    50427, 50429, 50431, 50436, 50441, 50446, 50451, 50456, 50461, 50466,
+    50471, 50476, 50481, 50486, 50491, 50496, 50501, 50506, 50511, 50516,
+    50521, 50526, 50531, 50535, 50539, 50543, 50549, 50555, 50560, 50565,
+    50570, 50576, 50582, 50587, 50595, 50603, 50611, 50619, 50627, 50635,
+    50643, 50651, 50657, 50662, 50667, 50672, 50675, 50679, 50683, 50687,
+    50691, 50695, 50699, 50706, 50713, 50721, 50729, 50734, 50739, 50746,
+    50753, 50760, 50767, 50770, 50773, 50778, 50780, 50784, 50789, 50791,
+    50793, 50795, 50797, 50802, 50805, 50807, 50812, 50819, 50826, 50829,
+    50833, 50838, 50843, 50851, 50857, 50863, 50875, 50882, 50890, 50895,
+    50900, 50906, 50909, 50912, 50917, 50919, 50923, 50925, 50927, 50929,
+    50931, 50933, 50935, 50940, 50942, 50944, 50946, 50948, 50952, 50954,
+    50957, 50962, 50967, 50972, 50977, 50983, 50989, 50991, 50994, 51001,
+    51007, 51013, 51020, 51024, 51028, 51030, 51032, 51036, 51042, 51047,
+    51049, 51053, 51062, 51070, 51078, 51084, 51090, 51095, 51101, 51106,
+    51109, 51123, 51126, 51131, 51136, 51142, 51153, 51155, 51161, 51167,
+    51171, 51178, 51182, 51184, 51186, 51190, 51196, 51201, 51207, 51209,
+    51215, 51217, 51223, 51225, 51227, 51232, 51234, 51238, 51243, 51245,
+    51250, 51255, 51259, 51266, 51276, 51281, 51286, 51289, 51294, 51297,
+    51302, 51307, 51311, 51313, 51315, 51319, 51323, 51327, 51331, 51335,
+    51337, 51341, 51344, 51347, 51350, 51354, 51358, 51363, 51367, 51372,
+    51377, 51381, 51387, 51394, 51397, 51403, 51408, 51412, 51417, 51423,
+    51429, 51436, 51442, 51449, 51456, 51458, 51465, 51469, 51476, 51482,
+    51487, 51493, 51497, 51502, 51505, 51511, 51517, 51524, 51532, 51539,
+    51548, 51558, 51565, 51571, 51575, 51583, 51588, 51597, 51600, 51603,
+    51612, 51623, 51630, 51632, 51638, 51643, 51645, 51648, 51652, 51660,
+    51669, 51672, 51677, 51683, 51690, 51697, 51704, 51711, 51717, 51723,
+    51729, 51737, 51742, 51745, 51749, 51752, 51763, 51773, 51783, 51792,
+    51803, 51813, 51822, 51828, 51836, 51840, 51848, 51852, 51860, 51867,
+    51874, 51883, 51892, 51902, 51912, 51922, 51932, 51941, 51950, 51960,
+    51970, 51979, 51988, 51995, 52002, 52009, 52016, 52023, 52030, 52037,
+    52044, 52051, 52059, 52065, 52071, 52077, 52083, 52089, 52095, 52101,
+    52107, 52113, 52120, 52128, 52136, 52144, 52152, 52160, 52168, 52176,
+    52184, 52192, 52201, 52206, 52209, 52213, 52217, 52223, 52226, 52231,
+    52237, 52242, 52246, 52251, 52257, 52264, 52267, 52274, 52281, 52285,
+    52294, 52303, 52308, 52314, 52319, 52324, 52331, 52338, 52345, 52352,
+    52360, 52364, 52372, 52377, 52381, 52388, 52392, 52398, 52406, 52411,
+    52418, 52422, 52427, 52431, 52436, 52440, 52445, 52450, 52459, 52461,
+    52465, 52469, 52476, 52483, 52489, 52497, 52503, 52510, 52515, 52518,
+    52523, 52528, 52533, 52541, 52545, 52552, 52559, 52566, 52571, 52576,
+    52582, 52587, 52592, 52598, 52603, 52606, 52610, 52614, 52621, 52631,
+    52636, 52645, 52654, 52660, 52666, 52671, 52676, 52681, 52686, 52692,
+    52698, 52706, 52714, 52720, 52726, 52731, 52736, 52743, 52750, 52756,
+    52759, 52762, 52766, 52770, 52774, 52779, 52785, 52791, 52798, 52805,
+    52810, 52814, 52818, 52822, 52826, 52830, 52834, 52838, 52842, 52846,
+    52850, 52854, 52858, 52862, 52866, 52870, 52874, 52878, 52882, 52886,
+    52890, 52894, 52898, 52902, 52906, 52910, 52914, 52918, 52922, 52926,
+    52930, 52934, 52938, 52942, 52946, 52950, 52954, 52958, 52962, 52966,
+    52970, 52974, 52978, 52982, 52986, 52990, 52994, 52998, 53002, 53006,
+    53010, 53014, 53018, 53022, 53026, 53030, 53034, 53038, 53042, 53046,
+    53050, 53054, 53058, 53062, 53066, 53070, 53074, 53078, 53082, 53086,
+    53090, 53094, 53098, 53102, 53106, 53110, 53114, 53118, 53122, 53126,
+    53130, 53134, 53138, 53142, 53146, 53150, 53154, 53158, 53162, 53166,
+    53170, 53174, 53178, 53182, 53186, 53190, 53194, 53198, 53202, 53206,
+    53210, 53214, 53218, 53222, 53226, 53230, 53234, 53238, 53242, 53246,
+    53250, 53254, 53258, 53262, 53266, 53270, 53274, 53278, 53282, 53286,
+    53290, 53294, 53298, 53302, 53306, 53310, 53314, 53318, 53322, 53326,
+    53330, 53334, 53338, 53342, 53346, 53350, 53354, 53358, 53362, 53366,
+    53370, 53374, 53378, 53382, 53386, 53390, 53394, 53398, 53402, 53406,
+    53410, 53414, 53418, 53422, 53426, 53430, 53434, 53438, 53442, 53446,
+    53450, 53454, 53458, 53462, 53466, 53470, 53474, 53478, 53482, 53486,
+    53490, 53494, 53498, 53502, 53506, 53510, 53514, 53518, 53522, 53526,
+    53530, 53534, 53538, 53542, 53546, 53550, 53554, 53558, 53562, 53566,
+    53570, 53574, 53578, 53582, 53586, 53590, 53594, 53598, 53602, 53606,
+    53610, 53614, 53618, 53622, 53626, 53630, 53634, 53638, 53642, 53646,
+    53650, 53654, 53658, 53662, 53666, 53670, 53674, 53678, 53682, 53686,
+    53690, 53694, 53698, 53702, 53706, 53710, 53714, 53718, 53722, 53726,
+    53730, 53734, 53738, 53742, 53746, 53750, 53754, 53758, 53762, 53766,
+    53770, 53774, 53778, 53782, 53786, 53790, 53794, 53798, 53802, 53806,
+    53810, 53814, 53818, 53822, 53826, 53830, 53834, 53841, 53849, 53855,
+    53861, 53868, 53875, 53881, 53887, 53894, 53901, 53906, 53911, 53916,
+    53921, 53927, 53933, 53941, 53948, 53953, 53958, 53966, 53975, 53982,
+    53992, 54003, 54006, 54009, 54013, 54017, 54023, 54029, 54039, 54049,
+    54058, 54067, 54073, 54079, 54086, 54093, 54102, 54112, 54123, 54133,
+    54143, 54153, 54164, 54175, 54185, 54196, 54206, 54216, 54225, 54235,
+    54245, 54256, 54267, 54274, 54281, 54288, 54295, 54305, 54315, 54322,
+    54329, 54336, 54343, 54350, 54357, 54364, 54369, 54374, 54380, 54388,
+    54398, 54406, 54414, 54422, 54430, 54438, 54446, 54454, 54462, 54470,
+    54478, 54487, 54496, 54504, 54512, 54521, 54530, 54539, 54548, 54558,
+    54568, 54577, 54586, 54596, 54606, 54620, 54637, 54651, 54668, 54682,
+    54696, 54710, 54724, 54734, 54745, 54755, 54766, 54783, 54800, 54808,
+    54814, 54821, 54828, 54835, 54842, 54847, 54853, 54858, 54863, 54869,
+    54874, 54879, 54884, 54889, 54894, 54901, 54907, 54915, 54920, 54925,
+    54929, 54933, 54941, 54949, 54957, 54965, 54972, 54979, 54992, 55005,
+    55018, 55031, 55039, 55047, 55053, 55059, 55066, 55073, 55080, 55087,
+    55091, 55096, 55104, 55112, 55120, 55127, 55131, 55139, 55147, 55150,
+    55154, 55159, 55166, 55174, 55182, 55202, 55222, 55242, 55262, 55282,
+    55302, 55322, 55342, 55348, 55355, 55364, 55372, 55380, 55386, 55389,
+    55392, 55397, 55400, 55420, 55427, 55433, 55439, 55443, 55446, 55449,
+    55452, 55463, 55476, 55483, 55490, 55493, 55497, 55500, 55505, 55510,
+    55515, 55521, 55530, 55537, 55544, 55552, 55559, 55566, 55569, 55575,
+    55581, 55584, 55587, 55592, 55597, 55603, 55609, 55613, 55618, 55625,
+    55629, 55635, 55639, 55643, 55651, 55663, 55671, 55675, 55677, 55686,
+    55695, 55701, 55704, 55710, 55716, 55721, 55726, 55731, 55736, 55741,
+    55746, 55748, 55754, 55759, 55767, 55771, 55777, 55780, 55784, 55791,
+    55798, 55800, 55802, 55808, 55814, 55820, 55829, 55838, 55845, 55852,
+    55858, 55865, 55870, 55875, 55880, 55886, 55892, 55897, 55904, 55908,
+    55912, 55925, 55938, 55950, 55959, 55965, 55972, 55977, 55982, 55987,
+    55992, 55997, 55999, 56006, 56014, 56022, 56030, 56037, 56045, 56051,
+    56056, 56062, 56068, 56074, 56081, 56087, 56095, 56103, 56111, 56119,
+    56127, 56133, 56139, 56148, 56152, 56161, 56170, 56179, 56187, 56191,
+    56197, 56204, 56211, 56215, 56221, 56229, 56235, 56240, 56246, 56251,
+    56256, 56263, 56270, 56275, 56280, 56288, 56296, 56306, 56316, 56323,
+    56330, 56334, 56338, 56350, 56356, 56363, 56368, 56373, 56380, 56387,
+    56393, 56399, 56409, 56416, 56424, 56432, 56441, 56448, 56454, 56461,
+    56467, 56475, 56483, 56491, 56499, 56505, 56510, 56520, 56531, 56538,
+    56547, 56553, 56558, 56563, 56572, 56579, 56585, 56591, 56599, 56604,
+    56611, 56618, 56631, 56639, 56646, 56653, 56660, 56667, 56675, 56683,
+    56695, 56707, 56718, 56729, 56742, 56755, 56761, 56767, 56776, 56785,
+    56792, 56799, 56808, 56817, 56826, 56835, 56843, 56851, 56861, 56871,
+    56885, 56899, 56907, 56915, 56927, 56939, 56947, 56955, 56965, 56975,
+    56981, 56987, 56996, 57005, 57010, 57015, 57023, 57029, 57035, 57043,
+    57051, 57064, 57077, 57081, 57085, 57093, 57101, 57108, 57116, 57124,
+    57133, 57142, 57148, 57154, 57161, 57168, 57175, 57182, 57191, 57200,
+    57203, 57206, 57211, 57216, 57222, 57228, 57235, 57242, 57252, 57262,
+    57269, 57276, 57284, 57292, 57300, 57308, 57316, 57324, 57331, 57338,
+    57342, 57346, 57354, 57362, 57367, 57372, 57377, 57382, 57388, 57402,
+    57409, 57416, 57420, 57422, 57424, 57429, 57434, 57439, 57444, 57452,
+    57459, 57466, 57474, 57486, 57494, 57502, 57513, 57517, 57521, 57527,
+    57535, 57548, 57555, 57562, 57569, 57575, 57582, 57591, 57600, 57606,
+    57612, 57618, 57628, 57638, 57646, 57655, 57660, 57663, 57668, 57673,
+    57678, 57684, 57690, 57694, 57697, 57701, 57705, 57710, 57715, 57721,
+    57727, 57731, 57735, 57742, 57749, 57756, 57763, 57770, 57777, 57786,
+    57795, 57802, 57809, 57817, 57825, 57829, 57834, 57839, 57845, 57851,
+    57854, 57857, 57860, 57863, 57868, 57873, 57878, 57883, 57888, 57893,
+    57897, 57901, 57905, 57910, 57915, 57919, 57923, 57929, 57933, 57939,
+    57944, 57951, 57959, 57966, 57974, 57981, 57989, 57998, 58005, 58015,
+    58026, 58032, 58041, 58047, 58056, 58065, 58071, 58077, 58081, 58085,
+    58094, 58103, 58110, 58117, 58126, 58135, 58142, 58148, 58155, 58160,
+    58164, 58168, 58173, 58178, 58183, 58191, 58199, 58202, 58206, 58215,
+    58225, 58234, 58244, 58256, 58270, 58274, 58279, 58283, 58288, 58293,
+    58298, 58304, 58310, 58317, 58324, 58330, 58337, 58343, 58350, 58359,
+    58368, 58374, 58381, 58387, 0, 0, 58394, 58402, 58410, 58419, 58428,
+    58437, 58447, 58456, 58466, 58472, 58477, 58486, 58498, 58507, 58519,
+    58526, 58534, 58541, 58549, 58554, 58560, 58565, 58571, 58579, 58588,
+    58596, 58605, 58609, 58613, 58617, 58621, 58631, 0, 58634, 58641, 58650,
+    58660, 58669, 58679, 58685, 58692, 58698, 58705, 58716, 58727, 58738,
+    58749, 58759, 58769, 58779, 58789, 58797, 58805, 58813, 58821, 58829,
+    58837, 58845, 58853, 58859, 58865, 58871, 58877, 58883, 58889, 58895,
+    58901, 58913, 58923, 58928, 58935, 58940, 58947, 58950, 58954, 58958,
+    58963, 58967, 58972, 58975, 58984, 58993, 59002, 59011, 59016, 59022,
+    59028, 59036, 59046, 59053, 59062, 59067, 59070, 59073, 59078, 59083,
+    59088, 59093, 59095, 59097, 59099, 59101, 59103, 59105, 59110, 59117,
+    59124, 59126, 59128, 59130, 59132, 59134, 59136, 59138, 59140, 59145,
+    59150, 59157, 59164, 59173, 59183, 59192, 59202, 59207, 59212, 59214,
+    59221, 59228, 59235, 59242, 59249, 59256, 59263, 59266, 59269, 59272,
+    59275, 59280, 59285, 59290, 59295, 59300, 59305, 59310, 59315, 59320,
+    59325, 59330, 59335, 59341, 59345, 59350, 59355, 59360, 59365, 59370,
+    59375, 59380, 59385, 59390, 59395, 59400, 59405, 59410, 59415, 59420,
+    59425, 59430, 59435, 59440, 59445, 59450, 59455, 59461, 59466, 59472,
+    59481, 59486, 59494, 59501, 59510, 59515, 59520, 59525, 59531, 0, 59538,
+    59543, 59548, 59553, 59558, 59563, 59568, 59573, 59578, 59583, 59588,
+    59594, 59598, 59603, 59608, 59613, 59618, 59623, 59628, 59633, 59638,
+    59643, 59648, 59653, 59658, 59663, 59668, 59673, 59678, 59683, 59688,
+    59693, 59698, 59703, 59708, 59714, 59719, 59725, 59734, 59739, 59747,
+    59754, 59763, 59768, 59773, 59778, 59784, 0, 59791, 59799, 59807, 59816,
+    59823, 59831, 59837, 59846, 59854, 59862, 59870, 59878, 59886, 59894,
+    59899, 59906, 59911, 59917, 59925, 59932, 59939, 59947, 59953, 59959,
+    59966, 59974, 59983, 59993, 59999, 60006, 60011, 60021, 60031, 60036,
+    60041, 60046, 60051, 60056, 60061, 60066, 60071, 60076, 60081, 60086,
+    60091, 60096, 60101, 60106, 60111, 60116, 60121, 60126, 60131, 60136,
+    60141, 60146, 60151, 60156, 60161, 60166, 60171, 60176, 60181, 60185,
+    60189, 60194, 60199, 60204, 60209, 60214, 60219, 60224, 60229, 60234,
+    60239, 60244, 60249, 60254, 60259, 60264, 60269, 60274, 60279, 60286,
+    60293, 60300, 60307, 60314, 60321, 60328, 60335, 60342, 60349, 60356,
+    60363, 60370, 60377, 60382, 60387, 60394, 60401, 60408, 60415, 60422,
+    60429, 60436, 60443, 60450, 60457, 60464, 60471, 60477, 60483, 60489,
+    60495, 60502, 60509, 60516, 60523, 60530, 60537, 60544, 60551, 60558,
+    60565, 60573, 60581, 60589, 60597, 60605, 60613, 60621, 60629, 60633,
+    60639, 60645, 60649, 60655, 60661, 60667, 60674, 60681, 60688, 60695,
+    60700, 60706, 60712, 60719, 0, 0, 0, 0, 0, 60726, 60734, 60743, 60752,
+    60760, 60766, 60771, 60776, 60781, 60786, 60791, 60796, 60801, 60806,
+    60811, 60816, 60821, 60826, 60831, 60836, 60841, 60846, 60851, 60856,
+    60861, 60866, 60871, 60876, 60881, 60886, 60891, 60896, 60901, 60906,
+    60911, 60916, 60921, 60926, 60931, 60936, 60941, 60946, 60951, 60956,
+    60961, 0, 60966, 0, 0, 0, 0, 0, 60971, 0, 0, 60976, 60980, 60985, 60990,
+    60995, 61000, 61009, 61014, 61019, 61024, 61029, 61034, 61039, 61044,
+    61049, 61056, 61061, 61066, 61075, 61082, 61087, 61092, 61097, 61104,
+    61109, 61116, 61121, 61126, 61133, 61140, 61145, 61150, 61155, 61162,
+    61169, 61174, 61179, 61184, 61189, 61194, 61201, 61208, 61213, 61218,
+    61223, 61228, 61233, 61238, 61243, 61248, 61253, 61258, 61263, 61270,
+    61275, 61280, 0, 0, 0, 0, 0, 0, 0, 61285, 61292, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 61297, 61302, 61306, 61310, 61314, 61318, 61322, 61326,
+    61330, 61334, 61338, 61342, 61348, 61352, 61356, 61360, 61364, 61368,
+    61372, 61376, 61380, 61384, 61388, 61392, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    61396, 61400, 61404, 61408, 61412, 61416, 61420, 0, 61424, 61428, 61432,
+    61436, 61440, 61444, 61448, 0, 61452, 61456, 61460, 61464, 61468, 61472,
+    61476, 0, 61480, 61484, 61488, 61492, 61496, 61500, 61504, 0, 61508,
+    61512, 61516, 61520, 61524, 61528, 61532, 0, 61536, 61540, 61544, 61548,
+    61552, 61556, 61560, 0, 61564, 61568, 61572, 61576, 61580, 61584, 61588,
+    0, 61592, 61596, 61600, 61604, 61608, 61612, 61616, 0, 61620, 61625,
+    61630, 61635, 61640, 61645, 61650, 61654, 61659, 61664, 61669, 61673,
+    61678, 61683, 61688, 61693, 61697, 61702, 61707, 61712, 61717, 61722,
+    61727, 61731, 61736, 61741, 61748, 61753, 61758, 61764, 61771, 61778,
+    61787, 61794, 61803, 61807, 61811, 61817, 61823, 61829, 61837, 61843,
+    61847, 61851, 61855, 61861, 61867, 61871, 61873, 61877, 61883, 61885,
+    61889, 61893, 61897, 61903, 61908, 61912, 61916, 61921, 61927, 61932,
+    61937, 61942, 61947, 61954, 61961, 61966, 61971, 61976, 61981, 61986,
+    61991, 61995, 61999, 62007, 62015, 62021, 62025, 62030, 62033, 62037,
+    62044, 62047, 62051, 62055, 62058, 62064, 62070, 62073, 62079, 62083,
+    62087, 62093, 62098, 62103, 62105, 62108, 62112, 62118, 62124, 62128,
+    62133, 62142, 62145, 62151, 62156, 62160, 62164, 62168, 62171, 62176,
+    62182, 62190, 62198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 62204, 62208, 62212, 62217, 62222, 62227, 62231, 62235,
+    62239, 62244, 62249, 62253, 62257, 62261, 62265, 62270, 62275, 62280,
+    62285, 62289, 62293, 62298, 62303, 62308, 62313, 62317, 0, 62321, 62325,
+    62329, 62333, 62337, 62341, 62345, 62350, 62355, 62359, 62364, 62369,
+    62378, 62382, 62386, 62390, 62397, 62401, 62406, 62411, 62415, 62419,
+    62425, 62430, 62435, 62440, 62445, 62449, 62453, 62457, 62461, 62465,
+    62470, 62475, 62479, 62483, 62488, 62493, 62498, 62502, 62506, 62511,
+    62516, 62522, 62528, 62532, 62538, 62544, 62548, 62554, 62560, 62565,
+    62570, 62574, 62580, 62584, 62588, 62594, 62600, 62605, 62610, 62614,
+    62618, 62626, 62632, 62638, 62644, 62649, 62654, 62659, 62665, 62669,
+    62675, 62679, 62683, 62689, 62695, 62701, 62707, 62713, 62719, 62725,
+    62731, 62737, 62743, 62749, 62755, 62759, 62765, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 62771, 62774, 62778, 62782, 62786, 62790, 62793, 62796,
+    62800, 62804, 62808, 62812, 62815, 62820, 62824, 62828, 62832, 62838,
+    62842, 62846, 62850, 62854, 62861, 62867, 62871, 62875, 62879, 62883,
+    62887, 62891, 62895, 62899, 62903, 62907, 62911, 62917, 62921, 62925,
+    62929, 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965,
+    62969, 62973, 62977, 62981, 62987, 62993, 62998, 63003, 63007, 63011,
+    63015, 63019, 63023, 63027, 63031, 63035, 63039, 63043, 63047, 63051,
+    63055, 63059, 63063, 63067, 63071, 63075, 63079, 63083, 63087, 63091,
+    63095, 63099, 63105, 63109, 63113, 63117, 63121, 63125, 63129, 63133,
+    63137, 63142, 63149, 63153, 63157, 63161, 63165, 63169, 63173, 63177,
+    63181, 63185, 63189, 63193, 63197, 63204, 63208, 63214, 63218, 63222,
+    63226, 63230, 63234, 63237, 63241, 63245, 63249, 63253, 63257, 63261,
+    63265, 63269, 63273, 63277, 63281, 63285, 63289, 63293, 63297, 63301,
+    63305, 63309, 63313, 63317, 63321, 63325, 63329, 63333, 63337, 63341,
+    63345, 63349, 63353, 63357, 63361, 63365, 63371, 63375, 63379, 63383,
+    63387, 63391, 63395, 63399, 63403, 63407, 63411, 63415, 63419, 63423,
+    63427, 63431, 63435, 63439, 63443, 63447, 63451, 63455, 63459, 63463,
+    63467, 63471, 63475, 63479, 63487, 63491, 63495, 63499, 63503, 63507,
+    63513, 63517, 63521, 63525, 63529, 63533, 63537, 63541, 63545, 63549,
+    63553, 63557, 63561, 63565, 63571, 63575, 63579, 63583, 63587, 63591,
+    63595, 63599, 63603, 63607, 63611, 63615, 63619, 63623, 63627, 63631,
+    63635, 63639, 63643, 63647, 63651, 63655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63659, 63668, 63676,
+    63687, 63697, 63706, 63716, 63726, 63737, 63749, 63761, 63773, 0, 0, 0,
+    0, 63780, 63783, 63786, 63791, 63794, 63801, 63805, 63809, 63813, 63817,
+    63821, 63826, 63831, 63835, 63839, 63844, 63849, 63854, 63859, 63862,
+    63865, 63871, 63877, 63882, 63887, 63894, 63901, 63905, 63909, 63913,
+    63921, 63927, 63934, 63939, 63944, 63949, 63954, 63959, 63964, 63969,
+    63974, 63979, 63984, 63989, 63994, 63999, 64004, 64010, 64015, 64019,
+    64025, 64036, 64045, 64059, 64068, 64072, 64082, 64088, 64094, 64100,
+    64105, 64108, 64113, 64117, 0, 64123, 64128, 64132, 64137, 64141, 64146,
+    64150, 64155, 64159, 64164, 64168, 64172, 64177, 64182, 64187, 64192,
+    64197, 64202, 64207, 64212, 64217, 64221, 64226, 64231, 64236, 64241,
+    64246, 64251, 64256, 64261, 64266, 64270, 64275, 64280, 64285, 64291,
+    64296, 64301, 64306, 64311, 64315, 64320, 64324, 64329, 64334, 64339,
+    64344, 64348, 64353, 64357, 64362, 64367, 64372, 64377, 64382, 64387,
+    64392, 64397, 64402, 64407, 64412, 64417, 64421, 64426, 64431, 64436,
+    64441, 64446, 64450, 64456, 64461, 64467, 64472, 64476, 64481, 64486,
+    64491, 64496, 64502, 64507, 64512, 64517, 64522, 64527, 64532, 64537, 0,
+    0, 64543, 64551, 64559, 64566, 64573, 64578, 64585, 64591, 64596, 64600,
+    64603, 64607, 64610, 64614, 64617, 64621, 64624, 64628, 64631, 64634,
+    64638, 64642, 64646, 64650, 64654, 64658, 64662, 64666, 64670, 64673,
+    64677, 64681, 64685, 64689, 64693, 64697, 64701, 64705, 64709, 64712,
+    64716, 64720, 64724, 64729, 64733, 64737, 64741, 64745, 64748, 64752,
+    64755, 64759, 64763, 64767, 64771, 64774, 64778, 64781, 64785, 64789,
+    64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, 64825, 64829,
+    64832, 64836, 64840, 64844, 64848, 64852, 64855, 64860, 64864, 64869,
+    64873, 64876, 64880, 64884, 64888, 64892, 64897, 64901, 64905, 64909,
+    64913, 64917, 64921, 64925, 64930, 64934, 64938, 64942, 64946, 64950,
+    64957, 64961, 64967, 0, 0, 0, 0, 0, 64972, 64977, 64982, 64987, 64992,
+    64997, 65002, 65007, 65011, 65016, 65021, 65026, 65031, 65036, 65041,
+    65046, 65051, 65056, 65060, 65065, 65070, 65075, 65079, 65083, 65087,
+    65092, 65097, 65102, 65107, 65112, 65117, 65122, 65127, 65132, 65137,
+    65141, 65145, 65150, 65155, 65160, 65165, 65170, 65177, 0, 65182, 65186,
+    65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218, 65222, 65226,
+    65230, 65234, 65238, 65242, 65246, 65250, 65254, 65258, 65262, 65266,
+    65270, 65274, 65278, 65282, 65286, 65290, 65294, 65298, 65302, 65305,
+    65309, 65312, 65316, 65320, 65323, 65327, 65331, 65334, 65338, 65342,
+    65346, 65350, 65353, 65357, 65361, 65365, 65369, 65373, 65377, 65380,
+    65383, 65387, 65391, 65395, 65399, 65403, 65407, 65411, 65415, 65419,
+    65423, 65427, 65431, 65435, 65439, 65443, 65447, 65451, 65455, 65459,
+    65463, 65467, 65471, 65475, 65479, 65483, 65487, 65491, 65495, 65499,
+    65503, 65507, 65511, 65515, 65519, 65523, 65527, 65531, 65535, 65539,
+    65543, 65547, 0, 65551, 65557, 65563, 65568, 65573, 65578, 65584, 65590,
+    65595, 65601, 65607, 65613, 65619, 65625, 65631, 65637, 65643, 65648,
+    65653, 65658, 65663, 65668, 65673, 65678, 65683, 65688, 65693, 65698,
+    65703, 65708, 65713, 65718, 65723, 65728, 65733, 65738, 65743, 65749,
+    65755, 65761, 65767, 65772, 65777, 65782, 65788, 65793, 65798, 65803,
+    65808, 65813, 65818, 65823, 65828, 65833, 65838, 65843, 65848, 65853,
+    65858, 65863, 65868, 65873, 65878, 65883, 65888, 65893, 65898, 65903,
+    65908, 65913, 65918, 65923, 65928, 65933, 65938, 65943, 65948, 65953,
+    65958, 65963, 65968, 65973, 65978, 65983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 65988, 65993, 65998, 66003, 66007, 66012, 66016, 66021, 66026,
+    66031, 66036, 66041, 66045, 66050, 66055, 66060, 66065, 66069, 66073,
+    66077, 66081, 66085, 66089, 66093, 66097, 66101, 66105, 66109, 66113,
+    66117, 66121, 66126, 66131, 66136, 66141, 66146, 66151, 66156, 66161,
+    66166, 66171, 66176, 66181, 66186, 66191, 66196, 66203, 0, 66211, 66215,
+    66219, 66223, 66227, 66231, 66235, 66239, 66243, 66247, 66252, 66257,
+    66262, 66267, 66272, 66277, 66282, 66287, 66292, 66297, 66302, 66307,
+    66312, 66317, 66322, 66327, 66332, 66337, 66342, 66347, 66352, 66357,
+    66362, 66367, 66372, 66377, 66382, 66387, 66392, 66397, 66402, 66411,
+    66420, 66429, 66438, 66447, 66456, 66465, 66474, 66477, 66482, 66487,
+    66492, 66497, 66502, 66507, 66512, 66517, 66522, 66526, 66531, 66536,
+    66541, 66546, 66551, 66555, 66559, 66563, 66567, 66571, 66575, 66579,
+    66583, 66587, 66591, 66595, 66599, 66603, 66607, 66612, 66617, 66622,
+    66627, 66632, 66637, 66642, 66647, 66652, 66657, 66662, 66667, 66672,
+    66677, 66684, 66691, 66696, 66701, 66705, 66709, 66713, 66717, 66721,
+    66725, 66729, 66733, 66737, 66742, 66747, 66752, 66757, 66762, 66767,
+    66772, 66777, 66782, 66787, 66792, 66797, 66802, 66807, 66812, 66817,
+    66822, 66827, 66832, 66837, 66842, 66847, 66852, 66857, 66862, 66867,
+    66872, 66877, 66882, 66887, 66892, 66897, 66902, 66907, 66912, 66917,
+    66922, 66927, 66932, 66937, 66942, 66947, 66952, 66957, 66961, 66966,
+    66971, 66976, 66981, 66986, 66991, 66996, 67001, 67006, 67010, 67017,
+    67024, 67031, 67038, 67045, 67052, 67059, 67066, 67073, 67080, 67087,
+    67094, 67097, 67100, 67103, 67108, 67111, 67114, 67117, 67120, 67123,
+    67126, 67130, 67134, 67138, 67142, 67145, 67149, 67153, 67157, 67161,
+    67164, 67168, 67172, 67176, 67179, 67182, 67186, 67190, 67194, 67198,
+    67201, 67205, 67209, 67213, 67217, 67220, 67224, 67228, 67232, 67236,
+    67239, 67243, 67247, 67250, 67254, 67258, 67262, 67266, 67270, 67274,
+    67278, 67282, 67289, 67292, 67295, 67298, 67301, 67304, 67307, 67310,
+    67313, 67316, 67319, 67322, 67325, 67328, 67331, 67334, 67337, 67340,
+    67343, 67346, 67349, 67352, 67355, 67358, 67361, 67364, 67367, 67370,
+    67373, 67376, 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400,
+    67403, 67406, 67409, 67412, 67415, 67418, 67421, 67424, 67427, 67430,
+    67433, 67436, 67439, 67442, 67445, 67448, 67451, 67454, 67457, 67460,
+    67463, 67466, 67469, 67472, 67475, 67478, 67481, 67484, 67487, 67490,
+    67493, 67496, 67499, 67502, 67505, 67508, 67511, 67514, 67517, 67520,
+    67523, 67526, 67529, 67532, 67535, 67538, 67541, 67544, 67547, 67550,
+    67553, 67562, 67570, 67578, 67586, 67594, 67602, 67610, 67618, 67626,
+    67634, 67643, 67652, 67661, 67670, 67679, 67688, 67697, 67706, 67715,
+    67724, 67733, 67742, 67751, 67760, 67769, 67772, 67775, 67778, 67780,
+    67783, 67786, 67789, 67794, 67799, 67802, 67809, 67816, 67823, 67830,
+    67833, 67838, 67840, 67844, 67846, 67848, 67851, 67854, 67857, 67860,
+    67863, 67866, 67869, 67874, 67879, 67882, 67885, 67888, 67891, 67894,
+    67897, 67900, 67904, 67907, 67910, 67913, 67916, 67919, 67924, 67927,
+    67930, 67933, 67938, 67943, 67948, 67953, 67958, 67963, 67968, 67973,
+    67979, 67987, 67989, 67992, 67995, 67998, 68001, 68007, 68015, 68018,
+    68021, 68026, 68029, 68032, 68035, 68040, 68043, 68046, 68051, 68054,
+    68057, 68062, 68065, 68068, 68073, 68078, 68083, 68086, 68089, 68092,
+    68095, 68101, 68104, 68107, 68110, 68112, 68115, 68118, 68121, 68126,
+    68129, 68132, 68135, 68138, 68141, 68146, 68149, 68152, 68155, 68158,
+    68161, 68164, 68167, 68170, 68173, 68179, 68184, 68192, 68200, 68208,
+    68216, 68224, 68232, 68240, 68248, 68256, 68265, 68274, 68283, 68292,
+    68301, 68310, 68319, 68328, 68337, 68346, 68355, 68364, 68373, 68382,
+    68391, 68400, 68409, 68418, 68427, 68436, 68445, 68454, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68457, 68466, 68475, 68486, 68493, 68498,
+    68503, 68510, 68517, 68523, 68528, 68533, 68538, 68543, 68550, 68555,
+    68560, 68565, 68576, 68581, 68586, 68593, 68598, 68605, 68610, 68615,
+    68622, 68629, 68636, 68645, 68654, 68659, 68664, 68669, 68676, 68681,
+    68691, 68698, 68703, 68708, 68713, 68718, 68723, 68728, 68736, 68743,
+    68750, 68755, 68762, 68767, 68774, 68783, 68794, 68799, 68808, 68813,
+    68820, 68829, 68838, 68843, 68848, 68855, 68861, 68868, 68875, 68879,
+    68883, 68886, 68890, 68894, 68898, 68902, 68906, 68910, 68914, 68917,
+    68921, 68925, 68929, 68933, 68937, 68941, 68944, 68948, 68952, 68955,
+    68959, 68963, 68967, 68971, 68975, 68979, 68983, 68987, 68991, 68995,
+    68999, 69003, 69007, 69011, 69015, 69019, 69023, 69027, 69031, 69035,
+    69039, 69043, 69047, 69051, 69055, 69059, 69063, 69067, 69071, 69075,
+    69079, 69083, 69087, 69091, 69095, 69099, 69103, 69107, 69111, 69115,
+    69119, 69123, 69127, 69131, 69134, 69138, 69142, 69146, 69150, 69154,
+    69158, 69162, 69166, 69170, 69174, 69178, 69182, 69186, 69190, 69194,
+    69198, 69202, 69206, 69210, 69214, 69218, 69222, 69226, 69230, 69234,
+    69238, 69242, 69246, 69250, 69254, 69258, 69262, 69266, 69270, 69274,
+    69278, 69282, 69286, 69290, 69294, 69298, 69302, 69306, 69310, 69314,
+    69318, 69322, 69326, 69330, 69334, 69338, 69342, 69346, 69350, 69354,
+    69358, 69362, 69366, 69370, 69374, 69378, 69382, 69386, 69390, 69394,
+    69398, 69402, 69406, 69410, 69414, 69418, 69422, 69426, 69430, 69434,
+    69438, 69442, 69446, 69450, 69454, 69458, 69462, 69466, 69470, 69474,
+    69478, 69482, 69486, 69490, 69494, 69498, 69502, 69506, 69510, 69514,
+    69518, 69522, 69526, 69530, 69534, 69538, 69542, 69546, 69550, 69554,
+    69558, 69562, 69566, 69570, 69574, 69578, 69582, 69586, 69590, 69594,
+    69598, 69602, 69605, 69609, 69613, 69617, 69621, 69625, 69629, 69633,
+    69637, 69641, 69645, 69649, 69653, 69657, 69661, 69665, 69669, 69673,
+    69677, 69681, 69685, 69689, 69693, 69697, 69701, 69705, 69709, 69713,
+    69717, 69721, 69725, 69729, 69733, 69737, 69741, 69745, 69749, 69753,
+    69757, 69761, 69765, 69769, 69773, 69777, 69781, 69785, 69789, 69793,
+    69797, 69801, 69805, 69809, 69813, 69817, 69821, 69825, 69829, 69833,
+    69837, 69841, 69845, 69849, 69853, 69857, 69861, 69865, 69869, 69873,
+    69877, 69881, 69885, 69889, 69893, 69897, 69901, 69905, 69909, 69913,
+    69917, 69921, 69925, 69929, 69933, 69937, 69941, 69945, 69949, 69953,
+    69957, 69961, 69965, 69969, 69973, 69977, 69981, 69985, 69989, 69993,
+    69997, 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033,
+    70036, 70040, 70044, 70048, 70052, 70056, 70060, 70064, 70067, 70071,
+    70075, 70079, 70083, 70087, 70091, 70095, 70099, 70103, 70107, 70111,
+    70115, 70119, 70123, 70127, 70131, 70135, 70139, 70143, 70147, 70151,
+    70155, 70159, 70163, 70167, 70171, 70175, 70179, 70183, 70187, 70191,
+    70195, 70199, 70203, 70207, 70211, 70215, 70219, 70223, 70227, 70231,
+    70235, 70239, 70243, 70247, 70251, 70255, 70259, 70263, 70267, 70271,
+    70275, 70279, 70283, 70287, 70291, 70295, 70299, 70303, 70307, 70311,
+    70315, 70319, 70323, 70327, 70331, 70335, 70339, 70343, 70347, 70351,
+    70355, 70359, 70363, 70367, 70371, 70375, 70379, 70383, 70387, 70391,
+    70395, 70399, 70403, 70407, 70411, 70415, 70419, 70423, 70426, 70430,
+    70434, 70438, 70442, 70446, 70450, 70454, 70458, 70462, 70466, 70470,
+    70474, 70478, 70482, 70486, 70490, 70494, 70498, 70502, 70506, 70510,
+    70514, 70518, 70522, 70526, 70530, 70534, 70538, 70542, 70546, 70550,
+    70554, 70558, 70562, 70566, 70570, 70574, 70578, 70582, 70586, 70590,
+    70594, 70598, 70602, 70606, 70610, 70614, 70618, 70622, 70626, 70630,
+    70634, 70638, 70642, 70646, 70650, 70654, 70658, 70662, 70665, 70669,
+    70673, 70677, 70681, 70685, 70689, 70693, 70697, 70701, 70705, 70709,
+    70713, 70717, 70721, 70725, 70729, 70733, 70737, 70741, 70745, 70749,
+    70753, 70757, 70761, 70765, 70769, 70773, 70777, 70781, 70785, 70789,
+    70793, 70797, 70801, 70805, 70809, 70813, 70817, 70821, 70825, 70829,
+    70833, 70837, 70841, 70845, 70849, 70853, 70857, 70861, 70865, 70869,
+    70873, 70877, 70881, 70885, 70889, 70893, 70897, 70901, 70905, 70909,
+    70913, 70917, 70920, 70924, 70928, 70932, 70936, 70940, 70944, 70948,
+    70952, 70956, 70960, 70964, 70968, 70972, 70976, 70980, 70984, 70988,
+    70992, 70996, 71000, 71004, 71008, 71012, 71016, 71020, 71024, 71028,
+    71032, 71036, 71040, 71044, 71048, 71052, 71056, 71060, 71064, 71068,
+    71072, 71076, 71080, 71084, 71088, 71092, 71096, 71100, 71104, 71108,
+    71112, 71116, 71120, 71124, 71128, 71132, 71136, 71140, 71144, 71148,
+    71152, 71156, 71160, 71164, 71168, 71172, 71176, 71180, 71184, 71188,
+    71192, 71196, 71200, 71204, 71208, 71212, 71216, 71220, 71224, 71228,
+    71232, 71236, 71240, 71244, 71248, 71252, 71256, 71260, 71264, 71268,
+    71272, 71276, 71280, 71284, 71288, 71292, 71296, 71300, 71304, 71308,
+    71312, 71316, 71320, 71324, 71328, 71332, 71336, 71340, 71344, 71348,
+    71352, 71356, 71360, 71364, 71368, 71372, 71375, 71379, 71383, 71387,
+    71391, 71395, 71399, 71403, 71407, 71411, 71415, 71419, 71423, 71427,
+    71431, 71435, 71439, 71443, 71447, 71451, 71455, 71459, 71463, 71467,
+    71471, 71475, 71479, 71483, 71487, 71491, 71495, 71499, 71503, 71507,
+    71511, 71515, 71519, 71523, 71527, 71531, 71535, 71539, 71543, 71547,
+    71551, 71555, 71559, 71563, 71567, 71571, 71575, 71579, 71583, 71587,
+    71591, 71595, 71599, 71603, 71607, 71611, 71615, 71619, 71623, 71627,
+    71631, 71635, 71639, 71643, 71647, 71651, 71655, 71659, 71663, 71667,
+    71671, 71675, 71679, 71683, 71687, 71691, 71695, 71699, 71703, 71707,
+    71711, 71715, 71719, 71723, 71727, 71731, 71735, 71739, 71743, 71747,
+    71751, 71755, 71759, 71763, 71767, 71771, 71775, 71779, 71783, 71787,
+    71791, 71795, 71799, 71803, 71807, 71811, 71815, 71819, 71823, 71827,
+    71831, 71835, 71839, 71843, 71847, 71851, 71855, 71859, 71863, 71867,
+    71871, 71875, 71879, 71883, 71887, 71891, 71895, 71899, 71903, 71907,
+    71911, 71915, 71919, 71923, 71927, 71931, 71935, 71939, 71943, 71947,
+    71951, 71955, 71959, 71963, 71967, 71971, 71975, 71978, 71982, 71986,
+    71990, 71994, 71998, 72002, 72006, 72009, 72013, 72017, 72021, 72025,
+    72029, 72033, 72037, 72041, 72045, 72049, 72053, 72057, 72061, 72065,
+    72069, 72073, 72077, 72081, 72085, 72089, 72093, 72097, 72101, 72105,
+    72109, 72113, 72117, 72121, 72125, 72129, 72133, 72137, 72141, 72145,
+    72149, 72153, 72157, 72161, 72165, 72169, 72173, 72177, 72181, 72185,
+    72189, 72193, 72197, 72201, 72205, 72209, 72213, 72217, 72221, 72225,
+    72229, 72233, 72237, 72241, 72245, 72249, 72253, 72257, 72261, 72265,
+    72269, 72273, 72277, 72281, 72285, 72289, 72293, 72297, 72301, 72305,
+    72309, 72313, 72317, 72321, 72325, 72329, 72333, 72337, 72341, 72345,
+    72349, 72353, 72357, 72361, 72365, 72369, 72373, 72377, 72381, 72385,
+    72389, 72393, 72397, 72401, 72405, 72409, 72413, 72417, 72421, 72425,
+    72429, 72433, 72437, 72441, 72445, 72449, 72453, 72457, 72461, 72465,
+    72469, 72473, 72477, 72481, 72485, 72489, 72493, 72497, 72501, 72505,
+    72509, 72513, 72517, 72521, 72525, 72529, 72533, 72537, 72541, 72545,
+    72549, 72553, 72557, 72561, 72565, 72569, 72573, 72577, 72581, 72585,
+    72589, 72593, 72597, 72601, 72605, 72609, 72613, 72617, 72621, 72625,
+    72629, 72633, 72637, 72641, 72645, 72649, 72653, 72657, 72661, 72665,
+    72669, 72673, 72677, 72681, 72685, 72689, 72693, 72697, 72701, 72705,
+    72709, 72713, 72717, 72721, 72725, 72729, 72733, 72736, 72740, 72744,
+    72748, 72752, 72756, 72760, 72764, 72768, 72772, 72776, 72780, 72784,
+    72788, 72792, 72796, 72800, 72804, 72808, 72812, 72816, 72820, 72824,
+    72828, 72832, 72836, 72840, 72844, 72848, 72852, 72856, 72860, 72864,
+    72868, 72872, 72876, 72880, 72884, 72888, 72892, 72896, 72900, 72904,
+    72908, 72912, 72916, 72920, 72924, 72928, 72932, 72936, 72940, 72944,
+    72948, 72952, 72956, 72960, 72964, 72968, 72972, 72976, 72980, 72984,
+    72988, 72992, 72996, 73000, 73004, 73008, 73012, 73016, 73020, 73024,
+    73028, 73032, 73036, 73040, 73044, 73048, 73052, 73056, 73060, 73064,
+    73068, 73072, 73076, 73080, 73084, 73088, 73092, 73096, 73100, 73104,
+    73108, 73112, 73116, 73120, 73124, 73128, 73132, 73136, 73140, 73144,
+    73148, 73152, 73156, 73160, 73164, 73168, 73172, 73176, 73180, 73184,
+    73188, 73192, 73196, 73200, 73204, 73208, 73212, 73216, 73220, 73224,
+    73228, 73232, 73236, 73240, 73244, 73248, 73252, 73256, 73260, 73264,
+    73268, 73272, 73276, 73280, 73284, 73288, 73292, 73296, 73300, 73304,
+    73308, 73312, 73316, 73320, 73324, 73328, 73332, 73336, 73340, 73344,
+    73348, 73352, 73356, 73360, 73364, 73368, 73372, 73376, 73380, 73384,
+    73388, 73392, 73396, 73400, 73404, 73408, 73412, 73416, 73420, 73424,
+    73428, 73432, 73436, 73440, 73444, 73448, 73452, 73456, 73460, 73464,
+    73468, 73472, 73476, 73480, 73484, 73488, 73492, 73496, 73500, 73504,
+    73508, 73512, 73516, 0, 0, 0, 73520, 73524, 73528, 73532, 73536, 73540,
+    73544, 73548, 73552, 73556, 73560, 73564, 73568, 73572, 73576, 73580,
+    73584, 73588, 73592, 73596, 73600, 73604, 73608, 73612, 73616, 73620,
+    73624, 73628, 73632, 73636, 73640, 73644, 73648, 73652, 73656, 73660,
+    73664, 73668, 73672, 73676, 73680, 73684, 73688, 73692, 73696, 73700,
+    73704, 73708, 73712, 73716, 73720, 73724, 73728, 73732, 73736, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 73740, 73745, 73749, 73754, 73759, 73763, 73768, 73773,
+    73777, 73782, 73787, 73792, 73797, 73802, 73807, 73812, 73816, 73820,
+    73824, 73828, 73833, 73838, 73843, 73847, 73852, 73857, 73862, 73867,
+    73872, 73876, 73881, 73885, 73890, 73894, 73899, 73903, 73907, 73911,
+    73916, 73921, 73926, 73934, 73942, 73950, 73958, 73965, 73973, 73979,
+    73987, 73991, 73995, 73999, 74003, 74007, 74011, 74015, 74019, 74023,
+    74027, 74031, 74035, 74039, 74043, 74047, 74051, 74055, 74059, 74063,
+    74067, 74071, 74075, 74079, 74083, 74087, 74091, 74095, 74099, 74103,
+    74107, 74111, 74115, 74119, 74123, 74127, 74131, 74134, 74138, 74142,
+    74146, 74150, 74154, 74158, 74162, 74166, 74170, 74174, 74178, 74182,
+    74186, 74190, 74194, 74198, 74202, 74206, 74210, 74214, 74218, 74222,
+    74226, 74230, 74234, 74238, 74242, 74246, 74250, 74254, 74258, 74262,
+    74266, 74270, 74274, 74278, 74281, 74285, 74289, 74292, 74296, 74300,
+    74304, 74307, 74311, 74315, 74319, 74323, 74327, 74331, 74335, 74339,
+    74343, 74346, 74350, 74354, 74358, 74361, 74364, 74368, 74372, 74375,
+    74379, 74383, 74387, 74391, 74395, 74399, 74402, 74405, 74409, 74413,
+    74417, 74420, 74423, 74427, 74431, 74435, 74439, 74443, 74447, 74451,
+    74455, 74459, 74463, 74467, 74471, 74475, 74479, 74483, 74487, 74491,
+    74495, 74499, 74503, 74507, 74511, 74515, 74519, 74523, 74527, 74531,
+    74535, 74539, 74543, 74547, 74551, 74555, 74559, 74563, 74567, 74571,
+    74574, 74578, 74582, 74586, 74590, 74594, 74598, 74602, 74606, 74610,
+    74614, 74618, 74622, 74626, 74630, 74634, 74638, 74642, 74646, 74650,
+    74654, 74658, 74662, 74666, 74670, 74674, 74678, 74682, 74686, 74690,
+    74694, 74698, 74702, 74706, 74710, 74714, 74718, 74721, 74725, 74729,
+    74733, 74737, 74741, 74745, 74749, 74753, 74757, 74761, 74765, 74769,
+    74773, 74777, 74781, 74785, 74788, 74792, 74796, 74800, 74804, 74808,
+    74812, 74816, 74820, 74824, 74828, 74832, 74836, 74840, 74844, 74848,
+    74852, 74856, 74860, 74864, 74868, 74872, 74875, 74879, 74883, 74887,
+    74891, 74895, 74899, 74903, 74907, 74911, 74915, 74919, 74923, 74927,
+    74931, 74935, 74939, 74943, 74947, 74951, 74955, 74959, 74963, 74967,
+    74971, 74975, 74979, 74983, 74987, 74991, 74995, 74999, 75003, 75007,
+    75011, 75015, 75019, 75023, 75027, 75031, 75035, 75039, 75043, 75047,
+    75050, 75055, 75059, 75065, 75070, 75076, 75080, 75084, 75088, 75092,
+    75096, 75100, 75104, 75108, 75112, 75116, 75120, 75124, 75128, 75132,
+    75135, 75138, 75141, 75144, 75147, 75150, 75153, 75156, 75159, 75164, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75170, 75175,
+    75180, 75185, 75190, 75197, 75204, 75209, 75214, 75219, 75224, 75231,
+    75238, 75245, 75252, 75259, 75266, 75276, 75286, 75293, 75300, 75307,
+    75314, 75320, 75326, 75335, 75344, 75351, 75358, 75369, 75380, 75385,
+    75390, 75397, 75404, 75411, 75418, 75425, 75432, 75439, 75446, 75452,
+    75458, 75464, 75470, 75477, 75484, 75489, 75493, 75500, 75507, 75514,
+    75518, 75525, 75529, 75534, 75538, 75544, 75549, 75555, 75560, 75564,
+    75568, 75571, 75574, 75579, 75584, 75589, 75594, 75599, 75604, 75609,
+    75614, 75619, 75624, 75632, 75640, 75645, 75650, 75655, 75660, 75665,
+    75670, 75675, 75680, 75685, 75690, 75695, 75700, 75705, 75710, 75716,
+    75722, 75728, 75734, 75739, 75745, 75748, 75751, 75754, 75758, 75762,
+    75766, 75770, 75773, 75777, 75780, 75783, 75786, 75790, 75794, 75798,
+    75802, 75806, 75810, 75814, 75818, 75822, 75826, 75830, 75834, 75838,
+    75842, 75846, 75850, 75854, 75858, 75862, 75866, 75870, 75874, 75877,
+    75881, 75885, 75889, 75893, 75897, 75901, 75905, 75909, 75913, 75917,
+    75921, 75925, 75929, 75933, 75937, 75941, 75945, 75949, 75953, 75957,
+    75961, 75965, 75969, 75973, 75976, 75980, 75984, 75988, 75992, 75996,
+    76000, 76004, 76007, 76011, 76015, 76019, 76023, 76027, 76031, 76035,
+    76039, 76043, 76047, 76051, 76055, 76060, 76065, 76068, 76073, 76076,
+    76079, 76082, 0, 0, 0, 0, 0, 0, 0, 0, 76086, 76095, 76104, 76113, 76122,
+    76131, 76140, 76149, 76158, 76166, 76173, 76181, 76188, 76196, 76206,
+    76215, 76225, 76234, 76244, 76252, 76259, 76267, 76274, 76282, 76287,
+    76292, 76298, 76306, 76312, 76318, 76325, 76334, 76342, 76350, 76358,
+    76365, 76372, 76379, 76386, 76391, 76396, 76401, 76406, 76411, 76416,
+    76421, 76426, 76434, 76442, 76448, 76454, 76459, 76464, 76469, 76474,
+    76479, 76484, 76489, 76494, 76503, 76512, 76517, 76522, 76532, 76542,
+    76549, 76556, 76565, 76574, 76586, 76598, 76604, 76610, 76618, 76626,
+    76636, 76646, 76653, 76660, 76665, 76670, 76682, 76694, 76702, 76710,
+    76720, 76730, 76742, 76754, 76763, 76772, 76779, 76786, 76793, 76800,
+    76809, 76818, 76823, 76828, 76835, 76842, 76849, 76856, 76868, 76880,
+    76885, 76890, 76895, 76900, 76905, 76910, 76915, 76920, 76924, 76929,
+    76934, 76939, 76944, 76949, 76955, 76960, 76965, 76972, 76979, 76986,
+    76993, 77000, 77008, 77016, 77021, 77026, 77032, 77038, 77045, 77052,
+    77059, 77066, 77073, 77077, 77084, 77089, 77094, 77100, 77113, 77119,
+    77127, 77135, 77142, 77149, 77158, 77167, 77174, 77181, 77188, 77195,
+    77202, 77209, 77216, 77223, 77230, 77237, 77246, 77255, 77264, 77273,
+    77282, 77291, 77300, 77309, 77318, 77327, 77334, 77342, 77348, 77356,
+    77362, 77368, 77374, 77380, 77388, 77393, 77398, 77403, 77408, 77413,
+    77419, 77425, 77431, 77437, 77443, 77449, 77455, 0, 0, 77461, 77468,
+    77475, 77484, 77491, 77500, 77512, 77524, 77536, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77548, 77556, 77564, 77571, 77578, 77584,
+    77591, 77599, 77607, 77615, 77623, 77631, 77637, 77643, 77650, 77656,
+    77662, 77668, 77675, 77682, 77689, 77696, 77703, 77710, 77717, 77724,
+    77731, 77738, 77745, 77752, 77759, 77766, 77772, 77779, 77786, 77793,
+    77800, 77807, 77814, 77821, 77828, 77835, 77842, 77849, 77856, 77863,
+    77870, 77877, 77884, 77891, 77898, 77906, 77914, 77922, 77930, 77938, 0,
+    0, 0, 77947, 77955, 77963, 77971, 77979, 77987, 77995, 78001, 78007,
+    78013, 0, 0, 0, 0, 0, 0, 78019, 78023, 78028, 78033, 78038, 78043, 78048,
+    78053, 78058, 78062, 78067, 78072, 78076, 78080, 78085, 78090, 78094,
+    78099, 78104, 78109, 78114, 78119, 78124, 78129, 78133, 78137, 78141,
+    78146, 78150, 78154, 78158, 78162, 78166, 78170, 78174, 78179, 78184,
+    78189, 78194, 78199, 78206, 78212, 78217, 78222, 78227, 78232, 78238,
+    78245, 78251, 78258, 78264, 78270, 78275, 78282, 78288, 78293, 0, 0, 0,
+    0, 0, 0, 0, 0, 78299, 78304, 78309, 78313, 78318, 78322, 78327, 78331,
+    78336, 78341, 78347, 78352, 78358, 78362, 78367, 78372, 78376, 78381,
+    78386, 78390, 78395, 78400, 78405, 78410, 78415, 78420, 78425, 78430,
+    78435, 78440, 78445, 78450, 78455, 78460, 78464, 78469, 78474, 78479,
+    78483, 78487, 78492, 78497, 78502, 78506, 78510, 78514, 78518, 78523,
+    78528, 78533, 78537, 78541, 78546, 78552, 78558, 78563, 78569, 78574,
+    78580, 78586, 78593, 78599, 78606, 78611, 78617, 78623, 78628, 78634,
+    78640, 78645, 0, 0, 0, 0, 0, 0, 0, 0, 78650, 78654, 78659, 78664, 78668,
+    78672, 78676, 78680, 78684, 78688, 78692, 78696, 0, 0, 0, 0, 0, 0, 78700,
+    78705, 78709, 78713, 78717, 78721, 78725, 78729, 78733, 78737, 78741,
+    78745, 78749, 78753, 78757, 78761, 78765, 78770, 78775, 78781, 78787,
+    78794, 78799, 78804, 78810, 78814, 78819, 78822, 78825, 78829, 78834,
+    78838, 78843, 78850, 78856, 78862, 78868, 78874, 78880, 78886, 78892,
+    78898, 78904, 78910, 78917, 78924, 78931, 78937, 78944, 78951, 78958,
+    78964, 78971, 78977, 78983, 78990, 78996, 79003, 79010, 79016, 79022,
+    79028, 79035, 79042, 79048, 79055, 79062, 79068, 79075, 79081, 79088,
+    79095, 79101, 79107, 79114, 79120, 79127, 79134, 79143, 79150, 79157,
+    79161, 79166, 79171, 79175, 79180, 79184, 79188, 79193, 79197, 79202,
+    79207, 79212, 79216, 79220, 79224, 79228, 79233, 79237, 79242, 79247,
+    79252, 79257, 79261, 79266, 79271, 79276, 79282, 79287, 79293, 79299,
+    79305, 79311, 79317, 79322, 79328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    79332, 79337, 79341, 79345, 79349, 79353, 79357, 79361, 79365, 79369,
+    79373, 79377, 79381, 79385, 79389, 79393, 79397, 79401, 79405, 79409,
+    79413, 79417, 79421, 79425, 79429, 79433, 79437, 79441, 79445, 79449, 0,
+    0, 0, 79453, 79458, 79463, 79468, 79473, 79477, 79484, 79488, 79493,
+    79497, 79504, 79511, 79520, 79524, 79529, 79533, 79537, 79544, 79551,
+    79556, 79563, 79568, 79573, 79580, 79585, 79592, 79599, 79604, 79609,
+    79616, 79621, 79628, 79635, 79639, 79646, 79651, 79658, 79662, 79666,
+    79673, 79678, 79685, 79689, 79693, 79697, 79704, 79708, 79713, 79720,
+    79727, 79731, 79735, 79742, 79748, 79754, 79760, 79768, 79774, 79782,
+    79788, 79796, 79802, 79808, 79814, 79820, 79824, 79829, 79834, 79840,
+    79846, 79852, 79858, 79864, 79870, 79876, 79882, 79890, 79896, 0, 79903,
+    79907, 79912, 79916, 79920, 79924, 79928, 79932, 79936, 79940, 79944, 0,
+    0, 0, 0, 79948, 79956, 79962, 79968, 79974, 79980, 79986, 79992, 79998,
+    80005, 80012, 80019, 80026, 80033, 80040, 80047, 80054, 80061, 80068,
+    80075, 80081, 80087, 80093, 80099, 80105, 80111, 80117, 80123, 80129,
+    80136, 80143, 80150, 80157, 0, 80164, 80168, 80172, 80176, 80180, 80185,
+    80189, 80193, 80198, 80203, 80208, 80213, 80218, 80223, 80228, 80233,
+    80238, 80243, 80248, 80253, 80257, 80262, 80267, 80272, 80277, 80281,
+    80286, 80290, 80295, 80300, 80305, 80310, 80315, 80319, 80324, 80328,
+    80332, 80336, 80341, 80346, 80350, 80354, 80360, 80365, 80371, 80377,
+    80382, 80388, 80393, 80399, 80405, 80411, 80416, 80421, 80426, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 80432, 80438, 80444, 80450, 80457, 80463, 80469, 80475,
+    80481, 80487, 80492, 80497, 80503, 80510, 0, 0, 80517, 80522, 80526,
+    80530, 80534, 80538, 80542, 80546, 80550, 80554, 0, 0, 80558, 80564,
+    80570, 80577, 80585, 80591, 80597, 80603, 80609, 80615, 80621, 80627,
+    80633, 80639, 80645, 80651, 80656, 80661, 80666, 80672, 80678, 80685,
+    80691, 80697, 80702, 80709, 80716, 80723, 80729, 80734, 80739, 80744,
+    80752, 80759, 80766, 80774, 80782, 80789, 80796, 80803, 80810, 80817,
+    80824, 80831, 80838, 80845, 80852, 80859, 80866, 80873, 80880, 80887,
+    80894, 80901, 80908, 80915, 80922, 80928, 80934, 80941, 80948, 80955,
+    80962, 80969, 80976, 80983, 80990, 80997, 81004, 81011, 81018, 81025,
+    81032, 81039, 81046, 81053, 81060, 81067, 81074, 81081, 81088, 81095,
+    81102, 81108, 81114, 81121, 81127, 81132, 81138, 81143, 81148, 81153,
+    81160, 81166, 81172, 81178, 81184, 81190, 81196, 81202, 81210, 81218,
+    81226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 81234, 81240, 81246, 81252, 81260, 81268, 81274, 81280, 81287,
+    81294, 81301, 81308, 81315, 81322, 81329, 81336, 81343, 81351, 81359,
+    81367, 81375, 81383, 81389, 81397, 81403, 81411, 81420, 81428, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 81434, 81438, 81442, 81446, 81450, 81454, 0, 0,
+    81458, 81462, 81466, 81470, 81474, 81478, 0, 0, 81482, 81486, 81490,
+    81494, 81498, 81502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81506, 81510, 81514,
+    81518, 81522, 81526, 81530, 0, 81534, 81538, 81542, 81546, 81550, 81554,
+    81558, 0, 81562, 81569, 81575, 81581, 81587, 81595, 81602, 81611, 81623,
+    81633, 81642, 81650, 81658, 81666, 81672, 81680, 81688, 81695, 81703,
+    81713, 81720, 81729, 81735, 81745, 81754, 81759, 81767, 81776, 81781,
+    81790, 81797, 81807, 81819, 81824, 81830, 81837, 81842, 81852, 81862,
+    81872, 81882, 81897, 81910, 81921, 81929, 81934, 81946, 81955, 81962,
+    81969, 81975, 81982, 81987, 81994, 82000, 82011, 82022, 82032, 82038,
+    82043, 0, 0, 0, 0, 82048, 82052, 82056, 82060, 82064, 82068, 82073,
+    82078, 82082, 82087, 82092, 82097, 82102, 82107, 82111, 82116, 82121,
+    82126, 82131, 82136, 82140, 82145, 82150, 82155, 82160, 82165, 82169,
+    82174, 82179, 82184, 82189, 82193, 82198, 82203, 82208, 82213, 82218,
+    82223, 82228, 82233, 82238, 82243, 82248, 82253, 82258, 82262, 82267,
+    82272, 82277, 82282, 82287, 82292, 82297, 82301, 82306, 82311, 82316,
+    82321, 82326, 82331, 82336, 82341, 82346, 82351, 82356, 82361, 82366,
+    82371, 82376, 82381, 82386, 82391, 82396, 82401, 82406, 82411, 82416,
+    82421, 82426, 82431, 82435, 82442, 82449, 82456, 82463, 82469, 82475,
+    82482, 82489, 82496, 82503, 82510, 82517, 82524, 82531, 82538, 82544,
+    82551, 82558, 82565, 82572, 82579, 82586, 82593, 82600, 82607, 82614,
+    82621, 82630, 82639, 82648, 82657, 82666, 82675, 82684, 82693, 82701,
+    82709, 82717, 82725, 82733, 82741, 82749, 82757, 82763, 82771, 0, 0,
+    82779, 82786, 82792, 82798, 82804, 82810, 82816, 82822, 82828, 82834, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82840, 82845, 82850, 82855, 82860,
+    82865, 82870, 82875, 82880, 82885, 82890, 82895, 82900, 82905, 82910,
+    82915, 82920, 82925, 82930, 82935, 82940, 82945, 82950, 0, 0, 0, 0,
+    82955, 82959, 82963, 82967, 82971, 82975, 82979, 82983, 82987, 82991,
+    82995, 82999, 83003, 83007, 83011, 83015, 83019, 83023, 83027, 83031,
+    83035, 83039, 83043, 83047, 83051, 83055, 83059, 83063, 83067, 83071,
+    83075, 83079, 83083, 83087, 83091, 83095, 83099, 83103, 83107, 83111,
+    83115, 83119, 83123, 83127, 83131, 83135, 83139, 83143, 83147, 0, 0, 0,
+    0, 83151, 83155, 83159, 83163, 83167, 83171, 83175, 83179, 83183, 83187,
+    83191, 83195, 83199, 83203, 83207, 83211, 83215, 83219, 83223, 83227,
+    83231, 83235, 83239, 83243, 83247, 83251, 83255, 83259, 83263, 83267,
+    83271, 83275, 83279, 83283, 83287, 83291, 83295, 83299, 83303, 83307,
+    83311, 83315, 83319, 83323, 83327, 83331, 83335, 83339, 83343, 83347,
+    83351, 83355, 83359, 83363, 83367, 83371, 83375, 83379, 83383, 83387,
+    83391, 83395, 83399, 83403, 83407, 83411, 83415, 83419, 83423, 83427,
+    83431, 83435, 83439, 83443, 83447, 83451, 83455, 83459, 83463, 83467,
+    83471, 83475, 83479, 83483, 83487, 83491, 83495, 83499, 83503, 83507,
+    83511, 83515, 83519, 83523, 83527, 83531, 83535, 83539, 83543, 83547,
+    83551, 83555, 83559, 83563, 83567, 83571, 83575, 83579, 83583, 83587,
+    83591, 83595, 83599, 83603, 83607, 83611, 83615, 83619, 83623, 83627,
+    83631, 83635, 83639, 83643, 83647, 83651, 83655, 83659, 83663, 83667,
+    83671, 83675, 83679, 83683, 83687, 83691, 83695, 83699, 83703, 83707,
+    83711, 83715, 83719, 83723, 83727, 83731, 83735, 83739, 83743, 83747,
+    83751, 83755, 83759, 83763, 83767, 83771, 83775, 83779, 83783, 83787,
+    83791, 83795, 83799, 83803, 83807, 83811, 83815, 83819, 83823, 83827,
+    83831, 83835, 83839, 83843, 83847, 83851, 83855, 83859, 83863, 83867,
+    83871, 83875, 83879, 83883, 83887, 83891, 83895, 83899, 83903, 83907,
+    83911, 83915, 83919, 83923, 83927, 83931, 83935, 83939, 83943, 83947,
+    83951, 83955, 83959, 83963, 83967, 83971, 83975, 83979, 83983, 83987,
+    83991, 83995, 83999, 84003, 84007, 84011, 84015, 84019, 84023, 84027,
+    84031, 84035, 84039, 84043, 84047, 84051, 84055, 84059, 84063, 84067,
+    84071, 84075, 84079, 84083, 84087, 84091, 84095, 84099, 84103, 84107,
+    84111, 84115, 84119, 84123, 84127, 84131, 84135, 84139, 84143, 84147,
+    84151, 84155, 84159, 84163, 84167, 84171, 84175, 84179, 84183, 84187,
+    84191, 84195, 84199, 84203, 84207, 84211, 84215, 84219, 84223, 84227,
+    84231, 84235, 84239, 84243, 84247, 84251, 84255, 84259, 84263, 84267,
+    84271, 84275, 84279, 84283, 84287, 84291, 84295, 84299, 84303, 84307,
+    84311, 84315, 84319, 84323, 84327, 84331, 84335, 84339, 84343, 84347,
+    84351, 84355, 84359, 84363, 84367, 84371, 84375, 84379, 84383, 84387,
+    84391, 84395, 84399, 84403, 84407, 84411, 84415, 84419, 84423, 84427,
+    84431, 84435, 84439, 84443, 84447, 84451, 84455, 84459, 84463, 84467,
+    84471, 84475, 84479, 84483, 84487, 84491, 84495, 84499, 84503, 84507,
+    84511, 84515, 84519, 84523, 84527, 84531, 84535, 84539, 84543, 84547,
+    84551, 84555, 84559, 84563, 84567, 84571, 84575, 84579, 84583, 84587,
+    84591, 84595, 84599, 84603, 84607, 84611, 0, 0, 84615, 84619, 84623,
+    84627, 84631, 84635, 84639, 84643, 84647, 84651, 84655, 84659, 84663,
+    84667, 84671, 84675, 84679, 84683, 84687, 84691, 84695, 84699, 84703,
+    84707, 84711, 84715, 84719, 84723, 84727, 84731, 84735, 84739, 84743,
+    84747, 84751, 84755, 84759, 84763, 84767, 84771, 84775, 84779, 84783,
+    84787, 84791, 84795, 84799, 84803, 84807, 84811, 84815, 84819, 84823,
+    84827, 84831, 84835, 84839, 84843, 84847, 84851, 84855, 84859, 84863,
+    84867, 84871, 84875, 84879, 84883, 84887, 84891, 84895, 84899, 84903,
+    84907, 84911, 84915, 84919, 84923, 84927, 84931, 84935, 84939, 84943,
+    84947, 84951, 84955, 84959, 84963, 84967, 84971, 84975, 84979, 84983,
+    84987, 84991, 84995, 84999, 85003, 85007, 85011, 85015, 85019, 85023,
+    85027, 85031, 85035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85039,
+    85044, 85049, 85054, 85059, 85064, 85072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 85077, 85085, 85093, 85101, 85109, 0, 0, 0, 0, 0, 85117, 85124,
+    85131, 85141, 85147, 85153, 85159, 85165, 85171, 85177, 85184, 85190,
+    85196, 85202, 85211, 85220, 85232, 85244, 85250, 85256, 85262, 85269,
+    85276, 85283, 85290, 85297, 0, 85304, 85311, 85318, 85326, 85333, 0,
+    85340, 0, 85347, 85354, 0, 85361, 85369, 0, 85376, 85383, 85390, 85397,
+    85404, 85411, 85418, 85425, 85432, 85439, 85444, 85451, 85458, 85464,
+    85470, 85476, 85483, 85489, 85495, 85501, 85508, 85514, 85520, 85526,
+    85533, 85539, 85545, 85551, 85558, 85564, 85570, 85576, 85583, 85589,
+    85595, 85601, 85608, 85614, 85620, 85626, 85633, 85639, 85645, 85651,
+    85658, 85664, 85670, 85676, 85683, 85689, 85695, 85701, 85708, 85714,
+    85720, 85726, 85733, 85739, 85745, 85751, 85758, 85764, 85770, 85776,
+    85782, 85788, 85794, 85800, 85806, 85812, 85818, 85824, 85830, 85836,
+    85842, 85848, 85855, 85861, 85867, 85873, 85880, 85886, 85892, 85898,
+    85905, 85911, 85917, 85923, 85930, 85938, 85946, 85952, 85958, 85964,
+    85971, 85980, 85989, 85997, 86005, 86013, 86022, 86030, 86038, 86046,
+    86055, 86062, 86069, 86080, 86091, 86095, 86099, 86105, 86111, 86117,
+    86123, 86133, 86143, 86150, 86157, 86164, 86172, 86180, 86184, 86190, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86196, 86202, 86208,
+    86214, 86221, 86226, 86231, 86237, 86243, 86249, 86255, 86264, 86270,
+    86276, 86284, 86292, 86300, 86308, 86314, 86320, 86326, 86333, 86346,
+    86360, 86371, 86382, 86394, 86406, 86418, 86430, 86441, 86452, 86464,
+    86476, 86488, 86500, 86512, 86524, 86536, 86553, 86570, 86587, 86594,
+    86601, 86608, 86616, 86628, 86639, 86650, 86663, 86674, 86683, 86691,
+    86700, 86708, 86718, 86726, 86735, 86743, 86752, 86760, 86770, 86778,
+    86787, 86795, 86805, 86813, 86821, 86829, 86837, 86844, 86853, 86861,
+    86869, 86878, 86886, 86895, 86903, 86911, 86919, 86928, 86936, 86945,
+    86953, 86961, 86969, 86977, 86986, 86994, 87003, 87011, 87020, 87028,
+    87037, 87045, 87055, 87063, 87071, 87079, 87089, 87097, 87105, 87114,
+    87122, 87131, 87140, 87148, 87158, 87166, 87175, 87183, 87192, 87200,
+    87210, 87218, 87226, 87233, 87241, 87248, 87257, 87264, 87273, 87281,
+    87290, 87298, 87308, 87316, 87325, 87333, 87343, 87351, 87359, 87366,
+    87374, 87381, 87390, 87397, 87407, 87417, 87428, 87437, 87446, 87455,
+    87464, 87473, 87483, 87495, 87507, 87518, 87530, 87543, 87554, 87563,
+    87572, 87580, 87589, 87599, 87607, 87616, 87625, 87633, 87642, 87652,
+    87660, 87669, 87678, 87686, 87695, 87705, 87713, 87723, 87731, 87741,
+    87749, 87757, 87766, 87774, 87784, 87792, 87800, 87810, 87818, 87825,
+    87832, 87841, 87850, 87858, 87867, 87877, 87885, 87896, 87904, 87912,
+    87919, 87927, 87936, 87943, 87955, 87966, 87978, 87989, 88001, 88010,
+    88018, 88027, 88035, 88044, 88053, 88061, 88070, 88078, 88087, 88095,
+    88103, 88111, 88119, 88126, 88135, 88143, 88152, 88160, 88169, 88177,
+    88185, 88194, 88202, 88211, 88219, 88228, 88236, 88244, 88252, 88261,
+    88269, 88278, 88286, 88295, 88303, 88312, 88320, 88328, 88336, 88345,
+    88353, 88362, 88371, 88379, 88388, 88396, 88405, 88413, 88422, 88430,
+    88437, 88445, 88452, 88461, 88469, 88478, 88486, 88495, 88504, 88512,
+    88522, 88530, 88537, 88545, 88552, 88560, 88572, 88585, 88594, 88604,
+    88613, 88623, 88632, 88642, 88651, 88661, 88670, 88680, 88690, 88699,
+    88708, 88717, 88727, 88735, 88744, 88754, 88764, 88774, 88784, 88792,
+    88802, 88810, 88820, 88828, 88838, 88846, 88856, 88864, 88873, 88880,
+    88890, 88898, 88908, 88916, 88926, 88934, 88944, 88952, 88961, 88969,
+    88978, 88986, 88995, 89004, 89013, 89022, 89032, 89040, 89050, 89058,
+    89068, 89076, 89086, 89094, 89104, 89112, 89121, 89128, 89138, 89146,
+    89156, 89164, 89174, 89182, 89192, 89200, 89209, 89217, 89226, 89234,
+    89243, 89252, 89261, 89270, 89279, 89287, 89296, 89304, 89313, 89322,
+    89330, 89340, 89349, 89359, 89369, 89378, 89388, 89397, 89406, 89414,
+    89422, 89427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89432,
+    89443, 89454, 89465, 89475, 89486, 89497, 89507, 89518, 89528, 89538,
+    89547, 89558, 89569, 89580, 89593, 89603, 89613, 89624, 89634, 89644,
+    89654, 89664, 89674, 89684, 89694, 89705, 89716, 89727, 89737, 89747,
+    89759, 89770, 89781, 89791, 89801, 89811, 89821, 89832, 89842, 89852,
+    89864, 89874, 89884, 89896, 89907, 89918, 89928, 89938, 89948, 89958,
+    89970, 89982, 89994, 90005, 90016, 90026, 90036, 90046, 90055, 90064,
+    90074, 90084, 90095, 0, 0, 90105, 90116, 90127, 90137, 90147, 90159,
+    90170, 90181, 90194, 90204, 90216, 90225, 90234, 90245, 90256, 90269,
+    90280, 90293, 90303, 90315, 90325, 90337, 90349, 90362, 90372, 90382,
+    90392, 90403, 90413, 90422, 90432, 90441, 90450, 90460, 90470, 90480,
+    90490, 90500, 90510, 90521, 90531, 90542, 90552, 90563, 90574, 90584,
+    90594, 90604, 90614, 90624, 90634, 90645, 90655, 90666, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90677, 90692, 90707, 90713, 90719, 90725,
+    90731, 90737, 90743, 90749, 90755, 90763, 90767, 90770, 0, 0, 90778,
+    90781, 90784, 90787, 90790, 90793, 90796, 90799, 90802, 90805, 90808,
+    90811, 90814, 90817, 90820, 90823, 90826, 90834, 90843, 90854, 90862,
+    90870, 90879, 90888, 90899, 90911, 0, 0, 0, 0, 0, 0, 90921, 90926, 90931,
+    90938, 90945, 90951, 90957, 90962, 90967, 90972, 90978, 90984, 90990,
+    90996, 91002, 91009, 91016, 91026, 91036, 91046, 91055, 91066, 91075,
+    91084, 91094, 91104, 91116, 91128, 91139, 91150, 91161, 91172, 91182,
+    91192, 91202, 91212, 91223, 91234, 91238, 91243, 91252, 91261, 91265,
+    91269, 91273, 91278, 91283, 91288, 91293, 91296, 91300, 0, 91305, 91308,
+    91311, 91315, 91319, 91324, 91328, 91332, 91337, 91342, 91349, 91356,
+    91359, 91362, 91365, 91368, 91371, 91375, 91379, 0, 91383, 91388, 91392,
+    91396, 0, 0, 0, 0, 91401, 91406, 91413, 91418, 91423, 0, 91428, 91433,
+    91439, 91444, 91450, 91455, 91461, 91466, 91472, 91477, 91483, 91489,
+    91498, 91507, 91516, 91525, 91535, 91545, 91555, 91565, 91574, 91583,
+    91592, 91602, 91607, 91612, 91618, 91624, 91630, 91637, 91645, 91653,
+    91659, 91665, 91671, 91678, 91684, 91690, 91696, 91703, 91709, 91715,
+    91721, 91728, 91733, 91738, 91743, 91749, 91755, 91761, 91767, 91774,
+    91780, 91786, 91792, 91798, 91804, 91810, 91816, 91822, 91828, 91834,
+    91840, 91847, 91853, 91859, 91865, 91872, 91878, 91884, 91890, 91897,
+    91903, 91909, 91915, 91922, 91928, 91934, 91940, 91947, 91953, 91959,
+    91965, 91972, 91978, 91984, 91990, 91997, 92003, 92009, 92015, 92022,
+    92028, 92034, 92040, 92047, 92053, 92059, 92065, 92072, 92078, 92084,
+    92090, 92097, 92103, 92109, 92115, 92122, 92127, 92132, 92137, 92143,
+    92149, 92155, 92161, 92168, 92174, 92180, 92186, 92193, 92199, 92205,
+    92212, 92219, 92224, 92229, 92234, 92240, 92252, 92264, 92276, 92288,
+    92301, 92314, 92322, 0, 0, 92330, 0, 92338, 92342, 92346, 92349, 92353,
+    92357, 92360, 92363, 92367, 92371, 92374, 92377, 92380, 92383, 92388,
+    92391, 92395, 92398, 92401, 92404, 92407, 92410, 92413, 92416, 92419,
+    92422, 92425, 92428, 92432, 92436, 92440, 92444, 92449, 92454, 92460,
+    92466, 92472, 92477, 92483, 92489, 92495, 92500, 92506, 92512, 92517,
+    92523, 92529, 92534, 92540, 92546, 92551, 92557, 92563, 92568, 92574,
+    92580, 92586, 92592, 92598, 92602, 92607, 92611, 92616, 92620, 92625,
+    92630, 92636, 92642, 92648, 92653, 92659, 92665, 92671, 92676, 92682,
+    92688, 92693, 92699, 92705, 92710, 92716, 92722, 92727, 92733, 92739,
+    92744, 92750, 92756, 92762, 92768, 92774, 92779, 92783, 92788, 92791,
+    92796, 92801, 92807, 92812, 92817, 92821, 92826, 92831, 92836, 92841,
+    92846, 92851, 92856, 92861, 92867, 92873, 92879, 92887, 92891, 92895,
+    92899, 92903, 92907, 92911, 92916, 92921, 92926, 92931, 92935, 92940,
+    92945, 92950, 92955, 92959, 92964, 92969, 92974, 92978, 92982, 92987,
+    92992, 92997, 93002, 93006, 93011, 93016, 93021, 93026, 93030, 93035,
+    93040, 93045, 93050, 93054, 93059, 93064, 93068, 93073, 93078, 93083,
+    93088, 93093, 93098, 93105, 93112, 93116, 93121, 93126, 93131, 93136,
+    93141, 93146, 93151, 93156, 93161, 93166, 93171, 93176, 93181, 93186,
+    93191, 93196, 93201, 93206, 93211, 93216, 93221, 93226, 93231, 93236,
+    93241, 93246, 93251, 93256, 93261, 0, 0, 0, 93266, 93270, 93275, 93279,
+    93284, 93289, 0, 0, 93293, 93298, 93303, 93307, 93312, 93317, 0, 0,
+    93322, 93327, 93331, 93336, 93341, 93346, 0, 0, 93351, 93356, 93361, 0,
+    0, 0, 93365, 93369, 93373, 93377, 93380, 93384, 93388, 0, 93392, 93398,
+    93401, 93405, 93408, 93412, 93416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93420,
+    93426, 93432, 93438, 93444, 0, 0, 93448, 93454, 93460, 93466, 93472,
+    93478, 93485, 93492, 93499, 93506, 93513, 93520, 0, 93527, 93534, 93541,
+    93547, 93554, 93561, 93568, 93575, 93581, 93588, 93595, 93602, 93609,
+    93615, 93622, 93629, 93636, 93643, 93649, 93656, 93663, 93670, 93677,
+    93684, 93691, 93698, 0, 93705, 93711, 93718, 93725, 93732, 93739, 93745,
+    93752, 93759, 93766, 93773, 93779, 93786, 93793, 93799, 93806, 93813,
+    93820, 93827, 0, 93834, 93841, 0, 93848, 93855, 93862, 93869, 93876,
+    93883, 93890, 93897, 93904, 93911, 93918, 93925, 93932, 93939, 93946, 0,
+    0, 93952, 93957, 93962, 93967, 93972, 93977, 93982, 93987, 93992, 93997,
+    94002, 94007, 94012, 94017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94022, 94029,
+    94036, 94043, 94050, 94057, 94064, 94071, 94078, 94085, 94092, 94099,
+    94106, 94113, 94120, 94127, 94134, 94141, 94148, 94155, 94163, 94171,
+    94178, 94185, 94190, 94198, 94206, 94213, 94220, 94225, 94232, 94237,
+    94242, 94249, 94254, 94259, 94264, 94272, 94277, 94282, 94289, 94294,
+    94299, 94306, 94313, 94318, 94323, 94328, 94333, 94338, 94343, 94348,
+    94353, 94358, 94365, 94370, 94377, 94382, 94387, 94392, 94397, 94402,
+    94407, 94412, 94417, 94422, 94427, 94432, 94439, 94446, 94453, 94460,
+    94466, 94471, 94478, 94483, 94488, 94497, 94504, 94513, 94520, 94525,
+    94530, 94538, 94543, 94548, 94553, 94558, 94563, 94570, 94575, 94580,
+    94585, 94590, 94595, 94602, 94609, 94616, 94623, 94630, 94637, 94644,
+    94651, 94658, 94665, 94672, 94679, 94686, 94693, 94700, 94707, 94714,
+    94721, 94728, 94735, 94742, 94749, 94756, 94763, 94770, 94777, 94784,
+    94791, 0, 0, 0, 0, 0, 94798, 94806, 94814, 0, 0, 0, 0, 94819, 94823,
+    94827, 94831, 94835, 94839, 94843, 94847, 94851, 94855, 94860, 94865,
+    94870, 94875, 94880, 94885, 94890, 94895, 94900, 94906, 94912, 94918,
+    94925, 94932, 94939, 94946, 94953, 94960, 94965, 94970, 94975, 94981,
+    94987, 94993, 94999, 95005, 95011, 95017, 95023, 95029, 95035, 95041,
+    95047, 95053, 95059, 0, 0, 0, 95065, 95073, 95081, 95089, 95097, 95105,
+    95115, 95125, 95133, 95141, 95149, 95157, 95165, 95171, 95178, 95187,
+    95195, 95203, 95212, 95221, 95230, 95240, 95251, 95261, 95272, 95281,
+    95290, 95299, 95309, 95320, 95330, 95341, 95352, 95361, 95369, 95375,
+    95381, 95387, 95393, 95401, 95409, 95415, 95422, 95432, 95439, 95446,
+    95453, 95460, 95467, 95477, 95484, 95491, 95499, 95507, 95516, 95525,
+    95534, 95543, 95552, 95559, 95567, 95576, 95585, 95589, 95596, 95601,
+    95606, 95610, 95614, 95618, 95622, 95627, 95632, 95638, 95644, 95648,
+    95654, 95658, 95662, 95666, 95670, 95674, 95678, 95684, 95688, 95693,
+    95697, 95701, 0, 95704, 95709, 95714, 95719, 95724, 95731, 95736, 95741,
+    95746, 95751, 95756, 95761, 95766, 0, 0, 0, 95769, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95775, 95782, 95791,
+    95800, 95807, 95814, 95821, 95828, 95835, 95842, 95848, 95855, 95862,
+    95869, 95876, 95883, 95890, 95897, 95904, 95913, 95920, 95927, 95934,
+    95941, 95948, 95955, 95962, 95969, 95978, 95985, 95992, 95999, 96006,
+    96013, 96020, 96029, 96036, 96043, 96050, 96057, 96066, 96073, 96080,
+    96087, 96095, 96104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96113, 96117, 96121,
+    96126, 96131, 96136, 96141, 96145, 96150, 96155, 96160, 96165, 96170,
+    96175, 96179, 96184, 96189, 96194, 96199, 96203, 96208, 96213, 96217,
+    96222, 96227, 96232, 96237, 96242, 96247, 0, 0, 0, 96252, 96256, 96261,
+    96266, 96270, 96275, 96279, 96284, 96289, 96294, 96299, 96304, 96308,
+    96313, 96318, 96323, 96328, 96333, 96338, 96342, 96347, 96352, 96357,
+    96362, 96367, 96372, 96376, 96380, 96385, 96390, 96395, 96400, 96405,
+    96410, 96415, 96420, 96425, 96430, 96435, 96440, 96445, 96450, 96455,
+    96460, 96465, 96470, 96475, 96480, 96485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 96490, 96496, 96501, 96506, 96511, 96516, 96521, 96526,
+    96531, 96536, 96541, 96547, 96553, 96559, 96565, 96571, 96577, 96583,
+    96589, 96595, 96602, 96609, 96616, 96624, 96632, 96640, 96648, 96656, 0,
+    0, 0, 0, 96664, 96668, 96673, 96678, 96683, 96687, 96692, 96697, 96702,
+    96707, 96711, 96715, 96720, 96725, 96730, 96735, 96739, 96744, 96749,
+    96754, 96759, 96764, 96769, 96773, 96778, 96783, 96788, 96793, 96798,
+    96803, 96808, 96813, 96818, 96823, 96828, 96834, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 96840, 96845, 96852, 96859, 96864, 96869, 96874, 96879, 96884, 96889,
+    96894, 96899, 96904, 96909, 96914, 96919, 96924, 96929, 96934, 96939,
+    96944, 96949, 96954, 96959, 96964, 96969, 96974, 96979, 96984, 96989, 0,
+    0, 0, 0, 0, 96996, 97002, 97008, 97014, 97020, 97025, 97031, 97037,
+    97043, 97049, 97054, 97060, 97066, 97072, 97078, 97084, 97090, 97096,
+    97102, 97108, 97113, 97119, 97125, 97131, 97137, 97143, 97148, 97154,
+    97160, 97165, 97171, 97177, 97183, 97189, 97195, 97201, 97207, 97212,
+    97218, 97225, 97232, 97239, 97246, 0, 0, 0, 0, 0, 97253, 97258, 97263,
+    97268, 97273, 97278, 97283, 97288, 97293, 97298, 97303, 97308, 97313,
+    97318, 97323, 97328, 97333, 97338, 97343, 97348, 97353, 97358, 97363,
+    97368, 97373, 97378, 97383, 97387, 97391, 97395, 0, 97400, 97406, 97411,
+    97416, 97421, 97426, 97432, 97438, 97444, 97450, 97456, 97462, 97468,
+    97473, 97479, 97485, 97491, 97497, 97503, 97508, 97514, 97520, 97525,
+    97531, 97536, 97542, 97548, 97553, 97559, 97565, 97570, 97576, 97581,
+    97586, 97592, 97598, 97604, 0, 0, 0, 0, 97609, 97615, 97621, 97627,
+    97633, 97639, 97645, 97651, 97657, 97664, 97669, 97674, 97680, 97686, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97692, 97698, 97704,
+    97710, 97717, 97723, 97730, 97737, 97744, 97751, 97759, 97766, 97774,
+    97780, 97786, 97792, 97798, 97804, 97810, 97816, 97822, 97828, 97834,
+    97840, 97846, 97852, 97858, 97864, 97870, 97876, 97882, 97888, 97894,
+    97900, 97906, 97912, 97918, 97924, 97930, 97936, 97942, 97948, 97954,
+    97960, 97967, 97973, 97980, 97987, 97994, 98001, 98009, 98016, 98024,
+    98030, 98036, 98042, 98048, 98054, 98060, 98066, 98072, 98078, 98084,
+    98090, 98096, 98102, 98108, 98114, 98120, 98126, 98132, 98138, 98144,
+    98150, 98156, 98162, 98168, 98174, 98180, 98186, 98192, 98197, 98202,
+    98207, 98212, 98217, 98222, 98227, 98232, 98237, 98242, 98247, 98252,
+    98257, 98262, 98267, 98272, 98277, 98282, 98287, 98292, 98297, 98302,
+    98307, 98312, 98317, 98322, 98327, 98332, 98337, 98342, 98347, 98352,
+    98357, 98362, 98367, 98372, 98377, 98382, 98387, 98392, 98397, 98402,
+    98407, 98412, 98417, 98422, 98427, 98432, 98437, 98442, 98446, 98451,
+    98456, 98461, 98466, 98470, 98474, 98479, 98484, 98489, 98494, 98499,
+    98504, 98509, 98514, 98519, 98524, 98529, 98533, 98537, 98541, 98545,
+    98549, 98553, 98557, 98562, 98567, 0, 0, 98572, 98577, 98581, 98585,
+    98589, 98593, 98597, 98601, 98605, 98609, 0, 0, 0, 0, 0, 0, 98613, 98618,
+    98624, 98630, 98636, 98642, 98648, 98654, 98659, 98665, 98670, 98676,
+    98681, 98686, 98692, 98698, 98703, 98708, 98713, 98718, 98724, 98729,
+    98735, 98740, 98746, 98751, 98757, 98763, 98769, 98775, 98781, 98786,
+    98792, 98798, 98804, 98810, 0, 0, 0, 0, 98816, 98821, 98827, 98833,
+    98839, 98845, 98851, 98857, 98862, 98868, 98873, 98879, 98884, 98889,
+    98895, 98901, 98906, 98911, 98916, 98921, 98927, 98932, 98938, 98943,
+    98949, 98954, 98960, 98966, 98972, 98978, 98984, 98989, 98995, 99001,
+    99007, 99013, 0, 0, 0, 0, 99019, 99023, 99028, 99033, 99038, 99043,
+    99048, 99053, 99058, 99062, 99067, 99072, 99077, 99082, 99086, 99091,
+    99096, 99101, 99106, 99111, 99116, 99120, 99125, 99129, 99134, 99139,
+    99144, 99149, 99154, 99159, 99164, 99169, 99173, 99178, 99183, 99188,
+    99193, 99198, 99203, 99208, 0, 0, 0, 0, 0, 0, 0, 0, 99213, 99220, 99227,
+    99234, 99241, 99248, 99255, 99262, 99269, 99276, 99283, 99290, 99297,
+    99304, 99311, 99318, 99325, 99332, 99339, 99346, 99353, 99360, 99367,
+    99374, 99381, 99388, 99395, 99402, 99409, 99416, 99423, 99430, 99437,
+    99444, 99451, 99458, 99465, 99472, 99479, 99486, 99493, 99500, 99507,
+    99514, 99521, 99528, 99535, 99542, 99549, 99556, 99563, 99570, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 99577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99584, 99589, 99594, 99599, 99604, 99609,
+    99614, 99619, 99624, 99629, 99634, 99639, 99644, 99649, 99654, 99659,
+    99664, 99669, 99674, 99679, 99684, 99689, 99694, 99699, 99704, 99709,
+    99714, 99719, 99724, 99729, 99734, 99739, 99744, 99749, 99754, 99759,
+    99764, 99769, 99774, 99779, 99784, 99789, 99794, 99799, 99804, 99809,
+    99814, 99819, 99824, 99829, 99834, 99839, 99844, 99849, 99854, 99859,
+    99864, 99869, 99874, 99879, 99884, 99889, 99894, 99899, 99904, 99909,
+    99914, 99919, 99924, 99929, 99934, 99939, 99944, 99949, 99954, 99959,
+    99964, 99969, 99974, 99979, 99984, 99989, 99994, 99999, 100004, 100009,
+    100014, 100019, 100024, 100029, 100034, 100039, 100044, 100049, 100054,
+    100059, 100064, 100069, 100074, 100079, 100084, 100089, 100094, 100099,
+    100104, 100109, 100114, 100119, 100124, 100129, 100134, 100139, 100144,
+    100149, 100154, 100159, 100164, 100169, 100174, 100179, 100184, 100189,
+    100194, 100199, 100204, 100209, 100214, 100219, 100224, 100229, 100234,
+    100239, 100244, 100249, 100254, 100259, 100264, 100269, 100274, 100279,
+    100284, 100289, 100294, 100299, 100304, 100309, 100314, 100319, 100324,
+    100329, 100334, 100339, 100344, 100349, 100354, 100359, 100364, 100369,
+    100374, 100379, 100384, 100389, 100394, 100399, 100404, 100409, 100414,
+    100419, 100424, 100429, 100434, 100439, 100444, 100449, 100454, 100459,
+    100464, 100469, 100474, 100479, 100484, 100489, 100494, 100499, 100504,
+    100509, 100514, 100519, 100524, 100529, 100534, 100539, 100544, 100549,
+    100554, 100559, 100564, 100569, 100574, 100579, 100584, 100589, 100594,
+    100599, 100604, 100609, 100614, 100619, 100624, 100629, 100634, 100639,
+    100644, 100649, 100654, 100659, 100664, 100669, 100674, 100679, 100684,
+    100689, 100694, 100699, 100704, 100709, 100714, 100719, 100724, 100729,
+    100734, 100739, 100744, 100749, 100754, 100759, 100764, 100769, 100774,
+    100779, 100784, 100789, 100794, 100799, 100804, 100809, 100814, 100819,
+    100824, 100829, 100834, 100839, 100844, 100849, 100854, 100859, 100864,
+    100869, 100874, 100879, 100884, 100889, 100894, 100899, 100904, 100909,
+    100914, 100919, 100924, 100929, 100934, 100939, 100944, 100949, 100954,
+    100959, 100964, 100969, 100974, 100979, 100984, 100989, 100994, 100999,
+    101004, 101009, 101014, 101019, 101024, 101029, 101034, 101039, 101044,
+    101049, 101054, 101059, 101064, 101069, 101074, 101079, 101084, 101089,
+    101094, 101099, 101104, 101109, 101114, 101119, 101124, 101129, 101134,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 101139, 101145, 101152, 101159, 101165,
+    101172, 101179, 101186, 101193, 101199, 101206, 101213, 101220, 101227,
+    101234, 101241, 101248, 101255, 101262, 101269, 101276, 101283, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 101290, 101295, 101300, 101305, 101310, 101315,
+    101320, 101325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101330, 101334, 101338, 101342,
+    101346, 101350, 0, 0, 101355, 0, 101360, 101364, 101369, 101374, 101379,
+    101384, 101388, 101393, 101398, 101403, 101408, 101412, 101417, 101422,
+    101427, 101432, 101436, 101441, 101446, 101451, 101456, 101460, 101465,
+    101470, 101475, 101480, 101484, 101489, 101494, 101499, 101504, 101508,
+    101513, 101518, 101523, 101528, 101532, 101537, 101542, 101546, 101551,
+    101556, 101561, 101566, 0, 101571, 101576, 0, 0, 0, 101581, 0, 0, 101586,
+    101591, 101598, 101605, 101612, 101619, 101626, 101633, 101640, 101647,
+    101654, 101661, 101668, 101675, 101682, 101689, 101696, 101703, 101710,
+    101717, 101724, 101731, 101738, 0, 101745, 101752, 101758, 101764,
+    101770, 101777, 101784, 101792, 101799, 101807, 101812, 101817, 101822,
+    101827, 101832, 101837, 101842, 101847, 101852, 101857, 101862, 101867,
+    101872, 101878, 101883, 101888, 101893, 101898, 101903, 101908, 101913,
+    101918, 101923, 101929, 101935, 101939, 101943, 101947, 101951, 101955,
+    101960, 101965, 101971, 101976, 101982, 101987, 101992, 101997, 102003,
+    102008, 102013, 102018, 102023, 102028, 102034, 102039, 102045, 102050,
+    102056, 102061, 102067, 102072, 102078, 102083, 102088, 102093, 102098,
+    102103, 102108, 102113, 102119, 102124, 0, 0, 0, 0, 0, 0, 0, 0, 102129,
+    102133, 102137, 102141, 102145, 102151, 102155, 102160, 102165, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102171,
+    102176, 102181, 102186, 102191, 102196, 102201, 102206, 102211, 102216,
+    102221, 102226, 102231, 102236, 102241, 102246, 102251, 102256, 102261,
+    0, 102266, 102271, 0, 0, 0, 0, 0, 102276, 102280, 102284, 102289, 102294,
+    102300, 102305, 102310, 102315, 102320, 102325, 102330, 102335, 102340,
+    102345, 102350, 102355, 102360, 102365, 102370, 102375, 102380, 102385,
+    102390, 102395, 102400, 102405, 102410, 102414, 102419, 102424, 102430,
+    102434, 0, 0, 0, 102438, 102444, 102448, 102453, 102458, 102463, 102467,
+    102472, 102476, 102481, 102486, 102490, 102495, 102500, 102504, 102508,
+    102513, 102518, 102522, 102527, 102532, 102537, 102542, 102547, 102552,
+    102557, 102562, 0, 0, 0, 0, 0, 102567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 102572, 102577, 102582, 102587, 102592, 102597, 102603,
+    102609, 102615, 102620, 102625, 102630, 102636, 102642, 102648, 102653,
+    102659, 102664, 102670, 102676, 102681, 102687, 102693, 102698, 102704,
+    102709, 102715, 102721, 102727, 102732, 102738, 102744, 102750, 102755,
+    102760, 102765, 102770, 102775, 102781, 102787, 102792, 102797, 102802,
+    102808, 102813, 102818, 102824, 102830, 102835, 102842, 102848, 102853,
+    102859, 102864, 102870, 102875, 0, 0, 0, 0, 102881, 102890, 102898,
+    102905, 102912, 102917, 102922, 102927, 102932, 102937, 102942, 102947,
+    102952, 102957, 102963, 102969, 102975, 102981, 102987, 102993, 0, 0,
+    102999, 103006, 103013, 103020, 103028, 103036, 103044, 103052, 103060,
+    103068, 103074, 103080, 103086, 103093, 103100, 103107, 103114, 103121,
+    103128, 103135, 103142, 103149, 103156, 103163, 103170, 103177, 103184,
+    103191, 103199, 103207, 103215, 103224, 103233, 103242, 103251, 103260,
+    103269, 103277, 103285, 103293, 103302, 103311, 103320, 103329, 103338,
+    103347, 103356, 103360, 103365, 103370, 0, 103376, 103381, 0, 0, 0, 0, 0,
+    103386, 103392, 103399, 103404, 103409, 103413, 103418, 103423, 0,
+    103428, 103433, 103438, 0, 103443, 103448, 103453, 103458, 103463,
+    103468, 103473, 103477, 103482, 103487, 103492, 103496, 103500, 103505,
+    103510, 103515, 103519, 103523, 103527, 103531, 103536, 103541, 103546,
+    103550, 103555, 103559, 103564, 103569, 103574, 0, 0, 103579, 103585,
+    103590, 0, 0, 0, 0, 103595, 103599, 103603, 103607, 103611, 103615,
+    103620, 103625, 103631, 103636, 0, 0, 0, 0, 0, 0, 0, 103643, 103649,
+    103656, 103662, 103669, 103675, 103681, 103687, 103694, 0, 0, 0, 0, 0, 0,
+    0, 103700, 103708, 103716, 103724, 103732, 103740, 103748, 103756,
+    103764, 103772, 103780, 103788, 103796, 103804, 103812, 103820, 103828,
+    103836, 103844, 103852, 103860, 103868, 103876, 103884, 103892, 103900,
+    103908, 103916, 103924, 103932, 103939, 103947, 103955, 103962, 103969,
+    103976, 103983, 103990, 103997, 104004, 104011, 104018, 104025, 104032,
+    104039, 104046, 104053, 104060, 104067, 104074, 104081, 104088, 104095,
+    104102, 104109, 104116, 104123, 104130, 104137, 104144, 104151, 104158,
+    104164, 104171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104178, 104183, 104188, 104193,
+    104198, 104203, 104208, 104213, 104218, 104223, 104228, 104233, 104238,
+    104243, 104248, 104253, 104258, 104263, 104268, 104273, 104278, 104283,
+    104288, 104293, 104298, 104303, 104308, 104313, 104318, 104323, 104328,
+    104333, 104338, 104343, 104348, 104353, 104358, 104363, 104369, 0, 0, 0,
+    0, 104375, 104379, 104383, 104388, 104393, 104399, 104405, 104411,
+    104421, 104430, 104436, 104443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104451,
+    104455, 104460, 104465, 104470, 104475, 104480, 104485, 104490, 104494,
+    104499, 104503, 104508, 104512, 104517, 104521, 104526, 104531, 104536,
+    104541, 104546, 104551, 104556, 104561, 104566, 104571, 104576, 104581,
+    104586, 104591, 104596, 104601, 104606, 104611, 104616, 104621, 104626,
+    104631, 104636, 104641, 104646, 104651, 104656, 104661, 104666, 104671,
+    104676, 104681, 104686, 104691, 104696, 104701, 104706, 104711, 0, 0, 0,
+    104716, 104721, 104731, 104740, 104750, 104760, 104771, 104782, 104789,
+    104796, 104803, 104810, 104817, 104824, 104831, 104838, 104845, 104852,
+    104859, 104866, 104873, 104880, 104887, 104894, 104901, 104908, 104915,
+    104922, 104929, 0, 0, 104936, 104942, 104948, 104954, 104960, 104967,
+    104974, 104982, 104989, 104996, 105003, 105010, 105017, 105024, 105031,
+    105038, 105045, 105052, 105059, 105066, 105073, 105080, 105087, 105094,
+    105101, 105108, 105115, 0, 0, 0, 0, 0, 105122, 105128, 105134, 105140,
+    105146, 105153, 105160, 105168, 105175, 105182, 105189, 105196, 105203,
+    105210, 105217, 105224, 105231, 105238, 105245, 105252, 105259, 105266,
+    105273, 105280, 105287, 105294, 0, 0, 0, 0, 0, 0, 0, 105301, 105308,
+    105316, 105327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105338, 105344,
+    105350, 105356, 105362, 105369, 105376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105384,
+    105391, 105398, 105406, 105413, 105420, 105427, 105434, 105442, 105450,
+    105458, 105466, 105474, 105482, 105490, 105498, 105506, 105514, 105522,
+    105530, 105538, 105546, 105554, 105562, 105570, 105578, 105586, 105594,
+    105602, 105610, 105618, 105626, 105634, 105642, 105650, 105658, 105666,
+    105674, 105682, 105690, 105698, 105706, 105714, 105722, 105730, 105738,
+    105746, 105754, 105762, 105770, 105778, 105786, 105794, 105802, 105810,
+    105818, 105826, 105834, 105842, 105850, 105858, 105866, 105874, 105882,
+    105890, 105898, 105906, 105914, 105922, 105930, 105938, 105946, 105954,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 105962, 105967, 105973, 105979, 105985, 105991,
+    105997, 106003, 106009, 106015, 106020, 106027, 106033, 106039, 106045,
+    106051, 106057, 106062, 106068, 106074, 106080, 106086, 106092, 106098,
+    106104, 106110, 106116, 106122, 106127, 106133, 106141, 106149, 106155,
+    106161, 106167, 106173, 106181, 106187, 106193, 106199, 106205, 106211,
+    106217, 106222, 106228, 106236, 106244, 106250, 106256, 106262, 106269,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106275, 106280, 106286, 106292,
+    106298, 106304, 106310, 106316, 106322, 106328, 106333, 106340, 106346,
+    106352, 106358, 106364, 106370, 106375, 106381, 106387, 106393, 106399,
+    106405, 106411, 106417, 106423, 106429, 106435, 106440, 106446, 106454,
+    106462, 106468, 106474, 106480, 106486, 106494, 106500, 106506, 106512,
+    106518, 106524, 106530, 106535, 106541, 106549, 106557, 106563, 106569,
+    106575, 106582, 0, 0, 0, 0, 0, 0, 0, 106588, 106592, 106596, 106601,
+    106606, 106612, 106617, 106623, 106630, 106636, 106642, 106649, 106656,
+    106663, 106669, 106676, 106683, 106690, 106697, 106703, 106710, 106717,
+    106723, 106730, 106736, 106743, 106749, 106755, 106761, 106768, 106777,
+    106783, 106791, 106798, 106805, 106812, 106818, 106824, 106830, 106836,
+    106842, 106849, 106858, 106865, 106872, 106879, 0, 0, 0, 0, 0, 0, 0, 0,
+    106886, 106893, 106899, 106905, 106911, 106917, 106923, 106929, 106935,
+    106941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 106947, 106951, 106955, 106959, 106963, 106967,
+    106971, 106975, 106979, 106983, 106988, 106993, 106998, 107003, 107008,
+    107013, 107018, 107023, 107028, 107034, 107040, 107046, 107053, 107060,
+    107067, 107074, 107081, 107088, 107095, 107102, 107109, 0, 107116,
+    107121, 107126, 107131, 107136, 107141, 107146, 107151, 107156, 107161,
+    107166, 107171, 107176, 107181, 107185, 107190, 107195, 107200, 107205,
+    107210, 107215, 107220, 107224, 107229, 107234, 107239, 107244, 107249,
+    107257, 107262, 107267, 107272, 107277, 107282, 107287, 107292, 107297,
+    107302, 107307, 107312, 107317, 107322, 0, 107327, 107333, 107339, 0, 0,
+    107344, 107352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107361, 107367, 107374, 107380, 107387,
+    107393, 107399, 107406, 107412, 107418, 107424, 107430, 107436, 107442,
+    107448, 107454, 107461, 107472, 107478, 107484, 107492, 107498, 107504,
+    107511, 107522, 107528, 107534, 107540, 107547, 107558, 107563, 107568,
+    107573, 107578, 107583, 107589, 107595, 107601, 107608, 107616, 0, 0, 0,
+    0, 0, 0, 0, 0, 107622, 107627, 107632, 107637, 107642, 107647, 107652,
+    107657, 107662, 107667, 107672, 107677, 107682, 107687, 107692, 107697,
+    107702, 107707, 107712, 107717, 107722, 107727, 107733, 107738, 107745,
+    107750, 107757, 107763, 107769, 107775, 107781, 107788, 107794, 107800,
+    107804, 107809, 107814, 107820, 107828, 107839, 107848, 107858, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107868, 107873, 107879, 107884, 107889,
+    107894, 107899, 107904, 107911, 107916, 107921, 107926, 107931, 107936,
+    107941, 107946, 107951, 107956, 107961, 107966, 107971, 107976, 107980,
+    107984, 107988, 107992, 107997, 108002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 108008, 108013, 108018, 108023, 108028,
+    108033, 108038, 108043, 108048, 108053, 108058, 108063, 108068, 108073,
+    108078, 108083, 108088, 108093, 108098, 108103, 108108, 108113, 108118,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 108123, 108127, 108131, 108135, 108139,
+    108143, 108146, 108150, 108153, 108157, 108160, 108164, 108168, 108173,
+    108177, 108182, 108185, 108189, 108192, 108196, 108199, 108203, 108207,
+    108211, 108215, 108219, 108223, 108227, 108231, 108235, 108239, 108243,
+    108247, 108251, 108255, 108258, 108262, 108266, 108270, 108273, 108276,
+    108280, 108284, 108288, 108291, 108294, 108297, 108300, 108304, 108308,
+    108312, 108315, 108318, 108322, 108328, 108334, 108340, 108345, 108352,
+    108356, 108361, 108365, 108370, 108375, 108381, 108386, 108392, 108396,
+    108401, 108405, 108410, 108413, 108416, 108420, 108425, 108431, 108436,
+    108442, 0, 0, 0, 0, 108447, 108450, 108453, 108456, 108459, 108462,
+    108465, 108468, 108471, 108474, 108478, 108482, 108486, 108490, 108494,
+    108498, 108502, 108506, 108510, 108515, 108519, 108523, 108526, 108529,
+    108532, 108535, 108538, 108541, 108544, 108547, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 108550, 108554, 108559, 108564, 108569, 108573,
+    108578, 108582, 108587, 108591, 108596, 108600, 108605, 108609, 108614,
+    108618, 108623, 108628, 108633, 108638, 108643, 108648, 108653, 108658,
+    108663, 108668, 108673, 108678, 108683, 108688, 108693, 108698, 108702,
+    108707, 108712, 108717, 108721, 108725, 108730, 108735, 108740, 108744,
+    108748, 108752, 108756, 108761, 108766, 108771, 108775, 108779, 108785,
+    108790, 108796, 108801, 108807, 108812, 108818, 108823, 108829, 108834,
+    108839, 108844, 108849, 108853, 108858, 108864, 108868, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 108873, 0, 0, 108878, 108885, 108892, 108899, 108906,
+    108913, 108920, 108927, 108934, 108941, 108948, 108955, 108962, 108969,
+    108976, 108983, 108990, 108997, 109004, 109011, 109018, 109025, 109032,
+    109039, 109046, 0, 0, 0, 0, 0, 0, 0, 109053, 109060, 109066, 109072,
+    109078, 109084, 109090, 109096, 109102, 109108, 0, 0, 0, 0, 0, 0, 109114,
+    109119, 109124, 109129, 109134, 109138, 109142, 109146, 109151, 109156,
+    109161, 109166, 109171, 109176, 109181, 109186, 109191, 109196, 109201,
+    109206, 109211, 109216, 109221, 109226, 109231, 109236, 109241, 109246,
+    109251, 109256, 109261, 109266, 109271, 109276, 109281, 109286, 109291,
+    109296, 109301, 109306, 109311, 109316, 109322, 109327, 109333, 109338,
+    109344, 109349, 109355, 109361, 109365, 109370, 109374, 0, 109378,
+    109383, 109387, 109391, 109395, 109399, 109403, 109407, 109411, 109415,
+    109419, 109424, 109428, 109433, 109438, 109443, 109449, 109455, 0, 0, 0,
+    0, 0, 0, 0, 0, 109460, 109464, 109468, 109472, 109476, 109480, 109484,
+    109489, 109494, 109499, 109504, 109509, 109514, 109519, 109524, 109529,
+    109534, 109539, 109544, 109549, 109553, 109558, 109563, 109568, 109572,
+    109576, 109581, 109586, 109591, 109595, 109599, 109603, 109608, 109612,
+    109616, 109621, 109626, 109631, 109636, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    109641, 109646, 109651, 109656, 109660, 109665, 109669, 109674, 109678,
+    109683, 109688, 109694, 109699, 109705, 109709, 109714, 109718, 109723,
+    109727, 109732, 109737, 109742, 109747, 109752, 109757, 109762, 109767,
+    109772, 109777, 109782, 109787, 109792, 109797, 109801, 109806, 109811,
+    109816, 109820, 109824, 109829, 109834, 109839, 109843, 109847, 109851,
+    109855, 109860, 109865, 109870, 109875, 109879, 109883, 109889, 109894,
+    109900, 109905, 109911, 109917, 109924, 109930, 109937, 109942, 109948,
+    109953, 109959, 109964, 109969, 109974, 109979, 109983, 109987, 109992,
+    109997, 110001, 110006, 110011, 110016, 110024, 110029, 110036, 110043,
+    110048, 110052, 110056, 110060, 110064, 110068, 110072, 110076, 110080,
+    110084, 110088, 110093, 110097, 110102, 110108, 0, 110114, 110119,
+    110124, 110129, 110134, 110139, 110144, 110149, 110154, 110159, 110165,
+    110171, 110177, 110183, 110189, 110195, 110201, 110207, 110213, 110220,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110226, 110230, 110235, 110239, 110243,
+    110247, 110252, 110256, 110261, 110265, 110270, 110275, 110280, 110285,
+    110290, 110295, 110300, 110305, 0, 110310, 110315, 110320, 110325,
+    110330, 110335, 110340, 110344, 110349, 110354, 110359, 110364, 110368,
+    110372, 110377, 110382, 110387, 110392, 110396, 110400, 110404, 110408,
+    110413, 110417, 110421, 110426, 110432, 110437, 110443, 110448, 110453,
+    110459, 110464, 110470, 110475, 110480, 110485, 110490, 110494, 110499,
+    110505, 110510, 110516, 110521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 110526, 110530, 110534, 110538, 110542, 110546, 110551, 0,
+    110556, 0, 110561, 110566, 110571, 110576, 0, 110581, 110586, 110591,
+    110596, 110601, 110606, 110611, 110616, 110620, 110625, 110630, 110635,
+    110639, 110643, 110648, 0, 110653, 110658, 110662, 110666, 110670,
+    110674, 110679, 110683, 110687, 110692, 110697, 0, 0, 0, 0, 0, 0, 110702,
+    110706, 110711, 110715, 110720, 110724, 110729, 110733, 110738, 110742,
+    110747, 110751, 110756, 110761, 110766, 110771, 110776, 110781, 110786,
+    110791, 110796, 110801, 110806, 110811, 110816, 110821, 110826, 110831,
+    110836, 110841, 110845, 110850, 110855, 110860, 110864, 110868, 110873,
+    110878, 110883, 110888, 110892, 110896, 110900, 110904, 110909, 110914,
+    110918, 110922, 110927, 110933, 110938, 110944, 110949, 110955, 110960,
+    110966, 110971, 110977, 110982, 0, 0, 0, 0, 0, 110987, 110992, 110996,
+    111000, 111004, 111008, 111012, 111016, 111020, 111024, 0, 0, 0, 0, 0, 0,
+    111028, 111035, 111040, 111045, 0, 111050, 111054, 111059, 111063,
+    111068, 111072, 111077, 111082, 0, 0, 111087, 111092, 0, 0, 111097,
+    111102, 111107, 111111, 111116, 111121, 111126, 111131, 111136, 111141,
+    111146, 111151, 111156, 111161, 111166, 111171, 111176, 111181, 111185,
+    111190, 111195, 111200, 0, 111204, 111208, 111213, 111218, 111223,
+    111227, 111231, 0, 111235, 111239, 0, 111244, 111249, 111254, 111259,
+    111263, 0, 111267, 111271, 111276, 111281, 111287, 111292, 111298,
+    111303, 111309, 111315, 0, 0, 111322, 111328, 0, 0, 111334, 111340,
+    111346, 0, 0, 111351, 0, 0, 0, 0, 0, 0, 111355, 0, 0, 0, 0, 0, 111362,
+    111367, 111374, 111382, 111388, 111394, 111400, 0, 0, 111407, 111413,
+    111418, 111423, 111428, 111433, 111438, 0, 0, 0, 111443, 111448, 111453,
+    111458, 111464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32576, 32582, 32588,
-    32592, 32596, 32600, 32604, 32610, 32614, 32620, 32624, 32630, 32636,
-    32644, 32650, 32658, 32662, 32666, 32670, 32676, 32679, 32685, 32689,
-    32695, 32699, 32703, 32709, 32713, 32719, 32723, 32729, 32737, 32745,
-    32753, 32759, 32762, 32768, 32772, 32778, 32781, 32784, 32790, 32794,
-    32800, 32803, 32806, 32809, 32812, 32816, 32822, 32828, 32831, 32834,
-    32838, 32843, 32848, 32855, 32860, 32867, 32874, 32883, 32890, 32899,
-    32904, 32911, 32918, 32927, 32932, 32939, 32944, 32950, 32956, 32962,
-    32968, 32974, 32980, 0, 0, 0, 0, 32986, 32990, 32993, 32996, 32999,
-    33002, 33005, 33008, 33011, 33014, 33017, 33020, 33023, 33026, 33031,
-    33036, 33041, 33044, 33049, 33054, 33059, 33064, 33071, 33076, 33081,
-    33086, 33091, 33098, 33104, 33110, 33116, 33122, 33128, 33137, 33146,
-    33152, 33158, 33166, 33174, 33183, 33192, 33200, 33208, 33217, 33226, 0,
-    0, 0, 33234, 33239, 33244, 33249, 33253, 33257, 33261, 33266, 33270,
-    33274, 33279, 33283, 33288, 33293, 33298, 33303, 33308, 33313, 33318,
-    33322, 33327, 33331, 33335, 33340, 33345, 33350, 33354, 33358, 33362,
-    33366, 33371, 33375, 33380, 33384, 33390, 33396, 33402, 33408, 33414,
-    33420, 33426, 33432, 33438, 33443, 33448, 33455, 33463, 33468, 33473,
-    33478, 33482, 33486, 33490, 33494, 33498, 33502, 33506, 33510, 33514,
-    33518, 33523, 33528, 33533, 33539, 33545, 33549, 33555, 33559, 33565,
-    33571, 33576, 33583, 33587, 33593, 33597, 33603, 33608, 33615, 33622,
-    33627, 33634, 33639, 33644, 33648, 33654, 33658, 33664, 33670, 33676,
-    33680, 33686, 33692, 33696, 33702, 33707, 33711, 33717, 33722, 33727,
-    33732, 33737, 33741, 33745, 33750, 33755, 33762, 33768, 33773, 33780,
-    33785, 33792, 33797, 33806, 33812, 33818, 33822, 0, 0, 0, 0, 0, 0, 0, 0,
-    33826, 33835, 33842, 33849, 33856, 33860, 33865, 33870, 33875, 33880,
-    33885, 33890, 33895, 33900, 33905, 33909, 33914, 33919, 33923, 33927,
-    33932, 33937, 33942, 33947, 33952, 33957, 33961, 33966, 33971, 33976,
-    33981, 33985, 33989, 33993, 33997, 34002, 34007, 34011, 34016, 34021,
-    34025, 34031, 34037, 34043, 34048, 34053, 34059, 34064, 34070, 34075,
-    34081, 34087, 34092, 34098, 34104, 34109, 34115, 34121, 34127, 34132, 0,
-    0, 0, 34137, 34143, 34153, 34159, 34167, 34173, 34178, 34182, 34186,
-    34190, 34194, 34198, 34202, 34206, 34210, 0, 0, 0, 34214, 34219, 34224,
-    34229, 34236, 34242, 34248, 34254, 34260, 34266, 34272, 34278, 34284,
-    34290, 34296, 34303, 34310, 34317, 34324, 34331, 34338, 34345, 34352,
-    34359, 34366, 34373, 34380, 34387, 34394, 34401, 34408, 34415, 34422,
-    34429, 34436, 34443, 34450, 34457, 34464, 34471, 34478, 34485, 34492,
-    34499, 34507, 34515, 34523, 34529, 34535, 34541, 34549, 34558, 34565,
-    34572, 34578, 34585, 34592, 34599, 34607, 34614, 0, 0, 0, 0, 0, 0, 0,
-    34621, 34628, 34635, 34642, 34649, 34656, 34663, 34670, 34677, 34684,
-    34691, 34698, 34705, 34712, 34719, 34726, 34733, 34740, 34747, 34754,
-    34761, 34768, 34775, 34782, 34789, 34796, 34803, 34810, 34817, 34824,
-    34831, 34838, 34845, 34852, 34859, 34866, 34873, 34880, 34887, 34894,
-    34901, 34908, 34916, 0, 0, 34923, 34930, 34938, 34946, 34954, 34962,
-    34970, 34978, 34988, 34998, 35008, 0, 0, 0, 0, 0, 0, 0, 0, 35018, 35023,
-    35028, 35033, 35038, 35047, 35058, 35067, 35078, 35084, 35097, 35103,
-    35110, 35117, 35122, 35129, 35136, 35147, 35156, 35163, 35170, 35179,
-    35186, 35195, 35205, 35215, 35222, 35229, 35236, 35246, 35251, 35259,
-    35265, 35273, 35282, 35287, 35294, 35300, 35305, 35310, 35315, 35321,
-    35328, 0, 0, 0, 0, 0, 35336, 35341, 35347, 35353, 35361, 35367, 35373,
-    35379, 35384, 35390, 35395, 35401, 35407, 35415, 35421, 35429, 35434,
-    35440, 35446, 35453, 35461, 35467, 35473, 35480, 35487, 35493, 35500,
-    35506, 35512, 35517, 35523, 35531, 35539, 35545, 35551, 35557, 35563,
-    35571, 35575, 35581, 35587, 35593, 35599, 35605, 35611, 35615, 35620,
-    35625, 35632, 35637, 35641, 35647, 35652, 35657, 35661, 35666, 35671,
-    35675, 35680, 35685, 35692, 35696, 35701, 35706, 35710, 35715, 35719,
-    35724, 35728, 35733, 35738, 35744, 35749, 35754, 35758, 35763, 35768,
-    35774, 35779, 35784, 35789, 35794, 35799, 35803, 35808, 35815, 35822,
-    35827, 35832, 35836, 35842, 35848, 35853, 35858, 35863, 35869, 35874,
-    35880, 35885, 35891, 35897, 35903, 35910, 35917, 35924, 35931, 35938,
-    35945, 35950, 35958, 35967, 35976, 35985, 35994, 36003, 36012, 36024,
-    36033, 36042, 36051, 36057, 36062, 36069, 36077, 36085, 36092, 36099,
-    36106, 36113, 36121, 36130, 36139, 36148, 36157, 36166, 36175, 36184,
-    36193, 36202, 36211, 36220, 36229, 36238, 36247, 36255, 36264, 36275,
-    36284, 36294, 36306, 36315, 36324, 36333, 36342, 36350, 36359, 36365,
-    36370, 36378, 36383, 36390, 36395, 36404, 36410, 36416, 36423, 36428,
-    36433, 36441, 36449, 36458, 36467, 36472, 36479, 36489, 36497, 36506,
-    36512, 36518, 36523, 36530, 36535, 36544, 36549, 36554, 36559, 36566,
-    36572, 36577, 36586, 36594, 36599, 36604, 36611, 36618, 36622, 36626,
-    36629, 36632, 36635, 36638, 36641, 36644, 36651, 36654, 36657, 36662,
-    36666, 36670, 36674, 36678, 36682, 36691, 36697, 36703, 36709, 36717,
-    36725, 36731, 36737, 36744, 36750, 36755, 36761, 36768, 36774, 36781,
-    36787, 36795, 36801, 36808, 36814, 36820, 36826, 36832, 36838, 36844,
-    36855, 36865, 36871, 36877, 36887, 36893, 36901, 36909, 36917, 36922,
-    36928, 36934, 36939, 0, 36947, 36951, 36958, 36965, 36970, 36979, 36987,
-    36995, 37002, 37009, 37016, 37023, 37031, 37039, 37049, 37059, 37067,
-    37075, 37083, 37091, 37100, 37109, 37117, 37125, 37134, 37143, 37154,
-    37165, 37175, 37185, 37194, 37203, 37212, 37221, 37232, 37243, 37251,
-    37259, 37267, 37275, 37283, 37291, 37299, 37307, 37315, 37323, 37331,
-    37339, 37348, 37357, 37366, 37375, 37385, 37395, 37402, 37409, 37417,
-    37425, 37434, 37443, 37451, 37459, 37471, 37483, 37492, 37501, 37510,
-    37519, 37526, 37533, 37541, 37549, 37557, 37565, 37573, 37581, 37589,
-    37597, 37606, 37615, 37624, 37633, 37642, 37651, 37661, 37671, 37681,
-    37691, 37700, 37709, 37716, 37723, 37731, 37739, 37747, 37755, 37763,
-    37771, 37783, 37795, 37804, 37813, 37821, 37829, 37837, 37845, 37856,
-    37867, 37878, 37889, 37901, 37913, 37921, 37929, 37937, 37945, 37954,
-    37963, 37972, 37981, 37989, 37997, 38005, 38013, 38021, 38029, 38038,
-    38047, 38057, 38067, 38075, 38083, 38091, 38099, 38107, 38115, 38122,
-    38129, 38137, 38145, 38153, 38161, 38169, 38177, 38185, 38193, 38201,
-    38209, 38217, 38225, 38233, 38241, 38249, 38257, 38266, 38275, 38284,
-    38292, 38301, 38310, 38319, 38328, 38338, 38347, 38354, 38359, 38366,
-    38373, 38381, 38389, 38398, 38407, 38417, 38427, 38438, 38449, 38459,
-    38469, 38479, 38489, 38498, 38507, 38517, 38527, 38538, 38549, 38559,
-    38569, 38579, 38589, 38597, 38605, 38614, 38623, 38631, 38639, 38649,
-    38659, 38670, 38681, 38693, 38705, 38716, 38727, 38738, 38749, 38758,
-    38767, 38775, 38783, 38790, 38797, 38805, 38813, 38822, 38831, 38841,
-    38851, 38862, 38873, 38883, 38893, 38903, 38913, 38922, 38931, 38941,
-    38951, 38962, 38973, 38983, 38993, 39003, 39013, 39020, 39027, 39035,
-    39043, 39052, 39061, 39071, 39081, 39092, 39103, 39113, 39123, 39133,
-    39143, 39151, 39159, 39167, 39175, 39184, 39193, 39201, 39209, 39216,
-    39223, 39230, 39237, 39245, 39253, 39261, 39269, 39280, 39291, 39302,
-    39313, 39324, 39335, 39343, 39351, 39362, 39373, 39384, 39395, 39406,
-    39417, 39425, 39433, 39444, 39455, 39466, 0, 0, 39477, 39485, 39493,
-    39504, 39515, 39526, 0, 0, 39537, 39545, 39553, 39564, 39575, 39586,
-    39597, 39608, 39619, 39627, 39635, 39646, 39657, 39668, 39679, 39690,
-    39701, 39709, 39717, 39728, 39739, 39750, 39761, 39772, 39783, 39791,
-    39799, 39810, 39821, 39832, 39843, 39854, 39865, 39873, 39881, 39892,
-    39903, 39914, 0, 0, 39925, 39933, 39941, 39952, 39963, 39974, 0, 0,
-    39985, 39993, 40001, 40012, 40023, 40034, 40045, 40056, 0, 40067, 0,
-    40075, 0, 40086, 0, 40097, 40108, 40116, 40124, 40135, 40146, 40157,
-    40168, 40179, 40190, 40198, 40206, 40217, 40228, 40239, 40250, 40261,
-    40272, 40280, 40288, 40296, 40304, 40312, 40320, 40328, 40336, 40344,
-    40352, 40360, 40368, 40376, 0, 0, 40384, 40395, 40406, 40420, 40434,
-    40448, 40462, 40476, 40490, 40501, 40512, 40526, 40540, 40554, 40568,
-    40582, 40596, 40607, 40618, 40632, 40646, 40660, 40674, 40688, 40702,
-    40713, 40724, 40738, 40752, 40766, 40780, 40794, 40808, 40819, 40830,
-    40844, 40858, 40872, 40886, 40900, 40914, 40925, 40936, 40950, 40964,
-    40978, 40992, 41006, 41020, 41028, 41036, 41047, 41055, 0, 41066, 41074,
-    41085, 41093, 41101, 41109, 41117, 41125, 41128, 41131, 41134, 41137,
-    41143, 41154, 41162, 0, 41173, 41181, 41192, 41200, 41208, 41216, 41224,
-    41232, 41238, 41244, 41250, 41258, 41266, 41277, 0, 0, 41288, 41296,
-    41307, 41315, 41323, 41331, 0, 41339, 41345, 41351, 41357, 41365, 41373,
-    41384, 41395, 41403, 41411, 41419, 41430, 41438, 41446, 41454, 41462,
-    41470, 41476, 41482, 0, 0, 41485, 41496, 41504, 0, 41515, 41523, 41534,
-    41542, 41550, 41558, 41566, 41574, 41577, 0, 41580, 41584, 41588, 41592,
-    41596, 41600, 41604, 41608, 41612, 41616, 41620, 41624, 41630, 41636,
-    41642, 41645, 41648, 41650, 41654, 41658, 41662, 41666, 41669, 41673,
-    41677, 41683, 41689, 41696, 41703, 41708, 41713, 41719, 41725, 41727,
-    41730, 41732, 41736, 41740, 41744, 41748, 41752, 41756, 41760, 41764,
-    41768, 41774, 41778, 41782, 41788, 41793, 41800, 41802, 41805, 41809,
-    41813, 41818, 41824, 41826, 41835, 41844, 41847, 41851, 41853, 41855,
-    41857, 41860, 41866, 41868, 41872, 41875, 41882, 41889, 41893, 41898,
-    41903, 41908, 41913, 41917, 41921, 41924, 41928, 41932, 41939, 41944,
-    41948, 41952, 41957, 41961, 41965, 41970, 41975, 41979, 41983, 41987,
-    41989, 41994, 41999, 42003, 42007, 42011, 42015, 0, 42019, 42023, 42027,
-    42033, 42039, 42045, 42051, 42058, 42065, 42070, 42075, 42079, 0, 0,
-    42085, 42088, 42091, 42094, 42097, 42100, 42103, 42107, 42111, 42116,
-    42121, 42126, 42133, 42137, 42140, 42143, 42146, 42149, 42152, 42155,
-    42158, 42161, 42164, 42168, 42172, 42177, 42182, 0, 42187, 42193, 42199,
-    42205, 42212, 42219, 42226, 42233, 42239, 42246, 42253, 42260, 42267, 0,
-    0, 0, 42274, 42277, 42280, 42283, 42288, 42291, 42294, 42297, 42300,
-    42303, 42306, 42311, 42314, 42317, 42320, 42323, 42326, 42331, 42334,
-    42337, 42340, 42343, 42346, 42351, 42354, 42357, 42362, 42367, 42371,
-    42374, 42377, 42380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    42383, 42388, 42393, 42400, 42408, 42413, 42418, 42422, 42426, 42431,
-    42438, 42445, 42450, 42456, 42461, 42466, 42471, 42478, 42483, 42488,
-    42493, 42502, 42509, 42516, 42520, 42525, 42531, 42536, 42543, 42551,
-    42559, 42563, 42567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42571,
-    42575, 42583, 42588, 42592, 42597, 42601, 42605, 42609, 42611, 42615,
-    42619, 42623, 42628, 42633, 42637, 42645, 42648, 42652, 42655, 42658,
-    42664, 42669, 42672, 42678, 42682, 42687, 42692, 42695, 42699, 42703,
-    42707, 42709, 42712, 42715, 42719, 42721, 42726, 42729, 42732, 42737,
-    42742, 42748, 42751, 42754, 42758, 42763, 42766, 42769, 42772, 42776,
-    42780, 42784, 42787, 42789, 42792, 42795, 42798, 42802, 42807, 42810,
-    42815, 42820, 42825, 42830, 42836, 42841, 42845, 42850, 42855, 42861,
-    42867, 42872, 42877, 42883, 42887, 42890, 42893, 42895, 42899, 42905,
-    42911, 42917, 42923, 42929, 42935, 42941, 42947, 42953, 42960, 42966,
-    42973, 42979, 42985, 42992, 42999, 43003, 43008, 43013, 43018, 43023,
-    43028, 43033, 43038, 43043, 43048, 43054, 43060, 43066, 43072, 43079,
-    43087, 43093, 43099, 43105, 43111, 43117, 43123, 43129, 43135, 43141,
-    43147, 43154, 43161, 43168, 43175, 43183, 43192, 43199, 43210, 43217,
-    43224, 43233, 43240, 43249, 43258, 43265, 43273, 43280, 43283, 0, 0, 0,
-    0, 43286, 43288, 43291, 43293, 43296, 43299, 43302, 43306, 43310, 43315,
-    43320, 43324, 43328, 43332, 43336, 43341, 43347, 43352, 43358, 43363,
-    43368, 43373, 43379, 43384, 43390, 43396, 43400, 43404, 43409, 43414,
-    43419, 43424, 43429, 43437, 43445, 43453, 43461, 43468, 43476, 43483,
-    43490, 43498, 43510, 43516, 43522, 43529, 43536, 43544, 43552, 43559,
-    43566, 43574, 43582, 43587, 43595, 43600, 43605, 43611, 43616, 43622,
-    43629, 43636, 43641, 43647, 43652, 43655, 43659, 43662, 43666, 43670,
-    43674, 43679, 43684, 43690, 43696, 43700, 43704, 43708, 43712, 43718,
-    43724, 43728, 43733, 43737, 43742, 43747, 43752, 43755, 43759, 43762,
-    43766, 43773, 43781, 43793, 43804, 43809, 43818, 43825, 43833, 43842,
-    43846, 43852, 43860, 43864, 43869, 43874, 43880, 43886, 43892, 43899,
-    43903, 43907, 43912, 43915, 43917, 43921, 43925, 43933, 43937, 43939,
-    43941, 43945, 43953, 43958, 43964, 43974, 43981, 43986, 43990, 43994,
-    43998, 44001, 44004, 44007, 44011, 44015, 44019, 44023, 44027, 44030,
-    44034, 44038, 44041, 44043, 44046, 44048, 44052, 44056, 44058, 44064,
-    44067, 44072, 44076, 44080, 44082, 44084, 44086, 44089, 44093, 44097,
-    44101, 44105, 44109, 44115, 44121, 44123, 44125, 44127, 44129, 44132,
-    44134, 44138, 44140, 44144, 44148, 44154, 44158, 44162, 44166, 44170,
-    44174, 44180, 44184, 44194, 44204, 44208, 44214, 44221, 44225, 44229,
-    44232, 44237, 44241, 44247, 44251, 44264, 44273, 44277, 44281, 44287,
-    44291, 44294, 44296, 44299, 44303, 44307, 44314, 44318, 44322, 44326,
-    44329, 44334, 44339, 44345, 44351, 44356, 44361, 44369, 44377, 44381,
-    44385, 44387, 44392, 44396, 44400, 44408, 44416, 44423, 44430, 44439,
-    44448, 44454, 44460, 44468, 44476, 44478, 44480, 44486, 44492, 44499,
-    44506, 44512, 44518, 44522, 44526, 44533, 44540, 44547, 44554, 44564,
-    44574, 44582, 44590, 44592, 44596, 44600, 44605, 44610, 44618, 44626,
-    44629, 44632, 44635, 44638, 44641, 44646, 44650, 44655, 44660, 44663,
-    44666, 44669, 44672, 44675, 44679, 44682, 44685, 44688, 44691, 44693,
-    44695, 44697, 44699, 44707, 44715, 44721, 44725, 44731, 44741, 44747,
-    44753, 44759, 44767, 44776, 44788, 44792, 44796, 44798, 44804, 44806,
-    44808, 44810, 44812, 44818, 44821, 44827, 44833, 44837, 44841, 44845,
-    44848, 44852, 44856, 44858, 44867, 44876, 44881, 44886, 44892, 44898,
-    44904, 44907, 44910, 44913, 44916, 44918, 44923, 44928, 44933, 44939,
-    44945, 44954, 44963, 44970, 44977, 44984, 44991, 45001, 45011, 45021,
-    45031, 45041, 45051, 45060, 45069, 45078, 45087, 45095, 45107, 45118,
-    45134, 45137, 45143, 45149, 45155, 45163, 45178, 45194, 45200, 45206,
-    45213, 45219, 45228, 45235, 45249, 45264, 45269, 45275, 45283, 45286,
-    45289, 45291, 45294, 45297, 45299, 45301, 45305, 45308, 45311, 45314,
-    45317, 45322, 45327, 45332, 45337, 45342, 45345, 45347, 45349, 45351,
-    45355, 45359, 45363, 45369, 45373, 45375, 45377, 45382, 45387, 45392,
-    45397, 45402, 45407, 45409, 45411, 45421, 45425, 45433, 45442, 45444,
-    45449, 45454, 45462, 45466, 45468, 45472, 45474, 45478, 45482, 45486,
-    45488, 45490, 45492, 45499, 45508, 45517, 45526, 45535, 45544, 45553,
-    45562, 45571, 45579, 45587, 45596, 45605, 45614, 45623, 45631, 45639,
-    45648, 45657, 45666, 45676, 45685, 45695, 45704, 45714, 45723, 45733,
-    45743, 45752, 45762, 45771, 45781, 45790, 45800, 45809, 45818, 45827,
-    45836, 45845, 45855, 45864, 45873, 45882, 45892, 45901, 45910, 45919,
-    45928, 45938, 45948, 45957, 45966, 45974, 45983, 45990, 45999, 46008,
-    46019, 46028, 46038, 46048, 46055, 46062, 46069, 46078, 46087, 46096,
-    46105, 46112, 46117, 46126, 46131, 46134, 46141, 46144, 46149, 46154,
-    46157, 46160, 46168, 46171, 46176, 46179, 46187, 46192, 46200, 46203,
-    46206, 46209, 46214, 46219, 46222, 46225, 46233, 46236, 46243, 46250,
-    46254, 46258, 46263, 46268, 46274, 46279, 46285, 46291, 46296, 46302,
-    46310, 46316, 46324, 46332, 46338, 46346, 46354, 46362, 46370, 46376,
-    46384, 46392, 46400, 46404, 46410, 46424, 46438, 46442, 46446, 46450,
-    46454, 46464, 46468, 46473, 46478, 46484, 46490, 46496, 46502, 46512,
-    46522, 46530, 46541, 46552, 46560, 46571, 46582, 46590, 46601, 46612,
-    46620, 46628, 46638, 46648, 46651, 46654, 46657, 46662, 46666, 46672,
-    46679, 46686, 46694, 46701, 46705, 46709, 46713, 46717, 46719, 46723,
-    46727, 46732, 46737, 46744, 46751, 46754, 46761, 46763, 46765, 46769,
-    46773, 46778, 46784, 46790, 46796, 46802, 46811, 46820, 46829, 46833,
-    46835, 46839, 46846, 46853, 46860, 46867, 46874, 46877, 46882, 46888,
-    46891, 46896, 46901, 46906, 46911, 46915, 46922, 46929, 46936, 46943,
-    46947, 46951, 46955, 46959, 46965, 46971, 46976, 46982, 46988, 46994,
-    47000, 47008, 47015, 47022, 47029, 47036, 47042, 47048, 47057, 47061,
-    47068, 47072, 47076, 47082, 47088, 47094, 47100, 47104, 47108, 47111,
-    47114, 47118, 47125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 47132, 47135, 47139, 47143, 47149, 47155, 47161,
-    47169, 47176, 47180, 47188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 47193, 47196, 47199, 47202, 47205, 47208, 47211, 47214,
-    47217, 47220, 47224, 47228, 47232, 47236, 47240, 47244, 47248, 47252,
-    47256, 47260, 47264, 47267, 47270, 47273, 47276, 47279, 47282, 47285,
-    47288, 47291, 47295, 47299, 47303, 47307, 47311, 47315, 47319, 47323,
-    47327, 47331, 47335, 47341, 47347, 47353, 47360, 47367, 47374, 47381,
-    47388, 47395, 47402, 47409, 47416, 47423, 47430, 47437, 47444, 47451,
-    47458, 47465, 47472, 47477, 47483, 47489, 47495, 47500, 47506, 47512,
-    47518, 47523, 47529, 47535, 47540, 47546, 47552, 47557, 47563, 47569,
-    47574, 47580, 47586, 47591, 47597, 47603, 47609, 47615, 47621, 47626,
-    47632, 47638, 47644, 47649, 47655, 47661, 47667, 47672, 47678, 47684,
-    47689, 47695, 47701, 47706, 47712, 47718, 47723, 47729, 47735, 47740,
-    47746, 47752, 47758, 47764, 47770, 47775, 47781, 47787, 47793, 47798,
-    47804, 47810, 47816, 47821, 47827, 47833, 47838, 47844, 47850, 47855,
-    47861, 47867, 47872, 47878, 47884, 47889, 47895, 47901, 47907, 47913,
-    47919, 47923, 47929, 47935, 47941, 47947, 47953, 47959, 47965, 47971,
-    47977, 47983, 47987, 47991, 47995, 47999, 48003, 48007, 48011, 48015,
-    48019, 48024, 48030, 48035, 48040, 48045, 48050, 48059, 48068, 48077,
-    48086, 48095, 48104, 48113, 48122, 48129, 48137, 48145, 48152, 48159,
-    48167, 48175, 48182, 48189, 48197, 48205, 48212, 48219, 48227, 48235,
-    48242, 48249, 48257, 48266, 48275, 48283, 48292, 48301, 48308, 48315,
-    48323, 48332, 48341, 48349, 48358, 48367, 48374, 48381, 48390, 48399,
-    48408, 48417, 48426, 48435, 48442, 48449, 48458, 48467, 48476, 48485,
-    48494, 48503, 48510, 48517, 48526, 48535, 48544, 48554, 48564, 48573,
-    48583, 48593, 48603, 48613, 48623, 48633, 48642, 48651, 48658, 48666,
-    48674, 48682, 48690, 48695, 48700, 48709, 48717, 48724, 48733, 48741,
-    48748, 48757, 48765, 48772, 48781, 48789, 48796, 48805, 48813, 48820,
-    48829, 48837, 48844, 48854, 48863, 48870, 48880, 48889, 48896, 48906,
-    48915, 48922, 48931, 48940, 48949, 48958, 48972, 48986, 48993, 48998,
-    49003, 49008, 49013, 49018, 49023, 49028, 49033, 49041, 49049, 49057,
-    49065, 49070, 49077, 49084, 49091, 49096, 49104, 49111, 49119, 49123,
-    49130, 49136, 49143, 49147, 49153, 49159, 49165, 49169, 49172, 49176,
-    49180, 49187, 49193, 49199, 49205, 49211, 49225, 49235, 49249, 49263,
-    49269, 49279, 49293, 49296, 49299, 49306, 49314, 49320, 49325, 49333,
-    49345, 49357, 49365, 49369, 49373, 49376, 49379, 49383, 49387, 49390,
-    49393, 49398, 49403, 49409, 49415, 49420, 49425, 49431, 49437, 49442,
-    49447, 49452, 49457, 49463, 49469, 49474, 49479, 49485, 49491, 49496,
-    49501, 49504, 49507, 49516, 49518, 49520, 49523, 49527, 49533, 49535,
-    49538, 49545, 49552, 49560, 49568, 49578, 49592, 49597, 49602, 49606,
-    49611, 49619, 49627, 49636, 49645, 49654, 49663, 49668, 49673, 49679,
-    49685, 49691, 49697, 49700, 49706, 49712, 49722, 49732, 49740, 49748,
-    49757, 49766, 49770, 49778, 49786, 49794, 49802, 49811, 49820, 49829,
-    49838, 49843, 49848, 49853, 49858, 49863, 49869, 49875, 49880, 49886,
-    49888, 49890, 49892, 49894, 49897, 49900, 49902, 49904, 49906, 49910,
-    49914, 49916, 49918, 49921, 49924, 49928, 49934, 49940, 49942, 49949,
-    49953, 49958, 49963, 49965, 49975, 49981, 49987, 49993, 49999, 50005,
-    50011, 50016, 50019, 50022, 50025, 50027, 50029, 50033, 50037, 50042,
-    50047, 50052, 50055, 50059, 50064, 50067, 50071, 50076, 50081, 50086,
-    50091, 50096, 50101, 50106, 50111, 50116, 50121, 50126, 50131, 50137,
-    50143, 50149, 50151, 50154, 50156, 50159, 50161, 50163, 50165, 50167,
-    50169, 50171, 50173, 50175, 50177, 50179, 50181, 50183, 50185, 50187,
-    50189, 50191, 50193, 50198, 50203, 50208, 50213, 50218, 50223, 50228,
-    50233, 50238, 50243, 50248, 50253, 50258, 50263, 50268, 50273, 50278,
-    50283, 50288, 50293, 50297, 50301, 50305, 50311, 50317, 50322, 50327,
-    50332, 50338, 50344, 50349, 50357, 50365, 50373, 50381, 50389, 50397,
-    50405, 50413, 50419, 50424, 50429, 50434, 50437, 50441, 50445, 50449,
-    50453, 50457, 50461, 50468, 50475, 50483, 50491, 50496, 50501, 50508,
-    50515, 50522, 50529, 50532, 50535, 50540, 50542, 50546, 50551, 50553,
-    50555, 50557, 50559, 50564, 50567, 50569, 50574, 50581, 50588, 50591,
-    50595, 50600, 50605, 50613, 50619, 50625, 50637, 50644, 50652, 50657,
-    50662, 50668, 50671, 50674, 50679, 50681, 50685, 50687, 50689, 50691,
-    50693, 50695, 50697, 50702, 50704, 50706, 50708, 50710, 50714, 50716,
-    50719, 50724, 50729, 50734, 50739, 50745, 50751, 50753, 50756, 50763,
-    50769, 50775, 50782, 50786, 50790, 50792, 50794, 50798, 50804, 50809,
-    50811, 50815, 50824, 50832, 50840, 50846, 50852, 50857, 50863, 50868,
-    50871, 50885, 50888, 50893, 50898, 50904, 50915, 50917, 50923, 50929,
-    50933, 50940, 50944, 50946, 50948, 50952, 50958, 50963, 50969, 50971,
-    50977, 50979, 50985, 50987, 50989, 50994, 50996, 51000, 51005, 51007,
-    51012, 51017, 51021, 51028, 51038, 51043, 51049, 51052, 51058, 51061,
-    51066, 51071, 51075, 51077, 51079, 51083, 51087, 51091, 51095, 51100,
-    51102, 51107, 51110, 51113, 51116, 51120, 51124, 51129, 51133, 51138,
-    51143, 51147, 51152, 51158, 51161, 51167, 51172, 51176, 51181, 51187,
-    51193, 51200, 51206, 51213, 51220, 51222, 51229, 51233, 51239, 51245,
-    51250, 51256, 51260, 51265, 51268, 51273, 51279, 51286, 51294, 51301,
-    51310, 51320, 51327, 51333, 51337, 51344, 51349, 51358, 51361, 51364,
-    51373, 51383, 51390, 51392, 51398, 51403, 51405, 51408, 51412, 51420,
-    51429, 51432, 51437, 51443, 51451, 51459, 51467, 51475, 51481, 51487,
-    51493, 51501, 51506, 51509, 51513, 51516, 51527, 51537, 51547, 51556,
-    51567, 51577, 51586, 51592, 51600, 51604, 51612, 51616, 51624, 51631,
-    51638, 51647, 51656, 51666, 51676, 51686, 51696, 51705, 51714, 51724,
-    51734, 51743, 51752, 51759, 51766, 51773, 51780, 51787, 51794, 51801,
-    51808, 51815, 51823, 51829, 51835, 51841, 51847, 51853, 51859, 51865,
-    51871, 51877, 51884, 51892, 51900, 51908, 51916, 51924, 51932, 51940,
-    51948, 51956, 51965, 51970, 51973, 51977, 51981, 51987, 51990, 51995,
-    52001, 52006, 52010, 52015, 52021, 52028, 52031, 52038, 52045, 52049,
-    52058, 52067, 52072, 52078, 52083, 52088, 52095, 52102, 52110, 52118,
-    52127, 52131, 52140, 52145, 52149, 52156, 52160, 52166, 52174, 52179,
-    52186, 52190, 52195, 52199, 52204, 52208, 52213, 52218, 52227, 52229,
-    52232, 52235, 52242, 52249, 52255, 52263, 52269, 52276, 52281, 52284,
-    52289, 52294, 52299, 52307, 52311, 52318, 52326, 52334, 52339, 52344,
-    52350, 52355, 52360, 52366, 52371, 52374, 52378, 52382, 52389, 52399,
-    52404, 52413, 52422, 52428, 52434, 52439, 52444, 52449, 52454, 52460,
-    52466, 52474, 52482, 52488, 52494, 52499, 52504, 52511, 52518, 52524,
-    52527, 52530, 52534, 52538, 52542, 52547, 52553, 52559, 52566, 52573,
-    52578, 52582, 52586, 52590, 52594, 52598, 52602, 52606, 52610, 52614,
-    52618, 52622, 52626, 52630, 52634, 52638, 52642, 52646, 52650, 52654,
-    52658, 52662, 52666, 52670, 52674, 52678, 52682, 52686, 52690, 52694,
-    52698, 52702, 52706, 52710, 52714, 52718, 52722, 52726, 52730, 52734,
-    52738, 52742, 52746, 52750, 52754, 52758, 52762, 52766, 52770, 52774,
-    52778, 52782, 52786, 52790, 52794, 52798, 52802, 52806, 52810, 52814,
-    52818, 52822, 52826, 52830, 52834, 52838, 52842, 52846, 52850, 52854,
-    52858, 52862, 52866, 52870, 52874, 52878, 52882, 52886, 52890, 52894,
-    52898, 52902, 52906, 52910, 52914, 52918, 52922, 52926, 52930, 52934,
-    52938, 52942, 52946, 52950, 52954, 52958, 52962, 52966, 52970, 52974,
-    52978, 52982, 52986, 52990, 52994, 52998, 53002, 53006, 53010, 53014,
-    53018, 53022, 53026, 53030, 53034, 53038, 53042, 53046, 53050, 53054,
-    53058, 53062, 53066, 53070, 53074, 53078, 53082, 53086, 53090, 53094,
-    53098, 53102, 53106, 53110, 53114, 53118, 53122, 53126, 53130, 53134,
-    53138, 53142, 53146, 53150, 53154, 53158, 53162, 53166, 53170, 53174,
-    53178, 53182, 53186, 53190, 53194, 53198, 53202, 53206, 53210, 53214,
-    53218, 53222, 53226, 53230, 53234, 53238, 53242, 53246, 53250, 53254,
-    53258, 53262, 53266, 53270, 53274, 53278, 53282, 53286, 53290, 53294,
-    53298, 53302, 53306, 53310, 53314, 53318, 53322, 53326, 53330, 53334,
-    53338, 53342, 53346, 53350, 53354, 53358, 53362, 53366, 53370, 53374,
-    53378, 53382, 53386, 53390, 53394, 53398, 53402, 53406, 53410, 53414,
-    53418, 53422, 53426, 53430, 53434, 53438, 53442, 53446, 53450, 53454,
-    53458, 53462, 53466, 53470, 53474, 53478, 53482, 53486, 53490, 53494,
-    53498, 53502, 53506, 53510, 53514, 53518, 53522, 53526, 53530, 53534,
-    53538, 53542, 53546, 53550, 53554, 53558, 53562, 53566, 53570, 53574,
-    53578, 53582, 53586, 53590, 53594, 53598, 53602, 53609, 53617, 53623,
-    53629, 53636, 53643, 53649, 53655, 53662, 53669, 53674, 53679, 53684,
-    53689, 53695, 53701, 53709, 53716, 53722, 53728, 53736, 53745, 53752,
-    53762, 53773, 53776, 53779, 53783, 53787, 53794, 53801, 53812, 53823,
-    53832, 53841, 53847, 53853, 53860, 53867, 53876, 53886, 53897, 53907,
-    53917, 53927, 53938, 53949, 53959, 53970, 53980, 53990, 53999, 54009,
-    54019, 54030, 54041, 54048, 54055, 54062, 54069, 54079, 54089, 54097,
-    54105, 54112, 54119, 54126, 54133, 54140, 54145, 54150, 54156, 54164,
-    54174, 54182, 54190, 54198, 54206, 54214, 54222, 54230, 54238, 54247,
-    54256, 54266, 54276, 54285, 54294, 54304, 54314, 54323, 54332, 54342,
-    54352, 54361, 54370, 54380, 54390, 54404, 54421, 54435, 54452, 54466,
-    54480, 54494, 54508, 54518, 54529, 54539, 54550, 54567, 54584, 54592,
-    54598, 54605, 54612, 54619, 54626, 54631, 54637, 54642, 54647, 54653,
-    54658, 54663, 54668, 54673, 54678, 54685, 54691, 54699, 54704, 54709,
-    54713, 54717, 54725, 54733, 54741, 54749, 54756, 54763, 54776, 54789,
-    54802, 54815, 54823, 54831, 54837, 54843, 54850, 54857, 54864, 54871,
-    54875, 54880, 54888, 54896, 54904, 54911, 54915, 54923, 54931, 54934,
-    54938, 54943, 54950, 54958, 54966, 54985, 55004, 55023, 55042, 55061,
-    55080, 55099, 55118, 55124, 55131, 55140, 55148, 55156, 55162, 55165,
-    55168, 55173, 55176, 55196, 55203, 55209, 55215, 55219, 55222, 55225,
-    55228, 55240, 55254, 55261, 55268, 55271, 55275, 55278, 55283, 55288,
-    55293, 55299, 55308, 55315, 55322, 55330, 55337, 55344, 55347, 55353,
-    55359, 55362, 55365, 55370, 55375, 55381, 55387, 55391, 55396, 55403,
-    55407, 55413, 55417, 55421, 55429, 55441, 55450, 55454, 55456, 55465,
-    55474, 55480, 55483, 55489, 55495, 55500, 55505, 55510, 55515, 55520,
-    55525, 55527, 55533, 55538, 55546, 55550, 55556, 55559, 55563, 55570,
-    55577, 55579, 55581, 55587, 55593, 55599, 55608, 55617, 55624, 55631,
-    55637, 55644, 55649, 55654, 55659, 55665, 55671, 55676, 55683, 55687,
-    55691, 55704, 55717, 55729, 55738, 55744, 55751, 55756, 55761, 55766,
-    55771, 55776, 55778, 55785, 55793, 55801, 55809, 55816, 55824, 55830,
-    55835, 55841, 55847, 55853, 55860, 55866, 55874, 55882, 55890, 55898,
-    55906, 55912, 55918, 55927, 55931, 55940, 55949, 55958, 55966, 55970,
-    55976, 55983, 55990, 55994, 56000, 56008, 56014, 56019, 56025, 56030,
-    56035, 56042, 56049, 56054, 56059, 56067, 56075, 56085, 56095, 56102,
-    56109, 56113, 56117, 56129, 56135, 56142, 56147, 56152, 56159, 56166,
-    56172, 56178, 56188, 56195, 56203, 56211, 56220, 56227, 56233, 56240,
-    56246, 56254, 56262, 56270, 56278, 56284, 56289, 56299, 56310, 56317,
-    56326, 56332, 56337, 56342, 56352, 56359, 56365, 56371, 56379, 56384,
-    56391, 56398, 56411, 56419, 56426, 56433, 56440, 56447, 56455, 56463,
-    56476, 56489, 56501, 56513, 56527, 56541, 56547, 56553, 56562, 56571,
-    56578, 56585, 56594, 56603, 56612, 56621, 56629, 56637, 56647, 56657,
-    56671, 56685, 56694, 56703, 56716, 56729, 56738, 56747, 56758, 56769,
-    56775, 56781, 56790, 56799, 56804, 56809, 56817, 56823, 56829, 56837,
-    56845, 56858, 56871, 56875, 56879, 56887, 56895, 56902, 56910, 56918,
-    56927, 56936, 56942, 56948, 56955, 56962, 56969, 56976, 56985, 56994,
-    56997, 57000, 57005, 57010, 57016, 57022, 57029, 57036, 57047, 57058,
-    57065, 57072, 57080, 57088, 57096, 57104, 57112, 57120, 57126, 57132,
-    57136, 57140, 57148, 57156, 57161, 57166, 57171, 57176, 57182, 57196,
-    57203, 57210, 57214, 57216, 57218, 57223, 57228, 57233, 57238, 57246,
-    57253, 57260, 57268, 57280, 57288, 57296, 57307, 57311, 57315, 57321,
-    57329, 57342, 57349, 57356, 57363, 57369, 57376, 57385, 57394, 57400,
-    57406, 57412, 57422, 57432, 57440, 57449, 57454, 57457, 57462, 57467,
-    57472, 57478, 57484, 57488, 57491, 57495, 57499, 57504, 57509, 57515,
-    57521, 57525, 57529, 57536, 57543, 57550, 57557, 57564, 57571, 57581,
-    57591, 57598, 57605, 57613, 57621, 57625, 57630, 57635, 57641, 57647,
-    57650, 57653, 57656, 57659, 57664, 57669, 57674, 57679, 57684, 57689,
-    57693, 57697, 57701, 57706, 57711, 57715, 57719, 57725, 57729, 57735,
-    57740, 57747, 57755, 57762, 57770, 57777, 57785, 57794, 57801, 57811,
-    57822, 57828, 57837, 57843, 57852, 57861, 57867, 57873, 57877, 57881,
-    57890, 57899, 57906, 57913, 57922, 57931, 57938, 57944, 57951, 57956,
-    57960, 57964, 57969, 57974, 57979, 57987, 57995, 57998, 58002, 58011,
-    58021, 58030, 58040, 58052, 58066, 58070, 58075, 58079, 58084, 58089,
-    58094, 58100, 58106, 58113, 58120, 58126, 58133, 58139, 58146, 58154,
-    58162, 58169, 58177, 58184, 0, 0, 58192, 58201, 58210, 58220, 58230,
-    58239, 58249, 58258, 58268, 58274, 58279, 58288, 58300, 58309, 58321,
-    58328, 58336, 58343, 58351, 58356, 58362, 58367, 58373, 58381, 58390,
-    58398, 58407, 58411, 58415, 58419, 58423, 58433, 0, 0, 58436, 58445,
-    58455, 58464, 58474, 58480, 58487, 58493, 58500, 58511, 58522, 58533,
-    58544, 58554, 58564, 58574, 58584, 58592, 58600, 58608, 58616, 58624,
-    58632, 58640, 58648, 58654, 58660, 58666, 58672, 58678, 58684, 58690,
-    58696, 58708, 58718, 58723, 58730, 58735, 58742, 58745, 58749, 58753,
-    58758, 58762, 58767, 58770, 58779, 58788, 58797, 58806, 58811, 58817,
-    58823, 58831, 58841, 58848, 58857, 58862, 58865, 58868, 58873, 58878,
-    58883, 58888, 58890, 58892, 58894, 58896, 58898, 58900, 58905, 58912,
-    58919, 58921, 58923, 58925, 58927, 58929, 58931, 58933, 58935, 58940,
-    58945, 58952, 58959, 58968, 58978, 58987, 58997, 59002, 59007, 59009,
-    59016, 59023, 59030, 59037, 59044, 59051, 59058, 59061, 59064, 59067,
-    59070, 59075, 59080, 59085, 59090, 59095, 59100, 59105, 59110, 59115,
-    59120, 59125, 59130, 59136, 59140, 59145, 59150, 59155, 59160, 59165,
-    59170, 59175, 59180, 59185, 59190, 59195, 59200, 59205, 59210, 59215,
-    59220, 59225, 59230, 59235, 59240, 59245, 59250, 59256, 59261, 59267,
-    59276, 59281, 59289, 59296, 59305, 59310, 59315, 59320, 59326, 0, 59333,
-    59338, 59343, 59348, 59353, 59358, 59363, 59368, 59373, 59378, 59383,
-    59389, 59393, 59398, 59403, 59408, 59413, 59418, 59423, 59428, 59433,
-    59438, 59443, 59448, 59453, 59458, 59463, 59468, 59473, 59478, 59483,
-    59488, 59493, 59498, 59503, 59509, 59514, 59520, 59529, 59534, 59542,
-    59549, 59558, 59563, 59568, 59573, 59579, 0, 59586, 59594, 59602, 59611,
-    59618, 59626, 59632, 59641, 59649, 59657, 59665, 59673, 59681, 59689,
-    59694, 59701, 59706, 59712, 59720, 59727, 59734, 59742, 59748, 59754,
-    59761, 59769, 59778, 59788, 59794, 59801, 59806, 59816, 59826, 59831,
-    59836, 59841, 59846, 59851, 59856, 59861, 59866, 59871, 59876, 59881,
-    59886, 59891, 59896, 59901, 59906, 59911, 59916, 59921, 59926, 59931,
-    59936, 59941, 59946, 59951, 59956, 59961, 59966, 59971, 59976, 59980,
-    59984, 59989, 59994, 59999, 60004, 60009, 60014, 60019, 60024, 60029,
-    60034, 60039, 60044, 60049, 60054, 60059, 60064, 60069, 60074, 60081,
-    60088, 60095, 60102, 60109, 60116, 60123, 60130, 60137, 60144, 60151,
-    60158, 60165, 60172, 60177, 60182, 60189, 60196, 60203, 60210, 60217,
-    60224, 60231, 60238, 60245, 60252, 60259, 60266, 60272, 60278, 60284,
-    60290, 60297, 60304, 60311, 60318, 60325, 60332, 60339, 60346, 60353,
-    60360, 60368, 60376, 60384, 60392, 60400, 60408, 60416, 60424, 60428,
-    60434, 60440, 60444, 60450, 60456, 60462, 60469, 60476, 60483, 60490,
-    60495, 60501, 60507, 60514, 0, 0, 0, 0, 0, 60521, 60529, 60538, 60547,
-    60555, 60560, 60565, 60570, 60575, 60580, 60585, 60590, 60595, 60600,
-    60605, 60610, 60615, 60620, 60625, 60630, 60635, 60640, 60645, 60650,
-    60655, 60660, 60665, 60670, 60675, 60680, 60685, 60690, 60695, 60700,
-    60705, 60710, 60715, 60720, 60725, 60730, 60735, 60740, 60745, 60750,
-    60755, 0, 60760, 0, 0, 0, 0, 0, 60765, 0, 0, 60770, 60774, 60779, 60784,
-    60789, 60794, 60803, 60808, 60813, 60818, 60823, 60828, 60833, 60838,
-    60843, 60850, 60855, 60860, 60869, 60876, 60881, 60886, 60891, 60898,
-    60903, 60910, 60915, 60920, 60927, 60934, 60939, 60944, 60949, 60956,
-    60963, 60968, 60973, 60978, 60983, 60988, 60995, 61002, 61007, 61012,
-    61017, 61022, 61027, 61032, 61037, 61042, 61047, 61052, 61057, 61064,
-    61069, 61074, 0, 0, 0, 0, 0, 0, 0, 61079, 61086, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 61091, 61096, 61100, 61104, 61108, 61112, 61116, 61120,
-    61124, 61128, 61132, 61136, 61142, 61146, 61150, 61154, 61158, 61162,
-    61166, 61170, 61174, 61178, 61182, 61186, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    61190, 61194, 61198, 61202, 61206, 61210, 61214, 0, 61218, 61222, 61226,
-    61230, 61234, 61238, 61242, 0, 61246, 61250, 61254, 61258, 61262, 61266,
-    61270, 0, 61274, 61278, 61282, 61286, 61290, 61294, 61298, 0, 61302,
-    61306, 61310, 61314, 61318, 61322, 61326, 0, 61330, 61334, 61338, 61342,
-    61346, 61350, 61354, 0, 61358, 61362, 61366, 61370, 61374, 61378, 61382,
-    0, 61386, 61390, 61394, 61398, 61402, 61406, 61410, 0, 61414, 61419,
-    61424, 61429, 61434, 61439, 61444, 61448, 61453, 61458, 61463, 61467,
-    61472, 61477, 61482, 61487, 61491, 61496, 61501, 61506, 61511, 61516,
-    61521, 61525, 61530, 61535, 61542, 61547, 61552, 61558, 61565, 61572,
-    61581, 61588, 61597, 61601, 61605, 61611, 61617, 61623, 61631, 61637,
-    61641, 61645, 61649, 61655, 61661, 61665, 61667, 61671, 61677, 61679,
-    61683, 61687, 61691, 61697, 61702, 61706, 61710, 61715, 61721, 61726,
-    61731, 61736, 61741, 61748, 61755, 61760, 61765, 61770, 61775, 61780,
-    61785, 61789, 61793, 61801, 61809, 61815, 61819, 61824, 61827, 61831,
-    61838, 61841, 61845, 61849, 61852, 61858, 61864, 61867, 61873, 61877,
-    61881, 61887, 61892, 61897, 61899, 61902, 61906, 61912, 61918, 61922,
-    61927, 61936, 61939, 61945, 61950, 61954, 61958, 61962, 61965, 61970, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    61976, 61980, 61984, 61989, 61994, 61999, 62003, 62007, 62011, 62016,
-    62021, 62025, 62029, 62033, 62037, 62042, 62047, 62052, 62057, 62061,
-    62065, 62070, 62075, 62080, 62085, 62089, 0, 62093, 62097, 62101, 62105,
-    62109, 62113, 62117, 62122, 62127, 62131, 62136, 62141, 62150, 62154,
-    62158, 62162, 62169, 62173, 62178, 62183, 62187, 62191, 62197, 62202,
-    62207, 62212, 62217, 62221, 62225, 62229, 62233, 62237, 62242, 62247,
-    62251, 62255, 62260, 62265, 62270, 62274, 62278, 62283, 62288, 62294,
-    62300, 62304, 62310, 62316, 62320, 62326, 62332, 62337, 62342, 62346,
-    62352, 62356, 62360, 62366, 62372, 62377, 62382, 62386, 62390, 62398,
-    62404, 62410, 62416, 62421, 62426, 62431, 62437, 62441, 62447, 62451,
-    62455, 62461, 62467, 62473, 62479, 62485, 62491, 62497, 62503, 62509,
-    62515, 62521, 62527, 62531, 62537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    62543, 62546, 62550, 62554, 62558, 62562, 62565, 62568, 62572, 62576,
-    62580, 62584, 62587, 62592, 62596, 62600, 62604, 62609, 62613, 62617,
-    62621, 62625, 62631, 62637, 62641, 62645, 62649, 62653, 62657, 62661,
-    62665, 62669, 62673, 62677, 62681, 62687, 62691, 62695, 62699, 62703,
-    62707, 62711, 62715, 62719, 62723, 62727, 62731, 62735, 62739, 62743,
-    62747, 62751, 62757, 62763, 62768, 62773, 62777, 62781, 62785, 62789,
-    62793, 62797, 62801, 62805, 62809, 62813, 62817, 62821, 62825, 62829,
-    62833, 62837, 62841, 62845, 62849, 62853, 62857, 62861, 62865, 62869,
-    62875, 62879, 62883, 62887, 62891, 62895, 62899, 62903, 62907, 62912,
-    62919, 62923, 62927, 62931, 62935, 62939, 62943, 62947, 62951, 62955,
-    62959, 62963, 62967, 62974, 62978, 62984, 62988, 62992, 62996, 63000,
-    63004, 63007, 63011, 63015, 63019, 63023, 63027, 63031, 63035, 63039,
-    63043, 63047, 63051, 63055, 63059, 63063, 63067, 63071, 63075, 63079,
-    63083, 63087, 63091, 63095, 63099, 63103, 63107, 63111, 63115, 63119,
-    63123, 63127, 63131, 63135, 63141, 63145, 63149, 63153, 63157, 63161,
-    63165, 63169, 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201,
-    63205, 63209, 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241,
-    63245, 63249, 63257, 63261, 63265, 63269, 63273, 63277, 63283, 63287,
-    63291, 63295, 63299, 63303, 63307, 63311, 63315, 63319, 63323, 63327,
-    63331, 63335, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369,
-    63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409,
-    63413, 63417, 63421, 63425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63429, 63438, 63446, 63457, 63467,
-    63475, 63484, 63493, 63503, 63515, 63527, 63539, 0, 0, 0, 0, 63545,
-    63548, 63551, 63556, 63559, 63566, 63570, 63574, 63578, 63582, 63586,
-    63591, 63596, 63600, 63604, 63609, 63614, 63619, 63624, 63627, 63630,
-    63636, 63642, 63647, 63652, 63659, 63666, 63670, 63674, 63678, 63686,
-    63692, 63699, 63704, 63709, 63714, 63719, 63724, 63729, 63734, 63739,
-    63744, 63749, 63754, 63759, 63764, 63769, 63775, 63780, 63784, 63790,
-    63801, 63811, 63826, 63836, 63840, 63850, 63856, 63862, 63868, 63873,
-    63876, 63881, 63885, 0, 63891, 63895, 63898, 63902, 63905, 63909, 63912,
-    63916, 63919, 63923, 63926, 63929, 63933, 63937, 63941, 63945, 63949,
-    63953, 63957, 63961, 63965, 63968, 63972, 63976, 63980, 63984, 63988,
-    63992, 63996, 64000, 64004, 64007, 64011, 64015, 64019, 64024, 64028,
-    64032, 64036, 64040, 64043, 64047, 64050, 64054, 64058, 64062, 64066,
-    64069, 64073, 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104,
-    64108, 64112, 64116, 64120, 64124, 64127, 64131, 64135, 64139, 64143,
-    64147, 64150, 64155, 64159, 64164, 64168, 64171, 64175, 64179, 64183,
-    64187, 64192, 64196, 64200, 64204, 64208, 64212, 64216, 64220, 0, 0,
-    64225, 64233, 64241, 64248, 64255, 64259, 64265, 64270, 64275, 64279,
-    64282, 64286, 64289, 64293, 64296, 64300, 64303, 64307, 64310, 64313,
-    64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, 64349, 64352,
-    64356, 64360, 64364, 64368, 64372, 64376, 64380, 64384, 64388, 64391,
-    64395, 64399, 64403, 64408, 64412, 64416, 64420, 64424, 64427, 64431,
-    64434, 64438, 64442, 64446, 64450, 64453, 64457, 64460, 64464, 64468,
-    64472, 64476, 64480, 64484, 64488, 64492, 64496, 64500, 64504, 64508,
-    64511, 64515, 64519, 64523, 64527, 64531, 64534, 64539, 64543, 64548,
-    64552, 64555, 64559, 64563, 64567, 64571, 64576, 64580, 64584, 64588,
-    64592, 64596, 64600, 64604, 64609, 64613, 64617, 64621, 64625, 64629,
-    64636, 64640, 64646, 0, 0, 0, 0, 0, 64651, 64656, 64661, 64666, 64671,
-    64676, 64681, 64686, 64690, 64695, 64700, 64705, 64710, 64715, 64720,
-    64725, 64730, 64735, 64739, 64744, 64749, 64754, 64758, 64762, 64766,
-    64771, 64776, 64781, 64786, 64791, 64796, 64801, 64806, 64811, 64816,
-    64820, 64824, 64829, 64834, 64839, 64844, 64849, 64856, 0, 64861, 64865,
-    64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, 64905,
-    64909, 64913, 64917, 64921, 64925, 64929, 64933, 64937, 64941, 64945,
-    64949, 64953, 64957, 64961, 64965, 64969, 64973, 64977, 64981, 64984,
-    64988, 64991, 64995, 64999, 65002, 65006, 65010, 65013, 65017, 65021,
-    65025, 65029, 65032, 65036, 65040, 65044, 65048, 65052, 65056, 65059,
-    65062, 65066, 65070, 65074, 65078, 65082, 65086, 65090, 65094, 65098,
-    65102, 65106, 65110, 65114, 65118, 65122, 65126, 65130, 65134, 65138,
-    65142, 65146, 65150, 65154, 65158, 65162, 65166, 65170, 65174, 65178,
-    65182, 65186, 65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218,
-    65222, 65226, 0, 65230, 65236, 65242, 65247, 65252, 65257, 65263, 65269,
-    65274, 65280, 65286, 65292, 65298, 65304, 65310, 65316, 65322, 65327,
-    65332, 65337, 65342, 65347, 65352, 65357, 65362, 65367, 65372, 65377,
-    65382, 65387, 65392, 65397, 65402, 65407, 65412, 65417, 65422, 65428,
-    65434, 65440, 65446, 65451, 65456, 0, 0, 0, 0, 0, 65461, 65466, 65471,
-    65476, 65481, 65486, 65491, 65496, 65501, 65506, 65511, 65516, 65521,
-    65526, 65531, 65536, 65541, 65546, 65551, 65556, 65561, 65566, 65571,
-    65576, 65581, 65586, 65591, 65596, 65601, 65606, 65611, 65616, 65621,
-    65626, 65631, 65636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65641, 65646,
-    65651, 65656, 65660, 65665, 65669, 65674, 65679, 65684, 65689, 65694,
-    65698, 65703, 65708, 65713, 65718, 65722, 65726, 65730, 65734, 65738,
-    65742, 65746, 65750, 65754, 65758, 65762, 65766, 65770, 65774, 65779,
-    65784, 65789, 65794, 65799, 65804, 65809, 65814, 65819, 65824, 65829,
-    65834, 65839, 65844, 65849, 65855, 0, 65862, 65866, 65870, 65874, 65878,
-    65882, 65886, 65890, 65894, 65898, 65903, 65908, 65913, 65918, 65923,
-    65928, 65933, 65938, 65943, 65948, 65953, 65958, 65963, 65968, 65973,
-    65978, 65983, 65988, 65993, 65998, 66003, 66008, 66013, 66018, 66023,
-    66028, 66033, 66038, 66043, 66048, 66053, 66062, 66071, 66080, 66089,
-    66098, 66107, 66116, 66125, 66128, 66133, 66138, 66143, 66148, 66153,
-    66158, 66163, 66168, 66173, 66177, 66182, 66187, 66192, 66197, 66202,
-    66206, 66210, 66214, 66218, 66222, 66226, 66230, 66234, 66238, 66242,
-    66246, 66250, 66254, 66258, 66263, 66268, 66273, 66278, 66283, 66288,
-    66293, 66298, 66303, 66308, 66313, 66318, 66323, 66328, 66334, 66340,
-    66345, 66350, 66354, 66358, 66362, 66366, 66370, 66374, 66378, 66382,
-    66386, 66391, 66396, 66401, 66406, 66411, 66416, 66421, 66426, 66431,
-    66436, 66441, 66446, 66451, 66456, 66461, 66466, 66471, 66476, 66481,
-    66486, 66491, 66496, 66501, 66506, 66511, 66516, 66521, 66526, 66531,
-    66536, 66541, 66546, 66551, 66556, 66561, 66566, 66571, 66576, 66581,
-    66586, 66591, 66596, 66601, 66606, 66610, 66615, 66620, 66625, 66630,
-    66635, 66640, 66645, 66650, 66655, 66659, 66666, 66673, 66680, 66687,
-    66694, 66701, 66708, 66715, 66722, 66729, 66736, 66743, 66746, 66749,
-    66752, 66757, 66760, 66763, 66766, 66769, 66772, 66775, 66779, 66783,
-    66787, 66791, 66794, 66798, 66802, 66806, 66810, 66813, 66817, 66821,
-    66825, 66828, 66831, 66835, 66839, 66843, 66847, 66850, 66854, 66858,
-    66862, 66866, 66869, 66873, 66877, 66881, 66885, 66888, 66892, 66896,
-    66899, 66903, 66907, 66911, 66915, 66919, 66923, 66927, 66931, 66938,
-    66941, 66944, 66947, 66950, 66953, 66956, 66959, 66962, 66965, 66968,
-    66971, 66974, 66977, 66980, 66983, 66986, 66989, 66992, 66995, 66998,
-    67001, 67004, 67007, 67010, 67013, 67016, 67019, 67022, 67025, 67028,
-    67031, 67034, 67037, 67040, 67043, 67046, 67049, 67052, 67055, 67058,
-    67061, 67064, 67067, 67070, 67073, 67076, 67079, 67082, 67085, 67088,
-    67091, 67094, 67097, 67100, 67103, 67106, 67109, 67112, 67115, 67118,
-    67121, 67124, 67127, 67130, 67133, 67136, 67139, 67142, 67145, 67148,
-    67151, 67154, 67157, 67160, 67163, 67166, 67169, 67172, 67175, 67178,
-    67181, 67184, 67187, 67190, 67193, 67196, 67199, 67202, 67211, 67219,
-    67227, 67235, 67243, 67251, 67259, 67267, 67275, 67283, 67292, 67301,
-    67310, 67319, 67328, 67337, 67346, 67355, 67364, 67373, 67382, 67391,
-    67400, 67409, 67418, 67421, 67424, 67427, 67429, 67432, 67435, 67438,
-    67443, 67448, 67451, 67458, 67465, 67472, 67479, 67482, 67487, 67489,
-    67493, 67495, 67497, 67500, 67503, 67506, 67509, 67512, 67515, 67518,
-    67523, 67528, 67531, 67534, 67537, 67540, 67543, 67546, 67549, 67553,
-    67556, 67559, 67562, 67565, 67568, 67573, 67576, 67579, 67582, 67587,
-    67592, 67597, 67602, 67607, 67612, 67617, 67622, 67628, 67636, 67638,
-    67641, 67644, 67647, 67650, 67656, 67664, 67667, 67670, 67675, 67678,
-    67681, 67684, 67689, 67692, 67695, 67700, 67703, 67706, 67711, 67714,
-    67717, 67722, 67727, 67732, 67735, 67738, 67741, 67744, 67750, 67753,
-    67756, 67759, 67761, 67764, 67767, 67770, 67775, 67778, 67781, 67784,
-    67787, 67790, 67795, 67798, 67801, 67804, 67807, 67810, 67813, 67816,
-    67819, 67822, 67828, 67833, 67841, 67849, 67857, 67865, 67873, 67881,
-    67889, 67897, 67905, 67914, 67923, 67932, 67941, 67950, 67959, 67968,
-    67977, 67986, 67995, 68004, 68013, 68022, 68031, 68040, 68049, 68058,
-    68067, 68076, 68085, 68094, 68103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    111469, 111473, 111478, 111482, 111487, 111491, 111496, 111501, 111507,
+    111512, 111518, 111522, 111527, 111531, 111536, 111540, 111545, 111550,
+    111555, 111560, 111565, 111570, 111575, 111580, 111585, 111590, 111595,
+    111600, 111605, 111610, 111615, 111620, 111624, 111629, 111634, 111639,
+    111643, 111648, 111652, 111657, 111662, 111667, 111671, 111676, 111680,
+    111684, 111689, 111693, 111698, 111703, 111708, 111713, 111717, 111721,
+    111727, 111732, 111738, 111743, 111749, 111755, 111762, 111768, 111775,
+    111780, 111786, 111791, 111797, 111802, 111807, 111812, 111817, 111822,
+    111827, 111833, 111837, 111841, 111845, 111850, 111854, 111860, 111865,
+    111870, 111874, 111878, 111882, 111886, 111890, 111894, 111898, 111902,
+    111906, 111911, 0, 111916, 111921, 111926, 111933, 111938, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 111943, 111947, 111951, 111956, 111960, 111965, 111969, 111974,
+    111979, 111985, 111990, 111996, 112000, 112005, 112009, 112014, 112018,
+    112023, 112028, 112033, 112038, 112043, 112048, 112053, 112058, 112063,
+    112068, 112073, 112078, 112083, 112088, 112092, 112097, 112102, 112107,
+    112111, 112115, 112120, 112125, 112130, 112134, 112138, 112142, 112146,
+    112151, 112156, 112161, 112165, 112169, 112175, 112180, 112186, 112191,
+    112197, 112203, 112210, 112216, 112223, 112228, 112235, 112241, 112246,
+    112253, 112259, 112264, 112269, 112274, 112279, 112284, 112289, 112293,
+    112298, 0, 0, 0, 0, 0, 0, 0, 0, 112302, 112307, 112311, 112315, 112319,
+    112323, 112327, 112331, 112335, 112339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68106, 68115, 68124, 68135, 68142,
-    68147, 68152, 68159, 68166, 68172, 68177, 68182, 68187, 68192, 68199,
-    68204, 68209, 68214, 68225, 68230, 68235, 68242, 68247, 68254, 68259,
-    68264, 68271, 68278, 68285, 68294, 68303, 68308, 68313, 68318, 68325,
-    68330, 68340, 68347, 68352, 68357, 68362, 68367, 68372, 68377, 68386,
-    68393, 68400, 68405, 68412, 68417, 68424, 68433, 68444, 68449, 68458,
-    68463, 68470, 68479, 68488, 68493, 68498, 68505, 68511, 68518, 68525,
-    68529, 68533, 68536, 68540, 68544, 68548, 68552, 68556, 68560, 68564,
-    68567, 68571, 68575, 68579, 68583, 68587, 68591, 68594, 68598, 68602,
-    68605, 68609, 68613, 68617, 68621, 68625, 68629, 68633, 68637, 68641,
-    68645, 68649, 68653, 68657, 68661, 68665, 68669, 68673, 68677, 68681,
-    68685, 68689, 68693, 68697, 68701, 68705, 68709, 68713, 68717, 68721,
-    68725, 68729, 68733, 68737, 68741, 68745, 68749, 68753, 68757, 68761,
-    68765, 68769, 68773, 68777, 68781, 68784, 68788, 68792, 68796, 68800,
-    68804, 68808, 68812, 68816, 68820, 68824, 68828, 68832, 68836, 68840,
-    68844, 68848, 68852, 68856, 68860, 68864, 68868, 68872, 68876, 68880,
-    68884, 68888, 68892, 68896, 68900, 68904, 68908, 68912, 68916, 68920,
-    68924, 68928, 68932, 68936, 68940, 68944, 68948, 68952, 68956, 68960,
-    68964, 68968, 68972, 68976, 68980, 68984, 68988, 68992, 68996, 69000,
-    69004, 69008, 69012, 69016, 69020, 69024, 69028, 69032, 69036, 69040,
-    69044, 69048, 69052, 69056, 69060, 69064, 69068, 69072, 69076, 69080,
-    69084, 69088, 69092, 69096, 69100, 69104, 69108, 69112, 69116, 69120,
-    69124, 69128, 69132, 69136, 69140, 69144, 69148, 69152, 69156, 69160,
-    69164, 69168, 69172, 69176, 69180, 69184, 69188, 69192, 69196, 69200,
-    69204, 69208, 69212, 69216, 69220, 69224, 69228, 69232, 69236, 69240,
-    69244, 69248, 69252, 69255, 69259, 69263, 69267, 69271, 69275, 69279,
-    69283, 69287, 69291, 69295, 69299, 69303, 69307, 69311, 69315, 69319,
-    69323, 69327, 69331, 69335, 69339, 69343, 69347, 69351, 69355, 69359,
-    69363, 69367, 69371, 69375, 69379, 69383, 69387, 69391, 69395, 69399,
-    69403, 69407, 69411, 69415, 69419, 69423, 69427, 69431, 69435, 69439,
-    69443, 69447, 69451, 69455, 69459, 69463, 69467, 69471, 69475, 69479,
-    69483, 69487, 69491, 69495, 69499, 69503, 69507, 69511, 69515, 69519,
-    69523, 69527, 69531, 69535, 69539, 69543, 69547, 69551, 69555, 69559,
-    69563, 69567, 69571, 69575, 69579, 69583, 69587, 69591, 69595, 69599,
-    69603, 69607, 69611, 69615, 69619, 69623, 69627, 69631, 69635, 69639,
-    69643, 69647, 69651, 69655, 69659, 69663, 69667, 69671, 69675, 69679,
-    69683, 69686, 69690, 69694, 69698, 69702, 69706, 69710, 69714, 69717,
-    69721, 69725, 69729, 69733, 69737, 69741, 69745, 69749, 69753, 69757,
-    69761, 69765, 69769, 69773, 69777, 69781, 69785, 69789, 69793, 69797,
-    69801, 69805, 69809, 69813, 69817, 69821, 69825, 69829, 69833, 69837,
-    69841, 69845, 69849, 69853, 69857, 69861, 69865, 69869, 69873, 69877,
-    69881, 69885, 69889, 69893, 69897, 69901, 69905, 69909, 69913, 69917,
-    69921, 69925, 69929, 69933, 69937, 69941, 69945, 69949, 69953, 69957,
-    69961, 69965, 69969, 69973, 69977, 69981, 69985, 69989, 69993, 69997,
-    70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033, 70037,
-    70041, 70045, 70049, 70053, 70057, 70061, 70065, 70069, 70073, 70076,
-    70080, 70084, 70088, 70092, 70096, 70100, 70104, 70108, 70112, 70116,
-    70120, 70124, 70128, 70132, 70136, 70140, 70144, 70148, 70152, 70156,
-    70160, 70164, 70168, 70172, 70176, 70180, 70184, 70188, 70192, 70196,
-    70200, 70204, 70208, 70212, 70216, 70220, 70224, 70228, 70232, 70236,
-    70240, 70244, 70248, 70252, 70256, 70260, 70264, 70268, 70272, 70276,
-    70280, 70284, 70288, 70292, 70296, 70300, 70304, 70308, 70312, 70315,
-    70319, 70323, 70327, 70331, 70335, 70339, 70343, 70347, 70351, 70355,
-    70359, 70363, 70367, 70371, 70375, 70379, 70383, 70387, 70391, 70395,
-    70399, 70403, 70407, 70411, 70415, 70419, 70423, 70427, 70431, 70435,
-    70439, 70443, 70447, 70451, 70455, 70459, 70463, 70467, 70471, 70475,
-    70479, 70483, 70487, 70491, 70495, 70499, 70503, 70507, 70511, 70515,
-    70519, 70523, 70527, 70531, 70535, 70539, 70543, 70547, 70551, 70555,
-    70559, 70563, 70567, 70570, 70574, 70578, 70582, 70586, 70590, 70594,
-    70598, 70602, 70606, 70610, 70614, 70618, 70622, 70626, 70630, 70634,
-    70638, 70642, 70646, 70650, 70654, 70658, 70662, 70666, 70670, 70674,
-    70678, 70682, 70686, 70690, 70694, 70698, 70702, 70706, 70710, 70714,
-    70718, 70722, 70726, 70730, 70734, 70738, 70742, 70746, 70750, 70754,
-    70758, 70762, 70766, 70770, 70774, 70778, 70782, 70786, 70790, 70794,
-    70798, 70802, 70806, 70810, 70814, 70818, 70822, 70826, 70830, 70834,
-    70838, 70842, 70846, 70850, 70854, 70858, 70862, 70866, 70870, 70874,
-    70878, 70882, 70886, 70890, 70894, 70898, 70902, 70906, 70910, 70914,
-    70918, 70922, 70926, 70930, 70934, 70938, 70942, 70946, 70950, 70954,
-    70958, 70962, 70966, 70970, 70974, 70978, 70982, 70986, 70990, 70994,
-    70998, 71002, 71006, 71010, 71014, 71018, 71022, 71025, 71029, 71033,
-    71037, 71041, 71045, 71049, 71053, 71057, 71061, 71065, 71069, 71073,
-    71077, 71081, 71085, 71089, 71093, 71097, 71101, 71105, 71109, 71113,
-    71117, 71121, 71125, 71129, 71133, 71137, 71141, 71145, 71149, 71153,
-    71157, 71161, 71165, 71169, 71173, 71177, 71181, 71185, 71189, 71193,
-    71197, 71201, 71205, 71209, 71213, 71217, 71221, 71225, 71229, 71233,
-    71237, 71241, 71245, 71249, 71253, 71257, 71261, 71265, 71269, 71273,
-    71277, 71281, 71285, 71289, 71293, 71297, 71301, 71305, 71309, 71313,
-    71317, 71321, 71325, 71329, 71333, 71337, 71341, 71345, 71349, 71353,
-    71357, 71361, 71365, 71369, 71373, 71377, 71381, 71385, 71389, 71393,
-    71397, 71401, 71405, 71409, 71413, 71417, 71421, 71425, 71429, 71433,
-    71437, 71441, 71445, 71449, 71453, 71457, 71461, 71465, 71469, 71473,
-    71477, 71481, 71485, 71489, 71493, 71497, 71501, 71505, 71509, 71513,
-    71517, 71521, 71525, 71529, 71533, 71537, 71541, 71545, 71549, 71553,
-    71557, 71561, 71565, 71569, 71573, 71577, 71581, 71585, 71589, 71593,
-    71597, 71601, 71605, 71609, 71613, 71617, 71621, 71625, 71628, 71632,
-    71636, 71640, 71644, 71648, 71652, 71656, 71659, 71663, 71667, 71671,
-    71675, 71679, 71683, 71687, 71691, 71695, 71699, 71703, 71707, 71711,
-    71715, 71719, 71723, 71727, 71731, 71735, 71739, 71743, 71747, 71751,
-    71755, 71759, 71763, 71767, 71771, 71775, 71779, 71783, 71787, 71791,
-    71795, 71799, 71803, 71807, 71811, 71815, 71819, 71823, 71827, 71831,
-    71835, 71839, 71843, 71847, 71851, 71855, 71859, 71863, 71867, 71871,
-    71875, 71879, 71883, 71887, 71891, 71895, 71899, 71903, 71907, 71911,
-    71915, 71919, 71923, 71927, 71931, 71935, 71939, 71943, 71947, 71951,
-    71955, 71959, 71963, 71967, 71971, 71975, 71979, 71983, 71987, 71991,
-    71995, 71999, 72003, 72007, 72011, 72015, 72019, 72023, 72027, 72031,
-    72035, 72039, 72043, 72047, 72051, 72055, 72059, 72063, 72067, 72071,
-    72075, 72079, 72083, 72087, 72091, 72095, 72099, 72103, 72107, 72111,
-    72115, 72119, 72123, 72127, 72131, 72135, 72139, 72143, 72147, 72151,
-    72155, 72159, 72163, 72167, 72171, 72175, 72179, 72183, 72187, 72191,
-    72195, 72199, 72203, 72207, 72211, 72215, 72219, 72223, 72227, 72231,
-    72235, 72239, 72243, 72247, 72251, 72255, 72259, 72263, 72267, 72271,
-    72275, 72279, 72283, 72287, 72291, 72295, 72299, 72303, 72307, 72311,
-    72315, 72319, 72323, 72327, 72331, 72335, 72339, 72343, 72347, 72351,
-    72355, 72359, 72363, 72367, 72371, 72375, 72379, 72383, 72386, 72390,
-    72394, 72398, 72402, 72406, 72410, 72414, 72418, 72422, 72426, 72430,
-    72434, 72438, 72442, 72446, 72450, 72454, 72458, 72462, 72466, 72470,
-    72474, 72478, 72482, 72486, 72490, 72494, 72498, 72502, 72506, 72510,
-    72514, 72518, 72522, 72526, 72530, 72534, 72538, 72542, 72546, 72550,
-    72554, 72558, 72562, 72566, 72570, 72574, 72578, 72582, 72586, 72590,
-    72594, 72598, 72602, 72606, 72610, 72614, 72618, 72622, 72626, 72630,
-    72634, 72638, 72642, 72646, 72650, 72654, 72658, 72662, 72666, 72670,
-    72674, 72678, 72682, 72686, 72690, 72694, 72698, 72702, 72706, 72710,
-    72714, 72718, 72722, 72726, 72730, 72734, 72738, 72742, 72746, 72750,
-    72754, 72758, 72762, 72766, 72770, 72774, 72778, 72782, 72786, 72790,
-    72794, 72798, 72802, 72806, 72810, 72814, 72818, 72822, 72826, 72830,
-    72834, 72838, 72842, 72846, 72850, 72854, 72858, 72862, 72866, 72870,
-    72874, 72878, 72882, 72886, 72890, 72894, 72898, 72902, 72906, 72910,
-    72914, 72918, 72922, 72926, 72930, 72934, 72938, 72942, 72946, 72950,
-    72954, 72958, 72962, 72966, 72970, 72974, 72978, 72982, 72986, 72990,
-    72994, 72998, 73002, 73006, 73010, 73014, 73018, 73022, 73026, 73030,
-    73034, 73038, 73042, 73046, 73050, 73054, 73058, 73062, 73066, 73070,
-    73074, 73078, 73082, 73086, 73090, 73094, 73098, 73102, 73106, 73110,
-    73114, 73118, 73122, 73126, 73130, 73134, 73138, 73142, 73146, 73150,
-    73154, 73158, 73162, 73166, 0, 0, 0, 73170, 73174, 73178, 73182, 73186,
-    73190, 73194, 73198, 73202, 73206, 73210, 73214, 73218, 73222, 73226,
-    73230, 73234, 73238, 73242, 73246, 73250, 73254, 73258, 73262, 73266,
-    73270, 73274, 73278, 73282, 73286, 73290, 73294, 73298, 73302, 73306,
-    73310, 73314, 73318, 73322, 73326, 73330, 73334, 73338, 73342, 73346,
-    73350, 73354, 73358, 73362, 73366, 73370, 73374, 73378, 73382, 73386, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 73390, 73395, 73399, 73404, 73409, 73413, 73418,
-    73423, 73427, 73432, 73437, 73442, 73447, 73452, 73457, 73462, 73466,
-    73470, 73474, 73478, 73483, 73488, 73493, 73497, 73502, 73507, 73512,
-    73517, 73522, 73526, 73531, 73535, 73540, 73544, 73549, 73553, 73557,
-    73561, 73566, 73571, 73576, 73584, 73592, 73600, 73608, 73615, 73623,
-    73629, 73637, 73641, 73645, 73649, 73653, 73657, 73661, 73665, 73669,
-    73673, 73677, 73681, 73685, 73689, 73693, 73697, 73701, 73705, 73709,
-    73713, 73717, 73721, 73725, 73729, 73733, 73737, 73741, 73745, 73749,
-    73753, 73757, 73761, 73765, 73769, 73773, 73777, 73781, 73784, 73788,
-    73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, 73828,
-    73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, 73868,
-    73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, 73908,
-    73912, 73916, 73920, 73924, 73928, 73931, 73935, 73939, 73942, 73946,
-    73950, 73954, 73957, 73961, 73965, 73969, 73973, 73977, 73981, 73985,
-    73989, 73993, 73996, 74000, 74004, 74008, 74011, 74014, 74018, 74022,
-    74025, 74029, 74033, 74037, 74041, 74045, 74049, 74052, 74055, 74059,
-    74063, 74067, 74070, 74073, 74077, 74081, 74085, 74089, 74093, 74097,
-    74101, 74105, 74109, 74113, 74117, 74121, 74125, 74129, 74133, 74137,
-    74141, 74145, 74149, 74153, 74157, 74161, 74165, 74169, 74173, 74177,
-    74181, 74185, 74189, 74193, 74197, 74201, 74205, 74209, 74213, 74217,
-    74221, 74224, 74228, 74232, 74236, 74240, 74244, 74248, 74252, 74256,
-    74260, 74264, 74268, 74272, 74276, 74280, 74284, 74288, 74292, 74296,
-    74300, 74304, 74308, 74312, 74316, 74320, 74324, 74328, 74332, 74336,
-    74340, 74344, 74348, 74352, 74356, 74360, 74364, 74368, 74371, 74375,
-    74379, 74383, 74387, 74391, 74395, 74399, 74403, 74407, 74411, 74415,
-    74419, 74423, 74427, 74431, 74435, 74438, 74442, 74446, 74450, 74454,
-    74458, 74462, 74466, 74470, 74474, 74478, 74482, 74486, 74490, 74494,
-    74498, 74502, 74506, 74510, 74514, 74518, 74522, 74525, 74529, 74533,
-    74537, 74541, 74545, 74549, 74553, 74557, 74561, 74565, 74569, 74573,
-    74577, 74581, 74585, 74589, 74593, 74597, 74601, 74605, 74609, 74613,
-    74617, 74621, 74625, 74629, 74633, 74637, 74641, 74645, 74649, 74653,
-    74657, 74661, 74665, 74669, 74673, 74677, 74681, 74685, 74689, 74693,
-    74697, 74700, 74705, 74709, 74715, 74720, 74726, 74730, 74734, 74738,
-    74742, 74746, 74750, 74754, 74758, 74762, 74766, 74770, 74774, 74778,
-    74782, 74785, 74788, 74791, 74794, 74797, 74800, 74803, 74806, 74809,
-    74814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74820,
-    74825, 74830, 74835, 74840, 74847, 74854, 74859, 74864, 74869, 74874,
-    74881, 74888, 74895, 74902, 74909, 74916, 74926, 74936, 74943, 74950,
-    74957, 74964, 74970, 74976, 74985, 74994, 75001, 75008, 75019, 75030,
-    75035, 75040, 75047, 75054, 75061, 75068, 75075, 75082, 75089, 75096,
-    75102, 75108, 75114, 75120, 75127, 75134, 75139, 75143, 75150, 75157,
-    75164, 75168, 75175, 75179, 75184, 75188, 75194, 75199, 75205, 75210,
-    75214, 75218, 75221, 75224, 75229, 75234, 75239, 75244, 75249, 75254,
-    75259, 75264, 75269, 75274, 75282, 75290, 75295, 75300, 75305, 75310,
-    75315, 75320, 75325, 75330, 75335, 75340, 75345, 75350, 75355, 75360,
-    75366, 75372, 75378, 75384, 75389, 75395, 75398, 75401, 75404, 75408,
-    75412, 75416, 75420, 75423, 75427, 75430, 75433, 75436, 75440, 75444,
-    75448, 75452, 75456, 75460, 75464, 75468, 75472, 75476, 75480, 75484,
-    75488, 75492, 75496, 75500, 75504, 75508, 75512, 75516, 75520, 75524,
-    75527, 75531, 75535, 75539, 75543, 75547, 75551, 75555, 75559, 75563,
-    75567, 75571, 75575, 75579, 75583, 75587, 75591, 75595, 75599, 75603,
-    75607, 75611, 75615, 75619, 75623, 75626, 75630, 75634, 75638, 75642,
-    75646, 75650, 75654, 75657, 75661, 75665, 75669, 75673, 75677, 75681,
-    75685, 75689, 75693, 75697, 75701, 75705, 75710, 75715, 75718, 75723,
-    75726, 75729, 75732, 0, 0, 0, 0, 0, 0, 0, 0, 75736, 75745, 75754, 75763,
-    75772, 75781, 75790, 75799, 75808, 75816, 75823, 75831, 75838, 75846,
-    75856, 75865, 75875, 75884, 75894, 75902, 75909, 75917, 75924, 75932,
-    75937, 75942, 75948, 75957, 75963, 75969, 75976, 75985, 75993, 76001,
-    76009, 76016, 76023, 76030, 76037, 76042, 76047, 76052, 76057, 76062,
-    76067, 76072, 76077, 76085, 76093, 76099, 76105, 76110, 76115, 76120,
-    76125, 76130, 76135, 76140, 76145, 76154, 76163, 76168, 76173, 76183,
-    76193, 76200, 76207, 76216, 76225, 76237, 76249, 76255, 76261, 76269,
-    76277, 76287, 76297, 76304, 76311, 76316, 76321, 76333, 76345, 76353,
-    76361, 76371, 76381, 76393, 76405, 76414, 76423, 76430, 76437, 76444,
-    76451, 76460, 76469, 76474, 76479, 76486, 76493, 76500, 76507, 76519,
-    76531, 76536, 76541, 76546, 76551, 76556, 76561, 76566, 76571, 76575,
-    76580, 76585, 76590, 76595, 76600, 76606, 76611, 76616, 76623, 76630,
-    76637, 76644, 76651, 76659, 76667, 76672, 76677, 76683, 76689, 76696,
-    76703, 76710, 76717, 76724, 76728, 76735, 76740, 76745, 76751, 76764,
-    76770, 76778, 76786, 76793, 76800, 76809, 76818, 76825, 76832, 76839,
-    76846, 76853, 76860, 76867, 76874, 76881, 76888, 76897, 76906, 76915,
-    76924, 76933, 76942, 76951, 76960, 76969, 76978, 76985, 76992, 76998,
-    77006, 77012, 77018, 77024, 77030, 77038, 77043, 77048, 77053, 77058,
-    77063, 77069, 77075, 77081, 77087, 77093, 77099, 77105, 0, 0, 77111,
-    77118, 77125, 77134, 77141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 77150, 77157, 77164, 77170, 77177, 77185,
-    77193, 77201, 77209, 77217, 77223, 77229, 77236, 77242, 77248, 77254,
-    77261, 77268, 77275, 77282, 77289, 77296, 77303, 77310, 77317, 77324,
-    77331, 77338, 77345, 77352, 77358, 77365, 77372, 77379, 77386, 77393,
-    77400, 77407, 77414, 77421, 77428, 77435, 77442, 77449, 77456, 77463,
-    77470, 77477, 77484, 77492, 77500, 77508, 77516, 0, 0, 0, 0, 77524,
-    77531, 77538, 77545, 77552, 77559, 77566, 77572, 77578, 77584, 0, 0, 0,
-    0, 0, 0, 77590, 77594, 77599, 77604, 77609, 77614, 77619, 77624, 77629,
-    77633, 77638, 77643, 77647, 77651, 77656, 77661, 77665, 77670, 77675,
-    77680, 77685, 77690, 77695, 77700, 77704, 77708, 77712, 77717, 77721,
-    77725, 77729, 77733, 77737, 77741, 77745, 77750, 77755, 77760, 77765,
-    77770, 77777, 77783, 77788, 77793, 77798, 77803, 77809, 77816, 77822,
-    77829, 77835, 77841, 77846, 77853, 77859, 77864, 0, 0, 0, 0, 0, 0, 0, 0,
-    77870, 77875, 77880, 77884, 77889, 77893, 77898, 77902, 77907, 77912,
-    77918, 77923, 77929, 77933, 77938, 77943, 77947, 77952, 77957, 77961,
-    77966, 77971, 77976, 77981, 77986, 77991, 77996, 78001, 78006, 78011,
-    78016, 78021, 78026, 78031, 78035, 78040, 78045, 78050, 78054, 78058,
-    78063, 78068, 78073, 78077, 78081, 78085, 78089, 78094, 78099, 78104,
-    78108, 78112, 78117, 78123, 78129, 78134, 78140, 78145, 78151, 78157,
-    78164, 78170, 78177, 78182, 78188, 78194, 78199, 78205, 78211, 78216, 0,
-    0, 0, 0, 0, 0, 0, 0, 78221, 78225, 78230, 78235, 78239, 78243, 78247,
-    78251, 78255, 78259, 78263, 78267, 0, 0, 0, 0, 0, 0, 78271, 78276, 78280,
-    78284, 78288, 78292, 78296, 78300, 78304, 78308, 78312, 78316, 78320,
-    78324, 78328, 78332, 78336, 78341, 78346, 78352, 78358, 78365, 78370,
-    78375, 78381, 78385, 78390, 78393, 78396, 78400, 78405, 78409, 78414,
-    78421, 78427, 78433, 78439, 78445, 78451, 78457, 78463, 78469, 78475,
-    78481, 78488, 78495, 78502, 78508, 78515, 78522, 78529, 78535, 78542,
-    78548, 78554, 78561, 78567, 78574, 78581, 78587, 78593, 78599, 78606,
-    78613, 78619, 78626, 78633, 78639, 78646, 78652, 78659, 78666, 78672,
-    78678, 78685, 78691, 78698, 78705, 78714, 78721, 78728, 78732, 78737,
-    78742, 78746, 78751, 78755, 78759, 78764, 78768, 78773, 78778, 78783,
-    78787, 78791, 78795, 78799, 78804, 78808, 78813, 78818, 78823, 78828,
-    78832, 78837, 78842, 78847, 78853, 78858, 78864, 78870, 78876, 78882,
-    78888, 78893, 78899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78903, 78908,
-    78912, 78916, 78920, 78924, 78928, 78932, 78936, 78940, 78944, 78948,
-    78952, 78956, 78960, 78964, 78968, 78972, 78976, 78980, 78984, 78988,
-    78992, 78996, 79000, 79004, 79008, 79012, 79016, 79020, 0, 0, 0, 79024,
-    79029, 79034, 79039, 79044, 79048, 79055, 79059, 79064, 79068, 79075,
-    79082, 79091, 79095, 79100, 79104, 79108, 79115, 79122, 79127, 79134,
-    79139, 79144, 79151, 79156, 79163, 79170, 79175, 79180, 79187, 79192,
-    79199, 79206, 79210, 79217, 79222, 79229, 79233, 79237, 79244, 79249,
-    79256, 79260, 79264, 79268, 79275, 79279, 79284, 79291, 79298, 79302,
-    79306, 79313, 79319, 79325, 79331, 79339, 79345, 79353, 79359, 79367,
-    79373, 79379, 79385, 79391, 79395, 79400, 79405, 79411, 79417, 79423,
-    79429, 79435, 79441, 79447, 79453, 79461, 79467, 0, 79474, 79478, 79483,
-    79487, 79491, 79495, 79499, 79503, 79507, 79511, 79515, 0, 0, 0, 0,
-    79519, 79527, 79533, 79539, 79545, 79551, 79557, 79563, 79569, 79576,
-    79583, 79590, 79597, 79604, 79611, 79618, 79625, 79632, 79639, 79646,
-    79652, 79658, 79664, 79670, 79676, 79682, 79688, 79694, 79700, 79707,
-    79714, 79721, 79728, 0, 79735, 79739, 79743, 79747, 79751, 79756, 79760,
-    79764, 79769, 79774, 79779, 79784, 79789, 79794, 79799, 79804, 79809,
-    79814, 79819, 79824, 79828, 79833, 79838, 79843, 79848, 79852, 79857,
-    79861, 79866, 79871, 79876, 79881, 79886, 79890, 79895, 79899, 79903,
-    79907, 79912, 79917, 79921, 79925, 79931, 79936, 79942, 79948, 79953,
-    79959, 79964, 79970, 79976, 79982, 79987, 79992, 79997, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 80003, 80009, 80015, 80021, 80028, 80034, 80040, 80046, 80052,
-    80058, 80063, 80068, 80074, 80081, 0, 0, 80088, 80093, 80097, 80101,
-    80105, 80109, 80113, 80117, 80121, 80125, 0, 0, 80129, 80135, 80141,
-    80148, 80156, 80162, 80168, 80174, 80180, 80186, 80192, 80198, 80204,
-    80210, 80216, 80222, 80227, 80232, 80237, 80243, 80249, 80256, 80262,
-    80268, 80273, 80280, 80287, 80294, 80300, 80305, 80310, 80315, 80323,
-    80330, 80337, 80345, 80353, 80360, 80367, 80374, 80381, 80388, 80395,
-    80402, 80409, 80416, 80423, 80430, 80437, 80444, 80451, 80458, 80465,
-    80472, 80479, 80486, 80493, 80499, 80505, 80512, 80519, 80526, 80533,
-    80540, 80547, 80554, 80561, 80568, 80575, 80582, 80589, 80596, 80603,
-    80610, 80617, 80624, 80631, 80638, 80645, 80652, 80659, 80666, 80673,
-    80679, 80685, 80692, 80698, 80703, 80709, 80714, 80719, 80724, 80731,
-    80737, 80743, 80749, 80755, 80761, 80767, 80773, 80781, 80789, 80797, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    80805, 80811, 80817, 80823, 80831, 80839, 80845, 80851, 80858, 80865,
-    80872, 80879, 80886, 80893, 80900, 80907, 80914, 80922, 80930, 80938,
-    80946, 80954, 80960, 80968, 80974, 80982, 80991, 80999, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 81005, 81009, 81013, 81017, 81021, 81025, 0, 0, 81029, 81033,
-    81037, 81041, 81045, 81049, 0, 0, 81053, 81057, 81061, 81065, 81069,
-    81073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81077, 81081, 81085, 81089, 81093,
-    81097, 81101, 0, 81105, 81109, 81113, 81117, 81121, 81125, 81129, 0,
-    81133, 81140, 81146, 81152, 81158, 81166, 81173, 81182, 81194, 81204,
-    81213, 81221, 81229, 81237, 81243, 81251, 81258, 81265, 81273, 81283,
-    81290, 81299, 81305, 81315, 81324, 81329, 81337, 81346, 81351, 81360,
-    81367, 81377, 81389, 81394, 81400, 81407, 81412, 81422, 81432, 81442,
-    81452, 81467, 81480, 81491, 81499, 81504, 81516, 81525, 81532, 81539,
-    81545, 81551, 81556, 81563, 81569, 81580, 0, 0, 0, 0, 0, 0, 0, 0, 81591,
-    81595, 81599, 81603, 81607, 81611, 81616, 81621, 81625, 81630, 81635,
-    81640, 81645, 81650, 81654, 81659, 81664, 81669, 81674, 81679, 81683,
-    81688, 81693, 81698, 81703, 81708, 81712, 81717, 81722, 81727, 81732,
-    81736, 81741, 81746, 81751, 81756, 81761, 81766, 81771, 81776, 81781,
-    81786, 81791, 81796, 81801, 81805, 81810, 81815, 81820, 81825, 81830,
-    81835, 81840, 81844, 81849, 81854, 81859, 81864, 81869, 81874, 81879,
-    81884, 81889, 81894, 81899, 81904, 81909, 81914, 81919, 81924, 81929,
-    81934, 81939, 81944, 81949, 81954, 81959, 81964, 81969, 81974, 81978,
-    81985, 81992, 81999, 82006, 82012, 82018, 82025, 82032, 82039, 82046,
-    82053, 82060, 82067, 82074, 82081, 82087, 82094, 82101, 82108, 82115,
-    82122, 82129, 82136, 82143, 82150, 82157, 82164, 82173, 82182, 82191,
-    82200, 82209, 82218, 82227, 82236, 82244, 82252, 82260, 82268, 82276,
-    82284, 82292, 82300, 82306, 82314, 0, 0, 82322, 82329, 82335, 82341,
-    82347, 82353, 82359, 82365, 82371, 82377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112343, 112347, 112352, 112356, 112361,
+    112365, 112370, 112375, 112381, 112386, 112392, 112396, 112401, 112405,
+    112410, 112414, 112419, 112424, 112429, 112434, 112439, 112444, 112449,
+    112454, 112459, 112464, 112469, 112474, 112479, 112484, 112488, 112493,
+    112498, 112503, 112507, 112511, 112516, 112521, 112526, 112530, 112534,
+    112538, 112542, 112547, 112552, 112557, 112561, 112565, 112571, 112576,
+    112582, 112587, 112593, 112599, 0, 0, 112606, 112611, 112617, 112622,
+    112628, 112633, 112638, 112643, 112648, 112653, 112658, 112662, 112667,
+    112673, 112678, 112684, 112690, 112696, 112704, 112717, 112730, 112743,
+    112757, 112772, 112780, 112791, 112800, 112810, 112820, 112830, 112841,
+    112853, 112866, 112874, 112882, 112891, 112897, 112904, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82383, 82388,
-    82393, 82398, 82403, 82408, 82413, 82418, 82423, 82428, 82433, 82438,
-    82443, 82448, 82453, 82458, 82463, 82468, 82473, 82478, 82483, 82488,
-    82493, 0, 0, 0, 0, 82498, 82502, 82506, 82510, 82514, 82518, 82522,
-    82526, 82530, 82534, 82538, 82542, 82546, 82550, 82554, 82558, 82562,
-    82566, 82570, 82574, 82578, 82582, 82586, 82590, 82594, 82598, 82602,
-    82606, 82610, 82614, 82618, 82622, 82626, 82630, 82634, 82638, 82642,
-    82646, 82650, 82654, 82658, 82662, 82666, 82670, 82674, 82678, 82682,
-    82686, 82690, 0, 0, 0, 0, 82694, 82698, 82702, 82706, 82710, 82714,
-    82718, 82722, 82726, 82730, 82734, 82738, 82742, 82746, 82750, 82754,
-    82758, 82762, 82766, 82770, 82774, 82778, 82782, 82786, 82790, 82794,
-    82798, 82802, 82806, 82810, 82814, 82818, 82822, 82826, 82830, 82834,
-    82838, 82842, 82846, 82850, 82854, 82858, 82862, 82866, 82870, 82874,
-    82878, 82882, 82886, 82890, 82894, 82898, 82902, 82906, 82910, 82914,
-    82918, 82922, 82926, 82930, 82934, 82938, 82942, 82946, 82950, 82954,
-    82958, 82962, 82966, 82970, 82974, 82978, 82982, 82986, 82990, 82994,
-    82998, 83002, 83006, 83010, 83014, 83018, 83022, 83026, 83030, 83034,
-    83038, 83042, 83046, 83050, 83054, 83058, 83062, 83066, 83070, 83074,
-    83078, 83082, 83086, 83090, 83094, 83098, 83102, 83106, 83110, 83114,
-    83118, 83122, 83126, 83130, 83134, 83138, 83142, 83146, 83150, 83154,
-    83158, 83162, 83166, 83170, 83174, 83178, 83182, 83186, 83190, 83194,
-    83198, 83202, 83206, 83210, 83214, 83218, 83222, 83226, 83230, 83234,
-    83238, 83242, 83246, 83250, 83254, 83258, 83262, 83266, 83270, 83274,
-    83278, 83282, 83286, 83290, 83294, 83298, 83302, 83306, 83310, 83314,
-    83318, 83322, 83326, 83330, 83334, 83338, 83342, 83346, 83350, 83354,
-    83358, 83362, 83366, 83370, 83374, 83378, 83382, 83386, 83390, 83394,
-    83398, 83402, 83406, 83410, 83414, 83418, 83422, 83426, 83430, 83434,
-    83438, 83442, 83446, 83450, 83454, 83458, 83462, 83466, 83470, 83474,
-    83478, 83482, 83486, 83490, 83494, 83498, 83502, 83506, 83510, 83514,
-    83518, 83522, 83526, 83530, 83534, 83538, 83542, 83546, 83550, 83554,
-    83558, 83562, 83566, 83570, 83574, 83578, 83582, 83586, 83590, 83594,
-    83598, 83602, 83606, 83610, 83614, 83618, 83622, 83626, 83630, 83634,
-    83638, 83642, 83646, 83650, 83654, 83658, 83662, 83666, 83670, 83674,
-    83678, 83682, 83686, 83690, 83694, 83698, 83702, 83706, 83710, 83714,
-    83718, 83722, 83726, 83730, 83734, 83738, 83742, 83746, 83750, 83754,
-    83758, 83762, 83766, 83770, 83774, 83778, 83782, 83786, 83790, 83794,
-    83798, 83802, 83806, 83810, 83814, 83818, 83822, 83826, 83830, 83834,
-    83838, 83842, 83846, 83850, 83854, 83858, 83862, 83866, 83870, 83874,
-    83878, 83882, 83886, 83890, 83894, 83898, 83902, 83906, 83910, 83914,
-    83918, 83922, 83926, 83930, 83934, 83938, 83942, 83946, 83950, 83954,
-    83958, 83962, 83966, 83970, 83974, 83978, 83982, 83986, 83990, 83994,
-    83998, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, 84034,
-    84038, 84042, 84046, 84050, 84054, 84058, 84062, 84066, 84070, 84074,
-    84078, 84082, 84086, 84090, 84094, 84098, 84102, 84106, 84110, 84114,
-    84118, 84122, 84126, 84130, 84134, 84138, 84142, 84146, 84150, 84154, 0,
-    0, 84158, 84162, 84166, 84170, 84174, 84178, 84182, 84186, 84190, 84194,
-    84198, 84202, 84206, 84210, 84214, 84218, 84222, 84226, 84230, 84234,
-    84238, 84242, 84246, 84250, 84254, 84258, 84262, 84266, 84270, 84274,
-    84278, 84282, 84286, 84290, 84294, 84298, 84302, 84306, 84310, 84314,
-    84318, 84322, 84326, 84330, 84334, 84338, 84342, 84346, 84350, 84354,
-    84358, 84362, 84366, 84370, 84374, 84378, 84382, 84386, 84390, 84394,
-    84398, 84402, 84406, 84410, 84414, 84418, 84422, 84426, 84430, 84434,
-    84438, 84442, 84446, 84450, 84454, 84458, 84462, 84466, 84470, 84474,
-    84478, 84482, 84486, 84490, 84494, 84498, 84502, 84506, 84510, 84514,
-    84518, 84522, 84526, 84530, 84534, 84538, 84542, 84546, 84550, 84554,
-    84558, 84562, 84566, 84570, 84574, 84578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 112912, 112916, 112921, 112925, 112930, 112934, 112939,
+    112944, 112950, 112955, 112961, 112965, 112970, 112974, 112979, 112983,
+    112988, 112993, 112998, 113003, 113008, 113013, 113018, 113023, 113028,
+    113033, 113038, 113043, 113048, 113053, 113057, 113062, 113067, 113072,
+    113076, 113080, 113085, 113090, 113095, 113099, 113103, 113107, 113111,
+    113116, 113121, 113126, 113130, 113134, 113139, 113145, 113150, 113156,
+    113161, 113167, 113173, 113180, 113186, 113193, 113198, 113204, 113209,
+    113215, 113220, 113225, 113230, 113235, 113239, 113244, 113249, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 113254, 113259, 113263, 113267, 113271, 113275,
+    113279, 113283, 113287, 113291, 0, 0, 0, 0, 0, 0, 113295, 113301, 113306,
+    113313, 113321, 113328, 113336, 113345, 113350, 113359, 113364, 113372,
+    113381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113391,
+    113395, 113400, 113404, 113409, 113413, 113418, 113422, 113427, 113431,
+    113436, 113440, 113445, 113450, 113455, 113460, 113465, 113470, 113475,
+    113480, 113485, 113490, 113495, 113500, 113505, 113510, 113514, 113519,
+    113524, 113529, 113533, 113537, 113542, 113547, 113552, 113556, 113560,
+    113564, 113568, 113573, 113578, 113582, 113586, 113591, 113596, 113601,
+    113607, 113612, 113618, 113623, 113629, 113634, 113640, 113645, 113651,
+    113656, 113661, 0, 0, 0, 0, 0, 0, 0, 113668, 113673, 113677, 113681,
+    113685, 113689, 113693, 113697, 113701, 113705, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 84582, 84587, 84592, 84597, 84602, 84607, 84615, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 84620, 84628, 84636, 84644, 84652, 0, 0, 0, 0, 0,
-    84660, 84667, 84674, 84684, 84690, 84696, 84702, 84708, 84714, 84720,
-    84727, 84733, 84739, 84745, 84754, 84763, 84775, 84787, 84793, 84799,
-    84805, 84812, 84819, 84826, 84833, 84840, 0, 84847, 84854, 84861, 84869,
-    84876, 0, 84883, 0, 84890, 84897, 0, 84904, 84912, 0, 84919, 84926,
-    84933, 84940, 84947, 84954, 84961, 84968, 84975, 84982, 84987, 84994,
-    85001, 85007, 85013, 85019, 85026, 85032, 85038, 85044, 85051, 85057,
-    85063, 85069, 85076, 85082, 85088, 85094, 85101, 85107, 85113, 85119,
-    85126, 85132, 85138, 85144, 85151, 85157, 85163, 85169, 85176, 85182,
-    85188, 85194, 85201, 85207, 85213, 85219, 85226, 85232, 85238, 85244,
-    85251, 85257, 85263, 85269, 85276, 85282, 85288, 85294, 85301, 85307,
-    85313, 85319, 85325, 85331, 85337, 85343, 85349, 85355, 85361, 85367,
-    85373, 85379, 85385, 85391, 85398, 85404, 85410, 85416, 85423, 85429,
-    85435, 85441, 85448, 85454, 85460, 85466, 85473, 85481, 85489, 85495,
-    85501, 85507, 85514, 85523, 85532, 85540, 85548, 85556, 85565, 85573,
-    85581, 85589, 85598, 85605, 85612, 85623, 85634, 85638, 85642, 85648,
-    85654, 85660, 85666, 85676, 85686, 85693, 85700, 85707, 85715, 85723,
-    85727, 85733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85739,
-    85745, 85751, 85757, 85764, 85769, 85774, 85780, 85786, 85792, 85798,
-    85807, 85813, 85819, 85827, 85835, 85843, 85851, 85857, 85863, 85869,
-    85876, 85889, 85903, 85914, 85925, 85937, 85949, 85961, 85973, 85984,
-    85995, 86007, 86019, 86031, 86043, 86055, 86067, 86079, 86096, 86113,
-    86130, 86137, 86144, 86151, 86159, 86171, 86182, 86193, 86206, 86217,
-    86226, 86234, 86243, 86251, 86261, 86269, 86278, 86286, 86295, 86303,
-    86313, 86321, 86330, 86338, 86348, 86356, 86364, 86372, 86380, 86387,
-    86396, 86404, 86412, 86421, 86429, 86438, 86446, 86454, 86462, 86471,
-    86479, 86488, 86496, 86504, 86512, 86520, 86529, 86537, 86546, 86554,
-    86563, 86571, 86580, 86588, 86598, 86606, 86614, 86622, 86632, 86640,
-    86648, 86657, 86665, 86674, 86683, 86691, 86701, 86709, 86718, 86726,
-    86735, 86743, 86753, 86761, 86769, 86776, 86784, 86791, 86800, 86807,
-    86816, 86824, 86833, 86841, 86851, 86859, 86868, 86876, 86886, 86894,
-    86902, 86909, 86917, 86924, 86933, 86940, 86950, 86960, 86971, 86980,
-    86989, 86998, 87007, 87016, 87026, 87038, 87050, 87061, 87073, 87086,
-    87097, 87106, 87115, 87123, 87132, 87142, 87150, 87159, 87168, 87176,
-    87185, 87195, 87203, 87212, 87221, 87229, 87238, 87248, 87256, 87266,
-    87274, 87284, 87292, 87300, 87309, 87317, 87327, 87335, 87343, 87353,
-    87361, 87368, 87375, 87384, 87393, 87401, 87410, 87420, 87428, 87439,
-    87447, 87455, 87462, 87470, 87479, 87486, 87498, 87509, 87521, 87532,
-    87544, 87553, 87561, 87570, 87578, 87587, 87596, 87604, 87613, 87621,
-    87630, 87638, 87646, 87654, 87662, 87669, 87678, 87686, 87695, 87703,
-    87712, 87720, 87728, 87737, 87745, 87754, 87762, 87771, 87779, 87787,
-    87795, 87804, 87812, 87821, 87829, 87838, 87846, 87855, 87863, 87871,
-    87879, 87888, 87896, 87905, 87914, 87922, 87931, 87939, 87948, 87956,
-    87965, 87973, 87980, 87988, 87995, 88004, 88012, 88021, 88029, 88038,
-    88047, 88055, 88065, 88073, 88080, 88088, 88095, 88103, 88115, 88128,
-    88137, 88147, 88156, 88166, 88175, 88185, 88194, 88204, 88213, 88223,
-    88233, 88242, 88251, 88260, 88270, 88278, 88287, 88297, 88307, 88317,
-    88327, 88335, 88345, 88353, 88363, 88371, 88381, 88389, 88399, 88407,
-    88416, 88423, 88433, 88441, 88451, 88459, 88469, 88477, 88487, 88495,
-    88504, 88512, 88521, 88529, 88538, 88547, 88556, 88565, 88575, 88583,
-    88593, 88601, 88611, 88619, 88629, 88637, 88647, 88655, 88664, 88671,
-    88681, 88689, 88699, 88707, 88717, 88725, 88735, 88743, 88752, 88760,
-    88769, 88777, 88786, 88795, 88804, 88813, 88822, 88830, 88839, 88847,
-    88856, 88865, 88873, 88883, 88892, 88902, 88912, 88921, 88931, 88940,
-    88949, 88957, 88965, 88970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 88975, 88986, 88997, 89008, 89018, 89029, 89040, 89050, 89061, 89071,
-    89081, 89090, 89101, 89112, 89123, 89136, 89146, 89156, 89167, 89177,
-    89187, 89197, 89207, 89217, 89227, 89237, 89248, 89259, 89270, 89280,
-    89290, 89302, 89313, 89324, 89334, 89344, 89354, 89364, 89375, 89385,
-    89395, 89407, 89417, 89427, 89439, 89450, 89461, 89471, 89481, 89491,
-    89501, 89513, 89525, 89537, 89548, 89559, 89569, 89579, 89589, 89598,
-    89607, 89617, 89627, 89638, 0, 0, 89648, 89659, 89670, 89680, 89690,
-    89702, 89713, 89724, 89737, 89747, 89759, 89768, 89777, 89788, 89799,
-    89812, 89823, 89836, 89846, 89858, 89868, 89880, 89892, 89905, 89915,
-    89925, 89935, 89946, 89956, 89965, 89975, 89984, 89993, 90003, 90013,
-    90023, 90033, 90043, 90053, 90064, 90074, 90085, 90095, 90106, 90117,
-    90127, 90137, 90147, 90157, 90167, 90177, 90188, 90198, 90209, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113709,
+    113713, 113718, 113723, 113727, 113731, 113737, 113741, 113746, 113751,
+    113755, 113760, 113765, 113770, 113774, 113778, 113782, 113787, 113791,
+    113795, 113800, 113805, 113810, 113817, 113822, 113827, 113832, 0, 0,
+    113839, 113846, 113853, 113862, 113867, 113873, 113878, 113884, 113889,
+    113895, 113900, 113906, 113911, 113917, 113923, 0, 0, 0, 0, 113928,
+    113933, 113937, 113941, 113945, 113949, 113953, 113957, 113961, 113965,
+    113969, 113974, 113979, 113985, 113990, 113995, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90220, 90235, 90250, 90256, 90262,
-    90268, 90274, 90280, 90286, 90292, 90298, 90306, 90310, 90313, 0, 0,
-    90321, 90324, 90327, 90330, 90333, 90336, 90339, 90342, 90345, 90348,
-    90351, 90354, 90357, 90360, 90363, 90366, 90369, 90377, 90386, 90397,
-    90405, 90413, 90422, 90431, 90442, 90454, 0, 0, 0, 0, 0, 0, 90464, 90469,
-    90474, 90481, 90488, 90494, 90500, 90505, 90510, 90515, 90521, 90527,
-    90533, 90539, 90545, 90552, 90559, 90569, 90579, 90589, 90598, 90609,
-    90618, 90627, 90637, 90647, 90659, 90671, 90682, 90693, 90704, 90715,
-    90725, 90735, 90745, 90755, 90766, 90777, 90781, 90786, 90795, 90804,
-    90808, 90812, 90816, 90821, 90826, 90831, 90836, 90839, 90843, 0, 90848,
-    90851, 90854, 90858, 90862, 90867, 90871, 90875, 90880, 90885, 90892,
-    90899, 90902, 90905, 90908, 90911, 90914, 90918, 90922, 0, 90926, 90931,
-    90935, 90939, 0, 0, 0, 0, 90944, 90949, 90956, 90961, 90966, 0, 90971,
-    90976, 90982, 90987, 90993, 90998, 91004, 91009, 91015, 91020, 91026,
-    91032, 91041, 91050, 91059, 91068, 91078, 91088, 91098, 91108, 91117,
-    91126, 91135, 91145, 91150, 91155, 91161, 91167, 91173, 91180, 91188,
-    91196, 91202, 91208, 91214, 91221, 91227, 91233, 91239, 91246, 91252,
-    91258, 91264, 91271, 91276, 91281, 91286, 91292, 91298, 91304, 91310,
-    91317, 91323, 91329, 91335, 91341, 91347, 91353, 91359, 91365, 91371,
-    91377, 91383, 91390, 91396, 91402, 91408, 91415, 91421, 91427, 91433,
-    91440, 91446, 91452, 91458, 91465, 91471, 91477, 91483, 91490, 91496,
-    91502, 91508, 91515, 91521, 91527, 91533, 91540, 91546, 91552, 91558,
-    91565, 91571, 91577, 91583, 91590, 91596, 91602, 91608, 91615, 91621,
-    91627, 91633, 91640, 91646, 91652, 91658, 91665, 91670, 91675, 91680,
-    91686, 91692, 91698, 91704, 91711, 91717, 91723, 91729, 91736, 91742,
-    91748, 91755, 91762, 91767, 91772, 91777, 91783, 91795, 91807, 91819,
-    91831, 91844, 91857, 91865, 0, 0, 91873, 0, 91881, 91885, 91889, 91892,
-    91896, 91900, 91903, 91906, 91910, 91914, 91917, 91920, 91923, 91926,
-    91931, 91934, 91938, 91941, 91944, 91947, 91950, 91953, 91956, 91959,
-    91962, 91965, 91968, 91971, 91975, 91979, 91983, 91987, 91992, 91997,
-    92003, 92009, 92015, 92020, 92026, 92032, 92038, 92043, 92049, 92055,
-    92060, 92066, 92072, 92077, 92083, 92089, 92094, 92100, 92106, 92111,
-    92117, 92123, 92129, 92135, 92141, 92145, 92150, 92154, 92159, 92163,
-    92168, 92173, 92179, 92185, 92191, 92196, 92202, 92208, 92214, 92219,
-    92225, 92231, 92236, 92242, 92248, 92253, 92259, 92265, 92270, 92276,
-    92282, 92287, 92293, 92299, 92305, 92311, 92317, 92322, 92326, 92331,
-    92334, 92339, 92344, 92350, 92355, 92360, 92364, 92369, 92374, 92379,
-    92384, 92389, 92394, 92399, 92404, 92410, 92416, 92422, 92430, 92434,
-    92438, 92442, 92446, 92450, 92454, 92459, 92464, 92469, 92474, 92478,
-    92483, 92488, 92493, 92498, 92502, 92507, 92512, 92517, 92521, 92525,
-    92530, 92535, 92540, 92545, 92549, 92554, 92559, 92564, 92569, 92573,
-    92578, 92583, 92588, 92593, 92597, 92602, 92607, 92611, 92616, 92621,
-    92626, 92631, 92636, 92641, 92648, 92655, 92659, 92664, 92669, 92674,
-    92679, 92684, 92689, 92694, 92699, 92704, 92709, 92714, 92719, 92724,
-    92729, 92734, 92739, 92744, 92749, 92754, 92759, 92764, 92769, 92774,
-    92779, 92784, 92789, 92794, 92799, 92804, 0, 0, 0, 92809, 92813, 92818,
-    92822, 92827, 92832, 0, 0, 92836, 92841, 92846, 92850, 92855, 92860, 0,
-    0, 92865, 92870, 92874, 92879, 92884, 92889, 0, 0, 92894, 92899, 92904,
-    0, 0, 0, 92908, 92912, 92916, 92920, 92923, 92927, 92931, 0, 92935,
-    92941, 92944, 92948, 92951, 92955, 92959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    92963, 92969, 92975, 92981, 92987, 0, 0, 92991, 92997, 93003, 93009,
-    93015, 93021, 93028, 93035, 93042, 93049, 93056, 93063, 0, 93070, 93077,
-    93084, 93090, 93097, 93104, 93111, 93118, 93124, 93131, 93138, 93145,
-    93152, 93158, 93165, 93172, 93179, 93186, 93192, 93199, 93206, 93213,
-    93220, 93227, 93234, 93241, 0, 93248, 93254, 93261, 93268, 93275, 93282,
-    93288, 93295, 93302, 93309, 93316, 93322, 93329, 93336, 93342, 93349,
-    93356, 93363, 93370, 0, 93377, 93384, 0, 93391, 93398, 93405, 93412,
-    93419, 93426, 93433, 93440, 93447, 93454, 93461, 93468, 93475, 93482,
-    93489, 0, 0, 93495, 93500, 93505, 93510, 93515, 93520, 93525, 93530,
-    93535, 93540, 93545, 93550, 93555, 93560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    93565, 93572, 93579, 93586, 93593, 93600, 93607, 93614, 93621, 93628,
-    93635, 93642, 93649, 93656, 93663, 93670, 93677, 93684, 93691, 93698,
-    93706, 93714, 93721, 93728, 93733, 93741, 93749, 93756, 93763, 93768,
-    93775, 93780, 93785, 93792, 93797, 93802, 93807, 93815, 93820, 93825,
-    93832, 93837, 93842, 93849, 93856, 93861, 93866, 93871, 93876, 93881,
-    93886, 93891, 93896, 93901, 93908, 93913, 93920, 93925, 93930, 93935,
-    93940, 93945, 93950, 93955, 93960, 93965, 93970, 93975, 93982, 93989,
-    93996, 94003, 94009, 94014, 94021, 94026, 94031, 94040, 94047, 94056,
-    94063, 94068, 94073, 94081, 94086, 94091, 94096, 94101, 94106, 94113,
-    94118, 94123, 94128, 94133, 94138, 94145, 94152, 94159, 94166, 94173,
-    94180, 94187, 94194, 94201, 94208, 94215, 94222, 94229, 94236, 94243,
-    94250, 94257, 94264, 94271, 94278, 94285, 94292, 94299, 94306, 94313,
-    94320, 94327, 94334, 0, 0, 0, 0, 0, 94341, 94349, 94357, 0, 0, 0, 0,
-    94362, 94366, 94370, 94374, 94378, 94382, 94386, 94390, 94394, 94398,
-    94403, 94408, 94413, 94418, 94423, 94428, 94433, 94438, 94443, 94449,
-    94455, 94461, 94468, 94475, 94482, 94489, 94496, 94503, 94508, 94513,
-    94518, 94524, 94530, 94536, 94542, 94548, 94554, 94560, 94566, 94572,
-    94578, 94584, 94590, 94596, 94602, 0, 0, 0, 94608, 94616, 94624, 94632,
-    94640, 94648, 94658, 94668, 94676, 94684, 94692, 94700, 94708, 94714,
-    94721, 94730, 94738, 94746, 94755, 94764, 94773, 94783, 94794, 94804,
-    94815, 94824, 94833, 94842, 94852, 94863, 94873, 94884, 94895, 94904,
-    94912, 94918, 94924, 94930, 94936, 94944, 94952, 94958, 94965, 94975,
-    94982, 94989, 94996, 95003, 95010, 95020, 95027, 95034, 95042, 95050,
-    95059, 95068, 95077, 95086, 95095, 95102, 95110, 95119, 95128, 95132,
-    95139, 95144, 95149, 95153, 95157, 95161, 95165, 95170, 95175, 95181,
-    95187, 95191, 95197, 95201, 95205, 95209, 95213, 95217, 95221, 95227,
-    95231, 95236, 95240, 95244, 0, 95247, 95252, 95257, 95262, 95267, 95274,
-    95279, 95284, 95289, 95294, 95299, 95304, 0, 0, 0, 0, 95309, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95315, 95322,
-    95331, 95340, 95347, 95354, 95361, 95368, 95375, 95382, 95388, 95395,
-    95402, 95409, 95416, 95423, 95430, 95437, 95444, 95453, 95460, 95467,
-    95474, 95481, 95488, 95495, 95502, 95509, 95518, 95525, 95532, 95539,
-    95546, 95553, 95560, 95569, 95576, 95583, 95590, 95597, 95606, 95613,
-    95620, 95627, 95635, 95644, 0, 0, 95653, 95657, 95661, 95666, 95671,
-    95676, 95681, 95685, 95690, 95695, 95700, 95705, 95710, 95715, 95719,
-    95724, 95729, 95734, 95739, 95743, 95748, 95753, 95757, 95762, 95767,
-    95772, 95777, 95782, 95787, 0, 0, 0, 95792, 95796, 95801, 95806, 95810,
-    95815, 95819, 95824, 95829, 95834, 95839, 95844, 95848, 95853, 95858,
-    95863, 95868, 95873, 95878, 95882, 95887, 95892, 95897, 95902, 95907,
-    95912, 95916, 95920, 95925, 95930, 95935, 95940, 95945, 95950, 95955,
-    95960, 95965, 95970, 95975, 95980, 95985, 95990, 95995, 96000, 96005,
-    96010, 96015, 96020, 96025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    96030, 96036, 96041, 96046, 96051, 96056, 96061, 96066, 96071, 96076,
-    96081, 96087, 96093, 96099, 96105, 96111, 96117, 96123, 96129, 96135,
-    96142, 96149, 96156, 96164, 96172, 96180, 96188, 96196, 0, 0, 0, 0,
-    96204, 96208, 96213, 96218, 96223, 96227, 96232, 96237, 96242, 96247,
-    96251, 96255, 96260, 96265, 96270, 96275, 96279, 96284, 96289, 96294,
-    96299, 96304, 96309, 96313, 96318, 96323, 96328, 96333, 96338, 96343,
-    96348, 96353, 96358, 96363, 96368, 96374, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    96380, 96385, 96392, 96399, 96404, 96409, 96414, 96419, 96424, 96429,
-    96434, 96439, 96444, 96449, 96454, 96459, 96464, 96469, 96474, 96479,
-    96484, 96489, 96494, 96499, 96504, 96509, 96514, 96519, 96524, 96529, 0,
-    0, 0, 0, 0, 96536, 96542, 96548, 96554, 96560, 96565, 96571, 96577,
-    96583, 96589, 96594, 96600, 96606, 96612, 96618, 96624, 96630, 96636,
-    96642, 96648, 96653, 96659, 96665, 96671, 96677, 96683, 96688, 96694,
-    96700, 96705, 96711, 96717, 96723, 96729, 96735, 96741, 96747, 96752,
-    96758, 96765, 96772, 96779, 96786, 0, 0, 0, 0, 0, 96793, 96798, 96803,
-    96808, 96813, 96818, 96823, 96828, 96833, 96838, 96843, 96848, 96853,
-    96858, 96863, 96868, 96873, 96878, 96883, 96888, 96893, 96898, 96903,
-    96908, 96913, 96918, 96923, 96927, 96931, 96935, 0, 96940, 96946, 96951,
-    96956, 96961, 96966, 96972, 96978, 96984, 96990, 96996, 97002, 97008,
-    97013, 97019, 97025, 97031, 97037, 97043, 97048, 97054, 97060, 97065,
-    97071, 97076, 97082, 97088, 97093, 97099, 97105, 97110, 97116, 97121,
-    97126, 97132, 97138, 97144, 0, 0, 0, 0, 97149, 97155, 97161, 97167,
-    97173, 97179, 97185, 97191, 97197, 97204, 97209, 97214, 97220, 97226, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97232, 97238, 97244,
-    97250, 97257, 97263, 97270, 97277, 97284, 97291, 97299, 97306, 97314,
-    97320, 97326, 97332, 97338, 97344, 97350, 97356, 97362, 97368, 97374,
-    97380, 97386, 97392, 97398, 97404, 97410, 97416, 97422, 97428, 97434,
-    97440, 97446, 97452, 97458, 97464, 97470, 97476, 97482, 97488, 97494,
-    97500, 97507, 97513, 97520, 97527, 97534, 97541, 97549, 97556, 97564,
-    97570, 97576, 97582, 97588, 97594, 97600, 97606, 97612, 97618, 97624,
-    97630, 97636, 97642, 97648, 97654, 97660, 97666, 97672, 97678, 97684,
-    97690, 97696, 97702, 97708, 97714, 97720, 97726, 97732, 97737, 97742,
-    97747, 97752, 97757, 97762, 97767, 97772, 97777, 97782, 97787, 97792,
-    97797, 97802, 97807, 97812, 97817, 97822, 97827, 97832, 97837, 97842,
-    97847, 97852, 97857, 97862, 97867, 97872, 97877, 97882, 97887, 97892,
-    97897, 97902, 97907, 97912, 97917, 97922, 97927, 97932, 97937, 97942,
-    97947, 97952, 97957, 97962, 97967, 97972, 97977, 97982, 97986, 97991,
-    97996, 98001, 98006, 98010, 98014, 98019, 98024, 98029, 98034, 98039,
-    98044, 98049, 98054, 98059, 98064, 98069, 98073, 98077, 98081, 98085,
-    98089, 98093, 98097, 98102, 98107, 0, 0, 98112, 98117, 98121, 98125,
-    98129, 98133, 98137, 98141, 98145, 98149, 0, 0, 0, 0, 0, 0, 98153, 98158,
-    98164, 98170, 98176, 98182, 98188, 98194, 98199, 98205, 98210, 98216,
-    98221, 98226, 98232, 98238, 98243, 98248, 98253, 98258, 98264, 98269,
-    98275, 98280, 98286, 98291, 98297, 98303, 98309, 98315, 98321, 98326,
-    98332, 98338, 98344, 98350, 0, 0, 0, 0, 98356, 98361, 98367, 98373,
-    98379, 98385, 98391, 98397, 98402, 98408, 98413, 98419, 98424, 98429,
-    98435, 98441, 98446, 98451, 98456, 98461, 98467, 98472, 98478, 98483,
-    98489, 98494, 98500, 98506, 98512, 98518, 98524, 98529, 98535, 98541,
-    98547, 98553, 0, 0, 0, 0, 98559, 98563, 98568, 98573, 98578, 98583,
-    98588, 98593, 98598, 98602, 98607, 98612, 98617, 98622, 98626, 98631,
-    98636, 98641, 98646, 98651, 98656, 98660, 98665, 98669, 98674, 98679,
-    98684, 98689, 98694, 98699, 98704, 98709, 98713, 98718, 98723, 98728,
-    98733, 98738, 98743, 98748, 0, 0, 0, 0, 0, 0, 0, 0, 98753, 98760, 98767,
-    98774, 98781, 98788, 98795, 98802, 98809, 98816, 98823, 98830, 98837,
-    98844, 98851, 98858, 98865, 98872, 98879, 98886, 98893, 98900, 98907,
-    98914, 98921, 98928, 98935, 98942, 98949, 98956, 98963, 98970, 98977,
-    98984, 98991, 98998, 99005, 99012, 99019, 99026, 99033, 99040, 99047,
-    99054, 99061, 99068, 99075, 99082, 99089, 99096, 99103, 99110, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 99117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 99124, 99129, 99134, 99139, 99144, 99149, 99154, 99159, 99164,
-    99169, 99174, 99179, 99184, 99189, 99194, 99199, 99204, 99209, 99214,
-    99219, 99224, 99229, 99234, 99239, 99244, 99249, 99254, 99259, 99264,
-    99269, 99274, 99279, 99284, 99289, 99294, 99299, 99304, 99309, 99314,
-    99319, 99324, 99329, 99334, 99339, 99344, 99349, 99354, 99359, 99364,
-    99369, 99374, 99379, 99384, 99389, 99394, 99399, 99404, 99409, 99414,
-    99419, 99424, 99429, 99434, 99439, 99444, 99449, 99454, 99459, 99464,
-    99469, 99474, 99479, 99484, 99489, 99494, 99499, 99504, 99509, 99514,
-    99519, 99524, 99529, 99534, 99539, 99544, 99549, 99554, 99559, 99564,
-    99569, 99574, 99579, 99584, 99589, 99594, 99599, 99604, 99609, 99614,
-    99619, 99624, 99629, 99634, 99639, 99644, 99649, 99654, 99659, 99664,
-    99669, 99674, 99679, 99684, 99689, 99694, 99699, 99704, 99709, 99714,
-    99719, 99724, 99729, 99734, 99739, 99744, 99749, 99754, 99759, 99764,
-    99769, 99774, 99779, 99784, 99789, 99794, 99799, 99804, 99809, 99814,
-    99819, 99824, 99829, 99834, 99839, 99844, 99849, 99854, 99859, 99864,
-    99869, 99874, 99879, 99884, 99889, 99894, 99899, 99904, 99909, 99914,
-    99919, 99924, 99929, 99934, 99939, 99944, 99949, 99954, 99959, 99964,
-    99969, 99974, 99979, 99984, 99989, 99994, 99999, 100004, 100009, 100014,
-    100019, 100024, 100029, 100034, 100039, 100044, 100049, 100054, 100059,
-    100064, 100069, 100074, 100079, 100084, 100089, 100094, 100099, 100104,
-    100109, 100114, 100119, 100124, 100129, 100134, 100139, 100144, 100149,
-    100154, 100159, 100164, 100169, 100174, 100179, 100184, 100189, 100194,
-    100199, 100204, 100209, 100214, 100219, 100224, 100229, 100234, 100239,
-    100244, 100249, 100254, 100259, 100264, 100269, 100274, 100279, 100284,
-    100289, 100294, 100299, 100304, 100309, 100314, 100319, 100324, 100329,
-    100334, 100339, 100344, 100349, 100354, 100359, 100364, 100369, 100374,
-    100379, 100384, 100389, 100394, 100399, 100404, 100409, 100414, 100419,
-    100424, 100429, 100434, 100439, 100444, 100449, 100454, 100459, 100464,
-    100469, 100474, 100479, 100484, 100489, 100494, 100499, 100504, 100509,
-    100514, 100519, 100524, 100529, 100534, 100539, 100544, 100549, 100554,
-    100559, 100564, 100569, 100574, 100579, 100584, 100589, 100594, 100599,
-    100604, 100609, 100614, 100619, 100624, 100629, 100634, 100639, 100644,
-    100649, 100654, 100659, 100664, 100669, 100674, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 100679, 100685, 100692, 100699, 100705, 100712, 100719, 100726,
-    100733, 100739, 100746, 100753, 100760, 100767, 100774, 100781, 100788,
-    100795, 100802, 100809, 100816, 100823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    100830, 100835, 100840, 100845, 100850, 100855, 100860, 100865, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100870,
-    100874, 100878, 100882, 100886, 100890, 0, 0, 100895, 0, 100900, 100904,
-    100909, 100914, 100919, 100924, 100928, 100933, 100938, 100943, 100948,
-    100952, 100957, 100962, 100967, 100972, 100976, 100981, 100986, 100991,
-    100996, 101000, 101005, 101010, 101015, 101020, 101024, 101029, 101034,
-    101039, 101044, 101048, 101053, 101058, 101063, 101068, 101072, 101077,
-    101082, 101086, 101091, 101096, 101101, 101106, 0, 101111, 101116, 0, 0,
-    0, 101121, 0, 0, 101126, 101131, 101138, 101145, 101152, 101159, 101166,
-    101173, 101180, 101187, 101194, 101201, 101208, 101215, 101222, 101229,
-    101236, 101243, 101250, 101257, 101264, 101271, 101278, 0, 101285,
-    101292, 101298, 101304, 101310, 101317, 101324, 101332, 101339, 101347,
-    101352, 101357, 101362, 101367, 101372, 101377, 101382, 101387, 101392,
-    101397, 101402, 101407, 101412, 101418, 101423, 101428, 101433, 101438,
-    101443, 101448, 101453, 101458, 101463, 101469, 101475, 101479, 101483,
-    101487, 101491, 101495, 101500, 101505, 101511, 101516, 101522, 101527,
-    101532, 101537, 101543, 101548, 101553, 101558, 101563, 101568, 101574,
-    101579, 101585, 101590, 101596, 101601, 101607, 101612, 101618, 101623,
-    101628, 101633, 101638, 101643, 101648, 101653, 101659, 101664, 0, 0, 0,
-    0, 0, 0, 0, 0, 101669, 101673, 101677, 101681, 101685, 101691, 101695,
-    101700, 101705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 101711, 101716, 101721, 101726, 101731, 101736, 101741,
-    101746, 101751, 101756, 101761, 101766, 101771, 101776, 101781, 101786,
-    101791, 101796, 101801, 0, 101806, 101811, 0, 0, 0, 0, 0, 101816, 101820,
-    101824, 101829, 101834, 101840, 101845, 101850, 101855, 101860, 101865,
-    101870, 101875, 101880, 101885, 101890, 101895, 101900, 101905, 101910,
-    101915, 101920, 101925, 101930, 101935, 101940, 101945, 101950, 101954,
-    101959, 101964, 101970, 101974, 0, 0, 0, 101978, 101984, 101988, 101993,
-    101998, 102003, 102007, 102012, 102016, 102021, 102026, 102030, 102035,
-    102040, 102044, 102048, 102053, 102058, 102062, 102067, 102072, 102077,
-    102082, 102087, 102092, 102097, 102102, 0, 0, 0, 0, 0, 102107, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102112, 102117, 102122, 102127,
-    102132, 102137, 102143, 102149, 102155, 102160, 102165, 102170, 102176,
-    102182, 102188, 102193, 102199, 102204, 102210, 102216, 102221, 102227,
-    102233, 102238, 102244, 102249, 102255, 102261, 102267, 102272, 102278,
-    102284, 102290, 102295, 102300, 102305, 102310, 102315, 102321, 102327,
-    102332, 102337, 102342, 102348, 102353, 102358, 102364, 102370, 102375,
-    102382, 102388, 102393, 102399, 102404, 102410, 102415, 0, 0, 0, 0,
-    102421, 102429, 102436, 102443, 102450, 102455, 102460, 102465, 102470,
-    102475, 102480, 102485, 102490, 102495, 102501, 102507, 102513, 102519,
-    102525, 102531, 0, 0, 102537, 102544, 102551, 102558, 102566, 102574,
-    102582, 102590, 102598, 102606, 102612, 102618, 102624, 102631, 102638,
-    102645, 102652, 102659, 102666, 102673, 102680, 102687, 102694, 102701,
-    102708, 102715, 102722, 102729, 102737, 102745, 102753, 102762, 102771,
-    102780, 102789, 102798, 102807, 102814, 102821, 102828, 102836, 102844,
-    102852, 102860, 102868, 102876, 102884, 102888, 102893, 102898, 0,
-    102904, 102909, 0, 0, 0, 0, 0, 102914, 102920, 102927, 102932, 102937,
-    102941, 102946, 102951, 0, 102956, 102961, 102966, 0, 102971, 102976,
-    102981, 102986, 102991, 102996, 103001, 103005, 103010, 103015, 103020,
-    103024, 103028, 103033, 103038, 103043, 103047, 103051, 103055, 103059,
-    103064, 103069, 103074, 103078, 103083, 103087, 103092, 103097, 103102,
-    0, 0, 103107, 103113, 103118, 0, 0, 0, 0, 103123, 103127, 103131, 103135,
-    103139, 103143, 103148, 103153, 103159, 103164, 0, 0, 0, 0, 0, 0, 0,
-    103170, 103176, 103183, 103189, 103196, 103202, 103208, 103214, 103221,
-    0, 0, 0, 0, 0, 0, 0, 103227, 103235, 103243, 103251, 103259, 103267,
-    103275, 103283, 103291, 103299, 103307, 103315, 103323, 103331, 103339,
-    103347, 103355, 103363, 103371, 103379, 103387, 103395, 103403, 103411,
-    103419, 103427, 103435, 103443, 103451, 103459, 103466, 103474, 103482,
-    103489, 103496, 103503, 103510, 103517, 103524, 103531, 103538, 103545,
-    103552, 103559, 103566, 103573, 103580, 103587, 103594, 103601, 103608,
-    103615, 103622, 103629, 103636, 103643, 103650, 103657, 103664, 103671,
-    103678, 103685, 103691, 103698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103705, 103710,
-    103715, 103720, 103725, 103730, 103735, 103740, 103745, 103750, 103755,
-    103760, 103765, 103770, 103775, 103780, 103785, 103790, 103795, 103800,
-    103805, 103810, 103815, 103820, 103825, 103830, 103835, 103840, 103845,
-    103850, 103855, 103860, 103865, 103870, 103875, 103880, 103885, 103890,
-    103896, 0, 0, 0, 0, 103902, 103906, 103910, 103915, 103920, 103926,
-    103932, 103938, 103948, 103957, 103963, 103970, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 103978, 103982, 103987, 103992, 103997, 104002, 104007, 104012,
-    104017, 104021, 104026, 104030, 104035, 104039, 104044, 104048, 104053,
-    104058, 104063, 104068, 104073, 104078, 104083, 104088, 104093, 104098,
-    104103, 104108, 104113, 104118, 104123, 104128, 104133, 104138, 104143,
-    104148, 104153, 104158, 104163, 104168, 104173, 104178, 104183, 104188,
-    104193, 104198, 104203, 104208, 104213, 104218, 104223, 104228, 104233,
-    104238, 0, 0, 0, 104243, 104248, 104258, 104267, 104277, 104287, 104298,
-    104309, 104316, 104323, 104330, 104337, 104344, 104351, 104358, 104365,
-    104372, 104379, 104386, 104393, 104400, 104407, 104414, 104421, 104428,
-    104435, 104442, 104449, 104456, 0, 0, 104463, 104469, 104475, 104481,
-    104487, 104494, 104501, 104509, 104516, 104523, 104530, 104537, 104544,
-    104551, 104558, 104565, 104572, 104579, 104586, 104593, 104600, 104607,
-    104614, 104621, 104628, 104635, 104642, 0, 0, 0, 0, 0, 104649, 104655,
-    104661, 104667, 104673, 104680, 104687, 104695, 104702, 104709, 104716,
-    104723, 104730, 104737, 104744, 104751, 104758, 104765, 104772, 104779,
-    104786, 104793, 104800, 104807, 104814, 104821, 0, 0, 0, 0, 0, 0, 0,
-    104828, 104835, 104843, 104854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    104865, 104871, 104877, 104883, 104889, 104896, 104903, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114000, 114004, 114009,
+    114013, 114018, 114022, 114027, 114031, 114036, 114040, 114045, 114049,
+    114054, 114059, 114064, 114069, 114074, 114079, 114084, 114089, 114094,
+    114099, 114104, 114109, 114114, 114119, 114123, 114128, 114133, 114138,
+    114142, 114146, 114151, 114156, 114161, 114165, 114169, 114173, 114177,
+    114182, 114187, 114192, 114196, 114200, 114205, 114211, 114216, 114222,
+    114227, 114233, 114239, 114246, 114251, 114257, 114262, 114268, 114273,
+    114278, 114283, 114288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 104911, 104918, 104925, 104933, 104940, 104947, 104954, 104961,
-    104969, 104977, 104985, 104993, 105001, 105009, 105017, 105025, 105033,
-    105041, 105049, 105057, 105065, 105073, 105081, 105089, 105097, 105105,
-    105113, 105121, 105129, 105137, 105145, 105153, 105161, 105169, 105177,
-    105185, 105193, 105201, 105209, 105217, 105225, 105233, 105241, 105249,
-    105257, 105265, 105273, 105281, 105289, 105297, 105305, 105313, 105321,
-    105329, 105337, 105345, 105353, 105361, 105369, 105377, 105385, 105393,
-    105401, 105409, 105417, 105425, 105433, 105441, 105449, 105457, 105465,
-    105473, 105481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114293, 114301, 114308, 114316,
+    114324, 114331, 114339, 114347, 114355, 114362, 114369, 114377, 114385,
+    114393, 114401, 114409, 114417, 114425, 114433, 114441, 114449, 114457,
+    114465, 114473, 114481, 114489, 114497, 114505, 114513, 114521, 114529,
+    114537, 114545, 114553, 114560, 114568, 114576, 114583, 114591, 114599,
+    114607, 114614, 114621, 114629, 114637, 114645, 114653, 114661, 114669,
+    114677, 114685, 114693, 114701, 114709, 114717, 114725, 114733, 114741,
+    114749, 114757, 114765, 114773, 114781, 114789, 114797, 114804, 114810,
+    114816, 114822, 114828, 114834, 114840, 114846, 114852, 114858, 114865,
+    114872, 114879, 114886, 114893, 114900, 114907, 114914, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 114921, 114927, 114933, 114940, 114946, 114953, 114959,
+    114966, 0, 0, 114972, 0, 0, 114978, 114984, 114991, 114998, 115005,
+    115012, 115019, 115026, 0, 115033, 115040, 0, 115047, 115054, 115061,
+    115068, 115074, 115081, 115088, 115095, 115101, 115107, 115114, 115121,
+    115128, 115134, 115140, 115147, 115153, 115159, 115166, 115173, 115180,
+    115186, 115192, 115199, 115206, 115214, 115221, 115229, 115236, 115244,
+    0, 115251, 115259, 0, 0, 115266, 115273, 115280, 115287, 115293, 115302,
+    115309, 115315, 115322, 115329, 115336, 115344, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 115354, 115361, 115367, 115373, 115379, 115385, 115391, 115397,
+    115403, 115409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105489, 105494, 105500, 105506,
-    105512, 105518, 105524, 105530, 105536, 105542, 105547, 105554, 105560,
-    105566, 105572, 105578, 105584, 105589, 105595, 105601, 105607, 105613,
-    105619, 105625, 105631, 105637, 105643, 105649, 105654, 105660, 105668,
-    105676, 105682, 105688, 105694, 105700, 105708, 105714, 105720, 105726,
-    105732, 105738, 105744, 105749, 105755, 105763, 105771, 105777, 105783,
-    105789, 105796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105802, 105807,
-    105813, 105819, 105825, 105831, 105837, 105843, 105849, 105855, 105860,
-    105867, 105873, 105879, 105885, 105891, 105897, 105902, 105908, 105914,
-    105920, 105926, 105932, 105938, 105944, 105950, 105956, 105962, 105967,
-    105973, 105981, 105989, 105995, 106001, 106007, 106013, 106021, 106027,
-    106033, 106039, 106045, 106051, 106057, 106062, 106068, 106076, 106084,
-    106090, 106096, 106102, 106109, 0, 0, 0, 0, 0, 0, 0, 106115, 106119,
-    106123, 106128, 106133, 106139, 106144, 106150, 106157, 106163, 106169,
-    106176, 106183, 106190, 106196, 106203, 106210, 106217, 106224, 106230,
-    106237, 106244, 106250, 106257, 106263, 106270, 106276, 106282, 106288,
-    106295, 106304, 106310, 106318, 106325, 106332, 106339, 106345, 106351,
-    106357, 106363, 106369, 106376, 106385, 106392, 106399, 106406, 0, 0, 0,
-    0, 0, 0, 0, 0, 106413, 106420, 106426, 106432, 106438, 106444, 106450,
-    106456, 106462, 106468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 115415, 115419, 115424, 115428, 115433, 115437, 115442, 115447,
+    0, 0, 115453, 115457, 115462, 115466, 115471, 115475, 115480, 115485,
+    115490, 115495, 115500, 115505, 115510, 115515, 115520, 115525, 115530,
+    115535, 115540, 115545, 115549, 115554, 115559, 115564, 115568, 115572,
+    115577, 115582, 115587, 115591, 115595, 115599, 115603, 115608, 115613,
+    115618, 115622, 115626, 115631, 115636, 115642, 115647, 115653, 115658,
+    115664, 115670, 0, 0, 115677, 115682, 115688, 115693, 115699, 115704,
+    115709, 115714, 115719, 115724, 115728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115735, 115740, 115746,
+    115753, 115759, 115765, 115772, 115778, 115785, 115792, 115800, 115807,
+    115812, 115818, 115824, 115830, 115836, 115842, 115848, 115854, 115860,
+    115866, 115872, 115878, 115884, 115890, 115895, 115901, 115907, 115913,
+    115918, 115923, 115929, 115935, 115941, 115946, 115952, 115958, 115964,
+    115970, 115976, 115982, 115988, 115993, 115998, 116003, 116009, 116015,
+    116021, 116026, 116031, 116037, 116043, 116049, 116055, 116064, 116073,
+    116079, 116085, 116092, 116099, 116106, 116113, 116121, 116128, 116136,
+    116142, 116148, 116155, 116162, 116171, 116181, 0, 0, 0, 0, 0, 0, 0, 0,
+    116186, 116190, 116195, 116201, 116206, 116211, 116216, 116222, 116228,
+    116234, 116240, 116246, 116252, 116256, 116261, 116266, 116271, 116276,
+    116281, 116286, 116291, 116296, 116301, 116306, 116311, 116316, 116321,
+    116326, 116330, 116335, 116340, 116345, 116349, 116353, 116358, 116363,
+    116368, 116372, 116377, 116382, 116387, 116392, 116397, 116402, 116406,
+    116410, 116414, 116419, 116424, 116429, 116433, 116437, 116442, 116447,
+    116452, 116458, 116464, 116471, 116477, 116484, 116491, 116498, 116505,
+    116512, 116519, 116526, 116532, 116538, 116545, 116552, 116559, 116564,
+    116569, 116574, 116578, 116583, 116588, 116594, 116599, 116615, 116629,
+    116640, 116646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116652, 116660, 116668, 116676, 116684,
+    116693, 116702, 116711, 116720, 116728, 116737, 116746, 116754, 116763,
+    116772, 116780, 116789, 116797, 116806, 116814, 116823, 116832, 116840,
+    116848, 116856, 116864, 116872, 116881, 116890, 116900, 116910, 116920,
+    116930, 116940, 116949, 116959, 116969, 116979, 116990, 117000, 117012,
+    117024, 117035, 117049, 117060, 117070, 117082, 117093, 117103, 117115,
+    117127, 117138, 117149, 117159, 117169, 117181, 117192, 0, 0, 0, 0, 0, 0,
+    0, 117204, 117208, 117213, 117217, 117222, 117226, 117231, 117236,
+    117242, 0, 117247, 117251, 117256, 117260, 117265, 117269, 117274,
+    117279, 117284, 117289, 117294, 117299, 117304, 117309, 117314, 117319,
+    117324, 117329, 117334, 117339, 117343, 117348, 117353, 117358, 117362,
+    117366, 117371, 117376, 117381, 117385, 117389, 117393, 117397, 117402,
+    117407, 117412, 117416, 117420, 117426, 117431, 117437, 117442, 117448,
+    117454, 117461, 0, 117467, 117472, 117478, 117483, 117489, 117494,
+    117499, 117504, 117509, 117514, 117518, 117523, 117529, 117535, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 117541, 117546, 117550, 117554, 117558, 117562,
+    117566, 117570, 117574, 117578, 117582, 117586, 117590, 117594, 117598,
+    117602, 117606, 117610, 117614, 117618, 117623, 117628, 117633, 117638,
+    117643, 117648, 117653, 117658, 117663, 0, 0, 0, 117670, 117675, 117680,
+    117684, 117689, 117694, 117699, 117704, 117709, 117714, 117719, 117723,
+    117728, 117733, 117737, 117741, 117746, 117751, 117755, 117760, 117765,
+    117770, 117775, 117780, 117785, 117790, 117794, 117798, 117802, 117807,
+    117811, 117815, 0, 0, 117819, 117825, 117832, 117839, 117846, 117853,
+    117860, 117867, 117874, 117880, 117887, 117894, 117900, 117906, 117913,
+    117920, 117926, 117933, 117940, 117947, 117954, 117961, 0, 117968,
+    117974, 117980, 117986, 117993, 117999, 118005, 118011, 118017, 118022,
+    118027, 118032, 118037, 118042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118047, 118052, 118058, 118063, 118069,
+    118074, 118080, 0, 118085, 118091, 0, 118096, 118102, 118107, 118113,
+    118119, 118125, 118131, 118137, 118143, 118149, 118155, 118161, 118167,
+    118173, 118179, 118185, 118191, 118196, 118202, 118208, 118214, 118219,
+    118224, 118230, 118236, 118242, 118247, 118252, 118257, 118262, 118268,
+    118274, 118280, 118285, 118290, 118296, 118302, 118308, 118314, 118321,
+    118327, 118334, 118340, 118347, 0, 0, 0, 118354, 0, 118360, 118367, 0,
+    118373, 118380, 118386, 118392, 118398, 118404, 118410, 118415, 118420,
+    0, 0, 0, 0, 0, 0, 0, 0, 118425, 118431, 118436, 118441, 118446, 118451,
+    118456, 118461, 118466, 118471, 0, 0, 0, 0, 0, 0, 118476, 118481, 118487,
+    118492, 118498, 118503, 0, 118509, 118515, 0, 118521, 118527, 118533,
+    118538, 118544, 118550, 118556, 118561, 118566, 118572, 118577, 118583,
+    118588, 118594, 118600, 118606, 118612, 118617, 118623, 118629, 118635,
+    118641, 118647, 118653, 118659, 118665, 118671, 118677, 118682, 118688,
+    118693, 118698, 118703, 118710, 118716, 118723, 118729, 0, 118736,
+    118743, 0, 118750, 118757, 118764, 118770, 118776, 118781, 0, 0, 0, 0, 0,
+    0, 0, 118786, 118792, 118797, 118802, 118807, 118812, 118817, 118822,
+    118827, 118832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 106474, 106478, 106482, 106486, 106490, 106494, 106498,
-    106502, 106506, 106510, 106515, 106520, 106525, 106530, 106535, 106540,
-    106545, 106550, 106555, 106561, 106567, 106573, 106580, 106587, 106594,
-    106601, 106608, 106615, 106621, 106627, 106633, 0, 106639, 106645,
-    106652, 106658, 106665, 106671, 106677, 106684, 106690, 106696, 106702,
-    106708, 106714, 106720, 106726, 106732, 106739, 106750, 106756, 106762,
-    106770, 106776, 106782, 106789, 106800, 106806, 106812, 106818, 106825,
-    106836, 106841, 106846, 106851, 106856, 106861, 106867, 106873, 106879,
-    106886, 106893, 0, 0, 0, 0, 0, 0, 0, 0, 106899, 106904, 106909, 106914,
-    106919, 106924, 106929, 106934, 106939, 106944, 106949, 106954, 106959,
-    106964, 106969, 106974, 106979, 106984, 106989, 106994, 106999, 107004,
-    107010, 107015, 107022, 107027, 107034, 107040, 107046, 107052, 107058,
-    107065, 107071, 107077, 107081, 107086, 107091, 107097, 107105, 107116,
-    107125, 107135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107145, 107150,
-    107155, 107160, 107165, 107170, 107175, 107180, 107185, 107190, 107195,
-    107200, 107205, 107210, 107215, 107220, 107225, 107230, 107235, 107240,
-    107245, 107250, 107255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107260, 107264,
-    107268, 107272, 107276, 107280, 107283, 107287, 107290, 107294, 107297,
-    107301, 107305, 107310, 107314, 107319, 107322, 107326, 107329, 107333,
-    107336, 107340, 107344, 107348, 107352, 107356, 107360, 107364, 107368,
-    107372, 107376, 107380, 107384, 107388, 107392, 107395, 107399, 107403,
-    107407, 107410, 107413, 107417, 107421, 107425, 107428, 107431, 107434,
-    107437, 107441, 107445, 107449, 107452, 107455, 107459, 107465, 107471,
-    107477, 107482, 107489, 107493, 107498, 107502, 107507, 107512, 107518,
-    107523, 107529, 107533, 107538, 107542, 107547, 107550, 107553, 107557,
-    107562, 107568, 107573, 107579, 0, 0, 0, 0, 107584, 107587, 107590,
-    107593, 107596, 107599, 107602, 107605, 107608, 107611, 107615, 107619,
-    107623, 107627, 107631, 107635, 107639, 107643, 107647, 107652, 107656,
-    107660, 107663, 107666, 107669, 107672, 107675, 107678, 107681, 107684,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107687, 107691, 107696,
-    107701, 107706, 107710, 107715, 107719, 107724, 107728, 107733, 107737,
-    107742, 107746, 107751, 107755, 107760, 107765, 107770, 107775, 107780,
-    107785, 107790, 107795, 107800, 107805, 107810, 107815, 107820, 107825,
-    107830, 107835, 107839, 107844, 107849, 107854, 107858, 107862, 107867,
-    107872, 107877, 107881, 107885, 107889, 107893, 107898, 107903, 107908,
-    107912, 107916, 107922, 107927, 107933, 107938, 107944, 107949, 107955,
-    107960, 107966, 107971, 107976, 107981, 107986, 107990, 107995, 108001,
-    108005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108010, 0, 0, 108015, 108022,
-    108029, 108036, 108043, 108050, 108057, 108064, 108071, 108078, 108085,
-    108092, 108099, 108106, 108113, 108120, 108127, 108134, 108141, 108148,
-    108155, 108162, 108169, 108176, 108183, 0, 0, 0, 0, 0, 0, 0, 108190,
-    108197, 108203, 108209, 108215, 108221, 108227, 108233, 108239, 108245,
-    0, 0, 0, 0, 0, 0, 108251, 108256, 108261, 108266, 108271, 108275, 108279,
-    108283, 108288, 108293, 108298, 108303, 108308, 108313, 108318, 108323,
-    108328, 108333, 108338, 108343, 108348, 108353, 108358, 108363, 108368,
-    108373, 108378, 108383, 108388, 108393, 108398, 108403, 108408, 108413,
-    108418, 108423, 108428, 108433, 108438, 108443, 108448, 108453, 108459,
-    108464, 108470, 108475, 108481, 108486, 108492, 108498, 108502, 108507,
-    108511, 0, 108515, 108520, 108524, 108528, 108532, 108536, 108540,
-    108544, 108548, 108552, 108556, 108561, 108565, 108570, 108575, 108580,
-    108586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108592, 108596, 108600, 108604,
-    108608, 108612, 108616, 108621, 108626, 108631, 108636, 108641, 108646,
-    108651, 108656, 108661, 108666, 108671, 108676, 108681, 108685, 108690,
-    108695, 108700, 108704, 108708, 108713, 108718, 108723, 108727, 108731,
-    108735, 108740, 108744, 108748, 108753, 108758, 108763, 108768, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 108773, 108778, 108783, 108788, 108792, 108797, 108801,
-    108806, 108810, 108815, 108820, 108826, 108831, 108837, 108841, 108846,
-    108850, 108855, 108859, 108864, 108869, 108874, 108879, 108884, 108889,
-    108894, 108899, 108904, 108909, 108914, 108919, 108924, 108929, 108933,
-    108938, 108943, 108948, 108952, 108956, 108961, 108966, 108971, 108975,
-    108979, 108983, 108987, 108992, 108997, 109002, 109007, 109011, 109015,
-    109021, 109026, 109032, 109037, 109043, 109049, 109056, 109062, 109069,
-    109074, 109080, 109085, 109091, 109096, 109101, 109106, 109111, 109115,
-    109119, 109124, 109129, 109133, 109138, 109143, 109148, 109156, 0, 0,
-    109161, 109166, 109170, 109174, 109178, 109182, 109186, 109190, 109194,
-    109198, 109202, 109206, 109211, 109215, 109220, 109226, 0, 109232,
-    109237, 109242, 109247, 109252, 109257, 109262, 109267, 109272, 109277,
-    109283, 109289, 109295, 109301, 109307, 109313, 109319, 109325, 109331,
-    109338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109344, 109348, 109353, 109357,
-    109361, 109365, 109370, 109374, 109379, 109383, 109388, 109393, 109398,
-    109403, 109408, 109413, 109418, 109423, 0, 109428, 109433, 109438,
-    109443, 109448, 109453, 109458, 109462, 109467, 109472, 109477, 109482,
-    109486, 109490, 109495, 109500, 109505, 109510, 109514, 109518, 109522,
-    109526, 109531, 109535, 109539, 109544, 109550, 109555, 109561, 109566,
-    109571, 109577, 109582, 109588, 109593, 109598, 109603, 109608, 109612,
-    109617, 109623, 109628, 109634, 109639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 109644, 109648, 109652, 109656, 109660, 109664, 109669,
-    0, 109674, 0, 109679, 109684, 109689, 109694, 0, 109699, 109704, 109709,
-    109714, 109719, 109724, 109729, 109734, 109738, 109743, 109748, 109753,
-    109757, 109761, 109766, 0, 109771, 109776, 109780, 109784, 109788,
-    109792, 109797, 109801, 109805, 109810, 109815, 0, 0, 0, 0, 0, 0, 109820,
-    109824, 109829, 109833, 109838, 109842, 109847, 109851, 109856, 109860,
-    109865, 109869, 109874, 109879, 109884, 109889, 109894, 109899, 109904,
-    109909, 109914, 109919, 109924, 109929, 109934, 109939, 109944, 109949,
-    109954, 109959, 109963, 109968, 109973, 109978, 109982, 109986, 109991,
-    109996, 110001, 110006, 110010, 110014, 110018, 110022, 110027, 110032,
-    110036, 110040, 110045, 110051, 110056, 110062, 110067, 110073, 110078,
-    110084, 110089, 110095, 110100, 0, 0, 0, 0, 0, 110105, 110110, 110114,
-    110118, 110122, 110126, 110130, 110134, 110138, 110142, 0, 0, 0, 0, 0, 0,
-    110146, 110153, 110158, 110163, 0, 110168, 110172, 110177, 110181,
-    110186, 110190, 110195, 110200, 0, 0, 110205, 110210, 0, 0, 110215,
-    110220, 110225, 110229, 110234, 110239, 110244, 110249, 110254, 110259,
-    110264, 110269, 110274, 110279, 110284, 110289, 110294, 110299, 110303,
-    110308, 110313, 110318, 0, 110322, 110326, 110331, 110336, 110341,
-    110345, 110349, 0, 110353, 110357, 0, 110362, 110367, 110372, 110377,
-    110381, 0, 110385, 110389, 110394, 110399, 110405, 110410, 110416,
-    110421, 110427, 110433, 0, 0, 110440, 110446, 0, 0, 110452, 110458,
-    110464, 0, 0, 110469, 0, 0, 0, 0, 0, 0, 110473, 0, 0, 0, 0, 0, 110480,
-    110485, 110492, 110500, 110506, 110512, 110518, 0, 0, 110525, 110531,
-    110536, 110541, 110546, 110551, 110556, 0, 0, 0, 110561, 110566, 110571,
-    110576, 110582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110587, 110591, 110596,
-    110600, 110605, 110609, 110614, 110619, 110625, 110630, 110636, 110640,
-    110645, 110649, 110654, 110658, 110663, 110668, 110673, 110678, 110683,
-    110688, 110693, 110698, 110703, 110708, 110713, 110718, 110723, 110728,
-    110733, 110738, 110742, 110747, 110752, 110757, 110761, 110766, 110770,
-    110775, 110780, 110785, 110789, 110794, 110798, 110802, 110807, 110811,
-    110816, 110821, 110826, 110831, 110835, 110839, 110845, 110850, 110856,
-    110861, 110867, 110873, 110880, 110886, 110893, 110898, 110904, 110909,
-    110915, 110920, 110925, 110930, 110935, 110940, 110945, 110951, 110955,
-    110959, 110963, 110968, 110972, 110978, 110983, 110988, 110992, 110996,
-    111000, 111004, 111008, 111012, 111016, 111020, 0, 111024, 0, 111029,
-    111034, 111039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111046, 111050, 111054, 111059,
-    111063, 111068, 111072, 111077, 111082, 111088, 111093, 111099, 111103,
-    111108, 111112, 111117, 111121, 111126, 111131, 111136, 111141, 111146,
-    111151, 111156, 111161, 111166, 111171, 111176, 111181, 111186, 111191,
-    111195, 111200, 111205, 111210, 111214, 111218, 111223, 111228, 111233,
-    111237, 111241, 111245, 111249, 111254, 111259, 111264, 111268, 111272,
-    111278, 111283, 111289, 111294, 111300, 111306, 111313, 111319, 111326,
-    111331, 111338, 111344, 111349, 111356, 111362, 111367, 111372, 111377,
-    111382, 111387, 111392, 111396, 111401, 0, 0, 0, 0, 0, 0, 0, 0, 111405,
-    111410, 111414, 111418, 111422, 111426, 111430, 111434, 111438, 111442,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111446, 111450, 111455, 111459,
-    111464, 111468, 111473, 111478, 111484, 111489, 111495, 111499, 111504,
-    111508, 111513, 111517, 111522, 111527, 111532, 111537, 111542, 111547,
-    111552, 111557, 111562, 111567, 111572, 111577, 111582, 111587, 111591,
-    111596, 111601, 111606, 111610, 111614, 111619, 111624, 111629, 111633,
-    111637, 111641, 111645, 111650, 111655, 111660, 111664, 111668, 111674,
-    111679, 111685, 111690, 111696, 111702, 0, 0, 111709, 111714, 111720,
-    111725, 111731, 111736, 111741, 111746, 111751, 111756, 111761, 111765,
-    111770, 111776, 111781, 111787, 111793, 111799, 111807, 111820, 111833,
-    111846, 111860, 111875, 111883, 111894, 111903, 111913, 111923, 111933,
-    111944, 111956, 111969, 111977, 111985, 111994, 112000, 112007, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 112015, 112019, 112024, 112028, 112033, 112037,
-    112042, 112047, 112053, 112058, 112064, 112068, 112073, 112077, 112082,
-    112086, 112091, 112096, 112101, 112106, 112111, 112116, 112121, 112126,
-    112131, 112136, 112141, 112146, 112151, 112156, 112160, 112165, 112170,
-    112175, 112179, 112183, 112188, 112193, 112198, 112202, 112206, 112210,
-    112214, 112219, 112224, 112229, 112233, 112237, 112242, 112248, 112253,
-    112259, 112264, 112270, 112276, 112283, 112289, 112296, 112301, 112307,
-    112312, 112318, 112323, 112328, 112333, 112338, 112342, 112347, 112352,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112357, 112362, 112366, 112370, 112374,
-    112378, 112382, 112386, 112390, 112394, 0, 0, 0, 0, 0, 0, 112398, 112404,
-    112409, 112416, 112424, 112431, 112439, 112448, 112453, 112462, 112467,
-    112475, 112484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    112494, 112498, 112503, 112507, 112512, 112516, 112521, 112525, 112530,
-    112534, 112539, 112543, 112548, 112553, 112558, 112563, 112568, 112573,
-    112578, 112583, 112588, 112593, 112598, 112603, 112608, 112613, 112617,
-    112622, 112627, 112632, 112636, 112640, 112645, 112650, 112655, 112659,
-    112663, 112667, 112671, 112676, 112681, 112685, 112689, 112694, 112699,
-    112704, 112710, 112715, 112721, 112726, 112732, 112737, 112743, 112748,
-    112754, 112759, 112764, 0, 0, 0, 0, 0, 0, 0, 112771, 112776, 112780,
-    112784, 112788, 112792, 112796, 112800, 112804, 112808, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 118837, 118841, 118846, 118851, 118855, 118860, 118864, 118868,
+    118873, 118877, 118882, 118887, 118892, 118896, 118900, 118904, 118909,
+    118913, 118917, 118921, 118926, 118931, 118936, 118941, 118945, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    112812, 112816, 112821, 112826, 112830, 112834, 112840, 112844, 112849,
-    112854, 112858, 112863, 112868, 112873, 112877, 112881, 112885, 112890,
-    112894, 112898, 112903, 112908, 112913, 112920, 112925, 112930, 112935,
-    0, 0, 112942, 112949, 112956, 112965, 112970, 112976, 112981, 112987,
-    112992, 112998, 113003, 113009, 113014, 113020, 113026, 0, 0, 0, 0,
-    113031, 113036, 113040, 113044, 113048, 113052, 113056, 113060, 113064,
-    113068, 113072, 113077, 113082, 113088, 113093, 113098, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113103, 113107, 113112, 113116, 113121,
-    113125, 113130, 113134, 113139, 113143, 113148, 113152, 113157, 113162,
-    113167, 113172, 113177, 113182, 113187, 113192, 113197, 113202, 113207,
-    113212, 113217, 113222, 113226, 113231, 113236, 113241, 113245, 113249,
-    113254, 113259, 113264, 113268, 113272, 113276, 113280, 113285, 113290,
-    113295, 113299, 113303, 113308, 113314, 113319, 113325, 113330, 113336,
-    113342, 113349, 113354, 113360, 113365, 113371, 113376, 113381, 113386,
-    113391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 113396, 113404, 113411, 113419, 113427, 113434, 113442,
-    113450, 113458, 113465, 113472, 113480, 113488, 113496, 113504, 113512,
-    113520, 113528, 113536, 113544, 113552, 113560, 113568, 113576, 113584,
-    113592, 113600, 113608, 113616, 113624, 113632, 113640, 113648, 113656,
-    113663, 113671, 113679, 113686, 113694, 113702, 113710, 113717, 113724,
-    113732, 113740, 113748, 113756, 113764, 113772, 113780, 113788, 113796,
-    113804, 113812, 113820, 113828, 113836, 113844, 113852, 113860, 113868,
-    113876, 113884, 113892, 113900, 113907, 113913, 113919, 113925, 113931,
-    113937, 113943, 113949, 113955, 113961, 113968, 113975, 113982, 113989,
-    113996, 114003, 114010, 114017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    114024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114030, 114034, 114039, 114043, 114048,
-    114052, 114057, 114062, 0, 0, 114068, 114072, 114077, 114081, 114086,
-    114090, 114095, 114100, 114105, 114110, 114115, 114120, 114125, 114130,
-    114135, 114140, 114145, 114150, 114155, 114160, 114164, 114169, 114174,
-    114179, 114183, 114187, 114192, 114197, 114202, 114206, 114210, 114214,
-    114218, 114223, 114228, 114233, 114237, 114241, 114246, 114251, 114257,
-    114262, 114268, 114273, 114279, 114285, 0, 0, 114292, 114297, 114303,
-    114308, 114314, 114319, 114324, 114329, 114334, 114339, 114343, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    114350, 114355, 114361, 114368, 114374, 114380, 114387, 114393, 114400,
-    114407, 114415, 114422, 114427, 114433, 114439, 114445, 114451, 114457,
-    114463, 114469, 114475, 114481, 114487, 114493, 114499, 114505, 114510,
-    114516, 114522, 114528, 114533, 114538, 114544, 114550, 114556, 114561,
-    114567, 114573, 114579, 114585, 114591, 114597, 114603, 114608, 114613,
-    114618, 114624, 114630, 114636, 114641, 114646, 114652, 114658, 114664,
-    114670, 114679, 114688, 114694, 114700, 114707, 114714, 114721, 114728,
-    114736, 114743, 114751, 114757, 114763, 114770, 114777, 114786, 114796,
-    0, 0, 0, 0, 0, 0, 0, 0, 114801, 114805, 114810, 114816, 114821, 114826,
-    114831, 114837, 114843, 114849, 114855, 114861, 114867, 114871, 114876,
-    114881, 114886, 114891, 114896, 114901, 114906, 114911, 114916, 114921,
-    114926, 114931, 114936, 114941, 114945, 114950, 114955, 114960, 114964,
-    114968, 114973, 114978, 114983, 114987, 114992, 114997, 115002, 115007,
-    115012, 115017, 115021, 115025, 115029, 115034, 115039, 115044, 115048,
-    115052, 115057, 115062, 115067, 115073, 115079, 115086, 115092, 115099,
-    115106, 115113, 115120, 115127, 115134, 115141, 115147, 115153, 115160,
-    115167, 115174, 115179, 115184, 115189, 115193, 115198, 115203, 115209,
-    115214, 115230, 115244, 115255, 115261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115267, 115275,
-    115283, 115291, 115299, 115308, 115317, 115326, 115335, 115343, 115352,
-    115361, 115369, 115378, 115387, 115395, 115404, 115412, 115421, 115429,
-    115438, 115447, 115455, 115463, 115471, 115479, 115487, 115496, 115505,
-    115515, 115525, 115535, 115545, 115555, 115564, 115574, 115584, 115594,
-    115605, 115615, 115627, 115639, 115650, 115664, 115675, 115685, 115697,
-    115708, 115718, 115730, 115742, 115753, 115764, 115774, 115784, 115796,
-    115807, 0, 0, 0, 0, 0, 0, 0, 115819, 115823, 115828, 115832, 115837,
-    115841, 115846, 115851, 115857, 0, 115862, 115866, 115871, 115875,
-    115880, 115884, 115889, 115894, 115899, 115904, 115909, 115914, 115919,
-    115924, 115929, 115934, 115939, 115944, 115949, 115954, 115958, 115963,
-    115968, 115973, 115977, 115981, 115986, 115991, 115996, 116000, 116004,
-    116008, 116012, 116017, 116022, 116027, 116031, 116035, 116041, 116046,
-    116052, 116057, 116063, 116069, 116076, 0, 116082, 116087, 116093,
-    116098, 116104, 116109, 116114, 116119, 116124, 116129, 116133, 116138,
-    116144, 116150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116156, 116161, 116165,
-    116169, 116173, 116177, 116181, 116185, 116189, 116193, 116197, 116201,
-    116205, 116209, 116213, 116217, 116221, 116225, 116229, 116233, 116238,
-    116243, 116248, 116253, 116258, 116263, 116268, 116273, 116278, 0, 0, 0,
-    116285, 116290, 116295, 116299, 116304, 116309, 116314, 116319, 116324,
-    116329, 116334, 116338, 116343, 116348, 116352, 116356, 116361, 116366,
-    116370, 116375, 116380, 116385, 116390, 116395, 116400, 116405, 116409,
-    116413, 116417, 116422, 116426, 116430, 0, 0, 116434, 116440, 116447,
-    116454, 116461, 116468, 116475, 116482, 116489, 116495, 116502, 116509,
-    116515, 116521, 116528, 116535, 116541, 116548, 116555, 116562, 116569,
-    116576, 0, 116583, 116589, 116595, 116601, 116608, 116614, 116620,
-    116626, 116632, 116637, 116642, 116647, 116652, 116657, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 118957, 118963, 118969, 118975, 118981, 118987, 118993,
+    118999, 119005, 119011, 119017, 119023, 119029, 119035, 119041, 119047,
+    119053, 119059, 119065, 119071, 119077, 119086, 119090, 119094, 119098,
+    119102, 119106, 119110, 119114, 119118, 119122, 119126, 119130, 119134,
+    119138, 119142, 119146, 119152, 119158, 119162, 119168, 119174, 119179,
+    119183, 119188, 119192, 119196, 119202, 119208, 119212, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 119216, 119224, 119227, 119232, 119238, 119246,
+    119251, 119257, 119265, 119271, 119277, 119281, 119285, 119292, 119301,
+    119308, 119317, 119323, 119332, 119339, 119346, 119353, 119363, 119369,
+    119373, 119380, 119389, 119399, 119406, 119413, 119417, 119421, 119428,
+    119438, 119442, 119449, 119456, 119463, 119469, 119476, 119483, 119490,
+    119497, 119501, 119505, 119509, 119516, 119520, 119527, 119534, 119548,
+    119557, 119561, 119565, 119569, 119576, 119580, 119584, 119588, 119596,
+    119604, 119623, 119633, 119653, 119657, 119661, 119665, 119669, 119673,
+    119677, 119681, 119688, 119692, 119695, 119699, 119703, 119709, 119716,
+    119725, 119729, 119738, 119747, 119755, 119759, 119766, 119770, 119774,
+    119778, 119782, 119793, 119802, 119811, 119820, 119829, 119841, 119850,
+    119859, 119868, 119876, 119885, 119897, 119906, 119914, 119923, 119935,
+    119944, 119953, 119965, 119974, 119983, 119995, 120004, 120008, 120012,
+    120016, 120020, 120024, 120028, 120032, 120039, 120043, 120047, 120058,
+    120062, 120066, 120073, 120079, 120085, 120089, 120096, 120100, 120104,
+    120108, 120112, 120116, 120120, 120126, 120134, 120138, 120142, 120145,
+    120152, 120164, 120168, 120180, 120187, 120194, 120201, 120208, 120214,
+    120218, 120222, 120226, 120230, 120237, 120246, 120253, 120261, 120269,
+    120275, 120279, 120283, 120287, 120291, 120297, 120306, 120318, 120325,
+    120332, 120341, 120352, 120358, 120367, 120376, 120383, 120392, 120399,
+    120405, 120415, 120422, 120429, 120436, 120443, 120447, 120453, 120457,
+    120468, 120476, 120485, 120497, 120504, 120511, 120521, 120528, 120537,
+    120544, 120553, 120560, 120567, 120577, 120584, 120591, 120600, 120607,
+    120619, 120628, 120635, 120642, 120649, 120658, 120668, 120681, 120688,
+    120697, 120707, 120714, 120723, 120736, 120743, 120750, 120757, 120767,
+    120777, 120783, 120793, 120800, 120807, 120817, 120823, 120830, 120837,
+    120844, 120854, 120861, 120868, 120875, 120881, 120888, 120898, 120905,
+    120909, 120917, 120921, 120933, 120937, 120951, 120955, 120959, 120963,
+    120967, 120973, 120980, 120988, 120992, 120996, 121000, 121004, 121011,
+    121015, 121021, 121027, 121035, 121039, 121046, 121054, 121058, 121062,
+    121068, 121072, 121081, 121090, 121097, 121107, 121113, 121117, 121121,
+    121129, 121136, 121143, 121149, 121153, 121161, 121165, 121172, 121184,
+    121191, 121201, 121207, 121211, 121220, 121227, 121236, 121240, 121244,
+    121251, 121255, 121259, 121263, 121267, 121270, 121276, 121282, 121286,
+    121290, 121297, 121304, 121311, 121318, 121325, 121332, 121339, 121346,
+    121352, 121356, 121360, 121367, 121374, 121381, 121388, 121395, 121399,
+    121402, 121407, 121411, 121415, 121424, 121433, 121437, 121441, 121447,
+    121453, 121470, 121476, 121480, 121489, 121493, 121497, 121504, 121512,
+    121520, 121526, 121530, 121534, 121538, 121542, 121545, 121551, 121558,
+    121568, 121575, 121582, 121589, 121595, 121602, 121609, 121616, 121623,
+    121630, 121639, 121646, 121658, 121665, 121672, 121682, 121693, 121700,
+    121707, 121714, 121721, 121728, 121735, 121742, 121749, 121756, 121763,
+    121773, 121783, 121793, 121800, 121810, 121817, 121824, 121831, 121838,
+    121844, 121851, 121858, 121865, 121872, 121879, 121886, 121893, 121900,
+    121906, 121913, 121920, 121929, 121936, 121943, 121947, 121955, 121959,
+    121963, 121967, 121971, 121975, 121982, 121986, 121995, 121999, 122006,
+    122014, 122018, 122022, 122026, 122039, 122055, 122059, 122063, 122070,
+    122076, 122083, 122087, 122091, 122095, 122099, 122103, 122110, 122114,
+    122132, 122136, 122140, 122147, 122151, 122155, 122161, 122165, 122169,
+    122177, 122181, 122185, 122188, 122192, 122198, 122209, 122218, 122227,
+    122234, 122241, 122252, 122259, 122266, 122273, 122280, 122287, 122294,
+    122301, 122311, 122317, 122324, 122334, 122343, 122350, 122359, 122369,
+    122376, 122383, 122390, 122397, 122409, 122416, 122423, 122430, 122437,
+    122444, 122454, 122461, 122468, 122478, 122491, 122503, 122510, 122520,
+    122527, 122534, 122541, 122555, 122561, 122569, 122579, 122589, 122596,
+    122603, 122609, 122613, 122620, 122630, 122636, 122649, 122653, 122657,
+    122664, 122668, 122675, 122685, 122689, 122693, 122697, 122701, 122705,
+    122712, 122716, 122723, 122730, 122737, 122746, 122755, 122765, 122772,
+    122779, 122786, 122796, 122803, 122813, 122820, 122830, 122837, 122844,
+    122854, 122864, 122871, 122877, 122885, 122893, 122899, 122905, 122909,
+    122913, 122920, 122928, 122934, 122938, 122942, 122946, 122953, 122965,
+    122968, 122975, 122981, 122985, 122989, 122993, 122997, 123001, 123005,
+    123009, 123013, 123017, 123021, 123028, 123032, 123038, 123042, 123046,
+    123050, 123056, 123063, 123070, 123077, 123088, 123096, 123100, 123106,
+    123115, 123122, 123128, 123131, 123135, 123139, 123145, 123154, 123162,
+    123166, 123172, 123176, 123180, 123184, 123190, 123197, 123203, 123207,
+    123213, 123217, 123221, 123230, 123242, 123246, 123253, 123260, 123270,
+    123277, 123289, 123296, 123303, 123310, 123321, 123331, 123344, 123354,
+    123361, 123365, 123369, 123373, 123377, 123386, 123395, 123404, 123421,
+    123430, 123436, 123443, 123451, 123464, 123468, 123477, 123486, 123495,
+    123504, 123515, 123524, 123532, 123541, 123550, 123559, 123568, 123578,
+    123581, 123585, 123589, 123593, 123597, 123601, 123607, 123614, 123621,
+    123628, 123634, 123640, 123647, 123653, 123660, 123668, 123672, 123679,
+    123686, 123693, 123701, 123704, 123708, 123712, 123716, 123719, 123725,
+    123729, 123735, 123742, 123749, 123755, 123762, 123769, 123776, 123783,
+    123790, 123797, 123804, 123811, 123818, 123825, 123832, 123839, 123846,
+    123853, 123859, 123863, 123872, 123876, 123880, 123884, 123888, 123894,
+    123901, 123908, 123915, 123922, 123929, 123935, 123943, 123947, 123951,
+    123955, 123959, 123965, 123982, 123999, 124003, 124007, 124011, 124015,
+    124019, 124023, 124029, 124036, 124040, 124046, 124053, 124060, 124067,
+    124074, 124081, 124090, 124097, 124104, 124111, 124118, 124122, 124126,
+    124132, 124144, 124148, 124152, 124161, 124165, 124169, 124173, 124179,
+    124183, 124187, 124196, 124200, 124204, 124208, 124215, 124219, 124223,
+    124227, 124231, 124235, 124239, 124243, 124246, 124252, 124259, 124266,
+    124272, 124276, 124293, 124299, 124303, 124309, 124315, 124321, 124327,
+    124333, 124339, 124343, 124347, 124351, 124357, 124361, 124367, 124371,
+    124375, 124382, 124389, 124406, 124410, 124414, 124418, 124422, 124426,
+    124438, 124441, 124446, 124451, 124466, 124476, 124488, 124492, 124496,
+    124500, 124506, 124513, 124520, 124530, 124542, 124548, 124554, 124563,
+    124567, 124571, 124578, 124588, 124595, 124601, 124605, 124609, 124616,
+    124622, 124626, 124632, 124636, 124644, 124650, 124654, 124662, 124670,
+    124677, 124683, 124690, 124697, 124707, 124717, 124721, 124725, 124729,
+    124733, 124739, 124746, 124752, 124759, 124766, 124773, 124782, 124789,
+    124796, 124802, 124809, 124816, 124823, 124830, 124837, 124844, 124850,
+    124857, 124864, 124871, 124880, 124887, 124894, 124898, 124904, 124908,
+    124914, 124921, 124928, 124935, 124939, 124943, 124947, 124951, 124955,
+    124962, 124966, 124970, 124976, 124984, 124988, 124992, 124996, 125000,
+    125007, 125011, 125015, 125023, 125027, 125031, 125035, 125039, 125045,
+    125049, 125053, 125059, 125066, 125072, 125079, 125091, 125095, 125102,
+    125109, 125116, 125123, 125135, 125142, 125146, 125150, 125154, 125161,
+    125168, 125175, 125182, 125192, 125199, 125205, 125212, 125219, 125226,
+    125233, 125242, 125252, 125259, 125263, 125270, 125274, 125278, 125282,
+    125289, 125296, 125306, 125312, 125316, 125325, 125329, 125336, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116662, 116667,
-    116673, 116678, 116684, 116689, 116695, 0, 116700, 116706, 0, 116711,
-    116717, 116722, 116728, 116734, 116740, 116746, 116752, 116758, 116764,
-    116770, 116776, 116782, 116788, 116794, 116800, 116806, 116811, 116817,
-    116823, 116829, 116834, 116839, 116845, 116851, 116857, 116862, 116867,
-    116872, 116877, 116883, 116889, 116895, 116900, 116905, 116911, 116917,
-    116923, 116929, 116936, 116942, 116949, 116955, 116962, 0, 0, 0, 116969,
-    0, 116975, 116982, 0, 116988, 116995, 117001, 117007, 117013, 117019,
-    117025, 117030, 117035, 0, 0, 0, 0, 0, 0, 0, 0, 117040, 117046, 117051,
-    117056, 117061, 117066, 117071, 117076, 117081, 117086, 0, 0, 0, 0, 0, 0,
-    117091, 117096, 117102, 117107, 117113, 117118, 0, 117124, 117130, 0,
-    117136, 117142, 117148, 117153, 117159, 117165, 117171, 117176, 117181,
-    117187, 117192, 117198, 117203, 117209, 117215, 117221, 117227, 117232,
-    117238, 117244, 117250, 117256, 117262, 117268, 117274, 117280, 117286,
-    117292, 117297, 117303, 117308, 117313, 117318, 117325, 117331, 117338,
-    117344, 0, 117351, 117358, 0, 117365, 117372, 117379, 117385, 117391,
-    117396, 0, 0, 0, 0, 0, 0, 0, 117401, 117407, 117412, 117417, 117422,
-    117427, 117432, 117437, 117442, 117447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 125340, 125346, 125352, 125359, 125366, 125373, 125380, 125387,
+    125394, 125400, 125407, 125414, 125421, 125428, 125435, 125442, 125448,
+    125454, 125460, 125466, 125472, 125478, 125484, 125490, 125496, 125503,
+    125510, 125517, 125524, 125531, 125538, 125544, 125550, 125556, 125563,
+    125570, 125576, 125582, 125591, 125598, 125605, 125612, 125619, 125626,
+    125633, 125639, 125645, 125651, 125660, 125667, 125674, 125685, 125696,
+    125702, 125708, 125714, 125723, 125730, 125737, 125747, 125757, 125768,
+    125779, 125791, 125804, 125815, 125826, 125838, 125851, 125862, 125873,
+    125884, 125895, 125906, 125918, 125926, 125934, 125943, 125952, 125961,
+    125967, 125973, 125979, 125986, 125996, 126003, 126013, 126018, 126023,
+    126029, 126035, 126043, 126051, 126060, 126071, 126082, 126090, 126098,
+    126107, 126116, 126124, 126131, 126139, 126147, 126154, 126161, 126170,
+    126179, 126188, 126197, 126206, 0, 126215, 126226, 126233, 126241,
+    126249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126257, 126266, 126273, 126280,
+    126289, 126296, 126303, 126310, 126320, 126327, 126334, 126341, 126349,
+    126356, 126363, 126370, 126381, 126388, 126395, 126402, 126409, 126416,
+    126425, 126432, 126438, 126445, 126454, 126461, 126468, 126475, 126485,
+    126492, 126499, 126509, 126519, 126526, 126533, 126540, 126547, 126554,
+    126561, 126570, 126577, 126584, 126590, 126598, 126607, 126616, 126627,
+    126635, 126644, 126653, 126662, 126671, 126678, 126685, 126694, 126706,
+    126716, 126723, 126730, 126740, 126750, 126759, 126769, 126776, 126786,
+    126793, 126800, 126807, 126817, 126827, 126834, 126841, 126851, 126857,
+    126868, 126877, 126887, 126895, 126908, 126915, 126921, 126929, 126936,
+    126946, 126950, 126954, 126958, 126962, 126966, 126970, 126974, 126983,
+    126987, 126994, 126998, 127002, 127006, 127010, 127014, 127018, 127022,
+    127026, 127030, 127034, 127038, 127042, 127046, 127050, 127054, 127058,
+    127062, 127066, 127070, 127077, 127084, 127094, 127107, 127117, 127121,
+    127125, 127129, 127133, 127137, 127141, 127145, 127149, 127153, 127157,
+    127161, 127168, 127175, 127186, 127193, 127199, 127206, 127213, 127220,
+    127227, 127234, 127238, 127242, 127249, 127256, 127263, 127272, 127279,
+    127292, 127302, 127309, 127316, 127320, 127324, 127333, 127340, 127347,
+    127354, 127367, 127374, 127381, 127391, 127401, 127410, 127417, 127424,
+    127431, 127438, 127445, 127452, 127462, 127468, 127476, 127483, 127491,
+    127498, 127509, 127516, 127522, 127529, 127536, 127543, 127550, 127560,
+    127570, 127577, 127584, 127593, 127601, 127607, 127614, 127621, 127628,
+    127635, 127639, 127649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 117452, 117456, 117461, 117466, 117470, 117475, 117479, 117483,
-    117488, 117492, 117497, 117502, 117507, 117511, 117515, 117519, 117524,
-    117528, 117532, 117536, 117541, 117546, 117551, 117556, 117560, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117567,
-    117572, 117577, 117582, 117587, 117592, 117597, 117602, 117607, 117612,
-    117617, 117622, 117627, 117632, 117637, 117642, 117647, 117652, 117657,
-    117662, 117667, 117675, 117679, 117683, 117687, 117691, 117695, 117699,
-    117703, 117707, 117711, 117715, 117719, 117723, 117727, 117731, 117735,
-    117741, 117747, 117751, 117757, 117763, 117768, 117772, 117777, 117781,
-    117785, 117791, 117797, 117801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    117805, 117813, 117816, 117821, 117827, 117835, 117840, 117846, 117854,
-    117860, 117866, 117870, 117874, 117881, 117890, 117897, 117906, 117912,
-    117921, 117928, 117935, 117942, 117952, 117958, 117962, 117969, 117978,
-    117988, 117995, 118002, 118006, 118010, 118017, 118027, 118031, 118038,
-    118045, 118052, 118058, 118065, 118072, 118079, 118086, 118090, 118094,
-    118098, 118105, 118109, 118116, 118123, 118137, 118146, 118150, 118154,
-    118158, 118165, 118169, 118173, 118177, 118185, 118193, 118212, 118222,
-    118242, 118246, 118250, 118254, 118258, 118262, 118266, 118270, 118277,
-    118281, 118284, 118288, 118292, 118298, 118305, 118314, 118318, 118327,
-    118336, 118344, 118348, 118355, 118359, 118363, 118367, 118371, 118382,
-    118391, 118400, 118409, 118418, 118430, 118439, 118448, 118457, 118465,
-    118474, 118486, 118495, 118503, 118512, 118524, 118533, 118542, 118554,
-    118563, 118572, 118584, 118593, 118597, 118601, 118605, 118609, 118613,
-    118617, 118621, 118628, 118632, 118636, 118647, 118651, 118655, 118662,
-    118668, 118674, 118678, 118685, 118689, 118693, 118697, 118701, 118705,
-    118709, 118715, 118723, 118727, 118731, 118734, 118741, 118753, 118757,
-    118769, 118776, 118783, 118790, 118797, 118803, 118807, 118811, 118815,
-    118819, 118826, 118835, 118842, 118850, 118858, 118864, 118868, 118872,
-    118876, 118880, 118886, 118895, 118907, 118914, 118921, 118930, 118941,
-    118947, 118956, 118965, 118972, 118981, 118988, 118994, 119004, 119011,
-    119018, 119025, 119032, 119036, 119042, 119046, 119057, 119065, 119074,
-    119086, 119093, 119100, 119110, 119117, 119126, 119133, 119142, 119149,
-    119156, 119166, 119173, 119180, 119189, 119196, 119208, 119217, 119224,
-    119231, 119238, 119247, 119257, 119270, 119277, 119286, 119296, 119303,
-    119312, 119325, 119332, 119339, 119346, 119356, 119366, 119372, 119382,
-    119389, 119396, 119406, 119412, 119419, 119426, 119433, 119443, 119450,
-    119457, 119464, 119470, 119477, 119487, 119494, 119498, 119506, 119510,
-    119522, 119526, 119540, 119544, 119548, 119552, 119556, 119562, 119569,
-    119577, 119581, 119585, 119589, 119593, 119600, 119604, 119610, 119616,
-    119624, 119628, 119635, 119643, 119647, 119651, 119657, 119661, 119670,
-    119679, 119686, 119696, 119702, 119706, 119710, 119718, 119725, 119732,
-    119738, 119742, 119750, 119754, 119761, 119773, 119780, 119790, 119796,
-    119800, 119809, 119816, 119825, 119829, 119833, 119840, 119844, 119848,
-    119852, 119856, 119859, 119865, 119871, 119875, 119879, 119886, 119893,
-    119900, 119907, 119914, 119921, 119928, 119935, 119941, 119945, 119949,
-    119956, 119963, 119970, 119977, 119984, 119988, 119991, 119996, 120000,
-    120004, 120013, 120022, 120026, 120030, 120036, 120042, 120059, 120065,
-    120069, 120078, 120082, 120086, 120093, 120101, 120109, 120115, 120119,
-    120123, 120127, 120131, 120134, 120140, 120147, 120157, 120164, 120171,
-    120178, 120184, 120191, 120198, 120205, 120212, 120219, 120228, 120235,
-    120247, 120254, 120261, 120271, 120282, 120289, 120296, 120303, 120310,
-    120317, 120324, 120331, 120338, 120345, 120352, 120362, 120372, 120382,
-    120389, 120399, 120406, 120413, 120420, 120427, 120433, 120440, 120447,
-    120454, 120461, 120468, 120475, 120482, 120489, 120495, 120502, 120509,
-    120518, 120525, 120532, 120536, 120544, 120548, 120552, 120556, 120560,
-    120564, 120571, 120575, 120584, 120588, 120595, 120603, 120607, 120611,
-    120615, 120628, 120644, 120648, 120652, 120659, 120665, 120672, 120676,
-    120680, 120684, 120688, 120692, 120699, 120703, 120721, 120725, 120729,
-    120736, 120740, 120744, 120750, 120754, 120758, 120766, 120770, 120774,
-    120777, 120781, 120787, 120798, 120807, 120816, 120823, 120830, 120841,
-    120848, 120855, 120862, 120869, 120876, 120883, 120890, 120900, 120906,
-    120913, 120923, 120932, 120939, 120948, 120958, 120965, 120972, 120979,
-    120986, 120998, 121005, 121012, 121019, 121026, 121033, 121043, 121050,
-    121057, 121067, 121080, 121092, 121099, 121109, 121116, 121123, 121130,
-    121144, 121150, 121158, 121168, 121178, 121185, 121192, 121198, 121202,
-    121209, 121219, 121225, 121238, 121242, 121246, 121253, 121257, 121264,
-    121274, 121278, 121282, 121286, 121290, 121294, 121301, 121305, 121312,
-    121319, 121326, 121335, 121344, 121354, 121361, 121368, 121375, 121385,
-    121392, 121402, 121409, 121419, 121426, 121433, 121443, 121453, 121460,
-    121466, 121474, 121482, 121488, 121494, 121498, 121502, 121509, 121517,
-    121523, 121527, 121531, 121535, 121542, 121554, 121557, 121564, 121570,
-    121574, 121578, 121582, 121586, 121590, 121594, 121598, 121602, 121606,
-    121610, 121617, 121621, 121627, 121631, 121635, 121639, 121645, 121652,
-    121659, 121666, 121677, 121685, 121689, 121695, 121704, 121711, 121717,
-    121720, 121724, 121728, 121734, 121743, 121751, 121755, 121761, 121765,
-    121769, 121773, 121779, 121786, 121792, 121796, 121802, 121806, 121810,
-    121819, 121831, 121835, 121842, 121849, 121859, 121866, 121878, 121885,
-    121892, 121899, 121910, 121920, 121933, 121943, 121950, 121954, 121958,
-    121962, 121966, 121975, 121984, 121993, 122010, 122019, 122025, 122032,
-    122040, 122053, 122057, 122066, 122075, 122084, 122093, 122104, 122113,
-    122121, 122130, 122139, 122148, 122157, 122167, 122170, 122174, 122178,
-    122182, 122186, 122190, 122196, 122203, 122210, 122217, 122223, 122229,
-    122236, 122242, 122249, 122257, 122261, 122268, 122275, 122282, 122290,
-    122293, 122297, 122301, 122305, 122308, 122314, 122318, 122324, 122331,
-    122338, 122344, 122351, 122358, 122365, 122372, 122379, 122386, 122393,
-    122400, 122407, 122414, 122421, 122428, 122435, 122442, 122448, 122452,
-    122461, 122465, 122469, 122473, 122477, 122483, 122490, 122497, 122504,
-    122511, 122518, 122524, 122532, 122536, 122540, 122544, 122548, 122554,
-    122571, 122588, 122592, 122596, 122600, 122604, 122608, 122612, 122618,
-    122625, 122629, 122635, 122642, 122649, 122656, 122663, 122670, 122679,
-    122686, 122693, 122700, 122707, 122711, 122715, 122721, 122733, 122737,
-    122741, 122750, 122754, 122758, 122762, 122768, 122772, 122776, 122785,
-    122789, 122793, 122797, 122804, 122808, 122812, 122816, 122820, 122824,
-    122828, 122832, 122835, 122841, 122848, 122855, 122861, 122865, 122882,
-    122888, 122892, 122898, 122904, 122910, 122916, 122922, 122928, 122932,
-    122936, 122940, 122946, 122950, 122956, 122960, 122964, 122971, 122978,
-    122995, 122999, 123003, 123007, 123011, 123015, 123027, 123030, 123035,
-    123040, 123055, 123065, 123077, 123081, 123085, 123089, 123095, 123102,
-    123109, 123119, 123131, 123137, 123143, 123152, 123156, 123160, 123167,
-    123177, 123184, 123190, 123194, 123198, 123205, 123211, 123215, 123221,
-    123225, 123233, 123239, 123243, 123251, 123259, 123266, 123272, 123279,
-    123286, 123296, 123306, 123310, 123314, 123318, 123322, 123328, 123335,
-    123341, 123348, 123355, 123362, 123371, 123378, 123385, 123391, 123398,
-    123405, 123412, 123419, 123426, 123433, 123439, 123446, 123453, 123460,
-    123469, 123476, 123483, 123487, 123493, 123497, 123503, 123510, 123517,
-    123524, 123528, 123532, 123536, 123540, 123544, 123551, 123555, 123559,
-    123565, 123573, 123577, 123581, 123585, 123589, 123596, 123600, 123604,
-    123612, 123616, 123620, 123624, 123628, 123634, 123638, 123642, 123648,
-    123655, 123661, 123668, 123680, 123684, 123691, 123698, 123705, 123712,
-    123724, 123731, 123735, 123739, 123743, 123750, 123757, 123764, 123771,
-    123781, 123788, 123794, 123801, 123808, 123815, 123822, 123831, 123841,
-    123848, 123852, 123859, 123863, 123867, 123871, 123878, 123885, 123895,
-    123901, 123905, 123914, 123918, 123925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 127659, 127663, 127667, 127671, 127675, 127679, 127683,
+    127687, 127691, 127695, 127699, 127703, 127707, 127711, 127715, 127719,
+    127723, 127727, 127731, 127735, 127739, 127743, 127747, 127751, 127755,
+    127759, 127763, 127767, 127771, 127775, 127779, 127783, 127787, 127791,
+    127795, 127799, 127803, 127807, 127811, 127815, 127819, 127823, 127827,
+    127831, 127835, 127839, 127843, 127847, 127851, 127855, 127859, 127863,
+    127867, 127871, 127875, 127879, 127883, 127887, 127891, 127895, 127899,
+    127903, 127907, 127911, 127915, 127919, 127923, 127927, 127931, 127935,
+    127939, 127943, 127947, 127951, 127955, 127959, 127963, 127967, 127971,
+    127975, 127979, 127983, 127987, 127991, 127995, 127999, 128003, 128007,
+    128011, 128015, 128019, 128023, 128027, 128031, 128035, 128039, 128043,
+    128047, 128051, 128055, 128059, 128063, 128067, 128071, 128075, 128079,
+    128083, 128087, 128091, 128095, 128099, 128103, 128107, 128111, 128115,
+    128119, 128123, 128127, 128131, 128135, 128139, 128143, 128147, 128151,
+    128155, 128159, 128163, 128167, 128171, 128175, 128179, 128183, 128187,
+    128191, 128195, 128199, 128203, 128207, 128211, 128215, 128219, 128223,
+    128227, 128231, 128235, 128239, 128243, 128247, 128251, 128255, 128259,
+    128263, 128267, 128271, 128275, 128279, 128283, 128287, 128291, 128295,
+    128299, 128303, 128307, 128311, 128315, 128319, 128323, 128327, 128331,
+    128335, 128339, 128343, 128347, 128351, 128355, 128359, 128363, 128367,
+    128371, 128375, 128379, 128383, 128387, 128391, 128395, 128399, 128403,
+    128407, 128411, 128415, 128419, 128423, 128427, 128431, 128435, 128439,
+    128443, 128447, 128451, 128455, 128459, 128463, 128467, 128471, 128475,
+    128479, 128483, 128487, 128491, 128495, 128499, 128503, 128507, 128511,
+    128515, 128519, 128523, 128527, 128531, 128535, 128539, 128543, 128547,
+    128551, 128555, 128559, 128563, 128567, 128571, 128575, 128579, 128583,
+    128587, 128591, 128595, 128599, 128603, 128607, 128611, 128615, 128619,
+    128623, 128627, 128631, 128635, 128639, 128643, 128647, 128651, 128655,
+    128659, 128663, 128667, 128671, 128675, 128679, 128683, 128687, 128691,
+    128695, 128699, 128703, 128707, 128711, 128715, 128719, 128723, 128727,
+    128731, 128735, 128739, 128743, 128747, 128751, 128755, 128759, 128763,
+    128767, 128771, 128775, 128779, 128783, 128787, 128791, 128795, 128799,
+    128803, 128807, 128811, 128815, 128819, 128823, 128827, 128831, 128835,
+    128839, 128843, 128847, 128851, 128855, 128859, 128863, 128867, 128871,
+    128875, 128879, 128883, 128887, 128891, 128895, 128899, 128903, 128907,
+    128911, 128915, 128919, 128923, 128927, 128931, 128935, 128939, 128943,
+    128947, 128951, 128955, 128959, 128963, 128967, 128971, 128975, 128979,
+    128983, 128987, 128991, 128995, 128999, 129003, 129007, 129011, 129015,
+    129019, 129023, 129027, 129031, 129035, 129039, 129043, 129047, 129051,
+    129055, 129059, 129063, 129067, 129071, 129075, 129079, 129083, 129087,
+    129091, 129095, 129099, 129103, 129107, 129111, 129115, 129119, 129123,
+    129127, 129131, 129135, 129139, 129143, 129147, 129151, 129155, 129159,
+    129163, 129167, 129171, 129175, 129179, 129183, 129187, 129191, 129195,
+    129199, 129203, 129207, 129211, 129215, 129219, 129223, 129227, 129231,
+    129235, 129239, 129243, 129247, 129251, 129255, 129259, 129263, 129267,
+    129271, 129275, 129279, 129283, 129287, 129291, 129295, 129299, 129303,
+    129307, 129311, 129315, 129319, 129323, 129327, 129331, 129335, 129339,
+    129343, 129347, 129351, 129355, 129359, 129363, 129367, 129371, 129375,
+    129379, 129383, 129387, 129391, 129395, 129399, 129403, 129407, 129411,
+    129415, 129419, 129423, 129427, 129431, 129435, 129439, 129443, 129447,
+    129451, 129455, 129459, 129463, 129467, 129471, 129475, 129479, 129483,
+    129487, 129491, 129495, 129499, 129503, 129507, 129511, 129515, 129519,
+    129523, 129527, 129531, 129535, 129539, 129543, 129547, 129551, 129555,
+    129559, 129563, 129567, 129571, 129575, 129579, 129583, 129587, 129591,
+    129595, 129599, 129603, 129607, 129611, 129615, 129619, 129623, 129627,
+    129631, 129635, 129639, 129643, 129647, 129651, 129655, 129659, 129663,
+    129667, 129671, 129675, 129679, 129683, 129687, 129691, 129695, 129699,
+    129703, 129707, 129711, 129715, 129719, 129723, 129727, 129731, 129735,
+    129739, 129743, 129747, 129751, 129755, 129759, 129763, 129767, 129771,
+    129775, 129779, 129783, 129787, 129791, 129795, 129799, 129803, 129807,
+    129811, 129815, 129819, 129823, 129827, 129831, 129835, 129839, 129843,
+    129847, 129851, 129855, 129859, 129863, 129867, 129871, 129875, 129879,
+    129883, 129887, 129891, 129895, 129899, 129903, 129907, 129911, 129915,
+    129919, 129923, 129927, 129931, 129935, 129939, 129943, 129947, 129951,
+    129955, 129959, 129963, 129967, 129971, 129975, 129979, 129983, 129987,
+    129991, 129995, 129999, 130003, 130007, 130011, 130015, 130019, 130023,
+    130027, 130031, 130035, 130039, 130043, 130047, 130051, 130055, 130059,
+    130063, 130067, 130071, 130075, 130079, 130083, 130087, 130091, 130095,
+    130099, 130103, 130107, 130111, 130115, 130119, 130123, 130127, 130131,
+    130135, 130139, 130143, 130147, 130151, 130155, 130159, 130163, 130167,
+    130171, 130175, 130179, 130183, 130187, 130191, 130195, 130199, 130203,
+    130207, 130211, 130215, 130219, 130223, 130227, 130231, 130235, 130239,
+    130243, 130247, 130251, 130255, 130259, 130263, 130267, 130271, 130275,
+    130279, 130283, 130287, 130291, 130295, 130299, 130303, 130307, 130311,
+    130315, 130319, 130323, 130327, 130331, 130335, 130339, 130343, 130347,
+    130351, 130355, 130359, 130363, 130367, 130371, 130375, 130379, 130383,
+    130387, 130391, 130395, 130399, 130403, 130407, 130411, 130415, 130419,
+    130423, 130427, 130431, 130435, 130439, 130443, 130447, 130451, 130455,
+    130459, 130463, 130467, 130471, 130475, 130479, 130483, 130487, 130491,
+    130495, 130499, 130503, 130507, 130511, 130515, 130519, 130523, 130527,
+    130531, 130535, 130539, 130543, 130547, 130551, 130555, 130559, 130563,
+    130567, 130571, 130575, 130579, 130583, 130587, 130591, 130595, 130599,
+    130603, 130607, 130611, 130615, 130619, 130623, 130627, 130631, 130635,
+    130639, 130643, 130647, 130651, 130655, 130659, 130663, 130667, 130671,
+    130675, 130679, 130683, 130687, 130691, 130695, 130699, 130703, 130707,
+    130711, 130715, 130719, 130723, 130727, 130731, 130735, 130739, 130743,
+    130747, 130751, 130755, 130759, 130763, 130767, 130771, 130775, 130779,
+    130783, 130787, 130791, 130795, 130799, 130803, 130807, 130811, 130815,
+    130819, 130823, 130827, 130831, 130835, 130839, 130843, 130847, 130851,
+    130855, 130859, 130863, 130867, 130871, 130875, 130879, 130883, 130887,
+    130891, 130895, 130899, 130903, 130907, 130911, 130915, 130919, 130923,
+    130927, 130931, 130935, 130939, 130943, 130947, 130951, 130955, 130959,
+    130963, 130967, 130971, 130975, 130979, 130983, 130987, 130991, 130995,
+    130999, 131003, 131007, 131011, 131015, 131019, 131023, 131027, 131031,
+    131035, 131039, 131043, 131047, 131051, 131055, 131059, 131063, 131067,
+    131071, 131075, 131079, 131083, 131087, 131091, 131095, 131099, 131103,
+    131107, 131111, 131115, 131119, 131123, 131127, 131131, 131135, 131139,
+    131143, 131147, 131151, 131155, 131159, 131163, 131167, 131171, 131175,
+    131179, 131183, 131187, 131191, 131195, 131199, 131203, 131207, 131211,
+    131215, 131219, 131223, 131227, 131231, 131235, 131239, 131243, 131247,
+    131251, 131255, 131259, 131263, 131267, 131271, 131275, 131279, 131283,
+    131287, 131291, 131295, 131299, 131303, 131307, 131311, 131315, 131319,
+    131323, 131327, 131331, 131335, 131339, 131343, 131347, 131351, 131355,
+    131359, 131363, 131367, 131371, 131375, 131379, 131383, 131387, 131391,
+    131395, 131399, 131403, 131407, 131411, 131415, 131419, 131423, 131427,
+    131431, 131435, 131439, 131443, 131447, 131451, 131455, 131459, 131463,
+    131467, 131471, 131475, 131479, 131483, 131487, 131491, 131495, 131499,
+    131503, 131507, 131511, 131515, 131519, 131523, 131527, 131531, 131535,
+    131539, 131543, 131547, 131551, 131555, 131559, 131563, 131567, 131571,
+    131575, 131579, 131583, 131587, 131591, 131595, 131599, 131603, 131607,
+    131611, 131615, 131619, 131623, 131627, 131631, 131635, 131639, 131643,
+    131647, 131651, 131655, 131659, 131663, 131667, 131671, 131675, 131679,
+    131683, 131687, 131691, 131695, 131699, 131703, 131707, 131711, 131715,
+    131719, 131723, 131727, 131731, 131735, 131739, 131743, 131747, 131751,
+    131755, 131759, 131763, 131767, 131771, 131775, 131779, 131783, 131787,
+    131791, 131795, 131799, 131803, 131807, 131811, 131815, 131819, 131823,
+    131827, 131831, 131835, 131839, 131843, 131847, 131851, 131855, 131859,
+    131863, 131867, 131871, 131875, 131879, 131883, 131887, 131891, 131895,
+    131899, 131903, 131907, 131911, 131915, 131919, 131923, 131927, 131931,
+    131935, 131939, 0, 131943, 131948, 131954, 131964, 131974, 131984,
+    131994, 132000, 132006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123929, 123935,
-    123941, 123948, 123955, 123962, 123969, 123976, 123983, 123989, 123996,
-    124003, 124010, 124017, 124024, 124031, 124037, 124043, 124049, 124055,
-    124061, 124067, 124073, 124079, 124085, 124092, 124099, 124106, 124113,
-    124120, 124127, 124133, 124139, 124145, 124152, 124159, 124165, 124171,
-    124180, 124187, 124194, 124201, 124208, 124215, 124222, 124228, 124234,
-    124240, 124249, 124256, 124263, 124274, 124285, 124291, 124297, 124303,
-    124312, 124319, 124326, 124336, 124346, 124357, 124368, 124380, 124393,
-    124404, 124415, 124427, 124440, 124451, 124462, 124473, 124484, 124495,
-    124507, 124515, 124523, 124532, 124541, 124550, 124556, 124562, 124568,
-    124575, 124585, 124592, 124602, 124607, 124612, 124618, 124624, 124632,
-    124640, 124649, 124660, 124671, 124679, 124687, 124696, 124705, 124713,
-    124720, 124728, 124736, 124743, 124750, 124759, 124768, 124777, 124786,
-    124795, 0, 124804, 124815, 124822, 124830, 124838, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 124846, 124855, 124862, 124869, 124878, 124885, 124892,
-    124899, 124909, 124916, 124923, 124930, 124938, 124945, 124952, 124959,
-    124970, 124977, 124984, 124991, 124998, 125005, 125014, 125021, 125027,
-    125034, 125043, 125050, 125057, 125064, 125074, 125081, 125088, 125098,
-    125108, 125115, 125122, 125129, 125136, 125143, 125150, 125159, 125166,
-    125173, 125179, 125187, 125196, 125205, 125216, 125224, 125233, 125242,
-    125251, 125260, 125267, 125274, 125283, 125295, 125305, 125312, 125319,
-    125329, 125339, 125348, 125358, 125365, 125375, 125382, 125389, 125396,
-    125406, 125416, 125423, 125430, 125440, 125446, 125457, 125466, 125476,
-    125484, 125497, 125504, 125510, 125518, 125525, 125535, 125539, 125543,
-    125547, 125551, 125555, 125559, 125563, 125572, 125576, 125583, 125587,
-    125591, 125595, 125599, 125603, 125607, 125611, 125615, 125619, 125623,
-    125627, 125631, 125635, 125639, 125643, 125647, 125651, 125655, 125659,
-    125666, 125673, 125683, 125696, 125706, 125710, 125714, 125718, 125722,
-    125726, 125730, 125734, 125738, 125742, 125746, 125750, 125757, 125764,
-    125775, 125782, 125788, 125795, 125802, 125809, 125816, 125823, 125827,
-    125831, 125838, 125845, 125852, 125861, 125868, 125881, 125891, 125898,
-    125905, 125909, 125913, 125922, 125929, 125936, 125943, 125956, 125963,
-    125970, 125980, 125990, 125999, 126006, 126013, 126020, 126027, 126034,
-    126041, 126051, 126057, 126065, 126072, 126080, 126087, 126098, 126105,
-    126111, 126118, 126125, 126132, 126139, 126149, 126159, 126166, 126173,
-    126182, 126190, 126196, 126203, 126210, 126217, 126224, 126228, 126238,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126248, 126252, 126256, 126260,
-    126264, 126268, 126272, 126276, 126280, 126284, 126288, 126292, 126296,
-    126300, 126304, 126308, 126312, 126316, 126320, 126324, 126328, 126332,
-    126336, 126340, 126344, 126348, 126352, 126356, 126360, 126364, 126368,
-    126372, 126376, 126380, 126384, 126388, 126392, 126396, 126400, 126404,
-    126408, 126412, 126416, 126420, 126424, 126428, 126432, 126436, 126440,
-    126444, 126448, 126452, 126456, 126460, 126464, 126468, 126472, 126476,
-    126480, 126484, 126488, 126492, 126496, 126500, 126504, 126508, 126512,
-    126516, 126520, 126524, 126528, 126532, 126536, 126540, 126544, 126548,
-    126552, 126556, 126560, 126564, 126568, 126572, 126576, 126580, 126584,
-    126588, 126592, 126596, 126600, 126604, 126608, 126612, 126616, 126620,
-    126624, 126628, 126632, 126636, 126640, 126644, 126648, 126652, 126656,
-    126660, 126664, 126668, 126672, 126676, 126680, 126684, 126688, 126692,
-    126696, 126700, 126704, 126708, 126712, 126716, 126720, 126724, 126728,
-    126732, 126736, 126740, 126744, 126748, 126752, 126756, 126760, 126764,
-    126768, 126772, 126776, 126780, 126784, 126788, 126792, 126796, 126800,
-    126804, 126808, 126812, 126816, 126820, 126824, 126828, 126832, 126836,
-    126840, 126844, 126848, 126852, 126856, 126860, 126864, 126868, 126872,
-    126876, 126880, 126884, 126888, 126892, 126896, 126900, 126904, 126908,
-    126912, 126916, 126920, 126924, 126928, 126932, 126936, 126940, 126944,
-    126948, 126952, 126956, 126960, 126964, 126968, 126972, 126976, 126980,
-    126984, 126988, 126992, 126996, 127000, 127004, 127008, 127012, 127016,
-    127020, 127024, 127028, 127032, 127036, 127040, 127044, 127048, 127052,
-    127056, 127060, 127064, 127068, 127072, 127076, 127080, 127084, 127088,
-    127092, 127096, 127100, 127104, 127108, 127112, 127116, 127120, 127124,
-    127128, 127132, 127136, 127140, 127144, 127148, 127152, 127156, 127160,
-    127164, 127168, 127172, 127176, 127180, 127184, 127188, 127192, 127196,
-    127200, 127204, 127208, 127212, 127216, 127220, 127224, 127228, 127232,
-    127236, 127240, 127244, 127248, 127252, 127256, 127260, 127264, 127268,
-    127272, 127276, 127280, 127284, 127288, 127292, 127296, 127300, 127304,
-    127308, 127312, 127316, 127320, 127324, 127328, 127332, 127336, 127340,
-    127344, 127348, 127352, 127356, 127360, 127364, 127368, 127372, 127376,
-    127380, 127384, 127388, 127392, 127396, 127400, 127404, 127408, 127412,
-    127416, 127420, 127424, 127428, 127432, 127436, 127440, 127444, 127448,
-    127452, 127456, 127460, 127464, 127468, 127472, 127476, 127480, 127484,
-    127488, 127492, 127496, 127500, 127504, 127508, 127512, 127516, 127520,
-    127524, 127528, 127532, 127536, 127540, 127544, 127548, 127552, 127556,
-    127560, 127564, 127568, 127572, 127576, 127580, 127584, 127588, 127592,
-    127596, 127600, 127604, 127608, 127612, 127616, 127620, 127624, 127628,
-    127632, 127636, 127640, 127644, 127648, 127652, 127656, 127660, 127664,
-    127668, 127672, 127676, 127680, 127684, 127688, 127692, 127696, 127700,
-    127704, 127708, 127712, 127716, 127720, 127724, 127728, 127732, 127736,
-    127740, 127744, 127748, 127752, 127756, 127760, 127764, 127768, 127772,
-    127776, 127780, 127784, 127788, 127792, 127796, 127800, 127804, 127808,
-    127812, 127816, 127820, 127824, 127828, 127832, 127836, 127840, 127844,
-    127848, 127852, 127856, 127860, 127864, 127868, 127872, 127876, 127880,
-    127884, 127888, 127892, 127896, 127900, 127904, 127908, 127912, 127916,
-    127920, 127924, 127928, 127932, 127936, 127940, 127944, 127948, 127952,
-    127956, 127960, 127964, 127968, 127972, 127976, 127980, 127984, 127988,
-    127992, 127996, 128000, 128004, 128008, 128012, 128016, 128020, 128024,
-    128028, 128032, 128036, 128040, 128044, 128048, 128052, 128056, 128060,
-    128064, 128068, 128072, 128076, 128080, 128084, 128088, 128092, 128096,
-    128100, 128104, 128108, 128112, 128116, 128120, 128124, 128128, 128132,
-    128136, 128140, 128144, 128148, 128152, 128156, 128160, 128164, 128168,
-    128172, 128176, 128180, 128184, 128188, 128192, 128196, 128200, 128204,
-    128208, 128212, 128216, 128220, 128224, 128228, 128232, 128236, 128240,
-    128244, 128248, 128252, 128256, 128260, 128264, 128268, 128272, 128276,
-    128280, 128284, 128288, 128292, 128296, 128300, 128304, 128308, 128312,
-    128316, 128320, 128324, 128328, 128332, 128336, 128340, 128344, 128348,
-    128352, 128356, 128360, 128364, 128368, 128372, 128376, 128380, 128384,
-    128388, 128392, 128396, 128400, 128404, 128408, 128412, 128416, 128420,
-    128424, 128428, 128432, 128436, 128440, 128444, 128448, 128452, 128456,
-    128460, 128464, 128468, 128472, 128476, 128480, 128484, 128488, 128492,
-    128496, 128500, 128504, 128508, 128512, 128516, 128520, 128524, 128528,
-    128532, 128536, 128540, 128544, 128548, 128552, 128556, 128560, 128564,
-    128568, 128572, 128576, 128580, 128584, 128588, 128592, 128596, 128600,
-    128604, 128608, 128612, 128616, 128620, 128624, 128628, 128632, 128636,
-    128640, 128644, 128648, 128652, 128656, 128660, 128664, 128668, 128672,
-    128676, 128680, 128684, 128688, 128692, 128696, 128700, 128704, 128708,
-    128712, 128716, 128720, 128724, 128728, 128732, 128736, 128740, 128744,
-    128748, 128752, 128756, 128760, 128764, 128768, 128772, 128776, 128780,
-    128784, 128788, 128792, 128796, 128800, 128804, 128808, 128812, 128816,
-    128820, 128824, 128828, 128832, 128836, 128840, 128844, 128848, 128852,
-    128856, 128860, 128864, 128868, 128872, 128876, 128880, 128884, 128888,
-    128892, 128896, 128900, 128904, 128908, 128912, 128916, 128920, 128924,
-    128928, 128932, 128936, 128940, 128944, 128948, 128952, 128956, 128960,
-    128964, 128968, 128972, 128976, 128980, 128984, 128988, 128992, 128996,
-    129000, 129004, 129008, 129012, 129016, 129020, 129024, 129028, 129032,
-    129036, 129040, 129044, 129048, 129052, 129056, 129060, 129064, 129068,
-    129072, 129076, 129080, 129084, 129088, 129092, 129096, 129100, 129104,
-    129108, 129112, 129116, 129120, 129124, 129128, 129132, 129136, 129140,
-    129144, 129148, 129152, 129156, 129160, 129164, 129168, 129172, 129176,
-    129180, 129184, 129188, 129192, 129196, 129200, 129204, 129208, 129212,
-    129216, 129220, 129224, 129228, 129232, 129236, 129240, 129244, 129248,
-    129252, 129256, 129260, 129264, 129268, 129272, 129276, 129280, 129284,
-    129288, 129292, 129296, 129300, 129304, 129308, 129312, 129316, 129320,
-    129324, 129328, 129332, 129336, 129340, 129344, 129348, 129352, 129356,
-    129360, 129364, 129368, 129372, 129376, 129380, 129384, 129388, 129392,
-    129396, 129400, 129404, 129408, 129412, 129416, 129420, 129424, 129428,
-    129432, 129436, 129440, 129444, 129448, 129452, 129456, 129460, 129464,
-    129468, 129472, 129476, 129480, 129484, 129488, 129492, 129496, 129500,
-    129504, 129508, 129512, 129516, 129520, 129524, 129528, 129532, 129536,
-    129540, 129544, 129548, 129552, 129556, 129560, 129564, 129568, 129572,
-    129576, 129580, 129584, 129588, 129592, 129596, 129600, 129604, 129608,
-    129612, 129616, 129620, 129624, 129628, 129632, 129636, 129640, 129644,
-    129648, 129652, 129656, 129660, 129664, 129668, 129672, 129676, 129680,
-    129684, 129688, 129692, 129696, 129700, 129704, 129708, 129712, 129716,
-    129720, 129724, 129728, 129732, 129736, 129740, 129744, 129748, 129752,
-    129756, 129760, 129764, 129768, 129772, 129776, 129780, 129784, 129788,
-    129792, 129796, 129800, 129804, 129808, 129812, 129816, 129820, 129824,
-    129828, 129832, 129836, 129840, 129844, 129848, 129852, 129856, 129860,
-    129864, 129868, 129872, 129876, 129880, 129884, 129888, 129892, 129896,
-    129900, 129904, 129908, 129912, 129916, 129920, 129924, 129928, 129932,
-    129936, 129940, 129944, 129948, 129952, 129956, 129960, 129964, 129968,
-    129972, 129976, 129980, 129984, 129988, 129992, 129996, 130000, 130004,
-    130008, 130012, 130016, 130020, 130024, 130028, 130032, 130036, 130040,
-    130044, 130048, 130052, 130056, 130060, 130064, 130068, 130072, 130076,
-    130080, 130084, 130088, 130092, 130096, 130100, 130104, 130108, 130112,
-    130116, 130120, 130124, 130128, 130132, 130136, 130140, 130144, 130148,
-    130152, 130156, 130160, 130164, 130168, 130172, 130176, 130180, 130184,
-    130188, 130192, 130196, 130200, 130204, 130208, 130212, 130216, 130220,
-    130224, 130228, 130232, 130236, 130240, 130244, 130248, 130252, 130256,
-    130260, 130264, 130268, 130272, 130276, 130280, 130284, 130288, 130292,
-    130296, 130300, 130304, 130308, 130312, 130316, 130320, 130324, 130328,
-    130332, 130336, 130340, 130344, 130348, 130352, 130356, 130360, 130364,
-    130368, 130372, 130376, 130380, 130384, 130388, 130392, 130396, 130400,
-    130404, 130408, 130412, 130416, 130420, 130424, 130428, 130432, 130436,
-    130440, 130444, 130448, 130452, 130456, 130460, 130464, 130468, 130472,
-    130476, 130480, 130484, 130488, 130492, 130496, 130500, 130504, 130508,
-    130512, 130516, 130520, 130524, 130528, 0, 130532, 130537, 130543,
-    130553, 130563, 130573, 130583, 130589, 130595, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130601, 130605, 130609,
-    130613, 130617, 130621, 130625, 130629, 130633, 130637, 130641, 130645,
-    130649, 130653, 130657, 130661, 130665, 130669, 130673, 130677, 130681,
-    130685, 130689, 130693, 130697, 130701, 130705, 130709, 130713, 130717,
-    130721, 130725, 130729, 130733, 130737, 130741, 130745, 130749, 130753,
-    130757, 130761, 130765, 130769, 130773, 130777, 130781, 130785, 130789,
-    130793, 130797, 130801, 130805, 130809, 130813, 130817, 130821, 130825,
-    130829, 130833, 130837, 130841, 130845, 130849, 130853, 130857, 130861,
-    130865, 130869, 130873, 130877, 130881, 130885, 130889, 130893, 130897,
-    130901, 130905, 130909, 130913, 130917, 130921, 130925, 130929, 130933,
-    130937, 130941, 130945, 130949, 130953, 130957, 130961, 130965, 130969,
-    130973, 130977, 130981, 130985, 130989, 130993, 130997, 131001, 131005,
-    131009, 131013, 131017, 131021, 131025, 131029, 131033, 131037, 131041,
-    131045, 131049, 131053, 131057, 131061, 131065, 131069, 131073, 131077,
-    131081, 131085, 131089, 131093, 131097, 131101, 131105, 131109, 131113,
-    131117, 131121, 131125, 131129, 131133, 131137, 131141, 131145, 131149,
-    131153, 131157, 131161, 131165, 131169, 131173, 131177, 131181, 131185,
-    131189, 131193, 131197, 131201, 131205, 131209, 131213, 131217, 131221,
-    131225, 131229, 131233, 131237, 131241, 131245, 131249, 131253, 131257,
-    131261, 131265, 131269, 131273, 131277, 131281, 131285, 131289, 131293,
-    131297, 131301, 131305, 131309, 131313, 131317, 131321, 131325, 131329,
-    131333, 131337, 131341, 131345, 131349, 131353, 131357, 131361, 131365,
-    131369, 131373, 131377, 131381, 131385, 131389, 131393, 131397, 131401,
-    131405, 131409, 131413, 131417, 131421, 131425, 131429, 131433, 131437,
-    131441, 131445, 131449, 131453, 131457, 131461, 131465, 131469, 131473,
-    131477, 131481, 131485, 131489, 131493, 131497, 131501, 131505, 131509,
-    131513, 131517, 131521, 131525, 131529, 131533, 131537, 131541, 131545,
-    131549, 131553, 131557, 131561, 131565, 131569, 131573, 131577, 131581,
-    131585, 131589, 131593, 131597, 131601, 131605, 131609, 131613, 131617,
-    131621, 131625, 131629, 131633, 131637, 131641, 131645, 131649, 131653,
-    131657, 131661, 131665, 131669, 131673, 131677, 131681, 131685, 131689,
-    131693, 131697, 131701, 131705, 131709, 131713, 131717, 131721, 131725,
-    131729, 131733, 131737, 131741, 131745, 131749, 131753, 131757, 131761,
-    131765, 131769, 131773, 131777, 131781, 131785, 131789, 131793, 131797,
-    131801, 131805, 131809, 131813, 131817, 131821, 131825, 131829, 131833,
-    131837, 131841, 131845, 131849, 131853, 131857, 131861, 131865, 131869,
-    131873, 131877, 131881, 131885, 131889, 131893, 131897, 131901, 131905,
-    131909, 131913, 131917, 131921, 131925, 131929, 131933, 131937, 131941,
-    131945, 131949, 131953, 131957, 131961, 131965, 131969, 131973, 131977,
-    131981, 131985, 131989, 131993, 131997, 132001, 132005, 132009, 132013,
-    132017, 132021, 132025, 132029, 132033, 132037, 132041, 132045, 132049,
-    132053, 132057, 132061, 132065, 132069, 132073, 132077, 132081, 132085,
-    132089, 132093, 132097, 132101, 132105, 132109, 132113, 132117, 132121,
-    132125, 132129, 132133, 132137, 132141, 132145, 132149, 132153, 132157,
-    132161, 132165, 132169, 132173, 132177, 132181, 132185, 132189, 132193,
-    132197, 132201, 132205, 132209, 132213, 132217, 132221, 132225, 132229,
-    132233, 132237, 132241, 132245, 132249, 132253, 132257, 132261, 132265,
-    132269, 132273, 132277, 132281, 132285, 132289, 132293, 132297, 132301,
-    132305, 132309, 132313, 132317, 132321, 132325, 132329, 132333, 132343,
-    132347, 132351, 132355, 132359, 132363, 132367, 132371, 132375, 132379,
-    132383, 132387, 132392, 132396, 132400, 132404, 132408, 132412, 132416,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132012, 132016, 132020,
+    132024, 132028, 132032, 132036, 132040, 132044, 132048, 132052, 132056,
+    132060, 132064, 132068, 132072, 132076, 132080, 132084, 132088, 132092,
+    132096, 132100, 132104, 132108, 132112, 132116, 132120, 132124, 132128,
+    132132, 132136, 132140, 132144, 132148, 132152, 132156, 132160, 132164,
+    132168, 132172, 132176, 132180, 132184, 132188, 132192, 132196, 132200,
+    132204, 132208, 132212, 132216, 132220, 132224, 132228, 132232, 132236,
+    132240, 132244, 132248, 132252, 132256, 132260, 132264, 132268, 132272,
+    132276, 132280, 132284, 132288, 132292, 132296, 132300, 132304, 132308,
+    132312, 132316, 132320, 132324, 132328, 132332, 132336, 132340, 132344,
+    132348, 132352, 132356, 132360, 132364, 132368, 132372, 132376, 132380,
+    132384, 132388, 132392, 132396, 132400, 132404, 132408, 132412, 132416,
     132420, 132424, 132428, 132432, 132436, 132440, 132444, 132448, 132452,
-    132456, 132465, 132474, 132478, 132482, 132486, 132490, 132494, 132498,
-    132502, 132506, 132510, 132514, 132518, 132522, 132526, 132530, 132534,
-    132538, 132542, 132546, 132550, 132554, 132558, 132562, 132566, 132570,
-    132574, 132578, 132582, 132586, 132590, 132594, 132598, 132602, 132606,
-    132610, 132614, 132618, 132622, 132626, 132630, 132634, 132638, 132642,
-    132646, 132650, 132654, 132658, 132662, 132666, 132670, 132674, 132678,
-    132682, 132686, 132690, 132694, 132698, 132702, 132706, 132710, 132714,
-    132718, 132722, 132726, 132730, 132734, 132738, 132742, 132746, 132750,
-    132754, 132758, 132762, 132766, 132770, 132774, 132778, 132782, 132786,
-    132790, 132794, 132798, 132802, 132806, 132810, 132814, 132818, 132822,
-    132826, 132830, 132834, 132838, 132842, 132846, 132850, 132854, 132858,
-    132862, 132866, 132870, 132874, 132878, 132882, 132886, 132890, 132894,
-    132898, 132902, 132906, 132910, 132914, 132918, 132922, 132926, 132930,
-    132934, 132938, 132942, 132946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132950, 132958,
-    132966, 132976, 132986, 132994, 133000, 133008, 133016, 133026, 133038,
-    133050, 133056, 133064, 133070, 133076, 133082, 133088, 133094, 133100,
-    133106, 133112, 133118, 133124, 133130, 133138, 133146, 133152, 133158,
-    133164, 133170, 133178, 133186, 133195, 133201, 133209, 133215, 133221,
-    133227, 133233, 133239, 133247, 133255, 133261, 133267, 133273, 133279,
-    133285, 133291, 133297, 133303, 133309, 133315, 133321, 133327, 133333,
-    133339, 133345, 133351, 133357, 133363, 133369, 133377, 133383, 133389,
-    133399, 133407, 133413, 133419, 133425, 133431, 133437, 133443, 133449,
-    133455, 133461, 133467, 133473, 133479, 133485, 133491, 133497, 133503,
-    133509, 133515, 133521, 133527, 133533, 133539, 133547, 133553, 133561,
-    133569, 133577, 133583, 133589, 133595, 133601, 133607, 133615, 133625,
-    133633, 133641, 133647, 133653, 133661, 133669, 133675, 133683, 133691,
-    133699, 133705, 133711, 133717, 133723, 133729, 133735, 133743, 133751,
-    133757, 133763, 133769, 133775, 133781, 133789, 133795, 133801, 133807,
-    133813, 133819, 133825, 133833, 133839, 133845, 133851, 133857, 133865,
-    133873, 133879, 133885, 133891, 133896, 133902, 133908, 133915, 133920,
-    133925, 133930, 133935, 133940, 133945, 133950, 133955, 133960, 133969,
-    133976, 133981, 133986, 133991, 133998, 134003, 134008, 134013, 134020,
-    134025, 134030, 134035, 134040, 134045, 134050, 134055, 134060, 134065,
-    134070, 134075, 134082, 134087, 134094, 134099, 134104, 134111, 134116,
-    134121, 134126, 134131, 134136, 134141, 134146, 134151, 134156, 134161,
-    134166, 134171, 134176, 134181, 134186, 134191, 134196, 134201, 134206,
-    134213, 134218, 134223, 134228, 134233, 134238, 134243, 134248, 134253,
-    134258, 134263, 134268, 134273, 134278, 134285, 134290, 134295, 134302,
-    134307, 134312, 134317, 134322, 134327, 134332, 134337, 134342, 134347,
-    134352, 134359, 134364, 134369, 134374, 134379, 134384, 134391, 134398,
-    134403, 134408, 134413, 134418, 134423, 134428, 134433, 134438, 134443,
-    134448, 134453, 134458, 134463, 134468, 134473, 134478, 134483, 134488,
-    134493, 134498, 134503, 134508, 134513, 134518, 134523, 134528, 134533,
-    134538, 134543, 134548, 134553, 134558, 134563, 134568, 134573, 134578,
-    134585, 134590, 134595, 134600, 134605, 134610, 134615, 134620, 134625,
-    134630, 134635, 134640, 134645, 134650, 134655, 134660, 134665, 134670,
-    134675, 134680, 134685, 134690, 134695, 134700, 134705, 134710, 134715,
-    134720, 134725, 134730, 134735, 134740, 134745, 134750, 134755, 134760,
-    134765, 134770, 134775, 134780, 134785, 134790, 134795, 134800, 134805,
-    134810, 134815, 134820, 134825, 134830, 134835, 134840, 134845, 134850,
-    134855, 134860, 134865, 134870, 134875, 134882, 134887, 134892, 134897,
-    134902, 134907, 134912, 134917, 134922, 134927, 134932, 134937, 134942,
-    134947, 134952, 134957, 134962, 134967, 134972, 134977, 134982, 134987,
-    134994, 134999, 135004, 135010, 135015, 135020, 135025, 135030, 135035,
-    135040, 135045, 135050, 135055, 135060, 135065, 135070, 135075, 135080,
-    135085, 135090, 135095, 135100, 135105, 135110, 135115, 135120, 135125,
-    135130, 135135, 135140, 135145, 135150, 135155, 135160, 135165, 135170,
-    135175, 135180, 135185, 135190, 135195, 135200, 135205, 135210, 135215,
-    135220, 135225, 135232, 135237, 135242, 135249, 135256, 135261, 135266,
-    135271, 135276, 135281, 135286, 135291, 135296, 135301, 135306, 135311,
-    135316, 135321, 135326, 135331, 135336, 135341, 135346, 135351, 135356,
-    135361, 135366, 135371, 135376, 135381, 135388, 135393, 135398, 135403,
-    135408, 135413, 135418, 135423, 135428, 135433, 135438, 135443, 135448,
-    135453, 135458, 135463, 135468, 135473, 135478, 135485, 135490, 135495,
-    135500, 135505, 135510, 135515, 135520, 135526, 135531, 135536, 135541,
-    135546, 135551, 135556, 135561, 135566, 135573, 135580, 135585, 135590,
-    135594, 135599, 135603, 135607, 135612, 135619, 135624, 135629, 135638,
-    135643, 135648, 135653, 135658, 135665, 135672, 135677, 135682, 135687,
-    135692, 135699, 135704, 135709, 135714, 135719, 135724, 135729, 135734,
-    135739, 135744, 135749, 135754, 135759, 135766, 135770, 135775, 135780,
-    135785, 135790, 135794, 135799, 135804, 135809, 135814, 135819, 135824,
-    135829, 135834, 135839, 135845, 135851, 135857, 135863, 135869, 135874,
-    135880, 135886, 135892, 135898, 135904, 135910, 135916, 135922, 135928,
-    135934, 135940, 135946, 135952, 135958, 135964, 135970, 135976, 135982,
-    135987, 135993, 135999, 136005, 136011, 136017, 136023, 136029, 136035,
-    136041, 136047, 136053, 136059, 136065, 136071, 136077, 136083, 136089,
-    136095, 136101, 136107, 136112, 136118, 136124, 136130, 136136, 136142,
-    0, 0, 0, 0, 0, 0, 0, 136148, 136152, 136157, 136162, 136167, 136172,
-    136177, 136181, 136186, 136191, 136196, 136201, 136206, 136211, 136216,
-    136221, 136226, 136230, 136235, 136239, 136244, 136249, 136254, 136259,
-    136264, 136268, 136273, 136278, 136282, 136287, 136292, 0, 136297,
-    136302, 136306, 136310, 136314, 136318, 136322, 136326, 136330, 136334,
-    0, 0, 0, 0, 136338, 136342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 136347, 136354, 136360, 136367, 136374,
-    136381, 136388, 136395, 136402, 136409, 136416, 136423, 136430, 136437,
-    136444, 136451, 136458, 136465, 136471, 136478, 136485, 136492, 136498,
-    136505, 136511, 136517, 136524, 136530, 136537, 136543, 0, 0, 136549,
-    136557, 136565, 136574, 136583, 136592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    136600, 136605, 136610, 136615, 136620, 136625, 136630, 136635, 136640,
-    136645, 136650, 136655, 136660, 136665, 136670, 136675, 136680, 136685,
-    136690, 136695, 136700, 136705, 136710, 136715, 136720, 136725, 136730,
-    136735, 136740, 136745, 136750, 136755, 136760, 136765, 136770, 136775,
-    136780, 136785, 136790, 136795, 136800, 136805, 136810, 136815, 136820,
-    136825, 136830, 136835, 136840, 136847, 136854, 136861, 136868, 136875,
-    136882, 136889, 136896, 136905, 136912, 136919, 136926, 136933, 136940,
-    136947, 136954, 136961, 136968, 136975, 136982, 136987, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 136996, 137001, 137005, 137009, 137013, 137017, 137021,
-    137025, 137029, 137033, 0, 137037, 137042, 137047, 137054, 137059,
-    137066, 137073, 0, 137078, 137085, 137090, 137095, 137102, 137109,
-    137114, 137119, 137124, 137129, 137134, 137141, 137148, 137153, 137158,
-    137163, 137176, 137185, 137192, 137201, 137210, 0, 0, 0, 0, 0, 137219,
-    137226, 137233, 137240, 137247, 137254, 137261, 137268, 137275, 137282,
-    137289, 137296, 137303, 137310, 137317, 137324, 137331, 137338, 137345,
+    132456, 132460, 132464, 132468, 132472, 132476, 132480, 132484, 132488,
+    132492, 132496, 132500, 132504, 132508, 132512, 132516, 132520, 132524,
+    132528, 132532, 132536, 132540, 132544, 132548, 132552, 132556, 132560,
+    132564, 132568, 132572, 132576, 132580, 132584, 132588, 132592, 132596,
+    132600, 132604, 132608, 132612, 132616, 132620, 132624, 132628, 132632,
+    132636, 132640, 132644, 132648, 132652, 132656, 132660, 132664, 132668,
+    132672, 132676, 132680, 132684, 132688, 132692, 132696, 132700, 132704,
+    132708, 132712, 132716, 132720, 132724, 132728, 132732, 132736, 132740,
+    132744, 132748, 132752, 132756, 132760, 132764, 132768, 132772, 132776,
+    132780, 132784, 132788, 132792, 132796, 132800, 132804, 132808, 132812,
+    132816, 132820, 132824, 132828, 132832, 132836, 132840, 132844, 132848,
+    132852, 132856, 132860, 132864, 132868, 132872, 132876, 132880, 132884,
+    132888, 132892, 132896, 132900, 132904, 132908, 132912, 132916, 132920,
+    132924, 132928, 132932, 132936, 132940, 132944, 132948, 132952, 132956,
+    132960, 132964, 132968, 132972, 132976, 132980, 132984, 132988, 132992,
+    132996, 133000, 133004, 133008, 133012, 133016, 133020, 133024, 133028,
+    133032, 133036, 133040, 133044, 133048, 133052, 133056, 133060, 133064,
+    133068, 133072, 133076, 133080, 133084, 133088, 133092, 133096, 133100,
+    133104, 133108, 133112, 133116, 133120, 133124, 133128, 133132, 133136,
+    133140, 133144, 133148, 133152, 133156, 133160, 133164, 133168, 133172,
+    133176, 133180, 133184, 133188, 133192, 133196, 133200, 133204, 133208,
+    133212, 133216, 133220, 133224, 133228, 133232, 133236, 133240, 133244,
+    133248, 133252, 133256, 133260, 133264, 133268, 133272, 133276, 133280,
+    133284, 133288, 133292, 133296, 133300, 133304, 133308, 133312, 133316,
+    133320, 133324, 133328, 133332, 133336, 133340, 133344, 133348, 133352,
+    133356, 133360, 133364, 133368, 133372, 133376, 133380, 133384, 133388,
+    133392, 133396, 133400, 133404, 133408, 133412, 133416, 133420, 133424,
+    133428, 133432, 133436, 133440, 133444, 133448, 133452, 133456, 133460,
+    133464, 133468, 133472, 133476, 133480, 133484, 133488, 133492, 133496,
+    133500, 133504, 133508, 133512, 133516, 133520, 133524, 133528, 133532,
+    133536, 133540, 133544, 133548, 133552, 133556, 133560, 133564, 133568,
+    133572, 133576, 133580, 133584, 133588, 133592, 133596, 133600, 133604,
+    133608, 133612, 133616, 133620, 133624, 133628, 133632, 133636, 133640,
+    133644, 133648, 133652, 133656, 133660, 133664, 133668, 133672, 133676,
+    133680, 133684, 133688, 133692, 133696, 133700, 133704, 133708, 133712,
+    133716, 133720, 133724, 133728, 133732, 133736, 133740, 133744, 133754,
+    133758, 133762, 133766, 133770, 133774, 133778, 133782, 133786, 133790,
+    133794, 133798, 133803, 133807, 133811, 133815, 133819, 133823, 133827,
+    133831, 133835, 133839, 133843, 133847, 133851, 133855, 133859, 133863,
+    133867, 133876, 133885, 133889, 133893, 133897, 133901, 133905, 133909,
+    133913, 133917, 133921, 133925, 133929, 133933, 133937, 133941, 133945,
+    133949, 133953, 133957, 133961, 133965, 133969, 133973, 133977, 133981,
+    133985, 133989, 133993, 133997, 134001, 134005, 134009, 134013, 134017,
+    134021, 134025, 134029, 134033, 134037, 134041, 134045, 134049, 134053,
+    134057, 134061, 134065, 134069, 134073, 134077, 134081, 134085, 134089,
+    134093, 134097, 134101, 134105, 134109, 134113, 134117, 134121, 134125,
+    134129, 134133, 134137, 134141, 134145, 134149, 134153, 134157, 134161,
+    134165, 134169, 134173, 134177, 134181, 134185, 134189, 134193, 134197,
+    134201, 134205, 134209, 134213, 134217, 134221, 134225, 134229, 134233,
+    134237, 134241, 134245, 134249, 134253, 134257, 134261, 134265, 134269,
+    134273, 134277, 134281, 134285, 134289, 134293, 134297, 134301, 134305,
+    134309, 134313, 134317, 134321, 134325, 134329, 134333, 134337, 134341,
+    134345, 134349, 134353, 134357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -22412,1110 +22979,1342 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 137352, 137358, 137364, 137370, 137376, 137382,
-    137388, 137394, 137400, 137406, 137412, 137418, 137423, 137429, 137434,
-    137440, 137445, 137451, 137457, 137462, 137468, 137473, 137479, 137485,
-    137491, 137497, 137503, 137509, 137515, 137520, 137525, 137531, 137537,
-    137543, 137549, 137555, 137561, 137567, 137573, 137579, 137585, 137591,
-    137597, 137603, 137608, 137614, 137619, 137625, 137630, 137636, 137642,
-    137647, 137653, 137658, 137664, 137670, 137676, 137682, 137688, 137694,
-    137700, 137705, 137710, 137716, 137722, 137727, 137731, 137735, 137739,
-    137743, 137747, 137751, 137755, 137759, 137763, 137768, 137773, 137778,
-    137783, 137788, 137793, 137798, 137803, 137808, 137813, 137820, 137827,
-    137834, 137838, 137844, 137849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 134361, 134369, 134377, 134387, 134397, 134405, 134411, 134419,
+    134427, 134437, 134449, 134461, 134467, 134475, 134481, 134487, 134493,
+    134499, 134505, 134511, 134517, 134523, 134529, 134535, 134541, 134549,
+    134557, 134563, 134569, 134575, 134581, 134589, 134597, 134606, 134612,
+    134620, 134626, 134632, 134638, 134644, 134650, 134658, 134666, 134672,
+    134678, 134684, 134690, 134696, 134702, 134708, 134714, 134720, 134726,
+    134732, 134738, 134744, 134750, 134756, 134762, 134768, 134774, 134780,
+    134788, 134794, 134800, 134810, 134818, 134824, 134830, 134836, 134842,
+    134848, 134854, 134860, 134866, 134872, 134878, 134884, 134890, 134896,
+    134902, 134908, 134914, 134920, 134926, 134932, 134938, 134944, 134950,
+    134958, 134964, 134972, 134980, 134988, 134994, 135000, 135006, 135012,
+    135018, 135026, 135036, 135044, 135052, 135058, 135064, 135072, 135080,
+    135086, 135094, 135102, 135110, 135116, 135122, 135128, 135134, 135140,
+    135146, 135154, 135162, 135168, 135174, 135180, 135186, 135192, 135200,
+    135206, 135212, 135218, 135224, 135230, 135236, 135244, 135250, 135256,
+    135262, 135268, 135276, 135284, 135290, 135296, 135302, 135307, 135313,
+    135319, 135327, 135333, 135339, 135345, 135351, 135357, 135363, 135369,
+    135375, 135381, 135391, 135399, 135405, 135411, 135417, 135425, 135431,
+    135437, 135443, 135451, 135457, 135463, 135469, 135475, 135481, 135487,
+    135493, 135499, 135505, 135511, 135517, 135525, 135531, 135539, 135545,
+    135551, 135559, 135565, 135571, 135577, 135583, 135589, 135595, 135601,
+    135607, 135613, 135619, 135625, 135631, 135637, 135643, 135649, 135655,
+    135661, 135667, 135673, 135681, 135687, 135693, 135699, 135705, 135711,
+    135717, 135723, 135729, 135735, 135741, 135747, 135753, 135759, 135767,
+    135773, 135779, 135787, 135793, 135799, 135805, 135811, 135817, 135823,
+    135829, 135835, 135841, 135847, 135855, 135861, 135867, 135873, 135879,
+    135885, 135893, 135901, 135907, 135913, 135919, 135925, 135931, 135937,
+    135942, 135947, 135952, 135957, 135962, 135967, 135972, 135977, 135982,
+    135987, 135992, 135997, 136002, 136007, 136012, 136017, 136022, 136027,
+    136032, 136037, 136042, 136047, 136052, 136057, 136062, 136067, 136072,
+    136077, 136082, 136087, 136094, 136099, 136104, 136109, 136114, 136119,
+    136124, 136129, 136134, 136139, 136144, 136149, 136154, 136159, 136164,
+    136169, 136174, 136179, 136184, 136189, 136194, 136199, 136204, 136209,
+    136214, 136219, 136224, 136229, 136234, 136239, 136244, 136249, 136254,
+    136259, 136264, 136269, 136274, 136279, 136284, 136289, 136294, 136299,
+    136304, 136309, 136314, 136319, 136324, 136329, 136334, 136339, 136344,
+    136349, 136354, 136359, 136364, 136369, 136374, 136379, 136384, 136391,
+    136396, 136401, 136406, 136411, 136416, 136421, 136426, 136431, 136436,
+    136441, 136446, 136451, 136456, 136461, 136466, 136471, 136476, 136481,
+    136486, 136491, 136496, 136503, 136508, 136513, 136519, 136524, 136529,
+    136534, 136539, 136544, 136549, 136554, 136559, 136564, 136569, 136574,
+    136579, 136584, 136589, 136594, 136599, 136604, 136609, 136614, 136619,
+    136624, 136629, 136634, 136639, 136644, 136649, 136654, 136659, 136664,
+    136669, 136674, 136679, 136684, 136689, 136694, 136699, 136704, 136709,
+    136714, 136719, 136724, 136729, 136734, 136741, 136746, 136751, 136758,
+    136765, 136770, 136775, 136780, 136785, 136790, 136795, 136800, 136805,
+    136810, 136815, 136820, 136825, 136830, 136835, 136840, 136845, 136850,
+    136855, 136860, 136865, 136870, 136875, 136880, 136885, 136890, 136897,
+    136902, 136907, 136912, 136917, 136922, 136927, 136932, 136937, 136942,
+    136947, 136952, 136957, 136962, 136967, 136972, 136977, 136982, 136987,
+    136994, 136999, 137004, 137009, 137014, 137019, 137024, 137029, 137035,
+    137040, 137045, 137050, 137055, 137060, 137065, 137070, 137075, 137082,
+    137089, 137094, 137099, 137103, 137108, 137112, 137116, 137121, 137128,
+    137133, 137138, 137147, 137152, 137157, 137162, 137167, 137174, 137181,
+    137186, 137191, 137196, 137201, 137208, 137213, 137218, 137223, 137228,
+    137233, 137238, 137243, 137248, 137253, 137258, 137263, 137268, 137275,
+    137279, 137284, 137289, 137294, 137299, 137303, 137308, 137313, 137318,
+    137323, 137328, 137333, 137338, 137343, 137348, 137354, 137360, 137366,
+    137372, 137378, 137383, 137389, 137395, 137401, 137407, 137413, 137419,
+    137425, 137431, 137437, 137443, 137449, 137455, 137461, 137467, 137473,
+    137479, 137485, 137491, 137496, 137502, 137508, 137514, 137520, 137526,
+    137532, 137538, 137544, 137550, 137556, 137562, 137568, 137574, 137580,
+    137586, 137592, 137598, 137604, 137610, 137616, 137621, 137627, 137633,
+    137639, 137645, 137651, 0, 0, 0, 0, 0, 0, 0, 137657, 137661, 137666,
+    137671, 137676, 137681, 137686, 137690, 137695, 137700, 137705, 137710,
+    137715, 137720, 137725, 137730, 137735, 137739, 137744, 137748, 137753,
+    137758, 137763, 137768, 137773, 137777, 137782, 137787, 137791, 137796,
+    137801, 0, 137806, 137811, 137815, 137819, 137823, 137827, 137831,
+    137835, 137839, 137843, 0, 0, 0, 0, 137847, 137851, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137855, 137858, 137862,
-    137866, 137870, 137873, 137877, 137882, 137886, 137890, 137894, 137897,
-    137901, 137906, 137910, 137914, 137918, 137921, 137925, 137930, 137935,
-    137939, 137943, 137946, 137950, 137954, 137958, 137962, 137966, 137970,
-    137974, 137977, 137981, 137985, 137989, 137993, 137997, 138001, 138007,
-    138010, 138014, 138018, 138022, 138026, 138030, 138034, 138038, 138042,
-    138046, 138051, 138056, 138062, 138066, 138070, 138074, 138078, 138082,
-    138086, 138091, 138094, 138098, 138102, 138106, 138110, 138116, 138120,
-    138124, 138128, 138132, 138136, 138140, 138144, 138148, 138152, 138156,
-    0, 0, 0, 0, 138160, 138165, 138169, 138173, 138179, 138185, 138189,
-    138194, 138199, 138204, 138209, 138213, 138218, 138223, 138228, 138232,
-    138237, 138242, 138247, 138251, 138256, 138261, 138266, 138271, 138276,
-    138281, 138286, 138291, 138295, 138300, 138305, 138310, 138315, 138320,
-    138325, 138330, 138335, 138340, 138345, 138350, 138357, 138362, 138369,
-    138374, 138379, 138384, 138389, 138394, 138399, 138404, 138409, 138414,
-    138419, 138424, 138429, 138434, 138439, 0, 0, 0, 0, 0, 0, 0, 138444,
-    138448, 138454, 138457, 138460, 138464, 138468, 138472, 138476, 138480,
-    138484, 138488, 138494, 138500, 138506, 138512, 138518, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138524, 138528, 138532, 138538, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    138544, 138547, 138550, 138553, 138556, 138559, 138562, 138565, 138568,
-    138571, 138574, 138577, 138580, 138583, 138586, 138589, 138592, 138595,
-    138598, 138601, 138604, 138607, 138610, 138613, 138616, 138619, 138622,
-    138625, 138628, 138631, 138634, 138637, 138640, 138643, 138646, 138649,
-    138652, 138655, 138658, 138661, 138664, 138667, 138670, 138673, 138676,
-    138679, 138682, 138685, 138688, 138691, 138694, 138697, 138700, 138703,
-    138706, 138709, 138712, 138715, 138718, 138721, 138724, 138727, 138730,
-    138733, 138736, 138739, 138742, 138745, 138748, 138751, 138754, 138757,
-    138760, 138763, 138766, 138769, 138772, 138775, 138778, 138781, 138784,
-    138787, 138790, 138793, 138796, 138799, 138802, 138805, 138808, 138811,
-    138814, 138817, 138820, 138823, 138826, 138829, 138832, 138835, 138838,
-    138841, 138844, 138847, 138850, 138853, 138856, 138859, 138862, 138865,
-    138868, 138871, 138874, 138877, 138880, 138883, 138886, 138889, 138892,
-    138895, 138898, 138901, 138904, 138907, 138910, 138913, 138916, 138919,
-    138922, 138925, 138928, 138931, 138934, 138937, 138940, 138943, 138946,
-    138949, 138952, 138955, 138958, 138961, 138964, 138967, 138970, 138973,
-    138976, 138979, 138982, 138985, 138988, 138991, 138994, 138997, 139000,
-    139003, 139006, 139009, 139012, 139015, 139018, 139021, 139024, 139027,
-    139030, 139033, 139036, 139039, 139042, 139045, 139048, 139051, 139054,
-    139057, 139060, 139063, 139066, 139069, 139072, 139075, 139078, 139081,
-    139084, 139087, 139090, 139093, 139096, 139099, 139102, 139105, 139108,
-    139111, 139114, 139117, 139120, 139123, 139126, 139129, 139132, 139135,
-    139138, 139141, 139144, 139147, 139150, 139153, 139156, 139159, 139162,
-    139165, 139168, 139171, 139174, 139177, 139180, 139183, 139186, 139189,
-    139192, 139195, 139198, 139201, 139204, 139207, 139210, 139213, 139216,
-    139219, 139222, 139225, 139228, 139231, 139234, 139237, 139240, 139243,
-    139246, 139249, 139252, 139255, 139258, 139261, 139264, 139267, 139270,
-    139273, 139276, 139279, 139282, 139285, 139288, 139291, 139294, 139297,
-    139300, 139303, 139306, 139309, 139312, 139315, 139318, 139321, 139324,
-    139327, 139330, 139333, 139336, 139339, 139342, 139345, 139348, 139351,
-    139354, 139357, 139360, 139363, 139366, 139369, 139372, 139375, 139378,
-    139381, 139384, 139387, 139390, 139393, 139396, 139399, 139402, 139405,
-    139408, 139411, 139414, 139417, 139420, 139423, 139426, 139429, 139432,
-    139435, 139438, 139441, 139444, 139447, 139450, 139453, 139456, 139459,
-    139462, 139465, 139468, 139471, 139474, 139477, 139480, 139483, 139486,
-    139489, 139492, 139495, 139498, 139501, 139504, 139507, 139510, 139513,
-    139516, 139519, 139522, 139525, 139528, 139531, 139534, 139537, 139540,
-    139543, 139546, 139549, 139552, 139555, 139558, 139561, 139564, 139567,
-    139570, 139573, 139576, 139579, 139582, 139585, 139588, 139591, 139594,
-    139597, 139600, 139603, 139606, 139609, 139612, 139615, 139618, 139621,
-    139624, 139627, 139630, 139633, 139636, 139639, 139642, 139645, 139648,
-    139651, 139654, 139657, 139660, 139663, 139666, 139669, 139672, 139675,
-    139678, 139681, 139684, 139687, 139690, 139693, 139696, 139699, 139702,
-    139705, 139708, 139711, 139714, 139717, 139720, 139723, 139726, 139729,
-    139732, 139735, 139738, 139741, 139744, 139747, 139750, 139753, 139756,
-    139759, 139762, 139765, 139768, 139771, 139774, 139777, 139780, 139783,
-    139786, 139789, 139792, 139795, 139798, 139801, 139804, 139807, 139810,
-    139813, 139816, 139819, 139822, 139825, 139828, 139831, 139834, 139837,
-    139840, 139843, 139846, 139849, 139852, 139855, 139858, 139861, 139864,
-    139867, 139870, 139873, 139876, 139879, 139882, 139885, 139888, 139891,
-    139894, 139897, 139900, 139903, 139906, 139909, 139912, 139915, 139918,
-    139921, 139924, 139927, 139930, 139933, 139936, 139939, 139942, 139945,
-    139948, 139951, 139954, 139957, 139960, 139963, 139966, 139969, 139972,
-    139975, 139978, 139981, 139984, 139987, 139990, 139993, 139996, 139999,
-    140002, 140005, 140008, 140011, 140014, 140017, 140020, 140023, 140026,
-    140029, 140032, 140035, 140038, 140041, 140044, 140047, 140050, 140053,
-    140056, 140059, 140062, 140065, 140068, 140071, 140074, 140077, 140080,
-    140083, 140086, 140089, 140092, 140095, 140098, 140101, 140104, 140107,
-    140110, 140113, 140116, 140119, 140122, 140125, 140128, 140131, 140134,
-    140137, 140140, 140143, 140146, 140149, 140152, 140155, 140158, 140161,
-    140164, 140167, 140170, 140173, 140176, 140179, 140182, 140185, 140188,
-    140191, 140194, 140197, 140200, 140203, 140206, 140209, 140212, 140215,
-    140218, 140221, 140224, 140227, 140230, 140233, 140236, 140239, 140242,
-    140245, 140248, 140251, 140254, 140257, 140260, 140263, 140266, 140269,
-    140272, 140275, 140278, 140281, 140284, 140287, 140290, 140293, 140296,
-    140299, 140302, 140305, 140308, 140311, 140314, 140317, 140320, 140323,
-    140326, 140329, 140332, 140335, 140338, 140341, 140344, 140347, 140350,
-    140353, 140356, 140359, 140362, 140365, 140368, 140371, 140374, 140377,
-    140380, 140383, 140386, 140389, 140392, 140395, 140398, 140401, 140404,
-    140407, 140410, 140413, 140416, 140419, 140422, 140425, 140428, 140431,
-    140434, 140437, 140440, 140443, 140446, 140449, 140452, 140455, 140458,
-    140461, 140464, 140467, 140470, 140473, 140476, 140479, 140482, 140485,
-    140488, 140491, 140494, 140497, 140500, 140503, 140506, 140509, 140512,
-    140515, 140518, 140521, 140524, 140527, 140530, 140533, 140536, 140539,
-    140542, 140545, 140548, 140551, 140554, 140557, 140560, 140563, 140566,
-    140569, 140572, 140575, 140578, 140581, 140584, 140587, 140590, 140593,
-    140596, 140599, 140602, 140605, 140608, 140611, 140614, 140617, 140620,
-    140623, 140626, 140629, 140632, 140635, 140638, 140641, 140644, 140647,
-    140650, 140653, 140656, 140659, 140662, 140665, 140668, 140671, 140674,
-    140677, 140680, 140683, 140686, 140689, 140692, 140695, 140698, 140701,
-    140704, 140707, 140710, 140713, 140716, 140719, 140722, 140725, 140728,
-    140731, 140734, 140737, 140740, 140743, 140746, 140749, 140752, 140755,
-    140758, 140761, 140764, 140767, 140770, 140773, 140776, 140779, 140782,
-    140785, 140788, 140791, 140794, 140797, 140800, 140803, 140806, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140809, 140814, 140820, 140824, 140828,
-    140832, 140836, 140840, 140844, 140848, 140852, 140856, 140860, 140864,
-    140868, 140872, 140876, 140880, 140884, 140888, 140892, 140896, 140900,
-    140904, 140908, 140912, 140916, 140920, 140924, 140928, 140932, 140936,
-    140940, 140944, 140948, 140952, 140956, 140960, 140964, 140968, 140972,
-    140976, 140980, 140984, 140988, 140992, 140996, 141000, 141004, 141008,
-    141012, 141016, 141020, 141024, 141028, 141032, 141036, 141040, 141044,
-    141048, 141052, 141056, 141060, 141064, 141068, 141072, 141076, 141080,
-    141084, 141088, 141092, 141096, 141100, 141104, 141108, 141112, 141116,
-    141120, 141124, 141128, 141132, 141136, 141140, 141144, 141148, 141152,
-    141156, 141160, 141164, 141168, 141172, 141176, 141180, 141184, 141188,
-    141192, 141196, 141200, 141204, 141208, 141212, 141216, 141220, 141224,
-    141228, 141232, 141236, 141240, 141244, 141248, 141252, 141256, 141260,
-    141264, 141268, 141272, 141276, 141280, 141284, 141288, 141292, 141296,
-    141300, 141304, 141308, 141312, 141316, 141320, 141324, 141328, 141332,
-    141336, 141340, 141344, 141348, 141352, 141356, 141360, 141364, 141368,
-    141372, 141376, 141380, 141384, 141388, 141392, 141396, 141400, 141404,
-    141408, 141412, 141416, 141420, 141424, 141428, 141432, 141436, 141440,
-    141444, 141448, 141452, 141456, 141460, 141464, 141468, 141472, 141476,
-    141480, 141484, 141488, 141492, 141496, 141500, 141504, 141508, 141512,
-    141516, 141520, 141524, 141528, 141532, 141536, 141540, 141544, 141548,
-    141552, 141556, 141560, 141564, 141568, 141572, 141576, 141580, 141584,
-    141588, 141592, 141596, 141600, 141604, 141608, 141612, 141616, 141620,
-    141624, 141628, 141632, 141636, 141640, 141644, 141648, 141652, 141656,
-    141660, 141664, 141668, 141672, 141676, 141680, 141684, 141688, 141692,
-    141696, 141700, 141704, 141708, 141712, 141716, 141720, 141724, 141728,
-    141732, 141736, 141740, 141744, 141748, 141752, 141756, 141760, 141764,
-    141768, 141772, 141776, 141780, 141784, 141788, 141792, 141796, 141800,
-    141804, 141808, 141812, 141816, 141820, 141824, 141828, 141832, 141836,
-    141840, 141844, 141848, 141852, 141856, 141860, 141864, 141868, 141872,
-    141876, 141880, 141884, 141888, 141892, 141896, 141900, 141904, 141908,
-    141912, 141916, 141920, 141924, 141928, 141932, 141936, 141940, 141944,
-    141948, 141952, 141956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 141960, 141965, 141970, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141975, 141980, 141985, 141990, 0, 0, 0, 0,
-    0, 0, 0, 0, 141995, 141998, 142001, 142004, 142007, 142010, 142013,
-    142016, 142019, 142022, 142025, 142028, 142031, 142034, 142037, 142040,
-    142043, 142046, 142049, 142052, 142055, 142058, 142061, 142064, 142067,
-    142070, 142073, 142076, 142079, 142082, 142085, 142088, 142091, 142094,
-    142097, 142100, 142103, 142106, 142109, 142112, 142115, 142118, 142121,
-    142124, 142127, 142130, 142133, 142136, 142139, 142142, 142145, 142148,
-    142151, 142154, 142157, 142160, 142163, 142166, 142169, 142172, 142175,
-    142178, 142181, 142184, 142187, 142190, 142193, 142196, 142199, 142202,
-    142205, 142208, 142211, 142214, 142217, 142220, 142223, 142226, 142229,
-    142232, 142235, 142238, 142241, 142244, 142247, 142250, 142253, 142256,
-    142259, 142262, 142265, 142268, 142271, 142274, 142277, 142280, 142283,
-    142286, 142289, 142292, 142295, 142298, 142301, 142304, 142307, 142310,
-    142313, 142316, 142319, 142322, 142325, 142328, 142331, 142334, 142337,
-    142340, 142343, 142346, 142349, 142352, 142355, 142358, 142361, 142364,
-    142367, 142370, 142373, 142376, 142379, 142382, 142385, 142388, 142391,
-    142394, 142397, 142400, 142403, 142406, 142409, 142412, 142415, 142418,
-    142421, 142424, 142427, 142430, 142433, 142436, 142439, 142442, 142445,
-    142448, 142451, 142454, 142457, 142460, 142463, 142466, 142469, 142472,
-    142475, 142478, 142481, 142484, 142487, 142490, 142493, 142496, 142499,
-    142502, 142505, 142508, 142511, 142514, 142517, 142520, 142523, 142526,
-    142529, 142532, 142535, 142538, 142541, 142544, 142547, 142550, 142553,
-    142556, 142559, 142562, 142565, 142568, 142571, 142574, 142577, 142580,
-    142583, 142586, 142589, 142592, 142595, 142598, 142601, 142604, 142607,
-    142610, 142613, 142616, 142619, 142622, 142625, 142628, 142631, 142634,
-    142637, 142640, 142643, 142646, 142649, 142652, 142655, 142658, 142661,
-    142664, 142667, 142670, 142673, 142676, 142679, 142682, 142685, 142688,
-    142691, 142694, 142697, 142700, 142703, 142706, 142709, 142712, 142715,
-    142718, 142721, 142724, 142727, 142730, 142733, 142736, 142739, 142742,
-    142745, 142748, 142751, 142754, 142757, 142760, 142763, 142766, 142769,
-    142772, 142775, 142778, 142781, 142784, 142787, 142790, 142793, 142796,
-    142799, 142802, 142805, 142808, 142811, 142814, 142817, 142820, 142823,
-    142826, 142829, 142832, 142835, 142838, 142841, 142844, 142847, 142850,
-    142853, 142856, 142859, 142862, 142865, 142868, 142871, 142874, 142877,
-    142880, 142883, 142886, 142889, 142892, 142895, 142898, 142901, 142904,
-    142907, 142910, 142913, 142916, 142919, 142922, 142925, 142928, 142931,
-    142934, 142937, 142940, 142943, 142946, 142949, 142952, 142955, 142958,
-    142961, 142964, 142967, 142970, 142973, 142976, 142979, 142982, 142985,
-    142988, 142991, 142994, 142997, 143000, 143003, 143006, 143009, 143012,
-    143015, 143018, 143021, 143024, 143027, 143030, 143033, 143036, 143039,
-    143042, 143045, 143048, 143051, 143054, 143057, 143060, 143063, 143066,
-    143069, 143072, 143075, 143078, 143081, 143084, 143087, 143090, 143093,
-    143096, 143099, 143102, 143105, 143108, 143111, 143114, 143117, 143120,
-    143123, 143126, 143129, 143132, 143135, 143138, 143141, 143144, 143147,
-    143150, 143153, 143156, 143159, 143162, 143165, 143168, 143171, 143174,
-    143177, 143180, 0, 0, 0, 0, 143183, 143187, 143191, 143195, 143199,
-    143203, 143207, 143210, 143214, 143218, 143222, 143226, 143229, 143235,
-    143241, 143247, 143253, 143259, 143263, 143269, 143273, 143277, 143283,
-    143287, 143291, 143295, 143299, 143303, 143307, 143311, 143317, 143323,
-    143329, 143335, 143342, 143349, 143356, 143367, 143374, 143381, 143387,
-    143393, 143399, 143405, 143413, 143421, 143429, 143437, 143446, 143452,
-    143460, 143466, 143473, 143479, 143486, 143492, 143500, 143504, 143508,
-    143513, 143519, 143525, 143533, 143541, 143547, 143554, 143557, 143563,
-    143567, 143570, 143574, 143577, 143580, 143584, 143589, 143593, 143597,
-    143603, 143608, 143614, 143618, 143622, 143625, 143629, 143633, 143638,
-    143642, 143647, 143651, 143656, 143660, 143664, 143668, 143672, 143676,
-    143680, 143684, 143688, 143693, 143698, 143703, 143708, 143714, 143720,
-    143726, 143732, 143738, 0, 0, 0, 0, 0, 143743, 143751, 143760, 143768,
-    143775, 143783, 143790, 143797, 143806, 143813, 143820, 143828, 143836,
-    0, 0, 0, 143844, 143849, 143856, 143862, 143869, 143875, 143881, 143887,
-    143893, 0, 0, 0, 0, 0, 0, 0, 143899, 143904, 143911, 143917, 143924,
-    143930, 143936, 143942, 143948, 143954, 0, 0, 143959, 143965, 143971,
-    143974, 143983, 143990, 143998, 144005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 144012, 144017, 144022, 144027, 144034,
-    144041, 144048, 144055, 144060, 144065, 144070, 144075, 144082, 144087,
-    144094, 144101, 144106, 144111, 144116, 144123, 144128, 144133, 144140,
-    144147, 144152, 144157, 144162, 144169, 144176, 144183, 144188, 144193,
-    144200, 144207, 144214, 144221, 144226, 144231, 144236, 144243, 144248,
-    144253, 144258, 144265, 144274, 144281, 144286, 144291, 144296, 144301,
-    144306, 144311, 144320, 144327, 144332, 144339, 144346, 144351, 144356,
-    144361, 144368, 144373, 144380, 144387, 144392, 144397, 144402, 144409,
-    144416, 144421, 144426, 144433, 144440, 144447, 144452, 144457, 144462,
-    144467, 144474, 144483, 144492, 144497, 144504, 144513, 144518, 144523,
-    144528, 144533, 144540, 144547, 144554, 144561, 144566, 144571, 144576,
-    144583, 144590, 144597, 144602, 144607, 144614, 144619, 144626, 144631,
-    144638, 144643, 144650, 144657, 144662, 144667, 144672, 144677, 144682,
-    144687, 144692, 144697, 144702, 144709, 144716, 144723, 144730, 144737,
-    144746, 144751, 144756, 144763, 144770, 144775, 144782, 144789, 144796,
-    144803, 144810, 144817, 144822, 144827, 144832, 144837, 144842, 144851,
-    144860, 144869, 144878, 144887, 144896, 144905, 144914, 144919, 144930,
-    144941, 144950, 144955, 144960, 144965, 144970, 144979, 144986, 144993,
-    145000, 145007, 145014, 145021, 145030, 145039, 145050, 145059, 145070,
-    145079, 145086, 145095, 145106, 145115, 145124, 145133, 145142, 145149,
-    145156, 145163, 145172, 145181, 145192, 145201, 145210, 145221, 145226,
-    145231, 145242, 145250, 145259, 145268, 145277, 145288, 145297, 145306,
-    145317, 145328, 145339, 145350, 145361, 145372, 145379, 145386, 145393,
-    145400, 145411, 145420, 145427, 145434, 145441, 145452, 145463, 145474,
-    145485, 145496, 145507, 145518, 145529, 145536, 145543, 145552, 145561,
-    145568, 145575, 145582, 145591, 145600, 145609, 145616, 145625, 145634,
-    145643, 145650, 145657, 145662, 145668, 145675, 145682, 145689, 145696,
-    145703, 145710, 145719, 145728, 145737, 145746, 145753, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 145762, 145768, 145773, 145778, 145785, 145791, 145797,
-    145803, 145809, 145815, 145821, 145827, 145831, 145835, 145841, 145847,
-    145853, 145857, 145862, 145867, 145871, 145875, 145878, 145884, 145890,
-    145896, 145902, 145908, 145914, 145920, 145926, 145932, 145942, 145952,
-    145958, 145964, 145974, 145984, 145990, 0, 0, 145996, 146004, 146009,
-    146014, 146020, 146026, 146032, 146038, 146044, 146050, 146057, 146064,
-    146070, 146076, 146082, 146088, 146094, 146100, 146106, 146112, 146117,
-    146123, 146129, 146135, 146141, 146147, 146156, 146162, 146167, 146175,
-    146182, 146189, 146198, 146207, 146216, 146225, 146234, 146243, 146252,
-    146261, 146271, 146281, 146289, 146297, 146306, 146315, 146321, 146327,
-    146333, 146339, 146347, 146355, 146359, 146365, 146370, 146376, 146382,
-    146388, 146394, 146400, 146409, 146414, 146421, 146426, 146431, 146436,
-    146442, 146448, 146454, 146461, 146466, 146471, 146476, 146481, 146486,
-    146492, 146498, 146504, 146510, 146516, 146522, 146528, 146534, 146539,
-    146544, 146549, 146554, 146559, 146564, 146569, 146574, 146580, 146586,
-    146591, 146596, 146601, 146606, 146611, 146617, 146624, 146628, 146632,
-    146636, 146640, 146644, 146648, 146652, 146656, 146664, 146674, 146678,
-    146682, 146688, 146694, 146700, 146706, 146712, 146718, 146724, 146730,
-    146736, 146742, 146748, 146754, 146760, 146766, 146770, 146774, 146781,
-    146787, 146793, 146799, 146804, 146811, 146816, 146822, 146828, 146834,
-    146840, 146845, 146849, 146855, 146859, 146863, 146867, 146873, 146879,
-    146883, 146889, 146895, 146901, 146907, 146913, 146921, 146929, 146935,
-    146941, 146947, 146953, 146965, 146977, 146991, 147003, 147015, 147029,
-    147043, 147057, 147061, 147069, 147077, 147082, 147086, 147090, 147094,
-    147098, 147102, 147106, 147110, 147116, 147122, 147128, 147134, 147142,
-    147151, 147158, 147165, 147173, 147180, 147192, 147204, 147216, 147228,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    147235, 147242, 147249, 147256, 147263, 147270, 147277, 147284, 147291,
-    147298, 147305, 147312, 147319, 147326, 147333, 147340, 147347, 147354,
-    147361, 147368, 147375, 147382, 147389, 147396, 147403, 147410, 147417,
-    147424, 147431, 147438, 147445, 147452, 147459, 147466, 147473, 147480,
-    147487, 147494, 147501, 147508, 147515, 147522, 147529, 147536, 147543,
-    147550, 147557, 147564, 147571, 147578, 147585, 147592, 147599, 147606,
-    147613, 147620, 147627, 147634, 147641, 147648, 147655, 147662, 147669,
-    147676, 147683, 147690, 147697, 147702, 147707, 147712, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137856, 137863,
+    137869, 137876, 137883, 137890, 137897, 137904, 137911, 137918, 137925,
+    137932, 137939, 137946, 137953, 137960, 137967, 137974, 137980, 137987,
+    137994, 138001, 138007, 138014, 138020, 138026, 138033, 138039, 138046,
+    138052, 0, 0, 138058, 138066, 138074, 138083, 138092, 138101, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 138109, 138114, 138119, 138124, 138129, 138134, 138139,
+    138144, 138149, 138154, 138159, 138164, 138169, 138174, 138179, 138184,
+    138189, 138194, 138199, 138204, 138209, 138214, 138219, 138224, 138229,
+    138234, 138239, 138244, 138249, 138254, 138259, 138264, 138269, 138274,
+    138279, 138284, 138289, 138294, 138299, 138304, 138309, 138314, 138319,
+    138324, 138329, 138334, 138339, 138344, 138349, 138356, 138363, 138370,
+    138377, 138384, 138391, 138398, 138405, 138414, 138421, 138428, 138435,
+    138442, 138449, 138456, 138463, 138470, 138477, 138484, 138491, 138496,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138505, 138510, 138514, 138518, 138522,
+    138526, 138530, 138534, 138538, 138542, 0, 138546, 138551, 138556,
+    138563, 138568, 138575, 138582, 0, 138587, 138594, 138599, 138604,
+    138611, 138618, 138623, 138628, 138633, 138638, 138643, 138650, 138657,
+    138662, 138667, 138672, 138685, 138694, 138701, 138710, 138719, 0, 0, 0,
+    0, 0, 138728, 138735, 138742, 138749, 138756, 138763, 138770, 138777,
+    138784, 138791, 138798, 138805, 138812, 138819, 138826, 138833, 138840,
+    138847, 138854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 147716, 147722, 147727, 147732, 147737, 147742, 147747,
-    147752, 147757, 147762, 147767, 147773, 147779, 147785, 147791, 147797,
-    147803, 147809, 147815, 147821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    147827, 147832, 147839, 147846, 147853, 147860, 147865, 147870, 147877,
-    147882, 147887, 147894, 147899, 147904, 147909, 147916, 147925, 147930,
-    147935, 147940, 147945, 147950, 147955, 147962, 147967, 147972, 147977,
-    147982, 147987, 147992, 147997, 148002, 148007, 148012, 148017, 148022,
-    148028, 148033, 148038, 148043, 148048, 148053, 148058, 148063, 148068,
-    148073, 148082, 148087, 148096, 148101, 148106, 148111, 148116, 148121,
-    148126, 148131, 148140, 148145, 148150, 148155, 148160, 148165, 148172,
-    148177, 148184, 148189, 148194, 148199, 148204, 148209, 148214, 148219,
-    148224, 148229, 148234, 148239, 148244, 148249, 148254, 148259, 148264,
-    148269, 148274, 148279, 148288, 148293, 148298, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 148303, 148311, 148319, 148327, 148335, 148343, 148351, 148359,
-    148367, 148375, 148383, 148391, 148399, 148407, 148415, 148423, 148431,
-    148439, 148447, 148452, 148457, 148462, 148467, 148472, 148476, 0, 0, 0,
-    0, 0, 0, 0, 148480, 148484, 148489, 148494, 148499, 148503, 148508,
-    148513, 148518, 148522, 148527, 148532, 148536, 148541, 148546, 148550,
-    148555, 148560, 148564, 148569, 148574, 148578, 148583, 148588, 148593,
-    148598, 148603, 148607, 148612, 148617, 148622, 148626, 148631, 148636,
-    148641, 148645, 148650, 148655, 148659, 148664, 148669, 148673, 148678,
-    148683, 148687, 148692, 148697, 148701, 148706, 148711, 148716, 148721,
-    148726, 148730, 148735, 148740, 148745, 148749, 148754, 148759, 148764,
-    148768, 148773, 148778, 148782, 148787, 148792, 148796, 148801, 148806,
-    148810, 148815, 148820, 148824, 148829, 148834, 148839, 148844, 148849,
-    148853, 148858, 148863, 148868, 148872, 148877, 0, 148882, 148886,
-    148891, 148896, 148900, 148905, 148910, 148914, 148919, 148924, 148928,
-    148933, 148938, 148942, 148947, 148952, 148957, 148962, 148967, 148972,
-    148978, 148984, 148990, 148995, 149001, 149007, 149013, 149018, 149024,
-    149030, 149035, 149041, 149047, 149052, 149058, 149064, 149069, 149075,
-    149081, 149086, 149092, 149098, 149104, 149110, 149116, 149121, 149127,
-    149133, 149139, 149144, 149150, 149156, 149162, 149167, 149173, 149179,
-    149184, 149190, 149196, 149201, 149207, 149213, 149218, 149224, 149230,
-    149235, 149241, 149247, 149253, 149259, 149265, 0, 149269, 149274, 0, 0,
-    149279, 0, 0, 149284, 149289, 0, 0, 149294, 149299, 149303, 149308, 0,
-    149313, 149318, 149323, 149327, 149332, 149337, 149342, 149347, 149352,
-    149356, 149361, 149366, 0, 149371, 0, 149376, 149381, 149385, 149390,
-    149395, 149399, 149404, 0, 149409, 149414, 149419, 149423, 149428,
-    149433, 149437, 149442, 149447, 149452, 149457, 149462, 149467, 149473,
-    149479, 149485, 149490, 149496, 149502, 149508, 149513, 149519, 149525,
-    149530, 149536, 149542, 149547, 149553, 149559, 149564, 149570, 149576,
-    149581, 149587, 149593, 149599, 149605, 149611, 149616, 149622, 149628,
-    149634, 149639, 149645, 149651, 149657, 149662, 149668, 149674, 149679,
-    149685, 149691, 149696, 149702, 149708, 149713, 149719, 149725, 149730,
-    149736, 149742, 149748, 149754, 149760, 149764, 0, 149769, 149774,
-    149778, 149783, 0, 0, 149788, 149793, 149798, 149802, 149807, 149812,
-    149816, 149821, 0, 149826, 149831, 149836, 149840, 149845, 149850,
-    149855, 0, 149860, 149864, 149869, 149874, 149879, 149883, 149888,
-    149893, 149898, 149902, 149907, 149912, 149916, 149921, 149926, 149930,
-    149935, 149940, 149944, 149949, 149954, 149958, 149963, 149968, 149973,
-    149978, 149983, 149988, 0, 149994, 150000, 150005, 150011, 0, 150017,
-    150022, 150028, 150034, 150039, 0, 150045, 0, 0, 0, 150050, 150056,
-    150062, 150067, 150073, 150079, 150085, 0, 150091, 150096, 150102,
-    150108, 150114, 150119, 150125, 150131, 150137, 150142, 150148, 150154,
-    150159, 150165, 150171, 150176, 150182, 150188, 150193, 150199, 150205,
-    150210, 150216, 150222, 150228, 150234, 150240, 150245, 150251, 150257,
-    150263, 150268, 150274, 150280, 150286, 150291, 150297, 150303, 150308,
-    150314, 150320, 150325, 150331, 150337, 150342, 150348, 150354, 150359,
-    150365, 150371, 150377, 150383, 150389, 150394, 150400, 150406, 150412,
-    150417, 150423, 150429, 150435, 150440, 150446, 150452, 150457, 150463,
-    150469, 150474, 150480, 150486, 150491, 150497, 150503, 150508, 150514,
-    150520, 150526, 150532, 150538, 150542, 150547, 150552, 150557, 150561,
-    150566, 150571, 150576, 150580, 150585, 150590, 150594, 150599, 150604,
-    150608, 150613, 150618, 150622, 150627, 150632, 150636, 150641, 150646,
-    150651, 150656, 150661, 150665, 150670, 150675, 150680, 150684, 150689,
-    150694, 150699, 150703, 150708, 150713, 150717, 150722, 150727, 150731,
-    150736, 150741, 150745, 150750, 150755, 150759, 150764, 150769, 150774,
-    150779, 150784, 150789, 150795, 150801, 150807, 150812, 150818, 150824,
-    150830, 150835, 150841, 150847, 150852, 150858, 150864, 150869, 150875,
-    150881, 150886, 150892, 150898, 150903, 150909, 150915, 150921, 150927,
-    150933, 150938, 150944, 150950, 150956, 150961, 150967, 150973, 150979,
-    150984, 150990, 150996, 151001, 151007, 151013, 151018, 151024, 151030,
-    151035, 151041, 151047, 151052, 151058, 151064, 151070, 151076, 151082,
-    151087, 151093, 151099, 151105, 151110, 151116, 151122, 151128, 151133,
-    151139, 151145, 151150, 151156, 151162, 151167, 151173, 151179, 151184,
-    151190, 151196, 151201, 151207, 151213, 151219, 151225, 151231, 151236,
-    151242, 151248, 151254, 151259, 151265, 151271, 151277, 151282, 151288,
-    151294, 151299, 151305, 151311, 151316, 151322, 151328, 151333, 151339,
-    151345, 151350, 151356, 151362, 151368, 151374, 151380, 151386, 151393,
-    151400, 151407, 151413, 151420, 151427, 151434, 151440, 151447, 151454,
-    151460, 151467, 151474, 151480, 151487, 151494, 151500, 151507, 151514,
-    151520, 151527, 151534, 151541, 151548, 151555, 151561, 151568, 151575,
-    151582, 151588, 151595, 151602, 151609, 151615, 151622, 151629, 151635,
-    151642, 151649, 151655, 151662, 151669, 151675, 151682, 151689, 151695,
-    151702, 151709, 151716, 151723, 151730, 151735, 151741, 151747, 151753,
-    151758, 151764, 151770, 151776, 151781, 151787, 151793, 151798, 151804,
-    151810, 151815, 151821, 151827, 151832, 151838, 151844, 151849, 151855,
-    151861, 151867, 151873, 151879, 151884, 151890, 151896, 151902, 151907,
-    151913, 151919, 151925, 151930, 151936, 151942, 151947, 151953, 151959,
-    151964, 151970, 151976, 151981, 151987, 151993, 151998, 152004, 152010,
-    152016, 152022, 152028, 152034, 0, 0, 152041, 152046, 152051, 152056,
-    152061, 152066, 152071, 152076, 152081, 152086, 152091, 152096, 152101,
-    152106, 152111, 152116, 152121, 152126, 152132, 152137, 152142, 152147,
-    152152, 152157, 152162, 152167, 152171, 152176, 152181, 152186, 152191,
-    152196, 152201, 152206, 152211, 152216, 152221, 152226, 152231, 152236,
-    152241, 152246, 152251, 152256, 152262, 152267, 152272, 152277, 152282,
-    152287, 152292, 152297, 152303, 152308, 152313, 152318, 152323, 152328,
-    152333, 152338, 152343, 152348, 152353, 152358, 152363, 152368, 152373,
-    152378, 152383, 152388, 152393, 152398, 152403, 152408, 152413, 152418,
-    152424, 152429, 152434, 152439, 152444, 152449, 152454, 152459, 152463,
-    152468, 152473, 152478, 152483, 152488, 152493, 152498, 152503, 152508,
-    152513, 152518, 152523, 152528, 152533, 152538, 152543, 152548, 152554,
-    152559, 152564, 152569, 152574, 152579, 152584, 152589, 152595, 152600,
-    152605, 152610, 152615, 152620, 152625, 152631, 152637, 152643, 152649,
-    152655, 152661, 152667, 152673, 152679, 152685, 152691, 152697, 152703,
-    152709, 152715, 152721, 152727, 152734, 152740, 152746, 152752, 152758,
-    152764, 152770, 152776, 152781, 152787, 152793, 152799, 152805, 152811,
-    152817, 152823, 152829, 152835, 152841, 152847, 152853, 152859, 152865,
-    152871, 152877, 152883, 152890, 152896, 152902, 152908, 152914, 152920,
-    152926, 152932, 152939, 152945, 152951, 152957, 152963, 152969, 152975,
-    152981, 152987, 152993, 152999, 153005, 153011, 153017, 153023, 153029,
-    153035, 153041, 153047, 153053, 153059, 153065, 153071, 153077, 153084,
-    153090, 153096, 153102, 153108, 153114, 153120, 153126, 153131, 153137,
-    153143, 153149, 153155, 153161, 153167, 153173, 153179, 153185, 153191,
-    153197, 153203, 153209, 153215, 153221, 153227, 153233, 153240, 153246,
-    153252, 153258, 153264, 153270, 153276, 153282, 153289, 153295, 153301,
-    153307, 153313, 153319, 153325, 153332, 153339, 153346, 153353, 153360,
-    153367, 153374, 153381, 153388, 153395, 153402, 153409, 153416, 153423,
-    153430, 153437, 153444, 153452, 153459, 153466, 153473, 153480, 153487,
-    153494, 153501, 153507, 153514, 153521, 153528, 153535, 153542, 153549,
-    153556, 153563, 153570, 153577, 153584, 153591, 153598, 153605, 153612,
-    153619, 153626, 153634, 153641, 153648, 153655, 153662, 153669, 153676,
-    153683, 153691, 153698, 153705, 153712, 153719, 153726, 153733, 153738,
-    0, 0, 153743, 153748, 153752, 153756, 153760, 153764, 153768, 153772,
-    153776, 153780, 153784, 153790, 153795, 153800, 153805, 153810, 153815,
-    153820, 153825, 153830, 153835, 153840, 153844, 153848, 153852, 153856,
-    153860, 153864, 153868, 153872, 153876, 153882, 153887, 153892, 153897,
-    153902, 153907, 153912, 153917, 153922, 153927, 153933, 153938, 153943,
-    153948, 153953, 153958, 153963, 153968, 153973, 153978, 153982, 153987,
-    153992, 153997, 154002, 154007, 154012, 154018, 154026, 154033, 154038,
-    154043, 154050, 154056, 154061, 154067, 154073, 154081, 154087, 154094,
-    154102, 154108, 154117, 154126, 154134, 154142, 154148, 154155, 154163,
-    154171, 154177, 154184, 154193, 154202, 154209, 154220, 154230, 154240,
-    154250, 154260, 154267, 154274, 154281, 154288, 154297, 154306, 154317,
-    154328, 154337, 154346, 154357, 154366, 154375, 154386, 154395, 154404,
-    154412, 154420, 154431, 154442, 154450, 154459, 154468, 154475, 154486,
-    154497, 154506, 154515, 154522, 154531, 154540, 154549, 154560, 154569,
-    154579, 154588, 154597, 154608, 154621, 154636, 154647, 154660, 154672,
-    154681, 154692, 154703, 154712, 154723, 154737, 154752, 154755, 154764,
-    154769, 154775, 154783, 154789, 154795, 154804, 154811, 154821, 154833,
-    154840, 154843, 154849, 154856, 154862, 154867, 154870, 154875, 154878,
-    154885, 154891, 154899, 154906, 154913, 154919, 154924, 154927, 154930,
-    154933, 154939, 154946, 154952, 154957, 154964, 154967, 154972, 154979,
-    154985, 154993, 155000, 155010, 155019, 155022, 155028, 155035, 155042,
-    155049, 155054, 155062, 155070, 155079, 155085, 155094, 155103, 155112,
-    155118, 155127, 155134, 155141, 155148, 155156, 155162, 155170, 155176,
-    155183, 155190, 155198, 155209, 155219, 155225, 155232, 155239, 155246,
-    155252, 155259, 155266, 155271, 155278, 155286, 155295, 155301, 155313,
-    155324, 155330, 155338, 155344, 155351, 155358, 155365, 155371, 155378,
-    155387, 155393, 155399, 155406, 155413, 155421, 155431, 155441, 155451,
-    155461, 155469, 155477, 155487, 155495, 155500, 155505, 155510, 155516,
-    155523, 155530, 155536, 155542, 155547, 155554, 155562, 155572, 155580,
-    155588, 155598, 155608, 155616, 155626, 155636, 155648, 155660, 155672,
-    155682, 155688, 155694, 155701, 155710, 155719, 155728, 155737, 155747,
-    155756, 155765, 155774, 155779, 155785, 155794, 155804, 155813, 155819,
-    155825, 155832, 155839, 155846, 155852, 155859, 155866, 155873, 155879,
-    155883, 155888, 155895, 155902, 155909, 155914, 155922, 155930, 155939,
-    155947, 155954, 155962, 155971, 155981, 155984, 155988, 155993, 155998,
-    156003, 156008, 156013, 156018, 156023, 156028, 156033, 156038, 156043,
-    156048, 156053, 156058, 156063, 156068, 156073, 156080, 156086, 156093,
-    156099, 156104, 156111, 156117, 156124, 156130, 156135, 156142, 156149,
-    156156, 156162, 156168, 156177, 156186, 156197, 156204, 156211, 156220,
-    156229, 156238, 156247, 156256, 156262, 156270, 156276, 156286, 156291,
-    156300, 156309, 156316, 156327, 156334, 156341, 156348, 156355, 156362,
-    156369, 156376, 156383, 156390, 156397, 156403, 156409, 156415, 156422,
-    156429, 156436, 156443, 156450, 156457, 156464, 156471, 156478, 156485,
-    156492, 156499, 156504, 156513, 156522, 156531, 156538, 156545, 156552,
-    156559, 156566, 156573, 156580, 156587, 156596, 156605, 156614, 156623,
-    156632, 156641, 156650, 156659, 156668, 156677, 156686, 156695, 156704,
-    156710, 156718, 156724, 156734, 156739, 156748, 156757, 156766, 156777,
-    156782, 156789, 156796, 156803, 156808, 156814, 156820, 156826, 156833,
-    156840, 156847, 156854, 156861, 156868, 156875, 156882, 156889, 156896,
-    156903, 156910, 156915, 156924, 156933, 156942, 156951, 156960, 156969,
-    156978, 156987, 156998, 157009, 157016, 157023, 157030, 157037, 157044,
-    157051, 157059, 157069, 157079, 157089, 157100, 157111, 157122, 157131,
-    157140, 157149, 157154, 157159, 157164, 157169, 157180, 157191, 157202,
-    157213, 157224, 157234, 157245, 157254, 157263, 157272, 157281, 157290,
-    157298, 157307, 157318, 157329, 157340, 157351, 157362, 157374, 157387,
-    157399, 157412, 157424, 157437, 157449, 157462, 157473, 157484, 157493,
-    157501, 157510, 157521, 157532, 157544, 157557, 157571, 157586, 157598,
-    157611, 157623, 157636, 157647, 157658, 157667, 157675, 157684, 157691,
-    157698, 157705, 157712, 157719, 157726, 157733, 157740, 157747, 157754,
-    157759, 157764, 157769, 157776, 157786, 157797, 157807, 157818, 157832,
-    157847, 157862, 157876, 157891, 157906, 157917, 157928, 157941, 157954,
-    157963, 157972, 157985, 157998, 158005, 158012, 158017, 158022, 158027,
-    158032, 158037, 158044, 158053, 158058, 158061, 158066, 158073, 158080,
-    158087, 158094, 158101, 158108, 158121, 158135, 158150, 158157, 158164,
-    158171, 158180, 158188, 158196, 158205, 158210, 158215, 158220, 158225,
-    158230, 158235, 158242, 158249, 158255, 158262, 158268, 158275, 158280,
-    158285, 158290, 158295, 158300, 158307, 158314, 158319, 158326, 158333,
-    158338, 158343, 158348, 158353, 158358, 158363, 158370, 158377, 158384,
-    158387, 158392, 158397, 158402, 158407, 158414, 158421, 158429, 158437,
-    158442, 158447, 158454, 158461, 158468, 158473, 158480, 158487, 158492,
-    158499, 158506, 158512, 158518, 158524, 158530, 158538, 158546, 158552,
-    158560, 158568, 158573, 158580, 158587, 158592, 158599, 158606, 158613,
-    158621, 158629, 158634, 158641, 158648, 158657, 158664, 158673, 158684,
-    158693, 158702, 158711, 158720, 158723, 158728, 158735, 158744, 158751,
-    158760, 158767, 158772, 158777, 158780, 158783, 158786, 158793, 158800,
-    158809, 158818, 158827, 158834, 158841, 158846, 158859, 158864, 158869,
-    158874, 158879, 158884, 158889, 158894, 158899, 158902, 158907, 158912,
-    158917, 158922, 158927, 158934, 158939, 158946, 158949, 158954, 158957,
-    158960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158963, 158968,
-    158973, 158978, 158983, 0, 158988, 158993, 158998, 159003, 159008,
-    159013, 159018, 159023, 159028, 159033, 159038, 159043, 159048, 159053,
-    159058, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159063, 159068, 159073, 159078, 159083,
-    159088, 159093, 0, 159098, 159103, 159108, 159114, 159118, 159123,
-    159128, 159133, 159138, 159143, 159148, 159153, 159158, 159163, 159168,
-    159173, 159178, 0, 0, 159183, 159188, 159193, 159198, 159203, 159208,
-    159213, 0, 159218, 159223, 0, 159229, 159234, 159242, 159249, 159258, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138861, 138867, 138873, 138879,
+    138885, 138891, 138897, 138903, 138909, 138915, 138921, 138927, 138932,
+    138938, 138943, 138949, 138954, 138960, 138966, 138971, 138977, 138982,
+    138988, 138994, 139000, 139006, 139012, 139018, 139024, 139029, 139034,
+    139040, 139046, 139052, 139058, 139064, 139070, 139076, 139082, 139088,
+    139094, 139100, 139106, 139112, 139117, 139123, 139128, 139134, 139139,
+    139145, 139151, 139156, 139162, 139167, 139173, 139179, 139185, 139191,
+    139197, 139203, 139209, 139214, 139219, 139225, 139231, 139236, 139240,
+    139244, 139248, 139252, 139256, 139260, 139264, 139268, 139272, 139277,
+    139282, 139287, 139292, 139297, 139302, 139307, 139312, 139317, 139322,
+    139329, 139336, 139343, 139347, 139353, 139358, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159263, 159270, 159278, 159286,
-    159293, 159300, 159307, 159315, 159323, 159331, 159338, 159345, 159353,
-    159361, 159369, 159376, 159384, 159392, 159400, 159408, 159416, 159424,
-    159432, 159439, 159447, 159454, 159462, 159469, 159477, 159485, 159493,
-    159501, 159509, 159517, 159525, 159533, 159541, 159548, 159556, 159563,
-    159570, 159577, 159585, 159592, 159600, 0, 0, 0, 159608, 159615, 159622,
-    159629, 159636, 159643, 159650, 159657, 159666, 159675, 159684, 159693,
-    159702, 159712, 0, 0, 159720, 159728, 159735, 159742, 159749, 159756,
-    159763, 159770, 159777, 159784, 0, 0, 0, 0, 159791, 159800, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139364,
+    139367, 139371, 139375, 139379, 139382, 139386, 139391, 139395, 139399,
+    139403, 139406, 139410, 139415, 139419, 139423, 139427, 139430, 139434,
+    139439, 139444, 139448, 139452, 139455, 139459, 139463, 139467, 139471,
+    139475, 139479, 139483, 139486, 139490, 139494, 139498, 139502, 139506,
+    139510, 139516, 139519, 139523, 139527, 139531, 139535, 139539, 139543,
+    139547, 139551, 139555, 139560, 139565, 139571, 139575, 139579, 139583,
+    139587, 139591, 139595, 139600, 139603, 139607, 139611, 139615, 139619,
+    139625, 139629, 139633, 139637, 139641, 139645, 139649, 139653, 139657,
+    139661, 139665, 0, 0, 0, 0, 139669, 139674, 139678, 139682, 139688,
+    139694, 139698, 139703, 139708, 139713, 139718, 139722, 139727, 139732,
+    139737, 139741, 139746, 139751, 139756, 139760, 139765, 139770, 139775,
+    139780, 139785, 139790, 139795, 139800, 139804, 139809, 139814, 139819,
+    139824, 139829, 139834, 139839, 139844, 139849, 139854, 139859, 139866,
+    139871, 139878, 139883, 139888, 139893, 139898, 139903, 139908, 139913,
+    139918, 139923, 139928, 139933, 139938, 139943, 139948, 0, 0, 0, 0, 0, 0,
+    0, 139953, 139957, 139963, 139966, 139969, 139973, 139977, 139981,
+    139985, 139989, 139993, 139997, 140003, 140009, 140015, 140021, 140027,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140033, 140037, 140041,
+    140047, 140053, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140058, 140067, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140076, 140079, 140082, 140085, 140088,
+    140091, 140094, 140097, 140100, 140103, 140106, 140109, 140112, 140115,
+    140118, 140121, 140124, 140127, 140130, 140133, 140136, 140139, 140142,
+    140145, 140148, 140151, 140154, 140157, 140160, 140163, 140166, 140169,
+    140172, 140175, 140178, 140181, 140184, 140187, 140190, 140193, 140196,
+    140199, 140202, 140205, 140208, 140211, 140214, 140217, 140220, 140223,
+    140226, 140229, 140232, 140235, 140238, 140241, 140244, 140247, 140250,
+    140253, 140256, 140259, 140262, 140265, 140268, 140271, 140274, 140277,
+    140280, 140283, 140286, 140289, 140292, 140295, 140298, 140301, 140304,
+    140307, 140310, 140313, 140316, 140319, 140322, 140325, 140328, 140331,
+    140334, 140337, 140340, 140343, 140346, 140349, 140352, 140355, 140358,
+    140361, 140364, 140367, 140370, 140373, 140376, 140379, 140382, 140385,
+    140388, 140391, 140394, 140397, 140400, 140403, 140406, 140409, 140412,
+    140415, 140418, 140421, 140424, 140427, 140430, 140433, 140436, 140439,
+    140442, 140445, 140448, 140451, 140454, 140457, 140460, 140463, 140466,
+    140469, 140472, 140475, 140478, 140481, 140484, 140487, 140490, 140493,
+    140496, 140499, 140502, 140505, 140508, 140511, 140514, 140517, 140520,
+    140523, 140526, 140529, 140532, 140535, 140538, 140541, 140544, 140547,
+    140550, 140553, 140556, 140559, 140562, 140565, 140568, 140571, 140574,
+    140577, 140580, 140583, 140586, 140589, 140592, 140595, 140598, 140601,
+    140604, 140607, 140610, 140613, 140616, 140619, 140622, 140625, 140628,
+    140631, 140634, 140637, 140640, 140643, 140646, 140649, 140652, 140655,
+    140658, 140661, 140664, 140667, 140670, 140673, 140676, 140679, 140682,
+    140685, 140688, 140691, 140694, 140697, 140700, 140703, 140706, 140709,
+    140712, 140715, 140718, 140721, 140724, 140727, 140730, 140733, 140736,
+    140739, 140742, 140745, 140748, 140751, 140754, 140757, 140760, 140763,
+    140766, 140769, 140772, 140775, 140778, 140781, 140784, 140787, 140790,
+    140793, 140796, 140799, 140802, 140805, 140808, 140811, 140814, 140817,
+    140820, 140823, 140826, 140829, 140832, 140835, 140838, 140841, 140844,
+    140847, 140850, 140853, 140856, 140859, 140862, 140865, 140868, 140871,
+    140874, 140877, 140880, 140883, 140886, 140889, 140892, 140895, 140898,
+    140901, 140904, 140907, 140910, 140913, 140916, 140919, 140922, 140925,
+    140928, 140931, 140934, 140937, 140940, 140943, 140946, 140949, 140952,
+    140955, 140958, 140961, 140964, 140967, 140970, 140973, 140976, 140979,
+    140982, 140985, 140988, 140991, 140994, 140997, 141000, 141003, 141006,
+    141009, 141012, 141015, 141018, 141021, 141024, 141027, 141030, 141033,
+    141036, 141039, 141042, 141045, 141048, 141051, 141054, 141057, 141060,
+    141063, 141066, 141069, 141072, 141075, 141078, 141081, 141084, 141087,
+    141090, 141093, 141096, 141099, 141102, 141105, 141108, 141111, 141114,
+    141117, 141120, 141123, 141126, 141129, 141132, 141135, 141138, 141141,
+    141144, 141147, 141150, 141153, 141156, 141159, 141162, 141165, 141168,
+    141171, 141174, 141177, 141180, 141183, 141186, 141189, 141192, 141195,
+    141198, 141201, 141204, 141207, 141210, 141213, 141216, 141219, 141222,
+    141225, 141228, 141231, 141234, 141237, 141240, 141243, 141246, 141249,
+    141252, 141255, 141258, 141261, 141264, 141267, 141270, 141273, 141276,
+    141279, 141282, 141285, 141288, 141291, 141294, 141297, 141300, 141303,
+    141306, 141309, 141312, 141315, 141318, 141321, 141324, 141327, 141330,
+    141333, 141336, 141339, 141342, 141345, 141348, 141351, 141354, 141357,
+    141360, 141363, 141366, 141369, 141372, 141375, 141378, 141381, 141384,
+    141387, 141390, 141393, 141396, 141399, 141402, 141405, 141408, 141411,
+    141414, 141417, 141420, 141423, 141426, 141429, 141432, 141435, 141438,
+    141441, 141444, 141447, 141450, 141453, 141456, 141459, 141462, 141465,
+    141468, 141471, 141474, 141477, 141480, 141483, 141486, 141489, 141492,
+    141495, 141498, 141501, 141504, 141507, 141510, 141513, 141516, 141519,
+    141522, 141525, 141528, 141531, 141534, 141537, 141540, 141543, 141546,
+    141549, 141552, 141555, 141558, 141561, 141564, 141567, 141570, 141573,
+    141576, 141579, 141582, 141585, 141588, 141591, 141594, 141597, 141600,
+    141603, 141606, 141609, 141612, 141615, 141618, 141621, 141624, 141627,
+    141630, 141633, 141636, 141639, 141642, 141645, 141648, 141651, 141654,
+    141657, 141660, 141663, 141666, 141669, 141672, 141675, 141678, 141681,
+    141684, 141687, 141690, 141693, 141696, 141699, 141702, 141705, 141708,
+    141711, 141714, 141717, 141720, 141723, 141726, 141729, 141732, 141735,
+    141738, 141741, 141744, 141747, 141750, 141753, 141756, 141759, 141762,
+    141765, 141768, 141771, 141774, 141777, 141780, 141783, 141786, 141789,
+    141792, 141795, 141798, 141801, 141804, 141807, 141810, 141813, 141816,
+    141819, 141822, 141825, 141828, 141831, 141834, 141837, 141840, 141843,
+    141846, 141849, 141852, 141855, 141858, 141861, 141864, 141867, 141870,
+    141873, 141876, 141879, 141882, 141885, 141888, 141891, 141894, 141897,
+    141900, 141903, 141906, 141909, 141912, 141915, 141918, 141921, 141924,
+    141927, 141930, 141933, 141936, 141939, 141942, 141945, 141948, 141951,
+    141954, 141957, 141960, 141963, 141966, 141969, 141972, 141975, 141978,
+    141981, 141984, 141987, 141990, 141993, 141996, 141999, 142002, 142005,
+    142008, 142011, 142014, 142017, 142020, 142023, 142026, 142029, 142032,
+    142035, 142038, 142041, 142044, 142047, 142050, 142053, 142056, 142059,
+    142062, 142065, 142068, 142071, 142074, 142077, 142080, 142083, 142086,
+    142089, 142092, 142095, 142098, 142101, 142104, 142107, 142110, 142113,
+    142116, 142119, 142122, 142125, 142128, 142131, 142134, 142137, 142140,
+    142143, 142146, 142149, 142152, 142155, 142158, 142161, 142164, 142167,
+    142170, 142173, 142176, 142179, 142182, 142185, 142188, 142191, 142194,
+    142197, 142200, 142203, 142206, 142209, 142212, 142215, 142218, 142221,
+    142224, 142227, 142230, 142233, 142236, 142239, 142242, 142245, 142248,
+    142251, 142254, 142257, 142260, 142263, 142266, 142269, 142272, 142275,
+    142278, 142281, 142284, 142287, 142290, 142293, 142296, 142299, 142302,
+    142305, 142308, 142311, 142314, 142317, 142320, 142323, 142326, 142329,
+    142332, 142335, 142338, 142341, 142344, 142347, 142350, 142353, 142356,
+    142359, 142362, 142365, 142368, 142371, 142374, 142377, 142380, 142385,
+    142390, 142395, 142400, 142405, 142410, 142415, 142420, 142425, 142430,
+    142435, 142440, 142445, 142450, 142455, 142460, 142465, 142470, 142475,
+    142480, 142485, 142490, 142495, 142500, 142505, 142510, 142515, 142520,
+    142525, 142530, 142535, 142540, 142545, 142550, 142555, 142560, 142565,
+    142570, 142575, 142580, 142585, 142590, 142595, 142600, 142605, 142610,
+    142615, 142620, 142625, 142630, 142635, 142640, 142645, 142650, 142655,
+    142660, 142665, 142670, 142675, 142680, 142685, 142690, 142695, 142700,
+    142705, 142710, 142715, 142720, 142725, 142730, 142735, 142740, 142745,
+    142750, 142755, 142760, 142765, 142770, 142775, 142780, 142785, 142790,
+    142795, 142800, 142805, 142810, 142815, 142820, 142825, 142830, 142835,
+    142840, 142845, 142850, 142855, 142860, 142865, 142870, 142875, 142880,
+    142885, 142890, 142895, 142900, 142905, 142910, 142915, 142920, 142925,
+    142930, 142935, 142940, 142945, 142950, 142955, 142960, 142965, 142970,
+    142975, 142980, 142985, 142990, 142995, 143000, 143005, 143010, 143015,
+    143020, 143025, 143030, 143035, 143040, 143045, 143050, 143055, 143060,
+    143065, 143070, 143075, 143080, 143085, 143090, 143095, 143100, 143105,
+    143110, 143115, 143120, 143125, 143130, 143135, 143140, 143145, 143150,
+    143155, 143160, 143165, 143170, 143175, 143180, 143185, 143190, 143195,
+    143200, 143205, 143210, 143215, 143220, 143225, 143230, 143235, 143240,
+    143245, 143250, 143255, 143260, 143265, 143270, 143275, 143280, 143285,
+    143290, 143295, 143300, 143305, 143310, 143315, 143320, 143325, 143330,
+    143335, 143340, 143345, 143350, 143355, 143360, 143365, 143370, 143375,
+    143380, 143385, 143390, 143395, 143400, 143405, 143410, 143415, 143420,
+    143425, 143430, 143435, 143440, 143445, 143450, 143455, 143460, 143465,
+    143470, 143475, 143480, 143485, 143490, 143495, 143500, 143505, 143510,
+    143515, 143520, 143525, 143530, 143535, 143540, 143545, 143550, 143555,
+    143560, 143565, 143570, 143575, 143580, 143585, 143590, 143595, 143600,
+    143605, 143610, 143615, 143620, 143625, 143630, 143635, 143640, 143645,
+    143650, 143655, 143660, 143665, 143670, 143675, 143680, 143685, 143690,
+    143695, 143700, 143705, 143710, 143715, 143720, 143725, 143730, 143735,
+    143740, 143745, 143750, 143755, 143760, 143765, 143770, 143775, 143780,
+    143785, 143790, 143795, 143800, 143805, 143810, 143815, 143820, 143825,
+    143830, 143835, 143840, 143845, 143850, 143855, 143860, 143865, 143870,
+    143875, 143880, 143885, 143890, 143895, 143900, 143905, 143910, 143915,
+    143920, 143925, 143930, 143935, 143940, 143945, 143950, 143955, 143960,
+    143965, 143970, 143975, 143980, 143985, 143990, 143995, 144000, 144005,
+    144010, 144015, 144020, 144025, 144030, 144035, 144040, 144045, 144050,
+    144055, 144060, 144065, 144070, 144075, 144080, 144085, 144090, 144095,
+    144100, 144105, 144110, 144115, 144120, 144125, 144130, 144135, 144140,
+    144145, 144150, 144155, 144160, 144165, 144170, 144175, 144180, 144185,
+    144190, 144195, 144200, 144205, 144210, 144215, 144220, 144225, 144230,
+    144235, 144240, 144245, 144250, 144255, 144260, 144265, 144270, 144275,
+    144280, 144285, 144290, 144295, 144300, 144305, 144310, 144315, 144320,
+    144325, 144330, 144335, 144340, 144345, 144350, 144355, 144360, 144365,
+    144370, 144375, 144380, 144385, 144390, 144395, 144400, 144405, 144410,
+    144415, 144420, 144425, 144430, 144435, 144440, 144445, 144450, 144455,
+    144460, 144465, 144470, 144475, 144480, 144485, 144490, 144495, 144500,
+    144505, 144510, 144515, 144520, 144525, 144530, 144535, 144540, 144545,
+    144550, 144555, 144560, 144565, 144570, 144575, 144580, 144585, 144590,
+    144595, 144600, 144605, 144610, 144615, 144620, 144625, 144630, 144635,
+    144640, 144645, 144650, 144655, 144660, 144665, 144670, 144675, 144680,
+    144685, 144690, 144695, 144700, 144705, 144710, 144715, 144720, 144725,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144730, 144735,
+    144742, 144746, 144750, 144754, 144758, 144762, 144766, 144770, 144774,
+    144778, 144782, 144786, 144790, 144794, 144798, 144802, 144806, 144810,
+    144814, 144818, 144822, 144826, 144830, 144834, 144838, 144842, 144846,
+    144850, 144854, 144858, 144862, 144866, 144870, 144874, 144878, 144882,
+    144886, 144890, 144894, 144898, 144902, 144906, 144910, 144914, 144918,
+    144922, 144926, 144930, 144934, 144938, 144942, 144946, 144950, 144954,
+    144958, 144962, 144966, 144970, 144974, 144978, 144982, 144986, 144990,
+    144994, 144998, 145002, 145006, 145010, 145014, 145018, 145022, 145026,
+    145030, 145034, 145038, 145042, 145046, 145050, 145054, 145058, 145062,
+    145066, 145070, 145074, 145078, 145082, 145086, 145090, 145094, 145098,
+    145102, 145106, 145110, 145114, 145118, 145122, 145126, 145130, 145134,
+    145138, 145142, 145146, 145150, 145154, 145158, 145162, 145166, 145170,
+    145174, 145178, 145182, 145186, 145190, 145194, 145198, 145202, 145206,
+    145210, 145214, 145218, 145222, 145226, 145230, 145234, 145238, 145242,
+    145246, 145250, 145254, 145258, 145262, 145266, 145270, 145274, 145278,
+    145282, 145286, 145290, 145294, 145298, 145302, 145306, 145310, 145314,
+    145318, 145322, 145326, 145330, 145334, 145338, 145342, 145346, 145350,
+    145354, 145358, 145362, 145366, 145370, 145374, 145378, 145382, 145386,
+    145390, 145394, 145398, 145402, 145406, 145410, 145414, 145418, 145422,
+    145426, 145430, 145434, 145438, 145442, 145446, 145450, 145454, 145458,
+    145462, 145466, 145470, 145474, 145478, 145482, 145486, 145490, 145494,
+    145498, 145502, 145506, 145510, 145514, 145518, 145522, 145526, 145530,
+    145534, 145538, 145542, 145546, 145550, 145554, 145558, 145562, 145566,
+    145570, 145574, 145578, 145582, 145586, 145590, 145594, 145598, 145602,
+    145606, 145610, 145614, 145618, 145622, 145626, 145630, 145634, 145638,
+    145642, 145646, 145650, 145654, 145658, 145662, 145666, 145670, 145674,
+    145678, 145682, 145686, 145690, 145694, 145698, 145702, 145706, 145710,
+    145714, 145718, 145722, 145726, 145730, 145734, 145738, 145742, 145746,
+    145750, 145754, 145758, 145762, 145766, 145770, 145774, 145778, 145782,
+    145786, 145790, 145794, 145798, 145802, 145806, 145810, 145814, 145818,
+    145822, 145826, 145830, 145834, 145838, 145842, 145846, 145850, 145854,
+    145858, 145862, 145866, 145870, 145874, 145878, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145882, 145888,
+    145894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145900,
+    145905, 145910, 145915, 0, 0, 0, 0, 0, 0, 0, 0, 145920, 145923, 145926,
+    145929, 145932, 145935, 145938, 145941, 145944, 145947, 145950, 145953,
+    145956, 145959, 145962, 145965, 145968, 145971, 145974, 145977, 145980,
+    145983, 145986, 145989, 145992, 145995, 145998, 146001, 146004, 146007,
+    146010, 146013, 146016, 146019, 146022, 146025, 146028, 146031, 146034,
+    146037, 146040, 146043, 146046, 146049, 146052, 146055, 146058, 146061,
+    146064, 146067, 146070, 146073, 146076, 146079, 146082, 146085, 146088,
+    146091, 146094, 146097, 146100, 146103, 146106, 146109, 146112, 146115,
+    146118, 146121, 146124, 146127, 146130, 146133, 146136, 146139, 146142,
+    146145, 146148, 146151, 146154, 146157, 146160, 146163, 146166, 146169,
+    146172, 146175, 146178, 146181, 146184, 146187, 146190, 146193, 146196,
+    146199, 146202, 146205, 146208, 146211, 146214, 146217, 146220, 146223,
+    146226, 146229, 146232, 146235, 146238, 146241, 146244, 146247, 146250,
+    146253, 146256, 146259, 146262, 146265, 146268, 146271, 146274, 146277,
+    146280, 146283, 146286, 146289, 146292, 146295, 146298, 146301, 146304,
+    146307, 146310, 146313, 146316, 146319, 146322, 146325, 146328, 146331,
+    146334, 146337, 146340, 146343, 146346, 146349, 146352, 146355, 146358,
+    146361, 146364, 146367, 146370, 146373, 146376, 146379, 146382, 146385,
+    146388, 146391, 146394, 146397, 146400, 146403, 146406, 146409, 146412,
+    146415, 146418, 146421, 146424, 146427, 146430, 146433, 146436, 146439,
+    146442, 146445, 146448, 146451, 146454, 146457, 146460, 146463, 146466,
+    146469, 146472, 146475, 146478, 146481, 146484, 146487, 146490, 146493,
+    146496, 146499, 146502, 146505, 146508, 146511, 146514, 146517, 146520,
+    146523, 146526, 146529, 146532, 146535, 146538, 146541, 146544, 146547,
+    146550, 146553, 146556, 146559, 146562, 146565, 146568, 146571, 146574,
+    146577, 146580, 146583, 146586, 146589, 146592, 146595, 146598, 146601,
+    146604, 146607, 146610, 146613, 146616, 146619, 146622, 146625, 146628,
+    146631, 146634, 146637, 146640, 146643, 146646, 146649, 146652, 146655,
+    146658, 146661, 146664, 146667, 146670, 146673, 146676, 146679, 146682,
+    146685, 146688, 146691, 146694, 146697, 146700, 146703, 146706, 146709,
+    146712, 146715, 146718, 146721, 146724, 146727, 146730, 146733, 146736,
+    146739, 146742, 146745, 146748, 146751, 146754, 146757, 146760, 146763,
+    146766, 146769, 146772, 146775, 146778, 146781, 146784, 146787, 146790,
+    146793, 146796, 146799, 146802, 146805, 146808, 146811, 146814, 146817,
+    146820, 146823, 146826, 146829, 146832, 146835, 146838, 146841, 146844,
+    146847, 146850, 146853, 146856, 146859, 146862, 146865, 146868, 146871,
+    146874, 146877, 146880, 146883, 146886, 146889, 146892, 146895, 146898,
+    146901, 146904, 146907, 146910, 146913, 146916, 146919, 146922, 146925,
+    146928, 146931, 146934, 146937, 146940, 146943, 146946, 146949, 146952,
+    146955, 146958, 146961, 146964, 146967, 146970, 146973, 146976, 146979,
+    146982, 146985, 146988, 146991, 146994, 146997, 147000, 147003, 147006,
+    147009, 147012, 147015, 147018, 147021, 147024, 147027, 147030, 147033,
+    147036, 147039, 147042, 147045, 147048, 147051, 147054, 147057, 147060,
+    147063, 147066, 147069, 147072, 147075, 147078, 147081, 147084, 147087,
+    147090, 147093, 147096, 147099, 147102, 147105, 0, 0, 0, 0, 147108,
+    147112, 147116, 147120, 147124, 147128, 147132, 147135, 147139, 147143,
+    147147, 147151, 147154, 147160, 147166, 147172, 147178, 147184, 147188,
+    147194, 147198, 147202, 147208, 147212, 147216, 147220, 147224, 147228,
+    147232, 147236, 147242, 147248, 147254, 147260, 147267, 147274, 147281,
+    147292, 147299, 147306, 147312, 147318, 147324, 147330, 147338, 147346,
+    147354, 147362, 147371, 147377, 147385, 147391, 147398, 147404, 147411,
+    147417, 147425, 147429, 147433, 147438, 147444, 147450, 147458, 147466,
+    147472, 147479, 147482, 147488, 147492, 147495, 147499, 147502, 147505,
+    147509, 147514, 147518, 147522, 147528, 147533, 147539, 147543, 147547,
+    147550, 147554, 147558, 147563, 147567, 147572, 147576, 147581, 147585,
+    147589, 147593, 147597, 147601, 147605, 147609, 147613, 147618, 147623,
+    147628, 147633, 147639, 147645, 147651, 147657, 147663, 0, 0, 0, 0, 0,
+    147668, 147676, 147685, 147693, 147700, 147708, 147715, 147722, 147731,
+    147738, 147745, 147753, 147761, 0, 0, 0, 147769, 147775, 147783, 147789,
+    147796, 147802, 147808, 147814, 147820, 0, 0, 0, 0, 0, 0, 0, 147826,
+    147832, 147840, 147846, 147853, 147859, 147865, 147871, 147877, 147883,
+    0, 0, 147888, 147894, 147900, 147903, 147912, 147919, 147927, 147934, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159808, 159813, 159817, 159822,
-    159827, 159832, 159837, 159841, 159846, 159850, 159854, 159858, 159862,
-    159867, 159872, 159876, 159881, 159886, 159891, 159896, 159901, 159905,
-    159909, 159914, 159918, 159922, 159927, 159931, 159935, 159939, 159944,
-    159948, 159953, 159958, 159963, 159968, 159973, 159978, 159983, 159988,
-    159993, 159998, 160003, 160008, 160013, 160018, 160023, 160028, 160033,
-    160038, 160042, 160046, 160050, 160054, 160058, 160062, 160066, 160070,
-    0, 0, 0, 0, 0, 160074, 160079, 160086, 160092, 160099, 160106, 160113,
-    160120, 160127, 160134, 160141, 160148, 160155, 160162, 160169, 160176,
-    160183, 160190, 160197, 160204, 160211, 160218, 160225, 160232, 160239,
-    160246, 160253, 160260, 160267, 160274, 160281, 160288, 160295, 160302,
-    160309, 160316, 160322, 160328, 160334, 160341, 160347, 160354, 160360,
-    160367, 160374, 160381, 160388, 160395, 160402, 160408, 160415, 160422,
-    160429, 160436, 160443, 160450, 160457, 160463, 160470, 160477, 160484,
-    160491, 160498, 160506, 160513, 160520, 160527, 160534, 160541, 160548,
-    160555, 160561, 160568, 160575, 160582, 160589, 160595, 160602, 160609,
-    160616, 160623, 160630, 160637, 160644, 160652, 160659, 160665, 160672,
-    160679, 160686, 160693, 160700, 160707, 160714, 160721, 160728, 160735,
-    160742, 160749, 160756, 160763, 160770, 160777, 160784, 160791, 160798,
-    160805, 160811, 160818, 160825, 160832, 160839, 160846, 160853, 160860,
-    160867, 160874, 160881, 160888, 160895, 160902, 160909, 160916, 160923,
-    160930, 160937, 160944, 160951, 160958, 160965, 160973, 160981, 160989,
-    160996, 161003, 161010, 161017, 161024, 161031, 161038, 161045, 161052,
-    161059, 161065, 161072, 161079, 161086, 161093, 161100, 161107, 161114,
-    161121, 161128, 161135, 161142, 161149, 161156, 161163, 161171, 161179,
-    161187, 161194, 161201, 161208, 161215, 161222, 161229, 161236, 161243,
-    161250, 161257, 161264, 161271, 161278, 161285, 161291, 161298, 161305,
-    161312, 161319, 161326, 161333, 161340, 161347, 161354, 161361, 161368,
-    161375, 161382, 161389, 161396, 161403, 161410, 161417, 161424, 161431,
-    161438, 161445, 0, 0, 161452, 161456, 161460, 161464, 161468, 161472,
-    161476, 161480, 161484, 161488, 161494, 161500, 161506, 161512, 161520,
-    161528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161534, 161540,
-    161546, 161552, 161558, 161564, 161570, 161576, 161582, 161587, 161592,
-    161598, 161603, 161608, 161614, 161620, 161626, 161632, 161638, 161643,
-    161648, 161654, 161660, 161665, 161671, 161677, 161683, 161689, 161695,
-    161701, 161707, 161713, 161719, 161725, 161731, 161737, 161743, 161749,
-    161755, 161761, 161767, 161773, 161779, 161784, 161789, 161795, 161800,
-    161805, 161811, 161817, 161823, 161829, 161835, 161840, 161845, 161851,
-    161857, 161862, 161868, 161874, 161880, 161886, 161892, 161898, 161904,
-    161910, 161916, 161922, 161928, 161934, 161939, 161944, 161948, 161953,
-    161960, 161964, 0, 0, 0, 0, 161969, 161974, 161978, 161982, 161986,
-    161990, 161994, 161998, 162002, 162006, 0, 0, 0, 0, 162010, 162016, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147941, 147946,
+    147951, 147956, 147963, 147970, 147977, 147984, 147989, 147994, 147999,
+    148004, 148011, 148016, 148023, 148030, 148035, 148040, 148045, 148052,
+    148057, 148062, 148069, 148076, 148081, 148086, 148091, 148098, 148105,
+    148112, 148117, 148122, 148129, 148136, 148143, 148150, 148155, 148160,
+    148165, 148172, 148177, 148182, 148187, 148194, 148203, 148210, 148215,
+    148220, 148225, 148230, 148235, 148240, 148249, 148256, 148261, 148268,
+    148275, 148280, 148285, 148290, 148297, 148302, 148309, 148316, 148321,
+    148326, 148331, 148338, 148345, 148350, 148355, 148362, 148369, 148376,
+    148381, 148386, 148391, 148396, 148403, 148412, 148421, 148426, 148433,
+    148442, 148447, 148452, 148457, 148462, 148469, 148476, 148483, 148490,
+    148495, 148500, 148505, 148512, 148519, 148526, 148531, 148536, 148543,
+    148548, 148555, 148560, 148567, 148572, 148579, 148586, 148591, 148596,
+    148601, 148606, 148611, 148616, 148621, 148626, 148631, 148638, 148645,
+    148652, 148659, 148666, 148675, 148680, 148685, 148692, 148699, 148704,
+    148711, 148718, 148725, 148732, 148739, 148746, 148751, 148756, 148761,
+    148766, 148771, 148780, 148789, 148798, 148807, 148816, 148825, 148834,
+    148843, 148848, 148859, 148870, 148879, 148884, 148889, 148894, 148899,
+    148908, 148915, 148922, 148929, 148936, 148943, 148950, 148959, 148968,
+    148979, 148988, 148999, 149008, 149015, 149024, 149035, 149044, 149053,
+    149062, 149071, 149078, 149085, 149092, 149101, 149110, 149121, 149130,
+    149139, 149150, 149155, 149160, 149171, 149179, 149188, 149197, 149206,
+    149217, 149226, 149235, 149246, 149257, 149268, 149279, 149290, 149301,
+    149308, 149315, 149322, 149329, 149340, 149349, 149356, 149363, 149370,
+    149381, 149392, 149403, 149414, 149425, 149436, 149447, 149458, 149465,
+    149472, 149481, 149490, 149497, 149504, 149511, 149520, 149529, 149538,
+    149545, 149554, 149563, 149572, 149579, 149586, 149591, 149597, 149604,
+    149611, 149618, 149625, 149632, 149639, 149648, 149657, 149666, 149675,
+    149682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149691, 149697, 149702, 149707,
+    149714, 149720, 149726, 149732, 149738, 149744, 149750, 149756, 149760,
+    149764, 149770, 149776, 149782, 149786, 149791, 149796, 149800, 149804,
+    149807, 149813, 149819, 149825, 149831, 149837, 149843, 149849, 149855,
+    149861, 149871, 149881, 149887, 149893, 149903, 149913, 149919, 0, 0,
+    149925, 149933, 149938, 149943, 149949, 149955, 149961, 149967, 149973,
+    149979, 149986, 149993, 149999, 150005, 150011, 150017, 150023, 150029,
+    150035, 150041, 150046, 150052, 150058, 150064, 150070, 150076, 150085,
+    150091, 150096, 150104, 150111, 150118, 150127, 150136, 150145, 150154,
+    150163, 150172, 150181, 150190, 150200, 150210, 150218, 150226, 150235,
+    150244, 150250, 150256, 150262, 150268, 150276, 150284, 150288, 150294,
+    150299, 150305, 150311, 150317, 150323, 150329, 150338, 150343, 150350,
+    150355, 150360, 150365, 150371, 150377, 150383, 150390, 150395, 150400,
+    150405, 150410, 150415, 150421, 150427, 150433, 150439, 150445, 150451,
+    150457, 150463, 150468, 150473, 150478, 150483, 150488, 150493, 150498,
+    150503, 150509, 150515, 150520, 150525, 150530, 150535, 150540, 150546,
+    150553, 150557, 150561, 150565, 150569, 150573, 150577, 150581, 150585,
+    150593, 150603, 150607, 150611, 150617, 150623, 150629, 150635, 150641,
+    150647, 150653, 150659, 150665, 150671, 150677, 150683, 150689, 150695,
+    150699, 150703, 150710, 150716, 150722, 150728, 150733, 150740, 150745,
+    150751, 150757, 150763, 150769, 150774, 150778, 150784, 150788, 150792,
+    150796, 150802, 150808, 150812, 150818, 150824, 150830, 150836, 150842,
+    150850, 150858, 150864, 150870, 150876, 150882, 150894, 150906, 150920,
+    150932, 150944, 150958, 150972, 150986, 150990, 150998, 151006, 151011,
+    151015, 151019, 151023, 151027, 151031, 151035, 151039, 151045, 151051,
+    151057, 151063, 151071, 151080, 151087, 151094, 151102, 151109, 151121,
+    151133, 151145, 151157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 151164, 151171, 151178, 151185, 151192, 151199,
+    151206, 151213, 151220, 151227, 151234, 151241, 151248, 151255, 151262,
+    151269, 151276, 151283, 151290, 151297, 151304, 151311, 151318, 151325,
+    151332, 151339, 151346, 151353, 151360, 151367, 151374, 151381, 151388,
+    151395, 151402, 151409, 151416, 151423, 151430, 151437, 151444, 151451,
+    151458, 151465, 151472, 151479, 151486, 151493, 151500, 151507, 151514,
+    151521, 151528, 151535, 151542, 151549, 151556, 151563, 151570, 151577,
+    151584, 151591, 151598, 151605, 151612, 151619, 151626, 151631, 151636,
+    151641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    162022, 162027, 162032, 162037, 162042, 162047, 162052, 162057, 162062,
-    162067, 162073, 162079, 162085, 162091, 162097, 162103, 162109, 162115,
-    162121, 162128, 162135, 162142, 162150, 162158, 162166, 162174, 162182,
-    162190, 162196, 162202, 162208, 162215, 162222, 162229, 162236, 162243,
-    162250, 162257, 162264, 162271, 162278, 162285, 162292, 162299, 162306,
-    162313, 162319, 162325, 162331, 162337, 162343, 162350, 162357, 162364,
-    162371, 162378, 162385, 162392, 162399, 162406, 162411, 162418, 162425,
-    162432, 162438, 162445, 162452, 162461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162469, 162474,
-    162479, 162484, 162489, 162494, 162499, 162504, 162509, 162514, 162520,
-    162526, 162532, 162538, 162544, 162550, 162556, 162562, 162568, 162575,
-    162582, 162589, 162597, 162605, 162613, 162621, 162629, 162637, 162643,
-    162649, 162655, 162662, 162669, 162676, 162683, 162690, 162697, 162704,
-    162711, 162718, 162725, 162732, 162739, 162746, 162753, 162760, 162765,
-    162772, 162779, 162786, 162793, 162800, 162807, 162814, 162821, 162829,
-    162839, 162849, 162857, 162866, 162873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 162880, 162884, 162888, 162892, 0, 162896, 162900,
-    162904, 162908, 162912, 162916, 162920, 162924, 162928, 162932, 162936,
-    162940, 162944, 162948, 162952, 162956, 162960, 162964, 162968, 162972,
-    162976, 162980, 162984, 162988, 162994, 163000, 163006, 0, 163012,
-    163017, 0, 163022, 0, 0, 163027, 0, 163032, 163037, 163042, 163047,
-    163052, 163057, 163062, 163067, 163072, 163077, 0, 163082, 163087,
-    163092, 163097, 0, 163102, 0, 163107, 0, 0, 0, 0, 0, 0, 163112, 0, 0, 0,
-    0, 163118, 0, 163124, 0, 163130, 0, 163136, 163142, 163148, 0, 163154,
-    163160, 0, 163166, 0, 0, 163172, 0, 163178, 0, 163184, 0, 163190, 0,
-    163198, 0, 163206, 163212, 0, 163218, 0, 0, 163224, 163230, 163236,
-    163242, 0, 163248, 163254, 163260, 163266, 163272, 163278, 163284, 0,
-    163290, 163296, 163302, 163308, 0, 163314, 163320, 163326, 163332, 0,
-    163340, 0, 163348, 163354, 163360, 163366, 163372, 163378, 163384,
-    163390, 163396, 163402, 0, 163408, 163414, 163420, 163426, 163432,
-    163438, 163444, 163450, 163456, 163462, 163468, 163474, 163480, 163486,
-    163492, 163498, 163504, 0, 0, 0, 0, 0, 163510, 163516, 163522, 0, 163528,
-    163534, 163540, 163546, 163552, 0, 163558, 163564, 163570, 163576,
-    163582, 163588, 163594, 163600, 163606, 163612, 163618, 163624, 163630,
-    163636, 163642, 163648, 163654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163660, 163670, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 163678, 163685, 163692, 163699, 163705,
-    163712, 163719, 163725, 163732, 163739, 163746, 163754, 163762, 163770,
-    163778, 163786, 163794, 163801, 163808, 163815, 163823, 163831, 163839,
-    163847, 163855, 163863, 163870, 163877, 163884, 163892, 163900, 163908,
-    163916, 163924, 163932, 163937, 163942, 163947, 163952, 163957, 163962,
-    163967, 163972, 163977, 0, 0, 0, 0, 163982, 163988, 163992, 163996,
-    164000, 164004, 164008, 164012, 164016, 164020, 164024, 164028, 164032,
-    164036, 164040, 164044, 164048, 164052, 164056, 164060, 164064, 164068,
-    164072, 164076, 164080, 164084, 164088, 164092, 164096, 164100, 164104,
-    164108, 164112, 164116, 164120, 164124, 164128, 164132, 164136, 164140,
-    164144, 164148, 164152, 164156, 164160, 164164, 164168, 164172, 164176,
-    164180, 164184, 164189, 164193, 164197, 164201, 164205, 164209, 164213,
-    164217, 164221, 164225, 164229, 164233, 164237, 164241, 164245, 164249,
-    164253, 164257, 164261, 164265, 164269, 164273, 164277, 164281, 164285,
-    164289, 164293, 164297, 164301, 164305, 164309, 164313, 164317, 164321,
-    164325, 164329, 164333, 164337, 164341, 164345, 164349, 164353, 164357,
-    164361, 164365, 164369, 164373, 164377, 164381, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 164385, 164391, 164400, 164408, 164416, 164425, 164434,
-    164443, 164452, 164461, 164470, 164479, 164488, 164497, 164506, 0, 0,
-    164515, 164524, 164532, 164540, 164549, 164558, 164567, 164576, 164585,
-    164594, 164603, 164612, 164621, 164630, 164639, 0, 164647, 164656,
-    164664, 164672, 164681, 164690, 164699, 164708, 164717, 164726, 164735,
-    164744, 164753, 164762, 164771, 0, 164778, 164787, 164795, 164803,
-    164812, 164821, 164830, 164839, 164848, 164857, 164866, 164875, 164884,
-    164893, 164902, 164909, 164915, 164921, 164927, 164933, 164939, 164945,
-    164951, 164957, 164963, 164969, 164975, 164981, 164987, 164993, 164999,
-    165005, 165011, 165017, 165023, 165029, 165035, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 165041, 165048, 165053, 165057, 165061, 165065, 165070, 165075,
-    165080, 165085, 165090, 165095, 165102, 0, 0, 0, 165111, 165116, 165122,
-    165128, 165134, 165139, 165145, 165151, 165157, 165162, 165168, 165174,
-    165179, 165185, 165191, 165196, 165202, 165208, 165213, 165219, 165225,
-    165230, 165236, 165242, 165248, 165254, 165260, 165271, 165278, 165284,
-    165287, 165290, 165293, 165298, 165304, 165310, 165316, 165321, 165327,
-    165333, 165339, 165344, 165350, 165356, 165361, 165367, 165373, 165378,
-    165384, 165390, 165395, 165401, 165407, 165412, 165418, 165424, 165430,
-    165436, 165442, 165445, 165448, 165451, 165454, 165457, 165460, 165467,
-    165475, 165483, 165491, 165498, 165506, 165514, 165522, 165529, 165537,
-    165545, 165552, 165560, 165568, 165575, 165583, 165591, 165598, 165606,
-    165614, 165621, 165629, 165637, 165645, 165653, 165661, 165666, 165671,
-    0, 0, 0, 165676, 165683, 165691, 165699, 165707, 165714, 165722, 165730,
-    165738, 165745, 165753, 165761, 165768, 165776, 165784, 165791, 165799,
-    165807, 165814, 165822, 165830, 165837, 165845, 165853, 165861, 165869,
-    165877, 165887, 165892, 165896, 165900, 165905, 165910, 165913, 165916,
-    165919, 165922, 165925, 165928, 165931, 165934, 165937, 165943, 165946,
-    165950, 165955, 165959, 165964, 165969, 165975, 165981, 165987, 165992,
-    166000, 166006, 166009, 166012, 166015, 166018, 166021, 166024, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 166027, 166034, 166042, 166050, 166058, 166065, 166073,
-    166081, 166089, 166096, 166104, 166112, 166119, 166127, 166135, 166142,
-    166150, 166158, 166165, 166173, 166181, 166188, 166196, 166204, 166212,
-    166220, 166228, 166232, 166236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    166239, 166245, 166251, 166257, 166261, 166267, 166273, 166279, 166285,
-    166291, 166297, 166303, 166309, 166315, 166321, 166327, 166333, 166339,
-    166345, 166351, 166357, 166363, 166369, 166375, 166381, 166387, 166393,
-    166399, 166405, 166411, 166417, 166423, 166429, 166435, 166441, 166447,
-    166453, 166459, 166465, 166471, 166477, 166483, 166489, 166495, 0, 0, 0,
-    0, 166501, 166512, 166523, 166534, 166545, 166556, 166567, 166578,
-    166589, 0, 0, 0, 0, 0, 0, 0, 166600, 166605, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 166610, 166616, 166622, 166628, 166634, 166640, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    166646, 166648, 166650, 166654, 166659, 166664, 166666, 166672, 166677,
-    166679, 166685, 166689, 166691, 166695, 166701, 166707, 166713, 166718,
-    166723, 166730, 166737, 166744, 166749, 166756, 166763, 166770, 166774,
-    166781, 166790, 166799, 166806, 166811, 166815, 166819, 166821, 166824,
-    166827, 166834, 166841, 166851, 166856, 166861, 166866, 166871, 166873,
-    166879, 166883, 166885, 166887, 166889, 166891, 166895, 166899, 166903,
-    166905, 166909, 166911, 166915, 166917, 166919, 166921, 166923, 166928,
-    166933, 166935, 166941, 166945, 166949, 166957, 166959, 166961, 166963,
-    166965, 166967, 166969, 166971, 166973, 166975, 166977, 166981, 166985,
-    166987, 166989, 166991, 166993, 166995, 167000, 167006, 167010, 167014,
-    167018, 167022, 167027, 167031, 167033, 167035, 167039, 167045, 167047,
-    167049, 167051, 167055, 167064, 167070, 167074, 167078, 167080, 167082,
-    167085, 167087, 167089, 167091, 167095, 167097, 167101, 167106, 167108,
-    167113, 167119, 167126, 167130, 167134, 167138, 167142, 167148, 167152,
-    167160, 167167, 167169, 167171, 167175, 167179, 167181, 167185, 167189,
-    167191, 167195, 167197, 167201, 167205, 167209, 167213, 167217, 167221,
-    167225, 167229, 167235, 167239, 167243, 167254, 167259, 167263, 167267,
-    167273, 167277, 167281, 167285, 167292, 167299, 167303, 167307, 167311,
-    167315, 167319, 167326, 167328, 167332, 167334, 167336, 167340, 167344,
-    167348, 167350, 167354, 167358, 167362, 167366, 167370, 167372, 167376,
-    167378, 167384, 167387, 167392, 167394, 167396, 167399, 167401, 167403,
-    167406, 167413, 167420, 167427, 167432, 167436, 167438, 167440, 167442,
-    167446, 167448, 167452, 167456, 167460, 167462, 167466, 167468, 167472,
-    167476, 167483, 167485, 167494, 167503, 167512, 167518, 167520, 167525,
-    167529, 167533, 167535, 167541, 167545, 167547, 167551, 167555, 167557,
-    167561, 167566, 167570, 167576, 167582, 167584, 167586, 167592, 167594,
-    167598, 167602, 167604, 167608, 167610, 167614, 167618, 167622, 167625,
-    167628, 167633, 167638, 167640, 167643, 167645, 167652, 167656, 167658,
-    167665, 167672, 167679, 167686, 167693, 167695, 167697, 167699, 167703,
-    167705, 167707, 167709, 167711, 167713, 167715, 167717, 167719, 167721,
-    167723, 167725, 167727, 167729, 167731, 167733, 167735, 167737, 167739,
-    167741, 167743, 167745, 167747, 167751, 167753, 167755, 167757, 167761,
-    167763, 167767, 167769, 167771, 167775, 167779, 167785, 167787, 167789,
-    167791, 167793, 167797, 167801, 167803, 167807, 167811, 167815, 167819,
-    167823, 167827, 167831, 167835, 167839, 167843, 167847, 167851, 167855,
-    167859, 167863, 167867, 167871, 167875, 167877, 167879, 167881, 167883,
-    167885, 167887, 167889, 167897, 167905, 167913, 167921, 167926, 167931,
-    167936, 167940, 167944, 167949, 167953, 167955, 167959, 167961, 167963,
-    167965, 167967, 167969, 167971, 167973, 167977, 167979, 167981, 167983,
-    167987, 167991, 167995, 167999, 168003, 168005, 168011, 168017, 168019,
-    168021, 168023, 168025, 168027, 168036, 168043, 168050, 168054, 168061,
-    168066, 168073, 168082, 168087, 168091, 168095, 168097, 168101, 168103,
-    168107, 168111, 168113, 168117, 168121, 168125, 168127, 168129, 168135,
-    168137, 168139, 168141, 168145, 168149, 168151, 168155, 168157, 168159,
-    168162, 168166, 168168, 168172, 168174, 168176, 168181, 168183, 168187,
-    168191, 168194, 168198, 168202, 168206, 168210, 168214, 168218, 168222,
-    168227, 168231, 168235, 168244, 168249, 168252, 168254, 168257, 168260,
-    168265, 168267, 168270, 168275, 168279, 168282, 168286, 168290, 168293,
-    168298, 168302, 168306, 168310, 168314, 168320, 168326, 168332, 168338,
-    168343, 168354, 168356, 168360, 168362, 168364, 168368, 168372, 168374,
-    168378, 168383, 168388, 168394, 168396, 168400, 168404, 168411, 168418,
-    168422, 168424, 168426, 168430, 168432, 168436, 168440, 168444, 168446,
-    168448, 168455, 168459, 168462, 168466, 168470, 168474, 168476, 168480,
-    168482, 168484, 168488, 168490, 168494, 168498, 168504, 168508, 168512,
-    168516, 168518, 168521, 168525, 168532, 168541, 168550, 168558, 168566,
-    168568, 168572, 168574, 168578, 168589, 168593, 168599, 168605, 168610,
-    168612, 168617, 168621, 168623, 168625, 168627, 168631, 168635, 168639,
-    168644, 168654, 168669, 168681, 168693, 168697, 168701, 168707, 168709,
-    168717, 168725, 168727, 168731, 168737, 168743, 168750, 168757, 168759,
-    168761, 168764, 168766, 168772, 168774, 168777, 168781, 168787, 168793,
-    168804, 168810, 168817, 168825, 168829, 168837, 168845, 168851, 168857,
-    168864, 168866, 168870, 168872, 168874, 168879, 168881, 168883, 168885,
-    168887, 168891, 168901, 168907, 168911, 168915, 168919, 168925, 168931,
-    168937, 168943, 168948, 168953, 168959, 168965, 168972, 168979, 168987,
-    168995, 169000, 169008, 169012, 169021, 169030, 169036, 169040, 169044,
-    169048, 169051, 169056, 169058, 169060, 169062, 169069, 169074, 169081,
-    169088, 169095, 169103, 169111, 169119, 169127, 169135, 169143, 169151,
-    169159, 169167, 169173, 169179, 169185, 169191, 169197, 169203, 169209,
-    169215, 169221, 169227, 169233, 169239, 169242, 169251, 169260, 169262,
-    169269, 169273, 169275, 169277, 169281, 169287, 169291, 169293, 169303,
-    169309, 169313, 169315, 169319, 169321, 169325, 169332, 169339, 169346,
-    169351, 169356, 169365, 169371, 169376, 169380, 169385, 169389, 169396,
-    169400, 169403, 169408, 169415, 169422, 169427, 169432, 169437, 169443,
-    169452, 169463, 169469, 169475, 169481, 169491, 169506, 169515, 169523,
-    169531, 169539, 169547, 169555, 169563, 169571, 169579, 169587, 169595,
-    169603, 169611, 169614, 169618, 169623, 169628, 169630, 169634, 169643,
-    169652, 169660, 169664, 169668, 169673, 169678, 169683, 169685, 169690,
-    169694, 169696, 169700, 169704, 169710, 169715, 169723, 169728, 169733,
-    169738, 169745, 169748, 169750, 169753, 169758, 169764, 169768, 169772,
-    169778, 169784, 169786, 169790, 169794, 169798, 169802, 169806, 169808,
-    169810, 169812, 169814, 169820, 169826, 169830, 169832, 169834, 169836,
-    169845, 169849, 169856, 169863, 169865, 169868, 169872, 169878, 169882,
-    169886, 169888, 169896, 169900, 169904, 169909, 169914, 169919, 169924,
-    169929, 169934, 169939, 169944, 169949, 169954, 169958, 169964, 169968,
-    169974, 169979, 169986, 169992, 170000, 170004, 170011, 170015, 170019,
-    170023, 170028, 170033, 170035, 170039, 170048, 170056, 170064, 170077,
-    170090, 170103, 170110, 170117, 170121, 170130, 170138, 170142, 170151,
-    170158, 170162, 170166, 170170, 170174, 170181, 170185, 170189, 170193,
-    170197, 170204, 170213, 170222, 170229, 170241, 170253, 170257, 170261,
-    170265, 170269, 170273, 170277, 170285, 170293, 170301, 170305, 170309,
-    170313, 170317, 170321, 170325, 170331, 170337, 170341, 170352, 170360,
-    170364, 170368, 170372, 170376, 170382, 170389, 170400, 170410, 170420,
-    170431, 170440, 170451, 170457, 170463, 170469, 170475, 170481, 170485,
-    170492, 170501, 170508, 170514, 170518, 170522, 170526, 170535, 170547,
-    170551, 170558, 170565, 170572, 170580, 170587, 170595, 170603, 170612,
-    170620, 170629, 170638, 170648, 170657, 170667, 170677, 170688, 170698,
-    170709, 170716, 170724, 170731, 170739, 170747, 170756, 170764, 170773,
-    170780, 170792, 170799, 170811, 170814, 170818, 170821, 170825, 170831,
-    170838, 170844, 170851, 170856, 170862, 170873, 170883, 170894, 170899,
-    170904, 170910, 170915, 170922, 170926, 170932, 170934, 170936, 170940,
-    170944, 170948, 170957, 170959, 170961, 170964, 170966, 170968, 170972,
-    170974, 170978, 170980, 170984, 170986, 170988, 170992, 170996, 171002,
-    171004, 171008, 171010, 171014, 171018, 171022, 171026, 171028, 171030,
-    171034, 171038, 171042, 171046, 171048, 171050, 171052, 171058, 171063,
-    171066, 171074, 171082, 171084, 171089, 171092, 171097, 171108, 171115,
-    171120, 171125, 171127, 171131, 171133, 171137, 171139, 171143, 171147,
-    171150, 171153, 171155, 171158, 171160, 171164, 171166, 171168, 171170,
-    171174, 171176, 171180, 171183, 171190, 171193, 171198, 171201, 171204,
-    171209, 171213, 171217, 171221, 171223, 171228, 171231, 171235, 171237,
-    171239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171243, 171248, 171250, 171254,
-    171256, 171260, 171264, 171270, 171274, 171279, 171282, 171286, 171290,
-    0, 0, 0, 171294, 171296, 171302, 171306, 171310, 171312, 171316, 171318,
-    171320, 171324, 171326, 0, 0, 0, 0, 0, 171330, 171335, 171340, 171345,
-    171350, 171355, 171360, 171367, 171374, 171381, 171388, 171393, 171398,
-    171403, 171408, 171415, 171421, 171428, 171435, 171442, 171447, 171452,
-    171457, 171462, 171467, 171474, 171481, 171486, 171491, 171498, 171505,
-    171513, 171521, 171528, 171535, 171543, 171551, 171559, 171566, 171576,
-    171587, 171592, 171599, 171606, 171613, 171621, 171629, 171640, 171648,
-    171656, 171664, 171669, 171674, 171679, 171684, 171689, 171694, 171699,
-    171704, 171709, 171714, 171719, 171724, 171731, 171736, 171741, 171748,
-    171753, 171758, 171763, 171768, 171773, 171778, 171783, 171788, 171793,
-    171798, 171803, 171808, 171815, 171823, 171828, 171833, 171840, 171845,
-    171850, 171855, 171862, 171867, 171874, 171879, 171886, 171891, 171900,
-    171909, 171914, 171919, 171924, 171929, 171934, 171939, 171944, 171949,
-    171954, 171959, 171964, 171969, 171974, 171982, 171990, 171995, 172000,
-    172005, 172010, 172015, 172021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    172027, 172035, 172043, 172051, 172059, 172065, 172071, 172075, 172079,
-    172085, 172091, 172100, 172104, 172109, 172115, 172119, 172124, 172128,
-    172132, 172138, 172144, 172154, 172163, 172166, 172171, 172177, 172183,
-    172194, 172204, 172208, 172213, 172219, 172225, 172234, 172239, 172243,
-    172248, 172252, 172258, 172264, 172270, 172274, 172277, 172281, 172284,
-    172287, 172292, 172297, 172304, 172312, 172319, 172326, 172335, 172344,
-    172351, 172359, 172366, 172373, 172382, 172391, 172398, 172406, 172413,
-    172420, 172429, 172436, 172444, 172450, 172459, 172467, 172476, 172483,
-    172493, 172504, 172512, 172520, 172529, 172537, 172545, 172554, 172562,
-    172572, 172581, 172589, 172597, 172606, 172609, 172614, 172617, 0, 0, 0,
-    0, 0, 0, 0, 172622, 172628, 172634, 172640, 172646, 172652, 172658,
-    172664, 172670, 172676, 172682, 172688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 172694, 172702, 172711, 172719, 172728,
-    172737, 172747, 172756, 172766, 172775, 172785, 172794, 0, 0, 0, 0,
-    172804, 172812, 172821, 172829, 172838, 172845, 172853, 172860, 172868,
-    172876, 172885, 172893, 172902, 172912, 172923, 172933, 172944, 172953,
-    172963, 172972, 172982, 172991, 173001, 173010, 173020, 173028, 173037,
-    173045, 173054, 173062, 173071, 173079, 173088, 173098, 173109, 173119,
-    173130, 173134, 173139, 173143, 173148, 173151, 173155, 173158, 173162,
-    173166, 173171, 173175, 173180, 173185, 173191, 173196, 173202, 173205,
-    173209, 173212, 0, 0, 0, 0, 0, 0, 0, 0, 173216, 173219, 173223, 173226,
-    173230, 173235, 173240, 173246, 173252, 173256, 0, 0, 0, 0, 0, 0, 173260,
-    173266, 173273, 173279, 173286, 173294, 173302, 173311, 173320, 173325,
-    173331, 173336, 173342, 173349, 173356, 173364, 173372, 173379, 173387,
-    173394, 173402, 173411, 173420, 173430, 173440, 173446, 173453, 173459,
-    173466, 173474, 173482, 173491, 173500, 173508, 173517, 173525, 173534,
-    173544, 173554, 173565, 0, 0, 0, 0, 0, 0, 0, 0, 173576, 173581, 173587,
-    173592, 173598, 173607, 173617, 173626, 173636, 173643, 173651, 173658,
-    173666, 173673, 173682, 173691, 173700, 173705, 173712, 173719, 173726,
-    173731, 173736, 173741, 173746, 173753, 173760, 173767, 173774, 173781,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151645, 151651, 151656, 151661,
+    151666, 151671, 151676, 151681, 151686, 151691, 151696, 151702, 151708,
+    151714, 151720, 151726, 151732, 151738, 151744, 151750, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 151756, 151761, 151768, 151775, 151782, 151789, 151794,
+    151799, 151806, 151811, 151816, 151823, 151828, 151833, 151838, 151845,
+    151854, 151859, 151864, 151869, 151874, 151879, 151884, 151891, 151896,
+    151901, 151906, 151911, 151916, 151921, 151926, 151931, 151936, 151941,
+    151946, 151951, 151957, 151962, 151967, 151972, 151977, 151982, 151987,
+    151992, 151997, 152002, 152011, 152016, 152024, 152029, 152034, 152039,
+    152044, 152049, 152054, 152059, 152068, 152073, 152078, 152083, 152088,
+    152093, 152100, 152105, 152112, 152117, 152122, 152127, 152132, 152137,
+    152142, 152147, 152152, 152157, 152162, 152167, 152172, 152177, 152182,
+    152187, 152192, 152197, 152202, 152207, 152216, 152221, 152226, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 152231, 152239, 152247, 152255, 152263, 152271, 152279,
+    152287, 152295, 152303, 152311, 152319, 152327, 152335, 152343, 152351,
+    152359, 152367, 152375, 152380, 152385, 152390, 152395, 152400, 152404,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173790, 173800, 173809, 173814, 173823,
-    173831, 173839, 173846, 173850, 173855, 173862, 173871, 0, 173882,
-    173885, 173889, 173893, 173897, 173901, 173906, 173910, 173914, 173919,
-    173923, 173927, 173933, 173939, 173946, 173950, 173954, 173956, 173966,
-    173975, 173982, 173986, 173990, 174000, 174004, 174008, 174012, 174016,
-    174024, 174033, 174046, 174057, 174068, 174084, 174092, 174101, 174105,
-    174107, 174112, 174114, 174116, 174122, 174126, 174128, 174134, 174136,
-    174138, 174142, 174144, 174148, 174150, 174154, 174158, 174163, 174167,
-    174171, 174173, 174177, 174179, 174185, 174191, 174197, 174201, 174207,
-    174211, 174218, 174220, 174224, 174226, 174228, 174230, 174232, 174234,
-    174236, 174240, 174244, 174251, 174255, 174257, 174262, 174264, 174266,
-    174268, 174270, 174274, 174278, 174280, 174285, 174290, 174292, 174294,
-    174296, 174298, 174303, 174305, 174309, 174313, 174315, 174319, 174321,
-    174334, 0, 174338, 174350, 174362, 174366, 0, 0, 0, 174370, 174377,
-    174379, 174383, 174385, 174389, 174393, 174395, 174399, 174401, 174403,
-    174407, 174409, 174411, 174413, 174415, 174417, 174421, 174423, 174425,
-    174427, 174429, 174431, 174433, 174435, 174439, 174443, 174445, 174447,
-    174449, 174451, 174453, 174455, 174457, 174459, 174461, 174463, 174465,
-    174467, 174469, 174471, 0, 0, 174473, 174475, 174477, 174479, 174481,
-    174483, 0, 0, 0, 174485, 174489, 174493, 174501, 174509, 174515, 174522,
-    174524, 174526, 174528, 174530, 174532, 174534, 174538, 174545, 174549,
-    174553, 174557, 174561, 174565, 174567, 174571, 174575, 174577, 174579,
-    174581, 174583, 174585, 174589, 0, 0, 174593, 174597, 174601, 174605,
-    174610, 174612, 174614, 174618, 174622, 174627, 174635, 174639, 174647,
-    174649, 174651, 174653, 174655, 174657, 174659, 174661, 174663, 174667,
-    174671, 174673, 174675, 174677, 174679, 174685, 174687, 174693, 174697,
-    174701, 174706, 174708, 174710, 174714, 174716, 174718, 174720, 174722,
-    174726, 174731, 174736, 174740, 174744, 174746, 174748, 174753, 174758,
-    174760, 174762, 174766, 174772, 174778, 174784, 174790, 174796, 174802,
-    174813, 174824, 174836, 174847, 174858, 174869, 174880, 174891, 174902,
-    174913, 174924, 174935, 174946, 174957, 174968, 174980, 174992, 175004,
-    175016, 175028, 175040, 175054, 175068, 175083, 175089, 175095, 175101,
-    175107, 175113, 175119, 175125, 175131, 175137, 175143, 175149, 175155,
-    175162, 175169, 175176, 175183, 175190, 175197, 175211, 175225, 175240,
-    175254, 175268, 175282, 175296, 175310, 175324, 175338, 175352, 175366,
-    175380, 175394, 175408, 175423, 175438, 175453, 175468, 175483, 175498,
-    175512, 175526, 175541, 175546, 175551, 175557, 175568, 175579, 175591,
-    175596, 175601, 175606, 175611, 175616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 175621, 175627, 175633, 175639, 175645, 175651, 175657, 175663,
-    175668, 175673, 175678, 175683, 175688, 175693, 0, 0, 175698, 175702,
-    175706, 175708, 0, 0, 0, 0, 175710, 175715, 175719, 0, 0, 0, 0, 0,
-    175721, 175723, 175725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175727,
-    175731, 175733, 175735, 175737, 175741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152408, 152412, 152417,
+    152422, 152427, 152431, 152436, 152441, 152446, 152450, 152455, 152460,
+    152464, 152469, 152474, 152478, 152483, 152488, 152492, 152497, 152502,
+    152506, 152511, 152516, 152521, 152526, 152531, 152535, 152540, 152545,
+    152550, 152554, 152559, 152564, 152569, 152573, 152578, 152583, 152587,
+    152592, 152597, 152601, 152606, 152611, 152615, 152620, 152625, 152629,
+    152634, 152639, 152644, 152649, 152654, 152658, 152663, 152668, 152673,
+    152677, 152682, 152687, 152692, 152696, 152701, 152706, 152710, 152715,
+    152720, 152724, 152729, 152734, 152738, 152743, 152748, 152752, 152757,
+    152762, 152767, 152772, 152777, 152781, 152786, 152791, 152796, 152800,
+    152805, 0, 152810, 152814, 152819, 152824, 152828, 152833, 152838,
+    152842, 152847, 152852, 152856, 152861, 152866, 152870, 152875, 152880,
+    152885, 152890, 152895, 152900, 152906, 152912, 152918, 152923, 152929,
+    152935, 152941, 152946, 152952, 152958, 152963, 152969, 152975, 152980,
+    152986, 152992, 152997, 153003, 153009, 153014, 153020, 153026, 153032,
+    153038, 153044, 153049, 153055, 153061, 153067, 153072, 153078, 153084,
+    153090, 153095, 153101, 153107, 153112, 153118, 153124, 153129, 153135,
+    153141, 153146, 153152, 153158, 153163, 153169, 153175, 153181, 153187,
+    153193, 0, 153197, 153202, 0, 0, 153207, 0, 0, 153212, 153217, 0, 0,
+    153222, 153227, 153231, 153236, 0, 153241, 153246, 153251, 153255,
+    153260, 153265, 153270, 153275, 153280, 153284, 153289, 153294, 0,
+    153299, 0, 153304, 153309, 153313, 153318, 153323, 153327, 153332, 0,
+    153337, 153342, 153347, 153351, 153356, 153361, 153365, 153370, 153375,
+    153380, 153385, 153390, 153395, 153401, 153407, 153413, 153418, 153424,
+    153430, 153436, 153441, 153447, 153453, 153458, 153464, 153470, 153475,
+    153481, 153487, 153492, 153498, 153504, 153509, 153515, 153521, 153527,
+    153533, 153539, 153544, 153550, 153556, 153562, 153567, 153573, 153579,
+    153585, 153590, 153596, 153602, 153607, 153613, 153619, 153624, 153630,
+    153636, 153641, 153647, 153653, 153658, 153664, 153670, 153676, 153682,
+    153688, 153693, 0, 153699, 153705, 153710, 153716, 0, 0, 153722, 153728,
+    153734, 153739, 153745, 153751, 153756, 153762, 0, 153768, 153774,
+    153780, 153785, 153791, 153797, 153803, 0, 153809, 153814, 153820,
+    153826, 153832, 153837, 153843, 153849, 153855, 153860, 153866, 153872,
+    153877, 153883, 153889, 153894, 153900, 153906, 153911, 153917, 153923,
+    153928, 153934, 153940, 153946, 153952, 153958, 153963, 0, 153969,
+    153975, 153980, 153986, 0, 153992, 153997, 154003, 154009, 154014, 0,
+    154020, 0, 0, 0, 154025, 154031, 154037, 154042, 154048, 154054, 154060,
+    0, 154066, 154071, 154077, 154083, 154089, 154094, 154100, 154106,
+    154112, 154117, 154123, 154129, 154134, 154140, 154146, 154151, 154157,
+    154163, 154168, 154174, 154180, 154185, 154191, 154197, 154203, 154209,
+    154215, 154221, 154228, 154235, 154242, 154248, 154255, 154262, 154269,
+    154275, 154282, 154289, 154295, 154302, 154309, 154315, 154322, 154329,
+    154335, 154342, 154349, 154355, 154362, 154369, 154376, 154383, 154390,
+    154396, 154403, 154410, 154417, 154423, 154430, 154437, 154444, 154450,
+    154457, 154464, 154470, 154477, 154484, 154490, 154497, 154504, 154510,
+    154517, 154524, 154530, 154537, 154544, 154551, 154558, 154565, 154569,
+    154574, 154579, 154584, 154588, 154593, 154598, 154603, 154607, 154612,
+    154617, 154621, 154626, 154631, 154635, 154640, 154645, 154649, 154654,
+    154659, 154663, 154668, 154673, 154678, 154683, 154688, 154692, 154697,
+    154702, 154707, 154711, 154716, 154721, 154726, 154730, 154735, 154740,
+    154744, 154749, 154754, 154758, 154763, 154768, 154772, 154777, 154782,
+    154786, 154791, 154796, 154801, 154806, 154811, 154816, 154822, 154828,
+    154834, 154839, 154845, 154851, 154857, 154862, 154868, 154874, 154879,
+    154885, 154891, 154896, 154902, 154908, 154913, 154919, 154925, 154930,
+    154936, 154942, 154948, 154954, 154960, 154965, 154971, 154977, 154983,
+    154988, 154994, 155000, 155006, 155011, 155017, 155023, 155028, 155034,
+    155040, 155045, 155051, 155057, 155062, 155068, 155074, 155079, 155085,
+    155091, 155097, 155103, 155109, 155114, 155120, 155126, 155132, 155137,
+    155143, 155149, 155155, 155160, 155166, 155172, 155177, 155183, 155189,
+    155194, 155200, 155206, 155211, 155217, 155223, 155228, 155234, 155240,
+    155246, 155252, 155258, 155263, 155269, 155275, 155281, 155286, 155292,
+    155298, 155304, 155309, 155315, 155321, 155326, 155332, 155338, 155343,
+    155349, 155355, 155360, 155366, 155372, 155377, 155383, 155389, 155395,
+    155401, 155407, 155413, 155420, 155427, 155434, 155440, 155447, 155454,
+    155461, 155467, 155474, 155481, 155487, 155494, 155501, 155507, 155514,
+    155521, 155527, 155534, 155541, 155547, 155554, 155561, 155568, 155575,
+    155582, 155588, 155595, 155602, 155609, 155615, 155622, 155629, 155636,
+    155642, 155649, 155656, 155662, 155669, 155676, 155682, 155689, 155696,
+    155702, 155709, 155716, 155722, 155729, 155736, 155743, 155750, 155757,
+    155762, 155768, 155774, 155780, 155785, 155791, 155797, 155803, 155808,
+    155814, 155820, 155825, 155831, 155837, 155842, 155848, 155854, 155859,
+    155865, 155871, 155876, 155882, 155888, 155894, 155900, 155906, 155911,
+    155917, 155923, 155929, 155934, 155940, 155946, 155952, 155957, 155963,
+    155969, 155974, 155980, 155986, 155991, 155997, 156003, 156008, 156014,
+    156020, 156025, 156031, 156037, 156043, 156049, 156055, 156061, 0, 0,
+    156068, 156073, 156078, 156083, 156088, 156093, 156098, 156103, 156108,
+    156113, 156118, 156123, 156128, 156133, 156138, 156143, 156148, 156153,
+    156159, 156164, 156169, 156174, 156179, 156184, 156189, 156194, 156198,
+    156203, 156208, 156213, 156218, 156223, 156228, 156233, 156238, 156243,
+    156248, 156253, 156258, 156263, 156268, 156273, 156278, 156283, 156289,
+    156294, 156299, 156304, 156309, 156314, 156319, 156324, 156330, 156335,
+    156340, 156345, 156350, 156355, 156360, 156365, 156370, 156375, 156380,
+    156385, 156390, 156395, 156400, 156405, 156410, 156415, 156420, 156425,
+    156430, 156435, 156440, 156445, 156451, 156456, 156461, 156466, 156471,
+    156476, 156481, 156486, 156490, 156495, 156500, 156505, 156510, 156515,
+    156520, 156525, 156530, 156535, 156540, 156545, 156550, 156555, 156560,
+    156565, 156570, 156575, 156581, 156586, 156591, 156596, 156601, 156606,
+    156611, 156616, 156622, 156627, 156632, 156637, 156642, 156647, 156652,
+    156658, 156664, 156670, 156676, 156682, 156688, 156694, 156700, 156706,
+    156712, 156718, 156724, 156730, 156736, 156742, 156748, 156754, 156761,
+    156767, 156773, 156779, 156785, 156791, 156797, 156803, 156808, 156814,
+    156820, 156826, 156832, 156838, 156844, 156850, 156856, 156862, 156868,
+    156874, 156880, 156886, 156892, 156898, 156904, 156910, 156917, 156923,
+    156929, 156935, 156941, 156947, 156953, 156959, 156966, 156972, 156978,
+    156984, 156990, 156996, 157002, 157008, 157014, 157020, 157026, 157032,
+    157038, 157044, 157050, 157056, 157062, 157068, 157074, 157080, 157086,
+    157092, 157098, 157104, 157111, 157117, 157123, 157129, 157135, 157141,
+    157147, 157153, 157158, 157164, 157170, 157176, 157182, 157188, 157194,
+    157200, 157206, 157212, 157218, 157224, 157230, 157236, 157242, 157248,
+    157254, 157260, 157267, 157273, 157279, 157285, 157291, 157297, 157303,
+    157309, 157316, 157322, 157328, 157334, 157340, 157346, 157352, 157359,
+    157366, 157373, 157380, 157387, 157394, 157401, 157408, 157415, 157422,
+    157429, 157436, 157443, 157450, 157457, 157464, 157471, 157479, 157486,
+    157493, 157500, 157507, 157514, 157521, 157528, 157534, 157541, 157548,
+    157555, 157562, 157569, 157576, 157583, 157590, 157597, 157604, 157611,
+    157618, 157625, 157632, 157639, 157646, 157653, 157661, 157668, 157675,
+    157682, 157689, 157696, 157703, 157710, 157718, 157725, 157732, 157739,
+    157746, 157753, 157760, 157765, 0, 0, 157770, 157775, 157779, 157783,
+    157787, 157791, 157795, 157799, 157803, 157807, 157811, 157817, 157822,
+    157827, 157832, 157837, 157842, 157847, 157852, 157857, 157862, 157867,
+    157871, 157875, 157879, 157883, 157887, 157891, 157895, 157899, 157903,
+    157909, 157914, 157919, 157924, 157929, 157934, 157939, 157944, 157949,
+    157954, 157960, 157965, 157970, 157975, 157980, 157985, 157990, 157995,
+    158000, 158005, 158009, 158014, 158019, 158024, 158029, 158034, 158039,
+    158045, 158053, 158060, 158065, 158070, 158077, 158083, 158088, 158094,
+    158100, 158108, 158114, 158121, 158129, 158135, 158144, 158153, 158161,
+    158169, 158175, 158182, 158190, 158198, 158204, 158211, 158220, 158229,
+    158236, 158247, 158257, 158267, 158277, 158287, 158294, 158301, 158308,
+    158315, 158324, 158333, 158344, 158355, 158364, 158373, 158384, 158393,
+    158402, 158413, 158422, 158431, 158439, 158447, 158458, 158469, 158477,
+    158486, 158495, 158502, 158513, 158524, 158533, 158542, 158549, 158558,
+    158567, 158576, 158587, 158596, 158606, 158615, 158624, 158635, 158648,
+    158663, 158674, 158687, 158699, 158708, 158719, 158730, 158739, 158750,
+    158764, 158779, 158782, 158791, 158796, 158802, 158810, 158816, 158822,
+    158831, 158838, 158848, 158860, 158867, 158870, 158876, 158883, 158889,
+    158894, 158897, 158902, 158905, 158913, 158919, 158928, 158935, 158943,
+    158949, 158954, 158957, 158960, 158963, 158969, 158976, 158982, 158987,
+    158995, 158998, 159003, 159011, 159017, 159026, 159033, 159043, 159052,
+    159055, 159061, 159068, 159075, 159082, 159087, 159095, 159103, 159112,
+    159118, 159127, 159136, 159145, 159151, 159160, 159167, 159174, 159181,
+    159189, 159195, 159203, 159209, 159216, 159223, 159231, 159242, 159252,
+    159258, 159265, 159272, 159279, 159285, 159292, 159299, 159304, 159311,
+    159319, 159328, 159334, 159346, 159357, 159363, 159371, 159377, 159384,
+    159391, 159398, 159404, 159411, 159420, 159426, 159432, 159439, 159446,
+    159454, 159464, 159474, 159484, 159494, 159502, 159510, 159520, 159528,
+    159533, 159538, 159543, 159549, 159556, 159563, 159569, 159575, 159580,
+    159587, 159595, 159605, 159613, 159621, 159631, 159641, 159649, 159659,
+    159669, 159681, 159693, 159705, 159715, 159721, 159727, 159734, 159743,
+    159752, 159761, 159770, 159780, 159789, 159798, 159807, 159812, 159818,
+    159827, 159837, 159846, 159852, 159858, 159865, 159872, 159879, 159885,
+    159892, 159899, 159906, 159912, 159916, 159921, 159928, 159935, 159942,
+    159947, 159955, 159963, 159972, 159980, 159987, 159995, 160004, 160014,
+    160017, 160021, 160026, 160031, 160036, 160041, 160046, 160051, 160056,
+    160061, 160066, 160071, 160076, 160081, 160086, 160091, 160096, 160101,
+    160106, 160113, 160119, 160126, 160132, 160137, 160144, 160150, 160157,
+    160163, 160168, 160175, 160182, 160189, 160195, 160201, 160210, 160219,
+    160229, 160236, 160243, 160252, 160261, 160270, 160279, 160288, 160294,
+    160302, 160308, 160318, 160323, 160332, 160341, 160348, 160359, 160366,
+    160373, 160380, 160387, 160394, 160401, 160408, 160415, 160422, 160429,
+    160435, 160441, 160447, 160454, 160461, 160468, 160475, 160482, 160489,
+    160496, 160503, 160510, 160517, 160524, 160531, 160536, 160545, 160554,
+    160563, 160570, 160577, 160584, 160591, 160598, 160605, 160612, 160619,
+    160628, 160637, 160646, 160655, 160664, 160673, 160682, 160691, 160700,
+    160709, 160718, 160727, 160736, 160742, 160750, 160756, 160766, 160771,
+    160780, 160789, 160798, 160809, 160814, 160821, 160828, 160835, 160840,
+    160846, 160852, 160858, 160865, 160872, 160879, 160886, 160893, 160900,
+    160907, 160914, 160921, 160928, 160935, 160942, 160947, 160956, 160965,
+    160974, 160983, 160992, 161001, 161010, 161019, 161030, 161041, 161048,
+    161055, 161062, 161069, 161076, 161083, 161091, 161101, 161111, 161121,
+    161132, 161143, 161154, 161163, 161172, 161181, 161186, 161191, 161196,
+    161201, 161212, 161223, 161234, 161245, 161256, 161266, 161277, 161286,
+    161295, 161304, 161313, 161322, 161330, 161339, 161350, 161361, 161372,
+    161383, 161394, 161406, 161419, 161431, 161444, 161456, 161469, 161481,
+    161494, 161505, 161516, 161525, 161533, 161542, 161553, 161564, 161576,
+    161589, 161603, 161618, 161630, 161643, 161655, 161668, 161679, 161690,
+    161699, 161707, 161716, 161723, 161730, 161737, 161744, 161751, 161758,
+    161765, 161772, 161779, 161786, 161791, 161796, 161801, 161808, 161818,
+    161829, 161839, 161850, 161864, 161879, 161894, 161908, 161923, 161938,
+    161949, 161960, 161973, 161986, 161995, 162004, 162017, 162030, 162037,
+    162044, 162049, 162054, 162059, 162064, 162069, 162076, 162085, 162090,
+    162093, 162098, 162105, 162112, 162119, 162126, 162133, 162140, 162153,
+    162167, 162182, 162189, 162196, 162203, 162212, 162220, 162228, 162237,
+    162242, 162247, 162252, 162257, 162262, 162267, 162274, 162281, 162287,
+    162294, 162300, 162307, 162312, 162317, 162322, 162327, 162332, 162339,
+    162346, 162351, 162358, 162365, 162370, 162375, 162380, 162385, 162390,
+    162395, 162402, 162409, 162416, 162419, 162424, 162429, 162434, 162439,
+    162446, 162453, 162461, 162469, 162474, 162479, 162486, 162493, 162500,
+    162505, 162512, 162519, 162524, 162531, 162538, 162545, 162552, 162559,
+    162566, 162575, 162584, 162591, 162600, 162609, 162614, 162621, 162628,
+    162633, 162640, 162647, 162654, 162661, 162668, 162673, 162680, 162687,
+    162696, 162703, 162712, 162723, 162732, 162741, 162750, 162759, 162762,
+    162767, 162774, 162783, 162790, 162799, 162806, 162811, 162816, 162819,
+    162822, 162825, 162832, 162839, 162848, 162857, 162866, 162873, 162880,
+    162885, 162897, 162902, 162907, 162912, 162917, 162922, 162927, 162932,
+    162937, 162940, 162945, 162950, 162955, 162960, 162965, 162972, 162977,
+    162984, 162987, 162992, 162995, 162998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 163001, 163006, 163011, 163016, 163021, 0, 163026, 163031,
+    163036, 163041, 163046, 163051, 163056, 163061, 163066, 163071, 163076,
+    163081, 163086, 163091, 163096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163101, 163106,
+    163111, 163116, 163121, 163126, 163131, 0, 163136, 163141, 163146,
+    163152, 163156, 163161, 163166, 163171, 163176, 163181, 163186, 163191,
+    163196, 163201, 163206, 163211, 163216, 0, 0, 163221, 163226, 163231,
+    163236, 163241, 163246, 163251, 0, 163256, 163261, 0, 163267, 163272,
+    163280, 163287, 163296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    175743, 175747, 175751, 175755, 175759, 175763, 175767, 175771, 175775,
-    175779, 175783, 175787, 175791, 175795, 175799, 175803, 175807, 175811,
-    175815, 175819, 175823, 175827, 175831, 175835, 175839, 175843, 175847,
-    175851, 175855, 175859, 175863, 175867, 175871, 175875, 175879, 175883,
-    175887, 175891, 175895, 175899, 175903, 175907, 175911, 175915, 175919,
-    175923, 175927, 175931, 175935, 175939, 175943, 175947, 175951, 175955,
-    175959, 175963, 175967, 175971, 175975, 175979, 175983, 175987, 175991,
-    175995, 175999, 176003, 176007, 176011, 176015, 176019, 176023, 176027,
-    176031, 176035, 176039, 176043, 176047, 176051, 176055, 176059, 176063,
-    176067, 176071, 176075, 176079, 176083, 176087, 176091, 176095, 176099,
-    176103, 176107, 176111, 176115, 176119, 176123, 176127, 176131, 176135,
-    176139, 176143, 176147, 176151, 176155, 176159, 176163, 176167, 176171,
-    176175, 176179, 176183, 176187, 176191, 176195, 176199, 176203, 176207,
-    176211, 176215, 176219, 176223, 176227, 176231, 176235, 176239, 176243,
-    176247, 176251, 176255, 176259, 176263, 176267, 176271, 176275, 176279,
-    176283, 176287, 176291, 176295, 176299, 176303, 176307, 176311, 176315,
-    176319, 176323, 176327, 176331, 176335, 176339, 176343, 176347, 176351,
-    176355, 176359, 176363, 176367, 176371, 176375, 176379, 176383, 176387,
-    176391, 176395, 176399, 176403, 176407, 176411, 176415, 176419, 176423,
-    176427, 176431, 176435, 176439, 176443, 176447, 176451, 176455, 176459,
-    176463, 176467, 176471, 176475, 176479, 176483, 176487, 176491, 176495,
-    176499, 176503, 176507, 176511, 176515, 176519, 176523, 176527, 176531,
-    176535, 176539, 176543, 176547, 176551, 176555, 176559, 176563, 176567,
-    176571, 176575, 176579, 176583, 176587, 176591, 176595, 176599, 176603,
-    176607, 176611, 176615, 176619, 176623, 176627, 176631, 176635, 176639,
-    176643, 176647, 176651, 176655, 176659, 176663, 176667, 176671, 176675,
-    176679, 176683, 176687, 176691, 176695, 176699, 176703, 176707, 176711,
-    176715, 176719, 176723, 176727, 176731, 176735, 176739, 176743, 176747,
-    176751, 176755, 176759, 176763, 176767, 176771, 176775, 176779, 176783,
-    176787, 176791, 176795, 176799, 176803, 176807, 176811, 176815, 176819,
-    176823, 176827, 176831, 176835, 176839, 176843, 176847, 176851, 176855,
-    176859, 176863, 176867, 176871, 176875, 176879, 176883, 176887, 176891,
-    176895, 176899, 176903, 176907, 176911, 176915, 176919, 176923, 176927,
-    176931, 176935, 176939, 176943, 176947, 176951, 176955, 176959, 176963,
-    176967, 176971, 176975, 176979, 176983, 176987, 176991, 176995, 176999,
-    177003, 177007, 177011, 177015, 177019, 177023, 177027, 177031, 177035,
-    177039, 177043, 177047, 177051, 177055, 177059, 177063, 177067, 177071,
-    177075, 177079, 177083, 177087, 177091, 177095, 177099, 177103, 177107,
-    177111, 177115, 177119, 177123, 177127, 177131, 177135, 177139, 177143,
-    177147, 177151, 177155, 177159, 177163, 177167, 177171, 177175, 177179,
-    177183, 177187, 177191, 177195, 177199, 177203, 177207, 177211, 177215,
-    177219, 177223, 177227, 177231, 177235, 177239, 177243, 177247, 177251,
-    177255, 177259, 177263, 177267, 177271, 177275, 177279, 177283, 177287,
-    177291, 177295, 177299, 177303, 177307, 177311, 177315, 177319, 177323,
-    177327, 177331, 177335, 177339, 177343, 177347, 177351, 177355, 177359,
-    177363, 177367, 177371, 177375, 177379, 177383, 177387, 177391, 177395,
-    177399, 177403, 177407, 177411, 177415, 177419, 177423, 177427, 177431,
-    177435, 177439, 177443, 177447, 177451, 177455, 177459, 177463, 177467,
-    177471, 177475, 177479, 177483, 177487, 177491, 177495, 177499, 177503,
-    177507, 177511, 177515, 177519, 177523, 177527, 177531, 177535, 177539,
-    177543, 177547, 177551, 177555, 177559, 177563, 177567, 177571, 177575,
-    177579, 177583, 177587, 177591, 177595, 177599, 177603, 177607, 177611,
-    177615, 177619, 177623, 177627, 177631, 177635, 177639, 177643, 177647,
-    177651, 177655, 177659, 177663, 177667, 177671, 177675, 177679, 177683,
-    177687, 177691, 177695, 177699, 177703, 177707, 177711, 177715, 177719,
-    177723, 177727, 177731, 177735, 177739, 177743, 177747, 177751, 177755,
-    177759, 177763, 177767, 177771, 177775, 177779, 177783, 177787, 177791,
-    177795, 177799, 177803, 177807, 177811, 177815, 177819, 177823, 177827,
-    177831, 177835, 177839, 177843, 177847, 177851, 177855, 177859, 177863,
-    177867, 177871, 177875, 177879, 177883, 177887, 177891, 177895, 177899,
-    177903, 177907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 177911, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177915, 177918, 177922,
-    177926, 177929, 177933, 177937, 177940, 177943, 177947, 177951, 177954,
-    177957, 177960, 177963, 177968, 177971, 177975, 177978, 177981, 177984,
-    177987, 177990, 177993, 177996, 177999, 178002, 178005, 178008, 178012,
-    178016, 178020, 178024, 178029, 178034, 178040, 178046, 178052, 178057,
-    178063, 178069, 178075, 178080, 178086, 178092, 178097, 178103, 178109,
-    178114, 178120, 178126, 178131, 178137, 178143, 178148, 178154, 178160,
-    178166, 178172, 178178, 178182, 178187, 178191, 178196, 178200, 178205,
-    178210, 178216, 178222, 178228, 178233, 178239, 178245, 178251, 178256,
-    178262, 178268, 178273, 178279, 178285, 178290, 178296, 178302, 178307,
-    178313, 178319, 178324, 178330, 178336, 178342, 178348, 178354, 178359,
-    178363, 178368, 178371, 178375, 178378, 178381, 178384, 178387, 178390,
-    178393, 178396, 178399, 178402, 178405, 178408, 178411, 178414, 178417,
-    178420, 178423, 178426, 178429, 178432, 178435, 178438, 178441, 178444,
-    178447, 178450, 178453, 178456, 178459, 178462, 178465, 178468, 178471,
-    178474, 178477, 178480, 178483, 178486, 178489, 178492, 178495, 178498,
-    178501, 178504, 178507, 178510, 178513, 178516, 178519, 178522, 178525,
-    178528, 178531, 178534, 178537, 178540, 178543, 178546, 178549, 178552,
-    178555, 178558, 178561, 178564, 178567, 178570, 178573, 178576, 178579,
-    178582, 178585, 178588, 178591, 178594, 178597, 178600, 178603, 178606,
-    178609, 178612, 178615, 178618, 178621, 178624, 178627, 178630, 178633,
-    178636, 178639, 178642, 178645, 178648, 178651, 178654, 178657, 178660,
-    178663, 178666, 178669, 178672, 178675, 178678, 178681, 178684, 178687,
-    178690, 178693, 178696, 178699, 178702, 178705, 178708, 178711, 178714,
-    178717, 178720, 178723, 178726, 178729, 178732, 178735, 178738, 178741,
-    178744, 178747, 178750, 178753, 178756, 178759, 178762, 178765, 178768,
-    178771, 178774, 178777, 178780, 178783, 178786, 178789, 178792, 178795,
-    178798, 178801, 178804, 178807, 178810, 178813, 178816, 178819, 178822,
-    178825, 178828, 178831, 178834, 178837, 178840, 178843, 178846, 178849,
-    178852, 178855, 178858, 178861, 178864, 178867, 178870, 178873, 178876,
-    178879, 178882, 178885, 178888, 178891, 178894, 178897, 178900, 178903,
-    178906, 178909, 178912, 178915, 178918, 178921, 178924, 178927, 178930,
-    178933, 178936, 178939, 178942, 178945, 178948, 178951, 178954, 178957,
-    178960, 178963, 178966, 178969, 178972, 178975, 178978, 178981, 178984,
-    178987, 178990, 178993, 178996, 178999, 179002, 179005, 179008, 179011,
-    179014, 179017, 179020, 179023, 179026, 179029, 179032, 179035, 179038,
-    179041, 179044, 179047, 179050, 179053, 179056, 179059, 179062, 179065,
-    179068, 179071, 179074, 179077, 179080, 179083, 179086, 179089, 179092,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179095, 179097, 179099,
-    179104, 179106, 179111, 179113, 179118, 179120, 179125, 179127, 179129,
-    179131, 179133, 179135, 179137, 179139, 179141, 179143, 179146, 179150,
-    179152, 179154, 179158, 179162, 179167, 179169, 179171, 179173, 179177,
-    179180, 179182, 179186, 179188, 179192, 179194, 179198, 179201, 179203,
-    179207, 179211, 179213, 179219, 179221, 179226, 179228, 179233, 179235,
-    179240, 179242, 179247, 179249, 179253, 179255, 179259, 179261, 179268,
-    179270, 179272, 179274, 179279, 179281, 179283, 179285, 179287, 179289,
-    179294, 179298, 179300, 179305, 179309, 179311, 179316, 179320, 179322,
-    179327, 179331, 179333, 179335, 179337, 179339, 179343, 179345, 179350,
-    179352, 179358, 179360, 179366, 179368, 179370, 179372, 179376, 179378,
-    179385, 179387, 179394, 179396, 179401, 179407, 179409, 179415, 179422,
-    179424, 179430, 179435, 179437, 179443, 179449, 179451, 179457, 179463,
-    179465, 179471, 179475, 179477, 179482, 179484, 179486, 179491, 179493,
-    179495, 179501, 179503, 179508, 179512, 179514, 179519, 179523, 179525,
-    179531, 179533, 179537, 179539, 179543, 179545, 179552, 179559, 179561,
-    179568, 179575, 179577, 179582, 179584, 179591, 179593, 179598, 179600,
-    179606, 179608, 179612, 179614, 179620, 179622, 179626, 179628, 179634,
-    179636, 179638, 179640, 179645, 179650, 179652, 179654, 179664, 179669,
-    179676, 179683, 179688, 179693, 179705, 179709, 179713, 179717, 179721,
-    179723, 179725, 179727, 179729, 179731, 179733, 179735, 179737, 179739,
-    179741, 179743, 179745, 179747, 179749, 179751, 179753, 179755, 179757,
-    179759, 179761, 179763, 179769, 179776, 179781, 179789, 179797, 179802,
-    179804, 179806, 179808, 179810, 179812, 179814, 179816, 179818, 179820,
-    179822, 179824, 179826, 179828, 179830, 179832, 179834, 179845, 179850,
-    179852, 179854, 179860, 179872, 179878, 179884, 179890, 179896, 179900,
-    179911, 179913, 179915, 179917, 179919, 179921, 179923, 179925, 179927,
-    179929, 179931, 179933, 179935, 179937, 179939, 179941, 179943, 179945,
-    179947, 179949, 179951, 179953, 179955, 179957, 179959, 179961, 179963,
-    179965, 179967, 179969, 179971, 179973, 179975, 179977, 179979, 179981,
-    179983, 179985, 179987, 179989, 179991, 179993, 179995, 179997, 179999,
-    180001, 180003, 180005, 180007, 180009, 180011, 180013, 180015, 180017,
-    180019, 180021, 180023, 180025, 180027, 180029, 180031, 180033, 180035,
-    180037, 180039, 180041, 180043, 180045, 180047, 180049, 180051, 180053,
-    180055, 180057, 180059, 180061, 180063, 180065, 180067, 180069, 180071,
-    180073, 180075, 180077, 180079, 180081, 180083, 180085, 180087, 180089,
-    180091, 180093, 180095, 180097, 180099, 180101, 180103, 180105, 180107,
-    180109, 180111, 180113, 180115, 180117, 180119, 180121, 180123, 180125,
-    180127, 180129, 180131, 180133, 180135, 180137, 180139, 180141, 180143,
-    180145, 180147, 180149, 180151, 180153, 180155, 180157, 180159, 180161,
-    180163, 180165, 180167, 180169, 180171, 180173, 180175, 180177, 180179,
-    180181, 180183, 180185, 180187, 180189, 180191, 180193, 180195, 180197,
-    180199, 180201, 180203, 180205, 180207, 180209, 180211, 180213, 180215,
-    180217, 180219, 180221, 180223, 180225, 180227, 180229, 180231, 180233,
-    180235, 180237, 180239, 180241, 180243, 180245, 180247, 180249, 180251,
-    180253, 180255, 180257, 180259, 180261, 180263, 180265, 180267, 180269,
-    180271, 180273, 180275, 180277, 180279, 180281, 180283, 180285, 180287,
-    180289, 180291, 180293, 180295, 180297, 180299, 180301, 180303, 180305,
-    180307, 180309, 180311, 180313, 180315, 180317, 180319, 180321, 180323,
-    180325, 180327, 180329, 180331, 180333, 180335, 180337, 180339, 180341,
-    180343, 180345, 180347, 180349, 180351, 180353, 180355, 180357, 180359,
-    180361, 180363, 180365, 180367, 180369, 180371, 180373, 180375, 180377,
-    180379, 180381, 180383, 180385, 180387, 180389, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180391, 180395, 180399, 180404,
-    180408, 180412, 180416, 180420, 180424, 180428, 180432, 180436, 180440,
-    180450, 180460, 180470, 180480, 180494, 180508, 180521, 180534, 180545,
-    180556, 180567, 180578, 180589, 180600, 180610, 180619, 180628, 180637,
-    180650, 180663, 180675, 180687, 180697, 180707, 180717, 180727, 180736,
-    180745, 180755, 180765, 180775, 180785, 180796, 180807, 180817, 180827,
-    180838, 180849, 180860, 180871, 180881, 180894, 180905, 180919, 180927,
-    180938, 180946, 180954, 180962, 180970, 180978, 180986, 180995, 181004,
-    181014, 181024, 181033, 181042, 181052, 181062, 181070, 181078, 181085,
-    181094, 181102, 181110, 181117, 181127, 181136, 181147, 181158, 181170,
-    181181, 181191, 181202, 181212, 181223, 181231, 181236, 181240, 181244,
-    181248, 181252, 181256, 181260, 181264, 181268, 181272, 181276, 181280,
-    181283, 181286, 181290, 181294, 181298, 181302, 181306, 181310, 181314,
-    181318, 181322, 181326, 181330, 181334, 181338, 181342, 181346, 181350,
-    181354, 181358, 181362, 181366, 181370, 181374, 181378, 181382, 181386,
-    181390, 181394, 181398, 181402, 181406, 181410, 181414, 181418, 181422,
-    181426, 181430, 181434, 181438, 181442, 181446, 181450, 181454, 181458,
-    181462, 181466, 181470, 181474, 181478, 181482, 181486, 181490, 181494,
-    181498, 181502, 181506, 181510, 181514, 181518, 181522, 181526, 181530,
-    181534, 181538, 181542, 181546, 181550, 181554, 181558, 181562, 181566,
-    181570, 181574, 181578, 181582, 181586, 181590, 181594, 181598, 181602,
-    181606, 181610, 181614, 181618, 181622, 181626, 181629, 181633, 181637,
-    181641, 181645, 181649, 181653, 181657, 181661, 181665, 181669, 181673,
-    181677, 181681, 181685, 181689, 181693, 181697, 181701, 181705, 181709,
-    181713, 181717, 181721, 181725, 181729, 181733, 181737, 181741, 181745,
-    181749, 181753, 181757, 181761, 181765, 181769, 181773, 181777, 181781,
-    181785, 181789, 181793, 181797, 181801, 181805, 181809, 181813, 181817,
-    181821, 181825, 181829, 181833, 181837, 181841, 181845, 181849, 181853,
-    181857, 181861, 181865, 181869, 181873, 181877, 181881, 181885, 181889,
-    181893, 181897, 181901, 181905, 181909, 181913, 181917, 181921, 181925,
-    181929, 181933, 181937, 181941, 181945, 181949, 181953, 181957, 181961,
-    181965, 181969, 181973, 181977, 181981, 181985, 181989, 181993, 181997,
-    182001, 182005, 182009, 182013, 182017, 182021, 182025, 182029, 182033,
-    182037, 182041, 182045, 182049, 182053, 182057, 182061, 182065, 182069,
-    182073, 182077, 182081, 182085, 182089, 182093, 182097, 182101, 182105,
-    182109, 182113, 182117, 182121, 182125, 182129, 182133, 182137, 182141,
-    182145, 182149, 182153, 182157, 182161, 182165, 182169, 182173, 182177,
-    182181, 182185, 182189, 182193, 182197, 182201, 182205, 182209, 182213,
-    182217, 182221, 182225, 182229, 182233, 182237, 182241, 182245, 182249,
-    182253, 182257, 182261, 182265, 182269, 182273, 182277, 182281, 182285,
-    182289, 182293, 182297, 182301, 182305, 182309, 182313, 182317, 182321,
-    182325, 182329, 182333, 182337, 182341, 182345, 182349, 182353, 182357,
-    182361, 182365, 182369, 182373, 182377, 182381, 182385, 182389, 182393,
-    182398, 182403, 182408, 182412, 182418, 182425, 182432, 182439, 182446,
-    182453, 182460, 182467, 182474, 182481, 182488, 182495, 182502, 182509,
-    182515, 182521, 182528, 182534, 182541, 182548, 182555, 182562, 182569,
-    182576, 182583, 182590, 182597, 182604, 182611, 182618, 182625, 182631,
-    182637, 182643, 182650, 182659, 182668, 182677, 182686, 182691, 182696,
-    182702, 182708, 182714, 182720, 182726, 182732, 182738, 182744, 182750,
-    182756, 182762, 182768, 182773, 182779, 182789, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 163301, 163308, 163316, 163324, 163331, 163338, 163345,
+    163353, 163361, 163369, 163376, 163383, 163391, 163399, 163407, 163414,
+    163422, 163430, 163438, 163446, 163454, 163462, 163470, 163477, 163485,
+    163492, 163500, 163507, 163515, 163523, 163531, 163539, 163547, 163555,
+    163563, 163571, 163579, 163586, 163594, 163601, 163608, 163615, 163623,
+    163630, 163638, 0, 0, 0, 163646, 163653, 163660, 163667, 163674, 163681,
+    163688, 163695, 163704, 163713, 163722, 163731, 163740, 163750, 0, 0,
+    163758, 163766, 163773, 163780, 163787, 163794, 163801, 163808, 163815,
+    163822, 0, 0, 0, 0, 163829, 163838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163846,
+    163851, 163855, 163860, 163865, 163870, 163875, 163879, 163884, 163888,
+    163892, 163896, 163900, 163905, 163910, 163914, 163919, 163924, 163929,
+    163934, 163939, 163943, 163947, 163952, 163956, 163960, 163965, 163969,
+    163973, 163977, 163982, 163986, 163991, 163996, 164001, 164006, 164011,
+    164016, 164021, 164026, 164031, 164036, 164041, 164046, 164051, 164056,
+    164061, 164066, 164071, 164076, 164080, 164084, 164088, 164092, 164096,
+    164100, 164104, 164108, 0, 0, 0, 0, 0, 164112, 164117, 164124, 164130,
+    164137, 164144, 164151, 164158, 164165, 164172, 164179, 164186, 164193,
+    164200, 164207, 164214, 164221, 164228, 164235, 164242, 164249, 164256,
+    164263, 164270, 164277, 164284, 164291, 164298, 164305, 164312, 164319,
+    164326, 164333, 164340, 164347, 164354, 164360, 164366, 164372, 164379,
+    164385, 164392, 164398, 164405, 164412, 164419, 164426, 164433, 164440,
+    164446, 164453, 164460, 164467, 164474, 164481, 164488, 164495, 164501,
+    164508, 164515, 164522, 164529, 164536, 164544, 164551, 164558, 164565,
+    164572, 164579, 164586, 164593, 164599, 164606, 164613, 164620, 164627,
+    164633, 164640, 164647, 164654, 164661, 164668, 164675, 164682, 164690,
+    164697, 164703, 164710, 164717, 164724, 164731, 164738, 164745, 164752,
+    164759, 164766, 164773, 164780, 164787, 164794, 164801, 164808, 164815,
+    164822, 164829, 164836, 164843, 164849, 164856, 164863, 164870, 164877,
+    164884, 164891, 164898, 164905, 164912, 164919, 164926, 164933, 164940,
+    164947, 164954, 164961, 164968, 164975, 164982, 164989, 164996, 165003,
+    165011, 165019, 165027, 165034, 165041, 165048, 165055, 165062, 165069,
+    165076, 165083, 165090, 165097, 165103, 165110, 165117, 165124, 165131,
+    165138, 165145, 165152, 165159, 165166, 165173, 165180, 165187, 165194,
+    165201, 165209, 165217, 165225, 165232, 165239, 165246, 165253, 165260,
+    165267, 165274, 165281, 165288, 165295, 165302, 165309, 165316, 165323,
+    165329, 165336, 165343, 165350, 165357, 165364, 165371, 165378, 165385,
+    165392, 165399, 165406, 165413, 165420, 165427, 165434, 165441, 165448,
+    165455, 165462, 165469, 165476, 165483, 0, 0, 165490, 165494, 165498,
+    165502, 165506, 165510, 165514, 165518, 165522, 165526, 165532, 165538,
+    165544, 165550, 165558, 165566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 165572, 165578, 165584, 165590, 165596, 165602, 165608, 165614,
+    165620, 165625, 165630, 165636, 165641, 165646, 165652, 165658, 165664,
+    165670, 165676, 165681, 165686, 165692, 165698, 165703, 165709, 165715,
+    165721, 165727, 165733, 165739, 165745, 165751, 165757, 165763, 165769,
+    165775, 165781, 165787, 165793, 165799, 165805, 165811, 165817, 165822,
+    165827, 165833, 165838, 165843, 165849, 165855, 165861, 165867, 165873,
+    165878, 165883, 165889, 165895, 165900, 165906, 165912, 165918, 165924,
+    165930, 165936, 165942, 165948, 165954, 165960, 165966, 165972, 165977,
+    165982, 165986, 165991, 165998, 166002, 0, 0, 0, 0, 166007, 166012,
+    166016, 166020, 166024, 166028, 166032, 166036, 166040, 166044, 0, 0, 0,
+    0, 166048, 166054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166060, 166065, 166070,
+    166075, 166080, 166085, 166090, 166095, 166100, 166105, 166111, 166117,
+    166123, 166129, 166135, 166141, 166147, 166153, 166159, 166166, 166173,
+    166180, 166188, 166196, 166204, 166212, 166220, 166228, 166234, 166240,
+    166246, 166253, 166260, 166267, 166274, 166281, 166288, 166295, 166302,
+    166309, 166316, 166323, 166330, 166337, 166344, 166351, 166357, 166363,
+    166369, 166375, 166381, 166388, 166395, 166402, 166409, 166416, 166423,
+    166430, 166437, 166444, 166449, 166457, 166465, 166473, 166479, 166486,
+    166493, 166502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 166510, 166515, 166520, 166525, 166530,
+    166535, 166540, 166545, 166550, 166555, 166561, 166567, 166573, 166579,
+    166585, 166591, 166597, 166603, 166609, 166616, 166623, 166630, 166638,
+    166646, 166654, 166662, 166670, 166678, 166684, 166690, 166696, 166703,
+    166710, 166717, 166724, 166731, 166738, 166745, 166752, 166759, 166766,
+    166773, 166780, 166787, 166794, 166801, 166806, 166813, 166820, 166827,
+    166834, 166841, 166848, 166855, 166862, 166870, 166880, 166890, 166898,
+    166907, 166915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 166923, 166927, 166931, 166935, 0, 166939, 166943,
+    166947, 166951, 166955, 166959, 166963, 166967, 166971, 166975, 166979,
+    166983, 166987, 166991, 166995, 166999, 167003, 167007, 167011, 167015,
+    167019, 167023, 167027, 167031, 167037, 167043, 167049, 0, 167055,
+    167060, 0, 167065, 0, 0, 167070, 0, 167075, 167080, 167085, 167090,
+    167095, 167100, 167105, 167110, 167115, 167120, 0, 167125, 167130,
+    167135, 167140, 0, 167145, 0, 167150, 0, 0, 0, 0, 0, 0, 167155, 0, 0, 0,
+    0, 167161, 0, 167167, 0, 167173, 0, 167179, 167185, 167191, 0, 167197,
+    167203, 0, 167209, 0, 0, 167215, 0, 167221, 0, 167227, 0, 167233, 0,
+    167241, 0, 167249, 167255, 0, 167261, 0, 0, 167267, 167273, 167279,
+    167285, 0, 167291, 167297, 167303, 167309, 167315, 167321, 167327, 0,
+    167333, 167339, 167345, 167351, 0, 167357, 167363, 167369, 167375, 0,
+    167383, 0, 167391, 167397, 167403, 167409, 167415, 167421, 167427,
+    167433, 167439, 167445, 0, 167451, 167457, 167463, 167469, 167475,
+    167481, 167487, 167493, 167499, 167505, 167511, 167517, 167523, 167529,
+    167535, 167541, 167547, 0, 0, 0, 0, 0, 167553, 167559, 167565, 0, 167571,
+    167577, 167583, 167589, 167595, 0, 167601, 167607, 167613, 167619,
+    167625, 167631, 167637, 167643, 167649, 167655, 167661, 167667, 167673,
+    167679, 167685, 167691, 167697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167703, 167713, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 167721, 167728, 167735, 167742, 167748,
+    167755, 167762, 167768, 167775, 167782, 167789, 167797, 167805, 167813,
+    167821, 167829, 167837, 167844, 167851, 167858, 167866, 167874, 167882,
+    167890, 167898, 167906, 167913, 167920, 167927, 167935, 167943, 167951,
+    167959, 167967, 167975, 167980, 167985, 167990, 167995, 168000, 168005,
+    168010, 168015, 168020, 0, 0, 0, 0, 168025, 168032, 168037, 168042,
+    168047, 168052, 168057, 168062, 168067, 168072, 168077, 168082, 168087,
+    168092, 168097, 168102, 168107, 168112, 168117, 168122, 168127, 168132,
+    168137, 168142, 168147, 168152, 168157, 168162, 168167, 168172, 168177,
+    168182, 168187, 168192, 168197, 168202, 168207, 168212, 168217, 168222,
+    168227, 168232, 168237, 168242, 168247, 168252, 168257, 168262, 168267,
+    168272, 168277, 168283, 168288, 168293, 168298, 168303, 168308, 168313,
+    168318, 168323, 168328, 168333, 168338, 168343, 168348, 168353, 168358,
+    168363, 168368, 168373, 168378, 168383, 168388, 168393, 168398, 168403,
+    168408, 168413, 168418, 168423, 168428, 168433, 168438, 168443, 168448,
+    168453, 168458, 168463, 168468, 168473, 168478, 168483, 168488, 168493,
+    168498, 168503, 168508, 168513, 168518, 168523, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 168528, 168534, 168543, 168551, 168559, 168568, 168577,
+    168586, 168595, 168604, 168613, 168622, 168631, 168640, 168649, 0, 0,
+    168658, 168667, 168675, 168683, 168692, 168701, 168710, 168719, 168728,
+    168737, 168746, 168755, 168764, 168773, 168782, 0, 168790, 168799,
+    168807, 168815, 168824, 168833, 168842, 168851, 168860, 168869, 168878,
+    168887, 168896, 168905, 168914, 0, 168921, 168930, 168938, 168946,
+    168955, 168964, 168973, 168982, 168991, 169000, 169009, 169018, 169027,
+    169036, 169045, 169052, 169058, 169064, 169070, 169076, 169082, 169088,
+    169094, 169100, 169106, 169112, 169118, 169124, 169130, 169136, 169142,
+    169148, 169154, 169160, 169166, 169172, 169178, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 169184, 169191, 169196, 169200, 169204, 169208, 169213, 169218,
+    169223, 169228, 169233, 169238, 169245, 169254, 169260, 169264, 169273,
+    169278, 169284, 169290, 169296, 169301, 169307, 169313, 169319, 169324,
+    169330, 169336, 169341, 169347, 169353, 169358, 169364, 169370, 169375,
+    169381, 169387, 169392, 169398, 169404, 169410, 169416, 169422, 169433,
+    169440, 169446, 169449, 169452, 169455, 169460, 169466, 169472, 169478,
+    169483, 169489, 169495, 169501, 169506, 169512, 169518, 169523, 169529,
+    169535, 169540, 169546, 169552, 169557, 169563, 169569, 169574, 169580,
+    169586, 169592, 169598, 169604, 169607, 169610, 169613, 169616, 169619,
+    169622, 169629, 169637, 169645, 169653, 169660, 169668, 169676, 169684,
+    169691, 169699, 169707, 169714, 169722, 169730, 169737, 169745, 169753,
+    169760, 169768, 169776, 169783, 169791, 169799, 169807, 169815, 169823,
+    169828, 169833, 169838, 169841, 169849, 169854, 169861, 169869, 169877,
+    169885, 169892, 169900, 169908, 169916, 169923, 169931, 169939, 169946,
+    169954, 169962, 169969, 169977, 169985, 169992, 170000, 170008, 170015,
+    170023, 170031, 170039, 170047, 170055, 170065, 170070, 170074, 170078,
+    170083, 170088, 170091, 170094, 170097, 170100, 170103, 170106, 170109,
+    170112, 170115, 170121, 170124, 170128, 170133, 170137, 170142, 170147,
+    170153, 170159, 170165, 170170, 170178, 170184, 170187, 170190, 170193,
+    170196, 170199, 170202, 170205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170210, 170217,
+    170225, 170233, 170241, 170248, 170256, 170264, 170272, 170279, 170287,
+    170295, 170302, 170310, 170318, 170325, 170333, 170341, 170348, 170356,
+    170364, 170371, 170379, 170387, 170395, 170403, 170411, 170416, 170420,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170423, 170429, 170435, 170441,
+    170445, 170451, 170457, 170463, 170469, 170475, 170481, 170487, 170493,
+    170499, 170505, 170511, 170517, 170523, 170529, 170535, 170541, 170547,
+    170553, 170559, 170565, 170571, 170577, 170583, 170589, 170595, 170601,
+    170607, 170613, 170619, 170625, 170631, 170637, 170643, 170649, 170655,
+    170661, 170667, 170673, 170679, 0, 0, 0, 0, 170685, 170696, 170707,
+    170718, 170729, 170740, 170751, 170762, 170773, 0, 0, 0, 0, 0, 0, 0,
+    170784, 170789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170794, 170800,
+    170806, 170812, 170818, 170824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170830,
+    170832, 170834, 170838, 170843, 170848, 170850, 170856, 170861, 170863,
+    170869, 170873, 170875, 170879, 170885, 170891, 170897, 170902, 170907,
+    170914, 170921, 170928, 170933, 170940, 170947, 170954, 170958, 170965,
+    170974, 170983, 170990, 170995, 170999, 171003, 171005, 171008, 171011,
+    171018, 171025, 171035, 171040, 171045, 171050, 171055, 171057, 171063,
+    171067, 171069, 171071, 171073, 171075, 171079, 171083, 171087, 171089,
+    171093, 171095, 171099, 171101, 171103, 171105, 171107, 171112, 171117,
+    171119, 171125, 171129, 171133, 171141, 171143, 171145, 171147, 171149,
+    171151, 171153, 171155, 171157, 171159, 171161, 171165, 171169, 171171,
+    171173, 171175, 171177, 171179, 171184, 171190, 171194, 171198, 171202,
+    171206, 171211, 171215, 171217, 171219, 171223, 171229, 171231, 171233,
+    171235, 171239, 171248, 171254, 171258, 171262, 171264, 171266, 171269,
+    171271, 171273, 171275, 171279, 171281, 171285, 171290, 171292, 171297,
+    171303, 171310, 171314, 171318, 171322, 171326, 171332, 171336, 171344,
+    171351, 171353, 171355, 171359, 171363, 171365, 171369, 171373, 171375,
+    171379, 171381, 171385, 171389, 171393, 171397, 171401, 171405, 171409,
+    171413, 171419, 171423, 171427, 171438, 171443, 171447, 171451, 171457,
+    171461, 171465, 171469, 171476, 171483, 171487, 171491, 171495, 171499,
+    171503, 171510, 171512, 171516, 171518, 171520, 171524, 171528, 171532,
+    171534, 171538, 171542, 171546, 171550, 171554, 171556, 171560, 171562,
+    171568, 171571, 171576, 171578, 171580, 171583, 171585, 171587, 171590,
+    171597, 171604, 171611, 171616, 171620, 171622, 171624, 171626, 171630,
+    171632, 171636, 171640, 171644, 171646, 171650, 171652, 171656, 171660,
+    171667, 171669, 171678, 171687, 171696, 171702, 171704, 171709, 171713,
+    171717, 171719, 171725, 171729, 171731, 171735, 171739, 171741, 171745,
+    171750, 171754, 171760, 171766, 171768, 171770, 171776, 171778, 171782,
+    171786, 171788, 171792, 171794, 171798, 171802, 171806, 171809, 171812,
+    171817, 171822, 171824, 171827, 171829, 171836, 171840, 171842, 171849,
+    171856, 171863, 171870, 171877, 171879, 171881, 171883, 171887, 171889,
+    171891, 171893, 171895, 171897, 171899, 171901, 171903, 171905, 171907,
+    171909, 171911, 171913, 171915, 171917, 171919, 171921, 171923, 171925,
+    171927, 171929, 171931, 171935, 171937, 171939, 171941, 171945, 171947,
+    171951, 171953, 171955, 171959, 171963, 171969, 171971, 171973, 171975,
+    171977, 171981, 171985, 171987, 171991, 171995, 171999, 172003, 172007,
+    172011, 172015, 172019, 172023, 172027, 172031, 172035, 172039, 172043,
+    172047, 172051, 172055, 172059, 172061, 172063, 172065, 172067, 172069,
+    172071, 172073, 172081, 172089, 172097, 172105, 172110, 172115, 172120,
+    172124, 172128, 172133, 172138, 172140, 172144, 172146, 172148, 172150,
+    172152, 172154, 172156, 172158, 172162, 172164, 172166, 172168, 172172,
+    172176, 172180, 172184, 172188, 172190, 172196, 172202, 172204, 172206,
+    172208, 172210, 172212, 172221, 172228, 172235, 172239, 172246, 172251,
+    172258, 172267, 172272, 172276, 172280, 172282, 172286, 172288, 172292,
+    172296, 172298, 172302, 172306, 172310, 172312, 172314, 172320, 172322,
+    172324, 172326, 172330, 172334, 172336, 172340, 172342, 172344, 172347,
+    172351, 172353, 172357, 172359, 172361, 172366, 172368, 172372, 172376,
+    172379, 172383, 172387, 172391, 172395, 172399, 172403, 172407, 172412,
+    172416, 172420, 172429, 172434, 172437, 172439, 172442, 172445, 172450,
+    172452, 172455, 172460, 172464, 172467, 172471, 172475, 172478, 172483,
+    172487, 172491, 172495, 172499, 172505, 172511, 172517, 172523, 172528,
+    172539, 172541, 172545, 172547, 172549, 172553, 172557, 172559, 172563,
+    172569, 172574, 172580, 172582, 172586, 172590, 172597, 172604, 172608,
+    172610, 172612, 172616, 172618, 172622, 172626, 172630, 172632, 172634,
+    172641, 172645, 172649, 172653, 172657, 172661, 172663, 172667, 172669,
+    172671, 172675, 172677, 172681, 172685, 172691, 172695, 172699, 172703,
+    172705, 172708, 172712, 172719, 172728, 172737, 172746, 172755, 172757,
+    172761, 172763, 172767, 172778, 172782, 172788, 172794, 172799, 172801,
+    172806, 172810, 172812, 172814, 172816, 172820, 172824, 172828, 172833,
+    172844, 172860, 172873, 172886, 172890, 172894, 172900, 172902, 172910,
+    172918, 172920, 172924, 172930, 172936, 172943, 172950, 172952, 172954,
+    172958, 172960, 172966, 172968, 172971, 172975, 172981, 172987, 172998,
+    173004, 173011, 173019, 173023, 173031, 173039, 173045, 173051, 173058,
+    173060, 173064, 173066, 173068, 173073, 173075, 173077, 173079, 173081,
+    173085, 173095, 173101, 173105, 173109, 173113, 173119, 173125, 173131,
+    173137, 173142, 173147, 173153, 173159, 173166, 173173, 173180, 173187,
+    173192, 173200, 173204, 173213, 173222, 173228, 173232, 173236, 173240,
+    173243, 173248, 173250, 173252, 173254, 173261, 173266, 173273, 173280,
+    173287, 173295, 173303, 173311, 173319, 173327, 173335, 173343, 173351,
+    173359, 173365, 173371, 173377, 173383, 173389, 173395, 173401, 173407,
+    173413, 173419, 173425, 173431, 173434, 173443, 173452, 173454, 173461,
+    173465, 173467, 173469, 173473, 173479, 173483, 173485, 173495, 173501,
+    173505, 173507, 173511, 173513, 173517, 173524, 173531, 173538, 173543,
+    173548, 173557, 173563, 173568, 173572, 173577, 173581, 173588, 173592,
+    173595, 173599, 173605, 173611, 173615, 173619, 173624, 173630, 173639,
+    173650, 173656, 173662, 173668, 173678, 173693, 173702, 173710, 173718,
+    173726, 173734, 173742, 173750, 173758, 173766, 173774, 173782, 173790,
+    173798, 173801, 173805, 173810, 173815, 173817, 173821, 173830, 173839,
+    173847, 173851, 173855, 173860, 173865, 173870, 173872, 173877, 173881,
+    173883, 173887, 173891, 173897, 173902, 173910, 173915, 173920, 173925,
+    173932, 173935, 173937, 173941, 173946, 173952, 173956, 173960, 173966,
+    173972, 173974, 173978, 173982, 173986, 173990, 173994, 173996, 173998,
+    174000, 174002, 174008, 174014, 174018, 174020, 174022, 174024, 174033,
+    174037, 174044, 174051, 174053, 174056, 174060, 174066, 174070, 174074,
+    174076, 174084, 174088, 174092, 174097, 174102, 174107, 174112, 174117,
+    174122, 174127, 174132, 174137, 174142, 174146, 174152, 174156, 174162,
+    174167, 174174, 174180, 174188, 174192, 174199, 174203, 174207, 174211,
+    174216, 174221, 174223, 174227, 174236, 174244, 174253, 174267, 174281,
+    174295, 174302, 174309, 174313, 174322, 174330, 174334, 174343, 174350,
+    174354, 174358, 174362, 174366, 174373, 174377, 174381, 174385, 174389,
+    174396, 174405, 174414, 174421, 174433, 174445, 174449, 174453, 174457,
+    174461, 174465, 174469, 174477, 174485, 174494, 174498, 174502, 174506,
+    174510, 174514, 174518, 174524, 174531, 174535, 174547, 174555, 174559,
+    174563, 174567, 174571, 174577, 174584, 174595, 174605, 174616, 174627,
+    174636, 174647, 174653, 174659, 174665, 174671, 174677, 174681, 174688,
+    174697, 174704, 174710, 174714, 174718, 174722, 174731, 174743, 174747,
+    174754, 174761, 174768, 174776, 174783, 174791, 174799, 174808, 174816,
+    174825, 174834, 174844, 174853, 174863, 174873, 174884, 174894, 174905,
+    174912, 174920, 174927, 174935, 174943, 174952, 174960, 174969, 174976,
+    174988, 174995, 175007, 175010, 175014, 175017, 175021, 175027, 175034,
+    175041, 175049, 175054, 175060, 175071, 175081, 175092, 175097, 175102,
+    175108, 175113, 175120, 175124, 175130, 175132, 175134, 175138, 175142,
+    175146, 175155, 175157, 175159, 175162, 175164, 175166, 175170, 175172,
+    175176, 175178, 175182, 175184, 175186, 175190, 175194, 175200, 175202,
+    175206, 175208, 175212, 175216, 175220, 175224, 175226, 175228, 175232,
+    175236, 175240, 175244, 175246, 175248, 175250, 175256, 175261, 175264,
+    175272, 175280, 175282, 175287, 175290, 175295, 175306, 175313, 175318,
+    175323, 175325, 175329, 175331, 175335, 175337, 175341, 175345, 175348,
+    175351, 175353, 175356, 175358, 175362, 175364, 175366, 175368, 175372,
+    175374, 175378, 175381, 175388, 175391, 175396, 175399, 175402, 175407,
+    175411, 175415, 175419, 175421, 175426, 175429, 175433, 175435, 175437,
+    175441, 175443, 0, 0, 0, 0, 0, 0, 0, 0, 175445, 175450, 175452, 175456,
+    175458, 175462, 175466, 175472, 175476, 175481, 175484, 175488, 175492,
+    0, 0, 0, 175496, 175498, 175504, 175508, 175512, 175514, 175518, 175520,
+    175522, 175526, 175528, 175532, 175536, 0, 0, 0, 175540, 175545, 175550,
+    175555, 175560, 175565, 175570, 175577, 175584, 175591, 175598, 175603,
+    175608, 175613, 175618, 175625, 175631, 175638, 175645, 175652, 175657,
+    175662, 175667, 175672, 175677, 175684, 175691, 175696, 175701, 175708,
+    175715, 175723, 175731, 175738, 175745, 175753, 175761, 175769, 175776,
+    175786, 175797, 175802, 175809, 175816, 175823, 175831, 175839, 175850,
+    175858, 175866, 175874, 175879, 175884, 175889, 175894, 175899, 175904,
+    175909, 175914, 175919, 175924, 175929, 175934, 175941, 175946, 175951,
+    175958, 175963, 175968, 175973, 175978, 175983, 175988, 175993, 175998,
+    176003, 176008, 176013, 176018, 176025, 176033, 176038, 176043, 176050,
+    176055, 176060, 176065, 176072, 176077, 176084, 176089, 176096, 176101,
+    176110, 176119, 176124, 176129, 176134, 176139, 176144, 176149, 176154,
+    176159, 176164, 176169, 176174, 176179, 176184, 176192, 176200, 176205,
+    176210, 176215, 176220, 176225, 176231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 176237, 176245, 176253, 176261, 176269, 176275, 176281, 176285,
+    176289, 176295, 176301, 176310, 176314, 176319, 176325, 176329, 176334,
+    176338, 176342, 176348, 176354, 176364, 176373, 176376, 176381, 176387,
+    176393, 176404, 176414, 176418, 176423, 176429, 176435, 176444, 176449,
+    176453, 176458, 176462, 176468, 176474, 176480, 176484, 176487, 176491,
+    176494, 176497, 176502, 176507, 176514, 176522, 176529, 176536, 176545,
+    176554, 176561, 176569, 176576, 176583, 176592, 176601, 176608, 176616,
+    176623, 176630, 176639, 176646, 176654, 176660, 176669, 176677, 176686,
+    176693, 176703, 176714, 176722, 176730, 176739, 176747, 176755, 176764,
+    176772, 176782, 176791, 176799, 176807, 176816, 176819, 176824, 176827,
+    0, 0, 0, 0, 0, 0, 0, 176832, 176838, 176844, 176850, 176856, 176862,
+    176868, 176874, 176880, 176886, 176892, 176898, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176904, 176912, 176921, 176929,
+    176938, 176947, 176957, 176966, 176976, 176985, 176995, 177004, 0, 0, 0,
+    0, 177014, 177022, 177031, 177039, 177048, 177055, 177063, 177070,
+    177078, 177086, 177095, 177103, 177112, 177122, 177133, 177143, 177154,
+    177163, 177173, 177182, 177192, 177201, 177211, 177220, 177230, 177238,
+    177247, 177255, 177264, 177272, 177281, 177289, 177298, 177308, 177319,
+    177329, 177340, 177344, 177349, 177353, 177358, 177361, 177365, 177368,
+    177372, 177376, 177381, 177385, 177390, 177395, 177401, 177406, 177412,
+    177415, 177419, 177422, 0, 0, 0, 0, 0, 0, 0, 0, 177426, 177429, 177433,
+    177436, 177440, 177445, 177450, 177456, 177462, 177466, 0, 0, 0, 0, 0, 0,
+    177470, 177476, 177483, 177489, 177496, 177504, 177512, 177521, 177530,
+    177535, 177541, 177546, 177552, 177559, 177566, 177574, 177582, 177589,
+    177597, 177604, 177612, 177621, 177630, 177640, 177650, 177656, 177663,
+    177669, 177676, 177684, 177692, 177701, 177710, 177718, 177727, 177735,
+    177744, 177754, 177764, 177775, 0, 0, 0, 0, 0, 0, 0, 0, 177786, 177791,
+    177797, 177802, 177808, 177817, 177827, 177836, 177846, 177853, 177861,
+    177868, 177876, 177883, 177892, 177901, 177910, 177915, 177922, 177929,
+    177936, 177941, 177946, 177951, 177956, 177963, 177970, 177977, 177984,
+    177991, 0, 0, 178000, 178010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178022, 178032, 178041,
+    178046, 178055, 178063, 178071, 178078, 178082, 178087, 178094, 178103,
+    178114, 178118, 178121, 178125, 178129, 178133, 178137, 178142, 178146,
+    178150, 178155, 178159, 178163, 178169, 178175, 178182, 178186, 178190,
+    178192, 178202, 178211, 178218, 178222, 178226, 178236, 178240, 178244,
+    178248, 178252, 178260, 178269, 178282, 178293, 178304, 178320, 178329,
+    178338, 178342, 178344, 178349, 178351, 178353, 178359, 178363, 178365,
+    178371, 178373, 178375, 178379, 178381, 178385, 178387, 178391, 178395,
+    178400, 178404, 178408, 178410, 178414, 178416, 178422, 178428, 178434,
+    178438, 178444, 178448, 178455, 178457, 178461, 178463, 178465, 178467,
+    178469, 178471, 178473, 178477, 178481, 178488, 178492, 178494, 178499,
+    178501, 178503, 178505, 178507, 178511, 178515, 178517, 178522, 178527,
+    178529, 178531, 178533, 178535, 178540, 178542, 178546, 178550, 178552,
+    178556, 178558, 178571, 178575, 178582, 178594, 178606, 178610, 178614,
+    178616, 0, 178620, 178627, 178629, 178633, 178635, 178639, 178643,
+    178645, 178649, 178651, 178653, 178657, 178659, 178661, 178663, 178665,
+    178667, 178671, 178673, 178675, 178677, 178679, 178681, 178683, 178685,
+    178689, 178693, 178695, 178697, 178699, 178701, 178703, 178705, 178707,
+    178709, 178711, 178713, 178715, 178717, 178719, 178721, 178723, 178725,
+    178727, 178729, 178731, 178733, 178735, 178737, 178739, 178741, 178743,
+    178745, 178749, 178753, 178761, 178769, 178775, 178782, 178784, 178786,
+    178788, 178790, 178792, 178794, 178798, 178805, 178809, 178813, 178817,
+    178821, 178825, 178827, 178831, 178835, 178837, 178839, 178841, 178843,
+    178845, 178849, 178853, 0, 178857, 178861, 178865, 178869, 178874,
+    178876, 178878, 178882, 178886, 178891, 178899, 178903, 178911, 178913,
+    178915, 178917, 178919, 178921, 178923, 178925, 178927, 178931, 178935,
+    178937, 178939, 178941, 178943, 178949, 178951, 178957, 178961, 178965,
+    178970, 178972, 178974, 178978, 178980, 178982, 178984, 178986, 178990,
+    178995, 179000, 179004, 179008, 179010, 179012, 179017, 179022, 179024,
+    179026, 179030, 179036, 179042, 179048, 179054, 179060, 179066, 179077,
+    179088, 179100, 179111, 179122, 179133, 179144, 179155, 179166, 179177,
+    179188, 179199, 179210, 179221, 179232, 179244, 179256, 179268, 179280,
+    179292, 179304, 179318, 179332, 179347, 179353, 179359, 179365, 179371,
+    179377, 179383, 179389, 179395, 179401, 179407, 179413, 179419, 179426,
+    179433, 179440, 179447, 179454, 179461, 179475, 179489, 179504, 179518,
+    179532, 179546, 179560, 179574, 179588, 179602, 179616, 179630, 179644,
+    179658, 179672, 179687, 179702, 179717, 179732, 179747, 179762, 179776,
+    179790, 179805, 179810, 179815, 179821, 179832, 179843, 179855, 179860,
+    179865, 179870, 179875, 179880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    179885, 179891, 179897, 179903, 179909, 179915, 179921, 179927, 179932,
+    179937, 179942, 179947, 179952, 179957, 0, 0, 179962, 179966, 179970,
+    179972, 179974, 0, 0, 0, 179978, 179983, 179987, 0, 0, 0, 0, 0, 179989,
+    179991, 179993, 179995, 179997, 180001, 180003, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 180007, 180011, 180013, 180015, 180017, 180021, 180023, 180027,
+    180029, 180032, 180034, 180038, 180040, 180042, 180043, 180045, 180047,
+    180049, 180053, 180055, 180057, 180061, 180063, 180065, 180067, 0, 0, 0,
+    0, 0, 0, 0, 180069, 180071, 180073, 180075, 180077, 180081, 180083, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 180085, 180089, 180091, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 180095, 180097, 180101, 180103, 180105, 180107, 180109, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180111, 180114, 180117,
+    180120, 180123, 180126, 180129, 180132, 180135, 180138, 180141, 180144,
+    180147, 180150, 180153, 180156, 180159, 180162, 180165, 180168, 180171,
+    180174, 180177, 180180, 180183, 180186, 180189, 180192, 180195, 180198,
+    180201, 180204, 180207, 180210, 180213, 180216, 180219, 180222, 180225,
+    180228, 180231, 180234, 180237, 180240, 180243, 180246, 180249, 180252,
+    180255, 180258, 180261, 180264, 180267, 180270, 180273, 180276, 180279,
+    180282, 180285, 180288, 180291, 180303, 180315, 180327, 180339, 180350,
+    180362, 180374, 180386, 180398, 180409, 180422, 180435, 180447, 180460,
+    180472, 180484, 180497, 180509, 180522, 180534, 180546, 180559, 180571,
+    180583, 180595, 180607, 180618, 180630, 180642, 180654, 180666, 180677,
+    180690, 180703, 180715, 180728, 180740, 180752, 180765, 180777, 180790,
+    180802, 180814, 180827, 180839, 180851, 180863, 180875, 180883, 180891,
+    180899, 180907, 180913, 180919, 180925, 180931, 180937, 180943, 180950,
+    180957, 180964, 180971, 180978, 180985, 180993, 181001, 181009, 181017,
+    181025, 181032, 181038, 181044, 181051, 181057, 181064, 181070, 181076,
+    181083, 181089, 181096, 181102, 181108, 181114, 181120, 181126, 181138,
+    0, 181151, 181164, 181170, 181178, 181183, 181190, 181197, 181205,
+    181213, 181221, 181229, 181237, 181245, 181257, 181269, 181280, 181291,
+    181306, 181321, 181336, 181351, 181369, 181387, 181406, 181425, 181443,
+    181461, 181468, 181476, 181480, 181485, 181491, 181497, 181507, 181518,
+    181529, 181539, 181549, 181553, 181557, 181562, 181568, 181574, 181584,
+    181590, 181599, 181608, 181617, 181626, 181632, 181636, 181645, 181653,
+    181661, 181668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181673, 181678,
+    181682, 181686, 181690, 181694, 181698, 181702, 181706, 181710, 0, 0, 0,
+    0, 0, 0, 181714, 181718, 181722, 181726, 181730, 181734, 181738, 181742,
+    181746, 181750, 181754, 181758, 181762, 181766, 181770, 181774, 181778,
+    181782, 181786, 181790, 181794, 181798, 181802, 181806, 181810, 181814,
+    181818, 181822, 181826, 181830, 181834, 181838, 181842, 181846, 181850,
+    181854, 181858, 181862, 181866, 181870, 181874, 181878, 181882, 181886,
+    181890, 181894, 181898, 181902, 181906, 181910, 181914, 181918, 181922,
+    181926, 181930, 181934, 181938, 181942, 181946, 181950, 181954, 181958,
+    181962, 181966, 181970, 181974, 181978, 181982, 181986, 181990, 181994,
+    181998, 182002, 182006, 182010, 182014, 182018, 182022, 182026, 182030,
+    182034, 182038, 182042, 182046, 182050, 182054, 182058, 182062, 182066,
+    182070, 182074, 182078, 182082, 182086, 182090, 182094, 182098, 182102,
+    182106, 182110, 182114, 182118, 182122, 182126, 182130, 182134, 182138,
+    182142, 182146, 182150, 182154, 182158, 182162, 182166, 182170, 182174,
+    182178, 182182, 182186, 182190, 182194, 182198, 182202, 182206, 182210,
+    182214, 182218, 182222, 182226, 182230, 182234, 182238, 182242, 182246,
+    182250, 182254, 182258, 182262, 182266, 182270, 182274, 182278, 182282,
+    182286, 182290, 182294, 182298, 182302, 182306, 182310, 182314, 182318,
+    182322, 182326, 182330, 182334, 182338, 182342, 182346, 182350, 182354,
+    182358, 182362, 182366, 182370, 182374, 182378, 182382, 182386, 182390,
+    182394, 182398, 182402, 182406, 182410, 182414, 182418, 182422, 182426,
+    182430, 182434, 182438, 182442, 182446, 182450, 182454, 182458, 182462,
+    182466, 182470, 182474, 182478, 182482, 182486, 182490, 182494, 182498,
+    182502, 182506, 182510, 182514, 182518, 182522, 182526, 182530, 182534,
+    182538, 182542, 182546, 182550, 182554, 182558, 182562, 182566, 182570,
+    182574, 182578, 182582, 182586, 182590, 182594, 182598, 182602, 182606,
+    182610, 182614, 182618, 182622, 182626, 182630, 182634, 182638, 182642,
+    182646, 182650, 182654, 182658, 182662, 182666, 182670, 182674, 182678,
+    182682, 182686, 182690, 182694, 182698, 182702, 182706, 182710, 182714,
+    182718, 182722, 182726, 182730, 182734, 182738, 182742, 182746, 182750,
+    182754, 182758, 182762, 182766, 182770, 182774, 182778, 182782, 182786,
+    182790, 182794, 182798, 182802, 182806, 182810, 182814, 182818, 182822,
+    182826, 182830, 182834, 182838, 182842, 182846, 182850, 182854, 182858,
+    182862, 182866, 182870, 182874, 182878, 182882, 182886, 182890, 182894,
+    182898, 182902, 182906, 182910, 182914, 182918, 182922, 182926, 182930,
+    182934, 182938, 182942, 182946, 182950, 182954, 182958, 182962, 182966,
+    182970, 182974, 182978, 182982, 182986, 182990, 182994, 182998, 183002,
+    183006, 183010, 183014, 183018, 183022, 183026, 183030, 183034, 183038,
+    183042, 183046, 183050, 183054, 183058, 183062, 183066, 183070, 183074,
+    183078, 183082, 183086, 183090, 183094, 183098, 183102, 183106, 183110,
+    183114, 183118, 183122, 183126, 183130, 183134, 183138, 183142, 183146,
+    183150, 183154, 183158, 183162, 183166, 183170, 183174, 183178, 183182,
+    183186, 183190, 183194, 183198, 183202, 183206, 183210, 183214, 183218,
+    183222, 183226, 183230, 183234, 183238, 183242, 183246, 183250, 183254,
+    183258, 183262, 183266, 183270, 183274, 183278, 183282, 183286, 183290,
+    183294, 183298, 183302, 183306, 183310, 183314, 183318, 183322, 183326,
+    183330, 183334, 183338, 183342, 183346, 183350, 183354, 183358, 183362,
+    183366, 183370, 183374, 183378, 183382, 183386, 183390, 183394, 183398,
+    183402, 183406, 183410, 183414, 183418, 183422, 183426, 183430, 183434,
+    183438, 183442, 183446, 183450, 183454, 183458, 183462, 183466, 183470,
+    183474, 183478, 183482, 183486, 183490, 183494, 183498, 183502, 183506,
+    183510, 183514, 183518, 183522, 183526, 183530, 183534, 183538, 183542,
+    183546, 183550, 183554, 183558, 183562, 183566, 183570, 183574, 183578,
+    183582, 183586, 183590, 183594, 183598, 183602, 183606, 183610, 183614,
+    183618, 183622, 183626, 183630, 183634, 183638, 183642, 183646, 183650,
+    183654, 183658, 183662, 183666, 183670, 183674, 183678, 183682, 183686,
+    183690, 183694, 183698, 183702, 183706, 183710, 183714, 183718, 183722,
+    183726, 183730, 183734, 183738, 183742, 183746, 183750, 183754, 183758,
+    183762, 183766, 183770, 183774, 183778, 183782, 183786, 183790, 183794,
+    183798, 183802, 183806, 183810, 183814, 183818, 183822, 183826, 183830,
+    183834, 183838, 183842, 183846, 183850, 183854, 183858, 183862, 183866,
+    183870, 183874, 183878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183882, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 183886, 183889, 183893, 183897, 183900, 183904, 183908, 183911,
+    183914, 183918, 183922, 183925, 183928, 183931, 183934, 183939, 183942,
+    183946, 183949, 183952, 183955, 183958, 183961, 183964, 183967, 183970,
+    183973, 183976, 183979, 183983, 183987, 183991, 183995, 184000, 184005,
+    184011, 184017, 184023, 184028, 184034, 184040, 184046, 184051, 184057,
+    184063, 184068, 184074, 184080, 184085, 184091, 184097, 184102, 184108,
+    184114, 184119, 184125, 184131, 184137, 184143, 184149, 184153, 184158,
+    184162, 184167, 184171, 184176, 184181, 184187, 184193, 184199, 184204,
+    184210, 184216, 184222, 184227, 184233, 184239, 184244, 184250, 184256,
+    184261, 184267, 184273, 184278, 184284, 184290, 184295, 184301, 184307,
+    184313, 184319, 184325, 184330, 184334, 184339, 184342, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 184346, 184349, 184352, 184355, 184358, 184361, 184364, 184367,
+    184370, 184373, 184376, 184379, 184382, 184385, 184388, 184391, 184394,
+    184397, 184400, 184403, 184406, 184409, 184412, 184415, 184418, 184421,
+    184424, 184427, 184430, 184433, 184436, 184439, 184442, 184445, 184448,
+    184451, 184454, 184457, 184460, 184463, 184466, 184469, 184472, 184475,
+    184478, 184481, 184484, 184487, 184490, 184493, 184496, 184499, 184502,
+    184505, 184508, 184511, 184514, 184517, 184520, 184523, 184526, 184529,
+    184532, 184535, 184538, 184541, 184544, 184547, 184550, 184553, 184556,
+    184559, 184562, 184565, 184568, 184571, 184574, 184577, 184580, 184583,
+    184586, 184589, 184592, 184595, 184598, 184601, 184604, 184607, 184610,
+    184613, 184616, 184619, 184622, 184625, 184628, 184631, 184634, 184637,
+    184640, 184643, 184646, 184649, 184652, 184655, 184658, 184661, 184664,
+    184667, 184670, 184673, 184676, 184679, 184682, 184685, 184688, 184691,
+    184694, 184697, 184700, 184703, 184706, 184709, 184712, 184715, 184718,
+    184721, 184724, 184727, 184730, 184733, 184736, 184739, 184742, 184745,
+    184748, 184751, 184754, 184757, 184760, 184763, 184766, 184769, 184772,
+    184775, 184778, 184781, 184784, 184787, 184790, 184793, 184796, 184799,
+    184802, 184805, 184808, 184811, 184814, 184817, 184820, 184823, 184826,
+    184829, 184832, 184835, 184838, 184841, 184844, 184847, 184850, 184853,
+    184856, 184859, 184862, 184865, 184868, 184871, 184874, 184877, 184880,
+    184883, 184886, 184889, 184892, 184895, 184898, 184901, 184904, 184907,
+    184910, 184913, 184916, 184919, 184922, 184925, 184928, 184931, 184934,
+    184937, 184940, 184943, 184946, 184949, 184952, 184955, 184958, 184961,
+    184964, 184967, 184970, 184973, 184976, 184979, 184982, 184985, 184988,
+    184991, 184994, 184997, 185000, 185003, 185006, 185009, 185012, 185015,
+    185018, 185021, 185024, 185027, 185030, 185033, 185036, 185039, 185042,
+    185045, 185048, 185051, 185054, 185057, 185060, 185063, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185066, 185068, 185070, 185075, 185077,
+    185082, 185084, 185089, 185091, 185096, 185098, 185100, 185102, 185104,
+    185106, 185108, 185110, 185112, 185114, 185118, 185122, 185124, 185126,
+    185130, 185134, 185139, 185141, 185143, 185145, 185149, 185152, 185154,
+    185158, 185160, 185164, 185166, 185170, 185173, 185175, 185179, 185183,
+    185185, 185191, 185193, 185198, 185200, 185205, 185207, 185212, 185214,
+    185219, 185221, 185225, 185227, 185231, 185233, 185240, 185242, 185244,
+    185246, 185251, 185253, 185255, 185257, 185259, 185261, 185266, 185270,
+    185272, 185277, 185281, 185283, 185288, 185292, 185294, 185299, 185303,
+    185305, 185307, 185309, 185311, 185315, 185317, 185322, 185324, 185330,
+    185332, 185338, 185340, 185342, 185344, 185348, 185350, 185357, 185359,
+    185366, 185368, 185374, 185380, 185382, 185389, 185396, 185398, 185404,
+    185409, 185411, 185417, 185423, 185425, 185431, 185437, 185439, 185445,
+    185449, 185451, 185456, 185458, 185460, 185465, 185467, 185469, 185475,
+    185477, 185482, 185486, 185488, 185493, 185497, 185499, 185505, 185507,
+    185511, 185513, 185517, 185519, 185526, 185533, 185535, 185542, 185549,
+    185551, 185556, 185558, 185566, 185568, 185574, 185576, 185582, 185584,
+    185588, 185590, 185596, 185598, 185602, 185604, 185610, 185612, 185614,
+    185616, 185621, 185626, 185628, 185630, 185640, 185645, 185652, 185659,
+    185664, 185669, 185681, 185685, 185689, 185693, 185697, 185699, 185701,
+    185703, 185705, 185707, 185709, 185711, 185713, 185715, 185717, 185719,
+    185721, 185723, 185725, 185727, 185729, 185731, 185733, 185735, 185737,
+    185739, 185745, 185752, 185757, 185765, 185773, 185778, 185780, 185782,
+    185784, 185786, 185788, 185790, 185792, 185794, 185796, 185798, 185800,
+    185802, 185804, 185806, 185808, 185810, 185821, 185826, 185828, 185830,
+    185836, 185848, 185854, 185860, 185866, 185872, 185876, 185887, 185889,
+    185891, 185893, 185895, 185897, 185899, 185901, 185903, 185905, 185907,
+    185909, 185911, 185913, 185915, 185917, 185919, 185921, 185923, 185925,
+    185927, 185929, 185931, 185933, 185935, 185937, 185939, 185941, 185943,
+    185945, 185947, 185949, 185951, 185953, 185955, 185957, 185959, 185961,
+    185963, 185965, 185967, 185969, 185971, 185973, 185975, 185977, 185979,
+    185981, 185983, 185985, 185987, 185989, 185991, 185993, 185995, 185997,
+    185999, 186001, 186003, 186005, 186007, 186009, 186011, 186013, 186015,
+    186017, 186019, 186021, 186023, 186025, 186027, 186029, 186031, 186033,
+    186035, 186037, 186039, 186041, 186043, 186045, 186047, 186049, 186051,
+    186053, 186055, 186057, 186059, 186061, 186063, 186065, 186067, 186069,
+    186071, 186073, 186075, 186077, 186079, 186081, 186083, 186085, 186087,
+    186089, 186091, 186093, 186095, 186097, 186099, 186101, 186103, 186105,
+    186107, 186109, 186111, 186113, 186115, 186117, 186119, 186121, 186123,
+    186125, 186127, 186129, 186131, 186133, 186135, 186137, 186139, 186141,
+    186143, 186145, 186147, 186149, 186151, 186153, 186155, 186157, 186159,
+    186161, 186163, 186165, 186167, 186169, 186171, 186173, 186175, 186177,
+    186179, 186181, 186183, 186185, 186187, 186189, 186191, 186193, 186195,
+    186197, 186199, 186201, 186203, 186205, 186207, 186209, 186211, 186213,
+    186215, 186217, 186219, 186221, 186223, 186225, 186227, 186229, 186231,
+    186233, 186235, 186237, 186239, 186241, 186243, 186245, 186247, 186249,
+    186251, 186253, 186255, 186257, 186259, 186261, 186263, 186265, 186267,
+    186269, 186271, 186273, 186275, 186277, 186279, 186281, 186283, 186285,
+    186287, 186289, 186291, 186293, 186295, 186297, 186299, 186301, 186303,
+    186305, 186307, 186309, 186311, 186313, 186315, 186317, 186319, 186321,
+    186323, 186325, 186327, 186329, 186331, 186333, 186335, 186337, 186339,
+    186341, 186343, 186345, 186347, 186349, 186351, 186353, 186355, 186357,
+    186359, 186361, 186363, 186365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 186367, 186371, 186375, 186380, 186384, 186388, 186392,
+    186396, 186400, 186404, 186408, 186412, 186416, 186426, 186436, 186447,
+    186458, 186468, 186478, 186488, 186498, 186512, 186526, 186540, 186554,
+    186563, 186572, 186585, 186598, 186611, 186624, 186634, 186644, 186655,
+    186666, 186677, 186688, 186699, 186708, 186718, 186728, 186738, 186748,
+    186759, 186770, 186781, 186792, 186803, 186814, 186825, 186836, 186847,
+    186858, 186869, 186883, 186894, 186908, 186916, 186927, 186935, 186943,
+    186951, 186959, 186967, 186975, 186985, 186995, 187005, 187015, 187025,
+    187035, 187045, 187055, 187063, 187072, 187081, 187090, 187099, 187107,
+    187115, 187125, 187135, 187146, 187157, 187169, 187180, 187190, 187201,
+    187211, 187222, 187230, 187235, 187239, 187243, 187247, 187251, 187255,
+    187259, 187263, 187267, 187271, 187275, 187279, 187282, 187285, 187289,
+    187293, 187297, 187301, 187305, 187309, 187313, 187317, 187321, 187325,
+    187329, 187333, 187337, 187341, 187345, 187349, 187353, 187357, 187361,
+    187365, 187369, 187373, 187377, 187381, 187385, 187389, 187393, 187397,
+    187401, 187405, 187409, 187413, 187417, 187421, 187425, 187429, 187433,
+    187437, 187441, 187445, 187449, 187453, 187457, 187461, 187465, 187469,
+    187473, 187477, 187481, 187485, 187489, 187493, 187497, 187501, 187505,
+    187509, 187513, 187517, 187521, 187525, 187529, 187533, 187537, 187541,
+    187545, 187549, 187553, 187557, 187561, 187565, 187569, 187573, 187577,
+    187581, 187585, 187589, 187593, 187597, 187601, 187605, 187609, 187613,
+    187617, 187621, 187625, 187628, 187632, 187636, 187640, 187644, 187648,
+    187652, 187656, 187660, 187664, 187668, 187672, 187676, 187680, 187684,
+    187688, 187692, 187696, 187700, 187704, 187708, 187712, 187716, 187720,
+    187724, 187728, 187732, 187736, 187740, 187744, 187748, 187752, 187756,
+    187760, 187764, 187768, 187772, 187776, 187780, 187784, 187788, 187792,
+    187796, 187800, 187804, 187808, 187812, 187816, 187820, 187824, 187828,
+    187832, 187836, 187840, 187844, 187848, 187852, 187856, 187860, 187864,
+    187868, 187872, 187876, 187880, 187884, 187888, 187892, 187896, 187900,
+    187904, 187908, 187912, 187916, 187920, 187924, 187928, 187932, 187936,
+    187940, 187944, 187948, 187952, 187956, 187960, 187964, 187968, 187972,
+    187976, 187980, 187984, 187988, 187992, 187996, 188000, 188004, 188008,
+    188012, 188016, 188020, 188024, 188028, 188032, 188036, 188040, 188044,
+    188048, 188052, 188056, 188060, 188064, 188068, 188072, 188076, 188080,
+    188084, 188088, 188092, 188096, 188100, 188104, 188108, 188112, 188116,
+    188120, 188124, 188128, 188132, 188136, 188140, 188144, 188148, 188152,
+    188156, 188160, 188164, 188168, 188172, 188176, 188180, 188184, 188188,
+    188192, 188196, 188200, 188204, 188208, 188212, 188216, 188220, 188224,
+    188228, 188232, 188236, 188240, 188244, 188248, 188252, 188256, 188260,
+    188264, 188268, 188272, 188276, 188280, 188284, 188288, 188292, 188296,
+    188300, 188304, 188308, 188312, 188316, 188320, 188324, 188328, 188332,
+    188336, 188340, 188344, 188348, 188352, 188356, 188360, 188364, 188368,
+    188372, 188376, 188380, 188384, 188388, 188392, 188397, 188402, 188407,
+    188411, 188417, 188424, 188431, 188438, 188445, 188452, 188459, 188466,
+    188473, 188480, 188487, 188494, 188501, 188508, 188514, 188520, 188527,
+    188533, 188540, 188547, 188554, 188561, 188568, 188575, 188582, 188589,
+    188596, 188603, 188610, 188617, 188624, 188630, 188636, 188642, 188649,
+    188658, 188667, 188676, 188685, 188690, 188695, 188702, 188709, 188716,
+    188723, 188730, 188736, 188742, 188748, 188754, 188760, 188766, 188772,
+    188777, 188783, 188793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0,
 };
 
 /* name->code dictionary */
 static const unsigned int code_hash[] = {
     74224, 4851, 0, 0, 0, 0, 7929, 0, 0, 0, 0, 127931, 0, 42833, 983091,
-    12064, 0, 129548, 194597, 69850, 65842, 0, 0, 0, 78159, 68476, 72392,
-    1373, 0, 0, 5816, 0, 0, 4231, 0, 0, 4233, 4234, 4232, 68885, 70351, 0,
-    7404, 72393, 0, 0, 0, 0, 0, 41601, 8874, 0, 0, 0, 0, 0, 0, 41603, 9784,
-    0, 9188, 41600, 0, 0, 0, 0, 3535, 0, 0, 0, 66797, 0, 74491, 0, 3404,
-    100419, 0, 72411, 1759, 100417, 0, 100418, 69972, 11240, 121038, 100416,
-    127764, 0, 0, 0, 0, 0, 69970, 0, 0, 9834, 43249, 2234, 983872, 0, 0, 0,
-    0, 92417, 0, 74398, 12035, 0, 983074, 43548, 0, 0, 0, 0, 0, 64318,
+    12064, 110752, 129548, 194597, 69850, 65842, 0, 0, 0, 78159, 68476,
+    72392, 1373, 0, 0, 5816, 0, 0, 4231, 0, 0, 4233, 4234, 4232, 68885,
+    70351, 0, 7404, 72393, 0, 0, 0, 0, 0, 41601, 8874, 0, 0, 0, 0, 0, 0,
+    41603, 9784, 0, 9188, 41600, 0, 0, 0, 0, 3535, 0, 0, 0, 66797, 0, 74491,
+    0, 3404, 100419, 0, 72411, 1759, 100417, 0, 100418, 69972, 11240, 121038,
+    100416, 127764, 0, 0, 0, 0, 0, 69970, 0, 0, 9834, 43249, 2234, 983872, 0,
+    0, 0, 0, 92417, 0, 74398, 12035, 0, 983074, 43548, 0, 0, 0, 0, 0, 64318,
     917549, 0, 3390, 74483, 43265, 0, 983865, 0, 0, 0, 3400, 0, 0, 11647, 0,
     0, 0, 0, 2121, 128741, 4043, 8712, 0, 983795, 0, 121172, 0, 129456, 0, 0,
     93042, 0, 0, 983856, 0, 0, 0, 11851, 0, 3181, 66002, 0, 69601, 0, 66021,
     0, 194588, 5457, 5440, 0, 93981, 65282, 2843, 5355, 0, 129333, 69971,
     5194, 11657, 128353, 0, 0, 0, 0, 0, 0, 100525, 0, 0, 74350, 0, 10682,
-    110820, 10602, 800, 70044, 118883, 0, 0, 64930, 118940, 67853, 0, 0, 762,
-    120485, 0, 0, 0, 10906, 1353, 6960, 0, 0, 5828, 8724, 0, 0, 0, 0, 0,
+    110820, 10602, 800, 70044, 118883, 0, 0, 64930, 118940, 67853, 72001, 0,
+    762, 120485, 0, 0, 0, 10906, 1353, 6960, 0, 0, 5828, 8724, 0, 0, 0, 0, 0,
     7080, 0, 0, 0, 0, 72388, 0, 0, 0, 0, 68878, 0, 0, 0, 7240, 0, 556, 0, 0,
     0, 0, 0, 72397, 0, 0, 0, 0, 0, 0, 0, 0, 72986, 0, 0, 43931, 0, 11093, 0,
     0, 125016, 7341, 66801, 68527, 0, 1874, 0, 0, 129314, 0, 0, 0, 0, 0, 0,
@@ -23526,12 +24325,12 @@
     0, 92928, 0, 0, 7233, 92929, 0, 0, 6639, 0, 0, 123149, 0, 1176, 0, 0,
     8276, 128667, 0, 0, 68892, 42931, 0, 0, 0, 0, 0, 0, 0, 5388, 0, 0, 0,
     11310, 0, 123607, 0, 68888, 4199, 119264, 0, 119020, 0, 0, 9560, 0, 0,
-    43869, 0, 0, 0, 83172, 0, 0, 0, 83173, 121256, 128875, 0, 0, 74327, 0, 0,
+    43869, 0, 0, 0, 83172, 0, 0, 0, 83173, 101559, 128875, 0, 0, 74327, 0, 0,
     0, 0, 0, 123623, 68886, 0, 0, 0, 8408, 64704, 0, 0, 0, 0, 0, 67999, 0, 0,
     0, 0, 43049, 0, 43050, 73028, 0, 0, 0, 0, 0, 127396, 0, 69847, 9322, 0,
     0, 129321, 68192, 120507, 983634, 0, 0, 0, 6199, 67249, 0, 0, 0, 0,
     11329, 66285, 0, 983086, 0, 0, 0, 0, 41335, 118866, 43401, 0, 41334, 0,
-    0, 0, 983479, 0, 983478, 128114, 0, 42627, 0, 32, 6187, 0, 123619,
+    0, 0, 983479, 71997, 983478, 128114, 0, 42627, 0, 32, 6187, 0, 123619,
     983475, 3665, 121083, 42871, 983118, 41336, 0, 0, 983471, 0, 0, 0, 4412,
     0, 0, 0, 0, 119533, 0, 4181, 0, 0, 127589, 0, 0, 71453, 6181, 74755,
     917895, 0, 0, 0, 0, 121107, 0, 0, 10073, 0, 100738, 127186, 0, 42844,
@@ -23552,45 +24351,46 @@
     0, 0, 0, 0, 983507, 41323, 0, 0, 92289, 0, 0, 0, 983503, 41321, 12907,
     3048, 7752, 41320, 0, 0, 12819, 111247, 72127, 0, 0, 0, 0, 0, 72971, 0,
     0, 0, 0, 78650, 78649, 0, 41326, 0, 11806, 43167, 0, 1245, 0, 66463, 0,
-    0, 0, 0, 0, 194619, 0, 0, 0, 0, 0, 0, 70403, 325, 12874, 0, 74178, 0, 0,
-    119110, 0, 0, 0, 0, 0, 0, 983563, 92175, 0, 0, 0, 121049, 0, 0, 0, 0, 0,
-    0, 110844, 11776, 0, 19908, 0, 0, 0, 8753, 0, 0, 0, 9511, 43493, 0,
-    93032, 6205, 0, 0, 0, 0, 0, 0, 0, 0, 126577, 0, 41607, 0, 0, 120617, 0,
-    0, 0, 7005, 41609, 9580, 0, 401, 0, 43779, 0, 127962, 0, 65486, 0, 12857,
-    0, 11983, 0, 0, 0, 121371, 0, 194971, 74258, 0, 0, 0, 0, 0, 0, 8295,
-    6200, 0, 127864, 0, 0, 71435, 0, 92523, 0, 128631, 0, 0, 125197, 0, 0, 0,
-    127556, 0, 0, 0, 64775, 0, 68862, 120590, 0, 0, 0, 8074, 8199, 126641,
-    1907, 127269, 4432, 127271, 10808, 120668, 127272, 127259, 3888, 127261,
-    72724, 127263, 127262, 127265, 123169, 121195, 127250, 66879, 127252,
-    100422, 66023, 67363, 7663, 0, 0, 0, 0, 66321, 0, 12814, 127248, 127169,
-    0, 0, 194603, 7641, 92694, 0, 0, 0, 0, 74320, 120818, 120268, 0, 128475,
-    0, 110627, 0, 9622, 128972, 120264, 0, 0, 0, 0, 68319, 0, 0, 71484, 0, 0,
-    0, 69906, 0, 0, 947, 0, 194586, 129059, 10969, 119935, 7613, 119937,
-    119936, 4795, 119930, 119933, 7376, 0, 0, 0, 0, 0, 0, 0, 0, 119919, 7216,
-    119921, 7217, 119915, 7218, 119917, 7219, 119927, 119926, 119929, 119928,
-    7213, 119922, 7214, 7215, 128622, 0, 8880, 7685, 128849, 0, 0, 119618, 0,
-    8187, 119913, 12815, 7236, 7915, 71906, 0, 121284, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 10468, 0, 0, 0, 0, 0, 0, 0, 0, 917909, 0, 110633, 1616,
-    3795, 67732, 11529, 0, 126225, 0, 0, 1138, 194577, 12677, 0, 0, 3239, 0,
-    0, 194809, 194583, 0, 42164, 0, 11778, 0, 43259, 0, 119073, 0, 0, 0,
-    67094, 129638, 0, 78421, 128123, 78418, 0, 0, 0, 0, 43959, 43960, 0,
-    72257, 0, 9359, 78416, 0, 0, 0, 6662, 0, 0, 3863, 0, 41329, 55266, 0,
-    127822, 41328, 75026, 194569, 129516, 0, 0, 0, 119595, 569, 0, 0, 0,
-    119085, 110669, 0, 0, 11610, 11368, 0, 194570, 41331, 1006, 127747,
-    120883, 1550, 8201, 0, 0, 5499, 43956, 77908, 77910, 77906, 43957, 77904,
-    77905, 128410, 0, 0, 129581, 100447, 43955, 77913, 0, 0, 5511, 0, 983702,
-    0, 69241, 8255, 5512, 128560, 119560, 127858, 64313, 127928, 5906, 1119,
-    128180, 67088, 983362, 0, 113798, 0, 66423, 0, 0, 0, 67089, 0, 0, 0, 0,
-    128177, 983709, 0, 0, 0, 5821, 6186, 0, 128034, 19961, 0, 983700, 0,
-    65138, 302, 41113, 41115, 0, 6637, 5907, 128789, 0, 43642, 0, 128625, 0,
-    70345, 5513, 6666, 100567, 78442, 5510, 0, 0, 0, 983706, 78437, 0, 0, 0,
-    110838, 0, 0, 0, 92710, 0, 0, 0, 0, 0, 74497, 92395, 120511, 6929, 69412,
-    0, 110835, 64442, 0, 0, 74496, 0, 6674, 43397, 0, 1476, 0, 0, 72276,
-    3233, 0, 0, 10164, 0, 0, 3530, 67243, 0, 111219, 6656, 0, 0, 74647, 8512,
-    72275, 74261, 8967, 0, 0, 0, 72277, 7986, 73782, 120556, 9006, 983562,
-    72273, 0, 7853, 0, 983355, 0, 0, 0, 0, 983952, 0, 0, 0, 0, 0, 0, 0, 0,
-    127971, 67983, 13296, 517, 0, 0, 0, 41528, 19923, 65454, 0, 0, 0, 10531,
-    7784, 41526, 71727, 0, 8057, 1126, 73895, 0, 0, 0, 119186, 4251, 8235,
+    0, 0, 0, 0, 194619, 0, 194618, 0, 0, 194620, 0, 70403, 325, 12874, 0,
+    74178, 0, 0, 119110, 0, 0, 0, 0, 0, 0, 983563, 92175, 0, 0, 0, 121049, 0,
+    0, 0, 0, 0, 0, 110844, 11776, 0, 19908, 0, 0, 0, 8753, 69278, 0, 0, 9511,
+    43493, 0, 93032, 6205, 0, 0, 0, 0, 0, 0, 0, 0, 126577, 0, 41607, 0, 0,
+    120617, 0, 0, 0, 7005, 41609, 9580, 0, 401, 0, 43779, 0, 127962, 0,
+    65486, 0, 12857, 0, 11983, 0, 0, 0, 121371, 0, 194971, 74258, 0, 0, 0, 0,
+    0, 0, 8295, 6200, 0, 127864, 0, 0, 71435, 0, 92523, 0, 128631, 0, 0,
+    125197, 0, 0, 0, 127556, 0, 0, 0, 64775, 0, 68862, 120590, 0, 0, 129959,
+    8074, 8199, 126641, 1907, 127269, 4432, 127271, 10808, 120668, 127272,
+    127259, 3888, 127261, 72724, 127263, 127262, 127265, 123169, 121195,
+    127250, 66879, 127252, 100422, 66023, 67363, 7663, 0, 0, 0, 0, 66321, 0,
+    12814, 127248, 127169, 0, 0, 194603, 7641, 92694, 0, 0, 0, 0, 74320,
+    120818, 120268, 0, 128475, 0, 110627, 0, 9622, 128972, 120264, 0, 0, 0,
+    0, 68319, 0, 0, 71484, 0, 0, 0, 69906, 0, 0, 947, 0, 194586, 129059,
+    10969, 119935, 7613, 119937, 119936, 4795, 119930, 119933, 7376, 0, 0, 0,
+    0, 0, 0, 0, 0, 119919, 7216, 119921, 7217, 119915, 7218, 119917, 7219,
+    119927, 119926, 119929, 119928, 7213, 119922, 7214, 7215, 128622, 0,
+    8880, 7685, 128849, 0, 0, 119618, 119853, 8187, 119913, 12815, 7236,
+    7915, 71906, 0, 121284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10468, 0,
+    0, 0, 0, 0, 0, 0, 0, 917909, 0, 110633, 1616, 3795, 67732, 11529, 0,
+    126225, 0, 0, 1138, 194577, 12677, 0, 0, 3239, 0, 0, 194809, 194583, 0,
+    42164, 0, 11778, 0, 43259, 0, 119073, 0, 0, 0, 67094, 129638, 0, 78421,
+    128123, 78418, 0, 0, 0, 0, 43959, 43960, 0, 72257, 0, 9359, 78416, 0, 0,
+    0, 6662, 0, 0, 3863, 0, 41329, 55266, 0, 127822, 41328, 75026, 194569,
+    129516, 0, 0, 0, 119595, 569, 0, 0, 0, 119085, 110669, 0, 0, 11610,
+    11368, 0, 194570, 41331, 1006, 127747, 120883, 1550, 8201, 0, 194811,
+    5499, 43956, 77908, 77910, 77906, 43957, 77904, 77905, 128410, 0, 0,
+    129581, 100447, 43955, 77913, 0, 0, 5511, 0, 983702, 0, 69241, 8255,
+    5512, 128560, 119560, 127858, 64313, 127928, 5906, 1119, 128180, 67088,
+    983362, 0, 113798, 0, 66423, 0, 0, 0, 67089, 0, 0, 0, 0, 128177, 983709,
+    0, 0, 0, 5821, 6186, 129960, 128034, 19961, 0, 983700, 0, 65138, 302,
+    41113, 41115, 0, 6637, 5907, 128789, 0, 43642, 0, 128625, 0, 70345, 5513,
+    6666, 100567, 78442, 5510, 0, 0, 0, 983706, 78437, 0, 0, 0, 110838, 0, 0,
+    0, 92710, 0, 0, 0, 0, 0, 74497, 92395, 120511, 6929, 69412, 0, 110835,
+    64442, 0, 0, 74496, 0, 6674, 43397, 0, 1476, 0, 0, 72276, 3233, 0, 0,
+    10164, 0, 0, 3530, 67243, 0, 111219, 6656, 0, 0, 74647, 8512, 72275,
+    74261, 8967, 0, 0, 0, 72277, 7986, 73782, 120556, 9006, 983562, 72273, 0,
+    7853, 0, 983355, 0, 0, 0, 0, 983952, 0, 0, 0, 0, 0, 0, 0, 0, 127971,
+    67983, 13296, 517, 0, 0, 0, 41528, 19923, 65454, 0, 0, 0, 10531, 7784,
+    41526, 71727, 0, 8057, 1126, 73895, 0, 0, 130040, 119186, 4251, 8235,
     43142, 0, 489, 71733, 4250, 71731, 110721, 43151, 94177, 71725, 0,
     121238, 0, 0, 0, 110726, 0, 8711, 6183, 110722, 110723, 0, 0, 7623, 0, 0,
     9235, 12760, 74176, 0, 0, 0, 0, 3743, 11514, 11078, 74582, 0, 0, 126597,
@@ -23599,294 +24399,297 @@
     0, 92541, 128017, 126087, 126590, 0, 12767, 0, 983375, 64261, 0, 127537,
     70852, 70347, 0, 6673, 0, 0, 129346, 12438, 0, 0, 0, 71128, 0, 9053,
     43954, 74523, 0, 0, 0, 6195, 0, 6660, 0, 917760, 917793, 0, 12629, 0, 0,
-    0, 0, 0, 127940, 0, 0, 0, 65448, 0, 0, 121084, 0, 43949, 0, 78099, 0, 0,
-    0, 0, 0, 5741, 1131, 0, 0, 74862, 0, 43952, 42533, 119598, 78107, 0, 0,
-    43950, 121297, 118990, 7691, 43951, 578, 0, 0, 0, 42514, 74547, 74196,
-    120608, 74561, 0, 983957, 0, 0, 0, 0, 0, 0, 0, 0, 7241, 0, 93846, 119167,
-    0, 12811, 78082, 3946, 0, 10998, 66807, 673, 0, 0, 0, 0, 119301, 0,
-    68890, 0, 0, 78085, 10267, 0, 74560, 78083, 0, 8729, 0, 0, 0, 0, 0, 0, 0,
-    119296, 0, 0, 0, 120853, 983458, 731, 0, 71904, 128316, 0, 0, 0, 1175, 0,
-    68167, 0, 0, 10793, 0, 67644, 7723, 983453, 0, 0, 0, 0, 5273, 0, 5269, 0,
-    69607, 2404, 5267, 124967, 0, 0, 5277, 0, 0, 6189, 65469, 1314, 0, 0,
-    118873, 8785, 0, 0, 127527, 68414, 43535, 9204, 0, 3879, 0, 71696, 6197,
-    9497, 0, 7567, 64484, 78128, 41390, 41379, 41882, 67647, 67279, 70085, 0,
-    121413, 41388, 64446, 41392, 64288, 41387, 0, 8706, 10675, 0, 700, 0,
-    5775, 0, 7088, 74756, 7499, 0, 78120, 78111, 67251, 126557, 0, 0, 128945,
-    10311, 78115, 6665, 11115, 0, 7618, 10821, 11455, 0, 64632, 64447, 0, 0,
-    78093, 78091, 0, 0, 65033, 0, 6668, 0, 0, 0, 656, 69686, 65037, 0, 0, 0,
-    0, 0, 0, 0, 73014, 0, 0, 917774, 9702, 0, 92273, 66580, 118895, 66683,
-    43640, 3417, 0, 6832, 0, 917768, 0, 917767, 0, 4935, 11906, 0, 0, 67296,
-    92896, 3651, 0, 67294, 70848, 0, 67292, 0, 12983, 0, 55272, 0, 0, 1439,
-    0, 74897, 0, 0, 0, 78373, 0, 42087, 3063, 0, 0, 7838, 0, 129282, 0, 0,
-    67968, 0, 128582, 9078, 92446, 0, 0, 0, 0, 0, 0, 119586, 0, 7750, 128422,
-    68237, 6190, 0, 0, 0, 72340, 9857, 7014, 9856, 0, 92620, 120547, 0, 8481,
-    0, 6202, 0, 10920, 67970, 0, 0, 983292, 0, 7843, 65818, 66824, 0, 0, 0,
-    0, 0, 0, 0, 6657, 207, 0, 69728, 74819, 0, 0, 0, 0, 0, 0, 0, 0, 41368,
-    43974, 488, 0, 0, 71339, 10157, 0, 43034, 11982, 0, 0, 0, 0, 0, 41372,
-    6669, 8504, 72103, 0, 41367, 129328, 119272, 0, 11726, 8261, 0, 304, 0,
-    0, 0, 0, 113683, 983235, 238, 74522, 0, 0, 19905, 120577, 983469, 0,
-    41044, 67640, 67302, 64814, 9912, 65939, 983465, 0, 0, 0, 0, 0, 0, 309,
-    6622, 0, 10858, 0, 67636, 0, 72749, 0, 0, 0, 67637, 123138, 9712, 68680,
-    43970, 0, 65165, 93047, 0, 0, 0, 0, 0, 0, 6191, 12944, 0, 0, 67634,
-    43763, 0, 0, 67635, 9370, 41381, 0, 0, 123148, 118817, 0, 3222, 121439,
-    0, 0, 66663, 0, 0, 0, 0, 0, 65732, 121144, 0, 0, 0, 0, 67309, 72192,
-    41383, 64568, 0, 0, 0, 0, 983990, 66725, 0, 0, 0, 0, 0, 67306, 3632,
-    128246, 0, 8376, 3648, 0, 74844, 67639, 3636, 0, 3650, 8837, 0, 0, 0,
-    43250, 41562, 0, 0, 68839, 3640, 127190, 0, 11781, 0, 0, 0, 0, 0, 0,
-    126649, 0, 42080, 2529, 0, 78004, 0, 42083, 0, 0, 120531, 67619, 0, 0,
-    9634, 0, 0, 0, 0, 0, 0, 0, 68841, 0, 92545, 68874, 0, 0, 0, 41987,
-    119667, 67623, 983760, 0, 925, 127156, 0, 41985, 64441, 9586, 120988,
-    41984, 9217, 128372, 0, 0, 9186, 67620, 4016, 983815, 0, 381, 0, 0,
-    42077, 0, 128777, 67622, 42078, 0, 10810, 0, 4585, 19943, 5860, 67633, 0,
-    0, 812, 0, 0, 0, 92518, 0, 0, 0, 0, 67629, 0, 10692, 0, 67630, 0, 924, 0,
-    67631, 42616, 0, 0, 0, 67317, 67632, 0, 12771, 12736, 12753, 0, 983734,
-    67626, 67722, 0, 0, 0, 0, 12751, 74906, 8542, 0, 0, 3626, 66706, 0, 0,
-    3883, 64388, 0, 0, 0, 0, 0, 0, 126268, 67624, 0, 10932, 0, 65585, 64338,
-    806, 0, 41884, 110845, 1318, 128828, 0, 0, 0, 983789, 3465, 2405, 983390,
-    0, 12756, 65259, 69381, 983793, 12752, 5833, 1432, 110843, 41883, 110841,
-    9799, 0, 41886, 0, 0, 2062, 0, 0, 0, 0, 129376, 0, 124969, 0, 0, 120971,
-    0, 118832, 0, 0, 0, 68005, 10622, 0, 0, 0, 6566, 71195, 0, 73780, 0,
-    68865, 0, 0, 0, 8284, 0, 0, 0, 0, 0, 43023, 0, 983285, 6642, 3977, 72743,
-    64729, 836, 983381, 92947, 0, 0, 0, 0, 0, 0, 125239, 917923, 0, 0, 0, 0,
-    0, 0, 1374, 65149, 119014, 67720, 0, 2273, 0, 0, 0, 11234, 0, 0, 9630,
-    12597, 0, 0, 0, 6661, 0, 113751, 0, 125015, 0, 0, 72151, 0, 73674, 7718,
-    113755, 0, 0, 0, 0, 983758, 0, 0, 0, 127841, 6365, 1887, 0, 0, 8080,
-    113681, 0, 0, 0, 0, 1544, 0, 0, 64677, 0, 0, 0, 0, 119019, 0, 0, 12812,
-    7342, 0, 73784, 0, 7904, 0, 0, 120910, 0, 0, 0, 0, 9724, 0, 983785, 9524,
-    0, 0, 0, 0, 0, 129344, 0, 471, 0, 0, 128302, 0, 0, 0, 983750, 0, 0, 6918,
-    0, 0, 5156, 0, 128683, 10232, 10615, 10213, 0, 0, 42528, 0, 0, 0, 0,
-    65311, 74935, 0, 13306, 10533, 7870, 0, 7625, 0, 120544, 0, 0, 128816,
-    126098, 0, 0, 0, 0, 0, 92341, 0, 12978, 128533, 0, 0, 43836, 42675, 0,
-    12845, 0, 19942, 0, 0, 0, 0, 0, 120000, 120008, 120001, 0, 194894, 0, 0,
-    0, 0, 7186, 73107, 0, 70093, 445, 0, 0, 0, 0, 73047, 0, 0, 128442, 0, 0,
-    0, 3902, 68913, 0, 0, 0, 1560, 43958, 0, 4584, 0, 67862, 0, 10866, 92905,
-    1118, 92209, 74888, 0, 1081, 7436, 11147, 7252, 0, 121188, 0, 0, 0,
-    41386, 5162, 0, 1330, 0, 121270, 0, 12047, 7675, 0, 0, 1848, 74528,
-    983147, 64708, 0, 0, 194880, 0, 0, 0, 983753, 12715, 128349, 0, 0, 0,
-    66672, 73710, 66685, 0, 0, 92464, 0, 68884, 0, 72835, 0, 70800, 70101,
-    120725, 0, 194893, 9214, 43494, 0, 0, 120841, 0, 0, 6313, 65513, 0, 0, 0,
-    0, 2345, 72975, 0, 0, 0, 0, 3117, 0, 71882, 0, 73100, 0, 0, 0, 0, 78415,
-    983232, 100907, 0, 13248, 0, 120241, 129416, 128415, 0, 121009, 12382,
-    71120, 0, 0, 0, 0, 1471, 0, 113747, 0, 12378, 0, 69664, 0, 12374, 121357,
-    0, 0, 0, 0, 0, 0, 12376, 0, 0, 0, 12380, 10557, 0, 12520, 11122, 2024,
-    127180, 0, 0, 74588, 0, 0, 70120, 3853, 0, 0, 0, 983744, 0, 0, 12090, 0,
-    12474, 92579, 9503, 0, 0, 983271, 68318, 0, 110834, 0, 0, 0, 12470, 0,
-    74189, 2742, 12476, 66370, 10946, 0, 12472, 0, 0, 0, 0, 8213, 43824,
-    7771, 6161, 983275, 68010, 0, 0, 0, 68235, 0, 0, 0, 120985, 0, 0, 0, 0,
-    73791, 0, 68871, 0, 0, 0, 0, 0, 73704, 12015, 128561, 8275, 0, 43459,
-    120927, 127555, 0, 0, 0, 68881, 71215, 0, 118841, 0, 12516, 4444, 0,
-    119017, 120506, 10892, 118828, 0, 6473, 0, 0, 71735, 3591, 0, 0, 0, 0,
-    72345, 0, 0, 0, 127547, 0, 0, 0, 0, 128253, 0, 0, 0, 0, 94060, 687, 0, 0,
-    983399, 0, 0, 68671, 0, 128526, 285, 0, 0, 0, 4459, 0, 0, 74917, 0, 0,
-    126255, 0, 119248, 0, 9743, 0, 0, 126535, 0, 0, 73104, 0, 69659, 0, 0,
-    3081, 74577, 42921, 0, 0, 0, 0, 0, 0, 0, 9125, 119023, 0, 120820, 0,
-    65221, 0, 0, 64852, 0, 0, 0, 0, 66578, 5001, 41879, 0, 0, 5003, 884, 0,
-    0, 4943, 5150, 73889, 74182, 0, 41876, 0, 0, 42448, 42299, 72804, 0, 0,
-    0, 0, 8491, 0, 0, 983635, 4530, 42409, 7126, 119526, 66200, 0, 0, 19929,
-    0, 0, 0, 4242, 0, 0, 0, 0, 66034, 65941, 124929, 64522, 10740, 8958,
-    128257, 9754, 119102, 983246, 74222, 983244, 983243, 119064, 983241,
-    983240, 0, 0, 0, 74518, 66026, 4306, 41468, 68432, 0, 0, 66667, 0, 0,
-    983494, 42200, 0, 0, 0, 120236, 6948, 0, 8524, 0, 0, 12385, 0, 74926, 0,
-    1386, 73996, 0, 0, 0, 121184, 12392, 0, 8064, 0, 0, 78216, 119004, 2080,
-    710, 128491, 12390, 1666, 42091, 0, 12383, 92968, 42092, 68418, 0,
-    128106, 0, 0, 42096, 0, 3362, 12377, 127878, 0, 0, 0, 0, 1244, 4401,
-    73786, 12683, 10662, 0, 8112, 0, 119021, 121017, 12379, 73108, 120534, 0,
-    42208, 0, 12381, 0, 0, 0, 4327, 0, 0, 128350, 0, 78232, 0, 584, 12933, 0,
-    12373, 73105, 13000, 0, 2935, 129113, 12665, 0, 43081, 73098, 120505,
-    12427, 0, 983625, 78227, 0, 0, 0, 0, 0, 74551, 0, 0, 12426, 0, 0, 0,
-    12428, 0, 0, 0, 0, 0, 12429, 6727, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 0,
-    74427, 0, 3536, 120589, 9752, 92397, 6162, 0, 0, 10113, 0, 0, 0, 12422,
-    0, 439, 3072, 0, 42207, 74549, 120830, 0, 0, 0, 0, 8308, 0, 70807, 0, 0,
-    0, 13218, 0, 0, 8082, 12424, 0, 6819, 3539, 93838, 0, 0, 74539, 0, 68181,
-    0, 72964, 0, 72969, 12420, 11371, 0, 4600, 0, 127810, 0, 0, 0, 72962,
-    128552, 6704, 4591, 72966, 0, 0, 0, 72960, 120623, 561, 12159, 78223, 0,
-    78224, 0, 71068, 11932, 7172, 42687, 8368, 0, 0, 93068, 0, 0, 75010, 0,
-    0, 0, 0, 42463, 0, 2924, 67183, 0, 0, 0, 128958, 0, 0, 42330, 73079,
-    3969, 0, 0, 7169, 1992, 9652, 0, 0, 42086, 0, 100865, 0, 0, 0, 0, 0, 327,
-    0, 0, 0, 0, 0, 12433, 0, 0, 0, 12431, 0, 12434, 983434, 0, 0, 0, 7712,
+    0, 0, 0, 127940, 0, 0, 0, 65448, 0, 0, 121084, 129688, 43949, 0, 78099,
+    0, 983380, 0, 0, 0, 5741, 1131, 0, 0, 74862, 0, 43952, 42533, 119598,
+    78107, 0, 0, 43950, 121297, 118990, 7691, 43951, 578, 0, 0, 0, 42514,
+    74547, 74196, 120608, 74561, 0, 983957, 0, 0, 0, 0, 0, 0, 0, 0, 7241, 0,
+    93846, 119167, 0, 12811, 78082, 3946, 0, 10998, 66807, 673, 0, 0, 0, 0,
+    119301, 0, 68890, 0, 0, 78085, 10267, 0, 74560, 78083, 0, 8729, 0, 0, 0,
+    0, 0, 0, 0, 119296, 0, 0, 0, 120853, 983458, 731, 0, 71904, 128316, 0, 0,
+    0, 1175, 0, 68167, 0, 0, 10793, 0, 67644, 7723, 983453, 0, 0, 0, 0, 5273,
+    0, 5269, 0, 69607, 2404, 5267, 124967, 0, 0, 5277, 0, 0, 6189, 65469,
+    1314, 0, 0, 118873, 8785, 0, 0, 127527, 68414, 43535, 9204, 0, 3879, 0,
+    71696, 6197, 9497, 0, 7567, 64484, 78128, 41390, 41379, 41882, 67647,
+    67279, 70085, 0, 121413, 41388, 64446, 41392, 64288, 41387, 0, 8706,
+    10675, 0, 700, 0, 5775, 0, 7088, 74756, 7499, 0, 78120, 78111, 67251,
+    126557, 0, 0, 128945, 10311, 78115, 6665, 11115, 0, 7618, 10821, 11455,
+    0, 64632, 64447, 0, 0, 78093, 78091, 0, 0, 65033, 0, 6668, 0, 0, 0, 656,
+    69686, 65037, 0, 0, 0, 0, 0, 0, 0, 73014, 0, 0, 917774, 9702, 0, 92273,
+    66580, 118895, 66683, 43640, 3417, 0, 6832, 0, 917768, 0, 917767, 0,
+    4935, 11906, 0, 0, 67296, 92896, 3651, 0, 67294, 70848, 0, 67292, 0,
+    12983, 0, 55272, 0, 0, 1439, 0, 74897, 0, 0, 0, 78373, 0, 42087, 3063, 0,
+    0, 7838, 0, 129282, 0, 0, 67968, 0, 128582, 9078, 92446, 0, 0, 0, 0, 0,
+    0, 119586, 0, 7750, 128422, 68237, 6190, 0, 0, 0, 72340, 9857, 7014,
+    9856, 0, 92620, 120547, 0, 8481, 0, 6202, 0, 10920, 67970, 0, 0, 983292,
+    0, 7843, 65818, 66824, 0, 0, 0, 0, 0, 0, 0, 6657, 207, 0, 69728, 74819,
+    0, 0, 0, 0, 0, 0, 0, 0, 41368, 43974, 488, 0, 0, 71339, 10157, 0, 43034,
+    11982, 0, 0, 0, 0, 0, 41372, 6669, 8504, 72103, 0, 41367, 129328, 119272,
+    0, 11726, 8261, 129793, 304, 129799, 129795, 129822, 129807, 113683,
+    983235, 238, 74522, 0, 0, 19905, 120577, 983469, 129200, 41044, 67640,
+    67302, 64814, 9912, 65939, 983465, 0, 0, 0, 0, 0, 0, 309, 6622, 0, 10858,
+    0, 67636, 0, 72749, 0, 0, 0, 67637, 123138, 9712, 68680, 43970, 0, 65165,
+    93047, 0, 0, 0, 0, 0, 0, 6191, 12944, 0, 0, 67634, 43763, 0, 0, 67635,
+    9370, 41381, 0, 0, 123148, 118817, 0, 3222, 121439, 0, 0, 66663, 0, 0, 0,
+    0, 0, 65732, 121144, 0, 0, 0, 0, 67309, 72192, 41383, 64568, 0, 0, 0, 0,
+    983990, 66725, 0, 0, 0, 0, 0, 67306, 3632, 128246, 0, 8376, 3648, 0,
+    74844, 67639, 3636, 0, 3650, 8837, 0, 0, 0, 43250, 41562, 0, 0, 68839,
+    3640, 127190, 0, 11781, 0, 0, 0, 0, 0, 0, 126649, 0, 42080, 2529, 0,
+    78004, 0, 42083, 0, 0, 120531, 67619, 0, 0, 9634, 0, 0, 0, 0, 0, 0, 0,
+    68841, 0, 92545, 68874, 127399, 0, 0, 41987, 119667, 67623, 983760, 0,
+    925, 127156, 0, 41985, 64441, 9586, 120988, 41984, 9217, 128372, 0, 0,
+    9186, 67620, 4016, 983815, 0, 381, 983681, 0, 42077, 0, 128777, 67622,
+    42078, 0, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, 812, 0, 0, 0, 92518,
+    0, 0, 0, 0, 67629, 0, 10692, 0, 67630, 0, 924, 0, 67631, 42616, 0, 0, 0,
+    67317, 67632, 0, 12771, 12736, 12753, 0, 983734, 67626, 67722, 0, 0, 0,
+    0, 12751, 74906, 8542, 0, 0, 3626, 66706, 0, 0, 3883, 64388, 0, 0, 0, 0,
+    0, 0, 126268, 67624, 0, 10932, 0, 65585, 64338, 806, 0, 41884, 110845,
+    1318, 128828, 0, 0, 0, 983789, 3465, 2405, 983390, 0, 12756, 65259,
+    69381, 983793, 12752, 5833, 1432, 110843, 41883, 110841, 9799, 0, 41886,
+    0, 0, 2062, 0, 0, 0, 0, 129376, 0, 124969, 983387, 0, 120971, 0, 118832,
+    0, 983281, 0, 68005, 10622, 0, 0, 0, 6566, 71195, 0, 73780, 0, 68865, 0,
+    0, 0, 8284, 0, 0, 0, 0, 0, 43023, 0, 983285, 6642, 3977, 72743, 64729,
+    836, 983381, 92947, 0, 0, 0, 0, 0, 0, 125239, 917923, 0, 0, 0, 0, 0, 0,
+    1374, 65149, 119014, 67720, 0, 2273, 0, 0, 0, 11234, 0, 0, 9630, 12597,
+    0, 0, 0, 6661, 0, 113751, 120551, 125015, 0, 0, 72151, 0, 73674, 7718,
+    113755, 0, 69570, 0, 0, 983758, 0, 0, 0, 127841, 6365, 1887, 983409, 0,
+    8080, 113681, 0, 0, 0, 129855, 1544, 0, 0, 64677, 0, 0, 0, 0, 119019, 0,
+    0, 12812, 7342, 0, 73784, 0, 7904, 0, 0, 120910, 0, 0, 0, 0, 9724, 0,
+    983785, 9524, 0, 0, 0, 0, 0, 129344, 0, 471, 0, 0, 128302, 0, 0, 0,
+    983750, 0, 0, 6918, 0, 0, 5156, 0, 128683, 10232, 10615, 10213, 0, 0,
+    42528, 0, 0, 0, 0, 65311, 74935, 0, 13306, 10533, 7870, 0, 7625, 0,
+    120544, 0, 0, 128816, 126098, 0, 0, 0, 0, 0, 92341, 0, 12978, 128533, 0,
+    0, 43836, 42675, 0, 12845, 0, 19942, 0, 0, 0, 0, 0, 120000, 120008,
+    120001, 0, 194894, 0, 0, 0, 0, 7186, 73107, 0, 70093, 445, 119028, 0, 0,
+    0, 73047, 0, 0, 128442, 0, 0, 0, 3902, 68913, 129916, 0, 0, 1560, 43958,
+    0, 4584, 0, 67862, 0, 10866, 92905, 1118, 92209, 74888, 0, 1081, 7436,
+    11147, 7252, 0, 121188, 0, 0, 0, 41386, 5162, 129823, 1330, 0, 121270, 0,
+    12047, 7675, 0, 0, 1848, 74528, 983147, 64708, 0, 0, 194880, 0, 0, 0,
+    983753, 12715, 128349, 0, 0, 0, 66672, 73710, 66685, 0, 0, 92464, 0,
+    68884, 0, 72835, 0, 70800, 70101, 120725, 0, 194893, 9214, 43494, 0, 0,
+    120841, 0, 0, 6313, 65513, 0, 0, 0, 0, 2345, 72975, 0, 0, 129937, 0,
+    3117, 0, 71882, 0, 73100, 0, 0, 0, 0, 78415, 983232, 100907, 0, 13248, 0,
+    120241, 129416, 128415, 0, 94193, 12382, 71120, 0, 0, 0, 0, 1471, 0,
+    113747, 0, 12378, 0, 69664, 0, 12374, 121357, 0, 0, 0, 0, 0, 0, 12376, 0,
+    0, 0, 12380, 10557, 0, 12520, 11122, 2024, 127180, 0, 0, 74588, 0, 0,
+    70120, 3853, 0, 0, 0, 983744, 0, 0, 12090, 0, 12474, 92579, 9503, 0, 0,
+    983271, 68318, 0, 110834, 0, 0, 0, 12470, 0, 74189, 2742, 12476, 66370,
+    10946, 0, 12472, 0, 0, 0, 0, 8213, 43824, 7771, 6161, 983275, 68010, 0,
+    0, 0, 68235, 0, 0, 0, 120985, 0, 0, 0, 129814, 73791, 129830, 68871, 0,
+    0, 0, 0, 0, 73704, 12015, 128561, 8275, 0, 43459, 120927, 127555, 0, 0,
+    0, 68881, 71215, 0, 118841, 0, 12516, 4444, 0, 119017, 120506, 10892,
+    118828, 0, 6473, 0, 0, 71735, 3591, 0, 0, 0, 0, 72345, 0, 0, 0, 127547,
+    0, 0, 0, 0, 128253, 0, 0, 0, 0, 94060, 687, 0, 0, 983399, 0, 0, 43882, 0,
+    128526, 285, 0, 0, 0, 4459, 0, 0, 74917, 0, 0, 126255, 0, 119248, 0,
+    9743, 0, 0, 126535, 0, 0, 73104, 0, 69659, 0, 0, 3081, 74577, 42921, 0,
+    0, 0, 0, 0, 0, 0, 9125, 119023, 0, 120820, 0, 65221, 0, 0, 64852, 0, 0,
+    0, 0, 66578, 5001, 41879, 0, 0, 5003, 884, 0, 0, 4943, 5150, 73889,
+    74182, 0, 41876, 0, 0, 42448, 42299, 72804, 0, 0, 0, 0, 8491, 0, 0,
+    983635, 4530, 42409, 7126, 119526, 66200, 0, 0, 19929, 0, 0, 0, 4242, 0,
+    0, 0, 0, 66034, 65941, 124929, 64522, 10740, 8958, 128257, 9754, 119102,
+    983246, 74222, 983244, 983243, 119064, 983241, 983240, 0, 0, 0, 74518,
+    66026, 4306, 41468, 68432, 0, 0, 66667, 0, 0, 983494, 42200, 0, 0, 0,
+    120236, 6948, 0, 8524, 0, 0, 12385, 0, 74926, 0, 1386, 73996, 0, 0, 0,
+    121184, 12392, 0, 8064, 0, 0, 78216, 119004, 2080, 710, 128491, 12390,
+    1666, 42091, 0, 12383, 92968, 42092, 68418, 0, 128106, 0, 0, 42096, 0,
+    3362, 12377, 127878, 0, 0, 0, 0, 1244, 4401, 73786, 12683, 10662, 0,
+    8112, 129837, 119021, 121017, 12379, 73108, 120534, 0, 42208, 0, 12381,
+    0, 0, 0, 4327, 0, 0, 128350, 0, 78232, 0, 584, 12933, 0, 12373, 73105,
+    13000, 0, 2935, 129113, 12665, 0, 43081, 73098, 120505, 12427, 0, 983625,
+    78227, 0, 0, 0, 0, 128760, 74551, 0, 0, 12426, 0, 0, 0, 12428, 0, 0, 0,
+    0, 0, 12429, 6727, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 0, 74427, 0, 3536,
+    120589, 9752, 92397, 6162, 0, 0, 10113, 0, 0, 0, 12422, 0, 439, 3072, 0,
+    42207, 74549, 120830, 0, 0, 0, 0, 8308, 0, 70807, 0, 0, 0, 13218, 0, 0,
+    8082, 12424, 0, 6819, 3539, 93838, 0, 0, 74539, 0, 68181, 0, 72964, 0,
+    72969, 12420, 11371, 0, 4600, 0, 127810, 0, 0, 0, 72962, 128552, 6704,
+    4591, 72966, 0, 0, 0, 72960, 120623, 561, 12159, 78223, 0, 78224, 0,
+    71068, 11932, 7172, 42687, 8368, 0, 0, 93068, 0, 0, 75010, 0, 0, 0, 0,
+    42463, 0, 2924, 67183, 0, 129947, 0, 128958, 0, 0, 42330, 73079, 3969, 0,
+    129973, 7169, 1992, 9652, 0, 0, 42086, 0, 100865, 0, 0, 0, 0, 0, 327, 0,
+    0, 0, 0, 0, 12433, 0, 0, 0, 12431, 0, 12434, 983434, 0, 0, 0, 7712,
     12432, 0, 69377, 129147, 100867, 0, 8212, 0, 128014, 0, 119066, 7333, 0,
     0, 0, 67407, 70006, 128461, 0, 12436, 0, 43160, 0, 74896, 92757, 71360,
     42350, 0, 0, 0, 100566, 0, 11348, 0, 0, 9194, 983184, 0, 55250, 0,
     100569, 0, 0, 0, 0, 0, 64746, 66012, 100565, 3444, 75029, 64651, 0,
     41503, 0, 0, 0, 0, 0, 0, 0, 120876, 0, 0, 129408, 65309, 12416, 0, 0, 0,
-    0, 93024, 12418, 74111, 121046, 0, 0, 0, 0, 0, 4596, 66339, 12417, 66001,
-    0, 126491, 12414, 8287, 0, 0, 0, 1143, 0, 0, 12415, 0, 0, 983242, 0,
-    9021, 120783, 0, 11724, 0, 0, 0, 194794, 0, 0, 8027, 194796, 74257,
+    0, 93024, 12418, 74111, 121046, 0, 0, 0, 119361, 0, 4596, 66339, 12417,
+    66001, 0, 126491, 12414, 8287, 0, 0, 0, 1143, 0, 0, 12415, 0, 0, 983242,
+    0, 9021, 120783, 0, 11724, 0, 0, 0, 194794, 0, 0, 8027, 194796, 74257,
     127375, 11400, 74197, 194799, 66833, 194798, 0, 0, 983247, 0, 0, 1324, 0,
     0, 0, 194878, 7715, 0, 0, 194777, 194780, 0, 0, 0, 194787, 0, 0, 0, 0, 0,
     66289, 127109, 3889, 129561, 194800, 0, 0, 0, 0, 121226, 12999, 0,
     120902, 0, 0, 0, 0, 0, 64802, 42210, 4597, 0, 0, 0, 12371, 67164, 0,
     67163, 10805, 0, 0, 0, 0, 0, 12367, 0, 0, 92557, 12363, 0, 0, 128611, 0,
-    0, 0, 8005, 12365, 0, 0, 3756, 12369, 10649, 0, 0, 0, 0, 0, 42923, 0, 0,
-    0, 0, 0, 0, 66659, 0, 0, 0, 0, 5268, 4954, 0, 0, 5266, 126980, 5272,
+    0, 0, 8005, 12365, 0, 0, 3756, 12369, 10649, 0, 70095, 0, 0, 0, 42923, 0,
+    0, 0, 0, 0, 0, 66659, 0, 0, 0, 0, 5268, 4954, 0, 0, 5266, 126980, 5272,
     92294, 0, 42230, 983961, 0, 9128, 0, 0, 0, 0, 6928, 9803, 42282, 9110,
     1505, 0, 0, 5276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8722, 120805, 0, 0, 66695,
     0, 0, 4383, 8900, 0, 0, 74930, 64297, 0, 0, 0, 0, 3419, 42229, 0, 0,
     8911, 0, 42353, 0, 0, 0, 0, 0, 0, 0, 100629, 41576, 42215, 122888, 0, 0,
     8578, 68178, 7573, 41575, 74789, 92310, 0, 73863, 0, 2670, 0, 0, 11723,
-    0, 0, 0, 0, 0, 43414, 0, 0, 65675, 0, 67179, 67168, 12413, 0, 67177, 0,
-    0, 0, 0, 12302, 0, 5250, 12407, 12245, 4404, 9189, 12401, 42007, 0,
+    0, 0, 0, 0, 0, 43414, 0, 0, 65675, 0, 67179, 67168, 12413, 129746, 67177,
+    0, 0, 0, 0, 12302, 0, 5250, 12407, 12245, 4404, 9189, 12401, 42007, 0,
     42005, 65806, 43997, 122922, 42002, 12404, 0, 74928, 4940, 12410, 0,
     128761, 0, 64567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11956, 0, 0, 122882, 0,
-    6631, 128923, 0, 74583, 42218, 0, 0, 0, 0, 0, 0, 71058, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 43370, 0, 5016, 121052, 0, 0, 9491, 0, 0, 0, 0, 64922, 0, 0, 0,
-    0, 92198, 0, 0, 0, 74619, 0, 0, 70422, 983669, 10565, 0, 12177, 0, 0, 0,
-    0, 0, 12395, 127874, 12878, 92630, 12396, 0, 0, 92537, 0, 43113, 0, 0, 0,
-    9781, 0, 4927, 0, 0, 0, 0, 12397, 129089, 128910, 0, 12394, 0, 0, 0, 0,
-    0, 72789, 10781, 1546, 0, 5010, 0, 10507, 127891, 128291, 0, 0, 0, 0,
-    7267, 0, 0, 0, 0, 2819, 0, 0, 71063, 0, 7266, 128553, 7264, 7265, 0,
-    1363, 0, 119581, 65080, 0, 0, 0, 0, 43336, 0, 0, 126263, 73776, 0, 43339,
-    0, 9836, 0, 0, 0, 43335, 41276, 0, 73795, 43337, 817, 11211, 9922,
-    128841, 41274, 11340, 42408, 42447, 74932, 0, 0, 12386, 0, 0, 0, 12389,
-    128398, 0, 41996, 41686, 0, 8269, 1147, 43849, 120896, 1987, 128540,
-    43195, 42001, 41990, 41999, 12391, 0, 0, 4939, 12384, 0, 0, 43243, 0, 0,
-    0, 0, 0, 0, 0, 0, 8247, 0, 0, 7545, 0, 43643, 121445, 0, 10036, 0,
-    119813, 10178, 119816, 0, 119815, 11762, 119818, 0, 92282, 120597, 0, 0,
-    119819, 0, 0, 7719, 0, 2486, 0, 119808, 1507, 0, 129185, 70301, 9687,
-    119826, 0, 119811, 66196, 0, 5262, 0, 74642, 12681, 0, 0, 12406, 12219,
-    0, 127528, 42810, 110991, 0, 983673, 128144, 121027, 126096, 120753,
-    12403, 2500, 0, 0, 12409, 0, 0, 0, 74113, 2343, 12412, 19946, 74112,
-    125042, 13112, 0, 120603, 67866, 110634, 0, 66369, 5861, 110632, 11999,
-    12400, 0, 0, 12645, 0, 11320, 68410, 6748, 65040, 0, 64184, 12974, 66927,
-    67613, 120645, 0, 0, 0, 0, 0, 1928, 0, 67649, 0, 0, 67609, 11235, 0, 0,
-    67610, 8241, 0, 0, 4206, 0, 0, 0, 128298, 110980, 0, 67238, 0, 0, 0,
-    1422, 8357, 0, 7187, 0, 120641, 0, 0, 0, 0, 125022, 111064, 92539, 10120,
-    12405, 0, 72997, 0, 13278, 0, 6366, 0, 7945, 0, 4402, 0, 12402, 129372,
-    0, 74754, 12408, 0, 44007, 0, 0, 0, 12411, 0, 120824, 128306, 121092, 0,
-    1575, 0, 0, 0, 73003, 119622, 0, 0, 12399, 0, 6833, 0, 0, 0, 71878, 9692,
-    0, 0, 100615, 6750, 66855, 0, 0, 0, 0, 43527, 0, 727, 0, 0, 0, 0, 6726,
-    0, 0, 12370, 44023, 0, 126592, 2280, 0, 12372, 120642, 0, 0, 0, 0, 12366,
-    10963, 6066, 1329, 0, 3052, 72987, 0, 66029, 0, 10803, 0, 0, 0, 92473, 0,
-    0, 0, 0, 1499, 0, 0, 42740, 0, 0, 0, 0, 12056, 126484, 0, 3660, 69404,
-    42192, 74253, 0, 42223, 67617, 125254, 0, 0, 0, 0, 9941, 0, 0, 1933, 0,
-    0, 0, 0, 73866, 0, 0, 2487, 67614, 7361, 1804, 0, 67615, 0, 0, 12220,
-    67616, 0, 0, 0, 68200, 6675, 0, 0, 67592, 126582, 0, 64771, 0, 9132, 0,
-    111004, 510, 0, 0, 0, 4561, 7711, 92769, 92944, 111007, 0, 41569, 121282,
-    0, 8167, 66885, 0, 0, 0, 69992, 66403, 6967, 0, 0, 0, 0, 333, 0, 0,
-    10566, 66409, 0, 121373, 0, 72965, 110999, 66388, 6678, 0, 0, 12621, 0,
-    128775, 10227, 4764, 0, 9981, 0, 70278, 11589, 0, 0, 42202, 12754, 0, 0,
-    0, 0, 67594, 2048, 0, 4050, 67595, 0, 0, 43221, 11184, 72709, 0, 0,
-    64175, 0, 72746, 0, 0, 0, 65461, 9798, 0, 71210, 0, 69841, 0, 952,
-    128235, 125107, 0, 70296, 6449, 72102, 0, 0, 43098, 64171, 8142, 64160,
-    0, 0, 0, 0, 0, 0, 0, 0, 67597, 6676, 3930, 42615, 73124, 69991, 67598, 0,
-    0, 0, 65591, 41581, 128056, 1453, 0, 0, 0, 8500, 42222, 0, 119270, 72992,
-    69996, 0, 0, 64676, 0, 0, 67606, 66385, 0, 42217, 13102, 0, 67607, 6672,
-    0, 0, 0, 0, 67608, 0, 9001, 0, 11274, 67601, 0, 64210, 6664, 0, 42056,
-    67602, 0, 0, 0, 0, 1469, 67603, 65381, 69921, 4988, 42372, 0, 9598, 904,
-    352, 42225, 0, 8061, 10673, 0, 0, 128276, 67600, 0, 0, 127293, 8575,
-    127295, 127296, 127289, 127290, 127291, 127292, 127285, 127286, 127287,
-    118877, 127281, 127282, 9460, 823, 11587, 0, 0, 0, 127305, 12387, 0, 0,
-    127301, 126979, 42783, 69998, 64208, 127298, 127299, 66031, 0, 11606,
-    64784, 0, 69973, 0, 0, 0, 5152, 11048, 0, 120121, 67605, 0, 69604, 0,
-    70276, 194847, 0, 127052, 42587, 42214, 41394, 0, 4763, 0, 118935, 0,
-    5260, 0, 94038, 326, 120131, 74119, 0, 10771, 42198, 194920, 194837,
-    194925, 41398, 127079, 41393, 127077, 127076, 453, 41396, 0, 13159,
-    11227, 9572, 0, 0, 194576, 128835, 127081, 0, 126617, 43144, 0, 72972,
-    194887, 0, 0, 0, 0, 0, 64061, 0, 0, 64056, 70310, 0, 0, 0, 194864, 0,
-    111084, 64301, 72998, 10464, 0, 128393, 72847, 0, 11528, 64024, 128072,
-    679, 0, 0, 5850, 758, 7536, 0, 0, 43712, 0, 64006, 983579, 64005, 70298,
-    0, 126487, 0, 0, 0, 0, 0, 72999, 0, 64027, 64029, 0, 0, 64000, 0, 194874,
-    0, 42201, 12421, 194876, 0, 1852, 0, 0, 73744, 0, 64041, 129127, 0, 0, 0,
-    92322, 12423, 12854, 0, 3496, 0, 110966, 0, 194823, 0, 0, 6158, 8327,
-    74553, 0, 12419, 0, 11570, 0, 0, 123618, 0, 7844, 983801, 194909, 0,
-    1682, 93039, 194911, 42756, 6765, 128178, 0, 0, 0, 11412, 6768, 0,
-    194830, 71316, 0, 0, 0, 11577, 0, 194829, 1833, 11576, 74334, 0, 0,
-    42854, 69438, 0, 70307, 0, 194856, 8085, 0, 194850, 0, 72996, 128778,
-    1949, 11614, 7847, 120489, 120997, 64483, 0, 0, 0, 0, 0, 0, 0, 126651,
-    42864, 0, 64667, 74624, 0, 0, 43261, 11484, 127535, 67840, 0, 0, 128965,
-    0, 72974, 0, 110928, 128454, 3455, 0, 0, 9879, 0, 0, 4158, 128050, 0, 0,
-    110929, 0, 0, 0, 332, 118808, 0, 0, 2407, 0, 42199, 92386, 110865, 0,
-    77921, 55217, 123161, 125199, 70043, 0, 0, 0, 121093, 1834, 0, 0, 71315,
-    0, 65249, 0, 8662, 0, 0, 123153, 0, 11539, 10784, 0, 67674, 0, 92233, 0,
-    0, 118858, 0, 0, 0, 0, 0, 0, 12499, 6280, 0, 0, 0, 0, 0, 0, 43851, 6279,
-    12508, 0, 12502, 9161, 0, 1620, 0, 3601, 0, 0, 67246, 609, 11555, 0,
-    12496, 0, 74181, 120492, 12505, 0, 194902, 0, 43567, 239, 0, 127085, 0,
-    0, 42671, 0, 0, 83095, 43565, 127082, 983936, 12696, 127753, 0, 94062,
-    12929, 0, 712, 0, 4197, 0, 42818, 0, 70306, 0, 0, 983805, 0, 43562, 0,
-    129034, 68076, 0, 111074, 64628, 0, 0, 0, 0, 7494, 0, 4924, 0, 0, 0, 0,
-    127088, 0, 127087, 69987, 64796, 0, 0, 12033, 0, 0, 0, 0, 0, 0, 0, 70299,
-    0, 0, 68324, 72420, 0, 0, 0, 0, 70309, 127000, 0, 0, 0, 72418, 72963, 0,
-    5699, 0, 983879, 9488, 74410, 119112, 70477, 11170, 0, 0, 72312, 0, 5265,
-    0, 0, 0, 0, 12464, 0, 43264, 72977, 0, 43345, 0, 0, 120592, 6807, 0,
-    9829, 69997, 0, 0, 43346, 11393, 795, 0, 72412, 12462, 72416, 72415, 0,
-    0, 64362, 0, 0, 120811, 0, 12468, 8607, 1008, 0, 120670, 0, 0, 67855,
-    125018, 127177, 6758, 0, 0, 1820, 41112, 0, 11202, 195083, 0, 13223, 0,
-    64595, 0, 0, 0, 0, 12616, 0, 0, 0, 74467, 0, 0, 0, 0, 0, 0, 67233,
-    119060, 0, 83448, 19920, 69897, 0, 129057, 0, 1130, 0, 0, 0, 11823, 0, 0,
-    118896, 0, 0, 13280, 0, 10747, 118925, 0, 43509, 0, 0, 8959, 0, 6747, 0,
-    0, 8568, 0, 120870, 0, 120803, 83060, 42670, 0, 11621, 12460, 0, 0, 0, 0,
-    111190, 0, 66570, 72989, 121305, 126476, 120582, 0, 0, 0, 111191, 70308,
-    11594, 0, 68333, 69427, 10491, 0, 0, 0, 0, 0, 127506, 0, 194910, 4923,
-    65086, 8981, 0, 42133, 0, 72244, 0, 70294, 0, 0, 12485, 0, 8642, 0,
-    42766, 0, 2210, 11109, 0, 0, 0, 0, 0, 7398, 0, 0, 0, 8041, 1461, 0,
-    119133, 0, 6749, 0, 0, 0, 71705, 0, 0, 68071, 0, 67668, 0, 0, 9193, 0, 0,
-    0, 0, 73810, 0, 0, 64305, 0, 0, 623, 781, 670, 10660, 5769, 613, 7543, 0,
-    477, 92633, 92521, 0, 592, 0, 12459, 0, 0, 0, 12465, 119578, 654, 11345,
-    653, 652, 111250, 647, 0, 633, 120744, 0, 111262, 12480, 74354, 0, 39,
-    12487, 0, 0, 74803, 12482, 0, 12489, 0, 128962, 5550, 129175, 0, 0, 0, 0,
-    1813, 0, 41311, 111205, 0, 11229, 0, 70496, 1675, 69840, 129435, 0,
-    119078, 10070, 10595, 111207, 119077, 111206, 121162, 0, 0, 0, 11222, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 71716, 917841, 0, 0, 270, 0, 0, 0, 0, 0,
-    120899, 0, 69741, 0, 0, 68251, 0, 71721, 364, 9595, 0, 0, 0, 707, 0, 0,
-    9282, 0, 224, 0, 68670, 9332, 65581, 68677, 0, 68644, 0, 11764, 68634, 0,
-    10732, 68640, 850, 0, 0, 71123, 0, 68619, 44008, 68627, 0, 0, 0, 0, 0, 0,
-    0, 0, 12507, 0, 0, 128311, 0, 120529, 4375, 0, 0, 0, 12198, 0, 67339, 0,
-    0, 72994, 74293, 128434, 0, 0, 64546, 0, 71208, 0, 0, 0, 42334, 42502, 0,
-    120887, 72961, 0, 0, 5767, 0, 0, 71710, 8353, 0, 0, 0, 121233, 0, 0, 0,
-    0, 119920, 0, 0, 121186, 0, 0, 0, 72719, 64604, 0, 6096, 0, 10063, 0, 0,
-    119630, 3485, 12987, 0, 127522, 0, 0, 0, 0, 0, 0, 0, 0, 127173, 0, 0,
-    68249, 0, 0, 118923, 0, 64574, 128794, 0, 1640, 12495, 66691, 0, 3138,
-    12504, 11171, 1922, 0, 12498, 0, 0, 69939, 0, 65543, 0, 0, 0, 66643, 0,
-    120734, 0, 4228, 0, 10303, 0, 0, 0, 10335, 3520, 0, 12490, 0, 0, 0,
-    12493, 121452, 64636, 1002, 12491, 0, 0, 92615, 2096, 0, 0, 0, 0, 11611,
-    66228, 0, 11241, 66224, 66221, 66226, 66229, 66219, 66231, 66216, 0,
-    66236, 66211, 66218, 0, 66240, 78041, 66233, 66217, 0, 7909, 66234,
-    11605, 0, 0, 66208, 0, 0, 128282, 73875, 0, 12898, 12494, 120939, 12492,
-    0, 0, 0, 74153, 0, 127391, 127489, 4882, 13040, 0, 120762, 4885, 194732,
-    0, 13042, 4880, 128834, 2429, 0, 8647, 0, 0, 0, 0, 0, 0, 68896, 0,
-    119101, 66693, 0, 1870, 78040, 470, 68893, 78035, 78036, 983581, 78034,
-    110607, 110608, 0, 12511, 74453, 12514, 0, 128609, 7239, 7001, 11974,
-    121214, 0, 0, 7378, 12512, 11615, 13041, 0, 0, 128057, 13038, 0, 0,
-    71717, 70195, 120836, 12510, 127070, 13039, 75019, 12513, 0, 12471,
-    110761, 0, 121385, 70193, 0, 0, 0, 71714, 0, 12477, 0, 12473, 7666,
-    67362, 237, 6281, 0, 0, 0, 0, 1312, 0, 0, 12469, 0, 0, 64335, 12475, 0,
-    69382, 0, 11524, 10367, 10431, 74368, 13017, 3388, 129547, 74372, 0, 0,
-    128725, 4932, 0, 0, 13015, 0, 0, 65451, 8185, 0, 0, 43024, 129362, 74375,
-    10129, 0, 7948, 9236, 0, 0, 0, 92726, 43473, 6289, 10484, 0, 0, 0, 12082,
-    12521, 3147, 110643, 110644, 12524, 110642, 2310, 0, 0, 0, 0, 13013, 0,
-    8596, 983852, 10804, 70497, 0, 0, 13014, 12444, 0, 71697, 13016, 0, 0, 0,
-    0, 12331, 0, 0, 8744, 726, 121090, 983849, 4155, 0, 0, 0, 71690, 12522,
-    73128, 0, 0, 127805, 0, 110647, 0, 0, 983853, 12525, 0, 12523, 2152,
-    11969, 120596, 403, 0, 11021, 0, 0, 11030, 8610, 92567, 0, 0, 63998, 0,
-    0, 0, 0, 0, 0, 0, 12506, 0, 11146, 71477, 12500, 0, 12509, 0, 0, 0, 0,
-    6608, 0, 0, 0, 0, 0, 77995, 0, 3608, 0, 0, 1107, 0, 129658, 0, 0, 0, 0,
-    983937, 43217, 66571, 13222, 118963, 0, 126514, 10463, 11553, 0, 63995,
-    9043, 128634, 71722, 0, 0, 127751, 92974, 12529, 8042, 0, 2344, 12528, 0,
-    0, 0, 69719, 120956, 0, 0, 66512, 0, 12530, 0, 0, 68917, 12658, 0, 71683,
-    0, 983237, 0, 127526, 469, 0, 4363, 3313, 0, 0, 2023, 0, 72251, 78225,
-    65706, 10051, 78219, 78220, 0, 9920, 12215, 0, 4931, 1951, 12497, 119363,
-    0, 0, 119336, 0, 0, 0, 0, 0, 1491, 128578, 129169, 0, 0, 0, 0, 78898,
-    94086, 41993, 0, 67379, 0, 0, 0, 0, 9738, 41995, 1075, 0, 12535, 41992,
-    0, 0, 0, 0, 128117, 0, 9940, 0, 7692, 0, 9727, 41131, 330, 8566, 0,
-    41133, 41117, 128482, 12532, 78550, 78546, 43177, 0, 43235, 0, 917542,
-    78229, 78231, 13031, 12910, 67710, 78555, 13028, 78553, 12537, 0, 0,
-    71692, 12536, 2350, 13029, 78233, 0, 0, 13030, 0, 4527, 71250, 12538, 0,
-    0, 0, 0, 0, 0, 0, 12484, 4032, 71459, 194728, 0, 64344, 0, 66700, 66000,
-    8412, 0, 43466, 1296, 2325, 0, 121020, 10149, 74118, 0, 0, 12481, 121280,
-    12488, 0, 0, 0, 67972, 0, 2354, 42619, 0, 73027, 6295, 901, 0, 0, 0, 0,
-    0, 128653, 11927, 66584, 78559, 78560, 78557, 78558, 0, 74649, 0, 126241,
-    67220, 194726, 78568, 67226, 78565, 70190, 78563, 78564, 2352, 67219,
-    78569, 78570, 11289, 1407, 67973, 0, 13026, 6762, 10399, 70192, 13023,
-    78578, 9777, 67208, 1871, 0, 0, 0, 13024, 983835, 0, 9325, 6818, 6283,
-    11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 0, 983837, 0, 13021,
-    71922, 3136, 0, 983840, 0, 13022, 129143, 9956, 0, 0, 0, 42580, 0, 0, 0,
-    13020, 10024, 0, 94013, 0, 0, 0, 43001, 8029, 0, 0, 0, 3335, 0, 9209,
-    13048, 73126, 0, 0, 0, 3333, 119100, 0, 0, 3342, 78582, 78583, 73056,
-    78581, 4156, 0, 0, 0, 78591, 1611, 73058, 13018, 78586, 78588, 78584,
-    3337, 4537, 78593, 11736, 0, 0, 0, 4214, 73790, 0, 0, 13046, 0, 425,
+    6631, 128923, 0, 74583, 42218, 0, 0, 70094, 0, 0, 0, 71058, 0, 0, 0,
+    127341, 0, 0, 0, 0, 0, 43370, 0, 5016, 121052, 0, 0, 9491, 0, 0, 0, 0,
+    64922, 0, 0, 0, 0, 92198, 0, 0, 0, 74619, 0, 0, 70422, 983669, 10565, 0,
+    12177, 0, 0, 0, 0, 0, 12395, 127874, 12878, 92630, 12396, 0, 0, 92537, 0,
+    43113, 0, 0, 0, 9781, 0, 4927, 0, 0, 0, 0, 12397, 129089, 128910, 0,
+    12394, 0, 0, 0, 0, 0, 72789, 10781, 1546, 0, 5010, 0, 10507, 127891,
+    128291, 0, 0, 0, 0, 7267, 0, 0, 0, 0, 2819, 0, 0, 71063, 0, 7266, 128553,
+    7264, 7265, 0, 1363, 0, 119581, 65080, 0, 0, 0, 0, 43336, 0, 0, 126263,
+    73776, 0, 43339, 0, 9836, 0, 0, 0, 43335, 41276, 0, 73795, 43337, 817,
+    11211, 2241, 128841, 41274, 11340, 42408, 42447, 74932, 0, 0, 12386, 0,
+    0, 0, 12389, 128398, 0, 41996, 41686, 0, 8269, 1147, 43849, 120896, 1987,
+    128540, 43195, 42001, 41990, 41999, 12391, 0, 0, 4939, 12384, 0, 0,
+    43243, 0, 0, 70746, 0, 0, 0, 0, 0, 8247, 0, 0, 7545, 0, 43643, 121445, 0,
+    10036, 0, 119813, 10178, 119816, 0, 119815, 11762, 119818, 0, 92282,
+    120597, 0, 0, 119819, 0, 0, 7719, 0, 2486, 0, 119808, 1507, 0, 129185,
+    70301, 9687, 119825, 0, 119811, 66196, 0, 5262, 0, 74642, 12681, 0, 0,
+    12406, 12219, 0, 127528, 42810, 110991, 0, 983673, 128144, 121027,
+    126096, 120753, 12403, 2500, 0, 0, 12409, 0, 0, 0, 74113, 2343, 12412,
+    19946, 74112, 125042, 13112, 0, 120603, 67866, 110634, 0, 66369, 5861,
+    110632, 11999, 12400, 0, 0, 12645, 0, 11320, 68410, 6748, 65040, 0,
+    64184, 12974, 66927, 67613, 120645, 0, 0, 0, 0, 0, 1928, 0, 67649, 0, 0,
+    67609, 11235, 0, 0, 67610, 8241, 0, 0, 4206, 0, 0, 0, 128298, 110980, 0,
+    67238, 0, 0, 0, 1422, 8357, 0, 7187, 0, 120641, 0, 0, 0, 0, 125022,
+    111064, 92539, 10120, 12405, 0, 72997, 0, 13278, 0, 6366, 0, 7945, 0,
+    4402, 0, 12402, 129372, 0, 74754, 12408, 0, 44007, 0, 0, 0, 12411, 0,
+    120824, 128306, 121092, 0, 1575, 0, 0, 0, 73003, 119622, 0, 0, 12399, 0,
+    6833, 0, 0, 0, 71878, 9692, 0, 0, 100615, 6750, 66855, 0, 0, 0, 0, 43527,
+    0, 727, 0, 0, 0, 0, 6726, 127387, 0, 12370, 44023, 0, 126592, 2280, 0,
+    12372, 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 72987, 0,
+    66029, 0, 10803, 0, 0, 0, 92473, 0, 0, 0, 0, 1499, 0, 0, 42740, 0, 0, 0,
+    0, 12056, 126484, 0, 3660, 69404, 42192, 74253, 0, 42223, 67617, 125254,
+    0, 0, 0, 0, 9941, 0, 0, 1933, 0, 0, 0, 0, 73866, 0, 0, 2487, 67614, 7361,
+    1804, 0, 67615, 0, 0, 12220, 67616, 0, 0, 0, 68200, 6675, 0, 0, 67592,
+    126582, 0, 64771, 0, 9132, 0, 111004, 510, 0, 0, 0, 4561, 7711, 92769,
+    92944, 111007, 0, 41569, 121282, 0, 8167, 66885, 123197, 0, 0, 69992,
+    66403, 6967, 0, 0, 0, 0, 333, 0, 0, 10566, 66409, 0, 121373, 0, 72965,
+    110999, 66388, 6678, 0, 0, 12621, 0, 128775, 10227, 4764, 0, 9981, 0,
+    70278, 11589, 0, 0, 42202, 12754, 0, 0, 69576, 0, 67594, 2048, 0, 4050,
+    67595, 0, 0, 43221, 11184, 72709, 0, 0, 64175, 0, 72746, 0, 0, 129966,
+    65461, 9798, 0, 71210, 0, 69841, 0, 952, 128235, 125107, 0, 70296, 6449,
+    72102, 0, 0, 43098, 64171, 8142, 64160, 0, 0, 0, 0, 0, 0, 0, 0, 67597,
+    6676, 3930, 42615, 73124, 69991, 67598, 0, 0, 0, 65591, 41581, 128056,
+    1453, 0, 0, 0, 8500, 42222, 0, 119270, 72992, 69996, 0, 0, 64676, 0, 0,
+    67606, 66385, 0, 42217, 13102, 0, 67607, 6672, 0, 0, 0, 0, 67608, 0,
+    9001, 0, 11274, 67601, 0, 64210, 6664, 0, 42056, 67602, 0, 0, 0, 0, 1469,
+    67603, 65381, 69921, 4988, 42372, 0, 9598, 904, 352, 42225, 0, 8061,
+    10673, 0, 0, 128276, 67600, 0, 0, 127293, 8575, 127295, 127296, 127289,
+    127290, 127291, 127292, 127285, 127286, 127287, 118877, 127281, 127282,
+    9460, 823, 11587, 0, 0, 0, 127305, 12387, 0, 0, 127301, 126979, 42783,
+    69998, 64208, 127298, 127299, 66031, 0, 11606, 64784, 0, 69973, 0, 0, 0,
+    5152, 11048, 0, 120121, 67605, 0, 69604, 0, 70276, 194847, 0, 127052,
+    42587, 42214, 41394, 0, 4763, 0, 118935, 0, 5260, 0, 94038, 326, 120131,
+    74119, 0, 10771, 42198, 194920, 194837, 194925, 41398, 127079, 41393,
+    127077, 127076, 453, 41396, 0, 13159, 11227, 9572, 0, 0, 194576, 128835,
+    127081, 0, 126617, 43144, 0, 72972, 194887, 0, 0, 0, 0, 0, 64061, 0, 0,
+    64056, 70310, 0, 0, 0, 194864, 0, 111084, 64301, 72998, 10464, 0, 128393,
+    72847, 0, 11528, 64024, 128072, 679, 0, 0, 5850, 758, 7536, 0, 0, 43712,
+    0, 64006, 983589, 64005, 70298, 0, 126487, 0, 0, 0, 0, 0, 72999, 0,
+    64027, 64029, 0, 0, 64000, 0, 194874, 0, 42201, 12421, 194875, 0, 1852,
+    0, 0, 73744, 0, 64041, 129127, 0, 0, 0, 92322, 12423, 12854, 0, 3496, 0,
+    110966, 0, 194823, 0, 0, 6158, 8327, 74553, 0, 12419, 0, 11570, 0, 0,
+    123618, 0, 7844, 983801, 194909, 0, 1682, 93039, 194911, 42756, 6765,
+    128178, 0, 0, 0, 11412, 6768, 0, 194830, 71316, 0, 0, 0, 11577, 0,
+    194829, 1833, 11576, 74334, 0, 0, 42854, 69438, 0, 70307, 0, 194856,
+    8085, 0, 194850, 0, 72996, 128778, 1949, 11614, 7847, 120489, 120997,
+    64483, 0, 0, 0, 0, 0, 0, 0, 126651, 42864, 0, 64667, 74624, 0, 0, 43261,
+    11484, 127535, 67840, 0, 0, 128965, 0, 72974, 0, 110928, 128454, 3455, 0,
+    0, 9879, 0, 0, 4158, 128050, 0, 0, 110929, 0, 0, 0, 332, 118808, 0, 0,
+    2407, 0, 42199, 92386, 110865, 0, 77921, 55217, 123161, 125199, 70043, 0,
+    0, 0, 121093, 1834, 0, 0, 71315, 0, 65249, 0, 8662, 0, 0, 123153, 0,
+    11539, 10784, 0, 67674, 0, 92233, 0, 0, 118858, 0, 0, 0, 0, 0, 0, 12499,
+    6280, 0, 0, 0, 0, 0, 0, 43851, 6279, 12508, 0, 12502, 9161, 0, 1620, 0,
+    3601, 0, 0, 67246, 609, 11555, 0, 12496, 0, 74181, 120492, 12505, 0,
+    194902, 0, 43567, 239, 0, 127085, 0, 0, 42671, 0, 0, 83095, 43565,
+    127082, 983936, 12696, 127753, 0, 94062, 12929, 0, 712, 0, 4197, 0,
+    42818, 0, 70306, 0, 0, 983805, 0, 43562, 0, 129034, 68076, 0, 111074,
+    64628, 0, 0, 0, 0, 7494, 0, 4924, 0, 0, 0, 0, 127088, 0, 127087, 69987,
+    64796, 0, 0, 12033, 0, 0, 0, 0, 0, 0, 0, 70299, 0, 0, 68324, 72420, 0, 0,
+    0, 0, 70309, 127000, 0, 0, 0, 72418, 72963, 0, 5699, 0, 983879, 9488,
+    74410, 119112, 70477, 11170, 0, 0, 72312, 0, 5265, 0, 0, 0, 0, 12464, 0,
+    43264, 72977, 0, 43345, 0, 0, 120592, 6807, 0, 9829, 69997, 0, 0, 43346,
+    11393, 795, 0, 72412, 12462, 72416, 72415, 0, 0, 64362, 0, 0, 120811, 0,
+    12468, 8607, 1008, 0, 120670, 0, 0, 67855, 125018, 127177, 6758, 0, 0,
+    1820, 41112, 0, 11202, 129451, 0, 13223, 0, 64595, 0, 0, 0, 0, 12616, 0,
+    0, 0, 74467, 0, 0, 0, 0, 0, 0, 67233, 119060, 0, 83448, 19920, 69897, 0,
+    129057, 0, 1130, 0, 0, 0, 11823, 0, 0, 118896, 0, 0, 13280, 0, 10747,
+    118925, 0, 43509, 0, 0, 8959, 0, 6747, 0, 0, 8568, 0, 120870, 0, 120803,
+    83060, 42670, 0, 11621, 12460, 0, 0, 0, 0, 111190, 0, 66570, 72989,
+    121305, 126476, 120582, 0, 0, 0, 111191, 70308, 11594, 0, 68333, 69427,
+    10491, 0, 0, 0, 0, 0, 127506, 0, 194910, 4923, 65086, 8981, 0, 42133, 0,
+    72244, 0, 70294, 0, 0, 12485, 0, 8642, 0, 42766, 0, 2210, 11109, 0, 0, 0,
+    0, 0, 7398, 0, 0, 0, 8041, 1461, 0, 119133, 0, 6749, 0, 0, 0, 71705, 0,
+    0, 68071, 0, 67668, 0, 0, 9193, 0, 0, 0, 0, 73810, 0, 0, 64305, 0, 0,
+    623, 781, 670, 10660, 5769, 613, 7543, 0, 477, 92633, 92521, 0, 592, 0,
+    12459, 0, 0, 0, 12465, 119578, 654, 11345, 653, 652, 111250, 647, 0, 633,
+    120744, 0, 111262, 12480, 74354, 0, 39, 12487, 0, 0, 74803, 12482, 0,
+    12489, 0, 128962, 5550, 129175, 0, 0, 0, 0, 1813, 0, 41311, 111205, 0,
+    11229, 0, 70496, 1675, 69840, 129435, 0, 119078, 10070, 10595, 111207,
+    119077, 111206, 121162, 0, 0, 0, 11222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    71716, 917841, 0, 0, 270, 0, 0, 0, 0, 0, 120899, 0, 69741, 0, 0, 68251,
+    0, 71721, 364, 9595, 0, 0, 0, 707, 110603, 0, 9282, 0, 224, 0, 68670,
+    9332, 65581, 68677, 0, 68644, 0, 11764, 68634, 0, 10732, 68640, 850, 0,
+    0, 71123, 0, 68619, 44008, 68627, 0, 0, 0, 0, 0, 0, 0, 0, 12507, 0, 0,
+    128311, 0, 120529, 4375, 0, 0, 0, 12198, 0, 67339, 0, 0, 72994, 74293,
+    128434, 0, 0, 64546, 0, 71208, 0, 0, 0, 42334, 42502, 0, 120887, 72961,
+    0, 0, 5767, 0, 0, 71710, 8353, 0, 0, 0, 121233, 0, 0, 0, 0, 119920, 0, 0,
+    121186, 0, 0, 0, 72719, 64604, 0, 6096, 0, 10063, 0, 0, 119630, 3485,
+    12987, 0, 127522, 0, 0, 0, 0, 0, 0, 0, 0, 127173, 0, 0, 68249, 0, 0,
+    118923, 0, 64574, 128794, 0, 1640, 12495, 66691, 0, 3138, 12504, 11171,
+    1922, 0, 12498, 0, 0, 69939, 0, 65543, 0, 0, 0, 66643, 0, 120734, 0,
+    4228, 0, 10303, 0, 0, 0, 10335, 3520, 0, 12490, 0, 0, 0, 12493, 121452,
+    64636, 1002, 12491, 0, 0, 92615, 2096, 0, 0, 0, 0, 11611, 66228, 0,
+    11241, 66224, 66221, 66226, 66229, 66219, 66231, 66216, 0, 66236, 66211,
+    66218, 0, 66240, 78041, 66233, 66217, 0, 7909, 66234, 11605, 0, 0, 66208,
+    0, 0, 128282, 73875, 0, 12898, 12494, 120939, 12492, 0, 0, 0, 74153, 0,
+    127391, 127489, 4882, 13040, 0, 120762, 4885, 194732, 0, 13042, 4880,
+    128834, 2429, 0, 8647, 0, 0, 0, 0, 0, 0, 68896, 0, 119101, 66693, 0,
+    1870, 78040, 470, 68893, 78035, 78036, 983577, 78034, 110607, 110608, 0,
+    12511, 74453, 12514, 0, 128609, 7239, 7001, 11974, 121214, 0, 0, 7378,
+    12512, 11615, 13041, 0, 0, 128057, 13038, 0, 0, 71717, 70195, 120836,
+    12510, 127070, 13039, 75019, 12513, 71969, 12471, 110761, 0, 121385,
+    70193, 0, 0, 0, 71714, 0, 12477, 0, 12473, 7666, 67362, 237, 6281, 0, 0,
+    0, 0, 1312, 0, 0, 12469, 0, 0, 64335, 12475, 0, 69382, 0, 11524, 10367,
+    10431, 74368, 13017, 3388, 129547, 69573, 0, 0, 128725, 4932, 0, 0,
+    13015, 0, 0, 65451, 8185, 0, 0, 43024, 129362, 74375, 10129, 0, 7948,
+    9236, 0, 0, 0, 92726, 43473, 6289, 10484, 0, 0, 0, 12082, 12521, 3147,
+    110643, 110644, 12524, 110642, 2310, 0, 0, 0, 0, 13013, 0, 8596, 983852,
+    10804, 70497, 0, 0, 13014, 12444, 0, 43088, 13016, 0, 0, 0, 0, 12331, 0,
+    0, 8744, 726, 121090, 983849, 4155, 0, 0, 0, 71690, 12522, 73128, 0, 0,
+    127805, 0, 110647, 0, 0, 983853, 12525, 0, 12523, 2152, 11969, 120596,
+    403, 0, 11021, 0, 0, 11030, 8610, 92567, 0, 0, 63998, 0, 0, 0, 0, 0, 0,
+    0, 12506, 0, 11146, 71477, 12500, 0, 12509, 0, 0, 0, 0, 6608, 0, 0, 0, 0,
+    69288, 77995, 0, 3608, 0, 0, 1107, 0, 129658, 0, 0, 0, 0, 983937, 43217,
+    66571, 13222, 118963, 0, 126514, 10463, 11553, 0, 63995, 9043, 128634,
+    71722, 0, 0, 127751, 92974, 12529, 8042, 0, 2344, 12528, 0, 0, 0, 69719,
+    120956, 0, 0, 66512, 0, 12530, 0, 0, 68917, 12658, 0, 71683, 0, 983237,
+    0, 127526, 469, 0, 4363, 3313, 0, 0, 2023, 0, 72251, 78225, 65706, 10051,
+    78219, 78220, 0, 9920, 12215, 0, 4931, 1951, 12497, 119363, 0, 0, 119336,
+    0, 0, 0, 0, 0, 1491, 128578, 129169, 0, 0, 0, 0, 78898, 94086, 41993, 0,
+    67379, 0, 0, 0, 0, 9738, 41995, 1075, 0, 12535, 41992, 0, 0, 0, 0,
+    128117, 0, 9940, 0, 7692, 0, 9727, 41131, 330, 8566, 0, 41133, 41117,
+    128482, 12532, 78550, 78546, 43177, 0, 43235, 0, 917542, 78229, 78231,
+    13031, 12910, 67710, 78555, 13028, 78553, 12537, 0, 0, 71692, 12536,
+    2350, 13029, 78233, 0, 0, 13030, 0, 4527, 71250, 12538, 0, 0, 0, 0, 0, 0,
+    0, 12484, 4032, 71459, 194728, 0, 64344, 0, 66700, 66000, 8412, 0, 43466,
+    1296, 2325, 0, 121020, 10149, 74118, 0, 0, 12481, 121280, 12488, 0, 0, 0,
+    67972, 0, 2354, 42619, 0, 73027, 6295, 901, 0, 0, 0, 0, 0, 128653, 11927,
+    66584, 78559, 78560, 78557, 78558, 0, 74649, 0, 126241, 67220, 194726,
+    78568, 67226, 78565, 70190, 78563, 78564, 2352, 67219, 78569, 71945,
+    11289, 1407, 67973, 0, 13026, 6762, 10399, 70192, 13023, 78578, 9777,
+    67208, 1871, 0, 0, 0, 13024, 71936, 0, 9325, 6818, 6283, 11738, 0, 0,
+    71938, 11741, 0, 0, 9216, 8263, 11279, 0, 983837, 0, 13021, 71922, 3136,
+    0, 983840, 0, 13022, 129143, 9956, 0, 0, 0, 42580, 0, 0, 0, 13020, 10024,
+    0, 94013, 0, 0, 0, 43001, 8029, 0, 0, 0, 3335, 127924, 9209, 13048,
+    73126, 0, 0, 0, 3333, 119100, 0, 0, 3342, 78582, 78583, 73056, 78581,
+    4156, 0, 0, 0, 78591, 1611, 73058, 13018, 78586, 78588, 78584, 3337,
+    4537, 78593, 11736, 0, 0, 0, 4214, 73790, 0, 0, 13046, 194844, 425,
     74763, 42066, 78595, 0, 2392, 13047, 0, 0, 12425, 13049, 0, 92243, 0,
-    72715, 73944, 13050, 0, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 983971, 0,
-    13045, 0, 0, 7751, 0, 9726, 0, 3997, 0, 8768, 13044, 0, 0, 4024, 0, 0,
+    72715, 73944, 13050, 0, 0, 0, 0, 983501, 0, 0, 8929, 0, 0, 0, 0, 983971,
+    0, 13045, 0, 0, 7751, 0, 9726, 0, 3997, 0, 8768, 13044, 0, 0, 4024, 0, 0,
     2419, 9757, 69736, 0, 0, 0, 129500, 0, 0, 0, 72735, 0, 0, 0, 0, 0, 11911,
     124990, 0, 2346, 194691, 69931, 0, 9646, 3773, 43557, 68154, 42536, 0,
     70108, 13043, 92686, 92494, 0, 208, 0, 43766, 0, 0, 0, 10699, 0, 0, 7825,
@@ -23894,8 +24697,8 @@
     8294, 42912, 129343, 0, 0, 4876, 111316, 0, 111326, 111282, 0, 0, 0,
     73950, 13053, 9944, 0, 2811, 13051, 111313, 3143, 111246, 66374, 110759,
     0, 0, 13052, 0, 0, 63972, 119071, 7025, 0, 0, 100464, 74161, 4154, 9863,
-    0, 0, 0, 63970, 1564, 0, 0, 0, 0, 0, 9942, 0, 0, 111227, 0, 128471, 0,
-    63957, 0, 1626, 0, 63983, 0, 111232, 0, 0, 121275, 111292, 6254, 4910,
+    129686, 0, 0, 63970, 1564, 0, 0, 0, 0, 0, 9942, 0, 0, 111227, 0, 128471,
+    0, 63957, 0, 1626, 0, 63983, 0, 111232, 0, 0, 121275, 111292, 6254, 4910,
     69453, 0, 64753, 100458, 111303, 111298, 127404, 111297, 3229, 0, 42774,
     0, 0, 111218, 111286, 2331, 0, 7085, 6137, 0, 70411, 0, 126070, 0,
     128438, 0, 0, 65043, 0, 127588, 70412, 128921, 64721, 0, 0, 0, 0, 0,
@@ -23905,7 +24708,7 @@
     72750, 2342, 0, 0, 0, 4894, 0, 4890, 0, 0, 0, 4893, 128426, 6571, 0,
     4888, 4157, 78048, 78049, 78046, 11263, 0, 78045, 64895, 121437, 0, 0, 0,
     0, 0, 119041, 2332, 78063, 78060, 78061, 64932, 78059, 65125, 121098, 0,
-    0, 0, 73941, 78066, 12203, 78064, 78065, 8913, 120390, 4875, 73678,
+    0, 129991, 73941, 78066, 12203, 78064, 78065, 8913, 120390, 4875, 73678,
     120396, 120389, 71854, 0, 120394, 120386, 120395, 13104, 78076, 78077,
     120393, 78075, 0, 3134, 83096, 65696, 72432, 0, 0, 0, 8334, 0, 83207,
     3449, 0, 0, 83215, 0, 0, 0, 83204, 0, 0, 0, 69707, 0, 0, 10734, 0, 83198,
@@ -23928,10 +24731,10 @@
     0, 0, 0, 42682, 0, 0, 0, 41227, 0, 71475, 0, 64848, 0, 78574, 0, 113792,
     0, 0, 129133, 0, 66015, 74614, 959, 8885, 0, 0, 0, 9469, 9632, 128211,
     74761, 64323, 100478, 0, 2266, 78575, 310, 0, 0, 68403, 100480, 72738,
-    125279, 0, 0, 6497, 0, 0, 0, 19958, 0, 0, 74953, 0, 118998, 67332, 374,
-    0, 41933, 120975, 0, 0, 41934, 7465, 0, 128168, 70666, 11151, 6101, 0,
-    41936, 100476, 4879, 0, 65446, 0, 0, 0, 0, 5374, 0, 128059, 127390, 0,
-    126618, 983571, 129146, 0, 0, 1929, 0, 12142, 0, 0, 0, 121472, 0, 12982,
+    125279, 0, 0, 6497, 127320, 0, 0, 19958, 0, 0, 74953, 0, 118998, 67332,
+    374, 0, 41933, 120975, 0, 0, 41934, 7465, 0, 128168, 70666, 11151, 6101,
+    0, 41936, 100476, 4879, 0, 65446, 0, 0, 0, 0, 5374, 0, 128059, 127390, 0,
+    126618, 983575, 129146, 0, 0, 1929, 0, 12142, 0, 0, 0, 121472, 0, 12982,
     0, 5378, 0, 128679, 0, 0, 127869, 0, 0, 0, 0, 0, 78832, 74481, 0, 43262,
     100511, 2421, 0, 2324, 828, 3611, 121055, 0, 64314, 0, 0, 0, 0, 0, 0,
     7999, 0, 11217, 983261, 10634, 10942, 0, 2348, 0, 0, 0, 0, 119044, 9982,
@@ -23942,231 +24745,233 @@
     0, 8075, 55276, 123589, 8047, 0, 78827, 12634, 0, 78782, 71322, 0, 12174,
     42610, 0, 0, 0, 1584, 0, 6045, 0, 0, 65218, 11559, 0, 0, 0, 124991, 0, 0,
     64418, 0, 0, 0, 0, 0, 0, 67821, 0, 13092, 0, 128365, 0, 0, 0, 0, 0,
-    11414, 0, 2531, 13034, 0, 0, 0, 13036, 0, 70866, 70198, 10394, 0, 13037,
-    0, 0, 0, 0, 100496, 120640, 41129, 0, 42850, 13035, 0, 0, 5466, 0, 0, 0,
-    0, 4535, 0, 4271, 0, 0, 6769, 0, 0, 67350, 6767, 0, 66273, 0, 6755,
-    73827, 9046, 67355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83235, 2563, 13033, 247,
-    83229, 0, 12338, 0, 83231, 11270, 0, 0, 0, 0, 70107, 0, 0, 0, 0, 3752,
-    83243, 68895, 0, 68897, 0, 0, 0, 0, 5009, 0, 0, 0, 0, 119521, 78823,
-    78824, 70353, 68399, 3877, 0, 78825, 10145, 43566, 0, 0, 10236, 0, 43782,
-    0, 127329, 0, 69652, 118921, 120612, 128058, 0, 43200, 43777, 71253, 0,
-    83254, 0, 71866, 43203, 0, 68894, 0, 127326, 0, 43778, 119538, 0, 0,
-    43781, 11303, 65547, 0, 7031, 0, 0, 67343, 83237, 83267, 0, 67341, 0,
-    8535, 0, 0, 0, 66032, 0, 0, 120786, 42233, 0, 9946, 7667, 0, 11822, 0,
-    43189, 120673, 100507, 2979, 1579, 0, 0, 0, 0, 0, 12635, 0, 0, 94055, 0,
-    1285, 64882, 0, 0, 83113, 12640, 83112, 7401, 0, 12625, 0, 71296, 72744,
-    0, 74286, 55260, 3396, 12642, 0, 110719, 0, 12630, 0, 0, 10153, 0, 6166,
-    120516, 0, 110680, 0, 0, 0, 9285, 913, 42259, 83017, 0, 2142, 0, 0,
-    94012, 7878, 0, 72733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128918, 5263, 74782, 0,
-    41939, 43702, 0, 917856, 0, 10139, 980, 43698, 0, 2208, 0, 43701, 0,
-    125132, 0, 100528, 0, 10085, 0, 0, 119989, 100529, 0, 71699, 0, 8072, 0,
-    43700, 0, 7304, 7783, 66894, 12398, 0, 0, 0, 0, 0, 0, 120565, 0, 2217, 0,
-    94015, 6367, 0, 66688, 0, 0, 0, 0, 0, 92199, 7808, 1829, 0, 41937, 0,
-    43272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6627, 0, 6258, 10683, 0, 0, 0,
-    5649, 0, 0, 0, 1643, 127898, 0, 127846, 67244, 0, 42452, 0, 0, 0, 0,
-    64291, 0, 0, 0, 6576, 74773, 0, 0, 66309, 0, 9886, 55225, 11292, 0,
-    72867, 55227, 0, 12632, 0, 194817, 0, 7680, 0, 92745, 120714, 12639,
-    3380, 8123, 0, 12638, 42262, 4501, 0, 0, 0, 0, 125131, 1494, 983146, 0,
-    0, 0, 0, 10494, 0, 65872, 0, 0, 0, 0, 0, 0, 983575, 0, 0, 0, 0, 0, 0, 0,
-    71077, 0, 127335, 121128, 0, 5570, 1881, 7210, 0, 1012, 66630, 0, 128982,
-    7208, 66442, 5569, 113723, 42339, 92655, 0, 0, 0, 0, 92378, 65602, 0,
-    92375, 64727, 9160, 0, 0, 0, 124928, 10503, 0, 3423, 3870, 8483, 10162,
-    0, 4319, 0, 0, 0, 0, 0, 983116, 0, 0, 0, 0, 0, 0, 0, 0, 5571, 7630, 9740,
-    9121, 5568, 0, 0, 42085, 0, 0, 65056, 0, 589, 0, 0, 0, 10233, 66252,
-    66251, 78734, 66253, 0, 0, 42645, 0, 128424, 8583, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 12204, 92436, 0, 0, 0, 0, 0, 0, 0, 70311, 0, 0, 128012, 41063, 0,
-    10664, 0, 0, 0, 4551, 129090, 74759, 0, 0, 0, 0, 72806, 0, 0, 12517,
-    7806, 0, 12034, 0, 6355, 12519, 41004, 0, 0, 93849, 0, 71707, 0, 121231,
-    7332, 129075, 12111, 3927, 0, 12515, 1474, 68768, 0, 6923, 0, 0, 127802,
-    0, 43990, 74639, 126229, 121007, 0, 92706, 0, 0, 0, 0, 0, 9645, 0,
-    121026, 5853, 0, 10363, 120729, 12956, 0, 0, 0, 0, 127888, 0, 0, 0, 0, 0,
-    10514, 65517, 0, 0, 71101, 0, 0, 0, 43570, 2969, 43420, 0, 0, 0, 92366,
-    70809, 0, 0, 0, 0, 0, 0, 12125, 41124, 0, 1164, 128817, 0, 120466, 0, 0,
-    65014, 66009, 74451, 128760, 983128, 7469, 0, 0, 0, 69988, 120671, 83171,
-    41123, 11176, 0, 0, 41126, 9991, 41128, 0, 0, 110949, 0, 0, 42877, 7994,
-    0, 6104, 983612, 0, 0, 0, 0, 0, 0, 74438, 128272, 121409, 41981, 0, 0,
-    42904, 0, 0, 74435, 126640, 0, 0, 0, 127968, 92442, 12703, 9661, 67360,
-    67359, 7455, 70732, 11473, 119217, 128512, 0, 92323, 0, 0, 129632, 67358,
-    0, 0, 0, 0, 174, 121131, 883, 4161, 128033, 42603, 0, 0, 72256, 0, 0,
-    128356, 0, 0, 0, 0, 3846, 8070, 6150, 128109, 4370, 0, 0, 0, 74587, 0, 0,
-    0, 0, 4986, 12189, 917553, 67648, 120499, 0, 4257, 71695, 123620, 6220,
-    0, 65561, 0, 0, 0, 0, 0, 0, 0, 0, 69684, 0, 0, 128452, 120873, 0, 0,
-    74922, 0, 71897, 0, 0, 67368, 67367, 8871, 67366, 0, 0, 0, 0, 0, 67361,
-    0, 0, 67365, 67364, 3427, 4240, 67376, 67375, 67374, 67373, 0, 0, 0,
-    67377, 0, 71689, 0, 0, 67372, 67371, 67370, 67369, 0, 0, 0, 124962, 0, 0,
-    0, 0, 65898, 0, 65312, 0, 0, 0, 0, 4010, 121208, 41106, 0, 0, 0, 41105,
-    0, 64803, 83456, 0, 0, 0, 0, 0, 0, 0, 11008, 0, 0, 71351, 41110, 71681,
-    64892, 9113, 1954, 41108, 0, 42878, 0, 67405, 0, 0, 0, 0, 0, 119539,
-    69435, 73463, 0, 4586, 129342, 0, 0, 0, 0, 0, 125233, 92307, 0, 0, 0,
-    67382, 0, 9500, 0, 4957, 0, 2422, 2212, 0, 67381, 67380, 11045, 67378, 0,
-    0, 3890, 12168, 121328, 0, 0, 0, 41947, 0, 120828, 74946, 917901, 0,
-    1571, 66461, 41949, 42805, 8270, 943, 41946, 0, 2073, 0, 41980, 0, 0, 0,
-    0, 4429, 6272, 0, 1460, 6954, 128572, 41120, 0, 65733, 0, 41119, 0,
-    127006, 0, 0, 0, 129168, 12895, 0, 0, 0, 69440, 0, 1985, 6296, 0, 0, 0,
-    0, 0, 41122, 0, 2457, 0, 0, 0, 0, 0, 0, 8840, 8035, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 8681, 0, 121505, 128747, 0, 0, 70102, 0, 124976, 9605, 0, 13220,
-    0, 67354, 11312, 0, 9246, 67349, 0, 0, 0, 0, 10012, 12123, 0, 0, 0, 0, 0,
-    0, 0, 0, 67817, 0, 1272, 0, 0, 0, 983582, 0, 1467, 0, 917806, 0, 0, 0,
-    70312, 0, 124955, 0, 70400, 0, 0, 72817, 0, 19935, 0, 92162, 0, 0, 0,
-    128406, 5275, 0, 0, 44006, 129082, 0, 3789, 128205, 0, 0, 0, 11474, 0, 0,
-    0, 129050, 0, 92194, 129503, 9537, 4496, 0, 120443, 2605, 4500, 0, 55224,
-    8600, 0, 0, 41646, 11667, 0, 0, 0, 917905, 4499, 41649, 0, 0, 0, 0, 0, 0,
-    0, 65804, 0, 70034, 41866, 0, 0, 0, 11174, 0, 0, 0, 9559, 128773, 41940,
-    8299, 41945, 0, 41941, 5455, 7190, 0, 0, 917810, 65266, 0, 41943, 10762,
-    0, 41931, 0, 0, 8106, 4128, 0, 0, 4494, 0, 0, 72405, 0, 119567, 42068,
-    917808, 0, 11004, 12794, 65072, 5271, 7317, 0, 0, 0, 0, 0, 0, 92281, 0,
-    0, 0, 0, 71880, 3868, 71881, 983569, 128431, 7703, 0, 64390, 0, 7406, 0,
-    93850, 0, 3985, 66425, 0, 66615, 10177, 0, 41853, 71873, 12809, 0, 12193,
-    0, 10879, 0, 0, 9055, 0, 3851, 8132, 0, 0, 119263, 917908, 0, 0, 0, 0, 0,
-    42657, 0, 7643, 0, 0, 0, 43568, 0, 11949, 7650, 43569, 64951, 7647, 7649,
-    0, 7646, 0, 0, 9651, 125005, 3891, 0, 0, 2337, 77831, 77832, 67860,
-    129288, 0, 0, 43561, 67706, 119669, 0, 1860, 0, 68835, 5812, 12784, 0, 0,
-    0, 0, 0, 7727, 0, 0, 69818, 66444, 128665, 42719, 0, 1569, 0, 12534,
-    12124, 7690, 194871, 12533, 0, 68383, 67997, 0, 6969, 0, 0, 0, 67974,
-    63895, 128650, 0, 0, 0, 42144, 0, 0, 0, 0, 92211, 119043, 0, 0, 917545,
-    0, 0, 12791, 0, 0, 0, 4447, 71065, 12793, 0, 0, 43385, 0, 0, 12790,
-    120256, 0, 983821, 12792, 120254, 0, 0, 12789, 128489, 12317, 74934, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 127840, 41652, 2974, 78689, 11476, 0, 0, 0, 0,
-    43871, 0, 10894, 119176, 74557, 65686, 0, 0, 3724, 67335, 67334, 67333,
-    67338, 67337, 0, 67336, 0, 65306, 0, 128421, 0, 8646, 129593, 77829, 0,
-    0, 74852, 0, 0, 0, 0, 0, 220, 120252, 43551, 0, 10044, 0, 0, 983828,
-    68659, 110825, 5707, 71362, 0, 0, 0, 0, 0, 0, 10297, 0, 41308, 67331, 0,
-    0, 0, 0, 2467, 0, 6003, 0, 0, 8040, 0, 0, 4182, 0, 11135, 120501, 0, 0,
-    2510, 0, 10208, 0, 78302, 70829, 0, 0, 6837, 0, 0, 67348, 0, 0, 0, 0,
-    1559, 67342, 11104, 67340, 67347, 67346, 67345, 67344, 0, 0, 67357,
-    67356, 0, 0, 0, 0, 67352, 67351, 5516, 2845, 7717, 8036, 65161, 67353,
-    5514, 12045, 6278, 0, 5515, 0, 0, 0, 0, 0, 65194, 100387, 5517, 70116,
-    92774, 0, 67884, 0, 67890, 42094, 67880, 67881, 67882, 67883, 0, 0,
-    67879, 120411, 1902, 67887, 67888, 12976, 126546, 12483, 12368, 41769,
-    42726, 41765, 0, 12787, 67874, 7556, 67878, 74351, 67897, 989, 42677,
-    67889, 0, 6060, 0, 4326, 11000, 64601, 68478, 0, 0, 6917, 0, 120837, 0,
-    0, 0, 6148, 8605, 74205, 0, 0, 0, 42715, 0, 101047, 0, 68663, 0, 41796,
-    1269, 42703, 64754, 101049, 101042, 5144, 12221, 42716, 71048, 5133,
-    4331, 0, 128675, 0, 5279, 121362, 71046, 0, 0, 42701, 0, 0, 0, 121470, 0,
-    0, 0, 0, 0, 983608, 121259, 42666, 12207, 1067, 255, 12131, 0, 0, 0, 0,
-    0, 0, 0, 70728, 43460, 0, 42723, 125216, 0, 70427, 0, 12797, 0, 0,
-    983703, 0, 67977, 12799, 0, 92504, 9746, 5135, 0, 12796, 0, 0, 0, 5139,
-    346, 74303, 121134, 12795, 125109, 5168, 0, 43845, 983708, 0, 8253, 8817,
-    1136, 983716, 43563, 127774, 129542, 0, 0, 0, 0, 0, 0, 983619, 0, 0,
-    4041, 0, 2357, 43240, 12786, 0, 0, 0, 44004, 7142, 0, 67984, 0, 0, 0, 0,
-    12785, 0, 0, 7770, 10712, 64853, 42679, 118916, 42375, 0, 983123, 94074,
-    12119, 0, 11059, 10791, 0, 450, 0, 0, 0, 0, 5450, 64691, 0, 0, 44009, 0,
-    0, 111097, 94085, 1839, 94004, 0, 10927, 1701, 0, 129610, 41749, 41761,
-    5453, 8361, 66045, 41758, 5444, 41763, 0, 0, 0, 66349, 983137, 121274, 0,
-    0, 8801, 0, 4340, 0, 0, 0, 0, 70001, 41824, 0, 0, 0, 0, 42700, 0, 127980,
-    0, 0, 0, 0, 0, 0, 4493, 4336, 129171, 2314, 983061, 41808, 0, 0, 0,
-    64638, 0, 65937, 4489, 71331, 0, 0, 5358, 42717, 0, 71236, 0, 0, 0,
-    127042, 41813, 2712, 0, 127044, 1410, 0, 0, 0, 0, 0, 0, 0, 0, 128587, 0,
-    0, 0, 4892, 0, 0, 0, 0, 0, 5777, 0, 759, 0, 2079, 65248, 12788, 0, 64552,
-    0, 41803, 68043, 0, 0, 0, 0, 128785, 0, 68492, 67991, 75071, 2340, 0,
-    120638, 0, 983883, 0, 0, 0, 64749, 0, 2321, 3587, 0, 67236, 9953, 9952,
-    0, 0, 42714, 9951, 0, 0, 127902, 74150, 0, 0, 74757, 127554, 0, 983807,
-    2395, 0, 9976, 0, 125128, 0, 0, 0, 42809, 42807, 0, 66290, 70854, 4150,
-    64424, 8318, 41790, 67976, 65559, 2360, 41794, 0, 0, 120987, 0, 0, 2418,
-    0, 2411, 0, 41783, 0, 41786, 65108, 0, 0, 41772, 42813, 2317, 0, 118980,
-    0, 0, 0, 0, 0, 0, 78682, 7753, 2351, 6655, 64489, 0, 0, 0, 4443, 41697,
-    230, 65793, 0, 65943, 42803, 0, 0, 5441, 0, 0, 127053, 0, 855, 0, 6109,
-    101021, 0, 119116, 69989, 0, 0, 72146, 0, 101023, 0, 72148, 0, 19915,
-    41892, 0, 0, 128901, 41887, 0, 67980, 9735, 0, 0, 120591, 13082, 0, 0, 0,
-    0, 0, 0, 0, 0, 289, 0, 0, 64504, 0, 126130, 120514, 0, 92962, 0, 42724,
-    69977, 0, 0, 0, 0, 67994, 0, 0, 0, 3565, 0, 0, 127553, 43035, 69898, 0,
-    0, 0, 0, 4891, 0, 0, 4602, 0, 121065, 0, 0, 121157, 0, 43978, 8988, 0, 0,
-    0, 0, 0, 119184, 121436, 73902, 69740, 0, 0, 72976, 0, 0, 8771, 0, 0, 0,
-    119209, 74974, 71737, 0, 0, 67987, 0, 0, 0, 67989, 0, 10065, 8207, 0,
-    983578, 0, 0, 662, 0, 41927, 0, 0, 0, 0, 0, 0, 0, 41929, 0, 0, 0, 41926,
-    69994, 0, 0, 0, 126230, 68013, 1433, 64648, 6475, 0, 120983, 0, 73876, 0,
-    0, 0, 67992, 78052, 0, 3978, 0, 0, 0, 0, 120761, 12281, 0, 0, 13241, 0,
-    0, 0, 0, 11765, 42577, 0, 0, 2641, 7192, 0, 0, 118809, 101015, 0, 101016,
+    11414, 0, 2531, 13034, 0, 0, 0, 13036, 0, 70866, 70198, 10394, 129979,
+    13037, 0, 129956, 0, 0, 100496, 120640, 41129, 0, 42850, 13035, 0, 0,
+    5466, 0, 0, 0, 129439, 4535, 0, 4271, 0, 0, 6769, 0, 0, 67350, 6767, 0,
+    66273, 0, 6755, 73827, 9046, 67355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83235,
+    2563, 13033, 247, 83229, 0, 12338, 0, 83231, 11270, 0, 0, 0, 0, 70107, 0,
+    0, 0, 0, 3752, 83243, 68895, 0, 68897, 0, 0, 0, 0, 5009, 0, 0, 0, 0,
+    119521, 78823, 78824, 70353, 68399, 3877, 0, 78825, 10145, 43566, 0, 0,
+    10236, 0, 43782, 0, 127329, 0, 69652, 2247, 120612, 128058, 0, 43200,
+    43777, 71253, 0, 69558, 0, 71866, 43203, 0, 68894, 0, 127326, 0, 43778,
+    119538, 0, 0, 43781, 11303, 65547, 0, 7031, 0, 0, 67343, 83237, 83267, 0,
+    67341, 0, 8535, 0, 0, 0, 66032, 0, 0, 120786, 42233, 0, 9946, 7667, 0,
+    11822, 0, 43189, 120673, 100507, 2979, 1579, 0, 0, 0, 0, 0, 12635, 0, 0,
+    94055, 0, 1285, 64882, 0, 0, 83113, 12640, 83112, 7401, 0, 12625, 0,
+    71296, 72744, 0, 74286, 55260, 3396, 12642, 0, 110719, 0, 12630, 0, 0,
+    10153, 0, 6166, 120516, 0, 110680, 0, 0, 0, 9285, 913, 42259, 83017, 0,
+    2142, 0, 0, 94012, 7878, 0, 72733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128918,
+    5263, 74782, 0, 41939, 43702, 0, 917856, 0, 10139, 980, 43698, 0, 2208,
+    0, 43701, 0, 125132, 0, 100528, 0, 10085, 0, 0, 119989, 100529, 0, 71699,
+    0, 8072, 0, 43700, 0, 7304, 7783, 66894, 12398, 0, 0, 0, 0, 0, 0, 120565,
+    0, 2217, 0, 94015, 6367, 0, 66688, 0, 0, 0, 0, 0, 92199, 7808, 1829, 0,
+    41937, 0, 43272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92467, 6627, 0, 6258,
+    10683, 0, 0, 0, 5649, 0, 0, 0, 1643, 127898, 0, 127846, 67244, 0, 42452,
+    0, 0, 0, 0, 64291, 0, 0, 0, 6576, 74773, 0, 0, 66309, 0, 9886, 55225,
+    11292, 0, 72867, 55227, 0, 12632, 0, 194817, 0, 7680, 0, 92745, 120714,
+    12639, 3380, 8123, 0, 12638, 42262, 4501, 0, 0, 0, 0, 125131, 1494,
+    983146, 0, 0, 0, 0, 10494, 0, 65872, 0, 0, 0, 0, 0, 0, 983587, 0, 0, 0,
+    0, 0, 0, 0, 71077, 0, 127335, 121128, 0, 5570, 1881, 7210, 0, 1012,
+    66630, 0, 128982, 7208, 66442, 5569, 113723, 42339, 92655, 0, 0, 0, 0,
+    92378, 65602, 0, 92375, 64727, 9160, 0, 0, 0, 124928, 10503, 0, 3423,
+    3870, 8483, 10162, 0, 4319, 0, 0, 0, 0, 0, 983116, 0, 69562, 0, 0, 0, 0,
+    0, 0, 5571, 7630, 9740, 9121, 5568, 0, 0, 42085, 0, 0, 65056, 0, 589, 0,
+    0, 0, 10233, 66252, 66251, 78734, 66253, 0, 0, 42645, 0, 128424, 8583, 0,
+    0, 0, 129932, 0, 0, 0, 0, 0, 12204, 92436, 0, 0, 0, 0, 0, 0, 0, 70311, 0,
+    0, 128012, 41063, 0, 10664, 0, 0, 0, 4551, 129090, 74759, 0, 0, 0, 0,
+    72806, 0, 0, 12517, 7806, 0, 12034, 0, 6355, 12519, 41004, 0, 0, 93849,
+    0, 71707, 0, 121231, 7332, 129075, 12111, 3927, 0, 12515, 1474, 68768, 0,
+    6923, 0, 0, 127802, 0, 43990, 74639, 126229, 121007, 0, 92706, 0, 0, 0,
+    0, 0, 9645, 0, 121026, 5853, 0, 10363, 120729, 12956, 0, 0, 0, 0, 127888,
+    0, 0, 0, 0, 0, 10514, 65517, 0, 0, 71101, 0, 0, 0, 43570, 2969, 43420,
+    129944, 0, 0, 92366, 70809, 0, 0, 0, 0, 0, 0, 12125, 41124, 0, 1164,
+    128817, 0, 120466, 0, 0, 65014, 66009, 74451, 125075, 983128, 7469, 0, 0,
+    0, 69988, 120671, 83171, 41123, 11176, 0, 0, 41126, 9991, 41128, 0, 0,
+    110949, 0, 0, 42877, 7994, 0, 6104, 983612, 0, 129869, 0, 0, 0, 0, 74438,
+    128272, 121409, 41981, 0, 69296, 42904, 0, 0, 74435, 126640, 0, 0, 0,
+    127968, 92442, 12703, 9661, 67360, 67359, 7455, 70732, 11473, 119217,
+    128512, 0, 92323, 0, 0, 129632, 67358, 0, 0, 0, 0, 174, 121131, 883,
+    4161, 128033, 42603, 0, 0, 72256, 0, 0, 128356, 0, 0, 0, 0, 3846, 8070,
+    6150, 128109, 4370, 0, 0, 0, 74587, 0, 0, 0, 0, 4986, 12189, 917553,
+    67648, 120499, 0, 4257, 71695, 123620, 6220, 0, 65561, 0, 0, 0, 0, 0, 0,
+    0, 0, 69684, 0, 0, 128452, 120873, 0, 0, 74922, 0, 71897, 0, 0, 67368,
+    67367, 8871, 67366, 0, 0, 0, 0, 0, 67361, 0, 0, 67365, 67364, 3427, 4240,
+    67376, 67375, 67374, 67373, 0, 0, 0, 67377, 0, 71689, 0, 0, 67372, 67371,
+    67370, 67369, 0, 0, 0, 124962, 0, 0, 0, 0, 65898, 0, 65312, 0, 0, 0, 0,
+    4010, 121208, 41106, 0, 0, 0, 41105, 0, 64803, 83456, 0, 0, 0, 0, 0, 0,
+    0, 11008, 0, 0, 71351, 41110, 71681, 64892, 9113, 1954, 41108, 0, 42878,
+    0, 67405, 0, 0, 0, 0, 0, 119539, 69435, 73463, 0, 4586, 129342, 0, 0, 0,
+    0, 0, 125233, 92307, 0, 0, 0, 67382, 0, 9500, 0, 4957, 0, 2422, 2212, 0,
+    67381, 67380, 11045, 67378, 0, 0, 3890, 12168, 121328, 0, 0, 0, 41947, 0,
+    120828, 74946, 917901, 0, 1571, 66461, 41949, 42805, 8270, 943, 41946, 0,
+    2073, 0, 41980, 0, 0, 0, 0, 4429, 6272, 0, 1460, 6954, 128572, 41120, 0,
+    65733, 0, 41119, 0, 127006, 0, 0, 0, 129168, 12895, 0, 0, 0, 69440, 0,
+    1985, 6296, 0, 0, 0, 0, 0, 41122, 0, 2457, 0, 0, 0, 0, 0, 0, 8840, 8035,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8681, 0, 121505, 128747, 0, 0, 70102, 0,
+    124976, 9605, 0, 13220, 0, 67354, 11312, 0, 9246, 67349, 0, 0, 0, 0,
+    10012, 12123, 0, 0, 0, 0, 0, 0, 0, 0, 67817, 0, 1272, 0, 0, 0, 983578, 0,
+    1467, 0, 917806, 0, 0, 0, 70312, 0, 124955, 0, 70400, 0, 0, 72817, 0,
+    19935, 0, 92162, 0, 0, 0, 128406, 5275, 0, 0, 44006, 129082, 0, 3789,
+    128205, 0, 0, 0, 11474, 0, 0, 0, 129050, 0, 92194, 129503, 9537, 4496, 0,
+    120443, 2605, 4500, 0, 55224, 8600, 0, 0, 41646, 11667, 69569, 0, 0,
+    917905, 4499, 41649, 0, 0, 0, 69254, 0, 0, 0, 65804, 0, 70034, 41866, 0,
+    0, 0, 11174, 0, 0, 0, 9559, 128773, 41940, 8299, 41945, 0, 41941, 5455,
+    7190, 0, 0, 917810, 65266, 0, 41943, 10762, 0, 41931, 0, 0, 8106, 4128,
+    0, 0, 4494, 0, 0, 72405, 0, 119567, 42068, 917808, 0, 11004, 12794,
+    65072, 5271, 7317, 0, 0, 0, 0, 0, 0, 92281, 0, 0, 0, 0, 71880, 3868,
+    71881, 983573, 128431, 7703, 0, 64390, 0, 7406, 0, 93850, 0, 3985, 66425,
+    0, 66615, 10177, 0, 41853, 71873, 12809, 0, 12193, 0, 10879, 0, 0, 9055,
+    0, 3851, 8132, 0, 0, 119263, 917908, 0, 0, 0, 0, 0, 42657, 0, 7643, 0, 0,
+    0, 43568, 0, 11949, 7650, 43569, 64951, 7647, 7649, 0, 7646, 0, 0, 9651,
+    125005, 3891, 0, 0, 2337, 77831, 77832, 67860, 129288, 0, 0, 43561,
+    67706, 119669, 0, 1860, 0, 68835, 5812, 12784, 0, 0, 0, 0, 69260, 7727,
+    0, 69292, 69818, 66444, 128665, 42719, 0, 1569, 0, 12534, 12124, 7690,
+    194871, 12533, 0, 68383, 67997, 0, 6969, 0, 0, 0, 67974, 63895, 128650,
+    0, 0, 0, 42144, 0, 0, 0, 0, 92211, 119043, 0, 0, 917545, 0, 0, 12791, 0,
+    0, 0, 4447, 71065, 12793, 0, 0, 43385, 0, 0, 12790, 120256, 0, 983821,
+    12792, 120254, 0, 0, 12789, 128489, 12317, 74934, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 127840, 41652, 2974, 78689, 11476, 0, 0, 0, 0, 43871, 0, 10894,
+    119176, 74557, 65686, 0, 0, 3724, 67335, 67334, 67333, 67338, 67337, 0,
+    67336, 0, 65306, 0, 128421, 0, 8646, 129593, 77829, 0, 0, 74852, 0, 0, 0,
+    0, 0, 220, 120252, 43551, 0, 10044, 0, 0, 983828, 68659, 110825, 5707,
+    71362, 0, 0, 0, 0, 0, 0, 10297, 0, 41308, 67331, 0, 0, 0, 0, 2467, 0,
+    6003, 0, 0, 8040, 0, 0, 4182, 0, 11135, 120501, 0, 0, 2510, 0, 10208, 0,
+    78302, 70829, 0, 0, 6837, 0, 0, 67348, 0, 0, 0, 0, 1559, 67342, 11104,
+    67340, 67347, 67346, 67345, 67344, 0, 0, 67357, 67356, 0, 0, 0, 0, 67352,
+    67351, 5516, 2845, 7717, 8036, 65161, 67353, 5514, 12045, 6278, 0, 5515,
+    0, 0, 0, 0, 0, 65194, 100387, 5517, 70116, 92774, 0, 67884, 0, 67890,
+    42094, 67880, 67881, 67882, 67883, 0, 0, 67879, 120411, 1902, 67887,
+    67888, 12976, 126546, 12483, 12368, 41769, 42726, 41765, 69557, 12787,
+    67874, 7556, 67878, 74351, 67897, 989, 42677, 67889, 0, 6060, 0, 4326,
+    11000, 64601, 68478, 0, 0, 6917, 0, 120837, 0, 0, 0, 6148, 8605, 74205,
+    0, 0, 0, 42715, 0, 101047, 0, 68663, 0, 41796, 1269, 42703, 64754,
+    101049, 101042, 5144, 12221, 42716, 71048, 5133, 4331, 0, 128675, 0,
+    5279, 121362, 71046, 0, 0, 42701, 0, 0, 0, 121470, 0, 0, 0, 0, 0, 983608,
+    121259, 42666, 12207, 1067, 255, 12131, 0, 0, 0, 0, 0, 0, 0, 70728,
+    43460, 0, 42723, 125216, 0, 70427, 0, 12797, 0, 0, 983703, 0, 67977,
+    12799, 0, 92504, 9746, 5135, 0, 12796, 0, 0, 0, 5139, 346, 74303, 121134,
+    12795, 125109, 5168, 0, 43845, 983708, 0, 8253, 8817, 1136, 983716,
+    43563, 127774, 129542, 0, 0, 0, 0, 0, 0, 983619, 0, 0, 4041, 0, 2357,
+    43240, 12786, 0, 0, 0, 44004, 7142, 0, 67984, 0, 0, 0, 0, 12785, 0, 0,
+    7770, 10712, 64853, 42679, 118916, 42375, 0, 983123, 94074, 12119, 0,
+    11059, 10791, 0, 450, 0, 0, 0, 0, 5450, 64691, 0, 0, 44009, 0, 0, 111097,
+    94085, 1839, 94004, 0, 10927, 1701, 0, 129610, 41749, 41761, 5453, 8361,
+    66045, 41758, 5444, 41763, 0, 0, 0, 66349, 983137, 121274, 0, 0, 8801, 0,
+    4340, 0, 0, 0, 0, 70001, 41824, 0, 0, 0, 0, 42700, 0, 127980, 0, 0, 0, 0,
+    0, 0, 4493, 4336, 129171, 2314, 983061, 41808, 0, 0, 0, 64638, 0, 65937,
+    4489, 71331, 0, 0, 5358, 42717, 0, 71236, 0, 0, 0, 127042, 41813, 2712,
+    0, 127044, 1410, 0, 0, 0, 0, 0, 0, 0, 0, 128587, 0, 0, 0, 4892, 0, 0, 0,
+    0, 0, 5777, 0, 759, 0, 2079, 65248, 12788, 0, 64552, 0, 41803, 68043, 0,
+    0, 0, 0, 128785, 0, 68492, 67991, 75071, 2340, 0, 120638, 0, 983883, 0,
+    0, 0, 64749, 0, 2321, 3587, 0, 67236, 9953, 9952, 0, 0, 42714, 9951, 0,
+    0, 127902, 74150, 0, 0, 74757, 127554, 0, 983807, 2395, 0, 9976, 0,
+    125128, 0, 0, 0, 42809, 42807, 0, 66290, 70854, 4150, 64424, 8318, 41790,
+    67976, 65559, 2360, 41794, 0, 0, 120987, 0, 0, 2418, 0, 2411, 0, 41783,
+    0, 41786, 65108, 0, 0, 41772, 42813, 2317, 0, 118980, 0, 0, 0, 0, 0, 0,
+    78682, 7753, 2351, 6655, 64489, 0, 0, 0, 4443, 41697, 230, 65793, 0,
+    65943, 42803, 0, 0, 5441, 0, 0, 127053, 0, 855, 0, 6109, 101021, 0,
+    119116, 69989, 0, 0, 72146, 0, 101023, 0, 72148, 0, 19915, 41892, 0, 0,
+    128901, 41887, 0, 67980, 9735, 0, 0, 120591, 13082, 101026, 0, 0, 0, 0,
+    0, 0, 0, 289, 0, 0, 64504, 0, 126130, 120514, 0, 92962, 0, 42724, 69977,
+    0, 0, 0, 0, 67994, 0, 0, 0, 3565, 0, 0, 127553, 43035, 69898, 0, 0, 0, 0,
+    4891, 0, 0, 4602, 0, 121065, 0, 0, 121157, 0, 43978, 8988, 0, 0, 0, 0, 0,
+    119184, 121436, 73902, 69740, 0, 0, 72976, 0, 0, 8771, 0, 0, 0, 119209,
+    74974, 71737, 0, 0, 67987, 0, 0, 0, 67989, 0, 10065, 8207, 0, 983588, 0,
+    0, 662, 0, 41927, 0, 0, 0, 0, 0, 0, 0, 41929, 0, 0, 0, 41926, 69994, 0,
+    0, 0, 126230, 68013, 1433, 64648, 6475, 0, 120983, 0, 73876, 0, 0, 0,
+    67992, 78052, 0, 3978, 0, 0, 0, 0, 120761, 12281, 0, 0, 13241, 0, 0, 0,
+    0, 11765, 42577, 0, 0, 2641, 7192, 0, 0, 118809, 101015, 0, 101016,
     128948, 101013, 6479, 64294, 121194, 0, 0, 0, 64334, 0, 0, 0, 92266, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 9478, 127339, 124964, 0, 202, 0, 0, 1242, 0,
     121170, 0, 63940, 0, 0, 0, 63939, 11990, 92430, 67982, 0, 65440, 70068,
     0, 0, 64829, 0, 0, 0, 0, 0, 2858, 0, 63989, 0, 69239, 0, 121152, 0,
     77841, 0, 70078, 92574, 129519, 0, 0, 0, 128974, 0, 12922, 92498, 0,
     66424, 71124, 0, 0, 0, 2856, 0, 47, 0, 126986, 65858, 0, 0, 0, 0, 0,
-    8417, 65903, 0, 0, 0, 4033, 128164, 0, 0, 0, 0, 64600, 1903, 12320, 0,
-    120894, 0, 0, 8915, 0, 945, 0, 0, 0, 0, 111068, 0, 74828, 0, 0, 9531, 0,
-    8505, 0, 119238, 0, 0, 65538, 0, 0, 0, 0, 0, 0, 63935, 0, 0, 0, 0, 0,
-    64787, 111060, 0, 0, 110828, 0, 2230, 0, 0, 71886, 9843, 0, 92419,
-    111062, 129337, 92715, 0, 1320, 0, 1673, 0, 92383, 0, 9338, 128355, 0, 0,
-    0, 0, 11997, 0, 0, 0, 0, 0, 0, 43308, 0, 0, 0, 0, 0, 0, 0, 63920, 0, 0,
-    0, 0, 0, 0, 3514, 78723, 0, 7492, 0, 0, 0, 7514, 0, 63924, 0, 7502, 7587,
-    0, 0, 0, 0, 0, 7610, 0, 0, 120759, 692, 43588, 0, 0, 75056, 9688, 0,
-    9535, 0, 0, 0, 64530, 0, 125251, 194861, 0, 72209, 7453, 0, 8013, 66396,
-    0, 0, 8895, 5356, 0, 5458, 0, 2866, 0, 127860, 71732, 71724, 6700, 0,
-    111081, 120583, 0, 110614, 0, 9641, 63830, 65294, 0, 0, 67969, 0, 7441,
-    0, 63826, 0, 0, 0, 0, 2844, 983953, 0, 63824, 12139, 67971, 0, 0, 3358,
-    65295, 0, 3104, 0, 0, 0, 0, 65772, 0, 0, 0, 0, 2862, 11326, 0, 0, 94001,
-    3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 195092, 10240,
-    195093, 0, 0, 0, 0, 0, 71454, 0, 0, 2837, 4341, 0, 0, 0, 125064, 0, 0, 0,
-    0, 0, 72721, 863, 129125, 0, 0, 43323, 0, 0, 0, 68054, 0, 3654, 0, 0, 0,
-    0, 0, 7653, 0, 0, 66587, 0, 0, 92401, 0, 0, 12927, 0, 0, 0, 13056, 0, 0,
-    3056, 0, 0, 195101, 0, 0, 74506, 73770, 0, 0, 0, 0, 0, 0, 0, 0, 983681,
-    0, 5811, 0, 0, 0, 66817, 983836, 0, 0, 128636, 129311, 0, 128041, 0,
-    67739, 120965, 0, 0, 0, 0, 68375, 0, 0, 70300, 0, 0, 0, 983679, 111078,
-    0, 11991, 128079, 0, 92943, 1502, 74117, 127988, 0, 129478, 121253, 0,
-    67661, 0, 0, 125084, 120758, 0, 74057, 68639, 0, 42898, 120742, 0, 74388,
-    74838, 120822, 0, 0, 0, 0, 69452, 43214, 5893, 0, 0, 92496, 0, 0, 119907,
-    119900, 0, 0, 0, 0, 41950, 0, 0, 68610, 0, 68626, 894, 0, 0, 12306,
-    73846, 0, 0, 0, 8636, 0, 121028, 42503, 0, 92942, 0, 121468, 119241, 0,
-    126569, 5096, 5095, 2863, 127505, 0, 10454, 42530, 5094, 0, 0, 13156, 0,
-    111035, 5093, 127178, 983414, 0, 5092, 10708, 11327, 0, 5091, 0, 0, 9153,
-    4104, 78599, 78601, 2929, 42712, 75067, 12272, 9832, 0, 0, 111105, 0, 0,
-    0, 0, 0, 0, 13106, 0, 0, 129111, 0, 0, 0, 0, 9074, 111111, 0, 111110, 0,
-    8113, 11168, 92563, 1786, 111109, 0, 111108, 0, 74423, 0, 586, 74414,
-    64359, 1267, 0, 127531, 0, 65731, 0, 0, 0, 92932, 0, 0, 0, 0, 0, 0, 1228,
-    0, 42846, 0, 0, 70343, 1714, 74406, 0, 0, 0, 127389, 66225, 0, 0, 42660,
-    0, 0, 3804, 0, 0, 0, 0, 2826, 0, 0, 0, 128396, 0, 0, 0, 0, 0, 0, 12206,
-    5839, 0, 68524, 74065, 0, 0, 0, 126240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    67241, 917821, 7030, 0, 10479, 64959, 2852, 0, 121225, 0, 0, 128586, 0,
-    6963, 0, 0, 0, 74786, 0, 0, 0, 0, 121281, 0, 0, 0, 0, 113815, 121360, 0,
-    9994, 0, 2864, 64719, 1148, 0, 41677, 0, 0, 2765, 0, 128181, 0, 0, 0,
-    92516, 74777, 0, 0, 65206, 0, 0, 0, 0, 69391, 0, 0, 983751, 0, 41839,
-    129616, 983754, 0, 0, 6931, 0, 0, 7177, 125137, 0, 0, 0, 93020, 0, 10722,
-    0, 0, 128186, 121050, 0, 0, 127207, 0, 750, 0, 0, 63912, 0, 0, 7032, 0,
-    0, 4314, 128600, 0, 128409, 730, 0, 127866, 0, 0, 41380, 0, 0, 0, 69697,
-    8240, 92939, 0, 41378, 0, 6938, 70026, 0, 0, 66246, 0, 0, 0, 0, 0, 0,
-    983094, 0, 92754, 41470, 64805, 0, 0, 0, 0, 0, 0, 0, 0, 92938, 68370, 0,
-    0, 73831, 0, 0, 0, 2872, 0, 0, 0, 0, 604, 41097, 0, 0, 0, 0, 0, 127488,
-    0, 2836, 0, 0, 9707, 0, 43202, 0, 0, 0, 0, 0, 120916, 2832, 92702, 9670,
-    12937, 0, 0, 0, 0, 2822, 0, 0, 92519, 0, 73752, 0, 0, 0, 1331, 92603, 0,
-    0, 0, 129432, 5090, 5089, 0, 3200, 0, 0, 0, 5088, 0, 0, 9477, 0, 0, 5087,
-    92325, 0, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 43820, 0, 983722, 0, 0,
-    119042, 0, 0, 0, 0, 0, 0, 0, 127241, 120891, 7601, 0, 591, 0, 118953, 0,
-    0, 0, 0, 0, 10939, 7246, 6933, 67142, 67141, 0, 74600, 120695, 0, 67138,
-    65574, 0, 78058, 67140, 73851, 74598, 67139, 128094, 0, 6372, 0, 0, 7963,
-    6371, 0, 0, 125040, 0, 0, 0, 0, 0, 0, 0, 8258, 123591, 0, 0, 65148,
-    118919, 42, 0, 0, 0, 0, 0, 0, 0, 0, 67135, 67134, 67133, 0, 0, 0, 0,
-    67136, 67130, 74597, 11550, 0, 67132, 65868, 0, 12826, 127872, 0, 126235,
-    9737, 92448, 0, 0, 0, 8878, 0, 0, 0, 0, 0, 72220, 9086, 0, 0, 0, 7437,
-    7454, 0, 0, 0, 0, 9042, 0, 0, 0, 0, 3805, 0, 67128, 44001, 67126, 0,
-    44022, 19949, 12200, 43522, 983045, 43525, 0, 0, 0, 64422, 67125, 67124,
-    7602, 0, 0, 43521, 0, 0, 43711, 43523, 41447, 8424, 68483, 8704, 2397, 0,
-    0, 0, 0, 0, 10916, 0, 129290, 93998, 0, 0, 0, 127800, 67686, 9961,
-    123203, 0, 68842, 10792, 8889, 121402, 6951, 0, 68827, 917835, 74342, 0,
-    0, 0, 68816, 129152, 0, 42909, 66597, 70092, 0, 0, 10481, 4559, 0, 1956,
-    43138, 0, 0, 43490, 43148, 0, 0, 0, 43140, 0, 0, 0, 0, 73013, 8533, 0, 0,
-    0, 0, 0, 4357, 0, 70289, 983156, 0, 42911, 0, 0, 0, 10941, 0, 6962, 0, 0,
-    113808, 0, 11014, 0, 8942, 12000, 0, 0, 0, 0, 0, 0, 42650, 0, 75016,
-    63975, 0, 66210, 0, 0, 129150, 0, 11193, 0, 0, 0, 0, 0, 0, 0, 43476, 0,
-    11024, 74811, 72787, 10563, 92954, 0, 0, 2462, 92955, 0, 0, 66213, 6957,
-    0, 120559, 0, 0, 0, 74594, 983419, 92347, 0, 110702, 110708, 110707,
-    127119, 3109, 127117, 119909, 0, 121434, 0, 0, 4042, 0, 0, 0, 127123,
-    127122, 127121, 0, 127999, 0, 3503, 74444, 68300, 6694, 127997, 0, 0,
-    74306, 0, 983738, 7736, 0, 0, 0, 10521, 0, 42173, 9705, 0, 0, 6955,
-    71467, 0, 6149, 3887, 19956, 1411, 2824, 0, 0, 0, 1403, 0, 1347, 66282,
-    127996, 0, 0, 0, 0, 8640, 0, 1178, 1654, 0, 0, 129529, 43314, 0, 0, 0, 0,
-    2873, 0, 0, 0, 67085, 10861, 0, 0, 70377, 0, 67082, 67081, 41391, 67084,
-    0, 376, 6987, 983181, 119904, 0, 8823, 0, 12943, 65185, 100988, 42099, 0,
-    0, 100990, 0, 8301, 0, 0, 1684, 0, 0, 0, 120620, 0, 0, 0, 42121, 0,
-    66781, 78067, 42115, 0, 127998, 0, 67080, 1493, 42111, 67077, 4097, 0,
-    983748, 0, 65808, 41642, 0, 0, 67076, 41636, 67074, 65095, 110660, 72254,
-    121240, 41629, 12154, 75073, 0, 128179, 74084, 64380, 0, 0, 0, 0, 0,
-    71193, 65371, 7078, 0, 0, 0, 74592, 0, 0, 43275, 0, 41434, 6062, 0, 0,
-    19916, 0, 6950, 9606, 9842, 0, 65744, 0, 0, 128659, 0, 41615, 10105, 0,
-    0, 41632, 7493, 0, 0, 41622, 0, 0, 0, 0, 7632, 983215, 983214, 9805,
-    5990, 900, 0, 0, 0, 0, 3612, 0, 64376, 0, 5389, 129469, 0, 0, 2839, 9621,
+    8417, 65903, 0, 0, 0, 4033, 128164, 0, 0, 0, 129961, 64600, 1903, 12320,
+    0, 120894, 0, 0, 8915, 0, 945, 0, 0, 0, 0, 111068, 0, 74828, 0, 69560,
+    9531, 0, 8505, 0, 119238, 0, 0, 65538, 0, 0, 0, 0, 0, 0, 63935, 0, 0, 0,
+    0, 0, 64787, 111060, 0, 0, 110828, 0, 2230, 0, 0, 71886, 9843, 0, 92419,
+    111062, 129337, 92715, 0, 1320, 0, 1673, 0, 92383, 129902, 9338, 128355,
+    0, 0, 0, 0, 11997, 0, 0, 0, 0, 0, 0, 43308, 0, 0, 0, 0, 0, 0, 0, 63920,
+    0, 0, 0, 0, 0, 0, 3514, 78723, 0, 7492, 0, 0, 0, 7514, 0, 63924, 0, 7502,
+    7587, 0, 0, 0, 0, 43881, 7610, 0, 0, 120759, 692, 43588, 0, 0, 75056,
+    9688, 0, 9535, 0, 0, 0, 64530, 0, 125251, 194861, 0, 72209, 7453, 0,
+    8013, 66396, 0, 0, 8895, 5356, 0, 5458, 0, 2866, 0, 127860, 71732, 71724,
+    6700, 0, 111081, 120583, 0, 110614, 0, 9641, 63830, 65294, 0, 0, 67969,
+    0, 7441, 0, 63826, 0, 0, 0, 0, 2844, 983953, 0, 63824, 12139, 67971, 0,
+    0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 65772, 0, 0, 0, 0, 2862, 11326, 0,
+    0, 94001, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 195092,
+    10240, 195093, 0, 0, 0, 0, 0, 71454, 0, 0, 2837, 4341, 0, 0, 129982,
+    125064, 0, 0, 0, 0, 0, 72721, 863, 129125, 0, 0, 43323, 0, 0, 0, 68054,
+    0, 3654, 0, 0, 0, 0, 0, 7653, 0, 0, 66587, 0, 0, 92401, 0, 0, 12927, 0,
+    0, 129697, 13056, 0, 0, 3056, 0, 0, 195101, 0, 0, 74506, 73770, 0, 0, 0,
+    0, 0, 0, 0, 0, 72233, 0, 5811, 0, 0, 0, 66817, 983836, 0, 0, 128636,
+    129311, 0, 128041, 0, 67739, 120965, 0, 0, 0, 0, 68375, 0, 0, 70300, 0,
+    0, 0, 983679, 111078, 0, 11991, 128079, 0, 92943, 1502, 74117, 127988, 0,
+    129478, 121253, 0, 67661, 0, 0, 125084, 120758, 0, 74057, 68639, 0,
+    42898, 120742, 0, 74388, 74838, 120822, 0, 0, 0, 0, 69452, 43214, 5893,
+    0, 0, 92496, 0, 0, 119907, 119900, 0, 0, 0, 0, 41950, 0, 0, 68610, 0,
+    68626, 894, 0, 0, 12306, 73846, 0, 0, 0, 8636, 0, 121028, 42503, 0,
+    92942, 0, 121468, 119241, 0, 126569, 5096, 5095, 2863, 127505, 0, 10454,
+    42530, 5094, 0, 0, 13156, 0, 111035, 5093, 127178, 983414, 0, 5092,
+    10708, 11327, 0, 5091, 0, 0, 9153, 4104, 78599, 78601, 2929, 42712,
+    75067, 12272, 9832, 0, 0, 111105, 0, 0, 0, 0, 0, 0, 13106, 0, 0, 129111,
+    0, 0, 0, 0, 9074, 111111, 0, 111110, 0, 8113, 11168, 92563, 1786, 111109,
+    0, 111108, 0, 74423, 0, 586, 74414, 64359, 1267, 0, 127531, 0, 65731, 0,
+    0, 0, 92932, 0, 0, 0, 0, 0, 0, 1228, 0, 42846, 0, 0, 70343, 1714, 74406,
+    0, 0, 0, 127389, 66225, 0, 0, 42660, 0, 0, 3804, 0, 0, 129859, 0, 2826,
+    0, 0, 0, 128396, 0, 0, 0, 0, 0, 0, 12206, 5839, 0, 68524, 74065, 0, 0, 0,
+    126240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67241, 917821, 7030, 0, 10479,
+    64959, 2852, 0, 121225, 0, 0, 128586, 0, 6963, 0, 0, 0, 74786, 0, 0, 0,
+    0, 121281, 0, 0, 0, 0, 113815, 121360, 0, 9994, 0, 2864, 64719, 1148, 0,
+    41677, 0, 0, 2765, 0, 128181, 0, 0, 0, 92516, 74777, 0, 0, 65206, 0, 0,
+    0, 0, 69391, 0, 0, 983751, 0, 41839, 129616, 983754, 0, 0, 6931, 0, 0,
+    7177, 125137, 0, 0, 0, 93020, 0, 10722, 0, 0, 128186, 121050, 0, 0,
+    127207, 0, 750, 0, 129453, 63912, 0, 0, 7032, 0, 0, 4314, 128600, 0,
+    128409, 730, 0, 127866, 0, 0, 41380, 0, 0, 0, 69697, 8240, 92939, 0,
+    41378, 0, 6938, 70026, 0, 0, 66246, 0, 0, 0, 0, 0, 0, 983094, 0, 92754,
+    41470, 64805, 0, 0, 0, 0, 0, 0, 0, 0, 92938, 68370, 0, 0, 73831, 0, 0, 0,
+    2872, 0, 0, 0, 0, 604, 41097, 0, 0, 0, 0, 0, 127488, 0, 2836, 0, 0, 9707,
+    0, 43202, 0, 0, 0, 0, 0, 120916, 2832, 92702, 9670, 12937, 0, 0, 0, 0,
+    2822, 0, 0, 92519, 0, 73752, 0, 0, 0, 1331, 92603, 0, 11856, 0, 129432,
+    5090, 5089, 0, 3200, 0, 0, 0, 5088, 0, 0, 9477, 0, 0, 5087, 92325, 0, 96,
+    5086, 0, 0, 0, 5085, 64286, 0, 0, 43820, 0, 983722, 0, 0, 119042, 0, 0,
+    0, 0, 0, 0, 0, 127241, 120891, 7601, 0, 591, 0, 118953, 0, 0, 0, 0, 0,
+    10939, 7246, 6933, 67142, 67141, 0, 74600, 120695, 0, 67138, 65574, 0,
+    78058, 67140, 73851, 74598, 67139, 128094, 0, 6372, 0, 0, 7963, 6371, 0,
+    0, 125040, 0, 0, 0, 0, 0, 0, 0, 8258, 123591, 0, 0, 65148, 118919, 42, 0,
+    0, 0, 0, 0, 0, 0, 0, 67135, 67134, 67133, 0, 0, 0, 0, 67136, 67130,
+    74597, 11550, 0, 67132, 65868, 0, 12826, 127872, 0, 126235, 9737, 92448,
+    0, 0, 0, 8878, 0, 0, 0, 0, 0, 72220, 9086, 0, 0, 0, 7437, 7454, 0, 0, 0,
+    0, 9042, 0, 0, 0, 0, 3805, 0, 67128, 44001, 67126, 0, 44022, 19949,
+    12200, 43522, 983045, 43525, 0, 0, 0, 64422, 67125, 67124, 7602, 0, 0,
+    43521, 0, 0, 43711, 43523, 41447, 8424, 68483, 8704, 2397, 0, 0, 0, 0, 0,
+    10916, 0, 129290, 93998, 0, 0, 0, 127800, 67686, 9961, 123203, 0, 68842,
+    10792, 8889, 121402, 6951, 0, 68827, 917835, 74342, 0, 0, 0, 68816,
+    129152, 0, 42909, 66597, 70092, 0, 0, 10481, 4559, 0, 1956, 43138, 0, 0,
+    43490, 43148, 0, 0, 0, 43140, 0, 0, 0, 0, 69268, 8533, 0, 0, 0, 0, 0,
+    4357, 0, 70289, 983156, 0, 42911, 0, 0, 0, 10941, 0, 6962, 0, 0, 113808,
+    0, 11014, 0, 8942, 12000, 0, 0, 0, 0, 0, 0, 42650, 0, 75016, 63975, 0,
+    66210, 0, 0, 129150, 0, 11193, 0, 0, 0, 0, 0, 0, 0, 43476, 0, 11024,
+    74811, 72787, 10563, 92954, 0, 0, 2462, 92955, 0, 0, 66213, 6957, 0,
+    120559, 0, 0, 0, 74594, 983419, 92347, 0, 110702, 110708, 110707, 127119,
+    3109, 127117, 119909, 0, 121434, 0, 0, 4042, 0, 0, 0, 127123, 127122,
+    127121, 0, 127999, 0, 3503, 74444, 68300, 6694, 127997, 0, 0, 74306, 0,
+    983738, 7736, 0, 0, 0, 10521, 0, 42173, 9705, 0, 0, 6955, 71467, 0, 6149,
+    3887, 19956, 1411, 2824, 0, 0, 0, 1403, 0, 1347, 66282, 127996, 0, 0, 0,
+    0, 8640, 0, 1178, 1654, 0, 0, 129529, 43314, 0, 0, 0, 0, 2873, 0, 0, 0,
+    67085, 10861, 0, 0, 70377, 0, 67082, 11159, 41391, 67084, 0, 376, 6987,
+    983181, 119904, 0, 8823, 0, 12943, 65185, 100988, 42099, 0, 0, 100990, 0,
+    8301, 0, 0, 1684, 0, 0, 0, 120620, 0, 0, 0, 42121, 0, 66781, 78067,
+    42115, 0, 127998, 0, 67080, 1493, 42111, 67077, 4097, 0, 983748, 0,
+    65808, 41642, 0, 0, 67076, 41636, 67074, 65095, 110660, 72254, 121240,
+    41629, 12154, 75073, 0, 128179, 74084, 64380, 0, 0, 0, 0, 0, 71193,
+    65371, 7078, 0, 0, 0, 74592, 0, 0, 43275, 0, 41434, 6062, 0, 0, 19916, 0,
+    6950, 9606, 9842, 0, 65744, 0, 0, 128659, 0, 41615, 10105, 0, 0, 41632,
+    7493, 0, 0, 41622, 0, 0, 0, 0, 7632, 983215, 983214, 9805, 5990, 900, 0,
+    983386, 0, 120869, 3612, 0, 64376, 0, 5389, 129469, 0, 0, 2839, 9621,
     582, 0, 0, 3749, 0, 7569, 0, 0, 129472, 6956, 4403, 0, 0, 3299, 0, 0,
-    119127, 65676, 0, 74373, 0, 983492, 7598, 69819, 42469, 42242, 1918,
+    119127, 65676, 0, 74372, 0, 983492, 7598, 69819, 42469, 42242, 1918,
     9542, 480, 7716, 0, 0, 0, 0, 0, 69918, 0, 8328, 0, 118894, 0, 0, 0, 0,
     11132, 0, 66743, 74185, 100531, 2854, 66747, 0, 65755, 0, 67120, 67119,
     65835, 67117, 66736, 67123, 67122, 67121, 9881, 100481, 65757, 100538,
@@ -24188,17 +24993,17 @@
     41998, 0, 6946, 77920, 0, 123610, 0, 0, 0, 121442, 42690, 9880, 0, 0,
     64589, 0, 0, 127880, 68035, 0, 11360, 0, 0, 72242, 0, 0, 0, 0, 0, 64941,
     0, 0, 0, 0, 65671, 11244, 73706, 6959, 41994, 42907, 0, 0, 122902, 8617,
-    41982, 8860, 0, 0, 0, 0, 0, 9597, 0, 43172, 0, 10117, 0, 92297, 65865, 0,
-    0, 128077, 0, 126065, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 0, 7775,
-    0, 41948, 0, 0, 101010, 41942, 65449, 3160, 65922, 13226, 42665, 0,
-    42663, 128210, 41766, 0, 78848, 78849, 41760, 1189, 905, 110620, 42658,
-    78851, 67859, 9629, 6742, 0, 43625, 12952, 7888, 0, 3980, 0, 42656, 0,
-    42055, 0, 0, 0, 64540, 0, 7867, 69218, 6236, 0, 0, 10505, 0, 12851,
-    118948, 0, 5474, 128843, 3103, 0, 41753, 41733, 78051, 983472, 78844,
-    78845, 41739, 78843, 70744, 10931, 41756, 43347, 68098, 122909, 41746,
-    119147, 92591, 41259, 917848, 69930, 2691, 121338, 11231, 41244, 0,
-    69800, 66364, 41262, 0, 0, 0, 41251, 0, 0, 11805, 0, 0, 68331, 94045, 0,
-    0, 0, 74633, 41266, 126642, 0, 0, 0, 65741, 41737, 2275, 2666, 121232,
+    41982, 8860, 0, 0, 121256, 0, 0, 9597, 0, 43172, 0, 10117, 0, 92297,
+    65865, 0, 0, 128077, 0, 126065, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964,
+    0, 7775, 0, 41948, 0, 0, 101010, 41942, 65449, 3160, 65922, 13226, 42665,
+    0, 42663, 128210, 41766, 0, 78848, 78849, 41760, 1189, 905, 110620,
+    42658, 78851, 67859, 9629, 6742, 0, 43625, 12952, 7888, 0, 3980, 0,
+    42656, 0, 42055, 0, 0, 0, 64540, 0, 7867, 69218, 6236, 0, 0, 10505, 0,
+    12851, 118948, 0, 5474, 128843, 3103, 0, 41753, 41733, 78051, 983472,
+    78844, 78845, 41739, 78843, 70744, 10931, 41756, 43347, 68098, 122909,
+    41746, 119147, 92591, 41259, 917848, 69930, 2691, 121338, 11231, 41244,
+    0, 69800, 66364, 41262, 0, 0, 0, 41251, 0, 0, 11805, 0, 0, 68331, 94045,
+    0, 0, 0, 74633, 41266, 126642, 0, 0, 0, 65741, 41737, 2275, 2666, 121232,
     41738, 4967, 419, 13126, 0, 0, 42822, 0, 6434, 74913, 0, 0, 6432, 0,
     69932, 128862, 769, 41742, 69927, 74805, 6433, 0, 547, 1943, 6439, 0,
     4994, 487, 0, 0, 3754, 0, 0, 0, 0, 74780, 0, 0, 1595, 92777, 74431, 0, 0,
@@ -24232,199 +25037,201 @@
     120401, 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321,
     120391, 120388, 55287, 2237, 120246, 9588, 120248, 120382, 120383,
     120380, 120381, 0, 0, 3561, 0, 0, 10613, 0, 0, 0, 0, 0, 128689, 5006,
-    64328, 68219, 917894, 0, 8825, 0, 0, 0, 0, 128616, 0, 119177, 0, 0,
+    64328, 68219, 917894, 0, 8825, 129880, 0, 0, 0, 128616, 0, 119177, 0, 0,
     128641, 120225, 71366, 120227, 120228, 438, 4510, 41707, 8721, 120233,
     120234, 120235, 12840, 120229, 10845, 120231, 8096, 0, 120935, 0, 0,
     65589, 8733, 0, 0, 0, 0, 0, 0, 93984, 11262, 73747, 128522, 0, 64591,
-    42405, 0, 0, 1632, 127982, 128326, 0, 0, 0, 121477, 42444, 0, 0, 215,
-    41258, 128494, 64494, 1953, 10185, 0, 1256, 3910, 41260, 917903, 0, 0,
-    41257, 0, 8675, 10700, 0, 0, 0, 9333, 0, 121471, 0, 0, 0, 0, 0, 499, 0,
-    70729, 42915, 0, 101000, 0, 100999, 0, 0, 73111, 0, 122897, 0, 125006, 0,
-    11118, 0, 128009, 0, 0, 128980, 9180, 0, 0, 0, 100986, 43438, 0, 0, 0, 0,
-    0, 120669, 64782, 0, 0, 73969, 565, 42484, 118913, 201, 0, 42292, 69610,
-    0, 0, 119625, 43518, 0, 0, 1022, 113788, 3880, 74247, 0, 0, 0, 0, 0, 0,
-    0, 0, 72272, 100997, 0, 0, 0, 74255, 0, 0, 92598, 0, 9903, 118993, 0,
-    68226, 0, 0, 0, 127788, 100955, 83280, 7892, 0, 10777, 0, 0, 65562, 0,
-    101002, 0, 8039, 3363, 101009, 0, 0, 0, 12596, 70812, 0, 0, 0, 0, 0,
-    92425, 74992, 64541, 0, 0, 10520, 12802, 0, 12998, 0, 83270, 42861,
-    83273, 11415, 0, 7541, 125068, 65878, 822, 0, 0, 5774, 194746, 43252, 0,
-    92619, 7672, 129281, 0, 0, 7463, 0, 0, 0, 0, 0, 0, 121411, 0, 0, 0, 0, 0,
-    475, 0, 120586, 7329, 0, 0, 195088, 66291, 10645, 0, 6543, 0, 0, 0,
-    119065, 0, 0, 0, 983233, 195095, 0, 8923, 1645, 0, 0, 0, 3196, 72404, 0,
-    0, 43595, 0, 0, 0, 0, 0, 195076, 0, 0, 5258, 4328, 0, 0, 0, 405, 11454,
-    0, 0, 0, 0, 75052, 41245, 0, 0, 4523, 11369, 0, 0, 0, 195079, 0, 0,
-    983505, 0, 100961, 10480, 74610, 0, 0, 0, 12610, 0, 41247, 0, 7609,
-    118837, 0, 0, 92253, 0, 984, 0, 92621, 0, 0, 0, 983501, 0, 0, 0, 43369,
-    0, 0, 0, 983502, 6634, 0, 0, 0, 0, 74214, 0, 67709, 0, 0, 0, 71114, 9552,
-    0, 0, 0, 12997, 0, 0, 0, 0, 129109, 12883, 10994, 10529, 55283, 0, 74618,
-    0, 67736, 10661, 19951, 9614, 2428, 0, 121023, 0, 126224, 100966, 71127,
-    0, 124996, 119162, 1952, 92181, 8455, 100958, 0, 93033, 119566, 100960,
-    0, 12183, 100951, 0, 64929, 0, 0, 0, 128290, 42509, 73087, 3922, 9187,
-    983626, 0, 0, 119057, 0, 3353, 9358, 0, 0, 66680, 0, 73975, 12879, 0,
-    9795, 68380, 0, 0, 0, 0, 0, 41027, 0, 0, 0, 983631, 0, 70378, 0, 11751,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129356, 0, 0, 0, 0, 41029, 0, 126513, 0, 0,
-    0, 11294, 0, 66665, 0, 0, 127750, 0, 0, 70105, 0, 0, 0, 67843, 0, 0,
-    121167, 983876, 0, 8088, 129412, 0, 0, 0, 983973, 6926, 72423, 0, 129569,
-    42369, 4350, 0, 65145, 9041, 43559, 0, 0, 0, 41263, 0, 0, 0, 65825, 9577,
-    68199, 0, 0, 983121, 0, 6793, 0, 70409, 0, 0, 0, 0, 64669, 0, 0, 0,
-    11200, 72725, 2995, 0, 0, 0, 7868, 72720, 983560, 11386, 1009, 70405,
-    66871, 2333, 0, 0, 0, 0, 0, 70407, 128121, 0, 0, 0, 0, 0, 0, 0, 74968, 0,
-    0, 110601, 0, 0, 41261, 0, 0, 0, 0, 118989, 6736, 917883, 0, 43010,
-    127889, 0, 69635, 73011, 983697, 0, 0, 7293, 0, 0, 0, 0, 111332, 0,
-    128245, 69928, 0, 0, 127072, 64445, 111336, 6635, 0, 0, 72707, 74936, 0,
-    0, 917876, 0, 93025, 0, 0, 111329, 0, 0, 128045, 65219, 11925, 0, 92434,
-    0, 0, 9845, 0, 7546, 0, 0, 11230, 4985, 13288, 672, 8098, 0, 0, 0,
-    128126, 42655, 0, 0, 1577, 11772, 78327, 0, 66673, 0, 65911, 122908, 0,
-    0, 129391, 92180, 0, 0, 0, 125140, 0, 0, 0, 119593, 1539, 0, 74969,
-    42731, 0, 74970, 71066, 0, 3051, 0, 73783, 0, 0, 0, 0, 78777, 0, 983160,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 3505, 8707, 0, 6725, 128013, 0, 92314, 0,
-    66391, 5479, 0, 6686, 0, 0, 983313, 42754, 0, 0, 0, 0, 0, 0, 128523, 0,
-    0, 4433, 41156, 0, 74971, 1443, 9339, 0, 0, 10926, 0, 43511, 0, 0,
-    983319, 0, 126086, 72236, 10021, 0, 0, 0, 65914, 0, 66749, 0, 6721, 217,
-    12466, 0, 0, 10443, 0, 68654, 0, 0, 0, 78334, 0, 41250, 0, 129532, 0, 0,
-    0, 69232, 0, 41252, 66682, 0, 119637, 41249, 1366, 0, 0, 0, 0, 0, 4397,
-    0, 0, 0, 9545, 121219, 0, 0, 0, 3511, 0, 92190, 0, 0, 126244, 760, 0,
-    12088, 0, 0, 42256, 0, 0, 417, 0, 111347, 41565, 74965, 0, 111355, 0, 0,
-    0, 2284, 0, 0, 983257, 0, 0, 0, 0, 0, 0, 42273, 0, 69430, 0, 0, 126643,
-    0, 65910, 0, 10246, 0, 68224, 12169, 128858, 4552, 0, 0, 0, 1375, 66705,
+    42405, 0, 0, 1632, 127982, 128326, 0, 0, 121327, 121477, 42444, 0, 0,
+    215, 41258, 128494, 64494, 1953, 10185, 0, 1256, 3910, 41260, 917903, 0,
+    0, 41257, 0, 8675, 10700, 0, 124951, 0, 9333, 0, 121471, 0, 0, 0, 0, 0,
+    499, 0, 70729, 42915, 0, 101000, 0, 100999, 0, 0, 73111, 0, 122897, 0,
+    125006, 0, 11118, 0, 128009, 0, 0, 128980, 9180, 0, 0, 0, 100986, 43438,
+    0, 0, 0, 0, 0, 120669, 64782, 0, 0, 73969, 565, 42484, 118913, 201, 0,
+    42292, 69610, 0, 0, 119625, 43518, 0, 0, 1022, 113788, 3880, 74247, 0, 0,
+    0, 0, 0, 0, 0, 0, 72272, 100997, 0, 0, 0, 74255, 0, 0, 92598, 0, 9903,
+    118993, 0, 68226, 0, 0, 0, 127788, 100955, 83280, 7892, 0, 10777, 0, 0,
+    65562, 0, 101002, 0, 8039, 3363, 101009, 0, 0, 0, 12596, 70812, 0, 0, 0,
+    0, 71962, 92425, 74992, 64541, 0, 0, 10520, 12802, 0, 12998, 0, 83270,
+    42861, 83273, 11415, 0, 7541, 125068, 65878, 822, 0, 0, 5774, 194746,
+    43252, 0, 92619, 7672, 129281, 0, 0, 7463, 0, 0, 0, 0, 0, 0, 121411, 0,
+    0, 0, 0, 0, 475, 0, 120586, 7329, 0, 0, 195088, 66291, 10645, 0, 6543, 0,
+    0, 0, 119065, 0, 0, 0, 983233, 195095, 0, 8923, 1645, 0, 0, 0, 3196,
+    72404, 0, 0, 43595, 0, 0, 0, 0, 0, 195076, 0, 0, 5258, 4328, 0, 0, 0,
+    405, 11454, 0, 0, 0, 0, 75052, 41245, 0, 195078, 4523, 11369, 0, 0, 0,
+    195079, 0, 0, 983505, 0, 100961, 10480, 74610, 0, 0, 0, 12610, 0, 41247,
+    0, 7609, 118837, 0, 0, 92253, 0, 984, 0, 92621, 0, 0, 129885, 73982, 0,
+    0, 0, 43369, 0, 0, 0, 983502, 6634, 0, 71952, 0, 0, 74214, 0, 67709, 0,
+    0, 0, 71114, 9552, 0, 0, 0, 12997, 0, 0, 0, 0, 129109, 12883, 10994,
+    10529, 55283, 0, 74618, 0, 67736, 10661, 19951, 9614, 2428, 0, 121023, 0,
+    126224, 100966, 71127, 0, 124996, 119162, 1952, 92181, 8455, 100958, 0,
+    93033, 119566, 100960, 0, 12183, 100951, 0, 64929, 0, 0, 0, 128290,
+    42509, 73087, 3922, 9187, 983626, 0, 0, 119057, 0, 3353, 9358, 0, 0,
+    66680, 0, 73975, 12879, 0, 9795, 68380, 0, 0, 0, 0, 0, 41027, 0, 0, 0,
+    983631, 0, 70378, 0, 11751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129356, 0, 0,
+    0, 0, 41029, 0, 126513, 0, 0, 0, 11294, 0, 66665, 0, 0, 127750, 0, 0,
+    70105, 0, 0, 0, 67843, 0, 0, 121167, 983876, 0, 8088, 129412, 0, 0, 0,
+    983973, 6926, 72423, 0, 129569, 42369, 4350, 0, 65145, 9041, 43559, 0, 0,
+    0, 41263, 0, 0, 0, 65825, 9577, 68199, 0, 0, 983121, 0, 6793, 0, 70409,
+    0, 0, 0, 0, 64669, 0, 0, 0, 11200, 72725, 2995, 0, 0, 0, 7868, 72720,
+    72020, 11386, 1009, 70405, 66871, 2333, 0, 0, 0, 0, 0, 70407, 128121, 0,
+    0, 0, 0, 0, 0, 0, 74968, 0, 0, 110601, 0, 0, 41261, 0, 0, 0, 0, 118989,
+    6736, 917883, 0, 43010, 127889, 0, 69635, 73011, 983697, 0, 0, 7293, 0,
+    0, 0, 0, 111332, 0, 128245, 69928, 0, 0, 127072, 64445, 111336, 6635, 0,
+    0, 72707, 74936, 0, 0, 917876, 0, 93025, 0, 0, 111329, 0, 129887, 128045,
+    65219, 11925, 0, 92434, 0, 0, 9845, 101317, 7546, 0, 0, 11230, 4985,
+    13288, 672, 8098, 0, 0, 0, 128126, 42655, 0, 0, 1577, 11772, 78327, 0,
+    66673, 0, 65911, 122908, 0, 0, 101303, 92180, 0, 0, 120566, 125140, 0, 0,
+    0, 119593, 1539, 0, 74969, 42731, 0, 74970, 71066, 0, 3051, 0, 73783, 0,
+    0, 0, 0, 78777, 0, 983160, 0, 0, 101310, 0, 0, 0, 0, 0, 0, 3505, 8707, 0,
+    6725, 128013, 0, 92314, 0, 66391, 5479, 0, 6686, 0, 0, 983313, 42754, 0,
+    0, 0, 0, 0, 0, 128523, 0, 0, 4433, 41156, 0, 74971, 1443, 9339, 0, 0,
+    10926, 0, 43511, 0, 0, 983319, 0, 126086, 72236, 10021, 0, 101329, 0,
+    65914, 0, 66749, 0, 6721, 217, 12466, 0, 0, 10443, 0, 68654, 0, 0, 0,
+    78334, 0, 41250, 0, 129532, 128375, 0, 0, 69232, 0, 41252, 66682, 0,
+    119637, 41249, 1366, 0, 0, 101326, 0, 0, 4397, 101324, 0, 0, 9545,
+    101323, 0, 0, 0, 3511, 0, 92190, 0, 0, 126244, 760, 0, 12088, 0, 0,
+    42256, 0, 0, 417, 0, 111347, 41565, 74965, 0, 111355, 0, 0, 0, 2284, 0,
+    0, 983257, 0, 0, 0, 0, 0, 0, 42273, 0, 69430, 121041, 0, 126643, 0,
+    65910, 0, 10246, 0, 68224, 12169, 128858, 4552, 0, 0, 0, 1375, 66705,
     128412, 0, 3329, 0, 42811, 74251, 74192, 120794, 7840, 0, 0, 65374, 0, 0,
     71072, 0, 4396, 0, 126608, 0, 10331, 125224, 0, 11543, 0, 8944, 0, 0, 0,
     0, 0, 19965, 43025, 10299, 128436, 68845, 0, 69724, 67412, 92952, 0,
-    43811, 0, 128924, 0, 11062, 128748, 0, 0, 0, 78364, 0, 7865, 0, 78354, 0,
-    78347, 0, 0, 0, 66363, 0, 0, 0, 74967, 7414, 0, 0, 92691, 0, 128507, 885,
-    64772, 65180, 0, 71267, 852, 0, 0, 0, 78614, 121174, 129092, 67809, 9609,
-    12156, 0, 0, 43586, 11035, 10411, 0, 13268, 6710, 0, 0, 0, 43853, 77949,
-    4315, 0, 111104, 0, 43639, 43343, 0, 0, 0, 73074, 0, 65812, 43431, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 994, 125222, 127104, 127103, 73966, 66890, 0,
-    65291, 0, 0, 0, 0, 0, 66873, 4186, 92531, 127106, 127105, 6718, 7330,
-    4406, 0, 8480, 7319, 64373, 128699, 4413, 0, 0, 3198, 0, 0, 92469,
-    111126, 0, 128591, 128681, 0, 0, 0, 0, 73023, 742, 0, 2893, 78738, 0, 0,
-    0, 2553, 42294, 6756, 0, 73020, 8363, 0, 2993, 128381, 3916, 4301, 0,
-    1141, 42407, 0, 0, 7572, 973, 0, 125077, 0, 2415, 0, 0, 9640, 42333, 0,
-    0, 129546, 42486, 43381, 65390, 0, 69434, 1202, 0, 0, 0, 0, 68484, 0, 0,
-    64542, 3260, 0, 65388, 43502, 69904, 0, 6738, 0, 0, 74193, 0, 0, 0,
-    74641, 6312, 0, 74556, 12446, 0, 0, 128076, 8229, 1235, 0, 11472, 83064,
-    0, 0, 0, 0, 0, 1740, 12872, 0, 985, 0, 0, 0, 12068, 0, 0, 0, 0, 0, 0,
-    13133, 65071, 110780, 12655, 12134, 0, 92934, 0, 66915, 120349, 119572,
-    0, 93030, 41572, 0, 0, 0, 41573, 0, 3931, 0, 74143, 0, 127034, 0, 0, 0,
-    0, 83067, 0, 129303, 0, 0, 0, 0, 0, 0, 83068, 0, 72740, 128637, 72717,
-    92935, 120291, 0, 1780, 6936, 0, 0, 819, 0, 9694, 125228, 0, 0, 0, 0,
-    8343, 8342, 8345, 8344, 8346, 8338, 7523, 6922, 8348, 8347, 7525, 3346,
-    8339, 125004, 72705, 69462, 268, 0, 0, 5754, 0, 0, 110684, 8336, 0, 0, 0,
-    8337, 8341, 0, 11388, 7522, 0, 0, 0, 11090, 6953, 125240, 0, 74973,
-    120708, 0, 0, 0, 0, 0, 110782, 0, 9038, 7887, 0, 0, 42534, 64347, 0, 0,
-    67660, 120341, 0, 0, 0, 120878, 0, 0, 73999, 0, 64580, 0, 0, 64643, 0, 0,
-    74975, 0, 92227, 129052, 0, 83071, 83072, 83073, 119154, 0, 119153, 0, 0,
-    5349, 72440, 0, 917554, 7411, 0, 983220, 0, 0, 0, 42736, 70747, 5756,
-    983225, 92946, 0, 42764, 0, 0, 119529, 5752, 120600, 0, 0, 0, 0, 0,
-    78893, 0, 0, 0, 125242, 0, 0, 120331, 0, 0, 0, 72826, 0, 10080, 83056,
-    12647, 0, 0, 0, 66882, 0, 0, 0, 0, 0, 128351, 72845, 0, 0, 0, 0, 0,
-    74213, 0, 0, 0, 0, 0, 6302, 0, 0, 0, 0, 1417, 983222, 0, 9452, 0, 74393,
-    0, 0, 110850, 0, 65391, 63789, 0, 78659, 78660, 41264, 78658, 6426,
-    42398, 9179, 78654, 64906, 41255, 42036, 0, 41269, 0, 41267, 42436,
-    67759, 42323, 42034, 0, 0, 42475, 42033, 0, 0, 68916, 43948, 0, 78673,
-    78674, 1659, 919, 42784, 1671, 0, 6069, 9219, 0, 1661, 0, 0, 92690,
-    10140, 9713, 78400, 0, 125236, 0, 2306, 0, 0, 6068, 10612, 0, 0, 121314,
-    92561, 41462, 0, 0, 0, 0, 0, 0, 0, 128204, 10635, 0, 983221, 0, 0, 0,
-    983231, 92251, 0, 121029, 983223, 0, 8100, 0, 78669, 78670, 13301, 78667,
-    9667, 78665, 0, 0, 11003, 9904, 0, 0, 0, 0, 0, 0, 78680, 78681, 78677,
-    78678, 0, 10313, 0, 0, 64320, 10265, 78686, 129404, 78684, 78685, 8945,
-    78683, 70750, 41, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 0, 0, 2585, 0, 65254,
-    3126, 0, 74136, 10957, 0, 11160, 0, 0, 0, 0, 0, 11408, 0, 7443, 0, 0,
-    6997, 68004, 0, 0, 8739, 11075, 0, 65216, 0, 69795, 2593, 0, 0, 0, 0,
-    125062, 0, 0, 0, 4411, 0, 72837, 0, 43442, 78799, 0, 0, 0, 66351, 0, 0,
-    13061, 0, 78687, 78688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119925, 0,
-    983637, 0, 0, 0, 0, 83399, 127541, 83398, 8022, 78808, 0, 73794, 0, 0,
-    83414, 119918, 0, 0, 0, 0, 0, 0, 63799, 78427, 12063, 78425, 78424, 0, 0,
-    0, 75025, 0, 297, 0, 0, 68326, 0, 78429, 78428, 7077, 2497, 128651, 0,
-    983111, 0, 0, 0, 4292, 0, 74815, 10512, 0, 74814, 119931, 0, 72841, 2503,
-    73778, 1762, 69794, 2495, 0, 71230, 94069, 77984, 0, 12654, 0, 1899, 0,
-    2507, 0, 8726, 0, 65594, 0, 71272, 8892, 0, 0, 0, 0, 0, 420, 0, 0,
-    125130, 10797, 74637, 0, 0, 0, 0, 63796, 0, 66581, 0, 119205, 0, 0,
-    194840, 0, 120788, 0, 0, 92956, 0, 0, 0, 0, 119230, 0, 0, 83496, 7399, 0,
-    66434, 42779, 0, 92220, 42197, 92543, 5380, 0, 0, 1155, 11365, 43126, 0,
-    77971, 65684, 0, 5601, 0, 42765, 78258, 0, 7987, 72843, 0, 69799, 0, 0,
-    78735, 119165, 0, 0, 4473, 0, 72426, 0, 65347, 65346, 65345, 0, 127384,
-    0, 69802, 0, 73868, 0, 64826, 0, 0, 0, 0, 6218, 78422, 69676, 4555, 0,
-    83459, 70071, 128670, 65190, 0, 0, 65244, 0, 0, 42519, 74472, 0, 0,
-    83466, 0, 0, 0, 83468, 92581, 0, 0, 65370, 65369, 65368, 65367, 65366,
-    65365, 41086, 65363, 65362, 65361, 65360, 43410, 11323, 65357, 65356,
-    65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 69718, 0, 0, 0, 0,
-    64647, 0, 0, 4699, 126077, 0, 0, 0, 0, 0, 68074, 0, 0, 0, 128347, 0,
-    72829, 0, 69773, 121438, 0, 0, 0, 73980, 78255, 78254, 83453, 43157, 0,
-    0, 0, 7946, 12541, 0, 74615, 69780, 0, 0, 0, 0, 9005, 1225, 0, 0, 0, 0,
-    68011, 8847, 0, 0, 0, 8329, 74590, 43878, 0, 0, 0, 3127, 2595, 71040,
-    69766, 129188, 0, 41089, 0, 0, 70292, 983613, 12112, 0, 74200, 0, 8764,
-    0, 0, 0, 67273, 67272, 67271, 71044, 0, 0, 0, 71042, 67266, 67265, 0,
-    67270, 67269, 67268, 67267, 67282, 67281, 67280, 3572, 10023, 4959, 0, 0,
-    67275, 9729, 125110, 0, 67278, 67277, 0, 67276, 0, 7996, 9907, 0, 13304,
-    83392, 0, 72830, 0, 11095, 11100, 0, 83358, 83387, 10142, 0, 0, 0, 0,
-    68022, 0, 83363, 128292, 19955, 0, 83366, 69807, 125246, 70124, 0, 72230,
-    83373, 83385, 0, 0, 0, 0, 68020, 0, 0, 261, 8406, 7791, 0, 7362, 0,
-    10696, 0, 0, 9838, 118920, 0, 83477, 0, 0, 0, 6437, 68830, 83476, 0, 0,
-    74177, 0, 0, 67288, 67287, 0, 67286, 0, 83470, 0, 67289, 67283, 83471,
-    70002, 0, 0, 0, 67285, 11499, 67297, 7816, 67295, 55247, 68015, 10929,
-    67298, 0, 68017, 9642, 10912, 0, 67293, 11387, 67291, 67290, 70792, 0,
-    67715, 0, 0, 68099, 13287, 74430, 10836, 0, 75053, 69775, 0, 128746,
-    7450, 0, 0, 119648, 9697, 3606, 0, 0, 0, 0, 125029, 0, 0, 121262, 0,
-    128873, 1389, 128871, 0, 0, 0, 12941, 0, 83438, 121062, 0, 12301, 83440,
-    0, 41102, 66604, 0, 0, 0, 0, 66600, 523, 92642, 71100, 74436, 0, 0, 0,
-    8608, 83435, 72828, 128704, 0, 127402, 11307, 66707, 67301, 67300, 67299,
-    0, 67304, 67303, 0, 0, 0, 0, 127212, 5908, 0, 0, 6744, 67310, 1699,
-    67308, 67307, 67314, 67313, 6306, 67311, 983207, 72150, 69862, 3766,
-    2389, 67305, 74569, 6611, 65700, 0, 0, 0, 42386, 0, 0, 2599, 917972,
-    119131, 119049, 65717, 0, 0, 119654, 0, 0, 0, 74203, 3760, 1718, 68160,
-    0, 3776, 7335, 0, 0, 67324, 69861, 0, 69792, 0, 0, 3778, 0, 9462, 7824,
-    0, 78896, 3768, 68142, 765, 72822, 3764, 0, 0, 113822, 0, 12947, 0, 0, 0,
-    118806, 73753, 0, 0, 0, 6829, 5225, 66901, 0, 0, 0, 0, 67319, 67318,
-    3162, 67316, 67323, 67322, 67321, 67320, 0, 5353, 0, 74179, 67315, 0,
-    1010, 0, 0, 67326, 67325, 127870, 6952, 67329, 67328, 67327, 2590,
-    120036, 65552, 120034, 120039, 7183, 120037, 120038, 120027, 120028,
-    120025, 120026, 120031, 970, 120029, 74611, 120019, 120020, 120017,
-    67330, 120023, 120024, 120021, 10961, 113693, 11148, 0, 0, 0, 128448, 0,
-    113703, 64378, 0, 0, 0, 68821, 119649, 11358, 71172, 69797, 0, 11065,
-    126464, 0, 68864, 0, 5694, 120839, 66784, 0, 4325, 3047, 0, 43652,
-    120962, 93029, 69764, 0, 0, 0, 0, 5431, 6652, 0, 67753, 71460, 0, 0, 0,
-    1129, 65016, 0, 65900, 1986, 7846, 0, 8661, 75058, 0, 0, 3845, 0, 0, 0,
-    74400, 1456, 7530, 121382, 0, 0, 0, 0, 120016, 0, 0, 0, 917863, 127772,
-    119966, 0, 11002, 7026, 8145, 68216, 0, 12138, 71464, 0, 0, 0, 12323, 0,
-    917869, 0, 0, 0, 92316, 68494, 0, 0, 129384, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 42205, 0, 236, 0, 78867, 0, 0, 113784, 0, 0, 983982, 0, 0, 0, 8097, 0,
-    0, 68012, 72820, 11194, 0, 72824, 0, 127974, 0, 0, 110603, 0, 10416,
-    68070, 3872, 127508, 0, 0, 0, 0, 2838, 917867, 0, 917866, 119589, 0, 0,
-    0, 0, 11096, 83019, 10553, 83421, 0, 0, 0, 0, 0, 0, 73742, 6436, 10096,
-    0, 0, 0, 113687, 0, 4463, 68018, 0, 78074, 0, 983591, 7184, 0, 0, 0, 0,
-    0, 0, 93825, 12818, 12032, 0, 0, 0, 0, 10357, 121418, 8170, 0, 8556, 0,
-    9659, 0, 0, 0, 9556, 0, 4503, 92700, 9647, 64004, 78185, 0, 0, 64002,
-    78889, 0, 0, 118910, 0, 6438, 0, 9109, 78884, 0, 64599, 0, 68009, 0, 0,
-    2447, 0, 0, 0, 126545, 0, 119002, 0, 0, 0, 19937, 0, 1322, 0, 119204,
-    254, 0, 0, 69392, 42425, 0, 0, 65204, 42312, 0, 128519, 0, 42826, 0,
-    42464, 120567, 0, 67155, 74796, 64400, 64693, 126212, 77861, 0, 0, 67154,
-    0, 0, 0, 68008, 11785, 0, 119142, 41978, 0, 0, 43244, 10536, 0, 9901,
-    7103, 0, 7102, 71428, 120748, 3140, 0, 0, 68007, 0, 67258, 10909, 0,
-    1428, 0, 67254, 67253, 7699, 12393, 67257, 0, 67256, 67255, 0, 0, 69389,
-    0, 0, 0, 0, 0, 67153, 0, 0, 127383, 69376, 64554, 0, 3878, 0, 42352,
-    1752, 0, 0, 42506, 0, 10199, 0, 983463, 125231, 0, 0, 0, 720, 0, 0, 0,
-    68831, 0, 1464, 128339, 0, 7974, 0, 125017, 68082, 0, 0, 0, 0, 74787, 0,
-    78865, 92258, 0, 0, 78863, 0, 1302, 66288, 0, 0, 0, 67152, 0, 983611,
-    983618, 0, 0, 3995, 0, 65608, 3714, 0, 0, 67262, 67261, 67260, 67259,
-    43251, 67264, 67263, 0, 120557, 92346, 8672, 68006, 11964, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 92610, 0, 468, 0, 0, 0, 983470, 0, 0, 128544, 129397,
-    65907, 983163, 0, 0, 0, 0, 0, 983468, 41743, 0, 0, 0, 74880, 0, 121001,
-    820, 41741, 0, 120667, 0, 64684, 126992, 128604, 126082, 69934, 65177,
-    6226, 353, 43645, 0, 119612, 120738, 67700, 0, 0, 0, 0, 42457, 120276, 0,
-    120277, 1884, 129637, 42418, 113678, 41157, 0, 42305, 120279, 0, 0,
-    41151, 0, 71430, 0, 42344, 0, 0, 0, 42497, 0, 194870, 72754, 69933,
-    73703, 0, 42521, 8539, 128606, 0, 123609, 69957, 4788, 0, 68023, 0, 0,
-    983053, 0, 0, 0, 0, 41590, 0, 113754, 0, 0, 118901, 68637, 41136, 64351,
-    0, 128453, 41154, 113731, 127038, 4038, 41143, 68232, 64859, 0, 0, 0,
-    5435, 0, 6734, 41343, 127035, 0, 0, 41359, 66761, 0, 119835, 41349, 0, 0,
-    10374, 10310, 0, 0, 10254, 119836, 10278, 10262, 69858, 41363, 0, 0, 0,
-    119840, 0, 41356, 10314, 10282, 0, 10378, 0, 40976, 10266, 0, 119848,
-    40975, 0, 129554, 0, 40978, 0, 92945, 0, 0, 0, 119098, 119083, 0, 71437,
-    119854, 69936, 0, 0, 3525, 6824, 0, 0, 119858, 128451, 0, 72239, 113738,
-    0, 71424, 0, 0, 0, 0, 0, 10727, 7212, 129071, 120551, 0, 0, 0, 67156,
-    808, 7207, 42387, 0, 0, 0, 0, 0, 0, 0, 0, 9225, 121149, 0, 9145, 128060,
+    43811, 0, 128924, 0, 11062, 128748, 0, 0, 0, 69276, 2901, 7865, 0, 78354,
+    0, 78347, 0, 126123, 0, 66363, 0, 0, 0, 74967, 7414, 0, 0, 92691, 0,
+    128507, 885, 64772, 65180, 0, 71267, 852, 0, 0, 0, 78614, 121174, 129092,
+    67809, 9609, 12156, 0, 0, 43586, 11035, 10411, 0, 13268, 6710, 0, 0, 0,
+    43853, 77949, 4315, 0, 111104, 0, 43639, 43343, 0, 0, 0, 73074, 0, 65812,
+    43431, 0, 0, 0, 0, 0, 129890, 0, 0, 0, 0, 994, 125222, 127104, 127103,
+    73966, 66890, 0, 65291, 70753, 0, 0, 0, 0, 66873, 4186, 92531, 127106,
+    127105, 6718, 7330, 4406, 0, 8480, 7319, 64373, 128699, 4413, 0, 0, 3198,
+    0, 0, 92469, 111126, 0, 128591, 128681, 0, 0, 0, 101321, 73023, 742, 0,
+    2893, 78738, 0, 0, 0, 2553, 42294, 6756, 0, 73020, 8363, 0, 2993, 128381,
+    3916, 4301, 0, 1141, 42407, 0, 0, 7572, 973, 0, 125077, 0, 2415, 0, 0,
+    9640, 42333, 0, 0, 129546, 42486, 43381, 65390, 0, 69434, 1202, 0, 0, 0,
+    0, 68484, 0, 0, 64542, 3260, 0, 65388, 43502, 69904, 0, 6738, 0, 0,
+    74193, 0, 0, 0, 74641, 6312, 0, 74556, 12446, 0, 0, 128076, 8229, 1235,
+    0, 11472, 83064, 0, 0, 101366, 0, 0, 1740, 12872, 0, 985, 0, 0, 0, 12068,
+    0, 0, 101363, 0, 0, 0, 13133, 65071, 110780, 12655, 12134, 0, 92934, 0,
+    66915, 120349, 119572, 0, 93030, 41572, 0, 0, 0, 41573, 0, 3931, 0,
+    74143, 0, 127034, 0, 0, 0, 0, 83067, 0, 129303, 0, 0, 0, 0, 0, 0, 83068,
+    0, 72740, 128637, 72717, 92935, 120291, 0, 1780, 6936, 0, 0, 819, 0,
+    9694, 125228, 0, 0, 0, 0, 8343, 8342, 8345, 8344, 8346, 8338, 7523, 6922,
+    8348, 8347, 7525, 3346, 8339, 125004, 72705, 69462, 268, 0, 0, 5754, 0,
+    0, 110684, 8336, 0, 0, 0, 8337, 8341, 0, 11388, 7522, 0, 0, 0, 11090,
+    6953, 125240, 0, 74973, 120708, 0, 0, 0, 0, 0, 110782, 0, 9038, 7887, 0,
+    0, 42534, 64347, 0, 0, 67660, 120341, 0, 0, 0, 120878, 0, 0, 73999, 0,
+    64580, 0, 0, 64643, 0, 0, 74975, 0, 92227, 129052, 0, 83071, 83072,
+    83073, 119154, 0, 119153, 0, 0, 5349, 72440, 0, 917554, 7411, 0, 983220,
+    0, 0, 0, 42736, 70747, 5756, 983225, 92946, 0, 42764, 0, 0, 119529, 5752,
+    120600, 0, 0, 0, 0, 0, 78893, 0, 0, 0, 125242, 0, 0, 120331, 0, 0, 0,
+    72826, 0, 10080, 83056, 12647, 0, 0, 69252, 66882, 0, 0, 0, 0, 0, 72005,
+    72845, 0, 0, 0, 0, 0, 74213, 0, 0, 0, 0, 0, 6302, 0, 0, 0, 0, 1417,
+    983222, 0, 9452, 0, 74393, 0, 0, 110850, 0, 65391, 63789, 69251, 78659,
+    78660, 41264, 78658, 6426, 42398, 9179, 78654, 64906, 41255, 42036, 0,
+    41269, 0, 41267, 42436, 67759, 42323, 42034, 0, 0, 42475, 42033, 0, 0,
+    68916, 43948, 0, 78673, 78674, 1659, 919, 42784, 1671, 0, 6069, 9219, 0,
+    1661, 119144, 0, 92690, 10140, 9713, 78400, 0, 125236, 0, 2306, 0, 0,
+    6068, 10612, 0, 0, 121314, 92561, 41462, 0, 0, 0, 0, 0, 0, 0, 128204,
+    10635, 0, 983221, 0, 0, 0, 983231, 92251, 0, 121029, 983223, 0, 8100, 0,
+    78669, 78670, 13301, 78667, 9667, 78665, 0, 0, 11003, 9904, 0, 0, 0, 0,
+    0, 0, 78680, 78681, 78677, 78678, 0, 10313, 0, 0, 64320, 10265, 78686,
+    129404, 78684, 78685, 8945, 78683, 70750, 41, 0, 0, 0, 0, 8655, 0, 0, 0,
+    0, 0, 0, 0, 2585, 0, 65254, 3126, 0, 74136, 10957, 0, 11160, 0, 0, 0, 0,
+    0, 11408, 0, 7443, 0, 0, 6997, 68004, 0, 0, 8739, 11075, 0, 65216, 0,
+    69795, 2593, 0, 0, 0, 0, 125062, 0, 0, 0, 4411, 0, 72837, 0, 43442,
+    78799, 0, 0, 0, 66351, 0, 0, 13061, 0, 78687, 78688, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 119925, 0, 983637, 0, 0, 0, 0, 83399, 127541, 83398, 8022,
+    78808, 0, 73794, 0, 0, 83414, 119918, 0, 0, 0, 0, 0, 0, 63799, 78427,
+    12063, 78425, 78424, 0, 0, 0, 75025, 0, 297, 0, 0, 68326, 0, 78429,
+    78428, 7077, 2497, 128651, 0, 983111, 0, 0, 0, 4292, 0, 74815, 10512, 0,
+    74814, 119931, 0, 72841, 2503, 65070, 1762, 69794, 2495, 0, 71230, 94069,
+    77984, 0, 12654, 0, 1899, 0, 2507, 0, 8726, 0, 65594, 0, 71272, 8892, 0,
+    0, 0, 0, 0, 420, 0, 0, 125130, 10797, 74637, 0, 0, 0, 0, 63796, 0, 66581,
+    0, 119205, 0, 0, 194840, 0, 120788, 0, 0, 92956, 0, 0, 0, 0, 119230, 0,
+    0, 83496, 7399, 0, 66434, 42779, 0, 92220, 42197, 92543, 5380, 0, 0,
+    1155, 11365, 43126, 0, 77971, 65684, 0, 5601, 0, 42765, 78258, 0, 7987,
+    72843, 0, 69799, 0, 0, 78735, 119165, 0, 0, 4473, 0, 72426, 0, 65347,
+    65346, 65345, 0, 127384, 0, 69802, 0, 73868, 0, 64826, 0, 0, 0, 0, 6218,
+    78422, 69676, 4555, 0, 83459, 70071, 128670, 65190, 0, 0, 65244, 0, 0,
+    42519, 74472, 0, 0, 83466, 0, 0, 0, 83468, 92581, 0, 0, 65370, 65369,
+    65368, 65367, 65366, 65365, 41086, 65363, 65362, 65361, 65360, 43410,
+    11323, 65357, 65356, 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959,
+    69718, 0, 0, 0, 0, 64647, 0, 0, 4699, 126077, 0, 129940, 0, 0, 0, 68074,
+    0, 0, 0, 128347, 0, 72829, 0, 69773, 121438, 0, 0, 0, 73980, 78255,
+    78254, 83453, 43157, 0, 0, 0, 7946, 12541, 0, 74615, 69780, 0, 0, 0, 0,
+    9005, 1225, 0, 0, 0, 0, 68011, 8847, 0, 0, 0, 8329, 74590, 43878, 0, 0,
+    0, 3127, 2595, 71040, 69766, 129188, 0, 41089, 0, 0, 70292, 983613,
+    12112, 0, 74200, 0, 8764, 0, 0, 0, 67273, 67272, 67271, 71044, 0, 0, 0,
+    71042, 67266, 67265, 0, 67270, 67269, 67268, 67267, 67282, 67281, 67280,
+    3572, 10023, 4959, 0, 0, 67275, 9729, 125110, 0, 67278, 67277, 0, 67276,
+    0, 7996, 9907, 0, 13304, 83392, 0, 72830, 0, 11095, 11100, 0, 83358,
+    83387, 10142, 0, 0, 0, 0, 68022, 0, 83363, 128292, 19955, 0, 83366,
+    69807, 125246, 70124, 0, 72230, 83373, 83385, 0, 0, 0, 0, 68020, 0, 2239,
+    261, 8406, 7791, 0, 7362, 0, 10696, 0, 0, 9838, 118920, 0, 83477, 0, 0,
+    0, 6437, 68830, 83476, 0, 0, 74177, 0, 0, 67288, 67287, 0, 67286, 0,
+    83470, 0, 67289, 67283, 83471, 70002, 0, 0, 0, 67285, 11499, 67297, 7816,
+    67295, 55247, 68015, 10929, 67298, 0, 68017, 9642, 10912, 0, 67293,
+    11387, 67291, 67290, 70792, 0, 67715, 0, 0, 68099, 13287, 74430, 10836,
+    0, 75053, 69775, 0, 128746, 7450, 0, 0, 119648, 9697, 3606, 0, 0, 0, 0,
+    125029, 0, 0, 121262, 0, 128873, 1389, 128871, 0, 0, 0, 12941, 0, 83438,
+    121062, 0, 12301, 83440, 0, 41102, 66604, 72025, 0, 0, 0, 66600, 523,
+    92642, 71100, 74436, 0, 0, 0, 8608, 83435, 72828, 128704, 0, 127402,
+    11307, 66707, 67301, 67300, 67299, 0, 67304, 67303, 0, 0, 0, 0, 127212,
+    5908, 0, 0, 6744, 67310, 1699, 67308, 67307, 67314, 67313, 6306, 67311,
+    983207, 72150, 69862, 3766, 2389, 67305, 74569, 6611, 65700, 0, 0, 0,
+    42386, 0, 0, 2599, 917972, 119131, 119049, 65717, 0, 0, 119654, 0, 0, 0,
+    74203, 3760, 1718, 68160, 0, 3776, 7335, 0, 0, 67324, 69861, 0, 69792, 0,
+    0, 3778, 0, 9462, 7824, 0, 78896, 3768, 68142, 765, 72822, 3764, 0, 0,
+    113822, 129667, 12947, 0, 0, 0, 118806, 73753, 0, 0, 0, 6829, 5225,
+    66901, 0, 0, 0, 0, 67319, 67318, 3162, 67316, 67323, 67322, 67321, 67320,
+    0, 5353, 0, 74179, 67315, 0, 1010, 0, 0, 67326, 67325, 127870, 6952,
+    67329, 67328, 67327, 2590, 120036, 65552, 120034, 120039, 7183, 120037,
+    120038, 120027, 120028, 120025, 120026, 120031, 970, 120029, 74611,
+    120019, 120020, 120017, 67330, 120023, 120024, 120021, 10961, 113693,
+    11148, 0, 0, 0, 128448, 0, 113703, 64378, 0, 0, 0, 68821, 119649, 11358,
+    71172, 69797, 0, 11065, 126464, 0, 68864, 0, 5694, 120839, 66784, 0,
+    4325, 3047, 0, 43652, 120962, 93029, 69764, 0, 0, 0, 0, 5431, 6652, 0,
+    67753, 71460, 0, 0, 0, 1129, 65016, 0, 65900, 1986, 7846, 0, 8661, 75058,
+    0, 0, 3845, 0, 0, 0, 74400, 1456, 7530, 121382, 0, 0, 0, 0, 120016, 0, 0,
+    0, 917863, 127772, 119966, 0, 11002, 7026, 8145, 68216, 0, 12138, 71464,
+    0, 0, 0, 12323, 130033, 917869, 0, 0, 0, 92316, 68494, 0, 0, 129384, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 42205, 0, 236, 0, 78867, 0, 0, 113784, 0, 0,
+    983982, 0, 0, 917865, 8097, 0, 0, 68012, 72820, 11194, 0, 72824, 0,
+    127974, 0, 0, 110602, 129948, 10416, 68070, 3872, 127508, 0, 0, 0, 0,
+    2838, 917867, 0, 917866, 119589, 0, 0, 0, 0, 11096, 83019, 10553, 83421,
+    0, 0, 0, 0, 0, 0, 73742, 6436, 10096, 0, 0, 0, 113687, 0, 4463, 68018, 0,
+    78074, 0, 983591, 7184, 0, 0, 0, 0, 0, 0, 93825, 12818, 12032, 0, 0, 0,
+    0, 10357, 121418, 8170, 0, 8556, 0, 9659, 0, 0, 0, 9556, 0, 4503, 92700,
+    9647, 64004, 78185, 0, 0, 64002, 78889, 0, 0, 118910, 0, 6438, 0, 9109,
+    78884, 0, 64599, 0, 68009, 0, 0, 2447, 129863, 0, 0, 126545, 0, 119002,
+    0, 0, 0, 19937, 0, 1322, 0, 119204, 254, 0, 0, 69392, 42425, 0, 0, 65204,
+    42312, 0, 128519, 0, 42826, 0, 42464, 120567, 0, 67155, 74796, 64400,
+    64693, 126212, 77861, 0, 0, 67154, 0, 0, 0, 68008, 11785, 0, 119142,
+    41978, 0, 0, 43244, 10536, 0, 9901, 7103, 0, 7102, 71428, 120748, 3140,
+    0, 0, 68007, 0, 67258, 10909, 0, 1428, 0, 67254, 67253, 7699, 12393,
+    67257, 0, 67256, 67255, 0, 0, 69389, 0, 0, 0, 0, 0, 67153, 0, 0, 127383,
+    69376, 64554, 0, 3878, 0, 42352, 1752, 0, 0, 42506, 0, 10199, 0, 983463,
+    125231, 0, 0, 0, 720, 0, 0, 0, 68831, 0, 1464, 128339, 0, 7974, 0,
+    125017, 68082, 0, 0, 0, 0, 74787, 0, 78864, 92258, 0, 0, 78863, 0, 1302,
+    66288, 0, 0, 0, 67152, 0, 983611, 983618, 0, 0, 3995, 0, 65608, 3714, 0,
+    0, 67262, 67261, 67260, 67259, 43251, 67264, 67263, 0, 120557, 92346,
+    8672, 68006, 11964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92610, 0, 468, 0, 0,
+    0, 983470, 0, 0, 128544, 129397, 65907, 983163, 0, 0, 0, 0, 0, 983468,
+    41743, 0, 0, 0, 74880, 0, 121001, 820, 41741, 0, 120667, 0, 64684,
+    126992, 128604, 126082, 69934, 65177, 6226, 353, 43645, 0, 119612,
+    120738, 67700, 0, 0, 0, 0, 42457, 120276, 0, 120277, 1884, 129637, 42418,
+    113678, 41157, 0, 42305, 120279, 0, 0, 41151, 0, 71430, 0, 42344, 0, 0,
+    0, 42497, 0, 194870, 72754, 69933, 73703, 0, 42521, 8539, 128606, 0,
+    123609, 69957, 4788, 0, 68023, 0, 0, 983053, 0, 0, 0, 0, 41590, 0,
+    113754, 0, 0, 118901, 68637, 41136, 64351, 0, 128453, 41154, 113731,
+    127038, 4038, 41143, 68232, 64859, 0, 129910, 0, 5435, 129911, 6734,
+    41343, 127035, 0, 0, 41359, 66761, 0, 119835, 41349, 0, 129915, 10374,
+    10310, 0, 0, 10254, 119836, 10278, 10262, 69858, 41363, 0, 0, 0, 119840,
+    0, 41356, 10314, 10282, 0, 10378, 0, 40976, 10266, 0, 119848, 40975, 0,
+    129554, 0, 40978, 0, 92945, 0, 0, 0, 119098, 119083, 0, 71437, 119854,
+    69936, 0, 0, 3525, 6824, 0, 0, 119858, 128451, 0, 72239, 113738, 0,
+    71424, 0, 0, 0, 0, 0, 10727, 7212, 129071, 71957, 0, 0, 0, 67156, 808,
+    7207, 42387, 0, 0, 0, 0, 0, 0, 0, 0, 9225, 121149, 0, 9145, 128060,
     41018, 67841, 983158, 42300, 0, 3084, 983155, 125014, 41025, 6037, 0,
     194885, 0, 10290, 0, 3083, 10322, 111017, 129030, 0, 41036, 0, 0, 43321,
     65606, 0, 41032, 42388, 0, 64700, 0, 1445, 40961, 0, 0, 0, 40960, 0,
@@ -24432,588 +25239,612 @@
     128469, 0, 0, 0, 0, 0, 0, 42585, 65032, 10704, 65030, 4787, 0, 917556, 0,
     127015, 0, 128118, 0, 0, 9525, 0, 0, 68773, 0, 0, 0, 0, 40966, 0, 0,
     3998, 0, 0, 65919, 71433, 11792, 2690, 0, 42836, 127150, 41954, 194921,
-    194923, 6737, 0, 64933, 0, 3487, 194873, 71427, 72758, 65426, 72756,
+    194923, 6737, 0, 64933, 126260, 3487, 194873, 71427, 72758, 65426, 72756,
     66757, 0, 0, 41976, 9720, 74964, 11179, 41970, 0, 12116, 65024, 0,
     127912, 9048, 65028, 65027, 65026, 65025, 64757, 0, 41488, 0, 8527, 0,
-    126480, 0, 41480, 41053, 3266, 0, 0, 12093, 41466, 122881, 78642, 1519,
-    983906, 3638, 65887, 65429, 0, 0, 0, 0, 8633, 0, 0, 0, 125118, 0, 70375,
-    0, 0, 6368, 128124, 0, 70369, 8078, 0, 0, 70373, 72876, 0, 7002, 121003,
-    41430, 0, 41051, 41484, 0, 0, 41050, 8872, 0, 13099, 71445, 70371, 0,
-    6435, 72154, 11362, 0, 0, 0, 0, 41420, 0, 3625, 74915, 41409, 71441, 0,
-    0, 0, 9672, 0, 0, 43317, 0, 0, 0, 41424, 917598, 0, 0, 0, 0, 41417, 1261,
-    0, 0, 12102, 119662, 41401, 0, 127538, 129518, 0, 124943, 72765, 3275,
-    92472, 0, 0, 0, 0, 0, 0, 0, 0, 125129, 983140, 10598, 0, 128633, 6711, 0,
-    2920, 0, 0, 0, 0, 19928, 0, 0, 3917, 0, 113756, 0, 0, 66588, 128078, 0,
-    0, 113721, 113758, 0, 0, 0, 41184, 0, 232, 0, 0, 74170, 0, 0, 0, 0, 9094,
-    0, 0, 92585, 0, 1064, 0, 0, 10115, 0, 0, 0, 7862, 0, 13224, 0, 0, 66650,
-    0, 0, 72877, 1878, 0, 71434, 2911, 0, 41178, 5427, 0, 0, 0, 12617, 41174,
-    0, 67148, 67147, 0, 42413, 41167, 2406, 0, 0, 0, 0, 0, 9618, 128668, 0,
-    0, 0, 0, 41436, 9337, 126067, 0, 41456, 0, 119086, 11333, 0, 6703, 0,
-    125071, 1613, 0, 0, 0, 983191, 0, 0, 74500, 41460, 78197, 0, 0, 194899,
-    67144, 65841, 0, 121109, 74064, 111146, 111144, 120375, 0, 111122, 0,
-    111121, 64687, 111120, 42592, 3871, 0, 128305, 9111, 111163, 0, 111156,
-    120366, 121462, 11150, 111154, 111175, 111179, 0, 111168, 0, 120362,
-    41587, 70391, 0, 74322, 0, 194908, 111166, 111133, 0, 71443, 194844, 0,
-    111151, 0, 0, 7928, 111127, 111140, 41595, 0, 0, 65801, 983600, 0, 0, 0,
-    73712, 0, 41598, 3993, 121269, 1545, 40971, 121286, 72874, 0, 0, 0,
-    120767, 65286, 0, 0, 0, 0, 0, 0, 0, 5402, 0, 0, 74462, 73457, 0, 0,
-    78194, 64326, 40969, 0, 128110, 983684, 40968, 0, 983148, 0, 0, 0, 0,
-    128513, 8020, 0, 41012, 0, 0, 65805, 41006, 0, 0, 74605, 0, 118942,
-    43432, 0, 0, 92900, 0, 0, 0, 120687, 0, 92958, 0, 0, 68332, 0, 40992, 0,
-    0, 0, 0, 0, 42235, 0, 1741, 42370, 0, 0, 0, 11413, 126583, 0, 0, 128769,
-    6470, 0, 74517, 0, 0, 120651, 40984, 0, 42742, 0, 12916, 6284, 0, 41663,
-    0, 0, 68313, 72840, 70164, 41648, 0, 0, 2299, 41666, 0, 0, 2056, 41656,
-    0, 0, 71917, 42219, 0, 0, 78112, 41676, 0, 0, 0, 41670, 0, 92590, 2796,
-    0, 0, 9902, 0, 67988, 64785, 82995, 128822, 42631, 983040, 71890, 0,
-    74164, 41238, 10049, 11405, 0, 64368, 0, 120925, 0, 397, 12299, 42139, 0,
-    9590, 0, 0, 43661, 43819, 0, 6651, 3544, 0, 0, 9620, 0, 0, 0, 92229,
-    1333, 7104, 0, 6425, 0, 0, 0, 0, 0, 0, 11976, 8554, 13055, 0, 110733, 0,
-    110731, 41218, 0, 0, 128673, 1883, 0, 0, 70443, 41225, 70788, 42419,
-    983688, 129450, 0, 127896, 0, 65809, 11837, 0, 129104, 7141, 0, 0, 0, 0,
-    0, 42363, 0, 0, 0, 0, 69949, 119157, 64732, 0, 0, 126983, 0, 0, 983678,
-    7140, 42051, 0, 4164, 118799, 0, 120569, 42049, 42042, 0, 0, 0, 120637,
-    69938, 0, 42047, 0, 0, 8470, 11807, 128935, 0, 0, 194825, 74300, 126267,
-    0, 120517, 0, 0, 0, 0, 8736, 0, 42643, 72753, 0, 0, 0, 71432, 0, 93023,
-    110730, 72869, 110728, 0, 0, 0, 0, 68445, 0, 0, 2106, 0, 11273, 120986,
-    43004, 0, 82988, 0, 961, 64307, 0, 0, 0, 67711, 110615, 0, 1696, 0, 9762,
-    12105, 0, 110622, 110623, 3264, 110621, 110618, 43003, 110616, 110617, 0,
-    120359, 0, 128660, 0, 2322, 0, 70831, 11449, 128187, 42868, 0, 0, 0, 0,
-    113746, 983234, 0, 129583, 66398, 0, 0, 0, 0, 0, 111135, 119224, 0, 0,
-    64421, 0, 113739, 0, 65823, 0, 11182, 0, 0, 0, 7766, 55268, 0, 4598, 0,
-    65839, 0, 0, 0, 10851, 0, 6179, 92602, 6180, 129524, 11952, 0, 78648,
-    78651, 78646, 78647, 78644, 78645, 3801, 78643, 6176, 120580, 0, 0, 6177,
-    0, 78652, 78653, 6178, 0, 0, 0, 0, 2214, 8754, 0, 0, 2137, 0, 0, 0, 0,
-    66889, 0, 0, 0, 8974, 2308, 0, 74579, 0, 2318, 122920, 0, 8198, 0, 0, 0,
-    74307, 0, 119524, 0, 0, 6970, 0, 0, 0, 41159, 0, 120363, 6385, 0, 128403,
-    0, 0, 126258, 0, 72785, 42053, 2075, 42057, 0, 42052, 0, 0, 67651, 0,
-    9665, 0, 0, 13181, 0, 0, 69379, 0, 0, 0, 0, 73010, 0, 0, 0, 41145, 0, 0,
-    0, 41148, 0, 7594, 113686, 75033, 119090, 10869, 43458, 41146, 0, 0,
-    121456, 917630, 0, 0, 0, 0, 0, 65184, 11780, 0, 42796, 0, 69742, 0,
-    65146, 66803, 0, 0, 0, 7358, 78241, 0, 7988, 0, 0, 3271, 0, 0, 0, 0, 0,
-    0, 983103, 13070, 113736, 42044, 0, 1095, 0, 3599, 0, 0, 0, 129087,
-    66390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42043, 43232, 67656, 121014, 42046,
+    126480, 0, 41480, 41053, 3266, 0, 194876, 12093, 41466, 122881, 78642,
+    1519, 983906, 3638, 65887, 65429, 0, 0, 0, 0, 8633, 0, 0, 0, 125118, 0,
+    70375, 0, 0, 6368, 128124, 0, 70369, 8078, 0, 0, 70373, 72876, 0, 7002,
+    121003, 41430, 0, 41051, 41484, 0, 0, 41050, 8872, 0, 13099, 71445,
+    70371, 0, 6435, 72154, 11362, 0, 0, 0, 0, 41420, 0, 3625, 74915, 41409,
+    71441, 0, 0, 0, 9672, 0, 0, 43317, 0, 0, 0, 41424, 917598, 0, 0, 0, 0,
+    41417, 1261, 0, 0, 12102, 119662, 41401, 0, 127538, 129518, 0, 124943,
+    72765, 3275, 92472, 0, 0, 0, 0, 0, 0, 0, 0, 125129, 983140, 10598, 0,
+    128633, 6711, 0, 2920, 0, 0, 0, 0, 19928, 0, 0, 3917, 0, 113756, 0, 0,
+    66588, 128078, 0, 0, 113721, 113758, 983081, 0, 0, 41184, 0, 232, 0, 0,
+    74170, 0, 0, 0, 0, 9094, 0, 0, 92585, 0, 1064, 0, 0, 10115, 0, 0, 0,
+    7862, 0, 13224, 0, 0, 66650, 0, 0, 72877, 1878, 0, 71434, 2911, 0, 41178,
+    5427, 0, 0, 0, 12617, 41174, 0, 67148, 67147, 0, 42413, 41167, 2406, 0,
+    0, 0, 0, 0, 9618, 128668, 0, 0, 0, 0, 41436, 9337, 126067, 0, 41456, 0,
+    119086, 11333, 0, 6703, 0, 125071, 1613, 0, 0, 0, 983191, 0, 0, 74500,
+    41460, 78197, 0, 0, 194899, 67144, 65841, 0, 121109, 74064, 111146,
+    111144, 120375, 0, 111122, 0, 111121, 64687, 111120, 42592, 3871, 0,
+    128305, 9111, 111163, 0, 111156, 120366, 121462, 11150, 111154, 111175,
+    111179, 0, 111168, 0, 120362, 41587, 70391, 0, 74322, 0, 194908, 111166,
+    111133, 0, 71443, 194842, 0, 111151, 0, 0, 7928, 111127, 111140, 41595,
+    0, 0, 65801, 983600, 0, 0, 0, 73712, 0, 41598, 3993, 121269, 1545, 40971,
+    121286, 72874, 0, 0, 0, 120767, 65286, 0, 0, 0, 0, 0, 0, 0, 5402, 0, 0,
+    74462, 73457, 0, 0, 78194, 64326, 40969, 0, 128110, 983684, 40968, 0,
+    121139, 0, 0, 0, 0, 128513, 8020, 0, 41012, 0, 0, 65805, 41006, 0, 0,
+    74605, 0, 118942, 43432, 0, 0, 92900, 0, 0, 68671, 120687, 0, 92958, 0,
+    0, 68332, 0, 40992, 0, 0, 0, 0, 0, 42235, 0, 1741, 42370, 0, 0, 0, 11413,
+    126583, 0, 0, 128769, 6470, 0, 74517, 0, 0, 120651, 40984, 0, 42742, 0,
+    12916, 6284, 0, 41663, 0, 0, 68313, 72840, 70164, 41648, 0, 0, 2299,
+    41666, 0, 0, 2056, 41656, 0, 0, 71917, 42219, 0, 0, 78112, 41676, 0, 0,
+    0, 41670, 0, 92590, 2796, 0, 0, 9902, 0, 67988, 64785, 82995, 128822,
+    42631, 983040, 71890, 0, 74164, 41238, 10049, 11405, 0, 64368, 0, 120925,
+    0, 397, 12299, 42139, 0, 9590, 0, 0, 43661, 43819, 0, 6651, 3544, 0, 0,
+    9620, 0, 0, 0, 92229, 1333, 7104, 0, 6425, 0, 0, 0, 0, 0, 0, 11976, 8554,
+    13055, 0, 110733, 0, 110731, 41218, 0, 0, 128673, 1883, 0, 0, 70443,
+    41225, 70788, 42419, 983688, 129450, 0, 127896, 0, 65809, 11837, 0,
+    129104, 7141, 0, 0, 0, 0, 0, 42363, 0, 0, 0, 0, 69949, 119157, 64732, 0,
+    0, 126983, 0, 0, 983678, 7140, 42051, 0, 4164, 118799, 0, 120569, 42049,
+    42042, 0, 0, 0, 120637, 69938, 0, 42047, 0, 0, 8470, 11807, 128935, 0, 0,
+    194825, 74300, 126267, 0, 120517, 0, 0, 0, 0, 8736, 0, 42643, 72753,
+    129925, 0, 0, 71432, 0, 93023, 110730, 72869, 110728, 0, 0, 0, 0, 68445,
+    0, 0, 2106, 0, 11273, 120986, 43004, 0, 82988, 0, 961, 64307, 0, 0, 0,
+    67711, 110615, 0, 1696, 0, 9762, 12105, 0, 110622, 110623, 3264, 110621,
+    110618, 43003, 110616, 110617, 0, 120359, 0, 128660, 0, 2322, 0, 70831,
+    11449, 128187, 42868, 0, 0, 0, 0, 113746, 983234, 0, 129583, 66398, 0, 0,
+    0, 0, 0, 111135, 119224, 0, 0, 64421, 0, 113739, 0, 65823, 0, 11182, 0,
+    0, 0, 7766, 55268, 0, 4598, 0, 65839, 0, 0, 0, 10851, 0, 6179, 92602,
+    6180, 129524, 11952, 0, 78648, 78651, 78646, 78647, 78644, 78645, 3801,
+    78643, 6176, 120580, 0, 0, 6177, 0, 78652, 78653, 6178, 0, 0, 0, 0, 2214,
+    8754, 0, 0, 2137, 0, 0, 0, 0, 66889, 0, 0, 0, 8974, 2308, 0, 74579, 0,
+    2318, 122920, 0, 8198, 0, 0, 0, 74307, 0, 119524, 0, 0, 6970, 0, 0, 0,
+    41159, 0, 120363, 6385, 0, 128403, 0, 0, 126258, 0, 72785, 42053, 2075,
+    42057, 0, 42052, 0, 0, 67651, 0, 9665, 0, 0, 13181, 0, 0, 69379, 0, 0, 0,
+    0, 73010, 0, 0, 0, 41145, 0, 0, 0, 41148, 0, 7594, 113686, 75033, 119090,
+    10869, 43458, 41146, 0, 0, 121456, 917630, 0, 0, 0, 0, 0, 65184, 11780,
+    0, 42796, 0, 69742, 0, 65146, 66803, 0, 0, 0, 7358, 78241, 0, 7988,
+    101371, 101370, 3271, 101372, 0, 69281, 0, 0, 0, 101369, 13070, 113736,
+    42044, 101365, 1095, 101367, 3599, 101361, 101364, 101157, 129087, 66390,
+    101360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42043, 43232, 67656, 121014, 42046,
     64355, 4036, 123601, 0, 0, 983062, 0, 11954, 0, 41191, 12986, 0, 194854,
-    65441, 0, 72202, 0, 129338, 0, 0, 0, 12834, 0, 0, 0, 0, 0, 0, 0, 41190,
-    0, 0, 4575, 41193, 0, 429, 119174, 124931, 194859, 0, 65792, 128754,
-    78509, 0, 128866, 0, 0, 0, 66786, 0, 194862, 10590, 0, 0, 0, 0, 0, 0,
-    6247, 10214, 65126, 68253, 0, 0, 0, 983680, 1617, 8050, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 6352, 0, 0, 0, 0, 0, 0, 0, 0, 92335, 0, 0, 42926, 0, 0, 0,
-    8689, 78750, 70067, 42896, 74147, 3559, 0, 0, 74526, 65850, 12327, 72763,
-    119028, 0, 0, 72761, 0, 78903, 0, 0, 0, 0, 70079, 72751, 0, 12153, 0, 0,
-    120654, 0, 0, 0, 0, 0, 0, 681, 129406, 703, 983461, 3272, 0, 0, 70077, 0,
-    0, 70514, 78902, 92532, 71436, 42238, 124930, 3276, 0, 0, 65928, 0, 0,
-    128949, 0, 0, 0, 78813, 78814, 3262, 78811, 42711, 0, 0, 0, 0, 92746,
-    9995, 1655, 70131, 78818, 78815, 12479, 0, 0, 0, 70513, 42797, 0, 0,
-    128371, 43112, 0, 43488, 0, 0, 0, 42684, 0, 0, 0, 0, 0, 128308, 0, 0, 0,
-    0, 0, 0, 11031, 0, 0, 0, 70386, 10348, 10412, 0, 0, 74329, 0, 0, 0,
-    129026, 0, 0, 0, 8810, 0, 686, 0, 0, 0, 0, 0, 110709, 0, 0, 12040, 0, 0,
+    65441, 0, 72202, 0, 129338, 0, 101353, 101352, 12834, 0, 101349, 101348,
+    101351, 101350, 101345, 101344, 41190, 101346, 129693, 4575, 41193, 0,
+    429, 119174, 124931, 194859, 0, 65792, 128754, 78509, 0, 128866, 0, 0, 0,
+    66786, 0, 194862, 10590, 0, 0, 0, 0, 0, 0, 6247, 10214, 65126, 68253, 0,
+    0, 0, 983680, 1617, 8050, 0, 0, 0, 101358, 101357, 0, 101359, 101354, 0,
+    101356, 6352, 0, 0, 0, 0, 0, 0, 0, 0, 92335, 0, 0, 42926, 0, 0, 0, 8689,
+    78750, 70067, 42896, 74147, 3559, 101327, 0, 74526, 65850, 12327, 72763,
+    101325, 0, 0, 72761, 0, 78903, 0, 0, 0, 0, 70079, 72751, 0, 12153,
+    101340, 101343, 101342, 71940, 0, 101339, 101338, 0, 0, 681, 129406, 703,
+    101335, 3272, 101337, 101332, 70077, 101334, 101333, 70514, 78902, 92532,
+    71436, 42238, 124930, 3276, 0, 101311, 65928, 0, 0, 101307, 101306,
+    101309, 101308, 78813, 78814, 3262, 78811, 42711, 101305, 0, 0, 101302,
+    92746, 9995, 1655, 70131, 78818, 78815, 12479, 0, 0, 101296, 70513,
+    42797, 0, 0, 128371, 43112, 101318, 43488, 101320, 101315, 101314, 42684,
+    101316, 0, 0, 101313, 101312, 128308, 0, 0, 0, 0, 0, 0, 11031, 0, 0, 0,
+    70386, 10348, 10412, 0, 0, 74329, 0, 0, 0, 101285, 101284, 101287,
+    101286, 8810, 101280, 686, 101282, 0, 0, 0, 0, 110709, 0, 0, 12040, 0, 0,
     65118, 110704, 0, 118891, 110599, 0, 110598, 0, 120543, 983660, 0, 65455,
     74413, 94097, 0, 119129, 0, 0, 0, 78776, 0, 64467, 10300, 10161, 10396,
-    0, 0, 0, 0, 78773, 0, 0, 0, 1458, 0, 0, 72429, 65120, 11479, 0, 0, 6350,
-    0, 0, 71473, 1061, 69787, 9115, 43111, 0, 0, 0, 0, 983960, 0, 120907,
-    1045, 0, 73913, 983564, 0, 0, 0, 0, 0, 0, 8486, 0, 0, 0, 4362, 0, 0,
-    93054, 1025, 0, 0, 0, 0, 0, 92328, 128206, 0, 1774, 0, 122913, 0, 0, 0,
-    11207, 0, 0, 3988, 0, 0, 983048, 0, 0, 8564, 983958, 0, 0, 0, 0, 0, 0,
-    66513, 6256, 0, 579, 55218, 0, 0, 0, 127337, 0, 11814, 0, 4488, 128716,
-    127336, 0, 10444, 118846, 78238, 0, 0, 127331, 4487, 127849, 42832, 1032,
-    0, 43450, 0, 70155, 0, 614, 0, 127325, 0, 0, 128466, 0, 127323, 0,
-    127322, 0, 0, 0, 1050, 7549, 127319, 0, 9314, 0, 0, 0, 0, 0, 70434,
-    127314, 12527, 66504, 0, 0, 0, 0, 64333, 127312, 128547, 92594, 0, 0, 0,
-    129316, 0, 124960, 10360, 6746, 0, 0, 0, 0, 13085, 9233, 0, 0, 0, 0, 0,
-    0, 92766, 0, 121114, 983925, 74212, 42819, 10910, 0, 68044, 9896, 0, 0,
-    120915, 0, 0, 7970, 0, 0, 0, 0, 113699, 9849, 0, 122910, 0, 0, 10487,
-    69714, 0, 10103, 0, 4769, 0, 0, 0, 2283, 0, 0, 74785, 0, 0, 0, 110595,
-    110596, 0, 110594, 64565, 4773, 0, 0, 0, 4770, 0, 0, 0, 65457, 69441, 0,
-    0, 127338, 983593, 4774, 0, 68497, 2259, 0, 0, 10215, 0, 0, 0, 0, 0,
-    74776, 92160, 4768, 0, 0, 4099, 0, 110699, 110700, 110697, 2225, 0, 0, 0,
-    0, 125217, 11255, 42814, 880, 0, 0, 0, 0, 0, 67756, 65246, 0, 0, 129463,
-    7095, 0, 0, 0, 0, 0, 0, 2427, 0, 7093, 0, 11585, 0, 9962, 0, 12223, 0,
-    78211, 1434, 42939, 0, 11573, 0, 0, 0, 121257, 0, 0, 0, 0, 74437, 0,
-    113711, 917596, 0, 8740, 0, 3782, 64331, 0, 65167, 1014, 0, 0, 0, 10835,
-    0, 0, 0, 0, 0, 0, 118824, 7302, 0, 67707, 0, 1150, 10547, 0, 0, 68427, 0,
-    0, 0, 0, 118788, 0, 0, 0, 42257, 8010, 0, 0, 0, 9643, 0, 0, 12864, 0, 0,
-    0, 0, 0, 0, 0, 0, 1426, 68217, 0, 68447, 0, 0, 0, 0, 73701, 0, 0, 0,
-    65383, 0, 0, 0, 0, 0, 0, 43196, 43194, 92549, 10744, 0, 990, 93772, 0, 0,
-    0, 0, 0, 66470, 0, 0, 0, 3945, 0, 0, 0, 0, 0, 127546, 127746, 1020,
-    73763, 92257, 0, 0, 64748, 0, 0, 10205, 0, 0, 10016, 0, 74051, 0, 43242,
-    125096, 2667, 0, 125037, 0, 9911, 0, 0, 10097, 0, 0, 0, 118836, 0, 0, 0,
-    0, 68889, 10159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983338, 92291, 0, 127973,
-    72882, 0, 1041, 127182, 6354, 0, 65364, 0, 0, 0, 72884, 0, 128477, 0,
-    65906, 127819, 72883, 0, 128470, 5375, 72881, 0, 8215, 0, 10074, 0, 0, 0,
-    69899, 0, 0, 121426, 41382, 0, 0, 5173, 65348, 527, 0, 0, 0, 128250, 0,
-    0, 0, 0, 0, 0, 42695, 0, 42250, 0, 11187, 113695, 0, 1568, 66806, 0, 0,
-    113705, 0, 0, 129487, 0, 0, 128839, 9069, 6144, 0, 0, 0, 0, 66783, 0,
-    74027, 118934, 66787, 74580, 0, 110790, 6364, 0, 66794, 43508, 0, 92612,
-    0, 0, 0, 0, 128405, 66449, 0, 0, 0, 0, 70714, 0, 70716, 0, 1044, 42411,
-    0, 0, 0, 0, 43239, 0, 0, 0, 0, 42450, 0, 0, 68479, 119237, 0, 0, 0, 0, 0,
-    69956, 11537, 0, 121206, 0, 0, 0, 0, 1057, 566, 0, 0, 10907, 42274,
-    43464, 0, 0, 0, 78472, 71207, 42636, 0, 123603, 0, 0, 0, 64659, 0,
-    127749, 0, 6357, 6362, 0, 0, 2216, 9090, 0, 0, 0, 0, 68227, 0, 0, 0, 0,
-    1053, 12830, 0, 0, 0, 1052, 1051, 459, 1060, 0, 66479, 0, 0, 0, 128061,
-    42490, 689, 6508, 4163, 42298, 8639, 983333, 4246, 0, 43514, 42362, 0,
-    42337, 64596, 0, 0, 0, 0, 0, 6359, 0, 43471, 0, 0, 0, 127274, 0, 6358,
-    6361, 1926, 6356, 0, 7898, 0, 10935, 0, 127972, 121285, 0, 43685, 0, 0,
-    42910, 0, 8693, 0, 0, 44010, 0, 120991, 121454, 0, 0, 0, 0, 129514, 0, 0,
-    0, 0, 73947, 0, 129361, 92412, 0, 66477, 0, 0, 0, 43854, 71913, 0, 0, 0,
-    0, 72227, 65899, 92275, 0, 0, 0, 68887, 0, 71057, 0, 0, 0, 0, 119183,
-    2923, 10853, 0, 0, 0, 0, 72864, 0, 72773, 72772, 0, 120801, 65251, 0,
-    68228, 0, 128548, 0, 0, 5370, 70465, 2931, 73848, 0, 10188, 0, 118848, 0,
-    983923, 0, 0, 0, 72212, 0, 10844, 121016, 128195, 92424, 0, 0, 0, 286, 0,
-    1062, 0, 0, 0, 7395, 0, 1070, 128993, 0, 6095, 0, 0, 0, 127796, 126465,
-    64497, 0, 0, 0, 0, 70054, 8189, 78272, 0, 0, 0, 0, 0, 113783, 42102,
-    78276, 0, 0, 42101, 0, 78402, 67427, 33, 67425, 67424, 10824, 67430,
-    67429, 67428, 427, 64723, 0, 0, 0, 0, 1031, 0, 0, 42104, 0, 0, 2328, 0,
-    1071, 42899, 128486, 0, 7673, 0, 0, 1047, 0, 0, 42908, 0, 0, 10651, 0, 0,
-    0, 72433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13216, 0, 69716, 0, 0, 0,
-    0, 0, 92411, 69654, 0, 0, 0, 2761, 194834, 0, 0, 0, 0, 8643, 0, 0, 94021,
-    2757, 11067, 0, 74498, 8910, 10689, 0, 0, 0, 71173, 0, 9196, 71214, 0, 0,
-    0, 0, 118911, 0, 0, 0, 0, 0, 0, 0, 0, 68130, 119616, 0, 0, 42477, 0, 0,
-    4495, 0, 0, 0, 0, 70080, 10992, 0, 0, 0, 0, 9318, 0, 6002, 0, 73808, 0,
-    92601, 42249, 7639, 43995, 0, 0, 5454, 0, 0, 0, 0, 0, 0, 0, 121189, 0,
-    119173, 0, 9704, 120686, 0, 78436, 78435, 11204, 0, 0, 1731, 0, 92937, 0,
-    67990, 0, 0, 0, 126576, 127018, 0, 55265, 0, 0, 0, 0, 127257, 73826, 0,
-    3840, 0, 41432, 0, 0, 68430, 0, 43253, 128284, 0, 3371, 92936, 0, 0,
-    1479, 0, 0, 1109, 77997, 0, 129154, 0, 92782, 0, 0, 8868, 399, 67978,
-    74842, 0, 0, 194839, 0, 551, 0, 10156, 0, 92572, 0, 2544, 65074, 0, 0, 0,
-    0, 0, 0, 0, 128713, 0, 0, 74268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68045, 0,
-    0, 0, 3447, 0, 0, 121414, 2549, 110818, 0, 0, 43564, 8946, 0, 74411,
-    66864, 0, 70480, 7980, 0, 113698, 0, 119653, 66489, 0, 64695, 128063, 0,
-    0, 0, 0, 0, 0, 43452, 0, 92993, 0, 10919, 0, 67810, 0, 0, 0, 0, 6450,
-    10055, 0, 0, 0, 0, 42720, 0, 9626, 0, 128055, 74447, 0, 125127, 92573, 0,
-    0, 0, 119075, 0, 0, 66486, 0, 0, 0, 0, 0, 0, 75028, 983864, 74839, 0, 0,
-    0, 0, 0, 55286, 0, 1055, 917628, 0, 0, 0, 70516, 12146, 0, 73956, 66488,
-    0, 0, 0, 0, 0, 0, 42518, 0, 0, 0, 7407, 74978, 0, 0, 0, 0, 0, 0, 0,
-    10231, 0, 66626, 0, 0, 92951, 0, 65927, 0, 0, 69696, 0, 92389, 0, 0, 0,
-    68095, 92950, 0, 10555, 0, 0, 9091, 10798, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    43222, 0, 74982, 0, 0, 120952, 0, 0, 2992, 7826, 74321, 0, 125103, 74981,
-    92628, 0, 0, 128289, 128203, 4361, 129597, 1306, 78770, 1497, 983628, 0,
-    0, 0, 8248, 0, 127253, 7973, 128706, 0, 0, 73122, 983930, 0, 0, 2963,
-    120653, 0, 128554, 0, 0, 64258, 0, 0, 69677, 74983, 65103, 0, 0, 42625,
-    0, 0, 0, 0, 64905, 0, 9512, 0, 119076, 6443, 983262, 0, 9135, 0, 0,
+    0, 0, 0, 0, 78773, 101294, 101293, 0, 1458, 101290, 0, 72429, 65120,
+    11479, 0, 0, 6350, 101289, 101288, 71473, 1061, 69787, 9115, 43111, 0, 0,
+    0, 0, 983960, 0, 120907, 1045, 0, 73913, 983564, 0, 0, 0, 0, 0, 0, 8486,
+    0, 0, 0, 4362, 0, 0, 93054, 1025, 0, 0, 0, 0, 0, 92328, 128206, 0, 1774,
+    0, 122913, 0, 0, 0, 11207, 0, 0, 3988, 0, 0, 983048, 0, 0, 8564, 983958,
+    0, 0, 0, 0, 0, 0, 66513, 6256, 0, 579, 55218, 0, 0, 0, 127337, 0, 11814,
+    0, 4488, 128716, 127336, 0, 10444, 118846, 78238, 0, 0, 127331, 4487,
+    127849, 42832, 1032, 0, 43450, 0, 70155, 0, 614, 0, 127325, 0, 0, 128466,
+    0, 127323, 0, 127322, 0, 0, 0, 1050, 7549, 127319, 0, 9314, 0, 0, 0, 0,
+    0, 70434, 127314, 12527, 66504, 0, 0, 0, 0, 64333, 127312, 128547, 92594,
+    0, 0, 0, 129316, 0, 124960, 10360, 6746, 0, 0, 0, 0, 13085, 9233, 0, 0,
+    0, 0, 0, 0, 92766, 0, 121114, 983925, 74212, 42819, 10910, 0, 68044,
+    9896, 0, 0, 120915, 0, 0, 7970, 0, 0, 0, 0, 113699, 9849, 0, 122910, 0,
+    0, 10487, 69714, 0, 10103, 0, 4769, 0, 129967, 0, 2283, 0, 0, 74785, 0,
+    0, 0, 110595, 110596, 0, 110594, 64565, 4773, 0, 0, 0, 4770, 0, 0, 0,
+    65457, 69441, 0, 0, 127338, 983593, 4774, 0, 68497, 2259, 0, 0, 10215, 0,
+    0, 0, 0, 0, 74776, 92160, 4768, 0, 0, 4099, 0, 110699, 110700, 110697,
+    2225, 0, 0, 0, 0, 125217, 11255, 42814, 880, 0, 0, 0, 0, 0, 67756, 65246,
+    0, 0, 129463, 7095, 0, 0, 0, 0, 0, 0, 2427, 0, 7093, 0, 11585, 0, 9962,
+    0, 12223, 0, 78211, 1434, 42939, 0, 11573, 0, 0, 0, 121257, 0, 0, 0, 0,
+    74437, 0, 113711, 917596, 0, 8740, 0, 3782, 64331, 0, 65167, 1014, 0, 0,
+    0, 10835, 129987, 0, 0, 0, 0, 0, 118824, 7302, 0, 67707, 0, 1150, 10547,
+    0, 0, 68427, 0, 0, 0, 0, 118788, 0, 0, 0, 42257, 8010, 0, 0, 0, 9643, 0,
+    0, 12864, 0, 0, 0, 0, 0, 0, 0, 0, 1426, 68217, 0, 68447, 129971, 0, 0, 0,
+    73701, 0, 0, 0, 65383, 0, 0, 0, 0, 0, 0, 43196, 43194, 92549, 10744, 0,
+    990, 93772, 0, 0, 0, 0, 0, 66470, 0, 0, 0, 3945, 0, 0, 0, 130039, 0,
+    127546, 127746, 1020, 73763, 92257, 0, 0, 64748, 0, 0, 10205, 0, 0,
+    10016, 0, 74051, 0, 43242, 125096, 2667, 0, 125037, 0, 9911, 0, 0, 10097,
+    0, 0, 0, 118836, 0, 0, 0, 0, 68889, 10159, 113759, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 983338, 92291, 0, 127973, 72882, 0, 1041, 127182, 6354, 0, 65364,
+    0, 0, 0, 72884, 0, 128477, 0, 65906, 127819, 72883, 0, 128470, 5375,
+    72881, 0, 8215, 0, 10074, 0, 0, 0, 69899, 0, 0, 121426, 41382, 0, 0,
+    5173, 65348, 527, 0, 0, 0, 128250, 0, 0, 0, 0, 0, 0, 42695, 0, 42250, 0,
+    11187, 113695, 0, 1568, 66806, 0, 0, 113705, 0, 0, 129487, 0, 0, 128839,
+    9069, 6144, 0, 0, 0, 0, 66783, 0, 74027, 118934, 66787, 74580, 0, 110790,
+    6364, 0, 66794, 43508, 0, 92612, 0, 0, 0, 0, 128405, 66449, 0, 0, 0, 0,
+    70714, 0, 70716, 0, 1044, 42411, 0, 0, 0, 0, 43239, 0, 0, 0, 0, 42450, 0,
+    0, 68479, 119237, 0, 0, 0, 0, 0, 69956, 11537, 0, 121206, 0, 0, 0, 0,
+    1057, 566, 0, 0, 10907, 42274, 43464, 0, 0, 0, 78472, 71207, 42636, 0,
+    123603, 0, 0, 121171, 64659, 0, 127749, 0, 6357, 6362, 0, 0, 2216, 9090,
+    0, 0, 0, 0, 68227, 0, 0, 0, 0, 1053, 12830, 0, 0, 0, 1052, 1051, 459,
+    1060, 0, 66479, 0, 0, 0, 128061, 42490, 689, 6508, 4163, 42298, 8639,
+    983333, 4246, 0, 43514, 42362, 0, 42337, 64596, 0, 0, 0, 0, 0, 6359, 0,
+    43471, 0, 0, 0, 127274, 0, 6358, 6361, 1926, 6356, 0, 7898, 0, 10935, 0,
+    127972, 121285, 0, 43685, 0, 0, 42910, 0, 8693, 0, 0, 44010, 0, 120991,
+    121454, 0, 0, 0, 0, 129514, 0, 0, 0, 0, 73947, 0, 129361, 92412, 0,
+    66477, 0, 0, 0, 43854, 71913, 0, 0, 0, 0, 72227, 65899, 92275, 0, 0, 0,
+    68887, 0, 71057, 0, 0, 0, 0, 119183, 2923, 10853, 0, 0, 0, 0, 72864, 0,
+    72773, 72772, 0, 120801, 65251, 0, 68228, 0, 128548, 0, 0, 5370, 70465,
+    2931, 73848, 0, 10188, 0, 118848, 0, 983923, 0, 0, 0, 72212, 0, 10844,
+    121016, 128195, 92424, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 7395, 0, 1070,
+    128993, 0, 6095, 0, 0, 0, 127796, 126465, 64497, 0, 0, 0, 0, 70054, 8189,
+    78272, 0, 0, 0, 0, 0, 113783, 42102, 78276, 0, 0, 42101, 0, 78402, 67427,
+    33, 67425, 67424, 10824, 67430, 67429, 67428, 427, 64723, 0, 0, 0, 0,
+    1031, 0, 0, 42104, 0, 0, 2328, 0, 1071, 42899, 128486, 0, 7673, 0, 0,
+    1047, 0, 0, 42908, 0, 0, 10651, 0, 0, 0, 72433, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 13216, 0, 69716, 0, 0, 0, 0, 0, 92411, 69654, 0, 0, 129904,
+    2761, 129909, 0, 0, 0, 0, 8643, 0, 0, 94021, 2757, 11067, 0, 74498, 8910,
+    10689, 0, 0, 0, 71173, 0, 9196, 71214, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0,
+    0, 0, 0, 68130, 119616, 0, 0, 42477, 0, 0, 4495, 0, 0, 0, 0, 70080,
+    10992, 0, 0, 0, 0, 9318, 0, 6002, 0, 73808, 0, 92601, 42249, 7639, 43995,
+    0, 0, 5454, 0, 0, 0, 0, 0, 0, 0, 121189, 0, 119173, 0, 9704, 120686, 0,
+    78436, 78435, 11204, 0, 0, 1731, 0, 92937, 0, 67990, 0, 0, 0, 126576,
+    127018, 71951, 55265, 0, 0, 0, 0, 127257, 73826, 0, 3840, 0, 41432, 0, 0,
+    68430, 0, 43253, 128284, 0, 3371, 92936, 0, 0, 1479, 69282, 0, 1109,
+    77997, 0, 129154, 0, 92782, 0, 0, 8868, 399, 67978, 74842, 0, 0, 194839,
+    0, 551, 0, 10156, 0, 92572, 0, 2544, 65074, 0, 0, 0, 0, 0, 0, 0, 128713,
+    0, 0, 74268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68045, 0, 0, 0, 3447, 0, 0,
+    121414, 2549, 110818, 0, 0, 43564, 8946, 0, 74411, 66864, 0, 70480, 7980,
+    0, 113698, 0, 119653, 66489, 0, 64695, 128063, 0, 0, 0, 0, 0, 0, 43452,
+    0, 92993, 0, 10919, 0, 67810, 0, 0, 0, 0, 6450, 10055, 0, 0, 0, 0, 42720,
+    0, 9626, 0, 128055, 74447, 0, 125127, 92573, 0, 0, 0, 119075, 0, 0,
+    66486, 0, 0, 0, 0, 0, 0, 75028, 983864, 74839, 0, 0, 0, 0, 0, 55286, 0,
+    1055, 917628, 0, 0, 0, 70516, 12146, 0, 73956, 66488, 0, 0, 0, 0, 0, 0,
+    42518, 0, 0, 0, 7407, 74978, 0, 0, 0, 0, 0, 0, 0, 10231, 0, 66626, 0, 0,
+    92951, 0, 65927, 0, 0, 69696, 0, 92389, 0, 0, 0, 68095, 92950, 0, 10555,
+    0, 0, 9091, 10798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43222, 0, 74982, 0, 0,
+    120952, 0, 0, 2992, 7826, 74321, 0, 125103, 74981, 92628, 0, 129903,
+    128289, 128203, 4361, 129597, 1306, 78770, 1497, 983628, 0, 0, 0, 8248,
+    0, 127253, 7973, 128706, 0, 0, 73122, 983930, 0, 0, 2963, 120653, 0,
+    128554, 0, 0, 64258, 0, 0, 69677, 74983, 65103, 0, 125008, 42625, 0,
+    72022, 0, 0, 64905, 0, 9512, 0, 119076, 6443, 983262, 0, 9135, 0, 0,
     123202, 0, 0, 983863, 93788, 0, 0, 0, 93767, 64256, 0, 11669, 0, 0, 4524,
     0, 129182, 128390, 0, 74266, 0, 0, 0, 70119, 78410, 69809, 121031, 55219,
     69815, 93765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2986, 0, 93763, 3437, 0,
-    6203, 4247, 0, 11920, 8274, 68240, 0, 1657, 0, 121276, 0, 0, 2954, 43506,
-    42837, 0, 0, 71179, 0, 0, 0, 66476, 68450, 0, 0, 0, 43362, 983134,
+    6203, 4247, 0, 11920, 8274, 68240, 129694, 1657, 0, 121276, 0, 0, 2954,
+    43506, 42837, 0, 0, 71179, 0, 0, 0, 66476, 68450, 0, 0, 0, 43362, 983134,
     129596, 11705, 0, 0, 0, 127354, 0, 11710, 0, 0, 0, 0, 74429, 0, 0, 1058,
-    0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 118972, 0, 65322, 0, 6441, 0, 0, 2547,
-    66484, 43634, 0, 5871, 0, 0, 0, 0, 0, 0, 71204, 0, 0, 1865, 0, 0, 69950,
-    0, 0, 73713, 0, 71199, 65826, 2069, 0, 119092, 43999, 2997, 0, 126588, 0,
-    65319, 0, 12316, 0, 0, 123630, 8776, 0, 0, 66294, 13130, 0, 71191,
-    126625, 0, 10030, 11709, 12364, 983834, 0, 11704, 0, 0, 68672, 0, 0, 0,
-    0, 11706, 9710, 0, 82985, 0, 413, 65623, 0, 0, 0, 74446, 0, 1042, 0,
-    128378, 12171, 119240, 0, 0, 4984, 0, 708, 11391, 0, 0, 0, 983911, 1308,
-    0, 3673, 810, 0, 120933, 0, 0, 0, 1917, 3000, 0, 0, 0, 65628, 66387,
-    74470, 0, 0, 0, 10027, 0, 0, 0, 0, 128831, 983167, 2980, 755, 0, 0,
-    65622, 0, 121012, 7277, 121022, 0, 0, 0, 0, 8730, 0, 0, 0, 7274, 119250,
-    0, 7275, 0, 935, 0, 0, 377, 42325, 121103, 0, 0, 127075, 0, 0, 0, 74911,
-    2417, 0, 0, 19912, 0, 0, 0, 0, 0, 0, 0, 7248, 0, 0, 1781, 5496, 3627, 62,
-    1649, 0, 964, 0, 0, 0, 0, 92897, 0, 0, 127364, 0, 43689, 127911, 66287,
-    78812, 64389, 66575, 0, 73041, 0, 0, 0, 7677, 2991, 0, 0, 0, 0, 72201, 0,
+    129555, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 118972, 0, 65322, 0, 6441, 0, 0,
+    2547, 66484, 43634, 0, 5871, 0, 0, 0, 0, 0, 0, 71204, 0, 0, 1865, 0, 0,
+    69950, 0, 93021, 73713, 0, 71199, 65826, 2069, 0, 119092, 43999, 2997, 0,
+    126588, 0, 65319, 0, 12316, 0, 0, 123630, 8776, 0, 0, 66294, 13130, 0,
+    71191, 126625, 0, 10030, 11709, 12364, 983834, 0, 11704, 0, 0, 68672, 0,
+    0, 0, 0, 11706, 9710, 0, 82985, 0, 413, 65623, 0, 0, 0, 74446, 0, 1042,
+    0, 128378, 12171, 119240, 0, 69384, 4984, 0, 708, 11391, 0, 0, 0, 983911,
+    1308, 0, 3673, 810, 0, 120933, 0, 0, 0, 1917, 3000, 0, 0, 0, 65628,
+    66387, 74470, 0, 0, 0, 10027, 0, 0, 0, 0, 128831, 983167, 2980, 755, 0,
+    0, 65622, 0, 121012, 7277, 121022, 0, 0, 0, 0, 8730, 0, 0, 0, 7274,
+    119250, 0, 7275, 0, 935, 0, 0, 377, 42325, 121103, 0, 101133, 101132,
+    101135, 101134, 0, 74911, 2417, 101130, 0, 19912, 0, 0, 101128, 101127,
+    0, 101129, 101124, 7248, 101126, 101125, 1781, 5496, 3627, 62, 1649, 0,
+    964, 0, 0, 0, 0, 92897, 0, 0, 127364, 0, 43689, 127911, 66287, 78812,
+    64389, 66575, 0, 73041, 0, 129687, 0, 7677, 2991, 0, 0, 0, 0, 72201, 0,
     11341, 127049, 0, 65625, 9714, 11692, 0, 0, 120850, 6478, 10195, 43673,
-    65237, 6241, 0, 0, 0, 6238, 0, 0, 0, 4409, 0, 0, 67170, 0, 0, 0, 94047,
-    6237, 5461, 66851, 9176, 92882, 121341, 65231, 0, 0, 121182, 128468, 0,
-    44018, 0, 64765, 0, 0, 0, 5685, 0, 2461, 0, 7091, 0, 0, 0, 68163, 0,
-    73030, 0, 0, 73928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68506, 0, 0, 0, 0, 0,
-    2542, 0, 0, 0, 128176, 5776, 0, 0, 0, 0, 0, 11987, 0, 0, 75036, 68744, 0,
-    0, 10039, 42828, 0, 0, 0, 0, 0, 10721, 67664, 43433, 0, 0, 41875, 0,
-    41870, 266, 129066, 0, 41873, 71271, 0, 0, 0, 0, 0, 0, 41871, 66186,
-    3734, 7734, 43683, 8750, 110600, 66011, 92899, 0, 127937, 0, 0, 10572, 0,
-    42906, 0, 64349, 7287, 0, 0, 0, 0, 11167, 69220, 0, 43429, 0, 1697, 0, 0,
-    68633, 7286, 0, 128738, 10031, 78754, 0, 68645, 8620, 0, 42162, 0, 0,
-    7285, 0, 119577, 0, 66842, 43677, 41583, 0, 65799, 129332, 0, 0, 0, 0,
-    110806, 0, 3609, 0, 129448, 0, 125116, 126254, 128108, 73948, 0, 0, 0, 0,
-    129189, 42732, 92699, 74984, 68620, 11691, 74985, 0, 0, 0, 0, 0, 6348,
-    243, 74075, 0, 0, 92309, 123585, 0, 0, 10648, 8538, 43687, 0, 0, 0,
-    70515, 0, 118954, 92886, 13307, 129573, 92891, 0, 120770, 983831, 0, 0,
-    0, 0, 214, 0, 0, 0, 65893, 0, 120488, 128386, 0, 92893, 0, 2603, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 1016, 0, 0, 0, 3885, 92, 65456, 64608,
-    0, 0, 0, 70656, 113742, 0, 0, 0, 128128, 983838, 0, 0, 6791, 983842,
-    127960, 0, 0, 0, 118976, 0, 7328, 92358, 0, 7995, 8759, 43421, 0, 68029,
-    0, 0, 125272, 0, 3197, 0, 0, 0, 983150, 0, 11595, 0, 0, 43435, 0, 0, 0,
-    0, 0, 70660, 0, 741, 83291, 5494, 0, 70668, 1990, 11107, 4498, 0, 0,
-    70658, 0, 0, 2960, 73779, 0, 8969, 0, 43424, 0, 0, 2950, 0, 0, 129035,
-    370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122900, 0, 0, 0, 0, 2964, 43663, 0,
-    6344, 0, 0, 10144, 0, 8252, 729, 66016, 78446, 0, 0, 0, 78740, 43669,
-    9032, 0, 0, 0, 0, 0, 0, 0, 0, 74612, 3761, 0, 0, 0, 0, 0, 0, 3850, 0, 0,
+    65237, 6241, 0, 0, 0, 6238, 0, 129889, 0, 4409, 0, 0, 67170, 0, 0, 0,
+    94047, 6237, 5461, 66851, 9176, 92882, 121341, 65231, 0, 0, 121182,
+    128468, 0, 44018, 0, 64765, 0, 0, 0, 5685, 0, 2461, 0, 7091, 0, 0, 0,
+    68163, 0, 73030, 0, 0, 73928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68506, 0, 0, 0,
+    0, 0, 2542, 0, 0, 0, 128176, 5776, 0, 0, 0, 0, 0, 11987, 0, 0, 75036,
+    68744, 0, 0, 10039, 42828, 0, 0, 0, 0, 0, 10721, 67664, 43433, 0, 0,
+    41875, 0, 41870, 266, 129066, 0, 41873, 71271, 0, 0, 0, 0, 0, 0, 41871,
+    66186, 3734, 7734, 43683, 8750, 110600, 66011, 92899, 0, 127937, 0, 0,
+    10572, 0, 42906, 0, 64349, 7287, 0, 0, 0, 0, 11167, 69220, 0, 43429, 0,
+    1697, 0, 0, 68633, 7286, 0, 128738, 10031, 78754, 0, 68645, 8620, 0,
+    42162, 0, 0, 7285, 0, 119577, 0, 66842, 43677, 41583, 0, 65799, 129332,
+    0, 0, 0, 0, 110806, 0, 3609, 0, 129448, 119074, 125116, 126254, 128108,
+    73948, 0, 0, 0, 0, 129189, 42732, 92699, 74984, 68620, 11691, 74985, 0,
+    0, 0, 0, 0, 6348, 243, 74075, 0, 0, 92309, 123585, 0, 0, 10648, 8538,
+    43687, 0, 0, 0, 70515, 0, 118954, 92886, 13307, 129573, 92891, 0, 120770,
+    983831, 0, 0, 0, 0, 214, 0, 0, 0, 65893, 0, 120488, 128386, 0, 92893, 0,
+    2603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 1016, 0, 0, 0, 3885, 92,
+    65456, 64608, 0, 0, 0, 70656, 113742, 0, 0, 0, 128128, 983838, 0, 0,
+    6791, 983842, 127960, 0, 0, 0, 118976, 0, 7328, 92358, 0, 7995, 8759,
+    43421, 0, 68029, 0, 0, 125272, 0, 3197, 0, 0, 0, 983150, 0, 11595, 0, 0,
+    43435, 0, 0, 0, 0, 0, 70660, 0, 741, 83291, 5494, 0, 70668, 1990, 11107,
+    4498, 0, 0, 70658, 0, 0, 2960, 73779, 0, 8969, 101256, 43424, 0, 101257,
+    2950, 101251, 101254, 101253, 370, 0, 101250, 101249, 0, 0, 0, 0, 0, 0,
+    0, 122900, 0, 0, 983251, 0, 2964, 43663, 0, 6344, 0, 0, 10144, 0, 8252,
+    729, 66016, 78446, 0, 0, 0, 78740, 43669, 9032, 0, 0, 0, 0, 0, 0, 0, 0,
+    74612, 3761, 101261, 101260, 101263, 101262, 0, 0, 3850, 101258, 0,
     128389, 0, 0, 0, 0, 8611, 0, 0, 0, 43691, 125032, 0, 41802, 120540, 0, 0,
-    0, 0, 0, 3848, 0, 113800, 127536, 0, 0, 0, 983270, 663, 0, 0, 0, 0, 0, 0,
-    0, 0, 13221, 0, 0, 0, 0, 0, 121348, 0, 65579, 12980, 68046, 12143, 0,
-    128067, 0, 43441, 41804, 0, 0, 0, 0, 0, 0, 66329, 0, 72324, 0, 0, 125038,
-    0, 129383, 0, 0, 0, 983871, 0, 0, 0, 0, 0, 1097, 129033, 0, 0, 0, 93828,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13110, 0, 983867, 68229, 1000, 0, 0, 0,
-    1209, 0, 0, 0, 1073, 6321, 77878, 0, 0, 68213, 0, 12167, 0, 0, 0, 0,
-    73673, 121500, 0, 121501, 0, 6587, 0, 0, 0, 9231, 0, 2959, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 42941, 0, 0, 68434, 0, 70742, 0, 0, 12290, 0, 0, 110801,
-    0, 77873, 8205, 110803, 5131, 0, 0, 0, 0, 0, 0, 1944, 78453, 0, 0,
-    119990, 119991, 12701, 78492, 11308, 119995, 0, 113702, 66836, 119999,
-    74263, 92382, 120002, 120003, 7075, 120005, 120006, 120007, 41817, 75063,
-    42275, 120011, 120012, 120013, 120014, 42943, 6041, 0, 41899, 0, 8002, 0,
-    41902, 0, 0, 64332, 0, 7813, 119117, 0, 41900, 120633, 0, 7281, 78455,
-    7279, 12041, 93027, 0, 12673, 0, 129123, 9660, 0, 72984, 0, 0, 0, 0,
-    92901, 2970, 0, 0, 0, 77870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3486, 0, 0, 0, 0,
-    127799, 0, 0, 0, 69920, 0, 66834, 0, 983987, 0, 68312, 0, 65673, 1019,
-    78495, 4148, 0, 12289, 0, 4316, 0, 13119, 983913, 0, 0, 0, 0, 0, 0,
-    43434, 41865, 128218, 9163, 8659, 9072, 5867, 13302, 7622, 7120, 0, 0, 0,
-    0, 7400, 5416, 0, 0, 10817, 0, 0, 0, 0, 68162, 41855, 41867, 0, 983224,
-    0, 11536, 0, 0, 7115, 0, 0, 5498, 7337, 41536, 0, 0, 92587, 7221, 8997,
-    0, 0, 0, 0, 0, 0, 127814, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 121292, 0,
-    43454, 63903, 63902, 63901, 0, 3971, 0, 0, 2952, 0, 11038, 10901, 63900,
-    63899, 63898, 5198, 667, 43273, 63887, 63886, 128458, 78521, 66830, 0,
-    92714, 4159, 0, 0, 63885, 63884, 63883, 63882, 63880, 8555, 63878, 63877,
-    93057, 0, 0, 63881, 10746, 0, 118983, 0, 63876, 63875, 63874, 63873,
-    7432, 1913, 41913, 63852, 0, 128971, 0, 983875, 0, 446, 41911, 0, 63851,
-    63850, 41910, 0, 63846, 2972, 63844, 7262, 0, 63849, 63848, 63847, 72990,
-    6570, 0, 7259, 63842, 4178, 63840, 121321, 41521, 63894, 63893, 63892, 0,
-    0, 1105, 4180, 0, 7418, 0, 0, 63891, 63890, 63889, 63888, 0, 0, 0, 0,
+    0, 0, 0, 3848, 101230, 113800, 127536, 101227, 101226, 101229, 101228,
+    663, 0, 0, 0, 0, 0, 0, 0, 0, 13221, 0, 0, 101244, 101243, 101246, 101245,
+    0, 65579, 12980, 68046, 12143, 0, 128067, 0, 43441, 41804, 101241,
+    101240, 101235, 101234, 101237, 101236, 66329, 0, 72324, 101232, 0,
+    125038, 0, 129383, 101214, 101213, 0, 101215, 101210, 0, 101212, 101211,
+    0, 1097, 129033, 0, 101209, 101208, 93828, 0, 101205, 101204, 101207,
+    101206, 101201, 101200, 101203, 101202, 0, 13110, 0, 983867, 68229, 1000,
+    0, 0, 101222, 1209, 101224, 101223, 92354, 1073, 6321, 77878, 0, 0,
+    68213, 0, 12167, 0, 0, 0, 0, 73673, 121500, 0, 121501, 0, 6587, 0, 0, 0,
+    9231, 0, 2959, 101191, 0, 101193, 101188, 101187, 101190, 101189, 101184,
+    0, 101186, 42941, 0, 0, 68434, 0, 70742, 0, 0, 12290, 0, 0, 110801, 0,
+    77873, 8205, 110803, 5131, 0, 0, 0, 0, 0, 0, 1944, 78453, 0, 0, 119990,
+    119991, 12701, 78492, 11308, 119995, 0, 113702, 66836, 119999, 74263,
+    92382, 120002, 120003, 7075, 101196, 101199, 101198, 41817, 75063, 42275,
+    101194, 120012, 120013, 120014, 42943, 6041, 0, 41899, 0, 8002, 0, 41902,
+    0, 0, 64332, 0, 7813, 119117, 0, 41900, 120633, 101167, 7281, 78455,
+    7279, 12041, 93027, 101165, 12673, 0, 129123, 9660, 0, 72984, 101161, 0,
+    0, 0, 92901, 2970, 0, 101180, 101179, 77870, 101181, 0, 0, 101178, 0, 0,
+    0, 0, 0, 3486, 101174, 101177, 101176, 101171, 101170, 101173, 101172, 0,
+    69920, 101169, 66834, 0, 983987, 0, 68312, 101150, 65673, 1019, 78495,
+    4148, 0, 12289, 101147, 4316, 0, 13119, 983913, 101145, 101144, 0, 0,
+    101141, 101140, 43434, 41865, 101137, 9163, 8659, 9072, 5867, 13302,
+    7622, 7120, 0, 0, 0, 0, 7400, 5416, 101160, 101159, 10817, 101153,
+    101156, 101155, 0, 68162, 41855, 41867, 0, 983224, 0, 11536, 71988, 0,
+    7115, 0, 0, 5498, 7337, 41536, 0, 0, 92587, 7221, 8997, 0, 0, 0, 71949,
+    0, 0, 127814, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 121292, 0, 43454, 63903,
+    63902, 63901, 0, 3971, 0, 0, 2952, 0, 11038, 10901, 63900, 63899, 63898,
+    5198, 667, 43273, 63887, 63886, 128458, 78521, 66830, 0, 92714, 4159, 0,
+    0, 63885, 63884, 63883, 63882, 63880, 8555, 63878, 63877, 93057, 0, 0,
+    63881, 10746, 0, 118983, 0, 63876, 63875, 63874, 63873, 7432, 1913,
+    41913, 63852, 0, 128971, 0, 983875, 0, 446, 41911, 0, 63851, 63850,
+    41910, 0, 63846, 2972, 63844, 7262, 0, 63849, 63848, 63847, 72990, 6570,
+    0, 7259, 63842, 4178, 63840, 121321, 41521, 63894, 63893, 63892, 0, 0,
+    1105, 4180, 0, 7418, 0, 129714, 63891, 63890, 63889, 63888, 0, 0, 0, 0,
     1678, 0, 66909, 0, 0, 0, 0, 11192, 128360, 128404, 9159, 70089, 63861,
     63860, 63859, 63858, 63865, 1615, 63863, 63862, 0, 0, 0, 0, 63857, 63856,
     71902, 0, 1077, 0, 65099, 0, 0, 0, 0, 0, 0, 42773, 121331, 0, 0, 119220,
-    120912, 129564, 0, 1112, 119122, 8686, 0, 0, 65081, 0, 0, 0, 11077, 0,
-    7260, 0, 5327, 0, 63870, 63869, 3847, 63867, 0, 2903, 0, 3001, 66762, 0,
-    43746, 0, 63866, 0, 0, 0, 0, 0, 127785, 68420, 2990, 0, 128254, 0, 0, 0,
-    0, 1117, 118987, 12212, 129003, 129151, 63836, 63835, 63834, 0, 0, 63839,
-    63838, 63837, 0, 125095, 63833, 6042, 66360, 0, 74808, 0, 63821, 63820,
-    63819, 63818, 0, 0, 9047, 63822, 128328, 6091, 0, 10691, 0, 74344, 8226,
-    0, 63812, 63811, 63810, 63809, 2289, 63815, 63814, 63813, 6047, 0, 0,
-    780, 63808, 77925, 77922, 65147, 63931, 63930, 2076, 1093, 9882, 63934,
-    2082, 63932, 75050, 63929, 63928, 63927, 77934, 9806, 65566, 77933,
-    63922, 63921, 2086, 0, 63926, 2984, 5968, 63923, 0, 0, 129458, 11137,
-    13169, 5290, 2089, 0, 63827, 1088, 63825, 7268, 1084, 1085, 63829, 1083,
-    10131, 7283, 0, 0, 0, 1092, 0, 7273, 983272, 44016, 43627, 0, 0, 0,
+    120912, 129564, 0, 1112, 119122, 8686, 120654, 0, 65081, 0, 0, 0, 11077,
+    0, 7260, 0, 5327, 0, 63870, 63869, 3847, 63867, 0, 2903, 0, 3001, 66762,
+    0, 43746, 0, 63866, 0, 0, 0, 0, 0, 127785, 68420, 2990, 0, 128254, 0, 0,
+    0, 0, 1117, 118987, 12212, 129003, 129151, 63836, 63835, 63834, 0, 0,
+    63839, 63838, 63837, 0, 125095, 63833, 6042, 66360, 0, 74808, 0, 63821,
+    63820, 63819, 63818, 0, 0, 9047, 63822, 128328, 6091, 0, 10691, 0, 74344,
+    8226, 0, 63812, 63811, 63810, 63809, 2289, 63815, 63814, 63813, 6047, 0,
+    0, 780, 63808, 77925, 77922, 65147, 63931, 63930, 2076, 1093, 9882,
+    63934, 2082, 63932, 75050, 63929, 63928, 63927, 77934, 9806, 65566,
+    77933, 63922, 63921, 2086, 0, 63926, 2984, 5968, 63923, 0, 0, 129458,
+    11137, 13169, 5290, 2089, 0, 63827, 1088, 63825, 7268, 1084, 1085, 63829,
+    1083, 10131, 7283, 0, 0, 0, 1092, 0, 7273, 983272, 44016, 43627, 0, 0, 0,
     11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 7278, 63937, 63936, 43405,
-    11106, 940, 5787, 10099, 63938, 0, 63897, 126123, 2994, 0, 0, 0, 121041,
-    77939, 77940, 77937, 77938, 74343, 93043, 72704, 660, 10127, 666, 0,
-    5532, 43667, 5533, 77941, 0, 0, 0, 979, 0, 0, 72706, 92652, 9108, 0,
-    128374, 129403, 63951, 71685, 0, 0, 128782, 63946, 1707, 983824, 128612,
-    63950, 63949, 63948, 63947, 63945, 6038, 63943, 63942, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 73884, 0, 1690, 63919, 63918, 63917, 70865, 43659, 0, 983829,
-    0, 2054, 0, 78515, 63916, 9184, 63914, 69737, 63911, 63910, 63909, 63908,
-    0, 0, 63913, 6044, 0, 0, 9061, 5534, 10672, 11653, 124932, 5531, 0, 0, 0,
-    0, 0, 0, 11957, 0, 68668, 0, 0, 0, 10474, 43426, 0, 42354, 0, 0, 0, 0, 0,
-    8413, 66841, 0, 7269, 7272, 0, 0, 0, 125008, 78460, 0, 0, 0, 0, 126639,
-    0, 0, 0, 66840, 0, 0, 128441, 0, 0, 0, 92187, 7270, 0, 0, 6628, 1076,
-    128700, 0, 0, 0, 0, 0, 0, 12807, 43413, 63906, 4548, 63904, 71187, 70393,
-    41729, 44005, 1307, 0, 0, 0, 0, 0, 128268, 0, 8180, 0, 127778, 0, 0,
-    5413, 43681, 123205, 3493, 0, 0, 0, 92544, 73937, 10517, 0, 4518, 10990,
-    0, 5167, 4481, 3771, 0, 2710, 0, 66277, 0, 0, 43073, 0, 0, 0, 0, 0, 0,
-    119659, 1628, 0, 0, 0, 65262, 66809, 10783, 11172, 0, 0, 70840, 113679,
-    0, 119029, 0, 0, 41530, 66843, 4457, 0, 0, 0, 0, 0, 41529, 0, 0, 6031,
-    65807, 70814, 0, 0, 0, 69705, 0, 0, 11926, 6033, 9656, 0, 0, 0, 68869, 0,
-    128930, 0, 128100, 0, 42612, 43655, 0, 0, 0, 66468, 0, 0, 68623, 0, 0, 0,
-    0, 120869, 983343, 0, 0, 1151, 0, 73709, 127544, 0, 71106, 0, 0, 0, 0, 0,
-    0, 0, 11527, 118870, 0, 0, 11538, 127387, 0, 11020, 0, 66467, 0, 8087,
-    71700, 0, 9894, 0, 0, 70824, 120854, 0, 78513, 8053, 0, 0, 0, 0, 120495,
-    0, 0, 63845, 0, 0, 78602, 0, 13084, 70170, 8741, 0, 0, 0, 0, 64605,
-    83051, 0, 473, 43415, 0, 0, 119271, 1087, 124966, 71275, 0, 0, 66439,
-    43218, 0, 0, 7237, 0, 0, 0, 0, 0, 92261, 0, 121036, 4384, 74220, 983779,
-    2058, 917561, 0, 0, 0, 0, 0, 3857, 0, 0, 0, 64630, 0, 0, 74168, 0,
-    125088, 4421, 0, 0, 0, 66400, 0, 68431, 0, 0, 0, 83053, 0, 0, 69640,
-    127861, 0, 437, 0, 0, 0, 0, 65236, 13290, 119180, 4997, 64306, 0, 0,
-    4999, 0, 0, 0, 4711, 120769, 0, 2739, 0, 92915, 74834, 0, 127175, 0, 0,
-    0, 0, 0, 1779, 6600, 6601, 0, 5325, 0, 128437, 13058, 0, 0, 0, 92186, 0,
-    71845, 10575, 43399, 0, 0, 0, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082,
-    110878, 0, 67401, 0, 0, 0, 0, 6783, 0, 0, 42867, 69655, 44021, 6458, 0,
-    0, 0, 0, 0, 0, 1273, 43407, 0, 0, 0, 0, 1313, 6322, 41720, 128627, 66433,
-    0, 0, 0, 11216, 0, 0, 0, 43437, 93833, 0, 0, 0, 5122, 0, 72728, 129520,
-    70161, 0, 0, 0, 0, 0, 8303, 0, 128926, 0, 10003, 0, 0, 0, 1686, 0, 0,
-    42834, 3664, 0, 126088, 121346, 0, 0, 4324, 126, 0, 0, 0, 0, 0, 65166, 0,
-    0, 0, 0, 43817, 0, 43822, 0, 0, 65600, 13002, 0, 0, 0, 1103, 0, 119575,
-    0, 0, 13078, 0, 8116, 0, 2050, 0, 0, 1102, 0, 6555, 0, 0, 74003, 74794,
-    0, 0, 42591, 127278, 0, 1111, 0, 75047, 4707, 0, 0, 0, 0, 43468, 4522,
-    8645, 0, 74857, 0, 11352, 0, 0, 0, 2293, 0, 0, 0, 128265, 71709, 0, 0, 0,
-    93827, 0, 0, 0, 128488, 0, 160, 2677, 0, 0, 120141, 0, 0, 70790, 0,
-    42770, 0, 0, 0, 43821, 113769, 0, 0, 43816, 0, 0, 1079, 3867, 64817, 0,
-    0, 0, 0, 64768, 0, 0, 4005, 983211, 0, 10991, 0, 92957, 917578, 917581,
-    917580, 917575, 128314, 917577, 917576, 917571, 78534, 917573, 917572, 0,
-    0, 128359, 73458, 0, 3339, 11448, 1106, 917591, 917590, 917593, 3340,
-    917587, 917586, 917589, 917588, 917583, 10605, 1309, 74996, 120743,
-    92650, 0, 0, 9485, 0, 0, 0, 0, 0, 125002, 92533, 128487, 0, 129285, 4338,
-    11238, 0, 66825, 0, 0, 0, 0, 0, 0, 74128, 0, 0, 73680, 0, 129438, 9553,
-    1590, 63777, 63776, 128677, 63782, 63781, 63780, 63779, 1583, 0, 0, 0, 0,
-    128011, 0, 0, 41522, 0, 92168, 983784, 66759, 0, 983584, 0, 0, 0, 0,
-    11394, 0, 983071, 0, 66823, 1334, 0, 4479, 0, 0, 120663, 0, 122883,
-    10497, 0, 0, 983777, 66828, 0, 0, 0, 6809, 63786, 0, 0, 63791, 63790,
-    1145, 63788, 119143, 63785, 63784, 63783, 10192, 65267, 0, 0, 8928, 0, 0,
-    0, 0, 0, 74216, 66805, 0, 0, 63759, 63758, 3523, 1074, 0, 121340, 74077,
-    0, 0, 0, 63757, 43145, 63755, 63754, 63752, 1349, 63750, 63749, 0, 0, 0,
-    63753, 63802, 41084, 72784, 0, 41930, 63805, 63804, 11140, 63801, 41082,
-    43843, 42787, 123197, 0, 0, 0, 63793, 63792, 0, 128241, 10201, 12238,
-    63795, 42358, 92394, 43862, 0, 0, 41932, 66826, 0, 0, 0, 121136, 0, 7950,
-    63772, 63771, 63770, 0, 63767, 63766, 2793, 63764, 0, 128501, 63769,
-    9530, 0, 92398, 0, 128642, 63763, 63762, 4595, 63760, 792, 0, 0, 0, 8742,
-    0, 0, 0, 63744, 0, 0, 120815, 63748, 63747, 63746, 63745, 5055, 0, 0,
-    1090, 0, 125268, 11665, 127809, 4558, 0, 72211, 0, 0, 0, 11513, 0, 6157,
-    63775, 63774, 63773, 0, 12170, 9067, 0, 0, 10872, 129643, 43891, 43893,
-    43892, 0, 43933, 0, 128231, 0, 0, 0, 0, 0, 11063, 0, 43888, 0, 0, 128368,
-    43889, 0, 73807, 983104, 7386, 0, 0, 70295, 0, 0, 0, 71201, 128460, 0, 0,
-    0, 0, 69915, 2918, 66820, 65300, 0, 127859, 64726, 2790, 0, 3793, 42065,
-    127829, 0, 129560, 0, 0, 0, 0, 0, 92712, 0, 12923, 5270, 0, 0, 0, 65813,
-    0, 128499, 0, 75012, 0, 10888, 0, 93997, 0, 3330, 129417, 0, 0, 0, 0, 0,
-    8220, 0, 0, 0, 0, 1627, 0, 0, 0, 5371, 118938, 0, 1826, 118794, 0, 0,
-    70023, 0, 0, 0, 71108, 0, 0, 0, 0, 92207, 68125, 74898, 101069, 0, 0,
-    71098, 70029, 0, 43116, 0, 70019, 64346, 0, 0, 66818, 0, 70031, 0, 12666,
-    120413, 120420, 120414, 120406, 120428, 0, 120431, 0, 65509, 0, 7449, 0,
-    0, 0, 7438, 0, 0, 9054, 971, 0, 0, 0, 65195, 64767, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 64303, 0, 2303, 0, 0, 0, 0, 65833, 0, 7271, 0, 0, 0, 0, 12229, 0,
-    0, 43411, 73751, 0, 64813, 0, 0, 10476, 0, 0, 3932, 64958, 0, 0, 73989,
-    0, 0, 0, 113816, 0, 0, 0, 0, 0, 0, 92645, 65474, 4796, 118892, 129357,
-    65479, 0, 42895, 0, 65500, 0, 9899, 92608, 0, 404, 65484, 120639, 0,
-    5788, 127852, 0, 65491, 1831, 66020, 0, 983993, 92588, 0, 1343, 120784,
-    0, 0, 12018, 0, 0, 0, 0, 0, 4422, 4708, 3799, 119358, 119357, 0, 120510,
-    0, 119361, 119360, 983095, 0, 1364, 0, 8038, 0, 0, 12868, 0, 70425,
-    55223, 0, 64414, 110689, 0, 0, 0, 0, 0, 0, 118802, 0, 42855, 118856,
-    42866, 0, 0, 0, 0, 66438, 0, 983977, 119356, 119355, 119354, 0, 983580,
-    0, 0, 67685, 128062, 119350, 0, 64512, 10404, 10340, 119352, 1556, 5274,
-    0, 0, 10017, 9733, 0, 129476, 0, 41373, 0, 0, 0, 0, 0, 349, 4863, 41371,
-    0, 0, 0, 0, 72295, 4398, 8543, 65618, 128018, 0, 0, 0, 0, 12441, 0,
-    119348, 119347, 4318, 10452, 0, 8032, 0, 119349, 119344, 0, 127844,
-    121156, 0, 110729, 119345, 8597, 0, 110727, 9864, 0, 0, 0, 0, 0, 0, 0,
-    7722, 0, 0, 0, 0, 0, 66590, 0, 0, 0, 0, 0, 0, 4965, 0, 917536, 0, 123196,
-    0, 0, 0, 10436, 119342, 43147, 119340, 10356, 10420, 982, 2756, 0,
-    983978, 0, 0, 11162, 119338, 0, 92914, 0, 65110, 0, 0, 983781, 78543, 0,
-    118793, 0, 128112, 119179, 64476, 1694, 8216, 0, 0, 78539, 0, 65620, 0,
-    78537, 0, 0, 42158, 65621, 69955, 120324, 120327, 120326, 120321, 120320,
-    120323, 120322, 12314, 65616, 55221, 43825, 983553, 119337, 68060,
-    119335, 0, 71874, 123628, 128537, 119332, 73089, 0, 41347, 0, 0, 8842, 0,
-    0, 4379, 127393, 12692, 0, 0, 66353, 71875, 0, 0, 92907, 0, 0, 71877,
-    120303, 65619, 9872, 0, 0, 1846, 120309, 120308, 119256, 71192, 120305,
-    120304, 120307, 6442, 120317, 120316, 5379, 120318, 110717, 120312,
-    120315, 71876, 0, 65934, 66497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6151,
+    11106, 940, 5787, 10099, 63938, 101269, 63897, 101271, 2994, 101265,
+    101264, 101267, 101266, 77939, 77940, 77937, 77938, 74343, 93043, 72704,
+    660, 10127, 666, 0, 5532, 43667, 5533, 77941, 0, 0, 0, 979, 0, 0, 72706,
+    92652, 9108, 0, 128374, 129403, 63951, 71685, 0, 0, 128782, 63946, 1707,
+    983824, 128612, 63950, 63949, 63948, 63947, 63945, 6038, 63943, 63942,
+    101274, 0, 101276, 101275, 0, 0, 0, 0, 0, 0, 73884, 0, 1690, 63919,
+    63918, 63917, 70865, 43659, 0, 983829, 0, 2054, 0, 78515, 63916, 9184,
+    63914, 69737, 63911, 63910, 63909, 63908, 0, 0, 63913, 6044, 0, 0, 9061,
+    5534, 10672, 11653, 124932, 5531, 101501, 101500, 101503, 101502, 0, 0,
+    11957, 101498, 68668, 0, 0, 0, 10474, 43426, 0, 42354, 101492, 101491,
+    101494, 101493, 101488, 8413, 66841, 101489, 7269, 7272, 0, 0, 101471,
+    101470, 78460, 0, 101467, 101466, 101469, 101468, 0, 0, 0, 66840, 0,
+    101465, 128441, 0, 101462, 101461, 92187, 7270, 101458, 101457, 6628,
+    1076, 128700, 0, 101456, 0, 0, 0, 0, 12807, 43413, 63906, 4548, 63904,
+    71187, 70393, 41729, 44005, 1307, 0, 101473, 101472, 0, 0, 128268, 0,
+    8180, 0, 127778, 0, 0, 5413, 43681, 123205, 3493, 0, 0, 0, 92544, 73937,
+    10517, 0, 4518, 10990, 101447, 5167, 4481, 3771, 101443, 2710, 0, 66277,
+    0, 0, 43073, 0, 0, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 66809,
+    10783, 11172, 0, 0, 70840, 113679, 0, 119029, 0, 0, 41530, 66843, 4457,
+    0, 0, 0, 0, 0, 41529, 0, 0, 6031, 65807, 70814, 0, 101455, 71984, 69705,
+    101452, 101451, 11926, 6033, 9656, 0, 0, 0, 68869, 0, 128930, 0, 128100,
+    0, 42612, 43655, 0, 0, 0, 66468, 0, 0, 68623, 101423, 0, 0, 101420,
+    101419, 101422, 101421, 0, 1151, 101418, 73709, 127544, 0, 71106, 0, 0,
+    0, 0, 0, 101437, 101436, 11527, 101438, 0, 0, 11538, 101434, 0, 11020, 0,
+    66467, 101432, 8087, 71700, 101433, 9894, 101427, 101430, 70824, 101424,
+    0, 78513, 8053, 0, 0, 0, 0, 101407, 101406, 0, 63845, 101403, 101402,
+    78602, 101404, 13084, 70170, 8741, 0, 0, 101401, 0, 64605, 83051, 101397,
+    473, 43415, 101394, 101393, 101396, 1087, 124966, 71275, 101392, 0,
+    66439, 43218, 0, 0, 7237, 101414, 101417, 101416, 71996, 101410, 92261,
+    101412, 121036, 4384, 74220, 101408, 2058, 917561, 0, 129462, 0, 0, 0,
+    3857, 0, 0, 0, 64630, 0, 0, 74168, 0, 125088, 4421, 0, 0, 101381, 66400,
+    101383, 68431, 101377, 101376, 101379, 83053, 0, 0, 69640, 127861, 0,
+    437, 0, 0, 0, 0, 65236, 13290, 119180, 4997, 64306, 0, 0, 4999, 0, 0, 0,
+    4711, 120769, 0, 2739, 0, 92915, 74834, 0, 127175, 0, 0, 0, 0, 0, 1779,
+    6600, 6601, 0, 5325, 101390, 101389, 13058, 101391, 101386, 0, 92186,
+    101387, 71845, 10575, 43399, 0, 101385, 101384, 1104, 0, 0, 10655, 0, 0,
+    0, 0, 1082, 110878, 0, 67401, 0, 0, 0, 0, 6783, 0, 0, 42867, 69655,
+    44021, 6458, 0, 0, 0, 0, 0, 0, 1273, 43407, 0, 0, 0, 0, 1313, 6322,
+    41720, 128627, 66433, 0, 0, 0, 11216, 0, 0, 0, 43437, 93833, 0, 0, 0,
+    5122, 0, 72728, 129520, 70161, 0, 0, 0, 0, 0, 8303, 0, 128926, 0, 10003,
+    0, 0, 0, 1686, 0, 0, 42834, 3664, 0, 126088, 121346, 0, 0, 4324, 126, 0,
+    0, 0, 0, 0, 65166, 0, 0, 0, 0, 43817, 0, 43822, 0, 0, 65600, 13002, 0, 0,
+    0, 1103, 0, 119575, 129452, 0, 13078, 0, 8116, 0, 2050, 0, 0, 1102, 0,
+    6555, 0, 0, 74003, 74794, 0, 0, 42591, 127278, 0, 1111, 0, 75047, 4707,
+    0, 0, 0, 0, 43468, 4522, 8645, 0, 74857, 0, 11352, 0, 0, 0, 2293, 0, 0,
+    0, 128265, 71709, 0, 0, 0, 93827, 0, 0, 0, 128488, 0, 160, 2677, 0, 0,
+    120141, 0, 0, 70790, 0, 42770, 0, 71986, 0, 43821, 113769, 0, 0, 43816,
+    0, 0, 1079, 3867, 64817, 0, 0, 0, 0, 64768, 0, 0, 4005, 983211, 0, 10991,
+    0, 92957, 917578, 917581, 917580, 917575, 128314, 917577, 917576, 917571,
+    78534, 917573, 917572, 0, 0, 128359, 73458, 0, 3339, 11448, 1106, 917591,
+    917590, 917593, 3340, 917587, 917586, 917589, 917588, 917583, 10605,
+    1309, 74996, 120743, 92650, 0, 0, 9485, 0, 0, 0, 0, 0, 125002, 92533,
+    128487, 0, 129285, 4338, 11238, 0, 66825, 0, 0, 0, 0, 0, 0, 74128, 0, 0,
+    73680, 0, 129438, 9553, 1590, 63777, 63776, 128677, 63782, 63781, 63780,
+    63779, 1583, 101525, 101528, 101527, 101522, 101521, 101524, 101523,
+    41522, 0, 92168, 983784, 66759, 0, 983580, 0, 0, 0, 0, 11394, 0, 983071,
+    0, 66823, 1334, 0, 4479, 0, 0, 120663, 0, 122883, 10497, 0, 0, 983777,
+    66828, 0, 0, 0, 6809, 63786, 0, 0, 63791, 63790, 1145, 63788, 101535,
+    63785, 63784, 63783, 10192, 65267, 101533, 101532, 8928, 0, 0, 0, 0, 0,
+    74216, 66805, 0, 0, 63759, 63758, 3523, 1074, 0, 121340, 74077, 0, 0, 0,
+    63757, 43145, 63755, 63754, 63752, 1349, 63750, 63749, 0, 0, 0, 63753,
+    63802, 41084, 72784, 0, 41930, 63805, 63804, 11140, 63801, 41082, 43843,
+    42787, 101514, 0, 101516, 101515, 63793, 63792, 0, 128241, 10201, 12238,
+    63795, 42358, 92394, 43862, 101511, 101510, 41932, 66826, 101507, 101506,
+    0, 121136, 0, 7950, 63772, 63771, 63770, 0, 63767, 63766, 2793, 63764, 0,
+    128501, 63769, 9530, 0, 92398, 0, 128642, 63763, 63762, 4595, 63760, 792,
+    0, 0, 0, 8742, 0, 0, 0, 63744, 0, 0, 120815, 63748, 63747, 63746, 63745,
+    5055, 0, 0, 1090, 0, 125268, 11665, 127809, 4558, 0, 72211, 0, 0, 0,
+    11513, 0, 6157, 63775, 63774, 63773, 0, 12170, 9067, 0, 0, 10872, 129643,
+    43891, 43893, 43892, 129747, 43933, 0, 128231, 0, 0, 0, 0, 0, 11063, 0,
+    43888, 0, 0, 128368, 43889, 0, 73807, 983104, 7386, 0, 0, 70295, 0, 0, 0,
+    71201, 128460, 0, 0, 0, 0, 69915, 2918, 66820, 65300, 0, 127859, 64726,
+    2790, 0, 3793, 42065, 127829, 0, 129560, 0, 0, 0, 0, 0, 92712, 0, 12923,
+    5270, 0, 0, 0, 65813, 0, 128499, 0, 75012, 0, 10888, 0, 93997, 94180,
+    3330, 129417, 0, 0, 0, 0, 0, 8220, 0, 0, 101581, 101580, 1627, 101582, 0,
+    0, 5371, 101578, 0, 1826, 118794, 0, 0, 70023, 0, 0, 0, 71108, 0, 0, 0,
+    0, 92207, 68125, 74898, 101069, 0, 72006, 71098, 70029, 0, 43116, 101589,
+    70019, 64346, 0, 101585, 66818, 101587, 70031, 0, 12666, 120413, 120420,
+    120414, 101567, 120428, 0, 101564, 101563, 65509, 101565, 7449, 0,
+    101562, 0, 7438, 0, 0, 9054, 971, 101558, 101561, 101560, 65195, 64767,
+    101557, 101556, 0, 0, 101553, 101552, 0, 0, 0, 64303, 101576, 2303, 0,
+    101577, 101572, 101571, 65833, 101573, 7271, 0, 101570, 101569, 0, 12229,
+    0, 0, 43411, 73751, 0, 64813, 0, 0, 10476, 0, 0, 3932, 64958, 0, 0,
+    73989, 0, 0, 101542, 101541, 101544, 101543, 101538, 101537, 101540,
+    101539, 92645, 65474, 4796, 118892, 129357, 65479, 0, 42895, 11858,
+    65500, 0, 9899, 92608, 0, 404, 65484, 120639, 0, 5788, 127852, 0, 65491,
+    1831, 66020, 0, 983993, 92588, 0, 1343, 120784, 0, 0, 12018, 0, 0, 0, 0,
+    0, 4422, 4708, 3799, 101550, 119357, 0, 101547, 101546, 101549, 101548,
+    983095, 0, 1364, 0, 8038, 101545, 0, 12868, 0, 70425, 55223, 0, 64414,
+    110689, 0, 0, 0, 0, 0, 0, 118802, 0, 42855, 118856, 42866, 0, 0, 0, 0,
+    66438, 0, 983977, 119356, 119355, 119354, 0, 983576, 0, 73013, 67685,
+    128062, 119350, 0, 64512, 10404, 10340, 119352, 1556, 5274, 0, 127821,
+    10017, 9733, 0, 129476, 0, 41373, 0, 0, 0, 0, 0, 349, 4863, 41371, 0, 0,
+    0, 0, 72295, 4398, 8543, 65618, 128018, 0, 0, 0, 0, 12441, 0, 119348,
+    119347, 4318, 10452, 0, 8032, 0, 119349, 119344, 0, 127844, 121156, 0,
+    110729, 119345, 8597, 0, 110727, 9864, 0, 0, 0, 0, 0, 0, 0, 7722, 0, 0,
+    0, 0, 0, 66590, 0, 0, 129850, 0, 0, 0, 4965, 0, 917536, 0, 123196, 0, 0,
+    0, 10436, 119342, 43147, 119340, 10356, 10420, 982, 2756, 0, 983978, 0,
+    0, 11162, 119338, 0, 92914, 0, 65110, 0, 0, 983781, 78543, 0, 118793, 0,
+    128112, 119179, 64476, 1694, 8216, 0, 0, 78539, 0, 65620, 0, 78537, 0, 0,
+    42158, 65621, 69955, 120324, 120327, 120326, 120321, 120320, 120323,
+    120322, 12314, 65616, 55221, 43825, 983553, 119337, 68060, 119335, 0,
+    71874, 123628, 128537, 119332, 73089, 0, 41347, 0, 0, 8842, 0, 0, 4379,
+    127393, 12692, 0, 0, 66353, 71875, 0, 0, 92907, 0, 0, 71877, 120303,
+    65619, 9872, 0, 0, 1846, 120309, 120308, 119256, 71192, 120305, 120304,
+    120307, 6442, 120317, 120316, 5379, 120318, 110717, 120312, 120315,
+    71876, 0, 65934, 66497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72002, 0, 6151,
     12110, 0, 0, 0, 0, 0, 0, 0, 0, 68335, 0, 0, 0, 0, 0, 0, 66041, 9676,
     10202, 0, 0, 0, 64575, 126637, 11965, 0, 124936, 0, 0, 0, 0, 0, 9698,
     66293, 0, 119651, 0, 0, 41921, 0, 0, 0, 119258, 0, 0, 0, 0, 0, 8012,
     12355, 12353, 0, 0, 74107, 0, 0, 41925, 0, 41920, 65444, 0, 0, 41923,
     12694, 0, 10112, 1294, 0, 120091, 0, 120092, 0, 0, 128474, 121400, 0, 0,
     0, 8718, 0, 10284, 10268, 10380, 10316, 92593, 0, 71850, 0, 0, 92889, 0,
-    0, 0, 0, 9342, 12829, 0, 0, 0, 127978, 0, 0, 69428, 0, 73767, 72347, 0,
-    7956, 598, 0, 72329, 93837, 0, 0, 128860, 0, 120041, 0, 0, 0, 0, 0, 847,
-    0, 9529, 0, 0, 0, 0, 120035, 0, 0, 0, 67411, 0, 0, 0, 120040, 0, 128580,
-    0, 9624, 0, 0, 0, 65463, 1554, 0, 0, 0, 0, 71879, 0, 0, 0, 121161, 19963,
-    123625, 0, 72326, 92933, 71887, 10324, 10292, 65546, 0, 68141, 8372, 0,
-    0, 83018, 120022, 10175, 10388, 42799, 0, 983180, 10568, 0, 127400, 0, 0,
-    0, 983743, 0, 4366, 0, 983786, 0, 0, 42608, 0, 9884, 0, 0, 0, 0, 129180,
-    0, 0, 0, 0, 1609, 0, 92773, 73448, 0, 11661, 0, 5818, 0, 0, 0, 9540, 0,
-    2554, 5158, 0, 2213, 0, 0, 78522, 43079, 0, 0, 8264, 11175, 64553,
-    120863, 42155, 0, 0, 0, 0, 0, 0, 8676, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0,
-    123167, 43609, 0, 0, 1440, 0, 0, 0, 127061, 11005, 0, 66656, 127063, 0,
-    0, 0, 127065, 43393, 0, 120643, 0, 0, 0, 0, 120798, 0, 0, 0, 0, 0, 0,
-    70435, 64356, 0, 0, 0, 383, 7154, 127815, 43495, 128809, 121448, 0, 0, 0,
-    11286, 0, 0, 0, 0, 0, 0, 0, 42644, 0, 0, 0, 8292, 0, 4980, 113726, 92674,
-    70130, 0, 0, 0, 0, 74912, 0, 10631, 83330, 100488, 68042, 0, 0, 7900, 0,
-    0, 78779, 4198, 128555, 0, 0, 0, 123159, 0, 0, 12931, 0, 0, 0, 2088, 0,
-    72164, 129284, 0, 0, 124951, 0, 0, 0, 69694, 0, 0, 8593, 0, 0, 0, 0, 0,
+    0, 0, 0, 9342, 12829, 0, 0, 101239, 127978, 0, 0, 69428, 0, 73767, 72347,
+    0, 7956, 598, 0, 72329, 93837, 0, 0, 128860, 0, 120041, 0, 0, 101242, 0,
+    0, 847, 0, 9529, 0, 0, 0, 101247, 120035, 0, 0, 0, 67411, 0, 0, 0,
+    120040, 0, 128580, 0, 9624, 0, 0, 0, 65463, 1554, 0, 0, 0, 0, 71879, 0,
+    0, 0, 121161, 19963, 123625, 0, 72326, 92933, 71887, 10324, 10292, 65546,
+    0, 68141, 8372, 0, 0, 83018, 120022, 10175, 10388, 42799, 0, 983180,
+    10568, 0, 127400, 0, 0, 0, 983743, 0, 4366, 0, 983786, 0, 0, 42608, 0,
+    9884, 0, 0, 0, 0, 129180, 0, 0, 0, 0, 1609, 0, 92773, 73448, 0, 11661, 0,
+    5818, 0, 0, 0, 9540, 0, 2554, 5158, 0, 2213, 0, 0, 78522, 43079, 0, 0,
+    8264, 11175, 64553, 120863, 42155, 0, 0, 0, 0, 0, 69552, 8676, 0, 129927,
+    0, 451, 0, 0, 0, 0, 0, 0, 123167, 43609, 0, 0, 1440, 0, 0, 0, 127061,
+    11005, 0, 66656, 127063, 0, 129936, 0, 127065, 43393, 0, 120643, 0, 0, 0,
+    0, 120798, 0, 0, 0, 0, 0, 0, 70435, 64356, 0, 0, 0, 383, 7154, 127815,
+    43495, 128809, 121448, 0, 0, 0, 11286, 0, 0, 0, 0, 0, 0, 0, 42644,
+    129824, 129797, 129801, 8292, 0, 4980, 113726, 92674, 70130, 0, 0, 0, 0,
+    74912, 0, 10631, 83330, 100488, 68042, 0, 0, 7900, 101252, 0, 78779,
+    4198, 128555, 0, 0, 0, 123159, 0, 0, 12931, 0, 0, 0, 2088, 0, 72164,
+    129284, 0, 0, 69265, 0, 0, 0, 69694, 129808, 129794, 8593, 0, 0, 0, 0, 0,
     0, 11798, 0, 100483, 0, 0, 0, 64211, 128865, 120494, 0, 0, 0, 121228,
     68901, 128788, 0, 0, 65162, 0, 0, 0, 0, 0, 128130, 0, 92264, 127153, 0,
-    128818, 0, 0, 61, 0, 0, 92182, 119554, 0, 0, 12089, 0, 65834, 83281,
+    128818, 0, 0, 61, 0, 74373, 92182, 119554, 0, 0, 12089, 0, 65834, 83281,
     119671, 128701, 0, 0, 42566, 42743, 0, 69824, 0, 92653, 0, 0, 42621, 0,
     0, 0, 0, 0, 43266, 0, 0, 0, 74843, 0, 0, 119103, 64417, 0, 0, 64737, 0,
     0, 8930, 0, 0, 66900, 10056, 1800, 0, 0, 0, 0, 121175, 7743, 0, 0,
     119528, 92640, 92453, 9034, 6039, 129139, 10075, 0, 0, 0, 10748, 0, 0, 0,
     0, 0, 92984, 0, 0, 128183, 129421, 0, 43064, 127558, 0, 7539, 0, 0, 0, 0,
-    0, 0, 0, 92898, 42567, 0, 0, 73886, 0, 0, 12326, 0, 0, 0, 0, 11355, 0, 0,
-    0, 0, 69437, 0, 0, 0, 119537, 72327, 43005, 65342, 118902, 0, 0, 8644, 0,
-    0, 11186, 74296, 41909, 0, 128682, 2791, 0, 1891, 0, 0, 41907, 66647, 0,
-    0, 41906, 0, 0, 10773, 70206, 0, 0, 0, 6412, 2061, 8520, 13146, 0, 0,
-    83275, 65902, 2882, 0, 126232, 65852, 0, 983306, 0, 123627, 0, 0, 0, 0,
-    0, 128098, 0, 0, 0, 70871, 0, 0, 0, 120087, 0, 0, 0, 93971, 0, 3844,
-    6842, 0, 0, 6612, 0, 0, 0, 0, 0, 783, 0, 0, 0, 983064, 68032, 119225, 0,
-    0, 68378, 4556, 67839, 68480, 78663, 120069, 120074, 67657, 10510, 4382,
-    74218, 42194, 0, 0, 9177, 8902, 93958, 9839, 0, 120700, 0, 0, 63999,
-    41904, 41917, 9788, 120973, 0, 1862, 0, 0, 0, 41915, 0, 41919, 63994,
-    41914, 7981, 0, 0, 0, 0, 0, 0, 0, 120834, 0, 0, 0, 6784, 78788, 0, 0, 0,
-    0, 127534, 127484, 127476, 0, 0, 983941, 64289, 65289, 0, 129539, 129575,
-    64509, 0, 0, 126505, 11051, 0, 66635, 55259, 65885, 0, 128310, 0, 0, 0,
-    0, 7500, 4506, 0, 0, 0, 0, 0, 126609, 4040, 128680, 6167, 0, 0, 0, 0, 0,
-    0, 7830, 43036, 0, 0, 63990, 19947, 63988, 63987, 0, 63993, 10440, 9611,
-    0, 71883, 0, 65260, 63986, 11446, 63984, 92641, 3435, 119652, 0, 119108,
-    0, 128632, 0, 0, 12748, 0, 0, 92705, 0, 78790, 0, 0, 63956, 42458, 63954,
-    63953, 63960, 63959, 63958, 11596, 0, 11469, 70025, 42306, 2723, 0, 0,
-    70027, 0, 0, 0, 128093, 2880, 0, 0, 0, 0, 128506, 3498, 4378, 0, 0, 0,
-    65551, 118928, 0, 43387, 0, 64415, 128898, 0, 0, 0, 0, 8161, 393, 12013,
-    0, 92216, 126479, 63965, 63964, 63963, 42345, 0, 0, 63967, 42498, 0,
-    2927, 0, 63961, 0, 0, 983927, 0, 69699, 0, 42340, 0, 0, 0, 10730, 0,
-    69688, 0, 64187, 0, 0, 12437, 9813, 0, 42453, 1604, 9565, 0, 69701,
-    69235, 42414, 110724, 129196, 0, 42301, 11372, 0, 917973, 0, 0, 63980,
-    63979, 63978, 0, 128207, 12017, 63982, 63981, 73687, 0, 63977, 63976,
-    72794, 0, 0, 0, 63971, 4347, 4416, 63968, 11009, 63974, 63973, 402,
-    69390, 13147, 0, 0, 64646, 13228, 0, 0, 3515, 74252, 65261, 0, 0, 6259,
-    0, 0, 0, 0, 0, 0, 74813, 74425, 0, 126998, 126114, 0, 0, 0, 0, 983698, 0,
-    0, 74301, 0, 0, 0, 0, 74060, 0, 0, 66235, 5145, 0, 0, 128394, 0, 73120,
-    0, 7402, 0, 0, 0, 7952, 7832, 43382, 66616, 0, 983931, 120852, 0, 127875,
-    64866, 0, 0, 0, 78784, 74248, 0, 0, 983196, 0, 0, 0, 78656, 42390, 0, 0,
-    983921, 0, 0, 0, 0, 9508, 0, 9544, 11520, 0, 0, 3377, 0, 129562, 0, 0, 0,
-    0, 0, 66280, 0, 127198, 0, 0, 0, 1955, 119565, 0, 0, 3076, 0, 42168,
-    73049, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 0, 0, 67819,
-    92987, 0, 0, 0, 983204, 0, 69403, 3182, 0, 0, 0, 0, 0, 42169, 123162,
-    74244, 0, 42329, 0, 66326, 6841, 0, 128913, 0, 1219, 3934, 71276, 11483,
-    74510, 0, 0, 42442, 65470, 0, 0, 64622, 7759, 42482, 485, 0, 0, 42290, 0,
-    0, 42280, 0, 0, 11655, 64379, 127913, 42431, 10126, 42318, 0, 119631,
-    74397, 42470, 0, 68315, 0, 110829, 74041, 0, 0, 0, 5411, 0, 0, 0, 64205,
-    0, 64206, 42393, 64478, 1310, 125007, 0, 12052, 10643, 55271, 72727, 0,
-    121045, 0, 0, 118852, 0, 0, 0, 0, 113826, 0, 0, 64385, 0, 0, 0, 0, 0, 0,
-    93848, 92560, 2713, 0, 9650, 0, 0, 120602, 1406, 0, 78174, 92659, 0,
-    68223, 0, 0, 0, 0, 43475, 0, 65287, 1508, 127938, 8779, 10569, 75034, 0,
-    0, 0, 0, 0, 0, 0, 70786, 0, 0, 128344, 9185, 0, 42932, 43403, 0, 0, 0, 0,
-    0, 0, 0, 0, 12955, 0, 2888, 0, 0, 0, 0, 0, 0, 0, 2878, 0, 0, 0, 0, 0, 0,
-    129028, 13203, 0, 10429, 10365, 0, 0, 127165, 7503, 0, 113676, 68381,
-    119658, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, 0, 0, 0, 73741, 1791,
-    8850, 9288, 0, 2892, 0, 43394, 555, 0, 0, 0, 0, 64172, 118899, 0, 0, 0,
-    0, 8854, 0, 5858, 73101, 10582, 0, 0, 1361, 0, 0, 7905, 0, 65256, 0,
-    41210, 0, 0, 71884, 0, 0, 0, 6828, 0, 92302, 0, 1342, 68440, 0, 64161,
-    10903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 126467,
-    41972, 0, 0, 0, 9127, 0, 66619, 126489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11620,
-    0, 1149, 68316, 0, 0, 0, 0, 0, 92492, 0, 118784, 0, 0, 0, 12838, 0,
-    118819, 0, 0, 0, 0, 41087, 0, 0, 0, 0, 12036, 0, 0, 0, 0, 0, 64428,
-    12227, 0, 0, 0, 0, 125248, 120964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1743,
-    0, 0, 0, 65186, 0, 0, 0, 0, 0, 64439, 0, 68062, 0, 111259, 111258, 43866,
-    0, 111263, 3395, 9362, 111260, 0, 111257, 111256, 111255, 0, 0, 41091,
-    3426, 1344, 111249, 111248, 126215, 4735, 11111, 6119, 111251, 42699, 0,
-    0, 74818, 1423, 0, 0, 0, 0, 12039, 10559, 0, 0, 0, 9472, 67734, 11929, 0,
-    0, 0, 0, 128826, 0, 11579, 0, 0, 128364, 0, 92185, 0, 0, 1004, 92584, 0,
-    0, 0, 0, 0, 2556, 0, 0, 72790, 0, 0, 9686, 0, 0, 0, 70109, 111102, 0,
-    10718, 13154, 111100, 9139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41708, 12860,
-    41703, 0, 42090, 5403, 10352, 73917, 129144, 111096, 0, 5140, 3753,
-    118785, 41704, 0, 43078, 127789, 111092, 129360, 0, 983205, 92362, 0, 0,
-    2410, 92525, 0, 0, 0, 0, 0, 0, 0, 0, 119253, 0, 126601, 0, 2066, 74199,
-    0, 43463, 10659, 119623, 68863, 0, 1336, 0, 0, 69463, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 983946, 128133, 0, 0, 124940, 0, 1190,
-    42146, 1335, 42177, 43867, 0, 0, 10448, 0, 125041, 0, 0, 2099, 5120,
-    2409, 7799, 0, 74424, 0, 126581, 4731, 0, 111199, 111198, 111197, 111196,
-    11689, 0, 74977, 9913, 129430, 0, 0, 0, 111195, 111194, 11694, 0, 11690,
-    111189, 111188, 111187, 11693, 111193, 111192, 43097, 11688, 0, 78797,
-    194, 111186, 111185, 111184, 0, 0, 0, 11226, 4519, 70337, 10898, 43072,
-    70205, 0, 0, 0, 73094, 10695, 0, 7540, 0, 110984, 41859, 6067, 0, 0, 0,
-    110981, 13311, 0, 41857, 0, 8359, 121224, 12689, 0, 983131, 64577,
-    111204, 111203, 68183, 111209, 111208, 6064, 110988, 0, 110979, 74142, 0,
-    111201, 111200, 6051, 123613, 0, 0, 983369, 0, 0, 0, 0, 0, 110864, 10537,
-    110862, 1276, 0, 6549, 6052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1960, 0, 71232,
-    66297, 0, 129313, 0, 0, 1345, 111213, 111212, 111211, 8956, 43083, 0,
-    111215, 64682, 0, 6430, 0, 111210, 119814, 0, 0, 0, 119817, 0, 492,
-    43087, 0, 0, 0, 0, 0, 2582, 0, 0, 7444, 72863, 0, 2297, 111243, 73837, 0,
-    0, 65096, 197, 74183, 0, 71125, 111241, 111240, 0, 66515, 43550, 119829,
-    111229, 111228, 93764, 111226, 0, 0, 111231, 111230, 71686, 1799, 0,
-    42148, 74336, 0, 0, 65340, 111220, 110974, 2262, 111217, 111224, 74931,
-    111222, 10896, 0, 0, 0, 0, 6338, 111003, 110997, 110994, 111006, 111002,
-    111005, 0, 111279, 111278, 111277, 72133, 0, 111273, 111272, 110961,
-    3171, 6623, 4961, 0, 886, 55216, 8654, 0, 111270, 74390, 64603, 111267,
-    129283, 68122, 0, 43084, 0, 0, 0, 0, 69693, 8994, 10944, 65938, 111239,
-    111238, 111237, 111236, 66279, 92890, 42510, 0, 0, 6804, 0, 1947, 0, 0,
-    0, 42759, 0, 1705, 983345, 0, 0, 0, 0, 72722, 74036, 0, 0, 66720, 111281,
-    111280, 0, 4909, 111285, 111284, 111283, 4904, 0, 43503, 1365, 9253,
-    42757, 0, 7462, 0, 0, 0, 0, 119587, 0, 917579, 92526, 0, 125035, 0,
-    111311, 111310, 0, 0, 0, 0, 93977, 0, 0, 0, 0, 3629, 0, 13005, 0, 3628,
-    0, 111295, 0, 0, 0, 0, 111290, 64809, 2928, 4905, 111083, 851, 55233,
-    111291, 111059, 43086, 9114, 43870, 42583, 9315, 4822, 4906, 121097,
-    2847, 111028, 10330, 0, 1251, 7777, 41852, 125059, 111327, 111032,
-    111325, 12646, 0, 10259, 0, 65821, 75046, 6018, 0, 111324, 111323,
-    111322, 68372, 111319, 111318, 71893, 2558, 0, 64584, 111321, 111320, 0,
-    0, 0, 0, 111309, 111308, 111307, 111306, 73987, 74599, 71895, 93012, 0,
-    128715, 0, 12867, 111296, 0, 0, 11044, 111300, 111299, 8904, 11824,
-    65857, 0, 128674, 129027, 4387, 0, 0, 0, 0, 0, 0, 0, 11842, 0, 0, 0,
-    5136, 1968, 983041, 126627, 1337, 0, 0, 0, 0, 66506, 0, 0, 0, 0, 42314,
-    121384, 0, 0, 6120, 0, 65670, 68128, 0, 43082, 6016, 0, 42284, 71894,
-    4276, 111314, 3619, 41638, 69691, 0, 42322, 8853, 111043, 0, 490, 0,
-    13231, 68384, 72310, 65350, 0, 0, 0, 68245, 42435, 6154, 0, 65354, 0, 0,
-    42397, 334, 72732, 42416, 65359, 65273, 74634, 128227, 4442, 10364, 0,
-    778, 41626, 42455, 7989, 0, 3227, 69907, 111053, 0, 2915, 11502, 983212,
-    41702, 10309, 0, 0, 0, 0, 0, 0, 0, 127268, 127258, 127267, 65215, 64410,
-    127260, 71175, 0, 0, 0, 0, 0, 0, 41700, 110651, 0, 126488, 0, 0, 42495,
-    0, 0, 0, 10460, 43364, 0, 1356, 3728, 42713, 0, 0, 42342, 10914, 0,
-    42489, 64310, 66896, 41861, 42297, 0, 0, 41860, 64862, 0, 0, 5289, 42336,
-    128658, 0, 92529, 42410, 0, 120624, 0, 2649, 74493, 0, 126635, 0, 3382,
-    42449, 9081, 1658, 11936, 93019, 113814, 11269, 0, 0, 43100, 69888,
-    65508, 0, 0, 121451, 0, 0, 0, 0, 0, 4732, 128283, 0, 0, 0, 121113, 2236,
-    126551, 0, 6048, 0, 0, 73965, 0, 0, 0, 0, 10151, 9681, 4475, 0, 64735,
-    2100, 0, 0, 6035, 0, 123599, 10296, 0, 0, 0, 0, 0, 0, 0, 983307, 68488,
-    10392, 10328, 0, 43462, 0, 0, 0, 8979, 0, 0, 983304, 0, 0, 0, 10977, 0,
-    10344, 0, 65299, 10408, 0, 0, 121187, 66505, 0, 0, 0, 0, 0, 0, 43074,
-    73799, 0, 0, 0, 0, 3446, 0, 0, 128692, 0, 0, 119582, 4474, 0, 43093,
-    6282, 0, 0, 127372, 0, 0, 0, 0, 0, 0, 0, 0, 66910, 67811, 92277, 0,
-    64948, 0, 74347, 0, 0, 0, 983962, 8194, 0, 121165, 11010, 0, 8893, 0,
-    983969, 0, 0, 0, 983317, 7925, 0, 0, 113825, 0, 1352, 11069, 7707, 0,
-    126486, 0, 0, 0, 0, 65605, 6040, 0, 10071, 0, 128156, 43750, 0, 8899,
-    69873, 0, 0, 983311, 128208, 7820, 69615, 0, 0, 7746, 1492, 0, 0, 0,
-    66866, 0, 11788, 65913, 0, 0, 43095, 0, 0, 92265, 2999, 0, 120720, 0,
-    371, 0, 6023, 0, 0, 11708, 0, 0, 6323, 0, 0, 0, 8938, 6043, 65866, 0, 0,
-    0, 72419, 0, 129480, 2589, 74332, 1689, 7802, 0, 0, 0, 0, 66704, 0, 0, 0,
-    0, 128127, 6049, 0, 4027, 0, 0, 111334, 111333, 1503, 111331, 0, 111337,
-    11951, 111335, 2387, 0, 0, 8289, 111330, 7326, 66514, 65514, 0, 64865, 0,
-    9668, 0, 0, 0, 0, 93060, 6036, 92768, 4026, 74089, 127091, 0, 0, 75044,
-    110821, 0, 110819, 0, 0, 0, 0, 6021, 0, 128288, 0, 43155, 0, 110822, 0,
-    111343, 42691, 111341, 111340, 0, 166, 0, 0, 0, 10623, 408, 0, 111339,
-    13298, 0, 7426, 43694, 0, 0, 8811, 0, 0, 0, 0, 0, 74134, 983054, 0,
-    127811, 0, 0, 0, 6645, 646, 128813, 0, 42129, 0, 120880, 0, 8697, 0,
-    120936, 0, 0, 0, 0, 5809, 1950, 0, 92432, 68339, 0, 42136, 0, 0, 0, 0, 0,
-    0, 111354, 983965, 0, 0, 111349, 111348, 43330, 111346, 111353, 111352,
-    41567, 111350, 0, 0, 0, 0, 111345, 111344, 8285, 0, 4509, 0, 128361, 0,
-    0, 0, 0, 0, 41727, 0, 0, 0, 0, 0, 0, 0, 74512, 7027, 3886, 0, 74023,
+    0, 0, 0, 92898, 42567, 0, 0, 73886, 0, 129988, 12326, 0, 0, 0, 0, 11355,
+    0, 0, 0, 0, 69437, 0, 129803, 129811, 119537, 72327, 43005, 65342,
+    118902, 0, 0, 8644, 0, 0, 11186, 74296, 41909, 0, 128682, 2791, 0, 1891,
+    0, 0, 41907, 66647, 0, 0, 41906, 0, 0, 10773, 70206, 0, 0, 0, 6412, 2061,
+    8520, 13146, 0, 0, 83275, 65902, 2882, 0, 126232, 65852, 0, 983306, 0,
+    123627, 0, 0, 0, 0, 0, 128098, 0, 0, 0, 70871, 0, 0, 0, 120087, 0, 0, 0,
+    93971, 0, 3844, 6842, 0, 0, 6612, 0, 0, 0, 0, 0, 783, 0, 0, 0, 983064,
+    68032, 119225, 0, 0, 68378, 4556, 67839, 68480, 78663, 120069, 120074,
+    67657, 10510, 4382, 74218, 42194, 0, 0, 9177, 8902, 93958, 9839, 0,
+    120700, 0, 0, 63999, 41904, 41917, 9788, 120973, 0, 1862, 0, 0, 0, 41915,
+    0, 41919, 63994, 41914, 7981, 0, 0, 0, 0, 0, 0, 0, 120834, 0, 0, 0, 6784,
+    78788, 0, 0, 0, 0, 127534, 127484, 127476, 0, 0, 983941, 64289, 65289, 0,
+    129539, 129575, 64509, 0, 0, 126505, 11051, 0, 66635, 55259, 65885, 0,
+    128310, 0, 0, 0, 0, 7500, 4506, 0, 0, 0, 0, 0, 126609, 4040, 128680,
+    6167, 0, 0, 0, 0, 0, 0, 7830, 43036, 0, 0, 63990, 19947, 63988, 63987, 0,
+    63993, 10440, 9611, 2244, 71883, 0, 65260, 63986, 11446, 63984, 92641,
+    3435, 119652, 0, 119108, 0, 128632, 0, 0, 12748, 0, 0, 92705, 0, 78790,
+    0, 0, 63956, 42458, 63954, 63953, 63960, 63959, 63958, 11596, 0, 11469,
+    69267, 42306, 2723, 0, 0, 70027, 0, 0, 0, 128093, 2880, 0, 0, 0, 0,
+    128506, 3498, 4378, 0, 129825, 0, 65551, 118928, 0, 43387, 0, 64415,
+    128898, 0, 0, 0, 0, 8161, 393, 12013, 0, 92216, 126479, 63965, 63964,
+    63963, 42345, 0, 0, 63967, 42498, 0, 2927, 0, 63961, 0, 0, 983927, 0,
+    69699, 0, 42340, 0, 0, 0, 10730, 0, 69688, 0, 64187, 0, 0, 12437, 9813,
+    0, 42453, 1604, 9565, 0, 69701, 69235, 42414, 110724, 129196, 0, 42301,
+    11372, 0, 917973, 0, 0, 63980, 63979, 63978, 0, 128207, 12017, 63982,
+    63981, 73687, 0, 63977, 63976, 72794, 0, 0, 0, 63971, 4347, 4416, 63968,
+    11009, 63974, 63973, 402, 69390, 13147, 0, 0, 64646, 13228, 0, 0, 3515,
+    74252, 65261, 0, 0, 6259, 0, 0, 0, 0, 0, 0, 74813, 74425, 0, 126998,
+    126114, 0, 0, 0, 129933, 983698, 0, 0, 74301, 0, 0, 0, 0, 74060, 0, 0,
+    66235, 5145, 0, 0, 128394, 0, 73120, 0, 7402, 0, 0, 0, 7952, 7832, 43382,
+    66616, 0, 983931, 120852, 0, 127875, 64866, 0, 0, 0, 78784, 74248, 0, 0,
+    983196, 0, 0, 0, 78656, 42390, 0, 0, 983921, 0, 0, 0, 0, 9508, 0, 9544,
+    11520, 0, 0, 3377, 0, 129562, 0, 0, 0, 0, 0, 66280, 0, 127198, 0, 0, 0,
+    1955, 119565, 0, 0, 3076, 0, 42168, 73049, 66304, 0, 0, 8917, 42403, 301,
+    0, 0, 0, 0, 0, 0, 0, 0, 67819, 92987, 0, 0, 0, 983204, 0, 69403, 3182, 0,
+    0, 0, 0, 0, 42169, 123162, 74244, 0, 42329, 0, 66326, 6841, 0, 128913, 0,
+    1219, 3934, 71276, 11483, 74510, 101122, 0, 42442, 65470, 69565, 0,
+    64622, 7759, 42482, 485, 0, 0, 42290, 0, 0, 42280, 0, 0, 11655, 64379,
+    127913, 42431, 10126, 42318, 0, 119631, 74397, 42470, 0, 68315, 0,
+    110829, 74041, 0, 0, 0, 5411, 0, 0, 0, 64205, 0, 64206, 42393, 64478,
+    1310, 125007, 0, 12052, 10643, 55271, 72727, 0, 121045, 0, 0, 118852, 0,
+    0, 0, 0, 113826, 0, 0, 64385, 0, 0, 0, 0, 0, 0, 93848, 92560, 2713, 0,
+    9650, 0, 0, 120602, 1406, 0, 78174, 92659, 0, 68223, 0, 0, 0, 0, 43475,
+    0, 65287, 1508, 127938, 8779, 10569, 75034, 0, 0, 0, 0, 0, 0, 0, 70786,
+    0, 0, 128344, 9185, 0, 42932, 43403, 0, 0, 0, 0, 0, 0, 0, 0, 12955, 0,
+    2888, 0, 0, 0, 0, 0, 0, 0, 2878, 0, 0, 0, 0, 0, 0, 129028, 13203, 0,
+    10429, 10365, 0, 0, 127165, 7503, 0, 113676, 68381, 119658, 0, 8986, 0,
+    10632, 11934, 11452, 1332, 0, 0, 0, 0, 73741, 1791, 8850, 9288, 0, 2892,
+    0, 43394, 555, 0, 0, 0, 0, 64172, 118899, 0, 0, 0, 0, 8854, 0, 5858,
+    73101, 10582, 0, 0, 1361, 0, 0, 7905, 0, 65256, 0, 41210, 0, 0, 71884, 0,
+    0, 0, 6828, 0, 92302, 0, 1342, 68440, 0, 64161, 10903, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 126467, 41972, 0, 0, 0, 9127, 0,
+    66619, 126489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11620, 0, 1149, 68316, 0, 0, 0,
+    0, 0, 92492, 0, 118784, 0, 0, 0, 12838, 0, 118819, 0, 0, 0, 0, 41087, 0,
+    0, 0, 0, 12036, 0, 0, 0, 0, 0, 64428, 12227, 0, 0, 0, 0, 125248, 120964,
+    0, 0, 0, 0, 0, 69566, 0, 0, 0, 0, 0, 1743, 0, 0, 0, 65186, 0, 0, 0, 0, 0,
+    64439, 0, 68062, 0, 111259, 111258, 43866, 0, 111263, 3395, 9362, 111260,
+    0, 111257, 111256, 111255, 0, 0, 41091, 3426, 1344, 111249, 111248,
+    126215, 4735, 11111, 6119, 111251, 42699, 0, 0, 74818, 1423, 0, 0, 0, 0,
+    12039, 10559, 0, 0, 0, 9472, 67734, 11929, 0, 0, 0, 0, 128826, 0, 11579,
+    0, 0, 128364, 0, 92185, 0, 0, 1004, 92584, 0, 0, 0, 0, 0, 2556, 0, 0,
+    72790, 0, 0, 9686, 0, 0, 0, 70109, 111102, 0, 10718, 13154, 111100, 9139,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 130035, 41708, 12860, 41703, 0, 42090, 5403,
+    10352, 73917, 129144, 111096, 0, 5140, 3753, 118785, 41704, 0, 43078,
+    127789, 111092, 129360, 0, 983205, 92362, 0, 0, 2410, 92525, 0, 0, 0, 0,
+    0, 0, 0, 0, 119253, 0, 126601, 0, 2066, 74199, 0, 43463, 10659, 119623,
+    68863, 0, 1336, 0, 0, 69463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126639, 0, 272,
+    0, 0, 0, 0, 983946, 128133, 0, 0, 124940, 0, 1190, 42146, 1335, 42177,
+    43867, 0, 0, 10448, 0, 125041, 0, 0, 2099, 5120, 2409, 7799, 0, 74424, 0,
+    126581, 4731, 0, 111199, 111198, 111197, 111196, 11689, 0, 74977, 9913,
+    129430, 0, 0, 0, 111195, 111194, 11694, 0, 11690, 111189, 111188, 111187,
+    11693, 111193, 111192, 43097, 11688, 0, 78797, 194, 111186, 111185,
+    111184, 0, 0, 0, 11226, 4519, 70337, 10898, 43072, 70205, 0, 0, 0, 73094,
+    10695, 0, 7540, 0, 110984, 41859, 6067, 0, 110982, 0, 110981, 13311, 0,
+    41857, 0, 8359, 121224, 12689, 0, 983131, 64577, 111204, 111203, 68183,
+    111209, 111208, 6064, 110988, 0, 110979, 74142, 0, 111201, 111200, 6051,
+    123613, 0, 0, 983369, 0, 0, 0, 0, 0, 110864, 10537, 110862, 1276, 0,
+    6549, 6052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1960, 0, 71232, 66297, 0, 129313,
+    0, 0, 1345, 111213, 111212, 111211, 8956, 43083, 0, 111215, 64682, 0,
+    6430, 69563, 111210, 119814, 0, 0, 0, 119817, 0, 492, 43087, 0, 0, 0, 0,
+    0, 2582, 0, 0, 7444, 72863, 0, 2297, 111243, 73837, 0, 0, 65096, 197,
+    74183, 0, 69571, 111241, 111240, 0, 66515, 43550, 119829, 111229, 111228,
+    93764, 111226, 0, 0, 111231, 111230, 71686, 1799, 0, 42148, 74336, 0, 0,
+    65340, 111220, 110974, 2262, 111217, 111224, 74931, 111222, 10896, 0, 0,
+    0, 0, 6338, 111003, 110997, 110994, 111006, 111002, 111005, 0, 111279,
+    111278, 111277, 72133, 0, 111273, 111272, 110961, 3171, 6623, 4961, 0,
+    886, 55216, 8654, 110965, 111270, 74390, 64603, 111267, 129283, 68122, 0,
+    43084, 0, 0, 0, 0, 69693, 8994, 10944, 65938, 111239, 111238, 111237,
+    111236, 66279, 92890, 42510, 0, 0, 6804, 0, 1947, 0, 0, 0, 42759, 0,
+    1705, 983345, 0, 0, 0, 0, 72722, 74036, 0, 0, 66720, 111281, 111280, 0,
+    4909, 111285, 111284, 111283, 4904, 0, 43503, 1365, 9253, 42757, 0, 7462,
+    0, 0, 0, 0, 119587, 0, 917579, 92526, 0, 125035, 0, 111311, 111310, 0, 0,
+    0, 0, 93977, 0, 0, 0, 0, 3629, 0, 13005, 0, 3628, 0, 111295, 0, 0, 0, 0,
+    111290, 64809, 2928, 4905, 111083, 851, 55233, 111291, 111059, 43086,
+    9114, 43870, 42583, 9315, 4822, 4906, 121097, 2847, 111028, 10330, 0,
+    1251, 7777, 41852, 125059, 111327, 111032, 111325, 12646, 0, 10259, 0,
+    65821, 75046, 6018, 0, 111324, 111323, 111322, 68372, 111319, 111318,
+    71893, 2558, 0, 64584, 111321, 111320, 0, 0, 0, 0, 111309, 111308,
+    111307, 111306, 73987, 74599, 71895, 93012, 0, 128715, 0, 12867, 111296,
+    0, 0, 11044, 111300, 111299, 8904, 11824, 65857, 0, 128674, 129027, 4387,
+    0, 0, 0, 0, 0, 0, 0, 11842, 0, 0, 0, 5136, 1968, 983041, 126627, 1337, 0,
+    0, 0, 0, 66506, 0, 0, 0, 0, 42314, 121384, 0, 0, 6120, 0, 65670, 68128,
+    0, 43082, 6016, 0, 42284, 71894, 4276, 111314, 3619, 41638, 69691, 0,
+    42322, 8853, 111043, 0, 490, 0, 13231, 68384, 72310, 65350, 0, 0, 0,
+    68245, 42435, 6154, 0, 65354, 0, 0, 42397, 334, 72732, 42416, 65359,
+    65273, 74634, 128227, 4442, 10364, 0, 778, 41626, 42455, 7989, 0, 3227,
+    69907, 111053, 0, 2915, 11502, 983212, 41702, 10309, 0, 0, 0, 0, 0, 0, 0,
+    127268, 127258, 127267, 65215, 64410, 127260, 71175, 0, 0, 0, 0, 0, 0,
+    41700, 110651, 69266, 126488, 0, 0, 42495, 0, 0, 0, 10460, 43364, 0,
+    1356, 3728, 42713, 0, 0, 42342, 10914, 0, 42489, 64310, 66896, 41861,
+    42297, 0, 0, 41860, 64862, 0, 0, 5289, 42336, 128658, 0, 92529, 42410,
+    71129, 120624, 0, 2649, 74493, 0, 126635, 0, 3382, 42449, 9081, 1658,
+    11936, 93019, 113814, 11269, 0, 0, 43100, 69888, 65508, 0, 0, 121451, 0,
+    0, 0, 0, 69272, 4732, 128283, 0, 0, 0, 121113, 2236, 126551, 0, 6048, 0,
+    0, 73965, 0, 0, 0, 0, 10151, 9681, 4475, 0, 64735, 2100, 0, 0, 6035, 0,
+    123599, 10296, 0, 0, 0, 0, 0, 0, 0, 983307, 68488, 10392, 10328, 0,
+    43462, 0, 0, 0, 8979, 0, 0, 983304, 0, 0, 0, 10977, 0, 10344, 0, 65299,
+    10408, 0, 0, 121187, 66505, 0, 0, 0, 0, 0, 0, 43074, 73799, 0, 0, 0, 0,
+    3446, 0, 129891, 128692, 0, 0, 119582, 4474, 0, 43093, 6282, 0, 0,
+    127372, 0, 0, 0, 129881, 0, 0, 0, 0, 66910, 67811, 92277, 0, 64948, 0,
+    74347, 0, 0, 0, 983962, 8194, 0, 121165, 11010, 0, 8893, 0, 983969, 0, 0,
+    0, 983317, 7925, 0, 0, 113825, 0, 1352, 11069, 7707, 0, 126486, 0, 0, 0,
+    0, 65605, 6040, 0, 10071, 0, 128156, 43750, 0, 8899, 69873, 0, 0, 983311,
+    128208, 7820, 69615, 0, 0, 7746, 1492, 0, 0, 0, 66866, 0, 11788, 65913,
+    0, 0, 43095, 0, 0, 92265, 2999, 0, 120720, 0, 371, 0, 6023, 0, 0, 11708,
+    0, 0, 6323, 0, 0, 0, 8938, 6043, 65866, 0, 0, 0, 72419, 0, 129480, 2589,
+    74332, 1689, 7802, 0, 0, 0, 0, 66704, 0, 129992, 0, 0, 128127, 6049, 0,
+    4027, 0, 0, 111334, 111333, 1503, 111331, 0, 111337, 11951, 111335, 2387,
+    0, 0, 8289, 111330, 7326, 66514, 65514, 0, 64865, 0, 9668, 0, 0, 0, 0,
+    93060, 6036, 92768, 4026, 74089, 127091, 0, 0, 75044, 110821, 0, 110819,
+    0, 0, 0, 0, 6021, 0, 128288, 0, 43155, 0, 110822, 0, 111343, 42691,
+    111341, 111340, 2246, 166, 0, 0, 0, 10623, 408, 0, 111339, 13298, 0,
+    7426, 43694, 0, 0, 8811, 0, 0, 0, 0, 0, 74134, 983054, 0, 127811, 0, 0,
+    0, 6645, 646, 128813, 0, 42129, 0, 120880, 0, 8697, 0, 120936, 0, 0, 0,
+    0, 5809, 1950, 0, 92432, 68339, 0, 42136, 0, 0, 0, 0, 0, 0, 111354,
+    983965, 0, 0, 111349, 111348, 43330, 111346, 111353, 111352, 41567,
+    111350, 0, 0, 0, 0, 111345, 111344, 8285, 0, 4509, 0, 128361, 0, 0,
+    129851, 0, 0, 41727, 0, 0, 0, 0, 0, 0, 0, 74512, 7027, 3886, 0, 74023,
     92888, 0, 0, 126092, 94058, 119855, 0, 121455, 11707, 119852, 0, 7939,
     10342, 92460, 72747, 121408, 917569, 0, 71198, 94077, 119847, 0, 0, 7201,
     0, 0, 120866, 983968, 1540, 0, 0, 0, 0, 0, 41718, 71177, 0, 0, 128001, 0,
     0, 119040, 0, 9619, 120840, 0, 0, 0, 0, 3560, 0, 6070, 129000, 0, 2922,
     6082, 70147, 65009, 983954, 0, 0, 0, 0, 0, 0, 3607, 65863, 0, 92487,
-    42153, 121042, 0, 983843, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, 0, 0, 0,
-    0, 0, 0, 0, 0, 638, 6083, 126976, 0, 0, 2305, 0, 0, 0, 6056, 10878, 0, 0,
-    6085, 0, 0, 3915, 0, 0, 0, 0, 0, 0, 4028, 1787, 0, 43096, 0, 0, 1768, 0,
-    0, 0, 128125, 0, 0, 583, 129137, 0, 0, 66004, 0, 0, 0, 0, 0, 55267,
+    42153, 121042, 0, 983843, 2032, 0, 0, 0, 0, 129985, 0, 43085, 6057, 0, 0,
+    0, 0, 0, 0, 0, 0, 638, 6083, 126976, 0, 0, 2305, 0, 0, 0, 6056, 10878, 0,
+    0, 6085, 0, 0, 3915, 0, 0, 0, 0, 0, 0, 4028, 1787, 0, 43096, 0, 0, 1768,
+    0, 0, 0, 128125, 0, 0, 583, 129137, 0, 0, 66004, 0, 0, 0, 0, 0, 55267,
     120810, 128995, 43075, 65049, 0, 74531, 0, 93009, 70694, 0, 0, 129375,
     9869, 128815, 1771, 0, 0, 0, 0, 0, 0, 119115, 113708, 0, 0, 74101, 0, 0,
-    0, 0, 0, 0, 0, 0, 12539, 123631, 0, 0, 0, 73862, 69842, 9897, 0, 100561,
-    0, 0, 0, 0, 0, 8931, 0, 1415, 8866, 74552, 0, 128312, 0, 983576, 43106,
-    0, 71089, 1580, 92278, 68424, 0, 0, 7658, 3440, 78215, 1562, 0, 0,
-    129031, 0, 0, 0, 0, 0, 0, 6028, 68900, 42892, 0, 111016, 0, 0, 0, 0, 0,
-    128269, 0, 66776, 42946, 127276, 129124, 0, 0, 0, 11599, 0, 11602, 11591,
-    11574, 11581, 11597, 11598, 6253, 11571, 11584, 70273, 11569, 0, 8906, 0,
-    5755, 2636, 0, 10815, 11619, 129094, 0, 7815, 11616, 11617, 70064, 11618,
-    11604, 7869, 11612, 0, 42152, 0, 0, 0, 92586, 126247, 0, 92173, 0, 0,
-    6616, 0, 0, 120875, 391, 0, 0, 0, 42296, 11588, 0, 0, 0, 68397, 0, 0,
-    42335, 983188, 0, 0, 7538, 94040, 0, 42491, 0, 0, 128088, 4576, 0, 0,
-    43809, 4277, 0, 3563, 0, 42338, 368, 0, 0, 42412, 0, 78209, 0, 0, 43814,
-    983616, 1849, 0, 9921, 42451, 4253, 0, 0, 0, 42404, 64657, 73919, 3618,
-    78338, 0, 0, 0, 0, 0, 929, 6827, 42035, 0, 0, 0, 67847, 0, 0, 0, 0, 0, 0,
-    0, 0, 4578, 64513, 0, 0, 0, 71049, 68090, 0, 43305, 0, 73462, 0, 0,
-    42048, 10166, 0, 127095, 113810, 983127, 0, 983972, 0, 0, 42483, 0, 0, 0,
-    42291, 0, 71047, 0, 6641, 525, 66404, 0, 8763, 125091, 0, 0, 0, 0, 0,
-    42504, 42581, 74280, 6915, 42310, 0, 8559, 0, 983975, 125100, 0, 0,
-    11666, 8679, 0, 1576, 42423, 0, 0, 73840, 983092, 11374, 0, 10889,
-    129076, 0, 42462, 0, 77982, 0, 2718, 42424, 0, 0, 127166, 0, 1179, 0, 0,
-    0, 363, 11015, 72229, 0, 43857, 0, 66692, 0, 0, 0, 11041, 0, 0, 0, 0, 0,
-    125184, 0, 92520, 0, 9492, 66709, 9212, 12833, 0, 0, 1297, 0, 0, 0, 0, 0,
-    0, 12924, 0, 0, 10090, 125249, 0, 42505, 0, 42507, 0, 42311, 92940,
-    120919, 68401, 10759, 0, 0, 120924, 42351, 42919, 9398, 66292, 0, 9422,
-    0, 0, 0, 0, 0, 129440, 92575, 1603, 0, 0, 0, 0, 0, 69703, 11250, 0, 0,
-    10546, 0, 0, 11600, 0, 2797, 73821, 42427, 306, 714, 3058, 120154, 0, 0,
-    0, 42395, 0, 11607, 0, 11198, 127512, 0, 72232, 129067, 0, 42433, 0,
-    7603, 74063, 0, 42141, 0, 0, 0, 129085, 8244, 362, 125069, 0, 8037, 0, 0,
-    0, 0, 41606, 66696, 77912, 0, 2093, 0, 0, 0, 41604, 0, 0, 0, 0, 10523,
-    1446, 42320, 0, 0, 64773, 42472, 0, 0, 1722, 5581, 0, 64496, 0, 0, 64914,
-    0, 42620, 128603, 124988, 0, 0, 10549, 0, 71190, 0, 0, 0, 0, 0, 71712, 0,
-    0, 0, 0, 0, 0, 0, 7684, 66338, 0, 1174, 0, 0, 983621, 0, 0, 0, 42277, 0,
-    42456, 65667, 0, 0, 0, 0, 42417, 0, 0, 120812, 42304, 0, 0, 0, 74443,
-    127894, 0, 8313, 0, 0, 1316, 66690, 0, 0, 0, 0, 0, 0, 66844, 983696, 0,
-    0, 0, 65200, 3383, 0, 0, 70063, 0, 0, 0, 42420, 119185, 0, 0, 983898, 0,
-    121079, 0, 0, 42343, 124980, 42706, 1751, 42496, 65742, 13166, 0, 0, 0,
-    0, 0, 42683, 12697, 0, 0, 0, 125047, 0, 42346, 0, 0, 3757, 0, 0, 121075,
-    65869, 0, 9247, 74976, 3193, 0, 0, 42459, 7596, 7921, 0, 74095, 0, 42499,
-    11590, 66006, 0, 42307, 0, 43953, 0, 0, 1023, 474, 0, 0, 0, 0, 42487, 0,
-    0, 0, 42295, 0, 121474, 72237, 0, 9835, 0, 127782, 0, 12275, 0, 0, 8595,
-    0, 0, 0, 0, 0, 10118, 0, 129156, 0, 0, 0, 0, 0, 0, 699, 0, 120923, 11601,
-    0, 92941, 0, 7581, 0, 92530, 0, 0, 0, 7765, 65583, 0, 0, 64597, 43444, 0,
-    92197, 0, 64279, 7036, 5823, 1937, 0, 917854, 65415, 13308, 65417, 0,
-    65217, 0, 0, 11017, 0, 0, 7294, 0, 0, 0, 0, 42466, 65416, 68858, 0,
-    71350, 65413, 92381, 126498, 12964, 42240, 1941, 0, 0, 1713, 0, 0, 0,
-    11407, 42441, 128262, 6297, 0, 0, 0, 42481, 0, 0, 7179, 42289, 0, 120921,
-    969, 0, 0, 0, 6165, 0, 0, 0, 0, 42402, 0, 0, 0, 129511, 0, 72234, 0, 0,
-    64876, 92635, 6046, 0, 6208, 128870, 129309, 73749, 0, 0, 42422, 0, 0,
-    128155, 73775, 338, 0, 121369, 0, 42328, 10767, 0, 8115, 0, 0, 0, 0,
-    92687, 0, 0, 0, 0, 73029, 0, 0, 0, 71687, 4486, 128082, 0, 0, 10925, 0,
-    0, 0, 0, 42309, 10257, 0, 10273, 7668, 10305, 42461, 74882, 42349, 8832,
-    0, 0, 10644, 0, 129531, 42278, 0, 0, 69874, 0, 0, 42429, 0, 42316, 11223,
-    0, 0, 42468, 0, 0, 0, 65402, 0, 0, 72235, 0, 0, 41963, 120990, 0, 0,
-    125013, 6823, 42391, 1588, 65400, 0, 0, 0, 65398, 787, 0, 0, 0, 0, 2078,
-    127239, 65399, 0, 0, 0, 65401, 0, 121196, 0, 0, 644, 0, 71335, 0, 3659,
-    0, 0, 0, 13107, 92669, 0, 10502, 74457, 0, 11221, 41554, 0, 0, 0, 41557,
+    0, 0, 0, 0, 0, 0, 12539, 123631, 0, 0, 129846, 73862, 69842, 9897, 0,
+    100561, 0, 0, 0, 0, 0, 8931, 0, 1415, 8866, 74552, 0, 128312, 0, 983566,
+    43106, 127275, 71089, 1580, 92278, 68424, 0, 0, 7658, 3440, 78215, 1562,
+    0, 0, 129031, 0, 0, 0, 0, 0, 0, 6028, 68900, 42892, 0, 111016, 0, 0, 0,
+    0, 0, 128269, 0, 66776, 42946, 127276, 129124, 0, 0, 120510, 11599, 0,
+    11602, 11591, 11574, 11581, 11597, 11598, 6253, 11571, 11584, 70273,
+    11569, 0, 8906, 0, 5755, 2636, 0, 10815, 11619, 129094, 0, 7815, 11616,
+    11617, 70064, 11618, 11604, 7869, 11612, 0, 42152, 0, 0, 0, 92586,
+    126247, 0, 92173, 0, 0, 6616, 0, 0, 120875, 391, 0, 0, 0, 42296, 11588,
+    0, 0, 0, 68397, 0, 0, 42335, 983188, 0, 0, 7538, 94040, 0, 42491, 0, 0,
+    128088, 4576, 0, 0, 43809, 4277, 0, 3563, 0, 42338, 368, 0, 0, 42412, 0,
+    78209, 0, 0, 43814, 983616, 1849, 0, 9921, 42451, 4253, 0, 0, 0, 42404,
+    64657, 73919, 3618, 78338, 0, 0, 0, 0, 0, 929, 6827, 42035, 0, 0, 0,
+    67847, 0, 0, 0, 0, 0, 0, 0, 0, 4578, 64513, 0, 0, 0, 71049, 68090,
+    127086, 43305, 0, 73462, 0, 0, 42048, 10166, 0, 127095, 113810, 983127,
+    0, 983972, 0, 0, 42483, 0, 0, 0, 42291, 0, 71047, 0, 6641, 525, 66404, 0,
+    8763, 125091, 0, 0, 0, 0, 0, 42504, 42581, 74280, 6915, 42310, 0, 8559,
+    0, 983975, 125100, 0, 0, 11666, 8679, 0, 1576, 42423, 0, 0, 73840,
+    983092, 11374, 0, 10889, 129076, 0, 42462, 0, 77982, 0, 2718, 42424, 0,
+    0, 127166, 0, 1179, 0, 0, 0, 363, 11015, 72229, 0, 43857, 0, 66692, 0, 0,
+    0, 11041, 72018, 0, 0, 0, 0, 125184, 0, 92520, 0, 9492, 66709, 9212,
+    12833, 0, 0, 1297, 0, 0, 0, 0, 0, 0, 12924, 0, 0, 10090, 125249, 0,
+    42505, 0, 42507, 0, 42311, 92940, 120919, 68401, 10759, 0, 0, 120924,
+    42351, 42919, 9398, 66292, 0, 9422, 0, 0, 0, 0, 0, 129440, 92575, 1603,
+    0, 0, 0, 0, 0, 69703, 11250, 0, 0, 10546, 0, 0, 11600, 0, 2797, 73821,
+    42427, 306, 714, 3058, 120154, 0, 0, 0, 42395, 0, 11607, 0, 11198,
+    127512, 0, 72232, 129067, 0, 42433, 0, 7603, 74063, 0, 42141, 0, 0, 0,
+    129085, 8244, 362, 125069, 0, 8037, 0, 0, 0, 0, 41606, 66696, 77912, 0,
+    2093, 0, 120676, 0, 41604, 0, 0, 0, 0, 10523, 1446, 42320, 0, 0, 64773,
+    42472, 0, 0, 1722, 5581, 0, 64496, 0, 0, 64914, 0, 42620, 128603, 124988,
+    0, 0, 10549, 0, 71190, 0, 0, 0, 0, 0, 71712, 0, 0, 0, 0, 0, 0, 0, 7684,
+    66338, 0, 1174, 0, 0, 983621, 0, 0, 0, 42277, 0, 42456, 65667, 0, 0, 0,
+    0, 42417, 0, 0, 120812, 42304, 0, 0, 0, 74443, 127894, 0, 8313, 0, 0,
+    1316, 66690, 0, 0, 0, 0, 0, 0, 66844, 983696, 0, 0, 0, 65200, 3383, 0, 0,
+    70063, 0, 0, 0, 42420, 119185, 0, 0, 983898, 0, 121079, 0, 0, 42343,
+    124980, 42706, 1751, 42496, 65742, 13166, 0, 0, 0, 0, 0, 42683, 12697, 0,
+    0, 0, 125047, 0, 42346, 0, 0, 3757, 0, 0, 121075, 65869, 0, 9247, 74976,
+    3193, 0, 0, 42459, 7596, 7921, 0, 74095, 0, 42499, 11590, 66006, 0,
+    42307, 0, 43953, 0, 0, 1023, 474, 0, 0, 0, 0, 42487, 0, 0, 0, 42295, 0,
+    121474, 72237, 0, 9835, 0, 127782, 0, 12275, 0, 0, 8595, 0, 0, 0, 0, 0,
+    10118, 0, 129156, 0, 0, 0, 0, 0, 0, 699, 0, 120923, 11601, 0, 92941, 0,
+    7581, 0, 92530, 0, 0, 0, 7765, 65583, 0, 0, 64597, 43444, 0, 92197, 0,
+    64279, 7036, 5823, 1937, 0, 917854, 65415, 13308, 65417, 0, 65217, 0, 0,
+    11017, 0, 0, 7294, 0, 0, 0, 0, 42466, 65416, 68858, 0, 71350, 65413,
+    92381, 126498, 12964, 42240, 1941, 0, 0, 1713, 0, 0, 0, 11407, 42441,
+    128262, 6297, 0, 0, 0, 42481, 0, 0, 7179, 42289, 0, 120921, 969, 0, 0, 0,
+    6165, 0, 0, 0, 0, 42402, 0, 0, 0, 129511, 0, 72234, 0, 0, 64876, 92635,
+    6046, 0, 6208, 128870, 129309, 73749, 0, 0, 42422, 0, 0, 128155, 73775,
+    338, 0, 121369, 0, 42328, 10767, 0, 8115, 0, 0, 0, 0, 92687, 0, 0, 0, 0,
+    73029, 0, 0, 0, 71687, 4486, 128082, 0, 0, 10925, 0, 0, 0, 0, 42309,
+    10257, 0, 10273, 7668, 10305, 42461, 74882, 42349, 8832, 0, 0, 10644, 0,
+    129531, 42278, 0, 0, 69874, 0, 129949, 42429, 0, 42316, 11223, 0, 0,
+    42468, 0, 0, 0, 65402, 0, 0, 72235, 0, 0, 41963, 120990, 0, 0, 125013,
+    6823, 42391, 1588, 65400, 0, 0, 0, 65398, 787, 0, 0, 0, 0, 2078, 127239,
+    65399, 0, 0, 0, 65401, 0, 121196, 0, 113816, 644, 0, 71335, 0, 3659, 0,
+    0, 0, 13107, 92669, 0, 10502, 74457, 0, 11221, 41554, 0, 0, 0, 41557,
     11209, 0, 11070, 119221, 0, 0, 73858, 41555, 9514, 0, 66771, 64641,
     92447, 0, 7520, 73888, 77955, 0, 0, 0, 0, 0, 64527, 0, 0, 12723, 0,
     68776, 0, 0, 0, 78835, 4055, 78826, 77960, 65212, 0, 127353, 12319, 0, 0,
@@ -25024,53 +25855,54 @@
     3588, 0, 12825, 0, 0, 128569, 0, 0, 0, 0, 0, 0, 0, 0, 128449, 64499,
     65245, 127367, 1171, 127368, 69717, 127365, 1805, 8772, 0, 127363, 9930,
     65247, 0, 0, 2338, 127362, 92695, 0, 0, 0, 69219, 0, 120104, 0, 120103,
-    72221, 120106, 0, 118814, 8734, 4212, 0, 0, 66701, 0, 65862, 0, 120095,
-    42903, 0, 0, 0, 126117, 426, 0, 120098, 8251, 0, 65436, 0, 2120, 43302,
-    1224, 0, 65576, 0, 66876, 1764, 6074, 0, 12858, 0, 0, 65439, 6378, 74566,
-    0, 41960, 0, 41644, 0, 2129, 0, 9222, 0, 0, 4259, 9092, 0, 41961, 0, 0,
-    66357, 42331, 64935, 0, 0, 1293, 0, 2132, 0, 983589, 0, 2454, 0, 3613,
-    128837, 71117, 0, 0, 69681, 10978, 10840, 0, 10668, 0, 127197, 9118,
-    120164, 0, 0, 0, 1157, 64903, 8638, 0, 0, 0, 0, 0, 0, 0, 128981, 10086,
-    0, 11128, 0, 0, 65430, 74013, 6079, 0, 10764, 127910, 64435, 128051,
-    1339, 0, 65428, 1317, 8822, 0, 0, 0, 127143, 0, 0, 0, 43110, 0, 10428, 0,
-    0, 0, 5742, 43076, 4692, 0, 0, 4007, 5004, 128781, 0, 751, 6595, 6596, 0,
-    66373, 0, 0, 64908, 0, 6593, 72349, 12004, 119192, 74097, 43108, 0, 0,
-    119333, 92188, 6598, 0, 6599, 0, 93031, 74194, 0, 121483, 66674, 6597, 0,
-    73921, 0, 64745, 2281, 0, 0, 128996, 43790, 0, 2430, 41678, 0, 0, 43785,
-    113716, 0, 121263, 0, 0, 1921, 0, 19927, 70390, 65406, 0, 43786, 4284,
-    128346, 72210, 43789, 12841, 9229, 0, 42285, 0, 0, 0, 0, 3521, 0, 120888,
-    8325, 0, 65403, 0, 1854, 0, 0, 0, 0, 0, 0, 0, 0, 4344, 0, 65433, 6076, 0,
-    0, 74764, 12074, 0, 0, 0, 0, 12934, 119555, 65432, 128877, 0, 6071,
-    65434, 0, 65435, 4053, 128623, 0, 0, 0, 0, 69823, 127463, 0, 121403,
-    127473, 8421, 127472, 0, 43705, 502, 0, 65431, 0, 0, 0, 1303, 316, 7364,
-    0, 2136, 0, 120796, 64365, 43480, 92639, 4860, 0, 127877, 0, 0, 9583, 0,
-    5546, 0, 0, 0, 0, 0, 5544, 127475, 0, 70352, 5543, 128917, 72821, 12137,
-    5548, 0, 0, 10007, 0, 127523, 6077, 0, 65452, 0, 119341, 11214, 65952, 0,
-    72226, 0, 0, 1319, 74210, 65410, 67399, 92606, 0, 0, 119343, 0, 66716,
-    83513, 4691, 128619, 9345, 621, 0, 0, 122889, 65411, 0, 74575, 121246,
-    65408, 73899, 0, 9474, 2812, 119118, 65412, 3786, 65409, 8894, 83246,
-    119611, 7923, 3716, 0, 0, 0, 0, 7012, 0, 128439, 9566, 0, 94176, 0,
-    65012, 126242, 545, 9575, 0, 10050, 12718, 0, 8859, 6820, 0, 983979,
-    120740, 0, 0, 9119, 2787, 0, 983981, 8507, 2012, 7985, 0, 0, 0, 0,
-    194634, 0, 410, 0, 0, 120789, 120609, 0, 120378, 120379, 0, 0, 120374,
-    72742, 120376, 120377, 120370, 120371, 120372, 120373, 3860, 120367,
-    72205, 74031, 111131, 73685, 11748, 120365, 7941, 111134, 8749, 111132,
-    12698, 111129, 361, 110793, 845, 0, 0, 0, 4562, 72241, 2926, 0, 4569, 0,
-    110797, 43487, 0, 0, 0, 74287, 122885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6291,
-    0, 0, 0, 9734, 0, 0, 0, 0, 127754, 7359, 83523, 43863, 0, 111150, 8769,
-    111148, 111147, 111145, 4859, 111143, 111142, 0, 0, 0, 0, 12172, 111136,
-    0, 127899, 111141, 64764, 4210, 111138, 0, 804, 0, 83520, 0, 70344, 0, 0,
-    67202, 10091, 67200, 119257, 67206, 67205, 67204, 67203, 72302, 0, 0, 0,
-    128959, 0, 1425, 92259, 119229, 11049, 0, 71480, 42649, 8482, 0, 0,
-    66715, 67209, 11940, 67207, 664, 0, 0, 0, 70200, 127525, 0, 70194, 93061,
-    111155, 68474, 111153, 6032, 67218, 67217, 7430, 194670, 70191, 0, 0, 0,
-    0, 0, 41161, 0, 9765, 10993, 41162, 0, 70189, 1169, 111181, 0, 1905,
-    6034, 41164, 64744, 43236, 0, 128800, 73110, 0, 0, 788, 0, 0, 111167,
-    111128, 1663, 128976, 42901, 127237, 67211, 67210, 0, 0, 67215, 67214,
-    67213, 67212, 111160, 111159, 111158, 111157, 0, 0, 0, 111161, 43612, 0,
-    0, 0, 10855, 67223, 9355, 67221, 65198, 120355, 0, 221, 0, 0, 0, 121141,
-    7191, 118930, 72208, 125212, 0, 0, 0, 0, 67228, 67227, 43333, 67225, 0,
-    0, 0, 67229, 0, 7245, 0, 74405, 69922, 72219, 111178, 3873, 8367, 111174,
+    72221, 120106, 129924, 118814, 8734, 4212, 0, 0, 66701, 0, 65862, 0,
+    120095, 42903, 0, 0, 0, 126117, 426, 0, 120098, 8251, 0, 65436, 0, 2120,
+    43302, 1224, 0, 65576, 0, 66876, 1764, 6074, 0, 12858, 0, 0, 65439, 6378,
+    74566, 0, 41960, 0, 41644, 0, 2129, 0, 9222, 0, 0, 4259, 9092, 0, 41961,
+    0, 0, 66357, 42331, 64935, 0, 0, 1293, 0, 2132, 0, 983569, 0, 2454, 0,
+    3613, 128837, 71117, 0, 0, 69681, 10978, 10840, 0, 10668, 0, 127197,
+    9118, 120164, 0, 0, 0, 1157, 64903, 8638, 0, 101295, 0, 0, 0, 0, 0,
+    128981, 10086, 0, 11128, 0, 0, 65430, 74013, 6079, 0, 10764, 127910,
+    64435, 128051, 1339, 0, 65428, 1317, 8822, 0, 0, 0, 127143, 0, 0, 0,
+    43110, 0, 10428, 129848, 0, 0, 5742, 43076, 4692, 0, 0, 4007, 5004,
+    128781, 0, 751, 6595, 6596, 0, 66373, 0, 0, 64908, 0, 6593, 72349, 12004,
+    119192, 74097, 43108, 0, 0, 119333, 92188, 6598, 0, 6599, 0, 93031,
+    74194, 0, 121483, 66674, 6597, 0, 73921, 0, 64745, 2281, 0, 0, 128996,
+    43790, 0, 2430, 41678, 0, 0, 43785, 113716, 0, 121263, 0, 0, 1921, 0,
+    19927, 70390, 65406, 0, 43786, 4284, 128346, 72210, 43789, 12841, 9229,
+    0, 42285, 0, 0, 0, 0, 3521, 0, 120888, 8325, 0, 65403, 0, 1854, 0, 0, 0,
+    0, 0, 0, 0, 0, 4344, 0, 65433, 6076, 0, 0, 74764, 12074, 0, 0, 0, 0,
+    12934, 119555, 65432, 128877, 0, 6071, 65434, 0, 65435, 4053, 128623, 0,
+    0, 0, 917934, 69823, 127463, 0, 121403, 127473, 8421, 127472, 0, 43705,
+    502, 0, 65431, 0, 0, 0, 1303, 316, 7364, 0, 2136, 0, 120796, 64365,
+    43480, 92639, 4860, 0, 127877, 0, 129728, 9583, 0, 5546, 0, 0, 0, 0, 0,
+    5544, 127475, 0, 70352, 5543, 128917, 72821, 12137, 5548, 0, 0, 10007, 0,
+    127523, 6077, 0, 65452, 0, 119341, 11214, 65952, 0, 72226, 0, 0, 1319,
+    74210, 65410, 67399, 92606, 0, 0, 119343, 0, 66716, 83513, 4691, 128619,
+    9345, 621, 0, 0, 122889, 65411, 0, 74575, 121246, 65408, 73899, 0, 9474,
+    2812, 119118, 65412, 3786, 65409, 8894, 83246, 119611, 7923, 3716, 0, 0,
+    0, 0, 7012, 0, 128439, 9566, 0, 94176, 0, 65012, 126242, 545, 9575, 0,
+    10050, 12718, 0, 8859, 6820, 0, 129941, 120740, 0, 0, 9119, 2787, 0,
+    983981, 8507, 2012, 7985, 0, 0, 0, 0, 194634, 0, 410, 0, 0, 120789,
+    120609, 0, 120378, 120379, 0, 0, 120374, 72742, 120376, 120377, 120370,
+    120371, 120372, 120373, 3860, 120367, 72205, 74031, 111131, 73685, 11748,
+    120365, 7941, 111134, 8749, 111132, 12698, 111129, 361, 110793, 845, 0,
+    0, 0, 4562, 72241, 2926, 0, 4569, 0, 110797, 43487, 0, 0, 0, 74287,
+    122885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6291, 0, 0, 0, 9734, 0, 0, 0, 0,
+    127754, 7359, 83523, 43863, 0, 111150, 8769, 111148, 111147, 111145,
+    4859, 111143, 111142, 0, 0, 0, 0, 12172, 111136, 0, 127899, 111141,
+    64764, 4210, 111138, 0, 804, 0, 83520, 0, 70344, 0, 0, 67202, 10091,
+    67200, 119257, 67206, 67205, 67204, 67203, 72302, 0, 0, 0, 128959, 0,
+    1425, 92259, 119229, 11049, 0, 71480, 42649, 8482, 0, 0, 66715, 67209,
+    11940, 67207, 664, 0, 0, 0, 70200, 127525, 0, 70194, 93061, 111155,
+    68474, 111153, 6032, 67218, 67217, 7430, 194670, 70191, 0, 0, 0, 0, 0,
+    41161, 0, 9765, 10993, 41162, 0, 70189, 1169, 111181, 0, 1905, 6034,
+    41164, 64744, 43236, 0, 128800, 73110, 0, 0, 788, 0, 0, 111167, 111128,
+    1663, 128976, 42901, 127237, 67211, 67210, 0, 0, 67215, 67214, 67213,
+    67212, 111160, 111159, 111158, 111157, 0, 0, 0, 111161, 43612, 0, 0, 0,
+    10855, 67223, 9355, 67221, 65198, 120355, 0, 221, 0, 0, 0, 121141, 7191,
+    118930, 72208, 125212, 0, 0, 0, 0, 67228, 67227, 43333, 67225, 0, 0, 0,
+    67229, 0, 7245, 0, 74405, 69922, 72219, 111178, 3873, 8367, 111174,
     111173, 111172, 43649, 0, 111177, 111176, 0, 11164, 0, 74403, 111171,
     111170, 111169, 7682, 74404, 1462, 10235, 0, 0, 0, 0, 0, 111130, 0, 0,
     74402, 0, 92299, 0, 0, 74052, 0, 126127, 120549, 0, 64295, 0, 0, 0, 0, 0,
@@ -25079,185 +25911,188 @@
     0, 8728, 0, 10904, 73446, 19936, 7833, 0, 0, 0, 0, 92546, 0, 0, 0, 8537,
     0, 0, 0, 121244, 0, 0, 0, 128193, 0, 0, 0, 0, 3062, 0, 0, 0, 0, 0, 41160,
     41147, 41158, 0, 120777, 0, 41155, 111116, 111115, 111114, 0, 121332,
-    111119, 111118, 111117, 0, 0, 129091, 0, 0, 0, 64594, 2456, 66867, 0, 0,
-    0, 0, 3721, 0, 0, 1230, 2678, 0, 3597, 917795, 0, 0, 92215, 0, 67737,
-    8352, 0, 0, 0, 64515, 121378, 0, 129128, 67846, 0, 0, 92466, 0, 0, 71338,
-    0, 8660, 0, 0, 0, 0, 0, 4483, 0, 0, 0, 6080, 0, 0, 1746, 1315, 0, 70201,
-    0, 13140, 74508, 0, 0, 4480, 0, 111113, 111112, 0, 67979, 0, 6360, 10897,
-    111106, 605, 68302, 110737, 69875, 110735, 110736, 66681, 0, 0, 0, 0, 0,
-    0, 0, 10877, 118868, 64885, 0, 0, 0, 0, 0, 0, 345, 0, 0, 64606, 9917, 0,
-    0, 92196, 0, 1776, 8422, 43992, 0, 0, 0, 126543, 43328, 0, 0, 1295, 0,
-    42869, 0, 0, 0, 0, 128772, 65123, 125210, 11293, 11288, 0, 0, 65666, 0,
-    92369, 65420, 0, 0, 4252, 0, 0, 0, 706, 72800, 0, 0, 0, 65419, 92177, 0,
-    8419, 65421, 0, 66702, 0, 12670, 0, 0, 0, 0, 72825, 65422, 83008, 0, 0,
-    0, 0, 0, 0, 9736, 4184, 65418, 0, 0, 74035, 0, 0, 0, 0, 0, 0, 129447, 0,
-    7962, 12211, 9837, 83505, 0, 0, 5719, 0, 0, 119068, 73777, 1857, 0, 9927,
-    0, 983940, 0, 10037, 0, 73695, 78322, 78319, 7818, 0, 0, 127769, 0, 0, 0,
-    65077, 0, 78325, 78326, 78323, 43327, 43989, 0, 65828, 0, 0, 83499, 0,
-    68390, 0, 110687, 78336, 78339, 9543, 78335, 78332, 78333, 0, 127964, 0,
-    129552, 983895, 0, 69448, 0, 71429, 0, 0, 0, 11914, 69431, 0, 0, 0, 9949,
-    0, 0, 119215, 0, 12073, 0, 0, 0, 0, 0, 2260, 0, 0, 0, 0, 0, 0, 1939, 0,
-    0, 0, 69903, 0, 0, 0, 0, 6643, 92477, 0, 0, 78330, 78331, 78328, 78329,
-    0, 92551, 0, 0, 0, 0, 0, 72417, 0, 0, 0, 0, 78341, 78342, 120944, 78340,
-    129513, 127529, 92350, 3784, 78350, 0, 78348, 78349, 78345, 43324, 78343,
-    78344, 2231, 0, 0, 0, 42467, 0, 0, 42894, 78363, 13281, 78360, 78361,
-    78356, 78358, 78353, 64899, 0, 41149, 0, 43162, 68096, 41150, 0, 10571,
-    67162, 67161, 67160, 67159, 6947, 41152, 887, 9249, 6565, 64806, 74366,
-    0, 67158, 67157, 0, 10831, 67175, 67174, 120232, 65827, 43325, 67178,
-    10168, 67176, 0, 0, 9190, 128497, 9666, 41997, 0, 0, 0, 0, 0, 0, 129411,
-    0, 78508, 0, 78351, 78352, 0, 0, 72839, 983730, 0, 126604, 0, 0, 0,
-    983417, 0, 2270, 0, 0, 0, 78365, 0, 67189, 72818, 0, 0, 0, 0, 0, 0, 0,
-    72833, 0, 78366, 78367, 0, 0, 0, 0, 10137, 6121, 10995, 0, 71050, 8119,
-    0, 71052, 0, 0, 0, 0, 0, 0, 0, 1394, 0, 0, 128960, 0, 67184, 2998, 67182,
-    67181, 67188, 67187, 67186, 67185, 0, 0, 0, 0, 67180, 42003, 0, 0, 67193,
-    67192, 67191, 67190, 67197, 67196, 67195, 67194, 0, 72770, 43315, 71051,
-    0, 1593, 0, 125120, 619, 4635, 0, 72875, 0, 128859, 0, 0, 0, 0, 67199,
-    67198, 0, 42790, 42006, 0, 0, 0, 128998, 10757, 9347, 127767, 0, 0,
-    74227, 78904, 0, 74116, 128423, 121073, 120860, 0, 92427, 0, 0, 0, 0,
-    64590, 0, 4371, 0, 0, 92478, 0, 0, 73977, 0, 0, 127847, 0, 120862, 0,
-    64550, 73745, 70451, 0, 121013, 0, 0, 0, 129286, 0, 0, 0, 0, 9131, 0,
-    125214, 0, 0, 0, 64260, 0, 12606, 0, 0, 0, 0, 562, 0, 0, 129648, 66455,
-    127533, 3219, 0, 0, 0, 1037, 0, 64491, 0, 983676, 78572, 78580, 4568,
-    549, 0, 0, 0, 0, 0, 128095, 70851, 0, 0, 0, 0, 0, 0, 0, 10825, 8079,
-    118962, 0, 0, 0, 128855, 0, 13071, 0, 0, 41049, 42840, 43614, 129341,
-    74881, 74596, 127191, 5212, 0, 66402, 119191, 0, 9747, 0, 0, 0, 983989,
-    41047, 1668, 0, 0, 0, 1187, 0, 74416, 0, 0, 0, 0, 3240, 128518, 9213, 0,
-    0, 0, 127174, 69822, 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, 0, 11272, 0, 73914,
-    65048, 1909, 42172, 0, 0, 10736, 11580, 72228, 7615, 0, 0, 4237, 66576,
-    0, 65815, 68083, 0, 0, 0, 3489, 0, 0, 0, 0, 0, 0, 127146, 3796, 6800, 0,
-    65582, 0, 129521, 0, 0, 68036, 0, 0, 64857, 121213, 126493, 0, 66308, 0,
-    0, 64634, 127817, 0, 0, 0, 0, 3246, 0, 43972, 128643, 0, 0, 0, 0, 120751,
-    0, 0, 0, 0, 1496, 42827, 0, 942, 2378, 119213, 0, 0, 0, 0, 9510, 1232,
-    8139, 0, 0, 0, 11409, 0, 6382, 0, 66319, 121237, 0, 0, 0, 127887, 2374,
-    0, 8475, 120844, 66313, 0, 0, 64879, 119298, 0, 0, 70869, 0, 0, 129025,
-    0, 7705, 11942, 0, 0, 3309, 0, 0, 0, 83345, 983847, 0, 0, 1280, 6998,
-    128104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74239, 983073, 0, 0, 0, 6078,
-    121354, 0, 1475, 0, 9938, 6084, 0, 983976, 0, 0, 0, 3256, 0, 43973, 0, 0,
-    0, 8727, 0, 0, 0, 110831, 110832, 10562, 110830, 0, 0, 0, 3248, 0, 0,
-    9015, 0, 0, 3635, 64337, 0, 0, 43852, 7195, 0, 2007, 64431, 0, 0, 0, 0,
-    0, 0, 0, 65613, 77909, 0, 0, 0, 0, 119218, 7984, 11670, 74434, 127770,
-    4176, 0, 2034, 69442, 11154, 65891, 0, 0, 318, 2038, 0, 0, 0, 3649,
-    13149, 42145, 42798, 3634, 0, 0, 128483, 0, 0, 0, 11402, 120954, 94032,
-    74238, 0, 43313, 0, 0, 7938, 0, 1761, 0, 65379, 68386, 128185, 1159,
-    71183, 0, 0, 0, 66687, 120851, 0, 41680, 0, 0, 0, 1514, 11668, 67891,
-    9313, 0, 128490, 67877, 0, 41681, 0, 0, 12848, 69982, 67873, 0, 74278, 0,
-    0, 12649, 0, 0, 1194, 3242, 9761, 9555, 8598, 0, 120524, 0, 1551, 65447,
+    111119, 111118, 111117, 129878, 0, 129091, 0, 0, 0, 64594, 2456, 66867,
+    0, 0, 0, 0, 3721, 0, 0, 1230, 2678, 0, 3597, 917795, 0, 0, 92215, 0,
+    67737, 8352, 0, 0, 0, 64515, 121378, 0, 129128, 67846, 0, 0, 92466, 0, 0,
+    71338, 0, 8660, 0, 0, 0, 0, 0, 4483, 0, 0, 0, 6080, 0, 0, 1746, 1315, 0,
+    70201, 0, 13140, 74508, 0, 0, 4480, 0, 111113, 111112, 0, 67979, 0, 6360,
+    10897, 111106, 605, 68302, 110737, 69875, 110735, 110736, 66681, 0, 0, 0,
+    0, 0, 0, 0, 10877, 118868, 64885, 0, 0, 0, 0, 0, 0, 345, 0, 0, 64606,
+    9917, 0, 0, 92196, 0, 1776, 8422, 43992, 0, 0, 0, 126543, 43328, 0, 0,
+    1295, 0, 42869, 0, 0, 0, 0, 128772, 65123, 125210, 11293, 11288, 0, 0,
+    65666, 0, 92369, 65420, 0, 0, 4252, 0, 0, 0, 706, 72800, 0, 0, 129931,
+    65419, 92177, 0, 8419, 65421, 0, 66702, 0, 12670, 0, 0, 0, 0, 72825,
+    65422, 83008, 0, 0, 0, 0, 0, 0, 9736, 4184, 65418, 0, 0, 74035, 0,
+    129955, 0, 0, 0, 0, 129447, 0, 7962, 12211, 9837, 83505, 0, 0, 5719, 0,
+    0, 119068, 73777, 1857, 0, 9927, 0, 983940, 0, 10037, 0, 73695, 78322,
+    78319, 7818, 0, 0, 127769, 0, 0, 0, 65077, 0, 78325, 78326, 78323, 43327,
+    43989, 0, 65828, 0, 0, 83499, 0, 68390, 0, 110687, 78336, 78339, 9543,
+    78335, 78332, 78333, 0, 127964, 0, 129552, 983895, 0, 69448, 0, 71429, 0,
+    0, 0, 11914, 69431, 0, 0, 0, 9949, 0, 0, 119215, 0, 12073, 0, 0, 0, 0,
+    101218, 2260, 0, 0, 0, 0, 0, 0, 1939, 0, 0, 0, 69903, 0, 0, 0, 0, 6643,
+    92477, 0, 0, 78330, 78331, 78328, 78329, 0, 92551, 0, 0, 0, 0, 0, 72417,
+    0, 0, 0, 0, 78341, 78342, 120944, 78340, 129513, 127529, 92350, 3784,
+    78350, 0, 78348, 78349, 78345, 43324, 78343, 78344, 2231, 0, 0, 0, 42467,
+    0, 0, 42894, 78363, 13281, 78360, 78361, 78356, 78358, 78353, 64899, 0,
+    41149, 0, 43162, 68096, 41150, 0, 10571, 67162, 67161, 67160, 67159,
+    6947, 41152, 887, 9249, 6565, 64806, 74366, 0, 67158, 67157, 0, 10831,
+    67175, 67174, 120232, 65827, 43325, 67178, 10168, 67176, 0, 0, 9190,
+    128497, 9666, 41997, 0, 0, 0, 0, 0, 0, 129411, 0, 78508, 0, 78351, 78352,
+    0, 0, 72839, 983730, 0, 126604, 0, 0, 0, 983417, 0, 2270, 0, 129957, 0,
+    78365, 0, 67189, 72818, 0, 0, 0, 0, 0, 0, 0, 72833, 101119, 78366, 78367,
+    0, 0, 0, 0, 10137, 6121, 10995, 0, 71050, 8119, 0, 71052, 0, 0, 0, 0, 0,
+    0, 0, 1394, 0, 0, 128960, 0, 67184, 2998, 67182, 67181, 67188, 67187,
+    67186, 67185, 0, 101185, 0, 0, 67180, 42003, 0, 0, 67193, 67192, 67191,
+    67190, 67197, 67196, 67195, 67194, 0, 72770, 43315, 71051, 0, 1593, 0,
+    125120, 619, 4635, 0, 72875, 0, 128859, 0, 0, 0, 0, 67199, 67198, 0,
+    42790, 42006, 0, 0, 0, 128998, 10757, 9347, 127767, 0, 0, 74227, 78904,
+    0, 74116, 128423, 121073, 120860, 0, 92427, 0, 0, 0, 0, 64590, 0, 4371,
+    0, 0, 92478, 0, 0, 73977, 0, 0, 127847, 0, 120862, 0, 64550, 73745,
+    70451, 0, 121013, 0, 0, 0, 129286, 0, 0, 0, 0, 9131, 0, 125214, 0, 0, 0,
+    64260, 0, 12606, 0, 0, 0, 0, 562, 0, 0, 129648, 66455, 127533, 3219, 0,
+    0, 0, 1037, 0, 64491, 0, 983676, 78572, 78580, 4568, 549, 0, 0, 0, 0, 0,
+    128095, 70851, 0, 0, 0, 0, 0, 129716, 0, 10825, 8079, 118962, 0, 0, 0,
+    128855, 0, 13071, 0, 0, 41049, 42840, 43614, 129341, 74881, 74596,
+    127191, 5212, 0, 66402, 119191, 0, 9747, 0, 0, 0, 983989, 41047, 1668, 0,
+    0, 0, 1187, 0, 74416, 0, 0, 0, 0, 3240, 128518, 9213, 0, 0, 0, 127174,
+    69822, 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, 0, 11272, 0, 73914, 65048, 1909,
+    42172, 0, 0, 10736, 11580, 72228, 7615, 0, 0, 4237, 66576, 0, 65815,
+    68083, 0, 0, 0, 3489, 0, 0, 0, 0, 0, 0, 127146, 3796, 6800, 0, 65582, 0,
+    129521, 0, 0, 68036, 0, 0, 64857, 121213, 126493, 0, 66308, 0, 0, 64634,
+    127817, 0, 0, 0, 0, 3246, 0, 43972, 128643, 0, 0, 0, 0, 120751, 0, 0, 0,
+    0, 1496, 42827, 0, 942, 2378, 119213, 0, 0, 0, 0, 9510, 1232, 8139, 0, 0,
+    0, 11409, 0, 6382, 0, 66319, 121237, 0, 0, 0, 127887, 2374, 0, 8475,
+    120844, 66313, 0, 0, 64879, 119298, 0, 0, 70869, 0, 0, 129025, 0, 7705,
+    11942, 0, 0, 3309, 0, 0, 0, 83345, 983847, 0, 0, 1280, 6998, 128104, 0,
+    0, 0, 129945, 0, 0, 0, 0, 0, 0, 0, 74239, 983073, 0, 0, 0, 6078, 121354,
+    0, 1475, 0, 9938, 6084, 0, 983976, 0, 0, 0, 3256, 0, 43973, 0, 0, 0,
+    8727, 0, 0, 0, 110831, 110832, 10562, 110830, 0, 0, 0, 3248, 0, 0, 9015,
+    0, 0, 3635, 64337, 0, 0, 43852, 7195, 0, 2007, 64431, 0, 0, 0, 0, 0, 0,
+    0, 65613, 77909, 0, 0, 0, 0, 119218, 7984, 11670, 74434, 127770, 4176,
+    69248, 2034, 69442, 11154, 65891, 0, 0, 318, 2038, 0, 0, 0, 3649, 13149,
+    42145, 42798, 3634, 0, 0, 128483, 0, 0, 0, 11402, 120954, 94032, 74238,
+    0, 43313, 0, 0, 7938, 0, 1761, 0, 65379, 68386, 128185, 1159, 71183, 0,
+    0, 0, 66687, 120851, 0, 41680, 0, 0, 0, 1514, 11668, 67891, 9313, 0,
+    128490, 67877, 0, 41681, 0, 0, 12848, 69982, 67873, 0, 74278, 0, 0,
+    12649, 0, 0, 1194, 3242, 9761, 9555, 8598, 0, 120524, 0, 1551, 65447,
     129414, 126211, 0, 0, 0, 67875, 0, 3495, 66648, 125079, 0, 73024, 983228,
     0, 0, 10641, 0, 0, 0, 77845, 0, 0, 0, 0, 0, 11131, 0, 0, 0, 0, 0, 42685,
-    92354, 193, 0, 0, 0, 42667, 0, 0, 92318, 119661, 0, 1362, 9558, 0, 0, 0,
+    72017, 193, 0, 0, 0, 42667, 0, 0, 92318, 71958, 0, 1362, 9558, 0, 0, 0,
     7351, 73789, 0, 0, 4426, 0, 0, 0, 0, 7276, 42163, 5220, 0, 0, 67822, 0,
-    0, 0, 0, 41692, 0, 72283, 0, 0, 3223, 65492, 0, 0, 4549, 983687, 0, 0, 0,
-    10807, 0, 0, 0, 42182, 8688, 12866, 0, 3294, 0, 0, 128101, 0, 64514, 0,
-    43329, 0, 0, 0, 0, 119061, 0, 43422, 0, 0, 128618, 0, 42729, 0, 3215,
-    120982, 68880, 917564, 0, 0, 0, 65682, 0, 0, 65924, 0, 983804, 0, 1501,
-    0, 118807, 0, 0, 9607, 0, 65794, 72243, 983046, 10989, 0, 74399, 0, 0,
-    7152, 0, 0, 129530, 7483, 125083, 0, 8104, 70128, 7474, 0, 72233, 0, 0,
-    0, 8141, 0, 42537, 69612, 0, 0, 0, 0, 0, 127307, 42934, 0, 0, 0, 0, 0, 0,
-    64517, 0, 0, 1650, 0, 0, 128502, 7901, 3238, 0, 65556, 0, 0, 65158,
-    43416, 74959, 0, 7527, 0, 43319, 0, 0, 45, 0, 0, 0, 0, 0, 7347, 0, 0, 0,
-    13129, 0, 9084, 0, 8737, 0, 0, 0, 66808, 9639, 7912, 2620, 0, 3564, 0, 0,
-    0, 0, 75049, 0, 2853, 0, 0, 0, 0, 0, 2850, 8084, 0, 0, 71446, 92284,
-    43122, 0, 0, 0, 0, 72214, 0, 74767, 0, 7331, 110646, 0, 8245, 0, 3158,
-    92396, 3983, 0, 923, 0, 69397, 292, 0, 126548, 0, 3221, 1763, 0, 0, 0, 0,
-    7253, 0, 68391, 75002, 0, 3637, 12996, 0, 70461, 0, 0, 3228, 0, 0, 0, 0,
-    0, 0, 120833, 118939, 0, 7696, 0, 0, 0, 0, 43316, 4177, 0, 9089, 0,
-    128805, 72116, 64500, 68133, 0, 0, 1856, 100572, 0, 6379, 0, 0, 0, 3208,
-    0, 0, 0, 0, 0, 0, 129402, 0, 0, 0, 2033, 0, 0, 0, 55254, 7740, 0, 0, 0,
-    128197, 0, 93988, 0, 67612, 0, 0, 41689, 129380, 0, 0, 6646, 0, 0, 0,
-    983945, 0, 0, 4573, 0, 0, 0, 0, 0, 92961, 0, 128222, 41688, 0, 0, 0,
+    0, 0, 0, 41692, 0, 72283, 0, 0, 3223, 65492, 0, 0, 4549, 983687, 0, 0,
+    101162, 10807, 0, 0, 0, 42182, 8688, 12866, 0, 3294, 0, 0, 128101, 0,
+    64514, 0, 43329, 129989, 0, 0, 0, 119061, 0, 43422, 0, 0, 128618, 0,
+    42729, 0, 3215, 120982, 68880, 917564, 0, 0, 0, 65682, 0, 0, 65924, 0,
+    983804, 0, 1501, 0, 118807, 0, 0, 9607, 0, 65794, 72243, 983046, 10989,
+    0, 74399, 0, 0, 7152, 0, 0, 129530, 7483, 125083, 0, 8104, 70128, 7474,
+    0, 5189, 0, 0, 0, 8141, 0, 42537, 69612, 0, 0, 0, 0, 0, 127307, 42934, 0,
+    0, 0, 0, 0, 0, 64517, 0, 0, 1650, 0, 0, 128502, 7901, 3238, 0, 65556, 0,
+    0, 65158, 43416, 74959, 0, 7527, 0, 43319, 0, 0, 45, 0, 0, 0, 0, 0, 7347,
+    0, 0, 0, 13129, 0, 9084, 0, 8737, 0, 0, 0, 66808, 9639, 7912, 2620, 0,
+    3564, 0, 0, 0, 0, 75049, 0, 2853, 0, 0, 0, 0, 0, 2850, 8084, 0, 0, 71446,
+    92284, 43122, 0, 0, 0, 0, 72214, 0, 74767, 0, 7331, 110646, 0, 8245, 0,
+    3158, 92396, 3983, 0, 923, 0, 69397, 292, 0, 126548, 0, 3221, 1763, 0, 0,
+    0, 0, 7253, 0, 68391, 75002, 0, 3637, 12996, 0, 70461, 0, 0, 3228, 0, 0,
+    0, 0, 0, 0, 120833, 118939, 0, 7696, 0, 0, 0, 0, 43316, 4177, 0, 9089, 0,
+    128805, 72116, 64500, 68133, 0, 0, 1856, 100572, 0, 6379, 0, 118999, 0,
+    3208, 0, 0, 0, 0, 0, 0, 129402, 0, 0, 0, 2033, 0, 0, 0, 55254, 7740, 0,
+    0, 0, 128197, 0, 93988, 0, 67612, 0, 0, 41689, 129380, 0, 0, 6646, 0, 0,
+    0, 983945, 0, 0, 4573, 0, 0, 0, 0, 0, 92961, 0, 128222, 41688, 0, 0, 0,
     8314, 0, 0, 0, 0, 0, 66721, 0, 0, 121033, 0, 128226, 0, 0, 0, 13164, 0,
     66237, 983963, 0, 0, 0, 3257, 0, 0, 1845, 0, 0, 0, 0, 128783, 0, 0, 0, 0,
     3499, 8609, 0, 7145, 0, 0, 0, 0, 74829, 983988, 983291, 0, 0, 0, 7591, 0,
-    0, 0, 983251, 70132, 128167, 0, 0, 0, 0, 119261, 0, 0, 0, 13083, 0, 0, 0,
+    0, 0, 73778, 70132, 128167, 0, 0, 0, 0, 119261, 0, 0, 0, 13083, 0, 0, 0,
     0, 66177, 983269, 5429, 0, 0, 68168, 66181, 0, 0, 983253, 0, 0, 5433,
     67659, 0, 42776, 1547, 66176, 92428, 0, 5425, 4977, 9999, 0, 5423, 64560,
     125094, 0, 0, 0, 74122, 0, 0, 0, 128003, 4418, 66199, 0, 92300, 0, 0, 0,
     92224, 124995, 0, 11908, 0, 9360, 125101, 983202, 0, 66187, 12837,
     983288, 0, 11112, 0, 92321, 43318, 0, 0, 0, 0, 126518, 120604, 0, 983286,
-    0, 983281, 0, 983782, 0, 9958, 0, 125108, 0, 0, 0, 2433, 128602, 0, 3352,
+    0, 129595, 0, 983782, 0, 9958, 0, 125108, 0, 0, 0, 2433, 128602, 0, 3352,
     0, 0, 0, 0, 0, 0, 305, 567, 67662, 0, 69979, 65242, 0, 41695, 0, 0, 0,
     7837, 917625, 129002, 5337, 917622, 7325, 43312, 917619, 68742, 917617,
     74086, 68777, 917614, 917613, 10973, 917611, 1372, 128768, 917608,
     917607, 1254, 917605, 917604, 93967, 917602, 65228, 113753, 0, 67723,
     8068, 0, 0, 983951, 0, 3245, 64393, 119069, 0, 0, 0, 0, 0, 0, 0, 983279,
-    0, 119563, 0, 0, 0, 126638, 0, 0, 43322, 0, 0, 0, 0, 92698, 3226, 67695,
-    0, 0, 983939, 10200, 0, 128779, 127821, 0, 65610, 0, 0, 0, 3585, 250,
-    129598, 43320, 0, 0, 0, 0, 1152, 0, 1688, 0, 0, 0, 0, 0, 121040, 128340,
-    0, 0, 0, 2107, 0, 129048, 0, 0, 0, 43868, 0, 0, 0, 128239, 0, 0, 127777,
-    0, 6927, 42267, 42261, 11464, 3365, 0, 0, 0, 0, 0, 41869, 0, 0, 0, 43326,
-    0, 11519, 0, 5530, 5210, 0, 983970, 0, 5208, 0, 128842, 0, 2424, 7976, 0,
-    0, 3244, 5529, 0, 73894, 128852, 5432, 0, 5527, 0, 78484, 0, 5528, 0, 0,
-    120281, 0, 0, 43545, 120282, 0, 0, 73686, 42565, 0, 0, 3206, 120278, 0,
-    0, 0, 0, 0, 211, 3216, 83407, 0, 120998, 3220, 68750, 0, 0, 8951, 5214,
-    0, 8118, 0, 10768, 8735, 0, 5852, 124952, 0, 0, 0, 0, 0, 2623, 0, 0, 0,
-    127388, 4698, 66509, 0, 0, 4701, 0, 120289, 74225, 120284, 8267, 0, 1421,
-    66426, 0, 0, 2625, 92724, 0, 74309, 0, 0, 0, 7850, 120296, 69639, 127032,
-    0, 0, 43384, 12660, 110663, 0, 0, 110706, 110661, 0, 92380, 0, 0, 69649,
-    0, 713, 41073, 0, 3990, 0, 0, 0, 5017, 128313, 120352, 0, 0, 1030, 0,
-    983120, 9513, 0, 0, 0, 4668, 0, 120350, 0, 6339, 0, 0, 0, 64650, 0, 0,
-    74766, 983850, 8908, 0, 0, 0, 0, 10752, 13003, 68769, 0, 41307, 8732,
-    120336, 0, 41310, 0, 4696, 0, 983934, 0, 120334, 3641, 5419, 0, 0, 0, 0,
-    120344, 128129, 0, 7320, 65230, 11808, 0, 93970, 936, 13289, 0, 69892,
-    65774, 0, 65243, 0, 19953, 0, 126469, 121375, 127256, 12913, 70722,
-    68759, 0, 0, 70203, 0, 4113, 0, 2372, 1819, 0, 128053, 12152, 0, 682,
-    7655, 120330, 0, 0, 10593, 1703, 0, 0, 8033, 69953, 0, 9810, 0, 0,
-    127949, 0, 119159, 10109, 0, 73898, 0, 71730, 126704, 0, 0, 917620, 1965,
-    917621, 0, 0, 73887, 0, 0, 0, 6314, 0, 8501, 0, 0, 0, 41317, 0, 5417,
-    983586, 0, 0, 9353, 68148, 41315, 0, 11161, 0, 41314, 194892, 0, 126562,
-    119236, 634, 0, 0, 0, 69779, 4355, 12016, 0, 9654, 12856, 6924, 7660, 0,
-    0, 0, 0, 0, 42692, 0, 74604, 0, 0, 0, 680, 6274, 0, 1181, 0, 3174, 67248,
-    0, 0, 0, 0, 113776, 10650, 917603, 92295, 70672, 118965, 0, 64644,
-    126981, 0, 0, 0, 0, 983942, 0, 65302, 40989, 68239, 68230, 68234, 0, 0,
-    124989, 0, 40987, 4667, 0, 983944, 8828, 0, 0, 0, 4746, 0, 0, 2269, 4749,
-    0, 100598, 65192, 4744, 7345, 0, 242, 100595, 0, 8217, 0, 68919, 0, 0, 0,
-    0, 66790, 10850, 0, 0, 0, 0, 0, 0, 64680, 0, 0, 120562, 0, 127324, 0,
+    0, 119563, 129935, 78865, 0, 126638, 0, 0, 43322, 0, 0, 0, 0, 92698,
+    3226, 67695, 0, 0, 983939, 10200, 0, 128779, 101143, 0, 65610, 0, 0, 0,
+    3585, 250, 101142, 43320, 0, 0, 0, 0, 1152, 129849, 1688, 0, 0, 0, 0, 0,
+    121040, 128340, 0, 0, 0, 2107, 0, 129048, 0, 0, 0, 43868, 129832, 129817,
+    0, 128239, 0, 0, 127777, 0, 6927, 42267, 42261, 11464, 3365, 0, 0, 0, 0,
+    0, 41869, 0, 0, 0, 43326, 0, 11519, 0, 5530, 5210, 0, 983970, 0, 5208, 0,
+    128842, 0, 2424, 7976, 0, 0, 3244, 5529, 0, 73894, 128852, 5432, 0, 5527,
+    0, 78484, 0, 5528, 0, 0, 120281, 0, 0, 43545, 120282, 0, 0, 73686, 42565,
+    0, 0, 3206, 120278, 0, 0, 101149, 0, 0, 211, 3216, 83407, 0, 120998,
+    3220, 68750, 0, 0, 8951, 5214, 0, 8118, 0, 10768, 8735, 0, 5852, 124952,
+    0, 0, 121110, 0, 0, 2623, 0, 0, 0, 127388, 4698, 66509, 0, 0, 4701, 0,
+    120289, 74225, 120284, 8267, 0, 1421, 66426, 0, 0, 2625, 92724, 0, 74309,
+    0, 0, 0, 7850, 120296, 69639, 127032, 0, 0, 43384, 12660, 110663, 0, 0,
+    110706, 110661, 0, 92380, 0, 0, 69649, 0, 713, 41073, 0, 3990, 0, 0, 0,
+    5017, 128313, 120352, 0, 0, 1030, 0, 983120, 9513, 0, 0, 0, 4668, 0,
+    120350, 0, 6339, 0, 0, 0, 64650, 0, 0, 74766, 983850, 8908, 0, 0, 0, 0,
+    10752, 13003, 68769, 0, 41307, 8732, 120336, 0, 41310, 0, 4696, 0,
+    983934, 0, 120334, 3641, 5419, 0, 0, 0, 0, 120344, 128129, 0, 7320,
+    65230, 11808, 0, 93970, 936, 13289, 0, 69892, 65774, 0, 65243, 0, 19953,
+    0, 126469, 121375, 127256, 12913, 70722, 68759, 0, 0, 70203, 0, 4113, 0,
+    2372, 1819, 0, 128053, 12152, 0, 682, 7655, 120330, 129921, 0, 10593,
+    1703, 0, 0, 8033, 69953, 0, 9810, 0, 0, 127949, 0, 119159, 10109, 0,
+    73898, 0, 71730, 126704, 0, 0, 917620, 1965, 917621, 0, 0, 73887, 0, 0,
+    0, 6314, 0, 8501, 0, 0, 0, 41317, 0, 5417, 983582, 0, 0, 9353, 68148,
+    41315, 0, 11161, 0, 41314, 194892, 0, 126562, 119236, 634, 0, 0, 0,
+    69779, 4355, 12016, 0, 9654, 12856, 6924, 7660, 0, 0, 0, 0, 0, 42692, 0,
+    74604, 0, 0, 0, 680, 6274, 0, 1181, 0, 3174, 67248, 0, 0, 0, 0, 113776,
+    10650, 917603, 92295, 70672, 118965, 0, 64644, 126981, 0, 0, 0, 0,
+    983942, 0, 65302, 40989, 68239, 68230, 68234, 0, 0, 124989, 0, 40987,
+    4667, 0, 983944, 8828, 0, 0, 0, 4746, 0, 129840, 2269, 4749, 0, 100598,
+    65192, 4744, 7345, 0, 242, 100595, 0, 8217, 0, 68919, 0, 2245, 0, 0,
+    66790, 10850, 0, 0, 0, 0, 0, 129853, 64680, 0, 0, 120562, 0, 127324, 0,
     100551, 128721, 0, 7316, 0, 983610, 100552, 74157, 1646, 0, 0, 73995,
     120857, 129047, 0, 7350, 0, 0, 0, 9099, 4107, 3441, 0, 2975, 194701, 0,
     983947, 55220, 10084, 73943, 120845, 0, 0, 0, 3399, 0, 0, 11909, 0, 0,
     7687, 0, 6789, 0, 0, 72739, 71367, 0, 0, 92589, 9151, 1137, 0, 749,
     129320, 125076, 5385, 0, 69387, 0, 0, 41298, 0, 69461, 0, 0, 0, 0, 0, 0,
     128455, 0, 519, 0, 64547, 5766, 0, 0, 0, 8848, 0, 41297, 0, 0, 0, 41300,
-    74468, 65160, 0, 0, 127511, 0, 0, 6558, 0, 0, 128686, 92775, 0, 71450,
-    41302, 127927, 0, 0, 128646, 68762, 11729, 8719, 9060, 0, 128796, 0, 0,
-    0, 129682, 0, 11734, 93011, 11730, 73450, 9593, 5757, 2403, 0, 55275, 0,
-    11728, 65894, 0, 0, 0, 68741, 0, 0, 0, 43489, 4282, 983845, 0, 83497,
-    70328, 128103, 70324, 0, 0, 127509, 0, 8456, 0, 0, 0, 0, 78250, 0, 70320,
-    120722, 9792, 0, 70326, 0, 0, 83500, 70322, 10019, 71701, 123617, 6568,
-    4365, 0, 0, 3647, 0, 41134, 128341, 0, 125043, 41135, 0, 0, 0, 0, 0,
-    123616, 0, 41137, 41139, 0, 6545, 0, 125139, 7597, 10528, 75054, 0, 3732,
-    73910, 0, 0, 0, 7312, 983639, 9062, 93840, 11853, 0, 0, 128324, 41538, 0,
-    0, 0, 0, 194706, 41531, 1263, 3720, 0, 68028, 0, 41524, 64692, 119635, 0,
-    41534, 0, 92193, 0, 41168, 0, 67398, 127347, 3524, 0, 8831, 127349,
-    127357, 0, 127360, 127352, 0, 0, 0, 0, 0, 0, 5845, 0, 0, 0, 71909, 8200,
-    0, 68460, 0, 43283, 5551, 0, 0, 0, 6340, 983552, 100602, 0, 0, 0, 0, 0,
-    5422, 0, 0, 0, 2471, 0, 0, 2749, 0, 73774, 10913, 72122, 0, 8666, 675,
-    74093, 0, 194986, 0, 0, 0, 0, 0, 10928, 0, 41153, 0, 0, 0, 3738, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047, 0, 0, 0,
-    123639, 0, 0, 2934, 0, 0, 0, 0, 74507, 0, 74461, 0, 0, 74290, 0, 64562,
-    0, 64473, 0, 0, 73728, 0, 11212, 0, 12128, 6534, 0, 0, 1901, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 69940, 65459, 68293, 92290, 128808, 3770, 0, 0, 0,
-    64579, 128511, 0, 0, 983332, 983340, 0, 0, 0, 5941, 0, 0, 65079, 0, 0, 0,
-    73961, 983334, 0, 0, 0, 0, 0, 0, 10638, 0, 0, 0, 71486, 0, 0, 983349, 0,
-    43840, 129495, 0, 5233, 983346, 64792, 71233, 0, 983324, 0, 0, 9847, 0,
-    1685, 595, 0, 73971, 1292, 8940, 0, 11088, 0, 10004, 0, 0, 6541, 0, 0, 0,
-    5603, 9014, 5606, 0, 538, 128705, 5602, 8467, 74391, 6547, 0, 0, 0, 0,
-    8458, 129534, 8495, 0, 0, 917552, 10981, 78314, 0, 2465, 0, 0, 0, 9730,
-    9280, 0, 0, 74155, 72766, 113690, 0, 504, 0, 120715, 0, 983606, 0, 0, 0,
-    123141, 125024, 0, 0, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 0, 41141, 0,
-    5607, 72854, 41142, 3745, 0, 0, 128137, 0, 0, 3869, 11937, 5725, 0,
-    66566, 7416, 5728, 0, 0, 0, 11918, 66567, 5724, 118829, 5727, 0, 0, 0,
-    5723, 0, 128116, 0, 0, 0, 0, 42532, 0, 12303, 0, 11423, 0, 983115, 68303,
-    74074, 0, 128267, 6559, 64557, 71348, 0, 66763, 43019, 0, 10238, 0, 0,
-    43377, 0, 71346, 124937, 9783, 42704, 0, 71719, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 41144, 129465, 0, 0, 0, 72793, 92176, 0, 70682, 0, 8820, 0, 0,
-    0, 11515, 526, 0, 0, 0, 0, 0, 0, 8635, 0, 0, 8288, 11815, 0, 0, 0, 1543,
-    3713, 0, 0, 0, 68041, 127816, 0, 0, 64357, 0, 42082, 0, 0, 8987, 42081,
-    0, 0, 0, 0, 0, 0, 6553, 0, 0, 11253, 0, 0, 5475, 0, 0, 0, 119334, 12990,
-    1160, 42084, 0, 123152, 0, 0, 360, 0, 0, 128274, 5863, 3137, 0, 983315,
-    0, 0, 10959, 3146, 0, 127374, 0, 68341, 13076, 3135, 983298, 0, 0, 3142,
-    0, 94068, 10819, 128479, 0, 74635, 12877, 119867, 73967, 0, 70808, 0, 0,
-    0, 0, 6163, 0, 113728, 0, 0, 0, 8603, 0, 0, 3306, 0, 43392, 0, 0, 5751,
-    0, 0, 0, 0, 0, 7403, 0, 118933, 0, 0, 64783, 92658, 0, 0, 129592, 0, 0,
+    74468, 65160, 0, 129839, 127511, 0, 0, 6558, 0, 0, 128686, 92775, 0,
+    71450, 41302, 127927, 0, 0, 128646, 68762, 11729, 8719, 9060, 0, 128796,
+    0, 0, 0, 129682, 0, 11734, 93011, 11730, 73450, 9593, 5757, 2403, 0,
+    55275, 0, 11728, 65894, 0, 0, 0, 68741, 0, 0, 0, 43489, 4282, 983845, 0,
+    83497, 70328, 128103, 70324, 0, 0, 127509, 0, 8456, 0, 0, 74783, 0,
+    78250, 0, 70320, 120722, 9792, 0, 70326, 0, 0, 83500, 70322, 10019,
+    71701, 123617, 6568, 4365, 0, 0, 3647, 0, 41134, 128341, 0, 125043,
+    41135, 0, 0, 0, 129938, 0, 123616, 0, 41137, 41139, 0, 6545, 0, 125139,
+    7597, 10528, 75054, 0, 3732, 73910, 0, 0, 0, 7312, 983639, 9062, 93840,
+    11853, 0, 0, 128324, 41538, 0, 0, 0, 0, 194706, 41531, 1263, 3720, 0,
+    68028, 0, 41524, 64692, 119635, 0, 41534, 0, 92193, 0, 41168, 0, 67398,
+    127347, 3524, 0, 8831, 127349, 127357, 0, 127360, 127352, 129816, 0, 0,
+    0, 0, 0, 5845, 0, 0, 0, 71909, 8200, 0, 68460, 0, 43283, 5551, 0, 0, 0,
+    6340, 983552, 100602, 0, 0, 0, 0, 0, 5422, 0, 0, 0, 2471, 0, 0, 2749, 0,
+    73774, 10913, 72122, 0, 8666, 675, 74093, 0, 194986, 0, 69262, 0, 0, 0,
+    10928, 0, 41153, 0, 0, 0, 3738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    42347, 12092, 9615, 7234, 74047, 0, 0, 0, 123639, 0, 0, 2934, 0, 0, 0, 0,
+    74507, 0, 74461, 0, 0, 74290, 0, 64562, 129975, 64473, 0, 0, 73728, 0,
+    11212, 0, 12128, 6534, 0, 0, 1901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69940,
+    65459, 68293, 92290, 128808, 3770, 0, 0, 0, 64579, 128511, 0, 0, 983332,
+    983340, 0, 0, 0, 5941, 0, 0, 65079, 0, 0, 0, 73961, 983334, 0, 0, 0, 0,
+    0, 0, 10638, 0, 0, 0, 71486, 0, 0, 983349, 0, 43840, 129495, 0, 5233,
+    983346, 64792, 71233, 0, 983324, 0, 0, 9847, 0, 1685, 595, 0, 73971,
+    1292, 8940, 0, 11088, 0, 10004, 0, 0, 6541, 0, 0, 0, 5603, 9014, 5606, 0,
+    538, 128705, 5602, 8467, 74391, 6547, 0, 0, 0, 0, 8458, 129534, 8495, 0,
+    0, 917552, 10981, 78314, 0, 2465, 0, 0, 0, 9730, 9280, 0, 0, 74155,
+    72766, 113690, 0, 504, 0, 120715, 0, 983606, 0, 0, 0, 123141, 125024, 0,
+    0, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 0, 41141, 0, 5607, 72854, 41142,
+    3745, 0, 0, 128137, 0, 0, 3869, 11937, 5725, 0, 66566, 7416, 5728, 0, 0,
+    0, 11918, 66567, 5724, 118829, 5727, 0, 0, 0, 5723, 0, 128116, 71999, 0,
+    0, 0, 42532, 0, 12303, 0, 11423, 0, 983115, 68303, 74074, 0, 128267,
+    6559, 64557, 71348, 0, 66763, 43019, 0, 10238, 0, 0, 43377, 0, 71346,
+    124937, 9783, 42704, 0, 71719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41144,
+    129465, 0, 0, 0, 72793, 92176, 0, 70682, 0, 8820, 0, 0, 0, 11515, 526, 0,
+    0, 0, 0, 0, 0, 8635, 0, 0, 8288, 11815, 0, 0, 0, 1543, 3713, 0, 0, 0,
+    68041, 127816, 0, 0, 64357, 0, 42082, 0, 0, 8987, 42081, 0, 0, 0, 0, 0,
+    0, 6553, 0, 0, 11253, 0, 0, 5475, 0, 0, 0, 119334, 12990, 1160, 42084, 0,
+    123152, 0, 0, 360, 0, 0, 128274, 5863, 3137, 0, 983315, 0, 0, 10959,
+    3146, 0, 127374, 0, 68341, 13076, 3135, 983298, 0, 0, 3142, 0, 94068,
+    10819, 128479, 0, 74635, 12877, 119867, 73967, 0, 70808, 0, 0, 0, 0,
+    6163, 129745, 113728, 0, 0, 0, 8603, 0, 0, 3306, 0, 43392, 0, 0, 5751, 0,
+    0, 0, 0, 0, 7403, 0, 118933, 0, 0, 64783, 92658, 0, 0, 129592, 0, 0,
     65569, 7021, 0, 0, 0, 0, 0, 6540, 6974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43585,
     0, 6551, 983974, 0, 0, 0, 0, 0, 72216, 8977, 602, 120814, 0, 0, 0, 72119,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983624, 74812, 0, 0, 0, 9475, 0, 65105, 0,
@@ -25286,34 +26121,35 @@
     41360, 0, 0, 4743, 0, 0, 0, 0, 68398, 110781, 5890, 110779, 111103, 3739,
     8695, 92514, 0, 3964, 8984, 111095, 68288, 0, 0, 70000, 111090, 111089,
     111088, 3956, 82952, 111093, 6563, 111091, 41305, 0, 0, 12067, 41312, 0,
-    0, 0, 0, 0, 8175, 0, 3600, 0, 934, 0, 0, 173, 0, 0, 110784, 110785, 1750,
-    110783, 41358, 68368, 1807, 0, 92298, 0, 5889, 0, 0, 0, 67127, 0, 0,
-    121395, 6982, 1721, 0, 7891, 0, 42160, 67129, 4512, 983771, 69460, 0, 0,
-    0, 0, 0, 120716, 0, 0, 0, 0, 0, 119140, 3975, 72253, 74087, 0, 12672, 0,
-    0, 0, 0, 0, 0, 121100, 0, 0, 41095, 3962, 68242, 2932, 41101, 3954, 6457,
-    4513, 0, 0, 0, 0, 1468, 0, 0, 55237, 128230, 0, 127244, 55238, 41080, 0,
-    0, 4320, 74104, 0, 0, 0, 0, 77918, 0, 128384, 8256, 0, 72413, 0, 8879, 0,
-    0, 8770, 0, 0, 92214, 0, 0, 128786, 4283, 0, 0, 68361, 0, 74826, 0, 0, 0,
-    0, 127954, 65106, 42761, 121516, 4581, 8411, 0, 0, 72259, 0, 93037, 0, 0,
-    0, 92452, 4392, 0, 10786, 69661, 0, 8184, 0, 0, 7396, 0, 0, 69788, 0,
-    43512, 7965, 111039, 111038, 111037, 111036, 41350, 0, 0, 0, 2294, 64501,
-    68034, 0, 68405, 111034, 0, 0, 111030, 111029, 71105, 111027, 0, 111033,
-    92200, 111031, 0, 6764, 0, 0, 111026, 111025, 111024, 65203, 128010, 0,
-    0, 0, 3210, 0, 0, 0, 0, 82958, 127970, 82957, 0, 68875, 10043, 82963,
-    1186, 41571, 0, 5209, 9464, 82960, 66657, 5207, 65062, 5213, 0, 0, 41348,
-    41568, 128803, 3253, 111045, 111044, 74067, 111042, 111049, 5596, 111047,
-    111046, 0, 64887, 0, 5217, 111041, 72252, 0, 0, 0, 0, 2635, 92760, 0, 0,
-    0, 92742, 0, 113672, 0, 0, 0, 64558, 0, 0, 67083, 0, 0, 0, 5784, 0, 0, 0,
-    0, 4011, 0, 0, 0, 0, 4254, 0, 111054, 5600, 111052, 111051, 10447, 5598,
-    1207, 111055, 0, 3501, 42582, 0, 111050, 0, 1124, 5597, 983496, 983497,
-    9321, 129464, 75040, 983493, 0, 1719, 68356, 68354, 9671, 1125, 2721, 0,
-    983498, 983499, 7631, 5488, 111082, 0, 0, 5491, 111086, 8937, 0, 3236,
-    74187, 5490, 0, 5489, 8522, 68358, 111069, 6300, 111067, 111066, 0, 0,
-    111071, 111070, 0, 9875, 7593, 111065, 0, 0, 43182, 0, 68379, 3311,
-    111058, 111057, 3746, 11016, 65752, 111061, 0, 43423, 68775, 0, 111056,
-    72225, 0, 0, 127120, 0, 2232, 0, 0, 0, 0, 0, 126555, 0, 0, 8656, 0,
-    128358, 0, 0, 983485, 983486, 917563, 983484, 983481, 983482, 0, 0, 0, 0,
-    0, 111183, 128043, 983490, 1036, 983488, 111075, 1723, 111073, 111072,
+    0, 0, 0, 0, 8175, 0, 3600, 0, 934, 0, 0, 173, 129844, 0, 110784, 110785,
+    1750, 110783, 41358, 68368, 1807, 0, 92298, 0, 5889, 0, 0, 0, 67127, 0,
+    0, 121395, 6982, 1721, 0, 7891, 0, 42160, 67129, 4512, 983771, 69460, 0,
+    0, 0, 0, 0, 120716, 0, 0, 0, 0, 0, 119140, 3975, 72253, 74087, 0, 12672,
+    0, 129821, 0, 0, 129836, 0, 121100, 0, 0, 41095, 3962, 68242, 2932,
+    41101, 3954, 6457, 4513, 0, 0, 0, 0, 1468, 0, 0, 55237, 128230, 0,
+    127244, 55238, 41080, 0, 0, 4320, 74104, 0, 0, 0, 0, 77918, 0, 128384,
+    8256, 0, 72413, 0, 8879, 0, 0, 8770, 0, 0, 92214, 0, 0, 128786, 4283,
+    129689, 0, 68361, 0, 74826, 0, 0, 0, 0, 127954, 65106, 42761, 121516,
+    4581, 8411, 0, 0, 72259, 0, 93037, 0, 0, 0, 92452, 4392, 0, 10786, 69661,
+    0, 8184, 0, 0, 7396, 0, 0, 69788, 0, 43512, 7965, 111039, 111038, 111037,
+    111036, 41350, 0, 0, 0, 2294, 64501, 68034, 0, 68405, 111034, 0, 0,
+    111030, 111029, 71105, 111027, 0, 111033, 92200, 111031, 0, 6764, 0, 0,
+    111026, 111025, 111024, 65203, 128010, 0, 0, 0, 3210, 0, 129978, 0, 0,
+    82958, 127970, 82957, 0, 68875, 10043, 71979, 1186, 41571, 0, 5209, 9464,
+    82960, 66657, 5207, 65062, 5213, 0, 0, 41348, 41568, 128803, 3253,
+    111045, 111044, 74067, 111042, 111049, 5596, 111047, 111046, 0, 64887, 0,
+    5217, 111041, 72252, 0, 0, 0, 0, 2635, 92760, 0, 0, 0, 92742, 0, 113672,
+    0, 0, 0, 64558, 67081, 0, 67083, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 0,
+    0, 0, 4254, 0, 111054, 5600, 111052, 111051, 10447, 5598, 1207, 111055,
+    0, 3501, 42582, 0, 111050, 0, 1124, 5597, 983496, 983497, 9321, 129464,
+    75040, 983493, 0, 1719, 68356, 68354, 9671, 1125, 2721, 0, 983498,
+    983499, 7631, 5488, 111082, 0, 0, 5491, 111086, 8937, 0, 3236, 74187,
+    5490, 0, 5489, 8522, 68358, 111069, 6300, 111067, 111066, 0, 0, 111071,
+    111070, 0, 9875, 7593, 111065, 0, 0, 43182, 0, 68379, 3311, 111058,
+    111057, 3746, 11016, 65752, 111061, 0, 43423, 68775, 0, 111056, 72225, 0,
+    0, 127120, 0, 2232, 0, 0, 0, 0, 0, 126555, 0, 0, 8656, 0, 128358, 0, 0,
+    983485, 983486, 917563, 983484, 983481, 983482, 0, 0, 0, 129669, 0,
+    111183, 128043, 983490, 1036, 983488, 111075, 1723, 111073, 111072,
     111079, 41579, 111077, 111076, 10705, 0, 983480, 74486, 71693, 740,
     983476, 983477, 129645, 0, 0, 74846, 92255, 0, 0, 0, 0, 0, 10438, 74487,
     73798, 13285, 0, 0, 0, 5690, 0, 93992, 0, 0, 13095, 0, 127857, 121419,
@@ -25325,427 +26161,434 @@
     983459, 983456, 983457, 983454, 983455, 42492, 43402, 125208, 3302, 0,
     72842, 68809, 0, 0, 120885, 121300, 0, 7856, 8690, 0, 73076, 0, 0, 0,
     73091, 0, 69925, 120635, 65153, 0, 0, 0, 0, 0, 0, 4540, 0, 0, 0, 0,
-    11844, 121209, 8863, 0, 75061, 0, 6389, 0, 42371, 83205, 8790, 120911, 0,
-    111125, 71168, 8869, 0, 0, 42060, 0, 9648, 111123, 71170, 10270, 10286,
-    10318, 10382, 43529, 0, 0, 0, 0, 0, 70110, 43835, 119520, 70111, 127086,
-    118815, 127084, 127083, 8767, 0, 0, 41281, 0, 5201, 0, 6215, 67072, 6214,
-    13101, 0, 0, 65268, 67073, 0, 0, 127976, 72995, 127073, 10511, 42075, 0,
-    127071, 129509, 0, 67115, 127069, 111293, 127068, 0, 127067, 0, 74845, 0,
-    42071, 43156, 0, 0, 0, 0, 7954, 0, 0, 0, 8485, 4671, 0, 0, 4740, 0, 0,
-    42618, 78294, 3064, 6212, 0, 0, 0, 9554, 0, 83044, 0, 126598, 0, 78291,
-    0, 6213, 12885, 0, 129086, 64720, 0, 983907, 0, 0, 0, 11430, 0, 7518,
-    9317, 0, 3729, 10406, 0, 119259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73825, 0, 0,
-    129599, 8786, 10390, 0, 0, 917601, 93034, 0, 7924, 0, 43307, 0, 0, 0, 0,
-    0, 0, 118843, 9623, 435, 0, 0, 12893, 8093, 9079, 0, 0, 0, 0, 0, 64430,
-    0, 10294, 10326, 0, 0, 0, 0, 0, 0, 3623, 125188, 83378, 0, 43197, 0, 0,
-    0, 78296, 0, 0, 0, 7914, 0, 92170, 0, 2624, 0, 0, 0, 120859, 67110,
-    11058, 0, 67107, 0, 0, 0, 0, 120793, 0, 0, 6717, 10619, 0, 0, 0, 11832,
-    128664, 0, 0, 0, 70202, 0, 0, 0, 3232, 73824, 74581, 0, 0, 0, 41889, 0,
-    0, 1161, 41895, 74103, 9701, 0, 0, 129385, 73819, 120588, 5012, 0, 41362,
-    0, 68507, 0, 0, 0, 0, 0, 41364, 0, 0, 41352, 41361, 0, 41366, 0, 70129,
-    129065, 917, 0, 119934, 119923, 92421, 119912, 0, 119924, 119916, 0,
-    71482, 0, 0, 0, 0, 128583, 0, 7022, 0, 4739, 0, 5802, 9816, 8615, 0, 0,
-    491, 65837, 0, 0, 128644, 0, 8426, 11092, 9891, 0, 0, 0, 41881, 118823,
-    3736, 7394, 42648, 0, 68448, 9095, 7741, 12684, 41885, 0, 0, 0, 0, 5815,
-    0, 0, 0, 127392, 0, 0, 41878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120804, 0, 0,
-    2267, 0, 78289, 78359, 78288, 0, 0, 78318, 65920, 0, 0, 7057, 9408, 9409,
-    9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421,
-    5897, 9423, 917933, 127107, 0, 127108, 917937, 127963, 8955, 9399, 9400,
-    9401, 9402, 9403, 9404, 9405, 9406, 9407, 0, 128626, 42669, 73832, 78261,
-    67683, 2631, 0, 78259, 0, 78260, 3996, 0, 119307, 0, 0, 0, 0, 0, 0,
-    64825, 917916, 917913, 917914, 917919, 5899, 917917, 917918, 12085, 0,
-    574, 917922, 77825, 73828, 9473, 77824, 118918, 73900, 41735, 42211, 0,
-    4190, 77834, 77835, 77830, 77833, 3616, 77828, 77837, 77838, 7708, 77836,
-    2228, 113765, 0, 0, 4191, 0, 77844, 73800, 77842, 77843, 77839, 77840, 0,
-    78311, 83375, 0, 0, 10415, 74102, 0, 5896, 0, 10351, 67151, 0, 73829, 0,
-    127159, 0, 73998, 41355, 42883, 70736, 71212, 8021, 0, 119150, 983713,
-    41357, 8011, 42885, 42887, 41354, 0, 0, 10026, 5472, 120554, 1191,
-    121110, 5470, 128784, 5476, 0, 0, 0, 0, 42874, 78281, 42876, 6304, 78283,
-    0, 2675, 120690, 0, 0, 128954, 0, 0, 5478, 5904, 0, 0, 0, 7291, 77848,
-    43761, 13067, 0, 0, 126249, 120360, 69731, 77856, 77857, 77854, 77855,
-    77852, 77853, 77850, 10750, 43714, 77858, 0, 0, 0, 12887, 120364, 127745,
-    77866, 77867, 77864, 77865, 9929, 5199, 77859, 1120, 0, 0, 0, 9486, 7554,
-    0, 77868, 72832, 0, 0, 5894, 70069, 0, 0, 92511, 70358, 1323, 13162,
-    120937, 0, 0, 0, 77881, 66022, 0, 72857, 0, 0, 0, 0, 0, 1142, 0, 8271, 0,
-    0, 126645, 12903, 43622, 4002, 0, 10442, 10676, 120368, 0, 120369, 0, 0,
-    0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, 119015, 0, 0, 11784, 0,
-    78012, 4700, 0, 78858, 0, 78855, 0, 0, 92400, 77879, 19932, 77876, 77877,
-    74804, 77874, 77869, 77871, 0, 71487, 43118, 0, 0, 6774, 6773, 0, 194684,
-    10346, 10410, 78860, 118974, 0, 110613, 6108, 0, 110612, 0, 0, 0, 121309,
-    74166, 124973, 0, 0, 0, 69407, 0, 70357, 0, 0, 74217, 0, 64698, 4192,
-    9289, 0, 0, 128847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11603, 0, 0, 0, 82976, 0,
-    0, 67812, 0, 0, 0, 42572, 0, 128300, 119146, 1963, 11622, 0, 43237,
-    82981, 7550, 67100, 5903, 82984, 78009, 0, 9662, 0, 128391, 0, 0, 0, 0,
-    11013, 0, 0, 0, 128433, 67090, 0, 0, 0, 0, 0, 11568, 983685, 43367, 0, 0,
-    7852, 0, 0, 0, 0, 0, 194676, 0, 194675, 0, 0, 416, 0, 0, 73834, 0, 68921,
-    10984, 0, 0, 0, 0, 0, 0, 127013, 92423, 0, 983256, 121199, 0, 0, 12540,
-    0, 0, 0, 0, 11445, 0, 2112, 0, 0, 0, 1021, 0, 9507, 10210, 78005, 8023,
-    93963, 78006, 78001, 43181, 78003, 9532, 119094, 0, 0, 0, 0, 0, 1885,
-    43268, 0, 0, 120542, 121153, 392, 7894, 4391, 0, 8221, 119597, 77999,
-    77998, 0, 0, 0, 92967, 0, 3558, 0, 3913, 70429, 121376, 0, 0, 1265, 0,
-    6309, 0, 12969, 0, 0, 0, 0, 0, 0, 0, 41864, 0, 0, 74294, 0, 167, 0,
-    917584, 0, 93983, 72354, 68477, 0, 0, 917594, 0, 2493, 0, 0, 0, 0,
-    917570, 0, 0, 0, 406, 917592, 0, 0, 0, 0, 0, 0, 0, 127161, 0, 128597, 0,
-    0, 0, 3421, 10561, 0, 8365, 0, 0, 127569, 120787, 128669, 0, 0, 0, 0,
-    7834, 0, 0, 917574, 10298, 6624, 4908, 0, 1639, 120842, 0, 0, 6327, 6724,
-    0, 0, 0, 69910, 4817, 0, 0, 0, 68059, 0, 11022, 0, 0, 0, 118888, 0, 0,
-    7548, 64794, 0, 12291, 983165, 0, 0, 0, 0, 0, 0, 1134, 1838, 0, 2057, 0,
-    0, 0, 0, 0, 0, 5206, 0, 0, 42523, 0, 0, 0, 0, 65550, 8570, 4816, 0,
-    127926, 0, 4821, 0, 0, 0, 4818, 125257, 119974, 119977, 0, 0, 119970,
-    119973, 0, 119983, 119982, 119985, 119984, 119979, 119978, 0, 119980,
-    119670, 129297, 0, 11284, 119987, 70097, 65155, 119988, 0, 9363, 0, 0, 0,
-    5900, 93990, 7889, 2722, 128770, 0, 0, 0, 0, 2282, 0, 0, 0, 68093, 0, 0,
-    0, 0, 0, 70150, 0, 0, 0, 0, 129651, 70146, 983079, 119967, 71330, 70148,
-    0, 0, 94006, 70144, 119964, 110677, 110678, 110675, 110676, 0, 110674,
-    4226, 0, 123165, 5732, 71327, 0, 0, 65119, 0, 0, 92971, 64770, 0, 0,
-    6093, 0, 0, 1395, 0, 0, 0, 121179, 786, 0, 43174, 64340, 0, 125269, 0,
-    983643, 125138, 10132, 0, 0, 0, 0, 0, 93956, 0, 68444, 0, 92437, 123143,
-    0, 0, 92656, 0, 0, 0, 1399, 121463, 0, 121465, 121464, 120808, 241,
-    121469, 4907, 0, 0, 0, 0, 0, 0, 0, 0, 127904, 0, 0, 42780, 0, 0, 0, 4217,
-    0, 0, 0, 0, 72158, 0, 0, 43099, 3965, 0, 0, 0, 13300, 0, 0, 43057, 0, 0,
-    0, 0, 0, 65372, 0, 6410, 126073, 125252, 70468, 0, 0, 0, 119558, 0, 0, 0,
-    0, 0, 0, 43188, 2626, 7762, 0, 0, 0, 127183, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 67726, 0, 126993, 1542, 0, 0, 92550, 0, 0, 74311, 0, 0, 10181, 2150,
-    0, 0, 0, 0, 0, 68053, 6029, 72852, 0, 0, 0, 0, 8993, 0, 0, 0, 93968, 606,
-    0, 0, 0, 0, 4311, 0, 6027, 126615, 4322, 0, 65207, 0, 0, 983901, 0, 0,
-    2735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70806, 0, 0, 0, 92783, 0, 0,
-    65817, 55288, 127934, 66564, 8530, 0, 7709, 0, 121202, 66560, 128528,
-    917595, 12876, 66561, 0, 121430, 983938, 7789, 5855, 809, 0, 0, 72853, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64386, 0, 74909, 0, 120607, 66416, 83360,
-    6532, 0, 0, 0, 0, 128224, 0, 0, 0, 0, 43091, 92287, 0, 0, 129312, 0, 0,
-    0, 11361, 0, 0, 8153, 128105, 0, 10741, 0, 0, 0, 0, 0, 64706, 0, 0, 0,
-    78870, 9466, 78866, 9824, 0, 0, 0, 120977, 915, 0, 0, 43865, 0, 0, 0,
-    67131, 70096, 67137, 0, 129614, 78864, 6730, 78862, 68161, 0, 78861,
-    126542, 0, 0, 94010, 983683, 0, 0, 66043, 0, 0, 43107, 0, 0, 92343, 0,
-    73879, 0, 0, 0, 6103, 0, 0, 92470, 0, 12889, 0, 127137, 0, 0, 0, 0, 0, 0,
-    119262, 83028, 0, 0, 0, 0, 0, 0, 0, 13118, 7700, 917537, 9690, 0, 0,
-    68080, 512, 0, 72792, 0, 0, 77892, 632, 77890, 77891, 42529, 0, 0, 0, 0,
-    0, 0, 0, 128273, 0, 0, 7379, 64581, 5386, 0, 0, 10633, 72316, 64488, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 124956, 71307, 0, 0, 0, 0, 0, 92370, 0, 0, 0, 0,
-    0, 71314, 1801, 0, 0, 120867, 0, 0, 77888, 2085, 702, 77887, 77884,
-    77885, 13074, 77883, 66299, 0, 0, 12106, 0, 0, 1755, 0, 77897, 77898,
-    1163, 3102, 77893, 77894, 0, 0, 0, 0, 69227, 0, 77901, 77902, 77899,
-    77900, 65171, 0, 0, 0, 70157, 0, 0, 0, 0, 2908, 0, 11177, 64902, 64950,
-    0, 128740, 66906, 124959, 70499, 0, 0, 0, 64352, 0, 125031, 1007, 0,
-    9199, 0, 127371, 118992, 41890, 0, 2730, 119072, 0, 5428, 0, 73771, 0, 0,
-    0, 0, 71458, 0, 0, 0, 68089, 0, 44012, 0, 71456, 0, 9158, 66878, 69905,
-    92440, 0, 0, 0, 484, 0, 0, 0, 194742, 0, 0, 0, 0, 572, 7041, 2736, 0, 0,
-    93962, 0, 68628, 0, 0, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456,
-    5509, 0, 120664, 113700, 0, 0, 0, 3430, 0, 42905, 0, 74929, 6050, 0, 0,
-    129197, 0, 0, 10908, 0, 0, 0, 64617, 0, 0, 3957, 0, 0, 0, 674, 0, 0,
-    2946, 5354, 5251, 5328, 5307, 3759, 72318, 8364, 5123, 0, 5281, 5469,
-    5121, 0, 0, 0, 5130, 0, 129608, 0, 0, 0, 1221, 2733, 0, 0, 0, 72321, 0,
-    0, 0, 0, 0, 0, 5939, 0, 0, 0, 71867, 68400, 128216, 10321, 10289, 0,
-    10385, 123164, 0, 0, 0, 0, 118943, 0, 11411, 0, 5938, 0, 120865, 0, 0,
-    10401, 10337, 0, 0, 0, 0, 0, 0, 0, 78277, 0, 0, 12165, 0, 0, 9885, 0,
-    8077, 0, 127908, 0, 0, 0, 0, 129138, 4220, 10725, 10433, 0, 68395, 4987,
-    64519, 0, 0, 0, 123626, 120356, 0, 11733, 0, 120792, 0, 127233, 0, 0, 0,
-    92345, 68254, 983642, 77991, 0, 2724, 0, 0, 12313, 110619, 515, 119947,
-    119944, 119945, 119942, 119943, 119940, 119941, 119938, 8606, 4046, 4589,
-    4521, 0, 9141, 0, 0, 2741, 0, 0, 1370, 0, 0, 0, 0, 0, 0, 66880, 0, 66003,
-    0, 68630, 0, 0, 69458, 0, 11593, 68669, 68666, 68660, 0, 0, 2744, 72285,
-    68638, 0, 814, 0, 119962, 119963, 119960, 119961, 101106, 43029, 119956,
-    11623, 119954, 11955, 119952, 119953, 41986, 119951, 0, 120497, 4847,
-    110975, 0, 0, 0, 0, 1581, 64920, 93830, 12954, 963, 110973, 110972,
-    110971, 110969, 5278, 110967, 68621, 92222, 983449, 68625, 983447, 68617,
-    110960, 0, 0, 110965, 110964, 110963, 110962, 0, 0, 983439, 983440,
-    983437, 983438, 983435, 92648, 127379, 0, 65137, 6483, 65392, 0, 4213,
-    129649, 41303, 0, 0, 0, 41306, 983217, 2698, 0, 0, 0, 68396, 0, 41304,
-    824, 0, 78011, 72315, 78894, 110982, 78892, 64804, 9820, 119820, 110985,
-    110976, 0, 6739, 0, 5481, 3490, 110978, 110977, 71706, 69947, 67702,
-    9124, 12688, 119833, 0, 0, 119822, 119821, 119824, 68367, 42575, 119825,
-    119828, 119827, 119948, 0, 71087, 68658, 119946, 8025, 0, 127024, 68675,
-    92445, 71097, 69613, 0, 0, 0, 0, 983430, 2745, 11797, 110990, 983426,
-    9202, 983424, 983425, 0, 0, 0, 10525, 5436, 74584, 110987, 110986,
-    121506, 43080, 121508, 121507, 983415, 6246, 119958, 10921, 9723, 6777,
-    6776, 6775, 0, 0, 70287, 92384, 0, 8669, 0, 0, 65093, 0, 78881, 2716, 0,
-    0, 11252, 0, 68369, 0, 11060, 12985, 2711, 78872, 78027, 78026, 7992, 0,
-    0, 42938, 78033, 78032, 78877, 70724, 78029, 78028, 78031, 78030, 64535,
-    110998, 10130, 110996, 0, 0, 111001, 111000, 127914, 983412, 78014, 5713,
-    110995, 7570, 110993, 110992, 0, 11190, 0, 9026, 0, 74864, 7547, 78891,
-    0, 10008, 10222, 0, 129543, 9744, 0, 127193, 983408, 119656, 983406,
-    94070, 983404, 983405, 983402, 9045, 78888, 4225, 78886, 78887, 68757,
-    78885, 78882, 78883, 983397, 983398, 8405, 983396, 10423, 10359, 983391,
-    983392, 0, 129149, 4215, 9789, 0, 4321, 12309, 983400, 41313, 0, 5368,
-    66886, 0, 0, 5366, 0, 5372, 0, 0, 0, 7720, 7390, 2696, 0, 0, 8268, 0,
-    1790, 0, 0, 118977, 0, 0, 0, 5376, 1835, 72313, 78704, 128089, 0, 0,
-    68655, 1180, 0, 0, 0, 0, 0, 0, 0, 9122, 0, 11928, 0, 65283, 0, 0, 5971,
-    121171, 43500, 1268, 65097, 983218, 0, 0, 0, 1427, 128440, 0, 5970, 3431,
-    72299, 983386, 983387, 983384, 983385, 983382, 2738, 125066, 10455, 0,
-    74026, 0, 4222, 6240, 0, 119013, 983389, 68377, 6248, 983373, 67815,
-    983371, 917907, 92582, 0, 128698, 125215, 0, 2728, 65549, 64563, 983377,
-    983378, 0, 128145, 0, 10713, 7166, 119559, 2622, 0, 0, 0, 0, 8954, 0,
-    94008, 2632, 42617, 10108, 1011, 42852, 12080, 2709, 0, 5716, 0, 0, 0, 0,
-    127100, 69378, 0, 9515, 127098, 66465, 6451, 0, 127097, 8918, 983556, 0,
-    0, 19950, 0, 0, 0, 44003, 0, 0, 0, 0, 0, 0, 983495, 74022, 0, 128795,
-    68643, 67410, 0, 5721, 0, 0, 0, 121074, 11267, 983364, 66464, 5720,
-    983363, 0, 4219, 5718, 8696, 5717, 0, 983370, 983878, 983368, 541,
-    983366, 983367, 128237, 119089, 68389, 983352, 119949, 56, 4216, 10577,
-    0, 0, 77849, 69620, 983357, 983358, 66899, 983356, 0, 0, 67628, 0, 0,
-    7086, 0, 67998, 67621, 0, 2734, 69616, 0, 67627, 118937, 0, 67625, 0, 0,
-    0, 42593, 0, 128217, 0, 0, 119939, 0, 68180, 0, 0, 71104, 7442, 43665,
-    359, 41253, 68392, 6239, 120599, 41256, 0, 67740, 111023, 111022, 111021,
-    9346, 69660, 41254, 0, 43291, 78002, 0, 0, 124993, 93841, 0, 0, 0, 4368,
-    983500, 0, 68137, 0, 0, 41024, 0, 0, 121359, 121420, 0, 0, 0, 4223, 0,
-    8574, 83502, 0, 0, 0, 0, 0, 92718, 983636, 70432, 128323, 68382, 0, 0, 0,
-    0, 0, 4144, 0, 83193, 6245, 0, 2732, 92644, 0, 0, 0, 83501, 0, 0, 0,
-    128005, 0, 0, 0, 0, 3097, 0, 0, 77996, 0, 0, 10863, 111020, 111019,
-    111018, 0, 111015, 111014, 111013, 111012, 118964, 0, 10216, 64293, 0, 0,
-    69393, 128331, 12325, 111010, 8717, 111008, 0, 0, 0, 0, 8700, 0, 0,
-    68363, 10426, 0, 71091, 10362, 0, 1715, 0, 0, 64918, 0, 43278, 42635, 0,
-    0, 65275, 0, 0, 0, 0, 0, 1607, 466, 118949, 0, 0, 127918, 6243, 983882,
-    1350, 74195, 64420, 1993, 5362, 10666, 2708, 92471, 0, 13143, 234, 3199,
-    0, 41268, 6334, 6250, 0, 0, 73750, 0, 73762, 10458, 0, 8576, 127136, 0,
-    2704, 64953, 0, 68211, 8322, 0, 5753, 0, 2694, 0, 0, 2439, 65104, 69804,
-    0, 303, 74625, 92622, 0, 2437, 0, 9817, 4844, 0, 0, 0, 0, 0, 121120,
-    43292, 0, 2441, 0, 0, 0, 0, 0, 2451, 2714, 0, 0, 43379, 127984, 74541,
-    753, 5849, 0, 43089, 0, 0, 119534, 0, 0, 0, 0, 2726, 3107, 0, 0, 64937,
-    0, 78841, 1408, 0, 4607, 0, 181, 0, 67728, 9539, 0, 0, 65201, 121121,
-    92973, 64185, 4142, 64183, 0, 0, 0, 9706, 64178, 64177, 64176, 0, 64182,
-    64181, 64180, 64179, 11401, 125124, 0, 1822, 0, 128581, 68055, 3865,
-    122918, 0, 10500, 129602, 119024, 0, 110732, 9830, 0, 0, 0, 65131, 0, 0,
-    0, 0, 74608, 9567, 0, 9599, 8748, 0, 0, 9557, 0, 0, 0, 11494, 0, 0,
-    10865, 0, 43279, 64186, 68521, 0, 64191, 64190, 8898, 64188, 129153,
-    41030, 78836, 0, 0, 78820, 126100, 0, 78805, 78806, 78801, 78802, 6745,
-    78800, 0, 0, 0, 110866, 0, 0, 73679, 67838, 41039, 78809, 0, 0, 0, 0,
-    110869, 127045, 110867, 110868, 127039, 4400, 0, 64207, 10275, 8925,
-    10371, 10307, 64202, 4248, 0, 72802, 4541, 6299, 64204, 64203, 64201,
-    64200, 64199, 64198, 126471, 0, 0, 0, 64193, 64192, 0, 9943, 64197,
-    64196, 64195, 64194, 13282, 42652, 64174, 64173, 83495, 846, 72337, 9965,
-    74495, 72330, 83493, 83494, 2543, 12163, 64170, 83490, 64167, 64166,
-    64165, 64164, 72333, 0, 64169, 64168, 64949, 0, 10251, 10247, 64163,
-    64162, 2295, 43299, 43301, 129363, 0, 70791, 0, 0, 550, 9910, 0, 0,
-    66579, 0, 0, 0, 9504, 0, 0, 10373, 0, 0, 10261, 10253, 7821, 10277, 0,
-    74823, 1552, 0, 0, 129420, 0, 121435, 19910, 0, 0, 118849, 121150, 0,
-    43985, 68051, 0, 69890, 121329, 78355, 983757, 0, 66405, 2431, 3744,
-    66852, 1809, 0, 0, 0, 73759, 1264, 0, 78676, 11697, 121278, 9785, 64716,
-    0, 0, 0, 0, 121307, 0, 0, 42609, 128388, 0, 66912, 127016, 0, 983885,
-    74229, 0, 6487, 93798, 70743, 0, 0, 0, 83484, 83485, 83486, 83487, 83480,
-    8355, 7854, 83483, 954, 64927, 0, 41045, 0, 41438, 0, 0, 10711, 0, 0, 0,
-    0, 64774, 13309, 10947, 66727, 0, 0, 0, 66795, 0, 0, 0, 0, 0, 0, 0,
-    120634, 69228, 0, 0, 0, 0, 0, 0, 3060, 83478, 9986, 0, 83473, 83474,
-    11698, 77880, 83469, 9916, 11701, 83472, 42586, 0, 8320, 0, 119095, 0, 0,
-    1477, 43289, 0, 74358, 10884, 69446, 9908, 0, 0, 0, 3414, 74304, 0, 0, 0,
-    0, 2110, 0, 68306, 0, 74532, 0, 0, 0, 0, 7164, 0, 0, 0, 11950, 5392,
-    42248, 65129, 68656, 5397, 129579, 0, 68136, 0, 0, 5395, 72870, 5393,
-    354, 68615, 0, 0, 0, 0, 0, 126236, 0, 0, 626, 0, 5895, 0, 0, 5780, 0,
-    66407, 10220, 0, 71121, 43297, 0, 0, 11468, 64436, 0, 0, 0, 73818, 3918,
-    0, 3797, 72786, 0, 0, 4140, 0, 71254, 0, 9030, 813, 0, 68131, 4146,
-    119957, 5360, 0, 129498, 0, 0, 6249, 0, 0, 0, 0, 0, 73092, 0, 4911, 988,
-    0, 73125, 0, 42948, 0, 0, 0, 0, 74972, 0, 0, 0, 9825, 0, 0, 12803,
-    126977, 11032, 67654, 6244, 0, 0, 68662, 0, 129351, 0, 72131, 4169, 0, 0,
-    0, 0, 121410, 120657, 0, 0, 68657, 128943, 78496, 0, 0, 5898, 74540, 0,
-    41856, 93056, 917865, 125000, 127373, 83424, 83425, 83426, 73736, 83420,
-    68870, 6448, 6835, 0, 4831, 83418, 83419, 67731, 0, 0, 0, 0, 0, 0, 0,
-    78499, 0, 0, 0, 43288, 0, 0, 0, 0, 0, 43418, 0, 0, 0, 7876, 68132,
-    917872, 0, 917870, 43378, 0, 0, 120890, 5892, 43605, 0, 0, 0, 129058, 0,
-    0, 6251, 83409, 83410, 83411, 83412, 126512, 0, 71092, 83408, 10114, 0,
-    0, 5387, 0, 0, 0, 0, 65553, 78346, 1747, 917849, 65109, 69240, 917852,
-    126509, 0, 0, 0, 0, 125065, 0, 9850, 0, 367, 1472, 917859, 6687, 0, 0,
-    5905, 12339, 8919, 73953, 65680, 0, 0, 78664, 0, 9134, 0, 78666, 43011,
-    0, 126626, 0, 0, 0, 43013, 10614, 0, 0, 83413, 66646, 83415, 83416, 0,
-    73881, 43012, 121127, 83293, 54, 43009, 73885, 0, 6211, 0, 0, 83295,
-    68119, 43008, 10758, 0, 0, 0, 0, 0, 70018, 0, 0, 0, 0, 12765, 0, 0, 0, 0,
-    126580, 0, 0, 43657, 0, 0, 0, 983718, 0, 83405, 917843, 0, 0, 83401,
-    83402, 83403, 83404, 83397, 11363, 12057, 83400, 1567, 0, 0, 83396, 0,
-    8957, 4139, 0, 0, 129336, 0, 0, 12740, 0, 92195, 12761, 127793, 12759, 0,
-    72304, 67169, 83467, 44002, 0, 83462, 83463, 83464, 12755, 12762, 41022,
-    67690, 64217, 476, 0, 983715, 0, 64212, 41020, 1382, 64209, 64216, 64215,
-    64214, 64213, 0, 0, 0, 67584, 8720, 3908, 0, 0, 0, 0, 129434, 129576, 0,
-    0, 3849, 92324, 94026, 9778, 917906, 5891, 917912, 55, 917910, 917911, 0,
-    0, 7935, 67586, 0, 1114, 92599, 67585, 78675, 0, 83447, 83449, 0, 0, 0,
-    64717, 0, 0, 0, 66884, 6292, 65303, 0, 6452, 917886, 917887, 66249,
-    917885, 917890, 917891, 917888, 719, 0, 0, 917892, 0, 0, 0, 94083, 10868,
-    121333, 2349, 5902, 917896, 6335, 917902, 917899, 917900, 0, 64369, 0, 0,
-    0, 69245, 0, 126564, 0, 0, 128565, 0, 0, 0, 0, 0, 6454, 1229, 83457,
-    83458, 83450, 83451, 83452, 65100, 120508, 8224, 917873, 917874, 917879,
-    917880, 917877, 917878, 128929, 0, 917881, 917882, 5365, 67836, 8901, 0,
-    0, 0, 0, 0, 5925, 83436, 64330, 128400, 83431, 83432, 83433, 83434,
+    11844, 121209, 8863, 0, 75061, 71978, 6389, 0, 42371, 83205, 8790,
+    120911, 0, 111125, 71168, 8869, 0, 0, 42060, 0, 9648, 111123, 71170,
+    10270, 10286, 10318, 10382, 43529, 0, 0, 0, 0, 0, 70110, 43835, 119520,
+    70111, 119360, 118815, 127084, 127083, 8767, 0, 128437, 41281, 0, 5201,
+    0, 6215, 67072, 6214, 13101, 0, 0, 65268, 67073, 0, 0, 127976, 72995,
+    127073, 10511, 42075, 0, 127071, 129509, 0, 67115, 127069, 111293,
+    127068, 0, 127067, 0, 74845, 0, 42071, 43156, 0, 0, 0, 0, 7954, 0, 0, 0,
+    8485, 4671, 0, 917574, 4740, 0, 0, 42618, 78294, 3064, 6212, 0, 0, 0,
+    9554, 0, 83044, 0, 126598, 0, 78291, 0, 6213, 12885, 0, 129086, 64720, 0,
+    983907, 0, 0, 0, 11430, 0, 7518, 9317, 0, 3729, 10406, 0, 119259, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 73825, 0, 0, 129599, 8786, 10390, 0, 0, 917601,
+    93034, 0, 7924, 0, 43307, 0, 0, 0, 0, 0, 0, 118843, 9623, 435, 0, 0,
+    12893, 8093, 9079, 0, 0, 0, 0, 0, 64430, 0, 10294, 10326, 0, 0, 0, 0, 0,
+    0, 3623, 125188, 83378, 0, 43197, 0, 0, 0, 78296, 0, 0, 0, 7914, 0,
+    92170, 0, 2624, 0, 0, 0, 120859, 67110, 11058, 0, 67107, 0, 0, 0, 0,
+    120793, 0, 0, 6717, 10619, 0, 0, 0, 11832, 128664, 0, 0, 0, 70202, 0, 0,
+    0, 3232, 73824, 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 0,
+    0, 129385, 73819, 120588, 5012, 0, 41362, 0, 68507, 0, 0, 0, 0, 0, 41364,
+    0, 0, 41352, 41361, 0, 41366, 0, 70129, 129065, 917, 0, 119934, 119923,
+    92421, 119912, 0, 119924, 119916, 0, 71482, 0, 0, 0, 125136, 128583, 0,
+    7022, 0, 4739, 0, 5802, 9816, 8615, 0, 0, 491, 65837, 0, 0, 128644, 0,
+    8426, 11092, 9891, 0, 0, 0, 41881, 118823, 3736, 7394, 42648, 0, 68448,
+    9095, 7741, 12684, 41885, 0, 0, 0, 0, 5815, 0, 0, 0, 127392, 0, 0, 41878,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120804, 0, 0, 2267, 0, 78289, 78359, 78288,
+    0, 0, 78318, 65920, 0, 0, 7057, 9408, 9409, 9410, 9411, 9412, 9413, 9414,
+    9415, 9416, 9417, 9418, 9419, 9420, 9421, 5897, 9423, 917933, 127107, 0,
+    127108, 917937, 127963, 8955, 9399, 9400, 9401, 9402, 9403, 9404, 9405,
+    9406, 9407, 0, 128626, 42669, 73832, 78261, 67683, 2631, 119308, 78259,
+    0, 78260, 3996, 0, 119307, 0, 0, 0, 0, 0, 0, 64825, 917916, 917913,
+    917914, 917919, 5899, 917917, 129990, 12085, 0, 574, 917922, 77825,
+    73828, 9473, 77824, 118918, 73900, 41735, 42211, 0, 4190, 77834, 77835,
+    77830, 77833, 3616, 77828, 77837, 77838, 7708, 77836, 2228, 113765, 0, 0,
+    4191, 0, 77844, 73800, 77842, 77843, 77839, 77840, 0, 78311, 83375, 0, 0,
+    10415, 74102, 0, 5896, 0, 10351, 67151, 0, 73829, 0, 127159, 0, 73998,
+    41355, 42883, 70736, 71212, 8021, 0, 119150, 983713, 41357, 8011, 42885,
+    42887, 41354, 0, 0, 10026, 5472, 120554, 1191, 101217, 5470, 128784,
+    5476, 101216, 0, 0, 0, 42874, 78281, 42876, 6304, 78283, 0, 2675, 120690,
+    0, 0, 128954, 0, 0, 5478, 5904, 0, 0, 0, 7291, 77848, 43761, 13067, 0, 0,
+    119271, 120360, 69731, 77856, 77857, 77854, 77855, 77852, 77853, 77850,
+    10750, 43714, 77858, 0, 0, 0, 12887, 120364, 127745, 77866, 77867, 77864,
+    77865, 9929, 5199, 77859, 1120, 0, 0, 0, 9486, 7554, 0, 77868, 72832, 0,
+    0, 5894, 70069, 0, 0, 92511, 70358, 1323, 13162, 120937, 0, 0, 0, 77881,
+    66022, 0, 72857, 0, 0, 0, 0, 0, 1142, 0, 8271, 0, 0, 126645, 12903,
+    43622, 4002, 0, 10442, 10676, 120368, 0, 120369, 0, 0, 0, 0, 66642, 1277,
+    0, 7871, 0, 0, 78853, 0, 119015, 0, 0, 11784, 0, 78012, 4700, 0, 78858,
+    0, 78855, 0, 0, 92400, 77879, 19932, 77876, 77877, 74804, 77874, 77869,
+    77871, 0, 71487, 43118, 0, 0, 6774, 6773, 0, 194684, 10346, 10410, 78860,
+    118974, 0, 101197, 6108, 0, 110612, 0, 0, 0, 121309, 74166, 124973, 0, 0,
+    0, 69407, 0, 70357, 0, 0, 74217, 0, 64698, 4192, 9289, 0, 0, 128847, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 11603, 0, 0, 101166, 82976, 0, 0, 67812, 0,
+    101163, 0, 42572, 0, 128300, 119146, 1963, 11622, 0, 43237, 82981, 7550,
+    67100, 5903, 82984, 78009, 129750, 9662, 0, 128391, 0, 0, 0, 0, 11013, 0,
+    0, 0, 128433, 67090, 0, 0, 0, 0, 0, 11568, 983685, 43367, 0, 0, 7852, 0,
+    0, 0, 0, 0, 194676, 0, 194675, 0, 0, 416, 129668, 0, 73834, 0, 68921,
+    10984, 0, 0, 101175, 129838, 101182, 0, 127013, 92423, 0, 983256, 121199,
+    0, 0, 12540, 0, 0, 0, 0, 11445, 101168, 2112, 0, 0, 0, 1021, 0, 9507,
+    10210, 78005, 8023, 93963, 78006, 78001, 43181, 78003, 9532, 119094, 0,
+    0, 0, 0, 0, 1885, 43268, 129802, 129798, 120542, 121153, 392, 7894, 4391,
+    129810, 8221, 119597, 77999, 77998, 0, 0, 0, 92967, 0, 3558, 0, 3913,
+    70429, 121376, 0, 0, 1265, 0, 6309, 0, 12969, 0, 101151, 0, 101146, 0,
+    101139, 0, 41864, 0, 0, 74294, 0, 167, 0, 917584, 0, 93983, 72354, 68477,
+    0, 0, 917594, 0, 2493, 129827, 0, 129804, 0, 917570, 0, 0, 0, 406,
+    917592, 0, 0, 0, 0, 0, 0, 0, 127161, 0, 128597, 0, 0, 0, 3421, 10561, 0,
+    8365, 0, 0, 127569, 120787, 128669, 0, 0, 0, 0, 7834, 0, 0, 101154,
+    10298, 6624, 4908, 0, 1639, 120842, 0, 0, 6327, 6724, 0, 0, 0, 69910,
+    4817, 0, 0, 0, 68059, 0, 11022, 0, 0, 0, 118888, 0, 0, 7548, 64794, 0,
+    12291, 983165, 0, 0, 0, 0, 0, 0, 1134, 1838, 0, 2057, 0, 0, 0, 0, 0, 0,
+    5206, 0, 0, 42523, 0, 0, 0, 0, 65550, 8570, 4816, 0, 127926, 0, 4821, 0,
+    0, 0, 4818, 125257, 119974, 119977, 0, 0, 119970, 119973, 0, 119983,
+    119982, 119985, 119984, 119979, 119978, 0, 119980, 119670, 129297, 0,
+    11284, 119987, 70097, 65155, 119988, 0, 9363, 0, 0, 0, 5900, 93990, 7889,
+    2722, 128770, 0, 0, 0, 0, 2282, 0, 0, 0, 68093, 0, 0, 0, 0, 0, 70150, 0,
+    0, 0, 0, 129651, 70146, 983079, 119967, 71330, 70148, 0, 0, 94006, 70144,
+    119964, 110677, 110678, 110675, 110676, 0, 110674, 4226, 0, 123165, 5732,
+    71327, 0, 0, 65119, 0, 0, 92971, 64770, 0, 0, 6093, 0, 0, 1395, 0, 0, 0,
+    121179, 786, 0, 43174, 64340, 0, 125269, 0, 983643, 125138, 10132, 0, 0,
+    0, 0, 0, 93956, 0, 68444, 0, 92437, 123143, 0, 0, 92656, 0, 0, 0, 1399,
+    121463, 0, 121465, 121464, 120808, 241, 121469, 4907, 0, 0, 0, 0, 0, 0,
+    0, 0, 127904, 0, 0, 42780, 0, 0, 0, 4217, 0, 0, 0, 0, 72158, 0, 0, 43099,
+    3965, 0, 0, 0, 13300, 0, 0, 43057, 0, 0, 0, 0, 0, 65372, 0, 6410, 126073,
+    125252, 70468, 0, 0, 0, 119558, 0, 0, 0, 0, 0, 0, 43188, 2626, 7762, 0,
+    0, 0, 127183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67726, 0, 126993, 1542, 0, 0,
+    92550, 0, 0, 74311, 0, 0, 10181, 2150, 0, 0, 0, 0, 0, 68053, 6029, 72852,
+    0, 0, 0, 0, 8993, 0, 0, 0, 93968, 606, 0, 0, 0, 0, 4311, 0, 6027, 126615,
+    4322, 0, 65207, 0, 0, 983901, 0, 0, 2735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 70806, 0, 0, 0, 92783, 0, 0, 65817, 55288, 127934, 66564, 8530, 0,
+    7709, 0, 121202, 66560, 128528, 917595, 12876, 66561, 0, 121430, 983938,
+    7789, 5855, 809, 0, 0, 72853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64386, 0,
+    74909, 0, 120607, 66416, 83360, 6532, 0, 0, 0, 0, 128224, 0, 0, 0, 0,
+    43091, 92287, 0, 0, 129312, 0, 0, 0, 11361, 0, 0, 8153, 128105, 0, 10741,
+    0, 0, 0, 0, 0, 64706, 0, 0, 0, 78870, 9466, 78866, 9824, 0, 0, 0, 120977,
+    915, 0, 0, 43865, 0, 0, 0, 67131, 70096, 67137, 0, 129614, 73648, 6730,
+    78862, 68161, 0, 78861, 126542, 0, 0, 94010, 983683, 0, 0, 66043, 0, 0,
+    43107, 0, 0, 92343, 0, 73879, 0, 0, 0, 6103, 0, 0, 92470, 0, 12889, 0,
+    127137, 0, 0, 0, 0, 0, 0, 119262, 83028, 0, 0, 0, 69279, 0, 0, 0, 13118,
+    7700, 917537, 9690, 0, 0, 68080, 512, 0, 72792, 0, 0, 77892, 632, 77890,
+    77891, 42529, 0, 0, 0, 0, 0, 0, 0, 128273, 0, 0, 7379, 64581, 5386, 0, 0,
+    10633, 72316, 64488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124956, 71307, 0, 0, 0,
+    0, 0, 92370, 0, 0, 0, 0, 0, 71314, 1801, 0, 0, 120867, 0, 0, 77888, 2085,
+    702, 77887, 77884, 77885, 13074, 77883, 66299, 0, 0, 12106, 0, 0, 1755,
+    0, 77897, 77898, 1163, 3102, 77893, 77894, 0, 0, 0, 0, 69227, 0, 77901,
+    77902, 77899, 77900, 65171, 0, 0, 0, 70157, 0, 0, 0, 0, 2908, 0, 11177,
+    64902, 64950, 0, 128740, 66906, 124959, 70499, 0, 0, 0, 64352, 0, 125031,
+    1007, 0, 9199, 0, 127371, 118992, 41890, 0, 2730, 119072, 0, 5428, 0,
+    73771, 129993, 0, 0, 0, 71458, 0, 0, 0, 68089, 0, 44012, 0, 71456, 0,
+    9158, 66878, 69905, 92440, 0, 101272, 0, 484, 0, 0, 0, 194742, 0, 0, 0,
+    0, 572, 7041, 2736, 0, 0, 93962, 0, 68628, 0, 128727, 5438, 5222, 5381,
+    43114, 0, 5193, 5125, 5456, 5509, 0, 120664, 113700, 0, 0, 0, 3430, 0,
+    42905, 0, 74929, 6050, 0, 0, 129197, 0, 0, 10908, 0, 0, 0, 64617, 0, 0,
+    3957, 0, 0, 0, 674, 0, 0, 2946, 5354, 5251, 5328, 5307, 3759, 72318,
+    8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 129608, 0, 0, 0, 1221,
+    2733, 0, 0, 0, 72321, 127245, 0, 0, 0, 101277, 0, 5939, 0, 0, 0, 71867,
+    68400, 128216, 10321, 10289, 0, 10385, 123164, 0, 0, 0, 0, 118943, 0,
+    11411, 0, 5938, 0, 120865, 0, 0, 10401, 10337, 0, 0, 0, 0, 0, 0, 0,
+    71942, 0, 0, 12165, 0, 0, 9885, 0, 8077, 0, 127908, 0, 0, 0, 0, 129138,
+    4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 0, 0, 123626, 120356, 0,
+    11733, 0, 120792, 0, 127233, 0, 0, 0, 92345, 68254, 983642, 77991, 0,
+    2724, 0, 0, 12313, 110619, 515, 119947, 119944, 119945, 119942, 119943,
+    119940, 119941, 119938, 8606, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, 0,
+    0, 1370, 0, 0, 0, 0, 0, 0, 66880, 0, 66003, 0, 64440, 0, 0, 69458, 0,
+    11593, 68669, 68666, 68660, 0, 0, 2744, 72285, 68638, 0, 814, 0, 119962,
+    119963, 119960, 119961, 101106, 43029, 119956, 11623, 119954, 11955,
+    119952, 119953, 41986, 119951, 0, 120497, 4847, 110975, 0, 0, 0, 0, 1581,
+    64920, 93830, 12954, 963, 110973, 110972, 110971, 110969, 5278, 110967,
+    68621, 92222, 983449, 68625, 983447, 68617, 110960, 0, 101459, 101487,
+    110964, 110963, 110962, 0, 0, 101464, 101483, 101463, 983438, 983435,
+    92648, 127379, 0, 65137, 6483, 65392, 0, 4213, 129649, 41303, 0, 0, 0,
+    41306, 983217, 2698, 0, 0, 0, 68396, 0, 41304, 824, 0, 78011, 72315,
+    78894, 74827, 78892, 64804, 9820, 119820, 110985, 110976, 0, 6739, 0,
+    5481, 3490, 110978, 110977, 71706, 69947, 67702, 9124, 12688, 119833,
+    101496, 0, 101495, 119821, 119824, 68367, 42575, 101474, 101478, 119827,
+    101481, 101476, 71087, 68658, 119946, 8025, 68630, 101490, 68675, 92445,
+    71097, 69613, 0, 0, 0, 0, 983430, 2745, 11797, 110990, 983426, 9202,
+    983424, 983425, 0, 0, 0, 10525, 5436, 74584, 110987, 110986, 121506,
+    43080, 121508, 121507, 983415, 6246, 119958, 10921, 9723, 6777, 6776,
+    6775, 0, 0, 70287, 92384, 0, 8669, 0, 0, 65093, 0, 78881, 2716, 0, 0,
+    11252, 101475, 68369, 0, 11060, 12985, 2711, 78872, 78027, 78026, 7992,
+    0, 0, 42938, 78033, 78032, 78877, 70724, 78029, 78028, 78031, 78030,
+    64535, 110998, 10130, 110996, 0, 0, 111001, 111000, 127914, 983412,
+    78014, 5713, 110995, 7570, 110993, 110992, 0, 11190, 129700, 9026, 0,
+    74864, 7547, 78891, 0, 10008, 10222, 0, 129543, 9744, 0, 127193, 983408,
+    119656, 983406, 94070, 983404, 983405, 983402, 9045, 78888, 4225, 78886,
+    78887, 68757, 78885, 78882, 78883, 983397, 983398, 8405, 983396, 10423,
+    10359, 983391, 983392, 0, 129149, 4215, 9789, 0, 4321, 12309, 983400,
+    41313, 0, 5368, 66886, 0, 0, 5366, 0, 5372, 101482, 0, 0, 7720, 7390,
+    2696, 0, 0, 8268, 0, 1790, 0, 0, 118977, 0, 0, 0, 5376, 1835, 72313,
+    78704, 128089, 0, 0, 68655, 1180, 0, 0, 0, 0, 0, 0, 0, 9122, 0, 11928, 0,
+    65283, 0, 101449, 5971, 101448, 43500, 1268, 65097, 983218, 0, 101445, 0,
+    1427, 128440, 0, 5970, 3431, 72299, 101439, 101435, 983384, 983385,
+    983382, 2738, 125066, 10455, 0, 74026, 0, 4222, 6240, 0, 119013, 983389,
+    68377, 6248, 983373, 67815, 983371, 917907, 92582, 0, 101453, 125215, 0,
+    2728, 65549, 64563, 101428, 101425, 101429, 128145, 0, 10713, 7166,
+    119559, 2622, 101450, 0, 0, 0, 8954, 0, 94008, 2632, 42617, 10108, 1011,
+    42852, 12080, 2709, 0, 5716, 0, 0, 0, 0, 127100, 69378, 0, 9515, 127098,
+    66465, 6451, 0, 127097, 8918, 983556, 0, 0, 19950, 0, 0, 0, 44003, 0, 0,
+    0, 0, 0, 0, 983495, 74022, 0, 128795, 68643, 67410, 0, 5721, 0, 0, 0,
+    121074, 11267, 983364, 66464, 5720, 983363, 0, 4219, 5718, 8696, 5717, 0,
+    983370, 983878, 983368, 541, 983366, 983367, 119948, 119089, 68389,
+    983352, 119949, 56, 4216, 10577, 0, 0, 77849, 69620, 983357, 983358,
+    66899, 983356, 0, 0, 67628, 0, 0, 7086, 0, 67998, 67621, 0, 2734, 69616,
+    0, 67627, 118937, 0, 67625, 0, 0, 0, 42593, 0, 128217, 0, 0, 119939, 0,
+    68180, 0, 0, 71104, 7442, 43665, 359, 41253, 68392, 6239, 120599, 41256,
+    0, 67740, 111023, 111022, 111021, 9346, 69660, 41254, 0, 43291, 78002, 0,
+    127024, 124993, 93841, 0, 0, 0, 4368, 983500, 0, 68137, 0, 0, 41024, 0,
+    0, 121359, 121420, 0, 0, 0, 4223, 0, 8574, 83502, 0, 0, 0, 0, 0, 92718,
+    983636, 70432, 128323, 68382, 0, 0, 0, 0, 0, 4144, 0, 83193, 6245, 0,
+    2732, 92644, 0, 0, 0, 83501, 0, 0, 0, 128005, 0, 0, 129652, 983148, 3097,
+    0, 0, 77996, 0, 0, 10863, 111020, 111019, 111018, 0, 111015, 111014,
+    111013, 111012, 118964, 0, 10216, 64293, 0, 0, 69393, 128331, 12325,
+    111010, 8717, 111008, 101413, 0, 101380, 0, 8700, 0, 101382, 68363,
+    10426, 0, 71091, 10362, 0, 1715, 101378, 0, 64918, 101409, 43278, 42635,
+    0, 0, 65275, 0, 0, 101319, 0, 0, 1607, 466, 118949, 0, 0, 127918, 6243,
+    983882, 1350, 74195, 64420, 1993, 5362, 10666, 2708, 92471, 0, 13143,
+    234, 3199, 0, 41268, 6334, 6250, 0, 0, 73750, 0, 73762, 10458, 0, 8576,
+    127136, 0, 2704, 64953, 0, 68211, 8322, 0, 5753, 0, 2694, 0, 0, 2439,
+    65104, 69804, 0, 303, 74625, 92622, 0, 2437, 0, 9817, 4844, 0, 0, 0, 0,
+    0, 121120, 43292, 0, 2441, 0, 0, 0, 0, 0, 2451, 2714, 0, 0, 43379,
+    127984, 74541, 753, 5849, 0, 43089, 0, 0, 119534, 0, 0, 0, 0, 2726, 3107,
+    0, 0, 64937, 0, 78841, 1408, 0, 4607, 101299, 181, 0, 67728, 9539, 0, 0,
+    65201, 121121, 92973, 64185, 4142, 64183, 0, 0, 0, 9706, 64178, 64177,
+    64176, 0, 64182, 64181, 64180, 64179, 11401, 125124, 0, 1822, 0, 128581,
+    68055, 3865, 122918, 0, 10500, 129602, 119024, 0, 110732, 9830, 0, 0, 0,
+    65131, 0, 0, 0, 0, 74608, 9567, 0, 9599, 8748, 0, 0, 9557, 0, 0, 0,
+    11494, 0, 0, 10865, 0, 43279, 64186, 68521, 0, 64191, 64190, 8898, 64188,
+    129153, 41030, 78836, 0, 0, 78820, 126100, 0, 78805, 78806, 78801, 78802,
+    6745, 78800, 0, 0, 0, 110866, 0, 0, 73679, 67838, 41039, 78809, 0, 0,
+    129893, 0, 110869, 127045, 110867, 110868, 127039, 4400, 0, 64207, 10275,
+    8925, 10371, 10307, 64202, 4248, 0, 72802, 4541, 6299, 64204, 64203,
+    64201, 64200, 64199, 64198, 126471, 0, 0, 0, 64193, 64192, 0, 9943,
+    64197, 64196, 64195, 64194, 13282, 42652, 64174, 64173, 83495, 846,
+    72337, 9965, 74495, 72330, 83493, 83494, 2543, 12163, 64170, 83490,
+    64167, 64166, 64165, 64164, 72333, 0, 64169, 64168, 64949, 0, 10251,
+    10247, 64163, 64162, 2295, 43299, 43301, 129363, 0, 70791, 0, 0, 550,
+    9910, 0, 0, 66579, 0, 0, 0, 9504, 0, 0, 10373, 0, 0, 10261, 10253, 7821,
+    10277, 0, 74823, 1552, 0, 0, 129389, 0, 121435, 19910, 0, 0, 118849,
+    121150, 0, 43985, 68051, 0, 69890, 121329, 78355, 983757, 0, 66405, 2431,
+    3744, 66852, 1809, 0, 0, 0, 73759, 1264, 0, 78676, 11697, 121278, 9785,
+    64716, 0, 0, 0, 0, 121307, 0, 0, 42609, 128388, 0, 66912, 127016, 0,
+    983885, 74229, 0, 6487, 93798, 70743, 0, 0, 0, 83484, 83485, 83486,
+    83487, 83480, 8355, 7854, 83483, 954, 64927, 0, 41045, 0, 41438, 0, 0,
+    10711, 0, 0, 0, 0, 64774, 13309, 10947, 66727, 101426, 0, 0, 66795, 0, 0,
+    0, 0, 0, 0, 0, 120634, 69228, 0, 0, 0, 0, 0, 0, 3060, 83478, 9986, 0,
+    83473, 83474, 11698, 77880, 83469, 9916, 11701, 83472, 42586, 0, 8320, 0,
+    119095, 0, 0, 1477, 43289, 0, 74358, 10884, 69446, 9908, 0, 0, 0, 3414,
+    74304, 0, 0, 0, 0, 2110, 0, 68306, 0, 74532, 0, 129865, 0, 0, 7164, 0, 0,
+    0, 11950, 5392, 42248, 65129, 68656, 5397, 129579, 0, 68136, 0, 0, 5395,
+    72870, 5393, 354, 68615, 0, 0, 0, 0, 0, 126236, 0, 0, 626, 0, 5895, 0, 0,
+    5780, 0, 66407, 10220, 0, 71121, 43297, 0, 0, 11468, 64436, 0, 0, 0,
+    73818, 3918, 0, 3797, 72786, 0, 0, 4140, 0, 71254, 0, 9030, 813, 0,
+    68131, 4146, 119957, 5360, 0, 129498, 0, 0, 6249, 0, 0, 0, 0, 0, 73092,
+    0, 4911, 988, 0, 73125, 0, 42948, 0, 0, 0, 0, 74972, 0, 0, 0, 9825, 0, 0,
+    12803, 126977, 11032, 67654, 6244, 0, 0, 68662, 0, 129351, 0, 72131,
+    4169, 0, 0, 0, 129986, 121410, 120657, 0, 0, 68657, 128943, 78496, 0, 0,
+    5898, 74540, 0, 41856, 93056, 194926, 125000, 127373, 83424, 83425,
+    83426, 73736, 83420, 68870, 6448, 6835, 0, 4831, 83418, 83419, 67731, 0,
+    0, 0, 0, 0, 0, 0, 78499, 0, 0, 0, 43288, 0, 0, 0, 0, 0, 43418, 0, 0, 0,
+    7876, 68132, 917872, 0, 917870, 43378, 0, 0, 120890, 5892, 43605, 0, 0,
+    0, 129058, 0, 0, 6251, 83409, 83410, 83411, 83412, 126512, 0, 71092,
+    83408, 10114, 0, 0, 5387, 0, 0, 0, 0, 65553, 78346, 1747, 917849, 65109,
+    69240, 917852, 126509, 0, 0, 0, 0, 125065, 0, 9850, 0, 367, 1472, 917859,
+    6687, 0, 0, 5905, 12339, 8919, 73953, 65680, 0, 0, 78664, 0, 9134, 0,
+    78666, 43011, 0, 126626, 0, 0, 0, 43013, 10614, 0, 0, 83413, 66646,
+    83415, 83416, 0, 73881, 43012, 121127, 83293, 54, 43009, 73885, 0, 6211,
+    0, 0, 83295, 68119, 43008, 10758, 0, 0, 0, 0, 0, 70018, 0, 0, 0, 0,
+    12765, 0, 0, 0, 0, 126580, 0, 0, 43657, 0, 0, 0, 983718, 0, 83405,
+    917843, 0, 0, 83401, 83402, 83403, 83404, 83397, 11363, 12057, 83400,
+    1567, 0, 0, 83396, 0, 8957, 4139, 0, 0, 129336, 0, 0, 12740, 0, 92195,
+    12761, 127793, 12759, 0, 72304, 67169, 83467, 44002, 0, 83462, 83463,
+    83464, 12755, 12762, 41022, 67690, 64217, 476, 0, 983715, 0, 64212,
+    41020, 1382, 64209, 64216, 64215, 64214, 64213, 0, 0, 0, 67584, 8720,
+    3908, 0, 0, 0, 0, 101529, 129576, 0, 0, 3849, 92324, 94026, 9778, 917906,
+    5891, 917912, 55, 917910, 917911, 0, 0, 7935, 67586, 0, 1114, 92599,
+    67585, 78675, 0, 83447, 83449, 0, 0, 0, 64717, 0, 0, 0, 66884, 6292,
+    65303, 0, 6452, 917886, 917887, 66249, 917885, 917890, 917891, 917888,
+    719, 101446, 0, 917892, 0, 0, 0, 94083, 10868, 121333, 2349, 5902,
+    917896, 6335, 917902, 917899, 917900, 0, 64369, 0, 0, 0, 69245, 0,
+    126564, 0, 0, 128565, 0, 0, 0, 0, 0, 6454, 1229, 83457, 83458, 83450,
+    83451, 83452, 65100, 120508, 8224, 917873, 917874, 917879, 917880,
+    917877, 917878, 128929, 0, 917881, 917882, 5365, 67836, 8901, 0, 0,
+    129951, 0, 69257, 5925, 83436, 64330, 128400, 83431, 83432, 83433, 83434,
     83427, 83428, 83429, 83430, 64928, 10543, 0, 0, 83446, 414, 0, 0, 83442,
     6456, 83444, 83445, 11905, 83439, 66284, 83441, 0, 68337, 0, 83437,
     43832, 983139, 9751, 0, 128085, 11770, 0, 0, 69600, 65061, 0, 0, 0, 0, 0,
-    0, 121087, 0, 0, 69924, 0, 0, 0, 69913, 0, 121387, 0, 0, 0, 42038, 387,
-    0, 12737, 0, 0, 43368, 0, 0, 0, 0, 0, 129449, 121295, 0, 69400, 127309,
-    0, 375, 0, 0, 0, 983886, 0, 0, 119202, 119203, 0, 43120, 0, 0, 119196,
-    119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 69698, 13150,
-    64492, 0, 0, 0, 0, 0, 42891, 66327, 74298, 0, 0, 0, 2587, 42193, 0, 6455,
-    0, 4241, 0, 0, 0, 0, 0, 0, 0, 118821, 0, 0, 0, 125030, 0, 128684, 129390,
-    0, 5373, 0, 0, 119232, 10015, 0, 0, 0, 68642, 0, 120855, 42040, 128827,
-    5779, 0, 42037, 83282, 0, 0, 93040, 83283, 0, 0, 127320, 6983, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 119588, 0, 92495, 74558, 0, 68138, 70163, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 11144, 0, 2551, 0, 6453, 0, 6235, 0, 0, 129081, 72886,
-    44020, 11826, 0, 7780, 5369, 118958, 0, 0, 5367, 66870, 0, 0, 5377, 0,
-    68143, 128624, 78245, 5218, 0, 127333, 0, 0, 0, 0, 0, 1300, 0, 127334,
-    64505, 0, 0, 119624, 1465, 0, 0, 0, 0, 0, 0, 0, 113694, 10729, 0, 0,
-    8839, 119243, 0, 7785, 126530, 0, 0, 0, 0, 126603, 0, 0, 0, 3897, 0,
-    92331, 74417, 113704, 0, 68127, 71425, 70688, 0, 0, 0, 0, 0, 3542, 0,
-    120685, 7951, 68152, 118857, 0, 92972, 0, 0, 127311, 73683, 0, 65150,
-    68031, 0, 0, 0, 0, 9985, 0, 127328, 0, 0, 0, 0, 10830, 0, 615, 64490,
-    7574, 0, 0, 0, 12909, 73698, 64559, 127332, 73951, 0, 67996, 2020, 0, 0,
-    0, 120701, 0, 983640, 0, 0, 0, 92991, 0, 0, 9070, 0, 68411, 11281, 42829,
-    0, 1033, 0, 0, 0, 0, 0, 65226, 0, 0, 0, 0, 0, 3450, 0, 7397, 0, 0, 42778,
-    10000, 41088, 449, 0, 0, 68458, 113725, 0, 0, 10738, 69634, 0, 0, 41085,
-    0, 0, 0, 12764, 0, 93058, 3596, 7322, 0, 0, 0, 0, 0, 0, 0, 0, 2092, 0, 0,
-    0, 121350, 10820, 0, 0, 126567, 1853, 0, 0, 93014, 0, 12770, 0, 0,
-    124997, 0, 0, 0, 0, 0, 129053, 4828, 1258, 0, 2006, 0, 0, 74285, 127987,
-    0, 120683, 122880, 983881, 983884, 8846, 128255, 0, 128091, 2650, 9182,
-    1961, 121399, 11525, 0, 1959, 0, 55228, 11774, 41016, 0, 0, 128054,
-    41017, 13109, 0, 10519, 66331, 3454, 19930, 0, 41019, 92894, 0, 0, 78362,
-    41021, 0, 0, 0, 0, 0, 65531, 0, 0, 0, 0, 0, 0, 8865, 6402, 113827, 77923,
-    0, 127924, 0, 7733, 0, 4998, 68493, 0, 0, 0, 4268, 0, 0, 0, 0, 128718,
-    10881, 0, 0, 0, 0, 2014, 0, 71901, 0, 0, 195057, 0, 0, 78357, 65281, 0,
-    0, 0, 0, 0, 2015, 0, 0, 71840, 66318, 74824, 0, 0, 0, 0, 0, 70061, 8094,
-    10135, 0, 0, 794, 0, 0, 66335, 0, 121303, 4343, 0, 4833, 0, 0, 0, 0, 189,
-    12611, 0, 72215, 0, 4838, 126214, 4834, 65078, 0, 126104, 4837, 118853,
-    0, 121230, 4832, 128271, 0, 0, 127838, 0, 0, 0, 0, 0, 0, 0, 3976, 118995,
-    128937, 0, 0, 0, 0, 0, 119010, 0, 121015, 0, 0, 0, 0, 2871, 0, 0, 999, 0,
-    68177, 0, 0, 2017, 0, 67824, 0, 0, 0, 0, 0, 0, 4775, 12555, 12571, 12550,
-    12583, 12560, 2019, 12556, 12584, 12586, 0, 12562, 12561, 12566, 12569,
-    12554, 0, 83344, 0, 68882, 0, 12567, 1402, 0, 0, 83348, 125072, 83347, 0,
-    83346, 0, 0, 0, 0, 64391, 0, 83341, 69602, 0, 1999, 0, 128141, 0, 0, 0,
-    0, 0, 0, 0, 68873, 0, 0, 66913, 2377, 0, 0, 12572, 11318, 12557, 12559,
-    9192, 12549, 12568, 2373, 9446, 9447, 9448, 9449, 0, 9480, 481, 0, 9438,
-    9439, 9440, 9441, 9442, 9443, 9444, 9445, 9430, 9431, 9432, 9433, 9434,
-    9435, 9436, 9437, 983097, 0, 9424, 9425, 9426, 9427, 9428, 7481, 0, 2362,
-    9655, 0, 2004, 0, 9782, 0, 0, 0, 0, 0, 0, 0, 1108, 0, 92461, 0, 0, 0,
-    64781, 0, 0, 0, 121126, 0, 1392, 0, 0, 917557, 0, 8065, 70710, 128739, 0,
-    0, 0, 121068, 92418, 0, 0, 0, 43280, 0, 70718, 1812, 0, 73046, 0, 0, 0,
-    0, 0, 6054, 10697, 3169, 0, 0, 70720, 11487, 70712, 0, 0, 0, 194716, 0,
-    0, 41863, 0, 0, 2304, 0, 92326, 0, 118792, 0, 0, 64760, 11766, 0, 0, 0,
-    0, 69236, 0, 0, 8773, 10733, 36, 0, 0, 0, 0, 0, 11074, 0, 64910, 983130,
-    2009, 0, 0, 128036, 68114, 128906, 0, 0, 0, 0, 12852, 3031, 0, 0, 129088,
-    0, 66414, 0, 0, 119950, 42613, 65933, 366, 0, 9892, 0, 11754, 0, 83329,
-    65301, 44013, 83058, 67245, 10102, 0, 7739, 41026, 0, 0, 0, 0, 0, 0, 0,
-    0, 78386, 129475, 71868, 113811, 13081, 10923, 129330, 0, 68145, 0, 0,
-    74083, 0, 0, 128392, 83063, 83065, 0, 70706, 0, 0, 0, 70168, 66586, 4183,
-    64967, 66250, 0, 92547, 0, 0, 113685, 0, 3792, 2011, 0, 0, 126503, 83332,
-    0, 120595, 0, 68489, 41023, 0, 0, 11659, 7922, 12614, 2005, 8523, 0, 0,
-    7513, 1863, 129436, 83337, 128969, 0, 120274, 120033, 0, 8144, 0, 73031,
-    120269, 127524, 120270, 42241, 8783, 83326, 0, 0, 120735, 983959, 0,
-    129367, 0, 10680, 0, 43293, 68771, 0, 119164, 83320, 92467, 10187, 0, 0,
-    0, 83315, 0, 0, 0, 10968, 43296, 0, 0, 0, 0, 0, 1005, 43826, 120030, 0,
-    2870, 0, 113759, 0, 0, 0, 0, 235, 1384, 0, 74887, 70494, 120409, 0, 9796,
-    69895, 983812, 0, 0, 13186, 120407, 0, 0, 0, 0, 42527, 12911, 43427,
-    1383, 0, 0, 0, 0, 6156, 68117, 0, 7993, 4288, 0, 0, 13238, 13244, 0, 0,
-    120426, 13234, 120427, 0, 118904, 0, 11364, 0, 1380, 65617, 120253,
-    120261, 13196, 13197, 120311, 120419, 9495, 0, 0, 120418, 0, 73976,
-    128160, 0, 6941, 0, 13205, 13211, 5801, 0, 74271, 120319, 0, 120302,
-    7670, 0, 68075, 983587, 0, 19957, 72314, 2021, 93811, 43877, 0, 0, 0, 0,
-    3875, 0, 64341, 0, 9814, 43457, 13066, 3314, 7787, 0, 0, 0, 0, 0, 0,
-    64531, 0, 0, 0, 0, 0, 0, 127138, 0, 0, 9742, 0, 0, 10800, 0, 8404, 0,
-    92592, 0, 7089, 0, 78545, 0, 0, 0, 0, 0, 4772, 5771, 0, 0, 9841, 8843, 0,
-    0, 0, 0, 120816, 0, 123137, 0, 0, 0, 0, 0, 0, 8849, 0, 0, 65112, 1796, 0,
-    0, 69665, 8164, 41301, 3502, 0, 122884, 128387, 0, 983816, 5825, 0, 0, 0,
-    0, 121322, 10983, 10354, 10418, 0, 2022, 0, 1409, 100789, 0, 0, 0, 0,
-    1390, 0, 0, 10471, 65904, 5846, 126472, 0, 0, 0, 0, 0, 0, 66035, 0, 0, 0,
-    0, 128190, 0, 3168, 67733, 0, 0, 2370, 0, 126243, 0, 195049, 0, 0, 1836,
-    0, 121207, 119137, 118959, 125232, 0, 0, 0, 2390, 3944, 0, 0, 0, 0,
-    69908, 125011, 0, 0, 123200, 0, 0, 8975, 64739, 0, 0, 0, 0, 64409, 0, 0,
-    0, 0, 128564, 0, 0, 0, 0, 6204, 0, 0, 0, 10911, 64954, 119003, 74809,
-    118903, 4267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92887, 0, 0, 0, 0, 121125, 0,
+    0, 121087, 0, 0, 69924, 0, 0, 0, 69913, 0, 121387, 101513, 101504,
+    101512, 42038, 387, 0, 12737, 0, 0, 43368, 0, 0, 0, 0, 129713, 129449,
+    121295, 0, 69400, 127309, 0, 375, 0, 0, 0, 983886, 0, 0, 119202, 119203,
+    0, 43120, 0, 0, 119196, 119197, 0, 4529, 119200, 119201, 119198, 119199,
+    0, 0, 69698, 13150, 64492, 0, 0, 0, 0, 0, 42891, 66327, 74298, 0, 0, 0,
+    2587, 42193, 0, 6455, 0, 4241, 0, 0, 0, 0, 0, 0, 0, 118821, 0, 0, 0,
+    125030, 0, 128684, 129390, 0, 5373, 0, 0, 119232, 10015, 0, 0, 0, 68642,
+    0, 120855, 42040, 128827, 5779, 129841, 42037, 83282, 0, 0, 93040, 83283,
+    101116, 0, 101117, 6983, 0, 0, 101115, 0, 0, 0, 0, 101111, 0, 119588, 0,
+    92495, 74558, 0, 68138, 70163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11144, 0,
+    2551, 0, 6453, 0, 6235, 0, 0, 129081, 72886, 44020, 11826, 0, 7780, 5369,
+    118958, 0, 0, 5367, 66870, 0, 0, 5377, 0, 68143, 128624, 78245, 5218, 0,
+    127333, 0, 0, 129717, 0, 0, 1300, 0, 127334, 64505, 0, 0, 119624, 1465,
+    0, 0, 0, 0, 0, 101109, 0, 113694, 10729, 0, 0, 8839, 119243, 0, 7785,
+    126530, 0, 0, 0, 0, 126603, 0, 0, 0, 3897, 0, 92331, 74417, 113704, 0,
+    68127, 71425, 70688, 0, 0, 0, 0, 69287, 3542, 0, 120685, 7951, 68152,
+    118857, 0, 92972, 0, 0, 127311, 73683, 0, 65150, 68031, 0, 0, 0, 0, 9985,
+    0, 127328, 0, 0, 0, 0, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 73698,
+    64559, 127332, 73951, 0, 67996, 2020, 0, 0, 0, 120701, 0, 983640, 0, 0,
+    0, 92991, 0, 0, 9070, 0, 68411, 11281, 42829, 0, 1033, 0, 0, 0, 0, 0,
+    65226, 0, 0, 0, 0, 0, 3450, 0, 7397, 0, 0, 42778, 10000, 41088, 449, 0,
+    0, 68458, 113725, 0, 0, 10738, 69634, 0, 0, 41085, 0, 0, 0, 12764, 0,
+    93058, 3596, 7322, 0, 0, 0, 0, 0, 0, 0, 0, 2092, 0, 0, 0, 121350, 10820,
+    0, 0, 126567, 1853, 0, 0, 93014, 0, 12770, 0, 0, 124997, 0, 0, 0, 0, 0,
+    129053, 4828, 1258, 0, 2006, 0, 0, 74285, 127987, 0, 120683, 122880,
+    983881, 983884, 8846, 128255, 0, 128091, 2650, 9182, 1961, 121399, 11525,
+    0, 1959, 0, 55228, 11774, 41016, 0, 0, 128054, 41017, 13109, 0, 10519,
+    66331, 3454, 19930, 0, 41019, 92894, 0, 0, 78362, 41021, 101566, 0, 0, 0,
+    0, 65531, 0, 0, 0, 0, 0, 0, 8865, 6402, 113827, 77923, 0, 101536, 0,
+    7733, 0, 4998, 68493, 0, 0, 0, 4268, 101368, 0, 0, 101555, 101579, 10881,
+    0, 0, 0, 0, 2014, 0, 71901, 0, 0, 195057, 0, 0, 78357, 65281, 0, 0, 0, 0,
+    0, 2015, 0, 0, 71840, 66318, 74824, 101575, 0, 101574, 0, 0, 70061, 8094,
+    10135, 101551, 0, 794, 0, 0, 66335, 0, 121303, 4343, 0, 4833, 0, 0, 0, 0,
+    189, 12611, 0, 72215, 0, 4838, 126214, 4834, 65078, 0, 126104, 4837,
+    118853, 0, 121230, 4832, 128271, 0, 101584, 127838, 0, 0, 0, 0, 0, 0, 0,
+    3976, 118995, 128937, 0, 0, 0, 0, 0, 119010, 0, 121015, 0, 0, 0, 0, 2871,
+    0, 0, 999, 0, 68177, 0, 0, 2017, 0, 67824, 0, 0, 0, 0, 0, 0, 4775, 12555,
+    12571, 12550, 12583, 12560, 2019, 12556, 12584, 12586, 0, 12562, 12561,
+    12566, 12569, 12554, 0, 83344, 0, 68882, 0, 12567, 1402, 0, 0, 83348,
+    125072, 83347, 0, 83346, 0, 0, 0, 0, 64391, 0, 83341, 69602, 0, 1999, 0,
+    128141, 0, 0, 0, 0, 0, 0, 0, 68873, 0, 0, 66913, 2377, 0, 0, 12572,
+    11318, 12557, 12559, 9192, 12549, 12568, 2373, 9446, 9447, 9448, 9449, 0,
+    9480, 481, 0, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9430, 9431,
+    9432, 9433, 9434, 9435, 9436, 9437, 983097, 0, 9424, 9425, 9426, 9427,
+    9428, 7481, 0, 2362, 9655, 0, 2004, 0, 9782, 0, 0, 0, 0, 0, 0, 0, 1108,
+    0, 92461, 0, 128764, 0, 64781, 0, 0, 0, 121126, 0, 1392, 0, 0, 917557, 0,
+    8065, 70710, 128739, 0, 0, 0, 121068, 92418, 0, 0, 0, 43280, 0, 70718,
+    1812, 0, 73046, 0, 0, 0, 0, 0, 6054, 10697, 3169, 0, 0, 70720, 11487,
+    70712, 0, 0, 0, 194716, 0, 0, 41863, 0, 0, 2304, 0, 92326, 0, 42951, 0,
+    0, 64760, 11766, 0, 0, 0, 0, 69236, 0, 0, 8773, 10733, 36, 0, 0, 0, 0, 0,
+    11074, 0, 64910, 983130, 2009, 0, 0, 128036, 68114, 128906, 0, 0, 0,
+    983979, 12852, 3031, 0, 0, 129088, 0, 66414, 0, 0, 119950, 42613, 65933,
+    366, 0, 9892, 0, 11754, 101107, 83329, 65301, 44013, 83058, 67245, 10102,
+    0, 7739, 41026, 0, 0, 0, 0, 0, 0, 0, 0, 78386, 129475, 71868, 113811,
+    13081, 10923, 129330, 0, 68145, 0, 0, 74083, 0, 0, 128392, 83063, 83065,
+    0, 70706, 0, 0, 0, 70168, 66586, 4183, 64967, 66250, 0, 92547, 0, 0,
+    113685, 0, 3792, 2011, 0, 0, 126503, 83332, 0, 120595, 0, 68489, 41023,
+    0, 0, 11659, 7922, 12614, 2005, 8523, 0, 0, 7513, 1863, 129436, 83337,
+    128969, 0, 120274, 120033, 0, 8144, 0, 73031, 120269, 127524, 120270,
+    42241, 8783, 83326, 0, 0, 120735, 983959, 0, 129367, 0, 10680, 0, 43293,
+    68771, 0, 119164, 83320, 72003, 10187, 0, 0, 0, 83315, 0, 0, 0, 10968,
+    43296, 0, 0, 0, 101400, 0, 1005, 43826, 120030, 0, 2870, 0, 101399, 0, 0,
+    983779, 0, 235, 1384, 0, 74887, 70494, 120409, 0, 9796, 69895, 983812, 0,
+    120406, 13186, 120407, 0, 0, 0, 0, 42527, 12911, 43427, 1383, 0, 0, 0, 0,
+    6156, 68117, 0, 7993, 4288, 0, 0, 13238, 13244, 0, 0, 120426, 13234,
+    120427, 0, 118904, 0, 11364, 0, 1380, 65617, 120253, 120261, 13196,
+    13197, 120311, 120419, 9495, 0, 0, 120418, 0, 73976, 128160, 0, 6941, 0,
+    13205, 13211, 5801, 0, 74271, 120319, 0, 120302, 7670, 0, 68075, 983583,
+    0, 19957, 72314, 2021, 93811, 43877, 0, 0, 0, 0, 3875, 120431, 64341, 0,
+    9814, 43457, 13066, 3314, 7787, 0, 0, 0, 0, 0, 0, 64531, 129860, 0, 0, 0,
+    0, 0, 127138, 0, 0, 9742, 0, 0, 10800, 0, 8404, 0, 92592, 0, 7089, 0,
+    78545, 0, 0, 0, 0, 0, 4772, 5771, 101405, 0, 9841, 8843, 0, 0, 0, 129862,
+    120816, 0, 123137, 0, 0, 0, 0, 0, 0, 8849, 0, 0, 65112, 1796, 0, 0,
+    69665, 8164, 41301, 3502, 0, 122884, 128387, 0, 983816, 5825, 0, 0, 0, 0,
+    121322, 10983, 10354, 10418, 0, 2022, 0, 1409, 100789, 0, 0, 0, 0, 1390,
+    0, 0, 10471, 65904, 5846, 126472, 0, 0, 0, 0, 0, 0, 66035, 0, 0, 0, 0,
+    128190, 0, 3168, 67733, 0, 0, 2370, 0, 126243, 0, 195049, 0, 0, 1836, 0,
+    121207, 119137, 118959, 125232, 0, 0, 0, 2390, 3944, 0, 0, 0, 0, 69908,
+    125011, 0, 0, 123200, 0, 0, 8975, 64739, 0, 0, 0, 0, 64409, 0, 0, 0, 0,
+    128564, 0, 0, 0, 0, 6204, 0, 0, 0, 10911, 64954, 119003, 74809, 118903,
+    4267, 0, 0, 0, 0, 0, 0, 72023, 0, 0, 0, 92887, 0, 0, 0, 0, 121125, 0,
     128337, 5842, 0, 41439, 0, 0, 0, 9328, 0, 120980, 120917, 0, 0, 2285, 0,
     0, 0, 0, 0, 64555, 0, 0, 72162, 9541, 0, 0, 0, 41441, 0, 0, 0, 41040,
     2459, 0, 0, 41041, 0, 0, 0, 0, 0, 10450, 0, 41043, 0, 0, 43125, 0, 0, 0,
     0, 0, 121008, 68436, 128040, 0, 120649, 0, 0, 4312, 43927, 0, 0, 11923,
-    42227, 0, 5763, 0, 4827, 74559, 42228, 64406, 0, 0, 0, 433, 119620, 0,
-    2499, 67167, 67166, 0, 11973, 0, 4293, 42271, 42224, 0, 0, 66322, 42226,
-    0, 0, 0, 74180, 0, 55277, 0, 0, 0, 983265, 0, 74632, 0, 0, 71103, 0, 0,
-    0, 585, 2383, 0, 43263, 0, 4290, 0, 0, 68920, 0, 8511, 0, 0, 0, 119048,
-    2380, 126119, 0, 71704, 2376, 0, 0, 0, 5197, 127046, 127047, 127048,
-    2366, 127050, 127051, 73442, 0, 0, 0, 93835, 0, 93818, 0, 0, 74188,
-    113813, 0, 0, 0, 983819, 0, 0, 0, 0, 1847, 0, 72771, 0, 42384, 0, 4227,
-    74158, 0, 92501, 0, 0, 42365, 0, 128902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    128563, 0, 983504, 127560, 2754, 0, 0, 128900, 0, 127867, 119638, 0,
-    1711, 12984, 92365, 0, 6255, 0, 0, 0, 0, 0, 42063, 74184, 0, 0, 0, 0, 0,
-    0, 0, 41035, 43274, 0, 11256, 119088, 0, 520, 0, 41037, 128162, 0, 0,
+    42227, 0, 5763, 0, 4827, 74559, 42228, 64406, 0, 0, 129703, 433, 119620,
+    0, 2499, 67167, 67166, 0, 11973, 0, 4293, 42271, 42224, 0, 0, 66322,
+    42226, 0, 0, 0, 74180, 0, 55277, 0, 0, 0, 983265, 0, 74632, 0, 0, 71103,
+    0, 0, 0, 585, 2383, 0, 43263, 0, 4290, 0, 0, 68920, 0, 8511, 0, 0, 0,
+    119048, 2380, 126119, 0, 71704, 2376, 0, 0, 0, 5197, 127046, 127047,
+    127048, 2366, 127050, 127051, 73442, 0, 0, 0, 93835, 0, 93818, 0, 0,
+    74188, 113813, 0, 0, 0, 983819, 0, 0, 0, 0, 1847, 0, 72771, 0, 42384, 0,
+    4227, 74158, 0, 92501, 0, 0, 42365, 0, 128902, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 128563, 0, 983504, 127560, 2754, 0, 0, 128900, 0, 127867, 119638,
+    0, 1711, 12984, 92365, 0, 6255, 0, 0, 0, 0, 0, 42063, 74184, 0, 0, 0, 0,
+    0, 0, 0, 41035, 43274, 0, 11256, 119088, 0, 520, 0, 41037, 128162, 0, 0,
     41034, 0, 983810, 64815, 0, 0, 321, 41028, 0, 0, 0, 0, 0, 0, 0, 74191, 0,
-    0, 72767, 1861, 0, 129666, 0, 0, 100770, 0, 0, 128530, 3859, 0, 41660, 0,
-    70793, 0, 983737, 75014, 0, 127514, 41658, 0, 0, 0, 0, 0, 4414, 120766,
-    0, 42632, 0, 0, 0, 0, 0, 1405, 0, 43220, 43341, 0, 0, 0, 0, 0, 983714,
-    11199, 0, 3513, 0, 70341, 43342, 0, 65529, 0, 0, 0, 6485, 1397, 0, 0,
-    92678, 0, 0, 0, 82961, 0, 82962, 0, 74270, 43287, 983712, 0, 0, 983719,
-    0, 71914, 4317, 10490, 0, 0, 194867, 74463, 128952, 464, 41624, 0, 0, 0,
-    1346, 128240, 917631, 64724, 128566, 423, 0, 0, 113748, 0, 128161, 0, 0,
-    120563, 64960, 0, 0, 0, 0, 9584, 129106, 0, 125026, 0, 9718, 0, 42642,
-    92977, 64750, 0, 0, 0, 0, 128333, 0, 3204, 64666, 0, 43530, 2752, 0, 0,
-    119594, 0, 0, 0, 0, 92371, 0, 41983, 0, 7010, 0, 0, 41495, 92379, 5877,
-    42252, 93070, 8009, 3305, 0, 0, 0, 0, 92293, 0, 0, 0, 100836, 0, 65915,
-    1400, 75018, 10685, 75017, 2103, 0, 0, 43276, 0, 11169, 0, 6481, 0, 0, 0,
-    100837, 72249, 100838, 74198, 0, 9116, 0, 0, 0, 0, 0, 0, 8129, 92994, 0,
-    124992, 0, 11658, 0, 0, 3452, 41031, 0, 1385, 0, 0, 0, 43340, 11123,
-    41033, 6493, 12758, 0, 0, 11426, 0, 1681, 100755, 1204, 11960, 69902, 0,
-    69457, 0, 119322, 0, 7415, 43338, 0, 0, 67717, 64915, 0, 100759, 100850,
-    41497, 65044, 0, 19960, 65358, 983601, 0, 0, 0, 73670, 0, 1789, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 64728, 0, 0, 0, 6506, 64312, 0, 2368, 0, 0, 0, 0,
-    3439, 1825, 1192, 0, 73739, 10639, 0, 7790, 5430, 0, 0, 2848, 92981, 0,
-    0, 7607, 0, 0, 0, 120658, 0, 0, 8883, 0, 728, 0, 0, 0, 0, 92931, 0,
-    121372, 128348, 0, 68078, 8091, 11447, 0, 0, 126261, 0, 0, 70003, 0, 0,
-    74419, 12335, 0, 0, 3443, 0, 0, 0, 127145, 0, 0, 0, 0, 11843, 0, 9205,
-    8624, 128543, 92930, 43295, 0, 65445, 0, 6277, 41672, 0, 10010, 70186,
-    983052, 0, 835, 71340, 0, 0, 0, 0, 0, 5426, 4258, 0, 64891, 5424, 0,
-    8283, 0, 5434, 0, 0, 0, 0, 0, 11947, 0, 1404, 0, 11432, 0, 3464, 6486,
-    4819, 0, 0, 570, 8095, 0, 0, 1498, 0, 0, 0, 431, 67820, 0, 0, 128096, 0,
-    0, 13096, 0, 0, 43408, 0, 128538, 8835, 77875, 0, 0, 0, 0, 0, 0, 0, 0,
-    3477, 227, 10488, 0, 382, 11418, 0, 5878, 0, 0, 0, 0, 6484, 92355, 66039,
-    0, 0, 0, 78717, 0, 92662, 119665, 0, 0, 43290, 0, 0, 0, 0, 8782, 0, 0,
-    4323, 128649, 0, 120903, 12094, 0, 0, 0, 0, 92953, 3856, 120970, 0, 5872,
-    6495, 72306, 0, 0, 0, 67173, 67172, 67171, 3953, 0, 0, 93063, 11994,
-    4339, 0, 92654, 0, 0, 0, 0, 128804, 0, 5228, 0, 9766, 0, 92741, 0, 0, 0,
-    0, 68860, 0, 1162, 0, 2671, 0, 0, 92632, 92631, 72117, 0, 73811, 0,
-    194895, 0, 68085, 0, 74331, 11424, 0, 10466, 121239, 0, 194890, 0, 4820,
-    0, 0, 0, 194891, 0, 119212, 4896, 0, 4897, 42821, 64611, 0, 4438, 0, 0,
-    1753, 11331, 6147, 0, 43282, 8833, 0, 0, 6504, 0, 0, 0, 0, 0, 1413, 0, 0,
-    64353, 12141, 121138, 0, 0, 43163, 0, 72880, 64789, 127094, 838, 127092,
-    120697, 127090, 5014, 0, 256, 0, 0, 42443, 42739, 0, 7542, 0, 70389, 0,
-    6489, 10048, 74326, 0, 66573, 0, 125271, 78712, 11761, 126078, 129603,
-    41094, 0, 0, 0, 0, 92689, 8453, 0, 0, 120942, 128184, 0, 11816, 0, 0,
-    2930, 93845, 0, 41098, 92771, 41093, 0, 0, 6498, 41096, 0, 0, 1238, 200,
-    0, 1660, 74476, 0, 0, 74362, 0, 0, 72301, 9224, 0, 0, 0, 0, 0, 0, 0, 0,
-    72729, 43284, 0, 72110, 120561, 13183, 0, 0, 0, 1669, 10776, 0, 0, 0, 0,
-    0, 1732, 4030, 0, 3963, 0, 0, 0, 6491, 0, 0, 914, 121394, 0, 0, 0, 78713,
-    0, 92441, 74367, 0, 0, 0, 0, 0, 0, 0, 0, 65537, 0, 0, 43430, 5301, 0,
-    92618, 0, 43285, 0, 0, 125186, 0, 0, 5876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 11114, 74536, 0, 0, 0, 0, 983129, 0, 0, 0, 0, 10915, 983069, 12007, 0,
-    0, 0, 0, 67655, 92604, 0, 8629, 0, 43168, 41872, 0, 0, 0, 42488, 0, 0, 0,
-    0, 0, 64730, 70041, 0, 122895, 0, 0, 0, 92306, 11416, 4280, 128516, 8765,
-    73451, 0, 1393, 0, 11157, 74386, 0, 0, 0, 0, 6683, 0, 93832, 12144, 0,
-    74513, 13019, 74994, 0, 0, 0, 983267, 0, 6488, 357, 0, 41100, 0, 41104,
-    0, 41099, 0, 71320, 0, 0, 0, 4434, 0, 0, 0, 74231, 83107, 0, 194914, 0,
-    0, 72286, 68305, 0, 41759, 12757, 0, 0, 72769, 9790, 8995, 0, 121095,
-    68209, 0, 41764, 0, 0, 72322, 2268, 0, 0, 0, 12743, 0, 6480, 0, 41779, 0,
-    66601, 0, 74490, 10986, 66602, 0, 64807, 0, 0, 41767, 119629, 0, 0, 0,
-    3955, 64571, 194918, 127089, 0, 70187, 69975, 9770, 12305, 12230, 0,
-    78579, 0, 0, 74752, 0, 0, 123168, 128263, 74449, 0, 0, 69611, 0, 0,
-    71131, 129505, 78573, 0, 0, 11116, 0, 5747, 0, 110667, 9802, 41092,
-    120731, 0, 0, 0, 0, 0, 120733, 41090, 0, 0, 0, 11271, 57, 0, 0, 0, 0,
-    71268, 121290, 43137, 0, 0, 0, 126221, 0, 0, 0, 0, 0, 277, 74385, 0, 0,
-    0, 72155, 0, 13025, 8757, 0, 0, 1574, 0, 126124, 100800, 0, 5749, 0, 0,
-    42824, 0, 1039, 9801, 0, 5745, 0, 41858, 0, 0, 120655, 0, 41862, 0, 0, 0,
-    436, 4771, 194636, 42501, 0, 10573, 0, 0, 0, 917986, 9644, 0, 0, 0, 0,
-    69837, 0, 0, 0, 0, 67409, 0, 0, 0, 125204, 11939, 0, 0, 0, 0, 0, 0, 0,
-    3504, 0, 0, 0, 126209, 0, 10226, 65558, 0, 3594, 0, 0, 40, 0, 0, 0, 0, 0,
-    74312, 72138, 74337, 0, 983667, 0, 0, 0, 70476, 0, 121143, 72317, 0, 0,
-    4304, 0, 0, 78707, 0, 0, 0, 78597, 1348, 78596, 0, 0, 0, 70406, 92392, 0,
-    7599, 0, 0, 13269, 0, 0, 0, 100804, 0, 74494, 6097, 7568, 43980, 4982,
-    78592, 0, 0, 0, 0, 13270, 0, 0, 13138, 0, 9484, 0, 0, 71364, 0, 0, 0,
-    9487, 0, 92913, 0, 71911, 78668, 73963, 6193, 0, 0, 0, 194848, 7228,
-    10011, 194849, 194852, 194851, 11654, 194853, 126218, 194855, 0, 194857,
-    3604, 0, 0, 0, 0, 0, 94110, 43740, 94109, 194860, 194863, 66750, 121021,
-    0, 94111, 6995, 74173, 5437, 74174, 0, 8702, 7339, 194842, 0, 199,
-    194843, 194846, 194845, 0, 126069, 0, 67818, 0, 7560, 0, 0, 0, 0, 6472,
-    65814, 0, 128983, 70845, 0, 0, 9191, 0, 0, 0, 0, 0, 10196, 0, 0, 6585, 0,
-    120750, 0, 0, 71872, 129129, 0, 0, 78590, 72308, 11382, 129499, 0,
-    983651, 0, 194833, 194832, 194835, 129540, 94020, 194836, 42727, 194838,
-    128252, 78585, 43874, 119610, 0, 0, 43248, 0, 194816, 0, 194818, 128845,
-    194820, 194819, 5297, 194821, 13284, 6112, 93964, 93010, 73927, 42947, 0,
-    65746, 0, 0, 194827, 194826, 4342, 42839, 194831, 1677, 0, 72135, 0, 0,
-    0, 11011, 66399, 0, 0, 0, 10160, 0, 0, 0, 0, 2052, 4308, 92174, 43000, 0,
+    0, 72767, 1861, 118938, 129666, 0, 0, 100770, 0, 0, 128530, 3859, 0,
+    41660, 0, 70793, 0, 983737, 75014, 0, 127514, 41658, 0, 0, 0, 0, 0, 4414,
+    120766, 0, 42632, 0, 0, 0, 0, 0, 1405, 0, 43220, 43341, 0, 0, 0, 0, 0,
+    983714, 11199, 0, 3513, 0, 70341, 43342, 0, 65529, 0, 0, 0, 6485, 1397,
+    0, 0, 92678, 0, 0, 0, 82961, 0, 82962, 0, 74270, 43287, 983712, 0, 0,
+    983719, 0, 71914, 4317, 10490, 0, 0, 194867, 74463, 128952, 464, 41624,
+    0, 0, 0, 1346, 128240, 69271, 64724, 128566, 423, 0, 0, 113748, 0,
+    128161, 0, 0, 120563, 64960, 0, 0, 0, 0, 9584, 129106, 0, 125026, 0,
+    9718, 0, 42642, 92977, 64750, 0, 0, 0, 0, 128333, 0, 3204, 64666, 0,
+    43530, 2752, 0, 0, 119594, 0, 0, 0, 0, 92371, 0, 41983, 0, 7010, 0, 0,
+    41495, 92379, 5877, 42252, 93070, 8009, 3305, 0, 0, 0, 0, 92293, 0, 0, 0,
+    100836, 0, 65915, 1400, 75018, 10685, 75017, 2103, 0, 0, 43276, 0, 11169,
+    0, 6481, 0, 0, 0, 100837, 72249, 100838, 74198, 0, 9116, 0, 0, 0, 0, 0,
+    0, 8129, 92994, 0, 124992, 0, 11658, 0, 0, 3452, 41031, 0, 1385, 0, 0, 0,
+    43340, 11123, 41033, 6493, 12758, 0, 0, 11426, 0, 1681, 100755, 1204,
+    11960, 69902, 0, 69457, 0, 119322, 129483, 7415, 43338, 0, 0, 67717,
+    64915, 0, 100759, 72021, 41497, 65044, 0, 19960, 65358, 983601, 0, 0, 0,
+    73670, 0, 1789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64728, 0, 0, 0, 6506,
+    64312, 0, 2368, 0, 0, 0, 0, 3439, 1825, 1192, 0, 73739, 10639, 0, 7790,
+    5430, 0, 0, 2848, 92981, 0, 0, 7607, 0, 0, 0, 120658, 0, 0, 8883, 0, 728,
+    0, 0, 0, 0, 92931, 0, 121372, 128348, 0, 68078, 8091, 11447, 0, 0,
+    126261, 983710, 0, 70003, 0, 0, 74419, 12335, 0, 0, 3443, 0, 0, 0,
+    127145, 0, 0, 0, 0, 11843, 0, 9205, 8624, 128543, 92930, 43295, 0, 65445,
+    0, 6277, 41672, 0, 10010, 70186, 983052, 0, 835, 71340, 0, 0, 0, 0, 0,
+    5426, 4258, 0, 64891, 5424, 0, 8283, 0, 5434, 0, 0, 0, 0, 0, 11947, 0,
+    1404, 0, 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 0, 0, 1498, 0, 0,
+    0, 431, 67820, 0, 0, 128096, 0, 0, 13096, 0, 0, 43408, 0, 128538, 8835,
+    77875, 0, 0, 0, 0, 0, 0, 0, 0, 3477, 227, 10488, 0, 382, 11418, 0, 5878,
+    0, 0, 0, 0, 6484, 92355, 66039, 0, 0, 0, 78717, 0, 92662, 119665, 0, 0,
+    43290, 0, 0, 0, 0, 8782, 0, 0, 4323, 128649, 0, 120903, 12094, 0, 0, 0,
+    0, 92953, 3856, 120970, 0, 5872, 6495, 72306, 0, 0, 0, 67173, 67172,
+    67171, 3953, 0, 0, 93063, 11994, 4339, 0, 92654, 0, 0, 0, 0, 128804, 0,
+    5228, 0, 9766, 0, 92741, 0, 0, 0, 0, 68860, 0, 1162, 0, 2671, 0, 0,
+    92632, 92631, 72117, 0, 73811, 0, 194895, 0, 68085, 0, 74331, 11424, 0,
+    10466, 121239, 0, 194890, 0, 4820, 0, 0, 0, 194891, 0, 119212, 4896, 0,
+    4897, 42821, 64611, 0, 4438, 0, 0, 1753, 11331, 6147, 0, 43282, 8833, 0,
+    0, 6504, 0, 0, 0, 0, 0, 1413, 0, 0, 64353, 12141, 121138, 0, 0, 43163, 0,
+    72880, 64789, 127094, 838, 127092, 120697, 127090, 5014, 0, 256, 0, 0,
+    42443, 42739, 0, 7542, 0, 70389, 0, 6489, 10048, 74326, 0, 66573, 0,
+    125271, 78712, 11761, 126078, 129603, 41094, 0, 0, 0, 0, 92689, 8453, 0,
+    0, 120942, 128184, 0, 11816, 0, 0, 2930, 93845, 0, 41098, 92771, 41093,
+    0, 0, 6498, 41096, 0, 0, 1238, 200, 0, 1660, 74476, 0, 0, 74362, 0, 0,
+    72301, 9224, 0, 0, 0, 0, 0, 0, 0, 0, 72729, 43284, 0, 72110, 120561,
+    13183, 0, 0, 0, 1669, 10776, 0, 0, 0, 0, 0, 1732, 4030, 0, 3963, 0, 0, 0,
+    6491, 0, 0, 914, 121394, 0, 0, 0, 78713, 0, 92441, 74367, 0, 0, 0, 0, 0,
+    0, 0, 0, 65537, 0, 0, 43430, 5301, 0, 92618, 0, 43285, 0, 0, 125186, 0,
+    0, 5876, 0, 69555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11114, 74536, 0, 0, 0, 0,
+    983129, 0, 0, 0, 0, 10915, 983069, 12007, 0, 0, 0, 0, 67655, 92604, 0,
+    8629, 0, 43168, 41872, 0, 0, 0, 42488, 0, 0, 0, 0, 0, 64730, 70041, 0,
+    122895, 0, 0, 0, 92306, 11416, 4280, 128516, 8765, 73451, 0, 1393, 0,
+    11157, 74386, 0, 0, 0, 0, 6683, 0, 93832, 12144, 0, 74513, 13019, 74994,
+    0, 0, 0, 983267, 0, 6488, 357, 0, 41100, 0, 41104, 0, 41099, 0, 71320, 0,
+    0, 0, 4434, 0, 0, 0, 74231, 83107, 0, 194914, 0, 0, 72286, 68305, 0,
+    41759, 12757, 0, 0, 72769, 9790, 8995, 0, 121095, 68209, 0, 41764, 0, 0,
+    72322, 2268, 0, 129845, 0, 12743, 0, 6480, 0, 41779, 0, 66601, 0, 74490,
+    10986, 66602, 0, 64807, 0, 0, 41767, 119629, 0, 0, 0, 3955, 64571,
+    194918, 127089, 0, 70187, 69975, 9770, 12305, 12230, 0, 78579, 0, 0,
+    74752, 0, 0, 123168, 128263, 74449, 0, 65948, 69611, 0, 0, 71131, 129505,
+    78573, 0, 0, 11116, 0, 5747, 0, 110667, 9802, 41092, 120731, 0, 0, 0, 0,
+    0, 120733, 41090, 0, 0, 0, 11271, 57, 0, 0, 0, 0, 71268, 121290, 43137,
+    0, 0, 0, 126221, 0, 0, 0, 0, 0, 277, 74385, 0, 0, 0, 72155, 0, 13025,
+    8757, 0, 0, 1574, 0, 126124, 100800, 0, 5749, 129923, 0, 42824, 0, 1039,
+    9801, 0, 5745, 0, 41858, 0, 0, 120655, 0, 41862, 0, 0, 0, 436, 4771,
+    194636, 42501, 0, 10573, 0, 0, 0, 917986, 9644, 0, 0, 0, 0, 69837, 0, 0,
+    0, 0, 67409, 0, 0, 0, 125204, 11939, 0, 0, 0, 0, 0, 0, 0, 3504, 0, 0, 0,
+    126209, 0, 10226, 65558, 0, 3594, 0, 0, 40, 0, 0, 0, 0, 0, 74312, 72138,
+    74337, 0, 69577, 0, 0, 0, 70476, 0, 121143, 72317, 0, 0, 4304, 0, 0,
+    78707, 0, 0, 0, 78597, 1348, 78596, 0, 0, 0, 70406, 92392, 0, 7599, 0, 0,
+    13269, 0, 129729, 0, 100804, 0, 74494, 6097, 7568, 43980, 4982, 78592, 0,
+    0, 0, 0, 13270, 0, 0, 13138, 0, 9484, 0, 0, 71364, 0, 0, 0, 9487, 0,
+    92913, 0, 71911, 78668, 73963, 6193, 0, 0, 0, 194848, 7228, 10011,
+    194849, 194852, 194851, 11654, 194853, 126218, 194855, 0, 194857, 3604,
+    0, 0, 0, 0, 0, 94110, 43740, 94109, 194860, 194863, 66750, 121021, 0,
+    94111, 6995, 74173, 5437, 74174, 0, 8702, 7339, 129981, 0, 199, 194843,
+    194846, 194845, 0, 126069, 0, 67818, 0, 7560, 0, 0, 0, 0, 6472, 65814, 0,
+    128983, 70845, 0, 0, 9191, 0, 0, 0, 0, 0, 10196, 0, 0, 6585, 0, 120750,
+    0, 0, 71872, 129129, 0, 0, 78590, 72308, 11382, 129499, 0, 983651, 0,
+    194833, 194832, 194835, 129540, 94020, 194836, 42727, 194838, 128252,
+    78585, 43874, 119610, 0, 0, 43248, 0, 194816, 0, 194818, 128845, 194820,
+    194819, 5297, 194821, 13284, 6112, 93964, 93010, 73927, 42947, 0, 65746,
+    0, 0, 194827, 194826, 4342, 42839, 194831, 1677, 0, 72135, 0, 0, 0,
+    11011, 66399, 0, 0, 0, 10160, 0, 0, 0, 0, 2052, 4308, 92174, 43000, 0,
     543, 64916, 0, 0, 0, 119170, 0, 118922, 2064, 0, 43158, 0, 0, 69984, 0,
     0, 129187, 0, 0, 0, 0, 41631, 92728, 0, 0, 6228, 0, 0, 0, 0, 0, 0, 506,
     0, 0, 65735, 2055, 43255, 121407, 0, 0, 0, 0, 0, 0, 194666, 2063, 0, 0,
     0, 0, 72136, 0, 74333, 194912, 11827, 74308, 194913, 194916, 194915,
     64564, 194917, 67986, 194919, 0, 11037, 0, 121102, 0, 0, 10560, 0,
-    120756, 194922, 113737, 194924, 194927, 194926, 1931, 0, 0, 0, 128228, 0,
+    120756, 194922, 113737, 194924, 194927, 120495, 1931, 0, 0, 0, 128228, 0,
     12643, 8751, 123629, 0, 12294, 0, 78834, 9138, 78831, 78833, 12631,
     78829, 11080, 78821, 0, 0, 1239, 0, 121067, 0, 12636, 0, 0, 0, 0, 0, 0,
     8998, 0, 0, 9152, 0, 0, 0, 67589, 0, 64290, 0, 92393, 12615, 0, 129141,
@@ -25754,9 +26597,9 @@
     0, 0, 0, 67604, 70705, 0, 194882, 194881, 194884, 194883, 194886, 128914,
     194888, 67599, 0, 194889, 0, 0, 0, 0, 3357, 0, 78852, 4207, 1288, 78842,
     78839, 78840, 78837, 78838, 66354, 194872, 0, 128432, 0, 67618, 92664, 0,
-    42788, 0, 64612, 194875, 10774, 194877, 0, 194879, 0, 0, 0, 997, 194901,
+    42788, 0, 64612, 129897, 10774, 194877, 0, 194879, 0, 0, 0, 997, 194901,
     0, 92577, 0, 11440, 11379, 42000, 13139, 0, 0, 74030, 72293, 73796, 0, 0,
-    0, 0, 2818, 0, 0, 73793, 0, 4172, 93028, 126523, 124981, 0, 0, 0, 0,
+    0, 0, 2818, 0, 0, 73793, 0, 4172, 93028, 126523, 124981, 0, 129896, 0, 0,
     129522, 69706, 0, 6834, 0, 0, 194865, 126982, 121211, 194866, 194869,
     194868, 766, 1257, 0, 0, 0, 3265, 66617, 3274, 0, 0, 94042, 0, 8373,
     41989, 0, 73460, 3418, 3263, 0, 0, 0, 3270, 64539, 11489, 0, 118945,
@@ -25775,29 +26618,29 @@
     64010, 64008, 64007, 2003, 7706, 0, 0, 119050, 64009, 204, 0, 0, 4430,
     8239, 64003, 10626, 64001, 64057, 13079, 64055, 64054, 0, 0, 43246, 9343,
     64049, 64048, 0, 1133, 64053, 64052, 64051, 64050, 0, 0, 0, 66415, 12329,
-    0, 0, 0, 1942, 0, 0, 0, 128249, 0, 68291, 10760, 64023, 64022, 64021,
-    64020, 43670, 77924, 64025, 41412, 78243, 78244, 0, 0, 64019, 64018,
-    64017, 64016, 0, 0, 78251, 78252, 78248, 78249, 77914, 78247, 0, 917560,
-    77919, 6788, 13094, 0, 7532, 41414, 0, 3179, 70745, 64769, 0, 0, 0, 0,
-    10751, 0, 0, 0, 0, 0, 0, 0, 2008, 64031, 64030, 294, 41874, 83383, 83384,
-    65929, 83376, 129063, 83379, 83380, 64028, 11396, 64026, 83374, 0, 0,
-    118795, 71739, 43247, 0, 70153, 0, 0, 0, 0, 0, 0, 0, 0, 7801, 83359,
-    83361, 128931, 0, 3297, 83356, 83357, 1135, 83350, 83351, 73696, 1995,
-    7927, 71738, 110742, 2552, 83372, 60, 0, 8649, 83368, 83369, 83370,
-    83371, 10541, 83365, 78679, 43833, 0, 0, 2013, 83362, 0, 110636, 0, 0,
-    12832, 110638, 8081, 8362, 120188, 0, 9137, 0, 0, 0, 0, 3466, 0, 0, 1996,
-    0, 3453, 3412, 0, 2002, 2000, 120176, 0, 0, 0, 0, 1998, 0, 1842, 0, 0,
-    9628, 68446, 0, 9826, 64502, 1767, 3413, 0, 0, 0, 0, 0, 0, 13108, 44024,
-    120204, 0, 92693, 0, 0, 0, 70291, 12650, 983208, 0, 68061, 0, 3592, 0, 0,
-    0, 0, 983956, 0, 66417, 128792, 10742, 0, 0, 1994, 9281, 3296, 64475,
-    1997, 1895, 128936, 72387, 0, 0, 123184, 72391, 0, 8999, 0, 983633, 0,
-    66480, 0, 0, 0, 983083, 0, 596, 0, 0, 120216, 8651, 120217, 0, 0, 12995,
-    0, 0, 70740, 0, 42930, 119955, 64810, 917834, 6825, 0, 917839, 120208,
-    64275, 120889, 128069, 120210, 6384, 917840, 126477, 0, 67698, 0, 0, 0,
-    120496, 0, 43412, 0, 0, 0, 0, 0, 120172, 0, 120763, 0, 0, 0, 128343,
-    1457, 0, 0, 6381, 2815, 0, 65240, 129664, 0, 0, 119522, 70487, 0, 0, 0,
-    0, 0, 120572, 0, 0, 0, 0, 0, 125253, 0, 0, 0, 120574, 0, 0, 0, 3055,
-    9852, 0, 65288, 0, 11398, 0, 0, 93016, 0, 0, 603, 128557, 0, 0, 0,
+    0, 0, 129698, 1942, 0, 0, 0, 128249, 0, 68291, 10760, 64023, 64022,
+    64021, 64020, 43670, 77924, 64025, 41412, 78243, 78244, 0, 0, 64019,
+    64018, 64017, 64016, 0, 0, 78251, 78252, 78248, 78249, 77914, 78247, 0,
+    917560, 77919, 6788, 13094, 0, 7532, 41414, 0, 3179, 70745, 64769, 0, 0,
+    71967, 0, 10751, 0, 0, 0, 0, 0, 0, 0, 2008, 64031, 64030, 294, 41874,
+    83383, 83384, 65929, 83376, 129063, 83379, 83380, 64028, 11396, 64026,
+    83374, 0, 0, 118795, 71739, 43247, 0, 70153, 0, 0, 0, 0, 0, 0, 0, 0,
+    7801, 83359, 83361, 128931, 0, 3297, 83356, 83357, 1135, 83350, 83351,
+    73696, 1995, 7927, 71738, 110742, 2552, 83372, 60, 0, 8649, 83368, 83369,
+    83370, 83371, 10541, 83365, 78679, 43833, 0, 0, 2013, 83362, 0, 110636,
+    0, 0, 12832, 110638, 8081, 8362, 120188, 0, 9137, 0, 0, 0, 0, 3466, 0, 0,
+    1996, 0, 3453, 3412, 0, 2002, 2000, 120176, 0, 0, 0, 0, 1998, 0, 1842, 0,
+    0, 9628, 68446, 0, 9826, 64502, 1767, 3413, 0, 0, 0, 0, 0, 0, 13108,
+    44024, 120204, 0, 92693, 0, 0, 0, 70291, 12650, 983208, 0, 68061, 0,
+    3592, 0, 0, 0, 0, 983956, 0, 66417, 128792, 10742, 0, 0, 1994, 9281,
+    3296, 64475, 1997, 1895, 128936, 72387, 0, 0, 123184, 72391, 0, 8999, 0,
+    983633, 0, 66480, 0, 0, 0, 983083, 0, 596, 0, 0, 120216, 8651, 120217, 0,
+    0, 12995, 0, 0, 70740, 0, 42930, 119955, 64810, 917834, 6825, 0, 917839,
+    120208, 64275, 120889, 128069, 120210, 6384, 917840, 126477, 0, 67698, 0,
+    0, 0, 120496, 0, 43412, 0, 0, 0, 0, 0, 120172, 0, 120763, 0, 0, 0,
+    128343, 1457, 0, 0, 6381, 2815, 0, 65240, 129664, 0, 0, 119522, 70487, 0,
+    0, 0, 0, 0, 120572, 0, 0, 0, 0, 0, 125253, 0, 0, 0, 120574, 0, 0, 0,
+    3055, 9852, 0, 65288, 0, 11398, 0, 0, 93016, 0, 0, 603, 128557, 0, 0, 0,
     129366, 3350, 0, 0, 917828, 917827, 68428, 917825, 73045, 917831, 917830,
     917829, 0, 1919, 0, 110767, 83296, 83297, 83298, 66446, 64141, 8562,
     64139, 64138, 64136, 64135, 64134, 64133, 11297, 0, 0, 11966, 64128,
@@ -25815,180 +26658,183 @@
     64118, 110659, 127842, 1177, 65601, 12322, 64106, 92169, 110654, 64102,
     64101, 64100, 64099, 0, 10453, 64104, 64103, 7997, 0, 92534, 0, 8705,
     64097, 64096, 9571, 0, 110652, 127398, 12132, 0, 0, 0, 110624, 73841,
-    83339, 83340, 9056, 0, 0, 0, 6155, 64068, 64067, 64066, 64065, 64072,
-    64071, 63, 64069, 127382, 0, 93822, 7257, 64064, 0, 0, 0, 0, 0, 0, 78748,
-    0, 0, 0, 120519, 0, 66242, 66232, 4333, 9855, 64112, 0, 0, 0, 0, 0, 0, 0,
-    66222, 0, 0, 0, 0, 69816, 0, 118796, 0, 8708, 0, 64077, 64076, 8996,
-    4992, 4471, 83343, 64079, 64078, 92179, 0, 0, 129120, 64615, 0, 0, 12075,
-    42041, 0, 0, 0, 0, 127557, 3123, 0, 983735, 0, 0, 0, 83328, 0, 9223, 0,
-    83321, 83322, 73797, 83327, 1116, 0, 83319, 7136, 0, 0, 0, 0, 75031, 0,
-    0, 0, 64092, 43675, 10104, 83338, 83331, 64095, 64094, 8111, 66247, 0,
-    64089, 64088, 0, 70106, 42236, 11434, 64083, 64082, 43216, 7737, 64087,
-    64086, 64085, 64084, 0, 0, 0, 4118, 1797, 83312, 0, 0, 46, 83308, 83309,
-    298, 83303, 72402, 83305, 83306, 0, 0, 0, 128905, 11495, 0, 0, 0, 127377,
-    194828, 127370, 0, 0, 0, 66239, 74945, 64403, 0, 0, 83314, 0, 0, 65758,
-    43536, 0, 8544, 0, 0, 0, 0, 194824, 0, 0, 0, 0, 0, 3639, 11242, 194822,
-    0, 0, 0, 0, 0, 0, 68409, 0, 0, 0, 0, 0, 0, 0, 128654, 8789, 126248, 0, 0,
-    0, 0, 0, 0, 0, 65058, 0, 78234, 68064, 0, 66227, 71694, 5573, 118936, 0,
-    44, 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 129190, 1900, 0, 11458,
-    0, 0, 6581, 5576, 128303, 0, 126122, 0, 113680, 8947, 0, 113812, 0, 0, 0,
-    7908, 0, 0, 6579, 0, 0, 0, 0, 2138, 6583, 7761, 0, 0, 0, 66802, 5058, 0,
-    0, 0, 5057, 125256, 0, 74538, 5054, 0, 0, 0, 0, 0, 0, 658, 3497, 128509,
-    0, 5061, 5060, 4235, 0, 0, 0, 127757, 4236, 4727, 0, 0, 0, 128791, 0,
-    7488, 128693, 7476, 0, 125259, 120646, 0, 0, 0, 66209, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, 0, 0, 0, 64668, 0, 8125,
-    0, 6743, 119175, 0, 129441, 83406, 0, 127966, 119235, 74092, 0, 0, 43660,
-    0, 0, 127901, 0, 0, 0, 264, 0, 74954, 0, 0, 0, 0, 0, 6019, 0, 0, 129121,
-    0, 0, 0, 8800, 0, 66376, 0, 120948, 0, 100744, 0, 0, 92333, 725, 68014,
-    0, 0, 72099, 0, 0, 0, 0, 74899, 0, 0, 0, 110804, 0, 72142, 5074, 5073, 0,
-    0, 0, 0, 70723, 5072, 128576, 13098, 72403, 0, 11040, 0, 0, 0, 4929, 0,
-    0, 0, 0, 0, 0, 0, 0, 67754, 4934, 0, 0, 9758, 0, 0, 70181, 42584, 0,
-    4329, 0, 4979, 8663, 74521, 0, 983042, 74418, 0, 0, 5071, 0, 3642, 0,
-    5070, 10042, 0, 3987, 5068, 120211, 8909, 0, 0, 69917, 0, 73981, 983141,
-    70749, 4531, 120212, 9105, 0, 4921, 121059, 4926, 65544, 113786, 69621,
-    0, 0, 0, 83269, 0, 120790, 4922, 0, 992, 119568, 4925, 0, 0, 9526, 4920,
-    128617, 948, 0, 0, 4930, 0, 0, 0, 4933, 0, 0, 0, 4928, 0, 0, 0, 0,
-    128379, 722, 0, 127483, 127482, 127485, 82997, 127487, 1509, 0, 5468,
-    66214, 127474, 127477, 1672, 127479, 10864, 127481, 72132, 127467, 72159,
-    127469, 127468, 127471, 127470, 68336, 82999, 120115, 1679, 120116, 0,
-    120113, 127462, 127465, 127464, 127110, 120119, 120112, 0, 120109, 6968,
-    5761, 342, 8553, 0, 8143, 127115, 127114, 127113, 624, 127111, 4057, 0,
-    5078, 0, 0, 0, 5076, 0, 0, 0, 120097, 685, 9025, 1524, 8003, 0, 5539,
-    113727, 113795, 120102, 7138, 120552, 0, 0, 0, 113724, 0, 8058, 9732, 0,
-    5080, 0, 5036, 5035, 0, 42604, 72118, 0, 0, 275, 13291, 69995, 0, 0,
-    983908, 5033, 0, 0, 4836, 70184, 73792, 0, 0, 0, 120681, 43704, 0, 2274,
-    119000, 124983, 0, 8858, 6409, 0, 119585, 0, 0, 0, 0, 0, 68442, 0, 3432,
-    10218, 0, 6094, 11232, 0, 0, 0, 0, 1676, 129157, 0, 0, 5030, 0, 118810,
-    0, 73869, 0, 0, 69944, 6787, 0, 0, 0, 983595, 10544, 12919, 69425, 92218,
-    0, 0, 0, 129172, 0, 67703, 0, 0, 0, 0, 0, 72290, 0, 0, 0, 0, 7018, 66241,
-    0, 0, 0, 0, 0, 74056, 0, 11833, 0, 67975, 65232, 40964, 251, 12686, 7895,
-    4395, 43538, 0, 0, 0, 78042, 0, 0, 40967, 5879, 0, 0, 0, 0, 0, 65540,
-    128590, 625, 0, 120194, 1113, 0, 13103, 3630, 67224, 8179, 74264, 67886,
-    9316, 10980, 2489, 120958, 8150, 1359, 121353, 70464, 127330, 127327,
-    5042, 5041, 42769, 12084, 11196, 127321, 92279, 72398, 120535, 127317,
-    127318, 127315, 12283, 127313, 11453, 0, 8795, 66245, 0, 0, 0, 5037,
-    118864, 0, 0, 67724, 0, 66893, 74006, 0, 8431, 0, 0, 0, 0, 12620, 6826,
-    73773, 70169, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 0, 0, 0,
-    65908, 0, 0, 0, 0, 0, 65157, 0, 0, 70182, 0, 73909, 4835, 0, 0, 0, 4309,
-    7127, 0, 0, 0, 1301, 0, 0, 12222, 0, 73813, 711, 92439, 7133, 0, 0, 0, 0,
-    0, 0, 0, 7661, 72263, 129541, 0, 0, 70453, 7627, 0, 5031, 92340, 42738,
-    65784, 0, 65782, 3758, 0, 65781, 67865, 0, 2440, 65780, 70795, 8449,
-    121393, 121479, 0, 2118, 0, 12121, 0, 0, 129510, 2128, 2130, 2131, 2126,
-    2133, 0, 121250, 2114, 2116, 2455, 0, 2122, 2123, 2124, 2125, 983787,
-    8714, 0, 2113, 0, 2115, 0, 127907, 43713, 5052, 66220, 66653, 65777,
-    65778, 65775, 5051, 65773, 1429, 42647, 5050, 65769, 388, 70685, 735, 0,
-    0, 128035, 0, 12726, 0, 0, 0, 0, 0, 5109, 5053, 0, 0, 0, 0, 0, 2470, 0,
-    0, 1925, 71251, 0, 10971, 113770, 5048, 5047, 0, 0, 194946, 92313, 0, 0,
-    0, 8089, 0, 639, 0, 68179, 0, 70180, 0, 4599, 0, 0, 0, 0, 983798, 648,
-    194948, 65819, 0, 0, 0, 0, 94017, 0, 11777, 9750, 983122, 0, 0, 92367,
-    70175, 5046, 66255, 0, 0, 65253, 0, 5045, 0, 1916, 74069, 5044, 92348, 0,
-    0, 5043, 0, 0, 0, 74004, 9669, 12341, 0, 8402, 0, 0, 70174, 0, 3586,
-    64508, 92456, 0, 0, 119606, 0, 42628, 10069, 0, 0, 0, 0, 123, 120703, 0,
-    121326, 0, 10719, 129409, 120444, 10829, 120593, 0, 12130, 0, 0, 0, 0,
-    3925, 0, 0, 75065, 71112, 92372, 71110, 71111, 0, 120441, 120452, 983178,
-    0, 0, 0, 0, 0, 0, 0, 0, 69879, 8509, 120449, 0, 0, 0, 120448, 0, 118889,
-    194858, 0, 0, 0, 66445, 0, 71109, 0, 0, 72425, 0, 12136, 0, 0, 0, 0, 0,
-    0, 19922, 41768, 74002, 0, 0, 0, 0, 2458, 0, 0, 0, 41074, 4266, 0, 0,
-    41077, 0, 9050, 0, 0, 73693, 0, 0, 41075, 2476, 0, 0, 0, 69761, 0, 0,
-    74202, 78745, 0, 121324, 70152, 66033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83106,
-    0, 0, 0, 43693, 78753, 0, 12194, 66215, 0, 121273, 67216, 121499, 0,
-    121118, 0, 78756, 0, 0, 55256, 0, 0, 0, 0, 43876, 0, 0, 0, 12948, 195003,
-    195002, 195005, 195004, 195007, 195006, 0, 128320, 4287, 70183, 4902,
-    74020, 0, 0, 0, 1816, 0, 0, 168, 0, 4898, 64298, 0, 78450, 4901, 1821, 0,
-    43294, 3653, 0, 791, 9162, 6977, 121183, 0, 70160, 0, 73731, 8354, 0, 0,
-    0, 7557, 0, 0, 8234, 194992, 78456, 194994, 194993, 194996, 194995,
-    65925, 194997, 195000, 194999, 0, 195001, 0, 64397, 0, 0, 0, 71310,
-    194977, 194976, 2448, 194978, 194981, 194980, 2452, 194982, 194985,
-    194984, 78694, 72292, 7845, 0, 78692, 4408, 4122, 6772, 194988, 8723,
-    72147, 194989, 119302, 67403, 119304, 119303, 2438, 119297, 119300,
-    119299, 41953, 0, 42135, 373, 119172, 2119, 11457, 129618, 41955, 0, 0,
-    0, 41952, 0, 0, 2127, 0, 128496, 5202, 0, 78765, 42823, 11291, 0, 0,
-    12963, 0, 0, 4125, 41958, 12133, 0, 125099, 1271, 129427, 0, 66024, 0,
-    3864, 127825, 0, 0, 0, 0, 4166, 0, 0, 0, 7459, 0, 119914, 5384, 0, 0,
-    70154, 5759, 0, 0, 0, 0, 66744, 0, 120571, 0, 75066, 5552, 0, 0, 127192,
-    5553, 0, 0, 0, 12906, 0, 0, 110787, 110792, 110788, 5554, 0, 12344,
-    110786, 0, 0, 0, 0, 0, 8517, 0, 0, 0, 66017, 5555, 92317, 0, 983653, 0,
-    0, 0, 9143, 0, 195067, 67995, 195069, 127162, 195071, 195070, 4577,
-    64624, 0, 0, 125105, 983661, 4269, 983655, 983652, 983650, 0, 950, 0,
-    983654, 983664, 983649, 0, 983656, 0, 119121, 0, 5098, 0, 0, 119099,
-    5097, 0, 9848, 0, 10293, 983645, 72798, 0, 0, 70303, 983665, 5102, 5101,
-    128370, 0, 8138, 4517, 1932, 5100, 195060, 195059, 1247, 10034, 195064,
-    5099, 0, 1441, 0, 4724, 650, 0, 73954, 983266, 129348, 195040, 195043,
-    9031, 195045, 195044, 195047, 8545, 66356, 195048, 0, 9154, 127243, 0, 0,
-    2676, 2277, 0, 73812, 195051, 8599, 195053, 0, 195055, 65462, 0, 92524,
-    195033, 71903, 0, 0, 41199, 0, 11399, 195035, 195034, 195037, 195036,
-    195039, 195038, 5108, 5107, 0, 66019, 0, 0, 5541, 0, 0, 12613, 5284, 0,
-    0, 128806, 4275, 74865, 854, 68147, 74381, 120918, 0, 5103, 124986,
-    64348, 0, 0, 5221, 69811, 0, 0, 121163, 0, 0, 11438, 0, 0, 70158, 0, 0,
-    5106, 195024, 110749, 65154, 69813, 195028, 5105, 195030, 69720, 195032,
-    5104, 983761, 0, 3176, 0, 70149, 932, 0, 6567, 195009, 195008, 195011,
-    195010, 70145, 43850, 195015, 195014, 195017, 195016, 0, 0, 0, 0, 10670,
-    0, 13273, 0, 195020, 121370, 8803, 195021, 72431, 8151, 67145, 72436, 0,
-    12553, 0, 0, 0, 0, 13065, 12570, 0, 0, 0, 983198, 124985, 0, 0, 66466, 0,
-    0, 194595, 0, 194596, 11351, 43256, 0, 0, 0, 0, 41754, 0, 0, 2720,
-    194975, 68462, 8232, 120760, 0, 0, 0, 0, 0, 0, 0, 93067, 10834, 0, 0,
-    119266, 0, 0, 125025, 67679, 0, 75064, 7781, 0, 0, 126076, 0, 12077, 0,
-    64586, 127164, 42396, 0, 3475, 0, 2479, 0, 0, 0, 120728, 0, 42434,
-    194960, 194963, 194962, 110611, 67894, 42473, 194966, 110609, 1843,
-    42283, 0, 0, 0, 0, 0, 194970, 0, 42321, 7284, 194974, 194973, 194950,
-    194949, 194952, 194951, 0, 194953, 123614, 128645, 0, 0, 0, 0, 74952,
-    194954, 194957, 194956, 66367, 194958, 41069, 67689, 9988, 0, 41068, 0,
-    4295, 0, 0, 41951, 67835, 0, 785, 8236, 128647, 9027, 0, 194943, 0, 0, 0,
-    0, 0, 0, 41071, 41059, 0, 92458, 129442, 0, 0, 0, 123612, 2067, 4310, 0,
-    123611, 5180, 123605, 0, 73872, 0, 69880, 5184, 42385, 194947, 983755,
-    128531, 0, 0, 119149, 0, 121334, 0, 983762, 0, 0, 5178, 194929, 120548,
-    194931, 5188, 194933, 194932, 72245, 194934, 1166, 64429, 42639, 0, 0, 0,
-    0, 128071, 2442, 10703, 194940, 194939, 194635, 42439, 0, 0, 0, 73933,
-    983238, 42401, 0, 0, 0, 42288, 0, 0, 0, 13145, 0, 2468, 0, 42327, 0, 0,
-    0, 42479, 0, 0, 0, 92580, 0, 74939, 120678, 0, 73733, 0, 0, 2715, 0,
-    71257, 0, 74114, 0, 0, 0, 0, 0, 66325, 69603, 0, 9240, 0, 0, 129142, 0,
-    0, 0, 9815, 0, 11246, 0, 73912, 42733, 0, 0, 2480, 0, 0, 0, 6494, 5537,
-    0, 0, 0, 0, 1211, 0, 121379, 0, 0, 12318, 0, 113796, 0, 0, 0, 0, 0,
-    64642, 0, 0, 0, 0, 64864, 0, 0, 0, 121212, 0, 0, 3589, 92719, 4035, 6492,
-    92236, 4265, 6843, 0, 74186, 41778, 113764, 119216, 2488, 0, 4582, 0,
-    71426, 41777, 12926, 72708, 7528, 10550, 113761, 0, 0, 11439, 0, 0,
-    64878, 0, 0, 0, 0, 2286, 0, 0, 126646, 127909, 0, 400, 126500, 0, 0, 0,
-    0, 0, 64827, 0, 74948, 390, 0, 71301, 0, 3473, 0, 0, 66742, 0, 55285, 0,
-    0, 0, 92206, 0, 0, 8004, 0, 6763, 0, 0, 7006, 0, 0, 6757, 73707, 126648,
-    0, 6766, 0, 0, 0, 6146, 0, 771, 0, 0, 41318, 0, 42272, 0, 0, 0, 0, 953,
-    12917, 72287, 12300, 0, 11491, 68612, 0, 0, 71321, 7490, 11389, 7489,
-    3379, 0, 7487, 72716, 7486, 7484, 7482, 6753, 7480, 7479, 7478, 7477,
-    6501, 7475, 0, 7473, 7472, 2474, 7470, 7468, 124977, 0, 0, 0, 0, 71871,
-    11834, 128376, 0, 6017, 0, 0, 0, 0, 0, 119365, 73949, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 2472, 69945, 120699, 121133, 2139, 4256, 120776, 74380, 0,
-    73847, 73844, 0, 0, 0, 0, 0, 0, 0, 0, 7083, 0, 8066, 7678, 0, 121124, 0,
-    0, 0, 0, 0, 0, 0, 0, 120566, 0, 0, 0, 8330, 0, 0, 0, 0, 0, 0, 19934, 0,
-    1770, 67091, 0, 128671, 129617, 110605, 110606, 73843, 110604, 0, 110602,
-    67092, 0, 71334, 0, 0, 0, 0, 0, 8162, 0, 5996, 129644, 4903, 0, 0, 43063,
-    0, 5172, 0, 7139, 0, 127385, 0, 0, 0, 0, 4334, 6324, 41975, 12186, 10674,
-    12308, 0, 0, 0, 72807, 41977, 68002, 0, 126630, 2018, 121388, 41979,
-    68003, 0, 68000, 0, 0, 126984, 68001, 9334, 0, 71440, 0, 7975, 0, 0, 0,
-    66621, 4884, 70367, 983740, 0, 121010, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0,
+    83339, 83340, 9056, 0, 129970, 0, 6155, 64068, 64067, 64066, 64065,
+    64072, 64071, 63, 64069, 127382, 0, 93822, 7257, 64064, 0, 0, 0, 0, 0, 0,
+    78748, 0, 0, 0, 120519, 0, 66242, 66232, 4333, 9855, 64112, 0, 0, 0, 0,
+    0, 0, 0, 66222, 0, 0, 0, 0, 69816, 0, 118796, 0, 8708, 0, 64077, 64076,
+    8996, 4992, 4471, 83343, 64079, 64078, 92179, 0, 0, 129120, 64615, 0, 0,
+    12075, 42041, 0, 0, 0, 0, 127557, 3123, 0, 983735, 0, 0, 0, 83328, 0,
+    9223, 0, 83321, 83322, 73797, 83327, 1116, 0, 83319, 7136, 0, 0, 0, 0,
+    75031, 0, 0, 0, 64092, 43675, 10104, 83338, 83331, 64095, 64094, 8111,
+    66247, 0, 64089, 64088, 0, 70106, 42236, 11434, 64083, 64082, 43216,
+    7737, 64087, 64086, 64085, 64084, 0, 0, 0, 4118, 1797, 83312, 0, 0, 46,
+    83308, 83309, 298, 83303, 72402, 83305, 83306, 0, 0, 0, 128905, 11495, 0,
+    0, 0, 127377, 194828, 127370, 0, 0, 0, 66239, 74945, 64403, 0, 0, 83314,
+    0, 0, 65758, 43536, 0, 8544, 0, 0, 0, 0, 194824, 0, 0, 0, 0, 0, 3639,
+    11242, 194822, 0, 0, 0, 0, 0, 0, 68409, 0, 0, 0, 101121, 0, 0, 0, 128654,
+    8789, 126248, 0, 0, 0, 0, 0, 0, 0, 65058, 0, 78234, 68064, 0, 66227,
+    71694, 5573, 118936, 0, 44, 0, 66244, 118907, 0, 66238, 12844, 0, 1622,
+    129190, 1900, 0, 11458, 0, 0, 6581, 5576, 128303, 0, 126122, 0, 113680,
+    8947, 0, 113812, 0, 0, 0, 7908, 0, 0, 6579, 0, 0, 0, 0, 2138, 6583, 7761,
+    0, 0, 0, 66802, 5058, 0, 0, 0, 5057, 125256, 0, 74538, 5054, 0, 0, 0, 0,
+    0, 0, 658, 3497, 128509, 0, 5061, 5060, 4235, 0, 0, 0, 127757, 4236,
+    4727, 0, 0, 0, 128791, 0, 7488, 128693, 7476, 0, 125259, 120646, 0, 0, 0,
+    66209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596,
+    0, 0, 0, 64668, 0, 8125, 0, 6743, 119175, 0, 129441, 83406, 0, 127966,
+    119235, 74092, 0, 0, 43660, 71125, 0, 127901, 0, 0, 0, 264, 0, 74954, 0,
+    0, 0, 0, 0, 6019, 0, 0, 129121, 0, 0, 0, 8800, 0, 66376, 0, 120948, 0,
+    100744, 0, 0, 92333, 725, 68014, 0, 0, 72099, 0, 0, 0, 0, 74899, 0, 0, 0,
+    110804, 0, 72142, 5074, 5073, 0, 0, 128726, 0, 70723, 5072, 128576,
+    13098, 72403, 0, 11040, 0, 0, 0, 4929, 0, 0, 0, 0, 0, 0, 0, 0, 67754,
+    4934, 0, 0, 9758, 0, 0, 70181, 42584, 0, 4329, 0, 4979, 8663, 74521, 0,
+    983042, 74418, 0, 0, 5071, 0, 3642, 0, 5070, 10042, 0, 3987, 5068,
+    120209, 8909, 0, 0, 69917, 0, 73981, 983141, 70749, 4531, 120212, 9105,
+    0, 4921, 121059, 4926, 65544, 113786, 69621, 0, 0, 0, 83269, 0, 120790,
+    4922, 0, 992, 119568, 4925, 0, 0, 9526, 4920, 128617, 948, 0, 0, 4930, 0,
+    0, 0, 4933, 0, 0, 0, 4928, 0, 0, 0, 0, 128379, 722, 0, 127483, 127482,
+    127485, 82997, 127487, 1509, 0, 5468, 66214, 127474, 127477, 1672,
+    127479, 10864, 127481, 72132, 127467, 72159, 127469, 127468, 127471,
+    127470, 68336, 82999, 120115, 1679, 120116, 0, 120113, 127462, 127465,
+    127464, 127110, 120119, 120112, 0, 120109, 6968, 5761, 342, 8553, 0,
+    8143, 127115, 127114, 127113, 624, 127111, 4057, 0, 5078, 0, 0, 0, 5076,
+    0, 0, 0, 120097, 685, 9025, 1524, 8003, 0, 5539, 113727, 113795, 120102,
+    7138, 120552, 0, 0, 0, 113724, 0, 8058, 9732, 0, 5080, 0, 5036, 5035, 0,
+    42604, 72118, 0, 0, 275, 13291, 69995, 0, 0, 983908, 5033, 0, 0, 4836,
+    70184, 73792, 0, 0, 0, 120681, 43704, 0, 2274, 119000, 124983, 0, 8858,
+    6409, 0, 119585, 0, 0, 0, 0, 0, 68442, 0, 3432, 10218, 0, 6094, 11232, 0,
+    0, 0, 0, 1676, 129157, 0, 0, 5030, 0, 118810, 0, 73869, 0, 0, 69944,
+    6787, 0, 0, 0, 983595, 10544, 12919, 69425, 92218, 0, 0, 0, 129172, 0,
+    67703, 0, 0, 0, 0, 0, 72290, 0, 0, 0, 0, 7018, 66241, 0, 0, 0, 0, 0,
+    74056, 0, 11833, 0, 67975, 65232, 40964, 251, 12686, 7895, 4395, 43538,
+    0, 0, 0, 78042, 0, 0, 40967, 5879, 0, 0, 0, 0, 0, 65540, 128590, 625, 0,
+    120194, 1113, 0, 13103, 3630, 67224, 8179, 74264, 67886, 9316, 10980,
+    2489, 120958, 8150, 1359, 121353, 70464, 127330, 127327, 5042, 5041,
+    42769, 12084, 11196, 127321, 92279, 72398, 120535, 127317, 127318,
+    127315, 12283, 127313, 11453, 0, 8795, 66245, 0, 0, 0, 5037, 118864, 0,
+    0, 67724, 0, 66893, 74006, 0, 8431, 0, 0, 0, 0, 12620, 6826, 73773,
+    70169, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 0, 0, 0, 65908, 0,
+    0, 0, 0, 0, 65157, 0, 0, 70182, 0, 73909, 4835, 0, 0, 0, 4309, 7127, 0,
+    0, 0, 1301, 0, 0, 12222, 0, 73813, 711, 92439, 7133, 0, 0, 0, 0, 0, 0, 0,
+    7661, 72263, 129541, 0, 0, 70453, 7627, 0, 5031, 92340, 42738, 65784, 0,
+    65782, 3758, 0, 65781, 67865, 0, 2440, 65780, 70795, 8449, 121393,
+    121479, 0, 2118, 0, 12121, 0, 0, 129510, 2128, 2130, 2131, 2126, 2133, 0,
+    121250, 2114, 2116, 2455, 0, 2122, 2123, 2124, 2125, 983787, 8714, 0,
+    2113, 0, 2115, 0, 127907, 43713, 5052, 66220, 66653, 65777, 65778, 65775,
+    5051, 65773, 1429, 42647, 5050, 65769, 388, 70685, 735, 0, 129899,
+    128035, 0, 12726, 0, 0, 0, 0, 0, 5109, 5053, 0, 120854, 0, 0, 0, 2470, 0,
+    0, 1925, 71251, 0, 10971, 113770, 5048, 5047, 0, 0, 194946, 92313,
+    129972, 0, 0, 8089, 0, 639, 0, 68179, 0, 70180, 0, 4599, 0, 0, 0, 0,
+    983798, 648, 194948, 65819, 0, 0, 0, 129968, 94017, 0, 11777, 9750,
+    983122, 0, 0, 92367, 70175, 5046, 66255, 0, 0, 65253, 0, 5045, 0, 1916,
+    74069, 5044, 92348, 0, 0, 5043, 0, 0, 0, 74004, 9669, 12341, 0, 8402, 0,
+    0, 70174, 0, 3586, 64508, 92456, 0, 0, 119606, 0, 42628, 10069, 0, 0, 0,
+    0, 123, 120703, 0, 121326, 0, 10719, 129409, 120444, 10829, 120593, 0,
+    12130, 0, 0, 0, 0, 3925, 0, 0, 75065, 71112, 92372, 71110, 71111, 0,
+    120441, 120452, 983178, 0, 0, 0, 0, 0, 0, 0, 0, 69879, 8509, 120449, 0,
+    0, 0, 120448, 0, 118889, 194858, 0, 0, 0, 66445, 0, 71109, 0, 0, 72425,
+    0, 12136, 0, 983629, 0, 0, 0, 0, 19922, 41768, 74002, 0, 0, 0, 0, 2458,
+    0, 0, 0, 41074, 4266, 0, 0, 41077, 0, 9050, 0, 0, 73693, 0, 0, 41075,
+    2476, 0, 0, 0, 69761, 0, 0, 74202, 78745, 0, 121324, 70152, 66033, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 83106, 0, 0, 0, 43693, 78753, 0, 12194, 66215,
+    71987, 121273, 67216, 121499, 0, 121118, 0, 78756, 0, 0, 55256, 0, 0, 0,
+    0, 43876, 0, 0, 0, 12948, 195003, 195002, 195005, 195004, 195007, 195006,
+    0, 128320, 4287, 70183, 4902, 74020, 0, 0, 0, 1816, 0, 0, 168, 0, 4898,
+    64298, 0, 78450, 4901, 1821, 0, 43294, 3653, 0, 791, 9162, 6977, 121183,
+    0, 70160, 0, 73731, 8354, 0, 0, 0, 7557, 0, 0, 8234, 194992, 78456,
+    194994, 194993, 194996, 101519, 65925, 194997, 195000, 194999, 0, 195001,
+    0, 64397, 0, 0, 0, 71310, 194977, 194976, 2448, 194978, 194981, 194980,
+    2452, 194982, 194985, 194984, 78694, 72292, 7845, 0, 78692, 4408, 4122,
+    6772, 194988, 8723, 72147, 194989, 119302, 11857, 119304, 119303, 2438,
+    119297, 119300, 119299, 41953, 0, 42135, 373, 119172, 2119, 11457,
+    129618, 41955, 0, 0, 0, 41952, 0, 0, 2127, 0, 128496, 5202, 0, 78765,
+    42823, 11291, 0, 0, 12963, 0, 0, 4125, 41958, 12133, 0, 125099, 1271,
+    129427, 0, 66024, 0, 3864, 127825, 0, 0, 0, 0, 4166, 0, 0, 129917, 7459,
+    0, 119914, 5384, 0, 0, 70154, 5759, 0, 0, 0, 0, 66744, 0, 120571, 0,
+    75066, 5552, 0, 0, 127192, 5553, 0, 0, 0, 12906, 0, 0, 110787, 110792,
+    110788, 5554, 0, 12344, 110786, 101508, 0, 0, 0, 0, 8517, 101509, 0, 0,
+    66017, 5555, 92317, 0, 983653, 0, 0, 0, 9143, 0, 195067, 67995, 195069,
+    127162, 195071, 195070, 4577, 64624, 0, 0, 125105, 983661, 4269, 983655,
+    983652, 983650, 0, 950, 0, 983654, 983664, 983649, 0, 983656, 0, 119121,
+    0, 5098, 0, 0, 119099, 5097, 0, 9848, 0, 10293, 983645, 72798, 0, 0,
+    70303, 983665, 5102, 5101, 128370, 0, 8138, 4517, 1932, 5100, 195060,
+    195059, 1247, 10034, 195064, 5099, 0, 1441, 0, 4724, 650, 0, 73954,
+    983266, 129348, 195040, 195043, 9031, 195045, 195044, 195047, 8545,
+    66356, 195048, 0, 9154, 127243, 0, 0, 2676, 2277, 0, 73812, 195051, 8599,
+    195053, 917918, 195055, 65462, 0, 92524, 195033, 71903, 0, 0, 41199, 0,
+    11399, 195035, 195034, 195037, 195036, 195039, 195038, 5108, 5107, 0,
+    66019, 0, 0, 5541, 0, 0, 12613, 5284, 0, 0, 128806, 4275, 74865, 854,
+    68147, 74381, 120918, 0, 5103, 124986, 64348, 0, 0, 5221, 69811, 0, 0,
+    121163, 0, 0, 11438, 0, 0, 70158, 0, 0, 5106, 195024, 110749, 65154,
+    69813, 195028, 5105, 195030, 69720, 195032, 5104, 983761, 0, 3176,
+    127342, 70149, 932, 0, 6567, 195009, 195008, 195011, 195010, 70145,
+    43850, 195015, 195014, 195017, 195016, 0, 0, 0, 0, 10670, 0, 13273, 0,
+    195020, 121370, 8803, 195021, 72431, 8151, 67145, 72436, 0, 12553, 0, 0,
+    0, 0, 13065, 12570, 0, 0, 0, 983198, 124985, 0, 0, 66466, 0, 0, 194595,
+    0, 194596, 11351, 43256, 0, 0, 0, 0, 41754, 0, 0, 2720, 194975, 68462,
+    8232, 120760, 0, 0, 0, 0, 0, 0, 0, 93067, 10834, 0, 0, 119266, 0, 0,
+    125025, 67679, 0, 75064, 7781, 0, 0, 126076, 0, 12077, 0, 64586, 127164,
+    42396, 0, 3475, 0, 2479, 0, 0, 0, 120728, 0, 42434, 194960, 194963,
+    194962, 110611, 67894, 42473, 194966, 110609, 1843, 42283, 0, 0, 0, 0, 0,
+    194970, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951,
+    0, 194953, 123614, 128645, 0, 0, 0, 0, 74952, 194954, 194957, 194956,
+    66367, 194958, 41069, 67689, 9988, 0, 41068, 0, 4295, 0, 0, 41951, 67835,
+    0, 785, 8236, 128647, 9027, 0, 194943, 0, 0, 0, 0, 0, 0, 41071, 41059, 0,
+    92458, 129442, 0, 0, 0, 123612, 2067, 4310, 0, 123611, 5180, 123605, 0,
+    73872, 0, 69880, 5184, 42385, 194947, 983755, 128531, 0, 0, 119149, 0,
+    121334, 0, 983762, 0, 0, 5178, 194929, 120548, 194931, 5188, 194933,
+    194932, 72245, 194934, 1166, 64429, 42639, 0, 0, 0, 0, 128071, 2442,
+    10703, 194940, 194939, 194635, 42439, 0, 0, 0, 73933, 983238, 42401, 0,
+    0, 0, 42288, 0, 0, 0, 13145, 0, 2468, 0, 42327, 0, 0, 0, 42479, 128698,
+    0, 0, 92580, 0, 74939, 120678, 0, 73733, 0, 0, 2715, 0, 71257, 0, 74114,
+    0, 0, 0, 0, 0, 66325, 69603, 0, 9240, 0, 0, 129142, 0, 0, 0, 9815, 0,
+    11246, 0, 73912, 42733, 0, 0, 2480, 0, 0, 0, 6494, 5537, 0, 0, 0, 0,
+    1211, 0, 121379, 0, 0, 12318, 0, 113796, 0, 0, 0, 0, 0, 64642, 0, 0, 0,
+    0, 64864, 0, 0, 0, 121212, 0, 0, 3589, 92719, 4035, 6492, 92236, 4265,
+    6843, 0, 74186, 41778, 113764, 119216, 2488, 0, 4582, 0, 71426, 41777,
+    12926, 72708, 7528, 10550, 113761, 0, 0, 11439, 0, 0, 64878, 0, 0, 0, 0,
+    2286, 0, 0, 126646, 127909, 0, 400, 126500, 0, 0, 0, 0, 0, 64827, 0,
+    74948, 390, 0, 71301, 0, 3473, 0, 0, 66742, 0, 55285, 0, 0, 0, 92206, 0,
+    0, 8004, 0, 6763, 0, 0, 7006, 0, 0, 6757, 73707, 126648, 0, 6766, 0, 0,
+    0, 6146, 0, 771, 0, 0, 41318, 0, 42272, 0, 120211, 69559, 0, 953, 12917,
+    72287, 12300, 0, 11491, 68612, 0, 0, 71321, 7490, 11389, 7489, 3379, 0,
+    7487, 72716, 7486, 7484, 7482, 6753, 7480, 7479, 7478, 7477, 6501, 7475,
+    0, 7473, 7472, 2474, 7470, 7468, 124977, 0, 0, 0, 0, 71871, 11834,
+    128376, 0, 6017, 0, 128763, 0, 0, 0, 119365, 73949, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 2472, 69945, 120699, 121133, 2139, 4256, 120776, 74380, 0,
+    73847, 73844, 0, 0, 101375, 0, 101374, 0, 0, 101347, 7083, 0, 8066, 7678,
+    0, 121124, 101341, 101373, 101336, 0, 101331, 0, 101304, 0, 101301, 0, 0,
+    0, 8330, 0, 101298, 101322, 101297, 0, 0, 19934, 0, 1770, 67091, 0,
+    128671, 129617, 110605, 101355, 73843, 110604, 0, 101362, 67092, 0,
+    71334, 0, 0, 0, 0, 0, 8162, 0, 5996, 129644, 4903, 0, 0, 43063, 0, 5172,
+    0, 7139, 0, 127385, 0, 0, 0, 0, 4334, 6324, 41975, 12186, 10674, 12308,
+    0, 0, 0, 72807, 41977, 68002, 0, 126630, 2018, 121388, 41979, 68003, 0,
+    68000, 0, 0, 126984, 68001, 9334, 0, 71440, 0, 7975, 0, 0, 0, 66621,
+    4884, 70367, 983740, 0, 121010, 0, 0, 0, 0, 127799, 0, 0, 0, 463, 0, 0,
     69617, 6509, 5460, 0, 0, 0, 0, 42279, 0, 0, 0, 0, 0, 0, 0, 125027, 0,
     121119, 0, 0, 0, 5663, 0, 0, 0, 0, 2482, 66202, 0, 0, 42247, 65174,
     73925, 0, 100940, 0, 0, 126573, 0, 0, 2460, 0, 11944, 0, 0, 64679,
     120835, 127310, 0, 0, 0, 5870, 0, 0, 0, 100931, 539, 100933, 100932,
     100935, 9064, 100937, 100936, 100939, 100938, 0, 0, 0, 0, 0, 0, 41295,
-    100941, 2478, 100943, 4162, 100945, 4260, 12953, 100950, 100949, 0, 0, 0,
-    0, 0, 0, 0, 0, 5000, 0, 0, 0, 69672, 71439, 0, 74017, 0, 0, 6709, 0, 0,
-    983720, 0, 0, 100922, 100921, 10301, 10333, 10397, 100925, 100928,
+    100941, 2478, 100943, 4162, 100945, 4260, 12953, 100950, 100949, 129800,
+    0, 0, 0, 0, 0, 0, 0, 5000, 0, 0, 0, 69672, 71439, 0, 74017, 0, 0, 6709,
+    0, 0, 983720, 0, 0, 100922, 100921, 10301, 10333, 10397, 100925, 100928,
     100927, 0, 0, 0, 127830, 0, 4014, 12842, 0, 67413, 0, 0, 3893, 0, 0,
     12210, 0, 42147, 0, 983622, 74465, 0, 0, 0, 0, 0, 0, 0, 0, 110805, 8231,
     0, 69946, 41968, 100929, 41973, 12935, 41969, 0, 2453, 0, 0, 78807,
     122893, 0, 10349, 10413, 0, 41962, 3202, 119097, 0, 8316, 129174, 0,
     7314, 0, 0, 0, 0, 1840, 0, 0, 0, 4883, 100908, 4723, 70099, 100909, 0, 0,
     0, 0, 11089, 240, 19906, 0, 0, 0, 43600, 121004, 13134, 93065, 0, 65931,
-    110649, 110650, 42634, 110648, 0, 121005, 11463, 0, 0, 0, 10445, 0,
-    92969, 0, 2614, 0, 0, 1729, 0, 0, 100911, 0, 43334, 100912, 100915,
+    110649, 110650, 42634, 110648, 0, 121005, 11463, 0, 0, 129861, 10445, 0,
+    92969, 0, 2614, 0, 129954, 1729, 0, 0, 100911, 0, 43334, 100912, 100915,
     100914, 66201, 100916, 69662, 100896, 100899, 100898, 4121, 100900,
     70272, 82954, 63879, 0, 70872, 0, 0, 4039, 643, 7726, 120082, 0, 120068,
     58, 0, 0, 0, 63872, 0, 0, 100891, 0, 10625, 100892, 100895, 100894, 1416,
     120073, 917761, 67393, 0, 0, 0, 6996, 4264, 0, 100902, 66179, 66768,
     100903, 13114, 72311, 0, 3094, 0, 0, 127074, 4437, 0, 0, 0, 55280, 42174,
-    0, 42430, 0, 72246, 42355, 0, 0, 0, 0, 121251, 127401, 0, 0, 0, 0, 0, 0,
-    100882, 100881, 74037, 100883, 0, 127099, 0, 0, 0, 0, 0, 69646, 65035,
-    65034, 11480, 6116, 65039, 65038, 41180, 65036, 194565, 0, 12101, 5822,
-    0, 0, 0, 0, 11663, 127873, 63854, 119657, 63853, 0, 0, 65810, 4289,
+    0, 42430, 129796, 72246, 42355, 0, 0, 0, 0, 121251, 127401, 0, 0, 0, 0,
+    0, 0, 100882, 100881, 74037, 100883, 0, 127099, 0, 0, 0, 0, 0, 69646,
+    65035, 65034, 11480, 6116, 65039, 65038, 41180, 65036, 194565, 0, 12101,
+    5822, 0, 0, 0, 0, 11663, 127873, 63854, 119657, 63853, 0, 0, 65810, 4289,
     100885, 63896, 100887, 100890, 43621, 0, 0, 0, 129613, 194560, 7461,
     73901, 0, 331, 0, 0, 0, 128029, 0, 0, 0, 74629, 0, 0, 0, 41964, 0, 63843,
     2084, 41965, 0, 100864, 100863, 100866, 63841, 78549, 41220, 13032,
@@ -26004,177 +26850,180 @@
     0, 78504, 78830, 0, 0, 43873, 0, 0, 0, 0, 11988, 78510, 195, 68321,
     41501, 0, 42031, 0, 13135, 0, 0, 0, 41499, 0, 0, 9680, 41498, 917794,
     42025, 78567, 78556, 0, 0, 0, 0, 0, 0, 101074, 120502, 92597, 0, 0,
-    917784, 7864, 129001, 0, 917788, 121106, 917786, 917785, 917792, 67816,
-    917790, 2219, 0, 0, 0, 0, 0, 0, 121277, 0, 917777, 917776, 917775, 69644,
-    917781, 917780, 917779, 917778, 8668, 0, 121383, 917782, 5999, 0, 0,
-    129195, 128243, 43653, 1726, 1015, 0, 0, 0, 0, 64919, 0, 0, 0, 128478, 0,
-    69791, 927, 0, 0, 42010, 0, 42021, 0, 0, 1299, 12240, 64537, 0, 0, 0, 0,
-    0, 0, 69454, 0, 0, 0, 122903, 19914, 12179, 0, 2296, 0, 0, 63832, 917773,
-    0, 63816, 2594, 63823, 63817, 11178, 0, 0, 0, 11265, 68295, 0, 0, 0,
-    10554, 3972, 0, 121198, 0, 917766, 10816, 917764, 119608, 74374, 917769,
-    11210, 93069, 8586, 3882, 8532, 120183, 1573, 128648, 0, 69916, 0,
-    101051, 67719, 0, 0, 0, 0, 0, 0, 0, 128821, 119169, 0, 0, 6626, 42763, 0,
-    118884, 128613, 0, 83128, 0, 0, 0, 0, 0, 983561, 0, 0, 0, 9171, 0, 0,
-    71305, 983900, 121146, 0, 0, 128881, 119604, 126596, 0, 0, 0, 128214,
-    42368, 0, 983105, 2271, 41487, 12118, 74124, 68651, 110836, 110833, 3009,
-    41476, 41489, 69825, 3007, 1448, 3018, 0, 41491, 8521, 5083, 5082, 0, 0,
-    8519, 0, 3014, 5081, 73926, 0, 128549, 0, 69951, 5079, 0, 2557, 128086,
-    65532, 11828, 0, 71297, 11105, 0, 0, 0, 8518, 10779, 0, 71303, 0, 0,
-    42170, 110769, 0, 629, 1924, 0, 12037, 0, 5987, 8462, 127744, 0, 63933,
-    69735, 110770, 128295, 63941, 67981, 5077, 0, 10880, 64849, 5075, 0,
-    128152, 65075, 0, 11007, 983717, 0, 0, 0, 66684, 72331, 3434, 72338,
-    1904, 0, 0, 72730, 0, 10499, 4507, 9578, 63925, 0, 7979, 0, 9831, 66689,
-    0, 461, 0, 0, 4504, 0, 0, 6325, 0, 43021, 0, 0, 55236, 0, 0, 5177, 41324,
-    12055, 63831, 0, 41327, 12591, 0, 4114, 409, 0, 0, 8948, 41325, 0, 721,
-    10182, 0, 71311, 0, 0, 94052, 74963, 83503, 5998, 0, 0, 74825, 0, 12587,
-    0, 78571, 74889, 71328, 128955, 0, 74121, 0, 78822, 0, 0, 5995, 0, 42568,
-    0, 0, 63944, 73860, 0, 0, 4167, 0, 43175, 0, 74120, 0, 65076, 938, 73857,
-    73854, 11737, 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 128762, 0, 66623,
-    0, 9173, 0, 11978, 0, 73982, 113750, 113741, 0, 6759, 0, 0, 0, 126222, 0,
-    70388, 129093, 13027, 42777, 7683, 1167, 0, 4983, 0, 861, 0, 0, 68297, 0,
-    43757, 92978, 129298, 0, 0, 0, 0, 70815, 9616, 0, 0, 12816, 43759, 0,
-    12710, 68674, 12721, 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853,
-    42693, 0, 121088, 0, 0, 917915, 0, 42835, 0, 0, 0, 0, 0, 12712, 7105,
-    127807, 65060, 66875, 9900, 0, 0, 0, 121482, 119265, 0, 64778, 12585, 0,
-    0, 0, 0, 0, 0, 77826, 0, 4900, 125245, 0, 0, 0, 4119, 74768, 8971, 0, 0,
-    0, 78594, 41132, 9245, 73060, 0, 4138, 194841, 0, 0, 0, 77827, 0, 13054,
-    0, 0, 128416, 110760, 0, 0, 3948, 128878, 0, 0, 0, 1680, 0, 78589, 0, 0,
-    120032, 0, 0, 0, 0, 74833, 74190, 5993, 42709, 0, 12706, 77846, 1893, 0,
-    63915, 0, 0, 110744, 0, 0, 63997, 120018, 63996, 3077, 0, 0, 1512, 0,
-    12589, 41479, 0, 0, 0, 0, 11831, 120727, 0, 41481, 0, 118912, 0, 3090, 0,
-    3086, 1664, 1850, 0, 3079, 0, 0, 94080, 127140, 0, 0, 74401, 0, 917555,
-    0, 0, 0, 0, 0, 11526, 63985, 5864, 0, 63992, 0, 63991, 0, 5480, 7858, 0,
-    4116, 78149, 0, 0, 0, 63907, 0, 0, 126131, 63905, 119601, 0, 983190, 0,
-    119666, 0, 0, 7534, 507, 91, 2042, 120775, 0, 0, 66028, 118811, 41844,
-    70680, 774, 0, 0, 0, 5994, 0, 0, 0, 0, 0, 72297, 0, 0, 0, 0, 6026, 0, 0,
-    0, 162, 0, 125247, 78151, 78152, 983590, 92709, 0, 68304, 0, 0, 0, 66658,
-    0, 0, 0, 0, 121511, 2226, 121512, 129349, 10492, 0, 121510, 0, 43119, 0,
-    0, 0, 66192, 0, 0, 4899, 12729, 0, 0, 0, 0, 4103, 0, 0, 77851, 69429,
+    917784, 7864, 129001, 129704, 917788, 121106, 917786, 917785, 917792,
+    67816, 129876, 2219, 0, 0, 0, 0, 0, 0, 121277, 0, 917777, 917776, 917775,
+    69644, 917781, 917780, 917779, 917778, 8668, 0, 121383, 917782, 5999, 0,
+    0, 129195, 128243, 43653, 1726, 1015, 0, 127247, 0, 0, 64919, 0, 0, 0,
+    128478, 0, 69791, 927, 0, 0, 42010, 0, 42021, 0, 0, 1299, 12240, 64537,
+    0, 0, 0, 0, 0, 0, 69454, 0, 0, 0, 122903, 19914, 12179, 0, 2296, 0, 0,
+    63832, 917773, 0, 63816, 2594, 63823, 63817, 11178, 0, 0, 0, 11265,
+    68295, 0, 0, 0, 10554, 3972, 0, 121198, 0, 917766, 10816, 917764, 119608,
+    74374, 917769, 11210, 93069, 8586, 3882, 8532, 120183, 1573, 128648, 0,
+    69916, 0, 101051, 67719, 0, 0, 0, 0, 0, 0, 0, 128821, 119169, 0, 0, 6626,
+    42763, 130034, 118884, 128613, 0, 83128, 0, 0, 0, 0, 0, 983561, 0, 0, 0,
+    9171, 0, 0, 71305, 983900, 121146, 0, 101095, 128881, 119604, 126596, 0,
+    0, 0, 128214, 42368, 0, 983105, 2271, 41487, 12118, 74124, 68651, 110836,
+    110833, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 0, 41491, 8521,
+    5083, 5082, 0, 0, 8519, 0, 3014, 5081, 73926, 0, 128549, 0, 69951, 5079,
+    129963, 2557, 128086, 65532, 11828, 0, 71297, 11105, 0, 0, 0, 8518,
+    10779, 0, 71303, 0, 0, 42170, 110769, 0, 629, 1924, 0, 12037, 0, 5987,
+    8462, 127744, 0, 63933, 69735, 110770, 128295, 63941, 67981, 5077, 0,
+    10880, 64849, 5075, 0, 128152, 65075, 0, 11007, 983717, 0, 0, 0, 66684,
+    72331, 3434, 72338, 1904, 0, 0, 72730, 0, 10499, 4507, 9578, 63925, 0,
+    7979, 0, 9831, 66689, 0, 461, 194834, 0, 4504, 0, 0, 6325, 0, 43021, 0,
+    0, 55236, 0, 0, 5177, 41324, 12055, 63831, 0, 41327, 12591, 0, 4114, 409,
+    0, 0, 8948, 41325, 0, 721, 10182, 0, 71311, 0, 0, 94052, 74963, 83503,
+    5998, 0, 0, 74825, 0, 12587, 0, 78571, 74889, 71328, 128955, 0, 74121,
+    78570, 78822, 0, 0, 5995, 0, 42568, 0, 0, 63944, 73860, 0, 0, 4167, 0,
+    43175, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, 9721, 0, 0, 0,
+    11742, 0, 0, 11493, 12334, 128762, 0, 66623, 0, 9173, 0, 11978, 0, 12734,
+    113750, 113741, 0, 6759, 0, 0, 0, 126222, 0, 70388, 129093, 13027, 42777,
+    7683, 1167, 0, 4983, 0, 861, 0, 0, 68297, 0, 43757, 92978, 129298, 0, 0,
+    0, 0, 70815, 9616, 0, 0, 12816, 43759, 0, 12710, 68674, 12721, 4101,
+    66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 42693, 0, 121088, 0, 0,
+    917915, 0, 42835, 0, 0, 0, 0, 0, 12712, 7105, 127807, 65060, 66875, 9900,
+    0, 0, 0, 121482, 119265, 0, 64778, 12585, 0, 0, 0, 0, 0, 0, 77826, 0,
+    4900, 125245, 0, 0, 0, 4119, 74768, 8971, 0, 0, 0, 78594, 41132, 9245,
+    73060, 0, 4138, 194841, 0, 0, 0, 77827, 0, 13054, 0, 0, 128416, 110760,
+    0, 0, 3948, 128878, 0, 0, 0, 1680, 0, 78589, 0, 0, 120032, 0, 0, 0, 0,
+    74833, 74190, 5993, 42709, 0, 12706, 77846, 1893, 0, 63915, 0, 0, 110744,
+    129826, 0, 63997, 120018, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 0, 0,
+    0, 0, 11831, 120727, 0, 41481, 0, 118912, 0, 3090, 0, 3086, 1664, 1850,
+    0, 3079, 0, 0, 94080, 127140, 0, 0, 74401, 0, 917555, 0, 0, 0, 0, 0,
+    11526, 63985, 5864, 0, 63992, 0, 63991, 0, 5480, 7858, 0, 4116, 78149, 0,
+    0, 0, 63907, 0, 0, 126131, 63905, 119601, 0, 983190, 0, 119666, 0, 0,
+    7534, 507, 91, 2042, 120775, 0, 0, 66028, 118811, 41844, 70680, 774, 0,
+    0, 0, 5994, 0, 12733, 0, 0, 0, 72297, 0, 0, 0, 0, 6026, 0, 0, 0, 162, 0,
+    125247, 78151, 78152, 983590, 92709, 0, 68304, 0, 0, 0, 66658, 0, 0, 0,
+    0, 121511, 2226, 121512, 129349, 10492, 0, 121510, 0, 43119, 0, 0, 0,
+    66192, 0, 0, 4899, 12729, 0, 0, 0, 0, 4103, 0, 129842, 77851, 69429,
     129046, 0, 12859, 70087, 0, 0, 0, 0, 0, 0, 0, 0, 65264, 5146, 0, 194694,
-    71684, 0, 0, 0, 983844, 0, 71688, 194693, 5147, 125019, 0, 74524, 71682,
-    128435, 0, 194692, 5991, 3445, 0, 4976, 66193, 0, 0, 0, 0, 128309, 0, 0,
-    0, 0, 63855, 0, 10138, 0, 0, 8897, 0, 75027, 0, 120931, 77862, 65836, 0,
-    0, 77860, 0, 0, 1123, 4124, 41553, 77903, 0, 71680, 121386, 398, 0, 0,
-    41551, 0, 0, 0, 41550, 9970, 0, 93062, 42392, 1305, 78901, 0, 0, 0, 7346,
-    41464, 0, 0, 0, 41465, 983577, 8528, 9149, 0, 63955, 165, 3024, 11852,
-    119163, 0, 9093, 0, 9147, 0, 0, 110989, 9148, 0, 4096, 53, 8296, 0,
-    71352, 0, 9594, 0, 0, 63952, 0, 10997, 0, 0, 5805, 0, 0, 0, 42176, 71455,
-    74601, 129604, 10591, 0, 0, 0, 0, 0, 0, 0, 0, 92475, 0, 0, 42379, 0, 0,
-    9220, 0, 121425, 0, 0, 4132, 0, 0, 11239, 0, 0, 74837, 0, 66408, 0, 8055,
-    0, 0, 0, 63962, 74042, 8924, 43123, 5988, 0, 63969, 0, 42718, 8788, 1357,
-    77872, 65743, 0, 8774, 0, 0, 0, 0, 92748, 120598, 128234, 9564, 0, 0,
-    119124, 0, 121241, 110983, 92975, 3121, 0, 0, 0, 70081, 0, 0, 0, 0, 0,
-    64851, 0, 0, 73085, 119532, 0, 0, 0, 0, 1198, 0, 66708, 64619, 0, 64663,
-    93991, 0, 0, 2101, 1398, 0, 92554, 0, 0, 92684, 11406, 0, 12127, 0, 840,
-    0, 0, 7101, 120938, 0, 0, 12880, 0, 43104, 0, 0, 0, 2117, 0, 0, 0, 0, 0,
-    0, 0, 7769, 0, 92413, 0, 0, 0, 0, 40986, 83117, 0, 0, 4127, 0, 0, 0, 0,
-    0, 0, 70738, 0, 129466, 0, 0, 0, 0, 119081, 0, 10581, 0, 4533, 0, 128941,
-    6490, 0, 12038, 0, 0, 68225, 0, 0, 69704, 0, 1948, 119007, 129607,
-    128594, 0, 0, 0, 120802, 0, 9494, 0, 0, 0, 4843, 0, 74772, 4098, 0, 0, 0,
-    3436, 0, 127279, 12817, 0, 126607, 0, 0, 0, 0, 74433, 0, 0, 0, 0, 121296,
-    65916, 0, 0, 121458, 0, 129107, 93815, 0, 73743, 0, 0, 983132, 67676, 0,
-    0, 74627, 128928, 0, 127892, 0, 71326, 67222, 0, 75013, 92435, 0, 128500,
-    0, 0, 9613, 43425, 4526, 121415, 0, 64520, 71336, 0, 0, 55278, 10228,
-    64957, 0, 0, 3807, 2081, 66640, 0, 0, 0, 0, 119269, 0, 128688, 0, 128142,
-    1451, 0, 0, 4134, 0, 74847, 0, 74793, 0, 0, 74295, 9960, 1201, 0, 12846,
-    121271, 0, 11919, 64962, 0, 43739, 0, 66358, 0, 0, 0, 43679, 72284,
-    72289, 0, 129523, 1253, 983851, 65766, 500, 65764, 65765, 65762, 65763,
-    65760, 65761, 70334, 983848, 9821, 11702, 110630, 110631, 110628, 110629,
-    128481, 0, 7533, 66717, 92500, 92305, 0, 0, 0, 127758, 71332, 0, 0, 0, 0,
-    11188, 0, 4112, 0, 0, 12890, 0, 0, 9915, 0, 68423, 0, 0, 2876, 0, 0, 0,
-    0, 7382, 92415, 0, 128132, 0, 0, 0, 0, 0, 127915, 0, 7003, 0, 0, 7704, 0,
-    0, 0, 4123, 0, 0, 9977, 0, 0, 65759, 0, 0, 128266, 9808, 0, 92611, 4126,
-    0, 9521, 9589, 64755, 0, 0, 0, 69948, 0, 92368, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 93814, 0, 0, 92234, 0, 10693, 0, 0, 65897, 4058, 0, 0, 64660, 0, 0, 0,
-    983711, 1139, 43298, 0, 71333, 8970, 0, 9934, 0, 11023, 128020, 42522, 0,
-    0, 0, 78899, 3057, 128113, 7349, 121327, 128722, 68065, 110813, 0,
-    128090, 67201, 0, 0, 0, 9528, 0, 0, 0, 9102, 627, 0, 6273, 129496, 0, 0,
-    983210, 92966, 43300, 0, 983721, 11696, 0, 1018, 65554, 0, 74338, 0,
-    7645, 0, 128321, 0, 0, 0, 0, 73814, 11544, 12563, 10728, 0, 0, 127340,
-    43311, 64966, 0, 0, 0, 118946, 0, 0, 74779, 0, 185, 65085, 74533, 0, 0,
-    7535, 0, 42525, 0, 9749, 41701, 6131, 0, 4117, 129062, 126988, 0, 92429,
-    65693, 0, 73445, 0, 69695, 0, 0, 0, 0, 0, 0, 0, 1184, 0, 815, 0, 0, 0, 0,
-    0, 71325, 0, 0, 64683, 983797, 0, 127959, 0, 0, 0, 0, 0, 0, 0, 68166, 0,
-    0, 0, 0, 66799, 0, 128912, 0, 5142, 0, 69643, 0, 0, 83367, 93975, 0, 0,
-    0, 123209, 0, 0, 0, 74855, 121330, 0, 0, 0, 0, 10940, 66030, 0, 70385, 0,
-    0, 2652, 120527, 0, 0, 0, 126508, 0, 0, 0, 0, 0, 0, 1828, 0, 128357, 0,
-    8531, 0, 74799, 12324, 72434, 65238, 68374, 0, 65573, 0, 68308, 68679,
-    12904, 43445, 0, 0, 0, 11247, 0, 0, 41426, 0, 0, 0, 0, 0, 67250, 69451,
-    83354, 71337, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 121178, 0, 0, 74474, 71306,
-    0, 7298, 128256, 0, 0, 0, 0, 8210, 0, 0, 0, 2046, 0, 0, 0, 70333, 0,
-    1506, 69926, 0, 83353, 0, 12651, 0, 0, 0, 12058, 120626, 72111, 7803, 0,
-    0, 65592, 118844, 0, 0, 355, 9719, 0, 118961, 0, 121077, 0, 0, 42178, 0,
-    69760, 42571, 0, 0, 0, 0, 0, 0, 127176, 3178, 0, 0, 92704, 83381, 9080,
-    120943, 67697, 0, 121342, 0, 0, 71485, 0, 917837, 0, 0, 78157, 0, 0, 0,
-    0, 0, 71313, 0, 0, 128212, 0, 72238, 67858, 0, 0, 0, 0, 0, 0, 0, 10770,
-    118994, 0, 465, 0, 0, 74348, 0, 0, 0, 0, 0, 0, 0, 10930, 0, 0, 0, 119091,
-    69388, 983614, 0, 0, 0, 0, 0, 0, 10092, 0, 0, 0, 0, 0, 1766, 11282,
-    11996, 66644, 4547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120906, 4345, 0, 0,
-    128947, 0, 0, 0, 0, 0, 5382, 0, 0, 0, 0, 0, 5406, 43127, 121139, 0, 3590,
-    0, 0, 0, 0, 42016, 0, 0, 121002, 0, 7742, 0, 66562, 71323, 0, 0, 5310, 0,
-    128173, 0, 43594, 0, 128260, 66723, 0, 73816, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    1326, 128723, 0, 0, 74519, 0, 0, 0, 0, 71308, 0, 5410, 5783, 0, 8403,
-    5400, 120526, 0, 128863, 0, 0, 0, 64412, 0, 0, 5587, 42865, 71858, 0, 0,
-    0, 0, 113785, 0, 120755, 0, 69738, 0, 74867, 10461, 12103, 0, 0, 70701,
-    0, 0, 0, 0, 0, 94009, 0, 0, 0, 8816, 41515, 0, 11802, 0, 7585, 910, 0, 0,
-    0, 3658, 83386, 120525, 0, 7617, 0, 12888, 0, 0, 64631, 0, 41514, 11097,
-    5703, 0, 41517, 41504, 41519, 0, 70104, 0, 65864, 0, 120533, 0, 121037,
-    0, 0, 43553, 120774, 0, 0, 0, 0, 0, 1578, 0, 43449, 0, 0, 8225, 121191,
-    94024, 72799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110655, 0, 110656, 121247,
-    72213, 0, 110658, 0, 74997, 0, 3195, 10999, 983566, 7897, 0, 1203, 74396,
-    0, 64544, 0, 0, 0, 2877, 0, 0, 0, 121112, 0, 0, 128977, 119607, 0, 0, 0,
-    0, 983623, 0, 0, 0, 0, 0, 0, 0, 0, 983078, 0, 0, 0, 9939, 0, 0, 0, 0, 0,
-    0, 0, 10714, 0, 0, 0, 0, 0, 67738, 0, 74038, 0, 42897, 0, 0, 0, 0, 0, 0,
-    7730, 0, 0, 0, 11163, 0, 0, 0, 113701, 4966, 128802, 70674, 129468,
-    123207, 3841, 0, 0, 983227, 77886, 0, 4972, 0, 64699, 0, 0, 0, 0, 0,
-    12705, 10203, 9608, 0, 0, 11962, 121397, 0, 1196, 67684, 0, 777, 0, 0,
-    65271, 0, 0, 0, 0, 64824, 983194, 0, 9454, 63778, 8658, 0, 0, 2705, 0,
-    64894, 0, 0, 11986, 92636, 0, 8280, 0, 2701, 0, 0, 0, 0, 0, 9809, 0, 0,
-    0, 0, 0, 63761, 1748, 0, 65719, 121078, 0, 0, 0, 55244, 3061, 0, 63765,
-    63787, 0, 41520, 0, 7694, 0, 8896, 63768, 55282, 0, 127781, 0, 0, 63807,
-    1591, 0, 6386, 119144, 0, 0, 0, 983199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68289,
-    0, 0, 7624, 0, 10996, 92247, 10609, 0, 127181, 10987, 0, 70370, 3894, 0,
-    0, 0, 0, 493, 0, 0, 1717, 12228, 479, 917941, 129347, 129473, 917935,
-    917939, 917924, 917932, 92303, 64315, 0, 0, 83522, 6233, 42681, 83525,
-    83518, 83519, 64911, 83521, 0, 0, 83516, 83517, 983081, 8378, 11632, 0,
-    0, 7323, 0, 120771, 0, 0, 0, 0, 120904, 83526, 0, 128710, 92672, 0, 0, 0,
-    0, 0, 0, 0, 63806, 63800, 0, 0, 0, 63798, 63803, 244, 11542, 0, 0, 73761,
-    0, 12669, 120310, 0, 0, 0, 0, 120680, 71908, 0, 0, 8612, 0, 0, 0, 0, 0,
-    64662, 125056, 1360, 248, 0, 63797, 0, 63794, 0, 7292, 983666, 63756,
-    42786, 74957, 0, 12663, 0, 0, 0, 0, 0, 0, 0, 4579, 0, 0, 0, 0, 0, 0,
-    71130, 65545, 9602, 8623, 0, 128052, 0, 0, 0, 0, 0, 0, 0, 659, 6098, 0,
-    12234, 83511, 83512, 8311, 83514, 7669, 83508, 83509, 83510, 0, 0, 0, 0,
-    983932, 0, 0, 2323, 0, 2319, 77917, 120900, 77916, 2311, 83077, 4415,
-    1586, 68050, 0, 128724, 83020, 2309, 83022, 8173, 83013, 83014, 83015,
-    83016, 0, 83010, 83011, 83012, 9397, 0, 9395, 9396, 9393, 9394, 9391,
-    9392, 9389, 6209, 9387, 9388, 9385, 9386, 9383, 9384, 0, 0, 0, 0, 0,
-    11259, 0, 0, 0, 2313, 0, 0, 0, 0, 0, 0, 10570, 65776, 110968, 0, 83006,
-    83007, 11998, 83009, 83002, 83003, 83004, 66406, 0, 128780, 83000, 11818,
-    9381, 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 0,
-    0, 0, 0, 127801, 0, 42029, 11079, 0, 43451, 42032, 0, 0, 0, 0, 5005, 0,
-    0, 42030, 5007, 78828, 126210, 0, 4951, 110776, 0, 110775, 0, 43309,
-    121222, 92172, 0, 92334, 0, 9548, 0, 119138, 71896, 0, 0, 0, 0, 0, 0,
-    65691, 65580, 64361, 10496, 0, 0, 0, 917975, 0, 0, 41046, 0, 0, 0, 13177,
-    0, 64703, 0, 43499, 3389, 10589, 0, 11208, 120719, 78395, 73964, 78393,
-    78392, 78391, 11314, 8281, 113732, 113667, 113745, 9076, 8862, 69743,
-    41052, 78397, 64766, 69821, 0, 0, 0, 82992, 82994, 10671, 82998, 82987,
-    82989, 82990, 6303, 113664, 498, 64471, 82986, 0, 0, 9349, 0, 0, 0, 8031,
-    2414, 0, 128999, 3231, 0, 6422, 0, 0, 119339, 2537, 78405, 41429, 78403,
-    78401, 78399, 0, 0, 41433, 4719, 41431, 0, 78411, 5211, 41428, 78407,
-    82983, 1772, 0, 0, 82979, 66850, 64812, 82982, 82975, 68767, 82977,
-    82978, 0, 0, 0, 0, 41064, 70368, 9663, 66838, 129381, 12304, 125113, 0,
-    41062, 66847, 0, 0, 41061, 70454, 0, 127187, 83049, 83050, 41509, 83054,
-    83045, 83046, 83047, 83048, 0, 43184, 41507, 1958, 0, 66816, 41506, 0, 0,
-    0, 120717, 0, 0, 0, 74349, 72113, 8008, 0, 0, 0, 65083, 6839, 0, 126517,
-    73803, 127055, 127056, 3508, 127058, 127059, 78038, 0, 120932, 0, 6411,
-    128115, 0, 0, 128832, 100930, 0, 0, 0, 0, 0, 0, 128546, 0, 0, 120914, 0,
-    0, 0, 0, 917822, 128810, 983657, 65599, 0, 9966, 12607, 4948, 128070, 0,
-    128149, 0, 0, 6207, 0, 6117, 73916, 0, 0, 0, 0, 68244, 41511, 0, 129489,
-    127304, 0, 121289, 0, 0, 83031, 83032, 0, 41556, 0, 0, 0, 128571, 73766,
-    0, 0, 0, 41510, 7953, 0, 0, 41513, 0, 0, 0, 83038, 83039, 83040, 83041,
-    83034, 83035, 848, 9868, 983149, 6424, 0, 83033, 0, 0, 0, 0, 0, 0, 893,
-    64576, 13299, 0, 0, 0, 71447, 0, 0, 0, 0, 8903, 0, 0, 0, 8099, 0, 0, 0,
-    0, 0, 0, 0, 0, 113713, 0, 0, 0, 0, 0, 83027, 41483, 83029, 83030, 83023,
+    71684, 0, 0, 0, 983844, 0, 71688, 78463, 5147, 125019, 0, 74524, 71682,
+    128435, 0, 194692, 5991, 3445, 0, 4976, 66193, 0, 0, 0, 0, 128309,
+    128594, 129819, 69579, 0, 63855, 0, 10138, 0, 0, 8897, 0, 75027, 0,
+    120931, 77862, 65836, 0, 0, 77860, 0, 0, 1123, 4124, 41553, 77903, 0,
+    71680, 121386, 398, 0, 129035, 41551, 0, 0, 0, 41550, 9970, 0, 93062,
+    42392, 1305, 78901, 0, 129292, 0, 7346, 41464, 0, 0, 0, 41465, 983567,
+    8528, 9149, 0, 63955, 165, 3024, 11852, 119163, 0, 9093, 0, 9147, 0, 0,
+    110989, 9148, 0, 4096, 53, 8296, 0, 71352, 0, 9594, 0, 0, 63952, 0,
+    10997, 0, 0, 5805, 0, 0, 0, 42176, 71455, 74601, 129604, 10591, 0, 0, 0,
+    0, 0, 0, 0, 0, 92475, 0, 0, 42379, 0, 0, 9220, 0, 121425, 0, 0, 4132, 0,
+    0, 11239, 0, 0, 74837, 0, 66408, 0, 8055, 0, 0, 0, 63962, 74042, 8924,
+    43123, 5988, 0, 63969, 0, 42718, 8788, 1357, 77872, 65743, 0, 8774, 0, 0,
+    0, 0, 92748, 120598, 128234, 9564, 0, 0, 119124, 0, 121241, 110983,
+    92975, 3121, 0, 0, 0, 70081, 0, 0, 0, 0, 0, 64851, 0, 0, 73085, 119532,
+    0, 0, 0, 0, 1198, 69293, 66708, 64619, 0, 64663, 93991, 0, 0, 2101, 1398,
+    0, 92554, 0, 0, 92684, 11406, 101588, 12127, 0, 840, 0, 0, 7101, 120938,
+    0, 0, 12880, 0, 43104, 0, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 7769, 129867,
+    92413, 0, 0, 0, 0, 40986, 83117, 0, 0, 4127, 0, 0, 0, 0, 0, 0, 70738, 0,
+    129466, 0, 0, 0, 0, 119081, 0, 10581, 0, 4533, 0, 128941, 6490, 0, 12038,
+    0, 0, 68225, 0, 0, 69704, 0, 1948, 119007, 129607, 101586, 0, 0, 0,
+    120802, 0, 9494, 0, 0, 0, 4843, 0, 74772, 4098, 0, 0, 0, 3436, 0, 127279,
+    12817, 0, 126607, 0, 0, 0, 0, 74433, 0, 0, 0, 0, 121296, 65916, 0, 0,
+    121458, 0, 129107, 93815, 0, 73743, 0, 0, 983132, 67676, 0, 0, 74627,
+    128928, 0, 127892, 0, 71326, 67222, 0, 75013, 92435, 0, 128500, 0, 0,
+    9613, 43425, 4526, 121415, 0, 64520, 71336, 0, 0, 55278, 10228, 64957, 0,
+    0, 3807, 2081, 66640, 0, 0, 0, 0, 119269, 0, 128688, 0, 128142, 1451, 0,
+    0, 4134, 0, 74847, 0, 74793, 0, 0, 74295, 9960, 1201, 0, 12846, 121271,
+    0, 11919, 64962, 0, 43739, 0, 66358, 0, 0, 0, 43679, 72284, 72289, 0,
+    129523, 1253, 983851, 65766, 500, 65764, 65765, 65762, 65763, 65760,
+    65761, 70334, 983848, 9821, 11702, 110630, 110631, 110628, 110629,
+    128481, 0, 7533, 66717, 92500, 92305, 0, 0, 69277, 127758, 71332, 0, 0,
+    0, 0, 11188, 0, 4112, 0, 0, 12890, 0, 0, 9915, 0, 68423, 0, 0, 2876, 0,
+    0, 0, 0, 7382, 92415, 0, 128132, 0, 0, 0, 0, 69561, 127915, 0, 7003, 0,
+    0, 7704, 0, 0, 0, 4123, 0, 0, 9977, 0, 0, 65759, 0, 0, 128266, 9808, 0,
+    92611, 4126, 0, 9521, 9589, 64755, 0, 0, 0, 69948, 0, 92368, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 93814, 0, 0, 92234, 0, 10693, 0, 0, 65897, 4058, 0, 0,
+    64660, 0, 0, 0, 983711, 1139, 43298, 0, 71333, 8970, 0, 9934, 0, 11023,
+    128020, 42522, 0, 0, 0, 78899, 3057, 128113, 7349, 69959, 128722, 68065,
+    110813, 0, 128090, 67201, 0, 0, 0, 9528, 0, 0, 0, 9102, 627, 0, 6273,
+    129496, 0, 0, 983210, 92966, 43300, 0, 983721, 11696, 127343, 1018,
+    65554, 0, 74338, 0, 7645, 0, 128321, 0, 0, 0, 0, 73814, 11544, 12563,
+    10728, 0, 0, 127340, 43311, 64966, 0, 0, 0, 118946, 0, 0, 74779, 0, 185,
+    65085, 74533, 0, 0, 7535, 0, 42525, 0, 9749, 41701, 6131, 0, 4117,
+    129062, 126988, 0, 92429, 65693, 0, 73445, 0, 69695, 0, 0, 0, 0, 0, 0, 0,
+    1184, 0, 815, 0, 0, 0, 0, 0, 71325, 0, 0, 64683, 983797, 0, 127959, 0, 0,
+    0, 0, 0, 0, 0, 68166, 0, 0, 0, 0, 66799, 0, 128912, 0, 5142, 0, 69643, 0,
+    0, 83367, 93975, 0, 0, 0, 123209, 0, 0, 0, 74855, 121330, 0, 0, 0, 0,
+    10940, 66030, 0, 70385, 0, 0, 2652, 120527, 0, 129946, 0, 126508, 0, 0,
+    0, 0, 0, 0, 1828, 0, 128357, 0, 8531, 0, 74799, 12324, 72434, 65238,
+    68374, 0, 65573, 0, 68308, 68679, 12904, 43445, 0, 0, 0, 11247, 0, 0,
+    41426, 0, 0, 0, 0, 0, 67250, 69451, 83354, 71337, 0, 0, 0, 0, 0, 0, 637,
+    0, 0, 0, 121178, 0, 0, 74474, 71306, 0, 7298, 128256, 0, 0, 0, 0, 8210,
+    0, 0, 0, 2046, 0, 0, 0, 70333, 0, 1506, 69926, 0, 83353, 0, 12651, 0, 0,
+    0, 12058, 120626, 72111, 7803, 0, 0, 65592, 118844, 0, 0, 355, 9719, 0,
+    118961, 0, 121077, 127246, 0, 42178, 0, 69760, 42571, 0, 0, 0, 0, 0, 0,
+    127176, 3178, 0, 0, 92704, 83381, 9080, 120943, 67697, 0, 121342, 129875,
+    0, 71485, 0, 917837, 0, 0, 78157, 0, 0, 0, 0, 0, 71313, 0, 0, 128212, 0,
+    72238, 67858, 0, 0, 0, 0, 0, 0, 0, 10770, 118994, 0, 465, 0, 0, 74348, 0,
+    0, 0, 0, 0, 0, 0, 10930, 0, 0, 0, 119091, 69388, 983614, 129918, 0, 0, 0,
+    0, 0, 10092, 0, 0, 0, 0, 0, 1766, 11282, 11996, 66644, 4547, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 120906, 4345, 0, 0, 128947, 0, 0, 0, 0, 0, 5382, 0, 0, 0,
+    0, 0, 5406, 43127, 120007, 0, 3590, 129874, 0, 0, 0, 42016, 0, 0, 121002,
+    0, 7742, 0, 66562, 71323, 0, 0, 5310, 0, 128173, 0, 43594, 0, 128260,
+    66723, 0, 73816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, 128723, 0, 0, 74519, 0,
+    0, 0, 0, 71308, 0, 5410, 5783, 0, 8403, 5400, 120526, 0, 128863, 0, 0, 0,
+    64412, 0, 0, 5587, 42865, 71858, 0, 0, 129854, 0, 113785, 0, 120755, 0,
+    69738, 0, 74867, 10461, 12103, 0, 0, 70701, 0, 0, 0, 0, 0, 94009, 0, 0,
+    0, 8816, 41515, 0, 11802, 0, 7585, 910, 0, 0, 0, 3658, 83386, 120525, 0,
+    7617, 0, 12888, 0, 0, 64631, 0, 41514, 11097, 5703, 0, 41517, 41504,
+    41519, 0, 70104, 0, 65864, 0, 120533, 0, 121037, 0, 0, 43553, 120774, 0,
+    0, 0, 0, 0, 1578, 0, 43449, 0, 0, 8225, 121191, 94024, 72799, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 110655, 0, 110656, 121247, 72213, 0, 110658, 0,
+    74997, 0, 3195, 10999, 983570, 7897, 0, 1203, 74396, 0, 64544, 0, 0, 0,
+    2877, 0, 0, 0, 121112, 0, 0, 128977, 119607, 0, 0, 0, 0, 983623, 0, 0, 0,
+    0, 0, 0, 0, 0, 983078, 0, 0, 0, 9939, 0, 0, 0, 0, 0, 0, 0, 10714, 0, 0,
+    0, 0, 0, 67738, 0, 74038, 0, 42897, 0, 0, 0, 0, 0, 0, 7730, 0, 0, 0,
+    11163, 0, 0, 0, 113701, 4966, 128802, 70674, 129468, 123207, 3841, 0, 0,
+    983227, 77886, 0, 4972, 0, 64699, 0, 0, 0, 0, 0, 12705, 10203, 9608, 0,
+    0, 11962, 121397, 0, 1196, 67684, 0, 777, 0, 0, 65271, 0, 0, 0, 0, 64824,
+    983194, 0, 9454, 63778, 8658, 0, 0, 2705, 0, 64894, 0, 0, 11986, 92636,
+    0, 8280, 0, 2701, 0, 0, 0, 0, 0, 9809, 0, 0, 0, 0, 0, 63761, 1748, 0,
+    65719, 121078, 0, 0, 0, 55244, 3061, 0, 63765, 63787, 0, 41520, 0, 7694,
+    0, 8896, 63768, 55282, 0, 127781, 0, 0, 63807, 1591, 0, 6386, 119143, 0,
+    0, 0, 983199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68289, 0, 0, 7624, 0, 10996,
+    92247, 10609, 0, 127181, 10987, 0, 70370, 3894, 0, 0, 0, 0, 493, 0, 0,
+    1717, 12228, 479, 917941, 129347, 129473, 917935, 917939, 917924, 917932,
+    92303, 64315, 0, 0, 83522, 6233, 42681, 83525, 83518, 83519, 64911,
+    83521, 0, 0, 83516, 83517, 129843, 8378, 11632, 0, 0, 7323, 0, 120771, 0,
+    0, 0, 0, 120904, 83526, 0, 128710, 92672, 0, 0, 0, 0, 0, 0, 0, 63806,
+    63800, 0, 0, 0, 63798, 63803, 244, 11542, 0, 0, 73761, 0, 12669, 120310,
+    0, 0, 0, 0, 120680, 71908, 0, 0, 8612, 0, 0, 0, 0, 0, 64662, 125056,
+    1360, 248, 0, 63797, 0, 63794, 0, 7292, 983666, 63756, 42786, 74957, 0,
+    12663, 0, 0, 0, 0, 0, 0, 0, 4579, 0, 0, 0, 0, 0, 0, 71130, 65545, 9602,
+    8623, 0, 128052, 0, 0, 0, 0, 0, 0, 0, 659, 6098, 0, 12234, 83511, 83512,
+    8311, 83514, 7669, 83508, 83509, 83510, 0, 0, 0, 0, 983932, 0, 0, 2323,
+    0, 2319, 77917, 120900, 77916, 2311, 83077, 4415, 1586, 68050, 0, 128724,
+    83020, 2309, 83022, 8173, 83013, 83014, 83015, 83016, 0, 83010, 69275,
+    83012, 9397, 0, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387,
+    9388, 9385, 9386, 9383, 9384, 0, 0, 0, 0, 0, 11259, 0, 0, 0, 2313, 0,
+    119661, 0, 0, 0, 0, 10570, 65776, 110968, 0, 83006, 83007, 11998, 83009,
+    83002, 83003, 83004, 66406, 0, 128780, 83000, 11818, 9381, 9382, 9379,
+    9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 0, 0, 0, 0, 127801, 0,
+    42029, 11079, 0, 43451, 42032, 0, 0, 0, 0, 5005, 0, 0, 42030, 5007,
+    78828, 126210, 0, 4951, 110776, 0, 110775, 0, 43309, 121222, 92172, 0,
+    92334, 0, 9548, 0, 119138, 71896, 0, 0, 0, 0, 0, 0, 65691, 65580, 64361,
+    10496, 0, 0, 0, 917975, 0, 0, 41046, 0, 0, 0, 13177, 0, 64703, 0, 43499,
+    3389, 10589, 0, 11208, 120719, 78395, 73964, 78393, 78392, 78391, 11314,
+    8281, 113732, 113667, 113745, 9076, 8862, 69743, 41052, 78397, 64766,
+    69821, 0, 0, 0, 82992, 82994, 10671, 82998, 82987, 82989, 82990, 6303,
+    113664, 498, 64471, 82986, 129901, 0, 9349, 0, 0, 0, 8031, 2414, 0,
+    128999, 3231, 0, 6422, 0, 0, 119339, 2537, 78405, 41429, 78403, 78401,
+    78399, 0, 0, 41433, 4719, 41431, 0, 78411, 5211, 41428, 78407, 82983,
+    1772, 0, 0, 82979, 66850, 64812, 82982, 82975, 68767, 82977, 82978, 0, 0,
+    0, 0, 41064, 70368, 9663, 66838, 129381, 12304, 125113, 0, 41062, 66847,
+    0, 0, 41061, 70454, 0, 127187, 83049, 83050, 41509, 83054, 83045, 83046,
+    83047, 83048, 0, 43184, 41507, 1958, 0, 66816, 41506, 0, 0, 0, 120717, 0,
+    0, 0, 74349, 72113, 8008, 0, 0, 0, 65083, 6839, 0, 126517, 73803, 127055,
+    127056, 3508, 127058, 127059, 78038, 0, 120932, 0, 6411, 128115, 0, 0,
+    128832, 100930, 0, 0, 0, 0, 0, 0, 128546, 0, 0, 120914, 0, 0, 0, 0,
+    917822, 128810, 983657, 65599, 0, 9966, 12607, 4948, 128070, 0, 128149,
+    0, 0, 6207, 0, 6117, 73916, 0, 0, 0, 0, 68244, 41511, 0, 129489, 127304,
+    0, 121289, 0, 0, 83031, 83032, 0, 41556, 0, 0, 0, 128571, 73766, 0, 0, 0,
+    41510, 7953, 0, 0, 41513, 0, 0, 0, 83038, 83039, 83040, 83041, 83034,
+    83035, 848, 9868, 983149, 6424, 0, 83033, 0, 0, 0, 0, 0, 0, 893, 64576,
+    13299, 0, 0, 71998, 71447, 0, 0, 0, 0, 8903, 0, 0, 0, 8099, 0, 0, 0, 0,
+    0, 0, 0, 0, 113713, 0, 0, 0, 0, 0, 83027, 41483, 83029, 83030, 83023,
     83024, 69436, 83026, 194756, 41485, 194758, 194757, 194760, 41482, 42737,
     64588, 0, 127787, 0, 10014, 0, 0, 194763, 194762, 68785, 194764, 194767,
     194766, 0, 0, 0, 11377, 0, 0, 983792, 0, 0, 0, 9776, 0, 93824, 5215,
@@ -26182,14 +27031,14 @@
     129526, 6421, 0, 0, 121304, 0, 0, 0, 0, 92625, 119070, 67895, 983943, 0,
     68608, 6482, 0, 0, 11945, 0, 0, 8838, 0, 4025, 10709, 0, 2108, 0, 73929,
     0, 0, 10617, 194737, 128031, 194739, 194738, 68614, 194740, 68611, 9924,
-    194745, 194744, 0, 0, 0, 3277, 0, 4947, 41055, 0, 194722, 194721, 194724,
+    129952, 194744, 0, 0, 0, 3277, 0, 4947, 41055, 0, 194722, 129930, 194724,
     194723, 64626, 194725, 42266, 194727, 8371, 194729, 127028, 12806, 41492,
     0, 0, 73930, 194731, 194730, 41054, 1078, 194735, 194734, 41057, 0, 0, 0,
-    0, 0, 92210, 73009, 0, 41496, 0, 9165, 1572, 0, 917934, 0, 128635, 9215,
-    9330, 0, 10032, 41745, 43183, 6401, 5831, 0, 0, 0, 8056, 0, 65681, 92377,
-    0, 0, 0, 121048, 0, 118887, 6408, 0, 0, 5661, 82972, 82973, 3603, 0,
-    82967, 3548, 82969, 82970, 0, 82964, 82965, 9918, 118787, 11321, 0, 0, 0,
-    128992, 0, 0, 0, 0, 0, 0, 41558, 41471, 0, 8158, 41561, 41472, 0, 0,
+    0, 0, 92210, 73009, 0, 41496, 0, 9165, 1572, 0, 129712, 0, 128635, 9215,
+    9330, 129809, 10032, 41745, 43183, 6401, 5831, 0, 0, 0, 8056, 0, 65681,
+    92377, 0, 0, 0, 121048, 0, 118887, 6408, 0, 0, 5661, 82972, 82973, 3603,
+    0, 82967, 3548, 82969, 82970, 0, 82964, 82965, 9918, 118787, 11321, 0, 0,
+    0, 128992, 0, 0, 0, 0, 0, 0, 41558, 41471, 0, 8158, 41561, 41472, 0, 0,
     194672, 43762, 77927, 6701, 41559, 1896, 66256, 66248, 194680, 5665, 0,
     194681, 0, 0, 0, 74352, 0, 5664, 127895, 194682, 12310, 5662, 194687,
     194686, 73924, 1121, 82953, 82955, 0, 74378, 0, 0, 74966, 0, 71892, 0,
@@ -26197,7 +27046,7 @@
     2795, 73923, 0, 69231, 0, 6275, 93957, 917927, 124972, 194655, 127786,
     6423, 0, 0, 0, 68526, 12823, 0, 0, 42026, 42017, 0, 7524, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 12691, 68072, 42722, 69877, 82956, 78655, 78661, 82959,
-    78662, 41265, 41065, 1795, 0, 118791, 10587, 0, 983114, 0, 194640, 0,
+    78662, 41265, 41065, 1795, 0, 118791, 10587, 0, 917807, 0, 194640, 0,
     12946, 194641, 71921, 194643, 9169, 70372, 194648, 194647, 68202, 194649,
     73990, 65111, 0, 748, 41067, 6234, 194651, 9990, 72795, 194652, 194629,
     194628, 194631, 194630, 67896, 194632, 0, 3593, 82948, 82949, 82950,
@@ -26212,148 +27061,150 @@
     74317, 0, 8319, 194714, 194717, 10960, 72196, 8305, 12573, 983620, 72193,
     0, 13202, 0, 12582, 0, 72198, 69856, 0, 0, 78598, 0, 72195, 0, 65802,
     74822, 7698, 12708, 74045, 0, 0, 70460, 4913, 127990, 0, 0, 0, 0, 12728,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 12588, 8821, 6153, 194705, 78900, 194707,
-    194710, 194709, 194712, 194711, 118854, 194713, 651, 0, 0, 0, 0, 0,
-    78468, 78469, 69433, 78467, 69614, 74905, 194695, 78461, 194697, 194696,
-    0, 4716, 43277, 0, 78474, 78475, 128592, 120928, 194700, 55264, 194702,
-    120676, 0, 12707, 0, 0, 0, 0, 121417, 8479, 4151, 0, 0, 0, 0, 0, 0, 0, 0,
-    113799, 0, 74050, 0, 0, 0, 0, 0, 129467, 12278, 0, 129507, 0, 2700,
-    12576, 7842, 0, 0, 0, 2699, 0, 0, 2985, 0, 126475, 0, 0, 119314, 0,
-    119312, 9827, 119310, 119311, 119308, 119309, 119306, 11481, 0, 119305,
-    0, 35, 78481, 78482, 66694, 78480, 78477, 78478, 0, 0, 64257, 0, 0, 0,
-    78485, 78486, 78483, 4272, 0, 0, 40965, 0, 12704, 78487, 983588, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 5244, 4189, 94108, 0, 127948, 4188, 1879, 0, 0, 0,
-    43743, 0, 8873, 2279, 0, 0, 0, 12574, 0, 92749, 92753, 983902, 0, 0,
-    75001, 0, 0, 0, 12578, 12720, 128628, 101088, 0, 12346, 128596, 101089,
-    0, 0, 7251, 0, 0, 118850, 73025, 0, 0, 0, 0, 0, 12564, 66457, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 41564, 10976, 0, 121223, 0, 0, 10054, 9197,
-    120618, 0, 9012, 65737, 74420, 0, 13215, 12730, 0, 0, 0, 0, 816, 0,
-    129462, 0, 83191, 0, 0, 92752, 0, 4715, 94107, 94106, 71075, 0, 0, 0,
-    67729, 0, 307, 0, 9585, 0, 0, 0, 0, 0, 125267, 0, 70727, 65567, 120498,
-    75006, 120984, 983890, 0, 12236, 41419, 194618, 194621, 194620, 75003,
-    194622, 73675, 120957, 41421, 75005, 4462, 0, 126599, 983892, 821, 0,
-    2498, 5800, 100834, 100833, 1760, 94019, 4469, 64377, 100840, 100839, 0,
-    757, 1185, 0, 100841, 0, 10628, 100842, 68849, 100844, 43971, 100846,
-    100849, 64763, 0, 7713, 0, 0, 0, 4380, 194608, 128073, 194610, 194609,
-    194612, 862, 65626, 194613, 65627, 65629, 5137, 194617, 0, 0, 0, 65069,
-    7566, 64688, 67143, 194592, 100823, 100822, 100825, 4748, 92228, 100826,
-    100829, 42260, 129494, 64107, 0, 0, 0, 0, 128189, 0, 194604, 13137, 8775,
-    127945, 123633, 194607, 0, 8410, 4454, 194585, 0, 92542, 4449, 92330,
-    127064, 75022, 92761, 70664, 194589, 339, 194591, 194590, 0, 70662, 0,
-    100830, 41543, 0, 0, 0, 41542, 127066, 8916, 6705, 0, 129296, 0, 0, 0, 0,
-    0, 41548, 6729, 119329, 0, 7348, 0, 0, 7537, 0, 11819, 0, 0, 123624,
-    71269, 0, 7344, 100808, 129595, 9780, 0, 11117, 74993, 0, 194578, 10483,
-    194580, 194579, 194582, 194581, 68781, 125114, 100820, 100819, 0, 4211,
-    1259, 7517, 0, 0, 194561, 70827, 194563, 194562, 641, 5219, 94034,
-    194566, 11064, 194568, 0, 0, 0, 0, 0, 0, 100812, 100811, 100814, 100813,
-    100816, 100815, 100818, 100817, 100798, 100797, 41410, 100799, 64262, 0,
-    41407, 75000, 0, 0, 93812, 0, 0, 72803, 74999, 78897, 0, 0, 67675, 0, 0,
-    0, 0, 43647, 0, 0, 100792, 100791, 100794, 100793, 100796, 100795, 0,
-    74630, 11933, 0, 0, 41903, 67892, 11001, 100801, 42255, 100803, 100802,
-    100805, 41905, 100807, 100806, 10775, 9793, 0, 0, 74452, 0, 983063,
-    42535, 0, 64529, 41408, 42853, 0, 0, 42674, 118915, 0, 0, 983788, 0,
-    70838, 0, 0, 0, 64506, 0, 66738, 4747, 100783, 69844, 100785, 5832, 0, 0,
-    5141, 42600, 0, 0, 0, 0, 0, 0, 93790, 0, 7657, 0, 71132, 74137, 0,
-    128362, 73682, 73681, 859, 0, 0, 0, 6059, 126985, 55235, 0, 0, 0, 0, 0,
-    100787, 11488, 72838, 100788, 0, 100790, 10558, 0, 0, 0, 126090, 71069,
-    0, 0, 1788, 0, 0, 0, 0, 119571, 917961, 9028, 0, 69234, 73665, 0, 9905,
-    128485, 41242, 70086, 0, 74109, 100765, 100764, 100767, 100766, 70830,
-    83184, 70082, 3940, 0, 43754, 0, 128188, 8665, 0, 0, 0, 1653, 100775,
-    42406, 100777, 100780, 70825, 120523, 0, 8815, 0, 65046, 0, 42445, 0,
-    11180, 119318, 119315, 68454, 42485, 0, 0, 8211, 42293, 983602, 0, 0, 0,
-    0, 65385, 100771, 42332, 100773, 78431, 78432, 78423, 78430, 78420,
-    10022, 65387, 78419, 65384, 0, 0, 0, 65386, 0, 11248, 0, 43198, 64751, 0,
-    0, 0, 0, 0, 0, 101102, 7363, 0, 0, 119323, 119324, 100752, 100751, 0,
-    119320, 0, 983632, 0, 8237, 0, 0, 0, 0, 0, 0, 9914, 0, 100763, 100762,
-    120009, 6351, 119993, 92740, 68766, 0, 120010, 41243, 0, 74108, 11467,
-    120165, 119998, 4358, 0, 6353, 0, 0, 0, 93045, 1710, 0, 0, 92237, 0, 49,
-    73871, 0, 78671, 0, 78672, 9741, 78443, 78444, 78441, 43443, 78439,
-    78440, 69244, 78438, 3470, 0, 0, 0, 0, 0, 78445, 0, 1072, 78457, 78452,
-    78454, 74230, 78451, 78447, 78449, 1080, 0, 74100, 0, 1101, 68404, 78458,
-    78459, 71082, 0, 1086, 1869, 0, 0, 0, 65458, 0, 0, 41988, 0, 1091, 0,
-    7977, 0, 67395, 0, 0, 0, 92758, 0, 0, 0, 0, 0, 71255, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 64582, 0, 0, 70794, 0, 120989, 128495, 74106, 0, 66883, 0, 0, 0,
-    0, 0, 0, 0, 92553, 43752, 110592, 0, 0, 120886, 0, 0, 0, 0, 6063, 100857,
-    0, 917995, 6053, 74096, 0, 0, 74169, 13100, 0, 917999, 0, 917998, 0,
-    70387, 6055, 7800, 4279, 8490, 120114, 120111, 64786, 8602, 120110,
-    83389, 92204, 0, 0, 74961, 0, 120117, 120118, 120099, 120100, 65087,
-    64402, 3674, 120096, 0, 120094, 120107, 120108, 120105, 10107, 42159,
-    42870, 120101, 69632, 0, 0, 43281, 127078, 0, 74098, 0, 0, 126497, 74099,
-    129056, 0, 0, 0, 121123, 5847, 125258, 0, 0, 0, 0, 0, 66592, 64469,
-    71698, 19966, 0, 42561, 0, 129170, 66854, 8120, 75042, 0, 0, 0, 0, 0, 0,
-    126068, 8369, 0, 0, 122912, 3369, 0, 121094, 0, 0, 69238, 10495, 121365,
-    0, 557, 9457, 0, 0, 121054, 73880, 127220, 0, 74937, 74094, 0, 0, 0,
-    92171, 127219, 128175, 127939, 120424, 0, 127214, 2109, 67893, 127211,
-    69656, 127217, 10604, 127215, 0, 0, 0, 0, 126561, 0, 0, 0, 0, 1618, 0, 0,
-    83175, 10430, 0, 0, 13063, 917585, 0, 92982, 113666, 0, 78390, 83489,
-    12060, 0, 113669, 0, 6329, 0, 0, 0, 74395, 2707, 8309, 0, 127054, 78398,
-    0, 2697, 0, 78396, 127057, 2695, 0, 0, 68334, 0, 0, 0, 72325, 2693,
-    74091, 0, 0, 2703, 113729, 70283, 41918, 983168, 127542, 8687, 127543,
-    12178, 43361, 92540, 64075, 110705, 5248, 110703, 120538, 6427, 0, 0, 0,
-    0, 110710, 0, 74990, 74989, 70703, 127031, 0, 9873, 0, 0, 0, 64762, 2053,
-    0, 6591, 9340, 0, 1589, 0, 296, 67712, 128315, 12766, 118931, 74370,
-    120417, 8922, 128068, 43829, 111202, 74836, 0, 12579, 0, 12575, 6416,
-    5656, 0, 13262, 65590, 5299, 0, 0, 5449, 1252, 0, 78404, 0, 74369, 65373,
-    5295, 0, 121066, 1223, 1642, 78408, 0, 12158, 5303, 0, 120546, 41413,
-    3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, 9728, 0, 10924,
-    74778, 6636, 0, 0, 0, 0, 0, 9519, 0, 0, 983928, 129439, 68780, 0, 0, 0,
-    126260, 0, 12104, 77942, 77951, 9004, 0, 74249, 10230, 0, 0, 0, 77947, 0,
-    69679, 121475, 9890, 125049, 12971, 0, 92556, 0, 67903, 70051, 983905, 0,
-    0, 9635, 12600, 0, 0, 0, 0, 6469, 0, 0, 65304, 4679, 0, 64300, 64867,
-    6531, 0, 101099, 101098, 0, 101100, 42916, 0, 0, 0, 0, 0, 0, 4445, 72296,
-    0, 11533, 0, 3416, 129148, 0, 0, 0, 78566, 0, 0, 101091, 0, 101093, 5447,
-    72140, 101094, 101097, 101096, 0, 0, 0, 64448, 0, 43920, 70677, 0, 6232,
-    101101, 101104, 101103, 43608, 101105, 0, 6538, 4335, 0, 3941, 74986,
-    11061, 0, 74988, 74987, 0, 12155, 128278, 0, 0, 0, 0, 74578, 0, 65832, 0,
+    129980, 0, 0, 101281, 0, 130038, 0, 101283, 0, 12588, 8821, 6153, 194705,
+    78900, 194707, 194710, 194709, 194712, 194711, 118854, 194713, 651, 0, 0,
+    0, 0, 0, 78468, 78469, 69433, 78467, 69614, 74905, 194695, 78461, 194697,
+    194696, 0, 4716, 43277, 0, 78474, 78475, 128592, 120928, 194700, 55264,
+    194702, 12732, 0, 12707, 0, 0, 0, 0, 121417, 8479, 4151, 0, 0, 0, 0, 0,
+    0, 0, 0, 113799, 0, 74050, 0, 0, 0, 0, 0, 129467, 12278, 0, 129507, 0,
+    2700, 12576, 7842, 0, 0, 0, 2699, 0, 0, 2985, 0, 126475, 0, 129873,
+    119314, 0, 119312, 9827, 101292, 119311, 101291, 119309, 119306, 11481,
+    0, 119305, 0, 35, 78481, 78482, 66694, 78480, 78477, 78478, 0, 0, 64257,
+    0, 0, 0, 78485, 78486, 78483, 4272, 0, 0, 40965, 0, 12704, 78487, 983568,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 5244, 4189, 94108, 0, 127948, 4188, 1879, 0,
+    0, 0, 43743, 71974, 8873, 2279, 0, 0, 0, 12574, 12735, 92749, 92753,
+    983902, 0, 0, 75001, 0, 0, 0, 12578, 12720, 128628, 101088, 0, 12346,
+    128596, 101089, 0, 0, 7251, 0, 0, 118850, 73025, 0, 0, 0, 0, 0, 12564,
+    66457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101131, 0, 41564, 10976, 0, 121223,
+    0, 0, 10054, 9197, 120618, 0, 9012, 65737, 74420, 0, 13215, 12730, 0, 0,
+    0, 0, 816, 0, 101123, 0, 83191, 0, 0, 92752, 101120, 4715, 94107, 94106,
+    71075, 0, 0, 0, 67729, 0, 307, 0, 9585, 0, 0, 0, 101255, 0, 125267, 0,
+    70727, 65567, 101238, 75006, 101231, 983890, 0, 12236, 41419, 101259,
+    194621, 101248, 75003, 194622, 73675, 120957, 41421, 75005, 4462, 0,
+    126599, 983892, 821, 0, 2498, 5800, 100834, 100833, 1760, 94019, 4469,
+    64377, 100840, 100839, 0, 757, 1185, 0, 100841, 0, 10628, 100842, 68849,
+    100844, 43971, 100846, 100849, 64763, 0, 7713, 0, 0, 0, 4380, 194608,
+    128073, 194610, 194609, 194612, 862, 65626, 194613, 65627, 65629, 5137,
+    194617, 0, 0, 0, 65069, 7566, 64688, 67143, 194592, 100823, 100822,
+    100825, 4748, 92228, 100826, 100829, 42260, 129494, 64107, 0, 0, 0, 0,
+    128189, 0, 194604, 13137, 8775, 127945, 123633, 194607, 0, 8410, 4454,
+    194585, 0, 92542, 4449, 92330, 127064, 75022, 92761, 70664, 194589, 339,
+    194591, 194590, 0, 70662, 0, 100830, 41543, 0, 0, 0, 41542, 127066, 8916,
+    6705, 0, 129296, 0, 0, 0, 0, 0, 41548, 6729, 119329, 0, 7348, 0, 0, 7537,
+    0, 11819, 0, 0, 123624, 71269, 0, 7344, 100808, 129073, 9780, 0, 11117,
+    74993, 0, 194578, 10483, 194580, 194579, 194582, 194581, 68781, 125114,
+    100820, 100819, 0, 4211, 1259, 7517, 0, 0, 194561, 70827, 194563, 194562,
+    641, 5219, 94034, 194566, 11064, 194568, 0, 129820, 0, 0, 0, 0, 100812,
+    100811, 100814, 100813, 100816, 100815, 100818, 100817, 100798, 100797,
+    41410, 100799, 64262, 0, 41407, 75000, 0, 0, 93812, 0, 0, 72803, 74999,
+    78897, 0, 0, 67675, 0, 0, 0, 0, 43647, 0, 0, 100792, 100791, 100794,
+    100793, 100796, 100795, 0, 74630, 11933, 0, 0, 41903, 67892, 11001,
+    100801, 42255, 100803, 100802, 100805, 41905, 100807, 100806, 10775,
+    9793, 0, 0, 74452, 0, 983063, 42535, 0, 64529, 41408, 42853, 0, 0, 42674,
+    118915, 0, 0, 983788, 0, 70838, 0, 0, 0, 64506, 0, 66738, 4747, 100783,
+    69844, 100785, 5832, 0, 0, 5141, 42600, 0, 0, 0, 0, 0, 0, 93790, 0, 7657,
+    0, 71132, 74137, 0, 128362, 73682, 73681, 859, 0, 0, 0, 6059, 126985,
+    55235, 0, 0, 0, 0, 0, 100787, 11488, 72838, 100788, 0, 100790, 10558, 0,
+    0, 0, 126090, 71069, 0, 0, 1788, 0, 0, 0, 0, 119571, 917961, 9028, 0,
+    69234, 73665, 0, 9905, 128485, 41242, 70086, 0, 74109, 100765, 100764,
+    100767, 100766, 70830, 83184, 70082, 3940, 0, 43754, 0, 128188, 8665, 0,
+    0, 0, 1653, 100775, 42406, 100777, 100780, 70825, 120523, 0, 8815, 0,
+    65046, 0, 42445, 0, 11180, 119318, 119315, 68454, 42485, 0, 0, 8211,
+    42293, 983602, 0, 0, 0, 0, 65385, 100771, 42332, 100773, 78431, 78432,
+    78423, 78430, 78420, 10022, 65387, 78419, 65384, 0, 0, 0, 65386, 0,
+    11248, 0, 43198, 64751, 0, 0, 0, 0, 0, 0, 101102, 7363, 0, 0, 119323,
+    119324, 100752, 100751, 0, 119320, 0, 983632, 0, 8237, 0, 0, 0, 0, 0, 0,
+    9914, 0, 100763, 100762, 120009, 6351, 119993, 92740, 68766, 0, 120010,
+    41243, 0, 74108, 11467, 120165, 119998, 4358, 0, 6353, 0, 0, 0, 93045,
+    1710, 0, 0, 92237, 0, 49, 73871, 120005, 78671, 0, 78672, 9741, 78443,
+    78444, 78441, 43443, 78439, 78440, 69244, 78438, 3470, 0, 0, 0, 0, 0,
+    78445, 0, 1072, 78457, 78452, 78454, 74230, 78451, 78447, 78449, 1080, 0,
+    74100, 0, 1101, 68404, 78458, 78459, 71082, 0, 1086, 1869, 0, 0, 0,
+    65458, 0, 0, 41988, 0, 1091, 0, 7977, 0, 67395, 0, 0, 0, 92758, 0, 0, 0,
+    0, 0, 71255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64582, 0, 0, 70794, 0, 120989,
+    128495, 74106, 0, 66883, 0, 0, 0, 0, 0, 0, 0, 92553, 43752, 110592, 0, 0,
+    120886, 0, 0, 0, 0, 6063, 100857, 101221, 917995, 6053, 74096, 0, 0,
+    74169, 13100, 0, 917999, 0, 917998, 0, 70387, 6055, 7800, 4279, 8490,
+    120114, 120111, 64786, 8602, 120110, 83389, 92204, 0, 0, 74961, 0,
+    120117, 120118, 120099, 120100, 65087, 64402, 3674, 120096, 0, 120094,
+    120107, 120108, 120105, 10107, 42159, 42870, 120101, 69632, 0, 0, 43281,
+    127078, 0, 74098, 0, 0, 126497, 74099, 129056, 0, 0, 0, 121123, 5847,
+    125258, 0, 0, 0, 0, 0, 66592, 64469, 71698, 19966, 0, 42561, 0, 129170,
+    66854, 8120, 75042, 0, 0, 0, 0, 0, 0, 126068, 8369, 0, 0, 122912, 3369,
+    0, 121094, 0, 0, 69238, 10495, 121365, 0, 557, 9457, 0, 0, 121054, 73880,
+    127220, 0, 74937, 74094, 0, 0, 0, 92171, 127219, 128175, 127939, 120424,
+    0, 127214, 2109, 67893, 127211, 69656, 127217, 10604, 127215, 0, 0, 0, 0,
+    126561, 0, 0, 0, 0, 1618, 0, 0, 83175, 10430, 0, 0, 13063, 917585, 0,
+    92982, 113666, 0, 78390, 83489, 12060, 0, 113669, 0, 6329, 0, 0, 0,
+    74395, 2707, 8309, 0, 127054, 78398, 0, 2697, 0, 78396, 127057, 2695, 0,
+    0, 68334, 0, 0, 0, 72325, 2693, 74091, 0, 0, 2703, 113729, 70283, 41918,
+    983168, 127542, 8687, 127543, 12178, 43361, 92540, 64075, 110705, 5248,
+    110703, 120538, 6427, 0, 0, 0, 0, 110710, 0, 74990, 74989, 70703, 127031,
+    0, 9873, 0, 0, 0, 64762, 2053, 0, 6591, 9340, 0, 1589, 0, 296, 67712,
+    128315, 12766, 118931, 74370, 120417, 8922, 128068, 43829, 111202, 74836,
+    0, 12579, 0, 12575, 6416, 5656, 0, 13262, 65590, 5299, 0, 0, 5449, 1252,
+    0, 78404, 0, 74369, 65373, 5295, 0, 121066, 1223, 1642, 78408, 0, 12158,
+    5303, 0, 120546, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0,
+    74450, 9728, 0, 10924, 74778, 6636, 0, 129884, 0, 0, 129882, 9519, 0, 0,
+    983928, 101110, 68780, 0, 0, 0, 119182, 0, 12104, 77942, 77951, 9004, 0,
+    74249, 10230, 0, 0, 0, 77947, 0, 69679, 121475, 9890, 125049, 12971, 0,
+    92556, 0, 67903, 70051, 983905, 0, 0, 9635, 12600, 0, 0, 0, 118900, 6469,
+    0, 101113, 65304, 4679, 101114, 64300, 64867, 6531, 101118, 101099,
+    101098, 0, 101100, 42916, 0, 0, 0, 0, 0, 0, 4445, 72296, 0, 11533, 0,
+    3416, 129148, 0, 0, 0, 78566, 0, 0, 101091, 0, 101093, 5447, 72140,
+    70752, 101097, 101096, 0, 0, 0, 64448, 0, 43920, 70677, 0, 6232, 101101,
+    101104, 101103, 43608, 101105, 101108, 6538, 4335, 0, 3941, 74986, 11061,
+    0, 74988, 74987, 0, 12155, 128278, 0, 0, 0, 0, 74578, 0, 65832, 0,
     129459, 70789, 0, 125050, 0, 0, 350, 10951, 101081, 509, 101083, 101086,
     101085, 0, 0, 0, 917540, 0, 100905, 110970, 12162, 64741, 0, 9354, 0,
     70802, 100901, 2496, 11516, 944, 128238, 0, 0, 1438, 0, 0, 120185, 70785,
     1220, 917952, 93844, 0, 0, 5008, 42630, 70787, 101087, 101090, 68206,
     564, 0, 312, 0, 0, 0, 70797, 8877, 269, 0, 128065, 9617, 0, 0, 100910, 0,
-    0, 10862, 0, 0, 41416, 0, 4173, 0, 0, 0, 1906, 0, 41418, 74073, 101068,
-    101067, 41415, 69622, 9582, 0, 64287, 0, 0, 11428, 1730, 0, 0, 19918,
-    10469, 101076, 101079, 68088, 0, 101080, 72342, 0, 0, 0, 6129, 0, 0, 0,
-    0, 7874, 0, 0, 11206, 13136, 0, 129305, 0, 64374, 74925, 0, 73892, 0,
-    101073, 101072, 101075, 74960, 9228, 101054, 101057, 101056, 5240, 9811,
-    0, 101060, 0, 0, 0, 74079, 65873, 0, 0, 0, 9501, 0, 68081, 72808, 65465,
-    64654, 7467, 0, 0, 83460, 10040, 0, 3096, 0, 101053, 101052, 68820,
-    83461, 0, 0, 0, 0, 0, 0, 0, 0, 68801, 0, 101062, 101061, 101064, 101063,
-    0, 8637, 70741, 0, 77983, 77969, 11471, 43554, 0, 77968, 0, 0, 0, 2426,
-    12042, 0, 0, 0, 3961, 12115, 129633, 0, 77972, 64561, 0, 4981, 74644,
-    129558, 0, 0, 42686, 77976, 128776, 64686, 0, 77958, 7589, 0, 0, 3237, 0,
-    68215, 0, 8541, 127157, 71067, 0, 0, 0, 0, 0, 0, 43555, 0, 0, 10060,
-    111261, 100917, 0, 0, 0, 64877, 0, 0, 8614, 65220, 41493, 0, 0, 0, 43780,
-    0, 0, 70689, 0, 0, 0, 0, 0, 0, 4012, 10395, 0, 0, 111253, 126511, 111254,
-    125051, 695, 739, 696, 7611, 0, 42755, 68421, 9227, 7506, 7510, 69937,
-    691, 738, 7511, 7512, 7515, 7501, 688, 41847, 690, 2548, 737, 974, 43386,
-    0, 0, 0, 0, 0, 0, 65860, 0, 7051, 69777, 4682, 0, 983096, 6406, 4685, 0,
-    0, 10347, 4680, 6341, 0, 0, 92607, 74325, 0, 0, 0, 0, 0, 0, 0, 0, 43505,
-    92468, 11718, 42373, 11714, 0, 0, 129567, 11717, 0, 10594, 0, 11712, 0,
-    0, 10967, 0, 0, 0, 66632, 0, 0, 0, 0, 1735, 0, 11134, 2363, 983135, 0, 0,
-    70695, 128032, 0, 7491, 7495, 7580, 7496, 7497, 7584, 121478, 127853, 0,
-    0, 128375, 0, 8498, 0, 8949, 3065, 0, 0, 0, 0, 0, 0, 11713, 0, 64939, 0,
-    6418, 4543, 0, 0, 0, 74800, 0, 0, 0, 0, 0, 0, 0, 12282, 0, 0, 0, 64556,
-    0, 9238, 0, 68063, 0, 0, 0, 65438, 0, 128525, 0, 119268, 0, 0, 12900, 0,
-    10950, 0, 0, 0, 41400, 126636, 119664, 0, 42232, 0, 1744, 0, 41402, 0, 0,
-    0, 41399, 0, 125028, 0, 0, 12690, 0, 0, 43672, 0, 0, 0, 100870, 11315, 0,
-    278, 121204, 41405, 129345, 0, 10077, 129650, 70667, 0, 0, 0, 68210, 0,
-    0, 11189, 70657, 0, 0, 0, 7934, 0, 93829, 120940, 0, 0, 0, 0, 0, 0, 6413,
-    6550, 0, 1940, 2809, 43637, 70045, 0, 0, 10678, 0, 0, 0, 0, 78804, 6403,
-    6556, 78803, 0, 0, 0, 0, 0, 0, 0, 0, 3742, 74408, 3959, 0, 0, 917969, 0,
-    0, 128024, 0, 0, 127956, 0, 0, 0, 0, 4676, 983049, 9210, 0, 78143,
-    983903, 0, 78168, 983100, 11540, 43546, 6692, 0, 0, 0, 0, 9083, 0, 0,
-    78144, 128515, 0, 9677, 0, 70867, 74175, 0, 74070, 0, 0, 365, 0, 43027,
-    0, 0, 128236, 0, 119574, 70284, 13151, 0, 0, 127935, 127950, 544, 13249,
+    0, 10862, 0, 0, 41416, 0, 4173, 0, 0, 0, 1906, 983835, 41418, 74073,
+    101068, 101067, 41415, 69622, 9582, 0, 64287, 0, 0, 11428, 1730, 0, 0,
+    19918, 10469, 101076, 101079, 68088, 0, 101080, 72342, 0, 129692, 0,
+    6129, 0, 0, 0, 0, 7874, 0, 0, 11206, 13136, 0, 129305, 0, 64374, 74925,
+    0, 73892, 0, 101073, 101072, 101075, 74960, 9228, 101054, 101057, 101056,
+    5240, 9811, 0, 101060, 129718, 0, 0, 74079, 65873, 0, 0, 0, 9501, 0,
+    68081, 72808, 65465, 64654, 7467, 0, 0, 83460, 10040, 0, 3096, 0, 101053,
+    101052, 68820, 83461, 0, 0, 0, 0, 0, 0, 83377, 0, 68801, 0, 101062,
+    101061, 101064, 101063, 0, 8637, 70741, 0, 77983, 77969, 11471, 43554, 0,
+    77968, 0, 0, 0, 2426, 12042, 0, 0, 0, 3961, 12115, 129633, 0, 77972,
+    64561, 0, 4981, 74644, 129558, 0, 0, 42686, 77976, 128776, 64686, 0,
+    77958, 7589, 0, 0, 3237, 0, 68215, 0, 8541, 127157, 71067, 120174, 0, 0,
+    0, 0, 0, 43555, 0, 0, 10060, 111261, 100917, 0, 0, 0, 64877, 0, 0, 8614,
+    65220, 41493, 0, 0, 0, 43780, 0, 0, 70689, 0, 0, 0, 0, 0, 0, 4012, 10395,
+    0, 0, 111253, 126511, 111254, 125051, 695, 739, 696, 7611, 0, 42755,
+    68421, 9227, 7506, 7510, 69937, 691, 738, 7511, 7512, 7515, 7501, 688,
+    41847, 690, 2548, 737, 974, 43386, 0, 0, 0, 0, 0, 0, 65860, 0, 7051,
+    69777, 4682, 0, 983096, 6406, 4685, 0, 0, 10347, 4680, 6341, 0, 0, 92607,
+    74325, 0, 0, 0, 0, 0, 0, 0, 0, 43505, 92468, 11718, 42373, 11714, 0, 0,
+    129567, 11717, 0, 10594, 0, 11712, 0, 0, 10967, 0, 0, 0, 66632, 0, 0, 0,
+    0, 1735, 0, 11134, 2363, 983135, 0, 0, 70695, 128032, 0, 7491, 7495,
+    7580, 7496, 7497, 7584, 121478, 127853, 0, 0, 70025, 0, 8498, 0, 8949,
+    3065, 0, 0, 0, 0, 0, 0, 11713, 0, 64939, 0, 6418, 4543, 0, 0, 0, 74800,
+    0, 0, 0, 0, 0, 0, 0, 12282, 0, 0, 0, 64556, 0, 9238, 0, 68063, 0, 0, 0,
+    65438, 0, 128525, 0, 119268, 0, 0, 12900, 0, 10950, 0, 0, 0, 41400,
+    126636, 119664, 0, 42232, 0, 1744, 0, 41402, 0, 0, 0, 41399, 0, 125028,
+    0, 0, 12690, 0, 0, 43672, 0, 0, 0, 100870, 11315, 0, 278, 121204, 41405,
+    129345, 0, 10077, 129650, 70667, 0, 0, 0, 68210, 0, 0, 11189, 70657, 0,
+    0, 0, 7934, 0, 93829, 120940, 0, 0, 0, 0, 0, 0, 6413, 6550, 0, 1940,
+    2809, 43637, 70045, 0, 0, 10678, 0, 0, 0, 129701, 78804, 6403, 6556,
+    78803, 0, 0, 0, 0, 0, 0, 0, 0, 3742, 74408, 3959, 0, 0, 917969, 0, 0,
+    128024, 0, 0, 127956, 0, 0, 0, 0, 4676, 983049, 9210, 0, 78143, 983903,
+    0, 78168, 983100, 11540, 43546, 6692, 0, 0, 0, 0, 9083, 0, 0, 78144,
+    128515, 0, 9677, 0, 70867, 74175, 0, 74070, 0, 0, 365, 0, 43027, 0, 0,
+    128236, 0, 119574, 70284, 13151, 0, 0, 127935, 127950, 544, 13249,
     119018, 0, 120846, 0, 0, 73671, 65339, 73000, 2211, 0, 0, 0, 0, 0, 0, 0,
     0, 128037, 0, 0, 0, 0, 0, 0, 0, 127188, 0, 69708, 9638, 0, 100878, 0, 0,
     0, 74545, 128820, 128819, 75062, 128963, 0, 0, 0, 11264, 43994, 0, 0, 0,
     1311, 0, 0, 0, 0, 13068, 0, 0, 78164, 78155, 0, 949, 0, 0, 0, 78176,
-    69709, 78177, 63828, 0, 0, 0, 70282, 0, 0, 0, 64822, 0, 6530, 0, 0,
+    69709, 78177, 63828, 0, 0, 0, 70282, 0, 0, 0, 64822, 0, 6530, 983270, 0,
     70493, 0, 129325, 0, 0, 4431, 118839, 127490, 983741, 73667, 127986, 0,
     10336, 10400, 0, 0, 92959, 0, 0, 0, 42270, 128880, 6428, 0, 0, 0, 0,
     43455, 0, 43526, 100888, 12835, 129501, 9493, 0, 0, 11793, 0, 127897,
     74394, 0, 10653, 0, 0, 0, 0, 6560, 7016, 74274, 983627, 43556, 3929,
-    123615, 6614, 2768, 0, 65609, 0, 11811, 0, 0, 0, 127513, 0, 6554, 0,
+    123615, 6614, 2768, 0, 65609, 0, 11811, 129696, 0, 0, 127513, 0, 6554, 0,
     6305, 66283, 4675, 118826, 78552, 0, 0, 74361, 0, 0, 68108, 0, 0, 92232,
     0, 93022, 7392, 8230, 9365, 983723, 0, 0, 0, 0, 42925, 0, 0, 0, 0, 229,
     43834, 119884, 0, 43552, 119881, 119880, 119883, 119882, 119877, 119876,
@@ -26361,123 +27212,123 @@
     0, 0, 128663, 0, 12239, 0, 0, 10432, 12097, 0, 194815, 1233, 0, 0,
     127200, 0, 66395, 0, 0, 129504, 0, 0, 0, 0, 2388, 92555, 119868, 119871,
     119870, 119865, 895, 92668, 119866, 64889, 7143, 119863, 119862, 0, 0,
-    69983, 0, 74376, 3053, 0, 0, 2047, 0, 0, 0, 121279, 67985, 194801, 92600,
-    194803, 194802, 194805, 194804, 194807, 194806, 129134, 194808, 0, 0, 0,
-    10473, 129331, 0, 194810, 0, 194812, 194811, 194814, 194813, 123195,
-    43528, 69673, 194791, 0, 194793, 1912, 120779, 10306, 10370, 0, 0, 8867,
-    10250, 10258, 10274, 1635, 120152, 0, 0, 0, 129379, 0, 0, 9919, 120148,
-    559, 128157, 41825, 127975, 92989, 0, 74016, 194781, 6542, 41957, 7318,
-    0, 0, 41956, 65749, 65750, 65751, 121323, 64487, 0, 0, 10223, 42062,
-    100640, 0, 125044, 3668, 65754, 43560, 12226, 0, 93973, 194784, 41959,
-    194786, 194785, 194788, 43618, 65747, 10937, 2962, 0, 2953, 10062, 65745,
-    71457, 8921, 66013, 129370, 0, 194769, 194768, 43409, 194770, 2949,
-    194772, 194775, 194774, 2958, 194776, 74868, 2300, 2951, 120061, 0,
-    120043, 194778, 0, 120051, 194779, 120056, 120065, 70798, 120048, 0,
-    120062, 120055, 78178, 100668, 0, 0, 92269, 0, 0, 70796, 127818, 0, 0,
-    64890, 0, 43630, 11336, 799, 0, 10276, 10308, 10372, 917541, 0, 0, 10252,
-    10260, 68220, 55284, 0, 0, 10384, 0, 0, 0, 64523, 0, 0, 65736, 0, 0, 0,
-    0, 0, 0, 0, 0, 43549, 65738, 42150, 65739, 0, 78195, 10288, 10320, 0,
-    10596, 0, 67673, 65045, 121283, 78198, 2049, 10098, 0, 122904, 127943,
-    10264, 10280, 10312, 10376, 7013, 0, 0, 0, 0, 66375, 0, 4862, 0, 6537, 0,
-    128335, 3914, 92178, 93976, 9065, 64816, 0, 72218, 73026, 0, 0, 72139,
-    4694, 11420, 4690, 0, 0, 983209, 4693, 0, 0, 0, 4688, 0, 0, 0, 0, 8238,
-    3110, 0, 983920, 0, 6528, 0, 0, 0, 218, 0, 1520, 129577, 70039, 0,
-    983594, 0, 0, 78167, 10088, 6548, 100786, 0, 0, 0, 8888, 0, 124954, 0, 0,
-    126593, 68876, 0, 0, 0, 0, 0, 0, 0, 4689, 43541, 77954, 120157, 0,
-    120156, 78810, 120163, 0, 0, 0, 0, 78121, 0, 0, 11450, 0, 71900, 92613,
-    0, 121317, 74622, 128720, 9244, 0, 0, 127763, 0, 0, 0, 0, 0, 0, 71084, 0,
-    0, 0, 0, 10513, 0, 0, 0, 52, 119178, 0, 0, 93961, 0, 0, 4812, 0, 0, 0, 0,
-    0, 0, 128425, 0, 120453, 0, 77959, 10170, 120450, 6544, 0, 0, 69782,
-    121517, 0, 0, 65258, 10369, 0, 1585, 74014, 10249, 422, 1500, 2036, 986,
-    0, 64394, 0, 5599, 917981, 2494, 0, 0, 74021, 983877, 78203, 127808, 0,
-    72871, 65102, 8961, 74305, 10243, 10245, 128170, 0, 0, 0, 0, 0, 2508,
-    129591, 120440, 0, 120439, 0, 0, 0, 0, 0, 0, 64533, 983186, 0, 0, 74008,
-    0, 0, 43375, 0, 2504, 0, 121313, 0, 983922, 6943, 0, 5859, 100677, 0, 0,
-    72873, 983926, 0, 0, 983904, 92390, 2753, 1936, 2153, 67701, 2751, 12662,
-    2763, 8953, 0, 10731, 0, 7052, 0, 0, 0, 0, 119899, 0, 66675, 0, 119897,
-    0, 71053, 0, 119903, 0, 67829, 7899, 119901, 71119, 43798, 7072, 119902,
-    122898, 11260, 0, 71059, 0, 0, 212, 0, 12350, 0, 0, 0, 0, 0, 128402,
-    2759, 0, 0, 93064, 0, 0, 0, 1291, 0, 0, 121318, 119911, 0, 119910, 0,
-    12062, 0, 121216, 0, 0, 121044, 120611, 8246, 0, 0, 0, 0, 0, 0, 73962, 0,
-    0, 43524, 0, 64426, 0, 0, 0, 0, 65664, 6693, 0, 0, 8674, 0, 128812, 0,
-    11846, 70690, 121461, 69395, 4811, 0, 5986, 0, 3046, 74480, 5985, 0, 0,
-    0, 0, 12187, 83148, 71041, 5984, 0, 93817, 4393, 126264, 120206, 917599,
-    0, 0, 0, 93806, 93805, 0, 3491, 0, 67146, 0, 93819, 0, 72428, 0, 0, 0,
-    124968, 41284, 126228, 0, 0, 41287, 0, 100689, 0, 0, 92189, 0, 0, 219,
-    120874, 0, 0, 0, 68485, 119672, 43241, 0, 7147, 0, 0, 0, 0, 0, 0, 64610,
-    11804, 0, 7149, 64808, 0, 0, 0, 92301, 73690, 0, 5253, 0, 0, 0, 0,
-    129045, 983596, 11098, 68433, 0, 120484, 111009, 0, 0, 0, 0, 0, 70801,
-    100779, 0, 128198, 9604, 0, 0, 0, 0, 118941, 64392, 0, 0, 0, 0, 41974,
-    126262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983239, 5308, 0, 290, 0, 125278,
-    128382, 2792, 0, 0, 120521, 0, 126237, 0, 126099, 0, 0, 0, 0, 128503, 0,
-    0, 72816, 0, 0, 0, 92671, 0, 0, 42646, 7606, 2591, 73896, 0, 43513,
-    64482, 0, 0, 65270, 0, 0, 983682, 9112, 0, 113763, 9490, 0, 0, 0, 0, 0,
-    9071, 0, 0, 0, 0, 74607, 0, 2535, 65504, 43602, 0, 0, 71256, 0, 0,
-    123147, 11845, 11006, 92315, 7807, 8073, 0, 10629, 0, 74088, 0, 10823, 0,
-    113762, 8762, 0, 69689, 0, 43969, 65047, 10737, 3463, 72858, 129585,
-    66645, 0, 4815, 0, 0, 12345, 983742, 0, 5195, 0, 0, 66639, 0, 0, 127316,
-    0, 92759, 92385, 1262, 0, 6561, 19939, 0, 0, 100772, 123160, 0, 0,
-    100774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5702, 3655, 0, 8430, 0,
-    68807, 0, 0, 121137, 0, 0, 5254, 0, 0, 0, 0, 119107, 5129, 0, 70816, 0,
-    92280, 5614, 0, 0, 11720, 0, 11721, 70804, 4798, 0, 120541, 66038, 4793,
-    67851, 7352, 0, 0, 0, 0, 917600, 0, 300, 0, 0, 128575, 92660, 0, 0, 2562,
-    70156, 120856, 0, 0, 92738, 0, 0, 127820, 71093, 0, 127969, 128221, 0,
-    3424, 93843, 0, 0, 7074, 70873, 917926, 0, 0, 10832, 0, 0, 69852, 72430,
-    0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 1215, 0, 5744, 0, 66440, 0, 0, 0,
-    42881, 0, 8980, 118988, 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 70821,
-    9312, 4348, 0, 128401, 65946, 0, 7087, 5255, 0, 661, 0, 0, 0, 0, 0, 0, 0,
-    129073, 73694, 0, 123154, 0, 73688, 0, 127179, 3621, 83325, 66666, 72968,
-    0, 6562, 12928, 0, 73991, 0, 0, 11383, 0, 0, 65588, 120739, 0, 0, 0, 0,
-    0, 0, 0, 0, 11436, 2070, 64, 110824, 0, 10291, 10323, 10387, 0, 0, 0,
-    42008, 9708, 42710, 0, 42011, 0, 92164, 0, 0, 1702, 1240, 128383, 6286,
-    9689, 111080, 0, 0, 0, 1765, 0, 0, 92373, 0, 0, 0, 8401, 72991, 42014, 0,
-    67237, 0, 0, 0, 0, 0, 0, 0, 70819, 0, 0, 0, 0, 12667, 0, 0, 10147, 0,
-    127568, 126483, 72812, 0, 0, 0, 0, 123139, 128968, 0, 64947, 0, 0, 0, 0,
-    10435, 11462, 0, 7084, 0, 0, 0, 0, 0, 126084, 0, 66662, 0, 0, 0, 0,
-    125134, 0, 0, 77990, 263, 983728, 41288, 0, 0, 78387, 74340, 70313,
-    129140, 0, 0, 0, 42022, 71265, 0, 0, 0, 0, 0, 0, 42020, 123146, 0, 6992,
-    42019, 0, 41290, 0, 12295, 126233, 71304, 0, 0, 71300, 120631, 5954,
-    64931, 69385, 100699, 198, 68453, 78129, 0, 121351, 0, 70818, 13165,
-    7107, 0, 42804, 678, 72850, 118960, 0, 72985, 42806, 42808, 0, 0, 2097,
-    0, 120560, 70823, 0, 0, 3892, 68632, 0, 6712, 917959, 0, 0, 0, 0, 123158,
-    69954, 0, 497, 12100, 5953, 92667, 7796, 0, 43254, 0, 0, 11072, 5952,
-    1281, 43747, 0, 69380, 10677, 0, 0, 0, 1859, 0, 72856, 3425, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 65199, 1738, 0, 122911, 0, 0, 0, 11101, 0, 0, 0, 0,
-    127002, 69651, 4436, 194683, 73984, 0, 70305, 64872, 128296, 0, 0, 0,
-    121377, 0, 0, 0, 43686, 983108, 0, 119109, 0, 70826, 319, 0, 43479,
-    73001, 0, 0, 12849, 0, 7640, 71083, 9673, 0, 0, 0, 92670, 0, 92665,
-    113717, 41422, 0, 100708, 74941, 3772, 0, 120660, 5011, 0, 0, 126587,
-    111315, 0, 0, 6677, 111312, 0, 41427, 64419, 129445, 92262, 0, 70799, 0,
-    0, 0, 6106, 0, 41271, 6760, 983739, 4534, 41270, 128876, 0, 0, 119561, 0,
-    0, 3671, 8976, 123177, 0, 41275, 0, 128084, 55261, 0, 42013, 0, 568, 0,
-    41273, 0, 0, 6728, 0, 9715, 0, 0, 121058, 74820, 0, 92268, 0, 194564,
-    11191, 43688, 128023, 0, 0, 0, 126266, 0, 0, 0, 11958, 11165, 0, 125087,
-    0, 0, 66336, 127944, 0, 0, 0, 0, 42858, 11789, 72878, 5557, 0, 69444,
-    7300, 0, 9467, 5558, 64486, 43844, 0, 0, 6706, 10146, 0, 127185, 64566,
-    0, 0, 0, 0, 0, 0, 0, 4546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64528, 123136,
-    6307, 128966, 0, 7544, 0, 43469, 111317, 0, 10152, 0, 65091, 0, 0, 0, 0,
-    66652, 0, 0, 0, 0, 64823, 5559, 0, 70711, 6702, 5556, 0, 0, 0, 0, 0,
-    11166, 0, 0, 5506, 0, 1911, 73021, 0, 12598, 8845, 66698, 0, 73012,
-    123145, 0, 2098, 0, 0, 0, 66622, 194678, 0, 0, 0, 9898, 0, 0, 7552, 0, 0,
-    0, 7223, 65723, 0, 0, 0, 7024, 65728, 127155, 1210, 0, 65175, 10184,
-    65726, 43654, 0, 0, 0, 38, 65729, 66669, 0, 0, 0, 0, 0, 0, 0, 0, 74233,
-    73018, 119843, 42860, 111301, 92576, 65721, 65722, 0, 0, 0, 0, 68843, 0,
-    68850, 0, 92388, 92267, 128536, 65577, 92213, 0, 127518, 11650, 5013,
-    92663, 68810, 92568, 118914, 6613, 74371, 0, 0, 0, 0, 64714, 71479, 0,
-    983778, 12120, 0, 0, 43124, 0, 0, 78037, 0, 0, 126219, 0, 0, 1837,
+    69983, 0, 74376, 3053, 129829, 0, 2047, 0, 0, 0, 121279, 67985, 194801,
+    92600, 194803, 194802, 194805, 194804, 194807, 194806, 129134, 194808, 0,
+    0, 0, 10473, 129331, 0, 194810, 129806, 194812, 129813, 194814, 194813,
+    123195, 43528, 69673, 194791, 0, 194793, 1912, 120779, 10306, 10370, 0,
+    0, 8867, 10250, 10258, 10274, 1635, 120152, 0, 0, 0, 129379, 0, 0, 9919,
+    120148, 559, 128157, 41825, 127975, 92989, 0, 74016, 194781, 6542, 41957,
+    7318, 0, 0, 41956, 65749, 65750, 65751, 121323, 64487, 0, 0, 10223,
+    42062, 100640, 101195, 125044, 3668, 65754, 43560, 12226, 0, 93973,
+    194784, 41959, 194786, 194785, 194788, 43618, 65747, 10937, 2962, 0,
+    2953, 10062, 65745, 71457, 8921, 66013, 129370, 0, 194769, 194768, 43409,
+    194770, 2949, 194772, 194775, 194774, 2958, 194776, 74868, 2300, 2951,
+    120061, 0, 120043, 194778, 0, 120051, 194779, 120056, 120065, 70798,
+    120048, 0, 120062, 120055, 71989, 100668, 0, 0, 71985, 0, 71992, 70796,
+    127818, 0, 0, 64890, 0, 43630, 11336, 799, 0, 10276, 10308, 10372,
+    917541, 0, 0, 10252, 10260, 68220, 55284, 0, 0, 10384, 0, 0, 0, 64523,
+    129744, 0, 65736, 0, 0, 0, 0, 0, 0, 0, 0, 43549, 65738, 42150, 65739, 0,
+    78195, 10288, 10320, 0, 10596, 0, 67673, 65045, 121283, 78198, 2049,
+    10098, 0, 122904, 127943, 10264, 10280, 10312, 10376, 7013, 0, 0, 0, 0,
+    66375, 0, 4862, 0, 6537, 0, 128335, 3914, 92178, 93976, 9065, 64816, 0,
+    72218, 73026, 0, 0, 72139, 4694, 11420, 4690, 0, 0, 983209, 4693, 0, 0,
+    0, 4688, 0, 0, 0, 0, 8238, 3110, 0, 983920, 0, 6528, 0, 0, 0, 218, 0,
+    1520, 129577, 70039, 0, 983594, 0, 0, 78167, 10088, 6548, 100786, 0, 0,
+    0, 8888, 0, 124954, 0, 0, 126593, 68876, 0, 0, 0, 0, 0, 0, 0, 4689,
+    43541, 77954, 120157, 0, 120156, 78810, 120163, 0, 0, 0, 0, 78121, 0, 0,
+    11450, 0, 71900, 92613, 0, 121317, 74622, 128720, 9244, 0, 0, 127763, 0,
+    0, 0, 0, 0, 0, 71084, 0, 0, 0, 0, 10513, 0, 0, 0, 52, 119178, 0, 0,
+    93961, 0, 0, 4812, 0, 0, 0, 0, 0, 0, 128425, 0, 120453, 0, 77959, 10170,
+    120450, 6544, 0, 0, 69782, 121517, 0, 0, 65258, 10369, 0, 1585, 74014,
+    10249, 422, 1500, 2036, 986, 0, 64394, 0, 5599, 917981, 2494, 0, 0,
+    74021, 983877, 78203, 127808, 0, 72871, 65102, 8961, 74305, 10243, 10245,
+    128170, 0, 0, 0, 0, 0, 2508, 129591, 120440, 0, 120439, 0, 0, 0, 0, 0, 0,
+    64533, 983186, 0, 0, 74008, 0, 0, 43375, 0, 2504, 0, 121313, 0, 983922,
+    6943, 0, 5859, 100677, 0, 0, 72873, 983926, 0, 0, 983904, 92390, 2753,
+    1936, 2153, 67701, 2751, 12662, 2763, 8953, 0, 10731, 0, 7052, 0, 0, 0,
+    0, 119899, 0, 66675, 0, 119897, 0, 71053, 0, 119903, 0, 67829, 7899,
+    119901, 71119, 43798, 7072, 119902, 122898, 11260, 0, 71059, 0, 0, 212,
+    0, 12350, 0, 0, 0, 0, 0, 128402, 2759, 0, 0, 93064, 0, 0, 0, 1291, 0, 0,
+    121318, 119911, 0, 119910, 0, 12062, 0, 121216, 0, 0, 121044, 120611,
+    8246, 128874, 0, 0, 0, 0, 0, 73962, 0, 0, 43524, 0, 64426, 0, 0, 0, 0,
+    65664, 6693, 0, 0, 8674, 0, 128812, 0, 11846, 70690, 121461, 69395, 4811,
+    0, 5986, 0, 3046, 74480, 5985, 0, 0, 0, 0, 12187, 83148, 71041, 5984, 0,
+    93817, 4393, 126264, 120206, 917599, 0, 0, 0, 93806, 93805, 0, 3491, 0,
+    67146, 0, 93819, 0, 72428, 0, 0, 0, 124968, 41284, 126228, 0, 0, 41287,
+    0, 100689, 0, 0, 92189, 0, 0, 219, 120874, 0, 0, 0, 68485, 119672, 43241,
+    0, 7147, 0, 0, 0, 0, 0, 0, 64610, 11804, 0, 7149, 64808, 0, 0, 0, 92301,
+    73690, 0, 5253, 0, 0, 0, 0, 129045, 983596, 11098, 68433, 0, 120484,
+    111009, 0, 0, 0, 0, 0, 70801, 100779, 0, 128198, 9604, 0, 130036, 0, 0,
+    118941, 64392, 0, 0, 0, 0, 41974, 126262, 0, 0, 0, 129818, 0, 129833, 0,
+    0, 0, 0, 0, 983239, 5308, 0, 290, 0, 125278, 128382, 2792, 0, 0, 120521,
+    0, 126237, 0, 126099, 0, 0, 0, 0, 128503, 0, 0, 72816, 0, 0, 0, 92671, 0,
+    0, 42646, 7606, 2591, 73896, 0, 43513, 64482, 0, 0, 65270, 0, 0, 983682,
+    9112, 0, 113763, 9490, 0, 0, 0, 0, 0, 9071, 0, 0, 0, 0, 74607, 0, 2535,
+    65504, 43602, 0, 0, 71256, 0, 0, 123147, 11845, 11006, 92315, 7807, 8073,
+    0, 10629, 0, 74088, 0, 10823, 0, 113762, 8762, 0, 69689, 0, 43969, 65047,
+    10737, 3463, 72858, 129585, 66645, 0, 4815, 0, 0, 12345, 983742, 0, 5195,
+    0, 0, 66639, 0, 0, 127316, 0, 92759, 92385, 1262, 0, 6561, 19939, 0, 0,
+    100772, 123160, 69269, 0, 100774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5702, 3655, 0, 8430, 0, 68807, 0, 0, 121137, 0, 0, 5254, 0, 0, 0, 0,
+    119107, 5129, 0, 70816, 0, 92280, 5614, 0, 0, 11720, 0, 11721, 70804,
+    4798, 0, 120541, 66038, 4793, 67851, 7352, 0, 0, 0, 0, 917600, 0, 300, 0,
+    0, 128575, 92660, 0, 0, 2562, 70156, 120856, 0, 0, 92738, 0, 0, 127820,
+    71093, 0, 127969, 128221, 0, 3424, 93843, 0, 0, 7074, 70873, 917926, 0,
+    0, 10832, 0, 0, 69852, 72430, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 1215, 0,
+    5744, 0, 66440, 0, 0, 0, 42881, 0, 8980, 118988, 67861, 8844, 7433, 0, 0,
+    4278, 0, 0, 0, 70821, 9312, 4348, 0, 128401, 65946, 0, 7087, 5255, 0,
+    661, 0, 0, 0, 0, 0, 0, 0, 121009, 73694, 0, 123154, 0, 73688, 0, 127179,
+    3621, 83325, 66666, 72968, 0, 6562, 12928, 0, 73991, 0, 0, 11383, 0, 0,
+    65588, 120739, 0, 0, 0, 0, 0, 0, 0, 0, 11436, 2070, 64, 110824, 0, 10291,
+    10323, 10387, 0, 0, 0, 42008, 9708, 42710, 0, 42011, 0, 92164, 0, 0,
+    1702, 1240, 128383, 6286, 9689, 111080, 0, 0, 0, 1765, 0, 0, 92373, 0, 0,
+    0, 8401, 72991, 42014, 0, 67237, 0, 0, 0, 0, 0, 0, 0, 70819, 0, 0, 0, 0,
+    12667, 0, 0, 10147, 0, 127568, 126483, 72812, 0, 0, 0, 0, 123139, 128968,
+    0, 64947, 0, 0, 0, 0, 10435, 11462, 0, 7084, 0, 0, 0, 0, 0, 126084, 0,
+    66662, 0, 0, 0, 0, 125134, 0, 0, 77990, 263, 983728, 41288, 127953, 0,
+    78387, 74340, 70313, 129140, 0, 0, 0, 42022, 71265, 0, 0, 0, 0, 0, 0,
+    42020, 123146, 0, 6992, 42019, 0, 41290, 0, 12295, 126233, 71304, 0,
+    120984, 71300, 120631, 5954, 64931, 69385, 100699, 198, 68453, 78129, 0,
+    121351, 0, 70818, 13165, 7107, 0, 42804, 678, 72850, 118960, 0, 72985,
+    42806, 42808, 0, 0, 2097, 0, 120560, 70823, 0, 0, 3892, 68632, 0, 6712,
+    917959, 0, 0, 0, 0, 123158, 69954, 0, 497, 12100, 5953, 92667, 7796, 0,
+    43254, 0, 0, 11072, 5952, 1281, 43747, 0, 69380, 10677, 0, 0, 0, 1859, 0,
+    72856, 3425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65199, 1738, 0, 122911, 0, 0,
+    0, 11101, 0, 0, 0, 0, 127002, 69651, 4436, 194683, 73984, 0, 70305,
+    64872, 128296, 0, 0, 0, 121377, 0, 0, 0, 43686, 983108, 0, 119109, 0,
+    70826, 319, 0, 43479, 73001, 0, 0, 12849, 0, 7640, 71083, 9673, 0, 0, 0,
+    92670, 0, 92665, 113717, 41422, 0, 100708, 74941, 3772, 0, 120660, 5011,
+    0, 0, 126587, 111315, 0, 0, 6677, 111312, 0, 41427, 64419, 129445, 92262,
+    0, 70799, 0, 0, 0, 6106, 0, 41271, 6760, 983739, 4534, 41270, 128876, 0,
+    0, 119561, 0, 0, 3671, 8976, 123177, 0, 41275, 0, 128084, 55261, 0,
+    42013, 0, 568, 0, 41273, 0, 0, 6728, 0, 9715, 0, 0, 121058, 74820, 0,
+    92268, 0, 194564, 11191, 43688, 128023, 0, 0, 0, 126266, 0, 0, 0, 11958,
+    11165, 0, 125087, 0, 0, 66336, 127944, 0, 0, 0, 0, 42858, 11789, 72878,
+    5557, 0, 69444, 7300, 0, 9467, 5558, 64486, 43844, 0, 0, 6706, 10146, 0,
+    127185, 64566, 0, 0, 0, 0, 0, 0, 0, 4546, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    64528, 123136, 6307, 128966, 0, 7544, 0, 43469, 111317, 0, 10152, 0,
+    65091, 0, 0, 0, 0, 66652, 0, 0, 0, 0, 64823, 5559, 0, 70711, 6702, 5556,
+    0, 0, 0, 0, 0, 11166, 0, 0, 5506, 0, 1911, 73021, 0, 12598, 8845, 66698,
+    0, 73012, 123145, 0, 2098, 0, 0, 0, 66622, 194678, 0, 0, 0, 9898, 0, 0,
+    7552, 0, 0, 0, 7223, 65723, 0, 0, 0, 7024, 65728, 127155, 1210, 0, 65175,
+    10184, 65726, 43654, 0, 0, 0, 38, 65729, 66669, 0, 0, 0, 0, 0, 0, 0, 0,
+    74233, 73018, 119843, 42860, 111301, 92576, 65721, 65722, 0, 0, 0, 0,
+    68843, 0, 68850, 0, 92388, 92267, 128536, 65577, 92213, 0, 127518, 11650,
+    5013, 92663, 68810, 92568, 118914, 6613, 74371, 0, 0, 0, 0, 64714, 71479,
+    0, 983778, 12120, 0, 0, 43124, 0, 0, 78037, 69263, 0, 126219, 0, 0, 1837,
     125086, 0, 0, 0, 127210, 4952, 65718, 64405, 5504, 65720, 65714, 65715,
-    65716, 10403, 127005, 0, 41449, 0, 74028, 127213, 0, 119234, 1127, 455,
-    0, 0, 72860, 3483, 0, 1989, 0, 69678, 9104, 0, 65375, 0, 0, 0, 1864, 0,
+    65716, 10403, 127005, 0, 41449, 0, 74028, 72019, 0, 119234, 1127, 455, 0,
+    0, 72860, 3483, 0, 1989, 0, 69678, 9104, 0, 65375, 0, 0, 0, 1864, 0,
     72810, 8107, 2540, 0, 0, 11257, 128807, 119576, 0, 120999, 0, 0, 8604, 0,
-    0, 0, 0, 128270, 0, 0, 3115, 0, 10106, 127862, 118842, 0, 0, 9631, 0, 0,
-    0, 0, 0, 0, 0, 258, 129079, 0, 0, 0, 92292, 0, 70699, 0, 11478, 0,
+    0, 0, 0, 128270, 0, 0, 3115, 0, 10106, 127862, 118842, 101136, 0, 9631,
+    0, 0, 0, 0, 0, 0, 0, 258, 129079, 0, 0, 0, 92292, 0, 70699, 0, 11478, 0,
     129640, 11522, 0, 8549, 0, 128430, 0, 0, 0, 0, 0, 0, 123140, 0, 0, 0,
     9221, 12590, 73048, 0, 0, 0, 67741, 111294, 12619, 0, 10154, 111266,
     74439, 2039, 0, 7446, 0, 111276, 10974, 458, 72831, 0, 0, 0, 11916, 0, 0,
     69671, 0, 121057, 12288, 0, 111288, 0, 111289, 983176, 0, 128199, 13080,
     0, 67828, 6610, 6030, 8059, 7508, 123170, 0, 0, 0, 0, 41278, 129393, 0,
-    128192, 41277, 64658, 983983, 0, 6625, 983159, 19904, 0, 0, 0, 0, 0, 0,
-    833, 0, 6369, 0, 0, 42664, 0, 0, 0, 0, 0, 0, 6913, 933, 1341, 68828,
+    128192, 41277, 64658, 983983, 101278, 6625, 983159, 19904, 0, 0, 0, 0, 0,
+    0, 833, 0, 6369, 0, 0, 42664, 0, 0, 0, 0, 0, 0, 6913, 933, 1341, 68828,
     6720, 0, 0, 983604, 0, 0, 7405, 128025, 0, 0, 0, 0, 0, 0, 0, 70704, 0, 0,
     0, 0, 9716, 0, 0, 0, 70719, 0, 0, 0, 0, 72862, 70687, 0, 93987, 0, 0, 0,
     70721, 9573, 0, 0, 111245, 83225, 83226, 6949, 126482, 74061, 83222,
@@ -26491,58 +27342,58 @@
     0, 0, 120809, 10599, 66892, 0, 0, 0, 0, 0, 0, 11437, 0, 0, 0, 0, 0, 0,
     12624, 0, 41185, 72865, 69439, 8159, 0, 11686, 71478, 65224, 0, 4655, 0,
     0, 92183, 0, 10343, 10407, 0, 0, 0, 111221, 0, 0, 0, 94057, 68201,
-    129574, 0, 983568, 72156, 42792, 5743, 10424, 0, 0, 0, 0, 0, 8875,
-    111225, 0, 917991, 13117, 12847, 4651, 118917, 0, 962, 0, 0, 64705,
-    42564, 0, 1582, 0, 5508, 0, 0, 0, 10801, 123602, 118798, 73705, 0, 66911,
-    10439, 66891, 0, 0, 7860, 0, 906, 917985, 0, 6405, 64722, 0, 83266,
-    64694, 83268, 917990, 1153, 83263, 64788, 83265, 0, 12626, 83260, 83261,
-    9964, 0, 0, 4642, 66574, 127886, 0, 0, 0, 0, 0, 9008, 100847, 0, 0, 0,
-    83248, 917976, 917993, 123173, 42842, 83244, 83245, 83247, 83239, 83240,
-    83241, 83242, 0, 11335, 92661, 83238, 3920, 0, 0, 0, 83255, 83256, 41967,
-    83258, 83251, 83252, 83253, 8920, 0, 0, 83249, 83250, 0, 0, 43919, 0, 0,
-    0, 0, 128021, 0, 68113, 65196, 0, 0, 128472, 0, 10111, 64875, 0, 83491,
-    43998, 83232, 83233, 83234, 70691, 83228, 42149, 83230, 68508, 0, 0, 0,
-    0, 0, 0, 0, 4110, 66005, 74034, 0, 0, 0, 66703, 0, 0, 983157, 6025,
-    69242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70733, 0, 983043, 0, 0, 0, 68817, 0, 0,
-    0, 0, 0, 0, 43286, 0, 68765, 0, 0, 0, 0, 983133, 65144, 0, 0, 83236,
-    65840, 0, 0, 10081, 0, 0, 983893, 0, 0, 0, 127394, 65882, 0, 128758, 0,
-    0, 3605, 10985, 0, 0, 128872, 93972, 1745, 0, 73835, 0, 0, 0, 0, 0, 0,
-    8806, 7023, 0, 0, 0, 70702, 70304, 0, 0, 0, 0, 0, 0, 0, 0, 348, 10089, 0,
-    9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42515, 0, 0, 0, 0, 5391, 983236, 0, 0,
-    0, 5561, 0, 9429, 0, 67150, 7933, 5562, 0, 0, 0, 0, 78039, 0, 0, 0, 0,
-    3979, 71248, 0, 0, 0, 68847, 0, 0, 118847, 65847, 68836, 68838, 0, 10585,
-    0, 92676, 7334, 0, 0, 0, 831, 0, 0, 10716, 0, 121325, 0, 12218, 0, 6939,
-    70697, 65042, 0, 0, 916, 0, 0, 11968, 0, 0, 5563, 0, 0, 128830, 5560,
-    41212, 41774, 0, 4497, 0, 0, 0, 9039, 70678, 41776, 0, 8716, 3567,
-    119252, 0, 0, 74260, 0, 93954, 0, 0, 100827, 0, 128879, 70072, 68355,
-    68357, 0, 0, 8634, 0, 0, 4209, 120702, 68832, 65879, 68825, 68819, 68822,
-    0, 5679, 68813, 68815, 68811, 68812, 64697, 5678, 11821, 68802, 93969, 0,
-    0, 0, 0, 70114, 0, 0, 0, 0, 0, 0, 0, 0, 7782, 0, 0, 0, 0, 0, 65711,
-    65712, 1216, 0, 69409, 5792, 0, 0, 0, 0, 0, 12244, 0, 5683, 0, 120895,
-    121336, 43448, 70670, 0, 0, 5682, 10242, 75043, 74520, 5680, 917568,
-    10001, 0, 0, 1449, 10241, 0, 70708, 0, 0, 83180, 83182, 83183, 8584,
-    83176, 5567, 83178, 83179, 0, 5564, 42886, 42884, 42882, 5565, 119022,
-    120881, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42873,
-    5942, 0, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647,
-    78702, 78703, 78690, 78700, 0, 65701, 1934, 0, 0, 0, 78710, 0, 78706,
-    78709, 6087, 78705, 78716, 78719, 78711, 8043, 8950, 65694, 64485, 0,
-    10457, 0, 78724, 78725, 78722, 72332, 78720, 78721, 0, 65515, 0, 10035,
-    13069, 0, 0, 127773, 0, 0, 0, 125207, 0, 0, 1667, 0, 0, 42428, 110950, 0,
-    0, 41750, 0, 0, 93999, 0, 8101, 3610, 113670, 41748, 110948, 0, 78394,
-    119208, 0, 0, 113691, 64549, 68359, 0, 0, 65692, 92701, 0, 0, 12896,
-    10456, 68298, 0, 0, 0, 0, 917962, 0, 0, 113665, 70502, 0, 65687, 0, 0,
-    74009, 0, 113673, 8536, 70671, 0, 78726, 0, 724, 0, 113675, 78749, 9975,
-    78746, 78747, 78744, 4175, 78741, 78743, 78751, 939, 0, 128799, 983119,
-    0, 0, 0, 78763, 78764, 78760, 78761, 78758, 78759, 78755, 8425, 0, 0, 0,
-    8188, 0, 0, 0, 0, 0, 6370, 0, 7827, 68441, 75008, 0, 917943, 0, 118863,
-    0, 0, 0, 0, 121243, 73988, 0, 113668, 0, 11012, 0, 43764, 178, 12972,
-    74620, 113671, 0, 113735, 0, 66764, 0, 0, 65690, 72339, 0, 0, 917950,
-    9252, 0, 4652, 74259, 0, 917947, 0, 0, 0, 10806, 0, 0, 70016, 0, 6723, 0,
-    0, 6993, 0, 0, 12855, 0, 0, 11390, 0, 0, 0, 92503, 0, 0, 983161, 125270,
-    92627, 8278, 0, 4034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12750, 9350, 66037, 0,
-    0, 73700, 12747, 0, 0, 128064, 43153, 74640, 0, 0, 43150, 0, 983090,
-    983088, 66779, 66777, 10813, 2592, 43139, 0, 0, 0, 0, 0, 71891, 0, 0, 0,
-    0, 0, 0, 0, 0, 128825, 1596, 0, 0, 0, 0, 6838, 66572, 0, 126574, 120627,
+    129574, 0, 983572, 72156, 42792, 5743, 10424, 0, 0, 0, 0, 0, 8875,
+    111225, 0, 917991, 13117, 12847, 4651, 118917, 0, 962, 0, 0, 2242, 42564,
+    0, 1582, 0, 5508, 0, 0, 0, 10801, 123602, 118798, 73705, 0, 66911, 10439,
+    66891, 0, 0, 7860, 0, 906, 917985, 0, 6405, 64722, 0, 83266, 64694,
+    83268, 917990, 1153, 83263, 64788, 83265, 0, 12626, 83260, 83261, 9964,
+    0, 0, 4642, 66574, 127886, 0, 0, 0, 0, 0, 9008, 100847, 0, 0, 0, 83248,
+    917976, 917993, 123173, 42842, 83244, 83245, 83247, 83239, 83240, 83241,
+    83242, 0, 11335, 92661, 83238, 3920, 0, 0, 0, 83255, 83256, 41967, 83258,
+    83251, 83252, 83253, 8920, 0, 0, 83249, 83250, 0, 0, 43919, 0, 0, 0, 0,
+    128021, 0, 68113, 65196, 0, 0, 128472, 0, 10111, 64875, 0, 83491, 43998,
+    83232, 83233, 83234, 70691, 83228, 42149, 83230, 68508, 0, 0, 0, 0, 0, 0,
+    0, 4110, 66005, 74034, 0, 0, 0, 66703, 0, 0, 983157, 6025, 69242, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 70733, 0, 983043, 0, 0, 0, 68817, 0, 0, 0, 0, 0, 0,
+    43286, 0, 68765, 0, 0, 0, 0, 129871, 65144, 0, 0, 83236, 65840, 0, 0,
+    10081, 0, 0, 983893, 0, 0, 0, 127394, 65882, 0, 128758, 0, 0, 3605,
+    10985, 0, 0, 128872, 93972, 1745, 0, 73835, 0, 0, 0, 0, 0, 0, 8806, 7023,
+    0, 0, 0, 70702, 70304, 0, 0, 0, 0, 0, 0, 0, 0, 348, 10089, 0, 9017, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 42515, 0, 0, 0, 0, 5391, 983236, 0, 0, 0, 5561, 0,
+    9429, 0, 67150, 7933, 5562, 0, 0, 0, 0, 78039, 0, 0, 0, 0, 3979, 71248,
+    0, 0, 0, 68847, 0, 0, 118847, 65847, 68836, 68838, 0, 10585, 0, 92676,
+    7334, 0, 0, 0, 831, 0, 0, 10716, 0, 121325, 0, 12218, 0, 6939, 70697,
+    65042, 0, 0, 916, 0, 0, 11968, 0, 0, 5563, 0, 0, 128830, 5560, 41212,
+    41774, 0, 4497, 0, 0, 0, 9039, 70678, 41776, 0, 8716, 3567, 119252, 0, 0,
+    74260, 0, 93954, 0, 0, 100827, 0, 128879, 70072, 68355, 68357, 0, 0,
+    8634, 0, 0, 4209, 120702, 68832, 65879, 68825, 68819, 68822, 0, 5679,
+    68813, 68815, 68811, 68812, 64697, 5678, 11821, 68802, 93969, 0, 0, 0, 0,
+    70114, 0, 0, 0, 0, 0, 0, 0, 0, 7782, 0, 0, 0, 0, 129977, 65711, 65712,
+    1216, 0, 69409, 5792, 0, 0, 0, 0, 0, 12244, 0, 5683, 0, 120895, 121336,
+    43448, 70670, 0, 0, 5682, 10242, 75043, 74520, 5680, 917568, 10001, 0, 0,
+    1449, 10241, 0, 70708, 0, 0, 83180, 83182, 83183, 8584, 83176, 5567,
+    83178, 83179, 0, 5564, 42886, 42884, 42882, 5565, 119022, 120881, 0,
+    65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42873, 5942, 0, 0,
+    10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 78702,
+    78703, 78690, 78700, 0, 65701, 1934, 0, 0, 0, 78710, 0, 78706, 78709,
+    6087, 78705, 78716, 78719, 78711, 8043, 8950, 65694, 64485, 0, 10457, 0,
+    78724, 78725, 78722, 72332, 78720, 78721, 0, 65515, 0, 10035, 13069, 0,
+    0, 127773, 0, 0, 0, 125207, 0, 0, 1667, 0, 0, 42428, 110950, 0, 0, 41750,
+    0, 0, 93999, 0, 8101, 3610, 113670, 41748, 110948, 0, 78394, 119208, 0,
+    0, 113691, 64549, 68359, 0, 0, 65692, 92701, 0, 0, 12896, 10456, 68298,
+    0, 0, 0, 0, 917962, 0, 0, 113665, 70502, 0, 65687, 0, 0, 74009, 0,
+    113673, 8536, 70671, 0, 78726, 0, 724, 0, 113675, 78749, 9975, 78746,
+    78747, 78744, 4175, 78741, 78743, 78751, 939, 0, 128799, 983119, 0, 0, 0,
+    78763, 78764, 78760, 78761, 78758, 78759, 78755, 8425, 0, 0, 0, 8188, 0,
+    0, 0, 0, 0, 6370, 0, 7827, 68441, 75008, 0, 917943, 0, 118863, 0, 0, 0,
+    0, 121243, 73988, 0, 113668, 0, 11012, 0, 43764, 178, 12972, 74620,
+    113671, 0, 113735, 0, 66764, 0, 0, 65690, 72339, 0, 0, 917950, 9252, 0,
+    4652, 74259, 0, 917947, 0, 0, 0, 10806, 0, 0, 70016, 0, 6723, 0, 0, 6993,
+    0, 0, 12855, 0, 0, 11390, 0, 0, 0, 92503, 0, 0, 983161, 125270, 92627,
+    8278, 0, 4034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12750, 9350, 66037, 0, 0,
+    73700, 12747, 0, 0, 128064, 43153, 74640, 0, 0, 43150, 0, 983090, 983088,
+    66779, 66777, 10813, 2592, 43139, 0, 0, 118870, 0, 0, 71891, 0, 0, 0, 0,
+    0, 0, 71697, 0, 128825, 1596, 0, 0, 0, 0, 6838, 66572, 0, 126574, 120627,
     8092, 12805, 41928, 0, 78406, 78409, 0, 0, 0, 9931, 0, 0, 0, 0, 0,
     983759, 6107, 0, 0, 0, 0, 128745, 0, 335, 127003, 64689, 0, 0, 5765, 0,
     0, 119227, 6092, 118851, 0, 8876, 83465, 74947, 83455, 129186, 83454,
@@ -26550,22 +27401,22 @@
     0, 0, 0, 0, 0, 843, 0, 71099, 0, 0, 41935, 0, 0, 0, 0, 1371, 0, 43818,
     43159, 8069, 9579, 41938, 41608, 0, 92444, 6242, 0, 0, 128595, 128244, 0,
     92499, 8805, 1742, 113722, 0, 8202, 72399, 0, 983197, 0, 0, 73882,
-    100809, 0, 43467, 123636, 55290, 0, 1712, 5932, 0, 41762, 129389, 0,
+    100809, 0, 43467, 123636, 55290, 0, 1712, 5932, 0, 41762, 71982, 0,
     11967, 1775, 0, 75009, 0, 120398, 120387, 9458, 0, 126614, 0, 0, 43176,
     101032, 101031, 42782, 101033, 101036, 101035, 101038, 101037, 101040,
     101039, 0, 0, 0, 0, 101041, 5794, 92274, 2662, 101045, 101044, 8254,
     101046, 10975, 101048, 120625, 101050, 917977, 4108, 8478, 917982,
     194790, 0, 92263, 917980, 7507, 0, 43149, 0, 65031, 7961, 1636, 0, 65029,
     0, 129665, 70188, 9674, 0, 99, 98, 97, 101022, 92203, 4049, 101027,
-    101026, 7090, 101028, 0, 101030, 66589, 0, 65310, 66593, 66599, 0, 0, 0,
-    7447, 66594, 0, 0, 0, 73920, 66595, 66596, 42570, 5593, 0, 0, 0, 0, 6061,
-    64854, 119, 118, 117, 116, 0, 122, 121, 120, 111, 110, 109, 108, 115,
-    114, 113, 112, 103, 102, 101, 100, 107, 106, 105, 104, 128504, 73974,
-    534, 0, 67713, 1536, 73973, 73970, 0, 0, 0, 6020, 12716, 0, 12744, 65143,
-    0, 13266, 127813, 0, 0, 0, 127116, 0, 1212, 65560, 0, 8134, 42935, 12129,
-    73870, 0, 1866, 0, 0, 0, 0, 65073, 12059, 66585, 121391, 0, 0, 0, 5935,
-    1250, 0, 8174, 9787, 6733, 9859, 9858, 9861, 9860, 101012, 1882, 1892,
-    6731, 10882, 10795, 101018, 73911, 101020, 101019, 41169, 8939, 0,
+    43880, 7090, 101028, 0, 101030, 66589, 0, 65310, 66593, 66599, 129805, 0,
+    0, 7447, 66594, 0, 0, 0, 73920, 66595, 66596, 42570, 5593, 0, 0, 0, 0,
+    6061, 64854, 119, 118, 117, 116, 0, 122, 121, 120, 111, 110, 109, 108,
+    115, 114, 113, 112, 103, 102, 101, 100, 107, 106, 105, 104, 128504,
+    73974, 534, 0, 67713, 1536, 73973, 73970, 0, 0, 0, 6020, 12716, 0, 12744,
+    65143, 0, 13266, 127813, 0, 0, 0, 127116, 0, 1212, 65560, 0, 8134, 42935,
+    12129, 73870, 0, 1866, 0, 0, 0, 0, 65073, 12059, 66585, 121391, 0, 0, 0,
+    5935, 1250, 0, 8174, 9787, 6733, 9859, 9858, 9861, 9860, 101012, 1882,
+    1892, 6731, 10882, 10795, 101018, 73911, 101020, 101019, 41169, 8939, 0,
     120713, 41170, 1454, 0, 65130, 69732, 0, 0, 129611, 41172, 7855, 0,
     71472, 0, 0, 0, 71691, 65901, 0, 0, 645, 100992, 100991, 100994, 100993,
     100996, 100995, 100998, 65587, 0, 10688, 0, 0, 7729, 0, 101001, 120518,
@@ -26604,22 +27455,22 @@
     41296, 11747, 41291, 0, 0, 0, 41294, 41282, 5923, 120610, 0, 0, 0, 0,
     66800, 5786, 68252, 42539, 119869, 119860, 0, 41474, 0, 0, 0, 5934,
     74572, 66583, 119231, 0, 94072, 64481, 0, 0, 0, 0, 67240, 0, 0, 123201,
-    0, 5819, 0, 0, 0, 0, 0, 129387, 0, 0, 0, 67993, 1237, 0, 0, 0, 983557, 0,
-    0, 0, 0, 0, 0, 0, 69789, 11266, 69845, 0, 10506, 194747, 0, 0, 0, 0,
-    43185, 0, 100533, 100532, 100535, 10769, 100537, 100536, 100539, 9753,
-    121035, 100540, 0, 0, 121433, 0, 100542, 6072, 100544, 100543, 100546,
-    100545, 100548, 100547, 100550, 100549, 0, 113744, 0, 0, 7222, 10283,
-    10315, 10379, 4996, 0, 129294, 66517, 0, 10087, 127833, 74938, 0, 0,
-    83492, 7565, 42890, 0, 77931, 43180, 77928, 74891, 77929, 43982, 100526,
-    622, 77926, 100527, 100530, 1602, 0, 0, 0, 129559, 12160, 0, 10212,
-    77936, 194605, 12071, 43143, 77935, 917983, 917984, 917989, 77932,
-    917987, 917988, 10255, 10263, 10279, 4194, 10375, 93035, 0, 0, 12644,
-    127516, 917994, 75007, 110791, 67408, 110789, 11501, 41177, 0, 0, 71912,
-    0, 0, 8715, 0, 41179, 0, 0, 0, 41176, 0, 41181, 0, 8452, 121006, 13161,
-    0, 70503, 5921, 0, 2597, 0, 5922, 72128, 0, 74242, 0, 0, 0, 0, 0, 0, 0,
-    0, 127906, 0, 64944, 0, 0, 0, 0, 5924, 5920, 129508, 6921, 78081, 74007,
-    78078, 8418, 11681, 43169, 10176, 0, 0, 0, 78087, 10772, 65276, 5937,
-    1914, 78084, 11682, 0, 0, 0, 11685, 0, 100513, 7772, 11680, 100514,
+    0, 5819, 0, 0, 0, 0, 0, 129387, 0, 0, 0, 67993, 1237, 194749, 0, 0,
+    983557, 0, 0, 0, 0, 0, 0, 0, 69789, 11266, 69845, 0, 10506, 194747, 0, 0,
+    0, 0, 43185, 194748, 100533, 100532, 100535, 10769, 100537, 100536,
+    100539, 9753, 121035, 100540, 0, 0, 121433, 0, 100542, 6072, 100544,
+    100543, 100546, 100545, 100548, 100547, 100550, 100549, 0, 113744, 0, 0,
+    7222, 10283, 10315, 10379, 4996, 0, 129294, 66517, 0, 10087, 127833,
+    74938, 0, 0, 83492, 7565, 42890, 0, 77931, 43180, 77928, 74891, 77929,
+    43982, 100526, 622, 77926, 100527, 100530, 1602, 0, 0, 0, 129559, 12160,
+    0, 10212, 77936, 194605, 12071, 43143, 77935, 917983, 917984, 917989,
+    77932, 917987, 917988, 10255, 10263, 10279, 4194, 10375, 93035, 0, 0,
+    12644, 127516, 917994, 75007, 110791, 67408, 110789, 11501, 41177, 0, 0,
+    71912, 0, 0, 8715, 0, 41179, 0, 0, 0, 41176, 0, 41181, 0, 8452, 121006,
+    13161, 0, 70503, 5921, 0, 2597, 0, 5922, 72128, 0, 74242, 0, 0, 0, 0, 0,
+    0, 0, 0, 127906, 0, 64944, 0, 0, 0, 0, 5924, 5920, 129508, 6921, 78081,
+    74007, 78078, 8418, 11681, 43169, 10176, 0, 0, 0, 78087, 10772, 65276,
+    5937, 1914, 78084, 11682, 0, 0, 0, 11685, 0, 100513, 7772, 11680, 100514,
     100517, 100516, 100519, 7417, 718, 100520, 70083, 100500, 120718, 3235,
     0, 43164, 0, 8018, 0, 0, 128708, 6937, 67672, 128508, 0, 10067, 120849,
     0, 0, 0, 0, 0, 100491, 0, 100493, 100492, 13116, 100494, 100497, 9945,
@@ -26629,56 +27480,57 @@
     78102, 71226, 10141, 0, 78280, 65298, 4476, 78109, 94005, 71216, 8907,
     78105, 78106, 78103, 78104, 120898, 0, 10665, 64616, 128944, 0, 127545,
     69605, 83159, 83160, 4554, 0, 83155, 83156, 83157, 83158, 0, 125123, 0,
-    72258, 0, 0, 0, 0, 43179, 0, 0, 0, 717, 10754, 83168, 83169, 83162,
-    83163, 83164, 83165, 78282, 0, 0, 83161, 68848, 10611, 72859, 126978,
-    71474, 129426, 127871, 0, 0, 0, 12820, 0, 0, 7009, 70103, 0, 0, 67848,
-    41173, 4574, 0, 0, 128338, 575, 78110, 43456, 8563, 100469, 0, 0, 65565,
-    0, 5936, 7290, 78117, 78118, 74919, 308, 78113, 78114, 83151, 78123,
-    83153, 83154, 0, 0, 0, 0, 78132, 5926, 68250, 78130, 78126, 78127, 78124,
-    78125, 42513, 0, 0, 0, 11651, 13093, 78135, 0, 100471, 0, 100473, 100472,
-    100475, 74048, 100477, 74783, 100457, 100456, 43703, 13097, 0, 100460,
-    13283, 0, 0, 125073, 3488, 5933, 10033, 0, 0, 65570, 0, 12297, 0, 0, 0,
-    128517, 42538, 0, 129293, 0, 100451, 0, 100453, 100452, 100455, 100454,
-    121221, 0, 0, 7638, 0, 129193, 0, 43109, 7637, 0, 11213, 100461, 83355,
-    100463, 100466, 100465, 0, 0, 7636, 0, 0, 0, 128848, 983087, 291, 0, 0,
-    2027, 78141, 78142, 78136, 78137, 83481, 4640, 64713, 10224, 120429,
-    11183, 83482, 120430, 0, 0, 0, 127148, 83479, 0, 0, 83488, 0, 0, 0, 0,
-    68837, 5778, 0, 0, 0, 12680, 119130, 0, 67242, 93041, 0, 0, 0, 11552, 0,
-    127855, 0, 70091, 0, 10172, 65453, 120408, 66014, 120410, 0, 4641, 11556,
-    64819, 78269, 120416, 72341, 41469, 41467, 120412, 120415, 4646, 120425,
-    865, 78275, 78274, 78273, 4645, 78271, 78270, 0, 983172, 7338, 0, 68840,
-    0, 12565, 0, 0, 0, 195089, 119655, 195091, 195090, 2913, 13120, 128956,
-    195094, 195097, 195096, 128019, 0, 71462, 0, 7916, 10485, 195098, 0,
-    195100, 195099, 0, 67705, 195078, 195077, 195080, 129636, 129549, 195081,
-    0, 0, 0, 10229, 10687, 826, 128081, 195082, 195085, 195084, 195087,
-    195086, 0, 1808, 7848, 0, 0, 0, 0, 0, 0, 128897, 0, 42942, 67704, 0, 0,
-    0, 0, 42940, 0, 9144, 0, 0, 92992, 9840, 0, 0, 0, 0, 0, 0, 74448, 83475,
-    0, 10962, 66904, 113718, 983187, 0, 0, 74537, 195072, 1792, 195074,
-    195073, 78266, 195075, 0, 0, 12066, 0, 385, 4152, 0, 0, 0, 67397, 0, 0,
-    0, 0, 43258, 0, 0, 13157, 0, 0, 3570, 0, 0, 0, 67252, 0, 71218, 126631,
-    7879, 68247, 128579, 0, 0, 70196, 0, 0, 8463, 7810, 917862, 7839, 983859,
-    127768, 917860, 9691, 0, 129323, 0, 120385, 0, 917844, 0, 10066, 0, 0, 0,
-    0, 0, 8016, 0, 983072, 64831, 0, 126103, 0, 119171, 1634, 68115, 0,
-    11056, 0, 0, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 0, 171, 0,
-    12452, 917544, 12458, 12531, 0, 917853, 0, 74162, 0, 0, 9969, 0, 12454,
-    74160, 42132, 110755, 78878, 110753, 3230, 73711, 0, 0, 8932, 4399, 5810,
-    64534, 8415, 0, 110756, 110757, 74159, 0, 0, 960, 74156, 6981, 92374,
-    12938, 9201, 0, 983658, 74904, 0, 72866, 92270, 0, 0, 0, 0, 5851, 73833,
-    5824, 0, 5844, 110848, 110849, 110846, 110847, 4663, 0, 0, 0, 0, 0,
-    74085, 0, 0, 0, 0, 0, 92339, 0, 0, 5782, 0, 0, 0, 43796, 129639, 0, 0,
-    125223, 128004, 0, 43861, 0, 0, 0, 92976, 0, 0, 0, 4659, 0, 0, 0, 0,
-    129386, 0, 11129, 0, 329, 0, 92707, 121416, 0, 0, 0, 69943, 67692, 42167,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69618, 43671, 0, 64701, 0, 0, 0, 93055,
-    1172, 125089, 6786, 43601, 0, 74126, 0, 0, 0, 0, 0, 0, 0, 0, 118804, 0,
-    66741, 5347, 0, 983644, 0, 0, 10588, 0, 0, 0, 0, 5343, 0, 0, 0, 5341, 0,
-    0, 74916, 5351, 0, 0, 917884, 0, 92692, 0, 121148, 128916, 0, 0, 66785,
-    126256, 6638, 0, 0, 271, 0, 917904, 0, 0, 12653, 67588, 0, 0, 0, 0,
-    128838, 11912, 128301, 983646, 0, 11800, 0, 0, 11103, 0, 7340, 0, 110695,
-    0, 0, 0, 0, 2423, 0, 0, 0, 128136, 42705, 0, 0, 0, 11854, 0, 0, 0, 0,
-    4916, 0, 380, 10958, 66563, 127790, 78284, 67587, 0, 12918, 0, 917897, 0,
-    917898, 917893, 10684, 0, 125063, 92906, 0, 0, 8182, 0, 0, 0, 0, 0, 0,
-    92904, 0, 6630, 100405, 0, 123191, 0, 0, 0, 65876, 5535, 0, 0, 0, 92609,
-    0, 0, 6477, 43795, 92217, 129571, 72163, 0, 43848, 0, 0, 74256, 2665,
+    72258, 129831, 0, 129815, 0, 43179, 0, 0, 0, 717, 10754, 83168, 83169,
+    83162, 83163, 83164, 83165, 78282, 0, 0, 83161, 68848, 10611, 72859,
+    126978, 71474, 129426, 127871, 0, 0, 0, 12820, 0, 0, 7009, 70103, 0, 0,
+    67848, 41173, 4574, 0, 0, 128338, 575, 78110, 43456, 8563, 100469, 0, 0,
+    65565, 0, 5936, 7290, 78117, 78118, 74919, 308, 78113, 78114, 83151,
+    78123, 83153, 83154, 0, 0, 0, 0, 78132, 5926, 68250, 78130, 78126, 78127,
+    78124, 78125, 42513, 0, 129026, 0, 11651, 13093, 78135, 0, 100471, 0,
+    100473, 100472, 100475, 74048, 100477, 71995, 100457, 100456, 43703,
+    13097, 0, 100460, 13283, 0, 0, 125073, 3488, 5933, 10033, 0, 0, 65570, 0,
+    12297, 0, 0, 0, 128517, 42538, 0, 129293, 0, 100451, 0, 100453, 100452,
+    100455, 100454, 121221, 0, 0, 7638, 0, 129193, 0, 43109, 7637, 0, 11213,
+    100461, 83355, 100463, 100466, 100465, 0, 0, 7636, 0, 0, 0, 128848,
+    983087, 291, 0, 0, 2027, 78141, 78142, 78136, 78137, 83481, 4640, 64713,
+    10224, 120429, 11183, 83482, 120430, 0, 0, 0, 127148, 83479, 0, 0, 83488,
+    0, 0, 0, 0, 68837, 5778, 0, 0, 0, 12680, 119130, 0, 67242, 93041, 0, 0,
+    0, 11552, 0, 127855, 0, 70091, 0, 10172, 65453, 120408, 66014, 120410, 0,
+    4641, 11556, 64819, 78269, 120416, 72341, 41469, 41467, 120412, 120415,
+    4646, 120425, 865, 78275, 78274, 78273, 4645, 78271, 78270, 0, 983172,
+    7338, 0, 68840, 0, 12565, 0, 0, 0, 195089, 119655, 195091, 195090, 2913,
+    13120, 128956, 195094, 195097, 195096, 128019, 0, 71462, 0, 7916, 10485,
+    195098, 0, 195100, 195099, 0, 67705, 128351, 195077, 195080, 129636,
+    129549, 195081, 0, 0, 0, 10229, 10687, 826, 128081, 195082, 195085,
+    195084, 195087, 195086, 0, 1808, 7848, 0, 0, 0, 0, 0, 0, 128897, 69255,
+    42942, 67704, 0, 0, 0, 0, 42940, 0, 9144, 0, 0, 92992, 9840, 0, 0, 0, 0,
+    0, 0, 74448, 83475, 0, 10962, 66904, 113718, 983187, 0, 0, 74537, 195072,
+    1792, 195074, 195073, 78266, 195075, 0, 0, 12066, 0, 385, 4152, 0, 0, 0,
+    67397, 0, 0, 0, 0, 43258, 0, 0, 13157, 0, 0, 3570, 0, 0, 0, 67252, 0,
+    71218, 126631, 7879, 68247, 128579, 0, 0, 70196, 0, 0, 8463, 7810,
+    917862, 7839, 983859, 127768, 917860, 9691, 0, 129323, 0, 120385, 0,
+    917844, 0, 10066, 0, 983855, 0, 0, 0, 8016, 0, 983072, 64831, 0, 126103,
+    0, 119171, 1634, 68115, 94192, 11056, 0, 0, 0, 41165, 11328, 12450, 0,
+    41166, 0, 12456, 0, 171, 0, 12452, 917544, 12458, 12531, 0, 917853, 0,
+    74162, 0, 0, 9969, 0, 12454, 74160, 42132, 110755, 78878, 110753, 3230,
+    73711, 0, 0, 8932, 4399, 5810, 64534, 8415, 0, 110756, 110757, 74159, 0,
+    0, 960, 74156, 6981, 92374, 12938, 9201, 0, 983658, 74904, 0, 72866,
+    92270, 0, 0, 0, 129792, 5851, 73833, 5824, 0, 5844, 110848, 110849,
+    110846, 110847, 4663, 0, 0, 0, 0, 0, 74085, 0, 0, 0, 0, 0, 92339, 0, 0,
+    5782, 0, 0, 0, 43796, 129639, 0, 195083, 125223, 128004, 0, 43861, 0, 0,
+    0, 92976, 0, 0, 0, 4659, 0, 0, 0, 0, 129386, 0, 11129, 2238, 329, 0,
+    92707, 121416, 0, 0, 0, 69943, 67692, 42167, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 69618, 43671, 0, 64701, 0, 0, 0, 93055, 1172, 125089, 6786, 43601,
+    0, 74126, 0, 0, 0, 0, 0, 0, 0, 0, 118804, 0, 66741, 5347, 0, 983644, 0,
+    0, 10588, 0, 0, 0, 0, 5343, 0, 0, 0, 5341, 0, 0, 74916, 5351, 0, 0,
+    917884, 0, 92692, 0, 121148, 128916, 0, 0, 66785, 126256, 6638, 0, 0,
+    271, 0, 917904, 0, 0, 12653, 67588, 0, 0, 0, 0, 128838, 11912, 128301,
+    983646, 0, 11800, 0, 0, 11103, 0, 7340, 0, 110695, 0, 0, 0, 0, 2423, 0,
+    0, 0, 128136, 42705, 0, 0, 0, 11854, 0, 0, 0, 0, 4916, 0, 380, 10958,
+    66563, 127790, 78284, 67587, 0, 12918, 0, 917897, 0, 917898, 917893,
+    10684, 0, 125063, 92906, 0, 0, 8182, 0, 0, 129434, 0, 0, 0, 92904, 0,
+    6630, 100405, 0, 123191, 0, 0, 0, 65876, 5535, 129892, 0, 0, 92609, 0,
+    983343, 6477, 43795, 92217, 129571, 72163, 0, 43848, 0, 0, 74256, 2665,
     11304, 43751, 0, 4970, 74353, 0, 8934, 0, 93996, 4492, 92908, 65011, 0,
     0, 92909, 1188, 7254, 1100, 0, 0, 0, 2912, 11749, 92643, 0, 0, 65057, 0,
     12343, 0, 78879, 0, 78880, 0, 0, 0, 70355, 0, 0, 11803, 0, 0, 41450, 0,
@@ -26700,7 +27552,7 @@
     0, 5622, 120436, 8477, 8474, 120433, 120432, 0, 0, 0, 41435, 4352, 0,
     2435, 0, 5621, 0, 4201, 8450, 4203, 4202, 4205, 4204, 120447, 120446,
     120445, 66792, 41440, 120442, 8473, 6373, 8469, 120438, 0, 4564, 125206,
-    0, 0, 0, 8374, 73669, 0, 0, 66796, 0, 0, 0, 0, 0, 92885, 0, 5626, 43507,
+    0, 0, 0, 8374, 73669, 0, 0, 66796, 0, 0, 0, 0, 0, 69297, 0, 5626, 43507,
     11771, 0, 0, 0, 42614, 0, 5625, 0, 0, 0, 5623, 0, 0, 42623, 64277, 69942,
     0, 0, 120752, 0, 5817, 5629, 0, 7551, 10325, 5632, 69674, 0, 0, 124946,
     125194, 5628, 0, 5631, 0, 0, 2400, 5627, 0, 0, 118786, 74792, 0, 0, 0,
@@ -26712,9 +27564,9 @@
     69432, 0, 9568, 71318, 456, 0, 10437, 1168, 9251, 9082, 0, 0, 42781,
     3866, 0, 41512, 0, 0, 68121, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 0,
     73918, 119627, 110686, 41454, 12605, 0, 126611, 41455, 917996, 983605, 0,
-    8214, 0, 100413, 0, 41457, 0, 0, 1969, 127771, 0, 0, 7413, 0, 69426,
-    10341, 43864, 78079, 5854, 0, 0, 0, 0, 72819, 0, 0, 0, 0, 0, 8429, 0,
-    72328, 0, 6429, 0, 0, 0, 0, 110688, 83417, 0, 917864, 120813, 83423,
+    8214, 0, 100413, 0, 41457, 0, 0, 1969, 127771, 0, 69554, 7413, 0, 69426,
+    10341, 43864, 78079, 5854, 0, 0, 0, 129684, 72819, 0, 0, 0, 0, 0, 8429,
+    0, 72328, 0, 6429, 0, 0, 0, 0, 110688, 83417, 0, 917864, 120813, 83423,
     1662, 129588, 0, 0, 917871, 917868, 0, 0, 66, 65, 68, 67, 70, 69, 72, 71,
     74, 73, 76, 75, 78, 77, 80, 79, 82, 81, 84, 83, 86, 85, 88, 87, 90, 89,
     0, 0, 7385, 70508, 1704, 12993, 0, 0, 0, 0, 0, 0, 0, 0, 11353, 72207, 0,
@@ -26730,192 +27582,194 @@
     0, 0, 0, 72307, 43474, 0, 121190, 0, 0, 3420, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     110871, 9574, 120684, 110870, 0, 5204, 74774, 0, 11835, 0, 0, 983185, 0,
     0, 0, 0, 0, 0, 11750, 68898, 127004, 0, 0, 0, 0, 8130, 0, 0, 0, 121268,
-    0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, 0, 0, 612, 110875, 110876,
-    72231, 10538, 0, 1674, 0, 0, 0, 12280, 0, 540, 74550, 0, 66422, 8432, 0,
-    11073, 0, 64316, 0, 0, 7388, 0, 0, 0, 0, 126107, 0, 3359, 0, 0, 67284, 0,
-    0, 65482, 129589, 0, 64742, 129304, 0, 0, 74273, 0, 19941, 0, 0, 0, 0,
-    9481, 65555, 0, 66628, 129126, 1195, 64898, 0, 0, 0, 2010, 0, 0, 0, 0, 0,
-    0, 4360, 127009, 9739, 0, 72885, 0, 0, 0, 126265, 72200, 0, 0, 0, 72199,
-    0, 0, 65734, 0, 0, 0, 13075, 0, 94063, 0, 43532, 10837, 2492, 74516,
-    983075, 120882, 0, 0, 11813, 9649, 0, 119617, 5128, 7377, 0, 65604, 0, 0,
-    6771, 1648, 7819, 0, 0, 0, 125192, 128131, 12709, 6986, 0, 0, 0, 0, 0,
-    12581, 0, 5175, 0, 73806, 0, 128420, 0, 0, 77950, 0, 0, 607, 0, 0,
-    128846, 119605, 0, 129528, 65477, 0, 121130, 0, 8265, 0, 0, 0, 5840,
-    42838, 0, 0, 68366, 0, 119255, 0, 0, 0, 127929, 0, 2550, 121011, 6779,
-    70059, 0, 0, 0, 0, 0, 0, 5619, 65822, 0, 0, 0, 129392, 5616, 11486, 0, 0,
-    0, 0, 5615, 0, 121319, 42380, 127958, 0, 66451, 74407, 0, 11347, 0, 1026,
-    5620, 0, 0, 11350, 5617, 0, 0, 64639, 0, 0, 0, 1338, 0, 0, 0, 4603, 0,
-    70715, 92484, 0, 9002, 0, 3974, 78213, 0, 0, 0, 0, 0, 0, 75038, 66040,
-    70455, 0, 0, 0, 72982, 0, 0, 0, 0, 0, 0, 0, 0, 119105, 0, 0, 0, 0, 0,
-    128883, 0, 66897, 0, 0, 0, 42594, 0, 0, 0, 0, 6714, 10083, 0, 121019, 0,
-    69976, 0, 0, 9073, 0, 64302, 0, 128286, 9725, 0, 0, 121288, 73769,
-    121306, 0, 9570, 0, 11500, 2689, 917626, 0, 983794, 66740, 0, 0, 0,
-    917623, 13286, 5500, 42598, 42596, 503, 0, 0, 917618, 0, 0, 0, 0, 917615,
-    1652, 772, 6688, 8310, 0, 0, 72124, 0, 10194, 43542, 0, 125054, 0, 6468,
-    68110, 0, 917606, 11767, 0, 0, 5836, 12358, 0, 0, 65624, 12180, 0,
-    127994, 0, 43699, 0, 0, 72114, 43706, 0, 12362, 12435, 12360, 0, 9020, 0,
-    12356, 8616, 0, 42924, 2227, 0, 0, 7315, 12354, 83097, 83098, 83099,
-    2358, 83092, 83093, 83094, 0, 0, 83089, 83090, 0, 11759, 71723, 0, 72834,
-    83109, 41423, 0, 83103, 83104, 83105, 42237, 110653, 70717, 72260, 83102,
-    0, 67856, 0, 128534, 110657, 129354, 129194, 0, 64395, 0, 73008, 120897,
-    74816, 0, 0, 0, 83088, 0, 0, 94064, 83083, 83085, 83086, 83087, 83079,
-    83080, 2041, 9178, 0, 64870, 0, 83076, 74924, 0, 0, 0, 0, 0, 78739, 0, 0,
-    0, 0, 0, 0, 3726, 0, 0, 0, 0, 0, 121432, 129457, 0, 0, 0, 0, 0, 74901, 0,
-    0, 0, 0, 0, 124944, 113781, 0, 7410, 2669, 903, 0, 0, 0, 127232, 74603,
-    0, 128264, 0, 128411, 0, 0, 11732, 0, 72797, 41448, 41461, 124934, 0,
-    917558, 0, 8819, 0, 0, 74606, 0, 121412, 74835, 0, 9168, 65786, 0, 73691,
-    0, 67665, 0, 11758, 68425, 0, 0, 0, 128044, 0, 19924, 67312, 0, 128755,
-    64551, 0, 8516, 0, 0, 7561, 983980, 74018, 0, 0, 0, 0, 83074, 83075, 0,
-    11233, 83062, 83066, 3787, 83070, 83055, 41458, 83059, 41463, 65308,
-    41459, 8683, 775, 0, 65584, 69923, 0, 110798, 110799, 110796, 43440, 0,
-    0, 0, 3656, 0, 0, 0, 67694, 1599, 83138, 83139, 8514, 8513, 83036, 83135,
-    83136, 110794, 110795, 83131, 83132, 0, 0, 0, 11684, 10542, 9937, 83150,
-    0, 75037, 83145, 65730, 83147, 0, 8427, 83142, 55246, 0, 0, 11497, 0, 0,
-    0, 119222, 0, 983598, 0, 10621, 0, 0, 129295, 119111, 120745, 0, 0, 0,
-    11648, 83126, 83127, 42118, 83129, 83122, 65512, 83124, 83125, 0, 0, 0,
-    83121, 74530, 128456, 0, 0, 0, 65724, 0, 0, 0, 65727, 0, 0, 64963, 73830,
-    66042, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 65173, 129122, 0,
-    70331, 0, 0, 0, 0, 129419, 0, 0, 0, 1687, 0, 0, 0, 0, 0, 0, 10526, 0,
-    8323, 0, 83301, 11731, 0, 0, 65460, 12242, 0, 0, 10843, 11554, 0, 0,
-    8266, 0, 121101, 0, 0, 0, 0, 67667, 0, 119155, 0, 0, 119636, 67857, 0, 0,
-    0, 11755, 66305, 0, 0, 10917, 93979, 113688, 0, 2040, 92596, 0, 0, 0, 0,
-    1227, 83119, 83120, 0, 0, 83115, 83116, 11149, 4978, 83111, 1984, 11830,
-    83114, 128934, 74548, 0, 9373, 0, 0, 0, 0, 0, 0, 0, 0, 9237, 9390, 0, 0,
-    0, 0, 0, 1830, 0, 0, 0, 0, 0, 128577, 983820, 68086, 0, 0, 0, 983059, 0,
-    983144, 0, 0, 0, 72197, 55291, 11683, 0, 0, 0, 11451, 0, 72714, 3731,
-    2359, 0, 67844, 0, 121503, 548, 121502, 983245, 121405, 983248, 0, 66272,
-    0, 64678, 0, 9547, 0, 0, 1614, 0, 0, 66307, 128092, 1358, 120871, 428, 0,
-    1466, 0, 10982, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 5804, 73464, 0, 0, 0,
-    70167, 9057, 42446, 0, 125097, 0, 0, 8250, 10952, 8048, 0, 129155, 0,
-    118955, 0, 0, 126586, 4407, 74648, 0, 0, 0, 8448, 92491, 0, 0, 12675,
-    12659, 0, 0, 983280, 68077, 55273, 10766, 12012, 2386, 0, 9170, 0, 9123,
-    128194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8709, 0, 983585, 0, 0, 0, 0, 0,
-    0, 0, 128342, 0, 577, 128610, 0, 0, 124999, 68087, 74840, 126474, 127036,
-    0, 0, 0, 1414, 124963, 9683, 43486, 92231, 0, 2536, 0, 66330, 0, 0, 0, 0,
-    0, 0, 0, 66317, 0, 66315, 66316, 0, 0, 0, 0, 0, 0, 0, 0, 66323, 66324, 0,
-    0, 3106, 65917, 0, 0, 0, 891, 0, 0, 42624, 0, 0, 8824, 65089, 0, 10936,
-    0, 0, 0, 0, 92688, 0, 0, 0, 0, 12745, 0, 0, 41285, 3547, 0, 0, 0, 0, 0,
-    6089, 0, 68490, 120578, 4170, 1029, 127761, 0, 0, 42374, 0, 744, 917624,
-    0, 0, 0, 93046, 0, 3551, 0, 0, 4623, 0, 0, 12340, 0, 65136, 0, 0, 0, 0,
-    0, 0, 0, 72291, 0, 0, 120778, 0, 11972, 0, 78757, 0, 122886, 177, 122894,
-    0, 0, 0, 0, 55243, 0, 0, 0, 70172, 120249, 120242, 128027, 120243, 0, 0,
-    0, 120237, 120245, 94079, 0, 0, 9136, 120240, 120614, 41280, 0, 0, 0, 0,
-    74149, 128327, 0, 0, 66361, 12601, 72194, 64360, 65163, 0, 0, 0, 0, 0, 0,
-    5404, 43332, 3667, 7936, 12925, 0, 0, 0, 0, 0, 10874, 65505, 0, 0, 0, 0,
-    128920, 983662, 0, 0, 0, 0, 0, 0, 0, 0, 66677, 0, 0, 0, 70088, 74148, 0,
-    0, 72868, 120230, 120224, 74172, 0, 0, 94096, 0, 128414, 120636, 0,
-    127519, 917609, 917616, 0, 128652, 0, 0, 11441, 0, 3512, 0, 0, 43597, 0,
-    0, 72734, 68153, 41563, 0, 0, 129352, 41544, 0, 0, 0, 0, 129177, 0, 0, 0,
-    118908, 0, 78108, 67396, 73804, 64711, 0, 0, 917610, 0, 0, 0, 11557,
-    127776, 0, 12079, 0, 0, 0, 0, 128861, 0, 0, 0, 0, 0, 983200, 8103, 72303,
-    128174, 92486, 110698, 0, 64587, 0, 0, 124961, 0, 0, 0, 126481, 0, 0, 0,
-    0, 0, 70348, 1450, 0, 1340, 0, 0, 128970, 0, 0, 125117, 0, 0, 0, 0, 6539,
-    92948, 0, 128213, 125060, 0, 0, 0, 3973, 0, 70504, 121193, 7982, 0, 0,
-    127194, 0, 0, 0, 128408, 118968, 6417, 120619, 0, 0, 0, 0, 129455, 4919,
-    65121, 110872, 7755, 0, 0, 64548, 0, 1621, 0, 0, 0, 0, 0, 12188, 0, 0, 0,
-    0, 5015, 0, 0, 42590, 70354, 1756, 0, 0, 0, 120694, 0, 0, 7555, 73874,
-    5408, 2817, 1214, 69919, 0, 983125, 0, 0, 125055, 127195, 7957, 0, 0,
-    1056, 74944, 0, 0, 0, 0, 7073, 74979, 0, 70853, 0, 110874, 0, 0, 2341,
-    126644, 8484, 0, 0, 68322, 0, 8461, 67721, 42269, 0, 0, 43709, 43708,
-    9451, 7571, 13073, 43847, 126647, 0, 983258, 0, 0, 0, 8781, 12894, 78134,
-    0, 92288, 0, 0, 78184, 0, 11338, 120768, 0, 0, 0, 0, 0, 121367, 65021,
-    64795, 74574, 0, 10047, 0, 0, 0, 0, 0, 0, 119181, 163, 576, 9895, 0, 0,
-    74591, 0, 0, 66888, 0, 0, 0, 0, 0, 0, 7017, 128111, 0, 0, 0, 0, 41591,
+    0, 129443, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, 0, 0, 612, 110875,
+    110876, 72231, 10538, 0, 1674, 0, 0, 0, 12280, 0, 540, 74550, 0, 66422,
+    8432, 0, 11073, 0, 64316, 129894, 0, 7388, 0, 0, 0, 0, 126107, 0, 3359,
+    0, 0, 67284, 0, 0, 65482, 129589, 0, 64742, 129304, 0, 0, 74273, 0,
+    19941, 0, 0, 0, 0, 9481, 65555, 0, 66628, 129126, 1195, 64898, 0, 0, 0,
+    2010, 0, 0, 0, 0, 0, 0, 4360, 127009, 9739, 0, 72885, 0, 0, 0, 126265,
+    72200, 0, 0, 0, 72199, 0, 0, 65734, 0, 0, 129690, 13075, 0, 94063, 0,
+    43532, 10837, 2492, 74516, 983075, 120882, 0, 0, 11813, 9649, 0, 119617,
+    5128, 7377, 0, 65604, 0, 0, 6771, 1648, 7819, 0, 0, 0, 125192, 128131,
+    12709, 6986, 0, 0, 0, 0, 0, 12581, 0, 5175, 0, 73806, 0, 128420, 0, 0,
+    77950, 0, 0, 607, 0, 0, 128846, 119605, 0, 129528, 65477, 0, 121130, 0,
+    8265, 0, 0, 0, 5840, 42838, 0, 0, 68366, 0, 119255, 0, 0, 0, 127929, 0,
+    2550, 121011, 6779, 70059, 0, 0, 0, 0, 0, 0, 5619, 65822, 0, 0, 0,
+    129392, 5616, 11486, 0, 0, 0, 0, 5615, 0, 121319, 42380, 127958, 0,
+    66451, 74407, 0, 11347, 0, 1026, 5620, 0, 0, 11350, 5617, 0, 0, 64639, 0,
+    0, 0, 1338, 0, 0, 0, 4603, 0, 70715, 92484, 0, 9002, 0, 3974, 78213, 0,
+    0, 0, 0, 0, 0, 75038, 66040, 70455, 0, 0, 0, 72982, 0, 0, 0, 0, 0, 0, 0,
+    0, 119105, 0, 0, 0, 0, 0, 128883, 0, 66897, 0, 0, 0, 42594, 0, 0, 0, 0,
+    6714, 10083, 0, 121019, 0, 69976, 0, 0, 9073, 0, 64302, 0, 128286, 9725,
+    0, 0, 121288, 73769, 121306, 0, 9570, 0, 11500, 2689, 917626, 0, 983794,
+    66740, 0, 0, 0, 917623, 13286, 5500, 42598, 42596, 503, 0, 0, 917618, 0,
+    0, 0, 0, 917615, 1652, 772, 6688, 8310, 0, 0, 72124, 0, 10194, 43542, 0,
+    125054, 0, 6468, 68110, 0, 917606, 11767, 0, 0, 5836, 12358, 0, 0, 65624,
+    12180, 0, 127994, 0, 43699, 0, 0, 72114, 43706, 0, 12362, 12435, 12360,
+    0, 9020, 0, 12356, 8616, 0, 42924, 2227, 0, 0, 7315, 12354, 83097, 83098,
+    83099, 2358, 83092, 83093, 83094, 0, 0, 83089, 83090, 0, 11759, 71723, 0,
+    72834, 83109, 41423, 0, 83103, 83104, 83105, 42237, 110653, 70717, 72260,
+    83102, 0, 67856, 0, 128534, 110657, 129354, 129194, 0, 64395, 0, 73008,
+    120897, 74816, 0, 0, 0, 83088, 0, 0, 94064, 83083, 83085, 83086, 83087,
+    83079, 83080, 2041, 9178, 0, 64870, 0, 83076, 74924, 0, 0, 0, 0, 0,
+    78739, 0, 0, 0, 0, 0, 0, 3726, 0, 0, 0, 0, 0, 121432, 129457, 0, 0, 0, 0,
+    0, 74901, 0, 0, 0, 0, 0, 124944, 113781, 0, 7410, 2669, 903, 0, 0, 0,
+    127232, 74603, 0, 128264, 0, 128411, 0, 0, 11732, 0, 72797, 41448, 41461,
+    124934, 0, 917558, 0, 8819, 0, 0, 74606, 0, 121412, 74835, 0, 9168,
+    65786, 0, 73691, 0, 67665, 0, 11758, 68425, 0, 0, 0, 128044, 0, 19924,
+    67312, 0, 128755, 64551, 0, 8516, 0, 0, 7561, 983980, 74018, 0, 0, 0, 0,
+    83074, 83075, 0, 11233, 83062, 83066, 3787, 83070, 83055, 41458, 83059,
+    41463, 65308, 41459, 8683, 775, 0, 65584, 69923, 0, 110798, 110799,
+    110796, 43440, 0, 0, 0, 3656, 0, 0, 0, 67694, 1599, 83138, 83139, 8514,
+    8513, 83036, 83135, 83136, 110794, 110795, 83131, 83132, 0, 0, 0, 11684,
+    10542, 9937, 83150, 0, 75037, 83145, 65730, 83147, 0, 8427, 83142, 55246,
+    0, 0, 11497, 0, 0, 0, 119222, 0, 983598, 0, 10621, 0, 0, 129295, 119111,
+    120745, 0, 0, 0, 11648, 83126, 83127, 42118, 83129, 83122, 65512, 83124,
+    83125, 0, 0, 0, 83121, 74530, 128456, 0, 0, 0, 65724, 0, 0, 0, 65727, 0,
+    0, 64963, 73830, 66042, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0,
+    65173, 129122, 0, 70331, 0, 0, 0, 0, 129419, 0, 0, 0, 1687, 0, 0, 0, 0,
+    0, 0, 10526, 0, 8323, 0, 83301, 11731, 0, 0, 65460, 12242, 0, 0, 10843,
+    11554, 0, 0, 8266, 0, 121101, 0, 0, 0, 0, 67667, 0, 119155, 0, 0, 119636,
+    67857, 0, 0, 0, 11755, 66305, 0, 0, 10917, 93979, 113688, 0, 2040, 92596,
+    0, 0, 0, 0, 1227, 83119, 83120, 0, 0, 83115, 83116, 11149, 4978, 83111,
+    1984, 11830, 83114, 128934, 74548, 0, 9373, 0, 0, 0, 0, 0, 0, 0, 0, 9237,
+    9390, 0, 0, 0, 0, 0, 1830, 0, 0, 0, 0, 0, 128577, 983820, 68086, 0, 0, 0,
+    983059, 0, 983144, 0, 0, 0, 72197, 55291, 11683, 0, 0, 0, 11451, 0,
+    72714, 3731, 2359, 0, 67844, 0, 121503, 548, 121502, 983245, 121405,
+    983248, 0, 66272, 0, 64678, 0, 9547, 0, 0, 1614, 0, 0, 66307, 128092,
+    1358, 120871, 428, 0, 1466, 0, 10982, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0,
+    5804, 73464, 0, 0, 0, 70167, 9057, 42446, 0, 125097, 0, 0, 8250, 10952,
+    8048, 0, 129155, 0, 118955, 0, 0, 126586, 4407, 74648, 0, 0, 0, 8448,
+    92491, 0, 0, 12675, 12659, 0, 0, 983280, 68077, 55273, 10766, 12012,
+    2386, 0, 9170, 0, 9123, 128194, 0, 0, 0, 0, 129942, 0, 0, 0, 0, 0, 0,
+    8709, 0, 983581, 0, 0, 0, 0, 0, 0, 0, 128342, 0, 577, 128610, 0, 0,
+    124999, 68087, 74840, 126474, 127036, 0, 0, 0, 1414, 124963, 9683, 43486,
+    92231, 0, 2536, 0, 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0,
+    0, 0, 0, 0, 0, 0, 0, 66323, 66324, 0, 0, 3106, 65917, 0, 0, 0, 891, 0, 0,
+    42624, 0, 0, 8824, 65089, 0, 10936, 0, 0, 0, 0, 92688, 0, 0, 0, 0, 12745,
+    0, 0, 41285, 3547, 0, 0, 129877, 0, 0, 6089, 0, 68490, 120578, 4170,
+    1029, 127761, 0, 0, 42374, 0, 744, 917624, 0, 0, 0, 93046, 0, 3551, 0, 0,
+    4623, 0, 0, 12340, 0, 65136, 0, 0, 0, 0, 0, 0, 0, 72291, 0, 0, 120778, 0,
+    11972, 0, 78757, 0, 122886, 177, 122894, 0, 0, 0, 0, 55243, 0, 0, 0,
+    70172, 120249, 120242, 128027, 120243, 0, 0, 0, 120237, 120245, 94079, 0,
+    0, 9136, 120240, 120614, 41280, 0, 0, 0, 0, 74149, 128327, 0, 0, 66361,
+    12601, 72194, 64360, 65163, 0, 0, 0, 0, 0, 0, 5404, 43332, 3667, 7936,
+    12925, 0, 0, 0, 0, 0, 10874, 65505, 0, 0, 0, 0, 128920, 983662, 0, 0, 0,
+    0, 0, 0, 0, 0, 66677, 0, 0, 0, 70088, 74148, 0, 0, 72868, 120230, 120224,
+    74172, 0, 0, 94096, 0, 128414, 120636, 0, 127519, 917609, 917616, 0,
+    128652, 0, 0, 11441, 0, 3512, 0, 0, 43597, 0, 0, 72734, 68153, 41563, 0,
+    0, 129352, 41544, 0, 0, 0, 0, 129177, 0, 0, 0, 118908, 0, 78108, 67396,
+    73804, 64711, 0, 0, 917610, 0, 0, 0, 11557, 127776, 0, 12079, 0, 0, 0, 0,
+    128861, 0, 0, 0, 0, 0, 983200, 8103, 72303, 128174, 92486, 110698, 0,
+    64587, 0, 0, 124961, 0, 0, 0, 126481, 0, 0, 0, 0, 0, 70348, 1450, 0,
+    1340, 0, 0, 128970, 0, 0, 125117, 0, 0, 0, 0, 6539, 92948, 0, 128213,
+    125060, 0, 0, 0, 3973, 0, 70504, 121193, 7982, 0, 0, 127194, 0, 0, 0,
+    128408, 118968, 6417, 120619, 129748, 0, 0, 0, 129455, 4919, 65121,
+    110872, 7755, 0, 0, 64548, 0, 1621, 0, 0, 0, 0, 0, 12188, 0, 0, 0, 0,
+    5015, 0, 0, 42590, 70354, 1756, 0, 0, 0, 120694, 0, 0, 7555, 73874, 5408,
+    2817, 1214, 69919, 0, 983125, 0, 0, 125055, 127195, 7957, 0, 0, 1056,
+    74944, 0, 0, 0, 0, 7073, 74979, 0, 70853, 0, 110874, 0, 0, 2341, 126644,
+    8484, 0, 0, 68322, 0, 8461, 67721, 42269, 0, 0, 43709, 43708, 9451, 7571,
+    13073, 43847, 126647, 0, 983258, 0, 0, 0, 8781, 12894, 78134, 0, 92288,
+    0, 0, 78184, 0, 11338, 120768, 0, 0, 0, 0, 0, 121367, 65021, 64795,
+    74574, 0, 10047, 0, 0, 0, 0, 0, 0, 119181, 163, 576, 9895, 0, 0, 74591,
+    0, 0, 66888, 0, 0, 0, 0, 0, 0, 7017, 128111, 0, 0, 129922, 0, 41591,
     11036, 65252, 120795, 129488, 0, 0, 0, 0, 0, 0, 8887, 0, 7295, 71203, 0,
-    127221, 0, 0, 0, 0, 8755, 0, 0, 8147, 73127, 0, 0, 0, 0, 129377, 0,
+    127221, 0, 0, 0, 0, 8755, 0, 0, 8147, 73127, 0, 0, 121348, 0, 129377, 0,
     74499, 0, 0, 0, 4619, 0, 6654, 123192, 0, 0, 0, 65689, 10128, 0, 129612,
     0, 0, 92651, 0, 2401, 0, 8792, 0, 0, 74980, 0, 92246, 0, 0, 0, 12886, 0,
     66624, 0, 0, 74133, 65170, 0, 74135, 0, 0, 9984, 73867, 3010, 0, 70349,
     10698, 41475, 0, 119151, 0, 119152, 0, 0, 9100, 0, 0, 0, 78116, 64780,
     2001, 0, 55230, 0, 4052, 0, 7626, 78080, 0, 0, 0, 41477, 0, 0, 0, 43707,
-    74127, 0, 0, 0, 78086, 73758, 2335, 10663, 0, 0, 0, 119602, 0, 0, 70325,
-    0, 41443, 0, 0, 0, 9711, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 12821, 0,
-    0, 118978, 0, 65274, 0, 94082, 0, 127515, 0, 0, 43446, 0, 0, 0, 0,
-    127985, 0, 10206, 127167, 6375, 2673, 0, 0, 0, 43219, 129355, 0, 0, 0, 0,
-    0, 11799, 0, 68466, 0, 0, 0, 0, 0, 120736, 0, 7203, 0, 0, 70361, 129077,
-    120615, 127216, 0, 0, 0, 0, 43121, 0, 128366, 72161, 0, 0, 0, 121260,
-    73781, 70365, 0, 68039, 70446, 10057, 0, 0, 0, 127399, 120963, 0, 2307,
-    0, 0, 0, 0, 73873, 0, 94035, 0, 0, 0, 0, 0, 7327, 0, 0, 440, 0, 0, 68613,
-    75059, 0, 0, 9957, 0, 0, 8046, 0, 119158, 0, 0, 68609, 0, 129405, 1521,
-    129460, 92256, 65344, 0, 11850, 68737, 0, 0, 68914, 7303, 65770, 5243, 0,
-    5239, 65771, 121429, 0, 5237, 0, 68756, 0, 5247, 0, 0, 0, 12873, 5764, 0,
-    0, 3008, 118981, 128102, 0, 0, 55231, 41103, 0, 92756, 0, 0, 92717,
-    70074, 7872, 74886, 917567, 8731, 65378, 0, 0, 11316, 128163, 126600,
-    70360, 3019, 9997, 0, 0, 9456, 129545, 0, 0, 129555, 0, 0, 92682, 4281,
-    0, 0, 0, 118982, 0, 69993, 78096, 0, 78095, 0, 78098, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 2134, 0, 10116, 9877, 70679, 0, 0, 92723, 8379, 0, 6778, 0, 0,
-    8243, 0, 0, 0, 0, 128008, 0, 0, 0, 983630, 119668, 0, 92722, 983098,
-    5637, 125115, 0, 0, 120479, 0, 113730, 0, 0, 194990, 64432, 0, 70363,
-    121368, 1156, 68052, 0, 0, 120482, 0, 68030, 0, 0, 0, 7634, 0, 0, 65536,
-    0, 0, 0, 7702, 0, 78890, 0, 65779, 65783, 195066, 120961, 5700, 0, 0,
-    92161, 2339, 92476, 5697, 0, 0, 0, 74923, 0, 5696, 92677, 0, 3862, 0, 0,
-    0, 983055, 0, 0, 0, 0, 5701, 9722, 41490, 41370, 5698, 0, 0, 0, 42204,
-    55270, 8571, 0, 0, 43859, 0, 78731, 0, 12184, 0, 0, 0, 0, 0, 5650, 0,
-    64712, 120474, 0, 120458, 5647, 120473, 7387, 0, 92675, 11477, 5646, 0,
-    11018, 0, 0, 0, 0, 0, 0, 0, 128459, 126128, 5651, 0, 0, 0, 5648, 0,
-    120920, 0, 127517, 3545, 0, 6984, 0, 0, 0, 69414, 126613, 0, 10123, 0, 0,
-    0, 0, 65020, 74885, 119166, 0, 0, 0, 0, 0, 1140, 78426, 0, 0, 0, 0, 8128,
-    9889, 0, 0, 1815, 0, 890, 0, 3267, 0, 0, 0, 0, 4410, 125081, 10576, 8102,
-    0, 580, 74232, 0, 0, 0, 0, 0, 19938, 0, 0, 0, 0, 3298, 6546, 0, 0, 0, 0,
-    6134, 41246, 0, 0, 0, 917770, 0, 6264, 0, 0, 0, 0, 0, 0, 69445, 0, 0, 0,
-    92697, 11915, 10377, 0, 10072, 0, 0, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    125136, 0, 11201, 92708, 74769, 0, 13263, 0, 0, 92404, 126066, 73822, 0,
-    0, 64917, 0, 0, 494, 128026, 0, 65098, 0, 956, 125265, 129556, 0, 73740,
-    0, 0, 0, 74281, 128638, 0, 0, 69217, 120930, 0, 0, 0, 0, 0, 43088, 0,
-    126269, 100948, 0, 65229, 0, 0, 0, 0, 0, 0, 3907, 118833, 64526, 11829,
-    68197, 0, 0, 11475, 70329, 3020, 42264, 0, 0, 0, 7098, 0, 0, 127967, 957,
-    42696, 0, 3016, 0, 0, 0, 0, 0, 121248, 92510, 3006, 4620, 0, 0, 0, 0,
-    129369, 129425, 0, 0, 0, 126246, 8626, 0, 128824, 0, 65377, 0, 983102,
-    42920, 1698, 0, 64477, 0, 0, 43813, 100432, 100431, 100434, 100433,
-    100436, 70321, 100438, 100437, 100440, 100439, 0, 121024, 0, 70327,
-    100441, 55252, 100443, 100442, 100445, 100444, 66641, 100446, 100449,
-    100448, 0, 100450, 113820, 74866, 64375, 0, 127850, 129477, 0, 0, 0, 0,
-    983780, 0, 0, 120827, 0, 0, 123637, 0, 0, 0, 0, 8110, 100421, 0, 100423,
-    5830, 100425, 100424, 100427, 100426, 100429, 100428, 42389, 78611,
-    121398, 0, 0, 0, 0, 0, 0, 0, 83342, 983935, 0, 127147, 119187, 2135,
-    11836, 0, 0, 78869, 42313, 5579, 0, 70384, 983082, 94002, 0, 5578, 11840,
-    73006, 42023, 69849, 5669, 92559, 0, 0, 68833, 917845, 128275, 5583, 0,
-    0, 42426, 5580, 42276, 0, 892, 2220, 42465, 74313, 73440, 5795, 194991,
-    68774, 65702, 68770, 0, 65695, 0, 65710, 128399, 0, 0, 68783, 0, 0, 0,
-    1638, 10966, 0, 917547, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 6374, 0,
-    0, 120972, 0, 0, 0, 0, 0, 0, 0, 72204, 64900, 7153, 65785, 68826, 0,
-    3015, 68743, 68740, 68738, 68805, 6400, 68749, 68748, 68760, 68758,
-    11276, 68754, 100420, 372, 128829, 68761, 118874, 0, 41585, 128202, 0,
-    74228, 276, 0, 74234, 0, 74226, 0, 9007, 0, 41588, 125001, 119189, 10763,
-    0, 0, 0, 126097, 68525, 6257, 73112, 100393, 100396, 100395, 100398,
-    92409, 100400, 100399, 0, 74848, 0, 983592, 100401, 66498, 100403,
-    100402, 64790, 73454, 100407, 100406, 70356, 100408, 0, 100410, 66829,
-    70817, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65213, 0, 0, 0,
-    69726, 0, 73817, 0, 0, 5715, 0, 70408, 0, 5712, 100382, 41620, 100384,
-    3074, 5722, 100389, 100388, 73768, 0, 118906, 0, 0, 0, 66419, 119992, 0,
-    0, 0, 0, 128903, 78607, 0, 129074, 0, 0, 0, 0, 0, 0, 113682, 0, 11261, 0,
-    0, 0, 8701, 0, 11236, 0, 129490, 100390, 0, 0, 0, 78293, 0, 0, 0, 64946,
-    0, 0, 0, 70336, 0, 0, 93986, 68814, 42902, 0, 0, 0, 0, 92344, 0, 67845,
-    42641, 71444, 0, 0, 70366, 0, 100369, 100368, 5084, 100370, 0, 118861, 0,
-    733, 74646, 0, 0, 0, 125085, 0, 9218, 0, 100380, 100379, 71070, 0, 0, 0,
-    0, 70323, 0, 0, 5155, 0, 0, 983756, 0, 0, 72351, 0, 0, 0, 122891, 0, 0,
-    0, 100372, 100371, 100374, 100373, 100376, 100375, 100378, 100377, 4974,
-    100357, 100360, 100359, 0, 0, 0, 12205, 0, 0, 64507, 0, 0, 0, 0, 0, 0,
-    12149, 13088, 78290, 0, 12241, 0, 0, 0, 6932, 100352, 73676, 100354,
+    74127, 0, 0, 0, 78086, 73758, 2335, 10663, 0, 0, 129872, 119602, 0, 0,
+    70325, 0, 41443, 0, 0, 0, 9711, 1523, 0, 0, 41445, 0, 0, 8567, 41442,
+    12821, 0, 0, 118978, 0, 65274, 0, 94082, 0, 127515, 0, 0, 43446, 0, 0, 0,
+    0, 127985, 0, 10206, 127167, 6375, 2673, 0, 0, 0, 43219, 129355, 0, 0, 0,
+    0, 129400, 11799, 101225, 68466, 0, 0, 0, 0, 0, 120736, 0, 7203, 0, 0,
+    70361, 127213, 120615, 127216, 0, 0, 0, 0, 43121, 0, 128366, 72161, 0,
+    129868, 0, 121260, 73781, 70365, 0, 68039, 70446, 10057, 0, 0, 0, 101219,
+    120963, 101220, 2307, 0, 0, 0, 0, 73873, 0, 94035, 0, 0, 0, 0, 129983,
+    7327, 0, 0, 440, 0, 0, 68613, 75059, 0, 0, 9957, 0, 0, 8046, 0, 119158,
+    0, 0, 68609, 0, 129405, 1521, 129460, 92256, 65344, 0, 11850, 68737, 0,
+    0, 68914, 7303, 65770, 5243, 0, 5239, 65771, 121429, 0, 5237, 0, 68756,
+    0, 5247, 0, 0, 0, 12873, 5764, 0, 0, 3008, 118981, 128102, 0, 0, 55231,
+    41103, 0, 92756, 0, 0, 92717, 70074, 7872, 74886, 917567, 8731, 65378, 0,
+    0, 11316, 128163, 126600, 70360, 3019, 9997, 0, 0, 9456, 129545, 0, 0,
+    101192, 0, 0, 92682, 4281, 0, 0, 0, 118982, 0, 69993, 78096, 0, 78095, 0,
+    78098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2134, 0, 10116, 9877, 70679, 0, 0,
+    92723, 8379, 0, 6778, 0, 0, 8243, 0, 0, 0, 0, 128008, 0, 0, 0, 983630,
+    119668, 129962, 92722, 983098, 5637, 125115, 0, 0, 120479, 0, 113730, 0,
+    0, 194990, 64432, 0, 70363, 121368, 1156, 68052, 0, 0, 120482, 0, 68030,
+    0, 0, 0, 7634, 0, 0, 65536, 0, 0, 0, 7702, 0, 78890, 0, 65779, 65783,
+    195066, 120961, 5700, 0, 0, 92161, 2339, 92476, 5697, 0, 0, 0, 74923, 0,
+    5696, 92677, 0, 3862, 0, 0, 0, 983055, 0, 0, 0, 0, 5701, 9722, 41490,
+    41370, 5698, 0, 0, 0, 42204, 55270, 8571, 0, 0, 43859, 0, 78731, 0,
+    12184, 0, 0, 0, 0, 0, 5650, 0, 64712, 120474, 0, 120458, 5647, 120473,
+    7387, 0, 92675, 11477, 5646, 0, 11018, 0, 0, 0, 0, 0, 0, 69280, 128459,
+    126128, 5651, 0, 0, 0, 5648, 0, 120920, 0, 127517, 3545, 0, 6984, 0, 0,
+    0, 69414, 126613, 0, 10123, 0, 69274, 0, 0, 65020, 74885, 119166, 0, 0,
+    0, 0, 0, 1140, 78426, 0, 0, 0, 0, 8128, 9889, 0, 0, 1815, 0, 890, 0,
+    3267, 0, 0, 0, 983667, 4410, 125081, 10576, 8102, 0, 580, 74232, 0, 0, 0,
+    0, 0, 19938, 0, 0, 0, 0, 3298, 6546, 0, 0, 0, 0, 6134, 41246, 0, 0, 0,
+    917770, 0, 6264, 0, 0, 0, 0, 0, 0, 69445, 0, 0, 0, 92697, 11915, 10377,
+    0, 10072, 0, 0, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101164, 0, 11201, 92708,
+    74769, 0, 13263, 0, 0, 92404, 126066, 73822, 0, 0, 64917, 0, 0, 494,
+    128026, 0, 65098, 0, 956, 125265, 129556, 0, 73740, 0, 0, 0, 74281,
+    128638, 0, 0, 69217, 120930, 0, 0, 0, 0, 0, 9922, 0, 126269, 100948, 0,
+    65229, 0, 0, 0, 0, 0, 0, 3907, 118833, 64526, 11829, 68197, 0, 0, 11475,
+    70329, 3020, 42264, 0, 0, 0, 7098, 0, 0, 127967, 957, 42696, 0, 3016, 0,
+    0, 0, 0, 0, 121248, 92510, 3006, 4620, 0, 0, 0, 0, 129369, 129425, 0, 0,
+    0, 126246, 8626, 0, 128824, 0, 65377, 0, 983102, 42920, 1698, 0, 64477,
+    0, 0, 43813, 100432, 100431, 100434, 100433, 100436, 70321, 100438,
+    100437, 100440, 100439, 0, 121024, 0, 70327, 100441, 55252, 100443,
+    100442, 100445, 100444, 66641, 100446, 100449, 100448, 0, 100450, 113820,
+    74866, 64375, 0, 127850, 129477, 0, 0, 0, 0, 983780, 0, 0, 120827, 0, 0,
+    123637, 0, 0, 0, 101183, 8110, 100421, 0, 100423, 5830, 100425, 100424,
+    100427, 100426, 100429, 100428, 42389, 78611, 121398, 0, 0, 0, 0, 0, 0,
+    0, 83342, 983935, 0, 127147, 119187, 2135, 11836, 0, 0, 78869, 42313,
+    5579, 0, 70384, 983082, 94002, 0, 5578, 11840, 73006, 42023, 69849, 5669,
+    92559, 0, 0, 68833, 917845, 128275, 5583, 0, 0, 42426, 5580, 42276, 0,
+    892, 2220, 42465, 74313, 73440, 5795, 194991, 68774, 65702, 68770, 0,
+    65695, 0, 65710, 128399, 0, 0, 68783, 0, 0, 0, 1638, 10966, 0, 917547, 0,
+    118921, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 6374, 0, 0, 120972, 0, 0, 0, 0,
+    0, 0, 0, 72204, 64900, 7153, 65785, 68826, 0, 3015, 68743, 68740, 68738,
+    68805, 6400, 68749, 68748, 68760, 68758, 11276, 68754, 100420, 372,
+    101138, 68761, 118874, 0, 41585, 128202, 0, 74228, 276, 129895, 74234, 0,
+    74226, 0, 9007, 0, 41588, 125001, 119189, 10763, 0, 0, 983560, 126097,
+    68525, 6257, 73112, 100393, 100396, 100395, 100398, 92409, 100400,
+    100399, 101148, 74848, 120006, 983592, 100401, 66498, 100403, 100402,
+    64790, 73454, 100407, 100406, 70356, 100408, 0, 100410, 66829, 70817,
+    5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65213, 0, 0, 0, 69726,
+    0, 73817, 0, 0, 5715, 0, 70408, 0, 5712, 100382, 41620, 100384, 3074,
+    5722, 100389, 100388, 73768, 0, 118906, 0, 0, 0, 66419, 71972, 0, 0, 0,
+    0, 128903, 78607, 0, 129074, 0, 0, 0, 0, 0, 0, 113682, 0, 11261, 0, 0, 0,
+    8701, 0, 11236, 0, 129490, 100390, 0, 0, 0, 78293, 0, 0, 0, 64946, 0, 0,
+    0, 70336, 0, 0, 93986, 68814, 42902, 0, 0, 0, 0, 92344, 0, 67845, 42641,
+    71444, 0, 0, 70366, 101152, 100369, 100368, 5084, 100370, 101158, 118861,
+    0, 733, 74646, 0, 0, 0, 125085, 0, 9218, 0, 100380, 100379, 71070, 0, 0,
+    0, 0, 70323, 0, 0, 5155, 0, 0, 983756, 0, 0, 72351, 0, 0, 0, 122891, 0,
+    0, 0, 100372, 100371, 100374, 100373, 100376, 100375, 100378, 100377,
+    4974, 100357, 100360, 100359, 0, 0, 0, 12205, 0, 0, 64507, 0, 0, 0, 0, 0,
+    0, 12149, 13088, 78290, 0, 12241, 0, 0, 0, 6932, 100352, 73676, 100354,
     100353, 100356, 351, 68764, 0, 0, 0, 0, 73443, 0, 0, 100361, 42377,
-    100363, 100362, 100365, 100364, 100367, 9013, 4054, 0, 0, 113740, 0,
+    100363, 100362, 100365, 100364, 100367, 9013, 4054, 0, 0, 71939, 0,
     120782, 5585, 65881, 0, 0, 0, 0, 5584, 8358, 128975, 121177, 0, 0, 0,
     41616, 0, 983796, 2218, 0, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356,
-    0, 0, 0, 78609, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 129685, 0, 983791, 0, 0, 0,
-    5657, 0, 12915, 121453, 0, 10179, 5654, 12939, 0, 120799, 0, 0, 5652,
-    10945, 0, 0, 0, 113710, 0, 73449, 68069, 0, 70332, 0, 5659, 0, 0, 66729,
-    5655, 0, 0, 0, 68806, 0, 128225, 66310, 73444, 0, 0, 70362, 0, 11609, 0,
-    126990, 92949, 10272, 10304, 10368, 74511, 594, 10244, 10248, 10256,
-    983899, 0, 0, 3467, 41010, 0, 3331, 946, 0, 1495, 13184, 74330, 128242,
-    9562, 0, 123175, 0, 70036, 0, 0, 0, 123176, 0, 0, 0, 5666, 65227, 123174,
-    68419, 0, 11796, 123178, 0, 0, 10186, 123172, 7732, 983736, 0, 0, 0,
-    5668, 83334, 0, 74645, 5670, 0, 0, 12741, 126619, 123638, 5667, 19952,
+    0, 0, 0, 78609, 0, 0, 0, 0, 0, 129870, 0, 0, 8135, 129685, 0, 983791, 0,
+    0, 0, 5657, 0, 12915, 121453, 0, 10179, 5654, 12939, 0, 120799, 0, 0,
+    5652, 10945, 0, 0, 0, 113710, 0, 73449, 68069, 0, 70332, 0, 5659, 0, 0,
+    66729, 5655, 0, 0, 0, 68806, 0, 128225, 66310, 73444, 0, 0, 70362, 0,
+    11609, 0, 126990, 92949, 10272, 10304, 10368, 74511, 594, 10244, 10248,
+    10256, 983899, 0, 0, 3467, 41010, 0, 3331, 946, 0, 1495, 13184, 74330,
+    128242, 9562, 0, 123175, 0, 70036, 0, 0, 0, 123176, 0, 0, 0, 5666, 65227,
+    123174, 68419, 0, 11796, 123178, 0, 0, 10186, 123172, 7732, 983736, 0, 0,
+    0, 5668, 83334, 0, 74645, 5670, 0, 0, 12741, 126619, 123638, 5667, 19952,
     120807, 113766, 12749, 0, 67757, 2263, 0, 0, 119260, 129131, 9286, 83335,
     128457, 83336, 70359, 0, 3571, 13247, 5874, 78279, 73447, 68435, 78278,
     78267, 78268, 0, 78265, 553, 113768, 0, 93053, 5829, 0, 4587, 78285,
-    78299, 0, 12746, 0, 70338, 0, 5633, 0, 94101, 94102, 94099, 94100, 94105,
-    74856, 94103, 12742, 0, 983818, 0, 0, 0, 70330, 0, 983811, 0, 0, 0,
-    12148, 0, 0, 0, 0, 0, 64938, 67234, 5634, 0, 0, 2146, 0, 118880, 2425,
+    78299, 129699, 12746, 0, 70338, 0, 5633, 0, 94101, 94102, 94099, 94100,
+    94105, 74856, 94103, 12742, 0, 983818, 0, 0, 0, 70330, 0, 983811, 0, 0,
+    0, 12148, 0, 0, 0, 0, 0, 64938, 67234, 5634, 0, 0, 2146, 0, 118880, 2425,
     65182, 983813, 43636, 0, 0, 328, 0, 68736, 0, 5636, 123163, 5329, 0,
     5638, 0, 7940, 0, 43223, 43760, 5635, 3373, 72424, 78292, 74223, 73441,
     68763, 78287, 9833, 0, 74208, 41635, 0, 0, 43040, 78297, 68778, 78295,
@@ -26942,45 +27796,46 @@
     124939, 0, 0, 42494, 3073, 0, 0, 42302, 0, 126553, 70810, 0, 72401, 0, 0,
     0, 129319, 4877, 100681, 100684, 100683, 10548, 100685, 100688, 100687,
     100690, 64798, 70805, 5346, 0, 126570, 0, 4874, 0, 0, 0, 0, 0, 65884, 0,
-    0, 0, 11378, 0, 42785, 0, 3251, 11203, 0, 0, 0, 0, 11052, 0, 5342, 8317,
-    0, 0, 5340, 0, 0, 128599, 0, 129538, 0, 128395, 0, 128510, 0, 0, 9142, 0,
-    0, 0, 10938, 0, 0, 1182, 127381, 4829, 0, 0, 72438, 529, 0, 0, 0, 10586,
-    10790, 10839, 121427, 41593, 100669, 0, 0, 41594, 225, 66418, 0, 0,
-    983950, 11376, 0, 41596, 0, 0, 0, 0, 11084, 3194, 0, 78306, 78305, 0, 0,
-    0, 11324, 0, 0, 8420, 127756, 128844, 0, 41338, 129683, 11485, 0, 41322,
-    66605, 100671, 0, 100673, 100672, 100675, 5161, 41330, 100676, 100679,
-    100678, 100659, 100658, 0, 100660, 0, 100485, 12361, 0, 12359, 983559,
-    41369, 66412, 12191, 0, 0, 0, 0, 78221, 41376, 0, 9870, 0, 41385, 65824,
-    100651, 11938, 100653, 100652, 100655, 100654, 42678, 100656, 0, 64649,
-    0, 0, 0, 0, 0, 983948, 100662, 100661, 100664, 66334, 100666, 70280, 832,
-    100667, 0, 78473, 66007, 78471, 65703, 0, 0, 0, 12357, 0, 41395, 0, 0, 0,
-    0, 0, 0, 0, 0, 41114, 65466, 0, 983825, 6024, 0, 9979, 0, 0, 0, 0, 0, 0,
-    0, 4285, 0, 0, 4230, 0, 7367, 0, 92353, 7563, 42376, 0, 128532, 0, 0, 0,
-    0, 0, 0, 78466, 0, 12208, 128138, 0, 66311, 71309, 0, 41130, 78286, 0, 0,
-    70047, 0, 6022, 0, 0, 0, 0, 0, 41125, 0, 66453, 0, 41107, 0, 41121, 5300,
-    0, 0, 0, 0, 74801, 70855, 2074, 73456, 0, 0, 12453, 0, 0, 0, 0, 68159,
-    12457, 0, 0, 66278, 0, 0, 0, 0, 0, 66637, 12455, 0, 128473, 0, 12449, 0,
-    71224, 0, 0, 66908, 0, 10165, 0, 0, 113715, 0, 128223, 0, 0, 0, 0, 4993,
-    0, 6168, 74033, 4995, 0, 69459, 120522, 4639, 0, 72223, 0, 0, 0, 0, 0, 0,
-    69734, 0, 0, 0, 0, 0, 0, 83310, 0, 0, 0, 0, 0, 0, 0, 0, 129594, 4953, 0,
-    0, 0, 0, 83311, 0, 73453, 65688, 0, 10125, 3517, 0, 0, 0, 65094, 74791,
-    78262, 10627, 66333, 78256, 78257, 83304, 78253, 0, 71317, 64923, 0,
-    65208, 10608, 78263, 78264, 0, 0, 0, 65883, 0, 0, 74914, 0, 0, 0, 0, 0,
-    12912, 119012, 0, 128191, 0, 0, 129586, 0, 1290, 0, 0, 0, 0, 113719,
-    71442, 0, 0, 8978, 0, 119135, 120979, 10527, 71079, 0, 0, 0, 0, 0, 0,
-    5336, 0, 0, 6934, 0, 10780, 0, 0, 78767, 0, 0, 0, 347, 0, 0, 78775,
-    64675, 41582, 78774, 78771, 68094, 74903, 78769, 69221, 69657, 0, 0,
-    11153, 120981, 78526, 0, 0, 0, 0, 41584, 0, 69464, 0, 0, 0, 0, 43510,
-    66661, 0, 66306, 78791, 66384, 0, 6609, 0, 0, 11319, 0, 128964, 0, 41730,
-    0, 0, 127920, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 0, 41726, 0, 0,
-    5758, 0, 0, 41140, 2028, 78092, 0, 0, 0, 92739, 983195, 41138, 0, 0, 0,
-    125082, 1115, 127060, 9794, 127062, 67671, 92238, 12237, 78787, 66314,
-    78785, 9290, 73668, 78783, 78780, 78781, 127144, 7926, 0, 0, 0, 64398,
-    100924, 71274, 12311, 0, 78796, 78798, 78794, 78795, 78792, 78793, 0, 0,
-    0, 73455, 0, 0, 0, 42142, 9968, 11583, 0, 7092, 0, 9627, 78536, 73677,
-    78535, 0, 0, 1248, 10148, 127755, 0, 0, 0, 0, 66447, 0, 0, 0, 0, 65305,
-    0, 4031, 42794, 119986, 0, 8154, 0, 0, 128028, 126259, 0, 125220, 73452,
-    0, 0, 0, 6696, 0, 119599, 0, 0, 0, 4364, 0, 0, 0, 120976, 0, 120922, 0,
+    0, 0, 11378, 0, 42785, 0, 3251, 11203, 0, 0, 0, 69568, 11052, 0, 5342,
+    8317, 0, 0, 5340, 0, 0, 128599, 0, 129538, 0, 128395, 0, 128510, 0, 0,
+    9142, 0, 0, 0, 10938, 0, 0, 1182, 127381, 4829, 0, 0, 72438, 529, 0, 0,
+    0, 10586, 10790, 10839, 121427, 41593, 100669, 0, 0, 41594, 225, 66418,
+    0, 0, 983950, 11376, 0, 41596, 0, 0, 0, 0, 11084, 3194, 0, 78306, 78305,
+    0, 0, 0, 11324, 0, 0, 8420, 127756, 128844, 0, 41338, 129683, 11485, 0,
+    41322, 66605, 100671, 0, 100673, 100672, 100675, 5161, 41330, 100676,
+    100679, 100678, 100659, 100658, 0, 100660, 0, 100485, 12361, 0, 12359,
+    983559, 41369, 66412, 12191, 0, 0, 0, 0, 78221, 41376, 0, 9870, 0, 41385,
+    65824, 100651, 11938, 100653, 100652, 100655, 100654, 42678, 100656, 0,
+    64649, 0, 0, 0, 0, 0, 983948, 100662, 100661, 100664, 66334, 100666,
+    70280, 832, 100667, 2240, 78473, 66007, 78471, 65703, 0, 0, 0, 12357, 0,
+    41395, 0, 0, 0, 0, 0, 0, 983461, 0, 41114, 65466, 0, 983825, 6024, 0,
+    9979, 0, 0, 0, 0, 0, 0, 0, 4285, 0, 0, 4230, 0, 7367, 0, 92353, 7563,
+    42376, 0, 128532, 0, 0, 0, 0, 0, 0, 78466, 0, 12208, 128138, 0, 66311,
+    71309, 0, 41130, 78286, 0, 0, 70047, 0, 6022, 0, 0, 0, 0, 0, 41125, 0,
+    66453, 0, 41107, 0, 41121, 5300, 0, 0, 0, 0, 74801, 70855, 2074, 73456,
+    0, 0, 12453, 0, 0, 0, 0, 68159, 12457, 0, 0, 66278, 0, 0, 0, 0, 0, 66637,
+    12455, 0, 128473, 0, 12449, 0, 71224, 0, 0, 66908, 0, 10165, 0, 0,
+    113715, 0, 128223, 0, 0, 0, 0, 4993, 0, 6168, 74033, 4995, 0, 69459,
+    120522, 4639, 0, 72223, 0, 0, 0, 0, 0, 0, 69734, 0, 0, 0, 0, 0, 0, 83310,
+    0, 0, 0, 0, 0, 0, 0, 0, 129594, 4953, 0, 0, 0, 0, 83311, 0, 73453, 65688,
+    0, 10125, 3517, 0, 0, 0, 65094, 74791, 78262, 10627, 66333, 78256, 78257,
+    83304, 78253, 0, 71317, 64923, 0, 65208, 10608, 78263, 78264, 0, 0, 0,
+    65883, 0, 0, 74914, 0, 0, 0, 0, 0, 12912, 119012, 0, 128191, 0, 0,
+    129586, 0, 1290, 0, 0, 0, 0, 113719, 71442, 0, 0, 8978, 0, 119135,
+    120979, 10527, 71079, 0, 0, 0, 0, 0, 0, 5336, 0, 0, 6934, 0, 10780, 0, 0,
+    78767, 0, 0, 0, 347, 0, 0, 78775, 64675, 41582, 78774, 78771, 68094,
+    74903, 78769, 69221, 69657, 0, 0, 11153, 120981, 78526, 0, 0, 0, 0,
+    41584, 0, 69464, 0, 0, 0, 0, 43510, 66661, 0, 66306, 78791, 66384, 0,
+    6609, 0, 0, 11319, 0, 128964, 0, 41730, 0, 0, 127920, 0, 65172, 41728,
+    41721, 0, 0, 0, 41203, 0, 0, 41726, 0, 0, 5758, 0, 0, 41140, 2028, 78092,
+    0, 0, 0, 92739, 983195, 41138, 0, 0, 0, 125082, 1115, 127060, 9794,
+    127062, 67671, 92238, 12237, 78787, 66314, 78785, 9290, 73668, 78783,
+    78780, 78781, 127144, 7926, 0, 0, 0, 64398, 100924, 71274, 12311, 101268,
+    78796, 78798, 78794, 78795, 78792, 78793, 0, 101270, 0, 73455, 0, 0, 0,
+    42142, 9968, 11583, 0, 7092, 129835, 9627, 78536, 73677, 78535, 0, 0,
+    1248, 10148, 127755, 0, 0, 101273, 0, 66447, 0, 0, 0, 0, 65305, 0, 4031,
+    42794, 119986, 0, 8154, 0, 0, 128028, 126259, 129926, 125220, 73452, 0,
+    0, 0, 6696, 0, 119599, 0, 0, 0, 4364, 0, 0, 0, 120976, 0, 120922, 0,
     10124, 7526, 8601, 0, 68246, 0, 129318, 1418, 10885, 0, 0, 0, 0, 0, 0,
     4571, 0, 0, 0, 12078, 41597, 0, 10933, 0, 72129, 0, 0, 0, 41599, 0, 0, 0,
     12950, 119190, 10498, 0, 66782, 4239, 0, 0, 66511, 68066, 2637, 110685,
@@ -26989,419 +27844,425 @@
     120730, 0, 0, 41732, 0, 41736, 983201, 41731, 0, 0, 70842, 0, 0, 0, 0,
     129329, 0, 66853, 0, 0, 78742, 72755, 11277, 65892, 0, 10620, 92272, 0,
     0, 0, 0, 73942, 0, 100479, 0, 119093, 3459, 0, 129398, 0, 0, 72130,
-    92512, 0, 66377, 69781, 0, 0, 111304, 3161, 69981, 0, 0, 0, 0, 0, 9016,
-    78153, 0, 0, 43641, 0, 121018, 0, 0, 0, 0, 0, 0, 0, 68342, 120950, 94043,
-    0, 12332, 121310, 6086, 41722, 0, 120709, 0, 0, 111305, 0, 0, 128307,
-    74288, 0, 74546, 0, 129178, 0, 0, 42460, 0, 0, 0, 0, 120941, 42421, 0,
-    41723, 0, 64358, 11460, 983506, 0, 64718, 120838, 66869, 0, 42348, 0,
-    6752, 452, 42500, 0, 128258, 0, 42308, 0, 0, 0, 12932, 0, 69968, 42950,
-    66827, 917582, 0, 0, 8302, 0, 0, 0, 0, 7250, 13214, 10041, 8105, 65568,
-    127780, 69969, 127759, 0, 0, 121467, 0, 121466, 73666, 0, 69878, 0, 5538,
-    9987, 0, 118932, 129307, 0, 552, 0, 7357, 10785, 0, 0, 4557, 0, 0, 10171,
-    68320, 0, 5540, 0, 0, 281, 0, 0, 42622, 0, 5536, 0, 0, 1388, 0, 0, 10504,
-    0, 0, 11531, 74324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3663, 0, 121081, 70335,
-    74859, 0, 5334, 0, 110738, 72319, 0, 11305, 0, 68456, 0, 66611, 0, 19907,
-    64363, 3478, 7583, 7679, 74154, 0, 0, 1158, 0, 0, 73748, 0, 0, 1915,
-    4846, 0, 120132, 118984, 120134, 120129, 120128, 805, 120130, 64438,
-    120124, 8760, 120126, 72137, 120120, 120123, 94003, 0, 0, 0, 0, 0, 12225,
-    0, 0, 0, 70173, 75045, 0, 129515, 8083, 0, 0, 0, 111094, 92626, 0, 0, 0,
-    0, 0, 0, 110837, 0, 67699, 560, 5643, 0, 0, 0, 0, 0, 0, 0, 120144, 0,
-    120661, 78304, 1597, 120143, 120142, 206, 70126, 120139, 120138, 8168, 0,
-    73086, 0, 0, 0, 983827, 125036, 0, 0, 3546, 42573, 66811, 0, 0, 128397,
-    8400, 0, 0, 0, 0, 0, 7903, 9287, 72791, 0, 0, 0, 0, 72134, 66603, 1695,
-    917861, 0, 0, 111101, 0, 0, 0, 0, 0, 0, 0, 111099, 0, 111098, 4754, 0,
-    69222, 128229, 0, 0, 7354, 7408, 0, 0, 121181, 0, 0, 0, 12739, 0, 1278,
-    4187, 0, 42119, 42120, 0, 121158, 0, 12467, 0, 68902, 0, 12463, 0, 0,
-    118827, 0, 9664, 70834, 74475, 0, 0, 0, 0, 0, 3661, 0, 0, 9022, 127955,
-    0, 0, 126257, 0, 6118, 222, 126250, 3884, 0, 74151, 0, 6502, 0, 11085,
-    121261, 0, 0, 0, 0, 0, 0, 0, 0, 12461, 0, 0, 0, 94059, 11254, 10860,
-    64880, 0, 64685, 0, 0, 94087, 7776, 11219, 0, 0, 121339, 69730, 801,
-    43165, 0, 78212, 0, 0, 13277, 0, 12951, 0, 9906, 5486, 2334, 128672,
-    67680, 5483, 73732, 120884, 119128, 5484, 0, 127876, 2539, 0, 78507,
-    5485, 195065, 42697, 0, 0, 113689, 4502, 68057, 253, 73672, 0, 0, 9203,
-    0, 0, 0, 0, 0, 121242, 11127, 0, 0, 0, 13257, 0, 0, 0, 69645, 0, 0, 0,
-    70431, 0, 5693, 64470, 0, 66610, 67678, 0, 983659, 0, 0, 0, 0, 0, 0, 0,
-    94078, 0, 0, 66608, 3111, 0, 8804, 66607, 0, 0, 0, 66606, 0, 0, 0, 1436,
-    0, 55226, 0, 111287, 7393, 41592, 0, 0, 1598, 78101, 0, 0, 65193, 4423,
-    0, 113692, 10515, 41589, 0, 0, 0, 0, 1430, 0, 0, 120606, 0, 66223, 7619,
-    3255, 128280, 74032, 11549, 10735, 93038, 100741, 6801, 100743, 100746,
-    2148, 100748, 100747, 100750, 100749, 0, 121229, 0, 69243, 41724, 67716,
-    69669, 41690, 111269, 983647, 8380, 100355, 983830, 0, 0, 0, 0, 0, 0,
-    6333, 111264, 42315, 0, 129502, 111265, 0, 0, 5339, 74323, 0, 13004, 0,
-    0, 0, 0, 0, 0, 5684, 0, 0, 0, 5689, 0, 0, 68464, 12633, 12870, 0, 65183,
-    5688, 0, 0, 6310, 5686, 0, 0, 0, 120647, 70046, 50, 94095, 9871, 0, 0,
-    121446, 0, 0, 0, 66905, 0, 4448, 0, 121406, 113734, 72125, 1321, 0,
-    10640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12501, 0, 0, 0, 0, 8812, 0,
-    69986, 8673, 0, 129024, 0, 0, 2105, 72101, 72712, 0, 0, 0, 0, 0, 4636,
-    55262, 0, 4515, 2382, 0, 0, 7313, 0, 0, 0, 194626, 0, 0, 0, 0, 0, 0, 0,
-    10197, 194719, 0, 0, 0, 194718, 0, 0, 0, 64189, 0, 1873, 0, 0, 0, 0, 0,
-    983663, 0, 0, 0, 72282, 126991, 71113, 0, 0, 129340, 9489, 0, 70843, 0,
-    0, 0, 0, 128030, 13295, 43191, 0, 0, 1154, 0, 1205, 0, 0, 0, 12958, 0, 0,
-    0, 70846, 0, 10592, 0, 495, 0, 41712, 7983, 0, 0, 0, 6347, 69465, 7654,
+    92512, 0, 66377, 69781, 128718, 0, 111304, 3161, 69981, 0, 0, 0, 0, 0,
+    9016, 78153, 0, 0, 43641, 0, 121018, 0, 101279, 0, 0, 0, 0, 0, 68342,
+    120950, 94043, 0, 12332, 121310, 6086, 41722, 0, 120709, 0, 0, 111305, 0,
+    0, 128307, 74288, 0, 74546, 0, 129178, 129399, 0, 42460, 0, 0, 0, 0,
+    120941, 42421, 0, 41723, 110606, 64358, 11460, 983506, 0, 64718, 120838,
+    66869, 0, 42348, 0, 6752, 452, 42500, 0, 128258, 0, 42308, 0, 0, 0,
+    12932, 0, 69968, 42950, 66827, 917582, 0, 0, 8302, 0, 0, 0, 0, 7250,
+    13214, 10041, 8105, 65568, 127780, 69969, 127759, 0, 0, 121467, 0,
+    121466, 73666, 0, 69878, 0, 5538, 9987, 0, 118932, 129307, 0, 552, 0,
+    7357, 10785, 0, 0, 4557, 0, 0, 10171, 68320, 0, 5540, 0, 0, 281, 0, 0,
+    42622, 0, 5536, 0, 0, 1388, 0, 0, 10504, 0, 0, 11531, 74324, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 3663, 0, 121081, 70335, 74859, 0, 5334, 0, 110738,
+    72319, 0, 11305, 0, 68456, 0, 66611, 0, 19907, 64363, 3478, 7583, 7679,
+    74154, 0, 0, 1158, 0, 983871, 73748, 0, 0, 1915, 4846, 0, 120132, 118984,
+    120134, 120129, 120128, 805, 120130, 64438, 120124, 8760, 120126, 72137,
+    120120, 120123, 94003, 0, 0, 0, 0, 0, 12225, 0, 0, 0, 70173, 75045, 0,
+    129515, 8083, 0, 0, 0, 111094, 92626, 0, 0, 0, 0, 0, 0, 110837, 0, 67699,
+    560, 5643, 0, 0, 0, 0, 0, 0, 0, 120144, 0, 120661, 78304, 1597, 120143,
+    120142, 206, 70126, 120139, 120138, 8168, 0, 73086, 0, 0, 0, 983827,
+    125036, 0, 0, 3546, 42573, 66811, 0, 0, 128397, 8400, 0, 0, 0, 0, 0,
+    7903, 9287, 72791, 0, 0, 0, 0, 72134, 66603, 1695, 917861, 0, 0, 111101,
+    0, 0, 0, 0, 0, 0, 0, 111099, 0, 111098, 4754, 0, 69222, 128229, 0, 0,
+    7354, 7408, 0, 0, 121181, 0, 0, 0, 12739, 0, 1278, 4187, 0, 42119, 42120,
+    0, 121158, 0, 12467, 0, 68902, 0, 12463, 0, 0, 118827, 0, 9664, 70834,
+    74475, 0, 0, 0, 0, 0, 3661, 0, 0, 9022, 127955, 0, 101460, 126257, 0,
+    6118, 222, 126250, 3884, 0, 74151, 0, 6502, 0, 11085, 121261, 0, 0, 0, 0,
+    0, 0, 0, 0, 12461, 0, 0, 0, 94059, 11254, 10860, 64880, 0, 64685, 0, 0,
+    94087, 7776, 11219, 0, 0, 121339, 69730, 801, 43165, 0, 78212, 0, 0,
+    13277, 0, 12951, 0, 9906, 5486, 2334, 128672, 67680, 5483, 73732, 120884,
+    119128, 5484, 0, 127876, 2539, 0, 78507, 5485, 195065, 42697, 0, 0,
+    113689, 4502, 68057, 253, 73672, 0, 0, 9203, 0, 0, 0, 0, 0, 121242,
+    11127, 0, 0, 0, 13257, 0, 0, 0, 69645, 0, 0, 0, 70431, 0, 5693, 64470, 0,
+    66610, 67678, 0, 983659, 0, 0, 0, 0, 0, 0, 0, 94078, 0, 0, 66608, 3111,
+    0, 8804, 66607, 0, 0, 0, 66606, 0, 0, 0, 1436, 0, 55226, 0, 111287, 7393,
+    41592, 0, 0, 1598, 78101, 0, 0, 65193, 4423, 0, 113692, 10515, 41589, 0,
+    0, 0, 101485, 1430, 101486, 0, 120606, 0, 66223, 7619, 3255, 128280,
+    74032, 11549, 10735, 93038, 100741, 6801, 100743, 100746, 2148, 100748,
+    100747, 100750, 100749, 0, 121229, 101479, 69243, 41724, 67716, 69669,
+    41690, 111269, 983647, 8380, 100355, 983830, 0, 101480, 0, 0, 0, 0, 6333,
+    111264, 42315, 0, 129502, 111265, 0, 0, 5339, 74323, 0, 13004, 0, 0, 0,
+    0, 0, 0, 5684, 0, 0, 0, 5689, 0, 0, 68464, 12633, 12870, 0, 65183, 5688,
+    0, 0, 6310, 5686, 0, 0, 0, 120647, 70046, 50, 94095, 9871, 0, 0, 121446,
+    0, 0, 0, 66905, 0, 4448, 0, 121406, 113734, 72125, 1321, 0, 10640, 0, 0,
+    101497, 0, 0, 0, 0, 0, 0, 0, 0, 12501, 0, 0, 0, 0, 8812, 0, 69986, 8673,
+    0, 129024, 0, 0, 2105, 72101, 72712, 0, 129929, 0, 0, 0, 4636, 55262, 0,
+    4515, 2382, 0, 0, 7313, 101477, 0, 0, 194626, 0, 0, 0, 0, 0, 0, 0, 10197,
+    194719, 0, 0, 0, 194718, 0, 0, 0, 64189, 0, 1873, 0, 0, 0, 0, 0, 983663,
+    0, 0, 101499, 72282, 126991, 71113, 0, 0, 129340, 9489, 0, 70843, 0, 0,
+    0, 0, 128030, 13295, 43191, 0, 0, 1154, 0, 1205, 0, 0, 0, 12958, 0, 0, 0,
+    70846, 0, 10592, 0, 495, 0, 41712, 7983, 0, 0, 0, 6347, 69465, 7654,
     41710, 4196, 0, 0, 41709, 73772, 70832, 0, 9465, 983764, 0, 0, 917612, 0,
-    0, 41714, 0, 0, 0, 6343, 0, 0, 43996, 0, 8044, 0, 0, 41789, 0, 10809, 0,
-    0, 0, 0, 8146, 11025, 0, 120513, 642, 0, 0, 0, 12875, 0, 0, 13229, 0,
-    41788, 0, 0, 0, 41791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8428, 6569, 0, 0, 0,
-    0, 10167, 0, 68248, 8049, 0, 0, 0, 0, 128882, 4761, 0, 4766, 64623, 0,
-    121180, 194653, 118876, 0, 6912, 9232, 7033, 0, 0, 41545, 0, 0, 72160,
-    72107, 0, 0, 0, 3484, 0, 0, 0, 8503, 41539, 41527, 0, 0, 983823, 0, 0, 0,
-    41537, 0, 41541, 8282, 11817, 0, 128219, 0, 0, 126132, 0, 0, 70115,
-    66609, 111235, 65921, 0, 0, 194664, 0, 129326, 77970, 42246, 75030,
-    120605, 0, 65926, 7744, 68859, 94056, 74277, 126108, 0, 6966, 194633,
-    8136, 0, 0, 0, 0, 0, 4762, 0, 0, 0, 4765, 69443, 983573, 0, 4760, 0, 0,
-    10871, 43199, 0, 0, 93955, 0, 0, 11546, 0, 337, 0, 0, 0, 12279, 7768, 0,
-    128352, 0, 69812, 10143, 7883, 121444, 7880, 64618, 13012, 5704, 13010,
-    0, 0, 119531, 0, 0, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, 0, 13011, 0,
-    92569, 119161, 13009, 74771, 70159, 0, 0, 41793, 0, 74221, 120996, 41792,
-    111242, 94054, 126094, 0, 111244, 5709, 120689, 71076, 0, 0, 0, 0, 0,
-    5708, 0, 0, 0, 5706, 66362, 5705, 8791, 41797, 0, 10237, 66436, 0, 0, 0,
-    0, 128083, 13170, 0, 0, 0, 0, 41377, 0, 0, 10058, 125225, 0, 0, 0, 0, 0,
-    0, 0, 129641, 119525, 0, 0, 72350, 0, 983572, 2144, 0, 120765, 0, 0,
-    1754, 92226, 13246, 864, 0, 118926, 8972, 0, 7849, 0, 0, 13240, 0, 5192,
-    0, 0, 10948, 0, 13199, 0, 1236, 13208, 13261, 13189, 13188, 93993, 0,
-    7440, 0, 0, 0, 1844, 125229, 0, 13178, 0, 0, 0, 125230, 0, 0, 13260,
-    4550, 121249, 125227, 0, 71071, 0, 0, 68523, 0, 0, 11354, 94071, 0,
-    42795, 129317, 0, 0, 0, 125237, 0, 13194, 13274, 0, 0, 129533, 65586,
-    68311, 0, 119193, 4601, 194661, 0, 194658, 0, 194659, 0, 121422, 128790,
-    194657, 41717, 67402, 0, 121129, 41716, 127376, 7910, 0, 0, 754, 41944,
-    0, 8183, 120741, 2037, 0, 0, 0, 125, 0, 0, 0, 983124, 127922, 41719, 0,
-    7990, 12637, 13258, 9536, 71056, 0, 4427, 0, 71200, 0, 12217, 0, 41532,
-    129315, 0, 0, 0, 0, 111063, 83349, 0, 0, 120622, 0, 0, 0, 0, 43632, 0, 0,
-    8140, 0, 6260, 0, 0, 66765, 129657, 0, 3898, 0, 0, 13200, 0, 0, 66582, 0,
-    0, 0, 0, 1068, 71178, 13259, 12945, 0, 42203, 0, 3124, 69411, 0, 4386,
-    12224, 6973, 129563, 0, 0, 119535, 0, 121312, 0, 12232, 0, 0, 5681,
-    64578, 75023, 0, 13209, 0, 0, 0, 0, 0, 11053, 0, 74902, 128107, 128942,
-    7588, 0, 1693, 74942, 43204, 65831, 0, 0, 0, 68803, 111216, 111223, 0, 0,
-    65685, 9523, 65070, 0, 0, 0, 0, 0, 0, 0, 0, 13191, 0, 3500, 3139, 100643,
-    3170, 100645, 100644, 100647, 100646, 13006, 64433, 0, 100650, 941, 0, 0,
-    120967, 3727, 0, 0, 0, 0, 0, 0, 0, 94039, 129299, 92455, 0, 0, 64444, 0,
-    0, 43603, 94075, 65397, 288, 0, 0, 0, 10025, 73692, 0, 0, 68182, 0, 0, 0,
-    92438, 65395, 0, 0, 0, 65393, 83078, 121111, 0, 0, 0, 0, 0, 65394, 11548,
-    72305, 0, 65396, 0, 0, 13256, 1282, 0, 0, 0, 111085, 0, 0, 0, 111087,
-    72115, 0, 0, 0, 0, 0, 3304, 0, 0, 0, 126595, 72437, 68353, 0, 0, 42113,
-    0, 0, 0, 0, 0, 43094, 0, 0, 94037, 68317, 9035, 0, 0, 0, 0, 0, 70822,
-    128467, 164, 68309, 94067, 94000, 100631, 100634, 100633, 100636, 100635,
-    100638, 100637, 68808, 100639, 110665, 73893, 11099, 110664, 13175,
-    13207, 0, 127552, 0, 74643, 5929, 0, 0, 129192, 0, 11306, 0, 119059,
-    3180, 125102, 0, 0, 0, 13062, 0, 129551, 128707, 0, 0, 74428, 0, 128000,
-    0, 11251, 70204, 0, 10045, 0, 13275, 0, 11057, 0, 13276, 125133, 41525,
-    983084, 128015, 11444, 0, 129158, 0, 0, 41523, 127765, 0, 0, 0, 0, 0, 0,
-    0, 3858, 0, 119573, 0, 0, 0, 0, 0, 0, 101014, 369, 74908, 41784, 0,
-    120994, 0, 71180, 0, 0, 13210, 41782, 0, 0, 0, 41781, 10486, 74058,
-    43002, 0, 0, 0, 0, 0, 3741, 0, 0, 0, 0, 41222, 0, 128317, 3982, 0, 4388,
-    126105, 746, 0, 0, 0, 13131, 0, 0, 0, 0, 0, 10434, 8794, 0, 0, 0, 0, 0,
-    0, 11700, 4374, 0, 0, 0, 0, 0, 0, 917597, 0, 69814, 0, 6735, 73979,
-    13174, 73968, 13225, 0, 69808, 0, 0, 2365, 7841, 71476, 0, 120934, 66510,
-    128099, 0, 0, 0, 41785, 41171, 0, 13173, 4372, 0, 0, 0, 0, 128939, 0, 0,
-    12965, 384, 0, 0, 12685, 41473, 0, 13242, 13236, 0, 0, 0, 41787, 0,
-    70684, 0, 68486, 13272, 0, 13232, 13233, 65838, 0, 0, 11656, 0, 126110,
-    119885, 12861, 0, 13271, 0, 92737, 1096, 0, 0, 0, 0, 0, 0, 0, 5203, 0,
-    92902, 0, 13243, 13237, 12719, 0, 0, 0, 64884, 78043, 0, 0, 0, 0, 12014,
-    0, 120785, 0, 0, 13195, 41452, 64961, 41535, 0, 10459, 0, 124949, 0, 0,
-    0, 41533, 66337, 0, 92184, 0, 126091, 0, 0, 73849, 0, 43638, 0, 0, 6261,
-    0, 129568, 0, 1957, 0, 0, 0, 13292, 13206, 0, 0, 2925, 73809, 42576,
-    127559, 13212, 43238, 0, 13190, 13187, 0, 13198, 0, 0, 5242, 0, 0,
-    128146, 0, 0, 6770, 43331, 127539, 0, 0, 71074, 126466, 0, 41444, 0, 0,
-    64799, 5246, 119106, 13185, 9709, 0, 0, 92751, 0, 5238, 0, 71085, 0,
-    5236, 40979, 0, 74201, 8286, 0, 3936, 0, 11699, 0, 127249, 13235, 0,
-    41248, 127264, 13245, 13239, 0, 7969, 127266, 74832, 127251, 0, 120509,
-    0, 983874, 734, 127270, 0, 127254, 70297, 127273, 64921, 120969, 66631,
-    41771, 120490, 0, 983171, 41770, 1670, 42560, 0, 121349, 129634, 0,
-    41163, 0, 11136, 0, 11506, 0, 42841, 13267, 126109, 0, 41775, 0, 7130,
-    41773, 0, 0, 0, 0, 0, 0, 0, 42673, 65572, 0, 65250, 13265, 13264, 64518,
-    66798, 6100, 0, 0, 6740, 71080, 67814, 12967, 70028, 68101, 4583, 0, 0,
-    68097, 0, 0, 0, 0, 119211, 0, 0, 42653, 83181, 68102, 0, 7814, 71045, 0,
-    73702, 0, 0, 0, 9756, 6985, 0, 0, 74219, 0, 0, 129069, 124987, 5674, 0,
-    66421, 0, 5677, 5588, 0, 0, 0, 0, 5673, 0, 5676, 0, 94048, 0, 5672, 6476,
-    0, 0, 110951, 42511, 1727, 0, 0, 0, 0, 0, 0, 0, 3550, 736, 0, 4505, 5873,
-    74090, 5826, 55232, 5813, 0, 120712, 5841, 5837, 55234, 0, 3105, 64370,
-    5838, 5796, 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 0, 0, 71899, 0,
-    71235, 5806, 0, 0, 9037, 5671, 0, 0, 0, 0, 71266, 126616, 7296, 0, 0, 0,
-    0, 6980, 0, 72108, 0, 0, 0, 0, 0, 64613, 983891, 0, 0, 0, 0, 7114, 0,
-    72100, 43190, 93842, 128666, 72096, 42611, 42563, 0, 125080, 0, 6792,
-    43201, 72098, 0, 128719, 0, 72106, 0, 0, 5644, 0, 66627, 69727, 0, 0, 0,
-    65116, 0, 0, 0, 0, 66410, 94104, 41013, 0, 0, 0, 2869, 0, 41015, 0, 2785,
-    120616, 0, 73907, 194689, 0, 0, 0, 194688, 4759, 0, 0, 43192, 0, 1170,
-    43365, 69810, 73908, 0, 902, 0, 0, 0, 0, 8122, 66420, 129642, 0, 3861, 0,
-    11028, 0, 73820, 5714, 0, 0, 0, 807, 127001, 0, 0, 976, 113782, 0, 0, 0,
-    0, 0, 128657, 118801, 71043, 0, 127017, 0, 0, 5582, 0, 0, 5798, 0, 0, 0,
-    128521, 0, 0, 68058, 120553, 983183, 0, 0, 74933, 74283, 0, 0, 194698,
-    66044, 0, 0, 0, 0, 0, 10094, 0, 0, 10857, 69225, 0, 0, 93, 0, 10954, 0,
-    0, 0, 8171, 0, 0, 82996, 0, 0, 0, 119001, 92634, 0, 0, 5187, 120711,
-    71086, 0, 0, 0, 0, 5232, 0, 41009, 0, 41005, 0, 43205, 0, 0, 0, 194708,
-    0, 71054, 10028, 66478, 7076, 13182, 100385, 0, 0, 0, 0, 7972, 78786, 0,
-    0, 0, 78789, 11309, 3806, 73985, 0, 0, 0, 78819, 0, 125218, 0, 127532, 0,
-    0, 0, 78817, 0, 64366, 65156, 8814, 0, 0, 0, 0, 12836, 42725, 120079, 0,
-    0, 0, 0, 0, 13255, 0, 0, 7464, 0, 93831, 0, 0, 0, 0, 13213, 0, 0, 64516,
-    0, 0, 0, 41007, 983910, 0, 40995, 12209, 983914, 119136, 123635, 0, 0, 0,
-    0, 0, 69384, 43558, 5522, 0, 71061, 0, 74105, 3633, 983912, 119364,
-    41234, 41231, 0, 9771, 983917, 13251, 0, 0, 6262, 2784, 0, 71078, 8126,
-    66483, 0, 0, 441, 0, 0, 0, 41002, 40999, 0, 0, 7108, 0, 10890, 0, 74445,
-    8324, 0, 0, 74817, 2813, 119056, 74853, 983671, 0, 0, 0, 1193, 10462,
-    65197, 13253, 13252, 7829, 120992, 0, 0, 0, 0, 77911, 0, 77907, 0, 10386,
-    0, 41042, 0, 65944, 65683, 10338, 66469, 0, 0, 0, 0, 0, 41966, 0, 0, 0,
-    68915, 0, 0, 911, 983870, 128932, 40963, 0, 65159, 0, 0, 0, 5520, 0, 0,
-    0, 0, 0, 0, 0, 71081, 0, 0, 0, 0, 0, 983873, 0, 0, 66839, 0, 0, 0, 68647,
-    0, 5857, 68135, 92727, 119120, 983675, 13171, 0, 0, 0, 120338, 0, 0, 0,
-    13250, 69663, 0, 92201, 66397, 0, 0, 0, 8761, 12942, 5748, 92713, 92414,
-    0, 83174, 8796, 0, 0, 0, 43633, 0, 72805, 71073, 0, 0, 0, 0, 0, 12843,
-    4520, 0, 0, 73004, 983672, 0, 0, 194935, 110754, 64345, 0, 0, 110752, 0,
-    0, 0, 110750, 110758, 110751, 0, 0, 10427, 0, 73859, 0, 9755, 1110,
-    65239, 0, 0, 0, 0, 0, 0, 0, 194936, 0, 983802, 0, 70437, 3620, 0, 0,
-    72855, 0, 0, 0, 74250, 0, 0, 11980, 0, 66482, 67823, 0, 128345, 110768,
-    0, 0, 0, 0, 12891, 983767, 983648, 0, 2016, 0, 65668, 92311, 67696,
-    10366, 70117, 9155, 120652, 9786, 65082, 0, 8579, 0, 0, 0, 0, 4508,
-    64883, 0, 92522, 0, 0, 64592, 74276, 67688, 0, 0, 0, 69456, 0, 113821, 0,
-    12147, 9024, 66378, 66472, 0, 0, 0, 0, 0, 71935, 0, 0, 113697, 0, 0, 0,
-    0, 74275, 0, 122896, 127941, 41214, 0, 0, 0, 0, 0, 7773, 0, 0, 9963,
-    68649, 0, 73734, 0, 0, 0, 0, 6594, 983752, 0, 0, 3624, 70342, 0, 64655,
-    121481, 0, 0, 0, 0, 0, 65932, 0, 983790, 6803, 120968, 7738, 0, 0,
-    120628, 0, 66614, 122921, 0, 43810, 7029, 0, 41292, 118898, 0, 43115,
-    9517, 11518, 0, 0, 0, 0, 64423, 0, 0, 0, 12503, 9591, 4516, 0, 118845, 0,
-    0, 129479, 43650, 983192, 0, 0, 0, 68079, 0, 11397, 2884, 0, 0, 12678, 0,
-    0, 41014, 73730, 917539, 4270, 92254, 127836, 68205, 6633, 118947, 0,
-    5230, 101055, 0, 0, 983230, 121392, 0, 92985, 0, 0, 0, 0, 415, 0, 0, 0,
-    0, 5183, 1877, 0, 0, 0, 0, 0, 4472, 0, 0, 0, 128285, 110682, 78230, 4756,
-    0, 7081, 0, 0, 0, 78606, 0, 42922, 42103, 8628, 74861, 0, 0, 0, 43059,
-    10539, 0, 0, 0, 0, 0, 0, 0, 0, 64873, 11992, 0, 0, 0, 11801, 3622, 0, 0,
-    983213, 0, 0, 11521, 0, 1966, 43628, 111048, 0, 0, 0, 0, 0, 0, 42098,
-    66671, 10694, 128520, 0, 0, 0, 0, 42100, 0, 111040, 0, 42097, 0, 0, 0, 0,
-    11302, 120893, 129145, 43395, 83259, 0, 0, 92351, 0, 0, 11299, 1561, 0,
-    92359, 92725, 93021, 0, 194733, 0, 0, 0, 127893, 11280, 0, 0, 983783, 0,
-    0, 72760, 0, 12486, 65018, 66516, 5409, 0, 0, 194720, 5399, 9685, 0,
-    983694, 5401, 0, 0, 66832, 0, 0, 5405, 0, 0, 0, 0, 0, 2235, 0, 11330,
-    983692, 64690, 3254, 0, 0, 0, 0, 43678, 0, 0, 983145, 0, 6388, 3355, 0,
-    9867, 0, 55258, 5611, 0, 128527, 0, 0, 129181, 0, 78228, 0, 0, 119119, 0,
-    0, 194959, 0, 0, 1379, 246, 0, 0, 64736, 0, 0, 0, 121227, 0, 0, 0, 0, 0,
-    0, 11855, 0, 0, 0, 0, 10656, 0, 65214, 119242, 0, 0, 13163, 0, 120831, 0,
-    0, 0, 0, 0, 0, 0, 0, 4755, 0, 127879, 11443, 0, 0, 0, 608, 600, 0, 8580,
-    128712, 0, 43635, 0, 0, 74485, 43808, 0, 0, 0, 13160, 0, 129418, 42268,
-    128006, 70505, 9828, 0, 0, 0, 0, 9351, 7778, 0, 0, 0, 6916, 1208, 0, 0,
-    194754, 0, 0, 0, 0, 0, 83318, 83317, 0, 43539, 0, 0, 0, 0, 0, 9150,
-    66831, 0, 128322, 0, 66848, 0, 0, 12166, 128492, 194685, 0, 2546, 0, 213,
-    0, 65611, 83316, 0, 0, 74310, 70836, 0, 65285, 5452, 0, 0, 92772, 0, 0,
-    0, 0, 65518, 129029, 12609, 194679, 125255, 123193, 0, 0, 0, 74638,
-    194677, 125190, 4143, 110854, 110855, 65748, 4141, 9682, 110851, 118790,
-    194674, 0, 0, 8725, 0, 66638, 0, 42263, 4145, 6380, 0, 66613, 0, 119207,
-    0, 0, 9550, 100621, 0, 100623, 100622, 78050, 100624, 65753, 100626,
-    65756, 72731, 0, 100630, 0, 0, 0, 0, 9657, 9019, 121154, 0, 0, 5390, 0,
-    0, 194965, 72144, 194964, 0, 6328, 0, 0, 0, 0, 0, 983047, 0, 5235, 803,
-    0, 0, 0, 127979, 43838, 0, 119562, 43544, 0, 0, 0, 0, 0, 70426, 9107,
-    5191, 119113, 0, 0, 0, 121099, 0, 0, 0, 0, 0, 128150, 983067, 0, 7289,
-    74055, 0, 0, 0, 0, 0, 0, 0, 1784, 124947, 0, 0, 0, 0, 64868, 0, 13158, 0,
-    7211, 0, 9371, 129378, 0, 0, 1625, 7664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    4482, 118886, 0, 0, 0, 0, 0, 0, 0, 100612, 66849, 100614, 100613, 100616,
-    444, 100618, 100617, 100620, 100619, 0, 0, 0, 11349, 40991, 0, 0, 129324,
-    0, 0, 1197, 0, 40993, 0, 0, 0, 40990, 43765, 0, 3492, 0, 127942, 0, 0,
-    100592, 100591, 100594, 19948, 100596, 3099, 92239, 100597, 100600,
-    100599, 0, 129042, 0, 0, 100601, 194969, 100603, 8152, 100605, 100604,
-    100607, 100606, 100609, 12828, 0, 75015, 0, 0, 0, 0, 0, 75068, 127507, 0,
-    92680, 0, 0, 0, 0, 0, 0, 0, 118820, 0, 0, 0, 0, 0, 100581, 0, 100583,
-    100582, 100585, 100584, 100587, 100586, 100589, 7576, 11995, 100590,
-    43260, 0, 0, 64830, 0, 125046, 0, 0, 43979, 8870, 0, 0, 42357, 0, 0,
-    12822, 0, 0, 0, 118944, 0, 0, 42637, 0, 0, 70725, 0, 194748, 0, 71344, 0,
-    0, 0, 194749, 7170, 9596, 8277, 194743, 43629, 110610, 0, 0, 983567,
-    128691, 0, 66699, 64440, 0, 0, 0, 43234, 66008, 12627, 0, 0, 0, 43619,
-    43303, 11300, 0, 0, 8745, 0, 7558, 71342, 100570, 0, 0, 127881, 3461,
-    121258, 129471, 0, 0, 0, 0, 73877, 74335, 124982, 0, 0, 0, 64620, 74762,
-    12069, 10838, 92548, 43616, 0, 10061, 0, 125057, 10508, 209, 0, 43193,
-    120581, 0, 0, 128049, 0, 10899, 69855, 100571, 100574, 100573, 100576,
-    993, 100578, 100577, 100580, 100579, 100560, 100559, 7232, 0, 0, 0, 0, 0,
-    0, 10489, 42166, 0, 128588, 0, 0, 4224, 7671, 41518, 121311, 0, 0, 0, 0,
-    64820, 92538, 12966, 100554, 100553, 100556, 100555, 100558, 100557,
-    4263, 8793, 0, 0, 41502, 0, 983, 0, 100563, 100562, 13086, 4109, 4274,
-    841, 5888, 100568, 68522, 0, 43481, 0, 120926, 0, 7209, 0, 41505, 0,
-    78698, 127012, 0, 2147, 0, 0, 66629, 0, 0, 1255, 4149, 0, 0, 66633, 0, 0,
-    92352, 0, 65101, 0, 0, 0, 0, 5835, 128797, 66625, 10842, 0, 42123, 0, 0,
-    66634, 1094, 66636, 0, 0, 0, 0, 0, 9972, 73865, 129289, 6114, 0, 0, 0, 0,
-    93960, 0, 0, 0, 0, 12070, 0, 881, 7857, 0, 65164, 0, 0, 0, 0, 0, 64404,
-    64321, 0, 125187, 0, 0, 11245, 129395, 0, 71859, 0, 0, 0, 1287, 121509,
-    0, 0, 0, 125264, 74152, 120504, 64545, 0, 69668, 8985, 0, 0, 0, 0, 0, 0,
-    3652, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 1489, 125189, 0, 0, 3899, 0, 42124,
-    43828, 42122, 0, 0, 0, 11985, 73755, 78600, 0, 0, 10988, 0, 0, 42138,
-    78610, 0, 65768, 78608, 78604, 78605, 6285, 78603, 78612, 78613, 74339,
-    65767, 8685, 0, 0, 0, 78622, 78623, 68475, 11470, 64538, 78618, 78615,
-    78616, 0, 0, 0, 0, 2527, 0, 128209, 2799, 0, 0, 0, 9933, 0, 0, 767, 5524,
-    7028, 0, 0, 0, 0, 0, 78633, 0, 0, 94011, 0, 6971, 0, 70731, 0, 0, 118979,
-    126075, 2434, 94018, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, 0, 0, 0,
-    0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 93959, 8228, 0, 0, 0, 0,
-    78624, 0, 0, 9993, 0, 0, 129350, 78631, 78632, 78629, 78630, 78627,
+    0, 41714, 0, 0, 0, 6343, 0, 0, 43996, 0, 8044, 0, 0, 41789, 0, 10809,
+    71953, 0, 0, 0, 8146, 11025, 0, 120513, 642, 0, 0, 0, 12875, 0, 0, 13229,
+    71950, 41788, 0, 0, 0, 41791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8428, 6569,
+    0, 0, 0, 0, 10167, 0, 68248, 8049, 0, 0, 0, 0, 128882, 4761, 0, 4766,
+    64623, 0, 121180, 194653, 118876, 0, 6912, 9232, 7033, 0, 0, 41545, 0,
+    71970, 72160, 72107, 0, 0, 0, 3484, 0, 0, 0, 8503, 41539, 41527, 0, 0,
+    983823, 0, 0, 0, 41537, 0, 41541, 8282, 11817, 129965, 128219, 0, 0,
+    126132, 0, 0, 70115, 66609, 111235, 65921, 0, 0, 194664, 0, 129326,
+    77970, 42246, 75030, 120605, 0, 65926, 7744, 68859, 94056, 74277, 126108,
+    0, 6966, 194633, 8136, 0, 0, 0, 0, 0, 4762, 0, 0, 0, 4765, 69443, 983585,
+    0, 4760, 0, 0, 10871, 43199, 194645, 0, 93955, 0, 0, 11546, 0, 337, 0, 0,
+    0, 12279, 7768, 0, 128352, 0, 69812, 10143, 7883, 121444, 7880, 64618,
+    13012, 5704, 13010, 0, 0, 119531, 0, 0, 0, 0, 66654, 0, 0, 0, 13008, 0,
+    4385, 0, 13011, 0, 92569, 119161, 13009, 74771, 70159, 0, 0, 41793, 0,
+    74221, 120996, 41792, 111242, 94054, 126094, 0, 111244, 5709, 120689,
+    71076, 0, 0, 0, 0, 0, 5708, 0, 0, 0, 5706, 66362, 5705, 8791, 41797, 0,
+    10237, 66436, 0, 0, 0, 0, 128083, 13170, 0, 127075, 0, 0, 41377, 0, 0,
+    10058, 125225, 101431, 0, 0, 0, 0, 0, 0, 129641, 119525, 0, 0, 72350, 0,
+    983584, 2144, 0, 120765, 0, 0, 1754, 92226, 13246, 864, 0, 118926, 8972,
+    0, 7849, 0, 0, 13240, 0, 5192, 0, 0, 10948, 0, 13199, 0, 1236, 13208,
+    13261, 13189, 13188, 93993, 0, 7440, 0, 0, 0, 1844, 125229, 0, 13178, 0,
+    0, 0, 125230, 0, 0, 13260, 4550, 121249, 125227, 0, 71071, 0, 0, 68523,
+    0, 0, 11354, 94071, 0, 42795, 129317, 0, 0, 0, 125237, 0, 13194, 13274,
+    0, 0, 129533, 65586, 68311, 0, 119193, 4601, 194661, 101454, 194658, 0,
+    194659, 0, 121422, 128790, 194657, 41717, 67402, 101444, 121129, 41716,
+    127376, 7910, 0, 0, 754, 41944, 0, 8183, 120741, 2037, 101440, 0, 101441,
+    125, 0, 0, 0, 983124, 101442, 41719, 0, 7990, 12637, 13258, 9536, 71056,
+    0, 4427, 0, 71200, 0, 12217, 0, 41532, 129315, 0, 0, 0, 0, 111063, 83349,
+    0, 0, 120622, 0, 0, 0, 0, 43632, 0, 0, 8140, 0, 6260, 0, 0, 66765,
+    129657, 0, 3898, 0, 0, 13200, 0, 0, 66582, 0, 0, 0, 0, 1068, 71178,
+    13259, 12945, 0, 42203, 0, 3124, 69411, 0, 4386, 12224, 6973, 129563, 0,
+    0, 119535, 0, 121312, 0, 12232, 0, 0, 5681, 64578, 75023, 72016, 13209,
+    0, 0, 0, 0, 0, 11053, 0, 74902, 128107, 128942, 7588, 0, 1693, 74942,
+    43204, 65831, 0, 0, 0, 68803, 111216, 111223, 0, 0, 65685, 9523, 2243, 0,
+    0, 0, 0, 0, 0, 0, 0, 13191, 0, 3500, 3139, 100643, 3170, 100645, 100644,
+    100647, 100646, 13006, 64433, 0, 100650, 941, 0, 0, 120967, 3727, 0, 0,
+    0, 0, 0, 0, 0, 94039, 129299, 92455, 0, 0, 64444, 0, 0, 43603, 94075,
+    65397, 288, 0, 0, 0, 10025, 73692, 0, 0, 68182, 0, 0, 0, 92438, 65395, 0,
+    0, 0, 65393, 83078, 121111, 0, 0, 0, 0, 0, 65394, 11548, 72305, 0, 65396,
+    0, 0, 13256, 1282, 0, 0, 0, 111085, 0, 0, 0, 111087, 72115, 0, 0, 0, 0,
+    0, 3304, 0, 0, 0, 126595, 72437, 68353, 0, 0, 42113, 0, 0, 0, 0, 0,
+    43094, 0, 0, 94037, 68317, 9035, 0, 0, 0, 0, 0, 70822, 128467, 164,
+    68309, 94067, 94000, 100631, 100634, 100633, 100636, 100635, 100638,
+    100637, 68808, 100639, 110665, 73893, 11099, 110664, 13175, 13207, 0,
+    127552, 0, 74643, 5929, 0, 0, 129192, 0, 11306, 0, 119059, 3180, 125102,
+    0, 0, 0, 13062, 0, 129551, 128707, 0, 0, 74428, 0, 128000, 0, 11251,
+    70204, 0, 10045, 0, 13275, 0, 11057, 0, 13276, 125133, 41525, 983084,
+    128015, 11444, 0, 129158, 0, 0, 41523, 127765, 0, 0, 0, 0, 0, 0, 0, 3858,
+    0, 119573, 0, 0, 0, 0, 0, 0, 101014, 369, 74908, 41784, 0, 120994, 0,
+    71180, 0, 0, 13210, 41782, 0, 0, 101388, 41781, 10486, 74058, 43002, 0,
+    0, 0, 0, 0, 3741, 0, 0, 0, 0, 41222, 0, 128317, 3982, 0, 4388, 126105,
+    746, 0, 0, 0, 13131, 0, 0, 0, 0, 0, 10434, 8794, 0, 0, 0, 0, 0, 0, 11700,
+    4374, 0, 0, 0, 0, 0, 0, 917597, 0, 69814, 0, 6735, 73979, 13174, 73968,
+    13225, 0, 69808, 0, 0, 2365, 7841, 71476, 0, 120934, 66510, 128099, 0, 0,
+    0, 41785, 41171, 0, 13173, 4372, 0, 0, 0, 0, 128939, 0, 0, 12965, 384, 0,
+    0, 12685, 41473, 0, 13242, 13236, 0, 0, 0, 41787, 0, 70684, 0, 68486,
+    13272, 0, 13232, 13233, 65838, 0, 0, 11656, 0, 126110, 119885, 12861, 0,
+    13271, 0, 92737, 1096, 0, 0, 0, 0, 0, 0, 0, 5203, 0, 92902, 0, 13243,
+    13237, 12719, 0, 0, 0, 64884, 78043, 43052, 0, 0, 0, 12014, 0, 101415, 0,
+    0, 13195, 41452, 64961, 41535, 0, 10459, 0, 124949, 0, 0, 0, 41533,
+    66337, 0, 92184, 0, 126091, 0, 0, 73849, 0, 43638, 0, 101398, 6261, 0,
+    129568, 0, 1957, 0, 0, 0, 13292, 13206, 0, 0, 2925, 73809, 42576, 101395,
+    13212, 43238, 0, 13190, 13187, 0, 13198, 0, 0, 5242, 0, 0, 128146, 0, 0,
+    6770, 43331, 127539, 0, 0, 71074, 126466, 0, 41444, 0, 0, 64799, 5246,
+    119106, 13185, 9709, 0, 0, 92751, 0, 5238, 0, 71085, 0, 5236, 40979, 0,
+    74201, 8286, 0, 3936, 0, 11699, 0, 127249, 13235, 69578, 41248, 127264,
+    13245, 13239, 0, 7969, 127266, 74832, 127251, 0, 120509, 0, 983874, 734,
+    127270, 0, 127254, 70297, 127273, 64921, 120969, 66631, 41771, 120490, 0,
+    983171, 41770, 1670, 42560, 0, 121349, 129634, 0, 41163, 0, 11136, 0,
+    11506, 0, 42841, 13267, 126109, 0, 41775, 0, 7130, 41773, 0, 0, 0, 0, 0,
+    0, 0, 42673, 65572, 0, 65250, 13265, 13264, 64518, 66798, 6100, 0, 0,
+    6740, 71080, 67814, 12967, 70028, 68101, 4583, 0, 0, 68097, 0, 0, 0, 0,
+    119211, 0, 0, 42653, 83181, 68102, 0, 7814, 71045, 0, 73702, 0, 0, 0,
+    9756, 6985, 0, 0, 74219, 0, 0, 129069, 124987, 5674, 0, 66421, 0, 5677,
+    5588, 0, 0, 0, 0, 5673, 0, 5676, 0, 94048, 0, 5672, 6476, 0, 0, 110951,
+    42511, 1727, 0, 0, 0, 0, 0, 0, 0, 3550, 736, 0, 4505, 5873, 74090, 5826,
+    55232, 5813, 0, 120712, 5841, 5837, 55234, 0, 3105, 64370, 5838, 5796, 0,
+    119592, 5793, 0, 5866, 5797, 41011, 5865, 0, 0, 71899, 0, 71235, 5806, 0,
+    0, 9037, 5671, 0, 0, 0, 0, 71266, 126616, 7296, 0, 0, 0, 0, 6980, 0,
+    72108, 0, 0, 0, 0, 0, 64613, 983891, 0, 129969, 0, 78277, 7114, 0, 72100,
+    43190, 93842, 128666, 72096, 42611, 42563, 0, 125080, 0, 6792, 43201,
+    72098, 0, 128719, 0, 72106, 0, 0, 5644, 0, 66627, 69727, 0, 0, 0, 65116,
+    0, 0, 0, 0, 66410, 94104, 41013, 0, 0, 0, 2869, 0, 41015, 0, 2785,
+    120616, 0, 73907, 194689, 0, 0, 0, 194688, 4759, 0, 0, 43192, 129913,
+    1170, 43365, 69810, 73908, 0, 902, 0, 0, 0, 0, 8122, 66420, 129642, 0,
+    3861, 0, 11028, 0, 73820, 5714, 0, 0, 0, 807, 127001, 0, 0, 976, 113782,
+    0, 0, 0, 0, 0, 128657, 118801, 71043, 0, 127017, 0, 0, 5582, 0, 0, 5798,
+    0, 0, 0, 128521, 0, 0, 68058, 120553, 983183, 0, 0, 74933, 74283, 0, 0,
+    194698, 66044, 0, 0, 0, 0, 0, 10094, 0, 0, 10857, 69225, 0, 0, 93, 0,
+    10954, 0, 0, 0, 8171, 0, 0, 82996, 0, 0, 0, 119001, 92634, 0, 0, 5187,
+    120711, 71086, 0, 0, 0, 0, 5232, 0, 41009, 0, 41005, 0, 43205, 0, 0, 0,
+    194708, 0, 71054, 10028, 66478, 7076, 13182, 100385, 0, 0, 0, 0, 7972,
+    78786, 0, 0, 0, 78789, 11309, 3806, 73985, 0, 0, 0, 78819, 0, 125218, 0,
+    127532, 0, 0, 0, 78817, 0, 64366, 65156, 8814, 0, 0, 0, 0, 12836, 42725,
+    120079, 0, 0, 0, 0, 69258, 13255, 0, 0, 7464, 0, 93831, 0, 0, 0, 0,
+    13213, 0, 0, 64516, 0, 0, 0, 41007, 983910, 0, 40995, 12209, 983914,
+    119136, 123635, 0, 0, 0, 0, 0, 69283, 43558, 5522, 0, 71061, 0, 74105,
+    3633, 983912, 119364, 41234, 41231, 0, 9771, 983917, 13251, 0, 0, 6262,
+    2784, 0, 71078, 8126, 66483, 0, 0, 441, 0, 0, 0, 41002, 40999, 0, 129394,
+    7108, 0, 10890, 0, 74445, 8324, 0, 0, 74817, 2813, 119056, 74853, 983671,
+    0, 0, 0, 1193, 10462, 65197, 13253, 13252, 7829, 120992, 130032, 0, 0, 0,
+    77911, 0, 77907, 0, 10386, 0, 41042, 0, 65944, 65683, 10338, 66469, 0, 0,
+    0, 0, 0, 41966, 0, 0, 0, 68915, 0, 0, 911, 983870, 128932, 40963, 0,
+    65159, 0, 0, 0, 5520, 0, 0, 0, 0, 0, 0, 0, 71081, 0, 0, 0, 0, 0, 983873,
+    0, 0, 66839, 0, 0, 0, 68647, 0, 5857, 68135, 92727, 119120, 983675,
+    13171, 0, 0, 0, 120338, 0, 0, 0, 13250, 69663, 0, 92201, 66397, 0, 0, 0,
+    8761, 12942, 5748, 92713, 92414, 0, 83174, 8796, 0, 0, 0, 43633, 0,
+    72805, 71073, 0, 0, 0, 0, 0, 12843, 4520, 0, 0, 73004, 983672, 0, 0,
+    194935, 110754, 64345, 0, 0, 3457, 0, 0, 0, 110750, 110758, 110751, 0, 0,
+    10427, 0, 73859, 0, 9755, 1110, 65239, 0, 0, 0, 0, 0, 0, 0, 194936, 0,
+    983802, 0, 70437, 3620, 0, 0, 72855, 0, 0, 0, 74250, 0, 0, 11980, 0,
+    66482, 67823, 0, 128345, 110768, 0, 0, 0, 0, 12891, 983767, 983648, 0,
+    2016, 0, 65668, 92311, 67696, 10366, 70117, 9155, 120652, 9786, 65082, 0,
+    8579, 0, 0, 0, 0, 4508, 64883, 0, 92522, 129847, 0, 64592, 74276, 67688,
+    0, 69270, 0, 69456, 0, 113821, 0, 12147, 9024, 66378, 66472, 0, 0, 0, 0,
+    0, 71935, 0, 0, 113697, 0, 0, 69285, 0, 74275, 0, 122896, 127941, 41214,
+    0, 0, 0, 0, 0, 7773, 0, 0, 9963, 68649, 0, 73734, 0, 0, 0, 0, 6594,
+    983752, 0, 0, 3624, 70342, 0, 64655, 121481, 0, 0, 0, 0, 0, 65932, 0,
+    983790, 6803, 120968, 7738, 0, 0, 120628, 0, 66614, 122921, 0, 43810,
+    7029, 0, 41292, 118898, 0, 43115, 9517, 11518, 0, 0, 0, 0, 64423, 0, 0,
+    0, 12503, 9591, 4516, 0, 118845, 0, 0, 129479, 43650, 983192, 69250, 0,
+    0, 68079, 0, 11397, 2884, 0, 0, 12678, 0, 0, 41014, 73730, 917539, 4270,
+    92254, 127836, 68205, 6633, 118947, 0, 5230, 101055, 0, 0, 983230,
+    121392, 0, 92985, 0, 0, 0, 0, 415, 0, 0, 0, 0, 5183, 1877, 0, 0, 0, 0, 0,
+    4472, 0, 0, 0, 128285, 110682, 78230, 4756, 0, 7081, 0, 0, 0, 78606, 0,
+    42922, 42103, 8628, 74861, 0, 0, 0, 43059, 10539, 0, 0, 0, 0, 0, 0, 0, 0,
+    64873, 11992, 129444, 0, 0, 11801, 3622, 0, 0, 983213, 0, 0, 11521, 0,
+    1966, 43628, 111048, 0, 0, 0, 0, 0, 0, 42098, 66671, 10694, 128520, 0, 0,
+    0, 0, 42100, 0, 111040, 0, 42097, 0, 0, 0, 0, 11302, 120893, 129145,
+    43395, 83259, 0, 0, 92351, 0, 0, 11299, 1561, 0, 92359, 92725, 69253, 0,
+    194733, 0, 0, 0, 127893, 11280, 0, 0, 983783, 0, 0, 72760, 0, 12486,
+    65018, 66516, 5409, 0, 0, 194720, 5399, 9685, 0, 983694, 5401, 0, 0,
+    66832, 0, 0, 5405, 0, 0, 0, 0, 0, 2235, 0, 11330, 983692, 64690, 3254, 0,
+    129974, 0, 0, 43678, 0, 0, 983145, 0, 6388, 3355, 0, 9867, 0, 55258,
+    5611, 0, 128527, 0, 0, 129181, 0, 78228, 0, 0, 119119, 0, 0, 194959, 0,
+    0, 1379, 246, 0, 0, 64736, 0, 0, 0, 121227, 0, 0, 0, 0, 0, 0, 11855, 0,
+    0, 0, 71961, 10656, 0, 65214, 119242, 0, 0, 13163, 0, 120831, 0, 0,
+    101484, 0, 0, 0, 0, 0, 4755, 0, 127879, 11443, 0, 0, 0, 608, 600, 0,
+    8580, 128712, 0, 43635, 0, 129695, 74485, 43808, 0, 0, 0, 13160, 0,
+    129418, 42268, 128006, 70505, 9828, 0, 69261, 0, 0, 9351, 7778, 0, 0, 0,
+    6916, 1208, 0, 0, 194754, 0, 0, 0, 0, 0, 83318, 83317, 0, 43539, 0,
+    72024, 0, 0, 0, 9150, 66831, 0, 128322, 0, 66848, 0, 0, 12166, 128492,
+    194685, 0, 2546, 0, 213, 0, 65611, 83316, 0, 0, 74310, 70836, 0, 65285,
+    5452, 0, 0, 92772, 0, 0, 0, 0, 65518, 129029, 12609, 194679, 125255,
+    123193, 0, 0, 0, 74638, 194677, 125190, 4143, 110854, 110855, 65748,
+    4141, 9682, 110851, 118790, 194674, 0, 0, 8725, 0, 66638, 0, 42263, 4145,
+    6380, 0, 66613, 0, 119207, 0, 0, 9550, 100621, 0, 100623, 100622, 78050,
+    100624, 65753, 100626, 65756, 72731, 0, 100630, 0, 0, 0, 0, 9657, 9019,
+    121154, 0, 0, 5390, 0, 0, 194965, 72144, 194964, 69286, 6328, 0, 0, 0, 0,
+    0, 983047, 0, 5235, 803, 69289, 0, 0, 127979, 43838, 0, 119562, 43544, 0,
+    0, 0, 0, 0, 70426, 9107, 5191, 119113, 0, 0, 0, 121099, 0, 0, 0, 0, 0,
+    128150, 983067, 0, 7289, 74055, 0, 0, 0, 0, 0, 0, 0, 1784, 124947, 0, 0,
+    0, 0, 64868, 0, 13158, 0, 7211, 0, 9371, 129378, 0, 0, 1625, 7664, 0, 0,
+    0, 0, 0, 0, 69273, 0, 0, 0, 0, 4482, 118886, 0, 0, 0, 0, 0, 0, 0, 100612,
+    66849, 100614, 100613, 100616, 444, 100618, 100617, 100620, 100619, 0, 0,
+    0, 11349, 40991, 0, 0, 129324, 0, 0, 1197, 0, 40993, 0, 0, 0, 40990,
+    43765, 0, 3492, 0, 127942, 0, 0, 100592, 100591, 100594, 19948, 100596,
+    3099, 92239, 100597, 100600, 100599, 0, 129042, 0, 0, 100601, 194969,
+    100603, 8152, 100605, 100604, 100607, 100606, 100609, 12828, 0, 75015, 0,
+    0, 129950, 0, 0, 75068, 127507, 0, 92680, 0, 0, 129928, 129920, 0,
+    130037, 0, 118820, 0, 0, 0, 0, 0, 100581, 0, 100583, 100582, 100585,
+    100584, 100587, 100586, 100589, 7576, 11995, 100590, 43260, 0, 0, 64830,
+    0, 125046, 101526, 0, 43979, 8870, 0, 0, 42357, 0, 0, 12822, 0, 0, 0,
+    118944, 0, 0, 42637, 0, 0, 70725, 0, 129934, 0, 71344, 0, 0, 0, 194745,
+    7170, 9596, 8277, 194743, 43629, 110610, 0, 0, 983571, 128691, 0, 66699,
+    42952, 0, 0, 0, 43234, 66008, 12627, 0, 0, 0, 43619, 43303, 11300, 0, 0,
+    8745, 0, 7558, 71342, 100570, 0, 0, 127881, 3461, 121258, 129471, 69264,
+    0, 0, 0, 73877, 74335, 124982, 0, 0, 0, 64620, 74762, 12069, 10838,
+    92548, 43616, 0, 10061, 0, 125057, 10508, 209, 0, 43193, 120581, 0, 0,
+    128049, 0, 10899, 69855, 100571, 100574, 100573, 100576, 993, 100578,
+    100577, 100580, 100579, 100560, 100559, 7232, 0, 0, 0, 0, 0, 0, 10489,
+    42166, 0, 128588, 0, 0, 4224, 7671, 41518, 121311, 0, 0, 0, 0, 64820,
+    92538, 12966, 100554, 100553, 100556, 100555, 100558, 100557, 4263, 8793,
+    0, 0, 41502, 0, 983, 0, 100563, 100562, 13086, 4109, 4274, 841, 5888,
+    100568, 68522, 0, 43481, 0, 120926, 0, 7209, 0, 41505, 0, 78698, 127012,
+    0, 2147, 0, 0, 66629, 0, 0, 1255, 4149, 0, 0, 66633, 0, 129391, 92352, 0,
+    65101, 0, 0, 0, 0, 5835, 128797, 66625, 10842, 0, 42123, 0, 0, 66634,
+    1094, 66636, 0, 0, 0, 0, 0, 9972, 73865, 129289, 6114, 0, 0, 0, 0, 93960,
+    0, 0, 0, 0, 12070, 0, 881, 7857, 0, 65164, 0, 0, 0, 0, 0, 64404, 64321,
+    0, 125187, 0, 0, 11245, 129395, 0, 71859, 0, 0, 0, 1287, 121509, 0, 0, 0,
+    125264, 74152, 120504, 64545, 0, 69668, 8985, 0, 0, 0, 0, 0, 0, 3652, 0,
+    0, 0, 0, 0, 279, 0, 0, 0, 0, 1489, 125189, 0, 0, 3899, 0, 42124, 43828,
+    42122, 0, 0, 0, 11985, 73755, 78600, 0, 0, 10988, 0, 0, 42138, 78610, 0,
+    65768, 78608, 78604, 78605, 6285, 78603, 78612, 78613, 74339, 65767,
+    8685, 0, 0, 0, 78622, 78623, 68475, 11470, 64538, 78618, 78615, 78616, 0,
+    0, 0, 101534, 2527, 0, 128209, 2799, 0, 0, 0, 9933, 0, 0, 767, 5524,
+    7028, 0, 101520, 0, 0, 0, 78633, 0, 0, 94011, 0, 6971, 0, 70731, 0, 0,
+    118979, 126075, 2434, 94018, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, 0,
+    0, 0, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 93959, 8228, 0, 0, 0,
+    0, 78624, 0, 0, 9993, 0, 0, 129350, 78631, 78632, 78629, 78630, 78627,
     78628, 78625, 2399, 0, 92399, 71202, 41208, 0, 0, 8178, 2149, 3367, 0,
     78640, 78641, 78636, 78638, 78634, 6337, 0, 92342, 0, 0, 11068, 0, 9331,
     0, 74798, 9181, 0, 0, 8017, 0, 0, 0, 0, 0, 0, 0, 12126, 129184, 129306,
-    0, 0, 69650, 0, 0, 0, 43436, 983725, 0, 0, 0, 0, 66845, 0, 0, 0, 5398, 0,
-    127386, 93953, 0, 0, 0, 0, 0, 9476, 68899, 0, 12763, 0, 74788, 0, 42114,
-    11181, 92502, 0, 0, 0, 3469, 42107, 42116, 0, 0, 0, 0, 9853, 69648, 9040,
-    0, 64665, 119557, 0, 0, 0, 69638, 12602, 983068, 3852, 0, 67872, 12231,
-    11317, 0, 119812, 0, 11410, 10964, 12274, 122890, 100524, 0, 119810,
-    9865, 195019, 0, 0, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 111214, 10467, 0,
-    2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 0, 127885, 195022, 0, 113752,
-    119830, 65678, 0, 0, 8260, 0, 7519, 11505, 119182, 0, 518, 0, 119832, 0,
-    13204, 0, 857, 121252, 0, 0, 92336, 83177, 0, 0, 0, 0, 0, 0, 92762, 0, 0,
-    120613, 67247, 1629, 0, 796, 0, 0, 74123, 72334, 127587, 72336, 43388, 0,
-    43944, 72335, 478, 65151, 0, 128147, 0, 0, 0, 0, 0, 42933, 1206, 71209,
-    43837, 0, 3843, 12011, 0, 3361, 0, 8121, 10715, 7578, 0, 0, 0, 10530,
-    12348, 8653, 0, 0, 0, 9551, 0, 0, 784, 0, 0, 0, 0, 0, 0, 43937, 0, 0,
-    43938, 43935, 73765, 66230, 0, 0, 0, 43936, 0, 43932, 11102, 0, 0, 42753,
-    67165, 0, 78324, 0, 0, 6975, 917928, 5415, 12176, 0, 0, 3462, 43940,
-    42629, 78691, 128016, 43942, 0, 9759, 0, 0, 78320, 8114, 78321, 78697,
-    78696, 78695, 8710, 0, 118956, 0, 4051, 92657, 0, 71206, 0, 0, 0, 128857,
-    0, 1619, 9703, 77986, 0, 42112, 0, 1875, 0, 42109, 0, 0, 71189, 121160,
-    64907, 5396, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 0, 6336, 0, 0, 0,
-    5116, 64521, 0, 0, 0, 121390, 125048, 74138, 0, 74139, 128447, 92249, 0,
-    0, 0, 0, 8935, 0, 0, 0, 0, 616, 78131, 65178, 4684, 78701, 983880, 74631,
-    0, 0, 0, 74460, 42110, 0, 10870, 8557, 11054, 68664, 0, 0, 0, 0, 0, 0, 0,
-    0, 65597, 0, 7651, 6846, 0, 0, 68868, 0, 0, 118966, 129302, 40997,
-    127218, 0, 0, 40998, 0, 74488, 71182, 9800, 0, 0, 0, 41000, 0, 5114,
-    55263, 3386, 70730, 42574, 0, 5115, 5394, 0, 128756, 5113, 0, 64855, 0,
-    4425, 0, 0, 0, 43967, 0, 0, 0, 5112, 12173, 127037, 0, 0, 74998, 0, 0, 0,
-    0, 0, 64874, 43964, 1587, 0, 0, 0, 0, 1369, 917931, 9959, 0, 43963, 4560,
-    0, 0, 0, 0, 0, 0, 43961, 42601, 4514, 72149, 0, 0, 0, 65041, 10965,
-    120905, 0, 0, 12542, 0, 65341, 0, 65829, 0, 0, 10475, 0, 0, 0, 0, 11795,
-    0, 0, 0, 127102, 127101, 74956, 7099, 11275, 67681, 127096, 0, 9336, 0,
-    42626, 43966, 7798, 64474, 64259, 0, 5730, 119809, 43018, 0, 93796, 0, 0,
-    0, 69401, 0, 0, 5127, 11285, 0, 5495, 4273, 0, 74765, 10849, 6346, 5493,
-    6342, 68636, 74319, 5492, 0, 0, 169, 5497, 125053, 0, 0, 68198, 0, 0,
-    128417, 0, 0, 12738, 0, 983076, 5321, 0, 0, 0, 5323, 120732, 9773,
-    125209, 4683, 74318, 0, 68823, 0, 0, 0, 0, 129553, 0, 0, 0, 0, 834, 0,
-    1803, 0, 5733, 0, 0, 71312, 5731, 1381, 2891, 0, 0, 0, 64525, 0, 2881,
-    92996, 93847, 9601, 2879, 0, 0, 73129, 5729, 0, 0, 0, 64881, 127905,
-    9361, 0, 2887, 0, 3526, 6298, 0, 0, 0, 0, 0, 8572, 127863, 77896, 0,
-    71174, 0, 0, 71197, 0, 12096, 0, 0, 0, 110745, 71176, 110746, 65279, 0,
-    121236, 5734, 0, 0, 0, 0, 0, 41641, 12717, 0, 12552, 983615, 66713, 0, 0,
-    41643, 110747, 0, 8713, 41640, 78657, 41645, 66712, 125196, 0, 66726,
-    66711, 0, 93994, 0, 3472, 64863, 0, 121424, 0, 0, 0, 125203, 67837, 0, 0,
-    0, 0, 0, 0, 121440, 0, 0, 129461, 119008, 92402, 65017, 0, 0, 66668, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121043, 66471, 12216, 0,
-    40988, 0, 0, 0, 0, 0, 2396, 129078, 0, 0, 0, 64940, 0, 8321, 119823,
-    128165, 100409, 83299, 996, 0, 0, 4249, 0, 83294, 92535, 8222, 0, 118875,
-    71213, 0, 0, 0, 0, 8534, 72844, 40983, 0, 125195, 0, 12551, 73960,
-    125193, 74469, 12558, 121039, 0, 10052, 40982, 129371, 0, 0, 0, 127403,
-    0, 917559, 0, 0, 1563, 0, 0, 19911, 0, 0, 0, 71363, 0, 7797, 78708,
-    10006, 0, 3308, 119134, 74940, 0, 0, 78488, 0, 0, 0, 0, 0, 128462, 9200,
-    10046, 9612, 0, 8218, 66496, 0, 43742, 78489, 0, 0, 0, 0, 67826, 0,
-    70056, 508, 128585, 0, 126539, 0, 0, 0, 0, 0, 0, 0, 124950, 0, 0, 0, 0,
-    0, 0, 6659, 0, 0, 0, 0, 0, 0, 41634, 0, 41639, 71169, 11941, 0, 0, 0,
-    42180, 68505, 43753, 3249, 41637, 93982, 12328, 501, 93985, 10601, 0,
-    6503, 0, 92192, 0, 71181, 0, 6505, 74010, 0, 13064, 126112, 121105, 6500,
-    5526, 0, 0, 0, 0, 92376, 0, 9678, 120832, 0, 41706, 0, 0, 0, 8936, 92964,
-    119123, 4208, 0, 0, 0, 67742, 0, 74379, 128605, 0, 0, 92422, 983109, 0,
-    66475, 0, 5027, 0, 0, 0, 5069, 0, 5028, 0, 0, 0, 5026, 0, 0, 6331, 0, 0,
-    0, 0, 41076, 0, 74790, 0, 0, 0, 0, 5029, 0, 5317, 3598, 0, 41070, 92166,
-    11185, 6663, 0, 6507, 0, 126079, 0, 1716, 983691, 0, 917824, 620, 41001,
-    0, 917823, 43758, 0, 71116, 5024, 0, 41003, 0, 5025, 7297, 0, 75039, 0,
-    119328, 65557, 0, 0, 983599, 0, 0, 0, 0, 43947, 43946, 0, 0, 128363,
-    6105, 0, 119325, 983226, 0, 68203, 43945, 66491, 43939, 0, 68144, 78718,
-    2301, 0, 0, 66490, 6979, 0, 7721, 0, 0, 1592, 0, 0, 121096, 41048,
-    129358, 829, 0, 92406, 0, 120247, 0, 41056, 0, 0, 10953, 41066, 0,
-    917813, 482, 0, 0, 0, 43606, 71185, 0, 0, 0, 72262, 110863, 72421, 12050,
-    0, 5315, 917817, 0, 0, 42061, 917816, 0, 0, 68417, 917815, 0, 0, 42059,
-    0, 0, 120723, 42058, 3960, 11043, 11337, 121358, 0, 0, 3958, 0, 0,
-    917818, 0, 917819, 0, 0, 42064, 11959, 983695, 0, 0, 0, 0, 128498, 64336,
-    10478, 92629, 70350, 120704, 0, 0, 42437, 1555, 0, 8691, 129656, 2215,
-    41662, 119046, 0, 0, 0, 93952, 0, 66481, 41664, 0, 42578, 0, 41661,
-    78715, 78714, 9356, 0, 129544, 0, 1286, 110701, 0, 0, 983206, 128925,
-    42476, 0, 11156, 0, 0, 0, 0, 72123, 0, 10020, 43359, 72827, 0, 120946,
-    41627, 0, 11979, 0, 41628, 533, 11931, 65225, 0, 125122, 0, 0, 68118, 0,
-    4377, 0, 0, 8587, 72097, 13193, 64350, 68233, 0, 41924, 0, 7735, 0,
-    127585, 120843, 0, 65820, 0, 0, 43461, 7757, 0, 0, 43787, 66493, 77943,
-    4168, 43904, 73952, 0, 0, 121072, 4440, 43902, 77948, 66837, 77946,
-    43903, 77944, 77945, 0, 120909, 120826, 120226, 66492, 43901, 64625, 0,
-    0, 0, 0, 10013, 64434, 0, 983112, 0, 11782, 64382, 0, 0, 0, 0, 41630,
-    630, 120960, 0, 0, 70165, 1043, 93017, 0, 0, 0, 124945, 313, 129590, 0,
-    0, 65593, 7445, 43906, 5750, 42258, 0, 55222, 68222, 11268, 11225, 0,
-    8526, 0, 0, 43894, 66495, 69990, 0, 92990, 0, 10707, 7863, 0, 0, 70692,
-    631, 77952, 77953, 66443, 71171, 83313, 0, 0, 0, 13305, 77961, 43925,
-    43924, 77956, 77957, 66903, 66328, 42381, 77962, 0, 0, 0, 0, 0, 0, 43899,
-    66821, 77967, 9157, 77965, 77966, 77963, 77964, 0, 0, 180, 73904, 0, 0,
-    66494, 12674, 43896, 0, 0, 43890, 43897, 0, 11535, 0, 66769, 5185, 7165,
-    5521, 10334, 5519, 71329, 10302, 12351, 83333, 1027, 5181, 0, 5117, 0,
-    5179, 73955, 6845, 991, 5189, 43676, 41647, 0, 73883, 92571, 77979, 3405,
-    0, 0, 5523, 43915, 66487, 92459, 74943, 9549, 0, 125093, 43923, 0, 43682,
-    74884, 120537, 0, 43921, 0, 71184, 0, 43922, 128709, 0, 10414, 9846, 0,
-    10350, 0, 43918, 77981, 75075, 77978, 77980, 66485, 77977, 77973, 77974,
-    78057, 43909, 73983, 12330, 0, 0, 0, 43910, 0, 3407, 6293, 0, 68149,
-    43908, 129060, 0, 10209, 0, 4195, 0, 9010, 983686, 75072, 6332, 0, 0,
-    65871, 0, 1736, 0, 3901, 0, 0, 65890, 128801, 10446, 0, 693, 9130, 314,
-    78119, 64149, 0, 0, 0, 11026, 0, 5332, 6940, 0, 0, 127007, 119831, 0,
-    273, 8165, 0, 83307, 0, 0, 12824, 43911, 4528, 5320, 6301, 43662, 6133,
-    0, 9463, 73738, 127141, 10922, 121069, 0, 0, 0, 0, 0, 2569, 0, 2326, 0,
-    2565, 0, 66401, 0, 0, 0, 0, 41848, 2567, 78620, 121145, 4044, 92646, 0,
-    12233, 0, 9509, 0, 0, 127158, 7336, 0, 0, 0, 0, 0, 67235, 0, 0, 0, 0,
-    2222, 66499, 0, 127170, 0, 10895, 0, 274, 983763, 1858, 0, 67849, 55251,
-    0, 3133, 0, 71857, 0, 9610, 0, 8197, 0, 0, 0, 41665, 5868, 0, 0, 72120,
-    0, 19940, 43668, 41667, 0, 0, 1923, 0, 0, 0, 0, 0, 0, 0, 0, 6464, 92750,
-    2996, 125221, 0, 68481, 41835, 4047, 41842, 0, 0, 129601, 0, 0, 0, 0,
-    293, 0, 0, 64791, 41827, 0, 0, 10579, 8560, 0, 0, 118835, 4803, 73805,
-    1739, 0, 3900, 128967, 73737, 0, 0, 73957, 0, 66474, 41971, 0, 0, 0, 0,
-    0, 11716, 66473, 0, 121071, 0, 128080, 0, 0, 0, 0, 0, 0, 0, 6632, 73861,
-    0, 74770, 0, 0, 8914, 0, 0, 3183, 1435, 0, 0, 0, 0, 0, 0, 5746, 67392, 0,
-    0, 0, 83506, 0, 7082, 71481, 12618, 5059, 983597, 83524, 43604, 0, 0, 0,
-    0, 0, 0, 8227, 0, 1218, 0, 64416, 65848, 92884, 0, 0, 0, 126987, 0, 0, 0,
-    0, 0, 0, 83515, 83507, 0, 0, 42672, 71194, 43224, 0, 0, 0, 0, 0, 0, 0,
-    65905, 0, 42662, 0, 121159, 0, 129536, 0, 7794, 0, 0, 6377, 0, 126080,
-    3669, 3968, 0, 71319, 69658, 129550, 0, 66296, 0, 0, 0, 0, 124998, 6699,
+    0, 0, 69650, 0, 0, 0, 43436, 983725, 0, 0, 0, 0, 66845, 69249, 0, 0,
+    5398, 0, 127386, 93953, 0, 0, 0, 0, 0, 9476, 68899, 0, 12763, 0, 74788,
+    0, 42114, 11181, 92502, 0, 0, 0, 3469, 42107, 42116, 0, 0, 0, 0, 9853,
+    69648, 9040, 101518, 64665, 119557, 0, 0, 0, 69638, 12602, 983068, 3852,
+    0, 67872, 12231, 11317, 0, 119812, 0, 11410, 10964, 12274, 122890,
+    100524, 0, 119810, 9865, 195019, 0, 0, 0, 0, 12276, 0, 0, 0, 0, 119613,
+    0, 111214, 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 0,
+    127885, 195022, 0, 113752, 119830, 65678, 0, 0, 8260, 0, 7519, 11505,
+    101505, 0, 518, 0, 119832, 0, 13204, 0, 857, 121252, 0, 0, 92336, 83177,
+    0, 0, 0, 0, 0, 0, 92762, 0, 0, 120613, 67247, 1629, 0, 796, 0, 0, 74123,
+    72334, 127587, 72336, 43388, 0, 43944, 72335, 478, 65151, 0, 128147, 0,
+    0, 0, 0, 0, 42933, 1206, 71209, 43837, 0, 3843, 12011, 0, 3361, 0, 8121,
+    10715, 7578, 0, 0, 0, 10530, 12348, 8653, 0, 0, 0, 9551, 0, 0, 784, 0, 0,
+    0, 0, 0, 0, 43937, 0, 0, 43938, 43935, 73765, 66230, 0, 0, 0, 43936, 0,
+    43932, 11102, 0, 0, 42753, 67165, 0, 78324, 0, 0, 6975, 917928, 5415,
+    12176, 0, 0, 3462, 43940, 42629, 78691, 128016, 43942, 0, 9759, 0, 0,
+    78320, 8114, 78321, 78697, 78696, 78695, 8710, 0, 118956, 0, 4051, 92657,
+    0, 71206, 0, 0, 0, 128857, 0, 1619, 9703, 77986, 0, 42112, 0, 1875, 0,
+    42109, 0, 0, 71189, 121160, 64907, 5396, 13144, 0, 0, 5575, 9675, 0,
+    5940, 226, 0, 6336, 0, 0, 0, 5116, 64521, 0, 0, 0, 121390, 125048, 74138,
+    0, 74139, 128447, 92249, 0, 0, 0, 0, 8935, 0, 0, 0, 0, 616, 78131, 65178,
+    4684, 78701, 983880, 74631, 0, 0, 0, 74460, 42110, 0, 10870, 8557, 11054,
+    68664, 0, 0, 0, 0, 0, 0, 0, 0, 65597, 0, 7651, 6846, 0, 0, 68868, 0, 0,
+    118966, 129302, 40997, 127218, 0, 0, 40998, 0, 74488, 71182, 9800, 0, 0,
+    0, 41000, 0, 5114, 55263, 3386, 70730, 42574, 0, 5115, 5394, 0, 128756,
+    5113, 0, 64855, 0, 4425, 0, 0, 0, 43967, 0, 0, 0, 5112, 12173, 127037, 0,
+    0, 74998, 0, 0, 0, 0, 0, 64874, 43964, 1587, 0, 0, 0, 0, 1369, 917931,
+    9959, 0, 43963, 4560, 0, 0, 0, 0, 0, 0, 43961, 42601, 4514, 72149, 0, 0,
+    0, 65041, 10965, 120905, 0, 0, 12542, 0, 65341, 0, 65829, 0, 0, 10475, 0,
+    0, 0, 0, 11795, 0, 0, 0, 127102, 127101, 74956, 7099, 11275, 67681,
+    127096, 0, 9336, 0, 42626, 43966, 7798, 64474, 64259, 0, 5730, 119809,
+    43018, 983174, 93796, 0, 0, 0, 69401, 0, 0, 5127, 11285, 0, 5495, 4273,
+    0, 74765, 10849, 6346, 5493, 6342, 68636, 74319, 5492, 0, 0, 169, 5497,
+    125053, 0, 0, 68198, 0, 0, 128417, 0, 0, 12738, 0, 983076, 5321, 0, 0, 0,
+    5323, 120732, 9773, 125209, 4683, 74318, 0, 68823, 0, 0, 0, 0, 129553, 0,
+    0, 0, 0, 834, 0, 1803, 0, 5733, 0, 0, 71312, 5731, 1381, 2891, 0, 0, 0,
+    64525, 0, 2881, 92996, 93847, 9601, 2879, 0, 0, 73129, 5729, 0, 0, 0,
+    64881, 127905, 9361, 0, 2887, 0, 3526, 6298, 0, 121219, 0, 0, 0, 8572,
+    127863, 77896, 0, 71174, 0, 0, 71197, 0, 12096, 0, 0, 0, 110745, 71176,
+    110746, 65279, 0, 121236, 5734, 0, 0, 0, 0, 0, 41641, 12717, 0, 12552,
+    983615, 66713, 0, 0, 41643, 110747, 0, 8713, 41640, 78657, 41645, 66712,
+    125196, 0, 66726, 66711, 0, 93994, 0, 3472, 64863, 0, 121424, 0, 0, 0,
+    125203, 67837, 0, 0, 0, 0, 0, 0, 121440, 0, 0, 129461, 119008, 92402,
+    65017, 0, 0, 66668, 0, 0, 0, 0, 0, 119822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 121043, 66471, 12216, 0, 40988, 0, 0, 0, 0, 0, 2396, 129078, 0, 0, 0,
+    64940, 0, 8321, 119823, 128165, 100409, 83299, 996, 0, 0, 4249, 0, 83294,
+    92535, 8222, 0, 118875, 71213, 0, 0, 0, 0, 8534, 72844, 40983, 0, 125195,
+    0, 12551, 73960, 125193, 74469, 12558, 121039, 0, 10052, 40982, 129371,
+    0, 0, 0, 127403, 0, 917559, 0, 78364, 1563, 0, 0, 19911, 0, 0, 0, 71363,
+    0, 7797, 78708, 10006, 0, 3308, 119134, 74940, 0, 0, 78488, 0, 0, 0, 0,
+    0, 128462, 9200, 10046, 9612, 0, 8218, 66496, 0, 43742, 78489, 0, 0, 0,
+    0, 67826, 0, 70056, 508, 128585, 0, 126539, 0, 0, 0, 0, 0, 0, 0, 124950,
+    0, 194601, 0, 0, 0, 0, 6659, 0, 0, 0, 0, 0, 0, 41634, 0, 41639, 71169,
+    11941, 0, 0, 0, 42180, 68505, 43753, 3249, 41637, 93982, 12328, 501,
+    93985, 10601, 0, 6503, 0, 92192, 0, 71181, 0, 6505, 74010, 0, 13064,
+    126112, 121105, 6500, 5526, 0, 128949, 0, 0, 92376, 0, 9678, 120832, 0,
+    41706, 0, 0, 0, 8936, 92964, 119123, 4208, 0, 0, 0, 67742, 0, 74379,
+    128605, 0, 0, 92422, 983109, 0, 66475, 0, 5027, 0, 0, 0, 5069, 0, 5028,
+    0, 0, 0, 5026, 0, 0, 6331, 0, 0, 0, 0, 41076, 0, 74790, 0, 0, 0, 0, 5029,
+    0, 5317, 3598, 0, 41070, 92166, 11185, 6663, 0, 6507, 0, 126079, 0, 1716,
+    983691, 0, 917824, 620, 41001, 0, 917823, 43758, 0, 71116, 5024, 0,
+    41003, 0, 5025, 7297, 0, 75039, 0, 119328, 65557, 0, 0, 983599, 0, 0, 0,
+    0, 43947, 43946, 0, 0, 128363, 6105, 0, 119325, 983226, 0, 68203, 43945,
+    66491, 43939, 0, 68144, 78718, 2301, 0, 0, 66490, 6979, 0, 7721, 0, 0,
+    1592, 0, 0, 121096, 41048, 129358, 829, 0, 92406, 0, 120247, 0, 41056, 0,
+    0, 10953, 41066, 0, 917813, 482, 101554, 0, 0, 43606, 71185, 0, 0, 0,
+    72262, 110863, 72421, 12050, 0, 5315, 917817, 0, 0, 42061, 917816, 0, 0,
+    68417, 917815, 0, 0, 42059, 0, 0, 120723, 42058, 3960, 11043, 11337,
+    121358, 0, 0, 3958, 101568, 0, 917818, 0, 917819, 0, 0, 42064, 11959,
+    983695, 0, 0, 0, 0, 128498, 64336, 10478, 92629, 70350, 120704, 0, 0,
+    42437, 1555, 0, 8691, 129656, 2215, 41662, 119046, 0, 0, 0, 93952, 0,
+    66481, 41664, 0, 42578, 0, 41661, 78715, 78714, 9356, 0, 129544, 0, 1286,
+    110701, 0, 0, 983206, 128925, 42476, 0, 11156, 0, 0, 0, 101583, 72123, 0,
+    10020, 43359, 72827, 0, 120946, 41627, 0, 11979, 0, 41628, 533, 11931,
+    65225, 0, 125122, 129994, 0, 68118, 0, 4377, 0, 0, 8587, 72097, 13193,
+    64350, 68233, 0, 41924, 0, 7735, 0, 127585, 120843, 0, 65820, 0, 0,
+    43461, 7757, 0, 0, 43787, 66493, 77943, 4168, 43904, 73952, 0, 0, 121072,
+    4440, 43902, 77948, 66837, 77946, 43903, 77944, 77945, 0, 120909, 120826,
+    120226, 66492, 43901, 64625, 0, 0, 0, 0, 10013, 64434, 0, 983112, 0,
+    11782, 64382, 0, 0, 0, 0, 41630, 630, 120960, 0, 0, 70165, 1043, 93017,
+    0, 0, 0, 124945, 313, 129590, 0, 0, 65593, 7445, 43906, 5750, 42258, 0,
+    55222, 68222, 11268, 11225, 0, 8526, 0, 0, 43894, 66495, 69990, 0, 92990,
+    0, 10707, 7863, 0, 0, 70692, 631, 77952, 77953, 66443, 71171, 83313, 0,
+    0, 0, 13305, 77961, 43925, 43924, 77956, 77957, 66903, 66328, 42381,
+    77962, 0, 0, 0, 0, 0, 0, 43899, 66821, 77967, 9157, 77965, 77966, 77963,
+    77964, 0, 0, 180, 73904, 0, 0, 66494, 12674, 43896, 0, 0, 43890, 43897,
+    0, 11535, 0, 66769, 5185, 7165, 5521, 10334, 5519, 71329, 10302, 12351,
+    83333, 1027, 5181, 0, 5117, 0, 5179, 73955, 6845, 991, 3332, 43676,
+    41647, 0, 73883, 92571, 77979, 3405, 69572, 0, 5523, 43915, 66487, 92459,
+    74943, 9549, 0, 125093, 43923, 0, 43682, 74884, 120537, 0, 43921, 0,
+    71184, 0, 43922, 128709, 0, 10414, 9846, 0, 10350, 0, 43918, 77981,
+    75075, 77978, 77980, 66485, 77977, 77973, 77974, 78057, 43909, 73983,
+    12330, 0, 0, 0, 43910, 69291, 3407, 6293, 0, 68149, 43908, 129060, 0,
+    10209, 0, 4195, 0, 9010, 983686, 75072, 6332, 0, 0, 65871, 0, 1736, 0,
+    3901, 0, 0, 65890, 128801, 10446, 0, 693, 9130, 314, 78119, 64149, 0, 0,
+    0, 11026, 0, 5332, 6940, 0, 0, 127007, 119831, 0, 273, 8165, 0, 83307, 0,
+    0, 12824, 43911, 4528, 5320, 6301, 43662, 6133, 0, 9463, 73738, 127141,
+    10922, 121069, 0, 0, 0, 0, 0, 2569, 0, 2326, 0, 2565, 0, 66401, 0, 0, 0,
+    0, 41848, 2567, 78620, 121145, 4044, 92646, 0, 12233, 0, 9509, 0, 0,
+    127158, 7336, 0, 0, 0, 129598, 0, 67235, 0, 0, 0, 0, 2222, 66499, 0,
+    127170, 0, 10895, 0, 274, 983763, 1858, 0, 67849, 55251, 0, 3133, 0,
+    71857, 0, 9610, 0, 8197, 0, 0, 0, 41665, 5868, 0, 0, 72120, 0, 19940,
+    43668, 41667, 0, 0, 1923, 0, 0, 0, 0, 0, 0, 0, 0, 6464, 92750, 2996,
+    125221, 0, 68481, 41835, 4047, 41842, 0, 0, 129601, 0, 0, 0, 0, 293, 0,
+    0, 64791, 41827, 0, 0, 10579, 8560, 0, 0, 118835, 4803, 73805, 1739, 0,
+    3900, 128967, 73737, 0, 0, 73957, 0, 66474, 41971, 0, 0, 0, 0, 0, 11716,
+    66473, 0, 121071, 0, 128080, 0, 0, 0, 0, 0, 0, 0, 6632, 73861, 0, 74770,
+    0, 0, 8914, 0, 0, 3183, 1435, 0, 0, 0, 0, 0, 0, 5746, 67392, 0, 0, 0,
+    83506, 0, 7082, 71481, 12618, 5059, 983597, 83524, 43604, 0, 0, 0, 0, 0,
+    0, 8227, 0, 1218, 0, 64416, 65848, 92884, 0, 0, 0, 126987, 0, 0, 0, 0, 0,
+    0, 83515, 83507, 0, 0, 42672, 71194, 43224, 0, 0, 0, 0, 0, 0, 0, 65905,
+    0, 42662, 0, 121159, 0, 129536, 0, 7794, 0, 42953, 6377, 0, 126080, 3669,
+    3968, 0, 71319, 69658, 129550, 0, 66296, 0, 0, 0, 0, 124998, 6699,
     126120, 0, 0, 66678, 0, 0, 0, 8409, 119527, 19967, 0, 0, 9502, 0, 0,
     6115, 0, 41654, 0, 0, 0, 41655, 113779, 43975, 72427, 0, 0, 0, 0, 41657,
-    10778, 0, 9533, 184, 1553, 128868, 0, 0, 0, 0, 0, 0, 0, 0, 73697, 0,
-    92480, 0, 128938, 74292, 0, 5157, 4020, 0, 128154, 43788, 64818, 0, 0, 0,
-    92979, 0, 0, 74377, 11029, 66651, 0, 0, 125202, 0, 0, 7877, 121070, 0, 0,
-    127953, 2810, 9955, 0, 0, 42817, 0, 65122, 11715, 0, 0, 0, 71270, 0, 0,
-    0, 0, 0, 70199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78222, 127981, 0, 0, 0, 0,
-    0, 11290, 0, 0, 0, 0, 8315, 0, 0, 0, 74595, 0, 0, 0, 42531, 0, 0, 0,
-    74589, 43993, 0, 0, 0, 0, 43690, 0, 119139, 42730, 0, 0, 0, 64926, 0, 0,
-    43830, 65257, 0, 42728, 0, 128697, 123150, 0, 43540, 0, 0, 12725, 72993,
-    78635, 127826, 223, 0, 69675, 0, 0, 0, 0, 0, 0, 42605, 0, 0, 0, 0, 0, 0,
-    0, 0, 78621, 0, 78619, 119062, 0, 0, 0, 42676, 129353, 64800, 78617,
-    83504, 68126, 1213, 0, 0, 797, 0, 0, 83021, 83005, 64387, 4115, 0, 0, 0,
-    0, 10679, 83001, 121091, 0, 64276, 83498, 13168, 983710, 0, 10136, 0, 0,
-    65088, 0, 4262, 0, 0, 0, 10701, 0, 3101, 0, 123204, 0, 0, 11373, 0, 0, 0,
-    9117, 0, 0, 4539, 0, 0, 12727, 0, 0, 0, 43684, 74567, 68877, 983707,
-    12724, 73940, 0, 0, 0, 0, 0, 7947, 12003, 0, 74593, 121140, 69653, 74807,
-    42018, 0, 0, 0, 65888, 0, 0, 69683, 0, 120306, 0, 0, 12595, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 69848, 68307, 0, 4405, 0, 128336, 129032, 69216, 0,
-    0, 0, 0, 6817, 67400, 120314, 0, 0, 998, 0, 13105, 120313, 64327, 1558,
-    0, 1991, 7882, 0, 0, 0, 530, 0, 0, 0, 12002, 0, 68422, 0, 10979, 0,
-    41823, 70696, 0, 0, 7896, 0, 66676, 0, 120325, 0, 0, 129407, 94033, 0,
-    6311, 110725, 41698, 0, 12049, 78133, 0, 125020, 41705, 0, 0, 121298, 0,
-    66822, 0, 65389, 0, 66027, 0, 0, 41699, 8340, 0, 69776, 0, 128639, 0,
-    1988, 5407, 69978, 0, 65912, 93059, 0, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    126238, 0, 19913, 0, 113733, 0, 0, 74279, 0, 10956, 0, 41674, 19964,
-    41679, 65084, 41675, 195031, 0, 0, 0, 0, 983089, 0, 10794, 128961, 13217,
-    0, 0, 0, 5280, 0, 0, 12905, 41610, 11532, 0, 0, 768, 120545, 442, 0, 0,
-    0, 64081, 41682, 0, 41693, 0, 77993, 77994, 0, 4804, 6994, 0, 0, 0,
-    41696, 467, 983915, 0, 0, 0, 0, 8678, 0, 69682, 64801, 0, 0, 0, 0, 64093,
-    12043, 0, 69666, 0, 2029, 65191, 119246, 42847, 0, 0, 0, 0, 0, 0, 0,
-    70339, 126116, 0, 0, 8019, 73856, 0, 0, 0, 0, 2355, 12150, 65725, 77988,
-    77989, 68033, 77987, 0, 77985, 0, 0, 68388, 0, 74171, 0, 0, 0, 11301,
-    78013, 78008, 78010, 9874, 78007, 983326, 71064, 3050, 0, 0, 0, 78016,
-    78017, 71852, 78015, 0, 0, 0, 92242, 0, 69642, 0, 0, 0, 0, 0, 0, 78025,
-    0, 78023, 78024, 11847, 10545, 0, 10887, 0, 123179, 0, 0, 0, 83352,
-    64942, 92363, 9996, 8508, 0, 0, 8195, 0, 42171, 0, 3722, 0, 63751, 0, 0,
-    92637, 69670, 0, 41552, 69854, 0, 78639, 0, 0, 129374, 128978, 0, 0, 0,
-    7920, 70285, 4021, 0, 0, 0, 119663, 0, 0, 78021, 78022, 78019, 78020,
-    1802, 78018, 0, 74895, 41659, 41671, 1827, 0, 64396, 41668, 128524,
-    41673, 0, 11422, 71846, 0, 11370, 0, 68412, 41345, 0, 0, 0, 0, 0, 0,
-    65114, 0, 2104, 64858, 0, 0, 7553, 0, 41560, 11970, 0, 917920, 0, 68495,
-    74131, 74130, 0, 0, 0, 611, 74129, 64871, 0, 0, 0, 0, 74854, 0, 70466, 0,
-    0, 0, 121147, 0, 68487, 41669, 7094, 917921, 0, 123144, 74054, 0, 0, 0,
-    839, 0, 7695, 0, 0, 0, 92202, 0, 121053, 123157, 67885, 0, 7206, 0, 6647,
-    43986, 0, 0, 0, 0, 0, 0, 127936, 43748, 66746, 0, 12298, 110802, 983992,
-    110800, 64924, 0, 73931, 9468, 74245, 0, 0, 74246, 0, 0, 118830, 0,
-    71851, 1279, 0, 6224, 0, 92405, 128601, 0, 128997, 0, 0, 0, 5032, 0, 0,
-    0, 0, 0, 5034, 0, 0, 72846, 42702, 0, 0, 13294, 0, 64869, 0, 67808, 9129,
-    123632, 0, 0, 120819, 68387, 120168, 120169, 120170, 120171, 5518, 4174,
-    120166, 120167, 120160, 120161, 120162, 434, 41437, 66212, 120158,
-    120159, 0, 0, 118867, 0, 524, 0, 74029, 0, 126559, 0, 0, 0, 10355, 10419,
-    74025, 77847, 0, 69725, 0, 120656, 0, 67876, 0, 0, 0, 74145, 74039, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 5445, 0, 93779, 71855, 7391, 8989, 0, 74068, 0,
-    0, 0, 0, 4962, 0, 8855, 0, 70820, 0, 0, 0, 0, 71847, 0, 0, 0, 10451, 0,
+    10778, 0, 9533, 184, 1553, 128868, 69574, 0, 0, 0, 129420, 0, 0, 0,
+    73697, 0, 92480, 0, 128938, 74292, 0, 5157, 4020, 0, 128154, 43788,
+    64818, 0, 0, 0, 92979, 0, 0, 74377, 11029, 66651, 0, 0, 125202, 0, 0,
+    7877, 121070, 101411, 0, 119828, 2810, 9955, 0, 0, 42817, 0, 65122,
+    11715, 0, 0, 0, 71270, 0, 0, 0, 0, 0, 70199, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 78222, 127981, 0, 0, 0, 0, 0, 11290, 0, 0, 0, 0, 8315, 0, 0, 0, 74595,
+    0, 0, 0, 42531, 0, 0, 0, 74589, 43993, 0, 0, 0, 0, 43690, 0, 119139,
+    42730, 0, 0, 0, 64926, 0, 0, 43830, 65257, 0, 42728, 0, 128697, 123150,
+    0, 43540, 0, 0, 12725, 72993, 78635, 127826, 223, 0, 69675, 0, 0, 0, 0,
+    0, 0, 42605, 0, 0, 0, 0, 0, 0, 0, 0, 78621, 0, 78619, 119062, 0, 0, 0,
+    42676, 129353, 64800, 78617, 83504, 68126, 1213, 0, 0, 797, 0, 0, 83021,
+    83005, 64387, 4115, 0, 0, 0, 129857, 10679, 83001, 121091, 0, 64276,
+    83498, 13168, 83011, 0, 10136, 0, 0, 65088, 0, 4262, 129866, 0, 0, 10701,
+    0, 3101, 0, 123204, 0, 0, 11373, 0, 0, 12731, 9117, 0, 0, 4539, 0, 0,
+    12727, 0, 0, 0, 43684, 74567, 68877, 983707, 12724, 73940, 0, 0, 0, 0, 0,
+    7947, 12003, 0, 74593, 121140, 69653, 74807, 42018, 0, 0, 0, 65888, 0, 0,
+    69683, 0, 120306, 0, 0, 12595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69848,
+    68307, 0, 4405, 0, 128336, 129032, 69216, 0, 128011, 0, 0, 6817, 67400,
+    120314, 0, 0, 998, 0, 13105, 120313, 64327, 1558, 0, 1991, 7882, 0, 0, 0,
+    530, 0, 0, 0, 12002, 0, 68422, 0, 10979, 0, 41823, 70696, 0, 0, 7896, 0,
+    66676, 0, 120325, 0, 0, 129407, 94033, 0, 6311, 110725, 41698, 0, 12049,
+    78133, 0, 125020, 41705, 0, 0, 121298, 0, 66822, 0, 65389, 0, 66027, 0,
+    0, 41699, 8340, 0, 69776, 0, 128639, 0, 1988, 5407, 69978, 0, 65912,
+    93059, 0, 2336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126238, 0, 19913, 0, 113733,
+    0, 0, 74279, 0, 10956, 0, 41674, 19964, 41679, 65084, 41675, 195031, 0,
+    0, 0, 0, 983089, 0, 10794, 128961, 13217, 0, 0, 0, 5280, 0, 0, 12905,
+    41610, 11532, 0, 0, 768, 120545, 442, 0, 0, 0, 64081, 41682, 0, 41693, 0,
+    77993, 77994, 0, 4804, 6994, 983114, 0, 0, 41696, 467, 983915, 0, 0, 0,
+    0, 8678, 0, 69682, 64801, 0, 0, 0, 0, 64093, 12043, 0, 69666, 0, 2029,
+    65191, 119246, 42847, 0, 0, 0, 0, 0, 0, 0, 70339, 126116, 0, 0, 8019,
+    73856, 0, 0, 0, 0, 2355, 12150, 65725, 77988, 77989, 68033, 77987, 0,
+    77985, 0, 0, 68388, 0, 74171, 0, 0, 0, 11301, 78013, 78008, 78010, 9874,
+    78007, 983326, 71064, 3050, 0, 0, 0, 78016, 78017, 71852, 78015, 0, 0, 0,
+    92242, 0, 69642, 0, 0, 43883, 0, 0, 0, 78025, 0, 78023, 78024, 11847,
+    10545, 0, 10887, 0, 123179, 0, 0, 0, 83352, 64942, 92363, 9996, 8508, 0,
+    0, 8195, 0, 42171, 0, 3722, 0, 63751, 0, 0, 92637, 69670, 0, 41552,
+    69854, 0, 78639, 0, 0, 129374, 128978, 0, 0, 0, 7920, 70285, 4021, 0, 0,
+    0, 119663, 0, 0, 78021, 78022, 78019, 78020, 1802, 78018, 0, 74895,
+    41659, 41671, 1827, 0, 64396, 41668, 128524, 41673, 0, 11422, 71846, 0,
+    11370, 0, 68412, 41345, 0, 0, 0, 0, 0, 0, 65114, 0, 2104, 64858, 0, 0,
+    7553, 0, 41560, 11970, 0, 917920, 0, 68495, 74131, 74130, 0, 0, 0, 611,
+    74129, 64871, 129958, 0, 0, 0, 74854, 0, 70466, 0, 0, 0, 121147, 0,
+    68487, 41669, 7094, 917921, 0, 123144, 74054, 0, 0, 0, 839, 0, 7695, 0,
+    0, 0, 92202, 0, 121053, 123157, 67885, 0, 7206, 0, 6647, 43986, 0, 0, 0,
+    0, 0, 0, 127936, 43748, 66746, 0, 12298, 110802, 983992, 110800, 64924,
+    0, 73931, 9468, 74245, 0, 0, 74246, 0, 0, 118830, 0, 71851, 1279, 0,
+    6224, 0, 92405, 128601, 129886, 128997, 0, 0, 0, 5032, 0, 0, 0, 0, 0,
+    5034, 0, 0, 72846, 42702, 0, 0, 13294, 0, 64869, 0, 67808, 9129, 123632,
+    0, 0, 120819, 68387, 120168, 120169, 120170, 120171, 5518, 4174, 120166,
+    120167, 120160, 120161, 120162, 434, 41437, 66212, 120158, 120159, 0, 0,
+    118867, 0, 524, 0, 74029, 0, 126559, 0, 0, 0, 10355, 10419, 74025, 77847,
+    0, 69725, 0, 120656, 0, 67876, 0, 0, 0, 74145, 74039, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 5445, 0, 93779, 71855, 7391, 8989, 0, 74068, 0, 0, 0, 0,
+    4962, 983133, 8855, 0, 70820, 0, 0, 0, 0, 71847, 0, 0, 0, 10451, 0,
     67653, 120153, 12443, 120155, 9947, 120149, 120150, 120151, 13128, 0,
-    120146, 120147, 0, 0, 0, 0, 0, 0, 74059, 74062, 6217, 74053, 43846, 0,
-    74049, 0, 0, 0, 0, 0, 0, 0, 0, 42595, 0, 68112, 118860, 0, 0, 92497,
-    74949, 128953, 126245, 0, 0, 0, 129684, 0, 119251, 0, 0, 0, 0, 0, 6216,
-    0, 0, 9455, 127027, 8124, 128851, 0, 6944, 0, 0, 0, 2828, 128550, 531,
-    42638, 0, 0, 0, 43428, 0, 3614, 2827, 9696, 0, 0, 0, 4354, 0, 78562,
+    120146, 120147, 0, 0, 0, 0, 0, 129715, 74059, 74062, 6217, 74053, 43846,
+    0, 74049, 0, 0, 0, 0, 0, 0, 0, 0, 42595, 0, 68112, 118860, 0, 0, 92497,
+    74949, 128953, 126245, 0, 0, 0, 42997, 0, 119251, 0, 0, 0, 0, 0, 6216, 0,
+    0, 9455, 127027, 8124, 128851, 0, 6944, 0, 0, 0, 2828, 128550, 531,
+    42638, 0, 0, 129888, 43428, 0, 3614, 2827, 9696, 0, 0, 0, 4354, 0, 78562,
     78561, 0, 120691, 0, 42599, 42597, 0, 68829, 125012, 0, 127277, 0,
     120421, 0, 983164, 0, 0, 10121, 120422, 74950, 123142, 69715, 0, 0,
     120423, 120630, 12608, 125244, 0, 74144, 9700, 12580, 0, 128911, 0,
@@ -27414,246 +28275,248 @@
     0, 67682, 0, 120528, 122901, 74272, 0, 0, 0, 0, 69667, 0, 124933, 74456,
     74302, 42589, 0, 0, 0, 0, 0, 0, 0, 0, 41508, 0, 323, 125211, 0, 42698,
     8131, 0, 4625, 0, 4630, 0, 0, 0, 74316, 78417, 2668, 92483, 0, 42640, 0,
-    2519, 0, 92474, 92479, 0, 983085, 5049, 42659, 119011, 0, 7754, 10854,
-    8738, 74623, 0, 0, 0, 649, 0, 0, 0, 0, 0, 1013, 70707, 68212, 705, 0, 0,
-    127803, 1183, 126519, 9320, 0, 0, 8157, 0, 0, 0, 0, 0, 0, 0, 11913, 0,
-    42848, 0, 64925, 0, 0, 70693, 0, 0, 2051, 0, 0, 0, 0, 0, 0, 0, 8466, 0,
-    4626, 8464, 8472, 68844, 4629, 8499, 0, 0, 4624, 194623, 0, 94025, 0,
+    2519, 0, 92474, 92479, 0, 983085, 5049, 42659, 119011, 64705, 7754,
+    10854, 8738, 74623, 0, 0, 0, 649, 0, 0, 0, 0, 0, 1013, 70707, 68212, 705,
+    0, 0, 127803, 1183, 126519, 9320, 0, 0, 8157, 0, 0, 0, 0, 0, 0, 0, 11913,
+    0, 42848, 0, 64925, 0, 0, 70693, 0, 0, 2051, 0, 0, 0, 0, 0, 0, 0, 8466,
+    0, 4626, 8464, 8472, 68844, 4629, 8499, 0, 0, 4624, 194623, 0, 94025, 0,
     7805, 0, 94007, 6935, 0, 0, 0, 0, 0, 0, 0, 8492, 0, 8459, 0, 8497, 8496,
-    0, 0, 0, 0, 0, 0, 0, 0, 65849, 0, 0, 0, 12451, 3328, 8684, 0, 6102, 0,
-    5298, 0, 5294, 0, 129615, 0, 0, 0, 0, 43617, 0, 0, 0, 0, 0, 77863,
-    128695, 0, 0, 0, 0, 0, 5292, 0, 0, 42688, 5302, 3970, 0, 0, 1793, 0, 0,
-    0, 0, 0, 65263, 0, 0, 0, 0, 0, 0, 13219, 9569, 0, 74383, 0, 0, 72157, 0,
-    42949, 0, 0, 0, 5322, 0, 0, 43631, 5324, 0, 128694, 41614, 65269, 6230,
-    0, 0, 0, 3360, 0, 11523, 72726, 92488, 9926, 7197, 0, 68429, 126575,
-    41821, 1249, 0, 127951, 0, 123641, 0, 0, 0, 74459, 41807, 0, 41815, 0, 0,
-    0, 0, 0, 128248, 0, 66835, 0, 0, 72145, 41800, 0, 0, 0, 41811, 74466,
-    93966, 6670, 77882, 0, 0, 43092, 0, 0, 0, 0, 0, 128655, 0, 0, 0, 0,
-    74501, 74005, 0, 74387, 69860, 315, 12813, 128556, 72409, 0, 72408, 0, 0,
-    73061, 0, 0, 1378, 0, 0, 0, 72407, 3066, 0, 0, 72406, 0, 0, 0, 8787,
-    194615, 0, 41618, 0, 0, 0, 194614, 64652, 194611, 42088, 125226, 0, 0, 0,
-    0, 7176, 43756, 0, 0, 74492, 0, 74534, 0, 0, 0, 127199, 0, 128630, 74525,
-    0, 194594, 12930, 7168, 74514, 0, 74515, 0, 128919, 43962, 9527, 120659,
-    70123, 12977, 69723, 0, 93783, 194598, 41236, 92235, 65168, 118838,
-    41237, 5848, 0, 194600, 3670, 194601, 0, 0, 0, 7890, 0, 11298, 0, 0,
-    6229, 0, 0, 0, 194593, 128907, 0, 0, 0, 4120, 65337, 65336, 0, 0, 0, 0,
-    9366, 0, 0, 0, 65327, 65326, 65325, 65324, 65323, 42216, 65321, 65320,
-    65335, 65334, 65333, 65332, 65331, 65330, 65329, 42689, 0, 43943, 118885,
-    42073, 6785, 68491, 0, 42076, 7196, 65318, 2035, 65316, 4106, 65314,
-    65313, 42074, 0, 41228, 0, 0, 41241, 93786, 41239, 43533, 0, 7189,
-    194602, 0, 43941, 0, 42802, 0, 8487, 0, 0, 4615, 12695, 0, 0, 12175,
-    100414, 0, 0, 7809, 0, 0, 0, 0, 6590, 69762, 0, 64738, 0, 0, 0, 0, 0, 0,
-    2025, 0, 0, 0, 10637, 71860, 0, 1570, 43839, 2835, 83052, 10624, 43623,
-    194587, 0, 78433, 0, 42812, 0, 2825, 0, 128287, 0, 2821, 0, 92327, 7365,
-    83043, 0, 68296, 0, 2823, 0, 0, 0, 2831, 0, 0, 11465, 0, 0, 0, 0, 0,
-    7181, 0, 41332, 0, 12333, 0, 0, 0, 0, 0, 9883, 127294, 73906, 70751, 0,
-    71863, 0, 0, 0, 0, 0, 0, 43741, 0, 8166, 70739, 0, 0, 74535, 0, 65297,
-    68294, 571, 0, 8752, 0, 5288, 118822, 1541, 0, 127284, 8864, 0, 0, 0, 0,
-    0, 113778, 12151, 0, 66874, 0, 1035, 0, 0, 7881, 701, 65936, 128493, 0,
-    70462, 0, 11403, 0, 0, 82991, 0, 983142, 70472, 3994, 11421, 121217,
-    127297, 127242, 127300, 70659, 127303, 0, 125205, 2855, 127828, 0, 41621,
-    68214, 0, 0, 10654, 82945, 119226, 12164, 41623, 7906, 0, 74297, 7182, 0,
-    83069, 0, 0, 0, 0, 121115, 0, 0, 747, 0, 92463, 12019, 43136, 0, 110861,
-    0, 0, 8001, 0, 0, 69394, 0, 0, 0, 68373, 0, 0, 0, 128279, 0, 71915, 0, 0,
-    7282, 94066, 0, 0, 0, 0, 0, 5286, 83061, 0, 3718, 0, 83057, 0, 194584,
-    71905, 0, 128480, 0, 0, 0, 0, 9206, 82980, 113824, 6802, 0, 41653, 0,
-    1241, 0, 0, 0, 0, 68124, 41651, 42937, 0, 83042, 41650, 0, 83037, 0,
-    12914, 2814, 0, 119552, 0, 0, 0, 118900, 0, 0, 0, 917546, 71862, 0, 0, 0,
-    3494, 10189, 69784, 0, 0, 71861, 0, 0, 65875, 0, 0, 127762, 0, 74215,
-    43065, 0, 0, 7200, 0, 3261, 0, 0, 0, 65889, 71888, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 129424, 0, 635, 0, 0, 74753, 0, 92420, 73997, 0, 0, 43905, 0,
-    118834, 126125, 0, 6667, 0, 983263, 0, 0, 125200, 0, 0, 0, 0, 83137, 0,
-    0, 0, 0, 0, 121104, 127856, 125112, 71885, 0, 120125, 7866, 194573,
-    92770, 194574, 0, 120140, 126074, 2849, 0, 0, 42157, 12960, 0, 11812, 0,
-    74509, 0, 69881, 0, 0, 0, 123156, 7178, 0, 0, 0, 0, 129041, 11534, 1967,
-    0, 0, 71361, 7015, 120298, 72757, 0, 12989, 0, 9368, 983638, 1624, 43270,
-    0, 0, 10818, 0, 83091, 0, 120908, 0, 0, 0, 0, 0, 0, 6169, 12871, 0, 2798,
-    65176, 4958, 42752, 119025, 0, 0, 0, 70346, 66448, 0, 113780, 68364, 0,
-    0, 0, 68360, 0, 73746, 120945, 68352, 0, 73787, 83110, 2154, 7199, 64955,
-    0, 0, 0, 0, 0, 66507, 0, 69853, 0, 0, 0, 0, 0, 0, 0, 92517, 118882,
-    120301, 13297, 0, 129446, 0, 0, 0, 0, 6658, 8045, 0, 0, 983854, 92319,
-    83101, 0, 72126, 0, 0, 0, 2416, 3310, 0, 0, 379, 0, 43755, 0, 0, 0,
-    68362, 1284, 0, 73756, 0, 0, 83141, 70784, 0, 0, 0, 0, 8515, 83144,
-    83143, 0, 0, 0, 8529, 93782, 0, 7564, 0, 0, 0, 0, 73757, 73760, 42359, 0,
-    2031, 0, 7202, 0, 12676, 0, 0, 128418, 0, 7710, 1610, 73801, 0, 0, 0,
-    983607, 43917, 0, 9974, 228, 0, 10398, 0, 0, 0, 92241, 70062, 118927,
-    42999, 1725, 65533, 8196, 9352, 0, 0, 66868, 0, 8502, 5762, 0, 0, 43898,
-    0, 0, 0, 0, 43914, 0, 126507, 64598, 13001, 9326, 83082, 43916, 1557, 0,
-    983860, 6330, 6805, 8631, 2545, 70052, 0, 0, 0, 0, 70410, 0, 42762, 0,
-    42914, 126516, 262, 1637, 0, 83025, 129491, 0, 128757, 0, 0, 0, 128922,
-    0, 43658, 0, 0, 129183, 6419, 0, 0, 0, 0, 93989, 0, 0, 7194, 5291, 0,
-    43666, 0, 0, 0, 0, 128293, 0, 12881, 123596, 0, 73842, 0, 9011, 0, 0, 0,
-    70436, 179, 43644, 0, 0, 64747, 0, 118813, 0, 0, 121389, 0, 126629, 0,
-    73850, 2801, 119837, 42069, 119839, 119838, 119841, 42072, 92736, 119842,
-    0, 0, 0, 8377, 0, 42070, 119313, 119834, 119853, 4389, 43656, 1633,
-    119857, 119856, 119859, 11119, 119845, 119844, 9967, 119846, 119849,
-    4612, 119851, 119850, 42913, 70456, 0, 0, 10782, 66898, 0, 119141, 0, 0,
-    0, 11541, 69636, 0, 0, 119614, 2731, 0, 0, 0, 4102, 0, 73878, 0, 0, 0, 0,
-    0, 11283, 0, 0, 0, 0, 0, 43674, 0, 0, 126705, 0, 0, 0, 0, 11142, 128304,
-    0, 12975, 0, 123208, 0, 0, 74072, 0, 55269, 0, 0, 0, 78577, 78576, 0, 0,
-    82966, 82974, 70448, 0, 0, 82968, 0, 0, 0, 0, 0, 113809, 0, 69399, 64909,
-    0, 11790, 74019, 0, 128066, 0, 8561, 94076, 129481, 125045, 0, 65674,
-    7230, 0, 0, 8778, 0, 0, 67725, 2071, 0, 6459, 68325, 7628, 65092, 73903,
-    0, 11342, 129388, 0, 0, 93965, 94081, 0, 11810, 70057, 10723, 967, 0,
-    121116, 73905, 0, 6387, 0, 12307, 43913, 121089, 0, 127584, 0, 1886, 0,
-    43895, 870, 7648, 0, 7662, 7652, 876, 871, 877, 7665, 878, 42015, 879,
-    43692, 4563, 0, 0, 0, 73072, 867, 9520, 872, 7656, 868, 873, 7642, 7659,
-    869, 874, 7644, 0, 875, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68452, 0,
-    0, 42067, 0, 0, 0, 12292, 0, 0, 0, 42012, 0, 0, 83388, 0, 0, 8494, 4611,
-    0, 72344, 0, 9679, 0, 0, 0, 0, 93015, 0, 74364, 4628, 4245, 0, 0, 0,
-    1851, 0, 127189, 0, 0, 0, 118897, 0, 64674, 124971, 983868, 8829, 983674,
-    128864, 0, 0, 0, 0, 8809, 983677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7427, 0,
-    4588, 43680, 72300, 74484, 0, 0, 0, 0, 113787, 74363, 129043, 0, 793, 0,
-    11197, 0, 0, 0, 842, 0, 8208, 70833, 0, 1647, 0, 70841, 0, 0, 818, 0, 0,
-    0, 0, 0, 0, 120594, 0, 0, 70179, 0, 13167, 66359, 0, 127172, 0, 4969, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 2840, 0, 0, 0, 66887, 65877, 9068, 0, 68194, 0,
-    0, 12991, 0, 2651, 68016, 983896, 0, 983259, 70835, 0, 70844, 43648, 0,
-    0, 0, 0, 0, 0, 64372, 121064, 7458, 655, 752, 7457, 7456, 7452, 3285,
-    74894, 11152, 73099, 0, 2391, 93766, 92271, 671, 7435, 7434, 618, 668,
-    610, 42800, 7431, 7451, 42801, 640, 42927, 7448, 7439, 628, 3905, 100742,
-    0, 0, 0, 67850, 0, 0, 0, 4605, 0, 100745, 43372, 65945, 72710, 0, 119590,
-    0, 0, 70495, 987, 71229, 11572, 0, 0, 10002, 9971, 70673, 0, 0, 0, 0, 0,
-    0, 11334, 0, 129493, 42364, 11503, 0, 0, 0, 4627, 70090, 127784, 0, 0,
-    74046, 68872, 92562, 0, 0, 0, 0, 0, 0, 0, 42569, 64965, 0, 0, 10516, 0,
-    12190, 0, 42140, 0, 0, 0, 0, 9887, 0, 4000, 7429, 7428, 665, 7424, 0, 0,
-    7884, 0, 0, 0, 0, 0, 2509, 0, 120573, 0, 0, 92449, 0, 10690, 0, 119114,
-    126226, 0, 0, 73080, 4590, 0, 74440, 0, 0, 0, 1708, 0, 0, 983609, 0, 0,
-    69226, 69974, 8813, 0, 1066, 0, 0, 0, 127921, 70447, 0, 0, 0, 72343, 0,
-    7516, 0, 0, 0, 8034, 0, 0, 3631, 110696, 0, 0, 8416, 110694, 0, 0, 0,
-    110692, 74621, 0, 70185, 0, 74850, 0, 0, 12099, 70475, 0, 6252, 0, 0, 0,
-    0, 0, 0, 66368, 0, 64956, 7071, 129070, 70457, 128159, 118800, 0, 0, 0,
-    9357, 0, 1773, 0, 125092, 0, 68451, 7745, 9844, 0, 0, 94, 1880, 120929,
-    0, 0, 0, 0, 0, 0, 0, 0, 11237, 0, 129173, 0, 0, 0, 1757, 6964, 42480,
-    72823, 0, 120806, 0, 0, 7731, 0, 0, 127883, 0, 110810, 43988, 70423,
-    74758, 0, 7592, 856, 74299, 0, 0, 0, 78138, 1459, 0, 0, 0, 0, 0, 1504, 0,
-    0, 0, 0, 7529, 0, 0, 0, 0, 12594, 0, 0, 336, 0, 7509, 0, 0, 0, 0, 127882,
-    0, 0, 0, 65859, 0, 983967, 43062, 124948, 0, 0, 0, 0, 12970, 0, 0, 0, 0,
-    0, 0, 0, 119247, 0, 65068, 74291, 0, 7069, 0, 0, 0, 11130, 2087, 0, 0, 0,
-    0, 0, 0, 92747, 0, 92614, 2091, 0, 2090, 0, 0, 7117, 2077, 72281, 0,
-    77889, 2083, 0, 71196, 0, 0, 92649, 0, 0, 0, 0, 4165, 8746, 0, 0, 0, 0,
-    129572, 7066, 0, 70415, 128135, 0, 0, 7786, 127766, 2233, 0, 124965,
-    121122, 2302, 0, 0, 7056, 0, 0, 0, 0, 0, 0, 126506, 6920, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 983099, 70438, 2613, 0, 0, 110734, 0, 74571, 42760, 0, 0,
-    0, 0, 0, 0, 71843, 0, 0, 70506, 1246, 74243, 0, 0, 41008, 0, 0, 0, 921,
-    70048, 0, 12702, 0, 0, 1566, 8407, 0, 64653, 0, 74617, 0, 0, 72711, 5313,
-    951, 0, 0, 0, 0, 0, 4009, 70277, 71844, 0, 83123, 0, 72250, 0, 119898,
-    113760, 0, 0, 0, 0, 70024, 0, 0, 119892, 0, 0, 0, 119890, 2579, 119906,
-    3177, 11357, 69224, 0, 0, 83130, 64734, 0, 9822, 110670, 70471, 110668,
-    0, 110666, 0, 0, 0, 0, 9851, 983729, 110673, 9059, 110671, 110672, 0,
-    41687, 129054, 0, 71842, 70178, 0, 0, 1777, 0, 10158, 69767, 0, 42366,
-    70444, 0, 0, 0, 70127, 83377, 5989, 110716, 74636, 126999, 0, 41685, 0,
-    0, 9769, 41684, 0, 6225, 111328, 11740, 0, 118840, 0, 2600, 0, 70416, 0,
-    0, 3666, 70420, 0, 0, 0, 0, 74542, 69771, 0, 0, 0, 0, 0, 69765, 0, 252,
-    0, 69769, 0, 194616, 0, 69763, 0, 0, 0, 0, 0, 0, 0, 120947, 0, 129410, 0,
-    0, 0, 68323, 125219, 0, 119188, 0, 0, 121335, 0, 0, 0, 0, 0, 7764,
-    983726, 11094, 120825, 0, 0, 92505, 8298, 0, 0, 0, 0, 0, 64449, 0,
-    126650, 0, 0, 0, 70442, 0, 0, 0, 0, 7774, 10607, 0, 0, 0, 0, 0, 120764,
-    0, 0, 0, 0, 3458, 0, 70053, 0, 120995, 0, 2602, 0, 0, 0, 74907, 0, 0, 0,
-    0, 172, 0, 4971, 70419, 1889, 7238, 0, 0, 0, 8257, 0, 0, 0, 129570, 0,
-    111342, 983855, 0, 43366, 43363, 9807, 0, 0, 0, 72247, 64479, 0, 0, 0,
-    113707, 0, 10900, 121355, 0, 0, 12048, 0, 64292, 0, 0, 0, 6099, 94084,
-    129486, 0, 0, 299, 0, 8525, 92356, 0, 0, 111338, 0, 92564, 3075, 0,
-    94053, 0, 94050, 0, 0, 70440, 0, 123590, 0, 0, 0, 2581, 11395, 0, 0, 0,
-    0, 128584, 0, 0, 129423, 0, 118855, 0, 0, 0, 7204, 70065, 2588, 2914,
-    7011, 55281, 0, 7466, 0, 2883, 42253, 83118, 0, 0, 0, 123598, 0, 41230,
-    68299, 0, 43571, 0, 6219, 0, 9980, 41232, 92245, 0, 66036, 41229, 118967,
-    0, 120666, 94016, 0, 12711, 0, 0, 74289, 68472, 42857, 0, 0, 0, 0,
-    127306, 119006, 0, 11380, 72348, 0, 0, 0, 0, 0, 0, 0, 983583, 12722, 0,
-    922, 0, 0, 983126, 74958, 3218, 120471, 120470, 120469, 120476, 120475,
-    8569, 11404, 70450, 120463, 3214, 120461, 120468, 74910, 3207, 120465,
-    78729, 78728, 78727, 0, 120460, 7425, 3205, 0, 78737, 78736, 71729,
-    43383, 78733, 78732, 2606, 78730, 73897, 0, 11496, 1173, 0, 0, 129135, 0,
-    0, 0, 120737, 120953, 120872, 120629, 378, 2610, 0, 0, 0, 0, 0, 37, 7068,
-    0, 120480, 70421, 3209, 120477, 0, 120483, 9768, 120481, 0, 0, 0, 0, 0,
-    0, 65510, 0, 100625, 0, 0, 0, 100627, 0, 126633, 0, 7060, 100628, 0,
-    127752, 0, 0, 70428, 71463, 0, 7380, 0, 0, 100593, 126997, 0, 128737, 0,
-    71465, 121030, 3243, 0, 0, 0, 7050, 0, 70050, 0, 0, 0, 71466, 8203,
-    71102, 68241, 0, 65211, 194599, 0, 0, 0, 779, 125061, 64367, 100906,
-    69901, 8193, 55279, 0, 0, 0, 7065, 0, 4346, 0, 0, 908, 0, 0, 8982, 0, 0,
-    0, 782, 0, 10883, 0, 0, 129396, 65542, 121302, 0, 68650, 100575, 92244,
-    0, 0, 111351, 0, 4376, 0, 11787, 12961, 0, 0, 42888, 0, 100610, 6231, 0,
-    65713, 100608, 1783, 0, 68238, 0, 0, 0, 194945, 0, 0, 0, 68653, 0,
-    983051, 0, 764, 0, 0, 43531, 0, 9033, 0, 0, 6223, 11042, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 120648, 0, 0, 0, 0, 0, 0, 0, 0, 1478, 0, 11825,
-    2607, 0, 0, 0, 74543, 0, 0, 100588, 6132, 0, 0, 0, 70058, 0, 0, 0, 43537,
-    6761, 10093, 4369, 0, 0, 73735, 100564, 3947, 110778, 0, 0, 0, 0, 100942,
-    0, 0, 0, 0, 0, 0, 7686, 0, 0, 0, 100934, 0, 100944, 66577, 41221, 0,
-    42281, 0, 74024, 12293, 0, 94014, 11794, 0, 0, 1737, 0, 0, 0, 7205, 0,
-    9335, 12850, 0, 2272, 7055, 0, 0, 0, 67751, 0, 0, 6780, 65067, 0, 1327,
-    68393, 983570, 0, 41217, 0, 10018, 0, 0, 0, 100611, 68176, 41219, 0,
-    4147, 983170, 41216, 983693, 2616, 70197, 68461, 65234, 0, 0, 0, 0,
-    119660, 0, 0, 0, 0, 127930, 119580, 70675, 64943, 2608, 1470, 0, 0, 6227,
-    0, 0, 74775, 0, 0, 72320, 101024, 0, 129535, 0, 0, 0, 0, 0, 10876, 92482,
-    0, 0, 5834, 0, 6222, 0, 0, 12086, 0, 1600, 64309, 0, 0, 68883, 127957,
-    93836, 0, 8882, 0, 129415, 2570, 0, 0, 194606, 0, 0, 1234, 0, 13115,
-    110743, 110740, 100923, 5002, 110739, 41286, 100926, 127019, 0, 0, 0, 0,
-    0, 0, 0, 41289, 0, 0, 75051, 41272, 0, 0, 0, 0, 0, 0, 0, 41279, 0, 0, 0,
-    11081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9637, 7112, 77975, 128984, 0, 10886, 0,
-    8548, 983841, 0, 0, 0, 8076, 43048, 8290, 8291, 43051, 92570, 0, 2596, 0,
-    0, 41293, 0, 0, 2393, 7058, 66432, 0, 68673, 0, 0, 0, 0, 0, 128558, 0, 0,
-    0, 0, 0, 64696, 0, 0, 121086, 74165, 0, 0, 0, 0, 0, 0, 7063, 983182,
-    64893, 73096, 0, 68038, 113757, 709, 0, 0, 1876, 0, 0, 120868, 8137,
-    110662, 67752, 70850, 100832, 245, 100831, 11456, 41233, 7070, 0, 94046,
-    6136, 100835, 0, 100781, 41235, 0, 0, 100782, 100642, 432, 0, 100784,
-    65437, 0, 0, 128909, 0, 100641, 100649, 0, 100648, 0, 43215, 0, 0, 0, 0,
-    9052, 0, 0, 110826, 110827, 74784, 10580, 0, 100845, 0, 64640, 983175,
-    74455, 0, 0, 70035, 0, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065,
-    0, 0, 0, 2576, 0, 66819, 0, 983986, 0, 0, 0, 983050, 983826, 0, 2921,
-    119104, 0, 5772, 12968, 70055, 0, 0, 0, 2580, 983822, 0, 0, 70032, 0, 0,
-    0, 128148, 0, 0, 121308, 11346, 0, 12054, 100824, 92426, 0, 0, 13091, 0,
-    0, 100821, 100828, 0, 127026, 128334, 74821, 0, 66295, 68037, 68047,
-    127865, 13090, 0, 0, 0, 118985, 0, 0, 0, 0, 0, 127824, 0, 0, 100776,
-    119319, 42356, 42432, 100778, 119317, 0, 0, 0, 78752, 70030, 66914, 0, 0,
-    7061, 0, 3854, 0, 70020, 68413, 0, 42319, 0, 0, 7067, 0, 0, 0, 0, 0, 0,
-    127797, 9029, 43543, 0, 2353, 119316, 0, 100769, 0, 100768, 983177, 0, 0,
-    43664, 0, 0, 0, 12277, 0, 78122, 11066, 65233, 0, 41224, 0, 0, 3747,
-    10522, 0, 129582, 1691, 41226, 0, 917565, 0, 41223, 121135, 121299, 697,
-    0, 121051, 4244, 0, 0, 0, 13121, 128573, 0, 0, 0, 0, 0, 0, 0, 0, 65816,
-    68111, 0, 127933, 0, 0, 0, 0, 0, 0, 66895, 74602, 0, 7123, 70038, 5785,
-    9198, 0, 100810, 0, 7383, 64656, 0, 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191,
-    70060, 8585, 126610, 64411, 0, 0, 64850, 41072, 118996, 0, 0, 0, 0,
-    100754, 127010, 100753, 0, 100756, 683, 396, 0, 100758, 0, 100757, 43058,
-    100760, 343, 7129, 42680, 0, 0, 0, 0, 0, 100761, 0, 74040, 0, 1724, 0,
-    119321, 0, 0, 6263, 0, 0, 0, 6592, 0, 983044, 0, 0, 0, 0, 3730, 1778, 0,
-    0, 128854, 121254, 0, 9018, 0, 0, 0, 0, 92763, 5547, 0, 0, 128950, 0, 0,
-    284, 8108, 0, 0, 74001, 0, 66460, 7174, 92703, 126072, 0, 0, 4394,
-    127480, 0, 0, 0, 101082, 66459, 0, 7180, 101084, 0, 101092, 68800, 42471,
-    0, 0, 67232, 64304, 42243, 101095, 2583, 0, 127804, 0, 0, 0, 71702, 3855,
-    0, 0, 0, 0, 0, 0, 0, 92416, 7132, 0, 92743, 0, 64756, 3798, 6578, 0, 0,
-    92481, 9774, 1275, 0, 0, 983056, 0, 120515, 7873, 0, 0, 0, 0, 0, 0,
-    73994, 73992, 0, 0, 0, 41851, 0, 41846, 126485, 92337, 7633, 41849,
-    68385, 70726, 3224, 0, 69806, 0, 0, 0, 1510, 68129, 0, 0, 0, 0, 12109, 0,
-    0, 0, 0, 0, 78377, 1910, 8671, 78374, 127118, 70290, 0, 0, 0, 2654, 7893,
-    0, 0, 0, 72394, 0, 67394, 0, 118970, 70066, 78372, 78371, 78370, 78369,
-    78368, 0, 0, 0, 1733, 0, 2568, 0, 0, 0, 0, 41486, 0, 127839, 7116, 0, 0,
-    0, 7185, 0, 0, 0, 0, 0, 120575, 120829, 0, 0, 0, 0, 92489, 0, 0, 0,
-    70022, 7171, 0, 340, 0, 0, 72980, 0, 128535, 0, 124979, 94073, 0, 0, 0,
-    11392, 92509, 0, 0, 0, 0, 0, 0, 0, 100632, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    11948, 0, 6999, 617, 983806, 0, 3675, 10600, 0, 0, 74616, 2617, 0, 0, 0,
-    128446, 0, 0, 8630, 194771, 7288, 983809, 5545, 983799, 2586, 0, 0,
-    73123, 983832, 0, 0, 0, 70847, 0, 0, 0, 0, 11195, 71708, 0, 7835, 70040,
-    0, 0, 92285, 0, 0, 72973, 0, 0, 100852, 71118, 10029, 983166, 0, 0,
-    70033, 124978, 0, 0, 194782, 0, 0, 118975, 0, 0, 3903, 100893, 983839, 0,
-    120555, 0, 93036, 110645, 0, 983565, 0, 0, 194773, 0, 0, 0, 127238,
-    983803, 100919, 0, 100918, 64752, 0, 983138, 100920, 0, 43045, 100904, 0,
-    0, 0, 66394, 7128, 0, 0, 0, 0, 0, 43044, 2604, 0, 100851, 43046, 121421,
-    69985, 11768, 43043, 10470, 0, 7122, 194789, 4390, 454, 41397, 194792, 0,
-    78762, 0, 0, 120576, 64572, 0, 68091, 2394, 2575, 113749, 0, 0, 74802,
-    100913, 129280, 0, 0, 11989, 0, 0, 128856, 0, 0, 8249, 128172, 0, 0,
-    6640, 74806, 2598, 513, 0, 6586, 127521, 129301, 120710, 65008, 0, 0,
-    92515, 0, 194795, 66755, 0, 126585, 0, 43152, 78637, 0, 194797, 0, 69893,
-    6582, 0, 0, 12839, 0, 0, 0, 0, 2444, 128759, 66620, 0, 0, 0, 0, 69894, 0,
-    0, 0, 0, 4238, 11071, 9459, 68437, 78140, 78139, 0, 10079, 0, 0, 0, 0, 0,
-    11907, 43928, 0, 0, 0, 0, 92490, 43929, 0, 43926, 64498, 0, 9506, 6978,
-    126234, 0, 0, 0, 0, 43934, 0, 1122, 65564, 0, 71055, 0, 0, 1920, 0,
-    43930, 827, 0, 0, 0, 0, 6577, 1304, 64733, 0, 10606, 0, 0, 0, 9329,
-    92997, 9239, 74422, 0, 129373, 1222, 11076, 0, 69229, 43615, 8262, 72280,
-    64627, 19909, 983554, 72279, 0, 287, 0, 233, 0, 0, 42816, 0, 0, 65140,
-    128158, 8830, 0, 0, 10524, 41175, 125033, 72294, 0, 5296, 0, 0, 0, 0, 0,
+    0, 129864, 0, 0, 129834, 69553, 0, 0, 65849, 0, 0, 0, 12451, 3328, 8684,
+    0, 6102, 0, 5298, 0, 5294, 0, 129615, 0, 0, 0, 0, 43617, 0, 0, 0, 0, 0,
+    77863, 128695, 0, 0, 0, 0, 0, 5292, 0, 0, 42688, 5302, 3970, 0, 0, 1793,
+    0, 0, 0, 0, 0, 65263, 0, 0, 0, 0, 0, 0, 13219, 9569, 69567, 74383, 0, 0,
+    72157, 0, 42949, 0, 0, 0, 5322, 0, 0, 43631, 5324, 0, 128694, 41614,
+    65269, 6230, 0, 0, 0, 3360, 0, 11523, 72726, 92488, 9926, 7197, 0, 68429,
+    126575, 41821, 1249, 0, 127951, 0, 123641, 0, 0, 0, 74459, 41807, 0,
+    41815, 0, 0, 0, 0, 0, 128248, 0, 66835, 0, 0, 72145, 41800, 0, 0, 0,
+    41811, 74466, 93966, 6670, 77882, 0, 0, 43092, 0, 0, 0, 0, 0, 128655, 0,
+    0, 0, 0, 74501, 74005, 0, 74387, 69860, 315, 12813, 128556, 72409, 0,
+    72408, 0, 0, 73061, 0, 0, 1378, 0, 0, 0, 72407, 3066, 0, 0, 72406, 0, 0,
+    0, 8787, 194615, 0, 41618, 0, 0, 0, 194614, 64652, 194611, 42088, 125226,
+    0, 0, 0, 0, 7176, 43756, 0, 0, 74492, 0, 74534, 0, 0, 0, 127199, 0,
+    128630, 74525, 0, 194594, 12930, 7168, 74514, 0, 74515, 0, 128919, 43962,
+    9527, 120659, 70123, 12977, 69723, 0, 93783, 194598, 41236, 92235, 65168,
+    118838, 41237, 5848, 0, 194600, 3670, 129905, 129906, 129907, 129908,
+    7890, 0, 11298, 0, 0, 6229, 0, 0, 0, 194593, 128907, 0, 0, 0, 4120,
+    65337, 65336, 0, 0, 0, 0, 9366, 0, 0, 0, 65327, 65326, 65325, 65324,
+    65323, 42216, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 65330,
+    65329, 42689, 0, 43943, 118885, 42073, 6785, 68491, 0, 42076, 7196,
+    65318, 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 0, 41241,
+    93786, 41239, 43533, 0, 7189, 194602, 0, 43941, 0, 42802, 0, 8487, 0, 0,
+    4615, 12695, 0, 0, 12175, 100414, 0, 0, 7809, 0, 0, 0, 0, 6590, 69762, 0,
+    64738, 0, 0, 0, 0, 0, 0, 2025, 0, 0, 0, 10637, 71860, 0, 1570, 43839,
+    2835, 83052, 10624, 43623, 194587, 0, 78433, 0, 42812, 0, 2825, 0,
+    128287, 0, 2821, 0, 92327, 7365, 83043, 0, 68296, 0, 2823, 0, 0, 0, 2831,
+    0, 0, 11465, 0, 0, 0, 0, 0, 7181, 0, 41332, 0, 12333, 0, 0, 0, 0, 0,
+    9883, 127294, 73906, 70751, 0, 71863, 0, 0, 0, 0, 0, 0, 43741, 0, 8166,
+    70739, 0, 0, 74535, 0, 65297, 68294, 571, 0, 8752, 0, 5288, 118822, 1541,
+    0, 127284, 8864, 0, 0, 0, 0, 0, 113778, 12151, 0, 66874, 0, 1035, 0, 0,
+    7881, 701, 65936, 128493, 0, 70462, 0, 11403, 0, 0, 82991, 0, 983142,
+    70472, 3994, 11421, 121217, 127297, 127242, 127300, 70659, 127303, 0,
+    125205, 2855, 127828, 0, 41621, 68214, 0, 0, 10654, 82945, 119226, 12164,
+    41623, 7906, 0, 74297, 7182, 0, 83069, 0, 0, 0, 0, 121115, 0, 0, 747, 0,
+    92463, 12019, 43136, 0, 110861, 0, 0, 8001, 0, 0, 69394, 0, 0, 0, 68373,
+    0, 0, 0, 128279, 0, 71915, 0, 0, 7282, 94066, 0, 0, 0, 0, 0, 5286, 83061,
+    0, 3718, 0, 83057, 0, 194584, 71905, 0, 128480, 0, 0, 0, 0, 9206, 82980,
+    113824, 6802, 0, 41653, 0, 1241, 0, 0, 0, 0, 68124, 41651, 42937, 0,
+    83042, 41650, 0, 83037, 0, 12914, 2814, 0, 119552, 0, 0, 0, 71968, 0, 0,
+    0, 917546, 71862, 0, 0, 0, 3494, 10189, 69784, 0, 0, 71861, 0, 0, 65875,
+    0, 0, 127762, 0, 74215, 43065, 0, 0, 7200, 0, 3261, 0, 0, 0, 65889,
+    71888, 71975, 0, 0, 0, 0, 0, 0, 0, 0, 129424, 0, 635, 0, 0, 74753, 0,
+    92420, 73997, 0, 0, 43905, 0, 118834, 126125, 0, 6667, 0, 983263, 0, 0,
+    125200, 0, 0, 0, 0, 83137, 0, 0, 0, 0, 0, 121104, 127856, 125112, 71885,
+    0, 120125, 7866, 194573, 92770, 194574, 0, 120140, 126074, 2849, 0, 0,
+    42157, 12960, 0, 11812, 0, 74509, 0, 69881, 0, 0, 0, 123156, 7178, 0, 0,
+    0, 0, 129041, 11534, 1967, 0, 0, 71361, 7015, 120298, 72757, 0, 12989, 0,
+    9368, 983638, 1624, 43270, 0, 0, 10818, 0, 83091, 0, 120908, 0, 0, 0, 0,
+    0, 0, 6169, 12871, 0, 2798, 65176, 4958, 42752, 119025, 0, 0, 0, 70346,
+    66448, 0, 113780, 68364, 0, 0, 0, 68360, 0, 73746, 120945, 68352, 0,
+    73787, 83110, 2154, 7199, 64955, 0, 0, 0, 0, 71980, 66507, 0, 69853, 0,
+    0, 0, 0, 0, 0, 0, 92517, 118882, 120301, 13297, 0, 129446, 71963, 0, 0,
+    0, 6658, 8045, 0, 0, 983854, 92319, 83101, 0, 72126, 0, 0, 0, 2416, 3310,
+    0, 0, 379, 0, 43755, 0, 0, 0, 68362, 1284, 0, 73756, 0, 0, 83141, 70784,
+    71977, 0, 0, 0, 8515, 83144, 83143, 0, 0, 0, 8529, 93782, 0, 7564, 0, 0,
+    0, 0, 73757, 73760, 42359, 0, 2031, 0, 7202, 129984, 12676, 0, 0, 128418,
+    0, 7710, 1610, 73801, 0, 0, 0, 983607, 43917, 0, 9974, 228, 0, 10398, 0,
+    0, 0, 92241, 70062, 118927, 42999, 1725, 65533, 8196, 9352, 0, 0, 66868,
+    0, 8502, 5762, 0, 0, 43898, 0, 0, 0, 0, 43914, 0, 126507, 64598, 13001,
+    9326, 83082, 43916, 1557, 0, 983860, 6330, 6805, 8631, 2545, 70052, 0, 0,
+    0, 42998, 70410, 0, 42762, 71941, 42914, 126516, 262, 1637, 0, 83025,
+    129491, 0, 128757, 0, 0, 0, 128922, 0, 43658, 0, 0, 129183, 6419, 0, 0,
+    0, 0, 93989, 0, 0, 7194, 5291, 129702, 43666, 0, 0, 0, 0, 128293, 0,
+    12881, 123596, 0, 73842, 0, 9011, 0, 0, 0, 70436, 179, 43644, 0, 0,
+    64747, 0, 118813, 0, 0, 121389, 92649, 126629, 0, 73850, 2801, 119837,
+    42069, 119839, 119838, 119841, 42072, 92736, 119842, 0, 0, 0, 8377, 0,
+    42070, 119313, 119834, 119310, 4389, 43656, 1633, 119857, 119856, 119859,
+    11119, 119845, 119844, 9967, 119846, 119849, 4612, 119851, 119850, 42913,
+    70456, 0, 71983, 10782, 66898, 0, 119141, 0, 0, 0, 11541, 69636, 0, 0,
+    119614, 2731, 0, 0, 0, 4102, 0, 73878, 0, 0, 0, 0, 0, 11283, 0, 0, 0, 0,
+    0, 43674, 0, 0, 126705, 0, 0, 0, 0, 11142, 128304, 0, 12975, 0, 123208,
+    0, 0, 74072, 0, 55269, 0, 0, 0, 78577, 78576, 0, 0, 82966, 82974, 70448,
+    0, 0, 82968, 0, 0, 0, 0, 0, 113809, 0, 69399, 64909, 0, 11790, 74019, 0,
+    128066, 0, 8561, 94076, 129481, 125045, 69259, 65674, 7230, 0, 0, 8778,
+    0, 0, 67725, 2071, 0, 6459, 68325, 7628, 65092, 73903, 0, 11342, 129388,
+    0, 0, 93965, 94081, 0, 11810, 70057, 10723, 967, 0, 71973, 73905, 0,
+    6387, 0, 12307, 43913, 121089, 0, 127584, 0, 1886, 0, 43895, 870, 7648,
+    0, 7662, 7652, 876, 871, 877, 7665, 878, 42015, 879, 43692, 4563, 0, 0,
+    0, 73072, 867, 9520, 872, 7656, 868, 873, 7642, 7659, 869, 874, 7644, 0,
+    875, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68452, 0, 0, 42067, 0, 0, 0,
+    12292, 0, 0, 0, 42012, 0, 0, 83388, 0, 0, 8494, 4611, 0, 72344, 0, 9679,
+    0, 0, 0, 0, 93015, 0, 74364, 4628, 4245, 0, 0, 0, 1851, 0, 127189, 0, 0,
+    0, 118897, 0, 64674, 124971, 983868, 8829, 983674, 128864, 0, 0, 0, 0,
+    8809, 983677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7427, 0, 4588, 43680, 72300,
+    74484, 0, 0, 0, 0, 113787, 74363, 129043, 0, 793, 0, 11197, 0, 0, 0, 842,
+    0, 8208, 70833, 0, 1647, 0, 70841, 0, 0, 818, 0, 0, 0, 0, 0, 0, 120594,
+    0, 0, 70179, 0, 13167, 66359, 0, 127172, 0, 4969, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 2840, 0, 0, 0, 66887, 65877, 9068, 0, 68194, 0, 0, 12991, 0, 2651,
+    68016, 983896, 0, 983259, 70835, 0, 70844, 43648, 0, 0, 0, 0, 0, 0,
+    64372, 121064, 7458, 655, 752, 7457, 7456, 7452, 3285, 74894, 11152,
+    73099, 0, 2391, 93766, 92271, 671, 7435, 7434, 618, 668, 610, 42800,
+    7431, 7451, 42801, 640, 42927, 7448, 7439, 628, 3905, 100742, 0, 0, 0,
+    67850, 0, 0, 0, 4605, 0, 100745, 43372, 65945, 72710, 0, 119590, 0, 0,
+    70495, 987, 71229, 11572, 0, 0, 10002, 9971, 70673, 0, 0, 0, 0, 0, 0,
+    11334, 0, 129493, 42364, 11503, 0, 0, 0, 4627, 70090, 127784, 0, 0,
+    74046, 68872, 92562, 0, 0, 129900, 0, 129812, 0, 0, 42569, 64965, 0, 0,
+    10516, 129828, 12190, 0, 42140, 0, 0, 0, 0, 9887, 0, 4000, 7429, 7428,
+    665, 7424, 0, 0, 7884, 0, 0, 0, 0, 0, 2509, 0, 120573, 0, 0, 92449, 0,
+    10690, 0, 119114, 126226, 0, 0, 73080, 4590, 0, 74440, 0, 0, 0, 1708, 0,
+    0, 983609, 0, 0, 69226, 69974, 8813, 0, 1066, 0, 0, 71965, 127921, 70447,
+    0, 0, 0, 72343, 0, 7516, 0, 0, 0, 8034, 0, 0, 3631, 110696, 0, 0, 8416,
+    110694, 71937, 0, 0, 110692, 74621, 0, 70185, 0, 74850, 0, 0, 12099,
+    70475, 0, 6252, 0, 0, 0, 0, 0, 0, 66368, 0, 64956, 7071, 129070, 70457,
+    128159, 118800, 0, 0, 0, 9357, 0, 1773, 0, 125092, 0, 68451, 7745, 9844,
+    0, 0, 94, 1880, 120929, 0, 0, 0, 0, 0, 0, 0, 0, 11237, 0, 129173, 0, 0,
+    0, 1757, 6964, 42480, 72823, 0, 120806, 0, 0, 7731, 0, 0, 127883, 0,
+    110810, 43988, 70423, 74758, 0, 7592, 856, 74299, 0, 0, 0, 78138, 1459,
+    0, 0, 0, 0, 0, 1504, 0, 0, 0, 0, 7529, 0, 0, 0, 0, 12594, 0, 0, 336, 0,
+    7509, 0, 0, 0, 0, 127882, 0, 0, 0, 65859, 0, 983967, 43062, 124948, 0, 0,
+    0, 0, 12970, 0, 0, 0, 0, 0, 0, 0, 119247, 0, 65068, 74291, 129943, 7069,
+    0, 0, 0, 11130, 2087, 0, 0, 0, 0, 126249, 0, 92747, 0, 92614, 2091, 0,
+    2090, 0, 0, 7117, 2077, 72281, 0, 77889, 2083, 0, 71196, 0, 0, 71981, 0,
+    0, 0, 0, 4165, 8746, 0, 0, 0, 0, 129572, 7066, 0, 70415, 128135, 0, 0,
+    7786, 127766, 2233, 0, 124965, 121122, 2302, 0, 0, 7056, 0, 0, 0, 0, 0,
+    0, 126506, 6920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983099, 70438, 2613, 0, 0,
+    110734, 0, 74571, 42760, 0, 0, 0, 0, 0, 0, 71843, 0, 0, 70506, 1246,
+    74243, 0, 0, 41008, 0, 0, 0, 921, 70048, 0, 12702, 0, 0, 1566, 8407, 0,
+    64653, 0, 74617, 0, 0, 72711, 5313, 951, 0, 0, 0, 0, 0, 4009, 70277,
+    71844, 0, 83123, 0, 72250, 0, 119898, 113760, 0, 0, 0, 0, 70024, 0, 0,
+    119892, 0, 0, 0, 119890, 2579, 119906, 3177, 11357, 69224, 0, 0, 83130,
+    64734, 0, 9822, 110670, 70471, 110668, 0, 110666, 0, 0, 0, 0, 9851,
+    983729, 110673, 9059, 110671, 110672, 0, 41687, 129054, 0, 71842, 70178,
+    0, 0, 1777, 0, 10158, 69767, 0, 42366, 70444, 0, 0, 0, 70127, 71955,
+    5989, 110716, 74636, 126999, 0, 41685, 0, 0, 9769, 41684, 0, 6225,
+    111328, 11740, 0, 118840, 0, 2600, 0, 70416, 0, 0, 3666, 70420, 0, 71976,
+    0, 0, 74542, 69771, 0, 0, 0, 0, 0, 69765, 0, 252, 0, 69769, 0, 194616, 0,
+    69763, 0, 0, 0, 0, 0, 0, 0, 120947, 0, 129410, 0, 0, 0, 68323, 125219, 0,
+    119188, 0, 0, 121335, 0, 0, 0, 0, 0, 7764, 983726, 11094, 120825, 0, 0,
+    92505, 8298, 0, 0, 0, 0, 0, 64449, 0, 126650, 0, 0, 0, 70442, 0, 0, 0, 0,
+    7774, 10607, 0, 0, 0, 0, 0, 120764, 0, 0, 0, 0, 3458, 0, 70053, 0,
+    120995, 0, 2602, 0, 0, 0, 74907, 0, 0, 0, 0, 172, 0, 4971, 70419, 1889,
+    7238, 0, 0, 0, 8257, 0, 0, 0, 129570, 0, 111342, 71948, 0, 43366, 43363,
+    9807, 0, 0, 0, 72247, 64479, 0, 0, 0, 113707, 0, 10900, 121355, 0, 0,
+    12048, 0, 64292, 0, 0, 0, 6099, 94084, 129486, 0, 0, 299, 0, 8525, 92356,
+    0, 0, 111338, 0, 92564, 3075, 0, 94053, 0, 94050, 0, 0, 70440, 0, 123590,
+    0, 0, 0, 2581, 11395, 0, 0, 0, 0, 128584, 0, 0, 129423, 0, 118855, 0, 0,
+    0, 7204, 70065, 2588, 2914, 7011, 55281, 0, 7466, 0, 2883, 42253, 83118,
+    0, 0, 0, 123598, 0, 41230, 68299, 0, 43571, 0, 6219, 0, 9980, 41232,
+    92245, 0, 66036, 41229, 118967, 0, 120666, 94016, 0, 12711, 0, 0, 74289,
+    68472, 42857, 0, 0, 0, 0, 127306, 119006, 0, 11380, 72348, 0, 0, 0, 0, 0,
+    0, 0, 983579, 12722, 0, 922, 0, 0, 983126, 74958, 3218, 120471, 120470,
+    120469, 120476, 120475, 8569, 11404, 70450, 120463, 3214, 120461, 120468,
+    74910, 3207, 120465, 78729, 78728, 78727, 0, 120460, 7425, 3205, 0,
+    78737, 78736, 71729, 43383, 78733, 78732, 2606, 78730, 73897, 0, 11496,
+    1173, 0, 0, 129135, 0, 0, 0, 120737, 120953, 120872, 120629, 378, 2610,
+    0, 0, 0, 0, 0, 37, 7068, 0, 120480, 70421, 3209, 120477, 0, 120483, 9768,
+    120481, 0, 0, 0, 0, 0, 0, 65510, 0, 100625, 0, 0, 0, 100627, 0, 126633,
+    0, 7060, 100628, 0, 127752, 0, 69284, 70428, 71463, 0, 7380, 0, 0,
+    100593, 126997, 0, 128737, 0, 71465, 121030, 3243, 0, 0, 0, 7050, 0,
+    70050, 0, 0, 0, 71466, 8203, 71102, 68241, 0, 65211, 194599, 0, 0, 0,
+    779, 125061, 64367, 100906, 69901, 8193, 55279, 0, 0, 0, 7065, 0, 4346,
+    0, 0, 908, 0, 0, 8982, 0, 0, 0, 782, 0, 10883, 0, 0, 129396, 65542,
+    121302, 0, 68650, 100575, 92244, 0, 0, 111351, 0, 4376, 0, 11787, 12961,
+    0, 0, 42888, 0, 100610, 6231, 0, 65713, 100608, 1783, 0, 68238, 0, 0, 0,
+    194945, 0, 0, 0, 68653, 0, 983051, 0, 764, 0, 0, 43531, 0, 9033, 0, 0,
+    6223, 11042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120648, 0, 0, 0, 0, 0,
+    0, 71971, 0, 1478, 0, 11825, 2607, 0, 0, 0, 74543, 0, 0, 100588, 6132, 0,
+    0, 0, 70058, 0, 0, 0, 43537, 6761, 10093, 4369, 0, 0, 73735, 100564,
+    3947, 110778, 0, 0, 0, 0, 100942, 0, 0, 0, 0, 0, 0, 7686, 0, 0, 0,
+    100934, 0, 100944, 66577, 41221, 0, 42281, 0, 74024, 12293, 0, 94014,
+    11794, 0, 0, 1737, 0, 0, 0, 7205, 0, 9335, 12850, 0, 2272, 7055, 0, 0, 0,
+    67751, 0, 0, 6780, 65067, 0, 1327, 68393, 983574, 0, 41217, 0, 10018, 0,
+    0, 0, 100611, 68176, 41219, 0, 4147, 983170, 41216, 983693, 2616, 70197,
+    68461, 65234, 0, 0, 0, 0, 119660, 0, 0, 0, 0, 127930, 119580, 70675,
+    64943, 2608, 1470, 0, 0, 6227, 0, 0, 74775, 0, 0, 72320, 101024, 0,
+    129535, 0, 0, 0, 0, 0, 10876, 92482, 0, 0, 5834, 0, 6222, 0, 0, 12086, 0,
+    1600, 64309, 0, 0, 68883, 127957, 93836, 0, 8882, 0, 129415, 2570, 0, 0,
+    194606, 0, 0, 1234, 0, 13115, 110743, 110740, 100923, 5002, 110739,
+    41286, 100926, 127019, 0, 0, 0, 0, 0, 0, 0, 41289, 0, 0, 75051, 41272, 0,
+    0, 0, 0, 0, 0, 0, 41279, 0, 0, 0, 11081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9637,
+    7112, 77975, 128984, 0, 10886, 0, 8548, 983841, 0, 0, 0, 8076, 43048,
+    8290, 8291, 43051, 92570, 0, 2596, 0, 0, 41293, 0, 0, 2393, 7058, 66432,
+    0, 68673, 0, 0, 0, 0, 0, 128558, 0, 0, 0, 0, 0, 64696, 0, 0, 121086,
+    74165, 0, 0, 0, 0, 0, 0, 7063, 983182, 64893, 73096, 0, 68038, 113757,
+    709, 0, 0, 1876, 0, 0, 120868, 8137, 110662, 67752, 70850, 100832, 245,
+    100831, 11456, 41233, 7070, 0, 94046, 6136, 100835, 0, 100781, 41235, 0,
+    0, 100782, 100642, 432, 0, 100784, 65437, 0, 0, 128909, 0, 100641,
+    100649, 0, 100648, 0, 43215, 0, 0, 0, 0, 9052, 0, 0, 110826, 110827,
+    74784, 10580, 0, 100845, 0, 64640, 983175, 74455, 0, 129670, 70035, 0,
+    12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, 0,
+    66819, 0, 983986, 129852, 0, 0, 983050, 983826, 0, 2921, 119104, 0, 5772,
+    12968, 70055, 0, 0, 0, 2580, 983822, 0, 0, 70032, 0, 0, 0, 128148, 0, 0,
+    121308, 11346, 0, 12054, 100824, 92426, 101112, 0, 13091, 0, 0, 100821,
+    100828, 0, 127026, 128334, 74821, 0, 66295, 68037, 68047, 127865, 13090,
+    0, 0, 0, 118985, 0, 0, 0, 0, 0, 127824, 0, 0, 100776, 119319, 42356,
+    42432, 100778, 119317, 0, 0, 0, 78752, 70030, 66914, 0, 0, 7061, 0, 3854,
+    0, 70020, 68413, 0, 42319, 0, 0, 7067, 0, 0, 0, 0, 0, 0, 127797, 9029,
+    43543, 0, 2353, 119316, 0, 100769, 0, 100768, 983177, 0, 0, 43664, 0, 0,
+    0, 12277, 0, 78122, 11066, 65233, 0, 41224, 0, 0, 3747, 10522, 0, 129582,
+    1691, 41226, 0, 917565, 0, 41223, 121135, 121299, 697, 0, 121051, 4244,
+    0, 0, 0, 13121, 128573, 0, 0, 0, 0, 0, 0, 129879, 0, 65816, 68111, 0,
+    127933, 0, 0, 0, 0, 0, 0, 66895, 74602, 0, 7123, 70038, 5785, 9198, 0,
+    100810, 0, 7383, 64656, 0, 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 70060,
+    8585, 126610, 64411, 0, 0, 64850, 41072, 118996, 0, 0, 0, 0, 100754,
+    127010, 100753, 0, 100756, 683, 396, 0, 100758, 0, 100757, 43058, 100760,
+    343, 7129, 42680, 0, 0, 0, 0, 0, 100761, 0, 74040, 0, 1724, 0, 119321, 0,
+    0, 6263, 0, 0, 0, 6592, 0, 983044, 0, 0, 0, 0, 3730, 1778, 0, 0, 128854,
+    121254, 0, 9018, 0, 0, 0, 0, 92763, 5547, 0, 0, 128950, 0, 0, 284, 8108,
+    0, 0, 74001, 0, 66460, 7174, 92703, 126072, 0, 0, 4394, 127480, 0, 0, 0,
+    101082, 66459, 0, 7180, 101084, 0, 101092, 68800, 42471, 0, 0, 67232,
+    64304, 42243, 101094, 2583, 0, 127804, 0, 0, 0, 71702, 3855, 0, 0, 0, 0,
+    0, 0, 0, 92416, 7132, 0, 92743, 0, 64756, 3798, 6578, 0, 0, 92481, 9774,
+    1275, 0, 0, 983056, 0, 120515, 7873, 0, 0, 0, 0, 0, 0, 73994, 73992, 0,
+    0, 0, 41851, 0, 41846, 126485, 92337, 7633, 41849, 68385, 70726, 3224, 0,
+    69806, 0, 0, 0, 1510, 68129, 0, 0, 0, 0, 12109, 0, 0, 0, 0, 0, 78377,
+    1910, 8671, 78374, 127118, 70290, 0, 0, 0, 2654, 7893, 0, 0, 0, 72394, 0,
+    67394, 0, 118970, 70066, 78372, 78371, 78370, 78369, 78368, 0, 0, 0,
+    1733, 0, 2568, 0, 0, 0, 0, 41486, 0, 127839, 7116, 0, 0, 0, 7185, 0, 0,
+    0, 0, 0, 120575, 120829, 0, 0, 0, 0, 92489, 0, 0, 0, 70022, 7171, 0, 340,
+    0, 0, 72980, 0, 128535, 0, 124979, 94073, 0, 0, 0, 11392, 92509, 0, 0, 0,
+    0, 0, 0, 0, 100632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11948, 0, 6999, 617,
+    983806, 0, 3675, 10600, 0, 0, 74616, 2617, 0, 0, 0, 128446, 0, 0, 8630,
+    194771, 7288, 983809, 5545, 983799, 2586, 0, 0, 73123, 983832, 0, 0, 0,
+    70847, 0, 0, 0, 0, 11195, 71708, 0, 7835, 70040, 0, 0, 92285, 0, 0,
+    72973, 0, 0, 100852, 71118, 10029, 983166, 0, 0, 70033, 124978, 0, 0,
+    194782, 0, 0, 118975, 0, 0, 3903, 100893, 983839, 0, 120555, 0, 93036,
+    110645, 0, 983565, 0, 0, 194773, 0, 0, 0, 127238, 983803, 100919, 0,
+    100918, 64752, 0, 983138, 100920, 0, 43045, 100904, 0, 0, 0, 66394, 7128,
+    0, 0, 0, 0, 0, 43044, 2604, 0, 100851, 43046, 121421, 69985, 11768,
+    43043, 10470, 0, 7122, 194789, 4390, 454, 41397, 194792, 0, 78762, 0, 0,
+    120576, 64572, 0, 68091, 2394, 2575, 113749, 0, 0, 74802, 100913, 129280,
+    0, 0, 11989, 0, 0, 128856, 0, 0, 8249, 128172, 0, 0, 6640, 74806, 2598,
+    513, 0, 6586, 127521, 129301, 120710, 65008, 0, 0, 92515, 0, 194795,
+    66755, 0, 126585, 0, 43152, 78637, 0, 194797, 0, 69893, 6582, 0, 0,
+    12839, 0, 0, 0, 0, 2444, 128759, 66620, 0, 0, 0, 0, 69894, 0, 0, 0, 0,
+    4238, 11071, 9459, 68437, 78140, 78139, 0, 10079, 0, 0, 0, 0, 0, 11907,
+    43928, 0, 0, 0, 0, 92490, 43929, 0, 43926, 64498, 0, 9506, 6978, 126234,
+    0, 0, 0, 0, 43934, 0, 1122, 65564, 0, 71055, 0, 0, 1920, 0, 43930, 827,
+    0, 0, 0, 0, 6577, 1304, 64733, 0, 10606, 0, 0, 0, 9329, 92997, 9239,
+    74422, 0, 129373, 1222, 11076, 0, 69229, 43615, 8262, 72280, 64627,
+    19909, 983554, 72279, 0, 287, 0, 233, 0, 0, 42816, 0, 0, 65140, 128158,
+    8830, 0, 0, 10524, 41175, 125033, 72294, 0, 5296, 0, 127559, 0, 0, 0,
     127154, 74858, 6516, 6515, 6514, 6513, 6512, 0, 70870, 0, 0, 0, 12122,
     92462, 100868, 43976, 1785, 92507, 0, 0, 917771, 5138, 0, 0, 0, 100884,
     0, 0, 0, 0, 0, 5134, 69980, 322, 4643, 5132, 0, 194942, 0, 5143, 0,
-    72309, 119628, 0, 0, 72112, 0, 0, 0, 0, 0, 0, 0, 0, 73097, 0, 0, 0,
+    72309, 119628, 0, 0, 72112, 0, 129964, 0, 0, 0, 0, 0, 0, 73097, 0, 0, 0,
     127923, 0, 0, 0, 0, 0, 3234, 0, 100886, 0, 100889, 118924, 0, 0, 100875,
     68231, 74489, 100872, 120746, 0, 100876, 0, 12714, 0, 64585, 93775, 0, 0,
     0, 129428, 0, 11027, 0, 10059, 0, 64524, 9767, 789, 1749, 0, 66766,
@@ -27663,14 +28526,14 @@
     0, 6653, 0, 0, 64510, 0, 41868, 0, 128823, 0, 0, 11613, 70737, 12603,
     7131, 11108, 4566, 0, 0, 0, 0, 0, 124938, 127369, 0, 0, 5200, 0, 0, 0,
     9183, 127361, 74458, 73075, 395, 5482, 1376, 4349, 0, 0, 5196, 0, 6113,
-    42009, 5205, 0, 120530, 0, 118973, 70467, 0, 0, 0, 0, 9126, 70498, 0, 0,
-    0, 0, 0, 3203, 192, 0, 3385, 125075, 128620, 5383, 0, 0, 0, 5738, 69449,
-    3336, 0, 5361, 9633, 0, 0, 0, 0, 8581, 0, 1260, 3149, 5359, 12962, 74955,
-    10441, 5357, 0, 0, 0, 5364, 0, 11431, 0, 9101, 0, 0, 0, 0, 78378, 121155,
-    42917, 0, 129179, 0, 0, 0, 43360, 78385, 78384, 78383, 78382, 78381,
-    78380, 78379, 9319, 7097, 0, 127748, 0, 0, 0, 120632, 0, 71205, 0, 0, 0,
-    1720, 0, 0, 0, 8622, 0, 70430, 68772, 0, 0, 0, 73084, 0, 0, 11921, 0,
-    11769, 68782, 0, 0, 0, 0, 194571, 41586, 0, 0, 0, 3356, 194572, 64709,
+    42009, 5205, 0, 120530, 0, 118973, 70467, 0, 0, 129691, 0, 9126, 70498,
+    0, 0, 0, 0, 0, 3203, 192, 0, 3385, 120785, 128620, 5383, 0, 0, 0, 5738,
+    69449, 3336, 0, 5361, 9633, 0, 0, 0, 0, 8581, 0, 1260, 3149, 5359, 12962,
+    74955, 10441, 5357, 0, 0, 0, 5364, 0, 11431, 0, 9101, 0, 0, 0, 0, 78378,
+    121155, 42917, 0, 129179, 0, 0, 0, 43360, 78385, 78384, 78383, 78382,
+    78381, 78380, 78379, 9319, 7097, 0, 127748, 0, 0, 0, 120632, 0, 71205, 0,
+    0, 0, 1720, 0, 0, 0, 8622, 0, 70430, 68772, 0, 0, 0, 73084, 0, 0, 11921,
+    0, 11769, 68782, 0, 0, 0, 0, 194571, 41586, 0, 0, 0, 3356, 194572, 64709,
     194575, 0, 7134, 0, 78389, 0, 677, 0, 0, 0, 129474, 68747, 0, 68751,
     3349, 74125, 0, 8927, 0, 0, 0, 0, 0, 0, 0, 6806, 0, 10190, 68755, 0, 0,
     0, 0, 0, 0, 0, 7113, 7586, 0, 10852, 0, 0, 4606, 0, 0, 70084, 0, 0, 1046,
@@ -27678,272 +28541,275 @@
     5169, 11935, 0, 0, 3175, 0, 1537, 0, 5176, 8905, 4136, 4871, 78388, 0, 0,
     0, 0, 1128, 0, 0, 0, 74066, 0, 73069, 0, 0, 3662, 113767, 3378, 0, 71298,
     0, 127995, 6320, 71302, 983162, 10163, 0, 5165, 5126, 0, 66902, 41389, 0,
-    71368, 3374, 0, 0, 7119, 0, 0, 3507, 0, 7629, 983629, 19925, 0, 68463,
+    71368, 3374, 113740, 0, 7119, 0, 0, 3507, 0, 7629, 6848, 19925, 0, 68463,
     183, 127208, 127209, 70811, 10636, 0, 128465, 0, 0, 78772, 0, 0, 0,
     78768, 6580, 4332, 123584, 0, 10726, 66686, 127203, 127204, 127205,
     127206, 0, 70813, 127201, 127202, 0, 0, 5448, 41058, 5446, 0, 0, 71369,
     5442, 7135, 0, 0, 5451, 0, 78470, 0, 0, 0, 0, 11243, 10859, 65867, 10345,
-    10409, 123606, 0, 0, 0, 42181, 0, 0, 2060, 0, 7111, 0, 0, 0, 0, 72741, 0,
-    205, 0, 72346, 93771, 0, 9862, 6588, 43257, 0, 0, 0, 5505, 93789, 5503,
-    65376, 0, 7125, 9819, 0, 0, 0, 5507, 12044, 194567, 0, 0, 0, 7109, 0, 0,
-    7911, 10329, 10393, 8991, 125104, 69778, 11133, 129619, 8550, 0, 5592,
-    2919, 0, 0, 5595, 0, 0, 4367, 0, 0, 5591, 41060, 5594, 0, 0, 13142, 5590,
-    0, 72274, 118909, 75069, 123586, 9731, 71225, 64633, 0, 0, 71217, 121361,
-    71227, 0, 0, 0, 0, 7137, 0, 0, 0, 10551, 10710, 0, 0, 0, 120570, 0,
-    92364, 9936, 3348, 0, 0, 1444, 119058, 0, 74206, 983106, 0, 1442, 129080,
-    0, 120959, 0, 0, 0, 0, 0, 0, 0, 3334, 73068, 118803, 0, 0, 71219, 69770,
-    1651, 0, 8861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43626, 0, 0, 3344, 0, 0,
-    12920, 0, 0, 0, 71853, 3438, 128711, 0, 0, 0, 0, 129068, 0, 0, 65117, 0,
-    0, 0, 0, 66366, 128915, 0, 69772, 0, 0, 0, 0, 4973, 8784, 0, 0, 0, 0, 0,
-    0, 0, 125198, 983283, 0, 0, 66413, 0, 0, 0, 0, 0, 9243, 2464, 0, 0, 3372,
-    0, 0, 0, 70364, 7121, 0, 0, 0, 92163, 0, 0, 0, 0, 0, 0, 0, 3354, 0, 0, 0,
-    118999, 0, 3876, 0, 127983, 0, 43696, 43380, 0, 74240, 0, 0, 0, 983966,
-    75074, 6589, 0, 0, 120993, 0, 0, 69609, 0, 121210, 0, 10630, 74827, 0,
-    121293, 0, 0, 121287, 917942, 121337, 121215, 0, 0, 0, 0, 0, 917940,
-    3366, 0, 917938, 0, 0, 0, 71062, 0, 121197, 0, 6925, 71856, 0, 917929,
-    66780, 66274, 0, 72768, 0, 917930, 129482, 11138, 0, 6754, 7118, 0,
-    64672, 65296, 0, 118957, 0, 0, 12296, 68457, 121320, 0, 5282, 0, 72278,
-    0, 0, 0, 0, 0, 0, 66355, 0, 0, 68073, 64343, 0, 92744, 195058, 195029, 0,
-    0, 195056, 195027, 0, 0, 128814, 195025, 6584, 195026, 10657, 0, 74544,
-    0, 1200, 12243, 0, 195062, 0, 129300, 11545, 0, 120493, 3343, 4424,
-    11047, 0, 69863, 3896, 0, 0, 2947, 0, 0, 42221, 0, 68139, 13059, 7942, 0,
-    3381, 0, 0, 0, 0, 0, 0, 78235, 0, 0, 0, 7044, 65800, 78236, 0, 7045,
-    7175, 7047, 127884, 11791, 0, 0, 3881, 0, 0, 127395, 0, 0, 67075, 7106,
-    0, 0, 0, 74211, 41897, 92513, 0, 73040, 66745, 0, 0, 0, 0, 121245, 0,
-    64354, 73083, 8777, 0, 129108, 8884, 2385, 73067, 92450, 0, 0, 0, 42027,
-    12114, 0, 0, 64936, 0, 0, 0, 0, 0, 126605, 0, 0, 0, 0, 73064, 0, 0, 0, 0,
-    0, 0, 0, 73057, 0, 123587, 0, 0, 0, 0, 0, 70803, 0, 0, 124953, 0, 0, 0,
-    7048, 11087, 123600, 92536, 7043, 9600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42050,
-    0, 55289, 0, 0, 657, 0, 195054, 4461, 92903, 0, 0, 126490, 0, 4468, 0, 0,
-    0, 4456, 73070, 10720, 123588, 0, 127520, 0, 0, 0, 195046, 260, 7714,
-    74163, 2045, 0, 65064, 4466, 0, 0, 128087, 0, 41403, 0, 0, 0, 41406,
-    120692, 0, 0, 73939, 0, 0, 0, 41404, 1165, 0, 4451, 13087, 0, 11258, 0,
-    73855, 0, 43014, 5439, 12061, 74586, 3375, 128869, 0, 0, 0, 0, 0, 0, 0,
-    113823, 67078, 0, 67079, 0, 0, 0, 0, 68459, 0, 0, 0, 0, 0, 0, 7280, 0, 0,
-    0, 4868, 8297, 0, 0, 42791, 0, 66737, 66739, 0, 0, 5182, 0, 0, 72764, 0,
-    4465, 0, 12135, 0, 4464, 0, 0, 977, 4458, 43827, 0, 0, 0, 0, 344, 0, 0,
-    0, 0, 0, 92240, 0, 64443, 126995, 73078, 129525, 0, 0, 0, 43026, 7612,
-    119591, 64413, 0, 0, 0, 0, 0, 0, 0, 0, 123622, 0, 119160, 10204, 127947,
-    73063, 0, 0, 127236, 0, 68746, 0, 8852, 0, 0, 0, 0, 128427, 123597, 7932,
-    0, 128463, 0, 0, 0, 0, 0, 0, 0, 74893, 0, 0, 73095, 0, 8650, 0, 0, 0,
-    69900, 118872, 0, 70868, 0, 6719, 0, 0, 0, 72836, 0, 0, 118991, 0,
-    123594, 73815, 4420, 0, 10583, 7760, 0, 0, 128752, 71711, 0, 128407, 0,
-    0, 0, 9066, 0, 74795, 0, 0, 0, 0, 0, 0, 0, 42825, 41854, 5304, 0, 124942,
-    6919, 8619, 0, 10038, 66454, 9592, 129049, 0, 0, 110771, 110777, 110772,
-    0, 0, 0, 0, 0, 78498, 110773, 43624, 0, 7779, 0, 0, 9479, 78493, 0, 0,
-    2224, 0, 0, 0, 0, 0, 42378, 3368, 0, 66804, 7697, 69237, 0, 2030, 0,
-    68236, 8370, 0, 127961, 0, 0, 983350, 127903, 983348, 983347, 5174,
-    42831, 983344, 70439, 983342, 8881, 119047, 0, 70433, 0, 0, 0, 0, 0, 0,
-    9576, 0, 3347, 4160, 5154, 0, 3794, 0, 0, 0, 0, 0, 127916, 73073, 8381,
-    4572, 71129, 126101, 0, 0, 0, 0, 0, 0, 0, 92283, 0, 0, 5799, 983339,
-    70100, 983337, 983336, 983335, 43031, 64425, 65128, 983331, 0, 73059, 0,
-    68616, 0, 0, 0, 0, 0, 0, 0, 123604, 0, 0, 283, 68665, 0, 532, 0, 0,
-    983808, 0, 0, 3370, 73077, 119132, 5443, 71431, 0, 0, 0, 0, 0, 2298, 0,
-    0, 0, 983330, 983329, 983328, 983327, 7144, 983325, 119600, 983323,
-    983322, 983321, 0, 78816, 128833, 0, 0, 0, 0, 0, 0, 0, 0, 73088, 0,
-    123592, 983933, 0, 0, 0, 0, 5186, 7360, 127837, 0, 12108, 0, 65124, 0, 0,
-    0, 6326, 43344, 0, 0, 42562, 0, 0, 0, 983320, 65495, 983318, 101066,
-    983316, 101065, 983314, 65490, 983312, 125034, 0, 101070, 0, 55245,
-    128927, 1630, 128232, 65483, 0, 0, 0, 65476, 0, 0, 119214, 9283, 10183,
-    0, 0, 65499, 0, 64593, 66758, 3376, 0, 0, 0, 101077, 43872, 12940, 0, 0,
-    78587, 101078, 5957, 0, 8926, 983310, 983309, 983308, 10745, 10174,
-    983305, 113793, 983303, 983302, 983301, 0, 123593, 5056, 0, 0, 0, 120773,
-    0, 9812, 0, 4460, 127792, 73066, 0, 128038, 0, 123608, 0, 64278, 0, 0, 0,
-    66760, 0, 0, 70122, 0, 0, 917627, 0, 73823, 101071, 0, 2276, 0, 42579, 0,
-    983300, 983299, 127831, 983297, 983296, 983295, 983294, 983293, 74207,
-    121255, 10482, 12863, 73002, 2412, 0, 9522, 0, 983887, 120674, 101059,
-    3384, 101058, 10702, 830, 0, 128166, 0, 8451, 0, 0, 121380, 69739,
-    128957, 0, 0, 0, 0, 0, 0, 0, 4243, 92454, 73093, 0, 0, 4441, 0, 983290,
-    983289, 66618, 983287, 125141, 411, 983284, 68068, 983282, 4056, 983894,
-    0, 92666, 0, 983897, 983949, 0, 0, 3364, 42265, 64437, 0, 118816, 0,
-    9684, 216, 0, 1401, 0, 0, 0, 0, 0, 0, 0, 11126, 5768, 3191, 0, 0, 0, 0,
-    0, 0, 65895, 0, 0, 3338, 73935, 983278, 983277, 983276, 129605, 983274,
-    983273, 2794, 8807, 0, 0, 110720, 0, 8312, 0, 110718, 11953, 11662, 0, 0,
-    0, 0, 9534, 66767, 129040, 0, 11113, 0, 0, 73082, 0, 981, 0, 4330,
-    119244, 120536, 1824, 0, 0, 7034, 41683, 123166, 0, 73754, 0, 0, 74478,
-    128259, 983268, 983255, 983254, 43831, 983252, 66752, 983250, 983249, 0,
-    70288, 65343, 0, 0, 43225, 0, 0, 0, 0, 126129, 0, 128608, 0, 0, 0,
-    120726, 0, 983833, 11746, 0, 5216, 0, 0, 0, 0, 3468, 127149, 9230, 65942,
-    0, 0, 5803, 120677, 0, 0, 13124, 0, 0, 0, 42843, 0, 0, 0, 66753, 11739,
-    128318, 0, 128444, 0, 0, 0, 12448, 0, 121441, 13057, 73852, 124994, 0, 0,
-    0, 0, 0, 0, 126612, 0, 68903, 0, 129470, 0, 917992, 0, 0, 0, 0, 0, 0, 0,
-    92457, 0, 0, 0, 0, 0, 0, 0, 0, 125078, 0, 0, 0, 10970, 92208, 0, 0, 0,
-    19944, 0, 9009, 8551, 0, 0, 0, 7575, 0, 0, 128899, 0, 129609, 78847, 0,
-    78846, 0, 0, 0, 0, 0, 0, 0, 9775, 100682, 129191, 119052, 68629, 194703,
-    0, 0, 78850, 92880, 0, 0, 0, 0, 0, 0, 0, 71273, 6184, 41540, 3303, 66182,
+    10409, 123606, 0, 0, 129077, 42181, 0, 0, 2060, 0, 7111, 0, 0, 0, 0,
+    72741, 0, 205, 0, 72346, 93771, 0, 9862, 6588, 43257, 0, 0, 0, 5505,
+    93789, 5503, 65376, 0, 7125, 9819, 0, 0, 0, 5507, 12044, 194567, 0, 0, 0,
+    7109, 0, 0, 7911, 10329, 10393, 8991, 125104, 69778, 11133, 129619, 8550,
+    0, 5592, 2919, 0, 0, 5595, 0, 0, 4367, 0, 0, 5591, 41060, 5594, 0, 0,
+    13142, 5590, 0, 72274, 118909, 75069, 123586, 9731, 71225, 64633, 0, 0,
+    71217, 121361, 71227, 0, 0, 0, 0, 7137, 0, 0, 0, 10551, 10710, 0, 0, 0,
+    120570, 0, 92364, 9936, 3348, 0, 0, 1444, 119058, 0, 74206, 983106, 0,
+    1442, 129080, 0, 120959, 0, 0, 0, 0, 0, 0, 0, 3334, 73068, 118803, 0, 0,
+    71219, 69770, 1651, 0, 8861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43626, 0,
+    0, 3344, 0, 0, 12920, 0, 0, 0, 71853, 3438, 128711, 0, 0, 0, 0, 129068,
+    0, 0, 65117, 0, 0, 0, 0, 66366, 128915, 0, 69772, 0, 0, 0, 0, 4973, 8784,
+    0, 0, 0, 0, 0, 0, 0, 125198, 983283, 0, 0, 66413, 0, 0, 0, 0, 0, 9243,
+    2464, 0, 0, 3372, 0, 0, 0, 70364, 7121, 0, 0, 0, 92163, 0, 0, 0, 0, 0, 0,
+    0, 3354, 0, 0, 983103, 101233, 0, 3876, 0, 127983, 0, 43696, 43380, 0,
+    74240, 0, 0, 0, 983966, 75074, 6589, 0, 0, 120993, 0, 0, 69609, 0,
+    121210, 0, 10630, 71960, 0, 121293, 0, 0, 121287, 917942, 121337, 121215,
+    0, 0, 0, 0, 0, 917940, 3366, 0, 917938, 0, 0, 0, 71062, 0, 121197, 0,
+    6925, 71856, 0, 917929, 66780, 66274, 0, 72768, 0, 917930, 129482, 11138,
+    0, 6754, 7118, 0, 64672, 65296, 0, 118957, 0, 0, 12296, 68457, 121320, 0,
+    5282, 0, 72278, 0, 0, 0, 0, 0, 0, 66355, 0, 0, 68073, 64343, 0, 92744,
+    195058, 195029, 0, 0, 195056, 195027, 0, 0, 128814, 195025, 6584, 195026,
+    10657, 0, 74544, 0, 1200, 12243, 92269, 195062, 0, 129300, 11545, 0,
+    120493, 3343, 4424, 11047, 0, 69863, 3896, 0, 0, 2947, 0, 0, 42221, 0,
+    68139, 13059, 7942, 0, 3381, 0, 0, 0, 0, 0, 0, 78235, 0, 0, 0, 7044,
+    65800, 78236, 0, 7045, 7175, 7047, 127884, 11791, 0, 0, 3881, 0, 0,
+    127395, 0, 0, 67075, 7106, 72000, 0, 0, 74211, 41897, 92513, 0, 73040,
+    66745, 0, 0, 0, 0, 121245, 0, 64354, 73083, 8777, 0, 129108, 8884, 2385,
+    73067, 92450, 0, 0, 0, 42027, 12114, 0, 0, 64936, 0, 0, 0, 0, 0, 126605,
+    0, 0, 0, 0, 73064, 0, 0, 0, 0, 0, 0, 0, 73057, 0, 123587, 0, 0, 0, 0, 0,
+    70803, 0, 0, 124953, 0, 0, 0, 7048, 11087, 123600, 92536, 7043, 9600, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 42050, 0, 55289, 0, 0, 657, 0, 195054, 4461,
+    92903, 0, 0, 126490, 0, 4468, 0, 0, 0, 4456, 73070, 10720, 123588, 0,
+    127520, 0, 0, 0, 195046, 260, 7714, 74163, 2045, 0, 65064, 4466, 0, 0,
+    128087, 0, 41403, 0, 0, 0, 41406, 120692, 0, 0, 73939, 0, 0, 0, 41404,
+    1165, 0, 4451, 13087, 0, 11258, 0, 73855, 0, 43014, 5439, 12061, 74586,
+    3375, 128869, 0, 0, 0, 0, 0, 0, 0, 113823, 67078, 0, 67079, 0, 0, 0, 0,
+    68459, 0, 0, 0, 0, 0, 0, 7280, 0, 0, 0, 4868, 8297, 0, 0, 42791, 0,
+    66737, 66739, 0, 0, 5182, 0, 0, 72764, 0, 4465, 0, 12135, 0, 4464, 0, 0,
+    977, 4458, 43827, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 92240, 0, 64443,
+    126995, 73078, 129525, 0, 0, 0, 43026, 7612, 119591, 64413, 0, 0, 0, 0,
+    0, 0, 0, 0, 123622, 0, 119160, 10204, 127947, 73063, 0, 0, 127236, 0,
+    68746, 0, 8852, 0, 0, 0, 0, 128427, 123597, 7932, 0, 128463, 0, 0, 0, 0,
+    0, 0, 0, 74893, 0, 0, 73095, 0, 8650, 0, 0, 0, 69900, 118872, 0, 70868,
+    0, 6719, 0, 0, 0, 72836, 0, 0, 118991, 0, 123594, 73815, 4420, 0, 10583,
+    7760, 0, 0, 128752, 71711, 0, 128407, 0, 0, 0, 9066, 0, 74795, 0, 0, 0,
+    0, 0, 0, 0, 42825, 41854, 5304, 0, 124942, 6919, 8619, 0, 10038, 66454,
+    9592, 129049, 0, 0, 110771, 110777, 110772, 0, 0, 0, 0, 0, 78498, 110773,
+    43624, 0, 7779, 0, 0, 9479, 78493, 0, 0, 2224, 0, 0, 0, 0, 0, 42378,
+    3368, 0, 66804, 7697, 69237, 0, 2030, 0, 68236, 8370, 0, 127961, 0, 0,
+    983350, 127903, 983348, 983347, 5174, 42831, 983344, 70439, 983342, 8881,
+    119047, 0, 70433, 0, 0, 0, 0, 0, 0, 9576, 0, 3347, 4160, 5154, 0, 3794,
+    0, 0, 0, 0, 0, 127916, 73073, 8381, 4572, 69564, 126101, 0, 0, 0, 0, 0,
+    0, 0, 92283, 0, 0, 5799, 983339, 70100, 983337, 983336, 983335, 43031,
+    64425, 65128, 983331, 0, 73059, 0, 68616, 0, 0, 0, 0, 119826, 0, 0,
+    123604, 0, 0, 283, 68665, 0, 532, 0, 0, 983808, 0, 0, 3370, 73077,
+    119132, 5443, 71431, 0, 0, 0, 0, 0, 2298, 0, 0, 0, 983330, 983329,
+    983328, 983327, 7144, 983325, 119600, 983323, 983322, 983321, 0, 78816,
+    128833, 0, 0, 0, 0, 0, 0, 0, 0, 73088, 0, 123592, 983933, 0, 0, 0, 0,
+    5186, 7360, 127837, 0, 12108, 0, 65124, 0, 0, 0, 6326, 43344, 0, 0,
+    42562, 0, 0, 0, 983320, 65495, 983318, 101066, 983316, 101065, 983314,
+    65490, 983312, 125034, 0, 101070, 0, 55245, 128927, 1630, 128232, 65483,
+    0, 0, 0, 65476, 0, 0, 119214, 9283, 10183, 0, 0, 65499, 0, 64593, 66758,
+    3376, 0, 0, 0, 101077, 43872, 12940, 0, 0, 78587, 101078, 5957, 0, 8926,
+    983310, 983309, 983308, 10745, 10174, 983305, 113793, 983303, 983302,
+    983301, 0, 123593, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 127792,
+    73066, 0, 128038, 0, 123608, 0, 64278, 0, 0, 0, 66760, 0, 0, 70122, 0, 0,
+    917627, 0, 73823, 101071, 127922, 2276, 0, 42579, 0, 983300, 983299,
+    127831, 983297, 983296, 983295, 983294, 983293, 74207, 121255, 10482,
+    12863, 73002, 2412, 0, 9522, 0, 983887, 120674, 101059, 3384, 101058,
+    10702, 830, 0, 128166, 0, 8451, 0, 0, 121380, 69739, 128957, 0, 0, 0, 0,
+    0, 0, 0, 4243, 92454, 73093, 0, 0, 4441, 0, 983290, 983289, 66618,
+    983287, 125141, 411, 983284, 68068, 983282, 4056, 983894, 0, 92666, 0,
+    983897, 983949, 0, 0, 3364, 42265, 64437, 0, 118816, 0, 9684, 216, 0,
+    1401, 0, 0, 0, 0, 0, 0, 0, 11126, 5768, 3191, 0, 0, 0, 0, 0, 0, 65895, 0,
+    0, 3338, 73935, 983278, 983277, 983276, 129605, 983274, 983273, 2794,
+    8807, 0, 0, 110720, 0, 8312, 0, 110718, 11953, 11662, 0, 0, 0, 0, 9534,
+    66767, 129040, 0, 11113, 0, 0, 73082, 0, 981, 0, 4330, 119244, 120536,
+    1824, 0, 0, 7034, 41683, 123166, 0, 73754, 0, 0, 74478, 128259, 983268,
+    983255, 983254, 43831, 983252, 66752, 983250, 983249, 0, 70288, 65343, 0,
+    0, 43225, 0, 0, 0, 0, 126129, 0, 128608, 0, 0, 0, 120726, 0, 983833,
+    11746, 0, 5216, 0, 0, 0, 0, 3468, 127149, 9230, 65942, 0, 0, 5803,
+    120677, 0, 0, 13124, 0, 0, 0, 42843, 0, 0, 0, 66753, 11739, 128318, 0,
+    128444, 0, 0, 0, 12448, 0, 121441, 13057, 73852, 124994, 0, 0, 0, 0, 0,
+    0, 126612, 0, 68903, 0, 129470, 0, 917992, 0, 0, 0, 0, 0, 0, 0, 92457, 0,
+    0, 0, 0, 0, 0, 0, 0, 125078, 0, 0, 0, 10970, 92208, 0, 0, 0, 19944, 0,
+    9009, 8551, 0, 0, 0, 7575, 0, 0, 128899, 0, 129609, 78847, 0, 78846, 0,
+    0, 69256, 0, 0, 0, 0, 9775, 100682, 129191, 119052, 68629, 194703, 0, 0,
+    78850, 92880, 0, 0, 0, 0, 0, 0, 0, 71273, 6184, 41540, 3303, 66182,
     11786, 66180, 66203, 3422, 0, 68290, 43007, 4478, 66178, 0, 0, 126216, 0,
     4477, 0, 69608, 66184, 66183, 66204, 66194, 0, 66198, 41880, 66188,
     66197, 78148, 66195, 66190, 66191, 41111, 66189, 73788, 7788, 0, 0, 0, 0,
     0, 2221, 78163, 6535, 78161, 78162, 430, 78160, 78156, 78158, 0, 0, 4945,
     0, 4950, 0, 78165, 0, 67118, 0, 5964, 12908, 0, 0, 0, 74477, 83390, 0,
     4949, 0, 443, 0, 4944, 5467, 119603, 983260, 0, 9364, 0, 119148, 4946, 0,
-    3788, 126106, 983699, 0, 120847, 0, 74441, 0, 0, 12072, 92248, 0, 983689,
-    0, 128676, 12091, 0, 0, 0, 4673, 0, 4678, 0, 0, 65059, 43860, 0, 0, 0,
-    128151, 1199, 0, 8356, 0, 0, 4677, 0, 0, 0, 4672, 78173, 78175, 78171,
-    78172, 72255, 78170, 78166, 4674, 128450, 194944, 0, 124970, 0, 119579,
-    0, 0, 1855, 0, 0, 127806, 0, 0, 68912, 72323, 0, 12988, 121000, 0, 0, 0,
-    4654, 6840, 983427, 0, 73993, 0, 4649, 65209, 983889, 93839, 4648, 0,
-    121169, 983431, 126231, 983422, 66846, 7828, 4650, 983421, 72879, 0,
-    4653, 7822, 0, 0, 43187, 0, 983574, 6821, 0, 0, 0, 0, 0, 0, 66756,
-    983428, 0, 0, 0, 8547, 0, 42165, 0, 119228, 6836, 0, 0, 4662, 0, 0, 0,
-    9146, 599, 4657, 0, 120754, 0, 4656, 0, 0, 7811, 40994, 0, 6414, 5967,
-    4658, 3725, 0, 5814, 4661, 127760, 194961, 0, 0, 64904, 0, 10833, 0, 0,
-    4867, 128717, 0, 11459, 3054, 0, 40996, 0, 7605, 4622, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 19926, 0, 0, 65307, 4617, 0, 0, 0, 4616, 10518, 0, 127160, 0,
-    5958, 0, 983444, 4618, 0, 0, 120675, 4621, 0, 0, 522, 125213, 11139,
-    65803, 194972, 0, 12201, 6135, 121060, 983420, 0, 983093, 0, 983418,
-    983411, 983432, 4638, 983416, 0, 78242, 5965, 78240, 66569, 68646, 0,
-    983450, 74392, 5335, 0, 0, 4633, 0, 119045, 983446, 4632, 0, 5542, 5333,
-    0, 983423, 68648, 5331, 4634, 0, 0, 5338, 4637, 0, 0, 43477, 0, 42493, 0,
-    42361, 0, 0, 73853, 0, 0, 0, 74204, 11343, 0, 10358, 10422, 4758, 0,
-    1608, 5252, 0, 0, 4753, 78239, 11344, 78237, 0, 5231, 74384, 0, 0, 0, 0,
-    0, 0, 0, 0, 5229, 4757, 0, 0, 5227, 4752, 0, 65235, 5234, 73044, 0, 0, 0,
-    0, 0, 0, 7460, 0, 917936, 0, 0, 74760, 65189, 0, 92230, 0, 0, 5574, 0, 0,
-    65139, 5577, 0, 0, 118871, 68641, 8965, 7635, 0, 5316, 70021, 5314,
-    74555, 5572, 0, 5312, 0, 5525, 5330, 5319, 68292, 0, 65066, 0, 0, 983491,
-    0, 0, 127851, 0, 74851, 0, 0, 64609, 0, 0, 128593, 0, 129339, 0, 8632, 0,
-    0, 0, 195012, 5735, 195013, 1692, 0, 4610, 0, 4305, 0, 4609, 43478, 4614,
-    0, 0, 5287, 5309, 5285, 0, 5961, 4647, 5283, 10743, 0, 71889, 601, 4613,
-    0, 0, 9208, 4608, 74044, 71107, 5190, 0, 0, 92410, 43965, 2265, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 5960, 0, 8992, 65293, 0, 1782, 0, 0, 0, 0, 0, 5501,
-    0, 42508, 69759, 120749, 0, 0, 195023, 983919, 43900, 128325, 0, 68134,
-    111180, 74209, 0, 64740, 0, 0, 0, 983916, 3767, 5737, 0, 4865, 0, 5740,
-    0, 5736, 7724, 0, 7193, 0, 0, 5739, 0, 4866, 0, 0, 0, 4869, 67093, 0, 0,
-    128514, 6650, 983483, 0, 983474, 78376, 4870, 0, 68661, 6716, 983473,
-    68667, 69786, 68676, 0, 10122, 4864, 66568, 0, 0, 0, 9603, 68652, 126213,
-    42734, 745, 0, 0, 0, 4777, 0, 917925, 68631, 42775, 68196, 0, 0, 0, 0,
-    5966, 0, 4778, 127890, 0, 0, 4781, 127196, 64407, 0, 74132, 8577, 71221,
-    0, 71223, 0, 4782, 0, 0, 120757, 68618, 43472, 43056, 68622, 0, 92986,
-    4776, 0, 11492, 0, 0, 13176, 0, 0, 0, 0, 0, 0, 0, 4849, 8242, 9561,
-    73922, 0, 0, 0, 0, 5963, 0, 125201, 0, 4850, 72121, 0, 590, 4853, 0,
-    4854, 0, 5164, 0, 1605, 5124, 0, 111165, 0, 8471, 0, 111164, 12445, 3785,
-    0, 111162, 0, 0, 4848, 2530, 0, 2068, 1964, 0, 0, 10796, 0, 0, 0, 0, 0,
-    4794, 0, 0, 0, 4797, 68040, 111152, 43465, 4792, 0, 0, 0, 0, 0, 110842,
-    983101, 92963, 0, 0, 0, 4221, 92360, 118869, 0, 0, 0, 70042, 0, 0, 0, 0,
-    10739, 65090, 0, 119327, 126541, 0, 0, 119326, 0, 0, 4937, 43376, 0, 0,
-    10597, 0, 11722, 9248, 129566, 42879, 11725, 0, 0, 7579, 11141, 73958,
-    4941, 0, 917538, 9140, 4936, 5261, 0, 0, 72298, 0, 4942, 0, 4938, 0, 0,
-    5259, 9369, 983429, 111182, 5257, 0, 6844, 4964, 5264, 0, 0, 0, 41411, 0,
+    3788, 126106, 983699, 0, 120847, 129858, 74441, 0, 0, 12072, 92248, 0,
+    983689, 0, 128676, 12091, 0, 0, 0, 4673, 0, 4678, 0, 0, 65059, 43860, 0,
+    0, 0, 128151, 1199, 0, 8356, 0, 0, 4677, 0, 0, 0, 4672, 78173, 78175,
+    78171, 78172, 72255, 78170, 78166, 4674, 128450, 194944, 0, 124970, 0,
+    119579, 0, 129919, 1855, 0, 0, 127806, 0, 0, 68912, 72323, 0, 12988,
+    121000, 0, 0, 0, 4654, 6840, 983427, 0, 73993, 0, 4649, 65209, 983889,
+    93839, 4648, 0, 121169, 983431, 126231, 983422, 66846, 7828, 4650,
+    983421, 72879, 0, 4653, 7822, 0, 0, 43187, 0, 983586, 6821, 0, 0, 0, 0,
+    0, 0, 66756, 983428, 0, 0, 0, 8547, 0, 42165, 0, 119228, 6836, 0, 0,
+    4662, 0, 0, 0, 9146, 599, 4657, 0, 120754, 0, 4656, 0, 0, 7811, 40994, 0,
+    6414, 5967, 4658, 3725, 0, 5814, 4661, 127760, 194961, 0, 0, 64904, 0,
+    10833, 0, 0, 4867, 128717, 0, 11459, 3054, 0, 40996, 0, 7605, 4622, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 19926, 0, 0, 65307, 4617, 0, 0, 0, 4616, 10518, 0,
+    127160, 0, 5958, 0, 983444, 4618, 0, 983437, 120675, 4621, 0, 983439,
+    522, 125213, 11139, 65803, 194972, 0, 12201, 6135, 121060, 983420, 0,
+    983093, 0, 983418, 983411, 983432, 4638, 983416, 0, 78242, 5965, 78240,
+    66569, 68646, 0, 983450, 74392, 5335, 0, 0, 4633, 0, 119045, 983446,
+    4632, 0, 5542, 5333, 0, 983423, 68648, 5331, 4634, 0, 0, 5338, 4637, 0,
+    0, 43477, 0, 42493, 0, 42361, 0, 0, 73853, 0, 0, 0, 74204, 11343, 0,
+    10358, 10422, 4758, 0, 1608, 5252, 0, 0, 4753, 78239, 11344, 78237, 0,
+    5231, 74384, 0, 0, 0, 0, 0, 0, 0, 71991, 5229, 4757, 0, 0, 5227, 4752, 0,
+    65235, 5234, 73044, 0, 0, 0, 0, 0, 0, 7460, 0, 917936, 0, 0, 74760,
+    65189, 0, 92230, 0, 0, 5574, 0, 0, 65139, 5577, 0, 0, 118871, 68641,
+    8965, 7635, 0, 5316, 70021, 5314, 74555, 5572, 0, 5312, 0, 5525, 5330,
+    5319, 68292, 0, 65066, 0, 0, 983491, 0, 0, 127851, 0, 74851, 0, 0, 64609,
+    0, 0, 128593, 0, 129339, 0, 8632, 0, 0, 0, 195012, 5735, 195013, 1692,
+    118792, 4610, 0, 4305, 0, 4609, 43478, 4614, 0, 0, 5287, 5309, 5285, 0,
+    5961, 4647, 5283, 10743, 0, 71889, 601, 4613, 0, 0, 9208, 4608, 74044,
+    71107, 5190, 0, 0, 92410, 43965, 2265, 0, 0, 0, 0, 0, 0, 0, 129953, 0, 0,
+    5960, 0, 8992, 65293, 0, 1782, 0, 0, 0, 0, 0, 5501, 0, 42508, 69759,
+    120749, 0, 0, 195023, 983919, 43900, 128325, 0, 68134, 111180, 74209, 0,
+    64740, 0, 0, 0, 983916, 3767, 5737, 0, 4865, 0, 5740, 0, 5736, 7724, 0,
+    7193, 0, 0, 5739, 0, 4866, 0, 0, 0, 4869, 67093, 0, 0, 128514, 6650,
+    983483, 0, 983474, 78376, 4870, 0, 68661, 6716, 983473, 68667, 69786,
+    68676, 0, 10122, 4864, 66568, 0, 0, 0, 9603, 68652, 126213, 42734, 745,
+    0, 0, 0, 4777, 0, 917925, 68631, 42775, 68196, 0, 0, 0, 0, 5966, 0, 4778,
+    127890, 0, 0, 4781, 127196, 64407, 0, 74132, 8577, 71221, 0, 71223, 0,
+    4782, 0, 0, 120757, 68618, 43472, 43056, 68622, 0, 92986, 4776, 0, 11492,
+    0, 0, 13176, 0, 0, 0, 0, 0, 0, 0, 4849, 8242, 9561, 73922, 0, 0, 0, 0,
+    5963, 0, 125201, 0, 4850, 72121, 0, 590, 4853, 0, 4854, 0, 5164, 0, 1605,
+    5124, 0, 111165, 0, 8471, 0, 111164, 12445, 3785, 0, 111162, 0, 0, 4848,
+    2530, 0, 2068, 1964, 0, 0, 10796, 0, 0, 0, 0, 0, 4794, 0, 0, 0, 4797,
+    68040, 111152, 43465, 4792, 0, 0, 0, 0, 0, 110842, 983101, 92963, 0, 0,
+    0, 4221, 92360, 118869, 0, 0, 0, 70042, 0, 0, 0, 0, 10739, 65090, 0,
+    119327, 126541, 0, 0, 119326, 0, 0, 4937, 43376, 0, 0, 10597, 983440,
+    11722, 9248, 129566, 42879, 11725, 0, 0, 7579, 11141, 73958, 4941, 0,
+    917538, 9140, 4936, 5261, 0, 0, 72298, 0, 4942, 0, 4938, 0, 0, 5259,
+    9369, 983429, 111182, 5257, 0, 6844, 4964, 5264, 0, 0, 0, 41411, 0,
     121473, 73684, 128233, 9482, 4873, 41991, 64707, 42526, 127989, 64480,
     64725, 983442, 0, 0, 0, 0, 0, 0, 73043, 0, 389, 10893, 7521, 0, 4872,
     5463, 0, 3125, 111124, 0, 4878, 5459, 4604, 0, 0, 5465, 0, 0, 0, 0, 9563,
-    0, 0, 128419, 125273, 0, 0, 0, 0, 67735, 0, 0, 0, 0, 0, 78179, 0, 917838,
-    0, 917833, 0, 917836, 0, 0, 3082, 0, 0, 0, 0, 0, 7079, 5856, 917842,
-    5163, 0, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 0, 0, 68140, 111137,
-    0, 0, 0, 111139, 0, 111149, 121457, 0, 0, 0, 983189, 73081, 0, 0, 983117,
-    983077, 0, 42156, 0, 0, 0, 983080, 0, 0, 0, 119254, 120693, 0, 69386, 0,
-    118881, 0, 78189, 0, 78186, 78188, 0, 0, 0, 0, 110877, 0, 3108, 9745, 0,
-    0, 0, 118825, 0, 0, 0, 0, 0, 10972, 0, 0, 42768, 715, 983113, 121117,
-    9453, 5348, 10943, 0, 983169, 0, 0, 0, 983153, 0, 0, 11551, 128464, 0, 0,
-    9051, 0, 71728, 0, 120791, 119523, 0, 6404, 66458, 68376, 11984, 9156,
-    65222, 74454, 78180, 0, 3128, 4789, 5067, 5066, 0, 4784, 0, 8827, 1146,
-    5065, 78196, 78192, 78193, 78190, 78191, 5064, 5326, 0, 9450, 5063,
-    120361, 78200, 78201, 5062, 69733, 74146, 0, 0, 0, 0, 77992, 0, 3933, 0,
-    0, 12337, 0, 125023, 0, 0, 0, 194759, 0, 0, 82993, 42130, 0, 5151,
-    917832, 120357, 0, 93980, 0, 7620, 3800, 0, 0, 0, 127952, 0, 0, 4786,
-    127991, 4185, 0, 128742, 0, 983193, 73978, 0, 4593, 0, 120584, 0, 0,
-    110715, 10532, 110713, 110714, 110711, 110712, 64759, 1325, 5166, 9888,
-    0, 5148, 0, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0,
+    0, 0, 128419, 125273, 82963, 0, 0, 0, 67735, 0, 0, 0, 0, 0, 78179, 0,
+    917838, 0, 917833, 0, 917836, 0, 0, 3082, 0, 0, 0, 0, 0, 7079, 5856,
+    917842, 5163, 0, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 0, 0, 68140,
+    111137, 0, 0, 0, 111139, 0, 111149, 121457, 0, 0, 0, 983189, 73081, 0, 0,
+    983117, 983077, 0, 42156, 0, 0, 0, 983080, 0, 0, 0, 119254, 120693, 0,
+    69386, 0, 118881, 0, 78189, 0, 78186, 78188, 0, 0, 0, 0, 110877, 0, 3108,
+    9745, 0, 0, 0, 118825, 0, 0, 0, 0, 0, 10972, 0, 0, 42768, 715, 983113,
+    121117, 9453, 5348, 10943, 0, 983169, 0, 0, 0, 983153, 0, 0, 11551,
+    128464, 0, 0, 9051, 0, 71728, 0, 120791, 119523, 0, 6404, 66458, 68376,
+    11984, 9156, 65222, 74454, 78180, 0, 3128, 4789, 5067, 5066, 0, 4784, 0,
+    8827, 1146, 5065, 78196, 78192, 78193, 78190, 78191, 5064, 5326, 0, 9450,
+    5063, 120361, 78200, 78201, 5062, 69733, 74146, 0, 0, 0, 0, 77992, 0,
+    3933, 0, 0, 12337, 0, 125023, 0, 0, 0, 194759, 0, 0, 82993, 42130, 0,
+    5151, 917832, 120357, 0, 93980, 0, 7620, 3800, 0, 0, 0, 127952, 0, 0,
+    4786, 127991, 4185, 0, 128742, 0, 983193, 73978, 0, 4593, 0, 120584, 0,
+    0, 110715, 10532, 110713, 110714, 110711, 110712, 64759, 1325, 5166,
+    9888, 0, 5148, 0, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0,
     983433, 917820, 12095, 0, 0, 636, 128002, 0, 983464, 0, 78531, 7836,
     42741, 64137, 0, 118969, 0, 92431, 0, 0, 0, 0, 0, 8618, 0, 41384, 0, 0,
-    0, 3937, 12312, 128261, 0, 0, 0, 912, 6349, 4536, 0, 0, 126594, 0, 0, 0,
-    3935, 120665, 0, 0, 0, 0, 118859, 0, 0, 0, 0, 12046, 12599, 0, 0, 0, 0,
-    7227, 0, 0, 0, 983066, 0, 0, 0, 113817, 0, 78246, 0, 0, 0, 0, 0, 0, 0, 0,
-    128874, 43907, 0, 0, 0, 0, 4644, 8818, 0, 0, 0, 0, 93066, 66452, 126081,
-    1644, 101043, 9658, 43744, 11385, 65947, 983173, 43983, 0, 0, 0, 8962, 0,
-    0, 2466, 42039, 67669, 0, 0, 42117, 100698, 0, 0, 0, 0, 43745, 5318, 0,
-    917807, 0, 0, 0, 7054, 64147, 0, 917804, 68195, 6698, 0, 0, 0, 70849,
-    11981, 12202, 0, 121364, 0, 7059, 11608, 975, 0, 65843, 170, 0, 67239,
-    42708, 0, 0, 6058, 0, 0, 0, 70507, 0, 0, 9818, 0, 0, 42106, 0, 983065,
-    4738, 42105, 7062, 0, 4737, 11779, 4742, 120564, 92391, 0, 41374, 41375,
-    983376, 6715, 12700, 7049, 983374, 0, 0, 0, 4741, 42108, 983365, 64159,
-    4736, 64148, 0, 849, 0, 128247, 983361, 0, 120913, 917997, 0, 983379,
-    9496, 66371, 983403, 0, 11322, 0, 93008, 3928, 983152, 0, 10706, 7198, 0,
-    4842, 12053, 0, 0, 4841, 0, 4171, 12008, 68416, 3923, 1490, 0, 0, 983393,
-    40972, 5245, 72288, 983395, 126578, 0, 4845, 8332, 40974, 0, 4840, 9077,
-    0, 2408, 72851, 4825, 0, 0, 0, 0, 126251, 0, 0, 983353, 0, 983354, 0,
-    4826, 42440, 0, 0, 1274, 0, 74315, 0, 120384, 0, 121200, 0, 0, 0, 4830,
-    983388, 129044, 0, 0, 119082, 0, 64105, 0, 0, 4824, 120397, 0, 0, 1888,
-    64127, 7861, 125111, 78524, 41836, 0, 10873, 72439, 0, 64098, 12214, 0,
-    41834, 0, 358, 128120, 41833, 11442, 0, 0, 0, 0, 64115, 0, 0, 0, 120721,
-    119053, 0, 119055, 119054, 0, 0, 0, 0, 4017, 12827, 5241, 0, 73042,
-    41118, 3924, 0, 11366, 0, 0, 0, 0, 41116, 69455, 0, 0, 0, 0, 11917, 0,
-    74000, 4721, 129635, 983918, 0, 0, 0, 0, 0, 0, 122907, 0, 128702, 4722,
-    6816, 124974, 0, 4725, 67099, 4726, 0, 0, 123171, 0, 123194, 0, 0, 0,
-    4015, 0, 8052, 78766, 0, 0, 128294, 0, 0, 4720, 73090, 125003, 0, 0,
-    1656, 41831, 0, 0, 41843, 0, 0, 1452, 13111, 0, 0, 0, 8552, 64113, 41845,
-    64073, 120354, 0, 0, 120066, 120067, 7064, 64070, 9948, 0, 0, 0, 0, 2420,
-    0, 0, 0, 0, 120052, 120053, 120050, 74920, 3938, 120057, 120054, 119249,
-    120060, 71920, 120058, 120059, 120064, 72203, 7955, 64074, 4713, 128196,
-    983107, 0, 0, 0, 65152, 10198, 120044, 120045, 120042, 6713, 4532,
-    120049, 120046, 120047, 4717, 7046, 0, 66450, 4712, 75055, 0, 121085, 0,
-    8155, 4718, 3942, 4714, 9625, 0, 6383, 0, 12006, 0, 0, 0, 0, 0, 65414, 0,
-    0, 129061, 66437, 66025, 74115, 0, 0, 11228, 4809, 0, 92221, 72352, 0, 0,
-    0, 65405, 0, 0, 0, 73934, 4545, 0, 917566, 0, 4813, 78699, 0, 0, 4808, 0,
-    0, 65475, 0, 0, 4814, 72240, 4810, 0, 0, 68784, 10761, 71249, 3522, 0,
-    78693, 65404, 0, 0, 0, 0, 0, 6691, 70125, 0, 126223, 0, 0, 0, 43858, 0,
-    0, 12992, 65407, 0, 0, 3919, 0, 0, 0, 0, 0, 0, 12235, 110748, 0, 0,
-    64091, 68739, 64080, 0, 64090, 0, 0, 0, 0, 0, 8454, 0, 0, 983858, 0, 0,
-    0, 4780, 0, 0, 92764, 64621, 6732, 0, 0, 0, 0, 121363, 0, 0, 120817,
-    6976, 0, 119005, 0, 93809, 0, 0, 0, 12526, 120399, 2315, 0, 1938, 0, 0,
-    0, 0, 0, 0, 0, 120358, 93794, 0, 0, 0, 93810, 0, 2291, 0, 0, 0, 0,
-    129429, 0, 10799, 0, 0, 66372, 0, 4193, 0, 0, 983057, 7998, 0, 0, 0, 0,
-    2316, 0, 0, 0, 0, 125241, 0, 0, 74140, 0, 0, 0, 0, 3762, 93813, 120672,
-    93820, 0, 0, 0, 70098, 3780, 12808, 8163, 983154, 0, 0, 3906, 12349, 0,
-    8326, 0, 65498, 3763, 0, 5618, 0, 3779, 0, 43613, 0, 128007, 0, 0, 0, 0,
-    280, 0, 126252, 983448, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773,
-    0, 0, 0, 0, 0, 0, 7559, 11652, 10009, 110765, 110766, 110763, 110764,
-    4470, 110762, 0, 0, 983441, 0, 5249, 0, 0, 8756, 0, 0, 41694, 120585,
-    92349, 0, 0, 0, 69685, 983768, 983445, 113794, 0, 6808, 41319, 13125,
-    66332, 127977, 0, 2290, 0, 983413, 0, 0, 3943, 0, 41205, 0, 0, 0, 0,
-    5352, 0, 0, 41207, 0, 7384, 69647, 41204, 0, 41209, 69637, 0, 43607, 0,
-    0, 5420, 0, 10134, 0, 0, 4018, 7150, 0, 0, 0, 0, 0, 129606, 2561, 0, 0,
-    7148, 12076, 0, 0, 0, 0, 6276, 1706, 0, 0, 7146, 0, 128277, 41819, 74991,
-    0, 10847, 41822, 72248, 860, 0, 0, 0, 69641, 10753, 41820, 126118, 0,
-    71898, 0, 92617, 128567, 0, 0, 43016, 0, 0, 92225, 0, 0, 0, 0, 4022, 0,
-    0, 110807, 0, 41691, 0, 75060, 0, 0, 65292, 0, 110812, 0, 3911, 110811,
-    110808, 110809, 0, 125191, 7000, 3904, 118997, 72261, 0, 0, 0, 13123,
-    10846, 0, 0, 0, 0, 0, 74082, 0, 0, 0, 0, 3777, 128329, 0, 9636, 71726, 0,
-    0, 9367, 593, 0, 3999, 0, 41713, 0, 0, 67677, 0, 0, 0, 9763, 120280,
-    120283, 12347, 124, 12981, 41127, 92527, 0, 0, 0, 0, 0, 43987, 0, 0,
-    1769, 41715, 2463, 2151, 0, 0, 71222, 1538, 93044, 0, 0, 0, 7795, 120300,
-    0, 92493, 10955, 0, 0, 0, 78208, 9498, 78207, 127033, 78210, 120288,
-    3939, 120290, 120285, 8943, 120287, 120286, 120297, 4491, 120299, 42602,
-    120293, 120292, 120295, 120294, 0, 0, 0, 0, 0, 0, 1511, 9324, 0, 0, 0, 0,
-    0, 64536, 0, 0, 0, 124935, 6822, 12862, 0, 0, 42143, 41828, 0, 917629,
-    70864, 118879, 0, 0, 0, 41826, 128413, 0, 0, 13279, 7917, 0, 0, 0, 0, 0,
-    0, 92332, 0, 0, 43515, 0, 0, 0, 4013, 0, 0, 0, 72224, 125266, 0, 68243,
-    2432, 0, 0, 0, 0, 0, 69952, 0, 0, 0, 10949, 0, 0, 0, 0, 0, 0, 0, 128574,
-    43233, 0, 42517, 0, 0, 0, 0, 0, 64468, 119359, 6474, 127275, 43497,
-    12656, 128122, 119353, 0, 1665, 0, 0, 0, 119351, 0, 0, 5256, 0, 0, 0,
-    2859, 0, 0, 0, 0, 0, 0, 128220, 0, 770, 0, 811, 0, 0, 917551, 42244,
-    64427, 0, 72222, 0, 3895, 0, 74341, 12087, 0, 42859, 10193, 3116, 7747,
-    0, 0, 43496, 0, 0, 0, 0, 41877, 0, 65382, 64614, 0, 64296, 0, 6345, 0,
-    2663, 0, 121234, 0, 0, 10150, 0, 64308, 1522, 597, 0, 0, 41201, 64731, 0,
-    0, 41198, 0, 71483, 3092, 0, 0, 4783, 71448, 0, 0, 0, 10812, 0, 0, 0,
-    3078, 0, 0, 0, 0, 0, 71703, 394, 3088, 0, 0, 0, 3991, 0, 129072, 0, 424,
-    67652, 74927, 0, 0, 0, 0, 0, 0, 42231, 2209, 128215, 72983, 0, 41840,
-    129136, 5344, 1298, 0, 13155, 0, 128973, 41838, 0, 8488, 1003, 41837, 0,
-    0, 0, 48, 0, 0, 8493, 0, 0, 0, 65487, 0, 8465, 10332, 13172, 0, 0, 10449,
-    126989, 127014, 69606, 69447, 3984, 129159, 0, 0, 0, 0, 0, 0, 0, 0,
-    64758, 0, 100947, 0, 0, 9096, 0, 0, 9172, 128545, 0, 0, 5955, 67666, 0,
-    0, 0, 0, 0, 74426, 3926, 71734, 0, 8798, 100946, 92165, 0, 0, 120696, 0,
-    0, 0, 118805, 10353, 10417, 0, 0, 0, 128629, 4019, 0, 0, 0, 8219, 68402,
-    0, 0, 121301, 0, 0, 0, 0, 0, 0, 0, 0, 110625, 42474, 10642, 3909, 9950,
-    0, 128139, 69619, 68678, 92917, 0, 1049, 43517, 65707, 11943, 41806, 0,
-    68635, 3921, 0, 11775, 121352, 69820, 1038, 42303, 9823, 0, 2145, 4008,
-    68624, 0, 121025, 0, 0, 5153, 41805, 0, 0, 763, 9211, 0, 0, 0, 0, 0,
-    127142, 0, 0, 65179, 0, 8621, 0, 118878, 0, 0, 0, 0, 182, 0, 0, 0, 0,
-    72978, 9058, 8489, 0, 71188, 5969, 65909, 10848, 4570, 0, 128614, 4255,
-    0, 0, 41189, 4003, 69785, 68109, 13293, 41192, 0, 0, 42251, 0, 0, 126085,
-    11287, 6128, 121315, 11034, 0, 68207, 0, 65506, 42382, 0, 0, 66872, 9932,
-    43516, 0, 125098, 0, 41814, 0, 71234, 0, 12117, 127040, 127041, 10540,
-    127043, 9063, 78000, 0, 0, 0, 12897, 0, 0, 0, 6065, 0, 0, 0, 8692, 41186,
-    41816, 0, 41818, 41187, 0, 42196, 0, 110690, 110691, 126115, 0, 0,
-    125235, 4710, 0, 5956, 7621, 110641, 92624, 4705, 716, 74918, 110693,
-    4704, 0, 0, 127112, 161, 0, 0, 0, 4706, 0, 0, 0, 4709, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 1700, 119223, 0, 0, 128119, 4004, 0, 73071, 69383, 69914, 8506,
-    0, 0, 126996, 2538, 937, 0, 4734, 0, 0, 0, 0, 0, 4729, 0, 0, 0, 4728, 0,
+    0, 3937, 12312, 128261, 0, 0, 0, 912, 6349, 4536, 71964, 0, 126594, 0, 0,
+    0, 3935, 120665, 0, 0, 0, 0, 118859, 0, 121116, 0, 0, 12046, 12599, 0, 0,
+    0, 0, 7227, 0, 0, 0, 983066, 0, 0, 0, 113817, 0, 78246, 0, 0, 0, 0, 0,
+    127405, 101531, 0, 101530, 43907, 0, 0, 0, 0, 4644, 8818, 0, 0, 0, 0,
+    93066, 66452, 126081, 1644, 101043, 9658, 43744, 11385, 65947, 983173,
+    43983, 0, 0, 0, 8962, 0, 0, 2466, 42039, 67669, 0, 0, 42117, 100698, 0,
+    0, 0, 0, 43745, 5318, 0, 120498, 0, 0, 0, 7054, 64147, 0, 917804, 68195,
+    6698, 0, 0, 0, 70849, 11981, 12202, 0, 121364, 0, 7059, 11608, 975, 0,
+    65843, 170, 0, 67239, 42708, 0, 0, 6058, 0, 0, 0, 70507, 0, 0, 9818, 0,
+    0, 42106, 0, 983065, 4738, 42105, 7062, 0, 4737, 11779, 4742, 120564,
+    92391, 0, 41374, 41375, 983376, 6715, 12700, 7049, 983374, 0, 0, 0, 4741,
+    42108, 983365, 64159, 4736, 64148, 0, 849, 0, 128247, 983361, 0, 120913,
+    917997, 0, 983379, 9496, 66371, 983403, 983377, 11322, 0, 93008, 3928,
+    983152, 0, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008,
+    68416, 3923, 1490, 0, 0, 983393, 40972, 5245, 72288, 983395, 126578, 0,
+    4845, 8332, 40974, 0, 4840, 9077, 0, 2408, 72851, 4825, 0, 0, 0, 0,
+    126251, 0, 0, 983353, 0, 983354, 0, 4826, 42440, 0, 0, 1274, 0, 74315, 0,
+    120384, 0, 121200, 0, 0, 0, 4830, 983388, 129044, 0, 0, 119082, 0, 64105,
+    0, 0, 4824, 120397, 0, 0, 1888, 64127, 7861, 125111, 78524, 41836,
+    110613, 10873, 72439, 0, 64098, 12214, 0, 41834, 0, 358, 128120, 41833,
+    11442, 0, 0, 0, 0, 64115, 0, 0, 0, 120721, 119053, 0, 119055, 119054, 0,
+    0, 0, 0, 4017, 12827, 5241, 0, 73042, 41118, 3924, 0, 11366, 0, 0, 0, 0,
+    41116, 69455, 0, 0, 0, 0, 11917, 0, 74000, 4721, 129635, 983918, 0, 0, 0,
+    0, 0, 0, 122907, 0, 128702, 4722, 6816, 124974, 0, 4725, 67099, 4726, 0,
+    129856, 123171, 0, 123194, 0, 0, 0, 4015, 0, 8052, 78766, 0, 0, 128294,
+    0, 0, 4720, 73090, 125003, 0, 0, 1656, 41831, 0, 0, 41843, 0, 0, 1452,
+    13111, 0, 0, 0, 8552, 64113, 41845, 64073, 120354, 0, 0, 120066, 120067,
+    7064, 64070, 9948, 0, 0, 0, 0, 2420, 0, 0, 0, 0, 120052, 120053, 120050,
+    74920, 3938, 120057, 120054, 119249, 120060, 71920, 120058, 120059,
+    120064, 72203, 7955, 64074, 4713, 128196, 983107, 0, 0, 0, 65152, 10198,
+    120044, 120045, 120042, 6713, 4532, 120049, 120046, 120047, 4717, 7046,
+    0, 66450, 4712, 75055, 0, 121085, 0, 8155, 4718, 3942, 4714, 9625, 0,
+    6383, 0, 12006, 0, 0, 0, 0, 0, 65414, 0, 0, 129061, 66437, 66025, 74115,
+    0, 0, 11228, 4809, 0, 92221, 72352, 0, 0, 0, 65405, 129912, 0, 0, 73934,
+    4545, 0, 917566, 0, 4813, 78699, 0, 0, 4808, 0, 0, 65475, 0, 0, 4814,
+    72240, 4810, 0, 0, 68784, 10761, 71249, 3522, 0, 78693, 65404, 0, 0, 0,
+    0, 0, 6691, 70125, 0, 126223, 0, 0, 0, 43858, 129914, 0, 12992, 65407, 0,
+    0, 3919, 0, 0, 0, 0, 0, 0, 12235, 110748, 0, 0, 64091, 68739, 64080, 0,
+    64090, 0, 0, 0, 0, 0, 8454, 0, 0, 983858, 0, 0, 0, 4780, 0, 0, 92764,
+    64621, 6732, 0, 0, 0, 0, 121363, 0, 0, 120817, 6976, 0, 119005, 0, 93809,
+    0, 93808, 0, 12526, 120399, 2315, 0, 1938, 0, 0, 0, 0, 0, 0, 0, 120358,
+    93794, 0, 0, 0, 93810, 0, 2291, 0, 0, 0, 0, 129429, 0, 10799, 0, 0,
+    66372, 0, 4193, 0, 0, 983057, 7998, 0, 0, 0, 0, 2316, 0, 0, 0, 0, 125241,
+    0, 0, 74140, 0, 0, 0, 0, 3762, 93813, 120672, 93820, 0, 0, 0, 70098,
+    3780, 12808, 8163, 983154, 0, 0, 3906, 12349, 0, 8326, 0, 65498, 3763, 0,
+    5618, 0, 3779, 0, 43613, 0, 128007, 0, 0, 0, 0, 280, 0, 126252, 983448,
+    13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 101517, 0, 0,
+    7559, 11652, 10009, 110765, 110766, 110763, 110764, 4470, 110762, 0, 0,
+    983441, 0, 5249, 0, 0, 8756, 0, 0, 41694, 120585, 92349, 0, 0, 0, 69685,
+    983768, 983445, 113794, 0, 6808, 41319, 13125, 66332, 127977, 0, 2290, 0,
+    983413, 0, 0, 3943, 0, 41205, 0, 0, 0, 0, 5352, 0, 0, 41207, 0, 7384,
+    69647, 41204, 0, 41209, 69637, 0, 43607, 0, 0, 5420, 0, 10134, 0, 0,
+    4018, 7150, 0, 0, 0, 0, 0, 129606, 2561, 0, 0, 7148, 12076, 0, 0, 129201,
+    0, 6276, 1706, 0, 0, 7146, 0, 128277, 41819, 74991, 0, 10847, 41822,
+    72248, 860, 0, 0, 0, 69641, 10753, 41820, 126118, 0, 71898, 0, 92617,
+    128567, 0, 0, 43016, 0, 0, 92225, 0, 0, 0, 0, 4022, 0, 0, 110807, 0,
+    41691, 0, 75060, 0, 0, 65292, 0, 110812, 0, 3911, 110811, 110808, 110809,
+    0, 125191, 7000, 3904, 118997, 72261, 0, 0, 0, 13123, 10846, 0, 0, 0, 0,
+    0, 74082, 0, 0, 0, 0, 3777, 128329, 0, 9636, 71726, 0, 0, 9367, 593, 0,
+    3999, 0, 41713, 0, 0, 67677, 0, 0, 0, 9763, 120280, 120283, 12347, 124,
+    12981, 41127, 92527, 0, 0, 0, 0, 0, 43987, 0, 0, 1769, 41715, 2463, 2151,
+    0, 0, 71222, 1538, 93044, 0, 0, 0, 7795, 120300, 0, 92493, 10955, 0, 0,
+    0, 78208, 9498, 78207, 127033, 78210, 120288, 3939, 120290, 120285, 8943,
+    120287, 120286, 120297, 4491, 120299, 42602, 120293, 120292, 120295,
+    120294, 0, 0, 0, 0, 0, 0, 1511, 9324, 0, 0, 0, 0, 0, 64536, 0, 0, 0,
+    124935, 6822, 12862, 0, 0, 42143, 41828, 0, 917629, 70864, 118879, 0, 0,
+    0, 41826, 128413, 0, 0, 13279, 7917, 0, 0, 0, 0, 0, 0, 92332, 0, 0,
+    43515, 0, 0, 0, 4013, 0, 0, 0, 72224, 125266, 0, 68243, 2432, 0, 0, 0, 0,
+    0, 69952, 0, 0, 0, 10949, 0, 0, 0, 0, 0, 0, 0, 128574, 43233, 0, 42517,
+    0, 0, 0, 0, 0, 64468, 119359, 6474, 119358, 43497, 12656, 128122, 119353,
+    0, 1665, 0, 0, 0, 119351, 0, 0, 5256, 0, 0, 0, 2859, 0, 0, 0, 0, 0, 0,
+    128220, 0, 770, 0, 811, 0, 0, 917551, 42244, 64427, 0, 72222, 0, 3895, 0,
+    74341, 12087, 0, 42859, 10193, 3116, 7747, 0, 0, 43496, 0, 0, 0, 0,
+    41877, 0, 65382, 64614, 0, 64296, 0, 6345, 0, 2663, 0, 121234, 0, 0,
+    10150, 0, 64308, 1522, 597, 0, 0, 41201, 64731, 0, 0, 41198, 0, 71483,
+    3092, 0, 0, 4783, 71448, 0, 0, 0, 10812, 0, 0, 0, 3078, 0, 0, 0, 0, 0,
+    71703, 394, 3088, 0, 0, 0, 3991, 0, 129072, 0, 424, 67652, 74927, 0, 0,
+    0, 0, 0, 0, 42231, 2209, 128215, 72983, 0, 41840, 129136, 5344, 1298, 0,
+    13155, 0, 128973, 41838, 0, 8488, 1003, 41837, 0, 0, 0, 48, 0, 0, 8493,
+    0, 0, 0, 65487, 0, 8465, 10332, 13172, 0, 0, 10449, 126989, 127014,
+    69606, 69447, 3984, 129159, 0, 0, 0, 0, 0, 0, 0, 0, 64758, 0, 100947, 0,
+    0, 9096, 0, 0, 9172, 128545, 0, 0, 5955, 67666, 0, 0, 0, 0, 0, 74426,
+    3926, 71734, 0, 8798, 100946, 92165, 0, 0, 120696, 0, 0, 0, 118805,
+    10353, 10417, 0, 0, 0, 128629, 4019, 0, 0, 0, 8219, 68402, 0, 0, 121301,
+    128218, 0, 0, 0, 0, 0, 0, 0, 110625, 42474, 10642, 3909, 9950, 0, 128139,
+    69619, 68678, 92917, 0, 1049, 43517, 65707, 11943, 41806, 0, 68635, 3921,
+    0, 11775, 121352, 69820, 1038, 42303, 9823, 0, 2145, 4008, 68624, 0,
+    121025, 0, 0, 5153, 41805, 0, 0, 763, 9211, 0, 0, 0, 0, 0, 127142, 0, 0,
+    65179, 0, 8621, 0, 118878, 0, 0, 0, 0, 182, 0, 0, 0, 0, 72978, 9058,
+    8489, 0, 71188, 5969, 65909, 10848, 4570, 0, 128614, 4255, 0, 0, 41189,
+    4003, 69785, 68109, 13293, 41192, 0, 0, 42251, 0, 0, 126085, 11287, 6128,
+    121315, 11034, 0, 68207, 0, 65506, 42382, 0, 0, 66872, 9932, 43516, 0,
+    125098, 0, 41814, 0, 71234, 0, 12117, 127040, 127041, 10540, 127043,
+    9063, 78000, 0, 0, 0, 12897, 0, 0, 0, 6065, 0, 0, 0, 8692, 41186, 41816,
+    0, 41818, 41187, 0, 42196, 0, 110690, 110691, 126115, 0, 0, 125235, 4710,
+    0, 5956, 7621, 110641, 92624, 4705, 716, 74918, 110693, 4704, 0, 0,
+    127112, 161, 0, 0, 0, 4706, 0, 0, 0, 4709, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    1700, 119223, 0, 0, 128119, 4004, 0, 73071, 69383, 69914, 8506, 128237,
+    0, 126996, 2538, 937, 0, 4734, 0, 0, 0, 0, 0, 4729, 0, 0, 0, 4728, 0,
     72809, 120644, 0, 8109, 43105, 11249, 4730, 447, 0, 1513, 4733, 0, 0, 0,
     0, 0, 0, 0, 8565, 2469, 0, 6690, 0, 0, 43439, 78218, 43103, 78217, 2674,
     0, 11922, 0, 0, 3510, 0, 129368, 0, 5605, 42095, 126572, 0, 9098, 120512,
@@ -27963,7 +28829,7 @@
     93799, 10618, 2584, 93793, 0, 0, 9998, 0, 0, 0, 66350, 0, 0, 0, 121374,
     8279, 128169, 0, 4975, 70075, 0, 0, 1631, 0, 0, 0, 6290, 128994, 66386,
     0, 64645, 0, 0, 0, 0, 0, 9242, 93807, 93802, 93801, 983264, 93803, 3122,
-    93804, 7793, 0, 0, 0, 0, 12604, 93808, 6615, 67650, 0, 3986, 44025, 0,
+    93804, 7793, 0, 0, 0, 0, 12604, 92885, 6615, 67650, 0, 3986, 44025, 0,
     8912, 0, 7409, 0, 0, 0, 0, 0, 0, 8540, 11498, 0, 0, 0, 0, 0, 13060,
     120682, 0, 0, 0, 0, 0, 121345, 0, 0, 7020, 120353, 3765, 92881, 0, 1606,
     120348, 120351, 3093, 110593, 0, 0, 0, 0, 0, 0, 92892, 120337, 69402,
@@ -27975,145 +28841,147 @@
     0, 0, 0, 0, 0, 10381, 70839, 0, 0, 0, 0, 125121, 70837, 125070, 129431,
     983372, 983360, 0, 983359, 0, 120063, 0, 0, 0, 75048, 0, 74900, 0, 0,
     120978, 12161, 983351, 0, 10339, 0, 0, 0, 0, 0, 0, 0, 43032, 125010, 0,
-    983380, 12671, 11384, 0, 0, 120901, 64797, 0, 5820, 0, 0, 0, 0, 0,
+    983378, 12671, 11384, 0, 0, 120901, 64797, 0, 5820, 0, 0, 0, 0, 0,
     120650, 42137, 9893, 8851, 12664, 0, 0, 13192, 0, 41799, 65530, 0, 0,
-    43039, 3114, 0, 0, 0, 0, 0, 926, 0, 0, 0, 0, 0, 0, 0, 43037, 41798, 0, 0,
-    123214, 41801, 0, 0, 0, 4200, 12699, 8331, 70118, 3091, 92980, 66298,
-    70293, 8360, 0, 78044, 0, 4229, 64543, 126227, 65563, 0, 129310, 2861,
-    43793, 10095, 121428, 9195, 121381, 121132, 0, 129578, 0, 0, 43041, 0,
-    43794, 0, 83167, 0, 43797, 8209, 0, 129132, 12973, 0, 0, 0, 0, 0, 121235,
-    5760, 0, 743, 0, 0, 0, 0, 0, 0, 83170, 128589, 129537, 0, 119063, 0, 0,
-    0, 19919, 0, 64532, 0, 43710, 0, 0, 9483, 71115, 0, 43697, 0, 0, 83211,
-    0, 0, 0, 7247, 0, 0, 0, 0, 0, 113674, 0, 7471, 120823, 128743, 12682, 0,
-    0, 65679, 983143, 0, 0, 83201, 1099, 74241, 0, 10501, 0, 0, 113743, 0,
-    64743, 128476, 67663, 0, 0, 92219, 0, 83197, 64897, 9973, 1818, 0, 0,
-    8272, 127812, 0, 4218, 3087, 0, 127234, 0, 0, 65181, 9954, 10465, 0, 0,
-    0, 9106, 0, 67406, 0, 0, 0, 0, 43038, 0, 0, 265, 0, 0, 0, 0, 0, 0, 69405,
-    0, 59, 0, 0, 0, 0, 126239, 41810, 0, 126492, 0, 41809, 41888, 0, 41795,
-    0, 42213, 0, 0, 43033, 511, 129413, 0, 13127, 0, 0, 0, 0, 111107, 0,
-    4467, 41812, 41215, 0, 41211, 917783, 4453, 983409, 0, 983174, 0, 983407,
-    41213, 118812, 0, 0, 0, 0, 41841, 6617, 0, 0, 92995, 462, 0, 10493, 0,
-    55248, 0, 0, 74471, 6644, 0, 0, 0, 983383, 100484, 9581, 67104, 3098, 0,
-    0, 983410, 125250, 0, 120621, 0, 0, 0, 129584, 101011, 0, 118789, 74473,
-    3755, 64661, 7748, 7235, 3966, 0, 0, 127510, 0, 0, 0, 5726, 66456, 42175,
-    100486, 0, 42212, 92681, 121443, 2851, 43017, 0, 121056, 4373, 0, 0,
-    9587, 0, 6671, 128840, 3100, 0, 0, 0, 0, 0, 917789, 73836, 8190, 12083,
-    917791, 0, 6689, 64629, 0, 0, 0, 4419, 917787, 101017, 0, 69851, 0, 0,
-    8891, 3080, 0, 2347, 0, 0, 8990, 0, 121201, 0, 92528, 249, 0, 0, 69424,
-    0, 0, 0, 55253, 0, 0, 11173, 995, 0, 121047, 119861, 0, 73708, 0, 0,
-    19945, 0, 558, 983394, 12273, 0, 983862, 0, 69912, 120861, 129492, 67274,
-    94178, 0, 68019, 43030, 3129, 0, 2102, 0, 0, 121450, 0, 7725, 0, 11120,
-    0, 126111, 69246, 0, 0, 0, 41894, 0, 41898, 0, 41893, 74921, 128678,
-    3540, 11848, 0, 73005, 120848, 0, 0, 126113, 73959, 0, 0, 0, 120858, 0,
-    0, 9699, 128656, 41896, 0, 83196, 69230, 74951, 0, 72736, 0, 0, 3095,
-    983670, 11946, 983866, 0, 0, 0, 0, 0, 113677, 3672, 119864, 0, 0, 0,
-    128539, 8890, 93826, 0, 128182, 0, 0, 0, 126568, 0, 0, 983617, 9516,
-    983436, 0, 0, 42220, 0, 4450, 0, 11547, 43417, 128542, 356, 0, 0, 0, 0,
-    64901, 0, 0, 0, 0, 0, 0, 111302, 65940, 2541, 71231, 0, 123215, 126470,
-    3549, 0, 0, 0, 2743, 0, 0, 0, 9097, 128896, 43015, 0, 0, 776, 2524, 0,
-    8573, 100665, 126494, 0, 0, 42694, 71122, 8952, 10814, 118818, 0, 43646,
-    128598, 0, 0, 0, 128380, 100663, 0, 65853, 42707, 1897, 93071, 0, 0,
-    71907, 69410, 0, 125106, 0, 0, 0, 68473, 66778, 43573, 92638, 0, 0, 0,
-    120955, 73986, 0, 0, 43022, 0, 74841, 0, 67714, 0, 0, 0, 0, 0, 4553, 0,
-    0, 0, 0, 0, 19921, 0, 0, 983668, 4567, 41891, 0, 983800, 55249, 194663,
-    0, 194662, 0, 194665, 43042, 121291, 1377, 12869, 0, 0, 9250, 0, 0, 0, 0,
-    125039, 194642, 0, 74995, 0, 194644, 0, 0, 0, 194668, 121166, 0, 70275,
-    1898, 0, 0, 0, 802, 0, 0, 0, 6648, 0, 2528, 0, 0, 194646, 194625, 194645,
-    68804, 844, 0, 68824, 0, 68818, 194650, 0, 0, 0, 983724, 65464, 0, 0, 0,
-    0, 83221, 0, 0, 100680, 0, 0, 64371, 70665, 0, 194654, 0, 0, 0, 0, 0,
-    6196, 6945, 0, 0, 0, 120491, 0, 68846, 6210, 0, 70274, 0, 0, 0, 68067,
-    68834, 194715, 588, 9760, 129112, 0, 983704, 128798, 0, 127992, 0, 0,
-    118905, 0, 0, 92485, 110839, 69396, 0, 3394, 70734, 194639, 0, 0, 0, 0,
-    0, 0, 194656, 7817, 1841, 11055, 0, 194979, 194983, 127011, 119074,
-    194987, 7701, 194998, 0, 0, 1946, 121404, 0, 0, 0, 0, 0, 10934, 0, 70376,
-    0, 0, 8071, 3538, 0, 2287, 65328, 0, 0, 7614, 0, 0, 0, 12009, 43968, 0,
-    67852, 0, 0, 10841, 123640, 0, 0, 0, 0, 8960, 0, 0, 65317, 0, 0, 0,
-    70374, 0, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 11849, 12447, 0, 0,
-    110741, 0, 0, 0, 0, 42767, 0, 0, 0, 43695, 120520, 11975, 194941, 983443,
-    0, 2555, 0, 128640, 70070, 42936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66714,
-    0, 0, 70076, 65596, 121034, 66710, 67658, 0, 126994, 65338, 7792, 0, 0,
-    67871, 119027, 0, 8233, 43572, 0, 0, 0, 3442, 0, 2841, 12543, 0, 1473,
-    42820, 64329, 127832, 917772, 126126, 7937, 0, 1048, 0, 0, 983924, 0,
-    3406, 1054, 100701, 1040, 65450, 0, 92329, 1069, 917763, 128367, 128940,
-    0, 917765, 0, 983705, 9693, 110873, 0, 0, 0, 983929, 4353, 0, 1059,
-    127530, 0, 0, 0, 127093, 118862, 120500, 10646, 0, 100710, 917762, 70424,
-    74830, 0, 0, 983701, 10221, 100706, 68255, 0, 0, 74346, 119619, 100707,
-    64945, 12921, 0, 0, 0, 0, 0, 983776, 43020, 0, 0, 74254, 0, 983766, 0, 0,
-    983773, 0, 0, 0, 0, 0, 0, 0, 0, 120503, 70663, 0, 2755, 0, 0, 0, 4857, 0,
-    4428, 0, 0, 983772, 0, 0, 0, 43842, 0, 122899, 0, 7978, 0, 70392, 127080,
-    11924, 43812, 0, 65015, 0, 563, 68340, 0, 12798, 0, 100727, 0, 0, 0,
-    74110, 0, 94051, 0, 694, 0, 9876, 0, 119168, 0, 0, 0, 92361, 0, 0, 7229,
-    0, 0, 0, 0, 64811, 0, 119087, 126478, 0, 7381, 0, 2525, 4852, 11586,
-    68465, 41605, 126089, 0, 11582, 7151, 10155, 92578, 188, 0, 11592, 0,
-    74015, 0, 0, 4858, 0, 0, 0, 4861, 0, 2786, 121431, 4856, 8051, 0, 119609,
-    0, 113797, 71133, 0, 78448, 0, 0, 67842, 68084, 0, 0, 0, 0, 0, 10234,
-    5843, 0, 71865, 66728, 0, 3157, 0, 0, 75035, 72788, 983731, 0, 10822,
-    5149, 129517, 0, 65142, 129454, 4565, 0, 0, 0, 12657, 0, 0, 386, 0, 8834,
-    120974, 0, 43574, 0, 0, 0, 70113, 7220, 11839, 124984, 74883, 194752, 0,
-    65241, 74503, 8160, 0, 194753, 0, 0, 0, 0, 0, 121265, 0, 13303, 0, 0,
-    194755, 0, 118865, 0, 194761, 0, 0, 74505, 0, 0, 0, 100518, 0, 8780,
-    100512, 0, 68745, 110626, 66697, 0, 2672, 3735, 983641, 0, 68752, 11205,
-    10724, 41202, 0, 100714, 0, 0, 0, 0, 194765, 3842, 0, 78183, 12442,
-    78182, 9791, 78181, 0, 42516, 67730, 64821, 195061, 78463, 0, 78464,
-    119219, 78465, 127466, 194690, 195063, 0, 0, 0, 0, 78540, 78541, 78538,
-    1962, 78490, 78476, 65930, 11660, 0, 2072, 0, 0, 78544, 194704, 78542,
-    10669, 110859, 110860, 110857, 110858, 0, 110856, 4105, 0, 194699, 0, 0,
-    0, 13148, 195068, 78479, 9226, 0, 0, 10765, 127486, 71919, 121218,
-    195050, 0, 195041, 0, 0, 0, 0, 0, 0, 92312, 7886, 0, 6682, 0, 6680,
-    195042, 126473, 195052, 6679, 74412, 0, 72206, 74421, 66281, 0, 0,
-    127478, 0, 0, 0, 6681, 0, 12693, 0, 0, 0, 0, 0, 65442, 129055, 0, 9989,
-    74415, 194673, 0, 0, 983769, 0, 0, 0, 0, 7042, 127240, 119026, 7968, 0,
-    983749, 194741, 194736, 983774, 0, 69889, 74389, 128696, 0, 0, 128979,
-    5781, 0, 78199, 0, 0, 11091, 0, 2719, 0, 0, 0, 64495, 0, 0, 0, 65169,
-    42845, 0, 128551, 983747, 7505, 72435, 0, 0, 0, 917855, 66670, 0, 983690,
-    0, 0, 0, 7902, 0, 65265, 0, 0, 0, 0, 0, 0, 0, 12994, 0, 10828, 983955, 0,
-    4307, 3482, 0, 0, 72389, 0, 64299, 74573, 41194, 7343, 0, 0, 41195, 0,
-    8169, 0, 8841, 66770, 516, 72981, 41197, 119051, 34, 128850, 120186,
-    11504, 1612, 120187, 120182, 120181, 120184, 12001, 120178, 120177,
-    120180, 120179, 120174, 120173, 7749, 120175, 0, 1758, 0, 10667, 0,
-    120197, 0, 1935, 11517, 120193, 120196, 120195, 120190, 120189, 120192,
-    120191, 1217, 64702, 128075, 825, 0, 0, 0, 0, 66748, 0, 11050, 0, 123187,
-    0, 0, 74554, 0, 0, 8677, 123188, 11313, 123185, 3403, 0, 123186, 64364,
-    92683, 0, 0, 0, 0, 123189, 0, 0, 983861, 0, 69408, 41850, 0, 3433,
-    127965, 0, 1594, 65607, 0, 66392, 0, 129291, 74565, 41353, 125119, 0, 0,
-    0, 0, 918, 127280, 41351, 0, 0, 12140, 0, 12668, 72395, 0, 128753, 0,
-    127302, 0, 127288, 129497, 127235, 573, 0, 0, 11417, 0, 127283, 0, 0, 0,
-    72410, 0, 11482, 0, 3981, 74345, 0, 0, 0, 0, 0, 0, 125238, 0, 0, 42195,
-    0, 123190, 0, 64602, 0, 0, 121366, 0, 121061, 128690, 0, 8423, 0, 448,
-    66907, 9717, 0, 0, 0, 0, 0, 0, 0, 71910, 0, 0, 0, 120679, 65013, 78169,
-    0, 72390, 0, 0, 127917, 0, 74892, 0, 0, 127798, 0, 0, 71252, 0, 0, 0,
-    12197, 125074, 0, 121447, 0, 0, 0, 0, 0, 0, 0, 74563, 64828, 11419, 0,
-    8592, 0, 0, 0, 11381, 0, 0, 74529, 0, 0, 0, 0, 72796, 0, 83257, 0, 0, 0,
-    129437, 65672, 0, 0, 0, 0, 0, 0, 0, 0, 9505, 0, 0, 756, 0, 125243,
-    100358, 110852, 7261, 0, 0, 0, 0, 0, 64401, 65830, 41365, 0, 0, 0,
-    127834, 0, 0, 0, 0, 0, 74626, 123155, 11578, 0, 0, 0, 0, 0, 0, 74568, 0,
-    113684, 1794, 68310, 120218, 120219, 120220, 120221, 120222, 120223,
-    3617, 120209, 64886, 94061, 78202, 120213, 120214, 10225, 983060, 0,
-    65223, 983058, 0, 0, 4452, 127779, 0, 0, 0, 0, 0, 0, 11425, 0, 0, 1231,
-    0, 0, 0, 0, 8192, 0, 0, 0, 10616, 8694, 0, 68867, 128332, 123595, 120200,
-    120201, 120202, 120203, 9878, 120205, 119626, 120207, 0, 8799, 42131, 0,
-    127163, 0, 120198, 120199, 837, 120015, 72384, 0, 983817, 0, 11427, 0,
-    78154, 0, 70171, 0, 78150, 42606, 0, 119615, 78147, 64637, 78146, 43060,
-    78145, 125009, 3392, 0, 194783, 119067, 119650, 65468, 43498, 126083, 0,
-    0, 0, 194928, 194937, 194938, 64681, 194930, 83264, 92451, 0, 194955,
-    83262, 983732, 8973, 0, 194967, 70177, 194968, 0, 4800, 195018, 0, 0,
-    11820, 70151, 0, 0, 4802, 4111, 111268, 0, 4805, 127308, 68193, 7885,
-    121220, 0, 0, 0, 4767, 0, 0, 0, 0, 0, 125234, 100366, 43453, 0, 41340, 0,
-    0, 10005, 65856, 41333, 0, 9518, 0, 0, 0, 42520, 0, 0, 0, 917562, 100506,
-    0, 0, 0, 0, 0, 0, 9167, 42151, 124958, 0, 2026, 100848, 0, 0, 100534,
-    12768, 0, 7582, 0, 0, 0, 0, 129557, 0, 120539, 68879, 0, 43547, 0, 8546,
-    126071, 78520, 7604, 78518, 78519, 78514, 78517, 78511, 78512, 73802,
-    128140, 0, 6708, 10535, 0, 68218, 55274, 68221, 92296, 0, 0, 0, 0, 0,
-    72385, 0, 0, 0, 73727, 0, 120706, 74442, 0, 0, 0, 4351, 0, 119887,
-    119888, 0, 119886, 119891, 68866, 119889, 11433, 119895, 119896, 0,
-    119894, 65578, 0, 0, 0, 983070, 10681, 0, 0, 0, 0, 983110, 0, 6722,
-    129364, 0, 119997, 41546, 64860, 68394, 0, 41549, 0, 72386, 0, 0, 0, 0,
-    64710, 41547, 0, 0, 0, 78530, 78532, 78528, 78529, 71343, 78527, 78523,
-    78525, 3537, 119908, 119905, 7155, 2264, 0, 78533, 67755, 0, 0, 0, 0, 0,
-    0, 0, 64715, 0, 0, 537, 0, 4179, 0, 0, 0, 0, 0, 0, 0, 0, 12081, 0, 0,
-    4048, 7053, 0, 0, 70459, 0, 124975, 0, 3059, 0, 0, 43491, 983814, 0, 0,
-    127993, 4100, 920, 1811, 1355, 0, 0, 64383, 10078, 69398, 0, 0, 0, 65870,
-    0, 129565, 0, 72400, 42918, 0, 66789, 0, 12865, 0, 73938,
+    43039, 3114, 0, 0, 0, 0, 0, 926, 0, 72004, 0, 0, 0, 0, 0, 43037, 41798,
+    0, 0, 123214, 41801, 0, 0, 0, 4200, 12699, 8331, 70118, 3091, 92980,
+    66298, 70293, 8360, 0, 78044, 0, 4229, 64543, 126227, 65563, 0, 129310,
+    2861, 43793, 10095, 121428, 9195, 121381, 121132, 0, 129578, 0, 0, 43041,
+    0, 43794, 0, 83167, 0, 43797, 8209, 0, 129132, 12973, 0, 0, 0, 0, 0,
+    121235, 5760, 0, 743, 0, 0, 0, 0, 0, 0, 83170, 128589, 129537, 0, 119063,
+    0, 0, 0, 19919, 0, 64532, 0, 43710, 0, 0, 9483, 71115, 0, 43697, 0, 0,
+    83211, 0, 0, 0, 7247, 0, 0, 0, 0, 0, 113674, 0, 7471, 120823, 128743,
+    12682, 0, 0, 65679, 983143, 0, 0, 83201, 1099, 74241, 0, 10501, 0, 0,
+    113743, 0, 64743, 128476, 67663, 0, 0, 92219, 0, 83197, 64897, 9973,
+    1818, 0, 0, 8272, 127812, 0, 4218, 3087, 0, 127234, 0, 101300, 65181,
+    9954, 10465, 0, 0, 0, 9106, 0, 67406, 0, 0, 0, 0, 43038, 0, 0, 265, 0, 0,
+    0, 0, 0, 0, 69405, 0, 59, 0, 0, 0, 0, 126239, 41810, 0, 126492, 0, 41809,
+    41888, 0, 41795, 0, 42213, 0, 0, 43033, 511, 129413, 0, 13127, 0, 0, 0,
+    0, 111107, 0, 4467, 41812, 41215, 0, 41211, 917783, 4453, 69575, 0,
+    129883, 0, 983407, 41213, 118812, 0, 0, 0, 129730, 41841, 6617, 130041,
+    0, 92995, 462, 0, 10493, 0, 55248, 0, 0, 74471, 6644, 0, 0, 0, 983383,
+    100484, 9581, 67104, 3098, 0, 0, 983410, 125250, 0, 120621, 0, 0, 0,
+    129584, 101011, 0, 118789, 74473, 3755, 64661, 7748, 7235, 3966, 0, 0,
+    127510, 0, 0, 0, 5726, 66456, 42175, 100486, 0, 42212, 92681, 121443,
+    2851, 43017, 0, 121056, 4373, 0, 0, 9587, 0, 6671, 128840, 3100, 0,
+    917790, 0, 0, 0, 917789, 73836, 8190, 12083, 917791, 0, 6689, 64629, 0,
+    0, 0, 4419, 917787, 101017, 0, 69851, 0, 0, 8891, 3080, 0, 2347, 0, 0,
+    8990, 0, 121201, 0, 92528, 249, 0, 0, 69424, 0, 0, 0, 55253, 0, 0, 11173,
+    995, 0, 121047, 119861, 0, 73708, 0, 0, 19945, 0, 558, 983394, 12273, 0,
+    983862, 0, 69912, 120861, 129492, 67274, 94178, 0, 68019, 43030, 3129, 0,
+    2102, 0, 0, 121450, 0, 7725, 0, 11120, 0, 126111, 69246, 0, 0, 0, 41894,
+    0, 41898, 0, 41893, 74921, 128678, 3540, 11848, 0, 73005, 120848, 0, 0,
+    126113, 73959, 0, 0, 0, 120858, 0, 0, 9699, 128656, 41896, 0, 83196,
+    69230, 74951, 0, 72736, 0, 0, 3095, 983670, 11946, 983866, 0, 0, 0, 0, 0,
+    113677, 3672, 119864, 0, 0, 0, 128539, 8890, 93826, 0, 128182, 0, 0, 0,
+    126568, 0, 0, 983617, 9516, 983436, 0, 0, 42220, 0, 4450, 0, 11547,
+    43417, 128542, 356, 0, 0, 0, 0, 64901, 0, 0, 0, 0, 0, 0, 111302, 65940,
+    2541, 71231, 0, 123215, 126470, 3549, 0, 0, 0, 2743, 0, 0, 0, 9097,
+    128896, 43015, 0, 0, 776, 2524, 0, 8573, 100665, 126494, 0, 0, 42694,
+    71122, 8952, 10814, 118818, 0, 43646, 128598, 0, 0, 0, 128380, 100663, 0,
+    65853, 42707, 1897, 93071, 0, 0, 71907, 69410, 0, 125106, 0, 0, 0, 68473,
+    66778, 43573, 92638, 0, 0, 0, 120955, 73986, 0, 0, 43022, 0, 74841, 0,
+    67714, 0, 0, 0, 0, 0, 4553, 0, 0, 0, 0, 0, 19921, 0, 0, 983668, 4567,
+    41891, 0, 983800, 55249, 194663, 0, 194662, 0, 194665, 43042, 121291,
+    1377, 12869, 0, 0, 9250, 0, 0, 0, 0, 125039, 194642, 0, 74995, 0, 194644,
+    0, 0, 101328, 194668, 121166, 0, 70275, 1898, 69556, 0, 0, 802, 0, 0, 0,
+    6648, 0, 2528, 0, 0, 194646, 194625, 101330, 68804, 844, 0, 68824, 0,
+    68818, 194650, 0, 0, 0, 983724, 65464, 0, 0, 0, 0, 83221, 0, 0, 100680,
+    42954, 0, 64371, 70665, 0, 194654, 0, 0, 0, 0, 0, 6196, 6945, 0, 0, 0,
+    120491, 0, 68846, 6210, 0, 70274, 0, 0, 0, 68067, 68834, 194715, 588,
+    9760, 129112, 0, 983704, 128798, 0, 127992, 0, 0, 118905, 0, 0, 92485,
+    110839, 69396, 0, 3394, 70734, 194639, 0, 0, 0, 0, 0, 0, 194656, 7817,
+    1841, 11055, 0, 194979, 194983, 127011, 67403, 194987, 7701, 194998, 0,
+    194995, 1946, 121404, 0, 0, 917631, 0, 0, 10934, 0, 70376, 0, 0, 8071,
+    3538, 0, 2287, 65328, 0, 0, 7614, 0, 0, 0, 12009, 43968, 0, 67852, 0, 0,
+    10841, 123640, 0, 0, 0, 0, 8960, 0, 0, 65317, 128829, 0, 0, 70374, 0, 0,
+    0, 65315, 0, 0, 0, 0, 0, 119621, 0, 11849, 12447, 0, 0, 110741, 0, 0, 0,
+    129976, 42767, 0, 0, 0, 43695, 120520, 11975, 194941, 983443, 0, 2555, 0,
+    128640, 70070, 42936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66714, 0, 0,
+    70076, 65596, 121034, 66710, 67658, 0, 126994, 65338, 7792, 0, 0, 67871,
+    119027, 0, 8233, 43572, 0, 0, 0, 3442, 0, 2841, 12543, 0, 1473, 42820,
+    64329, 127832, 917772, 126126, 7937, 0, 1048, 0, 0, 983924, 0, 3406,
+    1054, 100701, 1040, 65450, 0, 92329, 1069, 917763, 128367, 128940, 0,
+    917765, 0, 983705, 9693, 110873, 0, 0, 0, 983929, 4353, 0, 1059, 127530,
+    0, 0, 0, 127093, 118862, 120500, 10646, 0, 100710, 917762, 70424, 74830,
+    0, 0, 983701, 10221, 100706, 68255, 0, 0, 74346, 119619, 100707, 64945,
+    12921, 0, 0, 0, 0, 0, 983776, 43020, 0, 0, 74254, 0, 983766, 0, 0,
+    983773, 0, 71954, 0, 0, 0, 0, 0, 0, 120503, 70663, 0, 2755, 0, 0, 0,
+    4857, 0, 4428, 0, 0, 983772, 0, 0, 0, 43842, 0, 122899, 0, 7978, 0,
+    70392, 127080, 11924, 43812, 0, 65015, 0, 563, 68340, 0, 12798, 0,
+    100727, 0, 0, 0, 74110, 0, 94051, 0, 694, 0, 9876, 0, 119168, 0, 0, 0,
+    92361, 0, 0, 7229, 0, 0, 0, 0, 64811, 0, 119087, 126478, 0, 7381, 0,
+    2525, 4852, 11586, 68465, 41605, 126089, 0, 11582, 7151, 10155, 92578,
+    188, 0, 11592, 0, 74015, 0, 0, 4858, 0, 0, 0, 4861, 0, 2786, 121431,
+    4856, 8051, 0, 119609, 0, 113797, 71133, 0, 78448, 0, 0, 67842, 68084, 0,
+    0, 0, 0, 0, 10234, 5843, 0, 71865, 66728, 0, 3157, 0, 0, 75035, 72788,
+    983731, 0, 10822, 5149, 129517, 0, 65142, 129454, 4565, 0, 0, 0, 12657,
+    0, 0, 386, 0, 8834, 120974, 0, 43574, 0, 0, 0, 70113, 7220, 11839,
+    124984, 74883, 194752, 0, 65241, 74503, 8160, 0, 194753, 0, 0, 0, 0, 0,
+    121265, 6847, 13303, 0, 0, 194755, 0, 118865, 0, 194761, 0, 0, 74505, 0,
+    0, 0, 100518, 194721, 8780, 100512, 0, 68745, 110626, 66697, 0, 2672,
+    3735, 983641, 0, 68752, 11205, 10724, 41202, 0, 100714, 0, 0, 0, 0,
+    194765, 3842, 0, 78183, 12442, 78182, 9791, 78181, 0, 42516, 67730,
+    64821, 195061, 78178, 0, 78464, 119219, 78465, 127466, 194690, 195063, 0,
+    0, 0, 0, 78540, 78541, 78538, 1962, 78490, 78476, 65930, 11660, 0, 2072,
+    0, 0, 78544, 194704, 78542, 10669, 110859, 110860, 110857, 110858,
+    129749, 110856, 4105, 0, 194699, 0, 0, 0, 13148, 195068, 78479, 9226, 0,
+    0, 10765, 127486, 71919, 121218, 195050, 0, 195041, 0, 0, 0, 0, 0, 0,
+    92312, 7886, 0, 6682, 0, 6680, 195042, 126473, 195052, 6679, 74412, 0,
+    72206, 74421, 66281, 0, 0, 127478, 0, 0, 0, 6681, 0, 12693, 0, 0, 0, 0,
+    0, 65442, 129055, 0, 9989, 74415, 194673, 0, 0, 983769, 0, 0, 0, 0, 7042,
+    127240, 119026, 7968, 0, 983749, 194741, 194736, 983774, 0, 69889, 74389,
+    128696, 0, 0, 128979, 5781, 0, 78199, 0, 0, 11091, 0, 2719, 0, 0, 0,
+    64495, 0, 0, 0, 65169, 42845, 0, 128551, 983747, 7505, 72435, 0, 0, 0,
+    917855, 66670, 0, 983690, 0, 0, 0, 7902, 0, 65265, 0, 0, 0, 0, 0, 0, 0,
+    12994, 0, 10828, 983955, 0, 4307, 3482, 0, 0, 72389, 0, 64299, 74573,
+    41194, 7343, 0, 0, 41195, 0, 8169, 0, 8841, 66770, 516, 72981, 41197,
+    119051, 34, 128850, 120186, 11504, 1612, 120187, 120182, 120181, 120184,
+    12001, 120178, 120177, 120180, 120179, 71966, 120173, 7749, 120175, 0,
+    1758, 0, 10667, 0, 120197, 0, 1935, 11517, 120193, 120196, 120195,
+    120190, 120189, 120192, 120191, 1217, 64702, 128075, 825, 0, 0, 0, 0,
+    66748, 0, 11050, 0, 123187, 0, 0, 74554, 0, 0, 8677, 123188, 11313,
+    123185, 3403, 0, 123186, 64364, 92683, 0, 0, 0, 0, 123189, 0, 0, 983861,
+    0, 69408, 41850, 0, 3433, 127965, 0, 1594, 65607, 0, 66392, 0, 129291,
+    74565, 41353, 125119, 0, 0, 0, 0, 918, 127280, 41351, 0, 0, 12140, 0,
+    12668, 72395, 0, 128753, 0, 127302, 0, 127288, 129497, 127235, 573, 0, 0,
+    11417, 0, 127283, 0, 0, 0, 72410, 0, 11482, 0, 3981, 74345, 0, 0, 0, 0,
+    0, 0, 125238, 0, 0, 42195, 0, 123190, 0, 64602, 0, 0, 121366, 0, 121061,
+    128690, 0, 8423, 0, 448, 66907, 9717, 0, 0, 0, 0, 0, 0, 0, 71910, 129898,
+    0, 0, 120679, 65013, 78169, 0, 72390, 0, 0, 127917, 0, 74892, 0, 0,
+    127798, 0, 0, 71252, 0, 0, 0, 12197, 125074, 0, 121447, 0, 0, 0, 0, 0, 0,
+    0, 74563, 64828, 11419, 0, 8592, 0, 0, 0, 11381, 0, 0, 74529, 0, 0,
+    83254, 0, 72796, 0, 83257, 0, 0, 0, 129437, 65672, 0, 0, 0, 0, 0, 0, 0,
+    0, 9505, 0, 0, 756, 0, 125243, 100358, 110852, 7261, 0, 0, 0, 0, 0,
+    64401, 65830, 41365, 0, 0, 0, 127834, 0, 0, 0, 0, 0, 74626, 123155,
+    11578, 0, 0, 0, 0, 0, 0, 74568, 0, 113684, 1794, 68310, 120218, 120219,
+    120220, 120221, 120222, 120223, 3617, 120011, 64886, 94061, 78202,
+    120213, 120214, 10225, 983060, 0, 65223, 983058, 0, 0, 4452, 127779, 0,
+    0, 0, 0, 0, 0, 11425, 0, 0, 1231, 0, 0, 0, 0, 8192, 0, 0, 0, 10616, 8694,
+    0, 68867, 128332, 123595, 120200, 120201, 120202, 120203, 9878, 120205,
+    119626, 120207, 0, 8799, 42131, 0, 127163, 0, 120198, 120199, 837,
+    120015, 72384, 0, 983817, 0, 11427, 0, 78154, 0, 70171, 0, 78150, 42606,
+    0, 119615, 78147, 64637, 78146, 43060, 78145, 125009, 3392, 0, 194783,
+    119067, 119650, 65468, 43498, 126083, 0, 0, 0, 194928, 194937, 194938,
+    64681, 194930, 83264, 92451, 0, 194955, 83262, 983732, 8973, 0, 194967,
+    70177, 194968, 0, 4800, 195018, 0, 0, 11820, 70151, 0, 0, 4802, 4111,
+    111268, 0, 4805, 127308, 68193, 7885, 121220, 0, 0, 0, 4767, 0, 0, 0, 0,
+    0, 125234, 100366, 43453, 0, 41340, 0, 0, 10005, 65856, 41333, 0, 9518,
+    0, 0, 0, 42520, 100850, 0, 0, 917562, 100506, 0, 0, 0, 0, 0, 0, 9167,
+    42151, 124958, 0, 2026, 100848, 0, 0, 100534, 12768, 0, 7582, 0, 0, 0, 0,
+    129557, 0, 120539, 68879, 0, 43547, 119992, 8546, 126071, 78520, 7604,
+    78518, 78519, 78514, 78517, 78511, 78512, 73802, 128140, 0, 6708, 10535,
+    0, 68218, 55274, 68221, 92296, 0, 0, 0, 0, 0, 72385, 0, 0, 0, 73727, 0,
+    120706, 74442, 0, 0, 0, 4351, 0, 119887, 119888, 0, 119886, 119891,
+    68866, 119889, 11433, 119895, 119896, 0, 119894, 65578, 194693, 0, 0,
+    983070, 10681, 0, 0, 0, 0, 983110, 0, 6722, 129364, 0, 119997, 41546,
+    64860, 68394, 0, 41549, 0, 72386, 0, 0, 0, 0, 64710, 41547, 0, 0, 0,
+    78530, 78532, 78528, 78529, 71343, 78527, 78523, 78525, 3537, 119908,
+    119905, 7155, 2264, 0, 78533, 67755, 0, 0, 0, 0, 0, 0, 0, 64715, 0, 0,
+    537, 0, 4179, 0, 0, 0, 0, 0, 0, 0, 0, 12081, 0, 0, 4048, 7053, 0, 0,
+    70459, 0, 124975, 0, 3059, 0, 0, 43491, 983814, 0, 0, 127993, 4100, 920,
+    1811, 1355, 0, 0, 64383, 10078, 69398, 0, 0, 0, 65870, 0, 129565, 0,
+    72400, 42918, 0, 66789, 0, 12865, 0, 73938,
 };
 
 #define code_magic 47
@@ -28615,20 +29483,16 @@
     {3, {0x0039, 0xFE0F, 0x20E3}},
     {2, {0x0100, 0x0300}},
     {2, {0x0101, 0x0300}},
+    {2, {0x012A, 0x0300}},
+    {2, {0x012B, 0x0300}},
+    {2, {0x016A, 0x0300}},
+    {2, {0x016B, 0x0300}},
     {2, {0x0045, 0x0329}},
     {2, {0x0065, 0x0329}},
     {2, {0x00C8, 0x0329}},
     {2, {0x00E8, 0x0329}},
     {2, {0x00C9, 0x0329}},
     {2, {0x00E9, 0x0329}},
-    {2, {0x00CA, 0x0304}},
-    {2, {0x00EA, 0x0304}},
-    {2, {0x00CA, 0x030C}},
-    {2, {0x00EA, 0x030C}},
-    {2, {0x012A, 0x0300}},
-    {2, {0x012B, 0x0300}},
-    {3, {0x0069, 0x0307, 0x0301}},
-    {3, {0x006E, 0x0360, 0x0067}},
     {2, {0x004F, 0x0329}},
     {2, {0x006F, 0x0329}},
     {2, {0x00D2, 0x0329}},
@@ -28637,8 +29501,12 @@
     {2, {0x00F3, 0x0329}},
     {2, {0x0053, 0x0329}},
     {2, {0x0073, 0x0329}},
-    {2, {0x016A, 0x0300}},
-    {2, {0x016B, 0x0300}},
+    {2, {0x00CA, 0x0304}},
+    {2, {0x00EA, 0x0304}},
+    {2, {0x00CA, 0x030C}},
+    {2, {0x00EA, 0x030C}},
+    {3, {0x0069, 0x0307, 0x0301}},
+    {3, {0x006E, 0x0360, 0x0067}},
     {2, {0x0104, 0x0301}},
     {2, {0x0105, 0x0301}},
     {2, {0x0104, 0x0303}},
diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c
index ffc04e0..5b05a94 100644
--- a/Modules/xxlimited.c
+++ b/Modules/xxlimited.c
@@ -25,7 +25,7 @@
 
 static PyObject *Xxo_Type;
 
-#define XxoObject_Check(v)      (Py_TYPE(v) == Xxo_Type)
+#define XxoObject_Check(v)      Py_IS_TYPE(v, Xxo_Type)
 
 static XxoObject *
 newXxoObject(PyObject *arg)
@@ -43,6 +43,7 @@
 static int
 Xxo_traverse(XxoObject *self, visitproc visit, void *arg)
 {
+    Py_VISIT(Py_TYPE(self));
     Py_VISIT(self->x_attr);
     return 0;
 }
diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c
index 0250031..17b049c 100644
--- a/Modules/xxmodule.c
+++ b/Modules/xxmodule.c
@@ -25,7 +25,7 @@
 
 static PyTypeObject Xxo_Type;
 
-#define XxoObject_Check(v)      (Py_TYPE(v) == &Xxo_Type)
+#define XxoObject_Check(v)      Py_IS_TYPE(v, &Xxo_Type)
 
 static XxoObject *
 newXxoObject(PyObject *arg)
diff --git a/Modules/xxsubtype.c b/Modules/xxsubtype.c
index 031005d..7200337 100644
--- a/Modules/xxsubtype.c
+++ b/Modules/xxsubtype.c
@@ -1,5 +1,5 @@
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 PyDoc_STRVAR(xxsubtype__doc__,
 "xxsubtype is an example module showing how to subtype builtin types from C.\n"
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index a3d9ed6..fe27909 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -6,11 +6,10 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "zlib.h"
 
 
-#include "pythread.h"
 #define ENTER_ZLIB(obj) \
     Py_BEGIN_ALLOW_THREADS; \
     PyThread_acquire_lock((obj)->lock, 1); \
@@ -32,10 +31,23 @@
 /* Initial buffer size. */
 #define DEF_BUF_SIZE (16*1024)
 
-static PyTypeObject Comptype;
-static PyTypeObject Decomptype;
+static PyModuleDef zlibmodule;
 
-static PyObject *ZlibError;
+typedef struct {
+    PyTypeObject *Comptype;
+    PyTypeObject *Decomptype;
+    PyObject *ZlibError;
+} _zlibstate;
+
+static inline _zlibstate*
+get_zlib_state(PyObject *module)
+{
+    void *state = PyModule_GetState(module);
+    assert(state != NULL);
+    return (_zlibstate *)state;
+}
+
+#define _zlibstate_global ((_zlibstate *)PyModule_GetState(PyState_FindModule(&zlibmodule)))
 
 typedef struct
 {
@@ -73,9 +85,9 @@
         }
     }
     if (zmsg == Z_NULL)
-        PyErr_Format(ZlibError, "Error %d %s", err, msg);
+        PyErr_Format(_zlibstate_global->ZlibError, "Error %d %s", err, msg);
     else
-        PyErr_Format(ZlibError, "Error %d %s: %.200s", err, msg, zmsg);
+        PyErr_Format(_zlibstate_global->ZlibError, "Error %d %s: %.200s", err, msg, zmsg);
 }
 
 /*[clinic input]
@@ -226,7 +238,7 @@
                         "Out of memory while compressing data");
         goto error;
     case Z_STREAM_ERROR:
-        PyErr_SetString(ZlibError, "Bad compression level");
+        PyErr_SetString(_zlibstate_global->ZlibError, "Bad compression level");
         goto error;
     default:
         deflateEnd(&zst);
@@ -462,7 +474,7 @@
         goto error;
     }
 
-    self = newcompobject(&Comptype);
+    self = newcompobject(_zlibstate_global->Comptype);
     if (self == NULL)
         goto error;
     self->zst.opaque = NULL;
@@ -558,7 +570,7 @@
         return NULL;
     }
 
-    self = newcompobject(&Decomptype);
+    self = newcompobject(_zlibstate_global->Decomptype);
     if (self == NULL)
         return NULL;
     self->zst.opaque = NULL;
@@ -581,7 +593,7 @@
                 return NULL;
             }
 #else
-            PyErr_Format(ZlibError,
+            PyErr_Format(_zlibstate_global->ZlibError,
                          "zlib version %s does not allow raw inflate with dictionary",
                          ZLIB_VERSION);
             Py_DECREF(self);
@@ -608,11 +620,13 @@
 static void
 Dealloc(compobject *self)
 {
+    PyObject *type = (PyObject *)Py_TYPE(self);
     PyThread_free_lock(self->lock);
     Py_XDECREF(self->unused_data);
     Py_XDECREF(self->unconsumed_tail);
     Py_XDECREF(self->zdict);
     PyObject_Del(self);
+    Py_DECREF(type);
 }
 
 static void
@@ -944,7 +958,7 @@
     compobject *retval = NULL;
     int err;
 
-    retval = newcompobject(&Comptype);
+    retval = newcompobject(_zlibstate_global->Comptype);
     if (!retval) return NULL;
 
     /* Copy the zstream state
@@ -1025,7 +1039,7 @@
     compobject *retval = NULL;
     int err;
 
-    retval = newcompobject(&Decomptype);
+    retval = newcompobject(_zlibstate_global->Decomptype);
     if (!retval) return NULL;
 
     /* Copy the zstream state
@@ -1309,67 +1323,33 @@
     {NULL, NULL}
 };
 
-static PyTypeObject Comptype = {
-    PyVarObject_HEAD_INIT(0, 0)
+static PyType_Slot Comptype_slots[] = {
+    {Py_tp_dealloc, Comp_dealloc},
+    {Py_tp_methods, comp_methods},
+    {0, 0},
+};
+
+static PyType_Spec Comptype_spec = {
     "zlib.Compress",
     sizeof(compobject),
     0,
-    (destructor)Comp_dealloc,       /*tp_dealloc*/
-    0,                              /*tp_vectorcall_offset*/
-    0,                              /*tp_getattr*/
-    0,                              /*tp_setattr*/
-    0,                              /*tp_as_async*/
-    0,                              /*tp_repr*/
-    0,                              /*tp_as_number*/
-    0,                              /*tp_as_sequence*/
-    0,                              /*tp_as_mapping*/
-    0,                              /*tp_hash*/
-    0,                              /*tp_call*/
-    0,                              /*tp_str*/
-    0,                              /*tp_getattro*/
-    0,                              /*tp_setattro*/
-    0,                              /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,             /*tp_flags*/
-    0,                              /*tp_doc*/
-    0,                              /*tp_traverse*/
-    0,                              /*tp_clear*/
-    0,                              /*tp_richcompare*/
-    0,                              /*tp_weaklistoffset*/
-    0,                              /*tp_iter*/
-    0,                              /*tp_iternext*/
-    comp_methods,                   /*tp_methods*/
+    Py_TPFLAGS_DEFAULT,
+    Comptype_slots
 };
 
-static PyTypeObject Decomptype = {
-    PyVarObject_HEAD_INIT(0, 0)
+static PyType_Slot Decomptype_slots[] = {
+    {Py_tp_dealloc, Decomp_dealloc},
+    {Py_tp_methods, Decomp_methods},
+    {Py_tp_members, Decomp_members},
+    {0, 0},
+};
+
+static PyType_Spec Decomptype_spec = {
     "zlib.Decompress",
     sizeof(compobject),
     0,
-    (destructor)Decomp_dealloc,     /*tp_dealloc*/
-    0,                              /*tp_vectorcall_offset*/
-    0,                              /*tp_getattr*/
-    0,                              /*tp_setattr*/
-    0,                              /*tp_as_async*/
-    0,                              /*tp_repr*/
-    0,                              /*tp_as_number*/
-    0,                              /*tp_as_sequence*/
-    0,                              /*tp_as_mapping*/
-    0,                              /*tp_hash*/
-    0,                              /*tp_call*/
-    0,                              /*tp_str*/
-    0,                              /*tp_getattro*/
-    0,                              /*tp_setattro*/
-    0,                              /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,             /*tp_flags*/
-    0,                              /*tp_doc*/
-    0,                              /*tp_traverse*/
-    0,                              /*tp_clear*/
-    0,                              /*tp_richcompare*/
-    0,                              /*tp_weaklistoffset*/
-    0,                              /*tp_iter*/
-    0,                              /*tp_iternext*/
-    Decomp_methods,                 /*tp_methods*/
-    Decomp_members,                 /*tp_members*/
+    Py_TPFLAGS_DEFAULT,
+    Decomptype_slots
 };
 
 PyDoc_STRVAR(zlib_module_documentation,
@@ -1387,34 +1367,72 @@
 "Compressor objects support compress() and flush() methods; decompressor\n"
 "objects support decompress() and flush().");
 
+static int
+zlib_clear(PyObject *m)
+{
+    _zlibstate *state = get_zlib_state(m);
+    Py_CLEAR(state->Comptype);
+    Py_CLEAR(state->Decomptype);
+    Py_CLEAR(state->ZlibError);
+    return 0;
+}
+
+static int
+zlib_traverse(PyObject *m, visitproc visit, void *arg)
+{
+    _zlibstate *state = get_zlib_state(m);
+    Py_VISIT(state->Comptype);
+    Py_VISIT(state->Decomptype);
+    Py_VISIT(state->ZlibError);
+    return 0;
+}
+
+static void
+zlib_free(void *m)
+{
+    zlib_clear((PyObject *)m);
+}
+
 static struct PyModuleDef zlibmodule = {
         PyModuleDef_HEAD_INIT,
         "zlib",
         zlib_module_documentation,
-        -1,
+        sizeof(_zlibstate),
         zlib_methods,
         NULL,
-        NULL,
-        NULL,
-        NULL
+        zlib_traverse,
+        zlib_clear,
+        zlib_free,
 };
 
 PyMODINIT_FUNC
 PyInit_zlib(void)
 {
     PyObject *m, *ver;
-    if (PyType_Ready(&Comptype) < 0)
-            return NULL;
-    if (PyType_Ready(&Decomptype) < 0)
-            return NULL;
+    m = PyState_FindModule(&zlibmodule);
+    if (m != NULL) {
+        Py_INCREF(m);
+        return m;
+    }
     m = PyModule_Create(&zlibmodule);
     if (m == NULL)
         return NULL;
 
-    ZlibError = PyErr_NewException("zlib.error", NULL, NULL);
+    PyTypeObject *Comptype = (PyTypeObject *)PyType_FromSpec(&Comptype_spec);
+    if (Comptype == NULL)
+        return NULL;
+    get_zlib_state(m)->Comptype = Comptype;
+
+    PyTypeObject *Decomptype = (PyTypeObject *)PyType_FromSpec(&Decomptype_spec);
+    if (Decomptype == NULL)
+        return NULL;
+    get_zlib_state(m)->Decomptype = Decomptype;
+
+    PyObject *ZlibError = PyErr_NewException("zlib.error", NULL, NULL);
     if (ZlibError != NULL) {
         Py_INCREF(ZlibError);
         PyModule_AddObject(m, "error", ZlibError);
+        get_zlib_state(m)->ZlibError = ZlibError;
     }
     PyModule_AddIntMacro(m, MAX_WBITS);
     PyModule_AddIntMacro(m, DEFLATED);
@@ -1457,5 +1475,6 @@
 
     PyModule_AddStringConstant(m, "__version__", "1.0");
 
+    PyState_AddModule(m, &zlibmodule);
     return m;
 }
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 12237d5..1922619 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -1,9 +1,12 @@
 /* Abstract Object Interface (many thanks to Jim Fulton) */
 
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_abstract.h"      // _PyIndex_Check()
+#include "pycore_ceval.h"         // _Py_EnterRecursiveCall()
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include <ctype.h>
-#include "structmember.h" /* we need the offsetof() macro from there */
+#include <stddef.h>               // offsetof()
 #include "longintrepr.h"
 
 
@@ -13,7 +16,7 @@
 static PyObject *
 type_error(const char *msg, PyObject *obj)
 {
-    PyErr_Format(PyExc_TypeError, msg, obj->ob_type->tp_name);
+    PyErr_Format(PyExc_TypeError, msg, Py_TYPE(obj)->tp_name);
     return NULL;
 }
 
@@ -37,7 +40,7 @@
         return null_error();
     }
 
-    v = (PyObject *)o->ob_type;
+    v = (PyObject *)Py_TYPE(o);
     Py_INCREF(v);
     return v;
 }
@@ -52,7 +55,7 @@
         return -1;
     }
 
-    m = o->ob_type->tp_as_sequence;
+    m = Py_TYPE(o)->tp_as_sequence;
     if (m && m->sq_length) {
         Py_ssize_t len = m->sq_length(o);
         assert(len >= 0 || PyErr_Occurred());
@@ -149,16 +152,16 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_mapping;
+    m = Py_TYPE(o)->tp_as_mapping;
     if (m && m->mp_subscript) {
         PyObject *item = m->mp_subscript(o, key);
         assert((item != NULL) ^ (PyErr_Occurred() != NULL));
         return item;
     }
 
-    ms = o->ob_type->tp_as_sequence;
+    ms = Py_TYPE(o)->tp_as_sequence;
     if (ms && ms->sq_item) {
-        if (PyIndex_Check(key)) {
+        if (_PyIndex_Check(key)) {
             Py_ssize_t key_value;
             key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
             if (key_value == -1 && PyErr_Occurred())
@@ -172,13 +175,19 @@
     }
 
     if (PyType_Check(o)) {
-        PyObject *meth, *result, *stack[1] = {key};
+        PyObject *meth, *result;
         _Py_IDENTIFIER(__class_getitem__);
+
+        // Special case type[int], but disallow other types so str[int] fails
+        if ((PyTypeObject*)o == &PyType_Type) {
+            return Py_GenericAlias(o, key);
+        }
+
         if (_PyObject_LookupAttrId(o, &PyId___class_getitem__, &meth) < 0) {
             return NULL;
         }
         if (meth) {
-            result = _PyObject_FastCall(meth, stack, 1);
+            result = PyObject_CallOneArg(meth, key);
             Py_DECREF(meth);
             return result;
         }
@@ -196,19 +205,19 @@
         null_error();
         return -1;
     }
-    m = o->ob_type->tp_as_mapping;
+    m = Py_TYPE(o)->tp_as_mapping;
     if (m && m->mp_ass_subscript)
         return m->mp_ass_subscript(o, key, value);
 
-    if (o->ob_type->tp_as_sequence) {
-        if (PyIndex_Check(key)) {
+    if (Py_TYPE(o)->tp_as_sequence) {
+        if (_PyIndex_Check(key)) {
             Py_ssize_t key_value;
             key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
             if (key_value == -1 && PyErr_Occurred())
                 return -1;
             return PySequence_SetItem(o, key_value, value);
         }
-        else if (o->ob_type->tp_as_sequence->sq_ass_item) {
+        else if (Py_TYPE(o)->tp_as_sequence->sq_ass_item) {
             type_error("sequence index must be "
                        "integer, not '%.200s'", key);
             return -1;
@@ -228,19 +237,19 @@
         null_error();
         return -1;
     }
-    m = o->ob_type->tp_as_mapping;
+    m = Py_TYPE(o)->tp_as_mapping;
     if (m && m->mp_ass_subscript)
         return m->mp_ass_subscript(o, key, (PyObject*)NULL);
 
-    if (o->ob_type->tp_as_sequence) {
-        if (PyIndex_Check(key)) {
+    if (Py_TYPE(o)->tp_as_sequence) {
+        if (_PyIndex_Check(key)) {
             Py_ssize_t key_value;
             key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
             if (key_value == -1 && PyErr_Occurred())
                 return -1;
             return PySequence_DelItem(o, key_value);
         }
-        else if (o->ob_type->tp_as_sequence->sq_ass_item) {
+        else if (Py_TYPE(o)->tp_as_sequence->sq_ass_item) {
             type_error("sequence index must be "
                        "integer, not '%.200s'", key);
             return -1;
@@ -269,13 +278,23 @@
     return ret;
 }
 
+
+/* Return 1 if the getbuffer function is available, otherwise return 0. */
+int
+PyObject_CheckBuffer(PyObject *obj)
+{
+    PyBufferProcs *tp_as_buffer = Py_TYPE(obj)->tp_as_buffer;
+    return (tp_as_buffer != NULL && tp_as_buffer->bf_getbuffer != NULL);
+}
+
+
 /* We release the buffer right after use of this function which could
    cause issues later on.  Don't use these functions in new code.
  */
 int
 PyObject_CheckReadBuffer(PyObject *obj)
 {
-    PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
+    PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer;
     Py_buffer view;
 
     if (pb == NULL ||
@@ -333,7 +352,7 @@
         null_error();
         return -1;
     }
-    pb = obj->ob_type->tp_as_buffer;
+    pb = Py_TYPE(obj)->tp_as_buffer;
     if (pb == NULL ||
         pb->bf_getbuffer == NULL ||
         ((*pb->bf_getbuffer)(obj, &view, PyBUF_WRITABLE) != 0)) {
@@ -353,7 +372,7 @@
 int
 PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)
 {
-    PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
+    PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer;
 
     if (pb == NULL || pb->bf_getbuffer == NULL) {
         PyErr_Format(PyExc_TypeError,
@@ -495,6 +514,48 @@
     }
 }
 
+Py_ssize_t
+PyBuffer_SizeFromFormat(const char *format)
+{
+    PyObject *structmodule = NULL;
+    PyObject *calcsize = NULL;
+    PyObject *res = NULL;
+    PyObject *fmt = NULL;
+    Py_ssize_t itemsize = -1;
+
+    structmodule = PyImport_ImportModule("struct");
+    if (structmodule == NULL) {
+        return itemsize;
+    }
+
+    calcsize = PyObject_GetAttrString(structmodule, "calcsize");
+    if (calcsize == NULL) {
+        goto done;
+    }
+
+    fmt = PyUnicode_FromString(format);
+    if (fmt == NULL) {
+        goto done;
+    }
+
+    res = PyObject_CallFunctionObjArgs(calcsize, fmt, NULL);
+    if (res == NULL) {
+        goto done;
+    }
+
+    itemsize = PyLong_AsSsize_t(res);
+    if (itemsize < 0) {
+        goto done;
+    }
+
+done:
+    Py_DECREF(structmodule);
+    Py_XDECREF(calcsize);
+    Py_XDECREF(fmt);
+    Py_XDECREF(res);
+    return itemsize;
+}
+
 int
 PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
 {
@@ -737,7 +798,7 @@
     }
 
     /* And call it. */
-    result = PyObject_CallFunctionObjArgs(meth, format_spec, NULL);
+    result = PyObject_CallOneArg(meth, format_spec);
     Py_DECREF(meth);
 
     if (result && !PyUnicode_Check(result)) {
@@ -758,10 +819,10 @@
 int
 PyNumber_Check(PyObject *o)
 {
-    return o && o->ob_type->tp_as_number &&
-           (o->ob_type->tp_as_number->nb_index ||
-            o->ob_type->tp_as_number->nb_int ||
-            o->ob_type->tp_as_number->nb_float);
+    return o && Py_TYPE(o)->tp_as_number &&
+           (Py_TYPE(o)->tp_as_number->nb_index ||
+            Py_TYPE(o)->tp_as_number->nb_int ||
+            Py_TYPE(o)->tp_as_number->nb_float);
 }
 
 /* Binary operators */
@@ -778,8 +839,8 @@
   Order operations are tried until either a valid result or error:
     w.op(v,w)[*], v.op(v,w), w.op(v,w)
 
-  [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
-      v->ob_type
+  [*] only when Py_TYPE(v) != Py_TYPE(w) && Py_TYPE(w) is a subclass of
+      Py_TYPE(v)
  */
 
 static PyObject *
@@ -789,16 +850,16 @@
     binaryfunc slotv = NULL;
     binaryfunc slotw = NULL;
 
-    if (v->ob_type->tp_as_number != NULL)
-        slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
-    if (w->ob_type != v->ob_type &&
-        w->ob_type->tp_as_number != NULL) {
-        slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
+    if (Py_TYPE(v)->tp_as_number != NULL)
+        slotv = NB_BINOP(Py_TYPE(v)->tp_as_number, op_slot);
+    if (!Py_IS_TYPE(w, Py_TYPE(v)) &&
+        Py_TYPE(w)->tp_as_number != NULL) {
+        slotw = NB_BINOP(Py_TYPE(w)->tp_as_number, op_slot);
         if (slotw == slotv)
             slotw = NULL;
     }
     if (slotv) {
-        if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
+        if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
             x = slotw(v, w);
             if (x != Py_NotImplemented)
                 return x;
@@ -826,8 +887,8 @@
                  "unsupported operand type(s) for %.100s: "
                  "'%.100s' and '%.100s'",
                  op_name,
-                 v->ob_type->tp_name,
-                 w->ob_type->tp_name);
+                 Py_TYPE(v)->tp_name,
+                 Py_TYPE(w)->tp_name);
     return NULL;
 }
 
@@ -839,7 +900,7 @@
         Py_DECREF(result);
 
         if (op_slot == NB_SLOT(nb_rshift) &&
-            PyCFunction_Check(v) &&
+            PyCFunction_CheckExact(v) &&
             strcmp(((PyCFunctionObject *)v)->m_ml->ml_name, "print") == 0)
         {
             PyErr_Format(PyExc_TypeError,
@@ -847,8 +908,8 @@
                 "'%.100s' and '%.100s'. Did you mean \"print(<message>, "
                 "file=<output_stream>)\"?",
                 op_name,
-                v->ob_type->tp_name,
-                w->ob_type->tp_name);
+                Py_TYPE(v)->tp_name,
+                Py_TYPE(w)->tp_name);
             return NULL;
         }
 
@@ -878,18 +939,17 @@
     ternaryfunc slotw = NULL;
     ternaryfunc slotz = NULL;
 
-    mv = v->ob_type->tp_as_number;
-    mw = w->ob_type->tp_as_number;
+    mv = Py_TYPE(v)->tp_as_number;
+    mw = Py_TYPE(w)->tp_as_number;
     if (mv != NULL)
         slotv = NB_TERNOP(mv, op_slot);
-    if (w->ob_type != v->ob_type &&
-        mw != NULL) {
+    if (!Py_IS_TYPE(w, Py_TYPE(v)) && mw != NULL) {
         slotw = NB_TERNOP(mw, op_slot);
         if (slotw == slotv)
             slotw = NULL;
     }
     if (slotv) {
-        if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
+        if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
             x = slotw(v, w, z);
             if (x != Py_NotImplemented)
                 return x;
@@ -907,7 +967,7 @@
             return x;
         Py_DECREF(x); /* can't do it */
     }
-    mz = z->ob_type->tp_as_number;
+    mz = Py_TYPE(z)->tp_as_number;
     if (mz != NULL) {
         slotz = NB_TERNOP(mz, op_slot);
         if (slotz == slotv || slotz == slotw)
@@ -925,16 +985,16 @@
             PyExc_TypeError,
             "unsupported operand type(s) for ** or pow(): "
             "'%.100s' and '%.100s'",
-            v->ob_type->tp_name,
-            w->ob_type->tp_name);
+            Py_TYPE(v)->tp_name,
+            Py_TYPE(w)->tp_name);
     else
         PyErr_Format(
             PyExc_TypeError,
             "unsupported operand type(s) for pow(): "
             "'%.100s', '%.100s', '%.100s'",
-            v->ob_type->tp_name,
-            w->ob_type->tp_name,
-            z->ob_type->tp_name);
+            Py_TYPE(v)->tp_name,
+            Py_TYPE(w)->tp_name,
+            Py_TYPE(z)->tp_name);
     return NULL;
 }
 
@@ -957,7 +1017,7 @@
 {
     PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
     if (result == Py_NotImplemented) {
-        PySequenceMethods *m = v->ob_type->tp_as_sequence;
+        PySequenceMethods *m = Py_TYPE(v)->tp_as_sequence;
         Py_DECREF(result);
         if (m && m->sq_concat) {
             return (*m->sq_concat)(v, w);
@@ -971,7 +1031,7 @@
 sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
 {
     Py_ssize_t count;
-    if (PyIndex_Check(n)) {
+    if (_PyIndex_Check(n)) {
         count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
         if (count == -1 && PyErr_Occurred())
             return NULL;
@@ -988,8 +1048,8 @@
 {
     PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
     if (result == Py_NotImplemented) {
-        PySequenceMethods *mv = v->ob_type->tp_as_sequence;
-        PySequenceMethods *mw = w->ob_type->tp_as_sequence;
+        PySequenceMethods *mv = Py_TYPE(v)->tp_as_sequence;
+        PySequenceMethods *mw = Py_TYPE(w)->tp_as_sequence;
         Py_DECREF(result);
         if  (mv && mv->sq_repeat) {
             return sequence_repeat(mv->sq_repeat, v, w);
@@ -1051,7 +1111,7 @@
 static PyObject *
 binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
 {
-    PyNumberMethods *mv = v->ob_type->tp_as_number;
+    PyNumberMethods *mv = Py_TYPE(v)->tp_as_number;
     if (mv != NULL) {
         binaryfunc slot = NB_BINOP(mv, iop_slot);
         if (slot) {
@@ -1111,7 +1171,7 @@
     PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
                                    NB_SLOT(nb_add));
     if (result == Py_NotImplemented) {
-        PySequenceMethods *m = v->ob_type->tp_as_sequence;
+        PySequenceMethods *m = Py_TYPE(v)->tp_as_sequence;
         Py_DECREF(result);
         if (m != NULL) {
             binaryfunc f = NULL;
@@ -1133,8 +1193,8 @@
                                    NB_SLOT(nb_multiply));
     if (result == Py_NotImplemented) {
         ssizeargfunc f = NULL;
-        PySequenceMethods *mv = v->ob_type->tp_as_sequence;
-        PySequenceMethods *mw = w->ob_type->tp_as_sequence;
+        PySequenceMethods *mv = Py_TYPE(v)->tp_as_sequence;
+        PySequenceMethods *mw = Py_TYPE(w)->tp_as_sequence;
         Py_DECREF(result);
         if (mv != NULL) {
             f = mv->sq_inplace_repeat;
@@ -1172,8 +1232,8 @@
 PyObject *
 PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
 {
-    if (v->ob_type->tp_as_number &&
-        v->ob_type->tp_as_number->nb_inplace_power != NULL) {
+    if (Py_TYPE(v)->tp_as_number &&
+        Py_TYPE(v)->tp_as_number->nb_inplace_power != NULL) {
         return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
     }
     else {
@@ -1193,7 +1253,7 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_number;
+    m = Py_TYPE(o)->tp_as_number;
     if (m && m->nb_negative)
         return (*m->nb_negative)(o);
 
@@ -1209,7 +1269,7 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_number;
+    m = Py_TYPE(o)->tp_as_number;
     if (m && m->nb_positive)
         return (*m->nb_positive)(o);
 
@@ -1225,7 +1285,7 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_number;
+    m = Py_TYPE(o)->tp_as_number;
     if (m && m->nb_invert)
         return (*m->nb_invert)(o);
 
@@ -1241,22 +1301,21 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_number;
+    m = Py_TYPE(o)->tp_as_number;
     if (m && m->nb_absolute)
         return m->nb_absolute(o);
 
     return type_error("bad operand type for abs(): '%.200s'", o);
 }
 
-#undef PyIndex_Check
 
 int
 PyIndex_Check(PyObject *obj)
 {
-    return obj->ob_type->tp_as_number != NULL &&
-           obj->ob_type->tp_as_number->nb_index != NULL;
+    return _PyIndex_Check(obj);
 }
 
+
 /* Return a Python int from the object item.
    Raise TypeError if the result is not an int
    or if the object cannot be interpreted as an index.
@@ -1273,19 +1332,19 @@
         Py_INCREF(item);
         return item;
     }
-    if (!PyIndex_Check(item)) {
+    if (!_PyIndex_Check(item)) {
         PyErr_Format(PyExc_TypeError,
                      "'%.200s' object cannot be interpreted "
-                     "as an integer", item->ob_type->tp_name);
+                     "as an integer", Py_TYPE(item)->tp_name);
         return NULL;
     }
-    result = item->ob_type->tp_as_number->nb_index(item);
+    result = Py_TYPE(item)->tp_as_number->nb_index(item);
     if (!result || PyLong_CheckExact(result))
         return result;
     if (!PyLong_Check(result)) {
         PyErr_Format(PyExc_TypeError,
                      "__index__ returned non-int (type %.200s)",
-                     result->ob_type->tp_name);
+                     Py_TYPE(result)->tp_name);
         Py_DECREF(result);
         return NULL;
     }
@@ -1294,7 +1353,7 @@
             "__index__ returned non-int (type %.200s).  "
             "The ability to return an instance of a strict subclass of int "
             "is deprecated, and may be removed in a future version of Python.",
-            result->ob_type->tp_name)) {
+            Py_TYPE(result)->tp_name)) {
         Py_DECREF(result);
         return NULL;
     }
@@ -1339,7 +1398,7 @@
         /* Otherwise replace the error with caller's error object. */
         PyErr_Format(err,
                      "cannot fit '%.200s' into an index-sized integer",
-                     item->ob_type->tp_name);
+                     Py_TYPE(item)->tp_name);
     }
 
  finish:
@@ -1365,7 +1424,7 @@
         Py_INCREF(o);
         return o;
     }
-    m = o->ob_type->tp_as_number;
+    m = Py_TYPE(o)->tp_as_number;
     if (m && m->nb_int) { /* This should include subclasses of int */
         result = _PyLong_FromNbInt(o);
         if (result != NULL && !PyLong_CheckExact(result)) {
@@ -1393,12 +1452,12 @@
         }
         /* __trunc__ is specified to return an Integral type,
            but int() needs to return an int. */
-        m = result->ob_type->tp_as_number;
+        m = Py_TYPE(result)->tp_as_number;
         if (m == NULL || (m->nb_index == NULL && m->nb_int == NULL)) {
             PyErr_Format(
                 PyExc_TypeError,
                 "__trunc__ returned non-Integral (type %.200s)",
-                result->ob_type->tp_name);
+                Py_TYPE(result)->tp_name);
             Py_DECREF(result);
             return NULL;
         }
@@ -1460,7 +1519,7 @@
         Py_INCREF(o);
         return o;
     }
-    m = o->ob_type->tp_as_number;
+    m = Py_TYPE(o)->tp_as_number;
     if (m && m->nb_float) { /* This should include subclasses of float */
         PyObject *res = m->nb_float(o);
         double val;
@@ -1470,7 +1529,7 @@
         if (!PyFloat_Check(res)) {
             PyErr_Format(PyExc_TypeError,
                          "%.50s.__float__ returned non-float (type %.50s)",
-                         o->ob_type->tp_name, res->ob_type->tp_name);
+                         Py_TYPE(o)->tp_name, Py_TYPE(res)->tp_name);
             Py_DECREF(res);
             return NULL;
         }
@@ -1479,7 +1538,7 @@
                 "%.50s.__float__ returned non-float (type %.50s).  "
                 "The ability to return an instance of a strict subclass of float "
                 "is deprecated, and may be removed in a future version of Python.",
-                o->ob_type->tp_name, res->ob_type->tp_name)) {
+                Py_TYPE(o)->tp_name, Py_TYPE(res)->tp_name)) {
             Py_DECREF(res);
             return NULL;
         }
@@ -1530,8 +1589,8 @@
 {
     if (PyDict_Check(s))
         return 0;
-    return s->ob_type->tp_as_sequence &&
-        s->ob_type->tp_as_sequence->sq_item != NULL;
+    return Py_TYPE(s)->tp_as_sequence &&
+        Py_TYPE(s)->tp_as_sequence->sq_item != NULL;
 }
 
 Py_ssize_t
@@ -1544,14 +1603,14 @@
         return -1;
     }
 
-    m = s->ob_type->tp_as_sequence;
+    m = Py_TYPE(s)->tp_as_sequence;
     if (m && m->sq_length) {
         Py_ssize_t len = m->sq_length(s);
         assert(len >= 0 || PyErr_Occurred());
         return len;
     }
 
-    if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_length) {
+    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_length) {
         type_error("%.200s is not a sequence", s);
         return -1;
     }
@@ -1576,7 +1635,7 @@
         return null_error();
     }
 
-    m = s->ob_type->tp_as_sequence;
+    m = Py_TYPE(s)->tp_as_sequence;
     if (m && m->sq_concat)
         return m->sq_concat(s, o);
 
@@ -1601,7 +1660,7 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_sequence;
+    m = Py_TYPE(o)->tp_as_sequence;
     if (m && m->sq_repeat)
         return m->sq_repeat(o, count);
 
@@ -1631,7 +1690,7 @@
         return null_error();
     }
 
-    m = s->ob_type->tp_as_sequence;
+    m = Py_TYPE(s)->tp_as_sequence;
     if (m && m->sq_inplace_concat)
         return m->sq_inplace_concat(s, o);
     if (m && m->sq_concat)
@@ -1656,7 +1715,7 @@
         return null_error();
     }
 
-    m = o->ob_type->tp_as_sequence;
+    m = Py_TYPE(o)->tp_as_sequence;
     if (m && m->sq_inplace_repeat)
         return m->sq_inplace_repeat(o, count);
     if (m && m->sq_repeat)
@@ -1686,7 +1745,7 @@
         return null_error();
     }
 
-    m = s->ob_type->tp_as_sequence;
+    m = Py_TYPE(s)->tp_as_sequence;
     if (m && m->sq_item) {
         if (i < 0) {
             if (m->sq_length) {
@@ -1701,7 +1760,7 @@
         return m->sq_item(s, i);
     }
 
-    if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_subscript) {
+    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_subscript) {
         return type_error("%.200s is not a sequence", s);
     }
     return type_error("'%.200s' object does not support indexing", s);
@@ -1716,7 +1775,7 @@
         return null_error();
     }
 
-    mp = s->ob_type->tp_as_mapping;
+    mp = Py_TYPE(s)->tp_as_mapping;
     if (mp && mp->mp_subscript) {
         PyObject *res;
         PyObject *slice = _PySlice_FromIndices(i1, i2);
@@ -1740,7 +1799,7 @@
         return -1;
     }
 
-    m = s->ob_type->tp_as_sequence;
+    m = Py_TYPE(s)->tp_as_sequence;
     if (m && m->sq_ass_item) {
         if (i < 0) {
             if (m->sq_length) {
@@ -1755,7 +1814,7 @@
         return m->sq_ass_item(s, i, o);
     }
 
-    if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_ass_subscript) {
+    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_ass_subscript) {
         type_error("%.200s is not a sequence", s);
         return -1;
     }
@@ -1773,7 +1832,7 @@
         return -1;
     }
 
-    m = s->ob_type->tp_as_sequence;
+    m = Py_TYPE(s)->tp_as_sequence;
     if (m && m->sq_ass_item) {
         if (i < 0) {
             if (m->sq_length) {
@@ -1788,7 +1847,7 @@
         return m->sq_ass_item(s, i, (PyObject *)NULL);
     }
 
-    if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_ass_subscript) {
+    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_ass_subscript) {
         type_error("%.200s is not a sequence", s);
         return -1;
     }
@@ -1806,7 +1865,7 @@
         return -1;
     }
 
-    mp = s->ob_type->tp_as_mapping;
+    mp = Py_TYPE(s)->tp_as_mapping;
     if (mp && mp->mp_ass_subscript) {
         int res;
         PyObject *slice = _PySlice_FromIndices(i1, i2);
@@ -1831,7 +1890,7 @@
         return -1;
     }
 
-    mp = s->ob_type->tp_as_mapping;
+    mp = Py_TYPE(s)->tp_as_mapping;
     if (mp && mp->mp_ass_subscript) {
         int res;
         PyObject *slice = _PySlice_FromIndices(i1, i2);
@@ -2015,7 +2074,7 @@
             break;
         }
 
-        cmp = PyObject_RichCompareBool(obj, item, Py_EQ);
+        cmp = PyObject_RichCompareBool(item, obj, Py_EQ);
         Py_DECREF(item);
         if (cmp < 0)
             goto Fail;
@@ -2083,7 +2142,7 @@
 PySequence_Contains(PyObject *seq, PyObject *ob)
 {
     Py_ssize_t result;
-    PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
+    PySequenceMethods *sqm = Py_TYPE(seq)->tp_as_sequence;
     if (sqm != NULL && sqm->sq_contains != NULL)
         return (*sqm->sq_contains)(seq, ob);
     result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
@@ -2109,8 +2168,8 @@
 int
 PyMapping_Check(PyObject *o)
 {
-    return o && o->ob_type->tp_as_mapping &&
-        o->ob_type->tp_as_mapping->mp_subscript;
+    return o && Py_TYPE(o)->tp_as_mapping &&
+        Py_TYPE(o)->tp_as_mapping->mp_subscript;
 }
 
 Py_ssize_t
@@ -2123,14 +2182,14 @@
         return -1;
     }
 
-    m = o->ob_type->tp_as_mapping;
+    m = Py_TYPE(o)->tp_as_mapping;
     if (m && m->mp_length) {
         Py_ssize_t len = m->mp_length(o);
         assert(len >= 0 || PyErr_Occurred());
         return len;
     }
 
-    if (o->ob_type->tp_as_sequence && o->ob_type->tp_as_sequence->sq_length) {
+    if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_length) {
         type_error("%.200s is not a mapping", o);
         return -1;
     }
@@ -2220,7 +2279,7 @@
     PyObject *it, *result, *meth_output;
 
     assert(o != NULL);
-    meth_output = _PyObject_CallMethodId(o, meth_id, NULL);
+    meth_output = _PyObject_CallMethodIdNoArgs(o, meth_id);
     if (meth_output == NULL || PyList_CheckExact(meth_output)) {
         return meth_output;
     }
@@ -2230,7 +2289,7 @@
             PyErr_Format(PyExc_TypeError,
                          "%.200s.%U() returned a non-iterable (type %.200s)",
                          Py_TYPE(o)->tp_name,
-                         meth_id->object,
+                         _PyUnicode_FromId(meth_id),
                          Py_TYPE(meth_output)->tp_name);
         }
         Py_DECREF(meth_output);
@@ -2316,9 +2375,7 @@
     _Py_IDENTIFIER(__bases__);
     PyObject *bases;
 
-    Py_ALLOW_RECURSION
     (void)_PyObject_LookupAttrId(cls, &PyId___bases__, &bases);
-    Py_END_ALLOW_RECURSION
     if (bases != NULL && !PyTuple_Check(bases)) {
         Py_DECREF(bases);
         return NULL;
@@ -2385,7 +2442,7 @@
 }
 
 static int
-recursive_isinstance(PyObject *inst, PyObject *cls)
+object_isinstance(PyObject *inst, PyObject *cls)
 {
     PyObject *icls;
     int retval;
@@ -2396,7 +2453,7 @@
         if (retval == 0) {
             retval = _PyObject_LookupAttrId(inst, &PyId___class__, &icls);
             if (icls != NULL) {
-                if (icls != (PyObject *)(inst->ob_type) && PyType_Check(icls)) {
+                if (icls != (PyObject *)(Py_TYPE(inst)) && PyType_Check(icls)) {
                     retval = PyType_IsSubtype(
                         (PyTypeObject *)icls,
                         (PyTypeObject *)cls);
@@ -2422,63 +2479,77 @@
     return retval;
 }
 
-int
-PyObject_IsInstance(PyObject *inst, PyObject *cls)
+static int
+object_recursive_isinstance(PyThreadState *tstate, PyObject *inst, PyObject *cls)
 {
     _Py_IDENTIFIER(__instancecheck__);
-    PyObject *checker;
 
     /* Quick test for an exact match */
-    if (Py_TYPE(inst) == (PyTypeObject *)cls)
+    if (Py_IS_TYPE(inst, (PyTypeObject *)cls)) {
         return 1;
+    }
 
     /* We know what type's __instancecheck__ does. */
     if (PyType_CheckExact(cls)) {
-        return recursive_isinstance(inst, cls);
+        return object_isinstance(inst, cls);
     }
 
     if (PyTuple_Check(cls)) {
-        Py_ssize_t i;
-        Py_ssize_t n;
-        int r = 0;
-
-        if (Py_EnterRecursiveCall(" in __instancecheck__"))
+        /* Not a general sequence -- that opens up the road to
+           recursion and stack overflow. */
+        if (_Py_EnterRecursiveCall(tstate, " in __instancecheck__")) {
             return -1;
-        n = PyTuple_GET_SIZE(cls);
-        for (i = 0; i < n; ++i) {
+        }
+        Py_ssize_t n = PyTuple_GET_SIZE(cls);
+        int r = 0;
+        for (Py_ssize_t i = 0; i < n; ++i) {
             PyObject *item = PyTuple_GET_ITEM(cls, i);
-            r = PyObject_IsInstance(inst, item);
-            if (r != 0)
+            r = object_recursive_isinstance(tstate, inst, item);
+            if (r != 0) {
                 /* either found it, or got an error */
                 break;
+            }
         }
-        Py_LeaveRecursiveCall();
+        _Py_LeaveRecursiveCall(tstate);
         return r;
     }
 
-    checker = _PyObject_LookupSpecial(cls, &PyId___instancecheck__);
+    PyObject *checker = _PyObject_LookupSpecial(cls, &PyId___instancecheck__);
     if (checker != NULL) {
-        PyObject *res;
-        int ok = -1;
-        if (Py_EnterRecursiveCall(" in __instancecheck__")) {
+        if (_Py_EnterRecursiveCall(tstate, " in __instancecheck__")) {
             Py_DECREF(checker);
-            return ok;
+            return -1;
         }
-        res = PyObject_CallFunctionObjArgs(checker, inst, NULL);
-        Py_LeaveRecursiveCall();
+
+        PyObject *res = PyObject_CallOneArg(checker, inst);
+        _Py_LeaveRecursiveCall(tstate);
         Py_DECREF(checker);
-        if (res != NULL) {
-            ok = PyObject_IsTrue(res);
-            Py_DECREF(res);
+
+        if (res == NULL) {
+            return -1;
         }
+        int ok = PyObject_IsTrue(res);
+        Py_DECREF(res);
+
         return ok;
     }
-    else if (PyErr_Occurred())
+    else if (_PyErr_Occurred(tstate)) {
         return -1;
-    /* Probably never reached anymore. */
-    return recursive_isinstance(inst, cls);
+    }
+
+    /* cls has no __instancecheck__() method */
+    return object_isinstance(inst, cls);
 }
 
+
+int
+PyObject_IsInstance(PyObject *inst, PyObject *cls)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return object_recursive_isinstance(tstate, inst, cls);
+}
+
+
 static  int
 recursive_issubclass(PyObject *derived, PyObject *cls)
 {
@@ -2497,8 +2568,8 @@
     return abstract_issubclass(derived, cls);
 }
 
-int
-PyObject_IsSubclass(PyObject *derived, PyObject *cls)
+static int
+object_issubclass(PyThreadState *tstate, PyObject *derived, PyObject *cls)
 {
     _Py_IDENTIFIER(__subclasscheck__);
     PyObject *checker;
@@ -2512,34 +2583,32 @@
     }
 
     if (PyTuple_Check(cls)) {
-        Py_ssize_t i;
-        Py_ssize_t n;
-        int r = 0;
 
-        if (Py_EnterRecursiveCall(" in __subclasscheck__"))
+        if (_Py_EnterRecursiveCall(tstate, " in __subclasscheck__")) {
             return -1;
-        n = PyTuple_GET_SIZE(cls);
-        for (i = 0; i < n; ++i) {
+        }
+        Py_ssize_t n = PyTuple_GET_SIZE(cls);
+        int r = 0;
+        for (Py_ssize_t i = 0; i < n; ++i) {
             PyObject *item = PyTuple_GET_ITEM(cls, i);
-            r = PyObject_IsSubclass(derived, item);
+            r = object_issubclass(tstate, derived, item);
             if (r != 0)
                 /* either found it, or got an error */
                 break;
         }
-        Py_LeaveRecursiveCall();
+        _Py_LeaveRecursiveCall(tstate);
         return r;
     }
 
     checker = _PyObject_LookupSpecial(cls, &PyId___subclasscheck__);
     if (checker != NULL) {
-        PyObject *res;
         int ok = -1;
-        if (Py_EnterRecursiveCall(" in __subclasscheck__")) {
+        if (_Py_EnterRecursiveCall(tstate, " in __subclasscheck__")) {
             Py_DECREF(checker);
             return ok;
         }
-        res = PyObject_CallFunctionObjArgs(checker, derived, NULL);
-        Py_LeaveRecursiveCall();
+        PyObject *res = PyObject_CallOneArg(checker, derived);
+        _Py_LeaveRecursiveCall(tstate);
         Py_DECREF(checker);
         if (res != NULL) {
             ok = PyObject_IsTrue(res);
@@ -2547,16 +2616,27 @@
         }
         return ok;
     }
-    else if (PyErr_Occurred())
+    else if (_PyErr_Occurred(tstate)) {
         return -1;
+    }
+
     /* Probably never reached anymore. */
     return recursive_issubclass(derived, cls);
 }
 
+
+int
+PyObject_IsSubclass(PyObject *derived, PyObject *cls)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return object_issubclass(tstate, derived, cls);
+}
+
+
 int
 _PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
 {
-    return recursive_isinstance(inst, cls);
+    return object_isinstance(inst, cls);
 }
 
 int
@@ -2569,7 +2649,7 @@
 PyObject *
 PyObject_GetIter(PyObject *o)
 {
-    PyTypeObject *t = o->ob_type;
+    PyTypeObject *t = Py_TYPE(o);
     getiterfunc f;
 
     f = t->tp_iter;
@@ -2584,7 +2664,7 @@
             PyErr_Format(PyExc_TypeError,
                          "iter() returned non-iterator "
                          "of type '%.100s'",
-                         res->ob_type->tp_name);
+                         Py_TYPE(res)->tp_name);
             Py_DECREF(res);
             res = NULL;
         }
@@ -2596,8 +2676,8 @@
 
 int PyIter_Check(PyObject *obj)
 {
-    return obj->ob_type->tp_iternext != NULL &&
-           obj->ob_type->tp_iternext != &_PyObject_NextNotImplemented;
+    return Py_TYPE(obj)->tp_iternext != NULL &&
+           Py_TYPE(obj)->tp_iternext != &_PyObject_NextNotImplemented;
 }
 
 /* Return next item.
@@ -2611,7 +2691,7 @@
 PyIter_Next(PyObject *iter)
 {
     PyObject *result;
-    result = (*iter->ob_type->tp_iternext)(iter);
+    result = (*Py_TYPE(iter)->tp_iternext)(iter);
     if (result == NULL &&
         PyErr_Occurred() &&
         PyErr_ExceptionMatches(PyExc_StopIteration))
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index d4d0233..97d7796 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -2,11 +2,9 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
+#include "pycore_abstract.h"      // _PyIndex_Check()
+#include "pycore_bytes_methods.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
-#include "bytes_methods.h"
 #include "bytesobject.h"
 #include "pystrhex.h"
 
@@ -89,8 +87,7 @@
 PyObject *
 PyByteArray_FromObject(PyObject *input)
 {
-    return PyObject_CallFunctionObjArgs((PyObject *)&PyByteArray_Type,
-                                        input, NULL);
+    return PyObject_CallOneArg((PyObject *)&PyByteArray_Type, input);
 }
 
 static PyObject *
@@ -149,7 +146,7 @@
             memcpy(new->ob_bytes, bytes, size);
         new->ob_bytes[size] = '\0';  /* Trailing null byte */
     }
-    Py_SIZE(new) = size;
+    Py_SET_SIZE(new, size);
     new->ob_alloc = alloc;
     new->ob_start = new->ob_bytes;
     new->ob_exports = 0;
@@ -207,7 +204,7 @@
         }
         else {
             /* Minor downsize; quick exit */
-            Py_SIZE(self) = size;
+            Py_SET_SIZE(self, size);
             PyByteArray_AS_STRING(self)[size] = '\0'; /* Trailing null */
             return 0;
         }
@@ -247,7 +244,7 @@
     }
 
     obj->ob_bytes = obj->ob_start = sval;
-    Py_SIZE(self) = size;
+    Py_SET_SIZE(self, size);
     obj->ob_alloc = alloc;
     obj->ob_bytes[size] = '\0'; /* Trailing null byte */
 
@@ -384,8 +381,6 @@
 static PyObject *
 bytearray_getitem(PyByteArrayObject *self, Py_ssize_t i)
 {
-    if (i < 0)
-        i += Py_SIZE(self);
     if (i < 0 || i >= Py_SIZE(self)) {
         PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
         return NULL;
@@ -396,7 +391,7 @@
 static PyObject *
 bytearray_subscript(PyByteArrayObject *self, PyObject *index)
 {
-    if (PyIndex_Check(index)) {
+    if (_PyIndex_Check(index)) {
         Py_ssize_t i = PyNumber_AsSsize_t(index, PyExc_IndexError);
 
         if (i == -1 && PyErr_Occurred())
@@ -503,7 +498,7 @@
             }
             /* memmove() removed bytes, the bytearray object cannot be
                restored in its previous state. */
-            Py_SIZE(self) += growth;
+            Py_SET_SIZE(self, Py_SIZE(self) + growth);
             res = -1;
         }
         buf = PyByteArray_AS_STRING(self);
@@ -615,7 +610,7 @@
     char *buf, *bytes;
     buf = PyByteArray_AS_STRING(self);
 
-    if (PyIndex_Check(index)) {
+    if (_PyIndex_Check(index)) {
         Py_ssize_t i = PyNumber_AsSsize_t(index, PyExc_IndexError);
 
         if (i == -1 && PyErr_Occurred())
@@ -814,7 +809,7 @@
     }
 
     /* Is it an int? */
-    if (PyIndex_Check(arg)) {
+    if (_PyIndex_Check(arg)) {
         count = PyNumber_AsSsize_t(arg, PyExc_OverflowError);
         if (count == -1 && PyErr_Occurred()) {
             if (!PyErr_ExceptionMatches(PyExc_TypeError))
@@ -861,7 +856,7 @@
         if (PyErr_ExceptionMatches(PyExc_TypeError)) {
             PyErr_Format(PyExc_TypeError,
                          "cannot convert '%.200s' object to bytearray",
-                         arg->ob_type->tp_name);
+                         Py_TYPE(arg)->tp_name);
         }
         return -1;
     }
@@ -891,7 +886,7 @@
 
         /* Append the byte */
         if (Py_SIZE(self) + 1 < self->ob_alloc) {
-            Py_SIZE(self)++;
+            Py_SET_SIZE(self, Py_SIZE(self) + 1);
             PyByteArray_AS_STRING(self)[Py_SIZE(self)] = '\0';
         }
         else if (PyByteArray_Resize((PyObject *)self, Py_SIZE(self)+1) < 0)
@@ -1001,8 +996,7 @@
 static PyObject *
 bytearray_str(PyObject *op)
 {
-    PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
-    if (config->bytes_warning) {
+    if (_Py_GetConfig()->bytes_warning) {
         if (PyErr_WarnEx(PyExc_BytesWarning,
                          "str() on a bytearray instance", 1)) {
                 return NULL;
@@ -1027,8 +1021,7 @@
     if (rc < 0)
         return NULL;
     if (rc) {
-        PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
-        if (config->bytes_warning && (op == Py_EQ || op == Py_NE)) {
+        if (_Py_GetConfig()->bytes_warning && (op == Py_EQ || op == Py_NE)) {
             if (PyErr_WarnEx(PyExc_BytesWarning,
                             "Comparison between bytearray and string", 1))
                 return NULL;
@@ -1190,6 +1183,71 @@
     return _Py_bytes_endswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args);
 }
 
+/*[clinic input]
+bytearray.removeprefix as bytearray_removeprefix
+
+    prefix: Py_buffer
+    /
+
+Return a bytearray with the given prefix string removed if present.
+
+If the bytearray starts with the prefix string, return
+bytearray[len(prefix):].  Otherwise, return a copy of the original
+bytearray.
+[clinic start generated code]*/
+
+static PyObject *
+bytearray_removeprefix_impl(PyByteArrayObject *self, Py_buffer *prefix)
+/*[clinic end generated code: output=6cabc585e7f502e0 input=968aada38aedd262]*/
+{
+    const char *self_start = PyByteArray_AS_STRING(self);
+    Py_ssize_t self_len = PyByteArray_GET_SIZE(self);
+    const char *prefix_start = prefix->buf;
+    Py_ssize_t prefix_len = prefix->len;
+
+    if (self_len >= prefix_len
+        && memcmp(self_start, prefix_start, prefix_len) == 0)
+    {
+        return PyByteArray_FromStringAndSize(self_start + prefix_len,
+                                             self_len - prefix_len);
+    }
+
+    return PyByteArray_FromStringAndSize(self_start, self_len);
+}
+
+/*[clinic input]
+bytearray.removesuffix as bytearray_removesuffix
+
+    suffix: Py_buffer
+    /
+
+Return a bytearray with the given suffix string removed if present.
+
+If the bytearray ends with the suffix string and that suffix is not
+empty, return bytearray[:-len(suffix)].  Otherwise, return a copy of
+the original bytearray.
+[clinic start generated code]*/
+
+static PyObject *
+bytearray_removesuffix_impl(PyByteArrayObject *self, Py_buffer *suffix)
+/*[clinic end generated code: output=2bc8cfb79de793d3 input=c1827e810b2f6b99]*/
+{
+    const char *self_start = PyByteArray_AS_STRING(self);
+    Py_ssize_t self_len = PyByteArray_GET_SIZE(self);
+    const char *suffix_start = suffix->buf;
+    Py_ssize_t suffix_len = suffix->len;
+
+    if (self_len >= suffix_len
+        && memcmp(self_start + self_len - suffix_len,
+                  suffix_start, suffix_len) == 0)
+    {
+        return PyByteArray_FromStringAndSize(self_start,
+                                             self_len - suffix_len);
+    }
+
+    return PyByteArray_FromStringAndSize(self_start, self_len);
+}
+
 
 /*[clinic input]
 bytearray.translate
@@ -1635,7 +1693,7 @@
         if (PyErr_ExceptionMatches(PyExc_TypeError)) {
             PyErr_Format(PyExc_TypeError,
                          "can't extend bytearray with %.100s",
-                         iterable_of_ints->ob_type->tp_name);
+                         Py_TYPE(iterable_of_ints)->tp_name);
         }
         return NULL;
     }
@@ -2020,8 +2078,7 @@
 {
     PyObject *result = _PyBytes_FromHex(string, type == &PyByteArray_Type);
     if (type != &PyByteArray_Type && result != NULL) {
-        Py_SETREF(result, PyObject_CallFunctionObjArgs((PyObject *)type,
-                                                       result, NULL));
+        Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
     }
     return result;
 }
@@ -2213,6 +2270,8 @@
     BYTEARRAY_POP_METHODDEF
     BYTEARRAY_REMOVE_METHODDEF
     BYTEARRAY_REPLACE_METHODDEF
+    BYTEARRAY_REMOVEPREFIX_METHODDEF
+    BYTEARRAY_REMOVESUFFIX_METHODDEF
     BYTEARRAY_REVERSE_METHODDEF
     {"rfind", (PyCFunction)bytearray_rfind, METH_VARARGS, _Py_rfind__doc__},
     {"rindex", (PyCFunction)bytearray_rindex, METH_VARARGS, _Py_rindex__doc__},
diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c
index db030be..72daa1f 100644
--- a/Objects/bytes_methods.c
+++ b/Objects/bytes_methods.c
@@ -1,6 +1,7 @@
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "bytes_methods.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
+#include "pycore_bytes_methods.h"
 
 PyDoc_STRVAR_shared(_Py_isspace__doc__,
 "B.isspace() -> bool\n\
@@ -466,7 +467,7 @@
         return 1;
     }
 
-    if (!PyIndex_Check(tmp_subobj)) {
+    if (!_PyIndex_Check(tmp_subobj)) {
         PyErr_Format(PyExc_TypeError,
                      "argument should be integer or bytes-like object, "
                      "not '%.200s'",
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index feeabcb..25d9814 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3,11 +3,11 @@
 #define PY_SSIZE_T_CLEAN
 
 #include "Python.h"
+#include "pycore_abstract.h"      // _PyIndex_Check()
+#include "pycore_bytes_methods.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h"         // PYMEM_CLEANBYTE
 
-#include "bytes_methods.h"
 #include "pystrhex.h"
 #include <stddef.h>
 
@@ -18,13 +18,11 @@
 
 #include "clinic/bytesobject.c.h"
 
-#ifdef COUNT_ALLOCS
-Py_ssize_t _Py_null_strings, _Py_one_strings;
-#endif
-
 static PyBytesObject *characters[UCHAR_MAX + 1];
 static PyBytesObject *nullstring;
 
+_Py_IDENTIFIER(__bytes__);
+
 /* PyBytesObject_SIZE gives the basic size of a string; any memory allocation
    for a string of length n should request PyBytesObject_SIZE + n bytes.
 
@@ -66,9 +64,6 @@
     assert(size >= 0);
 
     if (size == 0 && (op = nullstring) != NULL) {
-#ifdef COUNT_ALLOCS
-        _Py_null_strings++;
-#endif
         Py_INCREF(op);
         return (PyObject *)op;
     }
@@ -110,9 +105,6 @@
     if (size == 1 && str != NULL &&
         (op = characters[*str & UCHAR_MAX]) != NULL)
     {
-#ifdef COUNT_ALLOCS
-        _Py_one_strings++;
-#endif
         Py_INCREF(op);
         return (PyObject *)op;
     }
@@ -146,16 +138,10 @@
         return NULL;
     }
     if (size == 0 && (op = nullstring) != NULL) {
-#ifdef COUNT_ALLOCS
-        _Py_null_strings++;
-#endif
         Py_INCREF(op);
         return (PyObject *)op;
     }
     if (size == 1 && (op = characters[*str & UCHAR_MAX]) != NULL) {
-#ifdef COUNT_ALLOCS
-        _Py_one_strings++;
-#endif
         Py_INCREF(op);
         return (PyObject *)op;
     }
@@ -543,7 +529,6 @@
 format_obj(PyObject *v, const char **pbuf, Py_ssize_t *plen)
 {
     PyObject *func, *result;
-    _Py_IDENTIFIER(__bytes__);
     /* is it a bytes object? */
     if (PyBytes_Check(v)) {
         *pbuf = PyBytes_AS_STRING(v);
@@ -1074,52 +1059,10 @@
     return NULL;
 }
 
-/* Unescape a backslash-escaped string. If unicode is non-zero,
-   the string is a u-literal. If recode_encoding is non-zero,
-   the string is UTF-8 encoded and should be re-encoded in the
-   specified encoding.  */
-
-static char *
-_PyBytes_DecodeEscapeRecode(const char **s, const char *end,
-                            const char *errors, const char *recode_encoding,
-                            _PyBytesWriter *writer, char *p)
-{
-    PyObject *u, *w;
-    const char* t;
-
-    t = *s;
-    /* Decode non-ASCII bytes as UTF-8. */
-    while (t < end && (*t & 0x80))
-        t++;
-    u = PyUnicode_DecodeUTF8(*s, t - *s, errors);
-    if (u == NULL)
-        return NULL;
-
-    /* Recode them in target encoding. */
-    w = PyUnicode_AsEncodedString(u, recode_encoding, errors);
-    Py_DECREF(u);
-    if  (w == NULL)
-        return NULL;
-    assert(PyBytes_Check(w));
-
-    /* Append bytes to output buffer. */
-    writer->min_size--;   /* subtract 1 preallocated byte */
-    p = _PyBytesWriter_WriteBytes(writer, p,
-                                  PyBytes_AS_STRING(w),
-                                  PyBytes_GET_SIZE(w));
-    Py_DECREF(w);
-    if (p == NULL)
-        return NULL;
-
-    *s = t;
-    return p;
-}
-
+/* Unescape a backslash-escaped string. */
 PyObject *_PyBytes_DecodeEscape(const char *s,
                                 Py_ssize_t len,
                                 const char *errors,
-                                Py_ssize_t unicode,
-                                const char *recode_encoding,
                                 const char **first_invalid_escape)
 {
     int c;
@@ -1139,18 +1082,7 @@
     end = s + len;
     while (s < end) {
         if (*s != '\\') {
-          non_esc:
-            if (!(recode_encoding && (*s & 0x80))) {
-                *p++ = *s++;
-            }
-            else {
-                /* non-ASCII character and need to recode */
-                p = _PyBytes_DecodeEscapeRecode(&s, end,
-                                                errors, recode_encoding,
-                                                &writer, p);
-                if (p == NULL)
-                    goto failed;
-            }
+            *p++ = *s++;
             continue;
         }
 
@@ -1226,8 +1158,6 @@
             }
             *p++ = '\\';
             s--;
-            goto non_esc; /* an arbitrary number of unescaped
-                             UTF-8 bytes may follow. */
         }
     }
 
@@ -1241,12 +1171,11 @@
 PyObject *PyBytes_DecodeEscape(const char *s,
                                 Py_ssize_t len,
                                 const char *errors,
-                                Py_ssize_t unicode,
-                                const char *recode_encoding)
+                                Py_ssize_t Py_UNUSED(unicode),
+                                const char *Py_UNUSED(recode_encoding))
 {
     const char* first_invalid_escape;
-    PyObject *result = _PyBytes_DecodeEscape(s, len, errors, unicode,
-                                             recode_encoding,
+    PyObject *result = _PyBytes_DecodeEscape(s, len, errors,
                                              &first_invalid_escape);
     if (result == NULL)
         return NULL;
@@ -1335,12 +1264,14 @@
     Py_ssize_t i, length = Py_SIZE(op);
     Py_ssize_t newsize, squotes, dquotes;
     PyObject *v;
-    unsigned char quote, *s, *p;
+    unsigned char quote;
+    const unsigned char *s;
+    Py_UCS1 *p;
 
     /* Compute size of output string */
     squotes = dquotes = 0;
     newsize = 3; /* b'' */
-    s = (unsigned char*)op->ob_sval;
+    s = (const unsigned char*)op->ob_sval;
     for (i = 0; i < length; i++) {
         Py_ssize_t incr = 1;
         switch(s[i]) {
@@ -1410,8 +1341,7 @@
 static PyObject *
 bytes_str(PyObject *op)
 {
-    PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
-    if (config->bytes_warning) {
+    if (_Py_GetConfig()->bytes_warning) {
         if (PyErr_WarnEx(PyExc_BytesWarning,
                          "str() on a bytes instance", 1)) {
             return NULL;
@@ -1568,8 +1498,7 @@
 
     /* Make sure both arguments are strings. */
     if (!(PyBytes_Check(a) && PyBytes_Check(b))) {
-        PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
-        if (config->bytes_warning && (op == Py_EQ || op == Py_NE)) {
+        if (_Py_GetConfig()->bytes_warning && (op == Py_EQ || op == Py_NE)) {
             rc = PyObject_IsInstance((PyObject*)a,
                                      (PyObject*)&PyUnicode_Type);
             if (!rc)
@@ -1650,7 +1579,7 @@
 static PyObject*
 bytes_subscript(PyBytesObject* self, PyObject* item)
 {
-    if (PyIndex_Check(item)) {
+    if (_PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return NULL;
@@ -1666,7 +1595,7 @@
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelength, i;
         size_t cur;
-        char* source_buf;
+        const char* source_buf;
         char* result_buf;
         PyObject* result;
 
@@ -1931,7 +1860,7 @@
 do_xstrip(PyBytesObject *self, int striptype, PyObject *sepobj)
 {
     Py_buffer vsep;
-    char *s = PyBytes_AS_STRING(self);
+    const char *s = PyBytes_AS_STRING(self);
     Py_ssize_t len = PyBytes_GET_SIZE(self);
     char *sep;
     Py_ssize_t seplen;
@@ -1971,7 +1900,7 @@
 Py_LOCAL_INLINE(PyObject *)
 do_strip(PyBytesObject *self, int striptype)
 {
-    char *s = PyBytes_AS_STRING(self);
+    const char *s = PyBytes_AS_STRING(self);
     Py_ssize_t len = PyBytes_GET_SIZE(self), i, j;
 
     i = 0;
@@ -2088,7 +2017,8 @@
                      PyObject *deletechars)
 /*[clinic end generated code: output=43be3437f1956211 input=0ecdf159f654233c]*/
 {
-    char *input, *output;
+    const char *input;
+    char *output;
     Py_buffer table_view = {NULL, NULL};
     Py_buffer del_table_view = {NULL, NULL};
     const char *table_chars;
@@ -2252,6 +2182,81 @@
 
 /** End DALKE **/
 
+/*[clinic input]
+bytes.removeprefix as bytes_removeprefix
+
+    prefix: Py_buffer
+    /
+
+Return a bytes object with the given prefix string removed if present.
+
+If the bytes starts with the prefix string, return bytes[len(prefix):].
+Otherwise, return a copy of the original bytes.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_removeprefix_impl(PyBytesObject *self, Py_buffer *prefix)
+/*[clinic end generated code: output=f006865331a06ab6 input=0c93bac817a8502c]*/
+{
+    const char *self_start = PyBytes_AS_STRING(self);
+    Py_ssize_t self_len = PyBytes_GET_SIZE(self);
+    const char *prefix_start = prefix->buf;
+    Py_ssize_t prefix_len = prefix->len;
+
+    if (self_len >= prefix_len
+        && prefix_len > 0
+        && memcmp(self_start, prefix_start, prefix_len) == 0)
+    {
+        return PyBytes_FromStringAndSize(self_start + prefix_len,
+                                         self_len - prefix_len);
+    }
+
+    if (PyBytes_CheckExact(self)) {
+        Py_INCREF(self);
+        return (PyObject *)self;
+    }
+
+    return PyBytes_FromStringAndSize(self_start, self_len);
+}
+
+/*[clinic input]
+bytes.removesuffix as bytes_removesuffix
+
+    suffix: Py_buffer
+    /
+
+Return a bytes object with the given suffix string removed if present.
+
+If the bytes ends with the suffix string and that suffix is not empty,
+return bytes[:-len(prefix)].  Otherwise, return a copy of the original
+bytes.
+[clinic start generated code]*/
+
+static PyObject *
+bytes_removesuffix_impl(PyBytesObject *self, Py_buffer *suffix)
+/*[clinic end generated code: output=d887d308e3242eeb input=9f4e1da8c637bbf1]*/
+{
+    const char *self_start = PyBytes_AS_STRING(self);
+    Py_ssize_t self_len = PyBytes_GET_SIZE(self);
+    const char *suffix_start = suffix->buf;
+    Py_ssize_t suffix_len = suffix->len;
+
+    if (self_len >= suffix_len
+        && suffix_len > 0
+        && memcmp(self_start + self_len - suffix_len,
+                  suffix_start, suffix_len) == 0)
+    {
+        return PyBytes_FromStringAndSize(self_start,
+                                         self_len - suffix_len);
+    }
+
+    if (PyBytes_CheckExact(self)) {
+        Py_INCREF(self);
+        return (PyObject *)self;
+    }
+
+    return PyBytes_FromStringAndSize(self_start, self_len);
+}
 
 static PyObject *
 bytes_startswith(PyBytesObject *self, PyObject *args)
@@ -2330,8 +2335,7 @@
 {
     PyObject *result = _PyBytes_FromHex(string, 0);
     if (type != &PyBytes_Type && result != NULL) {
-        Py_SETREF(result, PyObject_CallFunctionObjArgs((PyObject *)type,
-                                                       result, NULL));
+        Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
     }
     return result;
 }
@@ -2342,7 +2346,7 @@
     char *buf;
     Py_ssize_t hexlen, invalid_char;
     unsigned int top, bot;
-    Py_UCS1 *str, *end;
+    const Py_UCS1 *str, *end;
     _PyBytesWriter writer;
 
     _PyBytesWriter_Init(&writer);
@@ -2354,7 +2358,7 @@
     hexlen = PyUnicode_GET_LENGTH(string);
 
     if (!PyUnicode_IS_ASCII(string)) {
-        void *data = PyUnicode_DATA(string);
+        const void *data = PyUnicode_DATA(string);
         unsigned int kind = PyUnicode_KIND(string);
         Py_ssize_t i;
 
@@ -2440,7 +2444,7 @@
 bytes_hex_impl(PyBytesObject *self, PyObject *sep, int bytes_per_sep)
 /*[clinic end generated code: output=1f134da504064139 input=f1238d3455990218]*/
 {
-    char* argbuf = PyBytes_AS_STRING(self);
+    const char *argbuf = PyBytes_AS_STRING(self);
     Py_ssize_t arglen = PyBytes_GET_SIZE(self);
     return _Py_strhex_with_sep(argbuf, arglen, sep, bytes_per_sep);
 }
@@ -2492,6 +2496,8 @@
     BYTES_MAKETRANS_METHODDEF
     BYTES_PARTITION_METHODDEF
     BYTES_REPLACE_METHODDEF
+    BYTES_REMOVEPREFIX_METHODDEF
+    BYTES_REMOVESUFFIX_METHODDEF
     {"rfind", (PyCFunction)bytes_rfind, METH_VARARGS, _Py_rfind__doc__},
     {"rindex", (PyCFunction)bytes_rindex, METH_VARARGS, _Py_rindex__doc__},
     STRINGLIB_RJUST_METHODDEF
@@ -2542,7 +2548,6 @@
     PyObject *func;
     Py_ssize_t size;
     static char *kwlist[] = {"source", "encoding", "errors", 0};
-    _Py_IDENTIFIER(__bytes__);
 
     if (type != &PyBytes_Type)
         return bytes_subtype_new(type, args, kwds);
@@ -2609,7 +2614,7 @@
         return NULL;
     }
     /* Is it an integer? */
-    if (PyIndex_Check(x)) {
+    if (_PyIndex_Check(x)) {
         size = PyNumber_AsSsize_t(x, PyExc_OverflowError);
         if (size == -1 && PyErr_Occurred()) {
             if (!PyErr_ExceptionMatches(PyExc_TypeError))
@@ -2835,7 +2840,7 @@
 
     PyErr_Format(PyExc_TypeError,
                  "cannot convert '%.200s' object to bytes",
-                 x->ob_type->tp_name);
+                 Py_TYPE(x)->tp_name);
     return NULL;
 }
 
@@ -3021,8 +3026,12 @@
         return (*pv == NULL) ? -1 : 0;
     }
     /* XXX UNREF/NEWREF interface should be more symmetrical */
-    _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
+#endif
+#ifdef Py_TRACE_REFS
     _Py_ForgetReference(v);
+#endif
     *pv = (PyObject *)
         PyObject_REALLOC(v, PyBytesObject_SIZE + newsize);
     if (*pv == NULL) {
@@ -3032,7 +3041,7 @@
     }
     _Py_NewReference(*pv);
     sv = (PyBytesObject *) *pv;
-    Py_SIZE(sv) = newsize;
+    Py_SET_SIZE(sv, newsize);
     sv->ob_sval[newsize] = '\0';
     sv->ob_shash = -1;          /* invalidate cached hash value */
     return 0;
@@ -3044,7 +3053,7 @@
 }
 
 void
-PyBytes_Fini(void)
+_PyBytes_Fini(void)
 {
     int i;
     for (i = 0; i < UCHAR_MAX + 1; i++)
@@ -3254,7 +3263,7 @@
 Py_LOCAL_INLINE(Py_ssize_t)
 _PyBytesWriter_GetSize(_PyBytesWriter *writer, char *str)
 {
-    char *start = _PyBytesWriter_AsString(writer);
+    const char *start = _PyBytesWriter_AsString(writer);
     assert(str != NULL);
     assert(str >= start);
     assert(str - start <= writer->allocated);
@@ -3265,7 +3274,7 @@
 Py_LOCAL_INLINE(int)
 _PyBytesWriter_CheckConsistency(_PyBytesWriter *writer, char *str)
 {
-    char *start, *end;
+    const char *start, *end;
 
     if (writer->use_small_buffer) {
         assert(writer->buffer == NULL);
diff --git a/Objects/call.c b/Objects/call.c
index c663898..61426c7 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -1,64 +1,75 @@
 #include "Python.h"
+#include "pycore_call.h"
+#include "pycore_ceval.h"        // _PyEval_EvalFrame()
 #include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"      // _PyThreadState_GET()
 #include "pycore_tupleobject.h"
 #include "frameobject.h"
 
 
-static PyObject *
-cfunction_call_varargs(PyObject *func, PyObject *args, PyObject *kwargs);
+static PyObject *const *
+_PyStack_UnpackDict(PyThreadState *tstate,
+                    PyObject *const *args, Py_ssize_t nargs,
+                    PyObject *kwargs, PyObject **p_kwnames);
+
+static void
+_PyStack_UnpackDict_Free(PyObject *const *stack, Py_ssize_t nargs,
+                         PyObject *kwnames);
 
 
 static PyObject *
-null_error(void)
+null_error(PyThreadState *tstate)
 {
-    if (!PyErr_Occurred())
-        PyErr_SetString(PyExc_SystemError,
-                        "null argument to internal routine");
+    if (!_PyErr_Occurred(tstate)) {
+        _PyErr_SetString(tstate, PyExc_SystemError,
+                         "null argument to internal routine");
+    }
     return NULL;
 }
 
 
 PyObject*
-_Py_CheckFunctionResult(PyObject *callable, PyObject *result, const char *where)
+_Py_CheckFunctionResult(PyThreadState *tstate, PyObject *callable,
+                        PyObject *result, const char *where)
 {
-    int err_occurred = (PyErr_Occurred() != NULL);
-
     assert((callable != NULL) ^ (where != NULL));
 
     if (result == NULL) {
-        if (!err_occurred) {
+        if (!_PyErr_Occurred(tstate)) {
             if (callable)
-                PyErr_Format(PyExc_SystemError,
-                             "%R returned NULL without setting an error",
-                             callable);
+                _PyErr_Format(tstate, PyExc_SystemError,
+                              "%R returned NULL without setting an error",
+                              callable);
             else
-                PyErr_Format(PyExc_SystemError,
-                             "%s returned NULL without setting an error",
-                             where);
+                _PyErr_Format(tstate, PyExc_SystemError,
+                              "%s returned NULL without setting an error",
+                              where);
 #ifdef Py_DEBUG
-            /* Ensure that the bug is caught in debug mode */
+            /* Ensure that the bug is caught in debug mode.
+               Py_FatalError() logs the SystemError exception raised above. */
             Py_FatalError("a function returned NULL without setting an error");
 #endif
             return NULL;
         }
     }
     else {
-        if (err_occurred) {
+        if (_PyErr_Occurred(tstate)) {
             Py_DECREF(result);
 
             if (callable) {
-                _PyErr_FormatFromCause(PyExc_SystemError,
-                        "%R returned a result with an error set",
-                        callable);
+                _PyErr_FormatFromCauseTstate(
+                    tstate, PyExc_SystemError,
+                    "%R returned a result with an error set", callable);
             }
             else {
-                _PyErr_FormatFromCause(PyExc_SystemError,
-                        "%s returned a result with an error set",
-                        where);
+                _PyErr_FormatFromCauseTstate(
+                    tstate, PyExc_SystemError,
+                    "%s returned a result with an error set", where);
             }
 #ifdef Py_DEBUG
-            /* Ensure that the bug is caught in debug mode */
+            /* Ensure that the bug is caught in debug mode.
+               Py_FatalError() logs the SystemError exception raised above. */
             Py_FatalError("a function returned a result with an error set");
 #endif
             return NULL;
@@ -70,66 +81,87 @@
 
 /* --- Core PyObject call functions ------------------------------- */
 
+/* Call a callable Python object without any arguments */
 PyObject *
-_PyObject_FastCallDict(PyObject *callable, PyObject *const *args,
-                       size_t nargsf, PyObject *kwargs)
+PyObject_CallNoArgs(PyObject *func)
 {
-    /* _PyObject_FastCallDict() must not be called with an exception set,
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyObject_CallNoArgTstate(tstate, func);
+}
+
+
+PyObject *
+_PyObject_FastCallDictTstate(PyThreadState *tstate, PyObject *callable,
+                             PyObject *const *args, size_t nargsf,
+                             PyObject *kwargs)
+{
+    assert(callable != NULL);
+
+    /* PyObject_VectorcallDict() must not be called with an exception set,
        because it can clear it (directly or indirectly) and so the
        caller loses its exception */
-    assert(!PyErr_Occurred());
-    assert(callable != NULL);
+    assert(!_PyErr_Occurred(tstate));
 
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     assert(nargs >= 0);
     assert(nargs == 0 || args != NULL);
     assert(kwargs == NULL || PyDict_Check(kwargs));
 
-    vectorcallfunc func = _PyVectorcall_Function(callable);
+    vectorcallfunc func = PyVectorcall_Function(callable);
     if (func == NULL) {
         /* Use tp_call instead */
-        return _PyObject_MakeTpCall(callable, args, nargs, kwargs);
+        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwargs);
     }
 
     PyObject *res;
-    if (kwargs == NULL) {
+    if (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) {
         res = func(callable, args, nargsf, NULL);
     }
     else {
         PyObject *kwnames;
         PyObject *const *newargs;
-        if (_PyStack_UnpackDict(args, nargs, kwargs, &newargs, &kwnames) < 0) {
+        newargs = _PyStack_UnpackDict(tstate,
+                                      args, nargs,
+                                      kwargs, &kwnames);
+        if (newargs == NULL) {
             return NULL;
         }
-        res = func(callable, newargs, nargs, kwnames);
-        if (kwnames != NULL) {
-            Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames) + nargs;
-            for (i = 0; i < n; i++) {
-                Py_DECREF(newargs[i]);
-            }
-            PyMem_Free((PyObject **)newargs);
-            Py_DECREF(kwnames);
-        }
+        res = func(callable, newargs,
+                   nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+        _PyStack_UnpackDict_Free(newargs, nargs, kwnames);
     }
-    return _Py_CheckFunctionResult(callable, res, NULL);
+    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
 }
 
 
 PyObject *
-_PyObject_MakeTpCall(PyObject *callable, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
+PyObject_VectorcallDict(PyObject *callable, PyObject *const *args,
+                       size_t nargsf, PyObject *kwargs)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyObject_FastCallDictTstate(tstate, callable, args, nargsf, kwargs);
+}
+
+
+PyObject *
+_PyObject_MakeTpCall(PyThreadState *tstate, PyObject *callable,
+                     PyObject *const *args, Py_ssize_t nargs,
+                     PyObject *keywords)
+{
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    assert(keywords == NULL || PyTuple_Check(keywords) || PyDict_Check(keywords));
+
     /* Slow path: build a temporary tuple for positional arguments and a
      * temporary dictionary for keyword arguments (if any) */
     ternaryfunc call = Py_TYPE(callable)->tp_call;
     if (call == NULL) {
-        PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
-                     Py_TYPE(callable)->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "'%.200s' object is not callable",
+                      Py_TYPE(callable)->tp_name);
         return NULL;
     }
 
-    assert(nargs >= 0);
-    assert(nargs == 0 || args != NULL);
-    assert(keywords == NULL || PyTuple_Check(keywords) || PyDict_Check(keywords));
     PyObject *argstuple = _PyTuple_FromArray(args, nargs);
     if (argstuple == NULL) {
         return NULL;
@@ -154,10 +186,10 @@
     }
 
     PyObject *result = NULL;
-    if (Py_EnterRecursiveCall(" while calling a Python object") == 0)
+    if (_Py_EnterRecursiveCall(tstate, " while calling a Python object") == 0)
     {
         result = call(callable, argstuple, kwdict);
-        Py_LeaveRecursiveCall();
+        _Py_LeaveRecursiveCall(tstate);
     }
 
     Py_DECREF(argstuple);
@@ -165,53 +197,59 @@
         Py_DECREF(kwdict);
     }
 
-    result = _Py_CheckFunctionResult(callable, result, NULL);
-    return result;
+    return _Py_CheckFunctionResult(tstate, callable, result, NULL);
 }
 
 
 PyObject *
 PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *kwargs)
 {
-    /* get vectorcallfunc as in _PyVectorcall_Function, but without
-     * the _Py_TPFLAGS_HAVE_VECTORCALL check */
+    PyThreadState *tstate = _PyThreadState_GET();
+
+    /* get vectorcallfunc as in PyVectorcall_Function, but without
+     * the Py_TPFLAGS_HAVE_VECTORCALL check */
     Py_ssize_t offset = Py_TYPE(callable)->tp_vectorcall_offset;
     if (offset <= 0) {
-        PyErr_Format(PyExc_TypeError, "'%.200s' object does not support vectorcall",
-                     Py_TYPE(callable)->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "'%.200s' object does not support vectorcall",
+                      Py_TYPE(callable)->tp_name);
         return NULL;
     }
     vectorcallfunc func = *(vectorcallfunc *)(((char *)callable) + offset);
     if (func == NULL) {
-        PyErr_Format(PyExc_TypeError, "'%.200s' object does not support vectorcall",
-                     Py_TYPE(callable)->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "'%.200s' object does not support vectorcall",
+                      Py_TYPE(callable)->tp_name);
         return NULL;
     }
 
+    Py_ssize_t nargs = PyTuple_GET_SIZE(tuple);
+
+    /* Fast path for no keywords */
+    if (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) {
+        return func(callable, _PyTuple_ITEMS(tuple), nargs, NULL);
+    }
+
     /* Convert arguments & call */
     PyObject *const *args;
-    Py_ssize_t nargs = PyTuple_GET_SIZE(tuple);
     PyObject *kwnames;
-    if (_PyStack_UnpackDict(_PyTuple_ITEMS(tuple), nargs,
-        kwargs, &args, &kwnames) < 0) {
+    args = _PyStack_UnpackDict(tstate,
+                               _PyTuple_ITEMS(tuple), nargs,
+                               kwargs, &kwnames);
+    if (args == NULL) {
         return NULL;
     }
-    PyObject *result = func(callable, args, nargs, kwnames);
-    if (kwnames != NULL) {
-        Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames) + nargs;
-        for (i = 0; i < n; i++) {
-            Py_DECREF(args[i]);
-        }
-        PyMem_Free((PyObject **)args);
-        Py_DECREF(kwnames);
-    }
+    PyObject *result = func(callable, args,
+                            nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+    _PyStack_UnpackDict_Free(args, nargs, kwnames);
 
-    return _Py_CheckFunctionResult(callable, result, NULL);
+    return _Py_CheckFunctionResult(tstate, callable, result, NULL);
 }
 
 
 PyObject *
-PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
+_PyObject_Call(PyThreadState *tstate, PyObject *callable,
+               PyObject *args, PyObject *kwargs)
 {
     ternaryfunc call;
     PyObject *result;
@@ -219,68 +257,76 @@
     /* PyObject_Call() must not be called with an exception set,
        because it can clear it (directly or indirectly) and so the
        caller loses its exception */
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
     assert(PyTuple_Check(args));
     assert(kwargs == NULL || PyDict_Check(kwargs));
 
-    if (_PyVectorcall_Function(callable) != NULL) {
+    if (PyVectorcall_Function(callable) != NULL) {
         return PyVectorcall_Call(callable, args, kwargs);
     }
-    else if (PyCFunction_Check(callable)) {
-        /* This must be a METH_VARARGS function, otherwise we would be
-         * in the previous case */
-        return cfunction_call_varargs(callable, args, kwargs);
-    }
     else {
-        call = callable->ob_type->tp_call;
+        call = Py_TYPE(callable)->tp_call;
         if (call == NULL) {
-            PyErr_Format(PyExc_TypeError, "'%.200s' object is not callable",
-                         callable->ob_type->tp_name);
+            _PyErr_Format(tstate, PyExc_TypeError,
+                          "'%.200s' object is not callable",
+                          Py_TYPE(callable)->tp_name);
             return NULL;
         }
 
-        if (Py_EnterRecursiveCall(" while calling a Python object"))
+        if (_Py_EnterRecursiveCall(tstate, " while calling a Python object")) {
             return NULL;
+        }
 
         result = (*call)(callable, args, kwargs);
 
-        Py_LeaveRecursiveCall();
+        _Py_LeaveRecursiveCall(tstate);
 
-        return _Py_CheckFunctionResult(callable, result, NULL);
+        return _Py_CheckFunctionResult(tstate, callable, result, NULL);
     }
 }
 
+PyObject *
+PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyObject_Call(tstate, callable, args, kwargs);
+}
+
+
+PyObject *
+PyCFunction_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyObject_Call(tstate, callable, args, kwargs);
+}
+
 
 /* --- PyFunction call functions ---------------------------------- */
 
 static PyObject* _Py_HOT_FUNCTION
-function_code_fastcall(PyCodeObject *co, PyObject *const *args, Py_ssize_t nargs,
+function_code_fastcall(PyThreadState *tstate, PyCodeObject *co,
+                       PyObject *const *args, Py_ssize_t nargs,
                        PyObject *globals)
 {
-    PyFrameObject *f;
-    PyThreadState *tstate = _PyThreadState_GET();
-    PyObject **fastlocals;
-    Py_ssize_t i;
-    PyObject *result;
-
+    assert(tstate != NULL);
     assert(globals != NULL);
+
     /* XXX Perhaps we should create a specialized
        _PyFrame_New_NoTrack() that doesn't take locals, but does
        take builtins without sanity checking them.
        */
-    assert(tstate != NULL);
-    f = _PyFrame_New_NoTrack(tstate, co, globals, NULL);
+    PyFrameObject *f = _PyFrame_New_NoTrack(tstate, co, globals, NULL);
     if (f == NULL) {
         return NULL;
     }
 
-    fastlocals = f->f_localsplus;
+    PyObject **fastlocals = f->f_localsplus;
 
-    for (i = 0; i < nargs; i++) {
+    for (Py_ssize_t i = 0; i < nargs; i++) {
         Py_INCREF(*args);
         fastlocals[i] = *args++;
     }
-    result = PyEval_EvalFrameEx(f,0);
+    PyObject *result = _PyEval_EvalFrame(tstate, f, 0);
 
     if (Py_REFCNT(f) > 1) {
         Py_DECREF(f);
@@ -296,482 +342,64 @@
 
 
 PyObject *
-_PyFunction_FastCallDict(PyObject *func, PyObject *const *args, Py_ssize_t nargs,
-                         PyObject *kwargs)
-{
-    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
-    PyObject *globals = PyFunction_GET_GLOBALS(func);
-    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
-    PyObject *kwdefs, *closure, *name, *qualname;
-    PyObject *kwtuple, **k;
-    PyObject **d;
-    Py_ssize_t nd, nk;
-    PyObject *result;
-
-    assert(func != NULL);
-    assert(nargs >= 0);
-    assert(nargs == 0 || args != NULL);
-    assert(kwargs == NULL || PyDict_Check(kwargs));
-
-    if (co->co_kwonlyargcount == 0 &&
-        (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) &&
-        (co->co_flags & ~PyCF_MASK) == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE))
-    {
-        /* Fast paths */
-        if (argdefs == NULL && co->co_argcount == nargs) {
-            return function_code_fastcall(co, args, nargs, globals);
-        }
-        else if (nargs == 0 && argdefs != NULL
-                 && co->co_argcount == PyTuple_GET_SIZE(argdefs)) {
-            /* function called with no arguments, but all parameters have
-               a default value: use default values as arguments .*/
-            args = _PyTuple_ITEMS(argdefs);
-            return function_code_fastcall(co, args, PyTuple_GET_SIZE(argdefs),
-                                          globals);
-        }
-    }
-
-    nk = (kwargs != NULL) ? PyDict_GET_SIZE(kwargs) : 0;
-    if (nk != 0) {
-        Py_ssize_t pos, i;
-
-        /* bpo-29318, bpo-27840: Caller and callee functions must not share
-           the dictionary: kwargs must be copied. */
-        kwtuple = PyTuple_New(2 * nk);
-        if (kwtuple == NULL) {
-            return NULL;
-        }
-
-        k = _PyTuple_ITEMS(kwtuple);
-        pos = i = 0;
-        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
-            /* We must hold strong references because keyword arguments can be
-               indirectly modified while the function is called:
-               see issue #2016 and test_extcall */
-            Py_INCREF(k[i]);
-            Py_INCREF(k[i+1]);
-            i += 2;
-        }
-        assert(i / 2 == nk);
-    }
-    else {
-        kwtuple = NULL;
-        k = NULL;
-    }
-
-    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
-    closure = PyFunction_GET_CLOSURE(func);
-    name = ((PyFunctionObject *)func) -> func_name;
-    qualname = ((PyFunctionObject *)func) -> func_qualname;
-
-    if (argdefs != NULL) {
-        d = _PyTuple_ITEMS(argdefs);
-        nd = PyTuple_GET_SIZE(argdefs);
-    }
-    else {
-        d = NULL;
-        nd = 0;
-    }
-
-    result = _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL,
-                                      args, nargs,
-                                      k, k != NULL ? k + 1 : NULL, nk, 2,
-                                      d, nd, kwdefs,
-                                      closure, name, qualname);
-    Py_XDECREF(kwtuple);
-    return result;
-}
-
-
-PyObject *
 _PyFunction_Vectorcall(PyObject *func, PyObject* const* stack,
                        size_t nargsf, PyObject *kwnames)
 {
+    assert(PyFunction_Check(func));
+    assert(kwnames == NULL || PyTuple_CheckExact(kwnames));
+
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    assert(nargs >= 0);
+    Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
+    assert((nargs == 0 && nkwargs == 0) || stack != NULL);
+    /* kwnames must only contain strings and all keys must be unique */
+
+    PyThreadState *tstate = _PyThreadState_GET();
     PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
     PyObject *globals = PyFunction_GET_GLOBALS(func);
     PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
-    PyObject *kwdefs, *closure, *name, *qualname;
-    PyObject **d;
-    Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
-    Py_ssize_t nd;
-
-    assert(PyFunction_Check(func));
-    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
-    assert(nargs >= 0);
-    assert(kwnames == NULL || PyTuple_CheckExact(kwnames));
-    assert((nargs == 0 && nkwargs == 0) || stack != NULL);
-    /* kwnames must only contains str strings, no subclass, and all keys must
-       be unique */
 
     if (co->co_kwonlyargcount == 0 && nkwargs == 0 &&
         (co->co_flags & ~PyCF_MASK) == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE))
     {
         if (argdefs == NULL && co->co_argcount == nargs) {
-            return function_code_fastcall(co, stack, nargs, globals);
+            return function_code_fastcall(tstate, co, stack, nargs, globals);
         }
         else if (nargs == 0 && argdefs != NULL
                  && co->co_argcount == PyTuple_GET_SIZE(argdefs)) {
             /* function called with no arguments, but all parameters have
                a default value: use default values as arguments .*/
             stack = _PyTuple_ITEMS(argdefs);
-            return function_code_fastcall(co, stack, PyTuple_GET_SIZE(argdefs),
+            return function_code_fastcall(tstate, co,
+                                          stack, PyTuple_GET_SIZE(argdefs),
                                           globals);
         }
     }
 
-    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
-    closure = PyFunction_GET_CLOSURE(func);
-    name = ((PyFunctionObject *)func) -> func_name;
-    qualname = ((PyFunctionObject *)func) -> func_qualname;
+    PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+    PyObject *closure = PyFunction_GET_CLOSURE(func);
+    PyObject *name = ((PyFunctionObject *)func) -> func_name;
+    PyObject *qualname = ((PyFunctionObject *)func) -> func_qualname;
 
+    PyObject **d;
+    Py_ssize_t nd;
     if (argdefs != NULL) {
         d = _PyTuple_ITEMS(argdefs);
         nd = PyTuple_GET_SIZE(argdefs);
+        assert(nd <= INT_MAX);
     }
     else {
         d = NULL;
         nd = 0;
     }
-    return _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL,
-                                    stack, nargs,
-                                    nkwargs ? _PyTuple_ITEMS(kwnames) : NULL,
-                                    stack + nargs,
-                                    nkwargs, 1,
-                                    d, (int)nd, kwdefs,
-                                    closure, name, qualname);
-}
-
-
-/* --- PyCFunction call functions --------------------------------- */
-
-PyObject *
-_PyMethodDef_RawFastCallDict(PyMethodDef *method, PyObject *self,
-                             PyObject *const *args, Py_ssize_t nargs,
-                             PyObject *kwargs)
-{
-    /* _PyMethodDef_RawFastCallDict() must not be called with an exception set,
-       because it can clear it (directly or indirectly) and so the
-       caller loses its exception */
-    assert(!PyErr_Occurred());
-
-    assert(method != NULL);
-    assert(nargs >= 0);
-    assert(nargs == 0 || args != NULL);
-    assert(kwargs == NULL || PyDict_Check(kwargs));
-
-    PyCFunction meth = method->ml_meth;
-    int flags = method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
-    PyObject *result = NULL;
-
-    if (Py_EnterRecursiveCall(" while calling a Python object")) {
-        return NULL;
-    }
-
-    switch (flags)
-    {
-    case METH_NOARGS:
-        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
-            goto no_keyword_error;
-        }
-
-        if (nargs != 0) {
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes no arguments (%zd given)",
-                method->ml_name, nargs);
-            goto exit;
-        }
-
-        result = (*meth) (self, NULL);
-        break;
-
-    case METH_O:
-        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
-            goto no_keyword_error;
-        }
-
-        if (nargs != 1) {
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes exactly one argument (%zd given)",
-                method->ml_name, nargs);
-            goto exit;
-        }
-
-        result = (*meth) (self, args[0]);
-        break;
-
-    case METH_VARARGS:
-        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
-            goto no_keyword_error;
-        }
-        /* fall through */
-
-    case METH_VARARGS | METH_KEYWORDS:
-    {
-        /* Slow-path: create a temporary tuple for positional arguments */
-        PyObject *argstuple = _PyTuple_FromArray(args, nargs);
-        if (argstuple == NULL) {
-            goto exit;
-        }
-
-        if (flags & METH_KEYWORDS) {
-            result = (*(PyCFunctionWithKeywords)(void(*)(void))meth) (self, argstuple, kwargs);
-        }
-        else {
-            result = (*meth) (self, argstuple);
-        }
-        Py_DECREF(argstuple);
-        break;
-    }
-
-    case METH_FASTCALL:
-    {
-        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
-            goto no_keyword_error;
-        }
-
-        result = (*(_PyCFunctionFast)(void(*)(void))meth) (self, args, nargs);
-        break;
-    }
-
-    case METH_FASTCALL | METH_KEYWORDS:
-    {
-        PyObject *const *stack;
-        PyObject *kwnames;
-        _PyCFunctionFastWithKeywords fastmeth = (_PyCFunctionFastWithKeywords)(void(*)(void))meth;
-
-        if (_PyStack_UnpackDict(args, nargs, kwargs, &stack, &kwnames) < 0) {
-            goto exit;
-        }
-
-        result = (*fastmeth) (self, stack, nargs, kwnames);
-        if (kwnames != NULL) {
-            Py_ssize_t i, n = nargs + PyTuple_GET_SIZE(kwnames);
-            for (i = 0; i < n; i++) {
-                Py_DECREF(stack[i]);
-            }
-            PyMem_Free((PyObject **)stack);
-            Py_DECREF(kwnames);
-        }
-        break;
-    }
-
-    default:
-        PyErr_SetString(PyExc_SystemError,
-                        "Bad call flags in _PyMethodDef_RawFastCallDict. "
-                        "METH_OLDARGS is no longer supported!");
-        goto exit;
-    }
-
-    goto exit;
-
-no_keyword_error:
-    PyErr_Format(PyExc_TypeError,
-                 "%.200s() takes no keyword arguments",
-                 method->ml_name);
-
-exit:
-    Py_LeaveRecursiveCall();
-    return result;
-}
-
-
-PyObject *
-_PyCFunction_FastCallDict(PyObject *func,
-                          PyObject *const *args, Py_ssize_t nargs,
-                          PyObject *kwargs)
-{
-    PyObject *result;
-
-    assert(func != NULL);
-    assert(PyCFunction_Check(func));
-
-    result = _PyMethodDef_RawFastCallDict(((PyCFunctionObject*)func)->m_ml,
-                                          PyCFunction_GET_SELF(func),
-                                          args, nargs, kwargs);
-    result = _Py_CheckFunctionResult(func, result, NULL);
-    return result;
-}
-
-
-PyObject *
-_PyMethodDef_RawFastCallKeywords(PyMethodDef *method, PyObject *self,
-                                 PyObject *const *args, Py_ssize_t nargs,
-                                 PyObject *kwnames)
-{
-    /* _PyMethodDef_RawFastCallKeywords() must not be called with an exception set,
-       because it can clear it (directly or indirectly) and so the
-       caller loses its exception */
-    assert(!PyErr_Occurred());
-
-    assert(method != NULL);
-    assert(nargs >= 0);
-    assert(kwnames == NULL || PyTuple_CheckExact(kwnames));
-    /* kwnames must only contains str strings, no subclass, and all keys must
-       be unique */
-
-    PyCFunction meth = method->ml_meth;
-    int flags = method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
-    Py_ssize_t nkwargs = kwnames == NULL ? 0 : PyTuple_GET_SIZE(kwnames);
-    PyObject *result = NULL;
-
-    if (Py_EnterRecursiveCall(" while calling a Python object")) {
-        return NULL;
-    }
-
-    switch (flags)
-    {
-    case METH_NOARGS:
-        if (nkwargs) {
-            goto no_keyword_error;
-        }
-
-        if (nargs != 0) {
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes no arguments (%zd given)",
-                method->ml_name, nargs);
-            goto exit;
-        }
-
-        result = (*meth) (self, NULL);
-        break;
-
-    case METH_O:
-        if (nkwargs) {
-            goto no_keyword_error;
-        }
-
-        if (nargs != 1) {
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes exactly one argument (%zd given)",
-                method->ml_name, nargs);
-            goto exit;
-        }
-
-        result = (*meth) (self, args[0]);
-        break;
-
-    case METH_FASTCALL:
-        if (nkwargs) {
-            goto no_keyword_error;
-        }
-        result = ((_PyCFunctionFast)(void(*)(void))meth) (self, args, nargs);
-        break;
-
-    case METH_FASTCALL | METH_KEYWORDS:
-        /* Fast-path: avoid temporary dict to pass keyword arguments */
-        result = ((_PyCFunctionFastWithKeywords)(void(*)(void))meth) (self, args, nargs, kwnames);
-        break;
-
-    case METH_VARARGS:
-        if (nkwargs) {
-            goto no_keyword_error;
-        }
-        /* fall through */
-
-    case METH_VARARGS | METH_KEYWORDS:
-    {
-        /* Slow-path: create a temporary tuple for positional arguments
-           and a temporary dict for keyword arguments */
-        PyObject *argtuple;
-
-        argtuple = _PyTuple_FromArray(args, nargs);
-        if (argtuple == NULL) {
-            goto exit;
-        }
-
-        if (flags & METH_KEYWORDS) {
-            PyObject *kwdict;
-
-            if (nkwargs > 0) {
-                kwdict = _PyStack_AsDict(args + nargs, kwnames);
-                if (kwdict == NULL) {
-                    Py_DECREF(argtuple);
-                    goto exit;
-                }
-            }
-            else {
-                kwdict = NULL;
-            }
-
-            result = (*(PyCFunctionWithKeywords)(void(*)(void))meth) (self, argtuple, kwdict);
-            Py_XDECREF(kwdict);
-        }
-        else {
-            result = (*meth) (self, argtuple);
-        }
-        Py_DECREF(argtuple);
-        break;
-    }
-
-    default:
-        PyErr_SetString(PyExc_SystemError,
-                        "Bad call flags in _PyMethodDef_RawFastCallKeywords. "
-                        "METH_OLDARGS is no longer supported!");
-        goto exit;
-    }
-
-    goto exit;
-
-no_keyword_error:
-    PyErr_Format(PyExc_TypeError,
-                 "%.200s() takes no keyword arguments",
-                 method->ml_name);
-
-exit:
-    Py_LeaveRecursiveCall();
-    return result;
-}
-
-
-static PyObject *
-cfunction_call_varargs(PyObject *func, PyObject *args, PyObject *kwargs)
-{
-    assert(!PyErr_Occurred());
-    assert(kwargs == NULL || PyDict_Check(kwargs));
-
-    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
-    PyObject *self = PyCFunction_GET_SELF(func);
-    PyObject *result;
-
-    assert(PyCFunction_GET_FLAGS(func) & METH_VARARGS);
-    if (PyCFunction_GET_FLAGS(func) & METH_KEYWORDS) {
-        if (Py_EnterRecursiveCall(" while calling a Python object")) {
-            return NULL;
-        }
-
-        result = (*(PyCFunctionWithKeywords)(void(*)(void))meth)(self, args, kwargs);
-
-        Py_LeaveRecursiveCall();
-    }
-    else {
-        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
-            PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
-                         ((PyCFunctionObject*)func)->m_ml->ml_name);
-            return NULL;
-        }
-
-        if (Py_EnterRecursiveCall(" while calling a Python object")) {
-            return NULL;
-        }
-
-        result = (*meth)(self, args);
-
-        Py_LeaveRecursiveCall();
-    }
-
-    return _Py_CheckFunctionResult(func, result, NULL);
-}
-
-
-PyObject *
-PyCFunction_Call(PyObject *func, PyObject *args, PyObject *kwargs)
-{
-    /* For METH_VARARGS, we cannot use vectorcall as the vectorcall pointer
-     * is NULL. This is intentional, since vectorcall would be slower. */
-    if (PyCFunction_GET_FLAGS(func) & METH_VARARGS) {
-        return cfunction_call_varargs(func, args, kwargs);
-    }
-    return PyVectorcall_Call(func, args, kwargs);
+    return _PyEval_EvalCode(tstate,
+                (PyObject*)co, globals, (PyObject *)NULL,
+                stack, nargs,
+                nkwargs ? _PyTuple_ITEMS(kwnames) : NULL,
+                stack + nargs,
+                nkwargs, 1,
+                d, (int)nd, kwdefs,
+                closure, name, qualname);
 }
 
 
@@ -783,30 +411,31 @@
 PyEval_CallObjectWithKeywords(PyObject *callable,
                               PyObject *args, PyObject *kwargs)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
 #ifdef Py_DEBUG
     /* PyEval_CallObjectWithKeywords() must not be called with an exception
        set. It raises a new exception if parameters are invalid or if
        PyTuple_New() fails, and so the original exception is lost. */
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 #endif
 
     if (args != NULL && !PyTuple_Check(args)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "argument list must be a tuple");
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "argument list must be a tuple");
         return NULL;
     }
 
     if (kwargs != NULL && !PyDict_Check(kwargs)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "keyword list must be a dictionary");
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "keyword list must be a dictionary");
         return NULL;
     }
 
     if (args == NULL) {
-        return _PyObject_FastCallDict(callable, NULL, 0, kwargs);
+        return _PyObject_FastCallDictTstate(tstate, callable, NULL, 0, kwargs);
     }
     else {
-        return PyObject_Call(callable, args, kwargs);
+        return _PyObject_Call(tstate, callable, args, kwargs);
     }
 }
 
@@ -814,59 +443,31 @@
 PyObject *
 PyObject_CallObject(PyObject *callable, PyObject *args)
 {
-    return PyEval_CallObjectWithKeywords(callable, args, NULL);
-}
-
-
-/* Positional arguments are obj followed by args:
-   call callable(obj, *args, **kwargs) */
-PyObject *
-_PyObject_FastCall_Prepend(PyObject *callable, PyObject *obj,
-                           PyObject *const *args, Py_ssize_t nargs)
-{
-    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
-    PyObject **args2;
-    PyObject *result;
-
-    nargs++;
-    if (nargs <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
-        args2 = small_stack;
+    PyThreadState *tstate = _PyThreadState_GET();
+    assert(!_PyErr_Occurred(tstate));
+    if (args == NULL) {
+        return _PyObject_CallNoArgTstate(tstate, callable);
     }
-    else {
-        args2 = PyMem_Malloc(nargs * sizeof(PyObject *));
-        if (args2 == NULL) {
-            PyErr_NoMemory();
-            return NULL;
-        }
+    if (!PyTuple_Check(args)) {
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "argument list must be a tuple");
+        return NULL;
     }
-
-    /* use borrowed references */
-    args2[0] = obj;
-    if (nargs > 1) {
-        memcpy(&args2[1], args, (nargs - 1) * sizeof(PyObject *));
-    }
-
-    result = _PyObject_FastCall(callable, args2, nargs);
-    if (args2 != small_stack) {
-        PyMem_Free(args2);
-    }
-    return result;
+    return _PyObject_Call(tstate, callable, args, NULL);
 }
 
 
 /* Call callable(obj, *args, **kwargs). */
 PyObject *
-_PyObject_Call_Prepend(PyObject *callable,
+_PyObject_Call_Prepend(PyThreadState *tstate, PyObject *callable,
                        PyObject *obj, PyObject *args, PyObject *kwargs)
 {
-    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
-    PyObject **stack;
-    Py_ssize_t argcount;
-    PyObject *result;
-
     assert(PyTuple_Check(args));
 
-    argcount = PyTuple_GET_SIZE(args);
+    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
+    PyObject **stack;
+
+    Py_ssize_t argcount = PyTuple_GET_SIZE(args);
     if (argcount + 1 <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
         stack = small_stack;
     }
@@ -884,9 +485,9 @@
            _PyTuple_ITEMS(args),
            argcount * sizeof(PyObject *));
 
-    result = _PyObject_FastCallDict(callable,
-                                    stack, argcount + 1,
-                                    kwargs);
+    PyObject *result = _PyObject_FastCallDictTstate(tstate, callable,
+                                                    stack, argcount + 1,
+                                                    kwargs);
     if (stack != small_stack) {
         PyMem_Free(stack);
     }
@@ -897,8 +498,8 @@
 /* --- Call with a format string ---------------------------------- */
 
 static PyObject *
-_PyObject_CallFunctionVa(PyObject *callable, const char *format,
-                         va_list va, int is_size_t)
+_PyObject_CallFunctionVa(PyThreadState *tstate, PyObject *callable,
+                         const char *format, va_list va, int is_size_t)
 {
     PyObject* small_stack[_PY_FASTCALL_SMALL_STACK];
     const Py_ssize_t small_stack_len = Py_ARRAY_LENGTH(small_stack);
@@ -907,11 +508,11 @@
     PyObject *result;
 
     if (callable == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
     if (!format || !*format) {
-        return _PyObject_CallNoArg(callable);
+        return _PyObject_CallNoArgTstate(tstate, callable);
     }
 
     if (is_size_t) {
@@ -932,12 +533,14 @@
            - PyObject_CallFunction(func, "(OOO)", arg1, arg2, arg3) calls
              func(*(arg1, arg2, arg3)): func(arg1, arg2, arg3) */
         PyObject *args = stack[0];
-        result = _PyObject_FastCall(callable,
-                                    _PyTuple_ITEMS(args),
-                                    PyTuple_GET_SIZE(args));
+        result = _PyObject_VectorcallTstate(tstate, callable,
+                                            _PyTuple_ITEMS(args),
+                                            PyTuple_GET_SIZE(args),
+                                            NULL);
     }
     else {
-        result = _PyObject_FastCall(callable, stack, nargs);
+        result = _PyObject_VectorcallTstate(tstate, callable,
+                                            stack, nargs, NULL);
     }
 
     for (i = 0; i < nargs; ++i) {
@@ -955,9 +558,10 @@
 {
     va_list va;
     PyObject *result;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     va_start(va, format);
-    result = _PyObject_CallFunctionVa(callable, format, va, 0);
+    result = _PyObject_CallFunctionVa(tstate, callable, format, va, 0);
     va_end(va);
 
     return result;
@@ -972,9 +576,10 @@
 {
     va_list va;
     PyObject *result;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     va_start(va, format);
-    result = _PyObject_CallFunctionVa(callable, format, va, 0);
+    result = _PyObject_CallFunctionVa(tstate, callable, format, va, 0);
     va_end(va);
 
     return result;
@@ -984,11 +589,11 @@
 PyObject *
 _PyObject_CallFunction_SizeT(PyObject *callable, const char *format, ...)
 {
-    va_list va;
-    PyObject *result;
+    PyThreadState *tstate = _PyThreadState_GET();
 
+    va_list va;
     va_start(va, format);
-    result = _PyObject_CallFunctionVa(callable, format, va, 1);
+    PyObject *result = _PyObject_CallFunctionVa(tstate, callable, format, va, 1);
     va_end(va);
 
     return result;
@@ -996,37 +601,37 @@
 
 
 static PyObject*
-callmethod(PyObject* callable, const char *format, va_list va, int is_size_t)
+callmethod(PyThreadState *tstate, PyObject* callable, const char *format, va_list va, int is_size_t)
 {
     assert(callable != NULL);
-
     if (!PyCallable_Check(callable)) {
-        PyErr_Format(PyExc_TypeError,
-                     "attribute of type '%.200s' is not callable",
-                     Py_TYPE(callable)->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "attribute of type '%.200s' is not callable",
+                      Py_TYPE(callable)->tp_name);
         return NULL;
     }
 
-    return _PyObject_CallFunctionVa(callable, format, va, is_size_t);
+    return _PyObject_CallFunctionVa(tstate, callable, format, va, is_size_t);
 }
 
 
 PyObject *
 PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)
 {
-    va_list va;
-    PyObject *callable, *retval;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
-    callable = PyObject_GetAttrString(obj, name);
-    if (callable == NULL)
+    PyObject *callable = PyObject_GetAttrString(obj, name);
+    if (callable == NULL) {
         return NULL;
+    }
 
+    va_list va;
     va_start(va, format);
-    retval = callmethod(callable, format, va, 0);
+    PyObject *retval = callmethod(tstate, callable, format, va, 0);
     va_end(va);
 
     Py_DECREF(callable);
@@ -1040,19 +645,19 @@
 PyObject *
 PyEval_CallMethod(PyObject *obj, const char *name, const char *format, ...)
 {
-    va_list va;
-    PyObject *callable, *retval;
-
+    PyThreadState *tstate = _PyThreadState_GET();
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
-    callable = PyObject_GetAttrString(obj, name);
-    if (callable == NULL)
+    PyObject *callable = PyObject_GetAttrString(obj, name);
+    if (callable == NULL) {
         return NULL;
+    }
 
+    va_list va;
     va_start(va, format);
-    retval = callmethod(callable, format, va, 0);
+    PyObject *retval = callmethod(tstate, callable, format, va, 0);
     va_end(va);
 
     Py_DECREF(callable);
@@ -1064,19 +669,19 @@
 _PyObject_CallMethodId(PyObject *obj, _Py_Identifier *name,
                        const char *format, ...)
 {
-    va_list va;
-    PyObject *callable, *retval;
-
+    PyThreadState *tstate = _PyThreadState_GET();
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
-    callable = _PyObject_GetAttrId(obj, name);
-    if (callable == NULL)
+    PyObject *callable = _PyObject_GetAttrId(obj, name);
+    if (callable == NULL) {
         return NULL;
+    }
 
+    va_list va;
     va_start(va, format);
-    retval = callmethod(callable, format, va, 0);
+    PyObject *retval = callmethod(tstate, callable, format, va, 0);
     va_end(va);
 
     Py_DECREF(callable);
@@ -1088,19 +693,19 @@
 _PyObject_CallMethod_SizeT(PyObject *obj, const char *name,
                            const char *format, ...)
 {
-    va_list va;
-    PyObject *callable, *retval;
-
+    PyThreadState *tstate = _PyThreadState_GET();
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
-    callable = PyObject_GetAttrString(obj, name);
-    if (callable == NULL)
+    PyObject *callable = PyObject_GetAttrString(obj, name);
+    if (callable == NULL) {
         return NULL;
+    }
 
+    va_list va;
     va_start(va, format);
-    retval = callmethod(callable, format, va, 1);
+    PyObject *retval = callmethod(tstate, callable, format, va, 1);
     va_end(va);
 
     Py_DECREF(callable);
@@ -1112,20 +717,19 @@
 _PyObject_CallMethodId_SizeT(PyObject *obj, _Py_Identifier *name,
                              const char *format, ...)
 {
-    va_list va;
-    PyObject *callable, *retval;
-
+    PyThreadState *tstate = _PyThreadState_GET();
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
-    callable = _PyObject_GetAttrId(obj, name);
+    PyObject *callable = _PyObject_GetAttrId(obj, name);
     if (callable == NULL) {
         return NULL;
     }
 
+    va_list va;
     va_start(va, format);
-    retval = callmethod(callable, format, va, 1);
+    PyObject *retval = callmethod(tstate, callable, format, va, 1);
     va_end(va);
 
     Py_DECREF(callable);
@@ -1136,7 +740,8 @@
 /* --- Call with "..." arguments ---------------------------------- */
 
 static PyObject *
-object_vacall(PyObject *base, PyObject *callable, va_list vargs)
+object_vacall(PyThreadState *tstate, PyObject *base,
+              PyObject *callable, va_list vargs)
 {
     PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
     PyObject **stack;
@@ -1146,7 +751,7 @@
     va_list countva;
 
     if (callable == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
     /* Count the number of arguments */
@@ -1183,7 +788,7 @@
     }
 
     /* Call the function */
-    result = _PyObject_FastCall(callable, stack, nargs);
+    result = _PyObject_VectorcallTstate(tstate, callable, stack, nargs, NULL);
 
     if (stack != small_stack) {
         PyMem_Free(stack);
@@ -1192,14 +797,46 @@
 }
 
 
-/* Private API for the LOAD_METHOD opcode. */
-extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **);
+PyObject *
+PyObject_VectorcallMethod(PyObject *name, PyObject *const *args,
+                           size_t nargsf, PyObject *kwnames)
+{
+    assert(name != NULL);
+    assert(args != NULL);
+    assert(PyVectorcall_NARGS(nargsf) >= 1);
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *callable = NULL;
+    /* Use args[0] as "self" argument */
+    int unbound = _PyObject_GetMethod(args[0], name, &callable);
+    if (callable == NULL) {
+        return NULL;
+    }
+
+    if (unbound) {
+        /* We must remove PY_VECTORCALL_ARGUMENTS_OFFSET since
+         * that would be interpreted as allowing to change args[-1] */
+        nargsf &= ~PY_VECTORCALL_ARGUMENTS_OFFSET;
+    }
+    else {
+        /* Skip "self". We can keep PY_VECTORCALL_ARGUMENTS_OFFSET since
+         * args[-1] in the onward call is args[0] here. */
+        args++;
+        nargsf--;
+    }
+    PyObject *result = _PyObject_VectorcallTstate(tstate, callable,
+                                                  args, nargsf, kwnames);
+    Py_DECREF(callable);
+    return result;
+}
+
 
 PyObject *
 PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
     PyObject *callable = NULL;
@@ -1211,7 +848,7 @@
 
     va_list vargs;
     va_start(vargs, name);
-    PyObject *result = object_vacall(obj, callable, vargs);
+    PyObject *result = object_vacall(tstate, obj, callable, vargs);
     va_end(vargs);
 
     Py_DECREF(callable);
@@ -1223,8 +860,9 @@
 _PyObject_CallMethodIdObjArgs(PyObject *obj,
                               struct _Py_Identifier *name, ...)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     if (obj == NULL || name == NULL) {
-        return null_error();
+        return null_error(tstate);
     }
 
     PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
@@ -1241,7 +879,7 @@
 
     va_list vargs;
     va_start(vargs, name);
-    PyObject *result = object_vacall(obj, callable, vargs);
+    PyObject *result = object_vacall(tstate, obj, callable, vargs);
     va_end(vargs);
 
     Py_DECREF(callable);
@@ -1252,11 +890,12 @@
 PyObject *
 PyObject_CallFunctionObjArgs(PyObject *callable, ...)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     va_list vargs;
     PyObject *result;
 
     va_start(vargs, callable);
-    result = object_vacall(NULL, callable, vargs);
+    result = object_vacall(tstate, NULL, callable, vargs);
     va_end(vargs);
 
     return result;
@@ -1292,54 +931,67 @@
 }
 
 
-int
-_PyStack_UnpackDict(PyObject *const *args, Py_ssize_t nargs, PyObject *kwargs,
-                    PyObject *const **p_stack, PyObject **p_kwnames)
+/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
+
+   Allocate a new argument vector and keyword names tuple. Return the argument
+   vector; return NULL with exception set on error. Return the keyword names
+   tuple in *p_kwnames.
+
+   This also checks that all keyword names are strings. If not, a TypeError is
+   raised.
+
+   The newly allocated argument vector supports PY_VECTORCALL_ARGUMENTS_OFFSET.
+
+   When done, you must call _PyStack_UnpackDict_Free(stack, nargs, kwnames) */
+static PyObject *const *
+_PyStack_UnpackDict(PyThreadState *tstate,
+                    PyObject *const *args, Py_ssize_t nargs,
+                    PyObject *kwargs, PyObject **p_kwnames)
 {
-    PyObject **stack, **kwstack;
-    Py_ssize_t nkwargs;
-    Py_ssize_t pos, i;
-    PyObject *key, *value;
-    PyObject *kwnames;
-
     assert(nargs >= 0);
-    assert(kwargs == NULL || PyDict_CheckExact(kwargs));
+    assert(kwargs != NULL);
+    assert(PyDict_Check(kwargs));
 
-    if (kwargs == NULL || (nkwargs = PyDict_GET_SIZE(kwargs)) == 0) {
-        *p_stack = args;
-        *p_kwnames = NULL;
-        return 0;
+    Py_ssize_t nkwargs = PyDict_GET_SIZE(kwargs);
+    /* Check for overflow in the PyMem_Malloc() call below. The subtraction
+     * in this check cannot overflow: both maxnargs and nkwargs are
+     * non-negative signed integers, so their difference fits in the type. */
+    Py_ssize_t maxnargs = PY_SSIZE_T_MAX / sizeof(args[0]) - 1;
+    if (nargs > maxnargs - nkwargs) {
+        _PyErr_NoMemory(tstate);
+        return NULL;
     }
 
-    if ((size_t)nargs > PY_SSIZE_T_MAX / sizeof(stack[0]) - (size_t)nkwargs) {
-        PyErr_NoMemory();
-        return -1;
-    }
-
-    stack = PyMem_Malloc((nargs + nkwargs) * sizeof(stack[0]));
+    /* Add 1 to support PY_VECTORCALL_ARGUMENTS_OFFSET */
+    PyObject **stack = PyMem_Malloc((1 + nargs + nkwargs) * sizeof(args[0]));
     if (stack == NULL) {
-        PyErr_NoMemory();
-        return -1;
+        _PyErr_NoMemory(tstate);
+        return NULL;
     }
 
-    kwnames = PyTuple_New(nkwargs);
+    PyObject *kwnames = PyTuple_New(nkwargs);
     if (kwnames == NULL) {
         PyMem_Free(stack);
-        return -1;
+        return NULL;
     }
 
+    stack++;  /* For PY_VECTORCALL_ARGUMENTS_OFFSET */
+
     /* Copy positional arguments */
-    for (i = 0; i < nargs; i++) {
+    for (Py_ssize_t i = 0; i < nargs; i++) {
         Py_INCREF(args[i]);
         stack[i] = args[i];
     }
 
-    kwstack = stack + nargs;
-    pos = i = 0;
+    PyObject **kwstack = stack + nargs;
     /* This loop doesn't support lookup function mutating the dictionary
        to change its size. It's a deliberate choice for speed, this function is
        called in the performance critical hot code. */
+    Py_ssize_t pos = 0, i = 0;
+    PyObject *key, *value;
+    unsigned long keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS;
     while (PyDict_Next(kwargs, &pos, &key, &value)) {
+        keys_are_strings &= Py_TYPE(key)->tp_flags;
         Py_INCREF(key);
         Py_INCREF(value);
         PyTuple_SET_ITEM(kwnames, i, key);
@@ -1347,7 +999,30 @@
         i++;
     }
 
-    *p_stack = stack;
+    /* keys_are_strings has the value Py_TPFLAGS_UNICODE_SUBCLASS if that
+     * flag is set for all keys. Otherwise, keys_are_strings equals 0.
+     * We do this check once at the end instead of inside the loop above
+     * because it simplifies the deallocation in the failing case.
+     * It happens to also make the loop above slightly more efficient. */
+    if (!keys_are_strings) {
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "keywords must be strings");
+        _PyStack_UnpackDict_Free(stack, nargs, kwnames);
+        return NULL;
+    }
+
     *p_kwnames = kwnames;
-    return 0;
+    return stack;
+}
+
+static void
+_PyStack_UnpackDict_Free(PyObject *const *stack, Py_ssize_t nargs,
+                         PyObject *kwnames)
+{
+    Py_ssize_t n = PyTuple_GET_SIZE(kwnames) + nargs;
+    for (Py_ssize_t i = 0; i < n; i++) {
+        Py_DECREF(stack[i]);
+    }
+    PyMem_Free((PyObject **)stack - 1);
+    Py_DECREF(kwnames);
 }
diff --git a/Objects/capsule.c b/Objects/capsule.c
index 599893a..ed24cc1 100644
--- a/Objects/capsule.c
+++ b/Objects/capsule.c
@@ -50,7 +50,7 @@
         return NULL;
     }
 
-    capsule = PyObject_NEW(PyCapsule, &PyCapsule_Type);
+    capsule = PyObject_New(PyCapsule, &PyCapsule_Type);
     if (capsule == NULL) {
         return NULL;
     }
diff --git a/Objects/cellobject.c b/Objects/cellobject.c
index 911cf52..86a89f02e6 100644
--- a/Objects/cellobject.c
+++ b/Objects/cellobject.c
@@ -2,8 +2,6 @@
 
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
 
 PyObject *
 PyCell_New(PyObject *obj)
@@ -112,7 +110,7 @@
         return PyUnicode_FromFormat("<cell at %p: empty>", op);
 
     return PyUnicode_FromFormat("<cell at %p: %.80s object at %p>",
-                               op, op->ob_ref->ob_type->tp_name,
+                               op, Py_TYPE(op->ob_ref)->tp_name,
                                op->ob_ref);
 }
 
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 12bb836..fd9f875 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -2,21 +2,12 @@
 
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+#include "structmember.h"         // PyMemberDef
 
 #define TP_DESCR_GET(t) ((t)->tp_descr_get)
 
-/* Free list for method objects to safe malloc/free overhead
- * The im_self element is used to chain the elements.
- */
-static PyMethodObject *free_list;
-static int numfree = 0;
-#ifndef PyMethod_MAXFREELIST
-#define PyMethod_MAXFREELIST 256
-#endif
-
 _Py_IDENTIFIER(__name__);
 _Py_IDENTIFIER(__qualname__);
 
@@ -45,26 +36,29 @@
 method_vectorcall(PyObject *method, PyObject *const *args,
                   size_t nargsf, PyObject *kwnames)
 {
-    assert(Py_TYPE(method) == &PyMethod_Type);
-    PyObject *self, *func, *result;
-    self = PyMethod_GET_SELF(method);
-    func = PyMethod_GET_FUNCTION(method);
+    assert(Py_IS_TYPE(method, &PyMethod_Type));
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *self = PyMethod_GET_SELF(method);
+    PyObject *func = PyMethod_GET_FUNCTION(method);
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
 
+    PyObject *result;
     if (nargsf & PY_VECTORCALL_ARGUMENTS_OFFSET) {
         /* PY_VECTORCALL_ARGUMENTS_OFFSET is set, so we are allowed to mutate the vector */
         PyObject **newargs = (PyObject**)args - 1;
         nargs += 1;
         PyObject *tmp = newargs[0];
         newargs[0] = self;
-        result = _PyObject_Vectorcall(func, newargs, nargs, kwnames);
+        result = _PyObject_VectorcallTstate(tstate, func, newargs,
+                                            nargs, kwnames);
         newargs[0] = tmp;
     }
     else {
         Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
         Py_ssize_t totalargs = nargs + nkwargs;
         if (totalargs == 0) {
-            return _PyObject_Vectorcall(func, &self, 1, NULL);
+            return _PyObject_VectorcallTstate(tstate, func, &self, 1, NULL);
         }
 
         PyObject *newargs_stack[_PY_FASTCALL_SMALL_STACK];
@@ -75,7 +69,7 @@
         else {
             newargs = PyMem_Malloc((totalargs+1) * sizeof(PyObject *));
             if (newargs == NULL) {
-                PyErr_NoMemory();
+                _PyErr_NoMemory(tstate);
                 return NULL;
             }
         }
@@ -86,7 +80,8 @@
          * undefined behaviour. */
         assert(args != NULL);
         memcpy(newargs + 1, args, totalargs * sizeof(PyObject *));
-        result = _PyObject_Vectorcall(func, newargs, nargs+1, kwnames);
+        result = _PyObject_VectorcallTstate(tstate, func,
+                                            newargs, nargs+1, kwnames);
         if (newargs != newargs_stack) {
             PyMem_Free(newargs);
         }
@@ -103,26 +98,18 @@
 PyObject *
 PyMethod_New(PyObject *func, PyObject *self)
 {
-    PyMethodObject *im;
     if (self == NULL) {
         PyErr_BadInternalCall();
         return NULL;
     }
-    im = free_list;
-    if (im != NULL) {
-        free_list = (PyMethodObject *)(im->im_self);
-        (void)PyObject_INIT(im, &PyMethod_Type);
-        numfree--;
-    }
-    else {
-        im = PyObject_GC_New(PyMethodObject, &PyMethod_Type);
-        if (im == NULL)
-            return NULL;
+    PyMethodObject *im = PyObject_GC_New(PyMethodObject, &PyMethod_Type);
+    if (im == NULL) {
+        return NULL;
     }
     im->im_weakreflist = NULL;
     Py_INCREF(func);
     im->im_func = func;
-    Py_XINCREF(self);
+    Py_INCREF(self);
     im->im_self = self;
     im->vectorcall = method_vectorcall;
     _PyObject_GC_TRACK(im);
@@ -157,9 +144,9 @@
 #define MO_OFF(x) offsetof(PyMethodObject, x)
 
 static PyMemberDef method_memberlist[] = {
-    {"__func__", T_OBJECT, MO_OFF(im_func), READONLY|RESTRICTED,
+    {"__func__", T_OBJECT, MO_OFF(im_func), READONLY,
      "the function (or other callable) implementing a method"},
-    {"__self__", T_OBJECT, MO_OFF(im_self), READONLY|RESTRICTED,
+    {"__self__", T_OBJECT, MO_OFF(im_self), READONLY,
      "the instance to which a method is bound"},
     {NULL}      /* Sentinel */
 };
@@ -190,7 +177,7 @@
 method_getattro(PyObject *obj, PyObject *name)
 {
     PyMethodObject *im = (PyMethodObject *)obj;
-    PyTypeObject *tp = obj->ob_type;
+    PyTypeObject *tp = Py_TYPE(obj);
     PyObject *descr = NULL;
 
     {
@@ -202,9 +189,9 @@
     }
 
     if (descr != NULL) {
-        descrgetfunc f = TP_DESCR_GET(descr->ob_type);
+        descrgetfunc f = TP_DESCR_GET(Py_TYPE(descr));
         if (f != NULL)
-            return f(descr, obj, (PyObject *)obj->ob_type);
+            return f(descr, obj, (PyObject *)Py_TYPE(obj));
         else {
             Py_INCREF(descr);
             return descr;
@@ -252,14 +239,7 @@
         PyObject_ClearWeakRefs((PyObject *)im);
     Py_DECREF(im->im_func);
     Py_XDECREF(im->im_self);
-    if (numfree < PyMethod_MAXFREELIST) {
-        im->im_self = (PyObject *)free_list;
-        free_list = im;
-        numfree++;
-    }
-    else {
-        PyObject_GC_Del(im);
-    }
+    PyObject_GC_Del(im);
 }
 
 static PyObject *
@@ -342,17 +322,6 @@
 }
 
 static PyObject *
-method_call(PyObject *method, PyObject *args, PyObject *kwargs)
-{
-    PyObject *self, *func;
-
-    self = PyMethod_GET_SELF(method);
-    func = PyMethod_GET_FUNCTION(method);
-
-    return _PyObject_Call_Prepend(func, self, args, kwargs);
-}
-
-static PyObject *
 method_descr_get(PyObject *meth, PyObject *obj, PyObject *cls)
 {
     Py_INCREF(meth);
@@ -374,13 +343,13 @@
     0,                                          /* tp_as_sequence */
     0,                                          /* tp_as_mapping */
     (hashfunc)method_hash,                      /* tp_hash */
-    method_call,                                /* tp_call */
+    PyVectorcall_Call,                          /* tp_call */
     0,                                          /* tp_str */
     method_getattro,                            /* tp_getattro */
     PyObject_GenericSetAttr,                    /* tp_setattro */
     0,                                          /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-    _Py_TPFLAGS_HAVE_VECTORCALL,                /* tp_flags */
+    Py_TPFLAGS_HAVE_VECTORCALL,                 /* tp_flags */
     method_doc,                                 /* tp_doc */
     (traverseproc)method_traverse,              /* tp_traverse */
     0,                                          /* tp_clear */
@@ -401,38 +370,6 @@
     method_new,                                 /* tp_new */
 };
 
-/* Clear out the free list */
-
-int
-PyMethod_ClearFreeList(void)
-{
-    int freelist_size = numfree;
-
-    while (free_list) {
-        PyMethodObject *im = free_list;
-        free_list = (PyMethodObject *)(im->im_self);
-        PyObject_GC_Del(im);
-        numfree--;
-    }
-    assert(numfree == 0);
-    return freelist_size;
-}
-
-void
-PyMethod_Fini(void)
-{
-    (void)PyMethod_ClearFreeList();
-}
-
-/* Print summary info about the state of the optimized allocator */
-void
-_PyMethod_DebugMallocStats(FILE *out)
-{
-    _PyDebugAllocatorStats(out,
-                           "free PyMethodObject",
-                           numfree, sizeof(PyMethodObject));
-}
-
 /* ------------------------------------------------------------------------
  * instance method
  */
@@ -462,7 +399,7 @@
 #define IMO_OFF(x) offsetof(PyInstanceMethodObject, x)
 
 static PyMemberDef instancemethod_memberlist[] = {
-    {"__func__", T_OBJECT, IMO_OFF(func), READONLY|RESTRICTED,
+    {"__func__", T_OBJECT, IMO_OFF(func), READONLY,
      "the function (or other callable) implementing a method"},
     {NULL}      /* Sentinel */
 };
@@ -487,7 +424,7 @@
 static PyObject *
 instancemethod_getattro(PyObject *self, PyObject *name)
 {
-    PyTypeObject *tp = self->ob_type;
+    PyTypeObject *tp = Py_TYPE(self);
     PyObject *descr = NULL;
 
     if (tp->tp_dict == NULL) {
@@ -497,9 +434,9 @@
     descr = _PyType_Lookup(tp, name);
 
     if (descr != NULL) {
-        descrgetfunc f = TP_DESCR_GET(descr->ob_type);
+        descrgetfunc f = TP_DESCR_GET(Py_TYPE(descr));
         if (f != NULL)
-            return f(descr, self, (PyObject *)self->ob_type);
+            return f(descr, self, (PyObject *)Py_TYPE(self));
         else {
             Py_INCREF(descr);
             return descr;
diff --git a/Objects/clinic/bytearrayobject.c.h b/Objects/clinic/bytearrayobject.c.h
index 0557707..35ba1ff 100644
--- a/Objects/clinic/bytearrayobject.c.h
+++ b/Objects/clinic/bytearrayobject.c.h
@@ -38,6 +38,86 @@
     return bytearray_copy_impl(self);
 }
 
+PyDoc_STRVAR(bytearray_removeprefix__doc__,
+"removeprefix($self, prefix, /)\n"
+"--\n"
+"\n"
+"Return a bytearray with the given prefix string removed if present.\n"
+"\n"
+"If the bytearray starts with the prefix string, return\n"
+"bytearray[len(prefix):].  Otherwise, return a copy of the original\n"
+"bytearray.");
+
+#define BYTEARRAY_REMOVEPREFIX_METHODDEF    \
+    {"removeprefix", (PyCFunction)bytearray_removeprefix, METH_O, bytearray_removeprefix__doc__},
+
+static PyObject *
+bytearray_removeprefix_impl(PyByteArrayObject *self, Py_buffer *prefix);
+
+static PyObject *
+bytearray_removeprefix(PyByteArrayObject *self, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    Py_buffer prefix = {NULL, NULL};
+
+    if (PyObject_GetBuffer(arg, &prefix, PyBUF_SIMPLE) != 0) {
+        goto exit;
+    }
+    if (!PyBuffer_IsContiguous(&prefix, 'C')) {
+        _PyArg_BadArgument("removeprefix", "argument", "contiguous buffer", arg);
+        goto exit;
+    }
+    return_value = bytearray_removeprefix_impl(self, &prefix);
+
+exit:
+    /* Cleanup for prefix */
+    if (prefix.obj) {
+       PyBuffer_Release(&prefix);
+    }
+
+    return return_value;
+}
+
+PyDoc_STRVAR(bytearray_removesuffix__doc__,
+"removesuffix($self, suffix, /)\n"
+"--\n"
+"\n"
+"Return a bytearray with the given suffix string removed if present.\n"
+"\n"
+"If the bytearray ends with the suffix string and that suffix is not\n"
+"empty, return bytearray[:-len(suffix)].  Otherwise, return a copy of\n"
+"the original bytearray.");
+
+#define BYTEARRAY_REMOVESUFFIX_METHODDEF    \
+    {"removesuffix", (PyCFunction)bytearray_removesuffix, METH_O, bytearray_removesuffix__doc__},
+
+static PyObject *
+bytearray_removesuffix_impl(PyByteArrayObject *self, Py_buffer *suffix);
+
+static PyObject *
+bytearray_removesuffix(PyByteArrayObject *self, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    Py_buffer suffix = {NULL, NULL};
+
+    if (PyObject_GetBuffer(arg, &suffix, PyBUF_SIMPLE) != 0) {
+        goto exit;
+    }
+    if (!PyBuffer_IsContiguous(&suffix, 'C')) {
+        _PyArg_BadArgument("removesuffix", "argument", "contiguous buffer", arg);
+        goto exit;
+    }
+    return_value = bytearray_removesuffix_impl(self, &suffix);
+
+exit:
+    /* Cleanup for suffix */
+    if (suffix.obj) {
+       PyBuffer_Release(&suffix);
+    }
+
+    return return_value;
+}
+
 PyDoc_STRVAR(bytearray_translate__doc__,
 "translate($self, table, /, delete=b\'\')\n"
 "--\n"
@@ -1011,4 +1091,4 @@
 {
     return bytearray_sizeof_impl(self);
 }
-/*[clinic end generated code: output=508dce79cf2dffcc input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b2919f76709e48dc input=a9049054013a1b77]*/
diff --git a/Objects/clinic/bytesobject.c.h b/Objects/clinic/bytesobject.c.h
index 22024ab..063a377 100644
--- a/Objects/clinic/bytesobject.c.h
+++ b/Objects/clinic/bytesobject.c.h
@@ -526,6 +526,85 @@
     return return_value;
 }
 
+PyDoc_STRVAR(bytes_removeprefix__doc__,
+"removeprefix($self, prefix, /)\n"
+"--\n"
+"\n"
+"Return a bytes object with the given prefix string removed if present.\n"
+"\n"
+"If the bytes starts with the prefix string, return bytes[len(prefix):].\n"
+"Otherwise, return a copy of the original bytes.");
+
+#define BYTES_REMOVEPREFIX_METHODDEF    \
+    {"removeprefix", (PyCFunction)bytes_removeprefix, METH_O, bytes_removeprefix__doc__},
+
+static PyObject *
+bytes_removeprefix_impl(PyBytesObject *self, Py_buffer *prefix);
+
+static PyObject *
+bytes_removeprefix(PyBytesObject *self, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    Py_buffer prefix = {NULL, NULL};
+
+    if (PyObject_GetBuffer(arg, &prefix, PyBUF_SIMPLE) != 0) {
+        goto exit;
+    }
+    if (!PyBuffer_IsContiguous(&prefix, 'C')) {
+        _PyArg_BadArgument("removeprefix", "argument", "contiguous buffer", arg);
+        goto exit;
+    }
+    return_value = bytes_removeprefix_impl(self, &prefix);
+
+exit:
+    /* Cleanup for prefix */
+    if (prefix.obj) {
+       PyBuffer_Release(&prefix);
+    }
+
+    return return_value;
+}
+
+PyDoc_STRVAR(bytes_removesuffix__doc__,
+"removesuffix($self, suffix, /)\n"
+"--\n"
+"\n"
+"Return a bytes object with the given suffix string removed if present.\n"
+"\n"
+"If the bytes ends with the suffix string and that suffix is not empty,\n"
+"return bytes[:-len(prefix)].  Otherwise, return a copy of the original\n"
+"bytes.");
+
+#define BYTES_REMOVESUFFIX_METHODDEF    \
+    {"removesuffix", (PyCFunction)bytes_removesuffix, METH_O, bytes_removesuffix__doc__},
+
+static PyObject *
+bytes_removesuffix_impl(PyBytesObject *self, Py_buffer *suffix);
+
+static PyObject *
+bytes_removesuffix(PyBytesObject *self, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    Py_buffer suffix = {NULL, NULL};
+
+    if (PyObject_GetBuffer(arg, &suffix, PyBUF_SIMPLE) != 0) {
+        goto exit;
+    }
+    if (!PyBuffer_IsContiguous(&suffix, 'C')) {
+        _PyArg_BadArgument("removesuffix", "argument", "contiguous buffer", arg);
+        goto exit;
+    }
+    return_value = bytes_removesuffix_impl(self, &suffix);
+
+exit:
+    /* Cleanup for suffix */
+    if (suffix.obj) {
+       PyBuffer_Release(&suffix);
+    }
+
+    return return_value;
+}
+
 PyDoc_STRVAR(bytes_decode__doc__,
 "decode($self, /, encoding=\'utf-8\', errors=\'strict\')\n"
 "--\n"
@@ -755,4 +834,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=ca60dfccf8d51e88 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=220388917d7bf751 input=a9049054013a1b77]*/
diff --git a/Objects/clinic/dictobject.c.h b/Objects/clinic/dictobject.c.h
index 8d54933..7395e3b 100644
--- a/Objects/clinic/dictobject.c.h
+++ b/Objects/clinic/dictobject.c.h
@@ -116,6 +116,42 @@
     return return_value;
 }
 
+PyDoc_STRVAR(dict_pop__doc__,
+"pop($self, key, default=<unrepresentable>, /)\n"
+"--\n"
+"\n"
+"D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n"
+"\n"
+"If key is not found, default is returned if given, otherwise KeyError is raised");
+
+#define DICT_POP_METHODDEF    \
+    {"pop", (PyCFunction)(void(*)(void))dict_pop, METH_FASTCALL, dict_pop__doc__},
+
+static PyObject *
+dict_pop_impl(PyDictObject *self, PyObject *key, PyObject *default_value);
+
+static PyObject *
+dict_pop(PyDictObject *self, PyObject *const *args, Py_ssize_t nargs)
+{
+    PyObject *return_value = NULL;
+    PyObject *key;
+    PyObject *default_value = NULL;
+
+    if (!_PyArg_CheckPositional("pop", nargs, 1, 2)) {
+        goto exit;
+    }
+    key = args[0];
+    if (nargs < 2) {
+        goto skip_optional;
+    }
+    default_value = args[1];
+skip_optional:
+    return_value = dict_pop_impl(self, key, default_value);
+
+exit:
+    return return_value;
+}
+
 PyDoc_STRVAR(dict_popitem__doc__,
 "popitem($self, /)\n"
 "--\n"
@@ -154,4 +190,4 @@
 {
     return dict___reversed___impl(self);
 }
-/*[clinic end generated code: output=676532dcc941d399 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=4d98145508da8fa3 input=a9049054013a1b77]*/
diff --git a/Objects/clinic/floatobject.c.h b/Objects/clinic/floatobject.c.h
index b684ba0..b755483 100644
--- a/Objects/clinic/floatobject.c.h
+++ b/Objects/clinic/floatobject.c.h
@@ -38,6 +38,42 @@
     return float___trunc___impl(self);
 }
 
+PyDoc_STRVAR(float___floor____doc__,
+"__floor__($self, /)\n"
+"--\n"
+"\n"
+"Return the floor as an Integral.");
+
+#define FLOAT___FLOOR___METHODDEF    \
+    {"__floor__", (PyCFunction)float___floor__, METH_NOARGS, float___floor____doc__},
+
+static PyObject *
+float___floor___impl(PyObject *self);
+
+static PyObject *
+float___floor__(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    return float___floor___impl(self);
+}
+
+PyDoc_STRVAR(float___ceil____doc__,
+"__ceil__($self, /)\n"
+"--\n"
+"\n"
+"Return the ceiling as an Integral.");
+
+#define FLOAT___CEIL___METHODDEF    \
+    {"__ceil__", (PyCFunction)float___ceil__, METH_NOARGS, float___ceil____doc__},
+
+static PyObject *
+float___ceil___impl(PyObject *self);
+
+static PyObject *
+float___ceil__(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    return float___ceil___impl(self);
+}
+
 PyDoc_STRVAR(float___round____doc__,
 "__round__($self, ndigits=None, /)\n"
 "--\n"
@@ -351,4 +387,4 @@
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=1676433b9f04fbc9 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=25fbbe253f44e2df input=a9049054013a1b77]*/
diff --git a/Objects/clinic/listobject.c.h b/Objects/clinic/listobject.c.h
index 57f0a48..ed137c9 100644
--- a/Objects/clinic/listobject.c.h
+++ b/Objects/clinic/listobject.c.h
@@ -314,7 +314,7 @@
     int return_value = -1;
     PyObject *iterable = NULL;
 
-    if ((Py_TYPE(self) == &PyList_Type) &&
+    if (Py_IS_TYPE(self, &PyList_Type) &&
         !_PyArg_NoKeywords("list", kwargs)) {
         goto exit;
     }
@@ -367,4 +367,4 @@
 {
     return list___reversed___impl(self);
 }
-/*[clinic end generated code: output=73718c0c33798c62 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1ff61490c091d165 input=a9049054013a1b77]*/
diff --git a/Objects/clinic/unicodeobject.c.h b/Objects/clinic/unicodeobject.c.h
index 0d13406..cf81df4 100644
--- a/Objects/clinic/unicodeobject.c.h
+++ b/Objects/clinic/unicodeobject.c.h
@@ -754,6 +754,77 @@
     return return_value;
 }
 
+PyDoc_STRVAR(unicode_removeprefix__doc__,
+"removeprefix($self, prefix, /)\n"
+"--\n"
+"\n"
+"Return a str with the given prefix string removed if present.\n"
+"\n"
+"If the string starts with the prefix string, return string[len(prefix):].\n"
+"Otherwise, return a copy of the original string.");
+
+#define UNICODE_REMOVEPREFIX_METHODDEF    \
+    {"removeprefix", (PyCFunction)unicode_removeprefix, METH_O, unicode_removeprefix__doc__},
+
+static PyObject *
+unicode_removeprefix_impl(PyObject *self, PyObject *prefix);
+
+static PyObject *
+unicode_removeprefix(PyObject *self, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    PyObject *prefix;
+
+    if (!PyUnicode_Check(arg)) {
+        _PyArg_BadArgument("removeprefix", "argument", "str", arg);
+        goto exit;
+    }
+    if (PyUnicode_READY(arg) == -1) {
+        goto exit;
+    }
+    prefix = arg;
+    return_value = unicode_removeprefix_impl(self, prefix);
+
+exit:
+    return return_value;
+}
+
+PyDoc_STRVAR(unicode_removesuffix__doc__,
+"removesuffix($self, suffix, /)\n"
+"--\n"
+"\n"
+"Return a str with the given suffix string removed if present.\n"
+"\n"
+"If the string ends with the suffix string and that suffix is not empty,\n"
+"return string[:-len(suffix)]. Otherwise, return a copy of the original\n"
+"string.");
+
+#define UNICODE_REMOVESUFFIX_METHODDEF    \
+    {"removesuffix", (PyCFunction)unicode_removesuffix, METH_O, unicode_removesuffix__doc__},
+
+static PyObject *
+unicode_removesuffix_impl(PyObject *self, PyObject *suffix);
+
+static PyObject *
+unicode_removesuffix(PyObject *self, PyObject *arg)
+{
+    PyObject *return_value = NULL;
+    PyObject *suffix;
+
+    if (!PyUnicode_Check(arg)) {
+        _PyArg_BadArgument("removesuffix", "argument", "str", arg);
+        goto exit;
+    }
+    if (PyUnicode_READY(arg) == -1) {
+        goto exit;
+    }
+    suffix = arg;
+    return_value = unicode_removesuffix_impl(self, suffix);
+
+exit:
+    return return_value;
+}
+
 PyDoc_STRVAR(unicode_rjust__doc__,
 "rjust($self, width, fillchar=\' \', /)\n"
 "--\n"
@@ -1232,4 +1303,4 @@
 {
     return unicode_sizeof_impl(self);
 }
-/*[clinic end generated code: output=e4ed33400979c7e8 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b91233f3722643be input=a9049054013a1b77]*/
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 522e1a9..7376359 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -3,9 +3,10 @@
 #include "Python.h"
 #include "code.h"
 #include "opcode.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "pycore_code.h"
-#include "pycore_pystate.h"
+#include "pycore_interp.h"        // PyInterpreterState.co_extra_freefuncs
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
 #include "pycore_tupleobject.h"
 #include "clinic/codeobject.c.h"
 
@@ -38,7 +39,7 @@
     return 1;
 }
 
-static void
+static int
 intern_strings(PyObject *tuple)
 {
     Py_ssize_t i;
@@ -46,60 +47,70 @@
     for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
         PyObject *v = PyTuple_GET_ITEM(tuple, i);
         if (v == NULL || !PyUnicode_CheckExact(v)) {
-            Py_FatalError("non-string found in code slot");
+            PyErr_SetString(PyExc_SystemError,
+                            "non-string found in code slot");
+            return -1;
         }
         PyUnicode_InternInPlace(&_PyTuple_ITEMS(tuple)[i]);
     }
+    return 0;
 }
 
 /* Intern selected string constants */
 static int
-intern_string_constants(PyObject *tuple)
+intern_string_constants(PyObject *tuple, int *modified)
 {
-    int modified = 0;
-    Py_ssize_t i;
-
-    for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
+    for (Py_ssize_t i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
         PyObject *v = PyTuple_GET_ITEM(tuple, i);
         if (PyUnicode_CheckExact(v)) {
             if (PyUnicode_READY(v) == -1) {
-                PyErr_Clear();
-                continue;
+                return -1;
             }
+
             if (all_name_chars(v)) {
                 PyObject *w = v;
                 PyUnicode_InternInPlace(&v);
                 if (w != v) {
                     PyTuple_SET_ITEM(tuple, i, v);
-                    modified = 1;
+                    if (modified) {
+                        *modified = 1;
+                    }
                 }
             }
         }
         else if (PyTuple_CheckExact(v)) {
-            intern_string_constants(v);
+            if (intern_string_constants(v, NULL) < 0) {
+                return -1;
+            }
         }
         else if (PyFrozenSet_CheckExact(v)) {
             PyObject *w = v;
             PyObject *tmp = PySequence_Tuple(v);
             if (tmp == NULL) {
-                PyErr_Clear();
-                continue;
+                return -1;
             }
-            if (intern_string_constants(tmp)) {
+            int tmp_modified = 0;
+            if (intern_string_constants(tmp, &tmp_modified) < 0) {
+                Py_DECREF(tmp);
+                return -1;
+            }
+            if (tmp_modified) {
                 v = PyFrozenSet_New(tmp);
                 if (v == NULL) {
-                    PyErr_Clear();
+                    Py_DECREF(tmp);
+                    return -1;
                 }
-                else {
-                    PyTuple_SET_ITEM(tuple, i, v);
-                    Py_DECREF(w);
-                    modified = 1;
+
+                PyTuple_SET_ITEM(tuple, i, v);
+                Py_DECREF(w);
+                if (modified) {
+                    *modified = 1;
                 }
             }
             Py_DECREF(tmp);
         }
     }
-    return modified;
+    return 0;
 }
 
 PyCodeObject *
@@ -139,11 +150,21 @@
         return NULL;
     }
 
-    intern_strings(names);
-    intern_strings(varnames);
-    intern_strings(freevars);
-    intern_strings(cellvars);
-    intern_string_constants(consts);
+    if (intern_strings(names) < 0) {
+        return NULL;
+    }
+    if (intern_strings(varnames) < 0) {
+        return NULL;
+    }
+    if (intern_strings(freevars) < 0) {
+        return NULL;
+    }
+    if (intern_strings(cellvars) < 0) {
+        return NULL;
+    }
+    if (intern_string_constants(consts, NULL) < 0) {
+        return NULL;
+    }
 
     /* Check for any inner or outer closure references */
     n_cellvars = PyTuple_GET_SIZE(cellvars);
@@ -199,7 +220,7 @@
             cell2arg = NULL;
         }
     }
-    co = PyObject_NEW(PyCodeObject, &PyCode_Type);
+    co = PyObject_New(PyCodeObject, &PyCode_Type);
     if (co == NULL) {
         if (cell2arg)
             PyMem_FREE(cell2arg);
@@ -396,7 +417,7 @@
                 PyExc_TypeError,
                 "name tuples must contain only "
                 "strings, not '%.500s'",
-                item->ob_type->tp_name);
+                Py_TYPE(item)->tp_name);
             Py_DECREF(newtuple);
             return NULL;
         }
@@ -513,7 +534,7 @@
                                                ourvarnames, ourfreevars,
                                                ourcellvars, filename,
                                                name, firstlineno, lnotab);
-  cleanup: 
+  cleanup:
     Py_XDECREF(ournames);
     Py_XDECREF(ourvarnames);
     Py_XDECREF(ourfreevars);
@@ -534,7 +555,7 @@
     co->co_opcache_size = 0;
 
     if (co->co_extra != NULL) {
-        PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+        PyInterpreterState *interp = _PyInterpreterState_GET();
         _PyCodeObjectExtra *co_extra = co->co_extra;
 
         for (Py_ssize_t i = 0; i < co_extra->ce_size; i++) {
@@ -1053,7 +1074,7 @@
 int
 _PyCode_SetExtra(PyObject *code, Py_ssize_t index, void *extra)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
 
     if (!PyCode_Check(code) || index < 0 ||
             index >= interp->co_extra_user_count) {
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index e01409b..a490377 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -6,7 +6,7 @@
 /* Submitted by Jim Hugunin */
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 /*[clinic input]
 class complex "PyComplexObject *" "&PyComplex_Type"
@@ -296,7 +296,7 @@
         if (!PyComplex_Check(res)) {
             PyErr_Format(PyExc_TypeError,
                 "__complex__ returned non-complex (type %.200s)",
-                res->ob_type->tp_name);
+                Py_TYPE(res)->tp_name);
             Py_DECREF(res);
             return NULL;
         }
@@ -305,7 +305,7 @@
                 "__complex__ returned non-complex (type %.200s).  "
                 "The ability to return an instance of a strict subclass of complex "
                 "is deprecated, and may be removed in a future version of Python.",
-                res->ob_type->tp_name)) {
+                Py_TYPE(res)->tp_name)) {
             Py_DECREF(res);
             return NULL;
         }
@@ -466,9 +466,7 @@
     Py_complex a, b;
     TO_COMPLEX(v, a);
     TO_COMPLEX(w, b);
-    PyFPE_START_PROTECT("complex_add", return 0)
     result = _Py_c_sum(a, b);
-    PyFPE_END_PROTECT(result)
     return PyComplex_FromCComplex(result);
 }
 
@@ -479,9 +477,7 @@
     Py_complex a, b;
     TO_COMPLEX(v, a);
     TO_COMPLEX(w, b);
-    PyFPE_START_PROTECT("complex_sub", return 0)
     result = _Py_c_diff(a, b);
-    PyFPE_END_PROTECT(result)
     return PyComplex_FromCComplex(result);
 }
 
@@ -492,9 +488,7 @@
     Py_complex a, b;
     TO_COMPLEX(v, a);
     TO_COMPLEX(w, b);
-    PyFPE_START_PROTECT("complex_mul", return 0)
     result = _Py_c_prod(a, b);
-    PyFPE_END_PROTECT(result)
     return PyComplex_FromCComplex(result);
 }
 
@@ -505,10 +499,8 @@
     Py_complex a, b;
     TO_COMPLEX(v, a);
     TO_COMPLEX(w, b);
-    PyFPE_START_PROTECT("complex_div", return 0)
     errno = 0;
     quot = _Py_c_quot(a, b);
-    PyFPE_END_PROTECT(quot)
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ZeroDivisionError, "complex division by zero");
         return NULL;
@@ -547,7 +539,6 @@
         PyErr_SetString(PyExc_ValueError, "complex modulo");
         return NULL;
     }
-    PyFPE_START_PROTECT("complex_pow", return 0)
     errno = 0;
     exponent = b;
     int_exponent = (long)exponent.real;
@@ -556,7 +547,6 @@
     else
         p = _Py_c_pow(a, exponent);
 
-    PyFPE_END_PROTECT(p)
     Py_ADJUST_ERANGE2(p.real, p.imag);
     if (errno == EDOM) {
         PyErr_SetString(PyExc_ZeroDivisionError,
@@ -604,9 +594,7 @@
 {
     double result;
 
-    PyFPE_START_PROTECT("complex_abs", return 0)
     result = _Py_c_abs(v->cval);
-    PyFPE_END_PROTECT(result)
 
     if (errno == ERANGE) {
         PyErr_SetString(PyExc_OverflowError,
@@ -970,7 +958,7 @@
         return NULL;
     }
 
-    nbr = r->ob_type->tp_as_number;
+    nbr = Py_TYPE(r)->tp_as_number;
     if (nbr == NULL || (nbr->nb_float == NULL && nbr->nb_index == NULL)) {
         PyErr_Format(PyExc_TypeError,
                      "complex() first argument must be a string or a number, "
@@ -982,7 +970,7 @@
         return NULL;
     }
     if (i != NULL) {
-        nbi = i->ob_type->tp_as_number;
+        nbi = Py_TYPE(i)->tp_as_number;
         if (nbi == NULL || (nbi->nb_float == NULL && nbi->nb_index == NULL)) {
             PyErr_Format(PyExc_TypeError,
                          "complex() second argument must be a number, "
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index 729f42c..fce9cdd 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -1,10 +1,13 @@
 /* Descriptors -- a new, flexible way to describe attributes */
 
 #include "Python.h"
+#include "pycore_ceval.h"        // _Py_EnterRecursiveCall()
 #include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"      // _PyThreadState_GET()
 #include "pycore_tupleobject.h"
-#include "structmember.h" /* Why is this not included in Python.h? */
+#include "structmember.h"         // PyMemberDef
+
+_Py_IDENTIFIER(getattr);
 
 /*[clinic input]
 class mappingproxy "mappingproxyobject *" "&PyDictProxy_Type"
@@ -82,7 +85,7 @@
                      "doesn't apply to a '%.100s' object",
                      descr_name((PyDescrObject *)descr), "?",
                      descr->d_type->tp_name,
-                     obj->ob_type->tp_name);
+                     Py_TYPE(obj)->tp_name);
         *pres = NULL;
         return 1;
     }
@@ -95,7 +98,7 @@
     /* Ensure a valid type.  Class methods ignore obj. */
     if (type == NULL) {
         if (obj != NULL)
-            type = (PyObject *)obj->ob_type;
+            type = (PyObject *)Py_TYPE(obj);
         else {
             /* Wot - no type?! */
             PyErr_Format(PyExc_TypeError,
@@ -112,7 +115,7 @@
                      "needs a type, not a '%.100s' as arg 2",
                      descr_name((PyDescrObject *)descr), "?",
                      PyDescr_TYPE(descr)->tp_name,
-                     type->ob_type->tp_name);
+                     Py_TYPE(type)->tp_name);
         return NULL;
     }
     if (!PyType_IsSubtype((PyTypeObject *)type, PyDescr_TYPE(descr))) {
@@ -124,7 +127,11 @@
                      ((PyTypeObject *)type)->tp_name);
         return NULL;
     }
-    return PyCFunction_NewEx(descr->d_method, type, NULL);
+    PyTypeObject *cls = NULL;
+    if (descr->d_method->ml_flags & METH_METHOD) {
+        cls = descr->d_common.d_type;
+    }
+    return PyCMethod_New(descr->d_method, type, NULL, cls);
 }
 
 static PyObject *
@@ -134,7 +141,19 @@
 
     if (descr_check((PyDescrObject *)descr, obj, &res))
         return res;
-    return PyCFunction_NewEx(descr->d_method, obj, NULL);
+    if (descr->d_method->ml_flags & METH_METHOD) {
+        if (PyType_Check(type)) {
+            return PyCMethod_New(descr->d_method, obj, NULL, descr->d_common.d_type);
+        } else {
+            PyErr_Format(PyExc_TypeError,
+                        "descriptor '%V' needs a type, not '%s', as arg 2",
+                        descr_name((PyDescrObject *)descr),
+                        Py_TYPE(type)->tp_name);
+            return NULL;
+        }
+    } else {
+        return PyCFunction_NewEx(descr->d_method, obj, NULL);
+    }
 }
 
 static PyObject *
@@ -192,7 +211,7 @@
                      "doesn't apply to a '%.100s' object",
                      descr_name(descr), "?",
                      descr->d_type->tp_name,
-                     obj->ob_type->tp_name);
+                     Py_TYPE(obj)->tp_name);
         *pres = -1;
         return 1;
     }
@@ -231,49 +250,42 @@
  *
  * First, common helpers
  */
-static const char *
-get_name(PyObject *func) {
-    assert(PyObject_TypeCheck(func, &PyMethodDescr_Type));
-    return ((PyMethodDescrObject *)func)->d_method->ml_name;
-}
-
-typedef void (*funcptr)(void);
-
 static inline int
 method_check_args(PyObject *func, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     assert(!PyErr_Occurred());
-    assert(PyObject_TypeCheck(func, &PyMethodDescr_Type));
     if (nargs < 1) {
-        PyErr_Format(PyExc_TypeError,
-                     "descriptor '%.200s' of '%.100s' "
-                     "object needs an argument",
-                     get_name(func), PyDescr_TYPE(func)->tp_name);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            PyErr_Format(PyExc_TypeError,
+                         "unbound method %U needs an argument", funcstr);
+            Py_DECREF(funcstr);
+        }
         return -1;
     }
     PyObject *self = args[0];
-    if (!_PyObject_RealIsSubclass((PyObject *)Py_TYPE(self),
-                                  (PyObject *)PyDescr_TYPE(func)))
-    {
-        PyErr_Format(PyExc_TypeError,
-                     "descriptor '%.200s' for '%.100s' objects "
-                     "doesn't apply to a '%.100s' object",
-                     get_name(func), PyDescr_TYPE(func)->tp_name,
-                     Py_TYPE(self)->tp_name);
+    PyObject *dummy;
+    if (descr_check((PyDescrObject *)func, self, &dummy)) {
         return -1;
     }
     if (kwnames && PyTuple_GET_SIZE(kwnames)) {
-        PyErr_Format(PyExc_TypeError,
-                     "%.200s() takes no keyword arguments", get_name(func));
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            PyErr_Format(PyExc_TypeError,
+                         "%U takes no keyword arguments", funcstr);
+            Py_DECREF(funcstr);
+        }
         return -1;
     }
     return 0;
 }
 
+typedef void (*funcptr)(void);
+
 static inline funcptr
-method_enter_call(PyObject *func)
+method_enter_call(PyThreadState *tstate, PyObject *func)
 {
-    if (Py_EnterRecursiveCall(" while calling a Python object")) {
+    if (_Py_EnterRecursiveCall(tstate, " while calling a Python object")) {
         return NULL;
     }
     return (funcptr)((PyMethodDescrObject *)func)->d_method->ml_meth;
@@ -284,6 +296,7 @@
 method_vectorcall_VARARGS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (method_check_args(func, args, nargs, kwnames)) {
         return NULL;
@@ -292,14 +305,14 @@
     if (argstuple == NULL) {
         return NULL;
     }
-    PyCFunction meth = (PyCFunction)method_enter_call(func);
+    PyCFunction meth = (PyCFunction)method_enter_call(tstate, func);
     if (meth == NULL) {
         Py_DECREF(argstuple);
         return NULL;
     }
     PyObject *result = meth(args[0], argstuple);
     Py_DECREF(argstuple);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -307,6 +320,7 @@
 method_vectorcall_VARARGS_KEYWORDS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (method_check_args(func, args, nargs, NULL)) {
         return NULL;
@@ -325,12 +339,12 @@
         }
     }
     PyCFunctionWithKeywords meth = (PyCFunctionWithKeywords)
-                                   method_enter_call(func);
+                                   method_enter_call(tstate, func);
     if (meth == NULL) {
         goto exit;
     }
     result = meth(args[0], argstuple, kwdict);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
 exit:
     Py_DECREF(argstuple);
     Py_XDECREF(kwdict);
@@ -338,20 +352,41 @@
 }
 
 static PyObject *
+method_vectorcall_FASTCALL_KEYWORDS_METHOD(
+    PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (method_check_args(func, args, nargs, NULL)) {
+        return NULL;
+    }
+    PyCMethod meth = (PyCMethod) method_enter_call(tstate, func);
+    if (meth == NULL) {
+        return NULL;
+    }
+    PyObject *result = meth(args[0],
+                            ((PyMethodDescrObject *)func)->d_common.d_type,
+                            args+1, nargs-1, kwnames);
+    Py_LeaveRecursiveCall();
+    return result;
+}
+
+static PyObject *
 method_vectorcall_FASTCALL(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (method_check_args(func, args, nargs, kwnames)) {
         return NULL;
     }
     _PyCFunctionFast meth = (_PyCFunctionFast)
-                            method_enter_call(func);
+                            method_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(args[0], args+1, nargs-1);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -359,17 +394,18 @@
 method_vectorcall_FASTCALL_KEYWORDS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (method_check_args(func, args, nargs, NULL)) {
         return NULL;
     }
     _PyCFunctionFastWithKeywords meth = (_PyCFunctionFastWithKeywords)
-                                        method_enter_call(func);
+                                        method_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(args[0], args+1, nargs-1, kwnames);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -377,21 +413,26 @@
 method_vectorcall_NOARGS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (method_check_args(func, args, nargs, kwnames)) {
         return NULL;
     }
     if (nargs != 1) {
-        PyErr_Format(PyExc_TypeError,
-            "%.200s() takes no arguments (%zd given)", get_name(func), nargs-1);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            PyErr_Format(PyExc_TypeError,
+                "%U takes no arguments (%zd given)", funcstr, nargs-1);
+            Py_DECREF(funcstr);
+        }
         return NULL;
     }
-    PyCFunction meth = (PyCFunction)method_enter_call(func);
+    PyCFunction meth = (PyCFunction)method_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(args[0], NULL);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -399,36 +440,44 @@
 method_vectorcall_O(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (method_check_args(func, args, nargs, kwnames)) {
         return NULL;
     }
     if (nargs != 2) {
-        PyErr_Format(PyExc_TypeError,
-            "%.200s() takes exactly one argument (%zd given)",
-            get_name(func), nargs-1);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            PyErr_Format(PyExc_TypeError,
+                "%U takes exactly one argument (%zd given)",
+                funcstr, nargs-1);
+            Py_DECREF(funcstr);
+        }
         return NULL;
     }
-    PyCFunction meth = (PyCFunction)method_enter_call(func);
+    PyCFunction meth = (PyCFunction)method_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(args[0], args[1]);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
 
+/* Instances of classmethod_descriptor are unlikely to be called directly.
+   For one, the analogous class "classmethod" (for Python classes) is not
+   callable. Second, users are not likely to access a classmethod_descriptor
+   directly, since it means pulling it from the class __dict__.
+
+   This is just an excuse to say that this doesn't need to be optimized:
+   we implement this simply by calling __get__ and then calling the result.
+*/
 static PyObject *
 classmethoddescr_call(PyMethodDescrObject *descr, PyObject *args,
                       PyObject *kwds)
 {
-    Py_ssize_t argc;
-    PyObject *self, *result;
-
-    /* Make sure that the first argument is acceptable as 'self' */
-    assert(PyTuple_Check(args));
-    argc = PyTuple_GET_SIZE(args);
+    Py_ssize_t argc = PyTuple_GET_SIZE(args);
     if (argc < 1) {
         PyErr_Format(PyExc_TypeError,
                      "descriptor '%V' of '%.100s' "
@@ -437,30 +486,15 @@
                      PyDescr_TYPE(descr)->tp_name);
         return NULL;
     }
-    self = PyTuple_GET_ITEM(args, 0);
-    if (!PyType_Check(self)) {
-        PyErr_Format(PyExc_TypeError,
-                     "descriptor '%V' requires a type "
-                     "but received a '%.100s' instance",
-                     descr_name((PyDescrObject *)descr), "?",
-                     self->ob_type->tp_name);
+    PyObject *self = PyTuple_GET_ITEM(args, 0);
+    PyObject *bound = classmethod_get(descr, NULL, self);
+    if (bound == NULL) {
         return NULL;
     }
-    if (!PyType_IsSubtype((PyTypeObject *)self, PyDescr_TYPE(descr))) {
-        PyErr_Format(PyExc_TypeError,
-                     "descriptor '%V' requires a subtype of '%.100s' "
-                     "but received '%.100s'",
-                     descr_name((PyDescrObject *)descr), "?",
-                     PyDescr_TYPE(descr)->tp_name,
-                     ((PyTypeObject*)self)->tp_name);
-        return NULL;
-    }
-
-    result = _PyMethodDef_RawFastCallDict(descr->d_method, self,
-                                          &_PyTuple_ITEMS(args)[1], argc - 1,
-                                          kwds);
-    result = _Py_CheckFunctionResult((PyObject *)descr, result, NULL);
-    return result;
+    PyObject *res = PyObject_VectorcallDict(bound, _PyTuple_ITEMS(args)+1,
+                                           argc-1, kwds);
+    Py_DECREF(bound);
+    return res;
 }
 
 Py_LOCAL_INLINE(PyObject *)
@@ -509,7 +543,7 @@
                      "but received a '%.100s'",
                      descr_name((PyDescrObject *)descr), "?",
                      PyDescr_TYPE(descr)->tp_name,
-                     self->ob_type->tp_name);
+                     Py_TYPE(self)->tp_name);
         return NULL;
     }
 
@@ -576,7 +610,6 @@
 static PyObject *
 descr_reduce(PyDescrObject *descr, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(getattr);
     return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
                          PyDescr_TYPE(descr), PyDescr_NAME(descr));
 }
@@ -677,7 +710,7 @@
     0,                                          /* tp_setattro */
     0,                                          /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-    _Py_TPFLAGS_HAVE_VECTORCALL |
+    Py_TPFLAGS_HAVE_VECTORCALL |
     Py_TPFLAGS_METHOD_DESCRIPTOR,               /* tp_flags */
     0,                                          /* tp_doc */
     descr_traverse,                             /* tp_traverse */
@@ -871,7 +904,8 @@
 {
     /* Figure out correct vectorcall function to use */
     vectorcallfunc vectorcall;
-    switch (method->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS))
+    switch (method->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
+                                METH_O | METH_KEYWORDS | METH_METHOD))
     {
         case METH_VARARGS:
             vectorcall = method_vectorcall_VARARGS;
@@ -891,6 +925,9 @@
         case METH_O:
             vectorcall = method_vectorcall_O;
             break;
+        case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
+            vectorcall = method_vectorcall_FASTCALL_KEYWORDS_METHOD;
+            break;
         default:
             PyErr_Format(PyExc_SystemError,
                          "%s() method: bad call flags", method->ml_name);
@@ -987,6 +1024,30 @@
     0,                                          /* mp_ass_subscript */
 };
 
+static PyObject *
+mappingproxy_or(PyObject *left, PyObject *right)
+{
+    if (PyObject_TypeCheck(left, &PyDictProxy_Type)) {
+        left = ((mappingproxyobject*)left)->mapping;
+    }
+    if (PyObject_TypeCheck(right, &PyDictProxy_Type)) {
+        right = ((mappingproxyobject*)right)->mapping;
+    }
+    return PyNumber_Or(left, right);
+}
+
+static PyObject *
+mappingproxy_ior(PyObject *self, PyObject *Py_UNUSED(other))
+{
+    return PyErr_Format(PyExc_TypeError,
+        "'|=' is not supported by %s; use '|' instead", Py_TYPE(self)->tp_name);
+}
+
+static PyNumberMethods mappingproxy_as_number = {
+    .nb_or = mappingproxy_or,
+    .nb_inplace_or = mappingproxy_ior,
+};
+
 static int
 mappingproxy_contains(mappingproxyobject *pp, PyObject *key)
 {
@@ -1010,50 +1071,64 @@
 };
 
 static PyObject *
-mappingproxy_get(mappingproxyobject *pp, PyObject *args)
+mappingproxy_get(mappingproxyobject *pp, PyObject *const *args, Py_ssize_t nargs)
 {
-    PyObject *key, *def = Py_None;
-    _Py_IDENTIFIER(get);
+    /* newargs: mapping, key, default=None */
+    PyObject *newargs[3];
+    newargs[0] = pp->mapping;
+    newargs[2] = Py_None;
 
-    if (!PyArg_UnpackTuple(args, "get", 1, 2, &key, &def))
+    if (!_PyArg_UnpackStack(args, nargs, "get", 1, 2,
+                            &newargs[1], &newargs[2]))
+    {
         return NULL;
-    return _PyObject_CallMethodIdObjArgs(pp->mapping, &PyId_get,
-                                         key, def, NULL);
+    }
+    _Py_IDENTIFIER(get);
+    return _PyObject_VectorcallMethodId(&PyId_get, newargs,
+                                        3 | PY_VECTORCALL_ARGUMENTS_OFFSET,
+                                        NULL);
 }
 
 static PyObject *
 mappingproxy_keys(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(keys);
-    return _PyObject_CallMethodId(pp->mapping, &PyId_keys, NULL);
+    return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_keys);
 }
 
 static PyObject *
 mappingproxy_values(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(values);
-    return _PyObject_CallMethodId(pp->mapping, &PyId_values, NULL);
+    return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_values);
 }
 
 static PyObject *
 mappingproxy_items(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(items);
-    return _PyObject_CallMethodId(pp->mapping, &PyId_items, NULL);
+    return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_items);
 }
 
 static PyObject *
 mappingproxy_copy(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(copy);
-    return _PyObject_CallMethodId(pp->mapping, &PyId_copy, NULL);
+    return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_copy);
+}
+
+static PyObject *
+mappingproxy_reversed(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored))
+{
+    _Py_IDENTIFIER(__reversed__);
+    return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId___reversed__);
 }
 
 /* WARNING: mappingproxy methods must not give access
             to the underlying mapping */
 
 static PyMethodDef mappingproxy_methods[] = {
-    {"get",       (PyCFunction)mappingproxy_get,        METH_VARARGS,
+    {"get",       (PyCFunction)(void(*)(void))mappingproxy_get, METH_FASTCALL,
      PyDoc_STR("D.get(k[,d]) -> D[k] if k in D, else d."
                "  d defaults to None.")},
     {"keys",      (PyCFunction)mappingproxy_keys,       METH_NOARGS,
@@ -1064,6 +1139,10 @@
      PyDoc_STR("D.items() -> list of D's (key, value) pairs, as 2-tuples")},
     {"copy",      (PyCFunction)mappingproxy_copy,       METH_NOARGS,
      PyDoc_STR("D.copy() -> a shallow copy of D")},
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS,
+     PyDoc_STR("See PEP 585")},
+    {"__reversed__", (PyCFunction)mappingproxy_reversed, METH_NOARGS,
+     PyDoc_STR("D.__reversed__() -> reverse iterator")},
     {0}
 };
 
@@ -1176,7 +1255,7 @@
     PyObject *self;
 } wrapperobject;
 
-#define Wrapper_Check(v) (Py_TYPE(v) == &_PyMethodWrapper_Type)
+#define Wrapper_Check(v) Py_IS_TYPE(v, &_PyMethodWrapper_Type)
 
 static void
 wrapper_dealloc(wrapperobject *wp)
@@ -1232,14 +1311,13 @@
 {
     return PyUnicode_FromFormat("<method-wrapper '%s' of %s object at %p>",
                                wp->descr->d_base->name,
-                               wp->self->ob_type->tp_name,
+                               Py_TYPE(wp->self)->tp_name,
                                wp->self);
 }
 
 static PyObject *
 wrapper_reduce(wrapperobject *wp, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(getattr);
     return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
                          wp->self, PyDescr_NAME(wp->descr));
 }
@@ -1475,7 +1553,7 @@
     Py_XDECREF(gs->prop_set);
     Py_XDECREF(gs->prop_del);
     Py_XDECREF(gs->prop_doc);
-    self->ob_type->tp_free(self);
+    Py_TYPE(self)->tp_free(self);
 }
 
 static PyObject *
@@ -1492,8 +1570,7 @@
         return NULL;
     }
 
-    PyObject *args[1] = {obj};
-    return _PyObject_FastCall(gs->prop_get, args, 1);
+    return PyObject_CallOneArg(gs->prop_get, obj);
 }
 
 static int
@@ -1514,7 +1591,7 @@
         return -1;
     }
     if (value == NULL)
-        res = PyObject_CallFunctionObjArgs(func, obj, NULL);
+        res = PyObject_CallOneArg(func, obj);
     else
         res = PyObject_CallFunctionObjArgs(func, obj, value, NULL);
     if (res == NULL)
@@ -1628,7 +1705,7 @@
         if (rc <= 0) {
             return rc;
         }
-        if (Py_TYPE(self) == &PyProperty_Type) {
+        if (Py_IS_TYPE(self, &PyProperty_Type)) {
             Py_XSETREF(self->prop_doc, get_doc);
         }
         else {
@@ -1717,7 +1794,7 @@
     0,                                          /* tp_setattr */
     0,                                          /* tp_as_async */
     (reprfunc)mappingproxy_repr,                /* tp_repr */
-    0,                                          /* tp_as_number */
+    &mappingproxy_as_number,                    /* tp_as_number */
     &mappingproxy_as_sequence,                  /* tp_as_sequence */
     &mappingproxy_as_mapping,                   /* tp_as_mapping */
     0,                                          /* tp_hash */
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 3c56f4a..faee6bc 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -111,10 +111,11 @@
 #define PyDict_MINSIZE 8
 
 #include "Python.h"
+#include "pycore_gc.h"       // _PyObject_GC_IS_TRACKED()
 #include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"  // _PyThreadState_GET()
 #include "dict-common.h"
-#include "stringlib/eq.h"    /* to get unicode_eq() */
+#include "stringlib/eq.h"    // unicode_eq()
 
 /*[clinic input]
 class dict "PyDictObject *" "&PyDict_Type"
@@ -249,42 +250,46 @@
 #ifndef PyDict_MAXFREELIST
 #define PyDict_MAXFREELIST 80
 #endif
+
+#if PyDict_MAXFREELIST > 0
 static PyDictObject *free_list[PyDict_MAXFREELIST];
 static int numfree = 0;
 static PyDictKeysObject *keys_free_list[PyDict_MAXFREELIST];
 static int numfreekeys = 0;
+#endif
 
 #include "clinic/dictobject.c.h"
 
-int
-PyDict_ClearFreeList(void)
+void
+_PyDict_ClearFreeList(void)
 {
-    PyDictObject *op;
-    int ret = numfree + numfreekeys;
+#if PyDict_MAXFREELIST > 0
     while (numfree) {
-        op = free_list[--numfree];
+        PyDictObject *op = free_list[--numfree];
         assert(PyDict_CheckExact(op));
         PyObject_GC_Del(op);
     }
     while (numfreekeys) {
         PyObject_FREE(keys_free_list[--numfreekeys]);
     }
-    return ret;
+#endif
 }
 
 /* Print summary info about the state of the optimized allocator */
 void
 _PyDict_DebugMallocStats(FILE *out)
 {
+#if PyDict_MAXFREELIST > 0
     _PyDebugAllocatorStats(out,
                            "free PyDictObject", numfree, sizeof(PyDictObject));
+#endif
 }
 
 
 void
-PyDict_Fini(void)
+_PyDict_Fini(void)
 {
-    PyDict_ClearFreeList();
+    _PyDict_ClearFreeList();
 }
 
 #define DK_SIZE(dk) ((dk)->dk_size)
@@ -311,7 +316,9 @@
 static inline void
 dictkeys_incref(PyDictKeysObject *dk)
 {
-    _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal++;
+#endif
     dk->dk_refcnt++;
 }
 
@@ -319,7 +326,9 @@
 dictkeys_decref(PyDictKeysObject *dk)
 {
     assert(dk->dk_refcnt > 0);
-    _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
+#endif
     if (--dk->dk_refcnt == 0) {
         free_keys_object(dk);
     }
@@ -327,27 +336,27 @@
 
 /* lookup indices.  returns DKIX_EMPTY, DKIX_DUMMY, or ix >=0 */
 static inline Py_ssize_t
-dictkeys_get_index(PyDictKeysObject *keys, Py_ssize_t i)
+dictkeys_get_index(const PyDictKeysObject *keys, Py_ssize_t i)
 {
     Py_ssize_t s = DK_SIZE(keys);
     Py_ssize_t ix;
 
     if (s <= 0xff) {
-        int8_t *indices = (int8_t*)(keys->dk_indices);
+        const int8_t *indices = (const int8_t*)(keys->dk_indices);
         ix = indices[i];
     }
     else if (s <= 0xffff) {
-        int16_t *indices = (int16_t*)(keys->dk_indices);
+        const int16_t *indices = (const int16_t*)(keys->dk_indices);
         ix = indices[i];
     }
 #if SIZEOF_VOID_P > 4
     else if (s > 0xffffffff) {
-        int64_t *indices = (int64_t*)(keys->dk_indices);
+        const int64_t *indices = (const int64_t*)(keys->dk_indices);
         ix = indices[i];
     }
 #endif
     else {
-        int32_t *indices = (int32_t*)(keys->dk_indices);
+        const int32_t *indices = (const int32_t*)(keys->dk_indices);
         ix = indices[i];
     }
     assert(ix >= DKIX_DUMMY);
@@ -551,10 +560,13 @@
         es = sizeof(Py_ssize_t);
     }
 
+#if PyDict_MAXFREELIST > 0
     if (size == PyDict_MINSIZE && numfreekeys > 0) {
         dk = keys_free_list[--numfreekeys];
     }
-    else {
+    else
+#endif
+    {
         dk = PyObject_MALLOC(sizeof(PyDictKeysObject)
                              + es * size
                              + sizeof(PyDictKeyEntry) * usable);
@@ -563,7 +575,9 @@
             return NULL;
         }
     }
-    _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal++;
+#endif
     dk->dk_refcnt = 1;
     dk->dk_size = size;
     dk->dk_usable = usable;
@@ -583,10 +597,12 @@
         Py_XDECREF(entries[i].me_key);
         Py_XDECREF(entries[i].me_value);
     }
+#if PyDict_MAXFREELIST > 0
     if (keys->dk_size == PyDict_MINSIZE && numfreekeys < PyDict_MAXFREELIST) {
         keys_free_list[numfreekeys++] = keys;
         return;
     }
+#endif
     PyObject_FREE(keys);
 }
 
@@ -599,13 +615,16 @@
 {
     PyDictObject *mp;
     assert(keys != NULL);
+#if PyDict_MAXFREELIST > 0
     if (numfree) {
         mp = free_list[--numfree];
         assert (mp != NULL);
-        assert (Py_TYPE(mp) == &PyDict_Type);
+        assert (Py_IS_TYPE(mp, &PyDict_Type));
         _Py_NewReference((PyObject *)mp);
     }
-    else {
+    else
+#endif
+    {
         mp = PyObject_GC_New(PyDictObject, &PyDict_Type);
         if (mp == NULL) {
             dictkeys_decref(keys);
@@ -687,10 +706,12 @@
     }
 
     /* Since we copied the keys table we now have an extra reference
-       in the system.  Manually call _Py_INC_REFTOTAL to signal that
+       in the system.  Manually call increment _Py_RefTotal to signal that
        we have it now; calling dictkeys_incref would be an error as
        keys->dk_refcnt is already set to 1 (after memcpy). */
-    _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal++;
+#endif
 
     return (PyObject *)new;
 }
@@ -1249,13 +1270,18 @@
 
         assert(oldkeys->dk_lookup != lookdict_split);
         assert(oldkeys->dk_refcnt == 1);
+#ifdef Py_REF_DEBUG
+        _Py_RefTotal--;
+#endif
+#if PyDict_MAXFREELIST > 0
         if (oldkeys->dk_size == PyDict_MINSIZE &&
-            numfreekeys < PyDict_MAXFREELIST) {
-            _Py_DEC_REFTOTAL;
+            numfreekeys < PyDict_MAXFREELIST)
+        {
             keys_free_list[numfreekeys++] = oldkeys;
         }
-        else {
-            _Py_DEC_REFTOTAL;
+        else
+#endif
+        {
             PyObject_FREE(oldkeys);
         }
     }
@@ -1460,7 +1486,9 @@
     kv = _PyUnicode_FromId(key); /* borrowed */
     if (kv == NULL)
         return NULL;
-    return PyDict_GetItemWithError(dp, kv);
+    Py_hash_t hash = ((PyASCIIObject *) kv)->hash;
+    assert (hash != -1);  /* interned strings have their hash value initialised */
+    return _PyDict_GetItem_KnownHash(dp, kv, hash);
 }
 
 PyObject *
@@ -1997,10 +2025,15 @@
         assert(keys->dk_refcnt == 1);
         dictkeys_decref(keys);
     }
-    if (numfree < PyDict_MAXFREELIST && Py_TYPE(mp) == &PyDict_Type)
+#if PyDict_MAXFREELIST > 0
+    if (numfree < PyDict_MAXFREELIST && Py_IS_TYPE(mp, &PyDict_Type)) {
         free_list[numfree++] = mp;
+    }
     else
+#endif
+    {
         Py_TYPE(mp)->tp_free((PyObject *)mp);
+    }
     Py_TRASHCAN_END
 }
 
@@ -2117,8 +2150,7 @@
             _Py_IDENTIFIER(__missing__);
             missing = _PyObject_LookupSpecial((PyObject *)mp, &PyId___missing__);
             if (missing != NULL) {
-                res = PyObject_CallFunctionObjArgs(missing,
-                                                   key, NULL);
+                res = PyObject_CallOneArg(missing, key);
                 Py_DECREF(missing);
                 return res;
             }
@@ -2311,6 +2343,25 @@
     return _PyDict_FromKeys((PyObject *)type, iterable, value);
 }
 
+/* Single-arg dict update; used by dict_update_common and operators. */
+static int
+dict_update_arg(PyObject *self, PyObject *arg)
+{
+    if (PyDict_CheckExact(arg)) {
+        return PyDict_Merge(self, arg, 1);
+    }
+    _Py_IDENTIFIER(keys);
+    PyObject *func;
+    if (_PyObject_LookupAttrId(arg, &PyId_keys, &func) < 0) {
+        return -1;
+    }
+    if (func != NULL) {
+        Py_DECREF(func);
+        return PyDict_Merge(self, arg, 1);
+    }
+    return PyDict_MergeFromSeq2(self, arg, 1);
+}
+
 static int
 dict_update_common(PyObject *self, PyObject *args, PyObject *kwds,
                    const char *methname)
@@ -2322,18 +2373,7 @@
         result = -1;
     }
     else if (arg != NULL) {
-        _Py_IDENTIFIER(keys);
-        PyObject *func;
-        if (_PyObject_LookupAttrId(arg, &PyId_keys, &func) < 0) {
-            result = -1;
-        }
-        else if (func != NULL) {
-            Py_DECREF(func);
-            result = PyDict_Merge(self, arg, 1);
-        }
-        else {
-            result = PyDict_MergeFromSeq2(self, arg, 1);
-        }
+        result = dict_update_arg(self, arg);
     }
 
     if (result == 0 && kwds != NULL) {
@@ -2993,37 +3033,23 @@
     Py_RETURN_NONE;
 }
 
-/*
-We don't use Argument Clinic for dict.pop because it doesn't support
-custom signature for now.
-*/
-PyDoc_STRVAR(dict_pop__doc__,
-"D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n\
-If key is not found, d is returned if given, otherwise KeyError is raised");
+/*[clinic input]
+dict.pop
 
-#define DICT_POP_METHODDEF    \
-    {"pop", (PyCFunction)(void(*)(void))dict_pop, METH_FASTCALL, dict_pop__doc__},
+    key: object
+    default: object = NULL
+    /
+
+D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+
+If key is not found, default is returned if given, otherwise KeyError is raised
+[clinic start generated code]*/
 
 static PyObject *
-dict_pop(PyDictObject *self, PyObject *const *args, Py_ssize_t nargs)
+dict_pop_impl(PyDictObject *self, PyObject *key, PyObject *default_value)
+/*[clinic end generated code: output=3abb47b89f24c21c input=eeebec7812190348]*/
 {
-    PyObject *return_value = NULL;
-    PyObject *key;
-    PyObject *default_value = NULL;
-
-    if (!_PyArg_CheckPositional("pop", nargs, 1, 2)) {
-        goto exit;
-    }
-    key = args[0];
-    if (nargs < 2) {
-        goto skip_optional;
-    }
-    default_value = args[1];
-skip_optional:
-    return_value = _PyDict_Pop((PyObject*)self, key, default_value);
-
-exit:
-    return return_value;
+    return _PyDict_Pop((PyObject*)self, key, default_value);
 }
 
 /*[clinic input]
@@ -3169,6 +3195,33 @@
     return PyLong_FromSsize_t(_PyDict_SizeOf(mp));
 }
 
+static PyObject *
+dict_or(PyObject *self, PyObject *other)
+{
+    if (!PyDict_Check(self) || !PyDict_Check(other)) {
+        Py_RETURN_NOTIMPLEMENTED;
+    }
+    PyObject *new = PyDict_Copy(self);
+    if (new == NULL) {
+        return NULL;
+    }
+    if (dict_update_arg(new, other)) {
+        Py_DECREF(new);
+        return NULL;
+    }
+    return new;
+}
+
+static PyObject *
+dict_ior(PyObject *self, PyObject *other)
+{
+    if (dict_update_arg(self, other)) {
+        return NULL;
+    }
+    Py_INCREF(self);
+    return self;
+}
+
 PyDoc_STRVAR(getitem__doc__, "x.__getitem__(y) <==> x[y]");
 
 PyDoc_STRVAR(sizeof__doc__,
@@ -3222,6 +3275,7 @@
     {"copy",            (PyCFunction)dict_copy,         METH_NOARGS,
      copy__doc__},
     DICT___REVERSED___METHODDEF
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
     {NULL,              NULL}   /* sentinel */
 };
 
@@ -3274,6 +3328,11 @@
     0,                          /* sq_inplace_repeat */
 };
 
+static PyNumberMethods dict_as_number = {
+    .nb_or = dict_or,
+    .nb_inplace_or = dict_ior,
+};
+
 static PyObject *
 dict_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
@@ -3308,6 +3367,38 @@
 }
 
 static PyObject *
+dict_vectorcall(PyObject *type, PyObject * const*args,
+                size_t nargsf, PyObject *kwnames)
+{
+    assert(PyType_Check(type));
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (!_PyArg_CheckPositional("dict", nargs, 0, 1)) {
+        return NULL;
+    }
+
+    PyObject *self = dict_new((PyTypeObject *)type, NULL, NULL);
+    if (self == NULL) {
+        return NULL;
+    }
+    if (nargs == 1) {
+        if (dict_update_arg(self, args[0]) < 0) {
+            Py_DECREF(self);
+            return NULL;
+        }
+        args++;
+    }
+    if (kwnames != NULL) {
+        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(kwnames); i++) {
+            if (PyDict_SetItem(self, PyTuple_GET_ITEM(kwnames, i), args[i]) < 0) {
+                Py_DECREF(self);
+                return NULL;
+            }
+        }
+    }
+    return self;
+}
+
+static PyObject *
 dict_iter(PyDictObject *dict)
 {
     return dictiter_new(dict, &PyDictIterKey_Type);
@@ -3335,7 +3426,7 @@
     0,                                          /* tp_setattr */
     0,                                          /* tp_as_async */
     (reprfunc)dict_repr,                        /* tp_repr */
-    0,                                          /* tp_as_number */
+    &dict_as_number,                            /* tp_as_number */
     &dict_as_sequence,                          /* tp_as_sequence */
     &dict_as_mapping,                           /* tp_as_mapping */
     PyObject_HashNotImplemented,                /* tp_hash */
@@ -3365,6 +3456,7 @@
     PyType_GenericAlloc,                        /* tp_alloc */
     dict_new,                                   /* tp_new */
     PyObject_GC_Del,                            /* tp_free */
+    .tp_vectorcall = dict_vectorcall,
 };
 
 PyObject *
@@ -3864,15 +3956,15 @@
     di->di_pos = i-1;
     di->len--;
 
-    if (Py_TYPE(di) == &PyDictRevIterKey_Type) {
+    if (Py_IS_TYPE(di, &PyDictRevIterKey_Type)) {
         Py_INCREF(key);
         return key;
     }
-    else if (Py_TYPE(di) == &PyDictRevIterValue_Type) {
+    else if (Py_IS_TYPE(di, &PyDictRevIterValue_Type)) {
         Py_INCREF(value);
         return value;
     }
-    else if (Py_TYPE(di) == &PyDictRevIterItem_Type) {
+    else if (Py_IS_TYPE(di, &PyDictRevIterItem_Type)) {
         Py_INCREF(key);
         Py_INCREF(value);
         result = di->di_result;
@@ -4015,7 +4107,7 @@
         /* XXX Get rid of this restriction later */
         PyErr_Format(PyExc_TypeError,
                      "%s() requires a dict argument, not '%s'",
-                     type->tp_name, dict->ob_type->tp_name);
+                     type->tp_name, Py_TYPE(dict)->tp_name);
         return NULL;
     }
     dv = PyObject_GC_New(_PyDictViewObject, type);
@@ -4174,17 +4266,34 @@
     (objobjproc)dictkeys_contains,      /* sq_contains */
 };
 
+// Create an set object from dictviews object.
+// Returns a new reference.
+// This utility function is used by set operations.
 static PyObject*
-dictviews_sub(PyObject* self, PyObject *other)
+dictviews_to_set(PyObject *self)
 {
-    PyObject *result = PySet_New(self);
-    PyObject *tmp;
-    _Py_IDENTIFIER(difference_update);
+    PyObject *left = self;
+    if (PyDictKeys_Check(self)) {
+        // PySet_New() has fast path for the dict object.
+        PyObject *dict = (PyObject *)((_PyDictViewObject *)self)->dv_dict;
+        if (PyDict_CheckExact(dict)) {
+            left = dict;
+        }
+    }
+    return PySet_New(left);
+}
 
-    if (result == NULL)
+static PyObject*
+dictviews_sub(PyObject *self, PyObject *other)
+{
+    PyObject *result = dictviews_to_set(self);
+    if (result == NULL) {
         return NULL;
+    }
 
-    tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_difference_update, other, NULL);
+    _Py_IDENTIFIER(difference_update);
+    PyObject *tmp = _PyObject_CallMethodIdOneArg(
+            result, &PyId_difference_update, other);
     if (tmp == NULL) {
         Py_DECREF(result);
         return NULL;
@@ -4194,57 +4303,120 @@
     return result;
 }
 
-PyObject*
+static int
+dictitems_contains(_PyDictViewObject *dv, PyObject *obj);
+
+PyObject *
 _PyDictView_Intersect(PyObject* self, PyObject *other)
 {
-    PyObject *result = PySet_New(self);
-    PyObject *tmp;
-    _Py_IDENTIFIER(intersection_update);
+    PyObject *result;
+    PyObject *it;
+    PyObject *key;
+    Py_ssize_t len_self;
+    int rv;
+    int (*dict_contains)(_PyDictViewObject *, PyObject *);
 
+    /* Python interpreter swaps parameters when dict view
+       is on right side of & */
+    if (!PyDictViewSet_Check(self)) {
+        PyObject *tmp = other;
+        other = self;
+        self = tmp;
+    }
+
+    len_self = dictview_len((_PyDictViewObject *)self);
+
+    /* if other is a set and self is smaller than other,
+       reuse set intersection logic */
+    if (Py_IS_TYPE(other, &PySet_Type) && len_self <= PyObject_Size(other)) {
+        _Py_IDENTIFIER(intersection);
+        return _PyObject_CallMethodIdObjArgs(other, &PyId_intersection, self, NULL);
+    }
+
+    /* if other is another dict view, and it is bigger than self,
+       swap them */
+    if (PyDictViewSet_Check(other)) {
+        Py_ssize_t len_other = dictview_len((_PyDictViewObject *)other);
+        if (len_other > len_self) {
+            PyObject *tmp = other;
+            other = self;
+            self = tmp;
+        }
+    }
+
+    /* at this point, two things should be true
+       1. self is a dictview
+       2. if other is a dictview then it is smaller than self */
+    result = PySet_New(NULL);
     if (result == NULL)
         return NULL;
 
-    tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_intersection_update, other, NULL);
-    if (tmp == NULL) {
+    it = PyObject_GetIter(other);
+    if (it == NULL) {
         Py_DECREF(result);
         return NULL;
     }
 
-    Py_DECREF(tmp);
+    if (PyDictKeys_Check(self)) {
+        dict_contains = dictkeys_contains;
+    }
+    /* else PyDictItems_Check(self) */
+    else {
+        dict_contains = dictitems_contains;
+    }
+
+    while ((key = PyIter_Next(it)) != NULL) {
+        rv = dict_contains((_PyDictViewObject *)self, key);
+        if (rv < 0) {
+            goto error;
+        }
+        if (rv) {
+            if (PySet_Add(result, key)) {
+                goto error;
+            }
+        }
+        Py_DECREF(key);
+    }
+    Py_DECREF(it);
+    if (PyErr_Occurred()) {
+        Py_DECREF(result);
+        return NULL;
+    }
     return result;
+
+error:
+    Py_DECREF(it);
+    Py_DECREF(result);
+    Py_DECREF(key);
+    return NULL;
 }
 
 static PyObject*
 dictviews_or(PyObject* self, PyObject *other)
 {
-    PyObject *result = PySet_New(self);
-    PyObject *tmp;
-    _Py_IDENTIFIER(update);
-
-    if (result == NULL)
-        return NULL;
-
-    tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_update, other, NULL);
-    if (tmp == NULL) {
-        Py_DECREF(result);
+    PyObject *result = dictviews_to_set(self);
+    if (result == NULL) {
         return NULL;
     }
 
-    Py_DECREF(tmp);
+    if (_PySet_Update(result, other) < 0) {
+        Py_DECREF(result);
+        return NULL;
+    }
     return result;
 }
 
 static PyObject*
 dictviews_xor(PyObject* self, PyObject *other)
 {
-    PyObject *result = PySet_New(self);
-    PyObject *tmp;
-    _Py_IDENTIFIER(symmetric_difference_update);
-
-    if (result == NULL)
+    PyObject *result = dictviews_to_set(self);
+    if (result == NULL) {
         return NULL;
+    }
 
-    tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_symmetric_difference_update, other, NULL);
+    _Py_IDENTIFIER(symmetric_difference_update);
+    PyObject *tmp = _PyObject_CallMethodIdOneArg(
+            result, &PyId_symmetric_difference_update, other);
     if (tmp == NULL) {
         Py_DECREF(result);
         return NULL;
@@ -4417,7 +4589,7 @@
         return 0;
     }
     Py_INCREF(found);
-    result = PyObject_RichCompareBool(value, found, Py_EQ);
+    result = PyObject_RichCompareBool(found, value, Py_EQ);
     Py_DECREF(found);
     return result;
 }
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index 4786297..4a83bb4 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -122,7 +122,7 @@
     }
     en->en_longindex = stepped_up;
 
-    if (result->ob_refcnt == 1) {
+    if (Py_REFCNT(result) == 1) {
         Py_INCREF(result);
         old_index = PyTuple_GET_ITEM(result, 0);
         old_item = PyTuple_GET_ITEM(result, 1);
@@ -167,7 +167,7 @@
     }
     en->en_index++;
 
-    if (result->ob_refcnt == 1) {
+    if (Py_REFCNT(result) == 1) {
         Py_INCREF(result);
         old_index = PyTuple_GET_ITEM(result, 0);
         old_item = PyTuple_GET_ITEM(result, 1);
@@ -201,6 +201,8 @@
 
 static PyMethodDef enum_methods[] = {
     {"__reduce__", (PyCFunction)enum_reduce, METH_NOARGS, reduce_doc},
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL,              NULL}           /* sentinel */
 };
 
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index 38723d9..e44ce72 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -8,10 +8,8 @@
 #include <Python.h>
 #include "pycore_initconfig.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
-#include "osdefs.h"
+#include "structmember.h"         // PyMemberDef
+#include "osdefs.h"               // SEP
 
 
 /* Compatibility aliases */
@@ -306,22 +304,33 @@
 };
 
 
+static inline PyBaseExceptionObject*
+_PyBaseExceptionObject_cast(PyObject *exc)
+{
+    assert(PyExceptionInstance_Check(exc));
+    return (PyBaseExceptionObject *)exc;
+}
+
+
 PyObject *
-PyException_GetTraceback(PyObject *self) {
-    PyBaseExceptionObject *base_self = (PyBaseExceptionObject *)self;
+PyException_GetTraceback(PyObject *self)
+{
+    PyBaseExceptionObject *base_self = _PyBaseExceptionObject_cast(self);
     Py_XINCREF(base_self->traceback);
     return base_self->traceback;
 }
 
 
 int
-PyException_SetTraceback(PyObject *self, PyObject *tb) {
-    return BaseException_set_tb((PyBaseExceptionObject *)self, tb, NULL);
+PyException_SetTraceback(PyObject *self, PyObject *tb)
+{
+    return BaseException_set_tb(_PyBaseExceptionObject_cast(self), tb, NULL);
 }
 
 PyObject *
-PyException_GetCause(PyObject *self) {
-    PyObject *cause = ((PyBaseExceptionObject *)self)->cause;
+PyException_GetCause(PyObject *self)
+{
+    PyObject *cause = _PyBaseExceptionObject_cast(self)->cause;
     Py_XINCREF(cause);
     return cause;
 }
@@ -330,13 +339,15 @@
 void
 PyException_SetCause(PyObject *self, PyObject *cause)
 {
-    ((PyBaseExceptionObject *)self)->suppress_context = 1;
-    Py_XSETREF(((PyBaseExceptionObject *)self)->cause, cause);
+    PyBaseExceptionObject *base_self = _PyBaseExceptionObject_cast(self);
+    base_self->suppress_context = 1;
+    Py_XSETREF(base_self->cause, cause);
 }
 
 PyObject *
-PyException_GetContext(PyObject *self) {
-    PyObject *context = ((PyBaseExceptionObject *)self)->context;
+PyException_GetContext(PyObject *self)
+{
+    PyObject *context = _PyBaseExceptionObject_cast(self)->context;
     Py_XINCREF(context);
     return context;
 }
@@ -345,7 +356,7 @@
 void
 PyException_SetContext(PyObject *self, PyObject *context)
 {
-    Py_XSETREF(((PyBaseExceptionObject *)self)->context, context);
+    Py_XSETREF(_PyBaseExceptionObject_cast(self)->context, context);
 }
 
 #undef PyExceptionClass_Name
@@ -353,6 +364,7 @@
 const char *
 PyExceptionClass_Name(PyObject *ob)
 {
+    assert(PyExceptionClass_Check(ob));
     return ((PyTypeObject*)ob)->tp_name;
 }
 
@@ -405,7 +417,7 @@
     BaseException_new,          /* tp_new */
 };
 /* the CPython API expects exceptions to be (PyObject *) - both a hold-over
-from the previous implmentation and also allowing Python objects to be used
+from the previous implementation and also allowing Python objects to be used
 in the API */
 PyObject *PyExc_BaseException = (PyObject *)&_PyExc_BaseException;
 
@@ -875,7 +887,7 @@
 
     /* self->filename will remain Py_None otherwise */
     if (filename && filename != Py_None) {
-        if (Py_TYPE(self) == (PyTypeObject *) PyExc_BlockingIOError &&
+        if (Py_IS_TYPE(self, (PyTypeObject *) PyExc_BlockingIOError) &&
             PyNumber_Check(filename)) {
             /* BlockingIOError's 3rd argument can be the number of
              * characters written.
@@ -1379,7 +1391,7 @@
          * Only applies to SyntaxError instances, not to subclasses such
          * as TabError or IndentationError (see issue #31161)
          */
-        if ((PyObject*)Py_TYPE(self) == PyExc_SyntaxError &&
+        if (Py_IS_TYPE(self, (PyTypeObject *)PyExc_SyntaxError) &&
                 self->text && PyUnicode_Check(self->text) &&
                 _report_missing_parentheses(self) < 0) {
             return -1;
@@ -1428,7 +1440,7 @@
 {
     Py_ssize_t i, size, offset;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(name))
         return NULL;
@@ -1437,11 +1449,13 @@
     size = PyUnicode_GET_LENGTH(name);
     offset = 0;
     for(i=0; i < size; i++) {
-        if (PyUnicode_READ(kind, data, i) == SEP)
+        if (PyUnicode_READ(kind, data, i) == SEP) {
             offset = i + 1;
+        }
     }
-    if (offset != 0)
+    if (offset != 0) {
         return PyUnicode_Substring(name, offset, size);
+    }
     else {
         Py_INCREF(name);
         return name;
@@ -2268,8 +2282,12 @@
 {
     PyBaseExceptionObject *self;
 
-    if (type != (PyTypeObject *) PyExc_MemoryError)
+    /* If this is a subclass of MemoryError, don't use the freelist
+     * and just return a fresh object */
+    if (type != (PyTypeObject *) PyExc_MemoryError) {
         return BaseException_new(type, args, kwds);
+    }
+
     if (memerrors_freelist == NULL)
         return BaseException_new(type, args, kwds);
     /* Fetch object from freelist and revive it */
@@ -2289,8 +2307,14 @@
 static void
 MemoryError_dealloc(PyBaseExceptionObject *self)
 {
-    _PyObject_GC_UNTRACK(self);
     BaseException_clear(self);
+
+    if (!Py_IS_TYPE(self, (PyTypeObject *) PyExc_MemoryError)) {
+        return Py_TYPE(self)->tp_free((PyObject *)self);
+    }
+
+    _PyObject_GC_UNTRACK(self);
+
     if (memerrors_numfree >= MEMERRORS_SAVE)
         Py_TYPE(self)->tp_free((PyObject *)self);
     else {
@@ -2953,7 +2977,7 @@
     static PyObject *exec_prefix = NULL;
     Py_ssize_t text_len = PyUnicode_GET_LENGTH(self->text), match;
     int kind = PyUnicode_KIND(self->text);
-    void *data = PyUnicode_DATA(self->text);
+    const void *data = PyUnicode_DATA(self->text);
 
     /* Ignore leading whitespace */
     while (start < text_len) {
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index dd42d51..1c6ecaf 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -2,7 +2,7 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_runtime.h"  // _PyRuntime
 
 #if defined(HAVE_GETC_UNLOCKED) && !defined(_Py_MEMORY_SANITIZER)
 /* clang MemorySanitizer doesn't yet understand getc_unlocked. */
@@ -25,6 +25,8 @@
 extern "C" {
 #endif
 
+_Py_IDENTIFIER(open);
+
 /* External C interface */
 
 PyObject *
@@ -32,15 +34,14 @@
               const char *errors, const char *newline, int closefd)
 {
     PyObject *io, *stream;
-    _Py_IDENTIFIER(open);
 
     /* import _io in case we are being used to open io.py */
     io = PyImport_ImportModule("_io");
     if (io == NULL)
         return NULL;
-    stream = _PyObject_CallMethodId(io, &PyId_open, "isisssi", fd, mode,
+    stream = _PyObject_CallMethodId(io, &PyId_open, "isisssO", fd, mode,
                                  buffering, encoding, errors,
-                                 newline, closefd);
+                                 newline, closefd ? Py_True : Py_False);
     Py_DECREF(io);
     if (stream == NULL)
         return NULL;
@@ -61,7 +62,7 @@
     }
 
     if (n <= 0) {
-        result = _PyObject_CallMethodIdObjArgs(f, &PyId_readline, NULL);
+        result = _PyObject_CallMethodIdNoArgs(f, &PyId_readline);
     }
     else {
         result = _PyObject_CallMethodId(f, &PyId_readline, "i", n);
@@ -75,7 +76,7 @@
     }
 
     if (n < 0 && result != NULL && PyBytes_Check(result)) {
-        char *s = PyBytes_AS_STRING(result);
+        const char *s = PyBytes_AS_STRING(result);
         Py_ssize_t len = PyBytes_GET_SIZE(result);
         if (len == 0) {
             Py_DECREF(result);
@@ -84,7 +85,7 @@
                             "EOF when reading a line");
         }
         else if (s[len-1] == '\n') {
-            if (result->ob_refcnt == 1)
+            if (Py_REFCNT(result) == 1)
                 _PyBytes_Resize(&result, len-1);
             else {
                 PyObject *v;
@@ -136,7 +137,7 @@
         Py_DECREF(writer);
         return -1;
     }
-    result = PyObject_CallFunctionObjArgs(writer, value, NULL);
+    result = PyObject_CallOneArg(writer, value);
     Py_DECREF(value);
     Py_DECREF(writer);
     if (result == NULL)
@@ -547,7 +548,6 @@
 PyFile_OpenCodeObject(PyObject *path)
 {
     PyObject *iomod, *f = NULL;
-    _Py_IDENTIFIER(open);
 
     if (!PyUnicode_Check(path)) {
         PyErr_Format(PyExc_TypeError, "'path' must be 'str', not '%.200s'",
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 609f66f..9f50140 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -4,6 +4,7 @@
    for any kind of float exception without losing portability. */
 
 #include "Python.h"
+#include "pycore_dtoa.h"
 
 #include <ctype.h>
 #include <float.h>
@@ -221,7 +222,7 @@
             return;
         }
         numfree++;
-        Py_TYPE(op) = (struct _typeobject *)free_list;
+        Py_SET_TYPE(op, (PyTypeObject *)free_list);
         free_list = op;
     }
     else
@@ -256,7 +257,7 @@
             return val;
         }
         PyErr_Format(PyExc_TypeError, "must be real number, not %.50s",
-                     op->ob_type->tp_name);
+                     Py_TYPE(op)->tp_name);
         return -1;
     }
 
@@ -268,7 +269,7 @@
         if (!PyFloat_Check(res)) {
             PyErr_Format(PyExc_TypeError,
                          "%.50s.__float__ returned non-float (type %.50s)",
-                         op->ob_type->tp_name, res->ob_type->tp_name);
+                         Py_TYPE(op)->tp_name, Py_TYPE(res)->tp_name);
             Py_DECREF(res);
             return -1;
         }
@@ -276,7 +277,7 @@
                 "%.50s.__float__ returned non-float (type %.50s).  "
                 "The ability to return an instance of a strict subclass of float "
                 "is deprecated, and may be removed in a future version of Python.",
-                op->ob_type->tp_name, res->ob_type->tp_name)) {
+                Py_TYPE(op)->tp_name, Py_TYPE(res)->tp_name)) {
             Py_DECREF(res);
             return -1;
         }
@@ -506,7 +507,6 @@
         goto Unimplemented;
 
  Compare:
-    PyFPE_START_PROTECT("richcompare", return NULL)
     switch (op) {
     case Py_EQ:
         r = i == j;
@@ -527,7 +527,6 @@
         r = i > j;
         break;
     }
-    PyFPE_END_PROTECT(r)
     return PyBool_FromLong(r);
 
  Unimplemented:
@@ -546,9 +545,7 @@
     double a,b;
     CONVERT_TO_DOUBLE(v, a);
     CONVERT_TO_DOUBLE(w, b);
-    PyFPE_START_PROTECT("add", return 0)
     a = a + b;
-    PyFPE_END_PROTECT(a)
     return PyFloat_FromDouble(a);
 }
 
@@ -558,9 +555,7 @@
     double a,b;
     CONVERT_TO_DOUBLE(v, a);
     CONVERT_TO_DOUBLE(w, b);
-    PyFPE_START_PROTECT("subtract", return 0)
     a = a - b;
-    PyFPE_END_PROTECT(a)
     return PyFloat_FromDouble(a);
 }
 
@@ -570,9 +565,7 @@
     double a,b;
     CONVERT_TO_DOUBLE(v, a);
     CONVERT_TO_DOUBLE(w, b);
-    PyFPE_START_PROTECT("multiply", return 0)
     a = a * b;
-    PyFPE_END_PROTECT(a)
     return PyFloat_FromDouble(a);
 }
 
@@ -587,9 +580,7 @@
                         "float division by zero");
         return NULL;
     }
-    PyFPE_START_PROTECT("divide", return 0)
     a = a / b;
-    PyFPE_END_PROTECT(a)
     return PyFloat_FromDouble(a);
 }
 
@@ -605,7 +596,6 @@
                         "float modulo");
         return NULL;
     }
-    PyFPE_START_PROTECT("modulo", return 0)
     mod = fmod(vx, wx);
     if (mod) {
         /* ensure the remainder has the same sign as the denominator */
@@ -619,34 +609,25 @@
            it has the same sign as the denominator. */
         mod = copysign(0.0, wx);
     }
-    PyFPE_END_PROTECT(mod)
     return PyFloat_FromDouble(mod);
 }
 
-static PyObject *
-float_divmod(PyObject *v, PyObject *w)
+static void
+_float_div_mod(double vx, double wx, double *floordiv, double *mod)
 {
-    double vx, wx;
-    double div, mod, floordiv;
-    CONVERT_TO_DOUBLE(v, vx);
-    CONVERT_TO_DOUBLE(w, wx);
-    if (wx == 0.0) {
-        PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
-        return NULL;
-    }
-    PyFPE_START_PROTECT("divmod", return 0)
-    mod = fmod(vx, wx);
+    double div;
+    *mod = fmod(vx, wx);
     /* fmod is typically exact, so vx-mod is *mathematically* an
        exact multiple of wx.  But this is fp arithmetic, and fp
        vx - mod is an approximation; the result is that div may
        not be an exact integral value after the division, although
        it will always be very close to one.
     */
-    div = (vx - mod) / wx;
-    if (mod) {
+    div = (vx - *mod) / wx;
+    if (*mod) {
         /* ensure the remainder has the same sign as the denominator */
-        if ((wx < 0) != (mod < 0)) {
-            mod += wx;
+        if ((wx < 0) != (*mod < 0)) {
+            *mod += wx;
             div -= 1.0;
         }
     }
@@ -654,35 +635,49 @@
         /* the remainder is zero, and in the presence of signed zeroes
            fmod returns different results across platforms; ensure
            it has the same sign as the denominator. */
-        mod = copysign(0.0, wx);
+        *mod = copysign(0.0, wx);
     }
     /* snap quotient to nearest integral value */
     if (div) {
-        floordiv = floor(div);
-        if (div - floordiv > 0.5)
-            floordiv += 1.0;
+        *floordiv = floor(div);
+        if (div - *floordiv > 0.5) {
+            *floordiv += 1.0;
+        }
     }
     else {
         /* div is zero - get the same sign as the true quotient */
-        floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */
+        *floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */
     }
-    PyFPE_END_PROTECT(floordiv)
+}
+
+static PyObject *
+float_divmod(PyObject *v, PyObject *w)
+{
+    double vx, wx;
+    double mod, floordiv;
+    CONVERT_TO_DOUBLE(v, vx);
+    CONVERT_TO_DOUBLE(w, wx);
+    if (wx == 0.0) {
+        PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
+        return NULL;
+    }
+    _float_div_mod(vx, wx, &floordiv, &mod);
     return Py_BuildValue("(dd)", floordiv, mod);
 }
 
 static PyObject *
 float_floor_div(PyObject *v, PyObject *w)
 {
-    PyObject *t, *r;
-
-    t = float_divmod(v, w);
-    if (t == NULL || t == Py_NotImplemented)
-        return t;
-    assert(PyTuple_CheckExact(t));
-    r = PyTuple_GET_ITEM(t, 0);
-    Py_INCREF(r);
-    Py_DECREF(t);
-    return r;
+    double vx, wx;
+    double mod, floordiv;
+    CONVERT_TO_DOUBLE(v, vx);
+    CONVERT_TO_DOUBLE(w, wx);
+    if (wx == 0.0) {
+        PyErr_SetString(PyExc_ZeroDivisionError, "float floor division by zero");
+        return NULL;
+    }
+    _float_div_mod(vx, wx, &floordiv, &mod);
+    return PyFloat_FromDouble(floordiv);
 }
 
 /* determine whether x is an odd integer or not;  assumes that
@@ -793,9 +788,7 @@
      * the platform pow to step in and do the rest.
      */
     errno = 0;
-    PyFPE_START_PROTECT("pow", return NULL)
     ix = pow(iv, iw);
-    PyFPE_END_PROTECT(ix)
     Py_ADJUST_ERANGE1(ix);
     if (negate_result)
         ix = -ix;
@@ -849,9 +842,7 @@
     if (!Py_IS_FINITE(x))
         Py_RETURN_FALSE;
     errno = 0;
-    PyFPE_START_PROTECT("is_integer", return NULL)
     o = (floor(x) == x) ? Py_True : Py_False;
-    PyFPE_END_PROTECT(x)
     if (errno != 0) {
         PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError :
                              PyExc_ValueError);
@@ -871,27 +862,35 @@
 float___trunc___impl(PyObject *self)
 /*[clinic end generated code: output=dd3e289dd4c6b538 input=591b9ba0d650fdff]*/
 {
-    double x = PyFloat_AsDouble(self);
-    double wholepart;           /* integral portion of x, rounded toward 0 */
+    return PyLong_FromDouble(PyFloat_AS_DOUBLE(self));
+}
 
-    (void)modf(x, &wholepart);
-    /* Try to get out cheap if this fits in a Python int.  The attempt
-     * to cast to long must be protected, as C doesn't define what
-     * happens if the double is too big to fit in a long.  Some rare
-     * systems raise an exception then (RISCOS was mentioned as one,
-     * and someone using a non-default option on Sun also bumped into
-     * that).  Note that checking for >= and <= LONG_{MIN,MAX} would
-     * still be vulnerable:  if a long has more bits of precision than
-     * a double, casting MIN/MAX to double may yield an approximation,
-     * and if that's rounded up, then, e.g., wholepart=LONG_MAX+1 would
-     * yield true from the C expression wholepart<=LONG_MAX, despite
-     * that wholepart is actually greater than LONG_MAX.
-     */
-    if (LONG_MIN < wholepart && wholepart < LONG_MAX) {
-        const long aslong = (long)wholepart;
-        return PyLong_FromLong(aslong);
-    }
-    return PyLong_FromDouble(wholepart);
+/*[clinic input]
+float.__floor__
+
+Return the floor as an Integral.
+[clinic start generated code]*/
+
+static PyObject *
+float___floor___impl(PyObject *self)
+/*[clinic end generated code: output=e0551dbaea8c01d1 input=77bb13eb12e268df]*/
+{
+    double x = PyFloat_AS_DOUBLE(self);
+    return PyLong_FromDouble(floor(x));
+}
+
+/*[clinic input]
+float.__ceil__
+
+Return the ceiling as an Integral.
+[clinic start generated code]*/
+
+static PyObject *
+float___ceil___impl(PyObject *self)
+/*[clinic end generated code: output=a2fd8858f73736f9 input=79e41ae94aa0a516]*/
+{
+    double x = PyFloat_AS_DOUBLE(self);
+    return PyLong_FromDouble(ceil(x));
 }
 
 /* double_round: rounds a finite double to the closest multiple of
@@ -1472,7 +1471,7 @@
         goto parse_error;
     result = PyFloat_FromDouble(negate ? -x : x);
     if (type != &PyFloat_Type && result != NULL) {
-        Py_SETREF(result, PyObject_CallFunctionObjArgs((PyObject *)type, result, NULL));
+        Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
     }
     return result;
 
@@ -1538,9 +1537,7 @@
         return NULL;
     }
 
-    PyFPE_START_PROTECT("as_integer_ratio", goto error);
     float_part = frexp(self_double, &exponent);        /* self_double == float_part * 2**exponent exactly */
-    PyFPE_END_PROTECT(float_part);
 
     for (i=0; i<300 && float_part != floor(float_part) ; i++) {
         float_part *= 2.0;
@@ -1697,7 +1694,8 @@
     case ieee_big_endian_format:
         return PyUnicode_FromString("IEEE, big-endian");
     default:
-        Py_FatalError("insane float_format or double_format");
+        PyErr_SetString(PyExc_RuntimeError,
+                        "insane float_format or double_format");
         return NULL;
     }
 }
@@ -1818,6 +1816,8 @@
 static PyMethodDef float_methods[] = {
     FLOAT_CONJUGATE_METHODDEF
     FLOAT___TRUNC___METHODDEF
+    FLOAT___FLOOR___METHODDEF
+    FLOAT___CEIL___METHODDEF
     FLOAT___ROUND___METHODDEF
     FLOAT_AS_INTEGER_RATIO_METHODDEF
     FLOAT_FROMHEX_METHODDEF
@@ -1978,25 +1978,22 @@
     return 1;
 }
 
-int
-PyFloat_ClearFreeList(void)
+void
+_PyFloat_ClearFreeList(void)
 {
     PyFloatObject *f = free_list, *next;
-    int i = numfree;
-    while (f) {
+    for (; f; f = next) {
         next = (PyFloatObject*) Py_TYPE(f);
         PyObject_FREE(f);
-        f = next;
     }
     free_list = NULL;
     numfree = 0;
-    return i;
 }
 
 void
-PyFloat_Fini(void)
+_PyFloat_Fini(void)
 {
-    (void)PyFloat_ClearFreeList();
+    _PyFloat_ClearFreeList();
 }
 
 /* Print summary info about the state of the optimized allocator */
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index a796a59..a2fc0a4 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -2,12 +2,12 @@
 
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_gc.h"       // _PyObject_GC_IS_TRACKED()
 
 #include "code.h"
 #include "frameobject.h"
 #include "opcode.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #define OFF(x) offsetof(PyFrameObject, x)
 
@@ -34,10 +34,13 @@
 int
 PyFrame_GetLineNumber(PyFrameObject *f)
 {
-    if (f->f_trace)
+    assert(f != NULL);
+    if (f->f_trace) {
         return f->f_lineno;
-    else
+    }
+    else {
         return PyCode_Addr2Line(f->f_code, f->f_lasti);
+    }
 }
 
 static PyObject *
@@ -66,6 +69,245 @@
     return oparg;
 }
 
+typedef enum kind {
+    With = 1,
+    Loop = 2,
+    Try = 3,
+    Except = 4,
+} Kind;
+
+#define BITS_PER_BLOCK 3
+
+static inline int64_t
+push_block(int64_t stack, Kind kind)
+{
+    assert(stack < ((int64_t)1)<<(BITS_PER_BLOCK*CO_MAXBLOCKS));
+    return (stack << BITS_PER_BLOCK) | kind;
+}
+
+static inline int64_t
+pop_block(int64_t stack)
+{
+    assert(stack > 0);
+    return stack >> BITS_PER_BLOCK;
+}
+
+static inline Kind
+top_block(int64_t stack)
+{
+    return stack & ((1<<BITS_PER_BLOCK)-1);
+}
+
+static int64_t *
+markblocks(PyCodeObject *code_obj, int len)
+{
+    const _Py_CODEUNIT *code =
+        (const _Py_CODEUNIT *)PyBytes_AS_STRING(code_obj->co_code);
+    int64_t *blocks = PyMem_New(int64_t, len+1);
+    int i, j, opcode;
+
+    if (blocks == NULL) {
+        PyErr_NoMemory();
+        return NULL;
+    }
+    memset(blocks, -1, (len+1)*sizeof(int64_t));
+    blocks[0] = 0;
+    int todo = 1;
+    while (todo) {
+        todo = 0;
+        for (i = 0; i < len; i++) {
+            int64_t block_stack = blocks[i];
+            int64_t except_stack;
+            if (block_stack == -1) {
+                continue;
+            }
+            opcode = _Py_OPCODE(code[i]);
+            switch (opcode) {
+                case JUMP_IF_FALSE_OR_POP:
+                case JUMP_IF_TRUE_OR_POP:
+                case POP_JUMP_IF_FALSE:
+                case POP_JUMP_IF_TRUE:
+                case JUMP_IF_NOT_EXC_MATCH:
+                    j = get_arg(code, i) / sizeof(_Py_CODEUNIT);
+                    assert(j < len);
+                    if (blocks[j] == -1 && j < i) {
+                        todo = 1;
+                    }
+                    assert(blocks[j] == -1 || blocks[j] == block_stack);
+                    blocks[j] = block_stack;
+                    blocks[i+1] = block_stack;
+                    break;
+                case JUMP_ABSOLUTE:
+                    j = get_arg(code, i) / sizeof(_Py_CODEUNIT);
+                    assert(j < len);
+                    if (blocks[j] == -1 && j < i) {
+                        todo = 1;
+                    }
+                    assert(blocks[j] == -1 || blocks[j] == block_stack);
+                    blocks[j] = block_stack;
+                    break;
+                case SETUP_FINALLY:
+                    j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1;
+                    assert(j < len);
+                    except_stack = push_block(block_stack, Except);
+                    assert(blocks[j] == -1 || blocks[j] == except_stack);
+                    blocks[j] = except_stack;
+                    block_stack = push_block(block_stack, Try);
+                    blocks[i+1] = block_stack;
+                    break;
+                case SETUP_WITH:
+                case SETUP_ASYNC_WITH:
+                    j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1;
+                    assert(j < len);
+                    except_stack = push_block(block_stack, Except);
+                    assert(blocks[j] == -1 || blocks[j] == except_stack);
+                    blocks[j] = except_stack;
+                    block_stack = push_block(block_stack, With);
+                    blocks[i+1] = block_stack;
+                    break;
+                case JUMP_FORWARD:
+                    j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1;
+                    assert(j < len);
+                    assert(blocks[j] == -1 || blocks[j] == block_stack);
+                    blocks[j] = block_stack;
+                    break;
+                case GET_ITER:
+                case GET_AITER:
+                    block_stack = push_block(block_stack, Loop);
+                    blocks[i+1] = block_stack;
+                    break;
+                case FOR_ITER:
+                    blocks[i+1] = block_stack;
+                    block_stack = pop_block(block_stack);
+                    j = get_arg(code, i) / sizeof(_Py_CODEUNIT) + i + 1;
+                    assert(j < len);
+                    assert(blocks[j] == -1 || blocks[j] == block_stack);
+                    blocks[j] = block_stack;
+                    break;
+                case POP_BLOCK:
+                case POP_EXCEPT:
+                    block_stack = pop_block(block_stack);
+                    blocks[i+1] = block_stack;
+                    break;
+                case END_ASYNC_FOR:
+                    block_stack = pop_block(pop_block(block_stack));
+                    blocks[i+1] = block_stack;
+                    break;
+                case RETURN_VALUE:
+                case RAISE_VARARGS:
+                case RERAISE:
+                    /* End of block */
+                    break;
+                default:
+                    blocks[i+1] = block_stack;
+
+            }
+        }
+    }
+    return blocks;
+}
+
+static int
+compatible_block_stack(int64_t from_stack, int64_t to_stack)
+{
+    if (to_stack < 0) {
+        return 0;
+    }
+    while(from_stack > to_stack) {
+        from_stack = pop_block(from_stack);
+    }
+    return from_stack == to_stack;
+}
+
+static const char *
+explain_incompatible_block_stack(int64_t to_stack)
+{
+    Kind target_kind = top_block(to_stack);
+    switch(target_kind) {
+        case Except:
+            return "can't jump into an 'except' block as there's no exception";
+        case Try:
+            return "can't jump into the body of a try statement";
+        case With:
+            return "can't jump into the body of a with statement";
+        case Loop:
+            return "can't jump into the body of a for loop";
+        default:
+            Py_UNREACHABLE();
+    }
+}
+
+static int *
+marklines(PyCodeObject *code, int len)
+{
+    int *linestarts = PyMem_New(int, len);
+    if (linestarts == NULL) {
+        return NULL;
+    }
+    Py_ssize_t size = PyBytes_GET_SIZE(code->co_lnotab) / 2;
+    unsigned char *p = (unsigned char*)PyBytes_AS_STRING(code->co_lnotab);
+    int line = code->co_firstlineno;
+    int addr = 0;
+    int index = 0;
+    while (--size >= 0) {
+        addr += *p++;
+        if (index*2 < addr) {
+            linestarts[index++] = line;
+        }
+        while (index*2 < addr) {
+            linestarts[index++] = -1;
+            if (index >= len) {
+                break;
+            }
+        }
+        line += (signed char)*p;
+        p++;
+    }
+    if (index < len) {
+        linestarts[index++] = line;
+    }
+    while (index < len) {
+        linestarts[index++] = -1;
+    }
+    assert(index == len);
+    return linestarts;
+}
+
+static int
+first_line_not_before(int *lines, int len, int line)
+{
+    int result = INT_MAX;
+    for (int i = 0; i < len; i++) {
+        if (lines[i] < result && lines[i] >= line) {
+            result = lines[i];
+        }
+    }
+    if (result == INT_MAX) {
+        return -1;
+    }
+    return result;
+}
+
+static void
+frame_stack_pop(PyFrameObject *f)
+{
+    PyObject *v = (*--f->f_stacktop);
+    Py_DECREF(v);
+}
+
+static void
+frame_block_unwind(PyFrameObject *f)
+{
+    assert(f->f_iblock > 0);
+    f->f_iblock--;
+    PyTryBlock *b = &f->f_blockstack[f->f_iblock];
+    intptr_t delta = (f->f_stacktop - f->f_valuestack) - b->b_level;
+    while (delta > 0) {
+        frame_stack_pop(f);
+        delta--;
+    }
+}
+
 
 /* Setter for f_lineno - you can set f_lineno from within a trace function in
  * order to jump to a given line of code, subject to some restrictions.  Most
@@ -77,7 +319,8 @@
  *  o Lines with an 'except' statement on them can't be jumped to, because
  *    they expect an exception to be on the top of the stack.
  *  o Lines that live in a 'finally' block can't be jumped from or to, since
- *    the END_FINALLY expects to clean up the stack after the 'try' block.
+ *    we cannot be sure which state the interpreter was in or would be in
+ *    during execution of the finally block.
  *  o 'try', 'with' and 'async with' blocks can't be jumped into because
  *    the blockstack needs to be set up before their code runs.
  *  o 'for' and 'async for' loops can't be jumped into because the
@@ -89,22 +332,6 @@
 static int
 frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignored))
 {
-    int new_lineno = 0;                 /* The new value of f_lineno */
-    long l_new_lineno;
-    int overflow;
-    int new_lasti = 0;                  /* The new value of f_lasti */
-    unsigned char *code = NULL;         /* The bytecode for the frame... */
-    Py_ssize_t code_len = 0;            /* ...and its length */
-    unsigned char *lnotab = NULL;       /* Iterating over co_lnotab */
-    Py_ssize_t lnotab_len = 0;          /* (ditto) */
-    int offset = 0;                     /* (ditto) */
-    int line = 0;                       /* (ditto) */
-    int addr = 0;                       /* (ditto) */
-    int delta_iblock = 0;               /* Scanning the SETUPs and POPs */
-    int delta = 0;
-    int blockstack[CO_MAXBLOCKS];       /* Walking the 'finally' blocks */
-    int blockstack_top = 0;             /* (ditto) */
-
     if (p_new_lineno == NULL) {
         PyErr_SetString(PyExc_AttributeError, "cannot delete attribute");
         return -1;
@@ -145,14 +372,18 @@
         return -1;
     }
 
-    /* Fail if the line comes before the start of the code block. */
-    l_new_lineno = PyLong_AsLongAndOverflow(p_new_lineno, &overflow);
+    int new_lineno;
+
+    /* Fail if the line falls outside the code block and
+        select first line with actual code. */
+    int overflow;
+    long l_new_lineno = PyLong_AsLongAndOverflow(p_new_lineno, &overflow);
     if (overflow
 #if SIZEOF_LONG > SIZEOF_INT
         || l_new_lineno > INT_MAX
         || l_new_lineno < INT_MIN
 #endif
-       ) {
+    ) {
         PyErr_SetString(PyExc_ValueError,
                         "lineno out of range");
         return -1;
@@ -161,173 +392,90 @@
 
     if (new_lineno < f->f_code->co_firstlineno) {
         PyErr_Format(PyExc_ValueError,
-                     "line %d comes before the current code block",
-                     new_lineno);
+                    "line %d comes before the current code block",
+                    new_lineno);
         return -1;
     }
-    else if (new_lineno == f->f_code->co_firstlineno) {
-        new_lasti = 0;
-        new_lineno = f->f_code->co_firstlineno;
-    }
-    else {
-        /* Find the bytecode offset for the start of the given
-         * line, or the first code-owning line after it. */
-        char *tmp;
-        PyBytes_AsStringAndSize(f->f_code->co_lnotab,
-                                &tmp, &lnotab_len);
-        lnotab = (unsigned char *) tmp;
-        addr = 0;
-        line = f->f_code->co_firstlineno;
-        new_lasti = -1;
-        for (offset = 0; offset < lnotab_len; offset += 2) {
-            addr += lnotab[offset];
-            line += (signed char)lnotab[offset+1];
-            if (line >= new_lineno) {
-                new_lasti = addr;
-                new_lineno = line;
-                break;
-            }
-        }
+
+    int len = PyBytes_GET_SIZE(f->f_code->co_code)/sizeof(_Py_CODEUNIT);
+    int *lines = marklines(f->f_code, len);
+    if (lines == NULL) {
+        return -1;
     }
 
-    /* If we didn't reach the requested line, return an error. */
-    if (new_lasti == -1) {
+    new_lineno = first_line_not_before(lines, len, new_lineno);
+    if (new_lineno < 0) {
         PyErr_Format(PyExc_ValueError,
-                     "line %d comes after the current code block",
-                     new_lineno);
+                    "line %d comes after the current code block",
+                    (int)l_new_lineno);
+        PyMem_Free(lines);
         return -1;
     }
 
-    /* We're now ready to look at the bytecode. */
-    PyBytes_AsStringAndSize(f->f_code->co_code, (char **)&code, &code_len);
-
-    /* The trace function is called with a 'return' trace event after the
-     * execution of a yield statement. */
-    assert(f->f_lasti != -1);
-    if (code[f->f_lasti] == YIELD_VALUE || code[f->f_lasti] == YIELD_FROM) {
-        PyErr_SetString(PyExc_ValueError,
-                "can't jump from a yield statement");
+    int64_t *blocks = markblocks(f->f_code, len);
+    if (blocks == NULL) {
+        PyMem_Free(lines);
         return -1;
     }
 
-    /* You can't jump onto a line with an 'except' statement on it -
-     * they expect to have an exception on the top of the stack, which
-     * won't be true if you jump to them.  They always start with code
-     * that either pops the exception using POP_TOP (plain 'except:'
-     * lines do this) or duplicates the exception on the stack using
-     * DUP_TOP (if there's an exception type specified).  See compile.c,
-     * 'com_try_except' for the full details.  There aren't any other
-     * cases (AFAIK) where a line's code can start with DUP_TOP or
-     * POP_TOP, but if any ever appear, they'll be subject to the same
-     * restriction (but with a different error message). */
-    if (code[new_lasti] == DUP_TOP || code[new_lasti] == POP_TOP) {
-        PyErr_SetString(PyExc_ValueError,
-            "can't jump to 'except' line as there's no exception");
-        return -1;
-    }
-
-    /* You can't jump into or out of a 'finally' block because the 'try'
-     * block leaves something on the stack for the END_FINALLY to clean up.
-     * So we walk the bytecode, maintaining a simulated blockstack.
-     * 'blockstack' is a stack of the bytecode addresses of the starts of
-     * the 'finally' blocks. */
-    memset(blockstack, '\0', sizeof(blockstack));
-    blockstack_top = 0;
-    unsigned char prevop = NOP;
-    for (addr = 0; addr < code_len; addr += sizeof(_Py_CODEUNIT)) {
-        unsigned char op = code[addr];
-        switch (op) {
-        case SETUP_FINALLY:
-        case SETUP_WITH:
-        case SETUP_ASYNC_WITH:
-        case FOR_ITER: {
-            unsigned int oparg = get_arg((const _Py_CODEUNIT *)code,
-                                         addr / sizeof(_Py_CODEUNIT));
-            int target_addr = addr + oparg + sizeof(_Py_CODEUNIT);
-            assert(target_addr < code_len);
-            /* Police block-jumping (you can't jump into the middle of a block)
-             * and ensure that the blockstack finishes up in a sensible state (by
-             * popping any blocks we're jumping out of).  We look at all the
-             * blockstack operations between the current position and the new
-             * one, and keep track of how many blocks we drop out of on the way.
-             * By also keeping track of the lowest blockstack position we see, we
-             * can tell whether the jump goes into any blocks without coming out
-             * again - in that case we raise an exception below. */
-            int first_in = addr < f->f_lasti && f->f_lasti < target_addr;
-            int second_in = addr < new_lasti && new_lasti < target_addr;
-            if (!first_in && second_in) {
-                PyErr_SetString(PyExc_ValueError,
-                                "can't jump into the middle of a block");
-                return -1;
-            }
-            int in_for_loop = op == FOR_ITER || code[target_addr] == END_ASYNC_FOR;
-            if (first_in && !second_in) {
-                if (!delta_iblock) {
-                    if (in_for_loop) {
-                        /* Pop the iterators of any 'for' and 'async for' loop
-                         * we're jumping out of. */
-                        delta++;
-                    }
-                    else if (prevop == LOAD_CONST) {
-                        /* Pops None pushed before SETUP_FINALLY. */
-                        delta++;
-                    }
-                }
-                if (!in_for_loop) {
-                    delta_iblock++;
+    int64_t target_block_stack = -1;
+    int64_t best_block_stack = -1;
+    int best_addr = -1;
+    int64_t start_block_stack = blocks[f->f_lasti/sizeof(_Py_CODEUNIT)];
+    const char *msg = "cannot find bytecode for specified line";
+    for (int i = 0; i < len; i++) {
+        if (lines[i] == new_lineno) {
+            target_block_stack = blocks[i];
+            if (compatible_block_stack(start_block_stack, target_block_stack)) {
+                msg = NULL;
+                if (target_block_stack > best_block_stack) {
+                    best_block_stack = target_block_stack;
+                    best_addr = i*sizeof(_Py_CODEUNIT);
                 }
             }
-            if (!in_for_loop) {
-                blockstack[blockstack_top++] = target_addr;
+            else if (msg) {
+                if (target_block_stack >= 0) {
+                    msg = explain_incompatible_block_stack(target_block_stack);
+                }
+                else {
+                    msg = "code may be unreachable.";
+                }
             }
-            break;
-        }
-
-        case END_FINALLY: {
-            assert(blockstack_top > 0);
-            int target_addr = blockstack[--blockstack_top];
-            assert(target_addr <= addr);
-            int first_in = target_addr <= f->f_lasti && f->f_lasti <= addr;
-            int second_in = target_addr <= new_lasti && new_lasti <= addr;
-            if (first_in != second_in) {
-                op = code[target_addr];
-                PyErr_Format(PyExc_ValueError,
-                             "can't jump %s %s block",
-                             second_in ? "into" : "out of",
-                             (op == DUP_TOP || op == POP_TOP) ?
-                                "an 'except'" : "a 'finally'");
-                return -1;
-            }
-            break;
-        }
-        }
-        prevop = op;
-    }
-
-    /* Verify that the blockstack tracking code didn't get lost. */
-    assert(blockstack_top == 0);
-
-    /* Pop any blocks that we're jumping out of. */
-    if (delta_iblock > 0) {
-        f->f_iblock -= delta_iblock;
-        PyTryBlock *b = &f->f_blockstack[f->f_iblock];
-        delta += (int)(f->f_stacktop - f->f_valuestack) - b->b_level;
-        if (b->b_type == SETUP_FINALLY &&
-            code[b->b_handler] == WITH_CLEANUP_START)
-        {
-            /* Pop the exit function. */
-            delta++;
         }
     }
-    while (delta > 0) {
-        PyObject *v = (*--f->f_stacktop);
-        Py_DECREF(v);
-        delta--;
+    PyMem_Free(blocks);
+    PyMem_Free(lines);
+    if (msg != NULL) {
+        PyErr_SetString(PyExc_ValueError, msg);
+        return -1;
+    }
+
+    /* Unwind block stack. */
+    while (start_block_stack > best_block_stack) {
+        Kind kind = top_block(start_block_stack);
+        switch(kind) {
+        case Loop:
+            frame_stack_pop(f);
+            break;
+        case Try:
+            frame_block_unwind(f);
+            break;
+        case With:
+            frame_block_unwind(f);
+            // Pop the exit function
+            frame_stack_pop(f);
+            break;
+        case Except:
+            PyErr_SetString(PyExc_ValueError,
+                "can't jump out of an 'except' block");
+            return -1;
+        }
+        start_block_stack = pop_block(start_block_stack);
     }
 
     /* Finally set the new f_lineno and f_lasti and return OK. */
     f->f_lineno = new_lineno;
-    f->f_lasti = new_lasti;
+    f->f_lasti = best_addr;
     return 0;
 }
 
@@ -408,12 +556,14 @@
    free_list.  Else programs creating lots of cyclic trash involving
    frames could provoke free_list into growing without bound.
 */
-
-static PyFrameObject *free_list = NULL;
-static int numfree = 0;         /* number of frames currently in free_list */
 /* max value for numfree */
 #define PyFrame_MAXFREELIST 200
 
+#if PyFrame_MAXFREELIST > 0
+static PyFrameObject *free_list = NULL;
+static int numfree = 0;         /* number of frames currently in free_list */
+#endif
+
 static void _Py_HOT_FUNCTION
 frame_dealloc(PyFrameObject *f)
 {
@@ -442,26 +592,36 @@
     Py_CLEAR(f->f_trace);
 
     co = f->f_code;
-    if (co->co_zombieframe == NULL)
+    if (co->co_zombieframe == NULL) {
         co->co_zombieframe = f;
+    }
+#if PyFrame_MAXFREELIST > 0
     else if (numfree < PyFrame_MAXFREELIST) {
         ++numfree;
         f->f_back = free_list;
         free_list = f;
     }
-    else
+#endif
+    else {
         PyObject_GC_Del(f);
+    }
 
     Py_DECREF(co);
     Py_TRASHCAN_SAFE_END(f)
 }
 
+static inline Py_ssize_t
+frame_nslots(PyFrameObject *frame)
+{
+    PyCodeObject *code = frame->f_code;
+    return (code->co_nlocals
+            + PyTuple_GET_SIZE(code->co_cellvars)
+            + PyTuple_GET_SIZE(code->co_freevars));
+}
+
 static int
 frame_traverse(PyFrameObject *f, visitproc visit, void *arg)
 {
-    PyObject **fastlocals, **p;
-    Py_ssize_t i, slots;
-
     Py_VISIT(f->f_back);
     Py_VISIT(f->f_code);
     Py_VISIT(f->f_builtins);
@@ -470,15 +630,16 @@
     Py_VISIT(f->f_trace);
 
     /* locals */
-    slots = f->f_code->co_nlocals + PyTuple_GET_SIZE(f->f_code->co_cellvars) + PyTuple_GET_SIZE(f->f_code->co_freevars);
-    fastlocals = f->f_localsplus;
-    for (i = slots; --i >= 0; ++fastlocals)
+    PyObject **fastlocals = f->f_localsplus;
+    for (Py_ssize_t i = frame_nslots(f); --i >= 0; ++fastlocals) {
         Py_VISIT(*fastlocals);
+    }
 
     /* stack */
     if (f->f_stacktop != NULL) {
-        for (p = f->f_valuestack; p < f->f_stacktop; p++)
+        for (PyObject **p = f->f_valuestack; p < f->f_stacktop; p++) {
             Py_VISIT(*p);
+        }
     }
     return 0;
 }
@@ -486,30 +647,28 @@
 static int
 frame_tp_clear(PyFrameObject *f)
 {
-    PyObject **fastlocals, **p, **oldtop;
-    Py_ssize_t i, slots;
-
     /* Before anything else, make sure that this frame is clearly marked
      * as being defunct!  Else, e.g., a generator reachable from this
      * frame may also point to this frame, believe itself to still be
      * active, and try cleaning up this frame again.
      */
-    oldtop = f->f_stacktop;
+    PyObject **oldtop = f->f_stacktop;
     f->f_stacktop = NULL;
     f->f_executing = 0;
 
     Py_CLEAR(f->f_trace);
 
     /* locals */
-    slots = f->f_code->co_nlocals + PyTuple_GET_SIZE(f->f_code->co_cellvars) + PyTuple_GET_SIZE(f->f_code->co_freevars);
-    fastlocals = f->f_localsplus;
-    for (i = slots; --i >= 0; ++fastlocals)
+    PyObject **fastlocals = f->f_localsplus;
+    for (Py_ssize_t i = frame_nslots(f); --i >= 0; ++fastlocals) {
         Py_CLEAR(*fastlocals);
+    }
 
     /* stack */
     if (oldtop != NULL) {
-        for (p = f->f_valuestack; p < oldtop; p++)
+        for (PyObject **p = f->f_valuestack; p < oldtop; p++) {
             Py_CLEAR(*p);
+        }
     }
     return 0;
 }
@@ -538,10 +697,10 @@
 {
     Py_ssize_t res, extras, ncells, nfrees;
 
-    ncells = PyTuple_GET_SIZE(f->f_code->co_cellvars);
-    nfrees = PyTuple_GET_SIZE(f->f_code->co_freevars);
-    extras = f->f_code->co_stacksize + f->f_code->co_nlocals +
-             ncells + nfrees;
+    PyCodeObject *code = f->f_code;
+    ncells = PyTuple_GET_SIZE(code->co_cellvars);
+    nfrees = PyTuple_GET_SIZE(code->co_freevars);
+    extras = code->co_stacksize + code->co_nlocals + ncells + nfrees;
     /* subtract one as it is already included in PyFrameObject */
     res = sizeof(PyFrameObject) + (extras-1) * sizeof(PyObject *);
 
@@ -555,9 +714,10 @@
 frame_repr(PyFrameObject *f)
 {
     int lineno = PyFrame_GetLineNumber(f);
+    PyCodeObject *code = f->f_code;
     return PyUnicode_FromFormat(
         "<frame at %p, file %R, line %d, code %S>",
-        f, f->f_code->co_filename, lineno, f->f_code->co_name);
+        f, code->co_filename, lineno, code->co_name);
 }
 
 static PyMethodDef frame_methods[] = {
@@ -605,15 +765,107 @@
 
 _Py_IDENTIFIER(__builtins__);
 
+static inline PyFrameObject*
+frame_alloc(PyCodeObject *code)
+{
+    PyFrameObject *f;
+
+    f = code->co_zombieframe;
+    if (f != NULL) {
+        code->co_zombieframe = NULL;
+        _Py_NewReference((PyObject *)f);
+        assert(f->f_code == code);
+        return f;
+    }
+
+    Py_ssize_t ncells = PyTuple_GET_SIZE(code->co_cellvars);
+    Py_ssize_t nfrees = PyTuple_GET_SIZE(code->co_freevars);
+    Py_ssize_t extras = code->co_stacksize + code->co_nlocals + ncells + nfrees;
+#if PyFrame_MAXFREELIST > 0
+    if (free_list == NULL)
+#endif
+    {
+        f = PyObject_GC_NewVar(PyFrameObject, &PyFrame_Type, extras);
+        if (f == NULL) {
+            return NULL;
+        }
+    }
+#if PyFrame_MAXFREELIST > 0
+    else {
+        assert(numfree > 0);
+        --numfree;
+        f = free_list;
+        free_list = free_list->f_back;
+        if (Py_SIZE(f) < extras) {
+            PyFrameObject *new_f = PyObject_GC_Resize(PyFrameObject, f, extras);
+            if (new_f == NULL) {
+                PyObject_GC_Del(f);
+                return NULL;
+            }
+            f = new_f;
+        }
+        _Py_NewReference((PyObject *)f);
+    }
+#endif
+
+    f->f_code = code;
+    extras = code->co_nlocals + ncells + nfrees;
+    f->f_valuestack = f->f_localsplus + extras;
+    for (Py_ssize_t i=0; i<extras; i++) {
+        f->f_localsplus[i] = NULL;
+    }
+    f->f_locals = NULL;
+    f->f_trace = NULL;
+    return f;
+}
+
+
+static inline PyObject *
+frame_get_builtins(PyFrameObject *back, PyObject *globals)
+{
+    PyObject *builtins;
+
+    if (back != NULL && back->f_globals == globals) {
+        /* If we share the globals, we share the builtins.
+           Save a lookup and a call. */
+        builtins = back->f_builtins;
+        assert(builtins != NULL);
+        Py_INCREF(builtins);
+        return builtins;
+    }
+
+    builtins = _PyDict_GetItemIdWithError(globals, &PyId___builtins__);
+    if (builtins != NULL && PyModule_Check(builtins)) {
+        builtins = PyModule_GetDict(builtins);
+        assert(builtins != NULL);
+    }
+    if (builtins != NULL) {
+        Py_INCREF(builtins);
+        return builtins;
+    }
+
+    if (PyErr_Occurred()) {
+        return NULL;
+    }
+
+    /* No builtins! Make up a minimal one.
+       Give them 'None', at least. */
+    builtins = PyDict_New();
+    if (builtins == NULL) {
+        return NULL;
+    }
+    if (PyDict_SetItemString(builtins, "None", Py_None) < 0) {
+        Py_DECREF(builtins);
+        return NULL;
+    }
+    return builtins;
+}
+
+
 PyFrameObject* _Py_HOT_FUNCTION
 _PyFrame_New_NoTrack(PyThreadState *tstate, PyCodeObject *code,
                      PyObject *globals, PyObject *locals)
 {
-    PyFrameObject *back = tstate->frame;
-    PyFrameObject *f;
-    PyObject *builtins;
-    Py_ssize_t i;
-
 #ifdef Py_DEBUG
     if (code == NULL || globals == NULL || !PyDict_Check(globals) ||
         (locals != NULL && !PyMapping_Check(locals))) {
@@ -621,82 +873,19 @@
         return NULL;
     }
 #endif
-    if (back == NULL || back->f_globals != globals) {
-        builtins = _PyDict_GetItemIdWithError(globals, &PyId___builtins__);
-        if (builtins) {
-            if (PyModule_Check(builtins)) {
-                builtins = PyModule_GetDict(builtins);
-                assert(builtins != NULL);
-            }
-        }
-        if (builtins == NULL) {
-            if (PyErr_Occurred()) {
-                return NULL;
-            }
-            /* No builtins!              Make up a minimal one
-               Give them 'None', at least. */
-            builtins = PyDict_New();
-            if (builtins == NULL ||
-                PyDict_SetItemString(
-                    builtins, "None", Py_None) < 0)
-                return NULL;
-        }
-        else
-            Py_INCREF(builtins);
 
+    PyFrameObject *back = tstate->frame;
+    PyObject *builtins = frame_get_builtins(back, globals);
+    if (builtins == NULL) {
+        return NULL;
     }
-    else {
-        /* If we share the globals, we share the builtins.
-           Save a lookup and a call. */
-        builtins = back->f_builtins;
-        assert(builtins != NULL);
-        Py_INCREF(builtins);
-    }
-    if (code->co_zombieframe != NULL) {
-        f = code->co_zombieframe;
-        code->co_zombieframe = NULL;
-        _Py_NewReference((PyObject *)f);
-        assert(f->f_code == code);
-    }
-    else {
-        Py_ssize_t extras, ncells, nfrees;
-        ncells = PyTuple_GET_SIZE(code->co_cellvars);
-        nfrees = PyTuple_GET_SIZE(code->co_freevars);
-        extras = code->co_stacksize + code->co_nlocals + ncells +
-            nfrees;
-        if (free_list == NULL) {
-            f = PyObject_GC_NewVar(PyFrameObject, &PyFrame_Type,
-            extras);
-            if (f == NULL) {
-                Py_DECREF(builtins);
-                return NULL;
-            }
-        }
-        else {
-            assert(numfree > 0);
-            --numfree;
-            f = free_list;
-            free_list = free_list->f_back;
-            if (Py_SIZE(f) < extras) {
-                PyFrameObject *new_f = PyObject_GC_Resize(PyFrameObject, f, extras);
-                if (new_f == NULL) {
-                    PyObject_GC_Del(f);
-                    Py_DECREF(builtins);
-                    return NULL;
-                }
-                f = new_f;
-            }
-            _Py_NewReference((PyObject *)f);
-        }
 
-        f->f_code = code;
-        extras = code->co_nlocals + ncells + nfrees;
-        f->f_valuestack = f->f_localsplus + extras;
-        for (i=0; i<extras; i++)
-            f->f_localsplus[i] = NULL;
-        f->f_locals = NULL;
-        f->f_trace = NULL;
+    PyFrameObject *f = frame_alloc(code);
+    if (f == NULL) {
+        Py_DECREF(builtins);
+        return NULL;
     }
+
     f->f_stacktop = f->f_valuestack;
     f->f_builtins = builtins;
     Py_XINCREF(back);
@@ -731,6 +920,8 @@
     f->f_trace_opcodes = 0;
     f->f_trace_lines = 1;
 
+    assert(f->f_code != NULL);
+
     return f;
 }
 
@@ -751,8 +942,9 @@
 PyFrame_BlockSetup(PyFrameObject *f, int type, int handler, int level)
 {
     PyTryBlock *b;
-    if (f->f_iblock >= CO_MAXBLOCKS)
-        Py_FatalError("XXX block stack overflow");
+    if (f->f_iblock >= CO_MAXBLOCKS) {
+        Py_FatalError("block stack overflow");
+    }
     b = &f->f_blockstack[f->f_iblock++];
     b->b_type = type;
     b->b_level = level;
@@ -763,8 +955,9 @@
 PyFrame_BlockPop(PyFrameObject *f)
 {
     PyTryBlock *b;
-    if (f->f_iblock <= 0)
-        Py_FatalError("XXX block stack underflow");
+    if (f->f_iblock <= 0) {
+        Py_FatalError("block stack underflow");
+    }
     b = &f->f_blockstack[--f->f_iblock];
     return b;
 }
@@ -981,11 +1174,10 @@
 }
 
 /* Clear out the free list */
-int
-PyFrame_ClearFreeList(void)
+void
+_PyFrame_ClearFreeList(void)
 {
-    int freelist_size = numfree;
-
+#if PyFrame_MAXFREELIST > 0
     while (free_list != NULL) {
         PyFrameObject *f = free_list;
         free_list = free_list->f_back;
@@ -993,21 +1185,43 @@
         --numfree;
     }
     assert(numfree == 0);
-    return freelist_size;
+#endif
 }
 
 void
-PyFrame_Fini(void)
+_PyFrame_Fini(void)
 {
-    (void)PyFrame_ClearFreeList();
+    _PyFrame_ClearFreeList();
 }
 
 /* Print summary info about the state of the optimized allocator */
 void
 _PyFrame_DebugMallocStats(FILE *out)
 {
+#if PyFrame_MAXFREELIST > 0
     _PyDebugAllocatorStats(out,
                            "free PyFrameObject",
                            numfree, sizeof(PyFrameObject));
+#endif
 }
 
+
+PyCodeObject *
+PyFrame_GetCode(PyFrameObject *frame)
+{
+    assert(frame != NULL);
+    PyCodeObject *code = frame->f_code;
+    assert(code != NULL);
+    Py_INCREF(code);
+    return code;
+}
+
+
+PyFrameObject*
+PyFrame_GetBack(PyFrameObject *frame)
+{
+    assert(frame != NULL);
+    PyFrameObject *back = frame->f_back;
+    Py_XINCREF(back);
+    return back;
+}
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index df5cc2d..2c60275 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -3,11 +3,9 @@
 
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
 #include "pycore_tupleobject.h"
 #include "code.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 PyObject *
 PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)
@@ -22,9 +20,23 @@
             return NULL;
     }
 
-    op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
-    if (op == NULL)
+    /* __module__: If module name is in globals, use it.
+       Otherwise, use None. */
+    module = PyDict_GetItemWithError(globals, __name__);
+    if (module) {
+        Py_INCREF(module);
+    }
+    else if (PyErr_Occurred()) {
         return NULL;
+    }
+
+    op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
+    if (op == NULL) {
+        Py_XDECREF(module);
+        return NULL;
+    }
+    /* Note: No failures from this point on, since func_dealloc() does not
+       expect a partially-created object. */
 
     op->func_weakreflist = NULL;
     Py_INCREF(code);
@@ -37,6 +49,7 @@
     op->func_kwdefaults = NULL; /* No keyword only defaults */
     op->func_closure = NULL;
     op->vectorcall = _PyFunction_Vectorcall;
+    op->func_module = module;
 
     consts = ((PyCodeObject *)code)->co_consts;
     if (PyTuple_Size(consts) >= 1) {
@@ -50,20 +63,8 @@
     op->func_doc = doc;
 
     op->func_dict = NULL;
-    op->func_module = NULL;
     op->func_annotations = NULL;
 
-    /* __module__: If module name is in globals, use it.
-       Otherwise, use None. */
-    module = PyDict_GetItemWithError(globals, __name__);
-    if (module) {
-        Py_INCREF(module);
-        op->func_module = module;
-    }
-    else if (PyErr_Occurred()) {
-        Py_DECREF(op);
-        return NULL;
-    }
     if (qualname)
         op->func_qualname = qualname;
     else
@@ -196,7 +197,7 @@
     else {
         PyErr_Format(PyExc_SystemError,
                      "expected tuple for closure, got '%.100s'",
-                     closure->ob_type->tp_name);
+                     Py_TYPE(closure)->tp_name);
         return -1;
     }
     Py_XSETREF(((PyFunctionObject *)op)->func_closure, closure);
@@ -239,12 +240,10 @@
 #define OFF(x) offsetof(PyFunctionObject, x)
 
 static PyMemberDef func_memberlist[] = {
-    {"__closure__",   T_OBJECT,     OFF(func_closure),
-     RESTRICTED|READONLY},
-    {"__doc__",       T_OBJECT,     OFF(func_doc), PY_WRITE_RESTRICTED},
-    {"__globals__",   T_OBJECT,     OFF(func_globals),
-     RESTRICTED|READONLY},
-    {"__module__",    T_OBJECT,     OFF(func_module), PY_WRITE_RESTRICTED},
+    {"__closure__",   T_OBJECT,     OFF(func_closure), READONLY},
+    {"__doc__",       T_OBJECT,     OFF(func_doc), 0},
+    {"__globals__",   T_OBJECT,     OFF(func_globals), READONLY},
+    {"__module__",    T_OBJECT,     OFF(func_module), 0},
     {NULL}  /* Sentinel */
 };
 
@@ -541,7 +540,7 @@
             if (!PyCell_Check(o)) {
                 return PyErr_Format(PyExc_TypeError,
                     "arg 5 (closure) expected cell, found %s",
-                                    o->ob_type->tp_name);
+                                    Py_TYPE(o)->tp_name);
             }
         }
     }
@@ -622,17 +621,6 @@
     return 0;
 }
 
-static PyObject *
-function_call(PyObject *func, PyObject *args, PyObject *kwargs)
-{
-    PyObject **stack;
-    Py_ssize_t nargs;
-
-    stack = _PyTuple_ITEMS(args);
-    nargs = PyTuple_GET_SIZE(args);
-    return _PyFunction_FastCallDict(func, stack, nargs, kwargs);
-}
-
 /* Bind a function to an object */
 static PyObject *
 func_descr_get(PyObject *func, PyObject *obj, PyObject *type)
@@ -659,13 +647,13 @@
     0,                                          /* tp_as_sequence */
     0,                                          /* tp_as_mapping */
     0,                                          /* tp_hash */
-    function_call,                              /* tp_call */
+    PyVectorcall_Call,                          /* tp_call */
     0,                                          /* tp_str */
     0,                                          /* tp_getattro */
     0,                                          /* tp_setattro */
     0,                                          /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-    _Py_TPFLAGS_HAVE_VECTORCALL |
+    Py_TPFLAGS_HAVE_VECTORCALL |
     Py_TPFLAGS_METHOD_DESCRIPTOR,               /* tp_flags */
     func_new__doc__,                            /* tp_doc */
     (traverseproc)func_traverse,                /* tp_traverse */
@@ -752,6 +740,10 @@
     }
     if (type == NULL)
         type = (PyObject *)(Py_TYPE(obj));
+    if (Py_TYPE(cm->cm_callable)->tp_descr_get != NULL) {
+        return Py_TYPE(cm->cm_callable)->tp_descr_get(cm->cm_callable, type,
+                                                      NULL);
+    }
     return PyMethod_New(cm->cm_callable, type);
 }
 
diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c
new file mode 100644
index 0000000..c5a81a5
--- /dev/null
+++ b/Objects/genericaliasobject.c
@@ -0,0 +1,635 @@
+// types.GenericAlias -- used to represent e.g. list[int].
+
+#include "Python.h"
+#include "pycore_object.h"
+#include "structmember.h"         // PyMemberDef
+
+typedef struct {
+    PyObject_HEAD
+    PyObject *origin;
+    PyObject *args;
+    PyObject *parameters;
+    PyObject* weakreflist;
+} gaobject;
+
+static void
+ga_dealloc(PyObject *self)
+{
+    gaobject *alias = (gaobject *)self;
+
+    _PyObject_GC_UNTRACK(self);
+    if (alias->weakreflist != NULL) {
+        PyObject_ClearWeakRefs((PyObject *)alias);
+    }
+    Py_XDECREF(alias->origin);
+    Py_XDECREF(alias->args);
+    Py_XDECREF(alias->parameters);
+    self->ob_type->tp_free(self);
+}
+
+static int
+ga_traverse(PyObject *self, visitproc visit, void *arg)
+{
+    gaobject *alias = (gaobject *)self;
+    Py_VISIT(alias->origin);
+    Py_VISIT(alias->args);
+    Py_VISIT(alias->parameters);
+    return 0;
+}
+
+static int
+ga_repr_item(_PyUnicodeWriter *writer, PyObject *p)
+{
+    _Py_IDENTIFIER(__module__);
+    _Py_IDENTIFIER(__qualname__);
+    _Py_IDENTIFIER(__origin__);
+    _Py_IDENTIFIER(__args__);
+    PyObject *qualname = NULL;
+    PyObject *module = NULL;
+    PyObject *r = NULL;
+    PyObject *tmp;
+    int err;
+
+    if (p == Py_Ellipsis) {
+        // The Ellipsis object
+        r = PyUnicode_FromString("...");
+        goto done;
+    }
+
+    if (_PyObject_LookupAttrId(p, &PyId___origin__, &tmp) < 0) {
+        goto done;
+    }
+    if (tmp != NULL) {
+        Py_DECREF(tmp);
+        if (_PyObject_LookupAttrId(p, &PyId___args__, &tmp) < 0) {
+            goto done;
+        }
+        if (tmp != NULL) {
+            Py_DECREF(tmp);
+            // It looks like a GenericAlias
+            goto use_repr;
+        }
+    }
+
+    if (_PyObject_LookupAttrId(p, &PyId___qualname__, &qualname) < 0) {
+        goto done;
+    }
+    if (qualname == NULL) {
+        goto use_repr;
+    }
+    if (_PyObject_LookupAttrId(p, &PyId___module__, &module) < 0) {
+        goto done;
+    }
+    if (module == NULL || module == Py_None) {
+        goto use_repr;
+    }
+
+    // Looks like a class
+    if (PyUnicode_Check(module) &&
+        _PyUnicode_EqualToASCIIString(module, "builtins"))
+    {
+        // builtins don't need a module name
+        r = PyObject_Str(qualname);
+        goto done;
+    }
+    else {
+        r = PyUnicode_FromFormat("%S.%S", module, qualname);
+        goto done;
+    }
+
+use_repr:
+    r = PyObject_Repr(p);
+
+done:
+    Py_XDECREF(qualname);
+    Py_XDECREF(module);
+    if (r == NULL) {
+        // error if any of the above PyObject_Repr/PyUnicode_From* fail
+        err = -1;
+    }
+    else {
+        err = _PyUnicodeWriter_WriteStr(writer, r);
+        Py_DECREF(r);
+    }
+    return err;
+}
+
+static PyObject *
+ga_repr(PyObject *self)
+{
+    gaobject *alias = (gaobject *)self;
+    Py_ssize_t len = PyTuple_GET_SIZE(alias->args);
+
+    _PyUnicodeWriter writer;
+    _PyUnicodeWriter_Init(&writer);
+
+    if (ga_repr_item(&writer, alias->origin) < 0) {
+        goto error;
+    }
+    if (_PyUnicodeWriter_WriteASCIIString(&writer, "[", 1) < 0) {
+        goto error;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        if (i > 0) {
+            if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ", 2) < 0) {
+                goto error;
+            }
+        }
+        PyObject *p = PyTuple_GET_ITEM(alias->args, i);
+        if (ga_repr_item(&writer, p) < 0) {
+            goto error;
+        }
+    }
+    if (len == 0) {
+        // for something like tuple[()] we should print a "()"
+        if (_PyUnicodeWriter_WriteASCIIString(&writer, "()", 2) < 0) {
+            goto error;
+        }
+    }
+    if (_PyUnicodeWriter_WriteASCIIString(&writer, "]", 1) < 0) {
+        goto error;
+    }
+    return _PyUnicodeWriter_Finish(&writer);
+error:
+    _PyUnicodeWriter_Dealloc(&writer);
+    return NULL;
+}
+
+// isinstance(obj, TypeVar) without importing typing.py.
+// Returns -1 for errors.
+static int
+is_typevar(PyObject *obj)
+{
+    PyTypeObject *type = Py_TYPE(obj);
+    if (strcmp(type->tp_name, "TypeVar") != 0) {
+        return 0;
+    }
+    PyObject *module = PyObject_GetAttrString((PyObject *)type, "__module__");
+    if (module == NULL) {
+        return -1;
+    }
+    int res = PyUnicode_Check(module)
+        && _PyUnicode_EqualToASCIIString(module, "typing");
+    Py_DECREF(module);
+    return res;
+}
+
+// Index of item in self[:len], or -1 if not found (self is a tuple)
+static Py_ssize_t
+tuple_index(PyObject *self, Py_ssize_t len, PyObject *item)
+{
+    for (Py_ssize_t i = 0; i < len; i++) {
+        if (PyTuple_GET_ITEM(self, i) == item) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+static int
+tuple_add(PyObject *self, Py_ssize_t len, PyObject *item)
+{
+    if (tuple_index(self, len, item) < 0) {
+        Py_INCREF(item);
+        PyTuple_SET_ITEM(self, len, item);
+        return 1;
+    }
+    return 0;
+}
+
+static PyObject *
+make_parameters(PyObject *args)
+{
+    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
+    Py_ssize_t len = nargs;
+    PyObject *parameters = PyTuple_New(len);
+    if (parameters == NULL)
+        return NULL;
+    Py_ssize_t iparam = 0;
+    for (Py_ssize_t iarg = 0; iarg < nargs; iarg++) {
+        PyObject *t = PyTuple_GET_ITEM(args, iarg);
+        int typevar = is_typevar(t);
+        if (typevar < 0) {
+            Py_DECREF(parameters);
+            return NULL;
+        }
+        if (typevar) {
+            iparam += tuple_add(parameters, iparam, t);
+        }
+        else {
+            _Py_IDENTIFIER(__parameters__);
+            PyObject *subparams;
+            if (_PyObject_LookupAttrId(t, &PyId___parameters__, &subparams) < 0) {
+                Py_DECREF(parameters);
+                return NULL;
+            }
+            if (subparams && PyTuple_Check(subparams)) {
+                Py_ssize_t len2 = PyTuple_GET_SIZE(subparams);
+                Py_ssize_t needed = len2 - 1 - (iarg - iparam);
+                if (needed > 0) {
+                    len += needed;
+                    if (_PyTuple_Resize(&parameters, len) < 0) {
+                        Py_DECREF(subparams);
+                        Py_DECREF(parameters);
+                        return NULL;
+                    }
+                }
+                for (Py_ssize_t j = 0; j < len2; j++) {
+                    PyObject *t2 = PyTuple_GET_ITEM(subparams, j);
+                    iparam += tuple_add(parameters, iparam, t2);
+                }
+            }
+            Py_XDECREF(subparams);
+        }
+    }
+    if (iparam < len) {
+        if (_PyTuple_Resize(&parameters, iparam) < 0) {
+            Py_XDECREF(parameters);
+            return NULL;
+        }
+    }
+    return parameters;
+}
+
+/* If obj is a generic alias, substitute type variables params
+   with substitutions argitems.  For example, if obj is list[T],
+   params is (T, S), and argitems is (str, int), return list[str].
+   If obj doesn't have a __parameters__ attribute or that's not
+   a non-empty tuple, return a new reference to obj. */
+static PyObject *
+subs_tvars(PyObject *obj, PyObject *params, PyObject **argitems)
+{
+    _Py_IDENTIFIER(__parameters__);
+    PyObject *subparams;
+    if (_PyObject_LookupAttrId(obj, &PyId___parameters__, &subparams) < 0) {
+        return NULL;
+    }
+    if (subparams && PyTuple_Check(subparams) && PyTuple_GET_SIZE(subparams)) {
+        Py_ssize_t nparams = PyTuple_GET_SIZE(params);
+        Py_ssize_t nsubargs = PyTuple_GET_SIZE(subparams);
+        PyObject *subargs = PyTuple_New(nsubargs);
+        if (subargs == NULL) {
+            Py_DECREF(subparams);
+            return NULL;
+        }
+        for (Py_ssize_t i = 0; i < nsubargs; ++i) {
+            PyObject *arg = PyTuple_GET_ITEM(subparams, i);
+            Py_ssize_t iparam = tuple_index(params, nparams, arg);
+            if (iparam >= 0) {
+                arg = argitems[iparam];
+            }
+            Py_INCREF(arg);
+            PyTuple_SET_ITEM(subargs, i, arg);
+        }
+
+        obj = PyObject_GetItem(obj, subargs);
+
+        Py_DECREF(subargs);
+    }
+    else {
+        Py_INCREF(obj);
+    }
+    Py_XDECREF(subparams);
+    return obj;
+}
+
+static PyObject *
+ga_getitem(PyObject *self, PyObject *item)
+{
+    gaobject *alias = (gaobject *)self;
+    // do a lookup for __parameters__ so it gets populated (if not already)
+    if (alias->parameters == NULL) {
+        alias->parameters = make_parameters(alias->args);
+        if (alias->parameters == NULL) {
+            return NULL;
+        }
+    }
+    Py_ssize_t nparams = PyTuple_GET_SIZE(alias->parameters);
+    if (nparams == 0) {
+        return PyErr_Format(PyExc_TypeError,
+                            "There are no type variables left in %R",
+                            self);
+    }
+    int is_tuple = PyTuple_Check(item);
+    Py_ssize_t nitems = is_tuple ? PyTuple_GET_SIZE(item) : 1;
+    PyObject **argitems = is_tuple ? &PyTuple_GET_ITEM(item, 0) : &item;
+    if (nitems != nparams) {
+        return PyErr_Format(PyExc_TypeError,
+                            "Too %s arguments for %R",
+                            nitems > nparams ? "many" : "few",
+                            self);
+    }
+    /* Replace all type variables (specified by alias->parameters)
+       with corresponding values specified by argitems.
+        t = list[T];          t[int]      -> newargs = [int]
+        t = dict[str, T];     t[int]      -> newargs = [str, int]
+        t = dict[T, list[S]]; t[str, int] -> newargs = [str, list[int]]
+     */
+    Py_ssize_t nargs = PyTuple_GET_SIZE(alias->args);
+    PyObject *newargs = PyTuple_New(nargs);
+    if (newargs == NULL) {
+        return NULL;
+    }
+    for (Py_ssize_t iarg = 0; iarg < nargs; iarg++) {
+        PyObject *arg = PyTuple_GET_ITEM(alias->args, iarg);
+        int typevar = is_typevar(arg);
+        if (typevar < 0) {
+            Py_DECREF(newargs);
+            return NULL;
+        }
+        if (typevar) {
+            Py_ssize_t iparam = tuple_index(alias->parameters, nparams, arg);
+            assert(iparam >= 0);
+            arg = argitems[iparam];
+            Py_INCREF(arg);
+        }
+        else {
+            arg = subs_tvars(arg, alias->parameters, argitems);
+            if (arg == NULL) {
+                Py_DECREF(newargs);
+                return NULL;
+            }
+        }
+        PyTuple_SET_ITEM(newargs, iarg, arg);
+    }
+
+    PyObject *res = Py_GenericAlias(alias->origin, newargs);
+
+    Py_DECREF(newargs);
+    return res;
+}
+
+static PyMappingMethods ga_as_mapping = {
+    .mp_subscript = ga_getitem,
+};
+
+static Py_hash_t
+ga_hash(PyObject *self)
+{
+    gaobject *alias = (gaobject *)self;
+    // TODO: Hash in the hash for the origin
+    Py_hash_t h0 = PyObject_Hash(alias->origin);
+    if (h0 == -1) {
+        return -1;
+    }
+    Py_hash_t h1 = PyObject_Hash(alias->args);
+    if (h1 == -1) {
+        return -1;
+    }
+    return h0 ^ h1;
+}
+
+static PyObject *
+ga_call(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    gaobject *alias = (gaobject *)self;
+    PyObject *obj = PyObject_Call(alias->origin, args, kwds);
+    if (obj != NULL) {
+        if (PyObject_SetAttrString(obj, "__orig_class__", self) < 0) {
+            if (!PyErr_ExceptionMatches(PyExc_AttributeError) &&
+                !PyErr_ExceptionMatches(PyExc_TypeError))
+            {
+                Py_DECREF(obj);
+                return NULL;
+            }
+            PyErr_Clear();
+        }
+    }
+    return obj;
+}
+
+static const char* const attr_exceptions[] = {
+    "__origin__",
+    "__args__",
+    "__parameters__",
+    "__mro_entries__",
+    "__reduce_ex__",  // needed so we don't look up object.__reduce_ex__
+    "__reduce__",
+    NULL,
+};
+
+static PyObject *
+ga_getattro(PyObject *self, PyObject *name)
+{
+    gaobject *alias = (gaobject *)self;
+    if (PyUnicode_Check(name)) {
+        for (const char * const *p = attr_exceptions; ; p++) {
+            if (*p == NULL) {
+                return PyObject_GetAttr(alias->origin, name);
+            }
+            if (_PyUnicode_EqualToASCIIString(name, *p)) {
+                break;
+            }
+        }
+    }
+    return PyObject_GenericGetAttr(self, name);
+}
+
+static PyObject *
+ga_richcompare(PyObject *a, PyObject *b, int op)
+{
+    if (!Py_IS_TYPE(a, &Py_GenericAliasType) ||
+        !Py_IS_TYPE(b, &Py_GenericAliasType) ||
+        (op != Py_EQ && op != Py_NE))
+    {
+        Py_RETURN_NOTIMPLEMENTED;
+    }
+
+    if (op == Py_NE) {
+        PyObject *eq = ga_richcompare(a, b, Py_EQ);
+        if (eq == NULL)
+            return NULL;
+        Py_DECREF(eq);
+        if (eq == Py_True) {
+            Py_RETURN_FALSE;
+        }
+        else {
+            Py_RETURN_TRUE;
+        }
+    }
+
+    gaobject *aa = (gaobject *)a;
+    gaobject *bb = (gaobject *)b;
+    int eq = PyObject_RichCompareBool(aa->origin, bb->origin, Py_EQ);
+    if (eq < 0) {
+        return NULL;
+    }
+    if (!eq) {
+        Py_RETURN_FALSE;
+    }
+    return PyObject_RichCompare(aa->args, bb->args, Py_EQ);
+}
+
+static PyObject *
+ga_mro_entries(PyObject *self, PyObject *args)
+{
+    gaobject *alias = (gaobject *)self;
+    return PyTuple_Pack(1, alias->origin);
+}
+
+static PyObject *
+ga_instancecheck(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    PyErr_SetString(PyExc_TypeError,
+                    "isinstance() argument 2 cannot be a parameterized generic");
+    return NULL;
+}
+
+static PyObject *
+ga_subclasscheck(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    PyErr_SetString(PyExc_TypeError,
+                    "issubclass() argument 2 cannot be a parameterized generic");
+    return NULL;
+}
+
+static PyObject *
+ga_reduce(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    gaobject *alias = (gaobject *)self;
+    return Py_BuildValue("O(OO)", Py_TYPE(alias),
+                         alias->origin, alias->args);
+}
+
+static PyObject *
+ga_dir(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+    gaobject *alias = (gaobject *)self;
+    PyObject *dir = PyObject_Dir(alias->origin);
+    if (dir == NULL) {
+        return NULL;
+    }
+
+    PyObject *dir_entry = NULL;
+    for (const char * const *p = attr_exceptions; ; p++) {
+        if (*p == NULL) {
+            break;
+        }
+        else {
+            dir_entry = PyUnicode_FromString(*p);
+            if (dir_entry == NULL) {
+                goto error;
+            }
+            int contains = PySequence_Contains(dir, dir_entry);
+            if (contains < 0) {
+                goto error;
+            }
+            if (contains == 0 && PyList_Append(dir, dir_entry) < 0) {
+                goto error;
+            }
+
+            Py_CLEAR(dir_entry);
+        }
+    }
+    return dir;
+
+error:
+    Py_DECREF(dir);
+    Py_XDECREF(dir_entry);
+    return NULL;
+}
+
+static PyMethodDef ga_methods[] = {
+    {"__mro_entries__", ga_mro_entries, METH_O},
+    {"__instancecheck__", ga_instancecheck, METH_O},
+    {"__subclasscheck__", ga_subclasscheck, METH_O},
+    {"__reduce__", ga_reduce, METH_NOARGS},
+    {"__dir__", ga_dir, METH_NOARGS},
+    {0}
+};
+
+static PyMemberDef ga_members[] = {
+    {"__origin__", T_OBJECT, offsetof(gaobject, origin), READONLY},
+    {"__args__", T_OBJECT, offsetof(gaobject, args), READONLY},
+    {0}
+};
+
+static PyObject *
+ga_parameters(PyObject *self, void *unused)
+{
+    gaobject *alias = (gaobject *)self;
+    if (alias->parameters == NULL) {
+        alias->parameters = make_parameters(alias->args);
+        if (alias->parameters == NULL) {
+            return NULL;
+        }
+    }
+    Py_INCREF(alias->parameters);
+    return alias->parameters;
+}
+
+static PyGetSetDef ga_properties[] = {
+    {"__parameters__", ga_parameters, (setter)NULL, "Type variables in the GenericAlias.", NULL},
+    {0}
+};
+
+static PyObject *
+ga_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    if (!_PyArg_NoKeywords("GenericAlias", kwds)) {
+        return NULL;
+    }
+    if (!_PyArg_CheckPositional("GenericAlias", PyTuple_GET_SIZE(args), 2, 2)) {
+        return NULL;
+    }
+    PyObject *origin = PyTuple_GET_ITEM(args, 0);
+    PyObject *arguments = PyTuple_GET_ITEM(args, 1);
+    return Py_GenericAlias(origin, arguments);
+}
+
+// TODO:
+// - argument clinic?
+// - __doc__?
+// - cache?
+PyTypeObject Py_GenericAliasType = {
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
+    .tp_name = "types.GenericAlias",
+    .tp_doc = "Represent a PEP 585 generic type\n"
+              "\n"
+              "E.g. for t = list[int], t.__origin__ is list and t.__args__ is (int,).",
+    .tp_basicsize = sizeof(gaobject),
+    .tp_dealloc = ga_dealloc,
+    .tp_repr = ga_repr,
+    .tp_as_mapping = &ga_as_mapping,
+    .tp_hash = ga_hash,
+    .tp_call = ga_call,
+    .tp_getattro = ga_getattro,
+    .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    .tp_traverse = ga_traverse,
+    .tp_richcompare = ga_richcompare,
+    .tp_weaklistoffset = offsetof(gaobject, weakreflist),
+    .tp_methods = ga_methods,
+    .tp_members = ga_members,
+    .tp_alloc = PyType_GenericAlloc,
+    .tp_new = ga_new,
+    .tp_free = PyObject_GC_Del,
+    .tp_getset = ga_properties,
+};
+
+PyObject *
+Py_GenericAlias(PyObject *origin, PyObject *args)
+{
+    if (!PyTuple_Check(args)) {
+        args = PyTuple_Pack(1, args);
+        if (args == NULL) {
+            return NULL;
+        }
+    }
+    else {
+        Py_INCREF(args);
+    }
+
+    gaobject *alias = PyObject_GC_New(gaobject, &Py_GenericAliasType);
+    if (alias == NULL) {
+        Py_DECREF(args);
+        return NULL;
+    }
+
+    Py_INCREF(origin);
+    alias->origin = origin;
+    alias->args = args;
+    alias->parameters = NULL;
+    alias->weakreflist = NULL;
+    _PyObject_GC_TRACK(alias);
+    return (PyObject *)alias;
+}
diff --git a/Objects/genobject.c b/Objects/genobject.c
index ce7dd48..72c93f6 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -1,10 +1,12 @@
 /* Generator object implementation */
 
 #include "Python.h"
+#include "pycore_ceval.h"         // _PyEval_EvalFrame()
 #include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"      // _PyErr_ClearExcState()
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include "frameobject.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 #include "opcode.h"
 
 static PyObject *gen_close(PyGenObject *, PyObject *);
@@ -57,7 +59,7 @@
             /* Save the current exception, if any. */
             PyErr_Fetch(&error_type, &error_value, &error_traceback);
 
-            res = PyObject_CallFunctionObjArgs(finalizer, self, NULL);
+            res = PyObject_CallOneArg(finalizer, self);
 
             if (res == NULL) {
                 PyErr_WriteUnraisable(self);
@@ -98,21 +100,6 @@
     PyErr_Restore(error_type, error_value, error_traceback);
 }
 
-static inline void
-exc_state_clear(_PyErr_StackItem *exc_state)
-{
-    PyObject *t, *v, *tb;
-    t = exc_state->exc_type;
-    v = exc_state->exc_value;
-    tb = exc_state->exc_traceback;
-    exc_state->exc_type = NULL;
-    exc_state->exc_value = NULL;
-    exc_state->exc_traceback = NULL;
-    Py_XDECREF(t);
-    Py_XDECREF(v);
-    Py_XDECREF(tb);
-}
-
 static void
 gen_dealloc(PyGenObject *gen)
 {
@@ -145,7 +132,7 @@
     Py_CLEAR(gen->gi_code);
     Py_CLEAR(gen->gi_name);
     Py_CLEAR(gen->gi_qualname);
-    exc_state_clear(&gen->gi_exc_state);
+    _PyErr_ClearExcState(&gen->gi_exc_state);
     PyObject_GC_Del(gen);
 }
 
@@ -219,7 +206,13 @@
     gen->gi_running = 1;
     gen->gi_exc_state.previous_item = tstate->exc_info;
     tstate->exc_info = &gen->gi_exc_state;
-    result = PyEval_EvalFrameEx(f, exc);
+
+    if (exc) {
+        assert(_PyErr_Occurred(tstate));
+        _PyErr_ChainStackItem(NULL);
+    }
+
+    result = _PyEval_EvalFrame(tstate, f, exc);
     tstate->exc_info = gen->gi_exc_state.previous_item;
     gen->gi_exc_state.previous_item = NULL;
     gen->gi_running = 0;
@@ -254,7 +247,7 @@
         if (PyCoro_CheckExact(gen)) {
             msg = "coroutine raised StopIteration";
         }
-        else if PyAsyncGen_CheckExact(gen) {
+        else if (PyAsyncGen_CheckExact(gen)) {
             msg = "async generator raised StopIteration";
         }
         _PyErr_FormatFromCause(PyExc_RuntimeError, "%s", msg);
@@ -273,7 +266,7 @@
     if (!result || f->f_stacktop == NULL) {
         /* generator can't be rerun, so release the frame */
         /* first clean reference cycle through stored exception traceback */
-        exc_state_clear(&gen->gi_exc_state);
+        _PyErr_ClearExcState(&gen->gi_exc_state);
         gen->gi_frame->f_gen = NULL;
         gen->gi_frame = NULL;
         Py_DECREF(f);
@@ -421,11 +414,21 @@
         }
         if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf)) {
             /* `yf` is a generator or a coroutine. */
+            PyThreadState *tstate = _PyThreadState_GET();
+            PyFrameObject *f = tstate->frame;
+
             gen->gi_running = 1;
+            /* Since we are fast-tracking things by skipping the eval loop,
+               we need to update the current frame so the stack trace
+               will be reported correctly to the user. */
+            /* XXX We should probably be updating the current frame
+               somewhere in ceval.c. */
+            tstate->frame = gen->gi_frame;
             /* Close the generator that we are currently iterating with
                'yield from' or awaiting on with 'await'. */
             ret = _gen_throw((PyGenObject *)yf, close_on_genexit,
                              typ, val, tb);
+            tstate->frame = f;
             gen->gi_running = 0;
         } else {
             /* `yf` is an iterator or a coroutine-like object. */
@@ -562,7 +565,7 @@
         return 0;
     }
     /* Construct an exception instance manually with
-     * PyObject_CallFunctionObjArgs and pass it to PyErr_SetObject.
+     * PyObject_CallOneArg and pass it to PyErr_SetObject.
      *
      * We do this to handle a situation when "value" is a tuple, in which
      * case PyErr_SetObject would set the value of StopIteration to
@@ -570,7 +573,7 @@
      *
      * (See PyErr_SetObject/_PyErr_CreateException code for details.)
      */
-    e = PyObject_CallFunctionObjArgs(PyExc_StopIteration, value, NULL);
+    e = PyObject_CallOneArg(PyExc_StopIteration, value);
     if (e == NULL) {
         return -1;
     }
@@ -819,22 +822,6 @@
     return gen_new_with_qualname(&PyGen_Type, f, NULL, NULL);
 }
 
-int
-PyGen_NeedsFinalizing(PyGenObject *gen)
-{
-    PyFrameObject *f = gen->gi_frame;
-
-    if (f == NULL || f->f_stacktop == NULL)
-        return 0; /* no frame or empty blockstack == no finalization */
-
-    /* Any (exception-handling) block type requires cleanup. */
-    if (f->f_iblock > 0)
-        return 1;
-
-    /* No blocks, it's safe to skip finalization. */
-    return 0;
-}
-
 /* Coroutine Object */
 
 typedef struct {
@@ -1132,11 +1119,11 @@
     }
     frame = PyEval_GetFrame();
     for (int i = 0; i < frame_count; ++i) {
-        PyObject *frameinfo = Py_BuildValue(
-            "OiO",
-            frame->f_code->co_filename,
-            PyFrame_GetLineNumber(frame),
-            frame->f_code->co_name);
+        PyCodeObject *code = frame->f_code;
+        PyObject *frameinfo = Py_BuildValue("OiO",
+                                            code->co_filename,
+                                            PyFrame_GetLineNumber(frame),
+                                            code->co_name);
         if (!frameinfo) {
             Py_DECREF(cr_origin);
             return NULL;
@@ -1231,10 +1218,10 @@
 static int ag_asend_freelist_free = 0;
 
 #define _PyAsyncGenWrappedValue_CheckExact(o) \
-                    (Py_TYPE(o) == &_PyAsyncGenWrappedValue_Type)
+                    Py_IS_TYPE(o, &_PyAsyncGenWrappedValue_Type)
 
 #define PyAsyncGenASend_CheckExact(o) \
-                    (Py_TYPE(o) == &_PyAsyncGenASend_Type)
+                    Py_IS_TYPE(o, &_PyAsyncGenASend_Type)
 
 
 static int
@@ -1279,7 +1266,7 @@
         PyObject *res;
 
         Py_INCREF(firstiter);
-        res = PyObject_CallFunctionObjArgs(firstiter, o, NULL);
+        res = PyObject_CallOneArg(firstiter, (PyObject *)o);
         Py_DECREF(firstiter);
         if (res == NULL) {
             return 1;
@@ -1361,6 +1348,8 @@
     {"asend", (PyCFunction)async_gen_asend, METH_O, async_asend_doc},
     {"athrow",(PyCFunction)async_gen_athrow, METH_VARARGS, async_athrow_doc},
     {"aclose", (PyCFunction)async_gen_aclose, METH_NOARGS, async_aclose_doc},
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL, NULL}        /* Sentinel */
 };
 
@@ -1442,11 +1431,9 @@
 }
 
 
-int
-PyAsyncGen_ClearFreeLists(void)
+void
+_PyAsyncGen_ClearFreeLists(void)
 {
-    int ret = ag_value_freelist_free + ag_asend_freelist_free;
-
     while (ag_value_freelist_free) {
         _PyAsyncGenWrappedValue *o;
         o = ag_value_freelist[--ag_value_freelist_free];
@@ -1457,17 +1444,15 @@
     while (ag_asend_freelist_free) {
         PyAsyncGenASend *o;
         o = ag_asend_freelist[--ag_asend_freelist_free];
-        assert(Py_TYPE(o) == &_PyAsyncGenASend_Type);
+        assert(Py_IS_TYPE(o, &_PyAsyncGenASend_Type));
         PyObject_GC_Del(o);
     }
-
-    return ret;
 }
 
 void
-PyAsyncGen_Fini(void)
+_PyAsyncGen_Fini(void)
 {
-    PyAsyncGen_ClearFreeLists();
+    _PyAsyncGen_ClearFreeLists();
 }
 
 
diff --git a/Objects/interpreteridobject.c b/Objects/interpreteridobject.c
index 94f5dd7..39bde97 100644
--- a/Objects/interpreteridobject.c
+++ b/Objects/interpreteridobject.c
@@ -1,7 +1,8 @@
 /* InterpreterID object */
 
 #include "Python.h"
-#include "internal/pycore_pystate.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
+#include "pycore_interp.h"     // _PyInterpreterState_LookUpID()
 #include "interpreteridobject.h"
 
 
@@ -42,7 +43,7 @@
     if (PyObject_TypeCheck(arg, &_PyInterpreterID_Type)) {
         id = ((interpid *)arg)->id;
     }
-    else if (PyIndex_Check(arg)) {
+    else if (_PyIndex_Check(arg)) {
         id = PyLong_AsLongLong(arg);
         if (id == -1 && PyErr_Occurred()) {
             return 0;
@@ -56,7 +57,7 @@
     else {
         PyErr_Format(PyExc_TypeError,
                      "interpreter ID must be an int, got %.100s",
-                     arg->ob_type->tp_name);
+                     Py_TYPE(arg)->tp_name);
         return 0;
     }
     *(int64_t *)ptr = id;
@@ -269,7 +270,7 @@
     if (_PyInterpreterState_IDInitref(interp) != 0) {
         return NULL;
     };
-    PY_INT64_T id = PyInterpreterState_GetID(interp);
+    int64_t id = PyInterpreterState_GetID(interp);
     if (id < 0) {
         return NULL;
     }
diff --git a/Objects/iterobject.c b/Objects/iterobject.c
index da89298..6cac41a 100644
--- a/Objects/iterobject.c
+++ b/Objects/iterobject.c
@@ -2,8 +2,6 @@
 
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
 
 typedef struct {
     PyObject_HEAD
@@ -11,6 +9,8 @@
     PyObject *it_seq; /* Set to NULL when iterator is exhausted */
 } seqiterobject;
 
+_Py_IDENTIFIER(iter);
+
 PyObject *
 PySeqIter_New(PyObject *seq)
 {
@@ -104,7 +104,6 @@
 static PyObject *
 iter_reduce(seqiterobject *it, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     if (it->it_seq != NULL)
         return Py_BuildValue("N(O)n", _PyEval_GetBuiltinId(&PyId_iter),
                              it->it_seq, it->it_index);
@@ -244,7 +243,6 @@
 static PyObject *
 calliter_reduce(calliterobject *it, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     if (it->it_callable != NULL && it->it_sentinel != NULL)
         return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_iter),
                              it->it_callable, it->it_sentinel);
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 3044408..f9eb370 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -1,8 +1,8 @@
 /* List object implementation */
 
 #include "Python.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
 #include "pycore_object.h"
-#include "pycore_pystate.h"
 #include "pycore_tupleobject.h"
 #include "pycore_accu.h"
 
@@ -45,7 +45,7 @@
     */
     if (allocated >= newsize && newsize >= (allocated >> 1)) {
         assert(self->ob_item != NULL || newsize == 0);
-        Py_SIZE(self) = newsize;
+        Py_SET_SIZE(self, newsize);
         return 0;
     }
 
@@ -54,15 +54,17 @@
      * enough to give linear-time amortized behavior over a long
      * sequence of appends() in the presence of a poorly-performing
      * system realloc().
-     * The growth pattern is:  0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
+     * Add padding to make the allocated size multiple of 4.
+     * The growth pattern is:  0, 4, 8, 16, 24, 32, 40, 52, 64, 76, ...
      * Note: new_allocated won't overflow because the largest possible value
      *       is PY_SSIZE_T_MAX * (9 / 8) + 6 which always fits in a size_t.
      */
-    new_allocated = (size_t)newsize + (newsize >> 3) + (newsize < 9 ? 3 : 6);
-    if (new_allocated > (size_t)PY_SSIZE_T_MAX / sizeof(PyObject *)) {
-        PyErr_NoMemory();
-        return -1;
-    }
+    new_allocated = ((size_t)newsize + (newsize >> 3) + 6) & ~(size_t)3;
+    /* Do not overallocate if the new size is closer to overalocated size
+     * than to the old size.
+     */
+    if (newsize - Py_SIZE(self) > (Py_ssize_t)(new_allocated - newsize))
+        new_allocated = ((size_t)newsize + 3) & ~(size_t)3;
 
     if (newsize == 0)
         new_allocated = 0;
@@ -73,7 +75,7 @@
         return -1;
     }
     self->ob_item = items;
-    Py_SIZE(self) = newsize;
+    Py_SET_SIZE(self, newsize);
     self->allocated = new_allocated;
     return 0;
 }
@@ -94,53 +96,28 @@
     return 0;
 }
 
-/* Debug statistic to compare allocations with reuse through the free list */
-#undef SHOW_ALLOC_COUNT
-#ifdef SHOW_ALLOC_COUNT
-static size_t count_alloc = 0;
-static size_t count_reuse = 0;
-
-static void
-show_alloc(void)
-{
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    if (!interp->config.show_alloc_count) {
-        return;
-    }
-
-    fprintf(stderr, "List allocations: %" PY_FORMAT_SIZE_T "d\n",
-        count_alloc);
-    fprintf(stderr, "List reuse through freelist: %" PY_FORMAT_SIZE_T
-        "d\n", count_reuse);
-    fprintf(stderr, "%.2f%% reuse rate\n\n",
-        (100.0*count_reuse/(count_alloc+count_reuse)));
-}
-#endif
-
 /* Empty list reuse scheme to save calls to malloc and free */
 #ifndef PyList_MAXFREELIST
-#define PyList_MAXFREELIST 80
+#  define PyList_MAXFREELIST 80
 #endif
+
 static PyListObject *free_list[PyList_MAXFREELIST];
 static int numfree = 0;
 
-int
-PyList_ClearFreeList(void)
+void
+_PyList_ClearFreeList(void)
 {
-    PyListObject *op;
-    int ret = numfree;
     while (numfree) {
-        op = free_list[--numfree];
+        PyListObject *op = free_list[--numfree];
         assert(PyList_CheckExact(op));
         PyObject_GC_Del(op);
     }
-    return ret;
 }
 
 void
-PyList_Fini(void)
+_PyList_Fini(void)
 {
-    PyList_ClearFreeList();
+    _PyList_ClearFreeList();
 }
 
 /* Print summary info about the state of the optimized allocator */
@@ -156,13 +133,6 @@
 PyList_New(Py_ssize_t size)
 {
     PyListObject *op;
-#ifdef SHOW_ALLOC_COUNT
-    static int initialized = 0;
-    if (!initialized) {
-        Py_AtExit(show_alloc);
-        initialized = 1;
-    }
-#endif
 
     if (size < 0) {
         PyErr_BadInternalCall();
@@ -172,16 +142,10 @@
         numfree--;
         op = free_list[numfree];
         _Py_NewReference((PyObject *)op);
-#ifdef SHOW_ALLOC_COUNT
-        count_reuse++;
-#endif
     } else {
         op = PyObject_GC_New(PyListObject, &PyList_Type);
         if (op == NULL)
             return NULL;
-#ifdef SHOW_ALLOC_COUNT
-        count_alloc++;
-#endif
     }
     if (size <= 0)
         op->ob_item = NULL;
@@ -192,7 +156,7 @@
             return PyErr_NoMemory();
         }
     }
-    Py_SIZE(op) = size;
+    Py_SET_SIZE(op, size);
     op->allocated = size;
     _PyObject_GC_TRACK(op);
     return (PyObject *) op;
@@ -452,7 +416,7 @@
     for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(a); ++i) {
         item = PyList_GET_ITEM(a, i);
         Py_INCREF(item);
-        cmp = PyObject_RichCompareBool(el, item, Py_EQ);
+        cmp = PyObject_RichCompareBool(item, el, Py_EQ);
         Py_DECREF(item);
     }
     return cmp;
@@ -493,7 +457,7 @@
         Py_INCREF(v);
         dest[i] = v;
     }
-    Py_SIZE(np) = len;
+    Py_SET_SIZE(np, len);
     return (PyObject *)np;
 }
 
@@ -529,7 +493,7 @@
     if (!PyList_Check(bb)) {
         PyErr_Format(PyExc_TypeError,
                   "can only concatenate list (not \"%.200s\") to list",
-                  bb->ob_type->tp_name);
+                  Py_TYPE(bb)->tp_name);
         return NULL;
     }
 #define b ((PyListObject *)bb)
@@ -554,7 +518,7 @@
         Py_INCREF(v);
         dest[i] = v;
     }
-    Py_SIZE(np) = size;
+    Py_SET_SIZE(np, size);
     return (PyObject *)np;
 #undef b
 }
@@ -597,7 +561,7 @@
             }
         }
     }
-    Py_SIZE(np) = size;
+    Py_SET_SIZE(np, size);
     return (PyObject *) np;
 }
 
@@ -610,7 +574,7 @@
         /* Because XDECREF can recursively invoke operations on
            this list, we make it empty first. */
         i = Py_SIZE(a);
-        Py_SIZE(a) = 0;
+        Py_SET_SIZE(a, 0);
         a->ob_item = NULL;
         a->allocated = 0;
         while (--i >= 0) {
@@ -928,7 +892,7 @@
     it = PyObject_GetIter(iterable);
     if (it == NULL)
         return NULL;
-    iternext = *it->ob_type->tp_iternext;
+    iternext = *Py_TYPE(it)->tp_iternext;
 
     /* Guess a result list size. */
     n = PyObject_LengthHint(iterable, 8);
@@ -949,7 +913,7 @@
         if (list_resize(self, mn) < 0)
             goto error;
         /* Make the list sane again. */
-        Py_SIZE(self) = m;
+        Py_SET_SIZE(self, m);
     }
 
     /* Run iterator to exhaustion. */
@@ -967,7 +931,7 @@
         if (Py_SIZE(self) < self->allocated) {
             /* steals ref */
             PyList_SET_ITEM(self, Py_SIZE(self), item);
-            ++Py_SIZE(self);
+            Py_SET_SIZE(self, Py_SIZE(self) + 1);
         }
         else {
             int status = app1(self, item);
@@ -1215,7 +1179,7 @@
 
     /* This function is used by unsafe_object_compare to optimize comparisons
      * when we know our list is type-homogeneous but we can't assume anything else.
-     * In the pre-sort check it is set equal to key->ob_type->tp_richcompare */
+     * In the pre-sort check it is set equal to Py_TYPE(key)->tp_richcompare */
     PyObject *(*key_richcompare)(PyObject *, PyObject *, int);
 
     /* This function is used by unsafe_tuple_compare to compare the first elements
@@ -2051,7 +2015,7 @@
     PyObject *res_obj; int res;
 
     /* No assumptions, because we check first: */
-    if (v->ob_type->tp_richcompare != ms->key_richcompare)
+    if (Py_TYPE(v)->tp_richcompare != ms->key_richcompare)
         return PyObject_RichCompareBool(v, w, Py_LT);
 
     assert(ms->key_richcompare != NULL);
@@ -2088,8 +2052,8 @@
     int res;
 
     /* Modified from Objects/unicodeobject.c:unicode_compare, assuming: */
-    assert(v->ob_type == w->ob_type);
-    assert(v->ob_type == &PyUnicode_Type);
+    assert(Py_IS_TYPE(v, &PyUnicode_Type));
+    assert(Py_IS_TYPE(w, &PyUnicode_Type));
     assert(PyUnicode_KIND(v) == PyUnicode_KIND(w));
     assert(PyUnicode_KIND(v) == PyUnicode_1BYTE_KIND);
 
@@ -2111,8 +2075,8 @@
     PyLongObject *vl, *wl; sdigit v0, w0; int res;
 
     /* Modified from Objects/longobject.c:long_compare, assuming: */
-    assert(v->ob_type == w->ob_type);
-    assert(v->ob_type == &PyLong_Type);
+    assert(Py_IS_TYPE(v, &PyLong_Type));
+    assert(Py_IS_TYPE(w, &PyLong_Type));
     assert(Py_ABS(Py_SIZE(v)) <= 1);
     assert(Py_ABS(Py_SIZE(w)) <= 1);
 
@@ -2139,8 +2103,8 @@
     int res;
 
     /* Modified from Objects/floatobject.c:float_richcompare, assuming: */
-    assert(v->ob_type == w->ob_type);
-    assert(v->ob_type == &PyFloat_Type);
+    assert(Py_IS_TYPE(v, &PyFloat_Type));
+    assert(Py_IS_TYPE(w, &PyFloat_Type));
 
     res = PyFloat_AS_DOUBLE(v) < PyFloat_AS_DOUBLE(w);
     assert(res == PyObject_RichCompareBool(v, w, Py_LT));
@@ -2161,8 +2125,8 @@
     int k;
 
     /* Modified from Objects/tupleobject.c:tuplerichcompare, assuming: */
-    assert(v->ob_type == w->ob_type);
-    assert(v->ob_type == &PyTuple_Type);
+    assert(Py_IS_TYPE(v, &PyTuple_Type));
+    assert(Py_IS_TYPE(w, &PyTuple_Type));
     assert(Py_SIZE(v) > 0);
     assert(Py_SIZE(w) > 0);
 
@@ -2240,7 +2204,7 @@
     saved_ob_size = Py_SIZE(self);
     saved_ob_item = self->ob_item;
     saved_allocated = self->allocated;
-    Py_SIZE(self) = 0;
+    Py_SET_SIZE(self, 0);
     self->ob_item = NULL;
     self->allocated = -1; /* any operation will reset it to >= 0 */
 
@@ -2262,8 +2226,7 @@
         }
 
         for (i = 0; i < saved_ob_size ; i++) {
-            keys[i] = PyObject_CallFunctionObjArgs(keyfunc, saved_ob_item[i],
-                                                   NULL);
+            keys[i] = PyObject_CallOneArg(keyfunc, saved_ob_item[i]);
             if (keys[i] == NULL) {
                 for (i=i-1 ; i>=0 ; i--)
                     Py_DECREF(keys[i]);
@@ -2284,12 +2247,12 @@
      * set ms appropriately. */
     if (saved_ob_size > 1) {
         /* Assume the first element is representative of the whole list. */
-        int keys_are_in_tuples = (lo.keys[0]->ob_type == &PyTuple_Type &&
+        int keys_are_in_tuples = (Py_IS_TYPE(lo.keys[0], &PyTuple_Type) &&
                                   Py_SIZE(lo.keys[0]) > 0);
 
         PyTypeObject* key_type = (keys_are_in_tuples ?
-                                  PyTuple_GET_ITEM(lo.keys[0], 0)->ob_type :
-                                  lo.keys[0]->ob_type);
+                                  Py_TYPE(PyTuple_GET_ITEM(lo.keys[0], 0)) :
+                                  Py_TYPE(lo.keys[0]));
 
         int keys_are_all_same_type = 1;
         int strings_are_latin = 1;
@@ -2299,7 +2262,7 @@
         for (i=0; i < saved_ob_size; i++) {
 
             if (keys_are_in_tuples &&
-                !(lo.keys[i]->ob_type == &PyTuple_Type && Py_SIZE(lo.keys[i]) != 0)) {
+                !(Py_IS_TYPE(lo.keys[i], &PyTuple_Type) && Py_SIZE(lo.keys[i]) != 0)) {
                 keys_are_in_tuples = 0;
                 keys_are_all_same_type = 0;
                 break;
@@ -2312,7 +2275,7 @@
                              PyTuple_GET_ITEM(lo.keys[i], 0) :
                              lo.keys[i]);
 
-            if (key->ob_type != key_type) {
+            if (!Py_IS_TYPE(key, key_type)) {
                 keys_are_all_same_type = 0;
                 /* If keys are in tuple we must loop over the whole list to make
                    sure all items are tuples */
@@ -2458,7 +2421,7 @@
 keyfunc_fail:
     final_ob_item = self->ob_item;
     i = Py_SIZE(self);
-    Py_SIZE(self) = saved_ob_size;
+    Py_SET_SIZE(self, saved_ob_size);
     self->ob_item = saved_ob_item;
     self->allocated = saved_allocated;
     if (final_ob_item != NULL) {
@@ -2680,8 +2643,7 @@
 
         Py_INCREF(vitem);
         Py_INCREF(witem);
-        int k = PyObject_RichCompareBool(vl->ob_item[i],
-                                         wl->ob_item[i], Py_EQ);
+        int k = PyObject_RichCompareBool(vitem, witem, Py_EQ);
         Py_DECREF(vitem);
         Py_DECREF(witem);
         if (k < 0)
@@ -2755,6 +2717,33 @@
     return 0;
 }
 
+static PyObject *
+list_vectorcall(PyObject *type, PyObject * const*args,
+                size_t nargsf, PyObject *kwnames)
+{
+    if (!_PyArg_NoKwnames("list", kwnames)) {
+        return NULL;
+    }
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (!_PyArg_CheckPositional("list", nargs, 0, 1)) {
+        return NULL;
+    }
+
+    assert(PyType_Check(type));
+    PyObject *list = PyType_GenericAlloc((PyTypeObject *)type, 0);
+    if (list == NULL) {
+        return NULL;
+    }
+    if (nargs) {
+        if (list___init___impl((PyListObject *)list, args[0])) {
+            Py_DECREF(list);
+            return NULL;
+        }
+    }
+    return list;
+}
+
+
 /*[clinic input]
 list.__sizeof__
 
@@ -2789,6 +2778,7 @@
     LIST_COUNT_METHODDEF
     LIST_REVERSE_METHODDEF
     LIST_SORT_METHODDEF
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
     {NULL,              NULL}           /* sentinel */
 };
 
@@ -2808,7 +2798,7 @@
 static PyObject *
 list_subscript(PyListObject* self, PyObject* item)
 {
-    if (PyIndex_Check(item)) {
+    if (_PyIndex_Check(item)) {
         Py_ssize_t i;
         i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
@@ -2818,7 +2808,8 @@
         return list_item(self, i);
     }
     else if (PySlice_Check(item)) {
-        Py_ssize_t start, stop, step, slicelength, cur, i;
+        Py_ssize_t start, stop, step, slicelength, i;
+        size_t cur;
         PyObject* result;
         PyObject* it;
         PyObject **src, **dest;
@@ -2847,14 +2838,14 @@
                 Py_INCREF(it);
                 dest[i] = it;
             }
-            Py_SIZE(result) = slicelength;
+            Py_SET_SIZE(result, slicelength);
             return result;
         }
     }
     else {
         PyErr_Format(PyExc_TypeError,
                      "list indices must be integers or slices, not %.200s",
-                     item->ob_type->tp_name);
+                     Py_TYPE(item)->tp_name);
         return NULL;
     }
 }
@@ -2862,7 +2853,7 @@
 static int
 list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
 {
-    if (PyIndex_Check(item)) {
+    if (_PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return -1;
@@ -2940,7 +2931,7 @@
                      sizeof(PyObject *));
             }
 
-            Py_SIZE(self) -= slicelength;
+            Py_SET_SIZE(self, Py_SIZE(self) - slicelength);
             res = list_resize(self, Py_SIZE(self));
 
             for (i = 0; i < slicelength; i++) {
@@ -2954,7 +2945,8 @@
             /* assign slice */
             PyObject *ins, *seq;
             PyObject **garbage, **seqitems, **selfitems;
-            Py_ssize_t cur, i;
+            Py_ssize_t i;
+            size_t cur;
 
             /* protect against a[::-1] = a */
             if (self == (PyListObject*)value) {
@@ -3016,7 +3008,7 @@
     else {
         PyErr_Format(PyExc_TypeError,
                      "list indices must be integers or slices, not %.200s",
-                     item->ob_type->tp_name);
+                     Py_TYPE(item)->tp_name);
         return -1;
     }
 }
@@ -3068,6 +3060,7 @@
     PyType_GenericAlloc,                        /* tp_alloc */
     PyType_GenericNew,                          /* tp_new */
     PyObject_GC_Del,                            /* tp_free */
+    .tp_vectorcall = list_vectorcall,
 };
 
 /*********************** List Iterator **************************/
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 67dce97..0ff0e80 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -3,6 +3,8 @@
 /* XXX The functional organization of this file is terrible */
 
 #include "Python.h"
+#include "pycore_interp.h"    // _PY_NSMALLPOSINTS
+#include "pycore_pystate.h"   // _Py_IsMainInterpreter()
 #include "longintrepr.h"
 
 #include <float.h>
@@ -15,12 +17,8 @@
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=ec0275e3422a36e3]*/
 
-#ifndef NSMALLPOSINTS
-#define NSMALLPOSINTS           257
-#endif
-#ifndef NSMALLNEGINTS
-#define NSMALLNEGINTS           5
-#endif
+#define NSMALLPOSINTS           _PY_NSMALLPOSINTS
+#define NSMALLNEGINTS           _PY_NSMALLNEGINTS
 
 _Py_IDENTIFIER(little);
 _Py_IDENTIFIER(big);
@@ -35,42 +33,25 @@
 PyObject *_PyLong_One = NULL;
 
 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
-/* Small integers are preallocated in this array so that they
-   can be shared.
-   The integers that are preallocated are those in the range
-   -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
-*/
-static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
-#ifdef COUNT_ALLOCS
-Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
-#endif
+#define IS_SMALL_INT(ival) (-NSMALLNEGINTS <= (ival) && (ival) < NSMALLPOSINTS)
+#define IS_SMALL_UINT(ival) ((ival) < NSMALLPOSINTS)
 
 static PyObject *
 get_small_int(sdigit ival)
 {
-    PyObject *v;
-    assert(-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS);
-    v = (PyObject *)&small_ints[ival + NSMALLNEGINTS];
+    assert(IS_SMALL_INT(ival));
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *v = (PyObject*)tstate->interp->small_ints[ival + NSMALLNEGINTS];
     Py_INCREF(v);
-#ifdef COUNT_ALLOCS
-    if (ival >= 0)
-        _Py_quick_int_allocs++;
-    else
-        _Py_quick_neg_int_allocs++;
-#endif
     return v;
 }
-#define CHECK_SMALL_INT(ival) \
-    do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
-        return get_small_int((sdigit)ival); \
-    } while(0)
 
 static PyLongObject *
 maybe_small_long(PyLongObject *v)
 {
     if (v && Py_ABS(Py_SIZE(v)) <= 1) {
         sdigit ival = MEDIUM_VALUE(v);
-        if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
+        if (IS_SMALL_INT(ival)) {
             Py_DECREF(v);
             return (PyLongObject *)get_small_int(ival);
         }
@@ -78,7 +59,9 @@
     return v;
 }
 #else
-#define CHECK_SMALL_INT(ival)
+#define IS_SMALL_INT(ival) 0
+#define IS_SMALL_UINT(ival) 0
+#define get_small_int(ival) (Py_UNREACHABLE(), NULL)
 #define maybe_small_long(val) (val)
 #endif
 
@@ -91,7 +74,7 @@
 
     x = (PyLongObject *)*x_p;
     if (Py_REFCNT(x) == 1) {
-        Py_SIZE(x) = -Py_SIZE(x);
+        Py_SET_SIZE(x, -Py_SIZE(x));
         return;
     }
 
@@ -130,8 +113,9 @@
 
     while (i > 0 && v->ob_digit[i-1] == 0)
         --i;
-    if (i != j)
-        Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
+    if (i != j) {
+        Py_SET_SIZE(v, (Py_SIZE(v) < 0) ? -(i) : i);
+    }
     return v;
 }
 
@@ -168,7 +152,7 @@
     if (!PyLong_Check(result)) {
         PyErr_Format(PyExc_TypeError,
                      "__int__ returned non-int (type %.200s)",
-                     result->ob_type->tp_name);
+                     Py_TYPE(result)->tp_name);
         Py_DECREF(result);
         return NULL;
     }
@@ -177,7 +161,7 @@
             "__int__ returned non-int (type %.200s).  "
             "The ability to return an instance of a strict subclass of int "
             "is deprecated, and may be removed in a future version of Python.",
-            result->ob_type->tp_name)) {
+            Py_TYPE(result)->tp_name)) {
         Py_DECREF(result);
         return NULL;
     }
@@ -221,7 +205,7 @@
         if (!PyLong_Check(result)) {
             PyErr_Format(PyExc_TypeError,
                          "__index__ returned non-int (type %.200s)",
-                         result->ob_type->tp_name);
+                         Py_TYPE(result)->tp_name);
             Py_DECREF(result);
             return NULL;
         }
@@ -230,7 +214,7 @@
                 "__index__ returned non-int (type %.200s).  "
                 "The ability to return an instance of a strict subclass of int "
                 "is deprecated, and may be removed in a future version of Python.",
-                result->ob_type->tp_name))
+                Py_TYPE(result)->tp_name))
         {
             Py_DECREF(result);
             return NULL;
@@ -293,13 +277,16 @@
         i = -(i);
     if (i < 2) {
         sdigit ival = MEDIUM_VALUE(src);
-        CHECK_SMALL_INT(ival);
+        if (IS_SMALL_INT(ival)) {
+            return get_small_int(ival);
+        }
     }
     result = _PyLong_New(i);
     if (result != NULL) {
-        Py_SIZE(result) = Py_SIZE(src);
-        while (--i >= 0)
+        Py_SET_SIZE(result, Py_SIZE(src));
+        while (--i >= 0) {
             result->ob_digit[i] = src->ob_digit[i];
+        }
     }
     return (PyObject *)result;
 }
@@ -315,7 +302,9 @@
     int ndigits = 0;
     int sign;
 
-    CHECK_SMALL_INT(ival);
+    if (IS_SMALL_INT(ival)) {
+        return get_small_int((sdigit)ival);
+    }
 
     if (ival < 0) {
         /* negate: can't write this as abs_ival = -ival since that
@@ -332,7 +321,7 @@
     if (!(abs_ival >> PyLong_SHIFT)) {
         v = _PyLong_New(1);
         if (v) {
-            Py_SIZE(v) = sign;
+            Py_SET_SIZE(v, sign);
             v->ob_digit[0] = Py_SAFE_DOWNCAST(
                 abs_ival, unsigned long, digit);
         }
@@ -344,7 +333,7 @@
     if (!(abs_ival >> 2*PyLong_SHIFT)) {
         v = _PyLong_New(2);
         if (v) {
-            Py_SIZE(v) = 2*sign;
+            Py_SET_SIZE(v, 2 * sign);
             v->ob_digit[0] = Py_SAFE_DOWNCAST(
                 abs_ival & PyLong_MASK, unsigned long, digit);
             v->ob_digit[1] = Py_SAFE_DOWNCAST(
@@ -363,7 +352,7 @@
     v = _PyLong_New(ndigits);
     if (v != NULL) {
         digit *p = v->ob_digit;
-        Py_SIZE(v) = ndigits*sign;
+        Py_SET_SIZE(v, ndigits * sign);
         t = abs_ival;
         while (t) {
             *p++ = Py_SAFE_DOWNCAST(
@@ -374,32 +363,52 @@
     return (PyObject *)v;
 }
 
+#define PYLONG_FROM_UINT(INT_TYPE, ival) \
+    do { \
+        if (IS_SMALL_UINT(ival)) { \
+            return get_small_int((sdigit)(ival)); \
+        } \
+        /* Count the number of Python digits. */ \
+        Py_ssize_t ndigits = 0; \
+        INT_TYPE t = (ival); \
+        while (t) { \
+            ++ndigits; \
+            t >>= PyLong_SHIFT; \
+        } \
+        PyLongObject *v = _PyLong_New(ndigits); \
+        if (v == NULL) { \
+            return NULL; \
+        } \
+        digit *p = v->ob_digit; \
+        while ((ival)) { \
+            *p++ = (digit)((ival) & PyLong_MASK); \
+            (ival) >>= PyLong_SHIFT; \
+        } \
+        return (PyObject *)v; \
+    } while(0)
+
 /* Create a new int object from a C unsigned long int */
 
 PyObject *
 PyLong_FromUnsignedLong(unsigned long ival)
 {
-    PyLongObject *v;
-    unsigned long t;
-    int ndigits = 0;
+    PYLONG_FROM_UINT(unsigned long, ival);
+}
 
-    if (ival < PyLong_BASE)
-        return PyLong_FromLong(ival);
-    /* Count the number of Python digits. */
-    t = ival;
-    while (t) {
-        ++ndigits;
-        t >>= PyLong_SHIFT;
-    }
-    v = _PyLong_New(ndigits);
-    if (v != NULL) {
-        digit *p = v->ob_digit;
-        while (ival) {
-            *p++ = (digit)(ival & PyLong_MASK);
-            ival >>= PyLong_SHIFT;
-        }
-    }
-    return (PyObject *)v;
+/* Create a new int object from a C unsigned long long int. */
+
+PyObject *
+PyLong_FromUnsignedLongLong(unsigned long long ival)
+{
+    PYLONG_FROM_UINT(unsigned long long, ival);
+}
+
+/* Create a new int object from a C size_t. */
+
+PyObject *
+PyLong_FromSize_t(size_t ival)
+{
+    PYLONG_FROM_UINT(size_t, ival);
 }
 
 /* Create a new int object from a C double */
@@ -407,6 +416,21 @@
 PyObject *
 PyLong_FromDouble(double dval)
 {
+    /* Try to get out cheap if this fits in a long. When a finite value of real
+     * floating type is converted to an integer type, the value is truncated
+     * toward zero. If the value of the integral part cannot be represented by
+     * the integer type, the behavior is undefined. Thus, we must check that
+     * value is in range (LONG_MIN - 1, LONG_MAX + 1). If a long has more bits
+     * of precision than a double, casting LONG_MIN - 1 to double may yield an
+     * approximation, but LONG_MAX + 1 is a power of two and can be represented
+     * as double exactly (assuming FLT_RADIX is 2 or 16), so for simplicity
+     * check against [-(LONG_MAX + 1), LONG_MAX + 1).
+     */
+    const double int_max = (unsigned long)LONG_MAX + 1;
+    if (-int_max < dval && dval < int_max) {
+        return PyLong_FromLong((long)dval);
+    }
+
     PyLongObject *v;
     double frac;
     int i, ndig, expo, neg;
@@ -426,8 +450,7 @@
         dval = -dval;
     }
     frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
-    if (expo <= 0)
-        return PyLong_FromLong(0L);
+    assert(expo > 0);
     ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
     v = _PyLong_New(ndig);
     if (v == NULL)
@@ -439,8 +462,9 @@
         frac = frac - (double)bits;
         frac = ldexp(frac, PyLong_SHIFT);
     }
-    if (neg)
-        Py_SIZE(v) = -(Py_SIZE(v));
+    if (neg) {
+        Py_SET_SIZE(v, -(Py_SIZE(v)));
+    }
     return (PyObject *)v;
 }
 
@@ -787,26 +811,6 @@
     return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
 }
 
-/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
-   2**k if d is nonzero, else 0. */
-
-static const unsigned char BitLengthTable[32] = {
-    0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
-};
-
-static int
-bits_in_digit(digit d)
-{
-    int d_bits = 0;
-    while (d >= 32) {
-        d_bits += 6;
-        d >>= 6;
-    }
-    d_bits += (int)BitLengthTable[d];
-    return d_bits;
-}
-
 size_t
 _PyLong_NumBits(PyObject *vv)
 {
@@ -824,7 +828,7 @@
         if ((size_t)(ndigits - 1) > SIZE_MAX / (size_t)PyLong_SHIFT)
             goto Overflow;
         result = (size_t)(ndigits - 1) * (size_t)PyLong_SHIFT;
-        msd_bits = bits_in_digit(msd);
+        msd_bits = _Py_bit_length(msd);
         if (SIZE_MAX - msd_bits < result)
             goto Overflow;
         result += msd_bits;
@@ -944,7 +948,7 @@
         }
     }
 
-    Py_SIZE(v) = is_signed ? -idigit : idigit;
+    Py_SET_SIZE(v, is_signed ? -idigit : idigit);
     return (PyObject *)long_normalize(v);
 }
 
@@ -1133,7 +1137,7 @@
  * rewritten to use the newer PyLong_{As,From}ByteArray API.
  */
 
-#define PY_ABS_LLONG_MIN (0-(unsigned long long)PY_LLONG_MIN)
+#define PY_ABS_LLONG_MIN (0-(unsigned long long)LLONG_MIN)
 
 /* Create a new int object from a C long long int. */
 
@@ -1146,7 +1150,10 @@
     int ndigits = 0;
     int negative = 0;
 
-    CHECK_SMALL_INT(ival);
+    if (IS_SMALL_INT(ival)) {
+        return get_small_int((sdigit)ival);
+    }
+
     if (ival < 0) {
         /* avoid signed overflow on negation;  see comments
            in PyLong_FromLong above. */
@@ -1169,7 +1176,7 @@
     v = _PyLong_New(ndigits);
     if (v != NULL) {
         digit *p = v->ob_digit;
-        Py_SIZE(v) = negative ? -ndigits : ndigits;
+        Py_SET_SIZE(v, negative ? -ndigits : ndigits);
         t = abs_ival;
         while (t) {
             *p++ = (digit)(t & PyLong_MASK);
@@ -1179,34 +1186,6 @@
     return (PyObject *)v;
 }
 
-/* Create a new int object from a C unsigned long long int. */
-
-PyObject *
-PyLong_FromUnsignedLongLong(unsigned long long ival)
-{
-    PyLongObject *v;
-    unsigned long long t;
-    int ndigits = 0;
-
-    if (ival < PyLong_BASE)
-        return PyLong_FromLong((long)ival);
-    /* Count the number of Python digits. */
-    t = ival;
-    while (t) {
-        ++ndigits;
-        t >>= PyLong_SHIFT;
-    }
-    v = _PyLong_New(ndigits);
-    if (v != NULL) {
-        digit *p = v->ob_digit;
-        while (ival) {
-            *p++ = (digit)(ival & PyLong_MASK);
-            ival >>= PyLong_SHIFT;
-        }
-    }
-    return (PyObject *)v;
-}
-
 /* Create a new int object from a C Py_ssize_t. */
 
 PyObject *
@@ -1218,7 +1197,10 @@
     int ndigits = 0;
     int negative = 0;
 
-    CHECK_SMALL_INT(ival);
+    if (IS_SMALL_INT(ival)) {
+        return get_small_int((sdigit)ival);
+    }
+
     if (ival < 0) {
         /* avoid signed overflow when ival = SIZE_T_MIN */
         abs_ival = (size_t)(-1-ival)+1;
@@ -1237,7 +1219,7 @@
     v = _PyLong_New(ndigits);
     if (v != NULL) {
         digit *p = v->ob_digit;
-        Py_SIZE(v) = negative ? -ndigits : ndigits;
+        Py_SET_SIZE(v, negative ? -ndigits : ndigits);
         t = abs_ival;
         while (t) {
             *p++ = (digit)(t & PyLong_MASK);
@@ -1247,35 +1229,6 @@
     return (PyObject *)v;
 }
 
-/* Create a new int object from a C size_t. */
-
-PyObject *
-PyLong_FromSize_t(size_t ival)
-{
-    PyLongObject *v;
-    size_t t;
-    int ndigits = 0;
-
-    if (ival < PyLong_BASE)
-        return PyLong_FromLong((long)ival);
-    /* Count the number of Python digits. */
-    t = ival;
-    while (t) {
-        ++ndigits;
-        t >>= PyLong_SHIFT;
-    }
-    v = _PyLong_New(ndigits);
-    if (v != NULL) {
-        digit *p = v->ob_digit;
-        Py_SIZE(v) = ndigits;
-        while (ival) {
-            *p++ = (digit)(ival & PyLong_MASK);
-            ival >>= PyLong_SHIFT;
-        }
-    }
-    return (PyObject *)v;
-}
-
 /* Get a C long long int from an int object or any object that has an
    __int__ method.  Return -1 and set an error if overflow occurs. */
 
@@ -1488,11 +1441,11 @@
         /* Haven't lost any bits, but casting to long requires extra
          * care (see comment above).
          */
-        if (x <= (unsigned long long)PY_LLONG_MAX) {
+        if (x <= (unsigned long long)LLONG_MAX) {
             res = (long long)x * sign;
         }
         else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
-            res = PY_LLONG_MIN;
+            res = LLONG_MIN;
         }
         else {
             *overflow = sign;
@@ -1985,7 +1938,7 @@
             return -1;
         }
         size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
-                         bits_in_digit(a->ob_digit[size_a - 1]);
+                         _Py_bit_length(a->ob_digit[size_a - 1]);
         /* Allow 1 character for a '-' sign. */
         sz = negative + (size_a_in_bits + (bits - 1)) / bits;
     }
@@ -2290,7 +2243,7 @@
                         "int() arg 2 must be >= 2 and <= 36");
         return NULL;
     }
-    while (*str != '\0' && Py_ISSPACE(Py_CHARMASK(*str))) {
+    while (*str != '\0' && Py_ISSPACE(*str)) {
         str++;
     }
     if (*str == '+') {
@@ -2508,7 +2461,7 @@
         if (z == NULL) {
             return NULL;
         }
-        Py_SIZE(z) = 0;
+        Py_SET_SIZE(z, 0);
 
         /* `convwidth` consecutive input digits are treated as a single
          * digit in base `convmultmax`.
@@ -2558,7 +2511,7 @@
                 assert(c < PyLong_BASE);
                 if (Py_SIZE(z) < size_z) {
                     *pz = (digit)c;
-                    ++Py_SIZE(z);
+                    Py_SET_SIZE(z, Py_SIZE(z) + 1);
                 }
                 else {
                     PyLongObject *tmp;
@@ -2597,9 +2550,9 @@
         goto onError;
     }
     if (sign < 0) {
-        Py_SIZE(z) = -(Py_SIZE(z));
+        Py_SET_SIZE(z, -(Py_SIZE(z)));
     }
-    while (*str && Py_ISSPACE(Py_CHARMASK(*str))) {
+    while (*str && Py_ISSPACE(*str)) {
         str++;
     }
     if (*str != '\0') {
@@ -2805,7 +2758,7 @@
 
     /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
        shift v1 left by the same amount.  Results go into w and v. */
-    d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
+    d = PyLong_SHIFT - _Py_bit_length(w1->ob_digit[size_w-1]);
     carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
     assert(carry == 0);
     carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
@@ -2913,7 +2866,8 @@
 {
     Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
     /* See below for why x_digits is always large enough. */
-    digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
+    digit rem;
+    digit x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT] = {0,};
     double dx;
     /* Correction term for round-half-to-even rounding.  For a digit x,
        "x + half_even_correction[x & 7]" gives x rounded to the nearest
@@ -2926,7 +2880,7 @@
         *e = 0;
         return 0.0;
     }
-    a_bits = bits_in_digit(a->ob_digit[a_size-1]);
+    a_bits = _Py_bit_length(a->ob_digit[a_size-1]);
     /* The following is an overflow-free version of the check
        "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
     if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
@@ -2963,9 +2917,7 @@
     if (a_bits <= DBL_MANT_DIG + 2) {
         shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
         shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
-        x_size = 0;
-        while (x_size < shift_digits)
-            x_digits[x_size++] = 0;
+        x_size = shift_digits;
         rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
                        (int)shift_bits);
         x_size += a_size;
@@ -3053,33 +3005,32 @@
 
 /* Methods */
 
-static int
+/* if a < b, return a negative number
+   if a == b, return 0
+   if a > b, return a positive number */
+
+static Py_ssize_t
 long_compare(PyLongObject *a, PyLongObject *b)
 {
-    Py_ssize_t sign;
-
-    if (Py_SIZE(a) != Py_SIZE(b)) {
-        sign = Py_SIZE(a) - Py_SIZE(b);
-    }
-    else {
+    Py_ssize_t sign = Py_SIZE(a) - Py_SIZE(b);
+    if (sign == 0) {
         Py_ssize_t i = Py_ABS(Py_SIZE(a));
-        while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
-            ;
-        if (i < 0)
-            sign = 0;
-        else {
-            sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
-            if (Py_SIZE(a) < 0)
-                sign = -sign;
+        sdigit diff = 0;
+        while (--i >= 0) {
+            diff = (sdigit) a->ob_digit[i] - (sdigit) b->ob_digit[i];
+            if (diff) {
+                break;
+            }
         }
+        sign = Py_SIZE(a) < 0 ? -diff : diff;
     }
-    return sign < 0 ? -1 : sign > 0 ? 1 : 0;
+    return sign;
 }
 
 static PyObject *
 long_richcompare(PyObject *self, PyObject *other, int op)
 {
-    int result;
+    Py_ssize_t result;
     CHECK_BINOP(self, other);
     if (self == other)
         result = 0;
@@ -3231,9 +3182,9 @@
     }
     assert(borrow == 0);
     if (sign < 0) {
-        Py_SIZE(z) = -Py_SIZE(z);
+        Py_SET_SIZE(z, -Py_SIZE(z));
     }
-    return long_normalize(z);
+    return maybe_small_long(long_normalize(z));
 }
 
 static PyObject *
@@ -3255,7 +3206,7 @@
                    That also means z is not an element of
                    small_ints, so negating it in-place is safe. */
                 assert(Py_REFCNT(z) == 1);
-                Py_SIZE(z) = -(Py_SIZE(z));
+                Py_SET_SIZE(z, -(Py_SIZE(z)));
             }
         }
         else
@@ -3281,13 +3232,15 @@
         return PyLong_FromLong(MEDIUM_VALUE(a) - MEDIUM_VALUE(b));
     }
     if (Py_SIZE(a) < 0) {
-        if (Py_SIZE(b) < 0)
-            z = x_sub(a, b);
-        else
+        if (Py_SIZE(b) < 0) {
+            z = x_sub(b, a);
+        }
+        else {
             z = x_add(a, b);
-        if (z != NULL) {
-            assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
-            Py_SIZE(z) = -(Py_SIZE(z));
+            if (z != NULL) {
+                assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
+                Py_SET_SIZE(z, -(Py_SIZE(z)));
+            }
         }
     }
     else {
@@ -3679,7 +3632,7 @@
         /* Multiply the next slice of b by a. */
         memcpy(bslice->ob_digit, b->ob_digit + nbdone,
                nbtouse * sizeof(digit));
-        Py_SIZE(bslice) = nbtouse;
+        Py_SET_SIZE(bslice, nbtouse);
         product = k_mul(a, bslice);
         if (product == NULL)
             goto fail;
@@ -4020,8 +3973,8 @@
         /* Extreme underflow */
         goto underflow_or_zero;
     /* Next line is now safe from overflowing a Py_ssize_t */
-    diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
-        bits_in_digit(b->ob_digit[b_size - 1]);
+    diff = diff * PyLong_SHIFT + _Py_bit_length(a->ob_digit[a_size - 1]) -
+        _Py_bit_length(b->ob_digit[b_size - 1]);
     /* Now diff = a_bits - b_bits. */
     if (diff > DBL_MAX_EXP)
         goto overflow;
@@ -4097,7 +4050,7 @@
     }
     x_size = Py_ABS(Py_SIZE(x));
     assert(x_size > 0); /* result of division is never zero */
-    x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
+    x_bits = (x_size-1)*PyLong_SHIFT+_Py_bit_length(x->ob_digit[x_size-1]);
 
     /* The number of extra bits that have to be rounded away. */
     extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
@@ -4495,7 +4448,7 @@
         return PyLong_FromLong(-MEDIUM_VALUE(v));
     z = (PyLongObject *)_PyLong_Copy(v);
     if (z != NULL)
-        Py_SIZE(z) = -(Py_SIZE(v));
+        Py_SET_SIZE(z, -(Py_SIZE(v)));
     return (PyObject *)z;
 }
 
@@ -4640,7 +4593,7 @@
         return NULL;
     if (Py_SIZE(a) < 0) {
         assert(Py_REFCNT(z) == 1);
-        Py_SIZE(z) = -Py_SIZE(z);
+        Py_SET_SIZE(z, -Py_SIZE(z));
     }
     for (i = 0; i < wordshift; i++)
         z->ob_digit[i] = 0;
@@ -4824,7 +4777,7 @@
 
     /* Complement result if negative. */
     if (negz) {
-        Py_SIZE(z) = -(Py_SIZE(z));
+        Py_SET_SIZE(z, -(Py_SIZE(z)));
         z->ob_digit[size_z] = PyLong_MASK;
         v_complement(z->ob_digit, z->ob_digit, size_z+1);
     }
@@ -4911,7 +4864,7 @@
     alloc_b = Py_SIZE(b);
     /* reduce until a fits into 2 digits */
     while ((size_a = Py_SIZE(a)) > 2) {
-        nbits = bits_in_digit(a->ob_digit[size_a-1]);
+        nbits = _Py_bit_length(a->ob_digit[size_a-1]);
         /* extract top 2*PyLong_SHIFT bits of a into x, along with
            corresponding bits of b into y */
         size_b = Py_SIZE(b);
@@ -4971,8 +4924,9 @@
             T = -A; A = -B; B = T;
             T = -C; C = -D; D = T;
         }
-        if (c != NULL)
-            Py_SIZE(c) = size_a;
+        if (c != NULL) {
+            Py_SET_SIZE(c, size_a);
+        }
         else if (Py_REFCNT(a) == 1) {
             Py_INCREF(a);
             c = a;
@@ -4984,12 +4938,13 @@
                 goto error;
         }
 
-        if (d != NULL)
-            Py_SIZE(d) = size_a;
+        if (d != NULL) {
+            Py_SET_SIZE(d, size_a);
+        }
         else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
             Py_INCREF(b);
             d = b;
-            Py_SIZE(d) = size_a;
+            Py_SET_SIZE(d, size_a);
         }
         else {
             alloc_b = size_a;
@@ -5045,7 +5000,7 @@
     /* a fits into a long, so b must too */
     x = PyLong_AsLong((PyObject *)a);
     y = PyLong_AsLong((PyObject *)b);
-#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
+#elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
     x = PyLong_AsLongLong((PyObject *)a);
     y = PyLong_AsLongLong((PyObject *)b);
 #else
@@ -5064,7 +5019,7 @@
     }
 #if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
     return PyLong_FromLong(x);
-#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
+#elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
     return PyLong_FromLongLong(x);
 #else
 # error "_PyLong_GCD"
@@ -5130,7 +5085,7 @@
     if (PyUnicode_Check(x))
         return PyLong_FromUnicodeObject(x, (int)base);
     else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
-        char *string;
+        const char *string;
         if (PyByteArray_Check(x))
             string = PyByteArray_AS_STRING(x);
         else
@@ -5169,9 +5124,10 @@
         return NULL;
     }
     assert(PyLong_Check(newobj));
-    Py_SIZE(newobj) = Py_SIZE(tmp);
-    for (i = 0; i < n; i++)
+    Py_SET_SIZE(newobj, Py_SIZE(tmp));
+    for (i = 0; i < n; i++) {
         newobj->ob_digit[i] = tmp->ob_digit[i];
+    }
     Py_DECREF(tmp);
     return (PyObject *)newobj;
 }
@@ -5235,7 +5191,8 @@
 {
     PyLongObject *quo = NULL, *rem = NULL;
     PyObject *twice_rem, *result, *temp;
-    int cmp, quo_is_odd, quo_is_neg;
+    int quo_is_odd, quo_is_neg;
+    Py_ssize_t cmp;
 
     /* Equivalent Python code:
 
@@ -5428,7 +5385,7 @@
         return PyLong_FromLong(0);
 
     msd = ((PyLongObject *)self)->ob_digit[ndigits-1];
-    msd_bits = bits_in_digit(msd);
+    msd_bits = _Py_bit_length(msd);
 
     if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
         return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
@@ -5604,8 +5561,7 @@
     Py_DECREF(bytes);
 
     if (long_obj != NULL && type != &PyLong_Type) {
-        Py_SETREF(long_obj, PyObject_CallFunctionObjArgs((PyObject *)type,
-                                                         long_obj, NULL));
+        Py_SETREF(long_obj, PyObject_CallOneArg((PyObject *)type, long_obj));
     }
 
     return long_obj;
@@ -5796,68 +5752,58 @@
 }
 
 int
-_PyLong_Init(void)
+_PyLong_Init(PyThreadState *tstate)
 {
 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
-    int ival, size;
-    PyLongObject *v = small_ints;
+    for (Py_ssize_t i=0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++) {
+        sdigit ival = (sdigit)i - NSMALLNEGINTS;
+        int size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
 
-    for (ival = -NSMALLNEGINTS; ival <  NSMALLPOSINTS; ival++, v++) {
-        size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
-        if (Py_TYPE(v) == &PyLong_Type) {
-            /* The element is already initialized, most likely
-             * the Python interpreter was initialized before.
-             */
-            Py_ssize_t refcnt;
-            PyObject* op = (PyObject*)v;
+        PyLongObject *v = _PyLong_New(1);
+        if (!v) {
+            return -1;
+        }
 
-            refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
-            _Py_NewReference(op);
-            /* _Py_NewReference sets the ref count to 1 but
-             * the ref count might be larger. Set the refcnt
-             * to the original refcnt + 1 */
-            Py_REFCNT(op) = refcnt + 1;
-            assert(Py_SIZE(op) == size);
-            assert(v->ob_digit[0] == (digit)abs(ival));
-        }
-        else {
-            (void)PyObject_INIT(v, &PyLong_Type);
-        }
-        Py_SIZE(v) = size;
+        Py_SET_SIZE(v, size);
         v->ob_digit[0] = (digit)abs(ival);
+
+        tstate->interp->small_ints[i] = v;
     }
 #endif
-    _PyLong_Zero = PyLong_FromLong(0);
-    if (_PyLong_Zero == NULL)
-        return 0;
-    _PyLong_One = PyLong_FromLong(1);
-    if (_PyLong_One == NULL)
-        return 0;
 
-    /* initialize int_info */
-    if (Int_InfoType.tp_name == NULL) {
-        if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0) {
+    if (_Py_IsMainInterpreter(tstate)) {
+        _PyLong_Zero = PyLong_FromLong(0);
+        if (_PyLong_Zero == NULL) {
             return 0;
         }
+
+        _PyLong_One = PyLong_FromLong(1);
+        if (_PyLong_One == NULL) {
+            return 0;
+        }
+
+        /* initialize int_info */
+        if (Int_InfoType.tp_name == NULL) {
+            if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0) {
+                return 0;
+            }
+        }
     }
 
     return 1;
 }
 
 void
-PyLong_Fini(void)
+_PyLong_Fini(PyThreadState *tstate)
 {
-    /* Integers are currently statically allocated. Py_DECREF is not
-       needed, but Python must forget about the reference or multiple
-       reinitializations will fail. */
-    Py_CLEAR(_PyLong_One);
-    Py_CLEAR(_PyLong_Zero);
+    if (_Py_IsMainInterpreter(tstate)) {
+        Py_CLEAR(_PyLong_One);
+        Py_CLEAR(_PyLong_Zero);
+    }
+
 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
-    int i;
-    PyLongObject *v = small_ints;
-    for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
-        _Py_DEC_REFTOTAL;
-        _Py_ForgetReference((PyObject*)v);
+    for (Py_ssize_t i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++) {
+        Py_CLEAR(tstate->interp->small_ints[i]);
     }
 #endif
 }
diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c
index 0bbcbb2..682bbe8 100644
--- a/Objects/memoryobject.c
+++ b/Objects/memoryobject.c
@@ -11,9 +11,8 @@
  */
 
 #include "Python.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
 #include "pystrhex.h"
 #include <stddef.h>
 
@@ -1058,7 +1057,8 @@
         return -1;
     }
 
-    Py_FatalError("_memory_release(): negative export count");
+    PyErr_SetString(PyExc_SystemError,
+                    "_memory_release(): negative export count");
     return -1;
 }
 
@@ -1972,7 +1972,7 @@
     if (format == NULL)
         goto error;
 
-    structobj = PyObject_CallFunctionObjArgs(Struct, format, NULL);
+    structobj = PyObject_CallOneArg(Struct, format);
     if (structobj == NULL)
         goto error;
 
@@ -2011,7 +2011,7 @@
     PyObject *v;
 
     memcpy(x->item, ptr, x->itemsize);
-    v = PyObject_CallFunctionObjArgs(x->unpack_from, x->mview, NULL);
+    v = PyObject_CallOneArg(x->unpack_from, x->mview);
     if (v == NULL)
         return NULL;
 
@@ -2420,8 +2420,9 @@
     size = PyTuple_GET_SIZE(key);
     for (i = 0; i < size; i++) {
         PyObject *x = PyTuple_GET_ITEM(key, i);
-        if (!PyIndex_Check(x))
+        if (!_PyIndex_Check(x)) {
             return 0;
+        }
     }
     return 1;
 }
@@ -2458,7 +2459,7 @@
         }
     }
 
-    if (PyIndex_Check(key)) {
+    if (_PyIndex_Check(key)) {
         Py_ssize_t index;
         index = PyNumber_AsSsize_t(key, PyExc_IndexError);
         if (index == -1 && PyErr_Occurred())
@@ -2529,7 +2530,7 @@
         }
     }
 
-    if (PyIndex_Check(key)) {
+    if (_PyIndex_Check(key)) {
         Py_ssize_t index;
         if (1 < view->ndim) {
             PyErr_SetString(PyExc_NotImplementedError,
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 3604a55..7b43041 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -2,32 +2,30 @@
 /* Method object implementation */
 
 #include "Python.h"
+#include "pycore_ceval.h"         // _Py_EnterRecursiveCall()
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
-
-/* Free list for method objects to safe malloc/free overhead
- * The m_self element is used to chain the objects.
- */
-static PyCFunctionObject *free_list = NULL;
-static int numfree = 0;
-#ifndef PyCFunction_MAXFREELIST
-#define PyCFunction_MAXFREELIST 256
-#endif
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+#include "structmember.h"         // PyMemberDef
 
 /* undefine macro trampoline to PyCFunction_NewEx */
 #undef PyCFunction_New
+/* undefine macro trampoline to PyCMethod_New */
+#undef PyCFunction_NewEx
 
 /* Forward declarations */
 static PyObject * cfunction_vectorcall_FASTCALL(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
 static PyObject * cfunction_vectorcall_FASTCALL_KEYWORDS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+static PyObject * cfunction_vectorcall_FASTCALL_KEYWORDS_METHOD(
+    PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
 static PyObject * cfunction_vectorcall_NOARGS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
 static PyObject * cfunction_vectorcall_O(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+static PyObject * cfunction_call(
+    PyObject *func, PyObject *args, PyObject *kwargs);
 
 
 PyObject *
@@ -39,9 +37,16 @@
 PyObject *
 PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module)
 {
+    return PyCMethod_New(ml, self, module, NULL);
+}
+
+PyObject *
+PyCMethod_New(PyMethodDef *ml, PyObject *self, PyObject *module, PyTypeObject *cls)
+{
     /* Figure out correct vectorcall function to use */
     vectorcallfunc vectorcall;
-    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS))
+    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
+                            METH_O | METH_KEYWORDS | METH_METHOD))
     {
         case METH_VARARGS:
         case METH_VARARGS | METH_KEYWORDS:
@@ -61,24 +66,44 @@
         case METH_O:
             vectorcall = cfunction_vectorcall_O;
             break;
+        case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
+            vectorcall = cfunction_vectorcall_FASTCALL_KEYWORDS_METHOD;
+            break;
         default:
             PyErr_Format(PyExc_SystemError,
                          "%s() method: bad call flags", ml->ml_name);
             return NULL;
     }
 
-    PyCFunctionObject *op;
-    op = free_list;
-    if (op != NULL) {
-        free_list = (PyCFunctionObject *)(op->m_self);
-        (void)PyObject_INIT(op, &PyCFunction_Type);
-        numfree--;
-    }
-    else {
-        op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type);
-        if (op == NULL)
+    PyCFunctionObject *op = NULL;
+
+    if (ml->ml_flags & METH_METHOD) {
+        if (!cls) {
+            PyErr_SetString(PyExc_SystemError,
+                            "attempting to create PyCMethod with a METH_METHOD "
+                            "flag but no class");
             return NULL;
+        }
+        PyCMethodObject *om = PyObject_GC_New(PyCMethodObject, &PyCMethod_Type);
+        if (om == NULL) {
+            return NULL;
+        }
+        Py_INCREF(cls);
+        om->mm_class = cls;
+        op = (PyCFunctionObject *)om;
+    } else {
+        if (cls) {
+            PyErr_SetString(PyExc_SystemError,
+                            "attempting to create PyCFunction with class "
+                            "but no METH_METHOD flag");
+            return NULL;
+        }
+        op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type);
+        if (op == NULL) {
+            return NULL;
+        }
     }
+
     op->m_weakreflist = NULL;
     op->m_ml = ml;
     Py_XINCREF(self);
@@ -120,6 +145,16 @@
     return PyCFunction_GET_FLAGS(op);
 }
 
+PyTypeObject *
+PyCMethod_GetClass(PyObject *op)
+{
+    if (!PyCFunction_Check(op)) {
+        PyErr_BadInternalCall();
+        return NULL;
+    }
+    return PyCFunction_GET_CLASS(op);
+}
+
 /* Methods (the standard built-in methods, that is) */
 
 static void
@@ -129,16 +164,12 @@
     if (m->m_weakreflist != NULL) {
         PyObject_ClearWeakRefs((PyObject*) m);
     }
+    // Dereference class before m_self: PyCFunction_GET_CLASS accesses
+    // PyMethodDef m_ml, which could be kept alive by m_self
+    Py_XDECREF(PyCFunction_GET_CLASS(m));
     Py_XDECREF(m->m_self);
     Py_XDECREF(m->m_module);
-    if (numfree < PyCFunction_MAXFREELIST) {
-        m->m_self = (PyObject *)free_list;
-        free_list = m;
-        numfree++;
-    }
-    else {
-        PyObject_GC_Del(m);
-    }
+    PyObject_GC_Del(m);
 }
 
 static PyObject *
@@ -214,6 +245,7 @@
 static int
 meth_traverse(PyCFunctionObject *m, visitproc visit, void *arg)
 {
+    Py_VISIT(PyCFunction_GET_CLASS(m));
     Py_VISIT(m->m_self);
     Py_VISIT(m->m_module);
     return 0;
@@ -243,7 +275,7 @@
 #define OFF(x) offsetof(PyCFunctionObject, x)
 
 static PyMemberDef meth_members[] = {
-    {"__module__",    T_OBJECT,     OFF(m_module), PY_WRITE_RESTRICTED},
+    {"__module__",    T_OBJECT,     OFF(m_module), 0},
     {NULL}
 };
 
@@ -255,7 +287,7 @@
                                    m->m_ml->ml_name);
     return PyUnicode_FromFormat("<built-in method %s of %s object at %p>",
                                m->m_ml->ml_name,
-                               m->m_self->ob_type->tp_name,
+                               Py_TYPE(m->m_self)->tp_name,
                                m->m_self);
 }
 
@@ -313,13 +345,13 @@
     0,                                          /* tp_as_sequence */
     0,                                          /* tp_as_mapping */
     (hashfunc)meth_hash,                        /* tp_hash */
-    PyCFunction_Call,                           /* tp_call */
+    cfunction_call,                             /* tp_call */
     0,                                          /* tp_str */
     PyObject_GenericGetAttr,                    /* tp_getattro */
     0,                                          /* tp_setattro */
     0,                                          /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-    _Py_TPFLAGS_HAVE_VECTORCALL,                /* tp_flags */
+    Py_TPFLAGS_HAVE_VECTORCALL,                 /* tp_flags */
     0,                                          /* tp_doc */
     (traverseproc)meth_traverse,                /* tp_traverse */
     0,                                          /* tp_clear */
@@ -334,38 +366,12 @@
     0,                                          /* tp_dict */
 };
 
-/* Clear out the free list */
-
-int
-PyCFunction_ClearFreeList(void)
-{
-    int freelist_size = numfree;
-
-    while (free_list) {
-        PyCFunctionObject *v = free_list;
-        free_list = (PyCFunctionObject *)(v->m_self);
-        PyObject_GC_Del(v);
-        numfree--;
-    }
-    assert(numfree == 0);
-    return freelist_size;
-}
-
-void
-PyCFunction_Fini(void)
-{
-    (void)PyCFunction_ClearFreeList();
-}
-
-/* Print summary info about the state of the optimized allocator */
-void
-_PyCFunction_DebugMallocStats(FILE *out)
-{
-    _PyDebugAllocatorStats(out,
-                           "free PyCFunctionObject",
-                           numfree, sizeof(PyCFunctionObject));
-}
-
+PyTypeObject PyCMethod_Type = {
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
+    .tp_name = "builtin_method",
+    .tp_basicsize = sizeof(PyCMethodObject),
+    .tp_base = &PyCFunction_Type,
+};
 
 /* Vectorcall functions for each of the PyCFunction calling conventions,
  * except for METH_VARARGS (possibly combined with METH_KEYWORDS) which
@@ -373,33 +379,30 @@
  *
  * First, common helpers
  */
-static const char *
-get_name(PyObject *func)
-{
-    assert(PyCFunction_Check(func));
-    PyMethodDef *method = ((PyCFunctionObject *)func)->m_ml;
-    return method->ml_name;
-}
-
-typedef void (*funcptr)(void);
 
 static inline int
-cfunction_check_kwargs(PyObject *func, PyObject *kwnames)
+cfunction_check_kwargs(PyThreadState *tstate, PyObject *func, PyObject *kwnames)
 {
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
     assert(PyCFunction_Check(func));
     if (kwnames && PyTuple_GET_SIZE(kwnames)) {
-        PyErr_Format(PyExc_TypeError,
-                     "%.200s() takes no keyword arguments", get_name(func));
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            _PyErr_Format(tstate, PyExc_TypeError,
+                         "%U takes no keyword arguments", funcstr);
+            Py_DECREF(funcstr);
+        }
         return -1;
     }
     return 0;
 }
 
+typedef void (*funcptr)(void);
+
 static inline funcptr
-cfunction_enter_call(PyObject *func)
+cfunction_enter_call(PyThreadState *tstate, PyObject *func)
 {
-    if (Py_EnterRecursiveCall(" while calling a Python object")) {
+    if (_Py_EnterRecursiveCall(tstate, " while calling a Python object")) {
         return NULL;
     }
     return (funcptr)PyCFunction_GET_FUNCTION(func);
@@ -410,17 +413,18 @@
 cfunction_vectorcall_FASTCALL(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
-    if (cfunction_check_kwargs(func, kwnames)) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (cfunction_check_kwargs(tstate, func, kwnames)) {
         return NULL;
     }
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     _PyCFunctionFast meth = (_PyCFunctionFast)
-                            cfunction_enter_call(func);
+                            cfunction_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(PyCFunction_GET_SELF(func), args, nargs);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -428,14 +432,31 @@
 cfunction_vectorcall_FASTCALL_KEYWORDS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     _PyCFunctionFastWithKeywords meth = (_PyCFunctionFastWithKeywords)
-                                        cfunction_enter_call(func);
+                                        cfunction_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(PyCFunction_GET_SELF(func), args, nargs, kwnames);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
+    return result;
+}
+
+static PyObject *
+cfunction_vectorcall_FASTCALL_KEYWORDS_METHOD(
+    PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyTypeObject *cls = PyCFunction_GET_CLASS(func);
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    PyCMethod meth = (PyCMethod)cfunction_enter_call(tstate, func);
+    if (meth == NULL) {
+        return NULL;
+    }
+    PyObject *result = meth(PyCFunction_GET_SELF(func), cls, args, nargs, kwnames);
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -443,21 +464,26 @@
 cfunction_vectorcall_NOARGS(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
-    if (cfunction_check_kwargs(func, kwnames)) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (cfunction_check_kwargs(tstate, func, kwnames)) {
         return NULL;
     }
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (nargs != 0) {
-        PyErr_Format(PyExc_TypeError,
-            "%.200s() takes no arguments (%zd given)", get_name(func), nargs);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            _PyErr_Format(tstate, PyExc_TypeError,
+                "%U takes no arguments (%zd given)", funcstr, nargs);
+            Py_DECREF(funcstr);
+        }
         return NULL;
     }
-    PyCFunction meth = (PyCFunction)cfunction_enter_call(func);
+    PyCFunction meth = (PyCFunction)cfunction_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(PyCFunction_GET_SELF(func), NULL);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
 
@@ -465,21 +491,61 @@
 cfunction_vectorcall_O(
     PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
 {
-    if (cfunction_check_kwargs(func, kwnames)) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (cfunction_check_kwargs(tstate, func, kwnames)) {
         return NULL;
     }
     Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
     if (nargs != 1) {
-        PyErr_Format(PyExc_TypeError,
-            "%.200s() takes exactly one argument (%zd given)",
-            get_name(func), nargs);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            _PyErr_Format(tstate, PyExc_TypeError,
+                "%U takes exactly one argument (%zd given)", funcstr, nargs);
+            Py_DECREF(funcstr);
+        }
         return NULL;
     }
-    PyCFunction meth = (PyCFunction)cfunction_enter_call(func);
+    PyCFunction meth = (PyCFunction)cfunction_enter_call(tstate, func);
     if (meth == NULL) {
         return NULL;
     }
     PyObject *result = meth(PyCFunction_GET_SELF(func), args[0]);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     return result;
 }
+
+
+static PyObject *
+cfunction_call(PyObject *func, PyObject *args, PyObject *kwargs)
+{
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    assert(!_PyErr_Occurred(tstate));
+
+    int flags = PyCFunction_GET_FLAGS(func);
+    if (!(flags & METH_VARARGS)) {
+        /* If this is not a METH_VARARGS function, delegate to vectorcall */
+        return PyVectorcall_Call(func, args, kwargs);
+    }
+
+    /* For METH_VARARGS, we cannot use vectorcall as the vectorcall pointer
+     * is NULL. This is intentional, since vectorcall would be slower. */
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+
+    PyObject *result;
+    if (flags & METH_KEYWORDS) {
+        result = (*(PyCFunctionWithKeywords)(void(*)(void))meth)(self, args, kwargs);
+    }
+    else {
+        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
+            _PyErr_Format(tstate, PyExc_TypeError,
+                          "%.200s() takes no keyword arguments",
+                          ((PyCFunctionObject*)func)->m_ml->ml_name);
+            return NULL;
+        }
+        result = meth(self, args);
+    }
+    return _Py_CheckFunctionResult(tstate, func, result, NULL);
+}
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 85134c7..ee4ed97 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -2,11 +2,16 @@
 /* Module object implementation */
 
 #include "Python.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_interp.h"        // PyInterpreterState.importlib
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "structmember.h"         // PyMemberDef
 
 static Py_ssize_t max_module_number;
 
+_Py_IDENTIFIER(__doc__);
+_Py_IDENTIFIER(__name__);
+_Py_IDENTIFIER(__spec__);
+
 typedef struct {
     PyObject_HEAD
     PyObject *md_dict;
@@ -22,16 +27,6 @@
 };
 
 
-/* Helper for sanity check for traverse not handling m_state == NULL
- * Issue #32374 */
-#ifdef Py_DEBUG
-static int
-bad_traverse_test(PyObject *self, void *arg) {
-    assert(self != NULL);
-    return 0;
-}
-#endif
-
 PyTypeObject PyModuleDef_Type = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "moduledef",                                /* tp_name */
@@ -47,8 +42,8 @@
          return NULL;
     if (def->m_base.m_index == 0) {
         max_module_number++;
-        Py_REFCNT(def) = 1;
-        Py_TYPE(def) = &PyModuleDef_Type;
+        Py_SET_REFCNT(def, 1);
+        Py_SET_TYPE(def, &PyModuleDef_Type);
         def->m_base.m_index = max_module_number;
     }
     return (PyObject*)def;
@@ -58,11 +53,8 @@
 module_init_dict(PyModuleObject *mod, PyObject *md_dict,
                  PyObject *name, PyObject *doc)
 {
-    _Py_IDENTIFIER(__name__);
-    _Py_IDENTIFIER(__doc__);
     _Py_IDENTIFIER(__package__);
     _Py_IDENTIFIER(__loader__);
-    _Py_IDENTIFIER(__spec__);
 
     if (md_dict == NULL)
         return -1;
@@ -173,8 +165,11 @@
 PyObject *
 PyModule_Create2(struct PyModuleDef* module, int module_api_version)
 {
-    if (!_PyImport_IsInitialized(_PyInterpreterState_Get()))
-        Py_FatalError("Python import machinery not initialized");
+    if (!_PyImport_IsInitialized(_PyInterpreterState_GET())) {
+        PyErr_SetString(PyExc_SystemError,
+                        "Python import machinery not initialized");
+        return NULL;
+    }
     return _PyModule_CreateInitialized(module, module_api_version);
 }
 
@@ -356,16 +351,6 @@
         }
     }
 
-    /* Sanity check for traverse not handling m_state == NULL
-     * This doesn't catch all possible cases, but in many cases it should
-     * make many cases of invalid code crash or raise Valgrind issues
-     * sooner than they would otherwise.
-     * Issue #32374 */
-#ifdef Py_DEBUG
-    if (def->m_traverse != NULL) {
-        def->m_traverse(m, bad_traverse_test, NULL);
-    }
-#endif
     Py_DECREF(nameobj);
     return m;
 
@@ -458,7 +443,6 @@
 PyModule_SetDocString(PyObject *m, const char *doc)
 {
     PyObject *v;
-    _Py_IDENTIFIER(__doc__);
 
     v = PyUnicode_FromString(doc);
     if (v == NULL || _PyObject_SetAttrId(m, &PyId___doc__, v) != 0) {
@@ -485,7 +469,6 @@
 PyObject*
 PyModule_GetNameObject(PyObject *m)
 {
-    _Py_IDENTIFIER(__name__);
     PyObject *d;
     PyObject *name;
     if (!PyModule_Check(m)) {
@@ -590,7 +573,7 @@
     Py_ssize_t pos;
     PyObject *key, *value;
 
-    int verbose = _PyInterpreterState_GET_UNSAFE()->config.verbose;
+    int verbose = _Py_GetConfig()->verbose;
 
     /* First, clear only names starting with a single underscore */
     pos = 0;
@@ -677,16 +660,20 @@
 static void
 module_dealloc(PyModuleObject *m)
 {
-    int verbose = _PyInterpreterState_GET_UNSAFE()->config.verbose;
+    int verbose = _Py_GetConfig()->verbose;
 
     PyObject_GC_UnTrack(m);
     if (verbose && m->md_name) {
-        PySys_FormatStderr("# destroy %S\n", m->md_name);
+        PySys_FormatStderr("# destroy %U\n", m->md_name);
     }
     if (m->md_weaklist != NULL)
         PyObject_ClearWeakRefs((PyObject *) m);
-    if (m->md_def && m->md_def->m_free)
+    /* bpo-39824: Don't call m_free() if m_size > 0 and md_state=NULL */
+    if (m->md_def && m->md_def->m_free
+        && (m->md_def->m_size <= 0 || m->md_state != NULL))
+    {
         m->md_def->m_free(m);
+    }
     Py_XDECREF(m->md_dict);
     Py_XDECREF(m->md_name);
     if (m->md_state != NULL)
@@ -697,7 +684,7 @@
 static PyObject *
 module_repr(PyModuleObject *m)
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
 
     return PyObject_CallMethod(interp->importlib, "_module_repr", "O", m);
 }
@@ -736,13 +723,10 @@
         _Py_IDENTIFIER(__getattr__);
         getattr = _PyDict_GetItemId(m->md_dict, &PyId___getattr__);
         if (getattr) {
-            PyObject* stack[1] = {name};
-            return _PyObject_FastCall(getattr, stack, 1);
+            return PyObject_CallOneArg(getattr, name);
         }
-        _Py_IDENTIFIER(__name__);
         mod_name = _PyDict_GetItemId(m->md_dict, &PyId___name__);
         if (mod_name && PyUnicode_Check(mod_name)) {
-            _Py_IDENTIFIER(__spec__);
             Py_INCREF(mod_name);
             PyObject *spec = _PyDict_GetItemId(m->md_dict, &PyId___spec__);
             Py_XINCREF(spec);
@@ -771,7 +755,10 @@
 static int
 module_traverse(PyModuleObject *m, visitproc visit, void *arg)
 {
-    if (m->md_def && m->md_def->m_traverse) {
+    /* bpo-39824: Don't call m_traverse() if m_size > 0 and md_state=NULL */
+    if (m->md_def && m->md_def->m_traverse
+        && (m->md_def->m_size <= 0 || m->md_state != NULL))
+    {
         int res = m->md_def->m_traverse((PyObject*)m, visit, arg);
         if (res)
             return res;
@@ -783,8 +770,17 @@
 static int
 module_clear(PyModuleObject *m)
 {
-    if (m->md_def && m->md_def->m_clear) {
+    /* bpo-39824: Don't call m_clear() if m_size > 0 and md_state=NULL */
+    if (m->md_def && m->md_def->m_clear
+        && (m->md_def->m_size <= 0 || m->md_state != NULL))
+    {
         int res = m->md_def->m_clear((PyObject*)m);
+        if (PyErr_Occurred()) {
+            PySys_FormatStderr("Exception ignored in m_clear of module%s%V\n",
+                               m->md_name ? " " : "",
+                               m->md_name, "");
+            PyErr_WriteUnraisable(NULL);
+        }
         if (res)
             return res;
     }
diff --git a/Objects/namespaceobject.c b/Objects/namespaceobject.c
index ddad39a..fa37ed2 100644
--- a/Objects/namespaceobject.c
+++ b/Objects/namespaceobject.c
@@ -1,7 +1,7 @@
 // namespace object implementation
 
 #include "Python.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 
 typedef struct {
@@ -72,8 +72,8 @@
     PyObject *separator, *pairsrepr, *repr = NULL;
     const char * name;
 
-    name = (Py_TYPE(ns) == &_PyNamespace_Type) ? "namespace"
-                                               : ns->ob_type->tp_name;
+    name = Py_IS_TYPE(ns, &_PyNamespace_Type) ? "namespace"
+                                               : Py_TYPE(ns)->tp_name;
 
     i = Py_ReprEnter(ns);
     if (i != 0) {
@@ -91,8 +91,6 @@
     keys = PyDict_Keys(d);
     if (keys == NULL)
         goto error;
-    if (PyList_Sort(keys) != 0)
-        goto error;
 
     keys_iter = PyObject_GetIter(keys);
     if (keys_iter == NULL)
diff --git a/Objects/object.c b/Objects/object.c
index 74b1b15..623ee52 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -2,10 +2,14 @@
 /* Generic object operations; and implementation of None */
 
 #include "Python.h"
+#include "pycore_ceval.h"         // _Py_EnterRecursiveCall()
+#include "pycore_context.h"
 #include "pycore_initconfig.h"
 #include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "pycore_context.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pylifecycle.h"
+#include "pycore_pymem.h"         // _PyMem_IsPtrFreed()
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include "frameobject.h"
 #include "interpreteridobject.h"
 
@@ -31,8 +35,7 @@
     CHECK(!_PyObject_IsFreed(op));
     CHECK(Py_REFCNT(op) >= 1);
 
-    CHECK(op->ob_type != NULL);
-    _PyType_CheckConsistency(op->ob_type);
+    _PyType_CheckConsistency(Py_TYPE(op));
 
     if (PyUnicode_Check(op)) {
         _PyUnicode_CheckConsistency(op, check_content);
@@ -56,7 +59,7 @@
     Py_ssize_t total = _Py_RefTotal;
     o = _PySet_Dummy;
     if (o != NULL)
-        total -= o->ob_refcnt;
+        total -= Py_REFCNT(o);
     return total;
 }
 
@@ -111,122 +114,6 @@
 }
 #endif  /* Py_TRACE_REFS */
 
-#ifdef COUNT_ALLOCS
-static PyTypeObject *type_list;
-/* All types are added to type_list, at least when
-   they get one object created. That makes them
-   immortal, which unfortunately contributes to
-   garbage itself. If unlist_types_without_objects
-   is set, they will be removed from the type_list
-   once the last object is deallocated. */
-static int unlist_types_without_objects;
-extern Py_ssize_t _Py_tuple_zero_allocs, _Py_fast_tuple_allocs;
-extern Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
-extern Py_ssize_t _Py_null_strings, _Py_one_strings;
-void
-_Py_dump_counts(FILE* f)
-{
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    if (!interp->config.show_alloc_count) {
-        return;
-    }
-
-    PyTypeObject *tp;
-    for (tp = type_list; tp; tp = tp->tp_next)
-        fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
-            "freed: %" PY_FORMAT_SIZE_T "d, "
-            "max in use: %" PY_FORMAT_SIZE_T "d\n",
-            tp->tp_name, tp->tp_allocs, tp->tp_frees,
-            tp->tp_maxalloc);
-    fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
-        "empty: %" PY_FORMAT_SIZE_T "d\n",
-        _Py_fast_tuple_allocs, _Py_tuple_zero_allocs);
-    fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
-        "neg: %" PY_FORMAT_SIZE_T "d\n",
-        _Py_quick_int_allocs, _Py_quick_neg_int_allocs);
-    fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
-        "1-strings: %" PY_FORMAT_SIZE_T "d\n",
-        _Py_null_strings, _Py_one_strings);
-}
-
-PyObject *
-_Py_get_counts(void)
-{
-    PyTypeObject *tp;
-    PyObject *result;
-    PyObject *v;
-
-    result = PyList_New(0);
-    if (result == NULL)
-        return NULL;
-    for (tp = type_list; tp; tp = tp->tp_next) {
-        v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
-                          tp->tp_frees, tp->tp_maxalloc);
-        if (v == NULL) {
-            Py_DECREF(result);
-            return NULL;
-        }
-        if (PyList_Append(result, v) < 0) {
-            Py_DECREF(v);
-            Py_DECREF(result);
-            return NULL;
-        }
-        Py_DECREF(v);
-    }
-    return result;
-}
-
-void
-_Py_inc_count(PyTypeObject *tp)
-{
-    if (tp->tp_next == NULL && tp->tp_prev == NULL) {
-        /* first time; insert in linked list */
-        if (tp->tp_next != NULL) /* sanity check */
-            Py_FatalError("XXX _Py_inc_count sanity check");
-        if (type_list)
-            type_list->tp_prev = tp;
-        tp->tp_next = type_list;
-        /* Note that as of Python 2.2, heap-allocated type objects
-         * can go away, but this code requires that they stay alive
-         * until program exit.  That's why we're careful with
-         * refcounts here.  type_list gets a new reference to tp,
-         * while ownership of the reference type_list used to hold
-         * (if any) was transferred to tp->tp_next in the line above.
-         * tp is thus effectively immortal after this.
-         */
-        Py_INCREF(tp);
-        type_list = tp;
-#ifdef Py_TRACE_REFS
-        /* Also insert in the doubly-linked list of all objects,
-         * if not already there.
-         */
-        _Py_AddToAllObjects((PyObject *)tp, 0);
-#endif
-    }
-    tp->tp_allocs++;
-    if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
-        tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
-}
-
-void _Py_dec_count(PyTypeObject *tp)
-{
-    tp->tp_frees++;
-    if (unlist_types_without_objects &&
-        tp->tp_allocs == tp->tp_frees) {
-        /* unlink the type from type_list */
-        if (tp->tp_prev)
-            tp->tp_prev->tp_next = tp->tp_next;
-        else
-            type_list = tp->tp_next;
-        if (tp->tp_next)
-            tp->tp_next->tp_prev = tp->tp_prev;
-        tp->tp_next = tp->tp_prev = NULL;
-        Py_DECREF(tp);
-    }
-}
-
-#endif
-
 #ifdef Py_REF_DEBUG
 /* Log a fatal error; doesn't return. */
 void
@@ -253,36 +140,34 @@
 PyObject *
 PyObject_Init(PyObject *op, PyTypeObject *tp)
 {
-    if (op == NULL)
+    /* Any changes should be reflected in PyObject_INIT() macro */
+    if (op == NULL) {
         return PyErr_NoMemory();
-    /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
-    Py_TYPE(op) = tp;
-    if (PyType_GetFlags(tp) & Py_TPFLAGS_HEAPTYPE) {
-        Py_INCREF(tp);
     }
-    _Py_NewReference(op);
-    return op;
+
+    return PyObject_INIT(op, tp);
 }
 
 PyVarObject *
 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
 {
-    if (op == NULL)
+    /* Any changes should be reflected in PyObject_INIT_VAR() macro */
+    if (op == NULL) {
         return (PyVarObject *) PyErr_NoMemory();
-    /* Any changes should be reflected in PyObject_INIT_VAR */
-    Py_SIZE(op) = size;
-    PyObject_Init((PyObject *)op, tp);
-    return op;
+    }
+
+    return PyObject_INIT_VAR(op, tp, size);
 }
 
 PyObject *
 _PyObject_New(PyTypeObject *tp)
 {
-    PyObject *op;
-    op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
-    if (op == NULL)
+    PyObject *op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
+    if (op == NULL) {
         return PyErr_NoMemory();
-    return PyObject_INIT(op, tp);
+    }
+    PyObject_INIT(op, tp);
+    return op;
 }
 
 PyVarObject *
@@ -304,11 +189,11 @@
     if (tp->tp_finalize == NULL)
         return;
     /* tp_finalize should only be called once. */
-    if (PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
+    if (_PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
         return;
 
     tp->tp_finalize(self);
-    if (PyType_IS_GC(tp)) {
+    if (_PyType_IS_GC(tp)) {
         _PyGC_SET_FINALIZED(self);
     }
 }
@@ -316,48 +201,41 @@
 int
 PyObject_CallFinalizerFromDealloc(PyObject *self)
 {
-    Py_ssize_t refcnt;
+    if (Py_REFCNT(self) != 0) {
+        _PyObject_ASSERT_FAILED_MSG(self,
+                                    "PyObject_CallFinalizerFromDealloc called "
+                                    "on object with a non-zero refcount");
+    }
 
     /* Temporarily resurrect the object. */
-    if (self->ob_refcnt != 0) {
-        Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
-                      "object with a non-zero refcount");
-    }
-    self->ob_refcnt = 1;
+    Py_SET_REFCNT(self, 1);
 
     PyObject_CallFinalizer(self);
 
-    /* Undo the temporary resurrection; can't use DECREF here, it would
-     * cause a recursive call.
-     */
     _PyObject_ASSERT_WITH_MSG(self,
-                              self->ob_refcnt > 0,
+                              Py_REFCNT(self) > 0,
                               "refcount is too small");
-    if (--self->ob_refcnt == 0)
+
+    /* Undo the temporary resurrection; can't use DECREF here, it would
+     * cause a recursive call. */
+    Py_SET_REFCNT(self, Py_REFCNT(self) - 1);
+    if (Py_REFCNT(self) == 0) {
         return 0;         /* this is the normal path out */
+    }
 
     /* tp_finalize resurrected it!  Make it look like the original Py_DECREF
-     * never happened.
-     */
-    refcnt = self->ob_refcnt;
+     * never happened. */
+    Py_ssize_t refcnt = Py_REFCNT(self);
     _Py_NewReference(self);
-    self->ob_refcnt = refcnt;
+    Py_SET_REFCNT(self, refcnt);
 
     _PyObject_ASSERT(self,
-                     (!PyType_IS_GC(Py_TYPE(self))
+                     (!_PyType_IS_GC(Py_TYPE(self))
                       || _PyObject_GC_IS_TRACKED(self)));
-    /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
-     * we need to undo that. */
-    _Py_DEC_REFTOTAL;
-    /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
-     * chain, so no more to do there.
-     * If COUNT_ALLOCS, the original decref bumped tp_frees, and
-     * _Py_NewReference bumped tp_allocs:  both of those need to be
-     * undone.
-     */
-#ifdef COUNT_ALLOCS
-    --Py_TYPE(self)->tp_frees;
-    --Py_TYPE(self)->tp_allocs;
+    /* If Py_REF_DEBUG macro is defined, _Py_NewReference() increased
+       _Py_RefTotal, so we need to undo that. */
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
 #endif
     return -1;
 }
@@ -381,12 +259,12 @@
         Py_END_ALLOW_THREADS
     }
     else {
-        if (op->ob_refcnt <= 0) {
+        if (Py_REFCNT(op) <= 0) {
             /* XXX(twouters) cast refcount to long until %zd is
                universally available */
             Py_BEGIN_ALLOW_THREADS
             fprintf(fp, "<refcnt %ld at %p>",
-                (long)op->ob_refcnt, (void *)op);
+                (long)Py_REFCNT(op), (void *)op);
             Py_END_ALLOW_THREADS
         }
         else {
@@ -416,7 +294,7 @@
             else {
                 PyErr_Format(PyExc_TypeError,
                              "str() or repr() returned '%.100s'",
-                             s->ob_type->tp_name);
+                             Py_TYPE(s)->tp_name);
                 ret = -1;
             }
             Py_XDECREF(s);
@@ -448,7 +326,7 @@
 int
 _PyObject_IsFreed(PyObject *op)
 {
-    if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(op->ob_type)) {
+    if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(Py_TYPE(op))) {
         return 1;
     }
     /* ignore op->ob_ref: its value can have be modified
@@ -481,7 +359,7 @@
     fprintf(stderr, "object address  : %p\n", (void *)op);
     /* XXX(twouters) cast refcount to long until %zd is
        universally available */
-    fprintf(stderr, "object refcount : %ld\n", (long)op->ob_refcnt);
+    fprintf(stderr, "object refcount : %ld\n", (long)Py_REFCNT(op));
     fflush(stderr);
 
     PyTypeObject *type = Py_TYPE(op);
@@ -523,33 +401,39 @@
         return PyUnicode_FromString("<NULL>");
     if (Py_TYPE(v)->tp_repr == NULL)
         return PyUnicode_FromFormat("<%s object at %p>",
-                                    v->ob_type->tp_name, v);
+                                    Py_TYPE(v)->tp_name, v);
 
+    PyThreadState *tstate = _PyThreadState_GET();
 #ifdef Py_DEBUG
     /* PyObject_Repr() must not be called with an exception set,
        because it can clear it (directly or indirectly) and so the
        caller loses its exception */
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 #endif
 
     /* It is possible for a type to have a tp_repr representation that loops
        infinitely. */
-    if (Py_EnterRecursiveCall(" while getting the repr of an object"))
+    if (_Py_EnterRecursiveCall(tstate,
+                               " while getting the repr of an object")) {
         return NULL;
-    res = (*v->ob_type->tp_repr)(v);
-    Py_LeaveRecursiveCall();
-    if (res == NULL)
+    }
+    res = (*Py_TYPE(v)->tp_repr)(v);
+    _Py_LeaveRecursiveCall(tstate);
+
+    if (res == NULL) {
         return NULL;
+    }
     if (!PyUnicode_Check(res)) {
-        PyErr_Format(PyExc_TypeError,
-                     "__repr__ returned non-string (type %.200s)",
-                     res->ob_type->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "__repr__ returned non-string (type %.200s)",
+                      Py_TYPE(res)->tp_name);
         Py_DECREF(res);
         return NULL;
     }
 #ifndef Py_DEBUG
-    if (PyUnicode_READY(res) < 0)
+    if (PyUnicode_READY(res) < 0) {
         return NULL;
+    }
 #endif
     return res;
 }
@@ -579,31 +463,36 @@
     if (Py_TYPE(v)->tp_str == NULL)
         return PyObject_Repr(v);
 
+    PyThreadState *tstate = _PyThreadState_GET();
 #ifdef Py_DEBUG
     /* PyObject_Str() must not be called with an exception set,
        because it can clear it (directly or indirectly) and so the
        caller loses its exception */
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 #endif
 
     /* It is possible for a type to have a tp_str representation that loops
        infinitely. */
-    if (Py_EnterRecursiveCall(" while getting the str of an object"))
+    if (_Py_EnterRecursiveCall(tstate, " while getting the str of an object")) {
         return NULL;
+    }
     res = (*Py_TYPE(v)->tp_str)(v);
-    Py_LeaveRecursiveCall();
-    if (res == NULL)
+    _Py_LeaveRecursiveCall(tstate);
+
+    if (res == NULL) {
         return NULL;
+    }
     if (!PyUnicode_Check(res)) {
-        PyErr_Format(PyExc_TypeError,
-                     "__str__ returned non-string (type %.200s)",
-                     Py_TYPE(res)->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "__str__ returned non-string (type %.200s)",
+                      Py_TYPE(res)->tp_name);
         Py_DECREF(res);
         return NULL;
     }
 #ifndef Py_DEBUG
-    if (PyUnicode_READY(res) < 0)
+    if (PyUnicode_READY(res) < 0) {
         return NULL;
+    }
 #endif
     assert(_PyUnicode_CheckConsistency(res, 1));
     return res;
@@ -669,6 +558,64 @@
     return PyBytes_FromObject(v);
 }
 
+
+/*
+def _PyObject_FunctionStr(x):
+    try:
+        qualname = x.__qualname__
+    except AttributeError:
+        return str(x)
+    try:
+        mod = x.__module__
+        if mod is not None and mod != 'builtins':
+            return f"{x.__module__}.{qualname}()"
+    except AttributeError:
+        pass
+    return qualname
+*/
+PyObject *
+_PyObject_FunctionStr(PyObject *x)
+{
+    _Py_IDENTIFIER(__module__);
+    _Py_IDENTIFIER(__qualname__);
+    _Py_IDENTIFIER(builtins);
+    assert(!PyErr_Occurred());
+    PyObject *qualname;
+    int ret = _PyObject_LookupAttrId(x, &PyId___qualname__, &qualname);
+    if (qualname == NULL) {
+        if (ret < 0) {
+            return NULL;
+        }
+        return PyObject_Str(x);
+    }
+    PyObject *module;
+    PyObject *result = NULL;
+    ret = _PyObject_LookupAttrId(x, &PyId___module__, &module);
+    if (module != NULL && module != Py_None) {
+        PyObject *builtinsname = _PyUnicode_FromId(&PyId_builtins);
+        if (builtinsname == NULL) {
+            goto done;
+        }
+        ret = PyObject_RichCompareBool(module, builtinsname, Py_NE);
+        if (ret < 0) {
+            // error
+            goto done;
+        }
+        if (ret > 0) {
+            result = PyUnicode_FromFormat("%S.%S()", module, qualname);
+            goto done;
+        }
+    }
+    else if (ret < 0) {
+        goto done;
+    }
+    result = PyUnicode_FromFormat("%S()", qualname);
+done:
+    Py_DECREF(qualname);
+    Py_XDECREF(module);
+    return result;
+}
+
 /* For Python 3.0.1 and later, the old three-way comparison has been
    completely removed in favour of rich comparisons.  PyObject_Compare() and
    PyObject_Cmp() are gone, and the builtin cmp function no longer exists.
@@ -707,28 +654,28 @@
 /* Perform a rich comparison, raising TypeError when the requested comparison
    operator is not supported. */
 static PyObject *
-do_richcompare(PyObject *v, PyObject *w, int op)
+do_richcompare(PyThreadState *tstate, PyObject *v, PyObject *w, int op)
 {
     richcmpfunc f;
     PyObject *res;
     int checked_reverse_op = 0;
 
-    if (v->ob_type != w->ob_type &&
-        PyType_IsSubtype(w->ob_type, v->ob_type) &&
-        (f = w->ob_type->tp_richcompare) != NULL) {
+    if (!Py_IS_TYPE(v, Py_TYPE(w)) &&
+        PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v)) &&
+        (f = Py_TYPE(w)->tp_richcompare) != NULL) {
         checked_reverse_op = 1;
         res = (*f)(w, v, _Py_SwappedOp[op]);
         if (res != Py_NotImplemented)
             return res;
         Py_DECREF(res);
     }
-    if ((f = v->ob_type->tp_richcompare) != NULL) {
+    if ((f = Py_TYPE(v)->tp_richcompare) != NULL) {
         res = (*f)(v, w, op);
         if (res != Py_NotImplemented)
             return res;
         Py_DECREF(res);
     }
-    if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
+    if (!checked_reverse_op && (f = Py_TYPE(w)->tp_richcompare) != NULL) {
         res = (*f)(w, v, _Py_SwappedOp[op]);
         if (res != Py_NotImplemented)
             return res;
@@ -744,11 +691,11 @@
         res = (v != w) ? Py_True : Py_False;
         break;
     default:
-        PyErr_Format(PyExc_TypeError,
-                     "'%s' not supported between instances of '%.100s' and '%.100s'",
-                     opstrings[op],
-                     v->ob_type->tp_name,
-                     w->ob_type->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "'%s' not supported between instances of '%.100s' and '%.100s'",
+                      opstrings[op],
+                      Py_TYPE(v)->tp_name,
+                      Py_TYPE(w)->tp_name);
         return NULL;
     }
     Py_INCREF(res);
@@ -761,18 +708,20 @@
 PyObject *
 PyObject_RichCompare(PyObject *v, PyObject *w, int op)
 {
-    PyObject *res;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     assert(Py_LT <= op && op <= Py_GE);
     if (v == NULL || w == NULL) {
-        if (!PyErr_Occurred())
+        if (!_PyErr_Occurred(tstate)) {
             PyErr_BadInternalCall();
+        }
         return NULL;
     }
-    if (Py_EnterRecursiveCall(" in comparison"))
+    if (_Py_EnterRecursiveCall(tstate, " in comparison")) {
         return NULL;
-    res = do_richcompare(v, w, op);
-    Py_LeaveRecursiveCall();
+    }
+    PyObject *res = do_richcompare(tstate, v, w, op);
+    _Py_LeaveRecursiveCall(tstate);
     return res;
 }
 
@@ -934,7 +883,7 @@
     if (!PyUnicode_Check(name)) {
         PyErr_Format(PyExc_TypeError,
                      "attribute name must be string, not '%.200s'",
-                     name->ob_type->tp_name);
+                     Py_TYPE(name)->tp_name);
         return NULL;
     }
     if (tp->tp_getattro != NULL)
@@ -959,7 +908,7 @@
     if (!PyUnicode_Check(name)) {
         PyErr_Format(PyExc_TypeError,
                      "attribute name must be string, not '%.200s'",
-                     name->ob_type->tp_name);
+                     Py_TYPE(name)->tp_name);
         *result = NULL;
         return -1;
     }
@@ -1035,7 +984,7 @@
     if (!PyUnicode_Check(name)) {
         PyErr_Format(PyExc_TypeError,
                      "attribute name must be string, not '%.200s'",
-                     name->ob_type->tp_name);
+                     Py_TYPE(name)->tp_name);
         return -1;
     }
     Py_INCREF(name);
@@ -1057,7 +1006,7 @@
         return err;
     }
     Py_DECREF(name);
-    _PyObject_ASSERT(name, name->ob_refcnt >= 1);
+    _PyObject_ASSERT(name, Py_REFCNT(name) >= 1);
     if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
         PyErr_Format(PyExc_TypeError,
                      "'%.100s' object has no attributes "
@@ -1087,13 +1036,11 @@
     if (dictoffset == 0)
         return NULL;
     if (dictoffset < 0) {
-        Py_ssize_t tsize;
-        size_t size;
-
-        tsize = ((PyVarObject *)obj)->ob_size;
-        if (tsize < 0)
+        Py_ssize_t tsize = Py_SIZE(obj);
+        if (tsize < 0) {
             tsize = -tsize;
-        size = _PyObject_VAR_SIZE(tp, tsize);
+        }
+        size_t size = _PyObject_VAR_SIZE(tp, tsize);
 
         dictoffset += (long)size;
         _PyObject_ASSERT(obj, dictoffset > 0);
@@ -1158,12 +1105,12 @@
     descr = _PyType_Lookup(tp, name);
     if (descr != NULL) {
         Py_INCREF(descr);
-        if (PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
+        if (_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
             meth_found = 1;
         } else {
-            f = descr->ob_type->tp_descr_get;
+            f = Py_TYPE(descr)->tp_descr_get;
             if (f != NULL && PyDescr_IsData(descr)) {
-                *method = f(descr, obj, (PyObject *)obj->ob_type);
+                *method = f(descr, obj, (PyObject *)Py_TYPE(obj));
                 Py_DECREF(descr);
                 return 0;
             }
@@ -1234,7 +1181,7 @@
     if (!PyUnicode_Check(name)){
         PyErr_Format(PyExc_TypeError,
                      "attribute name must be string, not '%.200s'",
-                     name->ob_type->tp_name);
+                     Py_TYPE(name)->tp_name);
         return NULL;
     }
     Py_INCREF(name);
@@ -1249,9 +1196,9 @@
     f = NULL;
     if (descr != NULL) {
         Py_INCREF(descr);
-        f = descr->ob_type->tp_descr_get;
+        f = Py_TYPE(descr)->tp_descr_get;
         if (f != NULL && PyDescr_IsData(descr)) {
-            res = f(descr, obj, (PyObject *)obj->ob_type);
+            res = f(descr, obj, (PyObject *)Py_TYPE(obj));
             if (res == NULL && suppress &&
                     PyErr_ExceptionMatches(PyExc_AttributeError)) {
                 PyErr_Clear();
@@ -1265,13 +1212,11 @@
         dictoffset = tp->tp_dictoffset;
         if (dictoffset != 0) {
             if (dictoffset < 0) {
-                Py_ssize_t tsize;
-                size_t size;
-
-                tsize = ((PyVarObject *)obj)->ob_size;
-                if (tsize < 0)
+                Py_ssize_t tsize = Py_SIZE(obj);
+                if (tsize < 0) {
                     tsize = -tsize;
-                size = _PyObject_VAR_SIZE(tp, tsize);
+                }
+                size_t size = _PyObject_VAR_SIZE(tp, tsize);
                 _PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX);
 
                 dictoffset += (Py_ssize_t)size;
@@ -1348,7 +1293,7 @@
     if (!PyUnicode_Check(name)){
         PyErr_Format(PyExc_TypeError,
                      "attribute name must be string, not '%.200s'",
-                     name->ob_type->tp_name);
+                     Py_TYPE(name)->tp_name);
         return -1;
     }
 
@@ -1361,7 +1306,7 @@
 
     if (descr != NULL) {
         Py_INCREF(descr);
-        f = descr->ob_type->tp_descr_set;
+        f = Py_TYPE(descr)->tp_descr_set;
         if (f != NULL) {
             res = f(descr, obj, value);
             goto done;
@@ -1454,15 +1399,15 @@
         return 0;
     if (v == Py_None)
         return 0;
-    else if (v->ob_type->tp_as_number != NULL &&
-             v->ob_type->tp_as_number->nb_bool != NULL)
-        res = (*v->ob_type->tp_as_number->nb_bool)(v);
-    else if (v->ob_type->tp_as_mapping != NULL &&
-             v->ob_type->tp_as_mapping->mp_length != NULL)
-        res = (*v->ob_type->tp_as_mapping->mp_length)(v);
-    else if (v->ob_type->tp_as_sequence != NULL &&
-             v->ob_type->tp_as_sequence->sq_length != NULL)
-        res = (*v->ob_type->tp_as_sequence->sq_length)(v);
+    else if (Py_TYPE(v)->tp_as_number != NULL &&
+             Py_TYPE(v)->tp_as_number->nb_bool != NULL)
+        res = (*Py_TYPE(v)->tp_as_number->nb_bool)(v);
+    else if (Py_TYPE(v)->tp_as_mapping != NULL &&
+             Py_TYPE(v)->tp_as_mapping->mp_length != NULL)
+        res = (*Py_TYPE(v)->tp_as_mapping->mp_length)(v);
+    else if (Py_TYPE(v)->tp_as_sequence != NULL &&
+             Py_TYPE(v)->tp_as_sequence->sq_length != NULL)
+        res = (*Py_TYPE(v)->tp_as_sequence->sq_length)(v);
     else
         return 1;
     /* if it is negative, it should be either -1 or -2 */
@@ -1489,7 +1434,7 @@
 {
     if (x == NULL)
         return 0;
-    return x->ob_type->tp_call != NULL;
+    return Py_TYPE(x)->tp_call != NULL;
 }
 
 
@@ -1576,7 +1521,7 @@
 }
 
 /* ARGUSED */
-static void
+static void _Py_NO_RETURN
 none_dealloc(PyObject* ignore)
 {
     /* This should never get called, but we also don't want to SEGV if
@@ -1714,7 +1659,7 @@
     Py_RETURN_NOTIMPLEMENTED;
 }
 
-static void
+static void _Py_NO_RETURN
 notimplemented_dealloc(PyObject* ignore)
 {
     /* This should never get called, but we also don't want to SEGV if
@@ -1723,6 +1668,22 @@
     Py_FatalError("deallocating NotImplemented");
 }
 
+static int
+notimplemented_bool(PyObject *v)
+{
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                     "NotImplemented should not be used in a boolean context",
+                     1) < 0)
+    {
+        return -1;
+    }
+    return 1;
+}
+
+static PyNumberMethods notimplemented_as_number = {
+    .nb_bool = notimplemented_bool,
+};
+
 PyTypeObject _PyNotImplemented_Type = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "NotImplementedType",
@@ -1733,8 +1694,8 @@
     0,                  /*tp_getattr*/
     0,                  /*tp_setattr*/
     0,                  /*tp_as_async*/
-    NotImplemented_repr, /*tp_repr*/
-    0,                  /*tp_as_number*/
+    NotImplemented_repr,        /*tp_repr*/
+    &notimplemented_as_number,  /*tp_as_number*/
     0,                  /*tp_as_sequence*/
     0,                  /*tp_as_mapping*/
     0,                  /*tp_hash */
@@ -1772,6 +1733,11 @@
 PyStatus
 _PyTypes_Init(void)
 {
+    PyStatus status = _PyTypes_InitSlotDefs();
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
 #define INIT_TYPE(TYPE, NAME) \
     do { \
         if (PyType_Ready(TYPE) < 0) { \
@@ -1823,6 +1789,7 @@
     INIT_TYPE(&PyCode_Type, "code");
     INIT_TYPE(&PyFrame_Type, "frame");
     INIT_TYPE(&PyCFunction_Type, "builtin function");
+    INIT_TYPE(&PyCMethod_Type, "builtin method");
     INIT_TYPE(&PyMethod_Type, "method");
     INIT_TYPE(&PyFunction_Type, "function");
     INIT_TYPE(&PyDictProxy_Type, "dict proxy");
@@ -1851,50 +1818,53 @@
 }
 
 
-#ifdef Py_TRACE_REFS
-
 void
 _Py_NewReference(PyObject *op)
 {
     if (_Py_tracemalloc_config.tracing) {
         _PyTraceMalloc_NewReference(op);
     }
-    _Py_INC_REFTOTAL;
-    op->ob_refcnt = 1;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal++;
+#endif
+    Py_SET_REFCNT(op, 1);
+#ifdef Py_TRACE_REFS
     _Py_AddToAllObjects(op, 1);
-    _Py_INC_TPALLOCS(op);
+#endif
 }
 
+
+#ifdef Py_TRACE_REFS
 void
 _Py_ForgetReference(PyObject *op)
 {
+    if (Py_REFCNT(op) < 0) {
+        _PyObject_ASSERT_FAILED_MSG(op, "negative refcnt");
+    }
+
+    if (op == &refchain ||
+        op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
+    {
+        _PyObject_ASSERT_FAILED_MSG(op, "invalid object chain");
+    }
+
 #ifdef SLOW_UNREF_CHECK
     PyObject *p;
-#endif
-    if (op->ob_refcnt < 0)
-        Py_FatalError("UNREF negative refcnt");
-    if (op == &refchain ||
-        op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
-        fprintf(stderr, "* ob\n");
-        _PyObject_Dump(op);
-        fprintf(stderr, "* op->_ob_prev->_ob_next\n");
-        _PyObject_Dump(op->_ob_prev->_ob_next);
-        fprintf(stderr, "* op->_ob_next->_ob_prev\n");
-        _PyObject_Dump(op->_ob_next->_ob_prev);
-        Py_FatalError("UNREF invalid object");
-    }
-#ifdef SLOW_UNREF_CHECK
     for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
-        if (p == op)
+        if (p == op) {
             break;
+        }
     }
-    if (p == &refchain) /* Not found */
-        Py_FatalError("UNREF unknown object");
+    if (p == &refchain) {
+        /* Not found */
+        _PyObject_ASSERT_FAILED_MSG(op,
+                                    "object not found in the objects list");
+    }
 #endif
+
     op->_ob_next->_ob_prev = op->_ob_prev;
     op->_ob_prev->_ob_next = op->_ob_next;
     op->_ob_next = op->_ob_prev = NULL;
-    _Py_INC_TPFREES(op);
 }
 
 /* Print all live objects.  Because PyObject_Print is called, the
@@ -1906,7 +1876,7 @@
     PyObject *op;
     fprintf(fp, "Remaining objects:\n");
     for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
-        fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, op->ob_refcnt);
+        fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, Py_REFCNT(op));
         if (PyObject_Print(op, fp, 0) != 0)
             PyErr_Clear();
         putc('\n', fp);
@@ -1923,7 +1893,7 @@
     fprintf(fp, "Remaining object addresses:\n");
     for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
         fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", (void *)op,
-            op->ob_refcnt, Py_TYPE(op)->tp_name);
+            Py_REFCNT(op), Py_TYPE(op)->tp_name);
 }
 
 PyObject *
@@ -1941,7 +1911,7 @@
         return NULL;
     for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
         while (op == self || op == args || op == res || op == t ||
-               (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
+               (t != NULL && !Py_IS_TYPE(op, (PyTypeObject *) t))) {
             op = op->_ob_next;
             if (op == &refchain)
                 return res;
@@ -1965,12 +1935,10 @@
 void
 _PyObject_DebugTypeStats(FILE *out)
 {
-    _PyCFunction_DebugMallocStats(out);
     _PyDict_DebugMallocStats(out);
     _PyFloat_DebugMallocStats(out);
     _PyFrame_DebugMallocStats(out);
     _PyList_DebugMallocStats(out);
-    _PyMethod_DebugMallocStats(out);
     _PyTuple_DebugMallocStats(out);
 }
 
@@ -2061,11 +2029,14 @@
 void
 _PyTrash_deposit_object(PyObject *op)
 {
-    _PyObject_ASSERT(op, PyObject_IS_GC(op));
+    PyThreadState *tstate = _PyThreadState_GET();
+    struct _gc_runtime_state *gcstate = &tstate->interp->gc;
+
+    _PyObject_ASSERT(op, _PyObject_IS_GC(op));
     _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
-    _PyObject_ASSERT(op, op->ob_refcnt == 0);
-    _PyGCHead_SET_PREV(_Py_AS_GC(op), _PyRuntime.gc.trash_delete_later);
-    _PyRuntime.gc.trash_delete_later = op;
+    _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
+    _PyGCHead_SET_PREV(_Py_AS_GC(op), gcstate->trash_delete_later);
+    gcstate->trash_delete_later = op;
 }
 
 /* The equivalent API, using per-thread state recursion info */
@@ -2073,24 +2044,27 @@
 _PyTrash_thread_deposit_object(PyObject *op)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    _PyObject_ASSERT(op, PyObject_IS_GC(op));
+    _PyObject_ASSERT(op, _PyObject_IS_GC(op));
     _PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
-    _PyObject_ASSERT(op, op->ob_refcnt == 0);
+    _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
     _PyGCHead_SET_PREV(_Py_AS_GC(op), tstate->trash_delete_later);
     tstate->trash_delete_later = op;
 }
 
-/* Dealloccate all the objects in the _PyTrash_delete_later list.  Called when
+/* Deallocate all the objects in the _PyTrash_delete_later list.  Called when
  * the call-stack unwinds again.
  */
 void
 _PyTrash_destroy_chain(void)
 {
-    while (_PyRuntime.gc.trash_delete_later) {
-        PyObject *op = _PyRuntime.gc.trash_delete_later;
+    PyThreadState *tstate = _PyThreadState_GET();
+    struct _gc_runtime_state *gcstate = &tstate->interp->gc;
+
+    while (gcstate->trash_delete_later) {
+        PyObject *op = gcstate->trash_delete_later;
         destructor dealloc = Py_TYPE(op)->tp_dealloc;
 
-        _PyRuntime.gc.trash_delete_later =
+        gcstate->trash_delete_later =
             (PyObject*) _PyGCHead_PREV(_Py_AS_GC(op));
 
         /* Call the deallocator directly.  This used to try to
@@ -2099,10 +2073,10 @@
          * assorted non-release builds calling Py_DECREF again ends
          * up distorting allocation statistics.
          */
-        _PyObject_ASSERT(op, op->ob_refcnt == 0);
-        ++_PyRuntime.gc.trash_delete_nesting;
+        _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
+        ++gcstate->trash_delete_nesting;
         (*dealloc)(op);
-        --_PyRuntime.gc.trash_delete_nesting;
+        --gcstate->trash_delete_nesting;
     }
 }
 
@@ -2137,7 +2111,7 @@
          * assorted non-release builds calling Py_DECREF again ends
          * up distorting allocation statistics.
          */
-        _PyObject_ASSERT(op, op->ob_refcnt == 0);
+        _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
         (*dealloc)(op);
         assert(tstate->trash_delete_nesting == 1);
     }
@@ -2145,7 +2119,31 @@
 }
 
 
+int
+_PyTrash_begin(PyThreadState *tstate, PyObject *op)
+{
+    if (tstate->trash_delete_nesting >= PyTrash_UNWIND_LEVEL) {
+        /* Store the object (to be deallocated later) and jump past
+         * Py_TRASHCAN_END, skipping the body of the deallocator */
+        _PyTrash_thread_deposit_object(op);
+        return 1;
+    }
+    ++tstate->trash_delete_nesting;
+    return 0;
+}
+
+
 void
+_PyTrash_end(PyThreadState *tstate)
+{
+    --tstate->trash_delete_nesting;
+    if (tstate->trash_delete_later && tstate->trash_delete_nesting <= 0) {
+        _PyTrash_thread_destroy_chain();
+    }
+}
+
+
+void _Py_NO_RETURN
 _PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
                        const char *file, int line, const char *function)
 {
@@ -2181,7 +2179,7 @@
            to crash than dumping the traceback. */
         void *ptr;
         PyTypeObject *type = Py_TYPE(obj);
-        if (PyType_IS_GC(type)) {
+        if (_PyType_IS_GC(type)) {
             ptr = (void *)((char *)obj - sizeof(PyGC_Head));
         }
         else {
@@ -2201,20 +2199,24 @@
 }
 
 
-#undef _Py_Dealloc
-
 void
 _Py_Dealloc(PyObject *op)
 {
     destructor dealloc = Py_TYPE(op)->tp_dealloc;
 #ifdef Py_TRACE_REFS
     _Py_ForgetReference(op);
-#else
-    _Py_INC_TPFREES(op);
 #endif
     (*dealloc)(op);
 }
 
+
+PyObject **
+PyObject_GET_WEAKREFS_LISTPTR(PyObject *op)
+{
+    return _PyObject_GET_WEAKREFS_LISTPTR(op);
+}
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index c483ff3..eb34f10 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -1,5 +1,5 @@
 #include "Python.h"
-#include "pycore_pymem.h"
+#include "pycore_pymem.h"         // _PyTraceMalloc_Config
 
 #include <stdbool.h>
 
@@ -25,7 +25,7 @@
 static void _PyMem_DebugFree(void *ctx, void *p);
 
 static void _PyObject_DebugDumpAddress(const void *p);
-static void _PyMem_DebugCheckAddress(char api_id, const void *p);
+static void _PyMem_DebugCheckAddress(const char *func, char api_id, const void *p);
 
 static void _PyMem_SetupDebugHooksDomain(PyMemAllocatorDomain domain);
 
@@ -710,19 +710,21 @@
 }
 
 
-#ifdef WITH_PYMALLOC
-
-#ifdef WITH_VALGRIND
-#include <valgrind/valgrind.h>
-
 /* If we're using GCC, use __builtin_expect() to reduce overhead of
    the valgrind checks */
 #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
 #  define UNLIKELY(value) __builtin_expect((value), 0)
+#  define LIKELY(value) __builtin_expect((value), 1)
 #else
 #  define UNLIKELY(value) (value)
+#  define LIKELY(value) (value)
 #endif
 
+#ifdef WITH_PYMALLOC
+
+#ifdef WITH_VALGRIND
+#include <valgrind/valgrind.h>
+
 /* -1 indicates that we haven't checked that we're running on valgrind yet. */
 static int running_on_valgrind = -1;
 #endif
@@ -1206,12 +1208,29 @@
 /* High water mark (max value ever seen) for narenas_currently_allocated. */
 static size_t narenas_highwater = 0;
 
-static Py_ssize_t _Py_AllocatedBlocks = 0;
+static Py_ssize_t raw_allocated_blocks;
 
 Py_ssize_t
 _Py_GetAllocatedBlocks(void)
 {
-    return _Py_AllocatedBlocks;
+    Py_ssize_t n = raw_allocated_blocks;
+    /* add up allocated blocks for used pools */
+    for (uint i = 0; i < maxarenas; ++i) {
+        /* Skip arenas which are not allocated. */
+        if (arenas[i].address == 0) {
+            continue;
+        }
+
+        uintptr_t base = (uintptr_t)_Py_ALIGN_UP(arenas[i].address, POOL_SIZE);
+
+        /* visit every pool in the arena */
+        assert(base <= (uintptr_t) arenas[i].pool_address);
+        for (; base < (uintptr_t) arenas[i].pool_address; base += POOL_SIZE) {
+            poolp p = (poolp)base;
+            n += p->ref.count;
+        }
+    }
+    return n;
 }
 
 
@@ -1407,96 +1426,48 @@
 
 /*==========================================================================*/
 
-/* pymalloc allocator
-
-   The basic blocks are ordered by decreasing execution frequency,
-   which minimizes the number of jumps in the most common cases,
-   improves branching prediction and instruction scheduling (small
-   block allocations typically result in a couple of instructions).
-   Unless the optimizer reorders everything, being too smart...
-
-   Return a pointer to newly allocated memory if pymalloc allocated memory.
-
-   Return NULL if pymalloc failed to allocate the memory block: on bigger
-   requests, on error in the code below (as a last chance to serve the request)
-   or when the max memory limit has been reached. */
-static void*
-pymalloc_alloc(void *ctx, size_t nbytes)
+// Called when freelist is exhausted.  Extend the freelist if there is
+// space for a block.  Otherwise, remove this pool from usedpools.
+static void
+pymalloc_pool_extend(poolp pool, uint size)
 {
-    block *bp;
-    poolp pool;
+    if (UNLIKELY(pool->nextoffset <= pool->maxnextoffset)) {
+        /* There is room for another block. */
+        pool->freeblock = (block*)pool + pool->nextoffset;
+        pool->nextoffset += INDEX2SIZE(size);
+        *(block **)(pool->freeblock) = NULL;
+        return;
+    }
+
+    /* Pool is full, unlink from used pools. */
     poolp next;
-    uint size;
+    next = pool->nextpool;
+    pool = pool->prevpool;
+    next->prevpool = pool;
+    pool->nextpool = next;
+}
 
-#ifdef WITH_VALGRIND
-    if (UNLIKELY(running_on_valgrind == -1)) {
-        running_on_valgrind = RUNNING_ON_VALGRIND;
-    }
-    if (UNLIKELY(running_on_valgrind)) {
-        return NULL;
-    }
-#endif
-
-    if (nbytes == 0) {
-        return NULL;
-    }
-    if (nbytes > SMALL_REQUEST_THRESHOLD) {
-        return NULL;
-    }
-
-    /*
-     * Most frequent paths first
-     */
-    size = (uint)(nbytes - 1) >> ALIGNMENT_SHIFT;
-    pool = usedpools[size + size];
-    if (pool != pool->nextpool) {
-        /*
-         * There is a used pool for this size class.
-         * Pick up the head block of its free list.
-         */
-        ++pool->ref.count;
-        bp = pool->freeblock;
-        assert(bp != NULL);
-        if ((pool->freeblock = *(block **)bp) != NULL) {
-            goto success;
-        }
-
-        /*
-         * Reached the end of the free list, try to extend it.
-         */
-        if (pool->nextoffset <= pool->maxnextoffset) {
-            /* There is room for another block. */
-            pool->freeblock = (block*)pool +
-                              pool->nextoffset;
-            pool->nextoffset += INDEX2SIZE(size);
-            *(block **)(pool->freeblock) = NULL;
-            goto success;
-        }
-
-        /* Pool is full, unlink from used pools. */
-        next = pool->nextpool;
-        pool = pool->prevpool;
-        next->prevpool = pool;
-        pool->nextpool = next;
-        goto success;
-    }
-
+/* called when pymalloc_alloc can not allocate a block from usedpool.
+ * This function takes new pool and allocate a block from it.
+ */
+static void*
+allocate_from_new_pool(uint size)
+{
     /* There isn't a pool of the right size class immediately
      * available:  use a free pool.
      */
-    if (usable_arenas == NULL) {
+    if (UNLIKELY(usable_arenas == NULL)) {
         /* No arena has a free pool:  allocate a new arena. */
 #ifdef WITH_MEMORY_LIMITS
         if (narenas_currently_allocated >= MAX_ARENAS) {
-            goto failed;
+            return NULL;
         }
 #endif
         usable_arenas = new_arena();
         if (usable_arenas == NULL) {
-            goto failed;
+            return NULL;
         }
-        usable_arenas->nextarena =
-            usable_arenas->prevarena = NULL;
+        usable_arenas->nextarena = usable_arenas->prevarena = NULL;
         assert(nfp2lasta[usable_arenas->nfreepools] == NULL);
         nfp2lasta[usable_arenas->nfreepools] = usable_arenas;
     }
@@ -1519,12 +1490,12 @@
     }
 
     /* Try to get a cached free pool. */
-    pool = usable_arenas->freepools;
-    if (pool != NULL) {
+    poolp pool = usable_arenas->freepools;
+    if (LIKELY(pool != NULL)) {
         /* Unlink from cached pools. */
         usable_arenas->freepools = pool->nextpool;
-        --usable_arenas->nfreepools;
-        if (usable_arenas->nfreepools == 0) {
+        usable_arenas->nfreepools--;
+        if (UNLIKELY(usable_arenas->nfreepools == 0)) {
             /* Wholly allocated:  remove. */
             assert(usable_arenas->freepools == NULL);
             assert(usable_arenas->nextarena == NULL ||
@@ -1547,72 +1518,119 @@
                    (block*)usable_arenas->address +
                        ARENA_SIZE - POOL_SIZE);
         }
+    }
+    else {
+        /* Carve off a new pool. */
+        assert(usable_arenas->nfreepools > 0);
+        assert(usable_arenas->freepools == NULL);
+        pool = (poolp)usable_arenas->pool_address;
+        assert((block*)pool <= (block*)usable_arenas->address +
+                                 ARENA_SIZE - POOL_SIZE);
+        pool->arenaindex = (uint)(usable_arenas - arenas);
+        assert(&arenas[pool->arenaindex] == usable_arenas);
+        pool->szidx = DUMMY_SIZE_IDX;
+        usable_arenas->pool_address += POOL_SIZE;
+        --usable_arenas->nfreepools;
 
-    init_pool:
-        /* Frontlink to used pools. */
-        next = usedpools[size + size]; /* == prev */
-        pool->nextpool = next;
-        pool->prevpool = next;
-        next->nextpool = pool;
-        next->prevpool = pool;
-        pool->ref.count = 1;
-        if (pool->szidx == size) {
-            /* Luckily, this pool last contained blocks
-             * of the same size class, so its header
-             * and free list are already initialized.
-             */
-            bp = pool->freeblock;
-            assert(bp != NULL);
-            pool->freeblock = *(block **)bp;
-            goto success;
+        if (usable_arenas->nfreepools == 0) {
+            assert(usable_arenas->nextarena == NULL ||
+                   usable_arenas->nextarena->prevarena ==
+                   usable_arenas);
+            /* Unlink the arena:  it is completely allocated. */
+            usable_arenas = usable_arenas->nextarena;
+            if (usable_arenas != NULL) {
+                usable_arenas->prevarena = NULL;
+                assert(usable_arenas->address != 0);
+            }
         }
-        /*
-         * Initialize the pool header, set up the free list to
-         * contain just the second block, and return the first
-         * block.
+    }
+
+    /* Frontlink to used pools. */
+    block *bp;
+    poolp next = usedpools[size + size]; /* == prev */
+    pool->nextpool = next;
+    pool->prevpool = next;
+    next->nextpool = pool;
+    next->prevpool = pool;
+    pool->ref.count = 1;
+    if (pool->szidx == size) {
+        /* Luckily, this pool last contained blocks
+         * of the same size class, so its header
+         * and free list are already initialized.
          */
-        pool->szidx = size;
-        size = INDEX2SIZE(size);
-        bp = (block *)pool + POOL_OVERHEAD;
-        pool->nextoffset = POOL_OVERHEAD + (size << 1);
-        pool->maxnextoffset = POOL_SIZE - size;
-        pool->freeblock = bp + size;
-        *(block **)(pool->freeblock) = NULL;
-        goto success;
+        bp = pool->freeblock;
+        assert(bp != NULL);
+        pool->freeblock = *(block **)bp;
+        return bp;
+    }
+    /*
+     * Initialize the pool header, set up the free list to
+     * contain just the second block, and return the first
+     * block.
+     */
+    pool->szidx = size;
+    size = INDEX2SIZE(size);
+    bp = (block *)pool + POOL_OVERHEAD;
+    pool->nextoffset = POOL_OVERHEAD + (size << 1);
+    pool->maxnextoffset = POOL_SIZE - size;
+    pool->freeblock = bp + size;
+    *(block **)(pool->freeblock) = NULL;
+    return bp;
+}
+
+/* pymalloc allocator
+
+   Return a pointer to newly allocated memory if pymalloc allocated memory.
+
+   Return NULL if pymalloc failed to allocate the memory block: on bigger
+   requests, on error in the code below (as a last chance to serve the request)
+   or when the max memory limit has been reached.
+*/
+static inline void*
+pymalloc_alloc(void *ctx, size_t nbytes)
+{
+#ifdef WITH_VALGRIND
+    if (UNLIKELY(running_on_valgrind == -1)) {
+        running_on_valgrind = RUNNING_ON_VALGRIND;
+    }
+    if (UNLIKELY(running_on_valgrind)) {
+        return NULL;
+    }
+#endif
+
+    if (UNLIKELY(nbytes == 0)) {
+        return NULL;
+    }
+    if (UNLIKELY(nbytes > SMALL_REQUEST_THRESHOLD)) {
+        return NULL;
     }
 
-    /* Carve off a new pool. */
-    assert(usable_arenas->nfreepools > 0);
-    assert(usable_arenas->freepools == NULL);
-    pool = (poolp)usable_arenas->pool_address;
-    assert((block*)pool <= (block*)usable_arenas->address +
-                             ARENA_SIZE - POOL_SIZE);
-    pool->arenaindex = (uint)(usable_arenas - arenas);
-    assert(&arenas[pool->arenaindex] == usable_arenas);
-    pool->szidx = DUMMY_SIZE_IDX;
-    usable_arenas->pool_address += POOL_SIZE;
-    --usable_arenas->nfreepools;
+    uint size = (uint)(nbytes - 1) >> ALIGNMENT_SHIFT;
+    poolp pool = usedpools[size + size];
+    block *bp;
 
-    if (usable_arenas->nfreepools == 0) {
-        assert(usable_arenas->nextarena == NULL ||
-               usable_arenas->nextarena->prevarena ==
-               usable_arenas);
-        /* Unlink the arena:  it is completely allocated. */
-        usable_arenas = usable_arenas->nextarena;
-        if (usable_arenas != NULL) {
-            usable_arenas->prevarena = NULL;
-            assert(usable_arenas->address != 0);
+    if (LIKELY(pool != pool->nextpool)) {
+        /*
+         * There is a used pool for this size class.
+         * Pick up the head block of its free list.
+         */
+        ++pool->ref.count;
+        bp = pool->freeblock;
+        assert(bp != NULL);
+
+        if (UNLIKELY((pool->freeblock = *(block **)bp) == NULL)) {
+            // Reached the end of the free list, try to extend it.
+            pymalloc_pool_extend(pool, size);
         }
     }
+    else {
+        /* There isn't a pool of the right size class immediately
+         * available:  use a free pool.
+         */
+        bp = allocate_from_new_pool(size);
+    }
 
-    goto init_pool;
-
-success:
-    assert(bp != NULL);
     return (void *)bp;
-
-failed:
-    return NULL;
 }
 
 
@@ -1620,14 +1638,13 @@
 _PyObject_Malloc(void *ctx, size_t nbytes)
 {
     void* ptr = pymalloc_alloc(ctx, nbytes);
-    if (ptr != NULL) {
-        _Py_AllocatedBlocks++;
+    if (LIKELY(ptr != NULL)) {
         return ptr;
     }
 
     ptr = PyMem_RawMalloc(nbytes);
     if (ptr != NULL) {
-        _Py_AllocatedBlocks++;
+        raw_allocated_blocks++;
     }
     return ptr;
 }
@@ -1639,103 +1656,51 @@
     assert(elsize == 0 || nelem <= (size_t)PY_SSIZE_T_MAX / elsize);
     size_t nbytes = nelem * elsize;
 
-    void *ptr = pymalloc_alloc(ctx, nbytes);
-    if (ptr != NULL) {
+    void* ptr = pymalloc_alloc(ctx, nbytes);
+    if (LIKELY(ptr != NULL)) {
         memset(ptr, 0, nbytes);
-        _Py_AllocatedBlocks++;
         return ptr;
     }
 
     ptr = PyMem_RawCalloc(nelem, elsize);
     if (ptr != NULL) {
-        _Py_AllocatedBlocks++;
+        raw_allocated_blocks++;
     }
     return ptr;
 }
 
 
-/* Free a memory block allocated by pymalloc_alloc().
-   Return 1 if it was freed.
-   Return 0 if the block was not allocated by pymalloc_alloc(). */
-static int
-pymalloc_free(void *ctx, void *p)
+static void
+insert_to_usedpool(poolp pool)
 {
-    poolp pool;
-    block *lastfree;
-    poolp next, prev;
-    uint size;
+    assert(pool->ref.count > 0);            /* else the pool is empty */
 
-    assert(p != NULL);
+    uint size = pool->szidx;
+    poolp next = usedpools[size + size];
+    poolp prev = next->prevpool;
 
-#ifdef WITH_VALGRIND
-    if (UNLIKELY(running_on_valgrind > 0)) {
-        return 0;
-    }
-#endif
+    /* insert pool before next:   prev <-> pool <-> next */
+    pool->nextpool = next;
+    pool->prevpool = prev;
+    next->prevpool = pool;
+    prev->nextpool = pool;
+}
 
-    pool = POOL_ADDR(p);
-    if (!address_in_range(p, pool)) {
-        return 0;
-    }
-    /* We allocated this address. */
-
-    /* Link p to the start of the pool's freeblock list.  Since
-     * the pool had at least the p block outstanding, the pool
-     * wasn't empty (so it's already in a usedpools[] list, or
-     * was full and is in no list -- it's not in the freeblocks
-     * list in any case).
-     */
-    assert(pool->ref.count > 0);            /* else it was empty */
-    *(block **)p = lastfree = pool->freeblock;
-    pool->freeblock = (block *)p;
-    if (!lastfree) {
-        /* Pool was full, so doesn't currently live in any list:
-         * link it to the front of the appropriate usedpools[] list.
-         * This mimics LRU pool usage for new allocations and
-         * targets optimal filling when several pools contain
-         * blocks of the same size class.
-         */
-        --pool->ref.count;
-        assert(pool->ref.count > 0);            /* else the pool is empty */
-        size = pool->szidx;
-        next = usedpools[size + size];
-        prev = next->prevpool;
-
-        /* insert pool before next:   prev <-> pool <-> next */
-        pool->nextpool = next;
-        pool->prevpool = prev;
-        next->prevpool = pool;
-        prev->nextpool = pool;
-        goto success;
-    }
-
-    struct arena_object* ao;
-    uint nf;  /* ao->nfreepools */
-
-    /* freeblock wasn't NULL, so the pool wasn't full,
-     * and the pool is in a usedpools[] list.
-     */
-    if (--pool->ref.count != 0) {
-        /* pool isn't empty:  leave it in usedpools */
-        goto success;
-    }
-    /* Pool is now empty:  unlink from usedpools, and
-     * link to the front of freepools.  This ensures that
-     * previously freed pools will be allocated later
-     * (being not referenced, they are perhaps paged out).
-     */
-    next = pool->nextpool;
-    prev = pool->prevpool;
+static void
+insert_to_freepool(poolp pool)
+{
+    poolp next = pool->nextpool;
+    poolp prev = pool->prevpool;
     next->prevpool = prev;
     prev->nextpool = next;
 
     /* Link the pool to freepools.  This is a singly-linked
      * list, and pool->prevpool isn't used there.
      */
-    ao = &arenas[pool->arenaindex];
+    struct arena_object *ao = &arenas[pool->arenaindex];
     pool->nextpool = ao->freepools;
     ao->freepools = pool;
-    nf = ao->nfreepools;
+    uint nf = ao->nfreepools;
     /* If this is the rightmost arena with this number of free pools,
      * nfp2lasta[nf] needs to change.  Caution:  if nf is 0, there
      * are no arenas in usable_arenas with that value.
@@ -1756,7 +1721,12 @@
     /* All the rest is arena management.  We just freed
      * a pool, and there are 4 cases for arena mgmt:
      * 1. If all the pools are free, return the arena to
-     *    the system free().
+     *    the system free().  Except if this is the last
+     *    arena in the list, keep it to avoid thrashing:
+     *    keeping one wholly free arena in the list avoids
+     *    pathological cases where a simple loop would
+     *    otherwise provoke needing to allocate and free an
+     *    arena on every iteration.  See bpo-37257.
      * 2. If this is the only free pool in the arena,
      *    add the arena back to the `usable_arenas` list.
      * 3. If the "next" arena has a smaller count of free
@@ -1765,7 +1735,7 @@
      *    nfreepools.
      * 4. Else there's nothing more to do.
      */
-    if (nf == ao->ntotalpools) {
+    if (nf == ao->ntotalpools && ao->nextarena != NULL) {
         /* Case 1.  First unlink ao from usable_arenas.
          */
         assert(ao->prevarena == NULL ||
@@ -1804,7 +1774,7 @@
         ao->address = 0;                        /* mark unassociated */
         --narenas_currently_allocated;
 
-        goto success;
+        return;
     }
 
     if (nf == 1) {
@@ -1823,7 +1793,7 @@
             nfp2lasta[1] = ao;
         }
 
-        goto success;
+        return;
     }
 
     /* If this arena is now out of order, we need to keep
@@ -1840,7 +1810,7 @@
     /* If this was the rightmost of the old size, it remains in place. */
     if (ao == lastnf) {
         /* Case 4.  Nothing to do. */
-        goto success;
+        return;
     }
     /* If ao were the only arena in the list, the last block would have
      * gotten us out.
@@ -1876,10 +1846,65 @@
     assert(ao->nextarena == NULL || ao->nextarena->prevarena == ao);
     assert((usable_arenas == ao && ao->prevarena == NULL)
            || ao->prevarena->nextarena == ao);
+}
 
-    goto success;
+/* Free a memory block allocated by pymalloc_alloc().
+   Return 1 if it was freed.
+   Return 0 if the block was not allocated by pymalloc_alloc(). */
+static inline int
+pymalloc_free(void *ctx, void *p)
+{
+    assert(p != NULL);
 
-success:
+#ifdef WITH_VALGRIND
+    if (UNLIKELY(running_on_valgrind > 0)) {
+        return 0;
+    }
+#endif
+
+    poolp pool = POOL_ADDR(p);
+    if (UNLIKELY(!address_in_range(p, pool))) {
+        return 0;
+    }
+    /* We allocated this address. */
+
+    /* Link p to the start of the pool's freeblock list.  Since
+     * the pool had at least the p block outstanding, the pool
+     * wasn't empty (so it's already in a usedpools[] list, or
+     * was full and is in no list -- it's not in the freeblocks
+     * list in any case).
+     */
+    assert(pool->ref.count > 0);            /* else it was empty */
+    block *lastfree = pool->freeblock;
+    *(block **)p = lastfree;
+    pool->freeblock = (block *)p;
+    pool->ref.count--;
+
+    if (UNLIKELY(lastfree == NULL)) {
+        /* Pool was full, so doesn't currently live in any list:
+         * link it to the front of the appropriate usedpools[] list.
+         * This mimics LRU pool usage for new allocations and
+         * targets optimal filling when several pools contain
+         * blocks of the same size class.
+         */
+        insert_to_usedpool(pool);
+        return 1;
+    }
+
+    /* freeblock wasn't NULL, so the pool wasn't full,
+     * and the pool is in a usedpools[] list.
+     */
+    if (LIKELY(pool->ref.count != 0)) {
+        /* pool isn't empty:  leave it in usedpools */
+        return 1;
+    }
+
+    /* Pool is now empty:  unlink from usedpools, and
+     * link to the front of freepools.  This ensures that
+     * previously freed pools will be allocated later
+     * (being not referenced, they are perhaps paged out).
+     */
+    insert_to_freepool(pool);
     return 1;
 }
 
@@ -1892,10 +1917,10 @@
         return;
     }
 
-    _Py_AllocatedBlocks--;
-    if (!pymalloc_free(ctx, p)) {
+    if (UNLIKELY(!pymalloc_free(ctx, p))) {
         /* pymalloc didn't allocate this address */
         PyMem_RawFree(p);
+        raw_allocated_blocks--;
     }
 }
 
@@ -2180,7 +2205,7 @@
     uint8_t *q = (uint8_t *)p - 2*SST;  /* address returned from malloc */
     size_t nbytes;
 
-    _PyMem_DebugCheckAddress(api->api_id, p);
+    _PyMem_DebugCheckAddress(__func__, api->api_id, p);
     nbytes = read_size_t(q);
     nbytes += PYMEM_DEBUG_EXTRA_BYTES;
     memset(q, PYMEM_DEADBYTE, nbytes);
@@ -2205,7 +2230,7 @@
 #define ERASED_SIZE 64
     uint8_t save[2*ERASED_SIZE];  /* A copy of erased bytes. */
 
-    _PyMem_DebugCheckAddress(api->api_id, p);
+    _PyMem_DebugCheckAddress(__func__, api->api_id, p);
 
     data = (uint8_t *)p;
     head = data - 2*SST;
@@ -2288,25 +2313,27 @@
     return data;
 }
 
-static void
-_PyMem_DebugCheckGIL(void)
+static inline void
+_PyMem_DebugCheckGIL(const char *func)
 {
-    if (!PyGILState_Check())
-        Py_FatalError("Python memory allocator called "
-                      "without holding the GIL");
+    if (!PyGILState_Check()) {
+        _Py_FatalErrorFunc(func,
+                           "Python memory allocator called "
+                           "without holding the GIL");
+    }
 }
 
 static void *
 _PyMem_DebugMalloc(void *ctx, size_t nbytes)
 {
-    _PyMem_DebugCheckGIL();
+    _PyMem_DebugCheckGIL(__func__);
     return _PyMem_DebugRawMalloc(ctx, nbytes);
 }
 
 static void *
 _PyMem_DebugCalloc(void *ctx, size_t nelem, size_t elsize)
 {
-    _PyMem_DebugCheckGIL();
+    _PyMem_DebugCheckGIL(__func__);
     return _PyMem_DebugRawCalloc(ctx, nelem, elsize);
 }
 
@@ -2314,7 +2341,7 @@
 static void
 _PyMem_DebugFree(void *ctx, void *ptr)
 {
-    _PyMem_DebugCheckGIL();
+    _PyMem_DebugCheckGIL(__func__);
     _PyMem_DebugRawFree(ctx, ptr);
 }
 
@@ -2322,7 +2349,7 @@
 static void *
 _PyMem_DebugRealloc(void *ctx, void *ptr, size_t nbytes)
 {
-    _PyMem_DebugCheckGIL();
+    _PyMem_DebugCheckGIL(__func__);
     return _PyMem_DebugRawRealloc(ctx, ptr, nbytes);
 }
 
@@ -2332,28 +2359,24 @@
  * The API id, is also checked.
  */
 static void
-_PyMem_DebugCheckAddress(char api, const void *p)
+_PyMem_DebugCheckAddress(const char *func, char api, const void *p)
 {
+    assert(p != NULL);
+
     const uint8_t *q = (const uint8_t *)p;
-    char msgbuf[64];
-    const char *msg;
     size_t nbytes;
     const uint8_t *tail;
     int i;
     char id;
 
-    if (p == NULL) {
-        msg = "didn't expect a NULL pointer";
-        goto error;
-    }
-
     /* Check the API id */
     id = (char)q[-SST];
     if (id != api) {
-        msg = msgbuf;
-        snprintf(msgbuf, sizeof(msgbuf), "bad ID: Allocated using API '%c', verified using API '%c'", id, api);
-        msgbuf[sizeof(msgbuf)-1] = 0;
-        goto error;
+        _PyObject_DebugDumpAddress(p);
+        _Py_FatalErrorFormat(func,
+                             "bad ID: Allocated using API '%c', "
+                             "verified using API '%c'",
+                             id, api);
     }
 
     /* Check the stuff at the start of p first:  if there's underwrite
@@ -2362,8 +2385,8 @@
      */
     for (i = SST-1; i >= 1; --i) {
         if (*(q-i) != PYMEM_FORBIDDENBYTE) {
-            msg = "bad leading pad byte";
-            goto error;
+            _PyObject_DebugDumpAddress(p);
+            _Py_FatalErrorFunc(func, "bad leading pad byte");
         }
     }
 
@@ -2371,16 +2394,10 @@
     tail = q + nbytes;
     for (i = 0; i < SST; ++i) {
         if (tail[i] != PYMEM_FORBIDDENBYTE) {
-            msg = "bad trailing pad byte";
-            goto error;
+            _PyObject_DebugDumpAddress(p);
+            _Py_FatalErrorFunc(func, "bad trailing pad byte");
         }
     }
-
-    return;
-
-error:
-    _PyObject_DebugDumpAddress(p);
-    Py_FatalError(msg);
 }
 
 /* Display info to stderr about the memory block at p. */
diff --git a/Objects/odictobject.c b/Objects/odictobject.c
index ac0da9b..d5bf499 100644
--- a/Objects/odictobject.c
+++ b/Objects/odictobject.c
@@ -466,8 +466,7 @@
 
 #include "Python.h"
 #include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include <stddef.h>               // offsetof()
 #include "dict-common.h"
 #include <stddef.h>
 
@@ -526,6 +525,8 @@
 #define _odict_FOREACH(od, node) \
     for (node = _odict_FIRST(od); node != NULL; node = _odictnode_NEXT(node))
 
+_Py_IDENTIFIER(items);
+
 /* Return the index into the hash table, regardless of a valid node. */
 static Py_ssize_t
 _odict_get_index_raw(PyODictObject *od, PyObject *key, Py_hash_t hash)
@@ -850,6 +851,57 @@
 
 
 /* ----------------------------------------------
+ * OrderedDict number methods
+ */
+
+static int mutablemapping_update_arg(PyObject*, PyObject*);
+
+static PyObject *
+odict_or(PyObject *left, PyObject *right)
+{
+    PyTypeObject *type;
+    PyObject *other;
+    if (PyODict_Check(left)) {
+        type = Py_TYPE(left);
+        other = right;
+    }
+    else {
+        type = Py_TYPE(right);
+        other = left;
+    }
+    if (!PyDict_Check(other)) {
+        Py_RETURN_NOTIMPLEMENTED;
+    }
+    PyObject *new = PyObject_CallOneArg((PyObject*)type, left);
+    if (!new) {
+        return NULL;
+    }
+    if (mutablemapping_update_arg(new, right) < 0) {
+        Py_DECREF(new);
+        return NULL;
+    }
+    return new;
+}
+
+static PyObject *
+odict_inplace_or(PyObject *self, PyObject *other)
+{
+    if (mutablemapping_update_arg(self, other) < 0) {
+        return NULL;
+    }
+    Py_INCREF(self);
+    return self;
+}
+
+/* tp_as_number */
+
+static PyNumberMethods odict_as_number = {
+    .nb_or = odict_or,
+    .nb_inplace_or = odict_inplace_or,
+};
+
+
+/* ----------------------------------------------
  * OrderedDict methods
  */
 
@@ -896,7 +948,6 @@
 odict_reduce(register PyODictObject *od, PyObject *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(__dict__);
-    _Py_IDENTIFIER(items);
     PyObject *dict = NULL, *result = NULL;
     PyObject *items_iter, *items, *args = NULL;
 
@@ -920,7 +971,7 @@
     if (args == NULL)
         goto Done;
 
-    items = _PyObject_CallMethodIdObjArgs((PyObject *)od, &PyId_items, NULL);
+    items = _PyObject_CallMethodIdNoArgs((PyObject *)od, &PyId_items);
     if (items == NULL)
         goto Done;
 
@@ -1375,7 +1426,6 @@
 odict_repr(PyODictObject *self)
 {
     int i;
-    _Py_IDENTIFIER(items);
     PyObject *pieces = NULL, *result = NULL;
 
     if (PyODict_SIZE(self) == 0)
@@ -1417,12 +1467,13 @@
             }
             count++;
         }
-        if (count < PyList_GET_SIZE(pieces))
-            Py_SIZE(pieces) = count;
+        if (count < PyList_GET_SIZE(pieces)) {
+            Py_SET_SIZE(pieces, count);
+        }
     }
     else {
-        PyObject *items = _PyObject_CallMethodIdObjArgs((PyObject *)self,
-                                                        &PyId_items, NULL);
+        PyObject *items = _PyObject_CallMethodIdNoArgs((PyObject *)self,
+                                                       &PyId_items);
         if (items == NULL)
             goto Done;
         pieces = PySequence_List(items);
@@ -1554,7 +1605,7 @@
     0,                                          /* tp_setattr */
     0,                                          /* tp_as_async */
     (reprfunc)odict_repr,                       /* tp_repr */
-    0,                                          /* tp_as_number */
+    &odict_as_number,                           /* tp_as_number */
     0,                                          /* tp_as_sequence */
     &odict_as_mapping,                          /* tp_as_mapping */
     0,                                          /* tp_hash */
@@ -2188,17 +2239,77 @@
         return 0;
 }
 
+static int
+mutablemapping_update_arg(PyObject *self, PyObject *arg)
+{
+    int res = 0;
+    if (PyDict_CheckExact(arg)) {
+        PyObject *items = PyDict_Items(arg);
+        if (items == NULL) {
+            return -1;
+        }
+        res = mutablemapping_add_pairs(self, items);
+        Py_DECREF(items);
+        return res;
+    }
+    _Py_IDENTIFIER(keys);
+    PyObject *func;
+    if (_PyObject_LookupAttrId(arg, &PyId_keys, &func) < 0) {
+        return -1;
+    }
+    if (func != NULL) {
+        PyObject *keys = _PyObject_CallNoArg(func);
+        Py_DECREF(func);
+        if (keys == NULL) {
+            return -1;
+        }
+        PyObject *iterator = PyObject_GetIter(keys);
+        Py_DECREF(keys);
+        if (iterator == NULL) {
+            return -1;
+        }
+        PyObject *key;
+        while (res == 0 && (key = PyIter_Next(iterator))) {
+            PyObject *value = PyObject_GetItem(arg, key);
+            if (value != NULL) {
+                res = PyObject_SetItem(self, key, value);
+                Py_DECREF(value);
+            }
+            else {
+                res = -1;
+            }
+            Py_DECREF(key);
+        }
+        Py_DECREF(iterator);
+        if (res != 0 || PyErr_Occurred()) {
+            return -1;
+        }
+        return 0;
+    }
+    if (_PyObject_LookupAttrId(arg, &PyId_items, &func) < 0) {
+        return -1;
+    }
+    if (func != NULL) {
+        PyObject *items = _PyObject_CallNoArg(func);
+        Py_DECREF(func);
+        if (items == NULL) {
+            return -1;
+        }
+        res = mutablemapping_add_pairs(self, items);
+        Py_DECREF(items);
+        return res;
+    }
+    res = mutablemapping_add_pairs(self, arg);
+    return res;
+}
+
 static PyObject *
 mutablemapping_update(PyObject *self, PyObject *args, PyObject *kwargs)
 {
-    int res = 0;
-    Py_ssize_t len;
-    _Py_IDENTIFIER(items);
-    _Py_IDENTIFIER(keys);
-
+    int res;
     /* first handle args, if any */
     assert(args == NULL || PyTuple_Check(args));
-    len = (args != NULL) ? PyTuple_GET_SIZE(args) : 0;
+    Py_ssize_t len = (args != NULL) ? PyTuple_GET_SIZE(args) : 0;
     if (len > 1) {
         const char *msg = "update() takes at most 1 positional argument (%zd given)";
         PyErr_Format(PyExc_TypeError, msg, len);
@@ -2206,83 +2317,16 @@
     }
 
     if (len) {
-        PyObject *func;
         PyObject *other = PyTuple_GET_ITEM(args, 0);  /* borrowed reference */
         assert(other != NULL);
         Py_INCREF(other);
-        if (PyDict_CheckExact(other)) {
-            PyObject *items = PyDict_Items(other);
-            Py_DECREF(other);
-            if (items == NULL)
-                return NULL;
-            res = mutablemapping_add_pairs(self, items);
-            Py_DECREF(items);
-            if (res == -1)
-                return NULL;
-            goto handle_kwargs;
-        }
-
-        if (_PyObject_LookupAttrId(other, &PyId_keys, &func) < 0) {
-            Py_DECREF(other);
-            return NULL;
-        }
-        if (func != NULL) {
-            PyObject *keys, *iterator, *key;
-            keys = _PyObject_CallNoArg(func);
-            Py_DECREF(func);
-            if (keys == NULL) {
-                Py_DECREF(other);
-                return NULL;
-            }
-            iterator = PyObject_GetIter(keys);
-            Py_DECREF(keys);
-            if (iterator == NULL) {
-                Py_DECREF(other);
-                return NULL;
-            }
-            while (res == 0 && (key = PyIter_Next(iterator))) {
-                PyObject *value = PyObject_GetItem(other, key);
-                if (value != NULL) {
-                    res = PyObject_SetItem(self, key, value);
-                    Py_DECREF(value);
-                }
-                else {
-                    res = -1;
-                }
-                Py_DECREF(key);
-            }
-            Py_DECREF(other);
-            Py_DECREF(iterator);
-            if (res != 0 || PyErr_Occurred())
-                return NULL;
-            goto handle_kwargs;
-        }
-
-        if (_PyObject_LookupAttrId(other, &PyId_items, &func) < 0) {
-            Py_DECREF(other);
-            return NULL;
-        }
-        if (func != NULL) {
-            PyObject *items;
-            Py_DECREF(other);
-            items = _PyObject_CallNoArg(func);
-            Py_DECREF(func);
-            if (items == NULL)
-                return NULL;
-            res = mutablemapping_add_pairs(self, items);
-            Py_DECREF(items);
-            if (res == -1)
-                return NULL;
-            goto handle_kwargs;
-        }
-
-        res = mutablemapping_add_pairs(self, other);
+        res = mutablemapping_update_arg(self, other);
         Py_DECREF(other);
-        if (res != 0)
+        if (res < 0) {
             return NULL;
+        }
     }
 
-  handle_kwargs:
     /* now handle kwargs */
     assert(kwargs == NULL || PyDict_Check(kwargs));
     if (kwargs != NULL && PyDict_GET_SIZE(kwargs)) {
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 239ace6..751dbb9 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -1,7 +1,9 @@
 /* Range object implementation */
 
 #include "Python.h"
-#include "structmember.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
+#include "pycore_tupleobject.h"
+#include "structmember.h"         // PyMemberDef
 
 /* Support objects whose length is > PY_SSIZE_T_MAX.
 
@@ -18,6 +20,8 @@
     PyObject *length;
 } rangeobject;
 
+_Py_IDENTIFIER(iter);
+
 /* Helper function for validating step.  Always returns a new reference or
    NULL on error.
 */
@@ -69,50 +73,57 @@
    range(0, 5, -1)
 */
 static PyObject *
-range_new(PyTypeObject *type, PyObject *args, PyObject *kw)
+range_from_array(PyTypeObject *type, PyObject *const *args, Py_ssize_t num_args)
 {
     rangeobject *obj;
     PyObject *start = NULL, *stop = NULL, *step = NULL;
 
-    if (!_PyArg_NoKeywords("range", kw))
-        return NULL;
-
-    if (PyTuple_Size(args) <= 1) {
-        if (!PyArg_UnpackTuple(args, "range", 1, 1, &stop))
+    switch (num_args) {
+        case 3:
+            step = args[2];
+            /* fallthrough */
+        case 2:
+            /* Convert borrowed refs to owned refs */
+            start = PyNumber_Index(args[0]);
+            if (!start) {
+                return NULL;
+            }
+            stop = PyNumber_Index(args[1]);
+            if (!stop) {
+                Py_DECREF(start);
+                return NULL;
+            }
+            step = validate_step(step);  /* Caution, this can clear exceptions */
+            if (!step) {
+                Py_DECREF(start);
+                Py_DECREF(stop);
+                return NULL;
+            }
+            break;
+        case 1:
+            stop = PyNumber_Index(args[0]);
+            if (!stop) {
+                return NULL;
+            }
+            Py_INCREF(_PyLong_Zero);
+            start = _PyLong_Zero;
+            Py_INCREF(_PyLong_One);
+            step = _PyLong_One;
+            break;
+        case 0:
+            PyErr_SetString(PyExc_TypeError,
+                            "range expected at least 1 argument, got 0");
             return NULL;
-        stop = PyNumber_Index(stop);
-        if (!stop)
+        default:
+            PyErr_Format(PyExc_TypeError,
+                         "range expected at most 3 arguments, got %zd",
+                         num_args);
             return NULL;
-        Py_INCREF(_PyLong_Zero);
-        start = _PyLong_Zero;
-        Py_INCREF(_PyLong_One);
-        step = _PyLong_One;
     }
-    else {
-        if (!PyArg_UnpackTuple(args, "range", 2, 3,
-                               &start, &stop, &step))
-            return NULL;
-
-        /* Convert borrowed refs to owned refs */
-        start = PyNumber_Index(start);
-        if (!start)
-            return NULL;
-        stop = PyNumber_Index(stop);
-        if (!stop) {
-            Py_DECREF(start);
-            return NULL;
-        }
-        step = validate_step(step);    /* Caution, this can clear exceptions */
-        if (!step) {
-            Py_DECREF(start);
-            Py_DECREF(stop);
-            return NULL;
-        }
-    }
-
     obj = make_range_object(type, start, stop, step);
-    if (obj != NULL)
+    if (obj != NULL) {
         return (PyObject *) obj;
+    }
 
     /* Failed to create object, release attributes */
     Py_DECREF(start);
@@ -121,6 +132,27 @@
     return NULL;
 }
 
+static PyObject *
+range_new(PyTypeObject *type, PyObject *args, PyObject *kw)
+{
+    if (!_PyArg_NoKeywords("range", kw))
+        return NULL;
+
+    return range_from_array(type, _PyTuple_ITEMS(args), PyTuple_GET_SIZE(args));
+}
+
+
+static PyObject *
+range_vectorcall(PyTypeObject *type, PyObject *const *args,
+                 size_t nargsf, PyObject *kwnames)
+{
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (!_PyArg_NoKwnames("range", kwnames)) {
+        return NULL;
+    }
+    return range_from_array(type, args, nargs);
+}
+
 PyDoc_STRVAR(range_doc,
 "range(stop) -> range object\n\
 range(start, stop[, step]) -> range object\n\
@@ -600,7 +632,7 @@
 static PyObject *
 range_subscript(rangeobject* self, PyObject* item)
 {
-    if (PyIndex_Check(item)) {
+    if (_PyIndex_Check(item)) {
         PyObject *i, *result;
         i = PyNumber_Index(item);
         if (!i)
@@ -614,7 +646,7 @@
     }
     PyErr_Format(PyExc_TypeError,
                  "range indices must be integers or slices, not %.200s",
-                 item->ob_type->tp_name);
+                 Py_TYPE(item)->tp_name);
     return NULL;
 }
 
@@ -702,6 +734,7 @@
         0,                      /* tp_init */
         0,                      /* tp_alloc */
         range_new,              /* tp_new */
+        .tp_vectorcall = (vectorcallfunc)range_vectorcall
 };
 
 /*********************** range Iterator **************************/
@@ -742,7 +775,6 @@
 static PyObject *
 rangeiter_reduce(rangeiterobject *r, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     PyObject *start=NULL, *stop=NULL, *step=NULL;
     PyObject *range;
 
@@ -900,7 +932,6 @@
 static PyObject *
 longrangeiter_reduce(longrangeiterobject *r, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     PyObject *product, *stop=NULL;
     PyObject *range;
 
diff --git a/Objects/setobject.c b/Objects/setobject.c
index f8ae0c0..76b1944 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -32,9 +32,8 @@
 */
 
 #include "Python.h"
-#include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_object.h"        // _PyObject_GC_UNTRACK()
+#include <stddef.h>               // offsetof()
 
 /* Object used as dummy key to fill deleted entries */
 static PyObject _dummy_struct;
@@ -58,77 +57,43 @@
 {
     setentry *table;
     setentry *entry;
-    size_t perturb;
+    size_t perturb = hash;
     size_t mask = so->mask;
     size_t i = (size_t)hash & mask; /* Unsigned for defined overflow behavior */
-    size_t j;
+    int probes;
     int cmp;
 
-    entry = &so->table[i];
-    if (entry->key == NULL)
-        return entry;
-
-    perturb = hash;
-
     while (1) {
-        if (entry->hash == hash) {
-            PyObject *startkey = entry->key;
-            /* startkey cannot be a dummy because the dummy hash field is -1 */
-            assert(startkey != dummy);
-            if (startkey == key)
+        entry = &so->table[i];
+        probes = (i + LINEAR_PROBES <= mask) ? LINEAR_PROBES: 0;
+        do {
+            if (entry->hash == 0 && entry->key == NULL)
                 return entry;
-            if (PyUnicode_CheckExact(startkey)
-                && PyUnicode_CheckExact(key)
-                && _PyUnicode_EQ(startkey, key))
-                return entry;
-            table = so->table;
-            Py_INCREF(startkey);
-            cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
-            Py_DECREF(startkey);
-            if (cmp < 0)                                          /* unlikely */
-                return NULL;
-            if (table != so->table || entry->key != startkey)     /* unlikely */
-                return set_lookkey(so, key, hash);
-            if (cmp > 0)                                          /* likely */
-                return entry;
-            mask = so->mask;                 /* help avoid a register spill */
-        }
-
-        if (i + LINEAR_PROBES <= mask) {
-            for (j = 0 ; j < LINEAR_PROBES ; j++) {
-                entry++;
-                if (entry->hash == 0 && entry->key == NULL)
+            if (entry->hash == hash) {
+                PyObject *startkey = entry->key;
+                assert(startkey != dummy);
+                if (startkey == key)
                     return entry;
-                if (entry->hash == hash) {
-                    PyObject *startkey = entry->key;
-                    assert(startkey != dummy);
-                    if (startkey == key)
-                        return entry;
-                    if (PyUnicode_CheckExact(startkey)
-                        && PyUnicode_CheckExact(key)
-                        && _PyUnicode_EQ(startkey, key))
-                        return entry;
-                    table = so->table;
-                    Py_INCREF(startkey);
-                    cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
-                    Py_DECREF(startkey);
-                    if (cmp < 0)
-                        return NULL;
-                    if (table != so->table || entry->key != startkey)
-                        return set_lookkey(so, key, hash);
-                    if (cmp > 0)
-                        return entry;
-                    mask = so->mask;
-                }
+                if (PyUnicode_CheckExact(startkey)
+                    && PyUnicode_CheckExact(key)
+                    && _PyUnicode_EQ(startkey, key))
+                    return entry;
+                table = so->table;
+                Py_INCREF(startkey);
+                cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
+                Py_DECREF(startkey);
+                if (cmp < 0)
+                    return NULL;
+                if (table != so->table || entry->key != startkey)
+                    return set_lookkey(so, key, hash);
+                if (cmp > 0)
+                    return entry;
+                mask = so->mask;
             }
-        }
-
+            entry++;
+        } while (probes--);
         perturb >>= PERTURB_SHIFT;
         i = (i * 5 + 1 + perturb) & mask;
-
-        entry = &so->table[i];
-        if (entry->key == NULL)
-            return entry;
     }
 }
 
@@ -138,12 +103,11 @@
 set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
 {
     setentry *table;
-    setentry *freeslot;
     setentry *entry;
     size_t perturb;
     size_t mask;
     size_t i;                       /* Unsigned for defined overflow behavior */
-    size_t j;
+    int probes;
     int cmp;
 
     /* Pre-increment is necessary to prevent arbitrary code in the rich
@@ -154,90 +118,41 @@
 
     mask = so->mask;
     i = (size_t)hash & mask;
-
-    entry = &so->table[i];
-    if (entry->key == NULL)
-        goto found_unused;
-
-    freeslot = NULL;
     perturb = hash;
 
     while (1) {
-        if (entry->hash == hash) {
-            PyObject *startkey = entry->key;
-            /* startkey cannot be a dummy because the dummy hash field is -1 */
-            assert(startkey != dummy);
-            if (startkey == key)
-                goto found_active;
-            if (PyUnicode_CheckExact(startkey)
-                && PyUnicode_CheckExact(key)
-                && _PyUnicode_EQ(startkey, key))
-                goto found_active;
-            table = so->table;
-            Py_INCREF(startkey);
-            cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
-            Py_DECREF(startkey);
-            if (cmp > 0)                                          /* likely */
-                goto found_active;
-            if (cmp < 0)
-                goto comparison_error;
-            /* Continuing the search from the current entry only makes
-               sense if the table and entry are unchanged; otherwise,
-               we have to restart from the beginning */
-            if (table != so->table || entry->key != startkey)
-                goto restart;
-            mask = so->mask;                 /* help avoid a register spill */
-        }
-        else if (entry->hash == -1)
-            freeslot = entry;
-
-        if (i + LINEAR_PROBES <= mask) {
-            for (j = 0 ; j < LINEAR_PROBES ; j++) {
-                entry++;
-                if (entry->hash == 0 && entry->key == NULL)
-                    goto found_unused_or_dummy;
-                if (entry->hash == hash) {
-                    PyObject *startkey = entry->key;
-                    assert(startkey != dummy);
-                    if (startkey == key)
-                        goto found_active;
-                    if (PyUnicode_CheckExact(startkey)
-                        && PyUnicode_CheckExact(key)
-                        && _PyUnicode_EQ(startkey, key))
-                        goto found_active;
-                    table = so->table;
-                    Py_INCREF(startkey);
-                    cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
-                    Py_DECREF(startkey);
-                    if (cmp > 0)
-                        goto found_active;
-                    if (cmp < 0)
-                        goto comparison_error;
-                    if (table != so->table || entry->key != startkey)
-                        goto restart;
-                    mask = so->mask;
-                }
-                else if (entry->hash == -1)
-                    freeslot = entry;
+        entry = &so->table[i];
+        probes = (i + LINEAR_PROBES <= mask) ? LINEAR_PROBES: 0;
+        do {
+            if (entry->hash == 0 && entry->key == NULL)
+                goto found_unused;
+            if (entry->hash == hash) {
+                PyObject *startkey = entry->key;
+                assert(startkey != dummy);
+                if (startkey == key)
+                    goto found_active;
+                if (PyUnicode_CheckExact(startkey)
+                    && PyUnicode_CheckExact(key)
+                    && _PyUnicode_EQ(startkey, key))
+                    goto found_active;
+                table = so->table;
+                Py_INCREF(startkey);
+                cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
+                Py_DECREF(startkey);
+                if (cmp > 0)
+                    goto found_active;
+                if (cmp < 0)
+                    goto comparison_error;
+                if (table != so->table || entry->key != startkey)
+                    goto restart;
+                mask = so->mask;
             }
-        }
-
+            entry++;
+        } while (probes--);
         perturb >>= PERTURB_SHIFT;
         i = (i * 5 + 1 + perturb) & mask;
-
-        entry = &so->table[i];
-        if (entry->key == NULL)
-            goto found_unused_or_dummy;
     }
 
-  found_unused_or_dummy:
-    if (freeslot == NULL)
-        goto found_unused;
-    so->used++;
-    freeslot->key = key;
-    freeslot->hash = hash;
-    return 0;
-
   found_unused:
     so->fill++;
     so->used++;
@@ -258,8 +173,7 @@
 
 /*
 Internal routine used by set_table_resize() to insert an item which is
-known to be absent from the set.  This routine also assumes that
-the set contains no deleted entries.  Besides the performance benefit,
+known to be absent from the set.  Besides the performance benefit,
 there is also safety benefit since using set_add_entry() risks making
 a callback in the middle of a set_table_resize(), see issue 1456209.
 The caller is responsible for updating the key's reference count and
@@ -608,7 +522,7 @@
         goto done;
     listrepr = tmp;
 
-    if (Py_TYPE(so) != &PySet_Type)
+    if (!Py_IS_TYPE(so, &PySet_Type))
         result = PyUnicode_FromFormat("%s({%U})",
                                       Py_TYPE(so)->tp_name,
                                       listrepr);
@@ -1024,6 +938,7 @@
 static PyObject *
 make_new_set(PyTypeObject *type, PyObject *iterable)
 {
+    assert(PyType_Check(type));
     PySetObject *so;
 
     so = (PySetObject *)type->tp_alloc(type, 0);
@@ -1064,38 +979,68 @@
 static PyObject *emptyfrozenset = NULL;
 
 static PyObject *
-frozenset_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+make_new_frozenset(PyTypeObject *type, PyObject *iterable)
 {
-    PyObject *iterable = NULL, *result;
-
-    if (type == &PyFrozenSet_Type && !_PyArg_NoKeywords("frozenset", kwds))
-        return NULL;
-
-    if (!PyArg_UnpackTuple(args, type->tp_name, 0, 1, &iterable))
-        return NULL;
-
-    if (type != &PyFrozenSet_Type)
+    if (type != &PyFrozenSet_Type) {
         return make_new_set(type, iterable);
+    }
 
     if (iterable != NULL) {
-        /* frozenset(f) is idempotent */
         if (PyFrozenSet_CheckExact(iterable)) {
+            /* frozenset(f) is idempotent */
             Py_INCREF(iterable);
             return iterable;
         }
-        result = make_new_set(type, iterable);
-        if (result == NULL || PySet_GET_SIZE(result))
-            return result;
-        Py_DECREF(result);
+        PyObject *res = make_new_set((PyTypeObject *)type, iterable);
+        if (res == NULL || PySet_GET_SIZE(res) != 0) {
+            return res;
+        }
+        /* If the created frozenset is empty, return the empty frozenset singleton instead */
+        Py_DECREF(res);
     }
-    /* The empty frozenset is a singleton */
-    if (emptyfrozenset == NULL)
-        emptyfrozenset = make_new_set(type, NULL);
+
+    // The empty frozenset is a singleton
+    if (emptyfrozenset == NULL) {
+        emptyfrozenset = make_new_set((PyTypeObject *)type, NULL);
+    }
     Py_XINCREF(emptyfrozenset);
     return emptyfrozenset;
 }
 
 static PyObject *
+frozenset_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *iterable = NULL;
+
+    if (type == &PyFrozenSet_Type && !_PyArg_NoKeywords("frozenset", kwds)) {
+        return NULL;
+    }
+
+    if (!PyArg_UnpackTuple(args, type->tp_name, 0, 1, &iterable)) {
+        return NULL;
+    }
+
+    return make_new_frozenset(type, iterable);
+}
+
+static PyObject *
+frozenset_vectorcall(PyObject *type, PyObject * const*args,
+                     size_t nargsf, PyObject *kwnames)
+{
+    if (!_PyArg_NoKwnames("frozenset", kwnames)) {
+        return NULL;
+    }
+
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (!_PyArg_CheckPositional("frozenset", nargs, 0, 1)) {
+        return NULL;
+    }
+
+    PyObject *iterable = (nargs ? args[0] : NULL);
+    return make_new_frozenset((PyTypeObject *)type, iterable);
+}
+
+static PyObject *
 set_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
     return make_new_set(type, NULL);
@@ -1463,9 +1408,25 @@
         setentry *entry;
         Py_ssize_t pos = 0;
 
-        while (set_next((PySetObject *)other, &pos, &entry))
-            if (set_discard_entry(so, entry->key, entry->hash) < 0)
+        /* Optimization:  When the other set is more than 8 times
+           larger than the base set, replace the other set with
+           interesection of the two sets.
+        */
+        if ((PySet_GET_SIZE(other) >> 3) > PySet_GET_SIZE(so)) {
+            other = set_intersection(so, other);
+            if (other == NULL)
                 return -1;
+        } else {
+            Py_INCREF(other);
+        }
+
+        while (set_next((PySetObject *)other, &pos, &entry))
+            if (set_discard_entry(so, entry->key, entry->hash) < 0) {
+                Py_DECREF(other);
+                return -1;
+            }
+
+        Py_DECREF(other);
     } else {
         PyObject *key, *it;
         it = PyObject_GetIter(other);
@@ -1998,6 +1959,28 @@
     return set_update_internal(self, iterable);
 }
 
+static PyObject*
+set_vectorcall(PyObject *type, PyObject * const*args,
+               size_t nargsf, PyObject *kwnames)
+{
+    assert(PyType_Check(type));
+
+    if (!_PyArg_NoKwnames("set", kwnames)) {
+        return NULL;
+    }
+
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (!_PyArg_CheckPositional("set", nargs, 0, 1)) {
+        return NULL;
+    }
+
+    if (nargs) {
+        return make_new_set((PyTypeObject *)type, args[0]);
+    }
+
+    return make_new_set((PyTypeObject *)type, NULL);
+}
+
 static PySequenceMethods set_as_sequence = {
     set_len,                            /* sq_length */
     0,                                  /* sq_concat */
@@ -2063,6 +2046,7 @@
      union_doc},
     {"update",          (PyCFunction)set_update,        METH_VARARGS,
      update_doc},
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
     {NULL,              NULL}   /* sentinel */
 };
 
@@ -2146,6 +2130,7 @@
     PyType_GenericAlloc,                /* tp_alloc */
     set_new,                            /* tp_new */
     PyObject_GC_Del,                    /* tp_free */
+    .tp_vectorcall = set_vectorcall,
 };
 
 /* frozenset object ********************************************************/
@@ -2174,6 +2159,7 @@
      symmetric_difference_doc},
     {"union",           (PyCFunction)set_union,         METH_VARARGS,
      union_doc},
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
     {NULL,              NULL}   /* sentinel */
 };
 
@@ -2244,6 +2230,7 @@
     PyType_GenericAlloc,                /* tp_alloc */
     frozenset_new,                      /* tp_new */
     PyObject_GC_Del,                    /* tp_free */
+    .tp_vectorcall = frozenset_vectorcall,
 };
 
 
@@ -2312,14 +2299,8 @@
     return set_add_key((PySetObject *)anyset, key);
 }
 
-int
-PySet_ClearFreeList(void)
-{
-    return 0;
-}
-
 void
-PySet_Fini(void)
+_PySet_Fini(void)
 {
     Py_CLEAR(emptyfrozenset);
 }
@@ -2513,7 +2494,7 @@
     return PyUnicode_FromString("<dummy key>");
 }
 
-static void
+static void _Py_NO_RETURN
 dummy_dealloc(PyObject* ignore)
 {
     Py_FatalError("deallocating <dummy key>");
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 7c10eb6..391711f 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -14,10 +14,9 @@
 */
 
 #include "Python.h"
+#include "pycore_abstract.h"      // _PyIndex_Check()
 #include "pycore_object.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 static PyObject *
 ellipsis_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
@@ -100,7 +99,8 @@
  * created and then deleted again
  */
 static PySliceObject *slice_cache = NULL;
-void PySlice_Fini(void)
+
+void _PySlice_Fini(void)
 {
     PySliceObject *obj = slice_cache;
     if (obj != NULL) {
@@ -353,7 +353,7 @@
 static PyObject*
 evaluate_slice_index(PyObject *v)
 {
-    if (PyIndex_Check(v)) {
+    if (_PyIndex_Check(v)) {
         return PyNumber_Index(v);
     }
     else {
diff --git a/Objects/stringlib/asciilib.h b/Objects/stringlib/asciilib.h
index 8f83614..e69a2c0 100644
--- a/Objects/stringlib/asciilib.h
+++ b/Objects/stringlib/asciilib.h
@@ -24,6 +24,3 @@
 
 #define STRINGLIB_TOSTR          PyObject_Str
 #define STRINGLIB_TOASCII        PyObject_ASCII
-
-#define _Py_InsertThousandsGrouping _PyUnicode_ascii_InsertThousandsGrouping
-
diff --git a/Objects/stringlib/codecs.h b/Objects/stringlib/codecs.h
index 269a558..9b2a29b 100644
--- a/Objects/stringlib/codecs.h
+++ b/Objects/stringlib/codecs.h
@@ -4,6 +4,8 @@
 # error "codecs.h is specific to Unicode"
 #endif
 
+#include "pycore_byteswap.h"      // _Py_bswap32()
+
 /* Mask to quickly check whether a C 'long' contains a
    non-ASCII, UTF8-encoded char. */
 #if (SIZEOF_LONG == 8)
@@ -153,7 +155,7 @@
                 /* Decoding UTF-8 sequences in range \xED\xA0\x80-\xED\xBF\xBF
                    will result in surrogates in range D800-DFFF. Surrogates are
                    not valid UTF-8 so they are rejected.
-                   See http://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
+                   See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
                    (table 3-7) and http://www.rfc-editor.org/rfc/rfc3629.txt */
                 goto InvalidContinuation1;
             }
@@ -256,9 +258,10 @@
 /* UTF-8 encoder specialized for a Unicode kind to avoid the slow
    PyUnicode_READ() macro. Delete some parts of the code depending on the kind:
    UCS-1 strings don't need to handle surrogates for example. */
-Py_LOCAL_INLINE(PyObject *)
-STRINGLIB(utf8_encoder)(PyObject *unicode,
-                        STRINGLIB_CHAR *data,
+Py_LOCAL_INLINE(char *)
+STRINGLIB(utf8_encoder)(_PyBytesWriter *writer,
+                        PyObject *unicode,
+                        const STRINGLIB_CHAR *data,
                         Py_ssize_t size,
                         _Py_error_handler error_handler,
                         const char *errors)
@@ -277,17 +280,16 @@
 #else /*  STRINGLIB_SIZEOF_CHAR == 4 */
     const Py_ssize_t max_char_size = 4;
 #endif
-    _PyBytesWriter writer;
 
     assert(size >= 0);
-    _PyBytesWriter_Init(&writer);
-
     if (size > PY_SSIZE_T_MAX / max_char_size) {
         /* integer overflow */
-        return PyErr_NoMemory();
+        PyErr_NoMemory();
+        return NULL;
     }
 
-    p = _PyBytesWriter_Alloc(&writer, size * max_char_size);
+    _PyBytesWriter_Init(writer);
+    p = _PyBytesWriter_Alloc(writer, size * max_char_size);
     if (p == NULL)
         return NULL;
 
@@ -323,7 +325,7 @@
                 endpos++;
 
             /* Only overallocate the buffer if it's not the last write */
-            writer.overallocate = (endpos < size);
+            writer->overallocate = (endpos < size);
 
             switch (error_handler)
             {
@@ -347,8 +349,8 @@
 
             case _Py_ERROR_BACKSLASHREPLACE:
                 /* subtract preallocated bytes */
-                writer.min_size -= max_char_size * (endpos - startpos);
-                p = backslashreplace(&writer, p,
+                writer->min_size -= max_char_size * (endpos - startpos);
+                p = backslashreplace(writer, p,
                                      unicode, startpos, endpos);
                 if (p == NULL)
                     goto error;
@@ -357,8 +359,8 @@
 
             case _Py_ERROR_XMLCHARREFREPLACE:
                 /* subtract preallocated bytes */
-                writer.min_size -= max_char_size * (endpos - startpos);
-                p = xmlcharrefreplace(&writer, p,
+                writer->min_size -= max_char_size * (endpos - startpos);
+                p = xmlcharrefreplace(writer, p,
                                       unicode, startpos, endpos);
                 if (p == NULL)
                     goto error;
@@ -387,10 +389,10 @@
                     goto error;
 
                 /* subtract preallocated bytes */
-                writer.min_size -= max_char_size * (newpos - startpos);
+                writer->min_size -= max_char_size * (newpos - startpos);
 
                 if (PyBytes_Check(rep)) {
-                    p = _PyBytesWriter_WriteBytes(&writer, p,
+                    p = _PyBytesWriter_WriteBytes(writer, p,
                                                   PyBytes_AS_STRING(rep),
                                                   PyBytes_GET_SIZE(rep));
                 }
@@ -406,7 +408,7 @@
                         goto error;
                     }
 
-                    p = _PyBytesWriter_WriteBytes(&writer, p,
+                    p = _PyBytesWriter_WriteBytes(writer, p,
                                                   PyUnicode_DATA(rep),
                                                   PyUnicode_GET_LENGTH(rep));
                 }
@@ -420,7 +422,7 @@
 
             /* If overallocation was disabled, ensure that it was the last
                write. Otherwise, we missed an optimization */
-            assert(writer.overallocate || i == size);
+            assert(writer->overallocate || i == size);
         }
         else
 #if STRINGLIB_SIZEOF_CHAR > 2
@@ -449,14 +451,13 @@
     Py_XDECREF(error_handler_obj);
     Py_XDECREF(exc);
 #endif
-    return _PyBytesWriter_Finish(&writer, p);
+    return p;
 
 #if STRINGLIB_SIZEOF_CHAR > 1
  error:
     Py_XDECREF(rep);
     Py_XDECREF(error_handler_obj);
     Py_XDECREF(exc);
-    _PyBytesWriter_Dealloc(&writer);
     return NULL;
 #endif
 }
@@ -733,24 +734,28 @@
 #endif
 }
 
+static inline uint32_t
+STRINGLIB(SWAB4)(STRINGLIB_CHAR ch)
+{
+    uint32_t word = ch;
 #if STRINGLIB_SIZEOF_CHAR == 1
-# define SWAB4(CH, tmp)  ((CH) << 24) /* high bytes are zero */
+    /* high bytes are zero */
+    return (word << 24);
 #elif STRINGLIB_SIZEOF_CHAR == 2
-# define SWAB4(CH, tmp)  (tmp = (CH), \
-            ((tmp & 0x00FFu) << 24) + ((tmp & 0xFF00u) << 8))
-            /* high bytes are zero */
+    /* high bytes are zero */
+    return ((word & 0x00FFu) << 24) | ((word & 0xFF00u) << 8);
 #else
-# define SWAB4(CH, tmp)  (tmp = (CH), \
-            tmp = ((tmp & 0x00FF00FFu) << 8) + ((tmp >> 8) & 0x00FF00FFu), \
-            ((tmp & 0x0000FFFFu) << 16) + ((tmp >> 16) & 0x0000FFFFu))
+    return _Py_bswap32(word);
 #endif
+}
+
 Py_LOCAL_INLINE(Py_ssize_t)
 STRINGLIB(utf32_encode)(const STRINGLIB_CHAR *in,
                         Py_ssize_t len,
-                        PY_UINT32_T **outptr,
+                        uint32_t **outptr,
                         int native_ordering)
 {
-    PY_UINT32_T *out = *outptr;
+    uint32_t *out = *outptr;
     const STRINGLIB_CHAR *end = in + len;
     if (native_ordering) {
         const STRINGLIB_CHAR *unrolled_end = in + _Py_SIZE_ROUND_DOWN(len, 4);
@@ -784,7 +789,6 @@
         const STRINGLIB_CHAR *unrolled_end = in + _Py_SIZE_ROUND_DOWN(len, 4);
         while (in < unrolled_end) {
 #if STRINGLIB_SIZEOF_CHAR > 1
-            Py_UCS4 ch1, ch2, ch3, ch4;
             /* check if any character is a surrogate character */
             if (((in[0] ^ 0xd800) &
                  (in[1] ^ 0xd800) &
@@ -792,10 +796,10 @@
                  (in[3] ^ 0xd800) & 0xf800) == 0)
                 break;
 #endif
-            out[0] = SWAB4(in[0], ch1);
-            out[1] = SWAB4(in[1], ch2);
-            out[2] = SWAB4(in[2], ch3);
-            out[3] = SWAB4(in[3], ch4);
+            out[0] = STRINGLIB(SWAB4)(in[0]);
+            out[1] = STRINGLIB(SWAB4)(in[1]);
+            out[2] = STRINGLIB(SWAB4)(in[2]);
+            out[3] = STRINGLIB(SWAB4)(in[3]);
             in += 4; out += 4;
         }
         while (in < end) {
@@ -806,7 +810,7 @@
                 goto fail;
             }
 #endif
-            *out++ = SWAB4(ch, ch);
+            *out++ = STRINGLIB(SWAB4)(ch);
         }
     }
     *outptr = out;
@@ -817,6 +821,5 @@
     return len - (end - in + 1);
 #endif
 }
-#undef SWAB4
 
 #endif
diff --git a/Objects/stringlib/ctype.h b/Objects/stringlib/ctype.h
index 843cfa2..9b319b0 100644
--- a/Objects/stringlib/ctype.h
+++ b/Objects/stringlib/ctype.h
@@ -2,7 +2,7 @@
 # error "ctype.h only compatible with byte-wise strings"
 #endif
 
-#include "bytes_methods.h"
+#include "pycore_bytes_methods.h"
 
 static PyObject*
 stringlib_isspace(PyObject *self, PyObject *Py_UNUSED(ignored))
diff --git a/Objects/stringlib/eq.h b/Objects/stringlib/eq.h
index ff22f91..9c1058b 100644
--- a/Objects/stringlib/eq.h
+++ b/Objects/stringlib/eq.h
@@ -6,13 +6,14 @@
 Py_LOCAL_INLINE(int)
 unicode_eq(PyObject *aa, PyObject *bb)
 {
+    assert(PyUnicode_Check(aa));
+    assert(PyUnicode_Check(bb));
+    assert(PyUnicode_IS_READY(aa));
+    assert(PyUnicode_IS_READY(bb));
+
     PyUnicodeObject *a = (PyUnicodeObject *)aa;
     PyUnicodeObject *b = (PyUnicodeObject *)bb;
 
-    if (PyUnicode_READY(a) == -1 || PyUnicode_READY(b) == -1) {
-        Py_UNREACHABLE();
-    }
-
     if (PyUnicode_GET_LENGTH(a) != PyUnicode_GET_LENGTH(b))
         return 0;
     if (PyUnicode_GET_LENGTH(a) == 0)
diff --git a/Objects/stringlib/join.h b/Objects/stringlib/join.h
index 6f314e1..53bcbde 100644
--- a/Objects/stringlib/join.h
+++ b/Objects/stringlib/join.h
@@ -7,8 +7,8 @@
 Py_LOCAL_INLINE(PyObject *)
 STRINGLIB(bytes_join)(PyObject *sep, PyObject *iterable)
 {
-    char *sepstr = STRINGLIB_STR(sep);
-    const Py_ssize_t seplen = STRINGLIB_LEN(sep);
+    const char *sepstr = STRINGLIB_STR(sep);
+    Py_ssize_t seplen = STRINGLIB_LEN(sep);
     PyObject *res = NULL;
     char *p;
     Py_ssize_t seqlen = 0;
@@ -18,6 +18,9 @@
     Py_buffer *buffers = NULL;
 #define NB_STATIC_BUFFERS 10
     Py_buffer static_buffers[NB_STATIC_BUFFERS];
+#define GIL_THRESHOLD 1048576
+    int drop_gil = 1;
+    PyThreadState *save = NULL;
 
     seq = PySequence_Fast(iterable, "can only join an iterable");
     if (seq == NULL) {
@@ -65,12 +68,21 @@
             buffers[i].buf = PyBytes_AS_STRING(item);
             buffers[i].len = PyBytes_GET_SIZE(item);
         }
-        else if (PyObject_GetBuffer(item, &buffers[i], PyBUF_SIMPLE) != 0) {
-            PyErr_Format(PyExc_TypeError,
-                         "sequence item %zd: expected a bytes-like object, "
-                         "%.80s found",
-                         i, Py_TYPE(item)->tp_name);
-            goto error;
+        else {
+            if (PyObject_GetBuffer(item, &buffers[i], PyBUF_SIMPLE) != 0) {
+                PyErr_Format(PyExc_TypeError,
+                             "sequence item %zd: expected a bytes-like object, "
+                             "%.80s found",
+                             i, Py_TYPE(item)->tp_name);
+                goto error;
+            }
+            /* If the backing objects are mutable, then dropping the GIL
+             * opens up race conditions where another thread tries to modify
+             * the object which we hold a buffer on it. Such code has data
+             * races anyway, but this is a conservative approach that avoids
+             * changing the behaviour of that data race.
+             */
+            drop_gil = 0;
         }
         nbufs = i + 1;  /* for error cleanup */
         itemlen = buffers[i].len;
@@ -102,6 +114,12 @@
 
     /* Catenate everything. */
     p = STRINGLIB_STR(res);
+    if (sz < GIL_THRESHOLD) {
+        drop_gil = 0;   /* Benefits are likely outweighed by the overheads */
+    }
+    if (drop_gil) {
+        save = PyEval_SaveThread();
+    }
     if (!seplen) {
         /* fast path */
         for (i = 0; i < nbufs; i++) {
@@ -110,19 +128,23 @@
             memcpy(p, q, n);
             p += n;
         }
-        goto done;
     }
-    for (i = 0; i < nbufs; i++) {
-        Py_ssize_t n;
-        char *q;
-        if (i) {
-            memcpy(p, sepstr, seplen);
-            p += seplen;
+    else {
+        for (i = 0; i < nbufs; i++) {
+            Py_ssize_t n;
+            char *q;
+            if (i) {
+                memcpy(p, sepstr, seplen);
+                p += seplen;
+            }
+            n = buffers[i].len;
+            q = buffers[i].buf;
+            memcpy(p, q, n);
+            p += n;
         }
-        n = buffers[i].len;
-        q = buffers[i].buf;
-        memcpy(p, q, n);
-        p += n;
+    }
+    if (drop_gil) {
+        PyEval_RestoreThread(save);
     }
     goto done;
 
@@ -138,3 +160,4 @@
 }
 
 #undef NB_STATIC_BUFFERS
+#undef GIL_THRESHOLD
diff --git a/Objects/stringlib/split.h b/Objects/stringlib/split.h
index 31f77a7..068047f 100644
--- a/Objects/stringlib/split.h
+++ b/Objects/stringlib/split.h
@@ -48,7 +48,7 @@
 
 
 /* Always force the list to the expected size. */
-#define FIX_PREALLOC_SIZE(list) Py_SIZE(list) = count
+#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
 
 Py_LOCAL_INLINE(PyObject *)
 STRINGLIB(split_whitespace)(PyObject* str_obj,
diff --git a/Objects/stringlib/transmogrify.h b/Objects/stringlib/transmogrify.h
index 9506019..e1165ea 100644
--- a/Objects/stringlib/transmogrify.h
+++ b/Objects/stringlib/transmogrify.h
@@ -680,9 +680,13 @@
                   const char *to_s, Py_ssize_t to_len,
                   Py_ssize_t maxcount)
 {
+    if (STRINGLIB_LEN(self) < from_len) {
+        /* nothing to do; return the original bytes */
+        return return_self(self);
+    }
     if (maxcount < 0) {
         maxcount = PY_SSIZE_T_MAX;
-    } else if (maxcount == 0 || STRINGLIB_LEN(self) == 0) {
+    } else if (maxcount == 0) {
         /* nothing to do; return the original bytes */
         return return_self(self);
     }
@@ -699,13 +703,6 @@
         return stringlib_replace_interleave(self, to_s, to_len, maxcount);
     }
 
-    /* Except for b"".replace(b"", b"A") == b"A" there is no way beyond this */
-    /* point for an empty self bytes to generate a non-empty bytes */
-    /* Special case so the remaining code always gets a non-empty bytes */
-    if (STRINGLIB_LEN(self) == 0) {
-        return return_self(self);
-    }
-
     if (to_len == 0) {
         /* delete all occurrences of 'from' bytes */
         if (from_len == 1) {
diff --git a/Objects/stringlib/ucs1lib.h b/Objects/stringlib/ucs1lib.h
index ce1eb57..bc4b104 100644
--- a/Objects/stringlib/ucs1lib.h
+++ b/Objects/stringlib/ucs1lib.h
@@ -24,7 +24,3 @@
 
 #define STRINGLIB_TOSTR          PyObject_Str
 #define STRINGLIB_TOASCII        PyObject_ASCII
-
-#define _Py_InsertThousandsGrouping _PyUnicode_ucs1_InsertThousandsGrouping
-
-
diff --git a/Objects/stringlib/ucs2lib.h b/Objects/stringlib/ucs2lib.h
index f900cb6..86a1dff 100644
--- a/Objects/stringlib/ucs2lib.h
+++ b/Objects/stringlib/ucs2lib.h
@@ -24,6 +24,3 @@
 
 #define STRINGLIB_TOSTR          PyObject_Str
 #define STRINGLIB_TOASCII        PyObject_ASCII
-
-#define _Py_InsertThousandsGrouping _PyUnicode_ucs2_InsertThousandsGrouping
-
diff --git a/Objects/stringlib/ucs4lib.h b/Objects/stringlib/ucs4lib.h
index 86a480f..3c32a93 100644
--- a/Objects/stringlib/ucs4lib.h
+++ b/Objects/stringlib/ucs4lib.h
@@ -25,5 +25,3 @@
 #define STRINGLIB_TOSTR          PyObject_Str
 #define STRINGLIB_TOASCII        PyObject_ASCII
 
-#define _Py_InsertThousandsGrouping _PyUnicode_ucs4_InsertThousandsGrouping
-
diff --git a/Objects/stringlib/undef.h b/Objects/stringlib/undef.h
index f9d3f1d..c41e254 100644
--- a/Objects/stringlib/undef.h
+++ b/Objects/stringlib/undef.h
@@ -6,6 +6,5 @@
 #undef  STRINGLIB_STR
 #undef  STRINGLIB_LEN
 #undef  STRINGLIB_NEW
-#undef  _Py_InsertThousandsGrouping
 #undef STRINGLIB_IS_UNICODE
 
diff --git a/Objects/stringlib/unicode_format.h b/Objects/stringlib/unicode_format.h
index ddf1e26..b526ad2 100644
--- a/Objects/stringlib/unicode_format.h
+++ b/Objects/stringlib/unicode_format.h
@@ -828,7 +828,7 @@
         tmp = NULL;
     }
 
-    /* if needed, recurively compute the format_spec */
+    /* if needed, recursively compute the format_spec */
     if (format_spec_needs_expanding) {
         tmp = build_string(format_spec, args, kwargs, recursion_depth-1,
                            auto_number);
diff --git a/Objects/structseq.c b/Objects/structseq.c
index c158afc..b17b1f9 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -10,7 +10,7 @@
 #include "Python.h"
 #include "pycore_tupleobject.h"
 #include "pycore_object.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 static const char visible_length_key[] = "n_sequence_fields";
 static const char real_length_key[] = "n_fields";
@@ -18,7 +18,7 @@
 
 /* Fields with this name have only a field index, not a field name.
    They are only allowed for indices < n_visible_fields. */
-char *PyStructSequence_UnnamedField = "unnamed field";
+const char * const PyStructSequence_UnnamedField = "unnamed field";
 _Py_IDENTIFIER(n_sequence_fields);
 _Py_IDENTIFIER(n_fields);
 _Py_IDENTIFIER(n_unnamed_fields);
@@ -47,7 +47,7 @@
         return NULL;
     /* Hack the size of the variable object, so invisible fields don't appear
      to Python code. */
-    Py_SIZE(obj) = VISIBLE_SIZE_TP(type);
+    Py_SET_SIZE(obj, VISIBLE_SIZE_TP(type));
     for (i = 0; i < size; i++)
         obj->ob_item[i] = NULL;
 
@@ -70,6 +70,9 @@
 static int
 structseq_traverse(PyStructSequence *obj, visitproc visit, void *arg)
 {
+    if (Py_TYPE(obj)->tp_flags & Py_TPFLAGS_HEAPTYPE) {
+        Py_VISIT(Py_TYPE(obj));
+    }
     Py_ssize_t i, size;
     size = REAL_SIZE(obj);
     for (i = 0; i < size; ++i) {
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index bd58094..9092c9f 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -2,9 +2,10 @@
 /* Tuple object implementation */
 
 #include "Python.h"
-#include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
 #include "pycore_accu.h"
+#include "pycore_gc.h"         // _PyObject_GC_IS_TRACKED()
+#include "pycore_object.h"
 
 /*[clinic input]
 class tuple "PyTupleObject *" "&PyTuple_Type"
@@ -28,36 +29,12 @@
 static PyTupleObject *free_list[PyTuple_MAXSAVESIZE];
 static int numfree[PyTuple_MAXSAVESIZE];
 #endif
-#ifdef COUNT_ALLOCS
-Py_ssize_t _Py_fast_tuple_allocs;
-Py_ssize_t _Py_tuple_zero_allocs;
-#endif
 
-/* Debug statistic to count GC tracking of tuples.
-   Please note that tuples are only untracked when considered by the GC, and
-   many of them will be dead before. Therefore, a tracking rate close to 100%
-   does not necessarily prove that the heuristic is inefficient.
-*/
-#ifdef SHOW_TRACK_COUNT
-static Py_ssize_t count_untracked = 0;
-static Py_ssize_t count_tracked = 0;
-
-static void
-show_track(void)
+static inline void
+tuple_gc_track(PyTupleObject *op)
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    if (!interp->config.show_alloc_count) {
-        return;
-    }
-
-    fprintf(stderr, "Tuples created: %" PY_FORMAT_SIZE_T "d\n",
-        count_tracked + count_untracked);
-    fprintf(stderr, "Tuples tracked by the GC: %" PY_FORMAT_SIZE_T
-        "d\n", count_tracked);
-    fprintf(stderr, "%.2f%% tuple tracking rate\n\n",
-        (100.0*count_tracked/(count_untracked+count_tracked)));
+    _PyObject_GC_TRACK(op);
 }
-#endif
 
 /* Print summary info about the state of the optimized allocator */
 void
@@ -76,30 +53,27 @@
 #endif
 }
 
-PyObject *
-PyTuple_New(Py_ssize_t size)
+/* Allocate an uninitialized tuple object. Before making it public following
+   steps must be done:
+   - initialize its items
+   - call tuple_gc_track() on it
+   Because the empty tuple is always reused and it's already tracked by GC,
+   this function must not be called with size == 0 (unless from PyTuple_New()
+   which wraps this function).
+*/
+static PyTupleObject *
+tuple_alloc(Py_ssize_t size)
 {
     PyTupleObject *op;
-    Py_ssize_t i;
     if (size < 0) {
         PyErr_BadInternalCall();
         return NULL;
     }
 #if PyTuple_MAXSAVESIZE > 0
-    if (size == 0 && free_list[0]) {
-        op = free_list[0];
-        Py_INCREF(op);
-#ifdef COUNT_ALLOCS
-        _Py_tuple_zero_allocs++;
-#endif
-        return (PyObject *) op;
-    }
     if (size < PyTuple_MAXSAVESIZE && (op = free_list[size]) != NULL) {
+        assert(size != 0);
         free_list[size] = (PyTupleObject *) op->ob_item[0];
         numfree[size]--;
-#ifdef COUNT_ALLOCS
-        _Py_fast_tuple_allocs++;
-#endif
         /* Inline PyObject_InitVar */
 #ifdef Py_TRACE_REFS
         Py_SIZE(op) = size;
@@ -111,16 +85,35 @@
 #endif
     {
         /* Check for overflow */
-        if ((size_t)size > ((size_t)PY_SSIZE_T_MAX - sizeof(PyTupleObject) -
-                    sizeof(PyObject *)) / sizeof(PyObject *)) {
-            return PyErr_NoMemory();
+        if ((size_t)size > ((size_t)PY_SSIZE_T_MAX - (sizeof(PyTupleObject) -
+                    sizeof(PyObject *))) / sizeof(PyObject *)) {
+            return (PyTupleObject *)PyErr_NoMemory();
         }
         op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
         if (op == NULL)
             return NULL;
     }
-    for (i=0; i < size; i++)
+    return op;
+}
+
+PyObject *
+PyTuple_New(Py_ssize_t size)
+{
+    PyTupleObject *op;
+#if PyTuple_MAXSAVESIZE > 0
+    if (size == 0 && free_list[0]) {
+        op = free_list[0];
+        Py_INCREF(op);
+        return (PyObject *) op;
+    }
+#endif
+    op = tuple_alloc(size);
+    if (op == NULL) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < size; i++) {
         op->ob_item[i] = NULL;
+    }
 #if PyTuple_MAXSAVESIZE > 0
     if (size == 0) {
         free_list[0] = op;
@@ -128,10 +121,7 @@
         Py_INCREF(op);          /* extra INCREF so that this is never freed */
     }
 #endif
-#ifdef SHOW_TRACK_COUNT
-    count_tracked++;
-#endif
-    _PyObject_GC_TRACK(op);
+    tuple_gc_track(op);
     return (PyObject *) op;
 }
 
@@ -164,7 +154,7 @@
 PyTuple_SetItem(PyObject *op, Py_ssize_t i, PyObject *newitem)
 {
     PyObject **p;
-    if (!PyTuple_Check(op) || op->ob_refcnt != 1) {
+    if (!PyTuple_Check(op) || Py_REFCNT(op) != 1) {
         Py_XDECREF(newitem);
         PyErr_BadInternalCall();
         return -1;
@@ -199,10 +189,6 @@
             _PyObject_GC_MAY_BE_TRACKED(elt))
             return;
     }
-#ifdef SHOW_TRACK_COUNT
-    count_tracked--;
-    count_untracked++;
-#endif
     _PyObject_GC_UNTRACK(op);
 }
 
@@ -211,24 +197,28 @@
 {
     Py_ssize_t i;
     PyObject *o;
-    PyObject *result;
     PyObject **items;
     va_list vargs;
 
+    if (n == 0) {
+        return PyTuple_New(0);
+    }
+
     va_start(vargs, n);
-    result = PyTuple_New(n);
+    PyTupleObject *result = tuple_alloc(n);
     if (result == NULL) {
         va_end(vargs);
         return NULL;
     }
-    items = ((PyTupleObject *)result)->ob_item;
+    items = result->ob_item;
     for (i = 0; i < n; i++) {
         o = va_arg(vargs, PyObject *);
         Py_INCREF(o);
         items[i] = o;
     }
     va_end(vargs);
-    return result;
+    tuple_gc_track(result);
+    return (PyObject *)result;
 }
 
 
@@ -248,7 +238,7 @@
 #if PyTuple_MAXSAVESIZE > 0
         if (len < PyTuple_MAXSAVESIZE &&
             numfree[len] < PyTuple_MAXFREELIST &&
-            Py_TYPE(op) == &PyTuple_Type)
+            Py_IS_TYPE(op, &PyTuple_Type))
         {
             op->ob_item[0] = (PyObject *) free_list[len];
             numfree[len]++;
@@ -258,7 +248,9 @@
 #endif
     }
     Py_TYPE(op)->tp_free((PyObject *)op);
+#if PyTuple_MAXSAVESIZE > 0
 done:
+#endif
     Py_TRASHCAN_END
 }
 
@@ -403,8 +395,7 @@
     int cmp;
 
     for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(a); ++i)
-        cmp = PyObject_RichCompareBool(el, PyTuple_GET_ITEM(a, i),
-                                           Py_EQ);
+        cmp = PyObject_RichCompareBool(PyTuple_GET_ITEM(a, i), el, Py_EQ);
     return cmp;
 }
 
@@ -422,7 +413,11 @@
 PyObject *
 _PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
 {
-    PyTupleObject *tuple = (PyTupleObject *)PyTuple_New(n);
+    if (n == 0) {
+        return PyTuple_New(0);
+    }
+
+    PyTupleObject *tuple = tuple_alloc(n);
     if (tuple == NULL) {
         return NULL;
     }
@@ -432,6 +427,7 @@
         Py_INCREF(item);
         dst[i] = item;
     }
+    tuple_gc_track(tuple);
     return (PyObject *)tuple;
 }
 
@@ -487,7 +483,11 @@
     if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b))
         return PyErr_NoMemory();
     size = Py_SIZE(a) + Py_SIZE(b);
-    np = (PyTupleObject *) PyTuple_New(size);
+    if (size == 0) {
+        return PyTuple_New(0);
+    }
+
+    np = tuple_alloc(size);
     if (np == NULL) {
         return NULL;
     }
@@ -505,6 +505,7 @@
         Py_INCREF(v);
         dest[i] = v;
     }
+    tuple_gc_track(np);
     return (PyObject *)np;
 #undef b
 }
@@ -516,8 +517,6 @@
     Py_ssize_t size;
     PyTupleObject *np;
     PyObject **p, **items;
-    if (n < 0)
-        n = 0;
     if (Py_SIZE(a) == 0 || n == 1) {
         if (PyTuple_CheckExact(a)) {
             /* Since tuples are immutable, we can return a shared
@@ -525,13 +524,14 @@
             Py_INCREF(a);
             return (PyObject *)a;
         }
-        if (Py_SIZE(a) == 0)
-            return PyTuple_New(0);
+    }
+    if (Py_SIZE(a) == 0 || n <= 0) {
+        return PyTuple_New(0);
     }
     if (n > PY_SSIZE_T_MAX / Py_SIZE(a))
         return PyErr_NoMemory();
     size = Py_SIZE(a) * n;
-    np = (PyTupleObject *) PyTuple_New(size);
+    np = tuple_alloc(size);
     if (np == NULL)
         return NULL;
     p = np->ob_item;
@@ -543,6 +543,7 @@
             p++;
         }
     }
+    tuple_gc_track(np);
     return (PyObject *) np;
 }
 
@@ -708,6 +709,25 @@
 }
 
 static PyObject *
+tuple_vectorcall(PyObject *type, PyObject * const*args,
+                 size_t nargsf, PyObject *kwnames)
+{
+    if (!_PyArg_NoKwnames("tuple", kwnames)) {
+        return NULL;
+    }
+
+    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
+    if (!_PyArg_CheckPositional("tuple", nargs, 0, 1)) {
+        return NULL;
+    }
+
+    if (nargs) {
+        return tuple_new_impl((PyTypeObject *)type, args[0]);
+    }
+    return PyTuple_New(0);
+}
+
+static PyObject *
 tuple_subtype_new(PyTypeObject *type, PyObject *iterable)
 {
     PyObject *tmp, *newobj, *item;
@@ -746,7 +766,7 @@
 static PyObject*
 tuplesubscript(PyTupleObject* self, PyObject* item)
 {
-    if (PyIndex_Check(item)) {
+    if (_PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return NULL;
@@ -757,7 +777,6 @@
     else if (PySlice_Check(item)) {
         Py_ssize_t start, stop, step, slicelength, i;
         size_t cur;
-        PyObject* result;
         PyObject* it;
         PyObject **src, **dest;
 
@@ -777,11 +796,11 @@
             return (PyObject *)self;
         }
         else {
-            result = PyTuple_New(slicelength);
+            PyTupleObject* result = tuple_alloc(slicelength);
             if (!result) return NULL;
 
             src = self->ob_item;
-            dest = ((PyTupleObject *)result)->ob_item;
+            dest = result->ob_item;
             for (cur = start, i = 0; i < slicelength;
                  cur += step, i++) {
                 it = src[cur];
@@ -789,7 +808,8 @@
                 dest[i] = it;
             }
 
-            return result;
+            tuple_gc_track(result);
+            return (PyObject *)result;
         }
     }
     else {
@@ -815,6 +835,7 @@
     TUPLE___GETNEWARGS___METHODDEF
     TUPLE_INDEX_METHODDEF
     TUPLE_COUNT_METHODDEF
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
     {NULL,              NULL}           /* sentinel */
 };
 
@@ -867,6 +888,7 @@
     0,                                          /* tp_alloc */
     tuple_new,                                  /* tp_new */
     PyObject_GC_Del,                            /* tp_free */
+    .tp_vectorcall = tuple_vectorcall,
 };
 
 /* The following function breaks the notion that tuples are immutable:
@@ -885,7 +907,7 @@
     Py_ssize_t oldsize;
 
     v = (PyTupleObject *) *pv;
-    if (v == NULL || Py_TYPE(v) != &PyTuple_Type ||
+    if (v == NULL || !Py_IS_TYPE(v, &PyTuple_Type) ||
         (Py_SIZE(v) != 0 && Py_REFCNT(v) != 1)) {
         *pv = 0;
         Py_XDECREF(v);
@@ -906,10 +928,15 @@
     }
 
     /* XXX UNREF/NEWREF interface should be more symmetrical */
-    _Py_DEC_REFTOTAL;
-    if (_PyObject_GC_IS_TRACKED(v))
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
+#endif
+    if (_PyObject_GC_IS_TRACKED(v)) {
         _PyObject_GC_UNTRACK(v);
+    }
+#ifdef Py_TRACE_REFS
     _Py_ForgetReference((PyObject *) v);
+#endif
     /* DECREF items deleted by shrinkage */
     for (i = newsize; i < oldsize; i++) {
         Py_CLEAR(v->ob_item[i]);
@@ -930,40 +957,33 @@
     return 0;
 }
 
-int
-PyTuple_ClearFreeList(void)
+void
+_PyTuple_ClearFreeList(void)
 {
-    int freelist_size = 0;
 #if PyTuple_MAXSAVESIZE > 0
-    int i;
-    for (i = 1; i < PyTuple_MAXSAVESIZE; i++) {
-        PyTupleObject *p, *q;
-        p = free_list[i];
-        freelist_size += numfree[i];
+    for (Py_ssize_t i = 1; i < PyTuple_MAXSAVESIZE; i++) {
+        PyTupleObject *p = free_list[i];
         free_list[i] = NULL;
         numfree[i] = 0;
         while (p) {
-            q = p;
+            PyTupleObject *q = p;
             p = (PyTupleObject *)(p->ob_item[0]);
             PyObject_GC_Del(q);
         }
     }
+    // the empty tuple singleton is only cleared by _PyTuple_Fini()
 #endif
-    return freelist_size;
 }
 
 void
-PyTuple_Fini(void)
+_PyTuple_Fini(void)
 {
 #if PyTuple_MAXSAVESIZE > 0
     /* empty tuples are used all over the place and applications may
      * rely on the fact that an empty tuple is a singleton. */
     Py_CLEAR(free_list[0]);
 
-    (void)PyTuple_ClearFreeList();
-#endif
-#ifdef SHOW_TRACK_COUNT
-    show_track();
+    _PyTuple_ClearFreeList();
 #endif
 }
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 0acde71..acbe3fa 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1,10 +1,13 @@
 /* Type object implementation */
 
 #include "Python.h"
+#include "pycore_call.h"
+#include "pycore_initconfig.h"
 #include "pycore_object.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include "frameobject.h"
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 #include <ctype.h>
 
@@ -16,6 +19,9 @@
 
 #include "clinic/typeobject.c.h"
 
+#define MCACHE
+
+#ifdef MCACHE
 /* Support type attribute cache */
 
 /* The cache can keep references to the names alive for longer than
@@ -44,6 +50,7 @@
 
 static struct method_cache_entry method_cache[1 << MCACHE_SIZE_EXP];
 static unsigned int next_version_tag = 0;
+#endif
 
 #define MCACHE_STATS 0
 
@@ -53,6 +60,8 @@
 static size_t method_cache_collisions = 0;
 #endif
 
+#define INTERN_NAME_STRINGS
+
 /* alphabetical order */
 _Py_IDENTIFIER(__abstractmethods__);
 _Py_IDENTIFIER(__class__);
@@ -71,6 +80,7 @@
 _Py_IDENTIFIER(__set_name__);
 _Py_IDENTIFIER(__setitem__);
 _Py_IDENTIFIER(builtins);
+_Py_IDENTIFIER(mro);
 
 static PyObject *
 slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -210,6 +220,7 @@
 unsigned int
 PyType_ClearCache(void)
 {
+#ifdef MCACHE
     Py_ssize_t i;
     unsigned int cur_version_tag = next_version_tag - 1;
 
@@ -234,6 +245,9 @@
     /* mark all version tags as invalid */
     PyType_Modified(&PyBaseObject_Type);
     return cur_version_tag;
+#else
+    return 0;
+#endif
 }
 
 void
@@ -268,7 +282,7 @@
     PyObject *raw, *ref;
     Py_ssize_t i;
 
-    if (!PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
+    if (!_PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
         return;
 
     raw = type->tp_subclasses;
@@ -301,16 +315,15 @@
        each subclass when their mro is recursively updated.
      */
     Py_ssize_t i, n;
-    int custom = (Py_TYPE(type) != &PyType_Type);
+    int custom = !Py_IS_TYPE(type, &PyType_Type);
     int unbound;
     PyObject *mro_meth = NULL;
     PyObject *type_mro_meth = NULL;
 
-    if (!PyType_HasFeature(type, Py_TPFLAGS_HAVE_VERSION_TAG))
+    if (!_PyType_HasFeature(type, Py_TPFLAGS_HAVE_VERSION_TAG))
         return;
 
     if (custom) {
-        _Py_IDENTIFIER(mro);
         mro_meth = lookup_maybe_method(
             (PyObject *)type, &PyId_mro, &unbound);
         if (mro_meth == NULL)
@@ -332,7 +345,7 @@
         assert(PyType_Check(b));
         cls = (PyTypeObject *)b;
 
-        if (!PyType_HasFeature(cls, Py_TPFLAGS_HAVE_VERSION_TAG) ||
+        if (!_PyType_HasFeature(cls, Py_TPFLAGS_HAVE_VERSION_TAG) ||
             !PyType_IsSubtype(type, cls)) {
             goto clear;
         }
@@ -345,6 +358,7 @@
                         Py_TPFLAGS_VALID_VERSION_TAG);
 }
 
+#ifdef MCACHE
 static int
 assign_version_tag(PyTypeObject *type)
 {
@@ -356,11 +370,11 @@
     Py_ssize_t i, n;
     PyObject *bases;
 
-    if (PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
+    if (_PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
         return 1;
-    if (!PyType_HasFeature(type, Py_TPFLAGS_HAVE_VERSION_TAG))
+    if (!_PyType_HasFeature(type, Py_TPFLAGS_HAVE_VERSION_TAG))
         return 0;
-    if (!PyType_HasFeature(type, Py_TPFLAGS_READY))
+    if (!_PyType_HasFeature(type, Py_TPFLAGS_READY))
         return 0;
 
     type->tp_version_tag = next_version_tag++;
@@ -391,6 +405,7 @@
     type->tp_flags |= Py_TPFLAGS_VALID_VERSION_TAG;
     return 1;
 }
+#endif
 
 
 static PyMemberDef type_members[] = {
@@ -431,6 +446,7 @@
 const char *
 _PyType_Name(PyTypeObject *type)
 {
+    assert(type->tp_name != NULL);
     const char *s = strrchr(type->tp_name, '.');
     if (s == NULL) {
         s = type->tp_name;
@@ -956,34 +972,50 @@
 type_call(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
     PyObject *obj;
-
-    if (type->tp_new == NULL) {
-        PyErr_Format(PyExc_TypeError,
-                     "cannot create '%.100s' instances",
-                     type->tp_name);
-        return NULL;
-    }
+    PyThreadState *tstate = _PyThreadState_GET();
 
 #ifdef Py_DEBUG
     /* type_call() must not be called with an exception set,
        because it can clear it (directly or indirectly) and so the
        caller loses its exception */
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
 #endif
 
+    /* Special case: type(x) should return Py_TYPE(x) */
+    /* We only want type itself to accept the one-argument form (#27157) */
+    if (type == &PyType_Type) {
+        assert(args != NULL && PyTuple_Check(args));
+        assert(kwds == NULL || PyDict_Check(kwds));
+        Py_ssize_t nargs = PyTuple_GET_SIZE(args);
+
+        if (nargs == 1 && (kwds == NULL || !PyDict_GET_SIZE(kwds))) {
+            obj = (PyObject *) Py_TYPE(PyTuple_GET_ITEM(args, 0));
+            Py_INCREF(obj);
+            return obj;
+        }
+
+        /* SF bug 475327 -- if that didn't trigger, we need 3
+           arguments. But PyArg_ParseTuple in type_new may give
+           a msg saying type() needs exactly 3. */
+        if (nargs != 3) {
+            PyErr_SetString(PyExc_TypeError,
+                            "type() takes 1 or 3 arguments");
+            return NULL;
+        }
+    }
+
+    if (type->tp_new == NULL) {
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "cannot create '%.100s' instances",
+                      type->tp_name);
+        return NULL;
+    }
+
     obj = type->tp_new(type, args, kwds);
-    obj = _Py_CheckFunctionResult((PyObject*)type, obj, NULL);
+    obj = _Py_CheckFunctionResult(tstate, (PyObject*)type, obj, NULL);
     if (obj == NULL)
         return NULL;
 
-    /* Ugly exception: when the call was type(something),
-       don't call tp_init on the result. */
-    if (type == &PyType_Type &&
-        PyTuple_Check(args) && PyTuple_GET_SIZE(args) == 1 &&
-        (kwds == NULL ||
-         (PyDict_Check(kwds) && PyDict_GET_SIZE(kwds) == 0)))
-        return obj;
-
     /* If the returned object is not an instance of type,
        it won't be initialized. */
     if (!PyType_IsSubtype(Py_TYPE(obj), type))
@@ -993,12 +1025,12 @@
     if (type->tp_init != NULL) {
         int res = type->tp_init(obj, args, kwds);
         if (res < 0) {
-            assert(PyErr_Occurred());
+            assert(_PyErr_Occurred(tstate));
             Py_DECREF(obj);
             obj = NULL;
         }
         else {
-            assert(!PyErr_Occurred());
+            assert(!_PyErr_Occurred(tstate));
         }
     }
     return obj;
@@ -1011,23 +1043,29 @@
     const size_t size = _PyObject_VAR_SIZE(type, nitems+1);
     /* note that we need to add one, for the sentinel */
 
-    if (PyType_IS_GC(type))
+    if (_PyType_IS_GC(type)) {
         obj = _PyObject_GC_Malloc(size);
-    else
+    }
+    else {
         obj = (PyObject *)PyObject_MALLOC(size);
+    }
 
-    if (obj == NULL)
+    if (obj == NULL) {
         return PyErr_NoMemory();
+    }
 
     memset(obj, '\0', size);
 
-    if (type->tp_itemsize == 0)
+    if (type->tp_itemsize == 0) {
         (void)PyObject_INIT(obj, type);
-    else
+    }
+    else {
         (void) PyObject_INIT_VAR((PyVarObject *)obj, type, nitems);
+    }
 
-    if (PyType_IS_GC(type))
+    if (_PyType_IS_GC(type)) {
         _PyObject_GC_TRACK(obj);
+    }
     return obj;
 }
 
@@ -1087,11 +1125,16 @@
             Py_VISIT(*dictptr);
     }
 
-    if (type->tp_flags & Py_TPFLAGS_HEAPTYPE)
+    if (type->tp_flags & Py_TPFLAGS_HEAPTYPE
+        && (!basetraverse || !(base->tp_flags & Py_TPFLAGS_HEAPTYPE))) {
         /* For a heaptype, the instances count as references
            to the type.          Traverse the type so the collector
-           can find cycles involving this link. */
+           can find cycles involving this link.
+           Skip this visit if basetraverse belongs to a heap type: in that
+           case, basetraverse will visit the type when we call it later.
+           */
         Py_VISIT(type);
+    }
 
     if (basetraverse)
         return basetraverse(self, visit, arg);
@@ -1161,7 +1204,7 @@
 
     /* Test whether the type has GC exactly once */
 
-    if (!PyType_IS_GC(type)) {
+    if (!_PyType_IS_GC(type)) {
         /* A non GC dynamic type allows certain simplifications:
            there's no need to call clear_slots(), or DECREF the dict,
            or clear weakrefs. */
@@ -1173,8 +1216,9 @@
         }
         if (type->tp_del) {
             type->tp_del(self);
-            if (self->ob_refcnt > 0)
+            if (Py_REFCNT(self) > 0) {
                 return;
+            }
         }
 
         /* Find the nearest base with a different tp_dealloc */
@@ -1239,7 +1283,7 @@
     if (type->tp_del) {
         _PyObject_GC_TRACK(self);
         type->tp_del(self);
-        if (self->ob_refcnt > 0) {
+        if (Py_REFCNT(self) > 0) {
             /* Resurrected */
             goto endlabel;
         }
@@ -1253,7 +1297,7 @@
         if (type->tp_weaklistoffset && !base->tp_weaklistoffset) {
             /* Modeled after GET_WEAKREFS_LISTPTR() */
             PyWeakReference **list = (PyWeakReference **) \
-                PyObject_GET_WEAKREFS_LISTPTR(self);
+                _PyObject_GET_WEAKREFS_LISTPTR(self);
             while (*list)
                 _PyWeakref_ClearRef(*list);
         }
@@ -1286,8 +1330,9 @@
     /* Call the base tp_dealloc(); first retrack self if
      * basedealloc knows about gc.
      */
-    if (PyType_IS_GC(base))
+    if (_PyType_IS_GC(base)) {
         _PyObject_GC_TRACK(self);
+    }
     assert(basedealloc);
     basedealloc(self);
 
@@ -1374,7 +1419,7 @@
         return 0;
     }
     else
-        /* a is not completely initilized yet; follow tp_base */
+        /* a is not completely initialized yet; follow tp_base */
         return type_is_subtype_base_chain(a, b);
 }
 
@@ -1417,7 +1462,7 @@
         return NULL;
     }
 
-    if (PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
+    if (_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
         /* Avoid temporary PyMethodObject */
         *unbound = 1;
         Py_INCREF(res);
@@ -1440,70 +1485,77 @@
 {
     PyObject *res = lookup_maybe_method(self, attrid, unbound);
     if (res == NULL && !PyErr_Occurred()) {
-        PyErr_SetObject(PyExc_AttributeError, attrid->object);
+        PyErr_SetObject(PyExc_AttributeError, _PyUnicode_FromId(attrid));
     }
     return res;
 }
 
-static PyObject*
-call_unbound(int unbound, PyObject *func, PyObject *self,
-             PyObject **args, Py_ssize_t nargs)
+
+static inline PyObject*
+vectorcall_unbound(PyThreadState *tstate, int unbound, PyObject *func,
+                   PyObject *const *args, Py_ssize_t nargs)
 {
-    if (unbound) {
-        return _PyObject_FastCall_Prepend(func, self, args, nargs);
+    size_t nargsf = nargs;
+    if (!unbound) {
+        /* Skip self argument, freeing up args[0] to use for
+         * PY_VECTORCALL_ARGUMENTS_OFFSET */
+        args++;
+        nargsf = nargsf - 1 + PY_VECTORCALL_ARGUMENTS_OFFSET;
     }
-    else {
-        return _PyObject_FastCall(func, args, nargs);
-    }
+    return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL);
 }
 
 static PyObject*
 call_unbound_noarg(int unbound, PyObject *func, PyObject *self)
 {
     if (unbound) {
-        PyObject *args[1] = {self};
-        return _PyObject_FastCall(func, args, 1);
+        return PyObject_CallOneArg(func, self);
     }
     else {
         return _PyObject_CallNoArg(func);
     }
 }
 
-/* A variation of PyObject_CallMethod* that uses lookup_maybe_method()
-   instead of PyObject_GetAttrString(). */
-static PyObject *
-call_method(PyObject *obj, _Py_Identifier *name,
-            PyObject **args, Py_ssize_t nargs)
-{
-    int unbound;
-    PyObject *func, *retval;
+/* A variation of PyObject_CallMethod* that uses lookup_method()
+   instead of PyObject_GetAttrString().
 
-    func = lookup_method(obj, name, &unbound);
+   args is an argument vector of length nargs. The first element in this
+   vector is the special object "self" which is used for the method lookup */
+static PyObject *
+vectorcall_method(_Py_Identifier *name,
+                  PyObject *const *args, Py_ssize_t nargs)
+{
+    assert(nargs >= 1);
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    int unbound;
+    PyObject *self = args[0];
+    PyObject *func = lookup_method(self, name, &unbound);
     if (func == NULL) {
         return NULL;
     }
-    retval = call_unbound(unbound, func, obj, args, nargs);
+    PyObject *retval = vectorcall_unbound(tstate, unbound, func, args, nargs);
     Py_DECREF(func);
     return retval;
 }
 
-/* Clone of call_method() that returns NotImplemented when the lookup fails. */
-
+/* Clone of vectorcall_method() that returns NotImplemented
+ * when the lookup fails. */
 static PyObject *
-call_maybe(PyObject *obj, _Py_Identifier *name,
-           PyObject **args, Py_ssize_t nargs)
+vectorcall_maybe(PyThreadState *tstate, _Py_Identifier *name,
+                 PyObject *const *args, Py_ssize_t nargs)
 {
-    int unbound;
-    PyObject *func, *retval;
+    assert(nargs >= 1);
 
-    func = lookup_maybe_method(obj, name, &unbound);
+    int unbound;
+    PyObject *self = args[0];
+    PyObject *func = lookup_maybe_method(self, name, &unbound);
     if (func == NULL) {
         if (!PyErr_Occurred())
             Py_RETURN_NOTIMPLEMENTED;
         return NULL;
     }
-
-    retval = call_unbound(unbound, func, obj, args, nargs);
+    PyObject *retval = vectorcall_unbound(tstate, unbound, func, args, nargs);
     Py_DECREF(func);
     return retval;
 }
@@ -1881,10 +1933,9 @@
 {
     PyObject *mro_result;
     PyObject *new_mro;
-    int custom = (Py_TYPE(type) != &PyType_Type);
+    const int custom = !Py_IS_TYPE(type, &PyType_Type);
 
     if (custom) {
-        _Py_IDENTIFIER(mro);
         int unbound;
         PyObject *mro_meth = lookup_method((PyObject *)type, &PyId_mro,
                                            &unbound);
@@ -2002,7 +2053,7 @@
             if (PyType_Ready(base_i) < 0)
                 return NULL;
         }
-        if (!PyType_HasFeature(base_i, Py_TPFLAGS_BASETYPE)) {
+        if (!_PyType_HasFeature(base_i, Py_TPFLAGS_BASETYPE)) {
             PyErr_Format(PyExc_TypeError,
                          "type '%.100s' is not an acceptable base type",
                          base_i->tp_name);
@@ -2338,29 +2389,6 @@
     assert(args != NULL && PyTuple_Check(args));
     assert(kwds == NULL || PyDict_Check(kwds));
 
-    /* Special case: type(x) should return x->ob_type */
-    /* We only want type itself to accept the one-argument form (#27157)
-       Note: We don't call PyType_CheckExact as that also allows subclasses */
-    if (metatype == &PyType_Type) {
-        const Py_ssize_t nargs = PyTuple_GET_SIZE(args);
-        const Py_ssize_t nkwds = kwds == NULL ? 0 : PyDict_GET_SIZE(kwds);
-
-        if (nargs == 1 && nkwds == 0) {
-            PyObject *x = PyTuple_GET_ITEM(args, 0);
-            Py_INCREF(Py_TYPE(x));
-            return (PyObject *) Py_TYPE(x);
-        }
-
-        /* SF bug 475327 -- if that didn't trigger, we need 3
-           arguments. but PyArg_ParseTuple below may give
-           a msg saying type() needs exactly 3. */
-        if (nargs != 3) {
-            PyErr_SetString(PyExc_TypeError,
-                            "type() takes 1 or 3 arguments");
-            return NULL;
-        }
-    }
-
     /* Check arguments: (name, bases, dict) */
     if (!PyArg_ParseTuple(args, "UO!O!:type.__new__", &name, &PyTuple_Type,
                           &bases, &PyDict_Type, &orig_dict))
@@ -2577,10 +2605,10 @@
     slots = NULL;
 
     /* Initialize tp_flags */
+    // All heap types need GC, since we can create a reference cycle by storing
+    // an instance on one of its parents:
     type->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HEAPTYPE |
-        Py_TPFLAGS_BASETYPE;
-    if (base->tp_flags & Py_TPFLAGS_HAVE_GC)
-        type->tp_flags |= Py_TPFLAGS_HAVE_GC;
+        Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC;
 
     /* Initialize essential fields */
     type->tp_as_async = &et->as_async;
@@ -2646,6 +2674,9 @@
     if (qualname != NULL && _PyDict_DelItemId(dict, &PyId___qualname__) < 0)
         goto error;
 
+    /* Set ht_module */
+    et->ht_module = NULL;
+
     /* Set tp_doc to a copy of dict['__doc__'], if the latter is there
        and is a string.  The __doc__ accessor will first look for tp_doc;
        if that fails, it will still look into __dict__.
@@ -2777,21 +2808,11 @@
     }
     type->tp_dealloc = subtype_dealloc;
 
-    /* Enable GC unless this class is not adding new instance variables and
-       the base class did not use GC. */
-    if ((base->tp_flags & Py_TPFLAGS_HAVE_GC) ||
-        type->tp_basicsize > base->tp_basicsize)
-        type->tp_flags |= Py_TPFLAGS_HAVE_GC;
-
     /* Always override allocation strategy to use regular heap */
     type->tp_alloc = PyType_GenericAlloc;
-    if (type->tp_flags & Py_TPFLAGS_HAVE_GC) {
-        type->tp_free = PyObject_GC_Del;
-        type->tp_traverse = subtype_traverse;
-        type->tp_clear = subtype_clear;
-    }
-    else
-        type->tp_free = PyObject_Del;
+    type->tp_free = PyObject_GC_Del;
+    type->tp_traverse = subtype_traverse;
+    type->tp_clear = subtype_clear;
 
     /* store type in class' cell if one is supplied */
     cell = _PyDict_GetItemIdWithError(dict, &PyId___classcell__);
@@ -2848,21 +2869,44 @@
 PyObject *
 PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
 {
+    return PyType_FromModuleAndSpec(NULL, spec, bases);
+}
+
+PyObject *
+PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)
+{
     PyHeapTypeObject *res;
-    PyMemberDef *memb;
     PyObject *modname;
     PyTypeObject *type, *base;
 
-    PyType_Slot *slot;
-    Py_ssize_t nmembers;
-    char *s, *res_start;
+    const PyType_Slot *slot;
+    Py_ssize_t nmembers, weaklistoffset, dictoffset, vectorcalloffset;
+    char *res_start;
 
-    nmembers = 0;
+    nmembers = weaklistoffset = dictoffset = vectorcalloffset = 0;
     for (slot = spec->slots; slot->slot; slot++) {
         if (slot->slot == Py_tp_members) {
             nmembers = 0;
-            for (memb = slot->pfunc; memb->name != NULL; memb++) {
+            for (const PyMemberDef *memb = slot->pfunc; memb->name != NULL; memb++) {
                 nmembers++;
+                if (strcmp(memb->name, "__weaklistoffset__") == 0) {
+                    // The PyMemberDef must be a Py_ssize_t and readonly
+                    assert(memb->type == T_PYSSIZET);
+                    assert(memb->flags == READONLY);
+                    weaklistoffset = memb->offset;
+                }
+                if (strcmp(memb->name, "__dictoffset__") == 0) {
+                    // The PyMemberDef must be a Py_ssize_t and readonly
+                    assert(memb->type == T_PYSSIZET);
+                    assert(memb->flags == READONLY);
+                    dictoffset = memb->offset;
+                }
+                if (strcmp(memb->name, "__vectorcalloffset__") == 0) {
+                    // The PyMemberDef must be a Py_ssize_t and readonly
+                    assert(memb->type == T_PYSSIZET);
+                    assert(memb->flags == READONLY);
+                    vectorcalloffset = memb->offset;
+                }
             }
         }
     }
@@ -2879,9 +2923,9 @@
     }
 
     /* Set the type name and qualname */
-    s = strrchr(spec->name, '.');
+    const char *s = strrchr(spec->name, '.');
     if (s == NULL)
-        s = (char*)spec->name;
+        s = spec->name;
     else
         s++;
 
@@ -2895,6 +2939,9 @@
     Py_INCREF(res->ht_qualname);
     type->tp_name = spec->name;
 
+    Py_XINCREF(module);
+    res->ht_module = module;
+
     /* Adjust for empty tuple bases */
     if (!bases) {
         base = &PyBaseObject_Type;
@@ -2904,26 +2951,40 @@
                 base = slot->pfunc;
             else if (slot->slot == Py_tp_bases) {
                 bases = slot->pfunc;
-                Py_INCREF(bases);
             }
         }
-        if (!bases)
+        if (!bases) {
             bases = PyTuple_Pack(1, base);
-        if (!bases)
+            if (!bases)
+                goto fail;
+        }
+        else if (!PyTuple_Check(bases)) {
+            PyErr_SetString(PyExc_SystemError, "Py_tp_bases is not a tuple");
             goto fail;
+        }
+        else {
+            Py_INCREF(bases);
+        }
     }
-    else
+    else if (!PyTuple_Check(bases)) {
+        PyErr_SetString(PyExc_SystemError, "bases is not a tuple");
+        goto fail;
+    }
+    else {
         Py_INCREF(bases);
+    }
 
     /* Calculate best base, and check that all bases are type objects */
     base = best_base(bases);
     if (base == NULL) {
+        Py_DECREF(bases);
         goto fail;
     }
-    if (!PyType_HasFeature(base, Py_TPFLAGS_BASETYPE)) {
+    if (!_PyType_HasFeature(base, Py_TPFLAGS_BASETYPE)) {
         PyErr_Format(PyExc_TypeError,
                      "type '%.100s' is not an acceptable base type",
                      base->tp_name);
+        Py_DECREF(bases);
         goto fail;
     }
 
@@ -2935,7 +2996,6 @@
     type->tp_as_buffer = &res->as_buffer;
     /* Set tp_base and tp_bases */
     type->tp_bases = bases;
-    bases = NULL;
     Py_INCREF(base);
     type->tp_base = base;
 
@@ -2984,6 +3044,10 @@
         type->tp_dealloc = subtype_dealloc;
     }
 
+    if (vectorcalloffset) {
+        type->tp_vectorcall_offset = vectorcalloffset;
+    }
+
     if (PyType_Ready(type) < 0)
         goto fail;
 
@@ -2991,24 +3055,40 @@
         res->ht_cached_keys = _PyDict_NewKeysForClass();
     }
 
+    if (weaklistoffset) {
+        type->tp_weaklistoffset = weaklistoffset;
+        if (PyDict_DelItemString((PyObject *)type->tp_dict, "__weaklistoffset__") < 0)
+            goto fail;
+    }
+    if (dictoffset) {
+        type->tp_dictoffset = dictoffset;
+        if (PyDict_DelItemString((PyObject *)type->tp_dict, "__dictoffset__") < 0)
+            goto fail;
+    }
+
     /* Set type.__module__ */
-    s = strrchr(spec->name, '.');
-    if (s != NULL) {
-        int err;
-        modname = PyUnicode_FromStringAndSize(
-                spec->name, (Py_ssize_t)(s - spec->name));
-        if (modname == NULL) {
+    if (_PyDict_GetItemIdWithError(type->tp_dict, &PyId___module__) == NULL) {
+        if (PyErr_Occurred()) {
             goto fail;
         }
-        err = _PyDict_SetItemId(type->tp_dict, &PyId___module__, modname);
-        Py_DECREF(modname);
-        if (err != 0)
-            goto fail;
-    } else {
-        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
-                "builtin type %.200s has no __module__ attribute",
-                spec->name))
-            goto fail;
+        s = strrchr(spec->name, '.');
+        if (s != NULL) {
+            int err;
+            modname = PyUnicode_FromStringAndSize(
+                    spec->name, (Py_ssize_t)(s - spec->name));
+            if (modname == NULL) {
+                goto fail;
+            }
+            err = _PyDict_SetItemId(type->tp_dict, &PyId___module__, modname);
+            Py_DECREF(modname);
+            if (err != 0)
+                goto fail;
+        } else {
+            if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+                    "builtin type %.200s has no __module__ attribute",
+                    spec->name))
+                goto fail;
+        }
     }
 
     return (PyObject*)res;
@@ -3027,7 +3107,7 @@
 void *
 PyType_GetSlot(PyTypeObject *type, int slot)
 {
-    if (!PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE) || slot < 0) {
+    if (!_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE) || slot < 0) {
         PyErr_BadInternalCall();
         return NULL;
     }
@@ -3038,6 +3118,40 @@
     return  *(void**)(((char*)type) + slotoffsets[slot]);
 }
 
+PyObject *
+PyType_GetModule(PyTypeObject *type)
+{
+    assert(PyType_Check(type));
+    if (!_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
+        PyErr_Format(
+            PyExc_TypeError,
+            "PyType_GetModule: Type '%s' is not a heap type",
+            type->tp_name);
+        return NULL;
+    }
+
+    PyHeapTypeObject* et = (PyHeapTypeObject*)type;
+    if (!et->ht_module) {
+        PyErr_Format(
+            PyExc_TypeError,
+            "PyType_GetModule: Type '%s' has no associated module",
+            type->tp_name);
+        return NULL;
+    }
+    return et->ht_module;
+
+}
+
+void *
+PyType_GetModuleState(PyTypeObject *type)
+{
+    PyObject *m = PyType_GetModule(type);
+    if (m == NULL) {
+        return NULL;
+    }
+    return PyModule_GetState(m);
+}
+
 /* Internal API to look for a name through the MRO, bypassing the method cache.
    This returns a borrowed reference, and might set an exception.
    'error' is set to: -1: error with exception; 1: error without exception; 0: ok */
@@ -3107,12 +3221,12 @@
 {
     PyObject *res;
     int error;
-    unsigned int h;
 
+#ifdef MCACHE
     if (MCACHE_CACHEABLE_NAME(name) &&
-        PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG)) {
+        _PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG)) {
         /* fast path */
-        h = MCACHE_HASH_METHOD(type, name);
+        unsigned int h = MCACHE_HASH_METHOD(type, name);
         if (method_cache[h].version == type->tp_version_tag &&
             method_cache[h].name == name) {
 #if MCACHE_STATS
@@ -3121,6 +3235,7 @@
             return method_cache[h].value;
         }
     }
+#endif
 
     /* We may end up clearing live exceptions below, so make sure it's ours. */
     assert(!PyErr_Occurred());
@@ -3142,8 +3257,9 @@
         return NULL;
     }
 
+#ifdef MCACHE
     if (MCACHE_CACHEABLE_NAME(name) && assign_version_tag(type)) {
-        h = MCACHE_HASH_METHOD(type, name);
+        unsigned int h = MCACHE_HASH_METHOD(type, name);
         method_cache[h].version = type->tp_version_tag;
         method_cache[h].value = res;  /* borrowed */
         Py_INCREF(name);
@@ -3156,6 +3272,7 @@
 #endif
         Py_SETREF(method_cache[h].name, name);
     }
+#endif
     return res;
 }
 
@@ -3178,7 +3295,7 @@
     int kind = PyUnicode_KIND(name);
     /* Special names contain at least "__x__" and are always ASCII. */
     if (length > 4 && kind == PyUnicode_1BYTE_KIND) {
-        Py_UCS1 *characters = PyUnicode_1BYTE_DATA(name);
+        const Py_UCS1 *characters = PyUnicode_1BYTE_DATA(name);
         return (
             ((characters[length-2] == '_') && (characters[length-1] == '_')) &&
             ((characters[0] == '_') && (characters[1] == '_'))
@@ -3200,7 +3317,7 @@
     if (!PyUnicode_Check(name)) {
         PyErr_Format(PyExc_TypeError,
                      "attribute name must be string, not '%.200s'",
-                     name->ob_type->tp_name);
+                     Py_TYPE(name)->tp_name);
         return NULL;
     }
 
@@ -3298,6 +3415,7 @@
             if (name == NULL)
                 return -1;
         }
+#ifdef INTERN_NAME_STRINGS
         if (!PyUnicode_CHECK_INTERNED(name)) {
             PyUnicode_InternInPlace(&name);
             if (!PyUnicode_CHECK_INTERNED(name)) {
@@ -3307,6 +3425,7 @@
                 return -1;
             }
         }
+#endif
     }
     else {
         /* Will fail in _PyObject_GenericSetAttrWithDict. */
@@ -3360,8 +3479,10 @@
     Py_XDECREF(et->ht_name);
     Py_XDECREF(et->ht_qualname);
     Py_XDECREF(et->ht_slots);
-    if (et->ht_cached_keys)
+    if (et->ht_cached_keys) {
         _PyDictKeys_DecRef(et->ht_cached_keys);
+    }
+    Py_XDECREF(et->ht_module);
     Py_TYPE(type)->tp_free((PyObject *)type);
 }
 
@@ -3541,9 +3662,9 @@
        for heaptypes. */
     if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
         char msg[200];
-        sprintf(msg, "type_traverse() called for non-heap type '%.100s'",
+        sprintf(msg, "type_traverse() called on non-heap type '%.100s'",
                 type->tp_name);
-        Py_FatalError(msg);
+        _PyObject_ASSERT_FAILED_MSG((PyObject *)type, msg);
     }
 
     Py_VISIT(type->tp_dict);
@@ -3551,6 +3672,7 @@
     Py_VISIT(type->tp_mro);
     Py_VISIT(type->tp_bases);
     Py_VISIT(type->tp_base);
+    Py_VISIT(((PyHeapTypeObject *)type)->ht_module);
 
     /* There's no need to visit type->tp_subclasses or
        ((PyHeapTypeObject *)type)->ht_slots, because they can't be involved
@@ -3572,10 +3694,13 @@
        the dict, so that other objects caught in a reference cycle
        don't start calling destroyed methods.
 
-       Otherwise, the only field we need to clear is tp_mro, which is
+       Otherwise, the we need to clear tp_mro, which is
        part of a hard cycle (its first element is the class itself) that
        won't be broken otherwise (it's a tuple and tuples don't have a
-       tp_clear handler).  None of the other fields need to be
+       tp_clear handler).
+       We also need to clear ht_module, if present: the module usually holds a
+       reference to its class. None of the other fields need to be
+
        cleared, and here's why:
 
        tp_cache:
@@ -3600,8 +3725,11 @@
         ((PyHeapTypeObject *)type)->ht_cached_keys = NULL;
         _PyDictKeys_DecRef(cached_keys);
     }
-    if (type->tp_dict)
+    if (type->tp_dict) {
         PyDict_Clear(type->tp_dict);
+    }
+    Py_CLEAR(((PyHeapTypeObject *)type)->ht_module);
+
     Py_CLEAR(type->tp_mro);
 
     return 0;
@@ -3619,7 +3747,7 @@
     sizeof(PyHeapTypeObject),                   /* tp_basicsize */
     sizeof(PyMemberDef),                        /* tp_itemsize */
     (destructor)type_dealloc,                   /* tp_dealloc */
-    0,                                          /* tp_vectorcall_offset */
+    offsetof(PyTypeObject, tp_vectorcall),      /* tp_vectorcall_offset */
     0,                                          /* tp_getattr */
     0,                                          /* tp_setattr */
     0,                                          /* tp_as_async */
@@ -3634,7 +3762,8 @@
     (setattrofunc)type_setattro,                /* tp_setattro */
     0,                                          /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-        Py_TPFLAGS_BASETYPE | Py_TPFLAGS_TYPE_SUBCLASS,         /* tp_flags */
+    Py_TPFLAGS_BASETYPE | Py_TPFLAGS_TYPE_SUBCLASS |
+    Py_TPFLAGS_HAVE_VECTORCALL,                 /* tp_flags */
     type_doc,                                   /* tp_doc */
     (traverseproc)type_traverse,                /* tp_traverse */
     (inquiry)type_clear,                        /* tp_clear */
@@ -3753,6 +3882,7 @@
         PyObject *joined;
         PyObject *comma;
         _Py_static_string(comma_id, ", ");
+        Py_ssize_t method_count;
 
         /* Compute ", ".join(sorted(type.__abstractmethods__))
            into joined. */
@@ -3773,14 +3903,18 @@
             return NULL;
         }
         joined = PyUnicode_Join(comma, sorted_methods);
+        method_count = PyObject_Length(sorted_methods);
         Py_DECREF(sorted_methods);
         if (joined == NULL)
             return NULL;
+        if (method_count == -1)
+            return NULL;
 
         PyErr_Format(PyExc_TypeError,
                      "Can't instantiate abstract class %s "
-                     "with abstract methods %U",
+                     "with abstract method%s %U",
                      type->tp_name,
+                     method_count > 1 ? "s" : "",
                      joined);
         Py_DECREF(joined);
         return NULL;
@@ -3852,12 +3986,12 @@
     case Py_NE:
         /* By default, __ne__() delegates to __eq__() and inverts the result,
            unless the latter returns NotImplemented. */
-        if (self->ob_type->tp_richcompare == NULL) {
+        if (Py_TYPE(self)->tp_richcompare == NULL) {
             res = Py_NotImplemented;
             Py_INCREF(res);
             break;
         }
-        res = (*self->ob_type->tp_richcompare)(self, other, Py_EQ);
+        res = (*Py_TYPE(self)->tp_richcompare)(self, other, Py_EQ);
         if (res != NULL && res != Py_NotImplemented) {
             int ok = PyObject_IsTrue(res);
             Py_DECREF(res);
@@ -4061,9 +4195,10 @@
     }
 
     if (compatible_for_assignment(oldto, newto, "__class__")) {
-        if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE)
+        if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE) {
             Py_INCREF(newto);
-        Py_TYPE(self) = newto;
+        }
+        Py_SET_TYPE(self, newto);
         if (oldto->tp_flags & Py_TPFLAGS_HEAPTYPE)
             Py_DECREF(oldto);
         return 0;
@@ -4150,8 +4285,8 @@
     /* Use _slotnames function from the copyreg module to find the slots
        by this class and its bases. This function will cache the result
        in __slotnames__. */
-    slotnames = _PyObject_CallMethodIdObjArgs(copyreg, &PyId__slotnames,
-                                              cls, NULL);
+    slotnames = _PyObject_CallMethodIdOneArg(copyreg, &PyId__slotnames,
+                                             (PyObject *)cls);
     Py_DECREF(copyreg);
     if (slotnames == NULL)
         return NULL;
@@ -4179,7 +4314,7 @@
     if (getstate == NULL) {
         PyObject *slotnames;
 
-        if (required && obj->ob_type->tp_itemsize) {
+        if (required && Py_TYPE(obj)->tp_itemsize) {
             PyErr_Format(PyExc_TypeError,
                          "cannot pickle '%.200s' object",
                          Py_TYPE(obj)->tp_name);
@@ -4212,13 +4347,13 @@
         assert(slotnames == Py_None || PyList_Check(slotnames));
         if (required) {
             Py_ssize_t basicsize = PyBaseObject_Type.tp_basicsize;
-            if (obj->ob_type->tp_dictoffset)
+            if (Py_TYPE(obj)->tp_dictoffset)
                 basicsize += sizeof(PyObject *);
-            if (obj->ob_type->tp_weaklistoffset)
+            if (Py_TYPE(obj)->tp_weaklistoffset)
                 basicsize += sizeof(PyObject *);
             if (slotnames != Py_None)
                 basicsize += sizeof(PyObject *) * PyList_GET_SIZE(slotnames);
-            if (obj->ob_type->tp_basicsize > basicsize) {
+            if (Py_TYPE(obj)->tp_basicsize > basicsize) {
                 Py_DECREF(slotnames);
                 Py_DECREF(state);
                 PyErr_Format(PyExc_TypeError,
@@ -4430,7 +4565,7 @@
         PyObject *items;
         _Py_IDENTIFIER(items);
 
-        items = _PyObject_CallMethodIdObjArgs(obj, &PyId_items, NULL);
+        items = _PyObject_CallMethodIdNoArgs(obj, &PyId_items);
         if (items == NULL) {
             Py_CLEAR(*listitems);
             return -1;
@@ -4689,7 +4824,7 @@
     if (PyUnicode_GET_LENGTH(format_spec) > 0) {
         PyErr_Format(PyExc_TypeError,
                      "unsupported format string passed to %.200s.__format__",
-                     self->ob_type->tp_name);
+                     Py_TYPE(self)->tp_name);
         return NULL;
     }
     return PyObject_Str(self);
@@ -4708,10 +4843,10 @@
     Py_ssize_t res, isize;
 
     res = 0;
-    isize = self->ob_type->tp_itemsize;
+    isize = Py_TYPE(self)->tp_itemsize;
     if (isize > 0)
         res = Py_SIZE(self) * isize;
-    res += self->ob_type->tp_basicsize;
+    res += Py_TYPE(self)->tp_basicsize;
 
     return PyLong_FromSsize_t(res);
 }
@@ -4758,7 +4893,7 @@
     if (_PyObject_LookupAttrId(self, &PyId___class__, &itsclass) < 0) {
         goto error;
     }
-    /* XXX(tomer): Perhaps fall back to obj->ob_type if no
+    /* XXX(tomer): Perhaps fall back to Py_TYPE(obj) if no
                    __class__ exists? */
     if (itsclass != NULL && merge_class_dict(dict, itsclass) < 0)
         goto error;
@@ -5159,17 +5294,17 @@
     /* tp_hash see tp_richcompare */
     {
         /* Always inherit tp_vectorcall_offset to support PyVectorcall_Call().
-         * If _Py_TPFLAGS_HAVE_VECTORCALL is not inherited, then vectorcall
+         * If Py_TPFLAGS_HAVE_VECTORCALL is not inherited, then vectorcall
          * won't be used automatically. */
         COPYSLOT(tp_vectorcall_offset);
 
-        /* Inherit _Py_TPFLAGS_HAVE_VECTORCALL for non-heap types
+        /* Inherit Py_TPFLAGS_HAVE_VECTORCALL for non-heap types
         * if tp_call is not overridden */
         if (!type->tp_call &&
-            (base->tp_flags & _Py_TPFLAGS_HAVE_VECTORCALL) &&
+            (base->tp_flags & Py_TPFLAGS_HAVE_VECTORCALL) &&
             !(type->tp_flags & Py_TPFLAGS_HEAPTYPE))
         {
-            type->tp_flags |= _Py_TPFLAGS_HAVE_VECTORCALL;
+            type->tp_flags |= Py_TPFLAGS_HAVE_VECTORCALL;
         }
         COPYSLOT(tp_call);
     }
@@ -5245,14 +5380,14 @@
 
     /* Consistency checks for PEP 590:
      * - Py_TPFLAGS_METHOD_DESCRIPTOR requires tp_descr_get
-     * - _Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and
+     * - Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and
      *   tp_vectorcall_offset > 0
      * To avoid mistakes, we require this before inheriting.
      */
     if (type->tp_flags & Py_TPFLAGS_METHOD_DESCRIPTOR) {
         _PyObject_ASSERT((PyObject *)type, type->tp_descr_get != NULL);
     }
-    if (type->tp_flags & _Py_TPFLAGS_HAVE_VECTORCALL) {
+    if (type->tp_flags & Py_TPFLAGS_HAVE_VECTORCALL) {
         _PyObject_ASSERT((PyObject *)type, type->tp_vectorcall_offset > 0);
         _PyObject_ASSERT((PyObject *)type, type->tp_call != NULL);
     }
@@ -5298,8 +5433,9 @@
        NULL when type is &PyBaseObject_Type, and we know its ob_type is
        not NULL (it's initialized to &PyType_Type).      But coverity doesn't
        know that. */
-    if (Py_TYPE(type) == NULL && base != NULL)
-        Py_TYPE(type) = Py_TYPE(base);
+    if (Py_IS_TYPE(type, NULL) && base != NULL) {
+        Py_SET_TYPE(type, Py_TYPE(base));
+    }
 
     /* Initialize tp_bases */
     bases = type->tp_bases;
@@ -5372,7 +5508,7 @@
         }
 
     /* Sanity check for tp_free. */
-    if (PyType_IS_GC(type) && (type->tp_flags & Py_TPFLAGS_BASETYPE) &&
+    if (_PyType_IS_GC(type) && (type->tp_flags & Py_TPFLAGS_BASETYPE) &&
         (type->tp_free == NULL || type->tp_free == PyObject_Del)) {
         /* This base class needs to call tp_free, but doesn't have
          * one, or its tp_free is for non-gc'ed objects.
@@ -6035,8 +6171,12 @@
     PyTypeObject *type, *subtype, *staticbase;
     PyObject *arg0, *res;
 
-    if (self == NULL || !PyType_Check(self))
-        Py_FatalError("__new__() called with non-type 'self'");
+    if (self == NULL || !PyType_Check(self)) {
+        PyErr_Format(PyExc_SystemError,
+                     "__new__() called with non-type 'self'");
+        return NULL;
+    }
+
     type = (PyTypeObject *)self;
     if (!PyTuple_Check(args) || PyTuple_GET_SIZE(args) < 1) {
         PyErr_Format(PyExc_TypeError,
@@ -6123,17 +6263,18 @@
 static PyObject * \
 FUNCNAME(PyObject *self) \
 { \
+    PyObject* stack[1] = {self}; \
     _Py_static_string(id, OPSTR); \
-    return call_method(self, &id, NULL, 0); \
+    return vectorcall_method(&id, stack, 1); \
 }
 
 #define SLOT1(FUNCNAME, OPSTR, ARG1TYPE) \
 static PyObject * \
 FUNCNAME(PyObject *self, ARG1TYPE arg1) \
 { \
-    PyObject* stack[1] = {arg1}; \
+    PyObject* stack[2] = {self, arg1}; \
     _Py_static_string(id, OPSTR); \
-    return call_method(self, &id, stack, 1); \
+    return vectorcall_method(&id, stack, 2); \
 }
 
 /* Boolean helper for SLOT1BINFULL().
@@ -6173,10 +6314,11 @@
 static PyObject * \
 FUNCNAME(PyObject *self, PyObject *other) \
 { \
-    PyObject* stack[1]; \
+    PyObject* stack[2]; \
+    PyThreadState *tstate = _PyThreadState_GET(); \
     _Py_static_string(op_id, OPSTR); \
     _Py_static_string(rop_id, ROPSTR); \
-    int do_other = Py_TYPE(self) != Py_TYPE(other) && \
+    int do_other = !Py_IS_TYPE(self, Py_TYPE(other)) && \
         Py_TYPE(other)->tp_as_number != NULL && \
         Py_TYPE(other)->tp_as_number->SLOTNAME == TESTFUNC; \
     if (Py_TYPE(self)->tp_as_number != NULL && \
@@ -6188,24 +6330,27 @@
                 return NULL; \
             } \
             if (ok) { \
-                stack[0] = self; \
-                r = call_maybe(other, &rop_id, stack, 1); \
+                stack[0] = other; \
+                stack[1] = self; \
+                r = vectorcall_maybe(tstate, &rop_id, stack, 2); \
                 if (r != Py_NotImplemented) \
                     return r; \
                 Py_DECREF(r); \
                 do_other = 0; \
             } \
         } \
-        stack[0] = other; \
-        r = call_maybe(self, &op_id, stack, 1); \
+        stack[0] = self; \
+        stack[1] = other; \
+        r = vectorcall_maybe(tstate, &op_id, stack, 2); \
         if (r != Py_NotImplemented || \
-            Py_TYPE(other) == Py_TYPE(self)) \
+            Py_IS_TYPE(other, Py_TYPE(self))) \
             return r; \
         Py_DECREF(r); \
     } \
     if (do_other) { \
-        stack[0] = self; \
-        return call_maybe(other, &rop_id, stack, 1); \
+        stack[0] = other; \
+        stack[1] = self; \
+        return vectorcall_maybe(tstate, &rop_id, stack, 2); \
     } \
     Py_RETURN_NOTIMPLEMENTED; \
 }
@@ -6216,7 +6361,8 @@
 static Py_ssize_t
 slot_sq_length(PyObject *self)
 {
-    PyObject *res = call_method(self, &PyId___len__, NULL, 0);
+    PyObject* stack[1] = {self};
+    PyObject *res = vectorcall_method(&PyId___len__, stack, 1);
     Py_ssize_t len;
 
     if (res == NULL)
@@ -6243,14 +6389,12 @@
 static PyObject *
 slot_sq_item(PyObject *self, Py_ssize_t i)
 {
-    PyObject *retval;
-    PyObject *args[1];
     PyObject *ival = PyLong_FromSsize_t(i);
     if (ival == NULL) {
         return NULL;
     }
-    args[0] = ival;
-    retval = call_method(self, &PyId___getitem__, args, 1);
+    PyObject *stack[2] = {self, ival};
+    PyObject *retval = vectorcall_method(&PyId___getitem__, stack, 2);
     Py_DECREF(ival);
     return retval;
 }
@@ -6258,7 +6402,7 @@
 static int
 slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
 {
-    PyObject *stack[2];
+    PyObject *stack[3];
     PyObject *res;
     PyObject *index_obj;
 
@@ -6267,13 +6411,14 @@
         return -1;
     }
 
-    stack[0] = index_obj;
+    stack[0] = self;
+    stack[1] = index_obj;
     if (value == NULL) {
-        res = call_method(self, &PyId___delitem__, stack, 1);
+        res = vectorcall_method(&PyId___delitem__, stack, 2);
     }
     else {
-        stack[1] = value;
-        res = call_method(self, &PyId___setitem__, stack, 2);
+        stack[2] = value;
+        res = vectorcall_method(&PyId___setitem__, stack, 3);
     }
     Py_DECREF(index_obj);
 
@@ -6287,6 +6432,7 @@
 static int
 slot_sq_contains(PyObject *self, PyObject *value)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     PyObject *func, *res;
     int result = -1, unbound;
     _Py_IDENTIFIER(__contains__);
@@ -6300,8 +6446,8 @@
         return -1;
     }
     if (func != NULL) {
-        PyObject *args[1] = {value};
-        res = call_unbound(unbound, func, self, args, 1);
+        PyObject *args[2] = {self, value};
+        res = vectorcall_unbound(tstate, unbound, func, args, 2);
         Py_DECREF(func);
         if (res != NULL) {
             result = PyObject_IsTrue(res);
@@ -6323,16 +6469,17 @@
 static int
 slot_mp_ass_subscript(PyObject *self, PyObject *key, PyObject *value)
 {
-    PyObject *stack[2];
+    PyObject *stack[3];
     PyObject *res;
 
-    stack[0] = key;
+    stack[0] = self;
+    stack[1] = key;
     if (value == NULL) {
-        res = call_method(self, &PyId___delitem__, stack, 1);
+        res = vectorcall_method(&PyId___delitem__, stack, 2);
     }
     else {
-        stack[1] = value;
-        res = call_method(self, &PyId___setitem__, stack, 2);
+        stack[2] = value;
+        res = vectorcall_method(&PyId___setitem__, stack, 3);
     }
 
     if (res == NULL)
@@ -6365,8 +6512,8 @@
        slot_nb_power, so check before calling self.__pow__. */
     if (Py_TYPE(self)->tp_as_number != NULL &&
         Py_TYPE(self)->tp_as_number->nb_power == slot_nb_power) {
-        PyObject* stack[2] = {other, modulus};
-        return call_method(self, &PyId___pow__, stack, 2);
+        PyObject* stack[3] = {self, other, modulus};
+        return vectorcall_method(&PyId___pow__, stack, 3);
     }
     Py_RETURN_NOTIMPLEMENTED;
 }
@@ -6433,7 +6580,8 @@
 slot_nb_index(PyObject *self)
 {
     _Py_IDENTIFIER(__index__);
-    return call_method(self, &PyId___index__, NULL, 0);
+    PyObject *stack[1] = {self};
+    return vectorcall_method(&PyId___index__, stack, 1);
 }
 
 
@@ -6455,9 +6603,9 @@
 static PyObject *
 slot_nb_inplace_power(PyObject *self, PyObject * arg1, PyObject *arg2)
 {
-    PyObject *stack[1] = {arg1};
+    PyObject *stack[2] = {self, arg1};
     _Py_IDENTIFIER(__ipow__);
-    return call_method(self, &PyId___ipow__, stack, 1);
+    return vectorcall_method(&PyId___ipow__, stack, 2);
 }
 SLOT1(slot_nb_inplace_lshift, "__ilshift__", PyObject *)
 SLOT1(slot_nb_inplace_rshift, "__irshift__", PyObject *)
@@ -6541,19 +6689,21 @@
 static PyObject *
 slot_tp_call(PyObject *self, PyObject *args, PyObject *kwds)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     _Py_IDENTIFIER(__call__);
     int unbound;
+
     PyObject *meth = lookup_method(self, &PyId___call__, &unbound);
-    PyObject *res;
-
-    if (meth == NULL)
+    if (meth == NULL) {
         return NULL;
+    }
 
+    PyObject *res;
     if (unbound) {
-        res = _PyObject_Call_Prepend(meth, self, args, kwds);
+        res = _PyObject_Call_Prepend(tstate, meth, self, args, kwds);
     }
     else {
-        res = PyObject_Call(meth, args, kwds);
+        res = _PyObject_Call(tstate, meth, args, kwds);
     }
 
     Py_DECREF(meth);
@@ -6574,8 +6724,8 @@
 static PyObject *
 slot_tp_getattro(PyObject *self, PyObject *name)
 {
-    PyObject *stack[1] = {name};
-    return call_method(self, &PyId___getattribute__, stack, 1);
+    PyObject *stack[2] = {self, name};
+    return vectorcall_method(&PyId___getattribute__, stack, 2);
 }
 
 static PyObject *
@@ -6591,7 +6741,7 @@
         else
             attr = descr;
     }
-    res = PyObject_CallFunctionObjArgs(attr, name, NULL);
+    res = PyObject_CallOneArg(attr, name);
     Py_XDECREF(descr);
     return res;
 }
@@ -6622,7 +6772,7 @@
        needed, with call_attribute. */
     getattribute = _PyType_LookupId(tp, &PyId___getattribute__);
     if (getattribute == NULL ||
-        (Py_TYPE(getattribute) == &PyWrapperDescr_Type &&
+        (Py_IS_TYPE(getattribute, &PyWrapperDescr_Type) &&
          ((PyWrapperDescrObject *)getattribute)->d_wrapped ==
          (void *)PyObject_GenericGetAttr))
         res = PyObject_GenericGetAttr(self, name);
@@ -6642,18 +6792,19 @@
 static int
 slot_tp_setattro(PyObject *self, PyObject *name, PyObject *value)
 {
-    PyObject *stack[2];
+    PyObject *stack[3];
     PyObject *res;
     _Py_IDENTIFIER(__delattr__);
     _Py_IDENTIFIER(__setattr__);
 
-    stack[0] = name;
+    stack[0] = self;
+    stack[1] = name;
     if (value == NULL) {
-        res = call_method(self, &PyId___delattr__, stack, 1);
+        res = vectorcall_method(&PyId___delattr__, stack, 2);
     }
     else {
-        stack[1] = value;
-        res = call_method(self, &PyId___setattr__, stack, 2);
+        stack[2] = value;
+        res = vectorcall_method(&PyId___setattr__, stack, 3);
     }
     if (res == NULL)
         return -1;
@@ -6662,28 +6813,28 @@
 }
 
 static _Py_Identifier name_op[] = {
-    {0, "__lt__", 0},
-    {0, "__le__", 0},
-    {0, "__eq__", 0},
-    {0, "__ne__", 0},
-    {0, "__gt__", 0},
-    {0, "__ge__", 0}
+    _Py_static_string_init("__lt__"),
+    _Py_static_string_init("__le__"),
+    _Py_static_string_init("__eq__"),
+    _Py_static_string_init("__ne__"),
+    _Py_static_string_init("__gt__"),
+    _Py_static_string_init("__ge__"),
 };
 
 static PyObject *
 slot_tp_richcompare(PyObject *self, PyObject *other, int op)
 {
-    int unbound;
-    PyObject *func, *res;
+    PyThreadState *tstate = _PyThreadState_GET();
 
-    func = lookup_maybe_method(self, &name_op[op], &unbound);
+    int unbound;
+    PyObject *func = lookup_maybe_method(self, &name_op[op], &unbound);
     if (func == NULL) {
         PyErr_Clear();
         Py_RETURN_NOTIMPLEMENTED;
     }
 
-    PyObject *args[1] = {other};
-    res = call_unbound(unbound, func, self, args, 1);
+    PyObject *stack[2] = {self, other};
+    PyObject *res = vectorcall_unbound(tstate, unbound, func, stack, 2);
     Py_DECREF(func);
     return res;
 }
@@ -6726,7 +6877,8 @@
 slot_tp_iternext(PyObject *self)
 {
     _Py_IDENTIFIER(__next__);
-    return call_method(self, &PyId___next__, NULL, 0);
+    PyObject *stack[1] = {self};
+    return vectorcall_method(&PyId___next__, stack, 1);
 }
 
 static PyObject *
@@ -6754,18 +6906,19 @@
 static int
 slot_tp_descr_set(PyObject *self, PyObject *target, PyObject *value)
 {
-    PyObject* stack[2];
+    PyObject* stack[3];
     PyObject *res;
     _Py_IDENTIFIER(__delete__);
     _Py_IDENTIFIER(__set__);
 
-    stack[0] = target;
+    stack[0] = self;
+    stack[1] = target;
     if (value == NULL) {
-        res = call_method(self, &PyId___delete__, stack, 1);
+        res = vectorcall_method(&PyId___delete__, stack, 2);
     }
     else {
-        stack[1] = value;
-        res = call_method(self, &PyId___set__, stack, 2);
+        stack[2] = value;
+        res = vectorcall_method(&PyId___set__, stack, 3);
     }
     if (res == NULL)
         return -1;
@@ -6776,18 +6929,21 @@
 static int
 slot_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
+
     _Py_IDENTIFIER(__init__);
     int unbound;
     PyObject *meth = lookup_method(self, &PyId___init__, &unbound);
-    PyObject *res;
-
-    if (meth == NULL)
+    if (meth == NULL) {
         return -1;
+    }
+
+    PyObject *res;
     if (unbound) {
-        res = _PyObject_Call_Prepend(meth, self, args, kwds);
+        res = _PyObject_Call_Prepend(tstate, meth, self, args, kwds);
     }
     else {
-        res = PyObject_Call(meth, args, kwds);
+        res = _PyObject_Call(tstate, meth, args, kwds);
     }
     Py_DECREF(meth);
     if (res == NULL)
@@ -6806,6 +6962,7 @@
 static PyObject *
 slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     PyObject *func, *result;
 
     func = _PyObject_GetAttrId((PyObject *)type, &PyId___new__);
@@ -6813,7 +6970,7 @@
         return NULL;
     }
 
-    result = _PyObject_Call_Prepend(func, (PyObject *)type, args, kwds);
+    result = _PyObject_Call_Prepend(tstate, func, (PyObject *)type, args, kwds);
     Py_DECREF(func);
     return result;
 }
@@ -6909,7 +7066,8 @@
 mappings.  Note that multiple names may map to the same slot (e.g. __eq__,
 __ne__ etc. all map to tp_richcompare) and one name may map to multiple slots
 (e.g. __str__ affects tp_str as well as tp_repr). The table is terminated with
-an all-zero entry.  (This table is further initialized in init_slotdefs().)
+an all-zero entry.  (This table is further initialized in
+_PyTypes_InitSlotDefs().)
 */
 
 typedef struct wrapperbase slotdef;
@@ -7217,8 +7375,9 @@
         *pp = NULL;
     }
 
-    /* Look in all matching slots of the type; if exactly one of these has
-       a filled-in slot, return its value.      Otherwise return NULL. */
+    /* Look in all slots of the type matching the name. If exactly one of these
+       has a filled-in slot, return a pointer to that slot.
+       Otherwise, return NULL. */
     res = NULL;
     for (pp = ptrs; *pp; pp++) {
         ptr = slotptr(type, (*pp)->offset);
@@ -7231,12 +7390,61 @@
     return res;
 }
 
-/* Common code for update_slots_callback() and fixup_slot_dispatchers().  This
-   does some incredibly complex thinking and then sticks something into the
-   slot.  (It sees if the adjacent slotdefs for the same slot have conflicting
-   interests, and then stores a generic wrapper or a specific function into
-   the slot.)  Return a pointer to the next slotdef with a different offset,
-   because that's convenient  for fixup_slot_dispatchers(). */
+
+/* Common code for update_slots_callback() and fixup_slot_dispatchers().
+ *
+ * This is meant to set a "slot" like type->tp_repr or
+ * type->tp_as_sequence->sq_concat by looking up special methods like
+ * __repr__ or __add__. The opposite (adding special methods from slots) is
+ * done by add_operators(), called from PyType_Ready(). Since update_one_slot()
+ * calls PyType_Ready() if needed, the special methods are already in place.
+ *
+ * The special methods corresponding to each slot are defined in the "slotdef"
+ * array. Note that one slot may correspond to multiple special methods and vice
+ * versa. For example, tp_richcompare uses 6 methods __lt__, ..., __ge__ and
+ * tp_as_number->nb_add uses __add__ and __radd__. In the other direction,
+ * __add__ is used by the number and sequence protocols and __getitem__ by the
+ * sequence and mapping protocols. This causes a lot of complications.
+ *
+ * In detail, update_one_slot() does the following:
+ *
+ * First of all, if the slot in question does not exist, return immediately.
+ * This can happen for example if it's tp_as_number->nb_add but tp_as_number
+ * is NULL.
+ *
+ * For the given slot, we loop over all the special methods with a name
+ * corresponding to that slot (for example, for tp_descr_set, this would be
+ * __set__ and __delete__) and we look up these names in the MRO of the type.
+ * If we don't find any special method, the slot is set to NULL (regardless of
+ * what was in the slot before).
+ *
+ * Suppose that we find exactly one special method. If it's a wrapper_descriptor
+ * (i.e. a special method calling a slot, for example str.__repr__ which calls
+ * the tp_repr for the 'str' class) with the correct name ("__repr__" for
+ * tp_repr), for the right class, calling the right wrapper C function (like
+ * wrap_unaryfunc for tp_repr), then the slot is set to the slot that the
+ * wrapper_descriptor originally wrapped. For example, a class inheriting
+ * from 'str' and not redefining __repr__ will have tp_repr set to the tp_repr
+ * of 'str'.
+ * In all other cases where the special method exists, the slot is set to a
+ * wrapper calling the special method. There is one exception: if the special
+ * method is a wrapper_descriptor with the correct name but the type has
+ * precisely one slot set for that name and that slot is not the one that we
+ * are updating, then NULL is put in the slot (this exception is the only place
+ * in update_one_slot() where the *existing* slots matter).
+ *
+ * When there are multiple special methods for the same slot, the above is
+ * applied for each special method. As long as the results agree, the common
+ * resulting slot is applied. If the results disagree, then a wrapper for
+ * the special methods is installed. This is always safe, but less efficient
+ * because it uses method lookup instead of direct C calls.
+ *
+ * There are some further special cases for specific slots, like supporting
+ * __hash__ = None for tp_hash and special code for tp_new.
+ *
+ * When done, return a pointer to the next slotdef with a different offset,
+ * because that's convenient for fixup_slot_dispatchers(). This function never
+ * sets an exception: if an internal error happens (unlikely), it's ignored. */
 static slotdef *
 update_one_slot(PyTypeObject *type, slotdef *p)
 {
@@ -7261,7 +7469,7 @@
         descr = find_name_in_mro(type, p->name_strobj, &error);
         if (descr == NULL) {
             if (error == -1) {
-                /* It is unlikely by not impossible that there has been an exception
+                /* It is unlikely but not impossible that there has been an exception
                    during lookup. Since this function originally expected no errors,
                    we ignore them here in order to keep up the interface. */
                 PyErr_Clear();
@@ -7271,7 +7479,7 @@
             }
             continue;
         }
-        if (Py_TYPE(descr) == &PyWrapperDescr_Type &&
+        if (Py_IS_TYPE(descr, &PyWrapperDescr_Type) &&
             ((PyWrapperDescrObject *)descr)->d_base->name_strobj == p->name_strobj) {
             void **tptr = resolve_slotdups(type, p->name_strobj);
             if (tptr == NULL || tptr == ptr)
@@ -7294,7 +7502,7 @@
                 use_generic = 1;
             }
         }
-        else if (Py_TYPE(descr) == &PyCFunction_Type &&
+        else if (Py_IS_TYPE(descr, &PyCFunction_Type) &&
                  PyCFunction_GET_FUNCTION(descr) ==
                  (PyCFunction)(void(*)(void))tp_new_wrapper &&
                  ptr == (void**)&type->tp_new)
@@ -7350,28 +7558,36 @@
 static int slotdefs_initialized = 0;
 /* Initialize the slotdefs table by adding interned string objects for the
    names. */
-static void
-init_slotdefs(void)
+PyStatus
+_PyTypes_InitSlotDefs(void)
 {
-    slotdef *p;
+    if (slotdefs_initialized) {
+        return _PyStatus_OK();
+    }
 
-    if (slotdefs_initialized)
-        return;
-    for (p = slotdefs; p->name; p++) {
+    for (slotdef *p = slotdefs; p->name; p++) {
         /* Slots must be ordered by their offset in the PyHeapTypeObject. */
         assert(!p[1].name || p->offset <= p[1].offset);
+#ifdef INTERN_NAME_STRINGS
         p->name_strobj = PyUnicode_InternFromString(p->name);
-        if (!p->name_strobj || !PyUnicode_CHECK_INTERNED(p->name_strobj))
-            Py_FatalError("Out of memory interning slotdef names");
+        if (!p->name_strobj || !PyUnicode_CHECK_INTERNED(p->name_strobj)) {
+            return _PyStatus_NO_MEMORY();
+        }
+#else
+        p->name_strobj = PyUnicode_FromString(p->name);
+        if (!p->name_strobj) {
+            return _PyStatus_NO_MEMORY();
+        }
+#endif
     }
     slotdefs_initialized = 1;
+    return _PyStatus_OK();
 }
 
-/* Undo init_slotdefs, releasing the interned strings. */
+/* Undo _PyTypes_InitSlotDefs(), releasing the interned strings. */
 static void clear_slotdefs(void)
 {
-    slotdef *p;
-    for (p = slotdefs; p->name; p++) {
+    for (slotdef *p = slotdefs; p->name; p++) {
         Py_CLEAR(p->name_strobj);
     }
     slotdefs_initialized = 0;
@@ -7387,9 +7603,11 @@
     int offset;
 
     assert(PyUnicode_CheckExact(name));
+#ifdef INTERN_NAME_STRINGS
     assert(PyUnicode_CHECK_INTERNED(name));
+#endif
 
-    init_slotdefs();
+    assert(slotdefs_initialized);
     pp = ptrs;
     for (p = slotdefs; p->name; p++) {
         if (p->name_strobj == name)
@@ -7417,7 +7635,7 @@
 {
     slotdef *p;
 
-    init_slotdefs();
+    assert(slotdefs_initialized);
     for (p = slotdefs; p->name; )
         p = update_one_slot(type, p);
 }
@@ -7430,7 +7648,7 @@
     /* Clear the VALID_VERSION flag of 'type' and all its subclasses. */
     PyType_Modified(type);
 
-    init_slotdefs();
+    assert(slotdefs_initialized);
     for (p = slotdefs; p->name; p++) {
         /* update_slot returns int but can't actually fail */
         update_slot(type, p->name_strobj);
@@ -7457,7 +7675,7 @@
                 _PyErr_FormatFromCause(PyExc_RuntimeError,
                     "Error calling __set_name__ on '%.100s' instance %R "
                     "in '%.100s'",
-                    value->ob_type->tp_name, key, type->tp_name);
+                    Py_TYPE(value)->tp_name, key, type->tp_name);
                 Py_DECREF(names_to_set);
                 return -1;
             }
@@ -7493,7 +7711,7 @@
     }
 
 
-    result = _PyObject_FastCallDict(func, NULL, 0, kwds);
+    result = PyObject_VectorcallDict(func, NULL, 0, kwds);
     Py_DECREF(func);
     if (result == NULL) {
         return -1;
@@ -7590,7 +7808,7 @@
     PyObject *descr;
     void **ptr;
 
-    init_slotdefs();
+    assert(slotdefs_initialized);
     for (p = slotdefs; p->name; p++) {
         if (p->wrapper == NULL)
             continue;
@@ -7819,7 +8037,7 @@
         Py_INCREF(self);
         return self;
     }
-    if (Py_TYPE(su) != &PySuper_Type)
+    if (!Py_IS_TYPE(su, &PySuper_Type))
         /* If su is an instance of a (strict) subclass of super,
            call its type */
         return PyObject_CallFunctionObjArgs((PyObject *)Py_TYPE(su),
@@ -7843,6 +8061,83 @@
 }
 
 static int
+super_init_without_args(PyFrameObject *f, PyCodeObject *co,
+                        PyTypeObject **type_p, PyObject **obj_p)
+{
+    if (co->co_argcount == 0) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "super(): no arguments");
+        return -1;
+    }
+
+    PyObject *obj = f->f_localsplus[0];
+    Py_ssize_t i, n;
+    if (obj == NULL && co->co_cell2arg) {
+        /* The first argument might be a cell. */
+        n = PyTuple_GET_SIZE(co->co_cellvars);
+        for (i = 0; i < n; i++) {
+            if (co->co_cell2arg[i] == 0) {
+                PyObject *cell = f->f_localsplus[co->co_nlocals + i];
+                assert(PyCell_Check(cell));
+                obj = PyCell_GET(cell);
+                break;
+            }
+        }
+    }
+    if (obj == NULL) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "super(): arg[0] deleted");
+        return -1;
+    }
+
+    if (co->co_freevars == NULL) {
+        n = 0;
+    }
+    else {
+        assert(PyTuple_Check(co->co_freevars));
+        n = PyTuple_GET_SIZE(co->co_freevars);
+    }
+
+    PyTypeObject *type = NULL;
+    for (i = 0; i < n; i++) {
+        PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i);
+        assert(PyUnicode_Check(name));
+        if (_PyUnicode_EqualToASCIIId(name, &PyId___class__)) {
+            Py_ssize_t index = co->co_nlocals +
+                PyTuple_GET_SIZE(co->co_cellvars) + i;
+            PyObject *cell = f->f_localsplus[index];
+            if (cell == NULL || !PyCell_Check(cell)) {
+                PyErr_SetString(PyExc_RuntimeError,
+                  "super(): bad __class__ cell");
+                return -1;
+            }
+            type = (PyTypeObject *) PyCell_GET(cell);
+            if (type == NULL) {
+                PyErr_SetString(PyExc_RuntimeError,
+                  "super(): empty __class__ cell");
+                return -1;
+            }
+            if (!PyType_Check(type)) {
+                PyErr_Format(PyExc_RuntimeError,
+                  "super(): __class__ is not a type (%s)",
+                  Py_TYPE(type)->tp_name);
+                return -1;
+            }
+            break;
+        }
+    }
+    if (type == NULL) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "super(): __class__ cell not found");
+        return -1;
+    }
+
+    *type_p = type;
+    *obj_p = obj;
+    return 0;
+}
+
+static int
 super_init(PyObject *self, PyObject *args, PyObject *kwds)
 {
     superobject *su = (superobject *)self;
@@ -7858,80 +8153,20 @@
     if (type == NULL) {
         /* Call super(), without args -- fill in from __class__
            and first local variable on the stack. */
-        PyFrameObject *f;
-        PyCodeObject *co;
-        Py_ssize_t i, n;
-        f = _PyThreadState_GET()->frame;
-        if (f == NULL) {
+        PyThreadState *tstate = _PyThreadState_GET();
+        PyFrameObject *frame = PyThreadState_GetFrame(tstate);
+        if (frame == NULL) {
             PyErr_SetString(PyExc_RuntimeError,
                             "super(): no current frame");
             return -1;
         }
-        co = f->f_code;
-        if (co == NULL) {
-            PyErr_SetString(PyExc_RuntimeError,
-                            "super(): no code object");
-            return -1;
-        }
-        if (co->co_argcount == 0) {
-            PyErr_SetString(PyExc_RuntimeError,
-                            "super(): no arguments");
-            return -1;
-        }
-        obj = f->f_localsplus[0];
-        if (obj == NULL && co->co_cell2arg) {
-            /* The first argument might be a cell. */
-            n = PyTuple_GET_SIZE(co->co_cellvars);
-            for (i = 0; i < n; i++) {
-                if (co->co_cell2arg[i] == 0) {
-                    PyObject *cell = f->f_localsplus[co->co_nlocals + i];
-                    assert(PyCell_Check(cell));
-                    obj = PyCell_GET(cell);
-                    break;
-                }
-            }
-        }
-        if (obj == NULL) {
-            PyErr_SetString(PyExc_RuntimeError,
-                            "super(): arg[0] deleted");
-            return -1;
-        }
-        if (co->co_freevars == NULL)
-            n = 0;
-        else {
-            assert(PyTuple_Check(co->co_freevars));
-            n = PyTuple_GET_SIZE(co->co_freevars);
-        }
-        for (i = 0; i < n; i++) {
-            PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i);
-            assert(PyUnicode_Check(name));
-            if (_PyUnicode_EqualToASCIIId(name, &PyId___class__)) {
-                Py_ssize_t index = co->co_nlocals +
-                    PyTuple_GET_SIZE(co->co_cellvars) + i;
-                PyObject *cell = f->f_localsplus[index];
-                if (cell == NULL || !PyCell_Check(cell)) {
-                    PyErr_SetString(PyExc_RuntimeError,
-                      "super(): bad __class__ cell");
-                    return -1;
-                }
-                type = (PyTypeObject *) PyCell_GET(cell);
-                if (type == NULL) {
-                    PyErr_SetString(PyExc_RuntimeError,
-                      "super(): empty __class__ cell");
-                    return -1;
-                }
-                if (!PyType_Check(type)) {
-                    PyErr_Format(PyExc_RuntimeError,
-                      "super(): __class__ is not a type (%s)",
-                      Py_TYPE(type)->tp_name);
-                    return -1;
-                }
-                break;
-            }
-        }
-        if (type == NULL) {
-            PyErr_SetString(PyExc_RuntimeError,
-                            "super(): __class__ cell not found");
+
+        PyCodeObject *code = PyFrame_GetCode(frame);
+        int res = super_init_without_args(frame, code, &type, &obj);
+        Py_DECREF(frame);
+        Py_DECREF(code);
+
+        if (res < 0) {
             return -1;
         }
     }
diff --git a/Objects/typeslots.inc b/Objects/typeslots.inc
index dc750cc..ffc9bb2 100644
--- a/Objects/typeslots.inc
+++ b/Objects/typeslots.inc
@@ -1,6 +1,6 @@
 /* Generated by typeslots.py */
-0,
-0,
+offsetof(PyHeapTypeObject, as_buffer.bf_getbuffer),
+offsetof(PyHeapTypeObject, as_buffer.bf_releasebuffer),
 offsetof(PyHeapTypeObject, as_mapping.mp_ass_subscript),
 offsetof(PyHeapTypeObject, as_mapping.mp_length),
 offsetof(PyHeapTypeObject, as_mapping.mp_subscript),
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 4c2b42f..ffd13f7 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -40,13 +40,16 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "pycore_initconfig.h"
+#include "pycore_abstract.h"       // _PyIndex_Check()
+#include "pycore_bytes_methods.h"
 #include "pycore_fileutils.h"
+#include "pycore_initconfig.h"
+#include "pycore_interp.h"         // PyInterpreterState.fs_codec
 #include "pycore_object.h"
+#include "pycore_pathconfig.h"
 #include "pycore_pylifecycle.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"        // _PyInterpreterState_GET()
 #include "ucnhash.h"
-#include "bytes_methods.h"
 #include "stringlib/eq.h"
 
 #ifdef MS_WINDOWS
@@ -117,6 +120,13 @@
          _PyUnicode_UTF8_LENGTH(op))
 #define _PyUnicode_WSTR(op)                             \
     (((PyASCIIObject*)(op))->wstr)
+
+/* Don't use deprecated macro of unicodeobject.h */
+#undef PyUnicode_WSTR_LENGTH
+#define PyUnicode_WSTR_LENGTH(op) \
+    (PyUnicode_IS_COMPACT_ASCII(op) ?                  \
+     ((PyASCIIObject*)op)->length :                    \
+     ((PyCompactUnicodeObject*)op)->wstr_length)
 #define _PyUnicode_WSTR_LENGTH(op)                      \
     (((PyCompactUnicodeObject*)(op))->wstr_length)
 #define _PyUnicode_LENGTH(op)                           \
@@ -195,6 +205,8 @@
 #  define OVERALLOCATE_FACTOR 4
 #endif
 
+#define INTERNED_STRINGS
+
 /* This dictionary holds all interned unicode strings.  Note that references
    to strings in this dictionary are *not* counted in the string's ob_refcnt.
    When the interned string reaches a refcnt of 0 the string deallocation
@@ -203,7 +215,9 @@
    Another way to look at this is that to say that the actual reference
    count of a string is:  s->ob_refcnt + (s->state ? 2 : 0)
 */
+#ifdef INTERNED_STRINGS
 static PyObject *interned = NULL;
+#endif
 
 /* The empty Unicode object is shared to improve performance. */
 static PyObject *unicode_empty = NULL;
@@ -265,6 +279,8 @@
 /* Forward declaration */
 static inline int
 _PyUnicodeWriter_WriteCharInline(_PyUnicodeWriter *writer, Py_UCS4 ch);
+static inline void
+_PyUnicodeWriter_InitWithBuffer(_PyUnicodeWriter *writer, PyObject *buffer);
 static PyObject *
 unicode_encode_utf8(PyObject *unicode, _Py_error_handler error_handler,
                     const char *errors);
@@ -276,9 +292,13 @@
 /* List of static strings. */
 static _Py_Identifier *static_strings = NULL;
 
+#define LATIN1_SINGLETONS
+
+#ifdef LATIN1_SINGLETONS
 /* Single character Unicode strings in the Latin-1 range are being
    shared as well. */
 static PyObject *unicode_latin1[256] = {NULL};
+#endif
 
 /* Fast detection of the most frequent whitespace characters */
 const unsigned char _Py_ascii_whitespace[] = {
@@ -425,6 +445,54 @@
 }
 
 
+static inline int
+unicode_check_encoding_errors(const char *encoding, const char *errors)
+{
+    if (encoding == NULL && errors == NULL) {
+        return 0;
+    }
+
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+#ifndef Py_DEBUG
+    /* In release mode, only check in development mode (-X dev) */
+    if (!_PyInterpreterState_GetConfig(interp)->dev_mode) {
+        return 0;
+    }
+#else
+    /* Always check in debug mode */
+#endif
+
+    /* Avoid calling _PyCodec_Lookup() and PyCodec_LookupError() before the
+       codec registry is ready: before_PyUnicode_InitEncodings() is called. */
+    if (!interp->unicode.fs_codec.encoding) {
+        return 0;
+    }
+
+    /* Disable checks during Python finalization. For example, it allows to
+       call _PyObject_Dump() during finalization for debugging purpose. */
+    if (interp->finalizing) {
+        return 0;
+    }
+
+    if (encoding != NULL) {
+        PyObject *handler = _PyCodec_Lookup(encoding);
+        if (handler == NULL) {
+            return -1;
+        }
+        Py_DECREF(handler);
+    }
+
+    if (errors != NULL) {
+        PyObject *handler = PyCodec_LookupError(errors);
+        if (handler == NULL) {
+            return -1;
+        }
+        Py_DECREF(handler);
+    }
+    return 0;
+}
+
+
 /* The max unicode value is always 0x10FFFF while using the PEP-393 API.
    This function is kept for backward compatibility with the old API. */
 Py_UNICODE
@@ -526,7 +594,7 @@
     if (check_content && kind != PyUnicode_WCHAR_KIND) {
         Py_ssize_t i;
         Py_UCS4 maxchar = 0;
-        void *data;
+        const void *data;
         Py_UCS4 ch;
 
         data = PyUnicode_DATA(ascii);
@@ -609,8 +677,9 @@
         return unicode_empty;
     }
 
+#ifdef LATIN1_SINGLETONS
     if (length == 1) {
-        void *data = PyUnicode_DATA(unicode);
+        const void *data = PyUnicode_DATA(unicode);
         int kind = PyUnicode_KIND(unicode);
         Py_UCS4 ch = PyUnicode_READ(kind, data, 0);
         if (ch < 256) {
@@ -630,6 +699,7 @@
             }
         }
     }
+#endif
 
     assert(_PyUnicode_CheckConsistency(unicode, 1));
     return unicode;
@@ -668,7 +738,7 @@
     Py_ssize_t size, i;
     Py_UCS4 ch;
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
 
     assert(PyUnicode_IS_READY(unicode));
     kind = PyUnicode_KIND(unicode);
@@ -735,7 +805,7 @@
     Py_ssize_t size, i;
     Py_UCS4 ch;
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
 
     assert(PyUnicode_IS_READY(unicode));
     kind = PyUnicode_KIND(unicode);
@@ -777,7 +847,11 @@
 
     /* generate replacement */
     for (i = collstart; i < collend; ++i) {
-        str += sprintf(str, "&#%d;", PyUnicode_READ(kind, data, i));
+        size = sprintf(str, "&#%d;", PyUnicode_READ(kind, data, i));
+        if (size < 0) {
+            return NULL;
+        }
+        str += size;
     }
     return str;
 }
@@ -811,7 +885,7 @@
      (BLOOM(bloom_linebreak, (ch)) && Py_UNICODE_ISLINEBREAK(ch)))
 
 static inline BLOOM_MASK
-make_bloom_mask(int kind, void* ptr, Py_ssize_t len)
+make_bloom_mask(int kind, const void* ptr, Py_ssize_t len)
 {
 #define BLOOM_UPDATE(TYPE, MASK, PTR, LEN)             \
     do {                                               \
@@ -901,11 +975,14 @@
 #include "stringlib/find_max_char.h"
 #include "stringlib/undef.h"
 
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
 #include "stringlib/unicodedefs.h"
 #include "stringlib/fastsearch.h"
 #include "stringlib/count.h"
 #include "stringlib/find.h"
 #include "stringlib/undef.h"
+_Py_COMP_DIAG_POP
 
 /* --- Unicode Object ----------------------------------------------------- */
 
@@ -992,8 +1069,12 @@
         _PyUnicode_UTF8(unicode) = NULL;
         _PyUnicode_UTF8_LENGTH(unicode) = 0;
     }
-    _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+    _Py_RefTotal--;
+#endif
+#ifdef Py_TRACE_REFS
     _Py_ForgetReference(unicode);
+#endif
 
     new_unicode = (PyObject *)PyObject_REALLOC(unicode, new_size);
     if (new_unicode == NULL) {
@@ -1246,16 +1327,16 @@
 
 #ifdef Py_DEBUG
 /* Functions wrapping macros for use in debugger */
-char *_PyUnicode_utf8(void *unicode_raw){
+const char *_PyUnicode_utf8(void *unicode_raw){
     PyObject *unicode = _PyObject_CAST(unicode_raw);
     return PyUnicode_UTF8(unicode);
 }
 
-void *_PyUnicode_compact_data(void *unicode_raw) {
+const void *_PyUnicode_compact_data(void *unicode_raw) {
     PyObject *unicode = _PyObject_CAST(unicode_raw);
     return _PyUnicode_COMPACT_DATA(unicode);
 }
-void *_PyUnicode_data(void *unicode_raw) {
+const void *_PyUnicode_data(void *unicode_raw) {
     PyObject *unicode = _PyObject_CAST(unicode_raw);
     printf("obj %p\n", (void*)unicode);
     printf("compact %d\n", PyUnicode_IS_COMPACT(unicode));
@@ -1272,7 +1353,7 @@
     PyASCIIObject *ascii = (PyASCIIObject *)op;
     PyCompactUnicodeObject *compact = (PyCompactUnicodeObject *)op;
     PyUnicodeObject *unicode = (PyUnicodeObject *)op;
-    void *data;
+    const void *data;
 
     if (ascii->state.compact)
     {
@@ -1472,7 +1553,8 @@
                  Py_ssize_t how_many, int check_maxchar)
 {
     unsigned int from_kind, to_kind;
-    void *from_data, *to_data;
+    const void *from_data;
+    void *to_data;
 
     assert(0 <= how_many);
     assert(0 <= from_start);
@@ -1497,7 +1579,7 @@
     if (!check_maxchar
         && PyUnicode_MAX_CHAR_VALUE(from) > PyUnicode_MAX_CHAR_VALUE(to))
     {
-        const Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
+        Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
         Py_UCS4 ch;
         Py_ssize_t i;
         for (i=0; i < how_many; i++) {
@@ -1515,12 +1597,12 @@
                check that all written characters are pure ASCII */
             Py_UCS4 max_char;
             max_char = ucs1lib_find_max_char(from_data,
-                                             (Py_UCS1*)from_data + how_many);
+                                             (const Py_UCS1*)from_data + how_many);
             if (max_char >= 128)
                 return -1;
         }
         memcpy((char*)to_data + to_kind * to_start,
-                  (char*)from_data + from_kind * from_start,
+                  (const char*)from_data + from_kind * from_start,
                   to_kind * how_many);
     }
     else if (from_kind == PyUnicode_1BYTE_KIND
@@ -1804,7 +1886,7 @@
         _PyUnicode_WSTR_LENGTH(unicode) = 0;
 #endif
     }
-    /* maxchar exeeds 16 bit, wee need 4 bytes for unicode characters */
+    /* maxchar exceeds 16 bit, wee need 4 bytes for unicode characters */
     else {
 #if SIZEOF_WCHAR_T == 2
         /* in case the native representation is 2-bytes, we need to allocate a
@@ -1854,26 +1936,32 @@
 
     case SSTATE_INTERNED_MORTAL:
         /* revive dead object temporarily for DelItem */
-        Py_REFCNT(unicode) = 3;
-        if (PyDict_DelItem(interned, unicode) != 0)
-            Py_FatalError(
-                "deletion of interned string failed");
+        Py_SET_REFCNT(unicode, 3);
+#ifdef INTERNED_STRINGS
+        if (PyDict_DelItem(interned, unicode) != 0) {
+            _PyErr_WriteUnraisableMsg("deletion of interned string failed",
+                                      NULL);
+        }
+#endif
         break;
 
     case SSTATE_INTERNED_IMMORTAL:
-        Py_FatalError("Immortal interned string died.");
-        /* fall through */
+        _PyObject_ASSERT_FAILED_MSG(unicode, "Immortal interned string died");
+        break;
 
     default:
-        Py_FatalError("Inconsistent interned string state.");
+        Py_UNREACHABLE();
     }
 
-    if (_PyUnicode_HAS_WSTR_MEMORY(unicode))
+    if (_PyUnicode_HAS_WSTR_MEMORY(unicode)) {
         PyObject_DEL(_PyUnicode_WSTR(unicode));
-    if (_PyUnicode_HAS_UTF8_MEMORY(unicode))
+    }
+    if (_PyUnicode_HAS_UTF8_MEMORY(unicode)) {
         PyObject_DEL(_PyUnicode_UTF8(unicode));
-    if (!PyUnicode_IS_COMPACT(unicode) && _PyUnicode_DATA_ANY(unicode))
+    }
+    if (!PyUnicode_IS_COMPACT(unicode) && _PyUnicode_DATA_ANY(unicode)) {
         PyObject_DEL(_PyUnicode_DATA_ANY(unicode));
+    }
 
     Py_TYPE(unicode)->tp_free(unicode);
 }
@@ -1882,15 +1970,18 @@
 static int
 unicode_is_singleton(PyObject *unicode)
 {
-    PyASCIIObject *ascii = (PyASCIIObject *)unicode;
-    if (unicode == unicode_empty)
+    if (unicode == unicode_empty) {
         return 1;
+    }
+#ifdef LATIN1_SINGLETONS
+    PyASCIIObject *ascii = (PyASCIIObject *)unicode;
     if (ascii->state.kind != PyUnicode_WCHAR_KIND && ascii->length == 1)
     {
         Py_UCS4 ch = PyUnicode_READ_CHAR(unicode, 0);
         if (ch < 256 && unicode_latin1[ch] == unicode)
             return 1;
     }
+#endif
     return 0;
 }
 #endif
@@ -1987,12 +2078,12 @@
                    const char *str, Py_ssize_t len)
 {
     enum PyUnicode_Kind kind = PyUnicode_KIND(unicode);
-    void *data = PyUnicode_DATA(unicode);
+    const void *data = PyUnicode_DATA(unicode);
     const char *end = str + len;
 
+    assert(index + len <= PyUnicode_GET_LENGTH(unicode));
     switch (kind) {
     case PyUnicode_1BYTE_KIND: {
-        assert(index + len <= PyUnicode_GET_LENGTH(unicode));
 #ifdef Py_DEBUG
         if (PyUnicode_IS_ASCII(unicode)) {
             Py_UCS4 maxchar = ucs1lib_find_max_char(
@@ -2007,7 +2098,6 @@
     case PyUnicode_2BYTE_KIND: {
         Py_UCS2 *start = (Py_UCS2 *)data + index;
         Py_UCS2 *ucs2 = start;
-        assert(index <= PyUnicode_GET_LENGTH(unicode));
 
         for (; str < end; ++ucs2, ++str)
             *ucs2 = (Py_UCS2)*str;
@@ -2015,33 +2105,46 @@
         assert((ucs2 - start) <= PyUnicode_GET_LENGTH(unicode));
         break;
     }
-    default: {
+    case PyUnicode_4BYTE_KIND: {
         Py_UCS4 *start = (Py_UCS4 *)data + index;
         Py_UCS4 *ucs4 = start;
-        assert(kind == PyUnicode_4BYTE_KIND);
-        assert(index <= PyUnicode_GET_LENGTH(unicode));
 
         for (; str < end; ++ucs4, ++str)
             *ucs4 = (Py_UCS4)*str;
 
         assert((ucs4 - start) <= PyUnicode_GET_LENGTH(unicode));
+        break;
     }
+    default:
+        Py_UNREACHABLE();
     }
 }
 
 static PyObject*
 get_latin1_char(unsigned char ch)
 {
-    PyObject *unicode = unicode_latin1[ch];
-    if (!unicode) {
-        unicode = PyUnicode_New(1, ch);
-        if (!unicode)
-            return NULL;
-        PyUnicode_1BYTE_DATA(unicode)[0] = ch;
-        assert(_PyUnicode_CheckConsistency(unicode, 1));
-        unicode_latin1[ch] = unicode;
+    PyObject *unicode;
+
+#ifdef LATIN1_SINGLETONS
+    unicode = unicode_latin1[ch];
+    if (unicode) {
+        Py_INCREF(unicode);
+        return unicode;
     }
+#endif
+
+    unicode = PyUnicode_New(1, ch);
+    if (!unicode) {
+        return NULL;
+    }
+
+    PyUnicode_1BYTE_DATA(unicode)[0] = ch;
+    assert(_PyUnicode_CheckConsistency(unicode, 1));
+
+#ifdef LATIN1_SINGLETONS
     Py_INCREF(unicode);
+    unicode_latin1[ch] = unicode;
+#endif
     return unicode;
 }
 
@@ -2194,8 +2297,8 @@
     return id->object;
 }
 
-void
-_PyUnicode_ClearStaticStrings()
+static void
+unicode_clear_static_strings(void)
 {
     _Py_Identifier *tmp, *s = static_strings;
     while (s) {
@@ -2342,7 +2445,7 @@
 _PyUnicode_FindMaxChar(PyObject *unicode, Py_ssize_t start, Py_ssize_t end)
 {
     enum PyUnicode_Kind kind;
-    void *startptr, *endptr;
+    const void *startptr, *endptr;
 
     assert(PyUnicode_IS_READY(unicode));
     assert(0 <= start);
@@ -2405,13 +2508,15 @@
         if (max_char >= 256)
             return;
     }
-    else {
+    else if (kind == PyUnicode_4BYTE_KIND) {
         const Py_UCS4 *u = PyUnicode_4BYTE_DATA(unicode);
-        assert(kind == PyUnicode_4BYTE_KIND);
         max_char = ucs4lib_find_max_char(u, u + len);
         if (max_char >= 0x10000)
             return;
     }
+    else
+        Py_UNREACHABLE();
+
     copy = PyUnicode_New(len, max_char);
     if (copy != NULL)
         _PyUnicode_FastCopyCharacters(copy, 0, unicode, 0, len);
@@ -2448,22 +2553,12 @@
 /* Widen Unicode objects to larger buffers. Don't write terminating null
    character. Return NULL on error. */
 
-void*
-_PyUnicode_AsKind(PyObject *s, unsigned int kind)
+static void*
+unicode_askind(unsigned int skind, void const *data, Py_ssize_t len, unsigned int kind)
 {
-    Py_ssize_t len;
     void *result;
-    unsigned int skind;
 
-    if (PyUnicode_READY(s) == -1)
-        return NULL;
-
-    len = PyUnicode_GET_LENGTH(s);
-    skind = PyUnicode_KIND(s);
-    if (skind >= kind) {
-        PyErr_SetString(PyExc_SystemError, "invalid widening attempt");
-        return NULL;
-    }
+    assert(skind < kind);
     switch (kind) {
     case PyUnicode_2BYTE_KIND:
         result = PyMem_New(Py_UCS2, len);
@@ -2472,8 +2567,8 @@
         assert(skind == PyUnicode_1BYTE_KIND);
         _PyUnicode_CONVERT_BYTES(
             Py_UCS1, Py_UCS2,
-            PyUnicode_1BYTE_DATA(s),
-            PyUnicode_1BYTE_DATA(s) + len,
+            (const Py_UCS1 *)data,
+            ((const Py_UCS1 *)data) + len,
             result);
         return result;
     case PyUnicode_4BYTE_KIND:
@@ -2483,24 +2578,23 @@
         if (skind == PyUnicode_2BYTE_KIND) {
             _PyUnicode_CONVERT_BYTES(
                 Py_UCS2, Py_UCS4,
-                PyUnicode_2BYTE_DATA(s),
-                PyUnicode_2BYTE_DATA(s) + len,
+                (const Py_UCS2 *)data,
+                ((const Py_UCS2 *)data) + len,
                 result);
         }
         else {
             assert(skind == PyUnicode_1BYTE_KIND);
             _PyUnicode_CONVERT_BYTES(
                 Py_UCS1, Py_UCS4,
-                PyUnicode_1BYTE_DATA(s),
-                PyUnicode_1BYTE_DATA(s) + len,
+                (const Py_UCS1 *)data,
+                ((const Py_UCS1 *)data) + len,
                 result);
         }
         return result;
     default:
-        break;
+        Py_UNREACHABLE();
+        return NULL;
     }
-    PyErr_SetString(PyExc_SystemError, "invalid kind");
-    return NULL;
 }
 
 static Py_UCS4*
@@ -2508,7 +2602,7 @@
         int copy_null)
 {
     int kind;
-    void *data;
+    const void *data;
     Py_ssize_t len, targetlen;
     if (PyUnicode_READY(string) == -1)
         return NULL;
@@ -2535,17 +2629,19 @@
         }
     }
     if (kind == PyUnicode_1BYTE_KIND) {
-        Py_UCS1 *start = (Py_UCS1 *) data;
+        const Py_UCS1 *start = (const Py_UCS1 *) data;
         _PyUnicode_CONVERT_BYTES(Py_UCS1, Py_UCS4, start, start + len, target);
     }
     else if (kind == PyUnicode_2BYTE_KIND) {
-        Py_UCS2 *start = (Py_UCS2 *) data;
+        const Py_UCS2 *start = (const Py_UCS2 *) data;
         _PyUnicode_CONVERT_BYTES(Py_UCS2, Py_UCS4, start, start + len, target);
     }
-    else {
-        assert(kind == PyUnicode_4BYTE_KIND);
+    else if (kind == PyUnicode_4BYTE_KIND) {
         memcpy(target, data, len * sizeof(Py_UCS4));
     }
+    else {
+        Py_UNREACHABLE();
+    }
     if (copy_null)
         target[len] = 0;
     return target;
@@ -3215,12 +3311,15 @@
 
     /* Decoding bytes objects is the most common case and should be fast */
     if (PyBytes_Check(obj)) {
-        if (PyBytes_GET_SIZE(obj) == 0)
+        if (PyBytes_GET_SIZE(obj) == 0) {
+            if (unicode_check_encoding_errors(encoding, errors) < 0) {
+                return NULL;
+            }
             _Py_RETURN_UNICODE_EMPTY();
-        v = PyUnicode_Decode(
+        }
+        return PyUnicode_Decode(
                 PyBytes_AS_STRING(obj), PyBytes_GET_SIZE(obj),
                 encoding, errors);
-        return v;
     }
 
     if (PyUnicode_Check(obj)) {
@@ -3239,6 +3338,9 @@
 
     if (buffer.len == 0) {
         PyBuffer_Release(&buffer);
+        if (unicode_check_encoding_errors(encoding, errors) < 0) {
+            return NULL;
+        }
         _Py_RETURN_UNICODE_EMPTY();
     }
 
@@ -3306,6 +3408,14 @@
     Py_buffer info;
     char buflower[11];   /* strlen("iso-8859-1\0") == 11, longest shortcut */
 
+    if (unicode_check_encoding_errors(encoding, errors) < 0) {
+        return NULL;
+    }
+
+    if (size == 0) {
+        _Py_RETURN_UNICODE_EMPTY();
+    }
+
     if (encoding == NULL) {
         return PyUnicode_DecodeUTF8Stateful(s, size, errors, NULL);
     }
@@ -3547,39 +3657,35 @@
 PyObject *
 PyUnicode_EncodeFSDefault(PyObject *unicode)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-#ifdef _Py_FORCE_UTF8_FS_ENCODING
-    if (interp->fs_codec.encoding) {
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
+    if (fs_codec->utf8) {
         return unicode_encode_utf8(unicode,
-                                   interp->fs_codec.error_handler,
-                                   interp->fs_codec.errors);
+                                   fs_codec->error_handler,
+                                   fs_codec->errors);
     }
-    else {
-        const wchar_t *filesystem_errors = interp->config.filesystem_errors;
-        _Py_error_handler errors;
-        errors = get_error_handler_wide(filesystem_errors);
-        assert(errors != _Py_ERROR_UNKNOWN);
-        return unicode_encode_utf8(unicode, errors, NULL);
-    }
-#else
-    /* Bootstrap check: if the filesystem codec is implemented in Python, we
-       cannot use it to encode and decode filenames before it is loaded. Load
-       the Python codec requires to encode at least its own filename. Use the C
-       implementation of the locale codec until the codec registry is
-       initialized and the Python codec is loaded. See initfsencoding(). */
-    if (interp->fs_codec.encoding) {
+#ifndef _Py_FORCE_UTF8_FS_ENCODING
+    else if (fs_codec->encoding) {
         return PyUnicode_AsEncodedString(unicode,
-                                         interp->fs_codec.encoding,
-                                         interp->fs_codec.errors);
-    }
-    else {
-        const wchar_t *filesystem_errors = interp->config.filesystem_errors;
-        _Py_error_handler errors;
-        errors = get_error_handler_wide(filesystem_errors);
-        assert(errors != _Py_ERROR_UNKNOWN);
-        return unicode_encode_locale(unicode, errors, 0);
+                                         fs_codec->encoding,
+                                         fs_codec->errors);
     }
 #endif
+    else {
+        /* Before _PyUnicode_InitEncodings() is called, the Python codec
+           machinery is not ready and so cannot be used:
+           use wcstombs() in this case. */
+        const PyConfig *config = _PyInterpreterState_GetConfig(interp);
+        const wchar_t *filesystem_errors = config->filesystem_errors;
+        assert(filesystem_errors != NULL);
+        _Py_error_handler errors = get_error_handler_wide(filesystem_errors);
+        assert(errors != _Py_ERROR_UNKNOWN);
+#ifdef _Py_FORCE_UTF8_FS_ENCODING
+        return unicode_encode_utf8(unicode, errors, NULL);
+#else
+        return unicode_encode_locale(unicode, errors, 0);
+#endif
+    }
 }
 
 PyObject *
@@ -3595,6 +3701,10 @@
         return NULL;
     }
 
+    if (unicode_check_encoding_errors(encoding, errors) < 0) {
+        return NULL;
+    }
+
     if (encoding == NULL) {
         return _PyUnicode_AsUTF8String(unicode, errors);
     }
@@ -3784,39 +3894,36 @@
 PyObject*
 PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-#ifdef _Py_FORCE_UTF8_FS_ENCODING
-    if (interp->fs_codec.encoding) {
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
+    if (fs_codec->utf8) {
         return unicode_decode_utf8(s, size,
-                                   interp->fs_codec.error_handler,
-                                   interp->fs_codec.errors,
+                                   fs_codec->error_handler,
+                                   fs_codec->errors,
                                    NULL);
     }
-    else {
-        const wchar_t *filesystem_errors = interp->config.filesystem_errors;
-        _Py_error_handler errors;
-        errors = get_error_handler_wide(filesystem_errors);
-        assert(errors != _Py_ERROR_UNKNOWN);
-        return unicode_decode_utf8(s, size, errors, NULL, NULL);
-    }
-#else
-    /* Bootstrap check: if the filesystem codec is implemented in Python, we
-       cannot use it to encode and decode filenames before it is loaded. Load
-       the Python codec requires to encode at least its own filename. Use the C
-       implementation of the locale codec until the codec registry is
-       initialized and the Python codec is loaded. See initfsencoding(). */
-    if (interp->fs_codec.encoding) {
+#ifndef _Py_FORCE_UTF8_FS_ENCODING
+    else if (fs_codec->encoding) {
         return PyUnicode_Decode(s, size,
-                                interp->fs_codec.encoding,
-                                interp->fs_codec.errors);
-    }
-    else {
-        const wchar_t *filesystem_errors = interp->config.filesystem_errors;
-        _Py_error_handler errors;
-        errors = get_error_handler_wide(filesystem_errors);
-        return unicode_decode_locale(s, size, errors, 0);
+                                fs_codec->encoding,
+                                fs_codec->errors);
     }
 #endif
+    else {
+        /* Before _PyUnicode_InitEncodings() is called, the Python codec
+           machinery is not ready and so cannot be used:
+           use mbstowcs() in this case. */
+        const PyConfig *config = _PyInterpreterState_GetConfig(interp);
+        const wchar_t *filesystem_errors = config->filesystem_errors;
+        assert(filesystem_errors != NULL);
+        _Py_error_handler errors = get_error_handler_wide(filesystem_errors);
+        assert(errors != _Py_ERROR_UNKNOWN);
+#ifdef _Py_FORCE_UTF8_FS_ENCODING
+        return unicode_decode_utf8(s, size, errors, NULL, NULL);
+#else
+        return unicode_decode_locale(s, size, errors, 0);
+#endif
+    }
 }
 
 
@@ -3826,7 +3933,7 @@
     PyObject *path = NULL;
     PyObject *output = NULL;
     Py_ssize_t size;
-    void *data;
+    const char *data;
     if (arg == NULL) {
         Py_DECREF(*(PyObject**)addr);
         *(PyObject**)addr = NULL;
@@ -3931,11 +4038,11 @@
 }
 
 
+static int unicode_fill_utf8(PyObject *unicode);
+
 const char *
 PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize)
 {
-    PyObject *bytes;
-
     if (!PyUnicode_Check(unicode)) {
         PyErr_BadArgument();
         return NULL;
@@ -3944,21 +4051,9 @@
         return NULL;
 
     if (PyUnicode_UTF8(unicode) == NULL) {
-        assert(!PyUnicode_IS_COMPACT_ASCII(unicode));
-        bytes = _PyUnicode_AsUTF8String(unicode, NULL);
-        if (bytes == NULL)
-            return NULL;
-        _PyUnicode_UTF8(unicode) = PyObject_MALLOC(PyBytes_GET_SIZE(bytes) + 1);
-        if (_PyUnicode_UTF8(unicode) == NULL) {
-            PyErr_NoMemory();
-            Py_DECREF(bytes);
+        if (unicode_fill_utf8(unicode) == -1) {
             return NULL;
         }
-        _PyUnicode_UTF8_LENGTH(unicode) = PyBytes_GET_SIZE(bytes);
-        memcpy(_PyUnicode_UTF8(unicode),
-                  PyBytes_AS_STRING(bytes),
-                  _PyUnicode_UTF8_LENGTH(unicode) + 1);
-        Py_DECREF(bytes);
     }
 
     if (psize)
@@ -4006,6 +4101,11 @@
     return w;
 }
 
+/* Deprecated APIs */
+
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
+
 Py_UNICODE *
 PyUnicode_AsUnicode(PyObject *unicode)
 {
@@ -4044,6 +4144,8 @@
     return -1;
 }
 
+_Py_COMP_DIAG_POP
+
 Py_ssize_t
 PyUnicode_GetLength(PyObject *unicode)
 {
@@ -4059,7 +4161,7 @@
 Py_UCS4
 PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index)
 {
-    void *data;
+    const void *data;
     int kind;
 
     if (!PyUnicode_Check(unicode)) {
@@ -4190,7 +4292,7 @@
     if (*exceptionObject == NULL)
         goto onError;
 
-    restuple = PyObject_CallFunctionObjArgs(*errorHandler, *exceptionObject, NULL);
+    restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
     if (restuple == NULL)
         goto onError;
     if (!PyTuple_Check(restuple)) {
@@ -4294,7 +4396,7 @@
     if (*exceptionObject == NULL)
         goto onError;
 
-    restuple = PyObject_CallFunctionObjArgs(*errorHandler, *exceptionObject, NULL);
+    restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
     if (restuple == NULL)
         goto onError;
     if (!PyTuple_Check(restuple)) {
@@ -4661,7 +4763,7 @@
                       const char *errors)
 {
     int kind;
-    void *data;
+    const void *data;
     Py_ssize_t len;
     PyObject *v;
     int inShift = 0;
@@ -4669,7 +4771,7 @@
     unsigned int base64bits = 0;
     unsigned long base64buffer = 0;
     char * out;
-    char * start;
+    const char * start;
 
     if (PyUnicode_READY(str) == -1)
         return NULL;
@@ -4883,16 +4985,6 @@
                     _Py_error_handler error_handler, const char *errors,
                     Py_ssize_t *consumed)
 {
-    _PyUnicodeWriter writer;
-    const char *starts = s;
-    const char *end = s + size;
-
-    Py_ssize_t startinpos;
-    Py_ssize_t endinpos;
-    const char *errmsg = "";
-    PyObject *error_handler_obj = NULL;
-    PyObject *exc = NULL;
-
     if (size == 0) {
         if (consumed)
             *consumed = 0;
@@ -4906,13 +4998,29 @@
         return get_latin1_char((unsigned char)s[0]);
     }
 
-    _PyUnicodeWriter_Init(&writer);
-    writer.min_length = size;
-    if (_PyUnicodeWriter_Prepare(&writer, writer.min_length, 127) == -1)
-        goto onError;
+    const char *starts = s;
+    const char *end = s + size;
 
-    writer.pos = ascii_decode(s, end, writer.data);
-    s += writer.pos;
+    // fast path: try ASCII string.
+    PyObject *u = PyUnicode_New(size, 127);
+    if (u == NULL) {
+        return NULL;
+    }
+    s += ascii_decode(s, end, PyUnicode_1BYTE_DATA(u));
+    if (s == end) {
+        return u;
+    }
+
+    // Use _PyUnicodeWriter after fast path is failed.
+    _PyUnicodeWriter writer;
+    _PyUnicodeWriter_InitWithBuffer(&writer, u);
+    writer.pos = s - starts;
+
+    Py_ssize_t startinpos, endinpos;
+    const char *errmsg = "";
+    PyObject *error_handler_obj = NULL;
+    PyObject *exc = NULL;
+
     while (s < end) {
         Py_UCS4 ch;
         int kind = writer.kind;
@@ -5315,10 +5423,6 @@
 unicode_encode_utf8(PyObject *unicode, _Py_error_handler error_handler,
                     const char *errors)
 {
-    enum PyUnicode_Kind kind;
-    void *data;
-    Py_ssize_t size;
-
     if (!PyUnicode_Check(unicode)) {
         PyErr_BadArgument();
         return NULL;
@@ -5331,9 +5435,12 @@
         return PyBytes_FromStringAndSize(PyUnicode_UTF8(unicode),
                                          PyUnicode_UTF8_LENGTH(unicode));
 
-    kind = PyUnicode_KIND(unicode);
-    data = PyUnicode_DATA(unicode);
-    size = PyUnicode_GET_LENGTH(unicode);
+    enum PyUnicode_Kind kind = PyUnicode_KIND(unicode);
+    const void *data = PyUnicode_DATA(unicode);
+    Py_ssize_t size = PyUnicode_GET_LENGTH(unicode);
+
+    _PyBytesWriter writer;
+    char *end;
 
     switch (kind) {
     default:
@@ -5341,12 +5448,73 @@
     case PyUnicode_1BYTE_KIND:
         /* the string cannot be ASCII, or PyUnicode_UTF8() would be set */
         assert(!PyUnicode_IS_ASCII(unicode));
-        return ucs1lib_utf8_encoder(unicode, data, size, error_handler, errors);
+        end = ucs1lib_utf8_encoder(&writer, unicode, data, size, error_handler, errors);
+        break;
     case PyUnicode_2BYTE_KIND:
-        return ucs2lib_utf8_encoder(unicode, data, size, error_handler, errors);
+        end = ucs2lib_utf8_encoder(&writer, unicode, data, size, error_handler, errors);
+        break;
     case PyUnicode_4BYTE_KIND:
-        return ucs4lib_utf8_encoder(unicode, data, size, error_handler, errors);
+        end = ucs4lib_utf8_encoder(&writer, unicode, data, size, error_handler, errors);
+        break;
     }
+
+    if (end == NULL) {
+        _PyBytesWriter_Dealloc(&writer);
+        return NULL;
+    }
+    return _PyBytesWriter_Finish(&writer, end);
+}
+
+static int
+unicode_fill_utf8(PyObject *unicode)
+{
+    /* the string cannot be ASCII, or PyUnicode_UTF8() would be set */
+    assert(!PyUnicode_IS_ASCII(unicode));
+
+    enum PyUnicode_Kind kind = PyUnicode_KIND(unicode);
+    const void *data = PyUnicode_DATA(unicode);
+    Py_ssize_t size = PyUnicode_GET_LENGTH(unicode);
+
+    _PyBytesWriter writer;
+    char *end;
+
+    switch (kind) {
+    default:
+        Py_UNREACHABLE();
+    case PyUnicode_1BYTE_KIND:
+        end = ucs1lib_utf8_encoder(&writer, unicode, data, size,
+                                   _Py_ERROR_STRICT, NULL);
+        break;
+    case PyUnicode_2BYTE_KIND:
+        end = ucs2lib_utf8_encoder(&writer, unicode, data, size,
+                                   _Py_ERROR_STRICT, NULL);
+        break;
+    case PyUnicode_4BYTE_KIND:
+        end = ucs4lib_utf8_encoder(&writer, unicode, data, size,
+                                   _Py_ERROR_STRICT, NULL);
+        break;
+    }
+    if (end == NULL) {
+        _PyBytesWriter_Dealloc(&writer);
+        return -1;
+    }
+
+    const char *start = writer.use_small_buffer ? writer.small_buffer :
+                    PyBytes_AS_STRING(writer.buffer);
+    Py_ssize_t len = end - start;
+
+    char *cache = PyObject_MALLOC(len + 1);
+    if (cache == NULL) {
+        _PyBytesWriter_Dealloc(&writer);
+        PyErr_NoMemory();
+        return -1;
+    }
+    _PyUnicode_UTF8(unicode) = cache;
+    _PyUnicode_UTF8_LENGTH(unicode) = len;
+    memcpy(cache, start, len);
+    cache[len] = '\0';
+    _PyBytesWriter_Dealloc(&writer);
+    return 0;
 }
 
 PyObject *
@@ -6313,7 +6481,7 @@
     PyObject *repr;
     char *p;
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
     Py_ssize_t expandsize;
 
     /* Initial allocation is based on the longest-possible character
@@ -6461,7 +6629,7 @@
        length after conversion to the true value. (But decoding error
        handler might have to resize the string) */
     _PyUnicodeWriter_Init(&writer);
-     writer.min_length = size;
+    writer.min_length = size;
     if (_PyUnicodeWriter_Prepare(&writer, size, 127) < 0) {
         goto onError;
     }
@@ -6567,7 +6735,7 @@
     char *p;
     Py_ssize_t expandsize, pos;
     int kind;
-    void *data;
+    const void *data;
     Py_ssize_t len;
 
     if (!PyUnicode_Check(unicode)) {
@@ -6735,8 +6903,7 @@
     if (*exceptionObject == NULL)
         return NULL;
 
-    restuple = PyObject_CallFunctionObjArgs(
-        *errorHandler, *exceptionObject, NULL);
+    restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
     if (restuple == NULL)
         return NULL;
     if (!PyTuple_Check(restuple)) {
@@ -6774,7 +6941,7 @@
     /* input state */
     Py_ssize_t pos=0, size;
     int kind;
-    void *data;
+    const void *data;
     /* pointer into the output */
     char *str;
     const char *encoding = (limit == 256) ? "latin-1" : "ascii";
@@ -6985,13 +7152,7 @@
                       const char *errors)
 {
     const char *starts = s;
-    _PyUnicodeWriter writer;
-    int kind;
-    void *data;
-    Py_ssize_t startinpos;
-    Py_ssize_t endinpos;
-    Py_ssize_t outpos;
-    const char *e;
+    const char *e = s + size;
     PyObject *error_handler_obj = NULL;
     PyObject *exc = NULL;
     _Py_error_handler error_handler = _Py_ERROR_UNKNOWN;
@@ -7003,20 +7164,25 @@
     if (size == 1 && (unsigned char)s[0] < 128)
         return get_latin1_char((unsigned char)s[0]);
 
-    _PyUnicodeWriter_Init(&writer);
-    writer.min_length = size;
-    if (_PyUnicodeWriter_Prepare(&writer, writer.min_length, 127) < 0)
+    // Shortcut for simple case
+    PyObject *u = PyUnicode_New(size, 127);
+    if (u == NULL) {
         return NULL;
+    }
+    Py_ssize_t outpos = ascii_decode(s, e, PyUnicode_1BYTE_DATA(u));
+    if (outpos == size) {
+        return u;
+    }
 
-    e = s + size;
-    data = writer.data;
-    outpos = ascii_decode(s, e, (Py_UCS1 *)data);
+    _PyUnicodeWriter writer;
+    _PyUnicodeWriter_InitWithBuffer(&writer, u);
     writer.pos = outpos;
-    if (writer.pos == size)
-        return _PyUnicodeWriter_Finish(&writer);
 
-    s += writer.pos;
-    kind = writer.kind;
+    s += outpos;
+    int kind = writer.kind;
+    void *data = writer.data;
+    Py_ssize_t startinpos, endinpos;
+
     while (s < e) {
         unsigned char c = (unsigned char)*s;
         if (c < 128) {
@@ -7690,7 +7856,7 @@
         else {
             Py_ssize_t i;
             enum PyUnicode_Kind kind;
-            void *data;
+            const void *data;
 
             if (PyUnicode_READY(rep) == -1) {
                 Py_DECREF(rep);
@@ -7848,7 +8014,7 @@
     PyObject *errorHandler = NULL, *exc = NULL;
     Py_ssize_t maplen;
     enum PyUnicode_Kind mapkind;
-    void *mapdata;
+    const void *mapdata;
     Py_UCS4 x;
     unsigned char ch;
 
@@ -7865,7 +8031,7 @@
         /* fast-path for cp037, cp500 and iso8859_1 encodings. iso8859_1
          * is disabled in encoding aliases, latin1 is preferred because
          * its implementation is faster. */
-        Py_UCS1 *mapdata_ucs1 = (Py_UCS1 *)mapdata;
+        const Py_UCS1 *mapdata_ucs1 = (const Py_UCS1 *)mapdata;
         Py_UCS1 *outdata = (Py_UCS1 *)writer->data;
         Py_UCS4 maxchar = writer->maxchar;
 
@@ -7889,7 +8055,7 @@
     while (s < e) {
         if (mapkind == PyUnicode_2BYTE_KIND && maplen >= 256) {
             enum PyUnicode_Kind outkind = writer->kind;
-            Py_UCS2 *mapdata_ucs2 = (Py_UCS2 *)mapdata;
+            const Py_UCS2 *mapdata_ucs2 = (const Py_UCS2 *)mapdata;
             if (outkind == PyUnicode_1BYTE_KIND) {
                 Py_UCS1 *outdata = (Py_UCS1 *)writer->data;
                 Py_UCS4 maxchar = writer->maxchar;
@@ -7998,7 +8164,7 @@
                 goto Undefined;
             if (value < 0 || value > MAX_UNICODE) {
                 PyErr_Format(PyExc_TypeError,
-                             "character mapping must be in range(0x%lx)",
+                             "character mapping must be in range(0x%x)",
                              (unsigned long)MAX_UNICODE + 1);
                 goto onError;
             }
@@ -8169,7 +8335,7 @@
     unsigned char *mlevel1, *mlevel2, *mlevel3;
     int count2 = 0, count3 = 0;
     int kind;
-    void *data;
+    const void *data;
     Py_ssize_t length;
     Py_UCS4 ch;
 
@@ -8337,7 +8503,7 @@
         /* wrong return value */
         PyErr_Format(PyExc_TypeError,
                      "character mapping must return integer, bytes or None, not %.400s",
-                     x->ob_type->tp_name);
+                     Py_TYPE(x)->tp_name);
         Py_DECREF(x);
         return NULL;
     }
@@ -8372,7 +8538,7 @@
     char *outstart;
     Py_ssize_t outsize = PyBytes_GET_SIZE(*outobj);
 
-    if (Py_TYPE(mapping) == &EncodingMapType) {
+    if (Py_IS_TYPE(mapping, &EncodingMapType)) {
         int res = encoding_map_lookup(c, mapping);
         Py_ssize_t requiredsize = *outpos+1;
         if (res == -1)
@@ -8433,7 +8599,7 @@
     Py_ssize_t size, repsize;
     Py_ssize_t newpos;
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
     Py_ssize_t index;
     /* startpos for collecting unencodable chars */
     Py_ssize_t collstartpos = *inpos;
@@ -8451,7 +8617,7 @@
     /* find all unencodable characters */
     while (collendpos < size) {
         PyObject *rep;
-        if (Py_TYPE(mapping) == &EncodingMapType) {
+        if (Py_IS_TYPE(mapping, &EncodingMapType)) {
             ch = PyUnicode_READ_CHAR(unicode, collendpos);
             val = encoding_map_lookup(ch, mapping);
             if (val != -1)
@@ -8583,7 +8749,7 @@
     PyObject *error_handler_obj = NULL;
     PyObject *exc = NULL;
     _Py_error_handler error_handler = _Py_ERROR_UNKNOWN;
-    void *data;
+    const void *data;
     int kind;
 
     if (PyUnicode_READY(unicode) == -1)
@@ -8719,8 +8885,7 @@
     if (*exceptionObject == NULL)
         return NULL;
 
-    restuple = PyObject_CallFunctionObjArgs(
-        *errorHandler, *exceptionObject, NULL);
+    restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
     if (restuple == NULL)
         return NULL;
     if (!PyTuple_Check(restuple)) {
@@ -8916,7 +9081,8 @@
 {
     Py_UCS1 ascii_table[128], ch, ch2;
     Py_ssize_t len;
-    Py_UCS1 *in, *end, *out;
+    const Py_UCS1 *in, *end;
+    Py_UCS1 *out;
     int res = 0;
 
     len = PyUnicode_GET_LENGTH(input);
@@ -8965,7 +9131,7 @@
                             const char *errors)
 {
     /* input object */
-    char *data;
+    const void *data;
     Py_ssize_t size, i;
     int kind;
     /* output buffer */
@@ -8984,7 +9150,7 @@
 
     if (PyUnicode_READY(input) == -1)
         return NULL;
-    data = (char*)PyUnicode_DATA(input);
+    data = PyUnicode_DATA(input);
     kind = PyUnicode_KIND(input);
     size = PyUnicode_GET_LENGTH(input);
 
@@ -9162,7 +9328,7 @@
     Py_ssize_t i;
     Py_UCS4 maxchar;
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
 
     maxchar = 127;
     for (i = 0; i < length; i++) {
@@ -9204,7 +9370,7 @@
     PyObject *unicode;
     Py_ssize_t i;
     enum PyUnicode_Kind kind;
-    void *data;
+    const void *data;
 
     if (output == NULL) {
         PyErr_BadArgument();
@@ -9282,7 +9448,7 @@
                int direction)
 {
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2, result;
 
     kind1 = PyUnicode_KIND(s1);
@@ -9309,7 +9475,7 @@
     }
 
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(s2, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return -2;
     }
@@ -9351,8 +9517,9 @@
         }
     }
 
+    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(s2)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
 
     return result;
 }
@@ -9511,7 +9678,7 @@
 {
     Py_ssize_t result;
     int kind1, kind2;
-    void *buf1 = NULL, *buf2 = NULL;
+    const void *buf1 = NULL, *buf2 = NULL;
     Py_ssize_t len1, len2;
 
     if (ensure_unicode(str) < 0 || ensure_unicode(substr) < 0)
@@ -9531,7 +9698,7 @@
     buf1 = PyUnicode_DATA(str);
     buf2 = PyUnicode_DATA(substr);
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(substr, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             goto onError;
     }
@@ -9540,24 +9707,24 @@
     case PyUnicode_1BYTE_KIND:
         if (PyUnicode_IS_ASCII(str) && PyUnicode_IS_ASCII(substr))
             result = asciilib_count(
-                ((Py_UCS1*)buf1) + start, end - start,
+                ((const Py_UCS1*)buf1) + start, end - start,
                 buf2, len2, PY_SSIZE_T_MAX
                 );
         else
             result = ucs1lib_count(
-                ((Py_UCS1*)buf1) + start, end - start,
+                ((const Py_UCS1*)buf1) + start, end - start,
                 buf2, len2, PY_SSIZE_T_MAX
                 );
         break;
     case PyUnicode_2BYTE_KIND:
         result = ucs2lib_count(
-            ((Py_UCS2*)buf1) + start, end - start,
+            ((const Py_UCS2*)buf1) + start, end - start,
             buf2, len2, PY_SSIZE_T_MAX
             );
         break;
     case PyUnicode_4BYTE_KIND:
         result = ucs4lib_count(
-            ((Py_UCS4*)buf1) + start, end - start,
+            ((const Py_UCS4*)buf1) + start, end - start,
             buf2, len2, PY_SSIZE_T_MAX
             );
         break;
@@ -9565,13 +9732,15 @@
         Py_UNREACHABLE();
     }
 
+    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(substr)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
 
     return result;
   onError:
-    if (kind2 != kind1 && buf2)
-        PyMem_Free(buf2);
+    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(substr)));
+    if (kind2 != kind1)
+        PyMem_Free((void *)buf2);
     return -1;
 }
 
@@ -9619,8 +9788,8 @@
 {
     int kind_self;
     int kind_sub;
-    void *data_self;
-    void *data_sub;
+    const void *data_self;
+    const void *data_sub;
     Py_ssize_t offset;
     Py_ssize_t i;
     Py_ssize_t end_sub;
@@ -9694,7 +9863,8 @@
 ascii_upper_or_lower(PyObject *self, int lower)
 {
     Py_ssize_t len = PyUnicode_GET_LENGTH(self);
-    char *resdata, *data = PyUnicode_DATA(self);
+    const char *data = PyUnicode_DATA(self);
+    char *resdata;
     PyObject *res;
 
     res = PyUnicode_New(len, 127);
@@ -9709,7 +9879,7 @@
 }
 
 static Py_UCS4
-handle_capital_sigma(int kind, void *data, Py_ssize_t length, Py_ssize_t i)
+handle_capital_sigma(int kind, const void *data, Py_ssize_t length, Py_ssize_t i)
 {
     Py_ssize_t j;
     int final_sigma;
@@ -9738,7 +9908,7 @@
 }
 
 static int
-lower_ucs4(int kind, void *data, Py_ssize_t length, Py_ssize_t i,
+lower_ucs4(int kind, const void *data, Py_ssize_t length, Py_ssize_t i,
            Py_UCS4 c, Py_UCS4 *mapped)
 {
     /* Obscure special case. */
@@ -9750,7 +9920,7 @@
 }
 
 static Py_ssize_t
-do_capitalize(int kind, void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
+do_capitalize(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
 {
     Py_ssize_t i, k = 0;
     int n_res, j;
@@ -9774,7 +9944,7 @@
 }
 
 static Py_ssize_t
-do_swapcase(int kind, void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar) {
+do_swapcase(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar) {
     Py_ssize_t i, k = 0;
 
     for (i = 0; i < length; i++) {
@@ -9799,7 +9969,7 @@
 }
 
 static Py_ssize_t
-do_upper_or_lower(int kind, void *data, Py_ssize_t length, Py_UCS4 *res,
+do_upper_or_lower(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res,
                   Py_UCS4 *maxchar, int lower)
 {
     Py_ssize_t i, k = 0;
@@ -9820,19 +9990,19 @@
 }
 
 static Py_ssize_t
-do_upper(int kind, void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
+do_upper(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
 {
     return do_upper_or_lower(kind, data, length, res, maxchar, 0);
 }
 
 static Py_ssize_t
-do_lower(int kind, void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
+do_lower(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
 {
     return do_upper_or_lower(kind, data, length, res, maxchar, 1);
 }
 
 static Py_ssize_t
-do_casefold(int kind, void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
+do_casefold(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
 {
     Py_ssize_t i, k = 0;
 
@@ -9849,7 +10019,7 @@
 }
 
 static Py_ssize_t
-do_title(int kind, void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
+do_title(int kind, const void *data, Py_ssize_t length, Py_UCS4 *res, Py_UCS4 *maxchar)
 {
     Py_ssize_t i, k = 0;
     int previous_is_cased;
@@ -9877,12 +10047,13 @@
 
 static PyObject *
 case_operation(PyObject *self,
-               Py_ssize_t (*perform)(int, void *, Py_ssize_t, Py_UCS4 *, Py_UCS4 *))
+               Py_ssize_t (*perform)(int, const void *, Py_ssize_t, Py_UCS4 *, Py_UCS4 *))
 {
     PyObject *res = NULL;
     Py_ssize_t length, newlength = 0;
     int kind, outkind;
-    void *data, *outdata;
+    const void *data;
+    void *outdata;
     Py_UCS4 maxchar = 0, *tmp, *tmpend;
 
     assert(PyUnicode_IS_READY(self));
@@ -10249,7 +10420,7 @@
       Py_ssize_t maxcount)
 {
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2;
     PyObject* out;
 
@@ -10304,7 +10475,7 @@
     buf1 = PyUnicode_DATA(self);
     buf2 = PyUnicode_DATA(substring);
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(substring, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return NULL;
     }
@@ -10329,8 +10500,9 @@
     default:
         out = NULL;
     }
+    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(substring)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
     return out;
 }
 
@@ -10340,7 +10512,7 @@
        Py_ssize_t maxcount)
 {
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2;
     PyObject* out;
 
@@ -10395,7 +10567,7 @@
     buf1 = PyUnicode_DATA(self);
     buf2 = PyUnicode_DATA(substring);
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(substring, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return NULL;
     }
@@ -10420,14 +10592,15 @@
     default:
         out = NULL;
     }
+    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(substring)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
     return out;
 }
 
 static Py_ssize_t
-anylib_find(int kind, PyObject *str1, void *buf1, Py_ssize_t len1,
-            PyObject *str2, void *buf2, Py_ssize_t len2, Py_ssize_t offset)
+anylib_find(int kind, PyObject *str1, const void *buf1, Py_ssize_t len1,
+            PyObject *str2, const void *buf2, Py_ssize_t len2, Py_ssize_t offset)
 {
     switch (kind) {
     case PyUnicode_1BYTE_KIND:
@@ -10444,8 +10617,8 @@
 }
 
 static Py_ssize_t
-anylib_count(int kind, PyObject *sstr, void* sbuf, Py_ssize_t slen,
-             PyObject *str1, void *buf1, Py_ssize_t len1, Py_ssize_t maxcount)
+anylib_count(int kind, PyObject *sstr, const void* sbuf, Py_ssize_t slen,
+             PyObject *str1, const void *buf1, Py_ssize_t len1, Py_ssize_t maxcount)
 {
     switch (kind) {
     case PyUnicode_1BYTE_KIND:
@@ -10491,9 +10664,9 @@
         PyObject *str2, Py_ssize_t maxcount)
 {
     PyObject *u;
-    char *sbuf = PyUnicode_DATA(self);
-    char *buf1 = PyUnicode_DATA(str1);
-    char *buf2 = PyUnicode_DATA(str2);
+    const char *sbuf = PyUnicode_DATA(self);
+    const void *buf1 = PyUnicode_DATA(str1);
+    const void *buf2 = PyUnicode_DATA(str2);
     int srelease = 0, release1 = 0, release2 = 0;
     int skind = PyUnicode_KIND(self);
     int kind1 = PyUnicode_KIND(str1);
@@ -10504,9 +10677,12 @@
     int mayshrink;
     Py_UCS4 maxchar, maxchar_str1, maxchar_str2;
 
+    if (slen < len1)
+        goto nothing;
+
     if (maxcount < 0)
         maxcount = PY_SSIZE_T_MAX;
-    else if (maxcount == 0 || slen == 0)
+    else if (maxcount == 0)
         goto nothing;
 
     if (str1 == str2)
@@ -10551,7 +10727,7 @@
 
             if (kind1 < rkind) {
                 /* widen substring */
-                buf1 = _PyUnicode_AsKind(str1, rkind);
+                buf1 = unicode_askind(kind1, buf1, len1, rkind);
                 if (!buf1) goto error;
                 release1 = 1;
             }
@@ -10560,19 +10736,23 @@
                 goto nothing;
             if (rkind > kind2) {
                 /* widen replacement */
-                buf2 = _PyUnicode_AsKind(str2, rkind);
+                buf2 = unicode_askind(kind2, buf2, len2, rkind);
                 if (!buf2) goto error;
                 release2 = 1;
             }
             else if (rkind < kind2) {
                 /* widen self and buf1 */
                 rkind = kind2;
-                if (release1) PyMem_Free(buf1);
-                release1 = 0;
-                sbuf = _PyUnicode_AsKind(self, rkind);
+                if (release1) {
+                    assert(buf1 != PyUnicode_DATA(str1));
+                    PyMem_Free((void *)buf1);
+                    buf1 = PyUnicode_DATA(str1);
+                    release1 = 0;
+                }
+                sbuf = unicode_askind(skind, sbuf, slen, rkind);
                 if (!sbuf) goto error;
                 srelease = 1;
-                buf1 = _PyUnicode_AsKind(str1, rkind);
+                buf1 = unicode_askind(kind1, buf1, len1, rkind);
                 if (!buf1) goto error;
                 release1 = 1;
             }
@@ -10610,7 +10790,7 @@
 
         if (kind1 < rkind) {
             /* widen substring */
-            buf1 = _PyUnicode_AsKind(str1, rkind);
+            buf1 = unicode_askind(kind1, buf1, len1, rkind);
             if (!buf1) goto error;
             release1 = 1;
         }
@@ -10619,19 +10799,23 @@
             goto nothing;
         if (kind2 < rkind) {
             /* widen replacement */
-            buf2 = _PyUnicode_AsKind(str2, rkind);
+            buf2 = unicode_askind(kind2, buf2, len2, rkind);
             if (!buf2) goto error;
             release2 = 1;
         }
         else if (kind2 > rkind) {
             /* widen self and buf1 */
             rkind = kind2;
-            sbuf = _PyUnicode_AsKind(self, rkind);
+            sbuf = unicode_askind(skind, sbuf, slen, rkind);
             if (!sbuf) goto error;
             srelease = 1;
-            if (release1) PyMem_Free(buf1);
-            release1 = 0;
-            buf1 = _PyUnicode_AsKind(str1, rkind);
+            if (release1) {
+                assert(buf1 != PyUnicode_DATA(str1));
+                PyMem_Free((void *)buf1);
+                buf1 = PyUnicode_DATA(str1);
+                release1 = 0;
+            }
+            buf1 = unicode_askind(kind1, buf1, len1, rkind);
             if (!buf1) goto error;
             release1 = 1;
         }
@@ -10719,32 +10903,41 @@
     }
 
   done:
+    assert(srelease == (sbuf != PyUnicode_DATA(self)));
+    assert(release1 == (buf1 != PyUnicode_DATA(str1)));
+    assert(release2 == (buf2 != PyUnicode_DATA(str2)));
     if (srelease)
-        PyMem_FREE(sbuf);
+        PyMem_FREE((void *)sbuf);
     if (release1)
-        PyMem_FREE(buf1);
+        PyMem_FREE((void *)buf1);
     if (release2)
-        PyMem_FREE(buf2);
+        PyMem_FREE((void *)buf2);
     assert(_PyUnicode_CheckConsistency(u, 1));
     return u;
 
   nothing:
     /* nothing to replace; return original string (when possible) */
+    assert(srelease == (sbuf != PyUnicode_DATA(self)));
+    assert(release1 == (buf1 != PyUnicode_DATA(str1)));
+    assert(release2 == (buf2 != PyUnicode_DATA(str2)));
     if (srelease)
-        PyMem_FREE(sbuf);
+        PyMem_FREE((void *)sbuf);
     if (release1)
-        PyMem_FREE(buf1);
+        PyMem_FREE((void *)buf1);
     if (release2)
-        PyMem_FREE(buf2);
+        PyMem_FREE((void *)buf2);
     return unicode_result_unchanged(self);
 
   error:
-    if (srelease && sbuf)
-        PyMem_FREE(sbuf);
-    if (release1 && buf1)
-        PyMem_FREE(buf1);
-    if (release2 && buf2)
-        PyMem_FREE(buf2);
+    assert(srelease == (sbuf != PyUnicode_DATA(self)));
+    assert(release1 == (buf1 != PyUnicode_DATA(str1)));
+    assert(release2 == (buf2 != PyUnicode_DATA(str2)));
+    if (srelease)
+        PyMem_FREE((void *)sbuf);
+    if (release1)
+        PyMem_FREE((void *)buf1);
+    if (release2)
+        PyMem_FREE((void *)buf2);
     return NULL;
 }
 
@@ -10881,7 +11074,7 @@
     while (0)
 
     int kind1, kind2;
-    void *data1, *data2;
+    const void *data1, *data2;
     Py_ssize_t len1, len2, len;
 
     kind1 = PyUnicode_KIND(str1);
@@ -10982,7 +11175,7 @@
 unicode_compare_eq(PyObject *str1, PyObject *str2)
 {
     int kind;
-    void *data1, *data2;
+    const void *data1, *data2;
     Py_ssize_t len;
     int cmp;
 
@@ -11016,8 +11209,8 @@
     }
     PyErr_Format(PyExc_TypeError,
                  "Can't compare %.100s and %.100s",
-                 left->ob_type->tp_name,
-                 right->ob_type->tp_name);
+                 Py_TYPE(left)->tp_name,
+                 Py_TYPE(right)->tp_name);
     return -1;
 }
 
@@ -11067,7 +11260,7 @@
         return 0;
     }
     else {
-        void *data = PyUnicode_DATA(uni);
+        const void *data = PyUnicode_DATA(uni);
         /* Compare Unicode string and source character set string */
         for (i = 0; (chr = PyUnicode_READ(kind, data, i)) && str[i]; i++)
             if (chr != (unsigned char)str[i])
@@ -11127,7 +11320,6 @@
 _PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right)
 {
     PyObject *right_uni;
-    Py_hash_t hash;
 
     assert(_PyUnicode_CHECK(left));
     assert(right->string);
@@ -11159,10 +11351,12 @@
     if (PyUnicode_CHECK_INTERNED(left))
         return 0;
 
+#ifdef INTERNED_STRINGS
     assert(_PyUnicode_HASH(right_uni) != -1);
-    hash = _PyUnicode_HASH(left);
+    Py_hash_t hash = _PyUnicode_HASH(left);
     if (hash != -1 && hash != _PyUnicode_HASH(right_uni))
         return 0;
+#endif
 
     return unicode_compare_eq(left, right_uni);
 }
@@ -11216,7 +11410,7 @@
 PyUnicode_Contains(PyObject *str, PyObject *substr)
 {
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2;
     int result;
 
@@ -11247,7 +11441,7 @@
         return result;
     }
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(substr, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return -1;
     }
@@ -11266,8 +11460,9 @@
         Py_UNREACHABLE();
     }
 
+    assert((kind2 == kind1) == (buf2 == PyUnicode_DATA(substr)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
 
     return result;
 }
@@ -11287,7 +11482,7 @@
     if (!PyUnicode_Check(right)) {
         PyErr_Format(PyExc_TypeError,
                      "can only concatenate str (not \"%.200s\") to str",
-                     right->ob_type->tp_name);
+                     Py_TYPE(right)->tp_name);
         return NULL;
     }
     if (PyUnicode_READY(right) < 0)
@@ -11444,7 +11639,7 @@
     Py_ssize_t end = PY_SSIZE_T_MAX;
     PyObject *result;
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2, iresult;
 
     if (!parse_args_finds_unicode("count", args, &substring, &start, &end))
@@ -11464,26 +11659,26 @@
     buf1 = PyUnicode_DATA(self);
     buf2 = PyUnicode_DATA(substring);
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(substring, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return NULL;
     }
     switch (kind1) {
     case PyUnicode_1BYTE_KIND:
         iresult = ucs1lib_count(
-            ((Py_UCS1*)buf1) + start, end - start,
+            ((const Py_UCS1*)buf1) + start, end - start,
             buf2, len2, PY_SSIZE_T_MAX
             );
         break;
     case PyUnicode_2BYTE_KIND:
         iresult = ucs2lib_count(
-            ((Py_UCS2*)buf1) + start, end - start,
+            ((const Py_UCS2*)buf1) + start, end - start,
             buf2, len2, PY_SSIZE_T_MAX
             );
         break;
     case PyUnicode_4BYTE_KIND:
         iresult = ucs4lib_count(
-            ((Py_UCS4*)buf1) + start, end - start,
+            ((const Py_UCS4*)buf1) + start, end - start,
             buf2, len2, PY_SSIZE_T_MAX
             );
         break;
@@ -11493,8 +11688,9 @@
 
     result = PyLong_FromSsize_t(iresult);
 
+    assert((kind2 == kind1) == (buf2 == PyUnicode_DATA(substring)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
 
     return result;
 }
@@ -11538,7 +11734,8 @@
     Py_ssize_t i, j, line_pos, src_len, incr;
     Py_UCS4 ch;
     PyObject *u;
-    void *src_data, *dest_data;
+    const void *src_data;
+    void *dest_data;
     int kind;
     int found;
 
@@ -11644,7 +11841,7 @@
 static PyObject *
 unicode_getitem(PyObject *self, Py_ssize_t index)
 {
-    void *data;
+    const void *data;
     enum PyUnicode_Kind kind;
     Py_UCS4 ch;
 
@@ -11757,7 +11954,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
     int cased;
 
     if (PyUnicode_READY(self) == -1)
@@ -11802,7 +11999,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
     int cased;
 
     if (PyUnicode_READY(self) == -1)
@@ -11847,7 +12044,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
     int cased, previous_is_cased;
 
     if (PyUnicode_READY(self) == -1)
@@ -11905,7 +12102,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(self) == -1)
         return NULL;
@@ -11945,7 +12142,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(self) == -1)
         return NULL;
@@ -11983,7 +12180,7 @@
 /*[clinic end generated code: output=a5a23490ffc3660c input=5c6579bf2e04758c]*/
 {
     int kind;
-    void *data;
+    const void *data;
     Py_ssize_t len, i;
 
     if (PyUnicode_READY(self) == -1)
@@ -12026,7 +12223,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(self) == -1)
         return NULL;
@@ -12065,7 +12262,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(self) == -1)
         return NULL;
@@ -12105,7 +12302,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(self) == -1)
         return NULL;
@@ -12129,25 +12326,22 @@
     Py_RETURN_TRUE;
 }
 
-int
-PyUnicode_IsIdentifier(PyObject *self)
+Py_ssize_t
+_PyUnicode_ScanIdentifier(PyObject *self)
 {
-    int kind;
-    void *data;
     Py_ssize_t i;
-    Py_UCS4 first;
+    if (PyUnicode_READY(self) == -1)
+        return -1;
 
-    if (PyUnicode_READY(self) == -1) {
-        Py_FatalError("identifier not ready");
+    Py_ssize_t len = PyUnicode_GET_LENGTH(self);
+    if (len == 0) {
+        /* an empty string is not a valid identifier */
         return 0;
     }
 
-    /* Special case for empty strings */
-    if (PyUnicode_GET_LENGTH(self) == 0)
-        return 0;
-    kind = PyUnicode_KIND(self);
-    data = PyUnicode_DATA(self);
-
+    int kind = PyUnicode_KIND(self);
+    const void *data = PyUnicode_DATA(self);
+    Py_UCS4 ch = PyUnicode_READ(kind, data, 0);
     /* PEP 3131 says that the first character must be in
        XID_Start and subsequent characters in XID_Continue,
        and for the ASCII range, the 2.x rules apply (i.e
@@ -12156,14 +12350,70 @@
        definition of XID_Start and XID_Continue, it is sufficient
        to check just for these, except that _ must be allowed
        as starting an identifier.  */
-    first = PyUnicode_READ(kind, data, 0);
-    if (!_PyUnicode_IsXidStart(first) && first != 0x5F /* LOW LINE */)
+    if (!_PyUnicode_IsXidStart(ch) && ch != 0x5F /* LOW LINE */) {
         return 0;
+    }
 
-    for (i = 1; i < PyUnicode_GET_LENGTH(self); i++)
-        if (!_PyUnicode_IsXidContinue(PyUnicode_READ(kind, data, i)))
+    for (i = 1; i < len; i++) {
+        ch = PyUnicode_READ(kind, data, i);
+        if (!_PyUnicode_IsXidContinue(ch)) {
+            return i;
+        }
+    }
+    return i;
+}
+
+int
+PyUnicode_IsIdentifier(PyObject *self)
+{
+    if (PyUnicode_IS_READY(self)) {
+        Py_ssize_t i = _PyUnicode_ScanIdentifier(self);
+        Py_ssize_t len = PyUnicode_GET_LENGTH(self);
+        /* an empty string is not a valid identifier */
+        return len && i == len;
+    }
+    else {
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
+        Py_ssize_t i = 0, len = PyUnicode_GET_SIZE(self);
+        if (len == 0) {
+            /* an empty string is not a valid identifier */
             return 0;
-    return 1;
+        }
+
+        const wchar_t *wstr = _PyUnicode_WSTR(self);
+        Py_UCS4 ch = wstr[i++];
+#if SIZEOF_WCHAR_T == 2
+        if (Py_UNICODE_IS_HIGH_SURROGATE(ch)
+            && i < len
+            && Py_UNICODE_IS_LOW_SURROGATE(wstr[i]))
+        {
+            ch = Py_UNICODE_JOIN_SURROGATES(ch, wstr[i]);
+            i++;
+        }
+#endif
+        if (!_PyUnicode_IsXidStart(ch) && ch != 0x5F /* LOW LINE */) {
+            return 0;
+        }
+
+        while (i < len) {
+            ch = wstr[i++];
+#if SIZEOF_WCHAR_T == 2
+            if (Py_UNICODE_IS_HIGH_SURROGATE(ch)
+                && i < len
+                && Py_UNICODE_IS_LOW_SURROGATE(wstr[i]))
+            {
+                ch = Py_UNICODE_JOIN_SURROGATES(ch, wstr[i]);
+                i++;
+            }
+#endif
+            if (!_PyUnicode_IsXidContinue(ch)) {
+                return 0;
+            }
+        }
+        return 1;
+_Py_COMP_DIAG_POP
+    }
 }
 
 /*[clinic input]
@@ -12197,7 +12447,7 @@
 {
     Py_ssize_t i, length;
     int kind;
-    void *data;
+    const void *data;
 
     if (PyUnicode_READY(self) == -1)
         return NULL;
@@ -12302,7 +12552,7 @@
 PyObject *
 _PyUnicode_XStrip(PyObject *self, int striptype, PyObject *sepobj)
 {
-    void *data;
+    const void *data;
     int kind;
     Py_ssize_t i, j, len;
     BLOOM_MASK sepmask;
@@ -12352,7 +12602,7 @@
 PyObject*
 PyUnicode_Substring(PyObject *self, Py_ssize_t start, Py_ssize_t end)
 {
-    unsigned char *data;
+    const unsigned char *data;
     int kind;
     Py_ssize_t length;
 
@@ -12375,7 +12625,7 @@
     length = end - start;
     if (PyUnicode_IS_ASCII(self)) {
         data = PyUnicode_1BYTE_DATA(self);
-        return _PyUnicode_FromASCII((char*)(data + start), length);
+        return _PyUnicode_FromASCII((const char*)(data + start), length);
     }
     else {
         kind = PyUnicode_KIND(self);
@@ -12397,7 +12647,7 @@
     len = PyUnicode_GET_LENGTH(self);
 
     if (PyUnicode_IS_ASCII(self)) {
-        Py_UCS1 *data = PyUnicode_1BYTE_DATA(self);
+        const Py_UCS1 *data = PyUnicode_1BYTE_DATA(self);
 
         i = 0;
         if (striptype != RIGHTSTRIP) {
@@ -12423,7 +12673,7 @@
     }
     else {
         int kind = PyUnicode_KIND(self);
-        void *data = PyUnicode_DATA(self);
+        const void *data = PyUnicode_DATA(self);
 
         i = 0;
         if (striptype != RIGHTSTRIP) {
@@ -12556,8 +12806,8 @@
     assert(PyUnicode_KIND(u) == PyUnicode_KIND(str));
 
     if (PyUnicode_GET_LENGTH(str) == 1) {
-        const int kind = PyUnicode_KIND(str);
-        const Py_UCS4 fill_char = PyUnicode_READ(kind, PyUnicode_DATA(str), 0);
+        int kind = PyUnicode_KIND(str);
+        Py_UCS4 fill_char = PyUnicode_READ(kind, PyUnicode_DATA(str), 0);
         if (kind == PyUnicode_1BYTE_KIND) {
             void *to = PyUnicode_DATA(u);
             memset(to, (unsigned char)fill_char, len);
@@ -12576,7 +12826,7 @@
     else {
         /* number of characters copied this far */
         Py_ssize_t done = PyUnicode_GET_LENGTH(str);
-        const Py_ssize_t char_size = PyUnicode_KIND(str);
+        Py_ssize_t char_size = PyUnicode_KIND(str);
         char *to = (char *) PyUnicode_DATA(u);
         memcpy(to, PyUnicode_DATA(str),
                   PyUnicode_GET_LENGTH(str) * char_size);
@@ -12629,6 +12879,61 @@
     return replace(self, old, new, count);
 }
 
+/*[clinic input]
+str.removeprefix as unicode_removeprefix
+
+    prefix: unicode
+    /
+
+Return a str with the given prefix string removed if present.
+
+If the string starts with the prefix string, return string[len(prefix):].
+Otherwise, return a copy of the original string.
+[clinic start generated code]*/
+
+static PyObject *
+unicode_removeprefix_impl(PyObject *self, PyObject *prefix)
+/*[clinic end generated code: output=f1e5945e9763bcb9 input=27ec40b99a37eb88]*/
+{
+    int match = tailmatch(self, prefix, 0, PY_SSIZE_T_MAX, -1);
+    if (match == -1) {
+        return NULL;
+    }
+    if (match) {
+        return PyUnicode_Substring(self, PyUnicode_GET_LENGTH(prefix),
+                                   PyUnicode_GET_LENGTH(self));
+    }
+    return unicode_result_unchanged(self);
+}
+
+/*[clinic input]
+str.removesuffix as unicode_removesuffix
+
+    suffix: unicode
+    /
+
+Return a str with the given suffix string removed if present.
+
+If the string ends with the suffix string and that suffix is not empty,
+return string[:-len(suffix)]. Otherwise, return a copy of the original
+string.
+[clinic start generated code]*/
+
+static PyObject *
+unicode_removesuffix_impl(PyObject *self, PyObject *suffix)
+/*[clinic end generated code: output=d36629e227636822 input=12cc32561e769be4]*/
+{
+    int match = tailmatch(self, suffix, 0, PY_SSIZE_T_MAX, +1);
+    if (match == -1) {
+        return NULL;
+    }
+    if (match) {
+        return PyUnicode_Substring(self, 0, PyUnicode_GET_LENGTH(self)
+                                            - PyUnicode_GET_LENGTH(suffix));
+    }
+    return unicode_result_unchanged(self);
+}
+
 static PyObject *
 unicode_repr(PyObject *unicode)
 {
@@ -12637,7 +12942,8 @@
     Py_ssize_t osize, squote, dquote, i, o;
     Py_UCS4 max, quote;
     int ikind, okind, unchanged;
-    void *idata, *odata;
+    const void *idata;
+    void *odata;
 
     if (PyUnicode_READY(unicode) == -1)
         return NULL;
@@ -12930,7 +13236,7 @@
 {
     PyObject* out;
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2;
 
     if (ensure_unicode(str_obj) < 0 || ensure_unicode(sep_obj) < 0)
@@ -12953,7 +13259,7 @@
     buf1 = PyUnicode_DATA(str_obj);
     buf2 = PyUnicode_DATA(sep_obj);
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(sep_obj, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return NULL;
     }
@@ -12975,8 +13281,9 @@
         Py_UNREACHABLE();
     }
 
+    assert((kind2 == kind1) == (buf2 == PyUnicode_DATA(sep_obj)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
 
     return out;
 }
@@ -12987,7 +13294,7 @@
 {
     PyObject* out;
     int kind1, kind2;
-    void *buf1, *buf2;
+    const void *buf1, *buf2;
     Py_ssize_t len1, len2;
 
     if (ensure_unicode(str_obj) < 0 || ensure_unicode(sep_obj) < 0)
@@ -13010,7 +13317,7 @@
     buf1 = PyUnicode_DATA(str_obj);
     buf2 = PyUnicode_DATA(sep_obj);
     if (kind2 != kind1) {
-        buf2 = _PyUnicode_AsKind(sep_obj, kind1);
+        buf2 = unicode_askind(kind2, buf2, len2, kind1);
         if (!buf2)
             return NULL;
     }
@@ -13032,8 +13339,9 @@
         Py_UNREACHABLE();
     }
 
+    assert((kind2 == kind1) == (buf2 == PyUnicode_DATA(sep_obj)));
     if (kind2 != kind1)
-        PyMem_Free(buf2);
+        PyMem_Free((void *)buf2);
 
     return out;
 }
@@ -13189,7 +13497,7 @@
         return NULL;
     if (y != NULL) {
         int x_kind, y_kind, z_kind;
-        void *x_data, *y_data, *z_data;
+        const void *x_data, *y_data, *z_data;
 
         /* x must be a string too, of equal length */
         if (!PyUnicode_Check(x)) {
@@ -13238,7 +13546,7 @@
         }
     } else {
         int kind;
-        void *data;
+        const void *data;
 
         /* x must be a dict */
         if (!PyDict_CheckExact(x)) {
@@ -13339,7 +13647,7 @@
     Py_ssize_t fill;
     PyObject *u;
     int kind;
-    void *data;
+    const void *data;
     Py_UCS4 chr;
 
     if (PyUnicode_READY(self) == -1)
@@ -13520,6 +13828,16 @@
     assert(writer->kind <= PyUnicode_1BYTE_KIND);
 }
 
+// Initialize _PyUnicodeWriter with initial buffer
+static inline void
+_PyUnicodeWriter_InitWithBuffer(_PyUnicodeWriter *writer, PyObject *buffer)
+{
+    memset(writer, 0, sizeof(*writer));
+    writer->buffer = buffer;
+    _PyUnicodeWriter_Update(writer);
+    writer->min_length = writer->size;
+}
+
 int
 _PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer,
                                  Py_ssize_t length, Py_UCS4 maxchar)
@@ -13932,6 +14250,8 @@
     UNICODE_UPPER_METHODDEF
     {"startswith", (PyCFunction) unicode_startswith, METH_VARARGS, startswith__doc__},
     {"endswith", (PyCFunction) unicode_endswith, METH_VARARGS, endswith__doc__},
+    UNICODE_REMOVEPREFIX_METHODDEF
+    UNICODE_REMOVESUFFIX_METHODDEF
     UNICODE_ISASCII_METHODDEF
     UNICODE_ISLOWER_METHODDEF
     UNICODE_ISUPPER_METHODDEF
@@ -13991,7 +14311,7 @@
     if (PyUnicode_READY(self) == -1)
         return NULL;
 
-    if (PyIndex_Check(item)) {
+    if (_PyIndex_Check(item)) {
         Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
         if (i == -1 && PyErr_Occurred())
             return NULL;
@@ -14002,7 +14322,8 @@
         Py_ssize_t start, stop, step, slicelength, i;
         size_t cur;
         PyObject *result;
-        void *src_data, *dest_data;
+        const void *src_data;
+        void *dest_data;
         int src_kind, dest_kind;
         Py_UCS4 ch, max_char, kind_limit;
 
@@ -14073,7 +14394,7 @@
 
     enum PyUnicode_Kind fmtkind;
     Py_ssize_t fmtcnt, fmtpos;
-    void *fmtdata;
+    const void *fmtdata;
     PyObject *fmtstr;
 
     _PyUnicodeWriter writer;
@@ -14747,7 +15068,7 @@
 {
     Py_ssize_t len;
     enum PyUnicode_Kind kind;
-    void *pbuf;
+    const void *pbuf;
     Py_ssize_t pindex;
     Py_UCS4 signchar;
     Py_ssize_t buflen;
@@ -15251,33 +15572,31 @@
     return _PyStatus_OK();
 }
 
-/* Finalize the Unicode implementation */
-
-int
-PyUnicode_ClearFreeList(void)
-{
-    return 0;
-}
-
 
 void
 PyUnicode_InternInPlace(PyObject **p)
 {
     PyObject *s = *p;
-    PyObject *t;
 #ifdef Py_DEBUG
     assert(s != NULL);
     assert(_PyUnicode_CHECK(s));
 #else
-    if (s == NULL || !PyUnicode_Check(s))
+    if (s == NULL || !PyUnicode_Check(s)) {
         return;
+    }
 #endif
+
     /* If it's a subclass, we don't really know what putting
        it in the interned dict might do. */
-    if (!PyUnicode_CheckExact(s))
+    if (!PyUnicode_CheckExact(s)) {
         return;
-    if (PyUnicode_CHECK_INTERNED(s))
+    }
+
+    if (PyUnicode_CHECK_INTERNED(s)) {
         return;
+    }
+
+#ifdef INTERNED_STRINGS
     if (interned == NULL) {
         interned = PyDict_New();
         if (interned == NULL) {
@@ -15285,22 +15604,26 @@
             return;
         }
     }
-    Py_ALLOW_RECURSION
+
+    PyObject *t;
     t = PyDict_SetDefault(interned, s, s);
-    Py_END_ALLOW_RECURSION
+
     if (t == NULL) {
         PyErr_Clear();
         return;
     }
+
     if (t != s) {
         Py_INCREF(t);
         Py_SETREF(*p, t);
         return;
     }
+
     /* The two references in interned are not counted by refcnt.
        The deallocator will take care of this */
-    Py_REFCNT(s) -= 2;
+    Py_SET_REFCNT(s, Py_REFCNT(s) - 2);
     _PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL;
+#endif
 }
 
 void
@@ -15328,14 +15651,10 @@
 static void
 unicode_release_interned(void)
 {
-    PyObject *keys;
-    PyObject *s;
-    Py_ssize_t i, n;
-    Py_ssize_t immortal_size = 0, mortal_size = 0;
-
-    if (interned == NULL || !PyDict_Check(interned))
+    if (interned == NULL || !PyDict_Check(interned)) {
         return;
-    keys = PyDict_Keys(interned);
+    }
+    PyObject *keys = PyDict_Keys(interned);
     if (keys == NULL || !PyList_Check(keys)) {
         PyErr_Clear();
         return;
@@ -15346,30 +15665,35 @@
        rather, we give them their stolen references back, and then clear
        and DECREF the interned dict. */
 
-    n = PyList_GET_SIZE(keys);
+    Py_ssize_t n = PyList_GET_SIZE(keys);
 #ifdef INTERNED_STATS
     fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n",
             n);
+
+    Py_ssize_t immortal_size = 0, mortal_size = 0;
 #endif
-    for (i = 0; i < n; i++) {
-        s = PyList_GET_ITEM(keys, i);
+    for (Py_ssize_t i = 0; i < n; i++) {
+        PyObject *s = PyList_GET_ITEM(keys, i);
         if (PyUnicode_READY(s) == -1) {
             Py_UNREACHABLE();
         }
         switch (PyUnicode_CHECK_INTERNED(s)) {
-        case SSTATE_NOT_INTERNED:
-            /* XXX Shouldn't happen */
-            break;
         case SSTATE_INTERNED_IMMORTAL:
             Py_REFCNT(s) += 1;
+#ifdef INTERNED_STATS
             immortal_size += PyUnicode_GET_LENGTH(s);
+#endif
             break;
         case SSTATE_INTERNED_MORTAL:
             Py_REFCNT(s) += 2;
+#ifdef INTERNED_STATS
             mortal_size += PyUnicode_GET_LENGTH(s);
+#endif
             break;
+        case SSTATE_NOT_INTERNED:
+            /* fall through */
         default:
-            Py_FatalError("Inconsistent interned string state.");
+            Py_UNREACHABLE();
         }
         _PyUnicode_STATE(s).interned = SSTATE_NOT_INTERNED;
     }
@@ -15421,7 +15745,7 @@
 
     if (it->it_index < PyUnicode_GET_LENGTH(seq)) {
         int kind = PyUnicode_KIND(seq);
-        void *data = PyUnicode_DATA(seq);
+        const void *data = PyUnicode_DATA(seq);
         Py_UCS4 chr = PyUnicode_READ(kind, data, it->it_index);
         item = PyUnicode_FromOrdinal(chr);
         if (item != NULL)
@@ -15642,7 +15966,10 @@
         PyErr_BadArgument();
         return NULL;
     }
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
     u = PyUnicode_AsUnicodeAndSize(unicode, &len);
+_Py_COMP_DIAG_POP
     if (u == NULL)
         return NULL;
     /* Ensure we won't overflow the size. */
@@ -15730,7 +16057,7 @@
 init_stdio_encoding(PyThreadState *tstate)
 {
     /* Update the stdio encoding to the normalized Python codec name. */
-    PyConfig *config = &tstate->interp->config;
+    PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(tstate->interp);
     if (config_get_codec_name(&config->stdio_encoding) < 0) {
         return _PyStatus_ERR("failed to get the Python codec name "
                              "of the stdio encoding");
@@ -15742,7 +16069,7 @@
 static int
 init_fs_codec(PyInterpreterState *interp)
 {
-    PyConfig *config = &interp->config;
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 
     _Py_error_handler error_handler;
     error_handler = get_error_handler_wide(config->filesystem_errors);
@@ -15765,11 +16092,18 @@
         return -1;
     }
 
-    PyMem_RawFree(interp->fs_codec.encoding);
-    interp->fs_codec.encoding = encoding;
-    PyMem_RawFree(interp->fs_codec.errors);
-    interp->fs_codec.errors = errors;
-    interp->fs_codec.error_handler = error_handler;
+    struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
+    PyMem_RawFree(fs_codec->encoding);
+    fs_codec->encoding = encoding;
+    /* encoding has been normalized by init_fs_encoding() */
+    fs_codec->utf8 = (strcmp(encoding, "utf-8") == 0);
+    PyMem_RawFree(fs_codec->errors);
+    fs_codec->errors = errors;
+    fs_codec->error_handler = error_handler;
+
+#ifdef _Py_FORCE_UTF8_FS_ENCODING
+    assert(fs_codec->utf8 == 1);
+#endif
 
     /* At this point, PyUnicode_EncodeFSDefault() and
        PyUnicode_DecodeFSDefault() can now use the Python codec rather than
@@ -15777,8 +16111,8 @@
 
     /* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
        global configuration variables. */
-    if (_Py_SetFileSystemEncoding(interp->fs_codec.encoding,
-                                  interp->fs_codec.errors) < 0) {
+    if (_Py_SetFileSystemEncoding(fs_codec->encoding,
+                                  fs_codec->errors) < 0) {
         PyErr_NoMemory();
         return -1;
     }
@@ -15794,7 +16128,7 @@
     /* Update the filesystem encoding to the normalized Python codec name.
        For example, replace "ANSI_X3.4-1968" (locale encoding) with "ascii"
        (Python codec name). */
-    PyConfig *config = &interp->config;
+    PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(interp);
     if (config_get_codec_name(&config->filesystem_encoding) < 0) {
         _Py_DumpPathConfig(tstate);
         return _PyStatus_ERR("failed to get the Python codec "
@@ -15820,12 +16154,24 @@
 }
 
 
+static void
+_PyUnicode_FiniEncodings(struct _Py_unicode_fs_codec *fs_codec)
+{
+    PyMem_RawFree(fs_codec->encoding);
+    fs_codec->encoding = NULL;
+    fs_codec->utf8 = 0;
+    PyMem_RawFree(fs_codec->errors);
+    fs_codec->errors = NULL;
+    fs_codec->error_handler = _Py_ERROR_UNKNOWN;
+}
+
+
 #ifdef MS_WINDOWS
 int
 _PyUnicode_EnableLegacyWindowsFSEncoding(void)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    PyConfig *config = &interp->config;
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    PyConfig *config = (PyConfig *)_PyInterpreterState_GetConfig(interp);
 
     /* Set the filesystem encoding to mbcs/replace (PEP 529) */
     wchar_t *encoding = _PyMem_RawWcsdup(L"mbcs");
@@ -15848,34 +16194,33 @@
 
 
 void
-_PyUnicode_Fini(void)
+_PyUnicode_Fini(PyThreadState *tstate)
 {
+    if (_Py_IsMainInterpreter(tstate)) {
 #if defined(WITH_VALGRIND) || defined(__INSURE__)
-    /* Insure++ is a memory analysis tool that aids in discovering
-     * memory leaks and other memory problems.  On Python exit, the
-     * interned string dictionaries are flagged as being in use at exit
-     * (which it is).  Under normal circumstances, this is fine because
-     * the memory will be automatically reclaimed by the system.  Under
-     * memory debugging, it's a huge source of useless noise, so we
-     * trade off slower shutdown for less distraction in the memory
-     * reports.  -baw
-     */
-    unicode_release_interned();
+        /* Insure++ is a memory analysis tool that aids in discovering
+         * memory leaks and other memory problems.  On Python exit, the
+         * interned string dictionaries are flagged as being in use at exit
+         * (which it is).  Under normal circumstances, this is fine because
+         * the memory will be automatically reclaimed by the system.  Under
+         * memory debugging, it's a huge source of useless noise, so we
+         * trade off slower shutdown for less distraction in the memory
+         * reports.  -baw
+         */
+        unicode_release_interned();
 #endif /* __INSURE__ */
 
-    Py_CLEAR(unicode_empty);
+        Py_CLEAR(unicode_empty);
 
-    for (Py_ssize_t i = 0; i < 256; i++) {
-        Py_CLEAR(unicode_latin1[i]);
+#ifdef LATIN1_SINGLETONS
+        for (Py_ssize_t i = 0; i < 256; i++) {
+            Py_CLEAR(unicode_latin1[i]);
+        }
+#endif
+        unicode_clear_static_strings();
     }
-    _PyUnicode_ClearStaticStrings();
-    (void)PyUnicode_ClearFreeList();
 
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    PyMem_RawFree(interp->fs_codec.encoding);
-    interp->fs_codec.encoding = NULL;
-    PyMem_RawFree(interp->fs_codec.errors);
-    interp->fs_codec.errors = NULL;
+    _PyUnicode_FiniEncodings(&tstate->interp->unicode.fs_codec);
 }
 
 
diff --git a/Objects/unicodetype_db.h b/Objects/unicodetype_db.h
index 693e0b3..f668ed7 100644
--- a/Objects/unicodetype_db.h
+++ b/Objects/unicodetype_db.h
@@ -1782,68 +1782,71 @@
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 128, 129,
     130, 131, 132, 133, 34, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
     144, 145, 146, 147, 148, 149, 150, 144, 34, 34, 151, 144, 152, 153, 154,
-    155, 156, 157, 158, 159, 160, 161, 162, 144, 163, 144, 164, 165, 166,
-    167, 168, 169, 170, 171, 172, 144, 173, 174, 144, 175, 176, 177, 178,
-    144, 179, 180, 144, 181, 182, 183, 144, 144, 184, 185, 186, 187, 144,
-    188, 144, 189, 34, 34, 34, 34, 34, 34, 34, 190, 191, 34, 192, 144, 144,
+    155, 156, 157, 158, 159, 160, 161, 162, 144, 163, 164, 165, 166, 167,
+    168, 169, 170, 171, 172, 173, 144, 174, 175, 144, 176, 177, 178, 179,
+    144, 180, 181, 182, 183, 184, 185, 144, 144, 186, 187, 188, 189, 144,
+    190, 144, 191, 34, 34, 34, 34, 34, 34, 34, 192, 193, 34, 194, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 34, 34, 34, 34, 34, 34, 34, 34, 193, 144, 144,
+    144, 144, 144, 144, 144, 34, 34, 34, 34, 34, 34, 34, 34, 195, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 34, 34, 34, 34, 194, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+    144, 34, 34, 34, 34, 196, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 34, 34, 34, 34, 195, 196, 197, 198, 144, 144, 144, 144, 199,
-    200, 201, 202, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    144, 144, 34, 34, 34, 34, 197, 198, 199, 200, 144, 144, 144, 144, 201,
+    202, 203, 204, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 203, 34, 34,
-    34, 34, 34, 204, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 205, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 206, 207, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 34, 34, 205, 34, 34, 206, 144, 144,
+    144, 144, 144, 144, 144, 144, 34, 34, 208, 34, 34, 209, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 207, 208, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+    144, 210, 211, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 64,
-    209, 210, 211, 212, 213, 214, 144, 215, 216, 217, 218, 219, 220, 221,
-    222, 64, 64, 64, 64, 223, 224, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 225, 144, 226, 144, 144, 227, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 34, 228, 229, 144, 144, 144, 144, 144, 230, 231, 232,
-    144, 233, 234, 144, 144, 235, 236, 237, 238, 239, 144, 64, 240, 64, 64,
-    64, 64, 64, 241, 242, 243, 244, 245, 246, 247, 248, 249, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 250, 251, 252, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 86, 253, 34, 254, 255, 34, 34, 34,
+    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 64, 212,
+    213, 214, 215, 216, 217, 144, 218, 219, 220, 221, 222, 223, 224, 225, 64,
+    64, 64, 64, 226, 227, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+    228, 144, 229, 144, 144, 230, 144, 144, 144, 144, 144, 144, 144, 144,
+    144, 144, 34, 231, 232, 144, 144, 144, 144, 144, 233, 234, 235, 144, 236,
+    237, 144, 144, 238, 239, 240, 241, 242, 144, 64, 243, 64, 64, 64, 64, 64,
+    244, 245, 246, 247, 248, 249, 250, 251, 252, 64, 253, 144, 144, 144, 144,
+    144, 144, 144, 144, 254, 255, 256, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 86, 257, 34, 258, 259, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 256, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 257, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 258, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 260, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    261, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 262,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 259, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 263, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 264, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 260, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 261, 34,
-    262, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 263, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 265, 34, 266, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
     34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
-    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 264, 144, 144, 144,
+    34, 34, 34, 34, 34, 34, 267, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 268, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 34, 256, 34, 34, 265, 144, 144, 144,
+    144, 144, 144, 144, 144, 34, 260, 34, 34, 269, 144, 144, 144, 144, 144,
+    144, 144, 144, 144, 144, 144, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34, 34, 270, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
@@ -2243,11 +2246,7 @@
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 266, 144,
-    267, 268, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+    144, 271, 144, 272, 273, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
@@ -2283,7 +2282,7 @@
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
     144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
-    144, 144, 144, 144, 144, 144, 126, 126, 126, 126, 126, 126, 126, 126,
+    144, 144, 144, 144, 144, 144, 144, 144, 144, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
@@ -2319,8 +2318,8 @@
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
-    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 269,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+    126, 126, 274, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
@@ -2356,7 +2355,7 @@
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
     126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
-    126, 126, 126, 126, 126, 126, 126, 269,
+    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 274,
 };
 
 static const unsigned short index2[] = {
@@ -2435,7 +2434,7 @@
     30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 0, 136, 136, 136, 136, 136, 136,
     136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
     136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
-    136, 136, 136, 136, 0, 0, 103, 5, 5, 5, 5, 5, 5, 20, 137, 137, 137, 137,
+    136, 136, 136, 136, 0, 0, 103, 5, 5, 5, 5, 5, 6, 20, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 138, 20, 5, 5, 0, 0, 5, 5, 5, 0, 25, 25,
@@ -2481,69 +2480,69 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 21, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 25, 25, 25, 25, 21, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    25, 25, 25, 25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 25, 18, 25, 55, 18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 18,
-    18, 18, 18, 25, 18, 18, 55, 25, 25, 25, 25, 25, 25, 25, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 25, 25, 5, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-    16, 5, 103, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    25, 18, 18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, 0, 0, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, 0, 55, 55, 55,
-    55, 0, 0, 25, 55, 18, 18, 18, 25, 25, 25, 25, 0, 0, 18, 18, 0, 0, 18, 18,
-    25, 55, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 55, 55, 0, 55, 55, 55,
-    25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55, 55, 5, 5, 27, 27,
-    27, 27, 27, 27, 5, 5, 55, 5, 25, 0, 0, 25, 25, 18, 0, 55, 55, 55, 55, 55,
-    55, 0, 0, 0, 0, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55,
-    55, 0, 55, 55, 0, 55, 55, 0, 55, 55, 0, 0, 25, 0, 18, 18, 18, 25, 25, 0,
-    0, 0, 0, 25, 25, 0, 0, 25, 25, 25, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 55,
-    55, 55, 55, 0, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-    16, 25, 25, 55, 55, 55, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 18,
-    0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0, 55, 55, 55, 55, 55, 0, 0,
-    25, 55, 18, 18, 18, 25, 25, 25, 25, 25, 0, 25, 25, 18, 0, 18, 18, 25, 0,
-    0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 25, 25, 0, 0,
-    7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 5, 5, 0, 0, 0, 0, 0, 0, 0, 55, 25,
-    25, 25, 25, 25, 25, 0, 25, 18, 18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0,
-    0, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55,
-    0, 55, 55, 55, 55, 55, 0, 0, 25, 55, 18, 25, 18, 25, 25, 25, 25, 0, 0,
-    18, 18, 0, 0, 18, 18, 25, 0, 0, 0, 0, 0, 0, 0, 0, 25, 18, 0, 0, 0, 0, 55,
-    55, 0, 55, 55, 55, 25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 5,
-    55, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 55, 0, 55,
-    55, 55, 55, 55, 55, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 55, 0, 0, 0, 55,
-    55, 0, 55, 0, 55, 55, 0, 0, 0, 55, 55, 0, 0, 0, 55, 55, 55, 0, 0, 0, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 18, 18, 25, 18,
-    18, 0, 0, 0, 18, 18, 18, 0, 18, 18, 18, 25, 0, 0, 55, 0, 0, 0, 0, 0, 0,
-    18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13,
-    14, 15, 16, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 25, 18,
-    18, 18, 25, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 0, 0, 0, 55, 25, 25, 25, 18, 18, 18, 18, 0, 25, 25, 25, 0, 25, 25,
-    25, 25, 0, 0, 0, 0, 0, 0, 0, 25, 25, 0, 55, 55, 55, 0, 0, 0, 0, 0, 55,
-    55, 25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0,
-    0, 5, 27, 27, 27, 27, 27, 27, 27, 5, 55, 25, 18, 18, 5, 55, 55, 55, 55,
-    55, 55, 55, 55, 0, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 25, 18, 25, 55, 18, 18, 18, 25, 25, 25, 25, 25, 25,
+    25, 25, 18, 18, 18, 18, 25, 18, 18, 55, 25, 25, 25, 25, 25, 25, 25, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 5, 5, 7, 8, 9, 10, 11, 12,
+    13, 14, 15, 16, 5, 103, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 25, 18, 18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 55, 55,
+    0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, 0, 55,
+    55, 55, 55, 0, 0, 25, 55, 18, 18, 18, 25, 25, 25, 25, 0, 0, 18, 18, 0, 0,
+    18, 18, 25, 55, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 55, 55, 0, 55,
+    55, 55, 25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55, 55, 5, 5,
+    27, 27, 27, 27, 27, 27, 5, 5, 55, 5, 25, 0, 0, 25, 25, 18, 0, 55, 55, 55,
+    55, 55, 55, 0, 0, 0, 0, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 0, 0, 25, 55, 18, 25, 18,
-    18, 18, 18, 18, 0, 25, 18, 18, 0, 18, 18, 25, 25, 0, 0, 0, 0, 0, 0, 0,
-    18, 18, 0, 0, 0, 0, 0, 0, 0, 55, 0, 55, 55, 25, 25, 0, 0, 7, 8, 9, 10,
+    55, 55, 55, 0, 55, 55, 0, 55, 55, 0, 55, 55, 0, 0, 25, 0, 18, 18, 18, 25,
+    25, 0, 0, 0, 0, 25, 25, 0, 0, 25, 25, 25, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,
+    0, 55, 55, 55, 55, 0, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13,
+    14, 15, 16, 25, 25, 55, 55, 55, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
+    25, 18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0, 55, 55, 55, 55, 55,
+    0, 0, 25, 55, 18, 18, 18, 25, 25, 25, 25, 25, 0, 25, 25, 18, 0, 18, 18,
+    25, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 25,
+    25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+    55, 25, 25, 25, 25, 25, 25, 0, 25, 18, 18, 0, 55, 55, 55, 55, 55, 55, 55,
+    55, 0, 0, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0,
+    55, 55, 0, 55, 55, 55, 55, 55, 0, 0, 25, 55, 18, 25, 18, 25, 25, 25, 25,
+    0, 0, 18, 18, 0, 0, 18, 18, 25, 0, 0, 0, 0, 0, 0, 0, 25, 25, 18, 0, 0, 0,
+    0, 55, 55, 0, 55, 55, 55, 25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+    16, 5, 55, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 55,
+    0, 55, 55, 55, 55, 55, 55, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 55, 0, 0,
+    0, 55, 55, 0, 55, 0, 55, 55, 0, 0, 0, 55, 55, 0, 0, 0, 55, 55, 55, 0, 0,
+    0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 18, 18,
+    25, 18, 18, 0, 0, 0, 18, 18, 18, 0, 18, 18, 18, 25, 0, 0, 55, 0, 0, 0, 0,
+    0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12,
+    13, 14, 15, 16, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 25,
+    18, 18, 18, 25, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 0, 0, 0, 55, 25, 25, 25, 18, 18, 18, 18, 0, 25, 25, 25, 0, 25,
+    25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 25, 25, 0, 55, 55, 55, 0, 0, 0, 0, 0,
+    55, 55, 25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0,
+    0, 0, 5, 27, 27, 27, 27, 27, 27, 27, 5, 55, 25, 18, 18, 5, 55, 55, 55,
+    55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 0, 0, 25, 55, 18, 25,
+    18, 18, 18, 18, 18, 0, 25, 18, 18, 0, 18, 18, 25, 25, 0, 0, 0, 0, 0, 0,
+    0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 55, 0, 55, 55, 25, 25, 0, 0, 7, 8, 9, 10,
     11, 12, 13, 14, 15, 16, 0, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    25, 25, 18, 18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55,
+    25, 25, 18, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 25, 25, 55, 18, 18, 18, 25, 25, 25, 25, 0, 18, 18, 18, 0,
     18, 18, 18, 25, 55, 5, 0, 0, 0, 0, 55, 55, 55, 18, 27, 27, 27, 27, 27,
     27, 27, 55, 55, 55, 25, 25, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 55, 55, 55, 55, 55, 55, 0, 0, 18,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 55, 55, 55, 55, 55, 55, 0, 25, 18,
     18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55,
@@ -2698,53 +2697,53 @@
     0, 0, 25, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 7, 8, 9,
     10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 103,
     5, 5, 5, 5, 5, 5, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    25, 25, 6, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,
-    25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25,
+    25, 25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 18, 25, 25, 25,
-    25, 25, 18, 25, 18, 18, 18, 18, 18, 25, 18, 18, 55, 55, 55, 55, 55, 55,
-    55, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 25, 25, 18, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 18, 25, 25,
+    25, 25, 25, 18, 25, 18, 18, 18, 18, 18, 25, 18, 18, 55, 55, 55, 55, 55,
+    55, 55, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 25, 25, 18, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 18, 25, 25, 25, 25, 18, 18, 25, 25, 18, 25, 25, 25, 55,
-    55, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 18, 25, 25, 25, 25, 18, 18, 25, 25, 18, 25, 25,
+    25, 55, 55, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    25, 18, 25, 25, 18, 18, 18, 25, 18, 25, 25, 25, 18, 18, 0, 0, 0, 0, 0, 0,
-    0, 0, 5, 5, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 25, 18, 25, 25, 18, 18, 18, 25, 18, 25, 25, 25, 18, 18, 0, 0, 0,
+    0, 0, 0, 0, 0, 5, 5, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 18, 18, 18, 18, 18, 18, 18, 18, 25, 25, 25, 25, 25, 25,
-    25, 25, 18, 18, 25, 25, 0, 0, 0, 5, 5, 5, 5, 5, 7, 8, 9, 10, 11, 12, 13,
-    14, 15, 16, 0, 0, 0, 55, 55, 55, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 103, 103, 103, 103, 103,
-    5, 5, 245, 246, 247, 248, 249, 250, 251, 252, 253, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 18, 18, 18, 18, 18, 25, 25, 25,
+    25, 25, 25, 25, 25, 18, 18, 25, 25, 0, 0, 0, 5, 5, 5, 5, 5, 7, 8, 9, 10,
+    11, 12, 13, 14, 15, 16, 0, 0, 0, 55, 55, 55, 7, 8, 9, 10, 11, 12, 13, 14,
+    15, 16, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 103, 103,
+    103, 103, 103, 5, 5, 245, 246, 247, 248, 249, 250, 251, 252, 253, 0, 0,
+    0, 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
     254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
     254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
-    254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
-    254, 0, 0, 254, 254, 254, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
-    25, 25, 25, 5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 18,
-    25, 25, 25, 25, 25, 25, 25, 55, 55, 55, 55, 25, 55, 55, 55, 55, 55, 55,
-    25, 55, 55, 18, 25, 25, 55, 0, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20,
+    254, 254, 254, 254, 0, 0, 254, 254, 254, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
+    0, 0, 0, 0, 0, 25, 25, 25, 5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 18, 25, 25, 25, 25, 25, 25, 25, 55, 55, 55, 55, 25, 55, 55, 55,
+    55, 55, 55, 25, 55, 55, 18, 25, 25, 55, 0, 0, 0, 0, 0, 20, 20, 20, 20,
     20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
     20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-    20, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
-    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
-    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
-    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
-    102, 102, 102, 102, 102, 102, 102, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-    20, 20, 20, 20, 102, 255, 20, 20, 20, 256, 20, 20, 20, 20, 20, 20, 20,
-    20, 20, 20, 20, 20, 20, 20, 20, 20, 257, 20, 20, 20, 20, 20, 20, 20, 20,
     20, 20, 20, 20, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
     102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
-    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 25, 25, 25,
+    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 20, 20, 20, 20, 20, 20,
+    20, 20, 20, 20, 20, 20, 20, 102, 255, 20, 20, 20, 256, 20, 20, 20, 20,
+    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 257, 20, 20, 20, 20, 20,
+    20, 20, 20, 20, 20, 20, 20, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 0, 25, 25, 25, 25, 25, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    25, 25, 25, 0, 25, 25, 25, 25, 25, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
@@ -2752,51 +2751,51 @@
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 258, 259, 260, 261,
-    262, 263, 20, 20, 264, 20, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 258, 259,
+    260, 261, 262, 263, 20, 20, 264, 20, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 265, 265, 265, 265,
-    265, 265, 265, 265, 266, 266, 266, 266, 266, 266, 266, 266, 265, 265,
-    265, 265, 265, 265, 0, 0, 266, 266, 266, 266, 266, 266, 0, 0, 265, 265,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 265, 265,
     265, 265, 265, 265, 265, 265, 266, 266, 266, 266, 266, 266, 266, 266,
+    265, 265, 265, 265, 265, 265, 0, 0, 266, 266, 266, 266, 266, 266, 0, 0,
     265, 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, 266, 266, 266,
-    266, 266, 265, 265, 265, 265, 265, 265, 0, 0, 266, 266, 266, 266, 266,
-    266, 0, 0, 267, 265, 268, 265, 269, 265, 270, 265, 0, 266, 0, 266, 0,
-    266, 0, 266, 265, 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, 266,
-    266, 266, 266, 266, 271, 271, 272, 272, 272, 272, 273, 273, 274, 274,
-    275, 275, 276, 276, 0, 0, 277, 278, 279, 280, 281, 282, 283, 284, 285,
-    286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
-    300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
-    314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 265, 265, 325,
-    326, 327, 0, 328, 329, 266, 266, 330, 330, 331, 6, 332, 6, 6, 6, 333,
-    334, 335, 0, 336, 337, 338, 338, 338, 338, 339, 6, 6, 6, 265, 265, 340,
-    341, 0, 0, 342, 343, 266, 266, 344, 344, 0, 6, 6, 6, 265, 265, 345, 346,
-    347, 127, 348, 349, 266, 266, 350, 350, 131, 6, 6, 6, 0, 0, 351, 352,
-    353, 0, 354, 355, 356, 356, 357, 357, 358, 6, 6, 0, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 21, 21, 21, 21, 21, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 3, 3, 21, 21, 21, 21, 21, 2, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 21, 21, 21, 21,
-    21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 359, 102, 0, 0, 360, 361,
-    362, 363, 364, 365, 5, 5, 5, 5, 5, 102, 359, 26, 22, 23, 360, 361, 362,
-    363, 364, 365, 5, 5, 5, 5, 5, 0, 102, 102, 102, 102, 102, 102, 102, 102,
-    102, 102, 102, 102, 102, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 6, 6, 6, 6, 25, 6, 6, 6, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 121, 5, 5,
-    5, 5, 121, 5, 5, 20, 121, 121, 121, 20, 20, 121, 121, 121, 20, 5, 121, 5,
-    5, 366, 121, 121, 121, 121, 121, 5, 5, 5, 5, 5, 5, 121, 5, 367, 5, 121,
-    5, 368, 369, 121, 121, 366, 20, 121, 121, 370, 121, 20, 55, 55, 55, 55,
-    20, 5, 5, 20, 20, 121, 121, 5, 5, 5, 5, 5, 121, 20, 20, 20, 20, 5, 5, 5,
-    5, 371, 5, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
-    372, 372, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373,
-    373, 373, 373, 373, 243, 243, 243, 30, 31, 243, 243, 243, 243, 27, 5, 5,
-    0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    266, 266, 265, 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, 266,
+    266, 266, 266, 266, 265, 265, 265, 265, 265, 265, 0, 0, 266, 266, 266,
+    266, 266, 266, 0, 0, 267, 265, 268, 265, 269, 265, 270, 265, 0, 266, 0,
+    266, 0, 266, 0, 266, 265, 265, 265, 265, 265, 265, 265, 265, 266, 266,
+    266, 266, 266, 266, 266, 266, 271, 271, 272, 272, 272, 272, 273, 273,
+    274, 274, 275, 275, 276, 276, 0, 0, 277, 278, 279, 280, 281, 282, 283,
+    284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+    298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+    312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 265,
+    265, 325, 326, 327, 0, 328, 329, 266, 266, 330, 330, 331, 6, 332, 6, 6,
+    6, 333, 334, 335, 0, 336, 337, 338, 338, 338, 338, 339, 6, 6, 6, 265,
+    265, 340, 341, 0, 0, 342, 343, 266, 266, 344, 344, 0, 6, 6, 6, 265, 265,
+    345, 346, 347, 127, 348, 349, 266, 266, 350, 350, 131, 6, 6, 6, 0, 0,
+    351, 352, 353, 0, 354, 355, 356, 356, 357, 357, 358, 6, 6, 0, 2, 2, 2, 2,
+    2, 2, 2, 2, 2, 2, 2, 21, 21, 21, 21, 21, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 3, 3, 21, 21, 21, 21, 21, 2, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 21,
+    21, 21, 21, 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 359, 102, 0,
+    0, 360, 361, 362, 363, 364, 365, 5, 5, 5, 5, 5, 102, 359, 26, 22, 23,
+    360, 361, 362, 363, 364, 365, 5, 5, 5, 5, 5, 0, 102, 102, 102, 102, 102,
+    102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 25, 25, 25, 25, 6, 6, 6, 6, 25, 6, 6, 6, 25, 25, 25, 25, 25,
+    25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5, 5, 121, 5, 5, 5, 5, 121, 5, 5, 20, 121, 121, 121, 20, 20, 121, 121,
+    121, 20, 5, 121, 5, 5, 366, 121, 121, 121, 121, 121, 5, 5, 5, 5, 5, 5,
+    121, 5, 367, 5, 121, 5, 368, 369, 121, 121, 366, 20, 121, 121, 370, 121,
+    20, 55, 55, 55, 55, 20, 5, 5, 20, 20, 121, 121, 5, 5, 5, 5, 5, 121, 20,
+    20, 20, 20, 5, 5, 5, 5, 371, 5, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372,
+    372, 372, 372, 372, 372, 372, 373, 373, 373, 373, 373, 373, 373, 373,
+    373, 373, 373, 373, 373, 373, 373, 373, 243, 243, 243, 30, 31, 243, 243,
+    243, 243, 27, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -2807,26 +2806,26 @@
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 27, 27, 27, 27,
-    27, 27, 27, 27, 27, 27, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 27,
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 22, 23, 360, 361, 362, 363, 364,
-    365, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 374, 374, 374, 374,
-    374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374,
-    374, 374, 374, 374, 374, 374, 374, 374, 375, 375, 375, 375, 375, 375,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 22, 23, 360, 361, 362, 363, 364, 365,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 22, 23, 360, 361, 362,
+    363, 364, 365, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 22, 23,
+    360, 361, 362, 363, 364, 365, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374,
+    374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 375,
     375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375,
-    375, 375, 375, 375, 375, 375, 359, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 359, 5, 5, 5, 5, 5, 5,
+    375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 359, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27,
+    359, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 26, 22, 23, 360, 361,
-    362, 363, 364, 365, 27, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 26,
-    22, 23, 360, 361, 362, 363, 364, 365, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 26,
+    22, 23, 360, 361, 362, 363, 364, 365, 27, 26, 22, 23, 360, 361, 362, 363,
+    364, 365, 27, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -2835,193 +2834,238 @@
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
+    136, 136, 136, 136, 136, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 30, 31, 376, 377,
+    378, 379, 380, 30, 31, 30, 31, 30, 31, 381, 382, 383, 384, 20, 30, 31,
+    20, 30, 31, 20, 20, 20, 20, 20, 102, 102, 385, 385, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
+    31, 30, 31, 30, 31, 20, 5, 5, 5, 5, 5, 5, 30, 31, 30, 31, 25, 25, 25, 30,
+    31, 0, 0, 0, 0, 0, 5, 5, 5, 5, 27, 5, 5, 386, 386, 386, 386, 386, 386,
+    386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386,
+    386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386,
+    386, 386, 386, 386, 0, 386, 0, 0, 0, 0, 0, 386, 0, 0, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0,
+    0, 0, 0, 103, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55,
+    55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55,
+    55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55,
+    0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 25, 25,
+    25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 387, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 136, 136, 136, 136,
-    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
-    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
-    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
-    136, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 0, 30, 31, 376, 377, 378, 379, 380, 30, 31,
-    30, 31, 30, 31, 381, 382, 383, 384, 20, 30, 31, 20, 30, 31, 20, 20, 20,
-    20, 20, 102, 102, 385, 385, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 20,
-    5, 5, 5, 5, 5, 5, 30, 31, 30, 31, 25, 25, 25, 30, 31, 0, 0, 0, 0, 0, 5,
-    5, 5, 5, 27, 5, 5, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386,
-    386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386,
-    386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 0, 386,
-    0, 0, 0, 0, 0, 386, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 103, 5, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55,
-    55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55,
-    55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55,
-    0, 55, 55, 55, 55, 55, 55, 55, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 387, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 103, 55,
+    243, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 243, 243, 243, 243, 243, 243, 243, 243, 243, 25, 25, 25, 25, 18,
+    18, 5, 103, 103, 103, 103, 103, 5, 5, 243, 243, 243, 103, 55, 5, 5, 5, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 25, 25, 6,
+    6, 103, 103, 55, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 5, 103, 103, 103, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 0, 5, 5, 27, 27, 27, 27, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 103, 55, 243, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 243, 243, 243, 243, 243,
-    243, 243, 243, 243, 25, 25, 25, 25, 18, 18, 5, 103, 103, 103, 103, 103,
-    5, 5, 243, 243, 243, 103, 55, 5, 5, 5, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 0, 0, 25, 25, 6, 6, 103, 103, 55, 5, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 5, 103, 103,
-    103, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    0, 5, 5, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 27, 27, 27, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 27, 5, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 27, 27, 27, 27, 27,
     27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 27, 27, 27, 27, 27, 27, 27, 5, 27,
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 55, 55, 55, 55, 55,
-    388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 388, 55, 55, 388, 55, 55, 55, 388, 55, 388, 55, 55, 55,
+    5, 5, 5, 5, 5, 5, 5, 5, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 388, 55, 55, 55, 55, 55, 55, 55, 388, 55, 388, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388,
-    388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55,
-    55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 388, 55, 388, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 388, 388, 388, 55, 55, 55, 55,
-    55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 388, 388, 388, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    388, 55, 55, 388, 55, 55, 55, 388, 55, 388, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55,
+    55, 55, 55, 55, 55, 388, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 388, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 388,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55,
     388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 388, 55, 388, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 388, 55, 388, 388, 388, 55, 55, 55, 55, 55, 55, 388, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 388, 388, 388, 388, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 388, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    388, 388, 388, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
@@ -3031,60 +3075,22 @@
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 388, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 388, 388, 388, 55, 388, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55,
+    388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    388, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
@@ -3093,73 +3099,67 @@
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 388, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 103, 103, 103, 103, 103,
-    5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 5, 5, 5, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 7, 8, 9, 10,
-    11, 12, 13, 14, 15, 16, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 55, 25, 6, 6, 6,
-    5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 103, 30, 31, 30, 31, 30,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 103, 103, 103, 103, 103, 5, 5,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 103, 5, 5, 5, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 7, 8, 9, 10, 11, 12,
+    13, 14, 15, 16, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
     31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30,
-    31, 30, 31, 30, 31, 102, 102, 25, 25, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 55, 25, 6, 6, 6, 5,
+    25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 103, 30, 31, 30, 31, 30, 31,
+    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
+    30, 31, 30, 31, 102, 102, 25, 25, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 243, 243, 243, 243, 243, 243, 243, 243, 243,
-    243, 25, 25, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6,
-    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 103, 103, 103, 103,
-    103, 103, 103, 103, 103, 6, 6, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-    30, 31, 30, 31, 20, 20, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
+    55, 55, 55, 55, 55, 55, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+    25, 25, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6,
+    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 103, 103, 103, 103, 103,
+    103, 103, 103, 103, 6, 6, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
+    30, 31, 20, 20, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
     30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
     30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 102, 20, 20, 20,
-    20, 20, 20, 20, 20, 30, 31, 30, 31, 389, 30, 31, 30, 31, 30, 31, 30, 31,
-    30, 31, 103, 6, 6, 30, 31, 390, 20, 55, 30, 31, 30, 31, 391, 20, 30, 31,
-    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-    392, 393, 394, 395, 392, 20, 396, 397, 398, 399, 30, 31, 30, 31, 30, 31,
-    30, 31, 30, 31, 30, 31, 0, 0, 30, 31, 400, 401, 402, 0, 0, 0, 0, 0, 0, 0,
+    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 102, 20, 20, 20, 20, 20,
+    20, 20, 20, 30, 31, 30, 31, 389, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
+    103, 6, 6, 30, 31, 390, 20, 55, 30, 31, 30, 31, 391, 20, 30, 31, 30, 31,
+    30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 392, 393,
+    394, 395, 392, 20, 396, 397, 398, 399, 30, 31, 30, 31, 30, 31, 30, 31,
+    30, 31, 30, 31, 0, 0, 30, 31, 400, 401, 402, 30, 31, 30, 31, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 102, 102, 20, 55,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 55, 102, 102, 20, 55,
     55, 55, 55, 55, 55, 55, 25, 55, 55, 55, 25, 55, 55, 55, 55, 25, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 18, 18, 25, 25, 18, 5, 5, 5, 5, 0, 0, 0, 0, 27, 27, 27, 27,
+    55, 55, 55, 18, 18, 25, 25, 18, 5, 5, 5, 5, 25, 0, 0, 0, 27, 27, 27, 27,
     27, 27, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
@@ -3203,7 +3203,7 @@
     0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
     20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
     403, 20, 20, 20, 20, 20, 20, 20, 6, 102, 102, 102, 102, 20, 20, 20, 20,
-    20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 404, 405, 406, 407, 408, 409,
+    20, 20, 20, 20, 20, 103, 6, 6, 0, 0, 0, 0, 404, 405, 406, 407, 408, 409,
     410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423,
     424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
     438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
@@ -3335,7 +3335,7 @@
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 27, 27, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -3473,175 +3473,188 @@
     26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 27, 27, 27, 27, 27, 27, 27,
     27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 27, 27, 27, 27, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 0, 25, 25, 5, 0, 0, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 55,
+    0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 27, 27, 27, 27, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 18, 25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 26, 22, 23, 360, 361, 362,
+    363, 364, 365, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 7, 8, 9, 10,
+    11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
+    25, 25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25,
+    25, 18, 18, 25, 25, 5, 5, 21, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 21, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10,
+    11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 25, 25, 25, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 25,
+    18, 25, 25, 25, 25, 25, 25, 25, 25, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+    16, 5, 5, 5, 5, 55, 18, 18, 55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 5, 5, 55, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 25, 25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 25, 18, 18, 55, 55,
+    55, 55, 5, 5, 5, 5, 25, 25, 25, 25, 5, 18, 25, 7, 8, 9, 10, 11, 12, 13,
+    14, 15, 16, 55, 5, 55, 5, 5, 5, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25, 18, 18, 25,
+    18, 25, 25, 5, 5, 5, 5, 5, 5, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 25,
-    18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 0, 55, 55, 55, 55, 0, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 5, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 5, 5, 5,
-    5, 5, 5, 0, 0, 0, 0, 26, 22, 23, 360, 361, 362, 363, 364, 365, 27, 27,
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 18, 55, 55, 55,
+    55, 55, 55, 55, 55, 25, 18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 0, 0,
+    0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 25, 25,
+    18, 18, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, 0, 0, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 18, 18, 25, 25, 5, 5,
-    21, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-    0, 0, 0, 0, 0, 0, 25, 25, 25, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 25, 18, 25, 25, 25, 25, 25,
-    25, 25, 25, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 5, 5, 5, 5, 55, 18,
-    18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 25, 5, 5, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
-    25, 18, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25,
-    25, 25, 25, 25, 25, 25, 25, 25, 18, 18, 55, 55, 55, 55, 5, 5, 5, 5, 25,
-    25, 25, 25, 5, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 55, 5, 55, 5,
-    5, 5, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 18, 18, 18, 25, 25, 25, 18, 18, 25, 18, 25, 25, 5, 5, 5, 5, 5, 5,
-    25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55,
-    55, 55, 0, 55, 0, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 5, 0,
-    0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 18, 18,
-    18, 25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12,
-    13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 25, 25, 18, 18, 0, 55, 55, 55, 55, 55,
-    55, 55, 55, 0, 0, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 55, 55,
-    55, 55, 0, 55, 55, 0, 55, 55, 55, 55, 55, 0, 25, 25, 55, 18, 18, 25, 18,
-    18, 18, 18, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, 55, 0, 0, 0, 0, 0, 0,
-    18, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 18, 18, 0, 0, 25, 25, 25, 25, 25,
-    25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18,
-    18, 25, 25, 25, 25, 25, 25, 25, 25, 18, 18, 25, 25, 25, 18, 25, 55, 55,
-    55, 55, 5, 5, 5, 5, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 5, 0, 5,
-    25, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0, 55, 55, 55, 55, 55,
+    0, 25, 25, 55, 18, 18, 25, 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 18, 18,
+    18, 0, 0, 55, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55,
+    18, 18, 0, 0, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 18, 18, 18, 25, 25, 25, 25, 25, 25, 18, 25, 18, 18, 18, 18, 25, 25,
-    18, 25, 25, 55, 55, 5, 55, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12,
-    13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 18,
+    18, 25, 25, 25, 18, 25, 55, 55, 55, 55, 5, 5, 5, 5, 5, 7, 8, 9, 10, 11,
+    12, 13, 14, 15, 16, 5, 5, 0, 5, 25, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 0, 0, 18, 18, 18,
-    18, 25, 25, 18, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 55, 55, 55, 55, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 25,
+    25, 18, 25, 18, 18, 18, 18, 25, 25, 18, 25, 25, 55, 55, 5, 55, 0, 0, 0,
+    0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25,
-    25, 25, 25, 25, 25, 25, 18, 18, 25, 18, 25, 25, 5, 5, 5, 55, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18,
+    18, 25, 25, 25, 25, 0, 0, 18, 18, 18, 18, 25, 25, 18, 25, 25, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 55, 55, 55, 55,
+    25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 18, 18, 25, 18,
+    25, 25, 5, 5, 5, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11,
+    12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 25, 18, 25, 18, 18, 25, 25, 25, 25, 25, 25, 18, 25, 55,
     0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0,
-    0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 18, 25, 18,
-    18, 25, 25, 25, 25, 25, 25, 18, 25, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10,
-    11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 0, 0, 25, 25, 25, 18, 18, 25, 25, 25, 25, 18, 25, 25, 25, 25, 25, 0,
-    0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 27, 27, 5, 5, 5, 5, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 25, 18, 25, 25, 5, 0, 0, 0,
+    0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 25, 25, 25, 18, 18, 25, 25,
+    25, 25, 18, 25, 25, 25, 25, 25, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14,
+    15, 16, 27, 27, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 19, 19,
-    19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-    19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 7, 8, 9, 10, 11, 12, 13, 14,
-    15, 16, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 0, 0, 25, 25, 18, 18, 18, 18, 25,
-    55, 5, 55, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 55, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 25, 25, 25, 25, 25, 25, 18, 55, 25, 25, 25, 25, 5, 5, 5, 5,
-    5, 5, 5, 5, 25, 0, 0, 0, 0, 0, 0, 0, 0, 55, 25, 25, 25, 25, 25, 25, 18,
-    18, 25, 25, 25, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25, 25, 18, 25, 25, 5, 5, 5, 55, 5, 5, 5, 5,
-    5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 18, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25,
-    25, 25, 18, 25, 55, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9,
-    10, 11, 12, 13, 14, 15, 16, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 5, 5, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 18, 25, 25, 25, 25, 25,
-    25, 25, 18, 25, 25, 18, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55,
     0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 0, 25, 25, 0, 25, 25,
-    25, 25, 25, 25, 25, 55, 25, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12,
-    13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 18, 25, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+    19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+    19, 19, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 27, 27, 27, 27, 27, 27, 27,
+    27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55,
+    55, 0, 0, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 18,
-    18, 0, 25, 25, 0, 18, 18, 25, 18, 25, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9,
-    10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 18, 18, 18, 18, 18, 18, 0, 18, 18, 0, 0, 25, 25, 18, 25,
+    55, 18, 55, 18, 25, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11,
+    12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+    0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    25, 25, 18, 18, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18,
+    25, 25, 25, 25, 0, 0, 25, 25, 18, 18, 18, 18, 25, 55, 5, 55, 18, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25,
+    25, 25, 25, 18, 55, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 25, 0, 0, 0,
+    0, 0, 0, 0, 0, 55, 25, 25, 25, 25, 25, 25, 18, 18, 25, 25, 25, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 18, 25, 25, 5, 5, 5, 55, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 18,
+    25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 18, 25, 55, 5, 5,
+    5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+    16, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    27, 27, 0, 0, 0, 5, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+    25, 25, 25, 25, 25, 0, 18, 25, 25, 25, 25, 25, 25, 25, 18, 25, 25, 18,
+    25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 27, 27, 27, 27, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 5, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 25,
+    25, 25, 25, 0, 0, 0, 25, 0, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 55,
+    25, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0,
+    0, 0, 0, 55, 55, 55, 55, 55, 55, 0, 55, 55, 0, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 18, 18, 18, 18, 18, 0, 25, 25, 0, 18, 18,
+    25, 18, 25, 55, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 243,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25, 18, 18, 5, 5, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
@@ -3649,159 +3662,164 @@
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
-    243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 0, 5, 5, 5, 5, 5,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    243, 243, 243, 243, 243, 243, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0,
-    5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 25, 25, 25, 25,
-    25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 25, 25, 25, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 103,
-    103, 103, 103, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12,
-    13, 14, 15, 16, 0, 27, 27, 27, 27, 27, 27, 27, 0, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0,
-    0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
-    17, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-    19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 27,
-    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 27, 27, 27, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 25, 55,
-    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
-    18, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 103, 103, 103, 103, 103, 103,
-    103, 103, 103, 103, 103, 103, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 103, 103, 5, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 7,
+    8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 0, 0, 25, 25, 25, 25, 25, 5, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 25, 25,
+    25, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 103, 103, 103, 103, 5, 5,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 27,
+    27, 27, 27, 27, 27, 27, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19,
+    19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+    19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 27, 27, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+    5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 25, 55, 18, 18, 18,
+    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0,
+    0, 0, 0, 0, 25, 25, 25, 25, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+    103, 103, 103, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
+    103, 5, 103, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 5,
-    25, 25, 5, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+    55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0,
+    0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 5, 25,
+    25, 5, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 18, 25, 25, 25,
-    5, 5, 5, 18, 18, 18, 18, 18, 18, 21, 21, 21, 21, 21, 21, 21, 21, 25, 25,
-    25, 25, 25, 25, 25, 25, 5, 5, 25, 25, 25, 25, 25, 25, 25, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 18, 18, 25, 25, 25, 5, 5,
+    5, 18, 18, 18, 18, 18, 18, 21, 21, 21, 21, 21, 21, 21, 21, 25, 25, 25,
+    25, 25, 25, 25, 25, 5, 5, 25, 25, 25, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 25, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 25, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27,
     27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-    27, 0, 0, 0, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+    27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27,
+    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
+    0, 0, 0, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
-    121, 121, 121, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 121, 121, 121, 121, 121,
+    121, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+    20, 20, 20, 20, 20, 20, 20, 20, 20, 121, 121, 121, 121, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
-    121, 121, 121, 121, 121, 121, 121, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20,
-    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 121, 121,
+    121, 121, 121, 121, 121, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20,
+    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 121, 121, 121,
     121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
-    121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 20, 20, 20, 20, 20, 20,
+    121, 121, 121, 121, 121, 121, 121, 121, 121, 20, 20, 20, 20, 20, 20, 20,
     20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-    20, 20, 121, 0, 121, 121, 0, 0, 121, 0, 0, 121, 121, 0, 0, 121, 121, 121,
+    20, 121, 0, 121, 121, 0, 0, 121, 0, 0, 121, 121, 0, 0, 121, 121, 121,
     121, 0, 121, 121, 121, 121, 121, 121, 121, 121, 20, 20, 20, 20, 0, 20, 0,
     20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
     20, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
@@ -3940,16 +3958,16 @@
     5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 359, 359, 26, 22, 23, 360, 361, 362, 363, 364,
-    365, 27, 27, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    365, 27, 27, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 502, 502, 502, 502, 502,
     502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502,
     502, 502, 502, 502, 502, 502, 502, 5, 5, 5, 5, 5, 5, 502, 502, 502, 502,
     502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502,
-    502, 502, 502, 502, 502, 502, 502, 502, 5, 5, 5, 0, 0, 0, 502, 502, 502,
+    502, 502, 502, 502, 502, 502, 502, 502, 5, 5, 5, 5, 5, 5, 502, 502, 502,
     502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502,
     502, 502, 502, 502, 502, 502, 502, 502, 502, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3966,9 +3984,9 @@
     6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
     0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -3986,32 +4004,83 @@
     0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,
     0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,
-    0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,
+    5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5,
+    5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
+    5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9,
+    10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 55, 388, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
@@ -4023,18 +4092,43 @@
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55,
-    55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
@@ -4044,91 +4138,27 @@
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
+    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 388, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
     55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
-    55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+    0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
     21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
     21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
     21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
     21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-    21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 25, 25, 25,
+    21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
@@ -4142,13 +4172,13 @@
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
     25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-    25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+    25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 0, 0,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+    0,
 };
 
 /* Returns the numeric value as double for Unicode characters
@@ -4221,6 +4251,7 @@
     case 0x116C0:
     case 0x11730:
     case 0x118E0:
+    case 0x11950:
     case 0x11C50:
     case 0x11D50:
     case 0x11DA0:
@@ -4240,6 +4271,7 @@
     case 0x1F101:
     case 0x1F10B:
     case 0x1F10C:
+    case 0x1FBF0:
         return (double) 0.0;
     case 0x0031:
     case 0x00B9:
@@ -4332,6 +4364,7 @@
     case 0x10E60:
     case 0x10F1D:
     case 0x10F51:
+    case 0x10FC5:
     case 0x11052:
     case 0x11067:
     case 0x110F1:
@@ -4345,6 +4378,7 @@
     case 0x116C1:
     case 0x11731:
     case 0x118E1:
+    case 0x11951:
     case 0x11C51:
     case 0x11C5A:
     case 0x11D51:
@@ -4377,6 +4411,7 @@
     case 0x1ECB1:
     case 0x1ED01:
     case 0x1F102:
+    case 0x1FBF1:
     case 0x2092A:
         return (double) 1.0;
     case 0x0D5C:
@@ -4518,6 +4553,7 @@
     case 0x10E69:
     case 0x10F22:
     case 0x10F52:
+    case 0x10FC9:
     case 0x1105B:
     case 0x111EA:
     case 0x1173A:
@@ -4561,6 +4597,7 @@
     case 0x10E72:
     case 0x10F25:
     case 0x10F54:
+    case 0x10FCB:
     case 0x11064:
     case 0x111F3:
     case 0x11C6C:
@@ -4791,6 +4828,7 @@
     case 0x10D32:
     case 0x10E61:
     case 0x10F1E:
+    case 0x10FC6:
     case 0x11053:
     case 0x11068:
     case 0x110F2:
@@ -4804,6 +4842,7 @@
     case 0x116C2:
     case 0x11732:
     case 0x118E2:
+    case 0x11952:
     case 0x11C52:
     case 0x11C5B:
     case 0x11D52:
@@ -4840,6 +4879,7 @@
     case 0x1ED02:
     case 0x1ED2F:
     case 0x1F103:
+    case 0x1FBF2:
     case 0x22390:
         return (double) 2.0;
     case 0x109F7:
@@ -4880,6 +4920,7 @@
     case 0x10E6A:
     case 0x10F23:
     case 0x10F53:
+    case 0x10FCA:
     case 0x1105C:
     case 0x111EB:
     case 0x1173B:
@@ -5012,6 +5053,7 @@
     case 0x10D33:
     case 0x10E62:
     case 0x10F1F:
+    case 0x10FC7:
     case 0x11054:
     case 0x11069:
     case 0x110F3:
@@ -5025,6 +5067,7 @@
     case 0x116C3:
     case 0x11733:
     case 0x118E3:
+    case 0x11953:
     case 0x11C53:
     case 0x11C5C:
     case 0x11D53:
@@ -5065,6 +5108,7 @@
     case 0x1ED03:
     case 0x1ED30:
     case 0x1F104:
+    case 0x1FBF3:
     case 0x20AFD:
     case 0x20B19:
     case 0x22998:
@@ -5231,6 +5275,7 @@
     case 0x10D34:
     case 0x10E63:
     case 0x10F20:
+    case 0x10FC8:
     case 0x11055:
     case 0x1106A:
     case 0x110F4:
@@ -5244,6 +5289,7 @@
     case 0x116C4:
     case 0x11734:
     case 0x118E4:
+    case 0x11954:
     case 0x11C54:
     case 0x11C5D:
     case 0x11D54:
@@ -5284,6 +5330,7 @@
     case 0x1ED04:
     case 0x1ED31:
     case 0x1F105:
+    case 0x1FBF4:
     case 0x20064:
     case 0x200E2:
     case 0x2626D:
@@ -5440,6 +5487,7 @@
     case 0x116C5:
     case 0x11735:
     case 0x118E5:
+    case 0x11955:
     case 0x11C55:
     case 0x11C5E:
     case 0x11D55:
@@ -5477,6 +5525,7 @@
     case 0x1ED05:
     case 0x1ED32:
     case 0x1F106:
+    case 0x1FBF5:
     case 0x20121:
         return (double) 5.0;
     case 0x109FA:
@@ -5633,6 +5682,7 @@
     case 0x116C6:
     case 0x11736:
     case 0x118E6:
+    case 0x11956:
     case 0x11C56:
     case 0x11C5F:
     case 0x11D56:
@@ -5664,6 +5714,7 @@
     case 0x1ED06:
     case 0x1ED33:
     case 0x1F107:
+    case 0x1FBF6:
     case 0x20AEA:
         return (double) 6.0;
     case 0x109FB:
@@ -5779,6 +5830,7 @@
     case 0x116C7:
     case 0x11737:
     case 0x118E7:
+    case 0x11957:
     case 0x11C57:
     case 0x11C60:
     case 0x11D57:
@@ -5811,6 +5863,7 @@
     case 0x1ED07:
     case 0x1ED34:
     case 0x1F108:
+    case 0x1FBF7:
     case 0x20001:
         return (double) 7.0;
     case 0x109FC:
@@ -5927,6 +5980,7 @@
     case 0x116C8:
     case 0x11738:
     case 0x118E8:
+    case 0x11958:
     case 0x11C58:
     case 0x11C61:
     case 0x11D58:
@@ -5958,6 +6012,7 @@
     case 0x1ED08:
     case 0x1ED35:
     case 0x1F109:
+    case 0x1FBF8:
         return (double) 8.0;
     case 0x109FD:
         return (double) 8.0/12.0;
@@ -6069,6 +6124,7 @@
     case 0x116C9:
     case 0x11739:
     case 0x118E9:
+    case 0x11959:
     case 0x11C59:
     case 0x11C62:
     case 0x11D59:
@@ -6102,6 +6158,7 @@
     case 0x1ED09:
     case 0x1ED36:
     case 0x1F10A:
+    case 0x1FBF9:
     case 0x2F890:
         return (double) 9.0;
     case 0x109FE:
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index 58fe09f..313e8ab 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -1,9 +1,10 @@
 #include "Python.h"
-#include "structmember.h"
+#include "pycore_object.h"        // _PyObject_GET_WEAKREFS_LISTPTR()
+#include "structmember.h"         // PyMemberDef
 
 
 #define GET_WEAKREFS_LISTPTR(o) \
-        ((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))
+        ((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
 
 
 Py_ssize_t
@@ -361,6 +362,12 @@
     {NULL} /* Sentinel */
 };
 
+static PyMethodDef weakref_methods[] = {
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
+    {NULL} /* Sentinel */
+};
+
 PyTypeObject
 _PyWeakref_RefType = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
@@ -391,7 +398,7 @@
     0,                          /*tp_weaklistoffset*/
     0,                          /*tp_iter*/
     0,                          /*tp_iternext*/
-    0,                          /*tp_methods*/
+    weakref_methods,            /*tp_methods*/
     weakref_members,            /*tp_members*/
     0,                          /*tp_getset*/
     0,                          /*tp_base*/
@@ -478,7 +485,7 @@
             _Py_IDENTIFIER(special); \
             UNWRAP(proxy); \
             Py_INCREF(proxy); \
-            PyObject* res = _PyObject_CallMethodId(proxy, &PyId_##special, NULL); \
+            PyObject* res = _PyObject_CallMethodIdNoArgs(proxy, &PyId_##special); \
             Py_DECREF(proxy); \
             return res; \
         }
@@ -658,10 +665,12 @@
 
 
 WRAP_METHOD(proxy_bytes, __bytes__)
+WRAP_METHOD(proxy_reversed, __reversed__)
 
 
 static PyMethodDef proxy_methods[] = {
         {"__bytes__", proxy_bytes, METH_NOARGS},
+        {"__reversed__", proxy_reversed, METH_NOARGS},
         {NULL, NULL}
 };
 
@@ -723,6 +732,21 @@
 };
 
 
+static Py_hash_t
+proxy_hash(PyObject *self)
+{
+    PyWeakReference *proxy = (PyWeakReference *)self;
+    if (!proxy_checkref(proxy)) {
+        return -1;
+    }
+    PyObject *obj = PyWeakref_GET_OBJECT(proxy);
+    Py_INCREF(obj);
+    Py_hash_t res = PyObject_Hash(obj);
+    Py_DECREF(obj);
+    return res;
+}
+
+
 PyTypeObject
 _PyWeakref_ProxyType = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
@@ -739,7 +763,7 @@
     &proxy_as_number,                   /* tp_as_number */
     &proxy_as_sequence,                 /* tp_as_sequence */
     &proxy_as_mapping,                  /* tp_as_mapping */
-    0,                                  /* tp_hash */
+    proxy_hash,                         /* tp_hash */
     0,                                  /* tp_call */
     proxy_str,                          /* tp_str */
     proxy_getattr,                      /* tp_getattro */
@@ -882,10 +906,12 @@
         if (result != NULL) {
             PyWeakReference *prev;
 
-            if (PyCallable_Check(ob))
-                Py_TYPE(result) = &_PyWeakref_CallableProxyType;
-            else
-                Py_TYPE(result) = &_PyWeakref_ProxyType;
+            if (PyCallable_Check(ob)) {
+                Py_SET_TYPE(result, &_PyWeakref_CallableProxyType);
+            }
+            else {
+                Py_SET_TYPE(result, &_PyWeakref_ProxyType);
+            }
             get_basic_refs(*list, &ref, &proxy);
             if (callback == NULL) {
                 if (proxy != NULL) {
@@ -931,7 +957,7 @@
 static void
 handle_callback(PyWeakReference *ref, PyObject *callback)
 {
-    PyObject *cbresult = PyObject_CallFunctionObjArgs(callback, ref, NULL);
+    PyObject *cbresult = PyObject_CallOneArg(callback, (PyObject *)ref);
 
     if (cbresult == NULL)
         PyErr_WriteUnraisable(callback);
@@ -952,7 +978,8 @@
 
     if (object == NULL
         || !PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))
-        || object->ob_refcnt != 0) {
+        || Py_REFCNT(object) != 0)
+    {
         PyErr_BadInternalCall();
         return;
     }
@@ -975,8 +1002,9 @@
             current->wr_callback = NULL;
             clear_weakref(current);
             if (callback != NULL) {
-                if (((PyObject *)current)->ob_refcnt > 0)
+                if (Py_REFCNT((PyObject *)current) > 0) {
                     handle_callback(current, callback);
+                }
                 Py_DECREF(callback);
             }
         }
@@ -993,8 +1021,7 @@
             for (i = 0; i < count; ++i) {
                 PyWeakReference *next = current->wr_next;
 
-                if (((PyObject *)current)->ob_refcnt > 0)
-                {
+                if (Py_REFCNT((PyObject *)current) > 0) {
                     Py_INCREF(current);
                     PyTuple_SET_ITEM(tuple, i * 2, (PyObject *) current);
                     PyTuple_SET_ITEM(tuple, i * 2 + 1, current->wr_callback);
diff --git a/PC/_msi.c b/PC/_msi.c
index 5079a52..58c1cfd 100644
--- a/PC/_msi.c
+++ b/PC/_msi.c
@@ -531,7 +531,7 @@
 static PyObject*
 record_new(MSIHANDLE h)
 {
-    msiobj *result = PyObject_NEW(struct msiobj, &record_Type);
+    msiobj *result = PyObject_New(struct msiobj, &record_Type);
 
     if (!result) {
         MsiCloseHandle(h);
@@ -882,7 +882,7 @@
     if ((status = MsiDatabaseOpenViewW(msidb->h, sql, &hView)) != ERROR_SUCCESS)
         return msierror(status);
 
-    result = PyObject_NEW(struct msiobj, &msiview_Type);
+    result = PyObject_New(struct msiobj, &msiview_Type);
     if (!result) {
         MsiCloseHandle(hView);
         return NULL;
@@ -918,7 +918,7 @@
     if (status != ERROR_SUCCESS)
         return msierror(status);
 
-    oresult = PyObject_NEW(struct msiobj, &summary_Type);
+    oresult = PyObject_New(struct msiobj, &summary_Type);
     if (!oresult) {
         MsiCloseHandle(result);
         return NULL;
@@ -1013,7 +1013,7 @@
     if (status != ERROR_SUCCESS)
         return msierror(status);
 
-    result = PyObject_NEW(struct msiobj, &msidb_Type);
+    result = PyObject_New(struct msiobj, &msidb_Type);
     if (!result) {
         MsiCloseHandle(h);
         return NULL;
diff --git a/PC/_testconsole.c b/PC/_testconsole.c
index 23d1286..b62f21c 100644
--- a/PC/_testconsole.c
+++ b/PC/_testconsole.c
@@ -55,16 +55,15 @@
     const wchar_t *p = (const wchar_t *)PyBytes_AS_STRING(s);
     DWORD size = (DWORD)PyBytes_GET_SIZE(s) / sizeof(wchar_t);
 
-    rec = (INPUT_RECORD*)PyMem_Malloc(sizeof(INPUT_RECORD) * size);
+    rec = (INPUT_RECORD*)PyMem_Calloc(size, sizeof(INPUT_RECORD));
     if (!rec)
         goto error;
-    memset(rec, 0, sizeof(INPUT_RECORD) * size);
 
     INPUT_RECORD *prec = rec;
     for (DWORD i = 0; i < size; ++i, ++p, ++prec) {
         prec->EventType = KEY_EVENT;
         prec->Event.KeyEvent.bKeyDown = TRUE;
-        prec->Event.KeyEvent.wRepeatCount = 10;
+        prec->Event.KeyEvent.wRepeatCount = 1;
         prec->Event.KeyEvent.uChar.UnicodeChar = *p;
     }
 
diff --git a/PC/bdist_wininst/bdist_wininst.vcxproj b/PC/bdist_wininst/bdist_wininst.vcxproj
index d2f1bb7..390bf4e 100644
--- a/PC/bdist_wininst/bdist_wininst.vcxproj
+++ b/PC/bdist_wininst/bdist_wininst.vcxproj
@@ -87,7 +87,7 @@
     </Midl>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
-      <AdditionalIncludeDirectories>$(PySourcePath)Modules\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(zlibDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary Condition="'$(Configuration)'=='Debug'">MultiThreadedDebug</RuntimeLibrary>
       <RuntimeLibrary Condition="'$(Configuration)'=='Release'">MultiThreaded</RuntimeLibrary>
@@ -102,15 +102,16 @@
   <ItemGroup>
     <ClCompile Include="extract.c" />
     <ClCompile Include="install.c" />
-    <ClCompile Include="..\..\Modules\zlib\adler32.c" />
-    <ClCompile Include="..\..\Modules\zlib\crc32.c" />
-    <ClCompile Include="..\..\Modules\zlib\inffast.c" />
-    <ClCompile Include="..\..\Modules\zlib\inflate.c" />
-    <ClCompile Include="..\..\Modules\zlib\inftrees.c" />
-    <ClCompile Include="..\..\Modules\zlib\zutil.c" />
+    <ClCompile Include="$(zlibDir)\adler32.c" />
+    <ClCompile Include="$(zlibDir)\crc32.c" />
+    <ClCompile Include="$(zlibDir)\inffast.c" />
+    <ClCompile Include="$(zlibDir)\inflate.c" />
+    <ClCompile Include="$(zlibDir)\inftrees.c" />
+    <ClCompile Include="$(zlibDir)\zutil.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="archive.h" />
+    <ClInclude Include="$(zlibDir)\zlib.h" />
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="install.rc" />
diff --git a/PC/bdist_wininst/bdist_wininst.vcxproj.filters b/PC/bdist_wininst/bdist_wininst.vcxproj.filters
index b4b6a4d..c97742e 100644
--- a/PC/bdist_wininst/bdist_wininst.vcxproj.filters
+++ b/PC/bdist_wininst/bdist_wininst.vcxproj.filters
@@ -16,45 +16,51 @@
       <UniqueIdentifier>{0c77c1cf-3f87-4f87-bd86-b425211c2181}</UniqueIdentifier>
       <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
     </Filter>
+    <Filter Include="Header Files\zlib">
+      <UniqueIdentifier>{d10220c7-69e3-47c5-8d82-c8e0d4d2ac88}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\PC\bdist_wininst\extract.c">
+    <ClCompile Include="extract.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\PC\bdist_wininst\install.c">
+    <ClCompile Include="install.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlib\adler32.c">
+    <ClCompile Include="$(zlibDir)\adler32.c">
       <Filter>Source Files\zlib</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlib\crc32.c">
+    <ClCompile Include="$(zlibDir)\crc32.c">
       <Filter>Source Files\zlib</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlib\inffast.c">
+    <ClCompile Include="$(zlibDir)\inffast.c">
       <Filter>Source Files\zlib</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlib\inflate.c">
+    <ClCompile Include="$(zlibDir)\inflate.c">
       <Filter>Source Files\zlib</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlib\inftrees.c">
+    <ClCompile Include="$(zlibDir)\inftrees.c">
       <Filter>Source Files\zlib</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlib\zutil.c">
+    <ClCompile Include="$(zlibDir)\zutil.c">
       <Filter>Source Files\zlib</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="..\PC\bdist_wininst\archive.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\PC\bdist_wininst\install.rc">
+    <ResourceCompile Include="install.rc">
       <Filter>Resource Files</Filter>
     </ResourceCompile>
   </ItemGroup>
   <ItemGroup>
-    <None Include="..\PC\bdist_wininst\PythonPowered.bmp">
+    <ClInclude Include="archive.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(zlibDir)\zlib.h">
+      <Filter>Header Files\zlib</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="PythonPowered.bmp">
       <Filter>Resource Files</Filter>
     </None>
   </ItemGroup>
diff --git a/PC/bdist_wininst/install.c b/PC/bdist_wininst/install.c
index 72d9837..5d77542 100644
--- a/PC/bdist_wininst/install.c
+++ b/PC/bdist_wininst/install.c
@@ -2541,7 +2541,7 @@
     if (!lines)
         return SystemError(0, "Out of memory");
 
-    /* Read the whole logfile, realloacting the buffer */
+    /* Read the whole logfile, reallocating the buffer */
     while (fgets(buffer, sizeof(buffer), logfile)) {
         int len = strlen(buffer);
         /* remove trailing white space */
diff --git a/PC/config.c b/PC/config.c
index 8eaeb31..32af2a8 100644
--- a/PC/config.c
+++ b/PC/config.c
@@ -75,6 +75,8 @@
 
 extern PyObject* PyInit__contextvars(void);
 
+extern PyObject* PyInit__peg_parser(void);
+
 /* tools/freeze/makeconfig.py marker for additional "extern" */
 /* -- ADDMODULE MARKER 1 -- */
 
@@ -169,6 +171,7 @@
     {"_opcode", PyInit__opcode},
 
     {"_contextvars", PyInit__contextvars},
+    {"_peg_parser", PyInit__peg_parser},
 
     /* Sentinel */
     {0, 0}
diff --git a/PC/dl_nt.c b/PC/dl_nt.c
index c87c51e..7f17ee1 100644
--- a/PC/dl_nt.c
+++ b/PC/dl_nt.c
@@ -12,78 +12,10 @@
 #include "windows.h"
 
 #ifdef Py_ENABLE_SHARED
-#ifdef MS_DLL_ID
-// The string is available at build, so fill the buffer immediately
-char dllVersionBuffer[16] = MS_DLL_ID;
-#else
-char dllVersionBuffer[16] = ""; // a private buffer
-#endif
 
 // Python Globals
 HMODULE PyWin_DLLhModule = NULL;
-const char *PyWin_DLLVersionString = dllVersionBuffer;
-
-#if HAVE_SXS
-// Windows "Activation Context" work.
-// Our .pyd extension modules are generally built without a manifest (ie,
-// those included with Python and those built with a default distutils.
-// This requires we perform some "activation context" magic when loading our
-// extensions.  In summary:
-// * As our DLL loads we save the context being used.
-// * Before loading our extensions we re-activate our saved context.
-// * After extension load is complete we restore the old context.
-// As an added complication, this magic only works on XP or later - we simply
-// use the existence (or not) of the relevant function pointers from kernel32.
-// See bug 4566 (http://python.org/sf/4566) for more details.
-// In Visual Studio 2010, side by side assemblies are no longer used by
-// default.
-
-typedef BOOL (WINAPI * PFN_GETCURRENTACTCTX)(HANDLE *);
-typedef BOOL (WINAPI * PFN_ACTIVATEACTCTX)(HANDLE, ULONG_PTR *);
-typedef BOOL (WINAPI * PFN_DEACTIVATEACTCTX)(DWORD, ULONG_PTR);
-typedef BOOL (WINAPI * PFN_ADDREFACTCTX)(HANDLE);
-typedef BOOL (WINAPI * PFN_RELEASEACTCTX)(HANDLE);
-
-// locals and function pointers for this activation context magic.
-static HANDLE PyWin_DLLhActivationContext = NULL; // one day it might be public
-static PFN_GETCURRENTACTCTX pfnGetCurrentActCtx = NULL;
-static PFN_ACTIVATEACTCTX pfnActivateActCtx = NULL;
-static PFN_DEACTIVATEACTCTX pfnDeactivateActCtx = NULL;
-static PFN_ADDREFACTCTX pfnAddRefActCtx = NULL;
-static PFN_RELEASEACTCTX pfnReleaseActCtx = NULL;
-
-void _LoadActCtxPointers()
-{
-    HINSTANCE hKernel32 = GetModuleHandleW(L"kernel32.dll");
-    if (hKernel32)
-        pfnGetCurrentActCtx = (PFN_GETCURRENTACTCTX) GetProcAddress(hKernel32, "GetCurrentActCtx");
-    // If we can't load GetCurrentActCtx (ie, pre XP) , don't bother with the rest.
-    if (pfnGetCurrentActCtx) {
-        pfnActivateActCtx = (PFN_ACTIVATEACTCTX) GetProcAddress(hKernel32, "ActivateActCtx");
-        pfnDeactivateActCtx = (PFN_DEACTIVATEACTCTX) GetProcAddress(hKernel32, "DeactivateActCtx");
-        pfnAddRefActCtx = (PFN_ADDREFACTCTX) GetProcAddress(hKernel32, "AddRefActCtx");
-        pfnReleaseActCtx = (PFN_RELEASEACTCTX) GetProcAddress(hKernel32, "ReleaseActCtx");
-    }
-}
-
-ULONG_PTR _Py_ActivateActCtx()
-{
-    ULONG_PTR ret = 0;
-    if (PyWin_DLLhActivationContext && pfnActivateActCtx)
-        if (!(*pfnActivateActCtx)(PyWin_DLLhActivationContext, &ret)) {
-            OutputDebugString("Python failed to activate the activation context before loading a DLL\n");
-            ret = 0; // no promise the failing function didn't change it!
-        }
-    return ret;
-}
-
-void _Py_DeactivateActCtx(ULONG_PTR cookie)
-{
-    if (cookie && pfnDeactivateActCtx)
-        if (!(*pfnDeactivateActCtx)(0, cookie))
-            OutputDebugString("Python failed to de-activate the activation context\n");
-}
-#endif /* HAVE_SXS */
+const char *PyWin_DLLVersionString = MS_DLL_ID;
 
 BOOL    WINAPI  DllMain (HANDLE hInst,
                                                 ULONG ul_reason_for_call,
@@ -93,27 +25,9 @@
     {
         case DLL_PROCESS_ATTACH:
             PyWin_DLLhModule = hInst;
-#ifndef MS_DLL_ID
-            // If we have MS_DLL_ID, we don't need to load the string.
-            // 1000 is a magic number I picked out of the air.  Could do with a #define, I spose...
-            LoadString(hInst, 1000, dllVersionBuffer, sizeof(dllVersionBuffer));
-#endif
-
-#if HAVE_SXS
-            // and capture our activation context for use when loading extensions.
-            _LoadActCtxPointers();
-            if (pfnGetCurrentActCtx && pfnAddRefActCtx)
-                if ((*pfnGetCurrentActCtx)(&PyWin_DLLhActivationContext))
-                    if (!(*pfnAddRefActCtx)(PyWin_DLLhActivationContext))
-                        OutputDebugString("Python failed to load the default activation context\n");
-#endif
             break;
 
         case DLL_PROCESS_DETACH:
-#if HAVE_SXS
-            if (pfnReleaseActCtx)
-                (*pfnReleaseActCtx)(PyWin_DLLhActivationContext);
-#endif
             break;
     }
     return TRUE;
diff --git a/PC/getpathp.c b/PC/getpathp.c
index 8969fb5..53da3a6 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -80,9 +80,9 @@
 
 
 #include "Python.h"
-#include "pycore_initconfig.h"
-#include "pycore_pystate.h"
-#include "osdefs.h"
+#include "pycore_initconfig.h"    // PyStatus
+#include "pycore_pathconfig.h"    // _PyPathConfig
+#include "osdefs.h"               // SEP, ALTSEP
 #include <wchar.h>
 
 #ifndef MS_WINDOWS
@@ -90,6 +90,7 @@
 #endif
 
 #include <windows.h>
+#include <pathcch.h>
 #include <shlwapi.h>
 
 #ifdef HAVE_SYS_TYPES_H
@@ -249,43 +250,14 @@
    stuff as fits will be appended.
 */
 
-static int _PathCchCombineEx_Initialized = 0;
-typedef HRESULT(__stdcall *PPathCchCombineEx) (PWSTR pszPathOut, size_t cchPathOut,
-                                               PCWSTR pszPathIn, PCWSTR pszMore,
-                                               unsigned long dwFlags);
-static PPathCchCombineEx _PathCchCombineEx;
-
 static void
 join(wchar_t *buffer, const wchar_t *stuff)
 {
-    if (_PathCchCombineEx_Initialized == 0) {
-        HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll", NULL,
-                                         LOAD_LIBRARY_SEARCH_SYSTEM32);
-        if (pathapi) {
-            _PathCchCombineEx = (PPathCchCombineEx)GetProcAddress(pathapi, "PathCchCombineEx");
-        }
-        else {
-            _PathCchCombineEx = NULL;
-        }
-        _PathCchCombineEx_Initialized = 1;
-    }
-
-    if (_PathCchCombineEx) {
-        if (FAILED(_PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) {
-            Py_FatalError("buffer overflow in getpathp.c's join()");
-        }
-    } else {
-        if (!PathCombineW(buffer, buffer, stuff)) {
-            Py_FatalError("buffer overflow in getpathp.c's join()");
-        }
+    if (FAILED(PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) {
+        Py_FatalError("buffer overflow in getpathp.c's join()");
     }
 }
 
-static int _PathCchCanonicalizeEx_Initialized = 0;
-typedef HRESULT(__stdcall *PPathCchCanonicalizeEx) (PWSTR pszPathOut, size_t cchPathOut,
-    PCWSTR pszPathIn, unsigned long dwFlags);
-static PPathCchCanonicalizeEx _PathCchCanonicalizeEx;
-
 /* Call PathCchCanonicalizeEx(path): remove navigation elements such as "."
    and ".." to produce a direct, well-formed path. */
 static PyStatus
@@ -295,27 +267,8 @@
         return _PyStatus_NO_MEMORY();
     }
 
-    if (_PathCchCanonicalizeEx_Initialized == 0) {
-        HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll", NULL,
-                                         LOAD_LIBRARY_SEARCH_SYSTEM32);
-        if (pathapi) {
-            _PathCchCanonicalizeEx = (PPathCchCanonicalizeEx)GetProcAddress(pathapi, "PathCchCanonicalizeEx");
-        }
-        else {
-            _PathCchCanonicalizeEx = NULL;
-        }
-        _PathCchCanonicalizeEx_Initialized = 1;
-    }
-
-    if (_PathCchCanonicalizeEx) {
-        if (FAILED(_PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) {
-            return INIT_ERR_BUFFER_OVERFLOW();
-        }
-    }
-    else {
-        if (!PathCanonicalizeW(buffer, path)) {
-            return INIT_ERR_BUFFER_OVERFLOW();
-        }
+    if (FAILED(PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) {
+        return INIT_ERR_BUFFER_OVERFLOW();
     }
     return _PyStatus_OK();
 }
@@ -437,11 +390,10 @@
     /* Allocate a temp array of char buffers, so we only need to loop
        reading the registry once
     */
-    ppPaths = PyMem_RawMalloc( sizeof(WCHAR *) * numKeys );
+    ppPaths = PyMem_RawCalloc(numKeys, sizeof(WCHAR *));
     if (ppPaths==NULL) {
         goto done;
     }
-    memset(ppPaths, 0, sizeof(WCHAR *) * numKeys);
     /* Loop over all subkeys, allocating a temp sub-buffer. */
     for(index=0;index<numKeys;index++) {
         WCHAR keyBuf[MAX_PATH+1];
@@ -751,7 +703,7 @@
    executable's directory and then in the parent directory.
    If found, open it for use when searching for prefixes.
 */
-static void
+static PyStatus
 calculate_pyvenv_file(PyCalculatePath *calculate,
                       wchar_t *argv0_path, size_t argv0_path_len)
 {
@@ -774,17 +726,23 @@
         env_file = _Py_wfopen(filename, L"r");
         if (env_file == NULL) {
             errno = 0;
-            return;
+            return _PyStatus_OK();
         }
     }
 
     /* Look for a 'home' variable and set argv0_path to it, if found */
-    wchar_t home[MAXPATHLEN+1];
-    if (_Py_FindEnvConfigValue(env_file, L"home",
-                               home, Py_ARRAY_LENGTH(home))) {
+    wchar_t *home = NULL;
+    PyStatus status = _Py_FindEnvConfigValue(env_file, L"home", &home);
+    if (_PyStatus_EXCEPTION(status)) {
+        fclose(env_file);
+        return status;
+    }
+    if (home) {
         wcscpy_s(argv0_path, argv0_path_len, home);
+        PyMem_RawFree(home);
     }
     fclose(env_file);
+    return _PyStatus_OK();
 }
 
 
@@ -822,8 +780,11 @@
 {
     int skiphome = calculate->home==NULL ? 0 : 1;
 #ifdef Py_ENABLE_SHARED
-    calculate->machine_path = getpythonregpath(HKEY_LOCAL_MACHINE, skiphome);
-    calculate->user_path = getpythonregpath(HKEY_CURRENT_USER, skiphome);
+    if (!Py_IgnoreEnvironmentFlag) {
+        calculate->machine_path = getpythonregpath(HKEY_LOCAL_MACHINE,
+                                                   skiphome);
+        calculate->user_path = getpythonregpath(HKEY_CURRENT_USER, skiphome);
+    }
 #endif
     /* We only use the default relative PYTHONPATH if we haven't
        anything better to use! */
@@ -1021,7 +982,11 @@
         goto done;
     }
 
-    calculate_pyvenv_file(calculate, argv0_path, Py_ARRAY_LENGTH(argv0_path));
+    status = calculate_pyvenv_file(calculate,
+                                   argv0_path, Py_ARRAY_LENGTH(argv0_path));
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
 
     /* Calculate zip archive path from DLL or exe path */
     wchar_t zip_path[MAXPATHLEN+1];
diff --git a/PC/icons/idlex150.png b/PC/icons/idlex150.png
new file mode 100644
index 0000000..806cb0c
--- /dev/null
+++ b/PC/icons/idlex150.png
Binary files differ
diff --git a/PC/icons/idlex44.png b/PC/icons/idlex44.png
new file mode 100644
index 0000000..3ef66e6
--- /dev/null
+++ b/PC/icons/idlex44.png
Binary files differ
diff --git a/PC/launcher.c b/PC/launcher.c
index 2749a4e..106fc66 100644
--- a/PC/launcher.c
+++ b/PC/launcher.c
@@ -1247,6 +1247,7 @@
     { 3360, 3379, L"3.6" },
     { 3390, 3399, L"3.7" },
     { 3400, 3419, L"3.8" },
+    { 3420, 3429, L"3.9" },
     { 0 }
 };
 
@@ -1519,7 +1520,7 @@
 Python Launcher for Windows Version %ls\n\n", version_text);
     fwprintf(stdout, L"\
 usage:\n\
-%ls [launcher-args] [python-args] script [script-args]\n\n", argv[0]);
+%ls [launcher-args] [python-args] [script [script-args]]\n\n", argv[0]);
     fputws(L"\
 Launcher arguments:\n\n\
 -2     : Launch the latest Python 2.x version\n\
@@ -1535,6 +1536,15 @@
     }
     fputws(L"\n-0  --list       : List the available pythons", stdout);
     fputws(L"\n-0p --list-paths : List with paths", stdout);
+    fputws(L"\n\n If no script is specified the specified interpreter is opened.", stdout);
+    fputws(L"\nIf an exact version is not given, using the latest version can be overridden by", stdout);
+    fputws(L"\nany of the following, (in priority order):", stdout);
+    fputws(L"\n An active virtual environment", stdout);
+    fputws(L"\n A shebang line in the script (if present)", stdout);
+    fputws(L"\n With -2 or -3 flag a matching PY_PYTHON2 or PY_PYTHON3 Enviroment variable", stdout);
+    fputws(L"\n A PY_PYTHON Enviroment variable", stdout);
+    fputws(L"\n From [defaults] in py.ini in your %LOCALAPPDATA%\\py.ini", stdout);
+    fputws(L"\n From [defaults] in py.ini beside py.exe (use `where py` to locate)", stdout);
     fputws(L"\n\nThe following help text is from Python:\n\n", stdout);
     fflush(stdout);
 }
@@ -1830,7 +1840,7 @@
 
 #if !defined(VENV_REDIRECT)
     /* bpo-35811: The __PYVENV_LAUNCHER__ variable is used to
-     * override sys.executable and locate the original prefix path. 
+     * override sys.executable and locate the original prefix path.
      * However, if it is silently inherited by a non-venv Python
      * process, that process will believe it is running in the venv
      * still. This is the only place where *we* can clear it (that is,
diff --git a/PC/layout/support/appxmanifest.py b/PC/layout/support/appxmanifest.py
index 9a7439d..747c97a 100644
--- a/PC/layout/support/appxmanifest.py
+++ b/PC/layout/support/appxmanifest.py
@@ -67,8 +67,8 @@
 IDLE_VE_DATA = dict(
     DisplayName="IDLE (Python {})".format(VER_DOT),
     Description="IDLE editor for Python {}".format(VER_DOT),
-    Square150x150Logo="_resources/pythonwx150.png",
-    Square44x44Logo="_resources/pythonwx44.png",
+    Square150x150Logo="_resources/idlex150.png",
+    Square44x44Logo="_resources/idlex44.png",
     BackgroundColor="transparent",
 )
 
@@ -498,6 +498,11 @@
         src = icons / "pythonwx{}.png".format(px)
         yield f"_resources/pythonwx{px}.png", src
         yield f"_resources/pythonwx{px}$targetsize-{px}_altform-unplated.png", src
+    if ns.include_idle and ns.include_launchers:
+        for px in [44, 150]:
+            src = icons / "idlex{}.png".format(px)
+            yield f"_resources/idlex{px}.png", src
+            yield f"_resources/idlex{px}$targetsize-{px}_altform-unplated.png", src
     yield f"_resources/py.png", icons / "py.png"
     sccd = ns.source / SCCD_FILENAME
     if sccd.is_file():
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index b6b8d44..d7d3cf0 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -135,9 +135,9 @@
 #endif /* MS_WIN64 */
 
 /* set the version macros for the windows headers */
-/* Python 3.5+ requires Windows Vista or greater */
-#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */
-#define Py_NTDDI NTDDI_VISTA
+/* Python 3.9+ requires Windows 8 or greater */
+#define Py_WINVER 0x0602 /* _WIN32_WINNT_WIN8 */
+#define Py_NTDDI NTDDI_WIN8
 
 /* We only set these values when building Python - we don't want to force
    these values on extensions, as that will affect the prototypes and
@@ -193,12 +193,6 @@
 #define Py_IS_NAN _isnan
 #define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X))
 #define Py_IS_FINITE(X) _finite(X)
-#define copysign _copysign
-
-/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/
-#if _MSC_VER >= 1400 && _MSC_VER < 1600
-#define HAVE_SXS 1
-#endif
 
 /* define some ANSI types that are not defined in earlier Win headers */
 #if _MSC_VER >= 1200
@@ -274,11 +268,11 @@
                         file in their Makefile (other compilers are
                         generally taken care of by distutils.) */
 #                       if defined(_DEBUG)
-#                               pragma comment(lib,"python38_d.lib")
+#                               pragma comment(lib,"python39_d.lib")
 #                       elif defined(Py_LIMITED_API)
 #                               pragma comment(lib,"python3.lib")
 #                       else
-#                               pragma comment(lib,"python38.lib")
+#                               pragma comment(lib,"python39.lib")
 #                       endif /* _DEBUG */
 #               endif /* _MSC_VER */
 #       endif /* Py_BUILD_CORE */
@@ -296,7 +290,7 @@
 #       define SIZEOF_HKEY 8
 #       define SIZEOF_SIZE_T 8
 /* configure.ac defines HAVE_LARGEFILE_SUPPORT iff
-   sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t).
+   sizeof(off_t) > sizeof(long), and sizeof(long long) >= sizeof(off_t).
    On Win64 the second condition is not true, but if fpos_t replaces off_t
    then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64
    should define this. */
@@ -688,4 +682,6 @@
 /* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */
 #define HAVE_X509_VERIFY_PARAM_SET1_HOST 1
 
+#define PLATLIBDIR "lib"
+
 #endif /* !Py_CONFIG_H */
diff --git a/PC/python3.def b/PC/python3.def
index 5d93c18..66d1595 100644
--- a/PC/python3.def
+++ b/PC/python3.def
@@ -2,801 +2,803 @@
 ; It is used when building python3dll.vcxproj
 LIBRARY	"python3"
 EXPORTS
-  PyArg_Parse=python38.PyArg_Parse
-  PyArg_ParseTuple=python38.PyArg_ParseTuple
-  PyArg_ParseTupleAndKeywords=python38.PyArg_ParseTupleAndKeywords
-  PyArg_UnpackTuple=python38.PyArg_UnpackTuple
-  PyArg_VaParse=python38.PyArg_VaParse
-  PyArg_VaParseTupleAndKeywords=python38.PyArg_VaParseTupleAndKeywords
-  PyArg_ValidateKeywordArguments=python38.PyArg_ValidateKeywordArguments
-  PyBaseObject_Type=python38.PyBaseObject_Type DATA
-  PyBool_FromLong=python38.PyBool_FromLong
-  PyBool_Type=python38.PyBool_Type DATA
-  PyByteArrayIter_Type=python38.PyByteArrayIter_Type DATA
-  PyByteArray_AsString=python38.PyByteArray_AsString
-  PyByteArray_Concat=python38.PyByteArray_Concat
-  PyByteArray_FromObject=python38.PyByteArray_FromObject
-  PyByteArray_FromStringAndSize=python38.PyByteArray_FromStringAndSize
-  PyByteArray_Resize=python38.PyByteArray_Resize
-  PyByteArray_Size=python38.PyByteArray_Size
-  PyByteArray_Type=python38.PyByteArray_Type DATA
-  PyBytesIter_Type=python38.PyBytesIter_Type DATA
-  PyBytes_AsString=python38.PyBytes_AsString
-  PyBytes_AsStringAndSize=python38.PyBytes_AsStringAndSize
-  PyBytes_Concat=python38.PyBytes_Concat
-  PyBytes_ConcatAndDel=python38.PyBytes_ConcatAndDel
-  PyBytes_DecodeEscape=python38.PyBytes_DecodeEscape
-  PyBytes_FromFormat=python38.PyBytes_FromFormat
-  PyBytes_FromFormatV=python38.PyBytes_FromFormatV
-  PyBytes_FromObject=python38.PyBytes_FromObject
-  PyBytes_FromString=python38.PyBytes_FromString
-  PyBytes_FromStringAndSize=python38.PyBytes_FromStringAndSize
-  PyBytes_Repr=python38.PyBytes_Repr
-  PyBytes_Size=python38.PyBytes_Size
-  PyBytes_Type=python38.PyBytes_Type DATA
-  PyCFunction_Call=python38.PyCFunction_Call
-  PyCFunction_ClearFreeList=python38.PyCFunction_ClearFreeList
-  PyCFunction_GetFlags=python38.PyCFunction_GetFlags
-  PyCFunction_GetFunction=python38.PyCFunction_GetFunction
-  PyCFunction_GetSelf=python38.PyCFunction_GetSelf
-  PyCFunction_New=python38.PyCFunction_New
-  PyCFunction_NewEx=python38.PyCFunction_NewEx
-  PyCFunction_Type=python38.PyCFunction_Type DATA
-  PyCallIter_New=python38.PyCallIter_New
-  PyCallIter_Type=python38.PyCallIter_Type DATA
-  PyCallable_Check=python38.PyCallable_Check
-  PyCapsule_GetContext=python38.PyCapsule_GetContext
-  PyCapsule_GetDestructor=python38.PyCapsule_GetDestructor
-  PyCapsule_GetName=python38.PyCapsule_GetName
-  PyCapsule_GetPointer=python38.PyCapsule_GetPointer
-  PyCapsule_Import=python38.PyCapsule_Import
-  PyCapsule_IsValid=python38.PyCapsule_IsValid
-  PyCapsule_New=python38.PyCapsule_New
-  PyCapsule_SetContext=python38.PyCapsule_SetContext
-  PyCapsule_SetDestructor=python38.PyCapsule_SetDestructor
-  PyCapsule_SetName=python38.PyCapsule_SetName
-  PyCapsule_SetPointer=python38.PyCapsule_SetPointer
-  PyCapsule_Type=python38.PyCapsule_Type DATA
-  PyClassMethodDescr_Type=python38.PyClassMethodDescr_Type DATA
-  PyCodec_BackslashReplaceErrors=python38.PyCodec_BackslashReplaceErrors
-  PyCodec_Decode=python38.PyCodec_Decode
-  PyCodec_Decoder=python38.PyCodec_Decoder
-  PyCodec_Encode=python38.PyCodec_Encode
-  PyCodec_Encoder=python38.PyCodec_Encoder
-  PyCodec_IgnoreErrors=python38.PyCodec_IgnoreErrors
-  PyCodec_IncrementalDecoder=python38.PyCodec_IncrementalDecoder
-  PyCodec_IncrementalEncoder=python38.PyCodec_IncrementalEncoder
-  PyCodec_KnownEncoding=python38.PyCodec_KnownEncoding
-  PyCodec_LookupError=python38.PyCodec_LookupError
-  PyCodec_NameReplaceErrors=python38.PyCodec_NameReplaceErrors
-  PyCodec_Register=python38.PyCodec_Register
-  PyCodec_RegisterError=python38.PyCodec_RegisterError
-  PyCodec_ReplaceErrors=python38.PyCodec_ReplaceErrors
-  PyCodec_StreamReader=python38.PyCodec_StreamReader
-  PyCodec_StreamWriter=python38.PyCodec_StreamWriter
-  PyCodec_StrictErrors=python38.PyCodec_StrictErrors
-  PyCodec_XMLCharRefReplaceErrors=python38.PyCodec_XMLCharRefReplaceErrors
-  PyComplex_FromDoubles=python38.PyComplex_FromDoubles
-  PyComplex_ImagAsDouble=python38.PyComplex_ImagAsDouble
-  PyComplex_RealAsDouble=python38.PyComplex_RealAsDouble
-  PyComplex_Type=python38.PyComplex_Type DATA
-  PyDescr_NewClassMethod=python38.PyDescr_NewClassMethod
-  PyDescr_NewGetSet=python38.PyDescr_NewGetSet
-  PyDescr_NewMember=python38.PyDescr_NewMember
-  PyDescr_NewMethod=python38.PyDescr_NewMethod
-  PyDictItems_Type=python38.PyDictItems_Type DATA
-  PyDictIterItem_Type=python38.PyDictIterItem_Type DATA
-  PyDictIterKey_Type=python38.PyDictIterKey_Type DATA
-  PyDictIterValue_Type=python38.PyDictIterValue_Type DATA
-  PyDictKeys_Type=python38.PyDictKeys_Type DATA
-  PyDictProxy_New=python38.PyDictProxy_New
-  PyDictProxy_Type=python38.PyDictProxy_Type DATA
-  PyDictValues_Type=python38.PyDictValues_Type DATA
-  PyDict_Clear=python38.PyDict_Clear
-  PyDict_Contains=python38.PyDict_Contains
-  PyDict_Copy=python38.PyDict_Copy
-  PyDict_DelItem=python38.PyDict_DelItem
-  PyDict_DelItemString=python38.PyDict_DelItemString
-  PyDict_GetItem=python38.PyDict_GetItem
-  PyDict_GetItemString=python38.PyDict_GetItemString
-  PyDict_GetItemWithError=python38.PyDict_GetItemWithError
-  PyDict_Items=python38.PyDict_Items
-  PyDict_Keys=python38.PyDict_Keys
-  PyDict_Merge=python38.PyDict_Merge
-  PyDict_MergeFromSeq2=python38.PyDict_MergeFromSeq2
-  PyDict_New=python38.PyDict_New
-  PyDict_Next=python38.PyDict_Next
-  PyDict_SetItem=python38.PyDict_SetItem
-  PyDict_SetItemString=python38.PyDict_SetItemString
-  PyDict_Size=python38.PyDict_Size
-  PyDict_Type=python38.PyDict_Type DATA
-  PyDict_Update=python38.PyDict_Update
-  PyDict_Values=python38.PyDict_Values
-  PyEllipsis_Type=python38.PyEllipsis_Type DATA
-  PyEnum_Type=python38.PyEnum_Type DATA
-  PyErr_BadArgument=python38.PyErr_BadArgument
-  PyErr_BadInternalCall=python38.PyErr_BadInternalCall
-  PyErr_CheckSignals=python38.PyErr_CheckSignals
-  PyErr_Clear=python38.PyErr_Clear
-  PyErr_Display=python38.PyErr_Display
-  PyErr_ExceptionMatches=python38.PyErr_ExceptionMatches
-  PyErr_Fetch=python38.PyErr_Fetch
-  PyErr_Format=python38.PyErr_Format
-  PyErr_FormatV=python38.PyErr_FormatV
-  PyErr_GetExcInfo=python38.PyErr_GetExcInfo
-  PyErr_GivenExceptionMatches=python38.PyErr_GivenExceptionMatches
-  PyErr_NewException=python38.PyErr_NewException
-  PyErr_NewExceptionWithDoc=python38.PyErr_NewExceptionWithDoc
-  PyErr_NoMemory=python38.PyErr_NoMemory
-  PyErr_NormalizeException=python38.PyErr_NormalizeException
-  PyErr_Occurred=python38.PyErr_Occurred
-  PyErr_Print=python38.PyErr_Print
-  PyErr_PrintEx=python38.PyErr_PrintEx
-  PyErr_ProgramText=python38.PyErr_ProgramText
-  PyErr_ResourceWarning=python38.PyErr_ResourceWarning
-  PyErr_Restore=python38.PyErr_Restore
-  PyErr_SetExcFromWindowsErr=python38.PyErr_SetExcFromWindowsErr
-  PyErr_SetExcFromWindowsErrWithFilename=python38.PyErr_SetExcFromWindowsErrWithFilename
-  PyErr_SetExcFromWindowsErrWithFilenameObject=python38.PyErr_SetExcFromWindowsErrWithFilenameObject
-  PyErr_SetExcFromWindowsErrWithFilenameObjects=python38.PyErr_SetExcFromWindowsErrWithFilenameObjects
-  PyErr_SetExcInfo=python38.PyErr_SetExcInfo
-  PyErr_SetFromErrno=python38.PyErr_SetFromErrno
-  PyErr_SetFromErrnoWithFilename=python38.PyErr_SetFromErrnoWithFilename
-  PyErr_SetFromErrnoWithFilenameObject=python38.PyErr_SetFromErrnoWithFilenameObject
-  PyErr_SetFromErrnoWithFilenameObjects=python38.PyErr_SetFromErrnoWithFilenameObjects
-  PyErr_SetFromWindowsErr=python38.PyErr_SetFromWindowsErr
-  PyErr_SetFromWindowsErrWithFilename=python38.PyErr_SetFromWindowsErrWithFilename
-  PyErr_SetImportError=python38.PyErr_SetImportError
-  PyErr_SetImportErrorSubclass=python38.PyErr_SetImportErrorSubclass
-  PyErr_SetInterrupt=python38.PyErr_SetInterrupt
-  PyErr_SetNone=python38.PyErr_SetNone
-  PyErr_SetObject=python38.PyErr_SetObject
-  PyErr_SetString=python38.PyErr_SetString
-  PyErr_SyntaxLocation=python38.PyErr_SyntaxLocation
-  PyErr_SyntaxLocationEx=python38.PyErr_SyntaxLocationEx
-  PyErr_WarnEx=python38.PyErr_WarnEx
-  PyErr_WarnExplicit=python38.PyErr_WarnExplicit
-  PyErr_WarnFormat=python38.PyErr_WarnFormat
-  PyErr_WriteUnraisable=python38.PyErr_WriteUnraisable
-  PyEval_AcquireLock=python38.PyEval_AcquireLock
-  PyEval_AcquireThread=python38.PyEval_AcquireThread
-  PyEval_CallFunction=python38.PyEval_CallFunction
-  PyEval_CallMethod=python38.PyEval_CallMethod
-  PyEval_CallObjectWithKeywords=python38.PyEval_CallObjectWithKeywords
-  PyEval_EvalCode=python38.PyEval_EvalCode
-  PyEval_EvalCodeEx=python38.PyEval_EvalCodeEx
-  PyEval_EvalFrame=python38.PyEval_EvalFrame
-  PyEval_EvalFrameEx=python38.PyEval_EvalFrameEx
-  PyEval_GetBuiltins=python38.PyEval_GetBuiltins
-  PyEval_GetCallStats=python38.PyEval_GetCallStats
-  PyEval_GetFrame=python38.PyEval_GetFrame
-  PyEval_GetFuncDesc=python38.PyEval_GetFuncDesc
-  PyEval_GetFuncName=python38.PyEval_GetFuncName
-  PyEval_GetGlobals=python38.PyEval_GetGlobals
-  PyEval_GetLocals=python38.PyEval_GetLocals
-  PyEval_InitThreads=python38.PyEval_InitThreads
-  PyEval_ReInitThreads=python38.PyEval_ReInitThreads
-  PyEval_ReleaseLock=python38.PyEval_ReleaseLock
-  PyEval_ReleaseThread=python38.PyEval_ReleaseThread
-  PyEval_RestoreThread=python38.PyEval_RestoreThread
-  PyEval_SaveThread=python38.PyEval_SaveThread
-  PyEval_ThreadsInitialized=python38.PyEval_ThreadsInitialized
-  PyExc_ArithmeticError=python38.PyExc_ArithmeticError DATA
-  PyExc_AssertionError=python38.PyExc_AssertionError DATA
-  PyExc_AttributeError=python38.PyExc_AttributeError DATA
-  PyExc_BaseException=python38.PyExc_BaseException DATA
-  PyExc_BlockingIOError=python38.PyExc_BlockingIOError DATA
-  PyExc_BrokenPipeError=python38.PyExc_BrokenPipeError DATA
-  PyExc_BufferError=python38.PyExc_BufferError DATA
-  PyExc_BytesWarning=python38.PyExc_BytesWarning DATA
-  PyExc_ChildProcessError=python38.PyExc_ChildProcessError DATA
-  PyExc_ConnectionAbortedError=python38.PyExc_ConnectionAbortedError DATA
-  PyExc_ConnectionError=python38.PyExc_ConnectionError DATA
-  PyExc_ConnectionRefusedError=python38.PyExc_ConnectionRefusedError DATA
-  PyExc_ConnectionResetError=python38.PyExc_ConnectionResetError DATA
-  PyExc_DeprecationWarning=python38.PyExc_DeprecationWarning DATA
-  PyExc_EOFError=python38.PyExc_EOFError DATA
-  PyExc_EnvironmentError=python38.PyExc_EnvironmentError DATA
-  PyExc_Exception=python38.PyExc_Exception DATA
-  PyExc_FileExistsError=python38.PyExc_FileExistsError DATA
-  PyExc_FileNotFoundError=python38.PyExc_FileNotFoundError DATA
-  PyExc_FloatingPointError=python38.PyExc_FloatingPointError DATA
-  PyExc_FutureWarning=python38.PyExc_FutureWarning DATA
-  PyExc_GeneratorExit=python38.PyExc_GeneratorExit DATA
-  PyExc_IOError=python38.PyExc_IOError DATA
-  PyExc_ImportError=python38.PyExc_ImportError DATA
-  PyExc_ImportWarning=python38.PyExc_ImportWarning DATA
-  PyExc_IndentationError=python38.PyExc_IndentationError DATA
-  PyExc_IndexError=python38.PyExc_IndexError DATA
-  PyExc_InterruptedError=python38.PyExc_InterruptedError DATA
-  PyExc_IsADirectoryError=python38.PyExc_IsADirectoryError DATA
-  PyExc_KeyError=python38.PyExc_KeyError DATA
-  PyExc_KeyboardInterrupt=python38.PyExc_KeyboardInterrupt DATA
-  PyExc_LookupError=python38.PyExc_LookupError DATA
-  PyExc_MemoryError=python38.PyExc_MemoryError DATA
-  PyExc_ModuleNotFoundError=python38.PyExc_ModuleNotFoundError DATA
-  PyExc_NameError=python38.PyExc_NameError DATA
-  PyExc_NotADirectoryError=python38.PyExc_NotADirectoryError DATA
-  PyExc_NotImplementedError=python38.PyExc_NotImplementedError DATA
-  PyExc_OSError=python38.PyExc_OSError DATA
-  PyExc_OverflowError=python38.PyExc_OverflowError DATA
-  PyExc_PendingDeprecationWarning=python38.PyExc_PendingDeprecationWarning DATA
-  PyExc_PermissionError=python38.PyExc_PermissionError DATA
-  PyExc_ProcessLookupError=python38.PyExc_ProcessLookupError DATA
-  PyExc_RecursionError=python38.PyExc_RecursionError DATA
-  PyExc_ReferenceError=python38.PyExc_ReferenceError DATA
-  PyExc_ResourceWarning=python38.PyExc_ResourceWarning DATA
-  PyExc_RuntimeError=python38.PyExc_RuntimeError DATA
-  PyExc_RuntimeWarning=python38.PyExc_RuntimeWarning DATA
-  PyExc_StopAsyncIteration=python38.PyExc_StopAsyncIteration DATA
-  PyExc_StopIteration=python38.PyExc_StopIteration DATA
-  PyExc_SyntaxError=python38.PyExc_SyntaxError DATA
-  PyExc_SyntaxWarning=python38.PyExc_SyntaxWarning DATA
-  PyExc_SystemError=python38.PyExc_SystemError DATA
-  PyExc_SystemExit=python38.PyExc_SystemExit DATA
-  PyExc_TabError=python38.PyExc_TabError DATA
-  PyExc_TimeoutError=python38.PyExc_TimeoutError DATA
-  PyExc_TypeError=python38.PyExc_TypeError DATA
-  PyExc_UnboundLocalError=python38.PyExc_UnboundLocalError DATA
-  PyExc_UnicodeDecodeError=python38.PyExc_UnicodeDecodeError DATA
-  PyExc_UnicodeEncodeError=python38.PyExc_UnicodeEncodeError DATA
-  PyExc_UnicodeError=python38.PyExc_UnicodeError DATA
-  PyExc_UnicodeTranslateError=python38.PyExc_UnicodeTranslateError DATA
-  PyExc_UnicodeWarning=python38.PyExc_UnicodeWarning DATA
-  PyExc_UserWarning=python38.PyExc_UserWarning DATA
-  PyExc_ValueError=python38.PyExc_ValueError DATA
-  PyExc_Warning=python38.PyExc_Warning DATA
-  PyExc_WindowsError=python38.PyExc_WindowsError DATA
-  PyExc_ZeroDivisionError=python38.PyExc_ZeroDivisionError DATA
-  PyExceptionClass_Name=python38.PyExceptionClass_Name
-  PyException_GetCause=python38.PyException_GetCause
-  PyException_GetContext=python38.PyException_GetContext
-  PyException_GetTraceback=python38.PyException_GetTraceback
-  PyException_SetCause=python38.PyException_SetCause
-  PyException_SetContext=python38.PyException_SetContext
-  PyException_SetTraceback=python38.PyException_SetTraceback
-  PyFile_FromFd=python38.PyFile_FromFd
-  PyFile_GetLine=python38.PyFile_GetLine
-  PyFile_WriteObject=python38.PyFile_WriteObject
-  PyFile_WriteString=python38.PyFile_WriteString
-  PyFilter_Type=python38.PyFilter_Type DATA
-  PyFloat_AsDouble=python38.PyFloat_AsDouble
-  PyFloat_FromDouble=python38.PyFloat_FromDouble
-  PyFloat_FromString=python38.PyFloat_FromString
-  PyFloat_GetInfo=python38.PyFloat_GetInfo
-  PyFloat_GetMax=python38.PyFloat_GetMax
-  PyFloat_GetMin=python38.PyFloat_GetMin
-  PyFloat_Type=python38.PyFloat_Type DATA
-  PyFrozenSet_New=python38.PyFrozenSet_New
-  PyFrozenSet_Type=python38.PyFrozenSet_Type DATA
-  PyGC_Collect=python38.PyGC_Collect
-  PyGILState_Ensure=python38.PyGILState_Ensure
-  PyGILState_GetThisThreadState=python38.PyGILState_GetThisThreadState
-  PyGILState_Release=python38.PyGILState_Release
-  PyGetSetDescr_Type=python38.PyGetSetDescr_Type DATA
-  PyImport_AddModule=python38.PyImport_AddModule
-  PyImport_AddModuleObject=python38.PyImport_AddModuleObject
-  PyImport_AppendInittab=python38.PyImport_AppendInittab
-  PyImport_Cleanup=python38.PyImport_Cleanup
-  PyImport_ExecCodeModule=python38.PyImport_ExecCodeModule
-  PyImport_ExecCodeModuleEx=python38.PyImport_ExecCodeModuleEx
-  PyImport_ExecCodeModuleObject=python38.PyImport_ExecCodeModuleObject
-  PyImport_ExecCodeModuleWithPathnames=python38.PyImport_ExecCodeModuleWithPathnames
-  PyImport_GetImporter=python38.PyImport_GetImporter
-  PyImport_GetMagicNumber=python38.PyImport_GetMagicNumber
-  PyImport_GetMagicTag=python38.PyImport_GetMagicTag
-  PyImport_GetModule=python38.PyImport_GetModule
-  PyImport_GetModuleDict=python38.PyImport_GetModuleDict
-  PyImport_Import=python38.PyImport_Import
-  PyImport_ImportFrozenModule=python38.PyImport_ImportFrozenModule
-  PyImport_ImportFrozenModuleObject=python38.PyImport_ImportFrozenModuleObject
-  PyImport_ImportModule=python38.PyImport_ImportModule
-  PyImport_ImportModuleLevel=python38.PyImport_ImportModuleLevel
-  PyImport_ImportModuleLevelObject=python38.PyImport_ImportModuleLevelObject
-  PyImport_ImportModuleNoBlock=python38.PyImport_ImportModuleNoBlock
-  PyImport_ReloadModule=python38.PyImport_ReloadModule
-  PyIndex_Check=python38.PyIndex_Check
-  PyInterpreterState_Clear=python38.PyInterpreterState_Clear
-  PyInterpreterState_Delete=python38.PyInterpreterState_Delete
-  PyInterpreterState_New=python38.PyInterpreterState_New
-  PyIter_Check=python38.PyIter_Check
-  PyIter_Next=python38.PyIter_Next
-  PyListIter_Type=python38.PyListIter_Type DATA
-  PyListRevIter_Type=python38.PyListRevIter_Type DATA
-  PyList_Append=python38.PyList_Append
-  PyList_AsTuple=python38.PyList_AsTuple
-  PyList_GetItem=python38.PyList_GetItem
-  PyList_GetSlice=python38.PyList_GetSlice
-  PyList_Insert=python38.PyList_Insert
-  PyList_New=python38.PyList_New
-  PyList_Reverse=python38.PyList_Reverse
-  PyList_SetItem=python38.PyList_SetItem
-  PyList_SetSlice=python38.PyList_SetSlice
-  PyList_Size=python38.PyList_Size
-  PyList_Sort=python38.PyList_Sort
-  PyList_Type=python38.PyList_Type DATA
-  PyLongRangeIter_Type=python38.PyLongRangeIter_Type DATA
-  PyLong_AsDouble=python38.PyLong_AsDouble
-  PyLong_AsLong=python38.PyLong_AsLong
-  PyLong_AsLongAndOverflow=python38.PyLong_AsLongAndOverflow
-  PyLong_AsLongLong=python38.PyLong_AsLongLong
-  PyLong_AsLongLongAndOverflow=python38.PyLong_AsLongLongAndOverflow
-  PyLong_AsSize_t=python38.PyLong_AsSize_t
-  PyLong_AsSsize_t=python38.PyLong_AsSsize_t
-  PyLong_AsUnsignedLong=python38.PyLong_AsUnsignedLong
-  PyLong_AsUnsignedLongLong=python38.PyLong_AsUnsignedLongLong
-  PyLong_AsUnsignedLongLongMask=python38.PyLong_AsUnsignedLongLongMask
-  PyLong_AsUnsignedLongMask=python38.PyLong_AsUnsignedLongMask
-  PyLong_AsVoidPtr=python38.PyLong_AsVoidPtr
-  PyLong_FromDouble=python38.PyLong_FromDouble
-  PyLong_FromLong=python38.PyLong_FromLong
-  PyLong_FromLongLong=python38.PyLong_FromLongLong
-  PyLong_FromSize_t=python38.PyLong_FromSize_t
-  PyLong_FromSsize_t=python38.PyLong_FromSsize_t
-  PyLong_FromString=python38.PyLong_FromString
-  PyLong_FromUnsignedLong=python38.PyLong_FromUnsignedLong
-  PyLong_FromUnsignedLongLong=python38.PyLong_FromUnsignedLongLong
-  PyLong_FromVoidPtr=python38.PyLong_FromVoidPtr
-  PyLong_GetInfo=python38.PyLong_GetInfo
-  PyLong_Type=python38.PyLong_Type DATA
-  PyMap_Type=python38.PyMap_Type DATA
-  PyMapping_Check=python38.PyMapping_Check
-  PyMapping_GetItemString=python38.PyMapping_GetItemString
-  PyMapping_HasKey=python38.PyMapping_HasKey
-  PyMapping_HasKeyString=python38.PyMapping_HasKeyString
-  PyMapping_Items=python38.PyMapping_Items
-  PyMapping_Keys=python38.PyMapping_Keys
-  PyMapping_Length=python38.PyMapping_Length
-  PyMapping_SetItemString=python38.PyMapping_SetItemString
-  PyMapping_Size=python38.PyMapping_Size
-  PyMapping_Values=python38.PyMapping_Values
-  PyMem_Calloc=python38.PyMem_Calloc
-  PyMem_Free=python38.PyMem_Free
-  PyMem_Malloc=python38.PyMem_Malloc
-  PyMem_Realloc=python38.PyMem_Realloc
-  PyMemberDescr_Type=python38.PyMemberDescr_Type DATA
-  PyMemoryView_FromMemory=python38.PyMemoryView_FromMemory
-  PyMemoryView_FromObject=python38.PyMemoryView_FromObject
-  PyMemoryView_GetContiguous=python38.PyMemoryView_GetContiguous
-  PyMemoryView_Type=python38.PyMemoryView_Type DATA
-  PyMethodDescr_Type=python38.PyMethodDescr_Type DATA
-  PyModuleDef_Init=python38.PyModuleDef_Init
-  PyModuleDef_Type=python38.PyModuleDef_Type DATA
-  PyModule_AddFunctions=python38.PyModule_AddFunctions
-  PyModule_AddIntConstant=python38.PyModule_AddIntConstant
-  PyModule_AddObject=python38.PyModule_AddObject
-  PyModule_AddStringConstant=python38.PyModule_AddStringConstant
-  PyModule_Create2=python38.PyModule_Create2
-  PyModule_ExecDef=python38.PyModule_ExecDef
-  PyModule_FromDefAndSpec2=python38.PyModule_FromDefAndSpec2
-  PyModule_GetDef=python38.PyModule_GetDef
-  PyModule_GetDict=python38.PyModule_GetDict
-  PyModule_GetFilename=python38.PyModule_GetFilename
-  PyModule_GetFilenameObject=python38.PyModule_GetFilenameObject
-  PyModule_GetName=python38.PyModule_GetName
-  PyModule_GetNameObject=python38.PyModule_GetNameObject
-  PyModule_GetState=python38.PyModule_GetState
-  PyModule_New=python38.PyModule_New
-  PyModule_NewObject=python38.PyModule_NewObject
-  PyModule_SetDocString=python38.PyModule_SetDocString
-  PyModule_Type=python38.PyModule_Type DATA
-  PyNullImporter_Type=python38.PyNullImporter_Type DATA
-  PyNumber_Absolute=python38.PyNumber_Absolute
-  PyNumber_Add=python38.PyNumber_Add
-  PyNumber_And=python38.PyNumber_And
-  PyNumber_AsSsize_t=python38.PyNumber_AsSsize_t
-  PyNumber_Check=python38.PyNumber_Check
-  PyNumber_Divmod=python38.PyNumber_Divmod
-  PyNumber_Float=python38.PyNumber_Float
-  PyNumber_FloorDivide=python38.PyNumber_FloorDivide
-  PyNumber_InPlaceAdd=python38.PyNumber_InPlaceAdd
-  PyNumber_InPlaceAnd=python38.PyNumber_InPlaceAnd
-  PyNumber_InPlaceFloorDivide=python38.PyNumber_InPlaceFloorDivide
-  PyNumber_InPlaceLshift=python38.PyNumber_InPlaceLshift
-  PyNumber_InPlaceMatrixMultiply=python38.PyNumber_InPlaceMatrixMultiply
-  PyNumber_InPlaceMultiply=python38.PyNumber_InPlaceMultiply
-  PyNumber_InPlaceOr=python38.PyNumber_InPlaceOr
-  PyNumber_InPlacePower=python38.PyNumber_InPlacePower
-  PyNumber_InPlaceRemainder=python38.PyNumber_InPlaceRemainder
-  PyNumber_InPlaceRshift=python38.PyNumber_InPlaceRshift
-  PyNumber_InPlaceSubtract=python38.PyNumber_InPlaceSubtract
-  PyNumber_InPlaceTrueDivide=python38.PyNumber_InPlaceTrueDivide
-  PyNumber_InPlaceXor=python38.PyNumber_InPlaceXor
-  PyNumber_Index=python38.PyNumber_Index
-  PyNumber_Invert=python38.PyNumber_Invert
-  PyNumber_Long=python38.PyNumber_Long
-  PyNumber_Lshift=python38.PyNumber_Lshift
-  PyNumber_MatrixMultiply=python38.PyNumber_MatrixMultiply
-  PyNumber_Multiply=python38.PyNumber_Multiply
-  PyNumber_Negative=python38.PyNumber_Negative
-  PyNumber_Or=python38.PyNumber_Or
-  PyNumber_Positive=python38.PyNumber_Positive
-  PyNumber_Power=python38.PyNumber_Power
-  PyNumber_Remainder=python38.PyNumber_Remainder
-  PyNumber_Rshift=python38.PyNumber_Rshift
-  PyNumber_Subtract=python38.PyNumber_Subtract
-  PyNumber_ToBase=python38.PyNumber_ToBase
-  PyNumber_TrueDivide=python38.PyNumber_TrueDivide
-  PyNumber_Xor=python38.PyNumber_Xor
-  PyODictItems_Type=python38.PyODictItems_Type DATA
-  PyODictIter_Type=python38.PyODictIter_Type DATA
-  PyODictKeys_Type=python38.PyODictKeys_Type DATA
-  PyODictValues_Type=python38.PyODictValues_Type DATA
-  PyODict_DelItem=python38.PyODict_DelItem
-  PyODict_New=python38.PyODict_New
-  PyODict_SetItem=python38.PyODict_SetItem
-  PyODict_Type=python38.PyODict_Type DATA
-  PyOS_AfterFork=python38.PyOS_AfterFork
-  PyOS_CheckStack=python38.PyOS_CheckStack
-  PyOS_FSPath=python38.PyOS_FSPath
-  PyOS_InitInterrupts=python38.PyOS_InitInterrupts
-  PyOS_InputHook=python38.PyOS_InputHook DATA
-  PyOS_InterruptOccurred=python38.PyOS_InterruptOccurred
-  PyOS_ReadlineFunctionPointer=python38.PyOS_ReadlineFunctionPointer DATA
-  PyOS_double_to_string=python38.PyOS_double_to_string
-  PyOS_getsig=python38.PyOS_getsig
-  PyOS_mystricmp=python38.PyOS_mystricmp
-  PyOS_mystrnicmp=python38.PyOS_mystrnicmp
-  PyOS_setsig=python38.PyOS_setsig
-  PyOS_snprintf=python38.PyOS_snprintf
-  PyOS_string_to_double=python38.PyOS_string_to_double
-  PyOS_strtol=python38.PyOS_strtol
-  PyOS_strtoul=python38.PyOS_strtoul
-  PyOS_vsnprintf=python38.PyOS_vsnprintf
-  PyObject_ASCII=python38.PyObject_ASCII
-  PyObject_AsCharBuffer=python38.PyObject_AsCharBuffer
-  PyObject_AsFileDescriptor=python38.PyObject_AsFileDescriptor
-  PyObject_AsReadBuffer=python38.PyObject_AsReadBuffer
-  PyObject_AsWriteBuffer=python38.PyObject_AsWriteBuffer
-  PyObject_Bytes=python38.PyObject_Bytes
-  PyObject_Call=python38.PyObject_Call
-  PyObject_CallFunction=python38.PyObject_CallFunction
-  PyObject_CallFunctionObjArgs=python38.PyObject_CallFunctionObjArgs
-  PyObject_CallMethod=python38.PyObject_CallMethod
-  PyObject_CallMethodObjArgs=python38.PyObject_CallMethodObjArgs
-  PyObject_CallObject=python38.PyObject_CallObject
-  PyObject_Calloc=python38.PyObject_Calloc
-  PyObject_CheckReadBuffer=python38.PyObject_CheckReadBuffer
-  PyObject_ClearWeakRefs=python38.PyObject_ClearWeakRefs
-  PyObject_DelItem=python38.PyObject_DelItem
-  PyObject_DelItemString=python38.PyObject_DelItemString
-  PyObject_Dir=python38.PyObject_Dir
-  PyObject_Format=python38.PyObject_Format
-  PyObject_Free=python38.PyObject_Free
-  PyObject_GC_Del=python38.PyObject_GC_Del
-  PyObject_GC_Track=python38.PyObject_GC_Track
-  PyObject_GC_UnTrack=python38.PyObject_GC_UnTrack
-  PyObject_GenericGetAttr=python38.PyObject_GenericGetAttr
-  PyObject_GenericSetAttr=python38.PyObject_GenericSetAttr
-  PyObject_GenericSetDict=python38.PyObject_GenericSetDict
-  PyObject_GetAttr=python38.PyObject_GetAttr
-  PyObject_GetAttrString=python38.PyObject_GetAttrString
-  PyObject_GetItem=python38.PyObject_GetItem
-  PyObject_GetIter=python38.PyObject_GetIter
-  PyObject_HasAttr=python38.PyObject_HasAttr
-  PyObject_HasAttrString=python38.PyObject_HasAttrString
-  PyObject_Hash=python38.PyObject_Hash
-  PyObject_HashNotImplemented=python38.PyObject_HashNotImplemented
-  PyObject_Init=python38.PyObject_Init
-  PyObject_InitVar=python38.PyObject_InitVar
-  PyObject_IsInstance=python38.PyObject_IsInstance
-  PyObject_IsSubclass=python38.PyObject_IsSubclass
-  PyObject_IsTrue=python38.PyObject_IsTrue
-  PyObject_Length=python38.PyObject_Length
-  PyObject_Malloc=python38.PyObject_Malloc
-  PyObject_Not=python38.PyObject_Not
-  PyObject_Realloc=python38.PyObject_Realloc
-  PyObject_Repr=python38.PyObject_Repr
-  PyObject_RichCompare=python38.PyObject_RichCompare
-  PyObject_RichCompareBool=python38.PyObject_RichCompareBool
-  PyObject_SelfIter=python38.PyObject_SelfIter
-  PyObject_SetAttr=python38.PyObject_SetAttr
-  PyObject_SetAttrString=python38.PyObject_SetAttrString
-  PyObject_SetItem=python38.PyObject_SetItem
-  PyObject_Size=python38.PyObject_Size
-  PyObject_Str=python38.PyObject_Str
-  PyObject_Type=python38.PyObject_Type
-  PyParser_SimpleParseFileFlags=python38.PyParser_SimpleParseFileFlags
-  PyParser_SimpleParseStringFlags=python38.PyParser_SimpleParseStringFlags
-  PyParser_SimpleParseStringFlagsFilename=python38.PyParser_SimpleParseStringFlagsFilename
-  PyProperty_Type=python38.PyProperty_Type DATA
-  PyRangeIter_Type=python38.PyRangeIter_Type DATA
-  PyRange_Type=python38.PyRange_Type DATA
-  PyReversed_Type=python38.PyReversed_Type DATA
-  PySeqIter_New=python38.PySeqIter_New
-  PySeqIter_Type=python38.PySeqIter_Type DATA
-  PySequence_Check=python38.PySequence_Check
-  PySequence_Concat=python38.PySequence_Concat
-  PySequence_Contains=python38.PySequence_Contains
-  PySequence_Count=python38.PySequence_Count
-  PySequence_DelItem=python38.PySequence_DelItem
-  PySequence_DelSlice=python38.PySequence_DelSlice
-  PySequence_Fast=python38.PySequence_Fast
-  PySequence_GetItem=python38.PySequence_GetItem
-  PySequence_GetSlice=python38.PySequence_GetSlice
-  PySequence_In=python38.PySequence_In
-  PySequence_InPlaceConcat=python38.PySequence_InPlaceConcat
-  PySequence_InPlaceRepeat=python38.PySequence_InPlaceRepeat
-  PySequence_Index=python38.PySequence_Index
-  PySequence_Length=python38.PySequence_Length
-  PySequence_List=python38.PySequence_List
-  PySequence_Repeat=python38.PySequence_Repeat
-  PySequence_SetItem=python38.PySequence_SetItem
-  PySequence_SetSlice=python38.PySequence_SetSlice
-  PySequence_Size=python38.PySequence_Size
-  PySequence_Tuple=python38.PySequence_Tuple
-  PySetIter_Type=python38.PySetIter_Type DATA
-  PySet_Add=python38.PySet_Add
-  PySet_Clear=python38.PySet_Clear
-  PySet_Contains=python38.PySet_Contains
-  PySet_Discard=python38.PySet_Discard
-  PySet_New=python38.PySet_New
-  PySet_Pop=python38.PySet_Pop
-  PySet_Size=python38.PySet_Size
-  PySet_Type=python38.PySet_Type DATA
-  PySlice_AdjustIndices=python38.PySlice_AdjustIndices
-  PySlice_GetIndices=python38.PySlice_GetIndices
-  PySlice_GetIndicesEx=python38.PySlice_GetIndicesEx
-  PySlice_New=python38.PySlice_New
-  PySlice_Type=python38.PySlice_Type DATA
-  PySlice_Unpack=python38.PySlice_Unpack
-  PySortWrapper_Type=python38.PySortWrapper_Type DATA
-  PyInterpreterState_GetID=python38.PyInterpreterState_GetID
-  PyState_AddModule=python38.PyState_AddModule
-  PyState_FindModule=python38.PyState_FindModule
-  PyState_RemoveModule=python38.PyState_RemoveModule
-  PyStructSequence_GetItem=python38.PyStructSequence_GetItem
-  PyStructSequence_New=python38.PyStructSequence_New
-  PyStructSequence_NewType=python38.PyStructSequence_NewType
-  PyStructSequence_SetItem=python38.PyStructSequence_SetItem
-  PySuper_Type=python38.PySuper_Type DATA
-  PySys_AddWarnOption=python38.PySys_AddWarnOption
-  PySys_AddWarnOptionUnicode=python38.PySys_AddWarnOptionUnicode
-  PySys_AddXOption=python38.PySys_AddXOption
-  PySys_FormatStderr=python38.PySys_FormatStderr
-  PySys_FormatStdout=python38.PySys_FormatStdout
-  PySys_GetObject=python38.PySys_GetObject
-  PySys_GetXOptions=python38.PySys_GetXOptions
-  PySys_HasWarnOptions=python38.PySys_HasWarnOptions
-  PySys_ResetWarnOptions=python38.PySys_ResetWarnOptions
-  PySys_SetArgv=python38.PySys_SetArgv
-  PySys_SetArgvEx=python38.PySys_SetArgvEx
-  PySys_SetObject=python38.PySys_SetObject
-  PySys_SetPath=python38.PySys_SetPath
-  PySys_WriteStderr=python38.PySys_WriteStderr
-  PySys_WriteStdout=python38.PySys_WriteStdout
-  PyThreadState_Clear=python38.PyThreadState_Clear
-  PyThreadState_Delete=python38.PyThreadState_Delete
-  PyThreadState_DeleteCurrent=python38.PyThreadState_DeleteCurrent
-  PyThreadState_Get=python38.PyThreadState_Get
-  PyThreadState_GetDict=python38.PyThreadState_GetDict
-  PyThreadState_New=python38.PyThreadState_New
-  PyThreadState_SetAsyncExc=python38.PyThreadState_SetAsyncExc
-  PyThreadState_Swap=python38.PyThreadState_Swap
-  PyThread_tss_alloc=python38.PyThread_tss_alloc
-  PyThread_tss_create=python38.PyThread_tss_create
-  PyThread_tss_delete=python38.PyThread_tss_delete
-  PyThread_tss_free=python38.PyThread_tss_free
-  PyThread_tss_get=python38.PyThread_tss_get
-  PyThread_tss_is_created=python38.PyThread_tss_is_created
-  PyThread_tss_set=python38.PyThread_tss_set
-  PyTraceBack_Here=python38.PyTraceBack_Here
-  PyTraceBack_Print=python38.PyTraceBack_Print
-  PyTraceBack_Type=python38.PyTraceBack_Type DATA
-  PyTupleIter_Type=python38.PyTupleIter_Type DATA
-  PyTuple_ClearFreeList=python38.PyTuple_ClearFreeList
-  PyTuple_GetItem=python38.PyTuple_GetItem
-  PyTuple_GetSlice=python38.PyTuple_GetSlice
-  PyTuple_New=python38.PyTuple_New
-  PyTuple_Pack=python38.PyTuple_Pack
-  PyTuple_SetItem=python38.PyTuple_SetItem
-  PyTuple_Size=python38.PyTuple_Size
-  PyTuple_Type=python38.PyTuple_Type DATA
-  PyType_ClearCache=python38.PyType_ClearCache
-  PyType_FromSpec=python38.PyType_FromSpec
-  PyType_FromSpecWithBases=python38.PyType_FromSpecWithBases
-  PyType_GenericAlloc=python38.PyType_GenericAlloc
-  PyType_GenericNew=python38.PyType_GenericNew
-  PyType_GetFlags=python38.PyType_GetFlags
-  PyType_GetSlot=python38.PyType_GetSlot
-  PyType_IsSubtype=python38.PyType_IsSubtype
-  PyType_Modified=python38.PyType_Modified
-  PyType_Ready=python38.PyType_Ready
-  PyType_Type=python38.PyType_Type DATA
-  PyUnicodeDecodeError_Create=python38.PyUnicodeDecodeError_Create
-  PyUnicodeDecodeError_GetEncoding=python38.PyUnicodeDecodeError_GetEncoding
-  PyUnicodeDecodeError_GetEnd=python38.PyUnicodeDecodeError_GetEnd
-  PyUnicodeDecodeError_GetObject=python38.PyUnicodeDecodeError_GetObject
-  PyUnicodeDecodeError_GetReason=python38.PyUnicodeDecodeError_GetReason
-  PyUnicodeDecodeError_GetStart=python38.PyUnicodeDecodeError_GetStart
-  PyUnicodeDecodeError_SetEnd=python38.PyUnicodeDecodeError_SetEnd
-  PyUnicodeDecodeError_SetReason=python38.PyUnicodeDecodeError_SetReason
-  PyUnicodeDecodeError_SetStart=python38.PyUnicodeDecodeError_SetStart
-  PyUnicodeEncodeError_GetEncoding=python38.PyUnicodeEncodeError_GetEncoding
-  PyUnicodeEncodeError_GetEnd=python38.PyUnicodeEncodeError_GetEnd
-  PyUnicodeEncodeError_GetObject=python38.PyUnicodeEncodeError_GetObject
-  PyUnicodeEncodeError_GetReason=python38.PyUnicodeEncodeError_GetReason
-  PyUnicodeEncodeError_GetStart=python38.PyUnicodeEncodeError_GetStart
-  PyUnicodeEncodeError_SetEnd=python38.PyUnicodeEncodeError_SetEnd
-  PyUnicodeEncodeError_SetReason=python38.PyUnicodeEncodeError_SetReason
-  PyUnicodeEncodeError_SetStart=python38.PyUnicodeEncodeError_SetStart
-  PyUnicodeIter_Type=python38.PyUnicodeIter_Type DATA
-  PyUnicodeTranslateError_GetEnd=python38.PyUnicodeTranslateError_GetEnd
-  PyUnicodeTranslateError_GetObject=python38.PyUnicodeTranslateError_GetObject
-  PyUnicodeTranslateError_GetReason=python38.PyUnicodeTranslateError_GetReason
-  PyUnicodeTranslateError_GetStart=python38.PyUnicodeTranslateError_GetStart
-  PyUnicodeTranslateError_SetEnd=python38.PyUnicodeTranslateError_SetEnd
-  PyUnicodeTranslateError_SetReason=python38.PyUnicodeTranslateError_SetReason
-  PyUnicodeTranslateError_SetStart=python38.PyUnicodeTranslateError_SetStart
-  PyUnicode_Append=python38.PyUnicode_Append
-  PyUnicode_AppendAndDel=python38.PyUnicode_AppendAndDel
-  PyUnicode_AsASCIIString=python38.PyUnicode_AsASCIIString
-  PyUnicode_AsCharmapString=python38.PyUnicode_AsCharmapString
-  PyUnicode_AsDecodedObject=python38.PyUnicode_AsDecodedObject
-  PyUnicode_AsDecodedUnicode=python38.PyUnicode_AsDecodedUnicode
-  PyUnicode_AsEncodedObject=python38.PyUnicode_AsEncodedObject
-  PyUnicode_AsEncodedString=python38.PyUnicode_AsEncodedString
-  PyUnicode_AsEncodedUnicode=python38.PyUnicode_AsEncodedUnicode
-  PyUnicode_AsLatin1String=python38.PyUnicode_AsLatin1String
-  PyUnicode_AsMBCSString=python38.PyUnicode_AsMBCSString
-  PyUnicode_AsRawUnicodeEscapeString=python38.PyUnicode_AsRawUnicodeEscapeString
-  PyUnicode_AsUCS4=python38.PyUnicode_AsUCS4
-  PyUnicode_AsUCS4Copy=python38.PyUnicode_AsUCS4Copy
-  PyUnicode_AsUTF16String=python38.PyUnicode_AsUTF16String
-  PyUnicode_AsUTF32String=python38.PyUnicode_AsUTF32String
-  PyUnicode_AsUTF8String=python38.PyUnicode_AsUTF8String
-  PyUnicode_AsUnicodeEscapeString=python38.PyUnicode_AsUnicodeEscapeString
-  PyUnicode_AsWideChar=python38.PyUnicode_AsWideChar
-  PyUnicode_AsWideCharString=python38.PyUnicode_AsWideCharString
-  PyUnicode_BuildEncodingMap=python38.PyUnicode_BuildEncodingMap
-  PyUnicode_ClearFreeList=python38.PyUnicode_ClearFreeList
-  PyUnicode_Compare=python38.PyUnicode_Compare
-  PyUnicode_CompareWithASCIIString=python38.PyUnicode_CompareWithASCIIString
-  PyUnicode_Concat=python38.PyUnicode_Concat
-  PyUnicode_Contains=python38.PyUnicode_Contains
-  PyUnicode_Count=python38.PyUnicode_Count
-  PyUnicode_Decode=python38.PyUnicode_Decode
-  PyUnicode_DecodeASCII=python38.PyUnicode_DecodeASCII
-  PyUnicode_DecodeCharmap=python38.PyUnicode_DecodeCharmap
-  PyUnicode_DecodeCodePageStateful=python38.PyUnicode_DecodeCodePageStateful
-  PyUnicode_DecodeFSDefault=python38.PyUnicode_DecodeFSDefault
-  PyUnicode_DecodeFSDefaultAndSize=python38.PyUnicode_DecodeFSDefaultAndSize
-  PyUnicode_DecodeLatin1=python38.PyUnicode_DecodeLatin1
-  PyUnicode_DecodeLocale=python38.PyUnicode_DecodeLocale
-  PyUnicode_DecodeLocaleAndSize=python38.PyUnicode_DecodeLocaleAndSize
-  PyUnicode_DecodeMBCS=python38.PyUnicode_DecodeMBCS
-  PyUnicode_DecodeMBCSStateful=python38.PyUnicode_DecodeMBCSStateful
-  PyUnicode_DecodeRawUnicodeEscape=python38.PyUnicode_DecodeRawUnicodeEscape
-  PyUnicode_DecodeUTF16=python38.PyUnicode_DecodeUTF16
-  PyUnicode_DecodeUTF16Stateful=python38.PyUnicode_DecodeUTF16Stateful
-  PyUnicode_DecodeUTF32=python38.PyUnicode_DecodeUTF32
-  PyUnicode_DecodeUTF32Stateful=python38.PyUnicode_DecodeUTF32Stateful
-  PyUnicode_DecodeUTF7=python38.PyUnicode_DecodeUTF7
-  PyUnicode_DecodeUTF7Stateful=python38.PyUnicode_DecodeUTF7Stateful
-  PyUnicode_DecodeUTF8=python38.PyUnicode_DecodeUTF8
-  PyUnicode_DecodeUTF8Stateful=python38.PyUnicode_DecodeUTF8Stateful
-  PyUnicode_DecodeUnicodeEscape=python38.PyUnicode_DecodeUnicodeEscape
-  PyUnicode_EncodeCodePage=python38.PyUnicode_EncodeCodePage
-  PyUnicode_EncodeFSDefault=python38.PyUnicode_EncodeFSDefault
-  PyUnicode_EncodeLocale=python38.PyUnicode_EncodeLocale
-  PyUnicode_FSConverter=python38.PyUnicode_FSConverter
-  PyUnicode_FSDecoder=python38.PyUnicode_FSDecoder
-  PyUnicode_Find=python38.PyUnicode_Find
-  PyUnicode_FindChar=python38.PyUnicode_FindChar
-  PyUnicode_Format=python38.PyUnicode_Format
-  PyUnicode_FromEncodedObject=python38.PyUnicode_FromEncodedObject
-  PyUnicode_FromFormat=python38.PyUnicode_FromFormat
-  PyUnicode_FromFormatV=python38.PyUnicode_FromFormatV
-  PyUnicode_FromObject=python38.PyUnicode_FromObject
-  PyUnicode_FromOrdinal=python38.PyUnicode_FromOrdinal
-  PyUnicode_FromString=python38.PyUnicode_FromString
-  PyUnicode_FromStringAndSize=python38.PyUnicode_FromStringAndSize
-  PyUnicode_FromWideChar=python38.PyUnicode_FromWideChar
-  PyUnicode_GetDefaultEncoding=python38.PyUnicode_GetDefaultEncoding
-  PyUnicode_GetLength=python38.PyUnicode_GetLength
-  PyUnicode_GetSize=python38.PyUnicode_GetSize
-  PyUnicode_InternFromString=python38.PyUnicode_InternFromString
-  PyUnicode_InternImmortal=python38.PyUnicode_InternImmortal
-  PyUnicode_InternInPlace=python38.PyUnicode_InternInPlace
-  PyUnicode_IsIdentifier=python38.PyUnicode_IsIdentifier
-  PyUnicode_Join=python38.PyUnicode_Join
-  PyUnicode_Partition=python38.PyUnicode_Partition
-  PyUnicode_RPartition=python38.PyUnicode_RPartition
-  PyUnicode_RSplit=python38.PyUnicode_RSplit
-  PyUnicode_ReadChar=python38.PyUnicode_ReadChar
-  PyUnicode_Replace=python38.PyUnicode_Replace
-  PyUnicode_Resize=python38.PyUnicode_Resize
-  PyUnicode_RichCompare=python38.PyUnicode_RichCompare
-  PyUnicode_Split=python38.PyUnicode_Split
-  PyUnicode_Splitlines=python38.PyUnicode_Splitlines
-  PyUnicode_Substring=python38.PyUnicode_Substring
-  PyUnicode_Tailmatch=python38.PyUnicode_Tailmatch
-  PyUnicode_Translate=python38.PyUnicode_Translate
-  PyUnicode_Type=python38.PyUnicode_Type DATA
-  PyUnicode_WriteChar=python38.PyUnicode_WriteChar
-  PyWeakref_GetObject=python38.PyWeakref_GetObject
-  PyWeakref_NewProxy=python38.PyWeakref_NewProxy
-  PyWeakref_NewRef=python38.PyWeakref_NewRef
-  PyWrapperDescr_Type=python38.PyWrapperDescr_Type DATA
-  PyWrapper_New=python38.PyWrapper_New
-  PyZip_Type=python38.PyZip_Type DATA
-  Py_AddPendingCall=python38.Py_AddPendingCall
-  Py_AtExit=python38.Py_AtExit
-  Py_BuildValue=python38.Py_BuildValue
-  Py_CompileString=python38.Py_CompileString
-  Py_DecRef=python38.Py_DecRef
-  Py_DecodeLocale=python38.Py_DecodeLocale
-  Py_EncodeLocale=python38.Py_EncodeLocale
-  Py_EndInterpreter=python38.Py_EndInterpreter
-  Py_Exit=python38.Py_Exit
-  Py_FatalError=python38.Py_FatalError
-  Py_FileSystemDefaultEncodeErrors=python38.Py_FileSystemDefaultEncodeErrors DATA
-  Py_FileSystemDefaultEncoding=python38.Py_FileSystemDefaultEncoding DATA
-  Py_Finalize=python38.Py_Finalize
-  Py_FinalizeEx=python38.Py_FinalizeEx
-  Py_GetBuildInfo=python38.Py_GetBuildInfo
-  Py_GetCompiler=python38.Py_GetCompiler
-  Py_GetCopyright=python38.Py_GetCopyright
-  Py_GetExecPrefix=python38.Py_GetExecPrefix
-  Py_GetPath=python38.Py_GetPath
-  Py_GetPlatform=python38.Py_GetPlatform
-  Py_GetPrefix=python38.Py_GetPrefix
-  Py_GetProgramFullPath=python38.Py_GetProgramFullPath
-  Py_GetProgramName=python38.Py_GetProgramName
-  Py_GetPythonHome=python38.Py_GetPythonHome
-  Py_GetRecursionLimit=python38.Py_GetRecursionLimit
-  Py_GetVersion=python38.Py_GetVersion
-  Py_HasFileSystemDefaultEncoding=python38.Py_HasFileSystemDefaultEncoding DATA
-  Py_IncRef=python38.Py_IncRef
-  Py_Initialize=python38.Py_Initialize
-  Py_InitializeEx=python38.Py_InitializeEx
-  Py_IsInitialized=python38.Py_IsInitialized
-  Py_Main=python38.Py_Main
-  Py_MakePendingCalls=python38.Py_MakePendingCalls
-  Py_NewInterpreter=python38.Py_NewInterpreter
-  Py_ReprEnter=python38.Py_ReprEnter
-  Py_ReprLeave=python38.Py_ReprLeave
-  Py_SetPath=python38.Py_SetPath
-  Py_SetProgramName=python38.Py_SetProgramName
-  Py_SetPythonHome=python38.Py_SetPythonHome
-  Py_SetRecursionLimit=python38.Py_SetRecursionLimit
-  Py_SymtableString=python38.Py_SymtableString
-  Py_UTF8Mode=python38.Py_UTF8Mode DATA
-  Py_VaBuildValue=python38.Py_VaBuildValue
-  _PyArg_ParseTupleAndKeywords_SizeT=python38._PyArg_ParseTupleAndKeywords_SizeT
-  _PyArg_ParseTuple_SizeT=python38._PyArg_ParseTuple_SizeT
-  _PyArg_Parse_SizeT=python38._PyArg_Parse_SizeT
-  _PyArg_VaParseTupleAndKeywords_SizeT=python38._PyArg_VaParseTupleAndKeywords_SizeT
-  _PyArg_VaParse_SizeT=python38._PyArg_VaParse_SizeT
-  _PyErr_BadInternalCall=python38._PyErr_BadInternalCall
-  _PyObject_CallFunction_SizeT=python38._PyObject_CallFunction_SizeT
-  _PyObject_CallMethod_SizeT=python38._PyObject_CallMethod_SizeT
-  _PyObject_GC_Malloc=python38._PyObject_GC_Malloc
-  _PyObject_GC_New=python38._PyObject_GC_New
-  _PyObject_GC_NewVar=python38._PyObject_GC_NewVar
-  _PyObject_GC_Resize=python38._PyObject_GC_Resize
-  _PyObject_New=python38._PyObject_New
-  _PyObject_NewVar=python38._PyObject_NewVar
-  _PyState_AddModule=python38._PyState_AddModule
-  _PyThreadState_Init=python38._PyThreadState_Init
-  _PyThreadState_Prealloc=python38._PyThreadState_Prealloc
-  _PyTrash_delete_later=python38._PyTrash_delete_later DATA
-  _PyTrash_delete_nesting=python38._PyTrash_delete_nesting DATA
-  _PyTrash_deposit_object=python38._PyTrash_deposit_object
-  _PyTrash_destroy_chain=python38._PyTrash_destroy_chain
-  _PyTrash_thread_deposit_object=python38._PyTrash_thread_deposit_object
-  _PyTrash_thread_destroy_chain=python38._PyTrash_thread_destroy_chain
-  _PyWeakref_CallableProxyType=python38._PyWeakref_CallableProxyType DATA
-  _PyWeakref_ProxyType=python38._PyWeakref_ProxyType DATA
-  _PyWeakref_RefType=python38._PyWeakref_RefType DATA
-  _Py_BuildValue_SizeT=python38._Py_BuildValue_SizeT
-  _Py_CheckRecursionLimit=python38._Py_CheckRecursionLimit DATA
-  _Py_CheckRecursiveCall=python38._Py_CheckRecursiveCall
-  _Py_Dealloc=python38._Py_Dealloc
-  _Py_EllipsisObject=python38._Py_EllipsisObject DATA
-  _Py_FalseStruct=python38._Py_FalseStruct DATA
-  _Py_NoneStruct=python38._Py_NoneStruct DATA
-  _Py_NotImplementedStruct=python38._Py_NotImplementedStruct DATA
-  _Py_SwappedOp=python38._Py_SwappedOp DATA
-  _Py_TrueStruct=python38._Py_TrueStruct DATA
-  _Py_VaBuildValue_SizeT=python38._Py_VaBuildValue_SizeT
+  PyArg_Parse=python39.PyArg_Parse
+  PyArg_ParseTuple=python39.PyArg_ParseTuple
+  PyArg_ParseTupleAndKeywords=python39.PyArg_ParseTupleAndKeywords
+  PyArg_UnpackTuple=python39.PyArg_UnpackTuple
+  PyArg_VaParse=python39.PyArg_VaParse
+  PyArg_VaParseTupleAndKeywords=python39.PyArg_VaParseTupleAndKeywords
+  PyArg_ValidateKeywordArguments=python39.PyArg_ValidateKeywordArguments
+  PyBaseObject_Type=python39.PyBaseObject_Type DATA
+  PyBool_FromLong=python39.PyBool_FromLong
+  PyBool_Type=python39.PyBool_Type DATA
+  PyByteArrayIter_Type=python39.PyByteArrayIter_Type DATA
+  PyByteArray_AsString=python39.PyByteArray_AsString
+  PyByteArray_Concat=python39.PyByteArray_Concat
+  PyByteArray_FromObject=python39.PyByteArray_FromObject
+  PyByteArray_FromStringAndSize=python39.PyByteArray_FromStringAndSize
+  PyByteArray_Resize=python39.PyByteArray_Resize
+  PyByteArray_Size=python39.PyByteArray_Size
+  PyByteArray_Type=python39.PyByteArray_Type DATA
+  PyBytesIter_Type=python39.PyBytesIter_Type DATA
+  PyBytes_AsString=python39.PyBytes_AsString
+  PyBytes_AsStringAndSize=python39.PyBytes_AsStringAndSize
+  PyBytes_Concat=python39.PyBytes_Concat
+  PyBytes_ConcatAndDel=python39.PyBytes_ConcatAndDel
+  PyBytes_DecodeEscape=python39.PyBytes_DecodeEscape
+  PyBytes_FromFormat=python39.PyBytes_FromFormat
+  PyBytes_FromFormatV=python39.PyBytes_FromFormatV
+  PyBytes_FromObject=python39.PyBytes_FromObject
+  PyBytes_FromString=python39.PyBytes_FromString
+  PyBytes_FromStringAndSize=python39.PyBytes_FromStringAndSize
+  PyBytes_Repr=python39.PyBytes_Repr
+  PyBytes_Size=python39.PyBytes_Size
+  PyBytes_Type=python39.PyBytes_Type DATA
+  PyCFunction_Call=python39.PyCFunction_Call
+  PyCFunction_GetFlags=python39.PyCFunction_GetFlags
+  PyCFunction_GetFunction=python39.PyCFunction_GetFunction
+  PyCFunction_GetSelf=python39.PyCFunction_GetSelf
+  PyCFunction_New=python39.PyCFunction_New
+  PyCFunction_NewEx=python39.PyCFunction_NewEx
+  PyCFunction_Type=python39.PyCFunction_Type DATA
+  PyCallIter_New=python39.PyCallIter_New
+  PyCallIter_Type=python39.PyCallIter_Type DATA
+  PyCallable_Check=python39.PyCallable_Check
+  PyCapsule_GetContext=python39.PyCapsule_GetContext
+  PyCapsule_GetDestructor=python39.PyCapsule_GetDestructor
+  PyCapsule_GetName=python39.PyCapsule_GetName
+  PyCapsule_GetPointer=python39.PyCapsule_GetPointer
+  PyCapsule_Import=python39.PyCapsule_Import
+  PyCapsule_IsValid=python39.PyCapsule_IsValid
+  PyCapsule_New=python39.PyCapsule_New
+  PyCapsule_SetContext=python39.PyCapsule_SetContext
+  PyCapsule_SetDestructor=python39.PyCapsule_SetDestructor
+  PyCapsule_SetName=python39.PyCapsule_SetName
+  PyCapsule_SetPointer=python39.PyCapsule_SetPointer
+  PyCapsule_Type=python39.PyCapsule_Type DATA
+  PyClassMethodDescr_Type=python39.PyClassMethodDescr_Type DATA
+  PyCodec_BackslashReplaceErrors=python39.PyCodec_BackslashReplaceErrors
+  PyCodec_Decode=python39.PyCodec_Decode
+  PyCodec_Decoder=python39.PyCodec_Decoder
+  PyCodec_Encode=python39.PyCodec_Encode
+  PyCodec_Encoder=python39.PyCodec_Encoder
+  PyCodec_IgnoreErrors=python39.PyCodec_IgnoreErrors
+  PyCodec_IncrementalDecoder=python39.PyCodec_IncrementalDecoder
+  PyCodec_IncrementalEncoder=python39.PyCodec_IncrementalEncoder
+  PyCodec_KnownEncoding=python39.PyCodec_KnownEncoding
+  PyCodec_LookupError=python39.PyCodec_LookupError
+  PyCodec_NameReplaceErrors=python39.PyCodec_NameReplaceErrors
+  PyCodec_Register=python39.PyCodec_Register
+  PyCodec_RegisterError=python39.PyCodec_RegisterError
+  PyCodec_ReplaceErrors=python39.PyCodec_ReplaceErrors
+  PyCodec_StreamReader=python39.PyCodec_StreamReader
+  PyCodec_StreamWriter=python39.PyCodec_StreamWriter
+  PyCodec_StrictErrors=python39.PyCodec_StrictErrors
+  PyCodec_XMLCharRefReplaceErrors=python39.PyCodec_XMLCharRefReplaceErrors
+  PyComplex_FromDoubles=python39.PyComplex_FromDoubles
+  PyComplex_ImagAsDouble=python39.PyComplex_ImagAsDouble
+  PyComplex_RealAsDouble=python39.PyComplex_RealAsDouble
+  PyComplex_Type=python39.PyComplex_Type DATA
+  PyDescr_NewClassMethod=python39.PyDescr_NewClassMethod
+  PyDescr_NewGetSet=python39.PyDescr_NewGetSet
+  PyDescr_NewMember=python39.PyDescr_NewMember
+  PyDescr_NewMethod=python39.PyDescr_NewMethod
+  PyDictItems_Type=python39.PyDictItems_Type DATA
+  PyDictIterItem_Type=python39.PyDictIterItem_Type DATA
+  PyDictIterKey_Type=python39.PyDictIterKey_Type DATA
+  PyDictIterValue_Type=python39.PyDictIterValue_Type DATA
+  PyDictKeys_Type=python39.PyDictKeys_Type DATA
+  PyDictProxy_New=python39.PyDictProxy_New
+  PyDictProxy_Type=python39.PyDictProxy_Type DATA
+  PyDictValues_Type=python39.PyDictValues_Type DATA
+  PyDict_Clear=python39.PyDict_Clear
+  PyDict_Contains=python39.PyDict_Contains
+  PyDict_Copy=python39.PyDict_Copy
+  PyDict_DelItem=python39.PyDict_DelItem
+  PyDict_DelItemString=python39.PyDict_DelItemString
+  PyDict_GetItem=python39.PyDict_GetItem
+  PyDict_GetItemString=python39.PyDict_GetItemString
+  PyDict_GetItemWithError=python39.PyDict_GetItemWithError
+  PyDict_Items=python39.PyDict_Items
+  PyDict_Keys=python39.PyDict_Keys
+  PyDict_Merge=python39.PyDict_Merge
+  PyDict_MergeFromSeq2=python39.PyDict_MergeFromSeq2
+  PyDict_New=python39.PyDict_New
+  PyDict_Next=python39.PyDict_Next
+  PyDict_SetItem=python39.PyDict_SetItem
+  PyDict_SetItemString=python39.PyDict_SetItemString
+  PyDict_Size=python39.PyDict_Size
+  PyDict_Type=python39.PyDict_Type DATA
+  PyDict_Update=python39.PyDict_Update
+  PyDict_Values=python39.PyDict_Values
+  PyEllipsis_Type=python39.PyEllipsis_Type DATA
+  PyEnum_Type=python39.PyEnum_Type DATA
+  PyErr_BadArgument=python39.PyErr_BadArgument
+  PyErr_BadInternalCall=python39.PyErr_BadInternalCall
+  PyErr_CheckSignals=python39.PyErr_CheckSignals
+  PyErr_Clear=python39.PyErr_Clear
+  PyErr_Display=python39.PyErr_Display
+  PyErr_ExceptionMatches=python39.PyErr_ExceptionMatches
+  PyErr_Fetch=python39.PyErr_Fetch
+  PyErr_Format=python39.PyErr_Format
+  PyErr_FormatV=python39.PyErr_FormatV
+  PyErr_GetExcInfo=python39.PyErr_GetExcInfo
+  PyErr_GivenExceptionMatches=python39.PyErr_GivenExceptionMatches
+  PyErr_NewException=python39.PyErr_NewException
+  PyErr_NewExceptionWithDoc=python39.PyErr_NewExceptionWithDoc
+  PyErr_NoMemory=python39.PyErr_NoMemory
+  PyErr_NormalizeException=python39.PyErr_NormalizeException
+  PyErr_Occurred=python39.PyErr_Occurred
+  PyErr_Print=python39.PyErr_Print
+  PyErr_PrintEx=python39.PyErr_PrintEx
+  PyErr_ProgramText=python39.PyErr_ProgramText
+  PyErr_ResourceWarning=python39.PyErr_ResourceWarning
+  PyErr_Restore=python39.PyErr_Restore
+  PyErr_SetExcFromWindowsErr=python39.PyErr_SetExcFromWindowsErr
+  PyErr_SetExcFromWindowsErrWithFilename=python39.PyErr_SetExcFromWindowsErrWithFilename
+  PyErr_SetExcFromWindowsErrWithFilenameObject=python39.PyErr_SetExcFromWindowsErrWithFilenameObject
+  PyErr_SetExcFromWindowsErrWithFilenameObjects=python39.PyErr_SetExcFromWindowsErrWithFilenameObjects
+  PyErr_SetExcInfo=python39.PyErr_SetExcInfo
+  PyErr_SetFromErrno=python39.PyErr_SetFromErrno
+  PyErr_SetFromErrnoWithFilename=python39.PyErr_SetFromErrnoWithFilename
+  PyErr_SetFromErrnoWithFilenameObject=python39.PyErr_SetFromErrnoWithFilenameObject
+  PyErr_SetFromErrnoWithFilenameObjects=python39.PyErr_SetFromErrnoWithFilenameObjects
+  PyErr_SetFromWindowsErr=python39.PyErr_SetFromWindowsErr
+  PyErr_SetFromWindowsErrWithFilename=python39.PyErr_SetFromWindowsErrWithFilename
+  PyErr_SetImportError=python39.PyErr_SetImportError
+  PyErr_SetImportErrorSubclass=python39.PyErr_SetImportErrorSubclass
+  PyErr_SetInterrupt=python39.PyErr_SetInterrupt
+  PyErr_SetNone=python39.PyErr_SetNone
+  PyErr_SetObject=python39.PyErr_SetObject
+  PyErr_SetString=python39.PyErr_SetString
+  PyErr_SyntaxLocation=python39.PyErr_SyntaxLocation
+  PyErr_SyntaxLocationEx=python39.PyErr_SyntaxLocationEx
+  PyErr_WarnEx=python39.PyErr_WarnEx
+  PyErr_WarnExplicit=python39.PyErr_WarnExplicit
+  PyErr_WarnFormat=python39.PyErr_WarnFormat
+  PyErr_WriteUnraisable=python39.PyErr_WriteUnraisable
+  PyEval_AcquireLock=python39.PyEval_AcquireLock
+  PyEval_AcquireThread=python39.PyEval_AcquireThread
+  PyEval_CallFunction=python39.PyEval_CallFunction
+  PyEval_CallMethod=python39.PyEval_CallMethod
+  PyEval_CallObjectWithKeywords=python39.PyEval_CallObjectWithKeywords
+  PyEval_EvalCode=python39.PyEval_EvalCode
+  PyEval_EvalCodeEx=python39.PyEval_EvalCodeEx
+  PyEval_EvalFrame=python39.PyEval_EvalFrame
+  PyEval_EvalFrameEx=python39.PyEval_EvalFrameEx
+  PyEval_GetBuiltins=python39.PyEval_GetBuiltins
+  PyEval_GetCallStats=python39.PyEval_GetCallStats
+  PyEval_GetFrame=python39.PyEval_GetFrame
+  PyEval_GetFuncDesc=python39.PyEval_GetFuncDesc
+  PyEval_GetFuncName=python39.PyEval_GetFuncName
+  PyEval_GetGlobals=python39.PyEval_GetGlobals
+  PyEval_GetLocals=python39.PyEval_GetLocals
+  PyEval_InitThreads=python39.PyEval_InitThreads
+  PyEval_ReInitThreads=python39.PyEval_ReInitThreads
+  PyEval_ReleaseLock=python39.PyEval_ReleaseLock
+  PyEval_ReleaseThread=python39.PyEval_ReleaseThread
+  PyEval_RestoreThread=python39.PyEval_RestoreThread
+  PyEval_SaveThread=python39.PyEval_SaveThread
+  PyEval_ThreadsInitialized=python39.PyEval_ThreadsInitialized
+  PyExc_ArithmeticError=python39.PyExc_ArithmeticError DATA
+  PyExc_AssertionError=python39.PyExc_AssertionError DATA
+  PyExc_AttributeError=python39.PyExc_AttributeError DATA
+  PyExc_BaseException=python39.PyExc_BaseException DATA
+  PyExc_BlockingIOError=python39.PyExc_BlockingIOError DATA
+  PyExc_BrokenPipeError=python39.PyExc_BrokenPipeError DATA
+  PyExc_BufferError=python39.PyExc_BufferError DATA
+  PyExc_BytesWarning=python39.PyExc_BytesWarning DATA
+  PyExc_ChildProcessError=python39.PyExc_ChildProcessError DATA
+  PyExc_ConnectionAbortedError=python39.PyExc_ConnectionAbortedError DATA
+  PyExc_ConnectionError=python39.PyExc_ConnectionError DATA
+  PyExc_ConnectionRefusedError=python39.PyExc_ConnectionRefusedError DATA
+  PyExc_ConnectionResetError=python39.PyExc_ConnectionResetError DATA
+  PyExc_DeprecationWarning=python39.PyExc_DeprecationWarning DATA
+  PyExc_EOFError=python39.PyExc_EOFError DATA
+  PyExc_EnvironmentError=python39.PyExc_EnvironmentError DATA
+  PyExc_Exception=python39.PyExc_Exception DATA
+  PyExc_FileExistsError=python39.PyExc_FileExistsError DATA
+  PyExc_FileNotFoundError=python39.PyExc_FileNotFoundError DATA
+  PyExc_FloatingPointError=python39.PyExc_FloatingPointError DATA
+  PyExc_FutureWarning=python39.PyExc_FutureWarning DATA
+  PyExc_GeneratorExit=python39.PyExc_GeneratorExit DATA
+  PyExc_IOError=python39.PyExc_IOError DATA
+  PyExc_ImportError=python39.PyExc_ImportError DATA
+  PyExc_ImportWarning=python39.PyExc_ImportWarning DATA
+  PyExc_IndentationError=python39.PyExc_IndentationError DATA
+  PyExc_IndexError=python39.PyExc_IndexError DATA
+  PyExc_InterruptedError=python39.PyExc_InterruptedError DATA
+  PyExc_IsADirectoryError=python39.PyExc_IsADirectoryError DATA
+  PyExc_KeyError=python39.PyExc_KeyError DATA
+  PyExc_KeyboardInterrupt=python39.PyExc_KeyboardInterrupt DATA
+  PyExc_LookupError=python39.PyExc_LookupError DATA
+  PyExc_MemoryError=python39.PyExc_MemoryError DATA
+  PyExc_ModuleNotFoundError=python39.PyExc_ModuleNotFoundError DATA
+  PyExc_NameError=python39.PyExc_NameError DATA
+  PyExc_NotADirectoryError=python39.PyExc_NotADirectoryError DATA
+  PyExc_NotImplementedError=python39.PyExc_NotImplementedError DATA
+  PyExc_OSError=python39.PyExc_OSError DATA
+  PyExc_OverflowError=python39.PyExc_OverflowError DATA
+  PyExc_PendingDeprecationWarning=python39.PyExc_PendingDeprecationWarning DATA
+  PyExc_PermissionError=python39.PyExc_PermissionError DATA
+  PyExc_ProcessLookupError=python39.PyExc_ProcessLookupError DATA
+  PyExc_RecursionError=python39.PyExc_RecursionError DATA
+  PyExc_ReferenceError=python39.PyExc_ReferenceError DATA
+  PyExc_ResourceWarning=python39.PyExc_ResourceWarning DATA
+  PyExc_RuntimeError=python39.PyExc_RuntimeError DATA
+  PyExc_RuntimeWarning=python39.PyExc_RuntimeWarning DATA
+  PyExc_StopAsyncIteration=python39.PyExc_StopAsyncIteration DATA
+  PyExc_StopIteration=python39.PyExc_StopIteration DATA
+  PyExc_SyntaxError=python39.PyExc_SyntaxError DATA
+  PyExc_SyntaxWarning=python39.PyExc_SyntaxWarning DATA
+  PyExc_SystemError=python39.PyExc_SystemError DATA
+  PyExc_SystemExit=python39.PyExc_SystemExit DATA
+  PyExc_TabError=python39.PyExc_TabError DATA
+  PyExc_TimeoutError=python39.PyExc_TimeoutError DATA
+  PyExc_TypeError=python39.PyExc_TypeError DATA
+  PyExc_UnboundLocalError=python39.PyExc_UnboundLocalError DATA
+  PyExc_UnicodeDecodeError=python39.PyExc_UnicodeDecodeError DATA
+  PyExc_UnicodeEncodeError=python39.PyExc_UnicodeEncodeError DATA
+  PyExc_UnicodeError=python39.PyExc_UnicodeError DATA
+  PyExc_UnicodeTranslateError=python39.PyExc_UnicodeTranslateError DATA
+  PyExc_UnicodeWarning=python39.PyExc_UnicodeWarning DATA
+  PyExc_UserWarning=python39.PyExc_UserWarning DATA
+  PyExc_ValueError=python39.PyExc_ValueError DATA
+  PyExc_Warning=python39.PyExc_Warning DATA
+  PyExc_WindowsError=python39.PyExc_WindowsError DATA
+  PyExc_ZeroDivisionError=python39.PyExc_ZeroDivisionError DATA
+  PyExceptionClass_Name=python39.PyExceptionClass_Name
+  PyException_GetCause=python39.PyException_GetCause
+  PyException_GetContext=python39.PyException_GetContext
+  PyException_GetTraceback=python39.PyException_GetTraceback
+  PyException_SetCause=python39.PyException_SetCause
+  PyException_SetContext=python39.PyException_SetContext
+  PyException_SetTraceback=python39.PyException_SetTraceback
+  PyFile_FromFd=python39.PyFile_FromFd
+  PyFile_GetLine=python39.PyFile_GetLine
+  PyFile_WriteObject=python39.PyFile_WriteObject
+  PyFile_WriteString=python39.PyFile_WriteString
+  PyFilter_Type=python39.PyFilter_Type DATA
+  PyFloat_AsDouble=python39.PyFloat_AsDouble
+  PyFloat_FromDouble=python39.PyFloat_FromDouble
+  PyFloat_FromString=python39.PyFloat_FromString
+  PyFloat_GetInfo=python39.PyFloat_GetInfo
+  PyFloat_GetMax=python39.PyFloat_GetMax
+  PyFloat_GetMin=python39.PyFloat_GetMin
+  PyFloat_Type=python39.PyFloat_Type DATA
+  PyFrozenSet_New=python39.PyFrozenSet_New
+  PyFrozenSet_Type=python39.PyFrozenSet_Type DATA
+  PyGC_Collect=python39.PyGC_Collect
+  PyGILState_Ensure=python39.PyGILState_Ensure
+  PyGILState_GetThisThreadState=python39.PyGILState_GetThisThreadState
+  PyGILState_Release=python39.PyGILState_Release
+  PyGetSetDescr_Type=python39.PyGetSetDescr_Type DATA
+  PyImport_AddModule=python39.PyImport_AddModule
+  PyImport_AddModuleObject=python39.PyImport_AddModuleObject
+  PyImport_AppendInittab=python39.PyImport_AppendInittab
+  PyImport_Cleanup=python39.PyImport_Cleanup
+  PyImport_ExecCodeModule=python39.PyImport_ExecCodeModule
+  PyImport_ExecCodeModuleEx=python39.PyImport_ExecCodeModuleEx
+  PyImport_ExecCodeModuleObject=python39.PyImport_ExecCodeModuleObject
+  PyImport_ExecCodeModuleWithPathnames=python39.PyImport_ExecCodeModuleWithPathnames
+  PyImport_GetImporter=python39.PyImport_GetImporter
+  PyImport_GetMagicNumber=python39.PyImport_GetMagicNumber
+  PyImport_GetMagicTag=python39.PyImport_GetMagicTag
+  PyImport_GetModule=python39.PyImport_GetModule
+  PyImport_GetModuleDict=python39.PyImport_GetModuleDict
+  PyImport_Import=python39.PyImport_Import
+  PyImport_ImportFrozenModule=python39.PyImport_ImportFrozenModule
+  PyImport_ImportFrozenModuleObject=python39.PyImport_ImportFrozenModuleObject
+  PyImport_ImportModule=python39.PyImport_ImportModule
+  PyImport_ImportModuleLevel=python39.PyImport_ImportModuleLevel
+  PyImport_ImportModuleLevelObject=python39.PyImport_ImportModuleLevelObject
+  PyImport_ImportModuleNoBlock=python39.PyImport_ImportModuleNoBlock
+  PyImport_ReloadModule=python39.PyImport_ReloadModule
+  PyIndex_Check=python39.PyIndex_Check
+  PyInterpreterState_Clear=python39.PyInterpreterState_Clear
+  PyInterpreterState_Delete=python39.PyInterpreterState_Delete
+  PyInterpreterState_New=python39.PyInterpreterState_New
+  PyIter_Check=python39.PyIter_Check
+  PyIter_Next=python39.PyIter_Next
+  PyListIter_Type=python39.PyListIter_Type DATA
+  PyListRevIter_Type=python39.PyListRevIter_Type DATA
+  PyList_Append=python39.PyList_Append
+  PyList_AsTuple=python39.PyList_AsTuple
+  PyList_GetItem=python39.PyList_GetItem
+  PyList_GetSlice=python39.PyList_GetSlice
+  PyList_Insert=python39.PyList_Insert
+  PyList_New=python39.PyList_New
+  PyList_Reverse=python39.PyList_Reverse
+  PyList_SetItem=python39.PyList_SetItem
+  PyList_SetSlice=python39.PyList_SetSlice
+  PyList_Size=python39.PyList_Size
+  PyList_Sort=python39.PyList_Sort
+  PyList_Type=python39.PyList_Type DATA
+  PyLongRangeIter_Type=python39.PyLongRangeIter_Type DATA
+  PyLong_AsDouble=python39.PyLong_AsDouble
+  PyLong_AsLong=python39.PyLong_AsLong
+  PyLong_AsLongAndOverflow=python39.PyLong_AsLongAndOverflow
+  PyLong_AsLongLong=python39.PyLong_AsLongLong
+  PyLong_AsLongLongAndOverflow=python39.PyLong_AsLongLongAndOverflow
+  PyLong_AsSize_t=python39.PyLong_AsSize_t
+  PyLong_AsSsize_t=python39.PyLong_AsSsize_t
+  PyLong_AsUnsignedLong=python39.PyLong_AsUnsignedLong
+  PyLong_AsUnsignedLongLong=python39.PyLong_AsUnsignedLongLong
+  PyLong_AsUnsignedLongLongMask=python39.PyLong_AsUnsignedLongLongMask
+  PyLong_AsUnsignedLongMask=python39.PyLong_AsUnsignedLongMask
+  PyLong_AsVoidPtr=python39.PyLong_AsVoidPtr
+  PyLong_FromDouble=python39.PyLong_FromDouble
+  PyLong_FromLong=python39.PyLong_FromLong
+  PyLong_FromLongLong=python39.PyLong_FromLongLong
+  PyLong_FromSize_t=python39.PyLong_FromSize_t
+  PyLong_FromSsize_t=python39.PyLong_FromSsize_t
+  PyLong_FromString=python39.PyLong_FromString
+  PyLong_FromUnsignedLong=python39.PyLong_FromUnsignedLong
+  PyLong_FromUnsignedLongLong=python39.PyLong_FromUnsignedLongLong
+  PyLong_FromVoidPtr=python39.PyLong_FromVoidPtr
+  PyLong_GetInfo=python39.PyLong_GetInfo
+  PyLong_Type=python39.PyLong_Type DATA
+  PyMap_Type=python39.PyMap_Type DATA
+  PyMapping_Check=python39.PyMapping_Check
+  PyMapping_GetItemString=python39.PyMapping_GetItemString
+  PyMapping_HasKey=python39.PyMapping_HasKey
+  PyMapping_HasKeyString=python39.PyMapping_HasKeyString
+  PyMapping_Items=python39.PyMapping_Items
+  PyMapping_Keys=python39.PyMapping_Keys
+  PyMapping_Length=python39.PyMapping_Length
+  PyMapping_SetItemString=python39.PyMapping_SetItemString
+  PyMapping_Size=python39.PyMapping_Size
+  PyMapping_Values=python39.PyMapping_Values
+  PyMem_Calloc=python39.PyMem_Calloc
+  PyMem_Free=python39.PyMem_Free
+  PyMem_Malloc=python39.PyMem_Malloc
+  PyMem_Realloc=python39.PyMem_Realloc
+  PyMemberDescr_Type=python39.PyMemberDescr_Type DATA
+  PyMemoryView_FromMemory=python39.PyMemoryView_FromMemory
+  PyMemoryView_FromObject=python39.PyMemoryView_FromObject
+  PyMemoryView_GetContiguous=python39.PyMemoryView_GetContiguous
+  PyMemoryView_Type=python39.PyMemoryView_Type DATA
+  PyMethodDescr_Type=python39.PyMethodDescr_Type DATA
+  PyModuleDef_Init=python39.PyModuleDef_Init
+  PyModuleDef_Type=python39.PyModuleDef_Type DATA
+  PyModule_AddFunctions=python39.PyModule_AddFunctions
+  PyModule_AddIntConstant=python39.PyModule_AddIntConstant
+  PyModule_AddObject=python39.PyModule_AddObject
+  PyModule_AddStringConstant=python39.PyModule_AddStringConstant
+  PyModule_Create2=python39.PyModule_Create2
+  PyModule_ExecDef=python39.PyModule_ExecDef
+  PyModule_FromDefAndSpec2=python39.PyModule_FromDefAndSpec2
+  PyModule_GetDef=python39.PyModule_GetDef
+  PyModule_GetDict=python39.PyModule_GetDict
+  PyModule_GetFilename=python39.PyModule_GetFilename
+  PyModule_GetFilenameObject=python39.PyModule_GetFilenameObject
+  PyModule_GetName=python39.PyModule_GetName
+  PyModule_GetNameObject=python39.PyModule_GetNameObject
+  PyModule_GetState=python39.PyModule_GetState
+  PyModule_New=python39.PyModule_New
+  PyModule_NewObject=python39.PyModule_NewObject
+  PyModule_SetDocString=python39.PyModule_SetDocString
+  PyModule_Type=python39.PyModule_Type DATA
+  PyNullImporter_Type=python39.PyNullImporter_Type DATA
+  PyNumber_Absolute=python39.PyNumber_Absolute
+  PyNumber_Add=python39.PyNumber_Add
+  PyNumber_And=python39.PyNumber_And
+  PyNumber_AsSsize_t=python39.PyNumber_AsSsize_t
+  PyNumber_Check=python39.PyNumber_Check
+  PyNumber_Divmod=python39.PyNumber_Divmod
+  PyNumber_Float=python39.PyNumber_Float
+  PyNumber_FloorDivide=python39.PyNumber_FloorDivide
+  PyNumber_InPlaceAdd=python39.PyNumber_InPlaceAdd
+  PyNumber_InPlaceAnd=python39.PyNumber_InPlaceAnd
+  PyNumber_InPlaceFloorDivide=python39.PyNumber_InPlaceFloorDivide
+  PyNumber_InPlaceLshift=python39.PyNumber_InPlaceLshift
+  PyNumber_InPlaceMatrixMultiply=python39.PyNumber_InPlaceMatrixMultiply
+  PyNumber_InPlaceMultiply=python39.PyNumber_InPlaceMultiply
+  PyNumber_InPlaceOr=python39.PyNumber_InPlaceOr
+  PyNumber_InPlacePower=python39.PyNumber_InPlacePower
+  PyNumber_InPlaceRemainder=python39.PyNumber_InPlaceRemainder
+  PyNumber_InPlaceRshift=python39.PyNumber_InPlaceRshift
+  PyNumber_InPlaceSubtract=python39.PyNumber_InPlaceSubtract
+  PyNumber_InPlaceTrueDivide=python39.PyNumber_InPlaceTrueDivide
+  PyNumber_InPlaceXor=python39.PyNumber_InPlaceXor
+  PyNumber_Index=python39.PyNumber_Index
+  PyNumber_Invert=python39.PyNumber_Invert
+  PyNumber_Long=python39.PyNumber_Long
+  PyNumber_Lshift=python39.PyNumber_Lshift
+  PyNumber_MatrixMultiply=python39.PyNumber_MatrixMultiply
+  PyNumber_Multiply=python39.PyNumber_Multiply
+  PyNumber_Negative=python39.PyNumber_Negative
+  PyNumber_Or=python39.PyNumber_Or
+  PyNumber_Positive=python39.PyNumber_Positive
+  PyNumber_Power=python39.PyNumber_Power
+  PyNumber_Remainder=python39.PyNumber_Remainder
+  PyNumber_Rshift=python39.PyNumber_Rshift
+  PyNumber_Subtract=python39.PyNumber_Subtract
+  PyNumber_ToBase=python39.PyNumber_ToBase
+  PyNumber_TrueDivide=python39.PyNumber_TrueDivide
+  PyNumber_Xor=python39.PyNumber_Xor
+  PyODictItems_Type=python39.PyODictItems_Type DATA
+  PyODictIter_Type=python39.PyODictIter_Type DATA
+  PyODictKeys_Type=python39.PyODictKeys_Type DATA
+  PyODictValues_Type=python39.PyODictValues_Type DATA
+  PyODict_DelItem=python39.PyODict_DelItem
+  PyODict_New=python39.PyODict_New
+  PyODict_SetItem=python39.PyODict_SetItem
+  PyODict_Type=python39.PyODict_Type DATA
+  PyOS_AfterFork=python39.PyOS_AfterFork
+  PyOS_CheckStack=python39.PyOS_CheckStack
+  PyOS_FSPath=python39.PyOS_FSPath
+  PyOS_InitInterrupts=python39.PyOS_InitInterrupts
+  PyOS_InputHook=python39.PyOS_InputHook DATA
+  PyOS_InterruptOccurred=python39.PyOS_InterruptOccurred
+  PyOS_ReadlineFunctionPointer=python39.PyOS_ReadlineFunctionPointer DATA
+  PyOS_double_to_string=python39.PyOS_double_to_string
+  PyOS_getsig=python39.PyOS_getsig
+  PyOS_mystricmp=python39.PyOS_mystricmp
+  PyOS_mystrnicmp=python39.PyOS_mystrnicmp
+  PyOS_setsig=python39.PyOS_setsig
+  PyOS_snprintf=python39.PyOS_snprintf
+  PyOS_string_to_double=python39.PyOS_string_to_double
+  PyOS_strtol=python39.PyOS_strtol
+  PyOS_strtoul=python39.PyOS_strtoul
+  PyOS_vsnprintf=python39.PyOS_vsnprintf
+  PyObject_ASCII=python39.PyObject_ASCII
+  PyObject_AsCharBuffer=python39.PyObject_AsCharBuffer
+  PyObject_AsFileDescriptor=python39.PyObject_AsFileDescriptor
+  PyObject_AsReadBuffer=python39.PyObject_AsReadBuffer
+  PyObject_AsWriteBuffer=python39.PyObject_AsWriteBuffer
+  PyObject_Bytes=python39.PyObject_Bytes
+  PyObject_Call=python39.PyObject_Call
+  PyObject_CallFunction=python39.PyObject_CallFunction
+  PyObject_CallFunctionObjArgs=python39.PyObject_CallFunctionObjArgs
+  PyObject_CallMethod=python39.PyObject_CallMethod
+  PyObject_CallMethodObjArgs=python39.PyObject_CallMethodObjArgs
+  PyObject_CallObject=python39.PyObject_CallObject
+  PyObject_Calloc=python39.PyObject_Calloc
+  PyObject_CheckReadBuffer=python39.PyObject_CheckReadBuffer
+  PyObject_ClearWeakRefs=python39.PyObject_ClearWeakRefs
+  PyObject_DelItem=python39.PyObject_DelItem
+  PyObject_DelItemString=python39.PyObject_DelItemString
+  PyObject_Dir=python39.PyObject_Dir
+  PyObject_Format=python39.PyObject_Format
+  PyObject_Free=python39.PyObject_Free
+  PyObject_GC_Del=python39.PyObject_GC_Del
+  PyObject_GC_Track=python39.PyObject_GC_Track
+  PyObject_GC_UnTrack=python39.PyObject_GC_UnTrack
+  PyObject_GenericGetAttr=python39.PyObject_GenericGetAttr
+  PyObject_GenericSetAttr=python39.PyObject_GenericSetAttr
+  PyObject_GenericSetDict=python39.PyObject_GenericSetDict
+  PyObject_GetAttr=python39.PyObject_GetAttr
+  PyObject_GetAttrString=python39.PyObject_GetAttrString
+  PyObject_GetItem=python39.PyObject_GetItem
+  PyObject_GetIter=python39.PyObject_GetIter
+  PyObject_HasAttr=python39.PyObject_HasAttr
+  PyObject_HasAttrString=python39.PyObject_HasAttrString
+  PyObject_Hash=python39.PyObject_Hash
+  PyObject_HashNotImplemented=python39.PyObject_HashNotImplemented
+  PyObject_Init=python39.PyObject_Init
+  PyObject_InitVar=python39.PyObject_InitVar
+  PyObject_IsInstance=python39.PyObject_IsInstance
+  PyObject_IsSubclass=python39.PyObject_IsSubclass
+  PyObject_IsTrue=python39.PyObject_IsTrue
+  PyObject_Length=python39.PyObject_Length
+  PyObject_Malloc=python39.PyObject_Malloc
+  PyObject_Not=python39.PyObject_Not
+  PyObject_Realloc=python39.PyObject_Realloc
+  PyObject_Repr=python39.PyObject_Repr
+  PyObject_RichCompare=python39.PyObject_RichCompare
+  PyObject_RichCompareBool=python39.PyObject_RichCompareBool
+  PyObject_SelfIter=python39.PyObject_SelfIter
+  PyObject_SetAttr=python39.PyObject_SetAttr
+  PyObject_SetAttrString=python39.PyObject_SetAttrString
+  PyObject_SetItem=python39.PyObject_SetItem
+  PyObject_Size=python39.PyObject_Size
+  PyObject_Str=python39.PyObject_Str
+  PyObject_Type=python39.PyObject_Type
+  PyParser_SimpleParseFileFlags=python39.PyParser_SimpleParseFileFlags
+  PyParser_SimpleParseStringFlags=python39.PyParser_SimpleParseStringFlags
+  PyParser_SimpleParseStringFlagsFilename=python39.PyParser_SimpleParseStringFlagsFilename
+  PyProperty_Type=python39.PyProperty_Type DATA
+  PyRangeIter_Type=python39.PyRangeIter_Type DATA
+  PyRange_Type=python39.PyRange_Type DATA
+  PyReversed_Type=python39.PyReversed_Type DATA
+  PySeqIter_New=python39.PySeqIter_New
+  PySeqIter_Type=python39.PySeqIter_Type DATA
+  PySequence_Check=python39.PySequence_Check
+  PySequence_Concat=python39.PySequence_Concat
+  PySequence_Contains=python39.PySequence_Contains
+  PySequence_Count=python39.PySequence_Count
+  PySequence_DelItem=python39.PySequence_DelItem
+  PySequence_DelSlice=python39.PySequence_DelSlice
+  PySequence_Fast=python39.PySequence_Fast
+  PySequence_GetItem=python39.PySequence_GetItem
+  PySequence_GetSlice=python39.PySequence_GetSlice
+  PySequence_In=python39.PySequence_In
+  PySequence_InPlaceConcat=python39.PySequence_InPlaceConcat
+  PySequence_InPlaceRepeat=python39.PySequence_InPlaceRepeat
+  PySequence_Index=python39.PySequence_Index
+  PySequence_Length=python39.PySequence_Length
+  PySequence_List=python39.PySequence_List
+  PySequence_Repeat=python39.PySequence_Repeat
+  PySequence_SetItem=python39.PySequence_SetItem
+  PySequence_SetSlice=python39.PySequence_SetSlice
+  PySequence_Size=python39.PySequence_Size
+  PySequence_Tuple=python39.PySequence_Tuple
+  PySetIter_Type=python39.PySetIter_Type DATA
+  PySet_Add=python39.PySet_Add
+  PySet_Clear=python39.PySet_Clear
+  PySet_Contains=python39.PySet_Contains
+  PySet_Discard=python39.PySet_Discard
+  PySet_New=python39.PySet_New
+  PySet_Pop=python39.PySet_Pop
+  PySet_Size=python39.PySet_Size
+  PySet_Type=python39.PySet_Type DATA
+  PySlice_AdjustIndices=python39.PySlice_AdjustIndices
+  PySlice_GetIndices=python39.PySlice_GetIndices
+  PySlice_GetIndicesEx=python39.PySlice_GetIndicesEx
+  PySlice_New=python39.PySlice_New
+  PySlice_Type=python39.PySlice_Type DATA
+  PySlice_Unpack=python39.PySlice_Unpack
+  PySortWrapper_Type=python39.PySortWrapper_Type DATA
+  PyInterpreterState_GetID=python39.PyInterpreterState_GetID
+  PyState_AddModule=python39.PyState_AddModule
+  PyState_FindModule=python39.PyState_FindModule
+  PyState_RemoveModule=python39.PyState_RemoveModule
+  PyStructSequence_GetItem=python39.PyStructSequence_GetItem
+  PyStructSequence_New=python39.PyStructSequence_New
+  PyStructSequence_NewType=python39.PyStructSequence_NewType
+  PyStructSequence_SetItem=python39.PyStructSequence_SetItem
+  PySuper_Type=python39.PySuper_Type DATA
+  PySys_AddWarnOption=python39.PySys_AddWarnOption
+  PySys_AddWarnOptionUnicode=python39.PySys_AddWarnOptionUnicode
+  PySys_AddXOption=python39.PySys_AddXOption
+  PySys_FormatStderr=python39.PySys_FormatStderr
+  PySys_FormatStdout=python39.PySys_FormatStdout
+  PySys_GetObject=python39.PySys_GetObject
+  PySys_GetXOptions=python39.PySys_GetXOptions
+  PySys_HasWarnOptions=python39.PySys_HasWarnOptions
+  PySys_ResetWarnOptions=python39.PySys_ResetWarnOptions
+  PySys_SetArgv=python39.PySys_SetArgv
+  PySys_SetArgvEx=python39.PySys_SetArgvEx
+  PySys_SetObject=python39.PySys_SetObject
+  PySys_SetPath=python39.PySys_SetPath
+  PySys_WriteStderr=python39.PySys_WriteStderr
+  PySys_WriteStdout=python39.PySys_WriteStdout
+  PyThreadState_Clear=python39.PyThreadState_Clear
+  PyThreadState_Delete=python39.PyThreadState_Delete
+  PyThreadState_DeleteCurrent=python39.PyThreadState_DeleteCurrent
+  PyThreadState_Get=python39.PyThreadState_Get
+  PyThreadState_GetDict=python39.PyThreadState_GetDict
+  PyThreadState_New=python39.PyThreadState_New
+  PyThreadState_SetAsyncExc=python39.PyThreadState_SetAsyncExc
+  PyThreadState_Swap=python39.PyThreadState_Swap
+  PyThread_tss_alloc=python39.PyThread_tss_alloc
+  PyThread_tss_create=python39.PyThread_tss_create
+  PyThread_tss_delete=python39.PyThread_tss_delete
+  PyThread_tss_free=python39.PyThread_tss_free
+  PyThread_tss_get=python39.PyThread_tss_get
+  PyThread_tss_is_created=python39.PyThread_tss_is_created
+  PyThread_tss_set=python39.PyThread_tss_set
+  PyTraceBack_Here=python39.PyTraceBack_Here
+  PyTraceBack_Print=python39.PyTraceBack_Print
+  PyTraceBack_Type=python39.PyTraceBack_Type DATA
+  PyTupleIter_Type=python39.PyTupleIter_Type DATA
+  PyTuple_GetItem=python39.PyTuple_GetItem
+  PyTuple_GetSlice=python39.PyTuple_GetSlice
+  PyTuple_New=python39.PyTuple_New
+  PyTuple_Pack=python39.PyTuple_Pack
+  PyTuple_SetItem=python39.PyTuple_SetItem
+  PyTuple_Size=python39.PyTuple_Size
+  PyTuple_Type=python39.PyTuple_Type DATA
+  PyType_ClearCache=python39.PyType_ClearCache
+  PyType_FromSpec=python39.PyType_FromSpec
+  PyType_FromSpecWithBases=python39.PyType_FromSpecWithBases
+  PyType_GenericAlloc=python39.PyType_GenericAlloc
+  PyType_GenericNew=python39.PyType_GenericNew
+  PyType_GetFlags=python39.PyType_GetFlags
+  PyType_GetSlot=python39.PyType_GetSlot
+  PyType_IsSubtype=python39.PyType_IsSubtype
+  PyType_Modified=python39.PyType_Modified
+  PyType_Ready=python39.PyType_Ready
+  PyType_Type=python39.PyType_Type DATA
+  PyUnicodeDecodeError_Create=python39.PyUnicodeDecodeError_Create
+  PyUnicodeDecodeError_GetEncoding=python39.PyUnicodeDecodeError_GetEncoding
+  PyUnicodeDecodeError_GetEnd=python39.PyUnicodeDecodeError_GetEnd
+  PyUnicodeDecodeError_GetObject=python39.PyUnicodeDecodeError_GetObject
+  PyUnicodeDecodeError_GetReason=python39.PyUnicodeDecodeError_GetReason
+  PyUnicodeDecodeError_GetStart=python39.PyUnicodeDecodeError_GetStart
+  PyUnicodeDecodeError_SetEnd=python39.PyUnicodeDecodeError_SetEnd
+  PyUnicodeDecodeError_SetReason=python39.PyUnicodeDecodeError_SetReason
+  PyUnicodeDecodeError_SetStart=python39.PyUnicodeDecodeError_SetStart
+  PyUnicodeEncodeError_GetEncoding=python39.PyUnicodeEncodeError_GetEncoding
+  PyUnicodeEncodeError_GetEnd=python39.PyUnicodeEncodeError_GetEnd
+  PyUnicodeEncodeError_GetObject=python39.PyUnicodeEncodeError_GetObject
+  PyUnicodeEncodeError_GetReason=python39.PyUnicodeEncodeError_GetReason
+  PyUnicodeEncodeError_GetStart=python39.PyUnicodeEncodeError_GetStart
+  PyUnicodeEncodeError_SetEnd=python39.PyUnicodeEncodeError_SetEnd
+  PyUnicodeEncodeError_SetReason=python39.PyUnicodeEncodeError_SetReason
+  PyUnicodeEncodeError_SetStart=python39.PyUnicodeEncodeError_SetStart
+  PyUnicodeIter_Type=python39.PyUnicodeIter_Type DATA
+  PyUnicodeTranslateError_GetEnd=python39.PyUnicodeTranslateError_GetEnd
+  PyUnicodeTranslateError_GetObject=python39.PyUnicodeTranslateError_GetObject
+  PyUnicodeTranslateError_GetReason=python39.PyUnicodeTranslateError_GetReason
+  PyUnicodeTranslateError_GetStart=python39.PyUnicodeTranslateError_GetStart
+  PyUnicodeTranslateError_SetEnd=python39.PyUnicodeTranslateError_SetEnd
+  PyUnicodeTranslateError_SetReason=python39.PyUnicodeTranslateError_SetReason
+  PyUnicodeTranslateError_SetStart=python39.PyUnicodeTranslateError_SetStart
+  PyUnicode_Append=python39.PyUnicode_Append
+  PyUnicode_AppendAndDel=python39.PyUnicode_AppendAndDel
+  PyUnicode_AsASCIIString=python39.PyUnicode_AsASCIIString
+  PyUnicode_AsCharmapString=python39.PyUnicode_AsCharmapString
+  PyUnicode_AsDecodedObject=python39.PyUnicode_AsDecodedObject
+  PyUnicode_AsDecodedUnicode=python39.PyUnicode_AsDecodedUnicode
+  PyUnicode_AsEncodedObject=python39.PyUnicode_AsEncodedObject
+  PyUnicode_AsEncodedString=python39.PyUnicode_AsEncodedString
+  PyUnicode_AsEncodedUnicode=python39.PyUnicode_AsEncodedUnicode
+  PyUnicode_AsLatin1String=python39.PyUnicode_AsLatin1String
+  PyUnicode_AsMBCSString=python39.PyUnicode_AsMBCSString
+  PyUnicode_AsRawUnicodeEscapeString=python39.PyUnicode_AsRawUnicodeEscapeString
+  PyUnicode_AsUCS4=python39.PyUnicode_AsUCS4
+  PyUnicode_AsUCS4Copy=python39.PyUnicode_AsUCS4Copy
+  PyUnicode_AsUTF16String=python39.PyUnicode_AsUTF16String
+  PyUnicode_AsUTF32String=python39.PyUnicode_AsUTF32String
+  PyUnicode_AsUTF8String=python39.PyUnicode_AsUTF8String
+  PyUnicode_AsUnicodeEscapeString=python39.PyUnicode_AsUnicodeEscapeString
+  PyUnicode_AsWideChar=python39.PyUnicode_AsWideChar
+  PyUnicode_AsWideCharString=python39.PyUnicode_AsWideCharString
+  PyUnicode_BuildEncodingMap=python39.PyUnicode_BuildEncodingMap
+  PyUnicode_Compare=python39.PyUnicode_Compare
+  PyUnicode_CompareWithASCIIString=python39.PyUnicode_CompareWithASCIIString
+  PyUnicode_Concat=python39.PyUnicode_Concat
+  PyUnicode_Contains=python39.PyUnicode_Contains
+  PyUnicode_Count=python39.PyUnicode_Count
+  PyUnicode_Decode=python39.PyUnicode_Decode
+  PyUnicode_DecodeASCII=python39.PyUnicode_DecodeASCII
+  PyUnicode_DecodeCharmap=python39.PyUnicode_DecodeCharmap
+  PyUnicode_DecodeCodePageStateful=python39.PyUnicode_DecodeCodePageStateful
+  PyUnicode_DecodeFSDefault=python39.PyUnicode_DecodeFSDefault
+  PyUnicode_DecodeFSDefaultAndSize=python39.PyUnicode_DecodeFSDefaultAndSize
+  PyUnicode_DecodeLatin1=python39.PyUnicode_DecodeLatin1
+  PyUnicode_DecodeLocale=python39.PyUnicode_DecodeLocale
+  PyUnicode_DecodeLocaleAndSize=python39.PyUnicode_DecodeLocaleAndSize
+  PyUnicode_DecodeMBCS=python39.PyUnicode_DecodeMBCS
+  PyUnicode_DecodeMBCSStateful=python39.PyUnicode_DecodeMBCSStateful
+  PyUnicode_DecodeRawUnicodeEscape=python39.PyUnicode_DecodeRawUnicodeEscape
+  PyUnicode_DecodeUTF16=python39.PyUnicode_DecodeUTF16
+  PyUnicode_DecodeUTF16Stateful=python39.PyUnicode_DecodeUTF16Stateful
+  PyUnicode_DecodeUTF32=python39.PyUnicode_DecodeUTF32
+  PyUnicode_DecodeUTF32Stateful=python39.PyUnicode_DecodeUTF32Stateful
+  PyUnicode_DecodeUTF7=python39.PyUnicode_DecodeUTF7
+  PyUnicode_DecodeUTF7Stateful=python39.PyUnicode_DecodeUTF7Stateful
+  PyUnicode_DecodeUTF8=python39.PyUnicode_DecodeUTF8
+  PyUnicode_DecodeUTF8Stateful=python39.PyUnicode_DecodeUTF8Stateful
+  PyUnicode_DecodeUnicodeEscape=python39.PyUnicode_DecodeUnicodeEscape
+  PyUnicode_EncodeCodePage=python39.PyUnicode_EncodeCodePage
+  PyUnicode_EncodeFSDefault=python39.PyUnicode_EncodeFSDefault
+  PyUnicode_EncodeLocale=python39.PyUnicode_EncodeLocale
+  PyUnicode_FSConverter=python39.PyUnicode_FSConverter
+  PyUnicode_FSDecoder=python39.PyUnicode_FSDecoder
+  PyUnicode_Find=python39.PyUnicode_Find
+  PyUnicode_FindChar=python39.PyUnicode_FindChar
+  PyUnicode_Format=python39.PyUnicode_Format
+  PyUnicode_FromEncodedObject=python39.PyUnicode_FromEncodedObject
+  PyUnicode_FromFormat=python39.PyUnicode_FromFormat
+  PyUnicode_FromFormatV=python39.PyUnicode_FromFormatV
+  PyUnicode_FromObject=python39.PyUnicode_FromObject
+  PyUnicode_FromOrdinal=python39.PyUnicode_FromOrdinal
+  PyUnicode_FromString=python39.PyUnicode_FromString
+  PyUnicode_FromStringAndSize=python39.PyUnicode_FromStringAndSize
+  PyUnicode_FromWideChar=python39.PyUnicode_FromWideChar
+  PyUnicode_GetDefaultEncoding=python39.PyUnicode_GetDefaultEncoding
+  PyUnicode_GetLength=python39.PyUnicode_GetLength
+  PyUnicode_GetSize=python39.PyUnicode_GetSize
+  PyUnicode_InternFromString=python39.PyUnicode_InternFromString
+  PyUnicode_InternImmortal=python39.PyUnicode_InternImmortal
+  PyUnicode_InternInPlace=python39.PyUnicode_InternInPlace
+  PyUnicode_IsIdentifier=python39.PyUnicode_IsIdentifier
+  PyUnicode_Join=python39.PyUnicode_Join
+  PyUnicode_Partition=python39.PyUnicode_Partition
+  PyUnicode_RPartition=python39.PyUnicode_RPartition
+  PyUnicode_RSplit=python39.PyUnicode_RSplit
+  PyUnicode_ReadChar=python39.PyUnicode_ReadChar
+  PyUnicode_Replace=python39.PyUnicode_Replace
+  PyUnicode_Resize=python39.PyUnicode_Resize
+  PyUnicode_RichCompare=python39.PyUnicode_RichCompare
+  PyUnicode_Split=python39.PyUnicode_Split
+  PyUnicode_Splitlines=python39.PyUnicode_Splitlines
+  PyUnicode_Substring=python39.PyUnicode_Substring
+  PyUnicode_Tailmatch=python39.PyUnicode_Tailmatch
+  PyUnicode_Translate=python39.PyUnicode_Translate
+  PyUnicode_Type=python39.PyUnicode_Type DATA
+  PyUnicode_WriteChar=python39.PyUnicode_WriteChar
+  PyWeakref_GetObject=python39.PyWeakref_GetObject
+  PyWeakref_NewProxy=python39.PyWeakref_NewProxy
+  PyWeakref_NewRef=python39.PyWeakref_NewRef
+  PyWrapperDescr_Type=python39.PyWrapperDescr_Type DATA
+  PyWrapper_New=python39.PyWrapper_New
+  PyZip_Type=python39.PyZip_Type DATA
+  Py_AddPendingCall=python39.Py_AddPendingCall
+  Py_AtExit=python39.Py_AtExit
+  Py_BuildValue=python39.Py_BuildValue
+  Py_CompileString=python39.Py_CompileString
+  Py_DecRef=python39.Py_DecRef
+  Py_DecodeLocale=python39.Py_DecodeLocale
+  Py_EncodeLocale=python39.Py_EncodeLocale
+  Py_EndInterpreter=python39.Py_EndInterpreter
+  Py_EnterRecursiveCall=python39.Py_EnterRecursiveCall
+  Py_Exit=python39.Py_Exit
+  Py_FatalError=python39.Py_FatalError
+  Py_FileSystemDefaultEncodeErrors=python39.Py_FileSystemDefaultEncodeErrors DATA
+  Py_FileSystemDefaultEncoding=python39.Py_FileSystemDefaultEncoding DATA
+  Py_Finalize=python39.Py_Finalize
+  Py_FinalizeEx=python39.Py_FinalizeEx
+  Py_GenericAlias=python39.Py_GenericAlias
+  Py_GenericAliasType=python39.Py_GenericAliasType
+  Py_GetArgcArgv=python39.Py_GetArgcArgv
+  Py_GetBuildInfo=python39.Py_GetBuildInfo
+  Py_GetCompiler=python39.Py_GetCompiler
+  Py_GetCopyright=python39.Py_GetCopyright
+  Py_GetExecPrefix=python39.Py_GetExecPrefix
+  Py_GetPath=python39.Py_GetPath
+  Py_GetPlatform=python39.Py_GetPlatform
+  Py_GetPrefix=python39.Py_GetPrefix
+  Py_GetProgramFullPath=python39.Py_GetProgramFullPath
+  Py_GetProgramName=python39.Py_GetProgramName
+  Py_GetPythonHome=python39.Py_GetPythonHome
+  Py_GetRecursionLimit=python39.Py_GetRecursionLimit
+  Py_GetVersion=python39.Py_GetVersion
+  Py_HasFileSystemDefaultEncoding=python39.Py_HasFileSystemDefaultEncoding DATA
+  Py_IncRef=python39.Py_IncRef
+  Py_Initialize=python39.Py_Initialize
+  Py_InitializeEx=python39.Py_InitializeEx
+  Py_IsInitialized=python39.Py_IsInitialized
+  Py_LeaveRecursiveCall=python39.Py_LeaveRecursiveCall
+  Py_Main=python39.Py_Main
+  Py_MakePendingCalls=python39.Py_MakePendingCalls
+  Py_NewInterpreter=python39.Py_NewInterpreter
+  Py_ReprEnter=python39.Py_ReprEnter
+  Py_ReprLeave=python39.Py_ReprLeave
+  Py_SetPath=python39.Py_SetPath
+  Py_SetProgramName=python39.Py_SetProgramName
+  Py_SetPythonHome=python39.Py_SetPythonHome
+  Py_SetRecursionLimit=python39.Py_SetRecursionLimit
+  Py_SymtableString=python39.Py_SymtableString
+  Py_UTF8Mode=python39.Py_UTF8Mode DATA
+  Py_VaBuildValue=python39.Py_VaBuildValue
+  _PyArg_ParseTupleAndKeywords_SizeT=python39._PyArg_ParseTupleAndKeywords_SizeT
+  _PyArg_ParseTuple_SizeT=python39._PyArg_ParseTuple_SizeT
+  _PyArg_Parse_SizeT=python39._PyArg_Parse_SizeT
+  _PyArg_VaParseTupleAndKeywords_SizeT=python39._PyArg_VaParseTupleAndKeywords_SizeT
+  _PyArg_VaParse_SizeT=python39._PyArg_VaParse_SizeT
+  _PyErr_BadInternalCall=python39._PyErr_BadInternalCall
+  _PyObject_CallFunction_SizeT=python39._PyObject_CallFunction_SizeT
+  _PyObject_CallMethod_SizeT=python39._PyObject_CallMethod_SizeT
+  _PyObject_GC_Malloc=python39._PyObject_GC_Malloc
+  _PyObject_GC_New=python39._PyObject_GC_New
+  _PyObject_GC_NewVar=python39._PyObject_GC_NewVar
+  _PyObject_GC_Resize=python39._PyObject_GC_Resize
+  _PyObject_New=python39._PyObject_New
+  _PyObject_NewVar=python39._PyObject_NewVar
+  _PyState_AddModule=python39._PyState_AddModule
+  _PyThreadState_Init=python39._PyThreadState_Init
+  _PyThreadState_Prealloc=python39._PyThreadState_Prealloc
+  _PyTrash_delete_later=python39._PyTrash_delete_later DATA
+  _PyTrash_delete_nesting=python39._PyTrash_delete_nesting DATA
+  _PyTrash_deposit_object=python39._PyTrash_deposit_object
+  _PyTrash_destroy_chain=python39._PyTrash_destroy_chain
+  _PyTrash_thread_deposit_object=python39._PyTrash_thread_deposit_object
+  _PyTrash_thread_destroy_chain=python39._PyTrash_thread_destroy_chain
+  _PyWeakref_CallableProxyType=python39._PyWeakref_CallableProxyType DATA
+  _PyWeakref_ProxyType=python39._PyWeakref_ProxyType DATA
+  _PyWeakref_RefType=python39._PyWeakref_RefType DATA
+  _Py_BuildValue_SizeT=python39._Py_BuildValue_SizeT
+  _Py_CheckRecursionLimit=python39._Py_CheckRecursionLimit DATA
+  _Py_CheckRecursiveCall=python39._Py_CheckRecursiveCall
+  _Py_Dealloc=python39._Py_Dealloc
+  _Py_EllipsisObject=python39._Py_EllipsisObject DATA
+  _Py_FalseStruct=python39._Py_FalseStruct DATA
+  _Py_NoneStruct=python39._Py_NoneStruct DATA
+  _Py_NotImplementedStruct=python39._Py_NotImplementedStruct DATA
+  _Py_SwappedOp=python39._Py_SwappedOp DATA
+  _Py_TrueStruct=python39._Py_TrueStruct DATA
+  _Py_VaBuildValue_SizeT=python39._Py_VaBuildValue_SizeT
diff --git a/PC/python_nt.rc b/PC/python_nt.rc
index fac6105..b5fb58f 100644
--- a/PC/python_nt.rc
+++ b/PC/python_nt.rc
@@ -7,12 +7,6 @@
 #include <winuser.h>
 2 RT_MANIFEST "python.manifest"
 
-// String Tables
-STRINGTABLE DISCARDABLE
-BEGIN
-    1000,   MS_DLL_ID
-END
-
 /////////////////////////////////////////////////////////////////////////////
 //
 // Version
@@ -40,7 +34,7 @@
             VALUE "FileVersion", PYTHON_VERSION
             VALUE "InternalName", "Python DLL\0"
             VALUE "LegalCopyright", PYTHON_COPYRIGHT "\0"
-            VALUE "OriginalFilename", PYTHON_DLL_NAME "\0"
+            VALUE "OriginalFilename", ORIGINAL_FILENAME "\0"
             VALUE "ProductName", "Python\0"
             VALUE "ProductVersion", PYTHON_VERSION
         END
diff --git a/PC/python_ver_rc.h b/PC/python_ver_rc.h
index d725a9b..060aecd 100644
--- a/PC/python_ver_rc.h
+++ b/PC/python_ver_rc.h
@@ -10,7 +10,6 @@
 #define MS_WINDOWS
 #include "modsupport.h"
 #include "patchlevel.h"
-#include <pythonnt_rc.h>
 #ifdef _DEBUG
 #   define PYTHON_DEBUG_EXT "_d"
 #else
diff --git a/PC/store_info.txt b/PC/store_info.txt
index 89f3699..8c20412 100644
--- a/PC/store_info.txt
+++ b/PC/store_info.txt
@@ -60,9 +60,19 @@
 We keep it here for convenience and to allow it to be updated via pull
 requests.
 
+When submitting a new app, the HeadlessAppBypass waiver will be needed.
+To request this, send an email to PartnerOps@microsoft.com with the app
+ID (12 character token available from the dashboard). The waiver needs
+to be applied *before* uploading the package (as of November 2019).
+
+Ensure that the new app is named "Python.3.X", where X is the minor
+version of the release. If the name provided initially does not match
+the name used when building the package, the upload will fail. The
+display name shown to users can be set later.
+
 ## Title
 
-Python 3.8
+Python 3.9
 
 ## Short Title
 
@@ -78,7 +88,7 @@
 
 ## ShortDescription
 
-The Python 3.8 interpreter and runtime.
+The Python 3.9 interpreter and runtime.
 
 ## Copyright Trademark Information
 
@@ -86,38 +96,38 @@
 
 ## Additional License Terms
 
-Visit https://docs.python.org/3.8/license.html for latest license terms.
+Visit https://docs.python.org/3.9/license.html for latest license terms.
 
-PSF LICENSE AGREEMENT FOR PYTHON 3.8
+PSF LICENSE AGREEMENT FOR PYTHON 3.9
 
 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and
    the Individual or Organization ("Licensee") accessing and otherwise using Python
-   3.8 software in source or binary form and its associated documentation.
+   3.9 software in source or binary form and its associated documentation.
 
 2. Subject to the terms and conditions of this License Agreement, PSF hereby
    grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
    analyze, test, perform and/or display publicly, prepare derivative works,
-   distribute, and otherwise use Python 3.8 alone or in any derivative
+   distribute, and otherwise use Python 3.9 alone or in any derivative
    version, provided, however, that PSF's License Agreement and PSF's notice of
    copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights
-   Reserved" are retained in Python 3.8 alone or in any derivative version
+   Reserved" are retained in Python 3.9 alone or in any derivative version
    prepared by Licensee.
 
 3. In the event Licensee prepares a derivative work that is based on or
-   incorporates Python 3.8 or any part thereof, and wants to make the
+   incorporates Python 3.9 or any part thereof, and wants to make the
    derivative work available to others as provided herein, then Licensee hereby
    agrees to include in any such work a brief summary of the changes made to Python
-   3.8.
+   3.9.
 
-4. PSF is making Python 3.8 available to Licensee on an "AS IS" basis.
+4. PSF is making Python 3.9 available to Licensee on an "AS IS" basis.
    PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED.  BY WAY OF
    EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
    WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
-   USE OF PYTHON 3.8 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+   USE OF PYTHON 3.9 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
 
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.8
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.9
    FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
-   MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.8, OR ANY DERIVATIVE
+   MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.9, OR ANY DERIVATIVE
    THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
 
 6. This License Agreement will automatically terminate upon a material breach of
@@ -129,7 +139,7 @@
    trademark sense to endorse or promote products or services of Licensee, or any
    third party.
 
-8. By copying, installing or otherwise using Python 3.8, Licensee agrees
+8. By copying, installing or otherwise using Python 3.9, Licensee agrees
    to be bound by the terms and conditions of this License Agreement.
 
 ## Features
diff --git a/PC/winreg.c b/PC/winreg.c
index caad18e..1305b70 100644
--- a/PC/winreg.c
+++ b/PC/winreg.c
@@ -14,8 +14,8 @@
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "structmember.h"
-#include "windows.h"
+#include "structmember.h"         // PyMemberDef
+#include <windows.h>
 
 static BOOL PyHKEY_AsHKEY(PyObject *ob, HKEY *pRes, BOOL bNoneOK);
 static BOOL clinic_HKEY_converter(PyObject *ob, void *p);
@@ -390,7 +390,7 @@
 PyObject *
 PyHKEY_New(HKEY hInit)
 {
-    PyHKEYObject *key = PyObject_NEW(PyHKEYObject, &PyHKEY_Type);
+    PyHKEYObject *key = PyObject_New(PyHKEYObject, &PyHKEY_Type);
     if (key)
         key->hkey = hInit;
     return (PyObject *)key;
diff --git a/PCbuild/_asyncio.vcxproj.filters b/PCbuild/_asyncio.vcxproj.filters
index 10a186c..a09ae92 100644
--- a/PCbuild/_asyncio.vcxproj.filters
+++ b/PCbuild/_asyncio.vcxproj.filters
@@ -1,16 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ResourceCompile Include="..\PC\python_nt.rc" />
-  </ItemGroup>
-  <ItemGroup>
     <Filter Include="Source Files">
       <UniqueIdentifier>{2422278e-eeeb-4241-8182-433e2bc5a7fc}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{41f1cd52-b682-46aa-a7fd-7bdf81a18010}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_asynciomodule.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_bz2.vcxproj.filters b/PCbuild/_bz2.vcxproj.filters
index eac64dd..7c0b516 100644
--- a/PCbuild/_bz2.vcxproj.filters
+++ b/PCbuild/_bz2.vcxproj.filters
@@ -4,10 +4,16 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{f53a859d-dad2-4d5b-ae41-f28d8b571f5a}</UniqueIdentifier>
     </Filter>
-    <Filter Include="bzip2 1.0.6 Header Files">
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{b90c3cee-7700-4e87-bf85-0801866e8d0d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files">
       <UniqueIdentifier>{7e0bed05-ae33-43b7-8797-656455bbb7f3}</UniqueIdentifier>
     </Filter>
-    <Filter Include="bzip2 1.0.6 Source Files">
+    <Filter Include="Header Files\bzip2">
+      <UniqueIdentifier>{b53f67d8-fdf0-4e10-a987-e44475ff434a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\bzip2">
       <UniqueIdentifier>{ed574b89-6983-4cdf-9f98-fe7048d9e89c}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
@@ -16,33 +22,38 @@
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\blocksort.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\bzlib.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\compress.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\crctable.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\decompress.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\huffman.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
     <ClCompile Include="$(bz2Dir)\randtable.c">
-      <Filter>bzip2 1.0.6 Source Files</Filter>
+      <Filter>Source Files\bzip2</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="$(bz2Dir)\bzlib.h">
-      <Filter>bzip2 1.0.6 Header Files</Filter>
-    </ClInclude>
     <ClInclude Include="$(bz2Dir)\bzlib_private.h">
-      <Filter>bzip2 1.0.6 Header Files</Filter>
+      <Filter>Header Files\bzip2</Filter>
+    </ClInclude>
+    <ClInclude Include="$(bz2Dir)\bzlib.h">
+      <Filter>Header Files\bzip2</Filter>
     </ClInclude>
   </ItemGroup>
-</Project>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_ctypes.vcxproj.filters b/PCbuild/_ctypes.vcxproj.filters
index 3123286..118c4f0 100644
--- a/PCbuild/_ctypes.vcxproj.filters
+++ b/PCbuild/_ctypes.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{dbdea1f2-ad8b-44ca-b782-fcf65d91559b}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{31a37bb4-c384-41ff-9ec1-8ad98d482e22}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\_ctypes\ctypes.h">
@@ -37,6 +40,8 @@
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <ResourceCompile Include="..\PC\python_nt.rc" />
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_ctypes_test.vcxproj.filters b/PCbuild/_ctypes_test.vcxproj.filters
index c1e94ce..5174196 100644
--- a/PCbuild/_ctypes_test.vcxproj.filters
+++ b/PCbuild/_ctypes_test.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{38abc486-e143-49dc-8cf0-8aefab0e0d3d}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{5030ff8f-daf5-4bc8-b1dd-e8b59d34c511}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\_ctypes\_ctypes_test.h">
@@ -18,4 +21,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_decimal.vcxproj b/PCbuild/_decimal.vcxproj
index 465a7ad..4c71cdb 100644
--- a/PCbuild/_decimal.vcxproj
+++ b/PCbuild/_decimal.vcxproj
@@ -118,7 +118,6 @@
     <ClInclude Include="..\Modules\_decimal\libmpdec\typearith.h" />
     <ClInclude Include="..\Modules\_decimal\libmpdec\umodarith.h" />
     <ClInclude Include="..\Modules\_decimal\libmpdec\vccompat.h" />
-    <ClInclude Include="..\Modules\_decimal\libmpdec\vcstdint.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_decimal\_decimal.c" />
@@ -131,7 +130,7 @@
     <ClCompile Include="..\Modules\_decimal\libmpdec\fnt.c" />
     <ClCompile Include="..\Modules\_decimal\libmpdec\fourstep.c" />
     <ClCompile Include="..\Modules\_decimal\libmpdec\io.c" />
-    <ClCompile Include="..\Modules\_decimal\libmpdec\memory.c" />
+    <ClCompile Include="..\Modules\_decimal\libmpdec\mpalloc.c" />
     <ClCompile Include="..\Modules\_decimal\libmpdec\mpdecimal.c" />
     <ClCompile Include="..\Modules\_decimal\libmpdec\numbertheory.c" />
     <ClCompile Include="..\Modules\_decimal\libmpdec\sixstep.c" />
diff --git a/PCbuild/_decimal.vcxproj.filters b/PCbuild/_decimal.vcxproj.filters
index 7e19aa2..0cbd3d0 100644
--- a/PCbuild/_decimal.vcxproj.filters
+++ b/PCbuild/_decimal.vcxproj.filters
@@ -7,58 +7,64 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{138089f8-faba-494f-b6ed-051f31fbaf2d}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{632b24a3-0844-4e57-ad34-b0e4cef886dd}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\libmpdec">
+      <UniqueIdentifier>{322d127c-1105-4a31-aed2-e29cdececc77}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\libmpdec">
+      <UniqueIdentifier>{780c3b7a-7817-4e89-a2f2-fc522f2c5966}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\basearith.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\bits.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\constants.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\convolute.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\crt.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\difradix2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
     <ClInclude Include="..\Modules\_decimal\docstrings.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\Modules\_decimal\libmpdec\basearith.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\_decimal\libmpdec\bits.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\_decimal\libmpdec\constants.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\_decimal\libmpdec\convolute.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\_decimal\libmpdec\crt.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Modules\_decimal\libmpdec\difradix2.h">
+      <Filter>Header Files\libmpdec</Filter>
+    </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\fnt.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\fourstep.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\mpdecimal.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\numbertheory.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\sixstep.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\transpose.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\typearith.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\umodarith.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\_decimal\libmpdec\vccompat.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Modules\_decimal\libmpdec\vcstdint.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\libmpdec</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
@@ -66,51 +72,56 @@
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\basearith.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\constants.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\context.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\convolute.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\crt.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\difradix2.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\fnt.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\fourstep.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\io.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_decimal\libmpdec\memory.c">
-      <Filter>Source Files</Filter>
+    <ClCompile Include="..\Modules\_decimal\libmpdec\mpalloc.c">
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\mpdecimal.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\numbertheory.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\sixstep.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\_decimal\libmpdec\transpose.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
     <CustomBuild Include="..\Modules\_decimal\libmpdec\vcdiv64.asm">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\libmpdec</Filter>
     </CustomBuild>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_elementtree.vcxproj.filters b/PCbuild/_elementtree.vcxproj.filters
index 6acdf35..bc14e31 100644
--- a/PCbuild/_elementtree.vcxproj.filters
+++ b/PCbuild/_elementtree.vcxproj.filters
@@ -7,52 +7,61 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{7b5335ad-059f-486f-85e4-f4757e26a9bf}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{37d3ef0a-1ea6-492d-bba7-b83865198caa}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\expat">
+      <UniqueIdentifier>{6099ed72-6668-4779-adb2-a2362e5da3b9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\expat">
+      <UniqueIdentifier>{f99990ba-cd06-40cc-8f28-d2d424ec13be}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\expat\ascii.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\asciitab.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\expat.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\expat_config.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\expat_external.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\iasciitab.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\internal.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\latin1tab.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\macconfig.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\nametab.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\pyexpatns.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\utf8tab.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\winconfig.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\xmlrole.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
     <ClInclude Include="..\Modules\expat\xmltok.h">
-      <Filter>Header Files</Filter>
+      <Filter>Header Files\expat</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
@@ -60,13 +69,18 @@
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\expat\xmlparse.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\expat</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\expat\xmlrole.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\expat</Filter>
     </ClCompile>
     <ClCompile Include="..\Modules\expat\xmltok.c">
-      <Filter>Source Files</Filter>
+      <Filter>Source Files\expat</Filter>
     </ClCompile>
   </ItemGroup>
-</Project>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_freeze_importlib.vcxproj.filters b/PCbuild/_freeze_importlib.vcxproj.filters
index ccad053..3ee9eb7 100644
--- a/PCbuild/_freeze_importlib.vcxproj.filters
+++ b/PCbuild/_freeze_importlib.vcxproj.filters
@@ -5,13 +5,8 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    <Filter Include="Python Files">
+      <UniqueIdentifier>{eb238244-ace1-48fc-97a4-16ff886f8642}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
   <ItemGroup>
@@ -23,5 +18,11 @@
     <None Include="..\Lib\importlib\_bootstrap.py">
       <Filter>Source Files</Filter>
     </None>
+    <None Include="..\Lib\zipimport.py">
+      <Filter>Python Files</Filter>
+    </None>
+    <None Include="..\Lib\importlib\_bootstrap_external.py">
+      <Filter>Python Files</Filter>
+    </None>
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_hashlib.vcxproj.filters b/PCbuild/_hashlib.vcxproj.filters
index a9d993e..7a0700c 100644
--- a/PCbuild/_hashlib.vcxproj.filters
+++ b/PCbuild/_hashlib.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{cc45963d-bd25-4eb8-bdba-a5507090bca4}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67630fa4-76e4-4035-bced-043a6df1e2e0}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_hashopenssl.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_lzma.vcxproj.filters b/PCbuild/_lzma.vcxproj.filters
index 0c5ed74..e23e539 100644
--- a/PCbuild/_lzma.vcxproj.filters
+++ b/PCbuild/_lzma.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{53e68eda-39fc-4336-a658-dc5f5d598760}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{9e5ecf81-2940-4dd5-af98-58e98810d030}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_lzmamodule.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_msi.vcxproj.filters b/PCbuild/_msi.vcxproj.filters
index 7dec52d..a94fb18 100644
--- a/PCbuild/_msi.vcxproj.filters
+++ b/PCbuild/_msi.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{bdef7710-e433-4ac0-84e0-14f34454bd3e}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{8513f324-7c13-4657-b463-5d686a8a5371}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\PC\_msi.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_multiprocessing.vcxproj.filters b/PCbuild/_multiprocessing.vcxproj.filters
index 78133ec..85caddb 100644
--- a/PCbuild/_multiprocessing.vcxproj.filters
+++ b/PCbuild/_multiprocessing.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{34615a62-f999-4659-83f5-19d17a644530}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{1dcf6347-2248-42e1-ab3c-1b19f4f6f647}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\_multiprocessing\multiprocessing.h">
@@ -21,4 +24,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_overlapped.vcxproj.filters b/PCbuild/_overlapped.vcxproj.filters
index 78de895..29a9b77 100644
--- a/PCbuild/_overlapped.vcxproj.filters
+++ b/PCbuild/_overlapped.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{6f67c8db-7de7-4714-a967-2b0d4bc71f2e}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{83fe502d-eca2-4505-b626-eddec9b6ea9f}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\overlapped.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_queue.vcxproj.filters b/PCbuild/_queue.vcxproj.filters
index 88b8082..ec48e9d 100644
--- a/PCbuild/_queue.vcxproj.filters
+++ b/PCbuild/_queue.vcxproj.filters
@@ -1,16 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ResourceCompile Include="..\PC\python_nt.rc" />
-  </ItemGroup>
-  <ItemGroup>
     <Filter Include="Source Files">
       <UniqueIdentifier>{c56a5dd3-7838-48e9-a781-855d8be7370f}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{bc5dc97e-11b8-435a-82e7-2ef3c9b44f5e}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_queuemodule.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_socket.vcxproj.filters b/PCbuild/_socket.vcxproj.filters
index 790ffa8..453175c 100644
--- a/PCbuild/_socket.vcxproj.filters
+++ b/PCbuild/_socket.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{1edfe0d0-7b9d-4dc8-a335-b21fef7cc77a}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{f8efff18-28ed-4c6b-8e8d-fa816d9a81a8}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\socketmodule.h">
@@ -18,4 +21,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_sqlite3.vcxproj.filters b/PCbuild/_sqlite3.vcxproj.filters
index dce77c9..51830f6 100644
--- a/PCbuild/_sqlite3.vcxproj.filters
+++ b/PCbuild/_sqlite3.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{814b187d-44ad-4f2b-baa7-18ca8a8a6a77}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{225f58de-2bad-4e4d-bc0b-fe74ed6bf5f1}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\_sqlite\cache.h">
@@ -66,4 +69,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_ssl.vcxproj.filters b/PCbuild/_ssl.vcxproj.filters
index bd46b60..716a69a 100644
--- a/PCbuild/_ssl.vcxproj.filters
+++ b/PCbuild/_ssl.vcxproj.filters
@@ -4,6 +4,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{695348f7-e9f6-4fe1-bc03-5f08ffc8095b}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{1b18a2e6-040d-46c7-a9ac-ac2ec64fb5d6}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_ssl.c">
@@ -14,6 +17,8 @@
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <ResourceCompile Include="..\PC\python_nt.rc" />
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_testbuffer.vcxproj.filters b/PCbuild/_testbuffer.vcxproj.filters
index eadf282..bea4260 100644
--- a/PCbuild/_testbuffer.vcxproj.filters
+++ b/PCbuild/_testbuffer.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{8d232240-921a-4bc2-87c3-93ffd3462f0a}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{1e73201a-cca4-4b45-9484-262709cafee7}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_testbuffer.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_testcapi.vcxproj.filters b/PCbuild/_testcapi.vcxproj.filters
index 7a6ad1a..53f64b7 100644
--- a/PCbuild/_testcapi.vcxproj.filters
+++ b/PCbuild/_testcapi.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{a76a90d8-8e8b-4c36-8f58-8bd46abe9f5e}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{071b2ff4-e5a1-4e79-b0c5-cf46b0094a80}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_testcapimodule.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_testconsole.vcxproj.filters b/PCbuild/_testconsole.vcxproj.filters
index 0c25101..321e177 100644
--- a/PCbuild/_testconsole.vcxproj.filters
+++ b/PCbuild/_testconsole.vcxproj.filters
@@ -5,18 +5,19 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
     </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\Modules\_testmultiphase.c">
+    <ClCompile Include="..\PC\_testconsole.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_testembed.vcxproj.filters b/PCbuild/_testembed.vcxproj.filters
index f7f9abe..b90fd85 100644
--- a/PCbuild/_testembed.vcxproj.filters
+++ b/PCbuild/_testembed.vcxproj.filters
@@ -5,10 +5,6 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
@@ -19,4 +15,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_testimportmultiple.vcxproj.filters b/PCbuild/_testimportmultiple.vcxproj.filters
index db0d0a6..8f63d13 100644
--- a/PCbuild/_testimportmultiple.vcxproj.filters
+++ b/PCbuild/_testimportmultiple.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{1ec38ad9-1abf-4b80-8628-ac43ccba324b}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{0ff128a6-7814-4f8e-826e-860a858104ee}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_testimportmultiple.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
-</Project>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_testinternalcapi.vcxproj.filters b/PCbuild/_testinternalcapi.vcxproj.filters
index 4644f23..7734da0 100644
--- a/PCbuild/_testinternalcapi.vcxproj.filters
+++ b/PCbuild/_testinternalcapi.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{136fc5eb-7fe4-4486-8c6d-b49f37a00199}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{acecc890-f8dd-4942-b6d2-1fd8f73a5d6c}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_testinternalcapi.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
-</Project>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_testmultiphase.vcxproj.filters b/PCbuild/_testmultiphase.vcxproj.filters
index 0c25101..8df0a42 100644
--- a/PCbuild/_testmultiphase.vcxproj.filters
+++ b/PCbuild/_testmultiphase.vcxproj.filters
@@ -5,10 +5,6 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
@@ -19,4 +15,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_tkinter.vcxproj.filters b/PCbuild/_tkinter.vcxproj.filters
index 4e5cd47..0d91943 100644
--- a/PCbuild/_tkinter.vcxproj.filters
+++ b/PCbuild/_tkinter.vcxproj.filters
@@ -4,6 +4,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{b9ce64dd-cb95-472d-bbe8-5583b2cd375b}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{2bd3a90c-5b2e-45fb-9b2a-fbf1a4faf5f9}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\_tkinter.c">
@@ -13,4 +16,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/_uuid.vcxproj b/PCbuild/_uuid.vcxproj
new file mode 100644
index 0000000..2437b7e
--- /dev/null
+++ b/PCbuild/_uuid.vcxproj
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM64">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|Win32">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|x64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|Win32">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|x64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM64">
+      <Configuration>Release</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CB435430-EBB1-478B-8F4E-C256F6838F55}</ProjectGuid>
+    <RootNamespace>_uuid</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+    <SupportPGO>false</SupportPGO>
+  </PropertyGroup>
+  <Import Project="python.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <PropertyGroup>
+    <TargetExt>.pyd</TargetExt>
+  </PropertyGroup>
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <Link>
+      <AdditionalDependencies>rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\_uuidmodule.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="pythoncore.vcxproj">
+      <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_uuid.vcxproj.filters b/PCbuild/_uuid.vcxproj.filters
new file mode 100644
index 0000000..705902f
--- /dev/null
+++ b/PCbuild/_uuid.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{4fa4dbfa-e069-4ab4-86a6-ad389b2ec407}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\_uuidmodule.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/_zoneinfo.vcxproj b/PCbuild/_zoneinfo.vcxproj
new file mode 100644
index 0000000..6e6389c
--- /dev/null
+++ b/PCbuild/_zoneinfo.vcxproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM64">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|Win32">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|x64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|Win32">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|x64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM64">
+      <Configuration>Release</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}</ProjectGuid>
+    <RootNamespace>_zoneinfo</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="python.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <PropertyGroup>
+    <TargetExt>.pyd</TargetExt>
+  </PropertyGroup>
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\_zoneinfo.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="pythoncore.vcxproj">
+      <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/PCbuild/_zoneinfo.vcxproj.filters b/PCbuild/_zoneinfo.vcxproj.filters
new file mode 100644
index 0000000..57f31e0
--- /dev/null
+++ b/PCbuild/_zoneinfo.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{2422278e-eeeb-4241-8182-433e2bc5a7fc}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{0616fb85-7891-4790-83c2-005f906cf555}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Modules\_zoneinfo.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 7f9de1f..5a41ca5 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -34,6 +34,7 @@
 echo.  --pgo          Build with Profile-Guided Optimization.  This flag
 echo.                 overrides -c and -d
 echo.  --test-marker  Enable the test marker within the build.
+echo.  --regen        Regenerate all opcodes, grammar and tokens
 echo.
 echo.Available flags to avoid building certain modules.
 echo.These flags have no effect if '-e' is not given:
@@ -45,7 +46,7 @@
 echo.  -c Release ^| Debug ^| PGInstrument ^| PGUpdate
 echo.     Set the configuration (default: Release)
 echo.  -p x64 ^| Win32 ^| ARM ^| ARM64
-echo.     Set the platform (default: Win32)
+echo.     Set the platform (default: x64)
 echo.  -t Build ^| Rebuild ^| Clean ^| CleanAll
 echo.     Set the target manually
 echo.  --pgo-job  The job to use for PGO training; implies --pgo
@@ -54,7 +55,7 @@
 
 :Run
 setlocal
-set platf=Win32
+set platf=x64
 set conf=Release
 set target=Build
 set dir=%~dp0
@@ -80,7 +81,8 @@
 if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts
 if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts
 if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts
-if "%~1"=="-V" shift & goto :Version
+if "%~1"=="-V" shift & goto Version
+if "%~1"=="--regen" (set Regen=true) & shift & goto CheckOpts
 rem These use the actual property names used by MSBuild.  We could just let
 rem them in through the environment, but we specify them on the command line
 rem anyway for visibility so set defaults after this
@@ -158,6 +160,14 @@
  /p:UseTestMarker=%UseTestMarker% %GITProperty%^
  %1 %2 %3 %4 %5 %6 %7 %8 %9
 
+@if not ERRORLEVEL 1 @if "%Regen%"=="true" (
+    %MSBUILD% "%dir%regen.vcxproj" /t:%target% %parallel% %verbose%^
+     /p:IncludeExternals=%IncludeExternals%^
+     /p:Configuration=%conf% /p:Platform=%platf%^
+     /p:UseTestMarker=%UseTestMarker% %GITProperty%^
+     %1 %2 %3 %4 %5 %6 %7 %8 %9
+)
+
 @echo off
 exit /b %ERRORLEVEL%
 
diff --git a/PCbuild/env.bat b/PCbuild/env.bat
index 9d4c9d1..2820e30 100644
--- a/PCbuild/env.bat
+++ b/PCbuild/env.bat
@@ -9,8 +9,19 @@
 
 echo Build environments: x86, amd64, x86_amd64
 echo.
-set VSTOOLS=%VS140COMNTOOLS%
-if "%VSTOOLS%"=="" set VSTOOLS=%VS120COMNTOOLS%
-if "%VSTOOLS%"=="" set VSTOOLS=%VS110COMNTOOLS%
-if "%VSTOOLS%"=="" set VSTOOLS=%VS100COMNTOOLS%
-call "%VSTOOLS%..\..\VC\vcvarsall.bat" %*
+set _ARGS=%*
+if NOT DEFINED _ARGS set _ARGS=amd64
+
+if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" goto :skip_vswhere
+set VSTOOLS=
+for /F "tokens=*" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -property installationPath -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64') DO @(set VSTOOLS=%%i\VC\Auxiliary\Build\vcvarsall.bat)
+if not defined VSTOOLS goto :skip_vswhere
+call "%VSTOOLS%" %_ARGS%
+exit /B 0
+
+:skip_vswhere
+if not defined VSTOOLS set VSTOOLS=%VS140COMNTOOLS%
+if not defined VSTOOLS set VSTOOLS=%VS120COMNTOOLS%
+if not defined VSTOOLS set VSTOOLS=%VS110COMNTOOLS%
+if not defined VSTOOLS set VSTOOLS=%VS100COMNTOOLS%
+call "%VSTOOLS%..\..\VC\vcvarsall.bat" %_ARGS%
diff --git a/PCbuild/env.ps1 b/PCbuild/env.ps1
new file mode 100644
index 0000000..19d7ada
--- /dev/null
+++ b/PCbuild/env.ps1
@@ -0,0 +1,2 @@
+$pcbuild = $script:MyInvocation.MyCommand.Path | Split-Path -parent;
+& cmd /K "$pcbuild\env.bat" $args
diff --git a/PCbuild/find_python.bat b/PCbuild/find_python.bat
index 40937a6..75413cd 100644
--- a/PCbuild/find_python.bat
+++ b/PCbuild/find_python.bat
@@ -37,7 +37,7 @@
 @if NOT "%HOST_PYTHON%"=="" @%HOST_PYTHON% -Ec "import sys; assert sys.version_info[:2] >= (3, 6)" >nul 2>nul && (set PYTHON="%HOST_PYTHON%") && (set _Py_Python_Source=found as HOST_PYTHON) && goto :found
 
 @rem If py.exe finds a recent enough version, use that one
-@for %%p in (3.7 3.6) do @py -%%p -EV >nul 2>&1 && (set PYTHON=py -%%p) && (set _Py_Python_Source=found %%p with py.exe) && goto :found
+@for %%p in (3.8 3.7 3.6) do @py -%%p -EV >nul 2>&1 && (set PYTHON=py -%%p) && (set _Py_Python_Source=found %%p with py.exe) && goto :found
 
 @if NOT exist "%_Py_EXTERNALS_DIR%" mkdir "%_Py_EXTERNALS_DIR%"
 @set _Py_NUGET=%NUGET%
diff --git a/PCbuild/fix_encoding.py b/PCbuild/fix_encoding.py
old mode 100644
new mode 100755
diff --git a/PCbuild/get_external.py b/PCbuild/get_external.py
old mode 100644
new mode 100755
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index 3ad7ce7..3bb2819 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -52,9 +52,9 @@
 
 set libraries=
 set libraries=%libraries%                                       bzip2-1.0.6
-if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries%  libffi-3.3.0-rc0-r1
+if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries%  libffi
 if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries%     openssl-1.1.1g
-set libraries=%libraries%                                       sqlite-3.31.1.0
+set libraries=%libraries%                                       sqlite-3.33.0.0
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.9.0
 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tix-8.4.3.6
diff --git a/PCbuild/idle.bat b/PCbuild/idle.bat
index 1978b99..70f3817 100644
--- a/PCbuild/idle.bat
+++ b/PCbuild/idle.bat
@@ -4,12 +4,24 @@
 rem -d   Run Debug build (python_d.exe).  Else release build.
 
 setlocal
-set exe=win32\python
+set PCBUILD=%~dp0
+set exedir=%PCBUILD%\amd64
+set exe=python
 PATH %PATH%;..\externals\tcltk\bin
 
-if "%1"=="-d" (set exe=%exe%_d) & shift
+:CheckOpts
+if "%1"=="-d" (set exe=%exe%_d) & shift & goto :CheckOpts
+if "%1"=="-p" (call :SetExeDir %2) & shift & shift & goto :CheckOpts
 
-set cmd=%exe% ../Lib/idlelib/idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9
+set cmd=%exedir%\%exe% %PCBUILD%\..\Lib\idlelib\idle.py %1 %2 %3 %4 %5 %6 %7 %8 %9
 
 echo on
 %cmd%
+exit /B %LASTERRORCODE%
+
+:SetExeDir
+if /I %1 EQU Win32 (set exedir=%PCBUILD%\win32)
+if /I %1 EQU x64 (set exedir=%PCBUILD%\amd64)
+if /I %1 EQU ARM (set exedir=%PCBUILD%\arm32)
+if /I %1 EQU ARM64 (set exedir=%PCBUILD%\arm64)
+exit /B 0
diff --git a/PCbuild/lib.pyproj b/PCbuild/lib.pyproj
index 6e9d545..f0c51ed 100644
--- a/PCbuild/lib.pyproj
+++ b/PCbuild/lib.pyproj
@@ -250,7 +250,6 @@
     <Compile Include="distutils\_msvccompiler.py" />
     <Compile Include="distutils\__init__.py" />
     <Compile Include="doctest.py" />
-    <Compile Include="dummy_threading.py" />
     <Compile Include="email\base64mime.py" />
     <Compile Include="email\charset.py" />
     <Compile Include="email\contentmanager.py" />
@@ -420,6 +419,7 @@
     <Compile Include="getpass.py" />
     <Compile Include="gettext.py" />
     <Compile Include="glob.py" />
+    <Compile Include="graphlib.py" />
     <Compile Include="gzip.py" />
     <Compile Include="hashlib.py" />
     <Compile Include="heapq.py" />
@@ -831,7 +831,6 @@
     <Compile Include="test\mp_fork_bomb.py" />
     <Compile Include="test\mp_preload.py" />
     <Compile Include="test\multibytecodec_support.py" />
-    <Compile Include="test\outstanding_bugs.py" />
     <Compile Include="test\pickletester.py" />
     <Compile Include="test\profilee.py" />
     <Compile Include="test\pyclbr_input.py" />
@@ -976,8 +975,6 @@
     <Compile Include="test\test_doctest2.py" />
     <Compile Include="test\test_docxmlrpc.py" />
     <Compile Include="test\test_dtrace.py" />
-    <Compile Include="test\test_dummy_thread.py" />
-    <Compile Include="test\test_dummy_threading.py" />
     <Compile Include="test\test_dynamic.py" />
     <Compile Include="test\test_dynamicclassattribute.py" />
     <Compile Include="test\test_eintr.py" />
@@ -1129,6 +1126,8 @@
     <Compile Include="test\test_import\data\package\submodule.py" />
     <Compile Include="test\test_import\data\package2\submodule1.py" />
     <Compile Include="test\test_import\data\package2\submodule2.py" />
+    <Compile Include="test\test_import\data\unwritable\__init__.py" />
+    <Compile Include="test\test_import\data\unwritable\x.py" />
     <Compile Include="test\test_import\__init__.py" />
     <Compile Include="test\test_import\__main__.py" />
     <Compile Include="test\test_index.py" />
@@ -1195,7 +1194,6 @@
     <Compile Include="test\test_netrc.py" />
     <Compile Include="test\test_nis.py" />
     <Compile Include="test\test_nntplib.py" />
-    <Compile Include="test\test_normalization.py" />
     <Compile Include="test\test_ntpath.py" />
     <Compile Include="test\test_numeric_tower.py" />
     <Compile Include="test\test_opcodes.py" />
@@ -1210,6 +1208,12 @@
     <Compile Include="test\test_pathlib.py" />
     <Compile Include="test\test_pdb.py" />
     <Compile Include="test\test_peepholer.py" />
+    <Compile Include="test\test_peg_generator\__init__.py" />
+    <Compile Include="test\test_peg_generator\__main__.py" />
+    <Compile Include="test\test_peg_generator\ast_dump.py" />
+    <Compile Include="test\test_peg_generator\test_c_parser.py" />
+    <Compile Include="test\test_peg_generator\test_first_sets.py" />
+    <Compile Include="test\test_peg_generator\test_pegen.py" />
     <Compile Include="test\test_pickle.py" />
     <Compile Include="test\test_pickletools.py" />
     <Compile Include="test\test_pipes.py" />
@@ -1393,6 +1397,10 @@
     <Compile Include="test\test_zipimport.py" />
     <Compile Include="test\test_zipimport_support.py" />
     <Compile Include="test\test_zlib.py" />
+    <Compile Include="test\test_zoneinfo\__init__.py" />
+    <Compile Include="test\test_zoneinfo\__main__.py" />
+    <Compile Include="test\test_zoneinfo\_support.py" />
+    <Compile Include="test\test_zoneinfo\test_zoneinfo.py" />
     <Compile Include="test\test__locale.py" />
     <Compile Include="test\test__opcode.py" />
     <Compile Include="test\test__osx_support.py" />
@@ -1560,11 +1568,14 @@
     <Compile Include="xml\__init__.py" />
     <Compile Include="zipapp.py" />
     <Compile Include="zipfile.py" />
+    <Compile Include="zoneinfo\_common.py" />
+    <Compile Include="zoneinfo\__init__.py" />
+    <Compile Include="zoneinfo\_tzpath.py" />
+    <Compile Include="zoneinfo\_zoneinfo.py" />
     <Compile Include="_bootlocale.py" />
     <Compile Include="_collections_abc.py" />
     <Compile Include="_compat_pickle.py" />
     <Compile Include="_compression.py" />
-    <Compile Include="_dummy_thread.py" />
     <Compile Include="_markupbase.py" />
     <Compile Include="_osx_support.py" />
     <Compile Include="_pydecimal.py" />
@@ -1791,6 +1802,7 @@
     <Folder Include="test\test_import\data\package" />
     <Folder Include="test\test_import\data\package2" />
     <Folder Include="test\test_json" />
+    <Folder Include="test\test_peg_generator" />
     <Folder Include="test\test_tools" />
     <Folder Include="test\test_warnings" />
     <Folder Include="test\test_warnings\data" />
diff --git a/PCbuild/liblzma.vcxproj.filters b/PCbuild/liblzma.vcxproj.filters
new file mode 100644
index 0000000..3f58351
--- /dev/null
+++ b/PCbuild/liblzma.vcxproj.filters
@@ -0,0 +1,435 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{cb1870af-3c7e-48ba-bd7f-3e87468f8ed7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{58761ffe-2af0-42a8-9f93-4e57e1954c36}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\alone_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\alone_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\arm.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\armthumb.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\auto_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_buffer_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_buffer_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_header_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_header_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\check\check.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\common.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\block_util.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\check\crc32_fast.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\check\crc32_table.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\check\crc64_fast.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\check\crc64_table.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\delta\delta_common.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\delta\delta_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\delta\delta_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\easy_buffer_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\easy_decoder_memusage.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\easy_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\easy_preset.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\easy_encoder_memusage.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\fastpos_table.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_buffer_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_buffer_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_common.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_flags_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\filter_flags_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\hardware_cputhreads.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\hardware_physmem.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\index.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\index_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\index_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\index_hash.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lz\lz_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lz\lz_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lz\lz_encoder_mf.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\ia64.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma_encoder_optimum_fast.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma_encoder_optimum_normal.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma_encoder_presets.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma2_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\x86.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\vli_size.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\vli_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\vli_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\common\tuklib_physmem.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\common\tuklib_cpucores.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_flags_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_flags_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_flags_common.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_encoder_mt.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_buffer_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\stream_buffer_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\sparc.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\simple_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\simple_decoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\simple_coder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\check\sha256.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\rangecoder\price_table.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\simple\powerpc.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\common\outqueue.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(lzmaDir)src\liblzma\lzma\lzma2_encoder.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="$(lzmaDir)src\common\mythread.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\common\sysdefs.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\common\tuklib_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\common\tuklib_config.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\common\tuklib_cpucores.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\common\tuklib_integer.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\common\tuklib_physmem.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\base.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\bcj.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\block.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\check.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\container.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\delta.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\filter.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\hardware.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\index_hash.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\index.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\lzma12.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\stream_flags.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\version.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\api\lzma\vli.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\check\check.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\check\crc_macros.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\check\crc32_table_be.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\check\crc32_table_le.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\check\crc64_table_be.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\check\crc64_table_le.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\alone_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\block_buffer_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\block_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\block_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\easy_preset.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\filter_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\filter_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\filter_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\index_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\index.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\memcmplen.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\outqueue.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\stream_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\common\stream_flags_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\delta\delta_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\delta\delta_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\delta\delta_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\delta\delta_private.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lz\lz_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lz\lz_encoder_hash_table.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lz\lz_encoder_hash.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lz\lz_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\fastpos.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\lzma_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\lzma_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\lzma_encoder_private.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\lzma_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\lzma2_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\lzma\lzma2_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\rangecoder\price.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\rangecoder\range_common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\rangecoder\range_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\rangecoder\range_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\simple\simple_coder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\simple\simple_decoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\simple\simple_encoder.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)src\liblzma\simple\simple_private.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(lzmaDir)windows\config.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj
index 22a9eed..4d416c5 100644
--- a/PCbuild/pcbuild.proj
+++ b/PCbuild/pcbuild.proj
@@ -51,7 +51,7 @@
     <!-- pyshellext.dll -->
     <Projects Include="pyshellext.vcxproj" />
     <!-- Extension modules -->
-    <ExtensionModules Include="_asyncio;_decimal;_elementtree;_msi;_multiprocessing;_overlapped;pyexpat;_queue;select;unicodedata;winsound" />
+    <ExtensionModules Include="_asyncio;_zoneinfo;_decimal;_elementtree;_msi;_multiprocessing;_overlapped;pyexpat;_queue;select;unicodedata;winsound;_uuid" />
     <ExtensionModules Include="_ctypes" Condition="$(IncludeCTypes)" />
     <!-- Extension modules that require external sources -->
     <ExternalModules Include="_bz2;_lzma;_sqlite3" />
diff --git a/PCbuild/pcbuild.sln b/PCbuild/pcbuild.sln
index 6dc0139b..4b6dc1e 100644
--- a/PCbuild/pcbuild.sln
+++ b/PCbuild/pcbuild.sln
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2024
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30028.174
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}"
 	ProjectSection(SolutionItems) = preProject
@@ -91,6 +91,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_asyncio", "_asyncio.vcxproj", "{384C224A-7474-476E-A01B-750EA7DE918C}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_zoneinfo", "_zoneinfo.vcxproj", "{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}"
+EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_queue", "_queue.vcxproj", "{78D80A15-BD8C-44E2-B49E-1F05B0A0A687}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblzma", "liblzma.vcxproj", "{12728250-16EC-4DC6-94D7-E21DD88947F8}"
@@ -103,6 +105,8 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythonw_uwp", "pythonw_uwp.vcxproj", "{AB603547-1E2A-45B3-9E09-B04596006393}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_uuid", "_uuid.vcxproj", "{CB435430-EBB1-478B-8F4E-C256F6838F55}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|ARM = Debug|ARM
@@ -1263,6 +1267,38 @@
 		{384C224A-7474-476E-A01B-750EA7DE918C}.Release|Win32.Build.0 = Release|Win32
 		{384C224A-7474-476E-A01B-750EA7DE918C}.Release|x64.ActiveCfg = Release|x64
 		{384C224A-7474-476E-A01B-750EA7DE918C}.Release|x64.Build.0 = Release|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|ARM.ActiveCfg = Debug|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|ARM.Build.0 = Debug|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|ARM64.ActiveCfg = Debug|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|ARM64.Build.0 = Debug|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|Win32.ActiveCfg = Debug|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|Win32.Build.0 = Debug|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|x64.ActiveCfg = Debug|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Debug|x64.Build.0 = Debug|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|ARM.ActiveCfg = PGInstrument|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|ARM.Build.0 = PGInstrument|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|ARM64.ActiveCfg = PGInstrument|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|ARM64.Build.0 = PGInstrument|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|ARM.ActiveCfg = PGUpdate|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|ARM.Build.0 = PGUpdate|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|ARM64.ActiveCfg = PGUpdate|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|ARM64.Build.0 = PGUpdate|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|ARM.ActiveCfg = Release|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|ARM.Build.0 = Release|ARM
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|ARM64.ActiveCfg = Release|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|ARM64.Build.0 = Release|ARM64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|Win32.ActiveCfg = Release|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|Win32.Build.0 = Release|Win32
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|x64.ActiveCfg = Release|x64
+		{FCBE1EF2-E0F0-40B1-88B5-00A35D378742}.Release|x64.Build.0 = Release|x64
 		{78D80A15-BD8C-44E2-B49E-1F05B0A0A687}.Debug|ARM.ActiveCfg = Debug|ARM
 		{78D80A15-BD8C-44E2-B49E-1F05B0A0A687}.Debug|ARM.Build.0 = Debug|ARM
 		{78D80A15-BD8C-44E2-B49E-1F05B0A0A687}.Debug|ARM64.ActiveCfg = Debug|ARM64
@@ -1440,6 +1476,38 @@
 		{AB603547-1E2A-45B3-9E09-B04596006393}.Release|Win32.Build.0 = Release|Win32
 		{AB603547-1E2A-45B3-9E09-B04596006393}.Release|x64.ActiveCfg = Release|x64
 		{AB603547-1E2A-45B3-9E09-B04596006393}.Release|x64.Build.0 = Release|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|ARM.ActiveCfg = Debug|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|ARM.Build.0 = Debug|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|ARM64.ActiveCfg = Debug|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|ARM64.Build.0 = Debug|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|Win32.Build.0 = Debug|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|x64.ActiveCfg = Debug|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Debug|x64.Build.0 = Debug|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|ARM.ActiveCfg = PGInstrument|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|ARM.Build.0 = PGInstrument|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|ARM64.ActiveCfg = PGInstrument|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|ARM64.Build.0 = PGInstrument|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGInstrument|x64.Build.0 = PGInstrument|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|ARM.ActiveCfg = PGUpdate|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|ARM.Build.0 = PGUpdate|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|ARM64.ActiveCfg = PGUpdate|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|ARM64.Build.0 = PGUpdate|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.PGUpdate|x64.Build.0 = PGUpdate|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|ARM.ActiveCfg = Release|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|ARM.Build.0 = Release|ARM
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|ARM64.ActiveCfg = Release|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|ARM64.Build.0 = Release|ARM64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|Win32.ActiveCfg = Release|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|Win32.Build.0 = Release|Win32
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|x64.ActiveCfg = Release|x64
+		{CB435430-EBB1-478B-8F4E-C256F6838F55}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/PCbuild/prepare_libffi.bat b/PCbuild/prepare_libffi.bat
index f41ba83..922a475 100644
--- a/PCbuild/prepare_libffi.bat
+++ b/PCbuild/prepare_libffi.bat
@@ -22,10 +22,10 @@
 echo.
 echo.
 echo.Available flags:
-echo.  -x64    build for x64
-echo.  -x86    build for x86
-echo.  -arm32  build for arm32
-echo.  -arm64  build for arm64
+echo.  -x64    enable x64 build
+echo.  -x86    enable x86 build
+echo.  -arm32  enable arm32 build
+echo.  -arm64  enable arm64 build
 echo.  -?      this help
 echo.  --install-cygwin  install cygwin to c:\cygwin
 exit /b 127
@@ -44,6 +44,7 @@
 if "%1"=="" goto :CheckOptsDone
 if /I "%1"=="-x64" (set BUILD_X64=1) & shift & goto :CheckOpts
 if /I "%1"=="-x86" (set BUILD_X86=1) & shift & goto :CheckOpts
+if /I "%1"=="-win32" (set BUILD_X86=1) & shift & goto :CheckOpts
 if /I "%1"=="-arm32" (set BUILD_ARM32=1) & shift & goto :CheckOpts
 if /I "%1"=="-arm64" (set BUILD_ARM64=1) & shift & goto :CheckOpts
 if /I "%1"=="-pdb" (set BUILD_PDB=-g) & shift & goto :CheckOpts
@@ -67,9 +68,7 @@
 if NOT DEFINED SH if exist c:\cygwin\bin\sh.exe set SH=c:\cygwin\bin\sh.exe
 
 if NOT DEFINED VCVARSALL (
-    if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" (
-        set VCVARSALL="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
-    )
+    for /F "tokens=*" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -property installationPath -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64') DO @(set VCVARSALL="%%i\VC\Auxiliary\Build\vcvarsall.bat")
 )
 if ^%VCVARSALL:~0,1% NEQ ^" SET VCVARSALL="%VCVARSALL%"
 
diff --git a/PCbuild/prepare_ssl.py b/PCbuild/prepare_ssl.py
old mode 100644
new mode 100755
diff --git a/PCbuild/pyexpat.vcxproj.filters b/PCbuild/pyexpat.vcxproj.filters
index f8d4602..fd22fc8 100644
--- a/PCbuild/pyexpat.vcxproj.filters
+++ b/PCbuild/pyexpat.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{5af9d40c-fc46-4640-ad84-3d1dd34a71d7}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{f1dbbdb5-41e5-4a88-bf8e-13da010c0ce4}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\expat\xmlrole.h">
@@ -30,4 +33,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
-</Project>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/pylauncher.vcxproj.filters b/PCbuild/pylauncher.vcxproj.filters
index e4b23d2..17d0389 100644
--- a/PCbuild/pylauncher.vcxproj.filters
+++ b/PCbuild/pylauncher.vcxproj.filters
@@ -5,10 +5,6 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props
index 360b4ed..d7762ca 100644
--- a/PCbuild/pyproject.props
+++ b/PCbuild/pyproject.props
@@ -44,7 +44,6 @@
       <CompileAs>Default</CompileAs>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <WholeProgramOptimization>true</WholeProgramOptimization>
-      <EnableEnhancedInstructionSet Condition="'$(Platform)'=='Win32'">NoExtensions</EnableEnhancedInstructionSet>
       <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">OnlyExplicitInline</InlineFunctionExpansion>
     </ClCompile>
@@ -82,7 +81,7 @@
     </Lib>
     <ResourceCompile>
       <AdditionalIncludeDirectories>$(PySourcePath)PC;$(PySourcePath)Include;$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>$(_DebugPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>ORIGINAL_FILENAME=\"$(TargetName)$(TargetExt)\";FIELD3=$(Field3Value);$(_DebugPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Midl>
@@ -97,21 +96,6 @@
     </Midl>
   </ItemDefinitionGroup>
 
-  <Target Name="GeneratePythonNtRcH"
-          BeforeTargets="ClCompile"
-          Inputs="$(PySourcePath)Include\patchlevel.h"
-          Outputs="$(IntDir)pythonnt_rc.h">
-    <WriteLinesToFile File="$(IntDir)pythonnt_rc.h" Overwrite="true" Encoding="ascii"
-                      Lines='/* This file created by pyproject.props /t:GeneratePythonNtRcH */
-#define FIELD3 $(Field3Value)
-#define MS_DLL_ID "$(SysWinVer)"
-#define PYTHON_DLL_NAME "$(TargetName)$(TargetExt)"
-' />
-    <ItemGroup>
-        <FileWrites Include="$(IntDir)pythonnt_rc.h" />
-    </ItemGroup>
-  </Target>
-
   <UsingTask TaskName="KillPython" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
     <ParameterGroup>
       <FileName Required="true" />
@@ -192,8 +176,8 @@
     <SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot81)\bin\x86</SdkBinPath>
     <SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot)\bin\x86</SdkBinPath>
     <SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A@InstallationFolder)\Bin\</SdkBinPath>
-    <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
-    <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificateSha1)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /sha1 "$(SigningCertificateSha1)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
+    <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /n "$(SigningCertificate)" /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d "Python $(PythonVersion)"</_SignCommand>
+    <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificateSha1)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /sha1 "$(SigningCertificateSha1)" /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d "Python $(PythonVersion)"</_SignCommand>
     <_MakeCatCommand Condition="Exists($(SdkBinPath))">"$(SdkBinPath)\makecat.exe"</_MakeCatCommand>
   </PropertyGroup>
 
diff --git a/PCbuild/pyshellext.vcxproj.filters b/PCbuild/pyshellext.vcxproj.filters
index 648e499..36d1d16 100644
--- a/PCbuild/pyshellext.vcxproj.filters
+++ b/PCbuild/pyshellext.vcxproj.filters
@@ -5,10 +5,6 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
diff --git a/PCbuild/python.props b/PCbuild/python.props
index bf6f371..acc41a2 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -56,7 +56,7 @@
     <ExternalsDir>$(EXTERNALS_DIR)</ExternalsDir>
     <ExternalsDir Condition="$(ExternalsDir) == ''">$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`))</ExternalsDir>
     <ExternalsDir Condition="!HasTrailingSlash($(ExternalsDir))">$(ExternalsDir)\</ExternalsDir>
-    <sqlite3Dir>$(ExternalsDir)sqlite-3.31.1.0\</sqlite3Dir>
+    <sqlite3Dir>$(ExternalsDir)sqlite-3.33.0.0\</sqlite3Dir>
     <bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
     <lzmaDir>$(ExternalsDir)xz-5.2.2\</lzmaDir>
     <libffiDir>$(ExternalsDir)libffi\</libffiDir>
diff --git a/PCbuild/python3dll.vcxproj.filters b/PCbuild/python3dll.vcxproj.filters
index d250c45..a756605 100644
--- a/PCbuild/python3dll.vcxproj.filters
+++ b/PCbuild/python3dll.vcxproj.filters
@@ -5,10 +5,6 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
diff --git a/PCbuild/python_uwp.vcxproj.filters b/PCbuild/python_uwp.vcxproj.filters
new file mode 100644
index 0000000..79e8746
--- /dev/null
+++ b/PCbuild/python_uwp.vcxproj.filters
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{fd8bf000-0bbe-4fd4-ac49-29036e5a5c5a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{a0d4ce0b-a7b5-4a77-b6c2-d2ddb9bd49b8}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\PC\pycon.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_exe.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\PC\python_uwp.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 0666b90..2625d02 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -106,16 +106,17 @@
       <PreprocessorDefinitions Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
-      <AdditionalDependencies>version.lib;shlwapi.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>version.lib;shlwapi.lib;ws2_32.lib;pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="..\Include\Python-ast.h" />
+    <ClInclude Include="..\Include\Python.h" />
     <ClInclude Include="..\Include\abstract.h" />
     <ClInclude Include="..\Include\asdl.h" />
     <ClInclude Include="..\Include\ast.h" />
     <ClInclude Include="..\Include\bitset.h" />
     <ClInclude Include="..\Include\boolobject.h" />
-    <ClInclude Include="..\Include\bytes_methods.h" />
     <ClInclude Include="..\Include\bytearrayobject.h" />
     <ClInclude Include="..\Include\bytesobject.h" />
     <ClInclude Include="..\Include\cellobject.h" />
@@ -127,9 +128,19 @@
     <ClInclude Include="..\Include\complexobject.h" />
     <ClInclude Include="..\Include\context.h" />
     <ClInclude Include="..\Include\cpython\abstract.h" />
+    <ClInclude Include="..\Include\cpython\bytearrayobject.h" />
+    <ClInclude Include="..\Include\cpython\bytesobject.h" />
+    <ClInclude Include="..\Include\cpython\ceval.h" />
+    <ClInclude Include="..\Include\cpython\code.h" />
     <ClInclude Include="..\Include\cpython\dictobject.h" />
     <ClInclude Include="..\Include\cpython\fileobject.h" />
+    <ClInclude Include="..\Include\cpython\fileutils.h" />
+    <ClInclude Include="..\Include\cpython\frameobject.h" />
+    <ClInclude Include="..\Include\cpython\import.h" />
     <ClInclude Include="..\Include\cpython\initconfig.h" />
+    <ClInclude Include="..\Include\cpython\interpreteridobject.h" />
+    <ClInclude Include="..\Include\cpython\listobject.h" />
+    <ClInclude Include="..\Include\cpython\methodobject.h" />
     <ClInclude Include="..\Include\cpython\object.h" />
     <ClInclude Include="..\Include\cpython\objimpl.h" />
     <ClInclude Include="..\Include\cpython\pyerrors.h" />
@@ -156,17 +167,27 @@
     <ClInclude Include="..\Include\graminit.h" />
     <ClInclude Include="..\Include\grammar.h" />
     <ClInclude Include="..\Include\import.h" />
+    <ClInclude Include="..\Include\internal\pegen_interface.h" />
+    <ClInclude Include="..\Include\internal\pycore_abstract.h" />
     <ClInclude Include="..\Include\internal\pycore_accu.h" />
     <ClInclude Include="..\Include\internal\pycore_atomic.h" />
-    <ClInclude Include="..\Include\internal\pycore_code.h" />
+    <ClInclude Include="..\Include\internal\pycore_bytes_methods.h" />
+    <ClInclude Include="..\Include\internal\pycore_byteswap.h" />
+    <ClInclude Include="..\Include\internal\pycore_call.h" />
     <ClInclude Include="..\Include\internal\pycore_ceval.h" />
+    <ClInclude Include="..\Include\internal\pycore_code.h" />
     <ClInclude Include="..\Include\internal\pycore_condvar.h" />
     <ClInclude Include="..\Include\internal\pycore_context.h" />
+    <ClInclude Include="..\Include\internal\pycore_dtoa.h" />
     <ClInclude Include="..\Include\internal\pycore_fileutils.h" />
+    <ClInclude Include="..\Include\internal\pycore_gc.h" />
     <ClInclude Include="..\Include\internal\pycore_getopt.h" />
     <ClInclude Include="..\Include\internal\pycore_gil.h" />
     <ClInclude Include="..\Include\internal\pycore_hamt.h" />
+    <ClInclude Include="..\Include\internal\pycore_hashtable.h" />
+    <ClInclude Include="..\Include\internal\pycore_import.h" />
     <ClInclude Include="..\Include\internal\pycore_initconfig.h" />
+    <ClInclude Include="..\Include\internal\pycore_interp.h" />
     <ClInclude Include="..\Include\internal\pycore_object.h" />
     <ClInclude Include="..\Include\internal\pycore_pathconfig.h" />
     <ClInclude Include="..\Include\internal\pycore_pyerrors.h" />
@@ -174,6 +195,8 @@
     <ClInclude Include="..\Include\internal\pycore_pylifecycle.h" />
     <ClInclude Include="..\Include\internal\pycore_pymem.h" />
     <ClInclude Include="..\Include\internal\pycore_pystate.h" />
+    <ClInclude Include="..\Include\internal\pycore_runtime.h" />
+    <ClInclude Include="..\Include\internal\pycore_sysmodule.h" />
     <ClInclude Include="..\Include\internal\pycore_traceback.h" />
     <ClInclude Include="..\Include\internal\pycore_tupleobject.h" />
     <ClInclude Include="..\Include\internal\pycore_warnings.h" />
@@ -199,7 +222,6 @@
     <ClInclude Include="..\Include\parsetok.h" />
     <ClInclude Include="..\Include\patchlevel.h" />
     <ClInclude Include="..\Include\picklebufobject.h" />
-    <ClInclude Include="..\Include\pyhash.h" />
     <ClInclude Include="..\Include\py_curses.h" />
     <ClInclude Include="..\Include\pyarena.h" />
     <ClInclude Include="..\Include\pycapsule.h" />
@@ -208,21 +230,20 @@
     <ClInclude Include="..\Include\pyerrors.h" />
     <ClInclude Include="..\Include\pyexpat.h" />
     <ClInclude Include="..\Include\pyfpe.h" />
+    <ClInclude Include="..\Include\pyframe.h" />
+    <ClInclude Include="..\Include\pyhash.h" />
     <ClInclude Include="..\Include\pylifecycle.h" />
-    <ClInclude Include="..\Include\pymath.h" />
-    <ClInclude Include="..\Include\pytime.h" />
     <ClInclude Include="..\Include\pymacro.h" />
+    <ClInclude Include="..\Include\pymath.h" />
     <ClInclude Include="..\Include\pymem.h" />
     <ClInclude Include="..\Include\pyport.h" />
     <ClInclude Include="..\Include\pystate.h" />
     <ClInclude Include="..\Include\pystrcmp.h" />
-    <ClInclude Include="..\Include\pystrtod.h" />
     <ClInclude Include="..\Include\pystrhex.h" />
-    <ClInclude Include="..\Include\dtoa.h" />
-    <ClInclude Include="..\Include\Python-ast.h" />
-    <ClInclude Include="..\Include\Python.h" />
+    <ClInclude Include="..\Include\pystrtod.h" />
     <ClInclude Include="..\Include\pythonrun.h" />
     <ClInclude Include="..\Include\pythread.h" />
+    <ClInclude Include="..\Include\pytime.h" />
     <ClInclude Include="..\Include\rangeobject.h" />
     <ClInclude Include="..\Include\setobject.h" />
     <ClInclude Include="..\Include\sliceobject.h" />
@@ -263,6 +284,8 @@
     <ClInclude Include="..\Objects\unicodetype_db.h" />
     <ClInclude Include="..\Parser\parser.h" />
     <ClInclude Include="..\Parser\tokenizer.h" />
+    <ClInclude Include="..\Parser\pegen\parse_string.h" />
+    <ClInclude Include="..\Parser\pegen\pegen.h" />
     <ClInclude Include="..\PC\errmap.h" />
     <ClInclude Include="..\PC\pyconfig.h" />
     <ClInclude Include="..\Python\ceval_gil.h" />
@@ -316,7 +339,6 @@
     <ClCompile Include="..\Modules\errnomodule.c" />
     <ClCompile Include="..\Modules\faulthandler.c" />
     <ClCompile Include="..\Modules\gcmodule.c" />
-    <ClCompile Include="..\Modules\hashtable.c" />
     <ClCompile Include="..\Modules\itertoolsmodule.c" />
     <ClCompile Include="..\Modules\main.c" />
     <ClCompile Include="..\Modules\mathmodule.c" />
@@ -325,6 +347,7 @@
     <ClCompile Include="..\Modules\_opcode.c" />
     <ClCompile Include="..\Modules\_operator.c" />
     <ClCompile Include="..\Modules\parsermodule.c" />
+    <ClCompile Include="..\Modules\_peg_parser.c" />
     <ClCompile Include="..\Modules\posixmodule.c" />
     <ClCompile Include="..\Modules\rotatingtree.c" />
     <ClCompile Include="..\Modules\sha1module.c" />
@@ -374,6 +397,7 @@
     <ClCompile Include="..\Objects\floatobject.c" />
     <ClCompile Include="..\Objects\frameobject.c" />
     <ClCompile Include="..\Objects\funcobject.c" />
+    <ClCompile Include="..\Objects\genericaliasobject.c" />
     <ClCompile Include="..\Objects\genobject.c" />
     <ClCompile Include="..\Objects\interpreteridobject.c" />
     <ClCompile Include="..\Objects\iterobject.c" />
@@ -405,6 +429,10 @@
     <ClCompile Include="..\Parser\parsetok.c" />
     <ClCompile Include="..\Parser\tokenizer.c" />
     <ClCompile Include="..\Parser\token.c" />
+    <ClCompile Include="..\Parser\pegen\pegen.c" />
+    <ClCompile Include="..\Parser\pegen\parse.c" />
+    <ClCompile Include="..\Parser\pegen\parse_string.c" />
+    <ClCompile Include="..\Parser\pegen\peg_api.c" />
     <ClCompile Include="..\PC\invalid_parameter_handler.c" />
     <ClCompile Include="..\PC\winreg.c" />
     <ClCompile Include="..\PC\config.c" />
@@ -437,6 +465,7 @@
     <ClCompile Include="..\Python\getversion.c" />
     <ClCompile Include="..\Python\graminit.c" />
     <ClCompile Include="..\Python\hamt.c" />
+    <ClCompile Include="..\Python\hashtable.c" />
     <ClCompile Include="..\Python\import.c" />
     <ClCompile Include="..\Python\importdl.c" />
     <ClCompile Include="..\Python\initconfig.c" />
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index ebab119..4b9eebd 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -31,6 +31,15 @@
     <Filter Include="Resource Files">
       <UniqueIdentifier>{c3e03a5c-56c7-45fd-8543-e5d2326b907d}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Include\internal">
+      <UniqueIdentifier>{86ffb5eb-c423-43aa-b736-a8850d3277df}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Include\cpython">
+      <UniqueIdentifier>{875bf4f2-ac42-46bd-b703-8371a824ec32}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Parser\pegen">
+      <UniqueIdentifier>{33dbdbe0-42c4-4478-bed2-a12cb1e68773}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Include\abstract.h">
@@ -48,9 +57,6 @@
     <ClInclude Include="..\Include\boolobject.h">
       <Filter>Include</Filter>
     </ClInclude>
-    <ClInclude Include="..\Include\bytes_methods.h">
-      <Filter>Include</Filter>
-    </ClInclude>
     <ClInclude Include="..\Include\bytearrayobject.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -81,48 +87,6 @@
     <ClInclude Include="..\Include\context.h">
       <Filter>Include</Filter>
     </ClInclude>
-    <ClInclude Include="..\Include\cpython\abstract.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\dictobject.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\fileobject.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\initconfig.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\object.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\objimpl.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\pyerrors.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\pylifecycle.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\pymem.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\pystate.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\sysmodule.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\traceback.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\tupleobject.h">
-      <Filter>Include</Filter>
-    </ClInclude>
-    <ClInclude Include="..\Include\cpython\unicodeobject.h">
-      <Filter>Include</Filter>
-    </ClInclude>
     <ClInclude Include="..\Include\datetime.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -171,12 +135,24 @@
     <ClInclude Include="..\Include\import.h">
       <Filter>Include</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_abstract.h">
+      <Filter>Include</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_accu.h">
       <Filter>Include</Filter>
     </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_atomic.h">
       <Filter>Include</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_byteswap.h">
+      <Filter>Include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_bytes_methods.h">
+      <Filter>Include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_call.h">
+      <Filter>Include</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_code.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -189,6 +165,9 @@
     <ClInclude Include="..\Include\internal\pycore_context.h">
       <Filter>Include</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_dtoa.h">
+      <Filter>Include</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_fileutils.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -201,9 +180,18 @@
     <ClInclude Include="..\Include\internal\pycore_hamt.h">
       <Filter>Include</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_hashtable.h">
+      <Filter>Include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_import.h">
+      <Filter>Include</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_initconfig.h">
       <Filter>Include</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_interp.h">
+      <Filter>Include</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_object.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -225,6 +213,12 @@
     <ClInclude Include="..\Include\internal\pycore_pystate.h">
       <Filter>Include</Filter>
     </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_runtime.h">
+      <Filter>Include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_sysmodule.h">
+      <Filter>Include</Filter>
+    </ClInclude>
     <ClInclude Include="..\Include\internal\pycore_traceback.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -345,9 +339,6 @@
     <ClInclude Include="..\Include\pystrhex.h">
       <Filter>Include</Filter>
     </ClInclude>
-    <ClInclude Include="..\Include\dtoa.h">
-      <Filter>Include</Filter>
-    </ClInclude>
     <ClInclude Include="..\Include\Python-ast.h">
       <Filter>Include</Filter>
     </ClInclude>
@@ -513,38 +504,179 @@
     <ClInclude Include="..\Include\odictobject.h">
       <Filter>Include</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\crc32.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\pyframe.h">
+      <Filter>Include</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\deflate.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\abstract.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\inffast.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\bytearrayobject.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\inffixed.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\bytesobject.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\inflate.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\ceval.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\inftrees.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\code.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\trees.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\dictobject.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\zconf.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\fileobject.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\zconf.in.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\fileutils.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\zlib.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\import.h">
+      <Filter>Include\cpython</Filter>
     </ClInclude>
-    <ClInclude Include="$(zlibDir)\zutil.h">
-      <Filter>Modules\zlib</Filter>
+    <ClInclude Include="..\Include\cpython\listobject.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\unicodeobject.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\methodobject.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\objimpl.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\object.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\pyerrors.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\pymem.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\pylifecycle.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\tupleobject.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\traceback.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\frameobject.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\interpreteridobject.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\sysmodule.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\pystate.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\cpython\initconfig.h">
+      <Filter>Include\cpython</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_warnings.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_abstract.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_accu.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_atomic.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_bytes_methods.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_call.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_ceval.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_code.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_condvar.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_context.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_dtoa.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_fileutils.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_gc.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_getopt.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_gil.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_hamt.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_hashtable.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_import.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_initconfig.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_interp.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_object.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_pathconfig.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_pyerrors.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_pyhash.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_pylifecycle.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_pymem.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_pystate.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_runtime.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_sysmodule.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pycore_traceback.h">
+      <Filter>Include\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Parser\pegen\parse_string.h">
+      <Filter>Parser\pegen</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Parser\pegen\pegen.h">
+      <Filter>Parser\pegen</Filter>
+    </ClInclude>
+    <ClInclude Include="..\Include\internal\pegen_interface.h">
+      <Filter>Include\internal</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
@@ -593,9 +725,6 @@
     <ClCompile Include="..\Modules\_pickle.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_queuemodule.c">
-      <Filter>Modules</Filter>
-    </ClCompile>
     <ClCompile Include="..\Modules\_randommodule.c">
       <Filter>Modules</Filter>
     </ClCompile>
@@ -659,9 +788,6 @@
     <ClCompile Include="..\Modules\_operator.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\parsermodule.c">
-      <Filter>Modules</Filter>
-    </ClCompile>
     <ClCompile Include="..\Modules\posixmodule.c">
       <Filter>Modules</Filter>
     </ClCompile>
@@ -692,9 +818,6 @@
     <ClCompile Include="..\Modules\xxsubtype.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\zlibmodule.c">
-      <Filter>Modules</Filter>
-    </ClCompile>
     <ClCompile Include="..\Modules\_io\fileio.c">
       <Filter>Modules\_io</Filter>
     </ClCompile>
@@ -926,9 +1049,6 @@
     <ClCompile Include="..\Python\compile.c">
       <Filter>Python</Filter>
     </ClCompile>
-    <ClCompile Include="..\Python\context.h">
-      <Filter>Python</Filter>
-    </ClCompile>
     <ClCompile Include="..\Python\dynamic_annotations.c">
       <Filter>Python</Filter>
     </ClCompile>
@@ -971,8 +1091,8 @@
     <ClCompile Include="..\Python\graminit.c">
       <Filter>Python</Filter>
     </ClCompile>
-    <ClCompile Include="..\Python\hamt.h">
-      <Filter>Python</Filter>
+    <ClCompile Include="..\Python\hashtable.c">
+      <Filter>Modules</Filter>
     </ClCompile>
     <ClCompile Include="..\Python\import.c">
       <Filter>Python</Filter>
@@ -1082,53 +1202,47 @@
     <ClCompile Include="..\Modules\_tracemalloc.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\hashtable.c">
-      <Filter>Modules</Filter>
-    </ClCompile>
     <ClCompile Include="..\PC\invalid_parameter_handler.c">
       <Filter>PC</Filter>
     </ClCompile>
     <ClCompile Include="..\Objects\odictobject.c">
       <Filter>Objects</Filter>
     </ClCompile>
-    <ClCompile Include="..\PC\_findvs.cpp">
-      <Filter>PC</Filter>
-    </ClCompile>
     <ClCompile Include="..\Modules\_contextvarsmodule.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\adler32.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Python\hamt.c">
+      <Filter>Python</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\compress.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Parser\parser.c">
+      <Filter>Parser</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\crc32.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Modules\_xxsubinterpretersmodule.c">
+      <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\deflate.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Python\context.c">
+      <Filter>Python</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\infback.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Objects\genericaliasobject.c">
+      <Filter>Objects</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\inffast.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Parser\pegen\pegen.c">
+      <Filter>Parser\pegen</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\inflate.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Parser\pegen\parse.c">
+      <Filter>Parser\pegen</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\inftrees.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Parser\pegen\parse_string.c">
+      <Filter>Parser\pegen</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\trees.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Parser\pegen\peg_api.c">
+      <Filter>Parser\pegen</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\uncompr.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Modules\parsermodule.c">
+      <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="$(zlibDir)\zutil.c">
-      <Filter>Modules\zlib</Filter>
+    <ClCompile Include="..\Modules\_peg_parser.c">
+      <Filter>Modules</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
@@ -1136,4 +1250,4 @@
       <Filter>Resource Files</Filter>
     </ResourceCompile>
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/pythonw.vcxproj.filters b/PCbuild/pythonw.vcxproj.filters
index 259866f..20d8705 100644
--- a/PCbuild/pythonw.vcxproj.filters
+++ b/PCbuild/pythonw.vcxproj.filters
@@ -9,13 +9,13 @@
     </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ResourceCompile Include="..\PC\python_exe.rc">
-      <Filter>Resource Files</Filter>
-    </ResourceCompile>
-  </ItemGroup>
-  <ItemGroup>
     <ClCompile Include="..\PC\WinMain.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\pythonw_exe.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/pythonw_uwp.vcxproj.filters b/PCbuild/pythonw_uwp.vcxproj.filters
new file mode 100644
index 0000000..2f39bde
--- /dev/null
+++ b/PCbuild/pythonw_uwp.vcxproj.filters
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{de05f656-4dcb-4fe7-9946-5c325ea2d842}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4102e199-3e5c-42d0-b37b-d42394b20d9e}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\PC\pyconw.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\pythonw_exe.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\PC\python_uwp.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/pywlauncher.vcxproj.filters b/PCbuild/pywlauncher.vcxproj.filters
index e4b23d2..17d0389 100644
--- a/PCbuild/pywlauncher.vcxproj.filters
+++ b/PCbuild/pywlauncher.vcxproj.filters
@@ -5,10 +5,6 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
     <Filter Include="Resource Files">
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index ceed5dc..bafd912 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -38,7 +38,7 @@
     Used to build Python with extra debugging capabilities, equivalent
     to using ./configure --with-pydebug on UNIX.  All binaries built
     using this configuration have "_d" added to their name:
-    python38_d.dll, python_d.exe, parser_d.pyd, and so on.  Both the
+    python39_d.dll, python_d.exe, parser_d.pyd, and so on.  Both the
     build and rt (run test) batch files in this directory accept a -d
     option for debug builds.  If you are building Python to help with
     development of CPython, you will most likely use this configuration.
@@ -132,6 +132,7 @@
 _asyncio
 _ctypes
 _ctypes_test
+_zoneinfo
 _decimal
 _elementtree
 _hashlib
@@ -184,7 +185,7 @@
     again when building.
 
 _sqlite3
-    Wraps SQLite 3.31.1.0, which is itself built by sqlite3.vcxproj
+    Wraps SQLite 3.33.0, which is itself built by sqlite3.vcxproj
     Homepage:
         http://www.sqlite.org/
 _tkinter
@@ -285,4 +286,4 @@
 project, with some projects overriding certain specific values. The GUI
 doesn't always reflect the correct settings and may confuse the user
 with false information, especially for settings that automatically adapt
-for diffirent configurations.
+for different configurations.
diff --git a/PCbuild/regen.vcxproj b/PCbuild/regen.vcxproj
new file mode 100644
index 0000000..564a4dd
--- /dev/null
+++ b/PCbuild/regen.vcxproj
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|ARM">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|Win32">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGInstrument|x64">
+      <Configuration>PGInstrument</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|ARM">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|Win32">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="PGUpdate|x64">
+      <Configuration>PGUpdate</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{21CF2108-2CC9-4005-A6ED-B7965ADE3854}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>regen</RootNamespace>
+    <SupportPGO>false</SupportPGO>
+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="python.props" />
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration">
+    <ConfigurationType>Utility</ConfigurationType>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGUpdate|ARM'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGInstrument|ARM'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">
+    <PlatformToolset>v142</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="pyproject.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Programs\_freeze_importlib.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="pythoncore.vcxproj">
+      <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+      <Private>true</Private>
+      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
+      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+      <LinkLibraryDependencies>true</LinkLibraryDependencies>
+      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\Grammar\Grammar">
+    </None>
+    <None Include="..\Grammar\Tokens">
+    </None>
+    <None Include="..\Include\graminit.h">
+    </None>
+    <None Include="..\Python\graminit.c">
+    </None>
+    <None Include="..\Include\token.h">
+    </None>
+    <None Include="..\Include\opcode.h">
+    </None>
+    <None Include="..\Include\Python-ast.h">
+    </None>
+    <None Include="..\Python\Python-ast.c">
+    </None>
+    <None Include="..\Lib\keyword.py">
+    </None>
+    <None Include="..\Lib\symbol.py">
+    </None>
+    <None Include="..\Doc\library\token-list.inc">
+    </None>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <Target Name="_RegenGrammar" BeforeTargets="Build">
+    <!-- Regenerate Include/graminit.h and Python/graminit.c from Grammar/Grammar using pgen-->
+    <Exec Command="&quot;$(PythonExe)&quot; -m Parser.pgen &quot;$(PySourcePath)Grammar\Grammar&quot; &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(IntDir)graminit.h&quot; &quot;$(IntDir)graminit.c&quot;" />
+    <Copy SourceFiles="$(IntDir)graminit.h" DestinationFiles="$(PySourcePath)Include\graminit.h">
+      <Output TaskParameter="CopiedFiles" ItemName="_UpdatedH" />
+    </Copy>
+    <Copy SourceFiles="$(IntDir)graminit.c" DestinationFiles="$(PySourcePath)Python\graminit.c">
+      <Output TaskParameter="CopiedFiles" ItemName="_UpdatedC" />
+    </Copy>
+    <Warning Text="Grammar updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedH)' != '' and '@(_UpdatedC)' != ''" />
+  </Target>
+  <Target Name="_RegenPegen" BeforeTargets="Build">
+    <!-- Regenerate Parser/pegen/parse.c -->
+    <SetEnv Name="PYTHONPATH" Prefix="true" Value="$(PySourcePath)Tools\peg_generator\" />
+    <Exec Command="&quot;$(PythonExe)&quot; -m pegen -q c &quot;$(PySourcePath)Grammar\python.gram&quot; &quot;$(PySourcePath)Grammar\Tokens&quot; -o &quot;$(IntDir)parse.c&quot;" />
+    <Copy SourceFiles="$(IntDir)parse.c" DestinationFiles="$(PySourcePath)Parser\pegen\parse.c">
+      <Output TaskParameter="CopiedFiles" ItemName="_UpdatedParse" />
+    </Copy>
+    <Warning Text="Pegen updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedParse)' != ''" />
+  </Target>
+  <Target Name="_RegenAST_H" AfterTargets="_RegenGrammar">
+    <!-- Regenerate Include/Python-ast.h and Python/Python-ast.c using Parser/asdl_c.py -h -->
+    <Exec Command="&quot;$(PythonExe)&quot; &quot;$(PySourcePath)Parser\asdl_c.py&quot; &quot;$(PySourcePath)Parser\Python.asdl&quot; -H &quot;$(IntDir)Python-ast.h&quot; -C &quot;$(IntDir)Python-ast.c&quot;" />
+    <Copy SourceFiles="$(IntDir)Python-ast.h" DestinationFiles="$(PySourcePath)Include\Python-ast.h">
+      <Output TaskParameter="CopiedFiles" ItemName="_UpdatedH" />
+    </Copy>
+    <Copy SourceFiles="$(IntDir)Python-ast.c" DestinationFiles="$(PySourcePath)Python\Python-ast.c">
+      <Output TaskParameter="CopiedFiles" ItemName="_UpdatedC" />
+    </Copy>
+    <Warning Text="ASDL is updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedH)' != '' and '@(_UpdatedC)' != ''" />
+  </Target>
+  <Target Name="_RegenOpcodes" AfterTargets="_RegenAST_C">
+    <!-- Regenerate Include/opcode.h from Lib/opcode.py using Tools/scripts/generate_opcode_h.py-->
+    <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_opcode_h.py &quot;$(PySourcePath)Lib\opcode.py&quot; &quot;$(IntDir)opcode.h&quot;" />
+    <Copy SourceFiles="$(IntDir)opcode.h" DestinationFiles="$(PySourcePath)Include\opcode.h">
+      <Output TaskParameter="CopiedFiles" ItemName="_Updated" />
+    </Copy>
+    <Warning Text="Opcodes updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_Updated)' != ''" />
+  </Target>
+  <Target Name="_RegenTokens" AfterTargets="_RegenOpcodes">
+    <!-- Regenerate Doc/library/token-list.inc from Grammar/Tokens using Tools/scripts/generate_token.py-->
+    <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py rst &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Doc\library\token-list.inc&quot;" />
+    <!-- Regenerate Include/token.h from Grammar/Tokens using Tools/scripts/generate_token.py-->
+    <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py h &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Include\token.h&quot;" />
+    <!-- Regenerate Parser/token.c from Grammar/Tokens using Tools/scripts/generate_token.py-->
+    <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py c &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Parser\token.c&quot;" />
+    <!-- Regenerate Lib/token.py from Grammar/Tokens using Tools/scripts/generate_token.py -->
+    <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py py &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Lib\token.py&quot;" />
+  </Target>
+  <Target Name="_RegenKeywords" AfterTargets="_RegenTokens">
+    <!-- Regenerate Lib/keyword.py from Grammar/python.gram and Grammar/Tokens using Tools/peg_generator/pegen-->
+    <SetEnv Name="PYTHONPATH" Prefix="true" Value="$(PySourcePath)Tools\peg_generator\" />
+    <Exec Command="&quot;$(PythonExe)&quot; -m pegen.keywordgen &quot;$(PySourcePath)Grammar\python.gram&quot; &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(IntDir)keyword.py&quot;" />
+    <Copy SourceFiles="$(IntDir)keyword.py" DestinationFiles="$(PySourcePath)Lib\keyword.py">
+      <Output TaskParameter="CopiedFiles" ItemName="_Updated" />
+    </Copy>
+    <Warning Text="Keywords updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_Updated)' != ''" />
+  </Target>
+  <Target Name="_RegenSymbols" AfterTargets="_RegenKeywords">
+    <!-- Regenerate Lib/symbol.py from Include/graminit.h using Tools/scripts/generate_symbol_py.py-->
+    <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_symbol_py.py &quot;$(PySourcePath)Include\graminit.h&quot;  &quot;$(PySourcePath)Lib\symbol.py&quot;" />
+  </Target>
+  <Target Name="_CleanFiles" BeforeTargets="CoreClean">
+    <ItemGroup>
+      <Clean Include="$(IntDir)keyword.py" />
+      <Clean Include="$(IntDir)opcode.h" />
+      <Clean Include="$(IntDir)Python-ast.c" />
+      <Clean Include="$(IntDir)Python-ast.h" />
+      <Clean Include="$(IntDir)graminit.h.new" />
+      <Clean Include="$(IntDir)graminit.c.new" />
+    </ItemGroup>
+  </Target>
+</Project>
diff --git a/PCbuild/rt.bat b/PCbuild/rt.bat
index 59f757c..29813c5 100644
--- a/PCbuild/rt.bat
+++ b/PCbuild/rt.bat
@@ -6,8 +6,9 @@
 rem -q   "quick" -- normally the tests are run twice, the first time
 rem      after deleting all the .pyc files reachable from Lib/.
 rem      -q runs the tests just once, and without deleting .pyc files.
-rem -x64 Run the 64-bit build of python (or python_d if -d was specified)
-rem      When omitted, uses %PREFIX% if set or the 32-bit build
+rem -p <Win32|x64|ARM|ARM64> or -win32, -x64, -arm32, -arm64
+rem      Run the specified architecture of python (or python_d if -d
+rem      was specified). If omitted, uses %PREFIX% if set or 64-bit.
 rem All leading instances of these switches are shifted off, and
 rem whatever remains (up to 9 arguments) is passed to regrtest.py.
 rem For example,
@@ -38,12 +39,14 @@
 if "%1"=="-O" (set dashO=-O)     & shift & goto CheckOpts
 if "%1"=="-q" (set qmode=yes)    & shift & goto CheckOpts
 if "%1"=="-d" (set suffix=_d)    & shift & goto CheckOpts
+if "%1"=="-win32" (set prefix=%pcbuild%win32) & shift & goto CheckOpts
 if "%1"=="-x64" (set prefix=%pcbuild%amd64) & shift & goto CheckOpts
 if "%1"=="-arm64" (set prefix=%pcbuild%arm64) & shift & goto CheckOpts
 if "%1"=="-arm32" (set prefix=%pcbuild%arm32) & shift & goto CheckOpts
+if "%1"=="-p" (call :SetPlatform %~2) & shift & shift & goto CheckOpts
 if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts
 
-if not defined prefix set prefix=%pcbuild%win32
+if not defined prefix set prefix=%pcbuild%amd64
 set exe=%prefix%\python%suffix%.exe
 set cmd="%exe%" %dashO% -u -Wd -E -bb -m test %regrtestargs%
 if defined qmode goto Qmode
@@ -60,6 +63,15 @@
 
 echo About to run again without deleting .pyc first:
 pause
+goto Qmode
+
+:SetPlatform
+if /I %1 EQU Win32 (set prefix=%pcbuild%win32) & exit /B 0
+if /I %1 EQU x64 (set prefix=%pcbuild%amd64) & exit /B 0
+if /I %1 EQU ARM64 (set prefix=%pcbuild%arm64) & exit /B 0
+if /I %1 EQU ARM (set prefix=%pcbuild%arm32) & exit /B 0
+echo Invalid platform "%1"
+exit /B 1
 
 :Qmode
 echo on
diff --git a/PCbuild/select.vcxproj.filters b/PCbuild/select.vcxproj.filters
index 55a2fc8..5354820 100644
--- a/PCbuild/select.vcxproj.filters
+++ b/PCbuild/select.vcxproj.filters
@@ -4,10 +4,18 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{98346077-900c-4c7a-852f-a23470e37b40}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{b47a8e6c-47c0-4490-aa91-1a3624a0905c}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\Modules\selectmodule.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/sqlite3.vcxproj b/PCbuild/sqlite3.vcxproj
index 90b4d31..7351a6d 100644
--- a/PCbuild/sqlite3.vcxproj
+++ b/PCbuild/sqlite3.vcxproj
@@ -98,7 +98,7 @@
   <ItemDefinitionGroup>
     <ClCompile>
       <AdditionalIncludeDirectories>$(sqlite3Dir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>SQLITE_ENABLE_FTS4;SQLITE_ENABLE_FTS5;SQLITE_API=__declspec(dllexport);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>SQLITE_ENABLE_JSON1;SQLITE_ENABLE_FTS4;SQLITE_ENABLE_FTS5;SQLITE_API=__declspec(dllexport);%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>Level1</WarningLevel>
     </ClCompile>
     <ResourceCompile>
diff --git a/PCbuild/sqlite3.vcxproj.filters b/PCbuild/sqlite3.vcxproj.filters
index 86680c1..76662ed 100644
--- a/PCbuild/sqlite3.vcxproj.filters
+++ b/PCbuild/sqlite3.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{0e842fe2-176b-4e83-9d1f-0ad13a859efd}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{0248795a-00c9-4090-ad61-55ae23438598}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="$(sqlite3Dir)\sqlite3.h">
@@ -21,4 +24,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\sqlite3.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/unicodedata.vcxproj.filters b/PCbuild/unicodedata.vcxproj.filters
index 20e640e..7ff9783 100644
--- a/PCbuild/unicodedata.vcxproj.filters
+++ b/PCbuild/unicodedata.vcxproj.filters
@@ -7,6 +7,9 @@
     <Filter Include="Source Files">
       <UniqueIdentifier>{e2c055bb-ec62-4bbc-aa1c-d88da4d4ad1c}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{d04f3447-67b0-42aa-b84f-9fc0029d5af7}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\Modules\unicodedata_db.h">
@@ -21,4 +24,9 @@
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/PCbuild/venvlauncher.vcxproj.filters b/PCbuild/venvlauncher.vcxproj.filters
new file mode 100644
index 0000000..ec13936
--- /dev/null
+++ b/PCbuild/venvlauncher.vcxproj.filters
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{8f3ab79e-3cba-4e6d-82b2-559ce946de58}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4a2423af-e5d1-4c88-b308-d71b768977df}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\PC\launcher.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\pylauncher.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\PC\launcher.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/venvwlauncher.vcxproj.filters b/PCbuild/venvwlauncher.vcxproj.filters
new file mode 100644
index 0000000..8addc13
--- /dev/null
+++ b/PCbuild/venvwlauncher.vcxproj.filters
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{7683f248-9c32-4e72-a329-5bd84993f63a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{61b34b26-ce53-405d-a743-b370ff505887}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\PC\launcher.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\PC\launcher.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\pylauncher.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/PCbuild/winsound.vcxproj.filters b/PCbuild/winsound.vcxproj.filters
index 7d08931..6775802 100644
--- a/PCbuild/winsound.vcxproj.filters
+++ b/PCbuild/winsound.vcxproj.filters
@@ -5,10 +5,18 @@
       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
     </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{6be42502-398f-4bec-8677-8809a2da0eef}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\PC\winsound.c">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\PC\python_nt.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/Parser/Python.asdl b/Parser/Python.asdl
index 126d478..889712b 100644
--- a/Parser/Python.asdl
+++ b/Parser/Python.asdl
@@ -1,16 +1,13 @@
--- ASDL's 5 builtin types are:
--- identifier, int, string, object, constant
+-- ASDL's 4 builtin types are:
+-- identifier, int, string, constant
 
 module Python
 {
-    mod = Module(stmt* body, type_ignore *type_ignores)
+    mod = Module(stmt* body, type_ignore* type_ignores)
         | Interactive(stmt* body)
         | Expression(expr body)
         | FunctionType(expr* argtypes, expr returns)
 
-        -- not really an actual node but useful in Jython's typesystem.
-        | Suite(stmt* body)
-
     stmt = FunctionDef(identifier name, arguments args,
                        stmt* body, expr* decorator_list, expr? returns,
                        string? type_comment)
@@ -51,7 +48,6 @@
           | Expr(expr value)
           | Pass | Break | Continue
 
-          -- XXX Jython will be different
           -- col_offset is the byte offset in the utf8 string the parser uses
           attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
@@ -82,20 +78,19 @@
 
          -- the following expression can appear in assignment context
          | Attribute(expr value, identifier attr, expr_context ctx)
-         | Subscript(expr value, slice slice, expr_context ctx)
+         | Subscript(expr value, expr slice, expr_context ctx)
          | Starred(expr value, expr_context ctx)
          | Name(identifier id, expr_context ctx)
          | List(expr* elts, expr_context ctx)
          | Tuple(expr* elts, expr_context ctx)
 
+         -- can appear only in Subscript
+         | Slice(expr? lower, expr? upper, expr? step)
+
           -- col_offset is the byte offset in the utf8 string the parser uses
           attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
-    expr_context = Load | Store | Del | AugLoad | AugStore | Param
-
-    slice = Slice(expr? lower, expr? upper, expr? step)
-          | ExtSlice(slice* dims)
-          | Index(expr value)
+    expr_context = Load | Store | Del
 
     boolop = And | Or
 
@@ -119,6 +114,7 @@
 
     -- keyword arguments supplied to call (NULL identifier for **kwargs)
     keyword = (identifier? arg, expr value)
+               attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
     -- import name with optional 'as' alias.
     alias = (identifier name, identifier? asname)
diff --git a/Parser/asdl.py b/Parser/asdl.py
index 62f5c19..7f50948 100644
--- a/Parser/asdl.py
+++ b/Parser/asdl.py
@@ -33,8 +33,7 @@
 # See the EBNF at the top of the file to understand the logical connection
 # between the various node types.
 
-builtin_types = {'identifier', 'string', 'bytes', 'int', 'object', 'singleton',
-                 'constant'}
+builtin_types = {'identifier', 'string', 'int', 'constant'}
 
 class AST:
     def __repr__(self):
@@ -72,6 +71,16 @@
         self.seq = seq
         self.opt = opt
 
+    def __str__(self):
+        if self.seq:
+            extra = "*"
+        elif self.opt:
+            extra = "?"
+        else:
+            extra = ""
+
+        return "{}{} {}".format(self.type, extra, self.name)
+
     def __repr__(self):
         if self.seq:
             extra = ", seq=True"
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
old mode 100644
new mode 100755
index a708b66..6f3154a
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -1,12 +1,17 @@
 #! /usr/bin/env python
 """Generate C code from an ASDL description."""
 
-import os, sys
+import os
+import sys
+
+from argparse import ArgumentParser
+from pathlib import Path
 
 import asdl
 
 TABSIZE = 4
 MAX_COL = 80
+AUTOGEN_MESSAGE = "/* File automatically generated by {}. */\n\n"
 
 def get_c_type(name):
     """Return a string for the C name of the type.
@@ -60,6 +65,9 @@
         lines.append(padding + cur)
     return lines
 
+def reflow_c_string(s, depth):
+    return '"%s"' % s.replace('\n', '\\n"\n%s"' % (' ' * depth * TABSIZE))
+
 def is_simple(sum):
     """Return True if a sum is a simple.
 
@@ -71,6 +79,21 @@
             return False
     return True
 
+def asdl_of(name, obj):
+    if isinstance(obj, asdl.Product) or isinstance(obj, asdl.Constructor):
+        fields = ", ".join(map(str, obj.fields))
+        if fields:
+            fields = "({})".format(fields)
+        return "{}{}".format(name, fields)
+    else:
+        if is_simple(obj):
+            types = " | ".join(type.name for type in obj.types)
+        else:
+            sep = "\n{}| ".format(" " * (len(name) + 1))
+            types = sep.join(
+                asdl_of(type.name, type) for type in obj.types
+            )
+        return "{} = {}".format(name, types)
 
 class EmitVisitor(asdl.VisitorBase):
     """Visit that emits lines"""
@@ -78,14 +101,18 @@
     def __init__(self, file):
         self.file = file
         self.identifiers = set()
+        self.singletons = set()
+        self.types = set()
         super(EmitVisitor, self).__init__()
 
     def emit_identifier(self, name):
-        name = str(name)
-        if name in self.identifiers:
-            return
-        self.emit("_Py_IDENTIFIER(%s);" % name, 0)
-        self.identifiers.add(name)
+        self.identifiers.add(str(name))
+
+    def emit_singleton(self, name):
+        self.singletons.add(str(name))
+
+    def emit_type(self, name):
+        self.types.add(str(name))
 
     def emit(self, s, depth, reflow=True):
         # XXX reflow long lines?
@@ -301,7 +328,7 @@
             if not opt and argtype != "int":
                 emit("if (!%s) {" % argname, 1)
                 emit("PyErr_SetString(PyExc_ValueError,", 2)
-                msg = "field %s is required for %s" % (argname, name)
+                msg = "field '%s' is required for %s" % (argname, name)
                 emit('                "%s");' % msg,
                      2, reflow=False)
                 emit('return NULL;', 2)
@@ -360,7 +387,7 @@
 
 class Obj2ModPrototypeVisitor(PickleVisitor):
     def visitProduct(self, prod, name):
-        code = "static int obj2ast_%s(PyObject* obj, %s* out, PyArena* arena);"
+        code = "static int obj2ast_%s(astmodulestate *state, PyObject* obj, %s* out, PyArena* arena);"
         self.emit(code % (name, get_c_type(name)), 0)
 
     visitSum = visitProduct
@@ -370,7 +397,7 @@
     def funcHeader(self, name):
         ctype = get_c_type(name)
         self.emit("int", 0)
-        self.emit("obj2ast_%s(PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
+        self.emit("obj2ast_%s(astmodulestate *state, PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
         self.emit("{", 0)
         self.emit("int isinstance;", 1)
         self.emit("", 0)
@@ -392,7 +419,7 @@
         self.funcHeader(name)
         for t in sum.types:
             line = ("isinstance = PyObject_IsInstance(obj, "
-                    "(PyObject *)%s_type);")
+                    "state->%s_type);")
             self.emit(line % (t.name,), 1)
             self.emit("if (isinstance == -1) {", 1)
             self.emit("return 1;", 2)
@@ -409,6 +436,7 @@
     def complexSum(self, sum, name):
         self.funcHeader(name)
         self.emit("PyObject *tmp = NULL;", 1)
+        self.emit("PyObject *tp;", 1)
         for a in sum.attributes:
             self.visitAttributeDeclaration(a, name, sum=sum)
         self.emit("", 0)
@@ -420,8 +448,8 @@
         for a in sum.attributes:
             self.visitField(a, name, sum=sum, depth=1)
         for t in sum.types:
-            line = "isinstance = PyObject_IsInstance(obj, (PyObject*)%s_type);"
-            self.emit(line % (t.name,), 1)
+            self.emit("tp = state->%s_type;" % (t.name,), 1)
+            self.emit("isinstance = PyObject_IsInstance(obj, tp);", 1)
             self.emit("if (isinstance == -1) {", 1)
             self.emit("return 1;", 2)
             self.emit("}", 1)
@@ -451,7 +479,7 @@
     def visitProduct(self, prod, name):
         ctype = get_c_type(name)
         self.emit("int", 0)
-        self.emit("obj2ast_%s(PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
+        self.emit("obj2ast_%s(astmodulestate *state, PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
         self.emit("{", 0)
         self.emit("PyObject* tmp = NULL;", 1)
         for f in prod.fields:
@@ -497,7 +525,8 @@
 
     def visitField(self, field, name, sum=None, prod=None, depth=0):
         ctype = get_c_type(field.type)
-        self.emit("if (_PyObject_LookupAttrId(obj, &PyId_%s, &tmp) < 0) {" % field.name, depth)
+        line = "if (_PyObject_LookupAttr(obj, state->%s, &tmp) < 0) {"
+        self.emit(line % field.name, depth)
         self.emit("return 1;", depth+1)
         self.emit("}", depth)
         if not field.opt:
@@ -524,7 +553,7 @@
             self.emit("Py_ssize_t i;", depth+1)
             self.emit("if (!PyList_Check(tmp)) {", depth+1)
             self.emit("PyErr_Format(PyExc_TypeError, \"%s field \\\"%s\\\" must "
-                      "be a list, not a %%.200s\", tmp->ob_type->tp_name);" %
+                      "be a list, not a %%.200s\", _PyType_Name(Py_TYPE(tmp)));" %
                       (name, field.name),
                       depth+2, reflow=False)
             self.emit("goto failed;", depth+2)
@@ -537,8 +566,11 @@
             self.emit("if (%s == NULL) goto failed;" % field.name, depth+1)
             self.emit("for (i = 0; i < len; i++) {", depth+1)
             self.emit("%s val;" % ctype, depth+2)
-            self.emit("res = obj2ast_%s(PyList_GET_ITEM(tmp, i), &val, arena);" %
+            self.emit("PyObject *tmp2 = PyList_GET_ITEM(tmp, i);", depth+2)
+            self.emit("Py_INCREF(tmp2);", depth+2)
+            self.emit("res = obj2ast_%s(state, tmp2, &val, arena);" %
                       field.type, depth+2, reflow=False)
+            self.emit("Py_DECREF(tmp2);", depth+2)
             self.emit("if (res != 0) goto failed;", depth+2)
             self.emit("if (len != PyList_GET_SIZE(tmp)) {", depth+2)
             self.emit("PyErr_SetString(PyExc_RuntimeError, \"%s field \\\"%s\\\" "
@@ -550,7 +582,7 @@
             self.emit("asdl_seq_SET(%s, i, val);" % field.name, depth+2)
             self.emit("}", depth+1)
         else:
-            self.emit("res = obj2ast_%s(tmp, &%s, arena);" %
+            self.emit("res = obj2ast_%s(state, tmp, &%s, arena);" %
                       (field.type, field.name), depth+1)
             self.emit("if (res != 0) goto failed;", depth+1)
 
@@ -571,50 +603,46 @@
 class PyTypesDeclareVisitor(PickleVisitor):
 
     def visitProduct(self, prod, name):
-        self.emit("static PyTypeObject *%s_type;" % name, 0)
-        self.emit("static PyObject* ast2obj_%s(void*);" % name, 0)
+        self.emit_type("%s_type" % name)
+        self.emit("static PyObject* ast2obj_%s(astmodulestate *state, void*);" % name, 0)
         if prod.attributes:
             for a in prod.attributes:
                 self.emit_identifier(a.name)
-            self.emit("static char *%s_attributes[] = {" % name, 0)
+            self.emit("static const char * const %s_attributes[] = {" % name, 0)
             for a in prod.attributes:
                 self.emit('"%s",' % a.name, 1)
             self.emit("};", 0)
         if prod.fields:
             for f in prod.fields:
                 self.emit_identifier(f.name)
-            self.emit("static char *%s_fields[]={" % name,0)
+            self.emit("static const char * const %s_fields[]={" % name,0)
             for f in prod.fields:
                 self.emit('"%s",' % f.name, 1)
             self.emit("};", 0)
 
     def visitSum(self, sum, name):
-        self.emit("static PyTypeObject *%s_type;" % name, 0)
+        self.emit_type("%s_type" % name)
         if sum.attributes:
             for a in sum.attributes:
                 self.emit_identifier(a.name)
-            self.emit("static char *%s_attributes[] = {" % name, 0)
+            self.emit("static const char * const %s_attributes[] = {" % name, 0)
             for a in sum.attributes:
                 self.emit('"%s",' % a.name, 1)
             self.emit("};", 0)
         ptype = "void*"
         if is_simple(sum):
             ptype = get_c_type(name)
-            tnames = []
             for t in sum.types:
-                tnames.append(str(t.name)+"_singleton")
-            tnames = ", *".join(tnames)
-            self.emit("static PyObject *%s;" % tnames, 0)
-        self.emit("static PyObject* ast2obj_%s(%s);" % (name, ptype), 0)
+                self.emit_singleton("%s_singleton" % t.name)
+        self.emit("static PyObject* ast2obj_%s(astmodulestate *state, %s);" % (name, ptype), 0)
         for t in sum.types:
             self.visitConstructor(t, name)
 
     def visitConstructor(self, cons, name):
-        self.emit("static PyTypeObject *%s_type;" % cons.name, 0)
         if cons.fields:
             for t in cons.fields:
                 self.emit_identifier(t.name)
-            self.emit("static char *%s_fields[]={" % cons.name, 0)
+            self.emit("static const char * const %s_fields[]={" % cons.name, 0)
             for t in cons.fields:
                 self.emit('"%s",' % t.name, 1)
             self.emit("};",0)
@@ -623,8 +651,6 @@
 
     def visitModule(self, mod):
         self.emit("""
-_Py_IDENTIFIER(_fields);
-_Py_IDENTIFIER(_attributes);
 
 typedef struct {
     PyObject_HEAD
@@ -635,14 +661,19 @@
 ast_dealloc(AST_object *self)
 {
     /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyTypeObject *tp = Py_TYPE(self);
     PyObject_GC_UnTrack(self);
     Py_CLEAR(self->dict);
-    Py_TYPE(self)->tp_free(self);
+    freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
+    assert(free_func != NULL);
+    free_func(self);
+    Py_DECREF(tp);
 }
 
 static int
 ast_traverse(AST_object *self, visitproc visit, void *arg)
 {
+    Py_VISIT(Py_TYPE(self));
     Py_VISIT(self->dict);
     return 0;
 }
@@ -657,10 +688,15 @@
 static int
 ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
 {
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
+        return -1;
+    }
+
     Py_ssize_t i, numfields = 0;
     int res = -1;
     PyObject *key, *value, *fields;
-    if (_PyObject_LookupAttrId((PyObject*)Py_TYPE(self), &PyId__fields, &fields) < 0) {
+    if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
         goto cleanup;
     }
     if (fields) {
@@ -674,7 +710,7 @@
     if (numfields < PyTuple_GET_SIZE(args)) {
         PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
                      "%zd positional argument%s",
-                     Py_TYPE(self)->tp_name,
+                     _PyType_Name(Py_TYPE(self)),
                      numfields, numfields == 1 ? "" : "s");
         res = -1;
         goto cleanup;
@@ -728,9 +764,13 @@
 static PyObject *
 ast_type_reduce(PyObject *self, PyObject *unused)
 {
-    _Py_IDENTIFIER(__dict__);
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
+        return NULL;
+    }
+
     PyObject *dict;
-    if (_PyObject_LookupAttrId(self, &PyId___dict__, &dict) < 0) {
+    if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
         return NULL;
     }
     if (dict) {
@@ -739,6 +779,11 @@
     return Py_BuildValue("O()", Py_TYPE(self));
 }
 
+static PyMemberDef ast_type_members[] = {
+    {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
+    {NULL}  /* Sentinel */
+};
+
 static PyMethodDef ast_type_methods[] = {
     {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
     {NULL}
@@ -749,96 +794,79 @@
     {NULL}
 };
 
-static PyTypeObject AST_type = {
-    PyVarObject_HEAD_INIT(&PyType_Type, 0)
-    "_ast.AST",
-    sizeof(AST_object),
-    0,
-    (destructor)ast_dealloc, /* tp_dealloc */
-    0,                       /* tp_vectorcall_offset */
-    0,                       /* tp_getattr */
-    0,                       /* tp_setattr */
-    0,                       /* tp_as_async */
-    0,                       /* tp_repr */
-    0,                       /* tp_as_number */
-    0,                       /* tp_as_sequence */
-    0,                       /* tp_as_mapping */
-    0,                       /* tp_hash */
-    0,                       /* tp_call */
-    0,                       /* tp_str */
-    PyObject_GenericGetAttr, /* tp_getattro */
-    PyObject_GenericSetAttr, /* tp_setattro */
-    0,                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */
-    0,                       /* tp_doc */
-    (traverseproc)ast_traverse, /* tp_traverse */
-    (inquiry)ast_clear,      /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    ast_type_methods,        /* tp_methods */
-    0,                       /* tp_members */
-    ast_type_getsets,        /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    offsetof(AST_object, dict),/* tp_dictoffset */
-    (initproc)ast_type_init, /* tp_init */
-    PyType_GenericAlloc,     /* tp_alloc */
-    PyType_GenericNew,       /* tp_new */
-    PyObject_GC_Del,         /* tp_free */
+static PyType_Slot AST_type_slots[] = {
+    {Py_tp_dealloc, ast_dealloc},
+    {Py_tp_getattro, PyObject_GenericGetAttr},
+    {Py_tp_setattro, PyObject_GenericSetAttr},
+    {Py_tp_traverse, ast_traverse},
+    {Py_tp_clear, ast_clear},
+    {Py_tp_members, ast_type_members},
+    {Py_tp_methods, ast_type_methods},
+    {Py_tp_getset, ast_type_getsets},
+    {Py_tp_init, ast_type_init},
+    {Py_tp_alloc, PyType_GenericAlloc},
+    {Py_tp_new, PyType_GenericNew},
+    {Py_tp_free, PyObject_GC_Del},
+    {0, 0},
 };
 
+static PyType_Spec AST_type_spec = {
+    "ast.AST",
+    sizeof(AST_object),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
+    AST_type_slots
+};
 
-static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
+static PyObject *
+make_type(astmodulestate *state, const char *type, PyObject* base,
+          const char* const* fields, int num_fields, const char *doc)
 {
-    _Py_IDENTIFIER(__module__);
-    _Py_IDENTIFIER(_ast);
     PyObject *fnames, *result;
     int i;
     fnames = PyTuple_New(num_fields);
     if (!fnames) return NULL;
     for (i = 0; i < num_fields; i++) {
-        PyObject *field = PyUnicode_FromString(fields[i]);
+        PyObject *field = PyUnicode_InternFromString(fields[i]);
         if (!field) {
             Py_DECREF(fnames);
             return NULL;
         }
         PyTuple_SET_ITEM(fnames, i, field);
     }
-    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}",
+    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOs}",
                     type, base,
-                    _PyUnicode_FromId(&PyId__fields), fnames,
-                    _PyUnicode_FromId(&PyId___module__),
-                    _PyUnicode_FromId(&PyId__ast));
+                    state->_fields, fnames,
+                    state->__module__,
+                    state->ast,
+                    state->__doc__, doc);
     Py_DECREF(fnames);
-    return (PyTypeObject*)result;
+    return result;
 }
 
-static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
+static int
+add_attributes(astmodulestate *state, PyObject *type, const char * const *attrs, int num_fields)
 {
     int i, result;
     PyObject *s, *l = PyTuple_New(num_fields);
     if (!l)
         return 0;
     for (i = 0; i < num_fields; i++) {
-        s = PyUnicode_FromString(attrs[i]);
+        s = PyUnicode_InternFromString(attrs[i]);
         if (!s) {
             Py_DECREF(l);
             return 0;
         }
         PyTuple_SET_ITEM(l, i, s);
     }
-    result = _PyObject_SetAttrId((PyObject*)type, &PyId__attributes, l) >= 0;
+    result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
     Py_DECREF(l);
     return result;
 }
 
 /* Conversion AST -> Python */
 
-static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
+static PyObject* ast2obj_list(astmodulestate *state, asdl_seq *seq, PyObject* (*func)(astmodulestate *state, void*))
 {
     Py_ssize_t i, n = asdl_seq_LEN(seq);
     PyObject *result = PyList_New(n);
@@ -846,7 +874,7 @@
     if (!result)
         return NULL;
     for (i = 0; i < n; i++) {
-        value = func(asdl_seq_GET(seq, i));
+        value = func(state, asdl_seq_GET(seq, i));
         if (!value) {
             Py_DECREF(result);
             return NULL;
@@ -856,27 +884,25 @@
     return result;
 }
 
-static PyObject* ast2obj_object(void *o)
+static PyObject* ast2obj_object(astmodulestate *Py_UNUSED(state), void *o)
 {
     if (!o)
         o = Py_None;
     Py_INCREF((PyObject*)o);
     return (PyObject*)o;
 }
-#define ast2obj_singleton ast2obj_object
 #define ast2obj_constant ast2obj_object
 #define ast2obj_identifier ast2obj_object
 #define ast2obj_string ast2obj_object
-#define ast2obj_bytes ast2obj_object
 
-static PyObject* ast2obj_int(long b)
+static PyObject* ast2obj_int(astmodulestate *Py_UNUSED(state), long b)
 {
     return PyLong_FromLong(b);
 }
 
 /* Conversion Python -> AST */
 
-static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_object(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (obj == Py_None)
         obj = NULL;
@@ -891,7 +917,7 @@
     return 0;
 }
 
-static int obj2ast_constant(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_constant(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (PyArena_AddPyObject(arena, obj) < 0) {
         *out = NULL;
@@ -902,25 +928,25 @@
     return 0;
 }
 
-static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_identifier(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
         PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
         return 1;
     }
-    return obj2ast_object(obj, out, arena);
+    return obj2ast_object(state, obj, out, arena);
 }
 
-static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_string(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
         PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
         return 1;
     }
-    return obj2ast_object(obj, out, arena);
+    return obj2ast_object(state, obj, out, arena);
 }
 
-static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
+static int obj2ast_int(astmodulestate* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
 {
     int i;
     if (!PyLong_Check(obj)) {
@@ -935,16 +961,13 @@
     return 0;
 }
 
-static int add_ast_fields(void)
+static int add_ast_fields(astmodulestate *state)
 {
-    PyObject *empty_tuple, *d;
-    if (PyType_Ready(&AST_type) < 0)
-        return -1;
-    d = AST_type.tp_dict;
+    PyObject *empty_tuple;
     empty_tuple = PyTuple_New(0);
     if (!empty_tuple ||
-        _PyDict_SetItemId(d, &PyId__fields, empty_tuple) < 0 ||
-        _PyDict_SetItemId(d, &PyId__attributes, empty_tuple) < 0) {
+        PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
+        PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
         Py_XDECREF(empty_tuple);
         return -1;
     }
@@ -954,14 +977,16 @@
 
 """, 0, reflow=False)
 
-        self.emit("static int init_types(void)",0)
+        self.emit("static int init_types(astmodulestate *state)",0)
         self.emit("{", 0)
-        self.emit("static int initialized;", 1)
-        self.emit("if (initialized) return 1;", 1)
-        self.emit("if (add_ast_fields() < 0) return 0;", 1)
+        self.emit("if (state->initialized) return 1;", 1)
+        self.emit("if (init_identifiers(state) < 0) return 0;", 1)
+        self.emit("state->AST_type = PyType_FromSpec(&AST_type_spec);", 1)
+        self.emit("if (!state->AST_type) return 0;", 1)
+        self.emit("if (add_ast_fields(state) < 0) return 0;", 1)
         for dfn in mod.dfns:
             self.visit(dfn)
-        self.emit("initialized = 1;", 1)
+        self.emit("state->initialized = 1;", 1)
         self.emit("return 1;", 1);
         self.emit("}", 0)
 
@@ -970,24 +995,32 @@
             fields = name+"_fields"
         else:
             fields = "NULL"
-        self.emit('%s_type = make_type("%s", &AST_type, %s, %d);' %
+        self.emit('state->%s_type = make_type(state, "%s", state->AST_type, %s, %d,' %
                         (name, name, fields, len(prod.fields)), 1)
-        self.emit("if (!%s_type) return 0;" % name, 1)
+        self.emit('%s);' % reflow_c_string(asdl_of(name, prod), 2), 2, reflow=False)
+        self.emit("if (!state->%s_type) return 0;" % name, 1)
+        self.emit_type("AST_type")
+        self.emit_type("%s_type" % name)
         if prod.attributes:
-            self.emit("if (!add_attributes(%s_type, %s_attributes, %d)) return 0;" %
+            self.emit("if (!add_attributes(state, state->%s_type, %s_attributes, %d)) return 0;" %
                             (name, name, len(prod.attributes)), 1)
         else:
-            self.emit("if (!add_attributes(%s_type, NULL, 0)) return 0;" % name, 1)
+            self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
+        self.emit_defaults(name, prod.fields, 1)
+        self.emit_defaults(name, prod.attributes, 1)
 
     def visitSum(self, sum, name):
-        self.emit('%s_type = make_type("%s", &AST_type, NULL, 0);' %
+        self.emit('state->%s_type = make_type(state, "%s", state->AST_type, NULL, 0,' %
                   (name, name), 1)
-        self.emit("if (!%s_type) return 0;" % name, 1)
+        self.emit('%s);' % reflow_c_string(asdl_of(name, sum), 2), 2, reflow=False)
+        self.emit_type("%s_type" % name)
+        self.emit("if (!state->%s_type) return 0;" % name, 1)
         if sum.attributes:
-            self.emit("if (!add_attributes(%s_type, %s_attributes, %d)) return 0;" %
+            self.emit("if (!add_attributes(state, state->%s_type, %s_attributes, %d)) return 0;" %
                             (name, name, len(sum.attributes)), 1)
         else:
-            self.emit("if (!add_attributes(%s_type, NULL, 0)) return 0;" % name, 1)
+            self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
+        self.emit_defaults(name, sum.attributes, 1)
         simple = is_simple(sum)
         for t in sum.types:
             self.visitConstructor(t, name, simple)
@@ -997,40 +1030,76 @@
             fields = cons.name+"_fields"
         else:
             fields = "NULL"
-        self.emit('%s_type = make_type("%s", %s_type, %s, %d);' %
+        self.emit('state->%s_type = make_type(state, "%s", state->%s_type, %s, %d,' %
                             (cons.name, cons.name, name, fields, len(cons.fields)), 1)
-        self.emit("if (!%s_type) return 0;" % cons.name, 1)
+        self.emit('%s);' % reflow_c_string(asdl_of(cons.name, cons), 2), 2, reflow=False)
+        self.emit("if (!state->%s_type) return 0;" % cons.name, 1)
+        self.emit_type("%s_type" % cons.name)
+        self.emit_defaults(cons.name, cons.fields, 1)
         if simple:
-            self.emit("%s_singleton = PyType_GenericNew(%s_type, NULL, NULL);" %
+            self.emit("state->%s_singleton = PyType_GenericNew((PyTypeObject *)"
+                      "state->%s_type, NULL, NULL);" %
                              (cons.name, cons.name), 1)
-            self.emit("if (!%s_singleton) return 0;" % cons.name, 1)
+            self.emit("if (!state->%s_singleton) return 0;" % cons.name, 1)
+
+    def emit_defaults(self, name, fields, depth):
+        for field in fields:
+            if field.opt:
+                self.emit('if (PyObject_SetAttr(state->%s_type, state->%s, Py_None) == -1)' %
+                            (name, field.name), depth)
+                self.emit("return 0;", depth+1)
 
 
 class ASTModuleVisitor(PickleVisitor):
 
     def visitModule(self, mod):
-        self.emit("static struct PyModuleDef _astmodule = {", 0)
-        self.emit('  PyModuleDef_HEAD_INIT, "_ast"', 0)
-        self.emit("};", 0)
-        self.emit("PyMODINIT_FUNC", 0)
-        self.emit("PyInit__ast(void)", 0)
+        self.emit("static int", 0)
+        self.emit("astmodule_exec(PyObject *m)", 0)
         self.emit("{", 0)
-        self.emit("PyObject *m, *d;", 1)
-        self.emit("if (!init_types()) return NULL;", 1)
-        self.emit('m = PyModule_Create(&_astmodule);', 1)
-        self.emit("if (!m) return NULL;", 1)
-        self.emit("d = PyModule_GetDict(m);", 1)
-        self.emit('if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return NULL;', 1)
-        self.emit('if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0)', 1)
-        self.emit("return NULL;", 2)
-        self.emit('if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0)', 1)
-        self.emit("return NULL;", 2)
-        self.emit('if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0)', 1)
-        self.emit("return NULL;", 2)
+        self.emit('astmodulestate *state = get_ast_state(m);', 1)
+        self.emit("", 0)
+
+        self.emit("if (!init_types(state)) {", 1)
+        self.emit("return -1;", 2)
+        self.emit("}", 1)
+        self.emit('if (PyModule_AddObject(m, "AST", state->AST_type) < 0) {', 1)
+        self.emit('return -1;', 2)
+        self.emit('}', 1)
+        self.emit('Py_INCREF(state->AST_type);', 1)
+        self.emit('if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {', 1)
+        self.emit("return -1;", 2)
+        self.emit('}', 1)
+        self.emit('if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {', 1)
+        self.emit("return -1;", 2)
+        self.emit('}', 1)
+        self.emit('if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {', 1)
+        self.emit("return -1;", 2)
+        self.emit('}', 1)
         for dfn in mod.dfns:
             self.visit(dfn)
-        self.emit("return m;", 1)
+        self.emit("return 0;", 1)
         self.emit("}", 0)
+        self.emit("", 0)
+        self.emit("""
+static PyModuleDef_Slot astmodule_slots[] = {
+    {Py_mod_exec, astmodule_exec},
+    {0, NULL}
+};
+
+static struct PyModuleDef _astmodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "_ast",
+    // The _ast module uses a global state (global_ast_state).
+    .m_size = 0,
+    .m_slots = astmodule_slots,
+};
+
+PyMODINIT_FUNC
+PyInit__ast(void)
+{
+    return PyModuleDef_Init(&_astmodule);
+}
+""".strip(), 0, reflow=False)
 
     def visitProduct(self, prod, name):
         self.addObj(name)
@@ -1044,7 +1113,11 @@
         self.addObj(cons.name)
 
     def addObj(self, name):
-        self.emit('if (PyDict_SetItemString(d, "%s", (PyObject*)%s_type) < 0) return NULL;' % (name, name), 1)
+        self.emit("if (PyModule_AddObject(m, \"%s\", "
+                  "state->%s_type) < 0) {" % (name, name), 1)
+        self.emit("return -1;", 2)
+        self.emit('}', 1)
+        self.emit("Py_INCREF(state->%s_type);" % name, 1)
 
 
 _SPECIALIZED_SEQUENCES = ('stmt', 'expr')
@@ -1078,14 +1151,14 @@
     def func_begin(self, name):
         ctype = get_c_type(name)
         self.emit("PyObject*", 0)
-        self.emit("ast2obj_%s(void* _o)" % (name), 0)
+        self.emit("ast2obj_%s(astmodulestate *state, void* _o)" % (name), 0)
         self.emit("{", 0)
         self.emit("%s o = (%s)_o;" % (ctype, ctype), 1)
         self.emit("PyObject *result = NULL, *value = NULL;", 1)
+        self.emit("PyTypeObject *tp;", 1)
         self.emit('if (!o) {', 1)
         self.emit("Py_RETURN_NONE;", 2)
         self.emit("}", 1)
-        self.emit('', 0)
 
     def func_end(self):
         self.emit("return result;", 1)
@@ -1107,46 +1180,44 @@
             self.visitConstructor(t, i + 1, name)
         self.emit("}", 1)
         for a in sum.attributes:
-            self.emit("value = ast2obj_%s(o->%s);" % (a.type, a.name), 1)
+            self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
             self.emit("if (!value) goto failed;", 1)
-            self.emit('if (_PyObject_SetAttrId(result, &PyId_%s, value) < 0)' % a.name, 1)
+            self.emit('if (PyObject_SetAttr(result, state->%s, value) < 0)' % a.name, 1)
             self.emit('goto failed;', 2)
             self.emit('Py_DECREF(value);', 1)
         self.func_end()
 
     def simpleSum(self, sum, name):
-        self.emit("PyObject* ast2obj_%s(%s_ty o)" % (name, name), 0)
+        self.emit("PyObject* ast2obj_%s(astmodulestate *state, %s_ty o)" % (name, name), 0)
         self.emit("{", 0)
         self.emit("switch(o) {", 1)
         for t in sum.types:
             self.emit("case %s:" % t.name, 2)
-            self.emit("Py_INCREF(%s_singleton);" % t.name, 3)
-            self.emit("return %s_singleton;" % t.name, 3)
-        self.emit("default:", 2)
-        self.emit('/* should never happen, but just in case ... */', 3)
-        code = "PyErr_Format(PyExc_SystemError, \"unknown %s found\");" % name
-        self.emit(code, 3, reflow=False)
-        self.emit("return NULL;", 3)
+            self.emit("Py_INCREF(state->%s_singleton);" % t.name, 3)
+            self.emit("return state->%s_singleton;" % t.name, 3)
         self.emit("}", 1)
+        self.emit("Py_UNREACHABLE();", 1);
         self.emit("}", 0)
 
     def visitProduct(self, prod, name):
         self.func_begin(name)
-        self.emit("result = PyType_GenericNew(%s_type, NULL, NULL);" % name, 1);
+        self.emit("tp = (PyTypeObject *)state->%s_type;" % name, 1)
+        self.emit("result = PyType_GenericNew(tp, NULL, NULL);", 1);
         self.emit("if (!result) return NULL;", 1)
         for field in prod.fields:
             self.visitField(field, name, 1, True)
         for a in prod.attributes:
-            self.emit("value = ast2obj_%s(o->%s);" % (a.type, a.name), 1)
+            self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
             self.emit("if (!value) goto failed;", 1)
-            self.emit('if (_PyObject_SetAttrId(result, &PyId_%s, value) < 0)' % a.name, 1)
+            self.emit("if (PyObject_SetAttr(result, state->%s, value) < 0)" % a.name, 1)
             self.emit('goto failed;', 2)
             self.emit('Py_DECREF(value);', 1)
         self.func_end()
 
     def visitConstructor(self, cons, enum, name):
         self.emit("case %s_kind:" % cons.name, 1)
-        self.emit("result = PyType_GenericNew(%s_type, NULL, NULL);" % cons.name, 2);
+        self.emit("tp = (PyTypeObject *)state->%s_type;" % cons.name, 2)
+        self.emit("result = PyType_GenericNew(tp, NULL, NULL);", 2);
         self.emit("if (!result) goto failed;", 2)
         for f in cons.fields:
             self.visitField(f, cons.name, 2, False)
@@ -1161,7 +1232,7 @@
             value = "o->v.%s.%s" % (name, field.name)
         self.set(field, value, depth)
         emit("if (!value) goto failed;", 0)
-        emit('if (_PyObject_SetAttrId(result, &PyId_%s, value) == -1)' % field.name, 0)
+        emit("if (PyObject_SetAttr(result, state->%s, value) == -1)" % field.name, 0)
         emit("goto failed;", 1)
         emit("Py_DECREF(value);", 0)
 
@@ -1189,14 +1260,14 @@
                 self.emit("if (!value) goto failed;", depth+1)
                 self.emit("for(i = 0; i < n; i++)", depth+1)
                 # This cannot fail, so no need for error handling
-                self.emit("PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(%s, i)));" % value,
+                self.emit("PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(%s, i)));" % value,
                           depth+2, reflow=False)
                 self.emit("}", depth)
             else:
-                self.emit("value = ast2obj_list(%s, ast2obj_%s);" % (value, field.type), depth)
+                self.emit("value = ast2obj_list(state, %s, ast2obj_%s);" % (value, field.type), depth)
         else:
             ctype = get_c_type(field.type)
-            self.emit("value = ast2obj_%s(%s);" % (field.type, value), depth, reflow=False)
+            self.emit("value = ast2obj_%s(state, %s);" % (field.type, value), depth, reflow=False)
 
 
 class PartingShots(StaticVisitor):
@@ -1204,42 +1275,42 @@
     CODE = """
 PyObject* PyAST_mod2obj(mod_ty t)
 {
-    if (!init_types())
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
         return NULL;
-    return ast2obj_mod(t);
+    }
+    return ast2obj_mod(state, t);
 }
 
 /* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
 mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
 {
-    PyObject *req_type[3];
-    char *req_name[] = {"Module", "Expression", "Interactive"};
+    const char * const req_name[] = {"Module", "Expression", "Interactive"};
     int isinstance;
 
     if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
         return NULL;
     }
 
-    req_type[0] = (PyObject*)Module_type;
-    req_type[1] = (PyObject*)Expression_type;
-    req_type[2] = (PyObject*)Interactive_type;
+    astmodulestate *state = get_global_ast_state();
+    PyObject *req_type[3];
+    req_type[0] = state->Module_type;
+    req_type[1] = state->Expression_type;
+    req_type[2] = state->Interactive_type;
 
     assert(0 <= mode && mode <= 2);
 
-    if (!init_types())
-        return NULL;
-
     isinstance = PyObject_IsInstance(ast, req_type[mode]);
     if (isinstance == -1)
         return NULL;
     if (!isinstance) {
         PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
-                     req_name[mode], Py_TYPE(ast)->tp_name);
+                     req_name[mode], _PyType_Name(Py_TYPE(ast)));
         return NULL;
     }
 
     mod_ty res = NULL;
-    if (obj2ast_mod(ast, &res, arena) != 0)
+    if (obj2ast_mod(state, ast, &res, arena) != 0)
         return NULL;
     else
         return res;
@@ -1247,9 +1318,11 @@
 
 int PyAST_Check(PyObject* obj)
 {
-    if (!init_types())
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
         return -1;
-    return PyObject_IsInstance(obj, (PyObject*)&AST_type);
+    }
+    return PyObject_IsInstance(obj, state->AST_type);
 }
 """
 
@@ -1262,87 +1335,160 @@
             v.visit(object)
             v.emit("", 0)
 
-common_msg = "/* File automatically generated by %s. */\n\n"
 
-def main(srcfile, dump_module=False):
-    argv0 = sys.argv[0]
-    components = argv0.split(os.sep)
-    argv0 = os.sep.join(components[-2:])
-    auto_gen_msg = common_msg % argv0
-    mod = asdl.parse(srcfile)
+def generate_module_def(f, mod):
+    # Gather all the data needed for ModuleSpec
+    visitor_list = set()
+    with open(os.devnull, "w") as devnull:
+        visitor = PyTypesDeclareVisitor(devnull)
+        visitor.visit(mod)
+        visitor_list.add(visitor)
+        visitor = PyTypesVisitor(devnull)
+        visitor.visit(mod)
+        visitor_list.add(visitor)
+
+    state_strings = {
+        "ast",
+        "_fields",
+        "__doc__",
+        "__dict__",
+        "__module__",
+        "_attributes",
+    }
+    module_state = state_strings.copy()
+    for visitor in visitor_list:
+        for identifier in visitor.identifiers:
+            module_state.add(identifier)
+            state_strings.add(identifier)
+        for singleton in visitor.singletons:
+            module_state.add(singleton)
+        for tp in visitor.types:
+            module_state.add(tp)
+    state_strings = sorted(state_strings)
+    module_state = sorted(module_state)
+    f.write('typedef struct {\n')
+    f.write('    int initialized;\n')
+    for s in module_state:
+        f.write('    PyObject *' + s + ';\n')
+    f.write('} astmodulestate;\n\n')
+    f.write("""
+// Forward declaration
+static int init_types(astmodulestate *state);
+
+// bpo-41194, bpo-41261, bpo-41631: The _ast module uses a global state.
+static astmodulestate global_ast_state = {0};
+
+static astmodulestate*
+get_global_ast_state(void)
+{
+    astmodulestate* state = &global_ast_state;
+    if (!init_types(state)) {
+        return NULL;
+    }
+    return state;
+}
+
+static astmodulestate*
+get_ast_state(PyObject* Py_UNUSED(module))
+{
+    astmodulestate* state = get_global_ast_state();
+    // get_ast_state() must only be called after _ast module is imported,
+    // and astmodule_exec() calls init_types()
+    assert(state != NULL);
+    return state;
+}
+
+void _PyAST_Fini()
+{
+    astmodulestate* state = &global_ast_state;
+""")
+    for s in module_state:
+        f.write("    Py_CLEAR(state->" + s + ');\n')
+    f.write("""
+    state->initialized = 0;
+}
+
+""")
+    f.write('static int init_identifiers(astmodulestate *state)\n')
+    f.write('{\n')
+    for identifier in state_strings:
+        f.write('    if ((state->' + identifier)
+        f.write(' = PyUnicode_InternFromString("')
+        f.write(identifier + '")) == NULL) return 0;\n')
+    f.write('    return 1;\n')
+    f.write('};\n\n')
+
+def write_header(f, mod):
+    f.write('#ifndef Py_PYTHON_AST_H\n')
+    f.write('#define Py_PYTHON_AST_H\n')
+    f.write('#ifdef __cplusplus\n')
+    f.write('extern "C" {\n')
+    f.write('#endif\n')
+    f.write('\n')
+    f.write('#ifndef Py_LIMITED_API\n')
+    f.write('#include "asdl.h"\n')
+    f.write('\n')
+    f.write('#undef Yield   /* undefine macro conflicting with <winbase.h> */\n')
+    f.write('\n')
+    c = ChainOfVisitors(TypeDefVisitor(f),
+                        StructVisitor(f))
+    c.visit(mod)
+    f.write("// Note: these macros affect function definitions, not only call sites.\n")
+    PrototypeVisitor(f).visit(mod)
+    f.write("\n")
+    f.write("PyObject* PyAST_mod2obj(mod_ty t);\n")
+    f.write("mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);\n")
+    f.write("int PyAST_Check(PyObject* obj);\n")
+    f.write("#endif /* !Py_LIMITED_API */\n")
+    f.write('\n')
+    f.write('#ifdef __cplusplus\n')
+    f.write('}\n')
+    f.write('#endif\n')
+    f.write('#endif /* !Py_PYTHON_AST_H */\n')
+
+def write_source(f, mod):
+    f.write('#include <stddef.h>\n')
+    f.write('\n')
+    f.write('#include "Python.h"\n')
+    f.write('#include "%s-ast.h"\n' % mod.name)
+    f.write('#include "structmember.h"         // PyMemberDef\n')
+    f.write('\n')
+
+    generate_module_def(f, mod)
+
+    v = ChainOfVisitors(
+        PyTypesDeclareVisitor(f),
+        PyTypesVisitor(f),
+        Obj2ModPrototypeVisitor(f),
+        FunctionVisitor(f),
+        ObjVisitor(f),
+        Obj2ModVisitor(f),
+        ASTModuleVisitor(f),
+        PartingShots(f),
+    )
+    v.visit(mod)
+
+def main(input_file, c_file, h_file, dump_module=False):
+    auto_gen_msg = AUTOGEN_MESSAGE.format("/".join(Path(__file__).parts[-2:]))
+    mod = asdl.parse(input_file)
     if dump_module:
         print('Parsed Module:')
         print(mod)
     if not asdl.check(mod):
         sys.exit(1)
-    if H_FILE:
-        with open(H_FILE, "w") as f:
-            f.write(auto_gen_msg)
-            f.write('#ifndef Py_PYTHON_AST_H\n')
-            f.write('#define Py_PYTHON_AST_H\n')
-            f.write('#ifdef __cplusplus\n')
-            f.write('extern "C" {\n')
-            f.write('#endif\n')
-            f.write('\n')
-            f.write('#include "asdl.h"\n')
-            f.write('\n')
-            f.write('#undef Yield   /* undefine macro conflicting with <winbase.h> */\n')
-            f.write('\n')
-            c = ChainOfVisitors(TypeDefVisitor(f),
-                                StructVisitor(f))
-
-            c.visit(mod)
-            f.write("// Note: these macros affect function definitions, not only call sites.\n")
-            PrototypeVisitor(f).visit(mod)
-            f.write("\n")
-            f.write("PyObject* PyAST_mod2obj(mod_ty t);\n")
-            f.write("mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);\n")
-            f.write("int PyAST_Check(PyObject* obj);\n")
-            f.write('\n')
-            f.write('#ifdef __cplusplus\n')
-            f.write('}\n')
-            f.write('#endif\n')
-            f.write('#endif /* !Py_PYTHON_AST_H */\n')
-
-    if C_FILE:
-        with open(C_FILE, "w") as f:
-            f.write(auto_gen_msg)
-            f.write('#include <stddef.h>\n')
-            f.write('\n')
-            f.write('#include "Python.h"\n')
-            f.write('#include "%s-ast.h"\n' % mod.name)
-            f.write('\n')
-            f.write("static PyTypeObject AST_type;\n")
-            v = ChainOfVisitors(
-                PyTypesDeclareVisitor(f),
-                PyTypesVisitor(f),
-                Obj2ModPrototypeVisitor(f),
-                FunctionVisitor(f),
-                ObjVisitor(f),
-                Obj2ModVisitor(f),
-                ASTModuleVisitor(f),
-                PartingShots(f),
-                )
-            v.visit(mod)
+    for file, writer in (c_file, write_source), (h_file, write_header):
+        if file is not None:
+            with file.open("w") as f:
+                f.write(auto_gen_msg)
+                writer(f, mod)
+            print(file, "regenerated.")
 
 if __name__ == "__main__":
-    import getopt
+    parser = ArgumentParser()
+    parser.add_argument("input_file", type=Path)
+    parser.add_argument("-C", "--c-file", type=Path, default=None)
+    parser.add_argument("-H", "--h-file", type=Path, default=None)
+    parser.add_argument("-d", "--dump-module", action="store_true")
 
-    H_FILE = ''
-    C_FILE = ''
-    dump_module = False
-    opts, args = getopt.getopt(sys.argv[1:], "dh:c:")
-    for o, v in opts:
-        if o == '-h':
-            H_FILE = v
-        elif o == '-c':
-            C_FILE = v
-        elif o == '-d':
-            dump_module = True
-    if H_FILE and C_FILE:
-        print('Must specify exactly one output file')
-        sys.exit(1)
-    elif len(args) != 1:
-        print('Must specify single input file')
-        sys.exit(1)
-    main(args[0], dump_module)
+    options = parser.parse_args()
+    main(**vars(options))
diff --git a/Parser/grammar1.c b/Parser/grammar1.c
index e0b8fbb..c702040 100644
--- a/Parser/grammar1.c
+++ b/Parser/grammar1.c
@@ -41,7 +41,7 @@
         }
     }
     else {
-        Py_FatalError("invalid label");
+        Py_FatalError("invalid grammar label");
         return NULL;
     }
 }
diff --git a/Parser/listnode.c b/Parser/listnode.c
index 8f1a116..c806b98 100644
--- a/Parser/listnode.c
+++ b/Parser/listnode.c
@@ -2,6 +2,8 @@
 /* List a node on a file */
 
 #include "Python.h"
+#include "pycore_interp.h"        // PyInterpreterState.parser
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
 #include "token.h"
 #include "node.h"
 
@@ -15,19 +17,21 @@
     listnode(stdout, n);
 }
 
-static int level, atbol;
-
 static void
 listnode(FILE *fp, node *n)
 {
-    level = 0;
-    atbol = 1;
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+
+    interp->parser.listnode.level = 0;
+    interp->parser.listnode.atbol = 1;
     list1node(fp, n);
 }
 
 static void
 list1node(FILE *fp, node *n)
 {
+    PyInterpreterState *interp;
+
     if (n == NULL)
         return;
     if (ISNONTERMINAL(TYPE(n))) {
@@ -36,25 +40,26 @@
             list1node(fp, CHILD(n, i));
     }
     else if (ISTERMINAL(TYPE(n))) {
+        interp = _PyInterpreterState_GET();
         switch (TYPE(n)) {
         case INDENT:
-            ++level;
+            interp->parser.listnode.level++;
             break;
         case DEDENT:
-            --level;
+            interp->parser.listnode.level--;
             break;
         default:
-            if (atbol) {
+            if (interp->parser.listnode.atbol) {
                 int i;
-                for (i = 0; i < level; ++i)
+                for (i = 0; i < interp->parser.listnode.level; ++i)
                     fprintf(fp, "\t");
-                atbol = 0;
+                interp->parser.listnode.atbol = 0;
             }
             if (TYPE(n) == NEWLINE) {
                 if (STR(n) != NULL)
                     fprintf(fp, "%s", STR(n));
                 fprintf(fp, "\n");
-                atbol = 1;
+                interp->parser.listnode.atbol = 1;
             }
             else
                 fprintf(fp, "%s ", STR(n));
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index d7ed357..143b41f 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -10,16 +10,15 @@
 */
 
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"   // _PyThreadState_GET()
 #ifdef MS_WINDOWS
-#define WIN32_LEAN_AND_MEAN
-#include "windows.h"
+#  define WIN32_LEAN_AND_MEAN
+#  include "windows.h"
 #endif /* MS_WINDOWS */
 
 
 PyThreadState* _PyOS_ReadlineTState = NULL;
 
-#include "pythread.h"
 static PyThread_type_lock _PyOS_ReadlineLock = NULL;
 
 int (*PyOS_InputHook)(void) = NULL;
@@ -292,37 +291,16 @@
     }
 #endif
 
-    n = 100;
-    p = (char *)PyMem_RawMalloc(n);
-    if (p == NULL) {
-        PyEval_RestoreThread(tstate);
-        PyErr_NoMemory();
-        PyEval_SaveThread();
-        return NULL;
-    }
-
     fflush(sys_stdout);
     if (prompt) {
         fprintf(stderr, "%s", prompt);
     }
     fflush(stderr);
 
-    switch (my_fgets(tstate, p, (int)n, sys_stdin)) {
-    case 0: /* Normal case */
-        break;
-    case 1: /* Interrupt */
-        PyMem_RawFree(p);
-        return NULL;
-    case -1: /* EOF */
-    case -2: /* Error */
-    default: /* Shouldn't happen */
-        *p = '\0';
-        break;
-    }
-
-    n = strlen(p);
-    while (n > 0 && p[n-1] != '\n') {
-        size_t incr = n+2;
+    n = 0;
+    p = NULL;
+    do {
+        size_t incr = (n > 0) ? n + 2 : 100;
         if (incr > INT_MAX) {
             PyMem_RawFree(p);
             PyEval_RestoreThread(tstate);
@@ -330,7 +308,6 @@
             PyEval_SaveThread();
             return NULL;
         }
-
         pr = (char *)PyMem_RawRealloc(p, n + incr);
         if (pr == NULL) {
             PyMem_RawFree(p);
@@ -340,12 +317,18 @@
             return NULL;
         }
         p = pr;
-
-        if (my_fgets(tstate, p+n, (int)incr, sys_stdin) != 0) {
+        int err = my_fgets(tstate, p + n, (int)incr, sys_stdin);
+        if (err == 1) {
+            // Interrupt
+            PyMem_RawFree(p);
+            return NULL;
+        } else if (err != 0) {
+            // EOF or error
+            p[n] = '\0';
             break;
         }
-        n += strlen(p+n);
-    }
+        n += strlen(p + n);
+    } while (p[n-1] != '\n');
 
     pr = (char *)PyMem_RawRealloc(p, n+1);
     if (pr == NULL) {
diff --git a/Parser/node.c b/Parser/node.c
index f1b70e0..8789e01 100644
--- a/Parser/node.c
+++ b/Parser/node.c
@@ -14,6 +14,7 @@
     n->n_str = NULL;
     n->n_lineno = 0;
     n->n_end_lineno = 0;
+    n->n_col_offset = 0;
     n->n_end_col_offset = -1;
     n->n_nchildren = 0;
     n->n_child = NULL;
diff --git a/Parser/parser.c b/Parser/parser.c
index 227b918..a61b2f5 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -54,8 +54,9 @@
 static void
 s_pop(stack *s)
 {
-    if (s_empty(s))
-        Py_FatalError("s_pop: parser stack underflow -- FATAL");
+    if (s_empty(s)) {
+        Py_FatalError("parser stack underflow");
+    }
     s->s_top++;
 }
 
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index 2bb733d..1ecb2c4 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -37,11 +37,13 @@
 static int
 growable_comment_array_add(growable_comment_array *arr, int lineno, char *comment) {
     if (arr->num_items >= arr->size) {
-        arr->size *= 2;
-        arr->items = realloc(arr->items, arr->size * sizeof(*arr->items));
-        if (!arr->items) {
+        size_t new_size = arr->size * 2;
+        void *new_items_array = realloc(arr->items, new_size * sizeof(*arr->items));
+        if (!new_items_array) {
             return 0;
         }
+        arr->items = new_items_array;
+        arr->size = new_size;
     }
 
     arr->items[arr->num_items].lineno = lineno;
@@ -207,24 +209,6 @@
     return n;
 }
 
-#ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
-#if 0
-static const char with_msg[] =
-"%s:%d: Warning: 'with' will become a reserved keyword in Python 2.6\n";
-
-static const char as_msg[] =
-"%s:%d: Warning: 'as' will become a reserved keyword in Python 2.6\n";
-
-static void
-warn(const char *msg, const char *filename, int lineno)
-{
-    if (filename == NULL)
-        filename = "<string>";
-    PySys_WriteStderr(msg, filename, lineno);
-}
-#endif
-#endif
-
 /* Parse input coming from the given tokenizer structure.
    Return error code. */
 
@@ -258,7 +242,7 @@
 #endif
 
     for (;;) {
-        char *a, *b;
+        const char *a, *b;
         int type;
         size_t len;
         char *str;
@@ -267,25 +251,7 @@
         const char *line_start;
 
         type = PyTokenizer_Get(tok, &a, &b);
-        if (type == ERRORTOKEN) {
-            err_ret->error = tok->done;
-            break;
-        }
-        if (type == ENDMARKER && started) {
-            type = NEWLINE; /* Add an extra newline */
-            started = 0;
-            /* Add the right number of dedent tokens,
-               except if a certain flag is given --
-               codeop.py uses this. */
-            if (tok->indent &&
-                !(*flags & PyPARSE_DONT_IMPLY_DEDENT))
-            {
-                tok->pendin = -tok->indent;
-                tok->indent = 0;
-            }
-        }
-        else
-            started = 1;
+
         len = (a != NULL && b != NULL) ? b - a : 0;
         str = (char *) PyObject_MALLOC(len + 1);
         if (str == NULL) {
@@ -344,10 +310,34 @@
             continue;
         }
 
+        if (type == ERRORTOKEN) {
+            err_ret->error = tok->done;
+            break;
+        }
+        if (type == ENDMARKER && started) {
+            type = NEWLINE; /* Add an extra newline */
+            started = 0;
+            /* Add the right number of dedent tokens,
+               except if a certain flag is given --
+               codeop.py uses this. */
+            if (tok->indent &&
+                !(*flags & PyPARSE_DONT_IMPLY_DEDENT))
+            {
+                tok->pendin = -tok->indent;
+                tok->indent = 0;
+            }
+        }
+        else {
+            started = 1;
+        }
+
         if ((err_ret->error =
              PyParser_AddToken(ps, (int)type, str,
                                lineno, col_offset, tok->lineno, end_col_offset,
                                &(err_ret->expected))) != E_OK) {
+            if (tok->done == E_EOF && !ISWHITESPACE(type)) {
+                tok->done = E_SYNTAX;
+            }
             if (err_ret->error != E_DONE) {
                 PyObject_FREE(str);
                 err_ret->token = type;
@@ -389,7 +379,7 @@
            buffer after parsing.  Trailing whitespace and comments
            are OK.  */
         if (err_ret->error == E_DONE && start == single_input) {
-            char *cur = tok->cur;
+            const char *cur = tok->cur;
             char c = *tok->cur;
 
             for (;;) {
diff --git a/Parser/pegen/parse.c b/Parser/pegen/parse.c
new file mode 100644
index 0000000..0eb61db
--- /dev/null
+++ b/Parser/pegen/parse.c
@@ -0,0 +1,24774 @@
+// @generated by pegen.py from ./Grammar/python.gram
+#include "pegen.h"
+
+#if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
+extern int Py_DebugFlag;
+#define D(x) if (Py_DebugFlag) x;
+#else
+#define D(x)
+#endif
+static const int n_keyword_lists = 15;
+static KeywordToken *reserved_keywords[] = {
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {
+        {"if", 510},
+        {"in", 518},
+        {"as", 520},
+        {"is", 527},
+        {"or", 532},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {
+        {"del", 503},
+        {"try", 511},
+        {"for", 517},
+        {"def", 523},
+        {"not", 526},
+        {"and", 533},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {
+        {"pass", 502},
+        {"from", 514},
+        {"elif", 515},
+        {"else", 516},
+        {"with", 519},
+        {"True", 528},
+        {"None", 530},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {
+        {"raise", 501},
+        {"yield", 504},
+        {"break", 506},
+        {"while", 512},
+        {"class", 524},
+        {"False", 529},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {
+        {"return", 500},
+        {"assert", 505},
+        {"global", 508},
+        {"import", 513},
+        {"except", 521},
+        {"lambda", 525},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {
+        {"finally", 522},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {
+        {"continue", 507},
+        {"nonlocal", 509},
+        {NULL, -1},
+    },
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {{NULL, -1}},
+    (KeywordToken[]) {
+        {"__peg_parser__", 531},
+        {NULL, -1},
+    },
+};
+#define file_type 1000
+#define interactive_type 1001
+#define eval_type 1002
+#define func_type_type 1003
+#define fstring_type 1004
+#define type_expressions_type 1005
+#define statements_type 1006
+#define statement_type 1007
+#define statement_newline_type 1008
+#define simple_stmt_type 1009
+#define small_stmt_type 1010
+#define compound_stmt_type 1011
+#define assignment_type 1012
+#define augassign_type 1013
+#define global_stmt_type 1014
+#define nonlocal_stmt_type 1015
+#define yield_stmt_type 1016
+#define assert_stmt_type 1017
+#define del_stmt_type 1018
+#define import_stmt_type 1019
+#define import_name_type 1020
+#define import_from_type 1021
+#define import_from_targets_type 1022
+#define import_from_as_names_type 1023
+#define import_from_as_name_type 1024
+#define dotted_as_names_type 1025
+#define dotted_as_name_type 1026
+#define dotted_name_type 1027  // Left-recursive
+#define if_stmt_type 1028
+#define elif_stmt_type 1029
+#define else_block_type 1030
+#define while_stmt_type 1031
+#define for_stmt_type 1032
+#define with_stmt_type 1033
+#define with_item_type 1034
+#define try_stmt_type 1035
+#define except_block_type 1036
+#define finally_block_type 1037
+#define return_stmt_type 1038
+#define raise_stmt_type 1039
+#define function_def_type 1040
+#define function_def_raw_type 1041
+#define func_type_comment_type 1042
+#define params_type 1043
+#define parameters_type 1044
+#define slash_no_default_type 1045
+#define slash_with_default_type 1046
+#define star_etc_type 1047
+#define kwds_type 1048
+#define param_no_default_type 1049
+#define param_with_default_type 1050
+#define param_maybe_default_type 1051
+#define param_type 1052
+#define annotation_type 1053
+#define default_type 1054
+#define decorators_type 1055
+#define class_def_type 1056
+#define class_def_raw_type 1057
+#define block_type 1058
+#define star_expressions_type 1059
+#define star_expression_type 1060
+#define star_named_expressions_type 1061
+#define star_named_expression_type 1062
+#define named_expression_type 1063
+#define annotated_rhs_type 1064
+#define expressions_type 1065
+#define expression_type 1066
+#define lambdef_type 1067
+#define lambda_params_type 1068
+#define lambda_parameters_type 1069
+#define lambda_slash_no_default_type 1070
+#define lambda_slash_with_default_type 1071
+#define lambda_star_etc_type 1072
+#define lambda_kwds_type 1073
+#define lambda_param_no_default_type 1074
+#define lambda_param_with_default_type 1075
+#define lambda_param_maybe_default_type 1076
+#define lambda_param_type 1077
+#define disjunction_type 1078
+#define conjunction_type 1079
+#define inversion_type 1080
+#define comparison_type 1081
+#define compare_op_bitwise_or_pair_type 1082
+#define eq_bitwise_or_type 1083
+#define noteq_bitwise_or_type 1084
+#define lte_bitwise_or_type 1085
+#define lt_bitwise_or_type 1086
+#define gte_bitwise_or_type 1087
+#define gt_bitwise_or_type 1088
+#define notin_bitwise_or_type 1089
+#define in_bitwise_or_type 1090
+#define isnot_bitwise_or_type 1091
+#define is_bitwise_or_type 1092
+#define bitwise_or_type 1093  // Left-recursive
+#define bitwise_xor_type 1094  // Left-recursive
+#define bitwise_and_type 1095  // Left-recursive
+#define shift_expr_type 1096  // Left-recursive
+#define sum_type 1097  // Left-recursive
+#define term_type 1098  // Left-recursive
+#define factor_type 1099
+#define power_type 1100
+#define await_primary_type 1101
+#define primary_type 1102  // Left-recursive
+#define slices_type 1103
+#define slice_type 1104
+#define atom_type 1105
+#define strings_type 1106
+#define list_type 1107
+#define listcomp_type 1108
+#define tuple_type 1109
+#define group_type 1110
+#define genexp_type 1111
+#define set_type 1112
+#define setcomp_type 1113
+#define dict_type 1114
+#define dictcomp_type 1115
+#define double_starred_kvpairs_type 1116
+#define double_starred_kvpair_type 1117
+#define kvpair_type 1118
+#define for_if_clauses_type 1119
+#define for_if_clause_type 1120
+#define yield_expr_type 1121
+#define arguments_type 1122
+#define args_type 1123
+#define kwargs_type 1124
+#define starred_expression_type 1125
+#define kwarg_or_starred_type 1126
+#define kwarg_or_double_starred_type 1127
+#define star_targets_type 1128
+#define star_targets_seq_type 1129
+#define star_target_type 1130
+#define star_atom_type 1131
+#define single_target_type 1132
+#define single_subscript_attribute_target_type 1133
+#define del_targets_type 1134
+#define del_target_type 1135
+#define del_t_atom_type 1136
+#define targets_type 1137
+#define target_type 1138
+#define t_primary_type 1139  // Left-recursive
+#define t_lookahead_type 1140
+#define t_atom_type 1141
+#define invalid_arguments_type 1142
+#define invalid_kwarg_type 1143
+#define invalid_named_expression_type 1144
+#define invalid_assignment_type 1145
+#define invalid_ann_assign_target_type 1146
+#define invalid_del_stmt_type 1147
+#define invalid_block_type 1148
+#define invalid_primary_type 1149  // Left-recursive
+#define invalid_comprehension_type 1150
+#define invalid_dict_comprehension_type 1151
+#define invalid_parameters_type 1152
+#define invalid_lambda_parameters_type 1153
+#define invalid_star_etc_type 1154
+#define invalid_lambda_star_etc_type 1155
+#define invalid_double_type_comments_type 1156
+#define invalid_with_item_type 1157
+#define invalid_for_target_type 1158
+#define invalid_group_type 1159
+#define invalid_import_from_targets_type 1160
+#define _loop0_1_type 1161
+#define _loop0_2_type 1162
+#define _loop0_4_type 1163
+#define _gather_3_type 1164
+#define _loop0_6_type 1165
+#define _gather_5_type 1166
+#define _loop0_8_type 1167
+#define _gather_7_type 1168
+#define _loop0_10_type 1169
+#define _gather_9_type 1170
+#define _loop1_11_type 1171
+#define _loop0_13_type 1172
+#define _gather_12_type 1173
+#define _tmp_14_type 1174
+#define _tmp_15_type 1175
+#define _tmp_16_type 1176
+#define _tmp_17_type 1177
+#define _tmp_18_type 1178
+#define _tmp_19_type 1179
+#define _tmp_20_type 1180
+#define _tmp_21_type 1181
+#define _loop1_22_type 1182
+#define _tmp_23_type 1183
+#define _tmp_24_type 1184
+#define _loop0_26_type 1185
+#define _gather_25_type 1186
+#define _loop0_28_type 1187
+#define _gather_27_type 1188
+#define _tmp_29_type 1189
+#define _tmp_30_type 1190
+#define _loop0_31_type 1191
+#define _loop1_32_type 1192
+#define _loop0_34_type 1193
+#define _gather_33_type 1194
+#define _tmp_35_type 1195
+#define _loop0_37_type 1196
+#define _gather_36_type 1197
+#define _tmp_38_type 1198
+#define _loop0_40_type 1199
+#define _gather_39_type 1200
+#define _loop0_42_type 1201
+#define _gather_41_type 1202
+#define _loop0_44_type 1203
+#define _gather_43_type 1204
+#define _loop0_46_type 1205
+#define _gather_45_type 1206
+#define _tmp_47_type 1207
+#define _loop1_48_type 1208
+#define _tmp_49_type 1209
+#define _tmp_50_type 1210
+#define _tmp_51_type 1211
+#define _tmp_52_type 1212
+#define _tmp_53_type 1213
+#define _loop0_54_type 1214
+#define _loop0_55_type 1215
+#define _loop0_56_type 1216
+#define _loop1_57_type 1217
+#define _loop0_58_type 1218
+#define _loop1_59_type 1219
+#define _loop1_60_type 1220
+#define _loop1_61_type 1221
+#define _loop0_62_type 1222
+#define _loop1_63_type 1223
+#define _loop0_64_type 1224
+#define _loop1_65_type 1225
+#define _loop0_66_type 1226
+#define _loop1_67_type 1227
+#define _loop1_68_type 1228
+#define _tmp_69_type 1229
+#define _loop1_70_type 1230
+#define _loop0_72_type 1231
+#define _gather_71_type 1232
+#define _loop1_73_type 1233
+#define _loop0_74_type 1234
+#define _loop0_75_type 1235
+#define _loop0_76_type 1236
+#define _loop1_77_type 1237
+#define _loop0_78_type 1238
+#define _loop1_79_type 1239
+#define _loop1_80_type 1240
+#define _loop1_81_type 1241
+#define _loop0_82_type 1242
+#define _loop1_83_type 1243
+#define _loop0_84_type 1244
+#define _loop1_85_type 1245
+#define _loop0_86_type 1246
+#define _loop1_87_type 1247
+#define _loop1_88_type 1248
+#define _loop1_89_type 1249
+#define _loop1_90_type 1250
+#define _tmp_91_type 1251
+#define _loop0_93_type 1252
+#define _gather_92_type 1253
+#define _tmp_94_type 1254
+#define _tmp_95_type 1255
+#define _tmp_96_type 1256
+#define _tmp_97_type 1257
+#define _loop1_98_type 1258
+#define _tmp_99_type 1259
+#define _tmp_100_type 1260
+#define _loop0_102_type 1261
+#define _gather_101_type 1262
+#define _loop1_103_type 1263
+#define _loop0_104_type 1264
+#define _loop0_105_type 1265
+#define _loop0_107_type 1266
+#define _gather_106_type 1267
+#define _tmp_108_type 1268
+#define _loop0_110_type 1269
+#define _gather_109_type 1270
+#define _loop0_112_type 1271
+#define _gather_111_type 1272
+#define _loop0_114_type 1273
+#define _gather_113_type 1274
+#define _loop0_116_type 1275
+#define _gather_115_type 1276
+#define _loop0_117_type 1277
+#define _loop0_119_type 1278
+#define _gather_118_type 1279
+#define _tmp_120_type 1280
+#define _loop0_122_type 1281
+#define _gather_121_type 1282
+#define _loop0_124_type 1283
+#define _gather_123_type 1284
+#define _tmp_125_type 1285
+#define _loop0_126_type 1286
+#define _loop0_127_type 1287
+#define _loop0_128_type 1288
+#define _tmp_129_type 1289
+#define _tmp_130_type 1290
+#define _loop0_131_type 1291
+#define _tmp_132_type 1292
+#define _loop0_133_type 1293
+#define _tmp_134_type 1294
+#define _tmp_135_type 1295
+#define _tmp_136_type 1296
+#define _tmp_137_type 1297
+#define _tmp_138_type 1298
+#define _tmp_139_type 1299
+#define _tmp_140_type 1300
+#define _tmp_141_type 1301
+#define _tmp_142_type 1302
+#define _tmp_143_type 1303
+#define _tmp_144_type 1304
+#define _tmp_145_type 1305
+#define _tmp_146_type 1306
+#define _tmp_147_type 1307
+#define _tmp_148_type 1308
+#define _tmp_149_type 1309
+#define _tmp_150_type 1310
+#define _loop1_151_type 1311
+#define _loop1_152_type 1312
+#define _tmp_153_type 1313
+#define _tmp_154_type 1314
+
+static mod_ty file_rule(Parser *p);
+static mod_ty interactive_rule(Parser *p);
+static mod_ty eval_rule(Parser *p);
+static mod_ty func_type_rule(Parser *p);
+static expr_ty fstring_rule(Parser *p);
+static asdl_seq* type_expressions_rule(Parser *p);
+static asdl_seq* statements_rule(Parser *p);
+static asdl_seq* statement_rule(Parser *p);
+static asdl_seq* statement_newline_rule(Parser *p);
+static asdl_seq* simple_stmt_rule(Parser *p);
+static stmt_ty small_stmt_rule(Parser *p);
+static stmt_ty compound_stmt_rule(Parser *p);
+static stmt_ty assignment_rule(Parser *p);
+static AugOperator* augassign_rule(Parser *p);
+static stmt_ty global_stmt_rule(Parser *p);
+static stmt_ty nonlocal_stmt_rule(Parser *p);
+static stmt_ty yield_stmt_rule(Parser *p);
+static stmt_ty assert_stmt_rule(Parser *p);
+static stmt_ty del_stmt_rule(Parser *p);
+static stmt_ty import_stmt_rule(Parser *p);
+static stmt_ty import_name_rule(Parser *p);
+static stmt_ty import_from_rule(Parser *p);
+static asdl_seq* import_from_targets_rule(Parser *p);
+static asdl_seq* import_from_as_names_rule(Parser *p);
+static alias_ty import_from_as_name_rule(Parser *p);
+static asdl_seq* dotted_as_names_rule(Parser *p);
+static alias_ty dotted_as_name_rule(Parser *p);
+static expr_ty dotted_name_rule(Parser *p);
+static stmt_ty if_stmt_rule(Parser *p);
+static stmt_ty elif_stmt_rule(Parser *p);
+static asdl_seq* else_block_rule(Parser *p);
+static stmt_ty while_stmt_rule(Parser *p);
+static stmt_ty for_stmt_rule(Parser *p);
+static stmt_ty with_stmt_rule(Parser *p);
+static withitem_ty with_item_rule(Parser *p);
+static stmt_ty try_stmt_rule(Parser *p);
+static excepthandler_ty except_block_rule(Parser *p);
+static asdl_seq* finally_block_rule(Parser *p);
+static stmt_ty return_stmt_rule(Parser *p);
+static stmt_ty raise_stmt_rule(Parser *p);
+static stmt_ty function_def_rule(Parser *p);
+static stmt_ty function_def_raw_rule(Parser *p);
+static Token* func_type_comment_rule(Parser *p);
+static arguments_ty params_rule(Parser *p);
+static arguments_ty parameters_rule(Parser *p);
+static asdl_seq* slash_no_default_rule(Parser *p);
+static SlashWithDefault* slash_with_default_rule(Parser *p);
+static StarEtc* star_etc_rule(Parser *p);
+static arg_ty kwds_rule(Parser *p);
+static arg_ty param_no_default_rule(Parser *p);
+static NameDefaultPair* param_with_default_rule(Parser *p);
+static NameDefaultPair* param_maybe_default_rule(Parser *p);
+static arg_ty param_rule(Parser *p);
+static expr_ty annotation_rule(Parser *p);
+static expr_ty default_rule(Parser *p);
+static asdl_seq* decorators_rule(Parser *p);
+static stmt_ty class_def_rule(Parser *p);
+static stmt_ty class_def_raw_rule(Parser *p);
+static asdl_seq* block_rule(Parser *p);
+static expr_ty star_expressions_rule(Parser *p);
+static expr_ty star_expression_rule(Parser *p);
+static asdl_seq* star_named_expressions_rule(Parser *p);
+static expr_ty star_named_expression_rule(Parser *p);
+static expr_ty named_expression_rule(Parser *p);
+static expr_ty annotated_rhs_rule(Parser *p);
+static expr_ty expressions_rule(Parser *p);
+static expr_ty expression_rule(Parser *p);
+static expr_ty lambdef_rule(Parser *p);
+static arguments_ty lambda_params_rule(Parser *p);
+static arguments_ty lambda_parameters_rule(Parser *p);
+static asdl_seq* lambda_slash_no_default_rule(Parser *p);
+static SlashWithDefault* lambda_slash_with_default_rule(Parser *p);
+static StarEtc* lambda_star_etc_rule(Parser *p);
+static arg_ty lambda_kwds_rule(Parser *p);
+static arg_ty lambda_param_no_default_rule(Parser *p);
+static NameDefaultPair* lambda_param_with_default_rule(Parser *p);
+static NameDefaultPair* lambda_param_maybe_default_rule(Parser *p);
+static arg_ty lambda_param_rule(Parser *p);
+static expr_ty disjunction_rule(Parser *p);
+static expr_ty conjunction_rule(Parser *p);
+static expr_ty inversion_rule(Parser *p);
+static expr_ty comparison_rule(Parser *p);
+static CmpopExprPair* compare_op_bitwise_or_pair_rule(Parser *p);
+static CmpopExprPair* eq_bitwise_or_rule(Parser *p);
+static CmpopExprPair* noteq_bitwise_or_rule(Parser *p);
+static CmpopExprPair* lte_bitwise_or_rule(Parser *p);
+static CmpopExprPair* lt_bitwise_or_rule(Parser *p);
+static CmpopExprPair* gte_bitwise_or_rule(Parser *p);
+static CmpopExprPair* gt_bitwise_or_rule(Parser *p);
+static CmpopExprPair* notin_bitwise_or_rule(Parser *p);
+static CmpopExprPair* in_bitwise_or_rule(Parser *p);
+static CmpopExprPair* isnot_bitwise_or_rule(Parser *p);
+static CmpopExprPair* is_bitwise_or_rule(Parser *p);
+static expr_ty bitwise_or_rule(Parser *p);
+static expr_ty bitwise_xor_rule(Parser *p);
+static expr_ty bitwise_and_rule(Parser *p);
+static expr_ty shift_expr_rule(Parser *p);
+static expr_ty sum_rule(Parser *p);
+static expr_ty term_rule(Parser *p);
+static expr_ty factor_rule(Parser *p);
+static expr_ty power_rule(Parser *p);
+static expr_ty await_primary_rule(Parser *p);
+static expr_ty primary_rule(Parser *p);
+static expr_ty slices_rule(Parser *p);
+static expr_ty slice_rule(Parser *p);
+static expr_ty atom_rule(Parser *p);
+static expr_ty strings_rule(Parser *p);
+static expr_ty list_rule(Parser *p);
+static expr_ty listcomp_rule(Parser *p);
+static expr_ty tuple_rule(Parser *p);
+static expr_ty group_rule(Parser *p);
+static expr_ty genexp_rule(Parser *p);
+static expr_ty set_rule(Parser *p);
+static expr_ty setcomp_rule(Parser *p);
+static expr_ty dict_rule(Parser *p);
+static expr_ty dictcomp_rule(Parser *p);
+static asdl_seq* double_starred_kvpairs_rule(Parser *p);
+static KeyValuePair* double_starred_kvpair_rule(Parser *p);
+static KeyValuePair* kvpair_rule(Parser *p);
+static asdl_seq* for_if_clauses_rule(Parser *p);
+static comprehension_ty for_if_clause_rule(Parser *p);
+static expr_ty yield_expr_rule(Parser *p);
+static expr_ty arguments_rule(Parser *p);
+static expr_ty args_rule(Parser *p);
+static asdl_seq* kwargs_rule(Parser *p);
+static expr_ty starred_expression_rule(Parser *p);
+static KeywordOrStarred* kwarg_or_starred_rule(Parser *p);
+static KeywordOrStarred* kwarg_or_double_starred_rule(Parser *p);
+static expr_ty star_targets_rule(Parser *p);
+static asdl_seq* star_targets_seq_rule(Parser *p);
+static expr_ty star_target_rule(Parser *p);
+static expr_ty star_atom_rule(Parser *p);
+static expr_ty single_target_rule(Parser *p);
+static expr_ty single_subscript_attribute_target_rule(Parser *p);
+static asdl_seq* del_targets_rule(Parser *p);
+static expr_ty del_target_rule(Parser *p);
+static expr_ty del_t_atom_rule(Parser *p);
+static asdl_seq* targets_rule(Parser *p);
+static expr_ty target_rule(Parser *p);
+static expr_ty t_primary_rule(Parser *p);
+static void *t_lookahead_rule(Parser *p);
+static expr_ty t_atom_rule(Parser *p);
+static void *invalid_arguments_rule(Parser *p);
+static void *invalid_kwarg_rule(Parser *p);
+static void *invalid_named_expression_rule(Parser *p);
+static void *invalid_assignment_rule(Parser *p);
+static expr_ty invalid_ann_assign_target_rule(Parser *p);
+static void *invalid_del_stmt_rule(Parser *p);
+static void *invalid_block_rule(Parser *p);
+static void *invalid_primary_rule(Parser *p);
+static void *invalid_comprehension_rule(Parser *p);
+static void *invalid_dict_comprehension_rule(Parser *p);
+static void *invalid_parameters_rule(Parser *p);
+static void *invalid_lambda_parameters_rule(Parser *p);
+static void *invalid_star_etc_rule(Parser *p);
+static void *invalid_lambda_star_etc_rule(Parser *p);
+static void *invalid_double_type_comments_rule(Parser *p);
+static void *invalid_with_item_rule(Parser *p);
+static void *invalid_for_target_rule(Parser *p);
+static void *invalid_group_rule(Parser *p);
+static void *invalid_import_from_targets_rule(Parser *p);
+static asdl_seq *_loop0_1_rule(Parser *p);
+static asdl_seq *_loop0_2_rule(Parser *p);
+static asdl_seq *_loop0_4_rule(Parser *p);
+static asdl_seq *_gather_3_rule(Parser *p);
+static asdl_seq *_loop0_6_rule(Parser *p);
+static asdl_seq *_gather_5_rule(Parser *p);
+static asdl_seq *_loop0_8_rule(Parser *p);
+static asdl_seq *_gather_7_rule(Parser *p);
+static asdl_seq *_loop0_10_rule(Parser *p);
+static asdl_seq *_gather_9_rule(Parser *p);
+static asdl_seq *_loop1_11_rule(Parser *p);
+static asdl_seq *_loop0_13_rule(Parser *p);
+static asdl_seq *_gather_12_rule(Parser *p);
+static void *_tmp_14_rule(Parser *p);
+static void *_tmp_15_rule(Parser *p);
+static void *_tmp_16_rule(Parser *p);
+static void *_tmp_17_rule(Parser *p);
+static void *_tmp_18_rule(Parser *p);
+static void *_tmp_19_rule(Parser *p);
+static void *_tmp_20_rule(Parser *p);
+static void *_tmp_21_rule(Parser *p);
+static asdl_seq *_loop1_22_rule(Parser *p);
+static void *_tmp_23_rule(Parser *p);
+static void *_tmp_24_rule(Parser *p);
+static asdl_seq *_loop0_26_rule(Parser *p);
+static asdl_seq *_gather_25_rule(Parser *p);
+static asdl_seq *_loop0_28_rule(Parser *p);
+static asdl_seq *_gather_27_rule(Parser *p);
+static void *_tmp_29_rule(Parser *p);
+static void *_tmp_30_rule(Parser *p);
+static asdl_seq *_loop0_31_rule(Parser *p);
+static asdl_seq *_loop1_32_rule(Parser *p);
+static asdl_seq *_loop0_34_rule(Parser *p);
+static asdl_seq *_gather_33_rule(Parser *p);
+static void *_tmp_35_rule(Parser *p);
+static asdl_seq *_loop0_37_rule(Parser *p);
+static asdl_seq *_gather_36_rule(Parser *p);
+static void *_tmp_38_rule(Parser *p);
+static asdl_seq *_loop0_40_rule(Parser *p);
+static asdl_seq *_gather_39_rule(Parser *p);
+static asdl_seq *_loop0_42_rule(Parser *p);
+static asdl_seq *_gather_41_rule(Parser *p);
+static asdl_seq *_loop0_44_rule(Parser *p);
+static asdl_seq *_gather_43_rule(Parser *p);
+static asdl_seq *_loop0_46_rule(Parser *p);
+static asdl_seq *_gather_45_rule(Parser *p);
+static void *_tmp_47_rule(Parser *p);
+static asdl_seq *_loop1_48_rule(Parser *p);
+static void *_tmp_49_rule(Parser *p);
+static void *_tmp_50_rule(Parser *p);
+static void *_tmp_51_rule(Parser *p);
+static void *_tmp_52_rule(Parser *p);
+static void *_tmp_53_rule(Parser *p);
+static asdl_seq *_loop0_54_rule(Parser *p);
+static asdl_seq *_loop0_55_rule(Parser *p);
+static asdl_seq *_loop0_56_rule(Parser *p);
+static asdl_seq *_loop1_57_rule(Parser *p);
+static asdl_seq *_loop0_58_rule(Parser *p);
+static asdl_seq *_loop1_59_rule(Parser *p);
+static asdl_seq *_loop1_60_rule(Parser *p);
+static asdl_seq *_loop1_61_rule(Parser *p);
+static asdl_seq *_loop0_62_rule(Parser *p);
+static asdl_seq *_loop1_63_rule(Parser *p);
+static asdl_seq *_loop0_64_rule(Parser *p);
+static asdl_seq *_loop1_65_rule(Parser *p);
+static asdl_seq *_loop0_66_rule(Parser *p);
+static asdl_seq *_loop1_67_rule(Parser *p);
+static asdl_seq *_loop1_68_rule(Parser *p);
+static void *_tmp_69_rule(Parser *p);
+static asdl_seq *_loop1_70_rule(Parser *p);
+static asdl_seq *_loop0_72_rule(Parser *p);
+static asdl_seq *_gather_71_rule(Parser *p);
+static asdl_seq *_loop1_73_rule(Parser *p);
+static asdl_seq *_loop0_74_rule(Parser *p);
+static asdl_seq *_loop0_75_rule(Parser *p);
+static asdl_seq *_loop0_76_rule(Parser *p);
+static asdl_seq *_loop1_77_rule(Parser *p);
+static asdl_seq *_loop0_78_rule(Parser *p);
+static asdl_seq *_loop1_79_rule(Parser *p);
+static asdl_seq *_loop1_80_rule(Parser *p);
+static asdl_seq *_loop1_81_rule(Parser *p);
+static asdl_seq *_loop0_82_rule(Parser *p);
+static asdl_seq *_loop1_83_rule(Parser *p);
+static asdl_seq *_loop0_84_rule(Parser *p);
+static asdl_seq *_loop1_85_rule(Parser *p);
+static asdl_seq *_loop0_86_rule(Parser *p);
+static asdl_seq *_loop1_87_rule(Parser *p);
+static asdl_seq *_loop1_88_rule(Parser *p);
+static asdl_seq *_loop1_89_rule(Parser *p);
+static asdl_seq *_loop1_90_rule(Parser *p);
+static void *_tmp_91_rule(Parser *p);
+static asdl_seq *_loop0_93_rule(Parser *p);
+static asdl_seq *_gather_92_rule(Parser *p);
+static void *_tmp_94_rule(Parser *p);
+static void *_tmp_95_rule(Parser *p);
+static void *_tmp_96_rule(Parser *p);
+static void *_tmp_97_rule(Parser *p);
+static asdl_seq *_loop1_98_rule(Parser *p);
+static void *_tmp_99_rule(Parser *p);
+static void *_tmp_100_rule(Parser *p);
+static asdl_seq *_loop0_102_rule(Parser *p);
+static asdl_seq *_gather_101_rule(Parser *p);
+static asdl_seq *_loop1_103_rule(Parser *p);
+static asdl_seq *_loop0_104_rule(Parser *p);
+static asdl_seq *_loop0_105_rule(Parser *p);
+static asdl_seq *_loop0_107_rule(Parser *p);
+static asdl_seq *_gather_106_rule(Parser *p);
+static void *_tmp_108_rule(Parser *p);
+static asdl_seq *_loop0_110_rule(Parser *p);
+static asdl_seq *_gather_109_rule(Parser *p);
+static asdl_seq *_loop0_112_rule(Parser *p);
+static asdl_seq *_gather_111_rule(Parser *p);
+static asdl_seq *_loop0_114_rule(Parser *p);
+static asdl_seq *_gather_113_rule(Parser *p);
+static asdl_seq *_loop0_116_rule(Parser *p);
+static asdl_seq *_gather_115_rule(Parser *p);
+static asdl_seq *_loop0_117_rule(Parser *p);
+static asdl_seq *_loop0_119_rule(Parser *p);
+static asdl_seq *_gather_118_rule(Parser *p);
+static void *_tmp_120_rule(Parser *p);
+static asdl_seq *_loop0_122_rule(Parser *p);
+static asdl_seq *_gather_121_rule(Parser *p);
+static asdl_seq *_loop0_124_rule(Parser *p);
+static asdl_seq *_gather_123_rule(Parser *p);
+static void *_tmp_125_rule(Parser *p);
+static asdl_seq *_loop0_126_rule(Parser *p);
+static asdl_seq *_loop0_127_rule(Parser *p);
+static asdl_seq *_loop0_128_rule(Parser *p);
+static void *_tmp_129_rule(Parser *p);
+static void *_tmp_130_rule(Parser *p);
+static asdl_seq *_loop0_131_rule(Parser *p);
+static void *_tmp_132_rule(Parser *p);
+static asdl_seq *_loop0_133_rule(Parser *p);
+static void *_tmp_134_rule(Parser *p);
+static void *_tmp_135_rule(Parser *p);
+static void *_tmp_136_rule(Parser *p);
+static void *_tmp_137_rule(Parser *p);
+static void *_tmp_138_rule(Parser *p);
+static void *_tmp_139_rule(Parser *p);
+static void *_tmp_140_rule(Parser *p);
+static void *_tmp_141_rule(Parser *p);
+static void *_tmp_142_rule(Parser *p);
+static void *_tmp_143_rule(Parser *p);
+static void *_tmp_144_rule(Parser *p);
+static void *_tmp_145_rule(Parser *p);
+static void *_tmp_146_rule(Parser *p);
+static void *_tmp_147_rule(Parser *p);
+static void *_tmp_148_rule(Parser *p);
+static void *_tmp_149_rule(Parser *p);
+static void *_tmp_150_rule(Parser *p);
+static asdl_seq *_loop1_151_rule(Parser *p);
+static asdl_seq *_loop1_152_rule(Parser *p);
+static void *_tmp_153_rule(Parser *p);
+static void *_tmp_154_rule(Parser *p);
+
+
+// file: statements? $
+static mod_ty
+file_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    mod_ty _res = NULL;
+    int _mark = p->mark;
+    { // statements? $
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> file[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statements? $"));
+        void *a;
+        Token * endmarker_var;
+        if (
+            (a = statements_rule(p), 1)  // statements?
+            &&
+            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
+        )
+        {
+            D(fprintf(stderr, "%*c+ file[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statements? $"));
+            _res = _PyPegen_make_module ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s file[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statements? $"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// interactive: statement_newline
+static mod_ty
+interactive_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    mod_ty _res = NULL;
+    int _mark = p->mark;
+    { // statement_newline
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> interactive[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement_newline"));
+        asdl_seq* a;
+        if (
+            (a = statement_newline_rule(p))  // statement_newline
+        )
+        {
+            D(fprintf(stderr, "%*c+ interactive[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement_newline"));
+            _res = Interactive ( a , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s interactive[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement_newline"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// eval: expressions NEWLINE* $
+static mod_ty
+eval_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    mod_ty _res = NULL;
+    int _mark = p->mark;
+    { // expressions NEWLINE* $
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> eval[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
+        asdl_seq * _loop0_1_var;
+        expr_ty a;
+        Token * endmarker_var;
+        if (
+            (a = expressions_rule(p))  // expressions
+            &&
+            (_loop0_1_var = _loop0_1_rule(p))  // NEWLINE*
+            &&
+            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
+        )
+        {
+            D(fprintf(stderr, "%*c+ eval[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
+            _res = Expression ( a , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s eval[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions NEWLINE* $"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// func_type: '(' type_expressions? ')' '->' expression NEWLINE* $
+static mod_ty
+func_type_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    mod_ty _res = NULL;
+    int _mark = p->mark;
+    { // '(' type_expressions? ')' '->' expression NEWLINE* $
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> func_type[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        asdl_seq * _loop0_2_var;
+        void *a;
+        expr_ty b;
+        Token * endmarker_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = type_expressions_rule(p), 1)  // type_expressions?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 51))  // token='->'
+            &&
+            (b = expression_rule(p))  // expression
+            &&
+            (_loop0_2_var = _loop0_2_rule(p))  // NEWLINE*
+            &&
+            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
+        )
+        {
+            D(fprintf(stderr, "%*c+ func_type[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
+            _res = FunctionType ( a , b , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s func_type[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' type_expressions? ')' '->' expression NEWLINE* $"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// fstring: star_expressions
+static expr_ty
+fstring_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> fstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+        expr_ty star_expressions_var;
+        if (
+            (star_expressions_var = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ fstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+            _res = star_expressions_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s fstring[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// type_expressions:
+//     | ','.expression+ ',' '*' expression ',' '**' expression
+//     | ','.expression+ ',' '*' expression
+//     | ','.expression+ ',' '**' expression
+//     | '*' expression ',' '**' expression
+//     | '*' expression
+//     | '**' expression
+//     | ','.expression+
+static asdl_seq*
+type_expressions_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.expression+ ',' '*' expression ',' '**' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        Token * _literal_3;
+        asdl_seq * a;
+        expr_ty b;
+        expr_ty c;
+        if (
+            (a = _gather_3_rule(p))  // ','.expression+
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (b = expression_rule(p))  // expression
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_literal_3 = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (c = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
+            _res = _PyPegen_seq_append_to_end ( p , CHECK ( _PyPegen_seq_append_to_end ( p , a , b ) ) , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression"));
+    }
+    { // ','.expression+ ',' '*' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * a;
+        expr_ty b;
+        if (
+            (a = _gather_5_rule(p))  // ','.expression+
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression"));
+            _res = _PyPegen_seq_append_to_end ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression"));
+    }
+    { // ','.expression+ ',' '**' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * a;
+        expr_ty b;
+        if (
+            (a = _gather_7_rule(p))  // ','.expression+
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression"));
+            _res = _PyPegen_seq_append_to_end ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '**' expression"));
+    }
+    { // '*' expression ',' '**' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression"));
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = expression_rule(p))  // expression
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression"));
+            _res = _PyPegen_seq_append_to_end ( p , CHECK ( _PyPegen_singleton_seq ( p , a ) ) , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression ',' '**' expression"));
+    }
+    { // '*' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression"));
+            _res = _PyPegen_singleton_seq ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression"));
+    }
+    { // '**' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression"));
+            _res = _PyPegen_singleton_seq ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression"));
+    }
+    { // ','.expression+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+"));
+        asdl_seq * _gather_9_var;
+        if (
+            (_gather_9_var = _gather_9_rule(p))  // ','.expression+
+        )
+        {
+            D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+"));
+            _res = _gather_9_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// statements: statement+
+static asdl_seq*
+statements_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // statement+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+"));
+        asdl_seq * a;
+        if (
+            (a = _loop1_11_rule(p))  // statement+
+        )
+        {
+            D(fprintf(stderr, "%*c+ statements[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement+"));
+            _res = _PyPegen_seq_flatten ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statements[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// statement: compound_stmt | simple_stmt
+static asdl_seq*
+statement_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // compound_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
+        stmt_ty a;
+        if (
+            (a = compound_stmt_rule(p))  // compound_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
+            _res = _PyPegen_singleton_seq ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
+    }
+    { // simple_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
+        asdl_seq* simple_stmt_var;
+        if (
+            (simple_stmt_var = simple_stmt_rule(p))  // simple_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
+            _res = simple_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// statement_newline: compound_stmt NEWLINE | simple_stmt | NEWLINE | $
+static asdl_seq*
+statement_newline_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // compound_stmt NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE"));
+        stmt_ty a;
+        Token * newline_var;
+        if (
+            (a = compound_stmt_rule(p))  // compound_stmt
+            &&
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE"));
+            _res = _PyPegen_singleton_seq ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt NEWLINE"));
+    }
+    { // simple_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
+        asdl_seq* simple_stmt_var;
+        if (
+            (simple_stmt_var = simple_stmt_rule(p))  // simple_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
+            _res = simple_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt"));
+    }
+    { // NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
+        Token * newline_var;
+        if (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _PyPegen_singleton_seq ( p , CHECK ( _Py_Pass ( EXTRA ) ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
+    }
+    { // $
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "$"));
+        Token * endmarker_var;
+        if (
+            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
+        )
+        {
+            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "$"));
+            _res = _PyPegen_interactive_exit ( p );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "$"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// simple_stmt: small_stmt !';' NEWLINE | ';'.small_stmt+ ';'? NEWLINE
+static asdl_seq*
+simple_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // small_stmt !';' NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "small_stmt !';' NEWLINE"));
+        stmt_ty a;
+        Token * newline_var;
+        if (
+            (a = small_stmt_rule(p))  // small_stmt
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 13)  // token=';'
+            &&
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "small_stmt !';' NEWLINE"));
+            _res = _PyPegen_singleton_seq ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "small_stmt !';' NEWLINE"));
+    }
+    { // ';'.small_stmt+ ';'? NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'.small_stmt+ ';'? NEWLINE"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        Token * newline_var;
+        if (
+            (a = _gather_12_rule(p))  // ';'.small_stmt+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 13), 1)  // ';'?
+            &&
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'.small_stmt+ ';'? NEWLINE"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'.small_stmt+ ';'? NEWLINE"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// small_stmt:
+//     | assignment
+//     | star_expressions
+//     | &'return' return_stmt
+//     | &('import' | 'from') import_stmt
+//     | &'raise' raise_stmt
+//     | 'pass'
+//     | &'del' del_stmt
+//     | &'yield' yield_stmt
+//     | &'assert' assert_stmt
+//     | 'break'
+//     | 'continue'
+//     | &'global' global_stmt
+//     | &'nonlocal' nonlocal_stmt
+static stmt_ty
+small_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, small_stmt_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // assignment
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment"));
+        stmt_ty assignment_var;
+        if (
+            (assignment_var = assignment_rule(p))  // assignment
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment"));
+            _res = assignment_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment"));
+    }
+    { // star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+        expr_ty e;
+        if (
+            (e = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Expr ( e , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
+    }
+    { // &'return' return_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
+        stmt_ty return_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 500)  // token='return'
+            &&
+            (return_stmt_var = return_stmt_rule(p))  // return_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
+            _res = return_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'return' return_stmt"));
+    }
+    { // &('import' | 'from') import_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
+        stmt_ty import_stmt_var;
+        if (
+            _PyPegen_lookahead(1, _tmp_14_rule, p)
+            &&
+            (import_stmt_var = import_stmt_rule(p))  // import_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt"));
+            _res = import_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('import' | 'from') import_stmt"));
+    }
+    { // &'raise' raise_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
+        stmt_ty raise_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 501)  // token='raise'
+            &&
+            (raise_stmt_var = raise_stmt_rule(p))  // raise_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
+            _res = raise_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'raise' raise_stmt"));
+    }
+    { // 'pass'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 502))  // token='pass'
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Pass ( EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'pass'"));
+    }
+    { // &'del' del_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
+        stmt_ty del_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 503)  // token='del'
+            &&
+            (del_stmt_var = del_stmt_rule(p))  // del_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
+            _res = del_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'del' del_stmt"));
+    }
+    { // &'yield' yield_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
+        stmt_ty yield_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 504)  // token='yield'
+            &&
+            (yield_stmt_var = yield_stmt_rule(p))  // yield_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
+            _res = yield_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'yield' yield_stmt"));
+    }
+    { // &'assert' assert_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
+        stmt_ty assert_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 505)  // token='assert'
+            &&
+            (assert_stmt_var = assert_stmt_rule(p))  // assert_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
+            _res = assert_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'assert' assert_stmt"));
+    }
+    { // 'break'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 506))  // token='break'
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Break ( EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'break'"));
+    }
+    { // 'continue'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 507))  // token='continue'
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Continue ( EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'continue'"));
+    }
+    { // &'global' global_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
+        stmt_ty global_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 508)  // token='global'
+            &&
+            (global_stmt_var = global_stmt_rule(p))  // global_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
+            _res = global_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'global' global_stmt"));
+    }
+    { // &'nonlocal' nonlocal_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> small_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
+        stmt_ty nonlocal_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 509)  // token='nonlocal'
+            &&
+            (nonlocal_stmt_var = nonlocal_stmt_rule(p))  // nonlocal_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ small_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
+            _res = nonlocal_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s small_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, small_stmt_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// compound_stmt:
+//     | &('def' | '@' | ASYNC) function_def
+//     | &'if' if_stmt
+//     | &('class' | '@') class_def
+//     | &('with' | ASYNC) with_stmt
+//     | &('for' | ASYNC) for_stmt
+//     | &'try' try_stmt
+//     | &'while' while_stmt
+static stmt_ty
+compound_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    { // &('def' | '@' | ASYNC) function_def
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | ASYNC) function_def"));
+        stmt_ty function_def_var;
+        if (
+            _PyPegen_lookahead(1, _tmp_15_rule, p)
+            &&
+            (function_def_var = function_def_rule(p))  // function_def
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | ASYNC) function_def"));
+            _res = function_def_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('def' | '@' | ASYNC) function_def"));
+    }
+    { // &'if' if_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
+        stmt_ty if_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 510)  // token='if'
+            &&
+            (if_stmt_var = if_stmt_rule(p))  // if_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
+            _res = if_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'if' if_stmt"));
+    }
+    { // &('class' | '@') class_def
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
+        stmt_ty class_def_var;
+        if (
+            _PyPegen_lookahead(1, _tmp_16_rule, p)
+            &&
+            (class_def_var = class_def_rule(p))  // class_def
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
+            _res = class_def_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('class' | '@') class_def"));
+    }
+    { // &('with' | ASYNC) with_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | ASYNC) with_stmt"));
+        stmt_ty with_stmt_var;
+        if (
+            _PyPegen_lookahead(1, _tmp_17_rule, p)
+            &&
+            (with_stmt_var = with_stmt_rule(p))  // with_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('with' | ASYNC) with_stmt"));
+            _res = with_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('with' | ASYNC) with_stmt"));
+    }
+    { // &('for' | ASYNC) for_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | ASYNC) for_stmt"));
+        stmt_ty for_stmt_var;
+        if (
+            _PyPegen_lookahead(1, _tmp_18_rule, p)
+            &&
+            (for_stmt_var = for_stmt_rule(p))  // for_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('for' | ASYNC) for_stmt"));
+            _res = for_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('for' | ASYNC) for_stmt"));
+    }
+    { // &'try' try_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
+        stmt_ty try_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 511)  // token='try'
+            &&
+            (try_stmt_var = try_stmt_rule(p))  // try_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
+            _res = try_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'try' try_stmt"));
+    }
+    { // &'while' while_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
+        stmt_ty while_stmt_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 512)  // token='while'
+            &&
+            (while_stmt_var = while_stmt_rule(p))  // while_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
+            _res = while_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'while' while_stmt"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// assignment:
+//     | NAME ':' expression ['=' annotated_rhs]
+//     | ('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]
+//     | ((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?
+//     | single_target augassign ~ (yield_expr | star_expressions)
+//     | invalid_assignment
+static stmt_ty
+assignment_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME ':' expression ['=' annotated_rhs]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        void *c;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = expression_rule(p))  // expression
+            &&
+            (c = _tmp_19_rule(p), 1)  // ['=' annotated_rhs]
+        )
+        {
+            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 6 , "Variable annotation syntax is" , _Py_AnnAssign ( CHECK ( _PyPegen_set_expr_context ( p , a , Store ) ) , b , c , 1 , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
+    }
+    { // ('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
+        Token * _literal;
+        void *a;
+        expr_ty b;
+        void *c;
+        if (
+            (a = _tmp_20_rule(p))  // '(' single_target ')' | single_subscript_attribute_target
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = expression_rule(p))  // expression
+            &&
+            (c = _tmp_21_rule(p), 1)  // ['=' annotated_rhs]
+        )
+        {
+            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 6 , "Variable annotations syntax is" , _Py_AnnAssign ( a , b , c , 0 , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]"));
+    }
+    { // ((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?"));
+        asdl_seq * a;
+        void *b;
+        void *tc;
+        if (
+            (a = _loop1_22_rule(p))  // ((star_targets '='))+
+            &&
+            (b = _tmp_23_rule(p))  // yield_expr | star_expressions
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+        )
+        {
+            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Assign ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))+ (yield_expr | star_expressions) !'=' TYPE_COMMENT?"));
+    }
+    { // single_target augassign ~ (yield_expr | star_expressions)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)"));
+        int _cut_var = 0;
+        expr_ty a;
+        AugOperator* b;
+        void *c;
+        if (
+            (a = single_target_rule(p))  // single_target
+            &&
+            (b = augassign_rule(p))  // augassign
+            &&
+            (_cut_var = 1)
+            &&
+            (c = _tmp_24_rule(p))  // yield_expr | star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_AugAssign ( a , b -> kind , c , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    if (p->call_invalid_rules) { // invalid_assignment
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
+        void *invalid_assignment_var;
+        if (
+            (invalid_assignment_var = invalid_assignment_rule(p))  // invalid_assignment
+        )
+        {
+            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
+            _res = invalid_assignment_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_assignment"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// augassign:
+//     | '+='
+//     | '-='
+//     | '*='
+//     | '@='
+//     | '/='
+//     | '%='
+//     | '&='
+//     | '|='
+//     | '^='
+//     | '<<='
+//     | '>>='
+//     | '**='
+//     | '//='
+static AugOperator*
+augassign_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    AugOperator* _res = NULL;
+    int _mark = p->mark;
+    { // '+='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 36))  // token='+='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+='"));
+            _res = _PyPegen_augoperator ( p , Add );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+='"));
+    }
+    { // '-='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 37))  // token='-='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-='"));
+            _res = _PyPegen_augoperator ( p , Sub );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-='"));
+    }
+    { // '*='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 38))  // token='*='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*='"));
+            _res = _PyPegen_augoperator ( p , Mult );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*='"));
+    }
+    { // '@='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 50))  // token='@='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@='"));
+            _res = CHECK_VERSION ( 5 , "The '@' operator is" , _PyPegen_augoperator ( p , MatMult ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@='"));
+    }
+    { // '/='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 39))  // token='/='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/='"));
+            _res = _PyPegen_augoperator ( p , Div );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/='"));
+    }
+    { // '%='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 40))  // token='%='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%='"));
+            _res = _PyPegen_augoperator ( p , Mod );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'%='"));
+    }
+    { // '&='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'&='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 41))  // token='&='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'&='"));
+            _res = _PyPegen_augoperator ( p , BitAnd );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'&='"));
+    }
+    { // '|='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 42))  // token='|='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|='"));
+            _res = _PyPegen_augoperator ( p , BitOr );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|='"));
+    }
+    { // '^='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'^='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 43))  // token='^='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'^='"));
+            _res = _PyPegen_augoperator ( p , BitXor );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'^='"));
+    }
+    { // '<<='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<<='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 44))  // token='<<='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<<='"));
+            _res = _PyPegen_augoperator ( p , LShift );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<<='"));
+    }
+    { // '>>='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>>='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 45))  // token='>>='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>>='"));
+            _res = _PyPegen_augoperator ( p , RShift );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>>='"));
+    }
+    { // '**='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 46))  // token='**='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**='"));
+            _res = _PyPegen_augoperator ( p , Pow );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**='"));
+    }
+    { // '//='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//='"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 48))  // token='//='
+        )
+        {
+            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//='"));
+            _res = _PyPegen_augoperator ( p , FloorDiv );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'//='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// global_stmt: 'global' ','.NAME+
+static stmt_ty
+global_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'global' ','.NAME+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> global_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
+        Token * _keyword;
+        asdl_seq * a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 508))  // token='global'
+            &&
+            (a = _gather_25_rule(p))  // ','.NAME+
+        )
+        {
+            D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Global ( CHECK ( _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s global_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'global' ','.NAME+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// nonlocal_stmt: 'nonlocal' ','.NAME+
+static stmt_ty
+nonlocal_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'nonlocal' ','.NAME+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> nonlocal_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
+        Token * _keyword;
+        asdl_seq * a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 509))  // token='nonlocal'
+            &&
+            (a = _gather_27_rule(p))  // ','.NAME+
+        )
+        {
+            D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Nonlocal ( CHECK ( _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s nonlocal_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'nonlocal' ','.NAME+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// yield_stmt: yield_expr
+static stmt_ty
+yield_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // yield_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> yield_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+        expr_ty y;
+        if (
+            (y = yield_expr_rule(p))  // yield_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ yield_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Expr ( y , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s yield_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// assert_stmt: 'assert' expression [',' expression]
+static stmt_ty
+assert_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'assert' expression [',' expression]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
+        Token * _keyword;
+        expr_ty a;
+        void *b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 505))  // token='assert'
+            &&
+            (a = expression_rule(p))  // expression
+            &&
+            (b = _tmp_29_rule(p), 1)  // [',' expression]
+        )
+        {
+            D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Assert ( a , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression [',' expression]"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// del_stmt: 'del' del_targets &(';' | NEWLINE) | invalid_del_stmt
+static stmt_ty
+del_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'del' del_targets &(';' | NEWLINE)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
+        Token * _keyword;
+        asdl_seq* a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 503))  // token='del'
+            &&
+            (a = del_targets_rule(p))  // del_targets
+            &&
+            _PyPegen_lookahead(1, _tmp_30_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Delete ( a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
+    }
+    if (p->call_invalid_rules) { // invalid_del_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
+        void *invalid_del_stmt_var;
+        if (
+            (invalid_del_stmt_var = invalid_del_stmt_rule(p))  // invalid_del_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
+            _res = invalid_del_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_del_stmt"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// import_stmt: import_name | import_from
+static stmt_ty
+import_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    { // import_name
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_name"));
+        stmt_ty import_name_var;
+        if (
+            (import_name_var = import_name_rule(p))  // import_name
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_name"));
+            _res = import_name_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_name"));
+    }
+    { // import_from
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from"));
+        stmt_ty import_from_var;
+        if (
+            (import_from_var = import_from_rule(p))  // import_from
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from"));
+            _res = import_from_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// import_name: 'import' dotted_as_names
+static stmt_ty
+import_name_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'import' dotted_as_names
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' dotted_as_names"));
+        Token * _keyword;
+        asdl_seq* a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 513))  // token='import'
+            &&
+            (a = dotted_as_names_rule(p))  // dotted_as_names
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' dotted_as_names"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Import ( a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_name[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import' dotted_as_names"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// import_from:
+//     | 'from' (('.' | '...'))* dotted_name 'import' import_from_targets
+//     | 'from' (('.' | '...'))+ 'import' import_from_targets
+static stmt_ty
+import_from_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'from' (('.' | '...'))* dotted_name 'import' import_from_targets
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
+        Token * _keyword;
+        Token * _keyword_1;
+        asdl_seq * a;
+        expr_ty b;
+        asdl_seq* c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 514))  // token='from'
+            &&
+            (a = _loop0_31_rule(p))  // (('.' | '...'))*
+            &&
+            (b = dotted_name_rule(p))  // dotted_name
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 513))  // token='import'
+            &&
+            (c = import_from_targets_rule(p))  // import_from_targets
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_ImportFrom ( b -> v . Name . id , c , _PyPegen_seq_count_dots ( a ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
+    }
+    { // 'from' (('.' | '...'))+ 'import' import_from_targets
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
+        Token * _keyword;
+        Token * _keyword_1;
+        asdl_seq * a;
+        asdl_seq* b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 514))  // token='from'
+            &&
+            (a = _loop1_32_rule(p))  // (('.' | '...'))+
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 513))  // token='import'
+            &&
+            (b = import_from_targets_rule(p))  // import_from_targets
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_ImportFrom ( NULL , b , _PyPegen_seq_count_dots ( a ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' (('.' | '...'))+ 'import' import_from_targets"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// import_from_targets:
+//     | '(' import_from_as_names ','? ')'
+//     | import_from_as_names !','
+//     | '*'
+//     | invalid_import_from_targets
+static asdl_seq*
+import_from_targets_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // '(' import_from_as_names ','? ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq* a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = import_from_as_names_rule(p))  // import_from_as_names
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' import_from_as_names ','? ')'"));
+    }
+    { // import_from_as_names !','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
+        asdl_seq* import_from_as_names_var;
+        if (
+            (import_from_as_names_var = import_from_as_names_rule(p))  // import_from_as_names
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
+            _res = import_from_as_names_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_names !','"));
+    }
+    { // '*'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
+            _res = _PyPegen_singleton_seq ( p , CHECK ( _PyPegen_alias_for_star ( p ) ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
+    }
+    if (p->call_invalid_rules) { // invalid_import_from_targets
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
+        void *invalid_import_from_targets_var;
+        if (
+            (invalid_import_from_targets_var = invalid_import_from_targets_rule(p))  // invalid_import_from_targets
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
+            _res = invalid_import_from_targets_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import_from_targets"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// import_from_as_names: ','.import_from_as_name+
+static asdl_seq*
+import_from_as_names_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.import_from_as_name+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
+        asdl_seq * a;
+        if (
+            (a = _gather_33_rule(p))  // ','.import_from_as_name+
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from_as_names[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.import_from_as_name+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// import_from_as_name: NAME ['as' NAME]
+static alias_ty
+import_from_as_name_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    alias_ty _res = NULL;
+    int _mark = p->mark;
+    { // NAME ['as' NAME]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
+        expr_ty a;
+        void *b;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (b = _tmp_35_rule(p), 1)  // ['as' NAME]
+        )
+        {
+            D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
+            _res = _Py_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ['as' NAME]"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// dotted_as_names: ','.dotted_as_name+
+static asdl_seq*
+dotted_as_names_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.dotted_as_name+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
+        asdl_seq * a;
+        if (
+            (a = _gather_36_rule(p))  // ','.dotted_as_name+
+        )
+        {
+            D(fprintf(stderr, "%*c+ dotted_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dotted_as_names[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.dotted_as_name+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// dotted_as_name: dotted_name ['as' NAME]
+static alias_ty
+dotted_as_name_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    alias_ty _res = NULL;
+    int _mark = p->mark;
+    { // dotted_name ['as' NAME]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
+        expr_ty a;
+        void *b;
+        if (
+            (a = dotted_name_rule(p))  // dotted_name
+            &&
+            (b = _tmp_38_rule(p), 1)  // ['as' NAME]
+        )
+        {
+            D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
+            _res = _Py_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name ['as' NAME]"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// dotted_name: dotted_name '.' NAME | NAME
+static expr_ty dotted_name_raw(Parser *);
+static expr_ty
+dotted_name_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, dotted_name_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_0 = _PyPegen_update_memo(p, _mark, dotted_name_type, _res);
+        if (tmpvar_0) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = dotted_name_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+dotted_name_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // dotted_name '.' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = dotted_name_rule(p))  // dotted_name
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ dotted_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
+            _res = _PyPegen_join_names_with_dot ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dotted_name[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name '.' NAME"));
+    }
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty name_var;
+        if (
+            (name_var = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ dotted_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            _res = name_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dotted_name[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// if_stmt:
+//     | 'if' named_expression ':' block elif_stmt
+//     | 'if' named_expression ':' block else_block?
+static stmt_ty
+if_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'if' named_expression ':' block elif_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
+        Token * _keyword;
+        Token * _literal;
+        expr_ty a;
+        asdl_seq* b;
+        stmt_ty c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 510))  // token='if'
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (c = elif_stmt_rule(p))  // elif_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_If ( a , b , CHECK ( _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
+    }
+    { // 'if' named_expression ':' block else_block?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
+        Token * _keyword;
+        Token * _literal;
+        expr_ty a;
+        asdl_seq* b;
+        void *c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 510))  // token='if'
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (c = else_block_rule(p), 1)  // else_block?
+        )
+        {
+            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_If ( a , b , c , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// elif_stmt:
+//     | 'elif' named_expression ':' block elif_stmt
+//     | 'elif' named_expression ':' block else_block?
+static stmt_ty
+elif_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'elif' named_expression ':' block elif_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
+        Token * _keyword;
+        Token * _literal;
+        expr_ty a;
+        asdl_seq* b;
+        stmt_ty c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 515))  // token='elif'
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (c = elif_stmt_rule(p))  // elif_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_If ( a , b , CHECK ( _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
+    }
+    { // 'elif' named_expression ':' block else_block?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
+        Token * _keyword;
+        Token * _literal;
+        expr_ty a;
+        asdl_seq* b;
+        void *c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 515))  // token='elif'
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (c = else_block_rule(p), 1)  // else_block?
+        )
+        {
+            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_If ( a , b , c , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// else_block: 'else' ':' block
+static asdl_seq*
+else_block_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // 'else' ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq* b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 516))  // token='else'
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' block"));
+            _res = b;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' ':' block"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// while_stmt: 'while' named_expression ':' block else_block?
+static stmt_ty
+while_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'while' named_expression ':' block else_block?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
+        Token * _keyword;
+        Token * _literal;
+        expr_ty a;
+        asdl_seq* b;
+        void *c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 512))  // token='while'
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (c = else_block_rule(p), 1)  // else_block?
+        )
+        {
+            D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_While ( a , b , c , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// for_stmt:
+//     | 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
+//     | ASYNC 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
+//     | invalid_for_target
+static stmt_ty
+for_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
+        int _cut_var = 0;
+        Token * _keyword;
+        Token * _keyword_1;
+        Token * _literal;
+        asdl_seq* b;
+        void *el;
+        expr_ty ex;
+        expr_ty t;
+        void *tc;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 517))  // token='for'
+            &&
+            (t = star_targets_rule(p))  // star_targets
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 518))  // token='in'
+            &&
+            (_cut_var = 1)
+            &&
+            (ex = star_expressions_rule(p))  // star_expressions
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (el = else_block_rule(p), 1)  // else_block?
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    { // ASYNC 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
+        int _cut_var = 0;
+        Token * _keyword;
+        Token * _keyword_1;
+        Token * _literal;
+        Token * async_var;
+        asdl_seq* b;
+        void *el;
+        expr_ty ex;
+        expr_ty t;
+        void *tc;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+            &&
+            (_keyword = _PyPegen_expect_token(p, 517))  // token='for'
+            &&
+            (t = star_targets_rule(p))  // star_targets
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 518))  // token='in'
+            &&
+            (_cut_var = 1)
+            &&
+            (ex = star_expressions_rule(p))  // star_expressions
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (el = else_block_rule(p), 1)  // else_block?
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 5 , "Async for loops are" , _Py_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    if (p->call_invalid_rules) { // invalid_for_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
+        void *invalid_for_target_var;
+        if (
+            (invalid_for_target_var = invalid_for_target_rule(p))  // invalid_for_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
+            _res = invalid_for_target_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// with_stmt:
+//     | 'with' '(' ','.with_item+ ','? ')' ':' block
+//     | 'with' ','.with_item+ ':' TYPE_COMMENT? block
+//     | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block
+//     | ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block
+static stmt_ty
+with_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'with' '(' ','.with_item+ ','? ')' ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        asdl_seq* b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 519))  // token='with'
+            &&
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = _gather_39_rule(p))  // ','.with_item+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_With ( a , b , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block"));
+    }
+    { // 'with' ','.with_item+ ':' TYPE_COMMENT? block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq * a;
+        asdl_seq* b;
+        void *tc;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 519))  // token='with'
+            &&
+            (a = _gather_41_rule(p))  // ','.with_item+
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
+    }
+    { // ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        Token * async_var;
+        asdl_seq* b;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+            &&
+            (_keyword = _PyPegen_expect_token(p, 519))  // token='with'
+            &&
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = _gather_43_rule(p))  // ','.with_item+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 5 , "Async with statements are" , _Py_AsyncWith ( a , b , NULL , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block"));
+    }
+    { // ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq * a;
+        Token * async_var;
+        asdl_seq* b;
+        void *tc;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+            &&
+            (_keyword = _PyPegen_expect_token(p, 519))  // token='with'
+            &&
+            (a = _gather_45_rule(p))  // ','.with_item+
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 5 , "Async with statements are" , _Py_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// with_item:
+//     | expression 'as' star_target &(',' | ')' | ':')
+//     | invalid_with_item
+//     | expression
+static withitem_ty
+with_item_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    withitem_ty _res = NULL;
+    int _mark = p->mark;
+    { // expression 'as' star_target &(',' | ')' | ':')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
+        Token * _keyword;
+        expr_ty e;
+        expr_ty t;
+        if (
+            (e = expression_rule(p))  // expression
+            &&
+            (_keyword = _PyPegen_expect_token(p, 520))  // token='as'
+            &&
+            (t = star_target_rule(p))  // star_target
+            &&
+            _PyPegen_lookahead(1, _tmp_47_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
+            _res = _Py_withitem ( e , t , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
+    }
+    if (p->call_invalid_rules) { // invalid_with_item
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
+        void *invalid_with_item_var;
+        if (
+            (invalid_with_item_var = invalid_with_item_rule(p))  // invalid_with_item
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
+            _res = invalid_with_item_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_item"));
+    }
+    { // expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
+        expr_ty e;
+        if (
+            (e = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
+            _res = _Py_withitem ( e , NULL , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// try_stmt:
+//     | 'try' ':' block finally_block
+//     | 'try' ':' block except_block+ else_block? finally_block?
+static stmt_ty
+try_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'try' ':' block finally_block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block finally_block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq* b;
+        asdl_seq* f;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 511))  // token='try'
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (f = finally_block_rule(p))  // finally_block
+        )
+        {
+            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block finally_block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Try ( b , NULL , NULL , f , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block finally_block"));
+    }
+    { // 'try' ':' block except_block+ else_block? finally_block?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block except_block+ else_block? finally_block?"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq* b;
+        void *el;
+        asdl_seq * ex;
+        void *f;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 511))  // token='try'
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+            &&
+            (ex = _loop1_48_rule(p))  // except_block+
+            &&
+            (el = else_block_rule(p), 1)  // else_block?
+            &&
+            (f = finally_block_rule(p), 1)  // finally_block?
+        )
+        {
+            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block except_block+ else_block? finally_block?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Try ( b , ex , el , f , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block except_block+ else_block? finally_block?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// except_block: 'except' expression ['as' NAME] ':' block | 'except' ':' block
+static excepthandler_ty
+except_block_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    excepthandler_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'except' expression ['as' NAME] ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq* b;
+        expr_ty e;
+        void *t;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 521))  // token='except'
+            &&
+            (e = expression_rule(p))  // expression
+            &&
+            (t = _tmp_49_rule(p), 1)  // ['as' NAME]
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_ExceptHandler ( e , ( t ) ? ( ( expr_ty ) t ) -> v . Name . id : NULL , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] ':' block"));
+    }
+    { // 'except' ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq* b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 521))  // token='except'
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_ExceptHandler ( NULL , NULL , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' block"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// finally_block: 'finally' ':' block
+static asdl_seq*
+finally_block_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // 'finally' ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        asdl_seq* a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 522))  // token='finally'
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (a = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' ':' block"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' ':' block"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// return_stmt: 'return' star_expressions?
+static stmt_ty
+return_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'return' star_expressions?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> return_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
+        Token * _keyword;
+        void *a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 500))  // token='return'
+            &&
+            (a = star_expressions_rule(p), 1)  // star_expressions?
+        )
+        {
+            D(fprintf(stderr, "%*c+ return_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Return ( a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s return_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'return' star_expressions?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// raise_stmt: 'raise' expression ['from' expression] | 'raise'
+static stmt_ty
+raise_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'raise' expression ['from' expression]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]"));
+        Token * _keyword;
+        expr_ty a;
+        void *b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 501))  // token='raise'
+            &&
+            (a = expression_rule(p))  // expression
+            &&
+            (b = _tmp_50_rule(p), 1)  // ['from' expression]
+        )
+        {
+            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Raise ( a , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression ['from' expression]"));
+    }
+    { // 'raise'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 501))  // token='raise'
+        )
+        {
+            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Raise ( NULL , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// function_def: decorators function_def_raw | function_def_raw
+static stmt_ty
+function_def_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    { // decorators function_def_raw
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
+        asdl_seq* d;
+        stmt_ty f;
+        if (
+            (d = decorators_rule(p))  // decorators
+            &&
+            (f = function_def_raw_rule(p))  // function_def_raw
+        )
+        {
+            D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
+            _res = _PyPegen_function_def_decorators ( p , d , f );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators function_def_raw"));
+    }
+    { // function_def_raw
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
+        stmt_ty function_def_raw_var;
+        if (
+            (function_def_raw_var = function_def_raw_rule(p))  // function_def_raw
+        )
+        {
+            D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
+            _res = function_def_raw_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "function_def_raw"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// function_def_raw:
+//     | 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block
+//     | ASYNC 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block
+static stmt_ty
+function_def_raw_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block"));
+        Token * _keyword;
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        void *a;
+        asdl_seq* b;
+        expr_ty n;
+        void *params;
+        void *tc;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 523))  // token='def'
+            &&
+            (n = _PyPegen_name_token(p))  // NAME
+            &&
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (params = params_rule(p), 1)  // params?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+            &&
+            (a = _tmp_51_rule(p), 1)  // ['->' expression]
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (tc = func_type_comment_rule(p), 1)  // func_type_comment?
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block"));
+    }
+    { // ASYNC 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block"));
+        Token * _keyword;
+        Token * _literal;
+        Token * _literal_1;
+        Token * _literal_2;
+        void *a;
+        Token * async_var;
+        asdl_seq* b;
+        expr_ty n;
+        void *params;
+        void *tc;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+            &&
+            (_keyword = _PyPegen_expect_token(p, 523))  // token='def'
+            &&
+            (n = _PyPegen_name_token(p))  // NAME
+            &&
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (params = params_rule(p), 1)  // params?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+            &&
+            (a = _tmp_52_rule(p), 1)  // ['->' expression]
+            &&
+            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (tc = func_type_comment_rule(p), 1)  // func_type_comment?
+            &&
+            (b = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 5 , "Async functions are" , _Py_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] ':' func_type_comment? block"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// func_type_comment:
+//     | NEWLINE TYPE_COMMENT &(NEWLINE INDENT)
+//     | invalid_double_type_comments
+//     | TYPE_COMMENT
+static Token*
+func_type_comment_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    Token* _res = NULL;
+    int _mark = p->mark;
+    { // NEWLINE TYPE_COMMENT &(NEWLINE INDENT)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
+        Token * newline_var;
+        Token * t;
+        if (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+            &&
+            (t = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
+            &&
+            _PyPegen_lookahead(1, _tmp_53_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
+            _res = t;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
+    }
+    if (p->call_invalid_rules) { // invalid_double_type_comments
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
+        void *invalid_double_type_comments_var;
+        if (
+            (invalid_double_type_comments_var = invalid_double_type_comments_rule(p))  // invalid_double_type_comments
+        )
+        {
+            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
+            _res = invalid_double_type_comments_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_double_type_comments"));
+    }
+    { // TYPE_COMMENT
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
+        Token * type_comment_var;
+        if (
+            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
+        )
+        {
+            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
+            _res = type_comment_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// params: invalid_parameters | parameters
+static arguments_ty
+params_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arguments_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->call_invalid_rules) { // invalid_parameters
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
+        void *invalid_parameters_var;
+        if (
+            (invalid_parameters_var = invalid_parameters_rule(p))  // invalid_parameters
+        )
+        {
+            D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
+            _res = invalid_parameters_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_parameters"));
+    }
+    { // parameters
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "parameters"));
+        arguments_ty parameters_var;
+        if (
+            (parameters_var = parameters_rule(p))  // parameters
+        )
+        {
+            D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "parameters"));
+            _res = parameters_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "parameters"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// parameters:
+//     | slash_no_default param_no_default* param_with_default* star_etc?
+//     | slash_with_default param_with_default* star_etc?
+//     | param_no_default+ param_with_default* star_etc?
+//     | param_with_default+ star_etc?
+//     | star_etc
+static arguments_ty
+parameters_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arguments_ty _res = NULL;
+    int _mark = p->mark;
+    { // slash_no_default param_no_default* param_with_default* star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
+        asdl_seq* a;
+        asdl_seq * b;
+        asdl_seq * c;
+        void *d;
+        if (
+            (a = slash_no_default_rule(p))  // slash_no_default
+            &&
+            (b = _loop0_54_rule(p))  // param_no_default*
+            &&
+            (c = _loop0_55_rule(p))  // param_with_default*
+            &&
+            (d = star_etc_rule(p), 1)  // star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
+            _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
+    }
+    { // slash_with_default param_with_default* star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
+        SlashWithDefault* a;
+        asdl_seq * b;
+        void *c;
+        if (
+            (a = slash_with_default_rule(p))  // slash_with_default
+            &&
+            (b = _loop0_56_rule(p))  // param_with_default*
+            &&
+            (c = star_etc_rule(p), 1)  // star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
+            _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
+    }
+    { // param_no_default+ param_with_default* star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
+        asdl_seq * a;
+        asdl_seq * b;
+        void *c;
+        if (
+            (a = _loop1_57_rule(p))  // param_no_default+
+            &&
+            (b = _loop0_58_rule(p))  // param_with_default*
+            &&
+            (c = star_etc_rule(p), 1)  // star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
+            _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
+    }
+    { // param_with_default+ star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
+        asdl_seq * a;
+        void *b;
+        if (
+            (a = _loop1_59_rule(p))  // param_with_default+
+            &&
+            (b = star_etc_rule(p), 1)  // star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
+            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+ star_etc?"));
+    }
+    { // star_etc
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_etc"));
+        StarEtc* a;
+        if (
+            (a = star_etc_rule(p))  // star_etc
+        )
+        {
+            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_etc"));
+            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_etc"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// slash_no_default: param_no_default+ '/' ',' | param_no_default+ '/' &')'
+static asdl_seq*
+slash_no_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // param_no_default+ '/' ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * a;
+        if (
+            (a = _loop1_60_rule(p))  // param_no_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' ','"));
+    }
+    { // param_no_default+ '/' &')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
+        Token * _literal;
+        asdl_seq * a;
+        if (
+            (a = _loop1_61_rule(p))  // param_no_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' &')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// slash_with_default:
+//     | param_no_default* param_with_default+ '/' ','
+//     | param_no_default* param_with_default+ '/' &')'
+static SlashWithDefault*
+slash_with_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    SlashWithDefault* _res = NULL;
+    int _mark = p->mark;
+    { // param_no_default* param_with_default+ '/' ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * a;
+        asdl_seq * b;
+        if (
+            (a = _loop0_62_rule(p))  // param_no_default*
+            &&
+            (b = _loop1_63_rule(p))  // param_with_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
+            _res = _PyPegen_slash_with_default ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
+    }
+    { // param_no_default* param_with_default+ '/' &')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
+        Token * _literal;
+        asdl_seq * a;
+        asdl_seq * b;
+        if (
+            (a = _loop0_64_rule(p))  // param_no_default*
+            &&
+            (b = _loop1_65_rule(p))  // param_with_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
+            _res = _PyPegen_slash_with_default ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// star_etc:
+//     | '*' param_no_default param_maybe_default* kwds?
+//     | '*' ',' param_maybe_default+ kwds?
+//     | kwds
+//     | invalid_star_etc
+static StarEtc*
+star_etc_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    StarEtc* _res = NULL;
+    int _mark = p->mark;
+    { // '*' param_no_default param_maybe_default* kwds?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
+        Token * _literal;
+        arg_ty a;
+        asdl_seq * b;
+        void *c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = param_no_default_rule(p))  // param_no_default
+            &&
+            (b = _loop0_66_rule(p))  // param_maybe_default*
+            &&
+            (c = kwds_rule(p), 1)  // kwds?
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
+            _res = _PyPegen_star_etc ( p , a , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
+    }
+    { // '*' ',' param_maybe_default+ kwds?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * b;
+        void *c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (b = _loop1_67_rule(p))  // param_maybe_default+
+            &&
+            (c = kwds_rule(p), 1)  // kwds?
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
+            _res = _PyPegen_star_etc ( p , NULL , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
+    }
+    { // kwds
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwds"));
+        arg_ty a;
+        if (
+            (a = kwds_rule(p))  // kwds
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwds"));
+            _res = _PyPegen_star_etc ( p , NULL , NULL , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwds"));
+    }
+    if (p->call_invalid_rules) { // invalid_star_etc
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
+        void *invalid_star_etc_var;
+        if (
+            (invalid_star_etc_var = invalid_star_etc_rule(p))  // invalid_star_etc
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
+            _res = invalid_star_etc_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_star_etc"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// kwds: '**' param_no_default
+static arg_ty
+kwds_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arg_ty _res = NULL;
+    int _mark = p->mark;
+    { // '**' param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
+        Token * _literal;
+        arg_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (a = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param_no_default"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// param_no_default: param ',' TYPE_COMMENT? | param TYPE_COMMENT? &')'
+static arg_ty
+param_no_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arg_ty _res = NULL;
+    int _mark = p->mark;
+    { // param ',' TYPE_COMMENT?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
+        Token * _literal;
+        arg_ty a;
+        void *tc;
+        if (
+            (a = param_rule(p))  // param
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+        )
+        {
+            D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
+            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param ',' TYPE_COMMENT?"));
+    }
+    { // param TYPE_COMMENT? &')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
+        arg_ty a;
+        void *tc;
+        if (
+            (a = param_rule(p))  // param
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
+            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param TYPE_COMMENT? &')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// param_with_default: param default ',' TYPE_COMMENT? | param default TYPE_COMMENT? &')'
+static NameDefaultPair*
+param_with_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    NameDefaultPair* _res = NULL;
+    int _mark = p->mark;
+    { // param default ',' TYPE_COMMENT?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
+        Token * _literal;
+        arg_ty a;
+        expr_ty c;
+        void *tc;
+        if (
+            (a = param_rule(p))  // param
+            &&
+            (c = default_rule(p))  // default
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+        )
+        {
+            D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
+            _res = _PyPegen_name_default_pair ( p , a , c , tc );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default ',' TYPE_COMMENT?"));
+    }
+    { // param default TYPE_COMMENT? &')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
+        arg_ty a;
+        expr_ty c;
+        void *tc;
+        if (
+            (a = param_rule(p))  // param
+            &&
+            (c = default_rule(p))  // default
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
+            _res = _PyPegen_name_default_pair ( p , a , c , tc );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default TYPE_COMMENT? &')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// param_maybe_default:
+//     | param default? ',' TYPE_COMMENT?
+//     | param default? TYPE_COMMENT? &')'
+static NameDefaultPair*
+param_maybe_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    NameDefaultPair* _res = NULL;
+    int _mark = p->mark;
+    { // param default? ',' TYPE_COMMENT?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
+        Token * _literal;
+        arg_ty a;
+        void *c;
+        void *tc;
+        if (
+            (a = param_rule(p))  // param
+            &&
+            (c = default_rule(p), 1)  // default?
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+        )
+        {
+            D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
+            _res = _PyPegen_name_default_pair ( p , a , c , tc );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
+    }
+    { // param default? TYPE_COMMENT? &')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
+        arg_ty a;
+        void *c;
+        void *tc;
+        if (
+            (a = param_rule(p))  // param
+            &&
+            (c = default_rule(p), 1)  // default?
+            &&
+            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1)  // TYPE_COMMENT?
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
+            _res = _PyPegen_name_default_pair ( p , a , c , tc );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// param: NAME annotation?
+static arg_ty
+param_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arg_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME annotation?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
+        expr_ty a;
+        void *b;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (b = annotation_rule(p), 1)  // annotation?
+        )
+        {
+            D(fprintf(stderr, "%*c+ param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_arg ( a -> v . Name . id , b , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s param[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME annotation?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// annotation: ':' expression
+static expr_ty
+annotation_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // ':' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s annotation[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// default: '=' expression
+static expr_ty
+default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // '=' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// decorators: (('@' named_expression NEWLINE))+
+static asdl_seq*
+decorators_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // (('@' named_expression NEWLINE))+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
+        asdl_seq * a;
+        if (
+            (a = _loop1_68_rule(p))  // (('@' named_expression NEWLINE))+
+        )
+        {
+            D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s decorators[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(('@' named_expression NEWLINE))+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// class_def: decorators class_def_raw | class_def_raw
+static stmt_ty
+class_def_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    { // decorators class_def_raw
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
+        asdl_seq* a;
+        stmt_ty b;
+        if (
+            (a = decorators_rule(p))  // decorators
+            &&
+            (b = class_def_raw_rule(p))  // class_def_raw
+        )
+        {
+            D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
+            _res = _PyPegen_class_def_decorators ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators class_def_raw"));
+    }
+    { // class_def_raw
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
+        stmt_ty class_def_raw_var;
+        if (
+            (class_def_raw_var = class_def_raw_rule(p))  // class_def_raw
+        )
+        {
+            D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
+            _res = class_def_raw_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_def_raw"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// class_def_raw: 'class' NAME ['(' arguments? ')'] ':' block
+static stmt_ty
+class_def_raw_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    stmt_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'class' NAME ['(' arguments? ')'] ':' block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' block"));
+        Token * _keyword;
+        Token * _literal;
+        expr_ty a;
+        void *b;
+        asdl_seq* c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 524))  // token='class'
+            &&
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (b = _tmp_69_rule(p), 1)  // ['(' arguments? ')']
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (c = block_rule(p))  // block
+        )
+        {
+            D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' block"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME ['(' arguments? ')'] ':' block"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// block: NEWLINE INDENT statements DEDENT | simple_stmt | invalid_block
+static asdl_seq*
+block_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    if (_PyPegen_is_memoized(p, block_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    { // NEWLINE INDENT statements DEDENT
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
+        asdl_seq* a;
+        Token * dedent_var;
+        Token * indent_var;
+        Token * newline_var;
+        if (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+            &&
+            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
+            &&
+            (a = statements_rule(p))  // statements
+            &&
+            (dedent_var = _PyPegen_expect_token(p, DEDENT))  // token='DEDENT'
+        )
+        {
+            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
+    }
+    { // simple_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
+        asdl_seq* simple_stmt_var;
+        if (
+            (simple_stmt_var = simple_stmt_rule(p))  // simple_stmt
+        )
+        {
+            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt"));
+            _res = simple_stmt_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt"));
+    }
+    if (p->call_invalid_rules) { // invalid_block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_block"));
+        void *invalid_block_var;
+        if (
+            (invalid_block_var = invalid_block_rule(p))  // invalid_block
+        )
+        {
+            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_block"));
+            _res = invalid_block_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_block"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, block_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// star_expressions:
+//     | star_expression ((',' star_expression))+ ','?
+//     | star_expression ','
+//     | star_expression
+static expr_ty
+star_expressions_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // star_expression ((',' star_expression))+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        expr_ty a;
+        asdl_seq * b;
+        if (
+            (a = star_expression_rule(p))  // star_expression
+            &&
+            (b = _loop1_70_rule(p))  // ((',' star_expression))+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( CHECK ( _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
+    }
+    { // star_expression ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (a = star_expression_rule(p))  // star_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( CHECK ( _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression ','"));
+    }
+    { // star_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression"));
+        expr_ty star_expression_var;
+        if (
+            (star_expression_var = star_expression_rule(p))  // star_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression"));
+            _res = star_expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// star_expression: '*' bitwise_or | expression
+static expr_ty
+star_expression_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, star_expression_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '*' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Starred ( a , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or"));
+    }
+    { // expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
+        expr_ty expression_var;
+        if (
+            (expression_var = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
+            _res = expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, star_expression_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// star_named_expressions: ','.star_named_expression+ ','?
+static asdl_seq*
+star_named_expressions_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.star_named_expression+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_named_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        if (
+            (a = _gather_71_rule(p))  // ','.star_named_expression+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_named_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_named_expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_named_expression+ ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// star_named_expression: '*' bitwise_or | named_expression
+static expr_ty
+star_named_expression_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '*' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Starred ( a , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or"));
+    }
+    { // named_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
+        expr_ty named_expression_var;
+        if (
+            (named_expression_var = named_expression_rule(p))  // named_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
+            _res = named_expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// named_expression: NAME ':=' ~ expression | expression !':=' | invalid_named_expression
+static expr_ty
+named_expression_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME ':=' ~ expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
+        int _cut_var = 0;
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
+            &&
+            (_cut_var = 1)
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_NamedExpr ( CHECK ( _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':=' ~ expression"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    { // expression !':='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
+        expr_ty expression_var;
+        if (
+            (expression_var = expression_rule(p))  // expression
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53)  // token=':='
+        )
+        {
+            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='"));
+            _res = expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='"));
+    }
+    if (p->call_invalid_rules) { // invalid_named_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
+        void *invalid_named_expression_var;
+        if (
+            (invalid_named_expression_var = invalid_named_expression_rule(p))  // invalid_named_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
+            _res = invalid_named_expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_named_expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// annotated_rhs: yield_expr | star_expressions
+static expr_ty
+annotated_rhs_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // yield_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+        expr_ty yield_expr_var;
+        if (
+            (yield_expr_var = yield_expr_rule(p))  // yield_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+            _res = yield_expr_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
+    }
+    { // star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+        expr_ty star_expressions_var;
+        if (
+            (star_expressions_var = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+            _res = star_expressions_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// expressions: expression ((',' expression))+ ','? | expression ',' | expression
+static expr_ty
+expressions_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // expression ((',' expression))+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        expr_ty a;
+        asdl_seq * b;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (b = _loop1_73_rule(p))  // ((',' expression))+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( CHECK ( _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ((',' expression))+ ','?"));
+    }
+    { // expression ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ','"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ','"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( CHECK ( _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ','"));
+    }
+    { // expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
+        expr_ty expression_var;
+        if (
+            (expression_var = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
+            _res = expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// expression: disjunction 'if' disjunction 'else' expression | disjunction | lambdef
+static expr_ty
+expression_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, expression_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // disjunction 'if' disjunction 'else' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
+        Token * _keyword;
+        Token * _keyword_1;
+        expr_ty a;
+        expr_ty b;
+        expr_ty c;
+        if (
+            (a = disjunction_rule(p))  // disjunction
+            &&
+            (_keyword = _PyPegen_expect_token(p, 510))  // token='if'
+            &&
+            (b = disjunction_rule(p))  // disjunction
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 516))  // token='else'
+            &&
+            (c = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_IfExp ( b , a , c , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
+    }
+    { // disjunction
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
+        expr_ty disjunction_var;
+        if (
+            (disjunction_var = disjunction_rule(p))  // disjunction
+        )
+        {
+            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction"));
+            _res = disjunction_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction"));
+    }
+    { // lambdef
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
+        expr_ty lambdef_var;
+        if (
+            (lambdef_var = lambdef_rule(p))  // lambdef
+        )
+        {
+            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef"));
+            _res = lambdef_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, expression_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// lambdef: 'lambda' lambda_params? ':' expression
+static expr_ty
+lambdef_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'lambda' lambda_params? ':' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambdef[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
+        Token * _keyword;
+        Token * _literal;
+        void *a;
+        expr_ty b;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 525))  // token='lambda'
+            &&
+            (a = lambda_params_rule(p), 1)  // lambda_params?
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambdef[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Lambda ( ( a ) ? a : CHECK ( _PyPegen_empty_arguments ( p ) ) , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambdef[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_params: invalid_lambda_parameters | lambda_parameters
+static arguments_ty
+lambda_params_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arguments_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->call_invalid_rules) { // invalid_lambda_parameters
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
+        void *invalid_lambda_parameters_var;
+        if (
+            (invalid_lambda_parameters_var = invalid_lambda_parameters_rule(p))  // invalid_lambda_parameters
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
+            _res = invalid_lambda_parameters_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_parameters"));
+    }
+    { // lambda_parameters
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
+        arguments_ty lambda_parameters_var;
+        if (
+            (lambda_parameters_var = lambda_parameters_rule(p))  // lambda_parameters
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
+            _res = lambda_parameters_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_parameters"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_parameters:
+//     | lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?
+//     | lambda_slash_with_default lambda_param_with_default* lambda_star_etc?
+//     | lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?
+//     | lambda_param_with_default+ lambda_star_etc?
+//     | lambda_star_etc
+static arguments_ty
+lambda_parameters_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arguments_ty _res = NULL;
+    int _mark = p->mark;
+    { // lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
+        asdl_seq* a;
+        asdl_seq * b;
+        asdl_seq * c;
+        void *d;
+        if (
+            (a = lambda_slash_no_default_rule(p))  // lambda_slash_no_default
+            &&
+            (b = _loop0_74_rule(p))  // lambda_param_no_default*
+            &&
+            (c = _loop0_75_rule(p))  // lambda_param_with_default*
+            &&
+            (d = lambda_star_etc_rule(p), 1)  // lambda_star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
+            _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
+    }
+    { // lambda_slash_with_default lambda_param_with_default* lambda_star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
+        SlashWithDefault* a;
+        asdl_seq * b;
+        void *c;
+        if (
+            (a = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
+            &&
+            (b = _loop0_76_rule(p))  // lambda_param_with_default*
+            &&
+            (c = lambda_star_etc_rule(p), 1)  // lambda_star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
+            _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
+    }
+    { // lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
+        asdl_seq * a;
+        asdl_seq * b;
+        void *c;
+        if (
+            (a = _loop1_77_rule(p))  // lambda_param_no_default+
+            &&
+            (b = _loop0_78_rule(p))  // lambda_param_with_default*
+            &&
+            (c = lambda_star_etc_rule(p), 1)  // lambda_star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
+            _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
+    }
+    { // lambda_param_with_default+ lambda_star_etc?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
+        asdl_seq * a;
+        void *b;
+        if (
+            (a = _loop1_79_rule(p))  // lambda_param_with_default+
+            &&
+            (b = lambda_star_etc_rule(p), 1)  // lambda_star_etc?
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
+            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
+    }
+    { // lambda_star_etc
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
+        StarEtc* a;
+        if (
+            (a = lambda_star_etc_rule(p))  // lambda_star_etc
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
+            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_star_etc"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_slash_no_default:
+//     | lambda_param_no_default+ '/' ','
+//     | lambda_param_no_default+ '/' &':'
+static asdl_seq*
+lambda_slash_no_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // lambda_param_no_default+ '/' ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * a;
+        if (
+            (a = _loop1_80_rule(p))  // lambda_param_no_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' ','"));
+    }
+    { // lambda_param_no_default+ '/' &':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
+        Token * _literal;
+        asdl_seq * a;
+        if (
+            (a = _loop1_81_rule(p))  // lambda_param_no_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_slash_with_default:
+//     | lambda_param_no_default* lambda_param_with_default+ '/' ','
+//     | lambda_param_no_default* lambda_param_with_default+ '/' &':'
+static SlashWithDefault*
+lambda_slash_with_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    SlashWithDefault* _res = NULL;
+    int _mark = p->mark;
+    { // lambda_param_no_default* lambda_param_with_default+ '/' ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * a;
+        asdl_seq * b;
+        if (
+            (a = _loop0_82_rule(p))  // lambda_param_no_default*
+            &&
+            (b = _loop1_83_rule(p))  // lambda_param_with_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
+            _res = _PyPegen_slash_with_default ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
+    }
+    { // lambda_param_no_default* lambda_param_with_default+ '/' &':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
+        Token * _literal;
+        asdl_seq * a;
+        asdl_seq * b;
+        if (
+            (a = _loop0_84_rule(p))  // lambda_param_no_default*
+            &&
+            (b = _loop1_85_rule(p))  // lambda_param_with_default+
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
+            _res = _PyPegen_slash_with_default ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_star_etc:
+//     | '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?
+//     | '*' ',' lambda_param_maybe_default+ lambda_kwds?
+//     | lambda_kwds
+//     | invalid_lambda_star_etc
+static StarEtc*
+lambda_star_etc_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    StarEtc* _res = NULL;
+    int _mark = p->mark;
+    { // '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
+        Token * _literal;
+        arg_ty a;
+        asdl_seq * b;
+        void *c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
+            &&
+            (b = _loop0_86_rule(p))  // lambda_param_maybe_default*
+            &&
+            (c = lambda_kwds_rule(p), 1)  // lambda_kwds?
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
+            _res = _PyPegen_star_etc ( p , a , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
+    }
+    { // '*' ',' lambda_param_maybe_default+ lambda_kwds?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * b;
+        void *c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (b = _loop1_87_rule(p))  // lambda_param_maybe_default+
+            &&
+            (c = lambda_kwds_rule(p), 1)  // lambda_kwds?
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
+            _res = _PyPegen_star_etc ( p , NULL , b , c );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
+    }
+    { // lambda_kwds
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
+        arg_ty a;
+        if (
+            (a = lambda_kwds_rule(p))  // lambda_kwds
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
+            _res = _PyPegen_star_etc ( p , NULL , NULL , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_kwds"));
+    }
+    if (p->call_invalid_rules) { // invalid_lambda_star_etc
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
+        void *invalid_lambda_star_etc_var;
+        if (
+            (invalid_lambda_star_etc_var = invalid_lambda_star_etc_rule(p))  // invalid_lambda_star_etc
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
+            _res = invalid_lambda_star_etc_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_star_etc"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_kwds: '**' lambda_param_no_default
+static arg_ty
+lambda_kwds_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arg_ty _res = NULL;
+    int _mark = p->mark;
+    { // '**' lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
+        Token * _literal;
+        arg_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param_no_default"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_param_no_default: lambda_param ',' | lambda_param &':'
+static arg_ty
+lambda_param_no_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arg_ty _res = NULL;
+    int _mark = p->mark;
+    { // lambda_param ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
+        Token * _literal;
+        arg_ty a;
+        if (
+            (a = lambda_param_rule(p))  // lambda_param
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param ','"));
+    }
+    { // lambda_param &':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
+        arg_ty a;
+        if (
+            (a = lambda_param_rule(p))  // lambda_param
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param &':'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_param_with_default: lambda_param default ',' | lambda_param default &':'
+static NameDefaultPair*
+lambda_param_with_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    NameDefaultPair* _res = NULL;
+    int _mark = p->mark;
+    { // lambda_param default ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
+        Token * _literal;
+        arg_ty a;
+        expr_ty c;
+        if (
+            (a = lambda_param_rule(p))  // lambda_param
+            &&
+            (c = default_rule(p))  // default
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
+            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default ','"));
+    }
+    { // lambda_param default &':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
+        arg_ty a;
+        expr_ty c;
+        if (
+            (a = lambda_param_rule(p))  // lambda_param
+            &&
+            (c = default_rule(p))  // default
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
+            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default &':'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_param_maybe_default: lambda_param default? ',' | lambda_param default? &':'
+static NameDefaultPair*
+lambda_param_maybe_default_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    NameDefaultPair* _res = NULL;
+    int _mark = p->mark;
+    { // lambda_param default? ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
+        Token * _literal;
+        arg_ty a;
+        void *c;
+        if (
+            (a = lambda_param_rule(p))  // lambda_param
+            &&
+            (c = default_rule(p), 1)  // default?
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
+            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? ','"));
+    }
+    { // lambda_param default? &':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
+        arg_ty a;
+        void *c;
+        if (
+            (a = lambda_param_rule(p))  // lambda_param
+            &&
+            (c = default_rule(p), 1)  // default?
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
+            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? &':'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lambda_param: NAME
+static arg_ty
+lambda_param_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    arg_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lambda_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty a;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ lambda_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_arg ( a -> v . Name . id , NULL , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lambda_param[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// disjunction: conjunction (('or' conjunction))+ | conjunction
+static expr_ty
+disjunction_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, disjunction_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // conjunction (('or' conjunction))+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
+        expr_ty a;
+        asdl_seq * b;
+        if (
+            (a = conjunction_rule(p))  // conjunction
+            &&
+            (b = _loop1_88_rule(p))  // (('or' conjunction))+
+        )
+        {
+            D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BoolOp ( Or , CHECK ( _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction (('or' conjunction))+"));
+    }
+    { // conjunction
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction"));
+        expr_ty conjunction_var;
+        if (
+            (conjunction_var = conjunction_rule(p))  // conjunction
+        )
+        {
+            D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction"));
+            _res = conjunction_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, disjunction_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// conjunction: inversion (('and' inversion))+ | inversion
+static expr_ty
+conjunction_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, conjunction_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // inversion (('and' inversion))+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
+        expr_ty a;
+        asdl_seq * b;
+        if (
+            (a = inversion_rule(p))  // inversion
+            &&
+            (b = _loop1_89_rule(p))  // (('and' inversion))+
+        )
+        {
+            D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BoolOp ( And , CHECK ( _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion (('and' inversion))+"));
+    }
+    { // inversion
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion"));
+        expr_ty inversion_var;
+        if (
+            (inversion_var = inversion_rule(p))  // inversion
+        )
+        {
+            D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion"));
+            _res = inversion_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, conjunction_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// inversion: 'not' inversion | comparison
+static expr_ty
+inversion_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, inversion_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'not' inversion
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
+        Token * _keyword;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 526))  // token='not'
+            &&
+            (a = inversion_rule(p))  // inversion
+        )
+        {
+            D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_UnaryOp ( Not , a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' inversion"));
+    }
+    { // comparison
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "comparison"));
+        expr_ty comparison_var;
+        if (
+            (comparison_var = comparison_rule(p))  // comparison
+        )
+        {
+            D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "comparison"));
+            _res = comparison_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "comparison"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, inversion_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// comparison: bitwise_or compare_op_bitwise_or_pair+ | bitwise_or
+static expr_ty
+comparison_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // bitwise_or compare_op_bitwise_or_pair+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
+        expr_ty a;
+        asdl_seq * b;
+        if (
+            (a = bitwise_or_rule(p))  // bitwise_or
+            &&
+            (b = _loop1_90_rule(p))  // compare_op_bitwise_or_pair+
+        )
+        {
+            D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Compare ( a , CHECK ( _PyPegen_get_cmpops ( p , b ) ) , CHECK ( _PyPegen_get_exprs ( p , b ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
+    }
+    { // bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
+        expr_ty bitwise_or_var;
+        if (
+            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
+            _res = bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// compare_op_bitwise_or_pair:
+//     | eq_bitwise_or
+//     | noteq_bitwise_or
+//     | lte_bitwise_or
+//     | lt_bitwise_or
+//     | gte_bitwise_or
+//     | gt_bitwise_or
+//     | notin_bitwise_or
+//     | in_bitwise_or
+//     | isnot_bitwise_or
+//     | is_bitwise_or
+static CmpopExprPair*
+compare_op_bitwise_or_pair_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // eq_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or"));
+        CmpopExprPair* eq_bitwise_or_var;
+        if (
+            (eq_bitwise_or_var = eq_bitwise_or_rule(p))  // eq_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or"));
+            _res = eq_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "eq_bitwise_or"));
+    }
+    { // noteq_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or"));
+        CmpopExprPair* noteq_bitwise_or_var;
+        if (
+            (noteq_bitwise_or_var = noteq_bitwise_or_rule(p))  // noteq_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or"));
+            _res = noteq_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "noteq_bitwise_or"));
+    }
+    { // lte_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or"));
+        CmpopExprPair* lte_bitwise_or_var;
+        if (
+            (lte_bitwise_or_var = lte_bitwise_or_rule(p))  // lte_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or"));
+            _res = lte_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lte_bitwise_or"));
+    }
+    { // lt_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or"));
+        CmpopExprPair* lt_bitwise_or_var;
+        if (
+            (lt_bitwise_or_var = lt_bitwise_or_rule(p))  // lt_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or"));
+            _res = lt_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lt_bitwise_or"));
+    }
+    { // gte_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or"));
+        CmpopExprPair* gte_bitwise_or_var;
+        if (
+            (gte_bitwise_or_var = gte_bitwise_or_rule(p))  // gte_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or"));
+            _res = gte_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gte_bitwise_or"));
+    }
+    { // gt_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or"));
+        CmpopExprPair* gt_bitwise_or_var;
+        if (
+            (gt_bitwise_or_var = gt_bitwise_or_rule(p))  // gt_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or"));
+            _res = gt_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gt_bitwise_or"));
+    }
+    { // notin_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or"));
+        CmpopExprPair* notin_bitwise_or_var;
+        if (
+            (notin_bitwise_or_var = notin_bitwise_or_rule(p))  // notin_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or"));
+            _res = notin_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "notin_bitwise_or"));
+    }
+    { // in_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "in_bitwise_or"));
+        CmpopExprPair* in_bitwise_or_var;
+        if (
+            (in_bitwise_or_var = in_bitwise_or_rule(p))  // in_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "in_bitwise_or"));
+            _res = in_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "in_bitwise_or"));
+    }
+    { // isnot_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or"));
+        CmpopExprPair* isnot_bitwise_or_var;
+        if (
+            (isnot_bitwise_or_var = isnot_bitwise_or_rule(p))  // isnot_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or"));
+            _res = isnot_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "isnot_bitwise_or"));
+    }
+    { // is_bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "is_bitwise_or"));
+        CmpopExprPair* is_bitwise_or_var;
+        if (
+            (is_bitwise_or_var = is_bitwise_or_rule(p))  // is_bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "is_bitwise_or"));
+            _res = is_bitwise_or_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "is_bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// eq_bitwise_or: '==' bitwise_or
+static CmpopExprPair*
+eq_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // '==' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> eq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 27))  // token='=='
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ eq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , Eq , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s eq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'==' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// noteq_bitwise_or: ('!=') bitwise_or
+static CmpopExprPair*
+noteq_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // ('!=') bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
+        void *_tmp_91_var;
+        expr_ty a;
+        if (
+            (_tmp_91_var = _tmp_91_rule(p))  // '!='
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ noteq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , NotEq , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s noteq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('!=') bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lte_bitwise_or: '<=' bitwise_or
+static CmpopExprPair*
+lte_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // '<=' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 29))  // token='<='
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ lte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , LtE , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<=' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// lt_bitwise_or: '<' bitwise_or
+static CmpopExprPair*
+lt_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // '<' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> lt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 20))  // token='<'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ lt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , Lt , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s lt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// gte_bitwise_or: '>=' bitwise_or
+static CmpopExprPair*
+gte_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // '>=' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> gte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 30))  // token='>='
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ gte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , GtE , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s gte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>=' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// gt_bitwise_or: '>' bitwise_or
+static CmpopExprPair*
+gt_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // '>' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> gt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 21))  // token='>'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ gt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , Gt , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s gt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// notin_bitwise_or: 'not' 'in' bitwise_or
+static CmpopExprPair*
+notin_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // 'not' 'in' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> notin_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
+        Token * _keyword;
+        Token * _keyword_1;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 526))  // token='not'
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 518))  // token='in'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ notin_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , NotIn , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s notin_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' 'in' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// in_bitwise_or: 'in' bitwise_or
+static CmpopExprPair*
+in_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // 'in' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> in_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
+        Token * _keyword;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 518))  // token='in'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ in_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , In , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s in_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'in' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// isnot_bitwise_or: 'is' 'not' bitwise_or
+static CmpopExprPair*
+isnot_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // 'is' 'not' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> isnot_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
+        Token * _keyword;
+        Token * _keyword_1;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 527))  // token='is'
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 526))  // token='not'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ isnot_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , IsNot , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s isnot_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' 'not' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// is_bitwise_or: 'is' bitwise_or
+static CmpopExprPair*
+is_bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    CmpopExprPair* _res = NULL;
+    int _mark = p->mark;
+    { // 'is' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> is_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
+        Token * _keyword;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 527))  // token='is'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ is_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
+            _res = _PyPegen_cmpop_expr_pair ( p , Is , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s is_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' bitwise_or"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// bitwise_or: bitwise_or '|' bitwise_xor | bitwise_xor
+static expr_ty bitwise_or_raw(Parser *);
+static expr_ty
+bitwise_or_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, bitwise_or_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_1 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res);
+        if (tmpvar_1) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = bitwise_or_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+bitwise_or_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // bitwise_or '|' bitwise_xor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = bitwise_or_rule(p))  // bitwise_or
+            &&
+            (_literal = _PyPegen_expect_token(p, 18))  // token='|'
+            &&
+            (b = bitwise_xor_rule(p))  // bitwise_xor
+        )
+        {
+            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , BitOr , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or '|' bitwise_xor"));
+    }
+    { // bitwise_xor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
+        expr_ty bitwise_xor_var;
+        if (
+            (bitwise_xor_var = bitwise_xor_rule(p))  // bitwise_xor
+        )
+        {
+            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
+            _res = bitwise_xor_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// bitwise_xor: bitwise_xor '^' bitwise_and | bitwise_and
+static expr_ty bitwise_xor_raw(Parser *);
+static expr_ty
+bitwise_xor_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, bitwise_xor_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res);
+        if (tmpvar_2) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = bitwise_xor_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+bitwise_xor_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // bitwise_xor '^' bitwise_and
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = bitwise_xor_rule(p))  // bitwise_xor
+            &&
+            (_literal = _PyPegen_expect_token(p, 32))  // token='^'
+            &&
+            (b = bitwise_and_rule(p))  // bitwise_and
+        )
+        {
+            D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , BitXor , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor '^' bitwise_and"));
+    }
+    { // bitwise_and
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
+        expr_ty bitwise_and_var;
+        if (
+            (bitwise_and_var = bitwise_and_rule(p))  // bitwise_and
+        )
+        {
+            D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
+            _res = bitwise_and_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// bitwise_and: bitwise_and '&' shift_expr | shift_expr
+static expr_ty bitwise_and_raw(Parser *);
+static expr_ty
+bitwise_and_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, bitwise_and_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res);
+        if (tmpvar_3) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = bitwise_and_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+bitwise_and_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // bitwise_and '&' shift_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = bitwise_and_rule(p))  // bitwise_and
+            &&
+            (_literal = _PyPegen_expect_token(p, 19))  // token='&'
+            &&
+            (b = shift_expr_rule(p))  // shift_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , BitAnd , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and '&' shift_expr"));
+    }
+    { // shift_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr"));
+        expr_ty shift_expr_var;
+        if (
+            (shift_expr_var = shift_expr_rule(p))  // shift_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr"));
+            _res = shift_expr_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// shift_expr: shift_expr '<<' sum | shift_expr '>>' sum | sum
+static expr_ty shift_expr_raw(Parser *);
+static expr_ty
+shift_expr_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, shift_expr_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_4 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res);
+        if (tmpvar_4) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = shift_expr_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+shift_expr_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // shift_expr '<<' sum
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = shift_expr_rule(p))  // shift_expr
+            &&
+            (_literal = _PyPegen_expect_token(p, 33))  // token='<<'
+            &&
+            (b = sum_rule(p))  // sum
+        )
+        {
+            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , LShift , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '<<' sum"));
+    }
+    { // shift_expr '>>' sum
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = shift_expr_rule(p))  // shift_expr
+            &&
+            (_literal = _PyPegen_expect_token(p, 34))  // token='>>'
+            &&
+            (b = sum_rule(p))  // sum
+        )
+        {
+            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , RShift , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '>>' sum"));
+    }
+    { // sum
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum"));
+        expr_ty sum_var;
+        if (
+            (sum_var = sum_rule(p))  // sum
+        )
+        {
+            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum"));
+            _res = sum_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// sum: sum '+' term | sum '-' term | term
+static expr_ty sum_raw(Parser *);
+static expr_ty
+sum_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, sum_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_5 = _PyPegen_update_memo(p, _mark, sum_type, _res);
+        if (tmpvar_5) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = sum_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+sum_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // sum '+' term
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = sum_rule(p))  // sum
+            &&
+            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
+            &&
+            (b = term_rule(p))  // term
+        )
+        {
+            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , Add , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '+' term"));
+    }
+    { // sum '-' term
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = sum_rule(p))  // sum
+            &&
+            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
+            &&
+            (b = term_rule(p))  // term
+        )
+        {
+            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , Sub , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '-' term"));
+    }
+    { // term
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term"));
+        expr_ty term_var;
+        if (
+            (term_var = term_rule(p))  // term
+        )
+        {
+            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term"));
+            _res = term_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// term:
+//     | term '*' factor
+//     | term '/' factor
+//     | term '//' factor
+//     | term '%' factor
+//     | term '@' factor
+//     | factor
+static expr_ty term_raw(Parser *);
+static expr_ty
+term_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, term_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_6 = _PyPegen_update_memo(p, _mark, term_type, _res);
+        if (tmpvar_6) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = term_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+term_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // term '*' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = term_rule(p))  // term
+            &&
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (b = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , Mult , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '*' factor"));
+    }
+    { // term '/' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = term_rule(p))  // term
+            &&
+            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
+            &&
+            (b = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , Div , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '/' factor"));
+    }
+    { // term '//' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = term_rule(p))  // term
+            &&
+            (_literal = _PyPegen_expect_token(p, 47))  // token='//'
+            &&
+            (b = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , FloorDiv , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '//' factor"));
+    }
+    { // term '%' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = term_rule(p))  // term
+            &&
+            (_literal = _PyPegen_expect_token(p, 24))  // token='%'
+            &&
+            (b = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , Mod , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '%' factor"));
+    }
+    { // term '@' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = term_rule(p))  // term
+            &&
+            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
+            &&
+            (b = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 5 , "The '@' operator is" , _Py_BinOp ( a , MatMult , b , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '@' factor"));
+    }
+    { // factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "factor"));
+        expr_ty factor_var;
+        if (
+            (factor_var = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "factor"));
+            _res = factor_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "factor"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// factor: '+' factor | '-' factor | '~' factor | power
+static expr_ty
+factor_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, factor_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '+' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' factor"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
+            &&
+            (a = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_UnaryOp ( UAdd , a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' factor"));
+    }
+    { // '-' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' factor"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
+            &&
+            (a = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_UnaryOp ( USub , a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' factor"));
+    }
+    { // '~' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~' factor"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 31))  // token='~'
+            &&
+            (a = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_UnaryOp ( Invert , a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~' factor"));
+    }
+    { // power
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "power"));
+        expr_ty power_var;
+        if (
+            (power_var = power_rule(p))  // power
+        )
+        {
+            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "power"));
+            _res = power_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "power"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, factor_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// power: await_primary '**' factor | await_primary
+static expr_ty
+power_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // await_primary '**' factor
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = await_primary_rule(p))  // await_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (b = factor_rule(p))  // factor
+        )
+        {
+            D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_BinOp ( a , Pow , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary '**' factor"));
+    }
+    { // await_primary
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary"));
+        expr_ty await_primary_var;
+        if (
+            (await_primary_var = await_primary_rule(p))  // await_primary
+        )
+        {
+            D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary"));
+            _res = await_primary_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// await_primary: AWAIT primary | primary
+static expr_ty
+await_primary_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, await_primary_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // AWAIT primary
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "AWAIT primary"));
+        expr_ty a;
+        Token * await_var;
+        if (
+            (await_var = _PyPegen_expect_token(p, AWAIT))  // token='AWAIT'
+            &&
+            (a = primary_rule(p))  // primary
+        )
+        {
+            D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "AWAIT primary"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = CHECK_VERSION ( 5 , "Await expressions are" , _Py_Await ( a , EXTRA ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "AWAIT primary"));
+    }
+    { // primary
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary"));
+        expr_ty primary_var;
+        if (
+            (primary_var = primary_rule(p))  // primary
+        )
+        {
+            D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary"));
+            _res = primary_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, await_primary_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// primary:
+//     | invalid_primary
+//     | primary '.' NAME
+//     | primary genexp
+//     | primary '(' arguments? ')'
+//     | primary '[' slices ']'
+//     | atom
+static expr_ty primary_raw(Parser *);
+static expr_ty
+primary_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, primary_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_7 = _PyPegen_update_memo(p, _mark, primary_type, _res);
+        if (tmpvar_7) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = primary_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+primary_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    if (p->call_invalid_rules) { // invalid_primary
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_primary"));
+        void *invalid_primary_var;
+        if (
+            (invalid_primary_var = invalid_primary_rule(p))  // invalid_primary
+        )
+        {
+            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_primary"));
+            _res = invalid_primary_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_primary"));
+    }
+    { // primary '.' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = primary_rule(p))  // primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Attribute ( a , b -> v . Name . id , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '.' NAME"));
+    }
+    { // primary genexp
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary genexp"));
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = primary_rule(p))  // primary
+            &&
+            (b = genexp_rule(p))  // genexp
+        )
+        {
+            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary genexp"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Call ( a , CHECK ( _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary genexp"));
+    }
+    { // primary '(' arguments? ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        void *b;
+        if (
+            (a = primary_rule(p))  // primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (b = arguments_rule(p), 1)  // arguments?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '(' arguments? ')'"));
+    }
+    { // primary '[' slices ']'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = primary_rule(p))  // primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = slices_rule(p))  // slices
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+        )
+        {
+            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Subscript ( a , b , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '[' slices ']'"));
+    }
+    { // atom
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom"));
+        expr_ty atom_var;
+        if (
+            (atom_var = atom_rule(p))  // atom
+        )
+        {
+            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom"));
+            _res = atom_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// slices: slice !',' | ','.slice+ ','?
+static expr_ty
+slices_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // slice !','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice !','"));
+        expr_ty a;
+        if (
+            (a = slice_rule(p))  // slice
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice !','"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice !','"));
+    }
+    { // ','.slice+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        if (
+            (a = _gather_92_rule(p))  // ','.slice+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( a , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.slice+ ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// slice: expression? ':' expression? [':' expression?] | expression
+static expr_ty
+slice_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // expression? ':' expression? [':' expression?]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
+        Token * _literal;
+        void *a;
+        void *b;
+        void *c;
+        if (
+            (a = expression_rule(p), 1)  // expression?
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = expression_rule(p), 1)  // expression?
+            &&
+            (c = _tmp_94_rule(p), 1)  // [':' expression?]
+        )
+        {
+            D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Slice ( a , b , c , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression? ':' expression? [':' expression?]"));
+    }
+    { // expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
+        expr_ty a;
+        if (
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// atom:
+//     | NAME
+//     | 'True'
+//     | 'False'
+//     | 'None'
+//     | '__peg_parser__'
+//     | &STRING strings
+//     | NUMBER
+//     | &'(' (tuple | group | genexp)
+//     | &'[' (list | listcomp)
+//     | &'{' (dict | set | dictcomp | setcomp)
+//     | '...'
+static expr_ty
+atom_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty name_var;
+        if (
+            (name_var = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            _res = name_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    { // 'True'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 528))  // token='True'
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Constant ( Py_True , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
+    }
+    { // 'False'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 529))  // token='False'
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Constant ( Py_False , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
+    }
+    { // 'None'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 530))  // token='None'
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Constant ( Py_None , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
+    }
+    { // '__peg_parser__'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'__peg_parser__'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 531))  // token='__peg_parser__'
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'__peg_parser__'"));
+            _res = RAISE_SYNTAX_ERROR ( "You found it!" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'__peg_parser__'"));
+    }
+    { // &STRING strings
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&STRING strings"));
+        expr_ty strings_var;
+        if (
+            _PyPegen_lookahead(1, _PyPegen_string_token, p)
+            &&
+            (strings_var = strings_rule(p))  // strings
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&STRING strings"));
+            _res = strings_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&STRING strings"));
+    }
+    { // NUMBER
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
+        expr_ty number_var;
+        if (
+            (number_var = _PyPegen_number_token(p))  // NUMBER
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
+            _res = number_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
+    }
+    { // &'(' (tuple | group | genexp)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)"));
+        void *_tmp_95_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7)  // token='('
+            &&
+            (_tmp_95_var = _tmp_95_rule(p))  // tuple | group | genexp
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)"));
+            _res = _tmp_95_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'(' (tuple | group | genexp)"));
+    }
+    { // &'[' (list | listcomp)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)"));
+        void *_tmp_96_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9)  // token='['
+            &&
+            (_tmp_96_var = _tmp_96_rule(p))  // list | listcomp
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)"));
+            _res = _tmp_96_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'[' (list | listcomp)"));
+    }
+    { // &'{' (dict | set | dictcomp | setcomp)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
+        void *_tmp_97_var;
+        if (
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25)  // token='{'
+            &&
+            (_tmp_97_var = _tmp_97_rule(p))  // dict | set | dictcomp | setcomp
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
+            _res = _tmp_97_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)"));
+    }
+    { // '...'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
+        )
+        {
+            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Constant ( Py_Ellipsis , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// strings: STRING+
+static expr_ty
+strings_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, strings_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    { // STRING+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING+"));
+        asdl_seq * a;
+        if (
+            (a = _loop1_98_rule(p))  // STRING+
+        )
+        {
+            D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING+"));
+            _res = _PyPegen_concatenate_strings ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING+"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, strings_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// list: '[' star_named_expressions? ']'
+static expr_ty
+list_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '[' star_named_expressions? ']'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> list[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (a = star_named_expressions_rule(p), 1)  // star_named_expressions?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+        )
+        {
+            D(fprintf(stderr, "%*c+ list[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_List ( a , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s list[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_named_expressions? ']'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// listcomp: '[' named_expression ~ for_if_clauses ']' | invalid_comprehension
+static expr_ty
+listcomp_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '[' named_expression ~ for_if_clauses ']'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' named_expression ~ for_if_clauses ']'"));
+        int _cut_var = 0;
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        asdl_seq* b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_cut_var = 1)
+            &&
+            (b = for_if_clauses_rule(p))  // for_if_clauses
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+        )
+        {
+            D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' named_expression ~ for_if_clauses ']'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_ListComp ( a , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' named_expression ~ for_if_clauses ']'"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    if (p->call_invalid_rules) { // invalid_comprehension
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
+        void *invalid_comprehension_var;
+        if (
+            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
+        )
+        {
+            D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
+            _res = invalid_comprehension_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// tuple: '(' [star_named_expression ',' star_named_expressions?] ')'
+static expr_ty
+tuple_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '(' [star_named_expression ',' star_named_expressions?] ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> tuple[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = _tmp_99_rule(p), 1)  // [star_named_expression ',' star_named_expressions?]
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ tuple[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( a , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s tuple[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// group: '(' (yield_expr | named_expression) ')' | invalid_group
+static expr_ty
+group_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // '(' (yield_expr | named_expression) ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = _tmp_100_rule(p))  // yield_expr | named_expression
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
+    }
+    if (p->call_invalid_rules) { // invalid_group
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_group"));
+        void *invalid_group_var;
+        if (
+            (invalid_group_var = invalid_group_rule(p))  // invalid_group
+        )
+        {
+            D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_group"));
+            _res = invalid_group_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_group"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// genexp: '(' named_expression ~ for_if_clauses ')' | invalid_comprehension
+static expr_ty
+genexp_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '(' named_expression ~ for_if_clauses ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' named_expression ~ for_if_clauses ')'"));
+        int _cut_var = 0;
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        asdl_seq* b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_cut_var = 1)
+            &&
+            (b = for_if_clauses_rule(p))  // for_if_clauses
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' named_expression ~ for_if_clauses ')'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_GeneratorExp ( a , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' named_expression ~ for_if_clauses ')'"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    if (p->call_invalid_rules) { // invalid_comprehension
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
+        void *invalid_comprehension_var;
+        if (
+            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
+        )
+        {
+            D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
+            _res = invalid_comprehension_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// set: '{' star_named_expressions '}'
+static expr_ty
+set_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '{' star_named_expressions '}'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> set[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq* a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
+            &&
+            (a = star_named_expressions_rule(p))  // star_named_expressions
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
+        )
+        {
+            D(fprintf(stderr, "%*c+ set[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Set ( a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s set[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' star_named_expressions '}'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// setcomp: '{' named_expression ~ for_if_clauses '}' | invalid_comprehension
+static expr_ty
+setcomp_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '{' named_expression ~ for_if_clauses '}'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' named_expression ~ for_if_clauses '}'"));
+        int _cut_var = 0;
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        asdl_seq* b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
+            &&
+            (a = named_expression_rule(p))  // named_expression
+            &&
+            (_cut_var = 1)
+            &&
+            (b = for_if_clauses_rule(p))  // for_if_clauses
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
+        )
+        {
+            D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' named_expression ~ for_if_clauses '}'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_SetComp ( a , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' named_expression ~ for_if_clauses '}'"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    if (p->call_invalid_rules) { // invalid_comprehension
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
+        void *invalid_comprehension_var;
+        if (
+            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
+        )
+        {
+            D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
+            _res = invalid_comprehension_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// dict: '{' double_starred_kvpairs? '}'
+static expr_ty
+dict_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '{' double_starred_kvpairs? '}'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
+            &&
+            (a = double_starred_kvpairs_rule(p), 1)  // double_starred_kvpairs?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
+        )
+        {
+            D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Dict ( CHECK ( _PyPegen_get_keys ( p , a ) ) , CHECK ( _PyPegen_get_values ( p , a ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// dictcomp: '{' kvpair for_if_clauses '}' | invalid_dict_comprehension
+static expr_ty
+dictcomp_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '{' kvpair for_if_clauses '}'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
+        Token * _literal;
+        Token * _literal_1;
+        KeyValuePair* a;
+        asdl_seq* b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
+            &&
+            (a = kvpair_rule(p))  // kvpair
+            &&
+            (b = for_if_clauses_rule(p))  // for_if_clauses
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
+        )
+        {
+            D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_DictComp ( a -> key , a -> value , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
+    }
+    if (p->call_invalid_rules) { // invalid_dict_comprehension
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension"));
+        void *invalid_dict_comprehension_var;
+        if (
+            (invalid_dict_comprehension_var = invalid_dict_comprehension_rule(p))  // invalid_dict_comprehension
+        )
+        {
+            D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension"));
+            _res = invalid_dict_comprehension_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_dict_comprehension"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// double_starred_kvpairs: ','.double_starred_kvpair+ ','?
+static asdl_seq*
+double_starred_kvpairs_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.double_starred_kvpair+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        if (
+            (a = _gather_101_rule(p))  // ','.double_starred_kvpair+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// double_starred_kvpair: '**' bitwise_or | kvpair
+static KeyValuePair*
+double_starred_kvpair_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    KeyValuePair* _res = NULL;
+    int _mark = p->mark;
+    { // '**' bitwise_or
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (a = bitwise_or_rule(p))  // bitwise_or
+        )
+        {
+            D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
+            _res = _PyPegen_key_value_pair ( p , NULL , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or"));
+    }
+    { // kvpair
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kvpair"));
+        KeyValuePair* kvpair_var;
+        if (
+            (kvpair_var = kvpair_rule(p))  // kvpair
+        )
+        {
+            D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kvpair"));
+            _res = kvpair_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kvpair"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// kvpair: expression ':' expression
+static KeyValuePair*
+kvpair_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    KeyValuePair* _res = NULL;
+    int _mark = p->mark;
+    { // expression ':' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
+            _res = _PyPegen_key_value_pair ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kvpair[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// for_if_clauses: for_if_clause+
+static asdl_seq*
+for_if_clauses_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // for_if_clause+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
+        asdl_seq * _loop1_103_var;
+        if (
+            (_loop1_103_var = _loop1_103_rule(p))  // for_if_clause+
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_if_clauses[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
+            _res = _loop1_103_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_if_clauses[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// for_if_clause:
+//     | ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
+//     | 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
+//     | invalid_for_target
+static comprehension_ty
+for_if_clause_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    comprehension_ty _res = NULL;
+    int _mark = p->mark;
+    { // ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
+        int _cut_var = 0;
+        Token * _keyword;
+        Token * _keyword_1;
+        expr_ty a;
+        Token * async_var;
+        expr_ty b;
+        asdl_seq * c;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+            &&
+            (_keyword = _PyPegen_expect_token(p, 517))  // token='for'
+            &&
+            (a = star_targets_rule(p))  // star_targets
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 518))  // token='in'
+            &&
+            (_cut_var = 1)
+            &&
+            (b = disjunction_rule(p))  // disjunction
+            &&
+            (c = _loop0_104_rule(p))  // (('if' disjunction))*
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
+            _res = CHECK_VERSION ( 6 , "Async comprehensions are" , _Py_comprehension ( a , b , c , 1 , p -> arena ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    { // 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
+        int _cut_var = 0;
+        Token * _keyword;
+        Token * _keyword_1;
+        expr_ty a;
+        expr_ty b;
+        asdl_seq * c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 517))  // token='for'
+            &&
+            (a = star_targets_rule(p))  // star_targets
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 518))  // token='in'
+            &&
+            (_cut_var = 1)
+            &&
+            (b = disjunction_rule(p))  // disjunction
+            &&
+            (c = _loop0_105_rule(p))  // (('if' disjunction))*
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
+            _res = _Py_comprehension ( a , b , c , 0 , p -> arena );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
+        if (_cut_var) {
+            D(p->level--);
+            return NULL;
+        }
+    }
+    if (p->call_invalid_rules) { // invalid_for_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
+        void *invalid_for_target_var;
+        if (
+            (invalid_for_target_var = invalid_for_target_rule(p))  // invalid_for_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
+            _res = invalid_for_target_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// yield_expr: 'yield' 'from' expression | 'yield' star_expressions?
+static expr_ty
+yield_expr_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // 'yield' 'from' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
+        Token * _keyword;
+        Token * _keyword_1;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 504))  // token='yield'
+            &&
+            (_keyword_1 = _PyPegen_expect_token(p, 514))  // token='from'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_YieldFrom ( a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' 'from' expression"));
+    }
+    { // 'yield' star_expressions?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
+        Token * _keyword;
+        void *a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 504))  // token='yield'
+            &&
+            (a = star_expressions_rule(p), 1)  // star_expressions?
+        )
+        {
+            D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Yield ( a , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' star_expressions?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// arguments: args ','? &')' | invalid_arguments
+static expr_ty
+arguments_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, arguments_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    { // args ','? &')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        expr_ty a;
+        if (
+            (a = args_rule(p))  // args
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+            &&
+            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','? &')'"));
+    }
+    if (p->call_invalid_rules) { // invalid_arguments
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
+        void *invalid_arguments_var;
+        if (
+            (invalid_arguments_var = invalid_arguments_rule(p))  // invalid_arguments
+        )
+        {
+            D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
+            _res = invalid_arguments_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arguments"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, arguments_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// args: ','.(starred_expression | named_expression !'=')+ [',' kwargs] | kwargs
+static expr_ty
+args_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // ','.(starred_expression | named_expression !'=')+ [',' kwargs]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | named_expression !'=')+ [',' kwargs]"));
+        asdl_seq * a;
+        void *b;
+        if (
+            (a = _gather_106_rule(p))  // ','.(starred_expression | named_expression !'=')+
+            &&
+            (b = _tmp_108_rule(p), 1)  // [',' kwargs]
+        )
+        {
+            D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | named_expression !'=')+ [',' kwargs]"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _PyPegen_collect_call_seqs ( p , a , b , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | named_expression !'=')+ [',' kwargs]"));
+    }
+    { // kwargs
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs"));
+        asdl_seq* a;
+        if (
+            (a = kwargs_rule(p))  // kwargs
+        )
+        {
+            D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// kwargs:
+//     | ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
+//     | ','.kwarg_or_starred+
+//     | ','.kwarg_or_double_starred+
+static asdl_seq*
+kwargs_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
+        Token * _literal;
+        asdl_seq * a;
+        asdl_seq * b;
+        if (
+            (a = _gather_109_rule(p))  // ','.kwarg_or_starred+
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (b = _gather_111_rule(p))  // ','.kwarg_or_double_starred+
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
+            _res = _PyPegen_join_sequences ( p , a , b );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+"));
+    }
+    { // ','.kwarg_or_starred+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+"));
+        asdl_seq * _gather_113_var;
+        if (
+            (_gather_113_var = _gather_113_rule(p))  // ','.kwarg_or_starred+
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+"));
+            _res = _gather_113_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+"));
+    }
+    { // ','.kwarg_or_double_starred+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
+        asdl_seq * _gather_115_var;
+        if (
+            (_gather_115_var = _gather_115_rule(p))  // ','.kwarg_or_double_starred+
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
+            _res = _gather_115_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_double_starred+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// starred_expression: '*' expression
+static expr_ty
+starred_expression_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '*' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Starred ( a , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// kwarg_or_starred: NAME '=' expression | starred_expression | invalid_kwarg
+static KeywordOrStarred*
+kwarg_or_starred_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    KeywordOrStarred* _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME '=' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _PyPegen_keyword_or_starred ( p , CHECK ( _Py_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression"));
+    }
+    { // starred_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
+        expr_ty a;
+        if (
+            (a = starred_expression_rule(p))  // starred_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
+            _res = _PyPegen_keyword_or_starred ( p , a , 0 );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
+    }
+    if (p->call_invalid_rules) { // invalid_kwarg
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
+        void *invalid_kwarg_var;
+        if (
+            (invalid_kwarg_var = invalid_kwarg_rule(p))  // invalid_kwarg
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
+            _res = invalid_kwarg_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// kwarg_or_double_starred: NAME '=' expression | '**' expression | invalid_kwarg
+static KeywordOrStarred*
+kwarg_or_double_starred_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    KeywordOrStarred* _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME '=' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+            &&
+            (b = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _PyPegen_keyword_or_starred ( p , CHECK ( _Py_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression"));
+    }
+    { // '**' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _PyPegen_keyword_or_starred ( p , CHECK ( _Py_keyword ( NULL , a , EXTRA ) ) , 1 );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression"));
+    }
+    if (p->call_invalid_rules) { // invalid_kwarg
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
+        void *invalid_kwarg_var;
+        if (
+            (invalid_kwarg_var = invalid_kwarg_rule(p))  // invalid_kwarg
+        )
+        {
+            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
+            _res = invalid_kwarg_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// star_targets: star_target !',' | star_target ((',' star_target))* ','?
+static expr_ty
+star_targets_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // star_target !','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target !','"));
+        expr_ty a;
+        if (
+            (a = star_target_rule(p))  // star_target
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target !','"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target !','"));
+    }
+    { // star_target ((',' star_target))* ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        expr_ty a;
+        asdl_seq * b;
+        if (
+            (a = star_target_rule(p))  // star_target
+            &&
+            (b = _loop0_117_rule(p))  // ((',' star_target))*
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( CHECK ( _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))* ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// star_targets_seq: ','.star_target+ ','?
+static asdl_seq*
+star_targets_seq_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.star_target+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_targets_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        if (
+            (a = _gather_118_rule(p))  // ','.star_target+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_targets_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_targets_seq[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_target+ ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// star_target:
+//     | '*' (!'*' star_target)
+//     | t_primary '.' NAME !t_lookahead
+//     | t_primary '[' slices ']' !t_lookahead
+//     | star_atom
+static expr_ty
+star_target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, star_target_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // '*' (!'*' star_target)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
+        Token * _literal;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (a = _tmp_120_rule(p))  // !'*' star_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Starred ( CHECK ( _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (!'*' star_target)"));
+    }
+    { // t_primary '.' NAME !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Attribute ( a , b -> v . Name . id , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+    }
+    { // t_primary '[' slices ']' !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = slices_rule(p))  // slices
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Subscript ( a , b , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+    }
+    { // star_atom
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_atom"));
+        expr_ty star_atom_var;
+        if (
+            (star_atom_var = star_atom_rule(p))  // star_atom
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_atom"));
+            _res = star_atom_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_atom"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, star_target_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// star_atom:
+//     | NAME
+//     | '(' star_target ')'
+//     | '(' star_targets_seq? ')'
+//     | '[' star_targets_seq? ']'
+static expr_ty
+star_atom_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty a;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            _res = _PyPegen_set_expr_context ( p , a , Store );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    { // '(' star_target ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' star_target ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = star_target_rule(p))  // star_target
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' star_target ')'"));
+            _res = _PyPegen_set_expr_context ( p , a , Store );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' star_target ')'"));
+    }
+    { // '(' star_targets_seq? ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' star_targets_seq? ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = star_targets_seq_rule(p), 1)  // star_targets_seq?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' star_targets_seq? ')'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( a , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' star_targets_seq? ')'"));
+    }
+    { // '[' star_targets_seq? ']'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_targets_seq? ']'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (a = star_targets_seq_rule(p), 1)  // star_targets_seq?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+        )
+        {
+            D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_targets_seq? ']'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_List ( a , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_targets_seq? ']'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// single_target: single_subscript_attribute_target | NAME | '(' single_target ')'
+static expr_ty
+single_target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // single_subscript_attribute_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
+        expr_ty single_subscript_attribute_target_var;
+        if (
+            (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p))  // single_subscript_attribute_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
+            _res = single_subscript_attribute_target_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target"));
+    }
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty a;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            _res = _PyPegen_set_expr_context ( p , a , Store );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    { // '(' single_target ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = single_target_rule(p))  // single_target
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// single_subscript_attribute_target:
+//     | t_primary '.' NAME !t_lookahead
+//     | t_primary '[' slices ']' !t_lookahead
+static expr_ty
+single_subscript_attribute_target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // t_primary '.' NAME !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Attribute ( a , b -> v . Name . id , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+    }
+    { // t_primary '[' slices ']' !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = slices_rule(p))  // slices
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Subscript ( a , b , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// del_targets: ','.del_target+ ','?
+static asdl_seq*
+del_targets_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.del_target+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        if (
+            (a = _gather_121_rule(p))  // ','.del_target+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.del_target+ ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// del_target:
+//     | t_primary '.' NAME !t_lookahead
+//     | t_primary '[' slices ']' !t_lookahead
+//     | del_t_atom
+static expr_ty
+del_target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, del_target_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // t_primary '.' NAME !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Attribute ( a , b -> v . Name . id , Del , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+    }
+    { // t_primary '[' slices ']' !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = slices_rule(p))  // slices
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Subscript ( a , b , Del , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+    }
+    { // del_t_atom
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_t_atom"));
+        expr_ty del_t_atom_var;
+        if (
+            (del_t_atom_var = del_t_atom_rule(p))  // del_t_atom
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_t_atom"));
+            _res = del_t_atom_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_t_atom"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, del_target_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// del_t_atom: NAME | '(' del_target ')' | '(' del_targets? ')' | '[' del_targets? ']'
+static expr_ty
+del_t_atom_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty a;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            _res = _PyPegen_set_expr_context ( p , a , Del );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    { // '(' del_target ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' del_target ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = del_target_rule(p))  // del_target
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' del_target ')'"));
+            _res = _PyPegen_set_expr_context ( p , a , Del );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' del_target ')'"));
+    }
+    { // '(' del_targets? ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' del_targets? ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = del_targets_rule(p), 1)  // del_targets?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' del_targets? ')'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( a , Del , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' del_targets? ')'"));
+    }
+    { // '[' del_targets? ']'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> del_t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' del_targets? ']'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (a = del_targets_rule(p), 1)  // del_targets?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+        )
+        {
+            D(fprintf(stderr, "%*c+ del_t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' del_targets? ']'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_List ( a , Del , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s del_t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' del_targets? ']'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// targets: ','.target+ ','?
+static asdl_seq*
+targets_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq* _res = NULL;
+    int _mark = p->mark;
+    { // ','.target+ ','?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.target+ ','?"));
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        asdl_seq * a;
+        if (
+            (a = _gather_123_rule(p))  // ','.target+
+            &&
+            (_opt_var = _PyPegen_expect_token(p, 12), 1)  // ','?
+        )
+        {
+            D(fprintf(stderr, "%*c+ targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.target+ ','?"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.target+ ','?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// target:
+//     | t_primary '.' NAME !t_lookahead
+//     | t_primary '[' slices ']' !t_lookahead
+//     | t_atom
+static expr_ty
+target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, target_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // t_primary '.' NAME !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Attribute ( a , b -> v . Name . id , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead"));
+    }
+    { // t_primary '[' slices ']' !t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = slices_rule(p))  // slices
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+            &&
+            _PyPegen_lookahead(0, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Subscript ( a , b , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead"));
+    }
+    { // t_atom
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_atom"));
+        expr_ty t_atom_var;
+        if (
+            (t_atom_var = t_atom_rule(p))  // t_atom
+        )
+        {
+            D(fprintf(stderr, "%*c+ target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_atom"));
+            _res = t_atom_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_atom"));
+    }
+    _res = NULL;
+  done:
+    _PyPegen_insert_memo(p, _mark, target_type, _res);
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// t_primary:
+//     | t_primary '.' NAME &t_lookahead
+//     | t_primary '[' slices ']' &t_lookahead
+//     | t_primary genexp &t_lookahead
+//     | t_primary '(' arguments? ')' &t_lookahead
+//     | atom &t_lookahead
+static expr_ty t_primary_raw(Parser *);
+static expr_ty
+t_primary_rule(Parser *p)
+{
+    D(p->level++);
+    expr_ty _res = NULL;
+    if (_PyPegen_is_memoized(p, t_primary_type, &_res)) {
+        D(p->level--);
+        return _res;
+    }
+    int _mark = p->mark;
+    int _resmark = p->mark;
+    while (1) {
+        int tmpvar_8 = _PyPegen_update_memo(p, _mark, t_primary_type, _res);
+        if (tmpvar_8) {
+            D(p->level--);
+            return _res;
+        }
+        p->mark = _mark;
+        void *_raw = t_primary_raw(p);
+        if (p->error_indicator)
+            return NULL;
+        if (_raw == NULL || p->mark <= _resmark)
+            break;
+        _resmark = p->mark;
+        _res = _raw;
+    }
+    p->mark = _resmark;
+    D(p->level--);
+    return _res;
+}
+static expr_ty
+t_primary_raw(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // t_primary '.' NAME &t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+            &&
+            (b = _PyPegen_name_token(p))  // NAME
+            &&
+            _PyPegen_lookahead(1, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Attribute ( a , b -> v . Name . id , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME &t_lookahead"));
+    }
+    { // t_primary '[' slices ']' &t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = slices_rule(p))  // slices
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+            &&
+            _PyPegen_lookahead(1, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Subscript ( a , b , Load , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' &t_lookahead"));
+    }
+    { // t_primary genexp &t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead"));
+        expr_ty a;
+        expr_ty b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (b = genexp_rule(p))  // genexp
+            &&
+            _PyPegen_lookahead(1, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Call ( a , CHECK ( _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary genexp &t_lookahead"));
+    }
+    { // t_primary '(' arguments? ')' &t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        void *b;
+        if (
+            (a = t_primary_rule(p))  // t_primary
+            &&
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (b = arguments_rule(p), 1)  // arguments?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+            &&
+            _PyPegen_lookahead(1, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead"));
+    }
+    { // atom &t_lookahead
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead"));
+        expr_ty a;
+        if (
+            (a = atom_rule(p))  // atom
+            &&
+            _PyPegen_lookahead(1, t_lookahead_rule, p)
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom &t_lookahead"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// t_lookahead: '(' | '[' | '.'
+static void *
+t_lookahead_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '('
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
+    }
+    { // '['
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
+    }
+    { // '.'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// t_atom: NAME | '(' target ')' | '(' targets? ')' | '[' targets? ']'
+static expr_ty
+t_atom_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
+        p->error_indicator = 1;
+        D(p->level--);
+        return NULL;
+    }
+    int _start_lineno = p->tokens[_mark]->lineno;
+    UNUSED(_start_lineno); // Only used by EXTRA macro
+    int _start_col_offset = p->tokens[_mark]->col_offset;
+    UNUSED(_start_col_offset); // Only used by EXTRA macro
+    { // NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
+        expr_ty a;
+        if (
+            (a = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
+            _res = _PyPegen_set_expr_context ( p , a , Store );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
+    }
+    { // '(' target ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' target ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = target_rule(p))  // target
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' target ')'"));
+            _res = _PyPegen_set_expr_context ( p , a , Store );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' target ')'"));
+    }
+    { // '(' targets? ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' targets? ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (b = targets_rule(p), 1)  // targets?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' targets? ')'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_Tuple ( b , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' targets? ')'"));
+    }
+    { // '[' targets? ']'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> t_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' targets? ']'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+            &&
+            (b = targets_rule(p), 1)  // targets?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
+        )
+        {
+            D(fprintf(stderr, "%*c+ t_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' targets? ']'"));
+            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
+            if (_token == NULL) {
+                D(p->level--);
+                return NULL;
+            }
+            int _end_lineno = _token->end_lineno;
+            UNUSED(_end_lineno); // Only used by EXTRA macro
+            int _end_col_offset = _token->end_col_offset;
+            UNUSED(_end_col_offset); // Only used by EXTRA macro
+            _res = _Py_List ( b , Store , EXTRA );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s t_atom[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' targets? ']'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_arguments:
+//     | args ',' '*'
+//     | expression for_if_clauses ',' [args | expression for_if_clauses]
+//     | args for_if_clauses
+//     | args ',' expression for_if_clauses
+//     | args ',' args
+static void *
+invalid_arguments_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // args ',' '*'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' '*'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty args_var;
+        if (
+            (args_var = args_rule(p))  // args
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 16))  // token='*'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' '*'"));
+            _res = RAISE_SYNTAX_ERROR ( "iterable argument unpacking follows keyword argument unpacking" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' '*'"));
+    }
+    { // expression for_if_clauses ',' [args | expression for_if_clauses]
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
+        Token * _literal;
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        expr_ty a;
+        asdl_seq* for_if_clauses_var;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_opt_var = _tmp_125_rule(p), 1)  // [args | expression for_if_clauses]
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "Generator expression must be parenthesized" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
+    }
+    { // args for_if_clauses
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
+        expr_ty a;
+        asdl_seq* for_if_clauses_var;
+        if (
+            (a = args_rule(p))  // args
+            &&
+            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
+            _res = _PyPegen_nonparen_genexp_in_call ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args for_if_clauses"));
+    }
+    { // args ',' expression for_if_clauses
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty args_var;
+        asdl_seq* for_if_clauses_var;
+        if (
+            (args_var = args_rule(p))  // args
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (a = expression_rule(p))  // expression
+            &&
+            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "Generator expression must be parenthesized" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' expression for_if_clauses"));
+    }
+    { // args ',' args
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' args"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty args_var;
+        if (
+            (a = args_rule(p))  // args
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (args_var = args_rule(p))  // args
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' args"));
+            _res = _PyPegen_arguments_parsing_error ( p , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' args"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_kwarg: expression '='
+static void *
+invalid_kwarg_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // expression '='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression '='"));
+        Token * _literal;
+        expr_ty a;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression '='"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression cannot contain assignment, perhaps you meant \"==\"?" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression '='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_named_expression: expression ':=' expression
+static void *
+invalid_named_expression_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // expression ':=' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty expression_var;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
+            &&
+            (expression_var = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use assignment expressions with %s" , _PyPegen_get_expr_name ( a ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':=' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_assignment:
+//     | invalid_ann_assign_target ':' expression
+//     | star_named_expression ',' star_named_expressions* ':' expression
+//     | expression ':' expression
+//     | ((star_targets '='))* star_expressions '='
+//     | ((star_targets '='))* yield_expr '='
+//     | star_expressions augassign (yield_expr | star_expressions)
+static void *
+invalid_assignment_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // invalid_ann_assign_target ':' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty expression_var;
+        if (
+            (a = invalid_ann_assign_target_rule(p))  // invalid_ann_assign_target
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (expression_var = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not %s) can be annotated" , _PyPegen_get_expr_name ( a ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_ann_assign_target ':' expression"));
+    }
+    { // star_named_expression ',' star_named_expressions* ':' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
+        Token * _literal;
+        Token * _literal_1;
+        asdl_seq * _loop0_126_var;
+        expr_ty a;
+        expr_ty expression_var;
+        if (
+            (a = star_named_expression_rule(p))  // star_named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_loop0_126_var = _loop0_126_rule(p))  // star_named_expressions*
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (expression_var = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not tuple) can be annotated" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
+    }
+    { // expression ':' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
+        Token * _literal;
+        expr_ty a;
+        expr_ty expression_var;
+        if (
+            (a = expression_rule(p))  // expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (expression_var = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "illegal target for annotation" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression"));
+    }
+    { // ((star_targets '='))* star_expressions '='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
+        Token * _literal;
+        asdl_seq * _loop0_127_var;
+        expr_ty a;
+        if (
+            (_loop0_127_var = _loop0_127_rule(p))  // ((star_targets '='))*
+            &&
+            (a = star_expressions_rule(p))  // star_expressions
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
+            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))* star_expressions '='"));
+    }
+    { // ((star_targets '='))* yield_expr '='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
+        Token * _literal;
+        asdl_seq * _loop0_128_var;
+        expr_ty a;
+        if (
+            (_loop0_128_var = _loop0_128_rule(p))  // ((star_targets '='))*
+            &&
+            (a = yield_expr_rule(p))  // yield_expr
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "assignment to yield expression not possible" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))* yield_expr '='"));
+    }
+    { // star_expressions augassign (yield_expr | star_expressions)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)"));
+        void *_tmp_129_var;
+        expr_ty a;
+        AugOperator* augassign_var;
+        if (
+            (a = star_expressions_rule(p))  // star_expressions
+            &&
+            (augassign_var = augassign_rule(p))  // augassign
+            &&
+            (_tmp_129_var = _tmp_129_rule(p))  // yield_expr | star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "'%s' is an illegal expression for augmented assignment" , _PyPegen_get_expr_name ( a ) );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_ann_assign_target: list | tuple | '(' invalid_ann_assign_target ')'
+static expr_ty
+invalid_ann_assign_target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    expr_ty _res = NULL;
+    int _mark = p->mark;
+    { // list
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
+        expr_ty list_var;
+        if (
+            (list_var = list_rule(p))  // list
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
+            _res = list_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
+    }
+    { // tuple
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
+        expr_ty tuple_var;
+        if (
+            (tuple_var = tuple_rule(p))  // tuple
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
+            _res = tuple_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
+    }
+    { // '(' invalid_ann_assign_target ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = invalid_ann_assign_target_rule(p))  // invalid_ann_assign_target
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
+            _res = a;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_del_stmt: 'del' star_expressions
+static void *
+invalid_del_stmt_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'del' star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
+        Token * _keyword;
+        expr_ty a;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 503))  // token='del'
+            &&
+            (a = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
+            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( DEL_TARGETS , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'del' star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_block: NEWLINE !INDENT
+static void *
+invalid_block_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // NEWLINE !INDENT
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
+        Token * newline_var;
+        if (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
+            _res = RAISE_INDENTATION_ERROR ( "expected an indented block" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_block[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE !INDENT"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// Left-recursive
+// invalid_primary: primary '{'
+static void *
+invalid_primary_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // primary '{'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '{'"));
+        Token * a;
+        expr_ty primary_var;
+        if (
+            (primary_var = primary_rule(p))  // primary
+            &&
+            (a = _PyPegen_expect_token(p, 25))  // token='{'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '{'"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "invalid syntax" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_primary[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '{'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_comprehension: ('[' | '(' | '{') starred_expression for_if_clauses
+static void *
+invalid_comprehension_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ('[' | '(' | '{') starred_expression for_if_clauses
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
+        void *_tmp_130_var;
+        expr_ty a;
+        asdl_seq* for_if_clauses_var;
+        if (
+            (_tmp_130_var = _tmp_130_rule(p))  // '[' | '(' | '{'
+            &&
+            (a = starred_expression_rule(p))  // starred_expression
+            &&
+            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "iterable unpacking cannot be used in comprehension" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_dict_comprehension: '{' '**' bitwise_or for_if_clauses '}'
+static void *
+invalid_dict_comprehension_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '{' '**' bitwise_or for_if_clauses '}'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_dict_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
+        Token * _literal;
+        Token * _literal_1;
+        Token * a;
+        expr_ty bitwise_or_var;
+        asdl_seq* for_if_clauses_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
+            &&
+            (a = _PyPegen_expect_token(p, 35))  // token='**'
+            &&
+            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
+            &&
+            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_dict_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "dict unpacking cannot be used in dict comprehension" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_dict_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '**' bitwise_or for_if_clauses '}'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_parameters:
+//     | param_no_default* (slash_with_default | param_with_default+) param_no_default
+static void *
+invalid_parameters_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // param_no_default* (slash_with_default | param_with_default+) param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* (slash_with_default | param_with_default+) param_no_default"));
+        asdl_seq * _loop0_131_var;
+        void *_tmp_132_var;
+        arg_ty param_no_default_var;
+        if (
+            (_loop0_131_var = _loop0_131_rule(p))  // param_no_default*
+            &&
+            (_tmp_132_var = _tmp_132_rule(p))  // slash_with_default | param_with_default+
+            &&
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* (slash_with_default | param_with_default+) param_no_default"));
+            _res = RAISE_SYNTAX_ERROR ( "non-default argument follows default argument" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* (slash_with_default | param_with_default+) param_no_default"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_lambda_parameters:
+//     | lambda_param_no_default* (lambda_slash_with_default | lambda_param_with_default+) lambda_param_no_default
+static void *
+invalid_lambda_parameters_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // lambda_param_no_default* (lambda_slash_with_default | lambda_param_with_default+) lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* (lambda_slash_with_default | lambda_param_with_default+) lambda_param_no_default"));
+        asdl_seq * _loop0_133_var;
+        void *_tmp_134_var;
+        arg_ty lambda_param_no_default_var;
+        if (
+            (_loop0_133_var = _loop0_133_rule(p))  // lambda_param_no_default*
+            &&
+            (_tmp_134_var = _tmp_134_rule(p))  // lambda_slash_with_default | lambda_param_with_default+
+            &&
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* (lambda_slash_with_default | lambda_param_with_default+) lambda_param_no_default"));
+            _res = RAISE_SYNTAX_ERROR ( "non-default argument follows default argument" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* (lambda_slash_with_default | lambda_param_with_default+) lambda_param_no_default"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_star_etc: '*' (')' | ',' (')' | '**')) | '*' ',' TYPE_COMMENT
+static void *
+invalid_star_etc_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '*' (')' | ',' (')' | '**'))
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
+        Token * _literal;
+        void *_tmp_135_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (_tmp_135_var = _tmp_135_rule(p))  // ')' | ',' (')' | '**')
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
+            _res = RAISE_SYNTAX_ERROR ( "named arguments must follow bare *" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
+    }
+    { // '*' ',' TYPE_COMMENT
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
+        Token * _literal;
+        Token * _literal_1;
+        Token * type_comment_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
+            _res = RAISE_SYNTAX_ERROR ( "bare * has associated type comment" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' TYPE_COMMENT"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_lambda_star_etc: '*' (':' | ',' (':' | '**'))
+static void *
+invalid_lambda_star_etc_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '*' (':' | ',' (':' | '**'))
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
+        Token * _literal;
+        void *_tmp_136_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
+            &&
+            (_tmp_136_var = _tmp_136_rule(p))  // ':' | ',' (':' | '**')
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
+            _res = RAISE_SYNTAX_ERROR ( "named arguments must follow bare *" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_double_type_comments: TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT
+static void *
+invalid_double_type_comments_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_double_type_comments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
+        Token * indent_var;
+        Token * newline_var;
+        Token * newline_var_1;
+        Token * type_comment_var;
+        Token * type_comment_var_1;
+        if (
+            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
+            &&
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+            &&
+            (type_comment_var_1 = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
+            &&
+            (newline_var_1 = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+            &&
+            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_double_type_comments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
+            _res = RAISE_SYNTAX_ERROR ( "Cannot have two type comments on def" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_double_type_comments[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_with_item: expression 'as' expression
+static void *
+invalid_with_item_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // expression 'as' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' expression"));
+        Token * _keyword;
+        expr_ty a;
+        expr_ty expression_var;
+        if (
+            (expression_var = expression_rule(p))  // expression
+            &&
+            (_keyword = _PyPegen_expect_token(p, 520))  // token='as'
+            &&
+            (a = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression"));
+            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_with_item[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_for_target: ASYNC? 'for' star_expressions
+static void *
+invalid_for_target_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ASYNC? 'for' star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_for_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'for' star_expressions"));
+        Token * _keyword;
+        void *_opt_var;
+        UNUSED(_opt_var); // Silence compiler warnings
+        expr_ty a;
+        if (
+            (_opt_var = _PyPegen_expect_token(p, ASYNC), 1)  // ASYNC?
+            &&
+            (_keyword = _PyPegen_expect_token(p, 517))  // token='for'
+            &&
+            (a = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_for_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC? 'for' star_expressions"));
+            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( FOR_TARGETS , a );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_for_target[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC? 'for' star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_group: '(' starred_expression ')'
+static void *
+invalid_group_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '(' starred_expression ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty a;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (a = starred_expression_rule(p))  // starred_expression
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
+            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "can't use starred expression here" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_group[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' starred_expression ')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// invalid_import_from_targets: import_from_as_names ','
+static void *
+invalid_import_from_targets_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // import_from_as_names ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> invalid_import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names ','"));
+        Token * _literal;
+        asdl_seq* import_from_as_names_var;
+        if (
+            (import_from_as_names_var = import_from_as_names_rule(p))  // import_from_as_names
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ invalid_import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_names ','"));
+            _res = RAISE_SYNTAX_ERROR ( "trailing comma not allowed without surrounding parentheses" );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s invalid_import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_names ','"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_1: NEWLINE
+static asdl_seq *
+_loop0_1_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_1[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
+        Token * newline_var;
+        while (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            _res = newline_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_1[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_1_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_2: NEWLINE
+static asdl_seq *
+_loop0_2_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_2[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
+        Token * newline_var;
+        while (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            _res = newline_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_2[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_2_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_4: ',' expression
+static asdl_seq *
+_loop0_4_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = expression_rule(p))  // expression
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_4[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_4_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_3: expression _loop0_4
+static asdl_seq *
+_gather_3_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // expression _loop0_4
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_4"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = expression_rule(p))  // expression
+            &&
+            (seq = _loop0_4_rule(p))  // _loop0_4
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_3[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_4"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_3[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_4"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_6: ',' expression
+static asdl_seq *
+_loop0_6_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = expression_rule(p))  // expression
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_6[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_6_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_5: expression _loop0_6
+static asdl_seq *
+_gather_5_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // expression _loop0_6
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_6"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = expression_rule(p))  // expression
+            &&
+            (seq = _loop0_6_rule(p))  // _loop0_6
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_6"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_5[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_6"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_8: ',' expression
+static asdl_seq *
+_loop0_8_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = expression_rule(p))  // expression
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_8[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_8_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_7: expression _loop0_8
+static asdl_seq *
+_gather_7_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // expression _loop0_8
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_8"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = expression_rule(p))  // expression
+            &&
+            (seq = _loop0_8_rule(p))  // _loop0_8
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_8"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_7[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_8"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_10: ',' expression
+static asdl_seq *
+_loop0_10_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = expression_rule(p))  // expression
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_10[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_10_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_9: expression _loop0_10
+static asdl_seq *
+_gather_9_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // expression _loop0_10
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_10"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = expression_rule(p))  // expression
+            &&
+            (seq = _loop0_10_rule(p))  // _loop0_10
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_10"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_9[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_10"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_11: statement
+static asdl_seq *
+_loop1_11_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // statement
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement"));
+        asdl_seq* statement_var;
+        while (
+            (statement_var = statement_rule(p))  // statement
+        )
+        {
+            _res = statement_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_11[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_11_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_13: ';' small_stmt
+static asdl_seq *
+_loop0_13_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ';' small_stmt
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' small_stmt"));
+        Token * _literal;
+        stmt_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
+            &&
+            (elem = small_stmt_rule(p))  // small_stmt
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' small_stmt"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_13_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_12: small_stmt _loop0_13
+static asdl_seq *
+_gather_12_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // small_stmt _loop0_13
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "small_stmt _loop0_13"));
+        stmt_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = small_stmt_rule(p))  // small_stmt
+            &&
+            (seq = _loop0_13_rule(p))  // _loop0_13
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "small_stmt _loop0_13"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_12[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "small_stmt _loop0_13"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_14: 'import' | 'from'
+static void *
+_tmp_14_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'import'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 513))  // token='import'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'"));
+            _res = _keyword;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_14[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import'"));
+    }
+    { // 'from'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 514))  // token='from'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'"));
+            _res = _keyword;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_14[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_15: 'def' | '@' | ASYNC
+static void *
+_tmp_15_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'def'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 523))  // token='def'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'"));
+            _res = _keyword;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'"));
+    }
+    { // '@'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
+    }
+    { // ASYNC
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC"));
+        Token * async_var;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC"));
+            _res = async_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_16: 'class' | '@'
+static void *
+_tmp_16_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'class'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 524))  // token='class'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'"));
+            _res = _keyword;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'"));
+    }
+    { // '@'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_17: 'with' | ASYNC
+static void *
+_tmp_17_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'with'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 519))  // token='with'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'"));
+            _res = _keyword;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'"));
+    }
+    { // ASYNC
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC"));
+        Token * async_var;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC"));
+            _res = async_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_18: 'for' | ASYNC
+static void *
+_tmp_18_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'for'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'"));
+        Token * _keyword;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 517))  // token='for'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'"));
+            _res = _keyword;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_18[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'"));
+    }
+    { // ASYNC
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC"));
+        Token * async_var;
+        if (
+            (async_var = _PyPegen_expect_token(p, ASYNC))  // token='ASYNC'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC"));
+            _res = async_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_18[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_19: '=' annotated_rhs
+static void *
+_tmp_19_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '=' annotated_rhs
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
+        Token * _literal;
+        expr_ty d;
+        if (
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+            &&
+            (d = annotated_rhs_rule(p))  // annotated_rhs
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_19[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
+            _res = d;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_19[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_20: '(' single_target ')' | single_subscript_attribute_target
+static void *
+_tmp_20_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '(' single_target ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        expr_ty b;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (b = single_target_rule(p))  // single_target
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
+            _res = b;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_20[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'"));
+    }
+    { // single_subscript_attribute_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
+        expr_ty single_subscript_attribute_target_var;
+        if (
+            (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p))  // single_subscript_attribute_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target"));
+            _res = single_subscript_attribute_target_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_20[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_21: '=' annotated_rhs
+static void *
+_tmp_21_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '=' annotated_rhs
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
+        Token * _literal;
+        expr_ty d;
+        if (
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+            &&
+            (d = annotated_rhs_rule(p))  // annotated_rhs
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
+            _res = d;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_21[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_22: (star_targets '=')
+static asdl_seq *
+_loop1_22_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // (star_targets '=')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
+        void *_tmp_137_var;
+        while (
+            (_tmp_137_var = _tmp_137_rule(p))  // star_targets '='
+        )
+        {
+            _res = _tmp_137_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_22[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_22_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_23: yield_expr | star_expressions
+static void *
+_tmp_23_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // yield_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+        expr_ty yield_expr_var;
+        if (
+            (yield_expr_var = yield_expr_rule(p))  // yield_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+            _res = yield_expr_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
+    }
+    { // star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+        expr_ty star_expressions_var;
+        if (
+            (star_expressions_var = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+            _res = star_expressions_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_24: yield_expr | star_expressions
+static void *
+_tmp_24_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // yield_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+        expr_ty yield_expr_var;
+        if (
+            (yield_expr_var = yield_expr_rule(p))  // yield_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_24[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+            _res = yield_expr_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_24[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
+    }
+    { // star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+        expr_ty star_expressions_var;
+        if (
+            (star_expressions_var = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_24[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+            _res = star_expressions_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_24[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_26: ',' NAME
+static asdl_seq *
+_loop0_26_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_26[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_26_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_25: NAME _loop0_26
+static asdl_seq *
+_gather_25_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // NAME _loop0_26
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_26"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = _PyPegen_name_token(p))  // NAME
+            &&
+            (seq = _loop0_26_rule(p))  // _loop0_26
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_25[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_26"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_25[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_26"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_28: ',' NAME
+static asdl_seq *
+_loop0_28_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_28_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_27: NAME _loop0_28
+static asdl_seq *
+_gather_27_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // NAME _loop0_28
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_28"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = _PyPegen_name_token(p))  // NAME
+            &&
+            (seq = _loop0_28_rule(p))  // _loop0_28
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_27[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_28"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_27[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_28"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_29: ',' expression
+static void *
+_tmp_29_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ',' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
+        Token * _literal;
+        expr_ty z;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (z = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_29[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_29[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_30: ';' | NEWLINE
+static void *
+_tmp_30_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ';'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_30[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_30[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'"));
+    }
+    { // NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
+        Token * newline_var;
+        if (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_30[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
+            _res = newline_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_30[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_31: ('.' | '...')
+static asdl_seq *
+_loop0_31_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('.' | '...')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
+        void *_tmp_138_var;
+        while (
+            (_tmp_138_var = _tmp_138_rule(p))  // '.' | '...'
+        )
+        {
+            _res = _tmp_138_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_31[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_31_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_32: ('.' | '...')
+static asdl_seq *
+_loop1_32_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('.' | '...')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
+        void *_tmp_139_var;
+        while (
+            (_tmp_139_var = _tmp_139_rule(p))  // '.' | '...'
+        )
+        {
+            _res = _tmp_139_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_32_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_34: ',' import_from_as_name
+static asdl_seq *
+_loop0_34_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' import_from_as_name
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name"));
+        Token * _literal;
+        alias_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = import_from_as_name_rule(p))  // import_from_as_name
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_34[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_34_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_33: import_from_as_name _loop0_34
+static asdl_seq *
+_gather_33_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // import_from_as_name _loop0_34
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_34"));
+        alias_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = import_from_as_name_rule(p))  // import_from_as_name
+            &&
+            (seq = _loop0_34_rule(p))  // _loop0_34
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_33[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_34"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_33[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_34"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_35: 'as' NAME
+static void *
+_tmp_35_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'as' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
+        Token * _keyword;
+        expr_ty z;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 520))  // token='as'
+            &&
+            (z = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_37: ',' dotted_as_name
+static asdl_seq *
+_loop0_37_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' dotted_as_name
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name"));
+        Token * _literal;
+        alias_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = dotted_as_name_rule(p))  // dotted_as_name
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_37[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_37_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_36: dotted_as_name _loop0_37
+static asdl_seq *
+_gather_36_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // dotted_as_name _loop0_37
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_37"));
+        alias_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = dotted_as_name_rule(p))  // dotted_as_name
+            &&
+            (seq = _loop0_37_rule(p))  // _loop0_37
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_36[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_37"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_36[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_37"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_38: 'as' NAME
+static void *
+_tmp_38_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'as' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
+        Token * _keyword;
+        expr_ty z;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 520))  // token='as'
+            &&
+            (z = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_38[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_38[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_40: ',' with_item
+static asdl_seq *
+_loop0_40_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' with_item
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
+        Token * _literal;
+        withitem_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = with_item_rule(p))  // with_item
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_40[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_40_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_39: with_item _loop0_40
+static asdl_seq *
+_gather_39_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // with_item _loop0_40
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_40"));
+        withitem_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = with_item_rule(p))  // with_item
+            &&
+            (seq = _loop0_40_rule(p))  // _loop0_40
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_39[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_40"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_39[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_40"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_42: ',' with_item
+static asdl_seq *
+_loop0_42_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' with_item
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
+        Token * _literal;
+        withitem_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = with_item_rule(p))  // with_item
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_42[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_42_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_41: with_item _loop0_42
+static asdl_seq *
+_gather_41_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // with_item _loop0_42
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_42"));
+        withitem_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = with_item_rule(p))  // with_item
+            &&
+            (seq = _loop0_42_rule(p))  // _loop0_42
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_42"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_41[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_42"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_44: ',' with_item
+static asdl_seq *
+_loop0_44_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' with_item
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
+        Token * _literal;
+        withitem_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = with_item_rule(p))  // with_item
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_44[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_44_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_43: with_item _loop0_44
+static asdl_seq *
+_gather_43_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // with_item _loop0_44
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_44"));
+        withitem_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = with_item_rule(p))  // with_item
+            &&
+            (seq = _loop0_44_rule(p))  // _loop0_44
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_44"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_43[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_44"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_46: ',' with_item
+static asdl_seq *
+_loop0_46_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' with_item
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
+        Token * _literal;
+        withitem_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = with_item_rule(p))  // with_item
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_46_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_45: with_item _loop0_46
+static asdl_seq *
+_gather_45_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // with_item _loop0_46
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_46"));
+        withitem_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = with_item_rule(p))  // with_item
+            &&
+            (seq = _loop0_46_rule(p))  // _loop0_46
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_45[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_46"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_45[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_46"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_47: ',' | ')' | ':'
+static void *
+_tmp_47_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ','
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_47[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
+    }
+    { // ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_47[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
+    }
+    { // ':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_47[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_48: except_block
+static asdl_seq *
+_loop1_48_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // except_block
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block"));
+        excepthandler_ty except_block_var;
+        while (
+            (except_block_var = except_block_rule(p))  // except_block
+        )
+        {
+            _res = except_block_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_48[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_48_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_49: 'as' NAME
+static void *
+_tmp_49_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'as' NAME
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
+        Token * _keyword;
+        expr_ty z;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 520))  // token='as'
+            &&
+            (z = _PyPegen_name_token(p))  // NAME
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_49[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_49[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_50: 'from' expression
+static void *
+_tmp_50_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'from' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' expression"));
+        Token * _keyword;
+        expr_ty z;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 514))  // token='from'
+            &&
+            (z = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_50[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' expression"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_50[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_51: '->' expression
+static void *
+_tmp_51_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '->' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
+        Token * _literal;
+        expr_ty z;
+        if (
+            (_literal = _PyPegen_expect_token(p, 51))  // token='->'
+            &&
+            (z = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_51[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_51[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_52: '->' expression
+static void *
+_tmp_52_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '->' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
+        Token * _literal;
+        expr_ty z;
+        if (
+            (_literal = _PyPegen_expect_token(p, 51))  // token='->'
+            &&
+            (z = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_52[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_52[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_53: NEWLINE INDENT
+static void *
+_tmp_53_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // NEWLINE INDENT
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
+        Token * indent_var;
+        Token * newline_var;
+        if (
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+            &&
+            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_53[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
+            _res = _PyPegen_dummy_name(p, newline_var, indent_var);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_53[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_54: param_no_default
+static asdl_seq *
+_loop0_54_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_54[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_54_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_55: param_with_default
+static asdl_seq *
+_loop0_55_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_55[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_55_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_56: param_with_default
+static asdl_seq *
+_loop0_56_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_56[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_56_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_57: param_no_default
+static asdl_seq *
+_loop1_57_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_57[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_57_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_58: param_with_default
+static asdl_seq *
+_loop0_58_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_58[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_58_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_59: param_with_default
+static asdl_seq *
+_loop1_59_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_59[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_59_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_60: param_no_default
+static asdl_seq *
+_loop1_60_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_60[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_60_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_61: param_no_default
+static asdl_seq *
+_loop1_61_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_61_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_62: param_no_default
+static asdl_seq *
+_loop0_62_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_62[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_62_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_63: param_with_default
+static asdl_seq *
+_loop1_63_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_63[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_63_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_64: param_no_default
+static asdl_seq *
+_loop0_64_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_64[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_64_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_65: param_with_default
+static asdl_seq *
+_loop1_65_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_65[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_65_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_66: param_maybe_default
+static asdl_seq *
+_loop0_66_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_maybe_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
+        NameDefaultPair* param_maybe_default_var;
+        while (
+            (param_maybe_default_var = param_maybe_default_rule(p))  // param_maybe_default
+        )
+        {
+            _res = param_maybe_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_66[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_66_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_67: param_maybe_default
+static asdl_seq *
+_loop1_67_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_maybe_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
+        NameDefaultPair* param_maybe_default_var;
+        while (
+            (param_maybe_default_var = param_maybe_default_rule(p))  // param_maybe_default
+        )
+        {
+            _res = param_maybe_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_67[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_67_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_68: ('@' named_expression NEWLINE)
+static asdl_seq *
+_loop1_68_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('@' named_expression NEWLINE)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)"));
+        void *_tmp_140_var;
+        while (
+            (_tmp_140_var = _tmp_140_rule(p))  // '@' named_expression NEWLINE
+        )
+        {
+            _res = _tmp_140_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_68[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_68_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_69: '(' arguments? ')'
+static void *
+_tmp_69_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '(' arguments? ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
+        Token * _literal;
+        Token * _literal_1;
+        void *z;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+            &&
+            (z = arguments_rule(p), 1)  // arguments?
+            &&
+            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_70: (',' star_expression)
+static asdl_seq *
+_loop1_70_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // (',' star_expression)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)"));
+        void *_tmp_141_var;
+        while (
+            (_tmp_141_var = _tmp_141_rule(p))  // ',' star_expression
+        )
+        {
+            _res = _tmp_141_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_70[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_70_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_72: ',' star_named_expression
+static asdl_seq *
+_loop0_72_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' star_named_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = star_named_expression_rule(p))  // star_named_expression
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_72[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_72_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_71: star_named_expression _loop0_72
+static asdl_seq *
+_gather_71_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // star_named_expression _loop0_72
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_72"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = star_named_expression_rule(p))  // star_named_expression
+            &&
+            (seq = _loop0_72_rule(p))  // _loop0_72
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_72"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_71[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_72"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_73: (',' expression)
+static asdl_seq *
+_loop1_73_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // (',' expression)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)"));
+        void *_tmp_142_var;
+        while (
+            (_tmp_142_var = _tmp_142_rule(p))  // ',' expression
+        )
+        {
+            _res = _tmp_142_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_73[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_73_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_74: lambda_param_no_default
+static asdl_seq *
+_loop0_74_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_74_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_75: lambda_param_with_default
+static asdl_seq *
+_loop0_75_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_75[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_75_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_76: lambda_param_with_default
+static asdl_seq *
+_loop0_76_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_76[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_76_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_77: lambda_param_no_default
+static asdl_seq *
+_loop1_77_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_77[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_77_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_78: lambda_param_with_default
+static asdl_seq *
+_loop0_78_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_78[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_78_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_79: lambda_param_with_default
+static asdl_seq *
+_loop1_79_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_79[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_79_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_80: lambda_param_no_default
+static asdl_seq *
+_loop1_80_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_80[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_80_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_81: lambda_param_no_default
+static asdl_seq *
+_loop1_81_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_81[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_81_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_82: lambda_param_no_default
+static asdl_seq *
+_loop0_82_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_82[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_82_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_83: lambda_param_with_default
+static asdl_seq *
+_loop1_83_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_83_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_84: lambda_param_no_default
+static asdl_seq *
+_loop0_84_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_84[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_84_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_85: lambda_param_with_default
+static asdl_seq *
+_loop1_85_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_85[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_85_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_86: lambda_param_maybe_default
+static asdl_seq *
+_loop0_86_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_maybe_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
+        NameDefaultPair* lambda_param_maybe_default_var;
+        while (
+            (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p))  // lambda_param_maybe_default
+        )
+        {
+            _res = lambda_param_maybe_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_86[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_86_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_87: lambda_param_maybe_default
+static asdl_seq *
+_loop1_87_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_maybe_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
+        NameDefaultPair* lambda_param_maybe_default_var;
+        while (
+            (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p))  // lambda_param_maybe_default
+        )
+        {
+            _res = lambda_param_maybe_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_87[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_87_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_88: ('or' conjunction)
+static asdl_seq *
+_loop1_88_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('or' conjunction)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)"));
+        void *_tmp_143_var;
+        while (
+            (_tmp_143_var = _tmp_143_rule(p))  // 'or' conjunction
+        )
+        {
+            _res = _tmp_143_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_88[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_88_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_89: ('and' inversion)
+static asdl_seq *
+_loop1_89_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('and' inversion)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)"));
+        void *_tmp_144_var;
+        while (
+            (_tmp_144_var = _tmp_144_rule(p))  // 'and' inversion
+        )
+        {
+            _res = _tmp_144_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_89[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_89_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_90: compare_op_bitwise_or_pair
+static asdl_seq *
+_loop1_90_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // compare_op_bitwise_or_pair
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair"));
+        CmpopExprPair* compare_op_bitwise_or_pair_var;
+        while (
+            (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p))  // compare_op_bitwise_or_pair
+        )
+        {
+            _res = compare_op_bitwise_or_pair_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_90[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_90_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_91: '!='
+static void *
+_tmp_91_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '!='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='"));
+        Token * tok;
+        if (
+            (tok = _PyPegen_expect_token(p, 28))  // token='!='
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='"));
+            _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_91[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_93: ',' slice
+static asdl_seq *
+_loop0_93_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' slice
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' slice"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = slice_rule(p))  // slice
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_93[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' slice"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_93_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_92: slice _loop0_93
+static asdl_seq *
+_gather_92_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // slice _loop0_93
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice _loop0_93"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = slice_rule(p))  // slice
+            &&
+            (seq = _loop0_93_rule(p))  // _loop0_93
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_92[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice _loop0_93"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_92[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice _loop0_93"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_94: ':' expression?
+static void *
+_tmp_94_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ':' expression?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?"));
+        Token * _literal;
+        void *d;
+        if (
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+            &&
+            (d = expression_rule(p), 1)  // expression?
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?"));
+            _res = d;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_94[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_95: tuple | group | genexp
+static void *
+_tmp_95_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // tuple
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
+        expr_ty tuple_var;
+        if (
+            (tuple_var = tuple_rule(p))  // tuple
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
+            _res = tuple_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
+    }
+    { // group
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group"));
+        expr_ty group_var;
+        if (
+            (group_var = group_rule(p))  // group
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group"));
+            _res = group_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group"));
+    }
+    { // genexp
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
+        expr_ty genexp_var;
+        if (
+            (genexp_var = genexp_rule(p))  // genexp
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp"));
+            _res = genexp_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_96: list | listcomp
+static void *
+_tmp_96_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // list
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
+        expr_ty list_var;
+        if (
+            (list_var = list_rule(p))  // list
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
+            _res = list_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
+    }
+    { // listcomp
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp"));
+        expr_ty listcomp_var;
+        if (
+            (listcomp_var = listcomp_rule(p))  // listcomp
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp"));
+            _res = listcomp_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_97: dict | set | dictcomp | setcomp
+static void *
+_tmp_97_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // dict
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict"));
+        expr_ty dict_var;
+        if (
+            (dict_var = dict_rule(p))  // dict
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict"));
+            _res = dict_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict"));
+    }
+    { // set
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set"));
+        expr_ty set_var;
+        if (
+            (set_var = set_rule(p))  // set
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set"));
+            _res = set_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set"));
+    }
+    { // dictcomp
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp"));
+        expr_ty dictcomp_var;
+        if (
+            (dictcomp_var = dictcomp_rule(p))  // dictcomp
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp"));
+            _res = dictcomp_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp"));
+    }
+    { // setcomp
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp"));
+        expr_ty setcomp_var;
+        if (
+            (setcomp_var = setcomp_rule(p))  // setcomp
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp"));
+            _res = setcomp_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_98: STRING
+static asdl_seq *
+_loop1_98_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // STRING
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING"));
+        expr_ty string_var;
+        while (
+            (string_var = _PyPegen_string_token(p))  // STRING
+        )
+        {
+            _res = string_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_98[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_98_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_99: star_named_expression ',' star_named_expressions?
+static void *
+_tmp_99_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // star_named_expression ',' star_named_expressions?
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
+        Token * _literal;
+        expr_ty y;
+        void *z;
+        if (
+            (y = star_named_expression_rule(p))  // star_named_expression
+            &&
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (z = star_named_expressions_rule(p), 1)  // star_named_expressions?
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_99[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
+            _res = _PyPegen_seq_insert_in_front ( p , y , z );
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_99[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_100: yield_expr | named_expression
+static void *
+_tmp_100_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // yield_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+        expr_ty yield_expr_var;
+        if (
+            (yield_expr_var = yield_expr_rule(p))  // yield_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+            _res = yield_expr_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_100[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
+    }
+    { // named_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
+        expr_ty named_expression_var;
+        if (
+            (named_expression_var = named_expression_rule(p))  // named_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
+            _res = named_expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_100[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_102: ',' double_starred_kvpair
+static asdl_seq *
+_loop0_102_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' double_starred_kvpair
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair"));
+        Token * _literal;
+        KeyValuePair* elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = double_starred_kvpair_rule(p))  // double_starred_kvpair
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_102[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_102_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_101: double_starred_kvpair _loop0_102
+static asdl_seq *
+_gather_101_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // double_starred_kvpair _loop0_102
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_102"));
+        KeyValuePair* elem;
+        asdl_seq * seq;
+        if (
+            (elem = double_starred_kvpair_rule(p))  // double_starred_kvpair
+            &&
+            (seq = _loop0_102_rule(p))  // _loop0_102
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_101[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_102"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_101[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_102"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_103: for_if_clause
+static asdl_seq *
+_loop1_103_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // for_if_clause
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause"));
+        comprehension_ty for_if_clause_var;
+        while (
+            (for_if_clause_var = for_if_clause_rule(p))  // for_if_clause
+        )
+        {
+            _res = for_if_clause_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_103[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_103_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_104: ('if' disjunction)
+static asdl_seq *
+_loop0_104_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('if' disjunction)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)"));
+        void *_tmp_145_var;
+        while (
+            (_tmp_145_var = _tmp_145_rule(p))  // 'if' disjunction
+        )
+        {
+            _res = _tmp_145_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_104[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_104_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_105: ('if' disjunction)
+static asdl_seq *
+_loop0_105_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ('if' disjunction)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)"));
+        void *_tmp_146_var;
+        while (
+            (_tmp_146_var = _tmp_146_rule(p))  // 'if' disjunction
+        )
+        {
+            _res = _tmp_146_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_105[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_105_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_107: ',' (starred_expression | named_expression !'=')
+static asdl_seq *
+_loop0_107_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' (starred_expression | named_expression !'=')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | named_expression !'=')"));
+        Token * _literal;
+        void *elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = _tmp_147_rule(p))  // starred_expression | named_expression !'='
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_107[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | named_expression !'=')"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_107_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_106: (starred_expression | named_expression !'=') _loop0_107
+static asdl_seq *
+_gather_106_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // (starred_expression | named_expression !'=') _loop0_107
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | named_expression !'=') _loop0_107"));
+        void *elem;
+        asdl_seq * seq;
+        if (
+            (elem = _tmp_147_rule(p))  // starred_expression | named_expression !'='
+            &&
+            (seq = _loop0_107_rule(p))  // _loop0_107
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_106[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | named_expression !'=') _loop0_107"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_106[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | named_expression !'=') _loop0_107"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_108: ',' kwargs
+static void *
+_tmp_108_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ',' kwargs
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
+        Token * _literal;
+        asdl_seq* k;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (k = kwargs_rule(p))  // kwargs
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
+            _res = k;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_108[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwargs"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_110: ',' kwarg_or_starred
+static asdl_seq *
+_loop0_110_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' kwarg_or_starred
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred"));
+        Token * _literal;
+        KeywordOrStarred* elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_110[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_110_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_109: kwarg_or_starred _loop0_110
+static asdl_seq *
+_gather_109_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // kwarg_or_starred _loop0_110
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_110"));
+        KeywordOrStarred* elem;
+        asdl_seq * seq;
+        if (
+            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
+            &&
+            (seq = _loop0_110_rule(p))  // _loop0_110
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_109[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_110"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_109[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_110"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_112: ',' kwarg_or_double_starred
+static asdl_seq *
+_loop0_112_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' kwarg_or_double_starred
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred"));
+        Token * _literal;
+        KeywordOrStarred* elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_112[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_112_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_111: kwarg_or_double_starred _loop0_112
+static asdl_seq *
+_gather_111_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // kwarg_or_double_starred _loop0_112
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_112"));
+        KeywordOrStarred* elem;
+        asdl_seq * seq;
+        if (
+            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
+            &&
+            (seq = _loop0_112_rule(p))  // _loop0_112
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_112"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_111[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_112"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_114: ',' kwarg_or_starred
+static asdl_seq *
+_loop0_114_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' kwarg_or_starred
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred"));
+        Token * _literal;
+        KeywordOrStarred* elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_114[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_114_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_113: kwarg_or_starred _loop0_114
+static asdl_seq *
+_gather_113_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // kwarg_or_starred _loop0_114
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_114"));
+        KeywordOrStarred* elem;
+        asdl_seq * seq;
+        if (
+            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
+            &&
+            (seq = _loop0_114_rule(p))  // _loop0_114
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_114"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_113[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_114"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_116: ',' kwarg_or_double_starred
+static asdl_seq *
+_loop0_116_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' kwarg_or_double_starred
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred"));
+        Token * _literal;
+        KeywordOrStarred* elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_116[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_116_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_115: kwarg_or_double_starred _loop0_116
+static asdl_seq *
+_gather_115_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // kwarg_or_double_starred _loop0_116
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_116"));
+        KeywordOrStarred* elem;
+        asdl_seq * seq;
+        if (
+            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
+            &&
+            (seq = _loop0_116_rule(p))  // _loop0_116
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_116"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_115[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_116"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_117: (',' star_target)
+static asdl_seq *
+_loop0_117_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // (',' star_target)
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)"));
+        void *_tmp_148_var;
+        while (
+            (_tmp_148_var = _tmp_148_rule(p))  // ',' star_target
+        )
+        {
+            _res = _tmp_148_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_117[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_117_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_119: ',' star_target
+static asdl_seq *
+_loop0_119_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' star_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = star_target_rule(p))  // star_target
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_119[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_119_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_118: star_target _loop0_119
+static asdl_seq *
+_gather_118_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // star_target _loop0_119
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_119"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = star_target_rule(p))  // star_target
+            &&
+            (seq = _loop0_119_rule(p))  // _loop0_119
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target _loop0_119"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_118[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target _loop0_119"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_120: !'*' star_target
+static void *
+_tmp_120_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // !'*' star_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
+        expr_ty star_target_var;
+        if (
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 16)  // token='*'
+            &&
+            (star_target_var = star_target_rule(p))  // star_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_120[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
+            _res = star_target_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_120[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!'*' star_target"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_122: ',' del_target
+static asdl_seq *
+_loop0_122_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' del_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = del_target_rule(p))  // del_target
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_122[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' del_target"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_122_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_121: del_target _loop0_122
+static asdl_seq *
+_gather_121_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // del_target _loop0_122
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_122"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = del_target_rule(p))  // del_target
+            &&
+            (seq = _loop0_122_rule(p))  // _loop0_122
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_122"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_121[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_122"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_124: ',' target
+static asdl_seq *
+_loop0_124_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // ',' target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' target"));
+        Token * _literal;
+        expr_ty elem;
+        while (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (elem = target_rule(p))  // target
+        )
+        {
+            _res = elem;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                PyMem_Free(_children);
+                D(p->level--);
+                return NULL;
+            }
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_124[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' target"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_124_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _gather_123: target _loop0_124
+static asdl_seq *
+_gather_123_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq * _res = NULL;
+    int _mark = p->mark;
+    { // target _loop0_124
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _gather_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target _loop0_124"));
+        expr_ty elem;
+        asdl_seq * seq;
+        if (
+            (elem = target_rule(p))  // target
+            &&
+            (seq = _loop0_124_rule(p))  // _loop0_124
+        )
+        {
+            D(fprintf(stderr, "%*c+ _gather_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target _loop0_124"));
+            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _gather_123[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target _loop0_124"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_125: args | expression for_if_clauses
+static void *
+_tmp_125_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // args
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args"));
+        expr_ty args_var;
+        if (
+            (args_var = args_rule(p))  // args
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args"));
+            _res = args_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args"));
+    }
+    { // expression for_if_clauses
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
+        expr_ty expression_var;
+        asdl_seq* for_if_clauses_var;
+        if (
+            (expression_var = expression_rule(p))  // expression
+            &&
+            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
+            _res = _PyPegen_dummy_name(p, expression_var, for_if_clauses_var);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_126: star_named_expressions
+static asdl_seq *
+_loop0_126_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // star_named_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions"));
+        asdl_seq* star_named_expressions_var;
+        while (
+            (star_named_expressions_var = star_named_expressions_rule(p))  // star_named_expressions
+        )
+        {
+            _res = star_named_expressions_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_126[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_126_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_127: (star_targets '=')
+static asdl_seq *
+_loop0_127_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // (star_targets '=')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
+        void *_tmp_149_var;
+        while (
+            (_tmp_149_var = _tmp_149_rule(p))  // star_targets '='
+        )
+        {
+            _res = _tmp_149_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_127[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_127_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop0_128: (star_targets '=')
+static asdl_seq *
+_loop0_128_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // (star_targets '=')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
+        void *_tmp_150_var;
+        while (
+            (_tmp_150_var = _tmp_150_rule(p))  // star_targets '='
+        )
+        {
+            _res = _tmp_150_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_128[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_128_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_129: yield_expr | star_expressions
+static void *
+_tmp_129_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // yield_expr
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+        expr_ty yield_expr_var;
+        if (
+            (yield_expr_var = yield_expr_rule(p))  // yield_expr
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
+            _res = yield_expr_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
+    }
+    { // star_expressions
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+        expr_ty star_expressions_var;
+        if (
+            (star_expressions_var = star_expressions_rule(p))  // star_expressions
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
+            _res = star_expressions_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_130: '[' | '(' | '{'
+static void *
+_tmp_130_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '['
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 9))  // token='['
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
+    }
+    { // '('
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 7))  // token='('
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
+    }
+    { // '{'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_130[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_131: param_no_default
+static asdl_seq *
+_loop0_131_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
+        arg_ty param_no_default_var;
+        while (
+            (param_no_default_var = param_no_default_rule(p))  // param_no_default
+        )
+        {
+            _res = param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_131[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_131_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_132: slash_with_default | param_with_default+
+static void *
+_tmp_132_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // slash_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
+        SlashWithDefault* slash_with_default_var;
+        if (
+            (slash_with_default_var = slash_with_default_rule(p))  // slash_with_default
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
+            _res = slash_with_default_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_132[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default"));
+    }
+    { // param_with_default+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
+        asdl_seq * _loop1_151_var;
+        if (
+            (_loop1_151_var = _loop1_151_rule(p))  // param_with_default+
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
+            _res = _loop1_151_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_132[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop0_133: lambda_param_no_default
+static asdl_seq *
+_loop0_133_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_no_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
+        arg_ty lambda_param_no_default_var;
+        while (
+            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
+        )
+        {
+            _res = lambda_param_no_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop0_133[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop0_133_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_134: lambda_slash_with_default | lambda_param_with_default+
+static void *
+_tmp_134_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // lambda_slash_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
+        SlashWithDefault* lambda_slash_with_default_var;
+        if (
+            (lambda_slash_with_default_var = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
+            _res = lambda_slash_with_default_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default"));
+    }
+    { // lambda_param_with_default+
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
+        asdl_seq * _loop1_152_var;
+        if (
+            (_loop1_152_var = _loop1_152_rule(p))  // lambda_param_with_default+
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
+            _res = _loop1_152_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_135: ')' | ',' (')' | '**')
+static void *
+_tmp_135_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_135[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
+    }
+    { // ',' (')' | '**')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
+        Token * _literal;
+        void *_tmp_153_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_tmp_153_var = _tmp_153_rule(p))  // ')' | '**'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
+            _res = _PyPegen_dummy_name(p, _literal, _tmp_153_var);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_135[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_136: ':' | ',' (':' | '**')
+static void *
+_tmp_136_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_136[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
+    }
+    { // ',' (':' | '**')
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
+        Token * _literal;
+        void *_tmp_154_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (_tmp_154_var = _tmp_154_rule(p))  // ':' | '**'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
+            _res = _PyPegen_dummy_name(p, _literal, _tmp_154_var);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_136[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_137: star_targets '='
+static void *
+_tmp_137_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // star_targets '='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
+        Token * _literal;
+        expr_ty z;
+        if (
+            (z = star_targets_rule(p))  // star_targets
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_137[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_137[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_138: '.' | '...'
+static void *
+_tmp_138_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '.'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_138[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_138[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
+    }
+    { // '...'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_138[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_138[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_139: '.' | '...'
+static void *
+_tmp_139_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '.'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_139[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
+    }
+    { // '...'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_139[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_140: '@' named_expression NEWLINE
+static void *
+_tmp_140_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // '@' named_expression NEWLINE
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
+        Token * _literal;
+        expr_ty f;
+        Token * newline_var;
+        if (
+            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
+            &&
+            (f = named_expression_rule(p))  // named_expression
+            &&
+            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_140[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
+            _res = f;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_140[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_141: ',' star_expression
+static void *
+_tmp_141_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ',' star_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
+        Token * _literal;
+        expr_ty c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (c = star_expression_rule(p))  // star_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_141[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
+            _res = c;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_141[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_142: ',' expression
+static void *
+_tmp_142_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ',' expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
+        Token * _literal;
+        expr_ty c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (c = expression_rule(p))  // expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_142[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression"));
+            _res = c;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_142[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_143: 'or' conjunction
+static void *
+_tmp_143_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'or' conjunction
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
+        Token * _keyword;
+        expr_ty c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 532))  // token='or'
+            &&
+            (c = conjunction_rule(p))  // conjunction
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_143[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
+            _res = c;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_143[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_144: 'and' inversion
+static void *
+_tmp_144_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'and' inversion
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
+        Token * _keyword;
+        expr_ty c;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 533))  // token='and'
+            &&
+            (c = inversion_rule(p))  // inversion
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
+            _res = c;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_145: 'if' disjunction
+static void *
+_tmp_145_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'if' disjunction
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
+        Token * _keyword;
+        expr_ty z;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 510))  // token='if'
+            &&
+            (z = disjunction_rule(p))  // disjunction
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_146: 'if' disjunction
+static void *
+_tmp_146_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // 'if' disjunction
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
+        Token * _keyword;
+        expr_ty z;
+        if (
+            (_keyword = _PyPegen_expect_token(p, 510))  // token='if'
+            &&
+            (z = disjunction_rule(p))  // disjunction
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
+            _res = z;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_147: starred_expression | named_expression !'='
+static void *
+_tmp_147_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // starred_expression
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
+        expr_ty starred_expression_var;
+        if (
+            (starred_expression_var = starred_expression_rule(p))  // starred_expression
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
+            _res = starred_expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
+    }
+    { // named_expression !'='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression !'='"));
+        expr_ty named_expression_var;
+        if (
+            (named_expression_var = named_expression_rule(p))  // named_expression
+            &&
+            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression !'='"));
+            _res = named_expression_var;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression !'='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_148: ',' star_target
+static void *
+_tmp_148_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ',' star_target
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
+        Token * _literal;
+        expr_ty c;
+        if (
+            (_literal = _PyPegen_expect_token(p, 12))  // token=','
+            &&
+            (c = star_target_rule(p))  // star_target
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target"));
+            _res = c;
+            if (_res == NULL && PyErr_Occurred()) {
+                p->error_indicator = 1;
+                D(p->level--);
+                return NULL;
+            }
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_149: star_targets '='
+static void *
+_tmp_149_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // star_targets '='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
+        Token * _literal;
+        expr_ty star_targets_var;
+        if (
+            (star_targets_var = star_targets_rule(p))  // star_targets
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
+            _res = _PyPegen_dummy_name(p, star_targets_var, _literal);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_150: star_targets '='
+static void *
+_tmp_150_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // star_targets '='
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
+        Token * _literal;
+        expr_ty star_targets_var;
+        if (
+            (star_targets_var = star_targets_rule(p))  // star_targets
+            &&
+            (_literal = _PyPegen_expect_token(p, 22))  // token='='
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
+            _res = _PyPegen_dummy_name(p, star_targets_var, _literal);
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _loop1_151: param_with_default
+static asdl_seq *
+_loop1_151_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
+        NameDefaultPair* param_with_default_var;
+        while (
+            (param_with_default_var = param_with_default_rule(p))  // param_with_default
+        )
+        {
+            _res = param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_151[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_151_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _loop1_152: lambda_param_with_default
+static asdl_seq *
+_loop1_152_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void *_res = NULL;
+    int _mark = p->mark;
+    int _start_mark = p->mark;
+    void **_children = PyMem_Malloc(sizeof(void *));
+    if (!_children) {
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    ssize_t _children_capacity = 1;
+    ssize_t _n = 0;
+    { // lambda_param_with_default
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _loop1_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
+        NameDefaultPair* lambda_param_with_default_var;
+        while (
+            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
+        )
+        {
+            _res = lambda_param_with_default_var;
+            if (_n == _children_capacity) {
+                _children_capacity *= 2;
+                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
+                if (!_new_children) {
+                    p->error_indicator = 1;
+                    PyErr_NoMemory();
+                    D(p->level--);
+                    return NULL;
+                }
+                _children = _new_children;
+            }
+            _children[_n++] = _res;
+            _mark = p->mark;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _loop1_152[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
+    }
+    if (_n == 0 || p->error_indicator) {
+        PyMem_Free(_children);
+        D(p->level--);
+        return NULL;
+    }
+    asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);
+    if (!_seq) {
+        PyMem_Free(_children);
+        p->error_indicator = 1;
+        PyErr_NoMemory();
+        D(p->level--);
+        return NULL;
+    }
+    for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);
+    PyMem_Free(_children);
+    _PyPegen_insert_memo(p, _start_mark, _loop1_152_type, _seq);
+    D(p->level--);
+    return _seq;
+}
+
+// _tmp_153: ')' | '**'
+static void *
+_tmp_153_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ')'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
+    }
+    { // '**'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+// _tmp_154: ':' | '**'
+static void *
+_tmp_154_rule(Parser *p)
+{
+    D(p->level++);
+    if (p->error_indicator) {
+        D(p->level--);
+        return NULL;
+    }
+    void * _res = NULL;
+    int _mark = p->mark;
+    { // ':'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
+    }
+    { // '**'
+        if (p->error_indicator) {
+            D(p->level--);
+            return NULL;
+        }
+        D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
+        Token * _literal;
+        if (
+            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
+        )
+        {
+            D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
+            _res = _literal;
+            goto done;
+        }
+        p->mark = _mark;
+        D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ',
+                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
+    }
+    _res = NULL;
+  done:
+    D(p->level--);
+    return _res;
+}
+
+void *
+_PyPegen_parse(Parser *p)
+{
+    // Initialize keywords
+    p->keywords = reserved_keywords;
+    p->n_keyword_lists = n_keyword_lists;
+
+    // Run parser
+    void *result = NULL;
+    if (p->start_rule == Py_file_input) {
+        result = file_rule(p);
+    } else if (p->start_rule == Py_single_input) {
+        result = interactive_rule(p);
+    } else if (p->start_rule == Py_eval_input) {
+        result = eval_rule(p);
+    } else if (p->start_rule == Py_func_type_input) {
+        result = func_type_rule(p);
+    } else if (p->start_rule == Py_fstring_input) {
+        result = fstring_rule(p);
+    }
+
+    return result;
+}
+
+// The end
diff --git a/Parser/pegen/parse_string.c b/Parser/pegen/parse_string.c
new file mode 100644
index 0000000..fb0c4af
--- /dev/null
+++ b/Parser/pegen/parse_string.c
@@ -0,0 +1,1237 @@
+#include <stdbool.h>
+
+#include <Python.h>
+
+#include "../tokenizer.h"
+#include "pegen.h"
+#include "parse_string.h"
+
+//// STRING HANDLING FUNCTIONS ////
+
+// These functions are ported directly from Python/ast.c with some modifications
+// to account for the use of "Parser *p", the fact that don't have parser nodes
+// to pass around and the usage of some specialized APIs present only in this
+// file (like "_PyPegen_raise_syntax_error").
+
+static int
+warn_invalid_escape_sequence(Parser *p, unsigned char first_invalid_escape_char, Token *t)
+{
+    PyObject *msg =
+        PyUnicode_FromFormat("invalid escape sequence \\%c", first_invalid_escape_char);
+    if (msg == NULL) {
+        return -1;
+    }
+    if (PyErr_WarnExplicitObject(PyExc_DeprecationWarning, msg, p->tok->filename,
+                                 t->lineno, NULL, NULL) < 0) {
+        if (PyErr_ExceptionMatches(PyExc_DeprecationWarning)) {
+            /* Replace the DeprecationWarning exception with a SyntaxError
+               to get a more accurate error report */
+            PyErr_Clear();
+
+            /* This is needed, in order for the SyntaxError to point to the token t,
+               since _PyPegen_raise_error uses p->tokens[p->fill - 1] for the
+               error location, if p->known_err_token is not set. */
+            p->known_err_token = t;
+            RAISE_SYNTAX_ERROR("invalid escape sequence \\%c", first_invalid_escape_char);
+        }
+        Py_DECREF(msg);
+        return -1;
+    }
+    Py_DECREF(msg);
+    return 0;
+}
+
+static PyObject *
+decode_utf8(const char **sPtr, const char *end)
+{
+    const char *s;
+    const char *t;
+    t = s = *sPtr;
+    while (s < end && (*s & 0x80)) {
+        s++;
+    }
+    *sPtr = s;
+    return PyUnicode_DecodeUTF8(t, s - t, NULL);
+}
+
+static PyObject *
+decode_unicode_with_escapes(Parser *parser, const char *s, size_t len, Token *t)
+{
+    PyObject *v;
+    PyObject *u;
+    char *buf;
+    char *p;
+    const char *end;
+
+    /* check for integer overflow */
+    if (len > SIZE_MAX / 6) {
+        return NULL;
+    }
+    /* "ä" (2 bytes) may become "\U000000E4" (10 bytes), or 1:5
+       "\ä" (3 bytes) may become "\u005c\U000000E4" (16 bytes), or ~1:6 */
+    u = PyBytes_FromStringAndSize((char *)NULL, len * 6);
+    if (u == NULL) {
+        return NULL;
+    }
+    p = buf = PyBytes_AsString(u);
+    if (p == NULL) {
+        return NULL;
+    }
+    end = s + len;
+    while (s < end) {
+        if (*s == '\\') {
+            *p++ = *s++;
+            if (s >= end || *s & 0x80) {
+                strcpy(p, "u005c");
+                p += 5;
+                if (s >= end) {
+                    break;
+                }
+            }
+        }
+        if (*s & 0x80) {
+            PyObject *w;
+            int kind;
+            void *data;
+            Py_ssize_t w_len;
+            Py_ssize_t i;
+            w = decode_utf8(&s, end);
+            if (w == NULL) {
+                Py_DECREF(u);
+                return NULL;
+            }
+            kind = PyUnicode_KIND(w);
+            data = PyUnicode_DATA(w);
+            w_len = PyUnicode_GET_LENGTH(w);
+            for (i = 0; i < w_len; i++) {
+                Py_UCS4 chr = PyUnicode_READ(kind, data, i);
+                sprintf(p, "\\U%08x", chr);
+                p += 10;
+            }
+            /* Should be impossible to overflow */
+            assert(p - buf <= PyBytes_GET_SIZE(u));
+            Py_DECREF(w);
+        }
+        else {
+            *p++ = *s++;
+        }
+    }
+    len = p - buf;
+    s = buf;
+
+    const char *first_invalid_escape;
+    v = _PyUnicode_DecodeUnicodeEscape(s, len, NULL, &first_invalid_escape);
+
+    if (v != NULL && first_invalid_escape != NULL) {
+        if (warn_invalid_escape_sequence(parser, *first_invalid_escape, t) < 0) {
+            /* We have not decref u before because first_invalid_escape points
+               inside u. */
+            Py_XDECREF(u);
+            Py_DECREF(v);
+            return NULL;
+        }
+    }
+    Py_XDECREF(u);
+    return v;
+}
+
+static PyObject *
+decode_bytes_with_escapes(Parser *p, const char *s, Py_ssize_t len, Token *t)
+{
+    const char *first_invalid_escape;
+    PyObject *result = _PyBytes_DecodeEscape(s, len, NULL, &first_invalid_escape);
+    if (result == NULL) {
+        return NULL;
+    }
+
+    if (first_invalid_escape != NULL) {
+        if (warn_invalid_escape_sequence(p, *first_invalid_escape, t) < 0) {
+            Py_DECREF(result);
+            return NULL;
+        }
+    }
+    return result;
+}
+
+/* s must include the bracketing quote characters, and r, b, u,
+   &/or f prefixes (if any), and embedded escape sequences (if any).
+   _PyPegen_parsestr parses it, and sets *result to decoded Python string object.
+   If the string is an f-string, set *fstr and *fstrlen to the unparsed
+   string object.  Return 0 if no errors occurred.  */
+int
+_PyPegen_parsestr(Parser *p, int *bytesmode, int *rawmode, PyObject **result,
+                  const char **fstr, Py_ssize_t *fstrlen, Token *t)
+{
+    const char *s = PyBytes_AsString(t->bytes);
+    if (s == NULL) {
+        return -1;
+    }
+
+    size_t len;
+    int quote = Py_CHARMASK(*s);
+    int fmode = 0;
+    *bytesmode = 0;
+    *rawmode = 0;
+    *result = NULL;
+    *fstr = NULL;
+    if (Py_ISALPHA(quote)) {
+        while (!*bytesmode || !*rawmode) {
+            if (quote == 'b' || quote == 'B') {
+                quote =(unsigned char)*++s;
+                *bytesmode = 1;
+            }
+            else if (quote == 'u' || quote == 'U') {
+                quote = (unsigned char)*++s;
+            }
+            else if (quote == 'r' || quote == 'R') {
+                quote = (unsigned char)*++s;
+                *rawmode = 1;
+            }
+            else if (quote == 'f' || quote == 'F') {
+                quote = (unsigned char)*++s;
+                fmode = 1;
+            }
+            else {
+                break;
+            }
+        }
+    }
+
+    /* fstrings are only allowed in Python 3.6 and greater */
+    if (fmode && p->feature_version < 6) {
+        p->error_indicator = 1;
+        RAISE_SYNTAX_ERROR("Format strings are only supported in Python 3.6 and greater");
+        return -1;
+    }
+
+    if (fmode && *bytesmode) {
+        PyErr_BadInternalCall();
+        return -1;
+    }
+    if (quote != '\'' && quote != '\"') {
+        PyErr_BadInternalCall();
+        return -1;
+    }
+    /* Skip the leading quote char. */
+    s++;
+    len = strlen(s);
+    if (len > INT_MAX) {
+        PyErr_SetString(PyExc_OverflowError, "string to parse is too long");
+        return -1;
+    }
+    if (s[--len] != quote) {
+        /* Last quote char must match the first. */
+        PyErr_BadInternalCall();
+        return -1;
+    }
+    if (len >= 4 && s[0] == quote && s[1] == quote) {
+        /* A triple quoted string. We've already skipped one quote at
+           the start and one at the end of the string. Now skip the
+           two at the start. */
+        s += 2;
+        len -= 2;
+        /* And check that the last two match. */
+        if (s[--len] != quote || s[--len] != quote) {
+            PyErr_BadInternalCall();
+            return -1;
+        }
+    }
+
+    if (fmode) {
+        /* Just return the bytes. The caller will parse the resulting
+           string. */
+        *fstr = s;
+        *fstrlen = len;
+        return 0;
+    }
+
+    /* Not an f-string. */
+    /* Avoid invoking escape decoding routines if possible. */
+    *rawmode = *rawmode || strchr(s, '\\') == NULL;
+    if (*bytesmode) {
+        /* Disallow non-ASCII characters. */
+        const char *ch;
+        for (ch = s; *ch; ch++) {
+            if (Py_CHARMASK(*ch) >= 0x80) {
+                RAISE_SYNTAX_ERROR(
+                                   "bytes can only contain ASCII "
+                                   "literal characters.");
+                return -1;
+            }
+        }
+        if (*rawmode) {
+            *result = PyBytes_FromStringAndSize(s, len);
+        }
+        else {
+            *result = decode_bytes_with_escapes(p, s, len, t);
+        }
+    }
+    else {
+        if (*rawmode) {
+            *result = PyUnicode_DecodeUTF8Stateful(s, len, NULL, NULL);
+        }
+        else {
+            *result = decode_unicode_with_escapes(p, s, len, t);
+        }
+    }
+    return *result == NULL ? -1 : 0;
+}
+
+
+
+// FSTRING STUFF
+
+/* Fix locations for the given node and its children.
+
+   `parent` is the enclosing node.
+   `n` is the node which locations are going to be fixed relative to parent.
+   `expr_str` is the child node's string representation, including braces.
+*/
+static bool
+fstring_find_expr_location(Token *parent, char *expr_str, int *p_lines, int *p_cols)
+{
+    *p_lines = 0;
+    *p_cols = 0;
+    if (parent && parent->bytes) {
+        char *parent_str = PyBytes_AsString(parent->bytes);
+        if (!parent_str) {
+            return false;
+        }
+        char *substr = strstr(parent_str, expr_str);
+        if (substr) {
+            // The following is needed, in order to correctly shift the column
+            // offset, in the case that (disregarding any whitespace) a newline
+            // immediately follows the opening curly brace of the fstring expression.
+            bool newline_after_brace = 1;
+            char *start = substr + 1;
+            while (start && *start != '}' && *start != '\n') {
+                if (*start != ' ' && *start != '\t' && *start != '\f') {
+                    newline_after_brace = 0;
+                    break;
+                }
+                start++;
+            }
+
+            // Account for the characters from the last newline character to our
+            // left until the beginning of substr.
+            if (!newline_after_brace) {
+                start = substr;
+                while (start > parent_str && *start != '\n') {
+                    start--;
+                }
+                *p_cols += (int)(substr - start);
+            }
+            /* adjust the start based on the number of newlines encountered
+               before the f-string expression */
+            for (char* p = parent_str; p < substr; p++) {
+                if (*p == '\n') {
+                    (*p_lines)++;
+                }
+            }
+        }
+    }
+    return true;
+}
+
+
+/* Compile this expression in to an expr_ty.  Add parens around the
+   expression, in order to allow leading spaces in the expression. */
+static expr_ty
+fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
+                     Token *t)
+{
+    expr_ty expr = NULL;
+    char *str;
+    Py_ssize_t len;
+    const char *s;
+    expr_ty result = NULL;
+
+    assert(expr_end >= expr_start);
+    assert(*(expr_start-1) == '{');
+    assert(*expr_end == '}' || *expr_end == '!' || *expr_end == ':' ||
+           *expr_end == '=');
+
+    /* If the substring is all whitespace, it's an error.  We need to catch this
+       here, and not when we call PyParser_SimpleParseStringFlagsFilename,
+       because turning the expression '' in to '()' would go from being invalid
+       to valid. */
+    for (s = expr_start; s != expr_end; s++) {
+        char c = *s;
+        /* The Python parser ignores only the following whitespace
+           characters (\r already is converted to \n). */
+        if (!(c == ' ' || c == '\t' || c == '\n' || c == '\f')) {
+            break;
+        }
+    }
+    if (s == expr_end) {
+        RAISE_SYNTAX_ERROR("f-string: empty expression not allowed");
+        return NULL;
+    }
+
+    len = expr_end - expr_start;
+    /* Allocate 3 extra bytes: open paren, close paren, null byte. */
+    str = PyMem_Malloc(len + 3);
+    if (str == NULL) {
+        PyErr_NoMemory();
+        return NULL;
+    }
+
+    // The call to fstring_find_expr_location is responsible for finding the column offset
+    // the generated AST nodes need to be shifted to the right, which is equal to the number
+    // of the f-string characters before the expression starts. In order to correctly compute
+    // this offset, strstr gets called in fstring_find_expr_location which only succeeds
+    // if curly braces appear before and after the f-string expression (exactly like they do
+    // in the f-string itself), hence the following lines.
+    str[0] = '{';
+    memcpy(str+1, expr_start, len);
+    str[len+1] = '}';
+    str[len+2] = 0;
+
+    int lines, cols;
+    if (!fstring_find_expr_location(t, str, &lines, &cols)) {
+        PyMem_FREE(str);
+        return NULL;
+    }
+
+    // The parentheses are needed in order to allow for leading whitespace within
+    // the f-string expression. This consequently gets parsed as a group (see the
+    // group rule in python.gram).
+    str[0] = '(';
+    str[len+1] = ')';
+
+    struct tok_state* tok = PyTokenizer_FromString(str, 1);
+    if (tok == NULL) {
+        PyMem_Free(str);
+        return NULL;
+    }
+    Py_INCREF(p->tok->filename);
+    tok->filename = p->tok->filename;
+
+    Parser *p2 = _PyPegen_Parser_New(tok, Py_fstring_input, p->flags, p->feature_version,
+                                     NULL, p->arena);
+    p2->starting_lineno = t->lineno + lines - 1;
+    p2->starting_col_offset = p->tok->first_lineno == p->tok->lineno ? t->col_offset + cols : cols;
+
+    expr = _PyPegen_run_parser(p2);
+
+    if (expr == NULL) {
+        goto exit;
+    }
+    result = expr;
+
+exit:
+    PyMem_Free(str);
+    _PyPegen_Parser_Free(p2);
+    PyTokenizer_Free(tok);
+    return result;
+}
+
+/* Return -1 on error.
+
+   Return 0 if we reached the end of the literal.
+
+   Return 1 if we haven't reached the end of the literal, but we want
+   the caller to process the literal up to this point. Used for
+   doubled braces.
+*/
+static int
+fstring_find_literal(Parser *p, const char **str, const char *end, int raw,
+                     PyObject **literal, int recurse_lvl, Token *t)
+{
+    /* Get any literal string. It ends when we hit an un-doubled left
+       brace (which isn't part of a unicode name escape such as
+       "\N{EULER CONSTANT}"), or the end of the string. */
+
+    const char *s = *str;
+    const char *literal_start = s;
+    int result = 0;
+
+    assert(*literal == NULL);
+    while (s < end) {
+        char ch = *s++;
+        if (!raw && ch == '\\' && s < end) {
+            ch = *s++;
+            if (ch == 'N') {
+                if (s < end && *s++ == '{') {
+                    while (s < end && *s++ != '}') {
+                    }
+                    continue;
+                }
+                break;
+            }
+            if (ch == '{' && warn_invalid_escape_sequence(p, ch, t) < 0) {
+                return -1;
+            }
+        }
+        if (ch == '{' || ch == '}') {
+            /* Check for doubled braces, but only at the top level. If
+               we checked at every level, then f'{0:{3}}' would fail
+               with the two closing braces. */
+            if (recurse_lvl == 0) {
+                if (s < end && *s == ch) {
+                    /* We're going to tell the caller that the literal ends
+                       here, but that they should continue scanning. But also
+                       skip over the second brace when we resume scanning. */
+                    *str = s + 1;
+                    result = 1;
+                    goto done;
+                }
+
+                /* Where a single '{' is the start of a new expression, a
+                   single '}' is not allowed. */
+                if (ch == '}') {
+                    *str = s - 1;
+                    RAISE_SYNTAX_ERROR("f-string: single '}' is not allowed");
+                    return -1;
+                }
+            }
+            /* We're either at a '{', which means we're starting another
+               expression; or a '}', which means we're at the end of this
+               f-string (for a nested format_spec). */
+            s--;
+            break;
+        }
+    }
+    *str = s;
+    assert(s <= end);
+    assert(s == end || *s == '{' || *s == '}');
+done:
+    if (literal_start != s) {
+        if (raw) {
+            *literal = PyUnicode_DecodeUTF8Stateful(literal_start,
+                                                    s - literal_start,
+                                                    NULL, NULL);
+        } else {
+            *literal = decode_unicode_with_escapes(p, literal_start,
+                                                   s - literal_start, t);
+        }
+        if (!*literal) {
+            return -1;
+        }
+    }
+    return result;
+}
+
+/* Forward declaration because parsing is recursive. */
+static expr_ty
+fstring_parse(Parser *p, const char **str, const char *end, int raw, int recurse_lvl,
+              Token *first_token, Token* t, Token *last_token);
+
+/* Parse the f-string at *str, ending at end.  We know *str starts an
+   expression (so it must be a '{'). Returns the FormattedValue node, which
+   includes the expression, conversion character, format_spec expression, and
+   optionally the text of the expression (if = is used).
+
+   Note that I don't do a perfect job here: I don't make sure that a
+   closing brace doesn't match an opening paren, for example. It
+   doesn't need to error on all invalid expressions, just correctly
+   find the end of all valid ones. Any errors inside the expression
+   will be caught when we parse it later.
+
+   *expression is set to the expression.  For an '=' "debug" expression,
+   *expr_text is set to the debug text (the original text of the expression,
+   including the '=' and any whitespace around it, as a string object).  If
+   not a debug expression, *expr_text set to NULL. */
+static int
+fstring_find_expr(Parser *p, const char **str, const char *end, int raw, int recurse_lvl,
+                  PyObject **expr_text, expr_ty *expression, Token *first_token,
+                  Token *t, Token *last_token)
+{
+    /* Return -1 on error, else 0. */
+
+    const char *expr_start;
+    const char *expr_end;
+    expr_ty simple_expression;
+    expr_ty format_spec = NULL; /* Optional format specifier. */
+    int conversion = -1; /* The conversion char.  Use default if not
+                            specified, or !r if using = and no format
+                            spec. */
+
+    /* 0 if we're not in a string, else the quote char we're trying to
+       match (single or double quote). */
+    char quote_char = 0;
+
+    /* If we're inside a string, 1=normal, 3=triple-quoted. */
+    int string_type = 0;
+
+    /* Keep track of nesting level for braces/parens/brackets in
+       expressions. */
+    Py_ssize_t nested_depth = 0;
+    char parenstack[MAXLEVEL];
+
+    *expr_text = NULL;
+
+    /* Can only nest one level deep. */
+    if (recurse_lvl >= 2) {
+        RAISE_SYNTAX_ERROR("f-string: expressions nested too deeply");
+        goto error;
+    }
+
+    /* The first char must be a left brace, or we wouldn't have gotten
+       here. Skip over it. */
+    assert(**str == '{');
+    *str += 1;
+
+    expr_start = *str;
+    for (; *str < end; (*str)++) {
+        char ch;
+
+        /* Loop invariants. */
+        assert(nested_depth >= 0);
+        assert(*str >= expr_start && *str < end);
+        if (quote_char) {
+            assert(string_type == 1 || string_type == 3);
+        } else {
+            assert(string_type == 0);
+        }
+
+        ch = **str;
+        /* Nowhere inside an expression is a backslash allowed. */
+        if (ch == '\\') {
+            /* Error: can't include a backslash character, inside
+               parens or strings or not. */
+            RAISE_SYNTAX_ERROR(
+                      "f-string expression part "
+                      "cannot include a backslash");
+            goto error;
+        }
+        if (quote_char) {
+            /* We're inside a string. See if we're at the end. */
+            /* This code needs to implement the same non-error logic
+               as tok_get from tokenizer.c, at the letter_quote
+               label. To actually share that code would be a
+               nightmare. But, it's unlikely to change and is small,
+               so duplicate it here. Note we don't need to catch all
+               of the errors, since they'll be caught when parsing the
+               expression. We just need to match the non-error
+               cases. Thus we can ignore \n in single-quoted strings,
+               for example. Or non-terminated strings. */
+            if (ch == quote_char) {
+                /* Does this match the string_type (single or triple
+                   quoted)? */
+                if (string_type == 3) {
+                    if (*str+2 < end && *(*str+1) == ch && *(*str+2) == ch) {
+                        /* We're at the end of a triple quoted string. */
+                        *str += 2;
+                        string_type = 0;
+                        quote_char = 0;
+                        continue;
+                    }
+                } else {
+                    /* We're at the end of a normal string. */
+                    quote_char = 0;
+                    string_type = 0;
+                    continue;
+                }
+            }
+        } else if (ch == '\'' || ch == '"') {
+            /* Is this a triple quoted string? */
+            if (*str+2 < end && *(*str+1) == ch && *(*str+2) == ch) {
+                string_type = 3;
+                *str += 2;
+            } else {
+                /* Start of a normal string. */
+                string_type = 1;
+            }
+            /* Start looking for the end of the string. */
+            quote_char = ch;
+        } else if (ch == '[' || ch == '{' || ch == '(') {
+            if (nested_depth >= MAXLEVEL) {
+                RAISE_SYNTAX_ERROR("f-string: too many nested parenthesis");
+                goto error;
+            }
+            parenstack[nested_depth] = ch;
+            nested_depth++;
+        } else if (ch == '#') {
+            /* Error: can't include a comment character, inside parens
+               or not. */
+            RAISE_SYNTAX_ERROR("f-string expression part cannot include '#'");
+            goto error;
+        } else if (nested_depth == 0 &&
+                   (ch == '!' || ch == ':' || ch == '}' ||
+                    ch == '=' || ch == '>' || ch == '<')) {
+            /* See if there's a next character. */
+            if (*str+1 < end) {
+                char next = *(*str+1);
+
+                /* For "!=". since '=' is not an allowed conversion character,
+                   nothing is lost in this test. */
+                if ((ch == '!' && next == '=') ||   /* != */
+                    (ch == '=' && next == '=') ||   /* == */
+                    (ch == '<' && next == '=') ||   /* <= */
+                    (ch == '>' && next == '=')      /* >= */
+                    ) {
+                    *str += 1;
+                    continue;
+                }
+                /* Don't get out of the loop for these, if they're single
+                   chars (not part of 2-char tokens). If by themselves, they
+                   don't end an expression (unlike say '!'). */
+                if (ch == '>' || ch == '<') {
+                    continue;
+                }
+            }
+
+            /* Normal way out of this loop. */
+            break;
+        } else if (ch == ']' || ch == '}' || ch == ')') {
+            if (!nested_depth) {
+                RAISE_SYNTAX_ERROR("f-string: unmatched '%c'", ch);
+                goto error;
+            }
+            nested_depth--;
+            int opening = (unsigned char)parenstack[nested_depth];
+            if (!((opening == '(' && ch == ')') ||
+                  (opening == '[' && ch == ']') ||
+                  (opening == '{' && ch == '}')))
+            {
+                RAISE_SYNTAX_ERROR(
+                          "f-string: closing parenthesis '%c' "
+                          "does not match opening parenthesis '%c'",
+                          ch, opening);
+                goto error;
+            }
+        } else {
+            /* Just consume this char and loop around. */
+        }
+    }
+    expr_end = *str;
+    /* If we leave this loop in a string or with mismatched parens, we
+       don't care. We'll get a syntax error when compiling the
+       expression. But, we can produce a better error message, so
+       let's just do that.*/
+    if (quote_char) {
+        RAISE_SYNTAX_ERROR("f-string: unterminated string");
+        goto error;
+    }
+    if (nested_depth) {
+        int opening = (unsigned char)parenstack[nested_depth - 1];
+        RAISE_SYNTAX_ERROR("f-string: unmatched '%c'", opening);
+        goto error;
+    }
+
+    if (*str >= end) {
+        goto unexpected_end_of_string;
+    }
+
+    /* Compile the expression as soon as possible, so we show errors
+       related to the expression before errors related to the
+       conversion or format_spec. */
+    simple_expression = fstring_compile_expr(p, expr_start, expr_end, t);
+    if (!simple_expression) {
+        goto error;
+    }
+
+    /* Check for =, which puts the text value of the expression in
+       expr_text. */
+    if (**str == '=') {
+        if (p->feature_version < 8) {
+            RAISE_SYNTAX_ERROR("f-string: self documenting expressions are "
+                               "only supported in Python 3.8 and greater");
+            goto error;
+        }
+        *str += 1;
+
+        /* Skip over ASCII whitespace.  No need to test for end of string
+           here, since we know there's at least a trailing quote somewhere
+           ahead. */
+        while (Py_ISSPACE(**str)) {
+            *str += 1;
+        }
+
+        /* Set *expr_text to the text of the expression. */
+        *expr_text = PyUnicode_FromStringAndSize(expr_start, *str-expr_start);
+        if (!*expr_text) {
+            goto error;
+        }
+    }
+
+    /* Check for a conversion char, if present. */
+    if (**str == '!') {
+        *str += 1;
+        if (*str >= end) {
+            goto unexpected_end_of_string;
+        }
+
+        conversion = (unsigned char)**str;
+        *str += 1;
+
+        /* Validate the conversion. */
+        if (!(conversion == 's' || conversion == 'r' || conversion == 'a')) {
+            RAISE_SYNTAX_ERROR(
+                      "f-string: invalid conversion character: "
+                      "expected 's', 'r', or 'a'");
+            goto error;
+        }
+
+    }
+
+    /* Check for the format spec, if present. */
+    if (*str >= end) {
+        goto unexpected_end_of_string;
+    }
+    if (**str == ':') {
+        *str += 1;
+        if (*str >= end) {
+            goto unexpected_end_of_string;
+        }
+
+        /* Parse the format spec. */
+        format_spec = fstring_parse(p, str, end, raw, recurse_lvl+1,
+                                    first_token, t, last_token);
+        if (!format_spec) {
+            goto error;
+        }
+    }
+
+    if (*str >= end || **str != '}') {
+        goto unexpected_end_of_string;
+    }
+
+    /* We're at a right brace. Consume it. */
+    assert(*str < end);
+    assert(**str == '}');
+    *str += 1;
+
+    /* If we're in = mode (detected by non-NULL expr_text), and have no format
+       spec and no explicit conversion, set the conversion to 'r'. */
+    if (*expr_text && format_spec == NULL && conversion == -1) {
+        conversion = 'r';
+    }
+
+    /* And now create the FormattedValue node that represents this
+       entire expression with the conversion and format spec. */
+    //TODO: Fix this
+    *expression = FormattedValue(simple_expression, conversion,
+                                 format_spec, first_token->lineno,
+                                 first_token->col_offset, last_token->end_lineno,
+                                 last_token->end_col_offset, p->arena);
+    if (!*expression) {
+        goto error;
+    }
+
+    return 0;
+
+unexpected_end_of_string:
+    RAISE_SYNTAX_ERROR("f-string: expecting '}'");
+    /* Falls through to error. */
+
+error:
+    Py_XDECREF(*expr_text);
+    return -1;
+
+}
+
+/* Return -1 on error.
+
+   Return 0 if we have a literal (possible zero length) and an
+   expression (zero length if at the end of the string.
+
+   Return 1 if we have a literal, but no expression, and we want the
+   caller to call us again. This is used to deal with doubled
+   braces.
+
+   When called multiple times on the string 'a{{b{0}c', this function
+   will return:
+
+   1. the literal 'a{' with no expression, and a return value
+      of 1. Despite the fact that there's no expression, the return
+      value of 1 means we're not finished yet.
+
+   2. the literal 'b' and the expression '0', with a return value of
+      0. The fact that there's an expression means we're not finished.
+
+   3. literal 'c' with no expression and a return value of 0. The
+      combination of the return value of 0 with no expression means
+      we're finished.
+*/
+static int
+fstring_find_literal_and_expr(Parser *p, const char **str, const char *end, int raw,
+                              int recurse_lvl, PyObject **literal,
+                              PyObject **expr_text, expr_ty *expression,
+                              Token *first_token, Token *t, Token *last_token)
+{
+    int result;
+
+    assert(*literal == NULL && *expression == NULL);
+
+    /* Get any literal string. */
+    result = fstring_find_literal(p, str, end, raw, literal, recurse_lvl, t);
+    if (result < 0) {
+        goto error;
+    }
+
+    assert(result == 0 || result == 1);
+
+    if (result == 1) {
+        /* We have a literal, but don't look at the expression. */
+        return 1;
+    }
+
+    if (*str >= end || **str == '}') {
+        /* We're at the end of the string or the end of a nested
+           f-string: no expression. The top-level error case where we
+           expect to be at the end of the string but we're at a '}' is
+           handled later. */
+        return 0;
+    }
+
+    /* We must now be the start of an expression, on a '{'. */
+    assert(**str == '{');
+
+    if (fstring_find_expr(p, str, end, raw, recurse_lvl, expr_text,
+                          expression, first_token, t, last_token) < 0) {
+        goto error;
+    }
+
+    return 0;
+
+error:
+    Py_CLEAR(*literal);
+    return -1;
+}
+
+#ifdef NDEBUG
+#define ExprList_check_invariants(l)
+#else
+static void
+ExprList_check_invariants(ExprList *l)
+{
+    /* Check our invariants. Make sure this object is "live", and
+       hasn't been deallocated. */
+    assert(l->size >= 0);
+    assert(l->p != NULL);
+    if (l->size <= EXPRLIST_N_CACHED) {
+        assert(l->data == l->p);
+    }
+}
+#endif
+
+static void
+ExprList_Init(ExprList *l)
+{
+    l->allocated = EXPRLIST_N_CACHED;
+    l->size = 0;
+
+    /* Until we start allocating dynamically, p points to data. */
+    l->p = l->data;
+
+    ExprList_check_invariants(l);
+}
+
+static int
+ExprList_Append(ExprList *l, expr_ty exp)
+{
+    ExprList_check_invariants(l);
+    if (l->size >= l->allocated) {
+        /* We need to alloc (or realloc) the memory. */
+        Py_ssize_t new_size = l->allocated * 2;
+
+        /* See if we've ever allocated anything dynamically. */
+        if (l->p == l->data) {
+            Py_ssize_t i;
+            /* We're still using the cached data. Switch to
+               alloc-ing. */
+            l->p = PyMem_Malloc(sizeof(expr_ty) * new_size);
+            if (!l->p) {
+                return -1;
+            }
+            /* Copy the cached data into the new buffer. */
+            for (i = 0; i < l->size; i++) {
+                l->p[i] = l->data[i];
+            }
+        } else {
+            /* Just realloc. */
+            expr_ty *tmp = PyMem_Realloc(l->p, sizeof(expr_ty) * new_size);
+            if (!tmp) {
+                PyMem_Free(l->p);
+                l->p = NULL;
+                return -1;
+            }
+            l->p = tmp;
+        }
+
+        l->allocated = new_size;
+        assert(l->allocated == 2 * l->size);
+    }
+
+    l->p[l->size++] = exp;
+
+    ExprList_check_invariants(l);
+    return 0;
+}
+
+static void
+ExprList_Dealloc(ExprList *l)
+{
+    ExprList_check_invariants(l);
+
+    /* If there's been an error, or we've never dynamically allocated,
+       do nothing. */
+    if (!l->p || l->p == l->data) {
+        /* Do nothing. */
+    } else {
+        /* We have dynamically allocated. Free the memory. */
+        PyMem_Free(l->p);
+    }
+    l->p = NULL;
+    l->size = -1;
+}
+
+static asdl_seq *
+ExprList_Finish(ExprList *l, PyArena *arena)
+{
+    asdl_seq *seq;
+
+    ExprList_check_invariants(l);
+
+    /* Allocate the asdl_seq and copy the expressions in to it. */
+    seq = _Py_asdl_seq_new(l->size, arena);
+    if (seq) {
+        Py_ssize_t i;
+        for (i = 0; i < l->size; i++) {
+            asdl_seq_SET(seq, i, l->p[i]);
+        }
+    }
+    ExprList_Dealloc(l);
+    return seq;
+}
+
+#ifdef NDEBUG
+#define FstringParser_check_invariants(state)
+#else
+static void
+FstringParser_check_invariants(FstringParser *state)
+{
+    if (state->last_str) {
+        assert(PyUnicode_CheckExact(state->last_str));
+    }
+    ExprList_check_invariants(&state->expr_list);
+}
+#endif
+
+void
+_PyPegen_FstringParser_Init(FstringParser *state)
+{
+    state->last_str = NULL;
+    state->fmode = 0;
+    ExprList_Init(&state->expr_list);
+    FstringParser_check_invariants(state);
+}
+
+void
+_PyPegen_FstringParser_Dealloc(FstringParser *state)
+{
+    FstringParser_check_invariants(state);
+
+    Py_XDECREF(state->last_str);
+    ExprList_Dealloc(&state->expr_list);
+}
+
+/* Make a Constant node, but decref the PyUnicode object being added. */
+static expr_ty
+make_str_node_and_del(Parser *p, PyObject **str, Token* first_token, Token *last_token)
+{
+    PyObject *s = *str;
+    PyObject *kind = NULL;
+    *str = NULL;
+    assert(PyUnicode_CheckExact(s));
+    if (PyArena_AddPyObject(p->arena, s) < 0) {
+        Py_DECREF(s);
+        return NULL;
+    }
+    const char* the_str = PyBytes_AsString(first_token->bytes);
+    if (the_str && the_str[0] == 'u') {
+        kind = _PyPegen_new_identifier(p, "u");
+    }
+
+    if (kind == NULL && PyErr_Occurred()) {
+        return NULL;
+    }
+
+    return Constant(s, kind, first_token->lineno, first_token->col_offset,
+                    last_token->end_lineno, last_token->end_col_offset, p->arena);
+
+}
+
+
+/* Add a non-f-string (that is, a regular literal string). str is
+   decref'd. */
+int
+_PyPegen_FstringParser_ConcatAndDel(FstringParser *state, PyObject *str)
+{
+    FstringParser_check_invariants(state);
+
+    assert(PyUnicode_CheckExact(str));
+
+    if (PyUnicode_GET_LENGTH(str) == 0) {
+        Py_DECREF(str);
+        return 0;
+    }
+
+    if (!state->last_str) {
+        /* We didn't have a string before, so just remember this one. */
+        state->last_str = str;
+    } else {
+        /* Concatenate this with the previous string. */
+        PyUnicode_AppendAndDel(&state->last_str, str);
+        if (!state->last_str) {
+            return -1;
+        }
+    }
+    FstringParser_check_invariants(state);
+    return 0;
+}
+
+/* Parse an f-string. The f-string is in *str to end, with no
+   'f' or quotes. */
+int
+_PyPegen_FstringParser_ConcatFstring(Parser *p, FstringParser *state, const char **str,
+                            const char *end, int raw, int recurse_lvl,
+                            Token *first_token, Token* t, Token *last_token)
+{
+    FstringParser_check_invariants(state);
+    state->fmode = 1;
+
+    /* Parse the f-string. */
+    while (1) {
+        PyObject *literal = NULL;
+        PyObject *expr_text = NULL;
+        expr_ty expression = NULL;
+
+        /* If there's a zero length literal in front of the
+           expression, literal will be NULL. If we're at the end of
+           the f-string, expression will be NULL (unless result == 1,
+           see below). */
+        int result = fstring_find_literal_and_expr(p, str, end, raw, recurse_lvl,
+                                                   &literal, &expr_text,
+                                                   &expression, first_token, t, last_token);
+        if (result < 0) {
+            return -1;
+        }
+
+        /* Add the literal, if any. */
+        if (literal && _PyPegen_FstringParser_ConcatAndDel(state, literal) < 0) {
+            Py_XDECREF(expr_text);
+            return -1;
+        }
+        /* Add the expr_text, if any. */
+        if (expr_text && _PyPegen_FstringParser_ConcatAndDel(state, expr_text) < 0) {
+            return -1;
+        }
+
+        /* We've dealt with the literal and expr_text, their ownership has
+           been transferred to the state object.  Don't look at them again. */
+
+        /* See if we should just loop around to get the next literal
+           and expression, while ignoring the expression this
+           time. This is used for un-doubling braces, as an
+           optimization. */
+        if (result == 1) {
+            continue;
+        }
+
+        if (!expression) {
+            /* We're done with this f-string. */
+            break;
+        }
+
+        /* We know we have an expression. Convert any existing string
+           to a Constant node. */
+        if (!state->last_str) {
+            /* Do nothing. No previous literal. */
+        } else {
+            /* Convert the existing last_str literal to a Constant node. */
+            expr_ty last_str = make_str_node_and_del(p, &state->last_str, first_token, last_token);
+            if (!last_str || ExprList_Append(&state->expr_list, last_str) < 0) {
+                return -1;
+            }
+        }
+
+        if (ExprList_Append(&state->expr_list, expression) < 0) {
+            return -1;
+        }
+    }
+
+    /* If recurse_lvl is zero, then we must be at the end of the
+       string. Otherwise, we must be at a right brace. */
+
+    if (recurse_lvl == 0 && *str < end-1) {
+        RAISE_SYNTAX_ERROR("f-string: unexpected end of string");
+        return -1;
+    }
+    if (recurse_lvl != 0 && **str != '}') {
+        RAISE_SYNTAX_ERROR("f-string: expecting '}'");
+        return -1;
+    }
+
+    FstringParser_check_invariants(state);
+    return 0;
+}
+
+/* Convert the partial state reflected in last_str and expr_list to an
+   expr_ty. The expr_ty can be a Constant, or a JoinedStr. */
+expr_ty
+_PyPegen_FstringParser_Finish(Parser *p, FstringParser *state, Token* first_token,
+                     Token *last_token)
+{
+    asdl_seq *seq;
+
+    FstringParser_check_invariants(state);
+
+    /* If we're just a constant string with no expressions, return
+       that. */
+    if (!state->fmode) {
+        assert(!state->expr_list.size);
+        if (!state->last_str) {
+            /* Create a zero length string. */
+            state->last_str = PyUnicode_FromStringAndSize(NULL, 0);
+            if (!state->last_str) {
+                goto error;
+            }
+        }
+        return make_str_node_and_del(p, &state->last_str, first_token, last_token);
+    }
+
+    /* Create a Constant node out of last_str, if needed. It will be the
+       last node in our expression list. */
+    if (state->last_str) {
+        expr_ty str = make_str_node_and_del(p, &state->last_str, first_token, last_token);
+        if (!str || ExprList_Append(&state->expr_list, str) < 0) {
+            goto error;
+        }
+    }
+    /* This has already been freed. */
+    assert(state->last_str == NULL);
+
+    seq = ExprList_Finish(&state->expr_list, p->arena);
+    if (!seq) {
+        goto error;
+    }
+
+    return _Py_JoinedStr(seq, first_token->lineno, first_token->col_offset,
+                         last_token->end_lineno, last_token->end_col_offset, p->arena);
+
+error:
+    _PyPegen_FstringParser_Dealloc(state);
+    return NULL;
+}
+
+/* Given an f-string (with no 'f' or quotes) that's in *str and ends
+   at end, parse it into an expr_ty.  Return NULL on error.  Adjust
+   str to point past the parsed portion. */
+static expr_ty
+fstring_parse(Parser *p, const char **str, const char *end, int raw,
+              int recurse_lvl, Token *first_token, Token* t, Token *last_token)
+{
+    FstringParser state;
+
+    _PyPegen_FstringParser_Init(&state);
+    if (_PyPegen_FstringParser_ConcatFstring(p, &state, str, end, raw, recurse_lvl,
+                                    first_token, t, last_token) < 0) {
+        _PyPegen_FstringParser_Dealloc(&state);
+        return NULL;
+    }
+
+    return _PyPegen_FstringParser_Finish(p, &state, t, t);
+}
diff --git a/Parser/pegen/parse_string.h b/Parser/pegen/parse_string.h
new file mode 100644
index 0000000..cd85bd5
--- /dev/null
+++ b/Parser/pegen/parse_string.h
@@ -0,0 +1,46 @@
+#ifndef STRINGS_H
+#define STRINGS_H
+
+#include <Python.h>
+#include <Python-ast.h>
+#include "pegen.h"
+
+#define EXPRLIST_N_CACHED  64
+
+typedef struct {
+    /* Incrementally build an array of expr_ty, so be used in an
+       asdl_seq. Cache some small but reasonably sized number of
+       expr_ty's, and then after that start dynamically allocating,
+       doubling the number allocated each time. Note that the f-string
+       f'{0}a{1}' contains 3 expr_ty's: 2 FormattedValue's, and one
+       Constant for the literal 'a'. So you add expr_ty's about twice as
+       fast as you add expressions in an f-string. */
+
+    Py_ssize_t allocated;  /* Number we've allocated. */
+    Py_ssize_t size;       /* Number we've used. */
+    expr_ty    *p;         /* Pointer to the memory we're actually
+                              using. Will point to 'data' until we
+                              start dynamically allocating. */
+    expr_ty    data[EXPRLIST_N_CACHED];
+} ExprList;
+
+/* The FstringParser is designed to add a mix of strings and
+   f-strings, and concat them together as needed. Ultimately, it
+   generates an expr_ty. */
+typedef struct {
+    PyObject *last_str;
+    ExprList expr_list;
+    int fmode;
+} FstringParser;
+
+void _PyPegen_FstringParser_Init(FstringParser *);
+int _PyPegen_parsestr(Parser *, int *, int *, PyObject **,
+                      const char **, Py_ssize_t *, Token *);
+int _PyPegen_FstringParser_ConcatFstring(Parser *, FstringParser *, const char **,
+                                const char *, int, int, Token *, Token *,
+                                Token *);
+int _PyPegen_FstringParser_ConcatAndDel(FstringParser *, PyObject *);
+expr_ty _PyPegen_FstringParser_Finish(Parser *, FstringParser *, Token *, Token *);
+void _PyPegen_FstringParser_Dealloc(FstringParser *);
+
+#endif
diff --git a/Parser/pegen/peg_api.c b/Parser/pegen/peg_api.c
new file mode 100644
index 0000000..5e71ecd
--- /dev/null
+++ b/Parser/pegen/peg_api.c
@@ -0,0 +1,54 @@
+#include "pegen_interface.h"
+
+#include "../tokenizer.h"
+#include "pegen.h"
+
+mod_ty
+PyPegen_ASTFromString(const char *str, const char *filename, int mode,
+                      PyCompilerFlags *flags, PyArena *arena)
+{
+    PyObject *filename_ob = PyUnicode_FromString(filename);
+    if (filename_ob == NULL) {
+        return NULL;
+    }
+    mod_ty result = PyPegen_ASTFromStringObject(str, filename_ob, mode, flags, arena);
+    Py_XDECREF(filename_ob);
+    return result;
+}
+
+mod_ty
+PyPegen_ASTFromStringObject(const char *str, PyObject* filename, int mode,
+                            PyCompilerFlags *flags, PyArena *arena)
+{
+    if (PySys_Audit("compile", "yO", str, filename) < 0) {
+        return NULL;
+    }
+
+    mod_ty result = _PyPegen_run_parser_from_string(str, mode, filename, flags, arena);
+    return result;
+}
+
+mod_ty
+PyPegen_ASTFromFilename(const char *filename, int mode, PyCompilerFlags *flags, PyArena *arena)
+{
+    PyObject *filename_ob = PyUnicode_FromString(filename);
+    if (filename_ob == NULL) {
+        return NULL;
+    }
+
+    mod_ty result = _PyPegen_run_parser_from_file(filename, mode, filename_ob, flags, arena);
+    Py_XDECREF(filename_ob);
+    return result;
+}
+
+mod_ty
+PyPegen_ASTFromFileObject(FILE *fp, PyObject *filename_ob, int mode,
+                          const char *enc, const char *ps1, const char* ps2,
+                          PyCompilerFlags *flags, int *errcode, PyArena *arena)
+{
+    if (PySys_Audit("compile", "OO", Py_None, filename_ob) < 0) {
+        return NULL;
+    }
+    return _PyPegen_run_parser_from_file_pointer(fp, mode, filename_ob, enc, ps1, ps2,
+                                        flags, errcode, arena);
+}
diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c
new file mode 100644
index 0000000..4e742a5
--- /dev/null
+++ b/Parser/pegen/pegen.c
@@ -0,0 +1,2267 @@
+#include <Python.h>
+#include <errcode.h>
+#include "../tokenizer.h"
+
+#include "pegen.h"
+#include "parse_string.h"
+#include "ast.h"
+
+PyObject *
+_PyPegen_new_type_comment(Parser *p, char *s)
+{
+    PyObject *res = PyUnicode_DecodeUTF8(s, strlen(s), NULL);
+    if (res == NULL) {
+        return NULL;
+    }
+    if (PyArena_AddPyObject(p->arena, res) < 0) {
+        Py_DECREF(res);
+        return NULL;
+    }
+    return res;
+}
+
+arg_ty
+_PyPegen_add_type_comment_to_arg(Parser *p, arg_ty a, Token *tc)
+{
+    if (tc == NULL) {
+        return a;
+    }
+    char *bytes = PyBytes_AsString(tc->bytes);
+    if (bytes == NULL) {
+        return NULL;
+    }
+    PyObject *tco = _PyPegen_new_type_comment(p, bytes);
+    if (tco == NULL) {
+        return NULL;
+    }
+    return arg(a->arg, a->annotation, tco,
+               a->lineno, a->col_offset, a->end_lineno, a->end_col_offset,
+               p->arena);
+}
+
+static int
+init_normalization(Parser *p)
+{
+    if (p->normalize) {
+        return 1;
+    }
+    PyObject *m = PyImport_ImportModuleNoBlock("unicodedata");
+    if (!m)
+    {
+        return 0;
+    }
+    p->normalize = PyObject_GetAttrString(m, "normalize");
+    Py_DECREF(m);
+    if (!p->normalize)
+    {
+        return 0;
+    }
+    return 1;
+}
+
+/* Checks if the NOTEQUAL token is valid given the current parser flags
+0 indicates success and nonzero indicates failure (an exception may be set) */
+int
+_PyPegen_check_barry_as_flufl(Parser *p, Token* t) {
+    assert(t->bytes != NULL);
+    assert(t->type == NOTEQUAL);
+
+    char* tok_str = PyBytes_AS_STRING(t->bytes);
+    if (p->flags & PyPARSE_BARRY_AS_BDFL && strcmp(tok_str, "<>") != 0) {
+        RAISE_SYNTAX_ERROR("with Barry as BDFL, use '<>' instead of '!='");
+        return -1;
+    }
+    if (!(p->flags & PyPARSE_BARRY_AS_BDFL)) {
+        return strcmp(tok_str, "!=");
+    }
+    return 0;
+}
+
+PyObject *
+_PyPegen_new_identifier(Parser *p, char *n)
+{
+    PyObject *id = PyUnicode_DecodeUTF8(n, strlen(n), NULL);
+    if (!id) {
+        goto error;
+    }
+    /* PyUnicode_DecodeUTF8 should always return a ready string. */
+    assert(PyUnicode_IS_READY(id));
+    /* Check whether there are non-ASCII characters in the
+       identifier; if so, normalize to NFKC. */
+    if (!PyUnicode_IS_ASCII(id))
+    {
+        PyObject *id2;
+        if (!init_normalization(p))
+        {
+            Py_DECREF(id);
+            goto error;
+        }
+        PyObject *form = PyUnicode_InternFromString("NFKC");
+        if (form == NULL)
+        {
+            Py_DECREF(id);
+            goto error;
+        }
+        PyObject *args[2] = {form, id};
+        id2 = _PyObject_FastCall(p->normalize, args, 2);
+        Py_DECREF(id);
+        Py_DECREF(form);
+        if (!id2) {
+            goto error;
+        }
+        if (!PyUnicode_Check(id2))
+        {
+            PyErr_Format(PyExc_TypeError,
+                         "unicodedata.normalize() must return a string, not "
+                         "%.200s",
+                         _PyType_Name(Py_TYPE(id2)));
+            Py_DECREF(id2);
+            goto error;
+        }
+        id = id2;
+    }
+    PyUnicode_InternInPlace(&id);
+    if (PyArena_AddPyObject(p->arena, id) < 0)
+    {
+        Py_DECREF(id);
+        goto error;
+    }
+    return id;
+
+error:
+    p->error_indicator = 1;
+    return NULL;
+}
+
+static PyObject *
+_create_dummy_identifier(Parser *p)
+{
+    return _PyPegen_new_identifier(p, "");
+}
+
+static inline Py_ssize_t
+byte_offset_to_character_offset(PyObject *line, Py_ssize_t col_offset)
+{
+    const char *str = PyUnicode_AsUTF8(line);
+    if (!str) {
+        return 0;
+    }
+    assert(col_offset >= 0 && (unsigned long)col_offset <= strlen(str));
+    PyObject *text = PyUnicode_DecodeUTF8(str, col_offset, "replace");
+    if (!text) {
+        return 0;
+    }
+    Py_ssize_t size = PyUnicode_GET_LENGTH(text);
+    Py_DECREF(text);
+    return size;
+}
+
+const char *
+_PyPegen_get_expr_name(expr_ty e)
+{
+    assert(e != NULL);
+    switch (e->kind) {
+        case Attribute_kind:
+            return "attribute";
+        case Subscript_kind:
+            return "subscript";
+        case Starred_kind:
+            return "starred";
+        case Name_kind:
+            return "name";
+        case List_kind:
+            return "list";
+        case Tuple_kind:
+            return "tuple";
+        case Lambda_kind:
+            return "lambda";
+        case Call_kind:
+            return "function call";
+        case BoolOp_kind:
+        case BinOp_kind:
+        case UnaryOp_kind:
+            return "operator";
+        case GeneratorExp_kind:
+            return "generator expression";
+        case Yield_kind:
+        case YieldFrom_kind:
+            return "yield expression";
+        case Await_kind:
+            return "await expression";
+        case ListComp_kind:
+            return "list comprehension";
+        case SetComp_kind:
+            return "set comprehension";
+        case DictComp_kind:
+            return "dict comprehension";
+        case Dict_kind:
+            return "dict display";
+        case Set_kind:
+            return "set display";
+        case JoinedStr_kind:
+        case FormattedValue_kind:
+            return "f-string expression";
+        case Constant_kind: {
+            PyObject *value = e->v.Constant.value;
+            if (value == Py_None) {
+                return "None";
+            }
+            if (value == Py_False) {
+                return "False";
+            }
+            if (value == Py_True) {
+                return "True";
+            }
+            if (value == Py_Ellipsis) {
+                return "Ellipsis";
+            }
+            return "literal";
+        }
+        case Compare_kind:
+            return "comparison";
+        case IfExp_kind:
+            return "conditional expression";
+        case NamedExpr_kind:
+            return "named expression";
+        default:
+            PyErr_Format(PyExc_SystemError,
+                         "unexpected expression in assignment %d (line %d)",
+                         e->kind, e->lineno);
+            return NULL;
+    }
+}
+
+static int
+raise_decode_error(Parser *p)
+{
+    assert(PyErr_Occurred());
+    const char *errtype = NULL;
+    if (PyErr_ExceptionMatches(PyExc_UnicodeError)) {
+        errtype = "unicode error";
+    }
+    else if (PyErr_ExceptionMatches(PyExc_ValueError)) {
+        errtype = "value error";
+    }
+    if (errtype) {
+        PyObject *type;
+        PyObject *value;
+        PyObject *tback;
+        PyObject *errstr;
+        PyErr_Fetch(&type, &value, &tback);
+        errstr = PyObject_Str(value);
+        if (errstr) {
+            RAISE_SYNTAX_ERROR("(%s) %U", errtype, errstr);
+            Py_DECREF(errstr);
+        }
+        else {
+            PyErr_Clear();
+            RAISE_SYNTAX_ERROR("(%s) unknown error", errtype);
+        }
+        Py_XDECREF(type);
+        Py_XDECREF(value);
+        Py_XDECREF(tback);
+    }
+
+    return -1;
+}
+
+static void
+raise_tokenizer_init_error(PyObject *filename)
+{
+    if (!(PyErr_ExceptionMatches(PyExc_LookupError)
+          || PyErr_ExceptionMatches(PyExc_ValueError)
+          || PyErr_ExceptionMatches(PyExc_UnicodeDecodeError))) {
+        return;
+    }
+    PyObject *errstr = NULL;
+    PyObject *tuple = NULL;
+    PyObject *type;
+    PyObject *value;
+    PyObject *tback;
+    PyErr_Fetch(&type, &value, &tback);
+    errstr = PyObject_Str(value);
+    if (!errstr) {
+        goto error;
+    }
+
+    PyObject *tmp = Py_BuildValue("(OiiO)", filename, 0, -1, Py_None);
+    if (!tmp) {
+        goto error;
+    }
+
+    tuple = PyTuple_Pack(2, errstr, tmp);
+    Py_DECREF(tmp);
+    if (!value) {
+        goto error;
+    }
+    PyErr_SetObject(PyExc_SyntaxError, tuple);
+
+error:
+    Py_XDECREF(type);
+    Py_XDECREF(value);
+    Py_XDECREF(tback);
+    Py_XDECREF(errstr);
+    Py_XDECREF(tuple);
+}
+
+static int
+tokenizer_error(Parser *p)
+{
+    if (PyErr_Occurred()) {
+        return -1;
+    }
+
+    const char *msg = NULL;
+    PyObject* errtype = PyExc_SyntaxError;
+    switch (p->tok->done) {
+        case E_TOKEN:
+            msg = "invalid token";
+            break;
+        case E_EOFS:
+            RAISE_SYNTAX_ERROR("EOF while scanning triple-quoted string literal");
+            return -1;
+        case E_EOLS:
+            RAISE_SYNTAX_ERROR("EOL while scanning string literal");
+            return -1;
+        case E_EOF:
+            RAISE_SYNTAX_ERROR("unexpected EOF while parsing");
+            return -1;
+        case E_DEDENT:
+            RAISE_INDENTATION_ERROR("unindent does not match any outer indentation level");
+            return -1;
+        case E_INTR:
+            if (!PyErr_Occurred()) {
+                PyErr_SetNone(PyExc_KeyboardInterrupt);
+            }
+            return -1;
+        case E_NOMEM:
+            PyErr_NoMemory();
+            return -1;
+        case E_TABSPACE:
+            errtype = PyExc_TabError;
+            msg = "inconsistent use of tabs and spaces in indentation";
+            break;
+        case E_TOODEEP:
+            errtype = PyExc_IndentationError;
+            msg = "too many levels of indentation";
+            break;
+        case E_LINECONT:
+            msg = "unexpected character after line continuation character";
+            break;
+        default:
+            msg = "unknown parsing error";
+    }
+
+    PyErr_Format(errtype, msg);
+    // There is no reliable column information for this error
+    PyErr_SyntaxLocationObject(p->tok->filename, p->tok->lineno, 0);
+
+    return -1;
+}
+
+void *
+_PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...)
+{
+    Token *t = p->known_err_token != NULL ? p->known_err_token : p->tokens[p->fill - 1];
+    Py_ssize_t col_offset;
+    if (t->col_offset == -1) {
+        col_offset = Py_SAFE_DOWNCAST(p->tok->cur - p->tok->buf,
+                                      intptr_t, int);
+    } else {
+        col_offset = t->col_offset + 1;
+    }
+
+    va_list va;
+    va_start(va, errmsg);
+    _PyPegen_raise_error_known_location(p, errtype, t->lineno,
+                                        col_offset, errmsg, va);
+    va_end(va);
+
+    return NULL;
+}
+
+void *
+_PyPegen_raise_error_known_location(Parser *p, PyObject *errtype,
+                                    Py_ssize_t lineno, Py_ssize_t col_offset,
+                                    const char *errmsg, va_list va)
+{
+    PyObject *value = NULL;
+    PyObject *errstr = NULL;
+    PyObject *error_line = NULL;
+    PyObject *tmp = NULL;
+    p->error_indicator = 1;
+
+    if (p->start_rule == Py_fstring_input) {
+        const char *fstring_msg = "f-string: ";
+        Py_ssize_t len = strlen(fstring_msg) + strlen(errmsg);
+
+        char *new_errmsg = PyMem_RawMalloc(len + 1); // Lengths of both strings plus NULL character
+        if (!new_errmsg) {
+            return (void *) PyErr_NoMemory();
+        }
+
+        // Copy both strings into new buffer
+        memcpy(new_errmsg, fstring_msg, strlen(fstring_msg));
+        memcpy(new_errmsg + strlen(fstring_msg), errmsg, strlen(errmsg));
+        new_errmsg[len] = 0;
+        errmsg = new_errmsg;
+    }
+    errstr = PyUnicode_FromFormatV(errmsg, va);
+    if (!errstr) {
+        goto error;
+    }
+
+    if (p->start_rule == Py_file_input) {
+        error_line = PyErr_ProgramTextObject(p->tok->filename, (int) lineno);
+    }
+
+    if (!error_line) {
+        Py_ssize_t size = p->tok->inp - p->tok->buf;
+        error_line = PyUnicode_DecodeUTF8(p->tok->buf, size, "replace");
+        if (!error_line) {
+            goto error;
+        }
+    }
+
+    if (p->start_rule == Py_fstring_input) {
+        col_offset -= p->starting_col_offset;
+    }
+    Py_ssize_t col_number = col_offset;
+
+    if (p->tok->encoding != NULL) {
+        col_number = byte_offset_to_character_offset(error_line, col_offset);
+    }
+
+    tmp = Py_BuildValue("(OiiN)", p->tok->filename, lineno, col_number, error_line);
+    if (!tmp) {
+        goto error;
+    }
+    value = PyTuple_Pack(2, errstr, tmp);
+    Py_DECREF(tmp);
+    if (!value) {
+        goto error;
+    }
+    PyErr_SetObject(errtype, value);
+
+    Py_DECREF(errstr);
+    Py_DECREF(value);
+    if (p->start_rule == Py_fstring_input) {
+        PyMem_RawFree((void *)errmsg);
+    }
+    return NULL;
+
+error:
+    Py_XDECREF(errstr);
+    Py_XDECREF(error_line);
+    if (p->start_rule == Py_fstring_input) {
+        PyMem_RawFree((void *)errmsg);
+    }
+    return NULL;
+}
+
+#if 0
+static const char *
+token_name(int type)
+{
+    if (0 <= type && type <= N_TOKENS) {
+        return _PyParser_TokenNames[type];
+    }
+    return "<Huh?>";
+}
+#endif
+
+// Here, mark is the start of the node, while p->mark is the end.
+// If node==NULL, they should be the same.
+int
+_PyPegen_insert_memo(Parser *p, int mark, int type, void *node)
+{
+    // Insert in front
+    Memo *m = PyArena_Malloc(p->arena, sizeof(Memo));
+    if (m == NULL) {
+        return -1;
+    }
+    m->type = type;
+    m->node = node;
+    m->mark = p->mark;
+    m->next = p->tokens[mark]->memo;
+    p->tokens[mark]->memo = m;
+    return 0;
+}
+
+// Like _PyPegen_insert_memo(), but updates an existing node if found.
+int
+_PyPegen_update_memo(Parser *p, int mark, int type, void *node)
+{
+    for (Memo *m = p->tokens[mark]->memo; m != NULL; m = m->next) {
+        if (m->type == type) {
+            // Update existing node.
+            m->node = node;
+            m->mark = p->mark;
+            return 0;
+        }
+    }
+    // Insert new node.
+    return _PyPegen_insert_memo(p, mark, type, node);
+}
+
+// Return dummy NAME.
+void *
+_PyPegen_dummy_name(Parser *p, ...)
+{
+    static void *cache = NULL;
+
+    if (cache != NULL) {
+        return cache;
+    }
+
+    PyObject *id = _create_dummy_identifier(p);
+    if (!id) {
+        return NULL;
+    }
+    cache = Name(id, Load, 1, 0, 1, 0, p->arena);
+    return cache;
+}
+
+static int
+_get_keyword_or_name_type(Parser *p, const char *name, int name_len)
+{
+    assert(name_len > 0);
+    if (name_len >= p->n_keyword_lists ||
+        p->keywords[name_len] == NULL ||
+        p->keywords[name_len]->type == -1) {
+        return NAME;
+    }
+    for (KeywordToken *k = p->keywords[name_len]; k != NULL && k->type != -1; k++) {
+        if (strncmp(k->str, name, name_len) == 0) {
+            return k->type;
+        }
+    }
+    return NAME;
+}
+
+static int
+growable_comment_array_init(growable_comment_array *arr, size_t initial_size) {
+    assert(initial_size > 0);
+    arr->items = PyMem_Malloc(initial_size * sizeof(*arr->items));
+    arr->size = initial_size;
+    arr->num_items = 0;
+
+    return arr->items != NULL;
+}
+
+static int
+growable_comment_array_add(growable_comment_array *arr, int lineno, char *comment) {
+    if (arr->num_items >= arr->size) {
+        size_t new_size = arr->size * 2;
+        void *new_items_array = PyMem_Realloc(arr->items, new_size * sizeof(*arr->items));
+        if (!new_items_array) {
+            return 0;
+        }
+        arr->items = new_items_array;
+        arr->size = new_size;
+    }
+
+    arr->items[arr->num_items].lineno = lineno;
+    arr->items[arr->num_items].comment = comment;  // Take ownership
+    arr->num_items++;
+    return 1;
+}
+
+static void
+growable_comment_array_deallocate(growable_comment_array *arr) {
+    for (unsigned i = 0; i < arr->num_items; i++) {
+        PyMem_Free(arr->items[i].comment);
+    }
+    PyMem_Free(arr->items);
+}
+
+int
+_PyPegen_fill_token(Parser *p)
+{
+    const char *start;
+    const char *end;
+    int type = PyTokenizer_Get(p->tok, &start, &end);
+
+    // Record and skip '# type: ignore' comments
+    while (type == TYPE_IGNORE) {
+        Py_ssize_t len = end - start;
+        char *tag = PyMem_Malloc(len + 1);
+        if (tag == NULL) {
+            PyErr_NoMemory();
+            return -1;
+        }
+        strncpy(tag, start, len);
+        tag[len] = '\0';
+        // Ownership of tag passes to the growable array
+        if (!growable_comment_array_add(&p->type_ignore_comments, p->tok->lineno, tag)) {
+            PyErr_NoMemory();
+            return -1;
+        }
+        type = PyTokenizer_Get(p->tok, &start, &end);
+    }
+
+    if (type == ENDMARKER && p->start_rule == Py_single_input && p->parsing_started) {
+        type = NEWLINE; /* Add an extra newline */
+        p->parsing_started = 0;
+
+        if (p->tok->indent && !(p->flags & PyPARSE_DONT_IMPLY_DEDENT)) {
+            p->tok->pendin = -p->tok->indent;
+            p->tok->indent = 0;
+        }
+    }
+    else {
+        p->parsing_started = 1;
+    }
+
+    if (p->fill == p->size) {
+        int newsize = p->size * 2;
+        Token **new_tokens = PyMem_Realloc(p->tokens, newsize * sizeof(Token *));
+        if (new_tokens == NULL) {
+            PyErr_NoMemory();
+            return -1;
+        }
+        p->tokens = new_tokens;
+
+        for (int i = p->size; i < newsize; i++) {
+            p->tokens[i] = PyMem_Malloc(sizeof(Token));
+            if (p->tokens[i] == NULL) {
+                p->size = i; // Needed, in order to cleanup correctly after parser fails
+                PyErr_NoMemory();
+                return -1;
+            }
+            memset(p->tokens[i], '\0', sizeof(Token));
+        }
+        p->size = newsize;
+    }
+
+    Token *t = p->tokens[p->fill];
+    t->type = (type == NAME) ? _get_keyword_or_name_type(p, start, (int)(end - start)) : type;
+    t->bytes = PyBytes_FromStringAndSize(start, end - start);
+    if (t->bytes == NULL) {
+        return -1;
+    }
+    PyArena_AddPyObject(p->arena, t->bytes);
+
+    int lineno = type == STRING ? p->tok->first_lineno : p->tok->lineno;
+    const char *line_start = type == STRING ? p->tok->multi_line_start : p->tok->line_start;
+    int end_lineno = p->tok->lineno;
+    int col_offset = -1;
+    int end_col_offset = -1;
+    if (start != NULL && start >= line_start) {
+        col_offset = (int)(start - line_start);
+    }
+    if (end != NULL && end >= p->tok->line_start) {
+        end_col_offset = (int)(end - p->tok->line_start);
+    }
+
+    t->lineno = p->starting_lineno + lineno;
+    t->col_offset = p->tok->lineno == 1 ? p->starting_col_offset + col_offset : col_offset;
+    t->end_lineno = p->starting_lineno + end_lineno;
+    t->end_col_offset = p->tok->lineno == 1 ? p->starting_col_offset + end_col_offset : end_col_offset;
+
+    p->fill += 1;
+
+    if (type == ERRORTOKEN) {
+        if (p->tok->done == E_DECODE) {
+            return raise_decode_error(p);
+        }
+        return tokenizer_error(p);
+
+    }
+
+    return 0;
+}
+
+// Instrumentation to count the effectiveness of memoization.
+// The array counts the number of tokens skipped by memoization,
+// indexed by type.
+
+#define NSTATISTICS 2000
+static long memo_statistics[NSTATISTICS];
+
+void
+_PyPegen_clear_memo_statistics()
+{
+    for (int i = 0; i < NSTATISTICS; i++) {
+        memo_statistics[i] = 0;
+    }
+}
+
+PyObject *
+_PyPegen_get_memo_statistics()
+{
+    PyObject *ret = PyList_New(NSTATISTICS);
+    if (ret == NULL) {
+        return NULL;
+    }
+    for (int i = 0; i < NSTATISTICS; i++) {
+        PyObject *value = PyLong_FromLong(memo_statistics[i]);
+        if (value == NULL) {
+            Py_DECREF(ret);
+            return NULL;
+        }
+        // PyList_SetItem borrows a reference to value.
+        if (PyList_SetItem(ret, i, value) < 0) {
+            Py_DECREF(ret);
+            return NULL;
+        }
+    }
+    return ret;
+}
+
+int  // bool
+_PyPegen_is_memoized(Parser *p, int type, void *pres)
+{
+    if (p->mark == p->fill) {
+        if (_PyPegen_fill_token(p) < 0) {
+            p->error_indicator = 1;
+            return -1;
+        }
+    }
+
+    Token *t = p->tokens[p->mark];
+
+    for (Memo *m = t->memo; m != NULL; m = m->next) {
+        if (m->type == type) {
+            if (0 <= type && type < NSTATISTICS) {
+                long count = m->mark - p->mark;
+                // A memoized negative result counts for one.
+                if (count <= 0) {
+                    count = 1;
+                }
+                memo_statistics[type] += count;
+            }
+            p->mark = m->mark;
+            *(void **)(pres) = m->node;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+int
+_PyPegen_lookahead_with_name(int positive, expr_ty (func)(Parser *), Parser *p)
+{
+    int mark = p->mark;
+    void *res = func(p);
+    p->mark = mark;
+    return (res != NULL) == positive;
+}
+
+int
+_PyPegen_lookahead_with_string(int positive, expr_ty (func)(Parser *, const char*), Parser *p, const char* arg)
+{
+    int mark = p->mark;
+    void *res = func(p, arg);
+    p->mark = mark;
+    return (res != NULL) == positive;
+}
+
+int
+_PyPegen_lookahead_with_int(int positive, Token *(func)(Parser *, int), Parser *p, int arg)
+{
+    int mark = p->mark;
+    void *res = func(p, arg);
+    p->mark = mark;
+    return (res != NULL) == positive;
+}
+
+int
+_PyPegen_lookahead(int positive, void *(func)(Parser *), Parser *p)
+{
+    int mark = p->mark;
+    void *res = (void*)func(p);
+    p->mark = mark;
+    return (res != NULL) == positive;
+}
+
+Token *
+_PyPegen_expect_token(Parser *p, int type)
+{
+    if (p->mark == p->fill) {
+        if (_PyPegen_fill_token(p) < 0) {
+            p->error_indicator = 1;
+            return NULL;
+        }
+    }
+    Token *t = p->tokens[p->mark];
+    if (t->type != type) {
+        return NULL;
+    }
+    p->mark += 1;
+    return t;
+}
+
+expr_ty
+_PyPegen_expect_soft_keyword(Parser *p, const char *keyword)
+{
+    if (p->mark == p->fill) {
+        if (_PyPegen_fill_token(p) < 0) {
+            p->error_indicator = 1;
+            return NULL;
+        }
+    }
+    Token *t = p->tokens[p->mark];
+    if (t->type != NAME) {
+        return NULL;
+    }
+    char* s = PyBytes_AsString(t->bytes);
+    if (!s) {
+        p->error_indicator = 1;
+        return NULL;
+    }
+    if (strcmp(s, keyword) != 0) {
+        return NULL;
+    }
+    return _PyPegen_name_token(p);
+}
+
+Token *
+_PyPegen_get_last_nonnwhitespace_token(Parser *p)
+{
+    assert(p->mark >= 0);
+    Token *token = NULL;
+    for (int m = p->mark - 1; m >= 0; m--) {
+        token = p->tokens[m];
+        if (token->type != ENDMARKER && (token->type < NEWLINE || token->type > DEDENT)) {
+            break;
+        }
+    }
+    return token;
+}
+
+expr_ty
+_PyPegen_name_token(Parser *p)
+{
+    Token *t = _PyPegen_expect_token(p, NAME);
+    if (t == NULL) {
+        return NULL;
+    }
+    char* s = PyBytes_AsString(t->bytes);
+    if (!s) {
+        p->error_indicator = 1;
+        return NULL;
+    }
+    PyObject *id = _PyPegen_new_identifier(p, s);
+    if (id == NULL) {
+        p->error_indicator = 1;
+        return NULL;
+    }
+    return Name(id, Load, t->lineno, t->col_offset, t->end_lineno, t->end_col_offset,
+                p->arena);
+}
+
+void *
+_PyPegen_string_token(Parser *p)
+{
+    return _PyPegen_expect_token(p, STRING);
+}
+
+static PyObject *
+parsenumber_raw(const char *s)
+{
+    const char *end;
+    long x;
+    double dx;
+    Py_complex compl;
+    int imflag;
+
+    assert(s != NULL);
+    errno = 0;
+    end = s + strlen(s) - 1;
+    imflag = *end == 'j' || *end == 'J';
+    if (s[0] == '0') {
+        x = (long)PyOS_strtoul(s, (char **)&end, 0);
+        if (x < 0 && errno == 0) {
+            return PyLong_FromString(s, (char **)0, 0);
+        }
+    }
+    else {
+        x = PyOS_strtol(s, (char **)&end, 0);
+    }
+    if (*end == '\0') {
+        if (errno != 0) {
+            return PyLong_FromString(s, (char **)0, 0);
+        }
+        return PyLong_FromLong(x);
+    }
+    /* XXX Huge floats may silently fail */
+    if (imflag) {
+        compl.real = 0.;
+        compl.imag = PyOS_string_to_double(s, (char **)&end, NULL);
+        if (compl.imag == -1.0 && PyErr_Occurred()) {
+            return NULL;
+        }
+        return PyComplex_FromCComplex(compl);
+    }
+    dx = PyOS_string_to_double(s, NULL, NULL);
+    if (dx == -1.0 && PyErr_Occurred()) {
+        return NULL;
+    }
+    return PyFloat_FromDouble(dx);
+}
+
+static PyObject *
+parsenumber(const char *s)
+{
+    char *dup;
+    char *end;
+    PyObject *res = NULL;
+
+    assert(s != NULL);
+
+    if (strchr(s, '_') == NULL) {
+        return parsenumber_raw(s);
+    }
+    /* Create a duplicate without underscores. */
+    dup = PyMem_Malloc(strlen(s) + 1);
+    if (dup == NULL) {
+        return PyErr_NoMemory();
+    }
+    end = dup;
+    for (; *s; s++) {
+        if (*s != '_') {
+            *end++ = *s;
+        }
+    }
+    *end = '\0';
+    res = parsenumber_raw(dup);
+    PyMem_Free(dup);
+    return res;
+}
+
+expr_ty
+_PyPegen_number_token(Parser *p)
+{
+    Token *t = _PyPegen_expect_token(p, NUMBER);
+    if (t == NULL) {
+        return NULL;
+    }
+
+    char *num_raw = PyBytes_AsString(t->bytes);
+    if (num_raw == NULL) {
+        p->error_indicator = 1;
+        return NULL;
+    }
+
+    if (p->feature_version < 6 && strchr(num_raw, '_') != NULL) {
+        p->error_indicator = 1;
+        return RAISE_SYNTAX_ERROR("Underscores in numeric literals are only supported "
+                                  "in Python 3.6 and greater");
+    }
+
+    PyObject *c = parsenumber(num_raw);
+
+    if (c == NULL) {
+        p->error_indicator = 1;
+        return NULL;
+    }
+
+    if (PyArena_AddPyObject(p->arena, c) < 0) {
+        Py_DECREF(c);
+        p->error_indicator = 1;
+        return NULL;
+    }
+
+    return Constant(c, NULL, t->lineno, t->col_offset, t->end_lineno, t->end_col_offset,
+                    p->arena);
+}
+
+static int // bool
+newline_in_string(Parser *p, const char *cur)
+{
+    for (const char *c = cur; c >= p->tok->buf; c--) {
+        if (*c == '\'' || *c == '"') {
+            return 1;
+        }
+    }
+    return 0;
+}
+
+/* Check that the source for a single input statement really is a single
+   statement by looking at what is left in the buffer after parsing.
+   Trailing whitespace and comments are OK. */
+static int // bool
+bad_single_statement(Parser *p)
+{
+    const char *cur = strchr(p->tok->buf, '\n');
+
+    /* Newlines are allowed if preceded by a line continuation character
+       or if they appear inside a string. */
+    if (!cur || (cur != p->tok->buf && *(cur - 1) == '\\')
+             || newline_in_string(p, cur)) {
+        return 0;
+    }
+    char c = *cur;
+
+    for (;;) {
+        while (c == ' ' || c == '\t' || c == '\n' || c == '\014') {
+            c = *++cur;
+        }
+
+        if (!c) {
+            return 0;
+        }
+
+        if (c != '#') {
+            return 1;
+        }
+
+        /* Suck up comment. */
+        while (c && c != '\n') {
+            c = *++cur;
+        }
+    }
+}
+
+void
+_PyPegen_Parser_Free(Parser *p)
+{
+    Py_XDECREF(p->normalize);
+    for (int i = 0; i < p->size; i++) {
+        PyMem_Free(p->tokens[i]);
+    }
+    PyMem_Free(p->tokens);
+    growable_comment_array_deallocate(&p->type_ignore_comments);
+    PyMem_Free(p);
+}
+
+static int
+compute_parser_flags(PyCompilerFlags *flags)
+{
+    int parser_flags = 0;
+    if (!flags) {
+        return 0;
+    }
+    if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT) {
+        parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
+    }
+    if (flags->cf_flags & PyCF_IGNORE_COOKIE) {
+        parser_flags |= PyPARSE_IGNORE_COOKIE;
+    }
+    if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL) {
+        parser_flags |= PyPARSE_BARRY_AS_BDFL;
+    }
+    if (flags->cf_flags & PyCF_TYPE_COMMENTS) {
+        parser_flags |= PyPARSE_TYPE_COMMENTS;
+    }
+    if ((flags->cf_flags & PyCF_ONLY_AST) && flags->cf_feature_version < 7) {
+        parser_flags |= PyPARSE_ASYNC_HACKS;
+    }
+    return parser_flags;
+}
+
+Parser *
+_PyPegen_Parser_New(struct tok_state *tok, int start_rule, int flags,
+                    int feature_version, int *errcode, PyArena *arena)
+{
+    Parser *p = PyMem_Malloc(sizeof(Parser));
+    if (p == NULL) {
+        return (Parser *) PyErr_NoMemory();
+    }
+    assert(tok != NULL);
+    tok->type_comments = (flags & PyPARSE_TYPE_COMMENTS) > 0;
+    tok->async_hacks = (flags & PyPARSE_ASYNC_HACKS) > 0;
+    p->tok = tok;
+    p->keywords = NULL;
+    p->n_keyword_lists = -1;
+    p->tokens = PyMem_Malloc(sizeof(Token *));
+    if (!p->tokens) {
+        PyMem_Free(p);
+        return (Parser *) PyErr_NoMemory();
+    }
+    p->tokens[0] = PyMem_Calloc(1, sizeof(Token));
+    if (!p->tokens) {
+        PyMem_Free(p->tokens);
+        PyMem_Free(p);
+        return (Parser *) PyErr_NoMemory();
+    }
+    if (!growable_comment_array_init(&p->type_ignore_comments, 10)) {
+        PyMem_Free(p->tokens[0]);
+        PyMem_Free(p->tokens);
+        PyMem_Free(p);
+        return (Parser *) PyErr_NoMemory();
+    }
+
+    p->mark = 0;
+    p->fill = 0;
+    p->size = 1;
+
+    p->errcode = errcode;
+    p->arena = arena;
+    p->start_rule = start_rule;
+    p->parsing_started = 0;
+    p->normalize = NULL;
+    p->error_indicator = 0;
+
+    p->starting_lineno = 0;
+    p->starting_col_offset = 0;
+    p->flags = flags;
+    p->feature_version = feature_version;
+    p->known_err_token = NULL;
+    p->level = 0;
+    p->call_invalid_rules = 0;
+
+    return p;
+}
+
+static void
+reset_parser_state(Parser *p)
+{
+    for (int i = 0; i < p->fill; i++) {
+        p->tokens[i]->memo = NULL;
+    }
+    p->mark = 0;
+    p->call_invalid_rules = 1;
+}
+
+void *
+_PyPegen_run_parser(Parser *p)
+{
+    void *res = _PyPegen_parse(p);
+    if (res == NULL) {
+        reset_parser_state(p);
+        _PyPegen_parse(p);
+        if (PyErr_Occurred()) {
+            return NULL;
+        }
+        if (p->fill == 0) {
+            RAISE_SYNTAX_ERROR("error at start before reading any input");
+        }
+        else if (p->tok->done == E_EOF) {
+            RAISE_SYNTAX_ERROR("unexpected EOF while parsing");
+        }
+        else {
+            if (p->tokens[p->fill-1]->type == INDENT) {
+                RAISE_INDENTATION_ERROR("unexpected indent");
+            }
+            else if (p->tokens[p->fill-1]->type == DEDENT) {
+                RAISE_INDENTATION_ERROR("unexpected unindent");
+            }
+            else {
+                RAISE_SYNTAX_ERROR("invalid syntax");
+            }
+        }
+        return NULL;
+    }
+
+    if (p->start_rule == Py_single_input && bad_single_statement(p)) {
+        p->tok->done = E_BADSINGLE; // This is not necessary for now, but might be in the future
+        return RAISE_SYNTAX_ERROR("multiple statements found while compiling a single statement");
+    }
+
+#if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
+    if (p->start_rule == Py_single_input ||
+        p->start_rule == Py_file_input ||
+        p->start_rule == Py_eval_input)
+    {
+        assert(PyAST_Validate(res));
+    }
+#endif
+    return res;
+}
+
+mod_ty
+_PyPegen_run_parser_from_file_pointer(FILE *fp, int start_rule, PyObject *filename_ob,
+                             const char *enc, const char *ps1, const char *ps2,
+                             PyCompilerFlags *flags, int *errcode, PyArena *arena)
+{
+    struct tok_state *tok = PyTokenizer_FromFile(fp, enc, ps1, ps2);
+    if (tok == NULL) {
+        if (PyErr_Occurred()) {
+            raise_tokenizer_init_error(filename_ob);
+            return NULL;
+        }
+        return NULL;
+    }
+    // This transfers the ownership to the tokenizer
+    tok->filename = filename_ob;
+    Py_INCREF(filename_ob);
+
+    // From here on we need to clean up even if there's an error
+    mod_ty result = NULL;
+
+    int parser_flags = compute_parser_flags(flags);
+    Parser *p = _PyPegen_Parser_New(tok, start_rule, parser_flags, PY_MINOR_VERSION,
+                                    errcode, arena);
+    if (p == NULL) {
+        goto error;
+    }
+
+    result = _PyPegen_run_parser(p);
+    _PyPegen_Parser_Free(p);
+
+error:
+    PyTokenizer_Free(tok);
+    return result;
+}
+
+mod_ty
+_PyPegen_run_parser_from_file(const char *filename, int start_rule,
+                     PyObject *filename_ob, PyCompilerFlags *flags, PyArena *arena)
+{
+    FILE *fp = fopen(filename, "rb");
+    if (fp == NULL) {
+        PyErr_SetFromErrnoWithFilename(PyExc_OSError, filename);
+        return NULL;
+    }
+
+    mod_ty result = _PyPegen_run_parser_from_file_pointer(fp, start_rule, filename_ob,
+                                                 NULL, NULL, NULL, flags, NULL, arena);
+
+    fclose(fp);
+    return result;
+}
+
+mod_ty
+_PyPegen_run_parser_from_string(const char *str, int start_rule, PyObject *filename_ob,
+                       PyCompilerFlags *flags, PyArena *arena)
+{
+    int exec_input = start_rule == Py_file_input;
+
+    struct tok_state *tok;
+    if (flags == NULL || flags->cf_flags & PyCF_IGNORE_COOKIE) {
+        tok = PyTokenizer_FromUTF8(str, exec_input);
+    } else {
+        tok = PyTokenizer_FromString(str, exec_input);
+    }
+    if (tok == NULL) {
+        if (PyErr_Occurred()) {
+            raise_tokenizer_init_error(filename_ob);
+        }
+        return NULL;
+    }
+    // This transfers the ownership to the tokenizer
+    tok->filename = filename_ob;
+    Py_INCREF(filename_ob);
+
+    // We need to clear up from here on
+    mod_ty result = NULL;
+
+    int parser_flags = compute_parser_flags(flags);
+    int feature_version = flags && (flags->cf_flags & PyCF_ONLY_AST) ?
+        flags->cf_feature_version : PY_MINOR_VERSION;
+    Parser *p = _PyPegen_Parser_New(tok, start_rule, parser_flags, feature_version,
+                                    NULL, arena);
+    if (p == NULL) {
+        goto error;
+    }
+
+    result = _PyPegen_run_parser(p);
+    _PyPegen_Parser_Free(p);
+
+error:
+    PyTokenizer_Free(tok);
+    return result;
+}
+
+void *
+_PyPegen_interactive_exit(Parser *p)
+{
+    if (p->errcode) {
+        *(p->errcode) = E_EOF;
+    }
+    return NULL;
+}
+
+/* Creates a single-element asdl_seq* that contains a */
+asdl_seq *
+_PyPegen_singleton_seq(Parser *p, void *a)
+{
+    assert(a != NULL);
+    asdl_seq *seq = _Py_asdl_seq_new(1, p->arena);
+    if (!seq) {
+        return NULL;
+    }
+    asdl_seq_SET(seq, 0, a);
+    return seq;
+}
+
+/* Creates a copy of seq and prepends a to it */
+asdl_seq *
+_PyPegen_seq_insert_in_front(Parser *p, void *a, asdl_seq *seq)
+{
+    assert(a != NULL);
+    if (!seq) {
+        return _PyPegen_singleton_seq(p, a);
+    }
+
+    asdl_seq *new_seq = _Py_asdl_seq_new(asdl_seq_LEN(seq) + 1, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+
+    asdl_seq_SET(new_seq, 0, a);
+    for (Py_ssize_t i = 1, l = asdl_seq_LEN(new_seq); i < l; i++) {
+        asdl_seq_SET(new_seq, i, asdl_seq_GET(seq, i - 1));
+    }
+    return new_seq;
+}
+
+/* Creates a copy of seq and appends a to it */
+asdl_seq *
+_PyPegen_seq_append_to_end(Parser *p, asdl_seq *seq, void *a)
+{
+    assert(a != NULL);
+    if (!seq) {
+        return _PyPegen_singleton_seq(p, a);
+    }
+
+    asdl_seq *new_seq = _Py_asdl_seq_new(asdl_seq_LEN(seq) + 1, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+
+    for (Py_ssize_t i = 0, l = asdl_seq_LEN(new_seq); i + 1 < l; i++) {
+        asdl_seq_SET(new_seq, i, asdl_seq_GET(seq, i));
+    }
+    asdl_seq_SET(new_seq, asdl_seq_LEN(new_seq) - 1, a);
+    return new_seq;
+}
+
+static Py_ssize_t
+_get_flattened_seq_size(asdl_seq *seqs)
+{
+    Py_ssize_t size = 0;
+    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seqs); i < l; i++) {
+        asdl_seq *inner_seq = asdl_seq_GET(seqs, i);
+        size += asdl_seq_LEN(inner_seq);
+    }
+    return size;
+}
+
+/* Flattens an asdl_seq* of asdl_seq*s */
+asdl_seq *
+_PyPegen_seq_flatten(Parser *p, asdl_seq *seqs)
+{
+    Py_ssize_t flattened_seq_size = _get_flattened_seq_size(seqs);
+    assert(flattened_seq_size > 0);
+
+    asdl_seq *flattened_seq = _Py_asdl_seq_new(flattened_seq_size, p->arena);
+    if (!flattened_seq) {
+        return NULL;
+    }
+
+    int flattened_seq_idx = 0;
+    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seqs); i < l; i++) {
+        asdl_seq *inner_seq = asdl_seq_GET(seqs, i);
+        for (Py_ssize_t j = 0, li = asdl_seq_LEN(inner_seq); j < li; j++) {
+            asdl_seq_SET(flattened_seq, flattened_seq_idx++, asdl_seq_GET(inner_seq, j));
+        }
+    }
+    assert(flattened_seq_idx == flattened_seq_size);
+
+    return flattened_seq;
+}
+
+/* Creates a new name of the form <first_name>.<second_name> */
+expr_ty
+_PyPegen_join_names_with_dot(Parser *p, expr_ty first_name, expr_ty second_name)
+{
+    assert(first_name != NULL && second_name != NULL);
+    PyObject *first_identifier = first_name->v.Name.id;
+    PyObject *second_identifier = second_name->v.Name.id;
+
+    if (PyUnicode_READY(first_identifier) == -1) {
+        return NULL;
+    }
+    if (PyUnicode_READY(second_identifier) == -1) {
+        return NULL;
+    }
+    const char *first_str = PyUnicode_AsUTF8(first_identifier);
+    if (!first_str) {
+        return NULL;
+    }
+    const char *second_str = PyUnicode_AsUTF8(second_identifier);
+    if (!second_str) {
+        return NULL;
+    }
+    Py_ssize_t len = strlen(first_str) + strlen(second_str) + 1;  // +1 for the dot
+
+    PyObject *str = PyBytes_FromStringAndSize(NULL, len);
+    if (!str) {
+        return NULL;
+    }
+
+    char *s = PyBytes_AS_STRING(str);
+    if (!s) {
+        return NULL;
+    }
+
+    strcpy(s, first_str);
+    s += strlen(first_str);
+    *s++ = '.';
+    strcpy(s, second_str);
+    s += strlen(second_str);
+    *s = '\0';
+
+    PyObject *uni = PyUnicode_DecodeUTF8(PyBytes_AS_STRING(str), PyBytes_GET_SIZE(str), NULL);
+    Py_DECREF(str);
+    if (!uni) {
+        return NULL;
+    }
+    PyUnicode_InternInPlace(&uni);
+    if (PyArena_AddPyObject(p->arena, uni) < 0) {
+        Py_DECREF(uni);
+        return NULL;
+    }
+
+    return _Py_Name(uni, Load, EXTRA_EXPR(first_name, second_name));
+}
+
+/* Counts the total number of dots in seq's tokens */
+int
+_PyPegen_seq_count_dots(asdl_seq *seq)
+{
+    int number_of_dots = 0;
+    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seq); i < l; i++) {
+        Token *current_expr = asdl_seq_GET(seq, i);
+        switch (current_expr->type) {
+            case ELLIPSIS:
+                number_of_dots += 3;
+                break;
+            case DOT:
+                number_of_dots += 1;
+                break;
+            default:
+                Py_UNREACHABLE();
+        }
+    }
+
+    return number_of_dots;
+}
+
+/* Creates an alias with '*' as the identifier name */
+alias_ty
+_PyPegen_alias_for_star(Parser *p)
+{
+    PyObject *str = PyUnicode_InternFromString("*");
+    if (!str) {
+        return NULL;
+    }
+    if (PyArena_AddPyObject(p->arena, str) < 0) {
+        Py_DECREF(str);
+        return NULL;
+    }
+    return alias(str, NULL, p->arena);
+}
+
+/* Creates a new asdl_seq* with the identifiers of all the names in seq */
+asdl_seq *
+_PyPegen_map_names_to_ids(Parser *p, asdl_seq *seq)
+{
+    Py_ssize_t len = asdl_seq_LEN(seq);
+    assert(len > 0);
+
+    asdl_seq *new_seq = _Py_asdl_seq_new(len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        expr_ty e = asdl_seq_GET(seq, i);
+        asdl_seq_SET(new_seq, i, e->v.Name.id);
+    }
+    return new_seq;
+}
+
+/* Constructs a CmpopExprPair */
+CmpopExprPair *
+_PyPegen_cmpop_expr_pair(Parser *p, cmpop_ty cmpop, expr_ty expr)
+{
+    assert(expr != NULL);
+    CmpopExprPair *a = PyArena_Malloc(p->arena, sizeof(CmpopExprPair));
+    if (!a) {
+        return NULL;
+    }
+    a->cmpop = cmpop;
+    a->expr = expr;
+    return a;
+}
+
+asdl_int_seq *
+_PyPegen_get_cmpops(Parser *p, asdl_seq *seq)
+{
+    Py_ssize_t len = asdl_seq_LEN(seq);
+    assert(len > 0);
+
+    asdl_int_seq *new_seq = _Py_asdl_int_seq_new(len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        CmpopExprPair *pair = asdl_seq_GET(seq, i);
+        asdl_seq_SET(new_seq, i, pair->cmpop);
+    }
+    return new_seq;
+}
+
+asdl_seq *
+_PyPegen_get_exprs(Parser *p, asdl_seq *seq)
+{
+    Py_ssize_t len = asdl_seq_LEN(seq);
+    assert(len > 0);
+
+    asdl_seq *new_seq = _Py_asdl_seq_new(len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        CmpopExprPair *pair = asdl_seq_GET(seq, i);
+        asdl_seq_SET(new_seq, i, pair->expr);
+    }
+    return new_seq;
+}
+
+/* Creates an asdl_seq* where all the elements have been changed to have ctx as context */
+static asdl_seq *
+_set_seq_context(Parser *p, asdl_seq *seq, expr_context_ty ctx)
+{
+    Py_ssize_t len = asdl_seq_LEN(seq);
+    if (len == 0) {
+        return NULL;
+    }
+
+    asdl_seq *new_seq = _Py_asdl_seq_new(len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        expr_ty e = asdl_seq_GET(seq, i);
+        asdl_seq_SET(new_seq, i, _PyPegen_set_expr_context(p, e, ctx));
+    }
+    return new_seq;
+}
+
+static expr_ty
+_set_name_context(Parser *p, expr_ty e, expr_context_ty ctx)
+{
+    return _Py_Name(e->v.Name.id, ctx, EXTRA_EXPR(e, e));
+}
+
+static expr_ty
+_set_tuple_context(Parser *p, expr_ty e, expr_context_ty ctx)
+{
+    return _Py_Tuple(_set_seq_context(p, e->v.Tuple.elts, ctx), ctx, EXTRA_EXPR(e, e));
+}
+
+static expr_ty
+_set_list_context(Parser *p, expr_ty e, expr_context_ty ctx)
+{
+    return _Py_List(_set_seq_context(p, e->v.List.elts, ctx), ctx, EXTRA_EXPR(e, e));
+}
+
+static expr_ty
+_set_subscript_context(Parser *p, expr_ty e, expr_context_ty ctx)
+{
+    return _Py_Subscript(e->v.Subscript.value, e->v.Subscript.slice, ctx, EXTRA_EXPR(e, e));
+}
+
+static expr_ty
+_set_attribute_context(Parser *p, expr_ty e, expr_context_ty ctx)
+{
+    return _Py_Attribute(e->v.Attribute.value, e->v.Attribute.attr, ctx, EXTRA_EXPR(e, e));
+}
+
+static expr_ty
+_set_starred_context(Parser *p, expr_ty e, expr_context_ty ctx)
+{
+    return _Py_Starred(_PyPegen_set_expr_context(p, e->v.Starred.value, ctx), ctx, EXTRA_EXPR(e, e));
+}
+
+/* Creates an `expr_ty` equivalent to `expr` but with `ctx` as context */
+expr_ty
+_PyPegen_set_expr_context(Parser *p, expr_ty expr, expr_context_ty ctx)
+{
+    assert(expr != NULL);
+
+    expr_ty new = NULL;
+    switch (expr->kind) {
+        case Name_kind:
+            new = _set_name_context(p, expr, ctx);
+            break;
+        case Tuple_kind:
+            new = _set_tuple_context(p, expr, ctx);
+            break;
+        case List_kind:
+            new = _set_list_context(p, expr, ctx);
+            break;
+        case Subscript_kind:
+            new = _set_subscript_context(p, expr, ctx);
+            break;
+        case Attribute_kind:
+            new = _set_attribute_context(p, expr, ctx);
+            break;
+        case Starred_kind:
+            new = _set_starred_context(p, expr, ctx);
+            break;
+        default:
+            new = expr;
+    }
+    return new;
+}
+
+/* Constructs a KeyValuePair that is used when parsing a dict's key value pairs */
+KeyValuePair *
+_PyPegen_key_value_pair(Parser *p, expr_ty key, expr_ty value)
+{
+    KeyValuePair *a = PyArena_Malloc(p->arena, sizeof(KeyValuePair));
+    if (!a) {
+        return NULL;
+    }
+    a->key = key;
+    a->value = value;
+    return a;
+}
+
+/* Extracts all keys from an asdl_seq* of KeyValuePair*'s */
+asdl_seq *
+_PyPegen_get_keys(Parser *p, asdl_seq *seq)
+{
+    Py_ssize_t len = asdl_seq_LEN(seq);
+    asdl_seq *new_seq = _Py_asdl_seq_new(len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        KeyValuePair *pair = asdl_seq_GET(seq, i);
+        asdl_seq_SET(new_seq, i, pair->key);
+    }
+    return new_seq;
+}
+
+/* Extracts all values from an asdl_seq* of KeyValuePair*'s */
+asdl_seq *
+_PyPegen_get_values(Parser *p, asdl_seq *seq)
+{
+    Py_ssize_t len = asdl_seq_LEN(seq);
+    asdl_seq *new_seq = _Py_asdl_seq_new(len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        KeyValuePair *pair = asdl_seq_GET(seq, i);
+        asdl_seq_SET(new_seq, i, pair->value);
+    }
+    return new_seq;
+}
+
+/* Constructs a NameDefaultPair */
+NameDefaultPair *
+_PyPegen_name_default_pair(Parser *p, arg_ty arg, expr_ty value, Token *tc)
+{
+    NameDefaultPair *a = PyArena_Malloc(p->arena, sizeof(NameDefaultPair));
+    if (!a) {
+        return NULL;
+    }
+    a->arg = _PyPegen_add_type_comment_to_arg(p, arg, tc);
+    a->value = value;
+    return a;
+}
+
+/* Constructs a SlashWithDefault */
+SlashWithDefault *
+_PyPegen_slash_with_default(Parser *p, asdl_seq *plain_names, asdl_seq *names_with_defaults)
+{
+    SlashWithDefault *a = PyArena_Malloc(p->arena, sizeof(SlashWithDefault));
+    if (!a) {
+        return NULL;
+    }
+    a->plain_names = plain_names;
+    a->names_with_defaults = names_with_defaults;
+    return a;
+}
+
+/* Constructs a StarEtc */
+StarEtc *
+_PyPegen_star_etc(Parser *p, arg_ty vararg, asdl_seq *kwonlyargs, arg_ty kwarg)
+{
+    StarEtc *a = PyArena_Malloc(p->arena, sizeof(StarEtc));
+    if (!a) {
+        return NULL;
+    }
+    a->vararg = vararg;
+    a->kwonlyargs = kwonlyargs;
+    a->kwarg = kwarg;
+    return a;
+}
+
+asdl_seq *
+_PyPegen_join_sequences(Parser *p, asdl_seq *a, asdl_seq *b)
+{
+    Py_ssize_t first_len = asdl_seq_LEN(a);
+    Py_ssize_t second_len = asdl_seq_LEN(b);
+    asdl_seq *new_seq = _Py_asdl_seq_new(first_len + second_len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+
+    int k = 0;
+    for (Py_ssize_t i = 0; i < first_len; i++) {
+        asdl_seq_SET(new_seq, k++, asdl_seq_GET(a, i));
+    }
+    for (Py_ssize_t i = 0; i < second_len; i++) {
+        asdl_seq_SET(new_seq, k++, asdl_seq_GET(b, i));
+    }
+
+    return new_seq;
+}
+
+static asdl_seq *
+_get_names(Parser *p, asdl_seq *names_with_defaults)
+{
+    Py_ssize_t len = asdl_seq_LEN(names_with_defaults);
+    asdl_seq *seq = _Py_asdl_seq_new(len, p->arena);
+    if (!seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        NameDefaultPair *pair = asdl_seq_GET(names_with_defaults, i);
+        asdl_seq_SET(seq, i, pair->arg);
+    }
+    return seq;
+}
+
+static asdl_seq *
+_get_defaults(Parser *p, asdl_seq *names_with_defaults)
+{
+    Py_ssize_t len = asdl_seq_LEN(names_with_defaults);
+    asdl_seq *seq = _Py_asdl_seq_new(len, p->arena);
+    if (!seq) {
+        return NULL;
+    }
+    for (Py_ssize_t i = 0; i < len; i++) {
+        NameDefaultPair *pair = asdl_seq_GET(names_with_defaults, i);
+        asdl_seq_SET(seq, i, pair->value);
+    }
+    return seq;
+}
+
+/* Constructs an arguments_ty object out of all the parsed constructs in the parameters rule */
+arguments_ty
+_PyPegen_make_arguments(Parser *p, asdl_seq *slash_without_default,
+                        SlashWithDefault *slash_with_default, asdl_seq *plain_names,
+                        asdl_seq *names_with_default, StarEtc *star_etc)
+{
+    asdl_seq *posonlyargs;
+    if (slash_without_default != NULL) {
+        posonlyargs = slash_without_default;
+    }
+    else if (slash_with_default != NULL) {
+        asdl_seq *slash_with_default_names =
+            _get_names(p, slash_with_default->names_with_defaults);
+        if (!slash_with_default_names) {
+            return NULL;
+        }
+        posonlyargs = _PyPegen_join_sequences(p, slash_with_default->plain_names, slash_with_default_names);
+        if (!posonlyargs) {
+            return NULL;
+        }
+    }
+    else {
+        posonlyargs = _Py_asdl_seq_new(0, p->arena);
+        if (!posonlyargs) {
+            return NULL;
+        }
+    }
+
+    asdl_seq *posargs;
+    if (plain_names != NULL && names_with_default != NULL) {
+        asdl_seq *names_with_default_names = _get_names(p, names_with_default);
+        if (!names_with_default_names) {
+            return NULL;
+        }
+        posargs = _PyPegen_join_sequences(p, plain_names, names_with_default_names);
+        if (!posargs) {
+            return NULL;
+        }
+    }
+    else if (plain_names == NULL && names_with_default != NULL) {
+        posargs = _get_names(p, names_with_default);
+        if (!posargs) {
+            return NULL;
+        }
+    }
+    else if (plain_names != NULL && names_with_default == NULL) {
+        posargs = plain_names;
+    }
+    else {
+        posargs = _Py_asdl_seq_new(0, p->arena);
+        if (!posargs) {
+            return NULL;
+        }
+    }
+
+    asdl_seq *posdefaults;
+    if (slash_with_default != NULL && names_with_default != NULL) {
+        asdl_seq *slash_with_default_values =
+            _get_defaults(p, slash_with_default->names_with_defaults);
+        if (!slash_with_default_values) {
+            return NULL;
+        }
+        asdl_seq *names_with_default_values = _get_defaults(p, names_with_default);
+        if (!names_with_default_values) {
+            return NULL;
+        }
+        posdefaults = _PyPegen_join_sequences(p, slash_with_default_values, names_with_default_values);
+        if (!posdefaults) {
+            return NULL;
+        }
+    }
+    else if (slash_with_default == NULL && names_with_default != NULL) {
+        posdefaults = _get_defaults(p, names_with_default);
+        if (!posdefaults) {
+            return NULL;
+        }
+    }
+    else if (slash_with_default != NULL && names_with_default == NULL) {
+        posdefaults = _get_defaults(p, slash_with_default->names_with_defaults);
+        if (!posdefaults) {
+            return NULL;
+        }
+    }
+    else {
+        posdefaults = _Py_asdl_seq_new(0, p->arena);
+        if (!posdefaults) {
+            return NULL;
+        }
+    }
+
+    arg_ty vararg = NULL;
+    if (star_etc != NULL && star_etc->vararg != NULL) {
+        vararg = star_etc->vararg;
+    }
+
+    asdl_seq *kwonlyargs;
+    if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
+        kwonlyargs = _get_names(p, star_etc->kwonlyargs);
+        if (!kwonlyargs) {
+            return NULL;
+        }
+    }
+    else {
+        kwonlyargs = _Py_asdl_seq_new(0, p->arena);
+        if (!kwonlyargs) {
+            return NULL;
+        }
+    }
+
+    asdl_seq *kwdefaults;
+    if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
+        kwdefaults = _get_defaults(p, star_etc->kwonlyargs);
+        if (!kwdefaults) {
+            return NULL;
+        }
+    }
+    else {
+        kwdefaults = _Py_asdl_seq_new(0, p->arena);
+        if (!kwdefaults) {
+            return NULL;
+        }
+    }
+
+    arg_ty kwarg = NULL;
+    if (star_etc != NULL && star_etc->kwarg != NULL) {
+        kwarg = star_etc->kwarg;
+    }
+
+    return _Py_arguments(posonlyargs, posargs, vararg, kwonlyargs, kwdefaults, kwarg,
+                         posdefaults, p->arena);
+}
+
+/* Constructs an empty arguments_ty object, that gets used when a function accepts no
+ * arguments. */
+arguments_ty
+_PyPegen_empty_arguments(Parser *p)
+{
+    asdl_seq *posonlyargs = _Py_asdl_seq_new(0, p->arena);
+    if (!posonlyargs) {
+        return NULL;
+    }
+    asdl_seq *posargs = _Py_asdl_seq_new(0, p->arena);
+    if (!posargs) {
+        return NULL;
+    }
+    asdl_seq *posdefaults = _Py_asdl_seq_new(0, p->arena);
+    if (!posdefaults) {
+        return NULL;
+    }
+    asdl_seq *kwonlyargs = _Py_asdl_seq_new(0, p->arena);
+    if (!kwonlyargs) {
+        return NULL;
+    }
+    asdl_seq *kwdefaults = _Py_asdl_seq_new(0, p->arena);
+    if (!kwdefaults) {
+        return NULL;
+    }
+
+    return _Py_arguments(posonlyargs, posargs, NULL, kwonlyargs, kwdefaults, NULL, kwdefaults,
+                         p->arena);
+}
+
+/* Encapsulates the value of an operator_ty into an AugOperator struct */
+AugOperator *
+_PyPegen_augoperator(Parser *p, operator_ty kind)
+{
+    AugOperator *a = PyArena_Malloc(p->arena, sizeof(AugOperator));
+    if (!a) {
+        return NULL;
+    }
+    a->kind = kind;
+    return a;
+}
+
+/* Construct a FunctionDef equivalent to function_def, but with decorators */
+stmt_ty
+_PyPegen_function_def_decorators(Parser *p, asdl_seq *decorators, stmt_ty function_def)
+{
+    assert(function_def != NULL);
+    if (function_def->kind == AsyncFunctionDef_kind) {
+        return _Py_AsyncFunctionDef(
+            function_def->v.FunctionDef.name, function_def->v.FunctionDef.args,
+            function_def->v.FunctionDef.body, decorators, function_def->v.FunctionDef.returns,
+            function_def->v.FunctionDef.type_comment, function_def->lineno,
+            function_def->col_offset, function_def->end_lineno, function_def->end_col_offset,
+            p->arena);
+    }
+
+    return _Py_FunctionDef(function_def->v.FunctionDef.name, function_def->v.FunctionDef.args,
+                           function_def->v.FunctionDef.body, decorators,
+                           function_def->v.FunctionDef.returns,
+                           function_def->v.FunctionDef.type_comment, function_def->lineno,
+                           function_def->col_offset, function_def->end_lineno,
+                           function_def->end_col_offset, p->arena);
+}
+
+/* Construct a ClassDef equivalent to class_def, but with decorators */
+stmt_ty
+_PyPegen_class_def_decorators(Parser *p, asdl_seq *decorators, stmt_ty class_def)
+{
+    assert(class_def != NULL);
+    return _Py_ClassDef(class_def->v.ClassDef.name, class_def->v.ClassDef.bases,
+                        class_def->v.ClassDef.keywords, class_def->v.ClassDef.body, decorators,
+                        class_def->lineno, class_def->col_offset, class_def->end_lineno,
+                        class_def->end_col_offset, p->arena);
+}
+
+/* Construct a KeywordOrStarred */
+KeywordOrStarred *
+_PyPegen_keyword_or_starred(Parser *p, void *element, int is_keyword)
+{
+    KeywordOrStarred *a = PyArena_Malloc(p->arena, sizeof(KeywordOrStarred));
+    if (!a) {
+        return NULL;
+    }
+    a->element = element;
+    a->is_keyword = is_keyword;
+    return a;
+}
+
+/* Get the number of starred expressions in an asdl_seq* of KeywordOrStarred*s */
+static int
+_seq_number_of_starred_exprs(asdl_seq *seq)
+{
+    int n = 0;
+    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seq); i < l; i++) {
+        KeywordOrStarred *k = asdl_seq_GET(seq, i);
+        if (!k->is_keyword) {
+            n++;
+        }
+    }
+    return n;
+}
+
+/* Extract the starred expressions of an asdl_seq* of KeywordOrStarred*s */
+asdl_seq *
+_PyPegen_seq_extract_starred_exprs(Parser *p, asdl_seq *kwargs)
+{
+    int new_len = _seq_number_of_starred_exprs(kwargs);
+    if (new_len == 0) {
+        return NULL;
+    }
+    asdl_seq *new_seq = _Py_asdl_seq_new(new_len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+
+    int idx = 0;
+    for (Py_ssize_t i = 0, len = asdl_seq_LEN(kwargs); i < len; i++) {
+        KeywordOrStarred *k = asdl_seq_GET(kwargs, i);
+        if (!k->is_keyword) {
+            asdl_seq_SET(new_seq, idx++, k->element);
+        }
+    }
+    return new_seq;
+}
+
+/* Return a new asdl_seq* with only the keywords in kwargs */
+asdl_seq *
+_PyPegen_seq_delete_starred_exprs(Parser *p, asdl_seq *kwargs)
+{
+    Py_ssize_t len = asdl_seq_LEN(kwargs);
+    Py_ssize_t new_len = len - _seq_number_of_starred_exprs(kwargs);
+    if (new_len == 0) {
+        return NULL;
+    }
+    asdl_seq *new_seq = _Py_asdl_seq_new(new_len, p->arena);
+    if (!new_seq) {
+        return NULL;
+    }
+
+    int idx = 0;
+    for (Py_ssize_t i = 0; i < len; i++) {
+        KeywordOrStarred *k = asdl_seq_GET(kwargs, i);
+        if (k->is_keyword) {
+            asdl_seq_SET(new_seq, idx++, k->element);
+        }
+    }
+    return new_seq;
+}
+
+expr_ty
+_PyPegen_concatenate_strings(Parser *p, asdl_seq *strings)
+{
+    Py_ssize_t len = asdl_seq_LEN(strings);
+    assert(len > 0);
+
+    Token *first = asdl_seq_GET(strings, 0);
+    Token *last = asdl_seq_GET(strings, len - 1);
+
+    int bytesmode = 0;
+    PyObject *bytes_str = NULL;
+
+    FstringParser state;
+    _PyPegen_FstringParser_Init(&state);
+
+    for (Py_ssize_t i = 0; i < len; i++) {
+        Token *t = asdl_seq_GET(strings, i);
+
+        int this_bytesmode;
+        int this_rawmode;
+        PyObject *s;
+        const char *fstr;
+        Py_ssize_t fstrlen = -1;
+
+        if (_PyPegen_parsestr(p, &this_bytesmode, &this_rawmode, &s, &fstr, &fstrlen, t) != 0) {
+            goto error;
+        }
+
+        /* Check that we are not mixing bytes with unicode. */
+        if (i != 0 && bytesmode != this_bytesmode) {
+            RAISE_SYNTAX_ERROR("cannot mix bytes and nonbytes literals");
+            Py_XDECREF(s);
+            goto error;
+        }
+        bytesmode = this_bytesmode;
+
+        if (fstr != NULL) {
+            assert(s == NULL && !bytesmode);
+
+            int result = _PyPegen_FstringParser_ConcatFstring(p, &state, &fstr, fstr + fstrlen,
+                                                     this_rawmode, 0, first, t, last);
+            if (result < 0) {
+                goto error;
+            }
+        }
+        else {
+            /* String or byte string. */
+            assert(s != NULL && fstr == NULL);
+            assert(bytesmode ? PyBytes_CheckExact(s) : PyUnicode_CheckExact(s));
+
+            if (bytesmode) {
+                if (i == 0) {
+                    bytes_str = s;
+                }
+                else {
+                    PyBytes_ConcatAndDel(&bytes_str, s);
+                    if (!bytes_str) {
+                        goto error;
+                    }
+                }
+            }
+            else {
+                /* This is a regular string. Concatenate it. */
+                if (_PyPegen_FstringParser_ConcatAndDel(&state, s) < 0) {
+                    goto error;
+                }
+            }
+        }
+    }
+
+    if (bytesmode) {
+        if (PyArena_AddPyObject(p->arena, bytes_str) < 0) {
+            goto error;
+        }
+        return Constant(bytes_str, NULL, first->lineno, first->col_offset, last->end_lineno,
+                        last->end_col_offset, p->arena);
+    }
+
+    return _PyPegen_FstringParser_Finish(p, &state, first, last);
+
+error:
+    Py_XDECREF(bytes_str);
+    _PyPegen_FstringParser_Dealloc(&state);
+    if (PyErr_Occurred()) {
+        raise_decode_error(p);
+    }
+    return NULL;
+}
+
+mod_ty
+_PyPegen_make_module(Parser *p, asdl_seq *a) {
+    asdl_seq *type_ignores = NULL;
+    Py_ssize_t num = p->type_ignore_comments.num_items;
+    if (num > 0) {
+        // Turn the raw (comment, lineno) pairs into TypeIgnore objects in the arena
+        type_ignores = _Py_asdl_seq_new(num, p->arena);
+        if (type_ignores == NULL) {
+            return NULL;
+        }
+        for (int i = 0; i < num; i++) {
+            PyObject *tag = _PyPegen_new_type_comment(p, p->type_ignore_comments.items[i].comment);
+            if (tag == NULL) {
+                return NULL;
+            }
+            type_ignore_ty ti = TypeIgnore(p->type_ignore_comments.items[i].lineno, tag, p->arena);
+            if (ti == NULL) {
+                return NULL;
+            }
+            asdl_seq_SET(type_ignores, i, ti);
+        }
+    }
+    return Module(a, type_ignores, p->arena);
+}
+
+// Error reporting helpers
+
+expr_ty
+_PyPegen_get_invalid_target(expr_ty e, TARGETS_TYPE targets_type)
+{
+    if (e == NULL) {
+        return NULL;
+    }
+
+#define VISIT_CONTAINER(CONTAINER, TYPE) do { \
+        Py_ssize_t len = asdl_seq_LEN(CONTAINER->v.TYPE.elts);\
+        for (Py_ssize_t i = 0; i < len; i++) {\
+            expr_ty other = asdl_seq_GET(CONTAINER->v.TYPE.elts, i);\
+            expr_ty child = _PyPegen_get_invalid_target(other, targets_type);\
+            if (child != NULL) {\
+                return child;\
+            }\
+        }\
+    } while (0)
+
+    // We only need to visit List and Tuple nodes recursively as those
+    // are the only ones that can contain valid names in targets when
+    // they are parsed as expressions. Any other kind of expression
+    // that is a container (like Sets or Dicts) is directly invalid and
+    // we don't need to visit it recursively.
+
+    switch (e->kind) {
+        case List_kind:
+            VISIT_CONTAINER(e, List);
+            return NULL;
+        case Tuple_kind:
+            VISIT_CONTAINER(e, Tuple);
+            return NULL;
+        case Starred_kind:
+            if (targets_type == DEL_TARGETS) {
+                return e;
+            }
+            return _PyPegen_get_invalid_target(e->v.Starred.value, targets_type);
+        case Compare_kind:
+            // This is needed, because the `a in b` in `for a in b` gets parsed
+            // as a comparison, and so we need to search the left side of the comparison
+            // for invalid targets.
+            if (targets_type == FOR_TARGETS) {
+                cmpop_ty cmpop = (cmpop_ty) asdl_seq_GET(e->v.Compare.ops, 0);
+                if (cmpop == In) {
+                    return _PyPegen_get_invalid_target(e->v.Compare.left, targets_type);
+                }
+                return NULL;
+            }
+            return e;
+        case Name_kind:
+        case Subscript_kind:
+        case Attribute_kind:
+            return NULL;
+        default:
+            return e;
+    }
+}
+
+void *_PyPegen_arguments_parsing_error(Parser *p, expr_ty e) {
+    int kwarg_unpacking = 0;
+    for (Py_ssize_t i = 0, l = asdl_seq_LEN(e->v.Call.keywords); i < l; i++) {
+        keyword_ty keyword = asdl_seq_GET(e->v.Call.keywords, i);
+        if (!keyword->arg) {
+            kwarg_unpacking = 1;
+        }
+    }
+
+    const char *msg = NULL;
+    if (kwarg_unpacking) {
+        msg = "positional argument follows keyword argument unpacking";
+    } else {
+        msg = "positional argument follows keyword argument";
+    }
+
+    return RAISE_SYNTAX_ERROR(msg);
+}
+
+void *
+_PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args)
+{
+    /* The rule that calls this function is 'args for_if_clauses'.
+       For the input f(L, x for x in y), L and x are in args and
+       the for is parsed as a for_if_clause. We have to check if
+       len <= 1, so that input like dict((a, b) for a, b in x)
+       gets successfully parsed and then we pass the last
+       argument (x in the above example) as the location of the
+       error */
+    Py_ssize_t len = asdl_seq_LEN(args->v.Call.args);
+    if (len <= 1) {
+        return NULL;
+    }
+
+    return RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
+        (expr_ty) asdl_seq_GET(args->v.Call.args, len - 1),
+        "Generator expression must be parenthesized"
+    );
+}
+
+
+expr_ty _PyPegen_collect_call_seqs(Parser *p, asdl_seq *a, asdl_seq *b,
+                     int lineno, int col_offset, int end_lineno,
+                     int end_col_offset, PyArena *arena) {
+    Py_ssize_t args_len = asdl_seq_LEN(a);
+    Py_ssize_t total_len = args_len;
+
+    if (b == NULL) {
+        return _Py_Call(_PyPegen_dummy_name(p), a, NULL, lineno, col_offset,
+                        end_lineno, end_col_offset, arena);
+
+    }
+
+    asdl_seq *starreds = _PyPegen_seq_extract_starred_exprs(p, b);
+    asdl_seq *keywords = _PyPegen_seq_delete_starred_exprs(p, b);
+
+    if (starreds) {
+        total_len += asdl_seq_LEN(starreds);
+    }
+
+    asdl_seq *args = _Py_asdl_seq_new(total_len, arena);
+
+    Py_ssize_t i = 0;
+    for (i = 0; i < args_len; i++) {
+        asdl_seq_SET(args, i, asdl_seq_GET(a, i));
+    }
+    for (; i < total_len; i++) {
+        asdl_seq_SET(args, i, asdl_seq_GET(starreds, i - args_len));
+    }
+
+    return _Py_Call(_PyPegen_dummy_name(p), args, keywords, lineno,
+                    col_offset, end_lineno, end_col_offset, arena);
+
+
+}
diff --git a/Parser/pegen/pegen.h b/Parser/pegen/pegen.h
new file mode 100644
index 0000000..a2f524a
--- /dev/null
+++ b/Parser/pegen/pegen.h
@@ -0,0 +1,306 @@
+#ifndef PEGEN_H
+#define PEGEN_H
+
+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include <token.h>
+#include <Python-ast.h>
+#include <pyarena.h>
+
+#if 0
+#define PyPARSE_YIELD_IS_KEYWORD        0x0001
+#endif
+
+#define PyPARSE_DONT_IMPLY_DEDENT       0x0002
+
+#if 0
+#define PyPARSE_WITH_IS_KEYWORD         0x0003
+#define PyPARSE_PRINT_IS_FUNCTION       0x0004
+#define PyPARSE_UNICODE_LITERALS        0x0008
+#endif
+
+#define PyPARSE_IGNORE_COOKIE 0x0010
+#define PyPARSE_BARRY_AS_BDFL 0x0020
+#define PyPARSE_TYPE_COMMENTS 0x0040
+#define PyPARSE_ASYNC_HACKS   0x0080
+
+typedef struct _memo {
+    int type;
+    void *node;
+    int mark;
+    struct _memo *next;
+} Memo;
+
+typedef struct {
+    int type;
+    PyObject *bytes;
+    int lineno, col_offset, end_lineno, end_col_offset;
+    Memo *memo;
+} Token;
+
+typedef struct {
+    char *str;
+    int type;
+} KeywordToken;
+
+
+typedef struct {
+    struct {
+        int lineno;
+        char *comment;  // The " <tag>" in "# type: ignore <tag>"
+    } *items;
+    size_t size;
+    size_t num_items;
+} growable_comment_array;
+
+typedef struct {
+    struct tok_state *tok;
+    Token **tokens;
+    int mark;
+    int fill, size;
+    PyArena *arena;
+    KeywordToken **keywords;
+    int n_keyword_lists;
+    int start_rule;
+    int *errcode;
+    int parsing_started;
+    PyObject* normalize;
+    int starting_lineno;
+    int starting_col_offset;
+    int error_indicator;
+    int flags;
+    int feature_version;
+    growable_comment_array type_ignore_comments;
+    Token *known_err_token;
+    int level;
+    int call_invalid_rules;
+} Parser;
+
+typedef struct {
+    cmpop_ty cmpop;
+    expr_ty expr;
+} CmpopExprPair;
+
+typedef struct {
+    expr_ty key;
+    expr_ty value;
+} KeyValuePair;
+
+typedef struct {
+    arg_ty arg;
+    expr_ty value;
+} NameDefaultPair;
+
+typedef struct {
+    asdl_seq *plain_names;
+    asdl_seq *names_with_defaults; // asdl_seq* of NameDefaultsPair's
+} SlashWithDefault;
+
+typedef struct {
+    arg_ty vararg;
+    asdl_seq *kwonlyargs; // asdl_seq* of NameDefaultsPair's
+    arg_ty kwarg;
+} StarEtc;
+
+typedef struct {
+    operator_ty kind;
+} AugOperator;
+
+typedef struct {
+    void *element;
+    int is_keyword;
+} KeywordOrStarred;
+
+void _PyPegen_clear_memo_statistics(void);
+PyObject *_PyPegen_get_memo_statistics(void);
+
+int _PyPegen_insert_memo(Parser *p, int mark, int type, void *node);
+int _PyPegen_update_memo(Parser *p, int mark, int type, void *node);
+int _PyPegen_is_memoized(Parser *p, int type, void *pres);
+
+int _PyPegen_lookahead_with_name(int, expr_ty (func)(Parser *), Parser *);
+int _PyPegen_lookahead_with_string(int , expr_ty (func)(Parser *, const char*), Parser *, const char*);
+int _PyPegen_lookahead_with_int(int, Token *(func)(Parser *, int), Parser *, int);
+int _PyPegen_lookahead(int, void *(func)(Parser *), Parser *);
+
+Token *_PyPegen_expect_token(Parser *p, int type);
+expr_ty _PyPegen_expect_soft_keyword(Parser *p, const char *keyword);
+Token *_PyPegen_get_last_nonnwhitespace_token(Parser *);
+int _PyPegen_fill_token(Parser *p);
+expr_ty _PyPegen_name_token(Parser *p);
+expr_ty _PyPegen_number_token(Parser *p);
+void *_PyPegen_string_token(Parser *p);
+const char *_PyPegen_get_expr_name(expr_ty);
+void *_PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...);
+void *_PyPegen_raise_error_known_location(Parser *p, PyObject *errtype,
+                                          Py_ssize_t lineno, Py_ssize_t col_offset,
+                                          const char *errmsg, va_list va);
+void *_PyPegen_dummy_name(Parser *p, ...);
+
+Py_LOCAL_INLINE(void *)
+RAISE_ERROR_KNOWN_LOCATION(Parser *p, PyObject *errtype, int lineno,
+                           int col_offset, const char *errmsg, ...)
+{
+    va_list va;
+    va_start(va, errmsg);
+    _PyPegen_raise_error_known_location(p, errtype, lineno, col_offset + 1,
+                                        errmsg, va);
+    va_end(va);
+    return NULL;
+}
+
+
+#define UNUSED(expr) do { (void)(expr); } while (0)
+#define EXTRA_EXPR(head, tail) head->lineno, head->col_offset, tail->end_lineno, tail->end_col_offset, p->arena
+#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
+#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, msg, ##__VA_ARGS__)
+#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, msg, ##__VA_ARGS__)
+#define RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, msg, ...) \
+    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, msg, ##__VA_ARGS__)
+
+Py_LOCAL_INLINE(void *)
+CHECK_CALL(Parser *p, void *result)
+{
+    if (result == NULL) {
+        assert(PyErr_Occurred());
+        p->error_indicator = 1;
+    }
+    return result;
+}
+
+/* This is needed for helper functions that are allowed to
+   return NULL without an error. Example: _PyPegen_seq_extract_starred_exprs */
+Py_LOCAL_INLINE(void *)
+CHECK_CALL_NULL_ALLOWED(Parser *p, void *result)
+{
+    if (result == NULL && PyErr_Occurred()) {
+        p->error_indicator = 1;
+    }
+    return result;
+}
+
+#define CHECK(result) CHECK_CALL(p, result)
+#define CHECK_NULL_ALLOWED(result) CHECK_CALL_NULL_ALLOWED(p, result)
+
+PyObject *_PyPegen_new_type_comment(Parser *, char *);
+
+Py_LOCAL_INLINE(PyObject *)
+NEW_TYPE_COMMENT(Parser *p, Token *tc)
+{
+    if (tc == NULL) {
+        return NULL;
+    }
+    char *bytes = PyBytes_AsString(tc->bytes);
+    if (bytes == NULL) {
+        goto error;
+    }
+    PyObject *tco = _PyPegen_new_type_comment(p, bytes);
+    if (tco == NULL) {
+        goto error;
+    }
+    return tco;
+ error:
+    p->error_indicator = 1;  // Inline CHECK_CALL
+    return NULL;
+}
+
+Py_LOCAL_INLINE(void *)
+INVALID_VERSION_CHECK(Parser *p, int version, char *msg, void *node)
+{
+    if (node == NULL) {
+        p->error_indicator = 1;  // Inline CHECK_CALL
+        return NULL;
+    }
+    if (p->feature_version < version) {
+        p->error_indicator = 1;
+        return RAISE_SYNTAX_ERROR("%s only supported in Python 3.%i and greater",
+                                  msg, version);
+    }
+    return node;
+}
+
+#define CHECK_VERSION(version, msg, node) INVALID_VERSION_CHECK(p, version, msg, node)
+
+arg_ty _PyPegen_add_type_comment_to_arg(Parser *, arg_ty, Token *);
+PyObject *_PyPegen_new_identifier(Parser *, char *);
+Parser *_PyPegen_Parser_New(struct tok_state *, int, int, int, int *, PyArena *);
+void _PyPegen_Parser_Free(Parser *);
+mod_ty _PyPegen_run_parser_from_file_pointer(FILE *, int, PyObject *, const char *,
+                                    const char *, const char *, PyCompilerFlags *, int *, PyArena *);
+void *_PyPegen_run_parser(Parser *);
+mod_ty _PyPegen_run_parser_from_file(const char *, int, PyObject *, PyCompilerFlags *, PyArena *);
+mod_ty _PyPegen_run_parser_from_string(const char *, int, PyObject *, PyCompilerFlags *, PyArena *);
+void *_PyPegen_interactive_exit(Parser *);
+asdl_seq *_PyPegen_singleton_seq(Parser *, void *);
+asdl_seq *_PyPegen_seq_insert_in_front(Parser *, void *, asdl_seq *);
+asdl_seq *_PyPegen_seq_append_to_end(Parser *, asdl_seq *, void *);
+asdl_seq *_PyPegen_seq_flatten(Parser *, asdl_seq *);
+expr_ty _PyPegen_join_names_with_dot(Parser *, expr_ty, expr_ty);
+int _PyPegen_seq_count_dots(asdl_seq *);
+alias_ty _PyPegen_alias_for_star(Parser *);
+asdl_seq *_PyPegen_map_names_to_ids(Parser *, asdl_seq *);
+CmpopExprPair *_PyPegen_cmpop_expr_pair(Parser *, cmpop_ty, expr_ty);
+asdl_int_seq *_PyPegen_get_cmpops(Parser *p, asdl_seq *);
+asdl_seq *_PyPegen_get_exprs(Parser *, asdl_seq *);
+expr_ty _PyPegen_set_expr_context(Parser *, expr_ty, expr_context_ty);
+KeyValuePair *_PyPegen_key_value_pair(Parser *, expr_ty, expr_ty);
+asdl_seq *_PyPegen_get_keys(Parser *, asdl_seq *);
+asdl_seq *_PyPegen_get_values(Parser *, asdl_seq *);
+NameDefaultPair *_PyPegen_name_default_pair(Parser *, arg_ty, expr_ty, Token *);
+SlashWithDefault *_PyPegen_slash_with_default(Parser *, asdl_seq *, asdl_seq *);
+StarEtc *_PyPegen_star_etc(Parser *, arg_ty, asdl_seq *, arg_ty);
+arguments_ty _PyPegen_make_arguments(Parser *, asdl_seq *, SlashWithDefault *,
+                            asdl_seq *, asdl_seq *, StarEtc *);
+arguments_ty _PyPegen_empty_arguments(Parser *);
+AugOperator *_PyPegen_augoperator(Parser*, operator_ty type);
+stmt_ty _PyPegen_function_def_decorators(Parser *, asdl_seq *, stmt_ty);
+stmt_ty _PyPegen_class_def_decorators(Parser *, asdl_seq *, stmt_ty);
+KeywordOrStarred *_PyPegen_keyword_or_starred(Parser *, void *, int);
+asdl_seq *_PyPegen_seq_extract_starred_exprs(Parser *, asdl_seq *);
+asdl_seq *_PyPegen_seq_delete_starred_exprs(Parser *, asdl_seq *);
+expr_ty _PyPegen_collect_call_seqs(Parser *, asdl_seq *, asdl_seq *,
+                     int lineno, int col_offset, int end_lineno,
+                     int end_col_offset, PyArena *arena);
+expr_ty _PyPegen_concatenate_strings(Parser *p, asdl_seq *);
+asdl_seq *_PyPegen_join_sequences(Parser *, asdl_seq *, asdl_seq *);
+int _PyPegen_check_barry_as_flufl(Parser *, Token *);
+mod_ty _PyPegen_make_module(Parser *, asdl_seq *);
+
+// Error reporting helpers
+typedef enum {
+    STAR_TARGETS,
+    DEL_TARGETS,
+    FOR_TARGETS
+} TARGETS_TYPE;
+expr_ty _PyPegen_get_invalid_target(expr_ty e, TARGETS_TYPE targets_type);
+#define RAISE_SYNTAX_ERROR_INVALID_TARGET(type, e) _RAISE_SYNTAX_ERROR_INVALID_TARGET(p, type, e)
+
+Py_LOCAL_INLINE(void *)
+_RAISE_SYNTAX_ERROR_INVALID_TARGET(Parser *p, TARGETS_TYPE type, void *e)
+{
+    expr_ty invalid_target = CHECK_NULL_ALLOWED(_PyPegen_get_invalid_target(e, type));
+    if (invalid_target != NULL) {
+        const char *msg;
+        if (type == STAR_TARGETS || type == FOR_TARGETS) {
+            msg = "cannot assign to %s";
+        }
+        else {
+            msg = "cannot delete %s";
+        }
+        return RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
+            invalid_target,
+            msg,
+            _PyPegen_get_expr_name(invalid_target)
+        );
+    }
+    return RAISE_SYNTAX_ERROR("invalid syntax");
+}
+
+void *_PyPegen_arguments_parsing_error(Parser *, expr_ty);
+void *_PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args);
+
+
+// Generated function in parse.c - function definition in python.gram
+void *_PyPegen_parse(Parser *);
+
+#endif
diff --git a/Parser/pgen/__main__.py b/Parser/pgen/__main__.py
index eea5261..d3780a7 100644
--- a/Parser/pgen/__main__.py
+++ b/Parser/pgen/__main__.py
@@ -8,24 +8,32 @@
     parser.add_argument(
         "grammar", type=str, help="The file with the grammar definition in EBNF format"
     )
-    parser.add_argument(
-        "tokens", type=str, help="The file with the token definitions"
-    )
+    parser.add_argument("tokens", type=str, help="The file with the token definitions")
     parser.add_argument(
         "graminit_h",
-        type=argparse.FileType('w'),
+        type=argparse.FileType("w"),
         help="The path to write the grammar's non-terminals as #defines",
     )
     parser.add_argument(
         "graminit_c",
-        type=argparse.FileType('w'),
+        type=argparse.FileType("w"),
         help="The path to write the grammar as initialized data",
     )
 
     parser.add_argument("--verbose", "-v", action="count")
+    parser.add_argument(
+        "--graph",
+        type=argparse.FileType("w"),
+        action="store",
+        metavar="GRAPH_OUTPUT_FILE",
+        help="Dumps a DOT representation of the generated automata in a file",
+    )
+
     args = parser.parse_args()
 
-    p = ParserGenerator(args.grammar, args.tokens, verbose=args.verbose)
+    p = ParserGenerator(
+        args.grammar, args.tokens, verbose=args.verbose, graph_file=args.graph
+    )
     grammar = p.make_grammar()
     grammar.produce_graminit_h(args.graminit_h.write)
     grammar.produce_graminit_c(args.graminit_c.write)
diff --git a/Parser/pgen/automata.py b/Parser/pgen/automata.py
new file mode 100644
index 0000000..f2ed221
--- /dev/null
+++ b/Parser/pgen/automata.py
@@ -0,0 +1,400 @@
+"""Classes representing state-machine concepts"""
+
+class NFA:
+    """A non deterministic finite automata
+
+    A non deterministic automata is a form of a finite state
+    machine. An NFA's rules are less restrictive than a DFA.
+    The NFA rules are:
+
+      * A transition can be non-deterministic and can result in
+        nothing, one, or two or more states.
+
+      * An epsilon transition consuming empty input is valid.
+        Transitions consuming labeled symbols are also permitted.
+
+    This class assumes that there is only one starting state and one
+    accepting (ending) state.
+
+    Attributes:
+        name (str): The name of the rule the NFA is representing.
+        start (NFAState): The starting state.
+        end (NFAState): The ending state
+    """
+
+    def __init__(self, start, end):
+        self.name = start.rule_name
+        self.start = start
+        self.end = end
+
+    def __repr__(self):
+        return "NFA(start={}, end={})".format(self.start, self.end)
+
+    def dump(self, writer=print):
+        """Dump a graphical representation of the NFA"""
+        todo = [self.start]
+        for i, state in enumerate(todo):
+            writer("  State", i, state is self.end and "(final)" or "")
+            for arc in state.arcs:
+                label = arc.label
+                next = arc.target
+                if next in todo:
+                    j = todo.index(next)
+                else:
+                    j = len(todo)
+                    todo.append(next)
+                if label is None:
+                    writer("    -> %d" % j)
+                else:
+                    writer("    %s -> %d" % (label, j))
+
+    def dump_graph(self, writer):
+        """Dump a DOT representation of the NFA"""
+        writer('digraph %s_nfa {\n' % self.name)
+        todo = [self.start]
+        for i, state in enumerate(todo):
+            writer(' %d [label="State %d %s"];\n' % (i, i, state is self.end and "(final)" or ""))
+            for arc in state.arcs:
+                label = arc.label
+                next = arc.target
+                if next in todo:
+                    j = todo.index(next)
+                else:
+                    j = len(todo)
+                    todo.append(next)
+                if label is None:
+                    writer(" %d -> %d [style=dotted label=ε];\n" % (i, j))
+                else:
+                    writer(" %d -> %d [label=%s];\n" % (i, j, label.replace("'", '"')))
+        writer('}\n')
+
+
+class NFAArc:
+    """An arc representing a transition between two NFA states.
+
+    NFA states can be connected via two ways:
+
+        * A label transition: An input equal to the label must
+          be consumed to perform the transition.
+        * An epsilon transition: The transition can be taken without
+          consuming any input symbol.
+
+        Attributes:
+            target (NFAState): The ending state of the transition arc.
+            label (Optional[str]): The label that must be consumed to make
+                the transition. An epsilon transition is represented
+                using `None`.
+    """
+
+    def __init__(self, target, label):
+        self.target = target
+        self.label = label
+
+    def __repr__(self):
+        return "<%s: %s>" % (self.__class__.__name__, self.label)
+
+
+class NFAState:
+    """A state of a NFA, non deterministic finite automata.
+
+    Attributes:
+        target (rule_name): The name of the rule used to represent the NFA's
+            ending state after a transition.
+        arcs (Dict[Optional[str], NFAState]): A mapping representing transitions
+            between the current NFA state and another NFA state via following
+            a label.
+    """
+
+    def __init__(self, rule_name):
+        self.rule_name = rule_name
+        self.arcs = []
+
+    def add_arc(self, target, label=None):
+        """Add a new arc to connect the state to a target state within the NFA
+
+        The method adds a new arc to the list of arcs available as transitions
+        from the present state. An optional label indicates a named transition
+        that consumes an input while the absence of a label represents an epsilon
+        transition.
+
+        Attributes:
+            target (NFAState): The end of the transition that the arc represents.
+            label (Optional[str]): The label that must be consumed for making
+                the transition. If the label is not provided the transition is assumed
+                to be an epsilon-transition.
+        """
+        assert label is None or isinstance(label, str)
+        assert isinstance(target, NFAState)
+        self.arcs.append(NFAArc(target, label))
+
+    def __repr__(self):
+        return "<%s: from %s>" % (self.__class__.__name__, self.rule_name)
+
+
+class DFA:
+    """A deterministic finite automata
+
+    A deterministic finite automata is a form of a finite state machine
+    that obeys the following rules:
+
+       * Each of the transitions is uniquely determined by
+         the source state and input symbol
+       * Reading an input symbol is required for each state
+         transition (no epsilon transitions).
+
+    The finite-state machine will accept or reject a string of symbols
+    and only produces a unique computation of the automaton for each input
+    string. The DFA must have a unique starting state (represented as the first
+    element in the list of states) but can have multiple final states.
+
+    Attributes:
+        name (str): The name of the rule the DFA is representing.
+        states (List[DFAState]): A collection of DFA states.
+    """
+
+    def __init__(self, name, states):
+        self.name = name
+        self.states = states
+
+    @classmethod
+    def from_nfa(cls, nfa):
+        """Constructs a DFA from a NFA using the Rabin–Scott construction algorithm.
+
+        To simulate the operation of a DFA on a given input string, it's
+        necessary to keep track of a single state at any time, or more precisely,
+        the state that the automaton will reach after seeing a prefix of the
+        input. In contrast, to simulate an NFA, it's necessary to keep track of
+        a set of states: all of the states that the automaton could reach after
+        seeing the same prefix of the input, according to the nondeterministic
+        choices made by the automaton. There are two possible sources of
+        non-determinism:
+
+        1) Multiple (one or more) transitions with the same label
+
+                         'A'     +-------+
+                    +----------->+ State +----------->+
+                    |            |   2   |
+            +-------+            +-------+
+            | State |
+            |   1   |            +-------+
+            +-------+            | State |
+                    +----------->+   3   +----------->+
+                         'A'     +-------+
+
+        2) Epsilon transitions (transitions that can be taken without consuming any input)
+
+            +-------+            +-------+
+            | State |     ε      | State |
+            |   1   +----------->+   2   +----------->+
+            +-------+            +-------+
+
+        Looking at the first case above, we can't determine which transition should be
+        followed when given an input A. We could choose whether or not to follow the
+        transition while in the second case the problem is that we can choose both to
+        follow the transition or not doing it. To solve this problem we can imagine that
+        we follow all possibilities at the same time and we construct new states from the
+        set of all possible reachable states. For every case in the previous example:
+
+
+        1) For multiple transitions with the same label we colapse all of the
+           final states under the same one
+
+            +-------+            +-------+
+            | State |     'A'    | State |
+            |   1   +----------->+  2-3  +----------->+
+            +-------+            +-------+
+
+        2) For epsilon transitions we collapse all epsilon-reachable states
+           into the same one
+
+            +-------+
+            | State |
+            |  1-2  +----------->
+            +-------+
+
+        Because the DFA states consist of sets of NFA states, an n-state NFA
+        may be converted to a DFA with at most 2**n states. Notice that the
+        constructed DFA is not minimal and can be simplified or reduced
+        afterwards.
+
+        Parameters:
+            name (NFA): The NFA to transform to DFA.
+        """
+        assert isinstance(nfa, NFA)
+
+        def add_closure(nfa_state, base_nfa_set):
+            """Calculate the epsilon-closure of a given state
+
+            Add to the *base_nfa_set* all the states that are
+            reachable from *nfa_state* via epsilon-transitions.
+            """
+            assert isinstance(nfa_state, NFAState)
+            if nfa_state in base_nfa_set:
+                return
+            base_nfa_set.add(nfa_state)
+            for nfa_arc in nfa_state.arcs:
+                if nfa_arc.label is None:
+                    add_closure(nfa_arc.target, base_nfa_set)
+
+        # Calculate the epsilon-closure of the starting state
+        base_nfa_set = set()
+        add_closure(nfa.start, base_nfa_set)
+
+        # Start by visiting the NFA starting state (there is only one).
+        states = [DFAState(nfa.name, base_nfa_set, nfa.end)]
+
+        for state in states:  # NB states grow while we're iterating
+
+            # Find transitions from the current state to other reachable states
+            # and store them in mapping that correlates the label to all the
+            # possible reachable states that can be obtained by consuming a
+            # token equal to the label. Each set of all the states that can
+            # be reached after following a label will be the a DFA state.
+            arcs = {}
+            for nfa_state in state.nfa_set:
+                for nfa_arc in nfa_state.arcs:
+                    if nfa_arc.label is not None:
+                        nfa_set = arcs.setdefault(nfa_arc.label, set())
+                        # All states that can be reached by epsilon-transitions
+                        # are also included in the set of reachable states.
+                        add_closure(nfa_arc.target, nfa_set)
+
+            # Now create new DFAs by visiting all posible transitions between
+            # the current DFA state and the new power-set states (each nfa_set)
+            # via the different labels. As the nodes are appended to *states* this
+            # is performing a breadth-first search traversal over the power-set of
+            # the states of the original NFA.
+            for label, nfa_set in sorted(arcs.items()):
+                for exisisting_state in states:
+                    if exisisting_state.nfa_set == nfa_set:
+                        # The DFA state already exists for this rule.
+                        next_state = exisisting_state
+                        break
+                else:
+                    next_state = DFAState(nfa.name, nfa_set, nfa.end)
+                    states.append(next_state)
+
+                # Add a transition between the current DFA state and the new
+                # DFA state (the power-set state) via the current label.
+                state.add_arc(next_state, label)
+
+        return cls(nfa.name, states)
+
+    def __iter__(self):
+        return iter(self.states)
+
+    def simplify(self):
+        """Attempt to reduce the number of states of the DFA
+
+        Transform the DFA into an equivalent DFA that has fewer states. Two
+        classes of states can be removed or merged from the original DFA without
+        affecting the language it accepts to minimize it:
+
+            * Unreachable states can not be reached from the initial
+              state of the DFA, for any input string.
+            * Nondistinguishable states are those that cannot be distinguished
+              from one another for any input string.
+
+        This algorithm does not achieve the optimal fully-reduced solution, but it
+        works well enough for the particularities of the Python grammar. The
+        algorithm repeatedly looks for two states that have the same set of
+        arcs (same labels pointing to the same nodes) and unifies them, until
+        things stop changing.
+        """
+        changes = True
+        while changes:
+            changes = False
+            for i, state_i in enumerate(self.states):
+                for j in range(i + 1, len(self.states)):
+                    state_j = self.states[j]
+                    if state_i == state_j:
+                        del self.states[j]
+                        for state in self.states:
+                            state.unifystate(state_j, state_i)
+                        changes = True
+                        break
+
+    def dump(self, writer=print):
+        """Dump a graphical representation of the DFA"""
+        for i, state in enumerate(self.states):
+            writer("  State", i, state.is_final and "(final)" or "")
+            for label, next in sorted(state.arcs.items()):
+                writer("    %s -> %d" % (label, self.states.index(next)))
+
+    def dump_graph(self, writer):
+        """Dump a DOT representation of the DFA"""
+        writer('digraph %s_dfa {\n' % self.name)
+        for i, state in enumerate(self.states):
+            writer(' %d [label="State %d %s"];\n' % (i, i, state.is_final and "(final)" or ""))
+            for label, next in sorted(state.arcs.items()):
+                writer(" %d -> %d [label=%s];\n" % (i, self.states.index(next), label.replace("'", '"')))
+        writer('}\n')
+
+
+class DFAState(object):
+    """A state of a DFA
+
+    Attributes:
+        rule_name (rule_name): The name of the DFA rule containing the represented state.
+        nfa_set (Set[NFAState]): The set of NFA states used to create this state.
+        final (bool): True if the state represents an accepting state of the DFA
+            containing this state.
+        arcs (Dict[label, DFAState]): A mapping representing transitions between
+            the current DFA state and another DFA state via following a label.
+    """
+
+    def __init__(self, rule_name, nfa_set, final):
+        assert isinstance(nfa_set, set)
+        assert isinstance(next(iter(nfa_set)), NFAState)
+        assert isinstance(final, NFAState)
+        self.rule_name = rule_name
+        self.nfa_set = nfa_set
+        self.arcs = {}  # map from terminals/nonterminals to DFAState
+        self.is_final = final in nfa_set
+
+    def add_arc(self, target, label):
+        """Add a new arc to the current state.
+
+        Parameters:
+            target (DFAState): The DFA state at the end of the arc.
+            label (str): The label respresenting the token that must be consumed
+                to perform this transition.
+        """
+        assert isinstance(label, str)
+        assert label not in self.arcs
+        assert isinstance(target, DFAState)
+        self.arcs[label] = target
+
+    def unifystate(self, old, new):
+        """Replace all arcs from the current node to *old* with *new*.
+
+        Parameters:
+            old (DFAState): The  DFA state to remove from all existing arcs.
+            new (DFAState): The DFA state to replace in all existing arcs.
+        """
+        for label, next_ in self.arcs.items():
+            if next_ is old:
+                self.arcs[label] = new
+
+    def __eq__(self, other):
+        # The nfa_set does not matter for  equality
+        assert isinstance(other, DFAState)
+        if self.is_final != other.is_final:
+            return False
+        # We cannot just return self.arcs == other.arcs because that
+        # would invoke this method recursively if there are any cycles.
+        if len(self.arcs) != len(other.arcs):
+            return False
+        for label, next_ in self.arcs.items():
+            if next_ is not other.arcs.get(label):
+                return False
+        return True
+
+    __hash__ = None  # For Py3 compatibility.
+
+    def __repr__(self):
+        return "<%s: %s is_final=%s>" % (
+            self.__class__.__name__,
+            self.rule_name,
+            self.is_final,
+        )
diff --git a/Parser/pgen/grammar.py b/Parser/pgen/grammar.py
index 5cd6524..ce40e16 100644
--- a/Parser/pgen/grammar.py
+++ b/Parser/pgen/grammar.py
@@ -61,13 +61,14 @@
     def produce_graminit_c(self, writer):
         writer("/* Generated by Parser/pgen */\n\n")
 
+        writer('#include "exports.h"\n')
         writer('#include "grammar.h"\n')
-        writer("grammar _PyParser_Grammar;\n")
+        writer("Py_EXPORTED_SYMBOL grammar _PyParser_Grammar;\n")
 
         self.print_dfas(writer)
         self.print_labels(writer)
 
-        writer("grammar _PyParser_Grammar = {\n")
+        writer("Py_EXPORTED_SYMBOL grammar _PyParser_Grammar = {\n")
         writer("    {n_dfas},\n".format(n_dfas=len(self.dfas)))
         writer("    dfas,\n")
         writer("    {{{n_labels}, labels}},\n".format(n_labels=len(self.labels)))
@@ -76,12 +77,14 @@
 
     def print_labels(self, writer):
         writer(
-            "static const label labels[{n_labels}] = {{\n".format(n_labels=len(self.labels))
+            "static const label labels[{n_labels}] = {{\n".format(
+                n_labels=len(self.labels)
+            )
         )
         for label, name in self.labels:
             label_name = '"{}"'.format(name) if name is not None else 0
             writer(
-                '    {{{label}, {label_name}}},\n'.format(
+                "    {{{label}, {label_name}}},\n".format(
                     label=label, label_name=label_name
                 )
             )
diff --git a/Parser/pgen/keywordgen.py b/Parser/pgen/keywordgen.py
index eeb3ef7..f0234a8 100644
--- a/Parser/pgen/keywordgen.py
+++ b/Parser/pgen/keywordgen.py
@@ -32,17 +32,16 @@
 
 
 def main():
-    parser = argparse.ArgumentParser(description="Generate the Lib/keywords.py "
-                                                 "file from the grammar.")
+    parser = argparse.ArgumentParser(
+        description="Generate the Lib/keywords.py " "file from the grammar."
+    )
     parser.add_argument(
         "grammar", type=str, help="The file with the grammar definition in EBNF format"
     )
-    parser.add_argument(
-        "tokens", type=str, help="The file with the token definitions"
-    )
+    parser.add_argument("tokens", type=str, help="The file with the token definitions")
     parser.add_argument(
         "keyword_file",
-        type=argparse.FileType('w'),
+        type=argparse.FileType("w"),
         help="The path to write the keyword definitions",
     )
     args = parser.parse_args()
diff --git a/Parser/pgen/metaparser.py b/Parser/pgen/metaparser.py
new file mode 100644
index 0000000..074a083
--- /dev/null
+++ b/Parser/pgen/metaparser.py
@@ -0,0 +1,152 @@
+"""Parser for the Python metagrammar"""
+
+import io
+import tokenize  # from stdlib
+
+from .automata import NFA, NFAState
+
+
+class GrammarParser:
+    """Parser for Python grammar files."""
+
+    _translation_table = {
+        tokenize.NAME: "NAME",
+        tokenize.STRING: "STRING",
+        tokenize.NEWLINE: "NEWLINE",
+        tokenize.NL: "NL",
+        tokenize.OP: "OP",
+        tokenize.ENDMARKER: "ENDMARKER",
+        tokenize.COMMENT: "COMMENT",
+    }
+
+    def __init__(self, grammar):
+        self.grammar = grammar
+        grammar_adaptor = io.StringIO(grammar)
+        self.generator = tokenize.generate_tokens(grammar_adaptor.readline)
+        self._gettoken()  # Initialize lookahead
+        self._current_rule_name = None
+
+    def parse(self):
+        """Turn the grammar into a collection of NFAs"""
+        # grammar: (NEWLINE | rule)* ENDMARKER
+        while self.type != tokenize.ENDMARKER:
+            while self.type == tokenize.NEWLINE:
+                self._gettoken()
+            # rule: NAME ':' rhs NEWLINE
+            self._current_rule_name = self._expect(tokenize.NAME)
+            self._expect(tokenize.OP, ":")
+            a, z = self._parse_rhs()
+            self._expect(tokenize.NEWLINE)
+
+            yield NFA(a, z)
+
+    def _parse_rhs(self):
+        # rhs: items ('|' items)*
+        a, z = self._parse_items()
+        if self.value != "|":
+            return a, z
+        else:
+            aa = NFAState(self._current_rule_name)
+            zz = NFAState(self._current_rule_name)
+            while True:
+                # Allow to transit directly to the previous state and connect the end of the
+                # previous state to the end of the current one, effectively allowing to skip
+                # the current state.
+                aa.add_arc(a)
+                z.add_arc(zz)
+                if self.value != "|":
+                    break
+
+                self._gettoken()
+                a, z = self._parse_items()
+            return aa, zz
+
+    def _parse_items(self):
+        # items: item+
+        a, b = self._parse_item()
+        while self.type in (tokenize.NAME, tokenize.STRING) or self.value in ("(", "["):
+            c, d = self._parse_item()
+            # Allow a transition between the end of the previous state
+            # and the beginning of the new one, connecting all the items
+            # together. In this way we can only reach the end if we visit
+            # all the items.
+            b.add_arc(c)
+            b = d
+        return a, b
+
+    def _parse_item(self):
+        # item: '[' rhs ']' | atom ['+' | '*']
+        if self.value == "[":
+            self._gettoken()
+            a, z = self._parse_rhs()
+            self._expect(tokenize.OP, "]")
+            # Make a transition from the beginning to the end so it is possible to
+            # advance for free to the next state of this item # without consuming
+            # anything from the rhs.
+            a.add_arc(z)
+            return a, z
+        else:
+            a, z = self._parse_atom()
+            value = self.value
+            if value not in ("+", "*"):
+                return a, z
+            self._gettoken()
+            z.add_arc(a)
+            if value == "+":
+                # Create a cycle to the beginning so we go back to the old state in this
+                # item and repeat.
+                return a, z
+            else:
+                # The end state is the same as the beginning, so we can cycle arbitrarily
+                # and end in the beginning if necessary.
+                return a, a
+
+    def _parse_atom(self):
+        # atom: '(' rhs ')' | NAME | STRING
+        if self.value == "(":
+            self._gettoken()
+            a, z = self._parse_rhs()
+            self._expect(tokenize.OP, ")")
+            return a, z
+        elif self.type in (tokenize.NAME, tokenize.STRING):
+            a = NFAState(self._current_rule_name)
+            z = NFAState(self._current_rule_name)
+            # We can transit to the next state only if we consume the value.
+            a.add_arc(z, self.value)
+            self._gettoken()
+            return a, z
+        else:
+            self._raise_error(
+                "expected (...) or NAME or STRING, got {} ({})",
+                self._translation_table.get(self.type, self.type),
+                self.value,
+            )
+
+    def _expect(self, type_, value=None):
+        if self.type != type_:
+            self._raise_error(
+                "expected {}, got {} ({})",
+                self._translation_table.get(type_, type_),
+                self._translation_table.get(self.type, self.type),
+                self.value,
+            )
+        if value is not None and self.value != value:
+            self._raise_error("expected {}, got {}", value, self.value)
+        value = self.value
+        self._gettoken()
+        return value
+
+    def _gettoken(self):
+        tup = next(self.generator)
+        while tup[0] in (tokenize.COMMENT, tokenize.NL):
+            tup = next(self.generator)
+        self.type, self.value, self.begin, self.end, self.line = tup
+
+    def _raise_error(self, msg, *args):
+        if args:
+            try:
+                msg = msg.format(*args)
+            except Exception:
+                msg = " ".join([msg] + list(map(str, args)))
+        line = self.grammar.splitlines()[self.begin[0] - 1]
+        raise SyntaxError(msg, ("<grammar>", self.begin[0], self.begin[1], line))
diff --git a/Parser/pgen/pgen.py b/Parser/pgen/pgen.py
index d52d58f..03032d4 100644
--- a/Parser/pgen/pgen.py
+++ b/Parser/pgen/pgen.py
@@ -1,42 +1,185 @@
+"""Python parser generator
+
+
+This parser generator transforms a Python grammar file into parsing tables
+that can be consumed by Python's LL(1) parser written in C.
+
+Concepts
+--------
+
+* An LL(1) parser (Left-to-right, Leftmost derivation, 1 token-lookahead) is a
+  top-down parser for a subset of context-free languages. It parses the input
+  from Left to right, performing Leftmost derivation of the sentence, and can
+  only use 1 token of lookahead when parsing a sentence.
+
+* A parsing table is a collection of data that a generic implementation of the
+  LL(1) parser consumes to know how to parse a given context-free grammar. In
+  this case the collection of data involves Deterministic Finite Automatons,
+  calculated first sets, keywords and transition labels.
+
+* A grammar is defined by production rules (or just 'productions') that specify
+  which symbols may replace which other symbols; these rules may be used to
+  generate strings, or to parse them. Each such rule has a head, or left-hand
+  side, which consists of the string that may be replaced, and a body, or
+  right-hand side, which consists of a string that may replace it. In the
+  Python grammar, rules are written in the form
+
+  rule_name: rule_description;
+
+  meaning the rule 'a: b' specifies that a can be replaced by b. A context-free
+  grammar is a grammar in which the left-hand side of each production rule
+  consists of only a single nonterminal symbol. Context-free grammars can
+  always be recognized by a Non-Deterministic Automatons.
+
+* Terminal symbols are literal symbols which may appear in the outputs of the
+  production rules of the grammar and which cannot be changed using the rules
+  of the grammar. Applying the rules recursively to a source string of symbols
+  will usually terminate in a final output string consisting only of terminal
+  symbols.
+
+* Nonterminal symbols are those symbols which can be replaced. The grammar
+  includes a start symbol a designated member of the set of nonterminals from
+  which all the strings in the language may be derived by successive
+  applications of the production rules.
+
+* The language defined by the grammar is defined as the set of terminal strings
+  that can be derived using the production rules.
+
+* The first sets of a rule (FIRST(rule)) are defined to be the set of terminals
+  that can appear in the first position of any string derived from the rule.
+  This is useful for LL(1) parsers as the parser is only allowed to look at the
+  next token in the input to know which rule needs to parse. For example, given
+  this grammar:
+
+  start: '(' A | B ')'
+  A: 'a' '<'
+  B: 'b' '<'
+
+  and the input '(b<)' the parser can only look at 'b' to know if it needs
+  to parse A o B. Because FIRST(A) = {'a'} and FIRST(B) = {'b'} it knows
+  that needs to continue parsing rule B because only that rule can start
+  with 'b'.
+
+Description
+-----------
+
+The input for the parser generator is a grammar in extended BNF form (using *
+for repetition, + for at-least-once repetition, [] for optional parts, | for
+alternatives and () for grouping).
+
+Each rule in the grammar file is considered as a regular expression in its
+own right. It is turned into a Non-deterministic Finite Automaton (NFA),
+which is then turned into a Deterministic Finite Automaton (DFA), which is
+then optimized to reduce the number of states. See [Aho&Ullman 77] chapter 3,
+or similar compiler books (this technique is more often used for lexical
+analyzers).
+
+The DFA's are used by the parser as parsing tables in a special way that's
+probably unique. Before they are usable, the FIRST sets of all non-terminals
+are computed so the LL(1) parser consuming the parsing tables can distinguish
+between different transitions.
+Reference
+---------
+
+[Aho&Ullman 77]
+    Aho&Ullman, Principles of Compiler Design, Addison-Wesley 1977
+    (first edition)
+"""
+
+from ast import literal_eval
 import collections
-import tokenize  # from stdlib
 
 from . import grammar, token
+from .automata import DFA
+from .metaparser import GrammarParser
+
+import enum
+
+
+class LabelType(enum.Enum):
+    NONTERMINAL = 0
+    NAMED_TOKEN = 1
+    KEYWORD = 2
+    OPERATOR = 3
+    NONE = 4
+
+
+class Label(str):
+    def __init__(self, value):
+        self.type = self._get_type()
+
+    def _get_type(self):
+        if self[0].isalpha():
+            if self.upper() == self:
+                # NAMED tokens (ASYNC, NAME...) are all uppercase by convention
+                return LabelType.NAMED_TOKEN
+            else:
+                # If is not uppercase it must be a non terminal.
+                return LabelType.NONTERMINAL
+        else:
+            # Keywords and operators are wrapped in quotes
+            assert self[0] == self[-1] in ('"', "'"), self
+            value = literal_eval(self)
+            if value[0].isalpha():
+                return LabelType.KEYWORD
+            else:
+                return LabelType.OPERATOR
+
+    def __repr__(self):
+        return "{}({})".format(self.type, super().__repr__())
 
 
 class ParserGenerator(object):
-
-    def __init__(self, grammar_file, token_file, stream=None, verbose=False):
-        close_stream = None
-        if stream is None:
-            stream = open(grammar_file)
-            close_stream = stream.close
+    def __init__(self, grammar_file, token_file, verbose=False, graph_file=None):
+        with open(grammar_file) as f:
+            self.grammar = f.read()
         with open(token_file) as tok_file:
             token_lines = tok_file.readlines()
         self.tokens = dict(token.generate_tokens(token_lines))
         self.opmap = dict(token.generate_opmap(token_lines))
         # Manually add <> so it does not collide with !=
-        self.opmap['<>'] = "NOTEQUAL"
+        self.opmap["<>"] = "NOTEQUAL"
         self.verbose = verbose
         self.filename = grammar_file
-        self.stream = stream
-        self.generator = tokenize.generate_tokens(stream.readline)
-        self.gettoken() # Initialize lookahead
-        self.dfas, self.startsymbol = self.parse()
-        if close_stream is not None:
-            close_stream()
-        self.first = {} # map from symbol name to set of tokens
-        self.addfirstsets()
+        self.graph_file = graph_file
+        self.dfas, self.startsymbol = self.create_dfas()
+        self.first = {}  # map from symbol name to set of tokens
+        self.calculate_first_sets()
+
+    def create_dfas(self):
+        rule_to_dfas = collections.OrderedDict()
+        start_nonterminal = None
+        for nfa in GrammarParser(self.grammar).parse():
+            if self.verbose:
+                print("Dump of NFA for", nfa.name)
+                nfa.dump()
+            if self.graph_file is not None:
+                nfa.dump_graph(self.graph_file.write)
+            dfa = DFA.from_nfa(nfa)
+            if self.verbose:
+                print("Dump of DFA for", dfa.name)
+                dfa.dump()
+            dfa.simplify()
+            if self.graph_file is not None:
+                dfa.dump_graph(self.graph_file.write)
+            rule_to_dfas[dfa.name] = dfa
+
+            if start_nonterminal is None:
+                start_nonterminal = dfa.name
+
+        return rule_to_dfas, start_nonterminal
 
     def make_grammar(self):
         c = grammar.Grammar()
+        c.all_labels = set()
         names = list(self.dfas.keys())
         names.remove(self.startsymbol)
         names.insert(0, self.startsymbol)
         for name in names:
             i = 256 + len(c.symbol2number)
-            c.symbol2number[name] = i
-            c.number2symbol[i] = name
+            c.symbol2number[Label(name)] = i
+            c.number2symbol[i] = Label(name)
+            c.all_labels.add(name)
         for name in names:
             self.make_label(c, name)
             dfa = self.dfas[name]
@@ -44,12 +187,13 @@
             for state in dfa:
                 arcs = []
                 for label, next in sorted(state.arcs.items()):
-                    arcs.append((self.make_label(c, label), dfa.index(next)))
-                if state.isfinal:
-                    arcs.append((0, dfa.index(state)))
+                    c.all_labels.add(label)
+                    arcs.append((self.make_label(c, label), dfa.states.index(next)))
+                if state.is_final:
+                    arcs.append((0, dfa.states.index(state)))
                 states.append(arcs)
             c.states.append(states)
-            c.dfas[c.symbol2number[name]] = (states, self.make_first(c, name))
+            c.dfas[c.symbol2number[name]] = (states, self.make_first_sets(c, name))
         c.start = c.symbol2number[self.startsymbol]
 
         if self.verbose:
@@ -68,7 +212,7 @@
             )
         return c
 
-    def make_first(self, c, name):
+    def make_first_sets(self, c, name):
         rawfirst = self.first[name]
         first = set()
         for label in sorted(rawfirst):
@@ -78,67 +222,65 @@
         return first
 
     def make_label(self, c, label):
-        # XXX Maybe this should be a method on a subclass of converter?
+        label = Label(label)
         ilabel = len(c.labels)
-        if label[0].isalpha():
-            # Either a symbol name or a named token
-            if label in c.symbol2number:
-                # A symbol name (a non-terminal)
-                if label in c.symbol2label:
-                    return c.symbol2label[label]
-                else:
-                    c.labels.append((c.symbol2number[label], None))
-                    c.symbol2label[label] = ilabel
-                    return ilabel
-            else:
-                # A named token (NAME, NUMBER, STRING)
-                itoken = self.tokens.get(label, None)
-                assert isinstance(itoken, int), label
-                assert itoken in self.tokens.values(), label
-                if itoken in c.tokens:
-                    return c.tokens[itoken]
-                else:
-                    c.labels.append((itoken, None))
-                    c.tokens[itoken] = ilabel
-                    return ilabel
-        else:
-            # Either a keyword or an operator
-            assert label[0] in ('"', "'"), label
-            value = eval(label)
-            if value[0].isalpha():
-                # A keyword
-                if value in c.keywords:
-                    return c.keywords[value]
-                else:
-                    c.labels.append((self.tokens["NAME"], value))
-                    c.keywords[value] = ilabel
-                    return ilabel
-            else:
-                # An operator (any non-numeric token)
-                tok_name = self.opmap[value] # Fails if unknown token
-                itoken = self.tokens[tok_name]
-                if itoken in c.tokens:
-                    return c.tokens[itoken]
-                else:
-                    c.labels.append((itoken, None))
-                    c.tokens[itoken] = ilabel
-                    return ilabel
 
-    def addfirstsets(self):
+        if label.type == LabelType.NONTERMINAL:
+            if label in c.symbol2label:
+                return c.symbol2label[label]
+            else:
+                c.labels.append((c.symbol2number[label], None))
+                c.symbol2label[label] = ilabel
+                return ilabel
+        elif label.type == LabelType.NAMED_TOKEN:
+            # A named token (NAME, NUMBER, STRING)
+            itoken = self.tokens.get(label, None)
+            assert isinstance(itoken, int), label
+            assert itoken in self.tokens.values(), label
+            if itoken in c.tokens:
+                return c.tokens[itoken]
+            else:
+                c.labels.append((itoken, None))
+                c.tokens[itoken] = ilabel
+                return ilabel
+        elif label.type == LabelType.KEYWORD:
+            # A keyword
+            value = literal_eval(label)
+            if value in c.keywords:
+                return c.keywords[value]
+            else:
+                c.labels.append((self.tokens["NAME"], value))
+                c.keywords[value] = ilabel
+                return ilabel
+        elif label.type == LabelType.OPERATOR:
+            # An operator (any non-numeric token)
+            value = literal_eval(label)
+            tok_name = self.opmap[value]  # Fails if unknown token
+            itoken = self.tokens[tok_name]
+            if itoken in c.tokens:
+                return c.tokens[itoken]
+            else:
+                c.labels.append((itoken, None))
+                c.tokens[itoken] = ilabel
+                return ilabel
+        else:
+            raise ValueError("Cannot categorize label {}".format(label))
+
+    def calculate_first_sets(self):
         names = list(self.dfas.keys())
         for name in names:
             if name not in self.first:
-                self.calcfirst(name)
+                self.calculate_first_sets_for_rule(name)
 
             if self.verbose:
                 print("First set for {dfa_name}".format(dfa_name=name))
                 for item in self.first[name]:
                     print("    - {terminal}".format(terminal=item))
 
-    def calcfirst(self, name):
+    def calculate_first_sets_for_rule(self, name):
         dfa = self.dfas[name]
-        self.first[name] = None # dummy to detect left recursion
-        state = dfa[0]
+        self.first[name] = None  # dummy to detect left recursion
+        state = dfa.states[0]
         totalset = set()
         overlapcheck = {}
         for label, next in state.arcs.items():
@@ -148,7 +290,7 @@
                     if fset is None:
                         raise ValueError("recursion for rule %r" % name)
                 else:
-                    self.calcfirst(label)
+                    self.calculate_first_sets_for_rule(label)
                     fset = self.first[label]
                 totalset.update(fset)
                 overlapcheck[label] = fset
@@ -159,248 +301,10 @@
         for label, itsfirst in overlapcheck.items():
             for symbol in itsfirst:
                 if symbol in inverse:
-                    raise ValueError("rule %s is ambiguous; %s is in the"
-                                     " first sets of %s as well as %s" %
-                                     (name, symbol, label, inverse[symbol]))
+                    raise ValueError(
+                        "rule %s is ambiguous; %s is in the"
+                        " first sets of %s as well as %s"
+                        % (name, symbol, label, inverse[symbol])
+                    )
                 inverse[symbol] = label
         self.first[name] = totalset
-
-    def parse(self):
-        dfas = collections.OrderedDict()
-        startsymbol = None
-        # MSTART: (NEWLINE | RULE)* ENDMARKER
-        while self.type != tokenize.ENDMARKER:
-            while self.type == tokenize.NEWLINE:
-                self.gettoken()
-            # RULE: NAME ':' RHS NEWLINE
-            name = self.expect(tokenize.NAME)
-            if self.verbose:
-                print("Processing rule {dfa_name}".format(dfa_name=name))
-            self.expect(tokenize.OP, ":")
-            a, z = self.parse_rhs()
-            self.expect(tokenize.NEWLINE)
-            if self.verbose:
-                self.dump_nfa(name, a, z)
-            dfa = self.make_dfa(a, z)
-            if self.verbose:
-                self.dump_dfa(name, dfa)
-            self.simplify_dfa(dfa)
-            dfas[name] = dfa
-            if startsymbol is None:
-                startsymbol = name
-        return dfas, startsymbol
-
-    def make_dfa(self, start, finish):
-        # To turn an NFA into a DFA, we define the states of the DFA
-        # to correspond to *sets* of states of the NFA.  Then do some
-        # state reduction.  Let's represent sets as dicts with 1 for
-        # values.
-        assert isinstance(start, NFAState)
-        assert isinstance(finish, NFAState)
-        def closure(state):
-            base = set()
-            addclosure(state, base)
-            return base
-        def addclosure(state, base):
-            assert isinstance(state, NFAState)
-            if state in base:
-                return
-            base.add(state)
-            for label, next in state.arcs:
-                if label is None:
-                    addclosure(next, base)
-        states = [DFAState(closure(start), finish)]
-        for state in states: # NB states grows while we're iterating
-            arcs = {}
-            for nfastate in state.nfaset:
-                for label, next in nfastate.arcs:
-                    if label is not None:
-                        addclosure(next, arcs.setdefault(label, set()))
-            for label, nfaset in sorted(arcs.items()):
-                for st in states:
-                    if st.nfaset == nfaset:
-                        break
-                else:
-                    st = DFAState(nfaset, finish)
-                    states.append(st)
-                state.addarc(st, label)
-        return states # List of DFAState instances; first one is start
-
-    def dump_nfa(self, name, start, finish):
-        print("Dump of NFA for", name)
-        todo = [start]
-        for i, state in enumerate(todo):
-            print("  State", i, state is finish and "(final)" or "")
-            for label, next in state.arcs:
-                if next in todo:
-                    j = todo.index(next)
-                else:
-                    j = len(todo)
-                    todo.append(next)
-                if label is None:
-                    print("    -> %d" % j)
-                else:
-                    print("    %s -> %d" % (label, j))
-
-    def dump_dfa(self, name, dfa):
-        print("Dump of DFA for", name)
-        for i, state in enumerate(dfa):
-            print("  State", i, state.isfinal and "(final)" or "")
-            for label, next in sorted(state.arcs.items()):
-                print("    %s -> %d" % (label, dfa.index(next)))
-
-    def simplify_dfa(self, dfa):
-        # This is not theoretically optimal, but works well enough.
-        # Algorithm: repeatedly look for two states that have the same
-        # set of arcs (same labels pointing to the same nodes) and
-        # unify them, until things stop changing.
-
-        # dfa is a list of DFAState instances
-        changes = True
-        while changes:
-            changes = False
-            for i, state_i in enumerate(dfa):
-                for j in range(i+1, len(dfa)):
-                    state_j = dfa[j]
-                    if state_i == state_j:
-                        #print "  unify", i, j
-                        del dfa[j]
-                        for state in dfa:
-                            state.unifystate(state_j, state_i)
-                        changes = True
-                        break
-
-    def parse_rhs(self):
-        # RHS: ALT ('|' ALT)*
-        a, z = self.parse_alt()
-        if self.value != "|":
-            return a, z
-        else:
-            aa = NFAState()
-            zz = NFAState()
-            aa.addarc(a)
-            z.addarc(zz)
-            while self.value == "|":
-                self.gettoken()
-                a, z = self.parse_alt()
-                aa.addarc(a)
-                z.addarc(zz)
-            return aa, zz
-
-    def parse_alt(self):
-        # ALT: ITEM+
-        a, b = self.parse_item()
-        while (self.value in ("(", "[") or
-               self.type in (tokenize.NAME, tokenize.STRING)):
-            c, d = self.parse_item()
-            b.addarc(c)
-            b = d
-        return a, b
-
-    def parse_item(self):
-        # ITEM: '[' RHS ']' | ATOM ['+' | '*']
-        if self.value == "[":
-            self.gettoken()
-            a, z = self.parse_rhs()
-            self.expect(tokenize.OP, "]")
-            a.addarc(z)
-            return a, z
-        else:
-            a, z = self.parse_atom()
-            value = self.value
-            if value not in ("+", "*"):
-                return a, z
-            self.gettoken()
-            z.addarc(a)
-            if value == "+":
-                return a, z
-            else:
-                return a, a
-
-    def parse_atom(self):
-        # ATOM: '(' RHS ')' | NAME | STRING
-        if self.value == "(":
-            self.gettoken()
-            a, z = self.parse_rhs()
-            self.expect(tokenize.OP, ")")
-            return a, z
-        elif self.type in (tokenize.NAME, tokenize.STRING):
-            a = NFAState()
-            z = NFAState()
-            a.addarc(z, self.value)
-            self.gettoken()
-            return a, z
-        else:
-            self.raise_error("expected (...) or NAME or STRING, got %s/%s",
-                             self.type, self.value)
-
-    def expect(self, type, value=None):
-        if self.type != type or (value is not None and self.value != value):
-            self.raise_error("expected %s/%s, got %s/%s",
-                             type, value, self.type, self.value)
-        value = self.value
-        self.gettoken()
-        return value
-
-    def gettoken(self):
-        tup = next(self.generator)
-        while tup[0] in (tokenize.COMMENT, tokenize.NL):
-            tup = next(self.generator)
-        self.type, self.value, self.begin, self.end, self.line = tup
-        # print(getattr(tokenize, 'tok_name')[self.type], repr(self.value))
-
-    def raise_error(self, msg, *args):
-        if args:
-            try:
-                msg = msg % args
-            except Exception:
-                msg = " ".join([msg] + list(map(str, args)))
-        raise SyntaxError(msg, (self.filename, self.end[0],
-                                self.end[1], self.line))
-
-class NFAState(object):
-
-    def __init__(self):
-        self.arcs = [] # list of (label, NFAState) pairs
-
-    def addarc(self, next, label=None):
-        assert label is None or isinstance(label, str)
-        assert isinstance(next, NFAState)
-        self.arcs.append((label, next))
-
-class DFAState(object):
-
-    def __init__(self, nfaset, final):
-        assert isinstance(nfaset, set)
-        assert isinstance(next(iter(nfaset)), NFAState)
-        assert isinstance(final, NFAState)
-        self.nfaset = nfaset
-        self.isfinal = final in nfaset
-        self.arcs = {} # map from label to DFAState
-
-    def addarc(self, next, label):
-        assert isinstance(label, str)
-        assert label not in self.arcs
-        assert isinstance(next, DFAState)
-        self.arcs[label] = next
-
-    def unifystate(self, old, new):
-        for label, next in self.arcs.items():
-            if next is old:
-                self.arcs[label] = new
-
-    def __eq__(self, other):
-        # Equality test -- ignore the nfaset instance variable
-        assert isinstance(other, DFAState)
-        if self.isfinal != other.isfinal:
-            return False
-        # Can't just return self.arcs == other.arcs, because that
-        # would invoke this method recursively, with cycles...
-        if len(self.arcs) != len(other.arcs):
-            return False
-        for label, next in self.arcs.items():
-            if next is not other.arcs.get(label):
-                return False
-        return True
-
-    __hash__ = None # For Py3 compatibility.
diff --git a/Parser/pgen/token.py b/Parser/pgen/token.py
index 008e241..2cff62c 100644
--- a/Parser/pgen/token.py
+++ b/Parser/pgen/token.py
@@ -6,25 +6,21 @@
     for line in tokens:
         line = line.strip()
 
-        if not line:
-            continue
-        if line.strip().startswith('#'):
+        if not line or line.startswith("#"):
             continue
 
         name = line.split()[0]
         yield (name, next(numbers))
 
-    yield ('N_TOKENS', next(numbers))
-    yield ('NT_OFFSET', 256)
+    yield ("N_TOKENS", next(numbers))
+    yield ("NT_OFFSET", 256)
 
 
 def generate_opmap(tokens):
     for line in tokens:
         line = line.strip()
 
-        if not line:
-            continue
-        if line.strip().startswith('#'):
+        if not line or line.startswith("#"):
             continue
 
         pieces = line.split()
@@ -39,4 +35,4 @@
     # with the token generation in "generate_tokens" because if this
     # symbol is included in Grammar/Tokens, it will collide with !=
     # as it has the same name (NOTEQUAL).
-    yield ('<>', 'NOTEQUAL')
+    yield ("<>", "NOTEQUAL")
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index aecbceb..f3c1d9b 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -32,10 +32,6 @@
                || c == '_'\
                || (c >= 128))
 
-extern char *PyOS_Readline(FILE *, FILE *, const char *);
-/* Return malloc'ed string including trailing \n;
-   empty malloc'ed string for EOF;
-   NULL if interrupted */
 
 /* Don't ever change this -- it would break the portability of Python code */
 #define TABSIZE 8
@@ -59,7 +55,9 @@
                                             sizeof(struct tok_state));
     if (tok == NULL)
         return NULL;
-    tok->buf = tok->cur = tok->end = tok->inp = tok->start = NULL;
+    tok->buf = tok->cur = tok->inp = NULL;
+    tok->start = NULL;
+    tok->end = NULL;
     tok->done = E_OK;
     tok->fp = NULL;
     tok->input = NULL;
@@ -111,7 +109,9 @@
     tok->decoding_erred = 1;
     if (tok->fp != NULL && tok->buf != NULL) /* see PyTokenizer_Free */
         PyMem_FREE(tok->buf);
-    tok->buf = tok->cur = tok->end = tok->inp = tok->start = NULL;
+    tok->buf = tok->cur = tok->inp = NULL;
+    tok->start = NULL;
+    tok->end = NULL;
     tok->done = E_DECODE;
     return NULL;                /* as if it were EOF */
 }
@@ -664,11 +664,11 @@
    Look for encoding declarations inside STR, and record them
    inside TOK.  */
 
-static const char *
+static char *
 decode_str(const char *input, int single, struct tok_state *tok)
 {
     PyObject* utf8 = NULL;
-    const char *str;
+    char *str;
     const char *s;
     const char *newl[2] = {NULL, NULL};
     int lineno = 0;
@@ -726,16 +726,18 @@
 PyTokenizer_FromString(const char *str, int exec_input)
 {
     struct tok_state *tok = tok_new();
+    char *decoded;
+
     if (tok == NULL)
         return NULL;
-    str = decode_str(str, exec_input, tok);
-    if (str == NULL) {
+    decoded = decode_str(str, exec_input, tok);
+    if (decoded == NULL) {
         PyTokenizer_Free(tok);
         return NULL;
     }
 
-    /* XXX: constify members. */
-    tok->buf = tok->cur = tok->end = tok->inp = (char*)str;
+    tok->buf = tok->cur = tok->inp = decoded;
+    tok->end = decoded;
     return tok;
 }
 
@@ -743,17 +745,18 @@
 PyTokenizer_FromUTF8(const char *str, int exec_input)
 {
     struct tok_state *tok = tok_new();
+    char *translated;
     if (tok == NULL)
         return NULL;
-    tok->input = str = translate_newlines(str, exec_input, tok);
-    if (str == NULL) {
+    tok->input = translated = translate_newlines(str, exec_input, tok);
+    if (translated == NULL) {
         PyTokenizer_Free(tok);
         return NULL;
     }
     tok->decoding_state = STATE_RAW;
     tok->read_coding_spec = 1;
     tok->enc = NULL;
-    tok->str = str;
+    tok->str = translated;
     tok->encoding = (char *)PyMem_MALLOC(6);
     if (!tok->encoding) {
         PyTokenizer_Free(tok);
@@ -761,8 +764,8 @@
     }
     strcpy(tok->encoding, "utf-8");
 
-    /* XXX: constify members. */
-    tok->buf = tok->cur = tok->end = tok->inp = (char*)str;
+    tok->buf = tok->cur = tok->inp = translated;
+    tok->end = translated;
     return tok;
 }
 
@@ -812,7 +815,7 @@
     if (tok->fp != NULL && tok->buf != NULL)
         PyMem_FREE(tok->buf);
     if (tok->input)
-        PyMem_FREE((char *)tok->input);
+        PyMem_FREE(tok->input);
     PyMem_FREE(tok);
 }
 
@@ -1024,10 +1027,12 @@
 tok_backup(struct tok_state *tok, int c)
 {
     if (c != EOF) {
-        if (--tok->cur < tok->buf)
-            Py_FatalError("tok_backup: beginning of buffer");
-        if (*tok->cur != c)
+        if (--tok->cur < tok->buf) {
+            Py_FatalError("tokenizer beginning of buffer");
+        }
+        if (*tok->cur != c) {
             *tok->cur = c;
+        }
     }
 }
 
@@ -1092,24 +1097,53 @@
 verify_identifier(struct tok_state *tok)
 {
     PyObject *s;
-    int result;
     if (tok->decoding_erred)
         return 0;
     s = PyUnicode_DecodeUTF8(tok->start, tok->cur - tok->start, NULL);
     if (s == NULL) {
         if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
-            PyErr_Clear();
-            tok->done = E_IDENTIFIER;
-        } else {
+            tok->done = E_DECODE;
+        }
+        else {
             tok->done = E_ERROR;
         }
         return 0;
     }
-    result = PyUnicode_IsIdentifier(s);
+    Py_ssize_t invalid = _PyUnicode_ScanIdentifier(s);
+    if (invalid < 0) {
+        Py_DECREF(s);
+        tok->done = E_ERROR;
+        return 0;
+    }
+    assert(PyUnicode_GET_LENGTH(s) > 0);
+    if (invalid < PyUnicode_GET_LENGTH(s)) {
+        Py_UCS4 ch = PyUnicode_READ_CHAR(s, invalid);
+        if (invalid + 1 < PyUnicode_GET_LENGTH(s)) {
+            /* Determine the offset in UTF-8 encoded input */
+            Py_SETREF(s, PyUnicode_Substring(s, 0, invalid + 1));
+            if (s != NULL) {
+                Py_SETREF(s, PyUnicode_AsUTF8String(s));
+            }
+            if (s == NULL) {
+                tok->done = E_ERROR;
+                return 0;
+            }
+            tok->cur = (char *)tok->start + PyBytes_GET_SIZE(s);
+        }
+        Py_DECREF(s);
+        // PyUnicode_FromFormatV() does not support %X
+        char hex[9];
+        (void)PyOS_snprintf(hex, sizeof(hex), "%04X", ch);
+        if (Py_UNICODE_ISPRINTABLE(ch)) {
+            syntaxerror(tok, "invalid character '%c' (U+%s)", ch, hex);
+        }
+        else {
+            syntaxerror(tok, "invalid non-printable character U+%s", hex);
+        }
+        return 0;
+    }
     Py_DECREF(s);
-    if (result == 0)
-        tok->done = E_IDENTIFIER;
-    return result;
+    return 1;
 }
 
 static int
@@ -1137,7 +1171,7 @@
 /* Get next token, after space stripping etc. */
 
 static int
-tok_get(struct tok_state *tok, char **p_start, char **p_end)
+tok_get(struct tok_state *tok, const char **p_start, const char **p_end)
 {
     int c;
     int blankline, nonascii;
@@ -1169,8 +1203,9 @@
             }
         }
         tok_backup(tok, c);
-        if (c == '#' || c == '\n') {
+        if (c == '#' || c == '\n' || c == '\\') {
             /* Lines with only whitespace and/or comments
+               and/or a line continuation character
                shouldn't affect the indentation and are
                not passed to the parser as NEWLINE tokens,
                except *totally* empty lines in interactive
@@ -1320,7 +1355,7 @@
                          && ((unsigned char)ignore_end[0] >= 128 || Py_ISALNUM(ignore_end[0]))));
 
                 if (is_type_ignore) {
-                    *p_start = (char *) ignore_end;
+                    *p_start = ignore_end;
                     *p_end = tok->cur;
 
                     /* If this type ignore is the only thing on the line, consume the newline also. */
@@ -1330,7 +1365,7 @@
                     }
                     return TYPE_IGNORE;
                 } else {
-                    *p_start = (char *) type_start;  /* after type_comment_prefix */
+                    *p_start = type_start;  /* after type_comment_prefix */
                     *p_end = tok->cur;
                     return TYPE_COMMENT;
                 }
@@ -1382,6 +1417,7 @@
         if (nonascii && !verify_identifier(tok)) {
             return ERRORTOKEN;
         }
+
         *p_start = tok->start;
         *p_end = tok->cur;
 
@@ -1409,7 +1445,8 @@
                    Look ahead one token to see if that is 'def'. */
 
                 struct tok_state ahead_tok;
-                char *ahead_tok_start = NULL, *ahead_tok_end = NULL;
+                const char *ahead_tok_start = NULL;
+                const char *ahead_tok_end = NULL;
                 int ahead_tok_kind;
 
                 memcpy(&ahead_tok, tok, sizeof(ahead_tok));
@@ -1797,7 +1834,7 @@
 }
 
 int
-PyTokenizer_Get(struct tok_state *tok, char **p_start, char **p_end)
+PyTokenizer_Get(struct tok_state *tok, const char **p_start, const char **p_end)
 {
     int result = tok_get(tok, p_start, p_end);
     if (tok->decoding_erred) {
@@ -1822,7 +1859,9 @@
 {
     struct tok_state *tok;
     FILE *fp;
-    char *p_start =NULL , *p_end =NULL , *encoding = NULL;
+    const char *p_start = NULL;
+    const char *p_end = NULL;
+    char *encoding = NULL;
 
     fd = _Py_dup(fd);
     if (fd < 0) {
diff --git a/Parser/tokenizer.h b/Parser/tokenizer.h
index 92669bf..5660ea3 100644
--- a/Parser/tokenizer.h
+++ b/Parser/tokenizer.h
@@ -26,8 +26,8 @@
     char *buf;          /* Input buffer, or NULL; malloc'ed if fp != NULL */
     char *cur;          /* Next character in buffer */
     char *inp;          /* End of data in buffer */
-    char *end;          /* End of input buffer if buf != NULL */
-    char *start;        /* Start of current token if not NULL */
+    const char *end;    /* End of input buffer if buf != NULL */
+    const char *start;  /* Start of current token if not NULL */
     int done;           /* E_OK normally, E_EOF at EOF, otherwise error code */
     /* NB If done != E_OK, cur must be == inp!!! */
     FILE *fp;           /* Rest of input; NULL if tokenizing a string */
@@ -60,8 +60,8 @@
     PyObject *decoding_readline; /* open(...).readline */
     PyObject *decoding_buffer;
     const char* enc;        /* Encoding for the current str. */
-    const char* str;
-    const char* input; /* Tokenizer's newline translated copy of the string. */
+    char* str;
+    char* input;       /* Tokenizer's newline translated copy of the string. */
 
     int type_comments;      /* Whether to look for type comments */
 
@@ -78,7 +78,7 @@
 extern struct tok_state *PyTokenizer_FromFile(FILE *, const char*,
                                               const char *, const char *);
 extern void PyTokenizer_Free(struct tok_state *);
-extern int PyTokenizer_Get(struct tok_state *, char **, char **);
+extern int PyTokenizer_Get(struct tok_state *, const char **, const char **);
 
 #define tok_dump _Py_tok_dump
 
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 460d70c..3bf0c37 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -6,10 +6,9 @@
 #undef NDEBUG
 
 #include <Python.h>
-#include "pycore_initconfig.h"   /* _PyConfig_InitCompatConfig() */
-#include "pycore_pystate.h"      /* _PyRuntime */
+#include "pycore_initconfig.h"    // _PyConfig_InitCompatConfig()
+#include "pycore_runtime.h"       // _PyRuntime
 #include <Python.h>
-#include "pythread.h"
 #include <inttypes.h>
 #include <stdio.h>
 #include <wchar.h>
@@ -62,7 +61,6 @@
         _testembed_Py_Initialize();
         mainstate = PyThreadState_Get();
 
-        PyEval_InitThreads();
         PyEval_ReleaseThread(mainstate);
 
         gilstate = PyGILState_Ensure();
@@ -252,9 +250,8 @@
     /* the test doesn't support custom memory allocators */
     putenv("PYTHONMALLOC=");
 
-    /* bpo-20891: Calling PyGILState_Ensure in a non-Python thread before
-       calling PyEval_InitThreads() must not crash. PyGILState_Ensure() must
-       call PyEval_InitThreads() for us in this case. */
+    /* bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
+       crash. */
     PyThread_type_lock lock = PyThread_allocate_lock();
     if (!lock) {
         fprintf(stderr, "PyThread_allocate_lock failed!");
@@ -488,6 +485,9 @@
 
     config.install_signal_handlers = 0;
 
+    putenv("PYTHONOLDPARSER=1");
+    config._use_peg_parser = 0;
+
     /* FIXME: test use_environment */
 
     putenv("PYTHONHASHSEED=42");
@@ -506,7 +506,6 @@
     config.import_time = 1;
 
     config.show_ref_count = 1;
-    config.show_alloc_count = 1;
     /* FIXME: test dump_refs: bpo-34223 */
 
     putenv("PYTHONMALLOCSTATS=0");
@@ -549,6 +548,13 @@
     /* FIXME: test home */
     /* FIXME: test path config: module_search_path .. dll_path */
 
+    putenv("PYTHONPLATLIBDIR=env_platlibdir");
+    status = PyConfig_SetBytesString(&config, &config.platlibdir, "my_platlibdir");
+    if (PyStatus_Exception(status)) {
+        PyConfig_Clear(&config);
+        Py_ExitStatusException(status);
+    }
+
     putenv("PYTHONVERBOSE=0");
     Py_VerboseFlag = 0;
     config.verbose = 1;
@@ -604,6 +610,8 @@
     Py_FrozenFlag = 0;
     config.pathconfig_warnings = 0;
 
+    config._isolated_interpreter = 1;
+
     init_from_config_clear(&config);
 
     dump_config();
@@ -666,6 +674,8 @@
     putenv("PYTHONNOUSERSITE=1");
     putenv("PYTHONFAULTHANDLER=1");
     putenv("PYTHONIOENCODING=iso8859-1:replace");
+    putenv("PYTHONOLDPARSER=1");
+    putenv("PYTHONPLATLIBDIR=env_platlibdir");
 }
 
 
@@ -1332,6 +1342,7 @@
     return 0;
 
 fail:
+    PyConfig_Clear(&config);
     Py_ExitStatusException(status);
 }
 
@@ -1590,6 +1601,46 @@
 }
 
 
+static int test_get_argc_argv(void)
+{
+    PyConfig config;
+    PyConfig_InitPythonConfig(&config);
+
+    wchar_t *argv[] = {L"python3", L"-c",
+                       (L"import sys; "
+                        L"print(f'Py_RunMain(): sys.argv={sys.argv}')"),
+                       L"arg2"};
+    config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
+    config_set_string(&config, &config.program_name, L"./python3");
+
+    // Calling PyConfig_Read() twice must not change Py_GetArgcArgv() result.
+    // The second call is done by Py_InitializeFromConfig().
+    PyStatus status = PyConfig_Read(&config);
+    if (PyStatus_Exception(status)) {
+        PyConfig_Clear(&config);
+        Py_ExitStatusException(status);
+    }
+
+    init_from_config_clear(&config);
+
+    int get_argc;
+    wchar_t **get_argv;
+    Py_GetArgcArgv(&get_argc, &get_argv);
+    printf("argc: %i\n", get_argc);
+    assert(get_argc == Py_ARRAY_LENGTH(argv));
+    for (int i=0; i < get_argc; i++) {
+        printf("argv[%i]: %ls\n", i, get_argv[i]);
+        assert(wcscmp(get_argv[i], argv[i]) == 0);
+    }
+
+    Py_Finalize();
+
+    printf("\n");
+    printf("test ok\n");
+    return 0;
+}
+
+
 /* *********************************************************
  * List of test cases and the function that implements it.
  *
@@ -1647,6 +1698,7 @@
     {"test_init_setpythonhome", test_init_setpythonhome},
     {"test_init_warnoptions", test_init_warnoptions},
     {"test_run_main", test_run_main},
+    {"test_get_argc_argv", test_get_argc_argv},
 
     {"test_open_code_hook", test_open_code_hook},
     {"test_audit", test_audit},
diff --git a/Programs/python.c b/Programs/python.c
index 1cc3c42..84148f7 100644
--- a/Programs/python.c
+++ b/Programs/python.c
@@ -1,7 +1,6 @@
 /* Minimal main program -- everything is loaded from the library */
 
 #include "Python.h"
-#include "pycore_pylifecycle.h"
 
 #ifdef MS_WINDOWS
 int
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index bcf9456..5367cb3 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -4,54 +4,574 @@
 
 #include "Python.h"
 #include "Python-ast.h"
+#include "structmember.h"         // PyMemberDef
 
-static PyTypeObject AST_type;
-static PyTypeObject *mod_type;
-static PyObject* ast2obj_mod(void*);
-static PyTypeObject *Module_type;
-_Py_IDENTIFIER(body);
-_Py_IDENTIFIER(type_ignores);
-static char *Module_fields[]={
+typedef struct {
+    int initialized;
+    PyObject *AST_type;
+    PyObject *Add_singleton;
+    PyObject *Add_type;
+    PyObject *And_singleton;
+    PyObject *And_type;
+    PyObject *AnnAssign_type;
+    PyObject *Assert_type;
+    PyObject *Assign_type;
+    PyObject *AsyncFor_type;
+    PyObject *AsyncFunctionDef_type;
+    PyObject *AsyncWith_type;
+    PyObject *Attribute_type;
+    PyObject *AugAssign_type;
+    PyObject *Await_type;
+    PyObject *BinOp_type;
+    PyObject *BitAnd_singleton;
+    PyObject *BitAnd_type;
+    PyObject *BitOr_singleton;
+    PyObject *BitOr_type;
+    PyObject *BitXor_singleton;
+    PyObject *BitXor_type;
+    PyObject *BoolOp_type;
+    PyObject *Break_type;
+    PyObject *Call_type;
+    PyObject *ClassDef_type;
+    PyObject *Compare_type;
+    PyObject *Constant_type;
+    PyObject *Continue_type;
+    PyObject *Del_singleton;
+    PyObject *Del_type;
+    PyObject *Delete_type;
+    PyObject *DictComp_type;
+    PyObject *Dict_type;
+    PyObject *Div_singleton;
+    PyObject *Div_type;
+    PyObject *Eq_singleton;
+    PyObject *Eq_type;
+    PyObject *ExceptHandler_type;
+    PyObject *Expr_type;
+    PyObject *Expression_type;
+    PyObject *FloorDiv_singleton;
+    PyObject *FloorDiv_type;
+    PyObject *For_type;
+    PyObject *FormattedValue_type;
+    PyObject *FunctionDef_type;
+    PyObject *FunctionType_type;
+    PyObject *GeneratorExp_type;
+    PyObject *Global_type;
+    PyObject *GtE_singleton;
+    PyObject *GtE_type;
+    PyObject *Gt_singleton;
+    PyObject *Gt_type;
+    PyObject *IfExp_type;
+    PyObject *If_type;
+    PyObject *ImportFrom_type;
+    PyObject *Import_type;
+    PyObject *In_singleton;
+    PyObject *In_type;
+    PyObject *Interactive_type;
+    PyObject *Invert_singleton;
+    PyObject *Invert_type;
+    PyObject *IsNot_singleton;
+    PyObject *IsNot_type;
+    PyObject *Is_singleton;
+    PyObject *Is_type;
+    PyObject *JoinedStr_type;
+    PyObject *LShift_singleton;
+    PyObject *LShift_type;
+    PyObject *Lambda_type;
+    PyObject *ListComp_type;
+    PyObject *List_type;
+    PyObject *Load_singleton;
+    PyObject *Load_type;
+    PyObject *LtE_singleton;
+    PyObject *LtE_type;
+    PyObject *Lt_singleton;
+    PyObject *Lt_type;
+    PyObject *MatMult_singleton;
+    PyObject *MatMult_type;
+    PyObject *Mod_singleton;
+    PyObject *Mod_type;
+    PyObject *Module_type;
+    PyObject *Mult_singleton;
+    PyObject *Mult_type;
+    PyObject *Name_type;
+    PyObject *NamedExpr_type;
+    PyObject *Nonlocal_type;
+    PyObject *NotEq_singleton;
+    PyObject *NotEq_type;
+    PyObject *NotIn_singleton;
+    PyObject *NotIn_type;
+    PyObject *Not_singleton;
+    PyObject *Not_type;
+    PyObject *Or_singleton;
+    PyObject *Or_type;
+    PyObject *Pass_type;
+    PyObject *Pow_singleton;
+    PyObject *Pow_type;
+    PyObject *RShift_singleton;
+    PyObject *RShift_type;
+    PyObject *Raise_type;
+    PyObject *Return_type;
+    PyObject *SetComp_type;
+    PyObject *Set_type;
+    PyObject *Slice_type;
+    PyObject *Starred_type;
+    PyObject *Store_singleton;
+    PyObject *Store_type;
+    PyObject *Sub_singleton;
+    PyObject *Sub_type;
+    PyObject *Subscript_type;
+    PyObject *Try_type;
+    PyObject *Tuple_type;
+    PyObject *TypeIgnore_type;
+    PyObject *UAdd_singleton;
+    PyObject *UAdd_type;
+    PyObject *USub_singleton;
+    PyObject *USub_type;
+    PyObject *UnaryOp_type;
+    PyObject *While_type;
+    PyObject *With_type;
+    PyObject *YieldFrom_type;
+    PyObject *Yield_type;
+    PyObject *__dict__;
+    PyObject *__doc__;
+    PyObject *__module__;
+    PyObject *_attributes;
+    PyObject *_fields;
+    PyObject *alias_type;
+    PyObject *annotation;
+    PyObject *arg;
+    PyObject *arg_type;
+    PyObject *args;
+    PyObject *argtypes;
+    PyObject *arguments_type;
+    PyObject *asname;
+    PyObject *ast;
+    PyObject *attr;
+    PyObject *bases;
+    PyObject *body;
+    PyObject *boolop_type;
+    PyObject *cause;
+    PyObject *cmpop_type;
+    PyObject *col_offset;
+    PyObject *comparators;
+    PyObject *comprehension_type;
+    PyObject *context_expr;
+    PyObject *conversion;
+    PyObject *ctx;
+    PyObject *decorator_list;
+    PyObject *defaults;
+    PyObject *elt;
+    PyObject *elts;
+    PyObject *end_col_offset;
+    PyObject *end_lineno;
+    PyObject *exc;
+    PyObject *excepthandler_type;
+    PyObject *expr_context_type;
+    PyObject *expr_type;
+    PyObject *finalbody;
+    PyObject *format_spec;
+    PyObject *func;
+    PyObject *generators;
+    PyObject *handlers;
+    PyObject *id;
+    PyObject *ifs;
+    PyObject *is_async;
+    PyObject *items;
+    PyObject *iter;
+    PyObject *key;
+    PyObject *keys;
+    PyObject *keyword_type;
+    PyObject *keywords;
+    PyObject *kind;
+    PyObject *kw_defaults;
+    PyObject *kwarg;
+    PyObject *kwonlyargs;
+    PyObject *left;
+    PyObject *level;
+    PyObject *lineno;
+    PyObject *lower;
+    PyObject *mod_type;
+    PyObject *module;
+    PyObject *msg;
+    PyObject *name;
+    PyObject *names;
+    PyObject *op;
+    PyObject *operand;
+    PyObject *operator_type;
+    PyObject *ops;
+    PyObject *optional_vars;
+    PyObject *orelse;
+    PyObject *posonlyargs;
+    PyObject *returns;
+    PyObject *right;
+    PyObject *simple;
+    PyObject *slice;
+    PyObject *step;
+    PyObject *stmt_type;
+    PyObject *tag;
+    PyObject *target;
+    PyObject *targets;
+    PyObject *test;
+    PyObject *type;
+    PyObject *type_comment;
+    PyObject *type_ignore_type;
+    PyObject *type_ignores;
+    PyObject *unaryop_type;
+    PyObject *upper;
+    PyObject *value;
+    PyObject *values;
+    PyObject *vararg;
+    PyObject *withitem_type;
+} astmodulestate;
+
+
+// Forward declaration
+static int init_types(astmodulestate *state);
+
+// bpo-41194, bpo-41261, bpo-41631: The _ast module uses a global state.
+static astmodulestate global_ast_state = {0};
+
+static astmodulestate*
+get_global_ast_state(void)
+{
+    astmodulestate* state = &global_ast_state;
+    if (!init_types(state)) {
+        return NULL;
+    }
+    return state;
+}
+
+static astmodulestate*
+get_ast_state(PyObject* Py_UNUSED(module))
+{
+    astmodulestate* state = get_global_ast_state();
+    // get_ast_state() must only be called after _ast module is imported,
+    // and astmodule_exec() calls init_types()
+    assert(state != NULL);
+    return state;
+}
+
+void _PyAST_Fini(void)
+{
+    astmodulestate* state = &global_ast_state;
+    Py_CLEAR(state->AST_type);
+    Py_CLEAR(state->Add_singleton);
+    Py_CLEAR(state->Add_type);
+    Py_CLEAR(state->And_singleton);
+    Py_CLEAR(state->And_type);
+    Py_CLEAR(state->AnnAssign_type);
+    Py_CLEAR(state->Assert_type);
+    Py_CLEAR(state->Assign_type);
+    Py_CLEAR(state->AsyncFor_type);
+    Py_CLEAR(state->AsyncFunctionDef_type);
+    Py_CLEAR(state->AsyncWith_type);
+    Py_CLEAR(state->Attribute_type);
+    Py_CLEAR(state->AugAssign_type);
+    Py_CLEAR(state->Await_type);
+    Py_CLEAR(state->BinOp_type);
+    Py_CLEAR(state->BitAnd_singleton);
+    Py_CLEAR(state->BitAnd_type);
+    Py_CLEAR(state->BitOr_singleton);
+    Py_CLEAR(state->BitOr_type);
+    Py_CLEAR(state->BitXor_singleton);
+    Py_CLEAR(state->BitXor_type);
+    Py_CLEAR(state->BoolOp_type);
+    Py_CLEAR(state->Break_type);
+    Py_CLEAR(state->Call_type);
+    Py_CLEAR(state->ClassDef_type);
+    Py_CLEAR(state->Compare_type);
+    Py_CLEAR(state->Constant_type);
+    Py_CLEAR(state->Continue_type);
+    Py_CLEAR(state->Del_singleton);
+    Py_CLEAR(state->Del_type);
+    Py_CLEAR(state->Delete_type);
+    Py_CLEAR(state->DictComp_type);
+    Py_CLEAR(state->Dict_type);
+    Py_CLEAR(state->Div_singleton);
+    Py_CLEAR(state->Div_type);
+    Py_CLEAR(state->Eq_singleton);
+    Py_CLEAR(state->Eq_type);
+    Py_CLEAR(state->ExceptHandler_type);
+    Py_CLEAR(state->Expr_type);
+    Py_CLEAR(state->Expression_type);
+    Py_CLEAR(state->FloorDiv_singleton);
+    Py_CLEAR(state->FloorDiv_type);
+    Py_CLEAR(state->For_type);
+    Py_CLEAR(state->FormattedValue_type);
+    Py_CLEAR(state->FunctionDef_type);
+    Py_CLEAR(state->FunctionType_type);
+    Py_CLEAR(state->GeneratorExp_type);
+    Py_CLEAR(state->Global_type);
+    Py_CLEAR(state->GtE_singleton);
+    Py_CLEAR(state->GtE_type);
+    Py_CLEAR(state->Gt_singleton);
+    Py_CLEAR(state->Gt_type);
+    Py_CLEAR(state->IfExp_type);
+    Py_CLEAR(state->If_type);
+    Py_CLEAR(state->ImportFrom_type);
+    Py_CLEAR(state->Import_type);
+    Py_CLEAR(state->In_singleton);
+    Py_CLEAR(state->In_type);
+    Py_CLEAR(state->Interactive_type);
+    Py_CLEAR(state->Invert_singleton);
+    Py_CLEAR(state->Invert_type);
+    Py_CLEAR(state->IsNot_singleton);
+    Py_CLEAR(state->IsNot_type);
+    Py_CLEAR(state->Is_singleton);
+    Py_CLEAR(state->Is_type);
+    Py_CLEAR(state->JoinedStr_type);
+    Py_CLEAR(state->LShift_singleton);
+    Py_CLEAR(state->LShift_type);
+    Py_CLEAR(state->Lambda_type);
+    Py_CLEAR(state->ListComp_type);
+    Py_CLEAR(state->List_type);
+    Py_CLEAR(state->Load_singleton);
+    Py_CLEAR(state->Load_type);
+    Py_CLEAR(state->LtE_singleton);
+    Py_CLEAR(state->LtE_type);
+    Py_CLEAR(state->Lt_singleton);
+    Py_CLEAR(state->Lt_type);
+    Py_CLEAR(state->MatMult_singleton);
+    Py_CLEAR(state->MatMult_type);
+    Py_CLEAR(state->Mod_singleton);
+    Py_CLEAR(state->Mod_type);
+    Py_CLEAR(state->Module_type);
+    Py_CLEAR(state->Mult_singleton);
+    Py_CLEAR(state->Mult_type);
+    Py_CLEAR(state->Name_type);
+    Py_CLEAR(state->NamedExpr_type);
+    Py_CLEAR(state->Nonlocal_type);
+    Py_CLEAR(state->NotEq_singleton);
+    Py_CLEAR(state->NotEq_type);
+    Py_CLEAR(state->NotIn_singleton);
+    Py_CLEAR(state->NotIn_type);
+    Py_CLEAR(state->Not_singleton);
+    Py_CLEAR(state->Not_type);
+    Py_CLEAR(state->Or_singleton);
+    Py_CLEAR(state->Or_type);
+    Py_CLEAR(state->Pass_type);
+    Py_CLEAR(state->Pow_singleton);
+    Py_CLEAR(state->Pow_type);
+    Py_CLEAR(state->RShift_singleton);
+    Py_CLEAR(state->RShift_type);
+    Py_CLEAR(state->Raise_type);
+    Py_CLEAR(state->Return_type);
+    Py_CLEAR(state->SetComp_type);
+    Py_CLEAR(state->Set_type);
+    Py_CLEAR(state->Slice_type);
+    Py_CLEAR(state->Starred_type);
+    Py_CLEAR(state->Store_singleton);
+    Py_CLEAR(state->Store_type);
+    Py_CLEAR(state->Sub_singleton);
+    Py_CLEAR(state->Sub_type);
+    Py_CLEAR(state->Subscript_type);
+    Py_CLEAR(state->Try_type);
+    Py_CLEAR(state->Tuple_type);
+    Py_CLEAR(state->TypeIgnore_type);
+    Py_CLEAR(state->UAdd_singleton);
+    Py_CLEAR(state->UAdd_type);
+    Py_CLEAR(state->USub_singleton);
+    Py_CLEAR(state->USub_type);
+    Py_CLEAR(state->UnaryOp_type);
+    Py_CLEAR(state->While_type);
+    Py_CLEAR(state->With_type);
+    Py_CLEAR(state->YieldFrom_type);
+    Py_CLEAR(state->Yield_type);
+    Py_CLEAR(state->__dict__);
+    Py_CLEAR(state->__doc__);
+    Py_CLEAR(state->__module__);
+    Py_CLEAR(state->_attributes);
+    Py_CLEAR(state->_fields);
+    Py_CLEAR(state->alias_type);
+    Py_CLEAR(state->annotation);
+    Py_CLEAR(state->arg);
+    Py_CLEAR(state->arg_type);
+    Py_CLEAR(state->args);
+    Py_CLEAR(state->argtypes);
+    Py_CLEAR(state->arguments_type);
+    Py_CLEAR(state->asname);
+    Py_CLEAR(state->ast);
+    Py_CLEAR(state->attr);
+    Py_CLEAR(state->bases);
+    Py_CLEAR(state->body);
+    Py_CLEAR(state->boolop_type);
+    Py_CLEAR(state->cause);
+    Py_CLEAR(state->cmpop_type);
+    Py_CLEAR(state->col_offset);
+    Py_CLEAR(state->comparators);
+    Py_CLEAR(state->comprehension_type);
+    Py_CLEAR(state->context_expr);
+    Py_CLEAR(state->conversion);
+    Py_CLEAR(state->ctx);
+    Py_CLEAR(state->decorator_list);
+    Py_CLEAR(state->defaults);
+    Py_CLEAR(state->elt);
+    Py_CLEAR(state->elts);
+    Py_CLEAR(state->end_col_offset);
+    Py_CLEAR(state->end_lineno);
+    Py_CLEAR(state->exc);
+    Py_CLEAR(state->excepthandler_type);
+    Py_CLEAR(state->expr_context_type);
+    Py_CLEAR(state->expr_type);
+    Py_CLEAR(state->finalbody);
+    Py_CLEAR(state->format_spec);
+    Py_CLEAR(state->func);
+    Py_CLEAR(state->generators);
+    Py_CLEAR(state->handlers);
+    Py_CLEAR(state->id);
+    Py_CLEAR(state->ifs);
+    Py_CLEAR(state->is_async);
+    Py_CLEAR(state->items);
+    Py_CLEAR(state->iter);
+    Py_CLEAR(state->key);
+    Py_CLEAR(state->keys);
+    Py_CLEAR(state->keyword_type);
+    Py_CLEAR(state->keywords);
+    Py_CLEAR(state->kind);
+    Py_CLEAR(state->kw_defaults);
+    Py_CLEAR(state->kwarg);
+    Py_CLEAR(state->kwonlyargs);
+    Py_CLEAR(state->left);
+    Py_CLEAR(state->level);
+    Py_CLEAR(state->lineno);
+    Py_CLEAR(state->lower);
+    Py_CLEAR(state->mod_type);
+    Py_CLEAR(state->module);
+    Py_CLEAR(state->msg);
+    Py_CLEAR(state->name);
+    Py_CLEAR(state->names);
+    Py_CLEAR(state->op);
+    Py_CLEAR(state->operand);
+    Py_CLEAR(state->operator_type);
+    Py_CLEAR(state->ops);
+    Py_CLEAR(state->optional_vars);
+    Py_CLEAR(state->orelse);
+    Py_CLEAR(state->posonlyargs);
+    Py_CLEAR(state->returns);
+    Py_CLEAR(state->right);
+    Py_CLEAR(state->simple);
+    Py_CLEAR(state->slice);
+    Py_CLEAR(state->step);
+    Py_CLEAR(state->stmt_type);
+    Py_CLEAR(state->tag);
+    Py_CLEAR(state->target);
+    Py_CLEAR(state->targets);
+    Py_CLEAR(state->test);
+    Py_CLEAR(state->type);
+    Py_CLEAR(state->type_comment);
+    Py_CLEAR(state->type_ignore_type);
+    Py_CLEAR(state->type_ignores);
+    Py_CLEAR(state->unaryop_type);
+    Py_CLEAR(state->upper);
+    Py_CLEAR(state->value);
+    Py_CLEAR(state->values);
+    Py_CLEAR(state->vararg);
+    Py_CLEAR(state->withitem_type);
+
+    state->initialized = 0;
+}
+
+static int init_identifiers(astmodulestate *state)
+{
+    if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0;
+    if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0;
+    if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0;
+    if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return 0;
+    if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return 0;
+    if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return 0;
+    if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return 0;
+    if ((state->args = PyUnicode_InternFromString("args")) == NULL) return 0;
+    if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return 0;
+    if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return 0;
+    if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0;
+    if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
+    if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
+    if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
+    if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
+    if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0;
+    if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0;
+    if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0;
+    if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return 0;
+    if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return 0;
+    if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return 0;
+    if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return 0;
+    if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return 0;
+    if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return 0;
+    if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return 0;
+    if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return 0;
+    if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return 0;
+    if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return 0;
+    if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return 0;
+    if ((state->func = PyUnicode_InternFromString("func")) == NULL) return 0;
+    if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return 0;
+    if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return 0;
+    if ((state->id = PyUnicode_InternFromString("id")) == NULL) return 0;
+    if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return 0;
+    if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return 0;
+    if ((state->items = PyUnicode_InternFromString("items")) == NULL) return 0;
+    if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return 0;
+    if ((state->key = PyUnicode_InternFromString("key")) == NULL) return 0;
+    if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return 0;
+    if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return 0;
+    if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0;
+    if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0;
+    if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0;
+    if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0;
+    if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0;
+    if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0;
+    if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return 0;
+    if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return 0;
+    if ((state->module = PyUnicode_InternFromString("module")) == NULL) return 0;
+    if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return 0;
+    if ((state->name = PyUnicode_InternFromString("name")) == NULL) return 0;
+    if ((state->names = PyUnicode_InternFromString("names")) == NULL) return 0;
+    if ((state->op = PyUnicode_InternFromString("op")) == NULL) return 0;
+    if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return 0;
+    if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return 0;
+    if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return 0;
+    if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return 0;
+    if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0;
+    if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0;
+    if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0;
+    if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0;
+    if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return 0;
+    if ((state->step = PyUnicode_InternFromString("step")) == NULL) return 0;
+    if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return 0;
+    if ((state->target = PyUnicode_InternFromString("target")) == NULL) return 0;
+    if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return 0;
+    if ((state->test = PyUnicode_InternFromString("test")) == NULL) return 0;
+    if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
+    if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
+    if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
+    if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
+    if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
+    if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
+    if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return 0;
+    return 1;
+};
+
+static PyObject* ast2obj_mod(astmodulestate *state, void*);
+static const char * const Module_fields[]={
     "body",
     "type_ignores",
 };
-static PyTypeObject *Interactive_type;
-static char *Interactive_fields[]={
+static const char * const Interactive_fields[]={
     "body",
 };
-static PyTypeObject *Expression_type;
-static char *Expression_fields[]={
+static const char * const Expression_fields[]={
     "body",
 };
-static PyTypeObject *FunctionType_type;
-_Py_IDENTIFIER(argtypes);
-_Py_IDENTIFIER(returns);
-static char *FunctionType_fields[]={
+static const char * const FunctionType_fields[]={
     "argtypes",
     "returns",
 };
-static PyTypeObject *Suite_type;
-static char *Suite_fields[]={
-    "body",
-};
-static PyTypeObject *stmt_type;
-_Py_IDENTIFIER(lineno);
-_Py_IDENTIFIER(col_offset);
-_Py_IDENTIFIER(end_lineno);
-_Py_IDENTIFIER(end_col_offset);
-static char *stmt_attributes[] = {
+static const char * const stmt_attributes[] = {
     "lineno",
     "col_offset",
     "end_lineno",
     "end_col_offset",
 };
-static PyObject* ast2obj_stmt(void*);
-static PyTypeObject *FunctionDef_type;
-_Py_IDENTIFIER(name);
-_Py_IDENTIFIER(args);
-_Py_IDENTIFIER(decorator_list);
-_Py_IDENTIFIER(type_comment);
-static char *FunctionDef_fields[]={
+static PyObject* ast2obj_stmt(astmodulestate *state, void*);
+static const char * const FunctionDef_fields[]={
     "name",
     "args",
     "body",
@@ -59,8 +579,7 @@
     "returns",
     "type_comment",
 };
-static PyTypeObject *AsyncFunctionDef_type;
-static char *AsyncFunctionDef_fields[]={
+static const char * const AsyncFunctionDef_fields[]={
     "name",
     "args",
     "body",
@@ -68,414 +587,245 @@
     "returns",
     "type_comment",
 };
-static PyTypeObject *ClassDef_type;
-_Py_IDENTIFIER(bases);
-_Py_IDENTIFIER(keywords);
-static char *ClassDef_fields[]={
+static const char * const ClassDef_fields[]={
     "name",
     "bases",
     "keywords",
     "body",
     "decorator_list",
 };
-static PyTypeObject *Return_type;
-_Py_IDENTIFIER(value);
-static char *Return_fields[]={
+static const char * const Return_fields[]={
     "value",
 };
-static PyTypeObject *Delete_type;
-_Py_IDENTIFIER(targets);
-static char *Delete_fields[]={
+static const char * const Delete_fields[]={
     "targets",
 };
-static PyTypeObject *Assign_type;
-static char *Assign_fields[]={
+static const char * const Assign_fields[]={
     "targets",
     "value",
     "type_comment",
 };
-static PyTypeObject *AugAssign_type;
-_Py_IDENTIFIER(target);
-_Py_IDENTIFIER(op);
-static char *AugAssign_fields[]={
+static const char * const AugAssign_fields[]={
     "target",
     "op",
     "value",
 };
-static PyTypeObject *AnnAssign_type;
-_Py_IDENTIFIER(annotation);
-_Py_IDENTIFIER(simple);
-static char *AnnAssign_fields[]={
+static const char * const AnnAssign_fields[]={
     "target",
     "annotation",
     "value",
     "simple",
 };
-static PyTypeObject *For_type;
-_Py_IDENTIFIER(iter);
-_Py_IDENTIFIER(orelse);
-static char *For_fields[]={
+static const char * const For_fields[]={
     "target",
     "iter",
     "body",
     "orelse",
     "type_comment",
 };
-static PyTypeObject *AsyncFor_type;
-static char *AsyncFor_fields[]={
+static const char * const AsyncFor_fields[]={
     "target",
     "iter",
     "body",
     "orelse",
     "type_comment",
 };
-static PyTypeObject *While_type;
-_Py_IDENTIFIER(test);
-static char *While_fields[]={
+static const char * const While_fields[]={
     "test",
     "body",
     "orelse",
 };
-static PyTypeObject *If_type;
-static char *If_fields[]={
+static const char * const If_fields[]={
     "test",
     "body",
     "orelse",
 };
-static PyTypeObject *With_type;
-_Py_IDENTIFIER(items);
-static char *With_fields[]={
+static const char * const With_fields[]={
     "items",
     "body",
     "type_comment",
 };
-static PyTypeObject *AsyncWith_type;
-static char *AsyncWith_fields[]={
+static const char * const AsyncWith_fields[]={
     "items",
     "body",
     "type_comment",
 };
-static PyTypeObject *Raise_type;
-_Py_IDENTIFIER(exc);
-_Py_IDENTIFIER(cause);
-static char *Raise_fields[]={
+static const char * const Raise_fields[]={
     "exc",
     "cause",
 };
-static PyTypeObject *Try_type;
-_Py_IDENTIFIER(handlers);
-_Py_IDENTIFIER(finalbody);
-static char *Try_fields[]={
+static const char * const Try_fields[]={
     "body",
     "handlers",
     "orelse",
     "finalbody",
 };
-static PyTypeObject *Assert_type;
-_Py_IDENTIFIER(msg);
-static char *Assert_fields[]={
+static const char * const Assert_fields[]={
     "test",
     "msg",
 };
-static PyTypeObject *Import_type;
-_Py_IDENTIFIER(names);
-static char *Import_fields[]={
+static const char * const Import_fields[]={
     "names",
 };
-static PyTypeObject *ImportFrom_type;
-_Py_IDENTIFIER(module);
-_Py_IDENTIFIER(level);
-static char *ImportFrom_fields[]={
+static const char * const ImportFrom_fields[]={
     "module",
     "names",
     "level",
 };
-static PyTypeObject *Global_type;
-static char *Global_fields[]={
+static const char * const Global_fields[]={
     "names",
 };
-static PyTypeObject *Nonlocal_type;
-static char *Nonlocal_fields[]={
+static const char * const Nonlocal_fields[]={
     "names",
 };
-static PyTypeObject *Expr_type;
-static char *Expr_fields[]={
+static const char * const Expr_fields[]={
     "value",
 };
-static PyTypeObject *Pass_type;
-static PyTypeObject *Break_type;
-static PyTypeObject *Continue_type;
-static PyTypeObject *expr_type;
-static char *expr_attributes[] = {
+static const char * const expr_attributes[] = {
     "lineno",
     "col_offset",
     "end_lineno",
     "end_col_offset",
 };
-static PyObject* ast2obj_expr(void*);
-static PyTypeObject *BoolOp_type;
-_Py_IDENTIFIER(values);
-static char *BoolOp_fields[]={
+static PyObject* ast2obj_expr(astmodulestate *state, void*);
+static const char * const BoolOp_fields[]={
     "op",
     "values",
 };
-static PyTypeObject *NamedExpr_type;
-static char *NamedExpr_fields[]={
+static const char * const NamedExpr_fields[]={
     "target",
     "value",
 };
-static PyTypeObject *BinOp_type;
-_Py_IDENTIFIER(left);
-_Py_IDENTIFIER(right);
-static char *BinOp_fields[]={
+static const char * const BinOp_fields[]={
     "left",
     "op",
     "right",
 };
-static PyTypeObject *UnaryOp_type;
-_Py_IDENTIFIER(operand);
-static char *UnaryOp_fields[]={
+static const char * const UnaryOp_fields[]={
     "op",
     "operand",
 };
-static PyTypeObject *Lambda_type;
-static char *Lambda_fields[]={
+static const char * const Lambda_fields[]={
     "args",
     "body",
 };
-static PyTypeObject *IfExp_type;
-static char *IfExp_fields[]={
+static const char * const IfExp_fields[]={
     "test",
     "body",
     "orelse",
 };
-static PyTypeObject *Dict_type;
-_Py_IDENTIFIER(keys);
-static char *Dict_fields[]={
+static const char * const Dict_fields[]={
     "keys",
     "values",
 };
-static PyTypeObject *Set_type;
-_Py_IDENTIFIER(elts);
-static char *Set_fields[]={
+static const char * const Set_fields[]={
     "elts",
 };
-static PyTypeObject *ListComp_type;
-_Py_IDENTIFIER(elt);
-_Py_IDENTIFIER(generators);
-static char *ListComp_fields[]={
+static const char * const ListComp_fields[]={
     "elt",
     "generators",
 };
-static PyTypeObject *SetComp_type;
-static char *SetComp_fields[]={
+static const char * const SetComp_fields[]={
     "elt",
     "generators",
 };
-static PyTypeObject *DictComp_type;
-_Py_IDENTIFIER(key);
-static char *DictComp_fields[]={
+static const char * const DictComp_fields[]={
     "key",
     "value",
     "generators",
 };
-static PyTypeObject *GeneratorExp_type;
-static char *GeneratorExp_fields[]={
+static const char * const GeneratorExp_fields[]={
     "elt",
     "generators",
 };
-static PyTypeObject *Await_type;
-static char *Await_fields[]={
+static const char * const Await_fields[]={
     "value",
 };
-static PyTypeObject *Yield_type;
-static char *Yield_fields[]={
+static const char * const Yield_fields[]={
     "value",
 };
-static PyTypeObject *YieldFrom_type;
-static char *YieldFrom_fields[]={
+static const char * const YieldFrom_fields[]={
     "value",
 };
-static PyTypeObject *Compare_type;
-_Py_IDENTIFIER(ops);
-_Py_IDENTIFIER(comparators);
-static char *Compare_fields[]={
+static const char * const Compare_fields[]={
     "left",
     "ops",
     "comparators",
 };
-static PyTypeObject *Call_type;
-_Py_IDENTIFIER(func);
-static char *Call_fields[]={
+static const char * const Call_fields[]={
     "func",
     "args",
     "keywords",
 };
-static PyTypeObject *FormattedValue_type;
-_Py_IDENTIFIER(conversion);
-_Py_IDENTIFIER(format_spec);
-static char *FormattedValue_fields[]={
+static const char * const FormattedValue_fields[]={
     "value",
     "conversion",
     "format_spec",
 };
-static PyTypeObject *JoinedStr_type;
-static char *JoinedStr_fields[]={
+static const char * const JoinedStr_fields[]={
     "values",
 };
-static PyTypeObject *Constant_type;
-_Py_IDENTIFIER(kind);
-static char *Constant_fields[]={
+static const char * const Constant_fields[]={
     "value",
     "kind",
 };
-static PyTypeObject *Attribute_type;
-_Py_IDENTIFIER(attr);
-_Py_IDENTIFIER(ctx);
-static char *Attribute_fields[]={
+static const char * const Attribute_fields[]={
     "value",
     "attr",
     "ctx",
 };
-static PyTypeObject *Subscript_type;
-_Py_IDENTIFIER(slice);
-static char *Subscript_fields[]={
+static const char * const Subscript_fields[]={
     "value",
     "slice",
     "ctx",
 };
-static PyTypeObject *Starred_type;
-static char *Starred_fields[]={
+static const char * const Starred_fields[]={
     "value",
     "ctx",
 };
-static PyTypeObject *Name_type;
-_Py_IDENTIFIER(id);
-static char *Name_fields[]={
+static const char * const Name_fields[]={
     "id",
     "ctx",
 };
-static PyTypeObject *List_type;
-static char *List_fields[]={
+static const char * const List_fields[]={
     "elts",
     "ctx",
 };
-static PyTypeObject *Tuple_type;
-static char *Tuple_fields[]={
+static const char * const Tuple_fields[]={
     "elts",
     "ctx",
 };
-static PyTypeObject *expr_context_type;
-static PyObject *Load_singleton, *Store_singleton, *Del_singleton,
-*AugLoad_singleton, *AugStore_singleton, *Param_singleton;
-static PyObject* ast2obj_expr_context(expr_context_ty);
-static PyTypeObject *Load_type;
-static PyTypeObject *Store_type;
-static PyTypeObject *Del_type;
-static PyTypeObject *AugLoad_type;
-static PyTypeObject *AugStore_type;
-static PyTypeObject *Param_type;
-static PyTypeObject *slice_type;
-static PyObject* ast2obj_slice(void*);
-static PyTypeObject *Slice_type;
-_Py_IDENTIFIER(lower);
-_Py_IDENTIFIER(upper);
-_Py_IDENTIFIER(step);
-static char *Slice_fields[]={
+static const char * const Slice_fields[]={
     "lower",
     "upper",
     "step",
 };
-static PyTypeObject *ExtSlice_type;
-_Py_IDENTIFIER(dims);
-static char *ExtSlice_fields[]={
-    "dims",
-};
-static PyTypeObject *Index_type;
-static char *Index_fields[]={
-    "value",
-};
-static PyTypeObject *boolop_type;
-static PyObject *And_singleton, *Or_singleton;
-static PyObject* ast2obj_boolop(boolop_ty);
-static PyTypeObject *And_type;
-static PyTypeObject *Or_type;
-static PyTypeObject *operator_type;
-static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
-*MatMult_singleton, *Div_singleton, *Mod_singleton, *Pow_singleton,
-*LShift_singleton, *RShift_singleton, *BitOr_singleton, *BitXor_singleton,
-*BitAnd_singleton, *FloorDiv_singleton;
-static PyObject* ast2obj_operator(operator_ty);
-static PyTypeObject *Add_type;
-static PyTypeObject *Sub_type;
-static PyTypeObject *Mult_type;
-static PyTypeObject *MatMult_type;
-static PyTypeObject *Div_type;
-static PyTypeObject *Mod_type;
-static PyTypeObject *Pow_type;
-static PyTypeObject *LShift_type;
-static PyTypeObject *RShift_type;
-static PyTypeObject *BitOr_type;
-static PyTypeObject *BitXor_type;
-static PyTypeObject *BitAnd_type;
-static PyTypeObject *FloorDiv_type;
-static PyTypeObject *unaryop_type;
-static PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
-*USub_singleton;
-static PyObject* ast2obj_unaryop(unaryop_ty);
-static PyTypeObject *Invert_type;
-static PyTypeObject *Not_type;
-static PyTypeObject *UAdd_type;
-static PyTypeObject *USub_type;
-static PyTypeObject *cmpop_type;
-static PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
-*Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
-*NotIn_singleton;
-static PyObject* ast2obj_cmpop(cmpop_ty);
-static PyTypeObject *Eq_type;
-static PyTypeObject *NotEq_type;
-static PyTypeObject *Lt_type;
-static PyTypeObject *LtE_type;
-static PyTypeObject *Gt_type;
-static PyTypeObject *GtE_type;
-static PyTypeObject *Is_type;
-static PyTypeObject *IsNot_type;
-static PyTypeObject *In_type;
-static PyTypeObject *NotIn_type;
-static PyTypeObject *comprehension_type;
-static PyObject* ast2obj_comprehension(void*);
-_Py_IDENTIFIER(ifs);
-_Py_IDENTIFIER(is_async);
-static char *comprehension_fields[]={
+static PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty);
+static PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty);
+static PyObject* ast2obj_operator(astmodulestate *state, operator_ty);
+static PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty);
+static PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty);
+static PyObject* ast2obj_comprehension(astmodulestate *state, void*);
+static const char * const comprehension_fields[]={
     "target",
     "iter",
     "ifs",
     "is_async",
 };
-static PyTypeObject *excepthandler_type;
-static char *excepthandler_attributes[] = {
+static const char * const excepthandler_attributes[] = {
     "lineno",
     "col_offset",
     "end_lineno",
     "end_col_offset",
 };
-static PyObject* ast2obj_excepthandler(void*);
-static PyTypeObject *ExceptHandler_type;
-_Py_IDENTIFIER(type);
-static char *ExceptHandler_fields[]={
+static PyObject* ast2obj_excepthandler(astmodulestate *state, void*);
+static const char * const ExceptHandler_fields[]={
     "type",
     "name",
     "body",
 };
-static PyTypeObject *arguments_type;
-static PyObject* ast2obj_arguments(void*);
-_Py_IDENTIFIER(posonlyargs);
-_Py_IDENTIFIER(vararg);
-_Py_IDENTIFIER(kwonlyargs);
-_Py_IDENTIFIER(kw_defaults);
-_Py_IDENTIFIER(kwarg);
-_Py_IDENTIFIER(defaults);
-static char *arguments_fields[]={
+static PyObject* ast2obj_arguments(astmodulestate *state, void*);
+static const char * const arguments_fields[]={
     "posonlyargs",
     "args",
     "vararg",
@@ -484,53 +834,46 @@
     "kwarg",
     "defaults",
 };
-static PyTypeObject *arg_type;
-static PyObject* ast2obj_arg(void*);
-static char *arg_attributes[] = {
+static PyObject* ast2obj_arg(astmodulestate *state, void*);
+static const char * const arg_attributes[] = {
     "lineno",
     "col_offset",
     "end_lineno",
     "end_col_offset",
 };
-_Py_IDENTIFIER(arg);
-static char *arg_fields[]={
+static const char * const arg_fields[]={
     "arg",
     "annotation",
     "type_comment",
 };
-static PyTypeObject *keyword_type;
-static PyObject* ast2obj_keyword(void*);
-static char *keyword_fields[]={
+static PyObject* ast2obj_keyword(astmodulestate *state, void*);
+static const char * const keyword_attributes[] = {
+    "lineno",
+    "col_offset",
+    "end_lineno",
+    "end_col_offset",
+};
+static const char * const keyword_fields[]={
     "arg",
     "value",
 };
-static PyTypeObject *alias_type;
-static PyObject* ast2obj_alias(void*);
-_Py_IDENTIFIER(asname);
-static char *alias_fields[]={
+static PyObject* ast2obj_alias(astmodulestate *state, void*);
+static const char * const alias_fields[]={
     "name",
     "asname",
 };
-static PyTypeObject *withitem_type;
-static PyObject* ast2obj_withitem(void*);
-_Py_IDENTIFIER(context_expr);
-_Py_IDENTIFIER(optional_vars);
-static char *withitem_fields[]={
+static PyObject* ast2obj_withitem(astmodulestate *state, void*);
+static const char * const withitem_fields[]={
     "context_expr",
     "optional_vars",
 };
-static PyTypeObject *type_ignore_type;
-static PyObject* ast2obj_type_ignore(void*);
-static PyTypeObject *TypeIgnore_type;
-_Py_IDENTIFIER(tag);
-static char *TypeIgnore_fields[]={
+static PyObject* ast2obj_type_ignore(astmodulestate *state, void*);
+static const char * const TypeIgnore_fields[]={
     "lineno",
     "tag",
 };
 
 
-_Py_IDENTIFIER(_fields);
-_Py_IDENTIFIER(_attributes);
 
 typedef struct {
     PyObject_HEAD
@@ -541,14 +884,19 @@
 ast_dealloc(AST_object *self)
 {
     /* bpo-31095: UnTrack is needed before calling any callbacks */
+    PyTypeObject *tp = Py_TYPE(self);
     PyObject_GC_UnTrack(self);
     Py_CLEAR(self->dict);
-    Py_TYPE(self)->tp_free(self);
+    freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
+    assert(free_func != NULL);
+    free_func(self);
+    Py_DECREF(tp);
 }
 
 static int
 ast_traverse(AST_object *self, visitproc visit, void *arg)
 {
+    Py_VISIT(Py_TYPE(self));
     Py_VISIT(self->dict);
     return 0;
 }
@@ -563,10 +911,15 @@
 static int
 ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
 {
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
+        return -1;
+    }
+
     Py_ssize_t i, numfields = 0;
     int res = -1;
     PyObject *key, *value, *fields;
-    if (_PyObject_LookupAttrId((PyObject*)Py_TYPE(self), &PyId__fields, &fields) < 0) {
+    if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
         goto cleanup;
     }
     if (fields) {
@@ -580,7 +933,7 @@
     if (numfields < PyTuple_GET_SIZE(args)) {
         PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
                      "%zd positional argument%s",
-                     Py_TYPE(self)->tp_name,
+                     _PyType_Name(Py_TYPE(self)),
                      numfields, numfields == 1 ? "" : "s");
         res = -1;
         goto cleanup;
@@ -634,9 +987,13 @@
 static PyObject *
 ast_type_reduce(PyObject *self, PyObject *unused)
 {
-    _Py_IDENTIFIER(__dict__);
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
+        return NULL;
+    }
+
     PyObject *dict;
-    if (_PyObject_LookupAttrId(self, &PyId___dict__, &dict) < 0) {
+    if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
         return NULL;
     }
     if (dict) {
@@ -645,6 +1002,11 @@
     return Py_BuildValue("O()", Py_TYPE(self));
 }
 
+static PyMemberDef ast_type_members[] = {
+    {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
+    {NULL}  /* Sentinel */
+};
+
 static PyMethodDef ast_type_methods[] = {
     {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
     {NULL}
@@ -655,96 +1017,79 @@
     {NULL}
 };
 
-static PyTypeObject AST_type = {
-    PyVarObject_HEAD_INIT(&PyType_Type, 0)
-    "_ast.AST",
-    sizeof(AST_object),
-    0,
-    (destructor)ast_dealloc, /* tp_dealloc */
-    0,                       /* tp_vectorcall_offset */
-    0,                       /* tp_getattr */
-    0,                       /* tp_setattr */
-    0,                       /* tp_as_async */
-    0,                       /* tp_repr */
-    0,                       /* tp_as_number */
-    0,                       /* tp_as_sequence */
-    0,                       /* tp_as_mapping */
-    0,                       /* tp_hash */
-    0,                       /* tp_call */
-    0,                       /* tp_str */
-    PyObject_GenericGetAttr, /* tp_getattro */
-    PyObject_GenericSetAttr, /* tp_setattro */
-    0,                       /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */
-    0,                       /* tp_doc */
-    (traverseproc)ast_traverse, /* tp_traverse */
-    (inquiry)ast_clear,      /* tp_clear */
-    0,                       /* tp_richcompare */
-    0,                       /* tp_weaklistoffset */
-    0,                       /* tp_iter */
-    0,                       /* tp_iternext */
-    ast_type_methods,        /* tp_methods */
-    0,                       /* tp_members */
-    ast_type_getsets,        /* tp_getset */
-    0,                       /* tp_base */
-    0,                       /* tp_dict */
-    0,                       /* tp_descr_get */
-    0,                       /* tp_descr_set */
-    offsetof(AST_object, dict),/* tp_dictoffset */
-    (initproc)ast_type_init, /* tp_init */
-    PyType_GenericAlloc,     /* tp_alloc */
-    PyType_GenericNew,       /* tp_new */
-    PyObject_GC_Del,         /* tp_free */
+static PyType_Slot AST_type_slots[] = {
+    {Py_tp_dealloc, ast_dealloc},
+    {Py_tp_getattro, PyObject_GenericGetAttr},
+    {Py_tp_setattro, PyObject_GenericSetAttr},
+    {Py_tp_traverse, ast_traverse},
+    {Py_tp_clear, ast_clear},
+    {Py_tp_members, ast_type_members},
+    {Py_tp_methods, ast_type_methods},
+    {Py_tp_getset, ast_type_getsets},
+    {Py_tp_init, ast_type_init},
+    {Py_tp_alloc, PyType_GenericAlloc},
+    {Py_tp_new, PyType_GenericNew},
+    {Py_tp_free, PyObject_GC_Del},
+    {0, 0},
 };
 
+static PyType_Spec AST_type_spec = {
+    "ast.AST",
+    sizeof(AST_object),
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
+    AST_type_slots
+};
 
-static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
+static PyObject *
+make_type(astmodulestate *state, const char *type, PyObject* base,
+          const char* const* fields, int num_fields, const char *doc)
 {
-    _Py_IDENTIFIER(__module__);
-    _Py_IDENTIFIER(_ast);
     PyObject *fnames, *result;
     int i;
     fnames = PyTuple_New(num_fields);
     if (!fnames) return NULL;
     for (i = 0; i < num_fields; i++) {
-        PyObject *field = PyUnicode_FromString(fields[i]);
+        PyObject *field = PyUnicode_InternFromString(fields[i]);
         if (!field) {
             Py_DECREF(fnames);
             return NULL;
         }
         PyTuple_SET_ITEM(fnames, i, field);
     }
-    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}",
+    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOs}",
                     type, base,
-                    _PyUnicode_FromId(&PyId__fields), fnames,
-                    _PyUnicode_FromId(&PyId___module__),
-                    _PyUnicode_FromId(&PyId__ast));
+                    state->_fields, fnames,
+                    state->__module__,
+                    state->ast,
+                    state->__doc__, doc);
     Py_DECREF(fnames);
-    return (PyTypeObject*)result;
+    return result;
 }
 
-static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
+static int
+add_attributes(astmodulestate *state, PyObject *type, const char * const *attrs, int num_fields)
 {
     int i, result;
     PyObject *s, *l = PyTuple_New(num_fields);
     if (!l)
         return 0;
     for (i = 0; i < num_fields; i++) {
-        s = PyUnicode_FromString(attrs[i]);
+        s = PyUnicode_InternFromString(attrs[i]);
         if (!s) {
             Py_DECREF(l);
             return 0;
         }
         PyTuple_SET_ITEM(l, i, s);
     }
-    result = _PyObject_SetAttrId((PyObject*)type, &PyId__attributes, l) >= 0;
+    result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
     Py_DECREF(l);
     return result;
 }
 
 /* Conversion AST -> Python */
 
-static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
+static PyObject* ast2obj_list(astmodulestate *state, asdl_seq *seq, PyObject* (*func)(astmodulestate *state, void*))
 {
     Py_ssize_t i, n = asdl_seq_LEN(seq);
     PyObject *result = PyList_New(n);
@@ -752,7 +1097,7 @@
     if (!result)
         return NULL;
     for (i = 0; i < n; i++) {
-        value = func(asdl_seq_GET(seq, i));
+        value = func(state, asdl_seq_GET(seq, i));
         if (!value) {
             Py_DECREF(result);
             return NULL;
@@ -762,27 +1107,25 @@
     return result;
 }
 
-static PyObject* ast2obj_object(void *o)
+static PyObject* ast2obj_object(astmodulestate *Py_UNUSED(state), void *o)
 {
     if (!o)
         o = Py_None;
     Py_INCREF((PyObject*)o);
     return (PyObject*)o;
 }
-#define ast2obj_singleton ast2obj_object
 #define ast2obj_constant ast2obj_object
 #define ast2obj_identifier ast2obj_object
 #define ast2obj_string ast2obj_object
-#define ast2obj_bytes ast2obj_object
 
-static PyObject* ast2obj_int(long b)
+static PyObject* ast2obj_int(astmodulestate *Py_UNUSED(state), long b)
 {
     return PyLong_FromLong(b);
 }
 
 /* Conversion Python -> AST */
 
-static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_object(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (obj == Py_None)
         obj = NULL;
@@ -797,7 +1140,7 @@
     return 0;
 }
 
-static int obj2ast_constant(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_constant(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (PyArena_AddPyObject(arena, obj) < 0) {
         *out = NULL;
@@ -808,25 +1151,25 @@
     return 0;
 }
 
-static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_identifier(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
         PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
         return 1;
     }
-    return obj2ast_object(obj, out, arena);
+    return obj2ast_object(state, obj, out, arena);
 }
 
-static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_string(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
 {
     if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
         PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
         return 1;
     }
-    return obj2ast_object(obj, out, arena);
+    return obj2ast_object(state, obj, out, arena);
 }
 
-static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
+static int obj2ast_int(astmodulestate* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
 {
     int i;
     if (!PyLong_Check(obj)) {
@@ -841,16 +1184,13 @@
     return 0;
 }
 
-static int add_ast_fields(void)
+static int add_ast_fields(astmodulestate *state)
 {
-    PyObject *empty_tuple, *d;
-    if (PyType_Ready(&AST_type) < 0)
-        return -1;
-    d = AST_type.tp_dict;
+    PyObject *empty_tuple;
     empty_tuple = PyTuple_New(0);
     if (!empty_tuple ||
-        _PyDict_SetItemId(d, &PyId__fields, empty_tuple) < 0 ||
-        _PyDict_SetItemId(d, &PyId__attributes, empty_tuple) < 0) {
+        PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
+        PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
         Py_XDECREF(empty_tuple);
         return -1;
     }
@@ -859,359 +1199,717 @@
 }
 
 
-static int init_types(void)
+static int init_types(astmodulestate *state)
 {
-    static int initialized;
-    if (initialized) return 1;
-    if (add_ast_fields() < 0) return 0;
-    mod_type = make_type("mod", &AST_type, NULL, 0);
-    if (!mod_type) return 0;
-    if (!add_attributes(mod_type, NULL, 0)) return 0;
-    Module_type = make_type("Module", mod_type, Module_fields, 2);
-    if (!Module_type) return 0;
-    Interactive_type = make_type("Interactive", mod_type, Interactive_fields,
-                                 1);
-    if (!Interactive_type) return 0;
-    Expression_type = make_type("Expression", mod_type, Expression_fields, 1);
-    if (!Expression_type) return 0;
-    FunctionType_type = make_type("FunctionType", mod_type,
-                                  FunctionType_fields, 2);
-    if (!FunctionType_type) return 0;
-    Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
-    if (!Suite_type) return 0;
-    stmt_type = make_type("stmt", &AST_type, NULL, 0);
-    if (!stmt_type) return 0;
-    if (!add_attributes(stmt_type, stmt_attributes, 4)) return 0;
-    FunctionDef_type = make_type("FunctionDef", stmt_type, FunctionDef_fields,
-                                 6);
-    if (!FunctionDef_type) return 0;
-    AsyncFunctionDef_type = make_type("AsyncFunctionDef", stmt_type,
-                                      AsyncFunctionDef_fields, 6);
-    if (!AsyncFunctionDef_type) return 0;
-    ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 5);
-    if (!ClassDef_type) return 0;
-    Return_type = make_type("Return", stmt_type, Return_fields, 1);
-    if (!Return_type) return 0;
-    Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
-    if (!Delete_type) return 0;
-    Assign_type = make_type("Assign", stmt_type, Assign_fields, 3);
-    if (!Assign_type) return 0;
-    AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
-    if (!AugAssign_type) return 0;
-    AnnAssign_type = make_type("AnnAssign", stmt_type, AnnAssign_fields, 4);
-    if (!AnnAssign_type) return 0;
-    For_type = make_type("For", stmt_type, For_fields, 5);
-    if (!For_type) return 0;
-    AsyncFor_type = make_type("AsyncFor", stmt_type, AsyncFor_fields, 5);
-    if (!AsyncFor_type) return 0;
-    While_type = make_type("While", stmt_type, While_fields, 3);
-    if (!While_type) return 0;
-    If_type = make_type("If", stmt_type, If_fields, 3);
-    if (!If_type) return 0;
-    With_type = make_type("With", stmt_type, With_fields, 3);
-    if (!With_type) return 0;
-    AsyncWith_type = make_type("AsyncWith", stmt_type, AsyncWith_fields, 3);
-    if (!AsyncWith_type) return 0;
-    Raise_type = make_type("Raise", stmt_type, Raise_fields, 2);
-    if (!Raise_type) return 0;
-    Try_type = make_type("Try", stmt_type, Try_fields, 4);
-    if (!Try_type) return 0;
-    Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
-    if (!Assert_type) return 0;
-    Import_type = make_type("Import", stmt_type, Import_fields, 1);
-    if (!Import_type) return 0;
-    ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields, 3);
-    if (!ImportFrom_type) return 0;
-    Global_type = make_type("Global", stmt_type, Global_fields, 1);
-    if (!Global_type) return 0;
-    Nonlocal_type = make_type("Nonlocal", stmt_type, Nonlocal_fields, 1);
-    if (!Nonlocal_type) return 0;
-    Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
-    if (!Expr_type) return 0;
-    Pass_type = make_type("Pass", stmt_type, NULL, 0);
-    if (!Pass_type) return 0;
-    Break_type = make_type("Break", stmt_type, NULL, 0);
-    if (!Break_type) return 0;
-    Continue_type = make_type("Continue", stmt_type, NULL, 0);
-    if (!Continue_type) return 0;
-    expr_type = make_type("expr", &AST_type, NULL, 0);
-    if (!expr_type) return 0;
-    if (!add_attributes(expr_type, expr_attributes, 4)) return 0;
-    BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
-    if (!BoolOp_type) return 0;
-    NamedExpr_type = make_type("NamedExpr", expr_type, NamedExpr_fields, 2);
-    if (!NamedExpr_type) return 0;
-    BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
-    if (!BinOp_type) return 0;
-    UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
-    if (!UnaryOp_type) return 0;
-    Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
-    if (!Lambda_type) return 0;
-    IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
-    if (!IfExp_type) return 0;
-    Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
-    if (!Dict_type) return 0;
-    Set_type = make_type("Set", expr_type, Set_fields, 1);
-    if (!Set_type) return 0;
-    ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
-    if (!ListComp_type) return 0;
-    SetComp_type = make_type("SetComp", expr_type, SetComp_fields, 2);
-    if (!SetComp_type) return 0;
-    DictComp_type = make_type("DictComp", expr_type, DictComp_fields, 3);
-    if (!DictComp_type) return 0;
-    GeneratorExp_type = make_type("GeneratorExp", expr_type,
-                                  GeneratorExp_fields, 2);
-    if (!GeneratorExp_type) return 0;
-    Await_type = make_type("Await", expr_type, Await_fields, 1);
-    if (!Await_type) return 0;
-    Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
-    if (!Yield_type) return 0;
-    YieldFrom_type = make_type("YieldFrom", expr_type, YieldFrom_fields, 1);
-    if (!YieldFrom_type) return 0;
-    Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
-    if (!Compare_type) return 0;
-    Call_type = make_type("Call", expr_type, Call_fields, 3);
-    if (!Call_type) return 0;
-    FormattedValue_type = make_type("FormattedValue", expr_type,
-                                    FormattedValue_fields, 3);
-    if (!FormattedValue_type) return 0;
-    JoinedStr_type = make_type("JoinedStr", expr_type, JoinedStr_fields, 1);
-    if (!JoinedStr_type) return 0;
-    Constant_type = make_type("Constant", expr_type, Constant_fields, 2);
-    if (!Constant_type) return 0;
-    Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
-    if (!Attribute_type) return 0;
-    Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
-    if (!Subscript_type) return 0;
-    Starred_type = make_type("Starred", expr_type, Starred_fields, 2);
-    if (!Starred_type) return 0;
-    Name_type = make_type("Name", expr_type, Name_fields, 2);
-    if (!Name_type) return 0;
-    List_type = make_type("List", expr_type, List_fields, 2);
-    if (!List_type) return 0;
-    Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
-    if (!Tuple_type) return 0;
-    expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
-    if (!expr_context_type) return 0;
-    if (!add_attributes(expr_context_type, NULL, 0)) return 0;
-    Load_type = make_type("Load", expr_context_type, NULL, 0);
-    if (!Load_type) return 0;
-    Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
-    if (!Load_singleton) return 0;
-    Store_type = make_type("Store", expr_context_type, NULL, 0);
-    if (!Store_type) return 0;
-    Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
-    if (!Store_singleton) return 0;
-    Del_type = make_type("Del", expr_context_type, NULL, 0);
-    if (!Del_type) return 0;
-    Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
-    if (!Del_singleton) return 0;
-    AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
-    if (!AugLoad_type) return 0;
-    AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
-    if (!AugLoad_singleton) return 0;
-    AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
-    if (!AugStore_type) return 0;
-    AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
-    if (!AugStore_singleton) return 0;
-    Param_type = make_type("Param", expr_context_type, NULL, 0);
-    if (!Param_type) return 0;
-    Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
-    if (!Param_singleton) return 0;
-    slice_type = make_type("slice", &AST_type, NULL, 0);
-    if (!slice_type) return 0;
-    if (!add_attributes(slice_type, NULL, 0)) return 0;
-    Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
-    if (!Slice_type) return 0;
-    ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
-    if (!ExtSlice_type) return 0;
-    Index_type = make_type("Index", slice_type, Index_fields, 1);
-    if (!Index_type) return 0;
-    boolop_type = make_type("boolop", &AST_type, NULL, 0);
-    if (!boolop_type) return 0;
-    if (!add_attributes(boolop_type, NULL, 0)) return 0;
-    And_type = make_type("And", boolop_type, NULL, 0);
-    if (!And_type) return 0;
-    And_singleton = PyType_GenericNew(And_type, NULL, NULL);
-    if (!And_singleton) return 0;
-    Or_type = make_type("Or", boolop_type, NULL, 0);
-    if (!Or_type) return 0;
-    Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
-    if (!Or_singleton) return 0;
-    operator_type = make_type("operator", &AST_type, NULL, 0);
-    if (!operator_type) return 0;
-    if (!add_attributes(operator_type, NULL, 0)) return 0;
-    Add_type = make_type("Add", operator_type, NULL, 0);
-    if (!Add_type) return 0;
-    Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
-    if (!Add_singleton) return 0;
-    Sub_type = make_type("Sub", operator_type, NULL, 0);
-    if (!Sub_type) return 0;
-    Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
-    if (!Sub_singleton) return 0;
-    Mult_type = make_type("Mult", operator_type, NULL, 0);
-    if (!Mult_type) return 0;
-    Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
-    if (!Mult_singleton) return 0;
-    MatMult_type = make_type("MatMult", operator_type, NULL, 0);
-    if (!MatMult_type) return 0;
-    MatMult_singleton = PyType_GenericNew(MatMult_type, NULL, NULL);
-    if (!MatMult_singleton) return 0;
-    Div_type = make_type("Div", operator_type, NULL, 0);
-    if (!Div_type) return 0;
-    Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
-    if (!Div_singleton) return 0;
-    Mod_type = make_type("Mod", operator_type, NULL, 0);
-    if (!Mod_type) return 0;
-    Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
-    if (!Mod_singleton) return 0;
-    Pow_type = make_type("Pow", operator_type, NULL, 0);
-    if (!Pow_type) return 0;
-    Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
-    if (!Pow_singleton) return 0;
-    LShift_type = make_type("LShift", operator_type, NULL, 0);
-    if (!LShift_type) return 0;
-    LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
-    if (!LShift_singleton) return 0;
-    RShift_type = make_type("RShift", operator_type, NULL, 0);
-    if (!RShift_type) return 0;
-    RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
-    if (!RShift_singleton) return 0;
-    BitOr_type = make_type("BitOr", operator_type, NULL, 0);
-    if (!BitOr_type) return 0;
-    BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
-    if (!BitOr_singleton) return 0;
-    BitXor_type = make_type("BitXor", operator_type, NULL, 0);
-    if (!BitXor_type) return 0;
-    BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
-    if (!BitXor_singleton) return 0;
-    BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
-    if (!BitAnd_type) return 0;
-    BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
-    if (!BitAnd_singleton) return 0;
-    FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
-    if (!FloorDiv_type) return 0;
-    FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
-    if (!FloorDiv_singleton) return 0;
-    unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
-    if (!unaryop_type) return 0;
-    if (!add_attributes(unaryop_type, NULL, 0)) return 0;
-    Invert_type = make_type("Invert", unaryop_type, NULL, 0);
-    if (!Invert_type) return 0;
-    Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
-    if (!Invert_singleton) return 0;
-    Not_type = make_type("Not", unaryop_type, NULL, 0);
-    if (!Not_type) return 0;
-    Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
-    if (!Not_singleton) return 0;
-    UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
-    if (!UAdd_type) return 0;
-    UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
-    if (!UAdd_singleton) return 0;
-    USub_type = make_type("USub", unaryop_type, NULL, 0);
-    if (!USub_type) return 0;
-    USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
-    if (!USub_singleton) return 0;
-    cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
-    if (!cmpop_type) return 0;
-    if (!add_attributes(cmpop_type, NULL, 0)) return 0;
-    Eq_type = make_type("Eq", cmpop_type, NULL, 0);
-    if (!Eq_type) return 0;
-    Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
-    if (!Eq_singleton) return 0;
-    NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
-    if (!NotEq_type) return 0;
-    NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
-    if (!NotEq_singleton) return 0;
-    Lt_type = make_type("Lt", cmpop_type, NULL, 0);
-    if (!Lt_type) return 0;
-    Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
-    if (!Lt_singleton) return 0;
-    LtE_type = make_type("LtE", cmpop_type, NULL, 0);
-    if (!LtE_type) return 0;
-    LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
-    if (!LtE_singleton) return 0;
-    Gt_type = make_type("Gt", cmpop_type, NULL, 0);
-    if (!Gt_type) return 0;
-    Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
-    if (!Gt_singleton) return 0;
-    GtE_type = make_type("GtE", cmpop_type, NULL, 0);
-    if (!GtE_type) return 0;
-    GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
-    if (!GtE_singleton) return 0;
-    Is_type = make_type("Is", cmpop_type, NULL, 0);
-    if (!Is_type) return 0;
-    Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
-    if (!Is_singleton) return 0;
-    IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
-    if (!IsNot_type) return 0;
-    IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
-    if (!IsNot_singleton) return 0;
-    In_type = make_type("In", cmpop_type, NULL, 0);
-    if (!In_type) return 0;
-    In_singleton = PyType_GenericNew(In_type, NULL, NULL);
-    if (!In_singleton) return 0;
-    NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
-    if (!NotIn_type) return 0;
-    NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
-    if (!NotIn_singleton) return 0;
-    comprehension_type = make_type("comprehension", &AST_type,
-                                   comprehension_fields, 4);
-    if (!comprehension_type) return 0;
-    if (!add_attributes(comprehension_type, NULL, 0)) return 0;
-    excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0);
-    if (!excepthandler_type) return 0;
-    if (!add_attributes(excepthandler_type, excepthandler_attributes, 4))
+    if (state->initialized) return 1;
+    if (init_identifiers(state) < 0) return 0;
+    state->AST_type = PyType_FromSpec(&AST_type_spec);
+    if (!state->AST_type) return 0;
+    if (add_ast_fields(state) < 0) return 0;
+    state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
+        "mod = Module(stmt* body, type_ignore* type_ignores)\n"
+        "    | Interactive(stmt* body)\n"
+        "    | Expression(expr body)\n"
+        "    | FunctionType(expr* argtypes, expr returns)");
+    if (!state->mod_type) return 0;
+    if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
+    state->Module_type = make_type(state, "Module", state->mod_type,
+                                   Module_fields, 2,
+        "Module(stmt* body, type_ignore* type_ignores)");
+    if (!state->Module_type) return 0;
+    state->Interactive_type = make_type(state, "Interactive", state->mod_type,
+                                        Interactive_fields, 1,
+        "Interactive(stmt* body)");
+    if (!state->Interactive_type) return 0;
+    state->Expression_type = make_type(state, "Expression", state->mod_type,
+                                       Expression_fields, 1,
+        "Expression(expr body)");
+    if (!state->Expression_type) return 0;
+    state->FunctionType_type = make_type(state, "FunctionType",
+                                         state->mod_type, FunctionType_fields,
+                                         2,
+        "FunctionType(expr* argtypes, expr returns)");
+    if (!state->FunctionType_type) return 0;
+    state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
+        "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
+        "     | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
+        "     | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
+        "     | Return(expr? value)\n"
+        "     | Delete(expr* targets)\n"
+        "     | Assign(expr* targets, expr value, string? type_comment)\n"
+        "     | AugAssign(expr target, operator op, expr value)\n"
+        "     | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
+        "     | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
+        "     | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
+        "     | While(expr test, stmt* body, stmt* orelse)\n"
+        "     | If(expr test, stmt* body, stmt* orelse)\n"
+        "     | With(withitem* items, stmt* body, string? type_comment)\n"
+        "     | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
+        "     | Raise(expr? exc, expr? cause)\n"
+        "     | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
+        "     | Assert(expr test, expr? msg)\n"
+        "     | Import(alias* names)\n"
+        "     | ImportFrom(identifier? module, alias* names, int? level)\n"
+        "     | Global(identifier* names)\n"
+        "     | Nonlocal(identifier* names)\n"
+        "     | Expr(expr value)\n"
+        "     | Pass\n"
+        "     | Break\n"
+        "     | Continue");
+    if (!state->stmt_type) return 0;
+    if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
+    if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
         return 0;
-    ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
-                                   ExceptHandler_fields, 3);
-    if (!ExceptHandler_type) return 0;
-    arguments_type = make_type("arguments", &AST_type, arguments_fields, 7);
-    if (!arguments_type) return 0;
-    if (!add_attributes(arguments_type, NULL, 0)) return 0;
-    arg_type = make_type("arg", &AST_type, arg_fields, 3);
-    if (!arg_type) return 0;
-    if (!add_attributes(arg_type, arg_attributes, 4)) return 0;
-    keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
-    if (!keyword_type) return 0;
-    if (!add_attributes(keyword_type, NULL, 0)) return 0;
-    alias_type = make_type("alias", &AST_type, alias_fields, 2);
-    if (!alias_type) return 0;
-    if (!add_attributes(alias_type, NULL, 0)) return 0;
-    withitem_type = make_type("withitem", &AST_type, withitem_fields, 2);
-    if (!withitem_type) return 0;
-    if (!add_attributes(withitem_type, NULL, 0)) return 0;
-    type_ignore_type = make_type("type_ignore", &AST_type, NULL, 0);
-    if (!type_ignore_type) return 0;
-    if (!add_attributes(type_ignore_type, NULL, 0)) return 0;
-    TypeIgnore_type = make_type("TypeIgnore", type_ignore_type,
-                                TypeIgnore_fields, 2);
-    if (!TypeIgnore_type) return 0;
-    initialized = 1;
+    if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
+        -1)
+        return 0;
+    state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
+                                        FunctionDef_fields, 6,
+        "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
+    if (!state->FunctionDef_type) return 0;
+    if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
+        -1)
+        return 0;
+    if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
+        == -1)
+        return 0;
+    state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
+                                             state->stmt_type,
+                                             AsyncFunctionDef_fields, 6,
+        "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
+    if (!state->AsyncFunctionDef_type) return 0;
+    if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
+        == -1)
+        return 0;
+    if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
+        Py_None) == -1)
+        return 0;
+    state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
+                                     ClassDef_fields, 5,
+        "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
+    if (!state->ClassDef_type) return 0;
+    state->Return_type = make_type(state, "Return", state->stmt_type,
+                                   Return_fields, 1,
+        "Return(expr? value)");
+    if (!state->Return_type) return 0;
+    if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
+        return 0;
+    state->Delete_type = make_type(state, "Delete", state->stmt_type,
+                                   Delete_fields, 1,
+        "Delete(expr* targets)");
+    if (!state->Delete_type) return 0;
+    state->Assign_type = make_type(state, "Assign", state->stmt_type,
+                                   Assign_fields, 3,
+        "Assign(expr* targets, expr value, string? type_comment)");
+    if (!state->Assign_type) return 0;
+    if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
+        -1)
+        return 0;
+    state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
+                                      AugAssign_fields, 3,
+        "AugAssign(expr target, operator op, expr value)");
+    if (!state->AugAssign_type) return 0;
+    state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
+                                      AnnAssign_fields, 4,
+        "AnnAssign(expr target, expr annotation, expr? value, int simple)");
+    if (!state->AnnAssign_type) return 0;
+    if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
+        return 0;
+    state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
+        "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
+    if (!state->For_type) return 0;
+    if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
+        return 0;
+    state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
+                                     AsyncFor_fields, 5,
+        "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
+    if (!state->AsyncFor_type) return 0;
+    if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
+        -1)
+        return 0;
+    state->While_type = make_type(state, "While", state->stmt_type,
+                                  While_fields, 3,
+        "While(expr test, stmt* body, stmt* orelse)");
+    if (!state->While_type) return 0;
+    state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
+        "If(expr test, stmt* body, stmt* orelse)");
+    if (!state->If_type) return 0;
+    state->With_type = make_type(state, "With", state->stmt_type, With_fields,
+                                 3,
+        "With(withitem* items, stmt* body, string? type_comment)");
+    if (!state->With_type) return 0;
+    if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
+        return 0;
+    state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
+                                      AsyncWith_fields, 3,
+        "AsyncWith(withitem* items, stmt* body, string? type_comment)");
+    if (!state->AsyncWith_type) return 0;
+    if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
+        == -1)
+        return 0;
+    state->Raise_type = make_type(state, "Raise", state->stmt_type,
+                                  Raise_fields, 2,
+        "Raise(expr? exc, expr? cause)");
+    if (!state->Raise_type) return 0;
+    if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
+        return 0;
+    state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
+        "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
+    if (!state->Try_type) return 0;
+    state->Assert_type = make_type(state, "Assert", state->stmt_type,
+                                   Assert_fields, 2,
+        "Assert(expr test, expr? msg)");
+    if (!state->Assert_type) return 0;
+    if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
+        return 0;
+    state->Import_type = make_type(state, "Import", state->stmt_type,
+                                   Import_fields, 1,
+        "Import(alias* names)");
+    if (!state->Import_type) return 0;
+    state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
+                                       ImportFrom_fields, 3,
+        "ImportFrom(identifier? module, alias* names, int? level)");
+    if (!state->ImportFrom_type) return 0;
+    if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
+        return 0;
+    state->Global_type = make_type(state, "Global", state->stmt_type,
+                                   Global_fields, 1,
+        "Global(identifier* names)");
+    if (!state->Global_type) return 0;
+    state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
+                                     Nonlocal_fields, 1,
+        "Nonlocal(identifier* names)");
+    if (!state->Nonlocal_type) return 0;
+    state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
+                                 1,
+        "Expr(expr value)");
+    if (!state->Expr_type) return 0;
+    state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
+        "Pass");
+    if (!state->Pass_type) return 0;
+    state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
+        "Break");
+    if (!state->Break_type) return 0;
+    state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
+                                     0,
+        "Continue");
+    if (!state->Continue_type) return 0;
+    state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
+        "expr = BoolOp(boolop op, expr* values)\n"
+        "     | NamedExpr(expr target, expr value)\n"
+        "     | BinOp(expr left, operator op, expr right)\n"
+        "     | UnaryOp(unaryop op, expr operand)\n"
+        "     | Lambda(arguments args, expr body)\n"
+        "     | IfExp(expr test, expr body, expr orelse)\n"
+        "     | Dict(expr* keys, expr* values)\n"
+        "     | Set(expr* elts)\n"
+        "     | ListComp(expr elt, comprehension* generators)\n"
+        "     | SetComp(expr elt, comprehension* generators)\n"
+        "     | DictComp(expr key, expr value, comprehension* generators)\n"
+        "     | GeneratorExp(expr elt, comprehension* generators)\n"
+        "     | Await(expr value)\n"
+        "     | Yield(expr? value)\n"
+        "     | YieldFrom(expr value)\n"
+        "     | Compare(expr left, cmpop* ops, expr* comparators)\n"
+        "     | Call(expr func, expr* args, keyword* keywords)\n"
+        "     | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
+        "     | JoinedStr(expr* values)\n"
+        "     | Constant(constant value, string? kind)\n"
+        "     | Attribute(expr value, identifier attr, expr_context ctx)\n"
+        "     | Subscript(expr value, expr slice, expr_context ctx)\n"
+        "     | Starred(expr value, expr_context ctx)\n"
+        "     | Name(identifier id, expr_context ctx)\n"
+        "     | List(expr* elts, expr_context ctx)\n"
+        "     | Tuple(expr* elts, expr_context ctx)\n"
+        "     | Slice(expr? lower, expr? upper, expr? step)");
+    if (!state->expr_type) return 0;
+    if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
+    if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
+        -1)
+        return 0;
+    state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
+                                   BoolOp_fields, 2,
+        "BoolOp(boolop op, expr* values)");
+    if (!state->BoolOp_type) return 0;
+    state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
+                                      NamedExpr_fields, 2,
+        "NamedExpr(expr target, expr value)");
+    if (!state->NamedExpr_type) return 0;
+    state->BinOp_type = make_type(state, "BinOp", state->expr_type,
+                                  BinOp_fields, 3,
+        "BinOp(expr left, operator op, expr right)");
+    if (!state->BinOp_type) return 0;
+    state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
+                                    UnaryOp_fields, 2,
+        "UnaryOp(unaryop op, expr operand)");
+    if (!state->UnaryOp_type) return 0;
+    state->Lambda_type = make_type(state, "Lambda", state->expr_type,
+                                   Lambda_fields, 2,
+        "Lambda(arguments args, expr body)");
+    if (!state->Lambda_type) return 0;
+    state->IfExp_type = make_type(state, "IfExp", state->expr_type,
+                                  IfExp_fields, 3,
+        "IfExp(expr test, expr body, expr orelse)");
+    if (!state->IfExp_type) return 0;
+    state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
+                                 2,
+        "Dict(expr* keys, expr* values)");
+    if (!state->Dict_type) return 0;
+    state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
+        "Set(expr* elts)");
+    if (!state->Set_type) return 0;
+    state->ListComp_type = make_type(state, "ListComp", state->expr_type,
+                                     ListComp_fields, 2,
+        "ListComp(expr elt, comprehension* generators)");
+    if (!state->ListComp_type) return 0;
+    state->SetComp_type = make_type(state, "SetComp", state->expr_type,
+                                    SetComp_fields, 2,
+        "SetComp(expr elt, comprehension* generators)");
+    if (!state->SetComp_type) return 0;
+    state->DictComp_type = make_type(state, "DictComp", state->expr_type,
+                                     DictComp_fields, 3,
+        "DictComp(expr key, expr value, comprehension* generators)");
+    if (!state->DictComp_type) return 0;
+    state->GeneratorExp_type = make_type(state, "GeneratorExp",
+                                         state->expr_type, GeneratorExp_fields,
+                                         2,
+        "GeneratorExp(expr elt, comprehension* generators)");
+    if (!state->GeneratorExp_type) return 0;
+    state->Await_type = make_type(state, "Await", state->expr_type,
+                                  Await_fields, 1,
+        "Await(expr value)");
+    if (!state->Await_type) return 0;
+    state->Yield_type = make_type(state, "Yield", state->expr_type,
+                                  Yield_fields, 1,
+        "Yield(expr? value)");
+    if (!state->Yield_type) return 0;
+    if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
+        return 0;
+    state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
+                                      YieldFrom_fields, 1,
+        "YieldFrom(expr value)");
+    if (!state->YieldFrom_type) return 0;
+    state->Compare_type = make_type(state, "Compare", state->expr_type,
+                                    Compare_fields, 3,
+        "Compare(expr left, cmpop* ops, expr* comparators)");
+    if (!state->Compare_type) return 0;
+    state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
+                                 3,
+        "Call(expr func, expr* args, keyword* keywords)");
+    if (!state->Call_type) return 0;
+    state->FormattedValue_type = make_type(state, "FormattedValue",
+                                           state->expr_type,
+                                           FormattedValue_fields, 3,
+        "FormattedValue(expr value, int? conversion, expr? format_spec)");
+    if (!state->FormattedValue_type) return 0;
+    if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
+        Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
+        Py_None) == -1)
+        return 0;
+    state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
+                                      JoinedStr_fields, 1,
+        "JoinedStr(expr* values)");
+    if (!state->JoinedStr_type) return 0;
+    state->Constant_type = make_type(state, "Constant", state->expr_type,
+                                     Constant_fields, 2,
+        "Constant(constant value, string? kind)");
+    if (!state->Constant_type) return 0;
+    if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
+        return 0;
+    state->Attribute_type = make_type(state, "Attribute", state->expr_type,
+                                      Attribute_fields, 3,
+        "Attribute(expr value, identifier attr, expr_context ctx)");
+    if (!state->Attribute_type) return 0;
+    state->Subscript_type = make_type(state, "Subscript", state->expr_type,
+                                      Subscript_fields, 3,
+        "Subscript(expr value, expr slice, expr_context ctx)");
+    if (!state->Subscript_type) return 0;
+    state->Starred_type = make_type(state, "Starred", state->expr_type,
+                                    Starred_fields, 2,
+        "Starred(expr value, expr_context ctx)");
+    if (!state->Starred_type) return 0;
+    state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
+                                 2,
+        "Name(identifier id, expr_context ctx)");
+    if (!state->Name_type) return 0;
+    state->List_type = make_type(state, "List", state->expr_type, List_fields,
+                                 2,
+        "List(expr* elts, expr_context ctx)");
+    if (!state->List_type) return 0;
+    state->Tuple_type = make_type(state, "Tuple", state->expr_type,
+                                  Tuple_fields, 2,
+        "Tuple(expr* elts, expr_context ctx)");
+    if (!state->Tuple_type) return 0;
+    state->Slice_type = make_type(state, "Slice", state->expr_type,
+                                  Slice_fields, 3,
+        "Slice(expr? lower, expr? upper, expr? step)");
+    if (!state->Slice_type) return 0;
+    if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
+        return 0;
+    state->expr_context_type = make_type(state, "expr_context",
+                                         state->AST_type, NULL, 0,
+        "expr_context = Load | Store | Del");
+    if (!state->expr_context_type) return 0;
+    if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
+    state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
+                                 0,
+        "Load");
+    if (!state->Load_type) return 0;
+    state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
+                                              NULL, NULL);
+    if (!state->Load_singleton) return 0;
+    state->Store_type = make_type(state, "Store", state->expr_context_type,
+                                  NULL, 0,
+        "Store");
+    if (!state->Store_type) return 0;
+    state->Store_singleton = PyType_GenericNew((PyTypeObject
+                                               *)state->Store_type, NULL, NULL);
+    if (!state->Store_singleton) return 0;
+    state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
+        "Del");
+    if (!state->Del_type) return 0;
+    state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
+                                             NULL, NULL);
+    if (!state->Del_singleton) return 0;
+    state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
+        "boolop = And | Or");
+    if (!state->boolop_type) return 0;
+    if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
+    state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
+        "And");
+    if (!state->And_type) return 0;
+    state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
+                                             NULL, NULL);
+    if (!state->And_singleton) return 0;
+    state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
+        "Or");
+    if (!state->Or_type) return 0;
+    state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
+                                            NULL, NULL);
+    if (!state->Or_singleton) return 0;
+    state->operator_type = make_type(state, "operator", state->AST_type, NULL,
+                                     0,
+        "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
+    if (!state->operator_type) return 0;
+    if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
+    state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
+        "Add");
+    if (!state->Add_type) return 0;
+    state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
+                                             NULL, NULL);
+    if (!state->Add_singleton) return 0;
+    state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
+        "Sub");
+    if (!state->Sub_type) return 0;
+    state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
+                                             NULL, NULL);
+    if (!state->Sub_singleton) return 0;
+    state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
+        "Mult");
+    if (!state->Mult_type) return 0;
+    state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
+                                              NULL, NULL);
+    if (!state->Mult_singleton) return 0;
+    state->MatMult_type = make_type(state, "MatMult", state->operator_type,
+                                    NULL, 0,
+        "MatMult");
+    if (!state->MatMult_type) return 0;
+    state->MatMult_singleton = PyType_GenericNew((PyTypeObject
+                                                 *)state->MatMult_type, NULL,
+                                                 NULL);
+    if (!state->MatMult_singleton) return 0;
+    state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
+        "Div");
+    if (!state->Div_type) return 0;
+    state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
+                                             NULL, NULL);
+    if (!state->Div_singleton) return 0;
+    state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
+        "Mod");
+    if (!state->Mod_type) return 0;
+    state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
+                                             NULL, NULL);
+    if (!state->Mod_singleton) return 0;
+    state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
+        "Pow");
+    if (!state->Pow_type) return 0;
+    state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
+                                             NULL, NULL);
+    if (!state->Pow_singleton) return 0;
+    state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
+                                   0,
+        "LShift");
+    if (!state->LShift_type) return 0;
+    state->LShift_singleton = PyType_GenericNew((PyTypeObject
+                                                *)state->LShift_type, NULL,
+                                                NULL);
+    if (!state->LShift_singleton) return 0;
+    state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
+                                   0,
+        "RShift");
+    if (!state->RShift_type) return 0;
+    state->RShift_singleton = PyType_GenericNew((PyTypeObject
+                                                *)state->RShift_type, NULL,
+                                                NULL);
+    if (!state->RShift_singleton) return 0;
+    state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
+        "BitOr");
+    if (!state->BitOr_type) return 0;
+    state->BitOr_singleton = PyType_GenericNew((PyTypeObject
+                                               *)state->BitOr_type, NULL, NULL);
+    if (!state->BitOr_singleton) return 0;
+    state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
+                                   0,
+        "BitXor");
+    if (!state->BitXor_type) return 0;
+    state->BitXor_singleton = PyType_GenericNew((PyTypeObject
+                                                *)state->BitXor_type, NULL,
+                                                NULL);
+    if (!state->BitXor_singleton) return 0;
+    state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
+                                   0,
+        "BitAnd");
+    if (!state->BitAnd_type) return 0;
+    state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
+                                                *)state->BitAnd_type, NULL,
+                                                NULL);
+    if (!state->BitAnd_singleton) return 0;
+    state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
+                                     NULL, 0,
+        "FloorDiv");
+    if (!state->FloorDiv_type) return 0;
+    state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
+                                                  *)state->FloorDiv_type, NULL,
+                                                  NULL);
+    if (!state->FloorDiv_singleton) return 0;
+    state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
+        "unaryop = Invert | Not | UAdd | USub");
+    if (!state->unaryop_type) return 0;
+    if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
+    state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
+                                   0,
+        "Invert");
+    if (!state->Invert_type) return 0;
+    state->Invert_singleton = PyType_GenericNew((PyTypeObject
+                                                *)state->Invert_type, NULL,
+                                                NULL);
+    if (!state->Invert_singleton) return 0;
+    state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
+        "Not");
+    if (!state->Not_type) return 0;
+    state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
+                                             NULL, NULL);
+    if (!state->Not_singleton) return 0;
+    state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
+        "UAdd");
+    if (!state->UAdd_type) return 0;
+    state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
+                                              NULL, NULL);
+    if (!state->UAdd_singleton) return 0;
+    state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
+        "USub");
+    if (!state->USub_type) return 0;
+    state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
+                                              NULL, NULL);
+    if (!state->USub_singleton) return 0;
+    state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
+        "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
+    if (!state->cmpop_type) return 0;
+    if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
+    state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
+        "Eq");
+    if (!state->Eq_type) return 0;
+    state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
+                                            NULL, NULL);
+    if (!state->Eq_singleton) return 0;
+    state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
+        "NotEq");
+    if (!state->NotEq_type) return 0;
+    state->NotEq_singleton = PyType_GenericNew((PyTypeObject
+                                               *)state->NotEq_type, NULL, NULL);
+    if (!state->NotEq_singleton) return 0;
+    state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
+        "Lt");
+    if (!state->Lt_type) return 0;
+    state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
+                                            NULL, NULL);
+    if (!state->Lt_singleton) return 0;
+    state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
+        "LtE");
+    if (!state->LtE_type) return 0;
+    state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
+                                             NULL, NULL);
+    if (!state->LtE_singleton) return 0;
+    state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
+        "Gt");
+    if (!state->Gt_type) return 0;
+    state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
+                                            NULL, NULL);
+    if (!state->Gt_singleton) return 0;
+    state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
+        "GtE");
+    if (!state->GtE_type) return 0;
+    state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
+                                             NULL, NULL);
+    if (!state->GtE_singleton) return 0;
+    state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
+        "Is");
+    if (!state->Is_type) return 0;
+    state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
+                                            NULL, NULL);
+    if (!state->Is_singleton) return 0;
+    state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
+        "IsNot");
+    if (!state->IsNot_type) return 0;
+    state->IsNot_singleton = PyType_GenericNew((PyTypeObject
+                                               *)state->IsNot_type, NULL, NULL);
+    if (!state->IsNot_singleton) return 0;
+    state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
+        "In");
+    if (!state->In_type) return 0;
+    state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
+                                            NULL, NULL);
+    if (!state->In_singleton) return 0;
+    state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
+        "NotIn");
+    if (!state->NotIn_type) return 0;
+    state->NotIn_singleton = PyType_GenericNew((PyTypeObject
+                                               *)state->NotIn_type, NULL, NULL);
+    if (!state->NotIn_singleton) return 0;
+    state->comprehension_type = make_type(state, "comprehension",
+                                          state->AST_type,
+                                          comprehension_fields, 4,
+        "comprehension(expr target, expr iter, expr* ifs, int is_async)");
+    if (!state->comprehension_type) return 0;
+    if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
+    state->excepthandler_type = make_type(state, "excepthandler",
+                                          state->AST_type, NULL, 0,
+        "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
+    if (!state->excepthandler_type) return 0;
+    if (!add_attributes(state, state->excepthandler_type,
+        excepthandler_attributes, 4)) return 0;
+    if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
+        == -1)
+        return 0;
+    if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
+        Py_None) == -1)
+        return 0;
+    state->ExceptHandler_type = make_type(state, "ExceptHandler",
+                                          state->excepthandler_type,
+                                          ExceptHandler_fields, 3,
+        "ExceptHandler(expr? type, identifier? name, stmt* body)");
+    if (!state->ExceptHandler_type) return 0;
+    if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
+        return 0;
+    state->arguments_type = make_type(state, "arguments", state->AST_type,
+                                      arguments_fields, 7,
+        "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
+    if (!state->arguments_type) return 0;
+    if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
+    if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
+        return 0;
+    state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
+        "arg(identifier arg, expr? annotation, string? type_comment)");
+    if (!state->arg_type) return 0;
+    if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
+    if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
+        return 0;
+    state->keyword_type = make_type(state, "keyword", state->AST_type,
+                                    keyword_fields, 2,
+        "keyword(identifier? arg, expr value)");
+    if (!state->keyword_type) return 0;
+    if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
+        return 0;
+    if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
+        return 0;
+    if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
+        == -1)
+        return 0;
+    state->alias_type = make_type(state, "alias", state->AST_type,
+                                  alias_fields, 2,
+        "alias(identifier name, identifier? asname)");
+    if (!state->alias_type) return 0;
+    if (!add_attributes(state, state->alias_type, NULL, 0)) return 0;
+    if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
+        return 0;
+    state->withitem_type = make_type(state, "withitem", state->AST_type,
+                                     withitem_fields, 2,
+        "withitem(expr context_expr, expr? optional_vars)");
+    if (!state->withitem_type) return 0;
+    if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
+    if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
+        == -1)
+        return 0;
+    state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
+                                        NULL, 0,
+        "type_ignore = TypeIgnore(int lineno, string tag)");
+    if (!state->type_ignore_type) return 0;
+    if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
+    state->TypeIgnore_type = make_type(state, "TypeIgnore",
+                                       state->type_ignore_type,
+                                       TypeIgnore_fields, 2,
+        "TypeIgnore(int lineno, string tag)");
+    if (!state->TypeIgnore_type) return 0;
+    state->initialized = 1;
     return 1;
 }
 
-static int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
-static int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
-static int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
-static int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
-                                arena);
-static int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
-static int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
-static int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
-static int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
-static int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
-static int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
-                                 arena);
-static int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
-                                 arena);
-static int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
-static int obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena);
-static int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
-static int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
-static int obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena);
-static int obj2ast_type_ignore(PyObject* obj, type_ignore_ty* out, PyArena*
-                               arena);
+static int obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out,
+                       PyArena* arena);
+static int obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out,
+                        PyArena* arena);
+static int obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out,
+                        PyArena* arena);
+static int obj2ast_expr_context(astmodulestate *state, PyObject* obj,
+                                expr_context_ty* out, PyArena* arena);
+static int obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out,
+                          PyArena* arena);
+static int obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty*
+                            out, PyArena* arena);
+static int obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty*
+                           out, PyArena* arena);
+static int obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out,
+                         PyArena* arena);
+static int obj2ast_comprehension(astmodulestate *state, PyObject* obj,
+                                 comprehension_ty* out, PyArena* arena);
+static int obj2ast_excepthandler(astmodulestate *state, PyObject* obj,
+                                 excepthandler_ty* out, PyArena* arena);
+static int obj2ast_arguments(astmodulestate *state, PyObject* obj,
+                             arguments_ty* out, PyArena* arena);
+static int obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out,
+                       PyArena* arena);
+static int obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty*
+                           out, PyArena* arena);
+static int obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out,
+                         PyArena* arena);
+static int obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty*
+                            out, PyArena* arena);
+static int obj2ast_type_ignore(astmodulestate *state, PyObject* obj,
+                               type_ignore_ty* out, PyArena* arena);
 
 mod_ty
 Module(asdl_seq * body, asdl_seq * type_ignores, PyArena *arena)
@@ -1244,7 +1942,7 @@
     mod_ty p;
     if (!body) {
         PyErr_SetString(PyExc_ValueError,
-                        "field body is required for Expression");
+                        "field 'body' is required for Expression");
         return NULL;
     }
     p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1261,7 +1959,7 @@
     mod_ty p;
     if (!returns) {
         PyErr_SetString(PyExc_ValueError,
-                        "field returns is required for FunctionType");
+                        "field 'returns' is required for FunctionType");
         return NULL;
     }
     p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1273,18 +1971,6 @@
     return p;
 }
 
-mod_ty
-Suite(asdl_seq * body, PyArena *arena)
-{
-    mod_ty p;
-    p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
-    if (!p)
-        return NULL;
-    p->kind = Suite_kind;
-    p->v.Suite.body = body;
-    return p;
-}
-
 stmt_ty
 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
             decorator_list, expr_ty returns, string type_comment, int lineno,
@@ -1293,12 +1979,12 @@
     stmt_ty p;
     if (!name) {
         PyErr_SetString(PyExc_ValueError,
-                        "field name is required for FunctionDef");
+                        "field 'name' is required for FunctionDef");
         return NULL;
     }
     if (!args) {
         PyErr_SetString(PyExc_ValueError,
-                        "field args is required for FunctionDef");
+                        "field 'args' is required for FunctionDef");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1327,12 +2013,12 @@
     stmt_ty p;
     if (!name) {
         PyErr_SetString(PyExc_ValueError,
-                        "field name is required for AsyncFunctionDef");
+                        "field 'name' is required for AsyncFunctionDef");
         return NULL;
     }
     if (!args) {
         PyErr_SetString(PyExc_ValueError,
-                        "field args is required for AsyncFunctionDef");
+                        "field 'args' is required for AsyncFunctionDef");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1360,7 +2046,7 @@
     stmt_ty p;
     if (!name) {
         PyErr_SetString(PyExc_ValueError,
-                        "field name is required for ClassDef");
+                        "field 'name' is required for ClassDef");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1420,7 +2106,7 @@
     stmt_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Assign");
+                        "field 'value' is required for Assign");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1444,17 +2130,17 @@
     stmt_ty p;
     if (!target) {
         PyErr_SetString(PyExc_ValueError,
-                        "field target is required for AugAssign");
+                        "field 'target' is required for AugAssign");
         return NULL;
     }
     if (!op) {
         PyErr_SetString(PyExc_ValueError,
-                        "field op is required for AugAssign");
+                        "field 'op' is required for AugAssign");
         return NULL;
     }
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for AugAssign");
+                        "field 'value' is required for AugAssign");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1479,12 +2165,12 @@
     stmt_ty p;
     if (!target) {
         PyErr_SetString(PyExc_ValueError,
-                        "field target is required for AnnAssign");
+                        "field 'target' is required for AnnAssign");
         return NULL;
     }
     if (!annotation) {
         PyErr_SetString(PyExc_ValueError,
-                        "field annotation is required for AnnAssign");
+                        "field 'annotation' is required for AnnAssign");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1510,12 +2196,12 @@
     stmt_ty p;
     if (!target) {
         PyErr_SetString(PyExc_ValueError,
-                        "field target is required for For");
+                        "field 'target' is required for For");
         return NULL;
     }
     if (!iter) {
         PyErr_SetString(PyExc_ValueError,
-                        "field iter is required for For");
+                        "field 'iter' is required for For");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1542,12 +2228,12 @@
     stmt_ty p;
     if (!target) {
         PyErr_SetString(PyExc_ValueError,
-                        "field target is required for AsyncFor");
+                        "field 'target' is required for AsyncFor");
         return NULL;
     }
     if (!iter) {
         PyErr_SetString(PyExc_ValueError,
-                        "field iter is required for AsyncFor");
+                        "field 'iter' is required for AsyncFor");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1573,7 +2259,7 @@
     stmt_ty p;
     if (!test) {
         PyErr_SetString(PyExc_ValueError,
-                        "field test is required for While");
+                        "field 'test' is required for While");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1597,7 +2283,7 @@
     stmt_ty p;
     if (!test) {
         PyErr_SetString(PyExc_ValueError,
-                        "field test is required for If");
+                        "field 'test' is required for If");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1698,7 +2384,7 @@
     stmt_ty p;
     if (!test) {
         PyErr_SetString(PyExc_ValueError,
-                        "field test is required for Assert");
+                        "field 'test' is required for Assert");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1791,7 +2477,7 @@
     stmt_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Expr");
+                        "field 'value' is required for Expr");
         return NULL;
     }
     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1861,7 +2547,7 @@
     expr_ty p;
     if (!op) {
         PyErr_SetString(PyExc_ValueError,
-                        "field op is required for BoolOp");
+                        "field 'op' is required for BoolOp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1884,12 +2570,12 @@
     expr_ty p;
     if (!target) {
         PyErr_SetString(PyExc_ValueError,
-                        "field target is required for NamedExpr");
+                        "field 'target' is required for NamedExpr");
         return NULL;
     }
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for NamedExpr");
+                        "field 'value' is required for NamedExpr");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1912,17 +2598,17 @@
     expr_ty p;
     if (!left) {
         PyErr_SetString(PyExc_ValueError,
-                        "field left is required for BinOp");
+                        "field 'left' is required for BinOp");
         return NULL;
     }
     if (!op) {
         PyErr_SetString(PyExc_ValueError,
-                        "field op is required for BinOp");
+                        "field 'op' is required for BinOp");
         return NULL;
     }
     if (!right) {
         PyErr_SetString(PyExc_ValueError,
-                        "field right is required for BinOp");
+                        "field 'right' is required for BinOp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1946,12 +2632,12 @@
     expr_ty p;
     if (!op) {
         PyErr_SetString(PyExc_ValueError,
-                        "field op is required for UnaryOp");
+                        "field 'op' is required for UnaryOp");
         return NULL;
     }
     if (!operand) {
         PyErr_SetString(PyExc_ValueError,
-                        "field operand is required for UnaryOp");
+                        "field 'operand' is required for UnaryOp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1974,12 +2660,12 @@
     expr_ty p;
     if (!args) {
         PyErr_SetString(PyExc_ValueError,
-                        "field args is required for Lambda");
+                        "field 'args' is required for Lambda");
         return NULL;
     }
     if (!body) {
         PyErr_SetString(PyExc_ValueError,
-                        "field body is required for Lambda");
+                        "field 'body' is required for Lambda");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2002,17 +2688,17 @@
     expr_ty p;
     if (!test) {
         PyErr_SetString(PyExc_ValueError,
-                        "field test is required for IfExp");
+                        "field 'test' is required for IfExp");
         return NULL;
     }
     if (!body) {
         PyErr_SetString(PyExc_ValueError,
-                        "field body is required for IfExp");
+                        "field 'body' is required for IfExp");
         return NULL;
     }
     if (!orelse) {
         PyErr_SetString(PyExc_ValueError,
-                        "field orelse is required for IfExp");
+                        "field 'orelse' is required for IfExp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2071,7 +2757,7 @@
     expr_ty p;
     if (!elt) {
         PyErr_SetString(PyExc_ValueError,
-                        "field elt is required for ListComp");
+                        "field 'elt' is required for ListComp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2094,7 +2780,7 @@
     expr_ty p;
     if (!elt) {
         PyErr_SetString(PyExc_ValueError,
-                        "field elt is required for SetComp");
+                        "field 'elt' is required for SetComp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2117,12 +2803,12 @@
     expr_ty p;
     if (!key) {
         PyErr_SetString(PyExc_ValueError,
-                        "field key is required for DictComp");
+                        "field 'key' is required for DictComp");
         return NULL;
     }
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for DictComp");
+                        "field 'value' is required for DictComp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2146,7 +2832,7 @@
     expr_ty p;
     if (!elt) {
         PyErr_SetString(PyExc_ValueError,
-                        "field elt is required for GeneratorExp");
+                        "field 'elt' is required for GeneratorExp");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2169,7 +2855,7 @@
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Await");
+                        "field 'value' is required for Await");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2208,7 +2894,7 @@
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for YieldFrom");
+                        "field 'value' is required for YieldFrom");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2230,7 +2916,7 @@
     expr_ty p;
     if (!left) {
         PyErr_SetString(PyExc_ValueError,
-                        "field left is required for Compare");
+                        "field 'left' is required for Compare");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2254,7 +2940,7 @@
     expr_ty p;
     if (!func) {
         PyErr_SetString(PyExc_ValueError,
-                        "field func is required for Call");
+                        "field 'func' is required for Call");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2279,7 +2965,7 @@
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for FormattedValue");
+                        "field 'value' is required for FormattedValue");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2320,7 +3006,7 @@
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Constant");
+                        "field 'value' is required for Constant");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2343,17 +3029,17 @@
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Attribute");
+                        "field 'value' is required for Attribute");
         return NULL;
     }
     if (!attr) {
         PyErr_SetString(PyExc_ValueError,
-                        "field attr is required for Attribute");
+                        "field 'attr' is required for Attribute");
         return NULL;
     }
     if (!ctx) {
         PyErr_SetString(PyExc_ValueError,
-                        "field ctx is required for Attribute");
+                        "field 'ctx' is required for Attribute");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2371,23 +3057,23 @@
 }
 
 expr_ty
-Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
+Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int
           col_offset, int end_lineno, int end_col_offset, PyArena *arena)
 {
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Subscript");
+                        "field 'value' is required for Subscript");
         return NULL;
     }
     if (!slice) {
         PyErr_SetString(PyExc_ValueError,
-                        "field slice is required for Subscript");
+                        "field 'slice' is required for Subscript");
         return NULL;
     }
     if (!ctx) {
         PyErr_SetString(PyExc_ValueError,
-                        "field ctx is required for Subscript");
+                        "field 'ctx' is required for Subscript");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2411,12 +3097,12 @@
     expr_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Starred");
+                        "field 'value' is required for Starred");
         return NULL;
     }
     if (!ctx) {
         PyErr_SetString(PyExc_ValueError,
-                        "field ctx is required for Starred");
+                        "field 'ctx' is required for Starred");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2439,12 +3125,12 @@
     expr_ty p;
     if (!id) {
         PyErr_SetString(PyExc_ValueError,
-                        "field id is required for Name");
+                        "field 'id' is required for Name");
         return NULL;
     }
     if (!ctx) {
         PyErr_SetString(PyExc_ValueError,
-                        "field ctx is required for Name");
+                        "field 'ctx' is required for Name");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2467,7 +3153,7 @@
     expr_ty p;
     if (!ctx) {
         PyErr_SetString(PyExc_ValueError,
-                        "field ctx is required for List");
+                        "field 'ctx' is required for List");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2490,7 +3176,7 @@
     expr_ty p;
     if (!ctx) {
         PyErr_SetString(PyExc_ValueError,
-                        "field ctx is required for Tuple");
+                        "field 'ctx' is required for Tuple");
         return NULL;
     }
     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2506,46 +3192,22 @@
     return p;
 }
 
-slice_ty
-Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
+expr_ty
+Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset,
+      int end_lineno, int end_col_offset, PyArena *arena)
 {
-    slice_ty p;
-    p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
+    expr_ty p;
+    p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
     if (!p)
         return NULL;
     p->kind = Slice_kind;
     p->v.Slice.lower = lower;
     p->v.Slice.upper = upper;
     p->v.Slice.step = step;
-    return p;
-}
-
-slice_ty
-ExtSlice(asdl_seq * dims, PyArena *arena)
-{
-    slice_ty p;
-    p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
-    if (!p)
-        return NULL;
-    p->kind = ExtSlice_kind;
-    p->v.ExtSlice.dims = dims;
-    return p;
-}
-
-slice_ty
-Index(expr_ty value, PyArena *arena)
-{
-    slice_ty p;
-    if (!value) {
-        PyErr_SetString(PyExc_ValueError,
-                        "field value is required for Index");
-        return NULL;
-    }
-    p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
-    if (!p)
-        return NULL;
-    p->kind = Index_kind;
-    p->v.Index.value = value;
+    p->lineno = lineno;
+    p->col_offset = col_offset;
+    p->end_lineno = end_lineno;
+    p->end_col_offset = end_col_offset;
     return p;
 }
 
@@ -2556,12 +3218,12 @@
     comprehension_ty p;
     if (!target) {
         PyErr_SetString(PyExc_ValueError,
-                        "field target is required for comprehension");
+                        "field 'target' is required for comprehension");
         return NULL;
     }
     if (!iter) {
         PyErr_SetString(PyExc_ValueError,
-                        "field iter is required for comprehension");
+                        "field 'iter' is required for comprehension");
         return NULL;
     }
     p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2619,7 +3281,7 @@
     arg_ty p;
     if (!arg) {
         PyErr_SetString(PyExc_ValueError,
-                        "field arg is required for arg");
+                        "field 'arg' is required for arg");
         return NULL;
     }
     p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2636,12 +3298,13 @@
 }
 
 keyword_ty
-keyword(identifier arg, expr_ty value, PyArena *arena)
+keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
+        end_lineno, int end_col_offset, PyArena *arena)
 {
     keyword_ty p;
     if (!value) {
         PyErr_SetString(PyExc_ValueError,
-                        "field value is required for keyword");
+                        "field 'value' is required for keyword");
         return NULL;
     }
     p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2649,6 +3312,10 @@
         return NULL;
     p->arg = arg;
     p->value = value;
+    p->lineno = lineno;
+    p->col_offset = col_offset;
+    p->end_lineno = end_lineno;
+    p->end_col_offset = end_col_offset;
     return p;
 }
 
@@ -2658,7 +3325,7 @@
     alias_ty p;
     if (!name) {
         PyErr_SetString(PyExc_ValueError,
-                        "field name is required for alias");
+                        "field 'name' is required for alias");
         return NULL;
     }
     p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2675,7 +3342,7 @@
     withitem_ty p;
     if (!context_expr) {
         PyErr_SetString(PyExc_ValueError,
-                        "field context_expr is required for withitem");
+                        "field 'context_expr' is required for withitem");
         return NULL;
     }
     p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2692,7 +3359,7 @@
     type_ignore_ty p;
     if (!tag) {
         PyErr_SetString(PyExc_ValueError,
-                        "field tag is required for TypeIgnore");
+                        "field 'tag' is required for TypeIgnore");
         return NULL;
     }
     p = (type_ignore_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2706,67 +3373,63 @@
 
 
 PyObject*
-ast2obj_mod(void* _o)
+ast2obj_mod(astmodulestate *state, void* _o)
 {
     mod_ty o = (mod_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
     switch (o->kind) {
     case Module_kind:
-        result = PyType_GenericNew(Module_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Module_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.Module.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Module.type_ignores, ast2obj_type_ignore);
+        value = ast2obj_list(state, o->v.Module.type_ignores,
+                             ast2obj_type_ignore);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_ignores, value) == -1)
+        if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Interactive_kind:
-        result = PyType_GenericNew(Interactive_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Interactive_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.Interactive.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Expression_kind:
-        result = PyType_GenericNew(Expression_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Expression_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Expression.body);
+        value = ast2obj_expr(state, o->v.Expression.body);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case FunctionType_kind:
-        result = PyType_GenericNew(FunctionType_type, NULL, NULL);
+        tp = (PyTypeObject *)state->FunctionType_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.FunctionType.argtypes, ast2obj_expr);
+        value = ast2obj_list(state, o->v.FunctionType.argtypes, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_argtypes, value) == -1)
+        if (PyObject_SetAttr(result, state->argtypes, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.FunctionType.returns);
+        value = ast2obj_expr(state, o->v.FunctionType.returns);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        break;
-    case Suite_kind:
-        result = PyType_GenericNew(Suite_type, NULL, NULL);
-        if (!result) goto failed;
-        value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
-        if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->returns, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
@@ -2779,465 +3442,491 @@
 }
 
 PyObject*
-ast2obj_stmt(void* _o)
+ast2obj_stmt(astmodulestate *state, void* _o)
 {
     stmt_ty o = (stmt_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
     switch (o->kind) {
     case FunctionDef_kind:
-        result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
+        tp = (PyTypeObject *)state->FunctionDef_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_identifier(o->v.FunctionDef.name);
+        value = ast2obj_identifier(state, o->v.FunctionDef.name);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+        if (PyObject_SetAttr(result, state->name, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_arguments(o->v.FunctionDef.args);
+        value = ast2obj_arguments(state, o->v.FunctionDef.args);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+        if (PyObject_SetAttr(result, state->args, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.FunctionDef.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.FunctionDef.decorator_list, ast2obj_expr);
+        value = ast2obj_list(state, o->v.FunctionDef.decorator_list,
+                             ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+        if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.FunctionDef.returns);
+        value = ast2obj_expr(state, o->v.FunctionDef.returns);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
+        if (PyObject_SetAttr(result, state->returns, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.FunctionDef.type_comment);
+        value = ast2obj_string(state, o->v.FunctionDef.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case AsyncFunctionDef_kind:
-        result = PyType_GenericNew(AsyncFunctionDef_type, NULL, NULL);
+        tp = (PyTypeObject *)state->AsyncFunctionDef_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_identifier(o->v.AsyncFunctionDef.name);
+        value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+        if (PyObject_SetAttr(result, state->name, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_arguments(o->v.AsyncFunctionDef.args);
+        value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+        if (PyObject_SetAttr(result, state->args, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.AsyncFunctionDef.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.AsyncFunctionDef.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.AsyncFunctionDef.decorator_list,
+        value = ast2obj_list(state, o->v.AsyncFunctionDef.decorator_list,
                              ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+        if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.AsyncFunctionDef.returns);
+        value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
+        if (PyObject_SetAttr(result, state->returns, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.AsyncFunctionDef.type_comment);
+        value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case ClassDef_kind:
-        result = PyType_GenericNew(ClassDef_type, NULL, NULL);
+        tp = (PyTypeObject *)state->ClassDef_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_identifier(o->v.ClassDef.name);
+        value = ast2obj_identifier(state, o->v.ClassDef.name);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+        if (PyObject_SetAttr(result, state->name, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
+        value = ast2obj_list(state, o->v.ClassDef.bases, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_bases, value) == -1)
+        if (PyObject_SetAttr(result, state->bases, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ClassDef.keywords, ast2obj_keyword);
+        value = ast2obj_list(state, o->v.ClassDef.keywords, ast2obj_keyword);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
+        if (PyObject_SetAttr(result, state->keywords, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.ClassDef.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ClassDef.decorator_list, ast2obj_expr);
+        value = ast2obj_list(state, o->v.ClassDef.decorator_list, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+        if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Return_kind:
-        result = PyType_GenericNew(Return_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Return_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Return.value);
+        value = ast2obj_expr(state, o->v.Return.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Delete_kind:
-        result = PyType_GenericNew(Delete_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Delete_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Delete.targets, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
+        if (PyObject_SetAttr(result, state->targets, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Assign_kind:
-        result = PyType_GenericNew(Assign_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Assign_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Assign.targets, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
+        if (PyObject_SetAttr(result, state->targets, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.Assign.value);
+        value = ast2obj_expr(state, o->v.Assign.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.Assign.type_comment);
+        value = ast2obj_string(state, o->v.Assign.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case AugAssign_kind:
-        result = PyType_GenericNew(AugAssign_type, NULL, NULL);
+        tp = (PyTypeObject *)state->AugAssign_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.AugAssign.target);
+        value = ast2obj_expr(state, o->v.AugAssign.target);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+        if (PyObject_SetAttr(result, state->target, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_operator(o->v.AugAssign.op);
+        value = ast2obj_operator(state, o->v.AugAssign.op);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+        if (PyObject_SetAttr(result, state->op, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.AugAssign.value);
+        value = ast2obj_expr(state, o->v.AugAssign.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case AnnAssign_kind:
-        result = PyType_GenericNew(AnnAssign_type, NULL, NULL);
+        tp = (PyTypeObject *)state->AnnAssign_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.AnnAssign.target);
+        value = ast2obj_expr(state, o->v.AnnAssign.target);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+        if (PyObject_SetAttr(result, state->target, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.AnnAssign.annotation);
+        value = ast2obj_expr(state, o->v.AnnAssign.annotation);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
+        if (PyObject_SetAttr(result, state->annotation, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.AnnAssign.value);
+        value = ast2obj_expr(state, o->v.AnnAssign.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_int(o->v.AnnAssign.simple);
+        value = ast2obj_int(state, o->v.AnnAssign.simple);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_simple, value) == -1)
+        if (PyObject_SetAttr(result, state->simple, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case For_kind:
-        result = PyType_GenericNew(For_type, NULL, NULL);
+        tp = (PyTypeObject *)state->For_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.For.target);
+        value = ast2obj_expr(state, o->v.For.target);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+        if (PyObject_SetAttr(result, state->target, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.For.iter);
+        value = ast2obj_expr(state, o->v.For.iter);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+        if (PyObject_SetAttr(result, state->iter, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.For.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.For.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.For.orelse, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+        if (PyObject_SetAttr(result, state->orelse, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.For.type_comment);
+        value = ast2obj_string(state, o->v.For.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case AsyncFor_kind:
-        result = PyType_GenericNew(AsyncFor_type, NULL, NULL);
+        tp = (PyTypeObject *)state->AsyncFor_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.AsyncFor.target);
+        value = ast2obj_expr(state, o->v.AsyncFor.target);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+        if (PyObject_SetAttr(result, state->target, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.AsyncFor.iter);
+        value = ast2obj_expr(state, o->v.AsyncFor.iter);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+        if (PyObject_SetAttr(result, state->iter, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.AsyncFor.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.AsyncFor.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.AsyncFor.orelse, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.AsyncFor.orelse, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+        if (PyObject_SetAttr(result, state->orelse, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.AsyncFor.type_comment);
+        value = ast2obj_string(state, o->v.AsyncFor.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case While_kind:
-        result = PyType_GenericNew(While_type, NULL, NULL);
+        tp = (PyTypeObject *)state->While_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.While.test);
+        value = ast2obj_expr(state, o->v.While.test);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+        if (PyObject_SetAttr(result, state->test, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.While.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.While.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.While.orelse, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+        if (PyObject_SetAttr(result, state->orelse, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case If_kind:
-        result = PyType_GenericNew(If_type, NULL, NULL);
+        tp = (PyTypeObject *)state->If_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.If.test);
+        value = ast2obj_expr(state, o->v.If.test);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+        if (PyObject_SetAttr(result, state->test, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.If.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.If.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.If.orelse, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+        if (PyObject_SetAttr(result, state->orelse, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case With_kind:
-        result = PyType_GenericNew(With_type, NULL, NULL);
+        tp = (PyTypeObject *)state->With_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.With.items, ast2obj_withitem);
+        value = ast2obj_list(state, o->v.With.items, ast2obj_withitem);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
+        if (PyObject_SetAttr(result, state->items, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.With.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.With.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.With.type_comment);
+        value = ast2obj_string(state, o->v.With.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case AsyncWith_kind:
-        result = PyType_GenericNew(AsyncWith_type, NULL, NULL);
+        tp = (PyTypeObject *)state->AsyncWith_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.AsyncWith.items, ast2obj_withitem);
+        value = ast2obj_list(state, o->v.AsyncWith.items, ast2obj_withitem);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
+        if (PyObject_SetAttr(result, state->items, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.AsyncWith.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.AsyncWith.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.AsyncWith.type_comment);
+        value = ast2obj_string(state, o->v.AsyncWith.type_comment);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Raise_kind:
-        result = PyType_GenericNew(Raise_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Raise_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Raise.exc);
+        value = ast2obj_expr(state, o->v.Raise.exc);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_exc, value) == -1)
+        if (PyObject_SetAttr(result, state->exc, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.Raise.cause);
+        value = ast2obj_expr(state, o->v.Raise.cause);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_cause, value) == -1)
+        if (PyObject_SetAttr(result, state->cause, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Try_kind:
-        result = PyType_GenericNew(Try_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Try_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Try.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.Try.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Try.handlers, ast2obj_excepthandler);
+        value = ast2obj_list(state, o->v.Try.handlers, ast2obj_excepthandler);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_handlers, value) == -1)
+        if (PyObject_SetAttr(result, state->handlers, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Try.orelse, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.Try.orelse, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+        if (PyObject_SetAttr(result, state->orelse, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Try.finalbody, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.Try.finalbody, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_finalbody, value) == -1)
+        if (PyObject_SetAttr(result, state->finalbody, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Assert_kind:
-        result = PyType_GenericNew(Assert_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Assert_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Assert.test);
+        value = ast2obj_expr(state, o->v.Assert.test);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+        if (PyObject_SetAttr(result, state->test, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.Assert.msg);
+        value = ast2obj_expr(state, o->v.Assert.msg);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_msg, value) == -1)
+        if (PyObject_SetAttr(result, state->msg, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Import_kind:
-        result = PyType_GenericNew(Import_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Import_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Import.names, ast2obj_alias);
+        value = ast2obj_list(state, o->v.Import.names, ast2obj_alias);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+        if (PyObject_SetAttr(result, state->names, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case ImportFrom_kind:
-        result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
+        tp = (PyTypeObject *)state->ImportFrom_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_identifier(o->v.ImportFrom.module);
+        value = ast2obj_identifier(state, o->v.ImportFrom.module);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_module, value) == -1)
+        if (PyObject_SetAttr(result, state->module, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
+        value = ast2obj_list(state, o->v.ImportFrom.names, ast2obj_alias);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+        if (PyObject_SetAttr(result, state->names, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_int(o->v.ImportFrom.level);
+        value = ast2obj_int(state, o->v.ImportFrom.level);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_level, value) == -1)
+        if (PyObject_SetAttr(result, state->level, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Global_kind:
-        result = PyType_GenericNew(Global_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Global_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
+        value = ast2obj_list(state, o->v.Global.names, ast2obj_identifier);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+        if (PyObject_SetAttr(result, state->names, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Nonlocal_kind:
-        result = PyType_GenericNew(Nonlocal_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Nonlocal_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Nonlocal.names, ast2obj_identifier);
+        value = ast2obj_list(state, o->v.Nonlocal.names, ast2obj_identifier);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+        if (PyObject_SetAttr(result, state->names, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Expr_kind:
-        result = PyType_GenericNew(Expr_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Expr_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Expr.value);
+        value = ast2obj_expr(state, o->v.Expr.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Pass_kind:
-        result = PyType_GenericNew(Pass_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Pass_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
         break;
     case Break_kind:
-        result = PyType_GenericNew(Break_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Break_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
         break;
     case Continue_kind:
-        result = PyType_GenericNew(Continue_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Continue_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
         break;
     }
-    value = ast2obj_int(o->lineno);
+    value = ast2obj_int(state, o->lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->col_offset);
+    value = ast2obj_int(state, o->col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_lineno);
+    value = ast2obj_int(state, o->end_lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_col_offset);
+    value = ast2obj_int(state, o->end_col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -3248,227 +3937,246 @@
 }
 
 PyObject*
-ast2obj_expr(void* _o)
+ast2obj_expr(astmodulestate *state, void* _o)
 {
     expr_ty o = (expr_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
     switch (o->kind) {
     case BoolOp_kind:
-        result = PyType_GenericNew(BoolOp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->BoolOp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_boolop(o->v.BoolOp.op);
+        value = ast2obj_boolop(state, o->v.BoolOp.op);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+        if (PyObject_SetAttr(result, state->op, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
+        value = ast2obj_list(state, o->v.BoolOp.values, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
+        if (PyObject_SetAttr(result, state->values, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case NamedExpr_kind:
-        result = PyType_GenericNew(NamedExpr_type, NULL, NULL);
+        tp = (PyTypeObject *)state->NamedExpr_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.NamedExpr.target);
+        value = ast2obj_expr(state, o->v.NamedExpr.target);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+        if (PyObject_SetAttr(result, state->target, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.NamedExpr.value);
+        value = ast2obj_expr(state, o->v.NamedExpr.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case BinOp_kind:
-        result = PyType_GenericNew(BinOp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->BinOp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.BinOp.left);
+        value = ast2obj_expr(state, o->v.BinOp.left);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
+        if (PyObject_SetAttr(result, state->left, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_operator(o->v.BinOp.op);
+        value = ast2obj_operator(state, o->v.BinOp.op);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+        if (PyObject_SetAttr(result, state->op, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.BinOp.right);
+        value = ast2obj_expr(state, o->v.BinOp.right);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_right, value) == -1)
+        if (PyObject_SetAttr(result, state->right, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case UnaryOp_kind:
-        result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->UnaryOp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_unaryop(o->v.UnaryOp.op);
+        value = ast2obj_unaryop(state, o->v.UnaryOp.op);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+        if (PyObject_SetAttr(result, state->op, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.UnaryOp.operand);
+        value = ast2obj_expr(state, o->v.UnaryOp.operand);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_operand, value) == -1)
+        if (PyObject_SetAttr(result, state->operand, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Lambda_kind:
-        result = PyType_GenericNew(Lambda_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Lambda_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_arguments(o->v.Lambda.args);
+        value = ast2obj_arguments(state, o->v.Lambda.args);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+        if (PyObject_SetAttr(result, state->args, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.Lambda.body);
+        value = ast2obj_expr(state, o->v.Lambda.body);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case IfExp_kind:
-        result = PyType_GenericNew(IfExp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->IfExp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.IfExp.test);
+        value = ast2obj_expr(state, o->v.IfExp.test);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+        if (PyObject_SetAttr(result, state->test, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.IfExp.body);
+        value = ast2obj_expr(state, o->v.IfExp.body);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.IfExp.orelse);
+        value = ast2obj_expr(state, o->v.IfExp.orelse);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+        if (PyObject_SetAttr(result, state->orelse, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Dict_kind:
-        result = PyType_GenericNew(Dict_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Dict_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Dict.keys, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_keys, value) == -1)
+        if (PyObject_SetAttr(result, state->keys, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Dict.values, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
+        if (PyObject_SetAttr(result, state->values, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Set_kind:
-        result = PyType_GenericNew(Set_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Set_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Set.elts, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Set.elts, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
+        if (PyObject_SetAttr(result, state->elts, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case ListComp_kind:
-        result = PyType_GenericNew(ListComp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->ListComp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.ListComp.elt);
+        value = ast2obj_expr(state, o->v.ListComp.elt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
+        if (PyObject_SetAttr(result, state->elt, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ListComp.generators, ast2obj_comprehension);
+        value = ast2obj_list(state, o->v.ListComp.generators,
+                             ast2obj_comprehension);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+        if (PyObject_SetAttr(result, state->generators, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case SetComp_kind:
-        result = PyType_GenericNew(SetComp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->SetComp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.SetComp.elt);
+        value = ast2obj_expr(state, o->v.SetComp.elt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
+        if (PyObject_SetAttr(result, state->elt, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.SetComp.generators, ast2obj_comprehension);
+        value = ast2obj_list(state, o->v.SetComp.generators,
+                             ast2obj_comprehension);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+        if (PyObject_SetAttr(result, state->generators, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case DictComp_kind:
-        result = PyType_GenericNew(DictComp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->DictComp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.DictComp.key);
+        value = ast2obj_expr(state, o->v.DictComp.key);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_key, value) == -1)
+        if (PyObject_SetAttr(result, state->key, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.DictComp.value);
+        value = ast2obj_expr(state, o->v.DictComp.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.DictComp.generators, ast2obj_comprehension);
+        value = ast2obj_list(state, o->v.DictComp.generators,
+                             ast2obj_comprehension);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+        if (PyObject_SetAttr(result, state->generators, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case GeneratorExp_kind:
-        result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
+        tp = (PyTypeObject *)state->GeneratorExp_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.GeneratorExp.elt);
+        value = ast2obj_expr(state, o->v.GeneratorExp.elt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
+        if (PyObject_SetAttr(result, state->elt, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.GeneratorExp.generators,
+        value = ast2obj_list(state, o->v.GeneratorExp.generators,
                              ast2obj_comprehension);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+        if (PyObject_SetAttr(result, state->generators, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Await_kind:
-        result = PyType_GenericNew(Await_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Await_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Await.value);
+        value = ast2obj_expr(state, o->v.Await.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Yield_kind:
-        result = PyType_GenericNew(Yield_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Yield_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Yield.value);
+        value = ast2obj_expr(state, o->v.Yield.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case YieldFrom_kind:
-        result = PyType_GenericNew(YieldFrom_type, NULL, NULL);
+        tp = (PyTypeObject *)state->YieldFrom_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.YieldFrom.value);
+        value = ast2obj_expr(state, o->v.YieldFrom.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Compare_kind:
-        result = PyType_GenericNew(Compare_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Compare_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Compare.left);
+        value = ast2obj_expr(state, o->v.Compare.left);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
+        if (PyObject_SetAttr(result, state->left, value) == -1)
             goto failed;
         Py_DECREF(value);
         {
@@ -3476,192 +4184,222 @@
             value = PyList_New(n);
             if (!value) goto failed;
             for(i = 0; i < n; i++)
-                PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
+                PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
         }
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ops, value) == -1)
+        if (PyObject_SetAttr(result, state->ops, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Compare.comparators, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_comparators, value) == -1)
+        if (PyObject_SetAttr(result, state->comparators, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Call_kind:
-        result = PyType_GenericNew(Call_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Call_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Call.func);
+        value = ast2obj_expr(state, o->v.Call.func);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_func, value) == -1)
+        if (PyObject_SetAttr(result, state->func, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Call.args, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Call.args, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+        if (PyObject_SetAttr(result, state->args, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
+        value = ast2obj_list(state, o->v.Call.keywords, ast2obj_keyword);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
+        if (PyObject_SetAttr(result, state->keywords, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case FormattedValue_kind:
-        result = PyType_GenericNew(FormattedValue_type, NULL, NULL);
+        tp = (PyTypeObject *)state->FormattedValue_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.FormattedValue.value);
+        value = ast2obj_expr(state, o->v.FormattedValue.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_int(o->v.FormattedValue.conversion);
+        value = ast2obj_int(state, o->v.FormattedValue.conversion);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_conversion, value) == -1)
+        if (PyObject_SetAttr(result, state->conversion, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr(o->v.FormattedValue.format_spec);
+        value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_format_spec, value) == -1)
+        if (PyObject_SetAttr(result, state->format_spec, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case JoinedStr_kind:
-        result = PyType_GenericNew(JoinedStr_type, NULL, NULL);
+        tp = (PyTypeObject *)state->JoinedStr_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.JoinedStr.values, ast2obj_expr);
+        value = ast2obj_list(state, o->v.JoinedStr.values, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
+        if (PyObject_SetAttr(result, state->values, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Constant_kind:
-        result = PyType_GenericNew(Constant_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Constant_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_constant(o->v.Constant.value);
+        value = ast2obj_constant(state, o->v.Constant.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.Constant.kind);
+        value = ast2obj_string(state, o->v.Constant.kind);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_kind, value) == -1)
+        if (PyObject_SetAttr(result, state->kind, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Attribute_kind:
-        result = PyType_GenericNew(Attribute_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Attribute_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Attribute.value);
+        value = ast2obj_expr(state, o->v.Attribute.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_identifier(o->v.Attribute.attr);
+        value = ast2obj_identifier(state, o->v.Attribute.attr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_attr, value) == -1)
+        if (PyObject_SetAttr(result, state->attr, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr_context(o->v.Attribute.ctx);
+        value = ast2obj_expr_context(state, o->v.Attribute.ctx);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+        if (PyObject_SetAttr(result, state->ctx, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Subscript_kind:
-        result = PyType_GenericNew(Subscript_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Subscript_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Subscript.value);
+        value = ast2obj_expr(state, o->v.Subscript.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_slice(o->v.Subscript.slice);
+        value = ast2obj_expr(state, o->v.Subscript.slice);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_slice, value) == -1)
+        if (PyObject_SetAttr(result, state->slice, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr_context(o->v.Subscript.ctx);
+        value = ast2obj_expr_context(state, o->v.Subscript.ctx);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+        if (PyObject_SetAttr(result, state->ctx, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Starred_kind:
-        result = PyType_GenericNew(Starred_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Starred_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.Starred.value);
+        value = ast2obj_expr(state, o->v.Starred.value);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+        if (PyObject_SetAttr(result, state->value, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr_context(o->v.Starred.ctx);
+        value = ast2obj_expr_context(state, o->v.Starred.ctx);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+        if (PyObject_SetAttr(result, state->ctx, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Name_kind:
-        result = PyType_GenericNew(Name_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Name_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_identifier(o->v.Name.id);
+        value = ast2obj_identifier(state, o->v.Name.id);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_id, value) == -1)
+        if (PyObject_SetAttr(result, state->id, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr_context(o->v.Name.ctx);
+        value = ast2obj_expr_context(state, o->v.Name.ctx);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+        if (PyObject_SetAttr(result, state->ctx, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case List_kind:
-        result = PyType_GenericNew(List_type, NULL, NULL);
+        tp = (PyTypeObject *)state->List_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.List.elts, ast2obj_expr);
+        value = ast2obj_list(state, o->v.List.elts, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
+        if (PyObject_SetAttr(result, state->elts, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr_context(o->v.List.ctx);
+        value = ast2obj_expr_context(state, o->v.List.ctx);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+        if (PyObject_SetAttr(result, state->ctx, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     case Tuple_kind:
-        result = PyType_GenericNew(Tuple_type, NULL, NULL);
+        tp = (PyTypeObject *)state->Tuple_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
+        value = ast2obj_list(state, o->v.Tuple.elts, ast2obj_expr);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
+        if (PyObject_SetAttr(result, state->elts, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_expr_context(o->v.Tuple.ctx);
+        value = ast2obj_expr_context(state, o->v.Tuple.ctx);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+        if (PyObject_SetAttr(result, state->ctx, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        break;
+    case Slice_kind:
+        tp = (PyTypeObject *)state->Slice_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
+        if (!result) goto failed;
+        value = ast2obj_expr(state, o->v.Slice.lower);
+        if (!value) goto failed;
+        if (PyObject_SetAttr(result, state->lower, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_expr(state, o->v.Slice.upper);
+        if (!value) goto failed;
+        if (PyObject_SetAttr(result, state->upper, value) == -1)
+            goto failed;
+        Py_DECREF(value);
+        value = ast2obj_expr(state, o->v.Slice.step);
+        if (!value) goto failed;
+        if (PyObject_SetAttr(result, state->step, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     }
-    value = ast2obj_int(o->lineno);
+    value = ast2obj_int(state, o->lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->col_offset);
+    value = ast2obj_int(state, o->col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_lineno);
+    value = ast2obj_int(state, o->end_lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_col_offset);
+    value = ast2obj_int(state, o->end_col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -3671,240 +4409,162 @@
     return NULL;
 }
 
-PyObject* ast2obj_expr_context(expr_context_ty o)
+PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty o)
 {
     switch(o) {
         case Load:
-            Py_INCREF(Load_singleton);
-            return Load_singleton;
+            Py_INCREF(state->Load_singleton);
+            return state->Load_singleton;
         case Store:
-            Py_INCREF(Store_singleton);
-            return Store_singleton;
+            Py_INCREF(state->Store_singleton);
+            return state->Store_singleton;
         case Del:
-            Py_INCREF(Del_singleton);
-            return Del_singleton;
-        case AugLoad:
-            Py_INCREF(AugLoad_singleton);
-            return AugLoad_singleton;
-        case AugStore:
-            Py_INCREF(AugStore_singleton);
-            return AugStore_singleton;
-        case Param:
-            Py_INCREF(Param_singleton);
-            return Param_singleton;
-        default:
-            /* should never happen, but just in case ... */
-            PyErr_Format(PyExc_SystemError, "unknown expr_context found");
-            return NULL;
+            Py_INCREF(state->Del_singleton);
+            return state->Del_singleton;
     }
+    Py_UNREACHABLE();
 }
-PyObject*
-ast2obj_slice(void* _o)
-{
-    slice_ty o = (slice_ty)_o;
-    PyObject *result = NULL, *value = NULL;
-    if (!o) {
-        Py_RETURN_NONE;
-    }
-
-    switch (o->kind) {
-    case Slice_kind:
-        result = PyType_GenericNew(Slice_type, NULL, NULL);
-        if (!result) goto failed;
-        value = ast2obj_expr(o->v.Slice.lower);
-        if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_lower, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        value = ast2obj_expr(o->v.Slice.upper);
-        if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_upper, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        value = ast2obj_expr(o->v.Slice.step);
-        if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_step, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        break;
-    case ExtSlice_kind:
-        result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
-        if (!result) goto failed;
-        value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
-        if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_dims, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        break;
-    case Index_kind:
-        result = PyType_GenericNew(Index_type, NULL, NULL);
-        if (!result) goto failed;
-        value = ast2obj_expr(o->v.Index.value);
-        if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
-            goto failed;
-        Py_DECREF(value);
-        break;
-    }
-    return result;
-failed:
-    Py_XDECREF(value);
-    Py_XDECREF(result);
-    return NULL;
-}
-
-PyObject* ast2obj_boolop(boolop_ty o)
+PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty o)
 {
     switch(o) {
         case And:
-            Py_INCREF(And_singleton);
-            return And_singleton;
+            Py_INCREF(state->And_singleton);
+            return state->And_singleton;
         case Or:
-            Py_INCREF(Or_singleton);
-            return Or_singleton;
-        default:
-            /* should never happen, but just in case ... */
-            PyErr_Format(PyExc_SystemError, "unknown boolop found");
-            return NULL;
+            Py_INCREF(state->Or_singleton);
+            return state->Or_singleton;
     }
+    Py_UNREACHABLE();
 }
-PyObject* ast2obj_operator(operator_ty o)
+PyObject* ast2obj_operator(astmodulestate *state, operator_ty o)
 {
     switch(o) {
         case Add:
-            Py_INCREF(Add_singleton);
-            return Add_singleton;
+            Py_INCREF(state->Add_singleton);
+            return state->Add_singleton;
         case Sub:
-            Py_INCREF(Sub_singleton);
-            return Sub_singleton;
+            Py_INCREF(state->Sub_singleton);
+            return state->Sub_singleton;
         case Mult:
-            Py_INCREF(Mult_singleton);
-            return Mult_singleton;
+            Py_INCREF(state->Mult_singleton);
+            return state->Mult_singleton;
         case MatMult:
-            Py_INCREF(MatMult_singleton);
-            return MatMult_singleton;
+            Py_INCREF(state->MatMult_singleton);
+            return state->MatMult_singleton;
         case Div:
-            Py_INCREF(Div_singleton);
-            return Div_singleton;
+            Py_INCREF(state->Div_singleton);
+            return state->Div_singleton;
         case Mod:
-            Py_INCREF(Mod_singleton);
-            return Mod_singleton;
+            Py_INCREF(state->Mod_singleton);
+            return state->Mod_singleton;
         case Pow:
-            Py_INCREF(Pow_singleton);
-            return Pow_singleton;
+            Py_INCREF(state->Pow_singleton);
+            return state->Pow_singleton;
         case LShift:
-            Py_INCREF(LShift_singleton);
-            return LShift_singleton;
+            Py_INCREF(state->LShift_singleton);
+            return state->LShift_singleton;
         case RShift:
-            Py_INCREF(RShift_singleton);
-            return RShift_singleton;
+            Py_INCREF(state->RShift_singleton);
+            return state->RShift_singleton;
         case BitOr:
-            Py_INCREF(BitOr_singleton);
-            return BitOr_singleton;
+            Py_INCREF(state->BitOr_singleton);
+            return state->BitOr_singleton;
         case BitXor:
-            Py_INCREF(BitXor_singleton);
-            return BitXor_singleton;
+            Py_INCREF(state->BitXor_singleton);
+            return state->BitXor_singleton;
         case BitAnd:
-            Py_INCREF(BitAnd_singleton);
-            return BitAnd_singleton;
+            Py_INCREF(state->BitAnd_singleton);
+            return state->BitAnd_singleton;
         case FloorDiv:
-            Py_INCREF(FloorDiv_singleton);
-            return FloorDiv_singleton;
-        default:
-            /* should never happen, but just in case ... */
-            PyErr_Format(PyExc_SystemError, "unknown operator found");
-            return NULL;
+            Py_INCREF(state->FloorDiv_singleton);
+            return state->FloorDiv_singleton;
     }
+    Py_UNREACHABLE();
 }
-PyObject* ast2obj_unaryop(unaryop_ty o)
+PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty o)
 {
     switch(o) {
         case Invert:
-            Py_INCREF(Invert_singleton);
-            return Invert_singleton;
+            Py_INCREF(state->Invert_singleton);
+            return state->Invert_singleton;
         case Not:
-            Py_INCREF(Not_singleton);
-            return Not_singleton;
+            Py_INCREF(state->Not_singleton);
+            return state->Not_singleton;
         case UAdd:
-            Py_INCREF(UAdd_singleton);
-            return UAdd_singleton;
+            Py_INCREF(state->UAdd_singleton);
+            return state->UAdd_singleton;
         case USub:
-            Py_INCREF(USub_singleton);
-            return USub_singleton;
-        default:
-            /* should never happen, but just in case ... */
-            PyErr_Format(PyExc_SystemError, "unknown unaryop found");
-            return NULL;
+            Py_INCREF(state->USub_singleton);
+            return state->USub_singleton;
     }
+    Py_UNREACHABLE();
 }
-PyObject* ast2obj_cmpop(cmpop_ty o)
+PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty o)
 {
     switch(o) {
         case Eq:
-            Py_INCREF(Eq_singleton);
-            return Eq_singleton;
+            Py_INCREF(state->Eq_singleton);
+            return state->Eq_singleton;
         case NotEq:
-            Py_INCREF(NotEq_singleton);
-            return NotEq_singleton;
+            Py_INCREF(state->NotEq_singleton);
+            return state->NotEq_singleton;
         case Lt:
-            Py_INCREF(Lt_singleton);
-            return Lt_singleton;
+            Py_INCREF(state->Lt_singleton);
+            return state->Lt_singleton;
         case LtE:
-            Py_INCREF(LtE_singleton);
-            return LtE_singleton;
+            Py_INCREF(state->LtE_singleton);
+            return state->LtE_singleton;
         case Gt:
-            Py_INCREF(Gt_singleton);
-            return Gt_singleton;
+            Py_INCREF(state->Gt_singleton);
+            return state->Gt_singleton;
         case GtE:
-            Py_INCREF(GtE_singleton);
-            return GtE_singleton;
+            Py_INCREF(state->GtE_singleton);
+            return state->GtE_singleton;
         case Is:
-            Py_INCREF(Is_singleton);
-            return Is_singleton;
+            Py_INCREF(state->Is_singleton);
+            return state->Is_singleton;
         case IsNot:
-            Py_INCREF(IsNot_singleton);
-            return IsNot_singleton;
+            Py_INCREF(state->IsNot_singleton);
+            return state->IsNot_singleton;
         case In:
-            Py_INCREF(In_singleton);
-            return In_singleton;
+            Py_INCREF(state->In_singleton);
+            return state->In_singleton;
         case NotIn:
-            Py_INCREF(NotIn_singleton);
-            return NotIn_singleton;
-        default:
-            /* should never happen, but just in case ... */
-            PyErr_Format(PyExc_SystemError, "unknown cmpop found");
-            return NULL;
+            Py_INCREF(state->NotIn_singleton);
+            return state->NotIn_singleton;
     }
+    Py_UNREACHABLE();
 }
 PyObject*
-ast2obj_comprehension(void* _o)
+ast2obj_comprehension(astmodulestate *state, void* _o)
 {
     comprehension_ty o = (comprehension_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
-    result = PyType_GenericNew(comprehension_type, NULL, NULL);
+    tp = (PyTypeObject *)state->comprehension_type;
+    result = PyType_GenericNew(tp, NULL, NULL);
     if (!result) return NULL;
-    value = ast2obj_expr(o->target);
+    value = ast2obj_expr(state, o->target);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+    if (PyObject_SetAttr(result, state->target, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_expr(o->iter);
+    value = ast2obj_expr(state, o->iter);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+    if (PyObject_SetAttr(result, state->iter, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_list(o->ifs, ast2obj_expr);
+    value = ast2obj_list(state, o->ifs, ast2obj_expr);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_ifs, value) == -1)
+    if (PyObject_SetAttr(result, state->ifs, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->is_async);
+    value = ast2obj_int(state, o->is_async);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_is_async, value) == -1)
+    if (PyObject_SetAttr(result, state->is_async, value) == -1)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -3915,53 +4575,54 @@
 }
 
 PyObject*
-ast2obj_excepthandler(void* _o)
+ast2obj_excepthandler(astmodulestate *state, void* _o)
 {
     excepthandler_ty o = (excepthandler_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
     switch (o->kind) {
     case ExceptHandler_kind:
-        result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
+        tp = (PyTypeObject *)state->ExceptHandler_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_expr(o->v.ExceptHandler.type);
+        value = ast2obj_expr(state, o->v.ExceptHandler.type);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_type, value) == -1)
+        if (PyObject_SetAttr(result, state->type, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_identifier(o->v.ExceptHandler.name);
+        value = ast2obj_identifier(state, o->v.ExceptHandler.name);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+        if (PyObject_SetAttr(result, state->name, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
+        value = ast2obj_list(state, o->v.ExceptHandler.body, ast2obj_stmt);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+        if (PyObject_SetAttr(result, state->body, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
     }
-    value = ast2obj_int(o->lineno);
+    value = ast2obj_int(state, o->lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->col_offset);
+    value = ast2obj_int(state, o->col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_lineno);
+    value = ast2obj_int(state, o->end_lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_col_offset);
+    value = ast2obj_int(state, o->end_col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -3972,49 +4633,50 @@
 }
 
 PyObject*
-ast2obj_arguments(void* _o)
+ast2obj_arguments(astmodulestate *state, void* _o)
 {
     arguments_ty o = (arguments_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
-    result = PyType_GenericNew(arguments_type, NULL, NULL);
+    tp = (PyTypeObject *)state->arguments_type;
+    result = PyType_GenericNew(tp, NULL, NULL);
     if (!result) return NULL;
-    value = ast2obj_list(o->posonlyargs, ast2obj_arg);
+    value = ast2obj_list(state, o->posonlyargs, ast2obj_arg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_posonlyargs, value) == -1)
+    if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_list(o->args, ast2obj_arg);
+    value = ast2obj_list(state, o->args, ast2obj_arg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+    if (PyObject_SetAttr(result, state->args, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_arg(o->vararg);
+    value = ast2obj_arg(state, o->vararg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1)
+    if (PyObject_SetAttr(result, state->vararg, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_list(o->kwonlyargs, ast2obj_arg);
+    value = ast2obj_list(state, o->kwonlyargs, ast2obj_arg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1)
+    if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_list(o->kw_defaults, ast2obj_expr);
+    value = ast2obj_list(state, o->kw_defaults, ast2obj_expr);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1)
+    if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_arg(o->kwarg);
+    value = ast2obj_arg(state, o->kwarg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1)
+    if (PyObject_SetAttr(result, state->kwarg, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_list(o->defaults, ast2obj_expr);
+    value = ast2obj_list(state, o->defaults, ast2obj_expr);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1)
+    if (PyObject_SetAttr(result, state->defaults, value) == -1)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -4025,49 +4687,50 @@
 }
 
 PyObject*
-ast2obj_arg(void* _o)
+ast2obj_arg(astmodulestate *state, void* _o)
 {
     arg_ty o = (arg_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
-    result = PyType_GenericNew(arg_type, NULL, NULL);
+    tp = (PyTypeObject *)state->arg_type;
+    result = PyType_GenericNew(tp, NULL, NULL);
     if (!result) return NULL;
-    value = ast2obj_identifier(o->arg);
+    value = ast2obj_identifier(state, o->arg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
+    if (PyObject_SetAttr(result, state->arg, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_expr(o->annotation);
+    value = ast2obj_expr(state, o->annotation);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
+    if (PyObject_SetAttr(result, state->annotation, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_string(o->type_comment);
+    value = ast2obj_string(state, o->type_comment);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+    if (PyObject_SetAttr(result, state->type_comment, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->lineno);
+    value = ast2obj_int(state, o->lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->col_offset);
+    value = ast2obj_int(state, o->col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_lineno);
+    value = ast2obj_int(state, o->end_lineno);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_int(o->end_col_offset);
+    value = ast2obj_int(state, o->end_col_offset);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -4078,24 +4741,45 @@
 }
 
 PyObject*
-ast2obj_keyword(void* _o)
+ast2obj_keyword(astmodulestate *state, void* _o)
 {
     keyword_ty o = (keyword_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
-    result = PyType_GenericNew(keyword_type, NULL, NULL);
+    tp = (PyTypeObject *)state->keyword_type;
+    result = PyType_GenericNew(tp, NULL, NULL);
     if (!result) return NULL;
-    value = ast2obj_identifier(o->arg);
+    value = ast2obj_identifier(state, o->arg);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
+    if (PyObject_SetAttr(result, state->arg, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_expr(o->value);
+    value = ast2obj_expr(state, o->value);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+    if (PyObject_SetAttr(result, state->value, value) == -1)
+        goto failed;
+    Py_DECREF(value);
+    value = ast2obj_int(state, o->lineno);
+    if (!value) goto failed;
+    if (PyObject_SetAttr(result, state->lineno, value) < 0)
+        goto failed;
+    Py_DECREF(value);
+    value = ast2obj_int(state, o->col_offset);
+    if (!value) goto failed;
+    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
+        goto failed;
+    Py_DECREF(value);
+    value = ast2obj_int(state, o->end_lineno);
+    if (!value) goto failed;
+    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
+        goto failed;
+    Py_DECREF(value);
+    value = ast2obj_int(state, o->end_col_offset);
+    if (!value) goto failed;
+    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -4106,24 +4790,25 @@
 }
 
 PyObject*
-ast2obj_alias(void* _o)
+ast2obj_alias(astmodulestate *state, void* _o)
 {
     alias_ty o = (alias_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
-    result = PyType_GenericNew(alias_type, NULL, NULL);
+    tp = (PyTypeObject *)state->alias_type;
+    result = PyType_GenericNew(tp, NULL, NULL);
     if (!result) return NULL;
-    value = ast2obj_identifier(o->name);
+    value = ast2obj_identifier(state, o->name);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+    if (PyObject_SetAttr(result, state->name, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_identifier(o->asname);
+    value = ast2obj_identifier(state, o->asname);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_asname, value) == -1)
+    if (PyObject_SetAttr(result, state->asname, value) == -1)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -4134,24 +4819,25 @@
 }
 
 PyObject*
-ast2obj_withitem(void* _o)
+ast2obj_withitem(astmodulestate *state, void* _o)
 {
     withitem_ty o = (withitem_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
-    result = PyType_GenericNew(withitem_type, NULL, NULL);
+    tp = (PyTypeObject *)state->withitem_type;
+    result = PyType_GenericNew(tp, NULL, NULL);
     if (!result) return NULL;
-    value = ast2obj_expr(o->context_expr);
+    value = ast2obj_expr(state, o->context_expr);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_context_expr, value) == -1)
+    if (PyObject_SetAttr(result, state->context_expr, value) == -1)
         goto failed;
     Py_DECREF(value);
-    value = ast2obj_expr(o->optional_vars);
+    value = ast2obj_expr(state, o->optional_vars);
     if (!value) goto failed;
-    if (_PyObject_SetAttrId(result, &PyId_optional_vars, value) == -1)
+    if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
         goto failed;
     Py_DECREF(value);
     return result;
@@ -4162,26 +4848,27 @@
 }
 
 PyObject*
-ast2obj_type_ignore(void* _o)
+ast2obj_type_ignore(astmodulestate *state, void* _o)
 {
     type_ignore_ty o = (type_ignore_ty)_o;
     PyObject *result = NULL, *value = NULL;
+    PyTypeObject *tp;
     if (!o) {
         Py_RETURN_NONE;
     }
-
     switch (o->kind) {
     case TypeIgnore_kind:
-        result = PyType_GenericNew(TypeIgnore_type, NULL, NULL);
+        tp = (PyTypeObject *)state->TypeIgnore_type;
+        result = PyType_GenericNew(tp, NULL, NULL);
         if (!result) goto failed;
-        value = ast2obj_int(o->v.TypeIgnore.lineno);
+        value = ast2obj_int(state, o->v.TypeIgnore.lineno);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_lineno, value) == -1)
+        if (PyObject_SetAttr(result, state->lineno, value) == -1)
             goto failed;
         Py_DECREF(value);
-        value = ast2obj_string(o->v.TypeIgnore.tag);
+        value = ast2obj_string(state, o->v.TypeIgnore.tag);
         if (!value) goto failed;
-        if (_PyObject_SetAttrId(result, &PyId_tag, value) == -1)
+        if (PyObject_SetAttr(result, state->tag, value) == -1)
             goto failed;
         Py_DECREF(value);
         break;
@@ -4195,17 +4882,19 @@
 
 
 int
-obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
+obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out, PyArena* arena)
 {
     int isinstance;
 
     PyObject *tmp = NULL;
+    PyObject *tp;
 
     if (obj == Py_None) {
         *out = NULL;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Module_type);
+    tp = state->Module_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -4213,7 +4902,7 @@
         asdl_seq* body;
         asdl_seq* type_ignores;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4225,7 +4914,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4233,7 +4922,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
@@ -4243,7 +4935,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_ignores, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4255,7 +4947,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Module field \"type_ignores\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Module field \"type_ignores\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4263,7 +4955,10 @@
             if (type_ignores == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 type_ignore_ty val;
-                res = obj2ast_type_ignore(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_type_ignore(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
@@ -4277,14 +4972,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Interactive_type);
+    tp = state->Interactive_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* body;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4296,7 +4992,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4304,7 +5000,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
@@ -4318,14 +5017,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Expression_type);
+    tp = state->Expression_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty body;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4334,7 +5034,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &body, arena);
+            res = obj2ast_expr(state, tmp, &body, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -4342,7 +5042,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionType_type);
+    tp = state->FunctionType_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -4350,7 +5051,7 @@
         asdl_seq* argtypes;
         expr_ty returns;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_argtypes, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4362,7 +5063,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "FunctionType field \"argtypes\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "FunctionType field \"argtypes\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4370,7 +5071,10 @@
             if (argtypes == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
@@ -4380,7 +5084,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_returns, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4389,7 +5093,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &returns, arena);
+            res = obj2ast_expr(state, tmp, &returns, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -4397,47 +5101,6 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Suite_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        asdl_seq* body;
-
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL) {
-            PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
-            return 1;
-        }
-        else {
-            int res;
-            Py_ssize_t len;
-            Py_ssize_t i;
-            if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
-                goto failed;
-            }
-            len = PyList_GET_SIZE(tmp);
-            body = _Py_asdl_seq_new(len, arena);
-            if (body == NULL) goto failed;
-            for (i = 0; i < len; i++) {
-                stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
-                if (res != 0) goto failed;
-                if (len != PyList_GET_SIZE(tmp)) {
-                    PyErr_SetString(PyExc_RuntimeError, "Suite field \"body\" changed size during iteration");
-                    goto failed;
-                }
-                asdl_seq_SET(body, i, val);
-            }
-            Py_CLEAR(tmp);
-        }
-        *out = Suite(body, arena);
-        if (*out == NULL) goto failed;
-        return 0;
-    }
 
     PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
     failed:
@@ -4446,11 +5109,12 @@
 }
 
 int
-obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
+obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out, PyArena* arena)
 {
     int isinstance;
 
     PyObject *tmp = NULL;
+    PyObject *tp;
     int lineno;
     int col_offset;
     int end_lineno;
@@ -4460,7 +5124,7 @@
         *out = NULL;
         return 0;
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -4469,11 +5133,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &lineno, arena);
+        res = obj2ast_int(state, tmp, &lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -4482,11 +5146,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &col_offset, arena);
+        res = obj2ast_int(state, tmp, &col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -4495,11 +5159,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_lineno, arena);
+        res = obj2ast_int(state, tmp, &end_lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -4508,11 +5172,12 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_col_offset, arena);
+        res = obj2ast_int(state, tmp, &end_col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionDef_type);
+    tp = state->FunctionDef_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -4524,7 +5189,7 @@
         expr_ty returns;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4533,11 +5198,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &name, arena);
+            res = obj2ast_identifier(state, tmp, &name, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4546,11 +5211,11 @@
         }
         else {
             int res;
-            res = obj2ast_arguments(tmp, &args, arena);
+            res = obj2ast_arguments(state, tmp, &args, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4562,7 +5227,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4570,7 +5235,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
@@ -4580,7 +5248,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_decorator_list, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4592,7 +5260,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4600,7 +5268,10 @@
             if (decorator_list == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
@@ -4610,7 +5281,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_returns, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -4619,11 +5290,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &returns, arena);
+            res = obj2ast_expr(state, tmp, &returns, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -4632,7 +5303,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -4642,7 +5313,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFunctionDef_type);
+    tp = state->AsyncFunctionDef_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -4654,7 +5326,7 @@
         expr_ty returns;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4663,11 +5335,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &name, arena);
+            res = obj2ast_identifier(state, tmp, &name, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4676,11 +5348,11 @@
         }
         else {
             int res;
-            res = obj2ast_arguments(tmp, &args, arena);
+            res = obj2ast_arguments(state, tmp, &args, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4692,7 +5364,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4700,7 +5372,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
@@ -4710,7 +5385,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_decorator_list, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4722,7 +5397,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4730,7 +5405,10 @@
             if (decorator_list == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
@@ -4740,7 +5418,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_returns, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -4749,11 +5427,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &returns, arena);
+            res = obj2ast_expr(state, tmp, &returns, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -4762,7 +5440,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -4772,7 +5450,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
+    tp = state->ClassDef_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -4783,7 +5462,7 @@
         asdl_seq* body;
         asdl_seq* decorator_list;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4792,11 +5471,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &name, arena);
+            res = obj2ast_identifier(state, tmp, &name, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_bases, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4808,7 +5487,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4816,7 +5495,10 @@
             if (bases == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
@@ -4826,7 +5508,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_keywords, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4838,7 +5520,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4846,7 +5528,10 @@
             if (keywords == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 keyword_ty val;
-                res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_keyword(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
@@ -4856,7 +5541,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4868,7 +5553,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4876,7 +5561,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
@@ -4886,7 +5574,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_decorator_list, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4898,7 +5586,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4906,7 +5594,10 @@
             if (decorator_list == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
@@ -4921,14 +5612,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Return_type);
+    tp = state->Return_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -4937,7 +5629,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -4946,14 +5638,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Delete_type);
+    tp = state->Delete_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* targets;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_targets, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -4965,7 +5658,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -4973,7 +5666,10 @@
             if (targets == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
@@ -4988,7 +5684,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Assign_type);
+    tp = state->Assign_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -4997,7 +5694,7 @@
         expr_ty value;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_targets, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5009,7 +5706,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5017,7 +5714,10 @@
             if (targets == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
@@ -5027,7 +5727,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5036,11 +5736,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5049,7 +5749,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5058,7 +5758,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)AugAssign_type);
+    tp = state->AugAssign_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5067,7 +5768,7 @@
         operator_ty op;
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5076,11 +5777,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &target, arena);
+            res = obj2ast_expr(state, tmp, &target, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5089,11 +5790,11 @@
         }
         else {
             int res;
-            res = obj2ast_operator(tmp, &op, arena);
+            res = obj2ast_operator(state, tmp, &op, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5102,7 +5803,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5111,7 +5812,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)AnnAssign_type);
+    tp = state->AnnAssign_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5121,7 +5823,7 @@
         expr_ty value;
         int simple;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5130,11 +5832,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &target, arena);
+            res = obj2ast_expr(state, tmp, &target, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_annotation, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5143,11 +5845,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &annotation, arena);
+            res = obj2ast_expr(state, tmp, &annotation, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5156,11 +5858,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_simple, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5169,7 +5871,7 @@
         }
         else {
             int res;
-            res = obj2ast_int(tmp, &simple, arena);
+            res = obj2ast_int(state, tmp, &simple, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5178,7 +5880,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)For_type);
+    tp = state->For_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5189,7 +5892,7 @@
         asdl_seq* orelse;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5198,11 +5901,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &target, arena);
+            res = obj2ast_expr(state, tmp, &target, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_iter, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5211,11 +5914,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &iter, arena);
+            res = obj2ast_expr(state, tmp, &iter, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5227,7 +5930,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5235,7 +5938,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
@@ -5245,7 +5951,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5257,7 +5963,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5265,7 +5971,10 @@
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
@@ -5275,7 +5984,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5284,7 +5993,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5293,7 +6002,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFor_type);
+    tp = state->AsyncFor_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5304,7 +6014,7 @@
         asdl_seq* orelse;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5313,11 +6023,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &target, arena);
+            res = obj2ast_expr(state, tmp, &target, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_iter, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5326,11 +6036,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &iter, arena);
+            res = obj2ast_expr(state, tmp, &iter, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5342,7 +6052,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5350,7 +6060,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
@@ -5360,7 +6073,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5372,7 +6085,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5380,7 +6093,10 @@
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
@@ -5390,7 +6106,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5399,7 +6115,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5408,7 +6124,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
+    tp = state->While_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5417,7 +6134,7 @@
         asdl_seq* body;
         asdl_seq* orelse;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5426,11 +6143,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &test, arena);
+            res = obj2ast_expr(state, tmp, &test, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5442,7 +6159,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5450,7 +6167,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
@@ -5460,7 +6180,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5472,7 +6192,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5480,7 +6200,10 @@
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
@@ -5495,7 +6218,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)If_type);
+    tp = state->If_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5504,7 +6228,7 @@
         asdl_seq* body;
         asdl_seq* orelse;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5513,11 +6237,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &test, arena);
+            res = obj2ast_expr(state, tmp, &test, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5529,7 +6253,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5537,7 +6261,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
@@ -5547,7 +6274,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5559,7 +6286,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5567,7 +6294,10 @@
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
@@ -5582,7 +6312,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)With_type);
+    tp = state->With_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5591,7 +6322,7 @@
         asdl_seq* body;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_items, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5603,7 +6334,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5611,7 +6342,10 @@
             if (items == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 withitem_ty val;
-                res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_withitem(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
@@ -5621,7 +6355,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5633,7 +6367,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5641,7 +6375,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
@@ -5651,7 +6388,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5660,7 +6397,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5669,7 +6406,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncWith_type);
+    tp = state->AsyncWith_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5678,7 +6416,7 @@
         asdl_seq* body;
         string type_comment;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_items, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5690,7 +6428,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5698,7 +6436,10 @@
             if (items == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 withitem_ty val;
-                res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_withitem(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
@@ -5708,7 +6449,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5720,7 +6461,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5728,7 +6469,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
@@ -5738,7 +6482,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5747,7 +6491,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &type_comment, arena);
+            res = obj2ast_string(state, tmp, &type_comment, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5756,7 +6500,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
+    tp = state->Raise_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5764,7 +6509,7 @@
         expr_ty exc;
         expr_ty cause;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_exc, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5773,11 +6518,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &exc, arena);
+            res = obj2ast_expr(state, tmp, &exc, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_cause, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5786,7 +6531,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &cause, arena);
+            res = obj2ast_expr(state, tmp, &cause, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5795,7 +6540,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Try_type);
+    tp = state->Try_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5805,7 +6551,7 @@
         asdl_seq* orelse;
         asdl_seq* finalbody;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5817,7 +6563,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5825,7 +6571,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
@@ -5835,7 +6584,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_handlers, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5847,7 +6596,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5855,7 +6604,10 @@
             if (handlers == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 excepthandler_ty val;
-                res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_excepthandler(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
@@ -5865,7 +6617,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5877,7 +6629,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5885,7 +6637,10 @@
             if (orelse == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
@@ -5895,7 +6650,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_finalbody, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5907,7 +6662,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5915,7 +6670,10 @@
             if (finalbody == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
@@ -5930,7 +6688,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Assert_type);
+    tp = state->Assert_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -5938,7 +6697,7 @@
         expr_ty test;
         expr_ty msg;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5947,11 +6706,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &test, arena);
+            res = obj2ast_expr(state, tmp, &test, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_msg, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -5960,7 +6719,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &msg, arena);
+            res = obj2ast_expr(state, tmp, &msg, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -5969,14 +6728,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Import_type);
+    tp = state->Import_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* names;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -5988,7 +6748,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -5996,7 +6756,10 @@
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 alias_ty val;
-                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_alias(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
@@ -6011,7 +6774,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)ImportFrom_type);
+    tp = state->ImportFrom_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6020,7 +6784,7 @@
         asdl_seq* names;
         int level;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_module, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -6029,11 +6793,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &module, arena);
+            res = obj2ast_identifier(state, tmp, &module, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6045,7 +6809,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6053,7 +6817,10 @@
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 alias_ty val;
-                res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_alias(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
@@ -6063,7 +6830,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_level, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -6072,7 +6839,7 @@
         }
         else {
             int res;
-            res = obj2ast_int(tmp, &level, arena);
+            res = obj2ast_int(state, tmp, &level, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6081,14 +6848,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Global_type);
+    tp = state->Global_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* names;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6100,7 +6868,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6108,7 +6876,10 @@
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 identifier val;
-                res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_identifier(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
@@ -6123,14 +6894,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Nonlocal_type);
+    tp = state->Nonlocal_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* names;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6142,7 +6914,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6150,7 +6922,10 @@
             if (names == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 identifier val;
-                res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_identifier(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
@@ -6165,14 +6940,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Expr_type);
+    tp = state->Expr_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6181,7 +6957,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6190,7 +6966,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Pass_type);
+    tp = state->Pass_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6200,7 +6977,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Break_type);
+    tp = state->Break_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6210,7 +6988,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Continue_type);
+    tp = state->Continue_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6228,11 +7007,12 @@
 }
 
 int
-obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
+obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out, PyArena* arena)
 {
     int isinstance;
 
     PyObject *tmp = NULL;
+    PyObject *tp;
     int lineno;
     int col_offset;
     int end_lineno;
@@ -6242,7 +7022,7 @@
         *out = NULL;
         return 0;
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -6251,11 +7031,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &lineno, arena);
+        res = obj2ast_int(state, tmp, &lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -6264,11 +7044,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &col_offset, arena);
+        res = obj2ast_int(state, tmp, &col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -6277,11 +7057,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_lineno, arena);
+        res = obj2ast_int(state, tmp, &end_lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -6290,11 +7070,12 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_col_offset, arena);
+        res = obj2ast_int(state, tmp, &end_col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)BoolOp_type);
+    tp = state->BoolOp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6302,7 +7083,7 @@
         boolop_ty op;
         asdl_seq* values;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6311,11 +7092,11 @@
         }
         else {
             int res;
-            res = obj2ast_boolop(tmp, &op, arena);
+            res = obj2ast_boolop(state, tmp, &op, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_values, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6327,7 +7108,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6335,7 +7116,10 @@
             if (values == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
@@ -6350,7 +7134,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)NamedExpr_type);
+    tp = state->NamedExpr_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6358,7 +7143,7 @@
         expr_ty target;
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6367,11 +7152,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &target, arena);
+            res = obj2ast_expr(state, tmp, &target, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6380,7 +7165,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6389,7 +7174,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)BinOp_type);
+    tp = state->BinOp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6398,7 +7184,7 @@
         operator_ty op;
         expr_ty right;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_left, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6407,11 +7193,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &left, arena);
+            res = obj2ast_expr(state, tmp, &left, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6420,11 +7206,11 @@
         }
         else {
             int res;
-            res = obj2ast_operator(tmp, &op, arena);
+            res = obj2ast_operator(state, tmp, &op, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_right, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6433,7 +7219,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &right, arena);
+            res = obj2ast_expr(state, tmp, &right, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6442,7 +7228,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)UnaryOp_type);
+    tp = state->UnaryOp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6450,7 +7237,7 @@
         unaryop_ty op;
         expr_ty operand;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6459,11 +7246,11 @@
         }
         else {
             int res;
-            res = obj2ast_unaryop(tmp, &op, arena);
+            res = obj2ast_unaryop(state, tmp, &op, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_operand, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6472,7 +7259,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &operand, arena);
+            res = obj2ast_expr(state, tmp, &operand, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6481,7 +7268,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Lambda_type);
+    tp = state->Lambda_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6489,7 +7277,7 @@
         arguments_ty args;
         expr_ty body;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6498,11 +7286,11 @@
         }
         else {
             int res;
-            res = obj2ast_arguments(tmp, &args, arena);
+            res = obj2ast_arguments(state, tmp, &args, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6511,7 +7299,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &body, arena);
+            res = obj2ast_expr(state, tmp, &body, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6520,7 +7308,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)IfExp_type);
+    tp = state->IfExp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6529,7 +7318,7 @@
         expr_ty body;
         expr_ty orelse;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6538,11 +7327,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &test, arena);
+            res = obj2ast_expr(state, tmp, &test, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6551,11 +7340,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &body, arena);
+            res = obj2ast_expr(state, tmp, &body, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6564,7 +7353,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &orelse, arena);
+            res = obj2ast_expr(state, tmp, &orelse, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6573,7 +7362,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Dict_type);
+    tp = state->Dict_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6581,7 +7371,7 @@
         asdl_seq* keys;
         asdl_seq* values;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_keys, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6593,7 +7383,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6601,7 +7391,10 @@
             if (keys == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
@@ -6611,7 +7404,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_values, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6623,7 +7416,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6631,7 +7424,10 @@
             if (values == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
@@ -6646,14 +7442,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Set_type);
+    tp = state->Set_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* elts;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_elts, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6665,7 +7462,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6673,7 +7470,10 @@
             if (elts == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
@@ -6687,7 +7487,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)ListComp_type);
+    tp = state->ListComp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6695,7 +7496,7 @@
         expr_ty elt;
         asdl_seq* generators;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_elt, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6704,11 +7505,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &elt, arena);
+            res = obj2ast_expr(state, tmp, &elt, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6720,7 +7521,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6728,7 +7529,10 @@
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty val;
-                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_comprehension(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
@@ -6743,7 +7547,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)SetComp_type);
+    tp = state->SetComp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6751,7 +7556,7 @@
         expr_ty elt;
         asdl_seq* generators;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_elt, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6760,11 +7565,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &elt, arena);
+            res = obj2ast_expr(state, tmp, &elt, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6776,7 +7581,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6784,7 +7589,10 @@
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty val;
-                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_comprehension(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
@@ -6799,7 +7607,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)DictComp_type);
+    tp = state->DictComp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6808,7 +7617,7 @@
         expr_ty value;
         asdl_seq* generators;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_key, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6817,11 +7626,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &key, arena);
+            res = obj2ast_expr(state, tmp, &key, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6830,11 +7639,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6846,7 +7655,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6854,7 +7663,10 @@
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty val;
-                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_comprehension(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
@@ -6869,7 +7681,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type);
+    tp = state->GeneratorExp_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -6877,7 +7690,7 @@
         expr_ty elt;
         asdl_seq* generators;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_elt, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6886,11 +7699,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &elt, arena);
+            res = obj2ast_expr(state, tmp, &elt, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6902,7 +7715,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -6910,7 +7723,10 @@
             if (generators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 comprehension_ty val;
-                res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_comprehension(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
@@ -6925,14 +7741,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Await_type);
+    tp = state->Await_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6941,7 +7758,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6950,14 +7767,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
+    tp = state->Yield_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -6966,7 +7784,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -6975,14 +7793,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)YieldFrom_type);
+    tp = state->YieldFrom_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty value;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -6991,7 +7810,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7000,7 +7819,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Compare_type);
+    tp = state->Compare_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7009,7 +7829,7 @@
         asdl_int_seq* ops;
         asdl_seq* comparators;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_left, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7018,11 +7838,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &left, arena);
+            res = obj2ast_expr(state, tmp, &left, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ops, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7034,7 +7854,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7042,7 +7862,10 @@
             if (ops == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 cmpop_ty val;
-                res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_cmpop(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
@@ -7052,7 +7875,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_comparators, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7064,7 +7887,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7072,7 +7895,10 @@
             if (comparators == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
@@ -7087,7 +7913,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Call_type);
+    tp = state->Call_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7096,7 +7923,7 @@
         asdl_seq* args;
         asdl_seq* keywords;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_func, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7105,11 +7932,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &func, arena);
+            res = obj2ast_expr(state, tmp, &func, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7121,7 +7948,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7129,7 +7956,10 @@
             if (args == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
@@ -7139,7 +7969,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_keywords, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7151,7 +7981,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7159,7 +7989,10 @@
             if (keywords == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 keyword_ty val;
-                res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_keyword(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
@@ -7174,7 +8007,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)FormattedValue_type);
+    tp = state->FormattedValue_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7183,7 +8017,7 @@
         int conversion;
         expr_ty format_spec;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7192,11 +8026,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_conversion, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -7205,11 +8039,11 @@
         }
         else {
             int res;
-            res = obj2ast_int(tmp, &conversion, arena);
+            res = obj2ast_int(state, tmp, &conversion, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_format_spec, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -7218,7 +8052,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &format_spec, arena);
+            res = obj2ast_expr(state, tmp, &format_spec, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7227,14 +8061,15 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)JoinedStr_type);
+    tp = state->JoinedStr_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         asdl_seq* values;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_values, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7246,7 +8081,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7254,7 +8089,10 @@
             if (values == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
@@ -7269,7 +8107,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Constant_type);
+    tp = state->Constant_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7277,7 +8116,7 @@
         constant value;
         string kind;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7286,11 +8125,11 @@
         }
         else {
             int res;
-            res = obj2ast_constant(tmp, &value, arena);
+            res = obj2ast_constant(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_kind, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -7299,7 +8138,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &kind, arena);
+            res = obj2ast_string(state, tmp, &kind, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7308,7 +8147,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type);
+    tp = state->Attribute_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7317,7 +8157,7 @@
         identifier attr;
         expr_context_ty ctx;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7326,11 +8166,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_attr, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7339,11 +8179,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &attr, arena);
+            res = obj2ast_identifier(state, tmp, &attr, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7352,7 +8192,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr_context(tmp, &ctx, arena);
+            res = obj2ast_expr_context(state, tmp, &ctx, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7361,16 +8201,17 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Subscript_type);
+    tp = state->Subscript_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
     if (isinstance) {
         expr_ty value;
-        slice_ty slice;
+        expr_ty slice;
         expr_context_ty ctx;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7379,11 +8220,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_slice, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7392,11 +8233,11 @@
         }
         else {
             int res;
-            res = obj2ast_slice(tmp, &slice, arena);
+            res = obj2ast_expr(state, tmp, &slice, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7405,7 +8246,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr_context(tmp, &ctx, arena);
+            res = obj2ast_expr_context(state, tmp, &ctx, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7414,7 +8255,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Starred_type);
+    tp = state->Starred_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7422,7 +8264,7 @@
         expr_ty value;
         expr_context_ty ctx;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7431,11 +8273,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &value, arena);
+            res = obj2ast_expr(state, tmp, &value, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7444,7 +8286,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr_context(tmp, &ctx, arena);
+            res = obj2ast_expr_context(state, tmp, &ctx, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7453,7 +8295,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Name_type);
+    tp = state->Name_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7461,7 +8304,7 @@
         identifier id;
         expr_context_ty ctx;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_id, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7470,11 +8313,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &id, arena);
+            res = obj2ast_identifier(state, tmp, &id, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7483,7 +8326,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr_context(tmp, &ctx, arena);
+            res = obj2ast_expr_context(state, tmp, &ctx, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7492,7 +8335,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)List_type);
+    tp = state->List_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7500,7 +8344,7 @@
         asdl_seq* elts;
         expr_context_ty ctx;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_elts, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7512,7 +8356,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7520,7 +8364,10 @@
             if (elts == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
@@ -7530,7 +8377,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7539,7 +8386,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr_context(tmp, &ctx, arena);
+            res = obj2ast_expr_context(state, tmp, &ctx, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7548,7 +8395,8 @@
         if (*out == NULL) goto failed;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Tuple_type);
+    tp = state->Tuple_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -7556,7 +8404,7 @@
         asdl_seq* elts;
         expr_context_ty ctx;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_elts, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7568,7 +8416,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -7576,7 +8424,10 @@
             if (elts == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 expr_ty val;
-                res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_expr(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
@@ -7586,7 +8437,7 @@
             }
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -7595,7 +8446,7 @@
         }
         else {
             int res;
-            res = obj2ast_expr_context(tmp, &ctx, arena);
+            res = obj2ast_expr_context(state, tmp, &ctx, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -7604,6 +8455,60 @@
         if (*out == NULL) goto failed;
         return 0;
     }
+    tp = state->Slice_type;
+    isinstance = PyObject_IsInstance(obj, tp);
+    if (isinstance == -1) {
+        return 1;
+    }
+    if (isinstance) {
+        expr_ty lower;
+        expr_ty upper;
+        expr_ty step;
+
+        if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
+            return 1;
+        }
+        if (tmp == NULL || tmp == Py_None) {
+            Py_CLEAR(tmp);
+            lower = NULL;
+        }
+        else {
+            int res;
+            res = obj2ast_expr(state, tmp, &lower, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        }
+        if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
+            return 1;
+        }
+        if (tmp == NULL || tmp == Py_None) {
+            Py_CLEAR(tmp);
+            upper = NULL;
+        }
+        else {
+            int res;
+            res = obj2ast_expr(state, tmp, &upper, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        }
+        if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
+            return 1;
+        }
+        if (tmp == NULL || tmp == Py_None) {
+            Py_CLEAR(tmp);
+            step = NULL;
+        }
+        else {
+            int res;
+            res = obj2ast_expr(state, tmp, &step, arena);
+            if (res != 0) goto failed;
+            Py_CLEAR(tmp);
+        }
+        *out = Slice(lower, upper, step, lineno, col_offset, end_lineno,
+                     end_col_offset, arena);
+        if (*out == NULL) goto failed;
+        return 0;
+    }
 
     PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
     failed:
@@ -7612,11 +8517,12 @@
 }
 
 int
-obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
+obj2ast_expr_context(astmodulestate *state, PyObject* obj, expr_context_ty*
+                     out, PyArena* arena)
 {
     int isinstance;
 
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
+    isinstance = PyObject_IsInstance(obj, state->Load_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7624,7 +8530,7 @@
         *out = Load;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Store_type);
+    isinstance = PyObject_IsInstance(obj, state->Store_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7632,7 +8538,7 @@
         *out = Store;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Del_type);
+    isinstance = PyObject_IsInstance(obj, state->Del_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7640,176 +8546,18 @@
         *out = Del;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)AugLoad_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        *out = AugLoad;
-        return 0;
-    }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)AugStore_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        *out = AugStore;
-        return 0;
-    }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Param_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        *out = Param;
-        return 0;
-    }
 
     PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
     return 1;
 }
 
 int
-obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
+obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out, PyArena*
+               arena)
 {
     int isinstance;
 
-    PyObject *tmp = NULL;
-
-    if (obj == Py_None) {
-        *out = NULL;
-        return 0;
-    }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Slice_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        expr_ty lower;
-        expr_ty upper;
-        expr_ty step;
-
-        if (_PyObject_LookupAttrId(obj, &PyId_lower, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL || tmp == Py_None) {
-            Py_CLEAR(tmp);
-            lower = NULL;
-        }
-        else {
-            int res;
-            res = obj2ast_expr(tmp, &lower, arena);
-            if (res != 0) goto failed;
-            Py_CLEAR(tmp);
-        }
-        if (_PyObject_LookupAttrId(obj, &PyId_upper, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL || tmp == Py_None) {
-            Py_CLEAR(tmp);
-            upper = NULL;
-        }
-        else {
-            int res;
-            res = obj2ast_expr(tmp, &upper, arena);
-            if (res != 0) goto failed;
-            Py_CLEAR(tmp);
-        }
-        if (_PyObject_LookupAttrId(obj, &PyId_step, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL || tmp == Py_None) {
-            Py_CLEAR(tmp);
-            step = NULL;
-        }
-        else {
-            int res;
-            res = obj2ast_expr(tmp, &step, arena);
-            if (res != 0) goto failed;
-            Py_CLEAR(tmp);
-        }
-        *out = Slice(lower, upper, step, arena);
-        if (*out == NULL) goto failed;
-        return 0;
-    }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)ExtSlice_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        asdl_seq* dims;
-
-        if (_PyObject_LookupAttrId(obj, &PyId_dims, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL) {
-            PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
-            return 1;
-        }
-        else {
-            int res;
-            Py_ssize_t len;
-            Py_ssize_t i;
-            if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
-                goto failed;
-            }
-            len = PyList_GET_SIZE(tmp);
-            dims = _Py_asdl_seq_new(len, arena);
-            if (dims == NULL) goto failed;
-            for (i = 0; i < len; i++) {
-                slice_ty val;
-                res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &val, arena);
-                if (res != 0) goto failed;
-                if (len != PyList_GET_SIZE(tmp)) {
-                    PyErr_SetString(PyExc_RuntimeError, "ExtSlice field \"dims\" changed size during iteration");
-                    goto failed;
-                }
-                asdl_seq_SET(dims, i, val);
-            }
-            Py_CLEAR(tmp);
-        }
-        *out = ExtSlice(dims, arena);
-        if (*out == NULL) goto failed;
-        return 0;
-    }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)Index_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        expr_ty value;
-
-        if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
-            return 1;
-        }
-        if (tmp == NULL) {
-            PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
-            return 1;
-        }
-        else {
-            int res;
-            res = obj2ast_expr(tmp, &value, arena);
-            if (res != 0) goto failed;
-            Py_CLEAR(tmp);
-        }
-        *out = Index(value, arena);
-        if (*out == NULL) goto failed;
-        return 0;
-    }
-
-    PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %R", obj);
-    failed:
-    Py_XDECREF(tmp);
-    return 1;
-}
-
-int
-obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
-{
-    int isinstance;
-
-    isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
+    isinstance = PyObject_IsInstance(obj, state->And_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7817,7 +8565,7 @@
         *out = And;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Or_type);
+    isinstance = PyObject_IsInstance(obj, state->Or_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7831,11 +8579,12 @@
 }
 
 int
-obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
+obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty* out,
+                 PyArena* arena)
 {
     int isinstance;
 
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
+    isinstance = PyObject_IsInstance(obj, state->Add_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7843,7 +8592,7 @@
         *out = Add;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Sub_type);
+    isinstance = PyObject_IsInstance(obj, state->Sub_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7851,7 +8600,7 @@
         *out = Sub;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Mult_type);
+    isinstance = PyObject_IsInstance(obj, state->Mult_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7859,7 +8608,7 @@
         *out = Mult;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)MatMult_type);
+    isinstance = PyObject_IsInstance(obj, state->MatMult_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7867,7 +8616,7 @@
         *out = MatMult;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
+    isinstance = PyObject_IsInstance(obj, state->Div_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7875,7 +8624,7 @@
         *out = Div;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Mod_type);
+    isinstance = PyObject_IsInstance(obj, state->Mod_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7883,7 +8632,7 @@
         *out = Mod;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Pow_type);
+    isinstance = PyObject_IsInstance(obj, state->Pow_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7891,7 +8640,7 @@
         *out = Pow;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)LShift_type);
+    isinstance = PyObject_IsInstance(obj, state->LShift_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7899,7 +8648,7 @@
         *out = LShift;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)RShift_type);
+    isinstance = PyObject_IsInstance(obj, state->RShift_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7907,7 +8656,7 @@
         *out = RShift;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)BitOr_type);
+    isinstance = PyObject_IsInstance(obj, state->BitOr_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7915,7 +8664,7 @@
         *out = BitOr;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)BitXor_type);
+    isinstance = PyObject_IsInstance(obj, state->BitXor_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7923,7 +8672,7 @@
         *out = BitXor;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)BitAnd_type);
+    isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7931,7 +8680,7 @@
         *out = BitAnd;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)FloorDiv_type);
+    isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7945,11 +8694,12 @@
 }
 
 int
-obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
+obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty* out, PyArena*
+                arena)
 {
     int isinstance;
 
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
+    isinstance = PyObject_IsInstance(obj, state->Invert_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7957,7 +8707,7 @@
         *out = Invert;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Not_type);
+    isinstance = PyObject_IsInstance(obj, state->Not_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7965,7 +8715,7 @@
         *out = Not;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)UAdd_type);
+    isinstance = PyObject_IsInstance(obj, state->UAdd_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7973,7 +8723,7 @@
         *out = UAdd;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)USub_type);
+    isinstance = PyObject_IsInstance(obj, state->USub_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7987,11 +8737,12 @@
 }
 
 int
-obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
+obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out, PyArena*
+              arena)
 {
     int isinstance;
 
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
+    isinstance = PyObject_IsInstance(obj, state->Eq_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -7999,7 +8750,7 @@
         *out = Eq;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)NotEq_type);
+    isinstance = PyObject_IsInstance(obj, state->NotEq_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8007,7 +8758,7 @@
         *out = NotEq;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Lt_type);
+    isinstance = PyObject_IsInstance(obj, state->Lt_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8015,7 +8766,7 @@
         *out = Lt;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)LtE_type);
+    isinstance = PyObject_IsInstance(obj, state->LtE_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8023,7 +8774,7 @@
         *out = LtE;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Gt_type);
+    isinstance = PyObject_IsInstance(obj, state->Gt_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8031,7 +8782,7 @@
         *out = Gt;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)GtE_type);
+    isinstance = PyObject_IsInstance(obj, state->GtE_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8039,7 +8790,7 @@
         *out = GtE;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)Is_type);
+    isinstance = PyObject_IsInstance(obj, state->Is_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8047,7 +8798,7 @@
         *out = Is;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)IsNot_type);
+    isinstance = PyObject_IsInstance(obj, state->IsNot_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8055,7 +8806,7 @@
         *out = IsNot;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)In_type);
+    isinstance = PyObject_IsInstance(obj, state->In_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8063,7 +8814,7 @@
         *out = In;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject *)NotIn_type);
+    isinstance = PyObject_IsInstance(obj, state->NotIn_type);
     if (isinstance == -1) {
         return 1;
     }
@@ -8077,7 +8828,8 @@
 }
 
 int
-obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
+obj2ast_comprehension(astmodulestate *state, PyObject* obj, comprehension_ty*
+                      out, PyArena* arena)
 {
     PyObject* tmp = NULL;
     expr_ty target;
@@ -8085,7 +8837,7 @@
     asdl_seq* ifs;
     int is_async;
 
-    if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8094,11 +8846,11 @@
     }
     else {
         int res;
-        res = obj2ast_expr(tmp, &target, arena);
+        res = obj2ast_expr(state, tmp, &target, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_iter, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8107,11 +8859,11 @@
     }
     else {
         int res;
-        res = obj2ast_expr(tmp, &iter, arena);
+        res = obj2ast_expr(state, tmp, &iter, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_ifs, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8123,7 +8875,7 @@
         Py_ssize_t len;
         Py_ssize_t i;
         if (!PyList_Check(tmp)) {
-            PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+            PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
@@ -8131,7 +8883,10 @@
         if (ifs == NULL) goto failed;
         for (i = 0; i < len; i++) {
             expr_ty val;
-            res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+            PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+            Py_INCREF(tmp2);
+            res = obj2ast_expr(state, tmp2, &val, arena);
+            Py_DECREF(tmp2);
             if (res != 0) goto failed;
             if (len != PyList_GET_SIZE(tmp)) {
                 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
@@ -8141,7 +8896,7 @@
         }
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_is_async, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8150,7 +8905,7 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &is_async, arena);
+        res = obj2ast_int(state, tmp, &is_async, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
@@ -8162,11 +8917,13 @@
 }
 
 int
-obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
+obj2ast_excepthandler(astmodulestate *state, PyObject* obj, excepthandler_ty*
+                      out, PyArena* arena)
 {
     int isinstance;
 
     PyObject *tmp = NULL;
+    PyObject *tp;
     int lineno;
     int col_offset;
     int end_lineno;
@@ -8176,7 +8933,7 @@
         *out = NULL;
         return 0;
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8185,11 +8942,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &lineno, arena);
+        res = obj2ast_int(state, tmp, &lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8198,11 +8955,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &col_offset, arena);
+        res = obj2ast_int(state, tmp, &col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8211,11 +8968,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_lineno, arena);
+        res = obj2ast_int(state, tmp, &end_lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8224,11 +8981,12 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_col_offset, arena);
+        res = obj2ast_int(state, tmp, &end_col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type);
+    tp = state->ExceptHandler_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -8237,7 +8995,7 @@
         identifier name;
         asdl_seq* body;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_type, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -8246,11 +9004,11 @@
         }
         else {
             int res;
-            res = obj2ast_expr(tmp, &type, arena);
+            res = obj2ast_expr(state, tmp, &type, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL || tmp == Py_None) {
@@ -8259,11 +9017,11 @@
         }
         else {
             int res;
-            res = obj2ast_identifier(tmp, &name, arena);
+            res = obj2ast_identifier(state, tmp, &name, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -8275,7 +9033,7 @@
             Py_ssize_t len;
             Py_ssize_t i;
             if (!PyList_Check(tmp)) {
-                PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+                PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
                 goto failed;
             }
             len = PyList_GET_SIZE(tmp);
@@ -8283,7 +9041,10 @@
             if (body == NULL) goto failed;
             for (i = 0; i < len; i++) {
                 stmt_ty val;
-                res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+                PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+                Py_INCREF(tmp2);
+                res = obj2ast_stmt(state, tmp2, &val, arena);
+                Py_DECREF(tmp2);
                 if (res != 0) goto failed;
                 if (len != PyList_GET_SIZE(tmp)) {
                     PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
@@ -8306,7 +9067,8 @@
 }
 
 int
-obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
+obj2ast_arguments(astmodulestate *state, PyObject* obj, arguments_ty* out,
+                  PyArena* arena)
 {
     PyObject* tmp = NULL;
     asdl_seq* posonlyargs;
@@ -8317,7 +9079,7 @@
     arg_ty kwarg;
     asdl_seq* defaults;
 
-    if (_PyObject_LookupAttrId(obj, &PyId_posonlyargs, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8329,7 +9091,7 @@
         Py_ssize_t len;
         Py_ssize_t i;
         if (!PyList_Check(tmp)) {
-            PyErr_Format(PyExc_TypeError, "arguments field \"posonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+            PyErr_Format(PyExc_TypeError, "arguments field \"posonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
@@ -8337,7 +9099,10 @@
         if (posonlyargs == NULL) goto failed;
         for (i = 0; i < len; i++) {
             arg_ty val;
-            res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &val, arena);
+            PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+            Py_INCREF(tmp2);
+            res = obj2ast_arg(state, tmp2, &val, arena);
+            Py_DECREF(tmp2);
             if (res != 0) goto failed;
             if (len != PyList_GET_SIZE(tmp)) {
                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
@@ -8347,7 +9112,7 @@
         }
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8359,7 +9124,7 @@
         Py_ssize_t len;
         Py_ssize_t i;
         if (!PyList_Check(tmp)) {
-            PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+            PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
@@ -8367,7 +9132,10 @@
         if (args == NULL) goto failed;
         for (i = 0; i < len; i++) {
             arg_ty val;
-            res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &val, arena);
+            PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+            Py_INCREF(tmp2);
+            res = obj2ast_arg(state, tmp2, &val, arena);
+            Py_DECREF(tmp2);
             if (res != 0) goto failed;
             if (len != PyList_GET_SIZE(tmp)) {
                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
@@ -8377,7 +9145,7 @@
         }
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_vararg, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8386,11 +9154,11 @@
     }
     else {
         int res;
-        res = obj2ast_arg(tmp, &vararg, arena);
+        res = obj2ast_arg(state, tmp, &vararg, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_kwonlyargs, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8402,7 +9170,7 @@
         Py_ssize_t len;
         Py_ssize_t i;
         if (!PyList_Check(tmp)) {
-            PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+            PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
@@ -8410,7 +9178,10 @@
         if (kwonlyargs == NULL) goto failed;
         for (i = 0; i < len; i++) {
             arg_ty val;
-            res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &val, arena);
+            PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+            Py_INCREF(tmp2);
+            res = obj2ast_arg(state, tmp2, &val, arena);
+            Py_DECREF(tmp2);
             if (res != 0) goto failed;
             if (len != PyList_GET_SIZE(tmp)) {
                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
@@ -8420,7 +9191,7 @@
         }
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_kw_defaults, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8432,7 +9203,7 @@
         Py_ssize_t len;
         Py_ssize_t i;
         if (!PyList_Check(tmp)) {
-            PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+            PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
@@ -8440,7 +9211,10 @@
         if (kw_defaults == NULL) goto failed;
         for (i = 0; i < len; i++) {
             expr_ty val;
-            res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+            PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+            Py_INCREF(tmp2);
+            res = obj2ast_expr(state, tmp2, &val, arena);
+            Py_DECREF(tmp2);
             if (res != 0) goto failed;
             if (len != PyList_GET_SIZE(tmp)) {
                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
@@ -8450,7 +9224,7 @@
         }
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_kwarg, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8459,11 +9233,11 @@
     }
     else {
         int res;
-        res = obj2ast_arg(tmp, &kwarg, arena);
+        res = obj2ast_arg(state, tmp, &kwarg, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_defaults, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8475,7 +9249,7 @@
         Py_ssize_t len;
         Py_ssize_t i;
         if (!PyList_Check(tmp)) {
-            PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+            PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
             goto failed;
         }
         len = PyList_GET_SIZE(tmp);
@@ -8483,7 +9257,10 @@
         if (defaults == NULL) goto failed;
         for (i = 0; i < len; i++) {
             expr_ty val;
-            res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+            PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+            Py_INCREF(tmp2);
+            res = obj2ast_expr(state, tmp2, &val, arena);
+            Py_DECREF(tmp2);
             if (res != 0) goto failed;
             if (len != PyList_GET_SIZE(tmp)) {
                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
@@ -8502,7 +9279,7 @@
 }
 
 int
-obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena)
+obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out, PyArena* arena)
 {
     PyObject* tmp = NULL;
     identifier arg;
@@ -8513,7 +9290,7 @@
     int end_lineno;
     int end_col_offset;
 
-    if (_PyObject_LookupAttrId(obj, &PyId_arg, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8522,11 +9299,11 @@
     }
     else {
         int res;
-        res = obj2ast_identifier(tmp, &arg, arena);
+        res = obj2ast_identifier(state, tmp, &arg, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_annotation, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8535,11 +9312,11 @@
     }
     else {
         int res;
-        res = obj2ast_expr(tmp, &annotation, arena);
+        res = obj2ast_expr(state, tmp, &annotation, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8548,11 +9325,11 @@
     }
     else {
         int res;
-        res = obj2ast_string(tmp, &type_comment, arena);
+        res = obj2ast_string(state, tmp, &type_comment, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8561,11 +9338,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &lineno, arena);
+        res = obj2ast_int(state, tmp, &lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8574,11 +9351,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &col_offset, arena);
+        res = obj2ast_int(state, tmp, &col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8587,11 +9364,11 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_lineno, arena);
+        res = obj2ast_int(state, tmp, &end_lineno, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8600,7 +9377,7 @@
     }
     else {
         int res;
-        res = obj2ast_int(tmp, &end_col_offset, arena);
+        res = obj2ast_int(state, tmp, &end_col_offset, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
@@ -8613,13 +9390,18 @@
 }
 
 int
-obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
+obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty* out, PyArena*
+                arena)
 {
     PyObject* tmp = NULL;
     identifier arg;
     expr_ty value;
+    int lineno;
+    int col_offset;
+    int end_lineno;
+    int end_col_offset;
 
-    if (_PyObject_LookupAttrId(obj, &PyId_arg, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8628,11 +9410,11 @@
     }
     else {
         int res;
-        res = obj2ast_identifier(tmp, &arg, arena);
+        res = obj2ast_identifier(state, tmp, &arg, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8641,11 +9423,64 @@
     }
     else {
         int res;
-        res = obj2ast_expr(tmp, &value, arena);
+        res = obj2ast_expr(state, tmp, &value, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    *out = keyword(arg, value, arena);
+    if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
+        return 1;
+    }
+    if (tmp == NULL) {
+        PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
+        return 1;
+    }
+    else {
+        int res;
+        res = obj2ast_int(state, tmp, &lineno, arena);
+        if (res != 0) goto failed;
+        Py_CLEAR(tmp);
+    }
+    if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
+        return 1;
+    }
+    if (tmp == NULL) {
+        PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
+        return 1;
+    }
+    else {
+        int res;
+        res = obj2ast_int(state, tmp, &col_offset, arena);
+        if (res != 0) goto failed;
+        Py_CLEAR(tmp);
+    }
+    if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
+        return 1;
+    }
+    if (tmp == NULL || tmp == Py_None) {
+        Py_CLEAR(tmp);
+        end_lineno = 0;
+    }
+    else {
+        int res;
+        res = obj2ast_int(state, tmp, &end_lineno, arena);
+        if (res != 0) goto failed;
+        Py_CLEAR(tmp);
+    }
+    if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
+        return 1;
+    }
+    if (tmp == NULL || tmp == Py_None) {
+        Py_CLEAR(tmp);
+        end_col_offset = 0;
+    }
+    else {
+        int res;
+        res = obj2ast_int(state, tmp, &end_col_offset, arena);
+        if (res != 0) goto failed;
+        Py_CLEAR(tmp);
+    }
+    *out = keyword(arg, value, lineno, col_offset, end_lineno, end_col_offset,
+                   arena);
     return 0;
 failed:
     Py_XDECREF(tmp);
@@ -8653,13 +9488,14 @@
 }
 
 int
-obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
+obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out, PyArena*
+              arena)
 {
     PyObject* tmp = NULL;
     identifier name;
     identifier asname;
 
-    if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8668,11 +9504,11 @@
     }
     else {
         int res;
-        res = obj2ast_identifier(tmp, &name, arena);
+        res = obj2ast_identifier(state, tmp, &name, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_asname, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8681,7 +9517,7 @@
     }
     else {
         int res;
-        res = obj2ast_identifier(tmp, &asname, arena);
+        res = obj2ast_identifier(state, tmp, &asname, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
@@ -8693,13 +9529,14 @@
 }
 
 int
-obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena)
+obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty* out,
+                 PyArena* arena)
 {
     PyObject* tmp = NULL;
     expr_ty context_expr;
     expr_ty optional_vars;
 
-    if (_PyObject_LookupAttrId(obj, &PyId_context_expr, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL) {
@@ -8708,11 +9545,11 @@
     }
     else {
         int res;
-        res = obj2ast_expr(tmp, &context_expr, arena);
+        res = obj2ast_expr(state, tmp, &context_expr, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
-    if (_PyObject_LookupAttrId(obj, &PyId_optional_vars, &tmp) < 0) {
+    if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
         return 1;
     }
     if (tmp == NULL || tmp == Py_None) {
@@ -8721,7 +9558,7 @@
     }
     else {
         int res;
-        res = obj2ast_expr(tmp, &optional_vars, arena);
+        res = obj2ast_expr(state, tmp, &optional_vars, arena);
         if (res != 0) goto failed;
         Py_CLEAR(tmp);
     }
@@ -8733,17 +9570,20 @@
 }
 
 int
-obj2ast_type_ignore(PyObject* obj, type_ignore_ty* out, PyArena* arena)
+obj2ast_type_ignore(astmodulestate *state, PyObject* obj, type_ignore_ty* out,
+                    PyArena* arena)
 {
     int isinstance;
 
     PyObject *tmp = NULL;
+    PyObject *tp;
 
     if (obj == Py_None) {
         *out = NULL;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, (PyObject*)TypeIgnore_type);
+    tp = state->TypeIgnore_type;
+    isinstance = PyObject_IsInstance(obj, tp);
     if (isinstance == -1) {
         return 1;
     }
@@ -8751,7 +9591,7 @@
         int lineno;
         string tag;
 
-        if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -8760,11 +9600,11 @@
         }
         else {
             int res;
-            res = obj2ast_int(tmp, &lineno, arena);
+            res = obj2ast_int(state, tmp, &lineno, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
-        if (_PyObject_LookupAttrId(obj, &PyId_tag, &tmp) < 0) {
+        if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
             return 1;
         }
         if (tmp == NULL) {
@@ -8773,7 +9613,7 @@
         }
         else {
             int res;
-            res = obj2ast_string(tmp, &tag, arena);
+            res = obj2ast_string(state, tmp, &tag, arena);
             if (res != 0) goto failed;
             Py_CLEAR(tmp);
         }
@@ -8789,257 +9629,514 @@
 }
 
 
-static struct PyModuleDef _astmodule = {
-  PyModuleDef_HEAD_INIT, "_ast"
+static int
+astmodule_exec(PyObject *m)
+{
+    astmodulestate *state = get_ast_state(m);
+
+    if (!init_types(state)) {
+        return -1;
+    }
+    if (PyModule_AddObject(m, "AST", state->AST_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->AST_type);
+    if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
+        return -1;
+    }
+    if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
+        return -1;
+    }
+    if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
+        return -1;
+    }
+    if (PyModule_AddObject(m, "mod", state->mod_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->mod_type);
+    if (PyModule_AddObject(m, "Module", state->Module_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Module_type);
+    if (PyModule_AddObject(m, "Interactive", state->Interactive_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Interactive_type);
+    if (PyModule_AddObject(m, "Expression", state->Expression_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Expression_type);
+    if (PyModule_AddObject(m, "FunctionType", state->FunctionType_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->FunctionType_type);
+    if (PyModule_AddObject(m, "stmt", state->stmt_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->stmt_type);
+    if (PyModule_AddObject(m, "FunctionDef", state->FunctionDef_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->FunctionDef_type);
+    if (PyModule_AddObject(m, "AsyncFunctionDef", state->AsyncFunctionDef_type)
+        < 0) {
+        return -1;
+    }
+    Py_INCREF(state->AsyncFunctionDef_type);
+    if (PyModule_AddObject(m, "ClassDef", state->ClassDef_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->ClassDef_type);
+    if (PyModule_AddObject(m, "Return", state->Return_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Return_type);
+    if (PyModule_AddObject(m, "Delete", state->Delete_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Delete_type);
+    if (PyModule_AddObject(m, "Assign", state->Assign_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Assign_type);
+    if (PyModule_AddObject(m, "AugAssign", state->AugAssign_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->AugAssign_type);
+    if (PyModule_AddObject(m, "AnnAssign", state->AnnAssign_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->AnnAssign_type);
+    if (PyModule_AddObject(m, "For", state->For_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->For_type);
+    if (PyModule_AddObject(m, "AsyncFor", state->AsyncFor_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->AsyncFor_type);
+    if (PyModule_AddObject(m, "While", state->While_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->While_type);
+    if (PyModule_AddObject(m, "If", state->If_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->If_type);
+    if (PyModule_AddObject(m, "With", state->With_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->With_type);
+    if (PyModule_AddObject(m, "AsyncWith", state->AsyncWith_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->AsyncWith_type);
+    if (PyModule_AddObject(m, "Raise", state->Raise_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Raise_type);
+    if (PyModule_AddObject(m, "Try", state->Try_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Try_type);
+    if (PyModule_AddObject(m, "Assert", state->Assert_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Assert_type);
+    if (PyModule_AddObject(m, "Import", state->Import_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Import_type);
+    if (PyModule_AddObject(m, "ImportFrom", state->ImportFrom_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->ImportFrom_type);
+    if (PyModule_AddObject(m, "Global", state->Global_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Global_type);
+    if (PyModule_AddObject(m, "Nonlocal", state->Nonlocal_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Nonlocal_type);
+    if (PyModule_AddObject(m, "Expr", state->Expr_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Expr_type);
+    if (PyModule_AddObject(m, "Pass", state->Pass_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Pass_type);
+    if (PyModule_AddObject(m, "Break", state->Break_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Break_type);
+    if (PyModule_AddObject(m, "Continue", state->Continue_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Continue_type);
+    if (PyModule_AddObject(m, "expr", state->expr_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->expr_type);
+    if (PyModule_AddObject(m, "BoolOp", state->BoolOp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->BoolOp_type);
+    if (PyModule_AddObject(m, "NamedExpr", state->NamedExpr_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->NamedExpr_type);
+    if (PyModule_AddObject(m, "BinOp", state->BinOp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->BinOp_type);
+    if (PyModule_AddObject(m, "UnaryOp", state->UnaryOp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->UnaryOp_type);
+    if (PyModule_AddObject(m, "Lambda", state->Lambda_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Lambda_type);
+    if (PyModule_AddObject(m, "IfExp", state->IfExp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->IfExp_type);
+    if (PyModule_AddObject(m, "Dict", state->Dict_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Dict_type);
+    if (PyModule_AddObject(m, "Set", state->Set_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Set_type);
+    if (PyModule_AddObject(m, "ListComp", state->ListComp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->ListComp_type);
+    if (PyModule_AddObject(m, "SetComp", state->SetComp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->SetComp_type);
+    if (PyModule_AddObject(m, "DictComp", state->DictComp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->DictComp_type);
+    if (PyModule_AddObject(m, "GeneratorExp", state->GeneratorExp_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->GeneratorExp_type);
+    if (PyModule_AddObject(m, "Await", state->Await_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Await_type);
+    if (PyModule_AddObject(m, "Yield", state->Yield_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Yield_type);
+    if (PyModule_AddObject(m, "YieldFrom", state->YieldFrom_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->YieldFrom_type);
+    if (PyModule_AddObject(m, "Compare", state->Compare_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Compare_type);
+    if (PyModule_AddObject(m, "Call", state->Call_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Call_type);
+    if (PyModule_AddObject(m, "FormattedValue", state->FormattedValue_type) <
+        0) {
+        return -1;
+    }
+    Py_INCREF(state->FormattedValue_type);
+    if (PyModule_AddObject(m, "JoinedStr", state->JoinedStr_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->JoinedStr_type);
+    if (PyModule_AddObject(m, "Constant", state->Constant_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Constant_type);
+    if (PyModule_AddObject(m, "Attribute", state->Attribute_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Attribute_type);
+    if (PyModule_AddObject(m, "Subscript", state->Subscript_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Subscript_type);
+    if (PyModule_AddObject(m, "Starred", state->Starred_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Starred_type);
+    if (PyModule_AddObject(m, "Name", state->Name_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Name_type);
+    if (PyModule_AddObject(m, "List", state->List_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->List_type);
+    if (PyModule_AddObject(m, "Tuple", state->Tuple_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Tuple_type);
+    if (PyModule_AddObject(m, "Slice", state->Slice_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Slice_type);
+    if (PyModule_AddObject(m, "expr_context", state->expr_context_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->expr_context_type);
+    if (PyModule_AddObject(m, "Load", state->Load_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Load_type);
+    if (PyModule_AddObject(m, "Store", state->Store_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Store_type);
+    if (PyModule_AddObject(m, "Del", state->Del_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Del_type);
+    if (PyModule_AddObject(m, "boolop", state->boolop_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->boolop_type);
+    if (PyModule_AddObject(m, "And", state->And_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->And_type);
+    if (PyModule_AddObject(m, "Or", state->Or_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Or_type);
+    if (PyModule_AddObject(m, "operator", state->operator_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->operator_type);
+    if (PyModule_AddObject(m, "Add", state->Add_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Add_type);
+    if (PyModule_AddObject(m, "Sub", state->Sub_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Sub_type);
+    if (PyModule_AddObject(m, "Mult", state->Mult_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Mult_type);
+    if (PyModule_AddObject(m, "MatMult", state->MatMult_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->MatMult_type);
+    if (PyModule_AddObject(m, "Div", state->Div_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Div_type);
+    if (PyModule_AddObject(m, "Mod", state->Mod_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Mod_type);
+    if (PyModule_AddObject(m, "Pow", state->Pow_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Pow_type);
+    if (PyModule_AddObject(m, "LShift", state->LShift_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->LShift_type);
+    if (PyModule_AddObject(m, "RShift", state->RShift_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->RShift_type);
+    if (PyModule_AddObject(m, "BitOr", state->BitOr_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->BitOr_type);
+    if (PyModule_AddObject(m, "BitXor", state->BitXor_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->BitXor_type);
+    if (PyModule_AddObject(m, "BitAnd", state->BitAnd_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->BitAnd_type);
+    if (PyModule_AddObject(m, "FloorDiv", state->FloorDiv_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->FloorDiv_type);
+    if (PyModule_AddObject(m, "unaryop", state->unaryop_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->unaryop_type);
+    if (PyModule_AddObject(m, "Invert", state->Invert_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Invert_type);
+    if (PyModule_AddObject(m, "Not", state->Not_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Not_type);
+    if (PyModule_AddObject(m, "UAdd", state->UAdd_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->UAdd_type);
+    if (PyModule_AddObject(m, "USub", state->USub_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->USub_type);
+    if (PyModule_AddObject(m, "cmpop", state->cmpop_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->cmpop_type);
+    if (PyModule_AddObject(m, "Eq", state->Eq_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Eq_type);
+    if (PyModule_AddObject(m, "NotEq", state->NotEq_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->NotEq_type);
+    if (PyModule_AddObject(m, "Lt", state->Lt_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Lt_type);
+    if (PyModule_AddObject(m, "LtE", state->LtE_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->LtE_type);
+    if (PyModule_AddObject(m, "Gt", state->Gt_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Gt_type);
+    if (PyModule_AddObject(m, "GtE", state->GtE_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->GtE_type);
+    if (PyModule_AddObject(m, "Is", state->Is_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->Is_type);
+    if (PyModule_AddObject(m, "IsNot", state->IsNot_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->IsNot_type);
+    if (PyModule_AddObject(m, "In", state->In_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->In_type);
+    if (PyModule_AddObject(m, "NotIn", state->NotIn_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->NotIn_type);
+    if (PyModule_AddObject(m, "comprehension", state->comprehension_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->comprehension_type);
+    if (PyModule_AddObject(m, "excepthandler", state->excepthandler_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->excepthandler_type);
+    if (PyModule_AddObject(m, "ExceptHandler", state->ExceptHandler_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->ExceptHandler_type);
+    if (PyModule_AddObject(m, "arguments", state->arguments_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->arguments_type);
+    if (PyModule_AddObject(m, "arg", state->arg_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->arg_type);
+    if (PyModule_AddObject(m, "keyword", state->keyword_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->keyword_type);
+    if (PyModule_AddObject(m, "alias", state->alias_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->alias_type);
+    if (PyModule_AddObject(m, "withitem", state->withitem_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->withitem_type);
+    if (PyModule_AddObject(m, "type_ignore", state->type_ignore_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->type_ignore_type);
+    if (PyModule_AddObject(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
+        return -1;
+    }
+    Py_INCREF(state->TypeIgnore_type);
+    return 0;
+}
+
+static PyModuleDef_Slot astmodule_slots[] = {
+    {Py_mod_exec, astmodule_exec},
+    {0, NULL}
 };
+
+static struct PyModuleDef _astmodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "_ast",
+    // The _ast module uses a global state (global_ast_state).
+    .m_size = 0,
+    .m_slots = astmodule_slots,
+};
+
 PyMODINIT_FUNC
 PyInit__ast(void)
 {
-    PyObject *m, *d;
-    if (!init_types()) return NULL;
-    m = PyModule_Create(&_astmodule);
-    if (!m) return NULL;
-    d = PyModule_GetDict(m);
-    if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return NULL;
-    if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0)
-        return NULL;
-    if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0)
-        return NULL;
-    if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type) <
-        0) return NULL;
-    if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "FunctionType", (PyObject*)FunctionType_type) <
-        0) return NULL;
-    if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type) <
-        0) return NULL;
-    if (PyDict_SetItemString(d, "AsyncFunctionDef",
-        (PyObject*)AsyncFunctionDef_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "AnnAssign", (PyObject*)AnnAssign_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "AsyncFor", (PyObject*)AsyncFor_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "AsyncWith", (PyObject*)AsyncWith_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Try", (PyObject*)Try_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Nonlocal", (PyObject*)Nonlocal_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "NamedExpr", (PyObject*)NamedExpr_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Set", (PyObject*)Set_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "SetComp", (PyObject*)SetComp_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "DictComp", (PyObject*)DictComp_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "GeneratorExp", (PyObject*)GeneratorExp_type) <
-        0) return NULL;
-    if (PyDict_SetItemString(d, "Await", (PyObject*)Await_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "YieldFrom", (PyObject*)YieldFrom_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "FormattedValue",
-        (PyObject*)FormattedValue_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "JoinedStr", (PyObject*)JoinedStr_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Constant", (PyObject*)Constant_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Starred", (PyObject*)Starred_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "expr_context", (PyObject*)expr_context_type) <
-        0) return NULL;
-    if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "MatMult", (PyObject*)MatMult_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "comprehension", (PyObject*)comprehension_type)
-        < 0) return NULL;
-    if (PyDict_SetItemString(d, "excepthandler", (PyObject*)excepthandler_type)
-        < 0) return NULL;
-    if (PyDict_SetItemString(d, "ExceptHandler", (PyObject*)ExceptHandler_type)
-        < 0) return NULL;
-    if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "arg", (PyObject*)arg_type) < 0) return NULL;
-    if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return
-        NULL;
-    if (PyDict_SetItemString(d, "withitem", (PyObject*)withitem_type) < 0)
-        return NULL;
-    if (PyDict_SetItemString(d, "type_ignore", (PyObject*)type_ignore_type) <
-        0) return NULL;
-    if (PyDict_SetItemString(d, "TypeIgnore", (PyObject*)TypeIgnore_type) < 0)
-        return NULL;
-    return m;
+    return PyModuleDef_Init(&_astmodule);
 }
 
 
 PyObject* PyAST_mod2obj(mod_ty t)
 {
-    if (!init_types())
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
         return NULL;
-    return ast2obj_mod(t);
+    }
+    return ast2obj_mod(state, t);
 }
 
 /* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
 mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
 {
-    PyObject *req_type[3];
-    char *req_name[] = {"Module", "Expression", "Interactive"};
+    const char * const req_name[] = {"Module", "Expression", "Interactive"};
     int isinstance;
 
     if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
         return NULL;
     }
 
-    req_type[0] = (PyObject*)Module_type;
-    req_type[1] = (PyObject*)Expression_type;
-    req_type[2] = (PyObject*)Interactive_type;
+    astmodulestate *state = get_global_ast_state();
+    PyObject *req_type[3];
+    req_type[0] = state->Module_type;
+    req_type[1] = state->Expression_type;
+    req_type[2] = state->Interactive_type;
 
     assert(0 <= mode && mode <= 2);
 
-    if (!init_types())
-        return NULL;
-
     isinstance = PyObject_IsInstance(ast, req_type[mode]);
     if (isinstance == -1)
         return NULL;
     if (!isinstance) {
         PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
-                     req_name[mode], Py_TYPE(ast)->tp_name);
+                     req_name[mode], _PyType_Name(Py_TYPE(ast)));
         return NULL;
     }
 
     mod_ty res = NULL;
-    if (obj2ast_mod(ast, &res, arena) != 0)
+    if (obj2ast_mod(state, ast, &res, arena) != 0)
         return NULL;
     else
         return res;
@@ -9047,9 +10144,11 @@
 
 int PyAST_Check(PyObject* obj)
 {
-    if (!init_types())
+    astmodulestate *state = get_global_ast_state();
+    if (state == NULL) {
         return -1;
-    return PyObject_IsInstance(obj, (PyObject*)&AST_type);
+    }
+    return PyObject_IsInstance(obj, state->AST_type);
 }
 
 
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 52a13df..91a78fe 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -1,6 +1,9 @@
 #include "Python.h"
-#include "pycore_pystate.h"
-#include "frameobject.h"
+#include "pycore_initconfig.h"
+#include "pycore_interp.h"        // PyInterpreterState.warnings
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+#include "frameobject.h"          // PyFrame_GetBack()
 #include "clinic/_warnings.c.h"
 
 #define MODULE_NAME "_warnings"
@@ -23,14 +26,17 @@
 /* Forward declaration of the _warnings module definition. */
 static struct PyModuleDef warningsmodule;
 
+_Py_IDENTIFIER(__name__);
+
 /* Given a module object, get its per-module state. */
 static WarningsState *
-_Warnings_GetState()
+warnings_get_state(void)
 {
-    PyThreadState *tstate = PyThreadState_GET();
+    PyThreadState *tstate = _PyThreadState_GET();
     if (tstate == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        "_Warnings_GetState: could not identify current interpreter");
+        _PyErr_SetString(tstate, PyExc_RuntimeError,
+                          "warnings_get_state: could not identify "
+                          "current interpreter");
         return NULL;
     }
     return &tstate->interp->warnings;
@@ -38,7 +44,7 @@
 
 /* Clear the given warnings module state. */
 static void
-_Warnings_ClearState(WarningsState *st)
+warnings_clear_state(WarningsState *st)
 {
     Py_CLEAR(st->filters);
     Py_CLEAR(st->once_registry);
@@ -63,11 +69,14 @@
         }
     } else {
         modname_obj = Py_None;
+        Py_INCREF(modname_obj);
     }
 
     /* This assumes the line number is zero for now. */
-    return PyTuple_Pack(5, action_str, Py_None,
-                        category, modname_obj, _PyLong_Zero);
+    PyObject *filter = PyTuple_Pack(5, action_str, Py_None,
+                                    category, modname_obj, _PyLong_Zero);
+    Py_DECREF(modname_obj);
+    return filter;
 }
 #endif
 
@@ -108,7 +117,7 @@
 
 /* Initialize the given warnings module state. */
 static int
-_Warnings_InitState(WarningsState *st)
+warnings_init_state(WarningsState *st)
 {
     if (st->filters == NULL) {
         st->filters = init_filters();
@@ -136,7 +145,7 @@
     return 0;
 
 error:
-    _Warnings_ClearState(st);
+    warnings_clear_state(st);
     return -1;
 }
 
@@ -164,7 +173,7 @@
     }
 
     /* Otherwise assume a regex filter and call its match() method */
-    result = _PyObject_CallMethodIdObjArgs(obj, &PyId_match, arg, NULL);
+    result = _PyObject_CallMethodIdOneArg(obj, &PyId_match, arg);
     if (result == NULL)
         return -1;
 
@@ -206,7 +215,7 @@
            gone, then we can't even use PyImport_GetModule without triggering
            an interpreter abort.
         */
-        if (!_PyInterpreterState_GET_UNSAFE()->modules) {
+        if (!_PyInterpreterState_GET()->modules) {
             return NULL;
         }
         warnings_module = PyImport_GetModule(warnings_str);
@@ -282,7 +291,7 @@
     Py_ssize_t i;
     PyObject *warnings_filters;
     _Py_IDENTIFIER(filters);
-    WarningsState *st = _Warnings_GetState();
+    WarningsState *st = warnings_get_state();
     if (st == NULL) {
         return NULL;
     }
@@ -384,7 +393,7 @@
     if (key == NULL)
         return -1;
 
-    WarningsState *st = _Warnings_GetState();
+    WarningsState *st = warnings_get_state();
     if (st == NULL) {
         return -1;
     }
@@ -430,7 +439,7 @@
 {
     PyObject *module;
     int kind;
-    void *data;
+    const void *data;
     Py_ssize_t len;
 
     len = PyUnicode_GetLength(filename);
@@ -482,13 +491,13 @@
     PyObject *f_stderr;
     PyObject *name;
     char lineno_str[128];
-    _Py_IDENTIFIER(__name__);
 
     PyOS_snprintf(lineno_str, sizeof(lineno_str), ":%d: ", lineno);
 
     name = _PyObject_GetAttrId(category, &PyId___name__);
-    if (name == NULL)  /* XXX Can an object lack a '__name__' attribute? */
+    if (name == NULL) {
         goto error;
+    }
 
     f_stderr = _PySys_GetObjectId(&PyId_stderr);
     if (f_stderr == NULL) {
@@ -514,7 +523,7 @@
     /* Print "  source_line\n" */
     if (sourceline) {
         int kind;
-        void *data;
+        const void *data;
         Py_ssize_t i, len;
         Py_UCS4 ch;
         PyObject *truncated;
@@ -590,7 +599,7 @@
     if (msg == NULL)
         goto error;
 
-    res = PyObject_CallFunctionObjArgs(show_fn, msg, NULL);
+    res = PyObject_CallOneArg(show_fn, msg);
     Py_DECREF(show_fn);
     Py_DECREF(msg);
 
@@ -647,11 +656,11 @@
         text = PyObject_Str(message);
         if (text == NULL)
             goto cleanup;
-        category = (PyObject*)message->ob_type;
+        category = (PyObject*)Py_TYPE(message);
     }
     else {
         text = message;
-        message = PyObject_CallFunctionObjArgs(category, message, NULL);
+        message = PyObject_CallOneArg(category, message);
         if (message == NULL)
             goto cleanup;
     }
@@ -703,7 +712,7 @@
 
         if (_PyUnicode_EqualToASCIIString(action, "once")) {
             if (registry == NULL || registry == Py_None) {
-                WarningsState *st = _Warnings_GetState();
+                WarningsState *st = warnings_get_state();
                 if (st == NULL) {
                     goto cleanup;
                 }
@@ -756,7 +765,6 @@
 {
     static PyObject *importlib_string = NULL;
     static PyObject *bootstrap_string = NULL;
-    PyObject *filename;
     int contains;
 
     if (importlib_string == NULL) {
@@ -774,14 +782,21 @@
         Py_INCREF(bootstrap_string);
     }
 
-    if (frame == NULL || frame->f_code == NULL ||
-            frame->f_code->co_filename == NULL) {
+    if (frame == NULL) {
         return 0;
     }
-    filename = frame->f_code->co_filename;
+
+    PyCodeObject *code = PyFrame_GetCode(frame);
+    PyObject *filename = code->co_filename;
+    Py_DECREF(code);
+
+    if (filename == NULL) {
+        return 0;
+    }
     if (!PyUnicode_Check(filename)) {
         return 0;
     }
+
     contains = PyUnicode_Contains(filename, importlib_string);
     if (contains < 0) {
         return 0;
@@ -803,7 +818,9 @@
 next_external_frame(PyFrameObject *frame)
 {
     do {
-        frame = frame->f_back;
+        PyFrameObject *back = PyFrame_GetBack(frame);
+        Py_DECREF(frame);
+        frame = back;
     } while (frame != NULL && is_internal_frame(frame));
 
     return frame;
@@ -816,16 +833,18 @@
               PyObject **module, PyObject **registry)
 {
     _Py_IDENTIFIER(__warningregistry__);
-    _Py_IDENTIFIER(__name__);
     PyObject *globals;
 
     /* Setup globals, filename and lineno. */
-    PyFrameObject *f = _PyThreadState_GET()->frame;
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyFrameObject *f = PyThreadState_GetFrame(tstate);
     // Stack level comparisons to Python code is off by one as there is no
     // warnings-related stack level to avoid.
     if (stack_level <= 0 || is_internal_frame(f)) {
         while (--stack_level > 0 && f != NULL) {
-            f = f->f_back;
+            PyFrameObject *back = PyFrame_GetBack(f);
+            Py_DECREF(f);
+            f = back;
         }
     }
     else {
@@ -835,15 +854,18 @@
     }
 
     if (f == NULL) {
-        globals = _PyInterpreterState_GET_UNSAFE()->sysdict;
+        globals = _PyInterpreterState_GET()->sysdict;
         *filename = PyUnicode_FromString("sys");
         *lineno = 1;
     }
     else {
         globals = f->f_globals;
-        *filename = f->f_code->co_filename;
+        PyCodeObject *code = PyFrame_GetCode(f);
+        *filename = code->co_filename;
+        Py_DECREF(code);
         Py_INCREF(*filename);
         *lineno = PyFrame_GetLineNumber(f);
+        Py_DECREF(f);
     }
 
     *module = NULL;
@@ -855,7 +877,7 @@
     if (*registry == NULL) {
         int rc;
 
-        if (PyErr_Occurred()) {
+        if (_PyErr_Occurred(tstate)) {
             goto handle_error;
         }
         *registry = PyDict_New();
@@ -874,7 +896,7 @@
     if (*module == Py_None || (*module != NULL && PyUnicode_Check(*module))) {
         Py_INCREF(*module);
     }
-    else if (PyErr_Occurred()) {
+    else if (_PyErr_Occurred(tstate)) {
         goto handle_error;
     }
     else {
@@ -903,7 +925,7 @@
         return NULL;
 
     if (rc == 1)
-        category = (PyObject*)message->ob_type;
+        category = (PyObject*)Py_TYPE(message);
     else if (category == NULL || category == Py_None)
         category = PyExc_UserWarning;
 
@@ -966,7 +988,6 @@
 {
     _Py_IDENTIFIER(get_source);
     _Py_IDENTIFIER(__loader__);
-    _Py_IDENTIFIER(__name__);
     PyObject *loader;
     PyObject *module_name;
     PyObject *get_source;
@@ -995,7 +1016,7 @@
         return NULL;
     }
     /* Call get_source() to get the source code. */
-    source = PyObject_CallFunctionObjArgs(get_source, module_name, NULL);
+    source = PyObject_CallOneArg(get_source, module_name);
     Py_DECREF(get_source);
     Py_DECREF(module_name);
     if (!source) {
@@ -1064,7 +1085,7 @@
 static PyObject *
 warnings_filters_mutated(PyObject *self, PyObject *args)
 {
-    WarningsState *st = _Warnings_GetState();
+    WarningsState *st = warnings_get_state();
     if (st == NULL) {
         return NULL;
     }
@@ -1126,6 +1147,23 @@
     return res;
 }
 
+static int
+_PyErr_WarnFormat(PyObject *source, PyObject *category, Py_ssize_t stack_level,
+                  const char *format, ...)
+{
+    int res;
+    va_list vargs;
+
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, format);
+#else
+    va_start(vargs);
+#endif
+    res = _PyErr_WarnFormatV(source, category, stack_level, format, vargs);
+    va_end(vargs);
+    return res;
+}
+
 int
 PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level,
                       const char *format, ...)
@@ -1282,7 +1320,7 @@
     int warned = 0;
     PyObject *fn = get_warnings_attr(&PyId__warn_unawaited_coroutine, 1);
     if (fn) {
-        PyObject *res = PyObject_CallFunctionObjArgs(fn, coro, NULL);
+        PyObject *res = PyObject_CallOneArg(fn, coro);
         Py_DECREF(fn);
         if (res || PyErr_ExceptionMatches(PyExc_RuntimeWarning)) {
             warned = 1;
@@ -1294,9 +1332,9 @@
         PyErr_WriteUnraisable(coro);
     }
     if (!warned) {
-        if (PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
-                             "coroutine '%.50S' was never awaited",
-                             ((PyCoroObject *)coro)->cr_qualname) < 0)
+        if (_PyErr_WarnFormat(coro, PyExc_RuntimeWarning, 1,
+                              "coroutine '%S' was never awaited",
+                              ((PyCoroObject *)coro)->cr_qualname) < 0)
         {
             PyErr_WriteUnraisable(coro);
         }
@@ -1331,6 +1369,16 @@
 };
 
 
+PyStatus
+_PyWarnings_InitState(PyThreadState *tstate)
+{
+    if (warnings_init_state(&tstate->interp->warnings) < 0) {
+        return _PyStatus_ERR("can't initialize warnings");
+    }
+    return _PyStatus_OK();
+}
+
+
 PyMODINIT_FUNC
 _PyWarnings_Init(void)
 {
@@ -1341,11 +1389,11 @@
         return NULL;
     }
 
-    WarningsState *st = _Warnings_GetState();
+    WarningsState *st = warnings_get_state();
     if (st == NULL) {
         goto error;
     }
-    if (_Warnings_InitState(st) < 0) {
+    if (warnings_init_state(st) < 0) {
         goto error;
     }
 
@@ -1368,7 +1416,7 @@
 
 error:
     if (st != NULL) {
-        _Warnings_ClearState(st);
+        warnings_clear_state(st);
     }
     Py_DECREF(m);
     return NULL;
@@ -1378,5 +1426,5 @@
 void
 _PyWarnings_Fini(PyInterpreterState *interp)
 {
-    _Warnings_ClearState(&interp->warnings);
+    warnings_clear_state(&interp->warnings);
 }
diff --git a/Python/ast.c b/Python/ast.c
index 7c1d24d..c7ba4d9 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -59,31 +59,6 @@
 }
 
 static int
-validate_slice(slice_ty slice)
-{
-    switch (slice->kind) {
-    case Slice_kind:
-        return (!slice->v.Slice.lower || validate_expr(slice->v.Slice.lower, Load)) &&
-            (!slice->v.Slice.upper || validate_expr(slice->v.Slice.upper, Load)) &&
-            (!slice->v.Slice.step || validate_expr(slice->v.Slice.step, Load));
-    case ExtSlice_kind: {
-        Py_ssize_t i;
-        if (!validate_nonempty_seq(slice->v.ExtSlice.dims, "dims", "ExtSlice"))
-            return 0;
-        for (i = 0; i < asdl_seq_LEN(slice->v.ExtSlice.dims); i++)
-            if (!validate_slice(asdl_seq_GET(slice->v.ExtSlice.dims, i)))
-                return 0;
-        return 1;
-    }
-    case Index_kind:
-        return validate_expr(slice->v.Index.value, Load);
-    default:
-        PyErr_SetString(PyExc_SystemError, "unknown slice node");
-        return 0;
-    }
-}
-
-static int
 validate_keywords(asdl_seq *keywords)
 {
     Py_ssize_t i;
@@ -115,12 +90,6 @@
         return "Store";
     case Del:
         return "Del";
-    case AugLoad:
-        return "AugLoad";
-    case AugStore:
-        return "AugStore";
-    case Param:
-        return "Param";
     default:
         Py_UNREACHABLE();
     }
@@ -197,6 +166,11 @@
         return 1;
     }
 
+    if (!PyErr_Occurred()) {
+        PyErr_Format(PyExc_TypeError,
+                     "got an invalid type in Constant: %s",
+                     _PyType_Name(Py_TYPE(value)));
+    }
     return 0;
 }
 
@@ -314,9 +288,6 @@
             validate_keywords(exp->v.Call.keywords);
     case Constant_kind:
         if (!validate_constant(exp->v.Constant.value)) {
-            PyErr_Format(PyExc_TypeError,
-                         "got an invalid type in Constant: %s",
-                         Py_TYPE(exp->v.Constant.value)->tp_name);
             return 0;
         }
         return 1;
@@ -331,10 +302,14 @@
     case Attribute_kind:
         return validate_expr(exp->v.Attribute.value, Load);
     case Subscript_kind:
-        return validate_slice(exp->v.Subscript.slice) &&
+        return validate_expr(exp->v.Subscript.slice, Load) &&
             validate_expr(exp->v.Subscript.value, Load);
     case Starred_kind:
         return validate_expr(exp->v.Starred.value, ctx);
+    case Slice_kind:
+        return (!exp->v.Slice.lower || validate_expr(exp->v.Slice.lower, Load)) &&
+            (!exp->v.Slice.upper || validate_expr(exp->v.Slice.upper, Load)) &&
+            (!exp->v.Slice.step || validate_expr(exp->v.Slice.step, Load));
     case List_kind:
         return validate_exprs(exp->v.List.elts, ctx, 0);
     case Tuple_kind:
@@ -567,9 +542,6 @@
     case Expression_kind:
         res = validate_expr(mod->v.Expression.body, Load);
         break;
-    case Suite_kind:
-        PyErr_SetString(PyExc_ValueError, "Suite is not valid in the CPython compiler");
-        break;
     default:
         PyErr_SetString(PyExc_SystemError, "impossible module node");
         res = 0;
@@ -640,12 +612,11 @@
        identifier; if so, normalize to NFKC. */
     if (!PyUnicode_IS_ASCII(id)) {
         PyObject *id2;
-        _Py_IDENTIFIER(NFKC);
         if (!c->c_normalize && !init_normalization(c)) {
             Py_DECREF(id);
             return NULL;
         }
-        PyObject *form = _PyUnicode_FromId(&PyId_NFKC);
+        PyObject *form = PyUnicode_InternFromString("NFKC");
         if (form == NULL) {
             Py_DECREF(id);
             return NULL;
@@ -653,13 +624,14 @@
         PyObject *args[2] = {form, id};
         id2 = _PyObject_FastCall(c->c_normalize, args, 2);
         Py_DECREF(id);
+        Py_DECREF(form);
         if (!id2)
             return NULL;
         if (!PyUnicode_Check(id2)) {
             PyErr_Format(PyExc_TypeError,
                          "unicodedata.normalize() must return a string, not "
                          "%.200s",
-                         Py_TYPE(id2)->tp_name);
+                         _PyType_Name(Py_TYPE(id2)));
             Py_DECREF(id2);
             return NULL;
         }
@@ -777,11 +749,8 @@
                 return l;
             }
         default: {
-            char buf[128];
-
-            sprintf(buf, "Non-statement found: %d %d",
-                    TYPE(n), NCH(n));
-            Py_FatalError(buf);
+            _Py_FatalErrorFormat(__func__, "Non-statement found: %d %d",
+                                 TYPE(n), NCH(n));
         }
     }
     Py_UNREACHABLE();
@@ -1148,14 +1117,7 @@
 {
     asdl_seq *s = NULL;
 
-    /* The ast defines augmented store and load contexts, but the
-       implementation here doesn't actually use them.  The code may be
-       a little more complex than necessary as a result.  It also means
-       that expressions in an augmented assignment have a Store context.
-       Consider restructuring so that augmented assignment uses
-       set_context(), too.
-    */
-    assert(ctx != AugStore && ctx != AugLoad);
+    /* Expressions in an augmented assignment have a Store context. */
 
     switch (e->kind) {
         case Attribute_kind:
@@ -1715,79 +1677,15 @@
 }
 
 static expr_ty
-ast_for_dotted_name(struct compiling *c, const node *n)
-{
-    expr_ty e;
-    identifier id;
-    int lineno, col_offset;
-    int i;
-    node *ch;
-
-    REQ(n, dotted_name);
-
-    lineno = LINENO(n);
-    col_offset = n->n_col_offset;
-
-    ch = CHILD(n, 0);
-    id = NEW_IDENTIFIER(ch);
-    if (!id)
-        return NULL;
-    e = Name(id, Load, lineno, col_offset,
-             ch->n_end_lineno, ch->n_end_col_offset, c->c_arena);
-    if (!e)
-        return NULL;
-
-    for (i = 2; i < NCH(n); i+=2) {
-        const node *child = CHILD(n, i);
-        id = NEW_IDENTIFIER(child);
-        if (!id)
-            return NULL;
-        e = Attribute(e, id, Load, lineno, col_offset,
-                      child->n_end_lineno, child->n_end_col_offset, c->c_arena);
-        if (!e)
-            return NULL;
-    }
-
-    return e;
-}
-
-static expr_ty
 ast_for_decorator(struct compiling *c, const node *n)
 {
-    /* decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE */
-    expr_ty d = NULL;
-    expr_ty name_expr;
+    /* decorator: '@' namedexpr_test NEWLINE */
 
     REQ(n, decorator);
     REQ(CHILD(n, 0), AT);
-    REQ(RCHILD(n, -1), NEWLINE);
+    REQ(CHILD(n, 2), NEWLINE);
 
-    name_expr = ast_for_dotted_name(c, CHILD(n, 1));
-    if (!name_expr)
-        return NULL;
-
-    if (NCH(n) == 3) { /* No arguments */
-        d = name_expr;
-        name_expr = NULL;
-    }
-    else if (NCH(n) == 5) { /* Call with no arguments */
-        d = Call(name_expr, NULL, NULL,
-                 name_expr->lineno, name_expr->col_offset,
-                 CHILD(n, 3)->n_end_lineno, CHILD(n, 3)->n_end_col_offset,
-                 c->c_arena);
-        if (!d)
-            return NULL;
-        name_expr = NULL;
-    }
-    else {
-        d = ast_for_call(c, CHILD(n, 3), name_expr,
-                         CHILD(n, 1), CHILD(n, 2), CHILD(n, 4));
-        if (!d)
-            return NULL;
-        name_expr = NULL;
-    }
-
-    return d;
+    return ast_for_expr(c, CHILD(n, 1));
 }
 
 static asdl_seq*
@@ -2561,7 +2459,7 @@
     }
 }
 
-static slice_ty
+static expr_ty
 ast_for_slice(struct compiling *c, const node *n)
 {
     node *ch;
@@ -2575,13 +2473,7 @@
     */
     ch = CHILD(n, 0);
     if (NCH(n) == 1 && TYPE(ch) == test) {
-        /* 'step' variable hold no significance in terms of being used over
-           other vars */
-        step = ast_for_expr(c, ch);
-        if (!step)
-            return NULL;
-
-        return Index(step, c->c_arena);
+        return ast_for_expr(c, ch);
     }
 
     if (TYPE(ch) == test) {
@@ -2623,7 +2515,8 @@
         }
     }
 
-    return Slice(lower, upper, step, c->c_arena);
+    return Slice(lower, upper, step, LINENO(n), n->n_col_offset,
+                 n->n_end_lineno, n->n_end_col_offset, c->c_arena);
 }
 
 static expr_ty
@@ -2711,7 +2604,7 @@
         REQ(CHILD(n, 2), RSQB);
         n = CHILD(n, 1);
         if (NCH(n) == 1) {
-            slice_ty slc = ast_for_slice(c, CHILD(n, 0));
+            expr_ty slc = ast_for_slice(c, CHILD(n, 0));
             if (!slc)
                 return NULL;
             return Subscript(left_expr, slc, Load, LINENO(start), start->n_col_offset,
@@ -2719,47 +2612,27 @@
                              c->c_arena);
         }
         else {
-            /* The grammar is ambiguous here. The ambiguity is resolved
-               by treating the sequence as a tuple literal if there are
-               no slice features.
-            */
-            Py_ssize_t j;
-            slice_ty slc;
-            expr_ty e;
-            int simple = 1;
-            asdl_seq *slices, *elts;
-            slices = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
-            if (!slices)
+            int j;
+            expr_ty slc, e;
+            asdl_seq *elts;
+            elts = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+            if (!elts)
                 return NULL;
             for (j = 0; j < NCH(n); j += 2) {
                 slc = ast_for_slice(c, CHILD(n, j));
                 if (!slc)
                     return NULL;
-                if (slc->kind != Index_kind)
-                    simple = 0;
-                asdl_seq_SET(slices, j / 2, slc);
-            }
-            if (!simple) {
-                return Subscript(left_expr, ExtSlice(slices, c->c_arena),
-                                 Load, LINENO(start), start->n_col_offset,
-                                 n_copy->n_end_lineno, n_copy->n_end_col_offset, c->c_arena);
-            }
-            /* extract Index values and put them in a Tuple */
-            elts = _Py_asdl_seq_new(asdl_seq_LEN(slices), c->c_arena);
-            if (!elts)
-                return NULL;
-            for (j = 0; j < asdl_seq_LEN(slices); ++j) {
-                slc = (slice_ty)asdl_seq_GET(slices, j);
-                assert(slc->kind == Index_kind  && slc->v.Index.value);
-                asdl_seq_SET(elts, j, slc->v.Index.value);
+                asdl_seq_SET(elts, j / 2, slc);
             }
             e = Tuple(elts, Load, LINENO(n), n->n_col_offset,
-                      n->n_end_lineno, n->n_end_col_offset, c->c_arena);
+                      n->n_end_lineno, n->n_end_col_offset,
+                      c->c_arena);
             if (!e)
                 return NULL;
-            return Subscript(left_expr, Index(e, c->c_arena),
+            return Subscript(left_expr, e,
                              Load, LINENO(start), start->n_col_offset,
-                             n_copy->n_end_lineno, n_copy->n_end_col_offset, c->c_arena);
+                             n_copy->n_end_lineno, n_copy->n_end_col_offset,
+                             c->c_arena);
         }
     }
 }
@@ -3163,7 +3036,8 @@
                 e = ast_for_expr(c, CHILD(ch, 1));
                 if (!e)
                     return NULL;
-                kw = keyword(NULL, e, c->c_arena);
+                kw = keyword(NULL, e, chch->n_lineno, chch->n_col_offset,
+                             e->end_lineno, e->end_col_offset, c->c_arena);
                 asdl_seq_SET(keywords, nkeywords++, kw);
                 ndoublestars++;
             }
@@ -3197,8 +3071,7 @@
             else {
                 /* a keyword argument */
                 keyword_ty kw;
-                identifier key, tmp;
-                int k;
+                identifier key;
 
                 // To remain LL(1), the grammar accepts any test (basically, any
                 // expression) in the keyword slot of a call site.  So, we need
@@ -3242,18 +3115,12 @@
                 if (forbidden_name(c, key, chch, 1)) {
                     return NULL;
                 }
-                for (k = 0; k < nkeywords; k++) {
-                    tmp = ((keyword_ty)asdl_seq_GET(keywords, k))->arg;
-                    if (tmp && !PyUnicode_Compare(tmp, key)) {
-                        ast_error(c, chch,
-                                  "keyword argument repeated");
-                        return NULL;
-                    }
-                }
                 e = ast_for_expr(c, CHILD(ch, 2));
                 if (!e)
                     return NULL;
-                kw = keyword(key, e, c->c_arena);
+                kw = keyword(key, e, chch->n_lineno, chch->n_col_offset,
+                             e->end_lineno, e->end_col_offset, c->c_arena);
+
                 if (!kw)
                     return NULL;
                 asdl_seq_SET(keywords, nkeywords++, kw);
@@ -3320,10 +3187,7 @@
         expr1 = ast_for_testlist(c, ch);
         if (!expr1)
             return NULL;
-        if(!set_context(c, expr1, Store, ch))
-            return NULL;
-        /* set_context checks that most expressions are not the left side.
-          Augmented assignments can only have a name, a subscript, or an
+        /* Augmented assignments can only have a name, a subscript, or an
           attribute on the left, though, so we have to explicitly check for
           those. */
         switch (expr1->kind) {
@@ -3332,10 +3196,16 @@
             case Subscript_kind:
                 break;
             default:
-                ast_error(c, ch, "illegal expression for augmented assignment");
+                ast_error(c, ch, "'%s' is an illegal expression for augmented assignment",
+                          get_expr_name(expr1));
                 return NULL;
         }
 
+        /* set_context checks that most expressions are not the left side. */
+        if(!set_context(c, expr1, Store, ch)) {
+            return NULL;
+        }
+
         ch = CHILD(n, 2);
         if (TYPE(ch) == testlist)
             expr2 = ast_for_testlist(c, ch);
@@ -3707,9 +3577,6 @@
                          "unexpected import name: %d", TYPE(n));
             return NULL;
     }
-
-    PyErr_SetString(PyExc_SystemError, "unhandled import name condition");
-    return NULL;
 }
 
 static stmt_ty
@@ -4747,7 +4614,7 @@
         if (*s & 0x80) { /* XXX inefficient */
             PyObject *w;
             int kind;
-            void *data;
+            const void *data;
             Py_ssize_t len, i;
             w = decode_utf8(c, &s, end);
             if (w == NULL) {
@@ -4793,7 +4660,7 @@
                           size_t len)
 {
     const char *first_invalid_escape;
-    PyObject *result = _PyBytes_DecodeEscape(s, len, NULL, 0, NULL,
+    PyObject *result = _PyBytes_DecodeEscape(s, len, NULL,
                                              &first_invalid_escape);
     if (result == NULL)
         return NULL;
@@ -5289,7 +5156,7 @@
     *str += 1;
 
     /* If we're in = mode (detected by non-NULL expr_text), and have no format
-       spec and no explict conversion, set the conversion to 'r'. */
+       spec and no explicit conversion, set the conversion to 'r'. */
     if (*expr_text && format_spec == NULL && conversion == -1) {
         conversion = 'r';
     }
diff --git a/Python/ast_opt.c b/Python/ast_opt.c
index f2a2c25..ff786d6 100644
--- a/Python/ast_opt.c
+++ b/Python/ast_opt.c
@@ -19,6 +19,7 @@
         return 0;
     }
     node->kind = Constant_kind;
+    node->v.Constant.kind = NULL;
     node->v.Constant.value = val;
     return 1;
 }
@@ -35,7 +36,7 @@
 }
 
 static int
-fold_unaryop(expr_ty node, PyArena *arena, int optimize)
+fold_unaryop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
 {
     expr_ty arg = node->v.UnaryOp.operand;
 
@@ -212,7 +213,7 @@
 }
 
 static int
-fold_binop(expr_ty node, PyArena *arena, int optimize)
+fold_binop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
 {
     expr_ty lhs, rhs;
     lhs = node->v.BinOp.left;
@@ -294,7 +295,7 @@
 }
 
 static int
-fold_tuple(expr_ty node, PyArena *arena, int optimize)
+fold_tuple(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
 {
     PyObject *newval;
 
@@ -306,24 +307,20 @@
 }
 
 static int
-fold_subscr(expr_ty node, PyArena *arena, int optimize)
+fold_subscr(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
 {
     PyObject *newval;
     expr_ty arg, idx;
-    slice_ty slice;
 
     arg = node->v.Subscript.value;
-    slice = node->v.Subscript.slice;
+    idx = node->v.Subscript.slice;
     if (node->v.Subscript.ctx != Load ||
             arg->kind != Constant_kind ||
-            /* TODO: handle other types of slices */
-            slice->kind != Index_kind ||
-            slice->v.Index.value->kind != Constant_kind)
+            idx->kind != Constant_kind)
     {
         return 1;
     }
 
-    idx = slice->v.Index.value;
     newval = PyObject_GetItem(arg->v.Constant.value, idx->v.Constant.value);
     return make_const(node, newval, arena);
 }
@@ -335,7 +332,7 @@
    in "for" loop and comprehensions.
 */
 static int
-fold_iter(expr_ty arg, PyArena *arena, int optimize)
+fold_iter(expr_ty arg, PyArena *arena, _PyASTOptimizeState *state)
 {
     PyObject *newval;
     if (arg->kind == List_kind) {
@@ -368,7 +365,7 @@
 }
 
 static int
-fold_compare(expr_ty node, PyArena *arena, int optimize)
+fold_compare(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
 {
     asdl_int_seq *ops;
     asdl_seq *args;
@@ -382,29 +379,28 @@
     i = asdl_seq_LEN(ops) - 1;
     int op = asdl_seq_GET(ops, i);
     if (op == In || op == NotIn) {
-        if (!fold_iter((expr_ty)asdl_seq_GET(args, i), arena, optimize)) {
+        if (!fold_iter((expr_ty)asdl_seq_GET(args, i), arena, state)) {
             return 0;
         }
     }
     return 1;
 }
 
-static int astfold_mod(mod_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_stmt(stmt_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_expr(expr_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_keyword(keyword_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_slice(slice_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_arg(arg_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_withitem(withitem_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, int optimize_);
+static int astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
 #define CALL(FUNC, TYPE, ARG) \
-    if (!FUNC((ARG), ctx_, optimize_)) \
+    if (!FUNC((ARG), ctx_, state)) \
         return 0;
 
 #define CALL_OPT(FUNC, TYPE, ARG) \
-    if ((ARG) != NULL && !FUNC((ARG), ctx_, optimize_)) \
+    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
         return 0;
 
 #define CALL_SEQ(FUNC, TYPE, ARG) { \
@@ -412,7 +408,7 @@
     asdl_seq *seq = (ARG); /* avoid variable capture */ \
     for (i = 0; i < asdl_seq_LEN(seq); i++) { \
         TYPE elt = (TYPE)asdl_seq_GET(seq, i); \
-        if (elt != NULL && !FUNC(elt, ctx_, optimize_)) \
+        if (elt != NULL && !FUNC(elt, ctx_, state)) \
             return 0; \
     } \
 }
@@ -422,13 +418,13 @@
     asdl_int_seq *seq = (ARG); /* avoid variable capture */ \
     for (i = 0; i < asdl_seq_LEN(seq); i++) { \
         TYPE elt = (TYPE)asdl_seq_GET(seq, i); \
-        if (!FUNC(elt, ctx_, optimize_)) \
+        if (!FUNC(elt, ctx_, state)) \
             return 0; \
     } \
 }
 
 static int
-astfold_body(asdl_seq *stmts, PyArena *ctx_, int optimize_)
+astfold_body(asdl_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     int docstring = _PyAST_GetDocString(stmts) != NULL;
     CALL_SEQ(astfold_stmt, stmt_ty, stmts);
@@ -450,7 +446,7 @@
 }
 
 static int
-astfold_mod(mod_ty node_, PyArena *ctx_, int optimize_)
+astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     switch (node_->kind) {
     case Module_kind:
@@ -462,9 +458,6 @@
     case Expression_kind:
         CALL(astfold_expr, expr_ty, node_->v.Expression.body);
         break;
-    case Suite_kind:
-        CALL_SEQ(astfold_stmt, stmt_ty, node_->v.Suite.body);
-        break;
     default:
         break;
     }
@@ -472,7 +465,7 @@
 }
 
 static int
-astfold_expr(expr_ty node_, PyArena *ctx_, int optimize_)
+astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     switch (node_->kind) {
     case BoolOp_kind:
@@ -551,12 +544,17 @@
         break;
     case Subscript_kind:
         CALL(astfold_expr, expr_ty, node_->v.Subscript.value);
-        CALL(astfold_slice, slice_ty, node_->v.Subscript.slice);
+        CALL(astfold_expr, expr_ty, node_->v.Subscript.slice);
         CALL(fold_subscr, expr_ty, node_);
         break;
     case Starred_kind:
         CALL(astfold_expr, expr_ty, node_->v.Starred.value);
         break;
+    case Slice_kind:
+        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.lower);
+        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.upper);
+        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.step);
+        break;
     case List_kind:
         CALL_SEQ(astfold_expr, expr_ty, node_->v.List.elts);
         break;
@@ -565,8 +563,9 @@
         CALL(fold_tuple, expr_ty, node_);
         break;
     case Name_kind:
-        if (_PyUnicode_EqualToASCIIString(node_->v.Name.id, "__debug__")) {
-            return make_const(node_, PyBool_FromLong(!optimize_), ctx_);
+        if (node_->v.Name.ctx == Load &&
+                _PyUnicode_EqualToASCIIString(node_->v.Name.id, "__debug__")) {
+            return make_const(node_, PyBool_FromLong(!state->optimize), ctx_);
         }
         break;
     default:
@@ -576,35 +575,14 @@
 }
 
 static int
-astfold_slice(slice_ty node_, PyArena *ctx_, int optimize_)
-{
-    switch (node_->kind) {
-    case Slice_kind:
-        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.lower);
-        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.upper);
-        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.step);
-        break;
-    case ExtSlice_kind:
-        CALL_SEQ(astfold_slice, slice_ty, node_->v.ExtSlice.dims);
-        break;
-    case Index_kind:
-        CALL(astfold_expr, expr_ty, node_->v.Index.value);
-        break;
-    default:
-        break;
-    }
-    return 1;
-}
-
-static int
-astfold_keyword(keyword_ty node_, PyArena *ctx_, int optimize_)
+astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     CALL(astfold_expr, expr_ty, node_->value);
     return 1;
 }
 
 static int
-astfold_comprehension(comprehension_ty node_, PyArena *ctx_, int optimize_)
+astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     CALL(astfold_expr, expr_ty, node_->target);
     CALL(astfold_expr, expr_ty, node_->iter);
@@ -615,7 +593,7 @@
 }
 
 static int
-astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_)
+astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     CALL_SEQ(astfold_arg, arg_ty, node_->posonlyargs);
     CALL_SEQ(astfold_arg, arg_ty, node_->args);
@@ -628,27 +606,33 @@
 }
 
 static int
-astfold_arg(arg_ty node_, PyArena *ctx_, int optimize_)
+astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
-    CALL_OPT(astfold_expr, expr_ty, node_->annotation);
+    if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+        CALL_OPT(astfold_expr, expr_ty, node_->annotation);
+    }
     return 1;
 }
 
 static int
-astfold_stmt(stmt_ty node_, PyArena *ctx_, int optimize_)
+astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     switch (node_->kind) {
     case FunctionDef_kind:
         CALL(astfold_arguments, arguments_ty, node_->v.FunctionDef.args);
         CALL(astfold_body, asdl_seq, node_->v.FunctionDef.body);
         CALL_SEQ(astfold_expr, expr_ty, node_->v.FunctionDef.decorator_list);
-        CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns);
+        if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+            CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns);
+        }
         break;
     case AsyncFunctionDef_kind:
         CALL(astfold_arguments, arguments_ty, node_->v.AsyncFunctionDef.args);
         CALL(astfold_body, asdl_seq, node_->v.AsyncFunctionDef.body);
         CALL_SEQ(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.decorator_list);
-        CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns);
+        if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+            CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns);
+        }
         break;
     case ClassDef_kind:
         CALL_SEQ(astfold_expr, expr_ty, node_->v.ClassDef.bases);
@@ -672,7 +656,9 @@
         break;
     case AnnAssign_kind:
         CALL(astfold_expr, expr_ty, node_->v.AnnAssign.target);
-        CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation);
+        if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+            CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation);
+        }
         CALL_OPT(astfold_expr, expr_ty, node_->v.AnnAssign.value);
         break;
     case For_kind:
@@ -731,7 +717,7 @@
 }
 
 static int
-astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, int optimize_)
+astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     switch (node_->kind) {
     case ExceptHandler_kind:
@@ -745,7 +731,7 @@
 }
 
 static int
-astfold_withitem(withitem_ty node_, PyArena *ctx_, int optimize_)
+astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
 {
     CALL(astfold_expr, expr_ty, node_->context_expr);
     CALL_OPT(astfold_expr, expr_ty, node_->optional_vars);
@@ -758,9 +744,9 @@
 #undef CALL_INT_SEQ
 
 int
-_PyAST_Optimize(mod_ty mod, PyArena *arena, int optimize)
+_PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state)
 {
-    int ret = astfold_mod(mod, arena, optimize);
+    int ret = astfold_mod(mod, arena, state);
     assert(ret || PyErr_Occurred());
     return ret;
 }
diff --git a/Python/ast_unparse.c b/Python/ast_unparse.c
index af9604e..e699751 100644
--- a/Python/ast_unparse.c
+++ b/Python/ast_unparse.c
@@ -1,3 +1,4 @@
+#include <float.h>   /* DBL_MAX_10_EXP */
 #include <stdbool.h>
 #include "Python.h"
 #include "Python-ast.h"
@@ -6,6 +7,8 @@
 static PyObject *_str_dbl_open_br;
 static PyObject *_str_close_br;
 static PyObject *_str_dbl_close_br;
+static PyObject *_str_inf;
+static PyObject *_str_replace_inf;
 
 /* Forward declarations for recursion via helper functions. */
 static PyObject *
@@ -15,9 +18,9 @@
 static int
 append_joinedstr(_PyUnicodeWriter *writer, expr_ty e, bool is_format_spec);
 static int
-append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e, bool is_format_spec);
+append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e);
 static int
-append_ast_slice(_PyUnicodeWriter *writer, slice_ty slice);
+append_ast_slice(_PyUnicodeWriter *writer, expr_ty e);
 
 static int
 append_charp(_PyUnicodeWriter *writer, const char *charp)
@@ -61,13 +64,28 @@
 static int
 append_repr(_PyUnicodeWriter *writer, PyObject *obj)
 {
-    int ret;
-    PyObject *repr;
-    repr = PyObject_Repr(obj);
+    PyObject *repr = PyObject_Repr(obj);
+
     if (!repr) {
         return -1;
     }
-    ret = _PyUnicodeWriter_WriteStr(writer, repr);
+
+    if ((PyFloat_CheckExact(obj) && Py_IS_INFINITY(PyFloat_AS_DOUBLE(obj))) ||
+       PyComplex_CheckExact(obj))
+    {
+        PyObject *new_repr = PyUnicode_Replace(
+            repr,
+            _str_inf,
+            _str_replace_inf,
+            -1
+        );
+        Py_DECREF(repr);
+        if (!new_repr) {
+            return -1;
+        }
+        repr = new_repr;
+    }
+    int ret = _PyUnicodeWriter_WriteStr(writer, repr);
     Py_DECREF(repr);
     return ret;
 }
@@ -583,7 +601,7 @@
     case JoinedStr_kind:
         return append_joinedstr(writer, e, is_format_spec);
     case FormattedValue_kind:
-        return append_formattedvalue(writer, e, is_format_spec);
+        return append_formattedvalue(writer, e);
     default:
         PyErr_SetString(PyExc_SystemError,
                         "unknown expression kind inside f-string");
@@ -640,7 +658,7 @@
 }
 
 static int
-append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e, bool is_format_spec)
+append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e)
 {
     const char *conversion;
     const char *outer_brace = "{";
@@ -698,6 +716,28 @@
 }
 
 static int
+append_ast_constant(_PyUnicodeWriter *writer, PyObject *constant)
+{
+    if (PyTuple_CheckExact(constant)) {
+        Py_ssize_t i, elem_count;
+
+        elem_count = PyTuple_GET_SIZE(constant);
+        APPEND_STR("(");
+        for (i = 0; i < elem_count; i++) {
+            APPEND_STR_IF(i > 0, ", ");
+            if (append_ast_constant(writer, PyTuple_GET_ITEM(constant, i)) < 0) {
+                return -1;
+            }
+        }
+
+        APPEND_STR_IF(elem_count == 1, ",");
+        APPEND_STR(")");
+        return 0;
+    }
+    return append_repr(writer, constant);
+}
+
+static int
 append_ast_attribute(_PyUnicodeWriter *writer, expr_ty e)
 {
     const char *period;
@@ -718,79 +758,42 @@
 }
 
 static int
-append_ast_simple_slice(_PyUnicodeWriter *writer, slice_ty slice)
+append_ast_slice(_PyUnicodeWriter *writer, expr_ty e)
 {
-    if (slice->v.Slice.lower) {
-        APPEND_EXPR(slice->v.Slice.lower, PR_TEST);
+    if (e->v.Slice.lower) {
+        APPEND_EXPR(e->v.Slice.lower, PR_TEST);
     }
 
     APPEND_STR(":");
 
-    if (slice->v.Slice.upper) {
-        APPEND_EXPR(slice->v.Slice.upper, PR_TEST);
+    if (e->v.Slice.upper) {
+        APPEND_EXPR(e->v.Slice.upper, PR_TEST);
     }
 
-    if (slice->v.Slice.step) {
+    if (e->v.Slice.step) {
         APPEND_STR(":");
-        APPEND_EXPR(slice->v.Slice.step, PR_TEST);
+        APPEND_EXPR(e->v.Slice.step, PR_TEST);
     }
     return 0;
 }
 
 static int
-append_ast_ext_slice(_PyUnicodeWriter *writer, slice_ty slice)
-{
-    Py_ssize_t i, dims_count;
-    dims_count = asdl_seq_LEN(slice->v.ExtSlice.dims);
-    for (i = 0; i < dims_count; i++) {
-        APPEND_STR_IF(i > 0, ", ");
-        APPEND(slice, (slice_ty)asdl_seq_GET(slice->v.ExtSlice.dims, i));
-    }
-    APPEND_STR_IF(dims_count == 1, ",");
-    return 0;
-}
-
-static int
-append_ast_index_slice(_PyUnicodeWriter *writer, slice_ty slice)
-{
-    int level = PR_TUPLE;
-    expr_ty value = slice->v.Index.value;
-    if (value->kind == Tuple_kind) {
-        for (Py_ssize_t i = 0; i < asdl_seq_LEN(value->v.Tuple.elts); i++) {
-            expr_ty element = asdl_seq_GET(value->v.Tuple.elts, i);
-            if (element->kind == Starred_kind) {
-                ++level;
-                break;
-            }
-        }
-    }
-    APPEND_EXPR(value, level);
-    return 0;
-}
-
-static int
-append_ast_slice(_PyUnicodeWriter *writer, slice_ty slice)
-{
-    switch (slice->kind) {
-    case Slice_kind:
-        return append_ast_simple_slice(writer, slice);
-    case ExtSlice_kind:
-        return append_ast_ext_slice(writer, slice);
-    case Index_kind:
-        return append_ast_index_slice(writer, slice);
-    default:
-        PyErr_SetString(PyExc_SystemError,
-                        "unexpected slice kind");
-        return -1;
-    }
-}
-
-static int
 append_ast_subscript(_PyUnicodeWriter *writer, expr_ty e)
 {
     APPEND_EXPR(e->v.Subscript.value, PR_ATOM);
+    int level = PR_TUPLE;
+    expr_ty slice = e->v.Subscript.slice;
+    if (slice->kind == Tuple_kind) {
+        for (Py_ssize_t i = 0; i < asdl_seq_LEN(slice->v.Tuple.elts); i++) {
+            expr_ty element = asdl_seq_GET(slice->v.Tuple.elts, i);
+            if (element->kind == Starred_kind) {
+                ++level;
+                break;
+            }
+        }
+    }
     APPEND_STR("[");
-    APPEND(slice, e->v.Subscript.slice);
+    APPEND_EXPR(e->v.Subscript.slice, level);
     APPEND_STR_FINISH("]");
 }
 
@@ -837,7 +840,7 @@
 {
     APPEND_STR_IF(level > PR_TUPLE, "(");
     APPEND_EXPR(e->v.NamedExpr.target, PR_ATOM);
-    APPEND_STR(":=");
+    APPEND_STR(" := ");
     APPEND_EXPR(e->v.NamedExpr.value, PR_ATOM);
     APPEND_STR_IF(level > PR_TUPLE, ")");
     return 0;
@@ -883,11 +886,15 @@
         if (e->v.Constant.value == Py_Ellipsis) {
             APPEND_STR_FINISH("...");
         }
-        return append_repr(writer, e->v.Constant.value);
+        if (e->v.Constant.kind != NULL
+            && -1 == _PyUnicodeWriter_WriteStr(writer, e->v.Constant.kind)) {
+            return -1;
+        }
+        return append_ast_constant(writer, e->v.Constant.value);
     case JoinedStr_kind:
         return append_joinedstr(writer, e, false);
     case FormattedValue_kind:
-        return append_formattedvalue(writer, e, false);
+        return append_formattedvalue(writer, e);
     /* The following exprs can be assignment targets. */
     case Attribute_kind:
         return append_ast_attribute(writer, e);
@@ -895,6 +902,8 @@
         return append_ast_subscript(writer, e);
     case Starred_kind:
         return append_ast_starred(writer, e);
+    case Slice_kind:
+        return append_ast_slice(writer, e);
     case Name_kind:
         return _PyUnicodeWriter_WriteStr(writer, e->v.Name.id);
     case List_kind:
@@ -929,6 +938,14 @@
         !(_str_dbl_close_br = PyUnicode_InternFromString("}}"))) {
         return -1;
     }
+    if (!_str_inf &&
+        !(_str_inf = PyUnicode_FromString("inf"))) {
+        return -1;
+    }
+    if (!_str_replace_inf &&
+        !(_str_replace_inf = PyUnicode_FromFormat("1e%d", 1 + DBL_MAX_10_EXP))) {
+        return -1;
+    }
     return 0;
 }
 
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index e42d5f2..199b09c 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -4,7 +4,9 @@
 #include <ctype.h>
 #include "ast.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
-#include "pycore_pystate.h"
+#include "pycore_object.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"      // _PyThreadState_GET()
 #include "pycore_tupleobject.h"
 
 _Py_IDENTIFIER(__builtins__);
@@ -29,7 +31,6 @@
 {
     Py_ssize_t i, j;
     PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
-    PyObject *stack[1] = {bases};
     assert(PyTuple_Check(bases));
 
     for (i = 0; i < nargs; i++) {
@@ -55,7 +56,7 @@
             }
             continue;
         }
-        new_base = _PyObject_FastCall(meth, stack, 1);
+        new_base = PyObject_CallOneArg(meth, bases);
         Py_DECREF(meth);
         if (!new_base) {
             goto error;
@@ -169,7 +170,7 @@
         /* else get the type of the first base */
         else {
             PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
-            meta = (PyObject *) (base0->ob_type);
+            meta = (PyObject *)Py_TYPE(base0);
         }
         Py_INCREF(meta);
         isclass = 1;  /* meta is really a class */
@@ -202,7 +203,7 @@
     }
     else {
         PyObject *pargs[2] = {name, bases};
-        ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
+        ns = PyObject_VectorcallDict(prep, pargs, 2, mkw);
         Py_DECREF(prep);
     }
     if (ns == NULL) {
@@ -228,7 +229,7 @@
             }
         }
         PyObject *margs[3] = {name, bases, ns};
-        cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
+        cls = PyObject_VectorcallDict(meta, margs, 3, mkw);
         if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
             PyObject *cell_cls = PyCell_GET(cell);
             if (cell_cls != cls) {
@@ -488,7 +489,7 @@
     }
 
     Py_INCREF(hook);
-    PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
+    PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
     Py_DECREF(hook);
     return retval;
 }
@@ -574,7 +575,7 @@
             ok = PyObject_IsTrue(item);
         } else {
             PyObject *good;
-            good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
+            good = PyObject_CallOneArg(lz->func, item);
             if (good == NULL) {
                 Py_DECREF(item);
                 return NULL;
@@ -816,6 +817,7 @@
         goto error;
 
     result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
+
     Py_XDECREF(source_copy);
     goto finally;
 
@@ -1001,13 +1003,13 @@
 
     if (!PyDict_Check(globals)) {
         PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
-                     globals->ob_type->tp_name);
+                     Py_TYPE(globals)->tp_name);
         return NULL;
     }
     if (!PyMapping_Check(locals)) {
         PyErr_Format(PyExc_TypeError,
             "locals must be a mapping or None, not %.100s",
-            locals->ob_type->tp_name);
+            Py_TYPE(locals)->tp_name);
         return NULL;
     }
     if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
@@ -1255,23 +1257,23 @@
 {
     PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
     PyObject **stack;
-    Py_ssize_t niters, nargs, i;
     PyObject *result = NULL;
+    PyThreadState *tstate = _PyThreadState_GET();
 
-    niters = PyTuple_GET_SIZE(lz->iters);
+    const Py_ssize_t niters = PyTuple_GET_SIZE(lz->iters);
     if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
         stack = small_stack;
     }
     else {
         stack = PyMem_Malloc(niters * sizeof(stack[0]));
         if (stack == NULL) {
-            PyErr_NoMemory();
+            _PyErr_NoMemory(tstate);
             return NULL;
         }
     }
 
-    nargs = 0;
-    for (i=0; i < niters; i++) {
+    Py_ssize_t nargs = 0;
+    for (Py_ssize_t i=0; i < niters; i++) {
         PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
         PyObject *val = Py_TYPE(it)->tp_iternext(it);
         if (val == NULL) {
@@ -1281,10 +1283,10 @@
         nargs++;
     }
 
-    result = _PyObject_FastCall(lz->func, stack, nargs);
+    result = _PyObject_VectorcallTstate(tstate, lz->func, stack, nargs, NULL);
 
 exit:
-    for (i=0; i < nargs; i++) {
+    for (Py_ssize_t i=0; i < nargs; i++) {
         Py_DECREF(stack[i]);
     }
     if (stack != small_stack) {
@@ -1382,11 +1384,11 @@
     if (!PyIter_Check(it)) {
         PyErr_Format(PyExc_TypeError,
             "'%.200s' object is not an iterator",
-            it->ob_type->tp_name);
+            Py_TYPE(it)->tp_name);
         return NULL;
     }
 
-    res = (*it->ob_type->tp_iternext)(it);
+    res = (*Py_TYPE(it)->tp_iternext)(it);
     if (res != NULL) {
         return res;
     } else if (nargs > 1) {
@@ -1589,10 +1591,15 @@
     const int positional = PyTuple_Size(args) > 1;
     int ret;
 
-    if (positional)
+    if (positional) {
         v = args;
-    else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
+    }
+    else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) {
+        if (PyExceptionClass_Check(PyExc_TypeError)) {
+            PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
+        }
         return NULL;
+    }
 
     emptytuple = PyTuple_New(0);
     if (emptytuple == NULL)
@@ -1625,7 +1632,7 @@
     while (( item = PyIter_Next(it) )) {
         /* get the value from the key function */
         if (keyfunc != NULL) {
-            val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
+            val = PyObject_CallOneArg(keyfunc, item);
             if (val == NULL)
                 goto Fail_it_item;
         }
@@ -1782,7 +1789,7 @@
     else {
         PyErr_Format(PyExc_TypeError,
                      "ord() expected string of length 1, but " \
-                     "%.200s found", c->ob_type->tp_name);
+                     "%.200s found", Py_TYPE(c)->tp_name);
         return NULL;
     }
 
@@ -1821,8 +1828,9 @@
 builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
-    static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
-    PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
+    static struct _PyArg_Parser _parser = {"|OOOp:print", _keywords, 0};
+    PyObject *sep = NULL, *end = NULL, *file = NULL;
+    int flush = 0;
     int i, err;
 
     if (kwnames != NULL &&
@@ -1849,7 +1857,7 @@
     else if (sep && !PyUnicode_Check(sep)) {
         PyErr_Format(PyExc_TypeError,
                      "sep must be None or a string, not %.200s",
-                     sep->ob_type->tp_name);
+                     Py_TYPE(sep)->tp_name);
         return NULL;
     }
     if (end == Py_None) {
@@ -1858,7 +1866,7 @@
     else if (end && !PyUnicode_Check(end)) {
         PyErr_Format(PyExc_TypeError,
                      "end must be None or a string, not %.200s",
-                     end->ob_type->tp_name);
+                     Py_TYPE(end)->tp_name);
         return NULL;
     }
 
@@ -1884,18 +1892,11 @@
     if (err)
         return NULL;
 
-    if (flush != NULL) {
-        PyObject *tmp;
-        int do_flush = PyObject_IsTrue(flush);
-        if (do_flush == -1)
+    if (flush) {
+        PyObject *tmp = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
+        if (tmp == NULL)
             return NULL;
-        else if (do_flush) {
-            tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
-            if (tmp == NULL)
-                return NULL;
-            else
-                Py_DECREF(tmp);
-        }
+        Py_DECREF(tmp);
     }
 
     Py_RETURN_NONE;
@@ -1960,7 +1961,7 @@
     }
 
     /* First of all, flush stderr */
-    tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
+    tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
     if (tmp == NULL)
         PyErr_Clear();
     else
@@ -1969,7 +1970,7 @@
     /* We should only use (GNU) readline if Python's sys.stdin and
        sys.stdout are the same as C's stdin and stdout, because we
        need to pass it those. */
-    tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
+    tmp = _PyObject_CallMethodIdNoArgs(fin, &PyId_fileno);
     if (tmp == NULL) {
         PyErr_Clear();
         tty = 0;
@@ -1982,7 +1983,7 @@
         tty = fd == fileno(stdin) && isatty(fd);
     }
     if (tty) {
-        tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
+        tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno);
         if (tmp == NULL) {
             PyErr_Clear();
             tty = 0;
@@ -2020,7 +2021,7 @@
         stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
         if (!stdin_encoding_str || !stdin_errors_str)
             goto _readline_errors;
-        tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
+        tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
         if (tmp == NULL)
             PyErr_Clear();
         else
@@ -2115,7 +2116,7 @@
         if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
             return NULL;
     }
-    tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
+    tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
     if (tmp == NULL)
         PyErr_Clear();
     else
@@ -2178,7 +2179,7 @@
     if (ndigits == Py_None)
         result = _PyObject_CallNoArg(round);
     else
-        result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
+        result = PyObject_CallOneArg(round, ndigits);
     Py_DECREF(round);
     return result;
 }
@@ -2234,7 +2235,7 @@
     }
 
     assert(nargs >= 1);
-    v = _PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
+    v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
     Py_DECREF(callable);
     if (v == NULL) {
         Py_DECREF(newlist);
@@ -2349,7 +2350,7 @@
                     return NULL;
                 return PyLong_FromLong(i_result);
             }
-            if (PyLong_CheckExact(item)) {
+            if (PyLong_CheckExact(item) || PyBool_Check(item)) {
                 long b = PyLong_AsLongAndOverflow(item, &overflow);
                 if (overflow == 0 &&
                     (i_result >= 0 ? (b <= LONG_MAX - i_result)
@@ -2391,20 +2392,16 @@
                 return PyFloat_FromDouble(f_result);
             }
             if (PyFloat_CheckExact(item)) {
-                PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
                 f_result += PyFloat_AS_DOUBLE(item);
-                PyFPE_END_PROTECT(f_result)
                 Py_DECREF(item);
                 continue;
             }
-            if (PyLong_CheckExact(item)) {
+            if (PyLong_Check(item)) {
                 long value;
                 int overflow;
                 value = PyLong_AsLongAndOverflow(item, &overflow);
                 if (!overflow) {
-                    PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
                     f_result += (double)value;
-                    PyFPE_END_PROTECT(f_result)
                     Py_DECREF(item);
                     continue;
                 }
@@ -2445,7 +2442,11 @@
              empty = []
              sum([[x] for x in range(10)], empty)
 
-           would change the value of empty. */
+           would change the value of empty. In fact, using
+           in-place addition rather that binary addition for
+           any of the steps introduces subtle behavior changes:
+
+           https://bugs.python.org/issue18305 */
         temp = PyNumber_Add(result, item);
         Py_DECREF(result);
         Py_DECREF(item);
@@ -2769,11 +2770,11 @@
 
 
 PyObject *
-_PyBuiltin_Init(void)
+_PyBuiltin_Init(PyThreadState *tstate)
 {
     PyObject *mod, *dict, *debug;
 
-    const PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
 
     if (PyType_Ready(&PyFilter_Type) < 0 ||
         PyType_Ready(&PyMap_Type) < 0 ||
diff --git a/Python/bootstrap_hash.c b/Python/bootstrap_hash.c
index eb2b6d0..a212f69 100644
--- a/Python/bootstrap_hash.c
+++ b/Python/bootstrap_hash.c
@@ -25,6 +25,16 @@
 #  include <sanitizer/msan_interface.h>
 #endif
 
+#if defined(__APPLE__) && defined(__has_builtin) 
+#  if __has_builtin(__builtin_available)
+#    define HAVE_GETENTRYPY_GETRANDOM_RUNTIME __builtin_available(macOS 10.12, iOS 10.10, tvOS 10.0, watchOS 3.0, *)
+#  endif
+#endif
+#ifndef HAVE_GETENTRYPY_GETRANDOM_RUNTIME
+#  define HAVE_GETENTRYPY_GETRANDOM_RUNTIME 1
+#endif
+
+
 #ifdef Py_DEBUG
 int _Py_HashSecret_Initialized = 0;
 #else
@@ -163,7 +173,7 @@
             }
 
             /* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system urandom
-               is not initialiazed yet. For _PyRandom_Init(), we ignore the
+               is not initialized yet. For _PyRandom_Init(), we ignore the
                error and fall back on reading /dev/urandom which never blocks,
                even if the system urandom is not initialized yet:
                see the PEP 524. */
@@ -208,6 +218,16 @@
      error.
 
    getentropy() is retried if it failed with EINTR: interrupted by a signal. */
+
+#if defined(__APPLE__) && defined(__has_attribute) && __has_attribute(availability)
+static int
+py_getentropy(char *buffer, Py_ssize_t size, int raise) 
+        __attribute__((availability(macos,introduced=10.12)))
+        __attribute__((availability(ios,introduced=10.0)))
+        __attribute__((availability(tvos,introduced=10.0)))
+        __attribute__((availability(watchos,introduced=3.0)));
+#endif
+
 static int
 py_getentropy(char *buffer, Py_ssize_t size, int raise)
 {
@@ -498,19 +518,21 @@
 #else
 
 #if defined(PY_GETRANDOM) || defined(PY_GETENTROPY)
+    if (HAVE_GETENTRYPY_GETRANDOM_RUNTIME) {
 #ifdef PY_GETRANDOM
-    res = py_getrandom(buffer, size, blocking, raise);
+        res = py_getrandom(buffer, size, blocking, raise);
 #else
-    res = py_getentropy(buffer, size, raise);
+        res = py_getentropy(buffer, size, raise);
 #endif
-    if (res < 0) {
-        return -1;
-    }
-    if (res == 1) {
-        return 0;
-    }
-    /* getrandom() or getentropy() function is not available: failed with
-       ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
+        if (res < 0) {
+            return -1;
+        }
+        if (res == 1) {
+            return 0;
+        }
+        /* getrandom() or getentropy() function is not available: failed with
+           ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
+        } /* end of availability block */
 #endif
 
     return dev_urandom(buffer, size, raise);
@@ -580,7 +602,7 @@
         res = pyurandom(secret, secret_size, 0, 0);
         if (res < 0) {
             return _PyStatus_ERR("failed to get random numbers "
-                                "to initialize Python");
+                                 "to initialize Python");
         }
     }
     return _PyStatus_OK();
diff --git a/Python/ceval.c b/Python/ceval.c
index 1873e37..91e879e 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -10,12 +10,17 @@
 #define PY_LOCAL_AGGRESSIVE
 
 #include "Python.h"
+#include "pycore_abstract.h"      // _PyIndex_Check()
+#include "pycore_call.h"
 #include "pycore_ceval.h"
 #include "pycore_code.h"
+#include "pycore_initconfig.h"
 #include "pycore_object.h"
 #include "pycore_pyerrors.h"
 #include "pycore_pylifecycle.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h"         // _PyMem_IsPtrFreed()
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "pycore_sysmodule.h"
 #include "pycore_tupleobject.h"
 
 #include "code.h"
@@ -24,7 +29,6 @@
 #include "opcode.h"
 #include "pydtrace.h"
 #include "setobject.h"
-#include "structmember.h"
 
 #include <ctype.h>
 
@@ -38,10 +42,7 @@
 #  error "ceval.c must be build with Py_BUILD_CORE define for best performance"
 #endif
 
-/* Private API for the LOAD_METHOD opcode. */
-extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **);
-
-typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
+_Py_IDENTIFIER(__name__);
 
 /* Forward declarations */
 Py_LOCAL_INLINE(PyObject *) call_function(
@@ -70,7 +71,6 @@
 static void dtrace_function_entry(PyFrameObject *);
 static void dtrace_function_return(PyFrameObject *);
 
-static PyObject * cmp_outcome(PyThreadState *, int, PyObject *, PyObject *);
 static PyObject * import_name(PyThreadState *, PyFrameObject *,
                               PyObject *, PyObject *, PyObject *);
 static PyObject * import_from(PyThreadState *, PyObject *, PyObject *);
@@ -82,7 +82,7 @@
 static PyObject * special_lookup(PyThreadState *, PyObject *, _Py_Identifier *);
 static int check_args_iterable(PyThreadState *, PyObject *func, PyObject *vararg);
 static void format_kwargs_error(PyThreadState *, PyObject *func, PyObject *kwargs);
-static void format_awaitable_error(PyThreadState *, PyTypeObject *, int);
+static void format_awaitable_error(PyThreadState *, PyTypeObject *, int, int);
 
 #define NAME_ERROR_MSG \
     "name '%.200s' is not defined"
@@ -122,129 +122,199 @@
 static size_t opcache_global_misses = 0;
 #endif
 
-#define GIL_REQUEST _Py_atomic_load_relaxed(&ceval->gil_drop_request)
+
+#ifndef NDEBUG
+/* Ensure that tstate is valid: sanity check for PyEval_AcquireThread() and
+   PyEval_RestoreThread(). Detect if tstate memory was freed. It can happen
+   when a thread continues to run after Python finalization, especially
+   daemon threads. */
+static int
+is_tstate_valid(PyThreadState *tstate)
+{
+    assert(!_PyMem_IsPtrFreed(tstate));
+    assert(!_PyMem_IsPtrFreed(tstate->interp));
+    return 1;
+}
+#endif
+
 
 /* This can set eval_breaker to 0 even though gil_drop_request became
    1.  We believe this is all right because the eval loop will release
    the GIL eventually anyway. */
-#define COMPUTE_EVAL_BREAKER(ceval) \
-    _Py_atomic_store_relaxed( \
-        &(ceval)->eval_breaker, \
-        GIL_REQUEST | \
-        _Py_atomic_load_relaxed(&(ceval)->signals_pending) | \
-        _Py_atomic_load_relaxed(&(ceval)->pending.calls_to_do) | \
-        (ceval)->pending.async_exc)
+static inline void
+COMPUTE_EVAL_BREAKER(PyInterpreterState *interp,
+                     struct _ceval_runtime_state *ceval,
+                     struct _ceval_state *ceval2)
+{
+    _Py_atomic_store_relaxed(&ceval2->eval_breaker,
+        _Py_atomic_load_relaxed(&ceval2->gil_drop_request)
+        | (_Py_atomic_load_relaxed(&ceval->signals_pending)
+           && _Py_ThreadCanHandleSignals(interp))
+        | (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)
+           && _Py_ThreadCanHandlePendingCalls())
+        | ceval2->pending.async_exc);
+}
 
-#define SET_GIL_DROP_REQUEST(ceval) \
-    do { \
-        _Py_atomic_store_relaxed(&(ceval)->gil_drop_request, 1); \
-        _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
-    } while (0)
 
-#define RESET_GIL_DROP_REQUEST(ceval) \
-    do { \
-        _Py_atomic_store_relaxed(&(ceval)->gil_drop_request, 0); \
-        COMPUTE_EVAL_BREAKER(ceval); \
-    } while (0)
+static inline void
+SET_GIL_DROP_REQUEST(PyInterpreterState *interp)
+{
+    struct _ceval_state *ceval2 = &interp->ceval;
+    _Py_atomic_store_relaxed(&ceval2->gil_drop_request, 1);
+    _Py_atomic_store_relaxed(&ceval2->eval_breaker, 1);
+}
 
-/* Pending calls are only modified under pending_lock */
-#define SIGNAL_PENDING_CALLS(ceval) \
-    do { \
-        _Py_atomic_store_relaxed(&(ceval)->pending.calls_to_do, 1); \
-        _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
-    } while (0)
 
-#define UNSIGNAL_PENDING_CALLS(ceval) \
-    do { \
-        _Py_atomic_store_relaxed(&(ceval)->pending.calls_to_do, 0); \
-        COMPUTE_EVAL_BREAKER(ceval); \
-    } while (0)
+static inline void
+RESET_GIL_DROP_REQUEST(PyInterpreterState *interp)
+{
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
+    _Py_atomic_store_relaxed(&ceval2->gil_drop_request, 0);
+    COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
 
-#define SIGNAL_PENDING_SIGNALS(ceval) \
-    do { \
-        _Py_atomic_store_relaxed(&(ceval)->signals_pending, 1); \
-        _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
-    } while (0)
 
-#define UNSIGNAL_PENDING_SIGNALS(ceval) \
-    do { \
-        _Py_atomic_store_relaxed(&(ceval)->signals_pending, 0); \
-        COMPUTE_EVAL_BREAKER(ceval); \
-    } while (0)
+static inline void
+SIGNAL_PENDING_CALLS(PyInterpreterState *interp)
+{
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
+    _Py_atomic_store_relaxed(&ceval2->pending.calls_to_do, 1);
+    COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
 
-#define SIGNAL_ASYNC_EXC(ceval) \
-    do { \
-        (ceval)->pending.async_exc = 1; \
-        _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
-    } while (0)
 
-#define UNSIGNAL_ASYNC_EXC(ceval) \
-    do { \
-        (ceval)->pending.async_exc = 0; \
-        COMPUTE_EVAL_BREAKER(ceval); \
-    } while (0)
+static inline void
+UNSIGNAL_PENDING_CALLS(PyInterpreterState *interp)
+{
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
+    _Py_atomic_store_relaxed(&ceval2->pending.calls_to_do, 0);
+    COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
+
+
+static inline void
+SIGNAL_PENDING_SIGNALS(PyInterpreterState *interp, int force)
+{
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
+    _Py_atomic_store_relaxed(&ceval->signals_pending, 1);
+    if (force) {
+        _Py_atomic_store_relaxed(&ceval2->eval_breaker, 1);
+    }
+    else {
+        /* eval_breaker is not set to 1 if thread_can_handle_signals() is false */
+        COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+    }
+}
+
+
+static inline void
+UNSIGNAL_PENDING_SIGNALS(PyInterpreterState *interp)
+{
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
+    _Py_atomic_store_relaxed(&ceval->signals_pending, 0);
+    COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
+
+
+static inline void
+SIGNAL_ASYNC_EXC(PyInterpreterState *interp)
+{
+    struct _ceval_state *ceval2 = &interp->ceval;
+    ceval2->pending.async_exc = 1;
+    _Py_atomic_store_relaxed(&ceval2->eval_breaker, 1);
+}
+
+
+static inline void
+UNSIGNAL_ASYNC_EXC(PyInterpreterState *interp)
+{
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
+    ceval2->pending.async_exc = 0;
+    COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
 
 
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
-#include "pythread.h"
 #include "ceval_gil.h"
 
+void _Py_NO_RETURN
+_Py_FatalError_TstateNULL(const char *func)
+{
+    _Py_FatalErrorFunc(func,
+                       "the function must be called with the GIL held, "
+                       "but the GIL is released "
+                       "(the current Python thread state is NULL)");
+}
+
+
+int
+_PyEval_ThreadsInitialized(_PyRuntimeState *runtime)
+{
+    return gil_created(&runtime->ceval.gil);
+}
+
 int
 PyEval_ThreadsInitialized(void)
 {
-    return gil_created(&_PyRuntime.ceval.gil);
+    _PyRuntimeState *runtime = &_PyRuntime;
+    return _PyEval_ThreadsInitialized(runtime);
 }
 
-void
-PyEval_InitThreads(void)
+PyStatus
+_PyEval_InitGIL(PyThreadState *tstate)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
-    struct _gil_runtime_state *gil = &ceval->gil;
-    if (gil_created(gil)) {
-        return;
+    if (!_Py_IsMainInterpreter(tstate)) {
+        /* Currently, the GIL is shared by all interpreters,
+           and only the main interpreter is responsible to create
+           and destroy it. */
+        return _PyStatus_OK();
     }
 
+    struct _gil_runtime_state *gil = &tstate->interp->runtime->ceval.gil;
+    assert(!gil_created(gil));
+
     PyThread_init_thread();
     create_gil(gil);
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    take_gil(ceval, tstate);
 
-    struct _pending_calls *pending = &ceval->pending;
-    pending->lock = PyThread_allocate_lock();
-    if (pending->lock == NULL) {
-        Py_FatalError("Can't initialize threads for pending calls");
-    }
+    take_gil(tstate);
+
+    assert(gil_created(gil));
+    return _PyStatus_OK();
 }
 
 void
-_PyEval_FiniThreads(struct _ceval_runtime_state *ceval)
+_PyEval_FiniGIL(PyThreadState *tstate)
 {
-    struct _gil_runtime_state *gil = &ceval->gil;
+    if (!_Py_IsMainInterpreter(tstate)) {
+        /* Currently, the GIL is shared by all interpreters,
+           and only the main interpreter is responsible to create
+           and destroy it. */
+        return;
+    }
+
+    struct _gil_runtime_state *gil = &tstate->interp->runtime->ceval.gil;
     if (!gil_created(gil)) {
+        /* First Py_InitializeFromConfig() call: the GIL doesn't exist
+           yet: do nothing. */
         return;
     }
 
     destroy_gil(gil);
     assert(!gil_created(gil));
-
-    struct _pending_calls *pending = &ceval->pending;
-    if (pending->lock != NULL) {
-        PyThread_free_lock(pending->lock);
-        pending->lock = NULL;
-    }
 }
 
-static inline void
-exit_thread_if_finalizing(_PyRuntimeState *runtime, PyThreadState *tstate)
+void
+PyEval_InitThreads(void)
 {
-    /* _Py_Finalizing is protected by the GIL */
-    if (runtime->finalizing != NULL && !_Py_CURRENTLY_FINALIZING(runtime, tstate)) {
-        drop_gil(&runtime->ceval, tstate);
-        PyThread_exit_thread();
-    }
+    /* Do nothing: kept for backward compatibility */
 }
 
 void
@@ -280,13 +350,10 @@
 PyEval_AcquireLock(void)
 {
     _PyRuntimeState *runtime = &_PyRuntime;
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
     PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_AcquireLock: current thread state is NULL");
-    }
-    take_gil(ceval, tstate);
-    exit_thread_if_finalizing(runtime, tstate);
+    _Py_EnsureTstateNotNULL(tstate);
+
+    take_gil(tstate);
 }
 
 void
@@ -296,45 +363,49 @@
     PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
     /* This function must succeed when the current thread state is NULL.
        We therefore avoid PyThreadState_Get() which dumps a fatal error
-       in debug mode.
-    */
-    drop_gil(&runtime->ceval, tstate);
+       in debug mode. */
+    struct _ceval_runtime_state *ceval = &runtime->ceval;
+    struct _ceval_state *ceval2 = &tstate->interp->ceval;
+    drop_gil(ceval, ceval2, tstate);
+}
+
+void
+_PyEval_ReleaseLock(PyThreadState *tstate)
+{
+    struct _ceval_runtime_state *ceval = &tstate->interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &tstate->interp->ceval;
+    drop_gil(ceval, ceval2, tstate);
 }
 
 void
 PyEval_AcquireThread(PyThreadState *tstate)
 {
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_AcquireThread: NULL new thread state");
-    }
+    _Py_EnsureTstateNotNULL(tstate);
 
-    _PyRuntimeState *runtime = &_PyRuntime;
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
+    take_gil(tstate);
 
-    /* Check someone has called PyEval_InitThreads() to create the lock */
-    assert(gil_created(&ceval->gil));
-    take_gil(ceval, tstate);
-    exit_thread_if_finalizing(runtime, tstate);
-    if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
-        Py_FatalError("PyEval_AcquireThread: non-NULL old thread state");
+    struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+    if (_PyThreadState_Swap(gilstate, tstate) != NULL) {
+        Py_FatalError("non-NULL old thread state");
     }
 }
 
 void
 PyEval_ReleaseThread(PyThreadState *tstate)
 {
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_ReleaseThread: NULL thread state");
-    }
+    assert(is_tstate_valid(tstate));
 
-    _PyRuntimeState *runtime = &_PyRuntime;
+    _PyRuntimeState *runtime = tstate->interp->runtime;
     PyThreadState *new_tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
     if (new_tstate != tstate) {
-        Py_FatalError("PyEval_ReleaseThread: wrong thread state");
+        Py_FatalError("wrong thread state");
     }
-    drop_gil(&runtime->ceval, tstate);
+    struct _ceval_runtime_state *ceval = &runtime->ceval;
+    struct _ceval_state *ceval2 = &tstate->interp->ceval;
+    drop_gil(ceval, ceval2, tstate);
 }
 
+#ifdef HAVE_FORK
 /* This function is called from PyOS_AfterFork_Child to destroy all threads
  * which are not running in the child process, and clear internal locks
  * which might be held by those threads.
@@ -343,64 +414,60 @@
 void
 _PyEval_ReInitThreads(_PyRuntimeState *runtime)
 {
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
-    if (!gil_created(&ceval->gil)) {
+    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+    _Py_EnsureTstateNotNULL(tstate);
+
+    struct _gil_runtime_state *gil = &runtime->ceval.gil;
+    if (!gil_created(gil)) {
         return;
     }
-    recreate_gil(&ceval->gil);
-    PyThreadState *current_tstate = _PyRuntimeState_GetThreadState(runtime);
-    take_gil(ceval, current_tstate);
+    recreate_gil(gil);
 
-    struct _pending_calls *pending = &ceval->pending;
-    pending->lock = PyThread_allocate_lock();
-    if (pending->lock == NULL) {
+    take_gil(tstate);
+
+    struct _pending_calls *pending = &tstate->interp->ceval.pending;
+    if (_PyThread_at_fork_reinit(&pending->lock) < 0) {
         Py_FatalError("Can't initialize threads for pending calls");
     }
 
     /* Destroy all threads except the current one */
-    _PyThreadState_DeleteExcept(runtime, current_tstate);
+    _PyThreadState_DeleteExcept(runtime, tstate);
 }
+#endif
 
 /* This function is used to signal that async exceptions are waiting to be
    raised. */
 
 void
-_PyEval_SignalAsyncExc(struct _ceval_runtime_state *ceval)
+_PyEval_SignalAsyncExc(PyThreadState *tstate)
 {
-    SIGNAL_ASYNC_EXC(ceval);
+    assert(is_tstate_valid(tstate));
+    SIGNAL_ASYNC_EXC(tstate->interp);
 }
 
 PyThreadState *
 PyEval_SaveThread(void)
 {
     _PyRuntimeState *runtime = &_PyRuntime;
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
     PyThreadState *tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_SaveThread: NULL tstate");
-    }
+    _Py_EnsureTstateNotNULL(tstate);
+
+    struct _ceval_runtime_state *ceval = &runtime->ceval;
+    struct _ceval_state *ceval2 = &tstate->interp->ceval;
     assert(gil_created(&ceval->gil));
-    drop_gil(ceval, tstate);
+    drop_gil(ceval, ceval2, tstate);
     return tstate;
 }
 
 void
 PyEval_RestoreThread(PyThreadState *tstate)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
+    _Py_EnsureTstateNotNULL(tstate);
 
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_RestoreThread: NULL tstate");
-    }
-    assert(gil_created(&ceval->gil));
+    take_gil(tstate);
 
-    int err = errno;
-    take_gil(ceval, tstate);
-    exit_thread_if_finalizing(runtime, tstate);
-    errno = err;
-
-    _PyThreadState_Swap(&runtime->gilstate, tstate);
+    struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+    _PyThreadState_Swap(gilstate, tstate);
 }
 
 
@@ -427,12 +494,24 @@
 */
 
 void
-_PyEval_SignalReceived(struct _ceval_runtime_state *ceval)
+_PyEval_SignalReceived(PyInterpreterState *interp)
 {
+#ifdef MS_WINDOWS
+    // bpo-42296: On Windows, _PyEval_SignalReceived() is called from a signal
+    // handler which can run in a thread different than the Python thread, in
+    // which case _Py_ThreadCanHandleSignals() is wrong. Ignore
+    // _Py_ThreadCanHandleSignals() and always set eval_breaker to 1.
+    //
+    // The next eval_frame_handle_pending() call will call
+    // _Py_ThreadCanHandleSignals() to recompute eval_breaker.
+    int force = 1;
+#else
+    int force = 0;
+#endif
     /* bpo-30703: Function called when the C signal handler of Python gets a
-       signal. We cannot queue a callback using Py_AddPendingCall() since
+       signal. We cannot queue a callback using _PyEval_AddPendingCall() since
        that function is not async-signal-safe. */
-    SIGNAL_PENDING_SIGNALS(ceval);
+    SIGNAL_PENDING_SIGNALS(interp, force);
 }
 
 /* Push one item onto the queue while holding the lock. */
@@ -472,91 +551,96 @@
  */
 
 int
-_PyEval_AddPendingCall(PyThreadState *tstate,
-                       struct _ceval_runtime_state *ceval,
+_PyEval_AddPendingCall(PyInterpreterState *interp,
                        int (*func)(void *), void *arg)
 {
-    struct _pending_calls *pending = &ceval->pending;
+    struct _pending_calls *pending = &interp->ceval.pending;
+
+    /* Ensure that _PyEval_InitPendingCalls() was called
+       and that _PyEval_FiniPendingCalls() is not called yet. */
+    assert(pending->lock != NULL);
 
     PyThread_acquire_lock(pending->lock, WAIT_LOCK);
-    if (pending->finishing) {
-        PyThread_release_lock(pending->lock);
-
-        PyObject *exc, *val, *tb;
-        _PyErr_Fetch(tstate, &exc, &val, &tb);
-        _PyErr_SetString(tstate, PyExc_SystemError,
-                        "Py_AddPendingCall: cannot add pending calls "
-                        "(Python shutting down)");
-        _PyErr_Print(tstate);
-        _PyErr_Restore(tstate, exc, val, tb);
-        return -1;
-    }
     int result = _push_pending_call(pending, func, arg);
     PyThread_release_lock(pending->lock);
 
     /* signal main loop */
-    SIGNAL_PENDING_CALLS(ceval);
+    SIGNAL_PENDING_CALLS(interp);
     return result;
 }
 
 int
 Py_AddPendingCall(int (*func)(void *), void *arg)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    return _PyEval_AddPendingCall(tstate, &runtime->ceval, func, arg);
+    /* Best-effort to support subinterpreters and calls with the GIL released.
+
+       First attempt _PyThreadState_GET() since it supports subinterpreters.
+
+       If the GIL is released, _PyThreadState_GET() returns NULL . In this
+       case, use PyGILState_GetThisThreadState() which works even if the GIL
+       is released.
+
+       Sadly, PyGILState_GetThisThreadState() doesn't support subinterpreters:
+       see bpo-10915 and bpo-15751.
+
+       Py_AddPendingCall() doesn't require the caller to hold the GIL. */
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (tstate == NULL) {
+        tstate = PyGILState_GetThisThreadState();
+    }
+
+    PyInterpreterState *interp;
+    if (tstate != NULL) {
+        interp = tstate->interp;
+    }
+    else {
+        /* Last resort: use the main interpreter */
+        interp = _PyRuntime.interpreters.main;
+    }
+    return _PyEval_AddPendingCall(interp, func, arg);
 }
 
 static int
-handle_signals(_PyRuntimeState *runtime)
+handle_signals(PyThreadState *tstate)
 {
-    /* Only handle signals on main thread.  PyEval_InitThreads must
-     * have been called already.
-     */
-    if (PyThread_get_thread_ident() != runtime->main_thread) {
-        return 0;
-    }
-    /*
-     * Ensure that the thread isn't currently running some other
-     * interpreter.
-     */
-    PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
-    if (interp != runtime->interpreters.main) {
+    assert(is_tstate_valid(tstate));
+    if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
         return 0;
     }
 
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
-    UNSIGNAL_PENDING_SIGNALS(ceval);
-    if (_PyErr_CheckSignals() < 0) {
-        SIGNAL_PENDING_SIGNALS(ceval); /* We're not done yet */
+    UNSIGNAL_PENDING_SIGNALS(tstate->interp);
+    if (_PyErr_CheckSignalsTstate(tstate) < 0) {
+        /* On failure, re-schedule a call to handle_signals(). */
+        SIGNAL_PENDING_SIGNALS(tstate->interp, 0);
         return -1;
     }
     return 0;
 }
 
 static int
-make_pending_calls(_PyRuntimeState *runtime)
+make_pending_calls(PyThreadState *tstate)
 {
-    static int busy = 0;
+    assert(is_tstate_valid(tstate));
 
-    /* only service pending calls on main thread */
-    if (PyThread_get_thread_ident() != runtime->main_thread) {
+    /* only execute pending calls on main thread */
+    if (!_Py_ThreadCanHandlePendingCalls()) {
         return 0;
     }
 
     /* don't perform recursive pending calls */
+    static int busy = 0;
     if (busy) {
         return 0;
     }
     busy = 1;
-    struct _ceval_runtime_state *ceval = &runtime->ceval;
+
     /* unsignal before starting to call callbacks, so that any callback
        added in-between re-signals */
-    UNSIGNAL_PENDING_CALLS(ceval);
+    UNSIGNAL_PENDING_CALLS(tstate->interp);
     int res = 0;
 
     /* perform a bounded number of calls, in case of recursion */
-    struct _pending_calls *pending = &ceval->pending;
+    struct _pending_calls *pending = &tstate->interp->ceval.pending;
     for (int i=0; i<NPENDINGCALLS; i++) {
         int (*func)(void *) = NULL;
         void *arg = NULL;
@@ -581,27 +665,22 @@
 
 error:
     busy = 0;
-    SIGNAL_PENDING_CALLS(ceval);
+    SIGNAL_PENDING_CALLS(tstate->interp);
     return res;
 }
 
 void
-_Py_FinishPendingCalls(_PyRuntimeState *runtime)
+_Py_FinishPendingCalls(PyThreadState *tstate)
 {
     assert(PyGILState_Check());
 
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    struct _pending_calls *pending = &runtime->ceval.pending;
-
-    PyThread_acquire_lock(pending->lock, WAIT_LOCK);
-    pending->finishing = 1;
-    PyThread_release_lock(pending->lock);
+    struct _pending_calls *pending = &tstate->interp->ceval.pending;
 
     if (!_Py_atomic_load_relaxed(&(pending->calls_to_do))) {
         return;
     }
 
-    if (make_pending_calls(runtime) < 0) {
+    if (make_pending_calls(tstate) < 0) {
         PyObject *exc, *val, *tb;
         _PyErr_Fetch(tstate, &exc, &val, &tb);
         PyErr_BadInternalCall();
@@ -617,15 +696,16 @@
 {
     assert(PyGILState_Check());
 
+    PyThreadState *tstate = _PyThreadState_GET();
+
     /* Python signal handler doesn't really queue a callback: it only signals
        that a signal was received, see _PyEval_SignalReceived(). */
-    _PyRuntimeState *runtime = &_PyRuntime;
-    int res = handle_signals(runtime);
+    int res = handle_signals(tstate);
     if (res != 0) {
         return res;
     }
 
-    res = make_pending_calls(runtime);
+    res = make_pending_calls(tstate);
     if (res != 0) {
         return res;
     }
@@ -642,38 +722,64 @@
 int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
 
 void
-_PyEval_Initialize(struct _ceval_runtime_state *state)
+_PyEval_InitRuntimeState(struct _ceval_runtime_state *ceval)
 {
-    state->recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
     _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
-    _gil_initialize(&state->gil);
+    _gil_initialize(&ceval->gil);
+}
+
+int
+_PyEval_InitState(struct _ceval_state *ceval)
+{
+    ceval->recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
+
+    struct _pending_calls *pending = &ceval->pending;
+    assert(pending->lock == NULL);
+
+    pending->lock = PyThread_allocate_lock();
+    if (pending->lock == NULL) {
+        return -1;
+    }
+
+    return 0;
+}
+
+void
+_PyEval_FiniState(struct _ceval_state *ceval)
+{
+    struct _pending_calls *pending = &ceval->pending;
+    if (pending->lock != NULL) {
+        PyThread_free_lock(pending->lock);
+        pending->lock = NULL;
+    }
 }
 
 int
 Py_GetRecursionLimit(void)
 {
-    return _PyRuntime.ceval.recursion_limit;
+    PyThreadState *tstate = _PyThreadState_GET();
+    return tstate->interp->ceval.recursion_limit;
 }
 
 void
 Py_SetRecursionLimit(int new_limit)
 {
-    struct _ceval_runtime_state *ceval = &_PyRuntime.ceval;
-    ceval->recursion_limit = new_limit;
-    _Py_CheckRecursionLimit = ceval->recursion_limit;
+    PyThreadState *tstate = _PyThreadState_GET();
+    tstate->interp->ceval.recursion_limit = new_limit;
+    if (_Py_IsMainInterpreter(tstate)) {
+        _Py_CheckRecursionLimit = new_limit;
+    }
 }
 
-/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
+/* The function _Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
    if the recursion_depth reaches _Py_CheckRecursionLimit.
    If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
    to guarantee that _Py_CheckRecursiveCall() is regularly called.
    Without USE_STACKCHECK, there is no need for this. */
 int
-_Py_CheckRecursiveCall(const char *where)
+_Py_CheckRecursiveCall(PyThreadState *tstate, const char *where)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    int recursion_limit = runtime->ceval.recursion_limit;
+    int recursion_limit = tstate->interp->ceval.recursion_limit;
 
 #ifdef USE_STACKCHECK
     tstate->stackcheck_counter = 0;
@@ -682,8 +788,10 @@
         _PyErr_SetString(tstate, PyExc_MemoryError, "Stack overflow");
         return -1;
     }
-    /* Needed for ABI backwards-compatibility (see bpo-31857) */
-    _Py_CheckRecursionLimit = recursion_limit;
+    if (_Py_IsMainInterpreter(tstate)) {
+        /* Needed for ABI backwards-compatibility (see bpo-31857) */
+        _Py_CheckRecursionLimit = recursion_limit;
+    }
 #endif
     if (tstate->recursion_critical)
         /* Somebody asked that we don't check for recursion. */
@@ -727,23 +835,90 @@
 /* Interpreter main loop */
 
 PyObject *
-PyEval_EvalFrame(PyFrameObject *f) {
-    /* This is for backward compatibility with extension modules that
-       used this API; core interpreter code should call
-       PyEval_EvalFrameEx() */
-    return PyEval_EvalFrameEx(f, 0);
+PyEval_EvalFrame(PyFrameObject *f)
+{
+    /* Function kept for backward compatibility */
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyEval_EvalFrame(tstate, f, 0);
 }
 
 PyObject *
 PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    return interp->eval_frame(f, throwflag);
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyEval_EvalFrame(tstate, f, throwflag);
+}
+
+
+/* Handle signals, pending calls, GIL drop request
+   and asynchronous exception */
+static int
+eval_frame_handle_pending(PyThreadState *tstate)
+{
+    _PyRuntimeState * const runtime = &_PyRuntime;
+    struct _ceval_runtime_state *ceval = &runtime->ceval;
+
+    /* Pending signals */
+    if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
+        if (handle_signals(tstate) != 0) {
+            return -1;
+        }
+    }
+
+    /* Pending calls */
+    struct _ceval_state *ceval2 = &tstate->interp->ceval;
+    if (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)) {
+        if (make_pending_calls(tstate) != 0) {
+            return -1;
+        }
+    }
+
+    /* GIL drop request */
+    if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request)) {
+        /* Give another thread a chance */
+        if (_PyThreadState_Swap(&runtime->gilstate, NULL) != tstate) {
+            Py_FatalError("tstate mix-up");
+        }
+        drop_gil(ceval, ceval2, tstate);
+
+        /* Other threads may run now */
+
+        take_gil(tstate);
+
+        if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
+            Py_FatalError("orphan tstate");
+        }
+    }
+
+    /* Check for asynchronous exception. */
+    if (tstate->async_exc != NULL) {
+        PyObject *exc = tstate->async_exc;
+        tstate->async_exc = NULL;
+        UNSIGNAL_ASYNC_EXC(tstate->interp);
+        _PyErr_SetNone(tstate, exc);
+        Py_DECREF(exc);
+        return -1;
+    }
+
+#ifdef MS_WINDOWS
+    // bpo-42296: On Windows, _PyEval_SignalReceived() can be called in a
+    // different thread than the Python thread, in which case
+    // _Py_ThreadCanHandleSignals() is wrong. Recompute eval_breaker in the
+    // current Python thread with the correct _Py_ThreadCanHandleSignals()
+    // value. It prevents to interrupt the eval loop at every instruction if
+    // the current Python thread cannot handle signals (if
+    // _Py_ThreadCanHandleSignals() is false).
+    COMPUTE_EVAL_BREAKER(tstate->interp, ceval, ceval2);
+#endif
+
+    return 0;
 }
 
 PyObject* _Py_HOT_FUNCTION
-_PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
+_PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
 {
+    _Py_EnsureTstateNotNULL(tstate);
+
 #ifdef DXPAIRS
     int lastopcode = 0;
 #endif
@@ -753,10 +928,8 @@
     int oparg;         /* Current opcode argument, if any */
     PyObject **fastlocals, **freevars;
     PyObject *retval = NULL;            /* Return value */
-    _PyRuntimeState * const runtime = &_PyRuntime;
-    PyThreadState * const tstate = _PyRuntimeState_GetThreadState(runtime);
-    struct _ceval_runtime_state * const ceval = &runtime->ceval;
-    _Py_atomic_int * const eval_breaker = &ceval->eval_breaker;
+    struct _ceval_state * const ceval2 = &tstate->interp->ceval;
+    _Py_atomic_int * const eval_breaker = &ceval2->eval_breaker;
     PyCodeObject *co;
 
     /* when tracing we set things up so that
@@ -844,7 +1017,7 @@
 #ifdef LLTRACE
 #define FAST_DISPATCH() \
     { \
-        if (!lltrace && !_Py_TracingPossible(ceval) && !PyDTrace_LINE_ENABLED()) { \
+        if (!lltrace && !_Py_TracingPossible(ceval2) && !PyDTrace_LINE_ENABLED()) { \
             f->f_lasti = INSTR_OFFSET(); \
             NEXTOPARG(); \
             goto *opcode_targets[opcode]; \
@@ -854,7 +1027,7 @@
 #else
 #define FAST_DISPATCH() \
     { \
-        if (!_Py_TracingPossible(ceval) && !PyDTrace_LINE_ENABLED()) { \
+        if (!_Py_TracingPossible(ceval2) && !PyDTrace_LINE_ENABLED()) { \
             f->f_lasti = INSTR_OFFSET(); \
             NEXTOPARG(); \
             goto *opcode_targets[opcode]; \
@@ -926,21 +1099,23 @@
 
 */
 
+#define PREDICT_ID(op)          PRED_##op
+
 #if defined(DYNAMIC_EXECUTION_PROFILE) || USE_COMPUTED_GOTOS
-#define PREDICT(op)             if (0) goto PRED_##op
+#define PREDICT(op)             if (0) goto PREDICT_ID(op)
 #else
 #define PREDICT(op) \
-    do{ \
+    do { \
         _Py_CODEUNIT word = *next_instr; \
         opcode = _Py_OPCODE(word); \
-        if (opcode == op){ \
+        if (opcode == op) { \
             oparg = _Py_OPARG(word); \
             next_instr++; \
-            goto PRED_##op; \
+            goto PREDICT_ID(op); \
         } \
     } while(0)
 #endif
-#define PREDICTED(op)           PRED_##op:
+#define PREDICTED(op)           PREDICT_ID(op):
 
 
 /* Stack manipulation macros */
@@ -1077,8 +1252,9 @@
 /* Start of code */
 
     /* push frame */
-    if (Py_EnterRecursiveCall(""))
+    if (_Py_EnterRecursiveCall(tstate, "")) {
         return NULL;
+    }
 
     tstate->frame = f;
 
@@ -1178,7 +1354,7 @@
         goto error;
 
 #ifdef Py_DEBUG
-    /* PyEval_EvalFrameEx() must not be called with an exception set,
+    /* _PyEval_EvalFrameDefault() must not be called with an exception set,
        because it can clear it (directly or indirectly) and so the
        caller loses its exception */
     assert(!_PyErr_Occurred(tstate));
@@ -1193,7 +1369,7 @@
         /* Do periodic things.  Doing this every time through
            the loop would add too much overhead, so we do it
            only every Nth instruction.  We also do it if
-           ``pendingcalls_to_do'' is set, i.e. when an asynchronous
+           ``pending.calls_to_do'' is set, i.e. when an asynchronous
            event needs attention (e.g. a signal handler or
            async I/O handler); see Py_AddPendingCall() and
            Py_MakePendingCalls() above. */
@@ -1223,42 +1399,7 @@
                 goto fast_next_opcode;
             }
 
-            if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
-                if (handle_signals(runtime) != 0) {
-                    goto error;
-                }
-            }
-            if (_Py_atomic_load_relaxed(&ceval->pending.calls_to_do)) {
-                if (make_pending_calls(runtime) != 0) {
-                    goto error;
-                }
-            }
-
-            if (_Py_atomic_load_relaxed(&ceval->gil_drop_request)) {
-                /* Give another thread a chance */
-                if (_PyThreadState_Swap(&runtime->gilstate, NULL) != tstate) {
-                    Py_FatalError("ceval: tstate mix-up");
-                }
-                drop_gil(ceval, tstate);
-
-                /* Other threads may run now */
-
-                take_gil(ceval, tstate);
-
-                /* Check if we should make a quick exit. */
-                exit_thread_if_finalizing(runtime, tstate);
-
-                if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
-                    Py_FatalError("ceval: orphan tstate");
-                }
-            }
-            /* Check for asynchronous exceptions. */
-            if (tstate->async_exc != NULL) {
-                PyObject *exc = tstate->async_exc;
-                tstate->async_exc = NULL;
-                UNSIGNAL_ASYNC_EXC(ceval);
-                _PyErr_SetNone(tstate, exc);
-                Py_DECREF(exc);
+            if (eval_frame_handle_pending(tstate) != 0) {
                 goto error;
             }
         }
@@ -1271,7 +1412,7 @@
 
         /* line-by-line tracing support */
 
-        if (_Py_TracingPossible(ceval) &&
+        if (_Py_TracingPossible(ceval2) &&
             tstate->c_tracefunc != NULL && !tstate->tracing) {
             int err;
             /* see maybe_call_line_trace
@@ -1878,7 +2019,7 @@
                 Py_DECREF(value);
                 goto error;
             }
-            res = PyObject_CallFunctionObjArgs(hook, value, NULL);
+            res = PyObject_CallOneArg(hook, value);
             Py_DECREF(value);
             if (res == NULL)
                 goto error;
@@ -1911,7 +2052,8 @@
         case TARGET(RETURN_VALUE): {
             retval = POP();
             assert(f->f_iblock == 0);
-            goto exit_returning;
+            assert(EMPTY());
+            goto exiting;
         }
 
         case TARGET(GET_AITER): {
@@ -2015,7 +2157,12 @@
             PyObject *iter = _PyCoro_GetAwaitableIter(iterable);
 
             if (iter == NULL) {
+                int opcode_at_minus_3 = 0;
+                if ((next_instr - first_instr) > 2) {
+                    opcode_at_minus_3 = _Py_OPCODE(next_instr[-3]);
+                }
                 format_awaitable_error(tstate, Py_TYPE(iterable),
+                                       opcode_at_minus_3,
                                        _Py_OPCODE(next_instr[-2]));
             }
 
@@ -2056,7 +2203,7 @@
                 if (v == Py_None)
                     retval = Py_TYPE(receiver)->tp_iternext(receiver);
                 else
-                    retval = _PyObject_CallMethodIdObjArgs(receiver, &PyId_send, v, NULL);
+                    retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v);
             }
             Py_DECREF(v);
             if (retval == NULL) {
@@ -2076,7 +2223,7 @@
             /* and repeat... */
             assert(f->f_lasti >= (int)sizeof(_Py_CODEUNIT));
             f->f_lasti -= sizeof(_Py_CODEUNIT);
-            goto exit_yielding;
+            goto exiting;
         }
 
         case TARGET(YIELD_VALUE): {
@@ -2093,7 +2240,7 @@
             }
 
             f->f_stacktop = stack_pointer;
-            goto exit_yielding;
+            goto exiting;
         }
 
         case TARGET(POP_EXCEPT): {
@@ -2126,104 +2273,13 @@
             DISPATCH();
         }
 
-        case TARGET(POP_FINALLY): {
-            /* If oparg is 0 at the top of the stack are 1 or 6 values:
-               Either:
-                - TOP = NULL or an integer
-               or:
-                - (TOP, SECOND, THIRD) = exc_info()
-                - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
-
-               If oparg is 1 the value for 'return' was additionally pushed
-               at the top of the stack.
-            */
-            PyObject *res = NULL;
-            if (oparg) {
-                res = POP();
-            }
+        case TARGET(RERAISE): {
             PyObject *exc = POP();
-            if (exc == NULL || PyLong_CheckExact(exc)) {
-                Py_XDECREF(exc);
-            }
-            else {
-                Py_DECREF(exc);
-                Py_DECREF(POP());
-                Py_DECREF(POP());
-
-                PyObject *type, *value, *traceback;
-                _PyErr_StackItem *exc_info;
-                PyTryBlock *b = PyFrame_BlockPop(f);
-                if (b->b_type != EXCEPT_HANDLER) {
-                    _PyErr_SetString(tstate, PyExc_SystemError,
-                                     "popped block is not an except handler");
-                    Py_XDECREF(res);
-                    goto error;
-                }
-                assert(STACK_LEVEL() == (b)->b_level + 3);
-                exc_info = tstate->exc_info;
-                type = exc_info->exc_type;
-                value = exc_info->exc_value;
-                traceback = exc_info->exc_traceback;
-                exc_info->exc_type = POP();
-                exc_info->exc_value = POP();
-                exc_info->exc_traceback = POP();
-                Py_XDECREF(type);
-                Py_XDECREF(value);
-                Py_XDECREF(traceback);
-            }
-            if (oparg) {
-                PUSH(res);
-            }
-            DISPATCH();
-        }
-
-        case TARGET(CALL_FINALLY): {
-            PyObject *ret = PyLong_FromLong(INSTR_OFFSET());
-            if (ret == NULL) {
-                goto error;
-            }
-            PUSH(ret);
-            JUMPBY(oparg);
-            FAST_DISPATCH();
-        }
-
-        case TARGET(BEGIN_FINALLY): {
-            /* Push NULL onto the stack for using it in END_FINALLY,
-               POP_FINALLY, WITH_CLEANUP_START and WITH_CLEANUP_FINISH.
-             */
-            PUSH(NULL);
-            FAST_DISPATCH();
-        }
-
-        case TARGET(END_FINALLY): {
-            PREDICTED(END_FINALLY);
-            /* At the top of the stack are 1 or 6 values:
-               Either:
-                - TOP = NULL or an integer
-               or:
-                - (TOP, SECOND, THIRD) = exc_info()
-                - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
-            */
-            PyObject *exc = POP();
-            if (exc == NULL) {
-                FAST_DISPATCH();
-            }
-            else if (PyLong_CheckExact(exc)) {
-                int ret = _PyLong_AsInt(exc);
-                Py_DECREF(exc);
-                if (ret == -1 && _PyErr_Occurred(tstate)) {
-                    goto error;
-                }
-                JUMPTO(ret);
-                FAST_DISPATCH();
-            }
-            else {
-                assert(PyExceptionClass_Check(exc));
-                PyObject *val = POP();
-                PyObject *tb = POP();
-                _PyErr_Restore(tstate, exc, val, tb);
-                goto exception_unwind;
-            }
+            PyObject *val = POP();
+            PyObject *tb = POP();
+            assert(PyExceptionClass_Check(exc));
+            _PyErr_Restore(tstate, exc, val, tb);
+            goto exception_unwind;
         }
 
         case TARGET(END_ASYNC_FOR): {
@@ -2246,6 +2302,13 @@
             }
         }
 
+        case TARGET(LOAD_ASSERTION_ERROR): {
+            PyObject *value = PyExc_AssertionError;
+            Py_INCREF(value);
+            PUSH(value);
+            FAST_DISPATCH();
+        }
+
         case TARGET(LOAD_BUILD_CLASS): {
             _Py_IDENTIFIER(__build_class__);
 
@@ -2698,46 +2761,46 @@
             DISPATCH();
         }
 
-        case TARGET(BUILD_TUPLE_UNPACK_WITH_CALL):
-        case TARGET(BUILD_TUPLE_UNPACK):
-        case TARGET(BUILD_LIST_UNPACK): {
-            int convert_to_tuple = opcode != BUILD_LIST_UNPACK;
-            Py_ssize_t i;
-            PyObject *sum = PyList_New(0);
-            PyObject *return_value;
-
-            if (sum == NULL)
+        case TARGET(LIST_TO_TUPLE): {
+            PyObject *list = POP();
+            PyObject *tuple = PyList_AsTuple(list);
+            Py_DECREF(list);
+            if (tuple == NULL) {
                 goto error;
+            }
+            PUSH(tuple);
+            DISPATCH();
+        }
 
-            for (i = oparg; i > 0; i--) {
-                PyObject *none_val;
-
-                none_val = _PyList_Extend((PyListObject *)sum, PEEK(i));
-                if (none_val == NULL) {
-                    if (opcode == BUILD_TUPLE_UNPACK_WITH_CALL &&
-                        _PyErr_ExceptionMatches(tstate, PyExc_TypeError))
-                    {
-                        check_args_iterable(tstate, PEEK(1 + oparg), PEEK(i));
-                    }
-                    Py_DECREF(sum);
-                    goto error;
+        case TARGET(LIST_EXTEND): {
+            PyObject *iterable = POP();
+            PyObject *list = PEEK(oparg);
+            PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable);
+            if (none_val == NULL) {
+                if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
+                   (Py_TYPE(iterable)->tp_iter == NULL && !PySequence_Check(iterable)))
+                {
+                    _PyErr_Clear(tstate);
+                    _PyErr_Format(tstate, PyExc_TypeError,
+                          "Value after * must be an iterable, not %.200s",
+                          Py_TYPE(iterable)->tp_name);
                 }
-                Py_DECREF(none_val);
+                Py_DECREF(iterable);
+                goto error;
             }
+            Py_DECREF(none_val);
+            Py_DECREF(iterable);
+            DISPATCH();
+        }
 
-            if (convert_to_tuple) {
-                return_value = PyList_AsTuple(sum);
-                Py_DECREF(sum);
-                if (return_value == NULL)
-                    goto error;
+        case TARGET(SET_UPDATE): {
+            PyObject *iterable = POP();
+            PyObject *set = PEEK(oparg);
+            int err = _PySet_Update(set, iterable);
+            Py_DECREF(iterable);
+            if (err < 0) {
+                goto error;
             }
-            else {
-                return_value = sum;
-            }
-
-            while (oparg--)
-                Py_DECREF(POP());
-            PUSH(return_value);
             DISPATCH();
         }
 
@@ -2762,25 +2825,6 @@
             DISPATCH();
         }
 
-        case TARGET(BUILD_SET_UNPACK): {
-            Py_ssize_t i;
-            PyObject *sum = PySet_New(NULL);
-            if (sum == NULL)
-                goto error;
-
-            for (i = oparg; i > 0; i--) {
-                if (_PySet_Update(sum, PEEK(i)) < 0) {
-                    Py_DECREF(sum);
-                    goto error;
-                }
-            }
-
-            while (oparg--)
-                Py_DECREF(POP());
-            PUSH(sum);
-            DISPATCH();
-        }
-
         case TARGET(BUILD_MAP): {
             Py_ssize_t i;
             PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg);
@@ -2897,49 +2941,33 @@
             DISPATCH();
         }
 
-        case TARGET(BUILD_MAP_UNPACK): {
-            Py_ssize_t i;
-            PyObject *sum = PyDict_New();
-            if (sum == NULL)
-                goto error;
-
-            for (i = oparg; i > 0; i--) {
-                PyObject *arg = PEEK(i);
-                if (PyDict_Update(sum, arg) < 0) {
-                    if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
-                        _PyErr_Format(tstate, PyExc_TypeError,
-                                      "'%.200s' object is not a mapping",
-                                      arg->ob_type->tp_name);
-                    }
-                    Py_DECREF(sum);
-                    goto error;
+        case TARGET(DICT_UPDATE): {
+            PyObject *update = POP();
+            PyObject *dict = PEEK(oparg);
+            if (PyDict_Update(dict, update) < 0) {
+                if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
+                    _PyErr_Format(tstate, PyExc_TypeError,
+                                    "'%.200s' object is not a mapping",
+                                    Py_TYPE(update)->tp_name);
                 }
+                Py_DECREF(update);
+                goto error;
             }
-
-            while (oparg--)
-                Py_DECREF(POP());
-            PUSH(sum);
+            Py_DECREF(update);
             DISPATCH();
         }
 
-        case TARGET(BUILD_MAP_UNPACK_WITH_CALL): {
-            Py_ssize_t i;
-            PyObject *sum = PyDict_New();
-            if (sum == NULL)
+        case TARGET(DICT_MERGE): {
+            PyObject *update = POP();
+            PyObject *dict = PEEK(oparg);
+
+            if (_PyDict_MergeEx(dict, update, 2) < 0) {
+                format_kwargs_error(tstate, PEEK(2 + oparg), update);
+                Py_DECREF(update);
                 goto error;
-
-            for (i = oparg; i > 0; i--) {
-                PyObject *arg = PEEK(i);
-                if (_PyDict_MergeEx(sum, arg, 2) < 0) {
-                    Py_DECREF(sum);
-                    format_kwargs_error(tstate, PEEK(2 + oparg), arg);
-                    goto error;
-                }
             }
-
-            while (oparg--)
-                Py_DECREF(POP());
-            PUSH(sum);
+            Py_DECREF(update);
+            PREDICT(CALL_FUNCTION_EX);
             DISPATCH();
         }
 
@@ -2972,12 +3000,13 @@
         }
 
         case TARGET(COMPARE_OP): {
+            assert(oparg <= Py_GE);
             PyObject *right = POP();
             PyObject *left = TOP();
-            PyObject *res = cmp_outcome(tstate, oparg, left, right);
+            PyObject *res = PyObject_RichCompare(left, right, oparg);
+            SET_TOP(res);
             Py_DECREF(left);
             Py_DECREF(right);
-            SET_TOP(res);
             if (res == NULL)
                 goto error;
             PREDICT(POP_JUMP_IF_FALSE);
@@ -2985,6 +3014,81 @@
             DISPATCH();
         }
 
+        case TARGET(IS_OP): {
+            PyObject *right = POP();
+            PyObject *left = TOP();
+            int res = (left == right)^oparg;
+            PyObject *b = res ? Py_True : Py_False;
+            Py_INCREF(b);
+            SET_TOP(b);
+            Py_DECREF(left);
+            Py_DECREF(right);
+            PREDICT(POP_JUMP_IF_FALSE);
+            PREDICT(POP_JUMP_IF_TRUE);
+            FAST_DISPATCH();
+        }
+
+        case TARGET(CONTAINS_OP): {
+            PyObject *right = POP();
+            PyObject *left = POP();
+            int res = PySequence_Contains(right, left);
+            Py_DECREF(left);
+            Py_DECREF(right);
+            if (res < 0) {
+                goto error;
+            }
+            PyObject *b = (res^oparg) ? Py_True : Py_False;
+            Py_INCREF(b);
+            PUSH(b);
+            PREDICT(POP_JUMP_IF_FALSE);
+            PREDICT(POP_JUMP_IF_TRUE);
+            FAST_DISPATCH();
+        }
+
+#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
+                         "BaseException is not allowed"
+
+        case TARGET(JUMP_IF_NOT_EXC_MATCH): {
+            PyObject *right = POP();
+            PyObject *left = POP();
+            if (PyTuple_Check(right)) {
+                Py_ssize_t i, length;
+                length = PyTuple_GET_SIZE(right);
+                for (i = 0; i < length; i++) {
+                    PyObject *exc = PyTuple_GET_ITEM(right, i);
+                    if (!PyExceptionClass_Check(exc)) {
+                        _PyErr_SetString(tstate, PyExc_TypeError,
+                                        CANNOT_CATCH_MSG);
+                        Py_DECREF(left);
+                        Py_DECREF(right);
+                        goto error;
+                    }
+                }
+            }
+            else {
+                if (!PyExceptionClass_Check(right)) {
+                    _PyErr_SetString(tstate, PyExc_TypeError,
+                                    CANNOT_CATCH_MSG);
+                    Py_DECREF(left);
+                    Py_DECREF(right);
+                    goto error;
+                }
+            }
+            int res = PyErr_GivenExceptionMatches(left, right);
+            Py_DECREF(left);
+            Py_DECREF(right);
+            if (res > 0) {
+                /* Exception matches -- Do nothing */;
+            }
+            else if (res == 0) {
+                JUMPTO(oparg);
+            }
+            else {
+                goto error;
+            }
+            DISPATCH();
+        }
+
         case TARGET(IMPORT_NAME): {
             PyObject *name = GETITEM(names, oparg);
             PyObject *fromlist = POP();
@@ -3199,7 +3303,7 @@
             PREDICTED(FOR_ITER);
             /* before: [iter]; after: [iter, iter()] *or* [] */
             PyObject *iter = TOP();
-            PyObject *next = (*iter->ob_type->tp_iternext)(iter);
+            PyObject *next = (*Py_TYPE(iter)->tp_iternext)(iter);
             if (next != NULL) {
                 PUSH(next);
                 PREDICT(STORE_FAST);
@@ -3224,31 +3328,27 @@
         }
 
         case TARGET(SETUP_FINALLY): {
-            /* NOTE: If you add any new block-setup opcodes that
-               are not try/except/finally handlers, you may need
-               to update the PyGen_NeedsFinalizing() function.
-               */
-
             PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg,
                                STACK_LEVEL());
             DISPATCH();
         }
 
         case TARGET(BEFORE_ASYNC_WITH): {
-            _Py_IDENTIFIER(__aexit__);
             _Py_IDENTIFIER(__aenter__);
-
+            _Py_IDENTIFIER(__aexit__);
             PyObject *mgr = TOP();
-            PyObject *exit = special_lookup(tstate, mgr, &PyId___aexit__),
-                     *enter;
+            PyObject *enter = special_lookup(tstate, mgr, &PyId___aenter__);
             PyObject *res;
-            if (exit == NULL)
+            if (enter == NULL) {
                 goto error;
+            }
+            PyObject *exit = special_lookup(tstate, mgr, &PyId___aexit__);
+            if (exit == NULL) {
+                Py_DECREF(enter);
+                goto error;
+            }
             SET_TOP(exit);
-            enter = special_lookup(tstate, mgr, &PyId___aenter__);
             Py_DECREF(mgr);
-            if (enter == NULL)
-                goto error;
             res = _PyObject_CallNoArg(enter);
             Py_DECREF(enter);
             if (res == NULL)
@@ -3269,8 +3369,8 @@
         }
 
         case TARGET(SETUP_WITH): {
-            _Py_IDENTIFIER(__exit__);
             _Py_IDENTIFIER(__enter__);
+            _Py_IDENTIFIER(__exit__);
             PyObject *mgr = TOP();
             PyObject *enter = special_lookup(tstate, mgr, &PyId___enter__);
             PyObject *res;
@@ -3297,113 +3397,31 @@
             DISPATCH();
         }
 
-        case TARGET(WITH_CLEANUP_START): {
-            /* At the top of the stack are 1 or 6 values indicating
-               how/why we entered the finally clause:
-               - TOP = NULL
+        case TARGET(WITH_EXCEPT_START): {
+            /* At the top of the stack are 7 values:
                - (TOP, SECOND, THIRD) = exc_info()
-                 (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
-               Below them is EXIT, the context.__exit__ or context.__aexit__
-               bound method.
-               In the first case, we must call
-                 EXIT(None, None, None)
-               otherwise we must call
-                 EXIT(TOP, SECOND, THIRD)
-
-               In the first case, we remove EXIT from the
-               stack, leaving TOP, and push TOP on the stack.
-               Otherwise we shift the bottom 3 values of the
-               stack down, replace the empty spot with NULL, and push
-               None on the stack.
-
-               Finally we push the result of the call.
+               - (FOURTH, FIFTH, SIXTH) = previous exception for EXCEPT_HANDLER
+               - SEVENTH: the context.__exit__ bound method
+               We call SEVENTH(TOP, SECOND, THIRD).
+               Then we push again the TOP exception and the __exit__
+               return value.
             */
-            PyObject *stack[3];
             PyObject *exit_func;
             PyObject *exc, *val, *tb, *res;
 
-            val = tb = Py_None;
             exc = TOP();
-            if (exc == NULL) {
-                STACK_SHRINK(1);
-                exit_func = TOP();
-                SET_TOP(exc);
-                exc = Py_None;
-            }
-            else {
-                assert(PyExceptionClass_Check(exc));
-                PyObject *tp2, *exc2, *tb2;
-                PyTryBlock *block;
-                val = SECOND();
-                tb = THIRD();
-                tp2 = FOURTH();
-                exc2 = PEEK(5);
-                tb2 = PEEK(6);
-                exit_func = PEEK(7);
-                SET_VALUE(7, tb2);
-                SET_VALUE(6, exc2);
-                SET_VALUE(5, tp2);
-                /* UNWIND_EXCEPT_HANDLER will pop this off. */
-                SET_FOURTH(NULL);
-                /* We just shifted the stack down, so we have
-                   to tell the except handler block that the
-                   values are lower than it expects. */
-                assert(f->f_iblock > 0);
-                block = &f->f_blockstack[f->f_iblock - 1];
-                assert(block->b_type == EXCEPT_HANDLER);
-                assert(block->b_level > 0);
-                block->b_level--;
-            }
-
-            stack[0] = exc;
-            stack[1] = val;
-            stack[2] = tb;
-            res = _PyObject_FastCall(exit_func, stack, 3);
-            Py_DECREF(exit_func);
+            val = SECOND();
+            tb = THIRD();
+            assert(exc != Py_None);
+            assert(!PyLong_Check(exc));
+            exit_func = PEEK(7);
+            PyObject *stack[4] = {NULL, exc, val, tb};
+            res = PyObject_Vectorcall(exit_func, stack + 1,
+                    3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
             if (res == NULL)
                 goto error;
 
-            Py_INCREF(exc); /* Duplicating the exception on the stack */
-            PUSH(exc);
             PUSH(res);
-            PREDICT(WITH_CLEANUP_FINISH);
-            DISPATCH();
-        }
-
-        case TARGET(WITH_CLEANUP_FINISH): {
-            PREDICTED(WITH_CLEANUP_FINISH);
-            /* TOP = the result of calling the context.__exit__ bound method
-               SECOND = either None or exception type
-
-               If SECOND is None below is NULL or the return address,
-               otherwise below are 7 values representing an exception.
-            */
-            PyObject *res = POP();
-            PyObject *exc = POP();
-            int err;
-
-            if (exc != Py_None)
-                err = PyObject_IsTrue(res);
-            else
-                err = 0;
-
-            Py_DECREF(res);
-            Py_DECREF(exc);
-
-            if (err < 0)
-                goto error;
-            else if (err > 0) {
-                /* There was an exception and a True return.
-                 * We must manually unwind the EXCEPT_HANDLER block
-                 * which was created when the exception was caught,
-                 * otherwise the stack will be in an inconsistent state.
-                 */
-                PyTryBlock *b = PyFrame_BlockPop(f);
-                assert(b->b_type == EXCEPT_HANDLER);
-                UNWIND_EXCEPT_HANDLER(b);
-                PUSH(NULL);
-            }
-            PREDICT(END_FINALLY);
             DISPATCH();
         }
 
@@ -3510,7 +3528,9 @@
             PyObject **sp, *res, *names;
 
             names = POP();
-            assert(PyTuple_CheckExact(names) && PyTuple_GET_SIZE(names) <= oparg);
+            assert(PyTuple_Check(names));
+            assert(PyTuple_GET_SIZE(names) <= oparg);
+            /* We assume without checking that names contains only strings */
             sp = stack_pointer;
             res = call_function(tstate, &sp, oparg, names);
             stack_pointer = sp;
@@ -3524,6 +3544,7 @@
         }
 
         case TARGET(CALL_FUNCTION_EX): {
+            PREDICTED(CALL_FUNCTION_EX);
             PyObject *func, *callargs, *kwargs = NULL, *result;
             if (oparg & 0x01) {
                 kwargs = POP();
@@ -3770,6 +3791,16 @@
                 PUSH(val);
                 PUSH(exc);
                 JUMPTO(handler);
+                if (_Py_TracingPossible(ceval2)) {
+                    int needs_new_execution_window = (f->f_lasti < instr_lb || f->f_lasti >= instr_ub);
+                    int needs_line_update = (f->f_lasti == instr_lb || f->f_lasti < instr_prev);
+                    /* Make sure that we trace line after exception if we are in a new execution
+                     * window or we don't need a line update and we are not in the first instruction
+                     * of the line. */
+                    if (needs_new_execution_window || (!needs_line_update && instr_lb > 0)) {
+                        instr_prev = INT_MAX;
+                    }
+                }
                 /* Resume normal execution */
                 goto main_loop;
             }
@@ -3782,15 +3813,13 @@
     assert(retval == NULL);
     assert(_PyErr_Occurred(tstate));
 
-exit_returning:
-
     /* Pop remaining stack entries. */
     while (!EMPTY()) {
         PyObject *o = POP();
         Py_XDECREF(o);
     }
 
-exit_yielding:
+exiting:
     if (tstate->use_tracing) {
         if (tstate->c_tracefunc) {
             if (call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj,
@@ -3810,11 +3839,11 @@
 exit_eval_frame:
     if (PyDTrace_FUNCTION_RETURN_ENABLED())
         dtrace_function_return(f);
-    Py_LeaveRecursiveCall();
+    _Py_LeaveRecursiveCall(tstate);
     f->f_executing = 0;
     tstate->frame = f->f_back;
 
-    return _Py_CheckFunctionResult(NULL, retval, "PyEval_EvalFrameEx");
+    return _Py_CheckFunctionResult(tstate, NULL, retval, __func__);
 }
 
 static void
@@ -4042,7 +4071,8 @@
    the test in the if statements in Misc/gdbinit (pystack and pystackv). */
 
 PyObject *
-_PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
+_PyEval_EvalCode(PyThreadState *tstate,
+           PyObject *_co, PyObject *globals, PyObject *locals,
            PyObject *const *args, Py_ssize_t argcount,
            PyObject *const *kwnames, PyObject *const *kwargs,
            Py_ssize_t kwcount, int kwstep,
@@ -4050,6 +4080,8 @@
            PyObject *kwdefs, PyObject *closure,
            PyObject *name, PyObject *qualname)
 {
+    assert(is_tstate_valid(tstate));
+
     PyCodeObject* co = (PyCodeObject*)_co;
     PyFrameObject *f;
     PyObject *retval = NULL;
@@ -4059,9 +4091,6 @@
     Py_ssize_t i, j, n;
     PyObject *kwdict;
 
-    PyThreadState *tstate = _PyThreadState_GET();
-    assert(tstate != NULL);
-
     if (globals == NULL) {
         _PyErr_SetString(tstate, PyExc_SystemError,
                          "PyEval_EvalCodeEx: NULL globals");
@@ -4295,7 +4324,7 @@
         return gen;
     }
 
-    retval = PyEval_EvalFrameEx(f,0);
+    retval = _PyEval_EvalFrame(tstate, f, 0);
 
 fail: /* Jump here from prelude on failure */
 
@@ -4304,7 +4333,6 @@
        current Python frame (f), the associated C stack is still in use,
        so recursion_depth must be boosted for the duration.
     */
-    assert(tstate != NULL);
     if (Py_REFCNT(f) > 1) {
         Py_DECREF(f);
         _PyObject_GC_TRACK(f);
@@ -4317,6 +4345,26 @@
     return retval;
 }
 
+
+PyObject *
+_PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
+           PyObject *const *args, Py_ssize_t argcount,
+           PyObject *const *kwnames, PyObject *const *kwargs,
+           Py_ssize_t kwcount, int kwstep,
+           PyObject *const *defs, Py_ssize_t defcount,
+           PyObject *kwdefs, PyObject *closure,
+           PyObject *name, PyObject *qualname)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyEval_EvalCode(tstate, _co, globals, locals,
+               args, argcount,
+               kwnames, kwargs,
+               kwcount, kwstep,
+               defs, defcount,
+               kwdefs, closure,
+               name, qualname);
+}
+
 PyObject *
 PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
                   PyObject *const *args, int argcount,
@@ -4339,7 +4387,7 @@
     PyObject *res;
     res = _PyObject_LookupSpecial(o, id);
     if (res == NULL && !_PyErr_Occurred(tstate)) {
-        _PyErr_SetObject(tstate, PyExc_AttributeError, id->object);
+        _PyErr_SetObject(tstate, PyExc_AttributeError, _PyUnicode_FromId(id));
         return NULL;
     }
     return res;
@@ -4432,7 +4480,7 @@
     }
 
     _PyErr_SetObject(tstate, type, value);
-    /* PyErr_SetObject incref's its arguments */
+    /* _PyErr_SetObject incref's its arguments */
     Py_DECREF(value);
     Py_DECREF(type);
     return 0;
@@ -4466,11 +4514,11 @@
     it = PyObject_GetIter(v);
     if (it == NULL) {
         if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
-            v->ob_type->tp_iter == NULL && !PySequence_Check(v))
+            Py_TYPE(v)->tp_iter == NULL && !PySequence_Check(v))
         {
             _PyErr_Format(tstate, PyExc_TypeError,
                           "cannot unpack non-iterable %.200s object",
-                          v->ob_type->tp_name);
+                          Py_TYPE(v)->tp_name);
         }
         return 0;
     }
@@ -4533,7 +4581,7 @@
         *--sp = PyList_GET_ITEM(l, ll - j);
     }
     /* Resize the list. */
-    Py_SIZE(l) = ll - argcntafter;
+    Py_SET_SIZE(l, ll - argcntafter);
     Py_DECREF(it);
     return 1;
 
@@ -4682,58 +4730,97 @@
     return result;
 }
 
+int
+_PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
+{
+    assert(is_tstate_valid(tstate));
+    /* The caller must hold the GIL */
+    assert(PyGILState_Check());
+
+    /* Call _PySys_Audit() in the context of the current thread state,
+       even if tstate is not the current thread state. */
+    PyThreadState *current_tstate = _PyThreadState_GET();
+    if (_PySys_Audit(current_tstate, "sys.setprofile", NULL) < 0) {
+        return -1;
+    }
+
+    PyObject *profileobj = tstate->c_profileobj;
+
+    tstate->c_profilefunc = NULL;
+    tstate->c_profileobj = NULL;
+    /* Must make sure that tracing is not ignored if 'profileobj' is freed */
+    tstate->use_tracing = tstate->c_tracefunc != NULL;
+    Py_XDECREF(profileobj);
+
+    Py_XINCREF(arg);
+    tstate->c_profileobj = arg;
+    tstate->c_profilefunc = func;
+
+    /* Flag that tracing or profiling is turned on */
+    tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
+    return 0;
+}
+
 void
 PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
 {
-    if (PySys_Audit("sys.setprofile", NULL) < 0) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (_PyEval_SetProfile(tstate, func, arg) < 0) {
+        /* Log _PySys_Audit() error */
         _PyErr_WriteUnraisableMsg("in PyEval_SetProfile", NULL);
-        return;
+    }
+}
+
+int
+_PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
+{
+    assert(is_tstate_valid(tstate));
+    /* The caller must hold the GIL */
+    assert(PyGILState_Check());
+
+    /* Call _PySys_Audit() in the context of the current thread state,
+       even if tstate is not the current thread state. */
+    PyThreadState *current_tstate = _PyThreadState_GET();
+    if (_PySys_Audit(current_tstate, "sys.settrace", NULL) < 0) {
+        return -1;
     }
 
-    PyThreadState *tstate = _PyThreadState_GET();
-    PyObject *temp = tstate->c_profileobj;
+    struct _ceval_state *ceval2 = &tstate->interp->ceval;
+    PyObject *traceobj = tstate->c_traceobj;
+    ceval2->tracing_possible += (func != NULL) - (tstate->c_tracefunc != NULL);
+
+    tstate->c_tracefunc = NULL;
+    tstate->c_traceobj = NULL;
+    /* Must make sure that profiling is not ignored if 'traceobj' is freed */
+    tstate->use_tracing = (tstate->c_profilefunc != NULL);
+    Py_XDECREF(traceobj);
+
     Py_XINCREF(arg);
-    tstate->c_profilefunc = NULL;
-    tstate->c_profileobj = NULL;
-    /* Must make sure that tracing is not ignored if 'temp' is freed */
-    tstate->use_tracing = tstate->c_tracefunc != NULL;
-    Py_XDECREF(temp);
-    tstate->c_profilefunc = func;
-    tstate->c_profileobj = arg;
+    tstate->c_traceobj = arg;
+    tstate->c_tracefunc = func;
+
     /* Flag that tracing or profiling is turned on */
-    tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
+    tstate->use_tracing = ((func != NULL)
+                           || (tstate->c_profilefunc != NULL));
+
+    return 0;
 }
 
 void
 PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
 {
-    if (PySys_Audit("sys.settrace", NULL) < 0) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (_PyEval_SetTrace(tstate, func, arg) < 0) {
+        /* Log _PySys_Audit() error */
         _PyErr_WriteUnraisableMsg("in PyEval_SetTrace", NULL);
-        return;
     }
-
-    _PyRuntimeState *runtime = &_PyRuntime;
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    PyObject *temp = tstate->c_traceobj;
-    runtime->ceval.tracing_possible += (func != NULL) - (tstate->c_tracefunc != NULL);
-    Py_XINCREF(arg);
-    tstate->c_tracefunc = NULL;
-    tstate->c_traceobj = NULL;
-    /* Must make sure that profiling is not ignored if 'temp' is freed */
-    tstate->use_tracing = tstate->c_profilefunc != NULL;
-    Py_XDECREF(temp);
-    tstate->c_tracefunc = func;
-    tstate->c_traceobj = arg;
-    /* Flag that tracing or profiling is turned on */
-    tstate->use_tracing = ((func != NULL)
-                           || (tstate->c_profilefunc != NULL));
 }
 
+
 void
-_PyEval_SetCoroutineOriginTrackingDepth(int new_depth)
+_PyEval_SetCoroutineOriginTrackingDepth(PyThreadState *tstate, int new_depth)
 {
     assert(new_depth >= 0);
-    PyThreadState *tstate = _PyThreadState_GET();
     tstate->coroutine_origin_tracking_depth = new_depth;
 }
 
@@ -4744,6 +4831,20 @@
     return tstate->coroutine_origin_tracking_depth;
 }
 
+int
+_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+
+    if (_PySys_Audit(tstate, "sys.set_asyncgen_hook_firstiter", NULL) < 0) {
+        return -1;
+    }
+
+    Py_XINCREF(firstiter);
+    Py_XSETREF(tstate->async_gen_firstiter, firstiter);
+    return 0;
+}
+
 PyObject *
 _PyEval_GetAsyncGenFirstiter(void)
 {
@@ -4751,6 +4852,20 @@
     return tstate->async_gen_firstiter;
 }
 
+int
+_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+
+    if (_PySys_Audit(tstate, "sys.set_asyncgen_hook_finalizer", NULL) < 0) {
+        return -1;
+    }
+
+    Py_XINCREF(finalizer);
+    Py_XSETREF(tstate->async_gen_finalizer, finalizer);
+    return 0;
+}
+
 PyObject *
 _PyEval_GetAsyncGenFinalizer(void)
 {
@@ -4758,24 +4873,18 @@
     return tstate->async_gen_finalizer;
 }
 
-static PyFrameObject *
-_PyEval_GetFrame(PyThreadState *tstate)
-{
-    return _PyRuntime.gilstate.getframe(tstate);
-}
-
 PyFrameObject *
 PyEval_GetFrame(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    return _PyEval_GetFrame(tstate);
+    return tstate->frame;
 }
 
 PyObject *
 PyEval_GetBuiltins(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+    PyFrameObject *current_frame = tstate->frame;
     if (current_frame == NULL)
         return tstate->interp->builtins;
     else
@@ -4801,7 +4910,7 @@
 PyEval_GetLocals(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+    PyFrameObject *current_frame = tstate->frame;
     if (current_frame == NULL) {
         _PyErr_SetString(tstate, PyExc_SystemError, "frame does not exist");
         return NULL;
@@ -4819,7 +4928,7 @@
 PyEval_GetGlobals(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+    PyFrameObject *current_frame = tstate->frame;
     if (current_frame == NULL) {
         return NULL;
     }
@@ -4832,7 +4941,7 @@
 PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+    PyFrameObject *current_frame = tstate->frame;
     int result = cf->cf_flags != 0;
 
     if (current_frame != NULL) {
@@ -4863,7 +4972,7 @@
     else if (PyCFunction_Check(func))
         return ((PyCFunctionObject*)func)->m_ml->ml_name;
     else
-        return func->ob_type->tp_name;
+        return Py_TYPE(func)->tp_name;
 }
 
 const char *
@@ -4918,11 +5027,11 @@
                     PyObject *kwnames)
 {
     PyObject *x;
-    if (PyCFunction_Check(func)) {
-        C_TRACE(x, _PyObject_Vectorcall(func, args, nargs, kwnames));
+    if (PyCFunction_CheckExact(func) || PyCMethod_CheckExact(func)) {
+        C_TRACE(x, PyObject_Vectorcall(func, args, nargs, kwnames));
         return x;
     }
-    else if (Py_TYPE(func) == &PyMethodDescr_Type && nargs > 0) {
+    else if (Py_IS_TYPE(func, &PyMethodDescr_Type) && nargs > 0) {
         /* We need to create a temporary bound method as argument
            for profiling.
 
@@ -4935,13 +5044,13 @@
         if (func == NULL) {
             return NULL;
         }
-        C_TRACE(x, _PyObject_Vectorcall(func,
+        C_TRACE(x, PyObject_Vectorcall(func,
                                         args+1, nargs-1,
                                         kwnames));
         Py_DECREF(func);
         return x;
     }
-    return _PyObject_Vectorcall(func, args, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+    return PyObject_Vectorcall(func, args, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
 }
 
 /* Issue #29227: Inline call_function() into _PyEval_EvalFrameDefault()
@@ -4960,7 +5069,7 @@
         x = trace_call_function(tstate, func, stack, nargs, kwnames);
     }
     else {
-        x = _PyObject_Vectorcall(func, stack, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+        x = PyObject_Vectorcall(func, stack, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
     }
 
     assert((x != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
@@ -4979,11 +5088,11 @@
 {
     PyObject *result;
 
-    if (PyCFunction_Check(func)) {
-        C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
+    if (PyCFunction_CheckExact(func) || PyCMethod_CheckExact(func)) {
+        C_TRACE(result, PyObject_Call(func, callargs, kwdict));
         return result;
     }
-    else if (Py_TYPE(func) == &PyMethodDescr_Type) {
+    else if (Py_IS_TYPE(func, &PyMethodDescr_Type)) {
         Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
         if (nargs > 0 && tstate->use_tracing) {
             /* We need to create a temporary bound method as argument
@@ -4999,10 +5108,11 @@
                 return NULL;
             }
 
-            C_TRACE(result, _PyObject_FastCallDict(func,
-                                                   &_PyTuple_ITEMS(callargs)[1],
-                                                   nargs - 1,
-                                                   kwdict));
+            C_TRACE(result, _PyObject_FastCallDictTstate(
+                                    tstate, func,
+                                    &_PyTuple_ITEMS(callargs)[1],
+                                    nargs - 1,
+                                    kwdict));
             Py_DECREF(func);
             return result;
         }
@@ -5022,7 +5132,7 @@
     PyThreadState *tstate = _PyThreadState_GET();
     if (v != Py_None) {
         Py_ssize_t x;
-        if (PyIndex_Check(v)) {
+        if (_PyIndex_Check(v)) {
             x = PyNumber_AsSsize_t(v, NULL);
             if (x == -1 && _PyErr_Occurred(tstate))
                 return 0;
@@ -5043,7 +5153,7 @@
 {
     PyThreadState *tstate = _PyThreadState_GET();
     Py_ssize_t x;
-    if (PyIndex_Check(v)) {
+    if (_PyIndex_Check(v)) {
         x = PyNumber_AsSsize_t(v, NULL);
         if (x == -1 && _PyErr_Occurred(tstate))
             return 0;
@@ -5058,62 +5168,6 @@
     return 1;
 }
 
-
-#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
-                         "BaseException is not allowed"
-
-static PyObject *
-cmp_outcome(PyThreadState *tstate, int op, PyObject *v, PyObject *w)
-{
-    int res = 0;
-    switch (op) {
-    case PyCmp_IS:
-        res = (v == w);
-        break;
-    case PyCmp_IS_NOT:
-        res = (v != w);
-        break;
-    case PyCmp_IN:
-        res = PySequence_Contains(w, v);
-        if (res < 0)
-            return NULL;
-        break;
-    case PyCmp_NOT_IN:
-        res = PySequence_Contains(w, v);
-        if (res < 0)
-            return NULL;
-        res = !res;
-        break;
-    case PyCmp_EXC_MATCH:
-        if (PyTuple_Check(w)) {
-            Py_ssize_t i, length;
-            length = PyTuple_Size(w);
-            for (i = 0; i < length; i += 1) {
-                PyObject *exc = PyTuple_GET_ITEM(w, i);
-                if (!PyExceptionClass_Check(exc)) {
-                    _PyErr_SetString(tstate, PyExc_TypeError,
-                                     CANNOT_CATCH_MSG);
-                    return NULL;
-                }
-            }
-        }
-        else {
-            if (!PyExceptionClass_Check(w)) {
-                _PyErr_SetString(tstate, PyExc_TypeError,
-                                 CANNOT_CATCH_MSG);
-                return NULL;
-            }
-        }
-        res = PyErr_GivenExceptionMatches(v, w);
-        break;
-    default:
-        return PyObject_RichCompare(v, w, op);
-    }
-    v = res ? Py_True : Py_False;
-    Py_INCREF(v);
-    return v;
-}
-
 static PyObject *
 import_name(PyThreadState *tstate, PyFrameObject *f,
             PyObject *name, PyObject *fromlist, PyObject *level)
@@ -5161,7 +5215,6 @@
 import_from(PyThreadState *tstate, PyObject *v, PyObject *name)
 {
     PyObject *x;
-    _Py_IDENTIFIER(__name__);
     PyObject *fullmodname, *pkgname, *pkgpath, *pkgname_or_unknown, *errmsg;
 
     if (_PyObject_LookupAttr(v, name, &x) != 0) {
@@ -5237,7 +5290,6 @@
 {
     _Py_IDENTIFIER(__all__);
     _Py_IDENTIFIER(__dict__);
-    _Py_IDENTIFIER(__name__);
     PyObject *all, *dict, *name, *value;
     int skip_leading_underscores = 0;
     int pos, err;
@@ -5327,13 +5379,18 @@
 static int
 check_args_iterable(PyThreadState *tstate, PyObject *func, PyObject *args)
 {
-    if (args->ob_type->tp_iter == NULL && !PySequence_Check(args)) {
-        _PyErr_Format(tstate, PyExc_TypeError,
-                      "%.200s%.200s argument after * "
-                      "must be an iterable, not %.200s",
-                      PyEval_GetFuncName(func),
-                      PyEval_GetFuncDesc(func),
-                      args->ob_type->tp_name);
+    if (Py_TYPE(args)->tp_iter == NULL && !PySequence_Check(args)) {
+        /* check_args_iterable() may be called with a live exception:
+         * clear it to prevent calling _PyObject_FunctionStr() with an
+         * exception set. */
+        _PyErr_Clear(tstate);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            _PyErr_Format(tstate, PyExc_TypeError,
+                          "%U argument after * must be an iterable, not %.200s",
+                          funcstr, Py_TYPE(args)->tp_name);
+            Py_DECREF(funcstr);
+        }
         return -1;
     }
     return 0;
@@ -5349,31 +5406,29 @@
      * is not a mapping.
      */
     if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
-        _PyErr_Format(tstate, PyExc_TypeError,
-                      "%.200s%.200s argument after ** "
-                      "must be a mapping, not %.200s",
-                      PyEval_GetFuncName(func),
-                      PyEval_GetFuncDesc(func),
-                      kwargs->ob_type->tp_name);
+        _PyErr_Clear(tstate);
+        PyObject *funcstr = _PyObject_FunctionStr(func);
+        if (funcstr != NULL) {
+            _PyErr_Format(
+                tstate, PyExc_TypeError,
+                "%U argument after ** must be a mapping, not %.200s",
+                funcstr, Py_TYPE(kwargs)->tp_name);
+            Py_DECREF(funcstr);
+        }
     }
     else if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
         PyObject *exc, *val, *tb;
         _PyErr_Fetch(tstate, &exc, &val, &tb);
         if (val && PyTuple_Check(val) && PyTuple_GET_SIZE(val) == 1) {
-            PyObject *key = PyTuple_GET_ITEM(val, 0);
-            if (!PyUnicode_Check(key)) {
-                _PyErr_Format(tstate, PyExc_TypeError,
-                              "%.200s%.200s keywords must be strings",
-                              PyEval_GetFuncName(func),
-                              PyEval_GetFuncDesc(func));
-            }
-            else {
-                _PyErr_Format(tstate, PyExc_TypeError,
-                              "%.200s%.200s got multiple "
-                              "values for keyword argument '%U'",
-                              PyEval_GetFuncName(func),
-                              PyEval_GetFuncDesc(func),
-                              key);
+            _PyErr_Clear(tstate);
+            PyObject *funcstr = _PyObject_FunctionStr(func);
+            if (funcstr != NULL) {
+                PyObject *key = PyTuple_GET_ITEM(val, 0);
+                _PyErr_Format(
+                    tstate, PyExc_TypeError,
+                    "%U got multiple values for keyword argument '%S'",
+                    funcstr, key);
+                Py_DECREF(funcstr);
             }
             Py_XDECREF(exc);
             Py_XDECREF(val);
@@ -5424,7 +5479,7 @@
 }
 
 static void
-format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevopcode)
+format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevprevopcode, int prevopcode)
 {
     if (type->tp_as_async == NULL || type->tp_as_async->am_await == NULL) {
         if (prevopcode == BEFORE_ASYNC_WITH) {
@@ -5433,7 +5488,7 @@
                           "that does not implement __await__: %.100s",
                           type->tp_name);
         }
-        else if (prevopcode == WITH_CLEANUP_START) {
+        else if (prevopcode == WITH_EXCEPT_START || (prevopcode == CALL_FUNCTION && prevprevopcode == DUP_TOP)) {
             _PyErr_Format(tstate, PyExc_TypeError,
                           "'async with' received an object from __aexit__ "
                           "that does not implement __await__: %.100s",
@@ -5545,7 +5600,7 @@
 Py_ssize_t
 _PyEval_RequestCodeExtraIndex(freefunc free)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     Py_ssize_t new_index;
 
     if (interp->co_extra_user_count == MAX_CO_EXTRA_USERS - 1) {
@@ -5563,9 +5618,10 @@
     const char *funcname;
     int lineno;
 
-    filename = PyUnicode_AsUTF8(f->f_code->co_filename);
-    funcname = PyUnicode_AsUTF8(f->f_code->co_name);
-    lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
+    PyCodeObject *code = f->f_code;
+    filename = PyUnicode_AsUTF8(code->co_filename);
+    funcname = PyUnicode_AsUTF8(code->co_name);
+    lineno = PyCode_Addr2Line(code, f->f_lasti);
 
     PyDTrace_FUNCTION_ENTRY(filename, funcname, lineno);
 }
@@ -5577,9 +5633,10 @@
     const char *funcname;
     int lineno;
 
-    filename = PyUnicode_AsUTF8(f->f_code->co_filename);
-    funcname = PyUnicode_AsUTF8(f->f_code->co_name);
-    lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
+    PyCodeObject *code = f->f_code;
+    filename = PyUnicode_AsUTF8(code->co_filename);
+    funcname = PyUnicode_AsUTF8(code->co_name);
+    lineno = PyCode_Addr2Line(code, f->f_lasti);
 
     PyDTrace_FUNCTION_RETURN(filename, funcname, lineno);
 }
@@ -5617,3 +5674,21 @@
     }
     *instr_prev = frame->f_lasti;
 }
+
+
+/* Implement Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() as functions
+   for the limited API. */
+
+#undef Py_EnterRecursiveCall
+
+int Py_EnterRecursiveCall(const char *where)
+{
+    return _Py_EnterRecursiveCall_inline(where);
+}
+
+#undef Py_LeaveRecursiveCall
+
+void Py_LeaveRecursiveCall(void)
+{
+    _Py_LeaveRecursiveCall_inline();
+}
diff --git a/Python/ceval_gil.h b/Python/ceval_gil.h
index 34d48c9..3510675 100644
--- a/Python/ceval_gil.h
+++ b/Python/ceval_gil.h
@@ -141,7 +141,8 @@
 }
 
 static void
-drop_gil(struct _ceval_runtime_state *ceval, PyThreadState *tstate)
+drop_gil(struct _ceval_runtime_state *ceval, struct _ceval_state *ceval2,
+         PyThreadState *tstate)
 {
     struct _gil_runtime_state *gil = &ceval->gil;
     if (!_Py_atomic_load_relaxed(&gil->locked)) {
@@ -163,12 +164,13 @@
     MUTEX_UNLOCK(gil->mutex);
 
 #ifdef FORCE_SWITCHING
-    if (_Py_atomic_load_relaxed(&ceval->gil_drop_request) && tstate != NULL) {
+    if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request) && tstate != NULL) {
         MUTEX_LOCK(gil->switch_mutex);
         /* Not switched yet => wait */
         if (((PyThreadState*)_Py_atomic_load_relaxed(&gil->last_holder)) == tstate)
         {
-            RESET_GIL_DROP_REQUEST(ceval);
+            assert(is_tstate_valid(tstate));
+            RESET_GIL_DROP_REQUEST(tstate->interp);
             /* NOTE: if COND_WAIT does not atomically start waiting when
                releasing the mutex, another thread can run through, take
                the GIL and drop it again, and reset the condition
@@ -180,15 +182,57 @@
 #endif
 }
 
-static void
-take_gil(struct _ceval_runtime_state *ceval, PyThreadState *tstate)
+
+/* Check if a Python thread must exit immediately, rather than taking the GIL
+   if Py_Finalize() has been called.
+
+   When this function is called by a daemon thread after Py_Finalize() has been
+   called, the GIL does no longer exist.
+
+   tstate must be non-NULL. */
+static inline int
+tstate_must_exit(PyThreadState *tstate)
 {
-    if (tstate == NULL) {
-        Py_FatalError("take_gil: NULL tstate");
+    /* bpo-39877: Access _PyRuntime directly rather than using
+       tstate->interp->runtime to support calls from Python daemon threads.
+       After Py_Finalize() has been called, tstate can be a dangling pointer:
+       point to PyThreadState freed memory. */
+    PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime);
+    return (finalizing != NULL && finalizing != tstate);
+}
+
+
+/* Take the GIL.
+
+   The function saves errno at entry and restores its value at exit.
+
+   tstate must be non-NULL. */
+static void
+take_gil(PyThreadState *tstate)
+{
+    int err = errno;
+
+    assert(tstate != NULL);
+
+    if (tstate_must_exit(tstate)) {
+        /* bpo-39877: If Py_Finalize() has been called and tstate is not the
+           thread which called Py_Finalize(), exit immediately the thread.
+
+           This code path can be reached by a daemon thread after Py_Finalize()
+           completes. In this case, tstate is a dangling pointer: points to
+           PyThreadState freed memory. */
+        PyThread_exit_thread();
     }
 
+    assert(is_tstate_valid(tstate));
+    PyInterpreterState *interp = tstate->interp;
+    struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+    struct _ceval_state *ceval2 = &interp->ceval;
     struct _gil_runtime_state *gil = &ceval->gil;
-    int err = errno;
+
+    /* Check that _PyEval_InitThreads() was called to create the lock */
+    assert(gil_created(gil));
+
     MUTEX_LOCK(gil->mutex);
 
     if (!_Py_atomic_load_relaxed(&gil->locked)) {
@@ -196,23 +240,28 @@
     }
 
     while (_Py_atomic_load_relaxed(&gil->locked)) {
-        int timed_out = 0;
-        unsigned long saved_switchnum;
-
-        saved_switchnum = gil->switch_number;
-
+        unsigned long saved_switchnum = gil->switch_number;
 
         unsigned long interval = (gil->interval >= 1 ? gil->interval : 1);
+        int timed_out = 0;
         COND_TIMED_WAIT(gil->cond, gil->mutex, interval, timed_out);
+
         /* If we timed out and no switch occurred in the meantime, it is time
            to ask the GIL-holding thread to drop it. */
         if (timed_out &&
             _Py_atomic_load_relaxed(&gil->locked) &&
             gil->switch_number == saved_switchnum)
         {
-            SET_GIL_DROP_REQUEST(ceval);
+            if (tstate_must_exit(tstate)) {
+                MUTEX_UNLOCK(gil->mutex);
+                PyThread_exit_thread();
+            }
+            assert(is_tstate_valid(tstate));
+
+            SET_GIL_DROP_REQUEST(interp);
         }
     }
+
 _ready:
 #ifdef FORCE_SWITCHING
     /* This mutex must be taken before modifying gil->last_holder:
@@ -232,23 +281,51 @@
     COND_SIGNAL(gil->switch_cond);
     MUTEX_UNLOCK(gil->switch_mutex);
 #endif
-    if (_Py_atomic_load_relaxed(&ceval->gil_drop_request)) {
-        RESET_GIL_DROP_REQUEST(ceval);
+
+    if (tstate_must_exit(tstate)) {
+        /* bpo-36475: If Py_Finalize() has been called and tstate is not
+           the thread which called Py_Finalize(), exit immediately the
+           thread.
+
+           This code path can be reached by a daemon thread which was waiting
+           in take_gil() while the main thread called
+           wait_for_thread_shutdown() from Py_Finalize(). */
+        MUTEX_UNLOCK(gil->mutex);
+        drop_gil(ceval, ceval2, tstate);
+        PyThread_exit_thread();
     }
+    assert(is_tstate_valid(tstate));
+
+    if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request)) {
+        RESET_GIL_DROP_REQUEST(interp);
+    }
+    else {
+        /* bpo-40010: eval_breaker should be recomputed to be set to 1 if there
+           is a pending signal: signal received by another thread which cannot
+           handle signals.
+
+           Note: RESET_GIL_DROP_REQUEST() calls COMPUTE_EVAL_BREAKER(). */
+        COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+    }
+
+    /* Don't access tstate if the thread must exit */
     if (tstate->async_exc != NULL) {
-        _PyEval_SignalAsyncExc(ceval);
+        _PyEval_SignalAsyncExc(tstate);
     }
 
     MUTEX_UNLOCK(gil->mutex);
+
     errno = err;
 }
 
 void _PyEval_SetSwitchInterval(unsigned long microseconds)
 {
-    _PyRuntime.ceval.gil.interval = microseconds;
+    struct _gil_runtime_state *gil = &_PyRuntime.ceval.gil;
+    gil->interval = microseconds;
 }
 
 unsigned long _PyEval_GetSwitchInterval()
 {
-    return _PyRuntime.ceval.gil.interval;
+    struct _gil_runtime_state *gil = &_PyRuntime.ceval.gil;
+    return gil->interval;
 }
diff --git a/Python/clinic/sysmodule.c.h b/Python/clinic/sysmodule.c.h
index d2d1503..4615eba 100644
--- a/Python/clinic/sysmodule.c.h
+++ b/Python/clinic/sysmodule.c.h
@@ -281,62 +281,6 @@
     return sys_getprofile_impl(module);
 }
 
-PyDoc_STRVAR(sys_setcheckinterval__doc__,
-"setcheckinterval($module, n, /)\n"
-"--\n"
-"\n"
-"Set the async event check interval to n instructions.\n"
-"\n"
-"This tells the Python interpreter to check for asynchronous events\n"
-"every n instructions.\n"
-"\n"
-"This also affects how often thread switches occur.");
-
-#define SYS_SETCHECKINTERVAL_METHODDEF    \
-    {"setcheckinterval", (PyCFunction)sys_setcheckinterval, METH_O, sys_setcheckinterval__doc__},
-
-static PyObject *
-sys_setcheckinterval_impl(PyObject *module, int n);
-
-static PyObject *
-sys_setcheckinterval(PyObject *module, PyObject *arg)
-{
-    PyObject *return_value = NULL;
-    int n;
-
-    if (PyFloat_Check(arg)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "integer argument expected, got float" );
-        goto exit;
-    }
-    n = _PyLong_AsInt(arg);
-    if (n == -1 && PyErr_Occurred()) {
-        goto exit;
-    }
-    return_value = sys_setcheckinterval_impl(module, n);
-
-exit:
-    return return_value;
-}
-
-PyDoc_STRVAR(sys_getcheckinterval__doc__,
-"getcheckinterval($module, /)\n"
-"--\n"
-"\n"
-"Return the current check interval; see sys.setcheckinterval().");
-
-#define SYS_GETCHECKINTERVAL_METHODDEF    \
-    {"getcheckinterval", (PyCFunction)sys_getcheckinterval, METH_NOARGS, sys_getcheckinterval__doc__},
-
-static PyObject *
-sys_getcheckinterval_impl(PyObject *module);
-
-static PyObject *
-sys_getcheckinterval(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
-    return sys_getcheckinterval_impl(module);
-}
-
 PyDoc_STRVAR(sys_setswitchinterval__doc__,
 "setswitchinterval($module, interval, /)\n"
 "--\n"
@@ -814,27 +758,6 @@
     return return_value;
 }
 
-#if defined(COUNT_ALLOCS)
-
-PyDoc_STRVAR(sys_getcounts__doc__,
-"getcounts($module, /)\n"
-"--\n"
-"\n");
-
-#define SYS_GETCOUNTS_METHODDEF    \
-    {"getcounts", (PyCFunction)sys_getcounts, METH_NOARGS, sys_getcounts__doc__},
-
-static PyObject *
-sys_getcounts_impl(PyObject *module);
-
-static PyObject *
-sys_getcounts(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
-    return sys_getcounts_impl(module);
-}
-
-#endif /* defined(COUNT_ALLOCS) */
-
 PyDoc_STRVAR(sys__getframe__doc__,
 "_getframe($module, depth=0, /)\n"
 "--\n"
@@ -941,43 +864,6 @@
     return return_value;
 }
 
-PyDoc_STRVAR(sys_callstats__doc__,
-"callstats($module, /)\n"
-"--\n"
-"\n"
-"Return a tuple of function call statistics.\n"
-"\n"
-"A tuple is returned only if CALL_PROFILE was defined when Python was\n"
-"built.  Otherwise, this returns None.\n"
-"\n"
-"When enabled, this function returns detailed, implementation-specific\n"
-"details about the number of function calls executed. The return value\n"
-"is a 11-tuple where the entries in the tuple are counts of:\n"
-"0. all function calls\n"
-"1. calls to PyFunction_Type objects\n"
-"2. PyFunction calls that do not create an argument tuple\n"
-"3. PyFunction calls that do not create an argument tuple\n"
-"   and bypass PyEval_EvalCodeEx()\n"
-"4. PyMethod calls\n"
-"5. PyMethod calls on bound methods\n"
-"6. PyType calls\n"
-"7. PyCFunction calls\n"
-"8. generator calls\n"
-"9. All other calls\n"
-"10. Number of stack pops performed by call_function()");
-
-#define SYS_CALLSTATS_METHODDEF    \
-    {"callstats", (PyCFunction)sys_callstats, METH_NOARGS, sys_callstats__doc__},
-
-static PyObject *
-sys_callstats_impl(PyObject *module);
-
-static PyObject *
-sys_callstats(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
-    return sys_callstats_impl(module);
-}
-
 PyDoc_STRVAR(sys__debugmallocstats__doc__,
 "_debugmallocstats($module, /)\n"
 "--\n"
@@ -1081,11 +967,7 @@
     #define SYS_GETTOTALREFCOUNT_METHODDEF
 #endif /* !defined(SYS_GETTOTALREFCOUNT_METHODDEF) */
 
-#ifndef SYS_GETCOUNTS_METHODDEF
-    #define SYS_GETCOUNTS_METHODDEF
-#endif /* !defined(SYS_GETCOUNTS_METHODDEF) */
-
 #ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
     #define SYS_GETANDROIDAPILEVEL_METHODDEF
 #endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
-/*[clinic end generated code: output=273f9cec8bfcab91 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=39eb34a01fb9a919 input=a9049054013a1b77]*/
diff --git a/Python/codecs.c b/Python/codecs.c
index 4bd28ec..0f18c27 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -9,7 +9,8 @@
    ------------------------------------------------------------------------ */
 
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_interp.h"        // PyInterpreterState.codec_search_path
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
 #include "ucnhash.h"
 #include <ctype.h>
 
@@ -32,7 +33,7 @@
 
 int PyCodec_Register(PyObject *search_function)
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
         goto onError;
     if (search_function == NULL) {
@@ -49,15 +50,16 @@
     return -1;
 }
 
-/* Convert a string to a normalized Python string: all characters are
-   converted to lower case, spaces are replaced with underscores. */
+extern int _Py_normalize_encoding(const char *, char *, size_t);
+
+/* Convert a string to a normalized Python string(decoded from UTF-8): all characters are
+   converted to lower case, spaces and hyphens are replaced with underscores. */
 
 static
 PyObject *normalizestring(const char *string)
 {
-    size_t i;
     size_t len = strlen(string);
-    char *p;
+    char *encoding;
     PyObject *v;
 
     if (len > PY_SSIZE_T_MAX) {
@@ -65,20 +67,19 @@
         return NULL;
     }
 
-    p = PyMem_Malloc(len + 1);
-    if (p == NULL)
+    encoding = PyMem_Malloc(len + 1);
+    if (encoding == NULL)
         return PyErr_NoMemory();
-    for (i = 0; i < len; i++) {
-        char ch = string[i];
-        if (ch == ' ')
-            ch = '-';
-        else
-            ch = Py_TOLOWER(Py_CHARMASK(ch));
-        p[i] = ch;
+
+    if (!_Py_normalize_encoding(string, encoding, len + 1))
+    {
+        PyErr_SetString(PyExc_RuntimeError, "_Py_normalize_encoding() failed");
+        PyMem_Free(encoding);
+        return NULL;
     }
-    p[i] = '\0';
-    v = PyUnicode_FromString(p);
-    PyMem_Free(p);
+
+    v = PyUnicode_FromString(encoding);
+    PyMem_Free(encoding);
     return v;
 }
 
@@ -99,47 +100,38 @@
 
 PyObject *_PyCodec_Lookup(const char *encoding)
 {
-    PyObject *result, *args = NULL, *v;
-    Py_ssize_t i, len;
-
     if (encoding == NULL) {
         PyErr_BadArgument();
-        goto onError;
+        return NULL;
     }
 
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
-        goto onError;
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) {
+        return NULL;
+    }
 
     /* Convert the encoding to a normalized Python string: all
        characters are converted to lower case, spaces and hyphens are
        replaced with underscores. */
-    v = normalizestring(encoding);
-    if (v == NULL)
-        goto onError;
+    PyObject *v = normalizestring(encoding);
+    if (v == NULL) {
+        return NULL;
+    }
     PyUnicode_InternInPlace(&v);
 
     /* First, try to lookup the name in the registry dictionary */
-    result = PyDict_GetItemWithError(interp->codec_search_cache, v);
+    PyObject *result = PyDict_GetItemWithError(interp->codec_search_cache, v);
     if (result != NULL) {
         Py_INCREF(result);
         Py_DECREF(v);
         return result;
     }
     else if (PyErr_Occurred()) {
-        Py_DECREF(v);
-        return NULL;
+        goto onError;
     }
 
     /* Next, scan the search functions in order of registration */
-    args = PyTuple_New(1);
-    if (args == NULL) {
-        Py_DECREF(v);
-        return NULL;
-    }
-    PyTuple_SET_ITEM(args,0,v);
-
-    len = PyList_Size(interp->codec_search_path);
+    const Py_ssize_t len = PyList_Size(interp->codec_search_path);
     if (len < 0)
         goto onError;
     if (len == 0) {
@@ -149,13 +141,14 @@
         goto onError;
     }
 
+    Py_ssize_t i;
     for (i = 0; i < len; i++) {
         PyObject *func;
 
         func = PyList_GetItem(interp->codec_search_path, i);
         if (func == NULL)
             goto onError;
-        result = PyEval_CallObject(func, args);
+        result = PyObject_CallOneArg(func, v);
         if (result == NULL)
             goto onError;
         if (result == Py_None) {
@@ -182,11 +175,11 @@
         Py_DECREF(result);
         goto onError;
     }
-    Py_DECREF(args);
+    Py_DECREF(v);
     return result;
 
  onError:
-    Py_XDECREF(args);
+    Py_DECREF(v);
     return NULL;
 }
 
@@ -195,7 +188,7 @@
     PyObject *v;
     int result;
 
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     if (interp->codec_search_path == NULL) {
         return -1;
     }
@@ -325,7 +318,7 @@
     if (errors != NULL)
         streamcodec = PyObject_CallFunction(codeccls, "Os", stream, errors);
     else
-        streamcodec = PyObject_CallFunctionObjArgs(codeccls, stream, NULL);
+        streamcodec = PyObject_CallOneArg(codeccls, stream);
     Py_DECREF(codecs);
     return streamcodec;
 }
@@ -424,7 +417,7 @@
     if (args == NULL)
         goto onError;
 
-    result = PyEval_CallObject(encoder, args);
+    result = PyObject_Call(encoder, args, NULL);
     if (result == NULL) {
         wrap_codec_error("encoding", encoding);
         goto onError;
@@ -470,7 +463,7 @@
     if (args == NULL)
         goto onError;
 
-    result = PyEval_CallObject(decoder,args);
+    result = PyObject_Call(decoder, args, NULL);
     if (result == NULL) {
         wrap_codec_error("decoding", encoding);
         goto onError;
@@ -628,7 +621,7 @@
    Return 0 on success, -1 on error */
 int PyCodec_RegisterError(const char *name, PyObject *error)
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
         return -1;
     if (!PyCallable_Check(error)) {
@@ -646,7 +639,7 @@
 {
     PyObject *handler = NULL;
 
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
         return NULL;
 
@@ -666,7 +659,7 @@
 {
     PyErr_Format(PyExc_TypeError,
                  "don't know how to handle %.200s in error callback",
-                 exc->ob_type->tp_name);
+                 Py_TYPE(exc)->tp_name);
 }
 
 PyObject *PyCodec_StrictErrors(PyObject *exc)
@@ -709,8 +702,7 @@
 
     if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeEncodeError)) {
         PyObject *res;
-        int kind;
-        void *data;
+        Py_UCS1 *outp;
         if (PyUnicodeEncodeError_GetStart(exc, &start))
             return NULL;
         if (PyUnicodeEncodeError_GetEnd(exc, &end))
@@ -719,10 +711,10 @@
         res = PyUnicode_New(len, '?');
         if (res == NULL)
             return NULL;
-        kind = PyUnicode_KIND(res);
-        data = PyUnicode_DATA(res);
+        assert(PyUnicode_KIND(res) == PyUnicode_1BYTE_KIND);
+        outp = PyUnicode_1BYTE_DATA(res);
         for (i = 0; i < len; ++i)
-            PyUnicode_WRITE(kind, data, i, '?');
+            outp[i] = '?';
         assert(_PyUnicode_CheckConsistency(res, 1));
         return Py_BuildValue("(Nn)", res, end);
     }
@@ -735,8 +727,7 @@
     }
     else if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeTranslateError)) {
         PyObject *res;
-        int kind;
-        void *data;
+        Py_UCS2 *outp;
         if (PyUnicodeTranslateError_GetStart(exc, &start))
             return NULL;
         if (PyUnicodeTranslateError_GetEnd(exc, &end))
@@ -745,10 +736,10 @@
         res = PyUnicode_New(len, Py_UNICODE_REPLACEMENT_CHARACTER);
         if (res == NULL)
             return NULL;
-        kind = PyUnicode_KIND(res);
-        data = PyUnicode_DATA(res);
-        for (i=0; i < len; i++)
-            PyUnicode_WRITE(kind, data, i, Py_UNICODE_REPLACEMENT_CHARACTER);
+        assert(PyUnicode_KIND(res) == PyUnicode_2BYTE_KIND);
+        outp = PyUnicode_2BYTE_DATA(res);
+        for (i = 0; i < len; i++)
+            outp[i] = Py_UNICODE_REPLACEMENT_CHARACTER;
         assert(_PyUnicode_CheckConsistency(res, 1));
         return Py_BuildValue("(Nn)", res, end);
     }
@@ -767,7 +758,7 @@
         Py_ssize_t start;
         Py_ssize_t end;
         PyObject *res;
-        unsigned char *outp;
+        Py_UCS1 *outp;
         Py_ssize_t ressize;
         Py_UCS4 ch;
         if (PyUnicodeEncodeError_GetStart(exc, &start))
@@ -863,7 +854,7 @@
     Py_ssize_t start;
     Py_ssize_t end;
     PyObject *res;
-    unsigned char *outp;
+    Py_UCS1 *outp;
     int ressize;
     Py_UCS4 c;
 
@@ -974,7 +965,7 @@
         Py_ssize_t start;
         Py_ssize_t end;
         PyObject *res;
-        unsigned char *outp;
+        Py_UCS1 *outp;
         Py_ssize_t ressize;
         int replsize;
         Py_UCS4 c;
@@ -1500,34 +1491,39 @@
         }
     };
 
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     PyObject *mod;
-    unsigned i;
 
     if (interp->codec_search_path != NULL)
         return 0;
 
     interp->codec_search_path = PyList_New(0);
-    interp->codec_search_cache = PyDict_New();
-    interp->codec_error_registry = PyDict_New();
-
-    if (interp->codec_error_registry) {
-        for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
-            PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
-            int res;
-            if (!func)
-                Py_FatalError("can't initialize codec error registry");
-            res = PyCodec_RegisterError(methods[i].name, func);
-            Py_DECREF(func);
-            if (res)
-                Py_FatalError("can't initialize codec error registry");
-        }
+    if (interp->codec_search_path == NULL) {
+        return -1;
     }
 
-    if (interp->codec_search_path == NULL ||
-        interp->codec_search_cache == NULL ||
-        interp->codec_error_registry == NULL)
-        Py_FatalError("can't initialize codec registry");
+    interp->codec_search_cache = PyDict_New();
+    if (interp->codec_search_cache == NULL) {
+        return -1;
+    }
+
+    interp->codec_error_registry = PyDict_New();
+    if (interp->codec_error_registry == NULL) {
+        return -1;
+    }
+
+    for (size_t i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
+        PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
+        if (!func) {
+            return -1;
+        }
+
+        int res = PyCodec_RegisterError(methods[i].name, func);
+        Py_DECREF(func);
+        if (res) {
+            return -1;
+        }
+    }
 
     mod = PyImport_ImportModuleNoBlock("encodings");
     if (mod == NULL) {
diff --git a/Python/compile.c b/Python/compile.c
index 3259e8a..722d52d 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -23,7 +23,6 @@
 
 #include "Python.h"
 
-#include "pycore_pystate.h"   /* _PyInterpreterState_GET_UNSAFE() */
 #include "Python-ast.h"
 #include "ast.h"
 #include "code.h"
@@ -85,14 +84,16 @@
 compiler IR.
 */
 
-enum fblocktype { WHILE_LOOP, FOR_LOOP, EXCEPT, FINALLY_TRY, FINALLY_TRY2, FINALLY_END,
-                  WITH, ASYNC_WITH, HANDLER_CLEANUP };
+enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END,
+                  WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE, EXCEPTION_HANDLER };
 
 struct fblockinfo {
     enum fblocktype fb_type;
     basicblock *fb_block;
     /* (optional) type-specific exit or cleanup block */
     basicblock *fb_exit;
+    /* (optional) additional information required for unwinding */
+    void *fb_datum;
 };
 
 enum {
@@ -140,8 +141,6 @@
     int u_firstlineno; /* the first lineno of the block */
     int u_lineno;          /* the lineno for the current stmt */
     int u_col_offset;      /* the offset of the current stmt */
-    int u_lineno_set;  /* boolean to indicate whether instr
-                          has been generated with current lineno */
 };
 
 /* This struct captures the global state of a compilation.
@@ -181,7 +180,7 @@
 static int compiler_enter_scope(struct compiler *, identifier, int, void *, int);
 static void compiler_free(struct compiler *);
 static basicblock *compiler_new_block(struct compiler *);
-static int compiler_next_instr(struct compiler *, basicblock *);
+static int compiler_next_instr(basicblock *);
 static int compiler_addop(struct compiler *, int);
 static int compiler_addop_i(struct compiler *, int, Py_ssize_t);
 static int compiler_addop_j(struct compiler *, int, basicblock *, int);
@@ -195,10 +194,11 @@
 static int compiler_visit_expr(struct compiler *, expr_ty);
 static int compiler_augassign(struct compiler *, stmt_ty);
 static int compiler_annassign(struct compiler *, stmt_ty);
-static int compiler_visit_slice(struct compiler *, slice_ty,
-                                expr_context_ty);
+static int compiler_subscript(struct compiler *, expr_ty);
+static int compiler_slice(struct compiler *, expr_ty);
 
-static int inplace_binop(struct compiler *, operator_ty);
+static int inplace_binop(operator_ty);
+static int are_all_items_const(asdl_seq *, Py_ssize_t, Py_ssize_t);
 static int expr_constant(expr_ty);
 
 static int compiler_with(struct compiler *, stmt_ty, int);
@@ -213,11 +213,13 @@
 static int compiler_sync_comprehension_generator(
                                       struct compiler *c,
                                       asdl_seq *generators, int gen_index,
+                                      int depth,
                                       expr_ty elt, expr_ty val, int type);
 
 static int compiler_async_comprehension_generator(
                                       struct compiler *c,
                                       asdl_seq *generators, int gen_index,
+                                      int depth,
                                       expr_ty elt, expr_ty val, int type);
 
 static PyCodeObject *assemble(struct compiler *, int addNone);
@@ -320,7 +322,6 @@
     PyCodeObject *co = NULL;
     PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
     int merged;
-    PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
 
     if (!__doc__) {
         __doc__ = PyUnicode_InternFromString("__doc__");
@@ -347,11 +348,15 @@
     c.c_future->ff_features = merged;
     flags->cf_flags = merged;
     c.c_flags = flags;
-    c.c_optimize = (optimize == -1) ? config->optimization_level : optimize;
+    c.c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
     c.c_nestlevel = 0;
     c.c_do_not_emit_bytecode = 0;
 
-    if (!_PyAST_Optimize(mod, arena, c.c_optimize)) {
+    _PyASTOptimizeState state;
+    state.optimize = c.c_optimize;
+    state.ff_features = merged;
+
+    if (!_PyAST_Optimize(mod, arena, &state)) {
         goto finally;
     }
 
@@ -554,13 +559,12 @@
     struct compiler_unit *u;
     basicblock *block;
 
-    u = (struct compiler_unit *)PyObject_Malloc(sizeof(
+    u = (struct compiler_unit *)PyObject_Calloc(1, sizeof(
                                             struct compiler_unit));
     if (!u) {
         PyErr_NoMemory();
         return 0;
     }
-    memset(u, 0, sizeof(struct compiler_unit));
     u->u_scope_type = scope_type;
     u->u_argcount = 0;
     u->u_posonlyargcount = 0;
@@ -609,7 +613,6 @@
     u->u_firstlineno = lineno;
     u->u_lineno = 0;
     u->u_col_offset = 0;
-    u->u_lineno_set = 0;
     u->u_consts = PyDict_New();
     if (!u->u_consts) {
         compiler_unit_free(u);
@@ -764,12 +767,11 @@
     struct compiler_unit *u;
 
     u = c->u;
-    b = (basicblock *)PyObject_Malloc(sizeof(basicblock));
+    b = (basicblock *)PyObject_Calloc(1, sizeof(basicblock));
     if (b == NULL) {
         PyErr_NoMemory();
         return NULL;
     }
-    memset((void *)b, 0, sizeof(basicblock));
     /* Extend the singly linked list of blocks with new block. */
     b->b_list = u->u_blocks;
     u->u_blocks = b;
@@ -802,19 +804,17 @@
 */
 
 static int
-compiler_next_instr(struct compiler *c, basicblock *b)
+compiler_next_instr(basicblock *b)
 {
     assert(b != NULL);
     if (b->b_instr == NULL) {
-        b->b_instr = (struct instr *)PyObject_Malloc(
-                         sizeof(struct instr) * DEFAULT_BLOCK_SIZE);
+        b->b_instr = (struct instr *)PyObject_Calloc(
+                         DEFAULT_BLOCK_SIZE, sizeof(struct instr));
         if (b->b_instr == NULL) {
             PyErr_NoMemory();
             return -1;
         }
         b->b_ialloc = DEFAULT_BLOCK_SIZE;
-        memset((char *)b->b_instr, 0,
-               sizeof(struct instr) * DEFAULT_BLOCK_SIZE);
     }
     else if (b->b_iused == b->b_ialloc) {
         struct instr *tmp;
@@ -844,28 +844,18 @@
     return b->b_iused++;
 }
 
-/* Set the i_lineno member of the instruction at offset off if the
-   line number for the current expression/statement has not
-   already been set.  If it has been set, the call has no effect.
+/* Set the line number and column offset for the following instructions.
 
    The line number is reset in the following cases:
    - when entering a new scope
    - on each statement
-   - on each expression that start a new line
+   - on each expression and sub-expression
    - before the "except" and "finally" clauses
-   - before the "for" and "while" expressions
 */
 
-static void
-compiler_set_lineno(struct compiler *c, int off)
-{
-    basicblock *b;
-    if (c->u->u_lineno_set)
-        return;
-    c->u->u_lineno_set = 1;
-    b = c->u->u_curblock;
-    b->b_instr[off].i_lineno = c->u->u_lineno;
-}
+#define SET_LOC(c, x)                           \
+    (c)->u->u_lineno = (x)->lineno;             \
+    (c)->u->u_col_offset = (x)->col_offset;
 
 /* Return the stack effect of opcode with argument oparg.
 
@@ -964,12 +954,6 @@
              * Restore the stack position and push 6 values before jumping to
              * the handler if an exception be raised. */
             return jump ? 6 : 1;
-        case WITH_CLEANUP_START:
-            return 2; /* or 1, depending on TOS */
-        case WITH_CLEANUP_FINISH:
-            /* Pop a variable number of values pushed by WITH_CLEANUP_START
-             * + __exit__ or __aexit__. */
-            return -3;
         case RETURN_VALUE:
             return -1;
         case IMPORT_STAR:
@@ -984,10 +968,6 @@
             return 0;
         case POP_EXCEPT:
             return -3;
-        case END_FINALLY:
-        case POP_FINALLY:
-            /* Pop 6 values when an exception was raised. */
-            return -6;
 
         case STORE_NAME:
             return -1;
@@ -1018,13 +998,6 @@
         case BUILD_SET:
         case BUILD_STRING:
             return 1-oparg;
-        case BUILD_LIST_UNPACK:
-        case BUILD_TUPLE_UNPACK:
-        case BUILD_TUPLE_UNPACK_WITH_CALL:
-        case BUILD_SET_UNPACK:
-        case BUILD_MAP_UNPACK:
-        case BUILD_MAP_UNPACK_WITH_CALL:
-            return 1 - oparg;
         case BUILD_MAP:
             return 1 - 2*oparg;
         case BUILD_CONST_KEY_MAP:
@@ -1032,7 +1005,11 @@
         case LOAD_ATTR:
             return 0;
         case COMPARE_OP:
+        case IS_OP:
+        case CONTAINS_OP:
             return -1;
+        case JUMP_IF_NOT_EXC_MATCH:
+            return -2;
         case IMPORT_NAME:
             return -1;
         case IMPORT_FROM:
@@ -1060,14 +1037,11 @@
              * Restore the stack position and push 6 values before jumping to
              * the handler if an exception be raised. */
             return jump ? 6 : 0;
-        case BEGIN_FINALLY:
-            /* Actually pushes 1 value, but count 6 for balancing with
-             * END_FINALLY and POP_FINALLY.
-             * This is the main reason of using this opcode instead of
-             * "LOAD_CONST None". */
-            return 6;
-        case CALL_FINALLY:
-            return jump ? 1 : 0;
+        case RERAISE:
+            return -3;
+
+        case WITH_EXCEPT_START:
+            return 1;
 
         case LOAD_FAST:
             return 1;
@@ -1133,6 +1107,15 @@
             return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0;
         case LOAD_METHOD:
             return 1;
+        case LOAD_ASSERTION_ERROR:
+            return 1;
+        case LIST_TO_TUPLE:
+            return 0;
+        case LIST_EXTEND:
+        case SET_UPDATE:
+        case DICT_MERGE:
+        case DICT_UPDATE:
+            return -1;
         default:
             return PY_INVALID_STACK_EFFECT;
     }
@@ -1165,7 +1148,7 @@
     if (c->c_do_not_emit_bytecode) {
         return 1;
     }
-    off = compiler_next_instr(c, c->u->u_curblock);
+    off = compiler_next_instr(c->u->u_curblock);
     if (off < 0)
         return 0;
     b = c->u->u_curblock;
@@ -1174,12 +1157,12 @@
     i->i_oparg = 0;
     if (opcode == RETURN_VALUE)
         b->b_return = 1;
-    compiler_set_lineno(c, off);
+    i->i_lineno = c->u->u_lineno;
     return 1;
 }
 
 static Py_ssize_t
-compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o)
+compiler_add_o(PyObject *dict, PyObject *o)
 {
     PyObject *v;
     Py_ssize_t arg;
@@ -1327,7 +1310,7 @@
         return -1;
     }
 
-    Py_ssize_t arg = compiler_add_o(c, c->u->u_consts, key);
+    Py_ssize_t arg = compiler_add_o(c->u->u_consts, key);
     Py_DECREF(key);
     return arg;
 }
@@ -1353,7 +1336,7 @@
         return 1;
     }
 
-    Py_ssize_t arg = compiler_add_o(c, dict, o);
+    Py_ssize_t arg = compiler_add_o(dict, o);
     if (arg < 0)
         return 0;
     return compiler_addop_i(c, opcode, arg);
@@ -1372,7 +1355,7 @@
     PyObject *mangled = _Py_Mangle(c->u->u_private, o);
     if (!mangled)
         return 0;
-    arg = compiler_add_o(c, dict, mangled);
+    arg = compiler_add_o(dict, mangled);
     Py_DECREF(mangled);
     if (arg < 0)
         return 0;
@@ -1403,13 +1386,13 @@
     assert(HAS_ARG(opcode));
     assert(0 <= oparg && oparg <= 2147483647);
 
-    off = compiler_next_instr(c, c->u->u_curblock);
+    off = compiler_next_instr(c->u->u_curblock);
     if (off < 0)
         return 0;
     i = &c->u->u_curblock->b_instr[off];
     i->i_opcode = opcode;
     i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int);
-    compiler_set_lineno(c, off);
+    i->i_lineno = c->u->u_lineno;
     return 1;
 }
 
@@ -1425,7 +1408,7 @@
 
     assert(HAS_ARG(opcode));
     assert(b != NULL);
-    off = compiler_next_instr(c, c->u->u_curblock);
+    off = compiler_next_instr(c->u->u_curblock);
     if (off < 0)
         return 0;
     i = &c->u->u_curblock->b_instr[off];
@@ -1435,7 +1418,7 @@
         i->i_jabs = 1;
     else
         i->i_jrel = 1;
-    compiler_set_lineno(c, off);
+    i->i_lineno = c->u->u_lineno;
     return 1;
 }
 
@@ -1514,6 +1497,12 @@
         return 0; \
 }
 
+
+#define ADDOP_COMPARE(C, CMP) { \
+    if (!compiler_addcompare((C), (cmpop_ty)(CMP))) \
+        return 0; \
+}
+
 /* VISIT and VISIT_SEQ takes an ASDL type as their second argument.  They use
    the ASDL name to synthesize the name of the C type and the visit function.
 */
@@ -1631,18 +1620,17 @@
 
 static int
 compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b,
-                     basicblock *exit)
+                     basicblock *exit, void *datum)
 {
     struct fblockinfo *f;
     if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
-        PyErr_SetString(PyExc_SyntaxError,
-                        "too many statically nested blocks");
-        return 0;
+        return compiler_error(c, "too many statically nested blocks");
     }
     f = &c->u->u_fblock[c->u->u_nfblocks++];
     f->fb_type = t;
     f->fb_block = b;
     f->fb_exit = exit;
+    f->fb_datum = datum;
     return 1;
 }
 
@@ -1656,8 +1644,19 @@
     assert(u->u_fblock[u->u_nfblocks].fb_block == b);
 }
 
+static int
+compiler_call_exit_with_nones(struct compiler *c) {
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    ADDOP(c, DUP_TOP);
+    ADDOP(c, DUP_TOP);
+    ADDOP_I(c, CALL_FUNCTION, 3);
+    return 1;
+}
+
 /* Unwind a frame block.  If preserve_tos is true, the TOS before
- * popping the blocks will be restored afterwards.
+ * popping the blocks will be restored afterwards, unless another
+ * return, break or continue is found. In which case, the TOS will
+ * be popped.
  */
 static int
 compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info,
@@ -1665,15 +1664,7 @@
 {
     switch (info->fb_type) {
         case WHILE_LOOP:
-            return 1;
-
-        case FINALLY_END:
-            info->fb_exit = NULL;
-            ADDOP_I(c, POP_FINALLY, preserve_tos);
-            if (preserve_tos) {
-                ADDOP(c, ROT_TWO);
-            }
-            ADDOP(c, POP_TOP);
+        case EXCEPTION_HANDLER:
             return 1;
 
         case FOR_LOOP:
@@ -1684,26 +1675,37 @@
             ADDOP(c, POP_TOP);
             return 1;
 
-        case EXCEPT:
+        case TRY_EXCEPT:
             ADDOP(c, POP_BLOCK);
             return 1;
 
         case FINALLY_TRY:
             ADDOP(c, POP_BLOCK);
-            ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
+            if (preserve_tos) {
+                if (!compiler_push_fblock(c, POP_VALUE, NULL, NULL, NULL)) {
+                    return 0;
+                }
+            }
+            /* Emit the finally block, restoring the line number when done */
+            int saved_lineno = c->u->u_lineno;
+            VISIT_SEQ(c, stmt, info->fb_datum);
+            c->u->u_lineno = saved_lineno;
+            if (preserve_tos) {
+                compiler_pop_fblock(c, POP_VALUE, NULL);
+            }
             return 1;
 
-        case FINALLY_TRY2:
-            ADDOP(c, POP_BLOCK);
+        case FINALLY_END:
             if (preserve_tos) {
-                ADDOP(c, ROT_TWO);
-                ADDOP(c, POP_TOP);
-                ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
+                ADDOP(c, ROT_FOUR);
             }
-            else {
-                ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
-                ADDOP(c, POP_TOP);
+            ADDOP(c, POP_TOP);
+            ADDOP(c, POP_TOP);
+            ADDOP(c, POP_TOP);
+            if (preserve_tos) {
+                ADDOP(c, ROT_FOUR);
             }
+            ADDOP(c, POP_EXCEPT);
             return 1;
 
         case WITH:
@@ -1712,34 +1714,66 @@
             if (preserve_tos) {
                 ADDOP(c, ROT_TWO);
             }
-            ADDOP(c, BEGIN_FINALLY);
-            ADDOP(c, WITH_CLEANUP_START);
+            if(!compiler_call_exit_with_nones(c)) {
+                return 0;
+            }
             if (info->fb_type == ASYNC_WITH) {
                 ADDOP(c, GET_AWAITABLE);
                 ADDOP_LOAD_CONST(c, Py_None);
                 ADDOP(c, YIELD_FROM);
             }
-            ADDOP(c, WITH_CLEANUP_FINISH);
-            ADDOP_I(c, POP_FINALLY, 0);
+            ADDOP(c, POP_TOP);
             return 1;
 
         case HANDLER_CLEANUP:
+            if (info->fb_datum) {
+                ADDOP(c, POP_BLOCK);
+            }
             if (preserve_tos) {
                 ADDOP(c, ROT_FOUR);
             }
-            if (info->fb_exit) {
-                ADDOP(c, POP_BLOCK);
-                ADDOP(c, POP_EXCEPT);
-                ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
+            ADDOP(c, POP_EXCEPT);
+            if (info->fb_datum) {
+                ADDOP_LOAD_CONST(c, Py_None);
+                compiler_nameop(c, info->fb_datum, Store);
+                compiler_nameop(c, info->fb_datum, Del);
             }
-            else {
-                ADDOP(c, POP_EXCEPT);
+            return 1;
+
+        case POP_VALUE:
+            if (preserve_tos) {
+                ADDOP(c, ROT_TWO);
             }
+            ADDOP(c, POP_TOP);
             return 1;
     }
     Py_UNREACHABLE();
 }
 
+/** Unwind block stack. If loop is not NULL, then stop when the first loop is encountered. */
+static int
+compiler_unwind_fblock_stack(struct compiler *c, int preserve_tos, struct fblockinfo **loop) {
+    if (c->u->u_nfblocks == 0) {
+        return 1;
+    }
+    struct fblockinfo *top = &c->u->u_fblock[c->u->u_nfblocks-1];
+    if (loop != NULL && (top->fb_type == WHILE_LOOP || top->fb_type == FOR_LOOP)) {
+        *loop = top;
+        return 1;
+    }
+    struct fblockinfo copy = *top;
+    c->u->u_nfblocks--;
+    if (!compiler_unwind_fblock(c, &copy, preserve_tos)) {
+        return 0;
+    }
+    if (!compiler_unwind_fblock_stack(c, preserve_tos, loop)) {
+        return 0;
+    }
+    c->u->u_fblock[c->u->u_nfblocks] = copy;
+    c->u->u_nfblocks++;
+    return 1;
+}
+
 /* Compile a sequence of statements, checking for a docstring
    and for annotations. */
 
@@ -1754,10 +1788,9 @@
        This way line number for SETUP_ANNOTATIONS will always
        coincide with the line number of first "real" statement in module.
        If body is empty, then lineno will be set later in assemble. */
-    if (c->u->u_scope_type == COMPILER_SCOPE_MODULE &&
-        !c->u->u_lineno && asdl_seq_LEN(stmts)) {
+    if (c->u->u_scope_type == COMPILER_SCOPE_MODULE && asdl_seq_LEN(stmts)) {
         st = (stmt_ty)asdl_seq_GET(stmts, 0);
-        c->u->u_lineno = st->lineno;
+        SET_LOC(c, st);
     }
     /* Every annotated class and module should have __annotations__. */
     if (find_ann(stmts)) {
@@ -1815,10 +1848,6 @@
         VISIT_IN_SCOPE(c, expr, mod->v.Expression.body);
         addNone = 0;
         break;
-    case Suite_kind:
-        PyErr_SetString(PyExc_SystemError,
-                        "suite should not be possible");
-        return 0;
     default:
         PyErr_Format(PyExc_SystemError,
                      "module kind %d should not be possible",
@@ -1844,18 +1873,15 @@
         return CELL;
     scope = PyST_GetScope(c->u->u_ste, name);
     if (scope == 0) {
-        char buf[350];
-        PyOS_snprintf(buf, sizeof(buf),
-                      "unknown scope for %.100s in %.100s(%s)\n"
-                      "symbols: %s\nlocals: %s\nglobals: %s",
-                      PyUnicode_AsUTF8(name),
-                      PyUnicode_AsUTF8(c->u->u_name),
-                      PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_id)),
-                      PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_symbols)),
-                      PyUnicode_AsUTF8(PyObject_Repr(c->u->u_varnames)),
-                      PyUnicode_AsUTF8(PyObject_Repr(c->u->u_names))
-        );
-        Py_FatalError(buf);
+        _Py_FatalErrorFormat(__func__,
+           "unknown scope for %.100s in %.100s(%s)\n"
+           "symbols: %s\nlocals: %s\nglobals: %s",
+           PyUnicode_AsUTF8(name),
+           PyUnicode_AsUTF8(c->u->u_name),
+           PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_id)),
+           PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_symbols)),
+           PyUnicode_AsUTF8(PyObject_Repr(c->u->u_varnames)),
+           PyUnicode_AsUTF8(PyObject_Repr(c->u->u_names)));
     }
 
     return scope;
@@ -1890,7 +1916,7 @@
                free variable that has the same name as a method,
                the name will be considered free *and* local in the
                class.  It should be handled by the closure, as
-               well as by the normal name loookup logic.
+               well as by the normal name lookup logic.
             */
             reftype = get_ref_type(c, name);
             if (reftype == CELL)
@@ -1898,7 +1924,7 @@
             else /* (reftype == FREE) */
                 arg = compiler_lookup_arg(c->u->u_freevars, name);
             if (arg == -1) {
-                fprintf(stderr,
+                _Py_FatalErrorFormat(__func__,
                     "lookup %s in %s %d %d\n"
                     "freevars of %s: %s\n",
                     PyUnicode_AsUTF8(PyObject_Repr(name)),
@@ -1906,7 +1932,6 @@
                     reftype, arg,
                     PyUnicode_AsUTF8(co->co_name),
                     PyUnicode_AsUTF8(PyObject_Repr(co->co_freevars)));
-                Py_FatalError("compiler_make_closure()");
             }
             ADDOP_I(c, LOAD_CLOSURE, arg);
         }
@@ -2127,6 +2152,55 @@
 }
 
 static int
+forbidden_name(struct compiler *c, identifier name, expr_context_ty ctx)
+{
+
+    if (ctx == Store && _PyUnicode_EqualToASCIIString(name, "__debug__")) {
+        compiler_error(c, "cannot assign to __debug__");
+        return 1;
+    }
+    return 0;
+}
+
+static int
+compiler_check_debug_one_arg(struct compiler *c, arg_ty arg)
+{
+    if (arg != NULL) {
+        if (forbidden_name(c, arg->arg, Store))
+            return 0;
+    }
+    return 1;
+}
+
+static int
+compiler_check_debug_args_seq(struct compiler *c, asdl_seq *args)
+{
+    if (args != NULL) {
+        for (Py_ssize_t i = 0, n = asdl_seq_LEN(args); i < n; i++) {
+            if (!compiler_check_debug_one_arg(c, asdl_seq_GET(args, i)))
+                return 0;
+        }
+    }
+    return 1;
+}
+
+static int
+compiler_check_debug_args(struct compiler *c, arguments_ty args)
+{
+    if (!compiler_check_debug_args_seq(c, args->posonlyargs))
+        return 0;
+    if (!compiler_check_debug_args_seq(c, args->args))
+        return 0;
+    if (!compiler_check_debug_one_arg(c, args->vararg))
+        return 0;
+    if (!compiler_check_debug_args_seq(c, args->kwonlyargs))
+        return 0;
+    if (!compiler_check_debug_one_arg(c, args->kwarg))
+        return 0;
+    return 1;
+}
+
+static int
 compiler_function(struct compiler *c, stmt_ty s, int is_async)
 {
     PyCodeObject *co;
@@ -2163,6 +2237,9 @@
         scope_type = COMPILER_SCOPE_FUNCTION;
     }
 
+    if (!compiler_check_debug_args(c, args))
+        return 0;
+
     if (!compiler_decorators(c, decos))
         return 0;
 
@@ -2398,35 +2475,49 @@
     return 1;
 }
 
-static int
-cmpop(cmpop_ty op)
+static int compiler_addcompare(struct compiler *c, cmpop_ty op)
 {
+    int cmp;
     switch (op) {
     case Eq:
-        return PyCmp_EQ;
+        cmp = Py_EQ;
+        break;
     case NotEq:
-        return PyCmp_NE;
+        cmp = Py_NE;
+        break;
     case Lt:
-        return PyCmp_LT;
+        cmp = Py_LT;
+        break;
     case LtE:
-        return PyCmp_LE;
+        cmp = Py_LE;
+        break;
     case Gt:
-        return PyCmp_GT;
+        cmp = Py_GT;
+        break;
     case GtE:
-        return PyCmp_GE;
+        cmp = Py_GE;
+        break;
     case Is:
-        return PyCmp_IS;
+        ADDOP_I(c, IS_OP, 0);
+        return 1;
     case IsNot:
-        return PyCmp_IS_NOT;
+        ADDOP_I(c, IS_OP, 1);
+        return 1;
     case In:
-        return PyCmp_IN;
+        ADDOP_I(c, CONTAINS_OP, 0);
+        return 1;
     case NotIn:
-        return PyCmp_NOT_IN;
+        ADDOP_I(c, CONTAINS_OP, 1);
+        return 1;
     default:
-        return PyCmp_BAD;
+        Py_UNREACHABLE();
     }
+    ADDOP_I(c, COMPARE_OP, cmp);
+    return 1;
 }
 
+
+
 static int
 compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
 {
@@ -2491,14 +2582,12 @@
                     (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
                 ADDOP(c, DUP_TOP);
                 ADDOP(c, ROT_THREE);
-                ADDOP_I(c, COMPARE_OP,
-                    cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));
+                ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
                 ADDOP_JABS(c, POP_JUMP_IF_FALSE, cleanup);
                 NEXT_BLOCK(c);
             }
             VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
-            ADDOP_I(c, COMPARE_OP,
-                   cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));
+            ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
             ADDOP_JABS(c, cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
             basicblock *end = compiler_new_block(c);
             if (end == NULL)
@@ -2558,6 +2647,9 @@
     arguments_ty args = e->v.Lambda.args;
     assert(e->kind == Lambda_kind);
 
+    if (!compiler_check_debug_args(c, args))
+        return 0;
+
     if (!name) {
         name = PyUnicode_InternFromString("<lambda>");
         if (!name)
@@ -2636,10 +2728,12 @@
             if (next == NULL)
                 return 0;
         }
-        else
+        else {
             next = end;
-        if (!compiler_jump_if(c, s->v.If.test, next, 0))
+        }
+        if (!compiler_jump_if(c, s->v.If.test, next, 0)) {
             return 0;
+        }
         VISIT_SEQ(c, stmt, s->v.If.body);
         if (asdl_seq_LEN(s->v.If.orelse)) {
             ADDOP_JREL(c, JUMP_FORWARD, end);
@@ -2659,12 +2753,12 @@
     start = compiler_new_block(c);
     cleanup = compiler_new_block(c);
     end = compiler_new_block(c);
-    if (start == NULL || end == NULL || cleanup == NULL)
+    if (start == NULL || end == NULL || cleanup == NULL) {
         return 0;
-
-    if (!compiler_push_fblock(c, FOR_LOOP, start, end))
+    }
+    if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) {
         return 0;
-
+    }
     VISIT(c, expr, s->v.For.iter);
     ADDOP(c, GET_ITER);
     compiler_use_next_block(c, start);
@@ -2696,16 +2790,16 @@
     except = compiler_new_block(c);
     end = compiler_new_block(c);
 
-    if (start == NULL || except == NULL || end == NULL)
+    if (start == NULL || except == NULL || end == NULL) {
         return 0;
-
+    }
     VISIT(c, expr, s->v.AsyncFor.iter);
     ADDOP(c, GET_AITER);
 
     compiler_use_next_block(c, start);
-    if (!compiler_push_fblock(c, FOR_LOOP, start, end))
+    if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) {
         return 0;
-
+    }
     /* SETUP_FINALLY to guard the __anext__ call */
     ADDOP_JREL(c, SETUP_FINALLY, except);
     ADDOP(c, GET_ANEXT);
@@ -2743,7 +2837,7 @@
         // Push a dummy block so the VISIT_SEQ knows that we are
         // inside a while loop so it can correctly evaluate syntax
         // errors.
-        if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL)) {
+        if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL, NULL)) {
             return 0;
         }
         VISIT_SEQ(c, stmt, s->v.While.body);
@@ -2773,7 +2867,7 @@
         orelse = NULL;
 
     compiler_use_next_block(c, loop);
-    if (!compiler_push_fblock(c, WHILE_LOOP, loop, end))
+    if (!compiler_push_fblock(c, WHILE_LOOP, loop, end, NULL))
         return 0;
     if (constant == -1) {
         if (!compiler_jump_if(c, s->v.While.test, anchor, 0))
@@ -2813,12 +2907,8 @@
     if (preserve_tos) {
         VISIT(c, expr, s->v.Return.value);
     }
-    for (int depth = c->u->u_nfblocks; depth--;) {
-        struct fblockinfo *info = &c->u->u_fblock[depth];
-
-        if (!compiler_unwind_fblock(c, info, preserve_tos))
-            return 0;
-    }
+    if (!compiler_unwind_fblock_stack(c, preserve_tos, NULL))
+        return 0;
     if (s->v.Return.value == NULL) {
         ADDOP_LOAD_CONST(c, Py_None);
     }
@@ -2833,33 +2923,32 @@
 static int
 compiler_break(struct compiler *c)
 {
-    for (int depth = c->u->u_nfblocks; depth--;) {
-        struct fblockinfo *info = &c->u->u_fblock[depth];
-
-        if (!compiler_unwind_fblock(c, info, 0))
-            return 0;
-        if (info->fb_type == WHILE_LOOP || info->fb_type == FOR_LOOP) {
-            ADDOP_JABS(c, JUMP_ABSOLUTE, info->fb_exit);
-            return 1;
-        }
+    struct fblockinfo *loop = NULL;
+    if (!compiler_unwind_fblock_stack(c, 0, &loop)) {
+        return 0;
     }
-    return compiler_error(c, "'break' outside loop");
+    if (loop == NULL) {
+        return compiler_error(c, "'break' outside loop");
+    }
+    if (!compiler_unwind_fblock(c, loop, 0)) {
+        return 0;
+    }
+    ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_exit);
+    return 1;
 }
 
 static int
 compiler_continue(struct compiler *c)
 {
-    for (int depth = c->u->u_nfblocks; depth--;) {
-        struct fblockinfo *info = &c->u->u_fblock[depth];
-
-        if (info->fb_type == WHILE_LOOP || info->fb_type == FOR_LOOP) {
-            ADDOP_JABS(c, JUMP_ABSOLUTE, info->fb_block);
-            return 1;
-        }
-        if (!compiler_unwind_fblock(c, info, 0))
-            return 0;
+    struct fblockinfo *loop = NULL;
+    if (!compiler_unwind_fblock_stack(c, 0, &loop)) {
+        return 0;
     }
-    return compiler_error(c, "'continue' not properly in loop");
+    if (loop == NULL) {
+        return compiler_error(c, "'continue' not properly in loop");
+    }
+    ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_block);
+    return 1;
 }
 
 
@@ -2868,10 +2957,11 @@
         SETUP_FINALLY           L
         <code for body>
         POP_BLOCK
-        BEGIN_FINALLY
+        <code for finalbody>
+        JUMP E
     L:
         <code for finalbody>
-        END_FINALLY
+    E:
 
    The special instructions use the block stack.  Each block
    stack entry contains the instruction that created it (here
@@ -2883,11 +2973,6 @@
     onto the block stack.
    POP_BLOCK:
     Pops en entry from the block stack.
-   BEGIN_FINALLY
-    Pushes NULL onto the value stack.
-   END_FINALLY:
-    Pops 1 (NULL or int) or 6 entries from the *value* stack and restore
-    the raised and the caught exceptions they specify.
 
    The block stack is unwound when an exception is raised:
    when a SETUP_FINALLY entry is found, the raised and the caught
@@ -2899,47 +2984,18 @@
 static int
 compiler_try_finally(struct compiler *c, stmt_ty s)
 {
-    basicblock *start, *newcurblock, *body, *end;
-    int break_finally = 1;
+    basicblock *body, *end, *exit;
 
     body = compiler_new_block(c);
     end = compiler_new_block(c);
-    if (body == NULL || end == NULL)
+    exit = compiler_new_block(c);
+    if (body == NULL || end == NULL || exit == NULL)
         return 0;
 
-    start = c->u->u_curblock;
-
-    /* `finally` block. Compile it first to determine if any of "break",
-       "continue" or "return" are used in it. */
-    compiler_use_next_block(c, end);
-    if (!compiler_push_fblock(c, FINALLY_END, end, end))
-        return 0;
-    VISIT_SEQ(c, stmt, s->v.Try.finalbody);
-    ADDOP(c, END_FINALLY);
-    break_finally = (c->u->u_fblock[c->u->u_nfblocks - 1].fb_exit == NULL);
-    if (break_finally) {
-        /* Pops a placeholder. See below */
-        ADDOP(c, POP_TOP);
-    }
-    compiler_pop_fblock(c, FINALLY_END, end);
-
-    newcurblock = c->u->u_curblock;
-    c->u->u_curblock = start;
-    start->b_next = NULL;
-
     /* `try` block */
-    c->u->u_lineno_set = 0;
-    c->u->u_lineno = s->lineno;
-    c->u->u_col_offset = s->col_offset;
-    if (break_finally) {
-        /* Pushes a placeholder for the value of "return" in the "try" block
-           to balance the stack for "break", "continue" and "return" in
-           the "finally" block. */
-        ADDOP_LOAD_CONST(c, Py_None);
-    }
     ADDOP_JREL(c, SETUP_FINALLY, end);
     compiler_use_next_block(c, body);
-    if (!compiler_push_fblock(c, break_finally ? FINALLY_TRY2 : FINALLY_TRY, body, end))
+    if (!compiler_push_fblock(c, FINALLY_TRY, body, end, s->v.Try.finalbody))
         return 0;
     if (s->v.Try.handlers && asdl_seq_LEN(s->v.Try.handlers)) {
         if (!compiler_try_except(c, s))
@@ -2949,12 +3005,17 @@
         VISIT_SEQ(c, stmt, s->v.Try.body);
     }
     ADDOP(c, POP_BLOCK);
-    ADDOP(c, BEGIN_FINALLY);
-    compiler_pop_fblock(c, break_finally ? FINALLY_TRY2 : FINALLY_TRY, body);
-
-    c->u->u_curblock->b_next = end;
-    c->u->u_curblock = newcurblock;
-
+    compiler_pop_fblock(c, FINALLY_TRY, body);
+    VISIT_SEQ(c, stmt, s->v.Try.finalbody);
+    ADDOP_JREL(c, JUMP_FORWARD, exit);
+    /* `finally` block */
+    compiler_use_next_block(c, end);
+    if (!compiler_push_fblock(c, FINALLY_END, end, NULL, NULL))
+        return 0;
+    VISIT_SEQ(c, stmt, s->v.Try.finalbody);
+    compiler_pop_fblock(c, FINALLY_END, end);
+    ADDOP(c, RERAISE);
+    compiler_use_next_block(c, exit);
     return 1;
 }
 
@@ -2972,8 +3033,7 @@
 
    [tb, val, exc]       L1:     DUP                             )
    [tb, val, exc, exc]          <evaluate E1>                   )
-   [tb, val, exc, exc, E1]      COMPARE_OP      EXC_MATCH       ) only if E1
-   [tb, val, exc, 1-or-0]       POP_JUMP_IF_FALSE       L2      )
+   [tb, val, exc, exc, E1]      JUMP_IF_NOT_EXC_MATCH L2        ) only if E1
    [tb, val, exc]               POP
    [tb, val]                    <assign to V1>  (or POP if no V1)
    [tb]                         POP
@@ -2983,7 +3043,7 @@
    [tb, val, exc]       L2:     DUP
    .............................etc.......................
 
-   [tb, val, exc]       Ln+1:   END_FINALLY     # re-raise exception
+   [tb, val, exc]       Ln+1:   RERAISE     # re-raise exception
 
    []                   L0:     <next statement>
 
@@ -3003,30 +3063,30 @@
         return 0;
     ADDOP_JREL(c, SETUP_FINALLY, except);
     compiler_use_next_block(c, body);
-    if (!compiler_push_fblock(c, EXCEPT, body, NULL))
+    if (!compiler_push_fblock(c, TRY_EXCEPT, body, NULL, NULL))
         return 0;
     VISIT_SEQ(c, stmt, s->v.Try.body);
     ADDOP(c, POP_BLOCK);
-    compiler_pop_fblock(c, EXCEPT, body);
+    compiler_pop_fblock(c, TRY_EXCEPT, body);
     ADDOP_JREL(c, JUMP_FORWARD, orelse);
     n = asdl_seq_LEN(s->v.Try.handlers);
     compiler_use_next_block(c, except);
+    /* Runtime will push a block here, so we need to account for that */
+    if (!compiler_push_fblock(c, EXCEPTION_HANDLER, NULL, NULL, NULL))
+        return 0;
     for (i = 0; i < n; i++) {
         excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
             s->v.Try.handlers, i);
         if (!handler->v.ExceptHandler.type && i < n-1)
             return compiler_error(c, "default 'except:' must be last");
-        c->u->u_lineno_set = 0;
-        c->u->u_lineno = handler->lineno;
-        c->u->u_col_offset = handler->col_offset;
+        SET_LOC(c, handler);
         except = compiler_new_block(c);
         if (except == NULL)
             return 0;
         if (handler->v.ExceptHandler.type) {
             ADDOP(c, DUP_TOP);
             VISIT(c, expr, handler->v.ExceptHandler.type);
-            ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH);
-            ADDOP_JABS(c, POP_JUMP_IF_FALSE, except);
+            ADDOP_JABS(c, JUMP_IF_NOT_EXC_MATCH, except);
         }
         ADDOP(c, POP_TOP);
         if (handler->v.ExceptHandler.name) {
@@ -3055,28 +3115,29 @@
             /* second try: */
             ADDOP_JREL(c, SETUP_FINALLY, cleanup_end);
             compiler_use_next_block(c, cleanup_body);
-            if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, cleanup_end))
+            if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, handler->v.ExceptHandler.name))
                 return 0;
 
             /* second # body */
             VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
-            ADDOP(c, POP_BLOCK);
-            ADDOP(c, BEGIN_FINALLY);
             compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
+            ADDOP(c, POP_BLOCK);
+            ADDOP(c, POP_EXCEPT);
+            /* name = None; del name */
+            ADDOP_LOAD_CONST(c, Py_None);
+            compiler_nameop(c, handler->v.ExceptHandler.name, Store);
+            compiler_nameop(c, handler->v.ExceptHandler.name, Del);
+            ADDOP_JREL(c, JUMP_FORWARD, end);
 
-            /* finally: */
+            /* except: */
             compiler_use_next_block(c, cleanup_end);
-            if (!compiler_push_fblock(c, FINALLY_END, cleanup_end, NULL))
-                return 0;
 
             /* name = None; del name */
             ADDOP_LOAD_CONST(c, Py_None);
             compiler_nameop(c, handler->v.ExceptHandler.name, Store);
             compiler_nameop(c, handler->v.ExceptHandler.name, Del);
 
-            ADDOP(c, END_FINALLY);
-            ADDOP(c, POP_EXCEPT);
-            compiler_pop_fblock(c, FINALLY_END, cleanup_end);
+            ADDOP(c, RERAISE);
         }
         else {
             basicblock *cleanup_body;
@@ -3088,16 +3149,17 @@
             ADDOP(c, POP_TOP);
             ADDOP(c, POP_TOP);
             compiler_use_next_block(c, cleanup_body);
-            if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL))
+            if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, NULL))
                 return 0;
             VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
-            ADDOP(c, POP_EXCEPT);
             compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
+            ADDOP(c, POP_EXCEPT);
+            ADDOP_JREL(c, JUMP_FORWARD, end);
         }
-        ADDOP_JREL(c, JUMP_FORWARD, end);
         compiler_use_next_block(c, except);
     }
-    ADDOP(c, END_FINALLY);
+    compiler_pop_fblock(c, EXCEPTION_HANDLER, NULL);
+    ADDOP(c, RERAISE);
     compiler_use_next_block(c, orelse);
     VISIT_SEQ(c, stmt, s->v.Try.orelse);
     compiler_use_next_block(c, end);
@@ -3265,16 +3327,10 @@
 static int
 compiler_assert(struct compiler *c, stmt_ty s)
 {
-    static PyObject *assertion_error = NULL;
     basicblock *end;
 
     if (c->c_optimize)
         return 1;
-    if (assertion_error == NULL) {
-        assertion_error = PyUnicode_InternFromString("AssertionError");
-        if (assertion_error == NULL)
-            return 0;
-    }
     if (s->v.Assert.test->kind == Tuple_kind &&
         asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0)
     {
@@ -3289,7 +3345,7 @@
         return 0;
     if (!compiler_jump_if(c, s->v.Assert.test, end, 1))
         return 0;
-    ADDOP_O(c, LOAD_GLOBAL, assertion_error, names);
+    ADDOP(c, LOAD_ASSERTION_ERROR);
     if (s->v.Assert.msg) {
         VISIT(c, expr, s->v.Assert.msg);
         ADDOP_I(c, CALL_FUNCTION, 1);
@@ -3324,9 +3380,7 @@
     Py_ssize_t i, n;
 
     /* Always assign a lineno to the next instruction for a stmt. */
-    c->u->u_lineno = s->lineno;
-    c->u->u_col_offset = s->col_offset;
-    c->u->u_lineno_set = 0;
+    SET_LOC(c, s);
 
     switch (s->kind) {
     case FunctionDef_kind:
@@ -3422,7 +3476,7 @@
 }
 
 static int
-binop(struct compiler *c, operator_ty op)
+binop(operator_ty op)
 {
     switch (op) {
     case Add:
@@ -3459,7 +3513,7 @@
 }
 
 static int
-inplace_binop(struct compiler *c, operator_ty op)
+inplace_binop(operator_ty op)
 {
     switch (op) {
     case Add:
@@ -3504,12 +3558,14 @@
 
     PyObject *dict = c->u->u_names;
     PyObject *mangled;
-    /* XXX AugStore isn't used anywhere! */
 
     assert(!_PyUnicode_EqualToASCIIString(name, "None") &&
            !_PyUnicode_EqualToASCIIString(name, "True") &&
            !_PyUnicode_EqualToASCIIString(name, "False"));
 
+    if (forbidden_name(c, name, ctx))
+        return 0;
+
     mangled = _Py_Mangle(c->u->u_private, name);
     if (!mangled)
         return 0;
@@ -3551,76 +3607,36 @@
         case Load:
             op = (c->u->u_ste->ste_type == ClassBlock) ? LOAD_CLASSDEREF : LOAD_DEREF;
             break;
-        case Store:
-            op = STORE_DEREF;
-            break;
-        case AugLoad:
-        case AugStore:
-            break;
+        case Store: op = STORE_DEREF; break;
         case Del: op = DELETE_DEREF; break;
-        case Param:
-        default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for deref variable");
-            return 0;
         }
         break;
     case OP_FAST:
         switch (ctx) {
         case Load: op = LOAD_FAST; break;
-        case Store:
-            op = STORE_FAST;
-            break;
+        case Store: op = STORE_FAST; break;
         case Del: op = DELETE_FAST; break;
-        case AugLoad:
-        case AugStore:
-            break;
-        case Param:
-        default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for local variable");
-            return 0;
         }
         ADDOP_N(c, op, mangled, varnames);
         return 1;
     case OP_GLOBAL:
         switch (ctx) {
         case Load: op = LOAD_GLOBAL; break;
-        case Store:
-            op = STORE_GLOBAL;
-            break;
+        case Store: op = STORE_GLOBAL; break;
         case Del: op = DELETE_GLOBAL; break;
-        case AugLoad:
-        case AugStore:
-            break;
-        case Param:
-        default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for global variable");
-            return 0;
         }
         break;
     case OP_NAME:
         switch (ctx) {
         case Load: op = LOAD_NAME; break;
-        case Store:
-            op = STORE_NAME;
-            break;
+        case Store: op = STORE_NAME; break;
         case Del: op = DELETE_NAME; break;
-        case AugLoad:
-        case AugStore:
-            break;
-        case Param:
-        default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for name variable");
-            return 0;
         }
         break;
     }
 
     assert(op);
-    arg = compiler_add_o(c, dict, mangled);
+    arg = compiler_add_o(dict, mangled);
     Py_DECREF(mangled);
     if (arg < 0)
         return 0;
@@ -3656,36 +3672,79 @@
 }
 
 static int
-starunpack_helper(struct compiler *c, asdl_seq *elts,
-                  int single_op, int inner_op, int outer_op)
+starunpack_helper(struct compiler *c, asdl_seq *elts, int pushed,
+                  int build, int add, int extend, int tuple)
 {
     Py_ssize_t n = asdl_seq_LEN(elts);
-    Py_ssize_t i, nsubitems = 0, nseen = 0;
+    Py_ssize_t i, seen_star = 0;
+    if (n > 2 && are_all_items_const(elts, 0, n)) {
+        PyObject *folded = PyTuple_New(n);
+        if (folded == NULL) {
+            return 0;
+        }
+        PyObject *val;
+        for (i = 0; i < n; i++) {
+            val = ((expr_ty)asdl_seq_GET(elts, i))->v.Constant.value;
+            Py_INCREF(val);
+            PyTuple_SET_ITEM(folded, i, val);
+        }
+        if (tuple) {
+            ADDOP_LOAD_CONST_NEW(c, folded);
+        } else {
+            if (add == SET_ADD) {
+                Py_SETREF(folded, PyFrozenSet_New(folded));
+                if (folded == NULL) {
+                    return 0;
+                }
+            }
+            ADDOP_I(c, build, pushed);
+            ADDOP_LOAD_CONST_NEW(c, folded);
+            ADDOP_I(c, extend, 1);
+        }
+        return 1;
+    }
+
     for (i = 0; i < n; i++) {
         expr_ty elt = asdl_seq_GET(elts, i);
         if (elt->kind == Starred_kind) {
-            if (nseen) {
-                ADDOP_I(c, inner_op, nseen);
-                nseen = 0;
-                nsubitems++;
+            seen_star = 1;
+        }
+    }
+    if (seen_star) {
+        seen_star = 0;
+        for (i = 0; i < n; i++) {
+            expr_ty elt = asdl_seq_GET(elts, i);
+            if (elt->kind == Starred_kind) {
+                if (seen_star == 0) {
+                    ADDOP_I(c, build, i+pushed);
+                    seen_star = 1;
+                }
+                VISIT(c, expr, elt->v.Starred.value);
+                ADDOP_I(c, extend, 1);
             }
-            VISIT(c, expr, elt->v.Starred.value);
-            nsubitems++;
+            else {
+                VISIT(c, expr, elt);
+                if (seen_star) {
+                    ADDOP_I(c, add, 1);
+                }
+            }
         }
-        else {
+        assert(seen_star);
+        if (tuple) {
+            ADDOP(c, LIST_TO_TUPLE);
+        }
+    }
+    else {
+        for (i = 0; i < n; i++) {
+            expr_ty elt = asdl_seq_GET(elts, i);
             VISIT(c, expr, elt);
-            nseen++;
+        }
+        if (tuple) {
+            ADDOP_I(c, BUILD_TUPLE, n+pushed);
+        } else {
+            ADDOP_I(c, build, n+pushed);
         }
     }
-    if (nsubitems) {
-        if (nseen) {
-            ADDOP_I(c, inner_op, nseen);
-            nsubitems++;
-        }
-        ADDOP_I(c, outer_op, nsubitems);
-    }
-    else
-        ADDOP_I(c, single_op, nseen);
     return 1;
 }
 
@@ -3705,17 +3764,19 @@
                     "star-unpacking assignment");
             ADDOP_I(c, UNPACK_EX, (i + ((n-i-1) << 8)));
             seen_star = 1;
-            asdl_seq_SET(elts, i, elt->v.Starred.value);
         }
         else if (elt->kind == Starred_kind) {
             return compiler_error(c,
-                "two starred expressions in assignment");
+                "multiple starred expressions in assignment");
         }
     }
     if (!seen_star) {
         ADDOP_I(c, UNPACK_SEQUENCE, n);
     }
-    VISIT_SEQ(c, expr, elts);
+    for (i = 0; i < n; i++) {
+        expr_ty elt = asdl_seq_GET(elts, i);
+        VISIT(c, expr, elt->kind != Starred_kind ? elt : elt->v.Starred.value);
+    }
     return 1;
 }
 
@@ -3727,8 +3788,8 @@
         return assignment_helper(c, elts);
     }
     else if (e->v.List.ctx == Load) {
-        return starunpack_helper(c, elts,
-                                 BUILD_LIST, BUILD_TUPLE, BUILD_LIST_UNPACK);
+        return starunpack_helper(c, elts, 0, BUILD_LIST,
+                                 LIST_APPEND, LIST_EXTEND, 0);
     }
     else
         VISIT_SEQ(c, expr, elts);
@@ -3743,8 +3804,8 @@
         return assignment_helper(c, elts);
     }
     else if (e->v.Tuple.ctx == Load) {
-        return starunpack_helper(c, elts,
-                                 BUILD_TUPLE, BUILD_TUPLE, BUILD_TUPLE_UNPACK);
+        return starunpack_helper(c, elts, 0, BUILD_LIST,
+                                 LIST_APPEND, LIST_EXTEND, 1);
     }
     else
         VISIT_SEQ(c, expr, elts);
@@ -3754,8 +3815,8 @@
 static int
 compiler_set(struct compiler *c, expr_ty e)
 {
-    return starunpack_helper(c, e->v.Set.elts, BUILD_SET,
-                             BUILD_SET, BUILD_SET_UNPACK);
+    return starunpack_helper(c, e->v.Set.elts, 0, BUILD_SET,
+                             SET_ADD, SET_UPDATE, 0);
 }
 
 static int
@@ -3805,37 +3866,58 @@
 compiler_dict(struct compiler *c, expr_ty e)
 {
     Py_ssize_t i, n, elements;
-    int containers;
+    int have_dict;
     int is_unpacking = 0;
     n = asdl_seq_LEN(e->v.Dict.values);
-    containers = 0;
+    have_dict = 0;
     elements = 0;
     for (i = 0; i < n; i++) {
         is_unpacking = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i) == NULL;
-        if (elements == 0xFFFF || (elements && is_unpacking)) {
-            if (!compiler_subdict(c, e, i - elements, i))
-                return 0;
-            containers++;
-            elements = 0;
-        }
         if (is_unpacking) {
+            if (elements) {
+                if (!compiler_subdict(c, e, i - elements, i)) {
+                    return 0;
+                }
+                if (have_dict) {
+                    ADDOP_I(c, DICT_UPDATE, 1);
+                }
+                have_dict = 1;
+                elements = 0;
+            }
+            if (have_dict == 0) {
+                ADDOP_I(c, BUILD_MAP, 0);
+                have_dict = 1;
+            }
             VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
-            containers++;
+            ADDOP_I(c, DICT_UPDATE, 1);
         }
         else {
-            elements++;
+            if (elements == 0xFFFF) {
+                if (!compiler_subdict(c, e, i - elements, i + 1)) {
+                    return 0;
+                }
+                if (have_dict) {
+                    ADDOP_I(c, DICT_UPDATE, 1);
+                }
+                have_dict = 1;
+                elements = 0;
+            }
+            else {
+                elements++;
+            }
         }
     }
-    if (elements || containers == 0) {
-        if (!compiler_subdict(c, e, n - elements, n))
+    if (elements) {
+        if (!compiler_subdict(c, e, n - elements, n)) {
             return 0;
-        containers++;
+        }
+        if (have_dict) {
+            ADDOP_I(c, DICT_UPDATE, 1);
+        }
+        have_dict = 1;
     }
-    /* If there is more than one dict, they need to be merged into a new
-     * dict.  If there is one dict and it's an unpacking, then it needs
-     * to be copied into a new dict." */
-    if (containers > 1 || is_unpacking) {
-        ADDOP_I(c, BUILD_MAP_UNPACK, containers);
+    if (!have_dict) {
+        ADDOP_I(c, BUILD_MAP, 0);
     }
     return 1;
 }
@@ -3853,8 +3935,7 @@
     n = asdl_seq_LEN(e->v.Compare.ops) - 1;
     if (n == 0) {
         VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));
-        ADDOP_I(c, COMPARE_OP,
-            cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, 0))));
+        ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, 0));
     }
     else {
         basicblock *cleanup = compiler_new_block(c);
@@ -3865,14 +3946,12 @@
                 (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
             ADDOP(c, DUP_TOP);
             ADDOP(c, ROT_THREE);
-            ADDOP_I(c, COMPARE_OP,
-                cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));
+            ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
             ADDOP_JABS(c, JUMP_IF_FALSE_OR_POP, cleanup);
             NEXT_BLOCK(c);
         }
         VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
-        ADDOP_I(c, COMPARE_OP,
-            cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));
+        ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
         basicblock *end = compiler_new_block(c);
         if (end == NULL)
             return 0;
@@ -3908,7 +3987,7 @@
     case FormattedValue_kind:
         return &PyUnicode_Type;
     case Constant_kind:
-        return e->v.Constant.value->ob_type;
+        return Py_TYPE(e->v.Constant.value);
     default:
         return NULL;
     }
@@ -3965,14 +4044,11 @@
 }
 
 static int
-check_index(struct compiler *c, expr_ty e, slice_ty s)
+check_index(struct compiler *c, expr_ty e, expr_ty s)
 {
     PyObject *v;
 
-    if (s->kind != Index_kind) {
-        return 1;
-    }
-    PyTypeObject *index_type = infer_type(s->v.Index.value);
+    PyTypeObject *index_type = infer_type(s);
     if (index_type == NULL
         || PyType_FastSubclass(index_type, Py_TPFLAGS_LONG_SUBCLASS)
         || index_type == &PySlice_Type) {
@@ -4033,6 +4109,35 @@
 }
 
 static int
+validate_keywords(struct compiler *c, asdl_seq *keywords)
+{
+    Py_ssize_t nkeywords = asdl_seq_LEN(keywords);
+    for (Py_ssize_t i = 0; i < nkeywords; i++) {
+        keyword_ty key = ((keyword_ty)asdl_seq_GET(keywords, i));
+        if (key->arg == NULL) {
+            continue;
+        }
+        if (forbidden_name(c, key->arg, Store)) {
+            return -1;
+        }
+        for (Py_ssize_t j = i + 1; j < nkeywords; j++) {
+            keyword_ty other = ((keyword_ty)asdl_seq_GET(keywords, j));
+            if (other->arg && !PyUnicode_Compare(key->arg, other->arg)) {
+                PyObject *msg = PyUnicode_FromFormat("keyword argument repeated: %U", key->arg);
+                if (msg == NULL) {
+                    return -1;
+                }
+                c->u->u_col_offset = other->col_offset;
+                compiler_error(c, PyUnicode_AsUTF8(msg));
+                Py_DECREF(msg);
+                return -1;
+            }
+        }
+    }
+    return 0;
+}
+
+static int
 compiler_call(struct compiler *c, expr_ty e)
 {
     int ret = maybe_optimize_method_call(c, e);
@@ -4147,89 +4252,34 @@
                      asdl_seq *keywords)
 {
     Py_ssize_t i, nseen, nelts, nkwelts;
-    int mustdictunpack = 0;
 
-    /* the number of tuples and dictionaries on the stack */
-    Py_ssize_t nsubargs = 0, nsubkwargs = 0;
+    if (validate_keywords(c, keywords) == -1) {
+        return 0;
+    }
 
     nelts = asdl_seq_LEN(args);
     nkwelts = asdl_seq_LEN(keywords);
 
-    for (i = 0; i < nkwelts; i++) {
-        keyword_ty kw = asdl_seq_GET(keywords, i);
-        if (kw->arg == NULL) {
-            mustdictunpack = 1;
-            break;
-        }
-    }
-
-    nseen = n;  /* the number of positional arguments on the stack */
     for (i = 0; i < nelts; i++) {
         expr_ty elt = asdl_seq_GET(args, i);
         if (elt->kind == Starred_kind) {
-            /* A star-arg. If we've seen positional arguments,
-               pack the positional arguments into a tuple. */
-            if (nseen) {
-                ADDOP_I(c, BUILD_TUPLE, nseen);
-                nseen = 0;
-                nsubargs++;
-            }
-            VISIT(c, expr, elt->v.Starred.value);
-            nsubargs++;
+            goto ex_call;
         }
-        else {
-            VISIT(c, expr, elt);
-            nseen++;
+    }
+    for (i = 0; i < nkwelts; i++) {
+        keyword_ty kw = asdl_seq_GET(keywords, i);
+        if (kw->arg == NULL) {
+            goto ex_call;
         }
     }
 
-    /* Same dance again for keyword arguments */
-    if (nsubargs || mustdictunpack) {
-        if (nseen) {
-            /* Pack up any trailing positional arguments. */
-            ADDOP_I(c, BUILD_TUPLE, nseen);
-            nsubargs++;
-        }
-        if (nsubargs > 1) {
-            /* If we ended up with more than one stararg, we need
-               to concatenate them into a single sequence. */
-            ADDOP_I(c, BUILD_TUPLE_UNPACK_WITH_CALL, nsubargs);
-        }
-        else if (nsubargs == 0) {
-            ADDOP_I(c, BUILD_TUPLE, 0);
-        }
-        nseen = 0;  /* the number of keyword arguments on the stack following */
-        for (i = 0; i < nkwelts; i++) {
-            keyword_ty kw = asdl_seq_GET(keywords, i);
-            if (kw->arg == NULL) {
-                /* A keyword argument unpacking. */
-                if (nseen) {
-                    if (!compiler_subkwargs(c, keywords, i - nseen, i))
-                        return 0;
-                    nsubkwargs++;
-                    nseen = 0;
-                }
-                VISIT(c, expr, kw->value);
-                nsubkwargs++;
-            }
-            else {
-                nseen++;
-            }
-        }
-        if (nseen) {
-            /* Pack up any trailing keyword arguments. */
-            if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts))
-                return 0;
-            nsubkwargs++;
-        }
-        if (nsubkwargs > 1) {
-            /* Pack it all up */
-            ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs);
-        }
-        ADDOP_I(c, CALL_FUNCTION_EX, nsubkwargs > 0);
-        return 1;
+    /* No * or ** args, so can use faster calling sequence */
+    for (i = 0; i < nelts; i++) {
+        expr_ty elt = asdl_seq_GET(args, i);
+        assert(elt->kind != Starred_kind);
+        VISIT(c, expr, elt);
     }
-    else if (nkwelts) {
+    if (nkwelts) {
         PyObject *names;
         VISIT_SEQ(c, keyword, keywords);
         names = PyTuple_New(nkwelts);
@@ -4249,6 +4299,62 @@
         ADDOP_I(c, CALL_FUNCTION, n + nelts);
         return 1;
     }
+
+ex_call:
+
+    /* Do positional arguments. */
+    if (n ==0 && nelts == 1 && ((expr_ty)asdl_seq_GET(args, 0))->kind == Starred_kind) {
+        VISIT(c, expr, ((expr_ty)asdl_seq_GET(args, 0))->v.Starred.value);
+    }
+    else if (starunpack_helper(c, args, n, BUILD_LIST,
+                                 LIST_APPEND, LIST_EXTEND, 1) == 0) {
+        return 0;
+    }
+    /* Then keyword arguments */
+    if (nkwelts) {
+        /* Has a new dict been pushed */
+        int have_dict = 0;
+
+        nseen = 0;  /* the number of keyword arguments on the stack following */
+        for (i = 0; i < nkwelts; i++) {
+            keyword_ty kw = asdl_seq_GET(keywords, i);
+            if (kw->arg == NULL) {
+                /* A keyword argument unpacking. */
+                if (nseen) {
+                    if (!compiler_subkwargs(c, keywords, i - nseen, i)) {
+                        return 0;
+                    }
+                    if (have_dict) {
+                        ADDOP_I(c, DICT_MERGE, 1);
+                    }
+                    have_dict = 1;
+                    nseen = 0;
+                }
+                if (!have_dict) {
+                    ADDOP_I(c, BUILD_MAP, 0);
+                    have_dict = 1;
+                }
+                VISIT(c, expr, kw->value);
+                ADDOP_I(c, DICT_MERGE, 1);
+            }
+            else {
+                nseen++;
+            }
+        }
+        if (nseen) {
+            /* Pack up any trailing keyword arguments. */
+            if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts)) {
+                return 0;
+            }
+            if (have_dict) {
+                ADDOP_I(c, DICT_MERGE, 1);
+            }
+            have_dict = 1;
+        }
+        assert(have_dict);
+    }
+    ADDOP_I(c, CALL_FUNCTION_EX, nkwelts > 0);
+    return 1;
 }
 
 
@@ -4269,22 +4375,24 @@
 static int
 compiler_comprehension_generator(struct compiler *c,
                                  asdl_seq *generators, int gen_index,
+                                 int depth,
                                  expr_ty elt, expr_ty val, int type)
 {
     comprehension_ty gen;
     gen = (comprehension_ty)asdl_seq_GET(generators, gen_index);
     if (gen->is_async) {
         return compiler_async_comprehension_generator(
-            c, generators, gen_index, elt, val, type);
+            c, generators, gen_index, depth, elt, val, type);
     } else {
         return compiler_sync_comprehension_generator(
-            c, generators, gen_index, elt, val, type);
+            c, generators, gen_index, depth, elt, val, type);
     }
 }
 
 static int
 compiler_sync_comprehension_generator(struct compiler *c,
                                       asdl_seq *generators, int gen_index,
+                                      int depth,
                                       expr_ty elt, expr_ty val, int type)
 {
     /* generate code for the iterator, then each of the ifs,
@@ -4312,12 +4420,38 @@
     }
     else {
         /* Sub-iter - calculate on the fly */
-        VISIT(c, expr, gen->iter);
-        ADDOP(c, GET_ITER);
+        /* Fast path for the temporary variable assignment idiom:
+             for y in [f(x)]
+         */
+        asdl_seq *elts;
+        switch (gen->iter->kind) {
+            case List_kind:
+                elts = gen->iter->v.List.elts;
+                break;
+            case Tuple_kind:
+                elts = gen->iter->v.Tuple.elts;
+                break;
+            default:
+                elts = NULL;
+        }
+        if (asdl_seq_LEN(elts) == 1) {
+            expr_ty elt = asdl_seq_GET(elts, 0);
+            if (elt->kind != Starred_kind) {
+                VISIT(c, expr, elt);
+                start = NULL;
+            }
+        }
+        if (start) {
+            VISIT(c, expr, gen->iter);
+            ADDOP(c, GET_ITER);
+        }
     }
-    compiler_use_next_block(c, start);
-    ADDOP_JREL(c, FOR_ITER, anchor);
-    NEXT_BLOCK(c);
+    if (start) {
+        depth++;
+        compiler_use_next_block(c, start);
+        ADDOP_JREL(c, FOR_ITER, anchor);
+        NEXT_BLOCK(c);
+    }
     VISIT(c, expr, gen->target);
 
     /* XXX this needs to be cleaned up...a lot! */
@@ -4331,7 +4465,7 @@
 
     if (++gen_index < asdl_seq_LEN(generators))
         if (!compiler_comprehension_generator(c,
-                                              generators, gen_index,
+                                              generators, gen_index, depth,
                                               elt, val, type))
         return 0;
 
@@ -4346,18 +4480,18 @@
             break;
         case COMP_LISTCOMP:
             VISIT(c, expr, elt);
-            ADDOP_I(c, LIST_APPEND, gen_index + 1);
+            ADDOP_I(c, LIST_APPEND, depth + 1);
             break;
         case COMP_SETCOMP:
             VISIT(c, expr, elt);
-            ADDOP_I(c, SET_ADD, gen_index + 1);
+            ADDOP_I(c, SET_ADD, depth + 1);
             break;
         case COMP_DICTCOMP:
             /* With '{k: v}', k is evaluated before v, so we do
                the same. */
             VISIT(c, expr, elt);
             VISIT(c, expr, val);
-            ADDOP_I(c, MAP_ADD, gen_index + 1);
+            ADDOP_I(c, MAP_ADD, depth + 1);
             break;
         default:
             return 0;
@@ -4366,8 +4500,10 @@
         compiler_use_next_block(c, skip);
     }
     compiler_use_next_block(c, if_cleanup);
-    ADDOP_JABS(c, JUMP_ABSOLUTE, start);
-    compiler_use_next_block(c, anchor);
+    if (start) {
+        ADDOP_JABS(c, JUMP_ABSOLUTE, start);
+        compiler_use_next_block(c, anchor);
+    }
 
     return 1;
 }
@@ -4375,6 +4511,7 @@
 static int
 compiler_async_comprehension_generator(struct compiler *c,
                                       asdl_seq *generators, int gen_index,
+                                      int depth,
                                       expr_ty elt, expr_ty val, int type)
 {
     comprehension_ty gen;
@@ -4418,9 +4555,10 @@
         NEXT_BLOCK(c);
     }
 
+    depth++;
     if (++gen_index < asdl_seq_LEN(generators))
         if (!compiler_comprehension_generator(c,
-                                              generators, gen_index,
+                                              generators, gen_index, depth,
                                               elt, val, type))
         return 0;
 
@@ -4435,18 +4573,18 @@
             break;
         case COMP_LISTCOMP:
             VISIT(c, expr, elt);
-            ADDOP_I(c, LIST_APPEND, gen_index + 1);
+            ADDOP_I(c, LIST_APPEND, depth + 1);
             break;
         case COMP_SETCOMP:
             VISIT(c, expr, elt);
-            ADDOP_I(c, SET_ADD, gen_index + 1);
+            ADDOP_I(c, SET_ADD, depth + 1);
             break;
         case COMP_DICTCOMP:
             /* With '{k: v}', k is evaluated before v, so we do
                the same. */
             VISIT(c, expr, elt);
             VISIT(c, expr, val);
-            ADDOP_I(c, MAP_ADD, gen_index + 1);
+            ADDOP_I(c, MAP_ADD, depth + 1);
             break;
         default:
             return 0;
@@ -4511,7 +4649,7 @@
         ADDOP_I(c, op, 0);
     }
 
-    if (!compiler_comprehension_generator(c, generators, 0, elt,
+    if (!compiler_comprehension_generator(c, generators, 0, 0, elt,
                                           val, type))
         goto error_in_scope;
 
@@ -4643,6 +4781,22 @@
     return -1;
 }
 
+static int
+compiler_with_except_finish(struct compiler *c) {
+    basicblock *exit;
+    exit = compiler_new_block(c);
+    if (exit == NULL)
+        return 0;
+    ADDOP_JABS(c, POP_JUMP_IF_TRUE, exit);
+    ADDOP(c, RERAISE);
+    compiler_use_next_block(c, exit);
+    ADDOP(c, POP_TOP);
+    ADDOP(c, POP_TOP);
+    ADDOP(c, POP_TOP);
+    ADDOP(c, POP_EXCEPT);
+    ADDOP(c, POP_TOP);
+    return 1;
+}
 
 /*
    Implements the async with statement.
@@ -4671,7 +4825,7 @@
 static int
 compiler_async_with(struct compiler *c, stmt_ty s, int pos)
 {
-    basicblock *block, *finally;
+    basicblock *block, *final, *exit;
     withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos);
 
     assert(s->kind == AsyncWith_kind);
@@ -4682,8 +4836,9 @@
     }
 
     block = compiler_new_block(c);
-    finally = compiler_new_block(c);
-    if (!block || !finally)
+    final = compiler_new_block(c);
+    exit = compiler_new_block(c);
+    if (!block || !final || !exit)
         return 0;
 
     /* Evaluate EXPR */
@@ -4694,11 +4849,11 @@
     ADDOP_LOAD_CONST(c, Py_None);
     ADDOP(c, YIELD_FROM);
 
-    ADDOP_JREL(c, SETUP_ASYNC_WITH, finally);
+    ADDOP_JREL(c, SETUP_ASYNC_WITH, final);
 
     /* SETUP_ASYNC_WITH pushes a finally block. */
     compiler_use_next_block(c, block);
-    if (!compiler_push_fblock(c, ASYNC_WITH, block, finally)) {
+    if (!compiler_push_fblock(c, ASYNC_WITH, block, final, NULL)) {
         return 0;
     }
 
@@ -4717,76 +4872,80 @@
     else if (!compiler_async_with(c, s, pos))
             return 0;
 
-    /* End of try block; start the finally block */
-    ADDOP(c, POP_BLOCK);
-    ADDOP(c, BEGIN_FINALLY);
     compiler_pop_fblock(c, ASYNC_WITH, block);
+    ADDOP(c, POP_BLOCK);
+    /* End of body; start the cleanup */
 
-    compiler_use_next_block(c, finally);
-    if (!compiler_push_fblock(c, FINALLY_END, finally, NULL))
+    /* For successful outcome:
+     * call __exit__(None, None, None)
+     */
+    if(!compiler_call_exit_with_nones(c))
         return 0;
+    ADDOP(c, GET_AWAITABLE);
+    ADDOP_O(c, LOAD_CONST, Py_None, consts);
+    ADDOP(c, YIELD_FROM);
 
-    /* Finally block starts; context.__exit__ is on the stack under
-       the exception or return information. Just issue our magic
-       opcode. */
-    ADDOP(c, WITH_CLEANUP_START);
+    ADDOP(c, POP_TOP);
 
+    ADDOP_JABS(c, JUMP_ABSOLUTE, exit);
+
+    /* For exceptional outcome: */
+    compiler_use_next_block(c, final);
+
+    ADDOP(c, WITH_EXCEPT_START);
     ADDOP(c, GET_AWAITABLE);
     ADDOP_LOAD_CONST(c, Py_None);
     ADDOP(c, YIELD_FROM);
+    compiler_with_except_finish(c);
 
-    ADDOP(c, WITH_CLEANUP_FINISH);
-
-    /* Finally block ends. */
-    ADDOP(c, END_FINALLY);
-    compiler_pop_fblock(c, FINALLY_END, finally);
+compiler_use_next_block(c, exit);
     return 1;
 }
 
 
 /*
    Implements the with statement from PEP 343.
-
-   The semantics outlined in that PEP are as follows:
-
    with EXPR as VAR:
        BLOCK
-
-   It is implemented roughly as:
-
-   context = EXPR
-   exit = context.__exit__  # not calling it
-   value = context.__enter__()
-   try:
-       VAR = value  # if VAR present in the syntax
-       BLOCK
-   finally:
-       if an exception was raised:
-           exc = copy of (exception, instance, traceback)
-       else:
-           exc = (None, None, None)
-       exit(*exc)
+   is implemented as:
+        <code for EXPR>
+        SETUP_WITH  E
+        <code to store to VAR> or POP_TOP
+        <code for BLOCK>
+        LOAD_CONST (None, None, None)
+        CALL_FUNCTION_EX 0
+        JUMP_FORWARD  EXIT
+    E:  WITH_EXCEPT_START (calls EXPR.__exit__)
+        POP_JUMP_IF_TRUE T:
+        RERAISE
+    T:  POP_TOP * 3 (remove exception from stack)
+        POP_EXCEPT
+        POP_TOP
+    EXIT:
  */
+
 static int
 compiler_with(struct compiler *c, stmt_ty s, int pos)
 {
-    basicblock *block, *finally;
+    basicblock *block, *final, *exit;
     withitem_ty item = asdl_seq_GET(s->v.With.items, pos);
 
     assert(s->kind == With_kind);
 
     block = compiler_new_block(c);
-    finally = compiler_new_block(c);
-    if (!block || !finally)
+    final = compiler_new_block(c);
+    exit = compiler_new_block(c);
+    if (!block || !final || !exit)
         return 0;
 
     /* Evaluate EXPR */
     VISIT(c, expr, item->context_expr);
-    ADDOP_JREL(c, SETUP_WITH, finally);
+    /* Will push bound __exit__ */
+    ADDOP_JREL(c, SETUP_WITH, final);
 
     /* SETUP_WITH pushes a finally block. */
     compiler_use_next_block(c, block);
-    if (!compiler_push_fblock(c, WITH, block, finally)) {
+    if (!compiler_push_fblock(c, WITH, block, final, NULL)) {
         return 0;
     }
 
@@ -4805,24 +4964,26 @@
     else if (!compiler_with(c, s, pos))
             return 0;
 
-    /* End of try block; start the finally block */
     ADDOP(c, POP_BLOCK);
-    ADDOP(c, BEGIN_FINALLY);
     compiler_pop_fblock(c, WITH, block);
 
-    compiler_use_next_block(c, finally);
-    if (!compiler_push_fblock(c, FINALLY_END, finally, NULL))
+    /* End of body; start the cleanup. */
+
+    /* For successful outcome:
+     * call __exit__(None, None, None)
+     */
+    if (!compiler_call_exit_with_nones(c))
         return 0;
+    ADDOP(c, POP_TOP);
+    ADDOP_JREL(c, JUMP_FORWARD, exit);
 
-    /* Finally block starts; context.__exit__ is on the stack under
-       the exception or return information. Just issue our magic
-       opcode. */
-    ADDOP(c, WITH_CLEANUP_START);
-    ADDOP(c, WITH_CLEANUP_FINISH);
+    /* For exceptional outcome: */
+    compiler_use_next_block(c, final);
 
-    /* Finally block ends. */
-    ADDOP(c, END_FINALLY);
-    compiler_pop_fblock(c, FINALLY_END, finally);
+    ADDOP(c, WITH_EXCEPT_START);
+    compiler_with_except_finish(c);
+
+    compiler_use_next_block(c, exit);
     return 1;
 }
 
@@ -4840,7 +5001,7 @@
     case BinOp_kind:
         VISIT(c, expr, e->v.BinOp.left);
         VISIT(c, expr, e->v.BinOp.right);
-        ADDOP(c, binop(c, e->v.BinOp.op));
+        ADDOP(c, binop(e->v.BinOp.op));
         break;
     case UnaryOp_kind:
         VISIT(c, expr, e->v.UnaryOp.operand);
@@ -4915,65 +5076,23 @@
         return compiler_formatted_value(c, e);
     /* The following exprs can be assignment targets. */
     case Attribute_kind:
-        if (e->v.Attribute.ctx != AugStore)
-            VISIT(c, expr, e->v.Attribute.value);
+        VISIT(c, expr, e->v.Attribute.value);
         switch (e->v.Attribute.ctx) {
-        case AugLoad:
-            ADDOP(c, DUP_TOP);
-            /* Fall through */
         case Load:
             ADDOP_NAME(c, LOAD_ATTR, e->v.Attribute.attr, names);
             break;
-        case AugStore:
-            ADDOP(c, ROT_TWO);
-            /* Fall through */
         case Store:
+            if (forbidden_name(c, e->v.Attribute.attr, e->v.Attribute.ctx))
+                return 0;
             ADDOP_NAME(c, STORE_ATTR, e->v.Attribute.attr, names);
             break;
         case Del:
             ADDOP_NAME(c, DELETE_ATTR, e->v.Attribute.attr, names);
             break;
-        case Param:
-        default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid in attribute expression");
-            return 0;
         }
         break;
     case Subscript_kind:
-        switch (e->v.Subscript.ctx) {
-        case AugLoad:
-            VISIT(c, expr, e->v.Subscript.value);
-            VISIT_SLICE(c, e->v.Subscript.slice, AugLoad);
-            break;
-        case Load:
-            if (!check_subscripter(c, e->v.Subscript.value)) {
-                return 0;
-            }
-            if (!check_index(c, e->v.Subscript.value, e->v.Subscript.slice)) {
-                return 0;
-            }
-            VISIT(c, expr, e->v.Subscript.value);
-            VISIT_SLICE(c, e->v.Subscript.slice, Load);
-            break;
-        case AugStore:
-            VISIT_SLICE(c, e->v.Subscript.slice, AugStore);
-            break;
-        case Store:
-            VISIT(c, expr, e->v.Subscript.value);
-            VISIT_SLICE(c, e->v.Subscript.slice, Store);
-            break;
-        case Del:
-            VISIT(c, expr, e->v.Subscript.value);
-            VISIT_SLICE(c, e->v.Subscript.slice, Del);
-            break;
-        case Param:
-        default:
-            PyErr_SetString(PyExc_SystemError,
-                "param invalid in subscript expression");
-            return 0;
-        }
-        break;
+        return compiler_subscript(c, e);
     case Starred_kind:
         switch (e->v.Starred.ctx) {
         case Store:
@@ -4985,6 +5104,9 @@
             return compiler_error(c,
                 "can't use starred expression here");
         }
+        break;
+    case Slice_kind:
+        return compiler_slice(c, e);
     case Name_kind:
         return compiler_nameop(c, e->v.Name.id, e->v.Name.ctx);
     /* child nodes of List and Tuple will have expr_context set */
@@ -4999,24 +5121,11 @@
 static int
 compiler_visit_expr(struct compiler *c, expr_ty e)
 {
-    /* If expr e has a different line number than the last expr/stmt,
-       set a new line number for the next instruction.
-    */
     int old_lineno = c->u->u_lineno;
     int old_col_offset = c->u->u_col_offset;
-    if (e->lineno != c->u->u_lineno) {
-        c->u->u_lineno = e->lineno;
-        c->u->u_lineno_set = 0;
-    }
-    /* Updating the column offset is always harmless. */
-    c->u->u_col_offset = e->col_offset;
-
+    SET_LOC(c, e);
     int res = compiler_visit_expr1(c, e);
-
-    if (old_lineno != c->u->u_lineno) {
-        c->u->u_lineno = old_lineno;
-        c->u->u_lineno_set = 0;
-    }
+    c->u->u_lineno = old_lineno;
     c->u->u_col_offset = old_col_offset;
     return res;
 }
@@ -5024,48 +5133,58 @@
 static int
 compiler_augassign(struct compiler *c, stmt_ty s)
 {
-    expr_ty e = s->v.AugAssign.target;
-    expr_ty auge;
-
     assert(s->kind == AugAssign_kind);
+    expr_ty e = s->v.AugAssign.target;
+
+    int old_lineno = c->u->u_lineno;
+    int old_col_offset = c->u->u_col_offset;
+    SET_LOC(c, e);
 
     switch (e->kind) {
     case Attribute_kind:
-        auge = Attribute(e->v.Attribute.value, e->v.Attribute.attr,
-                         AugLoad, e->lineno, e->col_offset,
-                         e->end_lineno, e->end_col_offset, c->c_arena);
-        if (auge == NULL)
-            return 0;
-        VISIT(c, expr, auge);
-        VISIT(c, expr, s->v.AugAssign.value);
-        ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
-        auge->v.Attribute.ctx = AugStore;
-        VISIT(c, expr, auge);
+        VISIT(c, expr, e->v.Attribute.value);
+        ADDOP(c, DUP_TOP);
+        ADDOP_NAME(c, LOAD_ATTR, e->v.Attribute.attr, names);
         break;
     case Subscript_kind:
-        auge = Subscript(e->v.Subscript.value, e->v.Subscript.slice,
-                         AugLoad, e->lineno, e->col_offset,
-                         e->end_lineno, e->end_col_offset, c->c_arena);
-        if (auge == NULL)
-            return 0;
-        VISIT(c, expr, auge);
-        VISIT(c, expr, s->v.AugAssign.value);
-        ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
-        auge->v.Subscript.ctx = AugStore;
-        VISIT(c, expr, auge);
+        VISIT(c, expr, e->v.Subscript.value);
+        VISIT(c, expr, e->v.Subscript.slice);
+        ADDOP(c, DUP_TOP_TWO);
+        ADDOP(c, BINARY_SUBSCR);
         break;
     case Name_kind:
         if (!compiler_nameop(c, e->v.Name.id, Load))
             return 0;
-        VISIT(c, expr, s->v.AugAssign.value);
-        ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
-        return compiler_nameop(c, e->v.Name.id, Store);
+        break;
     default:
         PyErr_Format(PyExc_SystemError,
             "invalid node type (%d) for augmented assignment",
             e->kind);
         return 0;
     }
+
+    c->u->u_lineno = old_lineno;
+    c->u->u_col_offset = old_col_offset;
+
+    VISIT(c, expr, s->v.AugAssign.value);
+    ADDOP(c, inplace_binop(s->v.AugAssign.op));
+
+    SET_LOC(c, e);
+
+    switch (e->kind) {
+    case Attribute_kind:
+        ADDOP(c, ROT_TWO);
+        ADDOP_NAME(c, STORE_ATTR, e->v.Attribute.attr, names);
+        break;
+    case Subscript_kind:
+        ADDOP(c, ROT_THREE);
+        ADDOP(c, STORE_SUBSCR);
+        break;
+    case Name_kind:
+        return compiler_nameop(c, e->v.Name.id, Store);
+    default:
+        Py_UNREACHABLE();
+    }
     return 1;
 }
 
@@ -5089,68 +5208,35 @@
 }
 
 static int
-check_ann_slice(struct compiler *c, slice_ty sl)
-{
-    switch(sl->kind) {
-    case Index_kind:
-        return check_ann_expr(c, sl->v.Index.value);
-    case Slice_kind:
-        if (sl->v.Slice.lower && !check_ann_expr(c, sl->v.Slice.lower)) {
-            return 0;
-        }
-        if (sl->v.Slice.upper && !check_ann_expr(c, sl->v.Slice.upper)) {
-            return 0;
-        }
-        if (sl->v.Slice.step && !check_ann_expr(c, sl->v.Slice.step)) {
-            return 0;
-        }
-        break;
-    default:
-        PyErr_SetString(PyExc_SystemError,
-                        "unexpected slice kind");
-        return 0;
-    }
-    return 1;
-}
-
-static int
-check_ann_subscr(struct compiler *c, slice_ty sl)
+check_ann_subscr(struct compiler *c, expr_ty e)
 {
     /* We check that everything in a subscript is defined at runtime. */
-    Py_ssize_t i, n;
-
-    switch (sl->kind) {
-    case Index_kind:
+    switch (e->kind) {
     case Slice_kind:
-        if (!check_ann_slice(c, sl)) {
+        if (e->v.Slice.lower && !check_ann_expr(c, e->v.Slice.lower)) {
             return 0;
         }
-        break;
-    case ExtSlice_kind:
-        n = asdl_seq_LEN(sl->v.ExtSlice.dims);
+        if (e->v.Slice.upper && !check_ann_expr(c, e->v.Slice.upper)) {
+            return 0;
+        }
+        if (e->v.Slice.step && !check_ann_expr(c, e->v.Slice.step)) {
+            return 0;
+        }
+        return 1;
+    case Tuple_kind: {
+        /* extended slice */
+        asdl_seq *elts = e->v.Tuple.elts;
+        Py_ssize_t i, n = asdl_seq_LEN(elts);
         for (i = 0; i < n; i++) {
-            slice_ty subsl = (slice_ty)asdl_seq_GET(sl->v.ExtSlice.dims, i);
-            switch (subsl->kind) {
-            case Index_kind:
-            case Slice_kind:
-                if (!check_ann_slice(c, subsl)) {
-                    return 0;
-                }
-                break;
-            case ExtSlice_kind:
-            default:
-                PyErr_SetString(PyExc_SystemError,
-                                "extended slice invalid in nested slice");
+            if (!check_ann_subscr(c, asdl_seq_GET(elts, i))) {
                 return 0;
             }
         }
-        break;
-    default:
-        PyErr_Format(PyExc_SystemError,
-                     "invalid subscript kind %d", sl->kind);
-        return 0;
+        return 1;
     }
-    return 1;
+    default:
+        return check_ann_expr(c, e);
+    }
 }
 
 static int
@@ -5168,6 +5254,8 @@
     }
     switch (targ->kind) {
     case Name_kind:
+        if (forbidden_name(c, targ->v.Name.id, Store))
+            return 0;
         /* If we have a simple name in a module or class, store annotation. */
         if (s->v.AnnAssign.simple &&
             (c->u->u_scope_type == COMPILER_SCOPE_MODULE ||
@@ -5185,6 +5273,8 @@
         }
         break;
     case Attribute_kind:
+        if (forbidden_name(c, targ->v.Attribute.attr, Store))
+            return 0;
         if (!s->v.AnnAssign.value &&
             !check_ann_expr(c, targ->v.Attribute.value)) {
             return 0;
@@ -5276,36 +5366,34 @@
 }
 
 static int
-compiler_handle_subscr(struct compiler *c, const char *kind,
-                       expr_context_ty ctx)
+compiler_subscript(struct compiler *c, expr_ty e)
 {
+    expr_context_ty ctx = e->v.Subscript.ctx;
     int op = 0;
 
-    /* XXX this code is duplicated */
+    if (ctx == Load) {
+        if (!check_subscripter(c, e->v.Subscript.value)) {
+            return 0;
+        }
+        if (!check_index(c, e->v.Subscript.value, e->v.Subscript.slice)) {
+            return 0;
+        }
+    }
+
     switch (ctx) {
-        case AugLoad: /* fall through to Load */
         case Load:    op = BINARY_SUBSCR; break;
-        case AugStore:/* fall through to Store */
         case Store:   op = STORE_SUBSCR; break;
         case Del:     op = DELETE_SUBSCR; break;
-        case Param:
-            PyErr_Format(PyExc_SystemError,
-                         "invalid %s kind %d in subscript\n",
-                         kind, ctx);
-            return 0;
     }
-    if (ctx == AugLoad) {
-        ADDOP(c, DUP_TOP_TWO);
-    }
-    else if (ctx == AugStore) {
-        ADDOP(c, ROT_THREE);
-    }
+    assert(op);
+    VISIT(c, expr, e->v.Subscript.value);
+    VISIT(c, expr, e->v.Subscript.slice);
     ADDOP(c, op);
     return 1;
 }
 
 static int
-compiler_slice(struct compiler *c, slice_ty s, expr_context_ty ctx)
+compiler_slice(struct compiler *c, expr_ty s)
 {
     int n = 2;
     assert(s->kind == Slice_kind);
@@ -5333,64 +5421,6 @@
     return 1;
 }
 
-static int
-compiler_visit_nested_slice(struct compiler *c, slice_ty s,
-                            expr_context_ty ctx)
-{
-    switch (s->kind) {
-    case Slice_kind:
-        return compiler_slice(c, s, ctx);
-    case Index_kind:
-        VISIT(c, expr, s->v.Index.value);
-        break;
-    case ExtSlice_kind:
-    default:
-        PyErr_SetString(PyExc_SystemError,
-                        "extended slice invalid in nested slice");
-        return 0;
-    }
-    return 1;
-}
-
-static int
-compiler_visit_slice(struct compiler *c, slice_ty s, expr_context_ty ctx)
-{
-    const char * kindname = NULL;
-    switch (s->kind) {
-    case Index_kind:
-        kindname = "index";
-        if (ctx != AugStore) {
-            VISIT(c, expr, s->v.Index.value);
-        }
-        break;
-    case Slice_kind:
-        kindname = "slice";
-        if (ctx != AugStore) {
-            if (!compiler_slice(c, s, ctx))
-                return 0;
-        }
-        break;
-    case ExtSlice_kind:
-        kindname = "extended slice";
-        if (ctx != AugStore) {
-            Py_ssize_t i, n = asdl_seq_LEN(s->v.ExtSlice.dims);
-            for (i = 0; i < n; i++) {
-                slice_ty sub = (slice_ty)asdl_seq_GET(
-                    s->v.ExtSlice.dims, i);
-                if (!compiler_visit_nested_slice(c, sub, ctx))
-                    return 0;
-            }
-            ADDOP_I(c, BUILD_TUPLE, n);
-        }
-        break;
-    default:
-        PyErr_Format(PyExc_SystemError,
-                     "invalid subscript kind %d", s->kind);
-        return 0;
-    }
-    return compiler_handle_subscr(c, kindname, ctx);
-}
-
 /* End of the compiler section, beginning of the assembler section */
 
 /* do depth-first search of basic block graph, starting with block.
@@ -5440,7 +5470,7 @@
 stackdepth_push(basicblock ***sp, basicblock *b, int depth)
 {
     assert(b->b_startdepth < 0 || b->b_startdepth == depth);
-    if (b->b_startdepth < depth) {
+    if (b->b_startdepth < depth && b->b_startdepth < 100) {
         assert(b->b_startdepth < 0);
         b->b_startdepth = depth;
         *(*sp)++ = b;
@@ -5480,8 +5510,8 @@
             struct instr *instr = &b->b_instr[i];
             int effect = stack_effect(instr->i_opcode, instr->i_oparg, 0);
             if (effect == PY_INVALID_STACK_EFFECT) {
-                fprintf(stderr, "opcode = %d\n", instr->i_opcode);
-                Py_FatalError("PyCompile_OpcodeStackEffect()");
+                _Py_FatalErrorFormat(__func__,
+                    "opcode = %d", instr->i_opcode);
             }
             int new_depth = depth + effect;
             if (new_depth > maxdepth) {
@@ -5496,19 +5526,14 @@
                     maxdepth = target_depth;
                 }
                 assert(target_depth >= 0); /* invalid code or bug in stackdepth() */
-                if (instr->i_opcode == CALL_FINALLY) {
-                    assert(instr->i_target->b_startdepth >= 0);
-                    assert(instr->i_target->b_startdepth >= target_depth);
-                    depth = new_depth;
-                    continue;
-                }
                 stackdepth_push(&sp, instr->i_target, target_depth);
             }
             depth = new_depth;
             if (instr->i_opcode == JUMP_ABSOLUTE ||
                 instr->i_opcode == JUMP_FORWARD ||
                 instr->i_opcode == RETURN_VALUE ||
-                instr->i_opcode == RAISE_VARARGS)
+                instr->i_opcode == RAISE_VARARGS ||
+                instr->i_opcode == RERAISE)
             {
                 /* remaining code is dead */
                 next = NULL;
@@ -5578,13 +5603,13 @@
     Py_ssize_t len;
     unsigned char *lnotab;
 
-    d_bytecode = (a->a_offset - a->a_lineno_off) * sizeof(_Py_CODEUNIT);
     d_lineno = i->i_lineno - a->a_lineno;
-
-    assert(d_bytecode >= 0);
-
-    if(d_bytecode == 0 && d_lineno == 0)
+    if (d_lineno == 0) {
         return 1;
+    }
+
+    d_bytecode = (a->a_offset - a->a_lineno_off) * sizeof(_Py_CODEUNIT);
+    assert(d_bytecode >= 0);
 
     if (d_bytecode > 255) {
         int j, nbytes, ncodes = d_bytecode / 255;
@@ -5934,7 +5959,7 @@
         goto error;
     }
     co = PyCode_NewWithPosOnlyArgs(posonlyargcount+posorkeywordargcount,
-                                   posonlyargcount, kwonlyargcount, nlocals_int, 
+                                   posonlyargcount, kwonlyargcount, nlocals_int,
                                    maxdepth, flags, bytecode, consts, names,
                                    varnames, freevars, cellvars, c->c_filename,
                                    c->u->u_name, c->u->u_firstlineno, a->a_lnotab);
diff --git a/Python/context.c b/Python/context.c
index 5c30e47..bacc701 100644
--- a/Python/context.c
+++ b/Python/context.c
@@ -1,10 +1,12 @@
 #include "Python.h"
 
 #include "pycore_context.h"
+#include "pycore_gc.h"            // _PyObject_GC_MAY_BE_TRACKED()
 #include "pycore_hamt.h"
 #include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+#include "structmember.h"         // PyMemberDef
 
 
 #define CONTEXT_FREELIST_MAXLEN 255
@@ -101,21 +103,18 @@
 }
 
 
-int
-PyContext_Enter(PyObject *octx)
+static int
+_PyContext_Enter(PyThreadState *ts, PyObject *octx)
 {
     ENSURE_Context(octx, -1)
     PyContext *ctx = (PyContext *)octx;
 
     if (ctx->ctx_entered) {
-        PyErr_Format(PyExc_RuntimeError,
-                     "cannot enter context: %R is already entered", ctx);
+        _PyErr_Format(ts, PyExc_RuntimeError,
+                      "cannot enter context: %R is already entered", ctx);
         return -1;
     }
 
-    PyThreadState *ts = _PyThreadState_GET();
-    assert(ts != NULL);
-
     ctx->ctx_prev = (PyContext *)ts->context;  /* borrow */
     ctx->ctx_entered = 1;
 
@@ -128,7 +127,16 @@
 
 
 int
-PyContext_Exit(PyObject *octx)
+PyContext_Enter(PyObject *octx)
+{
+    PyThreadState *ts = _PyThreadState_GET();
+    assert(ts != NULL);
+    return _PyContext_Enter(ts, octx);
+}
+
+
+static int
+_PyContext_Exit(PyThreadState *ts, PyObject *octx)
 {
     ENSURE_Context(octx, -1)
     PyContext *ctx = (PyContext *)octx;
@@ -139,9 +147,6 @@
         return -1;
     }
 
-    PyThreadState *ts = _PyThreadState_GET();
-    assert(ts != NULL);
-
     if (ts->context != (PyObject *)ctx) {
         /* Can only happen if someone misuses the C API */
         PyErr_SetString(PyExc_RuntimeError,
@@ -159,6 +164,14 @@
     return 0;
 }
 
+int
+PyContext_Exit(PyObject *octx)
+{
+    PyThreadState *ts = _PyThreadState_GET();
+    assert(ts != NULL);
+    return _PyContext_Exit(ts, octx);
+}
+
 
 PyObject *
 PyContextVar_New(const char *name, PyObject *def)
@@ -621,20 +634,22 @@
 context_run(PyContext *self, PyObject *const *args,
             Py_ssize_t nargs, PyObject *kwnames)
 {
+    PyThreadState *ts = _PyThreadState_GET();
+
     if (nargs < 1) {
-        PyErr_SetString(PyExc_TypeError,
-                        "run() missing 1 required positional argument");
+        _PyErr_SetString(ts, PyExc_TypeError,
+                         "run() missing 1 required positional argument");
         return NULL;
     }
 
-    if (PyContext_Enter((PyObject *)self)) {
+    if (_PyContext_Enter(ts, (PyObject *)self)) {
         return NULL;
     }
 
-    PyObject *call_result = _PyObject_Vectorcall(
-        args[0], args + 1, nargs - 1, kwnames);
+    PyObject *call_result = _PyObject_VectorcallTstate(
+        ts, args[0], args + 1, nargs - 1, kwnames);
 
-    if (PyContext_Exit((PyObject *)self)) {
+    if (_PyContext_Exit(ts, (PyObject *)self)) {
         return NULL;
     }
 
@@ -1009,13 +1024,6 @@
 }
 
 
-static PyObject *
-contextvar_cls_getitem(PyObject *self, PyObject *arg)
-{
-    Py_INCREF(self);
-    return self;
-}
-
 static PyMemberDef PyContextVar_members[] = {
     {"name", T_OBJECT, offsetof(PyContextVar, var_name), READONLY},
     {NULL}
@@ -1025,8 +1033,8 @@
     _CONTEXTVARS_CONTEXTVAR_GET_METHODDEF
     _CONTEXTVARS_CONTEXTVAR_SET_METHODDEF
     _CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF
-    {"__class_getitem__", contextvar_cls_getitem,
-        METH_O | METH_CLASS, NULL},
+    {"__class_getitem__", (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL, NULL}
 };
 
@@ -1165,10 +1173,17 @@
     {NULL}
 };
 
+static PyMethodDef PyContextTokenType_methods[] = {
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
+    {NULL}
+};
+
 PyTypeObject PyContextToken_Type = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "Token",
     sizeof(PyContextToken),
+    .tp_methods = PyContextTokenType_methods,
     .tp_getset = PyContextTokenType_getsetlist,
     .tp_dealloc = (destructor)token_tp_dealloc,
     .tp_getattro = PyObject_GenericGetAttr,
@@ -1255,18 +1270,15 @@
 ///////////////////////////
 
 
-int
-PyContext_ClearFreeList(void)
+void
+_PyContext_ClearFreeList(void)
 {
-    int size = ctx_freelist_len;
-    while (ctx_freelist_len) {
+    for (; ctx_freelist_len; ctx_freelist_len--) {
         PyContext *ctx = ctx_freelist;
         ctx_freelist = (PyContext *)ctx->ctx_weakreflist;
         ctx->ctx_weakreflist = NULL;
         PyObject_GC_Del(ctx);
-        ctx_freelist_len--;
     }
-    return size;
 }
 
 
@@ -1274,8 +1286,8 @@
 _PyContext_Fini(void)
 {
     Py_CLEAR(_token_missing);
-    (void)PyContext_ClearFreeList();
-    (void)_PyHamt_Fini();
+    _PyContext_ClearFreeList();
+    _PyHamt_Fini();
 }
 
 
diff --git a/Python/dtoa.c b/Python/dtoa.c
index b7bb7ac..e629b29 100644
--- a/Python/dtoa.c
+++ b/Python/dtoa.c
@@ -64,6 +64,9 @@
  *  7. _Py_dg_strtod has been modified so that it doesn't accept strings with
  *     leading whitespace.
  *
+ *  8. A corner case where _Py_dg_dtoa didn't strip trailing zeros has been
+ *     fixed. (bugs.python.org/issue40780)
+ *
  ***************************************************************/
 
 /* Please send bug reports for the original dtoa.c code to David M. Gay (dmg
@@ -115,6 +118,7 @@
 /* Linking of Python's #defines to Gay's #defines starts here. */
 
 #include "Python.h"
+#include "pycore_dtoa.h"
 
 /* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
    the following code */
@@ -2562,6 +2566,14 @@
                         }
                     ++*s++;
                 }
+                else {
+                    /* Strip trailing zeros. This branch was missing from the
+                       original dtoa.c, leading to surplus trailing zeros in
+                       some cases. See bugs.python.org/issue40780. */
+                    while (s > s0 && s[-1] == '0') {
+                        --s;
+                    }
+                }
                 break;
             }
         }
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index b3ff8e2..97f7698 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -140,14 +140,20 @@
             if (nerr == load_errtab[j].errNo && load_errtab[j].errstr)
             ERRBUF_APPEND(load_errtab[j].errstr);
         }
-        while (Py_ISDIGIT(Py_CHARMASK(*message[i]))) message[i]++ ;
+        while (Py_ISDIGIT(*message[i])) message[i]++ ;
         ERRBUF_APPEND(message[i]);
         ERRBUF_APPEND("\n");
     }
-    errbuf[strlen(errbuf)-1] = '\0';            /* trim off last newline */
-    pathname_ob = PyUnicode_FromString(pathname);
-    errbuf_ob = PyUnicode_FromString(errbuf);
-    PyErr_SetImportError(errbuf_ob, NULL, pathname);
+    /* Subtract 1 from the length to trim off trailing newline */
+    errbuf_ob = PyUnicode_DecodeLocaleAndSize(errbuf, strlen(errbuf)-1, "surrogateescape");
+    if (errbuf_ob == NULL)
+        return;
+    pathname_ob = PyUnicode_DecodeFSDefault(pathname);
+    if (pathname_ob == NULL) {
+        Py_DECREF(errbuf_ob);
+        return;
+    }
+    PyErr_SetImportError(errbuf_ob, NULL, pathname_ob);
     Py_DECREF(pathname_ob);
     Py_DECREF(errbuf_ob);
     return;
diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c
index e59d004..e36d608 100644
--- a/Python/dynload_hpux.c
+++ b/Python/dynload_hpux.c
@@ -6,7 +6,6 @@
 
 #include "Python.h"
 #include "importdl.h"
-#include "pycore_pystate.h"
 
 #if defined(__hp9000s300)
 #define FUNCNAME_PATTERN "_%.20s_%.200s"
@@ -21,7 +20,7 @@
                                        const char *pathname, FILE *fp)
 {
     int flags = BIND_FIRST | BIND_DEFERRED;
-    int verbose = _PyInterpreterState_GET_UNSAFE()->config.verbose;
+    int verbose = _Py_GetConfig()->verbose;
     if (verbose) {
         flags = BIND_FIRST | BIND_IMMEDIATE |
             BIND_NONFATAL | BIND_VERBOSE;
@@ -37,9 +36,20 @@
         char buf[256];
         PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s",
                       pathname);
-        PyObject *buf_ob = PyUnicode_FromString(buf);
+        PyObject *buf_ob = PyUnicode_DecodeFSDefault(buf);
+        if (buf_ob == NULL)
+            return NULL;
         PyObject *shortname_ob = PyUnicode_FromString(shortname);
-        PyObject *pathname_ob = PyUnicode_FromString(pathname);
+        if (shortname_ob == NULL) {
+            Py_DECREF(buf_ob);
+            return NULL;
+        }
+        PyObject *pathname_ob = PyUnicode_DecodeFSDefault(pathname);
+        if (pathname_ob == NULL) {
+            Py_DECREF(buf_ob);
+            Py_DECREF(shortname_ob);
+            return NULL;
+        }
         PyErr_SetImportError(buf_ob, shortname_ob, pathname_ob);
         Py_DECREF(buf_ob);
         Py_DECREF(shortname_ob);
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index c51f97a..2382889 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -2,7 +2,8 @@
 /* Support for dynamic loading of extension modules */
 
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_interp.h"    // _PyInterpreterState.dlopenflags
+#include "pycore_pystate.h"   // _PyInterpreterState_GET()
 #include "importdl.h"
 
 #include <sys/types.h>
@@ -94,7 +95,7 @@
         }
     }
 
-    dlopenflags = _PyInterpreterState_Get()->dlopenflags;
+    dlopenflags = _PyInterpreterState_GET()->dlopenflags;
 
     handle = dlopen(pathname, dlopenflags);
 
@@ -105,7 +106,7 @@
         const char *error = dlerror();
         if (error == NULL)
             error = "unknown dlopen() error";
-        error_ob = PyUnicode_FromString(error);
+        error_ob = PyUnicode_DecodeLocale(error, "surrogateescape");
         if (error_ob == NULL)
             return NULL;
         mod_name = PyUnicode_FromString(shortname);
@@ -113,7 +114,7 @@
             Py_DECREF(error_ob);
             return NULL;
         }
-        path = PyUnicode_FromString(pathname);
+        path = PyUnicode_DecodeFSDefault(pathname);
         if (path == NULL) {
             Py_DECREF(error_ob);
             Py_DECREF(mod_name);
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 4896c6d..8431c5b 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -12,12 +12,6 @@
 #include "patchlevel.h"
 #include <windows.h>
 
-// "activation context" magic - see dl_nt.c...
-#if HAVE_SXS
-extern ULONG_PTR _Py_ActivateActCtx();
-void _Py_DeactivateActCtx(ULONG_PTR cookie);
-#endif
-
 #ifdef _DEBUG
 #define PYD_DEBUG_SUFFIX "_d"
 #else
@@ -185,16 +179,10 @@
     {
         HINSTANCE hDLL = NULL;
         unsigned int old_mode;
-#if HAVE_SXS
-        ULONG_PTR cookie = 0;
-#endif
 
         /* Don't display a message box when Python can't load a DLL */
         old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
 
-#if HAVE_SXS
-        cookie = _Py_ActivateActCtx();
-#endif
         /* bpo-36085: We use LoadLibraryEx with restricted search paths
            to avoid DLL preloading attacks and enable use of the
            AddDllDirectory function. We add SEARCH_DLL_LOAD_DIR to
@@ -204,9 +192,6 @@
                               LOAD_LIBRARY_SEARCH_DEFAULT_DIRS |
                               LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
         Py_END_ALLOW_THREADS
-#if HAVE_SXS
-        _Py_DeactivateActCtx(cookie);
-#endif
 
         /* restore old error mode settings */
         SetErrorMode(old_mode);
diff --git a/Python/errors.c b/Python/errors.c
index 1360c0d..87af39d 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -4,7 +4,8 @@
 #include "Python.h"
 #include "pycore_initconfig.h"
 #include "pycore_pyerrors.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"    // _PyThreadState_GET()
+#include "pycore_sysmodule.h"
 #include "pycore_traceback.h"
 
 #ifndef __STDC__
@@ -24,11 +25,11 @@
 extern "C" {
 #endif
 
+_Py_IDENTIFIER(__module__);
 _Py_IDENTIFIER(builtins);
 _Py_IDENTIFIER(stderr);
 _Py_IDENTIFIER(flush);
 
-
 /* Forward declarations */
 static PyObject *
 _PyErr_FormatV(PyThreadState *tstate, PyObject *exception,
@@ -93,7 +94,7 @@
         return PyObject_Call(exception, value, NULL);
     }
     else {
-        return PyObject_CallFunctionObjArgs(exception, value, NULL);
+        return PyObject_CallOneArg(exception, value);
     }
 }
 
@@ -106,7 +107,8 @@
     if (exception != NULL &&
         !PyExceptionClass_Check(exception)) {
         _PyErr_Format(tstate, PyExc_SystemError,
-                      "exception %R not a BaseException subclass",
+                      "_PyErr_SetObject: "
+                      "exception %R is not a BaseException subclass",
                       exception);
         return;
     }
@@ -218,6 +220,9 @@
 PyObject* _Py_HOT_FUNCTION
 PyErr_Occurred(void)
 {
+    /* The caller must hold the GIL. */
+    assert(PyGILState_Check());
+
     PyThreadState *tstate = _PyThreadState_GET();
     return _PyErr_Occurred(tstate);
 }
@@ -430,21 +435,27 @@
 
 
 void
-PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
+_PyErr_GetExcInfo(PyThreadState *tstate,
+                  PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
 {
-    PyThreadState *tstate = _PyThreadState_GET();
-
     _PyErr_StackItem *exc_info = _PyErr_GetTopmostException(tstate);
     *p_type = exc_info->exc_type;
     *p_value = exc_info->exc_value;
     *p_traceback = exc_info->exc_traceback;
 
-
     Py_XINCREF(*p_type);
     Py_XINCREF(*p_value);
     Py_XINCREF(*p_traceback);
 }
 
+
+void
+PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    _PyErr_GetExcInfo(tstate, p_type, p_value, p_traceback);
+}
+
 void
 PyErr_SetExcInfo(PyObject *p_type, PyObject *p_value, PyObject *p_traceback)
 {
@@ -466,7 +477,9 @@
 
 /* Like PyErr_Restore(), but if an exception is already set,
    set the context associated with it.
- */
+
+   The caller is responsible for ensuring that this call won't create
+   any cycles in the exception context chain. */
 void
 _PyErr_ChainExceptions(PyObject *exc, PyObject *val, PyObject *tb)
 {
@@ -474,6 +487,15 @@
         return;
 
     PyThreadState *tstate = _PyThreadState_GET();
+
+    if (!PyExceptionClass_Check(exc)) {
+        _PyErr_Format(tstate, PyExc_SystemError,
+                      "_PyErr_ChainExceptions: "
+                      "exception %R is not a BaseException subclass",
+                      exc);
+        return;
+    }
+
     if (_PyErr_Occurred(tstate)) {
         PyObject *exc2, *val2, *tb2;
         _PyErr_Fetch(tstate, &exc2, &val2, &tb2);
@@ -492,6 +514,62 @@
     }
 }
 
+/* Set the currently set exception's context to the given exception.
+
+   If the provided exc_info is NULL, then the current Python thread state's
+   exc_info will be used for the context instead.
+
+   This function can only be called when _PyErr_Occurred() is true.
+   Also, this function won't create any cycles in the exception context
+   chain to the extent that _PyErr_SetObject ensures this. */
+void
+_PyErr_ChainStackItem(_PyErr_StackItem *exc_info)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    assert(_PyErr_Occurred(tstate));
+
+    int exc_info_given;
+    if (exc_info == NULL) {
+        exc_info_given = 0;
+        exc_info = tstate->exc_info;
+    } else {
+        exc_info_given = 1;
+    }
+    if (exc_info->exc_type == NULL || exc_info->exc_type == Py_None) {
+        return;
+    }
+
+    _PyErr_StackItem *saved_exc_info;
+    if (exc_info_given) {
+        /* Temporarily set the thread state's exc_info since this is what
+           _PyErr_SetObject uses for implicit exception chaining. */
+        saved_exc_info = tstate->exc_info;
+        tstate->exc_info = exc_info;
+    }
+
+    PyObject *exc, *val, *tb;
+    _PyErr_Fetch(tstate, &exc, &val, &tb);
+
+    PyObject *exc2, *val2, *tb2;
+    exc2 = exc_info->exc_type;
+    val2 = exc_info->exc_value;
+    tb2 = exc_info->exc_traceback;
+    _PyErr_NormalizeException(tstate, &exc2, &val2, &tb2);
+    if (tb2 != NULL) {
+        PyException_SetTraceback(val2, tb2);
+    }
+
+    /* _PyErr_SetObject sets the context from PyThreadState. */
+    _PyErr_SetObject(tstate, exc, val);
+    Py_DECREF(exc);  // since _PyErr_Occurred was true
+    Py_XDECREF(val);
+    Py_XDECREF(tb);
+
+    if (exc_info_given) {
+        tstate->exc_info = saved_exc_info;
+    }
+}
+
 static PyObject *
 _PyErr_FormatVFromCause(PyThreadState *tstate, PyObject *exception,
                         const char *format, va_list vargs)
@@ -521,6 +599,21 @@
 }
 
 PyObject *
+_PyErr_FormatFromCauseTstate(PyThreadState *tstate, PyObject *exception,
+                             const char *format, ...)
+{
+    va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, format);
+#else
+    va_start(vargs);
+#endif
+    _PyErr_FormatVFromCause(tstate, exception, format, vargs);
+    va_end(vargs);
+    return NULL;
+}
+
+PyObject *
 _PyErr_FormatFromCause(PyObject *exception, const char *format, ...)
 {
     PyThreadState *tstate = _PyThreadState_GET();
@@ -547,10 +640,9 @@
 }
 
 PyObject *
-PyErr_NoMemory(void)
+_PyErr_NoMemory(PyThreadState *tstate)
 {
-    PyThreadState *tstate = _PyThreadState_GET();
-    if (Py_TYPE(PyExc_MemoryError) == NULL) {
+    if (Py_IS_TYPE(PyExc_MemoryError, NULL)) {
         /* PyErr_NoMemory() has been called before PyExc_MemoryError has been
            initialized by _PyExc_Init() */
         Py_FatalError("Out of memory and PyExc_MemoryError is not "
@@ -561,6 +653,13 @@
 }
 
 PyObject *
+PyErr_NoMemory(void)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyErr_NoMemory(tstate);
+}
+
+PyObject *
 PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject)
 {
     return PyErr_SetFromErrnoWithFilenameObjects(exc, filenameObject, NULL);
@@ -877,7 +976,7 @@
         goto done;
     }
 
-    error = _PyObject_FastCallDict(exception, &msg, 1, kwargs);
+    error = PyObject_VectorcallDict(exception, &msg, 1, kwargs);
     if (error != NULL) {
         _PyErr_SetObject(tstate, (PyObject *)Py_TYPE(error), error);
         Py_DECREF(error);
@@ -979,7 +1078,6 @@
 PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    _Py_IDENTIFIER(__module__);
     PyObject *modulename = NULL;
     PyObject *classname = NULL;
     PyObject *mydict = NULL;
@@ -1205,7 +1303,6 @@
         }
     }
 
-    _Py_IDENTIFIER(__module__);
     PyObject *moduleName = _PyObject_GetAttrId(exc_type, &PyId___module__);
     if (moduleName == NULL || !PyUnicode_Check(moduleName)) {
         Py_XDECREF(moduleName);
@@ -1257,7 +1354,7 @@
     }
 
     /* Explicitly call file.flush() */
-    PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+    PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
     if (!res) {
         return -1;
     }
@@ -1293,7 +1390,7 @@
 {
     PyThreadState *tstate = _PyThreadState_GET();
 
-    if (Py_TYPE(args) != &UnraisableHookArgsType) {
+    if (!Py_IS_TYPE(args, &UnraisableHookArgsType)) {
         _PyErr_SetString(tstate, PyExc_TypeError,
                          "sys.unraisablehook argument type "
                          "must be UnraisableHookArgs");
@@ -1329,7 +1426,7 @@
 _PyErr_WriteUnraisableMsg(const char *err_msg_str, PyObject *obj)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    assert(tstate != NULL);
+    _Py_EnsureTstateNotNULL(tstate);
 
     PyObject *err_msg = NULL;
     PyObject *exc_type, *exc_value, *exc_tb;
@@ -1343,7 +1440,7 @@
     }
 
     if (exc_tb == NULL) {
-        struct _frame *frame = tstate->frame;
+        PyFrameObject *frame = tstate->frame;
         if (frame != NULL) {
             exc_tb = _PyTraceBack_FromFrame(NULL, frame);
             if (exc_tb == NULL) {
@@ -1382,7 +1479,7 @@
         goto default_hook;
     }
 
-    if (PySys_Audit("sys.unraisablehook", "OO", hook, hook_args) < 0) {
+    if (_PySys_Audit(tstate, "sys.unraisablehook", "OO", hook, hook_args) < 0) {
         Py_DECREF(hook_args);
         err_msg_str = "Exception ignored in audit hook";
         obj = NULL;
@@ -1394,8 +1491,7 @@
         goto default_hook;
     }
 
-    PyObject *args[1] = {hook_args};
-    PyObject *res = _PyObject_FastCall(hook, args, 1);
+    PyObject *res = PyObject_CallOneArg(hook, hook_args);
     Py_DECREF(hook_args);
     if (res != NULL) {
         Py_DECREF(res);
@@ -1552,16 +1648,18 @@
 {
     int i;
     char linebuf[1000];
-
-    if (fp == NULL)
+    if (fp == NULL) {
         return NULL;
+    }
+
     for (i = 0; i < lineno; i++) {
         char *pLastChar = &linebuf[sizeof(linebuf) - 2];
         do {
             *pLastChar = '\0';
             if (Py_UniversalNewlineFgets(linebuf, sizeof linebuf,
-                                         fp, NULL) == NULL)
-                break;
+                                         fp, NULL) == NULL) {
+                goto after_loop;
+            }
             /* fgets read *something*; if it didn't get as
                far as pLastChar, it must have found a newline
                or hit the end of the file; if pLastChar is \n,
@@ -1569,6 +1667,8 @@
                yet seen a newline, so must continue */
         } while (*pLastChar != '\0' && *pLastChar != '\n');
     }
+
+after_loop:
     fclose(fp);
     if (i == lineno) {
         PyObject *res;
diff --git a/Python/fileutils.c b/Python/fileutils.c
index b274116..397ac34 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1,6 +1,6 @@
 #include "Python.h"
 #include "pycore_fileutils.h"
-#include "osdefs.h"
+#include "osdefs.h"               // SEP
 #include <locale.h>
 
 #ifdef MS_WINDOWS
@@ -1467,7 +1467,7 @@
              && errno == EINTR && !(async_err = PyErr_CheckSignals()));
 #else
     PyObject *bytes;
-    char *path_bytes;
+    const char *path_bytes;
 
     assert(PyGILState_Check());
 
@@ -1684,8 +1684,9 @@
 {
     char *cpath;
     char cbuf[MAXPATHLEN];
+    size_t cbuf_len = Py_ARRAY_LENGTH(cbuf);
     wchar_t *wbuf;
-    int res;
+    Py_ssize_t res;
     size_t r1;
 
     cpath = _Py_EncodeLocaleRaw(path, NULL);
@@ -1693,11 +1694,12 @@
         errno = EINVAL;
         return -1;
     }
-    res = (int)readlink(cpath, cbuf, Py_ARRAY_LENGTH(cbuf));
+    res = readlink(cpath, cbuf, cbuf_len);
     PyMem_RawFree(cpath);
-    if (res == -1)
+    if (res == -1) {
         return -1;
-    if (res == Py_ARRAY_LENGTH(cbuf)) {
+    }
+    if ((size_t)res == cbuf_len) {
         errno = EINVAL;
         return -1;
     }
@@ -1762,6 +1764,103 @@
 }
 #endif
 
+
+#ifndef MS_WINDOWS
+int
+_Py_isabs(const wchar_t *path)
+{
+    return (path[0] == SEP);
+}
+#endif
+
+
+/* Get an absolute path.
+   On error (ex: fail to get the current directory), return -1.
+   On memory allocation failure, set *abspath_p to NULL and return 0.
+   On success, return a newly allocated to *abspath_p to and return 0.
+   The string must be freed by PyMem_RawFree(). */
+int
+_Py_abspath(const wchar_t *path, wchar_t **abspath_p)
+{
+#ifdef MS_WINDOWS
+    wchar_t woutbuf[MAX_PATH], *woutbufp = woutbuf;
+    DWORD result;
+
+    result = GetFullPathNameW(path,
+                              Py_ARRAY_LENGTH(woutbuf), woutbuf,
+                              NULL);
+    if (!result) {
+        return -1;
+    }
+
+    if (result > Py_ARRAY_LENGTH(woutbuf)) {
+        if ((size_t)result <= (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t)) {
+            woutbufp = PyMem_RawMalloc((size_t)result * sizeof(wchar_t));
+        }
+        else {
+            woutbufp = NULL;
+        }
+        if (!woutbufp) {
+            *abspath_p = NULL;
+            return 0;
+        }
+
+        result = GetFullPathNameW(path, result, woutbufp, NULL);
+        if (!result) {
+            PyMem_RawFree(woutbufp);
+            return -1;
+        }
+    }
+
+    if (woutbufp != woutbuf) {
+        *abspath_p = woutbufp;
+        return 0;
+    }
+
+    *abspath_p = _PyMem_RawWcsdup(woutbufp);
+    return 0;
+#else
+    if (_Py_isabs(path)) {
+        *abspath_p = _PyMem_RawWcsdup(path);
+        return 0;
+    }
+
+    wchar_t cwd[MAXPATHLEN + 1];
+    cwd[Py_ARRAY_LENGTH(cwd) - 1] = 0;
+    if (!_Py_wgetcwd(cwd, Py_ARRAY_LENGTH(cwd) - 1)) {
+        /* unable to get the current directory */
+        return -1;
+    }
+
+    size_t cwd_len = wcslen(cwd);
+    size_t path_len = wcslen(path);
+    size_t len = cwd_len + 1 + path_len + 1;
+    if (len <= (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t)) {
+        *abspath_p = PyMem_RawMalloc(len * sizeof(wchar_t));
+    }
+    else {
+        *abspath_p = NULL;
+    }
+    if (*abspath_p == NULL) {
+        return 0;
+    }
+
+    wchar_t *abspath = *abspath_p;
+    memcpy(abspath, cwd, cwd_len * sizeof(wchar_t));
+    abspath += cwd_len;
+
+    *abspath = (wchar_t)SEP;
+    abspath++;
+
+    memcpy(abspath, path, path_len * sizeof(wchar_t));
+    abspath += path_len;
+
+    *abspath = 0;
+    return 0;
+#endif
+}
+
+
 /* Get the current directory. buflen is the buffer size in wide characters
    including the null character. Decode the path from the locale encoding.
 
@@ -1933,6 +2032,7 @@
     assert(decimal_point != NULL);
     assert(thousands_sep != NULL);
 
+#ifndef MS_WINDOWS
     int change_locale = 0;
     if ((strlen(lc->decimal_point) > 1 || ((unsigned char)lc->decimal_point[0]) > 127)) {
         change_locale = 1;
@@ -1971,14 +2071,20 @@
         }
     }
 
+#define GET_LOCALE_STRING(ATTR) PyUnicode_DecodeLocale(lc->ATTR, NULL)
+#else /* MS_WINDOWS */
+/* Use _W_* fields of Windows strcut lconv */
+#define GET_LOCALE_STRING(ATTR) PyUnicode_FromWideChar(lc->_W_ ## ATTR, -1)
+#endif /* MS_WINDOWS */
+
     int res = -1;
 
-    *decimal_point = PyUnicode_DecodeLocale(lc->decimal_point, NULL);
+    *decimal_point = GET_LOCALE_STRING(decimal_point);
     if (*decimal_point == NULL) {
         goto done;
     }
 
-    *thousands_sep = PyUnicode_DecodeLocale(lc->thousands_sep, NULL);
+    *thousands_sep = GET_LOCALE_STRING(thousands_sep);
     if (*thousands_sep == NULL) {
         goto done;
     }
@@ -1986,9 +2092,13 @@
     res = 0;
 
 done:
+#ifndef MS_WINDOWS
     if (loc != NULL) {
         setlocale(LC_CTYPE, oldloc);
     }
     PyMem_Free(oldloc);
+#endif
     return res;
+
+#undef GET_LOCALE_STRING
 }
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index 7c4ecf0..ed95f26 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -62,7 +62,7 @@
     Py_ssize_t accumulator, digitval, pos = *ppos;
     int numdigits;
     int kind = PyUnicode_KIND(str);
-    void *data = PyUnicode_DATA(str);
+    const void *data = PyUnicode_DATA(str);
 
     accumulator = numdigits = 0;
     for (; pos < end; pos++, numdigits++) {
@@ -170,7 +170,7 @@
 {
     Py_ssize_t pos = start;
     int kind = PyUnicode_KIND(format_spec);
-    void *data = PyUnicode_DATA(format_spec);
+    const void *data = PyUnicode_DATA(format_spec);
     /* end-pos is used throughout this code to specify the length of
        the input string */
 #define READ_spec(index) PyUnicode_READ(kind, data, index)
@@ -252,8 +252,10 @@
         ++pos;
     }
     if (end-pos && READ_spec(pos) == ',') {
-        invalid_comma_and_underscore();
-        return 0;
+        if (format->thousands_separators == LT_UNDERSCORE_LOCALE) {
+            invalid_comma_and_underscore();
+            return 0;
+        }
     }
 
     /* Parse field precision */
@@ -443,7 +445,7 @@
 {
     Py_ssize_t remainder;
     int kind = PyUnicode_KIND(s);
-    void *data = PyUnicode_DATA(s);
+    const void *data = PyUnicode_DATA(s);
 
     while (pos<end && Py_ISDIGIT(PyUnicode_READ(kind, data, pos)))
         ++pos;
@@ -466,7 +468,7 @@
    Return -1 on error. */
 static Py_ssize_t
 calc_number_widths(NumberFieldWidths *spec, Py_ssize_t n_prefix,
-                   Py_UCS4 sign_char, PyObject *number, Py_ssize_t n_start,
+                   Py_UCS4 sign_char, Py_ssize_t n_start,
                    Py_ssize_t n_end, Py_ssize_t n_remainder,
                    int has_decimal, const LocaleInfo *locale,
                    const InternalFormatSpec *format, Py_UCS4 *maxchar)
@@ -574,7 +576,7 @@
             spec->n_lpadding = n_padding;
             break;
         default:
-            /* Shouldn't get here, but treat it as '>' */
+            /* Shouldn't get here */
             Py_UNREACHABLE();
         }
     }
@@ -595,7 +597,7 @@
    Return -1 on error, or 0 on success. */
 static int
 fill_number(_PyUnicodeWriter *writer, const NumberFieldWidths *spec,
-            PyObject *digits, Py_ssize_t d_start, Py_ssize_t d_end,
+            PyObject *digits, Py_ssize_t d_start,
             PyObject *prefix, Py_ssize_t p_start,
             Py_UCS4 fill_char,
             LocaleInfo *locale, int toupper)
@@ -983,7 +985,7 @@
         goto done;
 
     /* Calculate how much memory we'll need. */
-    n_total = calc_number_widths(&spec, n_prefix, sign_char, tmp, inumeric_chars,
+    n_total = calc_number_widths(&spec, n_prefix, sign_char, inumeric_chars,
                                  inumeric_chars + n_digits, n_remainder, 0,
                                  &locale, format, &maxchar);
     if (n_total == -1) {
@@ -996,7 +998,7 @@
 
     /* Populate the memory. */
     result = fill_number(writer, &spec,
-                         tmp, inumeric_chars, inumeric_chars + n_digits,
+                         tmp, inumeric_chars,
                          tmp, prefix, format->fill_char,
                          &locale, format->type == 'X');
 
@@ -1131,7 +1133,7 @@
         goto done;
 
     /* Calculate how much memory we'll need. */
-    n_total = calc_number_widths(&spec, 0, sign_char, unicode_tmp, index,
+    n_total = calc_number_widths(&spec, 0, sign_char, index,
                                  index + n_digits, n_remainder, has_decimal,
                                  &locale, format, &maxchar);
     if (n_total == -1) {
@@ -1144,7 +1146,7 @@
 
     /* Populate the memory. */
     result = fill_number(writer, &spec,
-                         unicode_tmp, index, index + n_digits,
+                         unicode_tmp, index,
                          NULL, 0, format->fill_char,
                          &locale, 0);
 
@@ -1316,7 +1318,7 @@
     tmp_format.width = -1;
 
     /* Calculate how much memory we'll need. */
-    n_re_total = calc_number_widths(&re_spec, 0, re_sign_char, re_unicode_tmp,
+    n_re_total = calc_number_widths(&re_spec, 0, re_sign_char,
                                     i_re, i_re + n_re_digits, n_re_remainder,
                                     re_has_decimal, &locale, &tmp_format,
                                     &maxchar);
@@ -1329,7 +1331,7 @@
      * requested by the original format. */
     if (!skip_re)
         tmp_format.sign = '+';
-    n_im_total = calc_number_widths(&im_spec, 0, im_sign_char, im_unicode_tmp,
+    n_im_total = calc_number_widths(&im_spec, 0, im_sign_char,
                                     i_im, i_im + n_im_digits, n_im_remainder,
                                     im_has_decimal, &locale, &tmp_format,
                                     &maxchar);
@@ -1366,7 +1368,7 @@
 
     if (!skip_re) {
         result = fill_number(writer, &re_spec,
-                             re_unicode_tmp, i_re, i_re + n_re_digits,
+                             re_unicode_tmp, i_re,
                              NULL, 0,
                              0,
                              &locale, 0);
@@ -1374,7 +1376,7 @@
             goto done;
     }
     result = fill_number(writer, &im_spec,
-                         im_unicode_tmp, i_im, i_im + n_im_digits,
+                         im_unicode_tmp, i_im,
                          NULL, 0,
                          0,
                          &locale, 0);
@@ -1447,7 +1449,7 @@
         return format_string_internal(obj, &format, writer);
     default:
         /* unknown */
-        unknown_presentation_type(format.type, obj->ob_type->tp_name);
+        unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
         return -1;
     }
 }
@@ -1458,7 +1460,7 @@
                              PyObject *format_spec,
                              Py_ssize_t start, Py_ssize_t end)
 {
-    PyObject *tmp = NULL, *str = NULL;
+    PyObject *tmp = NULL;
     InternalFormatSpec format;
     int result = -1;
 
@@ -1505,13 +1507,12 @@
 
     default:
         /* unknown */
-        unknown_presentation_type(format.type, obj->ob_type->tp_name);
+        unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
         goto done;
     }
 
 done:
     Py_XDECREF(tmp);
-    Py_XDECREF(str);
     return result;
 }
 
@@ -1549,7 +1550,7 @@
 
     default:
         /* unknown */
-        unknown_presentation_type(format.type, obj->ob_type->tp_name);
+        unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
         return -1;
     }
 }
@@ -1587,7 +1588,7 @@
 
     default:
         /* unknown */
-        unknown_presentation_type(format.type, obj->ob_type->tp_name);
+        unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
         return -1;
     }
 }
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
index 7f9cc19..dd04d60 100644
--- a/Python/frozenmain.c
+++ b/Python/frozenmain.c
@@ -2,7 +2,7 @@
 /* Python interpreter main program for frozen scripts */
 
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_runtime.h"  // _PyRuntime_Initialize()
 #include <locale.h>
 
 #ifdef MS_WINDOWS
@@ -99,7 +99,7 @@
 
     n = PyImport_ImportFrozenModule("__main__");
     if (n == 0)
-        Py_FatalError("__main__ not frozen");
+        Py_FatalError("the __main__ module is not frozen");
     if (n < 0) {
         PyErr_Print();
         sts = 1;
diff --git a/Python/getargs.c b/Python/getargs.c
index c1b7b1a..d4a531a 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -106,7 +106,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_Parse_SizeT(PyObject *args, const char *format, ...)
 {
     int retval;
@@ -131,7 +131,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseTuple_SizeT(PyObject *args, const char *format, ...)
 {
     int retval;
@@ -156,7 +156,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseStack_SizeT(PyObject *const *args, Py_ssize_t nargs, const char *format, ...)
 {
     int retval;
@@ -182,7 +182,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va)
 {
     va_list lva;
@@ -312,7 +312,7 @@
             break;
         default:
             if (level == 0) {
-                if (Py_ISALPHA(Py_CHARMASK(c)))
+                if (Py_ISALPHA(c))
                     if (c != 'e') /* skip encoded */
                         max++;
             }
@@ -397,7 +397,7 @@
         }
     }
 
-    if (*format != '\0' && !Py_ISALPHA(Py_CHARMASK(*format)) &&
+    if (*format != '\0' && !Py_ISALPHA(*format) &&
         *format != '(' &&
         *format != '|' && *format != ':' && *format != ';') {
         PyErr_Format(PyExc_SystemError,
@@ -521,7 +521,7 @@
         }
         else if (c == ':' || c == ';' || c == '\0')
             break;
-        else if (level == 0 && Py_ISALPHA(Py_CHARMASK(c)))
+        else if (level == 0 && Py_ISALPHA(c))
             n++;
     }
 
@@ -531,7 +531,7 @@
                       toplevel ? "expected %d arguments, not %.50s" :
                       "must be %d-item sequence, not %.50s",
                   n,
-                  arg == Py_None ? "None" : arg->ob_type->tp_name);
+                  arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
         return msgbuf;
     }
 
@@ -621,7 +621,7 @@
     PyErr_Format(PyExc_TypeError,
                  "%.200s() %.200s must be %.50s, not %.50s",
                  fname, displayname, expected,
-                 arg == Py_None ? "None" : arg->ob_type->tp_name);
+                 arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
 }
 
 static const char *
@@ -636,7 +636,7 @@
     else {
         PyOS_snprintf(msgbuf, bufsize,
                       "must be %.50s, not %.50s", expected,
-                      arg == Py_None ? "None" : arg->ob_type->tp_name);
+                      arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
     }
     return msgbuf;
 }
@@ -923,7 +923,7 @@
     case 'C': {/* unicode char */
         int *p = va_arg(*p_va, int *);
         int kind;
-        void *data;
+        const void *data;
 
         if (!PyUnicode_Check(arg))
             return converterr("a unicode character", arg, msgbuf, bufsize);
@@ -1070,6 +1070,9 @@
     case 'u': /* raw unicode buffer (Py_UNICODE *) */
     case 'Z': /* raw unicode buffer or None */
     {
+        // TODO: Raise DeprecationWarning
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
         Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
 
         if (*format == '#') {
@@ -1109,6 +1112,7 @@
                                   arg, msgbuf, bufsize);
         }
         break;
+_Py_COMP_DIAG_POP
     }
 
     case 'e': {/* encoded string */
@@ -1331,7 +1335,7 @@
             type = va_arg(*p_va, PyTypeObject*);
             p = va_arg(*p_va, PyObject **);
             format++;
-            if (PyType_IsSubtype(arg->ob_type, type))
+            if (PyType_IsSubtype(Py_TYPE(arg), type))
                 *p = arg;
             else
                 return converterr(type->tp_name, arg, msgbuf, bufsize);
@@ -1466,7 +1470,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseTupleAndKeywords_SizeT(PyObject *args,
                                   PyObject *keywords,
                                   const char *format,
@@ -1517,7 +1521,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
                                     PyObject *keywords,
                                     const char *format,
@@ -1543,7 +1547,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords,
                             struct _PyArg_Parser *parser, ...)
 {
@@ -1556,7 +1560,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords,
                             struct _PyArg_Parser *parser, ...)
 {
@@ -1569,7 +1573,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseStackAndKeywords(PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames,
                   struct _PyArg_Parser *parser, ...)
 {
@@ -1582,7 +1586,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_ParseStackAndKeywords_SizeT(PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames,
                         struct _PyArg_Parser *parser, ...)
 {
@@ -1596,7 +1600,7 @@
 }
 
 
-int
+PyAPI_FUNC(int)
 _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords,
                             struct _PyArg_Parser *parser, va_list va)
 {
@@ -1610,7 +1614,7 @@
     return retval;
 }
 
-int
+PyAPI_FUNC(int)
 _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords,
                             struct _PyArg_Parser *parser, va_list va)
 {
@@ -2053,19 +2057,19 @@
     Py_ssize_t i, nkwargs;
 
     nkwargs = PyTuple_GET_SIZE(kwnames);
-    for (i=0; i < nkwargs; i++) {
+    for (i = 0; i < nkwargs; i++) {
         PyObject *kwname = PyTuple_GET_ITEM(kwnames, i);
 
-        /* ptr==ptr should match in most cases since keyword keys
-           should be interned strings */
+        /* kwname == key will normally find a match in since keyword keys
+           should be interned strings; if not retry below in a new loop. */
         if (kwname == key) {
             return kwstack[i];
         }
-        if (!PyUnicode_Check(kwname)) {
-            /* ignore non-string keyword keys:
-               an error will be raised below */
-            continue;
-        }
+    }
+
+    for (i = 0; i < nkwargs; i++) {
+        PyObject *kwname = PyTuple_GET_ITEM(kwnames, i);
+        assert(PyUnicode_Check(kwname));
         if (_PyUnicode_EQ(kwname, key)) {
             return kwstack[i];
         }
@@ -2293,16 +2297,11 @@
                 j++;
             }
 
-            if (!PyUnicode_Check(keyword)) {
-                PyErr_SetString(PyExc_TypeError,
-                                "keywords must be strings");
-                return cleanreturn(0, &freelist);
-            }
             match = PySequence_Contains(kwtuple, keyword);
             if (match <= 0) {
                 if (!match) {
                     PyErr_Format(PyExc_TypeError,
-                                 "'%U' is an invalid keyword "
+                                 "'%S' is an invalid keyword "
                                  "argument for %.200s%s",
                                  keyword,
                                  (parser->fname == NULL) ? "this function" : parser->fname,
@@ -2523,16 +2522,11 @@
                 j++;
             }
 
-            if (!PyUnicode_Check(keyword)) {
-                PyErr_SetString(PyExc_TypeError,
-                                "keywords must be strings");
-                return NULL;
-            }
             match = PySequence_Contains(kwtuple, keyword);
             if (match <= 0) {
                 if (!match) {
                     PyErr_Format(PyExc_TypeError,
-                                 "'%U' is an invalid keyword "
+                                 "'%S' is an invalid keyword "
                                  "argument for %.200s%s",
                                  keyword,
                                  (parser->fname == NULL) ? "this function" : parser->fname,
@@ -2797,6 +2791,7 @@
 
 
 #undef _PyArg_NoKeywords
+#undef _PyArg_NoKwnames
 #undef _PyArg_NoPositional
 
 /* For type constructors that don't take keyword args
@@ -2823,7 +2818,6 @@
     return 0;
 }
 
-
 int
 _PyArg_NoPositional(const char *funcname, PyObject *args)
 {
@@ -2841,6 +2835,23 @@
     return 0;
 }
 
+int
+_PyArg_NoKwnames(const char *funcname, PyObject *kwnames)
+{
+    if (kwnames == NULL) {
+        return 1;
+    }
+
+    assert(PyTuple_CheckExact(kwnames));
+
+    if (PyTuple_GET_SIZE(kwnames) == 0) {
+        return 1;
+    }
+
+    PyErr_Format(PyExc_TypeError, "%s() takes no keyword arguments", funcname);
+    return 0;
+}
+
 void
 _PyArg_Fini(void)
 {
diff --git a/Python/getopt.c b/Python/getopt.c
index 249ad1e..2e3891a 100644
--- a/Python/getopt.c
+++ b/Python/getopt.c
@@ -18,10 +18,6 @@
  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER
  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Nevertheless, I would like to know about bugs in this library or
- * suggestions for improvment.  Send bug reports and feedback to
- * davegottner@delphi.com.
  *---------------------------------------------------------------------------*/
 
 /* Modified to support --help and --version, as well as /? on Windows
diff --git a/Python/graminit.c b/Python/graminit.c
index 7c40ce9..b7aa528 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -1,7 +1,8 @@
 /* Generated by Parser/pgen */
 
+#include "exports.h"
 #include "grammar.h"
-grammar _PyParser_Grammar;
+Py_EXPORTED_SYMBOL grammar _PyParser_Grammar;
 static const arc arcs_0_0[3] = {
     {2, 1},
     {3, 2},
@@ -51,31 +52,17 @@
 static const arc arcs_3_1[1] = {
     {49, 2},
 };
-static const arc arcs_3_2[2] = {
-    {5, 3},
-    {2, 4},
+static const arc arcs_3_2[1] = {
+    {2, 3},
 };
-static const arc arcs_3_3[2] = {
-    {50, 5},
-    {51, 6},
+static const arc arcs_3_3[1] = {
+    {0, 3},
 };
-static const arc arcs_3_4[1] = {
-    {0, 4},
-};
-static const arc arcs_3_5[1] = {
-    {2, 4},
-};
-static const arc arcs_3_6[1] = {
-    {50, 5},
-};
-static state states_3[7] = {
+static state states_3[4] = {
     {1, arcs_3_0},
     {1, arcs_3_1},
-    {2, arcs_3_2},
-    {2, arcs_3_3},
-    {1, arcs_3_4},
-    {1, arcs_3_5},
-    {1, arcs_3_6},
+    {1, arcs_3_2},
+    {1, arcs_3_3},
 };
 static const arc arcs_4_0[1] = {
     {48, 1},
@@ -89,12 +76,12 @@
     {2, arcs_4_1},
 };
 static const arc arcs_5_0[1] = {
-    {52, 1},
+    {50, 1},
 };
 static const arc arcs_5_1[3] = {
+    {52, 2},
+    {53, 2},
     {54, 2},
-    {55, 2},
-    {56, 2},
 };
 static const arc arcs_5_2[1] = {
     {0, 2},
@@ -108,7 +95,7 @@
     {38, 1},
 };
 static const arc arcs_6_1[1] = {
-    {56, 2},
+    {54, 2},
 };
 static const arc arcs_6_2[1] = {
     {0, 2},
@@ -125,24 +112,24 @@
     {40, 2},
 };
 static const arc arcs_7_2[1] = {
-    {57, 3},
+    {55, 3},
 };
 static const arc arcs_7_3[2] = {
-    {58, 4},
-    {59, 5},
+    {56, 4},
+    {57, 5},
 };
 static const arc arcs_7_4[1] = {
-    {60, 6},
+    {58, 6},
 };
 static const arc arcs_7_5[2] = {
-    {61, 7},
-    {62, 8},
+    {59, 7},
+    {60, 8},
 };
 static const arc arcs_7_6[1] = {
-    {59, 5},
+    {57, 5},
 };
 static const arc arcs_7_7[1] = {
-    {62, 8},
+    {60, 8},
 };
 static const arc arcs_7_8[1] = {
     {0, 8},
@@ -162,14 +149,14 @@
     {5, 1},
 };
 static const arc arcs_8_1[2] = {
-    {50, 2},
-    {63, 3},
+    {61, 2},
+    {62, 3},
 };
 static const arc arcs_8_2[1] = {
     {0, 2},
 };
 static const arc arcs_8_3[1] = {
-    {50, 2},
+    {61, 2},
 };
 static state states_8[4] = {
     {1, arcs_8_0},
@@ -179,217 +166,217 @@
 };
 static const arc arcs_9_0[3] = {
     {6, 1},
-    {64, 2},
-    {65, 3},
+    {63, 2},
+    {64, 3},
 };
 static const arc arcs_9_1[4] = {
-    {66, 4},
-    {61, 5},
-    {65, 6},
+    {65, 4},
+    {59, 5},
+    {64, 6},
     {0, 1},
 };
 static const arc arcs_9_2[1] = {
-    {65, 7},
+    {64, 7},
 };
 static const arc arcs_9_3[4] = {
-    {66, 8},
-    {67, 9},
-    {61, 5},
+    {65, 8},
+    {66, 9},
+    {59, 5},
     {0, 3},
 };
 static const arc arcs_9_4[4] = {
-    {64, 2},
-    {61, 10},
-    {65, 11},
+    {63, 2},
+    {59, 10},
+    {64, 11},
     {0, 4},
 };
 static const arc arcs_9_5[1] = {
     {0, 5},
 };
 static const arc arcs_9_6[3] = {
-    {66, 4},
-    {61, 5},
+    {65, 4},
+    {59, 5},
     {0, 6},
 };
 static const arc arcs_9_7[3] = {
-    {66, 12},
-    {61, 5},
+    {65, 12},
+    {59, 5},
     {0, 7},
 };
 static const arc arcs_9_8[6] = {
     {6, 13},
-    {64, 2},
-    {68, 14},
-    {61, 15},
-    {65, 3},
+    {63, 2},
+    {67, 14},
+    {59, 15},
+    {64, 3},
     {0, 8},
 };
 static const arc arcs_9_9[1] = {
-    {60, 16},
+    {58, 16},
 };
 static const arc arcs_9_10[3] = {
-    {64, 2},
-    {65, 11},
+    {63, 2},
+    {64, 11},
     {0, 10},
 };
 static const arc arcs_9_11[4] = {
-    {66, 4},
-    {67, 17},
-    {61, 5},
+    {65, 4},
+    {66, 17},
+    {59, 5},
     {0, 11},
 };
 static const arc arcs_9_12[2] = {
-    {61, 5},
+    {59, 5},
     {0, 12},
 };
 static const arc arcs_9_13[4] = {
-    {66, 18},
-    {61, 5},
-    {65, 19},
+    {65, 18},
+    {59, 5},
+    {64, 19},
     {0, 13},
 };
 static const arc arcs_9_14[2] = {
-    {66, 20},
+    {65, 20},
     {0, 14},
 };
 static const arc arcs_9_15[5] = {
     {6, 13},
-    {64, 2},
-    {68, 14},
-    {65, 3},
+    {63, 2},
+    {67, 14},
+    {64, 3},
     {0, 15},
 };
 static const arc arcs_9_16[3] = {
-    {66, 8},
-    {61, 5},
+    {65, 8},
+    {59, 5},
     {0, 16},
 };
 static const arc arcs_9_17[1] = {
-    {60, 6},
+    {58, 6},
 };
 static const arc arcs_9_18[4] = {
-    {64, 2},
-    {61, 21},
-    {65, 22},
+    {63, 2},
+    {59, 21},
+    {64, 22},
     {0, 18},
 };
 static const arc arcs_9_19[3] = {
-    {66, 18},
-    {61, 5},
+    {65, 18},
+    {59, 5},
     {0, 19},
 };
 static const arc arcs_9_20[5] = {
     {6, 23},
-    {64, 2},
-    {61, 24},
-    {65, 25},
+    {63, 2},
+    {59, 24},
+    {64, 25},
     {0, 20},
 };
 static const arc arcs_9_21[3] = {
-    {64, 2},
-    {65, 22},
+    {63, 2},
+    {64, 22},
     {0, 21},
 };
 static const arc arcs_9_22[4] = {
-    {66, 18},
-    {67, 26},
-    {61, 5},
+    {65, 18},
+    {66, 26},
+    {59, 5},
     {0, 22},
 };
 static const arc arcs_9_23[4] = {
-    {66, 27},
-    {61, 5},
-    {65, 28},
+    {65, 27},
+    {59, 5},
+    {64, 28},
     {0, 23},
 };
 static const arc arcs_9_24[1] = {
-    {65, 25},
+    {64, 25},
 };
 static const arc arcs_9_25[4] = {
-    {66, 29},
-    {67, 30},
-    {61, 5},
+    {65, 29},
+    {66, 30},
+    {59, 5},
     {0, 25},
 };
 static const arc arcs_9_26[1] = {
-    {60, 19},
+    {58, 19},
 };
 static const arc arcs_9_27[4] = {
-    {64, 2},
-    {61, 31},
-    {65, 32},
+    {63, 2},
+    {59, 31},
+    {64, 32},
     {0, 27},
 };
 static const arc arcs_9_28[3] = {
-    {66, 27},
-    {61, 5},
+    {65, 27},
+    {59, 5},
     {0, 28},
 };
 static const arc arcs_9_29[5] = {
     {6, 33},
-    {64, 2},
-    {61, 34},
-    {65, 25},
+    {63, 2},
+    {59, 34},
+    {64, 25},
     {0, 29},
 };
 static const arc arcs_9_30[1] = {
-    {60, 35},
+    {58, 35},
 };
 static const arc arcs_9_31[3] = {
-    {64, 2},
-    {65, 32},
+    {63, 2},
+    {64, 32},
     {0, 31},
 };
 static const arc arcs_9_32[4] = {
-    {66, 27},
-    {67, 36},
-    {61, 5},
+    {65, 27},
+    {66, 36},
+    {59, 5},
     {0, 32},
 };
 static const arc arcs_9_33[4] = {
-    {66, 37},
-    {61, 5},
-    {65, 38},
+    {65, 37},
+    {59, 5},
+    {64, 38},
     {0, 33},
 };
 static const arc arcs_9_34[4] = {
     {6, 33},
-    {64, 2},
-    {65, 25},
+    {63, 2},
+    {64, 25},
     {0, 34},
 };
 static const arc arcs_9_35[3] = {
-    {66, 29},
-    {61, 5},
+    {65, 29},
+    {59, 5},
     {0, 35},
 };
 static const arc arcs_9_36[1] = {
-    {60, 28},
+    {58, 28},
 };
 static const arc arcs_9_37[4] = {
-    {64, 2},
-    {61, 39},
-    {65, 40},
+    {63, 2},
+    {59, 39},
+    {64, 40},
     {0, 37},
 };
 static const arc arcs_9_38[3] = {
-    {66, 37},
-    {61, 5},
+    {65, 37},
+    {59, 5},
     {0, 38},
 };
 static const arc arcs_9_39[3] = {
-    {64, 2},
-    {65, 40},
+    {63, 2},
+    {64, 40},
     {0, 39},
 };
 static const arc arcs_9_40[4] = {
-    {66, 37},
-    {67, 41},
-    {61, 5},
+    {65, 37},
+    {66, 41},
+    {59, 5},
     {0, 40},
 };
 static const arc arcs_9_41[1] = {
-    {60, 38},
+    {58, 38},
 };
 static state states_9[42] = {
     {3, arcs_9_0},
@@ -439,11 +426,11 @@
     {40, 1},
 };
 static const arc arcs_10_1[2] = {
-    {59, 2},
+    {57, 2},
     {0, 1},
 };
 static const arc arcs_10_2[1] = {
-    {60, 3},
+    {58, 3},
 };
 static const arc arcs_10_3[1] = {
     {0, 3},
@@ -456,153 +443,153 @@
 };
 static const arc arcs_11_0[3] = {
     {6, 1},
-    {64, 2},
-    {70, 3},
+    {63, 2},
+    {69, 3},
 };
 static const arc arcs_11_1[3] = {
-    {66, 4},
-    {70, 5},
+    {65, 4},
+    {69, 5},
     {0, 1},
 };
 static const arc arcs_11_2[1] = {
-    {70, 6},
+    {69, 6},
 };
 static const arc arcs_11_3[3] = {
-    {66, 7},
-    {67, 8},
+    {65, 7},
+    {66, 8},
     {0, 3},
 };
 static const arc arcs_11_4[3] = {
-    {64, 2},
-    {70, 9},
+    {63, 2},
+    {69, 9},
     {0, 4},
 };
 static const arc arcs_11_5[2] = {
-    {66, 4},
+    {65, 4},
     {0, 5},
 };
 static const arc arcs_11_6[2] = {
-    {66, 10},
+    {65, 10},
     {0, 6},
 };
 static const arc arcs_11_7[5] = {
     {6, 11},
-    {64, 2},
-    {68, 12},
-    {70, 3},
+    {63, 2},
+    {67, 12},
+    {69, 3},
     {0, 7},
 };
 static const arc arcs_11_8[1] = {
-    {60, 13},
+    {58, 13},
 };
 static const arc arcs_11_9[3] = {
-    {66, 4},
-    {67, 14},
+    {65, 4},
+    {66, 14},
     {0, 9},
 };
 static const arc arcs_11_10[1] = {
     {0, 10},
 };
 static const arc arcs_11_11[3] = {
-    {66, 15},
-    {70, 16},
+    {65, 15},
+    {69, 16},
     {0, 11},
 };
 static const arc arcs_11_12[2] = {
-    {66, 17},
+    {65, 17},
     {0, 12},
 };
 static const arc arcs_11_13[2] = {
-    {66, 7},
+    {65, 7},
     {0, 13},
 };
 static const arc arcs_11_14[1] = {
-    {60, 5},
+    {58, 5},
 };
 static const arc arcs_11_15[3] = {
-    {64, 2},
-    {70, 18},
+    {63, 2},
+    {69, 18},
     {0, 15},
 };
 static const arc arcs_11_16[2] = {
-    {66, 15},
+    {65, 15},
     {0, 16},
 };
 static const arc arcs_11_17[4] = {
     {6, 19},
-    {64, 2},
-    {70, 20},
+    {63, 2},
+    {69, 20},
     {0, 17},
 };
 static const arc arcs_11_18[3] = {
-    {66, 15},
-    {67, 21},
+    {65, 15},
+    {66, 21},
     {0, 18},
 };
 static const arc arcs_11_19[3] = {
-    {66, 22},
-    {70, 23},
+    {65, 22},
+    {69, 23},
     {0, 19},
 };
 static const arc arcs_11_20[3] = {
-    {66, 24},
-    {67, 25},
+    {65, 24},
+    {66, 25},
     {0, 20},
 };
 static const arc arcs_11_21[1] = {
-    {60, 16},
+    {58, 16},
 };
 static const arc arcs_11_22[3] = {
-    {64, 2},
-    {70, 26},
+    {63, 2},
+    {69, 26},
     {0, 22},
 };
 static const arc arcs_11_23[2] = {
-    {66, 22},
+    {65, 22},
     {0, 23},
 };
 static const arc arcs_11_24[4] = {
     {6, 27},
-    {64, 2},
-    {70, 20},
+    {63, 2},
+    {69, 20},
     {0, 24},
 };
 static const arc arcs_11_25[1] = {
-    {60, 28},
+    {58, 28},
 };
 static const arc arcs_11_26[3] = {
-    {66, 22},
-    {67, 29},
+    {65, 22},
+    {66, 29},
     {0, 26},
 };
 static const arc arcs_11_27[3] = {
-    {66, 30},
-    {70, 31},
+    {65, 30},
+    {69, 31},
     {0, 27},
 };
 static const arc arcs_11_28[2] = {
-    {66, 24},
+    {65, 24},
     {0, 28},
 };
 static const arc arcs_11_29[1] = {
-    {60, 23},
+    {58, 23},
 };
 static const arc arcs_11_30[3] = {
-    {64, 2},
-    {70, 32},
+    {63, 2},
+    {69, 32},
     {0, 30},
 };
 static const arc arcs_11_31[2] = {
-    {66, 30},
+    {65, 30},
     {0, 31},
 };
 static const arc arcs_11_32[3] = {
-    {66, 30},
-    {67, 33},
+    {65, 30},
+    {66, 33},
     {0, 32},
 };
 static const arc arcs_11_33[1] = {
-    {60, 31},
+    {58, 31},
 };
 static state states_11[34] = {
     {3, arcs_11_0},
@@ -662,15 +649,15 @@
     {1, arcs_13_1},
 };
 static const arc arcs_14_0[1] = {
-    {71, 1},
+    {70, 1},
 };
 static const arc arcs_14_1[2] = {
-    {72, 2},
+    {71, 2},
     {2, 3},
 };
 static const arc arcs_14_2[2] = {
     {2, 3},
-    {71, 1},
+    {70, 1},
 };
 static const arc arcs_14_3[1] = {
     {0, 3},
@@ -682,6 +669,7 @@
     {1, arcs_14_3},
 };
 static const arc arcs_15_0[8] = {
+    {72, 1},
     {73, 1},
     {74, 1},
     {75, 1},
@@ -689,7 +677,6 @@
     {77, 1},
     {78, 1},
     {79, 1},
-    {80, 1},
 };
 static const arc arcs_15_1[1] = {
     {0, 1},
@@ -699,28 +686,28 @@
     {1, arcs_15_1},
 };
 static const arc arcs_16_0[1] = {
-    {81, 1},
+    {80, 1},
 };
 static const arc arcs_16_1[4] = {
-    {67, 2},
-    {82, 3},
-    {83, 4},
+    {66, 2},
+    {81, 3},
+    {82, 4},
     {0, 1},
 };
 static const arc arcs_16_2[2] = {
-    {81, 5},
-    {84, 5},
+    {80, 5},
+    {83, 5},
 };
 static const arc arcs_16_3[1] = {
     {0, 3},
 };
 static const arc arcs_16_4[2] = {
     {47, 3},
-    {84, 3},
+    {83, 3},
 };
 static const arc arcs_16_5[3] = {
-    {67, 2},
-    {61, 3},
+    {66, 2},
+    {59, 3},
     {0, 5},
 };
 static state states_16[6] = {
@@ -732,18 +719,18 @@
     {3, arcs_16_5},
 };
 static const arc arcs_17_0[1] = {
-    {59, 1},
+    {57, 1},
 };
 static const arc arcs_17_1[1] = {
-    {60, 2},
+    {58, 2},
 };
 static const arc arcs_17_2[2] = {
-    {67, 3},
+    {66, 3},
     {0, 2},
 };
 static const arc arcs_17_3[2] = {
-    {81, 4},
-    {84, 4},
+    {80, 4},
+    {83, 4},
 };
 static const arc arcs_17_4[1] = {
     {0, 4},
@@ -756,16 +743,16 @@
     {1, arcs_17_4},
 };
 static const arc arcs_18_0[2] = {
-    {85, 1},
-    {60, 1},
+    {84, 1},
+    {58, 1},
 };
 static const arc arcs_18_1[2] = {
-    {66, 2},
+    {65, 2},
     {0, 1},
 };
 static const arc arcs_18_2[3] = {
-    {85, 1},
-    {60, 1},
+    {84, 1},
+    {58, 1},
     {0, 2},
 };
 static state states_18[3] = {
@@ -774,6 +761,7 @@
     {3, arcs_18_2},
 };
 static const arc arcs_19_0[13] = {
+    {85, 1},
     {86, 1},
     {87, 1},
     {88, 1},
@@ -786,7 +774,6 @@
     {95, 1},
     {96, 1},
     {97, 1},
-    {98, 1},
 };
 static const arc arcs_19_1[1] = {
     {0, 1},
@@ -799,7 +786,7 @@
     {20, 1},
 };
 static const arc arcs_20_1[1] = {
-    {99, 2},
+    {98, 2},
 };
 static const arc arcs_20_2[1] = {
     {0, 2},
@@ -820,11 +807,11 @@
     {1, arcs_21_1},
 };
 static const arc arcs_22_0[5] = {
+    {99, 1},
     {100, 1},
     {101, 1},
     {102, 1},
     {103, 1},
-    {104, 1},
 };
 static const arc arcs_22_1[1] = {
     {0, 1},
@@ -857,7 +844,7 @@
     {31, 1},
 };
 static const arc arcs_25_1[2] = {
-    {81, 2},
+    {80, 2},
     {0, 1},
 };
 static const arc arcs_25_2[1] = {
@@ -869,7 +856,7 @@
     {1, arcs_25_2},
 };
 static const arc arcs_26_0[1] = {
-    {84, 1},
+    {83, 1},
 };
 static const arc arcs_26_1[1] = {
     {0, 1},
@@ -882,7 +869,7 @@
     {30, 1},
 };
 static const arc arcs_27_1[2] = {
-    {60, 2},
+    {58, 2},
     {0, 1},
 };
 static const arc arcs_27_2[2] = {
@@ -890,7 +877,7 @@
     {0, 2},
 };
 static const arc arcs_27_3[1] = {
-    {60, 4},
+    {58, 4},
 };
 static const arc arcs_27_4[1] = {
     {0, 4},
@@ -903,8 +890,8 @@
     {1, arcs_27_4},
 };
 static const arc arcs_28_0[2] = {
+    {104, 1},
     {105, 1},
-    {106, 1},
 };
 static const arc arcs_28_1[1] = {
     {0, 1},
@@ -917,7 +904,7 @@
     {25, 1},
 };
 static const arc arcs_29_1[1] = {
-    {107, 2},
+    {106, 2},
 };
 static const arc arcs_29_2[1] = {
     {0, 2},
@@ -931,15 +918,15 @@
     {22, 1},
 };
 static const arc arcs_30_1[3] = {
-    {108, 2},
+    {107, 2},
     {9, 2},
-    {49, 3},
+    {108, 3},
 };
 static const arc arcs_30_2[4] = {
-    {108, 2},
+    {107, 2},
     {9, 2},
     {25, 4},
-    {49, 3},
+    {108, 3},
 };
 static const arc arcs_30_3[1] = {
     {25, 4},
@@ -956,7 +943,7 @@
     {0, 6},
 };
 static const arc arcs_30_7[1] = {
-    {50, 6},
+    {61, 6},
 };
 static state states_30[8] = {
     {1, arcs_30_0},
@@ -988,7 +975,7 @@
     {1, arcs_31_3},
 };
 static const arc arcs_32_0[1] = {
-    {49, 1},
+    {108, 1},
 };
 static const arc arcs_32_1[2] = {
     {111, 2},
@@ -1010,7 +997,7 @@
     {110, 1},
 };
 static const arc arcs_33_1[2] = {
-    {66, 2},
+    {65, 2},
     {0, 1},
 };
 static const arc arcs_33_2[2] = {
@@ -1026,7 +1013,7 @@
     {112, 1},
 };
 static const arc arcs_34_1[2] = {
-    {66, 0},
+    {65, 0},
     {0, 1},
 };
 static state states_34[2] = {
@@ -1037,7 +1024,7 @@
     {40, 1},
 };
 static const arc arcs_35_1[2] = {
-    {108, 0},
+    {107, 0},
     {0, 1},
 };
 static state states_35[2] = {
@@ -1051,7 +1038,7 @@
     {40, 2},
 };
 static const arc arcs_36_2[2] = {
-    {66, 1},
+    {65, 1},
     {0, 2},
 };
 static state states_36[3] = {
@@ -1066,7 +1053,7 @@
     {40, 2},
 };
 static const arc arcs_37_2[2] = {
-    {66, 1},
+    {65, 1},
     {0, 2},
 };
 static state states_37[3] = {
@@ -1078,14 +1065,14 @@
     {15, 1},
 };
 static const arc arcs_38_1[1] = {
-    {60, 2},
+    {58, 2},
 };
 static const arc arcs_38_2[2] = {
-    {66, 3},
+    {65, 3},
     {0, 2},
 };
 static const arc arcs_38_3[1] = {
-    {60, 4},
+    {58, 4},
 };
 static const arc arcs_38_4[1] = {
     {0, 4},
@@ -1099,10 +1086,10 @@
 };
 static const arc arcs_39_0[9] = {
     {113, 1},
-    {55, 1},
     {53, 1},
+    {51, 1},
     {114, 1},
-    {56, 1},
+    {54, 1},
     {115, 1},
     {116, 1},
     {117, 1},
@@ -1120,7 +1107,7 @@
 };
 static const arc arcs_40_1[3] = {
     {114, 2},
-    {56, 2},
+    {54, 2},
     {118, 2},
 };
 static const arc arcs_40_2[1] = {
@@ -1135,24 +1122,24 @@
     {24, 1},
 };
 static const arc arcs_41_1[1] = {
-    {119, 2},
+    {49, 2},
 };
 static const arc arcs_41_2[1] = {
-    {59, 3},
+    {57, 3},
 };
 static const arc arcs_41_3[1] = {
-    {120, 4},
+    {119, 4},
 };
 static const arc arcs_41_4[3] = {
-    {121, 1},
-    {122, 5},
+    {120, 1},
+    {121, 5},
     {0, 4},
 };
 static const arc arcs_41_5[1] = {
-    {59, 6},
+    {57, 6},
 };
 static const arc arcs_41_6[1] = {
-    {120, 7},
+    {119, 7},
 };
 static const arc arcs_41_7[1] = {
     {0, 7},
@@ -1171,23 +1158,23 @@
     {33, 1},
 };
 static const arc arcs_42_1[1] = {
-    {119, 2},
+    {49, 2},
 };
 static const arc arcs_42_2[1] = {
-    {59, 3},
+    {57, 3},
 };
 static const arc arcs_42_3[1] = {
-    {120, 4},
+    {119, 4},
 };
 static const arc arcs_42_4[2] = {
-    {122, 5},
+    {121, 5},
     {0, 4},
 };
 static const arc arcs_42_5[1] = {
-    {59, 6},
+    {57, 6},
 };
 static const arc arcs_42_6[1] = {
-    {120, 7},
+    {119, 7},
 };
 static const arc arcs_42_7[1] = {
     {0, 7},
@@ -1206,33 +1193,33 @@
     {21, 1},
 };
 static const arc arcs_43_1[1] = {
-    {99, 2},
+    {98, 2},
 };
 static const arc arcs_43_2[1] = {
-    {123, 3},
+    {122, 3},
 };
 static const arc arcs_43_3[1] = {
     {47, 4},
 };
 static const arc arcs_43_4[1] = {
-    {59, 5},
+    {57, 5},
 };
 static const arc arcs_43_5[2] = {
-    {61, 6},
-    {120, 7},
+    {59, 6},
+    {119, 7},
 };
 static const arc arcs_43_6[1] = {
-    {120, 7},
+    {119, 7},
 };
 static const arc arcs_43_7[2] = {
-    {122, 8},
+    {121, 8},
     {0, 7},
 };
 static const arc arcs_43_8[1] = {
-    {59, 9},
+    {57, 9},
 };
 static const arc arcs_43_9[1] = {
-    {120, 10},
+    {119, 10},
 };
 static const arc arcs_43_10[1] = {
     {0, 10},
@@ -1254,44 +1241,44 @@
     {32, 1},
 };
 static const arc arcs_44_1[1] = {
-    {59, 2},
+    {57, 2},
 };
 static const arc arcs_44_2[1] = {
-    {120, 3},
+    {119, 3},
 };
 static const arc arcs_44_3[2] = {
-    {124, 4},
-    {125, 5},
+    {123, 4},
+    {124, 5},
 };
 static const arc arcs_44_4[1] = {
-    {59, 6},
+    {57, 6},
 };
 static const arc arcs_44_5[1] = {
-    {59, 7},
+    {57, 7},
 };
 static const arc arcs_44_6[1] = {
-    {120, 8},
+    {119, 8},
 };
 static const arc arcs_44_7[1] = {
-    {120, 9},
+    {119, 9},
 };
 static const arc arcs_44_8[1] = {
     {0, 8},
 };
 static const arc arcs_44_9[4] = {
-    {122, 10},
-    {124, 4},
-    {125, 5},
+    {121, 10},
+    {123, 4},
+    {124, 5},
     {0, 9},
 };
 static const arc arcs_44_10[1] = {
-    {59, 11},
+    {57, 11},
 };
 static const arc arcs_44_11[1] = {
-    {120, 12},
+    {119, 12},
 };
 static const arc arcs_44_12[2] = {
-    {124, 4},
+    {123, 4},
     {0, 12},
 };
 static state states_44[13] = {
@@ -1313,18 +1300,18 @@
     {34, 1},
 };
 static const arc arcs_45_1[1] = {
-    {126, 2},
+    {125, 2},
 };
 static const arc arcs_45_2[2] = {
-    {66, 1},
-    {59, 3},
+    {65, 1},
+    {57, 3},
 };
 static const arc arcs_45_3[2] = {
-    {61, 4},
-    {120, 5},
+    {59, 4},
+    {119, 5},
 };
 static const arc arcs_45_4[1] = {
-    {120, 5},
+    {119, 5},
 };
 static const arc arcs_45_5[1] = {
     {0, 5},
@@ -1338,14 +1325,14 @@
     {1, arcs_45_5},
 };
 static const arc arcs_46_0[1] = {
-    {60, 1},
+    {58, 1},
 };
 static const arc arcs_46_1[2] = {
     {111, 2},
     {0, 1},
 };
 static const arc arcs_46_2[1] = {
-    {127, 3},
+    {126, 3},
 };
 static const arc arcs_46_3[1] = {
     {0, 3},
@@ -1357,10 +1344,10 @@
     {1, arcs_46_3},
 };
 static const arc arcs_47_0[1] = {
-    {128, 1},
+    {127, 1},
 };
 static const arc arcs_47_1[2] = {
-    {60, 2},
+    {58, 2},
     {0, 1},
 };
 static const arc arcs_47_2[2] = {
@@ -1385,7 +1372,7 @@
     {4, 2},
 };
 static const arc arcs_48_1[1] = {
-    {129, 3},
+    {128, 3},
 };
 static const arc arcs_48_2[1] = {
     {0, 2},
@@ -1394,7 +1381,7 @@
     {45, 4},
 };
 static const arc arcs_48_4[2] = {
-    {130, 2},
+    {129, 2},
     {45, 4},
 };
 static state states_48[5] = {
@@ -1405,14 +1392,14 @@
     {2, arcs_48_4},
 };
 static const arc arcs_49_0[1] = {
-    {60, 1},
+    {58, 1},
 };
 static const arc arcs_49_1[2] = {
-    {131, 2},
+    {130, 2},
     {0, 1},
 };
 static const arc arcs_49_2[1] = {
-    {60, 3},
+    {58, 3},
 };
 static const arc arcs_49_3[1] = {
     {0, 3},
@@ -1424,8 +1411,8 @@
     {1, arcs_49_3},
 };
 static const arc arcs_50_0[2] = {
-    {132, 1},
-    {133, 2},
+    {131, 1},
+    {132, 2},
 };
 static const arc arcs_50_1[1] = {
     {0, 1},
@@ -1435,13 +1422,13 @@
     {0, 2},
 };
 static const arc arcs_50_3[1] = {
-    {133, 4},
+    {132, 4},
 };
 static const arc arcs_50_4[1] = {
-    {122, 5},
+    {121, 5},
 };
 static const arc arcs_50_5[1] = {
-    {60, 1},
+    {58, 1},
 };
 static state states_50[6] = {
     {2, arcs_50_0},
@@ -1452,8 +1439,8 @@
     {1, arcs_50_5},
 };
 static const arc arcs_51_0[2] = {
-    {135, 1},
-    {133, 1},
+    {134, 1},
+    {132, 1},
 };
 static const arc arcs_51_1[1] = {
     {0, 1},
@@ -1466,14 +1453,14 @@
     {26, 1},
 };
 static const arc arcs_52_1[2] = {
-    {59, 2},
-    {69, 3},
+    {57, 2},
+    {68, 3},
 };
 static const arc arcs_52_2[1] = {
-    {60, 4},
+    {58, 4},
 };
 static const arc arcs_52_3[1] = {
-    {59, 2},
+    {57, 2},
 };
 static const arc arcs_52_4[1] = {
     {0, 4},
@@ -1489,14 +1476,14 @@
     {26, 1},
 };
 static const arc arcs_53_1[2] = {
-    {59, 2},
-    {69, 3},
+    {57, 2},
+    {68, 3},
 };
 static const arc arcs_53_2[1] = {
-    {134, 4},
+    {133, 4},
 };
 static const arc arcs_53_3[1] = {
-    {59, 2},
+    {57, 2},
 };
 static const arc arcs_53_4[1] = {
     {0, 4},
@@ -1509,10 +1496,10 @@
     {1, arcs_53_4},
 };
 static const arc arcs_54_0[1] = {
-    {136, 1},
+    {135, 1},
 };
 static const arc arcs_54_1[2] = {
-    {137, 0},
+    {136, 0},
     {0, 1},
 };
 static state states_54[2] = {
@@ -1520,10 +1507,10 @@
     {2, arcs_54_1},
 };
 static const arc arcs_55_0[1] = {
-    {138, 1},
+    {137, 1},
 };
 static const arc arcs_55_1[2] = {
-    {139, 0},
+    {138, 0},
     {0, 1},
 };
 static state states_55[2] = {
@@ -1532,10 +1519,10 @@
 };
 static const arc arcs_56_0[2] = {
     {28, 1},
-    {140, 2},
+    {139, 2},
 };
 static const arc arcs_56_1[1] = {
-    {138, 2},
+    {137, 2},
 };
 static const arc arcs_56_2[1] = {
     {0, 2},
@@ -1546,10 +1533,10 @@
     {1, arcs_56_2},
 };
 static const arc arcs_57_0[1] = {
-    {127, 1},
+    {126, 1},
 };
 static const arc arcs_57_1[2] = {
-    {141, 0},
+    {140, 0},
     {0, 1},
 };
 static state states_57[2] = {
@@ -1557,15 +1544,15 @@
     {2, arcs_57_1},
 };
 static const arc arcs_58_0[10] = {
+    {141, 1},
     {142, 1},
     {143, 1},
+    {141, 1},
     {144, 1},
-    {142, 1},
     {145, 1},
     {146, 1},
-    {147, 1},
-    {123, 1},
-    {148, 2},
+    {122, 1},
+    {147, 2},
     {28, 3},
 };
 static const arc arcs_58_1[1] = {
@@ -1576,7 +1563,7 @@
     {0, 2},
 };
 static const arc arcs_58_3[1] = {
-    {123, 1},
+    {122, 1},
 };
 static state states_58[4] = {
     {10, arcs_58_0},
@@ -1588,7 +1575,7 @@
     {6, 1},
 };
 static const arc arcs_59_1[1] = {
-    {127, 2},
+    {126, 2},
 };
 static const arc arcs_59_2[1] = {
     {0, 2},
@@ -1599,10 +1586,10 @@
     {1, arcs_59_2},
 };
 static const arc arcs_60_0[1] = {
-    {149, 1},
+    {148, 1},
 };
 static const arc arcs_60_1[2] = {
-    {150, 0},
+    {149, 0},
     {0, 1},
 };
 static state states_60[2] = {
@@ -1610,10 +1597,10 @@
     {2, arcs_60_1},
 };
 static const arc arcs_61_0[1] = {
-    {151, 1},
+    {150, 1},
 };
 static const arc arcs_61_1[2] = {
-    {152, 0},
+    {151, 0},
     {0, 1},
 };
 static state states_61[2] = {
@@ -1621,10 +1608,10 @@
     {2, arcs_61_1},
 };
 static const arc arcs_62_0[1] = {
-    {153, 1},
+    {152, 1},
 };
 static const arc arcs_62_1[2] = {
-    {154, 0},
+    {153, 0},
     {0, 1},
 };
 static state states_62[2] = {
@@ -1632,11 +1619,11 @@
     {2, arcs_62_1},
 };
 static const arc arcs_63_0[1] = {
-    {155, 1},
+    {154, 1},
 };
 static const arc arcs_63_1[3] = {
+    {155, 0},
     {156, 0},
-    {157, 0},
     {0, 1},
 };
 static state states_63[2] = {
@@ -1644,7 +1631,7 @@
     {3, arcs_63_1},
 };
 static const arc arcs_64_0[1] = {
-    {158, 1},
+    {157, 1},
 };
 static const arc arcs_64_1[3] = {
     {7, 0},
@@ -1656,13 +1643,13 @@
     {3, arcs_64_1},
 };
 static const arc arcs_65_0[1] = {
-    {159, 1},
+    {158, 1},
 };
 static const arc arcs_65_1[6] = {
-    {160, 0},
+    {159, 0},
     {6, 0},
-    {68, 0},
-    {161, 0},
+    {67, 0},
+    {160, 0},
     {10, 0},
     {0, 1},
 };
@@ -1674,10 +1661,10 @@
     {7, 1},
     {8, 1},
     {37, 1},
-    {162, 2},
+    {161, 2},
 };
 static const arc arcs_66_1[1] = {
-    {159, 2},
+    {158, 2},
 };
 static const arc arcs_66_2[1] = {
     {0, 2},
@@ -1688,14 +1675,14 @@
     {1, arcs_66_2},
 };
 static const arc arcs_67_0[1] = {
-    {163, 1},
+    {162, 1},
 };
 static const arc arcs_67_1[2] = {
-    {64, 2},
+    {63, 2},
     {0, 1},
 };
 static const arc arcs_67_2[1] = {
-    {159, 3},
+    {158, 3},
 };
 static const arc arcs_67_3[1] = {
     {0, 3},
@@ -1708,13 +1695,13 @@
 };
 static const arc arcs_68_0[2] = {
     {39, 1},
-    {164, 2},
+    {163, 2},
 };
 static const arc arcs_68_1[1] = {
-    {164, 2},
+    {163, 2},
 };
 static const arc arcs_68_2[2] = {
-    {165, 2},
+    {164, 2},
     {0, 2},
 };
 static state states_68[3] = {
@@ -1735,33 +1722,33 @@
     {42, 5},
 };
 static const arc arcs_69_1[3] = {
-    {50, 2},
-    {166, 6},
-    {84, 6},
+    {61, 2},
+    {165, 6},
+    {83, 6},
 };
 static const arc arcs_69_2[1] = {
     {0, 2},
 };
 static const arc arcs_69_3[2] = {
-    {167, 2},
-    {166, 7},
+    {166, 2},
+    {165, 7},
 };
 static const arc arcs_69_4[2] = {
-    {168, 2},
-    {169, 8},
+    {167, 2},
+    {168, 8},
 };
 static const arc arcs_69_5[2] = {
     {42, 5},
     {0, 5},
 };
 static const arc arcs_69_6[1] = {
-    {50, 2},
+    {61, 2},
 };
 static const arc arcs_69_7[1] = {
-    {167, 2},
+    {166, 2},
 };
 static const arc arcs_69_8[1] = {
-    {168, 2},
+    {167, 2},
 };
 static state states_69[9] = {
     {10, arcs_69_0},
@@ -1775,24 +1762,24 @@
     {1, arcs_69_8},
 };
 static const arc arcs_70_0[2] = {
-    {119, 1},
-    {85, 1},
+    {49, 1},
+    {84, 1},
 };
 static const arc arcs_70_1[3] = {
-    {66, 2},
-    {170, 3},
+    {65, 2},
+    {169, 3},
     {0, 1},
 };
 static const arc arcs_70_2[3] = {
-    {119, 4},
-    {85, 4},
+    {49, 4},
+    {84, 4},
     {0, 2},
 };
 static const arc arcs_70_3[1] = {
     {0, 3},
 };
 static const arc arcs_70_4[2] = {
-    {66, 2},
+    {65, 2},
     {0, 4},
 };
 static state states_70[5] = {
@@ -1804,12 +1791,12 @@
 };
 static const arc arcs_71_0[3] = {
     {5, 1},
-    {108, 2},
+    {107, 2},
     {14, 3},
 };
 static const arc arcs_71_1[2] = {
-    {50, 4},
-    {51, 5},
+    {61, 4},
+    {170, 5},
 };
 static const arc arcs_71_2[1] = {
     {40, 4},
@@ -1821,10 +1808,10 @@
     {0, 4},
 };
 static const arc arcs_71_5[1] = {
-    {50, 4},
+    {61, 4},
 };
 static const arc arcs_71_6[1] = {
-    {167, 4},
+    {166, 4},
 };
 static state states_71[7] = {
     {3, arcs_71_0},
@@ -1839,7 +1826,7 @@
     {172, 1},
 };
 static const arc arcs_72_1[2] = {
-    {66, 2},
+    {65, 2},
     {0, 1},
 };
 static const arc arcs_72_2[2] = {
@@ -1852,16 +1839,16 @@
     {2, arcs_72_2},
 };
 static const arc arcs_73_0[2] = {
-    {59, 1},
-    {60, 2},
+    {57, 1},
+    {58, 2},
 };
 static const arc arcs_73_1[3] = {
     {173, 3},
-    {60, 4},
+    {58, 4},
     {0, 1},
 };
 static const arc arcs_73_2[2] = {
-    {59, 1},
+    {57, 1},
     {0, 2},
 };
 static const arc arcs_73_3[1] = {
@@ -1879,10 +1866,10 @@
     {2, arcs_73_4},
 };
 static const arc arcs_74_0[1] = {
-    {59, 1},
+    {57, 1},
 };
 static const arc arcs_74_1[2] = {
-    {60, 2},
+    {58, 2},
     {0, 1},
 };
 static const arc arcs_74_2[1] = {
@@ -1894,16 +1881,16 @@
     {1, arcs_74_2},
 };
 static const arc arcs_75_0[2] = {
-    {127, 1},
-    {85, 1},
+    {126, 1},
+    {84, 1},
 };
 static const arc arcs_75_1[2] = {
-    {66, 2},
+    {65, 2},
     {0, 1},
 };
 static const arc arcs_75_2[3] = {
-    {127, 1},
-    {85, 1},
+    {126, 1},
+    {84, 1},
     {0, 2},
 };
 static state states_75[3] = {
@@ -1912,14 +1899,14 @@
     {3, arcs_75_2},
 };
 static const arc arcs_76_0[1] = {
-    {60, 1},
+    {58, 1},
 };
 static const arc arcs_76_1[2] = {
-    {66, 2},
+    {65, 2},
     {0, 1},
 };
 static const arc arcs_76_2[2] = {
-    {60, 1},
+    {58, 1},
     {0, 2},
 };
 static state states_76[3] = {
@@ -1928,61 +1915,61 @@
     {2, arcs_76_2},
 };
 static const arc arcs_77_0[3] = {
-    {64, 1},
-    {85, 2},
-    {60, 3},
+    {63, 1},
+    {84, 2},
+    {58, 3},
 };
 static const arc arcs_77_1[1] = {
-    {127, 4},
+    {126, 4},
 };
 static const arc arcs_77_2[3] = {
-    {66, 5},
-    {170, 6},
+    {65, 5},
+    {169, 6},
     {0, 2},
 };
 static const arc arcs_77_3[4] = {
-    {66, 5},
-    {59, 7},
-    {170, 6},
+    {65, 5},
+    {57, 7},
+    {169, 6},
     {0, 3},
 };
 static const arc arcs_77_4[3] = {
-    {66, 8},
-    {170, 6},
+    {65, 8},
+    {169, 6},
     {0, 4},
 };
 static const arc arcs_77_5[3] = {
-    {85, 9},
-    {60, 9},
+    {84, 9},
+    {58, 9},
     {0, 5},
 };
 static const arc arcs_77_6[1] = {
     {0, 6},
 };
 static const arc arcs_77_7[1] = {
-    {60, 4},
+    {58, 4},
 };
 static const arc arcs_77_8[3] = {
-    {64, 10},
-    {60, 11},
+    {63, 10},
+    {58, 11},
     {0, 8},
 };
 static const arc arcs_77_9[2] = {
-    {66, 5},
+    {65, 5},
     {0, 9},
 };
 static const arc arcs_77_10[1] = {
-    {127, 12},
+    {126, 12},
 };
 static const arc arcs_77_11[1] = {
-    {59, 13},
+    {57, 13},
 };
 static const arc arcs_77_12[2] = {
-    {66, 8},
+    {65, 8},
     {0, 12},
 };
 static const arc arcs_77_13[1] = {
-    {60, 12},
+    {58, 12},
 };
 static state states_77[14] = {
     {3, arcs_77_0},
@@ -2008,20 +1995,20 @@
 };
 static const arc arcs_78_2[2] = {
     {5, 3},
-    {59, 4},
+    {57, 4},
 };
 static const arc arcs_78_3[2] = {
-    {50, 5},
-    {51, 6},
+    {61, 5},
+    {170, 6},
 };
 static const arc arcs_78_4[1] = {
-    {120, 7},
+    {119, 7},
 };
 static const arc arcs_78_5[1] = {
-    {59, 4},
+    {57, 4},
 };
 static const arc arcs_78_6[1] = {
-    {50, 5},
+    {61, 5},
 };
 static const arc arcs_78_7[1] = {
     {0, 7},
@@ -2040,7 +2027,7 @@
     {174, 1},
 };
 static const arc arcs_79_1[2] = {
-    {66, 2},
+    {65, 2},
     {0, 1},
 };
 static const arc arcs_79_2[2] = {
@@ -2054,16 +2041,16 @@
 };
 static const arc arcs_80_0[3] = {
     {6, 1},
-    {64, 1},
-    {60, 2},
+    {63, 1},
+    {58, 2},
 };
 static const arc arcs_80_1[1] = {
-    {60, 3},
+    {58, 3},
 };
 static const arc arcs_80_2[4] = {
-    {131, 1},
-    {67, 1},
-    {170, 3},
+    {130, 1},
+    {66, 1},
+    {169, 3},
     {0, 2},
 };
 static const arc arcs_80_3[1] = {
@@ -2076,7 +2063,7 @@
     {1, arcs_80_3},
 };
 static const arc arcs_81_0[2] = {
-    {170, 1},
+    {169, 1},
     {176, 1},
 };
 static const arc arcs_81_1[1] = {
@@ -2090,13 +2077,13 @@
     {21, 1},
 };
 static const arc arcs_82_1[1] = {
-    {99, 2},
+    {98, 2},
 };
 static const arc arcs_82_2[1] = {
-    {123, 3},
+    {122, 3},
 };
 static const arc arcs_82_3[1] = {
-    {133, 4},
+    {132, 4},
 };
 static const arc arcs_82_4[2] = {
     {175, 5},
@@ -2132,7 +2119,7 @@
     {24, 1},
 };
 static const arc arcs_84_1[1] = {
-    {134, 2},
+    {133, 2},
 };
 static const arc arcs_84_2[2] = {
     {175, 3},
@@ -2174,10 +2161,10 @@
 };
 static const arc arcs_87_0[2] = {
     {22, 1},
-    {81, 2},
+    {80, 2},
 };
 static const arc arcs_87_1[1] = {
-    {60, 2},
+    {58, 2},
 };
 static const arc arcs_87_2[1] = {
     {0, 2},
@@ -2192,8 +2179,8 @@
     {4, 2},
 };
 static const arc arcs_88_1[2] = {
-    {129, 3},
-    {61, 4},
+    {128, 3},
+    {59, 4},
 };
 static const arc arcs_88_2[1] = {
     {0, 2},
@@ -2205,11 +2192,11 @@
     {2, 6},
 };
 static const arc arcs_88_5[2] = {
-    {130, 2},
+    {129, 2},
     {45, 5},
 };
 static const arc arcs_88_6[1] = {
-    {129, 3},
+    {128, 3},
 };
 static state states_88[7] = {
     {2, arcs_88_0},
@@ -2239,17 +2226,17 @@
     {5, 1},
 };
 static const arc arcs_90_1[2] = {
-    {50, 2},
+    {61, 2},
     {182, 3},
 };
 static const arc arcs_90_2[1] = {
-    {58, 4},
+    {56, 4},
 };
 static const arc arcs_90_3[1] = {
-    {50, 2},
+    {61, 2},
 };
 static const arc arcs_90_4[1] = {
-    {60, 5},
+    {58, 5},
 };
 static const arc arcs_90_5[1] = {
     {0, 5},
@@ -2264,27 +2251,27 @@
 };
 static const arc arcs_91_0[3] = {
     {6, 1},
-    {64, 2},
-    {60, 3},
+    {63, 2},
+    {58, 3},
 };
 static const arc arcs_91_1[3] = {
-    {66, 4},
-    {60, 5},
+    {65, 4},
+    {58, 5},
     {0, 1},
 };
 static const arc arcs_91_2[1] = {
-    {60, 6},
+    {58, 6},
 };
 static const arc arcs_91_3[2] = {
-    {66, 7},
+    {65, 7},
     {0, 3},
 };
 static const arc arcs_91_4[2] = {
-    {64, 2},
-    {60, 5},
+    {63, 2},
+    {58, 5},
 };
 static const arc arcs_91_5[2] = {
-    {66, 4},
+    {65, 4},
     {0, 5},
 };
 static const arc arcs_91_6[1] = {
@@ -2292,21 +2279,21 @@
 };
 static const arc arcs_91_7[4] = {
     {6, 8},
-    {64, 2},
-    {60, 3},
+    {63, 2},
+    {58, 3},
     {0, 7},
 };
 static const arc arcs_91_8[3] = {
-    {66, 9},
-    {60, 10},
+    {65, 9},
+    {58, 10},
     {0, 8},
 };
 static const arc arcs_91_9[2] = {
-    {64, 2},
-    {60, 10},
+    {63, 2},
+    {58, 10},
 };
 static const arc arcs_91_10[2] = {
-    {66, 9},
+    {65, 9},
     {0, 10},
 };
 static state states_91[11] = {
@@ -2329,7 +2316,7 @@
      "\344\377\377\377\377\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {258, "eval_input", 3, states_2,
      "\240\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-    {259, "decorator", 7, states_3,
+    {259, "decorator", 4, states_3,
      "\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {260, "decorators", 2, states_4,
      "\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
@@ -2342,11 +2329,11 @@
     {264, "parameters", 4, states_8,
      "\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {265, "typedargslist", 42, states_9,
-     "\100\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\100\000\000\000\000\001\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {266, "tfpdef", 4, states_10,
      "\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {267, "varargslist", 34, states_11,
-     "\100\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\100\000\000\000\000\001\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {268, "vfpdef", 2, states_12,
      "\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {269, "stmt", 2, states_13,
@@ -2358,11 +2345,11 @@
     {272, "expr_stmt", 6, states_16,
      "\340\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {273, "annassign", 5, states_17,
-     "\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {274, "testlist_star_expr", 3, states_18,
      "\340\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {275, "augassign", 2, states_19,
-     "\000\000\000\000\000\000\000\000\000\000\300\377\007\000\000\000\000\000\000\000\000\000\000"},
+     "\000\000\000\000\000\000\000\000\000\000\340\377\003\000\000\000\000\000\000\000\000\000\000"},
     {276, "del_stmt", 3, states_20,
      "\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {277, "pass_stmt", 2, states_21,
@@ -2418,7 +2405,7 @@
     {302, "with_item", 4, states_46,
      "\240\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {303, "except_clause", 5, states_47,
-     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000"},
+     "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000"},
     {304, "suite", 5, states_48,
      "\344\373\325\376\270\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {305, "namedexpr_test", 4, states_49,
@@ -2440,7 +2427,7 @@
     {313, "comparison", 2, states_57,
      "\240\173\000\000\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {314, "comp_op", 4, states_58,
-     "\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\010\000\300\037\000\000\000\000"},
+     "\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\004\000\340\017\000\000\000\000"},
     {315, "star_expr", 3, states_59,
      "\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {316, "expr", 2, states_60,
@@ -2466,25 +2453,25 @@
     {326, "testlist_comp", 5, states_70,
      "\340\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {327, "trailer", 7, states_71,
-     "\040\100\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
+     "\040\100\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
     {328, "subscriptlist", 3, states_72,
-     "\240\173\000\024\260\007\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\240\173\000\024\260\007\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {329, "subscript", 5, states_73,
-     "\240\173\000\024\260\007\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\240\173\000\024\260\007\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {330, "sliceop", 3, states_74,
-     "\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {331, "exprlist", 3, states_75,
      "\340\173\000\000\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {332, "testlist", 3, states_76,
      "\240\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {333, "dictorsetmaker", 14, states_77,
-     "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {334, "classdef", 8, states_78,
      "\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {335, "arglist", 3, states_79,
-     "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {336, "argument", 4, states_80,
-     "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {337, "comp_iter", 2, states_81,
      "\000\000\040\001\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {338, "sync_comp_for", 6, states_82,
@@ -2506,7 +2493,7 @@
     {346, "func_type", 6, states_90,
      "\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
     {347, "typelist", 11, states_91,
-     "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+     "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 };
 static const label labels[183] = {
     {0, "EMPTY"},
@@ -2558,9 +2545,7 @@
     {258, 0},
     {332, 0},
     {259, 0},
-    {291, 0},
-    {8, 0},
-    {335, 0},
+    {305, 0},
     {260, 0},
     {261, 0},
     {262, 0},
@@ -2572,6 +2557,7 @@
     {306, 0},
     {58, 0},
     {344, 0},
+    {8, 0},
     {265, 0},
     {35, 0},
     {266, 0},
@@ -2618,6 +2604,7 @@
     {285, 0},
     {290, 0},
     {23, 0},
+    {291, 0},
     {289, 0},
     {287, 0},
     {1, "as"},
@@ -2628,7 +2615,6 @@
     {300, 0},
     {298, 0},
     {301, 0},
-    {305, 0},
     {304, 0},
     {1, "elif"},
     {1, "else"},
@@ -2680,6 +2666,7 @@
     {26, 0},
     {333, 0},
     {339, 0},
+    {335, 0},
     {328, 0},
     {329, 0},
     {330, 0},
@@ -2693,7 +2680,7 @@
     {346, 0},
     {347, 0},
 };
-grammar _PyParser_Grammar = {
+Py_EXPORTED_SYMBOL grammar _PyParser_Grammar = {
     92,
     dfas,
     {183, labels},
diff --git a/Python/hamt.c b/Python/hamt.c
index 5efc8d7..8801c5e 100644
--- a/Python/hamt.c
+++ b/Python/hamt.c
@@ -1,9 +1,8 @@
 #include "Python.h"
 
 #include "pycore_hamt.h"
-#include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_object.h"        // _PyObject_GC_TRACK()
+#include <stddef.h>               // offsetof()
 
 /*
 This file provides an implementation of an immutable mapping using the
@@ -274,9 +273,9 @@
 */
 
 
-#define IS_ARRAY_NODE(node)     (Py_TYPE(node) == &_PyHamt_ArrayNode_Type)
-#define IS_BITMAP_NODE(node)    (Py_TYPE(node) == &_PyHamt_BitmapNode_Type)
-#define IS_COLLISION_NODE(node) (Py_TYPE(node) == &_PyHamt_CollisionNode_Type)
+#define IS_ARRAY_NODE(node)     Py_IS_TYPE(node, &_PyHamt_ArrayNode_Type)
+#define IS_BITMAP_NODE(node)    Py_IS_TYPE(node, &_PyHamt_BitmapNode_Type)
+#define IS_COLLISION_NODE(node) Py_IS_TYPE(node, &_PyHamt_CollisionNode_Type)
 
 
 /* Return type for 'find' (lookup a key) functions.
@@ -551,7 +550,7 @@
         return NULL;
     }
 
-    Py_SIZE(node) = size;
+    Py_SET_SIZE(node, size);
 
     for (i = 0; i < size; i++) {
         node->b_array[i] = NULL;
@@ -830,7 +829,7 @@
 
                Instead we start using an Array node, which has
                simpler (faster) implementation at the expense of
-               having prealocated 32 pointers for its keys/values
+               having preallocated 32 pointers for its keys/values
                pairs.
 
                Small hamt objects (<30 keys) usually don't have any
@@ -1288,7 +1287,7 @@
         node->c_array[i] = NULL;
     }
 
-    Py_SIZE(node) = size;
+    Py_SET_SIZE(node, size);
     node->c_hash = hash;
 
     _PyObject_GC_TRACK(node);
diff --git a/Python/hashtable.c b/Python/hashtable.c
new file mode 100644
index 0000000..09501de
--- /dev/null
+++ b/Python/hashtable.c
@@ -0,0 +1,417 @@
+/* The implementation of the hash table (_Py_hashtable_t) is based on the
+   cfuhash project:
+   http://sourceforge.net/projects/libcfu/
+
+   Copyright of cfuhash:
+   ----------------------------------
+   Creation date: 2005-06-24 21:22:40
+   Authors: Don
+   Change log:
+
+   Copyright (c) 2005 Don Owens
+   All rights reserved.
+
+   This code is released under the BSD license:
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+     * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+
+     * Redistributions in binary form must reproduce the above
+       copyright notice, this list of conditions and the following
+       disclaimer in the documentation and/or other materials provided
+       with the distribution.
+
+     * Neither the name of the author nor the names of its
+       contributors may be used to endorse or promote products derived
+       from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+   OF THE POSSIBILITY OF SUCH DAMAGE.
+   ----------------------------------
+*/
+
+#include "Python.h"
+#include "pycore_hashtable.h"
+
+#define HASHTABLE_MIN_SIZE 16
+#define HASHTABLE_HIGH 0.50
+#define HASHTABLE_LOW 0.10
+#define HASHTABLE_REHASH_FACTOR 2.0 / (HASHTABLE_LOW + HASHTABLE_HIGH)
+
+#define BUCKETS_HEAD(SLIST) \
+        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(SLIST)))
+#define TABLE_HEAD(HT, BUCKET) \
+        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(HT)->buckets[BUCKET]))
+#define ENTRY_NEXT(ENTRY) \
+        ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
+
+/* Forward declaration */
+static int hashtable_rehash(_Py_hashtable_t *ht);
+
+static void
+_Py_slist_init(_Py_slist_t *list)
+{
+    list->head = NULL;
+}
+
+
+static void
+_Py_slist_prepend(_Py_slist_t *list, _Py_slist_item_t *item)
+{
+    item->next = list->head;
+    list->head = item;
+}
+
+
+static void
+_Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous,
+                 _Py_slist_item_t *item)
+{
+    if (previous != NULL)
+        previous->next = item->next;
+    else
+        list->head = item->next;
+}
+
+
+Py_uhash_t
+_Py_hashtable_hash_ptr(const void *key)
+{
+    return (Py_uhash_t)_Py_HashPointerRaw(key);
+}
+
+
+int
+_Py_hashtable_compare_direct(const void *key1, const void *key2)
+{
+    return (key1 == key2);
+}
+
+
+/* makes sure the real size of the buckets array is a power of 2 */
+static size_t
+round_size(size_t s)
+{
+    size_t i;
+    if (s < HASHTABLE_MIN_SIZE)
+        return HASHTABLE_MIN_SIZE;
+    i = 1;
+    while (i < s)
+        i <<= 1;
+    return i;
+}
+
+
+size_t
+_Py_hashtable_size(const _Py_hashtable_t *ht)
+{
+    size_t size = sizeof(_Py_hashtable_t);
+    /* buckets */
+    size += ht->nbuckets * sizeof(_Py_hashtable_entry_t *);
+    /* entries */
+    size += ht->nentries * sizeof(_Py_hashtable_entry_t);
+    return size;
+}
+
+
+_Py_hashtable_entry_t *
+_Py_hashtable_get_entry_generic(_Py_hashtable_t *ht, const void *key)
+{
+    Py_uhash_t key_hash = ht->hash_func(key);
+    size_t index = key_hash & (ht->nbuckets - 1);
+    _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
+    while (1) {
+        if (entry == NULL) {
+            return NULL;
+        }
+        if (entry->key_hash == key_hash && ht->compare_func(key, entry->key)) {
+            break;
+        }
+        entry = ENTRY_NEXT(entry);
+    }
+    return entry;
+}
+
+
+// Specialized for:
+// hash_func == _Py_hashtable_hash_ptr
+// compare_func == _Py_hashtable_compare_direct
+static _Py_hashtable_entry_t *
+_Py_hashtable_get_entry_ptr(_Py_hashtable_t *ht, const void *key)
+{
+    Py_uhash_t key_hash = _Py_hashtable_hash_ptr(key);
+    size_t index = key_hash & (ht->nbuckets - 1);
+    _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
+    while (1) {
+        if (entry == NULL) {
+            return NULL;
+        }
+        // Compare directly keys (ignore entry->key_hash)
+        if (entry->key == key) {
+            break;
+        }
+        entry = ENTRY_NEXT(entry);
+    }
+    return entry;
+}
+
+
+void*
+_Py_hashtable_steal(_Py_hashtable_t *ht, const void *key)
+{
+    Py_uhash_t key_hash = ht->hash_func(key);
+    size_t index = key_hash & (ht->nbuckets - 1);
+
+    _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
+    _Py_hashtable_entry_t *previous = NULL;
+    while (1) {
+        if (entry == NULL) {
+            // not found
+            return NULL;
+        }
+        if (entry->key_hash == key_hash && ht->compare_func(key, entry->key)) {
+            break;
+        }
+        previous = entry;
+        entry = ENTRY_NEXT(entry);
+    }
+
+    _Py_slist_remove(&ht->buckets[index], (_Py_slist_item_t *)previous,
+                     (_Py_slist_item_t *)entry);
+    ht->nentries--;
+
+    void *value = entry->value;
+    ht->alloc.free(entry);
+
+    if ((float)ht->nentries / (float)ht->nbuckets < HASHTABLE_LOW) {
+        // Ignore failure: error cannot be reported to the caller
+        hashtable_rehash(ht);
+    }
+    return value;
+}
+
+
+int
+_Py_hashtable_set(_Py_hashtable_t *ht, const void *key, void *value)
+{
+    _Py_hashtable_entry_t *entry;
+
+#ifndef NDEBUG
+    /* Don't write the assertion on a single line because it is interesting
+       to know the duplicated entry if the assertion failed. The entry can
+       be read using a debugger. */
+    entry = ht->get_entry_func(ht, key);
+    assert(entry == NULL);
+#endif
+
+
+    entry = ht->alloc.malloc(sizeof(_Py_hashtable_entry_t));
+    if (entry == NULL) {
+        /* memory allocation failed */
+        return -1;
+    }
+
+    entry->key_hash = ht->hash_func(key);
+    entry->key = (void *)key;
+    entry->value = value;
+
+    ht->nentries++;
+    if ((float)ht->nentries / (float)ht->nbuckets > HASHTABLE_HIGH) {
+        if (hashtable_rehash(ht) < 0) {
+            ht->nentries--;
+            ht->alloc.free(entry);
+            return -1;
+        }
+    }
+
+    size_t index = entry->key_hash & (ht->nbuckets - 1);
+    _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry);
+    return 0;
+}
+
+
+void*
+_Py_hashtable_get(_Py_hashtable_t *ht, const void *key)
+{
+    _Py_hashtable_entry_t *entry = ht->get_entry_func(ht, key);
+    if (entry != NULL) {
+        return entry->value;
+    }
+    else {
+        return NULL;
+    }
+}
+
+
+int
+_Py_hashtable_foreach(_Py_hashtable_t *ht,
+                      _Py_hashtable_foreach_func func,
+                      void *user_data)
+{
+    for (size_t hv = 0; hv < ht->nbuckets; hv++) {
+        _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, hv);
+        while (entry != NULL) {
+            int res = func(ht, entry->key, entry->value, user_data);
+            if (res) {
+                return res;
+            }
+            entry = ENTRY_NEXT(entry);
+        }
+    }
+    return 0;
+}
+
+
+static int
+hashtable_rehash(_Py_hashtable_t *ht)
+{
+    size_t new_size = round_size((size_t)(ht->nentries * HASHTABLE_REHASH_FACTOR));
+    if (new_size == ht->nbuckets) {
+        return 0;
+    }
+
+    size_t buckets_size = new_size * sizeof(ht->buckets[0]);
+    _Py_slist_t *new_buckets = ht->alloc.malloc(buckets_size);
+    if (new_buckets == NULL) {
+        /* memory allocation failed */
+        return -1;
+    }
+    memset(new_buckets, 0, buckets_size);
+
+    for (size_t bucket = 0; bucket < ht->nbuckets; bucket++) {
+        _Py_hashtable_entry_t *entry = BUCKETS_HEAD(ht->buckets[bucket]);
+        while (entry != NULL) {
+            assert(ht->hash_func(entry->key) == entry->key_hash);
+            _Py_hashtable_entry_t *next = ENTRY_NEXT(entry);
+            size_t entry_index = entry->key_hash & (new_size - 1);
+
+            _Py_slist_prepend(&new_buckets[entry_index], (_Py_slist_item_t*)entry);
+
+            entry = next;
+        }
+    }
+
+    ht->alloc.free(ht->buckets);
+    ht->nbuckets = new_size;
+    ht->buckets = new_buckets;
+    return 0;
+}
+
+
+_Py_hashtable_t *
+_Py_hashtable_new_full(_Py_hashtable_hash_func hash_func,
+                       _Py_hashtable_compare_func compare_func,
+                       _Py_hashtable_destroy_func key_destroy_func,
+                       _Py_hashtable_destroy_func value_destroy_func,
+                       _Py_hashtable_allocator_t *allocator)
+{
+    _Py_hashtable_allocator_t alloc;
+    if (allocator == NULL) {
+        alloc.malloc = PyMem_Malloc;
+        alloc.free = PyMem_Free;
+    }
+    else {
+        alloc = *allocator;
+    }
+
+    _Py_hashtable_t *ht = (_Py_hashtable_t *)alloc.malloc(sizeof(_Py_hashtable_t));
+    if (ht == NULL) {
+        return ht;
+    }
+
+    ht->nbuckets = HASHTABLE_MIN_SIZE;
+    ht->nentries = 0;
+
+    size_t buckets_size = ht->nbuckets * sizeof(ht->buckets[0]);
+    ht->buckets = alloc.malloc(buckets_size);
+    if (ht->buckets == NULL) {
+        alloc.free(ht);
+        return NULL;
+    }
+    memset(ht->buckets, 0, buckets_size);
+
+    ht->get_entry_func = _Py_hashtable_get_entry_generic;
+    ht->hash_func = hash_func;
+    ht->compare_func = compare_func;
+    ht->key_destroy_func = key_destroy_func;
+    ht->value_destroy_func = value_destroy_func;
+    ht->alloc = alloc;
+    if (ht->hash_func == _Py_hashtable_hash_ptr
+        && ht->compare_func == _Py_hashtable_compare_direct)
+    {
+        ht->get_entry_func = _Py_hashtable_get_entry_ptr;
+    }
+    return ht;
+}
+
+
+_Py_hashtable_t *
+_Py_hashtable_new(_Py_hashtable_hash_func hash_func,
+                  _Py_hashtable_compare_func compare_func)
+{
+    return _Py_hashtable_new_full(hash_func, compare_func,
+                                  NULL, NULL, NULL);
+}
+
+
+static void
+_Py_hashtable_destroy_entry(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry)
+{
+    if (ht->key_destroy_func) {
+        ht->key_destroy_func(entry->key);
+    }
+    if (ht->value_destroy_func) {
+        ht->value_destroy_func(entry->value);
+    }
+    ht->alloc.free(entry);
+}
+
+
+void
+_Py_hashtable_clear(_Py_hashtable_t *ht)
+{
+    for (size_t i=0; i < ht->nbuckets; i++) {
+        _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, i);
+        while (entry != NULL) {
+            _Py_hashtable_entry_t *next = ENTRY_NEXT(entry);
+            _Py_hashtable_destroy_entry(ht, entry);
+            entry = next;
+        }
+        _Py_slist_init(&ht->buckets[i]);
+    }
+    ht->nentries = 0;
+    // Ignore failure: clear function is not expected to fail
+    // because of a memory allocation failure.
+    (void)hashtable_rehash(ht);
+}
+
+
+void
+_Py_hashtable_destroy(_Py_hashtable_t *ht)
+{
+    for (size_t i = 0; i < ht->nbuckets; i++) {
+        _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, i);
+        while (entry) {
+            _Py_hashtable_entry_t *entry_next = ENTRY_NEXT(entry);
+            _Py_hashtable_destroy_entry(ht, entry);
+            entry = entry_next;
+        }
+    }
+
+    ht->alloc.free(ht->buckets);
+    ht->alloc.free(ht);
+}
diff --git a/Python/import.c b/Python/import.c
index b73fe2f..5e39a2f 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -4,15 +4,17 @@
 
 #include "Python-ast.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
+#include "pycore_initconfig.h"
+#include "pycore_pyerrors.h"
 #include "pycore_pyhash.h"
 #include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h"         // _PyMem_SetDefaultAllocator()
+#include "pycore_interp.h"        // _PyInterpreterState_ClearModules()
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "pycore_sysmodule.h"
 #include "errcode.h"
 #include "marshal.h"
 #include "code.h"
-#include "frameobject.h"
-#include "osdefs.h"
 #include "importdl.h"
 #include "pydtrace.h"
 
@@ -25,6 +27,9 @@
 
 #define CACHEDIR "__pycache__"
 
+/* Forward references */
+static PyObject *import_add_module(PyThreadState *tstate, PyObject *name);
+
 /* See _PyImport_FixupExtensionObject() below */
 static PyObject *extensions = NULL;
 
@@ -34,6 +39,9 @@
 struct _inittab *PyImport_Inittab = _PyImport_Inittab;
 static struct _inittab *inittab_copy = NULL;
 
+_Py_IDENTIFIER(__path__);
+_Py_IDENTIFIER(__spec__);
+
 /*[clinic input]
 module _imp
 [clinic start generated code]*/
@@ -44,17 +52,7 @@
 /* Initialize things */
 
 PyStatus
-_PyImport_Init(PyInterpreterState *interp)
-{
-    interp->builtins_copy = PyDict_Copy(interp->builtins);
-    if (interp->builtins_copy == NULL) {
-        return _PyStatus_ERR("Can't backup builtins dict");
-    }
-    return _PyStatus_OK();
-}
-
-PyStatus
-_PyImportHooks_Init(void)
+_PyImportHooks_Init(PyThreadState *tstate)
 {
     PyObject *v, *path_hooks = NULL;
     int err = 0;
@@ -85,31 +83,32 @@
     return _PyStatus_OK();
 
   error:
-    PyErr_Print();
+    _PyErr_Print(tstate);
     return _PyStatus_ERR("initializing sys.meta_path, sys.path_hooks, "
                         "or path_importer_cache failed");
 }
 
 PyStatus
-_PyImportZip_Init(PyInterpreterState *interp)
+_PyImportZip_Init(PyThreadState *tstate)
 {
     PyObject *path_hooks, *zipimport;
     int err = 0;
 
     path_hooks = PySys_GetObject("path_hooks");
     if (path_hooks == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks");
+        _PyErr_SetString(tstate, PyExc_RuntimeError,
+                         "unable to get sys.path_hooks");
         goto error;
     }
 
-    int verbose = interp->config.verbose;
+    int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
     if (verbose) {
         PySys_WriteStderr("# installing zipimport hook\n");
     }
 
     zipimport = PyImport_ImportModule("zipimport");
     if (zipimport == NULL) {
-        PyErr_Clear(); /* No zip import module -- okay */
+        _PyErr_Clear(tstate); /* No zip import module -- okay */
         if (verbose) {
             PySys_WriteStderr("# can't import zipimport\n");
         }
@@ -120,7 +119,7 @@
                                                     &PyId_zipimporter);
         Py_DECREF(zipimport);
         if (zipimporter == NULL) {
-            PyErr_Clear(); /* No zipimporter object -- okay */
+            _PyErr_Clear(tstate); /* No zipimporter object -- okay */
             if (verbose) {
                 PySys_WriteStderr("# can't import zipimport.zipimporter\n");
             }
@@ -149,8 +148,6 @@
    in different threads to return with a partially loaded module.
    These calls are serialized by the global interpreter lock. */
 
-#include "pythread.h"
-
 static PyThread_type_lock import_lock = 0;
 static unsigned long import_lock_thread = PYTHREAD_INVALID_THREAD_ID;
 static int import_lock_level = 0;
@@ -199,6 +196,7 @@
     return 1;
 }
 
+#ifdef HAVE_FORK
 /* This function is called from PyOS_AfterFork_Child to ensure that newly
    created child processes do not share locks with the parent.
    We now acquire the import lock around fork() calls but on some platforms
@@ -208,9 +206,8 @@
 _PyImport_ReInitLock(void)
 {
     if (import_lock != NULL) {
-        import_lock = PyThread_allocate_lock();
-        if (import_lock == NULL) {
-            Py_FatalError("PyImport_ReInitLock failed to create a new lock");
+        if (_PyThread_at_fork_reinit(&import_lock) < 0) {
+            _Py_FatalErrorFunc(__func__, "failed to create a new lock");
         }
     }
     if (import_lock_level > 1) {
@@ -228,6 +225,7 @@
         import_lock_level = 0;
     }
 }
+#endif
 
 /*[clinic input]
 _imp.lock_held
@@ -310,9 +308,9 @@
 PyObject *
 PyImport_GetModuleDict(void)
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     if (interp->modules == NULL) {
-        Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
+        Py_FatalError("interpreter has no modules dictionary");
     }
     return interp->modules;
 }
@@ -342,26 +340,30 @@
 int
 _PyImport_SetModule(PyObject *name, PyObject *m)
 {
-    PyObject *modules = PyImport_GetModuleDict();
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *modules = tstate->interp->modules;
     return PyObject_SetItem(modules, name, m);
 }
 
 int
 _PyImport_SetModuleString(const char *name, PyObject *m)
 {
-    PyObject *modules = PyImport_GetModuleDict();
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *modules = tstate->interp->modules;
     return PyMapping_SetItemString(modules, name, m);
 }
 
-PyObject *
-PyImport_GetModule(PyObject *name)
+static PyObject *
+import_get_module(PyThreadState *tstate, PyObject *name)
 {
-    PyObject *m;
-    PyObject *modules = PyImport_GetModuleDict();
+    PyObject *modules = tstate->interp->modules;
     if (modules == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
+        _PyErr_SetString(tstate, PyExc_RuntimeError,
+                         "unable to get sys.modules");
         return NULL;
     }
+
+    PyObject *m;
     Py_INCREF(modules);
     if (PyDict_CheckExact(modules)) {
         m = PyDict_GetItemWithError(modules, name);  /* borrowed */
@@ -369,8 +371,8 @@
     }
     else {
         m = PyObject_GetItem(modules, name);
-        if (m == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) {
-            PyErr_Clear();
+        if (m == NULL && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+            _PyErr_Clear(tstate);
         }
     }
     Py_DECREF(modules);
@@ -378,6 +380,35 @@
 }
 
 
+static int
+import_ensure_initialized(PyThreadState *tstate, PyObject *mod, PyObject *name)
+{
+    PyInterpreterState *interp = tstate->interp;
+    PyObject *spec;
+
+    _Py_IDENTIFIER(_lock_unlock_module);
+
+    /* Optimization: only call _bootstrap._lock_unlock_module() if
+       __spec__._initializing is true.
+       NOTE: because of this, initializing must be set *before*
+       stuffing the new module in sys.modules.
+    */
+    spec = _PyObject_GetAttrId(mod, &PyId___spec__);
+    int busy = _PyModuleSpec_IsInitializing(spec);
+    Py_XDECREF(spec);
+    if (busy) {
+        /* Wait until module is done importing. */
+        PyObject *value = _PyObject_CallMethodIdOneArg(
+            interp->importlib, &PyId__lock_unlock_module, name);
+        if (value == NULL) {
+            return -1;
+        }
+        Py_DECREF(value);
+    }
+    return 0;
+}
+
+
 /* List of names to clear in sys */
 static const char * const sys_deletes[] = {
     "path", "argv", "ps1", "ps2",
@@ -397,17 +428,14 @@
 /* Un-initialize things, as good as we can */
 
 void
-PyImport_Cleanup(void)
+_PyImport_Cleanup(PyThreadState *tstate)
 {
-    Py_ssize_t pos;
-    PyObject *key, *value, *dict;
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    PyObject *modules = PyImport_GetModuleDict();
-    PyObject *weaklist = NULL;
-    const char * const *p;
-
-    if (modules == NULL)
-        return; /* Already done */
+    PyInterpreterState *interp = tstate->interp;
+    PyObject *modules = interp->modules;
+    if (modules == NULL) {
+        /* Already done */
+        return;
+    }
 
     /* Delete some special variables first.  These are common
        places where user values hide and people complain when their
@@ -417,7 +445,7 @@
 
     /* XXX Perhaps these precautions are obsolete. Who knows? */
 
-    int verbose = interp->config.verbose;
+    int verbose = _PyInterpreterState_GetConfig(interp)->verbose;
     if (verbose) {
         PySys_WriteStderr("# clear builtins._\n");
     }
@@ -425,6 +453,7 @@
         PyErr_WriteUnraisable(NULL);
     }
 
+    const char * const *p;
     for (p = sys_deletes; *p != NULL; p++) {
         if (verbose) {
             PySys_WriteStderr("# clear sys.%s\n", *p);
@@ -437,9 +466,10 @@
         if (verbose) {
             PySys_WriteStderr("# restore sys.%s\n", *p);
         }
-        value = _PyDict_GetItemStringWithError(interp->sysdict, *(p+1));
+        PyObject *value = _PyDict_GetItemStringWithError(interp->sysdict,
+                                                         *(p+1));
         if (value == NULL) {
-            if (PyErr_Occurred()) {
+            if (_PyErr_Occurred(tstate)) {
                 PyErr_WriteUnraisable(NULL);
             }
             value = Py_None;
@@ -453,7 +483,7 @@
        modules when they are removed from sys.modules.  The name is used
        for diagnosis messages (in verbose mode), while the weakref helps
        detect those modules which have been held alive. */
-    weaklist = PyList_New(0);
+    PyObject *weaklist = PyList_New(0);
     if (weaklist == NULL) {
         PyErr_WriteUnraisable(NULL);
     }
@@ -487,7 +517,8 @@
     /* Remove all modules from sys.modules, hoping that garbage collection
        can reclaim most of them. */
     if (PyDict_CheckExact(modules)) {
-        pos = 0;
+        Py_ssize_t pos = 0;
+        PyObject *key, *value;
         while (PyDict_Next(modules, &pos, &key, &value)) {
             CLEAR_MODULE(key, value);
         }
@@ -498,8 +529,9 @@
             PyErr_WriteUnraisable(NULL);
         }
         else {
+            PyObject *key;
             while ((key = PyIter_Next(iterator))) {
-                value = PyObject_GetItem(modules, key);
+                PyObject *value = PyObject_GetItem(modules, key);
                 if (value == NULL) {
                     PyErr_WriteUnraisable(NULL);
                     continue;
@@ -521,28 +553,26 @@
     }
     else {
         _Py_IDENTIFIER(clear);
-        if (_PyObject_CallMethodId(modules, &PyId_clear, "") == NULL) {
+        if (_PyObject_CallMethodIdNoArgs(modules, &PyId_clear) == NULL) {
             PyErr_WriteUnraisable(NULL);
         }
     }
     /* Restore the original builtins dict, to ensure that any
        user data gets cleared. */
-    dict = PyDict_Copy(interp->builtins);
+    PyObject *dict = PyDict_Copy(interp->builtins);
     if (dict == NULL) {
         PyErr_WriteUnraisable(NULL);
     }
     PyDict_Clear(interp->builtins);
     if (PyDict_Update(interp->builtins, interp->builtins_copy)) {
-        PyErr_Clear();
+        _PyErr_Clear(tstate);
     }
     Py_XDECREF(dict);
-    /* Clear module dict copies stored in the interpreter state */
-    _PyState_ClearModules();
     /* Collect references */
     _PyGC_CollectNoFail();
     /* Dump GC stats before it's too late, since it uses the warnings
        machinery. */
-    _PyGC_DumpShutdownStats(&_PyRuntime);
+    _PyGC_DumpShutdownStats(tstate);
 
     /* Now, if there are any modules left alive, clear their globals to
        minimize potential leaks.  All C extension modules actually end
@@ -589,6 +619,9 @@
     }
     _PyModule_ClearDict(interp->builtins);
 
+    /* Clear module dict copies stored in the interpreter state */
+    _PyInterpreterState_ClearModules(interp);
+
     /* Clear and delete the modules directory.  Actual modules will
        still be there only if imported during the execution of some
        destructor. */
@@ -609,7 +642,7 @@
 PyImport_GetMagicNumber(void)
 {
     long res;
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     PyObject *external, *pyc_magic;
 
     external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
@@ -652,52 +685,64 @@
 
 int
 _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
-                                 PyObject *filename, PyObject *modules)
+                               PyObject *filename, PyObject *modules)
 {
-    PyObject *dict, *key;
-    struct PyModuleDef *def;
-    int res;
-    if (extensions == NULL) {
-        extensions = PyDict_New();
-        if (extensions == NULL)
-            return -1;
-    }
     if (mod == NULL || !PyModule_Check(mod)) {
         PyErr_BadInternalCall();
         return -1;
     }
-    def = PyModule_GetDef(mod);
+
+    struct PyModuleDef *def = PyModule_GetDef(mod);
     if (!def) {
         PyErr_BadInternalCall();
         return -1;
     }
-    if (PyObject_SetItem(modules, name, mod) < 0)
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (PyObject_SetItem(modules, name, mod) < 0) {
         return -1;
-    if (_PyState_AddModule(mod, def) < 0) {
+    }
+    if (_PyState_AddModule(tstate, mod, def) < 0) {
         PyMapping_DelItem(modules, name);
         return -1;
     }
-    if (def->m_size == -1) {
-        if (def->m_base.m_copy) {
-            /* Somebody already imported the module,
-               likely under a different name.
-               XXX this should really not happen. */
-            Py_CLEAR(def->m_base.m_copy);
+
+    if (_Py_IsMainInterpreter(tstate)) {
+        if (def->m_size == -1) {
+            if (def->m_base.m_copy) {
+                /* Somebody already imported the module,
+                   likely under a different name.
+                   XXX this should really not happen. */
+                Py_CLEAR(def->m_base.m_copy);
+            }
+            PyObject *dict = PyModule_GetDict(mod);
+            if (dict == NULL) {
+                return -1;
+            }
+            def->m_base.m_copy = PyDict_Copy(dict);
+            if (def->m_base.m_copy == NULL) {
+                return -1;
+            }
         }
-        dict = PyModule_GetDict(mod);
-        if (dict == NULL)
+
+        if (extensions == NULL) {
+            extensions = PyDict_New();
+            if (extensions == NULL) {
+                return -1;
+            }
+        }
+
+        PyObject *key = PyTuple_Pack(2, filename, name);
+        if (key == NULL) {
             return -1;
-        def->m_base.m_copy = PyDict_Copy(dict);
-        if (def->m_base.m_copy == NULL)
+        }
+        int res = PyDict_SetItem(extensions, key, (PyObject *)def);
+        Py_DECREF(key);
+        if (res < 0) {
             return -1;
+        }
     }
-    key = PyTuple_Pack(2, filename, name);
-    if (key == NULL)
-        return -1;
-    res = PyDict_SetItem(extensions, key, (PyObject *)def);
-    Py_DECREF(key);
-    if (res < 0)
-        return -1;
+
     return 0;
 }
 
@@ -714,33 +759,32 @@
     return res;
 }
 
-PyObject *
-_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
+static PyObject *
+import_find_extension(PyThreadState *tstate, PyObject *name,
+                      PyObject *filename)
 {
-    PyObject *modules = PyImport_GetModuleDict();
-    return _PyImport_FindExtensionObjectEx(name, filename, modules);
-}
+    if (extensions == NULL) {
+        return NULL;
+    }
 
-PyObject *
-_PyImport_FindExtensionObjectEx(PyObject *name, PyObject *filename,
-                                PyObject *modules)
-{
-    PyObject *mod, *mdict, *key;
-    PyModuleDef* def;
-    if (extensions == NULL)
+    PyObject *key = PyTuple_Pack(2, filename, name);
+    if (key == NULL) {
         return NULL;
-    key = PyTuple_Pack(2, filename, name);
-    if (key == NULL)
-        return NULL;
-    def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key);
+    }
+    PyModuleDef* def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key);
     Py_DECREF(key);
-    if (def == NULL)
+    if (def == NULL) {
         return NULL;
+    }
+
+    PyObject *mod, *mdict;
+    PyObject *modules = tstate->interp->modules;
+
     if (def->m_size == -1) {
         /* Module does not support repeated initialization */
         if (def->m_base.m_copy == NULL)
             return NULL;
-        mod = _PyImport_AddModuleObject(name, modules);
+        mod = import_add_module(tstate, name);
         if (mod == NULL)
             return NULL;
         mdict = PyModule_GetDict(mod);
@@ -761,27 +805,35 @@
         }
         Py_DECREF(mod);
     }
-    if (_PyState_AddModule(mod, def) < 0) {
+    if (_PyState_AddModule(tstate, mod, def) < 0) {
         PyMapping_DelItem(modules, name);
         return NULL;
     }
-    int verbose = _PyInterpreterState_Get()->config.verbose;
+
+    int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
     if (verbose) {
         PySys_FormatStderr("import %U # previously loaded (%R)\n",
                            name, filename);
     }
     return mod;
-
 }
 
 PyObject *
-_PyImport_FindBuiltin(const char *name, PyObject *modules)
+_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return import_find_extension(tstate, name, filename);
+}
+
+
+PyObject *
+_PyImport_FindBuiltin(PyThreadState *tstate, const char *name)
 {
     PyObject *res, *nameobj;
     nameobj = PyUnicode_InternFromString(name);
     if (nameobj == NULL)
         return NULL;
-    res = _PyImport_FindExtensionObjectEx(nameobj, nameobj, modules);
+    res = import_find_extension(tstate, nameobj, nameobj);
     Py_DECREF(nameobj);
     return res;
 }
@@ -792,29 +844,29 @@
    Because the former action is most common, THIS DOES NOT RETURN A
    'NEW' REFERENCE! */
 
-PyObject *
-PyImport_AddModuleObject(PyObject *name)
+static PyObject *
+import_add_module(PyThreadState *tstate, PyObject *name)
 {
-    PyObject *modules = PyImport_GetModuleDict();
-    return _PyImport_AddModuleObject(name, modules);
-}
+    PyObject *modules = tstate->interp->modules;
+    if (modules == NULL) {
+        _PyErr_SetString(tstate, PyExc_RuntimeError,
+                         "no import module dictionary");
+        return NULL;
+    }
 
-PyObject *
-_PyImport_AddModuleObject(PyObject *name, PyObject *modules)
-{
     PyObject *m;
     if (PyDict_CheckExact(modules)) {
         m = PyDict_GetItemWithError(modules, name);
     }
     else {
         m = PyObject_GetItem(modules, name);
-        // For backward-comaptibility we copy the behavior
+        // For backward-compatibility we copy the behavior
         // of PyDict_GetItemWithError().
-        if (PyErr_ExceptionMatches(PyExc_KeyError)) {
-            PyErr_Clear();
+        if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+            _PyErr_Clear(tstate);
         }
     }
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         return NULL;
     }
     if (m != NULL && PyModule_Check(m)) {
@@ -833,34 +885,49 @@
 }
 
 PyObject *
+PyImport_AddModuleObject(PyObject *name)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return import_add_module(tstate, name);
+}
+
+
+PyObject *
 PyImport_AddModule(const char *name)
 {
-    PyObject *nameobj, *module;
-    nameobj = PyUnicode_FromString(name);
-    if (nameobj == NULL)
+    PyObject *nameobj = PyUnicode_FromString(name);
+    if (nameobj == NULL) {
         return NULL;
-    module = PyImport_AddModuleObject(nameobj);
+    }
+    PyObject *module = PyImport_AddModuleObject(nameobj);
     Py_DECREF(nameobj);
     return module;
 }
 
 
-/* Remove name from sys.modules, if it's there. */
+/* Remove name from sys.modules, if it's there.
+ * Can be called with an exception raised.
+ * If fail to remove name a new exception will be chained with the old
+ * exception, otherwise the old exception is preserved.
+ */
 static void
-remove_module(PyObject *name)
+remove_module(PyThreadState *tstate, PyObject *name)
 {
     PyObject *type, *value, *traceback;
-    PyErr_Fetch(&type, &value, &traceback);
-    PyObject *modules = PyImport_GetModuleDict();
-    if (!PyMapping_HasKey(modules, name)) {
-        goto out;
+    _PyErr_Fetch(tstate, &type, &value, &traceback);
+
+    PyObject *modules = tstate->interp->modules;
+    if (PyDict_CheckExact(modules)) {
+        PyObject *mod = _PyDict_Pop(modules, name, Py_None);
+        Py_XDECREF(mod);
     }
-    if (PyMapping_DelItem(modules, name) < 0) {
-        Py_FatalError("import:  deleting existing key in "
-                      "sys.modules failed");
+    else if (PyMapping_DelItem(modules, name) < 0) {
+        if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+            _PyErr_Clear(tstate);
+        }
     }
-out:
-    PyErr_Restore(type, value, traceback);
+
+    _PyErr_ChainExceptions(type, value, traceback);
 }
 
 
@@ -914,20 +981,18 @@
             goto error;
     }
     else if (cpathobj != NULL) {
-        PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+        PyInterpreterState *interp = _PyInterpreterState_GET();
         _Py_IDENTIFIER(_get_sourcefile);
 
         if (interp == NULL) {
-            Py_FatalError("PyImport_ExecCodeModuleWithPathnames: "
-                          "no interpreter!");
+            Py_FatalError("no current interpreter");
         }
 
         external= PyObject_GetAttrString(interp->importlib,
                                          "_bootstrap_external");
         if (external != NULL) {
-            pathobj = _PyObject_CallMethodIdObjArgs(external,
-                                                    &PyId__get_sourcefile, cpathobj,
-                                                    NULL);
+            pathobj = _PyObject_CallMethodIdOneArg(
+                external, &PyId__get_sourcefile, cpathobj);
             Py_DECREF(external);
         }
         if (pathobj == NULL)
@@ -945,23 +1010,23 @@
 }
 
 static PyObject *
-module_dict_for_exec(PyObject *name)
+module_dict_for_exec(PyThreadState *tstate, PyObject *name)
 {
     _Py_IDENTIFIER(__builtins__);
     PyObject *m, *d = NULL;
 
-    m = PyImport_AddModuleObject(name);
+    m = import_add_module(tstate, name);
     if (m == NULL)
         return NULL;
     /* If the module is being reloaded, we get the old module back
        and re-use its dict to exec the new code. */
     d = PyModule_GetDict(m);
     if (_PyDict_GetItemIdWithError(d, &PyId___builtins__) == NULL) {
-        if (PyErr_Occurred() ||
+        if (_PyErr_Occurred(tstate) ||
             _PyDict_SetItemId(d, &PyId___builtins__,
                               PyEval_GetBuiltins()) != 0)
         {
-            remove_module(name);
+            remove_module(tstate, name);
             return NULL;
         }
     }
@@ -970,22 +1035,23 @@
 }
 
 static PyObject *
-exec_code_in_module(PyObject *name, PyObject *module_dict, PyObject *code_object)
+exec_code_in_module(PyThreadState *tstate, PyObject *name,
+                    PyObject *module_dict, PyObject *code_object)
 {
     PyObject *v, *m;
 
     v = PyEval_EvalCode(code_object, module_dict, module_dict);
     if (v == NULL) {
-        remove_module(name);
+        remove_module(tstate, name);
         return NULL;
     }
     Py_DECREF(v);
 
-    m = PyImport_GetModule(name);
-    if (m == NULL && !PyErr_Occurred()) {
-        PyErr_Format(PyExc_ImportError,
-                     "Loaded module %R not found in sys.modules",
-                     name);
+    m = import_get_module(tstate, name);
+    if (m == NULL && !_PyErr_Occurred(tstate)) {
+        _PyErr_Format(tstate, PyExc_ImportError,
+                      "Loaded module %R not found in sys.modules",
+                      name);
     }
 
     return m;
@@ -995,11 +1061,11 @@
 PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
                               PyObject *cpathname)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     PyObject *d, *external, *res;
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
     _Py_IDENTIFIER(_fix_up_module);
 
-    d = module_dict_for_exec(name);
+    d = module_dict_for_exec(tstate, name);
     if (d == NULL) {
         return NULL;
     }
@@ -1007,7 +1073,8 @@
     if (pathname == NULL) {
         pathname = ((PyCodeObject *)co)->co_filename;
     }
-    external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
+    external = PyObject_GetAttrString(tstate->interp->importlib,
+                                      "_bootstrap_external");
     if (external == NULL)
         return NULL;
     res = _PyObject_CallMethodIdObjArgs(external,
@@ -1016,7 +1083,7 @@
     Py_DECREF(external);
     if (res != NULL) {
         Py_DECREF(res);
-        res = exec_code_in_module(name, d, co);
+        res = exec_code_in_module(tstate, name, d, co);
     }
     return res;
 }
@@ -1115,8 +1182,8 @@
    Returns a borrowed reference. */
 
 static PyObject *
-get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
-                  PyObject *p)
+get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache,
+                  PyObject *path_hooks, PyObject *p)
 {
     PyObject *importer;
     Py_ssize_t j, nhooks;
@@ -1130,7 +1197,7 @@
         return NULL; /* Shouldn't happen */
 
     importer = PyDict_GetItemWithError(path_importer_cache, p);
-    if (importer != NULL || PyErr_Occurred())
+    if (importer != NULL || _PyErr_Occurred(tstate))
         return importer;
 
     /* set path_importer_cache[p] to None to avoid recursion */
@@ -1141,14 +1208,14 @@
         PyObject *hook = PyList_GetItem(path_hooks, j);
         if (hook == NULL)
             return NULL;
-        importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
+        importer = PyObject_CallOneArg(hook, p);
         if (importer != NULL)
             break;
 
-        if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
+        if (!_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) {
             return NULL;
         }
-        PyErr_Clear();
+        _PyErr_Clear(tstate);
     }
     if (importer == NULL) {
         return Py_None;
@@ -1163,13 +1230,15 @@
 }
 
 PyObject *
-PyImport_GetImporter(PyObject *path) {
+PyImport_GetImporter(PyObject *path)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
     PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
 
     path_importer_cache = PySys_GetObject("path_importer_cache");
     path_hooks = PySys_GetObject("path_hooks");
     if (path_importer_cache != NULL && path_hooks != NULL) {
-        importer = get_path_importer(path_importer_cache,
+        importer = get_path_importer(tstate, path_importer_cache,
                                      path_hooks, path);
     }
     Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
@@ -1189,6 +1258,7 @@
 _imp_create_builtin(PyObject *module, PyObject *spec)
 /*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     struct _inittab *p;
     PyObject *name;
     const char *namestr;
@@ -1200,7 +1270,7 @@
     }
 
     mod = _PyImport_FindExtensionObject(name, name);
-    if (mod || PyErr_Occurred()) {
+    if (mod || _PyErr_Occurred(tstate)) {
         Py_DECREF(name);
         Py_XINCREF(mod);
         return mod;
@@ -1212,7 +1282,7 @@
         return NULL;
     }
 
-    PyObject *modules = NULL;
+    PyObject *modules = tstate->interp->modules;
     for (p = PyImport_Inittab; p->name != NULL; p++) {
         PyModuleDef *def;
         if (_PyUnicode_EqualToASCIIString(name, p->name)) {
@@ -1238,9 +1308,6 @@
                     return NULL;
                 }
                 def->m_base.m_init = p->initfunc;
-                if (modules == NULL) {
-                    modules = PyImport_GetModuleDict();
-                }
                 if (_PyImport_FixupExtensionObject(mod, name, name,
                                                    modules) < 0) {
                     Py_DECREF(name);
@@ -1329,6 +1396,7 @@
 int
 PyImport_ImportFrozenModuleObject(PyObject *name)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     const struct _frozen *p;
     PyObject *co, *m, *d;
     int ispackage;
@@ -1339,9 +1407,9 @@
     if (p == NULL)
         return 0;
     if (p->code == NULL) {
-        PyErr_Format(PyExc_ImportError,
-                     "Excluded frozen object named %R",
-                     name);
+        _PyErr_Format(tstate, PyExc_ImportError,
+                      "Excluded frozen object named %R",
+                      name);
         return -1;
     }
     size = p->size;
@@ -1352,16 +1420,16 @@
     if (co == NULL)
         return -1;
     if (!PyCode_Check(co)) {
-        PyErr_Format(PyExc_TypeError,
-                     "frozen object %R is not a code object",
-                     name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "frozen object %R is not a code object",
+                      name);
         goto err_return;
     }
     if (ispackage) {
         /* Set __path__ to the empty list */
         PyObject *l;
         int err;
-        m = PyImport_AddModuleObject(name);
+        m = import_add_module(tstate, name);
         if (m == NULL)
             goto err_return;
         d = PyModule_GetDict(m);
@@ -1374,16 +1442,18 @@
         if (err != 0)
             goto err_return;
     }
-    d = module_dict_for_exec(name);
+    d = module_dict_for_exec(tstate, name);
     if (d == NULL) {
         goto err_return;
     }
-    m = exec_code_in_module(name, d, co);
-    if (m == NULL)
+    m = exec_code_in_module(tstate, name, d, co);
+    if (m == NULL) {
         goto err_return;
+    }
     Py_DECREF(co);
     Py_DECREF(m);
     return 1;
+
 err_return:
     Py_DECREF(co);
     return -1;
@@ -1420,6 +1490,7 @@
     return result;
 }
 
+
 /* Import a module without blocking
  *
  * At first it tries to fetch the module from sys.modules. If the module was
@@ -1439,7 +1510,7 @@
 /* Remove importlib frames from the traceback,
  * except in Verbose mode. */
 static void
-remove_importlib_frames(PyInterpreterState *interp)
+remove_importlib_frames(PyThreadState *tstate)
 {
     const char *importlib_filename = "<frozen importlib._bootstrap>";
     const char *external_filename = "<frozen importlib._bootstrap_external>";
@@ -1453,8 +1524,8 @@
        from the traceback. We always trim chunks
        which end with a call to "_call_with_frames_removed". */
 
-    PyErr_Fetch(&exception, &value, &base_tb);
-    if (!exception || interp->config.verbose) {
+    _PyErr_Fetch(tstate, &exception, &value, &base_tb);
+    if (!exception || _PyInterpreterState_GetConfig(tstate->interp)->verbose) {
         goto done;
     }
 
@@ -1468,7 +1539,7 @@
         PyTracebackObject *traceback = (PyTracebackObject *)tb;
         PyObject *next = (PyObject *) traceback->tb_next;
         PyFrameObject *frame = traceback->tb_frame;
-        PyCodeObject *code = frame->f_code;
+        PyCodeObject *code = PyFrame_GetCode(frame);
         int now_in_importlib;
 
         assert(PyTraceBack_Check(tb));
@@ -1490,19 +1561,18 @@
         else {
             prev_link = (PyObject **) &traceback->tb_next;
         }
+        Py_DECREF(code);
         tb = next;
     }
 done:
-    PyErr_Restore(exception, value, base_tb);
+    _PyErr_Restore(tstate, exception, value, base_tb);
 }
 
 
 static PyObject *
-resolve_name(PyObject *name, PyObject *globals, int level)
+resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level)
 {
-    _Py_IDENTIFIER(__spec__);
     _Py_IDENTIFIER(__package__);
-    _Py_IDENTIFIER(__path__);
     _Py_IDENTIFIER(__name__);
     _Py_IDENTIFIER(parent);
     PyObject *abs_name;
@@ -1513,29 +1583,30 @@
     int level_up;
 
     if (globals == NULL) {
-        PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
+        _PyErr_SetString(tstate, PyExc_KeyError, "'__name__' not in globals");
         goto error;
     }
     if (!PyDict_Check(globals)) {
-        PyErr_SetString(PyExc_TypeError, "globals must be a dict");
+        _PyErr_SetString(tstate, PyExc_TypeError, "globals must be a dict");
         goto error;
     }
     package = _PyDict_GetItemIdWithError(globals, &PyId___package__);
     if (package == Py_None) {
         package = NULL;
     }
-    else if (package == NULL && PyErr_Occurred()) {
+    else if (package == NULL && _PyErr_Occurred(tstate)) {
         goto error;
     }
     spec = _PyDict_GetItemIdWithError(globals, &PyId___spec__);
-    if (spec == NULL && PyErr_Occurred()) {
+    if (spec == NULL && _PyErr_Occurred(tstate)) {
         goto error;
     }
 
     if (package != NULL) {
         Py_INCREF(package);
         if (!PyUnicode_Check(package)) {
-            PyErr_SetString(PyExc_TypeError, "package must be a string");
+            _PyErr_SetString(tstate, PyExc_TypeError,
+                             "package must be a string");
             goto error;
         }
         else if (spec != NULL && spec != Py_None) {
@@ -1564,8 +1635,8 @@
             goto error;
         }
         else if (!PyUnicode_Check(package)) {
-            PyErr_SetString(PyExc_TypeError,
-                    "__spec__.parent must be a string");
+            _PyErr_SetString(tstate, PyExc_TypeError,
+                             "__spec__.parent must be a string");
             goto error;
         }
     }
@@ -1578,22 +1649,24 @@
 
         package = _PyDict_GetItemIdWithError(globals, &PyId___name__);
         if (package == NULL) {
-            if (!PyErr_Occurred()) {
-                PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
+            if (!_PyErr_Occurred(tstate)) {
+                _PyErr_SetString(tstate, PyExc_KeyError,
+                                 "'__name__' not in globals");
             }
             goto error;
         }
 
         Py_INCREF(package);
         if (!PyUnicode_Check(package)) {
-            PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
+            _PyErr_SetString(tstate, PyExc_TypeError,
+                             "__name__ must be a string");
             goto error;
         }
 
         if (_PyDict_GetItemIdWithError(globals, &PyId___path__) == NULL) {
             Py_ssize_t dot;
 
-            if (PyErr_Occurred() || PyUnicode_READY(package) < 0) {
+            if (_PyErr_Occurred(tstate) || PyUnicode_READY(package) < 0) {
                 goto error;
             }
 
@@ -1624,9 +1697,9 @@
             goto error;
         }
         else if (last_dot == -1) {
-            PyErr_SetString(PyExc_ValueError,
-                            "attempted relative import beyond top-level "
-                            "package");
+            _PyErr_SetString(tstate, PyExc_ImportError,
+                             "attempted relative import beyond top-level "
+                             "package");
             goto error;
         }
     }
@@ -1642,7 +1715,7 @@
     return abs_name;
 
   no_parent_error:
-    PyErr_SetString(PyExc_ImportError,
+    _PyErr_SetString(tstate, PyExc_ImportError,
                      "attempted relative import "
                      "with no known parent package");
 
@@ -1652,12 +1725,12 @@
 }
 
 static PyObject *
-import_find_and_load(PyObject *abs_name)
+import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
 {
     _Py_IDENTIFIER(_find_and_load);
     PyObject *mod = NULL;
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    int import_time = interp->config.import_time;
+    PyInterpreterState *interp = tstate->interp;
+    int import_time = _PyInterpreterState_GetConfig(interp)->import_time;
     static int import_level;
     static _PyTime_t accumulated;
 
@@ -1666,10 +1739,10 @@
     PyObject *sys_path = PySys_GetObject("path");
     PyObject *sys_meta_path = PySys_GetObject("meta_path");
     PyObject *sys_path_hooks = PySys_GetObject("path_hooks");
-    if (PySys_Audit("import", "OOOOO",
-                    abs_name, Py_None, sys_path ? sys_path : Py_None,
-                    sys_meta_path ? sys_meta_path : Py_None,
-                    sys_path_hooks ? sys_path_hooks : Py_None) < 0) {
+    if (_PySys_Audit(tstate, "import", "OOOOO",
+                     abs_name, Py_None, sys_path ? sys_path : Py_None,
+                     sys_meta_path ? sys_meta_path : Py_None,
+                     sys_path_hooks ? sys_path_hooks : Py_None) < 0) {
         return NULL;
     }
 
@@ -1719,20 +1792,38 @@
 }
 
 PyObject *
+PyImport_GetModule(PyObject *name)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *mod;
+
+    mod = import_get_module(tstate, name);
+    if (mod != NULL && mod != Py_None) {
+        if (import_ensure_initialized(tstate, mod, name) < 0) {
+            Py_DECREF(mod);
+            remove_importlib_frames(tstate);
+            return NULL;
+        }
+    }
+    return mod;
+}
+
+PyObject *
 PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
                                  PyObject *locals, PyObject *fromlist,
                                  int level)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     _Py_IDENTIFIER(_handle_fromlist);
     PyObject *abs_name = NULL;
     PyObject *final_mod = NULL;
     PyObject *mod = NULL;
     PyObject *package = NULL;
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *interp = tstate->interp;
     int has_from;
 
     if (name == NULL) {
-        PyErr_SetString(PyExc_ValueError, "Empty module name");
+        _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
         goto error;
     }
 
@@ -1740,62 +1831,45 @@
        for added performance. */
 
     if (!PyUnicode_Check(name)) {
-        PyErr_SetString(PyExc_TypeError, "module name must be a string");
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "module name must be a string");
         goto error;
     }
     if (PyUnicode_READY(name) < 0) {
         goto error;
     }
     if (level < 0) {
-        PyErr_SetString(PyExc_ValueError, "level must be >= 0");
+        _PyErr_SetString(tstate, PyExc_ValueError, "level must be >= 0");
         goto error;
     }
 
     if (level > 0) {
-        abs_name = resolve_name(name, globals, level);
+        abs_name = resolve_name(tstate, name, globals, level);
         if (abs_name == NULL)
             goto error;
     }
     else {  /* level == 0 */
         if (PyUnicode_GET_LENGTH(name) == 0) {
-            PyErr_SetString(PyExc_ValueError, "Empty module name");
+            _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
             goto error;
         }
         abs_name = name;
         Py_INCREF(abs_name);
     }
 
-    mod = PyImport_GetModule(abs_name);
-    if (mod == NULL && PyErr_Occurred()) {
+    mod = import_get_module(tstate, abs_name);
+    if (mod == NULL && _PyErr_Occurred(tstate)) {
         goto error;
     }
 
     if (mod != NULL && mod != Py_None) {
-        _Py_IDENTIFIER(__spec__);
-        _Py_IDENTIFIER(_lock_unlock_module);
-        PyObject *spec;
-
-        /* Optimization: only call _bootstrap._lock_unlock_module() if
-           __spec__._initializing is true.
-           NOTE: because of this, initializing must be set *before*
-           stuffing the new module in sys.modules.
-         */
-        spec = _PyObject_GetAttrId(mod, &PyId___spec__);
-        if (_PyModuleSpec_IsInitializing(spec)) {
-            PyObject *value = _PyObject_CallMethodIdObjArgs(interp->importlib,
-                                            &PyId__lock_unlock_module, abs_name,
-                                            NULL);
-            if (value == NULL) {
-                Py_DECREF(spec);
-                goto error;
-            }
-            Py_DECREF(value);
+        if (import_ensure_initialized(tstate, mod, name) < 0) {
+            goto error;
         }
-        Py_XDECREF(spec);
     }
     else {
         Py_XDECREF(mod);
-        mod = import_find_and_load(abs_name);
+        mod = import_find_and_load(tstate, abs_name);
         if (mod == NULL) {
             goto error;
         }
@@ -1842,13 +1916,13 @@
                     goto error;
                 }
 
-                final_mod = PyImport_GetModule(to_return);
+                final_mod = import_get_module(tstate, to_return);
                 Py_DECREF(to_return);
                 if (final_mod == NULL) {
-                    if (!PyErr_Occurred()) {
-                        PyErr_Format(PyExc_KeyError,
-                                     "%R not in sys.modules as expected",
-                                     to_return);
+                    if (!_PyErr_Occurred(tstate)) {
+                        _PyErr_Format(tstate, PyExc_KeyError,
+                                      "%R not in sys.modules as expected",
+                                      to_return);
                     }
                     goto error;
                 }
@@ -1860,7 +1934,6 @@
         }
     }
     else {
-        _Py_IDENTIFIER(__path__);
         PyObject *path;
         if (_PyObject_LookupAttrId(mod, &PyId___path__, &path) < 0) {
             goto error;
@@ -1882,7 +1955,7 @@
     Py_XDECREF(mod);
     Py_XDECREF(package);
     if (final_mod == NULL) {
-        remove_importlib_frames(interp);
+        remove_importlib_frames(tstate);
     }
     return final_mod;
 }
@@ -1923,7 +1996,7 @@
         }
     }
 
-    reloaded_module = _PyObject_CallMethodIdObjArgs(importlib, &PyId_reload, m, NULL);
+    reloaded_module = _PyObject_CallMethodIdOneArg(importlib, &PyId_reload, m);
     Py_DECREF(importlib);
     return reloaded_module;
 }
@@ -1941,6 +2014,7 @@
 PyObject *
 PyImport_Import(PyObject *module_name)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     static PyObject *silly_list = NULL;
     static PyObject *builtins_str = NULL;
     static PyObject *import_str = NULL;
@@ -1984,8 +2058,9 @@
     /* Get the __import__ function from the builtins */
     if (PyDict_Check(builtins)) {
         import = PyObject_GetItem(builtins, import_str);
-        if (import == NULL)
-            PyErr_SetObject(PyExc_KeyError, import_str);
+        if (import == NULL) {
+            _PyErr_SetObject(tstate, PyExc_KeyError, import_str);
+        }
     }
     else
         import = PyObject_GetAttr(builtins, import_str);
@@ -2001,9 +2076,9 @@
         goto err;
     Py_DECREF(r);
 
-    r = PyImport_GetModule(module_name);
-    if (r == NULL && !PyErr_Occurred()) {
-        PyErr_SetObject(PyExc_KeyError, module_name);
+    r = import_get_module(tstate, module_name);
+    if (r == NULL && !_PyErr_Occurred(tstate)) {
+        _PyErr_SetObject(tstate, PyExc_KeyError, module_name);
     }
 
   err:
@@ -2064,6 +2139,7 @@
 _imp_init_frozen_impl(PyObject *module, PyObject *name)
 /*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     int ret;
     PyObject *m;
 
@@ -2073,7 +2149,7 @@
     if (ret == 0) {
         Py_RETURN_NONE;
     }
-    m = PyImport_AddModuleObject(name);
+    m = import_add_module(tstate, name);
     Py_XINCREF(m);
     return m;
 }
@@ -2340,7 +2416,7 @@
         goto failure;
     }
 
-    const wchar_t *mode = _PyInterpreterState_Get()->config.check_hash_pycs_mode;
+    const wchar_t *mode = _Py_GetConfig()->check_hash_pycs_mode;
     PyObject *pyc_mode = PyUnicode_FromWideChar(mode, -1);
     if (pyc_mode == NULL) {
         goto failure;
diff --git a/Python/importdl.c b/Python/importdl.c
index 1d0d32a..fbeb9fb 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -181,7 +181,7 @@
         m = NULL;
         goto error;
     }
-    if (Py_TYPE(m) == NULL) {
+    if (Py_IS_TYPE(m, NULL)) {
         /* This can happen when a PyModuleDef is returned without calling
          * PyModuleDef_Init on it
          */
diff --git a/Python/importlib.h b/Python/importlib.h
index 6719574..1fb877a 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -118,894 +118,903 @@
     58,0,0,0,115,12,0,0,0,0,1,10,1,10,1,6,
     1,6,1,6,1,122,20,95,77,111,100,117,108,101,76,111,
     99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,
-    67,0,0,0,115,60,0,0,0,116,0,160,1,161,0,125,
-    1,124,0,106,2,125,2,116,3,160,4,124,2,161,1,125,
-    3,124,3,100,0,107,8,114,36,100,1,83,0,124,3,106,
-    2,125,2,124,2,124,1,107,2,114,14,100,2,83,0,113,
-    14,100,0,83,0,41,3,78,70,84,41,5,114,23,0,0,
-    0,218,9,103,101,116,95,105,100,101,110,116,114,26,0,0,
-    0,218,12,95,98,108,111,99,107,105,110,103,95,111,110,218,
-    3,103,101,116,41,4,114,30,0,0,0,90,2,109,101,218,
-    3,116,105,100,114,24,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,218,12,104,97,115,95,100,101,
-    97,100,108,111,99,107,66,0,0,0,115,16,0,0,0,0,
-    2,8,1,6,2,10,1,8,1,4,1,6,1,8,1,122,
-    24,95,77,111,100,117,108,101,76,111,99,107,46,104,97,115,
-    95,100,101,97,100,108,111,99,107,99,1,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,9,0,0,0,67,0,
-    0,0,115,178,0,0,0,116,0,160,1,161,0,125,1,124,
-    0,116,2,124,1,60,0,122,148,124,0,106,3,143,110,1,
-    0,124,0,106,4,100,1,107,2,115,46,124,0,106,5,124,
-    1,107,2,114,84,124,1,124,0,95,5,124,0,4,0,106,
-    4,100,2,55,0,2,0,95,4,87,0,53,0,81,0,82,
-    0,163,0,87,0,162,86,100,3,83,0,124,0,160,6,161,
-    0,114,104,116,7,100,4,124,0,22,0,131,1,130,1,124,
-    0,106,8,160,9,100,5,161,1,114,130,124,0,4,0,106,
-    10,100,2,55,0,2,0,95,10,87,0,53,0,81,0,82,
-    0,88,0,124,0,106,8,160,9,161,0,1,0,124,0,106,
-    8,160,11,161,0,1,0,113,18,87,0,53,0,116,2,124,
-    1,61,0,88,0,100,6,83,0,41,7,122,185,10,32,32,
-    32,32,32,32,32,32,65,99,113,117,105,114,101,32,116,104,
-    101,32,109,111,100,117,108,101,32,108,111,99,107,46,32,32,
-    73,102,32,97,32,112,111,116,101,110,116,105,97,108,32,100,
-    101,97,100,108,111,99,107,32,105,115,32,100,101,116,101,99,
-    116,101,100,44,10,32,32,32,32,32,32,32,32,97,32,95,
-    68,101,97,100,108,111,99,107,69,114,114,111,114,32,105,115,
-    32,114,97,105,115,101,100,46,10,32,32,32,32,32,32,32,
-    32,79,116,104,101,114,119,105,115,101,44,32,116,104,101,32,
-    108,111,99,107,32,105,115,32,97,108,119,97,121,115,32,97,
-    99,113,117,105,114,101,100,32,97,110,100,32,84,114,117,101,
-    32,105,115,32,114,101,116,117,114,110,101,100,46,10,32,32,
-    32,32,32,32,32,32,114,22,0,0,0,233,1,0,0,0,
-    84,122,23,100,101,97,100,108,111,99,107,32,100,101,116,101,
-    99,116,101,100,32,98,121,32,37,114,70,78,41,12,114,23,
-    0,0,0,114,32,0,0,0,114,33,0,0,0,114,24,0,
-    0,0,114,27,0,0,0,114,26,0,0,0,114,36,0,0,
-    0,114,19,0,0,0,114,25,0,0,0,218,7,97,99,113,
-    117,105,114,101,114,28,0,0,0,218,7,114,101,108,101,97,
-    115,101,169,2,114,30,0,0,0,114,35,0,0,0,114,10,
-    0,0,0,114,10,0,0,0,114,11,0,0,0,114,38,0,
-    0,0,78,0,0,0,115,30,0,0,0,0,6,8,1,8,
-    1,2,2,8,1,20,1,6,1,14,1,18,1,8,1,12,
-    1,12,1,24,2,10,1,16,2,122,19,95,77,111,100,117,
-    108,101,76,111,99,107,46,97,99,113,117,105,114,101,99,1,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,9,
-    0,0,0,67,0,0,0,115,122,0,0,0,116,0,160,1,
-    161,0,125,1,124,0,106,2,143,98,1,0,124,0,106,3,
-    124,1,107,3,114,34,116,4,100,1,131,1,130,1,124,0,
-    106,5,100,2,107,4,115,48,116,6,130,1,124,0,4,0,
-    106,5,100,3,56,0,2,0,95,5,124,0,106,5,100,2,
-    107,2,114,108,100,0,124,0,95,3,124,0,106,7,114,108,
-    124,0,4,0,106,7,100,3,56,0,2,0,95,7,124,0,
-    106,8,160,9,161,0,1,0,87,0,53,0,81,0,82,0,
-    88,0,100,0,83,0,41,4,78,250,31,99,97,110,110,111,
-    116,32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,
-    117,105,114,101,100,32,108,111,99,107,114,22,0,0,0,114,
-    37,0,0,0,41,10,114,23,0,0,0,114,32,0,0,0,
-    114,24,0,0,0,114,26,0,0,0,218,12,82,117,110,116,
-    105,109,101,69,114,114,111,114,114,27,0,0,0,218,14,65,
-    115,115,101,114,116,105,111,110,69,114,114,111,114,114,28,0,
-    0,0,114,25,0,0,0,114,39,0,0,0,114,40,0,0,
-    0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
-    114,39,0,0,0,103,0,0,0,115,22,0,0,0,0,1,
-    8,1,8,1,10,1,8,1,14,1,14,1,10,1,6,1,
-    6,1,14,1,122,19,95,77,111,100,117,108,101,76,111,99,
-    107,46,114,101,108,101,97,115,101,99,1,0,0,0,0,0,
-    0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,0,
-    0,0,115,18,0,0,0,100,1,160,0,124,0,106,1,116,
-    2,124,0,131,1,161,2,83,0,41,2,78,122,23,95,77,
-    111,100,117,108,101,76,111,99,107,40,123,33,114,125,41,32,
-    97,116,32,123,125,169,3,218,6,102,111,114,109,97,116,114,
-    17,0,0,0,218,2,105,100,169,1,114,30,0,0,0,114,
-    10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,
-    95,95,114,101,112,114,95,95,116,0,0,0,115,2,0,0,
-    0,0,1,122,20,95,77,111,100,117,108,101,76,111,99,107,
-    46,95,95,114,101,112,114,95,95,78,41,9,114,1,0,0,
-    0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,
-    114,31,0,0,0,114,36,0,0,0,114,38,0,0,0,114,
-    39,0,0,0,114,48,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,10,0,0,0,114,11,0,0,0,114,20,0,
-    0,0,52,0,0,0,115,12,0,0,0,8,1,4,5,8,
-    8,8,12,8,25,8,13,114,20,0,0,0,99,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
-    0,64,0,0,0,115,48,0,0,0,101,0,90,1,100,0,
-    90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,
-    100,5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,
-    100,9,132,0,90,7,100,10,83,0,41,11,218,16,95,68,
-    117,109,109,121,77,111,100,117,108,101,76,111,99,107,122,86,
-    65,32,115,105,109,112,108,101,32,95,77,111,100,117,108,101,
-    76,111,99,107,32,101,113,117,105,118,97,108,101,110,116,32,
-    102,111,114,32,80,121,116,104,111,110,32,98,117,105,108,100,
-    115,32,119,105,116,104,111,117,116,10,32,32,32,32,109,117,
-    108,116,105,45,116,104,114,101,97,100,105,110,103,32,115,117,
-    112,112,111,114,116,46,99,2,0,0,0,0,0,0,0,0,
-    0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,
-    16,0,0,0,124,1,124,0,95,0,100,1,124,0,95,1,
-    100,0,83,0,114,21,0,0,0,41,2,114,17,0,0,0,
-    114,27,0,0,0,114,29,0,0,0,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,114,31,0,0,0,124,0,
-    0,0,115,4,0,0,0,0,1,6,1,122,25,95,68,117,
-    109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95,
-    105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
-    18,0,0,0,124,0,4,0,106,0,100,1,55,0,2,0,
-    95,0,100,2,83,0,41,3,78,114,37,0,0,0,84,41,
-    1,114,27,0,0,0,114,47,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,114,38,0,0,0,128,
-    0,0,0,115,4,0,0,0,0,1,14,1,122,24,95,68,
-    117,109,109,121,77,111,100,117,108,101,76,111,99,107,46,97,
+    0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,
+    67,0,0,0,115,88,0,0,0,116,0,160,1,161,0,125,
+    1,124,0,106,2,125,2,116,3,131,0,125,3,116,4,160,
+    5,124,2,161,1,125,4,124,4,100,0,117,0,114,42,100,
+    1,83,0,124,4,106,2,125,2,124,2,124,1,107,2,114,
+    60,100,2,83,0,124,2,124,3,118,0,114,72,100,1,83,
+    0,124,3,160,6,124,2,161,1,1,0,113,20,100,0,83,
+    0,41,3,78,70,84,41,7,114,23,0,0,0,218,9,103,
+    101,116,95,105,100,101,110,116,114,26,0,0,0,218,3,115,
+    101,116,218,12,95,98,108,111,99,107,105,110,103,95,111,110,
+    218,3,103,101,116,218,3,97,100,100,41,5,114,30,0,0,
+    0,90,2,109,101,218,3,116,105,100,90,4,115,101,101,110,
+    114,24,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+    11,0,0,0,218,12,104,97,115,95,100,101,97,100,108,111,
+    99,107,66,0,0,0,115,24,0,0,0,0,2,8,1,6,
+    1,6,2,10,1,8,1,4,1,6,1,8,1,4,1,8,
+    6,4,1,122,24,95,77,111,100,117,108,101,76,111,99,107,
+    46,104,97,115,95,100,101,97,100,108,111,99,107,99,1,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,8,0,
+    0,0,67,0,0,0,115,210,0,0,0,116,0,160,1,161,
+    0,125,1,124,0,116,2,124,1,60,0,122,180,124,0,106,
+    3,143,126,1,0,124,0,106,4,100,1,107,2,115,46,124,
+    0,106,5,124,1,107,2,114,90,124,1,124,0,95,5,124,
+    0,4,0,106,4,100,2,55,0,2,0,95,4,87,0,100,
+    3,4,0,4,0,131,3,1,0,87,0,116,2,124,1,61,
+    0,100,4,83,0,124,0,160,6,161,0,114,110,116,7,100,
+    5,124,0,22,0,131,1,130,1,124,0,106,8,160,9,100,
+    6,161,1,114,136,124,0,4,0,106,10,100,2,55,0,2,
+    0,95,10,87,0,100,3,4,0,4,0,131,3,1,0,110,
+    16,49,0,115,156,48,0,1,0,1,0,1,0,89,0,1,
+    0,124,0,106,8,160,9,161,0,1,0,124,0,106,8,160,
+    11,161,0,1,0,113,18,87,0,116,2,124,1,61,0,110,
+    8,116,2,124,1,61,0,48,0,100,3,83,0,41,7,122,
+    185,10,32,32,32,32,32,32,32,32,65,99,113,117,105,114,
+    101,32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,
+    107,46,32,32,73,102,32,97,32,112,111,116,101,110,116,105,
+    97,108,32,100,101,97,100,108,111,99,107,32,105,115,32,100,
+    101,116,101,99,116,101,100,44,10,32,32,32,32,32,32,32,
+    32,97,32,95,68,101,97,100,108,111,99,107,69,114,114,111,
+    114,32,105,115,32,114,97,105,115,101,100,46,10,32,32,32,
+    32,32,32,32,32,79,116,104,101,114,119,105,115,101,44,32,
+    116,104,101,32,108,111,99,107,32,105,115,32,97,108,119,97,
+    121,115,32,97,99,113,117,105,114,101,100,32,97,110,100,32,
+    84,114,117,101,32,105,115,32,114,101,116,117,114,110,101,100,
+    46,10,32,32,32,32,32,32,32,32,114,22,0,0,0,233,
+    1,0,0,0,78,84,122,23,100,101,97,100,108,111,99,107,
+    32,100,101,116,101,99,116,101,100,32,98,121,32,37,114,70,
+    41,12,114,23,0,0,0,114,32,0,0,0,114,34,0,0,
+    0,114,24,0,0,0,114,27,0,0,0,114,26,0,0,0,
+    114,38,0,0,0,114,19,0,0,0,114,25,0,0,0,218,
+    7,97,99,113,117,105,114,101,114,28,0,0,0,218,7,114,
+    101,108,101,97,115,101,169,2,114,30,0,0,0,114,37,0,
+    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,114,40,0,0,0,87,0,0,0,115,34,0,0,0,0,
+    6,8,1,8,1,2,2,8,1,20,1,6,1,14,1,14,
+    9,6,247,4,1,8,1,12,1,12,1,44,2,10,1,14,
+    2,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97,
     99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
-    36,0,0,0,124,0,106,0,100,1,107,2,114,18,116,1,
-    100,2,131,1,130,1,124,0,4,0,106,0,100,3,56,0,
-    2,0,95,0,100,0,83,0,41,4,78,114,22,0,0,0,
-    114,41,0,0,0,114,37,0,0,0,41,2,114,27,0,0,
-    0,114,42,0,0,0,114,47,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,114,39,0,0,0,132,
-    0,0,0,115,6,0,0,0,0,1,10,1,8,1,122,24,
+    0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
+    142,0,0,0,116,0,160,1,161,0,125,1,124,0,106,2,
+    143,108,1,0,124,0,106,3,124,1,107,3,114,34,116,4,
+    100,1,131,1,130,1,124,0,106,5,100,2,107,4,115,48,
+    74,0,130,1,124,0,4,0,106,5,100,3,56,0,2,0,
+    95,5,124,0,106,5,100,2,107,2,114,108,100,0,124,0,
+    95,3,124,0,106,6,114,108,124,0,4,0,106,6,100,3,
+    56,0,2,0,95,6,124,0,106,7,160,8,161,0,1,0,
+    87,0,100,0,4,0,4,0,131,3,1,0,110,16,49,0,
+    115,128,48,0,1,0,1,0,1,0,89,0,1,0,100,0,
+    83,0,41,4,78,250,31,99,97,110,110,111,116,32,114,101,
+    108,101,97,115,101,32,117,110,45,97,99,113,117,105,114,101,
+    100,32,108,111,99,107,114,22,0,0,0,114,39,0,0,0,
+    41,9,114,23,0,0,0,114,32,0,0,0,114,24,0,0,
+    0,114,26,0,0,0,218,12,82,117,110,116,105,109,101,69,
+    114,114,111,114,114,27,0,0,0,114,28,0,0,0,114,25,
+    0,0,0,114,41,0,0,0,114,42,0,0,0,114,10,0,
+    0,0,114,10,0,0,0,114,11,0,0,0,114,41,0,0,
+    0,112,0,0,0,115,22,0,0,0,0,1,8,1,8,1,
+    10,1,8,1,14,1,14,1,10,1,6,1,6,1,14,1,
+    122,19,95,77,111,100,117,108,101,76,111,99,107,46,114,101,
+    108,101,97,115,101,99,1,0,0,0,0,0,0,0,0,0,
+    0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,
+    0,0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,
+    1,161,2,83,0,41,2,78,122,23,95,77,111,100,117,108,
+    101,76,111,99,107,40,123,33,114,125,41,32,97,116,32,123,
+    125,169,3,218,6,102,111,114,109,97,116,114,17,0,0,0,
+    218,2,105,100,169,1,114,30,0,0,0,114,10,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,218,8,95,95,114,101,
+    112,114,95,95,125,0,0,0,115,2,0,0,0,0,1,122,
+    20,95,77,111,100,117,108,101,76,111,99,107,46,95,95,114,
+    101,112,114,95,95,78,41,9,114,1,0,0,0,114,0,0,
+    0,0,114,2,0,0,0,114,3,0,0,0,114,31,0,0,
+    0,114,38,0,0,0,114,40,0,0,0,114,41,0,0,0,
+    114,49,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+    10,0,0,0,114,11,0,0,0,114,20,0,0,0,52,0,
+    0,0,115,12,0,0,0,8,1,4,5,8,8,8,21,8,
+    25,8,13,114,20,0,0,0,99,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,
+    0,115,48,0,0,0,101,0,90,1,100,0,90,2,100,1,
+    90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,
+    90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,0,
+    90,7,100,10,83,0,41,11,218,16,95,68,117,109,109,121,
+    77,111,100,117,108,101,76,111,99,107,122,86,65,32,115,105,
+    109,112,108,101,32,95,77,111,100,117,108,101,76,111,99,107,
+    32,101,113,117,105,118,97,108,101,110,116,32,102,111,114,32,
+    80,121,116,104,111,110,32,98,117,105,108,100,115,32,119,105,
+    116,104,111,117,116,10,32,32,32,32,109,117,108,116,105,45,
+    116,104,114,101,97,100,105,110,103,32,115,117,112,112,111,114,
+    116,46,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
+    0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,
+    124,1,124,0,95,0,100,1,124,0,95,1,100,0,83,0,
+    114,21,0,0,0,41,2,114,17,0,0,0,114,27,0,0,
+    0,114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,31,0,0,0,133,0,0,0,115,4,
+    0,0,0,0,1,6,1,122,25,95,68,117,109,109,121,77,
+    111,100,117,108,101,76,111,99,107,46,95,95,105,110,105,116,
+    95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,
+    0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0,
+    124,0,4,0,106,0,100,1,55,0,2,0,95,0,100,2,
+    83,0,41,3,78,114,39,0,0,0,84,41,1,114,27,0,
+    0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,0,
+    0,114,11,0,0,0,114,40,0,0,0,137,0,0,0,115,
+    4,0,0,0,0,1,14,1,122,24,95,68,117,109,109,121,
+    77,111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,
+    114,101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,
+    0,0,0,3,0,0,0,67,0,0,0,115,36,0,0,0,
+    124,0,106,0,100,1,107,2,114,18,116,1,100,2,131,1,
+    130,1,124,0,4,0,106,0,100,3,56,0,2,0,95,0,
+    100,0,83,0,41,4,78,114,22,0,0,0,114,43,0,0,
+    0,114,39,0,0,0,41,2,114,27,0,0,0,114,44,0,
+    0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,0,
+    0,114,11,0,0,0,114,41,0,0,0,141,0,0,0,115,
+    6,0,0,0,0,1,10,1,8,1,122,24,95,68,117,109,
+    109,121,77,111,100,117,108,101,76,111,99,107,46,114,101,108,
+    101,97,115,101,99,1,0,0,0,0,0,0,0,0,0,0,
+    0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,0,
+    0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,1,
+    161,2,83,0,41,2,78,122,28,95,68,117,109,109,121,77,
+    111,100,117,108,101,76,111,99,107,40,123,33,114,125,41,32,
+    97,116,32,123,125,114,45,0,0,0,114,48,0,0,0,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,49,
+    0,0,0,146,0,0,0,115,2,0,0,0,0,1,122,25,
     95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,
-    46,114,101,108,101,97,115,101,99,1,0,0,0,0,0,0,
-    0,0,0,0,0,1,0,0,0,5,0,0,0,67,0,0,
-    0,115,18,0,0,0,100,1,160,0,124,0,106,1,116,2,
-    124,0,131,1,161,2,83,0,41,2,78,122,28,95,68,117,
-    109,109,121,77,111,100,117,108,101,76,111,99,107,40,123,33,
-    114,125,41,32,97,116,32,123,125,114,44,0,0,0,114,47,
-    0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,114,48,0,0,0,137,0,0,0,115,2,0,0,0,
-    0,1,122,25,95,68,117,109,109,121,77,111,100,117,108,101,
-    76,111,99,107,46,95,95,114,101,112,114,95,95,78,41,8,
-    114,1,0,0,0,114,0,0,0,0,114,2,0,0,0,114,
-    3,0,0,0,114,31,0,0,0,114,38,0,0,0,114,39,
+    46,95,95,114,101,112,114,95,95,78,41,8,114,1,0,0,
+    0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,
+    114,31,0,0,0,114,40,0,0,0,114,41,0,0,0,114,
+    49,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,114,50,0,0,0,129,0,0,
+    0,115,10,0,0,0,8,1,4,3,8,4,8,4,8,5,
+    114,50,0,0,0,99,0,0,0,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,36,
+    0,0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,
+    0,90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,
+    0,90,5,100,7,83,0,41,8,218,18,95,77,111,100,117,
+    108,101,76,111,99,107,77,97,110,97,103,101,114,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,
+    0,0,67,0,0,0,115,16,0,0,0,124,1,124,0,95,
+    0,100,0,124,0,95,1,100,0,83,0,114,13,0,0,0,
+    41,2,218,5,95,110,97,109,101,218,5,95,108,111,99,107,
+    114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+    11,0,0,0,114,31,0,0,0,152,0,0,0,115,4,0,
+    0,0,0,1,6,1,122,27,95,77,111,100,117,108,101,76,
+    111,99,107,77,97,110,97,103,101,114,46,95,95,105,110,105,
+    116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,
+    1,0,0,0,2,0,0,0,67,0,0,0,115,26,0,0,
+    0,116,0,124,0,106,1,131,1,124,0,95,2,124,0,106,
+    2,160,3,161,0,1,0,100,0,83,0,114,13,0,0,0,
+    41,4,218,16,95,103,101,116,95,109,111,100,117,108,101,95,
+    108,111,99,107,114,52,0,0,0,114,53,0,0,0,114,40,
     0,0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,
-    0,0,114,10,0,0,0,114,11,0,0,0,114,49,0,0,
-    0,120,0,0,0,115,10,0,0,0,8,1,4,3,8,4,
-    8,4,8,5,114,49,0,0,0,99,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,
-    0,0,115,36,0,0,0,101,0,90,1,100,0,90,2,100,
-    1,100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,
-    5,100,6,132,0,90,5,100,7,83,0,41,8,218,18,95,
-    77,111,100,117,108,101,76,111,99,107,77,97,110,97,103,101,
-    114,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
-    0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,
-    1,124,0,95,0,100,0,124,0,95,1,100,0,83,0,114,
-    13,0,0,0,41,2,218,5,95,110,97,109,101,218,5,95,
-    108,111,99,107,114,29,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,114,31,0,0,0,143,0,0,
-    0,115,4,0,0,0,0,1,6,1,122,27,95,77,111,100,
-    117,108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,
-    95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,
-    0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,
-    115,26,0,0,0,116,0,124,0,106,1,131,1,124,0,95,
-    2,124,0,106,2,160,3,161,0,1,0,100,0,83,0,114,
-    13,0,0,0,41,4,218,16,95,103,101,116,95,109,111,100,
-    117,108,101,95,108,111,99,107,114,51,0,0,0,114,52,0,
-    0,0,114,38,0,0,0,114,47,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,218,9,95,95,101,
-    110,116,101,114,95,95,147,0,0,0,115,4,0,0,0,0,
-    1,12,1,122,28,95,77,111,100,117,108,101,76,111,99,107,
-    77,97,110,97,103,101,114,46,95,95,101,110,116,101,114,95,
-    95,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,
-    0,0,2,0,0,0,79,0,0,0,115,14,0,0,0,124,
-    0,106,0,160,1,161,0,1,0,100,0,83,0,114,13,0,
-    0,0,41,2,114,52,0,0,0,114,39,0,0,0,41,3,
-    114,30,0,0,0,218,4,97,114,103,115,90,6,107,119,97,
-    114,103,115,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,218,8,95,95,101,120,105,116,95,95,151,0,0,0,
-    115,2,0,0,0,0,1,122,27,95,77,111,100,117,108,101,
-    76,111,99,107,77,97,110,97,103,101,114,46,95,95,101,120,
-    105,116,95,95,78,41,6,114,1,0,0,0,114,0,0,0,
-    0,114,2,0,0,0,114,31,0,0,0,114,54,0,0,0,
-    114,56,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,114,50,0,0,0,141,0,
-    0,0,115,6,0,0,0,8,2,8,4,8,4,114,50,0,
-    0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,
-    0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0,
-    116,0,160,1,161,0,1,0,122,106,122,14,116,3,124,0,
-    25,0,131,0,125,1,87,0,110,24,4,0,116,4,107,10,
-    114,48,1,0,1,0,1,0,100,1,125,1,89,0,110,2,
-    88,0,124,1,100,1,107,8,114,112,116,5,100,1,107,8,
-    114,76,116,6,124,0,131,1,125,1,110,8,116,7,124,0,
-    131,1,125,1,124,0,102,1,100,2,100,3,132,1,125,2,
-    116,8,160,9,124,1,124,2,161,2,116,3,124,0,60,0,
-    87,0,53,0,116,0,160,2,161,0,1,0,88,0,124,1,
-    83,0,41,4,122,139,71,101,116,32,111,114,32,99,114,101,
-    97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108,
-    111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32,
-    109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32,
-    32,32,65,99,113,117,105,114,101,47,114,101,108,101,97,115,
-    101,32,105,110,116,101,114,110,97,108,108,121,32,116,104,101,
-    32,103,108,111,98,97,108,32,105,109,112,111,114,116,32,108,
-    111,99,107,32,116,111,32,112,114,111,116,101,99,116,10,32,
-    32,32,32,95,109,111,100,117,108,101,95,108,111,99,107,115,
-    46,78,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,8,0,0,0,83,0,0,0,115,48,0,0,0,
-    116,0,160,1,161,0,1,0,122,24,116,3,160,4,124,1,
-    161,1,124,0,107,8,114,30,116,3,124,1,61,0,87,0,
-    53,0,116,0,160,2,161,0,1,0,88,0,100,0,83,0,
-    114,13,0,0,0,41,5,218,4,95,105,109,112,218,12,97,
-    99,113,117,105,114,101,95,108,111,99,107,218,12,114,101,108,
-    101,97,115,101,95,108,111,99,107,218,13,95,109,111,100,117,
-    108,101,95,108,111,99,107,115,114,34,0,0,0,41,2,218,
-    3,114,101,102,114,17,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,218,2,99,98,176,0,0,0,
-    115,10,0,0,0,0,1,8,1,2,4,14,1,10,2,122,
-    28,95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,
-    107,46,60,108,111,99,97,108,115,62,46,99,98,41,10,114,
-    57,0,0,0,114,58,0,0,0,114,59,0,0,0,114,60,
-    0,0,0,218,8,75,101,121,69,114,114,111,114,114,23,0,
-    0,0,114,49,0,0,0,114,20,0,0,0,218,8,95,119,
-    101,97,107,114,101,102,114,61,0,0,0,41,3,114,17,0,
-    0,0,114,24,0,0,0,114,62,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,114,53,0,0,0,
-    157,0,0,0,115,28,0,0,0,0,6,8,1,2,1,2,
-    1,14,1,14,1,10,2,8,1,8,1,10,2,8,2,12,
-    11,20,2,10,2,114,53,0,0,0,99,1,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,
-    0,0,0,115,54,0,0,0,116,0,124,0,131,1,125,1,
-    122,12,124,1,160,1,161,0,1,0,87,0,110,20,4,0,
-    116,2,107,10,114,40,1,0,1,0,1,0,89,0,110,10,
-    88,0,124,1,160,3,161,0,1,0,100,1,83,0,41,2,
-    122,189,65,99,113,117,105,114,101,115,32,116,104,101,110,32,
-    114,101,108,101,97,115,101,115,32,116,104,101,32,109,111,100,
-    117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103,
-    105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101,
-    46,10,10,32,32,32,32,84,104,105,115,32,105,115,32,117,
-    115,101,100,32,116,111,32,101,110,115,117,114,101,32,97,32,
-    109,111,100,117,108,101,32,105,115,32,99,111,109,112,108,101,
-    116,101,108,121,32,105,110,105,116,105,97,108,105,122,101,100,
-    44,32,105,110,32,116,104,101,10,32,32,32,32,101,118,101,
-    110,116,32,105,116,32,105,115,32,98,101,105,110,103,32,105,
-    109,112,111,114,116,101,100,32,98,121,32,97,110,111,116,104,
-    101,114,32,116,104,114,101,97,100,46,10,32,32,32,32,78,
-    41,4,114,53,0,0,0,114,38,0,0,0,114,19,0,0,
-    0,114,39,0,0,0,41,2,114,17,0,0,0,114,24,0,
-    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
-    0,218,19,95,108,111,99,107,95,117,110,108,111,99,107,95,
-    109,111,100,117,108,101,194,0,0,0,115,12,0,0,0,0,
-    6,8,1,2,1,12,1,14,3,6,2,114,65,0,0,0,
-    99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
-    0,3,0,0,0,79,0,0,0,115,10,0,0,0,124,0,
-    124,1,124,2,142,1,83,0,41,1,97,46,1,0,0,114,
-    101,109,111,118,101,95,105,109,112,111,114,116,108,105,98,95,
-    102,114,97,109,101,115,32,105,110,32,105,109,112,111,114,116,
-    46,99,32,119,105,108,108,32,97,108,119,97,121,115,32,114,
-    101,109,111,118,101,32,115,101,113,117,101,110,99,101,115,10,
-    32,32,32,32,111,102,32,105,109,112,111,114,116,108,105,98,
-    32,102,114,97,109,101,115,32,116,104,97,116,32,101,110,100,
-    32,119,105,116,104,32,97,32,99,97,108,108,32,116,111,32,
-    116,104,105,115,32,102,117,110,99,116,105,111,110,10,10,32,
-    32,32,32,85,115,101,32,105,116,32,105,110,115,116,101,97,
-    100,32,111,102,32,97,32,110,111,114,109,97,108,32,99,97,
-    108,108,32,105,110,32,112,108,97,99,101,115,32,119,104,101,
-    114,101,32,105,110,99,108,117,100,105,110,103,32,116,104,101,
-    32,105,109,112,111,114,116,108,105,98,10,32,32,32,32,102,
-    114,97,109,101,115,32,105,110,116,114,111,100,117,99,101,115,
-    32,117,110,119,97,110,116,101,100,32,110,111,105,115,101,32,
-    105,110,116,111,32,116,104,101,32,116,114,97,99,101,98,97,
-    99,107,32,40,101,46,103,46,32,119,104,101,110,32,101,120,
-    101,99,117,116,105,110,103,10,32,32,32,32,109,111,100,117,
-    108,101,32,99,111,100,101,41,10,32,32,32,32,114,10,0,
-    0,0,41,3,218,1,102,114,55,0,0,0,90,4,107,119,
-    100,115,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
-    0,218,25,95,99,97,108,108,95,119,105,116,104,95,102,114,
-    97,109,101,115,95,114,101,109,111,118,101,100,211,0,0,0,
-    115,2,0,0,0,0,8,114,67,0,0,0,114,37,0,0,
-    0,41,1,218,9,118,101,114,98,111,115,105,116,121,99,1,
-    0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,4,
-    0,0,0,71,0,0,0,115,54,0,0,0,116,0,106,1,
-    106,2,124,1,107,5,114,50,124,0,160,3,100,1,161,1,
-    115,30,100,2,124,0,23,0,125,0,116,4,124,0,106,5,
-    124,2,142,0,116,0,106,6,100,3,141,2,1,0,100,4,
-    83,0,41,5,122,61,80,114,105,110,116,32,116,104,101,32,
-    109,101,115,115,97,103,101,32,116,111,32,115,116,100,101,114,
-    114,32,105,102,32,45,118,47,80,89,84,72,79,78,86,69,
-    82,66,79,83,69,32,105,115,32,116,117,114,110,101,100,32,
-    111,110,46,41,2,250,1,35,122,7,105,109,112,111,114,116,
-    32,122,2,35,32,41,1,90,4,102,105,108,101,78,41,7,
-    114,15,0,0,0,218,5,102,108,97,103,115,218,7,118,101,
-    114,98,111,115,101,218,10,115,116,97,114,116,115,119,105,116,
-    104,218,5,112,114,105,110,116,114,45,0,0,0,218,6,115,
-    116,100,101,114,114,41,3,218,7,109,101,115,115,97,103,101,
-    114,68,0,0,0,114,55,0,0,0,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,218,16,95,118,101,114,98,
-    111,115,101,95,109,101,115,115,97,103,101,222,0,0,0,115,
-    8,0,0,0,0,2,12,1,10,1,8,1,114,76,0,0,
-    0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,
-    0,0,3,0,0,0,3,0,0,0,115,26,0,0,0,135,
-    0,102,1,100,1,100,2,132,8,125,1,116,0,124,1,136,
-    0,131,2,1,0,124,1,83,0,41,3,122,49,68,101,99,
-    111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,
-    32,116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,
-    101,32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,
-    0,0,0,19,0,0,0,115,38,0,0,0,124,1,116,0,
-    106,1,107,7,114,28,116,2,100,1,160,3,124,1,161,1,
-    124,1,100,2,141,2,130,1,136,0,124,0,124,1,131,2,
-    83,0,41,3,78,250,29,123,33,114,125,32,105,115,32,110,
-    111,116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,
-    100,117,108,101,114,16,0,0,0,41,4,114,15,0,0,0,
-    218,20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,
-    95,110,97,109,101,115,218,11,73,109,112,111,114,116,69,114,
-    114,111,114,114,45,0,0,0,169,2,114,30,0,0,0,218,
-    8,102,117,108,108,110,97,109,101,169,1,218,3,102,120,110,
-    114,10,0,0,0,114,11,0,0,0,218,25,95,114,101,113,
-    117,105,114,101,115,95,98,117,105,108,116,105,110,95,119,114,
-    97,112,112,101,114,232,0,0,0,115,10,0,0,0,0,1,
-    10,1,10,1,2,255,6,2,122,52,95,114,101,113,117,105,
-    114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,99,
-    97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,98,
-    117,105,108,116,105,110,95,119,114,97,112,112,101,114,169,1,
-    114,12,0,0,0,41,2,114,83,0,0,0,114,84,0,0,
-    0,114,10,0,0,0,114,82,0,0,0,114,11,0,0,0,
-    218,17,95,114,101,113,117,105,114,101,115,95,98,117,105,108,
-    116,105,110,230,0,0,0,115,6,0,0,0,0,2,12,5,
-    10,1,114,86,0,0,0,99,1,0,0,0,0,0,0,0,
-    0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,
-    115,26,0,0,0,135,0,102,1,100,1,100,2,132,8,125,
-    1,116,0,124,1,136,0,131,2,1,0,124,1,83,0,41,
-    3,122,47,68,101,99,111,114,97,116,111,114,32,116,111,32,
-    118,101,114,105,102,121,32,116,104,101,32,110,97,109,101,100,
-    32,109,111,100,117,108,101,32,105,115,32,102,114,111,122,101,
-    110,46,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,4,0,0,0,19,0,0,0,115,38,0,0,0,
-    116,0,160,1,124,1,161,1,115,28,116,2,100,1,160,3,
-    124,1,161,1,124,1,100,2,141,2,130,1,136,0,124,0,
-    124,1,131,2,83,0,169,3,78,122,27,123,33,114,125,32,
-    105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,
-    109,111,100,117,108,101,114,16,0,0,0,41,4,114,57,0,
-    0,0,218,9,105,115,95,102,114,111,122,101,110,114,79,0,
-    0,0,114,45,0,0,0,114,80,0,0,0,114,82,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,218,24,95,114,101,
-    113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,
-    97,112,112,101,114,243,0,0,0,115,10,0,0,0,0,1,
-    10,1,10,1,2,255,6,2,122,50,95,114,101,113,117,105,
-    114,101,115,95,102,114,111,122,101,110,46,60,108,111,99,97,
-    108,115,62,46,95,114,101,113,117,105,114,101,115,95,102,114,
-    111,122,101,110,95,119,114,97,112,112,101,114,114,85,0,0,
-    0,41,2,114,83,0,0,0,114,89,0,0,0,114,10,0,
-    0,0,114,82,0,0,0,114,11,0,0,0,218,16,95,114,
-    101,113,117,105,114,101,115,95,102,114,111,122,101,110,241,0,
-    0,0,115,6,0,0,0,0,2,12,5,10,1,114,90,0,
-    0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,
-    0,0,0,3,0,0,0,67,0,0,0,115,62,0,0,0,
-    116,0,124,1,124,0,131,2,125,2,124,1,116,1,106,2,
-    107,6,114,50,116,1,106,2,124,1,25,0,125,3,116,3,
-    124,2,124,3,131,2,1,0,116,1,106,2,124,1,25,0,
-    83,0,116,4,124,2,131,1,83,0,100,1,83,0,41,2,
-    122,128,76,111,97,100,32,116,104,101,32,115,112,101,99,105,
-    102,105,101,100,32,109,111,100,117,108,101,32,105,110,116,111,
-    32,115,121,115,46,109,111,100,117,108,101,115,32,97,110,100,
-    32,114,101,116,117,114,110,32,105,116,46,10,10,32,32,32,
-    32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,
-    100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,
-    32,108,111,97,100,101,114,46,101,120,101,99,95,109,111,100,
-    117,108,101,32,105,110,115,116,101,97,100,46,10,10,32,32,
-    32,32,78,41,5,218,16,115,112,101,99,95,102,114,111,109,
-    95,108,111,97,100,101,114,114,15,0,0,0,218,7,109,111,
-    100,117,108,101,115,218,5,95,101,120,101,99,218,5,95,108,
-    111,97,100,41,4,114,30,0,0,0,114,81,0,0,0,218,
-    4,115,112,101,99,218,6,109,111,100,117,108,101,114,10,0,
-    0,0,114,10,0,0,0,114,11,0,0,0,218,17,95,108,
-    111,97,100,95,109,111,100,117,108,101,95,115,104,105,109,253,
-    0,0,0,115,12,0,0,0,0,6,10,1,10,1,10,1,
-    10,1,10,2,114,97,0,0,0,99,1,0,0,0,0,0,
-    0,0,0,0,0,0,5,0,0,0,8,0,0,0,67,0,
-    0,0,115,226,0,0,0,116,0,124,0,100,1,100,0,131,
-    3,125,1,116,1,124,1,100,2,131,2,114,56,122,12,124,
-    1,160,2,124,0,161,1,87,0,83,0,4,0,116,3,107,
-    10,114,54,1,0,1,0,1,0,89,0,110,2,88,0,122,
-    10,124,0,106,4,125,2,87,0,110,20,4,0,116,5,107,
-    10,114,86,1,0,1,0,1,0,89,0,110,18,88,0,124,
-    2,100,0,107,9,114,104,116,6,124,2,131,1,83,0,122,
-    10,124,0,106,7,125,3,87,0,110,24,4,0,116,5,107,
-    10,114,138,1,0,1,0,1,0,100,3,125,3,89,0,110,
-    2,88,0,122,10,124,0,106,8,125,4,87,0,110,58,4,
-    0,116,5,107,10,114,208,1,0,1,0,1,0,124,1,100,
-    0,107,8,114,188,100,4,160,9,124,3,161,1,6,0,89,
-    0,83,0,100,5,160,9,124,3,124,1,161,2,6,0,89,
-    0,83,0,89,0,110,14,88,0,100,6,160,9,124,3,124,
-    4,161,2,83,0,100,0,83,0,41,7,78,218,10,95,95,
-    108,111,97,100,101,114,95,95,218,11,109,111,100,117,108,101,
-    95,114,101,112,114,250,1,63,250,13,60,109,111,100,117,108,
-    101,32,123,33,114,125,62,250,20,60,109,111,100,117,108,101,
-    32,123,33,114,125,32,40,123,33,114,125,41,62,250,23,60,
-    109,111,100,117,108,101,32,123,33,114,125,32,102,114,111,109,
-    32,123,33,114,125,62,41,10,114,6,0,0,0,114,4,0,
-    0,0,114,99,0,0,0,218,9,69,120,99,101,112,116,105,
-    111,110,218,8,95,95,115,112,101,99,95,95,218,14,65,116,
-    116,114,105,98,117,116,101,69,114,114,111,114,218,22,95,109,
-    111,100,117,108,101,95,114,101,112,114,95,102,114,111,109,95,
-    115,112,101,99,114,1,0,0,0,218,8,95,95,102,105,108,
-    101,95,95,114,45,0,0,0,41,5,114,96,0,0,0,218,
-    6,108,111,97,100,101,114,114,95,0,0,0,114,17,0,0,
-    0,218,8,102,105,108,101,110,97,109,101,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,218,12,95,109,111,100,
-    117,108,101,95,114,101,112,114,13,1,0,0,115,46,0,0,
-    0,0,2,12,1,10,4,2,1,12,1,14,1,6,1,2,
-    1,10,1,14,1,6,2,8,1,8,4,2,1,10,1,14,
-    1,10,1,2,1,10,1,14,1,8,1,14,2,22,2,114,
-    111,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,4,0,0,0,64,0,0,0,115,114,0,
-    0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,
-    100,2,100,2,100,3,156,3,100,4,100,5,132,2,90,4,
-    100,6,100,7,132,0,90,5,100,8,100,9,132,0,90,6,
-    101,7,100,10,100,11,132,0,131,1,90,8,101,8,106,9,
-    100,12,100,11,132,0,131,1,90,8,101,7,100,13,100,14,
-    132,0,131,1,90,10,101,7,100,15,100,16,132,0,131,1,
-    90,11,101,11,106,9,100,17,100,16,132,0,131,1,90,11,
-    100,2,83,0,41,18,218,10,77,111,100,117,108,101,83,112,
-    101,99,97,208,5,0,0,84,104,101,32,115,112,101,99,105,
-    102,105,99,97,116,105,111,110,32,102,111,114,32,97,32,109,
-    111,100,117,108,101,44,32,117,115,101,100,32,102,111,114,32,
-    108,111,97,100,105,110,103,46,10,10,32,32,32,32,65,32,
-    109,111,100,117,108,101,39,115,32,115,112,101,99,32,105,115,
-    32,116,104,101,32,115,111,117,114,99,101,32,102,111,114,32,
-    105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,
-    116,32,116,104,101,32,109,111,100,117,108,101,46,32,32,70,
-    111,114,10,32,32,32,32,100,97,116,97,32,97,115,115,111,
-    99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,
-    109,111,100,117,108,101,44,32,105,110,99,108,117,100,105,110,
-    103,32,115,111,117,114,99,101,44,32,117,115,101,32,116,104,
-    101,32,115,112,101,99,39,115,10,32,32,32,32,108,111,97,
-    100,101,114,46,10,10,32,32,32,32,96,110,97,109,101,96,
-    32,105,115,32,116,104,101,32,97,98,115,111,108,117,116,101,
-    32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,
-    117,108,101,46,32,32,96,108,111,97,100,101,114,96,32,105,
-    115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,
-    32,116,111,32,117,115,101,32,119,104,101,110,32,108,111,97,
-    100,105,110,103,32,116,104,101,32,109,111,100,117,108,101,46,
-    32,32,96,112,97,114,101,110,116,96,32,105,115,32,116,104,
-    101,32,110,97,109,101,32,111,102,32,116,104,101,10,32,32,
-    32,32,112,97,99,107,97,103,101,32,116,104,101,32,109,111,
-    100,117,108,101,32,105,115,32,105,110,46,32,32,84,104,101,
-    32,112,97,114,101,110,116,32,105,115,32,100,101,114,105,118,
-    101,100,32,102,114,111,109,32,116,104,101,32,110,97,109,101,
-    46,10,10,32,32,32,32,96,105,115,95,112,97,99,107,97,
-    103,101,96,32,100,101,116,101,114,109,105,110,101,115,32,105,
-    102,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,
-    99,111,110,115,105,100,101,114,101,100,32,97,32,112,97,99,
-    107,97,103,101,32,111,114,10,32,32,32,32,110,111,116,46,
-    32,32,79,110,32,109,111,100,117,108,101,115,32,116,104,105,
-    115,32,105,115,32,114,101,102,108,101,99,116,101,100,32,98,
-    121,32,116,104,101,32,96,95,95,112,97,116,104,95,95,96,
-    32,97,116,116,114,105,98,117,116,101,46,10,10,32,32,32,
-    32,96,111,114,105,103,105,110,96,32,105,115,32,116,104,101,
-    32,115,112,101,99,105,102,105,99,32,108,111,99,97,116,105,
-    111,110,32,117,115,101,100,32,98,121,32,116,104,101,32,108,
-    111,97,100,101,114,32,102,114,111,109,32,119,104,105,99,104,
-    32,116,111,10,32,32,32,32,108,111,97,100,32,116,104,101,
-    32,109,111,100,117,108,101,44,32,105,102,32,116,104,97,116,
-    32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,
-    97,118,97,105,108,97,98,108,101,46,32,32,87,104,101,110,
-    32,102,105,108,101,110,97,109,101,32,105,115,10,32,32,32,
-    32,115,101,116,44,32,111,114,105,103,105,110,32,119,105,108,
-    108,32,109,97,116,99,104,46,10,10,32,32,32,32,96,104,
-    97,115,95,108,111,99,97,116,105,111,110,96,32,105,110,100,
-    105,99,97,116,101,115,32,116,104,97,116,32,97,32,115,112,
-    101,99,39,115,32,34,111,114,105,103,105,110,34,32,114,101,
-    102,108,101,99,116,115,32,97,32,108,111,99,97,116,105,111,
-    110,46,10,32,32,32,32,87,104,101,110,32,116,104,105,115,
-    32,105,115,32,84,114,117,101,44,32,96,95,95,102,105,108,
-    101,95,95,96,32,97,116,116,114,105,98,117,116,101,32,111,
-    102,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,
-    115,101,116,46,10,10,32,32,32,32,96,99,97,99,104,101,
-    100,96,32,105,115,32,116,104,101,32,108,111,99,97,116,105,
-    111,110,32,111,102,32,116,104,101,32,99,97,99,104,101,100,
-    32,98,121,116,101,99,111,100,101,32,102,105,108,101,44,32,
-    105,102,32,97,110,121,46,32,32,73,116,10,32,32,32,32,
-    99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,
-    104,101,32,96,95,95,99,97,99,104,101,100,95,95,96,32,
-    97,116,116,114,105,98,117,116,101,46,10,10,32,32,32,32,
-    96,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,
-    104,95,108,111,99,97,116,105,111,110,115,96,32,105,115,32,
-    116,104,101,32,115,101,113,117,101,110,99,101,32,111,102,32,
-    112,97,116,104,32,101,110,116,114,105,101,115,32,116,111,10,
-    32,32,32,32,115,101,97,114,99,104,32,119,104,101,110,32,
-    105,109,112,111,114,116,105,110,103,32,115,117,98,109,111,100,
-    117,108,101,115,46,32,32,73,102,32,115,101,116,44,32,105,
-    115,95,112,97,99,107,97,103,101,32,115,104,111,117,108,100,
-    32,98,101,10,32,32,32,32,84,114,117,101,45,45,97,110,
-    100,32,70,97,108,115,101,32,111,116,104,101,114,119,105,115,
-    101,46,10,10,32,32,32,32,80,97,99,107,97,103,101,115,
-    32,97,114,101,32,115,105,109,112,108,121,32,109,111,100,117,
-    108,101,115,32,116,104,97,116,32,40,109,97,121,41,32,104,
-    97,118,101,32,115,117,98,109,111,100,117,108,101,115,46,32,
-    32,73,102,32,97,32,115,112,101,99,10,32,32,32,32,104,
-    97,115,32,97,32,110,111,110,45,78,111,110,101,32,118,97,
-    108,117,101,32,105,110,32,96,115,117,98,109,111,100,117,108,
-    101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,
-    110,115,96,44,32,116,104,101,32,105,109,112,111,114,116,10,
-    32,32,32,32,115,121,115,116,101,109,32,119,105,108,108,32,
-    99,111,110,115,105,100,101,114,32,109,111,100,117,108,101,115,
-    32,108,111,97,100,101,100,32,102,114,111,109,32,116,104,101,
-    32,115,112,101,99,32,97,115,32,112,97,99,107,97,103,101,
-    115,46,10,10,32,32,32,32,79,110,108,121,32,102,105,110,
-    100,101,114,115,32,40,115,101,101,32,105,109,112,111,114,116,
-    108,105,98,46,97,98,99,46,77,101,116,97,80,97,116,104,
-    70,105,110,100,101,114,32,97,110,100,10,32,32,32,32,105,
-    109,112,111,114,116,108,105,98,46,97,98,99,46,80,97,116,
-    104,69,110,116,114,121,70,105,110,100,101,114,41,32,115,104,
-    111,117,108,100,32,109,111,100,105,102,121,32,77,111,100,117,
-    108,101,83,112,101,99,32,105,110,115,116,97,110,99,101,115,
-    46,10,10,32,32,32,32,78,41,3,218,6,111,114,105,103,
-    105,110,218,12,108,111,97,100,101,114,95,115,116,97,116,101,
-    218,10,105,115,95,112,97,99,107,97,103,101,99,3,0,0,
-    0,0,0,0,0,3,0,0,0,6,0,0,0,2,0,0,
-    0,67,0,0,0,115,54,0,0,0,124,1,124,0,95,0,
-    124,2,124,0,95,1,124,3,124,0,95,2,124,4,124,0,
-    95,3,124,5,114,32,103,0,110,2,100,0,124,0,95,4,
-    100,1,124,0,95,5,100,0,124,0,95,6,100,0,83,0,
-    169,2,78,70,41,7,114,17,0,0,0,114,109,0,0,0,
-    114,113,0,0,0,114,114,0,0,0,218,26,115,117,98,109,
-    111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,
-    97,116,105,111,110,115,218,13,95,115,101,116,95,102,105,108,
-    101,97,116,116,114,218,7,95,99,97,99,104,101,100,41,6,
-    114,30,0,0,0,114,17,0,0,0,114,109,0,0,0,114,
-    113,0,0,0,114,114,0,0,0,114,115,0,0,0,114,10,
-    0,0,0,114,10,0,0,0,114,11,0,0,0,114,31,0,
-    0,0,86,1,0,0,115,14,0,0,0,0,2,6,1,6,
-    1,6,1,6,1,14,3,6,1,122,19,77,111,100,117,108,
-    101,83,112,101,99,46,95,95,105,110,105,116,95,95,99,1,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,
-    0,0,0,67,0,0,0,115,102,0,0,0,100,1,160,0,
-    124,0,106,1,161,1,100,2,160,0,124,0,106,2,161,1,
-    103,2,125,1,124,0,106,3,100,0,107,9,114,52,124,1,
-    160,4,100,3,160,0,124,0,106,3,161,1,161,1,1,0,
-    124,0,106,5,100,0,107,9,114,80,124,1,160,4,100,4,
-    160,0,124,0,106,5,161,1,161,1,1,0,100,5,160,0,
-    124,0,106,6,106,7,100,6,160,8,124,1,161,1,161,2,
-    83,0,41,7,78,122,9,110,97,109,101,61,123,33,114,125,
-    122,11,108,111,97,100,101,114,61,123,33,114,125,122,11,111,
-    114,105,103,105,110,61,123,33,114,125,122,29,115,117,98,109,
-    111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,
-    97,116,105,111,110,115,61,123,125,122,6,123,125,40,123,125,
-    41,122,2,44,32,41,9,114,45,0,0,0,114,17,0,0,
-    0,114,109,0,0,0,114,113,0,0,0,218,6,97,112,112,
-    101,110,100,114,117,0,0,0,218,9,95,95,99,108,97,115,
-    115,95,95,114,1,0,0,0,218,4,106,111,105,110,41,2,
-    114,30,0,0,0,114,55,0,0,0,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,114,48,0,0,0,98,1,
-    0,0,115,20,0,0,0,0,1,10,1,10,255,4,2,10,
-    1,18,1,10,1,8,1,4,255,6,2,122,19,77,111,100,
-    117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95,
-    99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
-    0,8,0,0,0,67,0,0,0,115,106,0,0,0,124,0,
-    106,0,125,2,122,72,124,0,106,1,124,1,106,1,107,2,
-    111,76,124,0,106,2,124,1,106,2,107,2,111,76,124,0,
-    106,3,124,1,106,3,107,2,111,76,124,2,124,1,106,0,
-    107,2,111,76,124,0,106,4,124,1,106,4,107,2,111,76,
-    124,0,106,5,124,1,106,5,107,2,87,0,83,0,4,0,
-    116,6,107,10,114,100,1,0,1,0,1,0,89,0,100,1,
-    83,0,88,0,100,0,83,0,114,116,0,0,0,41,7,114,
-    117,0,0,0,114,17,0,0,0,114,109,0,0,0,114,113,
-    0,0,0,218,6,99,97,99,104,101,100,218,12,104,97,115,
-    95,108,111,99,97,116,105,111,110,114,106,0,0,0,41,3,
-    114,30,0,0,0,90,5,111,116,104,101,114,90,4,115,109,
-    115,108,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
-    0,218,6,95,95,101,113,95,95,108,1,0,0,115,30,0,
-    0,0,0,1,6,1,2,1,12,1,10,255,2,2,10,254,
-    2,3,8,253,2,4,10,252,2,5,10,251,4,6,14,1,
-    122,17,77,111,100,117,108,101,83,112,101,99,46,95,95,101,
-    113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    1,0,0,0,3,0,0,0,67,0,0,0,115,58,0,0,
-    0,124,0,106,0,100,0,107,8,114,52,124,0,106,1,100,
-    0,107,9,114,52,124,0,106,2,114,52,116,3,100,0,107,
-    8,114,38,116,4,130,1,116,3,160,5,124,0,106,1,161,
-    1,124,0,95,0,124,0,106,0,83,0,114,13,0,0,0,
-    41,6,114,119,0,0,0,114,113,0,0,0,114,118,0,0,
-    0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120,
-    116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,101,
-    109,101,110,116,101,100,69,114,114,111,114,90,11,95,103,101,
-    116,95,99,97,99,104,101,100,114,47,0,0,0,114,10,0,
-    0,0,114,10,0,0,0,114,11,0,0,0,114,123,0,0,
-    0,120,1,0,0,115,12,0,0,0,0,2,10,1,16,1,
-    8,1,4,1,14,1,122,17,77,111,100,117,108,101,83,112,
-    101,99,46,99,97,99,104,101,100,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
-    0,0,115,10,0,0,0,124,1,124,0,95,0,100,0,83,
-    0,114,13,0,0,0,41,1,114,119,0,0,0,41,2,114,
-    30,0,0,0,114,123,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,114,123,0,0,0,129,1,0,
-    0,115,2,0,0,0,0,2,99,1,0,0,0,0,0,0,
-    0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,
-    0,115,36,0,0,0,124,0,106,0,100,1,107,8,114,26,
-    124,0,106,1,160,2,100,2,161,1,100,3,25,0,83,0,
-    124,0,106,1,83,0,100,1,83,0,41,4,122,32,84,104,
-    101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,
-    100,117,108,101,39,115,32,112,97,114,101,110,116,46,78,218,
-    1,46,114,22,0,0,0,41,3,114,117,0,0,0,114,17,
-    0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,114,
-    47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
-    0,0,0,218,6,112,97,114,101,110,116,133,1,0,0,115,
-    6,0,0,0,0,3,10,1,16,2,122,17,77,111,100,117,
-    108,101,83,112,101,99,46,112,97,114,101,110,116,99,1,0,
-    0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
-    0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
-    0,114,13,0,0,0,41,1,114,118,0,0,0,114,47,0,
-    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
-    0,114,124,0,0,0,141,1,0,0,115,2,0,0,0,0,
-    2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97,
-    115,95,108,111,99,97,116,105,111,110,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,
-    0,0,0,115,14,0,0,0,116,0,124,1,131,1,124,0,
-    95,1,100,0,83,0,114,13,0,0,0,41,2,218,4,98,
-    111,111,108,114,118,0,0,0,41,2,114,30,0,0,0,218,
-    5,118,97,108,117,101,114,10,0,0,0,114,10,0,0,0,
-    114,11,0,0,0,114,124,0,0,0,145,1,0,0,115,2,
-    0,0,0,0,2,41,12,114,1,0,0,0,114,0,0,0,
-    0,114,2,0,0,0,114,3,0,0,0,114,31,0,0,0,
-    114,48,0,0,0,114,125,0,0,0,218,8,112,114,111,112,
-    101,114,116,121,114,123,0,0,0,218,6,115,101,116,116,101,
-    114,114,130,0,0,0,114,124,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
-    112,0,0,0,49,1,0,0,115,32,0,0,0,8,1,4,
-    36,4,1,2,255,12,12,8,10,8,12,2,1,10,8,4,
-    1,10,3,2,1,10,7,2,1,10,3,4,1,114,112,0,
-    0,0,169,2,114,113,0,0,0,114,115,0,0,0,99,2,
-    0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,8,
-    0,0,0,67,0,0,0,115,154,0,0,0,116,0,124,1,
-    100,1,131,2,114,74,116,1,100,2,107,8,114,22,116,2,
-    130,1,116,1,106,3,125,4,124,3,100,2,107,8,114,48,
-    124,4,124,0,124,1,100,3,141,2,83,0,124,3,114,56,
-    103,0,110,2,100,2,125,5,124,4,124,0,124,1,124,5,
-    100,4,141,3,83,0,124,3,100,2,107,8,114,138,116,0,
-    124,1,100,5,131,2,114,134,122,14,124,1,160,4,124,0,
-    161,1,125,3,87,0,113,138,4,0,116,5,107,10,114,130,
-    1,0,1,0,1,0,100,2,125,3,89,0,113,138,88,0,
-    110,4,100,6,125,3,116,6,124,0,124,1,124,2,124,3,
-    100,7,141,4,83,0,41,8,122,53,82,101,116,117,114,110,
-    32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98,
-    97,115,101,100,32,111,110,32,118,97,114,105,111,117,115,32,
-    108,111,97,100,101,114,32,109,101,116,104,111,100,115,46,90,
-    12,103,101,116,95,102,105,108,101,110,97,109,101,78,41,1,
-    114,109,0,0,0,41,2,114,109,0,0,0,114,117,0,0,
-    0,114,115,0,0,0,70,114,135,0,0,0,41,7,114,4,
-    0,0,0,114,126,0,0,0,114,127,0,0,0,218,23,115,
-    112,101,99,95,102,114,111,109,95,102,105,108,101,95,108,111,
-    99,97,116,105,111,110,114,115,0,0,0,114,79,0,0,0,
-    114,112,0,0,0,41,6,114,17,0,0,0,114,109,0,0,
-    0,114,113,0,0,0,114,115,0,0,0,114,136,0,0,0,
-    90,6,115,101,97,114,99,104,114,10,0,0,0,114,10,0,
-    0,0,114,11,0,0,0,114,91,0,0,0,150,1,0,0,
-    115,36,0,0,0,0,2,10,1,8,1,4,1,6,2,8,
-    1,12,1,12,1,6,1,2,255,6,3,8,1,10,1,2,
-    1,14,1,14,1,12,3,4,2,114,91,0,0,0,99,3,
-    0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,
-    0,0,0,67,0,0,0,115,56,1,0,0,122,10,124,0,
-    106,0,125,3,87,0,110,20,4,0,116,1,107,10,114,30,
-    1,0,1,0,1,0,89,0,110,14,88,0,124,3,100,0,
-    107,9,114,44,124,3,83,0,124,0,106,2,125,4,124,1,
-    100,0,107,8,114,90,122,10,124,0,106,3,125,1,87,0,
-    110,20,4,0,116,1,107,10,114,88,1,0,1,0,1,0,
-    89,0,110,2,88,0,122,10,124,0,106,4,125,5,87,0,
-    110,24,4,0,116,1,107,10,114,124,1,0,1,0,1,0,
-    100,0,125,5,89,0,110,2,88,0,124,2,100,0,107,8,
-    114,184,124,5,100,0,107,8,114,180,122,10,124,1,106,5,
-    125,2,87,0,113,184,4,0,116,1,107,10,114,176,1,0,
-    1,0,1,0,100,0,125,2,89,0,113,184,88,0,110,4,
-    124,5,125,2,122,10,124,0,106,6,125,6,87,0,110,24,
-    4,0,116,1,107,10,114,218,1,0,1,0,1,0,100,0,
-    125,6,89,0,110,2,88,0,122,14,116,7,124,0,106,8,
-    131,1,125,7,87,0,110,26,4,0,116,1,107,10,144,1,
-    114,4,1,0,1,0,1,0,100,0,125,7,89,0,110,2,
-    88,0,116,9,124,4,124,1,124,2,100,1,141,3,125,3,
-    124,5,100,0,107,8,144,1,114,34,100,2,110,2,100,3,
-    124,3,95,10,124,6,124,3,95,11,124,7,124,3,95,12,
-    124,3,83,0,41,4,78,169,1,114,113,0,0,0,70,84,
-    41,13,114,105,0,0,0,114,106,0,0,0,114,1,0,0,
-    0,114,98,0,0,0,114,108,0,0,0,218,7,95,79,82,
-    73,71,73,78,218,10,95,95,99,97,99,104,101,100,95,95,
-    218,4,108,105,115,116,218,8,95,95,112,97,116,104,95,95,
-    114,112,0,0,0,114,118,0,0,0,114,123,0,0,0,114,
-    117,0,0,0,41,8,114,96,0,0,0,114,109,0,0,0,
-    114,113,0,0,0,114,95,0,0,0,114,17,0,0,0,90,
-    8,108,111,99,97,116,105,111,110,114,123,0,0,0,114,117,
+    0,0,114,11,0,0,0,218,9,95,95,101,110,116,101,114,
+    95,95,156,0,0,0,115,4,0,0,0,0,1,12,1,122,
+    28,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97,
+    103,101,114,46,95,95,101,110,116,101,114,95,95,99,1,0,
+    0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,
+    0,0,79,0,0,0,115,14,0,0,0,124,0,106,0,160,
+    1,161,0,1,0,100,0,83,0,114,13,0,0,0,41,2,
+    114,53,0,0,0,114,41,0,0,0,41,3,114,30,0,0,
+    0,218,4,97,114,103,115,90,6,107,119,97,114,103,115,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,
+    95,95,101,120,105,116,95,95,160,0,0,0,115,2,0,0,
+    0,0,1,122,27,95,77,111,100,117,108,101,76,111,99,107,
+    77,97,110,97,103,101,114,46,95,95,101,120,105,116,95,95,
+    78,41,6,114,1,0,0,0,114,0,0,0,0,114,2,0,
+    0,0,114,31,0,0,0,114,55,0,0,0,114,57,0,0,
+    0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,51,0,0,0,150,0,0,0,115,6,
+    0,0,0,8,2,8,4,8,4,114,51,0,0,0,99,1,
+    0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,
+    0,0,0,67,0,0,0,115,136,0,0,0,116,0,160,1,
+    161,0,1,0,122,112,122,14,116,2,124,0,25,0,131,0,
+    125,1,87,0,110,22,4,0,116,3,121,46,1,0,1,0,
+    1,0,100,1,125,1,89,0,110,2,48,0,124,1,100,1,
+    117,0,114,110,116,4,100,1,117,0,114,74,116,5,124,0,
+    131,1,125,1,110,8,116,6,124,0,131,1,125,1,124,0,
+    102,1,100,2,100,3,132,1,125,2,116,7,160,8,124,1,
+    124,2,161,2,116,2,124,0,60,0,87,0,116,0,160,9,
+    161,0,1,0,110,10,116,0,160,9,161,0,1,0,48,0,
+    124,1,83,0,41,4,122,139,71,101,116,32,111,114,32,99,
+    114,101,97,116,101,32,116,104,101,32,109,111,100,117,108,101,
+    32,108,111,99,107,32,102,111,114,32,97,32,103,105,118,101,
+    110,32,109,111,100,117,108,101,32,110,97,109,101,46,10,10,
+    32,32,32,32,65,99,113,117,105,114,101,47,114,101,108,101,
+    97,115,101,32,105,110,116,101,114,110,97,108,108,121,32,116,
+    104,101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,
+    32,108,111,99,107,32,116,111,32,112,114,111,116,101,99,116,
+    10,32,32,32,32,95,109,111,100,117,108,101,95,108,111,99,
+    107,115,46,78,99,2,0,0,0,0,0,0,0,0,0,0,
+    0,2,0,0,0,8,0,0,0,83,0,0,0,115,56,0,
+    0,0,116,0,160,1,161,0,1,0,122,32,116,2,160,3,
+    124,1,161,1,124,0,117,0,114,30,116,2,124,1,61,0,
+    87,0,116,0,160,4,161,0,1,0,110,10,116,0,160,4,
+    161,0,1,0,48,0,100,0,83,0,114,13,0,0,0,41,
+    5,218,4,95,105,109,112,218,12,97,99,113,117,105,114,101,
+    95,108,111,99,107,218,13,95,109,111,100,117,108,101,95,108,
+    111,99,107,115,114,35,0,0,0,218,12,114,101,108,101,97,
+    115,101,95,108,111,99,107,41,2,218,3,114,101,102,114,17,
     0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,218,17,95,115,112,101,99,95,102,114,111,109,95,109,
-    111,100,117,108,101,176,1,0,0,115,72,0,0,0,0,2,
-    2,1,10,1,14,1,6,2,8,1,4,2,6,1,8,1,
-    2,1,10,1,14,2,6,1,2,1,10,1,14,1,10,1,
-    8,1,8,1,2,1,10,1,14,1,12,2,4,1,2,1,
-    10,1,14,1,10,1,2,1,14,1,16,1,10,2,14,1,
-    20,1,6,1,6,1,114,142,0,0,0,70,169,1,218,8,
-    111,118,101,114,114,105,100,101,99,2,0,0,0,0,0,0,
-    0,1,0,0,0,5,0,0,0,8,0,0,0,67,0,0,
-    0,115,226,1,0,0,124,2,115,20,116,0,124,1,100,1,
-    100,0,131,3,100,0,107,8,114,54,122,12,124,0,106,1,
-    124,1,95,2,87,0,110,20,4,0,116,3,107,10,114,52,
-    1,0,1,0,1,0,89,0,110,2,88,0,124,2,115,74,
-    116,0,124,1,100,2,100,0,131,3,100,0,107,8,114,178,
-    124,0,106,4,125,3,124,3,100,0,107,8,114,146,124,0,
-    106,5,100,0,107,9,114,146,116,6,100,0,107,8,114,110,
-    116,7,130,1,116,6,106,8,125,4,124,4,160,9,124,4,
-    161,1,125,3,124,0,106,5,124,3,95,10,124,3,124,0,
-    95,4,100,0,124,1,95,11,122,10,124,3,124,1,95,12,
-    87,0,110,20,4,0,116,3,107,10,114,176,1,0,1,0,
-    1,0,89,0,110,2,88,0,124,2,115,198,116,0,124,1,
-    100,3,100,0,131,3,100,0,107,8,114,232,122,12,124,0,
-    106,13,124,1,95,14,87,0,110,20,4,0,116,3,107,10,
-    114,230,1,0,1,0,1,0,89,0,110,2,88,0,122,10,
-    124,0,124,1,95,15,87,0,110,22,4,0,116,3,107,10,
-    144,1,114,8,1,0,1,0,1,0,89,0,110,2,88,0,
-    124,2,144,1,115,34,116,0,124,1,100,4,100,0,131,3,
-    100,0,107,8,144,1,114,82,124,0,106,5,100,0,107,9,
-    144,1,114,82,122,12,124,0,106,5,124,1,95,16,87,0,
-    110,22,4,0,116,3,107,10,144,1,114,80,1,0,1,0,
-    1,0,89,0,110,2,88,0,124,0,106,17,144,1,114,222,
-    124,2,144,1,115,114,116,0,124,1,100,5,100,0,131,3,
-    100,0,107,8,144,1,114,150,122,12,124,0,106,18,124,1,
-    95,11,87,0,110,22,4,0,116,3,107,10,144,1,114,148,
-    1,0,1,0,1,0,89,0,110,2,88,0,124,2,144,1,
-    115,174,116,0,124,1,100,6,100,0,131,3,100,0,107,8,
-    144,1,114,222,124,0,106,19,100,0,107,9,144,1,114,222,
-    122,12,124,0,106,19,124,1,95,20,87,0,110,22,4,0,
-    116,3,107,10,144,1,114,220,1,0,1,0,1,0,89,0,
-    110,2,88,0,124,1,83,0,41,7,78,114,1,0,0,0,
-    114,98,0,0,0,218,11,95,95,112,97,99,107,97,103,101,
-    95,95,114,141,0,0,0,114,108,0,0,0,114,139,0,0,
-    0,41,21,114,6,0,0,0,114,17,0,0,0,114,1,0,
-    0,0,114,106,0,0,0,114,109,0,0,0,114,117,0,0,
-    0,114,126,0,0,0,114,127,0,0,0,218,16,95,78,97,
-    109,101,115,112,97,99,101,76,111,97,100,101,114,218,7,95,
-    95,110,101,119,95,95,90,5,95,112,97,116,104,114,108,0,
-    0,0,114,98,0,0,0,114,130,0,0,0,114,145,0,0,
-    0,114,105,0,0,0,114,141,0,0,0,114,124,0,0,0,
-    114,113,0,0,0,114,123,0,0,0,114,139,0,0,0,41,
-    5,114,95,0,0,0,114,96,0,0,0,114,144,0,0,0,
-    114,109,0,0,0,114,146,0,0,0,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,218,18,95,105,110,105,116,
-    95,109,111,100,117,108,101,95,97,116,116,114,115,221,1,0,
-    0,115,96,0,0,0,0,4,20,1,2,1,12,1,14,1,
-    6,2,20,1,6,1,8,2,10,1,8,1,4,1,6,2,
-    10,1,8,1,6,11,6,1,2,1,10,1,14,1,6,2,
-    20,1,2,1,12,1,14,1,6,2,2,1,10,1,16,1,
-    6,2,24,1,12,1,2,1,12,1,16,1,6,2,8,1,
-    24,1,2,1,12,1,16,1,6,2,24,1,12,1,2,1,
-    12,1,16,1,6,1,114,148,0,0,0,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
-    67,0,0,0,115,82,0,0,0,100,1,125,1,116,0,124,
-    0,106,1,100,2,131,2,114,30,124,0,106,1,160,2,124,
-    0,161,1,125,1,110,20,116,0,124,0,106,1,100,3,131,
-    2,114,50,116,3,100,4,131,1,130,1,124,1,100,1,107,
-    8,114,68,116,4,124,0,106,5,131,1,125,1,116,6,124,
-    0,124,1,131,2,1,0,124,1,83,0,41,5,122,43,67,
-    114,101,97,116,101,32,97,32,109,111,100,117,108,101,32,98,
-    97,115,101,100,32,111,110,32,116,104,101,32,112,114,111,118,
-    105,100,101,100,32,115,112,101,99,46,78,218,13,99,114,101,
-    97,116,101,95,109,111,100,117,108,101,218,11,101,120,101,99,
-    95,109,111,100,117,108,101,122,66,108,111,97,100,101,114,115,
-    32,116,104,97,116,32,100,101,102,105,110,101,32,101,120,101,
-    99,95,109,111,100,117,108,101,40,41,32,109,117,115,116,32,
-    97,108,115,111,32,100,101,102,105,110,101,32,99,114,101,97,
-    116,101,95,109,111,100,117,108,101,40,41,41,7,114,4,0,
-    0,0,114,109,0,0,0,114,149,0,0,0,114,79,0,0,
-    0,114,18,0,0,0,114,17,0,0,0,114,148,0,0,0,
-    169,2,114,95,0,0,0,114,96,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,218,16,109,111,100,
-    117,108,101,95,102,114,111,109,95,115,112,101,99,37,2,0,
-    0,115,18,0,0,0,0,3,4,1,12,3,14,1,12,1,
-    8,2,8,1,10,1,10,1,114,152,0,0,0,99,1,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,
-    0,0,67,0,0,0,115,106,0,0,0,124,0,106,0,100,
-    1,107,8,114,14,100,2,110,4,124,0,106,0,125,1,124,
-    0,106,1,100,1,107,8,114,66,124,0,106,2,100,1,107,
-    8,114,50,100,3,160,3,124,1,161,1,83,0,100,4,160,
-    3,124,1,124,0,106,2,161,2,83,0,110,36,124,0,106,
-    4,114,86,100,5,160,3,124,1,124,0,106,1,161,2,83,
-    0,100,6,160,3,124,0,106,0,124,0,106,1,161,2,83,
-    0,100,1,83,0,41,7,122,38,82,101,116,117,114,110,32,
-    116,104,101,32,114,101,112,114,32,116,111,32,117,115,101,32,
-    102,111,114,32,116,104,101,32,109,111,100,117,108,101,46,78,
-    114,100,0,0,0,114,101,0,0,0,114,102,0,0,0,114,
-    103,0,0,0,250,18,60,109,111,100,117,108,101,32,123,33,
-    114,125,32,40,123,125,41,62,41,5,114,17,0,0,0,114,
-    113,0,0,0,114,109,0,0,0,114,45,0,0,0,114,124,
-    0,0,0,41,2,114,95,0,0,0,114,17,0,0,0,114,
-    10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,107,
-    0,0,0,54,2,0,0,115,16,0,0,0,0,3,20,1,
-    10,1,10,1,10,2,16,2,6,1,14,2,114,107,0,0,
-    0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,
-    0,0,10,0,0,0,67,0,0,0,115,204,0,0,0,124,
-    0,106,0,125,2,116,1,124,2,131,1,143,180,1,0,116,
-    2,106,3,160,4,124,2,161,1,124,1,107,9,114,54,100,
-    1,160,5,124,2,161,1,125,3,116,6,124,3,124,2,100,
-    2,141,2,130,1,122,106,124,0,106,8,100,3,107,8,114,
-    106,124,0,106,9,100,3,107,8,114,90,116,6,100,4,124,
-    0,106,0,100,2,141,2,130,1,116,10,124,0,124,1,100,
-    5,100,6,141,3,1,0,110,52,116,10,124,0,124,1,100,
-    5,100,6,141,3,1,0,116,11,124,0,106,8,100,7,131,
-    2,115,146,124,0,106,8,160,12,124,2,161,1,1,0,110,
-    12,124,0,106,8,160,13,124,1,161,1,1,0,87,0,53,
-    0,116,2,106,3,160,7,124,0,106,0,161,1,125,1,124,
-    1,116,2,106,3,124,0,106,0,60,0,88,0,87,0,53,
-    0,81,0,82,0,88,0,124,1,83,0,41,8,122,70,69,
-    120,101,99,117,116,101,32,116,104,101,32,115,112,101,99,39,
-    115,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,
-    108,101,32,105,110,32,97,110,32,101,120,105,115,116,105,110,
-    103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115,
-    112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33,
-    114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111,
-    100,117,108,101,115,114,16,0,0,0,78,250,14,109,105,115,
-    115,105,110,103,32,108,111,97,100,101,114,84,114,143,0,0,
-    0,114,150,0,0,0,41,14,114,17,0,0,0,114,50,0,
-    0,0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,
-    0,114,45,0,0,0,114,79,0,0,0,218,3,112,111,112,
-    114,109,0,0,0,114,117,0,0,0,114,148,0,0,0,114,
-    4,0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,
-    101,114,150,0,0,0,41,4,114,95,0,0,0,114,96,0,
-    0,0,114,17,0,0,0,218,3,109,115,103,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,114,93,0,0,0,
-    71,2,0,0,115,34,0,0,0,0,2,6,1,10,1,16,
-    1,10,1,12,1,2,1,10,1,10,1,14,2,16,2,14,
-    1,12,4,14,2,16,4,14,1,24,1,114,93,0,0,0,
-    99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
-    0,8,0,0,0,67,0,0,0,115,26,1,0,0,122,18,
-    124,0,106,0,160,1,124,0,106,2,161,1,1,0,87,0,
-    110,52,1,0,1,0,1,0,124,0,106,2,116,3,106,4,
-    107,6,114,64,116,3,106,4,160,5,124,0,106,2,161,1,
-    125,1,124,1,116,3,106,4,124,0,106,2,60,0,130,0,
-    89,0,110,2,88,0,116,3,106,4,160,5,124,0,106,2,
-    161,1,125,1,124,1,116,3,106,4,124,0,106,2,60,0,
-    116,6,124,1,100,1,100,0,131,3,100,0,107,8,114,148,
-    122,12,124,0,106,0,124,1,95,7,87,0,110,20,4,0,
-    116,8,107,10,114,146,1,0,1,0,1,0,89,0,110,2,
-    88,0,116,6,124,1,100,2,100,0,131,3,100,0,107,8,
-    114,226,122,40,124,1,106,9,124,1,95,10,116,11,124,1,
-    100,3,131,2,115,202,124,0,106,2,160,12,100,4,161,1,
-    100,5,25,0,124,1,95,10,87,0,110,20,4,0,116,8,
-    107,10,114,224,1,0,1,0,1,0,89,0,110,2,88,0,
-    116,6,124,1,100,6,100,0,131,3,100,0,107,8,144,1,
-    114,22,122,10,124,0,124,1,95,13,87,0,110,22,4,0,
-    116,8,107,10,144,1,114,20,1,0,1,0,1,0,89,0,
-    110,2,88,0,124,1,83,0,41,7,78,114,98,0,0,0,
-    114,145,0,0,0,114,141,0,0,0,114,128,0,0,0,114,
-    22,0,0,0,114,105,0,0,0,41,14,114,109,0,0,0,
+    0,0,218,2,99,98,185,0,0,0,115,10,0,0,0,0,
+    1,8,1,2,4,14,1,8,2,122,28,95,103,101,116,95,
+    109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99,
+    97,108,115,62,46,99,98,41,10,114,58,0,0,0,114,59,
+    0,0,0,114,60,0,0,0,218,8,75,101,121,69,114,114,
+    111,114,114,23,0,0,0,114,50,0,0,0,114,20,0,0,
+    0,218,8,95,119,101,97,107,114,101,102,114,62,0,0,0,
+    114,61,0,0,0,41,3,114,17,0,0,0,114,24,0,0,
+    0,114,63,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,54,0,0,0,166,0,0,0,115,28,
+    0,0,0,0,6,8,1,2,1,2,1,14,1,12,1,10,
+    2,8,1,8,1,10,2,8,2,12,11,18,2,20,2,114,
+    54,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+    0,2,0,0,0,8,0,0,0,67,0,0,0,115,52,0,
+    0,0,116,0,124,0,131,1,125,1,122,12,124,1,160,1,
+    161,0,1,0,87,0,110,18,4,0,116,2,121,38,1,0,
+    1,0,1,0,89,0,110,10,48,0,124,1,160,3,161,0,
+    1,0,100,1,83,0,41,2,122,189,65,99,113,117,105,114,
+    101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,115,
+    32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,107,
+    32,102,111,114,32,97,32,103,105,118,101,110,32,109,111,100,
+    117,108,101,32,110,97,109,101,46,10,10,32,32,32,32,84,
+    104,105,115,32,105,115,32,117,115,101,100,32,116,111,32,101,
+    110,115,117,114,101,32,97,32,109,111,100,117,108,101,32,105,
+    115,32,99,111,109,112,108,101,116,101,108,121,32,105,110,105,
+    116,105,97,108,105,122,101,100,44,32,105,110,32,116,104,101,
+    10,32,32,32,32,101,118,101,110,116,32,105,116,32,105,115,
+    32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,32,
+    98,121,32,97,110,111,116,104,101,114,32,116,104,114,101,97,
+    100,46,10,32,32,32,32,78,41,4,114,54,0,0,0,114,
+    40,0,0,0,114,19,0,0,0,114,41,0,0,0,41,2,
+    114,17,0,0,0,114,24,0,0,0,114,10,0,0,0,114,
+    10,0,0,0,114,11,0,0,0,218,19,95,108,111,99,107,
+    95,117,110,108,111,99,107,95,109,111,100,117,108,101,203,0,
+    0,0,115,12,0,0,0,0,6,8,1,2,1,12,1,12,
+    3,6,2,114,66,0,0,0,99,1,0,0,0,0,0,0,
+    0,0,0,0,0,3,0,0,0,4,0,0,0,79,0,0,
+    0,115,14,0,0,0,124,0,124,1,105,0,124,2,164,1,
+    142,1,83,0,41,1,97,46,1,0,0,114,101,109,111,118,
+    101,95,105,109,112,111,114,116,108,105,98,95,102,114,97,109,
+    101,115,32,105,110,32,105,109,112,111,114,116,46,99,32,119,
+    105,108,108,32,97,108,119,97,121,115,32,114,101,109,111,118,
+    101,32,115,101,113,117,101,110,99,101,115,10,32,32,32,32,
+    111,102,32,105,109,112,111,114,116,108,105,98,32,102,114,97,
+    109,101,115,32,116,104,97,116,32,101,110,100,32,119,105,116,
+    104,32,97,32,99,97,108,108,32,116,111,32,116,104,105,115,
+    32,102,117,110,99,116,105,111,110,10,10,32,32,32,32,85,
+    115,101,32,105,116,32,105,110,115,116,101,97,100,32,111,102,
+    32,97,32,110,111,114,109,97,108,32,99,97,108,108,32,105,
+    110,32,112,108,97,99,101,115,32,119,104,101,114,101,32,105,
+    110,99,108,117,100,105,110,103,32,116,104,101,32,105,109,112,
+    111,114,116,108,105,98,10,32,32,32,32,102,114,97,109,101,
+    115,32,105,110,116,114,111,100,117,99,101,115,32,117,110,119,
+    97,110,116,101,100,32,110,111,105,115,101,32,105,110,116,111,
+    32,116,104,101,32,116,114,97,99,101,98,97,99,107,32,40,
+    101,46,103,46,32,119,104,101,110,32,101,120,101,99,117,116,
+    105,110,103,10,32,32,32,32,109,111,100,117,108,101,32,99,
+    111,100,101,41,10,32,32,32,32,114,10,0,0,0,41,3,
+    218,1,102,114,56,0,0,0,90,4,107,119,100,115,114,10,
+    0,0,0,114,10,0,0,0,114,11,0,0,0,218,25,95,
+    99,97,108,108,95,119,105,116,104,95,102,114,97,109,101,115,
+    95,114,101,109,111,118,101,100,220,0,0,0,115,2,0,0,
+    0,0,8,114,68,0,0,0,114,39,0,0,0,41,1,218,
+    9,118,101,114,98,111,115,105,116,121,99,1,0,0,0,0,
+    0,0,0,1,0,0,0,3,0,0,0,4,0,0,0,71,
+    0,0,0,115,54,0,0,0,116,0,106,1,106,2,124,1,
+    107,5,114,50,124,0,160,3,100,1,161,1,115,30,100,2,
+    124,0,23,0,125,0,116,4,124,0,106,5,124,2,142,0,
+    116,0,106,6,100,3,141,2,1,0,100,4,83,0,41,5,
+    122,61,80,114,105,110,116,32,116,104,101,32,109,101,115,115,
+    97,103,101,32,116,111,32,115,116,100,101,114,114,32,105,102,
+    32,45,118,47,80,89,84,72,79,78,86,69,82,66,79,83,
+    69,32,105,115,32,116,117,114,110,101,100,32,111,110,46,41,
+    2,250,1,35,122,7,105,109,112,111,114,116,32,122,2,35,
+    32,41,1,90,4,102,105,108,101,78,41,7,114,15,0,0,
+    0,218,5,102,108,97,103,115,218,7,118,101,114,98,111,115,
+    101,218,10,115,116,97,114,116,115,119,105,116,104,218,5,112,
+    114,105,110,116,114,46,0,0,0,218,6,115,116,100,101,114,
+    114,41,3,218,7,109,101,115,115,97,103,101,114,69,0,0,
+    0,114,56,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,218,16,95,118,101,114,98,111,115,101,95,
+    109,101,115,115,97,103,101,231,0,0,0,115,8,0,0,0,
+    0,2,12,1,10,1,8,1,114,77,0,0,0,99,1,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
+    0,0,3,0,0,0,115,26,0,0,0,135,0,102,1,100,
+    1,100,2,132,8,125,1,116,0,124,1,136,0,131,2,1,
+    0,124,1,83,0,41,3,122,49,68,101,99,111,114,97,116,
+    111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,101,
+    32,110,97,109,101,100,32,109,111,100,117,108,101,32,105,115,
+    32,98,117,105,108,116,45,105,110,46,99,2,0,0,0,0,
+    0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,
+    0,0,0,115,38,0,0,0,124,1,116,0,106,1,118,1,
+    114,28,116,2,100,1,160,3,124,1,161,1,124,1,100,2,
+    141,2,130,1,136,0,124,0,124,1,131,2,83,0,41,3,
+    78,250,29,123,33,114,125,32,105,115,32,110,111,116,32,97,
+    32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,
+    114,16,0,0,0,41,4,114,15,0,0,0,218,20,98,117,
+    105,108,116,105,110,95,109,111,100,117,108,101,95,110,97,109,
+    101,115,218,11,73,109,112,111,114,116,69,114,114,111,114,114,
+    46,0,0,0,169,2,114,30,0,0,0,218,8,102,117,108,
+    108,110,97,109,101,169,1,218,3,102,120,110,114,10,0,0,
+    0,114,11,0,0,0,218,25,95,114,101,113,117,105,114,101,
+    115,95,98,117,105,108,116,105,110,95,119,114,97,112,112,101,
+    114,241,0,0,0,115,10,0,0,0,0,1,10,1,10,1,
+    2,255,6,2,122,52,95,114,101,113,117,105,114,101,115,95,
+    98,117,105,108,116,105,110,46,60,108,111,99,97,108,115,62,
+    46,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,
+    105,110,95,119,114,97,112,112,101,114,169,1,114,12,0,0,
+    0,41,2,114,84,0,0,0,114,85,0,0,0,114,10,0,
+    0,0,114,83,0,0,0,114,11,0,0,0,218,17,95,114,
+    101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,239,
+    0,0,0,115,6,0,0,0,0,2,12,5,10,1,114,87,
+    0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
+    2,0,0,0,3,0,0,0,3,0,0,0,115,26,0,0,
+    0,135,0,102,1,100,1,100,2,132,8,125,1,116,0,124,
+    1,136,0,131,2,1,0,124,1,83,0,41,3,122,47,68,
+    101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,
+    102,121,32,116,104,101,32,110,97,109,101,100,32,109,111,100,
+    117,108,101,32,105,115,32,102,114,111,122,101,110,46,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,
+    0,0,0,19,0,0,0,115,38,0,0,0,116,0,160,1,
+    124,1,161,1,115,28,116,2,100,1,160,3,124,1,161,1,
+    124,1,100,2,141,2,130,1,136,0,124,0,124,1,131,2,
+    83,0,169,3,78,122,27,123,33,114,125,32,105,115,32,110,
+    111,116,32,97,32,102,114,111,122,101,110,32,109,111,100,117,
+    108,101,114,16,0,0,0,41,4,114,58,0,0,0,218,9,
+    105,115,95,102,114,111,122,101,110,114,80,0,0,0,114,46,
+    0,0,0,114,81,0,0,0,114,83,0,0,0,114,10,0,
+    0,0,114,11,0,0,0,218,24,95,114,101,113,117,105,114,
+    101,115,95,102,114,111,122,101,110,95,119,114,97,112,112,101,
+    114,252,0,0,0,115,10,0,0,0,0,1,10,1,10,1,
+    2,255,6,2,122,50,95,114,101,113,117,105,114,101,115,95,
+    102,114,111,122,101,110,46,60,108,111,99,97,108,115,62,46,
+    95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,
+    95,119,114,97,112,112,101,114,114,86,0,0,0,41,2,114,
+    84,0,0,0,114,90,0,0,0,114,10,0,0,0,114,83,
+    0,0,0,114,11,0,0,0,218,16,95,114,101,113,117,105,
+    114,101,115,95,102,114,111,122,101,110,250,0,0,0,115,6,
+    0,0,0,0,2,12,5,10,1,114,91,0,0,0,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,
+    0,0,0,67,0,0,0,115,62,0,0,0,116,0,124,1,
+    124,0,131,2,125,2,124,1,116,1,106,2,118,0,114,50,
+    116,1,106,2,124,1,25,0,125,3,116,3,124,2,124,3,
+    131,2,1,0,116,1,106,2,124,1,25,0,83,0,116,4,
+    124,2,131,1,83,0,100,1,83,0,41,2,122,128,76,111,
+    97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100,
+    32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115,
+    46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116,
+    117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105,
+    115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
+    101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97,
+    100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,32,
+    105,110,115,116,101,97,100,46,10,10,32,32,32,32,78,41,
+    5,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97,
+    100,101,114,114,15,0,0,0,218,7,109,111,100,117,108,101,
+    115,218,5,95,101,120,101,99,218,5,95,108,111,97,100,41,
+    4,114,30,0,0,0,114,82,0,0,0,218,4,115,112,101,
+    99,218,6,109,111,100,117,108,101,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,218,17,95,108,111,97,100,95,
+    109,111,100,117,108,101,95,115,104,105,109,6,1,0,0,115,
+    12,0,0,0,0,6,10,1,10,1,10,1,10,1,10,2,
+    114,98,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
+    0,0,5,0,0,0,8,0,0,0,67,0,0,0,115,218,
+    0,0,0,116,0,124,0,100,1,100,0,131,3,125,1,116,
+    1,124,1,100,2,131,2,114,54,122,12,124,1,160,2,124,
+    0,161,1,87,0,83,0,4,0,116,3,121,52,1,0,1,
+    0,1,0,89,0,110,2,48,0,122,10,124,0,106,4,125,
+    2,87,0,110,18,4,0,116,5,121,82,1,0,1,0,1,
+    0,89,0,110,18,48,0,124,2,100,0,117,1,114,100,116,
+    6,124,2,131,1,83,0,122,10,124,0,106,7,125,3,87,
+    0,110,22,4,0,116,5,121,132,1,0,1,0,1,0,100,
+    3,125,3,89,0,110,2,48,0,122,10,124,0,106,8,125,
+    4,87,0,110,56,4,0,116,5,121,200,1,0,1,0,1,
+    0,124,1,100,0,117,0,114,180,100,4,160,9,124,3,161,
+    1,6,0,89,0,83,0,100,5,160,9,124,3,124,1,161,
+    2,6,0,89,0,83,0,89,0,110,14,48,0,100,6,160,
+    9,124,3,124,4,161,2,83,0,100,0,83,0,41,7,78,
+    218,10,95,95,108,111,97,100,101,114,95,95,218,11,109,111,
+    100,117,108,101,95,114,101,112,114,250,1,63,250,13,60,109,
+    111,100,117,108,101,32,123,33,114,125,62,250,20,60,109,111,
+    100,117,108,101,32,123,33,114,125,32,40,123,33,114,125,41,
+    62,250,23,60,109,111,100,117,108,101,32,123,33,114,125,32,
+    102,114,111,109,32,123,33,114,125,62,41,10,114,6,0,0,
+    0,114,4,0,0,0,114,100,0,0,0,218,9,69,120,99,
+    101,112,116,105,111,110,218,8,95,95,115,112,101,99,95,95,
+    218,14,65,116,116,114,105,98,117,116,101,69,114,114,111,114,
+    218,22,95,109,111,100,117,108,101,95,114,101,112,114,95,102,
+    114,111,109,95,115,112,101,99,114,1,0,0,0,218,8,95,
+    95,102,105,108,101,95,95,114,46,0,0,0,41,5,114,97,
+    0,0,0,218,6,108,111,97,100,101,114,114,96,0,0,0,
+    114,17,0,0,0,218,8,102,105,108,101,110,97,109,101,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,12,
+    95,109,111,100,117,108,101,95,114,101,112,114,22,1,0,0,
+    115,46,0,0,0,0,2,12,1,10,4,2,1,12,1,12,
+    1,6,1,2,1,10,1,12,1,6,2,8,1,8,4,2,
+    1,10,1,12,1,10,1,2,1,10,1,12,1,8,1,14,
+    2,22,2,114,112,0,0,0,99,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,
+    0,115,114,0,0,0,101,0,90,1,100,0,90,2,100,1,
+    90,3,100,2,100,2,100,2,100,3,156,3,100,4,100,5,
+    132,2,90,4,100,6,100,7,132,0,90,5,100,8,100,9,
+    132,0,90,6,101,7,100,10,100,11,132,0,131,1,90,8,
+    101,8,106,9,100,12,100,11,132,0,131,1,90,8,101,7,
+    100,13,100,14,132,0,131,1,90,10,101,7,100,15,100,16,
+    132,0,131,1,90,11,101,11,106,9,100,17,100,16,132,0,
+    131,1,90,11,100,2,83,0,41,18,218,10,77,111,100,117,
+    108,101,83,112,101,99,97,208,5,0,0,84,104,101,32,115,
+    112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,
+    32,97,32,109,111,100,117,108,101,44,32,117,115,101,100,32,
+    102,111,114,32,108,111,97,100,105,110,103,46,10,10,32,32,
+    32,32,65,32,109,111,100,117,108,101,39,115,32,115,112,101,
+    99,32,105,115,32,116,104,101,32,115,111,117,114,99,101,32,
+    102,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,
+    97,98,111,117,116,32,116,104,101,32,109,111,100,117,108,101,
+    46,32,32,70,111,114,10,32,32,32,32,100,97,116,97,32,
+    97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,
+    116,104,101,32,109,111,100,117,108,101,44,32,105,110,99,108,
+    117,100,105,110,103,32,115,111,117,114,99,101,44,32,117,115,
+    101,32,116,104,101,32,115,112,101,99,39,115,10,32,32,32,
+    32,108,111,97,100,101,114,46,10,10,32,32,32,32,96,110,
+    97,109,101,96,32,105,115,32,116,104,101,32,97,98,115,111,
+    108,117,116,101,32,110,97,109,101,32,111,102,32,116,104,101,
+    32,109,111,100,117,108,101,46,32,32,96,108,111,97,100,101,
+    114,96,32,105,115,32,116,104,101,32,108,111,97,100,101,114,
+    10,32,32,32,32,116,111,32,117,115,101,32,119,104,101,110,
+    32,108,111,97,100,105,110,103,32,116,104,101,32,109,111,100,
+    117,108,101,46,32,32,96,112,97,114,101,110,116,96,32,105,
+    115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,
+    101,10,32,32,32,32,112,97,99,107,97,103,101,32,116,104,
+    101,32,109,111,100,117,108,101,32,105,115,32,105,110,46,32,
+    32,84,104,101,32,112,97,114,101,110,116,32,105,115,32,100,
+    101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,
+    110,97,109,101,46,10,10,32,32,32,32,96,105,115,95,112,
+    97,99,107,97,103,101,96,32,100,101,116,101,114,109,105,110,
+    101,115,32,105,102,32,116,104,101,32,109,111,100,117,108,101,
+    32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,
+    32,112,97,99,107,97,103,101,32,111,114,10,32,32,32,32,
+    110,111,116,46,32,32,79,110,32,109,111,100,117,108,101,115,
+    32,116,104,105,115,32,105,115,32,114,101,102,108,101,99,116,
+    101,100,32,98,121,32,116,104,101,32,96,95,95,112,97,116,
+    104,95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,
+    10,32,32,32,32,96,111,114,105,103,105,110,96,32,105,115,
+    32,116,104,101,32,115,112,101,99,105,102,105,99,32,108,111,
+    99,97,116,105,111,110,32,117,115,101,100,32,98,121,32,116,
+    104,101,32,108,111,97,100,101,114,32,102,114,111,109,32,119,
+    104,105,99,104,32,116,111,10,32,32,32,32,108,111,97,100,
+    32,116,104,101,32,109,111,100,117,108,101,44,32,105,102,32,
+    116,104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,
+    32,105,115,32,97,118,97,105,108,97,98,108,101,46,32,32,
+    87,104,101,110,32,102,105,108,101,110,97,109,101,32,105,115,
+    10,32,32,32,32,115,101,116,44,32,111,114,105,103,105,110,
+    32,119,105,108,108,32,109,97,116,99,104,46,10,10,32,32,
+    32,32,96,104,97,115,95,108,111,99,97,116,105,111,110,96,
+    32,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,
+    97,32,115,112,101,99,39,115,32,34,111,114,105,103,105,110,
+    34,32,114,101,102,108,101,99,116,115,32,97,32,108,111,99,
+    97,116,105,111,110,46,10,32,32,32,32,87,104,101,110,32,
+    116,104,105,115,32,105,115,32,84,114,117,101,44,32,96,95,
+    95,102,105,108,101,95,95,96,32,97,116,116,114,105,98,117,
+    116,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,
+    32,105,115,32,115,101,116,46,10,10,32,32,32,32,96,99,
+    97,99,104,101,100,96,32,105,115,32,116,104,101,32,108,111,
+    99,97,116,105,111,110,32,111,102,32,116,104,101,32,99,97,
+    99,104,101,100,32,98,121,116,101,99,111,100,101,32,102,105,
+    108,101,44,32,105,102,32,97,110,121,46,32,32,73,116,10,
+    32,32,32,32,99,111,114,114,101,115,112,111,110,100,115,32,
+    116,111,32,116,104,101,32,96,95,95,99,97,99,104,101,100,
+    95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,
+    32,32,32,32,96,115,117,98,109,111,100,117,108,101,95,115,
+    101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,96,
+    32,105,115,32,116,104,101,32,115,101,113,117,101,110,99,101,
+    32,111,102,32,112,97,116,104,32,101,110,116,114,105,101,115,
+    32,116,111,10,32,32,32,32,115,101,97,114,99,104,32,119,
+    104,101,110,32,105,109,112,111,114,116,105,110,103,32,115,117,
+    98,109,111,100,117,108,101,115,46,32,32,73,102,32,115,101,
+    116,44,32,105,115,95,112,97,99,107,97,103,101,32,115,104,
+    111,117,108,100,32,98,101,10,32,32,32,32,84,114,117,101,
+    45,45,97,110,100,32,70,97,108,115,101,32,111,116,104,101,
+    114,119,105,115,101,46,10,10,32,32,32,32,80,97,99,107,
+    97,103,101,115,32,97,114,101,32,115,105,109,112,108,121,32,
+    109,111,100,117,108,101,115,32,116,104,97,116,32,40,109,97,
+    121,41,32,104,97,118,101,32,115,117,98,109,111,100,117,108,
+    101,115,46,32,32,73,102,32,97,32,115,112,101,99,10,32,
+    32,32,32,104,97,115,32,97,32,110,111,110,45,78,111,110,
+    101,32,118,97,108,117,101,32,105,110,32,96,115,117,98,109,
+    111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,
+    97,116,105,111,110,115,96,44,32,116,104,101,32,105,109,112,
+    111,114,116,10,32,32,32,32,115,121,115,116,101,109,32,119,
+    105,108,108,32,99,111,110,115,105,100,101,114,32,109,111,100,
+    117,108,101,115,32,108,111,97,100,101,100,32,102,114,111,109,
+    32,116,104,101,32,115,112,101,99,32,97,115,32,112,97,99,
+    107,97,103,101,115,46,10,10,32,32,32,32,79,110,108,121,
+    32,102,105,110,100,101,114,115,32,40,115,101,101,32,105,109,
+    112,111,114,116,108,105,98,46,97,98,99,46,77,101,116,97,
+    80,97,116,104,70,105,110,100,101,114,32,97,110,100,10,32,
+    32,32,32,105,109,112,111,114,116,108,105,98,46,97,98,99,
+    46,80,97,116,104,69,110,116,114,121,70,105,110,100,101,114,
+    41,32,115,104,111,117,108,100,32,109,111,100,105,102,121,32,
+    77,111,100,117,108,101,83,112,101,99,32,105,110,115,116,97,
+    110,99,101,115,46,10,10,32,32,32,32,78,41,3,218,6,
+    111,114,105,103,105,110,218,12,108,111,97,100,101,114,95,115,
+    116,97,116,101,218,10,105,115,95,112,97,99,107,97,103,101,
+    99,3,0,0,0,0,0,0,0,3,0,0,0,6,0,0,
+    0,2,0,0,0,67,0,0,0,115,54,0,0,0,124,1,
+    124,0,95,0,124,2,124,0,95,1,124,3,124,0,95,2,
+    124,4,124,0,95,3,124,5,114,32,103,0,110,2,100,0,
+    124,0,95,4,100,1,124,0,95,5,100,0,124,0,95,6,
+    100,0,83,0,41,2,78,70,41,7,114,17,0,0,0,114,
+    110,0,0,0,114,114,0,0,0,114,115,0,0,0,218,26,
+    115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104,
+    95,108,111,99,97,116,105,111,110,115,218,13,95,115,101,116,
+    95,102,105,108,101,97,116,116,114,218,7,95,99,97,99,104,
+    101,100,41,6,114,30,0,0,0,114,17,0,0,0,114,110,
+    0,0,0,114,114,0,0,0,114,115,0,0,0,114,116,0,
+    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,114,31,0,0,0,95,1,0,0,115,14,0,0,0,0,
+    2,6,1,6,1,6,1,6,1,14,3,6,1,122,19,77,
+    111,100,117,108,101,83,112,101,99,46,95,95,105,110,105,116,
+    95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,2,
+    0,0,0,6,0,0,0,67,0,0,0,115,102,0,0,0,
+    100,1,160,0,124,0,106,1,161,1,100,2,160,0,124,0,
+    106,2,161,1,103,2,125,1,124,0,106,3,100,0,117,1,
+    114,52,124,1,160,4,100,3,160,0,124,0,106,3,161,1,
+    161,1,1,0,124,0,106,5,100,0,117,1,114,80,124,1,
+    160,4,100,4,160,0,124,0,106,5,161,1,161,1,1,0,
+    100,5,160,0,124,0,106,6,106,7,100,6,160,8,124,1,
+    161,1,161,2,83,0,41,7,78,122,9,110,97,109,101,61,
+    123,33,114,125,122,11,108,111,97,100,101,114,61,123,33,114,
+    125,122,11,111,114,105,103,105,110,61,123,33,114,125,122,29,
+    115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104,
+    95,108,111,99,97,116,105,111,110,115,61,123,125,122,6,123,
+    125,40,123,125,41,122,2,44,32,41,9,114,46,0,0,0,
+    114,17,0,0,0,114,110,0,0,0,114,114,0,0,0,218,
+    6,97,112,112,101,110,100,114,117,0,0,0,218,9,95,95,
+    99,108,97,115,115,95,95,114,1,0,0,0,218,4,106,111,
+    105,110,41,2,114,30,0,0,0,114,56,0,0,0,114,10,
+    0,0,0,114,10,0,0,0,114,11,0,0,0,114,49,0,
+    0,0,107,1,0,0,115,20,0,0,0,0,1,10,1,10,
+    255,4,2,10,1,18,1,10,1,8,1,4,255,6,2,122,
+    19,77,111,100,117,108,101,83,112,101,99,46,95,95,114,101,
+    112,114,95,95,99,2,0,0,0,0,0,0,0,0,0,0,
+    0,3,0,0,0,8,0,0,0,67,0,0,0,115,106,0,
+    0,0,124,0,106,0,125,2,122,72,124,0,106,1,124,1,
+    106,1,107,2,111,76,124,0,106,2,124,1,106,2,107,2,
+    111,76,124,0,106,3,124,1,106,3,107,2,111,76,124,2,
+    124,1,106,0,107,2,111,76,124,0,106,4,124,1,106,4,
+    107,2,111,76,124,0,106,5,124,1,106,5,107,2,87,0,
+    83,0,4,0,116,6,121,100,1,0,1,0,1,0,116,7,
+    6,0,89,0,83,0,48,0,100,0,83,0,114,13,0,0,
+    0,41,8,114,117,0,0,0,114,17,0,0,0,114,110,0,
+    0,0,114,114,0,0,0,218,6,99,97,99,104,101,100,218,
+    12,104,97,115,95,108,111,99,97,116,105,111,110,114,107,0,
+    0,0,218,14,78,111,116,73,109,112,108,101,109,101,110,116,
+    101,100,41,3,114,30,0,0,0,90,5,111,116,104,101,114,
+    90,4,115,109,115,108,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,218,6,95,95,101,113,95,95,117,1,0,
+    0,115,30,0,0,0,0,1,6,1,2,1,12,1,10,255,
+    2,2,10,254,2,3,8,253,2,4,10,252,2,5,10,251,
+    4,6,12,1,122,17,77,111,100,117,108,101,83,112,101,99,
+    46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,
+    0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
+    115,58,0,0,0,124,0,106,0,100,0,117,0,114,52,124,
+    0,106,1,100,0,117,1,114,52,124,0,106,2,114,52,116,
+    3,100,0,117,0,114,38,116,4,130,1,116,3,160,5,124,
+    0,106,1,161,1,124,0,95,0,124,0,106,0,83,0,114,
+    13,0,0,0,41,6,114,119,0,0,0,114,114,0,0,0,
+    114,118,0,0,0,218,19,95,98,111,111,116,115,116,114,97,
+    112,95,101,120,116,101,114,110,97,108,218,19,78,111,116,73,
+    109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,90,
+    11,95,103,101,116,95,99,97,99,104,101,100,114,48,0,0,
+    0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+    114,123,0,0,0,129,1,0,0,115,12,0,0,0,0,2,
+    10,1,16,1,8,1,4,1,14,1,122,17,77,111,100,117,
+    108,101,83,112,101,99,46,99,97,99,104,101,100,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,
+    0,0,67,0,0,0,115,10,0,0,0,124,1,124,0,95,
+    0,100,0,83,0,114,13,0,0,0,41,1,114,119,0,0,
+    0,41,2,114,30,0,0,0,114,123,0,0,0,114,10,0,
+    0,0,114,10,0,0,0,114,11,0,0,0,114,123,0,0,
+    0,138,1,0,0,115,2,0,0,0,0,2,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
+    0,67,0,0,0,115,36,0,0,0,124,0,106,0,100,1,
+    117,0,114,26,124,0,106,1,160,2,100,2,161,1,100,3,
+    25,0,83,0,124,0,106,1,83,0,100,1,83,0,41,4,
+    122,32,84,104,101,32,110,97,109,101,32,111,102,32,116,104,
+    101,32,109,111,100,117,108,101,39,115,32,112,97,114,101,110,
+    116,46,78,218,1,46,114,22,0,0,0,41,3,114,117,0,
+    0,0,114,17,0,0,0,218,10,114,112,97,114,116,105,116,
+    105,111,110,114,48,0,0,0,114,10,0,0,0,114,10,0,
+    0,0,114,11,0,0,0,218,6,112,97,114,101,110,116,142,
+    1,0,0,115,6,0,0,0,0,3,10,1,16,2,122,17,
+    77,111,100,117,108,101,83,112,101,99,46,112,97,114,101,110,
+    116,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,
+    0,0,1,0,0,0,67,0,0,0,115,6,0,0,0,124,
+    0,106,0,83,0,114,13,0,0,0,41,1,114,118,0,0,
+    0,114,48,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,124,0,0,0,150,1,0,0,115,2,
+    0,0,0,0,2,122,23,77,111,100,117,108,101,83,112,101,
+    99,46,104,97,115,95,108,111,99,97,116,105,111,110,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,
+    0,0,0,67,0,0,0,115,14,0,0,0,116,0,124,1,
+    131,1,124,0,95,1,100,0,83,0,114,13,0,0,0,41,
+    2,218,4,98,111,111,108,114,118,0,0,0,41,2,114,30,
+    0,0,0,218,5,118,97,108,117,101,114,10,0,0,0,114,
+    10,0,0,0,114,11,0,0,0,114,124,0,0,0,154,1,
+    0,0,115,2,0,0,0,0,2,41,12,114,1,0,0,0,
+    114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,114,
+    31,0,0,0,114,49,0,0,0,114,126,0,0,0,218,8,
+    112,114,111,112,101,114,116,121,114,123,0,0,0,218,6,115,
+    101,116,116,101,114,114,131,0,0,0,114,124,0,0,0,114,
+    10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+    0,0,0,114,113,0,0,0,58,1,0,0,115,32,0,0,
+    0,8,1,4,36,4,1,2,255,12,12,8,10,8,12,2,
+    1,10,8,4,1,10,3,2,1,10,7,2,1,10,3,4,
+    1,114,113,0,0,0,169,2,114,114,0,0,0,114,116,0,
+    0,0,99,2,0,0,0,0,0,0,0,2,0,0,0,6,
+    0,0,0,8,0,0,0,67,0,0,0,115,152,0,0,0,
+    116,0,124,1,100,1,131,2,114,74,116,1,100,2,117,0,
+    114,22,116,2,130,1,116,1,106,3,125,4,124,3,100,2,
+    117,0,114,48,124,4,124,0,124,1,100,3,141,2,83,0,
+    124,3,114,56,103,0,110,2,100,2,125,5,124,4,124,0,
+    124,1,124,5,100,4,141,3,83,0,124,3,100,2,117,0,
+    114,136,116,0,124,1,100,5,131,2,114,132,122,14,124,1,
+    160,4,124,0,161,1,125,3,87,0,113,136,4,0,116,5,
+    121,128,1,0,1,0,1,0,100,2,125,3,89,0,113,136,
+    48,0,110,4,100,6,125,3,116,6,124,0,124,1,124,2,
+    124,3,100,7,141,4,83,0,41,8,122,53,82,101,116,117,
+    114,110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,
+    32,98,97,115,101,100,32,111,110,32,118,97,114,105,111,117,
+    115,32,108,111,97,100,101,114,32,109,101,116,104,111,100,115,
+    46,90,12,103,101,116,95,102,105,108,101,110,97,109,101,78,
+    41,1,114,110,0,0,0,41,2,114,110,0,0,0,114,117,
+    0,0,0,114,116,0,0,0,70,114,136,0,0,0,41,7,
+    114,4,0,0,0,114,127,0,0,0,114,128,0,0,0,218,
+    23,115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,
+    108,111,99,97,116,105,111,110,114,116,0,0,0,114,80,0,
+    0,0,114,113,0,0,0,41,6,114,17,0,0,0,114,110,
+    0,0,0,114,114,0,0,0,114,116,0,0,0,114,137,0,
+    0,0,90,6,115,101,97,114,99,104,114,10,0,0,0,114,
+    10,0,0,0,114,11,0,0,0,114,92,0,0,0,159,1,
+    0,0,115,36,0,0,0,0,2,10,1,8,1,4,1,6,
+    2,8,1,12,1,12,1,6,1,2,255,6,3,8,1,10,
+    1,2,1,14,1,12,1,12,3,4,2,114,92,0,0,0,
+    99,3,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
+    0,8,0,0,0,67,0,0,0,115,42,1,0,0,122,10,
+    124,0,106,0,125,3,87,0,110,18,4,0,116,1,121,28,
+    1,0,1,0,1,0,89,0,110,14,48,0,124,3,100,0,
+    117,1,114,42,124,3,83,0,124,0,106,2,125,4,124,1,
+    100,0,117,0,114,86,122,10,124,0,106,3,125,1,87,0,
+    110,18,4,0,116,1,121,84,1,0,1,0,1,0,89,0,
+    110,2,48,0,122,10,124,0,106,4,125,5,87,0,110,22,
+    4,0,116,1,121,118,1,0,1,0,1,0,100,0,125,5,
+    89,0,110,2,48,0,124,2,100,0,117,0,114,176,124,5,
+    100,0,117,0,114,172,122,10,124,1,106,5,125,2,87,0,
+    113,176,4,0,116,1,121,168,1,0,1,0,1,0,100,0,
+    125,2,89,0,113,176,48,0,110,4,124,5,125,2,122,10,
+    124,0,106,6,125,6,87,0,110,22,4,0,116,1,121,208,
+    1,0,1,0,1,0,100,0,125,6,89,0,110,2,48,0,
+    122,14,116,7,124,0,106,8,131,1,125,7,87,0,110,22,
+    4,0,116,1,121,246,1,0,1,0,1,0,100,0,125,7,
+    89,0,110,2,48,0,116,9,124,4,124,1,124,2,100,1,
+    141,3,125,3,124,5,100,0,117,0,144,1,114,20,100,2,
+    110,2,100,3,124,3,95,10,124,6,124,3,95,11,124,7,
+    124,3,95,12,124,3,83,0,41,4,78,169,1,114,114,0,
+    0,0,70,84,41,13,114,106,0,0,0,114,107,0,0,0,
+    114,1,0,0,0,114,99,0,0,0,114,109,0,0,0,218,
+    7,95,79,82,73,71,73,78,218,10,95,95,99,97,99,104,
+    101,100,95,95,218,4,108,105,115,116,218,8,95,95,112,97,
+    116,104,95,95,114,113,0,0,0,114,118,0,0,0,114,123,
+    0,0,0,114,117,0,0,0,41,8,114,97,0,0,0,114,
+    110,0,0,0,114,114,0,0,0,114,96,0,0,0,114,17,
+    0,0,0,90,8,108,111,99,97,116,105,111,110,114,123,0,
+    0,0,114,117,0,0,0,114,10,0,0,0,114,10,0,0,
+    0,114,11,0,0,0,218,17,95,115,112,101,99,95,102,114,
+    111,109,95,109,111,100,117,108,101,185,1,0,0,115,72,0,
+    0,0,0,2,2,1,10,1,12,1,6,2,8,1,4,2,
+    6,1,8,1,2,1,10,1,12,2,6,1,2,1,10,1,
+    12,1,10,1,8,1,8,1,2,1,10,1,12,1,12,2,
+    4,1,2,1,10,1,12,1,10,1,2,1,14,1,12,1,
+    10,2,14,1,20,1,6,1,6,1,114,143,0,0,0,70,
+    169,1,218,8,111,118,101,114,114,105,100,101,99,2,0,0,
+    0,0,0,0,0,1,0,0,0,5,0,0,0,8,0,0,
+    0,67,0,0,0,115,210,1,0,0,124,2,115,20,116,0,
+    124,1,100,1,100,0,131,3,100,0,117,0,114,52,122,12,
+    124,0,106,1,124,1,95,2,87,0,110,18,4,0,116,3,
+    121,50,1,0,1,0,1,0,89,0,110,2,48,0,124,2,
+    115,72,116,0,124,1,100,2,100,0,131,3,100,0,117,0,
+    114,174,124,0,106,4,125,3,124,3,100,0,117,0,114,144,
+    124,0,106,5,100,0,117,1,114,144,116,6,100,0,117,0,
+    114,108,116,7,130,1,116,6,106,8,125,4,124,4,160,9,
+    124,4,161,1,125,3,124,0,106,5,124,3,95,10,124,3,
+    124,0,95,4,100,0,124,1,95,11,122,10,124,3,124,1,
+    95,12,87,0,110,18,4,0,116,3,121,172,1,0,1,0,
+    1,0,89,0,110,2,48,0,124,2,115,194,116,0,124,1,
+    100,3,100,0,131,3,100,0,117,0,114,226,122,12,124,0,
+    106,13,124,1,95,14,87,0,110,18,4,0,116,3,121,224,
+    1,0,1,0,1,0,89,0,110,2,48,0,122,10,124,0,
+    124,1,95,15,87,0,110,18,4,0,116,3,121,254,1,0,
+    1,0,1,0,89,0,110,2,48,0,124,2,144,1,115,24,
+    116,0,124,1,100,4,100,0,131,3,100,0,117,0,144,1,
+    114,70,124,0,106,5,100,0,117,1,144,1,114,70,122,12,
+    124,0,106,5,124,1,95,16,87,0,110,20,4,0,116,3,
+    144,1,121,68,1,0,1,0,1,0,89,0,110,2,48,0,
+    124,0,106,17,144,1,114,206,124,2,144,1,115,102,116,0,
+    124,1,100,5,100,0,131,3,100,0,117,0,144,1,114,136,
+    122,12,124,0,106,18,124,1,95,11,87,0,110,20,4,0,
+    116,3,144,1,121,134,1,0,1,0,1,0,89,0,110,2,
+    48,0,124,2,144,1,115,160,116,0,124,1,100,6,100,0,
+    131,3,100,0,117,0,144,1,114,206,124,0,106,19,100,0,
+    117,1,144,1,114,206,122,12,124,0,106,19,124,1,95,20,
+    87,0,110,20,4,0,116,3,144,1,121,204,1,0,1,0,
+    1,0,89,0,110,2,48,0,124,1,83,0,41,7,78,114,
+    1,0,0,0,114,99,0,0,0,218,11,95,95,112,97,99,
+    107,97,103,101,95,95,114,142,0,0,0,114,109,0,0,0,
+    114,140,0,0,0,41,21,114,6,0,0,0,114,17,0,0,
+    0,114,1,0,0,0,114,107,0,0,0,114,110,0,0,0,
+    114,117,0,0,0,114,127,0,0,0,114,128,0,0,0,218,
+    16,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
+    114,218,7,95,95,110,101,119,95,95,90,5,95,112,97,116,
+    104,114,109,0,0,0,114,99,0,0,0,114,131,0,0,0,
+    114,146,0,0,0,114,106,0,0,0,114,142,0,0,0,114,
+    124,0,0,0,114,114,0,0,0,114,123,0,0,0,114,140,
+    0,0,0,41,5,114,96,0,0,0,114,97,0,0,0,114,
+    145,0,0,0,114,110,0,0,0,114,147,0,0,0,114,10,
+    0,0,0,114,10,0,0,0,114,11,0,0,0,218,18,95,
+    105,110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,
+    115,230,1,0,0,115,96,0,0,0,0,4,20,1,2,1,
+    12,1,12,1,6,2,20,1,6,1,8,2,10,1,8,1,
+    4,1,6,2,10,1,8,1,6,11,6,1,2,1,10,1,
+    12,1,6,2,20,1,2,1,12,1,12,1,6,2,2,1,
+    10,1,12,1,6,2,24,1,12,1,2,1,12,1,14,1,
+    6,2,8,1,24,1,2,1,12,1,14,1,6,2,24,1,
+    12,1,2,1,12,1,14,1,6,1,114,149,0,0,0,99,
+    1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+    3,0,0,0,67,0,0,0,115,82,0,0,0,100,1,125,
+    1,116,0,124,0,106,1,100,2,131,2,114,30,124,0,106,
+    1,160,2,124,0,161,1,125,1,110,20,116,0,124,0,106,
+    1,100,3,131,2,114,50,116,3,100,4,131,1,130,1,124,
+    1,100,1,117,0,114,68,116,4,124,0,106,5,131,1,125,
+    1,116,6,124,0,124,1,131,2,1,0,124,1,83,0,41,
+    5,122,43,67,114,101,97,116,101,32,97,32,109,111,100,117,
+    108,101,32,98,97,115,101,100,32,111,110,32,116,104,101,32,
+    112,114,111,118,105,100,101,100,32,115,112,101,99,46,78,218,
+    13,99,114,101,97,116,101,95,109,111,100,117,108,101,218,11,
+    101,120,101,99,95,109,111,100,117,108,101,122,66,108,111,97,
+    100,101,114,115,32,116,104,97,116,32,100,101,102,105,110,101,
+    32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,109,
+    117,115,116,32,97,108,115,111,32,100,101,102,105,110,101,32,
+    99,114,101,97,116,101,95,109,111,100,117,108,101,40,41,41,
+    7,114,4,0,0,0,114,110,0,0,0,114,150,0,0,0,
+    114,80,0,0,0,114,18,0,0,0,114,17,0,0,0,114,
+    149,0,0,0,169,2,114,96,0,0,0,114,97,0,0,0,
+    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
+    16,109,111,100,117,108,101,95,102,114,111,109,95,115,112,101,
+    99,46,2,0,0,115,18,0,0,0,0,3,4,1,12,3,
+    14,1,12,1,8,2,8,1,10,1,10,1,114,153,0,0,
+    0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,
+    0,0,4,0,0,0,67,0,0,0,115,106,0,0,0,124,
+    0,106,0,100,1,117,0,114,14,100,2,110,4,124,0,106,
+    0,125,1,124,0,106,1,100,1,117,0,114,66,124,0,106,
+    2,100,1,117,0,114,50,100,3,160,3,124,1,161,1,83,
+    0,100,4,160,3,124,1,124,0,106,2,161,2,83,0,110,
+    36,124,0,106,4,114,86,100,5,160,3,124,1,124,0,106,
+    1,161,2,83,0,100,6,160,3,124,0,106,0,124,0,106,
+    1,161,2,83,0,100,1,83,0,41,7,122,38,82,101,116,
+    117,114,110,32,116,104,101,32,114,101,112,114,32,116,111,32,
+    117,115,101,32,102,111,114,32,116,104,101,32,109,111,100,117,
+    108,101,46,78,114,101,0,0,0,114,102,0,0,0,114,103,
+    0,0,0,114,104,0,0,0,250,18,60,109,111,100,117,108,
+    101,32,123,33,114,125,32,40,123,125,41,62,41,5,114,17,
+    0,0,0,114,114,0,0,0,114,110,0,0,0,114,46,0,
+    0,0,114,124,0,0,0,41,2,114,96,0,0,0,114,17,
+    0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
+    0,0,114,108,0,0,0,63,2,0,0,115,16,0,0,0,
+    0,3,20,1,10,1,10,1,10,2,16,2,6,1,14,2,
+    114,108,0,0,0,99,2,0,0,0,0,0,0,0,0,0,
+    0,0,4,0,0,0,10,0,0,0,67,0,0,0,115,250,
+    0,0,0,124,0,106,0,125,2,116,1,124,2,131,1,143,
+    216,1,0,116,2,106,3,160,4,124,2,161,1,124,1,117,
+    1,114,54,100,1,160,5,124,2,161,1,125,3,116,6,124,
+    3,124,2,100,2,141,2,130,1,122,132,124,0,106,7,100,
+    3,117,0,114,106,124,0,106,8,100,3,117,0,114,90,116,
+    6,100,4,124,0,106,0,100,2,141,2,130,1,116,9,124,
+    0,124,1,100,5,100,6,141,3,1,0,110,52,116,9,124,
+    0,124,1,100,5,100,6,141,3,1,0,116,10,124,0,106,
+    7,100,7,131,2,115,146,124,0,106,7,160,11,124,2,161,
+    1,1,0,110,12,124,0,106,7,160,12,124,1,161,1,1,
+    0,87,0,116,2,106,3,160,13,124,0,106,0,161,1,125,
+    1,124,1,116,2,106,3,124,0,106,0,60,0,110,28,116,
+    2,106,3,160,13,124,0,106,0,161,1,125,1,124,1,116,
+    2,106,3,124,0,106,0,60,0,48,0,87,0,100,3,4,
+    0,4,0,131,3,1,0,110,16,49,0,115,236,48,0,1,
+    0,1,0,1,0,89,0,1,0,124,1,83,0,41,8,122,
+    70,69,120,101,99,117,116,101,32,116,104,101,32,115,112,101,
+    99,39,115,32,115,112,101,99,105,102,105,101,100,32,109,111,
+    100,117,108,101,32,105,110,32,97,110,32,101,120,105,115,116,
+    105,110,103,32,109,111,100,117,108,101,39,115,32,110,97,109,
+    101,115,112,97,99,101,46,122,30,109,111,100,117,108,101,32,
+    123,33,114,125,32,110,111,116,32,105,110,32,115,121,115,46,
+    109,111,100,117,108,101,115,114,16,0,0,0,78,250,14,109,
+    105,115,115,105,110,103,32,108,111,97,100,101,114,84,114,144,
+    0,0,0,114,151,0,0,0,41,14,114,17,0,0,0,114,
+    51,0,0,0,114,15,0,0,0,114,93,0,0,0,114,35,
+    0,0,0,114,46,0,0,0,114,80,0,0,0,114,110,0,
+    0,0,114,117,0,0,0,114,149,0,0,0,114,4,0,0,
+    0,218,11,108,111,97,100,95,109,111,100,117,108,101,114,151,
+    0,0,0,218,3,112,111,112,41,4,114,96,0,0,0,114,
+    97,0,0,0,114,17,0,0,0,218,3,109,115,103,114,10,
+    0,0,0,114,10,0,0,0,114,11,0,0,0,114,94,0,
+    0,0,80,2,0,0,115,38,0,0,0,0,2,6,1,10,
+    1,16,1,10,1,12,1,2,1,10,1,10,1,14,2,16,
+    2,14,1,12,4,14,2,14,4,14,1,14,255,14,1,44,
+    1,114,94,0,0,0,99,1,0,0,0,0,0,0,0,0,
+    0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
+    20,1,0,0,122,18,124,0,106,0,160,1,124,0,106,2,
+    161,1,1,0,87,0,110,52,1,0,1,0,1,0,124,0,
+    106,2,116,3,106,4,118,0,114,64,116,3,106,4,160,5,
+    124,0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,
+    106,2,60,0,130,0,89,0,110,2,48,0,116,3,106,4,
+    160,5,124,0,106,2,161,1,125,1,124,1,116,3,106,4,
+    124,0,106,2,60,0,116,6,124,1,100,1,100,0,131,3,
+    100,0,117,0,114,146,122,12,124,0,106,0,124,1,95,7,
+    87,0,110,18,4,0,116,8,121,144,1,0,1,0,1,0,
+    89,0,110,2,48,0,116,6,124,1,100,2,100,0,131,3,
+    100,0,117,0,114,222,122,40,124,1,106,9,124,1,95,10,
+    116,11,124,1,100,3,131,2,115,200,124,0,106,2,160,12,
+    100,4,161,1,100,5,25,0,124,1,95,10,87,0,110,18,
+    4,0,116,8,121,220,1,0,1,0,1,0,89,0,110,2,
+    48,0,116,6,124,1,100,6,100,0,131,3,100,0,117,0,
+    144,1,114,16,122,10,124,0,124,1,95,13,87,0,110,20,
+    4,0,116,8,144,1,121,14,1,0,1,0,1,0,89,0,
+    110,2,48,0,124,1,83,0,41,7,78,114,99,0,0,0,
+    114,146,0,0,0,114,142,0,0,0,114,129,0,0,0,114,
+    22,0,0,0,114,106,0,0,0,41,14,114,110,0,0,0,
     114,156,0,0,0,114,17,0,0,0,114,15,0,0,0,114,
-    92,0,0,0,114,155,0,0,0,114,6,0,0,0,114,98,
-    0,0,0,114,106,0,0,0,114,1,0,0,0,114,145,0,
-    0,0,114,4,0,0,0,114,129,0,0,0,114,105,0,0,
-    0,114,151,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    93,0,0,0,114,157,0,0,0,114,6,0,0,0,114,99,
+    0,0,0,114,107,0,0,0,114,1,0,0,0,114,146,0,
+    0,0,114,4,0,0,0,114,130,0,0,0,114,106,0,0,
+    0,114,152,0,0,0,114,10,0,0,0,114,10,0,0,0,
     114,11,0,0,0,218,25,95,108,111,97,100,95,98,97,99,
     107,119,97,114,100,95,99,111,109,112,97,116,105,98,108,101,
-    101,2,0,0,115,54,0,0,0,0,4,2,1,18,1,6,
+    110,2,0,0,115,54,0,0,0,0,4,2,1,18,1,6,
     1,12,1,14,1,12,1,8,3,14,1,12,1,16,1,2,
-    1,12,1,14,1,6,1,16,1,2,4,8,1,10,1,22,
-    1,14,1,6,1,18,1,2,1,10,1,16,1,6,1,114,
-    158,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
-    0,2,0,0,0,11,0,0,0,67,0,0,0,115,220,0,
-    0,0,124,0,106,0,100,0,107,9,114,30,116,1,124,0,
+    1,12,1,12,1,6,1,16,1,2,4,8,1,10,1,22,
+    1,12,1,6,1,18,1,2,1,10,1,14,1,6,1,114,
+    159,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+    0,2,0,0,0,11,0,0,0,67,0,0,0,115,224,0,
+    0,0,124,0,106,0,100,0,117,1,114,30,116,1,124,0,
     106,0,100,1,131,2,115,30,116,2,124,0,131,1,83,0,
-    116,3,124,0,131,1,125,1,100,2,124,0,95,4,122,162,
+    116,3,124,0,131,1,125,1,100,2,124,0,95,4,122,166,
     124,1,116,5,106,6,124,0,106,7,60,0,122,52,124,0,
-    106,0,100,0,107,8,114,96,124,0,106,8,100,0,107,8,
-    114,108,116,9,100,4,124,0,106,7,100,5,141,2,130,1,
+    106,0,100,0,117,0,114,96,124,0,106,8,100,0,117,0,
+    114,108,116,9,100,3,124,0,106,7,100,4,141,2,130,1,
     110,12,124,0,106,0,160,10,124,1,161,1,1,0,87,0,
-    110,50,1,0,1,0,1,0,122,14,116,5,106,6,124,0,
-    106,7,61,0,87,0,110,20,4,0,116,11,107,10,114,152,
-    1,0,1,0,1,0,89,0,110,2,88,0,130,0,89,0,
-    110,2,88,0,116,5,106,6,160,12,124,0,106,7,161,1,
-    125,1,124,1,116,5,106,6,124,0,106,7,60,0,116,13,
-    100,6,124,0,106,7,124,0,106,0,131,3,1,0,87,0,
-    53,0,100,3,124,0,95,4,88,0,124,1,83,0,41,7,
-    78,114,150,0,0,0,84,70,114,154,0,0,0,114,16,0,
-    0,0,122,18,105,109,112,111,114,116,32,123,33,114,125,32,
-    35,32,123,33,114,125,41,14,114,109,0,0,0,114,4,0,
-    0,0,114,158,0,0,0,114,152,0,0,0,90,13,95,105,
-    110,105,116,105,97,108,105,122,105,110,103,114,15,0,0,0,
-    114,92,0,0,0,114,17,0,0,0,114,117,0,0,0,114,
-    79,0,0,0,114,150,0,0,0,114,63,0,0,0,114,155,
-    0,0,0,114,76,0,0,0,114,151,0,0,0,114,10,0,
-    0,0,114,10,0,0,0,114,11,0,0,0,218,14,95,108,
-    111,97,100,95,117,110,108,111,99,107,101,100,138,2,0,0,
-    115,46,0,0,0,0,2,10,2,12,1,8,2,8,5,6,
-    1,2,1,12,1,2,1,10,1,10,1,16,3,16,1,6,
-    1,2,1,14,1,14,1,6,1,8,5,14,1,12,1,20,
-    2,8,2,114,159,0,0,0,99,1,0,0,0,0,0,0,
-    0,0,0,0,0,1,0,0,0,10,0,0,0,67,0,0,
-    0,115,42,0,0,0,116,0,124,0,106,1,131,1,143,22,
-    1,0,116,2,124,0,131,1,87,0,2,0,53,0,81,0,
-    82,0,163,0,83,0,81,0,82,0,88,0,100,1,83,0,
+    110,48,1,0,1,0,1,0,122,14,116,5,106,6,124,0,
+    106,7,61,0,87,0,110,18,4,0,116,11,121,150,1,0,
+    1,0,1,0,89,0,110,2,48,0,130,0,89,0,110,2,
+    48,0,116,5,106,6,160,12,124,0,106,7,161,1,125,1,
+    124,1,116,5,106,6,124,0,106,7,60,0,116,13,100,5,
+    124,0,106,7,124,0,106,0,131,3,1,0,87,0,100,6,
+    124,0,95,4,110,8,100,6,124,0,95,4,48,0,124,1,
+    83,0,41,7,78,114,151,0,0,0,84,114,155,0,0,0,
+    114,16,0,0,0,122,18,105,109,112,111,114,116,32,123,33,
+    114,125,32,35,32,123,33,114,125,70,41,14,114,110,0,0,
+    0,114,4,0,0,0,114,159,0,0,0,114,153,0,0,0,
+    90,13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,
+    15,0,0,0,114,93,0,0,0,114,17,0,0,0,114,117,
+    0,0,0,114,80,0,0,0,114,151,0,0,0,114,64,0,
+    0,0,114,157,0,0,0,114,77,0,0,0,114,152,0,0,
+    0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+    218,14,95,108,111,97,100,95,117,110,108,111,99,107,101,100,
+    147,2,0,0,115,46,0,0,0,0,2,10,2,12,1,8,
+    2,8,5,6,1,2,1,12,1,2,1,10,1,10,1,16,
+    3,16,1,6,1,2,1,14,1,12,1,6,1,8,5,14,
+    1,12,1,18,2,16,2,114,160,0,0,0,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,
+    0,67,0,0,0,115,54,0,0,0,116,0,124,0,106,1,
+    131,1,143,24,1,0,116,2,124,0,131,1,87,0,2,0,
+    100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,40,
+    48,0,1,0,1,0,1,0,89,0,1,0,100,1,83,0,
     41,2,122,191,82,101,116,117,114,110,32,97,32,110,101,119,
     32,109,111,100,117,108,101,32,111,98,106,101,99,116,44,32,
     108,111,97,100,101,100,32,98,121,32,116,104,101,32,115,112,
@@ -1018,772 +1027,786 @@
     108,101,115,44,32,116,104,97,116,32,101,120,105,115,116,105,
     110,103,32,109,111,100,117,108,101,32,103,101,116,115,10,32,
     32,32,32,99,108,111,98,98,101,114,101,100,46,10,10,32,
-    32,32,32,78,41,3,114,50,0,0,0,114,17,0,0,0,
-    114,159,0,0,0,41,1,114,95,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,114,94,0,0,0,
-    180,2,0,0,115,4,0,0,0,0,9,12,1,114,94,0,
+    32,32,32,78,41,3,114,51,0,0,0,114,17,0,0,0,
+    114,160,0,0,0,41,1,114,96,0,0,0,114,10,0,0,
+    0,114,10,0,0,0,114,11,0,0,0,114,95,0,0,0,
+    189,2,0,0,115,4,0,0,0,0,9,12,1,114,95,0,
     0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,4,0,0,0,64,0,0,0,115,136,0,0,0,
-    101,0,90,1,100,0,90,2,100,1,90,3,101,4,100,2,
-    100,3,132,0,131,1,90,5,101,6,100,19,100,5,100,6,
-    132,1,131,1,90,7,101,6,100,20,100,7,100,8,132,1,
-    131,1,90,8,101,6,100,9,100,10,132,0,131,1,90,9,
-    101,6,100,11,100,12,132,0,131,1,90,10,101,6,101,11,
-    100,13,100,14,132,0,131,1,131,1,90,12,101,6,101,11,
-    100,15,100,16,132,0,131,1,131,1,90,13,101,6,101,11,
-    100,17,100,18,132,0,131,1,131,1,90,14,101,6,101,15,
-    131,1,90,16,100,4,83,0,41,21,218,15,66,117,105,108,
-    116,105,110,73,109,112,111,114,116,101,114,122,144,77,101,116,
-    97,32,112,97,116,104,32,105,109,112,111,114,116,32,102,111,
-    114,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,
+    0,0,0,4,0,0,0,64,0,0,0,115,140,0,0,0,
+    101,0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,
+    101,5,100,3,100,4,132,0,131,1,90,6,101,7,100,20,
+    100,6,100,7,132,1,131,1,90,8,101,7,100,21,100,8,
+    100,9,132,1,131,1,90,9,101,7,100,10,100,11,132,0,
+    131,1,90,10,101,7,100,12,100,13,132,0,131,1,90,11,
+    101,7,101,12,100,14,100,15,132,0,131,1,131,1,90,13,
+    101,7,101,12,100,16,100,17,132,0,131,1,131,1,90,14,
+    101,7,101,12,100,18,100,19,132,0,131,1,131,1,90,15,
+    101,7,101,16,131,1,90,17,100,5,83,0,41,22,218,15,
+    66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,122,
+    144,77,101,116,97,32,112,97,116,104,32,105,109,112,111,114,
+    116,32,102,111,114,32,98,117,105,108,116,45,105,110,32,109,
+    111,100,117,108,101,115,46,10,10,32,32,32,32,65,108,108,
+    32,109,101,116,104,111,100,115,32,97,114,101,32,101,105,116,
+    104,101,114,32,99,108,97,115,115,32,111,114,32,115,116,97,
+    116,105,99,32,109,101,116,104,111,100,115,32,116,111,32,97,
+    118,111,105,100,32,116,104,101,32,110,101,101,100,32,116,111,
+    10,32,32,32,32,105,110,115,116,97,110,116,105,97,116,101,
+    32,116,104,101,32,99,108,97,115,115,46,10,10,32,32,32,
+    32,122,8,98,117,105,108,116,45,105,110,99,1,0,0,0,
+    0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,
+    67,0,0,0,115,22,0,0,0,100,1,124,0,106,0,155,
+    2,100,2,116,1,106,2,155,0,100,3,157,5,83,0,41,
+    4,250,115,82,101,116,117,114,110,32,114,101,112,114,32,102,
+    111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,
+    32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,
+    111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,
+    46,32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,
+    99,104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,
+    32,106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,
+    32,32,32,32,32,32,122,8,60,109,111,100,117,108,101,32,
+    122,2,32,40,122,2,41,62,41,3,114,1,0,0,0,114,
+    161,0,0,0,114,139,0,0,0,41,1,114,97,0,0,0,
+    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+    100,0,0,0,215,2,0,0,115,2,0,0,0,0,7,122,
+    27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,
+    46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,0,
+    0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,
+    0,0,67,0,0,0,115,46,0,0,0,124,2,100,0,117,
+    1,114,12,100,0,83,0,116,0,160,1,124,1,161,1,114,
+    38,116,2,124,1,124,0,124,0,106,3,100,1,141,3,83,
+    0,100,0,83,0,100,0,83,0,169,2,78,114,138,0,0,
+    0,41,4,114,58,0,0,0,90,10,105,115,95,98,117,105,
+    108,116,105,110,114,92,0,0,0,114,139,0,0,0,169,4,
+    218,3,99,108,115,114,82,0,0,0,218,4,112,97,116,104,
+    218,6,116,97,114,103,101,116,114,10,0,0,0,114,10,0,
+    0,0,114,11,0,0,0,218,9,102,105,110,100,95,115,112,
+    101,99,224,2,0,0,115,10,0,0,0,0,2,8,1,4,
+    1,10,1,16,2,122,25,66,117,105,108,116,105,110,73,109,
+    112,111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,
+    99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
+    0,4,0,0,0,67,0,0,0,115,30,0,0,0,124,0,
+    160,0,124,1,124,2,161,2,125,3,124,3,100,1,117,1,
+    114,26,124,3,106,1,83,0,100,1,83,0,41,2,122,175,
+    70,105,110,100,32,116,104,101,32,98,117,105,108,116,45,105,
+    110,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,
+    32,32,32,73,102,32,39,112,97,116,104,39,32,105,115,32,
+    101,118,101,114,32,115,112,101,99,105,102,105,101,100,32,116,
+    104,101,110,32,116,104,101,32,115,101,97,114,99,104,32,105,
+    115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,102,
+    97,105,108,117,114,101,46,10,10,32,32,32,32,32,32,32,
+    32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,
+    100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,
+    32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,
+    116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,
+    41,2,114,168,0,0,0,114,110,0,0,0,41,4,114,165,
+    0,0,0,114,82,0,0,0,114,166,0,0,0,114,96,0,
+    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,218,11,102,105,110,100,95,109,111,100,117,108,101,233,2,
+    0,0,115,4,0,0,0,0,9,12,1,122,27,66,117,105,
+    108,116,105,110,73,109,112,111,114,116,101,114,46,102,105,110,
+    100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,
+    0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0,
+    0,115,46,0,0,0,124,1,106,0,116,1,106,2,118,1,
+    114,34,116,3,100,1,160,4,124,1,106,0,161,1,124,1,
+    106,0,100,2,141,2,130,1,116,5,116,6,106,7,124,1,
+    131,2,83,0,41,3,122,24,67,114,101,97,116,101,32,97,
+    32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,
+    114,78,0,0,0,114,16,0,0,0,41,8,114,17,0,0,
+    0,114,15,0,0,0,114,79,0,0,0,114,80,0,0,0,
+    114,46,0,0,0,114,68,0,0,0,114,58,0,0,0,90,
+    14,99,114,101,97,116,101,95,98,117,105,108,116,105,110,41,
+    2,114,30,0,0,0,114,96,0,0,0,114,10,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,114,150,0,0,0,245,
+    2,0,0,115,10,0,0,0,0,3,12,1,12,1,4,255,
+    6,2,122,29,66,117,105,108,116,105,110,73,109,112,111,114,
+    116,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,
+    101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
+    0,0,3,0,0,0,67,0,0,0,115,16,0,0,0,116,
+    0,116,1,106,2,124,1,131,2,1,0,100,1,83,0,41,
+    2,122,22,69,120,101,99,32,97,32,98,117,105,108,116,45,
+    105,110,32,109,111,100,117,108,101,78,41,3,114,68,0,0,
+    0,114,58,0,0,0,90,12,101,120,101,99,95,98,117,105,
+    108,116,105,110,41,2,114,30,0,0,0,114,97,0,0,0,
+    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+    151,0,0,0,253,2,0,0,115,2,0,0,0,0,3,122,
+    27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,
+    46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
+    0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,
+    122,57,82,101,116,117,114,110,32,78,111,110,101,32,97,115,
+    32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,
+    115,32,100,111,32,110,111,116,32,104,97,118,101,32,99,111,
+    100,101,32,111,98,106,101,99,116,115,46,78,114,10,0,0,
+    0,169,2,114,165,0,0,0,114,82,0,0,0,114,10,0,
+    0,0,114,10,0,0,0,114,11,0,0,0,218,8,103,101,
+    116,95,99,111,100,101,2,3,0,0,115,2,0,0,0,0,
+    4,122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,
+    101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,
+    67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,
+    56,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,
+    98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,
+    32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117,
+    114,99,101,32,99,111,100,101,46,78,114,10,0,0,0,114,
+    170,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+    0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,8,
+    3,0,0,115,2,0,0,0,0,4,122,26,66,117,105,108,
+    116,105,110,73,109,112,111,114,116,101,114,46,103,101,116,95,
+    115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,
+    0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,
+    4,0,0,0,100,1,83,0,41,2,122,52,82,101,116,117,
+    114,110,32,70,97,108,115,101,32,97,115,32,98,117,105,108,
+    116,45,105,110,32,109,111,100,117,108,101,115,32,97,114,101,
+    32,110,101,118,101,114,32,112,97,99,107,97,103,101,115,46,
+    70,114,10,0,0,0,114,170,0,0,0,114,10,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,114,116,0,0,0,14,
+    3,0,0,115,2,0,0,0,0,4,122,26,66,117,105,108,
+    116,105,110,73,109,112,111,114,116,101,114,46,105,115,95,112,
+    97,99,107,97,103,101,41,2,78,78,41,1,78,41,18,114,
+    1,0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,
+    0,0,0,114,139,0,0,0,218,12,115,116,97,116,105,99,
+    109,101,116,104,111,100,114,100,0,0,0,218,11,99,108,97,
+    115,115,109,101,116,104,111,100,114,168,0,0,0,114,169,0,
+    0,0,114,150,0,0,0,114,151,0,0,0,114,87,0,0,
+    0,114,171,0,0,0,114,172,0,0,0,114,116,0,0,0,
+    114,98,0,0,0,114,156,0,0,0,114,10,0,0,0,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,161,
+    0,0,0,204,2,0,0,115,44,0,0,0,8,2,4,7,
+    4,2,2,1,10,8,2,1,12,8,2,1,12,11,2,1,
+    10,7,2,1,10,4,2,1,2,1,12,4,2,1,2,1,
+    12,4,2,1,2,1,12,4,114,161,0,0,0,99,0,0,
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
+    0,0,64,0,0,0,115,144,0,0,0,101,0,90,1,100,
+    0,90,2,100,1,90,3,100,2,90,4,101,5,100,3,100,
+    4,132,0,131,1,90,6,101,7,100,22,100,6,100,7,132,
+    1,131,1,90,8,101,7,100,23,100,8,100,9,132,1,131,
+    1,90,9,101,7,100,10,100,11,132,0,131,1,90,10,101,
+    5,100,12,100,13,132,0,131,1,90,11,101,7,100,14,100,
+    15,132,0,131,1,90,12,101,7,101,13,100,16,100,17,132,
+    0,131,1,131,1,90,14,101,7,101,13,100,18,100,19,132,
+    0,131,1,131,1,90,15,101,7,101,13,100,20,100,21,132,
+    0,131,1,131,1,90,16,100,5,83,0,41,24,218,14,70,
+    114,111,122,101,110,73,109,112,111,114,116,101,114,122,142,77,
+    101,116,97,32,112,97,116,104,32,105,109,112,111,114,116,32,
+    102,111,114,32,102,114,111,122,101,110,32,109,111,100,117,108,
     101,115,46,10,10,32,32,32,32,65,108,108,32,109,101,116,
     104,111,100,115,32,97,114,101,32,101,105,116,104,101,114,32,
     99,108,97,115,115,32,111,114,32,115,116,97,116,105,99,32,
     109,101,116,104,111,100,115,32,116,111,32,97,118,111,105,100,
     32,116,104,101,32,110,101,101,100,32,116,111,10,32,32,32,
     32,105,110,115,116,97,110,116,105,97,116,101,32,116,104,101,
-    32,99,108,97,115,115,46,10,10,32,32,32,32,99,1,0,
-    0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,
-    0,0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,
-    0,106,1,161,1,83,0,41,2,250,115,82,101,116,117,114,
-    110,32,114,101,112,114,32,102,111,114,32,116,104,101,32,109,
-    111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,
-    84,104,101,32,109,101,116,104,111,100,32,105,115,32,100,101,
-    112,114,101,99,97,116,101,100,46,32,32,84,104,101,32,105,
-    109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32,
-    100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115,
-    101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,24,
-    60,109,111,100,117,108,101,32,123,33,114,125,32,40,98,117,
-    105,108,116,45,105,110,41,62,41,2,114,45,0,0,0,114,
-    1,0,0,0,41,1,114,96,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,114,99,0,0,0,204,
-    2,0,0,115,2,0,0,0,0,7,122,27,66,117,105,108,
-    116,105,110,73,109,112,111,114,116,101,114,46,109,111,100,117,
-    108,101,95,114,101,112,114,78,99,4,0,0,0,0,0,0,
-    0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,
-    0,115,44,0,0,0,124,2,100,0,107,9,114,12,100,0,
-    83,0,116,0,160,1,124,1,161,1,114,36,116,2,124,1,
-    124,0,100,1,100,2,141,3,83,0,100,0,83,0,100,0,
-    83,0,41,3,78,122,8,98,117,105,108,116,45,105,110,114,
-    137,0,0,0,41,3,114,57,0,0,0,90,10,105,115,95,
-    98,117,105,108,116,105,110,114,91,0,0,0,169,4,218,3,
-    99,108,115,114,81,0,0,0,218,4,112,97,116,104,218,6,
-    116,97,114,103,101,116,114,10,0,0,0,114,10,0,0,0,
-    114,11,0,0,0,218,9,102,105,110,100,95,115,112,101,99,
-    213,2,0,0,115,10,0,0,0,0,2,8,1,4,1,10,
-    1,14,2,122,25,66,117,105,108,116,105,110,73,109,112,111,
-    114,116,101,114,46,102,105,110,100,95,115,112,101,99,99,3,
-    0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,
-    0,0,0,67,0,0,0,115,30,0,0,0,124,0,160,0,
-    124,1,124,2,161,2,125,3,124,3,100,1,107,9,114,26,
-    124,3,106,1,83,0,100,1,83,0,41,2,122,175,70,105,
-    110,100,32,116,104,101,32,98,117,105,108,116,45,105,110,32,
-    109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,
-    32,73,102,32,39,112,97,116,104,39,32,105,115,32,101,118,
-    101,114,32,115,112,101,99,105,102,105,101,100,32,116,104,101,
-    110,32,116,104,101,32,115,101,97,114,99,104,32,105,115,32,
-    99,111,110,115,105,100,101,114,101,100,32,97,32,102,97,105,
-    108,117,114,101,46,10,10,32,32,32,32,32,32,32,32,84,
-    104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,
-    112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,
-    105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,
-    97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2,
-    114,166,0,0,0,114,109,0,0,0,41,4,114,163,0,0,
-    0,114,81,0,0,0,114,164,0,0,0,114,95,0,0,0,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
-    11,102,105,110,100,95,109,111,100,117,108,101,222,2,0,0,
-    115,4,0,0,0,0,9,12,1,122,27,66,117,105,108,116,
-    105,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,
-    109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,
-    0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
-    46,0,0,0,124,1,106,0,116,1,106,2,107,7,114,34,
-    116,3,100,1,160,4,124,1,106,0,161,1,124,1,106,0,
-    100,2,141,2,130,1,116,5,116,6,106,7,124,1,131,2,
-    83,0,41,3,122,24,67,114,101,97,116,101,32,97,32,98,
-    117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,77,
-    0,0,0,114,16,0,0,0,41,8,114,17,0,0,0,114,
-    15,0,0,0,114,78,0,0,0,114,79,0,0,0,114,45,
-    0,0,0,114,67,0,0,0,114,57,0,0,0,90,14,99,
-    114,101,97,116,101,95,98,117,105,108,116,105,110,41,2,114,
-    30,0,0,0,114,95,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,114,149,0,0,0,234,2,0,
-    0,115,10,0,0,0,0,3,12,1,12,1,4,255,6,2,
-    122,29,66,117,105,108,116,105,110,73,109,112,111,114,116,101,
-    114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,
+    32,99,108,97,115,115,46,10,10,32,32,32,32,90,6,102,
+    114,111,122,101,110,99,1,0,0,0,0,0,0,0,0,0,
+    0,0,1,0,0,0,4,0,0,0,67,0,0,0,115,16,
+    0,0,0,100,1,160,0,124,0,106,1,116,2,106,3,161,
+    2,83,0,41,2,114,162,0,0,0,114,154,0,0,0,41,
+    4,114,46,0,0,0,114,1,0,0,0,114,175,0,0,0,
+    114,139,0,0,0,41,1,218,1,109,114,10,0,0,0,114,
+    10,0,0,0,114,11,0,0,0,114,100,0,0,0,34,3,
+    0,0,115,2,0,0,0,0,7,122,26,70,114,111,122,101,
+    110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101,
+    95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,0,
+    0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115,
+    34,0,0,0,116,0,160,1,124,1,161,1,114,26,116,2,
+    124,1,124,0,124,0,106,3,100,1,141,3,83,0,100,0,
+    83,0,100,0,83,0,114,163,0,0,0,41,4,114,58,0,
+    0,0,114,89,0,0,0,114,92,0,0,0,114,139,0,0,
+    0,114,164,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,168,0,0,0,43,3,0,0,115,6,
+    0,0,0,0,2,10,1,16,2,122,24,70,114,111,122,101,
+    110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,
+    112,101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,
+    3,0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,
+    0,116,0,160,1,124,1,161,1,114,14,124,0,83,0,100,
+    1,83,0,41,2,122,93,70,105,110,100,32,97,32,102,114,
+    111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32,
+    32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,
+    100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,
+    32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,
+    41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,
+    32,32,32,32,78,41,2,114,58,0,0,0,114,89,0,0,
+    0,41,3,114,165,0,0,0,114,82,0,0,0,114,166,0,
+    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,114,169,0,0,0,50,3,0,0,115,2,0,0,0,0,
+    7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
+    114,46,102,105,110,100,95,109,111,100,117,108,101,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,
+    0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,
+    2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115,
+    101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100,
+    117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,10,
+    0,0,0,41,2,114,165,0,0,0,114,96,0,0,0,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,
+    0,0,0,59,3,0,0,115,2,0,0,0,0,2,122,28,
+    70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,99,
+    114,101,97,116,101,95,109,111,100,117,108,101,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,
+    0,67,0,0,0,115,64,0,0,0,124,0,106,0,106,1,
+    125,1,116,2,160,3,124,1,161,1,115,36,116,4,100,1,
+    160,5,124,1,161,1,124,1,100,2,141,2,130,1,116,6,
+    116,2,106,7,124,1,131,2,125,2,116,8,124,2,124,0,
+    106,9,131,2,1,0,100,0,83,0,114,88,0,0,0,41,
+    10,114,106,0,0,0,114,17,0,0,0,114,58,0,0,0,
+    114,89,0,0,0,114,80,0,0,0,114,46,0,0,0,114,
+    68,0,0,0,218,17,103,101,116,95,102,114,111,122,101,110,
+    95,111,98,106,101,99,116,218,4,101,120,101,99,114,7,0,
+    0,0,41,3,114,97,0,0,0,114,17,0,0,0,218,4,
+    99,111,100,101,114,10,0,0,0,114,10,0,0,0,114,11,
+    0,0,0,114,151,0,0,0,63,3,0,0,115,14,0,0,
+    0,0,2,8,1,10,1,10,1,2,255,6,2,12,1,122,
+    26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,
+    101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
+    67,0,0,0,115,10,0,0,0,116,0,124,0,124,1,131,
+    2,83,0,41,1,122,95,76,111,97,100,32,97,32,102,114,
+    111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32,
+    32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,
+    100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,
+    32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,
+    101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,
+    32,32,32,32,32,32,41,1,114,98,0,0,0,114,170,0,
+    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,114,156,0,0,0,72,3,0,0,115,2,0,0,0,0,
+    7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
+    114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
+    0,0,67,0,0,0,115,10,0,0,0,116,0,160,1,124,
+    1,161,1,83,0,41,1,122,45,82,101,116,117,114,110,32,
+    116,104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,
+    102,111,114,32,116,104,101,32,102,114,111,122,101,110,32,109,
+    111,100,117,108,101,46,41,2,114,58,0,0,0,114,177,0,
+    0,0,114,170,0,0,0,114,10,0,0,0,114,10,0,0,
+    0,114,11,0,0,0,114,171,0,0,0,81,3,0,0,115,
+    2,0,0,0,0,4,122,23,70,114,111,122,101,110,73,109,
+    112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,
     2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
-    3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,116,
-    1,106,2,124,1,131,2,1,0,100,1,83,0,41,2,122,
-    22,69,120,101,99,32,97,32,98,117,105,108,116,45,105,110,
-    32,109,111,100,117,108,101,78,41,3,114,67,0,0,0,114,
-    57,0,0,0,90,12,101,120,101,99,95,98,117,105,108,116,
-    105,110,41,2,114,30,0,0,0,114,96,0,0,0,114,10,
-    0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,0,
-    0,0,242,2,0,0,115,2,0,0,0,0,3,122,27,66,
-    117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,101,
-    120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
-    0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,57,
-    82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,
-    117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,
-    100,111,32,110,111,116,32,104,97,118,101,32,99,111,100,101,
-    32,111,98,106,101,99,116,115,46,78,114,10,0,0,0,169,
-    2,114,163,0,0,0,114,81,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,218,8,103,101,116,95,
-    99,111,100,101,247,2,0,0,115,2,0,0,0,0,4,122,
-    24,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,
-    46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
-    0,0,115,4,0,0,0,100,1,83,0,41,2,122,56,82,
-    101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,117,
-    105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,100,
-    111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,99,
-    101,32,99,111,100,101,46,78,114,10,0,0,0,114,168,0,
-    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
-    0,218,10,103,101,116,95,115,111,117,114,99,101,253,2,0,
-    0,115,2,0,0,0,0,4,122,26,66,117,105,108,116,105,
-    110,73,109,112,111,114,116,101,114,46,103,101,116,95,115,111,
-    117,114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,
-    0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
-    0,0,100,1,83,0,41,2,122,52,82,101,116,117,114,110,
-    32,70,97,108,115,101,32,97,115,32,98,117,105,108,116,45,
-    105,110,32,109,111,100,117,108,101,115,32,97,114,101,32,110,
-    101,118,101,114,32,112,97,99,107,97,103,101,115,46,70,114,
-    10,0,0,0,114,168,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,114,115,0,0,0,3,3,0,
-    0,115,2,0,0,0,0,4,122,26,66,117,105,108,116,105,
-    110,73,109,112,111,114,116,101,114,46,105,115,95,112,97,99,
-    107,97,103,101,41,2,78,78,41,1,78,41,17,114,1,0,
-    0,0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,
-    0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,
-    99,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,
-    100,114,166,0,0,0,114,167,0,0,0,114,149,0,0,0,
-    114,150,0,0,0,114,86,0,0,0,114,169,0,0,0,114,
-    170,0,0,0,114,115,0,0,0,114,97,0,0,0,114,156,
-    0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,
-    0,0,114,11,0,0,0,114,160,0,0,0,195,2,0,0,
-    115,42,0,0,0,8,2,4,7,2,1,10,8,2,1,12,
-    8,2,1,12,11,2,1,10,7,2,1,10,4,2,1,2,
-    1,12,4,2,1,2,1,12,4,2,1,2,1,12,4,114,
-    160,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,4,0,0,0,64,0,0,0,115,144,0,
-    0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,
-    90,4,101,5,100,3,100,4,132,0,131,1,90,6,101,7,
-    100,22,100,6,100,7,132,1,131,1,90,8,101,7,100,23,
-    100,8,100,9,132,1,131,1,90,9,101,7,100,10,100,11,
-    132,0,131,1,90,10,101,5,100,12,100,13,132,0,131,1,
-    90,11,101,7,100,14,100,15,132,0,131,1,90,12,101,7,
-    101,13,100,16,100,17,132,0,131,1,131,1,90,14,101,7,
-    101,13,100,18,100,19,132,0,131,1,131,1,90,15,101,7,
-    101,13,100,20,100,21,132,0,131,1,131,1,90,16,100,5,
-    83,0,41,24,218,14,70,114,111,122,101,110,73,109,112,111,
-    114,116,101,114,122,142,77,101,116,97,32,112,97,116,104,32,
-    105,109,112,111,114,116,32,102,111,114,32,102,114,111,122,101,
-    110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,
-    65,108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,
-    101,105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,
-    115,116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,
-    111,32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,
-    32,116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,
-    97,116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,
-    32,32,32,32,90,6,102,114,111,122,101,110,99,1,0,0,
-    0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,
-    0,67,0,0,0,115,16,0,0,0,100,1,160,0,124,0,
-    106,1,116,2,106,3,161,2,83,0,41,2,114,161,0,0,
-    0,114,153,0,0,0,41,4,114,45,0,0,0,114,1,0,
-    0,0,114,173,0,0,0,114,138,0,0,0,41,1,218,1,
-    109,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
-    114,99,0,0,0,23,3,0,0,115,2,0,0,0,0,7,
-    122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,
-    46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,0,
-    0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,
-    0,0,67,0,0,0,115,34,0,0,0,116,0,160,1,124,
-    1,161,1,114,26,116,2,124,1,124,0,124,0,106,3,100,
-    1,141,3,83,0,100,0,83,0,100,0,83,0,41,2,78,
-    114,137,0,0,0,41,4,114,57,0,0,0,114,88,0,0,
-    0,114,91,0,0,0,114,138,0,0,0,114,162,0,0,0,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
-    166,0,0,0,32,3,0,0,115,6,0,0,0,0,2,10,
-    1,16,2,122,24,70,114,111,122,101,110,73,109,112,111,114,
-    116,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,
-    0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,
-    0,0,67,0,0,0,115,18,0,0,0,116,0,160,1,124,
-    1,161,1,114,14,124,0,83,0,100,1,83,0,41,2,122,
-    93,70,105,110,100,32,97,32,102,114,111,122,101,110,32,109,
-    111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,
-    84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,
-    101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,
-    102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,
-    101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,
-    2,114,57,0,0,0,114,88,0,0,0,41,3,114,163,0,
-    0,0,114,81,0,0,0,114,164,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,114,167,0,0,0,
-    39,3,0,0,115,2,0,0,0,0,7,122,26,70,114,111,
-    122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,100,
-    95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
-    115,4,0,0,0,100,1,83,0,41,2,122,42,85,115,101,
-    32,100,101,102,97,117,108,116,32,115,101,109,97,110,116,105,
-    99,115,32,102,111,114,32,109,111,100,117,108,101,32,99,114,
-    101,97,116,105,111,110,46,78,114,10,0,0,0,41,2,114,
-    163,0,0,0,114,95,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,114,149,0,0,0,48,3,0,
-    0,115,2,0,0,0,0,2,122,28,70,114,111,122,101,110,
-    73,109,112,111,114,116,101,114,46,99,114,101,97,116,101,95,
-    109,111,100,117,108,101,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,
-    64,0,0,0,124,0,106,0,106,1,125,1,116,2,160,3,
-    124,1,161,1,115,36,116,4,100,1,160,5,124,1,161,1,
-    124,1,100,2,141,2,130,1,116,6,116,2,106,7,124,1,
-    131,2,125,2,116,8,124,2,124,0,106,9,131,2,1,0,
-    100,0,83,0,114,87,0,0,0,41,10,114,105,0,0,0,
-    114,17,0,0,0,114,57,0,0,0,114,88,0,0,0,114,
-    79,0,0,0,114,45,0,0,0,114,67,0,0,0,218,17,
-    103,101,116,95,102,114,111,122,101,110,95,111,98,106,101,99,
-    116,218,4,101,120,101,99,114,7,0,0,0,41,3,114,96,
-    0,0,0,114,17,0,0,0,218,4,99,111,100,101,114,10,
-    0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,0,
-    0,0,52,3,0,0,115,14,0,0,0,0,2,8,1,10,
-    1,10,1,2,255,6,2,12,1,122,26,70,114,111,122,101,
-    110,73,109,112,111,114,116,101,114,46,101,120,101,99,95,109,
-    111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,
-    0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,10,
-    0,0,0,116,0,124,0,124,1,131,2,83,0,41,1,122,
-    95,76,111,97,100,32,97,32,102,114,111,122,101,110,32,109,
-    111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,
-    84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,
-    101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,
-    101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,
-    115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,
-    41,1,114,97,0,0,0,114,168,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,114,156,0,0,0,
-    61,3,0,0,115,2,0,0,0,0,7,122,26,70,114,111,
-    122,101,110,73,109,112,111,114,116,101,114,46,108,111,97,100,
-    95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
-    115,10,0,0,0,116,0,160,1,124,1,161,1,83,0,41,
-    1,122,45,82,101,116,117,114,110,32,116,104,101,32,99,111,
-    100,101,32,111,98,106,101,99,116,32,102,111,114,32,116,104,
-    101,32,102,114,111,122,101,110,32,109,111,100,117,108,101,46,
-    41,2,114,57,0,0,0,114,175,0,0,0,114,168,0,0,
-    0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
-    114,169,0,0,0,70,3,0,0,115,2,0,0,0,0,4,
-    122,23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,
-    46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,
-    0,0,115,4,0,0,0,100,1,83,0,41,2,122,54,82,
-    101,116,117,114,110,32,78,111,110,101,32,97,115,32,102,114,
-    111,122,101,110,32,109,111,100,117,108,101,115,32,100,111,32,
-    110,111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,
-    99,111,100,101,46,78,114,10,0,0,0,114,168,0,0,0,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
-    170,0,0,0,76,3,0,0,115,2,0,0,0,0,4,122,
-    25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,
-    103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,
-    0,0,0,115,10,0,0,0,116,0,160,1,124,1,161,1,
-    83,0,41,1,122,46,82,101,116,117,114,110,32,84,114,117,
-    101,32,105,102,32,116,104,101,32,102,114,111,122,101,110,32,
-    109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,
-    97,103,101,46,41,2,114,57,0,0,0,90,17,105,115,95,
-    102,114,111,122,101,110,95,112,97,99,107,97,103,101,114,168,
-    0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,114,115,0,0,0,82,3,0,0,115,2,0,0,0,
-    0,4,122,25,70,114,111,122,101,110,73,109,112,111,114,116,
-    101,114,46,105,115,95,112,97,99,107,97,103,101,41,2,78,
-    78,41,1,78,41,17,114,1,0,0,0,114,0,0,0,0,
-    114,2,0,0,0,114,3,0,0,0,114,138,0,0,0,114,
-    171,0,0,0,114,99,0,0,0,114,172,0,0,0,114,166,
-    0,0,0,114,167,0,0,0,114,149,0,0,0,114,150,0,
-    0,0,114,156,0,0,0,114,90,0,0,0,114,169,0,0,
-    0,114,170,0,0,0,114,115,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
-    173,0,0,0,12,3,0,0,115,46,0,0,0,8,2,4,
-    7,4,2,2,1,10,8,2,1,12,6,2,1,12,8,2,
-    1,10,3,2,1,10,8,2,1,10,8,2,1,2,1,12,
-    4,2,1,2,1,12,4,2,1,2,1,114,173,0,0,0,
-    99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,2,0,0,0,64,0,0,0,115,32,0,0,0,101,0,
-    90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,
-    90,4,100,4,100,5,132,0,90,5,100,6,83,0,41,7,
-    218,18,95,73,109,112,111,114,116,76,111,99,107,67,111,110,
-    116,101,120,116,122,36,67,111,110,116,101,120,116,32,109,97,
-    110,97,103,101,114,32,102,111,114,32,116,104,101,32,105,109,
-    112,111,114,116,32,108,111,99,107,46,99,1,0,0,0,0,
-    0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,
-    0,0,0,115,12,0,0,0,116,0,160,1,161,0,1,0,
-    100,1,83,0,41,2,122,24,65,99,113,117,105,114,101,32,
+    1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,
+    0,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101,
+    32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108,
+    101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115,
+    111,117,114,99,101,32,99,111,100,101,46,78,114,10,0,0,
+    0,114,170,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,172,0,0,0,87,3,0,0,115,2,
+    0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112,
+    111,114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,
+    99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,
+    160,1,124,1,161,1,83,0,41,1,122,46,82,101,116,117,
+    114,110,32,84,114,117,101,32,105,102,32,116,104,101,32,102,
+    114,111,122,101,110,32,109,111,100,117,108,101,32,105,115,32,
+    97,32,112,97,99,107,97,103,101,46,41,2,114,58,0,0,
+    0,90,17,105,115,95,102,114,111,122,101,110,95,112,97,99,
+    107,97,103,101,114,170,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,114,116,0,0,0,93,3,0,
+    0,115,2,0,0,0,0,4,122,25,70,114,111,122,101,110,
+    73,109,112,111,114,116,101,114,46,105,115,95,112,97,99,107,
+    97,103,101,41,2,78,78,41,1,78,41,17,114,1,0,0,
+    0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,
+    114,139,0,0,0,114,173,0,0,0,114,100,0,0,0,114,
+    174,0,0,0,114,168,0,0,0,114,169,0,0,0,114,150,
+    0,0,0,114,151,0,0,0,114,156,0,0,0,114,91,0,
+    0,0,114,171,0,0,0,114,172,0,0,0,114,116,0,0,
+    0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,175,0,0,0,23,3,0,0,115,46,
+    0,0,0,8,2,4,7,4,2,2,1,10,8,2,1,12,
+    6,2,1,12,8,2,1,10,3,2,1,10,8,2,1,10,
+    8,2,1,2,1,12,4,2,1,2,1,12,4,2,1,2,
+    1,114,175,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,
+    32,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,
+    100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,
+    100,6,83,0,41,7,218,18,95,73,109,112,111,114,116,76,
+    111,99,107,67,111,110,116,101,120,116,122,36,67,111,110,116,
+    101,120,116,32,109,97,110,97,103,101,114,32,102,111,114,32,
     116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,46,
-    78,41,2,114,57,0,0,0,114,58,0,0,0,114,47,0,
-    0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
-    0,114,54,0,0,0,95,3,0,0,115,2,0,0,0,0,
-    2,122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,
-    110,116,101,120,116,46,95,95,101,110,116,101,114,95,95,99,
-    4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
-    2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160,
-    1,161,0,1,0,100,1,83,0,41,2,122,60,82,101,108,
-    101,97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,
-    108,111,99,107,32,114,101,103,97,114,100,108,101,115,115,32,
-    111,102,32,97,110,121,32,114,97,105,115,101,100,32,101,120,
-    99,101,112,116,105,111,110,115,46,78,41,2,114,57,0,0,
-    0,114,59,0,0,0,41,4,114,30,0,0,0,218,8,101,
-    120,99,95,116,121,112,101,218,9,101,120,99,95,118,97,108,
-    117,101,218,13,101,120,99,95,116,114,97,99,101,98,97,99,
-    107,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
-    114,56,0,0,0,99,3,0,0,115,2,0,0,0,0,2,
-    122,27,95,73,109,112,111,114,116,76,111,99,107,67,111,110,
-    116,101,120,116,46,95,95,101,120,105,116,95,95,78,41,6,
-    114,1,0,0,0,114,0,0,0,0,114,2,0,0,0,114,
-    3,0,0,0,114,54,0,0,0,114,56,0,0,0,114,10,
+    99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+    0,2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,
+    160,1,161,0,1,0,100,1,83,0,41,2,122,24,65,99,
+    113,117,105,114,101,32,116,104,101,32,105,109,112,111,114,116,
+    32,108,111,99,107,46,78,41,2,114,58,0,0,0,114,59,
+    0,0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,
+    0,0,114,11,0,0,0,114,55,0,0,0,106,3,0,0,
+    115,2,0,0,0,0,2,122,28,95,73,109,112,111,114,116,
+    76,111,99,107,67,111,110,116,101,120,116,46,95,95,101,110,
+    116,101,114,95,95,99,4,0,0,0,0,0,0,0,0,0,
+    0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,12,
+    0,0,0,116,0,160,1,161,0,1,0,100,1,83,0,41,
+    2,122,60,82,101,108,101,97,115,101,32,116,104,101,32,105,
+    109,112,111,114,116,32,108,111,99,107,32,114,101,103,97,114,
+    100,108,101,115,115,32,111,102,32,97,110,121,32,114,97,105,
+    115,101,100,32,101,120,99,101,112,116,105,111,110,115,46,78,
+    41,2,114,58,0,0,0,114,61,0,0,0,41,4,114,30,
+    0,0,0,218,8,101,120,99,95,116,121,112,101,218,9,101,
+    120,99,95,118,97,108,117,101,218,13,101,120,99,95,116,114,
+    97,99,101,98,97,99,107,114,10,0,0,0,114,10,0,0,
+    0,114,11,0,0,0,114,57,0,0,0,110,3,0,0,115,
+    2,0,0,0,0,2,122,27,95,73,109,112,111,114,116,76,
+    111,99,107,67,111,110,116,101,120,116,46,95,95,101,120,105,
+    116,95,95,78,41,6,114,1,0,0,0,114,0,0,0,0,
+    114,2,0,0,0,114,3,0,0,0,114,55,0,0,0,114,
+    57,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,114,180,0,0,0,102,3,0,
+    0,115,6,0,0,0,8,2,4,2,8,4,114,180,0,0,
+    0,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,
+    0,0,5,0,0,0,67,0,0,0,115,64,0,0,0,124,
+    1,160,0,100,1,124,2,100,2,24,0,161,2,125,3,116,
+    1,124,3,131,1,124,2,107,0,114,36,116,2,100,3,131,
+    1,130,1,124,3,100,4,25,0,125,4,124,0,114,60,100,
+    5,160,3,124,4,124,0,161,2,83,0,124,4,83,0,41,
+    6,122,50,82,101,115,111,108,118,101,32,97,32,114,101,108,
+    97,116,105,118,101,32,109,111,100,117,108,101,32,110,97,109,
+    101,32,116,111,32,97,110,32,97,98,115,111,108,117,116,101,
+    32,111,110,101,46,114,129,0,0,0,114,39,0,0,0,122,
+    50,97,116,116,101,109,112,116,101,100,32,114,101,108,97,116,
+    105,118,101,32,105,109,112,111,114,116,32,98,101,121,111,110,
+    100,32,116,111,112,45,108,101,118,101,108,32,112,97,99,107,
+    97,103,101,114,22,0,0,0,250,5,123,125,46,123,125,41,
+    4,218,6,114,115,112,108,105,116,218,3,108,101,110,114,80,
+    0,0,0,114,46,0,0,0,41,5,114,17,0,0,0,218,
+    7,112,97,99,107,97,103,101,218,5,108,101,118,101,108,90,
+    4,98,105,116,115,90,4,98,97,115,101,114,10,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,218,13,95,114,101,115,
+    111,108,118,101,95,110,97,109,101,115,3,0,0,115,10,0,
+    0,0,0,2,16,1,12,1,8,1,8,1,114,189,0,0,
+    0,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,
+    0,0,4,0,0,0,67,0,0,0,115,34,0,0,0,124,
+    0,160,0,124,1,124,2,161,2,125,3,124,3,100,0,117,
+    0,114,24,100,0,83,0,116,1,124,1,124,3,131,2,83,
+    0,114,13,0,0,0,41,2,114,169,0,0,0,114,92,0,
+    0,0,41,4,218,6,102,105,110,100,101,114,114,17,0,0,
+    0,114,166,0,0,0,114,110,0,0,0,114,10,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,218,17,95,102,105,110,
+    100,95,115,112,101,99,95,108,101,103,97,99,121,124,3,0,
+    0,115,8,0,0,0,0,3,12,1,8,1,4,1,114,191,
+    0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,
+    10,0,0,0,10,0,0,0,67,0,0,0,115,32,1,0,
+    0,116,0,106,1,125,3,124,3,100,1,117,0,114,22,116,
+    2,100,2,131,1,130,1,124,3,115,38,116,3,160,4,100,
+    3,116,5,161,2,1,0,124,0,116,0,106,6,118,0,125,
+    4,124,3,68,0,93,230,125,5,116,7,131,0,143,94,1,
+    0,122,10,124,5,106,8,125,6,87,0,110,54,4,0,116,
+    9,121,128,1,0,1,0,1,0,116,10,124,5,124,0,124,
+    1,131,3,125,7,124,7,100,1,117,0,114,124,89,0,87,
+    0,100,1,4,0,4,0,131,3,1,0,113,52,89,0,110,
+    14,48,0,124,6,124,0,124,1,124,2,131,3,125,7,87,
+    0,100,1,4,0,4,0,131,3,1,0,110,16,49,0,115,
+    162,48,0,1,0,1,0,1,0,89,0,1,0,124,7,100,
+    1,117,1,114,52,124,4,144,1,115,18,124,0,116,0,106,
+    6,118,0,144,1,114,18,116,0,106,6,124,0,25,0,125,
+    8,122,10,124,8,106,11,125,9,87,0,110,26,4,0,116,
+    9,121,244,1,0,1,0,1,0,124,7,6,0,89,0,2,
+    0,1,0,83,0,48,0,124,9,100,1,117,0,144,1,114,
+    8,124,7,2,0,1,0,83,0,124,9,2,0,1,0,83,
+    0,113,52,124,7,2,0,1,0,83,0,113,52,100,1,83,
+    0,41,4,122,21,70,105,110,100,32,97,32,109,111,100,117,
+    108,101,39,115,32,115,112,101,99,46,78,122,53,115,121,115,
+    46,109,101,116,97,95,112,97,116,104,32,105,115,32,78,111,
+    110,101,44,32,80,121,116,104,111,110,32,105,115,32,108,105,
+    107,101,108,121,32,115,104,117,116,116,105,110,103,32,100,111,
+    119,110,122,22,115,121,115,46,109,101,116,97,95,112,97,116,
+    104,32,105,115,32,101,109,112,116,121,41,12,114,15,0,0,
+    0,218,9,109,101,116,97,95,112,97,116,104,114,80,0,0,
+    0,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97,
+    114,110,218,13,73,109,112,111,114,116,87,97,114,110,105,110,
+    103,114,93,0,0,0,114,180,0,0,0,114,168,0,0,0,
+    114,107,0,0,0,114,191,0,0,0,114,106,0,0,0,41,
+    10,114,17,0,0,0,114,166,0,0,0,114,167,0,0,0,
+    114,192,0,0,0,90,9,105,115,95,114,101,108,111,97,100,
+    114,190,0,0,0,114,168,0,0,0,114,96,0,0,0,114,
+    97,0,0,0,114,106,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,218,10,95,102,105,110,100,95,
+    115,112,101,99,133,3,0,0,115,54,0,0,0,0,2,6,
+    1,8,2,8,3,4,1,12,5,10,1,8,1,8,1,2,
+    1,10,1,12,1,12,1,8,1,22,2,42,1,8,2,18,
+    1,10,1,2,1,10,1,12,4,14,2,10,1,8,2,10,
+    2,10,2,114,196,0,0,0,99,3,0,0,0,0,0,0,
+    0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,
+    0,115,108,0,0,0,116,0,124,0,116,1,131,2,115,28,
+    116,2,100,1,160,3,116,4,124,0,131,1,161,1,131,1,
+    130,1,124,2,100,2,107,0,114,44,116,5,100,3,131,1,
+    130,1,124,2,100,2,107,4,114,84,116,0,124,1,116,1,
+    131,2,115,72,116,2,100,4,131,1,130,1,110,12,124,1,
+    115,84,116,6,100,5,131,1,130,1,124,0,115,104,124,2,
+    100,2,107,2,114,104,116,5,100,6,131,1,130,1,100,7,
+    83,0,41,8,122,28,86,101,114,105,102,121,32,97,114,103,
+    117,109,101,110,116,115,32,97,114,101,32,34,115,97,110,101,
+    34,46,122,31,109,111,100,117,108,101,32,110,97,109,101,32,
+    109,117,115,116,32,98,101,32,115,116,114,44,32,110,111,116,
+    32,123,125,114,22,0,0,0,122,18,108,101,118,101,108,32,
+    109,117,115,116,32,98,101,32,62,61,32,48,122,31,95,95,
+    112,97,99,107,97,103,101,95,95,32,110,111,116,32,115,101,
+    116,32,116,111,32,97,32,115,116,114,105,110,103,122,54,97,
+    116,116,101,109,112,116,101,100,32,114,101,108,97,116,105,118,
+    101,32,105,109,112,111,114,116,32,119,105,116,104,32,110,111,
+    32,107,110,111,119,110,32,112,97,114,101,110,116,32,112,97,
+    99,107,97,103,101,122,17,69,109,112,116,121,32,109,111,100,
+    117,108,101,32,110,97,109,101,78,41,7,218,10,105,115,105,
+    110,115,116,97,110,99,101,218,3,115,116,114,218,9,84,121,
+    112,101,69,114,114,111,114,114,46,0,0,0,114,14,0,0,
+    0,218,10,86,97,108,117,101,69,114,114,111,114,114,80,0,
+    0,0,169,3,114,17,0,0,0,114,187,0,0,0,114,188,
     0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,114,178,0,0,0,91,3,0,0,115,6,0,0,0,
-    8,2,4,2,8,4,114,178,0,0,0,99,3,0,0,0,
-    0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
-    67,0,0,0,115,64,0,0,0,124,1,160,0,100,1,124,
-    2,100,2,24,0,161,2,125,3,116,1,124,3,131,1,124,
-    2,107,0,114,36,116,2,100,3,131,1,130,1,124,3,100,
-    4,25,0,125,4,124,0,114,60,100,5,160,3,124,4,124,
-    0,161,2,83,0,124,4,83,0,41,6,122,50,82,101,115,
-    111,108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,
-    109,111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,
-    110,32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,
-    128,0,0,0,114,37,0,0,0,122,50,97,116,116,101,109,
-    112,116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,
-    112,111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,
-    108,101,118,101,108,32,112,97,99,107,97,103,101,114,22,0,
-    0,0,250,5,123,125,46,123,125,41,4,218,6,114,115,112,
-    108,105,116,218,3,108,101,110,218,10,86,97,108,117,101,69,
-    114,114,111,114,114,45,0,0,0,41,5,114,17,0,0,0,
-    218,7,112,97,99,107,97,103,101,218,5,108,101,118,101,108,
-    90,4,98,105,116,115,90,4,98,97,115,101,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,218,13,95,114,101,
-    115,111,108,118,101,95,110,97,109,101,104,3,0,0,115,10,
-    0,0,0,0,2,16,1,12,1,8,1,8,1,114,188,0,
-    0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,4,
-    0,0,0,4,0,0,0,67,0,0,0,115,34,0,0,0,
-    124,0,160,0,124,1,124,2,161,2,125,3,124,3,100,0,
-    107,8,114,24,100,0,83,0,116,1,124,1,124,3,131,2,
-    83,0,114,13,0,0,0,41,2,114,167,0,0,0,114,91,
-    0,0,0,41,4,218,6,102,105,110,100,101,114,114,17,0,
-    0,0,114,164,0,0,0,114,109,0,0,0,114,10,0,0,
-    0,114,10,0,0,0,114,11,0,0,0,218,17,95,102,105,
-    110,100,95,115,112,101,99,95,108,101,103,97,99,121,113,3,
-    0,0,115,8,0,0,0,0,3,12,1,8,1,4,1,114,
-    190,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
-    0,10,0,0,0,10,0,0,0,67,0,0,0,115,12,1,
-    0,0,116,0,106,1,125,3,124,3,100,1,107,8,114,22,
-    116,2,100,2,131,1,130,1,124,3,115,38,116,3,160,4,
-    100,3,116,5,161,2,1,0,124,0,116,0,106,6,107,6,
-    125,4,124,3,68,0,93,210,125,5,116,7,131,0,143,84,
-    1,0,122,10,124,5,106,8,125,6,87,0,110,54,4,0,
-    116,9,107,10,114,128,1,0,1,0,1,0,116,10,124,5,
-    124,0,124,1,131,3,125,7,124,7,100,1,107,8,114,124,
-    89,0,87,0,53,0,81,0,82,0,163,0,113,52,89,0,
-    110,14,88,0,124,6,124,0,124,1,124,2,131,3,125,7,
-    87,0,53,0,81,0,82,0,88,0,124,7,100,1,107,9,
-    114,52,124,4,144,0,115,254,124,0,116,0,106,6,107,6,
-    144,0,114,254,116,0,106,6,124,0,25,0,125,8,122,10,
-    124,8,106,11,125,9,87,0,110,28,4,0,116,9,107,10,
-    114,226,1,0,1,0,1,0,124,7,6,0,89,0,2,0,
-    1,0,83,0,88,0,124,9,100,1,107,8,114,244,124,7,
-    2,0,1,0,83,0,124,9,2,0,1,0,83,0,113,52,
-    124,7,2,0,1,0,83,0,113,52,100,1,83,0,41,4,
-    122,21,70,105,110,100,32,97,32,109,111,100,117,108,101,39,
-    115,32,115,112,101,99,46,78,122,53,115,121,115,46,109,101,
-    116,97,95,112,97,116,104,32,105,115,32,78,111,110,101,44,
-    32,80,121,116,104,111,110,32,105,115,32,108,105,107,101,108,
-    121,32,115,104,117,116,116,105,110,103,32,100,111,119,110,122,
-    22,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105,
-    115,32,101,109,112,116,121,41,12,114,15,0,0,0,218,9,
-    109,101,116,97,95,112,97,116,104,114,79,0,0,0,218,9,
-    95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,218,
-    13,73,109,112,111,114,116,87,97,114,110,105,110,103,114,92,
-    0,0,0,114,178,0,0,0,114,166,0,0,0,114,106,0,
-    0,0,114,190,0,0,0,114,105,0,0,0,41,10,114,17,
-    0,0,0,114,164,0,0,0,114,165,0,0,0,114,191,0,
-    0,0,90,9,105,115,95,114,101,108,111,97,100,114,189,0,
-    0,0,114,166,0,0,0,114,95,0,0,0,114,96,0,0,
-    0,114,105,0,0,0,114,10,0,0,0,114,10,0,0,0,
-    114,11,0,0,0,218,10,95,102,105,110,100,95,115,112,101,
-    99,122,3,0,0,115,54,0,0,0,0,2,6,1,8,2,
-    8,3,4,1,12,5,10,1,8,1,8,1,2,1,10,1,
-    14,1,12,1,8,1,20,2,22,1,8,2,18,1,10,1,
-    2,1,10,1,14,4,14,2,8,1,8,2,10,2,10,2,
-    114,195,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
-    0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,108,
-    0,0,0,116,0,124,0,116,1,131,2,115,28,116,2,100,
-    1,160,3,116,4,124,0,131,1,161,1,131,1,130,1,124,
-    2,100,2,107,0,114,44,116,5,100,3,131,1,130,1,124,
-    2,100,2,107,4,114,84,116,0,124,1,116,1,131,2,115,
-    72,116,2,100,4,131,1,130,1,110,12,124,1,115,84,116,
-    6,100,5,131,1,130,1,124,0,115,104,124,2,100,2,107,
-    2,114,104,116,5,100,6,131,1,130,1,100,7,83,0,41,
-    8,122,28,86,101,114,105,102,121,32,97,114,103,117,109,101,
-    110,116,115,32,97,114,101,32,34,115,97,110,101,34,46,122,
-    31,109,111,100,117,108,101,32,110,97,109,101,32,109,117,115,
-    116,32,98,101,32,115,116,114,44,32,110,111,116,32,123,125,
-    114,22,0,0,0,122,18,108,101,118,101,108,32,109,117,115,
-    116,32,98,101,32,62,61,32,48,122,31,95,95,112,97,99,
-    107,97,103,101,95,95,32,110,111,116,32,115,101,116,32,116,
-    111,32,97,32,115,116,114,105,110,103,122,54,97,116,116,101,
-    109,112,116,101,100,32,114,101,108,97,116,105,118,101,32,105,
-    109,112,111,114,116,32,119,105,116,104,32,110,111,32,107,110,
-    111,119,110,32,112,97,114,101,110,116,32,112,97,99,107,97,
-    103,101,122,17,69,109,112,116,121,32,109,111,100,117,108,101,
-    32,110,97,109,101,78,41,7,218,10,105,115,105,110,115,116,
-    97,110,99,101,218,3,115,116,114,218,9,84,121,112,101,69,
-    114,114,111,114,114,45,0,0,0,114,14,0,0,0,114,185,
-    0,0,0,114,79,0,0,0,169,3,114,17,0,0,0,114,
-    186,0,0,0,114,187,0,0,0,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,218,13,95,115,97,110,105,116,
-    121,95,99,104,101,99,107,169,3,0,0,115,22,0,0,0,
-    0,2,10,1,18,1,8,1,8,1,8,1,10,1,10,1,
-    4,1,8,2,12,1,114,200,0,0,0,122,16,78,111,32,
-    109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123,
-    33,114,125,99,2,0,0,0,0,0,0,0,0,0,0,0,
-    8,0,0,0,8,0,0,0,67,0,0,0,115,220,0,0,
-    0,100,0,125,2,124,0,160,0,100,1,161,1,100,2,25,
-    0,125,3,124,3,114,134,124,3,116,1,106,2,107,7,114,
-    42,116,3,124,1,124,3,131,2,1,0,124,0,116,1,106,
-    2,107,6,114,62,116,1,106,2,124,0,25,0,83,0,116,
-    1,106,2,124,3,25,0,125,4,122,10,124,4,106,4,125,
-    2,87,0,110,50,4,0,116,5,107,10,114,132,1,0,1,
-    0,1,0,116,6,100,3,23,0,160,7,124,0,124,3,161,
-    2,125,5,116,8,124,5,124,0,100,4,141,2,100,0,130,
-    2,89,0,110,2,88,0,116,9,124,0,124,2,131,2,125,
-    6,124,6,100,0,107,8,114,172,116,8,116,6,160,7,124,
-    0,161,1,124,0,100,4,141,2,130,1,110,8,116,10,124,
-    6,131,1,125,7,124,3,114,216,116,1,106,2,124,3,25,
-    0,125,4,116,11,124,4,124,0,160,0,100,1,161,1,100,
-    5,25,0,124,7,131,3,1,0,124,7,83,0,41,6,78,
-    114,128,0,0,0,114,22,0,0,0,122,23,59,32,123,33,
-    114,125,32,105,115,32,110,111,116,32,97,32,112,97,99,107,
-    97,103,101,114,16,0,0,0,233,2,0,0,0,41,12,114,
-    129,0,0,0,114,15,0,0,0,114,92,0,0,0,114,67,
-    0,0,0,114,141,0,0,0,114,106,0,0,0,218,8,95,
-    69,82,82,95,77,83,71,114,45,0,0,0,218,19,77,111,
-    100,117,108,101,78,111,116,70,111,117,110,100,69,114,114,111,
-    114,114,195,0,0,0,114,159,0,0,0,114,5,0,0,0,
-    41,8,114,17,0,0,0,218,7,105,109,112,111,114,116,95,
-    114,164,0,0,0,114,130,0,0,0,90,13,112,97,114,101,
-    110,116,95,109,111,100,117,108,101,114,157,0,0,0,114,95,
-    0,0,0,114,96,0,0,0,114,10,0,0,0,114,10,0,
-    0,0,114,11,0,0,0,218,23,95,102,105,110,100,95,97,
-    110,100,95,108,111,97,100,95,117,110,108,111,99,107,101,100,
-    188,3,0,0,115,42,0,0,0,0,1,4,1,14,1,4,
-    1,10,1,10,2,10,1,10,1,10,1,2,1,10,1,14,
-    1,16,1,20,1,10,1,8,1,20,2,8,1,4,2,10,
-    1,22,1,114,205,0,0,0,99,2,0,0,0,0,0,0,
-    0,0,0,0,0,4,0,0,0,10,0,0,0,67,0,0,
-    0,115,106,0,0,0,116,0,124,0,131,1,143,50,1,0,
-    116,1,106,2,160,3,124,0,116,4,161,2,125,2,124,2,
-    116,4,107,8,114,54,116,5,124,0,124,1,131,2,87,0,
-    2,0,53,0,81,0,82,0,163,0,83,0,87,0,53,0,
-    81,0,82,0,88,0,124,2,100,1,107,8,114,94,100,2,
-    160,6,124,0,161,1,125,3,116,7,124,3,124,0,100,3,
-    141,2,130,1,116,8,124,0,131,1,1,0,124,2,83,0,
-    41,4,122,25,70,105,110,100,32,97,110,100,32,108,111,97,
-    100,32,116,104,101,32,109,111,100,117,108,101,46,78,122,40,
-    105,109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,
-    116,101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,
-    46,109,111,100,117,108,101,115,114,16,0,0,0,41,9,114,
-    50,0,0,0,114,15,0,0,0,114,92,0,0,0,114,34,
-    0,0,0,218,14,95,78,69,69,68,83,95,76,79,65,68,
-    73,78,71,114,205,0,0,0,114,45,0,0,0,114,203,0,
-    0,0,114,65,0,0,0,41,4,114,17,0,0,0,114,204,
-    0,0,0,114,96,0,0,0,114,75,0,0,0,114,10,0,
-    0,0,114,10,0,0,0,114,11,0,0,0,218,14,95,102,
-    105,110,100,95,97,110,100,95,108,111,97,100,218,3,0,0,
-    115,22,0,0,0,0,2,10,1,14,1,8,1,32,2,8,
-    1,4,1,2,255,4,2,12,2,8,1,114,207,0,0,0,
-    114,22,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
-    0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,42,
-    0,0,0,116,0,124,0,124,1,124,2,131,3,1,0,124,
-    2,100,1,107,4,114,32,116,1,124,0,124,1,124,2,131,
-    3,125,0,116,2,124,0,116,3,131,2,83,0,41,2,97,
-    50,1,0,0,73,109,112,111,114,116,32,97,110,100,32,114,
-    101,116,117,114,110,32,116,104,101,32,109,111,100,117,108,101,
-    32,98,97,115,101,100,32,111,110,32,105,116,115,32,110,97,
-    109,101,44,32,116,104,101,32,112,97,99,107,97,103,101,32,
-    116,104,101,32,99,97,108,108,32,105,115,10,32,32,32,32,
-    98,101,105,110,103,32,109,97,100,101,32,102,114,111,109,44,
-    32,97,110,100,32,116,104,101,32,108,101,118,101,108,32,97,
-    100,106,117,115,116,109,101,110,116,46,10,10,32,32,32,32,
-    84,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,
-    112,114,101,115,101,110,116,115,32,116,104,101,32,103,114,101,
-    97,116,101,115,116,32,99,111,109,109,111,110,32,100,101,110,
-    111,109,105,110,97,116,111,114,32,111,102,32,102,117,110,99,
-    116,105,111,110,97,108,105,116,121,10,32,32,32,32,98,101,
-    116,119,101,101,110,32,105,109,112,111,114,116,95,109,111,100,
-    117,108,101,32,97,110,100,32,95,95,105,109,112,111,114,116,
-    95,95,46,32,84,104,105,115,32,105,110,99,108,117,100,101,
-    115,32,115,101,116,116,105,110,103,32,95,95,112,97,99,107,
-    97,103,101,95,95,32,105,102,10,32,32,32,32,116,104,101,
-    32,108,111,97,100,101,114,32,100,105,100,32,110,111,116,46,
-    10,10,32,32,32,32,114,22,0,0,0,41,4,114,200,0,
-    0,0,114,188,0,0,0,114,207,0,0,0,218,11,95,103,
-    99,100,95,105,109,112,111,114,116,114,199,0,0,0,114,10,
-    0,0,0,114,10,0,0,0,114,11,0,0,0,114,208,0,
-    0,0,234,3,0,0,115,8,0,0,0,0,9,12,1,8,
-    1,12,1,114,208,0,0,0,169,1,218,9,114,101,99,117,
-    114,115,105,118,101,99,3,0,0,0,0,0,0,0,1,0,
-    0,0,8,0,0,0,11,0,0,0,67,0,0,0,115,226,
-    0,0,0,124,1,68,0,93,216,125,4,116,0,124,4,116,
-    1,131,2,115,66,124,3,114,34,124,0,106,2,100,1,23,
-    0,125,5,110,4,100,2,125,5,116,3,100,3,124,5,155,
-    0,100,4,116,4,124,4,131,1,106,2,155,0,157,4,131,
-    1,130,1,113,4,124,4,100,5,107,2,114,108,124,3,115,
-    220,116,5,124,0,100,6,131,2,114,220,116,6,124,0,124,
-    0,106,7,124,2,100,7,100,8,141,4,1,0,113,4,116,
-    5,124,0,124,4,131,2,115,4,100,9,160,8,124,0,106,
-    2,124,4,161,2,125,6,122,14,116,9,124,2,124,6,131,
-    2,1,0,87,0,113,4,4,0,116,10,107,10,114,218,1,
-    0,125,7,1,0,122,42,124,7,106,11,124,6,107,2,114,
-    200,116,12,106,13,160,14,124,6,116,15,161,2,100,10,107,
-    9,114,200,87,0,89,0,162,8,113,4,130,0,87,0,53,
-    0,100,10,125,7,126,7,88,0,89,0,113,4,88,0,113,
-    4,124,0,83,0,41,11,122,238,70,105,103,117,114,101,32,
-    111,117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,
-    116,95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,
-    110,46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,
-    114,116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,
-    32,97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,
-    104,32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,
-    32,111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,
-    32,32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,
-    114,101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,
-    117,112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,
-    110,32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,
-    105,109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,
-    105,109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,
-    97,116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,
-    46,10,10,32,32,32,32,122,8,46,95,95,97,108,108,95,
-    95,122,13,96,96,102,114,111,109,32,108,105,115,116,39,39,
-    122,8,73,116,101,109,32,105,110,32,122,18,32,109,117,115,
-    116,32,98,101,32,115,116,114,44,32,110,111,116,32,250,1,
-    42,218,7,95,95,97,108,108,95,95,84,114,209,0,0,0,
-    114,182,0,0,0,78,41,16,114,196,0,0,0,114,197,0,
-    0,0,114,1,0,0,0,114,198,0,0,0,114,14,0,0,
-    0,114,4,0,0,0,218,16,95,104,97,110,100,108,101,95,
-    102,114,111,109,108,105,115,116,114,212,0,0,0,114,45,0,
-    0,0,114,67,0,0,0,114,203,0,0,0,114,17,0,0,
-    0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,0,
-    114,206,0,0,0,41,8,114,96,0,0,0,218,8,102,114,
-    111,109,108,105,115,116,114,204,0,0,0,114,210,0,0,0,
-    218,1,120,90,5,119,104,101,114,101,90,9,102,114,111,109,
-    95,110,97,109,101,90,3,101,120,99,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,114,213,0,0,0,249,3,
-    0,0,115,44,0,0,0,0,10,8,1,10,1,4,1,12,
-    2,4,1,28,2,8,1,14,1,10,1,2,255,8,2,10,
-    1,14,1,2,1,14,1,16,4,10,1,16,255,2,2,8,
-    1,22,1,114,213,0,0,0,99,1,0,0,0,0,0,0,
-    0,0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,
-    0,115,146,0,0,0,124,0,160,0,100,1,161,1,125,1,
-    124,0,160,0,100,2,161,1,125,2,124,1,100,3,107,9,
-    114,82,124,2,100,3,107,9,114,78,124,1,124,2,106,1,
-    107,3,114,78,116,2,106,3,100,4,124,1,155,2,100,5,
-    124,2,106,1,155,2,100,6,157,5,116,4,100,7,100,8,
-    141,3,1,0,124,1,83,0,124,2,100,3,107,9,114,96,
-    124,2,106,1,83,0,116,2,106,3,100,9,116,4,100,7,
-    100,8,141,3,1,0,124,0,100,10,25,0,125,1,100,11,
-    124,0,107,7,114,142,124,1,160,5,100,12,161,1,100,13,
-    25,0,125,1,124,1,83,0,41,14,122,167,67,97,108,99,
-    117,108,97,116,101,32,119,104,97,116,32,95,95,112,97,99,
-    107,97,103,101,95,95,32,115,104,111,117,108,100,32,98,101,
-    46,10,10,32,32,32,32,95,95,112,97,99,107,97,103,101,
-    95,95,32,105,115,32,110,111,116,32,103,117,97,114,97,110,
-    116,101,101,100,32,116,111,32,98,101,32,100,101,102,105,110,
-    101,100,32,111,114,32,99,111,117,108,100,32,98,101,32,115,
-    101,116,32,116,111,32,78,111,110,101,10,32,32,32,32,116,
-    111,32,114,101,112,114,101,115,101,110,116,32,116,104,97,116,
-    32,105,116,115,32,112,114,111,112,101,114,32,118,97,108,117,
-    101,32,105,115,32,117,110,107,110,111,119,110,46,10,10,32,
-    32,32,32,114,145,0,0,0,114,105,0,0,0,78,122,32,
-    95,95,112,97,99,107,97,103,101,95,95,32,33,61,32,95,
-    95,115,112,101,99,95,95,46,112,97,114,101,110,116,32,40,
-    122,4,32,33,61,32,250,1,41,233,3,0,0,0,41,1,
-    90,10,115,116,97,99,107,108,101,118,101,108,122,89,99,97,
-    110,39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,
-    97,103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,
-    95,32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,
-    44,32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,
-    110,32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,
-    95,112,97,116,104,95,95,114,1,0,0,0,114,141,0,0,
-    0,114,128,0,0,0,114,22,0,0,0,41,6,114,34,0,
-    0,0,114,130,0,0,0,114,192,0,0,0,114,193,0,0,
-    0,114,194,0,0,0,114,129,0,0,0,41,3,218,7,103,
-    108,111,98,97,108,115,114,186,0,0,0,114,95,0,0,0,
+    0,0,218,13,95,115,97,110,105,116,121,95,99,104,101,99,
+    107,180,3,0,0,115,22,0,0,0,0,2,10,1,18,1,
+    8,1,8,1,8,1,10,1,10,1,4,1,8,2,12,1,
+    114,202,0,0,0,122,16,78,111,32,109,111,100,117,108,101,
+    32,110,97,109,101,100,32,122,4,123,33,114,125,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,9,0,0,0,8,0,
+    0,0,67,0,0,0,115,22,1,0,0,100,0,125,2,124,
+    0,160,0,100,1,161,1,100,2,25,0,125,3,124,3,114,
+    132,124,3,116,1,106,2,118,1,114,42,116,3,124,1,124,
+    3,131,2,1,0,124,0,116,1,106,2,118,0,114,62,116,
+    1,106,2,124,0,25,0,83,0,116,1,106,2,124,3,25,
+    0,125,4,122,10,124,4,106,4,125,2,87,0,110,48,4,
+    0,116,5,121,130,1,0,1,0,1,0,116,6,100,3,23,
+    0,160,7,124,0,124,3,161,2,125,5,116,8,124,5,124,
+    0,100,4,141,2,100,0,130,2,89,0,110,2,48,0,116,
+    9,124,0,124,2,131,2,125,6,124,6,100,0,117,0,114,
+    170,116,8,116,6,160,7,124,0,161,1,124,0,100,4,141,
+    2,130,1,110,8,116,10,124,6,131,1,125,7,124,3,144,
+    1,114,18,116,1,106,2,124,3,25,0,125,4,124,0,160,
+    0,100,1,161,1,100,5,25,0,125,8,122,16,116,11,124,
+    4,124,8,124,7,131,3,1,0,87,0,110,48,4,0,116,
+    5,144,1,121,16,1,0,1,0,1,0,100,6,124,3,155,
+    2,100,7,124,8,155,2,157,4,125,5,116,12,160,13,124,
+    5,116,14,161,2,1,0,89,0,110,2,48,0,124,7,83,
+    0,41,8,78,114,129,0,0,0,114,22,0,0,0,122,23,
+    59,32,123,33,114,125,32,105,115,32,110,111,116,32,97,32,
+    112,97,99,107,97,103,101,114,16,0,0,0,233,2,0,0,
+    0,122,27,67,97,110,110,111,116,32,115,101,116,32,97,110,
+    32,97,116,116,114,105,98,117,116,101,32,111,110,32,122,18,
+    32,102,111,114,32,99,104,105,108,100,32,109,111,100,117,108,
+    101,32,41,15,114,130,0,0,0,114,15,0,0,0,114,93,
+    0,0,0,114,68,0,0,0,114,142,0,0,0,114,107,0,
+    0,0,218,8,95,69,82,82,95,77,83,71,114,46,0,0,
+    0,218,19,77,111,100,117,108,101,78,111,116,70,111,117,110,
+    100,69,114,114,111,114,114,196,0,0,0,114,160,0,0,0,
+    114,5,0,0,0,114,193,0,0,0,114,194,0,0,0,114,
+    195,0,0,0,41,9,114,17,0,0,0,218,7,105,109,112,
+    111,114,116,95,114,166,0,0,0,114,131,0,0,0,90,13,
+    112,97,114,101,110,116,95,109,111,100,117,108,101,114,158,0,
+    0,0,114,96,0,0,0,114,97,0,0,0,90,5,99,104,
+    105,108,100,114,10,0,0,0,114,10,0,0,0,114,11,0,
+    0,0,218,23,95,102,105,110,100,95,97,110,100,95,108,111,
+    97,100,95,117,110,108,111,99,107,101,100,199,3,0,0,115,
+    52,0,0,0,0,1,4,1,14,1,4,1,10,1,10,2,
+    10,1,10,1,10,1,2,1,10,1,12,1,16,1,20,1,
+    10,1,8,1,20,2,8,1,6,2,10,1,14,1,2,1,
+    16,1,14,1,16,1,18,1,114,207,0,0,0,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,4,0,0,0,8,0,
+    0,0,67,0,0,0,115,128,0,0,0,116,0,124,0,131,
+    1,143,62,1,0,116,1,106,2,160,3,124,0,116,4,161,
+    2,125,2,124,2,116,4,117,0,114,56,116,5,124,0,124,
+    1,131,2,87,0,2,0,100,1,4,0,4,0,131,3,1,
+    0,83,0,87,0,100,1,4,0,4,0,131,3,1,0,110,
+    16,49,0,115,76,48,0,1,0,1,0,1,0,89,0,1,
+    0,124,2,100,1,117,0,114,116,100,2,160,6,124,0,161,
+    1,125,3,116,7,124,3,124,0,100,3,141,2,130,1,116,
+    8,124,0,131,1,1,0,124,2,83,0,41,4,122,25,70,
+    105,110,100,32,97,110,100,32,108,111,97,100,32,116,104,101,
+    32,109,111,100,117,108,101,46,78,122,40,105,109,112,111,114,
+    116,32,111,102,32,123,125,32,104,97,108,116,101,100,59,32,
+    78,111,110,101,32,105,110,32,115,121,115,46,109,111,100,117,
+    108,101,115,114,16,0,0,0,41,9,114,51,0,0,0,114,
+    15,0,0,0,114,93,0,0,0,114,35,0,0,0,218,14,
+    95,78,69,69,68,83,95,76,79,65,68,73,78,71,114,207,
+    0,0,0,114,46,0,0,0,114,205,0,0,0,114,66,0,
+    0,0,41,4,114,17,0,0,0,114,206,0,0,0,114,97,
+    0,0,0,114,76,0,0,0,114,10,0,0,0,114,10,0,
+    0,0,114,11,0,0,0,218,14,95,102,105,110,100,95,97,
+    110,100,95,108,111,97,100,234,3,0,0,115,22,0,0,0,
+    0,2,10,1,14,1,8,1,54,2,8,1,4,1,2,255,
+    4,2,12,2,8,1,114,209,0,0,0,114,22,0,0,0,
+    99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
+    0,4,0,0,0,67,0,0,0,115,42,0,0,0,116,0,
+    124,0,124,1,124,2,131,3,1,0,124,2,100,1,107,4,
+    114,32,116,1,124,0,124,1,124,2,131,3,125,0,116,2,
+    124,0,116,3,131,2,83,0,41,2,97,50,1,0,0,73,
+    109,112,111,114,116,32,97,110,100,32,114,101,116,117,114,110,
+    32,116,104,101,32,109,111,100,117,108,101,32,98,97,115,101,
+    100,32,111,110,32,105,116,115,32,110,97,109,101,44,32,116,
+    104,101,32,112,97,99,107,97,103,101,32,116,104,101,32,99,
+    97,108,108,32,105,115,10,32,32,32,32,98,101,105,110,103,
+    32,109,97,100,101,32,102,114,111,109,44,32,97,110,100,32,
+    116,104,101,32,108,101,118,101,108,32,97,100,106,117,115,116,
+    109,101,110,116,46,10,10,32,32,32,32,84,104,105,115,32,
+    102,117,110,99,116,105,111,110,32,114,101,112,114,101,115,101,
+    110,116,115,32,116,104,101,32,103,114,101,97,116,101,115,116,
+    32,99,111,109,109,111,110,32,100,101,110,111,109,105,110,97,
+    116,111,114,32,111,102,32,102,117,110,99,116,105,111,110,97,
+    108,105,116,121,10,32,32,32,32,98,101,116,119,101,101,110,
+    32,105,109,112,111,114,116,95,109,111,100,117,108,101,32,97,
+    110,100,32,95,95,105,109,112,111,114,116,95,95,46,32,84,
+    104,105,115,32,105,110,99,108,117,100,101,115,32,115,101,116,
+    116,105,110,103,32,95,95,112,97,99,107,97,103,101,95,95,
+    32,105,102,10,32,32,32,32,116,104,101,32,108,111,97,100,
+    101,114,32,100,105,100,32,110,111,116,46,10,10,32,32,32,
+    32,114,22,0,0,0,41,4,114,202,0,0,0,114,189,0,
+    0,0,114,209,0,0,0,218,11,95,103,99,100,95,105,109,
+    112,111,114,116,114,201,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,114,210,0,0,0,250,3,0,
+    0,115,8,0,0,0,0,9,12,1,8,1,12,1,114,210,
+    0,0,0,169,1,218,9,114,101,99,117,114,115,105,118,101,
+    99,3,0,0,0,0,0,0,0,1,0,0,0,8,0,0,
+    0,11,0,0,0,67,0,0,0,115,232,0,0,0,124,1,
+    68,0,93,222,125,4,116,0,124,4,116,1,131,2,115,66,
+    124,3,114,34,124,0,106,2,100,1,23,0,125,5,110,4,
+    100,2,125,5,116,3,100,3,124,5,155,0,100,4,116,4,
+    124,4,131,1,106,2,155,0,157,4,131,1,130,1,113,4,
+    124,4,100,5,107,2,114,108,124,3,115,226,116,5,124,0,
+    100,6,131,2,114,226,116,6,124,0,124,0,106,7,124,2,
+    100,7,100,8,141,4,1,0,113,4,116,5,124,0,124,4,
+    131,2,115,4,100,9,160,8,124,0,106,2,124,4,161,2,
+    125,6,122,14,116,9,124,2,124,6,131,2,1,0,87,0,
+    113,4,4,0,116,10,121,224,1,0,125,7,1,0,122,54,
+    124,7,106,11,124,6,107,2,114,202,116,12,106,13,160,14,
+    124,6,116,15,161,2,100,10,117,1,114,202,87,0,89,0,
+    100,10,125,7,126,7,113,4,130,0,87,0,89,0,100,10,
+    125,7,126,7,113,4,100,10,125,7,126,7,48,0,48,0,
+    113,4,124,0,83,0,41,11,122,238,70,105,103,117,114,101,
+    32,111,117,116,32,119,104,97,116,32,95,95,105,109,112,111,
+    114,116,95,95,32,115,104,111,117,108,100,32,114,101,116,117,
+    114,110,46,10,10,32,32,32,32,84,104,101,32,105,109,112,
+    111,114,116,95,32,112,97,114,97,109,101,116,101,114,32,105,
+    115,32,97,32,99,97,108,108,97,98,108,101,32,119,104,105,
+    99,104,32,116,97,107,101,115,32,116,104,101,32,110,97,109,
+    101,32,111,102,32,109,111,100,117,108,101,32,116,111,10,32,
+    32,32,32,105,109,112,111,114,116,46,32,73,116,32,105,115,
+    32,114,101,113,117,105,114,101,100,32,116,111,32,100,101,99,
+    111,117,112,108,101,32,116,104,101,32,102,117,110,99,116,105,
+    111,110,32,102,114,111,109,32,97,115,115,117,109,105,110,103,
+    32,105,109,112,111,114,116,108,105,98,39,115,10,32,32,32,
+    32,105,109,112,111,114,116,32,105,109,112,108,101,109,101,110,
+    116,97,116,105,111,110,32,105,115,32,100,101,115,105,114,101,
+    100,46,10,10,32,32,32,32,122,8,46,95,95,97,108,108,
+    95,95,122,13,96,96,102,114,111,109,32,108,105,115,116,39,
+    39,122,8,73,116,101,109,32,105,110,32,122,18,32,109,117,
+    115,116,32,98,101,32,115,116,114,44,32,110,111,116,32,250,
+    1,42,218,7,95,95,97,108,108,95,95,84,114,211,0,0,
+    0,114,184,0,0,0,78,41,16,114,197,0,0,0,114,198,
+    0,0,0,114,1,0,0,0,114,199,0,0,0,114,14,0,
+    0,0,114,4,0,0,0,218,16,95,104,97,110,100,108,101,
+    95,102,114,111,109,108,105,115,116,114,214,0,0,0,114,46,
+    0,0,0,114,68,0,0,0,114,205,0,0,0,114,17,0,
+    0,0,114,15,0,0,0,114,93,0,0,0,114,35,0,0,
+    0,114,208,0,0,0,41,8,114,97,0,0,0,218,8,102,
+    114,111,109,108,105,115,116,114,206,0,0,0,114,212,0,0,
+    0,218,1,120,90,5,119,104,101,114,101,90,9,102,114,111,
+    109,95,110,97,109,101,90,3,101,120,99,114,10,0,0,0,
+    114,10,0,0,0,114,11,0,0,0,114,215,0,0,0,9,
+    4,0,0,115,48,0,0,0,0,10,8,1,10,1,4,1,
+    12,2,4,1,10,1,8,255,10,2,8,1,14,1,10,1,
+    2,255,8,2,10,1,14,1,2,1,14,1,14,4,10,1,
+    16,255,2,2,12,1,26,1,114,215,0,0,0,99,1,0,
+    0,0,0,0,0,0,0,0,0,0,3,0,0,0,6,0,
+    0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,
+    1,161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,
+    1,100,3,117,1,114,82,124,2,100,3,117,1,114,78,124,
+    1,124,2,106,1,107,3,114,78,116,2,106,3,100,4,124,
+    1,155,2,100,5,124,2,106,1,155,2,100,6,157,5,116,
+    4,100,7,100,8,141,3,1,0,124,1,83,0,124,2,100,
+    3,117,1,114,96,124,2,106,1,83,0,116,2,106,3,100,
+    9,116,4,100,7,100,8,141,3,1,0,124,0,100,10,25,
+    0,125,1,100,11,124,0,118,1,114,142,124,1,160,5,100,
+    12,161,1,100,13,25,0,125,1,124,1,83,0,41,14,122,
+    167,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32,
+    95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117,
+    108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97,
+    99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103,
+    117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,
+    100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100,
+    32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10,
+    32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116,
+    32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114,
+    32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119,
+    110,46,10,10,32,32,32,32,114,146,0,0,0,114,106,0,
+    0,0,78,122,32,95,95,112,97,99,107,97,103,101,95,95,
+    32,33,61,32,95,95,115,112,101,99,95,95,46,112,97,114,
+    101,110,116,32,40,122,4,32,33,61,32,250,1,41,233,3,
+    0,0,0,41,1,90,10,115,116,97,99,107,108,101,118,101,
+    108,122,89,99,97,110,39,116,32,114,101,115,111,108,118,101,
+    32,112,97,99,107,97,103,101,32,102,114,111,109,32,95,95,
+    115,112,101,99,95,95,32,111,114,32,95,95,112,97,99,107,
+    97,103,101,95,95,44,32,102,97,108,108,105,110,103,32,98,
+    97,99,107,32,111,110,32,95,95,110,97,109,101,95,95,32,
+    97,110,100,32,95,95,112,97,116,104,95,95,114,1,0,0,
+    0,114,142,0,0,0,114,129,0,0,0,114,22,0,0,0,
+    41,6,114,35,0,0,0,114,131,0,0,0,114,193,0,0,
+    0,114,194,0,0,0,114,195,0,0,0,114,130,0,0,0,
+    41,3,218,7,103,108,111,98,97,108,115,114,187,0,0,0,
+    114,96,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+    11,0,0,0,218,17,95,99,97,108,99,95,95,95,112,97,
+    99,107,97,103,101,95,95,46,4,0,0,115,42,0,0,0,
+    0,7,10,1,10,1,8,1,18,1,6,1,2,255,4,1,
+    4,255,6,2,4,254,6,3,4,1,8,1,6,2,6,2,
+    4,254,6,3,8,1,8,1,14,1,114,221,0,0,0,114,
+    10,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0,
+    0,9,0,0,0,5,0,0,0,67,0,0,0,115,180,0,
+    0,0,124,4,100,1,107,2,114,18,116,0,124,0,131,1,
+    125,5,110,36,124,1,100,2,117,1,114,30,124,1,110,2,
+    105,0,125,6,116,1,124,6,131,1,125,7,116,0,124,0,
+    124,7,124,4,131,3,125,5,124,3,115,150,124,4,100,1,
+    107,2,114,84,116,0,124,0,160,2,100,3,161,1,100,1,
+    25,0,131,1,83,0,124,0,115,92,124,5,83,0,116,3,
+    124,0,131,1,116,3,124,0,160,2,100,3,161,1,100,1,
+    25,0,131,1,24,0,125,8,116,4,106,5,124,5,106,6,
+    100,2,116,3,124,5,106,6,131,1,124,8,24,0,133,2,
+    25,0,25,0,83,0,110,26,116,7,124,5,100,4,131,2,
+    114,172,116,8,124,5,124,3,116,0,131,3,83,0,124,5,
+    83,0,100,2,83,0,41,5,97,215,1,0,0,73,109,112,
+    111,114,116,32,97,32,109,111,100,117,108,101,46,10,10,32,
+    32,32,32,84,104,101,32,39,103,108,111,98,97,108,115,39,
+    32,97,114,103,117,109,101,110,116,32,105,115,32,117,115,101,
+    100,32,116,111,32,105,110,102,101,114,32,119,104,101,114,101,
+    32,116,104,101,32,105,109,112,111,114,116,32,105,115,32,111,
+    99,99,117,114,114,105,110,103,32,102,114,111,109,10,32,32,
+    32,32,116,111,32,104,97,110,100,108,101,32,114,101,108,97,
+    116,105,118,101,32,105,109,112,111,114,116,115,46,32,84,104,
+    101,32,39,108,111,99,97,108,115,39,32,97,114,103,117,109,
+    101,110,116,32,105,115,32,105,103,110,111,114,101,100,46,32,
+    84,104,101,10,32,32,32,32,39,102,114,111,109,108,105,115,
+    116,39,32,97,114,103,117,109,101,110,116,32,115,112,101,99,
+    105,102,105,101,115,32,119,104,97,116,32,115,104,111,117,108,
+    100,32,101,120,105,115,116,32,97,115,32,97,116,116,114,105,
+    98,117,116,101,115,32,111,110,32,116,104,101,32,109,111,100,
+    117,108,101,10,32,32,32,32,98,101,105,110,103,32,105,109,
+    112,111,114,116,101,100,32,40,101,46,103,46,32,96,96,102,
+    114,111,109,32,109,111,100,117,108,101,32,105,109,112,111,114,
+    116,32,60,102,114,111,109,108,105,115,116,62,96,96,41,46,
+    32,32,84,104,101,32,39,108,101,118,101,108,39,10,32,32,
+    32,32,97,114,103,117,109,101,110,116,32,114,101,112,114,101,
+    115,101,110,116,115,32,116,104,101,32,112,97,99,107,97,103,
+    101,32,108,111,99,97,116,105,111,110,32,116,111,32,105,109,
+    112,111,114,116,32,102,114,111,109,32,105,110,32,97,32,114,
+    101,108,97,116,105,118,101,10,32,32,32,32,105,109,112,111,
+    114,116,32,40,101,46,103,46,32,96,96,102,114,111,109,32,
+    46,46,112,107,103,32,105,109,112,111,114,116,32,109,111,100,
+    96,96,32,119,111,117,108,100,32,104,97,118,101,32,97,32,
+    39,108,101,118,101,108,39,32,111,102,32,50,41,46,10,10,
+    32,32,32,32,114,22,0,0,0,78,114,129,0,0,0,114,
+    142,0,0,0,41,9,114,210,0,0,0,114,221,0,0,0,
+    218,9,112,97,114,116,105,116,105,111,110,114,186,0,0,0,
+    114,15,0,0,0,114,93,0,0,0,114,1,0,0,0,114,
+    4,0,0,0,114,215,0,0,0,41,9,114,17,0,0,0,
+    114,220,0,0,0,218,6,108,111,99,97,108,115,114,216,0,
+    0,0,114,188,0,0,0,114,97,0,0,0,90,8,103,108,
+    111,98,97,108,115,95,114,187,0,0,0,90,7,99,117,116,
+    95,111,102,102,114,10,0,0,0,114,10,0,0,0,114,11,
+    0,0,0,218,10,95,95,105,109,112,111,114,116,95,95,73,
+    4,0,0,115,30,0,0,0,0,11,8,1,10,2,16,1,
+    8,1,12,1,4,3,8,1,18,1,4,1,4,4,26,3,
+    32,1,10,1,12,2,114,224,0,0,0,99,1,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
+    67,0,0,0,115,38,0,0,0,116,0,160,1,124,0,161,
+    1,125,1,124,1,100,0,117,0,114,30,116,2,100,1,124,
+    0,23,0,131,1,130,1,116,3,124,1,131,1,83,0,41,
+    2,78,122,25,110,111,32,98,117,105,108,116,45,105,110,32,
+    109,111,100,117,108,101,32,110,97,109,101,100,32,41,4,114,
+    161,0,0,0,114,168,0,0,0,114,80,0,0,0,114,160,
+    0,0,0,41,2,114,17,0,0,0,114,96,0,0,0,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,18,
+    95,98,117,105,108,116,105,110,95,102,114,111,109,95,110,97,
+    109,101,110,4,0,0,115,8,0,0,0,0,1,10,1,8,
+    1,12,1,114,225,0,0,0,99,2,0,0,0,0,0,0,
+    0,0,0,0,0,10,0,0,0,5,0,0,0,67,0,0,
+    0,115,166,0,0,0,124,1,97,0,124,0,97,1,116,2,
+    116,1,131,1,125,2,116,1,106,3,160,4,161,0,68,0,
+    93,72,92,2,125,3,125,4,116,5,124,4,124,2,131,2,
+    114,26,124,3,116,1,106,6,118,0,114,60,116,7,125,5,
+    110,18,116,0,160,8,124,3,161,1,114,26,116,9,125,5,
+    110,2,113,26,116,10,124,4,124,5,131,2,125,6,116,11,
+    124,6,124,4,131,2,1,0,113,26,116,1,106,3,116,12,
+    25,0,125,7,100,1,68,0,93,46,125,8,124,8,116,1,
+    106,3,118,1,114,138,116,13,124,8,131,1,125,9,110,10,
+    116,1,106,3,124,8,25,0,125,9,116,14,124,7,124,8,
+    124,9,131,3,1,0,113,114,100,2,83,0,41,3,122,250,
+    83,101,116,117,112,32,105,109,112,111,114,116,108,105,98,32,
+    98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,101,
+    100,101,100,32,98,117,105,108,116,45,105,110,32,109,111,100,
+    117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105,
+    110,103,32,116,104,101,109,10,32,32,32,32,105,110,116,111,
+    32,116,104,101,32,103,108,111,98,97,108,32,110,97,109,101,
+    115,112,97,99,101,46,10,10,32,32,32,32,65,115,32,115,
+    121,115,32,105,115,32,110,101,101,100,101,100,32,102,111,114,
+    32,115,121,115,46,109,111,100,117,108,101,115,32,97,99,99,
+    101,115,115,32,97,110,100,32,95,105,109,112,32,105,115,32,
+    110,101,101,100,101,100,32,116,111,32,108,111,97,100,32,98,
+    117,105,108,116,45,105,110,10,32,32,32,32,109,111,100,117,
+    108,101,115,44,32,116,104,111,115,101,32,116,119,111,32,109,
+    111,100,117,108,101,115,32,109,117,115,116,32,98,101,32,101,
+    120,112,108,105,99,105,116,108,121,32,112,97,115,115,101,100,
+    32,105,110,46,10,10,32,32,32,32,41,3,114,23,0,0,
+    0,114,193,0,0,0,114,65,0,0,0,78,41,15,114,58,
+    0,0,0,114,15,0,0,0,114,14,0,0,0,114,93,0,
+    0,0,218,5,105,116,101,109,115,114,197,0,0,0,114,79,
+    0,0,0,114,161,0,0,0,114,89,0,0,0,114,175,0,
+    0,0,114,143,0,0,0,114,149,0,0,0,114,1,0,0,
+    0,114,225,0,0,0,114,5,0,0,0,41,10,218,10,115,
+    121,115,95,109,111,100,117,108,101,218,11,95,105,109,112,95,
+    109,111,100,117,108,101,90,11,109,111,100,117,108,101,95,116,
+    121,112,101,114,17,0,0,0,114,97,0,0,0,114,110,0,
+    0,0,114,96,0,0,0,90,11,115,101,108,102,95,109,111,
+    100,117,108,101,90,12,98,117,105,108,116,105,110,95,110,97,
+    109,101,90,14,98,117,105,108,116,105,110,95,109,111,100,117,
+    108,101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+    0,218,6,95,115,101,116,117,112,117,4,0,0,115,36,0,
+    0,0,0,9,4,1,4,3,8,1,18,1,10,1,10,1,
+    6,1,10,1,6,2,2,1,10,1,12,3,10,1,8,1,
+    10,1,10,2,10,1,114,229,0,0,0,99,2,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
+    67,0,0,0,115,38,0,0,0,116,0,124,0,124,1,131,
+    2,1,0,116,1,106,2,160,3,116,4,161,1,1,0,116,
+    1,106,2,160,3,116,5,161,1,1,0,100,1,83,0,41,
+    2,122,48,73,110,115,116,97,108,108,32,105,109,112,111,114,
+    116,101,114,115,32,102,111,114,32,98,117,105,108,116,105,110,
+    32,97,110,100,32,102,114,111,122,101,110,32,109,111,100,117,
+    108,101,115,78,41,6,114,229,0,0,0,114,15,0,0,0,
+    114,192,0,0,0,114,120,0,0,0,114,161,0,0,0,114,
+    175,0,0,0,41,2,114,227,0,0,0,114,228,0,0,0,
     114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
-    17,95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,
-    95,95,30,4,0,0,115,38,0,0,0,0,7,10,1,10,
-    1,8,1,18,1,22,2,2,0,2,254,6,3,4,1,8,
-    1,6,2,6,2,2,0,2,254,6,3,8,1,8,1,14,
-    1,114,219,0,0,0,114,10,0,0,0,99,5,0,0,0,
-    0,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,
-    67,0,0,0,115,180,0,0,0,124,4,100,1,107,2,114,
-    18,116,0,124,0,131,1,125,5,110,36,124,1,100,2,107,
-    9,114,30,124,1,110,2,105,0,125,6,116,1,124,6,131,
-    1,125,7,116,0,124,0,124,7,124,4,131,3,125,5,124,
-    3,115,150,124,4,100,1,107,2,114,84,116,0,124,0,160,
-    2,100,3,161,1,100,1,25,0,131,1,83,0,124,0,115,
-    92,124,5,83,0,116,3,124,0,131,1,116,3,124,0,160,
-    2,100,3,161,1,100,1,25,0,131,1,24,0,125,8,116,
-    4,106,5,124,5,106,6,100,2,116,3,124,5,106,6,131,
-    1,124,8,24,0,133,2,25,0,25,0,83,0,110,26,116,
-    7,124,5,100,4,131,2,114,172,116,8,124,5,124,3,116,
-    0,131,3,83,0,124,5,83,0,100,2,83,0,41,5,97,
-    215,1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,
-    117,108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,
-    108,111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,
-    32,105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,
-    114,32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,
-    114,116,32,105,115,32,111,99,99,117,114,114,105,110,103,32,
-    102,114,111,109,10,32,32,32,32,116,111,32,104,97,110,100,
-    108,101,32,114,101,108,97,116,105,118,101,32,105,109,112,111,
-    114,116,115,46,32,84,104,101,32,39,108,111,99,97,108,115,
-    39,32,97,114,103,117,109,101,110,116,32,105,115,32,105,103,
-    110,111,114,101,100,46,32,84,104,101,10,32,32,32,32,39,
-    102,114,111,109,108,105,115,116,39,32,97,114,103,117,109,101,
-    110,116,32,115,112,101,99,105,102,105,101,115,32,119,104,97,
-    116,32,115,104,111,117,108,100,32,101,120,105,115,116,32,97,
-    115,32,97,116,116,114,105,98,117,116,101,115,32,111,110,32,
-    116,104,101,32,109,111,100,117,108,101,10,32,32,32,32,98,
-    101,105,110,103,32,105,109,112,111,114,116,101,100,32,40,101,
-    46,103,46,32,96,96,102,114,111,109,32,109,111,100,117,108,
-    101,32,105,109,112,111,114,116,32,60,102,114,111,109,108,105,
-    115,116,62,96,96,41,46,32,32,84,104,101,32,39,108,101,
-    118,101,108,39,10,32,32,32,32,97,114,103,117,109,101,110,
-    116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,
-    32,112,97,99,107,97,103,101,32,108,111,99,97,116,105,111,
-    110,32,116,111,32,105,109,112,111,114,116,32,102,114,111,109,
-    32,105,110,32,97,32,114,101,108,97,116,105,118,101,10,32,
-    32,32,32,105,109,112,111,114,116,32,40,101,46,103,46,32,
-    96,96,102,114,111,109,32,46,46,112,107,103,32,105,109,112,
-    111,114,116,32,109,111,100,96,96,32,119,111,117,108,100,32,
-    104,97,118,101,32,97,32,39,108,101,118,101,108,39,32,111,
-    102,32,50,41,46,10,10,32,32,32,32,114,22,0,0,0,
-    78,114,128,0,0,0,114,141,0,0,0,41,9,114,208,0,
-    0,0,114,219,0,0,0,218,9,112,97,114,116,105,116,105,
-    111,110,114,184,0,0,0,114,15,0,0,0,114,92,0,0,
-    0,114,1,0,0,0,114,4,0,0,0,114,213,0,0,0,
-    41,9,114,17,0,0,0,114,218,0,0,0,218,6,108,111,
-    99,97,108,115,114,214,0,0,0,114,187,0,0,0,114,96,
-    0,0,0,90,8,103,108,111,98,97,108,115,95,114,186,0,
-    0,0,90,7,99,117,116,95,111,102,102,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,218,10,95,95,105,109,
-    112,111,114,116,95,95,57,4,0,0,115,30,0,0,0,0,
-    11,8,1,10,2,16,1,8,1,12,1,4,3,8,1,18,
-    1,4,1,4,4,26,3,32,1,10,1,12,2,114,222,0,
-    0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,
-    116,0,160,1,124,0,161,1,125,1,124,1,100,0,107,8,
-    114,30,116,2,100,1,124,0,23,0,131,1,130,1,116,3,
-    124,1,131,1,83,0,41,2,78,122,25,110,111,32,98,117,
-    105,108,116,45,105,110,32,109,111,100,117,108,101,32,110,97,
-    109,101,100,32,41,4,114,160,0,0,0,114,166,0,0,0,
-    114,79,0,0,0,114,159,0,0,0,41,2,114,17,0,0,
-    0,114,95,0,0,0,114,10,0,0,0,114,10,0,0,0,
-    114,11,0,0,0,218,18,95,98,117,105,108,116,105,110,95,
-    102,114,111,109,95,110,97,109,101,94,4,0,0,115,8,0,
-    0,0,0,1,10,1,8,1,12,1,114,223,0,0,0,99,
-    2,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,
-    5,0,0,0,67,0,0,0,115,166,0,0,0,124,1,97,
-    0,124,0,97,1,116,2,116,1,131,1,125,2,116,1,106,
-    3,160,4,161,0,68,0,93,72,92,2,125,3,125,4,116,
-    5,124,4,124,2,131,2,114,26,124,3,116,1,106,6,107,
-    6,114,60,116,7,125,5,110,18,116,0,160,8,124,3,161,
-    1,114,26,116,9,125,5,110,2,113,26,116,10,124,4,124,
-    5,131,2,125,6,116,11,124,6,124,4,131,2,1,0,113,
-    26,116,1,106,3,116,12,25,0,125,7,100,1,68,0,93,
-    46,125,8,124,8,116,1,106,3,107,7,114,138,116,13,124,
-    8,131,1,125,9,110,10,116,1,106,3,124,8,25,0,125,
-    9,116,14,124,7,124,8,124,9,131,3,1,0,113,114,100,
-    2,83,0,41,3,122,250,83,101,116,117,112,32,105,109,112,
-    111,114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,
-    105,110,103,32,110,101,101,100,101,100,32,98,117,105,108,116,
-    45,105,110,32,109,111,100,117,108,101,115,32,97,110,100,32,
-    105,110,106,101,99,116,105,110,103,32,116,104,101,109,10,32,
-    32,32,32,105,110,116,111,32,116,104,101,32,103,108,111,98,
-    97,108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,
-    32,32,32,65,115,32,115,121,115,32,105,115,32,110,101,101,
-    100,101,100,32,102,111,114,32,115,121,115,46,109,111,100,117,
-    108,101,115,32,97,99,99,101,115,115,32,97,110,100,32,95,
-    105,109,112,32,105,115,32,110,101,101,100,101,100,32,116,111,
-    32,108,111,97,100,32,98,117,105,108,116,45,105,110,10,32,
-    32,32,32,109,111,100,117,108,101,115,44,32,116,104,111,115,
-    101,32,116,119,111,32,109,111,100,117,108,101,115,32,109,117,
-    115,116,32,98,101,32,101,120,112,108,105,99,105,116,108,121,
-    32,112,97,115,115,101,100,32,105,110,46,10,10,32,32,32,
-    32,41,3,114,23,0,0,0,114,192,0,0,0,114,64,0,
-    0,0,78,41,15,114,57,0,0,0,114,15,0,0,0,114,
-    14,0,0,0,114,92,0,0,0,218,5,105,116,101,109,115,
-    114,196,0,0,0,114,78,0,0,0,114,160,0,0,0,114,
-    88,0,0,0,114,173,0,0,0,114,142,0,0,0,114,148,
-    0,0,0,114,1,0,0,0,114,223,0,0,0,114,5,0,
-    0,0,41,10,218,10,115,121,115,95,109,111,100,117,108,101,
-    218,11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,
-    111,100,117,108,101,95,116,121,112,101,114,17,0,0,0,114,
-    96,0,0,0,114,109,0,0,0,114,95,0,0,0,90,11,
-    115,101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,
-    108,116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,
-    105,110,95,109,111,100,117,108,101,114,10,0,0,0,114,10,
-    0,0,0,114,11,0,0,0,218,6,95,115,101,116,117,112,
-    101,4,0,0,115,36,0,0,0,0,9,4,1,4,3,8,
-    1,18,1,10,1,10,1,6,1,10,1,6,2,2,1,10,
-    1,12,3,10,1,8,1,10,1,10,2,10,1,114,227,0,
-    0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,
-    116,0,124,0,124,1,131,2,1,0,116,1,106,2,160,3,
-    116,4,161,1,1,0,116,1,106,2,160,3,116,5,161,1,
-    1,0,100,1,83,0,41,2,122,48,73,110,115,116,97,108,
-    108,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32,
-    98,117,105,108,116,105,110,32,97,110,100,32,102,114,111,122,
-    101,110,32,109,111,100,117,108,101,115,78,41,6,114,227,0,
-    0,0,114,15,0,0,0,114,191,0,0,0,114,120,0,0,
-    0,114,160,0,0,0,114,173,0,0,0,41,2,114,225,0,
-    0,0,114,226,0,0,0,114,10,0,0,0,114,10,0,0,
-    0,114,11,0,0,0,218,8,95,105,110,115,116,97,108,108,
-    136,4,0,0,115,6,0,0,0,0,2,10,2,12,1,114,
-    228,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
-    0,1,0,0,0,4,0,0,0,67,0,0,0,115,32,0,
-    0,0,100,1,100,2,108,0,125,0,124,0,97,1,124,0,
-    160,2,116,3,106,4,116,5,25,0,161,1,1,0,100,2,
-    83,0,41,3,122,57,73,110,115,116,97,108,108,32,105,109,
-    112,111,114,116,101,114,115,32,116,104,97,116,32,114,101,113,
-    117,105,114,101,32,101,120,116,101,114,110,97,108,32,102,105,
-    108,101,115,121,115,116,101,109,32,97,99,99,101,115,115,114,
-    22,0,0,0,78,41,6,218,26,95,102,114,111,122,101,110,
-    95,105,109,112,111,114,116,108,105,98,95,101,120,116,101,114,
-    110,97,108,114,126,0,0,0,114,228,0,0,0,114,15,0,
-    0,0,114,92,0,0,0,114,1,0,0,0,41,1,114,229,
-    0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,218,27,95,105,110,115,116,97,108,108,95,101,120,116,
-    101,114,110,97,108,95,105,109,112,111,114,116,101,114,115,144,
-    4,0,0,115,6,0,0,0,0,3,8,1,4,1,114,230,
-    0,0,0,41,2,78,78,41,1,78,41,2,78,114,22,0,
-    0,0,41,4,78,78,114,10,0,0,0,114,22,0,0,0,
-    41,50,114,3,0,0,0,114,126,0,0,0,114,12,0,0,
-    0,114,18,0,0,0,114,60,0,0,0,114,33,0,0,0,
-    114,42,0,0,0,114,19,0,0,0,114,20,0,0,0,114,
-    49,0,0,0,114,50,0,0,0,114,53,0,0,0,114,65,
-    0,0,0,114,67,0,0,0,114,76,0,0,0,114,86,0,
-    0,0,114,90,0,0,0,114,97,0,0,0,114,111,0,0,
-    0,114,112,0,0,0,114,91,0,0,0,114,142,0,0,0,
-    114,148,0,0,0,114,152,0,0,0,114,107,0,0,0,114,
-    93,0,0,0,114,158,0,0,0,114,159,0,0,0,114,94,
-    0,0,0,114,160,0,0,0,114,173,0,0,0,114,178,0,
-    0,0,114,188,0,0,0,114,190,0,0,0,114,195,0,0,
-    0,114,200,0,0,0,90,15,95,69,82,82,95,77,83,71,
-    95,80,82,69,70,73,88,114,202,0,0,0,114,205,0,0,
-    0,218,6,111,98,106,101,99,116,114,206,0,0,0,114,207,
-    0,0,0,114,208,0,0,0,114,213,0,0,0,114,219,0,
-    0,0,114,222,0,0,0,114,223,0,0,0,114,227,0,0,
-    0,114,228,0,0,0,114,230,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
-    8,60,109,111,100,117,108,101,62,1,0,0,0,115,94,0,
-    0,0,4,24,4,2,8,8,8,8,4,2,4,3,16,4,
-    14,68,14,21,14,16,8,37,8,17,8,11,14,8,8,11,
-    8,12,8,16,8,36,14,101,16,26,10,45,14,72,8,17,
-    8,17,8,30,8,37,8,42,8,15,14,73,14,79,14,13,
-    8,9,8,9,10,47,8,16,4,1,8,2,8,27,6,3,
-    8,16,10,15,14,37,8,27,10,37,8,7,8,35,8,8,
+    8,95,105,110,115,116,97,108,108,152,4,0,0,115,6,0,
+    0,0,0,2,10,2,12,1,114,230,0,0,0,99,0,0,
+    0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,
+    0,0,67,0,0,0,115,32,0,0,0,100,1,100,2,108,
+    0,125,0,124,0,97,1,124,0,160,2,116,3,106,4,116,
+    5,25,0,161,1,1,0,100,2,83,0,41,3,122,57,73,
+    110,115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,
+    32,116,104,97,116,32,114,101,113,117,105,114,101,32,101,120,
+    116,101,114,110,97,108,32,102,105,108,101,115,121,115,116,101,
+    109,32,97,99,99,101,115,115,114,22,0,0,0,78,41,6,
+    218,26,95,102,114,111,122,101,110,95,105,109,112,111,114,116,
+    108,105,98,95,101,120,116,101,114,110,97,108,114,127,0,0,
+    0,114,230,0,0,0,114,15,0,0,0,114,93,0,0,0,
+    114,1,0,0,0,41,1,114,231,0,0,0,114,10,0,0,
+    0,114,10,0,0,0,114,11,0,0,0,218,27,95,105,110,
+    115,116,97,108,108,95,101,120,116,101,114,110,97,108,95,105,
+    109,112,111,114,116,101,114,115,160,4,0,0,115,6,0,0,
+    0,0,3,8,1,4,1,114,232,0,0,0,41,2,78,78,
+    41,1,78,41,2,78,114,22,0,0,0,41,4,78,78,114,
+    10,0,0,0,114,22,0,0,0,41,50,114,3,0,0,0,
+    114,127,0,0,0,114,12,0,0,0,114,18,0,0,0,114,
+    60,0,0,0,114,34,0,0,0,114,44,0,0,0,114,19,
+    0,0,0,114,20,0,0,0,114,50,0,0,0,114,51,0,
+    0,0,114,54,0,0,0,114,66,0,0,0,114,68,0,0,
+    0,114,77,0,0,0,114,87,0,0,0,114,91,0,0,0,
+    114,98,0,0,0,114,112,0,0,0,114,113,0,0,0,114,
+    92,0,0,0,114,143,0,0,0,114,149,0,0,0,114,153,
+    0,0,0,114,108,0,0,0,114,94,0,0,0,114,159,0,
+    0,0,114,160,0,0,0,114,95,0,0,0,114,161,0,0,
+    0,114,175,0,0,0,114,180,0,0,0,114,189,0,0,0,
+    114,191,0,0,0,114,196,0,0,0,114,202,0,0,0,90,
+    15,95,69,82,82,95,77,83,71,95,80,82,69,70,73,88,
+    114,204,0,0,0,114,207,0,0,0,218,6,111,98,106,101,
+    99,116,114,208,0,0,0,114,209,0,0,0,114,210,0,0,
+    0,114,215,0,0,0,114,221,0,0,0,114,224,0,0,0,
+    114,225,0,0,0,114,229,0,0,0,114,230,0,0,0,114,
+    232,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,218,8,60,109,111,100,117,108,
+    101,62,1,0,0,0,115,94,0,0,0,4,24,4,2,8,
+    8,8,8,4,2,4,3,16,4,14,77,14,21,14,16,8,
+    37,8,17,8,11,14,8,8,11,8,12,8,16,8,36,14,
+    101,16,26,10,45,14,72,8,17,8,17,8,30,8,37,8,
+    42,8,15,14,75,14,79,14,13,8,9,8,9,10,47,8,
+    16,4,1,8,2,8,32,6,3,8,16,10,15,14,37,8,
+    27,10,37,8,7,8,35,8,8,
 };
diff --git a/Python/importlib_external.h b/Python/importlib_external.h
index 74d98bd..a8d5d9a 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -69,796 +69,805 @@
     78,67,65,83,69,79,75,115,12,0,0,0,80,89,84,72,
     79,78,67,65,83,69,79,75,99,0,0,0,0,0,0,0,
     0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0,
-    0,115,10,0,0,0,136,0,116,0,106,1,107,6,83,0,
-    41,1,250,53,84,114,117,101,32,105,102,32,102,105,108,101,
-    110,97,109,101,115,32,109,117,115,116,32,98,101,32,99,104,
-    101,99,107,101,100,32,99,97,115,101,45,105,110,115,101,110,
-    115,105,116,105,118,101,108,121,46,41,2,218,3,95,111,115,
-    90,7,101,110,118,105,114,111,110,169,0,169,1,218,3,107,
-    101,121,114,3,0,0,0,250,38,60,102,114,111,122,101,110,
-    32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,
-    115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218,
-    11,95,114,101,108,97,120,95,99,97,115,101,36,0,0,0,
-    115,2,0,0,0,0,2,122,37,95,109,97,107,101,95,114,
-    101,108,97,120,95,99,97,115,101,46,60,108,111,99,97,108,
-    115,62,46,95,114,101,108,97,120,95,99,97,115,101,99,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-    0,0,0,83,0,0,0,115,4,0,0,0,100,1,83,0,
-    41,2,114,1,0,0,0,70,114,3,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,7,0,0,0,40,0,0,0,115,2,0,0,0,0,
-    2,41,5,218,3,115,121,115,218,8,112,108,97,116,102,111,
-    114,109,218,10,115,116,97,114,116,115,119,105,116,104,218,27,
-    95,67,65,83,69,95,73,78,83,69,78,83,73,84,73,86,
-    69,95,80,76,65,84,70,79,82,77,83,218,35,95,67,65,
-    83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,80,
-    76,65,84,70,79,82,77,83,95,83,84,82,95,75,69,89,
-    41,1,114,7,0,0,0,114,3,0,0,0,114,4,0,0,
-    0,114,6,0,0,0,218,16,95,109,97,107,101,95,114,101,
-    108,97,120,95,99,97,115,101,29,0,0,0,115,14,0,0,
-    0,0,1,12,1,12,1,6,2,4,2,14,4,8,3,114,
-    13,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
-    0,1,0,0,0,4,0,0,0,67,0,0,0,115,20,0,
-    0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2,
-    100,3,161,2,83,0,41,4,122,42,67,111,110,118,101,114,
-    116,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,
-    101,114,32,116,111,32,108,105,116,116,108,101,45,101,110,100,
-    105,97,110,46,236,3,0,0,0,255,127,255,127,3,0,233,
-    4,0,0,0,218,6,108,105,116,116,108,101,41,2,218,3,
-    105,110,116,218,8,116,111,95,98,121,116,101,115,41,1,218,
-    1,120,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,218,12,95,112,97,99,107,95,117,105,110,116,51,50,46,
-    0,0,0,115,2,0,0,0,0,2,114,20,0,0,0,99,
-    1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
-    4,0,0,0,67,0,0,0,115,28,0,0,0,116,0,124,
-    0,131,1,100,1,107,2,115,16,116,1,130,1,116,2,160,
-    3,124,0,100,2,161,2,83,0,41,3,122,47,67,111,110,
-    118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32,
-    108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111,
-    32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0,
-    0,114,16,0,0,0,169,4,218,3,108,101,110,218,14,65,
-    115,115,101,114,116,105,111,110,69,114,114,111,114,114,17,0,
-    0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1,
-    218,4,100,97,116,97,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,218,14,95,117,110,112,97,99,107,95,117,
-    105,110,116,51,50,51,0,0,0,115,4,0,0,0,0,2,
-    16,1,114,27,0,0,0,99,1,0,0,0,0,0,0,0,
-    0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,
-    115,28,0,0,0,116,0,124,0,131,1,100,1,107,2,115,
-    16,116,1,130,1,116,2,160,3,124,0,100,2,161,2,83,
-    0,41,3,122,47,67,111,110,118,101,114,116,32,50,32,98,
-    121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101,
-    110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101,
-    103,101,114,46,233,2,0,0,0,114,16,0,0,0,114,21,
-    0,0,0,114,25,0,0,0,114,3,0,0,0,114,3,0,
-    0,0,114,6,0,0,0,218,14,95,117,110,112,97,99,107,
-    95,117,105,110,116,49,54,56,0,0,0,115,4,0,0,0,
-    0,2,16,1,114,29,0,0,0,99,0,0,0,0,0,0,
-    0,0,0,0,0,0,1,0,0,0,4,0,0,0,71,0,
-    0,0,115,20,0,0,0,116,0,160,1,100,1,100,2,132,
-    0,124,0,68,0,131,1,161,1,83,0,41,3,122,31,82,
-    101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
-    115,46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,5,
-    0,0,0,83,0,0,0,115,26,0,0,0,103,0,124,0,
-    93,18,125,1,124,1,114,4,124,1,160,0,116,1,161,1,
-    145,2,113,4,83,0,114,3,0,0,0,41,2,218,6,114,
-    115,116,114,105,112,218,15,112,97,116,104,95,115,101,112,97,
-    114,97,116,111,114,115,41,2,218,2,46,48,218,4,112,97,
-    114,116,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,218,10,60,108,105,115,116,99,111,109,112,62,64,0,0,
-    0,115,6,0,0,0,6,1,2,0,4,255,122,30,95,112,
-    97,116,104,95,106,111,105,110,46,60,108,111,99,97,108,115,
-    62,46,60,108,105,115,116,99,111,109,112,62,41,2,218,8,
-    112,97,116,104,95,115,101,112,218,4,106,111,105,110,41,1,
-    218,10,112,97,116,104,95,112,97,114,116,115,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,97,
-    116,104,95,106,111,105,110,62,0,0,0,115,6,0,0,0,
-    0,2,10,1,2,255,114,38,0,0,0,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
-    67,0,0,0,115,96,0,0,0,116,0,116,1,131,1,100,
-    1,107,2,114,36,124,0,160,2,116,3,161,1,92,3,125,
-    1,125,2,125,3,124,1,124,3,102,2,83,0,116,4,124,
-    0,131,1,68,0,93,42,125,4,124,4,116,1,107,6,114,
-    44,124,0,106,5,124,4,100,1,100,2,141,2,92,2,125,
-    1,125,3,124,1,124,3,102,2,2,0,1,0,83,0,113,
-    44,100,3,124,0,102,2,83,0,41,4,122,32,82,101,112,
-    108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,
-    112,97,116,104,46,115,112,108,105,116,40,41,46,233,1,0,
-    0,0,41,1,90,8,109,97,120,115,112,108,105,116,218,0,
-    41,6,114,22,0,0,0,114,31,0,0,0,218,10,114,112,
-    97,114,116,105,116,105,111,110,114,35,0,0,0,218,8,114,
-    101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,
-    5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,
-    95,218,4,116,97,105,108,114,19,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,11,95,112,97,
-    116,104,95,115,112,108,105,116,68,0,0,0,115,16,0,0,
-    0,0,2,12,1,16,1,8,1,12,1,8,1,18,1,14,
-    1,114,47,0,0,0,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
-    10,0,0,0,116,0,160,1,124,0,161,1,83,0,41,1,
-    122,126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,
-    10,10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,
-    97,114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,
-    111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,
-    32,116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,
-    101,120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,
-    40,101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,
-    32,114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,
-    41,2,114,2,0,0,0,90,4,115,116,97,116,169,1,114,
-    44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
-    0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,80,
-    0,0,0,115,2,0,0,0,0,7,114,49,0,0,0,99,
-    2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
-    8,0,0,0,67,0,0,0,115,50,0,0,0,122,12,116,
-    0,124,0,131,1,125,2,87,0,110,22,4,0,116,1,107,
-    10,114,34,1,0,1,0,1,0,89,0,100,1,83,0,88,
-    0,124,2,106,2,100,2,64,0,124,1,107,2,83,0,41,
-    3,122,49,84,101,115,116,32,119,104,101,116,104,101,114,32,
-    116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32,
-    115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,
-    121,112,101,46,70,105,0,240,0,0,41,3,114,49,0,0,
-    0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,
-    111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,101,
-    90,9,115,116,97,116,95,105,110,102,111,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,18,95,112,97,116,
-    104,95,105,115,95,109,111,100,101,95,116,121,112,101,90,0,
-    0,0,115,10,0,0,0,0,2,2,1,12,1,14,1,8,
-    1,114,53,0,0,0,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
-    10,0,0,0,116,0,124,0,100,1,131,2,83,0,41,2,
-    122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111,
-    114,32,111,115,46,112,97,116,104,46,105,115,102,105,108,101,
-    46,105,0,128,0,0,41,1,114,53,0,0,0,114,48,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,99,
-    0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,99,
-    1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
-    3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,115,
-    12,116,0,160,1,161,0,125,0,116,2,124,0,100,1,131,
-    2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101,
-    110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,
-    115,100,105,114,46,105,0,64,0,0,41,3,114,2,0,0,
-    0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,48,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,104,
-    0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,56,
-    0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0,
-    0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,100,
-    2,133,2,25,0,116,2,107,6,83,0,41,3,122,142,82,
-    101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
-    115,46,112,97,116,104,46,105,115,97,98,115,46,10,10,32,
-    32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,87,
-    105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,108,
-    97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,100,
-    114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,115,
-    32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,10,
-    32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,98,
-    115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,0,
-    0,0,233,3,0,0,0,41,3,114,10,0,0,0,114,31,
-    0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119,
-    105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,
-    112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,2,
-    0,0,0,0,6,114,59,0,0,0,233,182,1,0,0,99,
-    3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
-    11,0,0,0,67,0,0,0,115,162,0,0,0,100,1,160,
-    0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160,
-    3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106,
-    6,66,0,124,2,100,2,64,0,161,3,125,4,122,50,116,
-    7,160,8,124,4,100,3,161,2,143,16,125,5,124,5,160,
-    9,124,1,161,1,1,0,87,0,53,0,81,0,82,0,88,
-    0,116,2,160,10,124,3,124,0,161,2,1,0,87,0,110,
-    58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,122,
-    14,116,2,160,12,124,3,161,1,1,0,87,0,110,20,4,
-    0,116,11,107,10,114,148,1,0,1,0,1,0,89,0,110,
-    2,88,0,130,0,89,0,110,2,88,0,100,4,83,0,41,
-    5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,102,
-    117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,101,
-    32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,32,
-    97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,32,
-    66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,104,
-    97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,115,
-    116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,117,
-    114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,102,
-    32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,97,
-    114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,109,
-    112,116,101,100,46,250,5,123,125,46,123,125,114,60,0,0,
-    0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,116,
-    218,2,105,100,114,2,0,0,0,90,4,111,112,101,110,90,
-    6,79,95,69,88,67,76,90,7,79,95,67,82,69,65,84,
-    90,8,79,95,87,82,79,78,76,89,218,3,95,105,111,218,
-    6,70,105,108,101,73,79,218,5,119,114,105,116,101,218,7,
-    114,101,112,108,97,99,101,114,50,0,0,0,90,6,117,110,
-    108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,0,
-    114,52,0,0,0,90,8,112,97,116,104,95,116,109,112,90,
-    2,102,100,218,4,102,105,108,101,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,13,95,119,114,105,116,101,
-    95,97,116,111,109,105,99,120,0,0,0,115,30,0,0,0,
-    0,5,16,1,6,1,16,0,6,255,4,2,2,3,14,1,
-    20,1,16,1,14,1,2,1,14,1,14,1,6,1,114,69,
-    0,0,0,105,85,13,0,0,114,28,0,0,0,114,16,0,
-    0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99,
-    97,99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,
-    121,122,4,46,112,121,99,78,41,1,218,12,111,112,116,105,
-    109,105,122,97,116,105,111,110,99,2,0,0,0,0,0,0,
-    0,1,0,0,0,12,0,0,0,5,0,0,0,67,0,0,
-    0,115,88,1,0,0,124,1,100,1,107,9,114,52,116,0,
-    160,1,100,2,116,2,161,2,1,0,124,2,100,1,107,9,
-    114,40,100,3,125,3,116,3,124,3,131,1,130,1,124,1,
-    114,48,100,4,110,2,100,5,125,2,116,4,160,5,124,0,
-    161,1,125,0,116,6,124,0,131,1,92,2,125,4,125,5,
-    124,5,160,7,100,6,161,1,92,3,125,6,125,7,125,8,
-    116,8,106,9,106,10,125,9,124,9,100,1,107,8,114,114,
-    116,11,100,7,131,1,130,1,100,4,160,12,124,6,114,126,
-    124,6,110,2,124,8,124,7,124,9,103,3,161,1,125,10,
-    124,2,100,1,107,8,114,172,116,8,106,13,106,14,100,8,
-    107,2,114,164,100,4,125,2,110,8,116,8,106,13,106,14,
-    125,2,116,15,124,2,131,1,125,2,124,2,100,4,107,3,
-    114,224,124,2,160,16,161,0,115,210,116,17,100,9,160,18,
-    124,2,161,1,131,1,130,1,100,10,160,18,124,10,116,19,
-    124,2,161,3,125,10,124,10,116,20,100,8,25,0,23,0,
-    125,11,116,8,106,21,100,1,107,9,144,1,114,76,116,22,
-    124,4,131,1,144,1,115,16,116,23,116,4,160,24,161,0,
-    124,4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,
-    144,1,114,56,124,4,100,8,25,0,116,25,107,7,144,1,
-    114,56,124,4,100,12,100,1,133,2,25,0,125,4,116,23,
-    116,8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,
-    83,0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,
-    97,254,2,0,0,71,105,118,101,110,32,116,104,101,32,112,
-    97,116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,
-    101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,
-    116,104,32,116,111,32,105,116,115,32,46,112,121,99,32,102,
-    105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,
-    121,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,
-    110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,116,
-    104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,114,
-    110,115,32,116,104,101,32,112,97,116,104,32,116,111,32,116,
-    104,101,10,32,32,32,32,46,112,121,99,32,102,105,108,101,
-    32,99,97,108,99,117,108,97,116,101,100,32,97,115,32,105,
-    102,32,116,104,101,32,46,112,121,32,102,105,108,101,32,119,
-    101,114,101,32,105,109,112,111,114,116,101,100,46,10,10,32,
-    32,32,32,84,104,101,32,39,111,112,116,105,109,105,122,97,
-    116,105,111,110,39,32,112,97,114,97,109,101,116,101,114,32,
-    99,111,110,116,114,111,108,115,32,116,104,101,32,112,114,101,
-    115,117,109,101,100,32,111,112,116,105,109,105,122,97,116,105,
-    111,110,32,108,101,118,101,108,32,111,102,10,32,32,32,32,
-    116,104,101,32,98,121,116,101,99,111,100,101,32,102,105,108,
-    101,46,32,73,102,32,39,111,112,116,105,109,105,122,97,116,
-    105,111,110,39,32,105,115,32,110,111,116,32,78,111,110,101,
-    44,32,116,104,101,32,115,116,114,105,110,103,32,114,101,112,
-    114,101,115,101,110,116,97,116,105,111,110,10,32,32,32,32,
-    111,102,32,116,104,101,32,97,114,103,117,109,101,110,116,32,
-    105,115,32,116,97,107,101,110,32,97,110,100,32,118,101,114,
-    105,102,105,101,100,32,116,111,32,98,101,32,97,108,112,104,
-    97,110,117,109,101,114,105,99,32,40,101,108,115,101,32,86,
-    97,108,117,101,69,114,114,111,114,10,32,32,32,32,105,115,
-    32,114,97,105,115,101,100,41,46,10,10,32,32,32,32,84,
-    104,101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,
-    101,32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,
-    101,112,114,101,99,97,116,101,100,46,32,73,102,32,100,101,
-    98,117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,
-    110,111,116,32,78,111,110,101,44,10,32,32,32,32,97,32,
-    84,114,117,101,32,118,97,108,117,101,32,105,115,32,116,104,
-    101,32,115,97,109,101,32,97,115,32,115,101,116,116,105,110,
-    103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,
-    32,116,111,32,116,104,101,32,101,109,112,116,121,32,115,116,
-    114,105,110,103,10,32,32,32,32,119,104,105,108,101,32,97,
-    32,70,97,108,115,101,32,118,97,108,117,101,32,105,115,32,
-    101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,
-    116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,
-    105,111,110,39,32,116,111,32,39,49,39,46,10,10,32,32,
-    32,32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,
-    110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,
-    103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,
-    111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,
-    111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,
-    32,32,32,78,122,70,116,104,101,32,100,101,98,117,103,95,
-    111,118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,
-    101,114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,
-    59,32,117,115,101,32,39,111,112,116,105,109,105,122,97,116,
-    105,111,110,39,32,105,110,115,116,101,97,100,122,50,100,101,
-    98,117,103,95,111,118,101,114,114,105,100,101,32,111,114,32,
-    111,112,116,105,109,105,122,97,116,105,111,110,32,109,117,115,
-    116,32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,
-    114,40,0,0,0,114,39,0,0,0,218,1,46,250,36,115,
-    121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,
-    110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,
-    111,110,101,233,0,0,0,0,122,24,123,33,114,125,32,105,
-    115,32,110,111,116,32,97,108,112,104,97,110,117,109,101,114,
-    105,99,122,7,123,125,46,123,125,123,125,250,1,58,114,28,
-    0,0,0,41,28,218,9,95,119,97,114,110,105,110,103,115,
-    218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116,
-    105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101,
-    69,114,114,111,114,114,2,0,0,0,218,6,102,115,112,97,
-    116,104,114,47,0,0,0,114,41,0,0,0,114,8,0,0,
-    0,218,14,105,109,112,108,101,109,101,110,116,97,116,105,111,
-    110,218,9,99,97,99,104,101,95,116,97,103,218,19,78,111,
+    0,115,20,0,0,0,116,0,106,1,106,2,12,0,111,18,
+    136,0,116,3,106,4,118,0,83,0,41,1,122,94,84,114,
+    117,101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,
+    109,117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,
+    99,97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,
+    108,121,32,97,110,100,32,105,103,110,111,114,101,32,101,110,
+    118,105,114,111,110,109,101,110,116,32,102,108,97,103,115,32,
+    97,114,101,32,110,111,116,32,115,101,116,46,41,5,218,3,
+    115,121,115,218,5,102,108,97,103,115,218,18,105,103,110,111,
+    114,101,95,101,110,118,105,114,111,110,109,101,110,116,218,3,
+    95,111,115,90,7,101,110,118,105,114,111,110,169,0,169,1,
+    218,3,107,101,121,114,5,0,0,0,250,38,60,102,114,111,
+    122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98,
+    111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,
+    108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,36,
+    0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,107,
+    101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,111,
+    99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,115,
+    101,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+    0,0,1,0,0,0,83,0,0,0,115,4,0,0,0,100,
+    1,83,0,41,2,122,53,84,114,117,101,32,105,102,32,102,
+    105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,
+    32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,
+    115,101,110,115,105,116,105,118,101,108,121,46,70,114,5,0,
+    0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,114,9,0,0,0,40,0,0,0,115,
+    2,0,0,0,0,2,41,5,114,1,0,0,0,218,8,112,
+    108,97,116,102,111,114,109,218,10,115,116,97,114,116,115,119,
+    105,116,104,218,27,95,67,65,83,69,95,73,78,83,69,78,
+    83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,83,
+    218,35,95,67,65,83,69,95,73,78,83,69,78,83,73,84,
+    73,86,69,95,80,76,65,84,70,79,82,77,83,95,83,84,
+    82,95,75,69,89,41,1,114,9,0,0,0,114,5,0,0,
+    0,114,6,0,0,0,114,8,0,0,0,218,16,95,109,97,
+    107,101,95,114,101,108,97,120,95,99,97,115,101,29,0,0,
+    0,115,14,0,0,0,0,1,12,1,12,1,6,2,4,2,
+    14,4,8,3,114,14,0,0,0,99,1,0,0,0,0,0,
+    0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,
+    0,0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,
+    0,160,1,100,2,100,3,161,2,83,0,41,4,122,42,67,
+    111,110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,
+    105,110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,
+    101,45,101,110,100,105,97,110,46,236,3,0,0,0,255,127,
+    255,127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,
+    101,41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,
+    101,115,41,1,218,1,120,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,218,12,95,112,97,99,107,95,117,105,
+    110,116,51,50,46,0,0,0,115,2,0,0,0,0,2,114,
+    21,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+    0,1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,
+    0,0,116,0,124,0,131,1,100,1,107,2,115,16,74,0,
+    130,1,116,1,160,2,124,0,100,2,161,2,83,0,41,3,
+    122,47,67,111,110,118,101,114,116,32,52,32,98,121,116,101,
+    115,32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,
+    97,110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,
+    46,114,16,0,0,0,114,17,0,0,0,169,3,218,3,108,
+    101,110,114,18,0,0,0,218,10,102,114,111,109,95,98,121,
+    116,101,115,169,1,218,4,100,97,116,97,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,218,14,95,117,110,112,
+    97,99,107,95,117,105,110,116,51,50,51,0,0,0,115,4,
+    0,0,0,0,2,16,1,114,27,0,0,0,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,
+    0,67,0,0,0,115,28,0,0,0,116,0,124,0,131,1,
+    100,1,107,2,115,16,74,0,130,1,116,1,160,2,124,0,
+    100,2,161,2,83,0,41,3,122,47,67,111,110,118,101,114,
+    116,32,50,32,98,121,116,101,115,32,105,110,32,108,105,116,
+    116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,
+    32,105,110,116,101,103,101,114,46,233,2,0,0,0,114,17,
+    0,0,0,114,22,0,0,0,114,25,0,0,0,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,218,14,95,117,
+    110,112,97,99,107,95,117,105,110,116,49,54,56,0,0,0,
+    115,4,0,0,0,0,2,16,1,114,29,0,0,0,99,0,
+    0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,
+    0,0,0,71,0,0,0,115,20,0,0,0,116,0,160,1,
+    100,1,100,2,132,0,124,0,68,0,131,1,161,1,83,0,
+    41,3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,
+    102,111,114,32,111,115,46,112,97,116,104,46,106,111,105,110,
+    40,41,46,99,1,0,0,0,0,0,0,0,0,0,0,0,
+    2,0,0,0,5,0,0,0,83,0,0,0,115,26,0,0,
+    0,103,0,124,0,93,18,125,1,124,1,114,4,124,1,160,
+    0,116,1,161,1,145,2,113,4,83,0,114,5,0,0,0,
+    41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104,
+    95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46,
+    48,218,4,112,97,114,116,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,218,10,60,108,105,115,116,99,111,109,
+    112,62,64,0,0,0,115,4,0,0,0,6,1,6,255,122,
+    30,95,112,97,116,104,95,106,111,105,110,46,60,108,111,99,
+    97,108,115,62,46,60,108,105,115,116,99,111,109,112,62,41,
+    2,218,8,112,97,116,104,95,115,101,112,218,4,106,111,105,
+    110,41,1,218,10,112,97,116,104,95,112,97,114,116,115,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,
+    95,112,97,116,104,95,106,111,105,110,62,0,0,0,115,6,
+    0,0,0,0,2,10,1,2,255,114,38,0,0,0,99,1,
+    0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,
+    0,0,0,67,0,0,0,115,96,0,0,0,116,0,116,1,
+    131,1,100,1,107,2,114,36,124,0,160,2,116,3,161,1,
+    92,3,125,1,125,2,125,3,124,1,124,3,102,2,83,0,
+    116,4,124,0,131,1,68,0,93,42,125,4,124,4,116,1,
+    118,0,114,44,124,0,106,5,124,4,100,1,100,2,141,2,
+    92,2,125,1,125,3,124,1,124,3,102,2,2,0,1,0,
+    83,0,113,44,100,3,124,0,102,2,83,0,41,4,122,32,
+    82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,
+    111,115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,
+    233,1,0,0,0,41,1,90,8,109,97,120,115,112,108,105,
+    116,218,0,41,6,114,23,0,0,0,114,31,0,0,0,218,
+    10,114,112,97,114,116,105,116,105,111,110,114,35,0,0,0,
+    218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,108,
+    105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,110,
+    116,218,1,95,218,4,116,97,105,108,114,20,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,
+    95,112,97,116,104,95,115,112,108,105,116,68,0,0,0,115,
+    16,0,0,0,0,2,12,1,16,1,8,1,12,1,8,1,
+    18,1,14,1,114,47,0,0,0,99,1,0,0,0,0,0,
+    0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,
+    0,0,115,10,0,0,0,116,0,160,1,124,0,161,1,83,
+    0,41,1,122,126,83,116,97,116,32,116,104,101,32,112,97,
+    116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32,
+    115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111,
+    110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,
+    105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32,
+    105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32,
+    32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115,
+    116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32,
+    32,32,32,41,2,114,4,0,0,0,90,4,115,116,97,116,
+    169,1,114,44,0,0,0,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,218,10,95,112,97,116,104,95,115,116,
+    97,116,80,0,0,0,115,2,0,0,0,0,7,114,49,0,
+    0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
+    0,0,0,8,0,0,0,67,0,0,0,115,48,0,0,0,
+    122,12,116,0,124,0,131,1,125,2,87,0,110,20,4,0,
+    116,1,121,32,1,0,1,0,1,0,89,0,100,1,83,0,
+    48,0,124,2,106,2,100,2,64,0,124,1,107,2,83,0,
+    41,3,122,49,84,101,115,116,32,119,104,101,116,104,101,114,
+    32,116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,
+    32,115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,
+    116,121,112,101,46,70,105,0,240,0,0,41,3,114,49,0,
+    0,0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,
+    109,111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,
+    101,90,9,115,116,97,116,95,105,110,102,111,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,218,18,95,112,97,
+    116,104,95,105,115,95,109,111,100,101,95,116,121,112,101,90,
+    0,0,0,115,10,0,0,0,0,2,2,1,12,1,12,1,
+    8,1,114,53,0,0,0,99,1,0,0,0,0,0,0,0,
+    0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
+    115,10,0,0,0,116,0,124,0,100,1,131,2,83,0,41,
+    2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,
+    111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108,
+    101,46,105,0,128,0,0,41,1,114,53,0,0,0,114,48,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,
+    99,0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,
+    99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+    0,3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,
+    115,12,116,0,160,1,161,0,125,0,116,2,124,0,100,1,
+    131,2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,
+    101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,
+    105,115,100,105,114,46,105,0,64,0,0,41,3,114,4,0,
+    0,0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,
+    48,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,
+    104,0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,
+    56,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+    0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,
+    0,0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,
+    100,2,133,2,25,0,116,2,118,0,83,0,41,3,122,142,
+    82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,
+    111,115,46,112,97,116,104,46,105,115,97,98,115,46,10,10,
+    32,32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,
+    87,105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,
+    108,97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,
+    100,114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,
+    115,32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,
+    10,32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,
+    98,115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,
+    0,0,0,233,3,0,0,0,41,3,114,11,0,0,0,114,
+    31,0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,
+    119,105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,
+    95,112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,
+    2,0,0,0,0,6,114,59,0,0,0,233,182,1,0,0,
+    99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
+    0,11,0,0,0,67,0,0,0,115,178,0,0,0,100,1,
+    160,0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,
+    160,3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,
+    106,6,66,0,124,2,100,2,64,0,161,3,125,4,122,70,
+    116,7,160,8,124,4,100,3,161,2,143,26,125,5,124,5,
+    160,9,124,1,161,1,1,0,87,0,100,4,4,0,4,0,
+    131,3,1,0,110,16,49,0,115,94,48,0,1,0,1,0,
+    1,0,89,0,1,0,116,2,160,10,124,3,124,0,161,2,
+    1,0,87,0,110,54,4,0,116,11,121,172,1,0,1,0,
+    1,0,122,14,116,2,160,12,124,3,161,1,1,0,87,0,
+    110,18,4,0,116,11,121,164,1,0,1,0,1,0,89,0,
+    110,2,48,0,130,0,89,0,110,2,48,0,100,4,83,0,
+    41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,
+    102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,
+    101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,
+    32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,
+    32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,
+    104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,
+    115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,
+    117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,
+    102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,
+    97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,
+    109,112,116,101,100,46,250,5,123,125,46,123,125,114,60,0,
+    0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,
+    116,218,2,105,100,114,4,0,0,0,90,4,111,112,101,110,
+    90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65,
+    84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111,
+    218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218,
+    7,114,101,112,108,97,99,101,114,50,0,0,0,90,6,117,
+    110,108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,
+    0,114,52,0,0,0,90,8,112,97,116,104,95,116,109,112,
+    90,2,102,100,218,4,102,105,108,101,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,218,13,95,119,114,105,116,
+    101,95,97,116,111,109,105,99,120,0,0,0,115,28,0,0,
+    0,0,5,16,1,6,1,22,255,4,2,2,3,14,1,40,
+    1,16,1,12,1,2,1,14,1,12,1,6,1,114,69,0,
+    0,0,105,97,13,0,0,114,28,0,0,0,114,17,0,0,
+    0,115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,
+    99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,
+    122,4,46,112,121,99,78,41,1,218,12,111,112,116,105,109,
+    105,122,97,116,105,111,110,99,2,0,0,0,0,0,0,0,
+    1,0,0,0,12,0,0,0,5,0,0,0,67,0,0,0,
+    115,88,1,0,0,124,1,100,1,117,1,114,52,116,0,160,
+    1,100,2,116,2,161,2,1,0,124,2,100,1,117,1,114,
+    40,100,3,125,3,116,3,124,3,131,1,130,1,124,1,114,
+    48,100,4,110,2,100,5,125,2,116,4,160,5,124,0,161,
+    1,125,0,116,6,124,0,131,1,92,2,125,4,125,5,124,
+    5,160,7,100,6,161,1,92,3,125,6,125,7,125,8,116,
+    8,106,9,106,10,125,9,124,9,100,1,117,0,114,114,116,
+    11,100,7,131,1,130,1,100,4,160,12,124,6,114,126,124,
+    6,110,2,124,8,124,7,124,9,103,3,161,1,125,10,124,
+    2,100,1,117,0,114,172,116,8,106,13,106,14,100,8,107,
+    2,114,164,100,4,125,2,110,8,116,8,106,13,106,14,125,
+    2,116,15,124,2,131,1,125,2,124,2,100,4,107,3,114,
+    224,124,2,160,16,161,0,115,210,116,17,100,9,160,18,124,
+    2,161,1,131,1,130,1,100,10,160,18,124,10,116,19,124,
+    2,161,3,125,10,124,10,116,20,100,8,25,0,23,0,125,
+    11,116,8,106,21,100,1,117,1,144,1,114,76,116,22,124,
+    4,131,1,144,1,115,16,116,23,116,4,160,24,161,0,124,
+    4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,144,
+    1,114,56,124,4,100,8,25,0,116,25,118,1,144,1,114,
+    56,124,4,100,12,100,1,133,2,25,0,125,4,116,23,116,
+    8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,83,
+    0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,97,
+    254,2,0,0,71,105,118,101,110,32,116,104,101,32,112,97,
+    116,104,32,116,111,32,97,32,46,112,121,32,102,105,108,101,
+    44,32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,
+    104,32,116,111,32,105,116,115,32,46,112,121,99,32,102,105,
+    108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121,
+    32,102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,
+    101,101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,
+    105,115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,
+    115,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,
+    101,10,32,32,32,32,46,112,121,99,32,102,105,108,101,32,
+    99,97,108,99,117,108,97,116,101,100,32,97,115,32,105,102,
+    32,116,104,101,32,46,112,121,32,102,105,108,101,32,119,101,
+    114,101,32,105,109,112,111,114,116,101,100,46,10,10,32,32,
+    32,32,84,104,101,32,39,111,112,116,105,109,105,122,97,116,
+    105,111,110,39,32,112,97,114,97,109,101,116,101,114,32,99,
+    111,110,116,114,111,108,115,32,116,104,101,32,112,114,101,115,
+    117,109,101,100,32,111,112,116,105,109,105,122,97,116,105,111,
+    110,32,108,101,118,101,108,32,111,102,10,32,32,32,32,116,
+    104,101,32,98,121,116,101,99,111,100,101,32,102,105,108,101,
+    46,32,73,102,32,39,111,112,116,105,109,105,122,97,116,105,
+    111,110,39,32,105,115,32,110,111,116,32,78,111,110,101,44,
+    32,116,104,101,32,115,116,114,105,110,103,32,114,101,112,114,
+    101,115,101,110,116,97,116,105,111,110,10,32,32,32,32,111,
+    102,32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,
+    115,32,116,97,107,101,110,32,97,110,100,32,118,101,114,105,
+    102,105,101,100,32,116,111,32,98,101,32,97,108,112,104,97,
+    110,117,109,101,114,105,99,32,40,101,108,115,101,32,86,97,
+    108,117,101,69,114,114,111,114,10,32,32,32,32,105,115,32,
+    114,97,105,115,101,100,41,46,10,10,32,32,32,32,84,104,
+    101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101,
+    32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101,
+    112,114,101,99,97,116,101,100,46,32,73,102,32,100,101,98,
+    117,103,95,111,118,101,114,114,105,100,101,32,105,115,32,110,
+    111,116,32,78,111,110,101,44,10,32,32,32,32,97,32,84,
+    114,117,101,32,118,97,108,117,101,32,105,115,32,116,104,101,
+    32,115,97,109,101,32,97,115,32,115,101,116,116,105,110,103,
+    32,39,111,112,116,105,109,105,122,97,116,105,111,110,39,32,
+    116,111,32,116,104,101,32,101,109,112,116,121,32,115,116,114,
+    105,110,103,10,32,32,32,32,119,104,105,108,101,32,97,32,
+    70,97,108,115,101,32,118,97,108,117,101,32,105,115,32,101,
+    113,117,105,118,97,108,101,110,116,32,116,111,32,115,101,116,
+    116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,105,
+    111,110,39,32,116,111,32,39,49,39,46,10,10,32,32,32,
+    32,73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,
+    116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,
+    32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,
     116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,
-    114,114,36,0,0,0,218,5,102,108,97,103,115,218,8,111,
-    112,116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,
-    97,108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,
-    114,114,62,0,0,0,218,4,95,79,80,84,218,17,66,89,
-    84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,218,
-    14,112,121,99,97,99,104,101,95,112,114,101,102,105,120,114,
-    59,0,0,0,114,38,0,0,0,114,55,0,0,0,114,31,
-    0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89,
-    67,65,67,72,69,41,12,114,44,0,0,0,90,14,100,101,
-    98,117,103,95,111,118,101,114,114,105,100,101,114,70,0,0,
-    0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,
-    114,46,0,0,0,90,4,98,97,115,101,218,3,115,101,112,
-    218,4,114,101,115,116,90,3,116,97,103,90,15,97,108,109,
-    111,115,116,95,102,105,108,101,110,97,109,101,218,8,102,105,
-    108,101,110,97,109,101,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,218,17,99,97,99,104,101,95,102,114,111,
-    109,95,115,111,117,114,99,101,38,1,0,0,115,72,0,0,
-    0,0,18,8,1,6,1,2,255,4,2,8,1,4,1,8,
-    1,12,1,10,1,12,1,16,1,8,1,8,1,8,1,24,
-    1,8,1,12,1,6,2,8,1,8,1,8,1,8,1,14,
-    1,14,1,12,1,12,9,10,1,14,5,28,1,12,4,2,
-    1,4,1,8,1,2,253,4,5,114,98,0,0,0,99,1,
-    0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,5,
-    0,0,0,67,0,0,0,115,46,1,0,0,116,0,106,1,
-    106,2,100,1,107,8,114,20,116,3,100,2,131,1,130,1,
-    116,4,160,5,124,0,161,1,125,0,116,6,124,0,131,1,
-    92,2,125,1,125,2,100,3,125,3,116,0,106,7,100,1,
-    107,9,114,102,116,0,106,7,160,8,116,9,161,1,125,4,
-    124,1,160,10,124,4,116,11,23,0,161,1,114,102,124,1,
-    116,12,124,4,131,1,100,1,133,2,25,0,125,1,100,4,
-    125,3,124,3,115,144,116,6,124,1,131,1,92,2,125,1,
-    125,5,124,5,116,13,107,3,114,144,116,14,116,13,155,0,
-    100,5,124,0,155,2,157,3,131,1,130,1,124,2,160,15,
-    100,6,161,1,125,6,124,6,100,7,107,7,114,178,116,14,
-    100,8,124,2,155,2,157,2,131,1,130,1,110,92,124,6,
-    100,9,107,2,144,1,114,14,124,2,160,16,100,6,100,10,
-    161,2,100,11,25,0,125,7,124,7,160,10,116,17,161,1,
-    115,228,116,14,100,12,116,17,155,2,157,2,131,1,130,1,
-    124,7,116,12,116,17,131,1,100,1,133,2,25,0,125,8,
-    124,8,160,18,161,0,144,1,115,14,116,14,100,13,124,7,
-    155,2,100,14,157,3,131,1,130,1,124,2,160,19,100,6,
-    161,1,100,15,25,0,125,9,116,20,124,1,124,9,116,21,
-    100,15,25,0,23,0,131,2,83,0,41,16,97,110,1,0,
-    0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32,
-    116,111,32,97,32,46,112,121,99,46,32,102,105,108,101,44,
-    32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104,
-    32,116,111,32,105,116,115,32,46,112,121,32,102,105,108,101,
-    46,10,10,32,32,32,32,84,104,101,32,46,112,121,99,32,
-    102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,
-    101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,
-    115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,
-    32,116,104,101,32,112,97,116,104,32,116,111,10,32,32,32,
-    32,116,104,101,32,46,112,121,32,102,105,108,101,32,99,97,
-    108,99,117,108,97,116,101,100,32,116,111,32,99,111,114,114,
-    101,115,112,111,110,100,32,116,111,32,116,104,101,32,46,112,
-    121,99,32,102,105,108,101,46,32,32,73,102,32,112,97,116,
-    104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99,
-    111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49,
-    52,55,47,52,56,56,32,102,111,114,109,97,116,44,32,86,
-    97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,
-    101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,
-    32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,
-    105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,
-    32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,
-    112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,
-    115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,
-    114,72,0,0,0,70,84,122,31,32,110,111,116,32,98,111,
-    116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99,
-    116,111,114,121,32,105,110,32,114,71,0,0,0,62,2,0,
-    0,0,114,28,0,0,0,114,57,0,0,0,122,29,101,120,
-    112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114,
-    32,51,32,100,111,116,115,32,105,110,32,114,57,0,0,0,
-    114,28,0,0,0,233,254,255,255,255,122,53,111,112,116,105,
-    109,105,122,97,116,105,111,110,32,112,111,114,116,105,111,110,
-    32,111,102,32,102,105,108,101,110,97,109,101,32,100,111,101,
-    115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104,
-    32,122,19,111,112,116,105,109,105,122,97,116,105,111,110,32,
-    108,101,118,101,108,32,122,29,32,105,115,32,110,111,116,32,
-    97,110,32,97,108,112,104,97,110,117,109,101,114,105,99,32,
-    118,97,108,117,101,114,73,0,0,0,41,22,114,8,0,0,
-    0,114,80,0,0,0,114,81,0,0,0,114,82,0,0,0,
-    114,2,0,0,0,114,79,0,0,0,114,47,0,0,0,114,
-    90,0,0,0,114,30,0,0,0,114,31,0,0,0,114,10,
-    0,0,0,114,35,0,0,0,114,22,0,0,0,114,92,0,
-    0,0,114,87,0,0,0,218,5,99,111,117,110,116,114,43,
-    0,0,0,114,88,0,0,0,114,86,0,0,0,218,9,112,
-    97,114,116,105,116,105,111,110,114,38,0,0,0,218,15,83,
-    79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,
-    114,44,0,0,0,114,94,0,0,0,90,16,112,121,99,97,
-    99,104,101,95,102,105,108,101,110,97,109,101,90,23,102,111,
-    117,110,100,95,105,110,95,112,121,99,97,99,104,101,95,112,
-    114,101,102,105,120,90,13,115,116,114,105,112,112,101,100,95,
-    112,97,116,104,90,7,112,121,99,97,99,104,101,90,9,100,
-    111,116,95,99,111,117,110,116,114,70,0,0,0,90,9,111,
-    112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,102,
-    105,108,101,110,97,109,101,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,218,17,115,111,117,114,99,101,95,102,
-    114,111,109,95,99,97,99,104,101,109,1,0,0,115,52,0,
-    0,0,0,9,12,1,8,1,10,1,12,1,4,1,10,1,
-    12,1,14,1,16,1,4,1,4,1,12,1,8,1,18,2,
-    10,1,8,1,16,1,10,1,16,1,10,1,14,2,16,1,
-    10,1,16,2,14,1,114,103,0,0,0,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,5,0,0,0,9,0,0,0,
-    67,0,0,0,115,126,0,0,0,116,0,124,0,131,1,100,
-    1,107,2,114,16,100,2,83,0,124,0,160,1,100,3,161,
-    1,92,3,125,1,125,2,125,3,124,1,114,56,124,3,160,
-    2,161,0,100,4,100,5,133,2,25,0,100,6,107,3,114,
-    60,124,0,83,0,122,12,116,3,124,0,131,1,125,4,87,
-    0,110,36,4,0,116,4,116,5,102,2,107,10,114,108,1,
-    0,1,0,1,0,124,0,100,2,100,5,133,2,25,0,125,
-    4,89,0,110,2,88,0,116,6,124,4,131,1,114,122,124,
-    4,83,0,124,0,83,0,41,7,122,188,67,111,110,118,101,
-    114,116,32,97,32,98,121,116,101,99,111,100,101,32,102,105,
-    108,101,32,112,97,116,104,32,116,111,32,97,32,115,111,117,
-    114,99,101,32,112,97,116,104,32,40,105,102,32,112,111,115,
-    115,105,98,108,101,41,46,10,10,32,32,32,32,84,104,105,
-    115,32,102,117,110,99,116,105,111,110,32,101,120,105,115,116,
-    115,32,112,117,114,101,108,121,32,102,111,114,32,98,97,99,
-    107,119,97,114,100,115,45,99,111,109,112,97,116,105,98,105,
-    108,105,116,121,32,102,111,114,10,32,32,32,32,80,121,73,
-    109,112,111,114,116,95,69,120,101,99,67,111,100,101,77,111,
-    100,117,108,101,87,105,116,104,70,105,108,101,110,97,109,101,
-    115,40,41,32,105,110,32,116,104,101,32,67,32,65,80,73,
-    46,10,10,32,32,32,32,114,73,0,0,0,78,114,71,0,
-    0,0,233,253,255,255,255,233,255,255,255,255,90,2,112,121,
-    41,7,114,22,0,0,0,114,41,0,0,0,218,5,108,111,
-    119,101,114,114,103,0,0,0,114,82,0,0,0,114,87,0,
-    0,0,114,54,0,0,0,41,5,218,13,98,121,116,101,99,
-    111,100,101,95,112,97,116,104,114,96,0,0,0,114,45,0,
-    0,0,90,9,101,120,116,101,110,115,105,111,110,218,11,115,
-    111,117,114,99,101,95,112,97,116,104,114,3,0,0,0,114,
-    3,0,0,0,114,6,0,0,0,218,15,95,103,101,116,95,
-    115,111,117,114,99,101,102,105,108,101,149,1,0,0,115,20,
-    0,0,0,0,7,12,1,4,1,16,1,24,1,4,1,2,
-    1,12,1,18,1,18,1,114,109,0,0,0,99,1,0,0,
-    0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,
-    0,67,0,0,0,115,74,0,0,0,124,0,160,0,116,1,
-    116,2,131,1,161,1,114,48,122,10,116,3,124,0,131,1,
-    87,0,83,0,4,0,116,4,107,10,114,44,1,0,1,0,
-    1,0,89,0,113,70,88,0,110,22,124,0,160,0,116,1,
-    116,5,131,1,161,1,114,66,124,0,83,0,100,0,83,0,
-    100,0,83,0,169,1,78,41,6,218,8,101,110,100,115,119,
-    105,116,104,218,5,116,117,112,108,101,114,102,0,0,0,114,
-    98,0,0,0,114,82,0,0,0,114,89,0,0,0,41,1,
-    114,97,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
-    6,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,
-    100,168,1,0,0,115,16,0,0,0,0,1,14,1,2,1,
-    10,1,14,1,8,1,14,1,4,2,114,113,0,0,0,99,
-    1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
-    8,0,0,0,67,0,0,0,115,52,0,0,0,122,14,116,
-    0,124,0,131,1,106,1,125,1,87,0,110,24,4,0,116,
-    2,107,10,114,38,1,0,1,0,1,0,100,1,125,1,89,
-    0,110,2,88,0,124,1,100,2,79,0,125,1,124,1,83,
-    0,41,3,122,51,67,97,108,99,117,108,97,116,101,32,116,
-    104,101,32,109,111,100,101,32,112,101,114,109,105,115,115,105,
-    111,110,115,32,102,111,114,32,97,32,98,121,116,101,99,111,
-    100,101,32,102,105,108,101,46,114,60,0,0,0,233,128,0,
-    0,0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,
-    0,0,0,41,2,114,44,0,0,0,114,52,0,0,0,114,
-    3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,10,
-    95,99,97,108,99,95,109,111,100,101,180,1,0,0,115,12,
-    0,0,0,0,2,2,1,14,1,14,1,10,3,8,1,114,
-    115,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
-    0,3,0,0,0,8,0,0,0,3,0,0,0,115,68,0,
-    0,0,100,6,135,0,102,1,100,2,100,3,132,9,125,1,
-    122,10,116,0,106,1,125,2,87,0,110,28,4,0,116,2,
-    107,10,114,52,1,0,1,0,1,0,100,4,100,5,132,0,
-    125,2,89,0,110,2,88,0,124,2,124,1,136,0,131,2,
-    1,0,124,1,83,0,41,7,122,252,68,101,99,111,114,97,
-    116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,
-    97,116,32,116,104,101,32,109,111,100,117,108,101,32,98,101,
-    105,110,103,32,114,101,113,117,101,115,116,101,100,32,109,97,
-    116,99,104,101,115,32,116,104,101,32,111,110,101,32,116,104,
-    101,10,32,32,32,32,108,111,97,100,101,114,32,99,97,110,
-    32,104,97,110,100,108,101,46,10,10,32,32,32,32,84,104,
-    101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,
-    32,40,115,101,108,102,41,32,109,117,115,116,32,100,101,102,
-    105,110,101,32,95,110,97,109,101,32,119,104,105,99,104,32,
-    116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,
-    101,110,116,32,105,115,10,32,32,32,32,99,111,109,112,97,
-    114,101,100,32,97,103,97,105,110,115,116,46,32,73,102,32,
-    116,104,101,32,99,111,109,112,97,114,105,115,111,110,32,102,
-    97,105,108,115,32,116,104,101,110,32,73,109,112,111,114,116,
-    69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,
-    10,10,32,32,32,32,78,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,4,0,0,0,4,0,0,0,31,0,0,0,
-    115,66,0,0,0,124,1,100,0,107,8,114,16,124,0,106,
-    0,125,1,110,32,124,0,106,0,124,1,107,3,114,48,116,
-    1,100,1,124,0,106,0,124,1,102,2,22,0,124,1,100,
-    2,141,2,130,1,136,0,124,0,124,1,102,2,124,2,158,
-    2,124,3,142,1,83,0,41,3,78,122,30,108,111,97,100,
-    101,114,32,102,111,114,32,37,115,32,99,97,110,110,111,116,
-    32,104,97,110,100,108,101,32,37,115,169,1,218,4,110,97,
-    109,101,41,2,114,117,0,0,0,218,11,73,109,112,111,114,
-    116,69,114,114,111,114,41,4,218,4,115,101,108,102,114,117,
-    0,0,0,218,4,97,114,103,115,218,6,107,119,97,114,103,
-    115,169,1,218,6,109,101,116,104,111,100,114,3,0,0,0,
-    114,6,0,0,0,218,19,95,99,104,101,99,107,95,110,97,
-    109,101,95,119,114,97,112,112,101,114,200,1,0,0,115,18,
-    0,0,0,0,1,8,1,8,1,10,1,4,1,8,255,2,
-    1,2,255,6,2,122,40,95,99,104,101,99,107,95,110,97,
-    109,101,46,60,108,111,99,97,108,115,62,46,95,99,104,101,
-    99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,99,
-    2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
-    7,0,0,0,83,0,0,0,115,56,0,0,0,100,1,68,
-    0,93,32,125,2,116,0,124,1,124,2,131,2,114,4,116,
-    1,124,0,124,2,116,2,124,1,124,2,131,2,131,3,1,
-    0,113,4,124,0,106,3,160,4,124,1,106,3,161,1,1,
-    0,100,0,83,0,41,2,78,41,4,218,10,95,95,109,111,
-    100,117,108,101,95,95,218,8,95,95,110,97,109,101,95,95,
-    218,12,95,95,113,117,97,108,110,97,109,101,95,95,218,7,
-    95,95,100,111,99,95,95,41,5,218,7,104,97,115,97,116,
-    116,114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,
-    97,116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,
-    117,112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,
-    108,100,114,67,0,0,0,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,218,5,95,119,114,97,112,211,1,0,
-    0,115,8,0,0,0,0,1,8,1,10,1,20,1,122,26,
-    95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,
-    97,108,115,62,46,95,119,114,97,112,41,1,78,41,3,218,
-    10,95,98,111,111,116,115,116,114,97,112,114,134,0,0,0,
-    218,9,78,97,109,101,69,114,114,111,114,41,3,114,123,0,
-    0,0,114,124,0,0,0,114,134,0,0,0,114,3,0,0,
-    0,114,122,0,0,0,114,6,0,0,0,218,11,95,99,104,
-    101,99,107,95,110,97,109,101,192,1,0,0,115,14,0,0,
-    0,0,8,14,7,2,1,10,1,14,2,14,5,10,1,114,
-    137,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,
-    0,5,0,0,0,6,0,0,0,67,0,0,0,115,60,0,
-    0,0,124,0,160,0,124,1,161,1,92,2,125,2,125,3,
-    124,2,100,1,107,8,114,56,116,1,124,3,131,1,114,56,
-    100,2,125,4,116,2,160,3,124,4,160,4,124,3,100,3,
-    25,0,161,1,116,5,161,2,1,0,124,2,83,0,41,4,
-    122,155,84,114,121,32,116,111,32,102,105,110,100,32,97,32,
-    108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,
-    112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,
-    98,121,32,100,101,108,101,103,97,116,105,110,103,32,116,111,
-    10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108,
-    111,97,100,101,114,40,41,46,10,10,32,32,32,32,84,104,
-    105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,
-    114,101,99,97,116,101,100,32,105,110,32,102,97,118,111,114,
-    32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95,
-    115,112,101,99,40,41,46,10,10,32,32,32,32,78,122,44,
-    78,111,116,32,105,109,112,111,114,116,105,110,103,32,100,105,
-    114,101,99,116,111,114,121,32,123,125,58,32,109,105,115,115,
-    105,110,103,32,95,95,105,110,105,116,95,95,114,73,0,0,
-    0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,
-    114,22,0,0,0,114,75,0,0,0,114,76,0,0,0,114,
-    62,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,
-    105,110,103,41,5,114,119,0,0,0,218,8,102,117,108,108,
-    110,97,109,101,218,6,108,111,97,100,101,114,218,8,112,111,
-    114,116,105,111,110,115,218,3,109,115,103,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,17,95,102,105,110,
-    100,95,109,111,100,117,108,101,95,115,104,105,109,220,1,0,
-    0,115,10,0,0,0,0,10,14,1,16,1,4,1,22,1,
-    114,144,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
-    0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,158,
-    0,0,0,124,0,100,1,100,2,133,2,25,0,125,3,124,
-    3,116,0,107,3,114,60,100,3,124,1,155,2,100,4,124,
-    3,155,2,157,4,125,4,116,1,160,2,100,5,124,4,161,
-    2,1,0,116,3,124,4,102,1,124,2,142,1,130,1,116,
-    4,124,0,131,1,100,6,107,0,114,102,100,7,124,1,155,
-    2,157,2,125,4,116,1,160,2,100,5,124,4,161,2,1,
-    0,116,5,124,4,131,1,130,1,116,6,124,0,100,2,100,
-    8,133,2,25,0,131,1,125,5,124,5,100,9,64,0,114,
-    154,100,10,124,5,155,2,100,11,124,1,155,2,157,4,125,
-    4,116,3,124,4,102,1,124,2,142,1,130,1,124,5,83,
-    0,41,12,97,84,2,0,0,80,101,114,102,111,114,109,32,
-    98,97,115,105,99,32,118,97,108,105,100,105,116,121,32,99,
-    104,101,99,107,105,110,103,32,111,102,32,97,32,112,121,99,
-    32,104,101,97,100,101,114,32,97,110,100,32,114,101,116,117,
-    114,110,32,116,104,101,32,102,108,97,103,115,32,102,105,101,
-    108,100,44,10,32,32,32,32,119,104,105,99,104,32,100,101,
-    116,101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,
-    32,112,121,99,32,115,104,111,117,108,100,32,98,101,32,102,
-    117,114,116,104,101,114,32,118,97,108,105,100,97,116,101,100,
-    32,97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,
-    114,99,101,46,10,10,32,32,32,32,42,100,97,116,97,42,
-    32,105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,
-    32,111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,
-    46,32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,
-    116,32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,
-    32,32,32,114,101,113,117,105,114,101,100,44,32,116,104,111,
-    117,103,104,46,41,10,10,32,32,32,32,42,110,97,109,101,
-    42,32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,
-    32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,
-    103,32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,
-    115,32,117,115,101,100,32,102,111,114,32,108,111,103,103,105,
-    110,103,46,10,10,32,32,32,32,42,101,120,99,95,100,101,
-    116,97,105,108,115,42,32,105,115,32,97,32,100,105,99,116,
-    105,111,110,97,114,121,32,112,97,115,115,101,100,32,116,111,
-    32,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,
-    105,116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,
-    32,32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,
-    103,105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,
+    114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,
+    32,32,78,122,70,116,104,101,32,100,101,98,117,103,95,111,
+    118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,
+    114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,
+    32,117,115,101,32,39,111,112,116,105,109,105,122,97,116,105,
+    111,110,39,32,105,110,115,116,101,97,100,122,50,100,101,98,
+    117,103,95,111,118,101,114,114,105,100,101,32,111,114,32,111,
+    112,116,105,109,105,122,97,116,105,111,110,32,109,117,115,116,
+    32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,114,
+    40,0,0,0,114,39,0,0,0,218,1,46,250,36,115,121,
+    115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
+    46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,
+    110,101,233,0,0,0,0,122,24,123,33,114,125,32,105,115,
+    32,110,111,116,32,97,108,112,104,97,110,117,109,101,114,105,
+    99,122,7,123,125,46,123,125,123,125,250,1,58,114,28,0,
+    0,0,41,28,218,9,95,119,97,114,110,105,110,103,115,218,
+    4,119,97,114,110,218,18,68,101,112,114,101,99,97,116,105,
+    111,110,87,97,114,110,105,110,103,218,9,84,121,112,101,69,
+    114,114,111,114,114,4,0,0,0,218,6,102,115,112,97,116,
+    104,114,47,0,0,0,114,41,0,0,0,114,1,0,0,0,
+    218,14,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
+    218,9,99,97,99,104,101,95,116,97,103,218,19,78,111,116,
+    73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,
+    114,36,0,0,0,114,2,0,0,0,218,8,111,112,116,105,
+    109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110,
+    117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,62,
+    0,0,0,218,4,95,79,80,84,218,17,66,89,84,69,67,
+    79,68,69,95,83,85,70,70,73,88,69,83,218,14,112,121,
+    99,97,99,104,101,95,112,114,101,102,105,120,114,59,0,0,
+    0,114,38,0,0,0,114,55,0,0,0,114,31,0,0,0,
+    218,6,108,115,116,114,105,112,218,8,95,80,89,67,65,67,
+    72,69,41,12,114,44,0,0,0,90,14,100,101,98,117,103,
+    95,111,118,101,114,114,105,100,101,114,70,0,0,0,218,7,
+    109,101,115,115,97,103,101,218,4,104,101,97,100,114,46,0,
+    0,0,90,4,98,97,115,101,218,3,115,101,112,218,4,114,
+    101,115,116,90,3,116,97,103,90,15,97,108,109,111,115,116,
+    95,102,105,108,101,110,97,109,101,218,8,102,105,108,101,110,
+    97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,
+    111,117,114,99,101,45,1,0,0,115,72,0,0,0,0,18,
+    8,1,6,1,2,255,4,2,8,1,4,1,8,1,12,1,
+    10,1,12,1,16,1,8,1,8,1,8,1,24,1,8,1,
+    12,1,6,2,8,1,8,1,8,1,8,1,14,1,14,1,
+    12,1,12,9,10,1,14,5,28,1,12,4,2,1,4,1,
+    8,1,2,253,4,5,114,97,0,0,0,99,1,0,0,0,
+    0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,0,
+    67,0,0,0,115,46,1,0,0,116,0,106,1,106,2,100,
+    1,117,0,114,20,116,3,100,2,131,1,130,1,116,4,160,
+    5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125,
+    1,125,2,100,3,125,3,116,0,106,7,100,1,117,1,114,
+    102,116,0,106,7,160,8,116,9,161,1,125,4,124,1,160,
+    10,124,4,116,11,23,0,161,1,114,102,124,1,116,12,124,
+    4,131,1,100,1,133,2,25,0,125,1,100,4,125,3,124,
+    3,115,144,116,6,124,1,131,1,92,2,125,1,125,5,124,
+    5,116,13,107,3,114,144,116,14,116,13,155,0,100,5,124,
+    0,155,2,157,3,131,1,130,1,124,2,160,15,100,6,161,
+    1,125,6,124,6,100,7,118,1,114,178,116,14,100,8,124,
+    2,155,2,157,2,131,1,130,1,110,92,124,6,100,9,107,
+    2,144,1,114,14,124,2,160,16,100,6,100,10,161,2,100,
+    11,25,0,125,7,124,7,160,10,116,17,161,1,115,228,116,
+    14,100,12,116,17,155,2,157,2,131,1,130,1,124,7,116,
+    12,116,17,131,1,100,1,133,2,25,0,125,8,124,8,160,
+    18,161,0,144,1,115,14,116,14,100,13,124,7,155,2,100,
+    14,157,3,131,1,130,1,124,2,160,19,100,6,161,1,100,
+    15,25,0,125,9,116,20,124,1,124,9,116,21,100,15,25,
+    0,23,0,131,2,83,0,41,16,97,110,1,0,0,71,105,
+    118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,
+    97,32,46,112,121,99,46,32,102,105,108,101,44,32,114,101,
+    116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,
+    32,105,116,115,32,46,112,121,32,102,105,108,101,46,10,10,
+    32,32,32,32,84,104,101,32,46,112,121,99,32,102,105,108,
+    101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32,
+    116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115,
+    105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104,
+    101,32,112,97,116,104,32,116,111,10,32,32,32,32,116,104,
+    101,32,46,112,121,32,102,105,108,101,32,99,97,108,99,117,
+    108,97,116,101,100,32,116,111,32,99,111,114,114,101,115,112,
+    111,110,100,32,116,111,32,116,104,101,32,46,112,121,99,32,
+    102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,100,
+    111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,102,
+    111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,47,
+    52,56,56,32,102,111,114,109,97,116,44,32,86,97,108,117,
+    101,69,114,114,111,114,32,119,105,108,108,32,98,101,32,114,
+    97,105,115,101,100,46,32,73,102,10,32,32,32,32,115,121,
+    115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
+    46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,
+    110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101,
+    109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114,
+    97,105,115,101,100,46,10,10,32,32,32,32,78,114,72,0,
+    0,0,70,84,122,31,32,110,111,116,32,98,111,116,116,111,
+    109,45,108,101,118,101,108,32,100,105,114,101,99,116,111,114,
+    121,32,105,110,32,114,71,0,0,0,62,2,0,0,0,114,
+    28,0,0,0,114,57,0,0,0,122,29,101,120,112,101,99,
+    116,101,100,32,111,110,108,121,32,50,32,111,114,32,51,32,
+    100,111,116,115,32,105,110,32,114,57,0,0,0,114,28,0,
+    0,0,233,254,255,255,255,122,53,111,112,116,105,109,105,122,
+    97,116,105,111,110,32,112,111,114,116,105,111,110,32,111,102,
+    32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110,
+    111,116,32,115,116,97,114,116,32,119,105,116,104,32,122,19,
+    111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118,
+    101,108,32,122,29,32,105,115,32,110,111,116,32,97,110,32,
+    97,108,112,104,97,110,117,109,101,114,105,99,32,118,97,108,
+    117,101,114,73,0,0,0,41,22,114,1,0,0,0,114,80,
+    0,0,0,114,81,0,0,0,114,82,0,0,0,114,4,0,
+    0,0,114,79,0,0,0,114,47,0,0,0,114,89,0,0,
+    0,114,30,0,0,0,114,31,0,0,0,114,11,0,0,0,
+    114,35,0,0,0,114,23,0,0,0,114,91,0,0,0,114,
+    86,0,0,0,218,5,99,111,117,110,116,114,43,0,0,0,
+    114,87,0,0,0,114,85,0,0,0,218,9,112,97,114,116,
+    105,116,105,111,110,114,38,0,0,0,218,15,83,79,85,82,
+    67,69,95,83,85,70,70,73,88,69,83,41,10,114,44,0,
+    0,0,114,93,0,0,0,90,16,112,121,99,97,99,104,101,
+    95,102,105,108,101,110,97,109,101,90,23,102,111,117,110,100,
+    95,105,110,95,112,121,99,97,99,104,101,95,112,114,101,102,
+    105,120,90,13,115,116,114,105,112,112,101,100,95,112,97,116,
+    104,90,7,112,121,99,97,99,104,101,90,9,100,111,116,95,
+    99,111,117,110,116,114,70,0,0,0,90,9,111,112,116,95,
+    108,101,118,101,108,90,13,98,97,115,101,95,102,105,108,101,
+    110,97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,17,115,111,117,114,99,101,95,102,114,111,109,
+    95,99,97,99,104,101,116,1,0,0,115,60,0,0,0,0,
+    9,12,1,8,1,10,1,12,1,4,1,10,1,12,1,14,
+    1,16,1,4,1,4,1,12,1,8,1,8,1,2,255,8,
+    2,10,1,8,1,16,1,10,1,16,1,10,1,4,1,2,
+    255,8,2,16,1,10,1,16,2,14,1,114,102,0,0,0,
+    99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,
+    0,9,0,0,0,67,0,0,0,115,124,0,0,0,116,0,
+    124,0,131,1,100,1,107,2,114,16,100,2,83,0,124,0,
+    160,1,100,3,161,1,92,3,125,1,125,2,125,3,124,1,
+    114,56,124,3,160,2,161,0,100,4,100,5,133,2,25,0,
+    100,6,107,3,114,60,124,0,83,0,122,12,116,3,124,0,
+    131,1,125,4,87,0,110,34,4,0,116,4,116,5,102,2,
+    121,106,1,0,1,0,1,0,124,0,100,2,100,5,133,2,
+    25,0,125,4,89,0,110,2,48,0,116,6,124,4,131,1,
+    114,120,124,4,83,0,124,0,83,0,41,7,122,188,67,111,
+    110,118,101,114,116,32,97,32,98,121,116,101,99,111,100,101,
+    32,102,105,108,101,32,112,97,116,104,32,116,111,32,97,32,
+    115,111,117,114,99,101,32,112,97,116,104,32,40,105,102,32,
+    112,111,115,115,105,98,108,101,41,46,10,10,32,32,32,32,
+    84,104,105,115,32,102,117,110,99,116,105,111,110,32,101,120,
+    105,115,116,115,32,112,117,114,101,108,121,32,102,111,114,32,
+    98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,116,
+    105,98,105,108,105,116,121,32,102,111,114,10,32,32,32,32,
+    80,121,73,109,112,111,114,116,95,69,120,101,99,67,111,100,
+    101,77,111,100,117,108,101,87,105,116,104,70,105,108,101,110,
+    97,109,101,115,40,41,32,105,110,32,116,104,101,32,67,32,
+    65,80,73,46,10,10,32,32,32,32,114,73,0,0,0,78,
+    114,71,0,0,0,233,253,255,255,255,233,255,255,255,255,90,
+    2,112,121,41,7,114,23,0,0,0,114,41,0,0,0,218,
+    5,108,111,119,101,114,114,102,0,0,0,114,82,0,0,0,
+    114,86,0,0,0,114,54,0,0,0,41,5,218,13,98,121,
+    116,101,99,111,100,101,95,112,97,116,104,114,95,0,0,0,
+    114,45,0,0,0,90,9,101,120,116,101,110,115,105,111,110,
+    218,11,115,111,117,114,99,101,95,112,97,116,104,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,218,15,95,103,
+    101,116,95,115,111,117,114,99,101,102,105,108,101,156,1,0,
+    0,115,20,0,0,0,0,7,12,1,4,1,16,1,24,1,
+    4,1,2,1,12,1,16,1,18,1,114,108,0,0,0,99,
+    1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
+    8,0,0,0,67,0,0,0,115,72,0,0,0,124,0,160,
+    0,116,1,116,2,131,1,161,1,114,46,122,10,116,3,124,
+    0,131,1,87,0,83,0,4,0,116,4,121,42,1,0,1,
+    0,1,0,89,0,113,68,48,0,110,22,124,0,160,0,116,
+    1,116,5,131,1,161,1,114,64,124,0,83,0,100,0,83,
+    0,100,0,83,0,169,1,78,41,6,218,8,101,110,100,115,
+    119,105,116,104,218,5,116,117,112,108,101,114,101,0,0,0,
+    114,97,0,0,0,114,82,0,0,0,114,88,0,0,0,41,
+    1,114,96,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,218,11,95,103,101,116,95,99,97,99,104,
+    101,100,175,1,0,0,115,16,0,0,0,0,1,14,1,2,
+    1,10,1,12,1,8,1,14,1,4,2,114,112,0,0,0,
+    99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,8,0,0,0,67,0,0,0,115,50,0,0,0,122,14,
+    116,0,124,0,131,1,106,1,125,1,87,0,110,22,4,0,
+    116,2,121,36,1,0,1,0,1,0,100,1,125,1,89,0,
+    110,2,48,0,124,1,100,2,79,0,125,1,124,1,83,0,
+    41,3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,
+    101,32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,
+    110,115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,
+    101,32,102,105,108,101,46,114,60,0,0,0,233,128,0,0,
+    0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,0,
+    0,0,41,2,114,44,0,0,0,114,52,0,0,0,114,5,
+    0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,95,
+    99,97,108,99,95,109,111,100,101,187,1,0,0,115,12,0,
+    0,0,0,2,2,1,14,1,12,1,10,3,8,1,114,114,
+    0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
+    3,0,0,0,8,0,0,0,3,0,0,0,115,66,0,0,
+    0,100,6,135,0,102,1,100,2,100,3,132,9,125,1,122,
+    10,116,0,106,1,125,2,87,0,110,26,4,0,116,2,121,
+    50,1,0,1,0,1,0,100,4,100,5,132,0,125,2,89,
+    0,110,2,48,0,124,2,124,1,136,0,131,2,1,0,124,
+    1,83,0,41,7,122,252,68,101,99,111,114,97,116,111,114,
+    32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32,
+    116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,
+    32,114,101,113,117,101,115,116,101,100,32,109,97,116,99,104,
+    101,115,32,116,104,101,32,111,110,101,32,116,104,101,10,32,
+    32,32,32,108,111,97,100,101,114,32,99,97,110,32,104,97,
+    110,100,108,101,46,10,10,32,32,32,32,84,104,101,32,102,
+    105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,115,
+    101,108,102,41,32,109,117,115,116,32,100,101,102,105,110,101,
+    32,95,110,97,109,101,32,119,104,105,99,104,32,116,104,101,
+    32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,
+    32,105,115,10,32,32,32,32,99,111,109,112,97,114,101,100,
+    32,97,103,97,105,110,115,116,46,32,73,102,32,116,104,101,
+    32,99,111,109,112,97,114,105,115,111,110,32,102,97,105,108,
+    115,32,116,104,101,110,32,73,109,112,111,114,116,69,114,114,
+    111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,
+    32,32,32,78,99,2,0,0,0,0,0,0,0,0,0,0,
+    0,4,0,0,0,4,0,0,0,31,0,0,0,115,72,0,
+    0,0,124,1,100,0,117,0,114,16,124,0,106,0,125,1,
+    110,32,124,0,106,0,124,1,107,3,114,48,116,1,100,1,
+    124,0,106,0,124,1,102,2,22,0,124,1,100,2,141,2,
+    130,1,136,0,124,0,124,1,103,2,124,2,162,1,82,0,
+    105,0,124,3,164,1,142,1,83,0,41,3,78,122,30,108,
+    111,97,100,101,114,32,102,111,114,32,37,115,32,99,97,110,
+    110,111,116,32,104,97,110,100,108,101,32,37,115,169,1,218,
+    4,110,97,109,101,41,2,114,116,0,0,0,218,11,73,109,
+    112,111,114,116,69,114,114,111,114,41,4,218,4,115,101,108,
+    102,114,116,0,0,0,218,4,97,114,103,115,218,6,107,119,
+    97,114,103,115,169,1,218,6,109,101,116,104,111,100,114,5,
+    0,0,0,114,8,0,0,0,218,19,95,99,104,101,99,107,
+    95,110,97,109,101,95,119,114,97,112,112,101,114,207,1,0,
+    0,115,18,0,0,0,0,1,8,1,8,1,10,1,4,1,
+    8,255,2,1,2,255,6,2,122,40,95,99,104,101,99,107,
+    95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,
+    99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,
+    101,114,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
+    0,0,0,7,0,0,0,83,0,0,0,115,56,0,0,0,
+    100,1,68,0,93,32,125,2,116,0,124,1,124,2,131,2,
+    114,4,116,1,124,0,124,2,116,2,124,1,124,2,131,2,
+    131,3,1,0,113,4,124,0,106,3,160,4,124,1,106,3,
+    161,1,1,0,100,0,83,0,41,2,78,41,4,218,10,95,
+    95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,109,
+    101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,95,
+    95,218,7,95,95,100,111,99,95,95,41,5,218,7,104,97,
+    115,97,116,116,114,218,7,115,101,116,97,116,116,114,218,7,
+    103,101,116,97,116,116,114,218,8,95,95,100,105,99,116,95,
+    95,218,6,117,112,100,97,116,101,41,3,90,3,110,101,119,
+    90,3,111,108,100,114,67,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,218,5,95,119,114,97,112,
+    218,1,0,0,115,8,0,0,0,0,1,8,1,10,1,20,
+    1,122,26,95,99,104,101,99,107,95,110,97,109,101,46,60,
+    108,111,99,97,108,115,62,46,95,119,114,97,112,41,1,78,
+    41,3,218,10,95,98,111,111,116,115,116,114,97,112,114,133,
+    0,0,0,218,9,78,97,109,101,69,114,114,111,114,41,3,
+    114,122,0,0,0,114,123,0,0,0,114,133,0,0,0,114,
+    5,0,0,0,114,121,0,0,0,114,8,0,0,0,218,11,
+    95,99,104,101,99,107,95,110,97,109,101,199,1,0,0,115,
+    14,0,0,0,0,8,14,7,2,1,10,1,12,2,14,5,
+    10,1,114,136,0,0,0,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,
+    115,60,0,0,0,124,0,160,0,124,1,161,1,92,2,125,
+    2,125,3,124,2,100,1,117,0,114,56,116,1,124,3,131,
+    1,114,56,100,2,125,4,116,2,160,3,124,4,160,4,124,
+    3,100,3,25,0,161,1,116,5,161,2,1,0,124,2,83,
+    0,41,4,122,155,84,114,121,32,116,111,32,102,105,110,100,
+    32,97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,
+    101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,
+    108,101,32,98,121,32,100,101,108,101,103,97,116,105,110,103,
+    32,116,111,10,32,32,32,32,115,101,108,102,46,102,105,110,
+    100,95,108,111,97,100,101,114,40,41,46,10,10,32,32,32,
+    32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,
+    100,101,112,114,101,99,97,116,101,100,32,105,110,32,102,97,
+    118,111,114,32,111,102,32,102,105,110,100,101,114,46,102,105,
+    110,100,95,115,112,101,99,40,41,46,10,10,32,32,32,32,
+    78,122,44,78,111,116,32,105,109,112,111,114,116,105,110,103,
+    32,100,105,114,101,99,116,111,114,121,32,123,125,58,32,109,
+    105,115,115,105,110,103,32,95,95,105,110,105,116,95,95,114,
+    73,0,0,0,41,6,218,11,102,105,110,100,95,108,111,97,
+    100,101,114,114,23,0,0,0,114,75,0,0,0,114,76,0,
+    0,0,114,62,0,0,0,218,13,73,109,112,111,114,116,87,
+    97,114,110,105,110,103,41,5,114,118,0,0,0,218,8,102,
+    117,108,108,110,97,109,101,218,6,108,111,97,100,101,114,218,
+    8,112,111,114,116,105,111,110,115,218,3,109,115,103,114,5,
+    0,0,0,114,5,0,0,0,114,8,0,0,0,218,17,95,
+    102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,109,
+    227,1,0,0,115,10,0,0,0,0,10,14,1,16,1,4,
+    1,22,1,114,143,0,0,0,99,3,0,0,0,0,0,0,
+    0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,
+    0,115,166,0,0,0,124,0,100,1,100,2,133,2,25,0,
+    125,3,124,3,116,0,107,3,114,64,100,3,124,1,155,2,
+    100,4,124,3,155,2,157,4,125,4,116,1,160,2,100,5,
+    124,4,161,2,1,0,116,3,124,4,102,1,105,0,124,2,
+    164,1,142,1,130,1,116,4,124,0,131,1,100,6,107,0,
+    114,106,100,7,124,1,155,2,157,2,125,4,116,1,160,2,
+    100,5,124,4,161,2,1,0,116,5,124,4,131,1,130,1,
+    116,6,124,0,100,2,100,8,133,2,25,0,131,1,125,5,
+    124,5,100,9,64,0,114,162,100,10,124,5,155,2,100,11,
+    124,1,155,2,157,4,125,4,116,3,124,4,102,1,105,0,
+    124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84,
+    2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99,
+    32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105,
+    110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100,
+    101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104,
+    101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32,
+    32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105,
+    110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32,
+    115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101,
+    114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105,
+    110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10,
+    10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,
+    104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,
+    104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,
+    108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,
+    98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,
+    113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41,
+    10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,
+    116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,
+    109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,
+    111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,
+    100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,
+    32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,
+    42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,
+    121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,
+    114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,
+    105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,
+    114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,
+    10,10,32,32,32,32,73,109,112,111,114,116,69,114,114,111,
+    114,32,105,115,32,114,97,105,115,101,100,32,119,104,101,110,
+    32,116,104,101,32,109,97,103,105,99,32,110,117,109,98,101,
+    114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,111,
+    114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,115,
+    10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110,
+    118,97,108,105,100,46,32,69,79,70,69,114,114,111,114,32,
+    105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,
+    104,101,32,100,97,116,97,32,105,115,32,102,111,117,110,100,
+    32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100,
+    46,10,10,32,32,32,32,78,114,16,0,0,0,122,20,98,
+    97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,
+    105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0,
+    122,40,114,101,97,99,104,101,100,32,69,79,70,32,119,104,
+    105,108,101,32,114,101,97,100,105,110,103,32,112,121,99,32,
+    104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233,
+    252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108,
+    97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65,
+    71,73,67,95,78,85,77,66,69,82,114,134,0,0,0,218,
+    16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,
+    101,114,117,0,0,0,114,23,0,0,0,218,8,69,79,70,
+    69,114,114,111,114,114,27,0,0,0,41,6,114,26,0,0,
+    0,114,116,0,0,0,218,11,101,120,99,95,100,101,116,97,
+    105,108,115,90,5,109,97,103,105,99,114,92,0,0,0,114,
+    2,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,13,95,99,108,97,115,115,105,102,121,95,112,
+    121,99,244,1,0,0,115,28,0,0,0,0,16,12,1,8,
+    1,16,1,12,1,16,1,12,1,10,1,12,1,8,1,16,
+    2,8,1,16,1,16,1,114,152,0,0,0,99,5,0,0,
+    0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,
+    0,67,0,0,0,115,120,0,0,0,116,0,124,0,100,1,
+    100,2,133,2,25,0,131,1,124,1,100,3,64,0,107,3,
+    114,62,100,4,124,3,155,2,157,2,125,5,116,1,160,2,
+    100,5,124,5,161,2,1,0,116,3,124,5,102,1,105,0,
+    124,4,164,1,142,1,130,1,124,2,100,6,117,1,114,116,
+    116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,2,
+    100,3,64,0,107,3,114,116,116,3,100,4,124,3,155,2,
+    157,2,102,1,105,0,124,4,164,1,142,1,130,1,100,6,
+    83,0,41,8,97,7,2,0,0,86,97,108,105,100,97,116,
+    101,32,97,32,112,121,99,32,97,103,97,105,110,115,116,32,
+    116,104,101,32,115,111,117,114,99,101,32,108,97,115,116,45,
+    109,111,100,105,102,105,101,100,32,116,105,109,101,46,10,10,
+    32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,
+    101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,
+    101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,
+    121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,
+    121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,
+    117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,
+    117,114,99,101,95,109,116,105,109,101,42,32,105,115,32,116,
+    104,101,32,108,97,115,116,32,109,111,100,105,102,105,101,100,
+    32,116,105,109,101,115,116,97,109,112,32,111,102,32,116,104,
+    101,32,115,111,117,114,99,101,32,102,105,108,101,46,10,10,
+    32,32,32,32,42,115,111,117,114,99,101,95,115,105,122,101,
+    42,32,105,115,32,78,111,110,101,32,111,114,32,116,104,101,
+    32,115,105,122,101,32,111,102,32,116,104,101,32,115,111,117,
+    114,99,101,32,102,105,108,101,32,105,110,32,98,121,116,101,
+    115,46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,
+    115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,
+    101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,
+    109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,
+    115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,
+    10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,
+    108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,
+    97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,
+    112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,
+    114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,
+    109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,
+    103,46,10,10,32,32,32,32,65,110,32,73,109,112,111,114,
     116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,
-    32,119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,
-    110,117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,
-    101,99,116,32,111,114,32,119,104,101,110,32,116,104,101,32,
-    102,108,97,103,115,10,32,32,32,32,102,105,101,108,100,32,
-    105,115,32,105,110,118,97,108,105,100,46,32,69,79,70,69,
-    114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119,
-    104,101,110,32,116,104,101,32,100,97,116,97,32,105,115,32,
-    102,111,117,110,100,32,116,111,32,98,101,32,116,114,117,110,
-    99,97,116,101,100,46,10,10,32,32,32,32,78,114,15,0,
-    0,0,122,20,98,97,100,32,109,97,103,105,99,32,110,117,
-    109,98,101,114,32,105,110,32,122,2,58,32,250,2,123,125,
-    233,16,0,0,0,122,40,114,101,97,99,104,101,100,32,69,
-    79,70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,
-    32,112,121,99,32,104,101,97,100,101,114,32,111,102,32,233,
-    8,0,0,0,233,252,255,255,255,122,14,105,110,118,97,108,
-    105,100,32,102,108,97,103,115,32,122,4,32,105,110,32,41,
-    7,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,
-    135,0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,
-    101,115,115,97,103,101,114,118,0,0,0,114,22,0,0,0,
-    218,8,69,79,70,69,114,114,111,114,114,27,0,0,0,41,
-    6,114,26,0,0,0,114,117,0,0,0,218,11,101,120,99,
-    95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,
-    93,0,0,0,114,83,0,0,0,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,13,95,99,108,97,115,115,
-    105,102,121,95,112,121,99,237,1,0,0,115,28,0,0,0,
-    0,16,12,1,8,1,16,1,12,1,12,1,12,1,10,1,
-    12,1,8,1,16,2,8,1,16,1,12,1,114,153,0,0,
-    0,99,5,0,0,0,0,0,0,0,0,0,0,0,6,0,
-    0,0,4,0,0,0,67,0,0,0,115,112,0,0,0,116,
-    0,124,0,100,1,100,2,133,2,25,0,131,1,124,1,100,
-    3,64,0,107,3,114,58,100,4,124,3,155,2,157,2,125,
-    5,116,1,160,2,100,5,124,5,161,2,1,0,116,3,124,
-    5,102,1,124,4,142,1,130,1,124,2,100,6,107,9,114,
-    108,116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,
-    2,100,3,64,0,107,3,114,108,116,3,100,4,124,3,155,
-    2,157,2,102,1,124,4,142,1,130,1,100,6,83,0,41,
-    8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97,
-    32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101,
-    32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100,
-    105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32,
-    32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,
-    111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,
-    121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,
-    104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,
-    115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,
-    101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99,
-    101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32,
-    108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105,
-    109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115,
-    111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32,
-    32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105,
-    115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105,
-    122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101,
-    32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10,
-    10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,
-    104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,
-    111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,
-    114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,
-    32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,
-    32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,
-    32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,
-    32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,
-    116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,
-    115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,
-    111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,
-    10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114,
-    114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102,
-    32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115,
-    32,115,116,97,108,101,46,10,10,32,32,32,32,114,147,0,
-    0,0,233,12,0,0,0,114,14,0,0,0,122,22,98,121,
-    116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,
-    102,111,114,32,114,145,0,0,0,78,114,146,0,0,0,41,
-    4,114,27,0,0,0,114,135,0,0,0,114,150,0,0,0,
-    114,118,0,0,0,41,6,114,26,0,0,0,218,12,115,111,
-    117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114,
-    99,101,95,115,105,122,101,114,117,0,0,0,114,152,0,0,
-    0,114,93,0,0,0,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,218,23,95,118,97,108,105,100,97,116,101,
-    95,116,105,109,101,115,116,97,109,112,95,112,121,99,14,2,
-    0,0,115,16,0,0,0,0,19,24,1,10,1,12,1,12,
-    1,8,1,22,255,2,2,114,157,0,0,0,99,4,0,0,
-    0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,
-    0,67,0,0,0,115,38,0,0,0,124,0,100,1,100,2,
-    133,2,25,0,124,1,107,3,114,34,116,0,100,3,124,2,
-    155,2,157,2,102,1,124,3,142,1,130,1,100,4,83,0,
-    41,5,97,243,1,0,0,86,97,108,105,100,97,116,101,32,
-    97,32,104,97,115,104,45,98,97,115,101,100,32,112,121,99,
-    32,98,121,32,99,104,101,99,107,105,110,103,32,116,104,101,
-    32,114,101,97,108,32,115,111,117,114,99,101,32,104,97,115,
-    104,32,97,103,97,105,110,115,116,32,116,104,101,32,111,110,
-    101,32,105,110,10,32,32,32,32,116,104,101,32,112,121,99,
-    32,104,101,97,100,101,114,46,10,10,32,32,32,32,42,100,
-    97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,
-    101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,
-    102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,
-    102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,
-    114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,
-    41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,104,
-    97,115,104,42,32,105,115,32,116,104,101,32,105,109,112,111,
-    114,116,108,105,98,46,117,116,105,108,46,115,111,117,114,99,
-    101,95,104,97,115,104,40,41,32,111,102,32,116,104,101,32,
-    115,111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,
-    32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,
-    110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,
-    108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,
-    100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,
-    114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,
-    42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,
-    32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,
-    115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,
-    114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,
-    32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,
-    100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,
-    32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,
-    32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,
-    101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,
-    97,108,101,46,10,10,32,32,32,32,114,147,0,0,0,114,
-    146,0,0,0,122,46,104,97,115,104,32,105,110,32,98,121,
-    116,101,99,111,100,101,32,100,111,101,115,110,39,116,32,109,
-    97,116,99,104,32,104,97,115,104,32,111,102,32,115,111,117,
-    114,99,101,32,78,41,1,114,118,0,0,0,41,4,114,26,
-    0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,
-    114,117,0,0,0,114,152,0,0,0,114,3,0,0,0,114,
-    3,0,0,0,114,6,0,0,0,218,18,95,118,97,108,105,
-    100,97,116,101,95,104,97,115,104,95,112,121,99,42,2,0,
-    0,115,12,0,0,0,0,17,16,1,2,1,8,255,2,2,
-    2,254,114,159,0,0,0,99,4,0,0,0,0,0,0,0,
-    0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
-    115,80,0,0,0,116,0,160,1,124,0,161,1,125,4,116,
-    2,124,4,116,3,131,2,114,56,116,4,160,5,100,1,124,
-    2,161,2,1,0,124,3,100,2,107,9,114,52,116,6,160,
-    7,124,4,124,3,161,2,1,0,124,4,83,0,116,8,100,
-    3,160,9,124,2,161,1,124,1,124,2,100,4,141,3,130,
-    1,100,2,83,0,41,5,122,35,67,111,109,112,105,108,101,
-    32,98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,
-    110,100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,
-    100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,
-    33,114,125,78,122,23,78,111,110,45,99,111,100,101,32,111,
-    98,106,101,99,116,32,105,110,32,123,33,114,125,169,2,114,
-    117,0,0,0,114,44,0,0,0,41,10,218,7,109,97,114,
-    115,104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,
-    110,115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,
-    121,112,101,114,135,0,0,0,114,150,0,0,0,218,4,95,
-    105,109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,
-    101,110,97,109,101,114,118,0,0,0,114,62,0,0,0,41,
-    5,114,26,0,0,0,114,117,0,0,0,114,107,0,0,0,
-    114,108,0,0,0,218,4,99,111,100,101,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,109,
-    112,105,108,101,95,98,121,116,101,99,111,100,101,66,2,0,
-    0,115,20,0,0,0,0,2,10,1,10,1,12,1,8,1,
-    12,1,4,2,10,1,2,0,2,255,114,166,0,0,0,114,
-    73,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
-    0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0,
-    0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3,
-    100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1,
-    131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1,
-    161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1,
-    161,1,1,0,124,3,83,0,41,2,122,43,80,114,111,100,
-    117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114,
-    32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115,
-    101,100,32,112,121,99,46,114,73,0,0,0,41,6,218,9,
-    98,121,116,101,97,114,114,97,121,114,149,0,0,0,218,6,
-    101,120,116,101,110,100,114,20,0,0,0,114,161,0,0,0,
-    218,5,100,117,109,112,115,41,4,114,165,0,0,0,218,5,
-    109,116,105,109,101,114,156,0,0,0,114,26,0,0,0,114,
-    3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,22,
-    95,99,111,100,101,95,116,111,95,116,105,109,101,115,116,97,
-    109,112,95,112,121,99,79,2,0,0,115,12,0,0,0,0,
-    2,8,1,14,1,14,1,14,1,16,1,114,171,0,0,0,
-    84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,
-    0,0,5,0,0,0,67,0,0,0,115,80,0,0,0,116,
-    0,116,1,131,1,125,3,100,1,124,2,100,1,62,0,66,
-    0,125,4,124,3,160,2,116,3,124,4,131,1,161,1,1,
-    0,116,4,124,1,131,1,100,2,107,2,115,50,116,5,130,
-    1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,
-    6,160,7,124,0,161,1,161,1,1,0,124,3,83,0,41,
-    3,122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,
-    97,116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,
-    97,115,101,100,32,112,121,99,46,114,39,0,0,0,114,147,
-    0,0,0,41,8,114,167,0,0,0,114,149,0,0,0,114,
-    168,0,0,0,114,20,0,0,0,114,22,0,0,0,114,23,
-    0,0,0,114,161,0,0,0,114,169,0,0,0,41,5,114,
-    165,0,0,0,114,158,0,0,0,90,7,99,104,101,99,107,
-    101,100,114,26,0,0,0,114,83,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,
-    100,101,95,116,111,95,104,97,115,104,95,112,121,99,89,2,
+    32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,
+    32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,
+    114,146,0,0,0,233,12,0,0,0,114,15,0,0,0,122,
+    22,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,
+    108,101,32,102,111,114,32,114,144,0,0,0,78,114,145,0,
+    0,0,41,4,114,27,0,0,0,114,134,0,0,0,114,149,
+    0,0,0,114,117,0,0,0,41,6,114,26,0,0,0,218,
+    12,115,111,117,114,99,101,95,109,116,105,109,101,218,11,115,
+    111,117,114,99,101,95,115,105,122,101,114,116,0,0,0,114,
+    151,0,0,0,114,92,0,0,0,114,5,0,0,0,114,5,
+    0,0,0,114,8,0,0,0,218,23,95,118,97,108,105,100,
+    97,116,101,95,116,105,109,101,115,116,97,109,112,95,112,121,
+    99,21,2,0,0,115,16,0,0,0,0,19,24,1,10,1,
+    12,1,16,1,8,1,22,255,2,2,114,156,0,0,0,99,
+    4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+    4,0,0,0,67,0,0,0,115,42,0,0,0,124,0,100,
+    1,100,2,133,2,25,0,124,1,107,3,114,38,116,0,100,
+    3,124,2,155,2,157,2,102,1,105,0,124,3,164,1,142,
+    1,130,1,100,4,83,0,41,5,97,243,1,0,0,86,97,
+    108,105,100,97,116,101,32,97,32,104,97,115,104,45,98,97,
+    115,101,100,32,112,121,99,32,98,121,32,99,104,101,99,107,
+    105,110,103,32,116,104,101,32,114,101,97,108,32,115,111,117,
+    114,99,101,32,104,97,115,104,32,97,103,97,105,110,115,116,
+    32,116,104,101,32,111,110,101,32,105,110,10,32,32,32,32,
+    116,104,101,32,112,121,99,32,104,101,97,100,101,114,46,10,
+    10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,
+    104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,
+    104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,
+    108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,
+    98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,
+    113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,
+    111,117,114,99,101,95,104,97,115,104,42,32,105,115,32,116,
+    104,101,32,105,109,112,111,114,116,108,105,98,46,117,116,105,
+    108,46,115,111,117,114,99,101,95,104,97,115,104,40,41,32,
+    111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,
+    108,101,46,10,10,32,32,32,32,42,110,97,109,101,42,32,
+    105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,
+    104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,
+    105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,
+    117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,
+    46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,
+    105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,
+    110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,
+    109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,
+    32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,
+    105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,
+    110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111,
+    114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,
+    100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,
+    101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,
+    32,114,146,0,0,0,114,145,0,0,0,122,46,104,97,115,
+    104,32,105,110,32,98,121,116,101,99,111,100,101,32,100,111,
+    101,115,110,39,116,32,109,97,116,99,104,32,104,97,115,104,
+    32,111,102,32,115,111,117,114,99,101,32,78,41,1,114,117,
+    0,0,0,41,4,114,26,0,0,0,218,11,115,111,117,114,
+    99,101,95,104,97,115,104,114,116,0,0,0,114,151,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    218,18,95,118,97,108,105,100,97,116,101,95,104,97,115,104,
+    95,112,121,99,49,2,0,0,115,12,0,0,0,0,17,16,
+    1,2,1,8,255,4,2,2,254,114,158,0,0,0,99,4,
+    0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,
+    0,0,0,67,0,0,0,115,80,0,0,0,116,0,160,1,
+    124,0,161,1,125,4,116,2,124,4,116,3,131,2,114,56,
+    116,4,160,5,100,1,124,2,161,2,1,0,124,3,100,2,
+    117,1,114,52,116,6,160,7,124,4,124,3,161,2,1,0,
+    124,4,83,0,116,8,100,3,160,9,124,2,161,1,124,1,
+    124,2,100,4,141,3,130,1,100,2,83,0,41,5,122,35,
+    67,111,109,112,105,108,101,32,98,121,116,101,99,111,100,101,
+    32,97,115,32,102,111,117,110,100,32,105,110,32,97,32,112,
+    121,99,46,122,21,99,111,100,101,32,111,98,106,101,99,116,
+    32,102,114,111,109,32,123,33,114,125,78,122,23,78,111,110,
+    45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32,
+    123,33,114,125,169,2,114,116,0,0,0,114,44,0,0,0,
+    41,10,218,7,109,97,114,115,104,97,108,90,5,108,111,97,
+    100,115,218,10,105,115,105,110,115,116,97,110,99,101,218,10,
+    95,99,111,100,101,95,116,121,112,101,114,134,0,0,0,114,
+    149,0,0,0,218,4,95,105,109,112,90,16,95,102,105,120,
+    95,99,111,95,102,105,108,101,110,97,109,101,114,117,0,0,
+    0,114,62,0,0,0,41,5,114,26,0,0,0,114,116,0,
+    0,0,114,106,0,0,0,114,107,0,0,0,218,4,99,111,
+    100,101,114,5,0,0,0,114,5,0,0,0,114,8,0,0,
+    0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,
+    99,111,100,101,73,2,0,0,115,18,0,0,0,0,2,10,
+    1,10,1,12,1,8,1,12,1,4,2,10,1,4,255,114,
+    165,0,0,0,114,73,0,0,0,99,3,0,0,0,0,0,
+    0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,
+    0,0,115,70,0,0,0,116,0,116,1,131,1,125,3,124,
+    3,160,2,116,3,100,1,131,1,161,1,1,0,124,3,160,
+    2,116,3,124,1,131,1,161,1,1,0,124,3,160,2,116,
+    3,124,2,131,1,161,1,1,0,124,3,160,2,116,4,160,
+    5,124,0,161,1,161,1,1,0,124,3,83,0,41,2,122,
+    43,80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,
+    97,32,102,111,114,32,97,32,116,105,109,101,115,116,97,109,
+    112,45,98,97,115,101,100,32,112,121,99,46,114,73,0,0,
+    0,41,6,218,9,98,121,116,101,97,114,114,97,121,114,148,
+    0,0,0,218,6,101,120,116,101,110,100,114,21,0,0,0,
+    114,160,0,0,0,218,5,100,117,109,112,115,41,4,114,164,
+    0,0,0,218,5,109,116,105,109,101,114,155,0,0,0,114,
+    26,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,
+    109,101,115,116,97,109,112,95,112,121,99,86,2,0,0,115,
+    12,0,0,0,0,2,8,1,14,1,14,1,14,1,16,1,
+    114,170,0,0,0,84,99,3,0,0,0,0,0,0,0,0,
+    0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,
+    80,0,0,0,116,0,116,1,131,1,125,3,100,1,124,2,
+    100,1,62,0,66,0,125,4,124,3,160,2,116,3,124,4,
+    131,1,161,1,1,0,116,4,124,1,131,1,100,2,107,2,
+    115,50,74,0,130,1,124,3,160,2,124,1,161,1,1,0,
+    124,3,160,2,116,5,160,6,124,0,161,1,161,1,1,0,
+    124,3,83,0,41,3,122,38,80,114,111,100,117,99,101,32,
+    116,104,101,32,100,97,116,97,32,102,111,114,32,97,32,104,
+    97,115,104,45,98,97,115,101,100,32,112,121,99,46,114,39,
+    0,0,0,114,146,0,0,0,41,7,114,166,0,0,0,114,
+    148,0,0,0,114,167,0,0,0,114,21,0,0,0,114,23,
+    0,0,0,114,160,0,0,0,114,168,0,0,0,41,5,114,
+    164,0,0,0,114,157,0,0,0,90,7,99,104,101,99,107,
+    101,100,114,26,0,0,0,114,2,0,0,0,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,218,17,95,99,111,
+    100,101,95,116,111,95,104,97,115,104,95,112,121,99,96,2,
     0,0,115,14,0,0,0,0,2,8,1,12,1,14,1,16,
-    1,10,1,16,1,114,172,0,0,0,99,1,0,0,0,0,
+    1,10,1,16,1,114,171,0,0,0,99,1,0,0,0,0,
     0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,
     0,0,0,115,62,0,0,0,100,1,100,2,108,0,125,1,
     116,1,160,2,124,0,161,1,106,3,125,2,124,1,160,4,
@@ -879,1856 +888,1847 @@
     25,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108,
     105,110,101,68,101,99,111,100,101,114,218,6,100,101,99,111,
     100,101,41,5,218,12,115,111,117,114,99,101,95,98,121,116,
-    101,115,114,173,0,0,0,90,21,115,111,117,114,99,101,95,
+    101,115,114,172,0,0,0,90,21,115,111,117,114,99,101,95,
     98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8,
     101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110,
-    101,95,100,101,99,111,100,101,114,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101,
-    95,115,111,117,114,99,101,100,2,0,0,115,10,0,0,0,
-    0,5,8,1,12,1,10,1,12,1,114,177,0,0,0,169,
-    2,114,141,0,0,0,218,26,115,117,98,109,111,100,117,108,
+    101,95,100,101,99,111,100,101,114,114,5,0,0,0,114,5,
+    0,0,0,114,8,0,0,0,218,13,100,101,99,111,100,101,
+    95,115,111,117,114,99,101,107,2,0,0,115,10,0,0,0,
+    0,5,8,1,12,1,10,1,12,1,114,176,0,0,0,169,
+    2,114,140,0,0,0,218,26,115,117,98,109,111,100,117,108,
     101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,
     110,115,99,2,0,0,0,0,0,0,0,2,0,0,0,9,
-    0,0,0,8,0,0,0,67,0,0,0,115,16,1,0,0,
-    124,1,100,1,107,8,114,60,100,2,125,1,116,0,124,2,
-    100,3,131,2,114,70,122,14,124,2,160,1,124,0,161,1,
-    125,1,87,0,113,70,4,0,116,2,107,10,114,56,1,0,
-    1,0,1,0,89,0,113,70,88,0,110,10,116,3,160,4,
-    124,1,161,1,125,1,116,5,106,6,124,0,124,2,124,1,
-    100,4,141,3,125,4,100,5,124,4,95,7,124,2,100,1,
-    107,8,114,154,116,8,131,0,68,0,93,42,92,2,125,5,
-    125,6,124,1,160,9,116,10,124,6,131,1,161,1,114,106,
-    124,5,124,0,124,1,131,2,125,2,124,2,124,4,95,11,
-    1,0,113,154,113,106,100,1,83,0,124,3,116,12,107,8,
-    114,220,116,0,124,2,100,6,131,2,114,226,122,14,124,2,
-    160,13,124,0,161,1,125,7,87,0,110,20,4,0,116,2,
-    107,10,114,206,1,0,1,0,1,0,89,0,113,226,88,0,
-    124,7,114,226,103,0,124,4,95,14,110,6,124,3,124,4,
-    95,14,124,4,106,14,103,0,107,2,144,1,114,12,124,1,
-    144,1,114,12,116,15,124,1,131,1,100,7,25,0,125,8,
-    124,4,106,14,160,16,124,8,161,1,1,0,124,4,83,0,
-    41,8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,
-    109,111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,
-    100,32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,
-    116,105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,
-    100,105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,
-    109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,
-    97,103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,
-    109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,
-    99,97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,
-    116,32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,
-    97,116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,
-    112,116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,
-    105,99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,
-    116,115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,
-    32,117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,
-    32,32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,
-    46,10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,
-    114,32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,
-    101,99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,
-    95,105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,
-    32,32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,
-    218,12,103,101,116,95,102,105,108,101,110,97,109,101,169,1,
-    218,6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,
-    99,107,97,103,101,114,73,0,0,0,41,17,114,129,0,0,
-    0,114,180,0,0,0,114,118,0,0,0,114,2,0,0,0,
-    114,79,0,0,0,114,135,0,0,0,218,10,77,111,100,117,
-    108,101,83,112,101,99,90,13,95,115,101,116,95,102,105,108,
-    101,97,116,116,114,218,27,95,103,101,116,95,115,117,112,112,
-    111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,
-    114,115,114,111,0,0,0,114,112,0,0,0,114,141,0,0,
-    0,218,9,95,80,79,80,85,76,65,84,69,114,183,0,0,
-    0,114,179,0,0,0,114,47,0,0,0,218,6,97,112,112,
-    101,110,100,41,9,114,117,0,0,0,90,8,108,111,99,97,
-    116,105,111,110,114,141,0,0,0,114,179,0,0,0,218,4,
-    115,112,101,99,218,12,108,111,97,100,101,114,95,99,108,97,
-    115,115,218,8,115,117,102,102,105,120,101,115,114,183,0,0,
-    0,90,7,100,105,114,110,97,109,101,114,3,0,0,0,114,
-    3,0,0,0,114,6,0,0,0,218,23,115,112,101,99,95,
-    102,114,111,109,95,102,105,108,101,95,108,111,99,97,116,105,
-    111,110,117,2,0,0,115,62,0,0,0,0,12,8,4,4,
-    1,10,2,2,1,14,1,14,1,8,2,10,8,16,1,6,
-    3,8,1,14,1,14,1,10,1,6,1,6,2,4,3,8,
-    2,10,1,2,1,14,1,14,1,6,2,4,1,8,2,6,
-    1,12,1,6,1,12,1,12,2,114,191,0,0,0,99,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-    0,0,0,64,0,0,0,115,80,0,0,0,101,0,90,1,
-    100,0,90,2,100,1,90,3,100,2,90,4,100,3,90,5,
-    100,4,90,6,101,7,100,5,100,6,132,0,131,1,90,8,
-    101,7,100,7,100,8,132,0,131,1,90,9,101,7,100,14,
-    100,10,100,11,132,1,131,1,90,10,101,7,100,15,100,12,
-    100,13,132,1,131,1,90,11,100,9,83,0,41,16,218,21,
-    87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,
-    105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,
-    32,102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,
-    108,101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,
-    116,104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,
-    115,116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,
-    80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,
-    101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,
-    77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,
-    101,125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,
-    104,111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,
-    115,121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,
-    117,108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,
-    68,101,98,117,103,70,99,2,0,0,0,0,0,0,0,0,
-    0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
-    56,0,0,0,122,16,116,0,160,1,116,0,106,2,124,1,
-    161,2,87,0,83,0,4,0,116,3,107,10,114,50,1,0,
-    1,0,1,0,116,0,160,1,116,0,106,4,124,1,161,2,
-    6,0,89,0,83,0,88,0,100,0,83,0,114,110,0,0,
-    0,41,5,218,7,95,119,105,110,114,101,103,90,7,79,112,
-    101,110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,
-    69,78,84,95,85,83,69,82,114,50,0,0,0,90,18,72,
-    75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,
-    69,41,2,218,3,99,108,115,114,5,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,218,14,95,111,
-    112,101,110,95,114,101,103,105,115,116,114,121,197,2,0,0,
-    115,8,0,0,0,0,2,2,1,16,1,14,1,122,36,87,
-    105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,
-    110,100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,
-    116,114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,
-    6,0,0,0,9,0,0,0,67,0,0,0,115,114,0,0,
-    0,124,0,106,0,114,14,124,0,106,1,125,2,110,6,124,
-    0,106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,
-    5,100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,
-    3,122,38,124,0,160,6,124,3,161,1,143,18,125,4,116,
-    7,160,8,124,4,100,4,161,2,125,5,87,0,53,0,81,
-    0,82,0,88,0,87,0,110,22,4,0,116,9,107,10,114,
-    108,1,0,1,0,1,0,89,0,100,0,83,0,88,0,124,
-    5,83,0,41,5,78,122,5,37,100,46,37,100,114,28,0,
-    0,0,41,2,114,140,0,0,0,90,11,115,121,115,95,118,
-    101,114,115,105,111,110,114,40,0,0,0,41,10,218,11,68,
-    69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,
-    83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,
-    82,69,71,73,83,84,82,89,95,75,69,89,114,62,0,0,
-    0,114,8,0,0,0,218,12,118,101,114,115,105,111,110,95,
-    105,110,102,111,114,195,0,0,0,114,193,0,0,0,90,10,
-    81,117,101,114,121,86,97,108,117,101,114,50,0,0,0,41,
-    6,114,194,0,0,0,114,140,0,0,0,90,12,114,101,103,
-    105,115,116,114,121,95,107,101,121,114,5,0,0,0,90,4,
-    104,107,101,121,218,8,102,105,108,101,112,97,116,104,114,3,
-    0,0,0,114,3,0,0,0,114,6,0,0,0,218,16,95,
-    115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,204,
-    2,0,0,115,24,0,0,0,0,2,6,1,8,2,6,1,
-    6,1,16,255,6,2,2,1,12,1,26,1,14,1,8,1,
-    122,38,87,105,110,100,111,119,115,82,101,103,105,115,116,114,
-    121,70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,
-    114,101,103,105,115,116,114,121,78,99,4,0,0,0,0,0,
-    0,0,0,0,0,0,8,0,0,0,8,0,0,0,67,0,
-    0,0,115,122,0,0,0,124,0,160,0,124,1,161,1,125,
-    4,124,4,100,0,107,8,114,22,100,0,83,0,122,12,116,
-    1,124,4,131,1,1,0,87,0,110,22,4,0,116,2,107,
-    10,114,56,1,0,1,0,1,0,89,0,100,0,83,0,88,
-    0,116,3,131,0,68,0,93,52,92,2,125,5,125,6,124,
-    4,160,4,116,5,124,6,131,1,161,1,114,64,116,6,106,
-    7,124,1,124,5,124,1,124,4,131,2,124,4,100,1,141,
-    3,125,7,124,7,2,0,1,0,83,0,113,64,100,0,83,
-    0,41,2,78,114,181,0,0,0,41,8,114,201,0,0,0,
-    114,49,0,0,0,114,50,0,0,0,114,185,0,0,0,114,
-    111,0,0,0,114,112,0,0,0,114,135,0,0,0,218,16,
-    115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114,
-    41,8,114,194,0,0,0,114,140,0,0,0,114,44,0,0,
-    0,218,6,116,97,114,103,101,116,114,200,0,0,0,114,141,
-    0,0,0,114,190,0,0,0,114,188,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,218,9,102,105,
-    110,100,95,115,112,101,99,219,2,0,0,115,28,0,0,0,
-    0,2,10,1,8,1,4,1,2,1,12,1,14,1,8,1,
-    14,1,14,1,6,1,8,1,2,254,6,3,122,31,87,105,
-    110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,
-    100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,
-    0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,
-    0,0,67,0,0,0,115,34,0,0,0,124,0,160,0,124,
-    1,124,2,161,2,125,3,124,3,100,1,107,9,114,26,124,
-    3,106,1,83,0,100,1,83,0,100,1,83,0,41,2,122,
-    108,70,105,110,100,32,109,111,100,117,108,101,32,110,97,109,
-    101,100,32,105,110,32,116,104,101,32,114,101,103,105,115,116,
-    114,121,46,10,10,32,32,32,32,32,32,32,32,84,104,105,
-    115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
-    101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,
-    99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,
-    97,100,46,10,10,32,32,32,32,32,32,32,32,78,169,2,
-    114,204,0,0,0,114,141,0,0,0,169,4,114,194,0,0,
-    0,114,140,0,0,0,114,44,0,0,0,114,188,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
-    11,102,105,110,100,95,109,111,100,117,108,101,235,2,0,0,
-    115,8,0,0,0,0,7,12,1,8,1,6,2,122,33,87,
-    105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,
-    110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101,
-    41,2,78,78,41,1,78,41,12,114,126,0,0,0,114,125,
-    0,0,0,114,127,0,0,0,114,128,0,0,0,114,198,0,
-    0,0,114,197,0,0,0,114,196,0,0,0,218,11,99,108,
-    97,115,115,109,101,116,104,111,100,114,195,0,0,0,114,201,
-    0,0,0,114,204,0,0,0,114,207,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,192,0,0,0,185,2,0,0,115,28,0,0,0,8,
-    2,4,3,2,255,2,4,2,255,2,3,4,2,2,1,10,
-    6,2,1,10,14,2,1,12,15,2,1,114,192,0,0,0,
+    0,0,0,8,0,0,0,67,0,0,0,115,12,1,0,0,
+    124,1,100,1,117,0,114,58,100,2,125,1,116,0,124,2,
+    100,3,131,2,114,68,122,14,124,2,160,1,124,0,161,1,
+    125,1,87,0,113,68,4,0,116,2,121,54,1,0,1,0,
+    1,0,89,0,113,68,48,0,110,10,116,3,160,4,124,1,
+    161,1,125,1,116,5,106,6,124,0,124,2,124,1,100,4,
+    141,3,125,4,100,5,124,4,95,7,124,2,100,1,117,0,
+    114,152,116,8,131,0,68,0,93,42,92,2,125,5,125,6,
+    124,1,160,9,116,10,124,6,131,1,161,1,114,104,124,5,
+    124,0,124,1,131,2,125,2,124,2,124,4,95,11,1,0,
+    113,152,113,104,100,1,83,0,124,3,116,12,117,0,114,216,
+    116,0,124,2,100,6,131,2,114,222,122,14,124,2,160,13,
+    124,0,161,1,125,7,87,0,110,18,4,0,116,2,121,202,
+    1,0,1,0,1,0,89,0,113,222,48,0,124,7,114,222,
+    103,0,124,4,95,14,110,6,124,3,124,4,95,14,124,4,
+    106,14,103,0,107,2,144,1,114,8,124,1,144,1,114,8,
+    116,15,124,1,131,1,100,7,25,0,125,8,124,4,106,14,
+    160,16,124,8,161,1,1,0,124,4,83,0,41,8,97,61,
+    1,0,0,82,101,116,117,114,110,32,97,32,109,111,100,117,
+    108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110,
+    32,97,32,102,105,108,101,32,108,111,99,97,116,105,111,110,
+    46,10,10,32,32,32,32,84,111,32,105,110,100,105,99,97,
+    116,101,32,116,104,97,116,32,116,104,101,32,109,111,100,117,
+    108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,44,
+    32,115,101,116,10,32,32,32,32,115,117,98,109,111,100,117,
+    108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,
+    111,110,115,32,116,111,32,97,32,108,105,115,116,32,111,102,
+    32,100,105,114,101,99,116,111,114,121,32,112,97,116,104,115,
+    46,32,32,65,110,10,32,32,32,32,101,109,112,116,121,32,
+    108,105,115,116,32,105,115,32,115,117,102,102,105,99,105,101,
+    110,116,44,32,116,104,111,117,103,104,32,105,116,115,32,110,
+    111,116,32,111,116,104,101,114,119,105,115,101,32,117,115,101,
+    102,117,108,32,116,111,32,116,104,101,10,32,32,32,32,105,
+    109,112,111,114,116,32,115,121,115,116,101,109,46,10,10,32,
+    32,32,32,84,104,101,32,108,111,97,100,101,114,32,109,117,
+    115,116,32,116,97,107,101,32,97,32,115,112,101,99,32,97,
+    115,32,105,116,115,32,111,110,108,121,32,95,95,105,110,105,
+    116,95,95,40,41,32,97,114,103,46,10,10,32,32,32,32,
+    78,122,9,60,117,110,107,110,111,119,110,62,218,12,103,101,
+    116,95,102,105,108,101,110,97,109,101,169,1,218,6,111,114,
+    105,103,105,110,84,218,10,105,115,95,112,97,99,107,97,103,
+    101,114,73,0,0,0,41,17,114,128,0,0,0,114,179,0,
+    0,0,114,117,0,0,0,114,4,0,0,0,114,79,0,0,
+    0,114,134,0,0,0,218,10,77,111,100,117,108,101,83,112,
+    101,99,90,13,95,115,101,116,95,102,105,108,101,97,116,116,
+    114,218,27,95,103,101,116,95,115,117,112,112,111,114,116,101,
+    100,95,102,105,108,101,95,108,111,97,100,101,114,115,114,110,
+    0,0,0,114,111,0,0,0,114,140,0,0,0,218,9,95,
+    80,79,80,85,76,65,84,69,114,182,0,0,0,114,178,0,
+    0,0,114,47,0,0,0,218,6,97,112,112,101,110,100,41,
+    9,114,116,0,0,0,90,8,108,111,99,97,116,105,111,110,
+    114,140,0,0,0,114,178,0,0,0,218,4,115,112,101,99,
+    218,12,108,111,97,100,101,114,95,99,108,97,115,115,218,8,
+    115,117,102,102,105,120,101,115,114,182,0,0,0,90,7,100,
+    105,114,110,97,109,101,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,218,23,115,112,101,99,95,102,114,111,109,
+    95,102,105,108,101,95,108,111,99,97,116,105,111,110,124,2,
+    0,0,115,62,0,0,0,0,12,8,4,4,1,10,2,2,
+    1,14,1,12,1,8,2,10,8,16,1,6,3,8,1,14,
+    1,14,1,10,1,6,1,6,2,4,3,8,2,10,1,2,
+    1,14,1,12,1,6,2,4,1,8,2,6,1,12,1,6,
+    1,12,1,12,2,114,190,0,0,0,99,0,0,0,0,0,
+    0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,
+    0,0,0,115,80,0,0,0,101,0,90,1,100,0,90,2,
+    100,1,90,3,100,2,90,4,100,3,90,5,100,4,90,6,
+    101,7,100,5,100,6,132,0,131,1,90,8,101,7,100,7,
+    100,8,132,0,131,1,90,9,101,7,100,14,100,10,100,11,
+    132,1,131,1,90,10,101,7,100,15,100,12,100,13,132,1,
+    131,1,90,11,100,9,83,0,41,16,218,21,87,105,110,100,
+    111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,
+    114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,
+    100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32,
+    100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32,
+    87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121,
+    46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104,
+    111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,
+    121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,
+    108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65,
+    83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,
+    80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,
+    118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,
+    92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117,
+    103,70,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
+    0,0,0,8,0,0,0,67,0,0,0,115,54,0,0,0,
+    122,16,116,0,160,1,116,0,106,2,124,1,161,2,87,0,
+    83,0,4,0,116,3,121,48,1,0,1,0,1,0,116,0,
+    160,1,116,0,106,4,124,1,161,2,6,0,89,0,83,0,
+    48,0,100,0,83,0,114,109,0,0,0,41,5,218,6,119,
+    105,110,114,101,103,90,7,79,112,101,110,75,101,121,90,17,
+    72,75,69,89,95,67,85,82,82,69,78,84,95,85,83,69,
+    82,114,50,0,0,0,90,18,72,75,69,89,95,76,79,67,
+    65,76,95,77,65,67,72,73,78,69,41,2,218,3,99,108,
+    115,114,7,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,218,14,95,111,112,101,110,95,114,101,103,
+    105,115,116,114,121,204,2,0,0,115,8,0,0,0,0,2,
+    2,1,16,1,12,1,122,36,87,105,110,100,111,119,115,82,
+    101,103,105,115,116,114,121,70,105,110,100,101,114,46,95,111,
+    112,101,110,95,114,101,103,105,115,116,114,121,99,2,0,0,
+    0,0,0,0,0,0,0,0,0,6,0,0,0,8,0,0,
+    0,67,0,0,0,115,132,0,0,0,124,0,106,0,114,14,
+    124,0,106,1,125,2,110,6,124,0,106,2,125,2,124,2,
+    106,3,124,1,100,1,116,4,106,5,100,0,100,2,133,2,
+    25,0,22,0,100,3,141,2,125,3,122,58,124,0,160,6,
+    124,3,161,1,143,28,125,4,116,7,160,8,124,4,100,4,
+    161,2,125,5,87,0,100,0,4,0,4,0,131,3,1,0,
+    110,16,49,0,115,94,48,0,1,0,1,0,1,0,89,0,
+    1,0,87,0,110,20,4,0,116,9,121,126,1,0,1,0,
+    1,0,89,0,100,0,83,0,48,0,124,5,83,0,41,5,
+    78,122,5,37,100,46,37,100,114,28,0,0,0,41,2,114,
+    139,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,
+    110,114,40,0,0,0,41,10,218,11,68,69,66,85,71,95,
+    66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95,
+    75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83,
+    84,82,89,95,75,69,89,114,62,0,0,0,114,1,0,0,
+    0,218,12,118,101,114,115,105,111,110,95,105,110,102,111,114,
+    194,0,0,0,114,192,0,0,0,90,10,81,117,101,114,121,
+    86,97,108,117,101,114,50,0,0,0,41,6,114,193,0,0,
+    0,114,139,0,0,0,90,12,114,101,103,105,115,116,114,121,
+    95,107,101,121,114,7,0,0,0,90,4,104,107,101,121,218,
+    8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5,
+    0,0,0,114,8,0,0,0,218,16,95,115,101,97,114,99,
+    104,95,114,101,103,105,115,116,114,121,211,2,0,0,115,24,
+    0,0,0,0,2,6,1,8,2,6,1,6,1,16,255,6,
+    2,2,1,12,1,46,1,12,1,8,1,122,38,87,105,110,
+    100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,
+    101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115,
+    116,114,121,78,99,4,0,0,0,0,0,0,0,0,0,0,
+    0,8,0,0,0,8,0,0,0,67,0,0,0,115,120,0,
+    0,0,124,0,160,0,124,1,161,1,125,4,124,4,100,0,
+    117,0,114,22,100,0,83,0,122,12,116,1,124,4,131,1,
+    1,0,87,0,110,20,4,0,116,2,121,54,1,0,1,0,
+    1,0,89,0,100,0,83,0,48,0,116,3,131,0,68,0,
+    93,52,92,2,125,5,125,6,124,4,160,4,116,5,124,6,
+    131,1,161,1,114,62,116,6,106,7,124,1,124,5,124,1,
+    124,4,131,2,124,4,100,1,141,3,125,7,124,7,2,0,
+    1,0,83,0,113,62,100,0,83,0,41,2,78,114,180,0,
+    0,0,41,8,114,200,0,0,0,114,49,0,0,0,114,50,
+    0,0,0,114,184,0,0,0,114,110,0,0,0,114,111,0,
+    0,0,114,134,0,0,0,218,16,115,112,101,99,95,102,114,
+    111,109,95,108,111,97,100,101,114,41,8,114,193,0,0,0,
+    114,139,0,0,0,114,44,0,0,0,218,6,116,97,114,103,
+    101,116,114,199,0,0,0,114,140,0,0,0,114,189,0,0,
+    0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,218,9,102,105,110,100,95,115,112,101,99,
+    226,2,0,0,115,28,0,0,0,0,2,10,1,8,1,4,
+    1,2,1,12,1,12,1,8,1,14,1,14,1,6,1,8,
+    1,2,254,6,3,122,31,87,105,110,100,111,119,115,82,101,
+    103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110,
+    100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0,
+    0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,
+    34,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,
+    124,3,100,1,117,1,114,26,124,3,106,1,83,0,100,1,
+    83,0,100,1,83,0,41,2,122,108,70,105,110,100,32,109,
+    111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116,
+    104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32,
+    32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,
+    100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,
+    32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,
+    101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,
+    32,32,32,32,32,32,78,169,2,114,203,0,0,0,114,140,
+    0,0,0,169,4,114,193,0,0,0,114,139,0,0,0,114,
+    44,0,0,0,114,187,0,0,0,114,5,0,0,0,114,5,
+    0,0,0,114,8,0,0,0,218,11,102,105,110,100,95,109,
+    111,100,117,108,101,242,2,0,0,115,8,0,0,0,0,7,
+    12,1,8,1,6,2,122,33,87,105,110,100,111,119,115,82,
+    101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,
+    110,100,95,109,111,100,117,108,101,41,2,78,78,41,1,78,
+    41,12,114,125,0,0,0,114,124,0,0,0,114,126,0,0,
+    0,114,127,0,0,0,114,197,0,0,0,114,196,0,0,0,
+    114,195,0,0,0,218,11,99,108,97,115,115,109,101,116,104,
+    111,100,114,194,0,0,0,114,200,0,0,0,114,203,0,0,
+    0,114,206,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,114,191,0,0,0,192,
+    2,0,0,115,28,0,0,0,8,2,4,3,2,255,2,4,
+    2,255,2,3,4,2,2,1,10,6,2,1,10,14,2,1,
+    12,15,2,1,114,191,0,0,0,99,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,
+    0,0,115,48,0,0,0,101,0,90,1,100,0,90,2,100,
+    1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,
+    0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,
+    0,90,7,100,10,83,0,41,11,218,13,95,76,111,97,100,
+    101,114,66,97,115,105,99,115,122,83,66,97,115,101,32,99,
+    108,97,115,115,32,111,102,32,99,111,109,109,111,110,32,99,
+    111,100,101,32,110,101,101,100,101,100,32,98,121,32,98,111,
+    116,104,32,83,111,117,114,99,101,76,111,97,100,101,114,32,
+    97,110,100,10,32,32,32,32,83,111,117,114,99,101,108,101,
+    115,115,70,105,108,101,76,111,97,100,101,114,46,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,
+    0,0,67,0,0,0,115,64,0,0,0,116,0,124,0,160,
+    1,124,1,161,1,131,1,100,1,25,0,125,2,124,2,160,
+    2,100,2,100,1,161,2,100,3,25,0,125,3,124,1,160,
+    3,100,2,161,1,100,4,25,0,125,4,124,3,100,5,107,
+    2,111,62,124,4,100,5,107,3,83,0,41,6,122,141,67,
+    111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,
+    116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99,
+    116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,
+    103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105,
+    102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97,
+    116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103,
+    101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32,
+    97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95,
+    95,105,110,105,116,95,95,46,112,121,39,46,114,39,0,0,
+    0,114,71,0,0,0,114,73,0,0,0,114,28,0,0,0,
+    218,8,95,95,105,110,105,116,95,95,41,4,114,47,0,0,
+    0,114,179,0,0,0,114,43,0,0,0,114,41,0,0,0,
+    41,5,114,118,0,0,0,114,139,0,0,0,114,96,0,0,
+    0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101,
+    90,9,116,97,105,108,95,110,97,109,101,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,114,182,0,0,0,5,
+    3,0,0,115,8,0,0,0,0,3,18,1,16,1,14,1,
+    122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46,
+    105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,
+    0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
+    0,0,0,115,4,0,0,0,100,1,83,0,169,2,122,42,
+    85,115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,
+    110,116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,
+    32,99,114,101,97,116,105,111,110,46,78,114,5,0,0,0,
+    169,2,114,118,0,0,0,114,187,0,0,0,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,218,13,99,114,101,
+    97,116,101,95,109,111,100,117,108,101,13,3,0,0,115,2,
+    0,0,0,0,1,122,27,95,76,111,97,100,101,114,66,97,
+    115,105,99,115,46,99,114,101,97,116,101,95,109,111,100,117,
+    108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
+    0,0,0,5,0,0,0,67,0,0,0,115,56,0,0,0,
+    124,0,160,0,124,1,106,1,161,1,125,2,124,2,100,1,
+    117,0,114,36,116,2,100,2,160,3,124,1,106,1,161,1,
+    131,1,130,1,116,4,160,5,116,6,124,2,124,1,106,7,
+    161,3,1,0,100,1,83,0,41,3,122,19,69,120,101,99,
+    117,116,101,32,116,104,101,32,109,111,100,117,108,101,46,78,
+    122,52,99,97,110,110,111,116,32,108,111,97,100,32,109,111,
+    100,117,108,101,32,123,33,114,125,32,119,104,101,110,32,103,
+    101,116,95,99,111,100,101,40,41,32,114,101,116,117,114,110,
+    115,32,78,111,110,101,41,8,218,8,103,101,116,95,99,111,
+    100,101,114,125,0,0,0,114,117,0,0,0,114,62,0,0,
+    0,114,134,0,0,0,218,25,95,99,97,108,108,95,119,105,
+    116,104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,
+    100,218,4,101,120,101,99,114,131,0,0,0,41,3,114,118,
+    0,0,0,218,6,109,111,100,117,108,101,114,164,0,0,0,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,
+    11,101,120,101,99,95,109,111,100,117,108,101,16,3,0,0,
+    115,12,0,0,0,0,2,12,1,8,1,6,1,4,255,6,
+    2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115,
+    46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+    0,67,0,0,0,115,12,0,0,0,116,0,160,1,124,0,
+    124,1,161,2,83,0,41,1,122,26,84,104,105,115,32,109,
+    111,100,117,108,101,32,105,115,32,100,101,112,114,101,99,97,
+    116,101,100,46,41,2,114,134,0,0,0,218,17,95,108,111,
+    97,100,95,109,111,100,117,108,101,95,115,104,105,109,169,2,
+    114,118,0,0,0,114,139,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,218,11,108,111,97,100,95,
+    109,111,100,117,108,101,24,3,0,0,115,2,0,0,0,0,
+    2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115,
+    46,108,111,97,100,95,109,111,100,117,108,101,78,41,8,114,
+    125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,127,
+    0,0,0,114,182,0,0,0,114,212,0,0,0,114,217,0,
+    0,0,114,220,0,0,0,114,5,0,0,0,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,114,208,0,0,0,
+    0,3,0,0,115,10,0,0,0,8,2,4,3,8,8,8,
+    3,8,8,114,208,0,0,0,99,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,
+    0,115,74,0,0,0,101,0,90,1,100,0,90,2,100,1,
+    100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,5,
+    100,6,132,0,90,5,100,7,100,8,132,0,90,6,100,9,
+    100,10,132,0,90,7,100,11,100,12,156,1,100,13,100,14,
+    132,2,90,8,100,15,100,16,132,0,90,9,100,17,83,0,
+    41,18,218,12,83,111,117,114,99,101,76,111,97,100,101,114,
+    99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,1,0,0,0,67,0,0,0,115,8,0,0,0,116,0,
+    130,1,100,1,83,0,41,2,122,165,79,112,116,105,111,110,
+    97,108,32,109,101,116,104,111,100,32,116,104,97,116,32,114,
+    101,116,117,114,110,115,32,116,104,101,32,109,111,100,105,102,
+    105,99,97,116,105,111,110,32,116,105,109,101,32,40,97,110,
+    32,105,110,116,41,32,102,111,114,32,116,104,101,10,32,32,
+    32,32,32,32,32,32,115,112,101,99,105,102,105,101,100,32,
+    112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,
+    32,32,32,32,32,32,32,82,97,105,115,101,115,32,79,83,
+    69,114,114,111,114,32,119,104,101,110,32,116,104,101,32,112,
+    97,116,104,32,99,97,110,110,111,116,32,98,101,32,104,97,
+    110,100,108,101,100,46,10,32,32,32,32,32,32,32,32,78,
+    41,1,114,50,0,0,0,169,2,114,118,0,0,0,114,44,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,218,10,112,97,116,104,95,109,116,105,109,101,31,3,
+    0,0,115,2,0,0,0,0,6,122,23,83,111,117,114,99,
+    101,76,111,97,100,101,114,46,112,97,116,104,95,109,116,105,
+    109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
+    0,0,0,4,0,0,0,67,0,0,0,115,14,0,0,0,
+    100,1,124,0,160,0,124,1,161,1,105,1,83,0,41,2,
+    97,158,1,0,0,79,112,116,105,111,110,97,108,32,109,101,
+    116,104,111,100,32,114,101,116,117,114,110,105,110,103,32,97,
+    32,109,101,116,97,100,97,116,97,32,100,105,99,116,32,102,
+    111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,
+    10,32,32,32,32,32,32,32,32,112,97,116,104,32,40,97,
+    32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,
+    80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32,
+    32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39,
+    32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32,
+    116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101,
+    115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111,
+    117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99,
+    111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110,
+    59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122,
+    101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115,
+    32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116,
+    101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101,
+    32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32,
+    73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,
+    115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,
+    116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101,
+    97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101,
+    115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101,
+    115,32,79,83,69,114,114,111,114,32,119,104,101,110,32,116,
+    104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,
+    101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,
+    32,32,32,114,169,0,0,0,41,1,114,223,0,0,0,114,
+    222,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,10,112,97,116,104,95,115,116,97,116,115,39,
+    3,0,0,115,2,0,0,0,0,12,122,23,83,111,117,114,
+    99,101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,
+    97,116,115,99,4,0,0,0,0,0,0,0,0,0,0,0,
+    4,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,
+    0,124,0,160,0,124,2,124,3,161,2,83,0,41,1,122,
+    228,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,
+    32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,
+    116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,
+    102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,
+    41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,
+    101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,
+    116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,
+    116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,
+    121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10,
+    32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114,
+    99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101,
+    100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111,
+    114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,114,
+    32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,32,
+    32,32,32,32,32,41,1,218,8,115,101,116,95,100,97,116,
+    97,41,4,114,118,0,0,0,114,107,0,0,0,90,10,99,
+    97,99,104,101,95,112,97,116,104,114,26,0,0,0,114,5,
+    0,0,0,114,5,0,0,0,114,8,0,0,0,218,15,95,
+    99,97,99,104,101,95,98,121,116,101,99,111,100,101,53,3,
+    0,0,115,2,0,0,0,0,8,122,28,83,111,117,114,99,
+    101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,
+    121,116,101,99,111,100,101,99,3,0,0,0,0,0,0,0,
+    0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0,
+    115,4,0,0,0,100,1,83,0,41,2,122,150,79,112,116,
+    105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,
+    99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,
+    98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,
+    32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,
+    32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,
+    116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,
+    32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,
+    119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,
+    111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,
+    32,32,32,78,114,5,0,0,0,41,3,114,118,0,0,0,
+    114,44,0,0,0,114,26,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,114,225,0,0,0,63,3,
+    0,0,115,2,0,0,0,0,1,122,21,83,111,117,114,99,
+    101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97,
+    99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,
+    0,10,0,0,0,67,0,0,0,115,84,0,0,0,124,0,
+    160,0,124,1,161,1,125,2,122,14,124,0,160,1,124,2,
+    161,1,125,3,87,0,110,50,4,0,116,2,121,74,1,0,
+    125,4,1,0,122,26,116,3,100,1,124,1,100,2,141,2,
+    124,4,130,2,87,0,89,0,100,3,125,4,126,4,110,10,
+    100,3,125,4,126,4,48,0,48,0,116,4,124,3,131,1,
+    83,0,41,4,122,52,67,111,110,99,114,101,116,101,32,105,
+    109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,
+    32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,
+    101,116,95,115,111,117,114,99,101,46,122,39,115,111,117,114,
+    99,101,32,110,111,116,32,97,118,97,105,108,97,98,108,101,
+    32,116,104,114,111,117,103,104,32,103,101,116,95,100,97,116,
+    97,40,41,114,115,0,0,0,78,41,5,114,179,0,0,0,
+    218,8,103,101,116,95,100,97,116,97,114,50,0,0,0,114,
+    117,0,0,0,114,176,0,0,0,41,5,114,118,0,0,0,
+    114,139,0,0,0,114,44,0,0,0,114,174,0,0,0,218,
+    3,101,120,99,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,70,
+    3,0,0,115,20,0,0,0,0,2,10,1,2,1,14,1,
+    14,1,4,1,2,255,4,1,2,255,24,2,122,23,83,111,
+    117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115,
+    111,117,114,99,101,114,104,0,0,0,41,1,218,9,95,111,
+    112,116,105,109,105,122,101,99,3,0,0,0,0,0,0,0,
+    1,0,0,0,4,0,0,0,8,0,0,0,67,0,0,0,
+    115,22,0,0,0,116,0,106,1,116,2,124,1,124,2,100,
+    1,100,2,124,3,100,3,141,6,83,0,41,4,122,130,82,
+    101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111,
+    98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,102,
+    114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,32,
+    32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,32,
+    97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,32,
+    97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,32,
+    116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,115,
+    117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,32,
+    32,114,215,0,0,0,84,41,2,218,12,100,111,110,116,95,
+    105,110,104,101,114,105,116,114,83,0,0,0,41,3,114,134,
+    0,0,0,114,214,0,0,0,218,7,99,111,109,112,105,108,
+    101,41,4,114,118,0,0,0,114,26,0,0,0,114,44,0,
+    0,0,114,230,0,0,0,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,218,14,115,111,117,114,99,101,95,116,
+    111,95,99,111,100,101,80,3,0,0,115,6,0,0,0,0,
+    5,12,1,4,255,122,27,83,111,117,114,99,101,76,111,97,
+    100,101,114,46,115,111,117,114,99,101,95,116,111,95,99,111,
+    100,101,99,2,0,0,0,0,0,0,0,0,0,0,0,15,
+    0,0,0,9,0,0,0,67,0,0,0,115,24,2,0,0,
+    124,0,160,0,124,1,161,1,125,2,100,1,125,3,100,1,
+    125,4,100,1,125,5,100,2,125,6,100,3,125,7,122,12,
+    116,1,124,2,131,1,125,8,87,0,110,24,4,0,116,2,
+    121,66,1,0,1,0,1,0,100,1,125,8,89,0,144,1,
+    110,42,48,0,122,14,124,0,160,3,124,2,161,1,125,9,
+    87,0,110,20,4,0,116,4,121,102,1,0,1,0,1,0,
+    89,0,144,1,110,6,48,0,116,5,124,9,100,4,25,0,
+    131,1,125,3,122,14,124,0,160,6,124,8,161,1,125,10,
+    87,0,110,18,4,0,116,4,121,148,1,0,1,0,1,0,
+    89,0,110,216,48,0,124,1,124,8,100,5,156,2,125,11,
+    122,148,116,7,124,10,124,1,124,11,131,3,125,12,116,8,
+    124,10,131,1,100,6,100,1,133,2,25,0,125,13,124,12,
+    100,7,64,0,100,8,107,3,125,6,124,6,144,1,114,30,
+    124,12,100,9,64,0,100,8,107,3,125,7,116,9,106,10,
+    100,10,107,3,144,1,114,50,124,7,115,248,116,9,106,10,
+    100,11,107,2,144,1,114,50,124,0,160,6,124,2,161,1,
+    125,4,116,9,160,11,116,12,124,4,161,2,125,5,116,13,
+    124,10,124,5,124,1,124,11,131,4,1,0,110,20,116,14,
+    124,10,124,3,124,9,100,12,25,0,124,1,124,11,131,5,
+    1,0,87,0,110,24,4,0,116,15,116,16,102,2,144,1,
+    121,76,1,0,1,0,1,0,89,0,110,32,48,0,116,17,
+    160,18,100,13,124,8,124,2,161,3,1,0,116,19,124,13,
+    124,1,124,8,124,2,100,14,141,4,83,0,124,4,100,1,
+    117,0,144,1,114,128,124,0,160,6,124,2,161,1,125,4,
+    124,0,160,20,124,4,124,2,161,2,125,14,116,17,160,18,
+    100,15,124,2,161,2,1,0,116,21,106,22,144,2,115,20,
+    124,8,100,1,117,1,144,2,114,20,124,3,100,1,117,1,
+    144,2,114,20,124,6,144,1,114,220,124,5,100,1,117,0,
+    144,1,114,206,116,9,160,11,124,4,161,1,125,5,116,23,
+    124,14,124,5,124,7,131,3,125,10,110,16,116,24,124,14,
+    124,3,116,25,124,4,131,1,131,3,125,10,122,18,124,0,
+    160,26,124,2,124,8,124,10,161,3,1,0,87,0,110,20,
+    4,0,116,2,144,2,121,18,1,0,1,0,1,0,89,0,
+    110,2,48,0,124,14,83,0,41,16,122,190,67,111,110,99,
+    114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,
+    105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,
+    97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,10,
+    32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,32,
+    111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,117,
+    105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,32,
+    116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101,
+    100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,32,
+    32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,101,
+    116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,111,
+    32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46,
+    10,10,32,32,32,32,32,32,32,32,78,70,84,114,169,0,
+    0,0,114,159,0,0,0,114,145,0,0,0,114,39,0,0,
+    0,114,73,0,0,0,114,28,0,0,0,90,5,110,101,118,
+    101,114,90,6,97,108,119,97,121,115,218,4,115,105,122,101,
+    122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,41,
+    3,114,116,0,0,0,114,106,0,0,0,114,107,0,0,0,
+    122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114,
+    111,109,32,123,125,41,27,114,179,0,0,0,114,97,0,0,
+    0,114,82,0,0,0,114,224,0,0,0,114,50,0,0,0,
+    114,18,0,0,0,114,227,0,0,0,114,152,0,0,0,218,
+    10,109,101,109,111,114,121,118,105,101,119,114,163,0,0,0,
+    90,21,99,104,101,99,107,95,104,97,115,104,95,98,97,115,
+    101,100,95,112,121,99,115,114,157,0,0,0,218,17,95,82,
+    65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114,
+    158,0,0,0,114,156,0,0,0,114,117,0,0,0,114,150,
+    0,0,0,114,134,0,0,0,114,149,0,0,0,114,165,0,
+    0,0,114,233,0,0,0,114,1,0,0,0,218,19,100,111,
+    110,116,95,119,114,105,116,101,95,98,121,116,101,99,111,100,
+    101,114,171,0,0,0,114,170,0,0,0,114,23,0,0,0,
+    114,226,0,0,0,41,15,114,118,0,0,0,114,139,0,0,
+    0,114,107,0,0,0,114,154,0,0,0,114,174,0,0,0,
+    114,157,0,0,0,90,10,104,97,115,104,95,98,97,115,101,
+    100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,114,
+    106,0,0,0,218,2,115,116,114,26,0,0,0,114,151,0,
+    0,0,114,2,0,0,0,90,10,98,121,116,101,115,95,100,
+    97,116,97,90,11,99,111,100,101,95,111,98,106,101,99,116,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+    213,0,0,0,88,3,0,0,115,152,0,0,0,0,7,10,
+    1,4,1,4,1,4,1,4,1,4,1,2,1,12,1,12,
+    1,12,2,2,1,14,1,12,1,8,2,12,1,2,1,14,
+    1,12,1,6,3,2,1,2,254,6,4,2,1,12,1,16,
+    1,12,1,6,1,12,1,12,1,2,255,2,2,8,254,4,
+    3,10,1,4,1,2,1,2,254,4,4,8,1,2,255,6,
+    3,2,1,2,1,2,1,6,1,2,1,2,251,8,7,18,
+    1,6,2,8,1,2,255,4,2,6,1,2,1,2,254,6,
+    3,10,1,10,1,12,1,12,1,18,1,6,255,4,2,6,
+    1,10,1,10,1,14,2,6,1,6,255,4,2,2,1,18,
+    1,14,1,6,1,122,21,83,111,117,114,99,101,76,111,97,
+    100,101,114,46,103,101,116,95,99,111,100,101,78,41,10,114,
+    125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,223,
+    0,0,0,114,224,0,0,0,114,226,0,0,0,114,225,0,
+    0,0,114,229,0,0,0,114,233,0,0,0,114,213,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,114,221,0,0,0,29,3,0,0,115,14,
+    0,0,0,8,2,8,8,8,14,8,10,8,7,8,10,14,
+    8,114,221,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,115,
+    124,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,
+    100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,
+    100,6,100,7,132,0,90,6,101,7,135,0,102,1,100,8,
+    100,9,132,8,131,1,90,8,101,7,100,10,100,11,132,0,
+    131,1,90,9,100,12,100,13,132,0,90,10,101,7,100,14,
+    100,15,132,0,131,1,90,11,100,16,100,17,132,0,90,12,
+    100,18,100,19,132,0,90,13,100,20,100,21,132,0,90,14,
+    100,22,100,23,132,0,90,15,135,0,4,0,90,16,83,0,
+    41,24,218,10,70,105,108,101,76,111,97,100,101,114,122,103,
+    66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114,
+    32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112,
+    108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100,
+    101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104,
+    111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113,
+    117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109,
+    32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0,
+    0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,
+    115,16,0,0,0,124,1,124,0,95,0,124,2,124,0,95,
+    1,100,1,83,0,41,2,122,75,67,97,99,104,101,32,116,
+    104,101,32,109,111,100,117,108,101,32,110,97,109,101,32,97,
+    110,100,32,116,104,101,32,112,97,116,104,32,116,111,32,116,
+    104,101,32,102,105,108,101,32,102,111,117,110,100,32,98,121,
+    32,116,104,101,10,32,32,32,32,32,32,32,32,102,105,110,
+    100,101,114,46,78,114,159,0,0,0,41,3,114,118,0,0,
+    0,114,139,0,0,0,114,44,0,0,0,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,114,209,0,0,0,178,
+    3,0,0,115,4,0,0,0,0,3,6,1,122,19,70,105,
+    108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,
+    95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
+    0,0,2,0,0,0,67,0,0,0,115,24,0,0,0,124,
+    0,106,0,124,1,106,0,107,2,111,22,124,0,106,1,124,
+    1,106,1,107,2,83,0,114,109,0,0,0,169,2,218,9,
+    95,95,99,108,97,115,115,95,95,114,131,0,0,0,169,2,
+    114,118,0,0,0,90,5,111,116,104,101,114,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,218,6,95,95,101,
+    113,95,95,184,3,0,0,115,6,0,0,0,0,1,12,1,
+    10,255,122,17,70,105,108,101,76,111,97,100,101,114,46,95,
+    95,101,113,95,95,99,1,0,0,0,0,0,0,0,0,0,
+    0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,20,
+    0,0,0,116,0,124,0,106,1,131,1,116,0,124,0,106,
+    2,131,1,65,0,83,0,114,109,0,0,0,169,3,218,4,
+    104,97,115,104,114,116,0,0,0,114,44,0,0,0,169,1,
+    114,118,0,0,0,114,5,0,0,0,114,5,0,0,0,114,
+    8,0,0,0,218,8,95,95,104,97,115,104,95,95,188,3,
+    0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76,
+    111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,
+    0,0,0,3,0,0,0,115,16,0,0,0,116,0,116,1,
+    124,0,131,2,160,2,124,1,161,1,83,0,41,1,122,100,
+    76,111,97,100,32,97,32,109,111,100,117,108,101,32,102,114,
+    111,109,32,97,32,102,105,108,101,46,10,10,32,32,32,32,
+    32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,
+    105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,
+    85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,
+    41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,
+    32,32,32,32,41,3,218,5,115,117,112,101,114,114,239,0,
+    0,0,114,220,0,0,0,114,219,0,0,0,169,1,114,241,
+    0,0,0,114,5,0,0,0,114,8,0,0,0,114,220,0,
+    0,0,191,3,0,0,115,2,0,0,0,0,10,122,22,70,
+    105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,109,
+    111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,
+    0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,6,
+    0,0,0,124,0,106,0,83,0,169,1,122,58,82,101,116,
+    117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,
+    116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,
+    97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,
+    102,105,110,100,101,114,46,114,48,0,0,0,114,219,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    114,179,0,0,0,203,3,0,0,115,2,0,0,0,0,3,
+    122,23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
+    95,102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,
+    0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,
+    0,0,115,126,0,0,0,116,0,124,0,116,1,116,2,102,
+    2,131,2,114,70,116,3,160,4,116,5,124,1,131,1,161,
+    1,143,24,125,2,124,2,160,6,161,0,87,0,2,0,100,
+    1,4,0,4,0,131,3,1,0,83,0,49,0,115,58,48,
+    0,1,0,1,0,1,0,89,0,1,0,110,52,116,3,160,
+    7,124,1,100,2,161,2,143,24,125,2,124,2,160,6,161,
+    0,87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,
+    0,49,0,115,112,48,0,1,0,1,0,1,0,89,0,1,
+    0,100,1,83,0,41,3,122,39,82,101,116,117,114,110,32,
+    116,104,101,32,100,97,116,97,32,102,114,111,109,32,112,97,
+    116,104,32,97,115,32,114,97,119,32,98,121,116,101,115,46,
+    78,218,1,114,41,8,114,161,0,0,0,114,221,0,0,0,
+    218,19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,
+    111,97,100,101,114,114,64,0,0,0,90,9,111,112,101,110,
+    95,99,111,100,101,114,84,0,0,0,90,4,114,101,97,100,
+    114,65,0,0,0,41,3,114,118,0,0,0,114,44,0,0,
+    0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,114,227,0,0,0,208,3,0,0,115,10,
+    0,0,0,0,2,14,1,16,1,40,2,14,1,122,19,70,
+    105,108,101,76,111,97,100,101,114,46,103,101,116,95,100,97,
+    116,97,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
+    0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0,
+    124,0,160,0,124,1,161,1,114,14,124,0,83,0,100,0,
+    83,0,114,109,0,0,0,41,1,114,182,0,0,0,169,2,
+    114,118,0,0,0,114,216,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,218,19,103,101,116,95,114,
+    101,115,111,117,114,99,101,95,114,101,97,100,101,114,219,3,
+    0,0,115,6,0,0,0,0,2,10,1,4,1,122,30,70,
+    105,108,101,76,111,97,100,101,114,46,103,101,116,95,114,101,
+    115,111,117,114,99,101,95,114,101,97,100,101,114,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,
+    0,0,67,0,0,0,115,32,0,0,0,116,0,116,1,124,
+    0,106,2,131,1,100,1,25,0,124,1,131,2,125,2,116,
+    3,160,4,124,2,100,2,161,2,83,0,41,3,78,114,73,
+    0,0,0,114,251,0,0,0,41,5,114,38,0,0,0,114,
+    47,0,0,0,114,44,0,0,0,114,64,0,0,0,114,65,
+    0,0,0,169,3,114,118,0,0,0,90,8,114,101,115,111,
+    117,114,99,101,114,44,0,0,0,114,5,0,0,0,114,5,
+    0,0,0,114,8,0,0,0,218,13,111,112,101,110,95,114,
+    101,115,111,117,114,99,101,225,3,0,0,115,4,0,0,0,
+    0,1,20,1,122,24,70,105,108,101,76,111,97,100,101,114,
+    46,111,112,101,110,95,114,101,115,111,117,114,99,101,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,
+    0,0,0,67,0,0,0,115,38,0,0,0,124,0,160,0,
+    124,1,161,1,115,14,116,1,130,1,116,2,116,3,124,0,
+    106,4,131,1,100,1,25,0,124,1,131,2,125,2,124,2,
+    83,0,169,2,78,114,73,0,0,0,41,5,218,11,105,115,
+    95,114,101,115,111,117,114,99,101,218,17,70,105,108,101,78,
+    111,116,70,111,117,110,100,69,114,114,111,114,114,38,0,0,
+    0,114,47,0,0,0,114,44,0,0,0,114,255,0,0,0,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,
+    13,114,101,115,111,117,114,99,101,95,112,97,116,104,229,3,
+    0,0,115,8,0,0,0,0,1,10,1,4,1,20,1,122,
+    24,70,105,108,101,76,111,97,100,101,114,46,114,101,115,111,
+    117,114,99,101,95,112,97,116,104,99,2,0,0,0,0,0,
+    0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,
+    0,0,115,40,0,0,0,116,0,124,1,118,0,114,12,100,
+    1,83,0,116,1,116,2,124,0,106,3,131,1,100,2,25,
+    0,124,1,131,2,125,2,116,4,124,2,131,1,83,0,41,
+    3,78,70,114,73,0,0,0,41,5,114,35,0,0,0,114,
+    38,0,0,0,114,47,0,0,0,114,44,0,0,0,114,54,
+    0,0,0,169,3,114,118,0,0,0,114,116,0,0,0,114,
+    44,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,114,2,1,0,0,235,3,0,0,115,8,0,0,
+    0,0,1,8,1,4,1,20,1,122,22,70,105,108,101,76,
+    111,97,100,101,114,46,105,115,95,114,101,115,111,117,114,99,
+    101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,
+    0,0,5,0,0,0,67,0,0,0,115,24,0,0,0,116,
+    0,116,1,160,2,116,3,124,0,106,4,131,1,100,1,25,
+    0,161,1,131,1,83,0,114,1,1,0,0,41,5,218,4,
+    105,116,101,114,114,4,0,0,0,218,7,108,105,115,116,100,
+    105,114,114,47,0,0,0,114,44,0,0,0,114,246,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    218,8,99,111,110,116,101,110,116,115,241,3,0,0,115,2,
+    0,0,0,0,1,122,19,70,105,108,101,76,111,97,100,101,
+    114,46,99,111,110,116,101,110,116,115,41,17,114,125,0,0,
+    0,114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,
+    114,209,0,0,0,114,243,0,0,0,114,247,0,0,0,114,
+    136,0,0,0,114,220,0,0,0,114,179,0,0,0,114,227,
+    0,0,0,114,254,0,0,0,114,0,1,0,0,114,4,1,
+    0,0,114,2,1,0,0,114,8,1,0,0,90,13,95,95,
+    99,108,97,115,115,99,101,108,108,95,95,114,5,0,0,0,
+    114,5,0,0,0,114,249,0,0,0,114,8,0,0,0,114,
+    239,0,0,0,173,3,0,0,115,30,0,0,0,8,2,4,
+    3,8,6,8,4,8,3,2,1,14,11,2,1,10,4,8,
+    11,2,1,10,5,8,4,8,6,8,6,114,239,0,0,0,
     99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,2,0,0,0,64,0,0,0,115,48,0,0,0,101,0,
+    0,3,0,0,0,64,0,0,0,115,46,0,0,0,101,0,
+    90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,
+    90,4,100,4,100,5,132,0,90,5,100,6,100,7,156,1,
+    100,8,100,9,132,2,90,6,100,10,83,0,41,11,218,16,
+    83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,
+    122,62,67,111,110,99,114,101,116,101,32,105,109,112,108,101,
+    109,101,110,116,97,116,105,111,110,32,111,102,32,83,111,117,
+    114,99,101,76,111,97,100,101,114,32,117,115,105,110,103,32,
+    116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,46,
+    99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
+    0,3,0,0,0,67,0,0,0,115,22,0,0,0,116,0,
+    124,1,131,1,125,2,124,2,106,1,124,2,106,2,100,1,
+    156,2,83,0,41,2,122,33,82,101,116,117,114,110,32,116,
+    104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,
+    116,104,101,32,112,97,116,104,46,41,2,114,169,0,0,0,
+    114,234,0,0,0,41,3,114,49,0,0,0,218,8,115,116,
+    95,109,116,105,109,101,90,7,115,116,95,115,105,122,101,41,
+    3,114,118,0,0,0,114,44,0,0,0,114,238,0,0,0,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+    224,0,0,0,249,3,0,0,115,4,0,0,0,0,2,8,
+    1,122,27,83,111,117,114,99,101,70,105,108,101,76,111,97,
+    100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,
+    0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,
+    0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1,
+    131,1,125,4,124,0,106,1,124,2,124,3,124,4,100,1,
+    141,3,83,0,41,2,78,169,1,218,5,95,109,111,100,101,
+    41,2,114,114,0,0,0,114,225,0,0,0,41,5,114,118,
+    0,0,0,114,107,0,0,0,114,106,0,0,0,114,26,0,
+    0,0,114,52,0,0,0,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,114,226,0,0,0,254,3,0,0,115,
+    4,0,0,0,0,2,8,1,122,32,83,111,117,114,99,101,
+    70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104,
+    101,95,98,121,116,101,99,111,100,101,114,60,0,0,0,114,
+    11,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0,
+    0,9,0,0,0,11,0,0,0,67,0,0,0,115,252,0,
+    0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0,
+    125,6,124,4,114,52,116,1,124,4,131,1,115,52,116,0,
+    124,4,131,1,92,2,125,4,125,7,124,6,160,2,124,7,
+    161,1,1,0,113,16,116,3,124,6,131,1,68,0,93,104,
+    125,7,116,4,124,4,124,7,131,2,125,4,122,14,116,5,
+    160,6,124,4,161,1,1,0,87,0,113,60,4,0,116,7,
+    121,110,1,0,1,0,1,0,89,0,113,60,89,0,113,60,
+    4,0,116,8,121,162,1,0,125,8,1,0,122,30,116,9,
+    160,10,100,1,124,4,124,8,161,3,1,0,87,0,89,0,
+    100,2,125,8,126,8,1,0,100,2,83,0,100,2,125,8,
+    126,8,48,0,48,0,113,60,122,28,116,11,124,1,124,2,
+    124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2,
+    1,0,87,0,110,52,4,0,116,8,144,0,121,246,1,0,
+    125,8,1,0,122,26,116,9,160,10,100,1,124,1,124,8,
+    161,3,1,0,87,0,89,0,100,2,125,8,126,8,110,10,
+    100,2,125,8,126,8,48,0,48,0,100,2,83,0,41,4,
+    122,27,87,114,105,116,101,32,98,121,116,101,115,32,100,97,
+    116,97,32,116,111,32,97,32,102,105,108,101,46,122,27,99,
+    111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32,
+    123,33,114,125,58,32,123,33,114,125,78,122,12,99,114,101,
+    97,116,101,100,32,123,33,114,125,41,12,114,47,0,0,0,
+    114,56,0,0,0,114,186,0,0,0,114,42,0,0,0,114,
+    38,0,0,0,114,4,0,0,0,90,5,109,107,100,105,114,
+    218,15,70,105,108,101,69,120,105,115,116,115,69,114,114,111,
+    114,114,50,0,0,0,114,134,0,0,0,114,149,0,0,0,
+    114,69,0,0,0,41,9,114,118,0,0,0,114,44,0,0,
+    0,114,26,0,0,0,114,12,1,0,0,218,6,112,97,114,
+    101,110,116,114,96,0,0,0,114,37,0,0,0,114,33,0,
+    0,0,114,228,0,0,0,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,114,225,0,0,0,3,4,0,0,115,
+    46,0,0,0,0,2,12,1,4,2,12,1,12,1,12,2,
+    12,1,10,1,2,1,14,1,12,2,8,1,14,3,6,1,
+    4,255,4,2,28,1,2,1,12,1,16,1,16,2,8,1,
+    2,255,122,25,83,111,117,114,99,101,70,105,108,101,76,111,
+    97,100,101,114,46,115,101,116,95,100,97,116,97,78,41,7,
+    114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,
+    127,0,0,0,114,224,0,0,0,114,226,0,0,0,114,225,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,114,9,1,0,0,245,3,0,0,
+    115,8,0,0,0,8,2,4,2,8,5,8,5,114,9,1,
+    0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,
+    0,0,0,2,0,0,0,64,0,0,0,115,32,0,0,0,
+    101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,
+    132,0,90,4,100,4,100,5,132,0,90,5,100,6,83,0,
+    41,7,218,20,83,111,117,114,99,101,108,101,115,115,70,105,
+    108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114,
+    32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115,
+    111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105,
+    109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
+    115,68,0,0,0,124,0,160,0,124,1,161,1,125,2,124,
+    0,160,1,124,2,161,1,125,3,124,1,124,2,100,1,156,
+    2,125,4,116,2,124,3,124,1,124,4,131,3,1,0,116,
+    3,116,4,124,3,131,1,100,2,100,0,133,2,25,0,124,
+    1,124,2,100,3,141,3,83,0,41,4,78,114,159,0,0,
+    0,114,145,0,0,0,41,2,114,116,0,0,0,114,106,0,
+    0,0,41,5,114,179,0,0,0,114,227,0,0,0,114,152,
+    0,0,0,114,165,0,0,0,114,235,0,0,0,41,5,114,
+    118,0,0,0,114,139,0,0,0,114,44,0,0,0,114,26,
+    0,0,0,114,151,0,0,0,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,114,213,0,0,0,38,4,0,0,
+    115,22,0,0,0,0,1,10,1,10,4,2,1,2,254,6,
+    4,12,1,2,1,14,1,2,1,2,253,122,29,83,111,117,
+    114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,
+    114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,
+    0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
+    0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,39,
+    82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116,
+    104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99,
+    101,32,99,111,100,101,46,78,114,5,0,0,0,114,219,0,
+    0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,
+    0,114,229,0,0,0,54,4,0,0,115,2,0,0,0,0,
+    2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108,
+    101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,
+    99,101,78,41,6,114,125,0,0,0,114,124,0,0,0,114,
+    126,0,0,0,114,127,0,0,0,114,213,0,0,0,114,229,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,114,15,1,0,0,34,4,0,0,
+    115,6,0,0,0,8,2,4,2,8,16,114,15,1,0,0,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+    0,3,0,0,0,64,0,0,0,115,92,0,0,0,101,0,
     90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,
     90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,
-    90,6,100,8,100,9,132,0,90,7,100,10,83,0,41,11,
-    218,13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,
-    83,66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,
-    111,109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,
-    100,32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,
-    76,111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,
-    111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,
-    100,101,114,46,99,2,0,0,0,0,0,0,0,0,0,0,
-    0,5,0,0,0,4,0,0,0,67,0,0,0,115,64,0,
-    0,0,116,0,124,0,160,1,124,1,161,1,131,1,100,1,
-    25,0,125,2,124,2,160,2,100,2,100,1,161,2,100,3,
-    25,0,125,3,124,1,160,3,100,2,161,1,100,4,25,0,
-    125,4,124,3,100,5,107,2,111,62,124,4,100,5,107,3,
-    83,0,41,6,122,141,67,111,110,99,114,101,116,101,32,105,
-    109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,
-    32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,105,
-    115,95,112,97,99,107,97,103,101,32,98,121,32,99,104,101,
-    99,107,105,110,103,32,105,102,10,32,32,32,32,32,32,32,
-    32,116,104,101,32,112,97,116,104,32,114,101,116,117,114,110,
-    101,100,32,98,121,32,103,101,116,95,102,105,108,101,110,97,
-    109,101,32,104,97,115,32,97,32,102,105,108,101,110,97,109,
-    101,32,111,102,32,39,95,95,105,110,105,116,95,95,46,112,
-    121,39,46,114,39,0,0,0,114,71,0,0,0,114,73,0,
-    0,0,114,28,0,0,0,218,8,95,95,105,110,105,116,95,
-    95,41,4,114,47,0,0,0,114,180,0,0,0,114,43,0,
-    0,0,114,41,0,0,0,41,5,114,119,0,0,0,114,140,
-    0,0,0,114,97,0,0,0,90,13,102,105,108,101,110,97,
-    109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97,
-    109,101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,183,0,0,0,254,2,0,0,115,8,0,0,0,0,
-    3,18,1,16,1,14,1,122,24,95,76,111,97,100,101,114,
-    66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103,
-    101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
-    0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
-    1,83,0,169,2,122,42,85,115,101,32,100,101,102,97,117,
-    108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,
-    32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,
-    46,78,114,3,0,0,0,169,2,114,119,0,0,0,114,188,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,
-    101,6,3,0,0,115,2,0,0,0,0,1,122,27,95,76,
-    111,97,100,101,114,66,97,115,105,99,115,46,99,114,101,97,
-    116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,
-    0,0,115,56,0,0,0,124,0,160,0,124,1,106,1,161,
-    1,125,2,124,2,100,1,107,8,114,36,116,2,100,2,160,
-    3,124,1,106,1,161,1,131,1,130,1,116,4,160,5,116,
-    6,124,2,124,1,106,7,161,3,1,0,100,1,83,0,41,
-    3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109,
-    111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32,
-    108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125,
-    32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41,
-    32,114,101,116,117,114,110,115,32,78,111,110,101,41,8,218,
-    8,103,101,116,95,99,111,100,101,114,126,0,0,0,114,118,
-    0,0,0,114,62,0,0,0,114,135,0,0,0,218,25,95,
-    99,97,108,108,95,119,105,116,104,95,102,114,97,109,101,115,
-    95,114,101,109,111,118,101,100,218,4,101,120,101,99,114,132,
-    0,0,0,41,3,114,119,0,0,0,218,6,109,111,100,117,
-    108,101,114,165,0,0,0,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,218,11,101,120,101,99,95,109,111,100,
-    117,108,101,9,3,0,0,115,12,0,0,0,0,2,12,1,
-    8,1,6,1,4,255,6,2,122,25,95,76,111,97,100,101,
-    114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100,
-    117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
-    2,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,
-    0,116,0,160,1,124,0,124,1,161,2,83,0,41,1,122,
-    26,84,104,105,115,32,109,111,100,117,108,101,32,105,115,32,
-    100,101,112,114,101,99,97,116,101,100,46,41,2,114,135,0,
-    0,0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,
-    95,115,104,105,109,169,2,114,119,0,0,0,114,140,0,0,
-    0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    218,11,108,111,97,100,95,109,111,100,117,108,101,17,3,0,
-    0,115,2,0,0,0,0,2,122,25,95,76,111,97,100,101,
-    114,66,97,115,105,99,115,46,108,111,97,100,95,109,111,100,
-    117,108,101,78,41,8,114,126,0,0,0,114,125,0,0,0,
-    114,127,0,0,0,114,128,0,0,0,114,183,0,0,0,114,
-    213,0,0,0,114,218,0,0,0,114,221,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,114,209,0,0,0,249,2,0,0,115,10,0,0,0,
-    8,2,4,3,8,8,8,3,8,8,114,209,0,0,0,99,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    3,0,0,0,64,0,0,0,115,74,0,0,0,101,0,90,
-    1,100,0,90,2,100,1,100,2,132,0,90,3,100,3,100,
-    4,132,0,90,4,100,5,100,6,132,0,90,5,100,7,100,
-    8,132,0,90,6,100,9,100,10,132,0,90,7,100,11,100,
-    12,156,1,100,13,100,14,132,2,90,8,100,15,100,16,132,
-    0,90,9,100,17,83,0,41,18,218,12,83,111,117,114,99,
-    101,76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
-    115,8,0,0,0,116,0,130,1,100,1,83,0,41,2,122,
-    165,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,
-    32,116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,
-    101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,
-    105,109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,
-    32,116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,
-    99,105,102,105,101,100,32,112,97,116,104,32,40,97,32,115,
-    116,114,41,46,10,10,32,32,32,32,32,32,32,32,82,97,
-    105,115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,
-    110,32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,
-    116,32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,
-    32,32,32,32,32,32,78,41,1,114,50,0,0,0,169,2,
-    114,119,0,0,0,114,44,0,0,0,114,3,0,0,0,114,
-    3,0,0,0,114,6,0,0,0,218,10,112,97,116,104,95,
-    109,116,105,109,101,24,3,0,0,115,2,0,0,0,0,6,
-    122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112,
-    97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,
-    0,0,115,14,0,0,0,100,1,124,0,160,0,124,1,161,
-    1,105,1,83,0,41,2,97,158,1,0,0,79,112,116,105,
-    111,110,97,108,32,109,101,116,104,111,100,32,114,101,116,117,
-    114,110,105,110,103,32,97,32,109,101,116,97,100,97,116,97,
-    32,100,105,99,116,32,102,111,114,32,116,104,101,32,115,112,
-    101,99,105,102,105,101,100,10,32,32,32,32,32,32,32,32,
-    112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,
-    32,32,32,32,32,32,32,80,111,115,115,105,98,108,101,32,
-    107,101,121,115,58,10,32,32,32,32,32,32,32,32,45,32,
-    39,109,116,105,109,101,39,32,40,109,97,110,100,97,116,111,
-    114,121,41,32,105,115,32,116,104,101,32,110,117,109,101,114,
-    105,99,32,116,105,109,101,115,116,97,109,112,32,111,102,32,
-    108,97,115,116,32,115,111,117,114,99,101,10,32,32,32,32,
-    32,32,32,32,32,32,99,111,100,101,32,109,111,100,105,102,
-    105,99,97,116,105,111,110,59,10,32,32,32,32,32,32,32,
-    32,45,32,39,115,105,122,101,39,32,40,111,112,116,105,111,
-    110,97,108,41,32,105,115,32,116,104,101,32,115,105,122,101,
-    32,105,110,32,98,121,116,101,115,32,111,102,32,116,104,101,
-    32,115,111,117,114,99,101,32,99,111,100,101,46,10,10,32,
-    32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,
-    105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,
-    97,108,108,111,119,115,32,116,104,101,32,108,111,97,100,101,
-    114,32,116,111,32,114,101,97,100,32,98,121,116,101,99,111,
-    100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,
-    32,32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,
-    32,119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,
-    97,110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,
-    46,10,32,32,32,32,32,32,32,32,114,170,0,0,0,41,
-    1,114,224,0,0,0,114,223,0,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,10,112,97,116,104,
-    95,115,116,97,116,115,32,3,0,0,115,2,0,0,0,0,
-    12,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,
-    112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0,
-    0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,
-    0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3,
-    161,2,83,0,41,1,122,228,79,112,116,105,111,110,97,108,
-    32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,
-    105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,
-    41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,
-    32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,
-    32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,
-    116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,
-    119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,
-    110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,
-    105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84,
-    104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105,
-    115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101,
-    114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116,
-    114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105,
-    111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8,
-    115,101,116,95,100,97,116,97,41,4,114,119,0,0,0,114,
-    108,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104,
-    114,26,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
-    6,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116,
-    101,99,111,100,101,46,3,0,0,115,2,0,0,0,0,8,
-    122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95,
-    99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3,
-    0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,
-    0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,
-    41,2,122,150,79,112,116,105,111,110,97,108,32,109,101,116,
-    104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115,
-    32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111,
-    32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32,
-    115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73,
-    109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,
-    32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102,
-    111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111,
-    102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,
-    46,10,32,32,32,32,32,32,32,32,78,114,3,0,0,0,
-    41,3,114,119,0,0,0,114,44,0,0,0,114,26,0,0,
-    0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    114,226,0,0,0,56,3,0,0,115,2,0,0,0,0,1,
-    122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,
-    101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,5,0,0,0,10,0,0,0,67,0,0,0,
-    115,82,0,0,0,124,0,160,0,124,1,161,1,125,2,122,
-    14,124,0,160,1,124,2,161,1,125,3,87,0,110,48,4,
-    0,116,2,107,10,114,72,1,0,125,4,1,0,122,18,116,
-    3,100,1,124,1,100,2,141,2,124,4,130,2,87,0,53,
-    0,100,3,125,4,126,4,88,0,89,0,110,2,88,0,116,
-    4,124,3,131,1,83,0,41,4,122,52,67,111,110,99,114,
-    101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,
-    111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,
-    100,101,114,46,103,101,116,95,115,111,117,114,99,101,46,122,
-    39,115,111,117,114,99,101,32,110,111,116,32,97,118,97,105,
-    108,97,98,108,101,32,116,104,114,111,117,103,104,32,103,101,
-    116,95,100,97,116,97,40,41,114,116,0,0,0,78,41,5,
-    114,180,0,0,0,218,8,103,101,116,95,100,97,116,97,114,
-    50,0,0,0,114,118,0,0,0,114,177,0,0,0,41,5,
-    114,119,0,0,0,114,140,0,0,0,114,44,0,0,0,114,
-    175,0,0,0,218,3,101,120,99,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,10,103,101,116,95,115,111,
-    117,114,99,101,63,3,0,0,115,20,0,0,0,0,2,10,
-    1,2,1,14,1,16,1,4,1,2,255,4,1,2,255,20,
-    2,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,
-    103,101,116,95,115,111,117,114,99,101,114,105,0,0,0,41,
-    1,218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,
-    0,0,0,0,0,1,0,0,0,4,0,0,0,8,0,0,
-    0,67,0,0,0,115,22,0,0,0,116,0,106,1,116,2,
-    124,1,124,2,100,1,100,2,124,3,100,3,141,6,83,0,
-    41,4,122,130,82,101,116,117,114,110,32,116,104,101,32,99,
-    111,100,101,32,111,98,106,101,99,116,32,99,111,109,112,105,
-    108,101,100,32,102,114,111,109,32,115,111,117,114,99,101,46,
-    10,10,32,32,32,32,32,32,32,32,84,104,101,32,39,100,
-    97,116,97,39,32,97,114,103,117,109,101,110,116,32,99,97,
-    110,32,98,101,32,97,110,121,32,111,98,106,101,99,116,32,
-    116,121,112,101,32,116,104,97,116,32,99,111,109,112,105,108,
-    101,40,41,32,115,117,112,112,111,114,116,115,46,10,32,32,
-    32,32,32,32,32,32,114,216,0,0,0,84,41,2,218,12,
-    100,111,110,116,95,105,110,104,101,114,105,116,114,84,0,0,
-    0,41,3,114,135,0,0,0,114,215,0,0,0,218,7,99,
-    111,109,112,105,108,101,41,4,114,119,0,0,0,114,26,0,
-    0,0,114,44,0,0,0,114,231,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,14,115,111,117,
-    114,99,101,95,116,111,95,99,111,100,101,73,3,0,0,115,
-    8,0,0,0,0,5,12,1,2,0,2,255,122,27,83,111,
-    117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99,
-    101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,15,0,0,0,9,0,0,0,67,0,
-    0,0,115,34,2,0,0,124,0,160,0,124,1,161,1,125,
-    2,100,1,125,3,100,1,125,4,100,1,125,5,100,2,125,
-    6,100,3,125,7,122,12,116,1,124,2,131,1,125,8,87,
-    0,110,26,4,0,116,2,107,10,114,68,1,0,1,0,1,
-    0,100,1,125,8,89,0,144,1,110,48,88,0,122,14,124,
-    0,160,3,124,2,161,1,125,9,87,0,110,22,4,0,116,
-    4,107,10,114,106,1,0,1,0,1,0,89,0,144,1,110,
-    10,88,0,116,5,124,9,100,4,25,0,131,1,125,3,122,
-    14,124,0,160,6,124,8,161,1,125,10,87,0,110,20,4,
-    0,116,4,107,10,114,154,1,0,1,0,1,0,89,0,110,
-    218,88,0,124,1,124,8,100,5,156,2,125,11,122,148,116,
-    7,124,10,124,1,124,11,131,3,125,12,116,8,124,10,131,
-    1,100,6,100,1,133,2,25,0,125,13,124,12,100,7,64,
-    0,100,8,107,3,125,6,124,6,144,1,114,36,124,12,100,
-    9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107,
-    3,144,1,114,56,124,7,115,254,116,9,106,10,100,11,107,
-    2,144,1,114,56,124,0,160,6,124,2,161,1,125,4,116,
-    9,160,11,116,12,124,4,161,2,125,5,116,13,124,10,124,
-    5,124,1,124,11,131,4,1,0,110,20,116,14,124,10,124,
-    3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,87,
-    0,110,26,4,0,116,15,116,16,102,2,107,10,144,1,114,
-    84,1,0,1,0,1,0,89,0,110,32,88,0,116,17,160,
-    18,100,13,124,8,124,2,161,3,1,0,116,19,124,13,124,
-    1,124,8,124,2,100,14,141,4,83,0,124,4,100,1,107,
-    8,144,1,114,136,124,0,160,6,124,2,161,1,125,4,124,
-    0,160,20,124,4,124,2,161,2,125,14,116,17,160,18,100,
-    15,124,2,161,2,1,0,116,21,106,22,144,2,115,30,124,
-    8,100,1,107,9,144,2,114,30,124,3,100,1,107,9,144,
-    2,114,30,124,6,144,1,114,228,124,5,100,1,107,8,144,
-    1,114,214,116,9,160,11,124,4,161,1,125,5,116,23,124,
-    14,124,5,124,7,131,3,125,10,110,16,116,24,124,14,124,
-    3,116,25,124,4,131,1,131,3,125,10,122,18,124,0,160,
-    26,124,2,124,8,124,10,161,3,1,0,87,0,110,22,4,
-    0,116,2,107,10,144,2,114,28,1,0,1,0,1,0,89,
-    0,110,2,88,0,124,14,83,0,41,16,122,190,67,111,110,
-    99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,
-    116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,
-    111,97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,
-    10,32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,
-    32,111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,
-    117,105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,
-    32,116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,
-    101,100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,
-    32,32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,
-    101,116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,
-    111,32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,
-    46,10,10,32,32,32,32,32,32,32,32,78,70,84,114,170,
-    0,0,0,114,160,0,0,0,114,146,0,0,0,114,39,0,
-    0,0,114,73,0,0,0,114,28,0,0,0,90,5,110,101,
-    118,101,114,90,6,97,108,119,97,121,115,218,4,115,105,122,
-    101,122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,
-    41,3,114,117,0,0,0,114,107,0,0,0,114,108,0,0,
-    0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,
-    114,111,109,32,123,125,41,27,114,180,0,0,0,114,98,0,
-    0,0,114,82,0,0,0,114,225,0,0,0,114,50,0,0,
-    0,114,17,0,0,0,114,228,0,0,0,114,153,0,0,0,
-    218,10,109,101,109,111,114,121,118,105,101,119,114,164,0,0,
-    0,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97,
-    115,101,100,95,112,121,99,115,114,158,0,0,0,218,17,95,
-    82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,
-    114,159,0,0,0,114,157,0,0,0,114,118,0,0,0,114,
-    151,0,0,0,114,135,0,0,0,114,150,0,0,0,114,166,
-    0,0,0,114,234,0,0,0,114,8,0,0,0,218,19,100,
-    111,110,116,95,119,114,105,116,101,95,98,121,116,101,99,111,
-    100,101,114,172,0,0,0,114,171,0,0,0,114,22,0,0,
-    0,114,227,0,0,0,41,15,114,119,0,0,0,114,140,0,
-    0,0,114,108,0,0,0,114,155,0,0,0,114,175,0,0,
-    0,114,158,0,0,0,90,10,104,97,115,104,95,98,97,115,
-    101,100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,
-    114,107,0,0,0,218,2,115,116,114,26,0,0,0,114,152,
-    0,0,0,114,83,0,0,0,90,10,98,121,116,101,115,95,
-    100,97,116,97,90,11,99,111,100,101,95,111,98,106,101,99,
-    116,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    114,214,0,0,0,81,3,0,0,115,152,0,0,0,0,7,
-    10,1,4,1,4,1,4,1,4,1,4,1,2,1,12,1,
-    14,1,12,2,2,1,14,1,14,1,8,2,12,1,2,1,
-    14,1,14,1,6,3,2,1,2,254,6,4,2,1,12,1,
-    16,1,12,1,6,1,12,1,12,1,2,255,2,2,8,254,
-    4,3,10,1,4,1,2,1,2,254,4,4,8,1,2,255,
-    6,3,2,1,2,1,2,1,6,1,2,1,2,251,8,7,
-    20,1,6,2,8,1,2,255,4,2,6,1,2,1,2,254,
-    6,3,10,1,10,1,12,1,12,1,18,1,6,255,4,2,
-    6,1,10,1,10,1,14,2,6,1,6,255,4,2,2,1,
-    18,1,16,1,6,1,122,21,83,111,117,114,99,101,76,111,
-    97,100,101,114,46,103,101,116,95,99,111,100,101,78,41,10,
-    114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114,
-    224,0,0,0,114,225,0,0,0,114,227,0,0,0,114,226,
-    0,0,0,114,230,0,0,0,114,234,0,0,0,114,214,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,114,222,0,0,0,22,3,0,0,115,
-    14,0,0,0,8,2,8,8,8,14,8,10,8,7,8,10,
-    14,8,114,222,0,0,0,99,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-    115,124,0,0,0,101,0,90,1,100,0,90,2,100,1,90,
-    3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,
-    5,100,6,100,7,132,0,90,6,101,7,135,0,102,1,100,
-    8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132,
-    0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100,
-    14,100,15,132,0,131,1,90,11,100,16,100,17,132,0,90,
-    12,100,18,100,19,132,0,90,13,100,20,100,21,132,0,90,
-    14,100,22,100,23,132,0,90,15,135,0,4,0,90,16,83,
-    0,41,24,218,10,70,105,108,101,76,111,97,100,101,114,122,
-    103,66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,
-    114,32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,
-    112,108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,
-    100,101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,
-    104,111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,
-    113,117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,
-    109,32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,
-    0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,
-    0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0,
-    95,1,100,1,83,0,41,2,122,75,67,97,99,104,101,32,
-    116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32,
-    97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32,
-    116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98,
-    121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105,
-    110,100,101,114,46,78,114,160,0,0,0,41,3,114,119,0,
-    0,0,114,140,0,0,0,114,44,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,114,210,0,0,0,
-    171,3,0,0,115,4,0,0,0,0,3,6,1,122,19,70,
-    105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,
-    95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,2,0,0,0,67,0,0,0,115,24,0,0,0,
-    124,0,106,0,124,1,106,0,107,2,111,22,124,0,106,1,
-    124,1,106,1,107,2,83,0,114,110,0,0,0,169,2,218,
-    9,95,95,99,108,97,115,115,95,95,114,132,0,0,0,169,
-    2,114,119,0,0,0,90,5,111,116,104,101,114,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,218,6,95,95,
-    101,113,95,95,177,3,0,0,115,6,0,0,0,0,1,12,
-    1,10,255,122,17,70,105,108,101,76,111,97,100,101,114,46,
-    95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
-    20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0,
-    106,2,131,1,65,0,83,0,114,110,0,0,0,169,3,218,
-    4,104,97,115,104,114,117,0,0,0,114,44,0,0,0,169,
-    1,114,119,0,0,0,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,218,8,95,95,104,97,115,104,95,95,181,
-    3,0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,
-    76,111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,
-    2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
-    3,0,0,0,3,0,0,0,115,16,0,0,0,116,0,116,
-    1,124,0,131,2,160,2,124,1,161,1,83,0,41,1,122,
-    100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102,
-    114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32,
-    32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,
-    32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,
-    32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,
-    40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,
-    32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,240,
-    0,0,0,114,221,0,0,0,114,220,0,0,0,169,1,114,
-    242,0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,
-    0,0,0,184,3,0,0,115,2,0,0,0,0,10,122,22,
-    70,105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,
-    109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,
-    0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,
-    6,0,0,0,124,0,106,0,83,0,169,1,122,58,82,101,
-    116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,
-    32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,
-    32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,
-    32,102,105,110,100,101,114,46,114,48,0,0,0,114,220,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,180,0,0,0,196,3,0,0,115,2,0,0,0,0,
-    3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101,
-    116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,3,0,0,0,10,0,0,0,67,
-    0,0,0,115,102,0,0,0,116,0,124,0,116,1,116,2,
-    102,2,131,2,114,58,116,3,160,4,116,5,124,1,131,1,
-    161,1,143,22,125,2,124,2,160,6,161,0,87,0,2,0,
-    53,0,81,0,82,0,163,0,83,0,81,0,82,0,88,0,
-    110,40,116,3,160,7,124,1,100,1,161,2,143,22,125,2,
-    124,2,160,6,161,0,87,0,2,0,53,0,81,0,82,0,
-    163,0,83,0,81,0,82,0,88,0,100,2,83,0,41,3,
-    122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116,
-    97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114,
-    97,119,32,98,121,116,101,115,46,218,1,114,78,41,8,114,
-    162,0,0,0,114,222,0,0,0,218,19,69,120,116,101,110,
-    115,105,111,110,70,105,108,101,76,111,97,100,101,114,114,64,
-    0,0,0,90,9,111,112,101,110,95,99,111,100,101,114,85,
-    0,0,0,90,4,114,101,97,100,114,65,0,0,0,41,3,
-    114,119,0,0,0,114,44,0,0,0,114,68,0,0,0,114,
-    3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,228,
-    0,0,0,201,3,0,0,115,10,0,0,0,0,2,14,1,
-    16,1,28,2,14,1,122,19,70,105,108,101,76,111,97,100,
-    101,114,46,103,101,116,95,100,97,116,97,99,2,0,0,0,
-    0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
-    67,0,0,0,115,18,0,0,0,124,0,160,0,124,1,161,
-    1,114,14,124,0,83,0,100,0,83,0,114,110,0,0,0,
-    41,1,114,183,0,0,0,169,2,114,119,0,0,0,114,217,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,
-    95,114,101,97,100,101,114,212,3,0,0,115,6,0,0,0,
-    0,2,10,1,4,1,122,30,70,105,108,101,76,111,97,100,
-    101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,
-    114,101,97,100,101,114,99,2,0,0,0,0,0,0,0,0,
-    0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,
-    32,0,0,0,116,0,116,1,124,0,106,2,131,1,100,1,
-    25,0,124,1,131,2,125,2,116,3,160,4,124,2,100,2,
-    161,2,83,0,41,3,78,114,73,0,0,0,114,252,0,0,
-    0,41,5,114,38,0,0,0,114,47,0,0,0,114,44,0,
-    0,0,114,64,0,0,0,114,65,0,0,0,169,3,114,119,
-    0,0,0,90,8,114,101,115,111,117,114,99,101,114,44,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,218,13,111,112,101,110,95,114,101,115,111,117,114,99,101,
-    218,3,0,0,115,4,0,0,0,0,1,20,1,122,24,70,
-    105,108,101,76,111,97,100,101,114,46,111,112,101,110,95,114,
-    101,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,
-    115,38,0,0,0,124,0,160,0,124,1,161,1,115,14,116,
-    1,130,1,116,2,116,3,124,0,106,4,131,1,100,1,25,
-    0,124,1,131,2,125,2,124,2,83,0,169,2,78,114,73,
-    0,0,0,41,5,218,11,105,115,95,114,101,115,111,117,114,
-    99,101,218,17,70,105,108,101,78,111,116,70,111,117,110,100,
-    69,114,114,111,114,114,38,0,0,0,114,47,0,0,0,114,
-    44,0,0,0,114,0,1,0,0,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,13,114,101,115,111,117,114,
-    99,101,95,112,97,116,104,222,3,0,0,115,8,0,0,0,
-    0,1,10,1,4,1,20,1,122,24,70,105,108,101,76,111,
-    97,100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,
-    116,104,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
-    0,0,0,3,0,0,0,67,0,0,0,115,40,0,0,0,
-    116,0,124,1,107,6,114,12,100,1,83,0,116,1,116,2,
-    124,0,106,3,131,1,100,2,25,0,124,1,131,2,125,2,
-    116,4,124,2,131,1,83,0,41,3,78,70,114,73,0,0,
-    0,41,5,114,35,0,0,0,114,38,0,0,0,114,47,0,
-    0,0,114,44,0,0,0,114,54,0,0,0,169,3,114,119,
-    0,0,0,114,117,0,0,0,114,44,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,114,3,1,0,
-    0,228,3,0,0,115,8,0,0,0,0,1,8,1,4,1,
-    20,1,122,22,70,105,108,101,76,111,97,100,101,114,46,105,
-    115,95,114,101,115,111,117,114,99,101,99,1,0,0,0,0,
-    0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,
-    0,0,0,115,24,0,0,0,116,0,116,1,160,2,116,3,
-    124,0,106,4,131,1,100,1,25,0,161,1,131,1,83,0,
-    114,2,1,0,0,41,5,218,4,105,116,101,114,114,2,0,
-    0,0,218,7,108,105,115,116,100,105,114,114,47,0,0,0,
-    114,44,0,0,0,114,247,0,0,0,114,3,0,0,0,114,
-    3,0,0,0,114,6,0,0,0,218,8,99,111,110,116,101,
-    110,116,115,234,3,0,0,115,2,0,0,0,0,1,122,19,
-    70,105,108,101,76,111,97,100,101,114,46,99,111,110,116,101,
-    110,116,115,41,17,114,126,0,0,0,114,125,0,0,0,114,
-    127,0,0,0,114,128,0,0,0,114,210,0,0,0,114,244,
-    0,0,0,114,248,0,0,0,114,137,0,0,0,114,221,0,
-    0,0,114,180,0,0,0,114,228,0,0,0,114,255,0,0,
-    0,114,1,1,0,0,114,5,1,0,0,114,3,1,0,0,
-    114,9,1,0,0,90,13,95,95,99,108,97,115,115,99,101,
-    108,108,95,95,114,3,0,0,0,114,3,0,0,0,114,250,
-    0,0,0,114,6,0,0,0,114,240,0,0,0,166,3,0,
-    0,115,30,0,0,0,8,2,4,3,8,6,8,4,8,3,
-    2,1,14,11,2,1,10,4,8,11,2,1,10,5,8,4,
-    8,6,8,6,114,240,0,0,0,99,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,
-    0,0,115,46,0,0,0,101,0,90,1,100,0,90,2,100,
-    1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,
-    0,90,5,100,6,100,7,156,1,100,8,100,9,132,2,90,
-    6,100,10,83,0,41,11,218,16,83,111,117,114,99,101,70,
-    105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114,
-    101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,
-    111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100,
-    101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108,
-    101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,
-    0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124,
-    2,106,1,124,2,106,2,100,1,156,2,83,0,41,2,122,
-    33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97,
-    100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116,
-    104,46,41,2,114,170,0,0,0,114,235,0,0,0,41,3,
-    114,49,0,0,0,218,8,115,116,95,109,116,105,109,101,90,
-    7,115,116,95,115,105,122,101,41,3,114,119,0,0,0,114,
-    44,0,0,0,114,239,0,0,0,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,114,225,0,0,0,242,3,0,
-    0,115,4,0,0,0,0,2,8,1,122,27,83,111,117,114,
-    99,101,70,105,108,101,76,111,97,100,101,114,46,112,97,116,
-    104,95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,
-    0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
-    115,24,0,0,0,116,0,124,1,131,1,125,4,124,0,106,
-    1,124,2,124,3,124,4,100,1,141,3,83,0,41,2,78,
-    169,1,218,5,95,109,111,100,101,41,2,114,115,0,0,0,
-    114,226,0,0,0,41,5,114,119,0,0,0,114,108,0,0,
-    0,114,107,0,0,0,114,26,0,0,0,114,52,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    227,0,0,0,247,3,0,0,115,4,0,0,0,0,2,8,
-    1,122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,
-    100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,
-    111,100,101,114,60,0,0,0,114,12,1,0,0,99,3,0,
-    0,0,0,0,0,0,1,0,0,0,9,0,0,0,11,0,
-    0,0,67,0,0,0,115,252,0,0,0,116,0,124,1,131,
-    1,92,2,125,4,125,5,103,0,125,6,124,4,114,52,116,
-    1,124,4,131,1,115,52,116,0,124,4,131,1,92,2,125,
-    4,125,7,124,6,160,2,124,7,161,1,1,0,113,16,116,
-    3,124,6,131,1,68,0,93,108,125,7,116,4,124,4,124,
-    7,131,2,125,4,122,14,116,5,160,6,124,4,161,1,1,
-    0,87,0,113,60,4,0,116,7,107,10,114,112,1,0,1,
-    0,1,0,89,0,113,60,89,0,113,60,4,0,116,8,107,
-    10,114,166,1,0,125,8,1,0,122,26,116,9,160,10,100,
-    1,124,4,124,8,161,3,1,0,87,0,89,0,162,6,1,
-    0,100,2,83,0,100,2,125,8,126,8,88,0,89,0,113,
-    60,88,0,113,60,122,28,116,11,124,1,124,2,124,3,131,
-    3,1,0,116,9,160,10,100,3,124,1,161,2,1,0,87,
-    0,110,48,4,0,116,8,107,10,114,246,1,0,125,8,1,
-    0,122,18,116,9,160,10,100,1,124,1,124,8,161,3,1,
-    0,87,0,53,0,100,2,125,8,126,8,88,0,89,0,110,
-    2,88,0,100,2,83,0,41,4,122,27,87,114,105,116,101,
-    32,98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,
-    32,102,105,108,101,46,122,27,99,111,117,108,100,32,110,111,
-    116,32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,
-    33,114,125,78,122,12,99,114,101,97,116,101,100,32,123,33,
-    114,125,41,12,114,47,0,0,0,114,56,0,0,0,114,187,
-    0,0,0,114,42,0,0,0,114,38,0,0,0,114,2,0,
-    0,0,90,5,109,107,100,105,114,218,15,70,105,108,101,69,
-    120,105,115,116,115,69,114,114,111,114,114,50,0,0,0,114,
-    135,0,0,0,114,150,0,0,0,114,69,0,0,0,41,9,
-    114,119,0,0,0,114,44,0,0,0,114,26,0,0,0,114,
-    13,1,0,0,218,6,112,97,114,101,110,116,114,97,0,0,
-    0,114,37,0,0,0,114,33,0,0,0,114,229,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    226,0,0,0,252,3,0,0,115,48,0,0,0,0,2,12,
-    1,4,2,12,1,12,1,12,2,12,1,10,1,2,1,14,
-    1,14,2,8,1,16,3,6,1,2,0,2,255,4,2,28,
-    1,2,1,12,1,16,1,16,2,8,1,2,255,122,25,83,
-    111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,
-    115,101,116,95,100,97,116,97,78,41,7,114,126,0,0,0,
-    114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,114,
-    225,0,0,0,114,227,0,0,0,114,226,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,114,10,1,0,0,238,3,0,0,115,8,0,0,0,
-    8,2,4,2,8,5,8,5,114,10,1,0,0,99,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
-    0,0,64,0,0,0,115,32,0,0,0,101,0,90,1,100,
-    0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,
-    4,100,5,132,0,90,5,100,6,83,0,41,7,218,20,83,
-    111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,
-    100,101,114,122,45,76,111,97,100,101,114,32,119,104,105,99,
-    104,32,104,97,110,100,108,101,115,32,115,111,117,114,99,101,
-    108,101,115,115,32,102,105,108,101,32,105,109,112,111,114,116,
-    115,46,99,2,0,0,0,0,0,0,0,0,0,0,0,5,
-    0,0,0,5,0,0,0,67,0,0,0,115,68,0,0,0,
-    124,0,160,0,124,1,161,1,125,2,124,0,160,1,124,2,
-    161,1,125,3,124,1,124,2,100,1,156,2,125,4,116,2,
-    124,3,124,1,124,4,131,3,1,0,116,3,116,4,124,3,
-    131,1,100,2,100,0,133,2,25,0,124,1,124,2,100,3,
-    141,3,83,0,41,4,78,114,160,0,0,0,114,146,0,0,
-    0,41,2,114,117,0,0,0,114,107,0,0,0,41,5,114,
-    180,0,0,0,114,228,0,0,0,114,153,0,0,0,114,166,
-    0,0,0,114,236,0,0,0,41,5,114,119,0,0,0,114,
-    140,0,0,0,114,44,0,0,0,114,26,0,0,0,114,152,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,114,214,0,0,0,31,4,0,0,115,22,0,0,0,
-    0,1,10,1,10,4,2,1,2,254,6,4,12,1,2,1,
-    14,1,2,1,2,253,122,29,83,111,117,114,99,101,108,101,
-    115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
-    95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,
-    0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,
-    0,0,0,100,1,83,0,41,2,122,39,82,101,116,117,114,
-    110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,32,
-    105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100,
-    101,46,78,114,3,0,0,0,114,220,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,114,230,0,0,
-    0,47,4,0,0,115,2,0,0,0,0,2,122,31,83,111,
-    117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,
-    101,114,46,103,101,116,95,115,111,117,114,99,101,78,41,6,
-    114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114,
-    128,0,0,0,114,214,0,0,0,114,230,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
-    0,0,114,16,1,0,0,27,4,0,0,115,6,0,0,0,
-    8,2,4,2,8,16,114,16,1,0,0,99,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
-    64,0,0,0,115,92,0,0,0,101,0,90,1,100,0,90,
-    2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,
-    5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100,
-    9,132,0,90,7,100,10,100,11,132,0,90,8,100,12,100,
-    13,132,0,90,9,100,14,100,15,132,0,90,10,100,16,100,
-    17,132,0,90,11,101,12,100,18,100,19,132,0,131,1,90,
-    13,100,20,83,0,41,21,114,253,0,0,0,122,93,76,111,
-    97,100,101,114,32,102,111,114,32,101,120,116,101,110,115,105,
-    111,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,
-    32,84,104,101,32,99,111,110,115,116,114,117,99,116,111,114,
-    32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,
-    119,111,114,107,32,119,105,116,104,32,70,105,108,101,70,105,
-    110,100,101,114,46,10,10,32,32,32,32,99,3,0,0,0,
-    0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,
-    67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,124,
-    2,124,0,95,1,100,0,83,0,114,110,0,0,0,114,160,
-    0,0,0,114,6,1,0,0,114,3,0,0,0,114,3,0,
-    0,0,114,6,0,0,0,114,210,0,0,0,64,4,0,0,
-    115,4,0,0,0,0,1,6,1,122,28,69,120,116,101,110,
-    115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,
-    95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,
-    115,24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,
-    22,124,0,106,1,124,1,106,1,107,2,83,0,114,110,0,
-    0,0,114,241,0,0,0,114,243,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,114,244,0,0,0,
-    68,4,0,0,115,6,0,0,0,0,1,12,1,10,255,122,
-    26,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
-    97,100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,
-    67,0,0,0,115,20,0,0,0,116,0,124,0,106,1,131,
-    1,116,0,124,0,106,2,131,1,65,0,83,0,114,110,0,
-    0,0,114,245,0,0,0,114,247,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,114,248,0,0,0,
-    72,4,0,0,115,2,0,0,0,0,1,122,28,69,120,116,
-    101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,
-    46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,
-    0,0,115,36,0,0,0,116,0,160,1,116,2,106,3,124,
-    1,161,2,125,2,116,0,160,4,100,1,124,1,106,5,124,
-    0,106,6,161,3,1,0,124,2,83,0,41,2,122,38,67,
-    114,101,97,116,101,32,97,110,32,117,110,105,116,105,97,108,
-    105,122,101,100,32,101,120,116,101,110,115,105,111,110,32,109,
-    111,100,117,108,101,122,38,101,120,116,101,110,115,105,111,110,
-    32,109,111,100,117,108,101,32,123,33,114,125,32,108,111,97,
-    100,101,100,32,102,114,111,109,32,123,33,114,125,41,7,114,
-    135,0,0,0,114,215,0,0,0,114,164,0,0,0,90,14,
-    99,114,101,97,116,101,95,100,121,110,97,109,105,99,114,150,
-    0,0,0,114,117,0,0,0,114,44,0,0,0,41,3,114,
-    119,0,0,0,114,188,0,0,0,114,217,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,6,0,0,0,114,213,0,
-    0,0,75,4,0,0,115,18,0,0,0,0,2,4,1,4,
-    0,2,255,4,2,6,1,4,0,4,255,4,2,122,33,69,
-    120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
-    101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,
-    99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
-    0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,0,
-    160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,4,
-    100,1,124,0,106,5,124,0,106,6,161,3,1,0,100,2,
-    83,0,41,3,122,30,73,110,105,116,105,97,108,105,122,101,
-    32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,
-    100,117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,
-    109,111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,
-    117,116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,
-    7,114,135,0,0,0,114,215,0,0,0,114,164,0,0,0,
-    90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,150,
-    0,0,0,114,117,0,0,0,114,44,0,0,0,114,254,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,218,0,0,0,83,4,0,0,115,10,0,0,0,0,
-    2,14,1,6,1,4,0,4,255,122,31,69,120,116,101,110,
-    115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,
-    120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,3,
-    0,0,0,115,36,0,0,0,116,0,124,0,106,1,131,1,
-    100,1,25,0,137,0,116,2,135,0,102,1,100,2,100,3,
-    132,8,116,3,68,0,131,1,131,1,83,0,41,4,122,49,
-    82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,
-    104,101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,
-    117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,
-    46,114,39,0,0,0,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,
-    26,0,0,0,124,0,93,18,125,1,136,0,100,0,124,1,
-    23,0,107,2,86,0,1,0,113,2,100,1,83,0,41,2,
-    114,210,0,0,0,78,114,3,0,0,0,169,2,114,32,0,
-    0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,
-    108,101,95,110,97,109,101,114,3,0,0,0,114,6,0,0,
-    0,218,9,60,103,101,110,101,120,112,114,62,92,4,0,0,
-    115,4,0,0,0,4,1,2,255,122,49,69,120,116,101,110,
-    115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,
-    115,95,112,97,99,107,97,103,101,46,60,108,111,99,97,108,
-    115,62,46,60,103,101,110,101,120,112,114,62,41,4,114,47,
-    0,0,0,114,44,0,0,0,218,3,97,110,121,218,18,69,
-    88,84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,
-    83,114,220,0,0,0,114,3,0,0,0,114,19,1,0,0,
-    114,6,0,0,0,114,183,0,0,0,89,4,0,0,115,8,
-    0,0,0,0,2,14,1,12,1,2,255,122,30,69,120,116,
-    101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,
-    46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,
-    0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,
-    67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,
-    63,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,
-    97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,
-    117,108,101,32,99,97,110,110,111,116,32,99,114,101,97,116,
-    101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46,
-    78,114,3,0,0,0,114,220,0,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,114,214,0,0,0,95,
-    4,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101,
-    110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,
-    103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,
-    0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
-    0,115,4,0,0,0,100,1,83,0,41,2,122,53,82,101,
-    116,117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,
-    101,110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,
-    97,118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,
-    100,101,46,78,114,3,0,0,0,114,220,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,6,0,0,0,114,230,0,
-    0,0,99,4,0,0,115,2,0,0,0,0,2,122,30,69,
-    120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
-    101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,
-    0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
-    0,114,251,0,0,0,114,48,0,0,0,114,220,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    180,0,0,0,103,4,0,0,115,2,0,0,0,0,3,122,
-    32,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
-    97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,
-    101,78,41,14,114,126,0,0,0,114,125,0,0,0,114,127,
-    0,0,0,114,128,0,0,0,114,210,0,0,0,114,244,0,
-    0,0,114,248,0,0,0,114,213,0,0,0,114,218,0,0,
-    0,114,183,0,0,0,114,214,0,0,0,114,230,0,0,0,
-    114,137,0,0,0,114,180,0,0,0,114,3,0,0,0,114,
-    3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,253,
-    0,0,0,56,4,0,0,115,22,0,0,0,8,2,4,6,
-    8,4,8,4,8,3,8,8,8,6,8,6,8,4,8,4,
-    2,1,114,253,0,0,0,99,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,
-    115,104,0,0,0,101,0,90,1,100,0,90,2,100,1,90,
-    3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,
-    5,100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,
-    7,100,10,100,11,132,0,90,8,100,12,100,13,132,0,90,
-    9,100,14,100,15,132,0,90,10,100,16,100,17,132,0,90,
-    11,100,18,100,19,132,0,90,12,100,20,100,21,132,0,90,
-    13,100,22,100,23,132,0,90,14,100,24,83,0,41,25,218,
-    14,95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,
-    38,1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,
-    32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,
-    103,101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,
-    115,101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,
-    97,109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,
-    105,116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,
-    101,44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,
-    101,32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,
-    101,32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,
-    95,112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,
-    104,105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,
-    32,109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,
-    116,104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,
-    44,10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,
-    95,102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,
-    112,45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,
-    32,116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,
-    108,101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,
-    32,115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,
-    0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,
-    0,0,0,115,36,0,0,0,124,1,124,0,95,0,124,2,
-    124,0,95,1,116,2,124,0,160,3,161,0,131,1,124,0,
-    95,4,124,3,124,0,95,5,100,0,83,0,114,110,0,0,
-    0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,
-    104,114,112,0,0,0,218,16,95,103,101,116,95,112,97,114,
-    101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95,
-    112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97,
-    116,104,95,102,105,110,100,101,114,169,4,114,119,0,0,0,
-    114,117,0,0,0,114,44,0,0,0,90,11,112,97,116,104,
-    95,102,105,110,100,101,114,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,114,210,0,0,0,116,4,0,0,115,
-    8,0,0,0,0,1,6,1,6,1,14,1,122,23,95,78,
-    97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,
-    110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,
-    0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38,
-    0,0,0,124,0,106,0,160,1,100,1,161,1,92,3,125,
-    1,125,2,125,3,124,2,100,2,107,2,114,30,100,3,83,
-    0,124,1,100,4,102,2,83,0,41,5,122,62,82,101,116,
-    117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,
-    40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,
-    97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,
-    45,97,116,116,114,45,110,97,109,101,41,114,71,0,0,0,
-    114,40,0,0,0,41,2,114,8,0,0,0,114,44,0,0,
-    0,90,8,95,95,112,97,116,104,95,95,41,2,114,24,1,
-    0,0,114,41,0,0,0,41,4,114,119,0,0,0,114,15,
-    1,0,0,218,3,100,111,116,90,2,109,101,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,23,95,102,105,
-    110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,
-    97,109,101,115,122,4,0,0,115,8,0,0,0,0,2,18,
-    1,8,2,4,3,122,38,95,78,97,109,101,115,112,97,99,
-    101,80,97,116,104,46,95,102,105,110,100,95,112,97,114,101,
-    110,116,95,112,97,116,104,95,110,97,109,101,115,99,1,0,
-    0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,
-    0,0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,
-    0,92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,
-    0,124,2,131,2,83,0,114,110,0,0,0,41,4,114,31,
-    1,0,0,114,131,0,0,0,114,8,0,0,0,218,7,109,
-    111,100,117,108,101,115,41,3,114,119,0,0,0,90,18,112,
-    97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109,
-    101,90,14,112,97,116,104,95,97,116,116,114,95,110,97,109,
-    101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    114,26,1,0,0,132,4,0,0,115,4,0,0,0,0,1,
-    12,1,122,31,95,78,97,109,101,115,112,97,99,101,80,97,
-    116,104,46,95,103,101,116,95,112,97,114,101,110,116,95,112,
-    97,116,104,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,
-    0,116,0,124,0,160,1,161,0,131,1,125,1,124,1,124,
-    0,106,2,107,3,114,74,124,0,160,3,124,0,106,4,124,
-    1,161,2,125,2,124,2,100,0,107,9,114,68,124,2,106,
-    5,100,0,107,8,114,68,124,2,106,6,114,68,124,2,106,
-    6,124,0,95,7,124,1,124,0,95,2,124,0,106,7,83,
-    0,114,110,0,0,0,41,8,114,112,0,0,0,114,26,1,
-    0,0,114,27,1,0,0,114,28,1,0,0,114,24,1,0,
-    0,114,141,0,0,0,114,179,0,0,0,114,25,1,0,0,
-    41,3,114,119,0,0,0,90,11,112,97,114,101,110,116,95,
-    112,97,116,104,114,188,0,0,0,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108,
-    99,117,108,97,116,101,136,4,0,0,115,16,0,0,0,0,
-    2,12,1,10,1,14,3,18,1,6,1,8,1,6,1,122,
-    27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
-    95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0,
-    0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
-    0,67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,
-    161,0,131,1,83,0,114,110,0,0,0,41,2,114,7,1,
-    0,0,114,33,1,0,0,114,247,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,8,95,95,105,
-    116,101,114,95,95,149,4,0,0,115,2,0,0,0,0,1,
-    122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
-    46,95,95,105,116,101,114,95,95,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
-    0,0,115,12,0,0,0,124,0,160,0,161,0,124,1,25,
-    0,83,0,114,110,0,0,0,169,1,114,33,1,0,0,41,
-    2,114,119,0,0,0,218,5,105,110,100,101,120,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,95,
-    103,101,116,105,116,101,109,95,95,152,4,0,0,115,2,0,
-    0,0,0,1,122,26,95,78,97,109,101,115,112,97,99,101,
-    80,97,116,104,46,95,95,103,101,116,105,116,101,109,95,95,
+    90,6,100,8,100,9,132,0,90,7,100,10,100,11,132,0,
+    90,8,100,12,100,13,132,0,90,9,100,14,100,15,132,0,
+    90,10,100,16,100,17,132,0,90,11,101,12,100,18,100,19,
+    132,0,131,1,90,13,100,20,83,0,41,21,114,252,0,0,
+    0,122,93,76,111,97,100,101,114,32,102,111,114,32,101,120,
+    116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,46,
+    10,10,32,32,32,32,84,104,101,32,99,111,110,115,116,114,
+    117,99,116,111,114,32,105,115,32,100,101,115,105,103,110,101,
+    100,32,116,111,32,119,111,114,107,32,119,105,116,104,32,70,
+    105,108,101,70,105,110,100,101,114,46,10,10,32,32,32,32,
     99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
-    0,3,0,0,0,67,0,0,0,115,14,0,0,0,124,2,
-    124,0,106,0,124,1,60,0,100,0,83,0,114,110,0,0,
-    0,41,1,114,25,1,0,0,41,3,114,119,0,0,0,114,
-    36,1,0,0,114,44,0,0,0,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,11,95,95,115,101,116,105,
-    116,101,109,95,95,155,4,0,0,115,2,0,0,0,0,1,
-    122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
-    46,95,95,115,101,116,105,116,101,109,95,95,99,1,0,0,
-    0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
-    0,67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,
-    161,0,131,1,83,0,114,110,0,0,0,41,2,114,22,0,
-    0,0,114,33,1,0,0,114,247,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,7,95,95,108,
-    101,110,95,95,158,4,0,0,115,2,0,0,0,0,1,122,
-    22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
-    95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0,
-    0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
-    115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,
-    0,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101,
-    80,97,116,104,40,123,33,114,125,41,41,2,114,62,0,0,
-    0,114,25,1,0,0,114,247,0,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,8,95,95,114,101,
-    112,114,95,95,161,4,0,0,115,2,0,0,0,0,1,122,
-    23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
-    95,95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,
-    0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,
-    0,115,12,0,0,0,124,1,124,0,160,0,161,0,107,6,
-    83,0,114,110,0,0,0,114,35,1,0,0,169,2,114,119,
-    0,0,0,218,4,105,116,101,109,114,3,0,0,0,114,3,
-    0,0,0,114,6,0,0,0,218,12,95,95,99,111,110,116,
-    97,105,110,115,95,95,164,4,0,0,115,2,0,0,0,0,
-    1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,
-    104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,
-    0,0,0,67,0,0,0,115,16,0,0,0,124,0,106,0,
-    160,1,124,1,161,1,1,0,100,0,83,0,114,110,0,0,
-    0,41,2,114,25,1,0,0,114,187,0,0,0,114,41,1,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,187,0,0,0,167,4,0,0,115,2,0,0,0,0,
-    1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116,
-    104,46,97,112,112,101,110,100,78,41,15,114,126,0,0,0,
-    114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,114,
-    210,0,0,0,114,31,1,0,0,114,26,1,0,0,114,33,
-    1,0,0,114,34,1,0,0,114,37,1,0,0,114,38,1,
-    0,0,114,39,1,0,0,114,40,1,0,0,114,43,1,0,
-    0,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,114,23,1,0,0,109,
-    4,0,0,115,24,0,0,0,8,1,4,6,8,6,8,10,
-    8,4,8,13,8,3,8,3,8,3,8,3,8,3,8,3,
-    114,23,1,0,0,99,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,80,
-    0,0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,
-    0,90,3,101,4,100,3,100,4,132,0,131,1,90,5,100,
-    5,100,6,132,0,90,6,100,7,100,8,132,0,90,7,100,
-    9,100,10,132,0,90,8,100,11,100,12,132,0,90,9,100,
-    13,100,14,132,0,90,10,100,15,100,16,132,0,90,11,100,
-    17,83,0,41,18,218,16,95,78,97,109,101,115,112,97,99,
-    101,76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,
-    0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,
-    115,18,0,0,0,116,0,124,1,124,2,124,3,131,3,124,
-    0,95,1,100,0,83,0,114,110,0,0,0,41,2,114,23,
-    1,0,0,114,25,1,0,0,114,29,1,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,114,210,0,0,
-    0,173,4,0,0,115,2,0,0,0,0,1,122,25,95,78,
-    97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,95,
-    95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,
-    0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
-    115,12,0,0,0,100,1,160,0,124,1,106,1,161,1,83,
-    0,41,2,122,115,82,101,116,117,114,110,32,114,101,112,114,
-    32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46,
-    10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101,
-    116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,
-    101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32,
-    109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116,
-    104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10,
-    32,32,32,32,32,32,32,32,122,25,60,109,111,100,117,108,
-    101,32,123,33,114,125,32,40,110,97,109,101,115,112,97,99,
-    101,41,62,41,2,114,62,0,0,0,114,126,0,0,0,41,
-    2,114,194,0,0,0,114,217,0,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,11,109,111,100,117,
-    108,101,95,114,101,112,114,176,4,0,0,115,2,0,0,0,
-    0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,111,
-    97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,
-    99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
-    0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,
-    83,0,41,2,78,84,114,3,0,0,0,114,220,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    183,0,0,0,185,4,0,0,115,2,0,0,0,0,1,122,
-    27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
-    114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,
-    0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
-    0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,
-    78,114,40,0,0,0,114,3,0,0,0,114,220,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    230,0,0,0,188,4,0,0,115,2,0,0,0,0,1,122,
-    27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
+    0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,
+    124,0,95,0,124,2,124,0,95,1,100,0,83,0,114,109,
+    0,0,0,114,159,0,0,0,114,5,1,0,0,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,114,209,0,0,
+    0,71,4,0,0,115,4,0,0,0,0,1,6,1,122,28,
+    69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
+    100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,
+    0,67,0,0,0,115,24,0,0,0,124,0,106,0,124,1,
+    106,0,107,2,111,22,124,0,106,1,124,1,106,1,107,2,
+    83,0,114,109,0,0,0,114,240,0,0,0,114,242,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    114,243,0,0,0,75,4,0,0,115,6,0,0,0,0,1,
+    12,1,10,255,122,26,69,120,116,101,110,115,105,111,110,70,
+    105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95,
+    99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+    0,3,0,0,0,67,0,0,0,115,20,0,0,0,116,0,
+    124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0,
+    83,0,114,109,0,0,0,114,244,0,0,0,114,246,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    114,247,0,0,0,79,4,0,0,115,2,0,0,0,0,1,
+    122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,
+    111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,5,
+    0,0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,
+    116,2,106,3,124,1,161,2,125,2,116,0,160,4,100,1,
+    124,1,106,5,124,0,106,6,161,3,1,0,124,2,83,0,
+    41,2,122,38,67,114,101,97,116,101,32,97,110,32,117,110,
+    105,116,105,97,108,105,122,101,100,32,101,120,116,101,110,115,
+    105,111,110,32,109,111,100,117,108,101,122,38,101,120,116,101,
+    110,115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,
+    125,32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,
+    114,125,41,7,114,134,0,0,0,114,214,0,0,0,114,163,
+    0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97,
+    109,105,99,114,149,0,0,0,114,116,0,0,0,114,44,0,
+    0,0,41,3,114,118,0,0,0,114,187,0,0,0,114,216,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,114,212,0,0,0,82,4,0,0,115,14,0,0,0,
+    0,2,4,1,6,255,4,2,6,1,8,255,4,2,122,33,
+    69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
+    100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,
+    101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
+    0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,
+    0,160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,
+    4,100,1,124,0,106,5,124,0,106,6,161,3,1,0,100,
+    2,83,0,41,3,122,30,73,110,105,116,105,97,108,105,122,
+    101,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,
+    111,100,117,108,101,122,40,101,120,116,101,110,115,105,111,110,
+    32,109,111,100,117,108,101,32,123,33,114,125,32,101,120,101,
+    99,117,116,101,100,32,102,114,111,109,32,123,33,114,125,78,
+    41,7,114,134,0,0,0,114,214,0,0,0,114,163,0,0,
+    0,90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,
+    149,0,0,0,114,116,0,0,0,114,44,0,0,0,114,253,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,114,217,0,0,0,90,4,0,0,115,8,0,0,0,
+    0,2,14,1,6,1,8,255,122,31,69,120,116,101,110,115,
+    105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,120,
+    101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
+    0,0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,
+    0,0,115,36,0,0,0,116,0,124,0,106,1,131,1,100,
+    1,25,0,137,0,116,2,135,0,102,1,100,2,100,3,132,
+    8,116,3,68,0,131,1,131,1,83,0,41,4,122,49,82,
+    101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,
+    101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,
+    108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,
+    114,39,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
+    0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,26,
+    0,0,0,124,0,93,18,125,1,136,0,100,0,124,1,23,
+    0,107,2,86,0,1,0,113,2,100,1,83,0,41,2,114,
+    209,0,0,0,78,114,5,0,0,0,169,2,114,32,0,0,
+    0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,108,
+    101,95,110,97,109,101,114,5,0,0,0,114,8,0,0,0,
+    218,9,60,103,101,110,101,120,112,114,62,99,4,0,0,115,
+    4,0,0,0,4,1,2,255,122,49,69,120,116,101,110,115,
+    105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,
+    95,112,97,99,107,97,103,101,46,60,108,111,99,97,108,115,
+    62,46,60,103,101,110,101,120,112,114,62,41,4,114,47,0,
+    0,0,114,44,0,0,0,218,3,97,110,121,218,18,69,88,
+    84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,
+    114,219,0,0,0,114,5,0,0,0,114,18,1,0,0,114,
+    8,0,0,0,114,182,0,0,0,96,4,0,0,115,8,0,
+    0,0,0,2,14,1,12,1,2,255,122,30,69,120,116,101,
+    110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,
+    105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,
+    0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
+    0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,63,
+    82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,97,
+    110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,
+    108,101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,
+    32,97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,
+    114,5,0,0,0,114,219,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,114,213,0,0,0,102,4,
+    0,0,115,2,0,0,0,0,2,122,28,69,120,116,101,110,
+    115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,
+    101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
+    115,4,0,0,0,100,1,83,0,41,2,122,53,82,101,116,
+    117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,101,
+    110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,97,
+    118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100,
+    101,46,78,114,5,0,0,0,114,219,0,0,0,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,114,229,0,0,
+    0,106,4,0,0,115,2,0,0,0,0,2,122,30,69,120,
+    116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
     114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,
-    0,0,0,0,0,0,0,0,0,2,0,0,0,6,0,0,
-    0,67,0,0,0,115,16,0,0,0,116,0,100,1,100,2,
-    100,3,100,4,100,5,141,4,83,0,41,6,78,114,40,0,
-    0,0,122,8,60,115,116,114,105,110,103,62,114,216,0,0,
-    0,84,41,1,114,232,0,0,0,41,1,114,233,0,0,0,
-    114,220,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
-    6,0,0,0,114,214,0,0,0,191,4,0,0,115,2,0,
-    0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101,
-    76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
+    0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,0,
+    114,250,0,0,0,114,48,0,0,0,114,219,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,179,
+    0,0,0,110,4,0,0,115,2,0,0,0,0,3,122,32,
+    69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
+    100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,
+    78,41,14,114,125,0,0,0,114,124,0,0,0,114,126,0,
+    0,0,114,127,0,0,0,114,209,0,0,0,114,243,0,0,
+    0,114,247,0,0,0,114,212,0,0,0,114,217,0,0,0,
+    114,182,0,0,0,114,213,0,0,0,114,229,0,0,0,114,
+    136,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5,
+    0,0,0,114,5,0,0,0,114,8,0,0,0,114,252,0,
+    0,0,63,4,0,0,115,22,0,0,0,8,2,4,6,8,
+    4,8,4,8,3,8,8,8,6,8,6,8,4,8,4,2,
+    1,114,252,0,0,0,99,0,0,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,
+    104,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,
+    100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,
+    100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,
+    100,10,100,11,132,0,90,8,100,12,100,13,132,0,90,9,
+    100,14,100,15,132,0,90,10,100,16,100,17,132,0,90,11,
+    100,18,100,19,132,0,90,12,100,20,100,21,132,0,90,13,
+    100,22,100,23,132,0,90,14,100,24,83,0,41,25,218,14,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,
+    1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,
+    110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,
+    101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,
+    101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,
+    109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,
+    116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,
+    44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,
+    32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,
+    32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,
+    112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,
+    105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,
+    109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,
+    104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,
+    10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,
+    102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,
+    45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,
+    116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,
+    101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,
+    115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,
+    0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,
+    0,0,115,36,0,0,0,124,1,124,0,95,0,124,2,124,
+    0,95,1,116,2,124,0,160,3,161,0,131,1,124,0,95,
+    4,124,3,124,0,95,5,100,0,83,0,114,109,0,0,0,
+    41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,104,
+    114,111,0,0,0,218,16,95,103,101,116,95,112,97,114,101,
+    110,116,95,112,97,116,104,218,17,95,108,97,115,116,95,112,
+    97,114,101,110,116,95,112,97,116,104,218,12,95,112,97,116,
+    104,95,102,105,110,100,101,114,169,4,114,118,0,0,0,114,
+    116,0,0,0,114,44,0,0,0,90,11,112,97,116,104,95,
+    102,105,110,100,101,114,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,114,209,0,0,0,123,4,0,0,115,8,
+    0,0,0,0,1,6,1,6,1,14,1,122,23,95,78,97,
+    109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,110,
+    105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,
+    0,4,0,0,0,3,0,0,0,67,0,0,0,115,38,0,
+    0,0,124,0,106,0,160,1,100,1,161,1,92,3,125,1,
+    125,2,125,3,124,2,100,2,107,2,114,30,100,3,83,0,
+    124,1,100,4,102,2,83,0,41,5,122,62,82,101,116,117,
+    114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,40,
+    112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,97,
+    109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,45,
+    97,116,116,114,45,110,97,109,101,41,114,71,0,0,0,114,
+    40,0,0,0,41,2,114,1,0,0,0,114,44,0,0,0,
+    90,8,95,95,112,97,116,104,95,95,41,2,114,23,1,0,
+    0,114,41,0,0,0,41,4,114,118,0,0,0,114,14,1,
+    0,0,218,3,100,111,116,90,2,109,101,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,218,23,95,102,105,110,
+    100,95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,
+    109,101,115,129,4,0,0,115,8,0,0,0,0,2,18,1,
+    8,2,4,3,122,38,95,78,97,109,101,115,112,97,99,101,
+    80,97,116,104,46,95,102,105,110,100,95,112,97,114,101,110,
+    116,95,112,97,116,104,95,110,97,109,101,115,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,
+    0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,0,
+    92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,0,
+    124,2,131,2,83,0,114,109,0,0,0,41,4,114,30,1,
+    0,0,114,130,0,0,0,114,1,0,0,0,218,7,109,111,
+    100,117,108,101,115,41,3,114,118,0,0,0,90,18,112,97,
+    114,101,110,116,95,109,111,100,117,108,101,95,110,97,109,101,
+    90,14,112,97,116,104,95,97,116,116,114,95,110,97,109,101,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+    25,1,0,0,139,4,0,0,115,4,0,0,0,0,1,12,
+    1,122,31,95,78,97,109,101,115,112,97,99,101,80,97,116,
+    104,46,95,103,101,116,95,112,97,114,101,110,116,95,112,97,
+    116,104,99,1,0,0,0,0,0,0,0,0,0,0,0,3,
+    0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,0,
+    116,0,124,0,160,1,161,0,131,1,125,1,124,1,124,0,
+    106,2,107,3,114,74,124,0,160,3,124,0,106,4,124,1,
+    161,2,125,2,124,2,100,0,117,1,114,68,124,2,106,5,
+    100,0,117,0,114,68,124,2,106,6,114,68,124,2,106,6,
+    124,0,95,7,124,1,124,0,95,2,124,0,106,7,83,0,
+    114,109,0,0,0,41,8,114,111,0,0,0,114,25,1,0,
+    0,114,26,1,0,0,114,27,1,0,0,114,23,1,0,0,
+    114,140,0,0,0,114,178,0,0,0,114,24,1,0,0,41,
+    3,114,118,0,0,0,90,11,112,97,114,101,110,116,95,112,
+    97,116,104,114,187,0,0,0,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,218,12,95,114,101,99,97,108,99,
+    117,108,97,116,101,143,4,0,0,115,16,0,0,0,0,2,
+    12,1,10,1,14,3,18,1,6,1,8,1,6,1,122,27,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,
+    114,101,99,97,108,99,117,108,97,116,101,99,1,0,0,0,
+    0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,
+    67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,161,
+    0,131,1,83,0,114,109,0,0,0,41,2,114,6,1,0,
+    0,114,32,1,0,0,114,246,0,0,0,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,218,8,95,95,105,116,
+    101,114,95,95,156,4,0,0,115,2,0,0,0,0,1,122,
+    23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
+    95,95,105,116,101,114,95,95,99,2,0,0,0,0,0,0,
+    0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,
+    0,115,12,0,0,0,124,0,160,0,161,0,124,1,25,0,
+    83,0,114,109,0,0,0,169,1,114,32,1,0,0,41,2,
+    114,118,0,0,0,218,5,105,110,100,101,120,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,218,11,95,95,103,
+    101,116,105,116,101,109,95,95,159,4,0,0,115,2,0,0,
+    0,0,1,122,26,95,78,97,109,101,115,112,97,99,101,80,
+    97,116,104,46,95,95,103,101,116,105,116,101,109,95,95,99,
+    3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
+    3,0,0,0,67,0,0,0,115,14,0,0,0,124,2,124,
+    0,106,0,124,1,60,0,100,0,83,0,114,109,0,0,0,
+    41,1,114,24,1,0,0,41,3,114,118,0,0,0,114,35,
+    1,0,0,114,44,0,0,0,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,218,11,95,95,115,101,116,105,116,
+    101,109,95,95,162,4,0,0,115,2,0,0,0,0,1,122,
+    26,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
+    95,95,115,101,116,105,116,101,109,95,95,99,1,0,0,0,
+    0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,
+    67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,161,
+    0,131,1,83,0,114,109,0,0,0,41,2,114,23,0,0,
+    0,114,32,1,0,0,114,246,0,0,0,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,218,7,95,95,108,101,
+    110,95,95,165,4,0,0,115,2,0,0,0,0,1,122,22,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,
+    95,108,101,110,95,95,99,1,0,0,0,0,0,0,0,0,
+    0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
+    12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,0,
+    41,2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,
+    97,116,104,40,123,33,114,125,41,41,2,114,62,0,0,0,
+    114,24,1,0,0,114,246,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,218,8,95,95,114,101,112,
+    114,95,95,168,4,0,0,115,2,0,0,0,0,1,122,23,
+    95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,
+    95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
+    115,12,0,0,0,124,1,124,0,160,0,161,0,118,0,83,
+    0,114,109,0,0,0,114,34,1,0,0,169,2,114,118,0,
+    0,0,218,4,105,116,101,109,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,218,12,95,95,99,111,110,116,97,
+    105,110,115,95,95,171,4,0,0,115,2,0,0,0,0,1,
+    122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
+    46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
+    0,0,67,0,0,0,115,16,0,0,0,124,0,106,0,160,
+    1,124,1,161,1,1,0,100,0,83,0,114,109,0,0,0,
+    41,2,114,24,1,0,0,114,186,0,0,0,114,40,1,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    114,186,0,0,0,174,4,0,0,115,2,0,0,0,0,1,
+    122,21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
+    46,97,112,112,101,110,100,78,41,15,114,125,0,0,0,114,
+    124,0,0,0,114,126,0,0,0,114,127,0,0,0,114,209,
+    0,0,0,114,30,1,0,0,114,25,1,0,0,114,32,1,
+    0,0,114,33,1,0,0,114,36,1,0,0,114,37,1,0,
+    0,114,38,1,0,0,114,39,1,0,0,114,42,1,0,0,
+    114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,114,22,1,0,0,116,4,
+    0,0,115,24,0,0,0,8,1,4,6,8,6,8,10,8,
+    4,8,13,8,3,8,3,8,3,8,3,8,3,8,3,114,
+    22,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
+    0,0,0,0,0,3,0,0,0,64,0,0,0,115,80,0,
+    0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,
+    90,3,101,4,100,3,100,4,132,0,131,1,90,5,100,5,
+    100,6,132,0,90,6,100,7,100,8,132,0,90,7,100,9,
+    100,10,132,0,90,8,100,11,100,12,132,0,90,9,100,13,
+    100,14,132,0,90,10,100,15,100,16,132,0,90,11,100,17,
+    83,0,41,18,218,16,95,78,97,109,101,115,112,97,99,101,
+    76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,0,
+    0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,
+    18,0,0,0,116,0,124,1,124,2,124,3,131,3,124,0,
+    95,1,100,0,83,0,114,109,0,0,0,41,2,114,22,1,
+    0,0,114,24,1,0,0,114,28,1,0,0,114,5,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,114,209,0,0,0,
+    180,4,0,0,115,2,0,0,0,0,1,122,25,95,78,97,
+    109,101,115,112,97,99,101,76,111,97,100,101,114,46,95,95,
+    105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0,
+    0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,
+    12,0,0,0,100,1,160,0,124,1,106,1,161,1,83,0,
+    41,2,122,115,82,101,116,117,114,110,32,114,101,112,114,32,
+    102,111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,
+    10,32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,
+    104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,
+    100,46,32,32,84,104,101,32,105,109,112,111,114,116,32,109,
+    97,99,104,105,110,101,114,121,32,100,111,101,115,32,116,104,
+    101,32,106,111,98,32,105,116,115,101,108,102,46,10,10,32,
+    32,32,32,32,32,32,32,122,25,60,109,111,100,117,108,101,
+    32,123,33,114,125,32,40,110,97,109,101,115,112,97,99,101,
+    41,62,41,2,114,62,0,0,0,114,125,0,0,0,41,2,
+    114,193,0,0,0,114,216,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,218,11,109,111,100,117,108,
+    101,95,114,101,112,114,183,4,0,0,115,2,0,0,0,0,
+    7,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,
+    100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99,
     2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
     1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,
-    0,114,211,0,0,0,114,3,0,0,0,114,212,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    213,0,0,0,194,4,0,0,115,2,0,0,0,0,1,122,
-    30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
-    114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,
-    2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
-    1,0,0,0,67,0,0,0,115,4,0,0,0,100,0,83,
-    0,114,110,0,0,0,114,3,0,0,0,114,254,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    218,0,0,0,197,4,0,0,115,2,0,0,0,0,1,122,
-    28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
-    114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,
-    0,0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,
-    1,124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,
-    1,161,2,83,0,41,2,122,98,76,111,97,100,32,97,32,
-    110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,
-    46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,
-    109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,
-    97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,
-    109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,
-    46,10,10,32,32,32,32,32,32,32,32,122,38,110,97,109,
-    101,115,112,97,99,101,32,109,111,100,117,108,101,32,108,111,
-    97,100,101,100,32,119,105,116,104,32,112,97,116,104,32,123,
-    33,114,125,41,4,114,135,0,0,0,114,150,0,0,0,114,
-    25,1,0,0,114,219,0,0,0,114,220,0,0,0,114,3,
-    0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,0,
-    0,0,200,4,0,0,115,8,0,0,0,0,7,6,1,4,
-    255,4,2,122,28,95,78,97,109,101,115,112,97,99,101,76,
-    111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,
-    101,78,41,12,114,126,0,0,0,114,125,0,0,0,114,127,
-    0,0,0,114,210,0,0,0,114,208,0,0,0,114,45,1,
-    0,0,114,183,0,0,0,114,230,0,0,0,114,214,0,0,
-    0,114,213,0,0,0,114,218,0,0,0,114,221,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
-    6,0,0,0,114,44,1,0,0,172,4,0,0,115,18,0,
-    0,0,8,1,8,3,2,1,10,8,8,3,8,3,8,3,
-    8,3,8,3,114,44,1,0,0,99,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,
-    0,0,115,118,0,0,0,101,0,90,1,100,0,90,2,100,
-    1,90,3,101,4,100,2,100,3,132,0,131,1,90,5,101,
-    4,100,4,100,5,132,0,131,1,90,6,101,4,100,6,100,
-    7,132,0,131,1,90,7,101,4,100,8,100,9,132,0,131,
-    1,90,8,101,4,100,19,100,11,100,12,132,1,131,1,90,
-    9,101,4,100,20,100,13,100,14,132,1,131,1,90,10,101,
-    4,100,21,100,15,100,16,132,1,131,1,90,11,101,4,100,
-    17,100,18,132,0,131,1,90,12,100,10,83,0,41,22,218,
-    10,80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,
-    97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,
-    114,32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,
-    97,99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,
-    97,116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,
-    67,0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,
-    3,161,0,131,1,68,0,93,44,92,2,125,1,125,2,124,
-    2,100,1,107,8,114,40,116,1,106,2,124,1,61,0,113,
-    14,116,4,124,2,100,2,131,2,114,14,124,2,160,5,161,
-    0,1,0,113,14,100,1,83,0,41,3,122,125,67,97,108,
-    108,32,116,104,101,32,105,110,118,97,108,105,100,97,116,101,
-    95,99,97,99,104,101,115,40,41,32,109,101,116,104,111,100,
-    32,111,110,32,97,108,108,32,112,97,116,104,32,101,110,116,
-    114,121,32,102,105,110,100,101,114,115,10,32,32,32,32,32,
-    32,32,32,115,116,111,114,101,100,32,105,110,32,115,121,115,
-    46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,
-    97,99,104,101,115,32,40,119,104,101,114,101,32,105,109,112,
-    108,101,109,101,110,116,101,100,41,46,78,218,17,105,110,118,
-    97,108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,
-    218,4,108,105,115,116,114,8,0,0,0,218,19,112,97,116,
-    104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,
-    218,5,105,116,101,109,115,114,129,0,0,0,114,47,1,0,
-    0,41,3,114,194,0,0,0,114,117,0,0,0,218,6,102,
-    105,110,100,101,114,114,3,0,0,0,114,3,0,0,0,114,
-    6,0,0,0,114,47,1,0,0,218,4,0,0,115,10,0,
-    0,0,0,4,22,1,8,1,10,1,10,1,122,28,80,97,
-    116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,
-    97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,3,0,0,0,9,0,0,0,67,
-    0,0,0,115,84,0,0,0,116,0,106,1,100,1,107,9,
-    114,28,116,0,106,1,115,28,116,2,160,3,100,2,116,4,
-    161,2,1,0,116,0,106,1,68,0,93,44,125,2,122,14,
-    124,2,124,1,131,1,87,0,2,0,1,0,83,0,4,0,
-    116,5,107,10,114,76,1,0,1,0,1,0,89,0,113,34,
-    89,0,113,34,88,0,113,34,100,1,83,0,41,3,122,46,
-    83,101,97,114,99,104,32,115,121,115,46,112,97,116,104,95,
-    104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,100,
-    101,114,32,102,111,114,32,39,112,97,116,104,39,46,78,122,
-    23,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,
-    105,115,32,101,109,112,116,121,41,6,114,8,0,0,0,218,
-    10,112,97,116,104,95,104,111,111,107,115,114,75,0,0,0,
-    114,76,0,0,0,114,139,0,0,0,114,118,0,0,0,41,
-    3,114,194,0,0,0,114,44,0,0,0,90,4,104,111,111,
-    107,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    218,11,95,112,97,116,104,95,104,111,111,107,115,228,4,0,
-    0,115,16,0,0,0,0,3,16,1,12,1,10,1,2,1,
-    14,1,14,1,12,2,122,22,80,97,116,104,70,105,110,100,
-    101,114,46,95,112,97,116,104,95,104,111,111,107,115,99,2,
-    0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,
-    0,0,0,67,0,0,0,115,104,0,0,0,124,1,100,1,
-    107,2,114,44,122,12,116,0,160,1,161,0,125,1,87,0,
-    110,22,4,0,116,2,107,10,114,42,1,0,1,0,1,0,
-    89,0,100,2,83,0,88,0,122,14,116,3,106,4,124,1,
-    25,0,125,2,87,0,110,40,4,0,116,5,107,10,114,98,
-    1,0,1,0,1,0,124,0,160,6,124,1,161,1,125,2,
-    124,2,116,3,106,4,124,1,60,0,89,0,110,2,88,0,
-    124,2,83,0,41,3,122,210,71,101,116,32,116,104,101,32,
-    102,105,110,100,101,114,32,102,111,114,32,116,104,101,32,112,
-    97,116,104,32,101,110,116,114,121,32,102,114,111,109,32,115,
-    121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,
-    95,99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,
-    32,73,102,32,116,104,101,32,112,97,116,104,32,101,110,116,
-    114,121,32,105,115,32,110,111,116,32,105,110,32,116,104,101,
-    32,99,97,99,104,101,44,32,102,105,110,100,32,116,104,101,
-    32,97,112,112,114,111,112,114,105,97,116,101,32,102,105,110,
-    100,101,114,10,32,32,32,32,32,32,32,32,97,110,100,32,
-    99,97,99,104,101,32,105,116,46,32,73,102,32,110,111,32,
-    102,105,110,100,101,114,32,105,115,32,97,118,97,105,108,97,
-    98,108,101,44,32,115,116,111,114,101,32,78,111,110,101,46,
-    10,10,32,32,32,32,32,32,32,32,114,40,0,0,0,78,
-    41,7,114,2,0,0,0,114,55,0,0,0,114,4,1,0,
-    0,114,8,0,0,0,114,49,1,0,0,218,8,75,101,121,
-    69,114,114,111,114,114,53,1,0,0,41,3,114,194,0,0,
-    0,114,44,0,0,0,114,51,1,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,218,20,95,112,97,116,
-    104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,
-    241,4,0,0,115,22,0,0,0,0,8,8,1,2,1,12,
-    1,14,3,8,1,2,1,14,1,14,1,10,1,16,1,122,
-    31,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,
-    104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,
-    99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
-    0,4,0,0,0,67,0,0,0,115,82,0,0,0,116,0,
-    124,2,100,1,131,2,114,26,124,2,160,1,124,1,161,1,
-    92,2,125,3,125,4,110,14,124,2,160,2,124,1,161,1,
-    125,3,103,0,125,4,124,3,100,0,107,9,114,60,116,3,
-    160,4,124,1,124,3,161,2,83,0,116,3,160,5,124,1,
-    100,0,161,2,125,5,124,4,124,5,95,6,124,5,83,0,
-    41,2,78,114,138,0,0,0,41,7,114,129,0,0,0,114,
-    138,0,0,0,114,207,0,0,0,114,135,0,0,0,114,202,
-    0,0,0,114,184,0,0,0,114,179,0,0,0,41,6,114,
-    194,0,0,0,114,140,0,0,0,114,51,1,0,0,114,141,
-    0,0,0,114,142,0,0,0,114,188,0,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,6,0,0,0,218,16,95,108,
-    101,103,97,99,121,95,103,101,116,95,115,112,101,99,7,5,
-    0,0,115,18,0,0,0,0,4,10,1,16,2,10,1,4,
-    1,8,1,12,1,12,1,6,1,122,27,80,97,116,104,70,
-    105,110,100,101,114,46,95,108,101,103,97,99,121,95,103,101,
-    116,95,115,112,101,99,78,99,4,0,0,0,0,0,0,0,
-    0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,
-    115,166,0,0,0,103,0,125,4,124,2,68,0,93,134,125,
-    5,116,0,124,5,116,1,116,2,102,2,131,2,115,28,113,
-    8,124,0,160,3,124,5,161,1,125,6,124,6,100,1,107,
-    9,114,8,116,4,124,6,100,2,131,2,114,70,124,6,160,
-    5,124,1,124,3,161,2,125,7,110,12,124,0,160,6,124,
-    1,124,6,161,2,125,7,124,7,100,1,107,8,114,92,113,
-    8,124,7,106,7,100,1,107,9,114,110,124,7,2,0,1,
-    0,83,0,124,7,106,8,125,8,124,8,100,1,107,8,114,
-    132,116,9,100,3,131,1,130,1,124,4,160,10,124,8,161,
-    1,1,0,113,8,116,11,160,12,124,1,100,1,161,2,125,
-    7,124,4,124,7,95,8,124,7,83,0,41,4,122,63,70,
-    105,110,100,32,116,104,101,32,108,111,97,100,101,114,32,111,
-    114,32,110,97,109,101,115,112,97,99,101,95,112,97,116,104,
-    32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,
-    47,112,97,99,107,97,103,101,32,110,97,109,101,46,78,114,
-    204,0,0,0,122,19,115,112,101,99,32,109,105,115,115,105,
-    110,103,32,108,111,97,100,101,114,41,13,114,162,0,0,0,
-    114,85,0,0,0,218,5,98,121,116,101,115,114,55,1,0,
-    0,114,129,0,0,0,114,204,0,0,0,114,56,1,0,0,
-    114,141,0,0,0,114,179,0,0,0,114,118,0,0,0,114,
-    168,0,0,0,114,135,0,0,0,114,184,0,0,0,41,9,
-    114,194,0,0,0,114,140,0,0,0,114,44,0,0,0,114,
-    203,0,0,0,218,14,110,97,109,101,115,112,97,99,101,95,
-    112,97,116,104,90,5,101,110,116,114,121,114,51,1,0,0,
-    114,188,0,0,0,114,142,0,0,0,114,3,0,0,0,114,
-    3,0,0,0,114,6,0,0,0,218,9,95,103,101,116,95,
-    115,112,101,99,22,5,0,0,115,40,0,0,0,0,5,4,
-    1,8,1,14,1,2,1,10,1,8,1,10,1,14,2,12,
-    1,8,1,2,1,10,1,8,1,6,1,8,1,8,5,12,
-    2,12,1,6,1,122,20,80,97,116,104,70,105,110,100,101,
-    114,46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,
-    0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,
-    67,0,0,0,115,100,0,0,0,124,2,100,1,107,8,114,
-    14,116,0,106,1,125,2,124,0,160,2,124,1,124,2,124,
-    3,161,3,125,4,124,4,100,1,107,8,114,40,100,1,83,
-    0,124,4,106,3,100,1,107,8,114,92,124,4,106,4,125,
-    5,124,5,114,86,100,1,124,4,95,5,116,6,124,1,124,
-    5,124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,
-    1,83,0,110,4,124,4,83,0,100,1,83,0,41,2,122,
-    141,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,
-    112,101,99,32,102,111,114,32,39,102,117,108,108,110,97,109,
-    101,39,32,111,110,32,115,121,115,46,112,97,116,104,32,111,
-    114,32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,
-    32,32,32,84,104,101,32,115,101,97,114,99,104,32,105,115,
-    32,98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,
-    116,104,95,104,111,111,107,115,32,97,110,100,32,115,121,115,
-    46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,
-    97,99,104,101,46,10,32,32,32,32,32,32,32,32,78,41,
-    7,114,8,0,0,0,114,44,0,0,0,114,59,1,0,0,
-    114,141,0,0,0,114,179,0,0,0,114,182,0,0,0,114,
-    23,1,0,0,41,6,114,194,0,0,0,114,140,0,0,0,
-    114,44,0,0,0,114,203,0,0,0,114,188,0,0,0,114,
-    58,1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
-    0,0,0,114,204,0,0,0,54,5,0,0,115,26,0,0,
-    0,0,6,8,1,6,1,14,1,8,1,4,1,10,1,6,
-    1,4,3,6,1,16,1,4,2,6,2,122,20,80,97,116,
-    104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,
-    99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,
-    0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124,
-    0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,107,
-    8,114,24,100,1,83,0,124,3,106,1,83,0,41,2,122,
-    170,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101,
-    32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32,
-    39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32,
-    115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,
-    110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112,
-    97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,
-    104,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,
-    115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
-    101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110,
-    100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,
-    46,10,10,32,32,32,32,32,32,32,32,78,114,205,0,0,
-    0,114,206,0,0,0,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,114,207,0,0,0,78,5,0,0,115,8,
-    0,0,0,0,8,12,1,8,1,4,1,122,22,80,97,116,
-    104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,
-    117,108,101,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    4,0,0,0,3,0,0,0,79,0,0,0,115,24,0,0,
-    0,100,1,100,2,108,0,109,1,125,3,1,0,124,3,106,
-    2,124,1,124,2,142,1,83,0,41,3,97,32,1,0,0,
-    10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105,
-    115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32,
-    32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32,
-    105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32,
-    68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115,
-    116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111,
-    102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110,
-    103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,
-    111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99,
-    104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110,
-    97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111,
-    114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96,
-    96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101,
-    100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116,
-    104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32,
-    32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116,
-    111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46,
-    112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32,
-    114,73,0,0,0,41,1,218,18,77,101,116,97,100,97,116,
-    97,80,97,116,104,70,105,110,100,101,114,41,3,90,18,105,
-    109,112,111,114,116,108,105,98,46,109,101,116,97,100,97,116,
-    97,114,60,1,0,0,218,18,102,105,110,100,95,100,105,115,
-    116,114,105,98,117,116,105,111,110,115,41,4,114,194,0,0,
-    0,114,120,0,0,0,114,121,0,0,0,114,60,1,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    61,1,0,0,91,5,0,0,115,4,0,0,0,0,10,12,
-    1,122,29,80,97,116,104,70,105,110,100,101,114,46,102,105,
-    110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,
-    41,1,78,41,2,78,78,41,1,78,41,13,114,126,0,0,
-    0,114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,
-    114,208,0,0,0,114,47,1,0,0,114,53,1,0,0,114,
-    55,1,0,0,114,56,1,0,0,114,59,1,0,0,114,204,
-    0,0,0,114,207,0,0,0,114,61,1,0,0,114,3,0,
-    0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
-    0,114,46,1,0,0,214,4,0,0,115,34,0,0,0,8,
-    2,4,2,2,1,10,9,2,1,10,12,2,1,10,21,2,
-    1,10,14,2,1,12,31,2,1,12,23,2,1,12,12,2,
-    1,114,46,1,0,0,99,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,
-    90,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,
-    100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,
-    101,6,90,7,100,6,100,7,132,0,90,8,100,8,100,9,
-    132,0,90,9,100,19,100,11,100,12,132,1,90,10,100,13,
-    100,14,132,0,90,11,101,12,100,15,100,16,132,0,131,1,
-    90,13,100,17,100,18,132,0,90,14,100,10,83,0,41,20,
-    218,10,70,105,108,101,70,105,110,100,101,114,122,172,70,105,
-    108,101,45,98,97,115,101,100,32,102,105,110,100,101,114,46,
-    10,10,32,32,32,32,73,110,116,101,114,97,99,116,105,111,
-    110,115,32,119,105,116,104,32,116,104,101,32,102,105,108,101,
-    32,115,121,115,116,101,109,32,97,114,101,32,99,97,99,104,
-    101,100,32,102,111,114,32,112,101,114,102,111,114,109,97,110,
-    99,101,44,32,98,101,105,110,103,10,32,32,32,32,114,101,
-    102,114,101,115,104,101,100,32,119,104,101,110,32,116,104,101,
-    32,100,105,114,101,99,116,111,114,121,32,116,104,101,32,102,
-    105,110,100,101,114,32,105,115,32,104,97,110,100,108,105,110,
-    103,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,
-    105,101,100,46,10,10,32,32,32,32,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,7,
-    0,0,0,115,84,0,0,0,103,0,125,3,124,2,68,0,
-    93,32,92,2,137,0,125,4,124,3,160,0,135,0,102,1,
-    100,1,100,2,132,8,124,4,68,0,131,1,161,1,1,0,
-    113,8,124,3,124,0,95,1,124,1,112,54,100,3,124,0,
-    95,2,100,4,124,0,95,3,116,4,131,0,124,0,95,5,
-    116,4,131,0,124,0,95,6,100,5,83,0,41,6,122,154,
-    73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,
-    116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,
-    99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,
-    97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,
-    32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,
-    99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,
-    111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,
-    108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,
-    108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,
-    101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,51,
-    0,0,0,115,22,0,0,0,124,0,93,14,125,1,124,1,
-    136,0,102,2,86,0,1,0,113,2,100,0,83,0,114,110,
-    0,0,0,114,3,0,0,0,114,17,1,0,0,169,1,114,
-    141,0,0,0,114,3,0,0,0,114,6,0,0,0,114,20,
-    1,0,0,120,5,0,0,115,4,0,0,0,4,0,2,0,
-    122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105,
-    110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60,
-    103,101,110,101,120,112,114,62,114,71,0,0,0,114,105,0,
-    0,0,78,41,7,114,168,0,0,0,218,8,95,108,111,97,
-    100,101,114,115,114,44,0,0,0,218,11,95,112,97,116,104,
-    95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97,
-    116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120,
-    101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114,
-    119,0,0,0,114,44,0,0,0,218,14,108,111,97,100,101,
-    114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101,
-    114,115,114,190,0,0,0,114,3,0,0,0,114,63,1,0,
-    0,114,6,0,0,0,114,210,0,0,0,114,5,0,0,115,
-    16,0,0,0,0,4,4,1,12,1,26,1,6,2,10,1,
-    6,1,8,1,122,19,70,105,108,101,70,105,110,100,101,114,
-    46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,
-    0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,
-    0,0,115,10,0,0,0,100,1,124,0,95,0,100,2,83,
-    0,41,3,122,31,73,110,118,97,108,105,100,97,116,101,32,
-    116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,116,
-    105,109,101,46,114,105,0,0,0,78,41,1,114,65,1,0,
-    0,114,247,0,0,0,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,114,47,1,0,0,128,5,0,0,115,2,
-    0,0,0,0,2,122,28,70,105,108,101,70,105,110,100,101,
-    114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,
-    104,101,115,99,2,0,0,0,0,0,0,0,0,0,0,0,
-    3,0,0,0,3,0,0,0,67,0,0,0,115,42,0,0,
-    0,124,0,160,0,124,1,161,1,125,2,124,2,100,1,107,
-    8,114,26,100,1,103,0,102,2,83,0,124,2,106,1,124,
-    2,106,2,112,38,103,0,102,2,83,0,41,2,122,197,84,
-    114,121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,
-    100,101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,
-    105,102,105,101,100,32,109,111,100,117,108,101,44,32,111,114,
-    32,116,104,101,32,110,97,109,101,115,112,97,99,101,10,32,
-    32,32,32,32,32,32,32,112,97,99,107,97,103,101,32,112,
-    111,114,116,105,111,110,115,46,32,82,101,116,117,114,110,115,
-    32,40,108,111,97,100,101,114,44,32,108,105,115,116,45,111,
-    102,45,112,111,114,116,105,111,110,115,41,46,10,10,32,32,
+    0,41,2,78,84,114,5,0,0,0,114,219,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,182,
+    0,0,0,192,4,0,0,115,2,0,0,0,0,1,122,27,
+    95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
+    46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,
+    67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,78,
+    114,40,0,0,0,114,5,0,0,0,114,219,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,229,
+    0,0,0,195,4,0,0,115,2,0,0,0,0,1,122,27,
+    95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
+    46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,
+    0,0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,
+    67,0,0,0,115,16,0,0,0,116,0,100,1,100,2,100,
+    3,100,4,100,5,141,4,83,0,41,6,78,114,40,0,0,
+    0,122,8,60,115,116,114,105,110,103,62,114,215,0,0,0,
+    84,41,1,114,231,0,0,0,41,1,114,232,0,0,0,114,
+    219,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,114,213,0,0,0,198,4,0,0,115,2,0,0,
+    0,0,1,122,25,95,78,97,109,101,115,112,97,99,101,76,
+    111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,
+    0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,
+    114,210,0,0,0,114,5,0,0,0,114,211,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,212,
+    0,0,0,201,4,0,0,115,2,0,0,0,0,1,122,30,
+    95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
+    46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,
+    0,0,0,67,0,0,0,115,4,0,0,0,100,0,83,0,
+    114,109,0,0,0,114,5,0,0,0,114,253,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,217,
+    0,0,0,204,4,0,0,115,2,0,0,0,0,1,122,28,
+    95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
+    46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+    0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,1,
+    124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,1,
+    161,2,83,0,41,2,122,98,76,111,97,100,32,97,32,110,
+    97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,46,
+    10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,
+    101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,
+    116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,
+    111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,
+    10,10,32,32,32,32,32,32,32,32,122,38,110,97,109,101,
+    115,112,97,99,101,32,109,111,100,117,108,101,32,108,111,97,
+    100,101,100,32,119,105,116,104,32,112,97,116,104,32,123,33,
+    114,125,41,4,114,134,0,0,0,114,149,0,0,0,114,24,
+    1,0,0,114,218,0,0,0,114,219,0,0,0,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,114,220,0,0,
+    0,207,4,0,0,115,8,0,0,0,0,7,6,1,4,255,
+    4,2,122,28,95,78,97,109,101,115,112,97,99,101,76,111,
+    97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,
+    78,41,12,114,125,0,0,0,114,124,0,0,0,114,126,0,
+    0,0,114,209,0,0,0,114,207,0,0,0,114,44,1,0,
+    0,114,182,0,0,0,114,229,0,0,0,114,213,0,0,0,
+    114,212,0,0,0,114,217,0,0,0,114,220,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,114,43,1,0,0,179,4,0,0,115,18,0,0,
+    0,8,1,8,3,2,1,10,8,8,3,8,3,8,3,8,
+    3,8,3,114,43,1,0,0,99,0,0,0,0,0,0,0,
+    0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,
+    0,115,118,0,0,0,101,0,90,1,100,0,90,2,100,1,
+    90,3,101,4,100,2,100,3,132,0,131,1,90,5,101,4,
+    100,4,100,5,132,0,131,1,90,6,101,4,100,6,100,7,
+    132,0,131,1,90,7,101,4,100,8,100,9,132,0,131,1,
+    90,8,101,4,100,19,100,11,100,12,132,1,131,1,90,9,
+    101,4,100,20,100,13,100,14,132,1,131,1,90,10,101,4,
+    100,21,100,15,100,16,132,1,131,1,90,11,101,4,100,17,
+    100,18,132,0,131,1,90,12,100,10,83,0,41,22,218,10,
+    80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,97,
+    32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,
+    32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,
+    99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,
+    116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,0,
+    0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,
+    0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,3,
+    161,0,131,1,68,0,93,44,92,2,125,1,125,2,124,2,
+    100,1,117,0,114,40,116,1,106,2,124,1,61,0,113,14,
+    116,4,124,2,100,2,131,2,114,14,124,2,160,5,161,0,
+    1,0,113,14,100,1,83,0,41,3,122,125,67,97,108,108,
+    32,116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,
+    99,97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,
+    111,110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,
+    121,32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,
+    32,32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,
+    112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,
+    99,104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,
+    101,109,101,110,116,101,100,41,46,78,218,17,105,110,118,97,
+    108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,218,
+    4,108,105,115,116,114,1,0,0,0,218,19,112,97,116,104,
+    95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,218,
+    5,105,116,101,109,115,114,128,0,0,0,114,46,1,0,0,
+    41,3,114,193,0,0,0,114,116,0,0,0,218,6,102,105,
+    110,100,101,114,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,114,46,1,0,0,225,4,0,0,115,10,0,0,
+    0,0,4,22,1,8,1,10,1,10,1,122,28,80,97,116,
+    104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97,
+    116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0,
+    0,0,0,0,0,0,3,0,0,0,9,0,0,0,67,0,
+    0,0,115,82,0,0,0,116,0,106,1,100,1,117,1,114,
+    28,116,0,106,1,115,28,116,2,160,3,100,2,116,4,161,
+    2,1,0,116,0,106,1,68,0,93,42,125,2,122,14,124,
+    2,124,1,131,1,87,0,2,0,1,0,83,0,4,0,116,
+    5,121,74,1,0,1,0,1,0,89,0,113,34,89,0,113,
+    34,48,0,113,34,100,1,83,0,41,3,122,46,83,101,97,
+    114,99,104,32,115,121,115,46,112,97,116,104,95,104,111,111,
+    107,115,32,102,111,114,32,97,32,102,105,110,100,101,114,32,
+    102,111,114,32,39,112,97,116,104,39,46,78,122,23,115,121,
+    115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32,
+    101,109,112,116,121,41,6,114,1,0,0,0,218,10,112,97,
+    116,104,95,104,111,111,107,115,114,75,0,0,0,114,76,0,
+    0,0,114,138,0,0,0,114,117,0,0,0,41,3,114,193,
+    0,0,0,114,44,0,0,0,90,4,104,111,111,107,114,5,
+    0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,95,
+    112,97,116,104,95,104,111,111,107,115,235,4,0,0,115,16,
+    0,0,0,0,3,16,1,12,1,10,1,2,1,14,1,12,
+    1,12,2,122,22,80,97,116,104,70,105,110,100,101,114,46,
+    95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0,
+    0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,
+    67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114,
+    42,122,12,116,0,160,1,161,0,125,1,87,0,110,20,4,
+    0,116,2,121,40,1,0,1,0,1,0,89,0,100,2,83,
+    0,48,0,122,14,116,3,106,4,124,1,25,0,125,2,87,
+    0,110,38,4,0,116,5,121,94,1,0,1,0,1,0,124,
+    0,160,6,124,1,161,1,125,2,124,2,116,3,106,4,124,
+    1,60,0,89,0,110,2,48,0,124,2,83,0,41,3,122,
+    210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32,
+    102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116,
+    114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104,
+    95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,
+    10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,
+    32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110,
+    111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44,
+    32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112,
+    114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32,
+    32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105,
+    116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32,
+    105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116,
+    111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32,
+    32,32,32,114,40,0,0,0,78,41,7,114,4,0,0,0,
+    114,55,0,0,0,114,3,1,0,0,114,1,0,0,0,114,
+    48,1,0,0,218,8,75,101,121,69,114,114,111,114,114,52,
+    1,0,0,41,3,114,193,0,0,0,114,44,0,0,0,114,
+    50,1,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+    0,0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,
+    116,101,114,95,99,97,99,104,101,248,4,0,0,115,22,0,
+    0,0,0,8,8,1,2,1,12,1,12,3,8,1,2,1,
+    14,1,12,1,10,1,16,1,122,31,80,97,116,104,70,105,
+    110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114,
+    116,101,114,95,99,97,99,104,101,99,3,0,0,0,0,0,
+    0,0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,
+    0,0,115,82,0,0,0,116,0,124,2,100,1,131,2,114,
+    26,124,2,160,1,124,1,161,1,92,2,125,3,125,4,110,
+    14,124,2,160,2,124,1,161,1,125,3,103,0,125,4,124,
+    3,100,0,117,1,114,60,116,3,160,4,124,1,124,3,161,
+    2,83,0,116,3,160,5,124,1,100,0,161,2,125,5,124,
+    4,124,5,95,6,124,5,83,0,41,2,78,114,137,0,0,
+    0,41,7,114,128,0,0,0,114,137,0,0,0,114,206,0,
+    0,0,114,134,0,0,0,114,201,0,0,0,114,183,0,0,
+    0,114,178,0,0,0,41,6,114,193,0,0,0,114,139,0,
+    0,0,114,50,1,0,0,114,140,0,0,0,114,141,0,0,
+    0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,218,16,95,108,101,103,97,99,121,95,103,
+    101,116,95,115,112,101,99,14,5,0,0,115,18,0,0,0,
+    0,4,10,1,16,2,10,1,4,1,8,1,12,1,12,1,
+    6,1,122,27,80,97,116,104,70,105,110,100,101,114,46,95,
+    108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,78,
+    99,4,0,0,0,0,0,0,0,0,0,0,0,9,0,0,
+    0,5,0,0,0,67,0,0,0,115,166,0,0,0,103,0,
+    125,4,124,2,68,0,93,134,125,5,116,0,124,5,116,1,
+    116,2,102,2,131,2,115,28,113,8,124,0,160,3,124,5,
+    161,1,125,6,124,6,100,1,117,1,114,8,116,4,124,6,
+    100,2,131,2,114,70,124,6,160,5,124,1,124,3,161,2,
+    125,7,110,12,124,0,160,6,124,1,124,6,161,2,125,7,
+    124,7,100,1,117,0,114,92,113,8,124,7,106,7,100,1,
+    117,1,114,110,124,7,2,0,1,0,83,0,124,7,106,8,
+    125,8,124,8,100,1,117,0,114,132,116,9,100,3,131,1,
+    130,1,124,4,160,10,124,8,161,1,1,0,113,8,116,11,
+    160,12,124,1,100,1,161,2,125,7,124,4,124,7,95,8,
+    124,7,83,0,41,4,122,63,70,105,110,100,32,116,104,101,
+    32,108,111,97,100,101,114,32,111,114,32,110,97,109,101,115,
+    112,97,99,101,95,112,97,116,104,32,102,111,114,32,116,104,
+    105,115,32,109,111,100,117,108,101,47,112,97,99,107,97,103,
+    101,32,110,97,109,101,46,78,114,203,0,0,0,122,19,115,
+    112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100,
+    101,114,41,13,114,161,0,0,0,114,84,0,0,0,218,5,
+    98,121,116,101,115,114,54,1,0,0,114,128,0,0,0,114,
+    203,0,0,0,114,55,1,0,0,114,140,0,0,0,114,178,
+    0,0,0,114,117,0,0,0,114,167,0,0,0,114,134,0,
+    0,0,114,183,0,0,0,41,9,114,193,0,0,0,114,139,
+    0,0,0,114,44,0,0,0,114,202,0,0,0,218,14,110,
+    97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101,
+    110,116,114,121,114,50,1,0,0,114,187,0,0,0,114,141,
+    0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,218,9,95,103,101,116,95,115,112,101,99,29,5,0,
+    0,115,40,0,0,0,0,5,4,1,8,1,14,1,2,1,
+    10,1,8,1,10,1,14,2,12,1,8,1,2,1,10,1,
+    8,1,6,1,8,1,8,5,12,2,12,1,6,1,122,20,
+    80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95,
+    115,112,101,99,99,4,0,0,0,0,0,0,0,0,0,0,
+    0,6,0,0,0,5,0,0,0,67,0,0,0,115,100,0,
+    0,0,124,2,100,1,117,0,114,14,116,0,106,1,125,2,
+    124,0,160,2,124,1,124,2,124,3,161,3,125,4,124,4,
+    100,1,117,0,114,40,100,1,83,0,124,4,106,3,100,1,
+    117,0,114,92,124,4,106,4,125,5,124,5,114,86,100,1,
+    124,4,95,5,116,6,124,1,124,5,124,0,106,2,131,3,
+    124,4,95,4,124,4,83,0,100,1,83,0,110,4,124,4,
+    83,0,100,1,83,0,41,2,122,141,84,114,121,32,116,111,
+    32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114,
+    32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115,
+    121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104,
+    39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,
+    115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32,
+    111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,
+    115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105,
+    109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32,
+    32,32,32,32,32,32,32,78,41,7,114,1,0,0,0,114,
+    44,0,0,0,114,58,1,0,0,114,140,0,0,0,114,178,
+    0,0,0,114,181,0,0,0,114,22,1,0,0,41,6,114,
+    193,0,0,0,114,139,0,0,0,114,44,0,0,0,114,202,
+    0,0,0,114,187,0,0,0,114,57,1,0,0,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,114,203,0,0,
+    0,61,5,0,0,115,26,0,0,0,0,6,8,1,6,1,
+    14,1,8,1,4,1,10,1,6,1,4,3,6,1,16,1,
+    4,2,6,2,122,20,80,97,116,104,70,105,110,100,101,114,
+    46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0,
+    0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,
+    0,0,0,115,30,0,0,0,124,0,160,0,124,1,124,2,
+    161,2,125,3,124,3,100,1,117,0,114,24,100,1,83,0,
+    124,3,106,1,83,0,41,2,122,170,102,105,110,100,32,116,
+    104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,115,
+    46,112,97,116,104,32,111,114,32,39,112,97,116,104,39,32,
+    98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,
+    104,95,104,111,111,107,115,32,97,110,100,10,32,32,32,32,
+    32,32,32,32,115,121,115,46,112,97,116,104,95,105,109,112,
+    111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,
     32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,
     100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,
     32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,
     41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,
-    32,32,32,32,78,41,3,114,204,0,0,0,114,141,0,0,
-    0,114,179,0,0,0,41,3,114,119,0,0,0,114,140,0,
-    0,0,114,188,0,0,0,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,114,138,0,0,0,134,5,0,0,115,
-    8,0,0,0,0,7,10,1,8,1,8,1,122,22,70,105,
-    108,101,70,105,110,100,101,114,46,102,105,110,100,95,108,111,
-    97,100,101,114,99,6,0,0,0,0,0,0,0,0,0,0,
-    0,7,0,0,0,6,0,0,0,67,0,0,0,115,26,0,
-    0,0,124,1,124,2,124,3,131,2,125,6,116,0,124,2,
-    124,3,124,6,124,4,100,1,141,4,83,0,41,2,78,114,
-    178,0,0,0,41,1,114,191,0,0,0,41,7,114,119,0,
-    0,0,114,189,0,0,0,114,140,0,0,0,114,44,0,0,
-    0,90,4,115,109,115,108,114,203,0,0,0,114,141,0,0,
-    0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    114,59,1,0,0,146,5,0,0,115,8,0,0,0,0,1,
-    10,1,8,1,2,255,122,20,70,105,108,101,70,105,110,100,
-    101,114,46,95,103,101,116,95,115,112,101,99,78,99,3,0,
-    0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,0,
-    0,0,67,0,0,0,115,98,1,0,0,100,1,125,3,124,
-    1,160,0,100,2,161,1,100,3,25,0,125,4,122,24,116,
-    1,124,0,106,2,112,34,116,3,160,4,161,0,131,1,106,
-    5,125,5,87,0,110,24,4,0,116,6,107,10,114,66,1,
-    0,1,0,1,0,100,4,125,5,89,0,110,2,88,0,124,
-    5,124,0,106,7,107,3,114,92,124,0,160,8,161,0,1,
-    0,124,5,124,0,95,7,116,9,131,0,114,114,124,0,106,
-    10,125,6,124,4,160,11,161,0,125,7,110,10,124,0,106,
-    12,125,6,124,4,125,7,124,7,124,6,107,6,114,218,116,
-    13,124,0,106,2,124,4,131,2,125,8,124,0,106,14,68,
-    0,93,58,92,2,125,9,125,10,100,5,124,9,23,0,125,
-    11,116,13,124,8,124,11,131,2,125,12,116,15,124,12,131,
-    1,114,150,124,0,160,16,124,10,124,1,124,12,124,8,103,
-    1,124,2,161,5,2,0,1,0,83,0,113,150,116,17,124,
-    8,131,1,125,3,124,0,106,14,68,0,93,82,92,2,125,
-    9,125,10,116,13,124,0,106,2,124,4,124,9,23,0,131,
-    2,125,12,116,18,106,19,100,6,124,12,100,3,100,7,141,
-    3,1,0,124,7,124,9,23,0,124,6,107,6,114,224,116,
-    15,124,12,131,1,114,224,124,0,160,16,124,10,124,1,124,
-    12,100,8,124,2,161,5,2,0,1,0,83,0,113,224,124,
-    3,144,1,114,94,116,18,160,19,100,9,124,8,161,2,1,
-    0,116,18,160,20,124,1,100,8,161,2,125,13,124,8,103,
-    1,124,13,95,21,124,13,83,0,100,8,83,0,41,10,122,
-    111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,
-    112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99,
-    105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,32,
-    32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,116,
-    104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,99,
-    44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,116,
-    32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,
-    70,114,71,0,0,0,114,28,0,0,0,114,105,0,0,0,
-    114,210,0,0,0,122,9,116,114,121,105,110,103,32,123,125,
-    41,1,90,9,118,101,114,98,111,115,105,116,121,78,122,25,
-    112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97,
-    99,101,32,102,111,114,32,123,125,41,22,114,41,0,0,0,
-    114,49,0,0,0,114,44,0,0,0,114,2,0,0,0,114,
-    55,0,0,0,114,11,1,0,0,114,50,0,0,0,114,65,
-    1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101,
-    114,7,0,0,0,114,68,1,0,0,114,106,0,0,0,114,
-    67,1,0,0,114,38,0,0,0,114,64,1,0,0,114,54,
-    0,0,0,114,59,1,0,0,114,56,0,0,0,114,135,0,
-    0,0,114,150,0,0,0,114,184,0,0,0,114,179,0,0,
-    0,41,14,114,119,0,0,0,114,140,0,0,0,114,203,0,
-    0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101,
-    90,11,116,97,105,108,95,109,111,100,117,108,101,114,170,0,
-    0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101,
-    95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97,
-    116,104,114,18,1,0,0,114,189,0,0,0,90,13,105,110,
-    105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108,
-    108,95,112,97,116,104,114,188,0,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,6,0,0,0,114,204,0,0,0,151,
-    5,0,0,115,74,0,0,0,0,5,4,1,14,1,2,1,
-    24,1,14,1,10,1,10,1,8,1,6,2,6,1,6,1,
-    10,2,6,1,4,2,8,1,12,1,14,1,8,1,10,1,
-    8,1,26,4,8,2,14,1,16,1,16,1,12,1,8,1,
-    10,1,2,0,2,255,10,2,6,1,12,1,12,1,8,1,
-    4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102,
-    105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0,
-    0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0,
-    0,115,190,0,0,0,124,0,106,0,125,1,122,22,116,1,
-    160,2,124,1,112,22,116,1,160,3,161,0,161,1,125,2,
-    87,0,110,30,4,0,116,4,116,5,116,6,102,3,107,10,
-    114,58,1,0,1,0,1,0,103,0,125,2,89,0,110,2,
-    88,0,116,7,106,8,160,9,100,1,161,1,115,84,116,10,
-    124,2,131,1,124,0,95,11,110,74,116,10,131,0,125,3,
-    124,2,68,0,93,56,125,4,124,4,160,12,100,2,161,1,
-    92,3,125,5,125,6,125,7,124,6,114,136,100,3,160,13,
-    124,5,124,7,160,14,161,0,161,2,125,8,110,4,124,5,
-    125,8,124,3,160,15,124,8,161,1,1,0,113,94,124,3,
-    124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,186,
-    100,4,100,5,132,0,124,2,68,0,131,1,124,0,95,17,
-    100,6,83,0,41,7,122,68,70,105,108,108,32,116,104,101,
-    32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,116,
-    105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32,
-    112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105,
-    115,32,100,105,114,101,99,116,111,114,121,46,114,0,0,0,
-    0,114,71,0,0,0,114,61,0,0,0,99,1,0,0,0,
+    32,32,32,32,78,114,204,0,0,0,114,205,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,206,
+    0,0,0,85,5,0,0,115,8,0,0,0,0,8,12,1,
+    8,1,4,1,122,22,80,97,116,104,70,105,110,100,101,114,
+    46,102,105,110,100,95,109,111,100,117,108,101,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,
+    0,79,0,0,0,115,28,0,0,0,100,1,100,2,108,0,
+    109,1,125,3,1,0,124,3,106,2,124,1,105,0,124,2,
+    164,1,142,1,83,0,41,3,97,32,1,0,0,10,32,32,
+    32,32,32,32,32,32,70,105,110,100,32,100,105,115,116,114,
+    105,98,117,116,105,111,110,115,46,10,10,32,32,32,32,32,
+    32,32,32,82,101,116,117,114,110,32,97,110,32,105,116,101,
+    114,97,98,108,101,32,111,102,32,97,108,108,32,68,105,115,
+    116,114,105,98,117,116,105,111,110,32,105,110,115,116,97,110,
+    99,101,115,32,99,97,112,97,98,108,101,32,111,102,10,32,
+    32,32,32,32,32,32,32,108,111,97,100,105,110,103,32,116,
+    104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,
+    112,97,99,107,97,103,101,115,32,109,97,116,99,104,105,110,
+    103,32,96,96,99,111,110,116,101,120,116,46,110,97,109,101,
+    96,96,10,32,32,32,32,32,32,32,32,40,111,114,32,97,
+    108,108,32,110,97,109,101,115,32,105,102,32,96,96,78,111,
+    110,101,96,96,32,105,110,100,105,99,97,116,101,100,41,32,
+    97,108,111,110,103,32,116,104,101,32,112,97,116,104,115,32,
+    105,110,32,116,104,101,32,108,105,115,116,10,32,32,32,32,
+    32,32,32,32,111,102,32,100,105,114,101,99,116,111,114,105,
+    101,115,32,96,96,99,111,110,116,101,120,116,46,112,97,116,
+    104,96,96,46,10,32,32,32,32,32,32,32,32,114,73,0,
+    0,0,41,1,218,18,77,101,116,97,100,97,116,97,80,97,
+    116,104,70,105,110,100,101,114,41,3,90,18,105,109,112,111,
+    114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,59,
+    1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105,
+    98,117,116,105,111,110,115,41,4,114,193,0,0,0,114,119,
+    0,0,0,114,120,0,0,0,114,59,1,0,0,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,114,60,1,0,
+    0,98,5,0,0,115,4,0,0,0,0,10,12,1,122,29,
+    80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,
+    100,105,115,116,114,105,98,117,116,105,111,110,115,41,1,78,
+    41,2,78,78,41,1,78,41,13,114,125,0,0,0,114,124,
+    0,0,0,114,126,0,0,0,114,127,0,0,0,114,207,0,
+    0,0,114,46,1,0,0,114,52,1,0,0,114,54,1,0,
+    0,114,55,1,0,0,114,58,1,0,0,114,203,0,0,0,
+    114,206,0,0,0,114,60,1,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,45,
+    1,0,0,221,4,0,0,115,34,0,0,0,8,2,4,2,
+    2,1,10,9,2,1,10,12,2,1,10,21,2,1,10,14,
+    2,1,12,31,2,1,12,23,2,1,12,12,2,1,114,45,
+    1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
+    0,0,0,0,3,0,0,0,64,0,0,0,115,90,0,0,
+    0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,
+    3,132,0,90,4,100,4,100,5,132,0,90,5,101,6,90,
+    7,100,6,100,7,132,0,90,8,100,8,100,9,132,0,90,
+    9,100,19,100,11,100,12,132,1,90,10,100,13,100,14,132,
+    0,90,11,101,12,100,15,100,16,132,0,131,1,90,13,100,
+    17,100,18,132,0,90,14,100,10,83,0,41,20,218,10,70,
+    105,108,101,70,105,110,100,101,114,122,172,70,105,108,101,45,
+    98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,32,
+    32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,32,
+    119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,121,
+    115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,32,
+    102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,44,
+    32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,101,
+    115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,105,
+    114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,100,
+    101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,104,
+    97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,
+    46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,
+    115,84,0,0,0,103,0,125,3,124,2,68,0,93,32,92,
+    2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100,
+    2,132,8,124,4,68,0,131,1,161,1,1,0,113,8,124,
+    3,124,0,95,1,124,1,112,54,100,3,124,0,95,2,100,
+    4,124,0,95,3,116,4,131,0,124,0,95,5,116,4,131,
+    0,124,0,95,6,100,5,83,0,41,6,122,154,73,110,105,
+    116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,
+    32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,
+    111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,
+    101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,
+    32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,
+    116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,
+    101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,
+    115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,
+    100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,
+    103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,
+    0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0,
+    115,22,0,0,0,124,0,93,14,125,1,124,1,136,0,102,
+    2,86,0,1,0,113,2,100,0,83,0,114,109,0,0,0,
+    114,5,0,0,0,114,16,1,0,0,169,1,114,140,0,0,
+    0,114,5,0,0,0,114,8,0,0,0,114,19,1,0,0,
+    127,5,0,0,243,0,0,0,0,122,38,70,105,108,101,70,
+    105,110,100,101,114,46,95,95,105,110,105,116,95,95,46,60,
+    108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,
+    62,114,71,0,0,0,114,104,0,0,0,78,41,7,114,167,
+    0,0,0,218,8,95,108,111,97,100,101,114,115,114,44,0,
+    0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218,
+    3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104,
+    101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104,
+    95,99,97,99,104,101,41,5,114,118,0,0,0,114,44,0,
+    0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105,
+    108,115,90,7,108,111,97,100,101,114,115,114,189,0,0,0,
+    114,5,0,0,0,114,62,1,0,0,114,8,0,0,0,114,
+    209,0,0,0,121,5,0,0,115,16,0,0,0,0,4,4,
+    1,12,1,26,1,6,2,10,1,6,1,8,1,122,19,70,
+    105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,
+    95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,
+    0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,
+    100,1,124,0,95,0,100,2,83,0,41,3,122,31,73,110,
+    118,97,108,105,100,97,116,101,32,116,104,101,32,100,105,114,
+    101,99,116,111,114,121,32,109,116,105,109,101,46,114,104,0,
+    0,0,78,41,1,114,65,1,0,0,114,246,0,0,0,114,
+    5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,46,
+    1,0,0,135,5,0,0,115,2,0,0,0,0,2,122,28,
+    70,105,108,101,70,105,110,100,101,114,46,105,110,118,97,108,
+    105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,
+    0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,
+    0,67,0,0,0,115,42,0,0,0,124,0,160,0,124,1,
+    161,1,125,2,124,2,100,1,117,0,114,26,100,1,103,0,
+    102,2,83,0,124,2,106,1,124,2,106,2,112,38,103,0,
+    102,2,83,0,41,2,122,197,84,114,121,32,116,111,32,102,
+    105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,
+    32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,
+    111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97,
+    109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32,
+    112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115,
+    46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101,
+    114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105,
+    111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84,
+    104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,
+    112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,
+    105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,
+    97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3,
+    114,203,0,0,0,114,140,0,0,0,114,178,0,0,0,41,
+    3,114,118,0,0,0,114,139,0,0,0,114,187,0,0,0,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+    137,0,0,0,141,5,0,0,115,8,0,0,0,0,7,10,
+    1,8,1,8,1,122,22,70,105,108,101,70,105,110,100,101,
+    114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0,
+    0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0,
+    0,0,67,0,0,0,115,26,0,0,0,124,1,124,2,124,
+    3,131,2,125,6,116,0,124,2,124,3,124,6,124,4,100,
+    1,141,4,83,0,41,2,78,114,177,0,0,0,41,1,114,
+    190,0,0,0,41,7,114,118,0,0,0,114,188,0,0,0,
+    114,139,0,0,0,114,44,0,0,0,90,4,115,109,115,108,
+    114,202,0,0,0,114,140,0,0,0,114,5,0,0,0,114,
+    5,0,0,0,114,8,0,0,0,114,58,1,0,0,153,5,
+    0,0,115,8,0,0,0,0,1,10,1,8,1,2,255,122,
+    20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,116,
+    95,115,112,101,99,78,99,3,0,0,0,0,0,0,0,0,
+    0,0,0,14,0,0,0,8,0,0,0,67,0,0,0,115,
+    96,1,0,0,100,1,125,3,124,1,160,0,100,2,161,1,
+    100,3,25,0,125,4,122,24,116,1,124,0,106,2,112,34,
+    116,3,160,4,161,0,131,1,106,5,125,5,87,0,110,22,
+    4,0,116,6,121,64,1,0,1,0,1,0,100,4,125,5,
+    89,0,110,2,48,0,124,5,124,0,106,7,107,3,114,90,
+    124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9,
+    131,0,114,112,124,0,106,10,125,6,124,4,160,11,161,0,
+    125,7,110,10,124,0,106,12,125,6,124,4,125,7,124,7,
+    124,6,118,0,114,216,116,13,124,0,106,2,124,4,131,2,
+    125,8,124,0,106,14,68,0,93,58,92,2,125,9,125,10,
+    100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2,
+    125,12,116,15,124,12,131,1,114,148,124,0,160,16,124,10,
+    124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0,
+    83,0,113,148,116,17,124,8,131,1,125,3,124,0,106,14,
+    68,0,93,82,92,2,125,9,125,10,116,13,124,0,106,2,
+    124,4,124,9,23,0,131,2,125,12,116,18,106,19,100,6,
+    124,12,100,3,100,7,141,3,1,0,124,7,124,9,23,0,
+    124,6,118,0,114,222,116,15,124,12,131,1,114,222,124,0,
+    160,16,124,10,124,1,124,12,100,8,124,2,161,5,2,0,
+    1,0,83,0,113,222,124,3,144,1,114,92,116,18,160,19,
+    100,9,124,8,161,2,1,0,116,18,160,20,124,1,100,8,
+    161,2,125,13,124,8,103,1,124,13,95,21,124,13,83,0,
+    100,8,83,0,41,10,122,111,84,114,121,32,116,111,32,102,
+    105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,116,
+    104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,
+    117,108,101,46,10,10,32,32,32,32,32,32,32,32,82,101,
+    116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,105,
+    110,103,32,115,112,101,99,44,32,111,114,32,78,111,110,101,
+    32,105,102,32,110,111,116,32,102,111,117,110,100,46,10,32,
+    32,32,32,32,32,32,32,70,114,71,0,0,0,114,28,0,
+    0,0,114,104,0,0,0,114,209,0,0,0,122,9,116,114,
+    121,105,110,103,32,123,125,41,1,90,9,118,101,114,98,111,
+    115,105,116,121,78,122,25,112,111,115,115,105,98,108,101,32,
+    110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,
+    41,22,114,41,0,0,0,114,49,0,0,0,114,44,0,0,
+    0,114,4,0,0,0,114,55,0,0,0,114,10,1,0,0,
+    114,50,0,0,0,114,65,1,0,0,218,11,95,102,105,108,
+    108,95,99,97,99,104,101,114,9,0,0,0,114,68,1,0,
+    0,114,105,0,0,0,114,67,1,0,0,114,38,0,0,0,
+    114,64,1,0,0,114,54,0,0,0,114,58,1,0,0,114,
+    56,0,0,0,114,134,0,0,0,114,149,0,0,0,114,183,
+    0,0,0,114,178,0,0,0,41,14,114,118,0,0,0,114,
+    139,0,0,0,114,202,0,0,0,90,12,105,115,95,110,97,
+    109,101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,
+    100,117,108,101,114,169,0,0,0,90,5,99,97,99,104,101,
+    90,12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,
+    98,97,115,101,95,112,97,116,104,114,17,1,0,0,114,188,
+    0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,
+    109,101,90,9,102,117,108,108,95,112,97,116,104,114,187,0,
+    0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,
+    0,114,203,0,0,0,158,5,0,0,115,72,0,0,0,0,
+    5,4,1,14,1,2,1,24,1,12,1,10,1,10,1,8,
+    1,6,2,6,1,6,1,10,2,6,1,4,2,8,1,12,
+    1,14,1,8,1,10,1,8,1,26,4,8,2,14,1,16,
+    1,16,1,12,1,8,1,10,1,4,255,10,2,6,1,12,
+    1,12,1,8,1,4,1,122,20,70,105,108,101,70,105,110,
+    100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0,
+    0,0,0,0,0,0,0,0,0,0,9,0,0,0,10,0,
+    0,0,67,0,0,0,115,188,0,0,0,124,0,106,0,125,
+    1,122,22,116,1,160,2,124,1,112,22,116,1,160,3,161,
+    0,161,1,125,2,87,0,110,28,4,0,116,4,116,5,116,
+    6,102,3,121,56,1,0,1,0,1,0,103,0,125,2,89,
+    0,110,2,48,0,116,7,106,8,160,9,100,1,161,1,115,
+    82,116,10,124,2,131,1,124,0,95,11,110,74,116,10,131,
+    0,125,3,124,2,68,0,93,56,125,4,124,4,160,12,100,
+    2,161,1,92,3,125,5,125,6,125,7,124,6,114,134,100,
+    3,160,13,124,5,124,7,160,14,161,0,161,2,125,8,110,
+    4,124,5,125,8,124,3,160,15,124,8,161,1,1,0,113,
+    92,124,3,124,0,95,11,116,7,106,8,160,9,116,16,161,
+    1,114,184,100,4,100,5,132,0,124,2,68,0,131,1,124,
+    0,95,17,100,6,83,0,41,7,122,68,70,105,108,108,32,
+    116,104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,
+    101,110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,
+    110,100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,
+    116,104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,
+    0,0,0,0,114,71,0,0,0,114,61,0,0,0,99,1,
+    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,
+    0,0,0,83,0,0,0,115,20,0,0,0,104,0,124,0,
+    93,12,125,1,124,1,160,0,161,0,146,2,113,4,83,0,
+    114,5,0,0,0,41,1,114,105,0,0,0,41,2,114,32,
+    0,0,0,90,2,102,110,114,5,0,0,0,114,5,0,0,
+    0,114,8,0,0,0,218,9,60,115,101,116,99,111,109,112,
+    62,235,5,0,0,114,63,1,0,0,122,41,70,105,108,101,
+    70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,
+    104,101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,
+    99,111,109,112,62,78,41,18,114,44,0,0,0,114,4,0,
+    0,0,114,7,1,0,0,114,55,0,0,0,114,3,1,0,
+    0,218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,
+    111,114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,
+    121,69,114,114,111,114,114,1,0,0,0,114,10,0,0,0,
+    114,11,0,0,0,114,66,1,0,0,114,67,1,0,0,114,
+    100,0,0,0,114,62,0,0,0,114,105,0,0,0,218,3,
+    97,100,100,114,12,0,0,0,114,68,1,0,0,41,9,114,
+    118,0,0,0,114,44,0,0,0,114,8,1,0,0,90,21,
+    108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110,
+    116,101,110,116,115,114,41,1,0,0,114,116,0,0,0,114,
+    29,1,0,0,114,17,1,0,0,90,8,110,101,119,95,110,
+    97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,0,
+    0,0,114,70,1,0,0,206,5,0,0,115,34,0,0,0,
+    0,2,6,1,2,1,22,1,18,3,10,3,12,1,12,7,
+    6,1,8,1,16,1,4,1,18,2,4,1,12,1,6,1,
+    12,1,122,22,70,105,108,101,70,105,110,100,101,114,46,95,
+    102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0,
+    0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,7,
+    0,0,0,115,18,0,0,0,135,0,135,1,102,2,100,1,
+    100,2,132,8,125,2,124,2,83,0,41,3,97,20,1,0,
+    0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32,
+    119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32,
+    99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,
+    110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,
+    32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,
+    108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,
+    116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,
+    115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,
+    115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,
+    32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,
+    32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,
+    32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,
+    116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,
+    32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,
+    97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,
+    111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,
+    32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,
+    32,32,32,32,32,99,1,0,0,0,0,0,0,0,0,0,
+    0,0,1,0,0,0,4,0,0,0,19,0,0,0,115,36,
+    0,0,0,116,0,124,0,131,1,115,20,116,1,100,1,124,
+    0,100,2,141,2,130,1,136,0,124,0,103,1,136,1,162,
+    1,82,0,142,0,83,0,41,3,122,45,80,97,116,104,32,
+    104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,
+    105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,
+    101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,
+    105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,
+    117,112,112,111,114,116,101,100,114,48,0,0,0,41,2,114,
+    56,0,0,0,114,117,0,0,0,114,48,0,0,0,169,2,
+    114,193,0,0,0,114,69,1,0,0,114,5,0,0,0,114,
+    8,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,
+    102,111,114,95,70,105,108,101,70,105,110,100,101,114,247,5,
+    0,0,115,6,0,0,0,0,2,8,1,12,1,122,54,70,
+    105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,
+    111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,
+    104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,
+    105,110,100,101,114,114,5,0,0,0,41,3,114,193,0,0,
+    0,114,69,1,0,0,114,76,1,0,0,114,5,0,0,0,
+    114,75,1,0,0,114,8,0,0,0,218,9,112,97,116,104,
+    95,104,111,111,107,237,5,0,0,115,4,0,0,0,0,10,
+    14,6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,
+    97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,
+    0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,
+    0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,
+    83,0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,
+    114,40,123,33,114,125,41,41,2,114,62,0,0,0,114,44,
+    0,0,0,114,246,0,0,0,114,5,0,0,0,114,5,0,
+    0,0,114,8,0,0,0,114,39,1,0,0,255,5,0,0,
+    115,2,0,0,0,0,1,122,19,70,105,108,101,70,105,110,
+    100,101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,
+    15,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,
+    114,127,0,0,0,114,209,0,0,0,114,46,1,0,0,114,
+    143,0,0,0,114,206,0,0,0,114,137,0,0,0,114,58,
+    1,0,0,114,203,0,0,0,114,70,1,0,0,114,207,0,
+    0,0,114,77,1,0,0,114,39,1,0,0,114,5,0,0,
+    0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+    114,61,1,0,0,112,5,0,0,115,22,0,0,0,8,2,
+    4,7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,
+    2,1,10,17,114,61,1,0,0,99,4,0,0,0,0,0,
+    0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,
+    0,0,115,144,0,0,0,124,0,160,0,100,1,161,1,125,
+    4,124,0,160,0,100,2,161,1,125,5,124,4,115,66,124,
+    5,114,36,124,5,106,1,125,4,110,30,124,2,124,3,107,
+    2,114,56,116,2,124,1,124,2,131,2,125,4,110,10,116,
+    3,124,1,124,2,131,2,125,4,124,5,115,84,116,4,124,
+    1,124,2,124,4,100,3,141,3,125,5,122,36,124,5,124,
+    0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124,
+    0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,110,
+    18,4,0,116,5,121,138,1,0,1,0,1,0,89,0,110,
+    2,48,0,100,0,83,0,41,6,78,218,10,95,95,108,111,
+    97,100,101,114,95,95,218,8,95,95,115,112,101,99,95,95,
+    114,62,1,0,0,90,8,95,95,102,105,108,101,95,95,90,
+    10,95,95,99,97,99,104,101,100,95,95,41,6,218,3,103,
+    101,116,114,140,0,0,0,114,15,1,0,0,114,9,1,0,
+    0,114,190,0,0,0,218,9,69,120,99,101,112,116,105,111,
+    110,41,6,90,2,110,115,114,116,0,0,0,90,8,112,97,
+    116,104,110,97,109,101,90,9,99,112,97,116,104,110,97,109,
+    101,114,140,0,0,0,114,187,0,0,0,114,5,0,0,0,
+    114,5,0,0,0,114,8,0,0,0,218,14,95,102,105,120,
+    95,117,112,95,109,111,100,117,108,101,5,6,0,0,115,34,
+    0,0,0,0,2,10,1,10,1,4,1,4,1,8,1,8,
+    1,12,2,10,1,4,1,14,1,2,1,8,1,8,1,8,
+    1,12,1,12,2,114,82,1,0,0,99,0,0,0,0,0,
+    0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
+    0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0,
+    102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6,
+    102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,1,
+    122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116,
+    32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109,
+    111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10,
+    32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115,
+    32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114,
+    44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32,
+    32,41,7,114,252,0,0,0,114,163,0,0,0,218,18,101,
+    120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,
+    115,114,9,1,0,0,114,101,0,0,0,114,15,1,0,0,
+    114,88,0,0,0,41,3,90,10,101,120,116,101,110,115,105,
+    111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116,
+    101,99,111,100,101,114,5,0,0,0,114,5,0,0,0,114,
+    8,0,0,0,114,184,0,0,0,28,6,0,0,115,8,0,
+    0,0,0,5,12,1,8,1,8,1,114,184,0,0,0,99,
+    1,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,
+    9,0,0,0,67,0,0,0,115,132,1,0,0,124,0,97,
+    0,116,0,106,1,97,1,116,0,106,2,97,2,116,1,106,
+    3,116,4,25,0,125,1,100,1,100,2,103,1,102,2,100,
+    3,100,4,100,2,103,2,102,2,102,2,125,2,124,2,68,
+    0,93,108,92,2,125,3,125,4,116,5,100,5,100,6,132,
+    0,124,4,68,0,131,1,131,1,115,82,74,0,130,1,124,
+    4,100,7,25,0,125,5,124,3,116,1,106,3,118,0,114,
+    116,116,1,106,3,124,3,25,0,125,6,1,0,113,170,113,
+    52,122,20,116,0,160,6,124,3,161,1,125,6,87,0,1,
+    0,113,170,87,0,113,52,4,0,116,7,121,158,1,0,1,
+    0,1,0,89,0,113,52,89,0,113,52,48,0,113,52,116,
+    7,100,8,131,1,130,1,116,8,124,1,100,9,124,6,131,
+    3,1,0,116,8,124,1,100,10,124,5,131,3,1,0,116,
+    8,124,1,100,11,100,12,160,9,124,4,161,1,131,3,1,
+    0,116,8,124,1,100,13,100,14,100,15,132,0,124,4,68,
+    0,131,1,131,3,1,0,103,0,100,16,162,1,125,7,124,
+    3,100,3,107,2,144,1,114,6,124,7,160,10,100,17,161,
+    1,1,0,124,7,68,0,93,52,125,8,124,8,116,1,106,
+    3,118,1,144,1,114,38,116,0,160,6,124,8,161,1,125,
+    9,110,10,116,1,106,3,124,8,25,0,125,9,116,8,124,
+    1,124,8,124,9,131,3,1,0,144,1,113,10,116,8,124,
+    1,100,18,116,11,131,0,131,3,1,0,116,12,160,13,116,
+    2,160,14,161,0,161,1,1,0,124,3,100,3,107,2,144,
+    1,114,128,116,15,160,10,100,19,161,1,1,0,100,20,116,
+    12,118,0,144,1,114,128,100,21,116,16,95,17,100,22,83,
+    0,41,23,122,205,83,101,116,117,112,32,116,104,101,32,112,
+    97,116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,
+    101,114,115,32,102,111,114,32,105,109,112,111,114,116,108,105,
+    98,32,98,121,32,105,109,112,111,114,116,105,110,103,32,110,
+    101,101,100,101,100,10,32,32,32,32,98,117,105,108,116,45,
+    105,110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,
+    110,106,101,99,116,105,110,103,32,116,104,101,109,32,105,110,
+    116,111,32,116,104,101,32,103,108,111,98,97,108,32,110,97,
+    109,101,115,112,97,99,101,46,10,10,32,32,32,32,79,116,
+    104,101,114,32,99,111,109,112,111,110,101,110,116,115,32,97,
+    114,101,32,101,120,116,114,97,99,116,101,100,32,102,114,111,
+    109,32,116,104,101,32,99,111,114,101,32,98,111,111,116,115,
+    116,114,97,112,32,109,111,100,117,108,101,46,10,10,32,32,
+    32,32,90,5,112,111,115,105,120,250,1,47,90,2,110,116,
+    250,1,92,99,1,0,0,0,0,0,0,0,0,0,0,0,
+    2,0,0,0,3,0,0,0,115,0,0,0,115,26,0,0,
+    0,124,0,93,18,125,1,116,0,124,1,131,1,100,0,107,
+    2,86,0,1,0,113,2,100,1,83,0,41,2,114,39,0,
+    0,0,78,41,1,114,23,0,0,0,41,2,114,32,0,0,
+    0,114,94,0,0,0,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,114,19,1,0,0,57,6,0,0,114,63,
+    1,0,0,122,25,95,115,101,116,117,112,46,60,108,111,99,
+    97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,73,
+    0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114,
+    101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,
+    32,110,116,114,4,0,0,0,114,35,0,0,0,114,31,0,
+    0,0,114,40,0,0,0,114,58,0,0,0,99,1,0,0,
+    0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+    0,83,0,0,0,115,22,0,0,0,104,0,124,0,93,14,
+    125,1,100,0,124,1,155,0,157,2,146,2,113,4,83,0,
+    41,1,114,74,0,0,0,114,5,0,0,0,41,2,114,32,
+    0,0,0,218,1,115,114,5,0,0,0,114,5,0,0,0,
+    114,8,0,0,0,114,71,1,0,0,74,6,0,0,114,63,
+    1,0,0,122,25,95,115,101,116,117,112,46,60,108,111,99,
+    97,108,115,62,46,60,115,101,116,99,111,109,112,62,41,3,
+    114,64,0,0,0,114,75,0,0,0,114,160,0,0,0,114,
+    192,0,0,0,114,9,0,0,0,122,4,46,112,121,119,122,
+    6,95,100,46,112,121,100,84,78,41,18,114,134,0,0,0,
+    114,1,0,0,0,114,163,0,0,0,114,31,1,0,0,114,
+    125,0,0,0,218,3,97,108,108,90,18,95,98,117,105,108,
+    116,105,110,95,102,114,111,109,95,110,97,109,101,114,117,0,
+    0,0,114,129,0,0,0,114,36,0,0,0,114,186,0,0,
+    0,114,14,0,0,0,114,21,1,0,0,114,167,0,0,0,
+    114,83,1,0,0,114,101,0,0,0,114,191,0,0,0,114,
+    195,0,0,0,41,10,218,17,95,98,111,111,116,115,116,114,
+    97,112,95,109,111,100,117,108,101,90,11,115,101,108,102,95,
+    109,111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,
+    108,115,90,10,98,117,105,108,116,105,110,95,111,115,114,31,
+    0,0,0,114,35,0,0,0,90,9,111,115,95,109,111,100,
+    117,108,101,90,13,98,117,105,108,116,105,110,95,110,97,109,
+    101,115,90,12,98,117,105,108,116,105,110,95,110,97,109,101,
+    90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101,
+    114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,
+    6,95,115,101,116,117,112,39,6,0,0,115,70,0,0,0,
+    0,8,4,1,6,1,6,2,10,3,22,1,12,2,22,1,
+    8,1,10,1,10,1,6,2,2,1,10,1,10,1,12,1,
+    12,2,8,2,12,1,12,1,18,1,22,3,8,1,10,1,
+    10,1,8,1,12,1,12,2,10,1,16,3,14,1,14,1,
+    10,1,10,1,10,1,114,89,1,0,0,99,1,0,0,0,
     0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,
-    83,0,0,0,115,20,0,0,0,104,0,124,0,93,12,125,
-    1,124,1,160,0,161,0,146,2,113,4,83,0,114,3,0,
-    0,0,41,1,114,106,0,0,0,41,2,114,32,0,0,0,
-    90,2,102,110,114,3,0,0,0,114,3,0,0,0,114,6,
-    0,0,0,218,9,60,115,101,116,99,111,109,112,62,228,5,
-    0,0,115,4,0,0,0,6,0,2,0,122,41,70,105,108,
-    101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,
-    99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101,
-    116,99,111,109,112,62,78,41,18,114,44,0,0,0,114,2,
-    0,0,0,114,8,1,0,0,114,55,0,0,0,114,4,1,
-    0,0,218,15,80,101,114,109,105,115,115,105,111,110,69,114,
-    114,111,114,218,18,78,111,116,65,68,105,114,101,99,116,111,
-    114,121,69,114,114,111,114,114,8,0,0,0,114,9,0,0,
-    0,114,10,0,0,0,114,66,1,0,0,114,67,1,0,0,
-    114,101,0,0,0,114,62,0,0,0,114,106,0,0,0,218,
-    3,97,100,100,114,11,0,0,0,114,68,1,0,0,41,9,
-    114,119,0,0,0,114,44,0,0,0,114,9,1,0,0,90,
-    21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,
-    110,116,101,110,116,115,114,42,1,0,0,114,117,0,0,0,
-    114,30,1,0,0,114,18,1,0,0,90,8,110,101,119,95,
-    110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,6,
-    0,0,0,114,70,1,0,0,199,5,0,0,115,34,0,0,
-    0,0,2,6,1,2,1,22,1,20,3,10,3,12,1,12,
-    7,6,1,8,1,16,1,4,1,18,2,4,1,12,1,6,
-    1,12,1,122,22,70,105,108,101,70,105,110,100,101,114,46,
-    95,102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,
-    0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
-    7,0,0,0,115,18,0,0,0,135,0,135,1,102,2,100,
-    1,100,2,132,8,125,2,124,2,83,0,41,3,97,20,1,
-    0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,
-    32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,
-    32,99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,
-    111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,
-    10,32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,
-    105,108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,
-    115,116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,
-    32,115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,
-    114,115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,
-    32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,
-    110,32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,
-    32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,
-    97,116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,
-    101,32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,
-    32,97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,
-    112,111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,
-    32,32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,
-    32,32,32,32,32,32,99,1,0,0,0,0,0,0,0,0,
-    0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,115,
-    34,0,0,0,116,0,124,0,131,1,115,20,116,1,100,1,
-    124,0,100,2,141,2,130,1,136,0,124,0,102,1,136,1,
-    158,2,142,0,83,0,41,3,122,45,80,97,116,104,32,104,
-    111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,105,
-    98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,101,
-    70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,105,
-    114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,
-    112,112,111,114,116,101,100,114,48,0,0,0,41,2,114,56,
-    0,0,0,114,118,0,0,0,114,48,0,0,0,169,2,114,
-    194,0,0,0,114,69,1,0,0,114,3,0,0,0,114,6,
-    0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102,
-    111,114,95,70,105,108,101,70,105,110,100,101,114,240,5,0,
-    0,115,6,0,0,0,0,2,8,1,12,1,122,54,70,105,
-    108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111,
-    111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104,
-    95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105,
-    110,100,101,114,114,3,0,0,0,41,3,114,194,0,0,0,
-    114,69,1,0,0,114,76,1,0,0,114,3,0,0,0,114,
-    75,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95,
-    104,111,111,107,230,5,0,0,115,4,0,0,0,0,10,14,
-    6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97,
-    116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0,
-    0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
-    115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,
-    0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114,
-    40,123,33,114,125,41,41,2,114,62,0,0,0,114,44,0,
-    0,0,114,247,0,0,0,114,3,0,0,0,114,3,0,0,
-    0,114,6,0,0,0,114,40,1,0,0,248,5,0,0,115,
-    2,0,0,0,0,1,122,19,70,105,108,101,70,105,110,100,
-    101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,15,
-    114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114,
-    128,0,0,0,114,210,0,0,0,114,47,1,0,0,114,144,
-    0,0,0,114,207,0,0,0,114,138,0,0,0,114,59,1,
-    0,0,114,204,0,0,0,114,70,1,0,0,114,208,0,0,
-    0,114,77,1,0,0,114,40,1,0,0,114,3,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    62,1,0,0,105,5,0,0,115,22,0,0,0,8,2,4,
-    7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,2,
-    1,10,17,114,62,1,0,0,99,4,0,0,0,0,0,0,
-    0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,0,
-    0,115,146,0,0,0,124,0,160,0,100,1,161,1,125,4,
-    124,0,160,0,100,2,161,1,125,5,124,4,115,66,124,5,
-    114,36,124,5,106,1,125,4,110,30,124,2,124,3,107,2,
-    114,56,116,2,124,1,124,2,131,2,125,4,110,10,116,3,
-    124,1,124,2,131,2,125,4,124,5,115,84,116,4,124,1,
-    124,2,124,4,100,3,141,3,125,5,122,36,124,5,124,0,
-    100,2,60,0,124,4,124,0,100,1,60,0,124,2,124,0,
-    100,4,60,0,124,3,124,0,100,5,60,0,87,0,110,20,
-    4,0,116,5,107,10,114,140,1,0,1,0,1,0,89,0,
-    110,2,88,0,100,0,83,0,41,6,78,218,10,95,95,108,
-    111,97,100,101,114,95,95,218,8,95,95,115,112,101,99,95,
-    95,114,63,1,0,0,90,8,95,95,102,105,108,101,95,95,
-    90,10,95,95,99,97,99,104,101,100,95,95,41,6,218,3,
-    103,101,116,114,141,0,0,0,114,16,1,0,0,114,10,1,
-    0,0,114,191,0,0,0,218,9,69,120,99,101,112,116,105,
-    111,110,41,6,90,2,110,115,114,117,0,0,0,90,8,112,
-    97,116,104,110,97,109,101,90,9,99,112,97,116,104,110,97,
-    109,101,114,141,0,0,0,114,188,0,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,6,0,0,0,218,14,95,102,105,
-    120,95,117,112,95,109,111,100,117,108,101,254,5,0,0,115,
-    34,0,0,0,0,2,10,1,10,1,4,1,4,1,8,1,
-    8,1,12,2,10,1,4,1,14,1,2,1,8,1,8,1,
-    8,1,12,1,14,2,114,82,1,0,0,99,0,0,0,0,
-    0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
-    67,0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,
-    0,102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,
-    6,102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,
-    1,122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,
-    116,32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,
-    109,111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,
-    10,32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,
-    115,32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,
-    114,44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,
-    32,32,41,7,114,253,0,0,0,114,164,0,0,0,218,18,
-    101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,
-    101,115,114,10,1,0,0,114,102,0,0,0,114,16,1,0,
-    0,114,89,0,0,0,41,3,90,10,101,120,116,101,110,115,
-    105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,
-    116,101,99,111,100,101,114,3,0,0,0,114,3,0,0,0,
-    114,6,0,0,0,114,185,0,0,0,21,6,0,0,115,8,
-    0,0,0,0,5,12,1,8,1,8,1,114,185,0,0,0,
-    99,1,0,0,0,0,0,0,0,0,0,0,0,12,0,0,
-    0,9,0,0,0,67,0,0,0,115,178,1,0,0,124,0,
-    97,0,116,0,106,1,97,1,116,0,106,2,97,2,116,1,
-    106,3,116,4,25,0,125,1,100,1,68,0,93,48,125,2,
-    124,2,116,1,106,3,107,7,114,56,116,0,160,5,124,2,
-    161,1,125,3,110,10,116,1,106,3,124,2,25,0,125,3,
-    116,6,124,1,124,2,124,3,131,3,1,0,113,30,100,2,
-    100,3,103,1,102,2,100,4,100,5,100,3,103,2,102,2,
-    102,2,125,4,124,4,68,0,93,110,92,2,125,5,125,6,
-    116,7,100,6,100,7,132,0,124,6,68,0,131,1,131,1,
-    115,136,116,8,130,1,124,6,100,8,25,0,125,7,124,5,
-    116,1,106,3,107,6,114,170,116,1,106,3,124,5,25,0,
-    125,8,1,0,113,226,113,106,122,20,116,0,160,5,124,5,
-    161,1,125,8,87,0,1,0,113,226,87,0,113,106,4,0,
-    116,9,107,10,114,214,1,0,1,0,1,0,89,0,113,106,
-    89,0,113,106,88,0,113,106,116,9,100,9,131,1,130,1,
-    116,6,124,1,100,10,124,8,131,3,1,0,116,6,124,1,
-    100,11,124,7,131,3,1,0,116,6,124,1,100,12,100,13,
-    160,10,124,6,161,1,131,3,1,0,116,6,124,1,100,14,
-    100,15,100,16,132,0,124,6,68,0,131,1,131,3,1,0,
-    116,0,160,5,100,17,161,1,125,9,116,6,124,1,100,17,
-    124,9,131,3,1,0,116,0,160,5,100,18,161,1,125,10,
-    116,6,124,1,100,18,124,10,131,3,1,0,124,5,100,4,
-    107,2,144,1,114,110,116,0,160,5,100,19,161,1,125,11,
-    116,6,124,1,100,20,124,11,131,3,1,0,116,6,124,1,
-    100,21,116,11,131,0,131,3,1,0,116,12,160,13,116,2,
-    160,14,161,0,161,1,1,0,124,5,100,4,107,2,144,1,
-    114,174,116,15,160,16,100,22,161,1,1,0,100,23,116,12,
-    107,6,144,1,114,174,100,24,116,17,95,18,100,25,83,0,
-    41,26,122,205,83,101,116,117,112,32,116,104,101,32,112,97,
-    116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,101,
-    114,115,32,102,111,114,32,105,109,112,111,114,116,108,105,98,
-    32,98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,
-    101,100,101,100,10,32,32,32,32,98,117,105,108,116,45,105,
-    110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,
-    106,101,99,116,105,110,103,32,116,104,101,109,32,105,110,116,
-    111,32,116,104,101,32,103,108,111,98,97,108,32,110,97,109,
-    101,115,112,97,99,101,46,10,10,32,32,32,32,79,116,104,
-    101,114,32,99,111,109,112,111,110,101,110,116,115,32,97,114,
-    101,32,101,120,116,114,97,99,116,101,100,32,102,114,111,109,
-    32,116,104,101,32,99,111,114,101,32,98,111,111,116,115,116,
-    114,97,112,32,109,111,100,117,108,101,46,10,10,32,32,32,
-    32,41,4,114,64,0,0,0,114,75,0,0,0,218,8,98,
-    117,105,108,116,105,110,115,114,161,0,0,0,90,5,112,111,
-    115,105,120,250,1,47,90,2,110,116,250,1,92,99,1,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
-    0,0,115,0,0,0,115,26,0,0,0,124,0,93,18,125,
-    1,116,0,124,1,131,1,100,0,107,2,86,0,1,0,113,
-    2,100,1,83,0,41,2,114,39,0,0,0,78,41,1,114,
-    22,0,0,0,41,2,114,32,0,0,0,114,95,0,0,0,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
-    20,1,0,0,57,6,0,0,115,4,0,0,0,4,0,2,
-    0,122,25,95,115,101,116,117,112,46,60,108,111,99,97,108,
-    115,62,46,60,103,101,110,101,120,112,114,62,114,73,0,0,
-    0,122,30,105,109,112,111,114,116,108,105,98,32,114,101,113,
-    117,105,114,101,115,32,112,111,115,105,120,32,111,114,32,110,
-    116,114,2,0,0,0,114,35,0,0,0,114,31,0,0,0,
-    114,40,0,0,0,114,58,0,0,0,99,1,0,0,0,0,
-    0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,
-    0,0,0,115,22,0,0,0,104,0,124,0,93,14,125,1,
-    100,0,124,1,155,0,157,2,146,2,113,4,83,0,41,1,
-    114,74,0,0,0,114,3,0,0,0,41,2,114,32,0,0,
-    0,218,1,115,114,3,0,0,0,114,3,0,0,0,114,6,
-    0,0,0,114,71,1,0,0,73,6,0,0,115,4,0,0,
-    0,6,0,2,0,122,25,95,115,101,116,117,112,46,60,108,
-    111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62,
-    90,7,95,116,104,114,101,97,100,90,8,95,119,101,97,107,
-    114,101,102,90,6,119,105,110,114,101,103,114,193,0,0,0,
-    114,7,0,0,0,122,4,46,112,121,119,122,6,95,100,46,
-    112,121,100,84,78,41,19,114,135,0,0,0,114,8,0,0,
-    0,114,164,0,0,0,114,32,1,0,0,114,126,0,0,0,
-    90,18,95,98,117,105,108,116,105,110,95,102,114,111,109,95,
-    110,97,109,101,114,130,0,0,0,218,3,97,108,108,114,23,
-    0,0,0,114,118,0,0,0,114,36,0,0,0,114,13,0,
-    0,0,114,22,1,0,0,114,168,0,0,0,114,83,1,0,
-    0,114,102,0,0,0,114,187,0,0,0,114,192,0,0,0,
-    114,196,0,0,0,41,12,218,17,95,98,111,111,116,115,116,
-    114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,102,
-    95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110,
-    95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109,
-    111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108,
-    115,90,10,98,117,105,108,116,105,110,95,111,115,114,31,0,
-    0,0,114,35,0,0,0,90,9,111,115,95,109,111,100,117,
-    108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108,
-    101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108,
-    101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101,
-    114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
-    6,95,115,101,116,117,112,32,6,0,0,115,78,0,0,0,
-    0,8,4,1,6,1,6,3,10,1,8,1,10,1,12,2,
-    10,1,14,3,22,1,12,2,22,1,8,1,10,1,10,1,
-    6,2,2,1,10,1,10,1,14,1,12,2,8,1,12,1,
-    12,1,18,1,22,3,10,1,12,3,10,1,12,3,10,1,
-    10,1,12,3,14,1,14,1,10,1,10,1,10,1,114,90,
-    1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0,
-    0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116,
-    2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161,
-    1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100,
-    1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116,
-    104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109,
-    112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46,
-    78,41,10,114,90,1,0,0,114,185,0,0,0,114,8,0,
-    0,0,114,52,1,0,0,114,168,0,0,0,114,62,1,0,
-    0,114,77,1,0,0,218,9,109,101,116,97,95,112,97,116,
-    104,114,187,0,0,0,114,46,1,0,0,41,2,114,89,1,
-    0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111,
-    97,100,101,114,115,114,3,0,0,0,114,3,0,0,0,114,
-    6,0,0,0,218,8,95,105,110,115,116,97,108,108,97,6,
-    0,0,115,8,0,0,0,0,2,8,1,6,1,20,1,114,
-    92,1,0,0,41,1,114,60,0,0,0,41,1,78,41,3,
-    78,78,78,41,2,114,73,0,0,0,114,73,0,0,0,41,
-    1,84,41,1,78,41,1,78,41,63,114,128,0,0,0,114,
-    12,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69,
-    78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,
-    83,95,66,89,84,69,83,95,75,69,89,114,11,0,0,0,
-    114,13,0,0,0,114,20,0,0,0,114,27,0,0,0,114,
-    29,0,0,0,114,38,0,0,0,114,47,0,0,0,114,49,
-    0,0,0,114,53,0,0,0,114,54,0,0,0,114,56,0,
-    0,0,114,59,0,0,0,114,69,0,0,0,218,4,116,121,
-    112,101,218,8,95,95,99,111,100,101,95,95,114,163,0,0,
-    0,114,18,0,0,0,114,149,0,0,0,114,17,0,0,0,
-    114,24,0,0,0,114,237,0,0,0,114,92,0,0,0,114,
-    88,0,0,0,114,102,0,0,0,114,89,0,0,0,90,23,
-    68,69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,
-    85,70,70,73,88,69,83,90,27,79,80,84,73,77,73,90,
-    69,68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,
-    73,88,69,83,114,98,0,0,0,114,103,0,0,0,114,109,
-    0,0,0,114,113,0,0,0,114,115,0,0,0,114,137,0,
-    0,0,114,144,0,0,0,114,153,0,0,0,114,157,0,0,
-    0,114,159,0,0,0,114,166,0,0,0,114,171,0,0,0,
-    114,172,0,0,0,114,177,0,0,0,218,6,111,98,106,101,
-    99,116,114,186,0,0,0,114,191,0,0,0,114,192,0,0,
-    0,114,209,0,0,0,114,222,0,0,0,114,240,0,0,0,
-    114,10,1,0,0,114,16,1,0,0,114,22,1,0,0,114,
-    253,0,0,0,114,23,1,0,0,114,44,1,0,0,114,46,
-    1,0,0,114,62,1,0,0,114,82,1,0,0,114,185,0,
-    0,0,114,90,1,0,0,114,92,1,0,0,114,3,0,0,
-    0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
-    218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,126,
-    0,0,0,4,22,4,1,4,1,2,1,2,255,4,4,8,
-    17,8,5,8,5,8,6,8,6,8,12,8,10,8,9,8,
-    5,8,7,8,9,10,22,10,127,0,13,16,1,12,2,4,
-    1,4,2,6,2,6,2,8,2,16,71,8,40,8,19,8,
-    12,8,12,8,28,8,17,8,33,8,28,8,24,10,13,10,
-    10,10,11,8,14,6,3,4,1,2,255,12,68,14,64,14,
-    29,16,127,0,17,14,72,18,45,18,26,4,3,18,53,14,
-    63,14,42,14,127,0,20,14,127,0,22,10,23,8,11,8,
-    65,
+    67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1,
+    0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106,
+    6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160,
+    8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73,
+    110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45,
+    98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109,
+    112,111,110,101,110,116,115,46,78,41,10,114,89,1,0,0,
+    114,184,0,0,0,114,1,0,0,0,114,51,1,0,0,114,
+    167,0,0,0,114,61,1,0,0,114,77,1,0,0,218,9,
+    109,101,116,97,95,112,97,116,104,114,186,0,0,0,114,45,
+    1,0,0,41,2,114,88,1,0,0,90,17,115,117,112,112,
+    111,114,116,101,100,95,108,111,97,100,101,114,115,114,5,0,
+    0,0,114,5,0,0,0,114,8,0,0,0,218,8,95,105,
+    110,115,116,97,108,108,96,6,0,0,115,8,0,0,0,0,
+    2,8,1,6,1,20,1,114,91,1,0,0,41,1,114,60,
+    0,0,0,41,1,78,41,3,78,78,78,41,2,114,73,0,
+    0,0,114,73,0,0,0,41,1,84,41,1,78,41,1,78,
+    41,63,114,127,0,0,0,114,13,0,0,0,90,37,95,67,
+    65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,
+    80,76,65,84,70,79,82,77,83,95,66,89,84,69,83,95,
+    75,69,89,114,12,0,0,0,114,14,0,0,0,114,21,0,
+    0,0,114,27,0,0,0,114,29,0,0,0,114,38,0,0,
+    0,114,47,0,0,0,114,49,0,0,0,114,53,0,0,0,
+    114,54,0,0,0,114,56,0,0,0,114,59,0,0,0,114,
+    69,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,
+    100,101,95,95,114,162,0,0,0,114,19,0,0,0,114,148,
+    0,0,0,114,18,0,0,0,114,24,0,0,0,114,236,0,
+    0,0,114,91,0,0,0,114,87,0,0,0,114,101,0,0,
+    0,114,88,0,0,0,90,23,68,69,66,85,71,95,66,89,
+    84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,
+    27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,
+    79,68,69,95,83,85,70,70,73,88,69,83,114,97,0,0,
+    0,114,102,0,0,0,114,108,0,0,0,114,112,0,0,0,
+    114,114,0,0,0,114,136,0,0,0,114,143,0,0,0,114,
+    152,0,0,0,114,156,0,0,0,114,158,0,0,0,114,165,
+    0,0,0,114,170,0,0,0,114,171,0,0,0,114,176,0,
+    0,0,218,6,111,98,106,101,99,116,114,185,0,0,0,114,
+    190,0,0,0,114,191,0,0,0,114,208,0,0,0,114,221,
+    0,0,0,114,239,0,0,0,114,9,1,0,0,114,15,1,
+    0,0,114,21,1,0,0,114,252,0,0,0,114,22,1,0,
+    0,114,43,1,0,0,114,45,1,0,0,114,61,1,0,0,
+    114,82,1,0,0,114,184,0,0,0,114,89,1,0,0,114,
+    91,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5,
+    0,0,0,114,8,0,0,0,218,8,60,109,111,100,117,108,
+    101,62,1,0,0,0,115,126,0,0,0,4,22,4,1,4,
+    1,2,1,2,255,4,4,8,17,8,5,8,5,8,6,8,
+    6,8,12,8,10,8,9,8,5,8,7,8,9,10,22,10,
+    127,0,20,16,1,12,2,4,1,4,2,6,2,6,2,8,
+    2,16,71,8,40,8,19,8,12,8,12,8,28,8,17,8,
+    33,8,28,8,24,10,13,10,10,10,11,8,14,6,3,4,
+    1,2,255,12,68,14,64,14,29,16,127,0,17,14,72,18,
+    45,18,26,4,3,18,53,14,63,14,42,14,127,0,20,14,
+    127,0,22,10,23,8,11,8,57,
 };
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index f013b41..373b136 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -117,965 +117,963 @@
     111,102,32,116,104,101,10,32,32,32,32,122,105,112,102,105,
     108,101,32,116,97,114,103,101,116,101,100,46,10,32,32,32,
     32,99,2,0,0,0,0,0,0,0,0,0,0,0,8,0,
-    0,0,9,0,0,0,67,0,0,0,115,36,1,0,0,116,
+    0,0,9,0,0,0,67,0,0,0,115,32,1,0,0,116,
     0,124,1,116,1,131,2,115,28,100,1,100,0,108,2,125,
     2,124,2,160,3,124,1,161,1,125,1,124,1,115,44,116,
     4,100,2,124,1,100,3,141,2,130,1,116,5,114,60,124,
     1,160,6,116,5,116,7,161,2,125,1,103,0,125,3,122,
-    14,116,8,160,9,124,1,161,1,125,4,87,0,110,72,4,
-    0,116,10,116,11,102,2,107,10,114,150,1,0,1,0,1,
-    0,116,8,160,12,124,1,161,1,92,2,125,5,125,6,124,
-    5,124,1,107,2,114,132,116,4,100,4,124,1,100,3,141,
-    2,130,1,124,5,125,1,124,3,160,13,124,6,161,1,1,
-    0,89,0,113,64,88,0,124,4,106,14,100,5,64,0,100,
-    6,107,3,114,182,116,4,100,4,124,1,100,3,141,2,130,
-    1,113,182,113,64,122,12,116,15,124,1,25,0,125,7,87,
-    0,110,36,4,0,116,16,107,10,114,230,1,0,1,0,1,
-    0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60,
-    0,89,0,110,2,88,0,124,7,124,0,95,18,124,1,124,
-    0,95,19,116,8,106,20,124,3,100,0,100,0,100,7,133,
-    3,25,0,142,0,124,0,95,21,124,0,106,21,144,1,114,
-    32,124,0,4,0,106,21,116,7,55,0,2,0,95,21,100,
-    0,83,0,41,8,78,114,0,0,0,0,122,21,97,114,99,
-    104,105,118,101,32,112,97,116,104,32,105,115,32,101,109,112,
-    116,121,169,1,218,4,112,97,116,104,122,14,110,111,116,32,
-    97,32,90,105,112,32,102,105,108,101,105,0,240,0,0,105,
-    0,128,0,0,233,255,255,255,255,41,22,218,10,105,115,105,
-    110,115,116,97,110,99,101,218,3,115,116,114,218,2,111,115,
-    90,8,102,115,100,101,99,111,100,101,114,3,0,0,0,218,
-    12,97,108,116,95,112,97,116,104,95,115,101,112,218,7,114,
-    101,112,108,97,99,101,218,8,112,97,116,104,95,115,101,112,
-    218,19,95,98,111,111,116,115,116,114,97,112,95,101,120,116,
-    101,114,110,97,108,90,10,95,112,97,116,104,95,115,116,97,
-    116,218,7,79,83,69,114,114,111,114,218,10,86,97,108,117,
-    101,69,114,114,111,114,90,11,95,112,97,116,104,95,115,112,
-    108,105,116,218,6,97,112,112,101,110,100,90,7,115,116,95,
-    109,111,100,101,218,20,95,122,105,112,95,100,105,114,101,99,
-    116,111,114,121,95,99,97,99,104,101,218,8,75,101,121,69,
-    114,114,111,114,218,15,95,114,101,97,100,95,100,105,114,101,
-    99,116,111,114,121,218,6,95,102,105,108,101,115,218,7,97,
-    114,99,104,105,118,101,218,10,95,112,97,116,104,95,106,111,
-    105,110,218,6,112,114,101,102,105,120,41,8,218,4,115,101,
-    108,102,114,13,0,0,0,114,17,0,0,0,114,31,0,0,
-    0,90,2,115,116,90,7,100,105,114,110,97,109,101,90,8,
-    98,97,115,101,110,97,109,101,218,5,102,105,108,101,115,114,
-    9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,
-    95,95,105,110,105,116,95,95,63,0,0,0,115,58,0,0,
-    0,0,1,10,1,8,1,10,1,4,1,12,1,4,1,12,
-    2,4,2,2,1,14,1,18,3,14,1,8,1,12,1,4,
-    1,16,3,14,2,12,1,4,2,2,1,12,1,14,1,8,
-    1,14,1,6,1,6,2,22,1,8,1,122,20,122,105,112,
-    105,109,112,111,114,116,101,114,46,95,95,105,110,105,116,95,
-    95,78,99,3,0,0,0,0,0,0,0,0,0,0,0,5,
-    0,0,0,4,0,0,0,67,0,0,0,115,78,0,0,0,
-    116,0,124,0,124,1,131,2,125,3,124,3,100,1,107,9,
-    114,26,124,0,103,0,102,2,83,0,116,1,124,0,124,1,
-    131,2,125,4,116,2,124,0,124,4,131,2,114,70,100,1,
-    124,0,106,3,155,0,116,4,155,0,124,4,155,0,157,3,
-    103,1,102,2,83,0,100,1,103,0,102,2,83,0,41,2,
-    97,239,1,0,0,102,105,110,100,95,108,111,97,100,101,114,
-    40,102,117,108,108,110,97,109,101,44,32,112,97,116,104,61,
-    78,111,110,101,41,32,45,62,32,115,101,108,102,44,32,115,
-    116,114,32,111,114,32,78,111,110,101,46,10,10,32,32,32,
-    32,32,32,32,32,83,101,97,114,99,104,32,102,111,114,32,
-    97,32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,
-    101,100,32,98,121,32,39,102,117,108,108,110,97,109,101,39,
-    46,32,39,102,117,108,108,110,97,109,101,39,32,109,117,115,
-    116,32,98,101,32,116,104,101,10,32,32,32,32,32,32,32,
-    32,102,117,108,108,121,32,113,117,97,108,105,102,105,101,100,
-    32,40,100,111,116,116,101,100,41,32,109,111,100,117,108,101,
-    32,110,97,109,101,46,32,73,116,32,114,101,116,117,114,110,
-    115,32,116,104,101,32,122,105,112,105,109,112,111,114,116,101,
-    114,10,32,32,32,32,32,32,32,32,105,110,115,116,97,110,
-    99,101,32,105,116,115,101,108,102,32,105,102,32,116,104,101,
-    32,109,111,100,117,108,101,32,119,97,115,32,102,111,117,110,
-    100,44,32,97,32,115,116,114,105,110,103,32,99,111,110,116,
-    97,105,110,105,110,103,32,116,104,101,10,32,32,32,32,32,
-    32,32,32,102,117,108,108,32,112,97,116,104,32,110,97,109,
-    101,32,105,102,32,105,116,39,115,32,112,111,115,115,105,98,
-    108,121,32,97,32,112,111,114,116,105,111,110,32,111,102,32,
-    97,32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,
-    97,103,101,44,10,32,32,32,32,32,32,32,32,111,114,32,
-    78,111,110,101,32,111,116,104,101,114,119,105,115,101,46,32,
-    84,104,101,32,111,112,116,105,111,110,97,108,32,39,112,97,
-    116,104,39,32,97,114,103,117,109,101,110,116,32,105,115,32,
-    105,103,110,111,114,101,100,32,45,45,32,105,116,39,115,10,
-    32,32,32,32,32,32,32,32,116,104,101,114,101,32,102,111,
-    114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,
-    119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,101,
-    114,32,112,114,111,116,111,99,111,108,46,10,32,32,32,32,
-    32,32,32,32,78,41,5,218,16,95,103,101,116,95,109,111,
-    100,117,108,101,95,105,110,102,111,218,16,95,103,101,116,95,
-    109,111,100,117,108,101,95,112,97,116,104,218,7,95,105,115,
-    95,100,105,114,114,29,0,0,0,114,20,0,0,0,41,5,
-    114,32,0,0,0,218,8,102,117,108,108,110,97,109,101,114,
-    13,0,0,0,218,2,109,105,218,7,109,111,100,112,97,116,
-    104,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
-    218,11,102,105,110,100,95,108,111,97,100,101,114,109,0,0,
-    0,115,14,0,0,0,0,10,10,1,8,2,8,7,10,1,
-    10,4,24,2,122,23,122,105,112,105,109,112,111,114,116,101,
-    114,46,102,105,110,100,95,108,111,97,100,101,114,99,3,0,
-    0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,
-    0,0,67,0,0,0,115,16,0,0,0,124,0,160,0,124,
-    1,124,2,161,2,100,1,25,0,83,0,41,2,97,139,1,
-    0,0,102,105,110,100,95,109,111,100,117,108,101,40,102,117,
-    108,108,110,97,109,101,44,32,112,97,116,104,61,78,111,110,
-    101,41,32,45,62,32,115,101,108,102,32,111,114,32,78,111,
-    110,101,46,10,10,32,32,32,32,32,32,32,32,83,101,97,
-    114,99,104,32,102,111,114,32,97,32,109,111,100,117,108,101,
-    32,115,112,101,99,105,102,105,101,100,32,98,121,32,39,102,
-    117,108,108,110,97,109,101,39,46,32,39,102,117,108,108,110,
-    97,109,101,39,32,109,117,115,116,32,98,101,32,116,104,101,
-    10,32,32,32,32,32,32,32,32,102,117,108,108,121,32,113,
-    117,97,108,105,102,105,101,100,32,40,100,111,116,116,101,100,
-    41,32,109,111,100,117,108,101,32,110,97,109,101,46,32,73,
-    116,32,114,101,116,117,114,110,115,32,116,104,101,32,122,105,
-    112,105,109,112,111,114,116,101,114,10,32,32,32,32,32,32,
-    32,32,105,110,115,116,97,110,99,101,32,105,116,115,101,108,
-    102,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,
-    119,97,115,32,102,111,117,110,100,44,32,111,114,32,78,111,
-    110,101,32,105,102,32,105,116,32,119,97,115,110,39,116,46,
-    10,32,32,32,32,32,32,32,32,84,104,101,32,111,112,116,
-    105,111,110,97,108,32,39,112,97,116,104,39,32,97,114,103,
-    117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100,
-    32,45,45,32,105,116,39,115,32,116,104,101,114,101,32,102,
-    111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,
-    10,32,32,32,32,32,32,32,32,119,105,116,104,32,116,104,
-    101,32,105,109,112,111,114,116,101,114,32,112,114,111,116,111,
-    99,111,108,46,10,32,32,32,32,32,32,32,32,114,0,0,
-    0,0,41,1,114,41,0,0,0,41,3,114,32,0,0,0,
-    114,38,0,0,0,114,13,0,0,0,114,9,0,0,0,114,
-    9,0,0,0,114,10,0,0,0,218,11,102,105,110,100,95,
-    109,111,100,117,108,101,141,0,0,0,115,2,0,0,0,0,
-    9,122,23,122,105,112,105,109,112,111,114,116,101,114,46,102,
-    105,110,100,95,109,111,100,117,108,101,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67,
-    0,0,0,115,20,0,0,0,116,0,124,0,124,1,131,2,
-    92,3,125,2,125,3,125,4,124,2,83,0,41,1,122,163,
-    103,101,116,95,99,111,100,101,40,102,117,108,108,110,97,109,
-    101,41,32,45,62,32,99,111,100,101,32,111,98,106,101,99,
-    116,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,
-    114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,
-    99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105,
-    102,105,101,100,32,109,111,100,117,108,101,46,32,82,97,105,
-    115,101,32,90,105,112,73,109,112,111,114,116,69,114,114,111,
-    114,10,32,32,32,32,32,32,32,32,105,102,32,116,104,101,
-    32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,116,
-    32,98,101,32,102,111,117,110,100,46,10,32,32,32,32,32,
-    32,32,32,169,1,218,16,95,103,101,116,95,109,111,100,117,
-    108,101,95,99,111,100,101,169,5,114,32,0,0,0,114,38,
-    0,0,0,218,4,99,111,100,101,218,9,105,115,112,97,99,
-    107,97,103,101,114,40,0,0,0,114,9,0,0,0,114,9,
-    0,0,0,114,10,0,0,0,218,8,103,101,116,95,99,111,
-    100,101,153,0,0,0,115,4,0,0,0,0,6,16,1,122,
-    20,122,105,112,105,109,112,111,114,116,101,114,46,103,101,116,
-    95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,
-    0,0,4,0,0,0,8,0,0,0,67,0,0,0,115,118,
-    0,0,0,116,0,114,16,124,1,160,1,116,0,116,2,161,
-    2,125,1,124,1,125,2,124,1,160,3,124,0,106,4,116,
-    2,23,0,161,1,114,58,124,1,116,5,124,0,106,4,116,
-    2,23,0,131,1,100,1,133,2,25,0,125,2,122,14,124,
-    0,106,6,124,2,25,0,125,3,87,0,110,32,4,0,116,
-    7,107,10,114,104,1,0,1,0,1,0,116,8,100,2,100,
-    3,124,2,131,3,130,1,89,0,110,2,88,0,116,9,124,
-    0,106,4,124,3,131,2,83,0,41,4,122,154,103,101,116,
-    95,100,97,116,97,40,112,97,116,104,110,97,109,101,41,32,
-    45,62,32,115,116,114,105,110,103,32,119,105,116,104,32,102,
-    105,108,101,32,100,97,116,97,46,10,10,32,32,32,32,32,
-    32,32,32,82,101,116,117,114,110,32,116,104,101,32,100,97,
-    116,97,32,97,115,115,111,99,105,97,116,101,100,32,119,105,
-    116,104,32,39,112,97,116,104,110,97,109,101,39,46,32,82,
-    97,105,115,101,32,79,83,69,114,114,111,114,32,105,102,10,
-    32,32,32,32,32,32,32,32,116,104,101,32,102,105,108,101,
-    32,119,97,115,110,39,116,32,102,111,117,110,100,46,10,32,
-    32,32,32,32,32,32,32,78,114,0,0,0,0,218,0,41,
-    10,114,18,0,0,0,114,19,0,0,0,114,20,0,0,0,
-    218,10,115,116,97,114,116,115,119,105,116,104,114,29,0,0,
-    0,218,3,108,101,110,114,28,0,0,0,114,26,0,0,0,
-    114,22,0,0,0,218,9,95,103,101,116,95,100,97,116,97,
-    41,4,114,32,0,0,0,218,8,112,97,116,104,110,97,109,
-    101,90,3,107,101,121,218,9,116,111,99,95,101,110,116,114,
-    121,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
-    218,8,103,101,116,95,100,97,116,97,163,0,0,0,115,20,
-    0,0,0,0,6,4,1,12,2,4,1,16,1,22,2,2,
-    1,14,1,14,1,18,1,122,20,122,105,112,105,109,112,111,
-    114,116,101,114,46,103,101,116,95,100,97,116,97,99,2,0,
-    0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,
-    0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,124,
-    1,131,2,92,3,125,2,125,3,125,4,124,4,83,0,41,
-    1,122,106,103,101,116,95,102,105,108,101,110,97,109,101,40,
-    102,117,108,108,110,97,109,101,41,32,45,62,32,102,105,108,
-    101,110,97,109,101,32,115,116,114,105,110,103,46,10,10,32,
-    32,32,32,32,32,32,32,82,101,116,117,114,110,32,116,104,
-    101,32,102,105,108,101,110,97,109,101,32,102,111,114,32,116,
-    104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,
-    117,108,101,46,10,32,32,32,32,32,32,32,32,114,43,0,
-    0,0,114,45,0,0,0,114,9,0,0,0,114,9,0,0,
-    0,114,10,0,0,0,218,12,103,101,116,95,102,105,108,101,
-    110,97,109,101,184,0,0,0,115,4,0,0,0,0,7,16,
-    1,122,24,122,105,112,105,109,112,111,114,116,101,114,46,103,
-    101,116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,
-    0,0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,
-    67,0,0,0,115,128,0,0,0,116,0,124,0,124,1,131,
-    2,125,2,124,2,100,1,107,8,114,36,116,1,100,2,124,
-    1,155,2,157,2,124,1,100,3,141,2,130,1,116,2,124,
-    0,124,1,131,2,125,3,124,2,114,64,116,3,160,4,124,
-    3,100,4,161,2,125,4,110,10,124,3,155,0,100,5,157,
-    2,125,4,122,14,124,0,106,5,124,4,25,0,125,5,87,
-    0,110,22,4,0,116,6,107,10,114,110,1,0,1,0,1,
-    0,89,0,100,1,83,0,88,0,116,7,124,0,106,8,124,
-    5,131,2,160,9,161,0,83,0,41,6,122,253,103,101,116,
-    95,115,111,117,114,99,101,40,102,117,108,108,110,97,109,101,
-    41,32,45,62,32,115,111,117,114,99,101,32,115,116,114,105,
-    110,103,46,10,10,32,32,32,32,32,32,32,32,82,101,116,
-    117,114,110,32,116,104,101,32,115,111,117,114,99,101,32,99,
-    111,100,101,32,102,111,114,32,116,104,101,32,115,112,101,99,
-    105,102,105,101,100,32,109,111,100,117,108,101,46,32,82,97,
-    105,115,101,32,90,105,112,73,109,112,111,114,116,69,114,114,
-    111,114,10,32,32,32,32,32,32,32,32,105,102,32,116,104,
-    101,32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,
-    116,32,98,101,32,102,111,117,110,100,44,32,114,101,116,117,
-    114,110,32,78,111,110,101,32,105,102,32,116,104,101,32,97,
-    114,99,104,105,118,101,32,100,111,101,115,10,32,32,32,32,
-    32,32,32,32,99,111,110,116,97,105,110,32,116,104,101,32,
-    109,111,100,117,108,101,44,32,98,117,116,32,104,97,115,32,
-    110,111,32,115,111,117,114,99,101,32,102,111,114,32,105,116,
-    46,10,32,32,32,32,32,32,32,32,78,250,18,99,97,110,
-    39,116,32,102,105,110,100,32,109,111,100,117,108,101,32,169,
-    1,218,4,110,97,109,101,250,11,95,95,105,110,105,116,95,
-    95,46,112,121,250,3,46,112,121,41,10,114,35,0,0,0,
-    114,3,0,0,0,114,36,0,0,0,114,21,0,0,0,114,
-    30,0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,
-    0,0,0,114,29,0,0,0,218,6,100,101,99,111,100,101,
-    41,6,114,32,0,0,0,114,38,0,0,0,114,39,0,0,
-    0,114,13,0,0,0,218,8,102,117,108,108,112,97,116,104,
-    114,54,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
-    10,0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,
-    195,0,0,0,115,24,0,0,0,0,7,10,1,8,1,18,
-    2,10,1,4,1,14,2,10,2,2,1,14,1,14,2,8,
-    1,122,22,122,105,112,105,109,112,111,114,116,101,114,46,103,
-    101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,
+    14,116,8,160,9,124,1,161,1,125,4,87,0,110,70,4,
+    0,116,10,116,11,102,2,121,148,1,0,1,0,1,0,116,
+    8,160,12,124,1,161,1,92,2,125,5,125,6,124,5,124,
+    1,107,2,114,130,116,4,100,4,124,1,100,3,141,2,130,
+    1,124,5,125,1,124,3,160,13,124,6,161,1,1,0,89,
+    0,113,64,48,0,124,4,106,14,100,5,64,0,100,6,107,
+    3,114,180,116,4,100,4,124,1,100,3,141,2,130,1,113,
+    180,113,64,122,12,116,15,124,1,25,0,125,7,87,0,110,
+    34,4,0,116,16,121,226,1,0,1,0,1,0,116,17,124,
+    1,131,1,125,7,124,7,116,15,124,1,60,0,89,0,110,
+    2,48,0,124,7,124,0,95,18,124,1,124,0,95,19,116,
+    8,106,20,124,3,100,0,100,0,100,7,133,3,25,0,142,
+    0,124,0,95,21,124,0,106,21,144,1,114,28,124,0,4,
+    0,106,21,116,7,55,0,2,0,95,21,100,0,83,0,41,
+    8,78,114,0,0,0,0,122,21,97,114,99,104,105,118,101,
+    32,112,97,116,104,32,105,115,32,101,109,112,116,121,169,1,
+    218,4,112,97,116,104,122,14,110,111,116,32,97,32,90,105,
+    112,32,102,105,108,101,105,0,240,0,0,105,0,128,0,0,
+    233,255,255,255,255,41,22,218,10,105,115,105,110,115,116,97,
+    110,99,101,218,3,115,116,114,218,2,111,115,90,8,102,115,
+    100,101,99,111,100,101,114,3,0,0,0,218,12,97,108,116,
+    95,112,97,116,104,95,115,101,112,218,7,114,101,112,108,97,
+    99,101,218,8,112,97,116,104,95,115,101,112,218,19,95,98,
+    111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,
+    108,90,10,95,112,97,116,104,95,115,116,97,116,218,7,79,
+    83,69,114,114,111,114,218,10,86,97,108,117,101,69,114,114,
+    111,114,90,11,95,112,97,116,104,95,115,112,108,105,116,218,
+    6,97,112,112,101,110,100,90,7,115,116,95,109,111,100,101,
+    218,20,95,122,105,112,95,100,105,114,101,99,116,111,114,121,
+    95,99,97,99,104,101,218,8,75,101,121,69,114,114,111,114,
+    218,15,95,114,101,97,100,95,100,105,114,101,99,116,111,114,
+    121,218,6,95,102,105,108,101,115,218,7,97,114,99,104,105,
+    118,101,218,10,95,112,97,116,104,95,106,111,105,110,218,6,
+    112,114,101,102,105,120,41,8,218,4,115,101,108,102,114,13,
+    0,0,0,114,17,0,0,0,114,31,0,0,0,90,2,115,
+    116,90,7,100,105,114,110,97,109,101,90,8,98,97,115,101,
+    110,97,109,101,218,5,102,105,108,101,115,114,9,0,0,0,
+    114,9,0,0,0,114,10,0,0,0,218,8,95,95,105,110,
+    105,116,95,95,63,0,0,0,115,58,0,0,0,0,1,10,
+    1,8,1,10,1,4,1,12,1,4,1,12,2,4,2,2,
+    1,14,1,16,3,14,1,8,1,12,1,4,1,16,3,14,
+    2,12,1,4,2,2,1,12,1,12,1,8,1,14,1,6,
+    1,6,2,22,1,8,1,122,20,122,105,112,105,109,112,111,
+    114,116,101,114,46,95,95,105,110,105,116,95,95,78,99,3,
+    0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,
+    0,0,0,67,0,0,0,115,78,0,0,0,116,0,124,0,
+    124,1,131,2,125,3,124,3,100,1,117,1,114,26,124,0,
+    103,0,102,2,83,0,116,1,124,0,124,1,131,2,125,4,
+    116,2,124,0,124,4,131,2,114,70,100,1,124,0,106,3,
+    155,0,116,4,155,0,124,4,155,0,157,3,103,1,102,2,
+    83,0,100,1,103,0,102,2,83,0,41,2,97,239,1,0,
+    0,102,105,110,100,95,108,111,97,100,101,114,40,102,117,108,
+    108,110,97,109,101,44,32,112,97,116,104,61,78,111,110,101,
+    41,32,45,62,32,115,101,108,102,44,32,115,116,114,32,111,
+    114,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32,
+    32,83,101,97,114,99,104,32,102,111,114,32,97,32,109,111,
+    100,117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,
+    121,32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,
+    117,108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,
+    32,116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,
+    108,121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,
+    116,116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,
+    101,46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,
+    101,32,122,105,112,105,109,112,111,114,116,101,114,10,32,32,
+    32,32,32,32,32,32,105,110,115,116,97,110,99,101,32,105,
+    116,115,101,108,102,32,105,102,32,116,104,101,32,109,111,100,
+    117,108,101,32,119,97,115,32,102,111,117,110,100,44,32,97,
+    32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,
+    110,103,32,116,104,101,10,32,32,32,32,32,32,32,32,102,
+    117,108,108,32,112,97,116,104,32,110,97,109,101,32,105,102,
+    32,105,116,39,115,32,112,111,115,115,105,98,108,121,32,97,
+    32,112,111,114,116,105,111,110,32,111,102,32,97,32,110,97,
+    109,101,115,112,97,99,101,32,112,97,99,107,97,103,101,44,
+    10,32,32,32,32,32,32,32,32,111,114,32,78,111,110,101,
+    32,111,116,104,101,114,119,105,115,101,46,32,84,104,101,32,
+    111,112,116,105,111,110,97,108,32,39,112,97,116,104,39,32,
+    97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,
+    114,101,100,32,45,45,32,105,116,39,115,10,32,32,32,32,
+    32,32,32,32,116,104,101,114,101,32,102,111,114,32,99,111,
+    109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,
+    32,116,104,101,32,105,109,112,111,114,116,101,114,32,112,114,
+    111,116,111,99,111,108,46,10,32,32,32,32,32,32,32,32,
+    78,41,5,218,16,95,103,101,116,95,109,111,100,117,108,101,
+    95,105,110,102,111,218,16,95,103,101,116,95,109,111,100,117,
+    108,101,95,112,97,116,104,218,7,95,105,115,95,100,105,114,
+    114,29,0,0,0,114,20,0,0,0,41,5,114,32,0,0,
+    0,218,8,102,117,108,108,110,97,109,101,114,13,0,0,0,
+    218,2,109,105,218,7,109,111,100,112,97,116,104,114,9,0,
+    0,0,114,9,0,0,0,114,10,0,0,0,218,11,102,105,
+    110,100,95,108,111,97,100,101,114,109,0,0,0,115,14,0,
+    0,0,0,10,10,1,8,2,8,7,10,1,10,4,24,2,
+    122,23,122,105,112,105,109,112,111,114,116,101,114,46,102,105,
+    110,100,95,108,111,97,100,101,114,99,3,0,0,0,0,0,
     0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,
-    0,0,115,40,0,0,0,116,0,124,0,124,1,131,2,125,
-    2,124,2,100,1,107,8,114,36,116,1,100,2,124,1,155,
-    2,157,2,124,1,100,3,141,2,130,1,124,2,83,0,41,
-    4,122,171,105,115,95,112,97,99,107,97,103,101,40,102,117,
-    108,108,110,97,109,101,41,32,45,62,32,98,111,111,108,46,
-    10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,
-    32,84,114,117,101,32,105,102,32,116,104,101,32,109,111,100,
-    117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,
-    32,102,117,108,108,110,97,109,101,32,105,115,32,97,32,112,
-    97,99,107,97,103,101,46,10,32,32,32,32,32,32,32,32,
-    82,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69,
-    114,114,111,114,32,105,102,32,116,104,101,32,109,111,100,117,
-    108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,102,
-    111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,114,
-    57,0,0,0,114,58,0,0,0,41,2,114,35,0,0,0,
-    114,3,0,0,0,41,3,114,32,0,0,0,114,38,0,0,
-    0,114,39,0,0,0,114,9,0,0,0,114,9,0,0,0,
-    114,10,0,0,0,218,10,105,115,95,112,97,99,107,97,103,
-    101,221,0,0,0,115,8,0,0,0,0,6,10,1,8,1,
-    18,1,122,22,122,105,112,105,109,112,111,114,116,101,114,46,
-    105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,67,
-    0,0,0,115,248,0,0,0,116,0,124,0,124,1,131,2,
-    92,3,125,2,125,3,125,4,116,1,106,2,160,3,124,1,
-    161,1,125,5,124,5,100,1,107,8,115,46,116,4,124,5,
-    116,5,131,2,115,64,116,5,124,1,131,1,125,5,124,5,
-    116,1,106,2,124,1,60,0,124,0,124,5,95,6,122,84,
-    124,3,114,108,116,7,124,0,124,1,131,2,125,6,116,8,
-    160,9,124,0,106,10,124,6,161,2,125,7,124,7,103,1,
-    124,5,95,11,116,12,124,5,100,2,131,2,115,124,116,13,
-    124,5,95,13,116,8,160,14,124,5,106,15,124,1,124,4,
-    161,3,1,0,116,16,124,2,124,5,106,15,131,2,1,0,
-    87,0,110,22,1,0,1,0,1,0,116,1,106,2,124,1,
-    61,0,130,0,89,0,110,2,88,0,122,14,116,1,106,2,
-    124,1,25,0,125,5,87,0,110,36,4,0,116,17,107,10,
-    114,228,1,0,1,0,1,0,116,18,100,3,124,1,155,2,
-    100,4,157,3,131,1,130,1,89,0,110,2,88,0,116,19,
-    160,20,100,5,124,1,124,4,161,3,1,0,124,5,83,0,
-    41,6,122,245,108,111,97,100,95,109,111,100,117,108,101,40,
-    102,117,108,108,110,97,109,101,41,32,45,62,32,109,111,100,
-    117,108,101,46,10,10,32,32,32,32,32,32,32,32,76,111,
-    97,100,32,116,104,101,32,109,111,100,117,108,101,32,115,112,
-    101,99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,
-    110,97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,
-    39,32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,
-    32,32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,
-    105,102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,
-    111,100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,
-    101,116,117,114,110,115,32,116,104,101,32,105,109,112,111,114,
-    116,101,100,10,32,32,32,32,32,32,32,32,109,111,100,117,
-    108,101,44,32,111,114,32,114,97,105,115,101,115,32,90,105,
+    0,0,115,16,0,0,0,124,0,160,0,124,1,124,2,161,
+    2,100,1,25,0,83,0,41,2,97,139,1,0,0,102,105,
+    110,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97,
+    109,101,44,32,112,97,116,104,61,78,111,110,101,41,32,45,
+    62,32,115,101,108,102,32,111,114,32,78,111,110,101,46,10,
+    10,32,32,32,32,32,32,32,32,83,101,97,114,99,104,32,
+    102,111,114,32,97,32,109,111,100,117,108,101,32,115,112,101,
+    99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,110,
+    97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,39,
+    32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,32,
+    32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,105,
+    102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,111,
+    100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,101,
+    116,117,114,110,115,32,116,104,101,32,122,105,112,105,109,112,
+    111,114,116,101,114,10,32,32,32,32,32,32,32,32,105,110,
+    115,116,97,110,99,101,32,105,116,115,101,108,102,32,105,102,
+    32,116,104,101,32,109,111,100,117,108,101,32,119,97,115,32,
+    102,111,117,110,100,44,32,111,114,32,78,111,110,101,32,105,
+    102,32,105,116,32,119,97,115,110,39,116,46,10,32,32,32,
+    32,32,32,32,32,84,104,101,32,111,112,116,105,111,110,97,
+    108,32,39,112,97,116,104,39,32,97,114,103,117,109,101,110,
+    116,32,105,115,32,105,103,110,111,114,101,100,32,45,45,32,
+    105,116,39,115,32,116,104,101,114,101,32,102,111,114,32,99,
+    111,109,112,97,116,105,98,105,108,105,116,121,10,32,32,32,
+    32,32,32,32,32,119,105,116,104,32,116,104,101,32,105,109,
+    112,111,114,116,101,114,32,112,114,111,116,111,99,111,108,46,
+    10,32,32,32,32,32,32,32,32,114,0,0,0,0,41,1,
+    114,41,0,0,0,41,3,114,32,0,0,0,114,38,0,0,
+    0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,0,
+    114,10,0,0,0,218,11,102,105,110,100,95,109,111,100,117,
+    108,101,141,0,0,0,115,2,0,0,0,0,9,122,23,122,
+    105,112,105,109,112,111,114,116,101,114,46,102,105,110,100,95,
+    109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,
+    0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,115,
+    20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,2,
+    125,3,125,4,124,2,83,0,41,1,122,163,103,101,116,95,
+    99,111,100,101,40,102,117,108,108,110,97,109,101,41,32,45,
+    62,32,99,111,100,101,32,111,98,106,101,99,116,46,10,10,
+    32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,116,
+    104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,102,
+    111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,
+    32,109,111,100,117,108,101,46,32,82,97,105,115,101,32,90,
+    105,112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,
+    32,32,32,32,32,32,105,102,32,116,104,101,32,109,111,100,
+    117,108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,
+    102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,169,
+    1,218,16,95,103,101,116,95,109,111,100,117,108,101,95,99,
+    111,100,101,169,5,114,32,0,0,0,114,38,0,0,0,218,
+    4,99,111,100,101,218,9,105,115,112,97,99,107,97,103,101,
+    114,40,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+    10,0,0,0,218,8,103,101,116,95,99,111,100,101,153,0,
+    0,0,115,4,0,0,0,0,6,16,1,122,20,122,105,112,
+    105,109,112,111,114,116,101,114,46,103,101,116,95,99,111,100,
+    101,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,
+    0,0,8,0,0,0,67,0,0,0,115,116,0,0,0,116,
+    0,114,16,124,1,160,1,116,0,116,2,161,2,125,1,124,
+    1,125,2,124,1,160,3,124,0,106,4,116,2,23,0,161,
+    1,114,58,124,1,116,5,124,0,106,4,116,2,23,0,131,
+    1,100,1,133,2,25,0,125,2,122,14,124,0,106,6,124,
+    2,25,0,125,3,87,0,110,30,4,0,116,7,121,102,1,
+    0,1,0,1,0,116,8,100,2,100,3,124,2,131,3,130,
+    1,89,0,110,2,48,0,116,9,124,0,106,4,124,3,131,
+    2,83,0,41,4,122,154,103,101,116,95,100,97,116,97,40,
+    112,97,116,104,110,97,109,101,41,32,45,62,32,115,116,114,
+    105,110,103,32,119,105,116,104,32,102,105,108,101,32,100,97,
+    116,97,46,10,10,32,32,32,32,32,32,32,32,82,101,116,
+    117,114,110,32,116,104,101,32,100,97,116,97,32,97,115,115,
+    111,99,105,97,116,101,100,32,119,105,116,104,32,39,112,97,
+    116,104,110,97,109,101,39,46,32,82,97,105,115,101,32,79,
+    83,69,114,114,111,114,32,105,102,10,32,32,32,32,32,32,
+    32,32,116,104,101,32,102,105,108,101,32,119,97,115,110,39,
+    116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,
+    32,78,114,0,0,0,0,218,0,41,10,114,18,0,0,0,
+    114,19,0,0,0,114,20,0,0,0,218,10,115,116,97,114,
+    116,115,119,105,116,104,114,29,0,0,0,218,3,108,101,110,
+    114,28,0,0,0,114,26,0,0,0,114,22,0,0,0,218,
+    9,95,103,101,116,95,100,97,116,97,41,4,114,32,0,0,
+    0,218,8,112,97,116,104,110,97,109,101,90,3,107,101,121,
+    218,9,116,111,99,95,101,110,116,114,121,114,9,0,0,0,
+    114,9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,
+    100,97,116,97,163,0,0,0,115,20,0,0,0,0,6,4,
+    1,12,2,4,1,16,1,22,2,2,1,14,1,12,1,18,
+    1,122,20,122,105,112,105,109,112,111,114,116,101,114,46,103,
+    101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,
+    115,20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,
+    2,125,3,125,4,124,4,83,0,41,1,122,106,103,101,116,
+    95,102,105,108,101,110,97,109,101,40,102,117,108,108,110,97,
+    109,101,41,32,45,62,32,102,105,108,101,110,97,109,101,32,
+    115,116,114,105,110,103,46,10,10,32,32,32,32,32,32,32,
+    32,82,101,116,117,114,110,32,116,104,101,32,102,105,108,101,
+    110,97,109,101,32,102,111,114,32,116,104,101,32,115,112,101,
+    99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,32,
+    32,32,32,32,32,32,32,114,43,0,0,0,114,45,0,0,
+    0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
+    218,12,103,101,116,95,102,105,108,101,110,97,109,101,184,0,
+    0,0,115,4,0,0,0,0,7,16,1,122,24,122,105,112,
+    105,109,112,111,114,116,101,114,46,103,101,116,95,102,105,108,
+    101,110,97,109,101,99,2,0,0,0,0,0,0,0,0,0,
+    0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,126,
+    0,0,0,116,0,124,0,124,1,131,2,125,2,124,2,100,
+    1,117,0,114,36,116,1,100,2,124,1,155,2,157,2,124,
+    1,100,3,141,2,130,1,116,2,124,0,124,1,131,2,125,
+    3,124,2,114,64,116,3,160,4,124,3,100,4,161,2,125,
+    4,110,10,124,3,155,0,100,5,157,2,125,4,122,14,124,
+    0,106,5,124,4,25,0,125,5,87,0,110,20,4,0,116,
+    6,121,108,1,0,1,0,1,0,89,0,100,1,83,0,48,
+    0,116,7,124,0,106,8,124,5,131,2,160,9,161,0,83,
+    0,41,6,122,253,103,101,116,95,115,111,117,114,99,101,40,
+    102,117,108,108,110,97,109,101,41,32,45,62,32,115,111,117,
+    114,99,101,32,115,116,114,105,110,103,46,10,10,32,32,32,
+    32,32,32,32,32,82,101,116,117,114,110,32,116,104,101,32,
+    115,111,117,114,99,101,32,99,111,100,101,32,102,111,114,32,
+    116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,
+    100,117,108,101,46,32,82,97,105,115,101,32,90,105,112,73,
+    109,112,111,114,116,69,114,114,111,114,10,32,32,32,32,32,
+    32,32,32,105,102,32,116,104,101,32,109,111,100,117,108,101,
+    32,99,111,117,108,100,110,39,116,32,98,101,32,102,111,117,
+    110,100,44,32,114,101,116,117,114,110,32,78,111,110,101,32,
+    105,102,32,116,104,101,32,97,114,99,104,105,118,101,32,100,
+    111,101,115,10,32,32,32,32,32,32,32,32,99,111,110,116,
+    97,105,110,32,116,104,101,32,109,111,100,117,108,101,44,32,
+    98,117,116,32,104,97,115,32,110,111,32,115,111,117,114,99,
+    101,32,102,111,114,32,105,116,46,10,32,32,32,32,32,32,
+    32,32,78,250,18,99,97,110,39,116,32,102,105,110,100,32,
+    109,111,100,117,108,101,32,169,1,218,4,110,97,109,101,250,
+    11,95,95,105,110,105,116,95,95,46,112,121,250,3,46,112,
+    121,41,10,114,35,0,0,0,114,3,0,0,0,114,36,0,
+    0,0,114,21,0,0,0,114,30,0,0,0,114,28,0,0,
+    0,114,26,0,0,0,114,52,0,0,0,114,29,0,0,0,
+    218,6,100,101,99,111,100,101,41,6,114,32,0,0,0,114,
+    38,0,0,0,114,39,0,0,0,114,13,0,0,0,218,8,
+    102,117,108,108,112,97,116,104,114,54,0,0,0,114,9,0,
+    0,0,114,9,0,0,0,114,10,0,0,0,218,10,103,101,
+    116,95,115,111,117,114,99,101,195,0,0,0,115,24,0,0,
+    0,0,7,10,1,8,1,18,2,10,1,4,1,14,2,10,
+    2,2,1,14,1,12,2,8,1,122,22,122,105,112,105,109,
+    112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,99,
+    101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,
+    0,0,4,0,0,0,67,0,0,0,115,40,0,0,0,116,
+    0,124,0,124,1,131,2,125,2,124,2,100,1,117,0,114,
+    36,116,1,100,2,124,1,155,2,157,2,124,1,100,3,141,
+    2,130,1,124,2,83,0,41,4,122,171,105,115,95,112,97,
+    99,107,97,103,101,40,102,117,108,108,110,97,109,101,41,32,
+    45,62,32,98,111,111,108,46,10,10,32,32,32,32,32,32,
+    32,32,82,101,116,117,114,110,32,84,114,117,101,32,105,102,
+    32,116,104,101,32,109,111,100,117,108,101,32,115,112,101,99,
+    105,102,105,101,100,32,98,121,32,102,117,108,108,110,97,109,
+    101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,10,
+    32,32,32,32,32,32,32,32,82,97,105,115,101,32,90,105,
     112,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,
-    105,116,32,119,97,115,110,39,116,32,102,111,117,110,100,46,
-    10,32,32,32,32,32,32,32,32,78,218,12,95,95,98,117,
-    105,108,116,105,110,115,95,95,122,14,76,111,97,100,101,100,
-    32,109,111,100,117,108,101,32,122,25,32,110,111,116,32,102,
-    111,117,110,100,32,105,110,32,115,121,115,46,109,111,100,117,
-    108,101,115,122,30,105,109,112,111,114,116,32,123,125,32,35,
-    32,108,111,97,100,101,100,32,102,114,111,109,32,90,105,112,
-    32,123,125,41,21,114,44,0,0,0,218,3,115,121,115,218,
-    7,109,111,100,117,108,101,115,218,3,103,101,116,114,15,0,
-    0,0,218,12,95,109,111,100,117,108,101,95,116,121,112,101,
-    218,10,95,95,108,111,97,100,101,114,95,95,114,36,0,0,
-    0,114,21,0,0,0,114,30,0,0,0,114,29,0,0,0,
-    90,8,95,95,112,97,116,104,95,95,218,7,104,97,115,97,
-    116,116,114,114,66,0,0,0,90,14,95,102,105,120,95,117,
-    112,95,109,111,100,117,108,101,218,8,95,95,100,105,99,116,
-    95,95,218,4,101,120,101,99,114,26,0,0,0,218,11,73,
-    109,112,111,114,116,69,114,114,111,114,218,10,95,98,111,111,
-    116,115,116,114,97,112,218,16,95,118,101,114,98,111,115,101,
-    95,109,101,115,115,97,103,101,41,8,114,32,0,0,0,114,
-    38,0,0,0,114,46,0,0,0,114,47,0,0,0,114,40,
-    0,0,0,90,3,109,111,100,114,13,0,0,0,114,63,0,
-    0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
-    0,218,11,108,111,97,100,95,109,111,100,117,108,101,234,0,
-    0,0,115,48,0,0,0,0,7,16,1,12,1,18,1,8,
-    1,10,1,6,2,2,1,4,3,10,1,14,1,8,2,10,
-    1,6,1,16,1,16,1,6,1,8,1,8,2,2,1,14,
-    1,14,1,22,1,14,1,122,23,122,105,112,105,109,112,111,
-    114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,
-    99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
-    0,8,0,0,0,67,0,0,0,115,88,0,0,0,122,20,
-    124,0,160,0,124,1,161,1,115,18,87,0,100,1,83,0,
-    87,0,110,22,4,0,116,1,107,10,114,42,1,0,1,0,
-    1,0,89,0,100,1,83,0,88,0,116,2,106,3,115,78,
-    100,2,100,3,108,4,109,5,125,2,1,0,124,2,160,6,
-    116,2,161,1,1,0,100,4,116,2,95,3,116,2,124,0,
-    124,1,131,2,83,0,41,5,122,204,82,101,116,117,114,110,
-    32,116,104,101,32,82,101,115,111,117,114,99,101,82,101,97,
-    100,101,114,32,102,111,114,32,97,32,112,97,99,107,97,103,
-    101,32,105,110,32,97,32,122,105,112,32,102,105,108,101,46,
-    10,10,32,32,32,32,32,32,32,32,73,102,32,39,102,117,
-    108,108,110,97,109,101,39,32,105,115,32,97,32,112,97,99,
-    107,97,103,101,32,119,105,116,104,105,110,32,116,104,101,32,
-    122,105,112,32,102,105,108,101,44,32,114,101,116,117,114,110,
-    32,116,104,101,10,32,32,32,32,32,32,32,32,39,82,101,
-    115,111,117,114,99,101,82,101,97,100,101,114,39,32,111,98,
-    106,101,99,116,32,102,111,114,32,116,104,101,32,112,97,99,
-    107,97,103,101,46,32,32,79,116,104,101,114,119,105,115,101,
-    32,114,101,116,117,114,110,32,78,111,110,101,46,10,32,32,
-    32,32,32,32,32,32,78,114,0,0,0,0,41,1,218,14,
-    82,101,115,111,117,114,99,101,82,101,97,100,101,114,84,41,
-    7,114,65,0,0,0,114,3,0,0,0,218,24,95,90,105,
-    112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,
-    101,97,100,101,114,218,11,95,114,101,103,105,115,116,101,114,
-    101,100,90,13,105,109,112,111,114,116,108,105,98,46,97,98,
-    99,114,79,0,0,0,90,8,114,101,103,105,115,116,101,114,
-    41,3,114,32,0,0,0,114,38,0,0,0,114,79,0,0,
-    0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
-    218,19,103,101,116,95,114,101,115,111,117,114,99,101,95,114,
-    101,97,100,101,114,16,1,0,0,115,20,0,0,0,0,6,
-    2,1,10,1,10,1,14,1,8,1,6,1,12,1,10,1,
-    6,1,122,31,122,105,112,105,109,112,111,114,116,101,114,46,
-    103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,
-    100,101,114,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    1,0,0,0,5,0,0,0,67,0,0,0,115,24,0,0,
-    0,100,1,124,0,106,0,155,0,116,1,155,0,124,0,106,
-    2,155,0,100,2,157,5,83,0,41,3,78,122,21,60,122,
-    105,112,105,109,112,111,114,116,101,114,32,111,98,106,101,99,
-    116,32,34,122,2,34,62,41,3,114,29,0,0,0,114,20,
-    0,0,0,114,31,0,0,0,41,1,114,32,0,0,0,114,
-    9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,
-    95,95,114,101,112,114,95,95,34,1,0,0,115,2,0,0,
-    0,0,1,122,20,122,105,112,105,109,112,111,114,116,101,114,
-    46,95,95,114,101,112,114,95,95,41,1,78,41,1,78,41,
-    15,114,6,0,0,0,114,7,0,0,0,114,8,0,0,0,
-    218,7,95,95,100,111,99,95,95,114,34,0,0,0,114,41,
-    0,0,0,114,42,0,0,0,114,48,0,0,0,114,55,0,
-    0,0,114,56,0,0,0,114,64,0,0,0,114,65,0,0,
-    0,114,78,0,0,0,114,82,0,0,0,114,83,0,0,0,
-    114,9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
-    10,0,0,0,114,4,0,0,0,45,0,0,0,115,24,0,
-    0,0,8,1,4,17,8,46,10,32,10,12,8,10,8,21,
-    8,11,8,26,8,13,8,38,8,18,122,12,95,95,105,110,
-    105,116,95,95,46,112,121,99,84,114,60,0,0,0,70,41,
-    3,122,4,46,112,121,99,84,70,41,3,114,61,0,0,0,
-    70,70,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,4,0,0,0,67,0,0,0,115,20,0,0,0,
-    124,0,106,0,124,1,160,1,100,1,161,1,100,2,25,0,
-    23,0,83,0,41,3,78,218,1,46,233,2,0,0,0,41,
-    2,114,31,0,0,0,218,10,114,112,97,114,116,105,116,105,
-    111,110,41,2,114,32,0,0,0,114,38,0,0,0,114,9,
-    0,0,0,114,9,0,0,0,114,10,0,0,0,114,36,0,
-    0,0,52,1,0,0,115,2,0,0,0,0,1,114,36,0,
-    0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
-    0,0,0,2,0,0,0,67,0,0,0,115,18,0,0,0,
-    124,1,116,0,23,0,125,2,124,2,124,0,106,1,107,6,
-    83,0,169,1,78,41,2,114,20,0,0,0,114,28,0,0,
-    0,41,3,114,32,0,0,0,114,13,0,0,0,90,7,100,
-    105,114,112,97,116,104,114,9,0,0,0,114,9,0,0,0,
-    114,10,0,0,0,114,37,0,0,0,56,1,0,0,115,4,
-    0,0,0,0,4,8,2,114,37,0,0,0,99,2,0,0,
-    0,0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,
-    0,67,0,0,0,115,56,0,0,0,116,0,124,0,124,1,
-    131,2,125,2,116,1,68,0,93,36,92,3,125,3,125,4,
-    125,5,124,2,124,3,23,0,125,6,124,6,124,0,106,2,
-    107,6,114,14,124,5,2,0,1,0,83,0,113,14,100,0,
-    83,0,114,88,0,0,0,41,3,114,36,0,0,0,218,16,
-    95,122,105,112,95,115,101,97,114,99,104,111,114,100,101,114,
-    114,28,0,0,0,41,7,114,32,0,0,0,114,38,0,0,
-    0,114,13,0,0,0,218,6,115,117,102,102,105,120,218,10,
-    105,115,98,121,116,101,99,111,100,101,114,47,0,0,0,114,
-    63,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
-    0,0,0,114,35,0,0,0,65,1,0,0,115,12,0,0,
-    0,0,1,10,1,14,1,8,1,10,1,10,1,114,35,0,
-    0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,26,
-    0,0,0,9,0,0,0,67,0,0,0,115,252,4,0,0,
-    122,14,116,0,160,1,124,0,161,1,125,1,87,0,110,38,
-    4,0,116,2,107,10,114,52,1,0,1,0,1,0,116,3,
-    100,1,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
-    89,0,110,2,88,0,124,1,144,4,143,168,1,0,122,36,
-    124,1,160,4,116,5,11,0,100,3,161,2,1,0,124,1,
-    160,6,161,0,125,2,124,1,160,7,116,5,161,1,125,3,
-    87,0,110,38,4,0,116,2,107,10,114,136,1,0,1,0,
-    1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
-    141,2,130,1,89,0,110,2,88,0,116,8,124,3,131,1,
-    116,5,107,3,114,168,116,3,100,4,124,0,155,2,157,2,
-    124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2,
-    25,0,116,9,107,3,144,1,114,178,122,24,124,1,160,4,
-    100,6,100,3,161,2,1,0,124,1,160,6,161,0,125,4,
-    87,0,110,38,4,0,116,2,107,10,114,248,1,0,1,0,
-    1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
-    141,2,130,1,89,0,110,2,88,0,116,10,124,4,116,11,
-    24,0,116,5,24,0,100,6,131,2,125,5,122,22,124,1,
-    160,4,124,5,161,1,1,0,124,1,160,7,161,0,125,6,
-    87,0,110,40,4,0,116,2,107,10,144,1,114,74,1,0,
-    1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,
-    100,2,141,2,130,1,89,0,110,2,88,0,124,6,160,12,
-    116,9,161,1,125,7,124,7,100,6,107,0,144,1,114,114,
-    116,3,100,7,124,0,155,2,157,2,124,0,100,2,141,2,
-    130,1,124,6,124,7,124,7,116,5,23,0,133,2,25,0,
-    125,3,116,8,124,3,131,1,116,5,107,3,144,1,114,162,
-    116,3,100,8,124,0,155,2,157,2,124,0,100,2,141,2,
-    130,1,124,4,116,8,124,6,131,1,24,0,124,7,23,0,
-    125,2,116,13,124,3,100,9,100,10,133,2,25,0,131,1,
-    125,8,116,13,124,3,100,10,100,11,133,2,25,0,131,1,
-    125,9,124,2,124,8,107,0,144,1,114,238,116,3,100,12,
-    124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,
-    124,9,107,0,144,2,114,10,116,3,100,13,124,0,155,2,
-    157,2,124,0,100,2,141,2,130,1,124,2,124,8,56,0,
-    125,2,124,2,124,9,24,0,125,10,124,10,100,6,107,0,
-    144,2,114,54,116,3,100,14,124,0,155,2,157,2,124,0,
-    100,2,141,2,130,1,105,0,125,11,100,6,125,12,122,14,
-    124,1,160,4,124,2,161,1,1,0,87,0,110,40,4,0,
-    116,2,107,10,144,2,114,116,1,0,1,0,1,0,116,3,
-    100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
-    89,0,110,2,88,0,124,1,160,7,100,15,161,1,125,3,
-    116,8,124,3,131,1,100,5,107,0,144,2,114,150,116,14,
-    100,16,131,1,130,1,124,3,100,0,100,5,133,2,25,0,
-    100,17,107,3,144,2,114,172,144,4,113,224,116,8,124,3,
-    131,1,100,15,107,3,144,2,114,194,116,14,100,16,131,1,
-    130,1,116,15,124,3,100,18,100,19,133,2,25,0,131,1,
-    125,13,116,15,124,3,100,19,100,9,133,2,25,0,131,1,
-    125,14,116,15,124,3,100,9,100,20,133,2,25,0,131,1,
-    125,15,116,15,124,3,100,20,100,10,133,2,25,0,131,1,
-    125,16,116,13,124,3,100,10,100,11,133,2,25,0,131,1,
-    125,17,116,13,124,3,100,11,100,21,133,2,25,0,131,1,
-    125,18,116,13,124,3,100,21,100,22,133,2,25,0,131,1,
-    125,4,116,15,124,3,100,22,100,23,133,2,25,0,131,1,
-    125,19,116,15,124,3,100,23,100,24,133,2,25,0,131,1,
-    125,20,116,15,124,3,100,24,100,25,133,2,25,0,131,1,
-    125,21,116,13,124,3,100,26,100,15,133,2,25,0,131,1,
-    125,22,124,19,124,20,23,0,124,21,23,0,125,8,124,22,
-    124,9,107,4,144,3,114,154,116,3,100,27,124,0,155,2,
-    157,2,124,0,100,2,141,2,130,1,124,22,124,10,55,0,
-    125,22,122,14,124,1,160,7,124,19,161,1,125,23,87,0,
-    110,40,4,0,116,2,107,10,144,3,114,216,1,0,1,0,
-    1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
-    141,2,130,1,89,0,110,2,88,0,116,8,124,23,131,1,
-    124,19,107,3,144,3,114,250,116,3,100,4,124,0,155,2,
-    157,2,124,0,100,2,141,2,130,1,122,50,116,8,124,1,
-    160,7,124,8,124,19,24,0,161,1,131,1,124,8,124,19,
-    24,0,107,3,144,4,114,42,116,3,100,4,124,0,155,2,
-    157,2,124,0,100,2,141,2,130,1,87,0,110,40,4,0,
-    116,2,107,10,144,4,114,84,1,0,1,0,1,0,116,3,
-    100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
-    89,0,110,2,88,0,124,13,100,28,64,0,144,4,114,106,
-    124,23,160,16,161,0,125,23,110,54,122,14,124,23,160,16,
-    100,29,161,1,125,23,87,0,110,38,4,0,116,17,107,10,
-    144,4,114,158,1,0,1,0,1,0,124,23,160,16,100,30,
-    161,1,160,18,116,19,161,1,125,23,89,0,110,2,88,0,
-    124,23,160,20,100,31,116,21,161,2,125,23,116,22,160,23,
-    124,0,124,23,161,2,125,24,124,24,124,14,124,18,124,4,
-    124,22,124,15,124,16,124,17,102,8,125,25,124,25,124,11,
-    124,23,60,0,124,12,100,32,55,0,125,12,144,2,113,118,
-    87,0,53,0,81,0,82,0,88,0,116,24,160,25,100,33,
-    124,12,124,0,161,3,1,0,124,11,83,0,41,34,78,122,
-    21,99,97,110,39,116,32,111,112,101,110,32,90,105,112,32,
-    102,105,108,101,58,32,114,12,0,0,0,114,86,0,0,0,
-    250,21,99,97,110,39,116,32,114,101,97,100,32,90,105,112,
-    32,102,105,108,101,58,32,233,4,0,0,0,114,0,0,0,
-    0,122,16,110,111,116,32,97,32,90,105,112,32,102,105,108,
-    101,58,32,122,18,99,111,114,114,117,112,116,32,90,105,112,
-    32,102,105,108,101,58,32,233,12,0,0,0,233,16,0,0,
-    0,233,20,0,0,0,122,28,98,97,100,32,99,101,110,116,
-    114,97,108,32,100,105,114,101,99,116,111,114,121,32,115,105,
-    122,101,58,32,122,30,98,97,100,32,99,101,110,116,114,97,
-    108,32,100,105,114,101,99,116,111,114,121,32,111,102,102,115,
-    101,116,58,32,122,38,98,97,100,32,99,101,110,116,114,97,
-    108,32,100,105,114,101,99,116,111,114,121,32,115,105,122,101,
-    32,111,114,32,111,102,102,115,101,116,58,32,233,46,0,0,
-    0,250,27,69,79,70,32,114,101,97,100,32,119,104,101,114,
-    101,32,110,111,116,32,101,120,112,101,99,116,101,100,115,4,
-    0,0,0,80,75,1,2,233,8,0,0,0,233,10,0,0,
-    0,233,14,0,0,0,233,24,0,0,0,233,28,0,0,0,
-    233,30,0,0,0,233,32,0,0,0,233,34,0,0,0,233,
-    42,0,0,0,122,25,98,97,100,32,108,111,99,97,108,32,
-    104,101,97,100,101,114,32,111,102,102,115,101,116,58,32,105,
-    0,8,0,0,218,5,97,115,99,105,105,90,6,108,97,116,
-    105,110,49,250,1,47,114,5,0,0,0,122,33,122,105,112,
-    105,109,112,111,114,116,58,32,102,111,117,110,100,32,123,125,
-    32,110,97,109,101,115,32,105,110,32,123,33,114,125,41,26,
-    218,3,95,105,111,218,9,111,112,101,110,95,99,111,100,101,
-    114,22,0,0,0,114,3,0,0,0,218,4,115,101,101,107,
-    218,20,69,78,68,95,67,69,78,84,82,65,76,95,68,73,
-    82,95,83,73,90,69,90,4,116,101,108,108,218,4,114,101,
-    97,100,114,51,0,0,0,218,18,83,84,82,73,78,71,95,
-    69,78,68,95,65,82,67,72,73,86,69,218,3,109,97,120,
-    218,15,77,65,88,95,67,79,77,77,69,78,84,95,76,69,
-    78,218,5,114,102,105,110,100,114,2,0,0,0,218,8,69,
-    79,70,69,114,114,111,114,114,1,0,0,0,114,62,0,0,
-    0,218,18,85,110,105,99,111,100,101,68,101,99,111,100,101,
-    69,114,114,111,114,218,9,116,114,97,110,115,108,97,116,101,
-    218,11,99,112,52,51,55,95,116,97,98,108,101,114,19,0,
-    0,0,114,20,0,0,0,114,21,0,0,0,114,30,0,0,
-    0,114,76,0,0,0,114,77,0,0,0,41,26,114,29,0,
-    0,0,218,2,102,112,90,15,104,101,97,100,101,114,95,112,
-    111,115,105,116,105,111,110,218,6,98,117,102,102,101,114,218,
-    9,102,105,108,101,95,115,105,122,101,90,17,109,97,120,95,
-    99,111,109,109,101,110,116,95,115,116,97,114,116,218,4,100,
-    97,116,97,90,3,112,111,115,218,11,104,101,97,100,101,114,
-    95,115,105,122,101,90,13,104,101,97,100,101,114,95,111,102,
-    102,115,101,116,90,10,97,114,99,95,111,102,102,115,101,116,
-    114,33,0,0,0,218,5,99,111,117,110,116,218,5,102,108,
-    97,103,115,218,8,99,111,109,112,114,101,115,115,218,4,116,
-    105,109,101,218,4,100,97,116,101,218,3,99,114,99,218,9,
-    100,97,116,97,95,115,105,122,101,218,9,110,97,109,101,95,
-    115,105,122,101,218,10,101,120,116,114,97,95,115,105,122,101,
-    90,12,99,111,109,109,101,110,116,95,115,105,122,101,218,11,
-    102,105,108,101,95,111,102,102,115,101,116,114,59,0,0,0,
-    114,13,0,0,0,218,1,116,114,9,0,0,0,114,9,0,
-    0,0,114,10,0,0,0,114,27,0,0,0,96,1,0,0,
-    115,212,0,0,0,0,1,2,1,14,1,14,1,24,2,8,
-    1,2,1,14,1,8,1,14,1,14,1,24,1,12,1,18,
-    1,18,3,2,1,12,1,12,1,14,1,10,1,2,255,12,
-    2,8,1,2,255,2,1,2,255,4,2,2,1,10,1,12,
-    1,16,1,10,1,2,255,12,2,10,1,10,1,10,1,2,
-    255,6,2,16,1,14,1,10,1,2,255,6,2,16,2,16,
-    1,16,1,10,1,18,1,10,1,18,1,8,1,8,1,10,
-    1,18,2,4,2,4,1,2,1,14,1,16,1,24,2,10,
-    1,14,1,8,2,18,1,4,1,14,1,8,1,16,1,16,
-    1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,
-    1,16,1,12,1,10,1,18,1,8,2,2,1,14,1,16,
-    1,24,1,14,1,18,4,2,1,28,1,22,1,16,1,24,
-    2,10,2,10,3,2,1,14,1,16,1,22,2,12,1,12,
-    1,20,1,8,1,22,1,14,1,114,27,0,0,0,117,190,
-    1,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,
-    13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,
-    29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,
-    45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
-    61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,
-    77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,
-    93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,
-    109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,
-    125,126,127,195,135,195,188,195,169,195,162,195,164,195,160,195,
-    165,195,167,195,170,195,171,195,168,195,175,195,174,195,172,195,
-    132,195,133,195,137,195,166,195,134,195,180,195,182,195,178,195,
-    187,195,185,195,191,195,150,195,156,194,162,194,163,194,165,226,
-    130,167,198,146,195,161,195,173,195,179,195,186,195,177,195,145,
-    194,170,194,186,194,191,226,140,144,194,172,194,189,194,188,194,
-    161,194,171,194,187,226,150,145,226,150,146,226,150,147,226,148,
-    130,226,148,164,226,149,161,226,149,162,226,149,150,226,149,149,
-    226,149,163,226,149,145,226,149,151,226,149,157,226,149,156,226,
-    149,155,226,148,144,226,148,148,226,148,180,226,148,172,226,148,
-    156,226,148,128,226,148,188,226,149,158,226,149,159,226,149,154,
-    226,149,148,226,149,169,226,149,166,226,149,160,226,149,144,226,
-    149,172,226,149,167,226,149,168,226,149,164,226,149,165,226,149,
-    153,226,149,152,226,149,146,226,149,147,226,149,171,226,149,170,
-    226,148,152,226,148,140,226,150,136,226,150,132,226,150,140,226,
-    150,144,226,150,128,206,177,195,159,206,147,207,128,206,163,207,
-    131,194,181,207,132,206,166,206,152,206,169,206,180,226,136,158,
-    207,134,206,181,226,136,169,226,137,161,194,177,226,137,165,226,
-    137,164,226,140,160,226,140,161,195,183,226,137,136,194,176,226,
-    136,153,194,183,226,136,154,226,129,191,194,178,226,150,160,194,
-    160,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-    0,0,8,0,0,0,67,0,0,0,115,108,0,0,0,116,
-    0,114,22,116,1,160,2,100,1,161,1,1,0,116,3,100,
-    2,131,1,130,1,100,3,97,0,122,60,122,16,100,5,100,
-    6,108,4,109,5,125,0,1,0,87,0,110,38,4,0,116,
-    6,107,10,114,82,1,0,1,0,1,0,116,1,160,2,100,
-    1,161,1,1,0,116,3,100,2,131,1,130,1,89,0,110,
-    2,88,0,87,0,53,0,100,4,97,0,88,0,116,1,160,
-    2,100,7,161,1,1,0,124,0,83,0,41,8,78,122,27,
-    122,105,112,105,109,112,111,114,116,58,32,122,108,105,98,32,
-    85,78,65,86,65,73,76,65,66,76,69,250,41,99,97,110,
-    39,116,32,100,101,99,111,109,112,114,101,115,115,32,100,97,
-    116,97,59,32,122,108,105,98,32,110,111,116,32,97,118,97,
-    105,108,97,98,108,101,84,70,114,0,0,0,0,169,1,218,
-    10,100,101,99,111,109,112,114,101,115,115,122,25,122,105,112,
-    105,109,112,111,114,116,58,32,122,108,105,98,32,97,118,97,
-    105,108,97,98,108,101,41,7,218,15,95,105,109,112,111,114,
-    116,105,110,103,95,122,108,105,98,114,76,0,0,0,114,77,
-    0,0,0,114,3,0,0,0,90,4,122,108,105,98,114,141,
-    0,0,0,218,9,69,120,99,101,112,116,105,111,110,114,140,
+    116,104,101,32,109,111,100,117,108,101,32,99,111,117,108,100,
+    110,39,116,32,98,101,32,102,111,117,110,100,46,10,32,32,
+    32,32,32,32,32,32,78,114,57,0,0,0,114,58,0,0,
+    0,41,2,114,35,0,0,0,114,3,0,0,0,41,3,114,
+    32,0,0,0,114,38,0,0,0,114,39,0,0,0,114,9,
+    0,0,0,114,9,0,0,0,114,10,0,0,0,218,10,105,
+    115,95,112,97,99,107,97,103,101,221,0,0,0,115,8,0,
+    0,0,0,6,10,1,8,1,18,1,122,22,122,105,112,105,
+    109,112,111,114,116,101,114,46,105,115,95,112,97,99,107,97,
+    103,101,99,2,0,0,0,0,0,0,0,0,0,0,0,8,
+    0,0,0,8,0,0,0,67,0,0,0,115,246,0,0,0,
+    116,0,124,0,124,1,131,2,92,3,125,2,125,3,125,4,
+    116,1,106,2,160,3,124,1,161,1,125,5,124,5,100,1,
+    117,0,115,46,116,4,124,5,116,5,131,2,115,64,116,5,
+    124,1,131,1,125,5,124,5,116,1,106,2,124,1,60,0,
+    124,0,124,5,95,6,122,84,124,3,114,108,116,7,124,0,
+    124,1,131,2,125,6,116,8,160,9,124,0,106,10,124,6,
+    161,2,125,7,124,7,103,1,124,5,95,11,116,12,124,5,
+    100,2,131,2,115,124,116,13,124,5,95,13,116,8,160,14,
+    124,5,106,15,124,1,124,4,161,3,1,0,116,16,124,2,
+    124,5,106,15,131,2,1,0,87,0,110,22,1,0,1,0,
+    1,0,116,1,106,2,124,1,61,0,130,0,89,0,110,2,
+    48,0,122,14,116,1,106,2,124,1,25,0,125,5,87,0,
+    110,34,4,0,116,17,121,226,1,0,1,0,1,0,116,18,
+    100,3,124,1,155,2,100,4,157,3,131,1,130,1,89,0,
+    110,2,48,0,116,19,160,20,100,5,124,1,124,4,161,3,
+    1,0,124,5,83,0,41,6,122,245,108,111,97,100,95,109,
+    111,100,117,108,101,40,102,117,108,108,110,97,109,101,41,32,
+    45,62,32,109,111,100,117,108,101,46,10,10,32,32,32,32,
+    32,32,32,32,76,111,97,100,32,116,104,101,32,109,111,100,
+    117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,
+    32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,117,
+    108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,32,
+    116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108,
+    121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,116,
+    116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,101,
+    46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,101,
+    32,105,109,112,111,114,116,101,100,10,32,32,32,32,32,32,
+    32,32,109,111,100,117,108,101,44,32,111,114,32,114,97,105,
+    115,101,115,32,90,105,112,73,109,112,111,114,116,69,114,114,
+    111,114,32,105,102,32,105,116,32,119,97,115,110,39,116,32,
+    102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,
+    218,12,95,95,98,117,105,108,116,105,110,115,95,95,122,14,
+    76,111,97,100,101,100,32,109,111,100,117,108,101,32,122,25,
+    32,110,111,116,32,102,111,117,110,100,32,105,110,32,115,121,
+    115,46,109,111,100,117,108,101,115,122,30,105,109,112,111,114,
+    116,32,123,125,32,35,32,108,111,97,100,101,100,32,102,114,
+    111,109,32,90,105,112,32,123,125,41,21,114,44,0,0,0,
+    218,3,115,121,115,218,7,109,111,100,117,108,101,115,218,3,
+    103,101,116,114,15,0,0,0,218,12,95,109,111,100,117,108,
+    101,95,116,121,112,101,218,10,95,95,108,111,97,100,101,114,
+    95,95,114,36,0,0,0,114,21,0,0,0,114,30,0,0,
+    0,114,29,0,0,0,90,8,95,95,112,97,116,104,95,95,
+    218,7,104,97,115,97,116,116,114,114,66,0,0,0,90,14,
+    95,102,105,120,95,117,112,95,109,111,100,117,108,101,218,8,
+    95,95,100,105,99,116,95,95,218,4,101,120,101,99,114,26,
+    0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114,
+    218,10,95,98,111,111,116,115,116,114,97,112,218,16,95,118,
+    101,114,98,111,115,101,95,109,101,115,115,97,103,101,41,8,
+    114,32,0,0,0,114,38,0,0,0,114,46,0,0,0,114,
+    47,0,0,0,114,40,0,0,0,90,3,109,111,100,114,13,
+    0,0,0,114,63,0,0,0,114,9,0,0,0,114,9,0,
+    0,0,114,10,0,0,0,218,11,108,111,97,100,95,109,111,
+    100,117,108,101,234,0,0,0,115,48,0,0,0,0,7,16,
+    1,12,1,18,1,8,1,10,1,6,2,2,1,4,3,10,
+    1,14,1,8,2,10,1,6,1,16,1,16,1,6,1,8,
+    1,8,2,2,1,14,1,12,1,22,1,14,1,122,23,122,
+    105,112,105,109,112,111,114,116,101,114,46,108,111,97,100,95,
+    109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,
+    0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,
+    86,0,0,0,122,20,124,0,160,0,124,1,161,1,115,18,
+    87,0,100,1,83,0,87,0,110,20,4,0,116,1,121,40,
+    1,0,1,0,1,0,89,0,100,1,83,0,48,0,116,2,
+    106,3,115,76,100,2,100,3,108,4,109,5,125,2,1,0,
+    124,2,160,6,116,2,161,1,1,0,100,4,116,2,95,3,
+    116,2,124,0,124,1,131,2,83,0,41,5,122,204,82,101,
+    116,117,114,110,32,116,104,101,32,82,101,115,111,117,114,99,
+    101,82,101,97,100,101,114,32,102,111,114,32,97,32,112,97,
+    99,107,97,103,101,32,105,110,32,97,32,122,105,112,32,102,
+    105,108,101,46,10,10,32,32,32,32,32,32,32,32,73,102,
+    32,39,102,117,108,108,110,97,109,101,39,32,105,115,32,97,
+    32,112,97,99,107,97,103,101,32,119,105,116,104,105,110,32,
+    116,104,101,32,122,105,112,32,102,105,108,101,44,32,114,101,
+    116,117,114,110,32,116,104,101,10,32,32,32,32,32,32,32,
+    32,39,82,101,115,111,117,114,99,101,82,101,97,100,101,114,
+    39,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,
+    32,112,97,99,107,97,103,101,46,32,32,79,116,104,101,114,
+    119,105,115,101,32,114,101,116,117,114,110,32,78,111,110,101,
+    46,10,32,32,32,32,32,32,32,32,78,114,0,0,0,0,
+    41,1,218,14,82,101,115,111,117,114,99,101,82,101,97,100,
+    101,114,84,41,7,114,65,0,0,0,114,3,0,0,0,218,
+    24,95,90,105,112,73,109,112,111,114,116,82,101,115,111,117,
+    114,99,101,82,101,97,100,101,114,218,11,95,114,101,103,105,
+    115,116,101,114,101,100,90,13,105,109,112,111,114,116,108,105,
+    98,46,97,98,99,114,79,0,0,0,90,8,114,101,103,105,
+    115,116,101,114,41,3,114,32,0,0,0,114,38,0,0,0,
+    114,79,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+    10,0,0,0,218,19,103,101,116,95,114,101,115,111,117,114,
+    99,101,95,114,101,97,100,101,114,16,1,0,0,115,20,0,
+    0,0,0,6,2,1,10,1,10,1,12,1,8,1,6,1,
+    12,1,10,1,6,1,122,31,122,105,112,105,109,112,111,114,
+    116,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,
+    95,114,101,97,100,101,114,99,1,0,0,0,0,0,0,0,
+    0,0,0,0,1,0,0,0,5,0,0,0,67,0,0,0,
+    115,24,0,0,0,100,1,124,0,106,0,155,0,116,1,155,
+    0,124,0,106,2,155,0,100,2,157,5,83,0,41,3,78,
+    122,21,60,122,105,112,105,109,112,111,114,116,101,114,32,111,
+    98,106,101,99,116,32,34,122,2,34,62,41,3,114,29,0,
+    0,0,114,20,0,0,0,114,31,0,0,0,41,1,114,32,
     0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,
-    0,0,218,20,95,103,101,116,95,100,101,99,111,109,112,114,
-    101,115,115,95,102,117,110,99,254,1,0,0,115,24,0,0,
-    0,0,2,4,3,10,1,8,2,4,1,4,1,16,1,14,
-    1,10,1,18,2,6,2,10,1,114,144,0,0,0,99,2,
-    0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9,
-    0,0,0,67,0,0,0,115,128,1,0,0,124,1,92,8,
-    125,2,125,3,125,4,125,5,125,6,125,7,125,8,125,9,
-    124,4,100,1,107,0,114,36,116,0,100,2,131,1,130,1,
-    116,1,160,2,124,0,161,1,144,1,143,8,125,10,122,14,
-    124,10,160,3,124,6,161,1,1,0,87,0,110,38,4,0,
-    116,4,107,10,114,102,1,0,1,0,1,0,116,0,100,3,
-    124,0,155,2,157,2,124,0,100,4,141,2,130,1,89,0,
-    110,2,88,0,124,10,160,5,100,5,161,1,125,11,116,6,
-    124,11,131,1,100,5,107,3,114,134,116,7,100,6,131,1,
-    130,1,124,11,100,0,100,7,133,2,25,0,100,8,107,3,
-    114,168,116,0,100,9,124,0,155,2,157,2,124,0,100,4,
-    141,2,130,1,116,8,124,11,100,10,100,11,133,2,25,0,
-    131,1,125,12,116,8,124,11,100,11,100,5,133,2,25,0,
-    131,1,125,13,100,5,124,12,23,0,124,13,23,0,125,14,
-    124,6,124,14,55,0,125,6,122,14,124,10,160,3,124,6,
-    161,1,1,0,87,0,110,40,4,0,116,4,107,10,144,1,
-    114,18,1,0,1,0,1,0,116,0,100,3,124,0,155,2,
-    157,2,124,0,100,4,141,2,130,1,89,0,110,2,88,0,
-    124,10,160,5,124,4,161,1,125,15,116,6,124,15,131,1,
-    124,4,107,3,144,1,114,52,116,4,100,12,131,1,130,1,
-    87,0,53,0,81,0,82,0,88,0,124,3,100,1,107,2,
-    144,1,114,76,124,15,83,0,122,10,116,9,131,0,125,16,
-    87,0,110,30,4,0,116,10,107,10,144,1,114,116,1,0,
-    1,0,1,0,116,0,100,13,131,1,130,1,89,0,110,2,
-    88,0,124,16,124,15,100,14,131,2,83,0,41,15,78,114,
-    0,0,0,0,122,18,110,101,103,97,116,105,118,101,32,100,
-    97,116,97,32,115,105,122,101,114,92,0,0,0,114,12,0,
-    0,0,114,104,0,0,0,114,98,0,0,0,114,93,0,0,
-    0,115,4,0,0,0,80,75,3,4,122,23,98,97,100,32,
-    108,111,99,97,108,32,102,105,108,101,32,104,101,97,100,101,
-    114,58,32,233,26,0,0,0,114,103,0,0,0,122,26,122,
-    105,112,105,109,112,111,114,116,58,32,99,97,110,39,116,32,
-    114,101,97,100,32,100,97,116,97,114,139,0,0,0,105,241,
-    255,255,255,41,11,114,3,0,0,0,114,110,0,0,0,114,
-    111,0,0,0,114,112,0,0,0,114,22,0,0,0,114,114,
-    0,0,0,114,51,0,0,0,114,119,0,0,0,114,1,0,
-    0,0,114,144,0,0,0,114,143,0,0,0,41,17,114,29,
-    0,0,0,114,54,0,0,0,90,8,100,97,116,97,112,97,
-    116,104,114,130,0,0,0,114,134,0,0,0,114,125,0,0,
-    0,114,137,0,0,0,114,131,0,0,0,114,132,0,0,0,
-    114,133,0,0,0,114,123,0,0,0,114,124,0,0,0,114,
-    135,0,0,0,114,136,0,0,0,114,127,0,0,0,90,8,
-    114,97,119,95,100,97,116,97,114,141,0,0,0,114,9,0,
-    0,0,114,9,0,0,0,114,10,0,0,0,114,52,0,0,
-    0,19,2,0,0,115,62,0,0,0,0,1,20,1,8,1,
-    8,2,14,2,2,1,14,1,14,1,24,1,10,1,12,1,
-    8,2,16,2,18,2,16,1,16,1,12,1,8,1,2,1,
-    14,1,16,1,24,1,10,1,14,1,18,2,10,2,4,3,
-    2,1,10,1,16,1,14,1,114,52,0,0,0,99,2,0,
-    0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
-    0,0,67,0,0,0,115,16,0,0,0,116,0,124,0,124,
-    1,24,0,131,1,100,1,107,1,83,0,41,2,78,114,5,
-    0,0,0,41,1,218,3,97,98,115,41,2,90,2,116,49,
-    90,2,116,50,114,9,0,0,0,114,9,0,0,0,114,10,
-    0,0,0,218,9,95,101,113,95,109,116,105,109,101,65,2,
-    0,0,115,2,0,0,0,0,2,114,147,0,0,0,99,5,
-    0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,
-    0,0,0,67,0,0,0,115,60,1,0,0,124,3,124,2,
-    100,1,156,2,125,5,122,18,116,0,160,1,124,4,124,3,
-    124,5,161,3,125,6,87,0,110,22,4,0,116,2,107,10,
-    114,50,1,0,1,0,1,0,89,0,100,0,83,0,88,0,
-    124,6,100,2,64,0,100,3,107,3,125,7,124,7,114,182,
-    124,6,100,4,64,0,100,3,107,3,125,8,116,3,106,4,
-    100,5,107,3,114,180,124,8,115,104,116,3,106,4,100,6,
-    107,2,114,180,116,5,124,0,124,2,131,2,125,9,124,9,
-    100,0,107,9,114,180,116,3,160,6,116,0,106,7,124,9,
-    161,2,125,10,122,20,116,0,160,8,124,4,124,10,124,3,
-    124,5,161,4,1,0,87,0,110,22,4,0,116,2,107,10,
-    114,178,1,0,1,0,1,0,89,0,100,0,83,0,88,0,
-    110,84,116,9,124,0,124,2,131,2,92,2,125,11,125,12,
-    124,11,144,1,114,10,116,10,116,11,124,4,100,7,100,8,
-    133,2,25,0,131,1,124,11,131,2,114,246,116,11,124,4,
-    100,8,100,9,133,2,25,0,131,1,124,12,107,3,144,1,
-    114,10,116,12,160,13,100,10,124,3,155,2,157,2,161,1,
-    1,0,100,0,83,0,116,14,160,15,124,4,100,9,100,0,
-    133,2,25,0,161,1,125,13,116,16,124,13,116,17,131,2,
-    144,1,115,56,116,18,100,11,124,1,155,2,100,12,157,3,
-    131,1,130,1,124,13,83,0,41,13,78,41,2,114,59,0,
-    0,0,114,13,0,0,0,114,5,0,0,0,114,0,0,0,
-    0,114,86,0,0,0,90,5,110,101,118,101,114,90,6,97,
-    108,119,97,121,115,114,99,0,0,0,114,94,0,0,0,114,
-    95,0,0,0,122,22,98,121,116,101,99,111,100,101,32,105,
-    115,32,115,116,97,108,101,32,102,111,114,32,122,16,99,111,
-    109,112,105,108,101,100,32,109,111,100,117,108,101,32,122,21,
-    32,105,115,32,110,111,116,32,97,32,99,111,100,101,32,111,
-    98,106,101,99,116,41,19,114,21,0,0,0,90,13,95,99,
-    108,97,115,115,105,102,121,95,112,121,99,114,75,0,0,0,
-    218,4,95,105,109,112,90,21,99,104,101,99,107,95,104,97,
-    115,104,95,98,97,115,101,100,95,112,121,99,115,218,15,95,
-    103,101,116,95,112,121,99,95,115,111,117,114,99,101,218,11,
-    115,111,117,114,99,101,95,104,97,115,104,90,17,95,82,65,
-    87,95,77,65,71,73,67,95,78,85,77,66,69,82,90,18,
-    95,118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,
-    121,99,218,29,95,103,101,116,95,109,116,105,109,101,95,97,
-    110,100,95,115,105,122,101,95,111,102,95,115,111,117,114,99,
-    101,114,147,0,0,0,114,2,0,0,0,114,76,0,0,0,
-    114,77,0,0,0,218,7,109,97,114,115,104,97,108,90,5,
-    108,111,97,100,115,114,15,0,0,0,218,10,95,99,111,100,
-    101,95,116,121,112,101,218,9,84,121,112,101,69,114,114,111,
-    114,41,14,114,32,0,0,0,114,53,0,0,0,114,63,0,
-    0,0,114,38,0,0,0,114,126,0,0,0,90,11,101,120,
-    99,95,100,101,116,97,105,108,115,114,129,0,0,0,90,10,
-    104,97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,
-    107,95,115,111,117,114,99,101,90,12,115,111,117,114,99,101,
-    95,98,121,116,101,115,114,150,0,0,0,90,12,115,111,117,
-    114,99,101,95,109,116,105,109,101,90,11,115,111,117,114,99,
-    101,95,115,105,122,101,114,46,0,0,0,114,9,0,0,0,
-    114,9,0,0,0,114,10,0,0,0,218,15,95,117,110,109,
-    97,114,115,104,97,108,95,99,111,100,101,75,2,0,0,115,
-    88,0,0,0,0,2,2,1,2,254,6,5,2,1,18,1,
-    14,1,8,2,12,1,4,1,12,1,10,1,2,255,2,1,
-    8,255,2,2,10,1,8,1,4,1,4,1,2,254,4,5,
-    2,1,4,1,2,0,2,0,2,0,2,255,8,2,14,1,
-    10,3,8,255,6,3,6,3,22,1,18,255,4,2,4,1,
-    8,255,4,2,4,2,18,1,12,1,16,1,114,155,0,0,
-    0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,
-    0,0,4,0,0,0,67,0,0,0,115,28,0,0,0,124,
-    0,160,0,100,1,100,2,161,2,125,0,124,0,160,0,100,
-    3,100,2,161,2,125,0,124,0,83,0,41,4,78,115,2,
-    0,0,0,13,10,243,1,0,0,0,10,243,1,0,0,0,
-    13,41,1,114,19,0,0,0,41,1,218,6,115,111,117,114,
-    99,101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
-    0,218,23,95,110,111,114,109,97,108,105,122,101,95,108,105,
-    110,101,95,101,110,100,105,110,103,115,126,2,0,0,115,6,
-    0,0,0,0,1,12,1,12,1,114,159,0,0,0,99,2,
-    0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,
-    0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1,
-    131,1,125,1,116,1,124,1,124,0,100,1,100,2,100,3,
-    141,4,83,0,41,4,78,114,74,0,0,0,84,41,1,90,
-    12,100,111,110,116,95,105,110,104,101,114,105,116,41,2,114,
-    159,0,0,0,218,7,99,111,109,112,105,108,101,41,2,114,
-    53,0,0,0,114,158,0,0,0,114,9,0,0,0,114,9,
-    0,0,0,114,10,0,0,0,218,15,95,99,111,109,112,105,
-    108,101,95,115,111,117,114,99,101,133,2,0,0,115,4,0,
-    0,0,0,1,8,1,114,161,0,0,0,99,2,0,0,0,
-    0,0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,
-    67,0,0,0,115,68,0,0,0,116,0,160,1,124,0,100,
-    1,63,0,100,2,23,0,124,0,100,3,63,0,100,4,64,
-    0,124,0,100,5,64,0,124,1,100,6,63,0,124,1,100,
-    3,63,0,100,7,64,0,124,1,100,5,64,0,100,8,20,
-    0,100,9,100,9,100,9,102,9,161,1,83,0,41,10,78,
-    233,9,0,0,0,105,188,7,0,0,233,5,0,0,0,233,
-    15,0,0,0,233,31,0,0,0,233,11,0,0,0,233,63,
-    0,0,0,114,86,0,0,0,114,14,0,0,0,41,2,114,
-    131,0,0,0,90,6,109,107,116,105,109,101,41,2,218,1,
-    100,114,138,0,0,0,114,9,0,0,0,114,9,0,0,0,
-    114,10,0,0,0,218,14,95,112,97,114,115,101,95,100,111,
-    115,116,105,109,101,139,2,0,0,115,22,0,0,0,0,1,
-    4,1,10,1,10,1,6,1,6,1,10,1,10,1,2,0,
-    2,0,2,249,114,169,0,0,0,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,6,0,0,0,10,0,0,0,67,0,
-    0,0,115,116,0,0,0,122,82,124,1,100,1,100,0,133,
-    2,25,0,100,2,107,6,115,22,116,0,130,1,124,1,100,
-    0,100,1,133,2,25,0,125,1,124,0,106,1,124,1,25,
-    0,125,2,124,2,100,3,25,0,125,3,124,2,100,4,25,
-    0,125,4,124,2,100,5,25,0,125,5,116,2,124,4,124,
-    3,131,2,124,5,102,2,87,0,83,0,4,0,116,3,116,
-    4,116,5,102,3,107,10,114,110,1,0,1,0,1,0,89,
-    0,100,6,83,0,88,0,100,0,83,0,41,7,78,114,14,
-    0,0,0,169,2,218,1,99,218,1,111,114,163,0,0,0,
-    233,6,0,0,0,233,3,0,0,0,41,2,114,0,0,0,
-    0,114,0,0,0,0,41,6,218,14,65,115,115,101,114,116,
-    105,111,110,69,114,114,111,114,114,28,0,0,0,114,169,0,
-    0,0,114,26,0,0,0,218,10,73,110,100,101,120,69,114,
-    114,111,114,114,154,0,0,0,41,6,114,32,0,0,0,114,
-    13,0,0,0,114,54,0,0,0,114,131,0,0,0,114,132,
-    0,0,0,90,17,117,110,99,111,109,112,114,101,115,115,101,
-    100,95,115,105,122,101,114,9,0,0,0,114,9,0,0,0,
-    114,10,0,0,0,114,151,0,0,0,152,2,0,0,115,20,
-    0,0,0,0,1,2,2,20,1,12,1,10,3,8,1,8,
-    1,8,1,16,1,20,1,114,151,0,0,0,99,2,0,0,
-    0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,
-    0,67,0,0,0,115,86,0,0,0,124,1,100,1,100,0,
-    133,2,25,0,100,2,107,6,115,20,116,0,130,1,124,1,
-    100,0,100,1,133,2,25,0,125,1,122,14,124,0,106,1,
-    124,1,25,0,125,2,87,0,110,22,4,0,116,2,107,10,
-    114,68,1,0,1,0,1,0,89,0,100,0,83,0,88,0,
-    116,3,124,0,106,4,124,2,131,2,83,0,100,0,83,0,
-    41,3,78,114,14,0,0,0,114,170,0,0,0,41,5,114,
-    175,0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,
-    0,0,0,114,29,0,0,0,41,3,114,32,0,0,0,114,
-    13,0,0,0,114,54,0,0,0,114,9,0,0,0,114,9,
-    0,0,0,114,10,0,0,0,114,149,0,0,0,171,2,0,
-    0,115,14,0,0,0,0,2,20,1,12,2,2,1,14,1,
-    14,1,8,2,114,149,0,0,0,99,2,0,0,0,0,0,
-    0,0,0,0,0,0,11,0,0,0,9,0,0,0,67,0,
-    0,0,115,198,0,0,0,116,0,124,0,124,1,131,2,125,
-    2,116,1,68,0,93,160,92,3,125,3,125,4,125,5,124,
-    2,124,3,23,0,125,6,116,2,106,3,100,1,124,0,106,
-    4,116,5,124,6,100,2,100,3,141,5,1,0,122,14,124,
-    0,106,6,124,6,25,0,125,7,87,0,110,20,4,0,116,
-    7,107,10,114,88,1,0,1,0,1,0,89,0,113,14,88,
-    0,124,7,100,4,25,0,125,8,116,8,124,0,106,4,124,
-    7,131,2,125,9,124,4,114,132,116,9,124,0,124,8,124,
-    6,124,1,124,9,131,5,125,10,110,10,116,10,124,8,124,
-    9,131,2,125,10,124,10,100,0,107,8,114,152,113,14,124,
-    7,100,4,25,0,125,8,124,10,124,5,124,8,102,3,2,
-    0,1,0,83,0,113,14,116,11,100,5,124,1,155,2,157,
-    2,124,1,100,6,141,2,130,1,100,0,83,0,41,7,78,
-    122,13,116,114,121,105,110,103,32,123,125,123,125,123,125,114,
-    86,0,0,0,41,1,90,9,118,101,114,98,111,115,105,116,
-    121,114,0,0,0,0,114,57,0,0,0,114,58,0,0,0,
-    41,12,114,36,0,0,0,114,89,0,0,0,114,76,0,0,
-    0,114,77,0,0,0,114,29,0,0,0,114,20,0,0,0,
-    114,28,0,0,0,114,26,0,0,0,114,52,0,0,0,114,
-    155,0,0,0,114,161,0,0,0,114,3,0,0,0,41,11,
-    114,32,0,0,0,114,38,0,0,0,114,13,0,0,0,114,
-    90,0,0,0,114,91,0,0,0,114,47,0,0,0,114,63,
-    0,0,0,114,54,0,0,0,114,40,0,0,0,114,126,0,
-    0,0,114,46,0,0,0,114,9,0,0,0,114,9,0,0,
-    0,114,10,0,0,0,114,44,0,0,0,186,2,0,0,115,
-    36,0,0,0,0,1,10,1,14,1,8,1,22,1,2,1,
-    14,1,14,1,6,2,8,1,12,1,4,1,18,2,10,1,
-    8,3,2,1,8,1,16,2,114,44,0,0,0,99,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
-    0,0,64,0,0,0,115,60,0,0,0,101,0,90,1,100,
-    0,90,2,100,1,90,3,100,2,90,4,100,3,100,4,132,
-    0,90,5,100,5,100,6,132,0,90,6,100,7,100,8,132,
-    0,90,7,100,9,100,10,132,0,90,8,100,11,100,12,132,
-    0,90,9,100,13,83,0,41,14,114,80,0,0,0,122,165,
-    80,114,105,118,97,116,101,32,99,108,97,115,115,32,117,115,
-    101,100,32,116,111,32,115,117,112,112,111,114,116,32,90,105,
-    112,73,109,112,111,114,116,46,103,101,116,95,114,101,115,111,
-    117,114,99,101,95,114,101,97,100,101,114,40,41,46,10,10,
-    32,32,32,32,84,104,105,115,32,99,108,97,115,115,32,105,
-    115,32,97,108,108,111,119,101,100,32,116,111,32,114,101,102,
-    101,114,101,110,99,101,32,97,108,108,32,116,104,101,32,105,
-    110,110,97,114,100,115,32,97,110,100,32,112,114,105,118,97,
-    116,101,32,112,97,114,116,115,32,111,102,10,32,32,32,32,
-    116,104,101,32,122,105,112,105,109,112,111,114,116,101,114,46,
-    10,32,32,32,32,70,99,3,0,0,0,0,0,0,0,0,
+    0,0,218,8,95,95,114,101,112,114,95,95,34,1,0,0,
+    115,2,0,0,0,0,1,122,20,122,105,112,105,109,112,111,
+    114,116,101,114,46,95,95,114,101,112,114,95,95,41,1,78,
+    41,1,78,41,15,114,6,0,0,0,114,7,0,0,0,114,
+    8,0,0,0,218,7,95,95,100,111,99,95,95,114,34,0,
+    0,0,114,41,0,0,0,114,42,0,0,0,114,48,0,0,
+    0,114,55,0,0,0,114,56,0,0,0,114,64,0,0,0,
+    114,65,0,0,0,114,78,0,0,0,114,82,0,0,0,114,
+    83,0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,
+    0,0,0,114,10,0,0,0,114,4,0,0,0,45,0,0,
+    0,115,24,0,0,0,8,1,4,17,8,46,10,32,10,12,
+    8,10,8,21,8,11,8,26,8,13,8,38,8,18,122,12,
+    95,95,105,110,105,116,95,95,46,112,121,99,84,114,60,0,
+    0,0,70,41,3,122,4,46,112,121,99,84,70,41,3,114,
+    61,0,0,0,70,70,99,2,0,0,0,0,0,0,0,0,
+    0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
+    20,0,0,0,124,0,106,0,124,1,160,1,100,1,161,1,
+    100,2,25,0,23,0,83,0,41,3,78,218,1,46,233,2,
+    0,0,0,41,2,114,31,0,0,0,218,10,114,112,97,114,
+    116,105,116,105,111,110,41,2,114,32,0,0,0,114,38,0,
+    0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+    0,114,36,0,0,0,52,1,0,0,115,2,0,0,0,0,
+    1,114,36,0,0,0,99,2,0,0,0,0,0,0,0,0,
     0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,
-    16,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,
-    100,0,83,0,114,88,0,0,0,41,2,114,4,0,0,0,
-    114,38,0,0,0,41,3,114,32,0,0,0,114,4,0,0,
-    0,114,38,0,0,0,114,9,0,0,0,114,9,0,0,0,
-    114,10,0,0,0,114,34,0,0,0,220,2,0,0,115,4,
-    0,0,0,0,1,6,1,122,33,95,90,105,112,73,109,112,
-    111,114,116,82,101,115,111,117,114,99,101,82,101,97,100,101,
-    114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,
-    0,0,0,0,0,0,0,5,0,0,0,8,0,0,0,67,
-    0,0,0,115,92,0,0,0,124,0,106,0,160,1,100,1,
-    100,2,161,2,125,2,124,2,155,0,100,2,124,1,155,0,
-    157,3,125,3,100,3,100,4,108,2,109,3,125,4,1,0,
-    122,18,124,4,124,0,106,4,160,5,124,3,161,1,131,1,
-    87,0,83,0,4,0,116,6,107,10,114,86,1,0,1,0,
-    1,0,116,7,124,3,131,1,130,1,89,0,110,2,88,0,
-    100,0,83,0,41,5,78,114,85,0,0,0,114,109,0,0,
-    0,114,0,0,0,0,41,1,218,7,66,121,116,101,115,73,
-    79,41,8,114,38,0,0,0,114,19,0,0,0,90,2,105,
-    111,114,177,0,0,0,114,4,0,0,0,114,55,0,0,0,
-    114,22,0,0,0,218,17,70,105,108,101,78,111,116,70,111,
-    117,110,100,69,114,114,111,114,41,5,114,32,0,0,0,218,
-    8,114,101,115,111,117,114,99,101,218,16,102,117,108,108,110,
-    97,109,101,95,97,115,95,112,97,116,104,114,13,0,0,0,
-    114,177,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
-    10,0,0,0,218,13,111,112,101,110,95,114,101,115,111,117,
-    114,99,101,224,2,0,0,115,14,0,0,0,0,1,14,1,
-    14,1,12,1,2,1,18,1,14,1,122,38,95,90,105,112,
-    73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
-    97,100,101,114,46,111,112,101,110,95,114,101,115,111,117,114,
-    99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
-    0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0,
-    116,0,130,1,100,0,83,0,114,88,0,0,0,41,1,114,
-    178,0,0,0,41,2,114,32,0,0,0,114,179,0,0,0,
+    18,0,0,0,124,1,116,0,23,0,125,2,124,2,124,0,
+    106,1,118,0,83,0,169,1,78,41,2,114,20,0,0,0,
+    114,28,0,0,0,41,3,114,32,0,0,0,114,13,0,0,
+    0,90,7,100,105,114,112,97,116,104,114,9,0,0,0,114,
+    9,0,0,0,114,10,0,0,0,114,37,0,0,0,56,1,
+    0,0,115,4,0,0,0,0,4,8,2,114,37,0,0,0,
+    99,2,0,0,0,0,0,0,0,0,0,0,0,7,0,0,
+    0,4,0,0,0,67,0,0,0,115,56,0,0,0,116,0,
+    124,0,124,1,131,2,125,2,116,1,68,0,93,36,92,3,
+    125,3,125,4,125,5,124,2,124,3,23,0,125,6,124,6,
+    124,0,106,2,118,0,114,14,124,5,2,0,1,0,83,0,
+    113,14,100,0,83,0,114,88,0,0,0,41,3,114,36,0,
+    0,0,218,16,95,122,105,112,95,115,101,97,114,99,104,111,
+    114,100,101,114,114,28,0,0,0,41,7,114,32,0,0,0,
+    114,38,0,0,0,114,13,0,0,0,218,6,115,117,102,102,
+    105,120,218,10,105,115,98,121,116,101,99,111,100,101,114,47,
+    0,0,0,114,63,0,0,0,114,9,0,0,0,114,9,0,
+    0,0,114,10,0,0,0,114,35,0,0,0,65,1,0,0,
+    115,12,0,0,0,0,1,10,1,14,1,8,1,10,1,10,
+    1,114,35,0,0,0,99,1,0,0,0,0,0,0,0,0,
+    0,0,0,26,0,0,0,9,0,0,0,67,0,0,0,115,
+    2,5,0,0,122,14,116,0,160,1,124,0,161,1,125,1,
+    87,0,110,36,4,0,116,2,121,50,1,0,1,0,1,0,
+    116,3,100,1,124,0,155,2,157,2,124,0,100,2,141,2,
+    130,1,89,0,110,2,48,0,124,1,144,4,143,164,1,0,
+    122,36,124,1,160,4,116,5,11,0,100,3,161,2,1,0,
+    124,1,160,6,161,0,125,2,124,1,160,7,116,5,161,1,
+    125,3,87,0,110,36,4,0,116,2,121,132,1,0,1,0,
+    1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
+    141,2,130,1,89,0,110,2,48,0,116,8,124,3,131,1,
+    116,5,107,3,114,164,116,3,100,4,124,0,155,2,157,2,
+    124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2,
+    25,0,116,9,107,3,144,1,114,170,122,24,124,1,160,4,
+    100,6,100,3,161,2,1,0,124,1,160,6,161,0,125,4,
+    87,0,110,36,4,0,116,2,121,242,1,0,1,0,1,0,
+    116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+    130,1,89,0,110,2,48,0,116,10,124,4,116,11,24,0,
+    116,5,24,0,100,6,131,2,125,5,122,22,124,1,160,4,
+    124,5,161,1,1,0,124,1,160,7,161,0,125,6,87,0,
+    110,38,4,0,116,2,144,1,121,66,1,0,1,0,1,0,
+    116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+    130,1,89,0,110,2,48,0,124,6,160,12,116,9,161,1,
+    125,7,124,7,100,6,107,0,144,1,114,106,116,3,100,7,
+    124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,6,
+    124,7,124,7,116,5,23,0,133,2,25,0,125,3,116,8,
+    124,3,131,1,116,5,107,3,144,1,114,154,116,3,100,8,
+    124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,4,
+    116,8,124,6,131,1,24,0,124,7,23,0,125,2,116,13,
+    124,3,100,9,100,10,133,2,25,0,131,1,125,8,116,13,
+    124,3,100,10,100,11,133,2,25,0,131,1,125,9,124,2,
+    124,8,107,0,144,1,114,230,116,3,100,12,124,0,155,2,
+    157,2,124,0,100,2,141,2,130,1,124,2,124,9,107,0,
+    144,2,114,2,116,3,100,13,124,0,155,2,157,2,124,0,
+    100,2,141,2,130,1,124,2,124,8,56,0,125,2,124,2,
+    124,9,24,0,125,10,124,10,100,6,107,0,144,2,114,46,
+    116,3,100,14,124,0,155,2,157,2,124,0,100,2,141,2,
+    130,1,105,0,125,11,100,6,125,12,122,14,124,1,160,4,
+    124,2,161,1,1,0,87,0,110,38,4,0,116,2,144,2,
+    121,106,1,0,1,0,1,0,116,3,100,4,124,0,155,2,
+    157,2,124,0,100,2,141,2,130,1,89,0,110,2,48,0,
+    124,1,160,7,100,15,161,1,125,3,116,8,124,3,131,1,
+    100,5,107,0,144,2,114,140,116,14,100,16,131,1,130,1,
+    124,3,100,0,100,5,133,2,25,0,100,17,107,3,144,2,
+    114,162,144,4,113,208,116,8,124,3,131,1,100,15,107,3,
+    144,2,114,184,116,14,100,16,131,1,130,1,116,15,124,3,
+    100,18,100,19,133,2,25,0,131,1,125,13,116,15,124,3,
+    100,19,100,9,133,2,25,0,131,1,125,14,116,15,124,3,
+    100,9,100,20,133,2,25,0,131,1,125,15,116,15,124,3,
+    100,20,100,10,133,2,25,0,131,1,125,16,116,13,124,3,
+    100,10,100,11,133,2,25,0,131,1,125,17,116,13,124,3,
+    100,11,100,21,133,2,25,0,131,1,125,18,116,13,124,3,
+    100,21,100,22,133,2,25,0,131,1,125,4,116,15,124,3,
+    100,22,100,23,133,2,25,0,131,1,125,19,116,15,124,3,
+    100,23,100,24,133,2,25,0,131,1,125,20,116,15,124,3,
+    100,24,100,25,133,2,25,0,131,1,125,21,116,13,124,3,
+    100,26,100,15,133,2,25,0,131,1,125,22,124,19,124,20,
+    23,0,124,21,23,0,125,8,124,22,124,9,107,4,144,3,
+    114,144,116,3,100,27,124,0,155,2,157,2,124,0,100,2,
+    141,2,130,1,124,22,124,10,55,0,125,22,122,14,124,1,
+    160,7,124,19,161,1,125,23,87,0,110,38,4,0,116,2,
+    144,3,121,204,1,0,1,0,1,0,116,3,100,4,124,0,
+    155,2,157,2,124,0,100,2,141,2,130,1,89,0,110,2,
+    48,0,116,8,124,23,131,1,124,19,107,3,144,3,114,238,
+    116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+    130,1,122,50,116,8,124,1,160,7,124,8,124,19,24,0,
+    161,1,131,1,124,8,124,19,24,0,107,3,144,4,114,30,
+    116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+    130,1,87,0,110,38,4,0,116,2,144,4,121,70,1,0,
+    1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,
+    100,2,141,2,130,1,89,0,110,2,48,0,124,13,100,28,
+    64,0,144,4,114,92,124,23,160,16,161,0,125,23,110,52,
+    122,14,124,23,160,16,100,29,161,1,125,23,87,0,110,36,
+    4,0,116,17,144,4,121,142,1,0,1,0,1,0,124,23,
+    160,16,100,30,161,1,160,18,116,19,161,1,125,23,89,0,
+    110,2,48,0,124,23,160,20,100,31,116,21,161,2,125,23,
+    116,22,160,23,124,0,124,23,161,2,125,24,124,24,124,14,
+    124,18,124,4,124,22,124,15,124,16,124,17,102,8,125,25,
+    124,25,124,11,124,23,60,0,124,12,100,32,55,0,125,12,
+    144,2,113,108,87,0,100,0,4,0,4,0,131,3,1,0,
+    110,18,49,0,144,4,115,230,48,0,1,0,1,0,1,0,
+    89,0,1,0,116,24,160,25,100,33,124,12,124,0,161,3,
+    1,0,124,11,83,0,41,34,78,122,21,99,97,110,39,116,
+    32,111,112,101,110,32,90,105,112,32,102,105,108,101,58,32,
+    114,12,0,0,0,114,86,0,0,0,250,21,99,97,110,39,
+    116,32,114,101,97,100,32,90,105,112,32,102,105,108,101,58,
+    32,233,4,0,0,0,114,0,0,0,0,122,16,110,111,116,
+    32,97,32,90,105,112,32,102,105,108,101,58,32,122,18,99,
+    111,114,114,117,112,116,32,90,105,112,32,102,105,108,101,58,
+    32,233,12,0,0,0,233,16,0,0,0,233,20,0,0,0,
+    122,28,98,97,100,32,99,101,110,116,114,97,108,32,100,105,
+    114,101,99,116,111,114,121,32,115,105,122,101,58,32,122,30,
+    98,97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,
+    99,116,111,114,121,32,111,102,102,115,101,116,58,32,122,38,
+    98,97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,
+    99,116,111,114,121,32,115,105,122,101,32,111,114,32,111,102,
+    102,115,101,116,58,32,233,46,0,0,0,250,27,69,79,70,
+    32,114,101,97,100,32,119,104,101,114,101,32,110,111,116,32,
+    101,120,112,101,99,116,101,100,115,4,0,0,0,80,75,1,
+    2,233,8,0,0,0,233,10,0,0,0,233,14,0,0,0,
+    233,24,0,0,0,233,28,0,0,0,233,30,0,0,0,233,
+    32,0,0,0,233,34,0,0,0,233,42,0,0,0,122,25,
+    98,97,100,32,108,111,99,97,108,32,104,101,97,100,101,114,
+    32,111,102,102,115,101,116,58,32,105,0,8,0,0,218,5,
+    97,115,99,105,105,90,6,108,97,116,105,110,49,250,1,47,
+    114,5,0,0,0,122,33,122,105,112,105,109,112,111,114,116,
+    58,32,102,111,117,110,100,32,123,125,32,110,97,109,101,115,
+    32,105,110,32,123,33,114,125,41,26,218,3,95,105,111,218,
+    9,111,112,101,110,95,99,111,100,101,114,22,0,0,0,114,
+    3,0,0,0,218,4,115,101,101,107,218,20,69,78,68,95,
+    67,69,78,84,82,65,76,95,68,73,82,95,83,73,90,69,
+    90,4,116,101,108,108,218,4,114,101,97,100,114,51,0,0,
+    0,218,18,83,84,82,73,78,71,95,69,78,68,95,65,82,
+    67,72,73,86,69,218,3,109,97,120,218,15,77,65,88,95,
+    67,79,77,77,69,78,84,95,76,69,78,218,5,114,102,105,
+    110,100,114,2,0,0,0,218,8,69,79,70,69,114,114,111,
+    114,114,1,0,0,0,114,62,0,0,0,218,18,85,110,105,
+    99,111,100,101,68,101,99,111,100,101,69,114,114,111,114,218,
+    9,116,114,97,110,115,108,97,116,101,218,11,99,112,52,51,
+    55,95,116,97,98,108,101,114,19,0,0,0,114,20,0,0,
+    0,114,21,0,0,0,114,30,0,0,0,114,76,0,0,0,
+    114,77,0,0,0,41,26,114,29,0,0,0,218,2,102,112,
+    90,15,104,101,97,100,101,114,95,112,111,115,105,116,105,111,
+    110,218,6,98,117,102,102,101,114,218,9,102,105,108,101,95,
+    115,105,122,101,90,17,109,97,120,95,99,111,109,109,101,110,
+    116,95,115,116,97,114,116,218,4,100,97,116,97,90,3,112,
+    111,115,218,11,104,101,97,100,101,114,95,115,105,122,101,90,
+    13,104,101,97,100,101,114,95,111,102,102,115,101,116,90,10,
+    97,114,99,95,111,102,102,115,101,116,114,33,0,0,0,218,
+    5,99,111,117,110,116,218,5,102,108,97,103,115,218,8,99,
+    111,109,112,114,101,115,115,218,4,116,105,109,101,218,4,100,
+    97,116,101,218,3,99,114,99,218,9,100,97,116,97,95,115,
+    105,122,101,218,9,110,97,109,101,95,115,105,122,101,218,10,
+    101,120,116,114,97,95,115,105,122,101,90,12,99,111,109,109,
+    101,110,116,95,115,105,122,101,218,11,102,105,108,101,95,111,
+    102,102,115,101,116,114,59,0,0,0,114,13,0,0,0,218,
+    1,116,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+    0,114,27,0,0,0,96,1,0,0,115,212,0,0,0,0,
+    1,2,1,14,1,12,1,24,2,8,1,2,1,14,1,8,
+    1,14,1,12,1,24,1,12,1,18,1,18,3,2,1,12,
+    1,12,1,12,1,10,1,2,255,12,2,8,1,2,255,2,
+    1,2,255,4,2,2,1,10,1,12,1,14,1,10,1,2,
+    255,12,2,10,1,10,1,10,1,2,255,6,2,16,1,14,
+    1,10,1,2,255,6,2,16,2,16,1,16,1,10,1,18,
+    1,10,1,18,1,8,1,8,1,10,1,18,2,4,2,4,
+    1,2,1,14,1,14,1,24,2,10,1,14,1,8,2,18,
+    1,4,1,14,1,8,1,16,1,16,1,16,1,16,1,16,
+    1,16,1,16,1,16,1,16,1,16,1,16,1,12,1,10,
+    1,18,1,8,2,2,1,14,1,14,1,24,1,14,1,18,
+    4,2,1,28,1,22,1,14,1,24,2,10,2,10,3,2,
+    1,14,1,14,1,22,2,12,1,12,1,20,1,8,1,44,
+    1,14,1,114,27,0,0,0,117,190,1,0,0,0,1,2,
+    3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
+    19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
+    35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,
+    51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,
+    67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,
+    83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,
+    99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,
+    115,116,117,118,119,120,121,122,123,124,125,126,127,195,135,195,
+    188,195,169,195,162,195,164,195,160,195,165,195,167,195,170,195,
+    171,195,168,195,175,195,174,195,172,195,132,195,133,195,137,195,
+    166,195,134,195,180,195,182,195,178,195,187,195,185,195,191,195,
+    150,195,156,194,162,194,163,194,165,226,130,167,198,146,195,161,
+    195,173,195,179,195,186,195,177,195,145,194,170,194,186,194,191,
+    226,140,144,194,172,194,189,194,188,194,161,194,171,194,187,226,
+    150,145,226,150,146,226,150,147,226,148,130,226,148,164,226,149,
+    161,226,149,162,226,149,150,226,149,149,226,149,163,226,149,145,
+    226,149,151,226,149,157,226,149,156,226,149,155,226,148,144,226,
+    148,148,226,148,180,226,148,172,226,148,156,226,148,128,226,148,
+    188,226,149,158,226,149,159,226,149,154,226,149,148,226,149,169,
+    226,149,166,226,149,160,226,149,144,226,149,172,226,149,167,226,
+    149,168,226,149,164,226,149,165,226,149,153,226,149,152,226,149,
+    146,226,149,147,226,149,171,226,149,170,226,148,152,226,148,140,
+    226,150,136,226,150,132,226,150,140,226,150,144,226,150,128,206,
+    177,195,159,206,147,207,128,206,163,207,131,194,181,207,132,206,
+    166,206,152,206,169,206,180,226,136,158,207,134,206,181,226,136,
+    169,226,137,161,194,177,226,137,165,226,137,164,226,140,160,226,
+    140,161,195,183,226,137,136,194,176,226,136,153,194,183,226,136,
+    154,226,129,191,194,178,226,150,160,194,160,99,0,0,0,0,
+    0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,
+    67,0,0,0,115,110,0,0,0,116,0,114,22,116,1,160,
+    2,100,1,161,1,1,0,116,3,100,2,131,1,130,1,100,
+    3,97,0,122,62,122,16,100,4,100,5,108,4,109,5,125,
+    0,1,0,87,0,110,36,4,0,116,6,121,80,1,0,1,
+    0,1,0,116,1,160,2,100,1,161,1,1,0,116,3,100,
+    2,131,1,130,1,89,0,110,2,48,0,87,0,100,6,97,
+    0,110,6,100,6,97,0,48,0,116,1,160,2,100,7,161,
+    1,1,0,124,0,83,0,41,8,78,122,27,122,105,112,105,
+    109,112,111,114,116,58,32,122,108,105,98,32,85,78,65,86,
+    65,73,76,65,66,76,69,250,41,99,97,110,39,116,32,100,
+    101,99,111,109,112,114,101,115,115,32,100,97,116,97,59,32,
+    122,108,105,98,32,110,111,116,32,97,118,97,105,108,97,98,
+    108,101,84,114,0,0,0,0,169,1,218,10,100,101,99,111,
+    109,112,114,101,115,115,70,122,25,122,105,112,105,109,112,111,
+    114,116,58,32,122,108,105,98,32,97,118,97,105,108,97,98,
+    108,101,41,7,218,15,95,105,109,112,111,114,116,105,110,103,
+    95,122,108,105,98,114,76,0,0,0,114,77,0,0,0,114,
+    3,0,0,0,90,4,122,108,105,98,114,141,0,0,0,218,
+    9,69,120,99,101,112,116,105,111,110,114,140,0,0,0,114,
+    9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,20,
+    95,103,101,116,95,100,101,99,111,109,112,114,101,115,115,95,
+    102,117,110,99,254,1,0,0,115,24,0,0,0,0,2,4,
+    3,10,1,8,2,4,1,4,1,16,1,12,1,10,1,16,
+    2,12,2,10,1,114,144,0,0,0,99,2,0,0,0,0,
+    0,0,0,0,0,0,0,17,0,0,0,9,0,0,0,67,
+    0,0,0,115,144,1,0,0,124,1,92,8,125,2,125,3,
+    125,4,125,5,125,6,125,7,125,8,125,9,124,4,100,1,
+    107,0,114,36,116,0,100,2,131,1,130,1,116,1,160,2,
+    124,0,161,1,144,1,143,14,125,10,122,14,124,10,160,3,
+    124,6,161,1,1,0,87,0,110,36,4,0,116,4,121,100,
+    1,0,1,0,1,0,116,0,100,3,124,0,155,2,157,2,
+    124,0,100,4,141,2,130,1,89,0,110,2,48,0,124,10,
+    160,5,100,5,161,1,125,11,116,6,124,11,131,1,100,5,
+    107,3,114,132,116,7,100,6,131,1,130,1,124,11,100,0,
+    100,7,133,2,25,0,100,8,107,3,114,166,116,0,100,9,
+    124,0,155,2,157,2,124,0,100,4,141,2,130,1,116,8,
+    124,11,100,10,100,11,133,2,25,0,131,1,125,12,116,8,
+    124,11,100,11,100,5,133,2,25,0,131,1,125,13,100,5,
+    124,12,23,0,124,13,23,0,125,14,124,6,124,14,55,0,
+    125,6,122,14,124,10,160,3,124,6,161,1,1,0,87,0,
+    110,38,4,0,116,4,144,1,121,14,1,0,1,0,1,0,
+    116,0,100,3,124,0,155,2,157,2,124,0,100,4,141,2,
+    130,1,89,0,110,2,48,0,124,10,160,5,124,4,161,1,
+    125,15,116,6,124,15,131,1,124,4,107,3,144,1,114,48,
+    116,4,100,12,131,1,130,1,87,0,100,0,4,0,4,0,
+    131,3,1,0,110,18,49,0,144,1,115,70,48,0,1,0,
+    1,0,1,0,89,0,1,0,124,3,100,1,107,2,144,1,
+    114,94,124,15,83,0,122,10,116,9,131,0,125,16,87,0,
+    110,28,4,0,116,10,144,1,121,132,1,0,1,0,1,0,
+    116,0,100,13,131,1,130,1,89,0,110,2,48,0,124,16,
+    124,15,100,14,131,2,83,0,41,15,78,114,0,0,0,0,
+    122,18,110,101,103,97,116,105,118,101,32,100,97,116,97,32,
+    115,105,122,101,114,92,0,0,0,114,12,0,0,0,114,104,
+    0,0,0,114,98,0,0,0,114,93,0,0,0,115,4,0,
+    0,0,80,75,3,4,122,23,98,97,100,32,108,111,99,97,
+    108,32,102,105,108,101,32,104,101,97,100,101,114,58,32,233,
+    26,0,0,0,114,103,0,0,0,122,26,122,105,112,105,109,
+    112,111,114,116,58,32,99,97,110,39,116,32,114,101,97,100,
+    32,100,97,116,97,114,139,0,0,0,105,241,255,255,255,41,
+    11,114,3,0,0,0,114,110,0,0,0,114,111,0,0,0,
+    114,112,0,0,0,114,22,0,0,0,114,114,0,0,0,114,
+    51,0,0,0,114,119,0,0,0,114,1,0,0,0,114,144,
+    0,0,0,114,143,0,0,0,41,17,114,29,0,0,0,114,
+    54,0,0,0,90,8,100,97,116,97,112,97,116,104,114,130,
+    0,0,0,114,134,0,0,0,114,125,0,0,0,114,137,0,
+    0,0,114,131,0,0,0,114,132,0,0,0,114,133,0,0,
+    0,114,123,0,0,0,114,124,0,0,0,114,135,0,0,0,
+    114,136,0,0,0,114,127,0,0,0,90,8,114,97,119,95,
+    100,97,116,97,114,141,0,0,0,114,9,0,0,0,114,9,
+    0,0,0,114,10,0,0,0,114,52,0,0,0,19,2,0,
+    0,115,62,0,0,0,0,1,20,1,8,1,8,2,14,2,
+    2,1,14,1,12,1,24,1,10,1,12,1,8,2,16,2,
+    18,2,16,1,16,1,12,1,8,1,2,1,14,1,14,1,
+    24,1,10,1,14,1,40,2,10,2,4,3,2,1,10,1,
+    14,1,14,1,114,52,0,0,0,99,2,0,0,0,0,0,
+    0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,
+    0,0,115,16,0,0,0,116,0,124,0,124,1,24,0,131,
+    1,100,1,107,1,83,0,41,2,78,114,5,0,0,0,41,
+    1,218,3,97,98,115,41,2,90,2,116,49,90,2,116,50,
     114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,
-    13,114,101,115,111,117,114,99,101,95,112,97,116,104,233,2,
-    0,0,115,2,0,0,0,0,4,122,38,95,90,105,112,73,
-    109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,97,
-    100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,116,
-    104,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,
-    0,0,8,0,0,0,67,0,0,0,115,72,0,0,0,124,
-    0,106,0,160,1,100,1,100,2,161,2,125,2,124,2,155,
-    0,100,2,124,1,155,0,157,3,125,3,122,16,124,0,106,
-    2,160,3,124,3,161,1,1,0,87,0,110,22,4,0,116,
-    4,107,10,114,66,1,0,1,0,1,0,89,0,100,3,83,
-    0,88,0,100,4,83,0,41,5,78,114,85,0,0,0,114,
-    109,0,0,0,70,84,41,5,114,38,0,0,0,114,19,0,
-    0,0,114,4,0,0,0,114,55,0,0,0,114,22,0,0,
-    0,41,4,114,32,0,0,0,114,59,0,0,0,114,180,0,
-    0,0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,
-    0,114,10,0,0,0,218,11,105,115,95,114,101,115,111,117,
-    114,99,101,239,2,0,0,115,14,0,0,0,0,3,14,1,
-    14,1,2,1,16,1,14,1,8,1,122,36,95,90,105,112,
+    9,95,101,113,95,109,116,105,109,101,65,2,0,0,115,2,
+    0,0,0,0,2,114,147,0,0,0,99,5,0,0,0,0,
+    0,0,0,0,0,0,0,14,0,0,0,8,0,0,0,67,
+    0,0,0,115,56,1,0,0,124,3,124,2,100,1,156,2,
+    125,5,122,18,116,0,160,1,124,4,124,3,124,5,161,3,
+    125,6,87,0,110,20,4,0,116,2,121,48,1,0,1,0,
+    1,0,89,0,100,0,83,0,48,0,124,6,100,2,64,0,
+    100,3,107,3,125,7,124,7,114,178,124,6,100,4,64,0,
+    100,3,107,3,125,8,116,3,106,4,100,5,107,3,114,176,
+    124,8,115,102,116,3,106,4,100,6,107,2,114,176,116,5,
+    124,0,124,2,131,2,125,9,124,9,100,0,117,1,114,176,
+    116,3,160,6,116,0,106,7,124,9,161,2,125,10,122,20,
+    116,0,160,8,124,4,124,10,124,3,124,5,161,4,1,0,
+    87,0,110,20,4,0,116,2,121,174,1,0,1,0,1,0,
+    89,0,100,0,83,0,48,0,110,84,116,9,124,0,124,2,
+    131,2,92,2,125,11,125,12,124,11,144,1,114,6,116,10,
+    116,11,124,4,100,7,100,8,133,2,25,0,131,1,124,11,
+    131,2,114,242,116,11,124,4,100,8,100,9,133,2,25,0,
+    131,1,124,12,107,3,144,1,114,6,116,12,160,13,100,10,
+    124,3,155,2,157,2,161,1,1,0,100,0,83,0,116,14,
+    160,15,124,4,100,9,100,0,133,2,25,0,161,1,125,13,
+    116,16,124,13,116,17,131,2,144,1,115,52,116,18,100,11,
+    124,1,155,2,100,12,157,3,131,1,130,1,124,13,83,0,
+    41,13,78,41,2,114,59,0,0,0,114,13,0,0,0,114,
+    5,0,0,0,114,0,0,0,0,114,86,0,0,0,90,5,
+    110,101,118,101,114,90,6,97,108,119,97,121,115,114,99,0,
+    0,0,114,94,0,0,0,114,95,0,0,0,122,22,98,121,
+    116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,
+    102,111,114,32,122,16,99,111,109,112,105,108,101,100,32,109,
+    111,100,117,108,101,32,122,21,32,105,115,32,110,111,116,32,
+    97,32,99,111,100,101,32,111,98,106,101,99,116,41,19,114,
+    21,0,0,0,90,13,95,99,108,97,115,115,105,102,121,95,
+    112,121,99,114,75,0,0,0,218,4,95,105,109,112,90,21,
+    99,104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,
+    95,112,121,99,115,218,15,95,103,101,116,95,112,121,99,95,
+    115,111,117,114,99,101,218,11,115,111,117,114,99,101,95,104,
+    97,115,104,90,17,95,82,65,87,95,77,65,71,73,67,95,
+    78,85,77,66,69,82,90,18,95,118,97,108,105,100,97,116,
+    101,95,104,97,115,104,95,112,121,99,218,29,95,103,101,116,
+    95,109,116,105,109,101,95,97,110,100,95,115,105,122,101,95,
+    111,102,95,115,111,117,114,99,101,114,147,0,0,0,114,2,
+    0,0,0,114,76,0,0,0,114,77,0,0,0,218,7,109,
+    97,114,115,104,97,108,90,5,108,111,97,100,115,114,15,0,
+    0,0,218,10,95,99,111,100,101,95,116,121,112,101,218,9,
+    84,121,112,101,69,114,114,111,114,41,14,114,32,0,0,0,
+    114,53,0,0,0,114,63,0,0,0,114,38,0,0,0,114,
+    126,0,0,0,90,11,101,120,99,95,100,101,116,97,105,108,
+    115,114,129,0,0,0,90,10,104,97,115,104,95,98,97,115,
+    101,100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,
+    90,12,115,111,117,114,99,101,95,98,121,116,101,115,114,150,
+    0,0,0,90,12,115,111,117,114,99,101,95,109,116,105,109,
+    101,90,11,115,111,117,114,99,101,95,115,105,122,101,114,46,
+    0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,
+    0,0,218,15,95,117,110,109,97,114,115,104,97,108,95,99,
+    111,100,101,75,2,0,0,115,82,0,0,0,0,2,2,1,
+    2,254,6,5,2,1,18,1,12,1,8,2,12,1,4,1,
+    12,1,10,1,2,255,2,1,8,255,2,2,10,1,8,1,
+    4,1,4,1,2,254,4,5,2,1,4,1,8,255,8,2,
+    12,1,10,3,8,255,6,3,6,3,22,1,18,255,4,2,
+    4,1,8,255,4,2,4,2,18,1,12,1,16,1,114,155,
+    0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
+    1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,0,
+    0,124,0,160,0,100,1,100,2,161,2,125,0,124,0,160,
+    0,100,3,100,2,161,2,125,0,124,0,83,0,41,4,78,
+    115,2,0,0,0,13,10,243,1,0,0,0,10,243,1,0,
+    0,0,13,41,1,114,19,0,0,0,41,1,218,6,115,111,
+    117,114,99,101,114,9,0,0,0,114,9,0,0,0,114,10,
+    0,0,0,218,23,95,110,111,114,109,97,108,105,122,101,95,
+    108,105,110,101,95,101,110,100,105,110,103,115,126,2,0,0,
+    115,6,0,0,0,0,1,12,1,12,1,114,159,0,0,0,
+    99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,6,0,0,0,67,0,0,0,115,24,0,0,0,116,0,
+    124,1,131,1,125,1,116,1,124,1,124,0,100,1,100,2,
+    100,3,141,4,83,0,41,4,78,114,74,0,0,0,84,41,
+    1,90,12,100,111,110,116,95,105,110,104,101,114,105,116,41,
+    2,114,159,0,0,0,218,7,99,111,109,112,105,108,101,41,
+    2,114,53,0,0,0,114,158,0,0,0,114,9,0,0,0,
+    114,9,0,0,0,114,10,0,0,0,218,15,95,99,111,109,
+    112,105,108,101,95,115,111,117,114,99,101,133,2,0,0,115,
+    4,0,0,0,0,1,8,1,114,161,0,0,0,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,11,0,
+    0,0,67,0,0,0,115,68,0,0,0,116,0,160,1,124,
+    0,100,1,63,0,100,2,23,0,124,0,100,3,63,0,100,
+    4,64,0,124,0,100,5,64,0,124,1,100,6,63,0,124,
+    1,100,3,63,0,100,7,64,0,124,1,100,5,64,0,100,
+    8,20,0,100,9,100,9,100,9,102,9,161,1,83,0,41,
+    10,78,233,9,0,0,0,105,188,7,0,0,233,5,0,0,
+    0,233,15,0,0,0,233,31,0,0,0,233,11,0,0,0,
+    233,63,0,0,0,114,86,0,0,0,114,14,0,0,0,41,
+    2,114,131,0,0,0,90,6,109,107,116,105,109,101,41,2,
+    218,1,100,114,138,0,0,0,114,9,0,0,0,114,9,0,
+    0,0,114,10,0,0,0,218,14,95,112,97,114,115,101,95,
+    100,111,115,116,105,109,101,139,2,0,0,115,18,0,0,0,
+    0,1,4,1,10,1,10,1,6,1,6,1,10,1,10,1,
+    6,249,114,169,0,0,0,99,2,0,0,0,0,0,0,0,
+    0,0,0,0,6,0,0,0,10,0,0,0,67,0,0,0,
+    115,114,0,0,0,122,82,124,1,100,1,100,0,133,2,25,
+    0,100,2,118,0,115,22,74,0,130,1,124,1,100,0,100,
+    1,133,2,25,0,125,1,124,0,106,0,124,1,25,0,125,
+    2,124,2,100,3,25,0,125,3,124,2,100,4,25,0,125,
+    4,124,2,100,5,25,0,125,5,116,1,124,4,124,3,131,
+    2,124,5,102,2,87,0,83,0,4,0,116,2,116,3,116,
+    4,102,3,121,108,1,0,1,0,1,0,89,0,100,6,83,
+    0,48,0,100,0,83,0,41,7,78,114,14,0,0,0,169,
+    2,218,1,99,218,1,111,114,163,0,0,0,233,6,0,0,
+    0,233,3,0,0,0,41,2,114,0,0,0,0,114,0,0,
+    0,0,41,5,114,28,0,0,0,114,169,0,0,0,114,26,
+    0,0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,
+    154,0,0,0,41,6,114,32,0,0,0,114,13,0,0,0,
+    114,54,0,0,0,114,131,0,0,0,114,132,0,0,0,90,
+    17,117,110,99,111,109,112,114,101,115,115,101,100,95,115,105,
+    122,101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+    0,114,151,0,0,0,152,2,0,0,115,20,0,0,0,0,
+    1,2,2,20,1,12,1,10,3,8,1,8,1,8,1,16,
+    1,18,1,114,151,0,0,0,99,2,0,0,0,0,0,0,
+    0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,
+    0,115,84,0,0,0,124,1,100,1,100,0,133,2,25,0,
+    100,2,118,0,115,20,74,0,130,1,124,1,100,0,100,1,
+    133,2,25,0,125,1,122,14,124,0,106,0,124,1,25,0,
+    125,2,87,0,110,20,4,0,116,1,121,66,1,0,1,0,
+    1,0,89,0,100,0,83,0,48,0,116,2,124,0,106,3,
+    124,2,131,2,83,0,100,0,83,0,41,3,78,114,14,0,
+    0,0,114,170,0,0,0,41,4,114,28,0,0,0,114,26,
+    0,0,0,114,52,0,0,0,114,29,0,0,0,41,3,114,
+    32,0,0,0,114,13,0,0,0,114,54,0,0,0,114,9,
+    0,0,0,114,9,0,0,0,114,10,0,0,0,114,149,0,
+    0,0,171,2,0,0,115,14,0,0,0,0,2,20,1,12,
+    2,2,1,14,1,12,1,8,2,114,149,0,0,0,99,2,
+    0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,9,
+    0,0,0,67,0,0,0,115,196,0,0,0,116,0,124,0,
+    124,1,131,2,125,2,116,1,68,0,93,158,92,3,125,3,
+    125,4,125,5,124,2,124,3,23,0,125,6,116,2,106,3,
+    100,1,124,0,106,4,116,5,124,6,100,2,100,3,141,5,
+    1,0,122,14,124,0,106,6,124,6,25,0,125,7,87,0,
+    110,18,4,0,116,7,121,86,1,0,1,0,1,0,89,0,
+    113,14,48,0,124,7,100,4,25,0,125,8,116,8,124,0,
+    106,4,124,7,131,2,125,9,124,4,114,130,116,9,124,0,
+    124,8,124,6,124,1,124,9,131,5,125,10,110,10,116,10,
+    124,8,124,9,131,2,125,10,124,10,100,0,117,0,114,150,
+    113,14,124,7,100,4,25,0,125,8,124,10,124,5,124,8,
+    102,3,2,0,1,0,83,0,113,14,116,11,100,5,124,1,
+    155,2,157,2,124,1,100,6,141,2,130,1,100,0,83,0,
+    41,7,78,122,13,116,114,121,105,110,103,32,123,125,123,125,
+    123,125,114,86,0,0,0,41,1,90,9,118,101,114,98,111,
+    115,105,116,121,114,0,0,0,0,114,57,0,0,0,114,58,
+    0,0,0,41,12,114,36,0,0,0,114,89,0,0,0,114,
+    76,0,0,0,114,77,0,0,0,114,29,0,0,0,114,20,
+    0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,0,
+    0,0,114,155,0,0,0,114,161,0,0,0,114,3,0,0,
+    0,41,11,114,32,0,0,0,114,38,0,0,0,114,13,0,
+    0,0,114,90,0,0,0,114,91,0,0,0,114,47,0,0,
+    0,114,63,0,0,0,114,54,0,0,0,114,40,0,0,0,
+    114,126,0,0,0,114,46,0,0,0,114,9,0,0,0,114,
+    9,0,0,0,114,10,0,0,0,114,44,0,0,0,186,2,
+    0,0,115,36,0,0,0,0,1,10,1,14,1,8,1,22,
+    1,2,1,14,1,12,1,6,2,8,1,12,1,4,1,18,
+    2,10,1,8,3,2,1,8,1,16,2,114,44,0,0,0,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+    0,2,0,0,0,64,0,0,0,115,60,0,0,0,101,0,
+    90,1,100,0,90,2,100,1,90,3,100,2,90,4,100,3,
+    100,4,132,0,90,5,100,5,100,6,132,0,90,6,100,7,
+    100,8,132,0,90,7,100,9,100,10,132,0,90,8,100,11,
+    100,12,132,0,90,9,100,13,83,0,41,14,114,80,0,0,
+    0,122,165,80,114,105,118,97,116,101,32,99,108,97,115,115,
+    32,117,115,101,100,32,116,111,32,115,117,112,112,111,114,116,
+    32,90,105,112,73,109,112,111,114,116,46,103,101,116,95,114,
+    101,115,111,117,114,99,101,95,114,101,97,100,101,114,40,41,
+    46,10,10,32,32,32,32,84,104,105,115,32,99,108,97,115,
+    115,32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,
+    114,101,102,101,114,101,110,99,101,32,97,108,108,32,116,104,
+    101,32,105,110,110,97,114,100,115,32,97,110,100,32,112,114,
+    105,118,97,116,101,32,112,97,114,116,115,32,111,102,10,32,
+    32,32,32,116,104,101,32,122,105,112,105,109,112,111,114,116,
+    101,114,46,10,32,32,32,32,70,99,3,0,0,0,0,0,
+    0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,
+    0,0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,
+    0,95,1,100,0,83,0,114,88,0,0,0,41,2,114,4,
+    0,0,0,114,38,0,0,0,41,3,114,32,0,0,0,114,
+    4,0,0,0,114,38,0,0,0,114,9,0,0,0,114,9,
+    0,0,0,114,10,0,0,0,114,34,0,0,0,220,2,0,
+    0,115,4,0,0,0,0,1,6,1,122,33,95,90,105,112,
     73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
-    97,100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,
-    99,1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,
-    0,9,0,0,0,99,0,0,0,115,186,0,0,0,100,1,
-    100,2,108,0,109,1,125,1,1,0,124,1,124,0,106,2,
-    160,3,124,0,106,4,161,1,131,1,125,2,124,2,160,5,
-    124,0,106,2,106,6,161,1,125,3,124,3,106,7,100,3,
-    107,2,115,58,116,8,130,1,124,3,106,9,125,4,116,10,
-    131,0,125,5,124,0,106,2,106,11,68,0,93,102,125,6,
-    122,18,124,1,124,6,131,1,160,5,124,4,161,1,125,7,
-    87,0,110,24,4,0,116,12,107,10,114,124,1,0,1,0,
-    1,0,89,0,113,78,89,0,110,2,88,0,124,7,106,9,
-    106,7,125,8,116,13,124,8,131,1,100,1,107,2,114,156,
-    124,7,106,7,86,0,1,0,113,78,124,8,124,5,107,7,
-    114,78,124,5,160,14,124,8,161,1,1,0,124,8,86,0,
-    1,0,113,78,100,0,83,0,41,4,78,114,0,0,0,0,
-    41,1,218,4,80,97,116,104,114,60,0,0,0,41,15,90,
-    7,112,97,116,104,108,105,98,114,184,0,0,0,114,4,0,
-    0,0,114,56,0,0,0,114,38,0,0,0,90,11,114,101,
-    108,97,116,105,118,101,95,116,111,114,29,0,0,0,114,59,
-    0,0,0,114,175,0,0,0,90,6,112,97,114,101,110,116,
-    218,3,115,101,116,114,28,0,0,0,114,23,0,0,0,114,
-    51,0,0,0,218,3,97,100,100,41,9,114,32,0,0,0,
-    114,184,0,0,0,90,13,102,117,108,108,110,97,109,101,95,
-    112,97,116,104,90,13,114,101,108,97,116,105,118,101,95,112,
-    97,116,104,90,12,112,97,99,107,97,103,101,95,112,97,116,
-    104,90,12,115,117,98,100,105,114,115,95,115,101,101,110,218,
-    8,102,105,108,101,110,97,109,101,90,8,114,101,108,97,116,
-    105,118,101,90,11,112,97,114,101,110,116,95,110,97,109,101,
-    114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,
-    8,99,111,110,116,101,110,116,115,250,2,0,0,115,34,0,
-    0,0,0,8,12,1,18,1,14,3,14,1,6,1,6,1,
-    12,1,2,1,18,1,14,1,10,5,8,1,12,1,10,1,
-    8,1,10,1,122,33,95,90,105,112,73,109,112,111,114,116,
-    82,101,115,111,117,114,99,101,82,101,97,100,101,114,46,99,
-    111,110,116,101,110,116,115,78,41,10,114,6,0,0,0,114,
-    7,0,0,0,114,8,0,0,0,114,84,0,0,0,114,81,
-    0,0,0,114,34,0,0,0,114,181,0,0,0,114,182,0,
-    0,0,114,183,0,0,0,114,188,0,0,0,114,9,0,0,
+    97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,
+    0,0,0,0,0,0,0,0,0,0,5,0,0,0,8,0,
+    0,0,67,0,0,0,115,90,0,0,0,124,0,106,0,160,
+    1,100,1,100,2,161,2,125,2,124,2,155,0,100,2,124,
+    1,155,0,157,3,125,3,100,3,100,4,108,2,109,3,125,
+    4,1,0,122,18,124,4,124,0,106,4,160,5,124,3,161,
+    1,131,1,87,0,83,0,4,0,116,6,121,84,1,0,1,
+    0,1,0,116,7,124,3,131,1,130,1,89,0,110,2,48,
+    0,100,0,83,0,41,5,78,114,85,0,0,0,114,109,0,
+    0,0,114,0,0,0,0,41,1,218,7,66,121,116,101,115,
+    73,79,41,8,114,38,0,0,0,114,19,0,0,0,90,2,
+    105,111,114,176,0,0,0,114,4,0,0,0,114,55,0,0,
+    0,114,22,0,0,0,218,17,70,105,108,101,78,111,116,70,
+    111,117,110,100,69,114,114,111,114,41,5,114,32,0,0,0,
+    218,8,114,101,115,111,117,114,99,101,218,16,102,117,108,108,
+    110,97,109,101,95,97,115,95,112,97,116,104,114,13,0,0,
+    0,114,176,0,0,0,114,9,0,0,0,114,9,0,0,0,
+    114,10,0,0,0,218,13,111,112,101,110,95,114,101,115,111,
+    117,114,99,101,224,2,0,0,115,14,0,0,0,0,1,14,
+    1,14,1,12,1,2,1,18,1,12,1,122,38,95,90,105,
+    112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,
+    101,97,100,101,114,46,111,112,101,110,95,114,101,115,111,117,
+    114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
+    2,0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,
+    0,116,0,130,1,100,0,83,0,114,88,0,0,0,41,1,
+    114,177,0,0,0,41,2,114,32,0,0,0,114,178,0,0,
     0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
-    114,80,0,0,0,212,2,0,0,115,14,0,0,0,8,1,
-    4,5,4,2,8,4,8,9,8,6,8,11,114,80,0,0,
-    0,41,45,114,84,0,0,0,90,26,95,102,114,111,122,101,
-    110,95,105,109,112,111,114,116,108,105,98,95,101,120,116,101,
-    114,110,97,108,114,21,0,0,0,114,1,0,0,0,114,2,
-    0,0,0,90,17,95,102,114,111,122,101,110,95,105,109,112,
-    111,114,116,108,105,98,114,76,0,0,0,114,148,0,0,0,
-    114,110,0,0,0,114,152,0,0,0,114,67,0,0,0,114,
-    131,0,0,0,90,7,95,95,97,108,108,95,95,114,20,0,
-    0,0,90,15,112,97,116,104,95,115,101,112,97,114,97,116,
-    111,114,115,114,18,0,0,0,114,75,0,0,0,114,3,0,
-    0,0,114,25,0,0,0,218,4,116,121,112,101,114,70,0,
-    0,0,114,113,0,0,0,114,115,0,0,0,114,117,0,0,
-    0,114,4,0,0,0,114,89,0,0,0,114,36,0,0,0,
-    114,37,0,0,0,114,35,0,0,0,114,27,0,0,0,114,
-    122,0,0,0,114,142,0,0,0,114,144,0,0,0,114,52,
-    0,0,0,114,147,0,0,0,114,155,0,0,0,218,8,95,
-    95,99,111,100,101,95,95,114,153,0,0,0,114,159,0,0,
-    0,114,161,0,0,0,114,169,0,0,0,114,151,0,0,0,
-    114,149,0,0,0,114,44,0,0,0,114,80,0,0,0,114,
-    9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
-    0,0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,
-    0,115,88,0,0,0,4,16,8,1,16,1,8,1,8,1,
-    8,1,8,1,8,1,8,2,8,3,6,1,14,3,16,4,
-    4,2,8,2,4,1,4,1,4,2,14,127,0,127,0,1,
-    12,1,12,1,2,1,2,252,4,9,8,4,8,9,8,31,
-    8,126,2,254,2,29,4,5,8,21,8,46,8,10,8,46,
-    10,5,8,7,8,6,8,13,8,19,8,15,8,26,
+    218,13,114,101,115,111,117,114,99,101,95,112,97,116,104,233,
+    2,0,0,115,2,0,0,0,0,4,122,38,95,90,105,112,
+    73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
+    97,100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,
+    116,104,99,2,0,0,0,0,0,0,0,0,0,0,0,4,
+    0,0,0,8,0,0,0,67,0,0,0,115,70,0,0,0,
+    124,0,106,0,160,1,100,1,100,2,161,2,125,2,124,2,
+    155,0,100,2,124,1,155,0,157,3,125,3,122,16,124,0,
+    106,2,160,3,124,3,161,1,1,0,87,0,110,20,4,0,
+    116,4,121,64,1,0,1,0,1,0,89,0,100,3,83,0,
+    48,0,100,4,83,0,41,5,78,114,85,0,0,0,114,109,
+    0,0,0,70,84,41,5,114,38,0,0,0,114,19,0,0,
+    0,114,4,0,0,0,114,55,0,0,0,114,22,0,0,0,
+    41,4,114,32,0,0,0,114,59,0,0,0,114,179,0,0,
+    0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,0,
+    114,10,0,0,0,218,11,105,115,95,114,101,115,111,117,114,
+    99,101,239,2,0,0,115,14,0,0,0,0,3,14,1,14,
+    1,2,1,16,1,12,1,8,1,122,36,95,90,105,112,73,
+    109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,97,
+    100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,99,
+    1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,
+    9,0,0,0,99,0,0,0,115,184,0,0,0,100,1,100,
+    2,108,0,109,1,125,1,1,0,124,1,124,0,106,2,160,
+    3,124,0,106,4,161,1,131,1,125,2,124,2,160,5,124,
+    0,106,2,106,6,161,1,125,3,124,3,106,7,100,3,107,
+    2,115,58,74,0,130,1,124,3,106,8,125,4,116,9,131,
+    0,125,5,124,0,106,2,106,10,68,0,93,100,125,6,122,
+    18,124,1,124,6,131,1,160,5,124,4,161,1,125,7,87,
+    0,110,22,4,0,116,11,121,122,1,0,1,0,1,0,89,
+    0,113,78,89,0,110,2,48,0,124,7,106,8,106,7,125,
+    8,116,12,124,8,131,1,100,1,107,2,114,154,124,7,106,
+    7,86,0,1,0,113,78,124,8,124,5,118,1,114,78,124,
+    5,160,13,124,8,161,1,1,0,124,8,86,0,1,0,113,
+    78,100,0,83,0,41,4,78,114,0,0,0,0,41,1,218,
+    4,80,97,116,104,114,60,0,0,0,41,14,90,7,112,97,
+    116,104,108,105,98,114,183,0,0,0,114,4,0,0,0,114,
+    56,0,0,0,114,38,0,0,0,90,11,114,101,108,97,116,
+    105,118,101,95,116,111,114,29,0,0,0,114,59,0,0,0,
+    90,6,112,97,114,101,110,116,218,3,115,101,116,114,28,0,
+    0,0,114,23,0,0,0,114,51,0,0,0,218,3,97,100,
+    100,41,9,114,32,0,0,0,114,183,0,0,0,90,13,102,
+    117,108,108,110,97,109,101,95,112,97,116,104,90,13,114,101,
+    108,97,116,105,118,101,95,112,97,116,104,90,12,112,97,99,
+    107,97,103,101,95,112,97,116,104,90,12,115,117,98,100,105,
+    114,115,95,115,101,101,110,218,8,102,105,108,101,110,97,109,
+    101,90,8,114,101,108,97,116,105,118,101,90,11,112,97,114,
+    101,110,116,95,110,97,109,101,114,9,0,0,0,114,9,0,
+    0,0,114,10,0,0,0,218,8,99,111,110,116,101,110,116,
+    115,250,2,0,0,115,34,0,0,0,0,8,12,1,18,1,
+    14,3,14,1,6,1,6,1,12,1,2,1,18,1,12,1,
+    10,5,8,1,12,1,10,1,8,1,10,1,122,33,95,90,
+    105,112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,
+    82,101,97,100,101,114,46,99,111,110,116,101,110,116,115,78,
+    41,10,114,6,0,0,0,114,7,0,0,0,114,8,0,0,
+    0,114,84,0,0,0,114,81,0,0,0,114,34,0,0,0,
+    114,180,0,0,0,114,181,0,0,0,114,182,0,0,0,114,
+    187,0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,
+    0,0,0,114,10,0,0,0,114,80,0,0,0,212,2,0,
+    0,115,14,0,0,0,8,1,4,5,4,2,8,4,8,9,
+    8,6,8,11,114,80,0,0,0,41,45,114,84,0,0,0,
+    90,26,95,102,114,111,122,101,110,95,105,109,112,111,114,116,
+    108,105,98,95,101,120,116,101,114,110,97,108,114,21,0,0,
+    0,114,1,0,0,0,114,2,0,0,0,90,17,95,102,114,
+    111,122,101,110,95,105,109,112,111,114,116,108,105,98,114,76,
+    0,0,0,114,148,0,0,0,114,110,0,0,0,114,152,0,
+    0,0,114,67,0,0,0,114,131,0,0,0,90,7,95,95,
+    97,108,108,95,95,114,20,0,0,0,90,15,112,97,116,104,
+    95,115,101,112,97,114,97,116,111,114,115,114,18,0,0,0,
+    114,75,0,0,0,114,3,0,0,0,114,25,0,0,0,218,
+    4,116,121,112,101,114,70,0,0,0,114,113,0,0,0,114,
+    115,0,0,0,114,117,0,0,0,114,4,0,0,0,114,89,
+    0,0,0,114,36,0,0,0,114,37,0,0,0,114,35,0,
+    0,0,114,27,0,0,0,114,122,0,0,0,114,142,0,0,
+    0,114,144,0,0,0,114,52,0,0,0,114,147,0,0,0,
+    114,155,0,0,0,218,8,95,95,99,111,100,101,95,95,114,
+    153,0,0,0,114,159,0,0,0,114,161,0,0,0,114,169,
+    0,0,0,114,151,0,0,0,114,149,0,0,0,114,44,0,
+    0,0,114,80,0,0,0,114,9,0,0,0,114,9,0,0,
+    0,114,9,0,0,0,114,10,0,0,0,218,8,60,109,111,
+    100,117,108,101,62,1,0,0,0,115,88,0,0,0,4,16,
+    8,1,16,1,8,1,8,1,8,1,8,1,8,1,8,2,
+    8,3,6,1,14,3,16,4,4,2,8,2,4,1,4,1,
+    4,2,14,127,0,127,0,1,12,1,12,1,2,1,2,252,
+    4,9,8,4,8,9,8,31,8,126,2,254,2,29,4,5,
+    8,21,8,46,8,10,8,46,10,5,8,7,8,6,8,13,
+    8,19,8,15,8,26,
 };
diff --git a/Python/initconfig.c b/Python/initconfig.c
index a930b5d..3caed38 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -1,27 +1,33 @@
 #include "Python.h"
-#include "osdefs.h"       /* DELIM */
-#include "pycore_fileutils.h"
-#include "pycore_getopt.h"
-#include "pycore_initconfig.h"
-#include "pycore_pathconfig.h"
-#include "pycore_pyerrors.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"   /* _PyRuntime */
-#include <locale.h>       /* setlocale() */
+#include "pycore_fileutils.h"     // _Py_HasFileSystemDefaultEncodeErrors
+#include "pycore_getopt.h"        // _PyOS_GetOpt()
+#include "pycore_initconfig.h"    // _PyStatus_OK()
+#include "pycore_interp.h"        // _PyInterpreterState.runtime
+#include "pycore_pathconfig.h"    // _Py_path_config
+#include "pycore_pyerrors.h"      // _PyErr_Fetch()
+#include "pycore_pylifecycle.h"   // _Py_PreInitializeFromConfig()
+#include "pycore_pymem.h"         // _PyMem_SetDefaultAllocator()
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+
+#include "osdefs.h"               // DELIM
+#include <locale.h>               // setlocale()
 #ifdef HAVE_LANGINFO_H
-#  include <langinfo.h>   /* nl_langinfo(CODESET) */
+#  include <langinfo.h>           // nl_langinfo(CODESET)
 #endif
 #if defined(MS_WINDOWS) || defined(__CYGWIN__)
-#  include <windows.h>    /* GetACP() */
+#  include <windows.h>            // GetACP()
 #  ifdef HAVE_IO_H
 #    include <io.h>
 #  endif
 #  ifdef HAVE_FCNTL_H
-#    include <fcntl.h>    /* O_BINARY */
+#    include <fcntl.h>            // O_BINARY
 #  endif
 #endif
 
+#ifndef PLATLIBDIR
+#  error "PLATLIBDIR macro must be defined"
+#endif
+
 
 /* --- Command line options --------------------------------------- */
 
@@ -36,7 +42,8 @@
          and comparing bytes/bytearray with str. (-bb: issue errors)\n\
 -B     : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x\n\
 -c cmd : program passed in as string (terminates option list)\n\
--d     : debug output from parser; also PYTHONDEBUG=x\n\
+-d     : turn on parser debugging output (for experts only, only works on\n\
+         debug builds); also PYTHONDEBUG=x\n\
 -E     : ignore PYTHON* environment variables (such as PYTHONPATH)\n\
 -h     : print this help message and exit (also --help)\n\
 ";
@@ -66,6 +73,7 @@
 -X opt : set implementation-specific option. The following options are available:\n\
 \n\
          -X faulthandler: enable faulthandler\n\
+         -X oldparser: enable the traditional LL(1) parser; also PYTHONOLDPARSER\n\
          -X showrefcount: output the total reference count and number of used\n\
              memory blocks when the program finishes or after each statement in the\n\
              interactive interpreter. This only works on debug builds\n\
@@ -73,14 +81,11 @@
              tracemalloc module. By default, only the most recent frame is stored in a\n\
              traceback of a trace. Use -X tracemalloc=NFRAME to start tracing with a\n\
              traceback limit of NFRAME frames\n\
-         -X showalloccount: output the total count of allocated objects for each\n\
-             type when the program finishes. This only works when Python was built with\n\
-             COUNT_ALLOCS defined\n\
          -X importtime: show how long each import takes. It shows module name,\n\
              cumulative time (including nested imports) and self time (excluding\n\
              nested imports). Note that its output may be broken in multi-threaded\n\
              application. Typical usage is python3 -X importtime -c 'import asyncio'\n\
-         -X dev: enable CPython’s “development mode”, introducing additional runtime\n\
+         -X dev: enable CPython's \"development mode\", introducing additional runtime\n\
              checks which are too expensive to be enabled by default. Effect of the\n\
              developer mode:\n\
                 * Add default warning filter, as -W default\n\
@@ -110,6 +115,7 @@
 static const char usage_5[] =
 "PYTHONHOME   : alternate <prefix> directory (or <prefix>%lc<exec_prefix>).\n"
 "               The default module search path uses %s.\n"
+"PYTHONPLATLIBDIR : override sys.platlibdir.\n"
 "PYTHONCASEOK : ignore case in 'import' statements (Windows).\n"
 "PYTHONUTF8: if set to 1, enable the UTF-8 mode.\n"
 "PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n"
@@ -543,8 +549,6 @@
 }
 
 
-/* Make the *original* argc/argv available to other modules.
-   This is rare, but it is needed by the secureware extension. */
 void
 Py_GetArgcArgv(int *argc, wchar_t ***argv)
 {
@@ -588,6 +592,7 @@
     CLEAR(config->base_prefix);
     CLEAR(config->exec_prefix);
     CLEAR(config->base_exec_prefix);
+    CLEAR(config->platlibdir);
 
     CLEAR(config->filesystem_encoding);
     CLEAR(config->filesystem_errors);
@@ -597,6 +602,8 @@
     CLEAR(config->run_module);
     CLEAR(config->run_filename);
     CLEAR(config->check_hash_pycs_mode);
+
+    _PyWideStringList_Clear(&config->_orig_argv);
 #undef CLEAR
 }
 
@@ -632,9 +639,11 @@
     config->check_hash_pycs_mode = NULL;
     config->pathconfig_warnings = -1;
     config->_init_main = 1;
+    config->_isolated_interpreter = 0;
 #ifdef MS_WINDOWS
     config->legacy_windows_stdio = -1;
 #endif
+    config->_use_peg_parser = 1;
 }
 
 
@@ -792,6 +801,7 @@
     COPY_ATTR(isolated);
     COPY_ATTR(use_environment);
     COPY_ATTR(dev_mode);
+    COPY_ATTR(_use_peg_parser);
     COPY_ATTR(install_signal_handlers);
     COPY_ATTR(use_hash_seed);
     COPY_ATTR(hash_seed);
@@ -800,7 +810,6 @@
     COPY_ATTR(tracemalloc);
     COPY_ATTR(import_time);
     COPY_ATTR(show_ref_count);
-    COPY_ATTR(show_alloc_count);
     COPY_ATTR(dump_refs);
     COPY_ATTR(malloc_stats);
 
@@ -822,6 +831,7 @@
     COPY_WSTR_ATTR(base_prefix);
     COPY_WSTR_ATTR(exec_prefix);
     COPY_WSTR_ATTR(base_exec_prefix);
+    COPY_WSTR_ATTR(platlibdir);
 
     COPY_ATTR(site_import);
     COPY_ATTR(bytes_warning);
@@ -849,6 +859,8 @@
     COPY_WSTR_ATTR(check_hash_pycs_mode);
     COPY_ATTR(pathconfig_warnings);
     COPY_ATTR(_init_main);
+    COPY_ATTR(_isolated_interpreter);
+    COPY_WSTRLIST(_orig_argv);
 
 #undef COPY_ATTR
 #undef COPY_WSTR_ATTR
@@ -896,6 +908,7 @@
     SET_ITEM_INT(isolated);
     SET_ITEM_INT(use_environment);
     SET_ITEM_INT(dev_mode);
+    SET_ITEM_INT(_use_peg_parser);
     SET_ITEM_INT(install_signal_handlers);
     SET_ITEM_INT(use_hash_seed);
     SET_ITEM_UINT(hash_seed);
@@ -903,7 +916,6 @@
     SET_ITEM_INT(tracemalloc);
     SET_ITEM_INT(import_time);
     SET_ITEM_INT(show_ref_count);
-    SET_ITEM_INT(show_alloc_count);
     SET_ITEM_INT(dump_refs);
     SET_ITEM_INT(malloc_stats);
     SET_ITEM_WSTR(filesystem_encoding);
@@ -923,6 +935,7 @@
     SET_ITEM_WSTR(base_prefix);
     SET_ITEM_WSTR(exec_prefix);
     SET_ITEM_WSTR(base_exec_prefix);
+    SET_ITEM_WSTR(platlibdir);
     SET_ITEM_INT(site_import);
     SET_ITEM_INT(bytes_warning);
     SET_ITEM_INT(inspect);
@@ -948,6 +961,8 @@
     SET_ITEM_WSTR(check_hash_pycs_mode);
     SET_ITEM_INT(pathconfig_warnings);
     SET_ITEM_INT(_init_main);
+    SET_ITEM_INT(_isolated_interpreter);
+    SET_ITEM_WSTRLIST(_orig_argv);
 
     return dict;
 
@@ -1119,7 +1134,7 @@
        or rather, to work around Apple's overly strict requirements of
        the process name. However, we still need a usable sys.executable,
        so the actual executable path is passed in an environment variable.
-       See Lib/plat-mac/bundlebuiler.py for details about the bootstrap
+       See Lib/plat-mac/bundlebuilder.py for details about the bootstrap
        script. */
     const char *p = config_get_env(config, "PYTHONEXECUTABLE");
     if (p != NULL) {
@@ -1332,6 +1347,14 @@
         }
     }
 
+    if(config->platlibdir == NULL) {
+        status = CONFIG_GET_ENV_DUP(config, &config->platlibdir,
+                                    L"PYTHONPLATLIBDIR", "PYTHONPLATLIBDIR");
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+    }
+
     if (config->use_hash_seed < 0) {
         status = config_init_hash_seed(config);
         if (_PyStatus_EXCEPTION(status)) {
@@ -1431,6 +1454,11 @@
         config->import_time = 1;
     }
 
+    if (config_get_env(config, "PYTHONOLDPARSER")
+       || config_get_xoption(config, L"oldparser")) {
+        config->_use_peg_parser = 0;
+    }
+
     PyStatus status;
     if (config->tracemalloc < 0) {
         status = config_init_tracemalloc(config);
@@ -1450,7 +1478,7 @@
 
 
 static const wchar_t *
-config_get_stdio_errors(const PyConfig *config)
+config_get_stdio_errors(void)
 {
 #ifndef MS_WINDOWS
     const char *loc = setlocale(LC_CTYPE, NULL);
@@ -1606,7 +1634,7 @@
         }
     }
     if (config->stdio_errors == NULL) {
-        const wchar_t *errors = config_get_stdio_errors(config);
+        const wchar_t *errors = config_get_stdio_errors();
         assert(errors != NULL);
 
         status = PyConfig_SetString(config, &config->stdio_errors, errors);
@@ -1702,9 +1730,6 @@
     if (config_get_xoption(config, L"showrefcount")) {
         config->show_ref_count = 1;
     }
-    if (config_get_xoption(config, L"showalloccount")) {
-        config->show_alloc_count = 1;
-    }
 
     status = config_read_complex_options(config);
     if (_PyStatus_EXCEPTION(status)) {
@@ -1725,6 +1750,14 @@
         }
     }
 
+    if(config->platlibdir == NULL) {
+        status = CONFIG_SET_BYTES_STR(config, &config->platlibdir, PLATLIBDIR,
+                                      "PLATLIBDIR macro");
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+    }
+
     if (config->_install_importlib) {
         status = _PyConfig_InitPathConfig(config);
         if (_PyStatus_EXCEPTION(status)) {
@@ -1826,7 +1859,7 @@
 
    - set Py_xxx global configuration variables
    - initialize C standard streams (stdin, stdout, stderr) */
-void
+PyStatus
 _PyConfig_Write(const PyConfig *config, _PyRuntimeState *runtime)
 {
     config_set_global_vars(config);
@@ -1840,6 +1873,13 @@
     preconfig->isolated = config->isolated;
     preconfig->use_environment = config->use_environment;
     preconfig->dev_mode = config->dev_mode;
+
+    if (_Py_SetArgcArgv(config->_orig_argv.length,
+                        config->_orig_argv.items) < 0)
+    {
+        return _PyStatus_NO_MEMORY();
+    }
+    return _PyStatus_OK();
 }
 
 
@@ -2241,6 +2281,7 @@
         /* Force sys.argv[0] = '-m'*/
         arg0 = L"-m";
     }
+
     if (arg0 != NULL) {
         arg0 = _PyMem_RawWcsdup(arg0);
         if (arg0 == NULL) {
@@ -2291,6 +2332,37 @@
 }
 
 
+/* Get run_filename absolute path */
+static PyStatus
+config_run_filename_abspath(PyConfig *config)
+{
+    if (!config->run_filename) {
+        return _PyStatus_OK();
+    }
+
+#ifndef MS_WINDOWS
+    if (_Py_isabs(config->run_filename)) {
+        /* path is already absolute */
+        return _PyStatus_OK();
+    }
+#endif
+
+    wchar_t *abs_filename;
+    if (_Py_abspath(config->run_filename, &abs_filename) < 0) {
+        /* failed to get the absolute path of the command line filename:
+           ignore the error, keep the relative path */
+        return _PyStatus_OK();
+    }
+    if (abs_filename == NULL) {
+        return _PyStatus_NO_MEMORY();
+    }
+
+    PyMem_RawFree(config->run_filename);
+    config->run_filename = abs_filename;
+    return _PyStatus_OK();
+}
+
+
 static PyStatus
 config_read_cmdline(PyConfig *config)
 {
@@ -2317,11 +2389,22 @@
             goto done;
         }
 
+        status = config_run_filename_abspath(config);
+        if (_PyStatus_EXCEPTION(status)) {
+            goto done;
+        }
+
         status = config_update_argv(config, opt_index);
         if (_PyStatus_EXCEPTION(status)) {
             goto done;
         }
     }
+    else {
+        status = config_run_filename_abspath(config);
+        if (_PyStatus_EXCEPTION(status)) {
+            goto done;
+        }
+    }
 
     if (config->use_environment) {
         status = config_init_env_warnoptions(config, &env_warnoptions);
@@ -2420,7 +2503,6 @@
 PyConfig_Read(PyConfig *config)
 {
     PyStatus status;
-    PyWideStringList orig_argv = _PyWideStringList_INIT;
 
     status = _Py_PreInitializeFromConfig(config, NULL);
     if (_PyStatus_EXCEPTION(status)) {
@@ -2429,8 +2511,13 @@
 
     config_get_global_vars(config);
 
-    if (_PyWideStringList_Copy(&orig_argv, &config->argv) < 0) {
-        return _PyStatus_NO_MEMORY();
+    if (config->_orig_argv.length == 0
+        && !(config->argv.length == 1
+             && wcscmp(config->argv.items[0], L"") == 0))
+    {
+        if (_PyWideStringList_Copy(&config->_orig_argv, &config->argv) < 0) {
+            return _PyStatus_NO_MEMORY();
+        }
     }
 
     _PyPreCmdline precmdline = _PyPreCmdline_INIT;
@@ -2461,15 +2548,11 @@
         goto done;
     }
 
-    if (_Py_SetArgcArgv(orig_argv.length, orig_argv.items) < 0) {
-        status = _PyStatus_NO_MEMORY();
-        goto done;
-    }
-
     /* Check config consistency */
     assert(config->isolated >= 0);
     assert(config->use_environment >= 0);
     assert(config->dev_mode >= 0);
+    assert(config->_use_peg_parser >= 0);
     assert(config->install_signal_handlers >= 0);
     assert(config->use_hash_seed >= 0);
     assert(config->faulthandler >= 0);
@@ -2504,6 +2587,7 @@
         assert(config->exec_prefix != NULL);
         assert(config->base_exec_prefix != NULL);
     }
+    assert(config->platlibdir != NULL);
     assert(config->filesystem_encoding != NULL);
     assert(config->filesystem_errors != NULL);
     assert(config->stdio_encoding != NULL);
@@ -2516,11 +2600,11 @@
     assert(config->check_hash_pycs_mode != NULL);
     assert(config->_install_importlib >= 0);
     assert(config->pathconfig_warnings >= 0);
+    assert(_PyWideStringList_CheckConsistency(&config->_orig_argv));
 
     status = _PyStatus_OK();
 
 done:
-    _PyWideStringList_Clear(&orig_argv);
     _PyPreCmdline_Clear(&precmdline);
     return status;
 }
@@ -2548,8 +2632,8 @@
     Py_CLEAR(dict);
 
     /* pre config */
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    const PyPreConfig *pre_config = &_PyRuntime.preconfig;
+    PyThreadState *tstate = _PyThreadState_GET();
+    const PyPreConfig *pre_config = &tstate->interp->runtime->preconfig;
     dict = _PyPreConfig_AsDict(pre_config);
     if (dict == NULL) {
         goto error;
@@ -2560,7 +2644,7 @@
     Py_CLEAR(dict);
 
     /* core config */
-    const PyConfig *config = &interp->config;
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
     dict = config_as_dict(config);
     if (dict == NULL) {
         goto error;
@@ -2589,11 +2673,11 @@
 
     PySys_WriteStderr("'");
     for (; *str != L'\0'; str++) {
-        wchar_t ch = *str;
+        unsigned int ch = (unsigned int)*str;
         if (ch == L'\'') {
             PySys_WriteStderr("\\'");
         } else if (0x20 <= ch && ch < 0x7f) {
-            PySys_WriteStderr("%lc", ch);
+            PySys_WriteStderr("%c", ch);
         }
         else if (ch <= 0xff) {
             PySys_WriteStderr("\\x%02x", ch);
@@ -2627,7 +2711,7 @@
             PySys_WriteStderr("\n"); \
         } while (0)
 
-    PyConfig *config = &tstate->interp->config;
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
     DUMP_CONFIG("PYTHONHOME", home);
     DUMP_CONFIG("PYTHONPATH", pythonpath_env);
     DUMP_CONFIG("program name", program_name);
@@ -2654,6 +2738,7 @@
     DUMP_SYS(_base_executable);
     DUMP_SYS(base_prefix);
     DUMP_SYS(base_exec_prefix);
+    DUMP_SYS(platlibdir);
     DUMP_SYS(executable);
     DUMP_SYS(prefix);
     DUMP_SYS(exec_prefix);
diff --git a/Python/marshal.c b/Python/marshal.c
index a9ba7a4..c4538bd 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -12,7 +12,7 @@
 #include "longintrepr.h"
 #include "code.h"
 #include "marshal.h"
-#include "../Modules/hashtable.h"
+#include "pycore_hashtable.h"
 
 /*[clinic input]
 module marshal
@@ -83,7 +83,7 @@
     int depth;
     PyObject *str;
     char *ptr;
-    char *end;
+    const char *end;
     char *buf;
     _Py_hashtable_t *hashtable;
     int version;
@@ -114,7 +114,7 @@
     }
     assert(p->str != NULL);
     pos = p->ptr - p->buf;
-    size = PyBytes_Size(p->str);
+    size = PyBytes_GET_SIZE(p->str);
     if (size > 16*1024*1024)
         delta = (size >> 3);            /* 12.5% overallocation */
     else
@@ -126,7 +126,7 @@
     }
     size += delta;
     if (_PyBytes_Resize(&p->str, size) != 0) {
-        p->ptr = p->buf = p->end = NULL;
+        p->end = p->ptr = p->buf = NULL;
         return 0;
     }
     else {
@@ -138,7 +138,7 @@
 }
 
 static void
-w_string(const char *s, Py_ssize_t n, WFILE *p)
+w_string(const void *s, Py_ssize_t n, WFILE *p)
 {
     Py_ssize_t m;
     if (!n || p->ptr == NULL)
@@ -194,14 +194,14 @@
 #endif
 
 static void
-w_pstring(const char *s, Py_ssize_t n, WFILE *p)
+w_pstring(const void *s, Py_ssize_t n, WFILE *p)
 {
         W_SIZE(n, p);
         w_string(s, n, p);
 }
 
 static void
-w_short_pstring(const char *s, Py_ssize_t n, WFILE *p)
+w_short_pstring(const void *s, Py_ssize_t n, WFILE *p)
 {
     w_byte(Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char), p);
     w_string(s, n, p);
@@ -274,21 +274,18 @@
         p->error = WFERR_UNMARSHALLABLE;
         return;
     }
-    w_string((const char *)buf, 8, p);
+    w_string(buf, 8, p);
 }
 
 static void
 w_float_str(double v, WFILE *p)
 {
-    int n;
     char *buf = PyOS_double_to_string(v, 'g', 17, 0, NULL);
     if (!buf) {
         p->error = WFERR_NOMEMORY;
         return;
     }
-    n = (int)strlen(buf);
-    w_byte(n, p);
-    w_string(buf, n, p);
+    w_short_pstring(buf, strlen(buf), p);
     PyMem_Free(buf);
 }
 
@@ -305,17 +302,17 @@
     if (Py_REFCNT(v) == 1)
         return 0;
 
-    entry = _Py_HASHTABLE_GET_ENTRY(p->hashtable, v);
+    entry = _Py_hashtable_get_entry(p->hashtable, v);
     if (entry != NULL) {
         /* write the reference index to the stream */
-        _Py_HASHTABLE_ENTRY_READ_DATA(p->hashtable, entry, w);
+        w = (int)(uintptr_t)entry->value;
         /* we don't store "long" indices in the dict */
         assert(0 <= w && w <= 0x7fffffff);
         w_byte(TYPE_REF, p);
         w_long(w, p);
         return 1;
     } else {
-        size_t s = p->hashtable->entries;
+        size_t s = p->hashtable->nentries;
         /* we don't support long indices */
         if (s >= 0x7fffffff) {
             PyErr_SetString(PyExc_ValueError, "too many objects");
@@ -323,7 +320,7 @@
         }
         w = (int)s;
         Py_INCREF(v);
-        if (_Py_HASHTABLE_SET(p->hashtable, v, w) < 0) {
+        if (_Py_hashtable_set(p->hashtable, v, (void *)(uintptr_t)w) < 0) {
             Py_DECREF(v);
             goto err;
         }
@@ -378,11 +375,10 @@
     Py_ssize_t i, n;
 
     if (PyLong_CheckExact(v)) {
-        long x = PyLong_AsLong(v);
-        if ((x == -1)  && PyErr_Occurred()) {
-            PyLongObject *ob = (PyLongObject *)v;
-            PyErr_Clear();
-            w_PyLong(ob, flag, p);
+        int overflow;
+        long x = PyLong_AsLongAndOverflow(v, &overflow);
+        if (overflow) {
+            w_PyLong((PyLongObject *)v, flag, p);
         }
         else {
 #if SIZEOF_LONG > 4
@@ -433,7 +429,7 @@
                     W_TYPE(TYPE_SHORT_ASCII_INTERNED, p);
                 else
                     W_TYPE(TYPE_SHORT_ASCII, p);
-                w_short_pstring((char *) PyUnicode_1BYTE_DATA(v),
+                w_short_pstring(PyUnicode_1BYTE_DATA(v),
                                 PyUnicode_GET_LENGTH(v), p);
             }
             else {
@@ -441,7 +437,7 @@
                     W_TYPE(TYPE_ASCII_INTERNED, p);
                 else
                     W_TYPE(TYPE_ASCII, p);
-                w_pstring((char *) PyUnicode_1BYTE_DATA(v),
+                w_pstring(PyUnicode_1BYTE_DATA(v),
                           PyUnicode_GET_LENGTH(v), p);
             }
         }
@@ -462,7 +458,7 @@
         }
     }
     else if (PyTuple_CheckExact(v)) {
-        n = PyTuple_Size(v);
+        n = PyTuple_GET_SIZE(v);
         if (p->version >= 4 && n < 256) {
             W_TYPE(TYPE_SMALL_TUPLE, p);
             w_byte((unsigned char)n, p);
@@ -496,34 +492,18 @@
         w_object((PyObject *)NULL, p);
     }
     else if (PyAnySet_CheckExact(v)) {
-        PyObject *value, *it;
+        PyObject *value;
+        Py_ssize_t pos = 0;
+        Py_hash_t hash;
 
-        if (PyObject_TypeCheck(v, &PySet_Type))
-            W_TYPE(TYPE_SET, p);
-        else
+        if (PyFrozenSet_CheckExact(v))
             W_TYPE(TYPE_FROZENSET, p);
-        n = PyObject_Size(v);
-        if (n == -1) {
-            p->depth--;
-            p->error = WFERR_UNMARSHALLABLE;
-            return;
-        }
+        else
+            W_TYPE(TYPE_SET, p);
+        n = PySet_GET_SIZE(v);
         W_SIZE(n, p);
-        it = PyObject_GetIter(v);
-        if (it == NULL) {
-            p->depth--;
-            p->error = WFERR_UNMARSHALLABLE;
-            return;
-        }
-        while ((value = PyIter_Next(it)) != NULL) {
+        while (_PySet_NextEntry(v, &pos, &value, &hash)) {
             w_object(value, p);
-            Py_DECREF(value);
-        }
-        Py_DECREF(it);
-        if (PyErr_Occurred()) {
-            p->depth--;
-            p->error = WFERR_UNMARSHALLABLE;
-            return;
         }
     }
     else if (PyCode_Check(v)) {
@@ -565,13 +545,20 @@
     }
 }
 
+static void
+w_decref_entry(void *key)
+{
+    PyObject *entry_key = (PyObject *)key;
+    Py_XDECREF(entry_key);
+}
+
 static int
 w_init_refs(WFILE *wf, int version)
 {
     if (version >= 3) {
-        wf->hashtable = _Py_hashtable_new(sizeof(PyObject *), sizeof(int),
-                                          _Py_hashtable_hash_ptr,
-                                          _Py_hashtable_compare_direct);
+        wf->hashtable = _Py_hashtable_new_full(_Py_hashtable_hash_ptr,
+                                               _Py_hashtable_compare_direct,
+                                               w_decref_entry, NULL, NULL);
         if (wf->hashtable == NULL) {
             PyErr_NoMemory();
             return -1;
@@ -580,22 +567,10 @@
     return 0;
 }
 
-static int
-w_decref_entry(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry,
-               void *Py_UNUSED(data))
-{
-    PyObject *entry_key;
-
-    _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, entry_key);
-    Py_XDECREF(entry_key);
-    return 0;
-}
-
 static void
 w_clear_refs(WFILE *wf)
 {
     if (wf->hashtable != NULL) {
-        _Py_hashtable_foreach(wf->hashtable, w_decref_entry, NULL);
         _Py_hashtable_destroy(wf->hashtable);
     }
 }
@@ -638,8 +613,8 @@
     FILE *fp;
     int depth;
     PyObject *readable;  /* Stream-like object being read from */
-    char *ptr;
-    char *end;
+    const char *ptr;
+    const char *end;
     char *buf;
     Py_ssize_t buf_size;
     PyObject *refs;  /* a list */
@@ -652,7 +627,7 @@
 
     if (p->ptr != NULL) {
         /* Fast path for loads() */
-        char *res = p->ptr;
+        const char *res = p->ptr;
         Py_ssize_t left = p->end - p->ptr;
         if (left < n) {
             PyErr_SetString(PyExc_EOFError,
@@ -813,7 +788,7 @@
     if (ob == NULL)
         return NULL;
 
-    Py_SIZE(ob) = n > 0 ? size : -size;
+    Py_SET_SIZE(ob, n > 0 ? size : -size);
 
     for (i = 0; i < size-1; i++) {
         d = 0;
@@ -1570,8 +1545,8 @@
     PyObject *result;
     rf.fp = NULL;
     rf.readable = NULL;
-    rf.ptr = (char *)str;
-    rf.end = (char *)str + len;
+    rf.ptr = str;
+    rf.end = str + len;
     rf.buf = NULL;
     rf.depth = 0;
     rf.refs = PyList_New(0);
@@ -1593,8 +1568,8 @@
     wf.str = PyBytes_FromStringAndSize((char *)NULL, 50);
     if (wf.str == NULL)
         return NULL;
-    wf.ptr = wf.buf = PyBytes_AS_STRING((PyBytesObject *)wf.str);
-    wf.end = wf.ptr + PyBytes_Size(wf.str);
+    wf.ptr = wf.buf = PyBytes_AS_STRING(wf.str);
+    wf.end = wf.ptr + PyBytes_GET_SIZE(wf.str);
     wf.error = WFERR_OK;
     wf.version = version;
     if (w_init_refs(&wf, version)) {
@@ -1604,13 +1579,7 @@
     w_object(x, &wf);
     w_clear_refs(&wf);
     if (wf.str != NULL) {
-        char *base = PyBytes_AS_STRING((PyBytesObject *)wf.str);
-        if (wf.ptr - base > PY_SSIZE_T_MAX) {
-            Py_DECREF(wf.str);
-            PyErr_SetString(PyExc_OverflowError,
-                            "too much marshal data for a bytes object");
-            return NULL;
-        }
+        const char *base = PyBytes_AS_STRING(wf.str);
         if (_PyBytes_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base)) < 0)
             return NULL;
     }
@@ -1659,7 +1628,7 @@
     s = PyMarshal_WriteObjectToString(value, version);
     if (s == NULL)
         return NULL;
-    res = _PyObject_CallMethodIdObjArgs(file, &PyId_write, s, NULL);
+    res = _PyObject_CallMethodIdOneArg(file, &PyId_write, s);
     Py_DECREF(s);
     return res;
 }
@@ -1702,7 +1671,7 @@
     if (!PyBytes_Check(data)) {
         PyErr_Format(PyExc_TypeError,
                      "file.read() returned not bytes but %.100s",
-                     data->ob_type->tp_name);
+                     Py_TYPE(data)->tp_name);
         result = NULL;
     }
     else {
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 7271af3..13482c6 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -2,6 +2,7 @@
 /* Module support implementation */
 
 #include "Python.h"
+#include "pycore_abstract.h"   // _PyIndex_Check()
 
 #define FLAG_SIZE_T 1
 typedef double va_double;
@@ -20,7 +21,7 @@
     if (obj == Py_None) {
         return 1;
     }
-    else if (PyIndex_Check(obj)) {
+    else if (_PyIndex_Check(obj)) {
         limit = PyNumber_AsSsize_t(obj, PyExc_OverflowError);
         if (limit == -1 && PyErr_Occurred()) {
             return 0;
@@ -618,6 +619,9 @@
     va_end(lva);
 
     if (res < 0) {
+        if (stack != small_stack) {
+            PyMem_Free(stack);
+        }
         return NULL;
     }
 
@@ -678,3 +682,22 @@
     Py_DECREF(o);
     return -1;
 }
+
+int
+PyModule_AddType(PyObject *module, PyTypeObject *type)
+{
+    if (PyType_Ready(type) < 0) {
+        return -1;
+    }
+
+    const char *name = _PyType_Name(type);
+    assert(name != NULL);
+
+    Py_INCREF(type);
+    if (PyModule_AddObject(module, name, (PyObject *)type) < 0) {
+        Py_DECREF(type);
+        return -1;
+    }
+
+    return 0;
+}
diff --git a/Python/mysnprintf.c b/Python/mysnprintf.c
index a08e249..458ca14 100644
--- a/Python/mysnprintf.c
+++ b/Python/mysnprintf.c
@@ -1,6 +1,8 @@
 #include "Python.h"
 
-/* snprintf() wrappers.  If the platform has vsnprintf, we use it, else we
+/* snprintf() and vsnprintf() wrappers.
+
+   If the platform has vsnprintf, we use it, else we
    emulate it in a half-hearted way.  Even if the platform has it, we wrap
    it because platforms differ in what vsnprintf does in case the buffer
    is too small:  C99 behavior is to return the number of characters that
@@ -52,16 +54,17 @@
 int
 PyOS_vsnprintf(char *str, size_t size, const char  *format, va_list va)
 {
-    int len;  /* # bytes written, excluding \0 */
-#ifdef HAVE_SNPRINTF
-#define _PyOS_vsnprintf_EXTRA_SPACE 1
-#else
-#define _PyOS_vsnprintf_EXTRA_SPACE 512
-    char *buffer;
-#endif
     assert(str != NULL);
     assert(size > 0);
     assert(format != NULL);
+
+    int len;  /* # bytes written, excluding \0 */
+#if defined(_MSC_VER) || defined(HAVE_SNPRINTF)
+#  define _PyOS_vsnprintf_EXTRA_SPACE 1
+#else
+#  define _PyOS_vsnprintf_EXTRA_SPACE 512
+    char *buffer;
+#endif
     /* We take a size_t as input but return an int.  Sanity check
      * our input so that it won't cause an overflow in the
      * vsnprintf return value or the buffer malloc size.  */
@@ -70,10 +73,12 @@
         goto Done;
     }
 
-#ifdef HAVE_SNPRINTF
+#if defined(_MSC_VER)
+    len = _vsnprintf(str, size, format, va);
+#elif defined(HAVE_SNPRINTF)
     len = vsnprintf(str, size, format, va);
 #else
-    /* Emulate it. */
+    /* Emulate vsnprintf(). */
     buffer = PyMem_MALLOC(size + _PyOS_vsnprintf_EXTRA_SPACE);
     if (buffer == NULL) {
         len = -666;
@@ -81,12 +86,12 @@
     }
 
     len = vsprintf(buffer, format, va);
-    if (len < 0)
+    if (len < 0) {
         /* ignore the error */;
-
-    else if ((size_t)len >= size + _PyOS_vsnprintf_EXTRA_SPACE)
-        Py_FatalError("Buffer overflow in PyOS_snprintf/PyOS_vsnprintf");
-
+    }
+    else if ((size_t)len >= size + _PyOS_vsnprintf_EXTRA_SPACE) {
+        _Py_FatalErrorFunc(__func__, "Buffer overflow");
+    }
     else {
         const size_t to_copy = (size_t)len < size ?
                                 (size_t)len : size - 1;
@@ -96,9 +101,11 @@
     }
     PyMem_FREE(buffer);
 #endif
+
 Done:
-    if (size > 0)
+    if (size > 0) {
         str[size-1] = '\0';
+    }
     return len;
 #undef _PyOS_vsnprintf_EXTRA_SPACE
 }
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index 7ab5814..19fa57a 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -99,7 +99,7 @@
     int ovlimit;       /* required digits to overflow */
 
     /* skip leading white space */
-    while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
+    while (*str && Py_ISSPACE(*str))
         ++str;
 
     /* check for leading 0b, 0o or 0x for auto-base or base 16 */
@@ -138,7 +138,7 @@
                 /* skip all zeroes... */
                 while (*str == '0')
                     ++str;
-                while (Py_ISSPACE(Py_CHARMASK(*str)))
+                while (Py_ISSPACE(*str))
                     ++str;
                 if (ptr)
                     *ptr = (char *)str;
@@ -266,7 +266,7 @@
     unsigned long uresult;
     char sign;
 
-    while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
+    while (*str && Py_ISSPACE(*str))
         str++;
 
     sign = *str;
diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h
index e82959b..538fdbe 100644
--- a/Python/opcode_targets.h
+++ b/Python/opcode_targets.h
@@ -47,12 +47,12 @@
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_RERAISE,
+    &&TARGET_WITH_EXCEPT_START,
     &&TARGET_GET_AITER,
     &&TARGET_GET_ANEXT,
     &&TARGET_BEFORE_ASYNC_WITH,
-    &&TARGET_BEGIN_FINALLY,
+    &&_unknown_opcode,
     &&TARGET_END_ASYNC_FOR,
     &&TARGET_INPLACE_ADD,
     &&TARGET_INPLACE_SUBTRACT,
@@ -73,21 +73,21 @@
     &&TARGET_LOAD_BUILD_CLASS,
     &&TARGET_YIELD_FROM,
     &&TARGET_GET_AWAITABLE,
-    &&_unknown_opcode,
+    &&TARGET_LOAD_ASSERTION_ERROR,
     &&TARGET_INPLACE_LSHIFT,
     &&TARGET_INPLACE_RSHIFT,
     &&TARGET_INPLACE_AND,
     &&TARGET_INPLACE_XOR,
     &&TARGET_INPLACE_OR,
     &&_unknown_opcode,
-    &&TARGET_WITH_CLEANUP_START,
-    &&TARGET_WITH_CLEANUP_FINISH,
+    &&_unknown_opcode,
+    &&TARGET_LIST_TO_TUPLE,
     &&TARGET_RETURN_VALUE,
     &&TARGET_IMPORT_STAR,
     &&TARGET_SETUP_ANNOTATIONS,
     &&TARGET_YIELD_VALUE,
     &&TARGET_POP_BLOCK,
-    &&TARGET_END_FINALLY,
+    &&_unknown_opcode,
     &&TARGET_POP_EXCEPT,
     &&TARGET_STORE_NAME,
     &&TARGET_DELETE_NAME,
@@ -116,11 +116,11 @@
     &&TARGET_POP_JUMP_IF_FALSE,
     &&TARGET_POP_JUMP_IF_TRUE,
     &&TARGET_LOAD_GLOBAL,
+    &&TARGET_IS_OP,
+    &&TARGET_CONTAINS_OP,
     &&_unknown_opcode,
     &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_JUMP_IF_NOT_EXC_MATCH,
     &&TARGET_SETUP_FINALLY,
     &&_unknown_opcode,
     &&TARGET_LOAD_FAST,
@@ -148,23 +148,23 @@
     &&TARGET_SET_ADD,
     &&TARGET_MAP_ADD,
     &&TARGET_LOAD_CLASSDEREF,
-    &&TARGET_BUILD_LIST_UNPACK,
-    &&TARGET_BUILD_MAP_UNPACK,
-    &&TARGET_BUILD_MAP_UNPACK_WITH_CALL,
-    &&TARGET_BUILD_TUPLE_UNPACK,
-    &&TARGET_BUILD_SET_UNPACK,
+    &&_unknown_opcode,
+    &&_unknown_opcode,
+    &&_unknown_opcode,
+    &&_unknown_opcode,
+    &&_unknown_opcode,
     &&TARGET_SETUP_ASYNC_WITH,
     &&TARGET_FORMAT_VALUE,
     &&TARGET_BUILD_CONST_KEY_MAP,
     &&TARGET_BUILD_STRING,
-    &&TARGET_BUILD_TUPLE_UNPACK_WITH_CALL,
+    &&_unknown_opcode,
     &&_unknown_opcode,
     &&TARGET_LOAD_METHOD,
     &&TARGET_CALL_METHOD,
-    &&TARGET_CALL_FINALLY,
-    &&TARGET_POP_FINALLY,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_LIST_EXTEND,
+    &&TARGET_SET_UPDATE,
+    &&TARGET_DICT_MERGE,
+    &&TARGET_DICT_UPDATE,
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
index 60c1044..9a30221 100644
--- a/Python/pathconfig.c
+++ b/Python/pathconfig.c
@@ -1,13 +1,15 @@
 /* Path configuration like module_search_path (sys.path) */
 
 #include "Python.h"
-#include "osdefs.h"
+#include "osdefs.h"               // DELIM
 #include "pycore_initconfig.h"
 #include "pycore_fileutils.h"
 #include "pycore_pathconfig.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h"         // _PyMem_SetDefaultAllocator()
 #include <wchar.h>
+#ifdef MS_WINDOWS
+#  include <windows.h>            // GetFullPathNameW(), MAX_PATH
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -201,9 +203,8 @@
 
     const wchar_t *sys_path = pathconfig->module_search_path;
     const wchar_t delim = DELIM;
-    const wchar_t *p = sys_path;
     while (1) {
-        p = wcschr(sys_path, delim);
+        const wchar_t *p = wcschr(sys_path, delim);
         if (p == NULL) {
             p = sys_path + wcslen(sys_path); /* End of string */
         }
@@ -439,6 +440,12 @@
 
 /* External interface */
 
+static void _Py_NO_RETURN
+path_out_of_memory(const char *func)
+{
+    _Py_FatalErrorFunc(func, "out of memory");
+}
+
 void
 Py_SetPath(const wchar_t *path)
 {
@@ -470,7 +477,7 @@
         || _Py_path_config.exec_prefix == NULL
         || _Py_path_config.module_search_path == NULL)
     {
-        Py_FatalError("Py_SetPath() failed: out of memory");
+        path_out_of_memory(__func__);
     }
 }
 
@@ -491,7 +498,7 @@
     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 
     if (_Py_path_config.home == NULL) {
-        Py_FatalError("Py_SetPythonHome() failed: out of memory");
+        path_out_of_memory(__func__);
     }
 }
 
@@ -512,7 +519,7 @@
     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 
     if (_Py_path_config.program_name == NULL) {
-        Py_FatalError("Py_SetProgramName() failed: out of memory");
+        path_out_of_memory(__func__);
     }
 }
 
@@ -532,7 +539,7 @@
     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 
     if (_Py_path_config.program_full_path == NULL) {
-        Py_FatalError("_Py_SetProgramFullPath() failed: out of memory");
+        path_out_of_memory(__func__);
     }
 }
 
@@ -731,16 +738,20 @@
 #endif
 
 /* Search for a prefix value in an environment file (pyvenv.cfg).
-   If found, copy it into the provided buffer. */
-int
+
+   - If found, copy it into *value_p: string which must be freed by
+     PyMem_RawFree().
+   - If not found, *value_p is set to NULL.
+*/
+PyStatus
 _Py_FindEnvConfigValue(FILE *env_file, const wchar_t *key,
-                       wchar_t *value, size_t value_size)
+                       wchar_t **value_p)
 {
-    int result = 0; /* meaning not found */
+    *value_p = NULL;
+
     char buffer[MAXPATHLEN * 2 + 1];  /* allow extra for key, '=', etc. */
     buffer[Py_ARRAY_LENGTH(buffer)-1] = '\0';
 
-    fseek(env_file, 0, SEEK_SET);
     while (!feof(env_file)) {
         char * p = fgets(buffer, Py_ARRAY_LENGTH(buffer) - 1, env_file);
 
@@ -767,18 +778,24 @@
                 if ((tok != NULL) && !wcscmp(tok, L"=")) {
                     tok = WCSTOK(NULL, L"\r\n", &state);
                     if (tok != NULL) {
-                        wcsncpy(value, tok, value_size - 1);
-                        value[value_size - 1] = L'\0';
-                        result = 1;
+                        *value_p = _PyMem_RawWcsdup(tok);
                         PyMem_RawFree(tmpbuffer);
-                        break;
+
+                        if (*value_p == NULL) {
+                            return _PyStatus_NO_MEMORY();
+                        }
+
+                        /* found */
+                        return _PyStatus_OK();
                     }
                 }
             }
             PyMem_RawFree(tmpbuffer);
         }
     }
-    return result;
+
+    /* not found */
+    return _PyStatus_OK();
 }
 
 #ifdef __cplusplus
diff --git a/Python/peephole.c b/Python/peephole.c
index d859648..6954c87 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -15,7 +15,7 @@
     || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
 #define ABSOLUTE_JUMP(op) (op==JUMP_ABSOLUTE \
     || op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \
-    || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
+    || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP || op==JUMP_IF_NOT_EXC_MATCH)
 #define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP)
 #define GETJUMPTGT(arr, i) (get_arg(arr, i) / sizeof(_Py_CODEUNIT) + \
         (ABSOLUTE_JUMP(_Py_OPCODE(arr[i])) ? 0 : i+1))
@@ -194,11 +194,11 @@
             case JUMP_IF_TRUE_OR_POP:
             case POP_JUMP_IF_FALSE:
             case POP_JUMP_IF_TRUE:
+            case JUMP_IF_NOT_EXC_MATCH:
             case JUMP_ABSOLUTE:
             case SETUP_FINALLY:
             case SETUP_WITH:
             case SETUP_ASYNC_WITH:
-            case CALL_FINALLY:
                 j = GETJUMPTGT(code, i);
                 assert(j < len);
                 blocks[j] = 1;
@@ -432,14 +432,10 @@
                 /* Remove unreachable ops after RETURN */
             case RETURN_VALUE:
                 h = i + 1;
-                /* END_FINALLY should be kept since it denotes the end of
-                   the 'finally' block in frame_setlineno() in frameobject.c.
-                   SETUP_FINALLY should be kept for balancing.
-                 */
-                while (h < codelen && ISBASICBLOCK(blocks, i, h) &&
-                       _Py_OPCODE(codestr[h]) != END_FINALLY)
+                while (h < codelen && ISBASICBLOCK(blocks, i, h))
                 {
-                    if (_Py_OPCODE(codestr[h]) == SETUP_FINALLY) {
+                    /* Leave SETUP_FINALLY and RERAISE in place to help find block limits. */
+                    if (_Py_OPCODE(codestr[h]) == SETUP_FINALLY || _Py_OPCODE(codestr[h]) == RERAISE) {
                         while (h > i + 1 &&
                                _Py_OPCODE(codestr[h - 1]) == EXTENDED_ARG)
                         {
@@ -498,6 +494,7 @@
             case POP_JUMP_IF_TRUE:
             case JUMP_IF_FALSE_OR_POP:
             case JUMP_IF_TRUE_OR_POP:
+            case JUMP_IF_NOT_EXC_MATCH:
                 j = blocks[j / sizeof(_Py_CODEUNIT)] * sizeof(_Py_CODEUNIT);
                 break;
 
@@ -506,7 +503,6 @@
             case SETUP_FINALLY:
             case SETUP_WITH:
             case SETUP_ASYNC_WITH:
-            case CALL_FINALLY:
                 j = blocks[j / sizeof(_Py_CODEUNIT) + i + 1] - blocks[i] - 1;
                 j *= sizeof(_Py_CODEUNIT);
                 break;
@@ -515,8 +511,12 @@
         if (instrsize(j) > ilen) {
             goto exitUnchanged;
         }
-        assert(ilen <= INT_MAX);
         /* If instrsize(j) < ilen, we'll emit EXTENDED_ARG 0 */
+        if (ilen > 4) {
+            /* Can only happen when PyCode_Optimize() is called with
+               malformed bytecode. */
+            goto exitUnchanged;
+        }
         write_op_arg(codestr + h, opcode, j, (int)ilen);
         h += ilen;
     }
diff --git a/Python/preconfig.c b/Python/preconfig.c
index 89a6227..262738f 100644
--- a/Python/preconfig.c
+++ b/Python/preconfig.c
@@ -1,8 +1,9 @@
 #include "Python.h"
-#include "pycore_initconfig.h"
-#include "pycore_getopt.h"
-#include "pycore_pystate.h"   /* _PyRuntime_Initialize() */
-#include <locale.h>       /* setlocale() */
+#include "pycore_getopt.h"        // _PyOS_GetOpt()
+#include "pycore_initconfig.h"    // _PyArgv
+#include "pycore_pymem.h"         // _PyMem_GetAllocatorName()
+#include "pycore_runtime.h"       // _PyRuntime_Initialize()
+#include <locale.h>               // setlocale()
 
 
 #define DECODE_LOCALE_ERR(NAME, LEN) \
diff --git a/Python/pyhash.c b/Python/pyhash.c
index c0355ae..3843079 100644
--- a/Python/pyhash.c
+++ b/Python/pyhash.c
@@ -129,16 +129,22 @@
 }
 
 Py_hash_t
-_Py_HashPointer(void *p)
+_Py_HashPointerRaw(const void *p)
 {
-    Py_hash_t x;
     size_t y = (size_t)p;
     /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
        excessive hash collisions for dicts and sets */
     y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
-    x = (Py_hash_t)y;
-    if (x == -1)
+    return (Py_hash_t)y;
+}
+
+Py_hash_t
+_Py_HashPointer(const void *p)
+{
+    Py_hash_t x = _Py_HashPointerRaw(p);
+    if (x == -1) {
         x = -2;
+    }
     return x;
 }
 
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index dc2d13d..60f091c 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -4,48 +4,41 @@
 
 #include "Python-ast.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
-#include "pycore_ceval.h"
-#include "pycore_context.h"
-#include "pycore_initconfig.h"
-#include "pycore_fileutils.h"
-#include "pycore_hamt.h"
-#include "pycore_pathconfig.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "pycore_traceback.h"
-#include "grammar.h"
-#include "node.h"
-#include "token.h"
-#include "parsetok.h"
-#include "errcode.h"
-#include "code.h"
-#include "symtable.h"
-#include "ast.h"
-#include "marshal.h"
-#include "osdefs.h"
-#include <locale.h>
+
+#include "pycore_ceval.h"         // _PyEval_FiniGIL()
+#include "pycore_context.h"       // _PyContext_Init()
+#include "pycore_fileutils.h"     // _Py_ResetForceASCII()
+#include "pycore_import.h"        // _PyImport_Cleanup()
+#include "pycore_initconfig.h"    // _PyStatus_OK()
+#include "pycore_object.h"        // _PyDebug_PrintTotalRefs()
+#include "pycore_pathconfig.h"    // _PyConfig_WritePathConfig()
+#include "pycore_pyerrors.h"      // _PyErr_Occurred()
+#include "pycore_pylifecycle.h"   // _PyErr_Print()
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+#include "pycore_sysmodule.h"     // _PySys_ClearAuditHooks()
+#include "pycore_traceback.h"     // _Py_DumpTracebackThreads()
+
+#include "grammar.h"              // PyGrammar_RemoveAccelerators()
+#include <locale.h>               // setlocale()
 
 #ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef MS_WINDOWS
-#include "malloc.h" /* for alloca */
+#  include <signal.h>             // SIG_IGN
 #endif
 
 #ifdef HAVE_LANGINFO_H
-#include <langinfo.h>
+#  include <langinfo.h>           // nl_langinfo(CODESET)
 #endif
 
 #ifdef MS_WINDOWS
-#undef BYTE
-#include "windows.h"
+#  undef BYTE
+#  include "windows.h"
 
-extern PyTypeObject PyWindowsConsoleIO_Type;
-#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
+   extern PyTypeObject PyWindowsConsoleIO_Type;
+#  define PyWindowsConsoleIO_Check(op) \
+       (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
 #endif
 
+
 _Py_IDENTIFIER(flush);
 _Py_IDENTIFIER(name);
 _Py_IDENTIFIER(stdin);
@@ -59,13 +52,13 @@
 
 extern grammar _PyParser_Grammar; /* From graminit.c */
 
-/* Forward */
+/* Forward declarations */
 static PyStatus add_main_module(PyInterpreterState *interp);
-static PyStatus init_import_size(void);
-static PyStatus init_sys_streams(PyInterpreterState *interp);
-static PyStatus init_signals(void);
-static void call_py_exitfuncs(PyInterpreterState *);
-static void wait_for_thread_shutdown(void);
+static PyStatus init_import_site(void);
+static PyStatus init_set_builtins_open(void);
+static PyStatus init_sys_streams(PyThreadState *tstate);
+static void call_py_exitfuncs(PyThreadState *tstate);
+static void wait_for_thread_shutdown(PyThreadState *tstate);
 static void call_ll_exitfuncs(_PyRuntimeState *runtime);
 
 int _Py_UnhandledKeyboardInterrupt = 0;
@@ -99,7 +92,7 @@
 int
 _Py_IsFinalizing(void)
 {
-    return _PyRuntime.finalizing != NULL;
+    return _PyRuntimeState_GetFinalizing(&_PyRuntime) != NULL;
 }
 
 /* Hack to force loading of object files */
@@ -146,12 +139,13 @@
 */
 
 static PyStatus
-init_importlib(PyInterpreterState *interp, PyObject *sysmod)
+init_importlib(PyThreadState *tstate, PyObject *sysmod)
 {
     PyObject *importlib;
     PyObject *impmod;
     PyObject *value;
-    int verbose = interp->config.verbose;
+    PyInterpreterState *interp = tstate->interp;
+    int verbose = _PyInterpreterState_GetConfig(interp)->verbose;
 
     /* Import _importlib through its frozen version, _frozen_importlib. */
     if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
@@ -187,7 +181,7 @@
     /* Install importlib as the implementation of import */
     value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
     if (value == NULL) {
-        PyErr_Print();
+        _PyErr_Print(tstate);
         return _PyStatus_ERR("importlib install failed");
     }
     Py_DECREF(value);
@@ -197,17 +191,17 @@
 }
 
 static PyStatus
-init_importlib_external(PyInterpreterState *interp)
+init_importlib_external(PyThreadState *tstate)
 {
     PyObject *value;
-    value = PyObject_CallMethod(interp->importlib,
+    value = PyObject_CallMethod(tstate->interp->importlib,
                                 "_install_external_importers", "");
     if (value == NULL) {
-        PyErr_Print();
+        _PyErr_Print(tstate);
         return _PyStatus_ERR("external importer setup failed");
     }
     Py_DECREF(value);
-    return _PyImportZip_Init(interp);
+    return _PyImportZip_Init(tstate);
 }
 
 /* Helper functions to better handle the legacy C locale
@@ -256,6 +250,7 @@
 #endif
 }
 
+#ifndef MS_WINDOWS
 static const char *_C_LOCALE_WARNING =
     "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
     "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
@@ -270,6 +265,7 @@
         PySys_FormatStderr("%s", _C_LOCALE_WARNING);
     }
 }
+#endif   /* !defined(MS_WINDOWS) */
 
 typedef struct _CandidateLocale {
     const char *locale_name; /* The locale to try as a coercion target */
@@ -448,7 +444,7 @@
 
 static PyStatus
 pyinit_core_reconfigure(_PyRuntimeState *runtime,
-                        PyInterpreterState **interp_p,
+                        PyThreadState **tstate_p,
                         const PyConfig *config)
 {
     PyStatus status;
@@ -456,20 +452,23 @@
     if (!tstate) {
         return _PyStatus_ERR("failed to read thread state");
     }
+    *tstate_p = tstate;
 
     PyInterpreterState *interp = tstate->interp;
     if (interp == NULL) {
         return _PyStatus_ERR("can't make main interpreter");
     }
-    *interp_p = interp;
 
-    _PyConfig_Write(config, runtime);
-
-    status = _PyConfig_Copy(&interp->config, config);
+    status = _PyConfig_Write(config, runtime);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-    config = &interp->config;
+
+    status = _PyInterpreterState_SetConfig(interp, config);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+    config = _PyInterpreterState_GetConfig(interp);
 
     if (config->_install_importlib) {
         status = _PyConfig_WritePathConfig(config);
@@ -489,7 +488,10 @@
         return _PyStatus_ERR("main interpreter already initialized");
     }
 
-    _PyConfig_Write(config, runtime);
+    PyStatus status = _PyConfig_Write(config, runtime);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
 
     /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
      * threads behave a little more gracefully at interpreter shutdown.
@@ -500,9 +502,9 @@
      * threads still hanging around from a previous Py_Initialize/Finalize
      * pair :(
      */
-    runtime->finalizing = NULL;
+    _PyRuntimeState_SetFinalizing(runtime, NULL);
 
-    PyStatus status = _Py_HashRandomization_Init(config);
+    status = _Py_HashRandomization_Init(config);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
@@ -516,76 +518,104 @@
 
 
 static PyStatus
-pycore_create_interpreter(_PyRuntimeState *runtime,
-                          const PyConfig *config,
-                          PyInterpreterState **interp_p)
+init_interp_create_gil(PyThreadState *tstate)
 {
-    PyInterpreterState *interp = PyInterpreterState_New();
-    if (interp == NULL) {
-        return _PyStatus_ERR("can't make main interpreter");
-    }
-    *interp_p = interp;
+    PyStatus status;
 
-    PyStatus status = _PyConfig_Copy(&interp->config, config);
+    /* finalize_interp_delete() comment explains why _PyEval_FiniGIL() is
+       only called here. */
+    _PyEval_FiniGIL(tstate);
+
+    /* Auto-thread-state API */
+    status = _PyGILState_Init(tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-    config = &interp->config;
 
-    PyThreadState *tstate = PyThreadState_New(interp);
-    if (tstate == NULL)
-        return _PyStatus_ERR("can't make first thread");
-    (void) PyThreadState_Swap(tstate);
-
-    /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
-       destroying the GIL might fail when it is being referenced from
-       another running thread (see issue #9901).
-       Instead we destroy the previously created GIL here, which ensures
-       that we can call Py_Initialize / Py_FinalizeEx multiple times. */
-    _PyEval_FiniThreads(&runtime->ceval);
-
-    /* Auto-thread-state API */
-    _PyGILState_Init(runtime, interp, tstate);
-
-    /* Create the GIL */
-    PyEval_InitThreads();
+    /* Create the GIL and take it */
+    status = _PyEval_InitGIL(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
 
     return _PyStatus_OK();
 }
 
 
 static PyStatus
-pycore_init_types(void)
+pycore_create_interpreter(_PyRuntimeState *runtime,
+                          const PyConfig *config,
+                          PyThreadState **tstate_p)
 {
-    PyStatus status = _PyTypes_Init();
+    PyInterpreterState *interp = PyInterpreterState_New();
+    if (interp == NULL) {
+        return _PyStatus_ERR("can't make main interpreter");
+    }
+
+    PyStatus status = _PyInterpreterState_SetConfig(interp, config);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    status = _PyUnicode_Init();
+    PyThreadState *tstate = PyThreadState_New(interp);
+    if (tstate == NULL) {
+        return _PyStatus_ERR("can't make first thread");
+    }
+    (void) PyThreadState_Swap(tstate);
+
+    status = init_interp_create_gil(tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    if (_PyStructSequence_Init() < 0) {
-        return _PyStatus_ERR("can't initialize structseq");
+    *tstate_p = tstate;
+    return _PyStatus_OK();
+}
+
+
+static PyStatus
+pycore_init_types(PyThreadState *tstate)
+{
+    PyStatus status;
+    int is_main_interp = _Py_IsMainInterpreter(tstate);
+
+    status = _PyGC_Init(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
     }
 
-    if (!_PyLong_Init()) {
+    if (is_main_interp) {
+        status = _PyTypes_Init();
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+    }
+
+
+    if (!_PyLong_Init(tstate)) {
         return _PyStatus_ERR("can't init longs");
     }
 
+    if (is_main_interp) {
+        status = _PyUnicode_Init();
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+    }
+
     status = _PyExc_Init();
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    if (!_PyFloat_Init()) {
-        return _PyStatus_ERR("can't init float");
-    }
+    if (is_main_interp) {
+        if (!_PyFloat_Init()) {
+            return _PyStatus_ERR("can't init float");
+        }
 
-    if (!_PyContext_Init()) {
-        return _PyStatus_ERR("can't init context");
+        if (_PyStructSequence_Init() < 0) {
+            return _PyStatus_ERR("can't initialize structseq");
+        }
     }
 
     status = _PyErr_Init();
@@ -593,109 +623,147 @@
         return status;
     }
 
+    if (is_main_interp) {
+        if (!_PyContext_Init()) {
+            return _PyStatus_ERR("can't init context");
+        }
+    }
+
     return _PyStatus_OK();
 }
 
 
 static PyStatus
-pycore_init_builtins(PyInterpreterState *interp)
+pycore_init_builtins(PyThreadState *tstate)
 {
-    PyObject *bimod = _PyBuiltin_Init();
-    if (bimod == NULL) {
-        return _PyStatus_ERR("can't initialize builtins modules");
-    }
-    _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
+    assert(!_PyErr_Occurred(tstate));
 
-    interp->builtins = PyModule_GetDict(bimod);
-    if (interp->builtins == NULL) {
-        return _PyStatus_ERR("can't initialize builtins dict");
+    PyObject *bimod = _PyBuiltin_Init(tstate);
+    if (bimod == NULL) {
+        goto error;
     }
-    Py_INCREF(interp->builtins);
+
+    PyInterpreterState *interp = tstate->interp;
+    if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) {
+        goto error;
+    }
+
+    PyObject *builtins_dict = PyModule_GetDict(bimod);
+    if (builtins_dict == NULL) {
+        goto error;
+    }
+    Py_INCREF(builtins_dict);
+    interp->builtins = builtins_dict;
 
     PyStatus status = _PyBuiltins_AddExceptions(bimod);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
+
+    interp->builtins_copy = PyDict_Copy(interp->builtins);
+    if (interp->builtins_copy == NULL) {
+        goto error;
+    }
+    Py_DECREF(bimod);
+
+    assert(!_PyErr_Occurred(tstate));
+
     return _PyStatus_OK();
+
+error:
+    Py_XDECREF(bimod);
+    return _PyStatus_ERR("can't initialize builtins module");
 }
 
 
 static PyStatus
-pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
+pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
 {
-    const PyConfig *config = &interp->config;
+    assert(!_PyErr_Occurred(tstate));
 
-    PyStatus status = _PyImport_Init(interp);
+    PyStatus status = _PyImportHooks_Init(tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    status = _PyImportHooks_Init();
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    /* Initialize _warnings. */
-    if (_PyWarnings_Init() == NULL) {
-        return _PyStatus_ERR("can't initialize warnings");
-    }
-
-    if (config->_install_importlib) {
-        status = _PyConfig_WritePathConfig(config);
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
+    if (_Py_IsMainInterpreter(tstate)) {
+        /* Initialize _warnings. */
+        status = _PyWarnings_InitState(tstate);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
+
+        if (config->_install_importlib) {
+            status = _PyConfig_WritePathConfig(config);
+            if (_PyStatus_EXCEPTION(status)) {
+                return status;
+            }
+        }
     }
 
     /* This call sets up builtin and frozen import support */
     if (config->_install_importlib) {
-        status = init_importlib(interp, sysmod);
+        status = init_importlib(tstate, sysmod);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
     }
+
+    assert(!_PyErr_Occurred(tstate));
+
     return _PyStatus_OK();
 }
 
 
 static PyStatus
+pycore_interp_init(PyThreadState *tstate)
+{
+    PyStatus status;
+    PyObject *sysmod = NULL;
+
+    status = pycore_init_types(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        goto done;
+    }
+
+    status = _PySys_Create(tstate, &sysmod);
+    if (_PyStatus_EXCEPTION(status)) {
+        goto done;
+    }
+
+    status = pycore_init_builtins(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        goto done;
+    }
+
+    status = pycore_init_import_warnings(tstate, sysmod);
+
+done:
+    /* sys.modules['sys'] contains a strong reference to the module */
+    Py_XDECREF(sysmod);
+    return status;
+}
+
+
+static PyStatus
 pyinit_config(_PyRuntimeState *runtime,
-              PyInterpreterState **interp_p,
+              PyThreadState **tstate_p,
               const PyConfig *config)
 {
-    PyInterpreterState *interp;
-
-    _PyConfig_Write(config, runtime);
-
     PyStatus status = pycore_init_runtime(runtime, config);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    status = pycore_create_interpreter(runtime, config, &interp);
+    PyThreadState *tstate;
+    status = pycore_create_interpreter(runtime, config, &tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-    config = &interp->config;
-    *interp_p = interp;
+    *tstate_p = tstate;
 
-    status = pycore_init_types();
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    PyObject *sysmod;
-    status = _PySys_Create(runtime, interp, &sysmod);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    status = pycore_init_builtins(interp);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    status = pycore_init_import_warnings(interp, sysmod);
+    status = pycore_interp_init(tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
@@ -833,7 +901,7 @@
 static PyStatus
 pyinit_core(_PyRuntimeState *runtime,
             const PyConfig *src_config,
-            PyInterpreterState **interp_p)
+            PyThreadState **tstate_p)
 {
     PyStatus status;
 
@@ -856,10 +924,10 @@
     }
 
     if (!runtime->core_initialized) {
-        status = pyinit_config(runtime, interp_p, &config);
+        status = pyinit_config(runtime, tstate_p, &config);
     }
     else {
-        status = pyinit_core_reconfigure(runtime, interp_p, &config);
+        status = pyinit_core_reconfigure(runtime, tstate_p, &config);
     }
     if (_PyStatus_EXCEPTION(status)) {
         goto done;
@@ -875,16 +943,16 @@
    configuration. Example of bpo-34008: Py_Main() called after
    Py_Initialize(). */
 static PyStatus
-_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
+_Py_ReconfigureMainInterpreter(PyThreadState *tstate)
 {
-    PyConfig *config = &interp->config;
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
 
     PyObject *argv = _PyWideStringList_AsList(&config->argv);
     if (argv == NULL) {
         return _PyStatus_NO_MEMORY(); \
     }
 
-    int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
+    int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv);
     Py_DECREF(argv);
     if (res < 0) {
         return _PyStatus_ERR("fail to set sys.argv");
@@ -892,6 +960,117 @@
     return _PyStatus_OK();
 }
 
+
+static PyStatus
+init_interp_main(PyThreadState *tstate)
+{
+    assert(!_PyErr_Occurred(tstate));
+
+    PyStatus status;
+    int is_main_interp = _Py_IsMainInterpreter(tstate);
+    PyInterpreterState *interp = tstate->interp;
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
+
+    if (!config->_install_importlib) {
+        /* Special mode for freeze_importlib: run with no import system
+         *
+         * This means anything which needs support from extension modules
+         * or pure Python code in the standard library won't work.
+         */
+        if (is_main_interp) {
+            interp->runtime->initialized = 1;
+        }
+        return _PyStatus_OK();
+    }
+
+    if (is_main_interp) {
+        if (_PyTime_Init() < 0) {
+            return _PyStatus_ERR("can't initialize time");
+        }
+    }
+
+    if (_PySys_InitMain(tstate) < 0) {
+        return _PyStatus_ERR("can't finish initializing sys");
+    }
+
+    status = init_importlib_external(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
+    if (is_main_interp) {
+        /* initialize the faulthandler module */
+        status = _PyFaulthandler_Init(config->faulthandler);
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+    }
+
+    status = _PyUnicode_InitEncodings(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
+    if (is_main_interp) {
+        if (_PySignal_Init(config->install_signal_handlers) < 0) {
+            return _PyStatus_ERR("can't initialize signals");
+        }
+
+        if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
+            return _PyStatus_ERR("can't initialize tracemalloc");
+        }
+    }
+
+    status = init_sys_streams(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
+    status = init_set_builtins_open();
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
+    status = add_main_module(interp);
+    if (_PyStatus_EXCEPTION(status)) {
+        return status;
+    }
+
+    if (is_main_interp) {
+        /* Initialize warnings. */
+        PyObject *warnoptions = PySys_GetObject("warnoptions");
+        if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
+        {
+            PyObject *warnings_module = PyImport_ImportModule("warnings");
+            if (warnings_module == NULL) {
+                fprintf(stderr, "'import warnings' failed; traceback:\n");
+                _PyErr_Print(tstate);
+            }
+            Py_XDECREF(warnings_module);
+        }
+
+        interp->runtime->initialized = 1;
+    }
+
+    if (config->site_import) {
+        status = init_import_site();
+        if (_PyStatus_EXCEPTION(status)) {
+            return status;
+        }
+    }
+
+    if (is_main_interp) {
+#ifndef MS_WINDOWS
+        emit_stderr_warning_for_legacy_locale(interp->runtime);
+#endif
+    }
+
+    assert(!_PyErr_Occurred(tstate));
+
+    return _PyStatus_OK();
+}
+
+
 /* Update interpreter state based on supplied configuration settings
  *
  * After calling this function, most of the restrictions on the interpreter
@@ -904,100 +1083,21 @@
  * non-zero return code.
  */
 static PyStatus
-pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
+pyinit_main(PyThreadState *tstate)
 {
-    if (!runtime->core_initialized) {
+    PyInterpreterState *interp = tstate->interp;
+    if (!interp->runtime->core_initialized) {
         return _PyStatus_ERR("runtime core not initialized");
     }
 
-    /* Configure the main interpreter */
-    PyConfig *config = &interp->config;
-
-    if (runtime->initialized) {
-        return _Py_ReconfigureMainInterpreter(interp);
+    if (interp->runtime->initialized) {
+        return _Py_ReconfigureMainInterpreter(tstate);
     }
 
-    if (!config->_install_importlib) {
-        /* Special mode for freeze_importlib: run with no import system
-         *
-         * This means anything which needs support from extension modules
-         * or pure Python code in the standard library won't work.
-         */
-        runtime->initialized = 1;
-        return _PyStatus_OK();
-    }
-
-    if (_PyTime_Init() < 0) {
-        return _PyStatus_ERR("can't initialize time");
-    }
-
-    if (_PySys_InitMain(runtime, interp) < 0) {
-        return _PyStatus_ERR("can't finish initializing sys");
-    }
-
-    PyStatus status = init_importlib_external(interp);
+    PyStatus status = init_interp_main(tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-
-    /* initialize the faulthandler module */
-    status = _PyFaulthandler_Init(config->faulthandler);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    status = _PyUnicode_InitEncodings(tstate);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    if (config->install_signal_handlers) {
-        status = init_signals();
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-    }
-
-    if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
-        return _PyStatus_ERR("can't initialize tracemalloc");
-    }
-
-    status = add_main_module(interp);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    status = init_sys_streams(interp);
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    /* Initialize warnings. */
-    PyObject *warnoptions = PySys_GetObject("warnoptions");
-    if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
-    {
-        PyObject *warnings_module = PyImport_ImportModule("warnings");
-        if (warnings_module == NULL) {
-            fprintf(stderr, "'import warnings' failed; traceback:\n");
-            PyErr_Print();
-        }
-        Py_XDECREF(warnings_module);
-    }
-
-    runtime->initialized = 1;
-
-    if (config->site_import) {
-        status = init_import_size(); /* Module site */
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-    }
-
-#ifndef MS_WINDOWS
-    emit_stderr_warning_for_legacy_locale(runtime);
-#endif
-
     return _PyStatus_OK();
 }
 
@@ -1010,9 +1110,8 @@
         return status;
     }
     _PyRuntimeState *runtime = &_PyRuntime;
-    PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
-
-    return pyinit_main(runtime, interp);
+    PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+    return pyinit_main(tstate);
 }
 
 
@@ -1031,15 +1130,15 @@
     }
     _PyRuntimeState *runtime = &_PyRuntime;
 
-    PyInterpreterState *interp = NULL;
-    status = pyinit_core(runtime, config, &interp);
+    PyThreadState *tstate = NULL;
+    status = pyinit_core(runtime, config, &tstate);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
-    config = &interp->config;
+    config = _PyInterpreterState_GetConfig(tstate->interp);
 
     if (config->_init_main) {
-        status = pyinit_main(runtime, interp);
+        status = pyinit_main(tstate);
         if (_PyStatus_EXCEPTION(status)) {
             return status;
         }
@@ -1083,10 +1182,6 @@
 }
 
 
-#ifdef COUNT_ALLOCS
-extern void _Py_dump_counts(FILE*);
-#endif
-
 /* Flush stdout and stderr */
 
 static int
@@ -1114,7 +1209,7 @@
     int status = 0;
 
     if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
-        tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
+        tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
         if (tmp == NULL) {
             PyErr_WriteUnraisable(fout);
             status = -1;
@@ -1124,7 +1219,7 @@
     }
 
     if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
-        tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
+        tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
         if (tmp == NULL) {
             PyErr_Clear();
             status = -1;
@@ -1150,6 +1245,102 @@
 
 */
 
+
+static void
+finalize_interp_types(PyThreadState *tstate, int is_main_interp)
+{
+    if (is_main_interp) {
+        /* Sundry finalizers */
+        _PyAST_Fini();
+        _PyFrame_Fini();
+        _PyTuple_Fini();
+        _PyList_Fini();
+        _PySet_Fini();
+        _PyBytes_Fini();
+    }
+
+    _PyLong_Fini(tstate);
+
+    if (is_main_interp) {
+        _PyFloat_Fini();
+        _PyDict_Fini();
+        _PySlice_Fini();
+    }
+
+    _PyWarnings_Fini(tstate->interp);
+
+    if (is_main_interp) {
+        _Py_HashRandomization_Fini();
+        _PyArg_Fini();
+        _PyAsyncGen_Fini();
+        _PyContext_Fini();
+    }
+
+    /* Cleanup Unicode implementation */
+    _PyUnicode_Fini(tstate);
+
+    if (is_main_interp) {
+        _Py_ClearFileSystemEncoding();
+    }
+}
+
+
+static void
+finalize_interp_clear(PyThreadState *tstate)
+{
+    int is_main_interp = _Py_IsMainInterpreter(tstate);
+
+    /* Clear interpreter state and all thread states */
+    PyInterpreterState_Clear(tstate->interp);
+
+    /* Trigger a GC collection on subinterpreters*/
+    if (!is_main_interp) {
+        _PyGC_CollectNoFail();
+    }
+
+    /* Clear all loghooks */
+    /* Both _PySys_Audit function and users still need PyObject, such as tuple.
+       Call _PySys_ClearAuditHooks when PyObject available. */
+    if (is_main_interp) {
+        _PySys_ClearAuditHooks(tstate);
+    }
+
+    finalize_interp_types(tstate, is_main_interp);
+
+    if (is_main_interp) {
+        /* XXX Still allocated:
+           - various static ad-hoc pointers to interned strings
+           - int and float free list blocks
+           - whatever various modules and libraries allocate
+        */
+
+        PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
+
+        _PyExc_Fini();
+    }
+
+    _PyGC_Fini(tstate);
+}
+
+
+static void
+finalize_interp_delete(PyThreadState *tstate)
+{
+    if (_Py_IsMainInterpreter(tstate)) {
+        /* Cleanup auto-thread-state */
+        _PyGILState_Fini(tstate);
+    }
+
+    /* We can't call _PyEval_FiniGIL() here because destroying the GIL lock can
+       fail when it is being awaited by another running daemon thread (see
+       bpo-9901). Instead pycore_create_interpreter() destroys the previously
+       created GIL, which ensures that Py_Initialize / Py_FinalizeEx can be
+       called multiple times. */
+
+    PyInterpreterState_Delete(tstate->interp);
+}
+
+
 int
 Py_FinalizeEx(void)
 {
@@ -1160,15 +1351,14 @@
         return status;
     }
 
-    // Wrap up existing "threading"-module-created, non-daemon threads.
-    wait_for_thread_shutdown();
-
-    // Make any remaining pending calls.
-    _Py_FinishPendingCalls(runtime);
-
     /* Get current thread state and interpreter pointer */
     PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
-    PyInterpreterState *interp = tstate->interp;
+
+    // Wrap up existing "threading"-module-created, non-daemon threads.
+    wait_for_thread_shutdown(tstate);
+
+    // Make any remaining pending calls.
+    _Py_FinishPendingCalls(tstate);
 
     /* The interpreter is still entirely intact at this point, and the
      * exit funcs may be relying on that.  In particular, if some thread
@@ -1180,26 +1370,36 @@
      * the threads created via Threading.
      */
 
-    call_py_exitfuncs(interp);
+    call_py_exitfuncs(tstate);
 
     /* Copy the core config, PyInterpreterState_Delete() free
        the core config memory */
 #ifdef Py_REF_DEBUG
-    int show_ref_count = interp->config.show_ref_count;
+    int show_ref_count = tstate->interp->config.show_ref_count;
 #endif
 #ifdef Py_TRACE_REFS
-    int dump_refs = interp->config.dump_refs;
+    int dump_refs = tstate->interp->config.dump_refs;
 #endif
 #ifdef WITH_PYMALLOC
-    int malloc_stats = interp->config.malloc_stats;
+    int malloc_stats = tstate->interp->config.malloc_stats;
 #endif
 
-    /* Remaining threads (e.g. daemon threads) will automatically exit
-       after taking the GIL (in PyEval_RestoreThread()). */
-    runtime->finalizing = tstate;
+    /* Remaining daemon threads will automatically exit
+       when they attempt to take the GIL (ex: PyEval_RestoreThread()). */
+    _PyRuntimeState_SetFinalizing(runtime, tstate);
     runtime->initialized = 0;
     runtime->core_initialized = 0;
 
+    /* Destroy the state of all threads of the interpreter, except of the
+       current thread. In practice, only daemon threads should still be alive,
+       except if wait_for_thread_shutdown() has been cancelled by CTRL+C.
+       Clear frames of other threads to call objects destructors. Destructors
+       will be called in the current Python thread. Since
+       _PyRuntimeState_SetFinalizing() has been called, no other Python thread
+       can take the GIL at this point: if they try, they will exit
+       immediately. */
+    _PyThreadState_DeleteExcept(runtime, tstate);
+
     /* Flush sys.stdout and sys.stderr */
     if (flush_std_files() < 0) {
         status = -1;
@@ -1221,16 +1421,9 @@
      * XXX I haven't seen a real-life report of either of these.
      */
     _PyGC_CollectIfEnabled();
-#ifdef COUNT_ALLOCS
-    /* With COUNT_ALLOCS, it helps to run GC multiple times:
-       each collection might release some types from the type
-       list, so they become garbage. */
-    while (_PyGC_CollectIfEnabled() > 0)
-        /* nothing */;
-#endif
 
     /* Destroy all modules */
-    PyImport_Cleanup();
+    _PyImport_Cleanup(tstate);
 
     /* Print debug stats if any */
     _PyEval_Fini();
@@ -1272,10 +1465,6 @@
     /* unload faulthandler module */
     _PyFaulthandler_Fini();
 
-    /* Debugging stuff */
-#ifdef COUNT_ALLOCS
-    _Py_dump_counts(stderr);
-#endif
     /* dump hash stats */
     _PyHash_Fini();
 
@@ -1296,63 +1485,8 @@
     }
 #endif /* Py_TRACE_REFS */
 
-    /* Clear interpreter state and all thread states. */
-    PyInterpreterState_Clear(interp);
-
-    /* Clear all loghooks */
-    /* We want minimal exposure of this function, so define the extern
-     * here. The linker should discover the correct function without
-     * exporting a symbol. */
-    extern void _PySys_ClearAuditHooks(void);
-    _PySys_ClearAuditHooks();
-
-    /* Now we decref the exception classes.  After this point nothing
-       can raise an exception.  That's okay, because each Fini() method
-       below has been checked to make sure no exceptions are ever
-       raised.
-    */
-
-    _PyExc_Fini();
-
-    /* Sundry finalizers */
-    PyMethod_Fini();
-    PyFrame_Fini();
-    PyCFunction_Fini();
-    PyTuple_Fini();
-    PyList_Fini();
-    PySet_Fini();
-    PyBytes_Fini();
-    PyLong_Fini();
-    PyFloat_Fini();
-    PyDict_Fini();
-    PySlice_Fini();
-    _PyGC_Fini(runtime);
-    _PyWarnings_Fini(interp);
-    _Py_HashRandomization_Fini();
-    _PyArg_Fini();
-    PyAsyncGen_Fini();
-    _PyContext_Fini();
-
-    /* Cleanup Unicode implementation */
-    _PyUnicode_Fini();
-
-    _Py_ClearFileSystemEncoding();
-
-    /* XXX Still allocated:
-       - various static ad-hoc pointers to interned strings
-       - int and float free list blocks
-       - whatever various modules and libraries allocate
-    */
-
-    PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
-
-    /* Cleanup auto-thread-state */
-    _PyGILState_Fini(runtime);
-
-    /* Delete current thread. After this, many C API calls become crashy. */
-    PyThreadState_Swap(NULL);
-
-    PyInterpreterState_Delete(interp);
+    finalize_interp_clear(tstate);
+    finalize_interp_delete(tstate);
 
 #ifdef Py_TRACE_REFS
     /* Display addresses (& refcnts) of all objects still alive.
@@ -1381,6 +1515,7 @@
     Py_FinalizeEx();
 }
 
+
 /* Create and initialize a new interpreter and thread, and return the
    new thread.  This requires that Py_Initialize() has been called
    first.
@@ -1395,7 +1530,7 @@
 */
 
 static PyStatus
-new_interpreter(PyThreadState **tstate_p)
+new_interpreter(PyThreadState **tstate_p, int isolated_subinterpreter)
 {
     PyStatus status;
 
@@ -1411,7 +1546,7 @@
 
     /* Issue #10915, #15751: The GIL API doesn't work with multiple
        interpreters: disable PyGILState_Check(). */
-    _PyGILState_check_enabled = 0;
+    runtime->gilstate.check_enabled = 0;
 
     PyInterpreterState *interp = PyInterpreterState_New();
     if (interp == NULL) {
@@ -1429,140 +1564,59 @@
     PyThreadState *save_tstate = PyThreadState_Swap(tstate);
 
     /* Copy the current interpreter config into the new interpreter */
-    PyConfig *config;
+    const PyConfig *config;
     if (save_tstate != NULL) {
-        config = &save_tstate->interp->config;
-    } else {
+        config = _PyInterpreterState_GetConfig(save_tstate->interp);
+    }
+    else
+    {
         /* No current thread state, copy from the main interpreter */
         PyInterpreterState *main_interp = PyInterpreterState_Main();
-        config = &main_interp->config;
+        config = _PyInterpreterState_GetConfig(main_interp);
     }
 
-    status = _PyConfig_Copy(&interp->config, config);
+    status = _PyInterpreterState_SetConfig(interp, config);
     if (_PyStatus_EXCEPTION(status)) {
-        return status;
+        goto error;
     }
-    config = &interp->config;
+    interp->config._isolated_interpreter = isolated_subinterpreter;
 
-    status = _PyExc_Init();
+    status = init_interp_create_gil(tstate);
     if (_PyStatus_EXCEPTION(status)) {
-        return status;
+        goto error;
     }
 
-    status = _PyErr_Init();
+    status = pycore_interp_init(tstate);
     if (_PyStatus_EXCEPTION(status)) {
-        return status;
+        goto error;
     }
 
-
-    /* XXX The following is lax in error checking */
-    PyObject *modules = PyDict_New();
-    if (modules == NULL) {
-        return _PyStatus_ERR("can't make modules dictionary");
-    }
-    interp->modules = modules;
-
-    PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
-    if (sysmod != NULL) {
-        interp->sysdict = PyModule_GetDict(sysmod);
-        if (interp->sysdict == NULL) {
-            goto handle_error;
-        }
-        Py_INCREF(interp->sysdict);
-        PyDict_SetItemString(interp->sysdict, "modules", modules);
-        if (_PySys_InitMain(runtime, interp) < 0) {
-            return _PyStatus_ERR("can't finish initializing sys");
-        }
-    }
-    else if (PyErr_Occurred()) {
-        goto handle_error;
-    }
-
-    PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
-    if (bimod != NULL) {
-        interp->builtins = PyModule_GetDict(bimod);
-        if (interp->builtins == NULL)
-            goto handle_error;
-        Py_INCREF(interp->builtins);
-    }
-    else if (PyErr_Occurred()) {
-        goto handle_error;
-    }
-
-    if (bimod != NULL && sysmod != NULL) {
-        status = _PyBuiltins_AddExceptions(bimod);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = _PySys_SetPreliminaryStderr(interp->sysdict);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = _PyImportHooks_Init();
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = init_importlib(interp, sysmod);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = init_importlib_external(interp);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = _PyUnicode_InitEncodings(tstate);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = init_sys_streams(interp);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        status = add_main_module(interp);
-        if (_PyStatus_EXCEPTION(status)) {
-            return status;
-        }
-
-        if (config->site_import) {
-            status = init_import_size();
-            if (_PyStatus_EXCEPTION(status)) {
-                return status;
-            }
-        }
-    }
-
-    if (PyErr_Occurred()) {
-        goto handle_error;
+    status = init_interp_main(tstate);
+    if (_PyStatus_EXCEPTION(status)) {
+        goto error;
     }
 
     *tstate_p = tstate;
     return _PyStatus_OK();
 
-handle_error:
-    /* Oops, it didn't work.  Undo it all. */
+error:
+    *tstate_p = NULL;
 
+    /* Oops, it didn't work.  Undo it all. */
     PyErr_PrintEx(0);
     PyThreadState_Clear(tstate);
-    PyThreadState_Swap(save_tstate);
     PyThreadState_Delete(tstate);
     PyInterpreterState_Delete(interp);
+    PyThreadState_Swap(save_tstate);
 
-    *tstate_p = NULL;
-    return _PyStatus_OK();
+    return status;
 }
 
 PyThreadState *
-Py_NewInterpreter(void)
+_Py_NewInterpreter(int isolated_subinterpreter)
 {
     PyThreadState *tstate = NULL;
-    PyStatus status = new_interpreter(&tstate);
+    PyStatus status = new_interpreter(&tstate, isolated_subinterpreter);
     if (_PyStatus_EXCEPTION(status)) {
         Py_ExitStatusException(status);
     }
@@ -1570,6 +1624,12 @@
 
 }
 
+PyThreadState *
+Py_NewInterpreter(void)
+{
+    return _Py_NewInterpreter(0);
+}
+
 /* Delete an interpreter and its last thread.  This requires that the
    given thread state is current, that the thread has no remaining
    frames, and that it is its interpreter's only remaining thread.
@@ -1587,24 +1647,26 @@
 {
     PyInterpreterState *interp = tstate->interp;
 
-    if (tstate != _PyThreadState_GET())
-        Py_FatalError("Py_EndInterpreter: thread is not current");
-    if (tstate->frame != NULL)
-        Py_FatalError("Py_EndInterpreter: thread still has a frame");
+    if (tstate != _PyThreadState_GET()) {
+        Py_FatalError("thread is not current");
+    }
+    if (tstate->frame != NULL) {
+        Py_FatalError("thread still has a frame");
+    }
     interp->finalizing = 1;
 
     // Wrap up existing "threading"-module-created, non-daemon threads.
-    wait_for_thread_shutdown();
+    wait_for_thread_shutdown(tstate);
 
-    call_py_exitfuncs(interp);
+    call_py_exitfuncs(tstate);
 
-    if (tstate != interp->tstate_head || tstate->next != NULL)
-        Py_FatalError("Py_EndInterpreter: not the last thread");
+    if (tstate != interp->tstate_head || tstate->next != NULL) {
+        Py_FatalError("not the last thread");
+    }
 
-    PyImport_Cleanup();
-    PyInterpreterState_Clear(interp);
-    PyThreadState_Swap(NULL);
-    PyInterpreterState_Delete(interp);
+    _PyImport_Cleanup(tstate);
+    finalize_interp_clear(tstate);
+    finalize_interp_delete(tstate);
 }
 
 /* Add the __main__ module */
@@ -1660,7 +1722,7 @@
 /* Import the site module (not into __main__ though) */
 
 static PyStatus
-init_import_size(void)
+init_import_site(void)
 {
     PyObject *m;
     m = PyImport_ImportModule("site");
@@ -1740,10 +1802,10 @@
         mode = "wb";
     else
         mode = "rb";
-    buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
+    buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
                                  fd, mode, buffering,
                                  Py_None, Py_None, /* encoding, errors */
-                                 Py_None, 0); /* newline, closefd */
+                                 Py_None, Py_False); /* newline, closefd */
     if (buf == NULL)
         goto error;
 
@@ -1767,7 +1829,7 @@
     text = PyUnicode_FromString(name);
     if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
         goto error;
-    res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
+    res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
     if (res == NULL)
         goto error;
     isatty = PyObject_IsTrue(res);
@@ -1778,7 +1840,7 @@
         write_through = Py_True;
     else
         write_through = Py_False;
-    if (isatty && buffered_stdio)
+    if (buffered_stdio && (isatty || fd == fileno(stderr)))
         line_buffering = Py_True;
     else
         line_buffering = Py_False;
@@ -1845,18 +1907,55 @@
     return NULL;
 }
 
-/* Initialize sys.stdin, stdout, stderr and builtins.open */
+/* Set builtins.open to io.OpenWrapper */
 static PyStatus
-init_sys_streams(PyInterpreterState *interp)
+init_set_builtins_open(void)
 {
     PyObject *iomod = NULL, *wrapper;
     PyObject *bimod = NULL;
+    PyStatus res = _PyStatus_OK();
+
+    if (!(iomod = PyImport_ImportModule("io"))) {
+        goto error;
+    }
+
+    if (!(bimod = PyImport_ImportModule("builtins"))) {
+        goto error;
+    }
+
+    if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
+        goto error;
+    }
+
+    /* Set builtins.open */
+    if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
+        Py_DECREF(wrapper);
+        goto error;
+    }
+    Py_DECREF(wrapper);
+    goto done;
+
+error:
+    res = _PyStatus_ERR("can't initialize io.open");
+
+done:
+    Py_XDECREF(bimod);
+    Py_XDECREF(iomod);
+    return res;
+}
+
+
+/* Initialize sys.stdin, stdout, stderr and builtins.open */
+static PyStatus
+init_sys_streams(PyThreadState *tstate)
+{
+    PyObject *iomod = NULL;
     PyObject *m;
     PyObject *std = NULL;
     int fd;
     PyObject * encoding_attr;
     PyStatus res = _PyStatus_OK();
-    PyConfig *config = &interp->config;
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
 
     /* Check that stdin is not a directory
        Using shell redirection, you can redirect stdin to a directory,
@@ -1883,23 +1982,9 @@
     }
     Py_DECREF(m);
 
-    if (!(bimod = PyImport_ImportModule("builtins"))) {
-        goto error;
-    }
-
     if (!(iomod = PyImport_ImportModule("io"))) {
         goto error;
     }
-    if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
-        goto error;
-    }
-
-    /* Set builtins.open */
-    if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
-        Py_DECREF(wrapper);
-        goto error;
-    }
-    Py_DECREF(wrapper);
 
     /* Set sys.stdin */
     fd = fileno(stdin);
@@ -1947,7 +2032,7 @@
         }
         Py_DECREF(encoding_attr);
     }
-    PyErr_Clear();  /* Not a fatal error if codec isn't available */
+    _PyErr_Clear(tstate);  /* Not a fatal error if codec isn't available */
 
     if (PySys_SetObject("__stderr__", std) < 0) {
         Py_DECREF(std);
@@ -1967,8 +2052,6 @@
 
 done:
     _Py_ClearStandardStreamEncoding();
-
-    Py_XDECREF(bimod);
     Py_XDECREF(iomod);
     return res;
 }
@@ -1994,13 +2077,13 @@
    Return 1 if the traceback was displayed, 0 otherwise. */
 
 static int
-_Py_FatalError_PrintExc(int fd)
+_Py_FatalError_PrintExc(PyThreadState *tstate)
 {
     PyObject *ferr, *res;
     PyObject *exception, *v, *tb;
     int has_tb;
 
-    PyErr_Fetch(&exception, &v, &tb);
+    _PyErr_Fetch(tstate, &exception, &v, &tb);
     if (exception == NULL) {
         /* No current exception */
         return 0;
@@ -2013,7 +2096,7 @@
         return 0;
     }
 
-    PyErr_NormalizeException(&exception, &v, &tb);
+    _PyErr_NormalizeException(tstate, &exception, &v, &tb);
     if (tb == NULL) {
         tb = Py_None;
         Py_INCREF(tb);
@@ -2031,11 +2114,13 @@
     Py_XDECREF(tb);
 
     /* sys.stderr may be buffered: call sys.stderr.flush() */
-    res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
-    if (res == NULL)
-        PyErr_Clear();
-    else
+    res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
+    if (res == NULL) {
+        _PyErr_Clear(tstate);
+    }
+    else {
         Py_DECREF(res);
+    }
 
     return has_tb;
 }
@@ -2082,8 +2167,9 @@
 fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
 {
     fprintf(stream, "Python runtime state: ");
-    if (runtime->finalizing) {
-        fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
+    PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime);
+    if (finalizing) {
+        fprintf(stream, "finalizing (tstate=%p)", finalizing);
     }
     else if (runtime->initialized) {
         fprintf(stream, "initialized");
@@ -2105,33 +2191,50 @@
 }
 
 
-static void _Py_NO_RETURN
-fatal_error(const char *prefix, const char *msg, int status)
+static inline void _Py_NO_RETURN
+fatal_error_exit(int status)
 {
-    FILE *stream = stderr;
+    if (status < 0) {
+#if defined(MS_WINDOWS) && defined(_DEBUG)
+        DebugBreak();
+#endif
+        abort();
+    }
+    else {
+        exit(status);
+    }
+}
+
+
+static void _Py_NO_RETURN
+fatal_error(FILE *stream, int header, const char *prefix, const char *msg,
+            int status)
+{
     const int fd = fileno(stream);
     static int reentrant = 0;
 
     if (reentrant) {
         /* Py_FatalError() caused a second fatal error.
            Example: flush_std_files() raises a recursion error. */
-        goto exit;
+        fatal_error_exit(status);
     }
     reentrant = 1;
 
-    fprintf(stream, "Fatal Python error: ");
-    if (prefix) {
-        fputs(prefix, stream);
-        fputs(": ", stream);
+    if (header) {
+        fprintf(stream, "Fatal Python error: ");
+        if (prefix) {
+            fputs(prefix, stream);
+            fputs(": ", stream);
+        }
+        if (msg) {
+            fputs(msg, stream);
+        }
+        else {
+            fprintf(stream, "<message not set>");
+        }
+        fputs("\n", stream);
+        fflush(stream);
     }
-    if (msg) {
-        fputs(msg, stream);
-    }
-    else {
-        fprintf(stream, "<message not set>");
-    }
-    fputs("\n", stream);
-    fflush(stream); /* it helps in Windows debug build */
 
     _PyRuntimeState *runtime = &_PyRuntime;
     fatal_error_dump_runtime(stream, runtime);
@@ -2154,7 +2257,7 @@
     int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
     if (has_tstate_and_gil) {
         /* If an exception is set, print the exception with its traceback */
-        if (!_Py_FatalError_PrintExc(fd)) {
+        if (!_Py_FatalError_PrintExc(tss_tstate)) {
             /* No exception is set, or an exception is set without traceback */
             _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
         }
@@ -2179,24 +2282,60 @@
     fatal_output_debug(msg);
 #endif /* MS_WINDOWS */
 
-exit:
-    if (status < 0) {
-#if defined(MS_WINDOWS) && defined(_DEBUG)
-        DebugBreak();
-#endif
-        abort();
-    }
-    else {
-        exit(status);
-    }
+    fatal_error_exit(status);
 }
 
+
+#undef Py_FatalError
+
 void _Py_NO_RETURN
 Py_FatalError(const char *msg)
 {
-    fatal_error(NULL, msg, -1);
+    fatal_error(stderr, 1, NULL, msg, -1);
 }
 
+
+void _Py_NO_RETURN
+_Py_FatalErrorFunc(const char *func, const char *msg)
+{
+    fatal_error(stderr, 1, func, msg, -1);
+}
+
+
+void _Py_NO_RETURN
+_Py_FatalErrorFormat(const char *func, const char *format, ...)
+{
+    static int reentrant = 0;
+    if (reentrant) {
+        /* _Py_FatalErrorFormat() caused a second fatal error */
+        fatal_error_exit(-1);
+    }
+    reentrant = 1;
+
+    FILE *stream = stderr;
+    fprintf(stream, "Fatal Python error: ");
+    if (func) {
+        fputs(func, stream);
+        fputs(": ", stream);
+    }
+    fflush(stream);
+
+    va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, format);
+#else
+    va_start(vargs);
+#endif
+    vfprintf(stream, format, vargs);
+    va_end(vargs);
+
+    fputs("\n", stream);
+    fflush(stream);
+
+    fatal_error(stream, 0, NULL, NULL, -1);
+}
+
+
 void _Py_NO_RETURN
 Py_ExitStatusException(PyStatus status)
 {
@@ -2204,7 +2343,7 @@
         exit(status.exitcode);
     }
     else if (_PyStatus_IS_ERROR(status)) {
-        fatal_error(status.func, status.err_msg, 1);
+        fatal_error(stderr, 1, status.func, status.err_msg, 1);
     }
     else {
         Py_FatalError("Py_ExitStatusException() must not be called on success");
@@ -2213,12 +2352,10 @@
 
 /* Clean up and exit */
 
-#  include "pythread.h"
-
 /* For the atexit module. */
 void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
 {
-    PyInterpreterState *is = _PyInterpreterState_Get();
+    PyInterpreterState *is = _PyInterpreterState_GET();
 
     /* Guard against API misuse (see bpo-17852) */
     assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
@@ -2228,13 +2365,14 @@
 }
 
 static void
-call_py_exitfuncs(PyInterpreterState *istate)
+call_py_exitfuncs(PyThreadState *tstate)
 {
-    if (istate->pyexitfunc == NULL)
+    PyInterpreterState *interp = tstate->interp;
+    if (interp->pyexitfunc == NULL)
         return;
 
-    (*istate->pyexitfunc)(istate->pyexitmodule);
-    PyErr_Clear();
+    (*interp->pyexitfunc)(interp->pyexitmodule);
+    _PyErr_Clear(tstate);
 }
 
 /* Wait until threading._shutdown completes, provided
@@ -2242,19 +2380,19 @@
    The shutdown routine will wait until all non-daemon
    "threading" threads have completed. */
 static void
-wait_for_thread_shutdown(void)
+wait_for_thread_shutdown(PyThreadState *tstate)
 {
     _Py_IDENTIFIER(_shutdown);
     PyObject *result;
     PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
     if (threading == NULL) {
-        if (PyErr_Occurred()) {
+        if (_PyErr_Occurred(tstate)) {
             PyErr_WriteUnraisable(NULL);
         }
         /* else: threading not imported */
         return;
     }
-    result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
+    result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
     if (result == NULL) {
         PyErr_WriteUnraisable(threading);
     }
@@ -2299,31 +2437,14 @@
     exit(sts);
 }
 
-static PyStatus
-init_signals(void)
-{
-#ifdef SIGPIPE
-    PyOS_setsig(SIGPIPE, SIG_IGN);
-#endif
-#ifdef SIGXFZ
-    PyOS_setsig(SIGXFZ, SIG_IGN);
-#endif
-#ifdef SIGXFSZ
-    PyOS_setsig(SIGXFSZ, SIG_IGN);
-#endif
-    PyOS_InitInterrupts(); /* May imply init_signals() */
-    if (PyErr_Occurred()) {
-        return _PyStatus_ERR("can't import signal");
-    }
-    return _PyStatus_OK();
-}
-
 
 /* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
  *
  * All of the code in this function must only use async-signal-safe functions,
  * listed at `man 7 signal` or
  * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
+ *
+ * If this function is updated, update also _posix_spawn() of subprocess.py.
  */
 void
 _Py_RestoreSignals(void)
diff --git a/Python/pymath.c b/Python/pymath.c
index 24b8042..a08a0e7 100644
--- a/Python/pymath.c
+++ b/Python/pymath.c
@@ -79,3 +79,18 @@
     return copysign(y, x);
 }
 #endif /* HAVE_ROUND */
+
+static const unsigned int BitLengthTable[32] = {
+    0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+unsigned int _Py_bit_length(unsigned long d) {
+   unsigned int d_bits = 0;
+   while (d >= 32) {
+       d_bits += 6;
+       d >>= 6;
+   }
+   d_bits += BitLengthTable[d];
+   return d_bits;
+}
diff --git a/Python/pystate.c b/Python/pystate.c
index b1d0f1c..9beefa8 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -4,9 +4,11 @@
 #include "Python.h"
 #include "pycore_ceval.h"
 #include "pycore_initconfig.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
 #include "pycore_pylifecycle.h"
+#include "pycore_pymem.h"         // _PyMem_SetDefaultAllocator()
+#include "pycore_pystate.h"       // _PyThreadState_GET()
+#include "pycore_sysmodule.h"
 
 /* --------------------------------------------------------------------------
 CAUTION
@@ -39,7 +41,7 @@
 
 /* Forward declarations */
 static PyThreadState *_PyGILState_GetThisThreadState(struct _gilstate_runtime_state *gilstate);
-static void _PyThreadState_Delete(_PyRuntimeState *runtime, PyThreadState *tstate);
+static void _PyThreadState_Delete(PyThreadState *tstate, int check_current);
 
 
 static PyStatus
@@ -58,8 +60,7 @@
     runtime->open_code_userdata = open_code_userdata;
     runtime->audit_hook_head = audit_hook_head;
 
-    _PyGC_Initialize(&runtime->gc);
-    _PyEval_Initialize(&runtime->ceval);
+    _PyEval_InitRuntimeState(&runtime->ceval);
 
     PyPreConfig_InitPythonConfig(&runtime->preconfig);
 
@@ -121,6 +122,7 @@
     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 }
 
+#ifdef HAVE_FORK
 /* This function is called from PyOS_AfterFork_Child to ensure that
  * newly created child processes do not share locks with the parent.
  */
@@ -136,24 +138,25 @@
     PyMemAllocatorEx old_alloc;
     _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 
-    runtime->interpreters.mutex = PyThread_allocate_lock();
-    runtime->interpreters.main->id_mutex = PyThread_allocate_lock();
-    runtime->xidregistry.mutex = PyThread_allocate_lock();
+    int interp_mutex = _PyThread_at_fork_reinit(&runtime->interpreters.mutex);
+    int main_interp_id_mutex = _PyThread_at_fork_reinit(&runtime->interpreters.main->id_mutex);
+    int xidregistry_mutex = _PyThread_at_fork_reinit(&runtime->xidregistry.mutex);
 
     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 
-    if (runtime->interpreters.mutex == NULL) {
+    if (interp_mutex < 0) {
         Py_FatalError("Can't initialize lock for runtime interpreters");
     }
 
-    if (runtime->interpreters.main->id_mutex == NULL) {
+    if (main_interp_id_mutex < 0) {
         Py_FatalError("Can't initialize ID lock for main interpreter");
     }
 
-    if (runtime->xidregistry.mutex == NULL) {
+    if (xidregistry_mutex < 0) {
         Py_FatalError("Can't initialize lock for cross-interpreter data registry");
     }
 }
+#endif
 
 #define HEAD_LOCK(runtime) \
     PyThread_acquire_lock((runtime)->interpreters.mutex, WAIT_LOCK)
@@ -193,19 +196,29 @@
 PyInterpreterState *
 PyInterpreterState_New(void)
 {
-    if (PySys_Audit("cpython.PyInterpreterState_New", NULL) < 0) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    /* tstate is NULL when Py_InitializeFromConfig() calls
+       PyInterpreterState_New() to create the main interpreter. */
+    if (_PySys_Audit(tstate, "cpython.PyInterpreterState_New", NULL) < 0) {
         return NULL;
     }
 
-    PyInterpreterState *interp = PyMem_RawMalloc(sizeof(PyInterpreterState));
+    PyInterpreterState *interp = PyMem_RawCalloc(1, sizeof(PyInterpreterState));
     if (interp == NULL) {
         return NULL;
     }
 
-    memset(interp, 0, sizeof(*interp));
     interp->id_refcount = -1;
-    interp->check_interval = 100;
 
+    /* Don't get runtime from tstate since tstate can be NULL */
+    _PyRuntimeState *runtime = &_PyRuntime;
+    interp->runtime = runtime;
+
+    if (_PyEval_InitState(&interp->ceval) < 0) {
+        goto out_of_memory;
+    }
+
+    _PyGC_InitState(&interp->gc);
     PyConfig_InitPythonConfig(&interp->config);
 
     interp->eval_frame = _PyEval_EvalFrameDefault;
@@ -217,14 +230,15 @@
 #endif
 #endif
 
-    _PyRuntimeState *runtime = &_PyRuntime;
     struct pyinterpreters *interpreters = &runtime->interpreters;
 
     HEAD_LOCK(runtime);
     if (interpreters->next_id < 0) {
         /* overflow or Py_Initialize() not called! */
-        PyErr_SetString(PyExc_RuntimeError,
-                        "failed to get an interpreter ID");
+        if (tstate != NULL) {
+            _PyErr_SetString(tstate, PyExc_RuntimeError,
+                             "failed to get an interpreter ID");
+        }
         PyMem_RawFree(interp);
         interp = NULL;
     }
@@ -248,14 +262,27 @@
     interp->audit_hooks = NULL;
 
     return interp;
+
+out_of_memory:
+    if (tstate != NULL) {
+        _PyErr_NoMemory(tstate);
+    }
+
+    PyMem_RawFree(interp);
+    return NULL;
 }
 
 
-static void
-_PyInterpreterState_Clear(_PyRuntimeState *runtime, PyInterpreterState *interp)
+void
+PyInterpreterState_Clear(PyInterpreterState *interp)
 {
-    if (PySys_Audit("cpython.PyInterpreterState_Clear", NULL) < 0) {
-        PyErr_Clear();
+    _PyRuntimeState *runtime = interp->runtime;
+
+    /* Use the current Python thread state to call audit hooks,
+       not the current Python thread state of 'interp'. */
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (_PySys_Audit(tstate, "cpython.PyInterpreterState_Clear", NULL) < 0) {
+        _PyErr_Clear(tstate);
     }
 
     HEAD_LOCK(runtime);
@@ -283,7 +310,7 @@
     Py_CLEAR(interp->after_forkers_parent);
     Py_CLEAR(interp->after_forkers_child);
 #endif
-    if (runtime->finalizing == NULL) {
+    if (_PyRuntimeState_GetFinalizing(runtime) == NULL) {
         _PyWarnings_Fini(interp);
     }
     // XXX Once we have one allocator per interpreter (i.e.
@@ -291,63 +318,58 @@
     // objects have been cleaned up at the point.
 }
 
-void
-PyInterpreterState_Clear(PyInterpreterState *interp)
-{
-    _PyInterpreterState_Clear(&_PyRuntime, interp);
-}
-
 
 static void
-zapthreads(_PyRuntimeState *runtime, PyInterpreterState *interp)
+zapthreads(PyInterpreterState *interp, int check_current)
 {
-    PyThreadState *p;
+    PyThreadState *tstate;
     /* No need to lock the mutex here because this should only happen
        when the threads are all really dead (XXX famous last words). */
-    while ((p = interp->tstate_head) != NULL) {
-        _PyThreadState_Delete(runtime, p);
+    while ((tstate = interp->tstate_head) != NULL) {
+        _PyThreadState_Delete(tstate, check_current);
     }
 }
 
 
-static void
-_PyInterpreterState_Delete(_PyRuntimeState *runtime,
-                           PyInterpreterState *interp)
-{
-    struct pyinterpreters *interpreters = &runtime->interpreters;
-    zapthreads(runtime, interp);
-    HEAD_LOCK(runtime);
-    PyInterpreterState **p;
-    for (p = &interpreters->head; ; p = &(*p)->next) {
-        if (*p == NULL) {
-            Py_FatalError("PyInterpreterState_Delete: invalid interp");
-        }
-        if (*p == interp) {
-            break;
-        }
-    }
-    if (interp->tstate_head != NULL) {
-        Py_FatalError("PyInterpreterState_Delete: remaining threads");
-    }
-    *p = interp->next;
-    if (interpreters->main == interp) {
-        interpreters->main = NULL;
-        if (interpreters->head != NULL) {
-            Py_FatalError("PyInterpreterState_Delete: remaining subinterpreters");
-        }
-    }
-    HEAD_UNLOCK(runtime);
-    if (interp->id_mutex != NULL) {
-        PyThread_free_lock(interp->id_mutex);
-    }
-    PyMem_RawFree(interp);
-}
-
-
 void
 PyInterpreterState_Delete(PyInterpreterState *interp)
 {
-    _PyInterpreterState_Delete(&_PyRuntime, interp);
+    _PyRuntimeState *runtime = interp->runtime;
+    struct pyinterpreters *interpreters = &runtime->interpreters;
+    zapthreads(interp, 0);
+
+    _PyEval_FiniState(&interp->ceval);
+
+    /* Delete current thread. After this, many C API calls become crashy. */
+    _PyThreadState_Swap(&runtime->gilstate, NULL);
+
+    HEAD_LOCK(runtime);
+    PyInterpreterState **p;
+    for (p = &interpreters->head; ; p = &(*p)->next) {
+        if (*p == NULL) {
+            Py_FatalError("NULL interpreter");
+        }
+        if (*p == interp) {
+            break;
+        }
+    }
+    if (interp->tstate_head != NULL) {
+        Py_FatalError("remaining threads");
+    }
+    *p = interp->next;
+
+    if (interpreters->main == interp) {
+        interpreters->main = NULL;
+        if (interpreters->head != NULL) {
+            Py_FatalError("remaining subinterpreters");
+        }
+    }
+    HEAD_UNLOCK(runtime);
+
+    if (interp->id_mutex != NULL) {
+        PyThread_free_lock(interp->id_mutex);
+    }
+    PyMem_RawFree(interp);
 }
 
 
@@ -363,7 +385,7 @@
 
     PyThreadState *tstate = _PyThreadState_Swap(gilstate, NULL);
     if (tstate != NULL && tstate->interp != interpreters->main) {
-        Py_FatalError("PyInterpreterState_DeleteExceptMain: not main interpreter");
+        Py_FatalError("not main interpreter");
     }
 
     HEAD_LOCK(runtime);
@@ -377,8 +399,8 @@
             continue;
         }
 
-        _PyInterpreterState_Clear(runtime, interp);  // XXX must activate?
-        zapthreads(runtime, interp);
+        PyInterpreterState_Clear(interp);  // XXX must activate?
+        zapthreads(interp, 1);
         if (interp->id_mutex != NULL) {
             PyThread_free_lock(interp->id_mutex);
         }
@@ -389,22 +411,20 @@
     HEAD_UNLOCK(runtime);
 
     if (interpreters->head == NULL) {
-        Py_FatalError("PyInterpreterState_DeleteExceptMain: missing main");
+        Py_FatalError("missing main interpreter");
     }
     _PyThreadState_Swap(gilstate, tstate);
 }
 
 
 PyInterpreterState *
-_PyInterpreterState_Get(void)
+PyInterpreterState_Get(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    if (tstate == NULL) {
-        Py_FatalError("_PyInterpreterState_Get(): no current thread state");
-    }
+    _Py_EnsureTstateNotNULL(tstate);
     PyInterpreterState *interp = tstate->interp;
     if (interp == NULL) {
-        Py_FatalError("_PyInterpreterState_Get(): no current interpreter");
+        Py_FatalError("no current interpreter");
     }
     return interp;
 }
@@ -422,11 +442,11 @@
 
 
 static PyInterpreterState *
-interp_look_up_id(_PyRuntimeState *runtime, PY_INT64_T requested_id)
+interp_look_up_id(_PyRuntimeState *runtime, int64_t requested_id)
 {
     PyInterpreterState *interp = runtime->interpreters.head;
     while (interp != NULL) {
-        PY_INT64_T id = PyInterpreterState_GetID(interp);
+        int64_t id = PyInterpreterState_GetID(interp);
         if (id < 0) {
             return NULL;
         }
@@ -439,7 +459,7 @@
 }
 
 PyInterpreterState *
-_PyInterpreterState_LookUpID(PY_INT64_T requested_id)
+_PyInterpreterState_LookUpID(int64_t requested_id)
 {
     PyInterpreterState *interp = NULL;
     if (requested_id >= 0) {
@@ -543,26 +563,15 @@
     return interp->dict;
 }
 
-/* Default implementation for _PyThreadState_GetFrame */
-static struct _frame *
-threadstate_getframe(PyThreadState *self)
-{
-    return self->frame;
-}
-
 static PyThreadState *
 new_threadstate(PyInterpreterState *interp, int init)
 {
-    _PyRuntimeState *runtime = &_PyRuntime;
+    _PyRuntimeState *runtime = interp->runtime;
     PyThreadState *tstate = (PyThreadState *)PyMem_RawMalloc(sizeof(PyThreadState));
     if (tstate == NULL) {
         return NULL;
     }
 
-    if (_PyThreadState_GetFrame == NULL) {
-        _PyThreadState_GetFrame = threadstate_getframe;
-    }
-
     tstate->interp = interp;
 
     tstate->frame = NULL;
@@ -607,7 +616,7 @@
     tstate->context_ver = 1;
 
     if (init) {
-        _PyThreadState_Init(runtime, tstate);
+        _PyThreadState_Init(tstate);
     }
 
     HEAD_LOCK(runtime);
@@ -635,16 +644,16 @@
 }
 
 void
-_PyThreadState_Init(_PyRuntimeState *runtime, PyThreadState *tstate)
+_PyThreadState_Init(PyThreadState *tstate)
 {
-    _PyGILState_NoteThreadState(&runtime->gilstate, tstate);
+    _PyGILState_NoteThreadState(&tstate->interp->runtime->gilstate, tstate);
 }
 
 PyObject*
 PyState_FindModule(struct PyModuleDef* module)
 {
     Py_ssize_t index = module->m_base.m_index;
-    PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
+    PyInterpreterState *state = _PyInterpreterState_GET();
     PyObject *res;
     if (module->m_slots) {
         return NULL;
@@ -660,107 +669,120 @@
 }
 
 int
-_PyState_AddModule(PyObject* module, struct PyModuleDef* def)
+_PyState_AddModule(PyThreadState *tstate, PyObject* module, struct PyModuleDef* def)
 {
-    PyInterpreterState *state;
     if (!def) {
-        assert(PyErr_Occurred());
+        assert(_PyErr_Occurred(tstate));
         return -1;
     }
     if (def->m_slots) {
-        PyErr_SetString(PyExc_SystemError,
-                        "PyState_AddModule called on module with slots");
+        _PyErr_SetString(tstate,
+                         PyExc_SystemError,
+                         "PyState_AddModule called on module with slots");
         return -1;
     }
-    state = _PyInterpreterState_GET_UNSAFE();
-    if (!state->modules_by_index) {
-        state->modules_by_index = PyList_New(0);
-        if (!state->modules_by_index)
+
+    PyInterpreterState *interp = tstate->interp;
+    if (!interp->modules_by_index) {
+        interp->modules_by_index = PyList_New(0);
+        if (!interp->modules_by_index) {
             return -1;
+        }
     }
-    while (PyList_GET_SIZE(state->modules_by_index) <= def->m_base.m_index)
-        if (PyList_Append(state->modules_by_index, Py_None) < 0)
+
+    while (PyList_GET_SIZE(interp->modules_by_index) <= def->m_base.m_index) {
+        if (PyList_Append(interp->modules_by_index, Py_None) < 0) {
             return -1;
+        }
+    }
+
     Py_INCREF(module);
-    return PyList_SetItem(state->modules_by_index,
+    return PyList_SetItem(interp->modules_by_index,
                           def->m_base.m_index, module);
 }
 
 int
 PyState_AddModule(PyObject* module, struct PyModuleDef* def)
 {
-    Py_ssize_t index;
-    PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
     if (!def) {
-        Py_FatalError("PyState_AddModule: Module Definition is NULL");
+        Py_FatalError("module definition is NULL");
         return -1;
     }
-    index = def->m_base.m_index;
-    if (state->modules_by_index &&
-        index < PyList_GET_SIZE(state->modules_by_index) &&
-        module == PyList_GET_ITEM(state->modules_by_index, index)) {
-        Py_FatalError("PyState_AddModule: Module already added!");
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyInterpreterState *interp = tstate->interp;
+    Py_ssize_t index = def->m_base.m_index;
+    if (interp->modules_by_index &&
+        index < PyList_GET_SIZE(interp->modules_by_index) &&
+        module == PyList_GET_ITEM(interp->modules_by_index, index))
+    {
+        _Py_FatalErrorFormat(__func__, "module %p already added", module);
         return -1;
     }
-    return _PyState_AddModule(module, def);
+    return _PyState_AddModule(tstate, module, def);
 }
 
 int
 PyState_RemoveModule(struct PyModuleDef* def)
 {
-    PyInterpreterState *state;
-    Py_ssize_t index = def->m_base.m_index;
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyInterpreterState *interp = tstate->interp;
+
     if (def->m_slots) {
-        PyErr_SetString(PyExc_SystemError,
-                        "PyState_RemoveModule called on module with slots");
+        _PyErr_SetString(tstate,
+                         PyExc_SystemError,
+                         "PyState_RemoveModule called on module with slots");
         return -1;
     }
-    state = _PyInterpreterState_GET_UNSAFE();
+
+    Py_ssize_t index = def->m_base.m_index;
     if (index == 0) {
-        Py_FatalError("PyState_RemoveModule: Module index invalid.");
-        return -1;
+        Py_FatalError("invalid module index");
     }
-    if (state->modules_by_index == NULL) {
-        Py_FatalError("PyState_RemoveModule: Interpreters module-list not accessible.");
-        return -1;
+    if (interp->modules_by_index == NULL) {
+        Py_FatalError("Interpreters module-list not accessible.");
     }
-    if (index > PyList_GET_SIZE(state->modules_by_index)) {
-        Py_FatalError("PyState_RemoveModule: Module index out of bounds.");
-        return -1;
+    if (index > PyList_GET_SIZE(interp->modules_by_index)) {
+        Py_FatalError("Module index out of bounds.");
     }
+
     Py_INCREF(Py_None);
-    return PyList_SetItem(state->modules_by_index, index, Py_None);
+    return PyList_SetItem(interp->modules_by_index, index, Py_None);
 }
 
-/* used by import.c:PyImport_Cleanup */
+/* Used by PyImport_Cleanup() */
 void
-_PyState_ClearModules(void)
+_PyInterpreterState_ClearModules(PyInterpreterState *interp)
 {
-    PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
-    if (state->modules_by_index) {
-        Py_ssize_t i;
-        for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) {
-            PyObject *m = PyList_GET_ITEM(state->modules_by_index, i);
-            if (PyModule_Check(m)) {
-                /* cleanup the saved copy of module dicts */
-                PyModuleDef *md = PyModule_GetDef(m);
-                if (md)
-                    Py_CLEAR(md->m_base.m_copy);
+    if (!interp->modules_by_index) {
+        return;
+    }
+
+    Py_ssize_t i;
+    for (i = 0; i < PyList_GET_SIZE(interp->modules_by_index); i++) {
+        PyObject *m = PyList_GET_ITEM(interp->modules_by_index, i);
+        if (PyModule_Check(m)) {
+            /* cleanup the saved copy of module dicts */
+            PyModuleDef *md = PyModule_GetDef(m);
+            if (md) {
+                Py_CLEAR(md->m_base.m_copy);
             }
         }
-        /* Setting modules_by_index to NULL could be dangerous, so we
-           clear the list instead. */
-        if (PyList_SetSlice(state->modules_by_index,
-                            0, PyList_GET_SIZE(state->modules_by_index),
-                            NULL))
-            PyErr_WriteUnraisable(state->modules_by_index);
+    }
+
+    /* Setting modules_by_index to NULL could be dangerous, so we
+       clear the list instead. */
+    if (PyList_SetSlice(interp->modules_by_index,
+                        0, PyList_GET_SIZE(interp->modules_by_index),
+                        NULL)) {
+        PyErr_WriteUnraisable(interp->modules_by_index);
     }
 }
 
 void
 PyThreadState_Clear(PyThreadState *tstate)
 {
-    int verbose = tstate->interp->config.verbose;
+    int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
 
     if (verbose && tstate->frame != NULL) {
         /* bpo-20526: After the main thread calls
@@ -802,80 +824,83 @@
     Py_CLEAR(tstate->async_gen_finalizer);
 
     Py_CLEAR(tstate->context);
+
+    if (tstate->on_delete != NULL) {
+        tstate->on_delete(tstate->on_delete_data);
+    }
 }
 
 
 /* Common code for PyThreadState_Delete() and PyThreadState_DeleteCurrent() */
 static void
-tstate_delete_common(_PyRuntimeState *runtime, PyThreadState *tstate)
+tstate_delete_common(PyThreadState *tstate,
+                     struct _gilstate_runtime_state *gilstate)
 {
-    if (tstate == NULL) {
-        Py_FatalError("PyThreadState_Delete: NULL tstate");
-    }
+    _Py_EnsureTstateNotNULL(tstate);
     PyInterpreterState *interp = tstate->interp;
     if (interp == NULL) {
-        Py_FatalError("PyThreadState_Delete: NULL interp");
+        Py_FatalError("NULL interpreter");
     }
+    _PyRuntimeState *runtime = interp->runtime;
+
     HEAD_LOCK(runtime);
-    if (tstate->prev)
+    if (tstate->prev) {
         tstate->prev->next = tstate->next;
-    else
+    }
+    else {
         interp->tstate_head = tstate->next;
-    if (tstate->next)
+    }
+    if (tstate->next) {
         tstate->next->prev = tstate->prev;
+    }
     HEAD_UNLOCK(runtime);
-    if (tstate->on_delete != NULL) {
-        tstate->on_delete(tstate->on_delete_data);
-    }
-    PyMem_RawFree(tstate);
-}
 
-
-static void
-_PyThreadState_Delete(_PyRuntimeState *runtime, PyThreadState *tstate)
-{
-    struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
-    if (tstate == _PyRuntimeGILState_GetThreadState(gilstate)) {
-        Py_FatalError("PyThreadState_Delete: tstate is still current");
-    }
     if (gilstate->autoInterpreterState &&
         PyThread_tss_get(&gilstate->autoTSSkey) == tstate)
     {
         PyThread_tss_set(&gilstate->autoTSSkey, NULL);
     }
-    tstate_delete_common(runtime, tstate);
+}
+
+
+static void
+_PyThreadState_Delete(PyThreadState *tstate, int check_current)
+{
+    struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+    if (check_current) {
+        if (tstate == _PyRuntimeGILState_GetThreadState(gilstate)) {
+            _Py_FatalErrorFormat(__func__, "tstate %p is still current", tstate);
+        }
+    }
+    tstate_delete_common(tstate, gilstate);
+    PyMem_RawFree(tstate);
 }
 
 
 void
 PyThreadState_Delete(PyThreadState *tstate)
 {
-    _PyThreadState_Delete(&_PyRuntime, tstate);
+    _PyThreadState_Delete(tstate, 1);
 }
 
 
-static void
-_PyThreadState_DeleteCurrent(_PyRuntimeState *runtime)
+void
+_PyThreadState_DeleteCurrent(PyThreadState *tstate)
 {
-    struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
-    PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
-    if (tstate == NULL)
-        Py_FatalError(
-            "PyThreadState_DeleteCurrent: no current tstate");
-    tstate_delete_common(runtime, tstate);
-    if (gilstate->autoInterpreterState &&
-        PyThread_tss_get(&gilstate->autoTSSkey) == tstate)
-    {
-        PyThread_tss_set(&gilstate->autoTSSkey, NULL);
-    }
+    _Py_EnsureTstateNotNULL(tstate);
+    struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+    tstate_delete_common(tstate, gilstate);
     _PyRuntimeGILState_SetThreadState(gilstate, NULL);
-    PyEval_ReleaseLock();
+    _PyEval_ReleaseLock(tstate);
+    PyMem_RawFree(tstate);
 }
 
 void
-PyThreadState_DeleteCurrent()
+PyThreadState_DeleteCurrent(void)
 {
-    _PyThreadState_DeleteCurrent(&_PyRuntime);
+    struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
+    PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
+    _PyThreadState_DeleteCurrent(tstate);
 }
 
 
@@ -890,25 +915,30 @@
 _PyThreadState_DeleteExcept(_PyRuntimeState *runtime, PyThreadState *tstate)
 {
     PyInterpreterState *interp = tstate->interp;
-    PyThreadState *p, *next, *garbage;
+
     HEAD_LOCK(runtime);
     /* Remove all thread states, except tstate, from the linked list of
        thread states.  This will allow calling PyThreadState_Clear()
        without holding the lock. */
-    garbage = interp->tstate_head;
-    if (garbage == tstate)
-        garbage = tstate->next;
-    if (tstate->prev)
+    PyThreadState *list = interp->tstate_head;
+    if (list == tstate) {
+        list = tstate->next;
+    }
+    if (tstate->prev) {
         tstate->prev->next = tstate->next;
-    if (tstate->next)
+    }
+    if (tstate->next) {
         tstate->next->prev = tstate->prev;
+    }
     tstate->prev = tstate->next = NULL;
     interp->tstate_head = tstate;
     HEAD_UNLOCK(runtime);
+
     /* Clear and deallocate all stale thread states.  Even if this
        executes Python code, we should be safe since it executes
        in the current thread, not one of the stale threads. */
-    for (p = garbage; p; p = next) {
+    PyThreadState *p, *next;
+    for (p = list; p; p = next) {
         next = p->next;
         PyThreadState_Clear(p);
         PyMem_RawFree(p);
@@ -927,9 +957,7 @@
 PyThreadState_Get(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    if (tstate == NULL)
-        Py_FatalError("PyThreadState_Get: no current thread");
-
+    _Py_EnsureTstateNotNULL(tstate);
     return tstate;
 }
 
@@ -972,19 +1000,53 @@
    and the caller should assume no per-thread state is available. */
 
 PyObject *
+_PyThreadState_GetDict(PyThreadState *tstate)
+{
+    assert(tstate != NULL);
+    if (tstate->dict == NULL) {
+        tstate->dict = PyDict_New();
+        if (tstate->dict == NULL) {
+            _PyErr_Clear(tstate);
+        }
+    }
+    return tstate->dict;
+}
+
+
+PyObject *
 PyThreadState_GetDict(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    if (tstate == NULL)
+    if (tstate == NULL) {
         return NULL;
-
-    if (tstate->dict == NULL) {
-        PyObject *d;
-        tstate->dict = d = PyDict_New();
-        if (d == NULL)
-            PyErr_Clear();
     }
-    return tstate->dict;
+    return _PyThreadState_GetDict(tstate);
+}
+
+
+PyInterpreterState *
+PyThreadState_GetInterpreter(PyThreadState *tstate)
+{
+    assert(tstate != NULL);
+    return tstate->interp;
+}
+
+
+PyFrameObject*
+PyThreadState_GetFrame(PyThreadState *tstate)
+{
+    assert(tstate != NULL);
+    PyFrameObject *frame = tstate->frame;
+    Py_XINCREF(frame);
+    return frame;
+}
+
+
+uint64_t
+PyThreadState_GetID(PyThreadState *tstate)
+{
+    assert(tstate != NULL);
+    return tstate->id;
 }
 
 
@@ -1009,23 +1071,26 @@
      * head_mutex for the duration.
      */
     HEAD_LOCK(runtime);
-    for (PyThreadState *p = interp->tstate_head; p != NULL; p = p->next) {
-        if (p->thread_id == id) {
-            /* Tricky:  we need to decref the current value
-             * (if any) in p->async_exc, but that can in turn
-             * allow arbitrary Python code to run, including
-             * perhaps calls to this function.  To prevent
-             * deadlock, we need to release head_mutex before
-             * the decref.
-             */
-            PyObject *old_exc = p->async_exc;
-            Py_XINCREF(exc);
-            p->async_exc = exc;
-            HEAD_UNLOCK(runtime);
-            Py_XDECREF(old_exc);
-            _PyEval_SignalAsyncExc(&runtime->ceval);
-            return 1;
+    for (PyThreadState *tstate = interp->tstate_head; tstate != NULL; tstate = tstate->next) {
+        if (tstate->thread_id != id) {
+            continue;
         }
+
+        /* Tricky:  we need to decref the current value
+         * (if any) in tstate->async_exc, but that can in turn
+         * allow arbitrary Python code to run, including
+         * perhaps calls to this function.  To prevent
+         * deadlock, we need to release head_mutex before
+         * the decref.
+         */
+        PyObject *old_exc = tstate->async_exc;
+        Py_XINCREF(exc);
+        tstate->async_exc = exc;
+        HEAD_UNLOCK(runtime);
+
+        Py_XDECREF(old_exc);
+        _PyEval_SignalAsyncExc(tstate);
+        return 1;
     }
     HEAD_UNLOCK(runtime);
     return 0;
@@ -1070,16 +1135,15 @@
 PyObject *
 _PyThread_CurrentFrames(void)
 {
-    PyObject *result;
-    PyInterpreterState *i;
-
-    if (PySys_Audit("sys._current_frames", NULL) < 0) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (_PySys_Audit(tstate, "sys._current_frames", NULL) < 0) {
         return NULL;
     }
 
-    result = PyDict_New();
-    if (result == NULL)
+    PyObject *result = PyDict_New();
+    if (result == NULL) {
         return NULL;
+    }
 
     /* for i in all interpreters:
      *     for t in all of i's thread states:
@@ -1087,32 +1151,35 @@
      * Because these lists can mutate even when the GIL is held, we
      * need to grab head_mutex for the duration.
      */
-    _PyRuntimeState *runtime = &_PyRuntime;
+    _PyRuntimeState *runtime = tstate->interp->runtime;
     HEAD_LOCK(runtime);
+    PyInterpreterState *i;
     for (i = runtime->interpreters.head; i != NULL; i = i->next) {
         PyThreadState *t;
         for (t = i->tstate_head; t != NULL; t = t->next) {
-            PyObject *id;
-            int stat;
-            struct _frame *frame = t->frame;
-            if (frame == NULL)
+            PyFrameObject *frame = t->frame;
+            if (frame == NULL) {
                 continue;
-            id = PyLong_FromUnsignedLong(t->thread_id);
-            if (id == NULL)
-                goto Fail;
-            stat = PyDict_SetItem(result, id, (PyObject *)frame);
+            }
+            PyObject *id = PyLong_FromUnsignedLong(t->thread_id);
+            if (id == NULL) {
+                goto fail;
+            }
+            int stat = PyDict_SetItem(result, id, (PyObject *)frame);
             Py_DECREF(id);
-            if (stat < 0)
-                goto Fail;
+            if (stat < 0) {
+                goto fail;
+            }
         }
     }
+    goto done;
+
+fail:
+    Py_CLEAR(result);
+
+done:
     HEAD_UNLOCK(runtime);
     return result;
-
- Fail:
-    HEAD_UNLOCK(runtime);
-    Py_DECREF(result);
-    return NULL;
 }
 
 /* Python "auto thread state" API. */
@@ -1137,24 +1204,30 @@
 /* Internal initialization/finalization functions called by
    Py_Initialize/Py_FinalizeEx
 */
-void
-_PyGILState_Init(_PyRuntimeState *runtime,
-                 PyInterpreterState *interp, PyThreadState *tstate)
+PyStatus
+_PyGILState_Init(PyThreadState *tstate)
 {
-    /* must init with valid states */
-    assert(interp != NULL);
-    assert(tstate != NULL);
+    if (!_Py_IsMainInterpreter(tstate)) {
+        /* Currently, PyGILState is shared by all interpreters. The main
+         * interpreter is responsible to initialize it. */
+        return _PyStatus_OK();
+    }
 
-    struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
+    /* must init with valid states */
+    assert(tstate != NULL);
+    assert(tstate->interp != NULL);
+
+    struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
 
     if (PyThread_tss_create(&gilstate->autoTSSkey) != 0) {
-        Py_FatalError("Could not allocate TSS entry");
+        return _PyStatus_NO_MEMORY();
     }
-    gilstate->autoInterpreterState = interp;
+    gilstate->autoInterpreterState = tstate->interp;
     assert(PyThread_tss_get(&gilstate->autoTSSkey) == NULL);
     assert(tstate->gilstate_counter == 0);
 
     _PyGILState_NoteThreadState(gilstate, tstate);
+    return _PyStatus_OK();
 }
 
 PyInterpreterState *
@@ -1164,9 +1237,9 @@
 }
 
 void
-_PyGILState_Fini(_PyRuntimeState *runtime)
+_PyGILState_Fini(PyThreadState *tstate)
 {
-    struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
+    struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
     PyThread_tss_delete(&gilstate->autoTSSkey);
     gilstate->autoInterpreterState = NULL;
 }
@@ -1250,12 +1323,11 @@
 int
 PyGILState_Check(void)
 {
-
-    if (!_PyGILState_check_enabled) {
+    struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
+    if (!gilstate->check_enabled) {
         return 1;
     }
 
-    struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
     if (!PyThread_tss_is_created(&gilstate->autoTSSkey)) {
         return 1;
     }
@@ -1271,27 +1343,28 @@
 PyGILState_STATE
 PyGILState_Ensure(void)
 {
-    struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
-    int current;
-    PyThreadState *tcur;
-    int need_init_threads = 0;
+    _PyRuntimeState *runtime = &_PyRuntime;
+    struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
 
     /* Note that we do not auto-init Python here - apart from
        potential races with 2 threads auto-initializing, pep-311
        spells out other issues.  Embedders are expected to have
-       called Py_Initialize() and usually PyEval_InitThreads().
-    */
-    /* Py_Initialize() hasn't been called! */
+       called Py_Initialize(). */
+
+    /* Ensure that _PyEval_InitThreads() and _PyGILState_Init() have been
+       called by Py_Initialize() */
+    assert(_PyEval_ThreadsInitialized(runtime));
     assert(gilstate->autoInterpreterState);
 
-    tcur = (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
+    PyThreadState *tcur = (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
+    int current;
     if (tcur == NULL) {
-        need_init_threads = 1;
-
-        /* Create a new thread state for this thread */
+        /* Create a new Python thread state for this thread */
         tcur = PyThreadState_New(gilstate->autoInterpreterState);
-        if (tcur == NULL)
+        if (tcur == NULL) {
             Py_FatalError("Couldn't create thread-state for new thread");
+        }
+
         /* This is our thread state!  We'll need to delete it in the
            matching call to PyGILState_Release(). */
         tcur->gilstate_counter = 0;
@@ -1312,13 +1385,6 @@
     */
     ++tcur->gilstate_counter;
 
-    if (need_init_threads) {
-        /* At startup, Python has no concrete GIL. If PyGILState_Ensure() is
-           called from a new thread for the first time, we need the create the
-           GIL. */
-        PyEval_InitThreads();
-    }
-
     return current ? PyGILState_LOCKED : PyGILState_UNLOCKED;
 }
 
@@ -1326,8 +1392,8 @@
 PyGILState_Release(PyGILState_STATE oldstate)
 {
     _PyRuntimeState *runtime = &_PyRuntime;
-    PyThreadState *tcur = PyThread_tss_get(&runtime->gilstate.autoTSSkey);
-    if (tcur == NULL) {
+    PyThreadState *tstate = PyThread_tss_get(&runtime->gilstate.autoTSSkey);
+    if (tstate == NULL) {
         Py_FatalError("auto-releasing thread-state, "
                       "but no thread-state for this thread");
     }
@@ -1337,26 +1403,29 @@
        but while this is very new (April 2003), the extra check
        by release-only users can't hurt.
     */
-    if (!PyThreadState_IsCurrent(tcur)) {
-        Py_FatalError("This thread state must be current when releasing");
+    if (!PyThreadState_IsCurrent(tstate)) {
+        _Py_FatalErrorFormat(__func__,
+                             "thread state %p must be current when releasing",
+                             tstate);
     }
-    assert(PyThreadState_IsCurrent(tcur));
-    --tcur->gilstate_counter;
-    assert(tcur->gilstate_counter >= 0); /* illegal counter value */
+    assert(PyThreadState_IsCurrent(tstate));
+    --tstate->gilstate_counter;
+    assert(tstate->gilstate_counter >= 0); /* illegal counter value */
 
     /* If we're going to destroy this thread-state, we must
      * clear it while the GIL is held, as destructors may run.
      */
-    if (tcur->gilstate_counter == 0) {
+    if (tstate->gilstate_counter == 0) {
         /* can't have been locked when we created it */
         assert(oldstate == PyGILState_UNLOCKED);
-        PyThreadState_Clear(tcur);
+        PyThreadState_Clear(tstate);
         /* Delete the thread-state.  Note this releases the GIL too!
          * It's vital that the GIL be held here, to avoid shutdown
          * races; see bugs 225673 and 1061968 (that nasty bug has a
          * habit of coming back).
          */
-        _PyThreadState_DeleteCurrent(runtime);
+        assert(_PyRuntimeGILState_GetThreadState(&runtime->gilstate) == tstate);
+        _PyThreadState_DeleteCurrent(tstate);
     }
     /* Release the lock if necessary */
     else if (oldstate == PyGILState_UNLOCKED)
@@ -1395,19 +1464,19 @@
 }
 
 static int
-_check_xidata(_PyCrossInterpreterData *data)
+_check_xidata(PyThreadState *tstate, _PyCrossInterpreterData *data)
 {
     // data->data can be anything, including NULL, so we don't check it.
 
     // data->obj may be NULL, so we don't check it.
 
     if (data->interp < 0) {
-        PyErr_SetString(PyExc_SystemError, "missing interp");
+        _PyErr_SetString(tstate, PyExc_SystemError, "missing interp");
         return -1;
     }
 
     if (data->new_object == NULL) {
-        PyErr_SetString(PyExc_SystemError, "missing new_object func");
+        _PyErr_SetString(tstate, PyExc_SystemError, "missing new_object func");
         return -1;
     }
 
@@ -1419,9 +1488,9 @@
 int
 _PyObject_GetCrossInterpreterData(PyObject *obj, _PyCrossInterpreterData *data)
 {
-    // _PyInterpreterState_Get() aborts if lookup fails, so we don't need
-    // to check the result for NULL.
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    // PyThreadState_Get() aborts if tstate is NULL.
+    PyThreadState *tstate = PyThreadState_Get();
+    PyInterpreterState *interp = tstate->interp;
 
     // Reset data before re-populating.
     *data = (_PyCrossInterpreterData){0};
@@ -1442,7 +1511,7 @@
 
     // Fill in the blanks and validate the result.
     data->interp = interp->id;
-    if (_check_xidata(data) != 0) {
+    if (_check_xidata(tstate, data) != 0) {
         _PyCrossInterpreterData_Release(data);
         return -1;
     }
@@ -1496,7 +1565,7 @@
     // Switch to the original interpreter.
     PyInterpreterState *interp = _PyInterpreterState_LookUpID(data->interp);
     if (interp == NULL) {
-        // The intepreter was already destroyed.
+        // The interpreter was already destroyed.
         if (data->free != NULL) {
             // XXX Someone leaked some memory...
         }
@@ -1718,6 +1787,44 @@
 }
 
 
+_PyFrameEvalFunction
+_PyInterpreterState_GetEvalFrameFunc(PyInterpreterState *interp)
+{
+    return interp->eval_frame;
+}
+
+
+void
+_PyInterpreterState_SetEvalFrameFunc(PyInterpreterState *interp,
+                                     _PyFrameEvalFunction eval_frame)
+{
+    interp->eval_frame = eval_frame;
+}
+
+
+const PyConfig*
+_PyInterpreterState_GetConfig(PyInterpreterState *interp)
+{
+    return &interp->config;
+}
+
+
+PyStatus
+_PyInterpreterState_SetConfig(PyInterpreterState *interp,
+                              const PyConfig *config)
+{
+    return _PyConfig_Copy(&interp->config, config);
+}
+
+
+const PyConfig*
+_Py_GetConfig(void)
+{
+    assert(PyGILState_Check());
+    PyThreadState *tstate = _PyThreadState_GET();
+    return _PyInterpreterState_GetConfig(tstate->interp);
+}
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Python/pystrcmp.c b/Python/pystrcmp.c
index f9c2277..9224ce4 100644
--- a/Python/pystrcmp.c
+++ b/Python/pystrcmp.c
@@ -6,21 +6,25 @@
 int
 PyOS_mystrnicmp(const char *s1, const char *s2, Py_ssize_t size)
 {
+    const unsigned char *p1, *p2;
     if (size == 0)
         return 0;
-    while ((--size > 0) &&
-           (tolower((unsigned)*s1) == tolower((unsigned)*s2))) {
-        if (!*s1++ || !*s2++)
-            break;
+    p1 = (const unsigned char *)s1;
+    p2 = (const unsigned char *)s2;
+    for (; (--size > 0) && *p1 && *p2 && (tolower(*p1) == tolower(*p2));
+         p1++, p2++) {
+        ;
     }
-    return tolower((unsigned)*s1) - tolower((unsigned)*s2);
+    return tolower(*p1) - tolower(*p2);
 }
 
 int
 PyOS_mystricmp(const char *s1, const char *s2)
 {
-    while (*s1 && (tolower((unsigned)*s1++) == tolower((unsigned)*s2++))) {
+    const unsigned char *p1 = (const unsigned char *)s1;
+    const unsigned char *p2 = (const unsigned char *)s2;
+    for (; *p1 && *p2 && (tolower(*p1) == tolower(*p2)); p1++, p2++) {
         ;
     }
-    return (tolower((unsigned)*s1) - tolower((unsigned)*s2));
+    return (tolower(*p1) - tolower(*p2));
 }
diff --git a/Python/pystrhex.c b/Python/pystrhex.c
index 9d34f71..b74e57a 100644
--- a/Python/pystrhex.c
+++ b/Python/pystrhex.c
@@ -8,12 +8,9 @@
                                  const PyObject* sep, int bytes_per_sep_group,
                                  const int return_bytes)
 {
-    PyObject *retval;
-    Py_UCS1* retbuf;
-    Py_ssize_t i, j, resultlen = 0;
-    Py_UCS1 sep_char = 0;
-    unsigned int abs_bytes_per_sep;
+    assert(arglen >= 0);
 
+    Py_UCS1 sep_char = 0;
     if (sep) {
         Py_ssize_t seplen = PyObject_Length((PyObject*)sep);
         if (seplen < 0) {
@@ -31,9 +28,11 @@
                 return NULL;
             }
             sep_char = PyUnicode_READ_CHAR(sep, 0);
-        } else if (PyBytes_Check(sep)) {
+        }
+        else if (PyBytes_Check(sep)) {
             sep_char = PyBytes_AS_STRING(sep)[0];
-        } else {
+        }
+        else {
             PyErr_SetString(PyExc_TypeError, "sep must be str or bytes.");
             return NULL;
         }
@@ -41,12 +40,13 @@
             PyErr_SetString(PyExc_ValueError, "sep must be ASCII.");
             return NULL;
         }
-    } else {
+    }
+    else {
         bytes_per_sep_group = 0;
     }
 
-    assert(arglen >= 0);
-    abs_bytes_per_sep = abs(bytes_per_sep_group);
+    unsigned int abs_bytes_per_sep = abs(bytes_per_sep_group);
+    Py_ssize_t resultlen = 0;
     if (bytes_per_sep_group && arglen > 0) {
         /* How many sep characters we'll be inserting. */
         resultlen = (arglen - 1) / abs_bytes_per_sep;
@@ -62,43 +62,82 @@
         abs_bytes_per_sep = 0;
     }
 
+    PyObject *retval;
+    Py_UCS1 *retbuf;
     if (return_bytes) {
         /* If _PyBytes_FromSize() were public we could avoid malloc+copy. */
-        retbuf = (Py_UCS1*) PyMem_Malloc(resultlen);
-        if (!retbuf)
-            return PyErr_NoMemory();
-        retval = NULL;  /* silence a compiler warning, assigned later. */
-    } else {
-        retval = PyUnicode_New(resultlen, 127);
-        if (!retval)
+        retval = PyBytes_FromStringAndSize(NULL, resultlen);
+        if (!retval) {
             return NULL;
+        }
+        retbuf = (Py_UCS1 *)PyBytes_AS_STRING(retval);
+    }
+    else {
+        retval = PyUnicode_New(resultlen, 127);
+        if (!retval) {
+            return NULL;
+        }
         retbuf = PyUnicode_1BYTE_DATA(retval);
     }
 
     /* Hexlify */
-    for (i=j=0; i < arglen; ++i) {
-        assert(j < resultlen);
-        unsigned char c;
-        c = (argbuf[i] >> 4) & 0xf;
-        retbuf[j++] = Py_hexdigits[c];
-        c = argbuf[i] & 0xf;
-        retbuf[j++] = Py_hexdigits[c];
-        if (bytes_per_sep_group && i < arglen - 1) {
-            Py_ssize_t anchor;
-            anchor = (bytes_per_sep_group > 0) ? (arglen - 1 - i) : (i + 1);
-            if (anchor % abs_bytes_per_sep == 0) {
+    Py_ssize_t i, j;
+    unsigned char c;
+
+    if (bytes_per_sep_group == 0) {
+        for (i = j = 0; i < arglen; ++i) {
+            assert((j + 1) < resultlen);
+            c = argbuf[i];
+            retbuf[j++] = Py_hexdigits[c >> 4];
+            retbuf[j++] = Py_hexdigits[c & 0x0f];
+        }
+        assert(j == resultlen);
+    }
+    else {
+        /* The number of complete chunk+sep periods */
+        Py_ssize_t chunks = (arglen - 1) / abs_bytes_per_sep;
+        Py_ssize_t chunk;
+        unsigned int k;
+
+        if (bytes_per_sep_group < 0) {
+            i = j = 0;
+            for (chunk = 0; chunk < chunks; chunk++) {
+                for (k = 0; k < abs_bytes_per_sep; k++) {
+                    c = argbuf[i++];
+                    retbuf[j++] = Py_hexdigits[c >> 4];
+                    retbuf[j++] = Py_hexdigits[c & 0x0f];
+                }
                 retbuf[j++] = sep_char;
             }
+            while (i < arglen) {
+                c = argbuf[i++];
+                retbuf[j++] = Py_hexdigits[c >> 4];
+                retbuf[j++] = Py_hexdigits[c & 0x0f];
+            }
+            assert(j == resultlen);
+        }
+        else {
+            i = arglen - 1;
+            j = resultlen - 1;
+            for (chunk = 0; chunk < chunks; chunk++) {
+                for (k = 0; k < abs_bytes_per_sep; k++) {
+                    c = argbuf[i--];
+                    retbuf[j--] = Py_hexdigits[c & 0x0f];
+                    retbuf[j--] = Py_hexdigits[c >> 4];
+                }
+                retbuf[j--] = sep_char;
+            }
+            while (i >= 0) {
+                c = argbuf[i--];
+                retbuf[j--] = Py_hexdigits[c & 0x0f];
+                retbuf[j--] = Py_hexdigits[c >> 4];
+            }
+            assert(j == -1);
         }
     }
-    assert(j == resultlen);
 
-    if (return_bytes) {
-        retval = PyBytes_FromStringAndSize((const char *)retbuf, resultlen);
-        PyMem_Free(retbuf);
-    }
 #ifdef Py_DEBUG
-    else {
+    if (!return_bytes) {
         assert(_PyUnicode_CheckConsistency(retval, 1));
     }
 #endif
diff --git a/Python/pystrtod.c b/Python/pystrtod.c
index 4aa99d5..1c8202c 100644
--- a/Python/pystrtod.c
+++ b/Python/pystrtod.c
@@ -1,6 +1,7 @@
 /* -*- Mode: C; c-file-style: "python" -*- */
 
 #include <Python.h>
+#include "pycore_dtoa.h"
 #include <locale.h>
 
 /* Case-insensitive string match used for nan and inf detection; t should be
@@ -342,9 +343,7 @@
     char *fail_pos;
 
     errno = 0;
-    PyFPE_START_PROTECT("PyOS_string_to_double", return -1.0)
     x = _PyOS_ascii_strtod(s, &fail_pos);
-    PyFPE_END_PROTECT(x)
 
     if (errno == ENOMEM) {
         PyErr_NoMemory();
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 6cdd8ea..70748dc 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -12,33 +12,34 @@
 
 #include "Python-ast.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
-#include "pycore_pyerrors.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pystate.h"
-#include "grammar.h"
-#include "node.h"
-#include "token.h"
-#include "parsetok.h"
-#include "errcode.h"
-#include "code.h"
-#include "symtable.h"
-#include "ast.h"
-#include "marshal.h"
-#include "osdefs.h"
-#include <locale.h>
 
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
+#include "pycore_interp.h"        // PyInterpreterState.importlib
+#include "pycore_object.h"        // _PyDebug_PrintTotalRefs()
+#include "pycore_pyerrors.h"      // _PyErr_Fetch
+#include "pycore_pylifecycle.h"   // _Py_UnhandledKeyboardInterrupt
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "pycore_sysmodule.h"     // _PySys_Audit()
+
+#include "node.h"                 // node
+#include "token.h"                // INDENT
+#include "parsetok.h"             // perrdetail
+#include "errcode.h"              // E_EOF
+#include "code.h"                 // PyCodeObject
+#include "symtable.h"             // PySymtable_BuildObject()
+#include "ast.h"                  // PyAST_FromNodeObject()
+#include "marshal.h"              // PyMarshal_ReadLongFromFile()
+
+#include "pegen_interface.h"      // PyPegen_ASTFrom*
+
+#ifdef MS_WINDOWS
+#  include "malloc.h"             // alloca()
 #endif
 
 #ifdef MS_WINDOWS
-#include "malloc.h" /* for alloca */
+#  undef BYTE
+#  include "windows.h"
 #endif
 
-#ifdef MS_WINDOWS
-#undef BYTE
-#include "windows.h"
-#endif
 
 _Py_IDENTIFIER(builtins);
 _Py_IDENTIFIER(excepthook);
@@ -57,7 +58,7 @@
 extern "C" {
 #endif
 
-extern grammar _PyParser_Grammar; /* From graminit.c */
+extern Py_EXPORTED_SYMBOL grammar _PyParser_Grammar; /* From graminit.c */
 
 /* Forward */
 static void flush_io(void);
@@ -94,7 +95,7 @@
     PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
     int nomem_count = 0;
 #ifdef Py_REF_DEBUG
-    int show_ref_count = _PyInterpreterState_Get()->config.show_ref_count;
+    int show_ref_count = _Py_GetConfig()->show_ref_count;
 #endif
 
     filename = PyUnicode_DecodeFSDefault(filename_str);
@@ -184,6 +185,7 @@
     PyArena *arena;
     const char *ps1 = "", *ps2 = "", *enc = NULL;
     int errcode = 0;
+    int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
     _Py_IDENTIFIER(encoding);
     _Py_IDENTIFIER(__main__);
 
@@ -236,9 +238,17 @@
         Py_XDECREF(oenc);
         return -1;
     }
-    mod = PyParser_ASTFromFileObject(fp, filename, enc,
-                                     Py_single_input, ps1, ps2,
-                                     flags, &errcode, arena);
+
+    if (use_peg) {
+        mod = PyPegen_ASTFromFileObject(fp, filename, Py_single_input,
+                                        enc, ps1, ps2, flags, &errcode, arena);
+    }
+    else {
+        mod = PyParser_ASTFromFileObject(fp, filename, enc,
+                                         Py_single_input, ps1, ps2,
+                                         flags, &errcode, arena);
+    }
+
     Py_XDECREF(v);
     Py_XDECREF(w);
     Py_XDECREF(oenc);
@@ -345,7 +355,7 @@
     filename_obj = PyUnicode_DecodeFSDefault(filename);
     if (filename_obj == NULL)
         return -1;
-    PyInterpreterState *interp = _PyInterpreterState_Get();
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     bootstrap = PyObject_GetAttrString(interp->importlib,
                                        "_bootstrap_external");
     if (bootstrap != NULL) {
@@ -468,9 +478,9 @@
 
 static int
 parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
-                   int *lineno, int *offset, PyObject **text)
+                   Py_ssize_t *lineno, Py_ssize_t *offset, PyObject **text)
 {
-    int hold;
+    Py_ssize_t hold;
     PyObject *v;
     _Py_IDENTIFIER(msg);
     _Py_IDENTIFIER(filename);
@@ -503,7 +513,7 @@
     v = _PyObject_GetAttrId(err, &PyId_lineno);
     if (!v)
         goto finally;
-    hold = _PyLong_AsInt(v);
+    hold = PyLong_AsSsize_t(v);
     Py_DECREF(v);
     if (hold < 0 && PyErr_Occurred())
         goto finally;
@@ -516,7 +526,7 @@
         *offset = -1;
         Py_DECREF(v);
     } else {
-        hold = _PyLong_AsInt(v);
+        hold = PyLong_AsSsize_t(v);
         Py_DECREF(v);
         if (hold < 0 && PyErr_Occurred())
             goto finally;
@@ -542,39 +552,67 @@
 }
 
 static void
-print_error_text(PyObject *f, int offset, PyObject *text_obj)
+print_error_text(PyObject *f, Py_ssize_t offset, PyObject *text_obj)
 {
-    const char *text;
-    const char *nl;
-
-    text = PyUnicode_AsUTF8(text_obj);
+    /* Convert text to a char pointer; return if error */
+    const char *text = PyUnicode_AsUTF8(text_obj);
     if (text == NULL)
         return;
 
-    if (offset >= 0) {
-        if (offset > 0 && (size_t)offset == strlen(text) && text[offset - 1] == '\n')
-            offset--;
-        for (;;) {
-            nl = strchr(text, '\n');
-            if (nl == NULL || nl-text >= offset)
-                break;
-            offset -= (int)(nl+1-text);
-            text = nl+1;
-        }
-        while (*text == ' ' || *text == '\t' || *text == '\f') {
-            text++;
-            offset--;
-        }
+    /* Convert offset from 1-based to 0-based */
+    offset--;
+
+    /* Strip leading whitespace from text, adjusting offset as we go */
+    while (*text == ' ' || *text == '\t' || *text == '\f') {
+        text++;
+        offset--;
     }
+
+    /* Calculate text length excluding trailing newline */
+    Py_ssize_t len = strlen(text);
+    if (len > 0 && text[len-1] == '\n') {
+        len--;
+    }
+
+    /* Clip offset to at most len */
+    if (offset > len) {
+        offset = len;
+    }
+
+    /* Skip past newlines embedded in text */
+    for (;;) {
+        const char *nl = strchr(text, '\n');
+        if (nl == NULL) {
+            break;
+        }
+        Py_ssize_t inl = nl - text;
+        if (inl >= offset) {
+            break;
+        }
+        inl += 1;
+        text += inl;
+        len -= inl;
+        offset -= (int)inl;
+    }
+
+    /* Print text */
     PyFile_WriteString("    ", f);
     PyFile_WriteString(text, f);
-    if (*text == '\0' || text[strlen(text)-1] != '\n')
+
+    /* Make sure there's a newline at the end */
+    if (text[len] != '\n') {
         PyFile_WriteString("\n", f);
-    if (offset == -1)
+    }
+
+    /* Don't print caret if it points to the left of the text */
+    if (offset < 0)
         return;
+
+    /* Write caret line */
     PyFile_WriteString("    ", f);
-    while (--offset > 0)
+    while (--offset >= 0) {
         PyFile_WriteString(" ", f);
+    }
     PyFile_WriteString("^\n", f);
 }
 
@@ -582,7 +620,7 @@
 int
 _Py_HandleSystemExit(int *exitcode_p)
 {
-    int inspect = _PyInterpreterState_GET_UNSAFE()->config.inspect;
+    int inspect = _Py_GetConfig()->inspect;
     if (inspect) {
         /* Don't exit if -i flag was given. This flag is set to 0
          * when entering interactive mode for inspecting. */
@@ -695,8 +733,8 @@
         }
     }
     hook = _PySys_GetObjectId(&PyId_excepthook);
-    if (PySys_Audit("sys.excepthook", "OOOO", hook ? hook : Py_None,
-                    exception, v, tb) < 0) {
+    if (_PySys_Audit(tstate, "sys.excepthook", "OOOO", hook ? hook : Py_None,
+                     exception, v, tb) < 0) {
         if (PyErr_ExceptionMatches(PyExc_RuntimeError)) {
             PyErr_Clear();
             goto done;
@@ -795,7 +833,7 @@
         _PyObject_HasAttrId(value, &PyId_print_file_and_line))
     {
         PyObject *message, *filename, *text;
-        int lineno, offset;
+        Py_ssize_t lineno, offset;
         if (!parse_syntax_error(value, &message, &filename,
                                 &lineno, &offset, &text))
             PyErr_Clear();
@@ -805,7 +843,7 @@
             Py_DECREF(value);
             value = message;
 
-            line = PyUnicode_FromFormat("  File \"%S\", line %d\n",
+            line = PyUnicode_FromFormat("  File \"%S\", line %zd\n",
                                           filename, lineno);
             Py_DECREF(filename);
             if (line != NULL) {
@@ -986,7 +1024,7 @@
     Py_XDECREF(seen);
 
     /* Call file.flush() */
-    PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+    PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
     if (!res) {
         /* Silently ignore file.flush() error */
         PyErr_Clear();
@@ -1020,6 +1058,7 @@
     mod_ty mod;
     PyArena *arena;
     PyObject *filename;
+    int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
 
     filename = _PyUnicode_FromId(&PyId_string); /* borrowed */
     if (filename == NULL)
@@ -1029,7 +1068,13 @@
     if (arena == NULL)
         return NULL;
 
-    mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+    if (use_peg) {
+        mod = PyPegen_ASTFromStringObject(str, filename, start, flags, arena);
+    }
+    else {
+        mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+    }
+
     if (mod != NULL)
         ret = run_mod(mod, filename, globals, locals, flags, arena);
     PyArena_Free(arena);
@@ -1044,6 +1089,7 @@
     mod_ty mod;
     PyArena *arena = NULL;
     PyObject *filename;
+    int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
 
     filename = PyUnicode_DecodeFSDefault(filename_str);
     if (filename == NULL)
@@ -1053,8 +1099,15 @@
     if (arena == NULL)
         goto exit;
 
-    mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
-                                     flags, NULL, arena);
+    if (use_peg) {
+        mod = PyPegen_ASTFromFileObject(fp, filename, start, NULL, NULL, NULL,
+                                        flags, NULL, arena);
+    }
+    else {
+        mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
+                                         flags, NULL, arena);
+    }
+
     if (closeit)
         fclose(fp);
     if (mod == NULL) {
@@ -1080,7 +1133,7 @@
 
     f = _PySys_GetObjectId(&PyId_stderr);
     if (f != NULL) {
-        r = _PyObject_CallMethodId(f, &PyId_flush, NULL);
+        r = _PyObject_CallMethodIdNoArgs(f, &PyId_flush);
         if (r)
             Py_DECREF(r);
         else
@@ -1088,7 +1141,7 @@
     }
     f = _PySys_GetObjectId(&PyId_stdout);
     if (f != NULL) {
-        r = _PyObject_CallMethodId(f, &PyId_flush, NULL);
+        r = _PyObject_CallMethodIdNoArgs(f, &PyId_flush);
         if (r)
             Py_DECREF(r);
         else
@@ -1099,7 +1152,7 @@
 }
 
 static PyObject *
-run_eval_code_obj(PyCodeObject *co, PyObject *globals, PyObject *locals)
+run_eval_code_obj(PyThreadState *tstate, PyCodeObject *co, PyObject *globals, PyObject *locals)
 {
     PyObject *v;
     /*
@@ -1116,14 +1169,14 @@
 
     /* Set globals['__builtins__'] if it doesn't exist */
     if (globals != NULL && PyDict_GetItemString(globals, "__builtins__") == NULL) {
-        PyInterpreterState *interp = _PyInterpreterState_Get();
-        if (PyDict_SetItemString(globals, "__builtins__", interp->builtins) < 0) {
+        if (PyDict_SetItemString(globals, "__builtins__",
+                                 tstate->interp->builtins) < 0) {
             return NULL;
         }
     }
 
     v = PyEval_EvalCode((PyObject*)co, globals, locals);
-    if (!v && PyErr_Occurred() == PyExc_KeyboardInterrupt) {
+    if (!v && _PyErr_Occurred(tstate) == PyExc_KeyboardInterrupt) {
         _Py_UnhandledKeyboardInterrupt = 1;
     }
     return v;
@@ -1133,18 +1186,17 @@
 run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
             PyCompilerFlags *flags, PyArena *arena)
 {
-    PyCodeObject *co;
-    PyObject *v;
-    co = PyAST_CompileObject(mod, filename, flags, -1, arena);
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyCodeObject *co = PyAST_CompileObject(mod, filename, flags, -1, arena);
     if (co == NULL)
         return NULL;
 
-    if (PySys_Audit("exec", "O", co) < 0) {
+    if (_PySys_Audit(tstate, "exec", "O", co) < 0) {
         Py_DECREF(co);
         return NULL;
     }
 
-    v = run_eval_code_obj(co, globals, locals);
+    PyObject *v = run_eval_code_obj(tstate, co, globals, locals);
     Py_DECREF(co);
     return v;
 }
@@ -1153,6 +1205,7 @@
 run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
              PyObject *locals, PyCompilerFlags *flags)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     PyCodeObject *co;
     PyObject *v;
     long magic;
@@ -1181,7 +1234,7 @@
     }
     fclose(fp);
     co = (PyCodeObject *)v;
-    v = run_eval_code_obj(co, globals, locals);
+    v = run_eval_code_obj(tstate, co, globals, locals);
     if (v && flags)
         flags->cf_flags |= (co->co_flags & PyCF_MASK);
     Py_DECREF(co);
@@ -1197,11 +1250,17 @@
 {
     PyCodeObject *co;
     mod_ty mod;
+    int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
     PyArena *arena = PyArena_New();
     if (arena == NULL)
         return NULL;
 
-    mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+    if (use_peg) {
+        mod = PyPegen_ASTFromStringObject(str, filename, start, flags, arena);
+    }
+    else {
+        mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+    }
     if (mod == NULL) {
         PyArena_Free(arena);
         return NULL;
@@ -1298,13 +1357,19 @@
 {
     struct symtable *st;
     mod_ty mod;
+    int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
     PyArena *arena;
 
     arena = PyArena_New();
     if (arena == NULL)
         return NULL;
 
-    mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+    if (use_peg) {
+        mod = PyPegen_ASTFromStringObject(str, filename, start, flags, arena);
+    }
+    else {
+        mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+    }
     if (mod == NULL) {
         PyArena_Free(arena);
         return NULL;
@@ -1566,9 +1631,6 @@
         msg = "unexpected character after line continuation character";
         break;
 
-    case E_IDENTIFIER:
-        msg = "invalid character in identifier";
-        break;
     case E_BADSINGLE:
         msg = "multiple statements found while compiling a single statement";
         break;
diff --git a/Python/pytime.c b/Python/pytime.c
index 109d526..89d63e0 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -5,6 +5,12 @@
 
 #if defined(__APPLE__)
 #include <mach/mach_time.h>   /* mach_absolute_time(), mach_timebase_info() */
+
+#if defined(__APPLE__) && defined(__has_builtin) 
+#  if __has_builtin(__builtin_available)
+#    define HAVE_CLOCK_GETTIME_RUNTIME __builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)
+#  endif
+#endif
 #endif
 
 #define _PyTime_check_mul_overflow(a, b) \
@@ -683,15 +689,22 @@
 
 #else   /* MS_WINDOWS */
     int err;
-#ifdef HAVE_CLOCK_GETTIME
+#if defined(HAVE_CLOCK_GETTIME)
     struct timespec ts;
-#else
+#endif
+
+#if !defined(HAVE_CLOCK_GETTIME) || defined(__APPLE__)
     struct timeval tv;
 #endif
 
     assert(info == NULL || raise);
 
 #ifdef HAVE_CLOCK_GETTIME
+
+#ifdef HAVE_CLOCK_GETTIME_RUNTIME
+    if (HAVE_CLOCK_GETTIME_RUNTIME) {
+#endif
+
     err = clock_gettime(CLOCK_REALTIME, &ts);
     if (err) {
         if (raise) {
@@ -715,14 +728,17 @@
             info->resolution = 1e-9;
         }
     }
-#else   /* HAVE_CLOCK_GETTIME */
+
+#ifdef HAVE_CLOCK_GETTIME_RUNTIME
+    } else { 
+#endif
+
+#endif
+
+#if !defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_GETTIME_RUNTIME)
 
      /* test gettimeofday() */
-#ifdef GETTIMEOFDAY_NO_TZ
-    err = gettimeofday(&tv);
-#else
     err = gettimeofday(&tv, (struct timezone *)NULL);
-#endif
     if (err) {
         if (raise) {
             PyErr_SetFromErrno(PyExc_OSError);
@@ -739,6 +755,11 @@
         info->monotonic = 0;
         info->adjustable = 1;
     }
+
+#if defined(HAVE_CLOCK_GETTIME_RUNTIME) && defined(HAVE_CLOCK_GETTIME)
+    } /* end of availibity block */
+#endif
+
 #endif   /* !HAVE_CLOCK_GETTIME */
 #endif   /* !MS_WINDOWS */
     return 0;
@@ -750,7 +771,7 @@
     _PyTime_t t;
     if (pygettimeofday(&t, NULL, 0) < 0) {
         /* should not happen, _PyTime_Init() checked the clock at startup */
-        Py_UNREACHABLE();
+        Py_FatalError("pygettimeofday() failed");
     }
     return t;
 }
@@ -780,7 +801,7 @@
             return -1;
         }
         /* Hello, time traveler! */
-        Py_UNREACHABLE();
+        Py_FatalError("pymonotonic: integer overflow");
     }
     *tp = t * MS_TO_NS;
 
@@ -922,7 +943,7 @@
     if (pymonotonic(&t, NULL, 0) < 0) {
         /* should not happen, _PyTime_Init() checked that monotonic clock at
            startup */
-        Py_UNREACHABLE();
+        Py_FatalError("pymonotonic() failed");
     }
     return t;
 }
@@ -1023,7 +1044,7 @@
 {
     _PyTime_t t;
     if (_PyTime_GetPerfCounterWithInfo(&t, NULL)) {
-        Py_UNREACHABLE();
+        Py_FatalError("_PyTime_GetPerfCounterWithInfo() failed");
     }
     return t;
 }
@@ -1063,7 +1084,7 @@
     return 0;
 #else /* !MS_WINDOWS */
 
-#ifdef _AIX
+#if defined(_AIX) && (SIZEOF_TIME_T < 8)
     /* bpo-34373: AIX does not return NULL if t is too small or too large */
     if (t < -2145916800 /* 1902-01-01 */
        || t > 2145916800 /* 2038-01-01 */) {
diff --git a/Python/structmember.c b/Python/structmember.c
index e653d02..ba88e15 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -2,8 +2,7 @@
 /* Map C struct members to Python object attributes */
 
 #include "Python.h"
-
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 PyObject *
 PyMember_GetOne(const char *addr, PyMemberDef *l)
diff --git a/Python/symtable.c b/Python/symtable.c
index 30482d9..d192f31 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -1,8 +1,8 @@
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"   // _PyThreadState_GET()
 #include "symtable.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
-#include "structmember.h"
+#include "structmember.h"         // PyMemberDef
 
 /* error strings used for warnings */
 #define GLOBAL_PARAM \
@@ -190,7 +190,7 @@
 static int symtable_enter_block(struct symtable *st, identifier name,
                                 _Py_block_ty block, void *ast, int lineno,
                                 int col_offset);
-static int symtable_exit_block(struct symtable *st, void *ast);
+static int symtable_exit_block(struct symtable *st);
 static int symtable_visit_stmt(struct symtable *st, stmt_ty s);
 static int symtable_visit_expr(struct symtable *st, expr_ty s);
 static int symtable_visit_genexp(struct symtable *st, expr_ty s);
@@ -202,11 +202,10 @@
 static int symtable_visit_alias(struct symtable *st, alias_ty);
 static int symtable_visit_comprehension(struct symtable *st, comprehension_ty);
 static int symtable_visit_keyword(struct symtable *st, keyword_ty);
-static int symtable_visit_slice(struct symtable *st, slice_ty);
 static int symtable_visit_params(struct symtable *st, asdl_seq *args);
 static int symtable_visit_argannotations(struct symtable *st, asdl_seq *args);
 static int symtable_implicit_arg(struct symtable *st, int pos);
-static int symtable_visit_annotations(struct symtable *st, stmt_ty s, arguments_ty, expr_ty);
+static int symtable_visit_annotations(struct symtable *st, arguments_ty, expr_ty);
 static int symtable_visit_withitem(struct symtable *st, withitem_ty item);
 
 
@@ -318,16 +317,12 @@
                         (stmt_ty)asdl_seq_GET(seq, i)))
                 goto error;
         break;
-    case Suite_kind:
-        PyErr_SetString(PyExc_RuntimeError,
-                        "this compiler does not handle Suites");
-        goto error;
     case FunctionType_kind:
         PyErr_SetString(PyExc_RuntimeError,
                         "this compiler does not handle FunctionTypes");
         goto error;
     }
-    if (!symtable_exit_block(st, (void *)mod)) {
+    if (!symtable_exit_block(st)) {
         PySymtable_Free(st);
         return NULL;
     }
@@ -345,7 +340,7 @@
     PySymtable_Free(st);
     return NULL;
  error:
-    (void) symtable_exit_block(st, (void *)mod);
+    (void) symtable_exit_block(st);
     PySymtable_Free(st);
     return NULL;
 }
@@ -954,7 +949,7 @@
 */
 
 static int
-symtable_exit_block(struct symtable *st, void *ast)
+symtable_exit_block(struct symtable *st)
 {
     Py_ssize_t size;
 
@@ -1188,7 +1183,7 @@
             VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
         if (s->v.FunctionDef.args->kw_defaults)
             VISIT_SEQ_WITH_NULL(st, expr, s->v.FunctionDef.args->kw_defaults);
-        if (!symtable_visit_annotations(st, s, s->v.FunctionDef.args,
+        if (!symtable_visit_annotations(st, s->v.FunctionDef.args,
                                         s->v.FunctionDef.returns))
             VISIT_QUIT(st, 0);
         if (s->v.FunctionDef.decorator_list)
@@ -1199,7 +1194,7 @@
             VISIT_QUIT(st, 0);
         VISIT(st, arguments, s->v.FunctionDef.args);
         VISIT_SEQ(st, stmt, s->v.FunctionDef.body);
-        if (!symtable_exit_block(st, s))
+        if (!symtable_exit_block(st))
             VISIT_QUIT(st, 0);
         break;
     case ClassDef_kind: {
@@ -1217,7 +1212,7 @@
         st->st_private = s->v.ClassDef.name;
         VISIT_SEQ(st, stmt, s->v.ClassDef.body);
         st->st_private = tmp;
-        if (!symtable_exit_block(st, s))
+        if (!symtable_exit_block(st))
             VISIT_QUIT(st, 0);
         break;
     }
@@ -1406,7 +1401,7 @@
         if (s->v.AsyncFunctionDef.args->kw_defaults)
             VISIT_SEQ_WITH_NULL(st, expr,
                                 s->v.AsyncFunctionDef.args->kw_defaults);
-        if (!symtable_visit_annotations(st, s, s->v.AsyncFunctionDef.args,
+        if (!symtable_visit_annotations(st, s->v.AsyncFunctionDef.args,
                                         s->v.AsyncFunctionDef.returns))
             VISIT_QUIT(st, 0);
         if (s->v.AsyncFunctionDef.decorator_list)
@@ -1418,7 +1413,7 @@
         st->st_cur->ste_coroutine = 1;
         VISIT(st, arguments, s->v.AsyncFunctionDef.args);
         VISIT_SEQ(st, stmt, s->v.AsyncFunctionDef.body);
-        if (!symtable_exit_block(st, s))
+        if (!symtable_exit_block(st))
             VISIT_QUIT(st, 0);
         break;
     case AsyncWith_kind:
@@ -1565,7 +1560,7 @@
             VISIT_QUIT(st, 0);
         VISIT(st, arguments, e->v.Lambda.args);
         VISIT(st, expr, e->v.Lambda.body);
-        if (!symtable_exit_block(st, (void *)e))
+        if (!symtable_exit_block(st))
             VISIT_QUIT(st, 0);
         break;
     }
@@ -1636,11 +1631,19 @@
         break;
     case Subscript_kind:
         VISIT(st, expr, e->v.Subscript.value);
-        VISIT(st, slice, e->v.Subscript.slice);
+        VISIT(st, expr, e->v.Subscript.slice);
         break;
     case Starred_kind:
         VISIT(st, expr, e->v.Starred.value);
         break;
+    case Slice_kind:
+        if (e->v.Slice.lower)
+            VISIT(st, expr, e->v.Slice.lower)
+        if (e->v.Slice.upper)
+            VISIT(st, expr, e->v.Slice.upper)
+        if (e->v.Slice.step)
+            VISIT(st, expr, e->v.Slice.step)
+        break;
     case Name_kind:
         if (!symtable_add_def(st, e->v.Name.id,
                               e->v.Name.ctx == Load ? USE : DEF_LOCAL))
@@ -1714,8 +1717,7 @@
 }
 
 static int
-symtable_visit_annotations(struct symtable *st, stmt_ty s,
-                           arguments_ty a, expr_ty returns)
+symtable_visit_annotations(struct symtable *st, arguments_ty a, expr_ty returns)
 {
     if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs))
         return 0;
@@ -1847,28 +1849,6 @@
 
 
 static int
-symtable_visit_slice(struct symtable *st, slice_ty s)
-{
-    switch (s->kind) {
-    case Slice_kind:
-        if (s->v.Slice.lower)
-            VISIT(st, expr, s->v.Slice.lower)
-        if (s->v.Slice.upper)
-            VISIT(st, expr, s->v.Slice.upper)
-        if (s->v.Slice.step)
-            VISIT(st, expr, s->v.Slice.step)
-        break;
-    case ExtSlice_kind:
-        VISIT_SEQ(st, slice, s->v.ExtSlice.dims)
-        break;
-    case Index_kind:
-        VISIT(st, expr, s->v.Index.value)
-        break;
-    }
-    return 1;
-}
-
-static int
 symtable_handle_comprehension(struct symtable *st, expr_ty e,
                               identifier scope_name, asdl_seq *generators,
                               expr_ty elt, expr_ty value)
@@ -1893,7 +1873,7 @@
 
     /* Outermost iter is received as an argument */
     if (!symtable_implicit_arg(st, 0)) {
-        symtable_exit_block(st, (void *)e);
+        symtable_exit_block(st);
         return 0;
     }
     /* Visit iteration variable target, and mark them as such */
@@ -1915,11 +1895,11 @@
         PyErr_SyntaxLocationObject(st->st_filename,
                                    st->st_cur->ste_lineno,
                                    st->st_cur->ste_col_offset + 1);
-        symtable_exit_block(st, (void *)e);
+        symtable_exit_block(st);
         return 0;
     }
     st->st_cur->ste_generator = is_generator;
-    return symtable_exit_block(st, (void *)e);
+    return symtable_exit_block(st);
 }
 
 static int
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index b544f2b..3e4115f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -16,17 +16,19 @@
 
 #include "Python.h"
 #include "code.h"
-#include "frameobject.h"
+#include "frameobject.h"          // PyFrame_GetBack()
+#include "pycore_ceval.h"         // _Py_RecursionLimitLowerWaterMark()
 #include "pycore_initconfig.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
+#include "pycore_object.h"
 #include "pycore_pathconfig.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pylifecycle.h"
+#include "pycore_pymem.h"         // _PyMem_SetDefaultAllocator()
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include "pycore_tupleobject.h"
-#include "pythread.h"
-#include "pydtrace.h"
 
-#include "osdefs.h"
+#include "pydtrace.h"
+#include "osdefs.h"               // DELIM
 #include <locale.h>
 
 #ifdef MS_WINDOWS
@@ -59,10 +61,10 @@
 _Py_IDENTIFIER(warnoptions);
 _Py_IDENTIFIER(write);
 
-PyObject *
-_PySys_GetObjectId(_Py_Identifier *key)
+static PyObject *
+sys_get_object_id(PyThreadState *tstate, _Py_Identifier *key)
 {
-    PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+    PyObject *sd = tstate->interp->sysdict;
     if (sd == NULL) {
         return NULL;
     }
@@ -70,19 +72,27 @@
 }
 
 PyObject *
+_PySys_GetObjectId(_Py_Identifier *key)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    return sys_get_object_id(tstate, key);
+}
+
+PyObject *
 PySys_GetObject(const char *name)
 {
-    PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *sd = tstate->interp->sysdict;
     if (sd == NULL) {
         return NULL;
     }
     return PyDict_GetItemString(sd, name);
 }
 
-int
-_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
+static int
+sys_set_object_id(PyThreadState *tstate, _Py_Identifier *key, PyObject *v)
 {
-    PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+    PyObject *sd = tstate->interp->sysdict;
     if (v == NULL) {
         if (_PyDict_GetItemId(sd, key) == NULL) {
             return 0;
@@ -97,9 +107,16 @@
 }
 
 int
-PySys_SetObject(const char *name, PyObject *v)
+_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
 {
-    PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+    PyThreadState *tstate = _PyThreadState_GET();
+    return sys_set_object_id(tstate, key, v);
+}
+
+static int
+sys_set_object(PyThreadState *tstate, const char *name, PyObject *v)
+{
+    PyObject *sd = tstate->interp->sysdict;
     if (v == NULL) {
         if (PyDict_GetItemString(sd, name) == NULL) {
             return 0;
@@ -113,60 +130,74 @@
     }
 }
 
-static int
-should_audit(void)
+int
+PySys_SetObject(const char *name, PyObject *v)
 {
-    PyThreadState *ts = _PyThreadState_GET();
-    if (!ts) {
-        return 0;
-    }
-    PyInterpreterState *is = ts ? ts->interp : NULL;
-    return _PyRuntime.audit_hook_head
-        || (is && is->audit_hooks)
-        || PyDTrace_AUDIT_ENABLED();
+    PyThreadState *tstate = _PyThreadState_GET();
+    return sys_set_object(tstate, name, v);
 }
 
-int
-PySys_Audit(const char *event, const char *argFormat, ...)
+
+static int
+should_audit(PyInterpreterState *is)
 {
+    /* tstate->interp cannot be NULL, but test it just in case
+       for extra safety */
+    assert(is != NULL);
+    if (!is) {
+        return 0;
+    }
+    return (is->runtime->audit_hook_head
+            || is->audit_hooks
+            || PyDTrace_AUDIT_ENABLED());
+}
+
+
+static int
+sys_audit_tstate(PyThreadState *ts, const char *event,
+                 const char *argFormat, va_list vargs)
+{
+    /* N format is inappropriate, because you do not know
+       whether the reference is consumed by the call.
+       Assert rather than exception for perf reasons */
+    assert(!argFormat || !strchr(argFormat, 'N'));
+
+    if (!ts) {
+        /* Audit hooks cannot be called with a NULL thread state */
+        return 0;
+    }
+
+    /* The current implementation cannot be called if tstate is not
+       the current Python thread state. */
+    assert(ts == _PyThreadState_GET());
+
+    /* Early exit when no hooks are registered */
+    PyInterpreterState *is = ts->interp;
+    if (!should_audit(is)) {
+        return 0;
+    }
+
     PyObject *eventName = NULL;
     PyObject *eventArgs = NULL;
     PyObject *hooks = NULL;
     PyObject *hook = NULL;
     int res = -1;
 
-    /* N format is inappropriate, because you do not know
-       whether the reference is consumed by the call.
-       Assert rather than exception for perf reasons */
-    assert(!argFormat || !strchr(argFormat, 'N'));
-
-    /* Early exit when no hooks are registered */
-    if (!should_audit()) {
-        return 0;
-    }
-
-    _Py_AuditHookEntry *e = _PyRuntime.audit_hook_head;
-    PyThreadState *ts = _PyThreadState_GET();
-    PyInterpreterState *is = ts ? ts->interp : NULL;
     int dtrace = PyDTrace_AUDIT_ENABLED();
 
     PyObject *exc_type, *exc_value, *exc_tb;
-    if (ts) {
-        PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
-    }
+    _PyErr_Fetch(ts, &exc_type, &exc_value, &exc_tb);
 
     /* Initialize event args now */
     if (argFormat && argFormat[0]) {
-        va_list args;
-        va_start(args, argFormat);
-        eventArgs = _Py_VaBuildValue_SizeT(argFormat, args);
-        va_end(args);
+        eventArgs = _Py_VaBuildValue_SizeT(argFormat, vargs);
         if (eventArgs && !PyTuple_Check(eventArgs)) {
             PyObject *argTuple = PyTuple_Pack(1, eventArgs);
             Py_DECREF(eventArgs);
             eventArgs = argTuple;
         }
-    } else {
+    }
+    else {
         eventArgs = PyTuple_New(0);
     }
     if (!eventArgs) {
@@ -174,6 +205,7 @@
     }
 
     /* Call global hooks */
+    _Py_AuditHookEntry *e = is->runtime->audit_hook_head;
     for (; e; e = e->next) {
         if (e->hookCFunction(event, eventArgs, e->userData) < 0) {
             goto exit;
@@ -186,7 +218,7 @@
     }
 
     /* Call interpreter hooks */
-    if (is && is->audit_hooks) {
+    if (is->audit_hooks) {
         eventName = PyUnicode_FromString(event);
         if (!eventName) {
             goto exit;
@@ -215,8 +247,8 @@
                 ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
                 ts->tracing--;
             }
-            o = PyObject_CallFunctionObjArgs(hook, eventName,
-                                             eventArgs, NULL);
+            PyObject* args[2] = {eventName, eventArgs};
+            o = _PyObject_FastCallTstate(ts, hook, args, 2);
             if (canTrace) {
                 ts->tracing++;
                 ts->use_tracing = 0;
@@ -229,7 +261,7 @@
         }
         ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
         ts->tracing--;
-        if (PyErr_Occurred()) {
+        if (_PyErr_Occurred(ts)) {
             goto exit;
         }
     }
@@ -242,43 +274,81 @@
     Py_XDECREF(eventName);
     Py_XDECREF(eventArgs);
 
-    if (ts) {
-        if (!res) {
-            PyErr_Restore(exc_type, exc_value, exc_tb);
-        } else {
-            assert(PyErr_Occurred());
-            Py_XDECREF(exc_type);
-            Py_XDECREF(exc_value);
-            Py_XDECREF(exc_tb);
-        }
+    if (!res) {
+        _PyErr_Restore(ts, exc_type, exc_value, exc_tb);
+    }
+    else {
+        assert(_PyErr_Occurred(ts));
+        Py_XDECREF(exc_type);
+        Py_XDECREF(exc_value);
+        Py_XDECREF(exc_tb);
     }
 
     return res;
 }
 
+int
+_PySys_Audit(PyThreadState *tstate, const char *event,
+             const char *argFormat, ...)
+{
+    va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, argFormat);
+#else
+    va_start(vargs);
+#endif
+    int res = sys_audit_tstate(tstate, event, argFormat, vargs);
+    va_end(vargs);
+    return res;
+}
+
+int
+PySys_Audit(const char *event, const char *argFormat, ...)
+{
+    PyThreadState *tstate = _PyThreadState_GET();
+    va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, argFormat);
+#else
+    va_start(vargs);
+#endif
+    int res = sys_audit_tstate(tstate, event, argFormat, vargs);
+    va_end(vargs);
+    return res;
+}
+
 /* We expose this function primarily for our own cleanup during
  * finalization. In general, it should not need to be called,
- * and as such it is not defined in any header files.
- */
-void _PySys_ClearAuditHooks(void) {
-    /* Must be finalizing to clear hooks */
-    _PyRuntimeState *runtime = &_PyRuntime;
-    PyThreadState *ts = _PyRuntimeState_GetThreadState(runtime);
-    assert(!ts || _Py_CURRENTLY_FINALIZING(runtime, ts));
-    if (!ts || !_Py_CURRENTLY_FINALIZING(runtime, ts))
+ * and as such the function is not exported.
+ *
+ * Must be finalizing to clear hooks */
+void
+_PySys_ClearAuditHooks(PyThreadState *ts)
+{
+    assert(ts != NULL);
+    if (!ts) {
         return;
+    }
 
-    if (Py_VerboseFlag) {
+    _PyRuntimeState *runtime = ts->interp->runtime;
+    PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime);
+    assert(finalizing == ts);
+    if (finalizing != ts) {
+        return;
+    }
+
+    const PyConfig *config = _PyInterpreterState_GetConfig(ts->interp);
+    if (config->verbose) {
         PySys_WriteStderr("# clear sys.audit hooks\n");
     }
 
     /* Hooks can abort later hooks for this event, but cannot
        abort the clear operation itself. */
-    PySys_Audit("cpython._PySys_ClearAuditHooks", NULL);
-    PyErr_Clear();
+    _PySys_Audit(ts, "cpython._PySys_ClearAuditHooks", NULL);
+    _PyErr_Clear(ts);
 
-    _Py_AuditHookEntry *e = _PyRuntime.audit_hook_head, *n;
-    _PyRuntime.audit_hook_head = NULL;
+    _Py_AuditHookEntry *e = runtime->audit_hook_head, *n;
+    runtime->audit_hook_head = NULL;
     while (e) {
         n = e->next;
         PyMem_RawFree(e);
@@ -289,33 +359,46 @@
 int
 PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
 {
+    /* tstate can be NULL, so access directly _PyRuntime:
+       PySys_AddAuditHook() can be called before Python is initialized. */
+    _PyRuntimeState *runtime = &_PyRuntime;
+    PyThreadState *tstate;
+    if (runtime->initialized) {
+        tstate = _PyRuntimeState_GetThreadState(runtime);
+    }
+    else {
+        tstate = NULL;
+    }
+
     /* Invoke existing audit hooks to allow them an opportunity to abort. */
     /* Cannot invoke hooks until we are initialized */
-    if (Py_IsInitialized()) {
-        if (PySys_Audit("sys.addaudithook", NULL) < 0) {
-            if (PyErr_ExceptionMatches(PyExc_RuntimeError)) {
+    if (tstate != NULL) {
+        if (_PySys_Audit(tstate, "sys.addaudithook", NULL) < 0) {
+            if (_PyErr_ExceptionMatches(tstate, PyExc_RuntimeError)) {
                 /* We do not report errors derived from RuntimeError */
-                PyErr_Clear();
+                _PyErr_Clear(tstate);
                 return 0;
             }
             return -1;
         }
     }
 
-    _Py_AuditHookEntry *e = _PyRuntime.audit_hook_head;
+    _Py_AuditHookEntry *e = runtime->audit_hook_head;
     if (!e) {
         e = (_Py_AuditHookEntry*)PyMem_RawMalloc(sizeof(_Py_AuditHookEntry));
-        _PyRuntime.audit_hook_head = e;
+        runtime->audit_hook_head = e;
     } else {
-        while (e->next)
+        while (e->next) {
             e = e->next;
+        }
         e = e->next = (_Py_AuditHookEntry*)PyMem_RawMalloc(
             sizeof(_Py_AuditHookEntry));
     }
 
     if (!e) {
-        if (Py_IsInitialized())
-            PyErr_NoMemory();
+        if (tstate != NULL) {
+            _PyErr_NoMemory(tstate);
+        }
         return -1;
     }
 
@@ -338,18 +421,19 @@
 sys_addaudithook_impl(PyObject *module, PyObject *hook)
 /*[clinic end generated code: output=4f9c17aaeb02f44e input=0f3e191217a45e34]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
+
     /* Invoke existing audit hooks to allow them an opportunity to abort. */
-    if (PySys_Audit("sys.addaudithook", NULL) < 0) {
-        if (PyErr_ExceptionMatches(PyExc_Exception)) {
+    if (_PySys_Audit(tstate, "sys.addaudithook", NULL) < 0) {
+        if (_PyErr_ExceptionMatches(tstate, PyExc_Exception)) {
             /* We do not report errors derived from Exception */
-            PyErr_Clear();
+            _PyErr_Clear(tstate);
             Py_RETURN_NONE;
         }
         return NULL;
     }
 
-    PyInterpreterState *is = _PyInterpreterState_Get();
-
+    PyInterpreterState *is = tstate->interp;
     if (is->audit_hooks == NULL) {
         is->audit_hooks = PyList_New(0);
         if (is->audit_hooks == NULL) {
@@ -372,23 +456,30 @@
 static PyObject *
 sys_audit(PyObject *self, PyObject *const *args, Py_ssize_t argc)
 {
+    PyThreadState *tstate = _PyThreadState_GET();
+    _Py_EnsureTstateNotNULL(tstate);
+
     if (argc == 0) {
-        PyErr_SetString(PyExc_TypeError, "audit() missing 1 required positional argument: 'event'");
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "audit() missing 1 required positional argument: "
+                         "'event'");
         return NULL;
     }
 
-    if (!should_audit()) {
+    if (!should_audit(tstate->interp)) {
         Py_RETURN_NONE;
     }
 
     PyObject *auditEvent = args[0];
     if (!auditEvent) {
-        PyErr_SetString(PyExc_TypeError, "expected str for argument 'event'");
+        _PyErr_SetString(tstate, PyExc_TypeError,
+                         "expected str for argument 'event'");
         return NULL;
     }
     if (!PyUnicode_Check(auditEvent)) {
-        PyErr_Format(PyExc_TypeError, "expected str for argument 'event', not %.200s",
-            Py_TYPE(auditEvent)->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "expected str for argument 'event', not %.200s",
+                      Py_TYPE(auditEvent)->tp_name);
         return NULL;
     }
     const char *event = PyUnicode_AsUTF8(auditEvent);
@@ -401,7 +492,7 @@
         return NULL;
     }
 
-    int res = PySys_Audit(event, "O", auditArgs);
+    int res = _PySys_Audit(tstate, event, "O", auditArgs);
     Py_DECREF(auditArgs);
 
     if (res < 0) {
@@ -415,7 +506,8 @@
 static PyObject *
 sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
 {
-    assert(!PyErr_Occurred());
+    PyThreadState *tstate = _PyThreadState_GET();
+    assert(!_PyErr_Occurred(tstate));
     char *envar = Py_GETENV("PYTHONBREAKPOINT");
 
     if (envar == NULL || strlen(envar) == 0) {
@@ -431,7 +523,7 @@
      * we need to save a copy of envar. */
     envar = _PyMem_RawStrdup(envar);
     if (envar == NULL) {
-        PyErr_NoMemory();
+        _PyErr_NoMemory(tstate);
         return NULL;
     }
     const char *last_dot = strrchr(envar, '.');
@@ -460,7 +552,7 @@
     Py_DECREF(modulepath);
 
     if (module == NULL) {
-        if (PyErr_ExceptionMatches(PyExc_ImportError)) {
+        if (_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) {
             goto warn;
         }
         PyMem_RawFree(envar);
@@ -471,20 +563,20 @@
     Py_DECREF(module);
 
     if (hook == NULL) {
-        if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
             goto warn;
         }
         PyMem_RawFree(envar);
         return NULL;
     }
     PyMem_RawFree(envar);
-    PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
+    PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
     Py_DECREF(hook);
     return retval;
 
   warn:
     /* If any of the imports went wrong, then warn and ignore. */
-    PyErr_Clear();
+    _PyErr_Clear(tstate);
     int status = PyErr_WarnFormat(
         PyExc_RuntimeWarning, 0,
         "Ignoring unimportable $PYTHONBREAKPOINT: \"%s\"", envar);
@@ -539,7 +631,7 @@
         goto error;
     }
     if (buffer) {
-        result = _PyObject_CallMethodIdObjArgs(buffer, &PyId_write, encoded, NULL);
+        result = _PyObject_CallMethodIdOneArg(buffer, &PyId_write, encoded);
         Py_DECREF(buffer);
         Py_DECREF(encoded);
         if (result == NULL)
@@ -583,12 +675,13 @@
     PyObject *outf;
     PyObject *builtins;
     static PyObject *newline = NULL;
-    int err;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     builtins = _PyImport_GetModuleId(&PyId_builtins);
     if (builtins == NULL) {
-        if (!PyErr_Occurred()) {
-            PyErr_SetString(PyExc_RuntimeError, "lost builtins module");
+        if (!_PyErr_Occurred(tstate)) {
+            _PyErr_SetString(tstate, PyExc_RuntimeError,
+                             "lost builtins module");
         }
         return NULL;
     }
@@ -602,19 +695,21 @@
     }
     if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0)
         return NULL;
-    outf = _PySys_GetObjectId(&PyId_stdout);
+    outf = sys_get_object_id(tstate, &PyId_stdout);
     if (outf == NULL || outf == Py_None) {
-        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+        _PyErr_SetString(tstate, PyExc_RuntimeError, "lost sys.stdout");
         return NULL;
     }
     if (PyFile_WriteObject(o, outf, 0) != 0) {
-        if (PyErr_ExceptionMatches(PyExc_UnicodeEncodeError)) {
+        if (_PyErr_ExceptionMatches(tstate, PyExc_UnicodeEncodeError)) {
+            int err;
             /* repr(o) is not encodable to sys.stdout.encoding with
              * sys.stdout.errors error handler (which is probably 'strict') */
-            PyErr_Clear();
+            _PyErr_Clear(tstate);
             err = sys_displayhook_unencodable(outf, o);
-            if (err)
+            if (err) {
                 return NULL;
+            }
         }
         else {
             return NULL;
@@ -721,7 +816,8 @@
 /*[clinic end generated code: output=13870986c1ab2ec0 input=b86ca9497baa94f2]*/
 {
     /* Raise SystemExit so callers may catch it or clean up. */
-    PyErr_SetObject(PyExc_SystemExit, status);
+    PyThreadState *tstate = _PyThreadState_GET();
+    _PyErr_SetObject(tstate, PyExc_SystemExit, status);
     return NULL;
 }
 
@@ -750,8 +846,8 @@
 sys_getfilesystemencoding_impl(PyObject *module)
 /*[clinic end generated code: output=1dc4bdbe9be44aa7 input=8475f8649b8c7d8c]*/
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    const PyConfig *config = &interp->config;
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
     return PyUnicode_FromWideChar(config->filesystem_encoding, -1);
 }
 
@@ -765,8 +861,8 @@
 sys_getfilesystemencodeerrors_impl(PyObject *module)
 /*[clinic end generated code: output=ba77b36bbf7c96f5 input=22a1e8365566f1e5]*/
 {
-    PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-    const PyConfig *config = &interp->config;
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
     return PyUnicode_FromWideChar(config->filesystem_errors, -1);
 }
 
@@ -787,14 +883,15 @@
 sys_intern_impl(PyObject *module, PyObject *s)
 /*[clinic end generated code: output=be680c24f5c9e5d6 input=849483c006924e2f]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     if (PyUnicode_CheckExact(s)) {
         Py_INCREF(s);
         PyUnicode_InternInPlace(&s);
         return s;
     }
     else {
-        PyErr_Format(PyExc_TypeError,
-                     "can't intern %.400s", s->ob_type->tp_name);
+        _PyErr_Format(tstate, PyExc_TypeError,
+                      "can't intern %.400s", Py_TYPE(s)->tp_name);
         return NULL;
     }
 }
@@ -829,22 +926,20 @@
 
 
 static PyObject *
-call_trampoline(PyObject* callback,
+call_trampoline(PyThreadState *tstate, PyObject* callback,
                 PyFrameObject *frame, int what, PyObject *arg)
 {
-    PyObject *result;
-    PyObject *stack[3];
-
     if (PyFrame_FastToLocalsWithError(frame) < 0) {
         return NULL;
     }
 
+    PyObject *stack[3];
     stack[0] = (PyObject *)frame;
     stack[1] = whatstrings[what];
     stack[2] = (arg != NULL) ? arg : Py_None;
 
     /* call the Python-level function */
-    result = _PyObject_FastCall(callback, stack, 3);
+    PyObject *result = _PyObject_FastCallTstate(tstate, callback, stack, 3);
 
     PyFrame_LocalsToFast(frame, 1);
     if (result == NULL) {
@@ -858,15 +953,17 @@
 profile_trampoline(PyObject *self, PyFrameObject *frame,
                    int what, PyObject *arg)
 {
-    PyObject *result;
-
-    if (arg == NULL)
+    if (arg == NULL) {
         arg = Py_None;
-    result = call_trampoline(self, frame, what, arg);
+    }
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *result = call_trampoline(tstate, self, frame, what, arg);
     if (result == NULL) {
-        PyEval_SetProfile(NULL, NULL);
+        _PyEval_SetProfile(tstate, NULL, NULL);
         return -1;
     }
+
     Py_DECREF(result);
     return 0;
 }
@@ -876,20 +973,24 @@
                  int what, PyObject *arg)
 {
     PyObject *callback;
-    PyObject *result;
-
-    if (what == PyTrace_CALL)
+    if (what == PyTrace_CALL) {
         callback = self;
-    else
+    }
+    else {
         callback = frame->f_trace;
-    if (callback == NULL)
+    }
+    if (callback == NULL) {
         return 0;
-    result = call_trampoline(callback, frame, what, arg);
+    }
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *result = call_trampoline(tstate, callback, frame, what, arg);
     if (result == NULL) {
-        PyEval_SetTrace(NULL, NULL);
+        _PyEval_SetTrace(tstate, NULL, NULL);
         Py_CLEAR(frame->f_trace);
         return -1;
     }
+
     if (result != Py_None) {
         Py_XSETREF(frame->f_trace, result);
     }
@@ -902,12 +1003,21 @@
 static PyObject *
 sys_settrace(PyObject *self, PyObject *args)
 {
-    if (trace_init() == -1)
+    if (trace_init() == -1) {
         return NULL;
-    if (args == Py_None)
-        PyEval_SetTrace(NULL, NULL);
-    else
-        PyEval_SetTrace(trace_trampoline, args);
+    }
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (args == Py_None) {
+        if (_PyEval_SetTrace(tstate, NULL, NULL) < 0) {
+            return NULL;
+        }
+    }
+    else {
+        if (_PyEval_SetTrace(tstate, trace_trampoline, args) < 0) {
+            return NULL;
+        }
+    }
     Py_RETURN_NONE;
 }
 
@@ -942,12 +1052,21 @@
 static PyObject *
 sys_setprofile(PyObject *self, PyObject *args)
 {
-    if (trace_init() == -1)
+    if (trace_init() == -1) {
         return NULL;
-    if (args == Py_None)
-        PyEval_SetProfile(NULL, NULL);
-    else
-        PyEval_SetProfile(profile_trampoline, args);
+    }
+
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (args == Py_None) {
+        if (_PyEval_SetProfile(tstate, NULL, NULL) < 0) {
+            return NULL;
+        }
+    }
+    else {
+        if (_PyEval_SetProfile(tstate, profile_trampoline, args) < 0) {
+            return NULL;
+        }
+    }
     Py_RETURN_NONE;
 }
 
@@ -979,53 +1098,6 @@
     return temp;
 }
 
-/*[clinic input]
-sys.setcheckinterval
-
-    n: int
-    /
-
-Set the async event check interval to n instructions.
-
-This tells the Python interpreter to check for asynchronous events
-every n instructions.
-
-This also affects how often thread switches occur.
-[clinic start generated code]*/
-
-static PyObject *
-sys_setcheckinterval_impl(PyObject *module, int n)
-/*[clinic end generated code: output=3f686cef07e6e178 input=7a35b17bf22a6227]*/
-{
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "sys.getcheckinterval() and sys.setcheckinterval() "
-                     "are deprecated.  Use sys.setswitchinterval() "
-                     "instead.", 1) < 0)
-        return NULL;
-
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    interp->check_interval = n;
-    Py_RETURN_NONE;
-}
-
-/*[clinic input]
-sys.getcheckinterval
-
-Return the current check interval; see sys.setcheckinterval().
-[clinic start generated code]*/
-
-static PyObject *
-sys_getcheckinterval_impl(PyObject *module)
-/*[clinic end generated code: output=1b5060bf2b23a47c input=4b6589cbcca1db4e]*/
-{
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                     "sys.getcheckinterval() and sys.setcheckinterval() "
-                     "are deprecated.  Use sys.getswitchinterval() "
-                     "instead.", 1) < 0)
-        return NULL;
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    return PyLong_FromLong(interp->check_interval);
-}
 
 /*[clinic input]
 sys.setswitchinterval
@@ -1047,9 +1119,10 @@
 sys_setswitchinterval_impl(PyObject *module, double interval)
 /*[clinic end generated code: output=65a19629e5153983 input=561b477134df91d9]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     if (interval <= 0.0) {
-        PyErr_SetString(PyExc_ValueError,
-                        "switch interval must be strictly positive");
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                         "switch interval must be strictly positive");
         return NULL;
     }
     _PyEval_SetSwitchInterval((unsigned long) (1e6 * interval));
@@ -1088,11 +1161,11 @@
 /*[clinic end generated code: output=35e1c64754800ace input=b0f7a23393924af3]*/
 {
     int mark;
-    PyThreadState *tstate;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     if (new_limit < 1) {
-        PyErr_SetString(PyExc_ValueError,
-                        "recursion limit must be greater or equal than 1");
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                         "recursion limit must be greater or equal than 1");
         return NULL;
     }
 
@@ -1106,12 +1179,11 @@
        the new low-water mark. Otherwise it may not be possible anymore to
        reset the overflowed flag to 0. */
     mark = _Py_RecursionLimitLowerWaterMark(new_limit);
-    tstate = _PyThreadState_GET();
     if (tstate->recursion_depth >= mark) {
-        PyErr_Format(PyExc_RecursionError,
-                     "cannot set the recursion limit to %i at "
-                     "the recursion depth %i: the limit is too low",
-                     new_limit, tstate->recursion_depth);
+        _PyErr_Format(tstate, PyExc_RecursionError,
+                      "cannot set the recursion limit to %i at "
+                      "the recursion depth %i: the limit is too low",
+                      new_limit, tstate->recursion_depth);
         return NULL;
     }
 
@@ -1136,11 +1208,12 @@
 sys_set_coroutine_origin_tracking_depth_impl(PyObject *module, int depth)
 /*[clinic end generated code: output=0a2123c1cc6759c5 input=a1d0a05f89d2c426]*/
 {
+    PyThreadState *tstate = _PyThreadState_GET();
     if (depth < 0) {
-        PyErr_SetString(PyExc_ValueError, "depth must be >= 0");
+        _PyErr_SetString(tstate, PyExc_ValueError, "depth must be >= 0");
         return NULL;
     }
-    _PyEval_SetCoroutineOriginTrackingDepth(depth);
+    _PyEval_SetCoroutineOriginTrackingDepth(tstate, depth);
     Py_RETURN_NONE;
 }
 
@@ -1178,57 +1251,13 @@
     2
 };
 
-static int
-set_async_gen_firstiter(PyObject *firstiter)
-{
-    PyThreadState *tstate = _PyThreadState_GET();
-
-    if (PySys_Audit("sys.set_asyncgen_hook_firstiter", NULL) < 0) {
-        return -1;
-    }
-
-    Py_XINCREF(firstiter);
-    Py_XSETREF(tstate->async_gen_firstiter, firstiter);
-    return 0;
-}
-
-void
-_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
-{
-    if (set_async_gen_firstiter(firstiter) < 0) {
-        PyErr_WriteUnraisable(NULL);
-    }
-}
-
-static int
-set_async_gen_finalizer(PyObject *finalizer)
-{
-    PyThreadState *tstate = _PyThreadState_GET();
-
-    if (PySys_Audit("sys.set_asyncgen_hook_finalizer", NULL) < 0) {
-        return -1;
-    }
-
-    Py_XINCREF(finalizer);
-    Py_XSETREF(tstate->async_gen_finalizer, finalizer);
-    return 0;
-}
-
-void
-_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
-{
-    if (set_async_gen_finalizer(finalizer) < 0) {
-        PyErr_WriteUnraisable(NULL);
-    }
-}
-
-
 static PyObject *
 sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
 {
     static char *keywords[] = {"firstiter", "finalizer", NULL};
     PyObject *firstiter = NULL;
     PyObject *finalizer = NULL;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     if (!PyArg_ParseTupleAndKeywords(
             args, kw, "|OO", keywords,
@@ -1238,31 +1267,31 @@
 
     if (finalizer && finalizer != Py_None) {
         if (!PyCallable_Check(finalizer)) {
-            PyErr_Format(PyExc_TypeError,
-                         "callable finalizer expected, got %.50s",
-                         Py_TYPE(finalizer)->tp_name);
+            _PyErr_Format(tstate, PyExc_TypeError,
+                          "callable finalizer expected, got %.50s",
+                          Py_TYPE(finalizer)->tp_name);
             return NULL;
         }
-        if (set_async_gen_finalizer(finalizer) < 0) {
+        if (_PyEval_SetAsyncGenFinalizer(finalizer) < 0) {
             return NULL;
         }
     }
-    else if (finalizer == Py_None && set_async_gen_finalizer(NULL) < 0) {
+    else if (finalizer == Py_None && _PyEval_SetAsyncGenFinalizer(NULL) < 0) {
         return NULL;
     }
 
     if (firstiter && firstiter != Py_None) {
         if (!PyCallable_Check(firstiter)) {
-            PyErr_Format(PyExc_TypeError,
-                         "callable firstiter expected, got %.50s",
-                         Py_TYPE(firstiter)->tp_name);
+            _PyErr_Format(tstate, PyExc_TypeError,
+                          "callable firstiter expected, got %.50s",
+                          Py_TYPE(firstiter)->tp_name);
             return NULL;
         }
-        if (set_async_gen_firstiter(firstiter) < 0) {
+        if (_PyEval_SetAsyncGenFirstiter(firstiter) < 0) {
             return NULL;
         }
     }
-    else if (firstiter == Py_None && set_async_gen_firstiter(NULL) < 0) {
+    else if (firstiter == Py_None && _PyEval_SetAsyncGenFirstiter(NULL) < 0) {
         return NULL;
     }
 
@@ -1345,7 +1374,7 @@
 };
 
 static PyObject *
-get_hash_info(void)
+get_hash_info(PyThreadState *tstate)
 {
     PyObject *hash_info;
     int field = 0;
@@ -1372,7 +1401,7 @@
                               PyLong_FromLong(hashfunc->seed_bits));
     PyStructSequence_SET_ITEM(hash_info, field++,
                               PyLong_FromLong(Py_HASH_CUTOFF));
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         Py_CLEAR(hash_info);
         return NULL;
     }
@@ -1456,6 +1485,7 @@
     wchar_t kernel32_path[MAX_PATH];
     LPVOID verblock;
     DWORD verblock_size;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     ver.dwOSVersionInfoSize = sizeof(ver);
     if (!GetVersionExW((OSVERSIONINFOW*) &ver))
@@ -1506,7 +1536,7 @@
         realBuild
     ));
 
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         Py_DECREF(version);
         return NULL;
     }
@@ -1563,8 +1593,8 @@
 sys_setdlopenflags_impl(PyObject *module, int new_val)
 /*[clinic end generated code: output=ec918b7fe0a37281 input=4c838211e857a77f]*/
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    interp->dlopenflags = new_val;
+    PyThreadState *tstate = _PyThreadState_GET();
+    tstate->interp->dlopenflags = new_val;
     Py_RETURN_NONE;
 }
 
@@ -1581,8 +1611,8 @@
 sys_getdlopenflags_impl(PyObject *module)
 /*[clinic end generated code: output=e92cd1bc5005da6e input=dc4ea0899c53b4b6]*/
 {
-    PyInterpreterState *interp = _PyInterpreterState_Get();
-    return PyLong_FromLong(interp->dlopenflags);
+    PyThreadState *tstate = _PyThreadState_GET();
+    return PyLong_FromLong(tstate->interp->dlopenflags);
 }
 
 #endif  /* HAVE_DLOPEN */
@@ -1614,17 +1644,20 @@
     PyObject *res = NULL;
     PyObject *method;
     Py_ssize_t size;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     /* Make sure the type is initialized. float gets initialized late */
-    if (PyType_Ready(Py_TYPE(o)) < 0)
+    if (PyType_Ready(Py_TYPE(o)) < 0) {
         return (size_t)-1;
+    }
 
     method = _PyObject_LookupSpecial(o, &PyId___sizeof__);
     if (method == NULL) {
-        if (!PyErr_Occurred())
-            PyErr_Format(PyExc_TypeError,
-                         "Type %.100s doesn't define __sizeof__",
-                         Py_TYPE(o)->tp_name);
+        if (!_PyErr_Occurred(tstate)) {
+            _PyErr_Format(tstate, PyExc_TypeError,
+                          "Type %.100s doesn't define __sizeof__",
+                          Py_TYPE(o)->tp_name);
+        }
     }
     else {
         res = _PyObject_CallNoArg(method);
@@ -1636,16 +1669,17 @@
 
     size = PyLong_AsSsize_t(res);
     Py_DECREF(res);
-    if (size == -1 && PyErr_Occurred())
+    if (size == -1 && _PyErr_Occurred(tstate))
         return (size_t)-1;
 
     if (size < 0) {
-        PyErr_SetString(PyExc_ValueError, "__sizeof__() should return >= 0");
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                          "__sizeof__() should return >= 0");
         return (size_t)-1;
     }
 
     /* add gc_head size */
-    if (PyObject_IS_GC(o))
+    if (_PyObject_IS_GC(o))
         return ((size_t)size) + sizeof(PyGC_Head);
     return (size_t)size;
 }
@@ -1656,17 +1690,19 @@
     static char *kwlist[] = {"object", "default", 0};
     size_t size;
     PyObject *o, *dflt = NULL;
+    PyThreadState *tstate = _PyThreadState_GET();
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof",
-                                     kwlist, &o, &dflt))
+                                     kwlist, &o, &dflt)) {
         return NULL;
+    }
 
     size = _PySys_GetSizeOf(o);
 
-    if (size == (size_t)-1 && PyErr_Occurred()) {
+    if (size == (size_t)-1 && _PyErr_Occurred(tstate)) {
         /* Has a default value been given */
-        if (dflt != NULL && PyErr_ExceptionMatches(PyExc_TypeError)) {
-            PyErr_Clear();
+        if (dflt != NULL && _PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
+            _PyErr_Clear(tstate);
             Py_INCREF(dflt);
             return dflt;
         }
@@ -1699,7 +1735,7 @@
 sys_getrefcount_impl(PyObject *module, PyObject *object)
 /*[clinic end generated code: output=5fd477f2264b85b2 input=bf474efd50a21535]*/
 {
-    return object->ob_refcnt;
+    return Py_REFCNT(object);
 }
 
 #ifdef Py_REF_DEBUG
@@ -1728,20 +1764,6 @@
     return _Py_GetAllocatedBlocks();
 }
 
-#ifdef COUNT_ALLOCS
-/*[clinic input]
-sys.getcounts
-[clinic start generated code]*/
-
-static PyObject *
-sys_getcounts_impl(PyObject *module)
-/*[clinic end generated code: output=20df00bc164f43cb input=ad2ec7bda5424953]*/
-{
-    extern PyObject *_Py_get_counts(void);
-
-    return _Py_get_counts();
-}
-#endif
 
 /*[clinic input]
 sys._getframe
@@ -1764,22 +1786,25 @@
 sys__getframe_impl(PyObject *module, int depth)
 /*[clinic end generated code: output=d438776c04d59804 input=c1be8a6464b11ee5]*/
 {
-    PyFrameObject *f = _PyThreadState_GET()->frame;
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyFrameObject *f = PyThreadState_GetFrame(tstate);
 
-    if (PySys_Audit("sys._getframe", "O", f) < 0) {
+    if (_PySys_Audit(tstate, "sys._getframe", "O", f) < 0) {
+        Py_DECREF(f);
         return NULL;
     }
 
     while (depth > 0 && f != NULL) {
-        f = f->f_back;
+        PyFrameObject *back = PyFrame_GetBack(f);
+        Py_DECREF(f);
+        f = back;
         --depth;
     }
     if (f == NULL) {
-        PyErr_SetString(PyExc_ValueError,
-                        "call stack is not deep enough");
+        _PyErr_SetString(tstate, PyExc_ValueError,
+                         "call stack is not deep enough");
         return NULL;
     }
-    Py_INCREF(f);
     return (PyObject*)f;
 }
 
@@ -1819,44 +1844,6 @@
     return _PyEval_CallTracing(func, funcargs);
 }
 
-/*[clinic input]
-sys.callstats
-
-Return a tuple of function call statistics.
-
-A tuple is returned only if CALL_PROFILE was defined when Python was
-built.  Otherwise, this returns None.
-
-When enabled, this function returns detailed, implementation-specific
-details about the number of function calls executed. The return value
-is a 11-tuple where the entries in the tuple are counts of:
-0. all function calls
-1. calls to PyFunction_Type objects
-2. PyFunction calls that do not create an argument tuple
-3. PyFunction calls that do not create an argument tuple
-   and bypass PyEval_EvalCodeEx()
-4. PyMethod calls
-5. PyMethod calls on bound methods
-6. PyType calls
-7. PyCFunction calls
-8. generator calls
-9. All other calls
-10. Number of stack pops performed by call_function()
-[clinic start generated code]*/
-
-static PyObject *
-sys_callstats_impl(PyObject *module)
-/*[clinic end generated code: output=edc4a74957fa8def input=d447d8d224d5d175]*/
-{
-    if (PyErr_WarnEx(PyExc_DeprecationWarning,
-                      "sys.callstats() has been deprecated in Python 3.7 "
-                      "and will be removed in the future", 1) < 0) {
-        return NULL;
-    }
-
-    Py_RETURN_NONE;
-}
-
 
 #ifdef __cplusplus
 extern "C" {
@@ -1950,7 +1937,6 @@
     {"audit",           (PyCFunction)(void(*)(void))sys_audit, METH_FASTCALL, audit_doc },
     {"breakpointhook",  (PyCFunction)(void(*)(void))sys_breakpointhook,
      METH_FASTCALL | METH_KEYWORDS, breakpointhook_doc},
-    SYS_CALLSTATS_METHODDEF
     SYS__CLEAR_TYPE_CACHE_METHODDEF
     SYS__CURRENT_FRAMES_METHODDEF
     SYS_DISPLAYHOOK_METHODDEF
@@ -1960,7 +1946,6 @@
     SYS_GETDEFAULTENCODING_METHODDEF
     SYS_GETDLOPENFLAGS_METHODDEF
     SYS_GETALLOCATEDBLOCKS_METHODDEF
-    SYS_GETCOUNTS_METHODDEF
 #ifdef DYNAMIC_EXECUTION_PROFILE
     {"getdxp",          _Py_GetDXProfile, METH_VARARGS},
 #endif
@@ -1980,8 +1965,6 @@
     SYS_INTERN_METHODDEF
     SYS_IS_FINALIZING_METHODDEF
     SYS_MDEBUG_METHODDEF
-    SYS_SETCHECKINTERVAL_METHODDEF
-    SYS_GETCHECKINTERVAL_METHODDEF
     SYS_SETSWITCHINTERVAL_METHODDEF
     SYS_GETSWITCHINTERVAL_METHODDEF
     SYS_SETDLOPENFLAGS_METHODDEF
@@ -2156,9 +2139,9 @@
 
 
 static PyObject *
-get_warnoptions(void)
+get_warnoptions(PyThreadState *tstate)
 {
-    PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+    PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
     if (warnoptions == NULL || !PyList_Check(warnoptions)) {
         /* PEP432 TODO: we can reach this if warnoptions is NULL in the main
         *  interpreter config. When that happens, we need to properly set
@@ -2171,9 +2154,10 @@
          * reachable again.
          */
         warnoptions = PyList_New(0);
-        if (warnoptions == NULL)
+        if (warnoptions == NULL) {
             return NULL;
-        if (_PySys_SetObjectId(&PyId_warnoptions, warnoptions)) {
+        }
+        if (sys_set_object_id(tstate, &PyId_warnoptions, warnoptions)) {
             Py_DECREF(warnoptions);
             return NULL;
         }
@@ -2191,16 +2175,16 @@
         return;
     }
 
-    PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+    PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
     if (warnoptions == NULL || !PyList_Check(warnoptions))
         return;
     PyList_SetSlice(warnoptions, 0, PyList_GET_SIZE(warnoptions), NULL);
 }
 
 static int
-_PySys_AddWarnOptionWithError(PyObject *option)
+_PySys_AddWarnOptionWithError(PyThreadState *tstate, PyObject *option)
 {
-    PyObject *warnoptions = get_warnoptions();
+    PyObject *warnoptions = get_warnoptions(tstate);
     if (warnoptions == NULL) {
         return -1;
     }
@@ -2213,10 +2197,11 @@
 void
 PySys_AddWarnOptionUnicode(PyObject *option)
 {
-    if (_PySys_AddWarnOptionWithError(option) < 0) {
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (_PySys_AddWarnOptionWithError(tstate, option) < 0) {
         /* No return value, therefore clear error state if possible */
-        if (_PyThreadState_UncheckedGet()) {
-            PyErr_Clear();
+        if (tstate) {
+            _PyErr_Clear(tstate);
         }
     }
 }
@@ -2240,15 +2225,16 @@
 int
 PySys_HasWarnOptions(void)
 {
-    PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
     return (warnoptions != NULL && PyList_Check(warnoptions)
             && PyList_GET_SIZE(warnoptions) > 0);
 }
 
 static PyObject *
-get_xoptions(void)
+get_xoptions(PyThreadState *tstate)
 {
-    PyObject *xoptions = _PySys_GetObjectId(&PyId__xoptions);
+    PyObject *xoptions = sys_get_object_id(tstate, &PyId__xoptions);
     if (xoptions == NULL || !PyDict_Check(xoptions)) {
         /* PEP432 TODO: we can reach this if xoptions is NULL in the main
         *  interpreter config. When that happens, we need to properly set
@@ -2261,9 +2247,10 @@
          * reachable again.
          */
         xoptions = PyDict_New();
-        if (xoptions == NULL)
+        if (xoptions == NULL) {
             return NULL;
-        if (_PySys_SetObjectId(&PyId__xoptions, xoptions)) {
+        }
+        if (sys_set_object_id(tstate, &PyId__xoptions, xoptions)) {
             Py_DECREF(xoptions);
             return NULL;
         }
@@ -2277,7 +2264,8 @@
 {
     PyObject *name = NULL, *value = NULL;
 
-    PyObject *opts = get_xoptions();
+    PyThreadState *tstate = _PyThreadState_GET();
+    PyObject *opts = get_xoptions(tstate);
     if (opts == NULL) {
         goto error;
     }
@@ -2318,14 +2306,15 @@
     }
     if (_PySys_AddXOptionWithError(s) < 0) {
         /* No return value, therefore clear error state if possible */
-        PyErr_Clear();
+        _PyErr_Clear(tstate);
     }
 }
 
 PyObject *
 PySys_GetXOptions(void)
 {
-    return get_xoptions();
+    PyThreadState *tstate = _PyThreadState_GET();
+    return get_xoptions(tstate);
 }
 
 /* XXX This doc string is too long to be a single string literal in VC++ 5.0.
@@ -2419,7 +2408,6 @@
 getrecursionlimit() -- return the max recursion depth for the interpreter\n\
 getsizeof() -- return the size of an object in bytes\n\
 gettrace() -- get the global debug tracing function\n\
-setcheckinterval() -- control how often the interpreter checks for events\n\
 setdlopenflags() -- set the flags to be used for dlopen() calls\n\
 setprofile() -- set the global profiling function\n\
 setrecursionlimit() -- set the max recursion depth for the interpreter\n\
@@ -2465,17 +2453,18 @@
 };
 
 static PyObject*
-make_flags(_PyRuntimeState *runtime, PyInterpreterState *interp)
+make_flags(PyThreadState *tstate)
 {
-    int pos = 0;
-    PyObject *seq;
-    const PyPreConfig *preconfig = &runtime->preconfig;
-    const PyConfig *config = &interp->config;
+    PyInterpreterState *interp = tstate->interp;
+    const PyPreConfig *preconfig = &interp->runtime->preconfig;
+    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 
-    seq = PyStructSequence_New(&FlagsType);
-    if (seq == NULL)
+    PyObject *seq = PyStructSequence_New(&FlagsType);
+    if (seq == NULL) {
         return NULL;
+    }
 
+    int pos = 0;
 #define SetFlag(flag) \
     PyStructSequence_SET_ITEM(seq, pos++, PyLong_FromLong(flag))
 
@@ -2498,7 +2487,7 @@
     SetFlag(preconfig->utf8_mode);
 #undef SetFlag
 
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         Py_DECREF(seq);
         return NULL;
     }
@@ -2529,7 +2518,7 @@
 };
 
 static PyObject *
-make_version_info(void)
+make_version_info(PyThreadState *tstate)
 {
     PyObject *version_info;
     char *s;
@@ -2567,7 +2556,7 @@
 #undef SetIntItem
 #undef SetStrItem
 
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         Py_CLEAR(version_info);
         return NULL;
     }
@@ -2685,8 +2674,7 @@
     } while (0)
 
 static PyStatus
-_PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
-                PyObject *sysdict)
+_PySys_InitCore(PyThreadState *tstate, PyObject *sysdict)
 {
     PyObject *version_info;
     int res;
@@ -2730,7 +2718,7 @@
         }
     }
     SET_SYS_FROM_STRING("hash_info",
-                        get_hash_info());
+                        get_hash_info(tstate));
     SET_SYS_FROM_STRING("maxunicode",
                         PyLong_FromLong(0x10FFFF));
     SET_SYS_FROM_STRING("builtin_module_names",
@@ -2761,14 +2749,15 @@
             goto type_init_failed;
         }
     }
-    version_info = make_version_info();
+    version_info = make_version_info(tstate);
     SET_SYS_FROM_STRING("version_info", version_info);
     /* prevent user from creating new instances */
     VersionInfoType.tp_init = NULL;
     VersionInfoType.tp_new = NULL;
     res = PyDict_DelItemString(VersionInfoType.tp_dict, "__new__");
-    if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
-        PyErr_Clear();
+    if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+        _PyErr_Clear(tstate);
+    }
 
     /* implementation */
     SET_SYS_FROM_STRING("implementation", make_impl_info(version_info));
@@ -2780,7 +2769,7 @@
         }
     }
     /* Set flags to their default values (updated by _PySys_InitMain()) */
-    SET_SYS_FROM_STRING("flags", make_flags(runtime, interp));
+    SET_SYS_FROM_STRING("flags", make_flags(tstate));
 
 #if defined(MS_WINDOWS)
     /* getwindowsversion */
@@ -2792,10 +2781,10 @@
     /* prevent user from creating new instances */
     WindowsVersionType.tp_init = NULL;
     WindowsVersionType.tp_new = NULL;
-    assert(!PyErr_Occurred());
+    assert(!_PyErr_Occurred(tstate));
     res = PyDict_DelItemString(WindowsVersionType.tp_dict, "__new__");
-    if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) {
-        PyErr_Clear();
+    if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+        _PyErr_Clear(tstate);
     }
 #endif
 
@@ -2818,7 +2807,7 @@
         }
     }
 
-    if (PyErr_Occurred()) {
+    if (_PyErr_Occurred(tstate)) {
         goto err_occurred;
     }
     return _PyStatus_OK();
@@ -2830,8 +2819,6 @@
     return _PyStatus_ERR("can't initialize sys module");
 }
 
-#undef SET_SYS_FROM_STRING
-
 /* Updating the sys namespace, returning integer error codes */
 #define SET_SYS_FROM_STRING_INT_RESULT(key, value)         \
     do {                                                   \
@@ -2901,10 +2888,10 @@
 
 
 int
-_PySys_InitMain(_PyRuntimeState *runtime, PyInterpreterState *interp)
+_PySys_InitMain(PyThreadState *tstate)
 {
-    PyObject *sysdict = interp->sysdict;
-    const PyConfig *config = &interp->config;
+    PyObject *sysdict = tstate->interp->sysdict;
+    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
     int res;
 
 #define COPY_LIST(KEY, VALUE) \
@@ -2935,6 +2922,7 @@
     SET_SYS_FROM_WSTR("base_prefix", config->base_prefix);
     SET_SYS_FROM_WSTR("exec_prefix", config->exec_prefix);
     SET_SYS_FROM_WSTR("base_exec_prefix", config->base_exec_prefix);
+    SET_SYS_FROM_WSTR("platlibdir", config->platlibdir);
 
     if (config->pycache_prefix != NULL) {
         SET_SYS_FROM_WSTR("pycache_prefix", config->pycache_prefix);
@@ -2955,30 +2943,33 @@
 #undef COPY_LIST
 #undef SET_SYS_FROM_WSTR
 
+
     /* Set flags to their final values */
-    SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(runtime, interp));
+    SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(tstate));
     /* prevent user from creating new instances */
     FlagsType.tp_init = NULL;
     FlagsType.tp_new = NULL;
     res = PyDict_DelItemString(FlagsType.tp_dict, "__new__");
     if (res < 0) {
-        if (!PyErr_ExceptionMatches(PyExc_KeyError)) {
+        if (!_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
             return res;
         }
-        PyErr_Clear();
+        _PyErr_Clear(tstate);
     }
 
     SET_SYS_FROM_STRING_INT_RESULT("dont_write_bytecode",
                          PyBool_FromLong(!config->write_bytecode));
 
-    if (get_warnoptions() == NULL)
+    if (get_warnoptions(tstate) == NULL) {
+        return -1;
+    }
+
+    if (get_xoptions(tstate) == NULL)
         return -1;
 
-    if (get_xoptions() == NULL)
-        return -1;
-
-    if (PyErr_Occurred())
-        return -1;
+    if (_PyErr_Occurred(tstate)) {
+        goto err_occurred;
+    }
 
     return 0;
 
@@ -2986,6 +2977,7 @@
     return -1;
 }
 
+#undef SET_SYS_FROM_STRING
 #undef SET_SYS_FROM_STRING_BORROW
 #undef SET_SYS_FROM_STRING_INT_RESULT
 
@@ -2994,7 +2986,7 @@
    infrastructure for the io module in place.
 
    Use UTF-8/surrogateescape and ignore EAGAIN errors. */
-PyStatus
+static PyStatus
 _PySys_SetPreliminaryStderr(PyObject *sysdict)
 {
     PyObject *pstderr = PyFile_NewStdPrinter(fileno(stderr));
@@ -3019,12 +3011,15 @@
 /* Create sys module without all attributes: _PySys_InitMain() should be called
    later to add remaining attributes. */
 PyStatus
-_PySys_Create(_PyRuntimeState *runtime, PyInterpreterState *interp,
-              PyObject **sysmod_p)
+_PySys_Create(PyThreadState *tstate, PyObject **sysmod_p)
 {
+    assert(!_PyErr_Occurred(tstate));
+
+    PyInterpreterState *interp = tstate->interp;
+
     PyObject *modules = PyDict_New();
     if (modules == NULL) {
-        return _PyStatus_ERR("can't make modules dictionary");
+        goto error;
     }
     interp->modules = modules;
 
@@ -3035,13 +3030,13 @@
 
     PyObject *sysdict = PyModule_GetDict(sysmod);
     if (sysdict == NULL) {
-        return _PyStatus_ERR("can't initialize sys dict");
+        goto error;
     }
     Py_INCREF(sysdict);
     interp->sysdict = sysdict;
 
     if (PyDict_SetItemString(sysdict, "modules", interp->modules) < 0) {
-        return _PyStatus_ERR("can't initialize sys module");
+        goto error;
     }
 
     PyStatus status = _PySys_SetPreliminaryStderr(sysdict);
@@ -3049,15 +3044,22 @@
         return status;
     }
 
-    status = _PySys_InitCore(runtime, interp, sysdict);
+    status = _PySys_InitCore(tstate, sysdict);
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    _PyImport_FixupBuiltin(sysmod, "sys", interp->modules);
+    if (_PyImport_FixupBuiltin(sysmod, "sys", interp->modules) < 0) {
+        goto error;
+    }
+
+    assert(!_PyErr_Occurred(tstate));
 
     *sysmod_p = sysmod;
     return _PyStatus_OK();
+
+error:
+    return _PyStatus_ERR("can't initialize sys module");
 }
 
 
@@ -3100,8 +3102,10 @@
     PyObject *v;
     if ((v = makepathobject(path, DELIM)) == NULL)
         Py_FatalError("can't create sys.path");
-    if (_PySys_SetObjectId(&PyId_path, v) != 0)
+    PyThreadState *tstate = _PyThreadState_GET();
+    if (sys_set_object_id(tstate, &PyId_path, v) != 0) {
         Py_FatalError("can't assign sys.path");
+    }
     Py_DECREF(v);
 }
 
@@ -3128,6 +3132,7 @@
 PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
 {
     wchar_t* empty_argv[1] = {L""};
+    PyThreadState *tstate = _PyThreadState_GET();
 
     if (argc < 1 || argv == NULL) {
         /* Ensure at least one (empty) argument is seen */
@@ -3139,7 +3144,7 @@
     if (av == NULL) {
         Py_FatalError("no mem for sys.argv");
     }
-    if (PySys_SetObject("argv", av) != 0) {
+    if (sys_set_object(tstate, "argv", av) != 0) {
         Py_DECREF(av);
         Py_FatalError("can't assign sys.argv");
     }
@@ -3155,7 +3160,7 @@
                 Py_FatalError("can't compute path0 from argv");
             }
 
-            PyObject *sys_path = _PySys_GetObjectId(&PyId_path);
+            PyObject *sys_path = sys_get_object_id(tstate, &PyId_path);
             if (sys_path != NULL) {
                 if (PyList_Insert(sys_path, 0, path0) < 0) {
                     Py_DECREF(path0);
@@ -3179,30 +3184,15 @@
 static int
 sys_pyfile_write_unicode(PyObject *unicode, PyObject *file)
 {
-    PyObject *writer = NULL, *result = NULL;
-    int err;
-
     if (file == NULL)
         return -1;
-
-    writer = _PyObject_GetAttrId(file, &PyId_write);
-    if (writer == NULL)
-        goto error;
-
-    result = PyObject_CallFunctionObjArgs(writer, unicode, NULL);
+    assert(unicode != NULL);
+    PyObject *result = _PyObject_CallMethodIdOneArg(file, &PyId_write, unicode);
     if (result == NULL) {
-        goto error;
-    } else {
-        err = 0;
-        goto finally;
+        return -1;
     }
-
-error:
-    err = -1;
-finally:
-    Py_XDECREF(writer);
-    Py_XDECREF(result);
-    return err;
+    Py_DECREF(result);
+    return 0;
 }
 
 static int
@@ -3258,12 +3248,13 @@
     PyObject *error_type, *error_value, *error_traceback;
     char buffer[1001];
     int written;
+    PyThreadState *tstate = _PyThreadState_GET();
 
-    PyErr_Fetch(&error_type, &error_value, &error_traceback);
-    file = _PySys_GetObjectId(key);
+    _PyErr_Fetch(tstate, &error_type, &error_value, &error_traceback);
+    file = sys_get_object_id(tstate, key);
     written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va);
     if (sys_pyfile_write(buffer, file) != 0) {
-        PyErr_Clear();
+        _PyErr_Clear(tstate);
         fputs(buffer, fp);
     }
     if (written < 0 || (size_t)written >= sizeof(buffer)) {
@@ -3271,7 +3262,7 @@
         if (sys_pyfile_write(truncated, file) != 0)
             fputs(truncated, fp);
     }
-    PyErr_Restore(error_type, error_value, error_traceback);
+    _PyErr_Restore(tstate, error_type, error_value, error_traceback);
 }
 
 void
@@ -3300,20 +3291,21 @@
     PyObject *file, *message;
     PyObject *error_type, *error_value, *error_traceback;
     const char *utf8;
+    PyThreadState *tstate = _PyThreadState_GET();
 
-    PyErr_Fetch(&error_type, &error_value, &error_traceback);
-    file = _PySys_GetObjectId(key);
+    _PyErr_Fetch(tstate, &error_type, &error_value, &error_traceback);
+    file = sys_get_object_id(tstate, key);
     message = PyUnicode_FromFormatV(format, va);
     if (message != NULL) {
         if (sys_pyfile_write_unicode(message, file) != 0) {
-            PyErr_Clear();
+            _PyErr_Clear(tstate);
             utf8 = PyUnicode_AsUTF8(message);
             if (utf8 != NULL)
                 fputs(utf8, fp);
         }
         Py_DECREF(message);
     }
-    PyErr_Restore(error_type, error_value, error_traceback);
+    _PyErr_Restore(tstate, error_type, error_value, error_traceback);
 }
 
 void
diff --git a/Python/thread.c b/Python/thread.c
index d197b9f..eae60e9 100644
--- a/Python/thread.c
+++ b/Python/thread.c
@@ -6,7 +6,7 @@
    Stuff shared by all thread_*.h files is collected here. */
 
 #include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h"   // _PyInterpreterState_GET()
 
 #ifndef _POSIX_THREADS
 /* This means pthreads are not implemented in libc headers, hence the macro
@@ -23,8 +23,6 @@
 
 #include <stdlib.h>
 
-#include "pythread.h"
-
 #ifndef _POSIX_THREADS
 
 /* Check if we're running on HP-UX and _SC_THREADS is defined. If so, then
@@ -96,7 +94,7 @@
 size_t
 PyThread_get_stacksize(void)
 {
-    return _PyInterpreterState_Get()->pythread_stacksize;
+    return _PyInterpreterState_GET()->pythread_stacksize;
 }
 
 /* Only platforms defining a THREAD_SET_STACKSIZE() macro
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 23d585c..05b982d 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -1,3 +1,4 @@
+#include "pycore_interp.h"    // _PyInterpreterState.pythread_stacksize
 
 /* This code implemented by Dag.Gruneau@elsa.preseco.comm.se */
 /* Fast NonRecursiveMutex support by Yakov Markovitch, markovitch@iso.ru */
@@ -358,13 +359,13 @@
 {
     /* set to default */
     if (size == 0) {
-        _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0;
+        _PyInterpreterState_GET()->pythread_stacksize = 0;
         return 0;
     }
 
     /* valid range? */
     if (size >= THREAD_MIN_STACKSIZE && size < THREAD_MAX_STACKSIZE) {
-        _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = size;
+        _PyInterpreterState_GET()->pythread_stacksize = size;
         return 0;
     }
 
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index 78b99a7..e6910b3 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -1,3 +1,4 @@
+#include "pycore_interp.h"    // _PyInterpreterState.pythread_stacksize
 
 /* Posix threads interface */
 
@@ -51,6 +52,16 @@
 #undef  THREAD_STACK_SIZE
 #define THREAD_STACK_SIZE       0x200000
 #endif
+/* bpo-38852: test_threading.test_recursion_limit() checks that 1000 recursive
+   Python calls (default recursion limit) doesn't crash, but raise a regular
+   RecursionError exception. In debug mode, Python function calls allocates
+   more memory on the stack, so use a stack of 8 MiB. */
+#if defined(__ANDROID__) && defined(THREAD_STACK_SIZE) && THREAD_STACK_SIZE == 0
+#   ifdef Py_DEBUG
+#   undef  THREAD_STACK_SIZE
+#   define THREAD_STACK_SIZE    0x800000
+#   endif
+#endif
 /* for safety, ensure a viable minimum stacksize */
 #define THREAD_STACK_MIN        0x8000  /* 32 KiB */
 #else  /* !_POSIX_THREAD_ATTR_STACKSIZE */
@@ -97,17 +108,10 @@
 #endif
 
 
-/* We assume all modern POSIX systems have gettimeofday() */
-#ifdef GETTIMEOFDAY_NO_TZ
-#define GETTIMEOFDAY(ptv) gettimeofday(ptv)
-#else
-#define GETTIMEOFDAY(ptv) gettimeofday(ptv, (struct timezone *)NULL)
-#endif
-
 #define MICROSECONDS_TO_TIMESPEC(microseconds, ts) \
 do { \
     struct timeval tv; \
-    GETTIMEOFDAY(&tv); \
+    gettimeofday(&tv, NULL); \
     tv.tv_usec += microseconds % 1000000; \
     tv.tv_sec += microseconds / 1000000; \
     tv.tv_sec += tv.tv_usec / 1000000; \
@@ -544,9 +548,8 @@
     if (!initialized)
         PyThread_init_thread();
 
-    lock = (pthread_lock *) PyMem_RawMalloc(sizeof(pthread_lock));
+    lock = (pthread_lock *) PyMem_RawCalloc(1, sizeof(pthread_lock));
     if (lock) {
-        memset((void *)lock, '\0', sizeof(pthread_lock));
         lock->locked = 0;
 
         status = pthread_mutex_init(&lock->mut, NULL);
@@ -692,6 +695,26 @@
 #endif /* USE_SEMAPHORES */
 
 int
+_PyThread_at_fork_reinit(PyThread_type_lock *lock)
+{
+    PyThread_type_lock new_lock = PyThread_allocate_lock();
+    if (new_lock == NULL) {
+        return -1;
+    }
+
+    /* bpo-6721, bpo-40089: The old lock can be in an inconsistent state.
+       fork() can be called in the middle of an operation on the lock done by
+       another thread. So don't call PyThread_free_lock(*lock).
+
+       Leak memory on purpose. Don't release the memory either since the
+       address of a mutex is relevant. Putting two mutexes at the same address
+       can lead to problems. */
+
+    *lock = new_lock;
+    return 0;
+}
+
+int
 PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
 {
     return PyThread_acquire_lock_timed(lock, waitflag ? -1 : 0, /*intr_flag=*/0);
@@ -712,7 +735,7 @@
 
     /* set to default */
     if (size == 0) {
-        _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0;
+        _PyInterpreterState_GET()->pythread_stacksize = 0;
         return 0;
     }
 
@@ -729,7 +752,7 @@
             rc = pthread_attr_setstacksize(&attrs, size);
             pthread_attr_destroy(&attrs);
             if (rc == 0) {
-                _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = size;
+                _PyInterpreterState_GET()->pythread_stacksize = size;
                 return 0;
             }
         }
diff --git a/Python/traceback.c b/Python/traceback.c
index 8e2f15e..99b63af 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -2,12 +2,11 @@
 /* Traceback implementation */
 
 #include "Python.h"
-#include "pycore_pystate.h"
 
 #include "code.h"
-#include "frameobject.h"
-#include "structmember.h"
-#include "osdefs.h"
+#include "frameobject.h"          // PyFrame_GetBack()
+#include "structmember.h"         // PyMemberDef
+#include "osdefs.h"               // SEP
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
@@ -376,7 +375,7 @@
     int fd;
     int i;
     char *found_encoding;
-    char *encoding;
+    const char *encoding;
     PyObject *io;
     PyObject *binary;
     PyObject *fob = NULL;
@@ -384,7 +383,7 @@
     PyObject *res;
     char buf[MAXPATHLEN+1];
     int kind;
-    void *data;
+    const void *data;
 
     /* open the file */
     if (filename == NULL)
@@ -430,7 +429,7 @@
     if (fob == NULL) {
         PyErr_Clear();
 
-        res = _PyObject_CallMethodId(binary, &PyId_close, NULL);
+        res = _PyObject_CallMethodIdNoArgs(binary, &PyId_close);
         Py_DECREF(binary);
         if (res)
             Py_DECREF(res);
@@ -450,7 +449,7 @@
             break;
         }
     }
-    res = _PyObject_CallMethodId(fob, &PyId_close, NULL);
+    res = _PyObject_CallMethodIdNoArgs(fob, &PyId_close);
     if (res)
         Py_DECREF(res);
     else
@@ -561,28 +560,28 @@
         tb = tb->tb_next;
     }
     while (tb != NULL && err == 0) {
+        PyCodeObject *code = PyFrame_GetCode(tb->tb_frame);
         if (last_file == NULL ||
-            tb->tb_frame->f_code->co_filename != last_file ||
+            code->co_filename != last_file ||
             last_line == -1 || tb->tb_lineno != last_line ||
-            last_name == NULL || tb->tb_frame->f_code->co_name != last_name) {
+            last_name == NULL || code->co_name != last_name) {
             if (cnt > TB_RECURSIVE_CUTOFF) {
                 err = tb_print_line_repeated(f, cnt);
             }
-            last_file = tb->tb_frame->f_code->co_filename;
+            last_file = code->co_filename;
             last_line = tb->tb_lineno;
-            last_name = tb->tb_frame->f_code->co_name;
+            last_name = code->co_name;
             cnt = 0;
         }
         cnt++;
         if (err == 0 && cnt <= TB_RECURSIVE_CUTOFF) {
-            err = tb_displayline(f,
-                                 tb->tb_frame->f_code->co_filename,
-                                 tb->tb_lineno,
-                                 tb->tb_frame->f_code->co_name);
+            err = tb_displayline(f, code->co_filename, tb->tb_lineno,
+                                 code->co_name);
             if (err == 0) {
                 err = PyErr_CheckSignals();
             }
         }
+        Py_DECREF(code);
         tb = tb->tb_next;
     }
     if (err == 0 && cnt > TB_RECURSIVE_CUTOFF) {
@@ -754,12 +753,9 @@
 static void
 dump_frame(int fd, PyFrameObject *frame)
 {
-    PyCodeObject *code;
-    int lineno;
-
-    code = frame->f_code;
+    PyCodeObject *code = PyFrame_GetCode(frame);
     PUTS(fd, "  File ");
-    if (code != NULL && code->co_filename != NULL
+    if (code->co_filename != NULL
         && PyUnicode_Check(code->co_filename))
     {
         PUTS(fd, "\"");
@@ -770,7 +766,7 @@
     }
 
     /* PyFrame_GetLineNumber() was introduced in Python 2.7.0 and 3.2.0 */
-    lineno = PyCode_Addr2Line(code, frame->f_lasti);
+    int lineno = PyCode_Addr2Line(code, frame->f_lasti);
     PUTS(fd, ", line ");
     if (lineno >= 0) {
         _Py_DumpDecimal(fd, (unsigned long)lineno);
@@ -780,7 +776,7 @@
     }
     PUTS(fd, " in ");
 
-    if (code != NULL && code->co_name != NULL
+    if (code->co_name != NULL
        && PyUnicode_Check(code->co_name)) {
         _Py_DumpASCII(fd, code->co_name);
     }
@@ -789,6 +785,7 @@
     }
 
     PUTS(fd, "\n");
+    Py_DECREF(code);
 }
 
 static void
@@ -801,22 +798,31 @@
         PUTS(fd, "Stack (most recent call first):\n");
     }
 
-    frame = _PyThreadState_GetFrame(tstate);
+    frame = PyThreadState_GetFrame(tstate);
     if (frame == NULL) {
         PUTS(fd, "<no Python frame>\n");
         return;
     }
 
     depth = 0;
-    while (frame != NULL) {
+    while (1) {
         if (MAX_FRAME_DEPTH <= depth) {
+            Py_DECREF(frame);
             PUTS(fd, "  ...\n");
             break;
         }
-        if (!PyFrame_Check(frame))
+        if (!PyFrame_Check(frame)) {
+            Py_DECREF(frame);
             break;
+        }
         dump_frame(fd, frame);
-        frame = frame->f_back;
+        PyFrameObject *back = PyFrame_GetBack(frame);
+        Py_DECREF(frame);
+
+        if (back == NULL) {
+            break;
+        }
+        frame = back;
         depth++;
     }
 }
diff --git a/README.rst b/README.rst
index 862a24d5..a9ab260 100644
--- a/README.rst
+++ b/README.rst
@@ -1,17 +1,21 @@
-This is Python version 3.8.5
+This is Python version 3.9.1
 ============================
 
-.. image:: https://travis-ci.org/python/cpython.svg?branch=3.8
+.. image:: https://travis-ci.org/python/cpython.svg?branch=3.9
    :alt: CPython build status on Travis CI
-   :target: https://travis-ci.org/python/cpython/branches
+   :target: https://travis-ci.org/python/cpython
 
-.. image:: https://dev.azure.com/python/cpython/_apis/build/status/Azure%20Pipelines%20CI?branchName=3.8
+.. image:: https://github.com/python/cpython/workflows/Tests/badge.svg
+   :alt: CPython build status on GitHub Actions
+   :target: https://github.com/python/cpython/actions
+
+.. image:: https://dev.azure.com/python/cpython/_apis/build/status/Azure%20Pipelines%20CI?branchName=3.9
    :alt: CPython build status on Azure DevOps
-   :target: https://dev.azure.com/python/cpython/_build/latest?definitionId=4&branchName=3.8
+   :target: https://dev.azure.com/python/cpython/_build/latest?definitionId=4&branchName=3.9
 
-.. image:: https://codecov.io/gh/python/cpython/branch/3.8/graph/badge.svg
+.. image:: https://codecov.io/gh/python/cpython/branch/3.9/graph/badge.svg
    :alt: CPython code coverage on Codecov
-   :target: https://codecov.io/gh/python/cpython/branch/3.8
+   :target: https://codecov.io/gh/python/cpython
 
 .. image:: https://img.shields.io/badge/zulip-join_chat-brightgreen.svg
    :alt: Python Zulip chat
@@ -75,10 +79,10 @@
 
 On macOS, there are additional configure and build options related
 to macOS framework and universal builds.  Refer to `Mac/README.rst
-<https://github.com/python/cpython/blob/3.8/Mac/README.rst>`_.
+<https://github.com/python/cpython/blob/3.9/Mac/README.rst>`_.
 
 On Windows, see `PCbuild/readme.txt
-<https://github.com/python/cpython/blob/3.8/PCbuild/readme.txt>`_.
+<https://github.com/python/cpython/blob/3.9/PCbuild/readme.txt>`_.
 
 If you wish, you can create a subdirectory and invoke configure from there.
 For example::
@@ -137,11 +141,11 @@
 ----------
 
 We have a comprehensive overview of the changes in the `What's New in Python
-3.8 <https://docs.python.org/3.8/whatsnew/3.8.html>`_ document.  For a more
+3.9 <https://docs.python.org/3.9/whatsnew/3.9.html>`_ document.  For a more
 detailed change log, read `Misc/NEWS
-<https://github.com/python/cpython/blob/3.8/Misc/NEWS.d>`_, but a full
+<https://github.com/python/cpython/blob/3.9/Misc/NEWS.d>`_, but a full
 accounting of changes can only be gleaned from the `commit history
-<https://github.com/python/cpython/commits/3.8>`_.
+<https://github.com/python/cpython/commits/3.9>`_.
 
 If you want to install multiple versions of Python, see the section below
 entitled "Installing multiple versions".
@@ -150,7 +154,7 @@
 Documentation
 -------------
 
-`Documentation for Python 3.8 <https://docs.python.org/3.8/>`_ is online,
+`Documentation for Python 3.9 <https://docs.python.org/3.9/>`_ is online,
 updated daily.
 
 It can also be downloaded in many formats for faster access.  The documentation
@@ -159,7 +163,7 @@
 formatting requirements.
 
 For information about building Python's documentation, refer to `Doc/README.rst
-<https://github.com/python/cpython/blob/3.8/Doc/README.rst>`_.
+<https://github.com/python/cpython/blob/3.9/Doc/README.rst>`_.
 
 
 Converting From Python 2.x to 3.x
@@ -209,8 +213,8 @@
 version (if any) is your "primary" version.  Install that version using ``make
 install``.  Install all other versions using ``make altinstall``.
 
-For example, if you want to install Python 2.7, 3.6, and 3.8 with 3.8 being the
-primary version, you would execute ``make install`` in your 3.8 build directory
+For example, if you want to install Python 2.7, 3.6, and 3.9 with 3.9 being the
+primary version, you would execute ``make install`` in your 3.9 build directory
 and ``make altinstall`` in the others.
 
 
@@ -240,7 +244,7 @@
 Release Schedule
 ----------------
 
-See :pep:`569` for Python 3.8 release details.
+See :pep:`596` for Python 3.9 release details.
 
 
 Copyright and License Information
diff --git a/Tools/README b/Tools/README
index 6c5fb20..b6d0b18 100644
--- a/Tools/README
+++ b/Tools/README
@@ -23,6 +23,8 @@
 
 parser          Un-parsing tool to generate code from an AST.
 
+peg_generator   PEG-based parser generator (pegen) used for new parser.
+
 pynche          A Tkinter-based color editor.
 
 scripts         A number of useful single-file programs, e.g. tabnanny.py
diff --git a/Tools/buildbot/remoteDeploy.bat b/Tools/buildbot/remoteDeploy.bat
index 6b86e1e..31f1519 100644
--- a/Tools/buildbot/remoteDeploy.bat
+++ b/Tools/buildbot/remoteDeploy.bat
@@ -24,11 +24,18 @@
 echo PYTHON_SOURCE = %PYTHON_SOURCE%
 echo REMOTE_PYTHON_DIR = %REMOTE_PYTHON_DIR%
 
+REM stop Python processes and remove existing files if found
+ssh %SSH_SERVER% "kill python.exe"
+ssh %SSH_SERVER% "kill python_d.exe"
 ssh %SSH_SERVER% "if EXIST %REMOTE_PYTHON_DIR% (rd %REMOTE_PYTHON_DIR% /s/q)"
+
+REM Create Python directories
 ssh %SSH_SERVER% "md %REMOTE_PYTHON_DIR%PCBuild\arm32"
 ssh %SSH_SERVER% "md %REMOTE_PYTHON_DIR%temp"
 ssh %SSH_SERVER% "md %REMOTE_PYTHON_DIR%Modules"
 ssh %SSH_SERVER% "md %REMOTE_PYTHON_DIR%PC"
+
+REM Copy Python files
 for /f "USEBACKQ" %%i in (`dir PCbuild\*.bat /b`) do @scp PCBuild\%%i "%SSH_SERVER%:%REMOTE_PYTHON_DIR%PCBuild"
 for /f "USEBACKQ" %%i in (`dir PCbuild\*.py /b`) do @scp PCBuild\%%i "%SSH_SERVER%:%REMOTE_PYTHON_DIR%PCBuild"
 for /f "USEBACKQ" %%i in (`dir PCbuild\arm32\*.exe /b`) do @scp PCBuild\arm32\%%i "%SSH_SERVER%:%REMOTE_PYTHON_DIR%PCBuild\arm32"
diff --git a/Tools/buildbot/test.bat b/Tools/buildbot/test.bat
index a0fc6b9..25c796a 100644
--- a/Tools/buildbot/test.bat
+++ b/Tools/buildbot/test.bat
@@ -36,8 +36,10 @@
 set TEMP_ARGS=--temp %REMOTE_PYTHON_DIR%temp
 
 set rt_args=%rt_opts% %dashU% -rwW --slowest --timeout=1200 --fail-env-changed %regrtest_args% %TEMP_ARGS%
-ssh %SSH_SERVER% "set TEMP=%REMOTE_PYTHON_DIR%temp& %REMOTE_PYTHON_DIR%PCbuild\rt.bat" %rt_args%
-exit /b %ERRORLEVEL%
+ssh %SSH_SERVER% "set TEMP=%REMOTE_PYTHON_DIR%temp& cd %REMOTE_PYTHON_DIR% & %REMOTE_PYTHON_DIR%PCbuild\rt.bat" %rt_args%
+set ERR=%ERRORLEVEL%
+scp %SSH_SERVER%:"%REMOTE_PYTHON_DIR%test-results.xml" "%PYTHON_SOURCE%\test-results.xml"
+exit /b %ERR%
 
 :Arm32SshHelp
 echo SSH_SERVER environment variable must be set to administrator@[ip address]
diff --git a/Tools/c-globals/README b/Tools/c-analyzer/README
similarity index 97%
rename from Tools/c-globals/README
rename to Tools/c-analyzer/README
index 0ee8ac3..8cf20e2 100644
--- a/Tools/c-globals/README
+++ b/Tools/c-analyzer/README
@@ -34,7 +34,7 @@
 _PyRuntimeState or one of its sub-structs.  The check-c-globals script
 should be run to ensure that no new globals have been added:
 
-  python3 Tools/c-globals/check-c-globals.py
+  python3 Tools/c-analyzer/check-c-globals.py
 
 If it reports any globals then they should be resolved.  If the globals
 are runtime state then they should be folded into _PyRuntimeState.
diff --git a/Tools/c-analyzer/TODO b/Tools/c-analyzer/TODO
new file mode 100644
index 0000000..829daba
--- /dev/null
+++ b/Tools/c-analyzer/TODO
@@ -0,0 +1,1072 @@
+
+# allocator (16)
+Objects/obmalloc.c:_PyMem                                        static PyMemAllocatorEx _PyMem
+Objects/obmalloc.c:_PyMem_Debug                                  static struct { debug_alloc_api_t raw; debug_alloc_api_t mem; debug_alloc_api_t obj; } _PyMem_Debug
+Objects/obmalloc.c:_PyMem_Raw                                    static PyMemAllocatorEx _PyMem_Raw
+Objects/obmalloc.c:_PyObject                                     static PyMemAllocatorEx _PyObject
+Objects/obmalloc.c:_PyObject_Arena                               static PyObjectArenaAllocator _PyObject_Arena
+Objects/obmalloc.c:_Py_tracemalloc_config                        struct _PyTraceMalloc_Config _Py_tracemalloc_config
+Objects/obmalloc.c:arenas                                        static struct arena_object* arenas
+Objects/obmalloc.c:maxarenas                                     static uint maxarenas
+Objects/obmalloc.c:narenas_currently_allocated                   static size_t narenas_currently_allocated
+Objects/obmalloc.c:narenas_highwater                             static size_t narenas_highwater
+Objects/obmalloc.c:nfp2lasta                                     static struct arena_object* nfp2lasta[MAX_POOLS_IN_ARENA + 1]
+Objects/obmalloc.c:ntimes_arena_allocated                        static size_t ntimes_arena_allocated
+Objects/obmalloc.c:unused_arena_objects                          static struct arena_object* unused_arena_objects
+Objects/obmalloc.c:usable_arenas                                 static struct arena_object* usable_arenas
+Objects/obmalloc.c:usedpools                                     static poolp usedpools[2 * ((NB_SMALL_SIZE_CLASSES + 7) / 8) * 8]
+Objects/obmalloc.c:new_arena():debug_stats                       static int debug_stats
+
+
+# counters
+Modules/_abc.c:abc_invalidation_counter                          static unsigned long long abc_invalidation_counter
+Objects/bytesobject.c:_Py_null_strings                           Py_ssize_t _Py_null_strings
+Objects/bytesobject.c:_Py_onel_strings                           Py_ssize_t _Py_one_strings
+
+
+# constants (effectively)
+Objects/dictobject.c:empty_keys_struct                           static PyDictKeysObject empty_keys_struct
+
+
+# "initialized"
+Python/fileutils.c:_Py_open_cloexec_works                        int _Py_open_cloexec_works
+
+
+# freelists
+Objects/dictobject.c:keys_free_list                              static PyDictKeysObject *keys_free_list[PyDict_MAXFREELIST]
+Objects/dictobject.c:numfreekeys                                 static int numfreekeys
+
+
+# other non-object (43)
+Modules/_tracemalloc.c:allocators                                static struct { PyMemAllocatorEx mem; PyMemAllocatorEx raw; PyMemAllocatorEx obj; } allocators
+Modules/_tracemalloc.c:tables_lock                               static PyThread_type_lock tables_lock
+Modules/_tracemalloc.c:tracemalloc_filenames                     static _Py_hashtable_t *tracemalloc_filenames
+Modules/_tracemalloc.c:tracemalloc_peak_traced_memory            static size_t tracemalloc_peak_traced_memory
+Modules/_tracemalloc.c:tracemalloc_reentrant_key                 static Py_tss_t tracemalloc_reentrant_key
+Modules/_tracemalloc.c:tracemalloc_tracebacks                    static _Py_hashtable_t *tracemalloc_tracebacks
+Modules/_tracemalloc.c:tracemalloc_traced_memory                 static size_t tracemalloc_traced_memory
+Modules/_tracemalloc.c:tracemalloc_traces                        static _Py_hashtable_t *tracemalloc_traces
+Modules/faulthandler.c:old_stack                                 static stack_t old_stack
+Modules/faulthandler.c:stack                                     static stack_t stack
+Modules/faulthandler.c:faulthandler_dump_traceback():reentrant   static volatile int reentrant
+Modules/posixmodule.c:initialized                                static int initialized
+Modules/signalmodule.c:initialized                               static int initialized
+Modules/timemodule.c:initialized                                 static int initialized
+Objects/dictobject.c:pydict_global_version                       static uint64_t pydict_global_version
+Objects/floatobject.c:detected_double_format                     static float_format_type detected_double_format
+Objects/floatobject.c:detected_float_format                      static float_format_type detected_float_format
+Objects/floatobject.c:double_format                              static float_format_type double_format
+Objects/floatobject.c:float_format                               static float_format_type
+Objects.longobject.c:_Py_quick_int_allocs                        Py_ssize_t _Py_quick_int_allocs
+Objects.longobject.c:_Py_quick_neg_int_allocs                    Py_ssize_t _Py_quick_neg_int_allocs
+Objects/moduleobject.c:max_module_number                         static Py_ssize_t max_module_number
+Objects/object.c:_Py_RefTotal                                    Py_ssize_t _Py_RefTotal
+Objects/tupleobject.c:_Py_fast_tuple_allocs                      Py_ssize_t _Py_fast_tuple_allocs
+Objects/tupleobject.c:_Py_tuple_zero_allocs                      Py_ssize_t _Py_tuple_zero_allocs
+Objects/typeobject.c:next_version_tag                            static unsigned int next_version_tag
+Parser/listnode.c:atbol                                          static int atbol
+Parser/listnode.c:level                                          static int level
+Python/Python-ast.c:init_types():initialized                     static int initialized
+Python/bootstrap_hash.c:urandom_cache                            static struct { int fd; dev_t st_dev; ino_t st_ino; } urandom_cache
+Python/ceval.c:_Py_CheckRecursionLimit                           int _Py_CheckRecursionLimit
+Python/ceval.c:lltrace                                           static int lltrace
+Python/ceval.c:make_pending_calls():busy                         static int busy
+Python/dynload_shlib.c:handles                                   static struct { dev_t dev; ino_t ino; void *handle; } handles[128]
+Python/dynload_shlib.c:nhandles                                  static int nhandles
+Python/import.c:import_lock                                      static PyThread_type_lock import_lock
+Python/import.c:import_lock_level                                static int import_lock_level
+Python/import.c:import_lock_thread                               static unsigned long import_lock_thread
+Python/import.c:import_find_and_load():accumulated               static _PyTime_t accumulated
+Python/import.c:import_find_and_load():header                    static int header
+Python/import.c:import_find_and_load():import_level              static int import_level
+Python/pylifecycle.c:_Py_UnhandledKeyboardInterrupt              int _Py_UnhandledKeyboardInterrupt
+Python/pylifecycle.c:fatal_error():reentrant                     static int reentrant
+
+
+#######################################
+# PyObject (960)
+
+# freelists (10 + 10)
+Modules/_collectionsmodule.c:freeblocks                          static block *freeblocks[MAXFREEBLOCKS]
+Modules/_collectionsmodule.c:numfreeblocks                       static Py_ssize_t numfreeblocks
+Objects/dictobject.c:free_list                                   static PyDictObject *free_list[PyDict_MAXFREELIST]
+Objects/dictobject.c:numfree                                     static int numfree
+Objects/exceptions.c:memerrors_freelist                          static PyBaseExceptionObject *memerrors_freelist
+Objects/exceptions.c:memerrors_numfree                           static int memerrors_numfree
+Objects/floatobject.c:free_list                                  static PyFloatObject *free_list
+Objects/floatobject.c:numfree                                    static int numfree
+Objects/frameobject.c:free_list                                  static PyFrameObject *free_list
+Objects/frameobject.c:numfree                                    static int numfree
+Objects/genobject.c:ag_asend_freelist                            static PyAsyncGenASend *ag_asend_freelist[_PyAsyncGen_MAXFREELIST]
+Objects/genobject.c:ag_asend_freelist_free                       static int ag_asend_freelist_free
+Objects/genobject.c:ag_value_freelist                            static _PyAsyncGenWrappedValue *ag_value_freelist[_PyAsyncGen_MAXFREELIST]
+Objects/genobject.c:ag_value_freelist_free                       static int ag_value_freelist_free
+Objects/listobject.c:free_list                                   static PyListObject *free_list[PyList_MAXFREELIST]
+Objects/listobject.c:numfree                                     static int numfree
+Objects/tupleobject.c:free_list                                  static PyTupleObject *free_list[PyTuple_MAXSAVESIZE]
+Objects/tupleobject.c:numfree                                    static int numfree[PyTuple_MAXSAVESIZE]
+Python/context.c:ctx_freelist                                    static PyContext *ctx_freelist
+Python/context.c:ctx_freelist_len                                static int ctx_freelist_len
+
+
+# singletons (7)
+Objects/boolobject.c:_Py_FalseStruct                             static struct _longobject _Py_FalseStruct
+Objects/boolobject.c:_Py_TrueStruct                              static struct _longobject _Py_TrueStruct
+Objects/boolobject.c:false_str                                   static PyObject *false_str
+Objects/boolobject.c:true_str                                    static PyObject *true_str
+Objects/object.c:_Py_NoneStruct                                  PyObject _Py_NoneStruct
+Objects/object.c:_Py_NotImplementedStruct                        PyObject _Py_NotImplementedStruct
+Objects/sliceobject.c:_Py_EllipsisObject                         PyObject _Py_EllipsisObject
+
+
+# module vars (9)
+Modules/_functoolsmodule.c:kwd_mark                              static PyObject *kwd_mark
+Modules/_localemodule.c:Error                                    static PyObject *Error
+Modules/_threadmodule.c:ThreadError                              static PyObject *ThreadError
+Modules/_tracemalloc.c:unknown_filename                          static PyObject *unknown_filename
+Modules/signalmodule.c:DefaultHandler                            static PyObject *DefaultHandler
+Modules/signalmodule.c:IgnoreHandler                             static PyObject *IgnoreHandler
+Modules/signalmodule.c:IntHandler                                static PyObject *IntHandler
+Modules/signalmodule.c:ItimerError                               static PyObject *ItimerError
+Objects/exceptions.c:errnomap                                    static PyObject *errnomap
+
+
+# other (non-cache) (5)
+Modules/_tracemalloc.c:tracemalloc_traceback                     static traceback_t *tracemalloc_traceback
+Modules/faulthandler.c:fatal_error                               static struct { int enabled; PyObject *file; int fd; int all_threads; PyInterpreterState *interp; void *exc_handler; } fatal_error
+Modules/faulthandler.c:thread                                    static struct { PyObject *file; int fd; PY_TIMEOUT_T timeout_us; int repeat; PyInterpreterState *interp; int exit; char *header; size_t header_len; PyThread_type_lock cancel_event; PyThread_type_lock running; } thread
+Modules/signalmodule.c:Handlers                                  static volatile struct { _Py_atomic_int tripped; PyObject *func; } Handlers[NSIG]
+Objects/setobject.c:_dummy_struct                                static PyObject _dummy_struct
+
+
+# caches (5)
+Modules/posixmodule.c:posix_putenv_garbage                       static PyObject *posix_putenv_garbage
+Objects/sliceobject.c:slice_cache                                static PySliceObject *slice_cache
+Objects/typeobject.c:method_cache                                static struct method_cache_entry method_cache[1 << MCACHE_SIZE_EXP]
+Objects/unicodeobject.c:interned                                 static PyObject *interned
+Python/import.c:extensions                                       static PyObject *extensions
+
+
+# cached constants - non-str (15)
+Modules/_io/_iomodule.c:_PyIO_empty_bytes                        PyObject *_PyIO_empty_bytes
+Modules/_io/bufferedio.c:_PyIO_trap_eintr():eintr_int            static PyObject *eintr_int
+Modules/posixmodule.c:billion                                    static PyObject *billion
+Modules/posixmodule.c:wait_helper():struct_rusage                static PyObject *struct_rusage
+Objects/bytesobject.c:characters                                 static PyBytesObject *characters[UCHAR_MAX + 1]
+Objects/bytesobject.c:nullstring                                 static PyBytesObject *nullstring
+Objects/codeobject.c:PyCode_NewEmpty():nulltuple                 static PyObject *nulltuple
+Objects/dictobject.c:empty_values                                static PyObject *empty_values[1]
+Objects/listobject.c:indexerr                                    static PyObject *indexerr
+Objects/longobject.c:_PyLong_One                                 PyObject *_PyLong_One
+Objects/longobject.c:_PyLong_Zero                                PyObject *_PyLong_Zero
+Objects/longobject.c:small_ints                                  static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS]
+Objects/setobject.c:emptyfrozenset                               static PyObject *emptyfrozenset
+Python/context.c:_token_missing                                  static PyObject *_token_missing
+Python/hamt.c:_empty_hamt                                        static PyHamtObject *_empty_hamt
+
+
+# cached constants - str (441)
+Modules/_io/_iomodule.c:_PyIO_empty_str                          PyObject *_PyIO_empty_str
+Modules/_io/_iomodule.c:_PyIO_str_close                          PyObject *_PyIO_str_close
+Modules/_io/_iomodule.c:_PyIO_str_closed                         PyObject *_PyIO_str_closed
+Modules/_io/_iomodule.c:_PyIO_str_decode                         PyObject *_PyIO_str_decode
+Modules/_io/_iomodule.c:_PyIO_str_encode                         PyObject *_PyIO_str_encode
+Modules/_io/_iomodule.c:_PyIO_str_fileno                         PyObject *_PyIO_str_fileno
+Modules/_io/_iomodule.c:_PyIO_str_flush                          PyObject *_PyIO_str_flush
+Modules/_io/_iomodule.c:_PyIO_str_getstate                       PyObject *_PyIO_str_getstate
+Modules/_io/_iomodule.c:_PyIO_str_isatty                         PyObject *_PyIO_str_isatty
+Modules/_io/_iomodule.c:_PyIO_str_newlines                       PyObject *_PyIO_str_newlines
+Modules/_io/_iomodule.c:_PyIO_str_nl                             PyObject *_PyIO_str_nl
+Modules/_io/_iomodule.c:_PyIO_str_peek                           PyObject *_PyIO_str_peek
+Modules/_io/_iomodule.c:_PyIO_str_read                           PyObject *_PyIO_str_read
+Modules/_io/_iomodule.c:_PyIO_str_read1                          PyObject *_PyIO_str_read1
+Modules/_io/_iomodule.c:_PyIO_str_readable                       PyObject *_PyIO_str_readable
+Modules/_io/_iomodule.c:_PyIO_str_readall                        PyObject *_PyIO_str_readall
+Modules/_io/_iomodule.c:_PyIO_str_readinto                       PyObject *_PyIO_str_readinto
+Modules/_io/_iomodule.c:_PyIO_str_readline                       PyObject *_PyIO_str_readline
+Modules/_io/_iomodule.c:_PyIO_str_reset                          PyObject *_PyIO_str_reset
+Modules/_io/_iomodule.c:_PyIO_str_seek                           PyObject *_PyIO_str_seek
+Modules/_io/_iomodule.c:_PyIO_str_seekable                       PyObject *_PyIO_str_seekable
+Modules/_io/_iomodule.c:_PyIO_str_setstate                       PyObject *_PyIO_str_setstate
+Modules/_io/_iomodule.c:_PyIO_str_tell                           PyObject *_PyIO_str_tell
+Modules/_io/_iomodule.c:_PyIO_str_truncate                       PyObject *_PyIO_str_truncate
+Modules/_io/_iomodule.c:_PyIO_str_writable                       PyObject *_PyIO_str_writable
+Modules/_io/_iomodule.c:_PyIO_str_write                          PyObject *_PyIO_str_write
+Modules/_threadmodule.c:str_dict                                 static PyObject *str_dict
+Modules/gcmodule.c:gc_str                                        static PyObject *gc_str
+Objects/classobject.c:instancemethod_get_doc():docstr            static PyObject *docstr
+Objects/classobject.c:method_get_doc():docstr                    static PyObject *docstr
+Objects/codeobject.c:PyCode_NewEmpty():emptystring               static PyObject *emptystring
+Objects/exceptions.c:_check_for_legacy_statements():exec_prefix  static PyObject *exec_prefix
+Objects/exceptions.c:_check_for_legacy_statements():print_prefix static PyObject *print_prefix
+Objects/funcobject.c:PyFunction_NewWithQualName():__name__       static PyObject *__name__
+Objects/typeobject.c:object___reduce_ex___impl():objreduce       static PyObject *objreduce
+Objects/typeobject.c:resolve_slotdups():pname                    static PyObject *pname
+Objects/unicodeobject.c:unicode_empty                            static PyObject *unicode_empty
+Objects/unicodeobject.c:unicode_latin1                           static PyObject *unicode_latin1[256]
+Python/_warnings.c:is_internal_frame():bootstrap_string          static PyObject *bootstrap_string
+Python/_warnings.c:is_internal_frame():importlib_string          static PyObject *importlib_string
+Python/ast.c:u_kind                                              static PyObject *u_kind
+Python/ast_unparse.c:_str_close_br                               static PyObject *_str_close_br
+Python/ast_unparse.c:_str_dbl_close_br                           static PyObject *_str_dbl_close_br
+Python/ast_unparse.c:_str_dbl_open_br                            static PyObject *_str_dbl_open_br
+Python/ast_unparse.c:_str_open_br                                static PyObject *_str_open_br
+Python/compile.c:__annotations__                                 static PyObject *__annotations__
+Python/compile.c:__doc__                                         static PyObject *__doc__
+Python/compile.c:compiler_dictcomp():name                        static identifier name
+Python/compile.c:compiler_from_import():empty_string             static PyObject *empty_string
+Python/compile.c:compiler_genexp():name                          static identifier name
+Python/compile.c:compiler_lambda():name                          static identifier name
+Python/compile.c:compiler_listcomp():name                        static identifier name
+Python/compile.c:compiler_setcomp():name                         static identifier name
+Python/compile.c:compiler_visit_annotations():return_str         static identifier return_str
+Python/import.c:PyImport_Import():builtins_str                   static PyObject *builtins_str
+Python/import.c:PyImport_Import():import_str                     static PyObject *import_str
+Python/import.c:PyImport_Import():silly_list                     static PyObject *silly_list
+Python/sysmodule.c:whatstrings                                   static PyObject *whatstrings[8]
+Python/sysmodule.c:sys_displayhook():newline                     static PyObject *newline
+Objects/typeobject.c:object_new():comma_id                       _Py_static_string(comma_id, "", "")
+Objects/typeobject.c:slot_nb_add():op_id                         _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_add():rop_id                        _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_and():op_id                         _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_and():rop_id                        _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_divmod():op_id                      _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_divmod():rop_id                     _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_floor_divide():op_id                _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_floor_divide():rop_id               _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_lshift():op_id                      _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_lshift():rop_id                     _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_matrix_multiply():op_id             _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_matrix_multiply():rop_id            _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_multiply():op_id                    _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_multiply():rop_id                   _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_or():op_id                          _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_or():rop_id                         _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_power_binary():op_id                _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_power_binary():rop_id               _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_remainder():op_id                   _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_remainder():rop_id                  _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_rshift():op_id                      _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_rshift():rop_id                     _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_subtract():op_id                    _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_subtract():rop_id                   _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_true_divide():op_id                 _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_true_divide():rop_id                _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_xor():op_id                         _Py_static_string(op_id, OPSTR)
+Objects/typeobject.c:slot_nb_xor():rop_id                        _Py_static_string(op_id, OPSTR)
+Python/compile.c:compiler_set_qualname():dot                     _Py_static_string(dot, ""."")
+Python/compile.c:compiler_set_qualname():dot_locals              _Py_static_string(dot_locals, "".<locals>"")
+Python/pythonrun.c:PyId_string                                   _Py_static_string(PyId_string, ""<string>"")
+Modules/_abc.c:PyId___abstractmethods__                          _Py_IDENTIFIER(__abstractmethods__)
+Modules/_abc.c:PyId___bases__                                    _Py_IDENTIFIER(__bases__)
+Modules/_abc.c:PyId___class__                                    _Py_IDENTIFIER(__class__)
+Modules/_abc.c:PyId___dict__                                     _Py_IDENTIFIER(__dict__)
+Modules/_abc.c:PyId___subclasscheck__                            _Py_IDENTIFIER(__subclasscheck__)
+Modules/_abc.c:PyId___subclasshook__                             _Py_IDENTIFIER(__subclasshook__)
+Modules/_abc.c:PyId__abc_impl                                    _Py_IDENTIFIER(_abc_impl)
+Modules/_collectionsmodule.c:_count_elements():PyId___setitem__  _Py_IDENTIFIER(__setitem__)
+Modules/_collectionsmodule.c:_count_elements():PyId_get          _Py_IDENTIFIER(get)
+Modules/_collectionsmodule.c:defdict_reduce():PyId_items         _Py_IDENTIFIER(items)
+Modules/_dbmmodule.c:dbm__exit__():PyId_close                    _Py_IDENTIFIER(close)
+Modules/_gdbmmodule.c:dbm__exit__():PyId_close                   _Py_IDENTIFIER(close)
+Modules/_io/_iomodule.c:_io_open_impl():PyId__blksize            _Py_IDENTIFIER(_blksize)
+Modules/_io/_iomodule.c:_io_open_impl():PyId_isatty              _Py_IDENTIFIER(isatty)
+Modules/_io/_iomodule.c:_io_open_impl():PyId_mode                _Py_IDENTIFIER(mode)
+Modules/_io/bufferedio.c:PyId__dealloc_warn                      _Py_IDENTIFIER(_dealloc_warn)
+Modules/_io/bufferedio.c:PyId_close                              _Py_IDENTIFIER(close)
+Modules/_io/bufferedio.c:PyId_flush                              _Py_IDENTIFIER(flush)
+Modules/_io/bufferedio.c:PyId_isatty                             _Py_IDENTIFIER(isatty)
+Modules/_io/bufferedio.c:PyId_mode                               _Py_IDENTIFIER(mode)
+Modules/_io/bufferedio.c:PyId_name                               _Py_IDENTIFIER(name)
+Modules/_io/bufferedio.c:PyId_peek                               _Py_IDENTIFIER(peek)
+Modules/_io/bufferedio.c:PyId_read                               _Py_IDENTIFIER(read)
+Modules/_io/bufferedio.c:PyId_read1                              _Py_IDENTIFIER(read1)
+Modules/_io/bufferedio.c:PyId_readable                           _Py_IDENTIFIER(readable)
+Modules/_io/bufferedio.c:PyId_readinto                           _Py_IDENTIFIER(readinto)
+Modules/_io/bufferedio.c:PyId_readinto1                          _Py_IDENTIFIER(readinto1)
+Modules/_io/bufferedio.c:PyId_writable                           _Py_IDENTIFIER(writable)
+Modules/_io/bufferedio.c:PyId_write                              _Py_IDENTIFIER(write)
+Modules/_io/fileio.c:PyId_name                                   _Py_IDENTIFIER(name)
+Modules/_io/iobase.c:PyId___IOBase_closed                        _Py_IDENTIFIER(__IOBase_closed)
+Modules/_io/iobase.c:PyId_read                                   _Py_IDENTIFIER(read)
+Modules/_io/iobase.c:_io__IOBase_tell_impl():PyId_seek           _Py_IDENTIFIER(seek)
+Modules/_io/iobase.c:_io__RawIOBase_read_impl():PyId_readall     _Py_IDENTIFIER(readall)
+Modules/_io/iobase.c:iobase_finalize():PyId__finalizing          _Py_IDENTIFIER(_finalizing)
+Modules/_io/textio.c:PyId__dealloc_warn                          _Py_IDENTIFIER(_dealloc_warn)
+Modules/_io/textio.c:PyId_close                                  _Py_IDENTIFIER(close)
+Modules/_io/textio.c:PyId_decode                                 _Py_IDENTIFIER(decode)
+Modules/_io/textio.c:PyId_fileno                                 _Py_IDENTIFIER(fileno)
+Modules/_io/textio.c:PyId_flush                                  _Py_IDENTIFIER(flush)
+Modules/_io/textio.c:PyId_getpreferredencoding                   _Py_IDENTIFIER(getpreferredencoding)
+Modules/_io/textio.c:PyId_isatty                                 _Py_IDENTIFIER(isatty)
+Modules/_io/textio.c:PyId_mode                                   _Py_IDENTIFIER(mode)
+Modules/_io/textio.c:PyId_name                                   _Py_IDENTIFIER(name)
+Modules/_io/textio.c:PyId_raw                                    _Py_IDENTIFIER(raw)
+Modules/_io/textio.c:PyId_read                                   _Py_IDENTIFIER(read)
+Modules/_io/textio.c:PyId_readable                               _Py_IDENTIFIER(readable)
+Modules/_io/textio.c:PyId_replace                                _Py_IDENTIFIER(replace)
+Modules/_io/textio.c:PyId_reset                                  _Py_IDENTIFIER(reset)
+Modules/_io/textio.c:PyId_seek                                   _Py_IDENTIFIER(seek)
+Modules/_io/textio.c:PyId_seekable                               _Py_IDENTIFIER(seekable)
+Modules/_io/textio.c:PyId_setstate                               _Py_IDENTIFIER(setstate)
+Modules/_io/textio.c:PyId_strict                                 _Py_IDENTIFIER(strict)
+Modules/_io/textio.c:PyId_tell                                   _Py_IDENTIFIER(tell)
+Modules/_io/textio.c:PyId_writable                               _Py_IDENTIFIER(writable)
+Modules/_operator.c:methodcaller_reduce():PyId_partial           _Py_IDENTIFIER(partial)
+Modules/_pickle.c:do_append():PyId_extend                        _Py_IDENTIFIER(extend)
+Modules/_pickle.c:load_build():PyId___setstate__                 _Py_IDENTIFIER(__setstate__)
+Modules/_threadmodule.c:PyId_flush                               _Py_IDENTIFIER(flush)
+Modules/_threadmodule.c:PyId_stderr                              _Py_IDENTIFIER(stderr)
+Modules/arraymodule.c:array_arrayiterator___reduce___impl():PyId_iter _Py_IDENTIFIER(iter)
+Modules/faulthandler.c:PyId_enable                               _Py_IDENTIFIER(enable)
+Modules/faulthandler.c:PyId_fileno                               _Py_IDENTIFIER(fileno)
+Modules/faulthandler.c:PyId_flush                                _Py_IDENTIFIER(flush)
+Modules/faulthandler.c:PyId_stderr                               _Py_IDENTIFIER(stderr)
+Modules/itertoolsmodule.c:itertools_tee_impl():PyId___copy__     _Py_IDENTIFIER(__copy__)
+Modules/itertoolsmodule.c:zip_longest_new():PyId_fillvalue       _Py_IDENTIFIER(fillvalue)
+Modules/main.c:pymain_sys_path_add_path0():PyId_path             _Py_IDENTIFIER(path)
+Modules/posixmodule.c:DirEntry_test_mode():PyId_st_mode          _Py_IDENTIFIER(st_mode)
+Modules/posixmodule.c:PyOS_FSPath():PyId___fspath__              _Py_IDENTIFIER(__fspath__)
+Modules/posixmodule.c:path_converter():PyId___fspath__           _Py_IDENTIFIER(__fspath__)
+Modules/posixmodule.c:wait_helper():PyId_struct_rusage           _Py_IDENTIFIER(struct_rusage)
+Modules/timemodule.c:time_strptime():PyId__strptime_time         _Py_IDENTIFIER(_strptime_time)
+Objects/abstract.c:PyMapping_Items():PyId_items                  _Py_IDENTIFIER(items)
+Objects/abstract.c:PyMapping_Keys():PyId_keys                    _Py_IDENTIFIER(keys)
+Objects/abstract.c:PyMapping_Values():PyId_values                _Py_IDENTIFIER(values)
+Objects/abstract.c:PyNumber_Long():PyId___trunc__                _Py_IDENTIFIER(__trunc__)
+Objects/abstract.c:PyObject_Format():PyId___format__             _Py_IDENTIFIER(__format__)
+Objects/abstract.c:PyObject_GetItem():PyId___class_getitem__     _Py_IDENTIFIER(__class_getitem__)
+Objects/abstract.c:PyObject_IsInstance():PyId___instancecheck__  _Py_IDENTIFIER(__instancecheck__)
+Objects/abstract.c:PyObject_IsSubclass():PyId___subclasscheck__  _Py_IDENTIFIER(__subclasscheck__)
+Objects/abstract.c:PyObject_LengthHint():PyId___length_hint__    _Py_IDENTIFIER(__length_hint__)
+Objects/abstract.c:abstract_get_bases():PyId___bases__           _Py_IDENTIFIER(__bases__)
+Objects/abstract.c:recursive_isinstance():PyId___class__         _Py_IDENTIFIER(__class__)
+Objects/bytearrayobject.c:_common_reduce():PyId___dict__         _Py_IDENTIFIER(__dict__)
+Objects/bytearrayobject.c:bytearrayiter_reduce():PyId_iter       _Py_IDENTIFIER(iter)
+Objects/bytesobject.c:bytes_new():PyId___bytes__                 _Py_IDENTIFIER(__bytes__)
+Objects/bytesobject.c:format_obj():PyId___bytes__                _Py_IDENTIFIER(__bytes__)
+Objects/bytesobject.c:striter_reduce():PyId_iter                 _Py_IDENTIFIER(iter)
+Objects/classobject.c:PyId___name__                              _Py_IDENTIFIER(__name__)
+Objects/classobject.c:PyId___qualname__                          _Py_IDENTIFIER(__qualname__)
+Objects/classobject.c:method_reduce():PyId_getattr               _Py_IDENTIFIER(getattr)
+Objects/complexobject.c:try_complex_special_method():PyId___complex__ _Py_IDENTIFIER(__complex__)
+Objects/descrobject.c:calculate_qualname():PyId___qualname__     _Py_IDENTIFIER(__qualname__)
+Objects/descrobject.c:descr_reduce():PyId_getattr                _Py_IDENTIFIER(getattr)
+Objects/descrobject.c:mappingproxy_copy():PyId_copy              _Py_IDENTIFIER(copy)
+Objects/descrobject.c:mappingproxy_get():PyId_get                _Py_IDENTIFIER(get)
+Objects/descrobject.c:mappingproxy_items():PyId_items            _Py_IDENTIFIER(items)
+Objects/descrobject.c:mappingproxy_keys():PyId_keys              _Py_IDENTIFIER(keys)
+Objects/descrobject.c:mappingproxy_values():PyId_values          _Py_IDENTIFIER(values)
+Objects/descrobject.c:property_init_impl():PyId___doc__          _Py_IDENTIFIER(__doc__)
+Objects/descrobject.c:wrapper_reduce():PyId_getattr              _Py_IDENTIFIER(getattr)
+Objects/dictobject.c:_PyDictView_Intersect():PyId_intersection_update _Py_IDENTIFIER(intersection_update)
+Objects/dictobject.c:dict_subscript():PyId___missing__           _Py_IDENTIFIER(__missing__)
+Objects/dictobject.c:dict_update_common():PyId_keys              _Py_IDENTIFIER(keys)
+Objects/dictobject.c:dictiter_reduce():PyId_iter                 _Py_IDENTIFIER(iter)
+Objects/dictobject.c:dictviews_or():PyId_update                  _Py_IDENTIFIER(update)
+Objects/dictobject.c:dictviews_sub():PyId_difference_update      _Py_IDENTIFIER(difference_update)
+Objects/dictobject.c:dictviews_xor():PyId_symmetric_difference_update _Py_IDENTIFIER(symmetric_difference_update)
+Objects/enumobject.c:reversed_new_impl():PyId___reversed__       _Py_IDENTIFIER(__reversed__)
+Objects/exceptions.c:ImportError_getstate():PyId_name            _Py_IDENTIFIER(name)
+Objects/exceptions.c:ImportError_getstate():PyId_path            _Py_IDENTIFIER(path)
+Objects/fileobject.c:PyFile_FromFd():PyId_open                   _Py_IDENTIFIER(open)
+Objects/fileobject.c:PyFile_GetLine():PyId_readline              _Py_IDENTIFIER(readline)
+Objects/fileobject.c:PyFile_OpenCodeObject():PyId_open           _Py_IDENTIFIER(open)
+Objects/fileobject.c:PyFile_WriteObject():PyId_write             _Py_IDENTIFIER(write)
+Objects/fileobject.c:PyObject_AsFileDescriptor():PyId_fileno     _Py_IDENTIFIER(fileno)
+Objects/frameobject.c:PyId___builtins__                          _Py_IDENTIFIER(__builtins__)
+Objects/genobject.c:_gen_throw():PyId_throw                      _Py_IDENTIFIER(throw)
+Objects/genobject.c:gen_close_iter():PyId_close                  _Py_IDENTIFIER(close)
+Objects/iterobject.c:calliter_reduce():PyId_iter                 _Py_IDENTIFIER(iter)
+Objects/iterobject.c:iter_reduce():PyId_iter                     _Py_IDENTIFIER(iter)
+Objects/listobject.c:listiter_reduce_general():PyId_iter         _Py_IDENTIFIER(iter)
+Objects/listobject.c:listiter_reduce_general():PyId_reversed     _Py_IDENTIFIER(reversed)
+Objects/longobject.c:PyId_big                                    _Py_IDENTIFIER(big)
+Objects/longobject.c:PyId_little                                 _Py_IDENTIFIER(little)
+Objects/methodobject.c:meth_get__qualname__():PyId___qualname__  _Py_IDENTIFIER(__qualname__)
+Objects/methodobject.c:meth_reduce():PyId_getattr                _Py_IDENTIFIER(getattr)
+Objects/moduleobject.c:PyModule_GetFilenameObject():PyId___file__ _Py_IDENTIFIER(__file__)
+Objects/moduleobject.c:PyModule_GetNameObject():PyId___name__    _Py_IDENTIFIER(__name__)
+Objects/moduleobject.c:PyModule_SetDocString():PyId___doc__      _Py_IDENTIFIER(__doc__)
+Objects/moduleobject.c:_PyModuleSpec_IsInitializing():PyId__initializing _Py_IDENTIFIER(_initializing)
+Objects/moduleobject.c:module_dir():PyId___dict__                _Py_IDENTIFIER(__dict__)
+Objects/moduleobject.c:module_dir():PyId___dir__                 _Py_IDENTIFIER(__dir__)
+Objects/moduleobject.c:module_getattro():PyId___getattr__        _Py_IDENTIFIER(__getattr__)
+Objects/moduleobject.c:module_getattro():PyId___name__           _Py_IDENTIFIER(__name__)
+Objects/moduleobject.c:module_getattro():PyId___spec__           _Py_IDENTIFIER(__spec__)
+Objects/moduleobject.c:module_init_dict():PyId___doc__           _Py_IDENTIFIER(__doc__)
+Objects/moduleobject.c:module_init_dict():PyId___loader__        _Py_IDENTIFIER(__loader__)
+Objects/moduleobject.c:module_init_dict():PyId___name__          _Py_IDENTIFIER(__name__)
+Objects/moduleobject.c:module_init_dict():PyId___package__       _Py_IDENTIFIER(__package__)
+Objects/moduleobject.c:module_init_dict():PyId___spec__          _Py_IDENTIFIER(__spec__)
+Objects/object.c:PyId_Py_Repr                                    _Py_IDENTIFIER(Py_Repr)
+Objects/object.c:PyId___bytes__                                  _Py_IDENTIFIER(__bytes__)
+Objects/object.c:PyId___dir__                                    _Py_IDENTIFIER(__dir__)
+Objects/object.c:PyId___isabstractmethod__                       _Py_IDENTIFIER(__isabstractmethod__)
+Objects/odictobject.c:mutablemapping_update():PyId_items         _Py_IDENTIFIER(items)
+Objects/odictobject.c:mutablemapping_update():PyId_keys          _Py_IDENTIFIER(keys)
+Objects/odictobject.c:odict_reduce():PyId___dict__               _Py_IDENTIFIER(__dict__)
+Objects/odictobject.c:odict_reduce():PyId_items                  _Py_IDENTIFIER(items)
+Objects/odictobject.c:odict_repr():PyId_items                    _Py_IDENTIFIER(items)
+Objects/odictobject.c:odictiter_reduce():PyId_iter               _Py_IDENTIFIER(iter)
+Objects/rangeobject.c:longrangeiter_reduce():PyId_iter           _Py_IDENTIFIER(iter)
+Objects/rangeobject.c:rangeiter_reduce():PyId_iter               _Py_IDENTIFIER(iter)
+Objects/setobject.c:set_reduce():PyId___dict__                   _Py_IDENTIFIER(__dict__)
+Objects/setobject.c:setiter_reduce():PyId_iter                   _Py_IDENTIFIER(iter)
+Objects/structseq.c:PyId_n_fields                                _Py_IDENTIFIER(n_fields)
+Objects/structseq.c:PyId_n_sequence_fields                       _Py_IDENTIFIER(n_sequence_fields)
+Objects/structseq.c:PyId_n_unnamed_fields                        _Py_IDENTIFIER(n_unnamed_fields)
+Objects/tupleobject.c:tupleiter_reduce():PyId_iter               _Py_IDENTIFIER(iter)
+Objects/typeobject.c:PyId___abstractmethods__                    _Py_IDENTIFIER(__abstractmethods__)
+Objects/typeobject.c:PyId___class__                              _Py_IDENTIFIER(__class__)
+Objects/typeobject.c:PyId___class_getitem__                      _Py_IDENTIFIER(__class_getitem__)
+Objects/typeobject.c:PyId___delitem__                            _Py_IDENTIFIER(__delitem__)
+Objects/typeobject.c:PyId___dict__                               _Py_IDENTIFIER(__dict__)
+Objects/typeobject.c:PyId___doc__                                _Py_IDENTIFIER(__doc__)
+Objects/typeobject.c:PyId___getattribute__                       _Py_IDENTIFIER(__getattribute__)
+Objects/typeobject.c:PyId___getitem__                            _Py_IDENTIFIER(__getitem__)
+Objects/typeobject.c:PyId___hash__                               _Py_IDENTIFIER(__hash__)
+Objects/typeobject.c:PyId___init_subclass__                      _Py_IDENTIFIER(__init_subclass__)
+Objects/typeobject.c:PyId___len__                                _Py_IDENTIFIER(__len__)
+Objects/typeobject.c:PyId___module__                             _Py_IDENTIFIER(__module__)
+Objects/typeobject.c:PyId___name__                               _Py_IDENTIFIER(__name__)
+Objects/typeobject.c:PyId___new__                                _Py_IDENTIFIER(__new__)
+Objects/typeobject.c:PyId___set_name__                           _Py_IDENTIFIER(__set_name__)
+Objects/typeobject.c:PyId___setitem__                            _Py_IDENTIFIER(__setitem__)
+Objects/typeobject.c:PyId_builtins                               _Py_IDENTIFIER(builtins)
+Objects/typeobject.c:_PyObject_GetItemsIter():PyId_items         _Py_IDENTIFIER(items)
+Objects/typeobject.c:_PyObject_GetNewArguments():PyId___getnewargs__ _Py_IDENTIFIER(__getnewargs__)
+Objects/typeobject.c:_PyObject_GetNewArguments():PyId___getnewargs_ex__ _Py_IDENTIFIER(__getnewargs_ex__)
+Objects/typeobject.c:_PyObject_GetState():PyId___getstate__      _Py_IDENTIFIER(__getstate__)
+Objects/typeobject.c:_PyType_GetSlotNames():PyId___slotnames__   _Py_IDENTIFIER(__slotnames__)
+Objects/typeobject.c:_PyType_GetSlotNames():PyId__slotnames      _Py_IDENTIFIER(_slotnames)
+Objects/typeobject.c:import_copyreg():PyId_copyreg               _Py_IDENTIFIER(copyreg)
+Objects/typeobject.c:merge_class_dict():PyId___bases__           _Py_IDENTIFIER(__bases__)
+Objects/typeobject.c:mro_invoke():PyId_mro                       _Py_IDENTIFIER(mro)
+Objects/typeobject.c:object___reduce_ex___impl():PyId___reduce__ _Py_IDENTIFIER(__reduce__)
+Objects/typeobject.c:overrides_hash():PyId___eq__                _Py_IDENTIFIER(__eq__)
+Objects/typeobject.c:reduce_newobj():PyId___newobj__             _Py_IDENTIFIER(__newobj__)
+Objects/typeobject.c:reduce_newobj():PyId___newobj_ex__          _Py_IDENTIFIER(__newobj_ex__)
+Objects/typeobject.c:slot_am_aiter():PyId___aiter__              _Py_IDENTIFIER(__aiter__)
+Objects/typeobject.c:slot_am_anext():PyId___anext__              _Py_IDENTIFIER(__anext__)
+Objects/typeobject.c:slot_am_await():PyId___await__              _Py_IDENTIFIER(__await__)
+Objects/typeobject.c:slot_nb_bool():PyId___bool__                _Py_IDENTIFIER(__bool__)
+Objects/typeobject.c:slot_nb_index():PyId___index__              _Py_IDENTIFIER(__index__)
+Objects/typeobject.c:slot_nb_inplace_power():PyId___ipow__       _Py_IDENTIFIER(__ipow__)
+Objects/typeobject.c:slot_nb_power():PyId___pow__                _Py_IDENTIFIER(__pow__)
+Objects/typeobject.c:slot_sq_contains():PyId___contains__        _Py_IDENTIFIER(__contains__)
+Objects/typeobject.c:slot_tp_call():PyId___call__                _Py_IDENTIFIER(__call__)
+Objects/typeobject.c:slot_tp_descr_get():PyId___get__            _Py_IDENTIFIER(__get__)
+Objects/typeobject.c:slot_tp_descr_set():PyId___delete__         _Py_IDENTIFIER(__delete__)
+Objects/typeobject.c:slot_tp_descr_set():PyId___set__            _Py_IDENTIFIER(__set__)
+Objects/typeobject.c:slot_tp_finalize():PyId___del__             _Py_IDENTIFIER(__del__)
+Objects/typeobject.c:slot_tp_getattr_hook():PyId___getattr__     _Py_IDENTIFIER(__getattr__)
+Objects/typeobject.c:slot_tp_init():PyId___init__                _Py_IDENTIFIER(__init__)
+Objects/typeobject.c:slot_tp_iter():PyId___iter__                _Py_IDENTIFIER(__iter__)
+Objects/typeobject.c:slot_tp_iternext():PyId___next__            _Py_IDENTIFIER(__next__)
+Objects/typeobject.c:slot_tp_repr():PyId___repr__                _Py_IDENTIFIER(__repr__)
+Objects/typeobject.c:slot_tp_setattro():PyId___delattr__         _Py_IDENTIFIER(__delattr__)
+Objects/typeobject.c:slot_tp_setattro():PyId___setattr__         _Py_IDENTIFIER(__setattr__)
+Objects/typeobject.c:type_mro_modified():PyId_mro                _Py_IDENTIFIER(mro)
+Objects/typeobject.c:type_new():PyId___classcell__               _Py_IDENTIFIER(__classcell__)
+Objects/typeobject.c:type_new():PyId___mro_entries__             _Py_IDENTIFIER(__mro_entries__)
+Objects/typeobject.c:type_new():PyId___qualname__                _Py_IDENTIFIER(__qualname__)
+Objects/typeobject.c:type_new():PyId___slots__                   _Py_IDENTIFIER(__slots__)
+Objects/unicodeobject.c:unicodeiter_reduce():PyId_iter           _Py_IDENTIFIER(iter)
+Objects/weakrefobject.c:proxy_bytes():PyId___bytes__             _Py_IDENTIFIER(__bytes__)
+Objects/weakrefobject.c:weakref_repr():PyId___name__             _Py_IDENTIFIER(__name__)
+Parser/tokenizer.c:fp_setreadl():PyId_open                       _Py_IDENTIFIER(open)
+Parser/tokenizer.c:fp_setreadl():PyId_readline                   _Py_IDENTIFIER(readline)
+Python/Python-ast.c:ast_type_reduce():PyId___dict__              _Py_IDENTIFIER(__dict__)
+Python/Python-ast.c:make_type():PyId___module__                  _Py_IDENTIFIER(__module__)
+Python/_warnings.c:PyId_stderr                                   _Py_IDENTIFIER(stderr)
+Python/_warnings.c:_PyErr_WarnUnawaitedCoroutine():PyId__warn_unawaited_coroutine _Py_IDENTIFIER(_warn_unawaited_coroutine)
+Python/_warnings.c:already_warned():PyId_version                 _Py_IDENTIFIER(version)
+Python/_warnings.c:call_show_warning():PyId_WarningMessage       _Py_IDENTIFIER(WarningMessage)
+Python/_warnings.c:call_show_warning():PyId__showwarnmsg         _Py_IDENTIFIER(_showwarnmsg)
+Python/_warnings.c:check_matched():PyId_match                    _Py_IDENTIFIER(match)
+Python/_warnings.c:get_default_action():PyId_defaultaction       _Py_IDENTIFIER(defaultaction)
+Python/_warnings.c:get_filter():PyId_filters                     _Py_IDENTIFIER(filters)
+Python/_warnings.c:get_once_registry():PyId_onceregistry         _Py_IDENTIFIER(onceregistry)
+Python/_warnings.c:get_source_line():PyId___loader__             _Py_IDENTIFIER(__loader__)
+Python/_warnings.c:get_source_line():PyId___name__               _Py_IDENTIFIER(__name__)
+Python/_warnings.c:get_source_line():PyId_get_source             _Py_IDENTIFIER(get_source)
+Python/_warnings.c:get_warnings_attr():PyId_warnings             _Py_IDENTIFIER(warnings)
+Python/_warnings.c:setup_context():PyId___name__                 _Py_IDENTIFIER(__name__)
+Python/_warnings.c:setup_context():PyId___warningregistry__      _Py_IDENTIFIER(__warningregistry__)
+Python/_warnings.c:show_warning():PyId___name__                  _Py_IDENTIFIER(__name__)
+Python/bltinmodule.c:PyId___builtins__                           _Py_IDENTIFIER(__builtins__)
+Python/bltinmodule.c:PyId___dict__                               _Py_IDENTIFIER(__dict__)
+Python/bltinmodule.c:PyId___mro_entries__                        _Py_IDENTIFIER(__mro_entries__)
+Python/bltinmodule.c:PyId___prepare__                            _Py_IDENTIFIER(__prepare__)
+Python/bltinmodule.c:PyId___round__                              _Py_IDENTIFIER(__round__)
+Python/bltinmodule.c:PyId_encoding                               _Py_IDENTIFIER(encoding)
+Python/bltinmodule.c:PyId_errors                                 _Py_IDENTIFIER(errors)
+Python/bltinmodule.c:PyId_fileno                                 _Py_IDENTIFIER(fileno)
+Python/bltinmodule.c:PyId_flush                                  _Py_IDENTIFIER(flush)
+Python/bltinmodule.c:PyId_metaclass                              _Py_IDENTIFIER(metaclass)
+Python/bltinmodule.c:PyId_sort                                   _Py_IDENTIFIER(sort)
+Python/bltinmodule.c:PyId_stderr                                 _Py_IDENTIFIER(stderr)
+Python/bltinmodule.c:PyId_stdin                                  _Py_IDENTIFIER(stdin)
+Python/bltinmodule.c:PyId_stdout                                 _Py_IDENTIFIER(stdout)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___aenter__        _Py_IDENTIFIER(__aenter__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___aexit__         _Py_IDENTIFIER(__aexit__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___annotations__   _Py_IDENTIFIER(__annotations__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___build_class__   _Py_IDENTIFIER(__build_class__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___enter__         _Py_IDENTIFIER(__enter__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___exit__          _Py_IDENTIFIER(__exit__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId___ltrace__        _Py_IDENTIFIER(__ltrace__)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId_displayhook       _Py_IDENTIFIER(displayhook)
+Python/ceval.c:_PyEval_EvalFrameDefault():PyId_send              _Py_IDENTIFIER(send)
+Python/ceval.c:import_all_from():PyId___all__                    _Py_IDENTIFIER(__all__)
+Python/ceval.c:import_all_from():PyId___dict__                   _Py_IDENTIFIER(__dict__)
+Python/ceval.c:import_all_from():PyId___name__                   _Py_IDENTIFIER(__name__)
+Python/ceval.c:import_from():PyId___name__                       _Py_IDENTIFIER(__name__)
+Python/ceval.c:import_name():PyId___import__                     _Py_IDENTIFIER(__import__)
+Python/codecs.c:_PyCodec_LookupTextEncoding():PyId__is_text_encoding _Py_IDENTIFIER(_is_text_encoding)
+Python/compile.c:compiler_enter_scope():PyId___class__           _Py_IDENTIFIER(__class__)
+Python/errors.c:PyId_builtins                                    _Py_IDENTIFIER(builtins)
+Python/errors.c:PyId_flush                                       _Py_IDENTIFIER(flush)
+Python/errors.c:PyId_stderr                                      _Py_IDENTIFIER(stderr)
+Python/errors.c:PyErr_NewException():PyId___module__             _Py_IDENTIFIER(__module__)
+Python/errors.c:PyErr_SyntaxLocationObject():PyId_filename       _Py_IDENTIFIER(filename)
+Python/errors.c:PyErr_SyntaxLocationObject():PyId_lineno         _Py_IDENTIFIER(lineno)
+Python/errors.c:PyErr_SyntaxLocationObject():PyId_msg            _Py_IDENTIFIER(msg)
+Python/errors.c:PyErr_SyntaxLocationObject():PyId_offset         _Py_IDENTIFIER(offset)
+Python/errors.c:PyErr_SyntaxLocationObject():PyId_print_file_and_line _Py_IDENTIFIER(print_file_and_line)
+Python/errors.c:PyErr_SyntaxLocationObject():PyId_text           _Py_IDENTIFIER(text)
+Python/errors.c:_PyErr_WriteUnraisableMsg():PyId_unraisablehook  _Py_IDENTIFIER(unraisablehook)
+Python/import.c:PyImport_Cleanup():PyId_clear                    _Py_IDENTIFIER(clear)
+Python/import.c:PyImport_ExecCodeModuleObject():PyId__fix_up_module _Py_IDENTIFIER(_fix_up_module)
+Python/import.c:PyImport_ExecCodeModuleWithPathnames():PyId__get_sourcefile _Py_IDENTIFIER(_get_sourcefile)
+Python/import.c:PyImport_ImportModuleLevelObject():PyId___path__ _Py_IDENTIFIER(__path__)
+Python/import.c:PyImport_ImportModuleLevelObject():PyId___spec__ _Py_IDENTIFIER(__spec__)
+Python/import.c:PyImport_ImportModuleLevelObject():PyId__handle_fromlist _Py_IDENTIFIER(_handle_fromlist)
+Python/import.c:PyImport_ImportModuleLevelObject():PyId__lock_unlock_module _Py_IDENTIFIER(_lock_unlock_module)
+Python/import.c:PyImport_ReloadModule():PyId_imp                 _Py_IDENTIFIER(imp)
+Python/import.c:PyImport_ReloadModule():PyId_reload              _Py_IDENTIFIER(reload)
+Python/import.c:_PyImportZip_Init():PyId_zipimporter             _Py_IDENTIFIER(zipimporter)
+Python/import.c:import_find_and_load():PyId__find_and_load       _Py_IDENTIFIER(_find_and_load)
+Python/import.c:module_dict_for_exec():PyId___builtins__         _Py_IDENTIFIER(__builtins__)
+Python/import.c:resolve_name():PyId___name__                     _Py_IDENTIFIER(__name__)
+Python/import.c:resolve_name():PyId___package__                  _Py_IDENTIFIER(__package__)
+Python/import.c:resolve_name():PyId___path__                     _Py_IDENTIFIER(__path__)
+Python/import.c:resolve_name():PyId___spec__                     _Py_IDENTIFIER(__spec__)
+Python/import.c:resolve_name():PyId_parent                       _Py_IDENTIFIER(parent)
+Python/importdl.c:get_encoded_name():PyId_replace                _Py_IDENTIFIER(replace)
+Python/marshal.c:marshal_dump_impl():PyId_write                  _Py_IDENTIFIER(write)
+Python/marshal.c:marshal_load():PyId_read                        _Py_IDENTIFIER(read)
+Python/marshal.c:r_string():PyId_readinto                        _Py_IDENTIFIER(readinto)
+Python/pylifecycle.c:PyId_flush                                  _Py_IDENTIFIER(flush)
+Python/pylifecycle.c:PyId_name                                   _Py_IDENTIFIER(name)
+Python/pylifecycle.c:PyId_stderr                                 _Py_IDENTIFIER(stderr)
+Python/pylifecycle.c:PyId_stdin                                  _Py_IDENTIFIER(stdin)
+Python/pylifecycle.c:PyId_stdout                                 _Py_IDENTIFIER(stdout)
+Python/pylifecycle.c:PyId_threading                              _Py_IDENTIFIER(threading)
+Python/pylifecycle.c:create_stdio():PyId_TextIOWrapper           _Py_IDENTIFIER(TextIOWrapper)
+Python/pylifecycle.c:create_stdio():PyId_isatty                  _Py_IDENTIFIER(isatty)
+Python/pylifecycle.c:create_stdio():PyId_mode                    _Py_IDENTIFIER(mode)
+Python/pylifecycle.c:create_stdio():PyId_open                    _Py_IDENTIFIER(open)
+Python/pylifecycle.c:create_stdio():PyId_raw                     _Py_IDENTIFIER(raw)
+Python/pylifecycle.c:wait_for_thread_shutdown():PyId__shutdown   _Py_IDENTIFIER(_shutdown)
+Python/pythonrun.c:PyId_builtins                                 _Py_IDENTIFIER(builtins)
+Python/pythonrun.c:PyId_excepthook                               _Py_IDENTIFIER(excepthook)
+Python/pythonrun.c:PyId_flush                                    _Py_IDENTIFIER(flush)
+Python/pythonrun.c:PyId_last_traceback                           _Py_IDENTIFIER(last_traceback)
+Python/pythonrun.c:PyId_last_type                                _Py_IDENTIFIER(last_type)
+Python/pythonrun.c:PyId_last_value                               _Py_IDENTIFIER(last_value)
+Python/pythonrun.c:PyId_ps1                                      _Py_IDENTIFIER(ps1)
+Python/pythonrun.c:PyId_ps2                                      _Py_IDENTIFIER(ps2)
+Python/pythonrun.c:PyId_stderr                                   _Py_IDENTIFIER(stderr)
+Python/pythonrun.c:PyId_stdin                                    _Py_IDENTIFIER(stdin)
+Python/pythonrun.c:PyId_stdout                                   _Py_IDENTIFIER(stdout)
+Python/pythonrun.c:PyRun_InteractiveOneObjectEx():PyId___main__  _Py_IDENTIFIER(__main__)
+Python/pythonrun.c:PyRun_InteractiveOneObjectEx():PyId_encoding  _Py_IDENTIFIER(encoding)
+Python/pythonrun.c:_Py_HandleSystemExit():PyId_code              _Py_IDENTIFIER(code)
+Python/pythonrun.c:parse_syntax_error():PyId_filename            _Py_IDENTIFIER(filename)
+Python/pythonrun.c:parse_syntax_error():PyId_lineno              _Py_IDENTIFIER(lineno)
+Python/pythonrun.c:parse_syntax_error():PyId_msg                 _Py_IDENTIFIER(msg)
+Python/pythonrun.c:parse_syntax_error():PyId_offset              _Py_IDENTIFIER(offset)
+Python/pythonrun.c:parse_syntax_error():PyId_text                _Py_IDENTIFIER(text)
+Python/pythonrun.c:print_exception():PyId___module__             _Py_IDENTIFIER(__module__)
+Python/pythonrun.c:print_exception():PyId_print_file_and_line    _Py_IDENTIFIER(print_file_and_line)
+Python/sysmodule.c:PyId__                                        _Py_IDENTIFIER(_)
+Python/sysmodule.c:PyId___sizeof__                               _Py_IDENTIFIER(__sizeof__)
+Python/sysmodule.c:PyId__xoptions                                _Py_IDENTIFIER(_xoptions)
+Python/sysmodule.c:PyId_buffer                                   _Py_IDENTIFIER(buffer)
+Python/sysmodule.c:PyId_builtins                                 _Py_IDENTIFIER(builtins)
+Python/sysmodule.c:PyId_encoding                                 _Py_IDENTIFIER(encoding)
+Python/sysmodule.c:PyId_path                                     _Py_IDENTIFIER(path)
+Python/sysmodule.c:PyId_stderr                                   _Py_IDENTIFIER(stderr)
+Python/sysmodule.c:PyId_stdout                                   _Py_IDENTIFIER(stdout)
+Python/sysmodule.c:PyId_warnoptions                              _Py_IDENTIFIER(warnoptions)
+Python/sysmodule.c:PyId_write                                    _Py_IDENTIFIER(write)
+Python/traceback.c:PyId_TextIOWrapper                            _Py_IDENTIFIER(TextIOWrapper)
+Python/traceback.c:PyId_close                                    _Py_IDENTIFIER(close)
+Python/traceback.c:PyId_open                                     _Py_IDENTIFIER(open)
+Python/traceback.c:PyId_path                                     _Py_IDENTIFIER(path)
+Objects/typeobject.c:name_op                                     static _Py_Identifier name_op[]
+Objects/unicodeobject.c:static_strings                           static _Py_Identifier *static_strings
+
+
+# PyTypeObject (311)
+Modules/_abc.c:_abc_data_type                                    static PyTypeObject _abc_data_type
+Modules/_blake2/blake2b_impl.c:PyBlake2_BLAKE2bType              PyTypeObject PyBlake2_BLAKE2bType
+Modules/_blake2/blake2s_impl.c:PyBlake2_BLAKE2sType              PyTypeObject PyBlake2_BLAKE2sType
+Modules/_collectionsmodule.c:defdict_type                        static PyTypeObject defdict_type
+Modules/_collectionsmodule.c:deque_type                          static PyTypeObject deque_type
+Modules/_collectionsmodule.c:dequeiter_type                      static PyTypeObject dequeiter_type
+Modules/_collectionsmodule.c:dequereviter_type                   static PyTypeObject dequereviter_type
+Modules/_collectionsmodule.c:tuplegetter_type                    static PyTypeObject tuplegetter_type
+Modules/_functoolsmodule.c:keyobject_type                        static PyTypeObject keyobject_type
+Modules/_functoolsmodule.c:lru_cache_type                        static PyTypeObject lru_cache_type
+Modules/_functoolsmodule.c:lru_list_elem_type                    static PyTypeObject lru_list_elem_type
+Modules/_functoolsmodule.c:partial_type                          static PyTypeObject partial_type
+Modules/_io/bufferedio.c:PyBufferedIOBase_Type                   PyTypeObject PyBufferedIOBase_Type
+Modules/_io/bufferedio.c:PyBufferedRWPair_Type                   PyTypeObject PyBufferedRWPair_Type
+Modules/_io/bufferedio.c:PyBufferedRandom_Type                   PyTypeObject PyBufferedRandom_Type
+Modules/_io/bufferedio.c:PyBufferedReader_Type                   PyTypeObject PyBufferedReader_Type
+Modules/_io/bufferedio.c:PyBufferedWriter_Type                   PyTypeObject PyBufferedWriter_Type
+Modules/_io/bytesio.c:PyBytesIO_Type                             PyTypeObject PyBytesIO_Type
+Modules/_io/bytesio.c:_PyBytesIOBuffer_Type                      PyTypeObject _PyBytesIOBuffer_Type
+Modules/_io/fileio.c:PyFileIO_Type                               PyTypeObject PyFileIO_Type
+Modules/_io/iobase.c:PyIOBase_Type                               PyTypeObject PyIOBase_Type
+Modules/_io/iobase.c:PyRawIOBase_Type                            PyTypeObject PyRawIOBase_Type
+Modules/_io/stringio.c:PyStringIO_Type                           PyTypeObject PyStringIO_Type
+Modules/_io/textio.c:PyIncrementalNewlineDecoder_Type            PyTypeObject PyIncrementalNewlineDecoder_Type
+Modules/_io/textio.c:PyTextIOBase_Type                           PyTypeObject PyTextIOBase_Type
+Modules/_io/textio.c:PyTextIOWrapper_Type                        PyTypeObject PyTextIOWrapper_Type
+Modules/_operator.c:attrgetter_type                              static PyTypeObject attrgetter_type
+Modules/_operator.c:itemgetter_type                              static PyTypeObject itemgetter_type
+Modules/_operator.c:methodcaller_type                            static PyTypeObject methodcaller_type
+Modules/_sre.c:Match_Type                                        static PyTypeObject Match_Type
+Modules/_sre.c:Pattern_Type                                      static PyTypeObject Pattern_Type
+Modules/_sre.c:Scanner_Type                                      static PyTypeObject Scanner_Type
+Modules/_threadmodule.c:ExceptHookArgsType                       static PyTypeObject ExceptHookArgsType
+Modules/_threadmodule.c:Locktype                                 static PyTypeObject Locktype
+Modules/_threadmodule.c:RLocktype                                static PyTypeObject RLocktype
+Modules/_threadmodule.c:localdummytype                           static PyTypeObject localdummytype
+Modules/_threadmodule.c:localtype                                static PyTypeObject localtype
+Modules/itertoolsmodule.c:_grouper_type                          static PyTypeObject _grouper_type
+Modules/itertoolsmodule.c:accumulate_type                        static PyTypeObject accumulate_type
+Modules/itertoolsmodule.c:chain_type                             static PyTypeObject chain_type
+Modules/itertoolsmodule.c:combinations_type                      static PyTypeObject combinations_type
+Modules/itertoolsmodule.c:compress_type                          static PyTypeObject compress_type
+Modules/itertoolsmodule.c:count_type                             static PyTypeObject count_type
+Modules/itertoolsmodule.c:cwr_type                               static PyTypeObject cwr_type
+Modules/itertoolsmodule.c:cycle_type                             static PyTypeObject cycle_type
+Modules/itertoolsmodule.c:dropwhile_type                         static PyTypeObject dropwhile_type
+Modules/itertoolsmodule.c:filterfalse_type                       static PyTypeObject filterfalse_type
+Modules/itertoolsmodule.c:groupby_type                           static PyTypeObject groupby_type
+Modules/itertoolsmodule.c:islice_type                            static PyTypeObject islice_type
+Modules/itertoolsmodule.c:permutations_type                      static PyTypeObject permutations_type
+Modules/itertoolsmodule.c:product_type                           static PyTypeObject product_type
+Modules/itertoolsmodule.c:repeat_type                            static PyTypeObject repeat_type
+Modules/itertoolsmodule.c:starmap_type                           static PyTypeObject starmap_type
+Modules/itertoolsmodule.c:takewhile_type                         static PyTypeObject takewhile_type
+Modules/itertoolsmodule.c:tee_type                               static PyTypeObject tee_type
+Modules/itertoolsmodule.c:teedataobject_type                     static PyTypeObject teedataobject_type
+Modules/itertoolsmodule.c:ziplongest_type                        static PyTypeObject ziplongest_type
+Modules/posixmodule.c:DirEntryType                               static PyTypeObject DirEntryType
+Modules/posixmodule.c:ScandirIteratorType                        static PyTypeObject ScandirIteratorType
+Modules/posixmodule.c:SchedParamType                             static PyTypeObject* SchedParamType
+Modules/posixmodule.c:StatResultType                             static PyTypeObject* StatResultType
+Modules/posixmodule.c:StatVFSResultType                          static PyTypeObject* StatVFSResultType
+Modules/posixmodule.c:TerminalSizeType                           static PyTypeObject* TerminalSizeType
+Modules/posixmodule.c:TimesResultType                            static PyTypeObject* TimesResultType
+Modules/posixmodule.c:UnameResultType                            static PyTypeObject* UnameResultType
+Modules/posixmodule.c:WaitidResultType                           static PyTypeObject* WaitidResultType
+Modules/signalmodule.c:SiginfoType                               static PyTypeObject SiginfoType
+Modules/timemodule.c:StructTimeType                              static PyTypeObject StructTimeType
+Modules/xxsubtype.c:spamdict_type                                static PyTypeObject spamdict_type
+Modules/xxsubtype.c:spamlist_type                                static PyTypeObject spamlist_type
+Objects/boolobject.c:PyBool_Type                                 PyTypeObject PyBool_Type
+Objects/bytearrayobject.c:PyByteArrayIter_Type                   PyTypeObject PyByteArrayIter_Type
+Objects/bytearrayobject.c:PyByteArray_Type                       PyTypeObject PyByteArray_Type
+Objects/bytesobject.c:PyBytesIter_Type                           PyTypeObject PyBytesIter_Type
+Objects/bytesobject.c:PyBytes_Type                               PyTypeObject PyBytes_Type
+Objects/capsule.c:PyCapsule_Type                                 PyTypeObject PyCapsule_Type
+Objects/cellobject.c:PyCell_Type                                 PyTypeObject PyCell_Type
+Objects/classobject.c:PyInstanceMethod_Type                      PyTypeObject PyInstanceMethod_Type
+Objects/classobject.c:PyMethod_Type                              PyTypeObject PyMethod_Type
+Objects/codeobject.c:PyCode_Type                                 PyTypeObject PyCode_Type
+Objects/complexobject.c:PyComplex_Type                           PyTypeObject PyComplex_Type
+Objects/descrobject.c:PyClassMethodDescr_Type                    PyTypeObject PyClassMethodDescr_Type
+Objects/descrobject.c:PyDictProxy_Type                           PyTypeObject PyDictProxy_Type
+Objects/descrobject.c:PyGetSetDescr_Type                         PyTypeObject PyGetSetDescr_Type
+Objects/descrobject.c:PyMemberDescr_Type                         PyTypeObject PyMemberDescr_Type
+Objects/descrobject.c:PyMethodDescr_Type                         PyTypeObject PyMethodDescr_Type
+Objects/descrobject.c:PyProperty_Type                            PyTypeObject PyProperty_Type
+Objects/descrobject.c:PyWrapperDescr_Type                        PyTypeObject PyWrapperDescr_Type
+Objects/descrobject.c:_PyMethodWrapper_Type                      PyTypeObject _PyMethodWrapper_Type
+Objects/dictobject.c:PyDictItems_Type                            PyTypeObject PyDictItems_Type
+Objects/dictobject.c:PyDictIterItem_Type                         PyTypeObject PyDictIterItem_Type
+Objects/dictobject.c:PyDictIterKey_Type                          PyTypeObject PyDictIterKey_Type
+Objects/dictobject.c:PyDictIterValue_Type                        PyTypeObject PyDictIterValue_Type
+Objects/dictobject.c:PyDictKeys_Type                             PyTypeObject PyDictKeys_Type
+Objects/dictobject.c:PyDictRevIterItem_Type                      PyTypeObject PyDictRevIterItem_Type
+Objects/dictobject.c:PyDictRevIterKey_Type                       PyTypeObject PyDictRevIterKey_Type
+Objects/dictobject.c:PyDictRevIterValue_Type                     PyTypeObject PyDictRevIterValue_Type
+Objects/dictobject.c:PyDictValues_Type                           PyTypeObject PyDictValues_Type
+Objects/dictobject.c:PyDict_Type                                 PyTypeObject PyDict_Type
+Objects/enumobject.c:PyEnum_Type                                 PyTypeObject PyEnum_Type
+Objects/enumobject.c:PyReversed_Type                             PyTypeObject PyReversed_Type
+Objects/exceptions.c:PyExc_ArithmeticError                       static PyTypeObject PyExc_ArithmeticError
+Objects/exceptions.c:PyExc_AssertionError                        static PyTypeObject PyExc_AssertionError
+Objects/exceptions.c:PyExc_AttributeError                        static PyTypeObject PyExc_AttributeError
+Objects/exceptions.c:PyExc_BaseException                         static PyTypeObject PyExc_BaseException
+Objects/exceptions.c:PyExc_BlockingIOError                       static PyTypeObject PyExc_BlockingIOError
+Objects/exceptions.c:PyExc_BrokenPipeError                       static PyTypeObject PyExc_BrokenPipeError
+Objects/exceptions.c:PyExc_BufferError                           static PyTypeObject PyExc_BufferError
+Objects/exceptions.c:PyExc_BytesWarning                          static PyTypeObject PyExc_BytesWarning
+Objects/exceptions.c:PyExc_ChildProcessError                     static PyTypeObject PyExc_ChildProcessError
+Objects/exceptions.c:PyExc_ConnectionAbortedError                static PyTypeObject PyExc_ConnectionAbortedError
+Objects/exceptions.c:PyExc_ConnectionError                       static PyTypeObject PyExc_ConnectionError
+Objects/exceptions.c:PyExc_ConnectionRefusedError                static PyTypeObject PyExc_ConnectionRefusedError
+Objects/exceptions.c:PyExc_ConnectionResetError                  static PyTypeObject PyExc_ConnectionResetError
+Objects/exceptions.c:PyExc_DeprecationWarning                    static PyTypeObject PyExc_DeprecationWarning
+Objects/exceptions.c:PyExc_EOFError                              static PyTypeObject PyExc_EOFError
+Objects/exceptions.c:PyExc_EnvironmentError                      static PyTypeObject PyExc_EnvironmentError
+Objects/exceptions.c:PyExc_Exception                             static PyTypeObject PyExc_Exception
+Objects/exceptions.c:PyExc_FileExistsError                       static PyTypeObject PyExc_FileExistsError
+Objects/exceptions.c:PyExc_FileNotFoundError                     static PyTypeObject PyExc_FileNotFoundError
+Objects/exceptions.c:PyExc_FloatingPointError                    static PyTypeObject PyExc_FloatingPointError
+Objects/exceptions.c:PyExc_FutureWarning                         static PyTypeObject PyExc_FutureWarning
+Objects/exceptions.c:PyExc_GeneratorExit                         static PyTypeObject PyExc_GeneratorExit
+Objects/exceptions.c:PyExc_IOError                               static PyTypeObject PyExc_IOError
+Objects/exceptions.c:PyExc_ImportError                           static PyTypeObject PyExc_ImportError
+Objects/exceptions.c:PyExc_ImportWarning                         static PyTypeObject PyExc_ImportWarning
+Objects/exceptions.c:PyExc_IndentationError                      static PyTypeObject PyExc_IndentationError
+Objects/exceptions.c:PyExc_IndexError                            static PyTypeObject PyExc_IndexError
+Objects/exceptions.c:PyExc_InterruptedError                      static PyTypeObject PyExc_InterruptedError
+Objects/exceptions.c:PyExc_IsADirectoryError                     static PyTypeObject PyExc_IsADirectoryError
+Objects/exceptions.c:PyExc_KeyError                              static PyTypeObject PyExc_KeyError
+Objects/exceptions.c:PyExc_KeyboardInterrupt                     static PyTypeObject PyExc_KeyboardInterrupt
+Objects/exceptions.c:PyExc_LookupError                           static PyTypeObject PyExc_LookupError
+Objects/exceptions.c:PyExc_MemoryError                           static PyTypeObject PyExc_MemoryError
+Objects/exceptions.c:PyExc_ModuleNotFoundError                   static PyTypeObject PyExc_ModuleNotFoundError
+Objects/exceptions.c:PyExc_NameError                             static PyTypeObject PyExc_NameError
+Objects/exceptions.c:PyExc_NotADirectoryError                    static PyTypeObject PyExc_NotADirectoryError
+Objects/exceptions.c:PyExc_NotImplementedError                   static PyTypeObject PyExc_NotImplementedError
+Objects/exceptions.c:PyExc_OSError                               static PyTypeObject PyExc_OSError
+Objects/exceptions.c:PyExc_OverflowError                         static PyTypeObject PyExc_OverflowError
+Objects/exceptions.c:PyExc_PendingDeprecationWarning             static PyTypeObject PyExc_PendingDeprecationWarning
+Objects/exceptions.c:PyExc_PermissionError                       static PyTypeObject PyExc_PermissionError
+Objects/exceptions.c:PyExc_ProcessLookupError                    static PyTypeObject PyExc_ProcessLookupError
+Objects/exceptions.c:PyExc_RecursionError                        static PyTypeObject PyExc_RecursionError
+Objects/exceptions.c:PyExc_ReferenceError                        static PyTypeObject PyExc_ReferenceError
+Objects/exceptions.c:PyExc_ResourceWarning                       static PyTypeObject PyExc_ResourceWarning
+Objects/exceptions.c:PyExc_RuntimeError                          static PyTypeObject PyExc_RuntimeError
+Objects/exceptions.c:PyExc_RuntimeWarning                        static PyTypeObject PyExc_RuntimeWarning
+Objects/exceptions.c:PyExc_StopAsyncIteration                    static PyTypeObject PyExc_StopAsyncIteration
+Objects/exceptions.c:PyExc_StopIteration                         static PyTypeObject PyExc_StopIteration
+Objects/exceptions.c:PyExc_SyntaxError                           static PyTypeObject PyExc_SyntaxError
+Objects/exceptions.c:PyExc_SyntaxWarning                         static PyTypeObject PyExc_SyntaxWarning
+Objects/exceptions.c:PyExc_SystemError                           static PyTypeObject PyExc_SystemError
+Objects/exceptions.c:PyExc_SystemExit                            static PyTypeObject PyExc_SystemExit
+Objects/exceptions.c:PyExc_TabError                              static PyTypeObject PyExc_TabError
+Objects/exceptions.c:PyExc_TimeoutError                          static PyTypeObject PyExc_TimeoutError
+Objects/exceptions.c:PyExc_TypeError                             static PyTypeObject PyExc_TypeError
+Objects/exceptions.c:PyExc_UnboundLocalError                     static PyTypeObject PyExc_UnboundLocalError
+Objects/exceptions.c:PyExc_UnicodeDecodeError                    static PyTypeObject PyExc_UnicodeDecodeError
+Objects/exceptions.c:PyExc_UnicodeEncodeError                    static PyTypeObject PyExc_UnicodeEncodeError
+Objects/exceptions.c:PyExc_UnicodeError                          static PyTypeObject PyExc_UnicodeError
+Objects/exceptions.c:PyExc_UnicodeTranslateError                 static PyTypeObject PyExc_UnicodeTranslateError
+Objects/exceptions.c:PyExc_UnicodeWarning                        static PyTypeObject PyExc_UnicodeWarning
+Objects/exceptions.c:PyExc_UserWarning                           static PyTypeObject PyExc_UserWarning
+Objects/exceptions.c:PyExc_ValueError                            static PyTypeObject PyExc_ValueError
+Objects/exceptions.c:PyExc_Warning                               static PyTypeObject PyExc_Warning
+Objects/exceptions.c:PyExc_ZeroDivisionError                     static PyTypeObject PyExc_ZeroDivisionError
+Objects/exceptions.c:_PyExc_ArithmeticError                      static PyTypeObject _PyExc_ArithmeticError
+Objects/exceptions.c:_PyExc_AssertionError                       static PyTypeObject _PyExc_AssertionError
+Objects/exceptions.c:_PyExc_AttributeError                       static PyTypeObject _PyExc_AttributeError
+Objects/exceptions.c:_PyExc_BaseException                        static PyTypeObject _PyExc_BaseException
+Objects/exceptions.c:_PyExc_BlockingIOError                      static PyTypeObject _PyExc_BlockingIOError
+Objects/exceptions.c:_PyExc_BrokenPipeError                      static PyTypeObject _PyExc_BrokenPipeError
+Objects/exceptions.c:_PyExc_BufferError                          static PyTypeObject _PyExc_BufferError
+Objects/exceptions.c:_PyExc_BytesWarning                         static PyTypeObject _PyExc_BytesWarning
+Objects/exceptions.c:_PyExc_ChildProcessError                    static PyTypeObject _PyExc_ChildProcessError
+Objects/exceptions.c:_PyExc_ConnectionAbortedError               static PyTypeObject _PyExc_ConnectionAbortedError
+Objects/exceptions.c:_PyExc_ConnectionError                      static PyTypeObject _PyExc_ConnectionError
+Objects/exceptions.c:_PyExc_ConnectionRefusedError               static PyTypeObject _PyExc_ConnectionRefusedError
+Objects/exceptions.c:_PyExc_ConnectionResetError                 static PyTypeObject _PyExc_ConnectionResetError
+Objects/exceptions.c:_PyExc_DeprecationWarning                   static PyTypeObject _PyExc_DeprecationWarning
+Objects/exceptions.c:_PyExc_EOFError                             static PyTypeObject _PyExc_EOFError
+Objects/exceptions.c:_PyExc_Exception                            static PyTypeObject _PyExc_Exception
+Objects/exceptions.c:_PyExc_FileExistsError                      static PyTypeObject _PyExc_FileExistsError
+Objects/exceptions.c:_PyExc_FileNotFoundError                    static PyTypeObject _PyExc_FileNotFoundError
+Objects/exceptions.c:_PyExc_FloatingPointError                   static PyTypeObject _PyExc_FloatingPointError
+Objects/exceptions.c:_PyExc_FutureWarning                        static PyTypeObject _PyExc_FutureWarning
+Objects/exceptions.c:_PyExc_GeneratorExit                        static PyTypeObject _PyExc_GeneratorExit
+Objects/exceptions.c:_PyExc_ImportError                          static PyTypeObject _PyExc_ImportError
+Objects/exceptions.c:_PyExc_ImportWarning                        static PyTypeObject _PyExc_ImportWarning
+Objects/exceptions.c:_PyExc_IndentationError                     static PyTypeObject _PyExc_IndentationError
+Objects/exceptions.c:_PyExc_IndexError                           static PyTypeObject _PyExc_IndexError
+Objects/exceptions.c:_PyExc_InterruptedError                     static PyTypeObject _PyExc_InterruptedError
+Objects/exceptions.c:_PyExc_IsADirectoryError                    static PyTypeObject _PyExc_IsADirectoryError
+Objects/exceptions.c:_PyExc_KeyError                             static PyTypeObject _PyExc_KeyError
+Objects/exceptions.c:_PyExc_KeyboardInterrupt                    static PyTypeObject _PyExc_KeyboardInterrupt
+Objects/exceptions.c:_PyExc_LookupError                          static PyTypeObject _PyExc_LookupError
+Objects/exceptions.c:_PyExc_MemoryError                          static PyTypeObject _PyExc_MemoryError
+Objects/exceptions.c:_PyExc_ModuleNotFoundError                  static PyTypeObject _PyExc_ModuleNotFoundError
+Objects/exceptions.c:_PyExc_NameError                            static PyTypeObject _PyExc_NameError
+Objects/exceptions.c:_PyExc_NotADirectoryError                   static PyTypeObject _PyExc_NotADirectoryError
+Objects/exceptions.c:_PyExc_NotImplementedError                  static PyTypeObject _PyExc_NotImplementedError
+Objects/exceptions.c:_PyExc_OSError                              static PyTypeObject _PyExc_OSError
+Objects/exceptions.c:_PyExc_OverflowError                        static PyTypeObject _PyExc_OverflowError
+Objects/exceptions.c:_PyExc_PendingDeprecationWarning            static PyTypeObject _PyExc_PendingDeprecationWarning
+Objects/exceptions.c:_PyExc_PermissionError                      static PyTypeObject _PyExc_PermissionError
+Objects/exceptions.c:_PyExc_ProcessLookupError                   static PyTypeObject _PyExc_ProcessLookupError
+Objects/exceptions.c:_PyExc_RecursionError                       static PyTypeObject _PyExc_RecursionError
+Objects/exceptions.c:_PyExc_ReferenceError                       static PyTypeObject _PyExc_ReferenceError
+Objects/exceptions.c:_PyExc_ResourceWarning                      static PyTypeObject _PyExc_ResourceWarning
+Objects/exceptions.c:_PyExc_RuntimeError                         static PyTypeObject _PyExc_RuntimeError
+Objects/exceptions.c:_PyExc_RuntimeWarning                       static PyTypeObject _PyExc_RuntimeWarning
+Objects/exceptions.c:_PyExc_StopAsyncIteration                   static PyTypeObject _PyExc_StopAsyncIteration
+Objects/exceptions.c:_PyExc_StopIteration                        static PyTypeObject _PyExc_StopIteration
+Objects/exceptions.c:_PyExc_SyntaxError                          static PyTypeObject _PyExc_SyntaxError
+Objects/exceptions.c:_PyExc_SyntaxWarning                        static PyTypeObject _PyExc_SyntaxWarning
+Objects/exceptions.c:_PyExc_SystemError                          static PyTypeObject _PyExc_SystemError
+Objects/exceptions.c:_PyExc_SystemExit                           static PyTypeObject _PyExc_SystemExit
+Objects/exceptions.c:_PyExc_TabError                             static PyTypeObject _PyExc_TabError
+Objects/exceptions.c:_PyExc_TimeoutError                         static PyTypeObject _PyExc_TimeoutError
+Objects/exceptions.c:_PyExc_TypeError                            static PyTypeObject _PyExc_TypeError
+Objects/exceptions.c:_PyExc_UnboundLocalError                    static PyTypeObject _PyExc_UnboundLocalError
+Objects/exceptions.c:_PyExc_UnicodeDecodeError                   static PyTypeObject _PyExc_UnicodeDecodeError
+Objects/exceptions.c:_PyExc_UnicodeEncodeError                   static PyTypeObject _PyExc_UnicodeEncodeError
+Objects/exceptions.c:_PyExc_UnicodeError                         static PyTypeObject _PyExc_UnicodeError
+Objects/exceptions.c:_PyExc_UnicodeTranslateError                static PyTypeObject _PyExc_UnicodeTranslateError
+Objects/exceptions.c:_PyExc_UnicodeWarning                       static PyTypeObject _PyExc_UnicodeWarning
+Objects/exceptions.c:_PyExc_UserWarning                          static PyTypeObject _PyExc_UserWarning
+Objects/exceptions.c:_PyExc_ValueError                           static PyTypeObject _PyExc_ValueError
+Objects/exceptions.c:_PyExc_Warning                              static PyTypeObject _PyExc_Warning
+Objects/exceptions.c:_PyExc_ZeroDivisionError                    static PyTypeObject _PyExc_ZeroDivisionError
+Objects/fileobject.c:PyStdPrinter_Type                           PyTypeObject PyStdPrinter_Type
+Objects/floatobject.c:FloatInfoType                              static PyTypeObject FloatInfoType
+Objects/floatobject.c:PyFloat_Type                               PyTypeObject PyFloat_Type
+Objects/frameobject.c:PyFrame_Type                               PyTypeObject PyFrame_Type
+Objects/funcobject.c:PyClassMethod_Type                          PyTypeObject PyClassMethod_Type
+Objects/funcobject.c:PyFunction_Type                             PyTypeObject PyFunction_Type
+Objects/funcobject.c:PyStaticMethod_Type                         PyTypeObject PyStaticMethod_Type
+Objects/genobject.c:PyAsyncGen_Type                              PyTypeObject PyAsyncGen_Type
+Objects/genobject.c:PyCoro_Type                                  PyTypeObject PyCoro_Type
+Objects/genobject.c:PyGen_Type                                   PyTypeObject PyGen_Type
+Objects/genobject.c:_PyAsyncGenASend_Type                        PyTypeObject _PyAsyncGenASend_Type
+Objects/genobject.c:_PyAsyncGenAThrow_Type                       PyTypeObject _PyAsyncGenAThrow_Type
+Objects/genobject.c:_PyAsyncGenWrappedValue_Type                 PyTypeObject _PyAsyncGenWrappedValue_Type
+Objects/genobject.c:_PyCoroWrapper_Type                          PyTypeObject _PyCoroWrapper_Type
+Objects/interpreteridobject.c:_PyInterpreterID_Type              PyTypeObject _PyInterpreterID_Type
+Objects/iterobject.c:PyCallIter_Type                             PyTypeObject PyCallIter_Type
+Objects/iterobject.c:PySeqIter_Type                              PyTypeObject PySeqIter_Type
+Objects/listobject.c:PyListIter_Type                             PyTypeObject PyListIter_Type
+Objects/listobject.c:PyListRevIter_Type                          PyTypeObject PyListRevIter_Type
+Objects/listobject.c:PyList_Type                                 PyTypeObject PyList_Type
+Objects/longobject.c:Int_InfoType                                static PyTypeObject Int_InfoType
+Objects/longobject.c:PyLong_Type                                 PyTypeObject PyLong_Type
+Objects/memoryobject.c:PyMemoryView_Type                         PyTypeObject PyMemoryView_Type
+Objects/memoryobject.c:_PyManagedBuffer_Type                     PyTypeObject _PyManagedBuffer_Type
+Objects/methodobject.c:PyCFunction_Type                          PyTypeObject PyCFunction_Type
+Objects/moduleobject.c:PyModuleDef_Type                          PyTypeObject PyModuleDef_Type
+Objects/moduleobject.c:PyModule_Type                             PyTypeObject PyModule_Type
+Objects/namespaceobject.c:_PyNamespace_Type                      PyTypeObject _PyNamespace_Type
+Objects/object.c:_PyNone_Type                                    PyTypeObject _PyNone_Type
+Objects/object.c:_PyNotImplemented_Type                          PyTypeObject _PyNotImplemented_Type
+Objects/odictobject.c:PyODictItems_Type                          PyTypeObject PyODictItems_Type
+Objects/odictobject.c:PyODictIter_Type                           PyTypeObject PyODictIter_Type
+Objects/odictobject.c:PyODictKeys_Type                           PyTypeObject PyODictKeys_Type
+Objects/odictobject.c:PyODictValues_Type                         PyTypeObject PyODictValues_Type
+Objects/odictobject.c:PyODict_Type                               PyTypeObject PyODict_Type
+Objects/picklebufobject.c:PyPickleBuffer_Type                    PyTypeObject PyPickleBuffer_Type
+Objects/rangeobject.c:PyLongRangeIter_Type                       PyTypeObject PyLongRangeIter_Type
+Objects/rangeobject.c:PyRangeIter_Type                           PyTypeObject PyRangeIter_Type
+Objects/rangeobject.c:PyRange_Type                               PyTypeObject PyRange_Type
+Objects/setobject.c:PyFrozenSet_Type                             PyTypeObject PyFrozenSet_Type
+Objects/setobject.c:PySetIter_Type                               PyTypeObject PySetIter_Type
+Objects/setobject.c:PySet_Type                                   PyTypeObject PySet_Type
+Objects/setobject.c:_PySetDummy_Type                             static PyTypeObject _PySetDummy_Type
+Objects/sliceobject.c:PyEllipsis_Type                            PyTypeObject PyEllipsis_Type
+Objects/sliceobject.c:PySlice_Type                               PyTypeObject PySlice_Type
+Objects/stringlib/unicode_format.h:PyFieldNameIter_Type          static PyTypeObject PyFieldNameIter_Type
+Objects/stringlib/unicode_format.h:PyFormatterIter_Type          static PyTypeObject PyFormatterIter_Type
+Objects/tupleobject.c:PyTupleIter_Type                           PyTypeObject PyTupleIter_Type
+Objects/tupleobject.c:PyTuple_Type                               PyTypeObject PyTuple_Type
+Objects/typeobject.c:PyBaseObject_Type                           PyTypeObject PyBaseObject_Type
+Objects/typeobject.c:PySuper_Type                                PyTypeObject PySuper_Type
+Objects/typeobject.c:PyType_Type                                 PyTypeObject PyType_Type
+Objects/unicodeobject.c:EncodingMapType                          static PyTypeObject EncodingMapType
+Objects/unicodeobject.c:PyUnicodeIter_Type                       PyTypeObject PyUnicodeIter_Type
+Objects/unicodeobject.c:PyUnicode_Type                           PyTypeObject PyUnicode_Type
+Objects/weakrefobject.c:_PyWeakref_CallableProxyType             PyTypeObject _PyWeakref_CallableProxyType
+Objects/weakrefobject.c:_PyWeakref_ProxyType                     PyTypeObject _PyWeakref_ProxyType
+Objects/weakrefobject.c:_PyWeakref_RefType                       PyTypeObject _PyWeakref_RefType
+Python/bltinmodule.c:PyFilter_Type                               PyTypeObject PyFilter_Type
+Python/bltinmodule.c:PyMap_Type                                  PyTypeObject PyMap_Type
+Python/bltinmodule.c:PyZip_Type                                  PyTypeObject PyZip_Type
+Python/context.c:PyContextTokenMissing_Type                      PyTypeObject PyContextTokenMissing_Type
+Python/context.c:PyContextToken_Type                             PyTypeObject PyContextToken_Type
+Python/context.c:PyContextVar_Type                               PyTypeObject PyContextVar_Type
+Python/context.c:PyContext_Type                                  PyTypeObject PyContext_Type
+Python/errors.c:UnraisableHookArgsType                           static PyTypeObject UnraisableHookArgsType
+Python/hamt.c:_PyHamtItems_Type                                  PyTypeObject _PyHamtItems_Type
+Python/hamt.c:_PyHamtKeys_Type                                   PyTypeObject _PyHamtKeys_Type
+Python/hamt.c:_PyHamtValues_Type                                 PyTypeObject _PyHamtValues_Type
+Python/hamt.c:_PyHamt_ArrayNode_Type                             PyTypeObject _PyHamt_ArrayNode_Type
+Python/hamt.c:_PyHamt_BitmapNode_Type                            PyTypeObject _PyHamt_BitmapNode_Type
+Python/hamt.c:_PyHamt_CollisionNode_Type                         PyTypeObject _PyHamt_CollisionNode_Type
+Python/hamt.c:_PyHamt_Type                                       PyTypeObject _PyHamt_Type
+Python/symtable.c:PySTEntry_Type                                 PyTypeObject PySTEntry_Type
+Python/sysmodule.c:AsyncGenHooksType                             static PyTypeObject AsyncGenHooksType
+Python/sysmodule.c:FlagsType                                     static PyTypeObject FlagsType
+Python/sysmodule.c:Hash_InfoType                                 static PyTypeObject Hash_InfoType
+Python/sysmodule.c:VersionInfoType                               static PyTypeObject VersionInfoType
+Python/thread.c:ThreadInfoType                                   static PyTypeObject ThreadInfoType
+Python/traceback.c:PyTraceBack_Type                              PyTypeObject PyTraceBack_Type
+
+
+# _PyArg_Parser (147)
+Modules/_blake2/clinic/blake2b_impl.c.h:py_blake2b_new():_parser static _PyArg_Parser _parser
+Modules/_blake2/clinic/blake2s_impl.c.h:py_blake2s_new():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/_iomodule.c.h:_io_open():_parser              static _PyArg_Parser _parser
+Modules/_io/clinic/_iomodule.c.h:_io_open_code():_parser         static _PyArg_Parser _parser
+Modules/_io/clinic/bufferedio.c.h:_io_BufferedRandom___init__():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/bufferedio.c.h:_io_BufferedReader___init__():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/bufferedio.c.h:_io_BufferedWriter___init__():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/bytesio.c.h:_io_BytesIO___init__():_parser    static _PyArg_Parser _parser
+Modules/_io/clinic/fileio.c.h:_io_FileIO___init__():_parser      static _PyArg_Parser _parser
+Modules/_io/clinic/stringio.c.h:_io_StringIO___init__():_parser  static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h:_io_IncrementalNewlineDecoder___init__():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h:_io_IncrementalNewlineDecoder_decode():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h:_io_TextIOWrapper___init__():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h:_io_TextIOWrapper_reconfigure():_parser static _PyArg_Parser _parser
+Modules/_io/clinic/winconsoleio.c.h:_io__WindowsConsoleIO___init__():_parser static _PyArg_Parser _parser
+Modules/_multiprocessing/clinic/posixshmem.c.h:_posixshmem_shm_open():_parser static _PyArg_Parser _parser
+Modules/_multiprocessing/clinic/posixshmem.c.h:_posixshmem_shm_unlink():_parser static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h:_multibytecodec_MultibyteCodec_decode():_parser static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h:_multibytecodec_MultibyteCodec_encode():_parser static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h:_multibytecodec_MultibyteIncrementalDecoder_decode():_parser static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h:_multibytecodec_MultibyteIncrementalEncoder_encode():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Future___init__():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Future_add_done_callback():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Task___init__():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Task_all_tasks():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Task_current_task():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Task_get_stack():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio_Task_print_stack():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio__enter_task():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio__leave_task():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio__register_task():_parser static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h:_asyncio__unregister_task():_parser static _PyArg_Parser _parser
+Modules/clinic/_bz2module.c.h:_bz2_BZ2Decompressor_decompress():_parser static _PyArg_Parser _parser
+Modules/clinic/_codecsmodule.c.h:_codecs_decode():_parser        static _PyArg_Parser _parser
+Modules/clinic/_codecsmodule.c.h:_codecs_encode():_parser        static _PyArg_Parser _parser
+Modules/clinic/_cursesmodule.c.h:_curses_setupterm():_parser     static _PyArg_Parser _parser
+Modules/clinic/_datetimemodule.c.h:datetime_datetime_now():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_find():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_findall():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_findtext():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_get():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_getiterator():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_iter():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_Element_iterfind():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_TreeBuilder___init__():_parser static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h:_elementtree_XMLParser___init__():_parser static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h:EVP_new():_parser                static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h:_hashlib_hmac_digest():_parser   static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h:_hashlib_scrypt():_parser        static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h:pbkdf2_hmac():_parser            static _PyArg_Parser _parser
+Modules/clinic/_lzmamodule.c.h:_lzma_LZMADecompressor___init__():_parser static _PyArg_Parser _parser
+Modules/clinic/_lzmamodule.c.h:_lzma_LZMADecompressor_decompress():_parser static _PyArg_Parser _parser
+Modules/clinic/_opcode.c.h:_opcode_stack_effect():_parser        static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h:_pickle_Pickler___init__():_parser    static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h:_pickle_Unpickler___init__():_parser  static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h:_pickle_dump():_parser                static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h:_pickle_dumps():_parser               static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h:_pickle_load():_parser                static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h:_pickle_loads():_parser               static _PyArg_Parser _parser
+Modules/clinic/_queuemodule.c.h:_queue_SimpleQueue_get():_parser static _PyArg_Parser _parser
+Modules/clinic/_queuemodule.c.h:_queue_SimpleQueue_put():_parser static _PyArg_Parser _parser
+Modules/clinic/_queuemodule.c.h:_queue_SimpleQueue_put_nowait():_parser static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Match_expand():_parser          static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Match_groupdict():_parser       static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Match_groups():_parser          static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_findall():_parser       static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_finditer():_parser      static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_fullmatch():_parser     static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_match():_parser         static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_scanner():_parser       static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_search():_parser        static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_split():_parser         static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_sub():_parser           static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_SRE_Pattern_subn():_parser          static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h:_sre_compile():_parser                   static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl__SSLContext__wrap_bio():_parser     static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl__SSLContext__wrap_socket():_parser  static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl__SSLContext_get_ca_certs():_parser  static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl__SSLContext_load_cert_chain():_parser static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl__SSLContext_load_verify_locations():_parser static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl__SSLSocket_get_channel_binding():_parser static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl_enum_certificates():_parser         static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl_enum_crls():_parser                 static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h:_ssl_txt2obj():_parser                   static _PyArg_Parser _parser
+Modules/clinic/_struct.c.h:Struct___init__():_parser             static _PyArg_Parser _parser
+Modules/clinic/_struct.c.h:Struct_unpack_from():_parser          static _PyArg_Parser _parser
+Modules/clinic/_struct.c.h:unpack_from():_parser                 static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h:_winapi_ConnectNamedPipe():_parser    static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h:_winapi_GetFileType():_parser         static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h:_winapi_ReadFile():_parser            static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h:_winapi_WriteFile():_parser           static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h:binascii_a2b_qp():_parser            static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h:binascii_b2a_base64():_parser        static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h:binascii_b2a_hex():_parser           static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h:binascii_b2a_qp():_parser            static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h:binascii_b2a_uu():_parser            static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h:binascii_hexlify():_parser           static _PyArg_Parser _parser
+Modules/clinic/cmathmodule.c.h:cmath_isclose():_parser           static _PyArg_Parser _parser
+Modules/clinic/gcmodule.c.h:gc_collect():_parser                 static _PyArg_Parser _parser
+Modules/clinic/gcmodule.c.h:gc_get_objects():_parser             static _PyArg_Parser _parser
+Modules/clinic/grpmodule.c.h:grp_getgrgid():_parser              static _PyArg_Parser _parser
+Modules/clinic/grpmodule.c.h:grp_getgrnam():_parser              static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h:bytearray_decode():_parser    static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h:bytearray_hex():_parser       static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h:bytearray_rsplit():_parser    static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h:bytearray_split():_parser     static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h:bytearray_splitlines():_parser static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h:bytearray_translate():_parser static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h:bytes_decode():_parser            static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h:bytes_hex():_parser               static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h:bytes_rsplit():_parser            static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h:bytes_split():_parser             static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h:bytes_splitlines():_parser        static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h:bytes_translate():_parser         static _PyArg_Parser _parser
+Objects/clinic/codeobject.c.h:code_replace():_parser             static _PyArg_Parser _parser
+Objects/clinic/complexobject.c.h:complex_new():_parser           static _PyArg_Parser _parser
+Objects/clinic/descrobject.c.h:mappingproxy_new():_parser        static _PyArg_Parser _parser
+Objects/clinic/descrobject.c.h:property_init():_parser           static _PyArg_Parser _parser
+Objects/clinic/enumobject.c.h:enum_new():_parser                 static _PyArg_Parser _parser
+Objects/clinic/funcobject.c.h:func_new():_parser                 static _PyArg_Parser _parser
+Objects/clinic/listobject.c.h:list_sort():_parser                static _PyArg_Parser _parser
+Objects/clinic/longobject.c.h:int_from_bytes():_parser           static _PyArg_Parser _parser
+Objects/clinic/longobject.c.h:int_to_bytes():_parser             static _PyArg_Parser _parser
+Objects/clinic/longobject.c.h:long_new():_parser                 static _PyArg_Parser _parser
+Objects/clinic/memoryobject.c.h:memoryview_hex():_parser         static _PyArg_Parser _parser
+Objects/clinic/moduleobject.c.h:module___init__():_parser        static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h:OrderedDict_fromkeys():_parser    static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h:OrderedDict_move_to_end():_parser static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h:OrderedDict_popitem():_parser     static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h:OrderedDict_setdefault():_parser  static _PyArg_Parser _parser
+Objects/clinic/structseq.c.h:structseq_new():_parser             static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h:unicode_encode():_parser        static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h:unicode_expandtabs():_parser    static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h:unicode_rsplit():_parser        static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h:unicode_split():_parser         static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h:unicode_splitlines():_parser    static _PyArg_Parser _parser
+Objects/stringlib/clinic/transmogrify.h.h:stringlib_expandtabs():_parser static _PyArg_Parser _parser
+Python/bltinmodule.c:builtin_print():_parser                     static struct _PyArg_Parser _parser
+Python/clinic/_warnings.c.h:warnings_warn():_parser              static _PyArg_Parser _parser
+Python/clinic/bltinmodule.c.h:builtin_compile():_parser          static _PyArg_Parser _parser
+Python/clinic/bltinmodule.c.h:builtin_round():_parser            static _PyArg_Parser _parser
+Python/clinic/bltinmodule.c.h:builtin_sum():_parser              static _PyArg_Parser _parser
+Python/clinic/import.c.h:_imp_source_hash():_parser              static _PyArg_Parser _parser
+Python/clinic/sysmodule.c.h:sys_addaudithook():_parser           static _PyArg_Parser _parser
+Python/clinic/sysmodule.c.h:sys_set_coroutine_origin_tracking_depth():_parser static _PyArg_Parser _parser
+Python/clinic/traceback.c.h:tb_new():_parser                     static _PyArg_Parser _parser
diff --git a/Tools/c-analyzer/c-globals.py b/Tools/c-analyzer/c-globals.py
new file mode 100644
index 0000000..b36b791
--- /dev/null
+++ b/Tools/c-analyzer/c-globals.py
@@ -0,0 +1,9 @@
+# This is a script equivalent of running "python -m test.test_c_globals.cg".
+
+from cpython.__main__ import parse_args, main
+
+
+# This is effectively copied from cg/__main__.py:
+if __name__ == '__main__':
+    cmd, cmdkwargs = parse_args()
+    main(cmd, cmdkwargs)
diff --git a/Tools/c-analyzer/c_analyzer/__init__.py b/Tools/c-analyzer/c_analyzer/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/__init__.py
diff --git a/Tools/c-analyzer/c_analyzer/common/__init__.py b/Tools/c-analyzer/c_analyzer/common/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/common/__init__.py
diff --git a/Tools/c-analyzer/c_analyzer/common/files.py b/Tools/c-analyzer/c_analyzer/common/files.py
new file mode 100644
index 0000000..a8a0447
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/common/files.py
@@ -0,0 +1,124 @@
+import glob
+import os
+import os.path
+
+# XXX need tests:
+# * walk_tree()
+# * glob_tree()
+# * iter_files_by_suffix()
+
+
+C_SOURCE_SUFFIXES = ('.c', '.h')
+
+
+def _walk_tree(root, *,
+               _walk=os.walk,
+               ):
+    # A wrapper around os.walk that resolves the filenames.
+    for parent, _, names in _walk(root):
+        for name in names:
+            yield os.path.join(parent, name)
+
+
+def walk_tree(root, *,
+              suffix=None,
+              walk=_walk_tree,
+              ):
+    """Yield each file in the tree under the given directory name.
+
+    If "suffix" is provided then only files with that suffix will
+    be included.
+    """
+    if suffix and not isinstance(suffix, str):
+        raise ValueError('suffix must be a string')
+
+    for filename in walk(root):
+        if suffix and not filename.endswith(suffix):
+            continue
+        yield filename
+
+
+def glob_tree(root, *,
+              suffix=None,
+              _glob=glob.iglob,
+              _escape=glob.escape,
+              _join=os.path.join,
+              ):
+    """Yield each file in the tree under the given directory name.
+
+    If "suffix" is provided then only files with that suffix will
+    be included.
+    """
+    suffix = suffix or ''
+    if not isinstance(suffix, str):
+        raise ValueError('suffix must be a string')
+
+    for filename in _glob(_join(_escape(root), f'*{suffix}')):
+        yield filename
+    for filename in _glob(_join(_escape(root), f'**/*{suffix}')):
+        yield filename
+
+
+def iter_files(root, suffix=None, relparent=None, *,
+               get_files=None,
+               _glob=glob_tree,
+               _walk=walk_tree,
+               ):
+    """Yield each file in the tree under the given directory name.
+
+    If "root" is a non-string iterable then do the same for each of
+    those trees.
+
+    If "suffix" is provided then only files with that suffix will
+    be included.
+
+    if "relparent" is provided then it is used to resolve each
+    filename as a relative path.
+    """
+    if get_files is None:
+        get_files = os.walk
+    if not isinstance(root, str):
+        roots = root
+        for root in roots:
+            yield from iter_files(root, suffix, relparent,
+                                  get_files=get_files,
+                                  _glob=_glob, _walk=_walk)
+        return
+
+    # Use the right "walk" function.
+    if get_files in (glob.glob, glob.iglob, glob_tree):
+        get_files = _glob
+    else:
+        _files = _walk_tree if get_files in (os.walk, walk_tree) else get_files
+        get_files = (lambda *a, **k: _walk(*a, walk=_files, **k))
+
+    # Handle a single suffix.
+    if suffix and not isinstance(suffix, str):
+        filenames = get_files(root)
+        suffix = tuple(suffix)
+    else:
+        filenames = get_files(root, suffix=suffix)
+        suffix = None
+
+    for filename in filenames:
+        if suffix and not isinstance(suffix, str):  # multiple suffixes
+            if not filename.endswith(suffix):
+                continue
+        if relparent:
+            filename = os.path.relpath(filename, relparent)
+        yield filename
+
+
+def iter_files_by_suffix(root, suffixes, relparent=None, *,
+                         walk=walk_tree,
+                         _iter_files=iter_files,
+                         ):
+    """Yield each file in the tree that has the given suffixes.
+
+    Unlike iter_files(), the results are in the original suffix order.
+    """
+    if isinstance(suffixes, str):
+        suffixes = [suffixes]
+    # XXX Ignore repeated suffixes?
+    for suffix in suffixes:
+        yield from _iter_files(root, suffix, relparent)
diff --git a/Tools/c-analyzer/c_analyzer/common/info.py b/Tools/c-analyzer/c_analyzer/common/info.py
new file mode 100644
index 0000000..3f3f8c5
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/common/info.py
@@ -0,0 +1,138 @@
+from collections import namedtuple
+import re
+
+from .util import classonly, _NTBase
+
+# XXX need tests:
+# * ID.match()
+
+
+UNKNOWN = '???'
+
+NAME_RE = re.compile(r'^([a-zA-Z]|_\w*[a-zA-Z]\w*|[a-zA-Z]\w*)$')
+
+
+class ID(_NTBase, namedtuple('ID', 'filename funcname name')):
+    """A unique ID for a single symbol or declaration."""
+
+    __slots__ = ()
+    # XXX Add optional conditions (tuple of strings) field.
+    #conditions = Slot()
+
+    @classonly
+    def from_raw(cls, raw):
+        if not raw:
+            return None
+        if isinstance(raw, str):
+            return cls(None, None, raw)
+        try:
+            name, = raw
+            filename = None
+        except ValueError:
+            try:
+                filename, name = raw
+            except ValueError:
+                return super().from_raw(raw)
+        return cls(filename, None, name)
+
+    def __new__(cls, filename, funcname, name):
+        self = super().__new__(
+                cls,
+                filename=str(filename) if filename else None,
+                funcname=str(funcname) if funcname else None,
+                name=str(name) if name else None,
+                )
+        #cls.conditions.set(self, tuple(str(s) if s else None
+        #                               for s in conditions or ()))
+        return self
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        if not self.name:
+            raise TypeError('missing name')
+        else:
+            if not NAME_RE.match(self.name):
+                raise ValueError(
+                        f'name must be an identifier, got {self.name!r}')
+
+        # Symbols from a binary might not have filename/funcname info.
+
+        if self.funcname:
+            if not self.filename:
+                raise TypeError('missing filename')
+            if not NAME_RE.match(self.funcname) and self.funcname != UNKNOWN:
+                raise ValueError(
+                        f'name must be an identifier, got {self.funcname!r}')
+
+        # XXX Require the filename (at least UNKONWN)?
+        # XXX Check the filename?
+
+    @property
+    def islocal(self):
+        return self.funcname is not None
+
+    def match(self, other, *,
+              match_files=(lambda f1, f2: f1 == f2),
+              ):
+        """Return True if the two match.
+
+        At least one of the two must be completely valid (no UNKNOWN
+        anywhere).  Otherwise False is returned.  The remaining one
+        *may* have UNKNOWN for both funcname and filename.  It must
+        have a valid name though.
+
+        The caller is responsible for knowing which of the two is valid
+        (and which to use if both are valid).
+        """
+        # First check the name.
+        if self.name is None:
+            return False
+        if other.name != self.name:
+            return False
+
+        # Then check the filename.
+        if self.filename is None:
+            return False
+        if other.filename is None:
+            return False
+        if self.filename == UNKNOWN:
+            # "other" must be the valid one.
+            if other.funcname == UNKNOWN:
+                return False
+            elif self.funcname != UNKNOWN:
+                # XXX Try matching funcname even though we don't
+                # know the filename?
+                raise NotImplementedError
+            else:
+                return True
+        elif other.filename == UNKNOWN:
+            # "self" must be the valid one.
+            if self.funcname == UNKNOWN:
+                return False
+            elif other.funcname != UNKNOWN:
+                # XXX Try matching funcname even though we don't
+                # know the filename?
+                raise NotImplementedError
+            else:
+                return True
+        elif not match_files(self.filename, other.filename):
+            return False
+
+        # Finally, check the funcname.
+        if self.funcname == UNKNOWN:
+            # "other" must be the valid one.
+            if other.funcname == UNKNOWN:
+                return False
+            else:
+                return other.funcname is not None
+        elif other.funcname == UNKNOWN:
+            # "self" must be the valid one.
+            if self.funcname == UNKNOWN:
+                return False
+            else:
+                return self.funcname is not None
+        elif self.funcname == other.funcname:
+            # Both are valid.
+            return True
+
+        return False
diff --git a/Tools/c-analyzer/c_analyzer/common/show.py b/Tools/c-analyzer/c_analyzer/common/show.py
new file mode 100644
index 0000000..5f3cb1c
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/common/show.py
@@ -0,0 +1,11 @@
+
+def basic(variables, *,
+          _print=print):
+    """Print each row simply."""
+    for var in variables:
+        if var.funcname:
+            line = f'{var.filename}:{var.funcname}():{var.name}'
+        else:
+            line = f'{var.filename}:{var.name}'
+        line = f'{line:<64} {var.vartype}'
+        _print(line)
diff --git a/Tools/c-analyzer/c_analyzer/common/util.py b/Tools/c-analyzer/c_analyzer/common/util.py
new file mode 100644
index 0000000..43d0bb6
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/common/util.py
@@ -0,0 +1,243 @@
+import csv
+import subprocess
+
+
+_NOT_SET = object()
+
+
+def run_cmd(argv, **kwargs):
+    proc = subprocess.run(
+            argv,
+            #capture_output=True,
+            #stderr=subprocess.STDOUT,
+            stdout=subprocess.PIPE,
+            text=True,
+            check=True,
+            **kwargs
+            )
+    return proc.stdout
+
+
+def read_tsv(infile, header, *,
+             _open=open,
+             _get_reader=csv.reader,
+             ):
+    """Yield each row of the given TSV (tab-separated) file."""
+    if isinstance(infile, str):
+        with _open(infile, newline='') as infile:
+            yield from read_tsv(infile, header,
+                                _open=_open,
+                                _get_reader=_get_reader,
+                                )
+            return
+    lines = iter(infile)
+
+    # Validate the header.
+    try:
+        actualheader = next(lines).strip()
+    except StopIteration:
+        actualheader = ''
+    if actualheader != header:
+        raise ValueError(f'bad header {actualheader!r}')
+
+    for row in _get_reader(lines, delimiter='\t'):
+        yield tuple(v.strip() for v in row)
+
+
+def write_tsv(outfile, header, rows, *,
+             _open=open,
+             _get_writer=csv.writer,
+             ):
+    """Write each of the rows to the given TSV (tab-separated) file."""
+    if isinstance(outfile, str):
+        with _open(outfile, 'w', newline='') as outfile:
+            return write_tsv(outfile, header, rows,
+                            _open=_open,
+                            _get_writer=_get_writer,
+                            )
+
+    if isinstance(header, str):
+        header = header.split('\t')
+    writer = _get_writer(outfile, delimiter='\t')
+    writer.writerow(header)
+    for row in rows:
+        writer.writerow('' if v is None else str(v)
+                        for v in row)
+
+
+class Slot:
+    """A descriptor that provides a slot.
+
+    This is useful for types that can't have slots via __slots__,
+    e.g. tuple subclasses.
+    """
+
+    __slots__ = ('initial', 'default', 'readonly', 'instances', 'name')
+
+    def __init__(self, initial=_NOT_SET, *,
+                 default=_NOT_SET,
+                 readonly=False,
+                 ):
+        self.initial = initial
+        self.default = default
+        self.readonly = readonly
+
+        # The instance cache is not inherently tied to the normal
+        # lifetime of the instances.  So must do something in order to
+        # avoid keeping the instances alive by holding a reference here.
+        # Ideally we would use weakref.WeakValueDictionary to do this.
+        # However, most builtin types do not support weakrefs.  So
+        # instead we monkey-patch __del__ on the attached class to clear
+        # the instance.
+        self.instances = {}
+        self.name = None
+
+    def __set_name__(self, cls, name):
+        if self.name is not None:
+            raise TypeError('already used')
+        self.name = name
+        try:
+            slotnames = cls.__slot_names__
+        except AttributeError:
+            slotnames = cls.__slot_names__ = []
+        slotnames.append(name)
+        self._ensure___del__(cls, slotnames)
+
+    def __get__(self, obj, cls):
+        if obj is None:  # called on the class
+            return self
+        try:
+            value = self.instances[id(obj)]
+        except KeyError:
+            if self.initial is _NOT_SET:
+                value = self.default
+            else:
+                value = self.initial
+            self.instances[id(obj)] = value
+        if value is _NOT_SET:
+            raise AttributeError(self.name)
+        # XXX Optionally make a copy?
+        return value
+
+    def __set__(self, obj, value):
+        if self.readonly:
+            raise AttributeError(f'{self.name} is readonly')
+        # XXX Optionally coerce?
+        self.instances[id(obj)] = value
+
+    def __delete__(self, obj):
+        if self.readonly:
+            raise AttributeError(f'{self.name} is readonly')
+        self.instances[id(obj)] = self.default  # XXX refleak?
+
+    def _ensure___del__(self, cls, slotnames):  # See the comment in __init__().
+        try:
+            old___del__ = cls.__del__
+        except AttributeError:
+            old___del__ = (lambda s: None)
+        else:
+            if getattr(old___del__, '_slotted', False):
+                return
+
+        def __del__(_self):
+            for name in slotnames:
+                delattr(_self, name)
+            old___del__(_self)
+        __del__._slotted = True
+        cls.__del__ = __del__
+
+    def set(self, obj, value):
+        """Update the cached value for an object.
+
+        This works even if the descriptor is read-only.  This is
+        particularly useful when initializing the object (e.g. in
+        its __new__ or __init__).
+        """
+        self.instances[id(obj)] = value
+
+
+class classonly:
+    """A non-data descriptor that makes a value only visible on the class.
+
+    This is like the "classmethod" builtin, but does not show up on
+    instances of the class.  It may be used as a decorator.
+    """
+
+    def __init__(self, value):
+        self.value = value
+        self.getter = classmethod(value).__get__
+        self.name = None
+
+    def __set_name__(self, cls, name):
+        if self.name is not None:
+            raise TypeError('already used')
+        self.name = name
+
+    def __get__(self, obj, cls):
+        if obj is not None:
+            raise AttributeError(self.name)
+        # called on the class
+        return self.getter(None, cls)
+
+
+class _NTBase:
+
+    __slots__ = ()
+
+    @classonly
+    def from_raw(cls, raw):
+        if not raw:
+            return None
+        elif isinstance(raw, cls):
+            return raw
+        elif isinstance(raw, str):
+            return cls.from_string(raw)
+        else:
+            if hasattr(raw, 'items'):
+                return cls(**raw)
+            try:
+                args = tuple(raw)
+            except TypeError:
+                pass
+            else:
+                return cls(*args)
+        raise NotImplementedError
+
+    @classonly
+    def from_string(cls, value):
+        """Return a new instance based on the given string."""
+        raise NotImplementedError
+
+    @classmethod
+    def _make(cls, iterable):  # The default _make() is not subclass-friendly.
+        return cls.__new__(cls, *iterable)
+
+    # XXX Always validate?
+    #def __init__(self, *args, **kwargs):
+    #    self.validate()
+
+    # XXX The default __repr__() is not subclass-friendly (where the name changes).
+    #def __repr__(self):
+    #    _, _, sig = super().__repr__().partition('(')
+    #    return f'{self.__class__.__name__}({sig}'
+
+    # To make sorting work with None:
+    def __lt__(self, other):
+        try:
+            return super().__lt__(other)
+        except TypeError:
+            if None in self:
+                return True
+            elif None in other:
+                return False
+            else:
+                raise
+
+    def validate(self):
+        return
+
+    # XXX Always validate?
+    #def _replace(self, **kwargs):
+    #    obj = super()._replace(**kwargs)
+    #    obj.validate()
+    #    return obj
diff --git a/Tools/c-analyzer/c_analyzer/parser/__init__.py b/Tools/c-analyzer/c_analyzer/parser/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/parser/__init__.py
diff --git a/Tools/c-analyzer/c_analyzer/parser/declarations.py b/Tools/c-analyzer/c_analyzer/parser/declarations.py
new file mode 100644
index 0000000..f37072c
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/parser/declarations.py
@@ -0,0 +1,339 @@
+import re
+import shlex
+import subprocess
+
+from ..common.info import UNKNOWN
+
+from . import source
+
+
+IDENTIFIER = r'(?:[a-zA-z]|_+[a-zA-Z0-9]\w*)'
+
+TYPE_QUAL = r'(?:const|volatile)'
+
+VAR_TYPE_SPEC = r'''(?:
+        void |
+        (?:
+         (?:(?:un)?signed\s+)?
+         (?:
+          char |
+          short |
+          int |
+          long |
+          long\s+int |
+          long\s+long
+          ) |
+         ) |
+        float |
+        double |
+        {IDENTIFIER} |
+        (?:struct|union)\s+{IDENTIFIER}
+        )'''
+
+POINTER = rf'''(?:
+        (?:\s+const)?\s*[*]
+        )'''
+
+#STRUCT = r'''(?:
+#        (?:struct|(struct\s+%s))\s*[{]
+#            [^}]*
+#        [}]
+#        )''' % (IDENTIFIER)
+#UNION = r'''(?:
+#        (?:union|(union\s+%s))\s*[{]
+#            [^}]*
+#        [}]
+#        )''' % (IDENTIFIER)
+#DECL_SPEC = rf'''(?:
+#        ({VAR_TYPE_SPEC}) |
+#        ({STRUCT}) |
+#        ({UNION})
+#        )'''
+
+FUNC_START = rf'''(?:
+        (?:
+          (?:
+            extern |
+            static |
+            static\s+inline
+           )\s+
+         )?
+        #(?:const\s+)?
+        {VAR_TYPE_SPEC}
+        )'''
+#GLOBAL_VAR_START = rf'''(?:
+#        (?:
+#          (?:
+#            extern |
+#            static
+#           )\s+
+#         )?
+#        (?:
+#           {TYPE_QUAL}
+#           (?:\s+{TYPE_QUAL})?
+#         )?\s+
+#        {VAR_TYPE_SPEC}
+#        )'''
+GLOBAL_DECL_START_RE = re.compile(rf'''
+        ^
+        (?:
+            ({FUNC_START})
+         )
+        ''', re.VERBOSE)
+
+LOCAL_VAR_START = rf'''(?:
+        (?:
+          (?:
+            register |
+            static
+           )\s+
+         )?
+        (?:
+          (?:
+            {TYPE_QUAL}
+            (?:\s+{TYPE_QUAL})?
+           )\s+
+         )?
+        {VAR_TYPE_SPEC}
+        {POINTER}?
+        )'''
+LOCAL_STMT_START_RE = re.compile(rf'''
+        ^
+        (?:
+            ({LOCAL_VAR_START})
+         )
+        ''', re.VERBOSE)
+
+
+def iter_global_declarations(lines):
+    """Yield (decl, body) for each global declaration in the given lines.
+
+    For function definitions the header is reduced to one line and
+    the body is provided as-is.  For other compound declarations (e.g.
+    struct) the entire declaration is reduced to one line and "body"
+    is None.  Likewise for simple declarations (e.g. variables).
+
+    Declarations inside function bodies are ignored, though their text
+    is provided in the function body.
+    """
+    # XXX Bail out upon bogus syntax.
+    lines = source.iter_clean_lines(lines)
+    for line in lines:
+        if not GLOBAL_DECL_START_RE.match(line):
+            continue
+        # We only need functions here, since we only need locals for now.
+        if line.endswith(';'):
+            continue
+        if line.endswith('{') and '(' not in line:
+            continue
+
+        # Capture the function.
+        # (assume no func is a one-liner)
+        decl = line
+        while '{' not in line:  # assume no inline structs, etc.
+            try:
+                line = next(lines)
+            except StopIteration:
+                return
+            decl += ' ' + line
+
+        body, end = _extract_block(lines)
+        if end is None:
+            return
+        assert end == '}'
+        yield (f'{decl}\n{body}\n{end}', body)
+
+
+def iter_local_statements(lines):
+    """Yield (lines, blocks) for each statement in the given lines.
+
+    For simple statements, "blocks" is None and the statement is reduced
+    to a single line.  For compound statements, "blocks" is a pair of
+    (header, body) for each block in the statement.  The headers are
+    reduced to a single line each, but the bpdies are provided as-is.
+    """
+    # XXX Bail out upon bogus syntax.
+    lines = source.iter_clean_lines(lines)
+    for line in lines:
+        if not LOCAL_STMT_START_RE.match(line):
+            continue
+
+        stmt = line
+        blocks = None
+        if not line.endswith(';'):
+            # XXX Support compound & multiline simple statements.
+            #blocks = []
+            continue
+
+        yield (stmt, blocks)
+
+
+def _extract_block(lines):
+    end = None
+    depth = 1
+    body = []
+    for line in lines:
+        depth += line.count('{') - line.count('}')
+        if depth == 0:
+            end = line
+            break
+        body.append(line)
+    return '\n'.join(body), end
+
+
+def parse_func(stmt, body):
+    """Return (name, signature) for the given function definition."""
+    header, _, end = stmt.partition(body)
+    assert end.strip() == '}'
+    assert header.strip().endswith('{')
+    header, _, _= header.rpartition('{')
+
+    signature = ' '.join(header.strip().splitlines())
+
+    _, _, name = signature.split('(')[0].strip().rpartition(' ')
+    assert name
+
+    return name, signature
+
+
+#TYPE_SPEC = rf'''(?:
+#        )'''
+#VAR_DECLARATOR = rf'''(?:
+#        )'''
+#VAR_DECL = rf'''(?:
+#            {TYPE_SPEC}+
+#            {VAR_DECLARATOR}
+#            \s*
+#        )'''
+#VAR_DECLARATION = rf'''(?:
+#            {VAR_DECL}
+#            (?: = [^=] [^;]* )?
+#            ;
+#        )'''
+#
+#
+#def parse_variable(decl, *, inFunc=False):
+#    """Return [(name, storage, vartype)] for the given variable declaration."""
+#    ...
+
+
+def _parse_var(stmt):
+    """Return (name, vartype) for the given variable declaration."""
+    stmt = stmt.rstrip(';')
+    m = LOCAL_STMT_START_RE.match(stmt)
+    assert m
+    vartype = m.group(0)
+    name = stmt[len(vartype):].partition('=')[0].strip()
+
+    if name.startswith('('):
+        name, _, after = name[1:].partition(')')
+        assert after
+        name = name.replace('*', '* ')
+        inside, _, name = name.strip().rpartition(' ')
+        vartype = f'{vartype} ({inside.strip()}){after}'
+    else:
+        name = name.replace('*', '* ')
+        before, _, name = name.rpartition(' ')
+        vartype = f'{vartype} {before}'
+
+    vartype = vartype.strip()
+    while '  ' in vartype:
+        vartype = vartype.replace('  ', ' ')
+
+    return name, vartype
+
+
+def extract_storage(decl, *, infunc=None):
+    """Return (storage, vartype) based on the given declaration.
+
+    The default storage is "implicit" (or "local" if infunc is True).
+    """
+    if decl == UNKNOWN:
+        return decl
+    if decl.startswith('static '):
+        return 'static'
+        #return 'static', decl.partition(' ')[2].strip()
+    elif decl.startswith('extern '):
+        return 'extern'
+        #return 'extern', decl.partition(' ')[2].strip()
+    elif re.match('.*\b(static|extern)\b', decl):
+        raise NotImplementedError
+    elif infunc:
+        return 'local'
+    else:
+        return 'implicit'
+
+
+def parse_compound(stmt, blocks):
+    """Return (headers, bodies) for the given compound statement."""
+    # XXX Identify declarations inside compound statements
+    # (if/switch/for/while).
+    raise NotImplementedError
+
+
+def iter_variables(filename, *,
+                   preprocessed=False,
+                   _iter_source_lines=source.iter_lines,
+                   _iter_global=iter_global_declarations,
+                   _iter_local=iter_local_statements,
+                   _parse_func=parse_func,
+                   _parse_var=_parse_var,
+                   _parse_compound=parse_compound,
+                   ):
+    """Yield (funcname, name, vartype) for every variable in the given file."""
+    if preprocessed:
+        raise NotImplementedError
+    lines = _iter_source_lines(filename)
+    for stmt, body in _iter_global(lines):
+        # At the file top-level we only have to worry about vars & funcs.
+        if not body:
+            name, vartype = _parse_var(stmt)
+            if name:
+                yield (None, name, vartype)
+        else:
+            funcname, _ = _parse_func(stmt, body)
+            localvars = _iter_locals(body,
+                                     _iter_statements=_iter_local,
+                                     _parse_var=_parse_var,
+                                     _parse_compound=_parse_compound,
+                                     )
+            for name, vartype in localvars:
+                yield (funcname, name, vartype)
+
+
+def _iter_locals(lines, *,
+                 _iter_statements=iter_local_statements,
+                 _parse_var=_parse_var,
+                 _parse_compound=parse_compound,
+                 ):
+    compound = [lines]
+    while compound:
+        body = compound.pop(0)
+        bodylines = body.splitlines()
+        for stmt, blocks in _iter_statements(bodylines):
+            if not blocks:
+                name, vartype = _parse_var(stmt)
+                if name:
+                    yield (name, vartype)
+            else:
+                headers, bodies = _parse_compound(stmt, blocks)
+                for header in headers:
+                    for line in header:
+                        name, vartype = _parse_var(line)
+                        if name:
+                            yield (name, vartype)
+                compound.extend(bodies)
+
+
+def iter_all(filename, *,
+             preprocessed=False,
+             ):
+    """Yield a Declaration for each one found.
+
+    If there are duplicates, due to preprocessor conditionals, then
+    they are checked to make sure they are the same.
+    """
+    # XXX For the moment we cheat.
+    for funcname, name, decl in iter_variables(filename,
+                                               preprocessed=preprocessed):
+        yield 'variable', funcname, name, decl
diff --git a/Tools/c-analyzer/c_analyzer/parser/find.py b/Tools/c-analyzer/c_analyzer/parser/find.py
new file mode 100644
index 0000000..3860d3d
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/parser/find.py
@@ -0,0 +1,107 @@
+from ..common.info import UNKNOWN, ID
+
+from . import declarations
+
+# XXX need tests:
+# * variables
+# * variable
+# * variable_from_id
+
+
+def _iter_vars(filenames, preprocessed, *,
+               handle_id=None,
+               _iter_decls=declarations.iter_all,
+               ):
+    if handle_id is None:
+        handle_id = ID
+
+    for filename in filenames or ():
+        for kind, funcname, name, decl in _iter_decls(filename,
+                                                      preprocessed=preprocessed,
+                                                      ):
+            if kind != 'variable':
+                continue
+            varid = handle_id(filename, funcname, name)
+            yield varid, decl
+
+
+# XXX Add a "handle_var" arg like we did for get_resolver()?
+
+def variables(*filenames,
+              perfilecache=None,
+              preprocessed=False,
+              known=None,  # for types
+              handle_id=None,
+              _iter_vars=_iter_vars,
+              ):
+    """Yield (varid, decl) for each variable found in the given files.
+
+    If "preprocessed" is provided (and not False/None) then it is used
+    to decide which tool to use to parse the source code after it runs
+    through the C preprocessor.  Otherwise the raw
+    """
+    if len(filenames) == 1 and not (filenames[0], str):
+        filenames, = filenames
+
+    if perfilecache is None:
+        yield from _iter_vars(filenames, preprocessed)
+    else:
+        # XXX Cache per-file variables (e.g. `{filename: [(varid, decl)]}`).
+        raise NotImplementedError
+
+
+def variable(name, filenames, *,
+             local=False,
+             perfilecache=None,
+             preprocessed=False,
+             handle_id=None,
+             _iter_vars=variables,
+             ):
+    """Return (varid, decl) for the first found variable that matches.
+
+    If "local" is True then the first matching local variable in the
+    file will always be returned.  To avoid that, pass perfilecache and
+    pop each variable from the cache after using it.
+    """
+    for varid, decl in _iter_vars(filenames,
+                                  perfilecache=perfilecache,
+                                  preprocessed=preprocessed,
+                                  ):
+        if varid.name != name:
+            continue
+        if local:
+            if varid.funcname:
+                if varid.funcname == UNKNOWN:
+                    raise NotImplementedError
+                return varid, decl
+        elif not varid.funcname:
+            return varid, decl
+    else:
+        return None, None  # No matching variable was found.
+
+
+def variable_from_id(id, filenames, *,
+                     perfilecache=None,
+                     preprocessed=False,
+                     handle_id=None,
+                     _get_var=variable,
+                     ):
+    """Return (varid, decl) for the first found variable that matches."""
+    local = False
+    if isinstance(id, str):
+        name = id
+    else:
+        if id.funcname == UNKNOWN:
+            local = True
+        elif id.funcname:
+            raise NotImplementedError
+
+        name = id.name
+        if id.filename and id.filename != UNKNOWN:
+            filenames = [id.filename]
+    return _get_var(name, filenames,
+                    local=local,
+                    perfilecache=perfilecache,
+                    preprocessed=preprocessed,
+                    handle_id=handle_id,
+                    )
diff --git a/Tools/c-analyzer/c_analyzer/parser/naive.py b/Tools/c-analyzer/c_analyzer/parser/naive.py
new file mode 100644
index 0000000..4a4822d
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/parser/naive.py
@@ -0,0 +1,179 @@
+import re
+
+from ..common.info import UNKNOWN, ID
+
+from .preprocessor import _iter_clean_lines
+
+
+_NOT_SET = object()
+
+
+def get_srclines(filename, *,
+                 cache=None,
+                 _open=open,
+                 _iter_lines=_iter_clean_lines,
+                 ):
+    """Return the file's lines as a list.
+
+    Each line will have trailing whitespace removed (including newline).
+
+    If a cache is given the it is used.
+    """
+    if cache is not None:
+        try:
+            return cache[filename]
+        except KeyError:
+            pass
+
+    with _open(filename) as srcfile:
+        srclines = [line
+                    for _, line in _iter_lines(srcfile)
+                    if not line.startswith('#')]
+    for i, line in enumerate(srclines):
+        srclines[i] = line.rstrip()
+
+    if cache is not None:
+        cache[filename] = srclines
+    return srclines
+
+
+def parse_variable_declaration(srcline):
+    """Return (name, decl) for the given declaration line."""
+    # XXX possible false negatives...
+    decl, sep, _ = srcline.partition('=')
+    if not sep:
+        if not srcline.endswith(';'):
+            return None, None
+        decl = decl.strip(';')
+    decl = decl.strip()
+    m = re.match(r'.*\b(\w+)\s*(?:\[[^\]]*\])?$', decl)
+    if not m:
+        return None, None
+    name = m.group(1)
+    return name, decl
+
+
+def parse_variable(srcline, funcname=None):
+    """Return (varid, decl) for the variable declared on the line (or None)."""
+    line = srcline.strip()
+
+    # XXX Handle more than just static variables.
+    if line.startswith('static '):
+        if '(' in line and '[' not in line:
+            # a function
+            return None, None
+        return parse_variable_declaration(line)
+    else:
+        return None, None
+
+
+def iter_variables(filename, *,
+                   srccache=None,
+                   parse_variable=None,
+                   _get_srclines=get_srclines,
+                   _default_parse_variable=parse_variable,
+                   ):
+    """Yield (varid, decl) for each variable in the given source file."""
+    if parse_variable is None:
+        parse_variable = _default_parse_variable
+
+    indent = ''
+    prev = ''
+    funcname = None
+    for line in _get_srclines(filename, cache=srccache):
+        # remember current funcname
+        if funcname:
+            if line == indent + '}':
+                funcname = None
+                continue
+        else:
+            if '(' in prev and line == indent + '{':
+                if not prev.startswith('__attribute__'):
+                    funcname = prev.split('(')[0].split()[-1]
+                    prev = ''
+                    continue
+            indent = line[:-len(line.lstrip())]
+            prev = line
+
+        info = parse_variable(line, funcname)
+        if isinstance(info, list):
+            for name, _funcname, decl in info:
+                yield ID(filename, _funcname, name), decl
+            continue
+        name, decl = info
+
+        if name is None:
+            continue
+        yield ID(filename, funcname, name), decl
+
+
+def _match_varid(variable, name, funcname, ignored=None):
+    if ignored and variable in ignored:
+        return False
+
+    if variable.name != name:
+        return False
+
+    if funcname == UNKNOWN:
+        if not variable.funcname:
+            return False
+    elif variable.funcname != funcname:
+        return False
+
+    return True
+
+
+def find_variable(filename, funcname, name, *,
+                  ignored=None,
+                  srccache=None,  # {filename: lines}
+                  parse_variable=None,
+                  _iter_variables=iter_variables,
+                  ):
+    """Return the matching variable.
+
+    Return None if the variable is not found.
+    """
+    for varid, decl in _iter_variables(filename,
+                                    srccache=srccache,
+                                    parse_variable=parse_variable,
+                                    ):
+        if _match_varid(varid, name, funcname, ignored):
+            return varid, decl
+    else:
+        return None
+
+
+def find_variables(varids, filenames=None, *,
+                   srccache=_NOT_SET,
+                   parse_variable=None,
+                   _find_symbol=find_variable,
+                   ):
+    """Yield (varid, decl) for each ID.
+
+    If the variable is not found then its decl will be UNKNOWN.  That
+    way there will be one resulting variable per given ID.
+    """
+    if srccache is _NOT_SET:
+        srccache = {}
+
+    used = set()
+    for varid in varids:
+        if varid.filename and varid.filename != UNKNOWN:
+            srcfiles = [varid.filename]
+        else:
+            if not filenames:
+                yield varid, UNKNOWN
+                continue
+            srcfiles = filenames
+        for filename in srcfiles:
+            varid, decl = _find_varid(filename, varid.funcname, varid.name,
+                                      ignored=used,
+                                      srccache=srccache,
+                                      parse_variable=parse_variable,
+                                      )
+            if varid:
+                yield varid, decl
+                used.add(varid)
+                break
+        else:
+            yield varid, UNKNOWN
diff --git a/Tools/c-analyzer/c_analyzer/parser/preprocessor.py b/Tools/c-analyzer/c_analyzer/parser/preprocessor.py
new file mode 100644
index 0000000..41f306e
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/parser/preprocessor.py
@@ -0,0 +1,511 @@
+from collections import namedtuple
+import shlex
+import os
+import re
+
+from ..common import util, info
+
+
+CONTINUATION = '\\' + os.linesep
+
+IDENTIFIER = r'(?:\w*[a-zA-Z]\w*)'
+IDENTIFIER_RE = re.compile('^' + IDENTIFIER + '$')
+
+
+def _coerce_str(value):
+    if not value:
+        return ''
+    return str(value).strip()
+
+
+#############################
+# directives
+
+DIRECTIVE_START = r'''
+    (?:
+      ^ \s*
+      [#] \s*
+      )'''
+DIRECTIVE_TEXT = r'''
+    (?:
+      (?: \s+ ( .*\S ) )?
+      \s* $
+      )'''
+DIRECTIVE = rf'''
+    (?:
+      {DIRECTIVE_START}
+      (
+        include |
+        error | warning |
+        pragma |
+        define | undef |
+        if | ifdef | ifndef | elseif | else | endif |
+        __FILE__ | __LINE__ | __DATE __ | __TIME__ | __TIMESTAMP__
+        )
+      {DIRECTIVE_TEXT}
+      )'''
+#       (?:
+#        [^\\\n] |
+#        \\ [^\n] |
+#        \\ \n
+#        )+
+#      ) \n
+#     )'''
+DIRECTIVE_RE = re.compile(DIRECTIVE, re.VERBOSE)
+
+DEFINE = rf'''
+    (?:
+      {DIRECTIVE_START} define \s+
+      (?:
+        ( \w*[a-zA-Z]\w* )
+        (?: \s* [(] ([^)]*) [)] )?
+        )
+      {DIRECTIVE_TEXT}
+      )'''
+DEFINE_RE = re.compile(DEFINE, re.VERBOSE)
+
+
+def parse_directive(line):
+    """Return the appropriate directive for the given line."""
+    line = line.strip()
+    if line.startswith('#'):
+        line = line[1:].lstrip()
+        line = '#' + line
+    directive = line
+    #directive = '#' + line
+    while '  ' in directive:
+        directive = directive.replace('  ', ' ')
+    return _parse_directive(directive)
+
+
+def _parse_directive(line):
+    m = DEFINE_RE.match(line)
+    if m:
+        name, args, text = m.groups()
+        if args:
+            args = [a.strip() for a in args.split(',')]
+            return Macro(name, args, text)
+        else:
+            return Constant(name, text)
+
+    m = DIRECTIVE_RE.match(line)
+    if not m:
+        raise ValueError(f'unsupported directive {line!r}')
+    kind, text = m.groups()
+    if not text:
+        if kind not in ('else', 'endif'):
+            raise ValueError(f'missing text in directive {line!r}')
+    elif kind in ('else', 'endif', 'define'):
+        raise ValueError(f'unexpected text in directive {line!r}')
+    if kind == 'include':
+        directive = Include(text)
+    elif kind in IfDirective.KINDS:
+        directive = IfDirective(kind, text)
+    else:
+        directive = OtherDirective(kind, text)
+    directive.validate()
+    return directive
+
+
+class PreprocessorDirective(util._NTBase):
+    """The base class for directives."""
+
+    __slots__ = ()
+
+    KINDS = frozenset([
+            'include',
+            'pragma',
+            'error', 'warning',
+            'define', 'undef',
+            'if', 'ifdef', 'ifndef', 'elseif', 'else', 'endif',
+            '__FILE__', '__DATE__', '__LINE__', '__TIME__', '__TIMESTAMP__',
+            ])
+
+    @property
+    def text(self):
+        return ' '.join(v for v in self[1:] if v and v.strip()) or None
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        super().validate()
+
+        if not self.kind:
+            raise TypeError('missing kind')
+        elif self.kind not in self.KINDS:
+            raise ValueError
+
+        # text can be anything, including None.
+
+
+class Constant(PreprocessorDirective,
+               namedtuple('Constant', 'kind name value')):
+    """A single "constant" directive ("define")."""
+
+    __slots__ = ()
+
+    def __new__(cls, name, value=None):
+        self = super().__new__(
+                cls,
+                'define',
+                name=_coerce_str(name) or None,
+                value=_coerce_str(value) or None,
+                )
+        return self
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        super().validate()
+
+        if not self.name:
+            raise TypeError('missing name')
+        elif not IDENTIFIER_RE.match(self.name):
+            raise ValueError(f'name must be identifier, got {self.name!r}')
+
+        # value can be anything, including None
+
+
+class Macro(PreprocessorDirective,
+            namedtuple('Macro', 'kind name args body')):
+    """A single "macro" directive ("define")."""
+
+    __slots__ = ()
+
+    def __new__(cls, name, args, body=None):
+        # "args" must be a string or an iterable of strings (or "empty").
+        if isinstance(args, str):
+            args = [v.strip() for v in args.split(',')]
+        if args:
+            args = tuple(_coerce_str(a) or None for a in args)
+        self = super().__new__(
+                cls,
+                kind='define',
+                name=_coerce_str(name) or None,
+                args=args if args else (),
+                body=_coerce_str(body) or None,
+                )
+        return self
+
+    @property
+    def text(self):
+        if self.body:
+            return f'{self.name}({", ".join(self.args)}) {self.body}'
+        else:
+            return f'{self.name}({", ".join(self.args)})'
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        super().validate()
+
+        if not self.name:
+            raise TypeError('missing name')
+        elif not IDENTIFIER_RE.match(self.name):
+            raise ValueError(f'name must be identifier, got {self.name!r}')
+
+        for arg in self.args:
+            if not arg:
+                raise ValueError(f'missing arg in {self.args}')
+            elif not IDENTIFIER_RE.match(arg):
+                raise ValueError(f'arg must be identifier, got {arg!r}')
+
+        # body can be anything, including None
+
+
+class IfDirective(PreprocessorDirective,
+                  namedtuple('IfDirective', 'kind condition')):
+    """A single conditional directive (e.g. "if", "ifdef").
+
+    This only includes directives that actually provide conditions.  The
+    related directives "else" and "endif" are covered by OtherDirective
+    instead.
+    """
+
+    __slots__ = ()
+
+    KINDS = frozenset([
+            'if',
+            'ifdef',
+            'ifndef',
+            'elseif',
+            ])
+
+    @classmethod
+    def _condition_from_raw(cls, raw, kind):
+        #return Condition.from_raw(raw, _kind=kind)
+        condition = _coerce_str(raw)
+        if not condition:
+            return None
+
+        if kind == 'ifdef':
+            condition = f'defined({condition})'
+        elif kind == 'ifndef':
+            condition = f'! defined({condition})'
+
+        return condition
+
+    def __new__(cls, kind, condition):
+        kind = _coerce_str(kind)
+        self = super().__new__(
+                cls,
+                kind=kind or None,
+                condition=cls._condition_from_raw(condition, kind),
+                )
+        return self
+
+    @property
+    def text(self):
+        if self.kind == 'ifdef':
+            return self.condition[8:-1]  # strip "defined("
+        elif self.kind == 'ifndef':
+            return self.condition[10:-1]  # strip "! defined("
+        else:
+            return self.condition
+        #return str(self.condition)
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        super().validate()
+
+        if not self.condition:
+            raise TypeError('missing condition')
+        #else:
+        #    for cond in self.condition:
+        #        if not cond:
+        #            raise ValueError(f'missing condition in {self.condition}')
+        #        cond.validate()
+        #    if self.kind in ('ifdef', 'ifndef'):
+        #        if len(self.condition) != 1:
+        #            raise ValueError('too many condition')
+        #        if self.kind == 'ifdef':
+        #            if not self.condition[0].startswith('defined '):
+        #                raise ValueError('bad condition')
+        #        else:
+        #            if not self.condition[0].startswith('! defined '):
+        #                raise ValueError('bad condition')
+
+
+class Include(PreprocessorDirective,
+              namedtuple('Include', 'kind file')):
+    """A single "include" directive.
+
+    Supported "file" values are either follow the bracket style
+    (<stdio>) or double quotes ("spam.h").
+    """
+
+    __slots__ = ()
+
+    def __new__(cls, file):
+        self = super().__new__(
+                cls,
+                kind='include',
+                file=_coerce_str(file) or None,
+                )
+        return self
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        super().validate()
+
+        if not self.file:
+            raise TypeError('missing file')
+
+
+class OtherDirective(PreprocessorDirective,
+                     namedtuple('OtherDirective', 'kind text')):
+    """A single directive not covered by another class.
+
+    This includes the "else", "endif", and "undef" directives, which are
+    otherwise inherently related to the directives covered by the
+    Constant, Macro, and IfCondition classes.
+
+    Note that all directives must have a text value, except for "else"
+    and "endif" (which must have no text).
+    """
+
+    __slots__ = ()
+
+    KINDS = PreprocessorDirective.KINDS - {'include', 'define'} - IfDirective.KINDS
+
+    def __new__(cls, kind, text):
+        self = super().__new__(
+                cls,
+                kind=_coerce_str(kind) or None,
+                text=_coerce_str(text) or None,
+                )
+        return self
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        super().validate()
+
+        if self.text:
+            if self.kind in ('else', 'endif'):
+                raise ValueError('unexpected text in directive')
+        elif self.kind not in ('else', 'endif'):
+            raise TypeError('missing text')
+
+
+#############################
+# iterating lines
+
+def _recompute_conditions(directive, ifstack):
+    if directive.kind in ('if', 'ifdef', 'ifndef'):
+        ifstack.append(
+                ([], directive.condition))
+    elif directive.kind == 'elseif':
+        if ifstack:
+            negated, active = ifstack.pop()
+            if active:
+                negated.append(active)
+        else:
+            negated = []
+        ifstack.append(
+                (negated, directive.condition))
+    elif directive.kind == 'else':
+        if ifstack:
+            negated, active = ifstack.pop()
+            if active:
+                negated.append(active)
+            ifstack.append(
+                    (negated, None))
+    elif directive.kind == 'endif':
+        if ifstack:
+            ifstack.pop()
+
+    conditions = []
+    for negated, active in ifstack:
+        for condition in negated:
+            conditions.append(f'! ({condition})')
+        if active:
+            conditions.append(active)
+    return tuple(conditions)
+
+
+def _iter_clean_lines(lines):
+    lines = iter(enumerate(lines, 1))
+    for lno, line in lines:
+        # Handle line continuations.
+        while line.endswith(CONTINUATION):
+            try:
+                lno, _line = next(lines)
+            except StopIteration:
+                break
+            line = line[:-len(CONTINUATION)] + ' ' + _line
+
+        # Deal with comments.
+        after = line
+        line = ''
+        while True:
+            # Look for a comment.
+            before, begin, remainder = after.partition('/*')
+            if '//' in before:
+                before, _, _ = before.partition('//')
+                line += before + ' '  # per the C99 spec
+                break
+            line += before
+            if not begin:
+                break
+            line += ' '  # per the C99 spec
+
+            # Go until we find the end of the comment.
+            _, end, after = remainder.partition('*/')
+            while not end:
+                try:
+                    lno, remainder = next(lines)
+                except StopIteration:
+                    raise Exception('unterminated comment')
+                _, end, after = remainder.partition('*/')
+
+        yield lno, line
+
+
+def iter_lines(lines, *,
+                   _iter_clean_lines=_iter_clean_lines,
+                   _parse_directive=_parse_directive,
+                   _recompute_conditions=_recompute_conditions,
+                   ):
+    """Yield (lno, line, directive, active conditions) for each given line.
+
+    This is effectively a subset of the operations taking place in
+    translation phases 2-4 from the C99 spec (ISO/IEC 9899:TC2); see
+    section 5.1.1.2.  Line continuations are removed and comments
+    replaced with a single space.  (In both cases "lno" will be the last
+    line involved.)  Otherwise each line is returned as-is.
+
+    "lno" is the (1-indexed) line number for the line.
+
+    "directive" will be a PreprocessorDirective or None, depending on
+    whether or not there is a directive on the line.
+
+    "active conditions" is the set of preprocessor conditions (e.g.
+    "defined()") under which the current line of code will be included
+    in compilation.  That set is derived from every conditional
+    directive block (e.g. "if defined()", "ifdef", "else") containing
+    that line.  That includes nested directives.  Note that the
+    current line does not affect the active conditions for iteself.
+    It only impacts subsequent lines.  That applies to directives
+    that close blocks (e.g. "endif") just as much as conditional
+    directvies.  Also note that "else" and "elseif" directives
+    update the active conditions (for later lines), rather than
+    adding to them.
+    """
+    ifstack = []
+    conditions = ()
+    for lno, line in _iter_clean_lines(lines):
+        stripped = line.strip()
+        if not stripped.startswith('#'):
+            yield lno, line, None, conditions
+            continue
+
+        directive = '#' + stripped[1:].lstrip()
+        while '  ' in directive:
+            directive = directive.replace('  ', ' ')
+        directive = _parse_directive(directive)
+        yield lno, line, directive, conditions
+
+        if directive.kind in ('else', 'endif'):
+            conditions = _recompute_conditions(directive, ifstack)
+        elif isinstance(directive, IfDirective):
+            conditions = _recompute_conditions(directive, ifstack)
+
+
+#############################
+# running (platform-specific?)
+
+def _gcc(filename, *,
+         _get_argv=(lambda: _get_gcc_argv()),
+         _run=util.run_cmd,
+         ):
+    argv = _get_argv()
+    argv.extend([
+            '-E', filename,
+            ])
+    output = _run(argv)
+    return output
+
+
+def _get_gcc_argv(*,
+                  _open=open,
+                  _run=util.run_cmd,
+                  ):
+    with _open('/tmp/print.mk', 'w') as tmpfile:
+        tmpfile.write('print-%:\n')
+        #tmpfile.write('\t@echo $* = $($*)\n')
+        tmpfile.write('\t@echo $($*)\n')
+    argv = ['/usr/bin/make',
+            '-f', 'Makefile',
+            '-f', '/tmp/print.mk',
+            'print-CC',
+            'print-PY_CORE_CFLAGS',
+            ]
+    output = _run(argv)
+    gcc, cflags = output.strip().splitlines()
+    argv = shlex.split(gcc.strip())
+    cflags = shlex.split(cflags.strip())
+    return argv + cflags
+
+
+def run(filename, *,
+        _gcc=_gcc,
+        ):
+    """Return the text of the given file after running the preprocessor."""
+    return _gcc(filename)
diff --git a/Tools/c-analyzer/c_analyzer/parser/source.py b/Tools/c-analyzer/c_analyzer/parser/source.py
new file mode 100644
index 0000000..f8998c8
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/parser/source.py
@@ -0,0 +1,34 @@
+from . import preprocessor
+
+
+def iter_clean_lines(lines):
+    incomment = False
+    for line in lines:
+        # Deal with comments.
+        if incomment:
+            _, sep, line = line.partition('*/')
+            if sep:
+                incomment = False
+            continue
+        line, _, _ = line.partition('//')
+        line, sep, remainder = line.partition('/*')
+        if sep:
+            _, sep, after = remainder.partition('*/')
+            if not sep:
+                incomment = True
+                continue
+            line += ' ' + after
+
+        # Ignore blank lines and leading/trailing whitespace.
+        line = line.strip()
+        if not line:
+            continue
+
+        yield line
+
+
+def iter_lines(filename, *,
+               preprocess=preprocessor.run,
+               ):
+    content = preprocess(filename)
+    return iter(content.splitlines())
diff --git a/Tools/c-analyzer/c_analyzer/symbols/__init__.py b/Tools/c-analyzer/c_analyzer/symbols/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/symbols/__init__.py
diff --git a/Tools/c-analyzer/c_analyzer/symbols/_nm.py b/Tools/c-analyzer/c_analyzer/symbols/_nm.py
new file mode 100644
index 0000000..f3a75a6
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/symbols/_nm.py
@@ -0,0 +1,117 @@
+import os.path
+import shutil
+
+from c_analyzer.common import util, info
+
+from .info import Symbol
+
+
+# XXX need tests:
+# * iter_symbols
+
+NM_KINDS = {
+        'b': Symbol.KIND.VARIABLE,  # uninitialized
+        'd': Symbol.KIND.VARIABLE,  # initialized
+        #'g': Symbol.KIND.VARIABLE,  # uninitialized
+        #'s': Symbol.KIND.VARIABLE,  # initialized
+        't': Symbol.KIND.FUNCTION,
+        }
+
+SPECIAL_SYMBOLS = {
+        # binary format (e.g. ELF)
+        '__bss_start',
+        '__data_start',
+        '__dso_handle',
+        '_DYNAMIC',
+        '_edata',
+        '_end',
+        '__environ@@GLIBC_2.2.5',
+        '_GLOBAL_OFFSET_TABLE_',
+        '__JCR_END__',
+        '__JCR_LIST__',
+        '__TMC_END__',
+        }
+
+
+def _is_special_symbol(name):
+    if name in SPECIAL_SYMBOLS:
+        return True
+    if '@@GLIBC' in name:
+        return True
+    return False
+
+
+def iter_symbols(binfile, *,
+                 nm=None,
+                 handle_id=None,
+                 _which=shutil.which,
+                 _run=util.run_cmd,
+                 ):
+    """Yield a Symbol for each relevant entry reported by the "nm" command."""
+    if nm is None:
+        nm = _which('nm')
+        if not nm:
+            raise NotImplementedError
+    if handle_id is None:
+        handle_id = info.ID
+
+    argv = [nm,
+            '--line-numbers',
+            binfile,
+            ]
+    try:
+        output = _run(argv)
+    except Exception:
+        if nm is None:
+            # XXX Use dumpbin.exe /SYMBOLS on Windows.
+            raise NotImplementedError
+        raise
+    for line in output.splitlines():
+        (name, kind, external, filename, funcname,
+         ) = _parse_nm_line(line)
+        if kind != Symbol.KIND.VARIABLE:
+            continue
+        elif _is_special_symbol(name):
+            continue
+        yield Symbol(
+                id=handle_id(filename, funcname, name),
+                kind=kind,
+                external=external,
+                )
+
+
+def _parse_nm_line(line):
+    _origline = line
+    _, _, line = line.partition(' ')  # strip off the address
+    line = line.strip()
+
+    kind, _, line = line.partition(' ')
+    line = line.strip()
+    external = kind.isupper()
+    kind = NM_KINDS.get(kind.lower(), Symbol.KIND.OTHER)
+
+    name, _, filename = line.partition('\t')
+    name = name.strip()
+    if filename:
+        filename = os.path.relpath(filename.partition(':')[0])
+    else:
+        filename = info.UNKNOWN
+
+    name, islocal = _parse_nm_name(name, kind)
+    funcname = info.UNKNOWN if islocal else None
+    return name, kind, external, filename, funcname
+
+
+def _parse_nm_name(name, kind):
+    if kind != Symbol.KIND.VARIABLE:
+        return name, None
+    if _is_special_symbol(name):
+        return name, None
+
+    actual, sep, digits = name.partition('.')
+    if not sep:
+        return name, False
+
+    if not digits.isdigit():
+        raise Exception(f'got bogus name {name}')
+    return actual, True
diff --git a/Tools/c-analyzer/c_analyzer/symbols/find.py b/Tools/c-analyzer/c_analyzer/symbols/find.py
new file mode 100644
index 0000000..8564652
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/symbols/find.py
@@ -0,0 +1,175 @@
+import os
+import os.path
+import shutil
+
+from ..common import files
+from ..common.info import UNKNOWN, ID
+from ..parser import find as p_find
+
+from . import _nm
+from .info import Symbol
+
+# XXX need tests:
+# * get_resolver()
+# * get_resolver_from_dirs()
+# * symbol()
+# * symbols()
+# * variables()
+
+
+def _resolve_known(symbol, knownvars):
+    for varid in knownvars:
+        if symbol.match(varid):
+            break
+    else:
+        return None
+    return knownvars.pop(varid)
+
+
+def get_resolver(filenames=None, known=None, *,
+                 handle_var,
+                 check_filename=None,
+                 perfilecache=None,
+                 preprocessed=False,
+                 _from_source=p_find.variable_from_id,
+                 ):
+    """Return a "resolver" func for the given known vars/types and filenames.
+
+    "handle_var" is a callable that takes (ID, decl) and returns a
+    Variable.  Variable.from_id is a suitable callable.
+
+    The returned func takes a single Symbol and returns a corresponding
+    Variable.  If the symbol was located then the variable will be
+    valid, populated with the corresponding information.  Otherwise None
+    is returned.
+    """
+    knownvars = (known or {}).get('variables')
+    if knownvars:
+        knownvars = dict(knownvars)  # a copy
+        if filenames:
+            if check_filename is None:
+                filenames = list(filenames)
+                def check_filename(filename):
+                    return filename in filenames
+            def resolve(symbol):
+                # XXX Check "found" instead?
+                if not check_filename(symbol.filename):
+                    return None
+                found = _resolve_known(symbol, knownvars)
+                if found is None:
+                    #return None
+                    varid, decl = _from_source(symbol, filenames,
+                                               perfilecache=perfilecache,
+                                               preprocessed=preprocessed,
+                                               )
+                    found = handle_var(varid, decl)
+                return found
+        else:
+            def resolve(symbol):
+                return _resolve_known(symbol, knownvars)
+    elif filenames:
+        def resolve(symbol):
+            varid, decl = _from_source(symbol, filenames,
+                                       perfilecache=perfilecache,
+                                       preprocessed=preprocessed,
+                                       )
+            return handle_var(varid, decl)
+    else:
+        def resolve(symbol):
+            return None
+    return resolve
+
+
+def get_resolver_from_dirs(dirnames, known=None, *,
+                           handle_var,
+                           suffixes=('.c',),
+                           perfilecache=None,
+                           preprocessed=False,
+                           _iter_files=files.iter_files_by_suffix,
+                           _get_resolver=get_resolver,
+                           ):
+    """Return a "resolver" func for the given known vars/types and filenames.
+
+    "dirnames" should be absolute paths.  If not then they will be
+    resolved relative to CWD.
+
+    See get_resolver().
+    """
+    dirnames = [d if d.endswith(os.path.sep) else d + os.path.sep
+                for d in dirnames]
+    filenames = _iter_files(dirnames, suffixes)
+    def check_filename(filename):
+        for dirname in dirnames:
+            if filename.startswith(dirname):
+                return True
+        else:
+            return False
+    return _get_resolver(filenames, known,
+                         handle_var=handle_var,
+                         check_filename=check_filename,
+                         perfilecache=perfilecache,
+                         preprocessed=preprocessed,
+                         )
+
+
+def symbol(symbol, filenames, known=None, *,
+           perfilecache=None,
+           preprocessed=False,
+           handle_id=None,
+           _get_resolver=get_resolver,
+           ):
+    """Return a Variable for the one matching the given symbol.
+
+    "symbol" can be one of several objects:
+
+    * Symbol - use the contained info
+    * name (str) - look for a global variable with that name
+    * (filename, name) - look for named global in file
+    * (filename, funcname, name) - look for named local in file
+
+    A name is always required.  If the filename is None, "", or
+    "UNKNOWN" then all files will be searched.  If the funcname is
+    "" or "UNKNOWN" then only local variables will be searched for.
+    """
+    resolve = _get_resolver(known, filenames,
+                            handle_id=handle_id,
+                            perfilecache=perfilecache,
+                            preprocessed=preprocessed,
+                            )
+    return resolve(symbol)
+
+
+def _get_platform_tool():
+    if os.name == 'nt':
+        # XXX Support this.
+        raise NotImplementedError
+    elif nm := shutil.which('nm'):
+        return lambda b, hi: _nm.iter_symbols(b, nm=nm, handle_id=hi)
+    else:
+        raise NotImplementedError
+
+
+def symbols(binfile, *,
+            handle_id=None,
+            _file_exists=os.path.exists,
+            _get_platform_tool=_get_platform_tool,
+            ):
+    """Yield a Symbol for each one found in the binary."""
+    if not _file_exists(binfile):
+        raise Exception('executable missing (need to build it first?)')
+
+    _iter_symbols = _get_platform_tool()
+    yield from _iter_symbols(binfile, handle_id)
+
+
+def variables(binfile, *,
+              resolve,
+              handle_id=None,
+              _iter_symbols=symbols,
+              ):
+    """Yield (Variable, Symbol) for each found symbol."""
+    for symbol in _iter_symbols(binfile, handle_id=handle_id):
+        if symbol.kind != Symbol.KIND.VARIABLE:
+            continue
+        var = resolve(symbol) or None
+        yield var, symbol
diff --git a/Tools/c-analyzer/c_analyzer/symbols/info.py b/Tools/c-analyzer/c_analyzer/symbols/info.py
new file mode 100644
index 0000000..96a251a
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/symbols/info.py
@@ -0,0 +1,51 @@
+from collections import namedtuple
+
+from c_analyzer.common.info import ID
+from c_analyzer.common.util import classonly, _NTBase
+
+
+class Symbol(_NTBase, namedtuple('Symbol', 'id kind external')):
+    """Info for a single compilation symbol."""
+
+    __slots__ = ()
+
+    class KIND:
+        VARIABLE = 'variable'
+        FUNCTION = 'function'
+        OTHER = 'other'
+
+    @classonly
+    def from_name(cls, name, filename=None, kind=KIND.VARIABLE, external=None):
+        """Return a new symbol based on the given name."""
+        id = ID(filename, None, name)
+        return cls(id, kind, external)
+
+    def __new__(cls, id, kind=KIND.VARIABLE, external=None):
+        self = super().__new__(
+                cls,
+                id=ID.from_raw(id),
+                kind=str(kind) if kind else None,
+                external=bool(external) if external is not None else None,
+                )
+        return self
+
+    def __hash__(self):
+        return hash(self.id)
+
+    def __getattr__(self, name):
+        return getattr(self.id, name)
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        if not self.id:
+            raise TypeError('missing id')
+        else:
+            self.id.validate()
+
+        if not self.kind:
+            raise TypeError('missing kind')
+        elif self.kind not in vars(self.KIND).values():
+            raise ValueError(f'unsupported kind {self.kind}')
+
+        if self.external is None:
+            raise TypeError('missing external')
diff --git a/Tools/c-analyzer/c_analyzer/variables/__init__.py b/Tools/c-analyzer/c_analyzer/variables/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/variables/__init__.py
diff --git a/Tools/c-analyzer/c_analyzer/variables/find.py b/Tools/c-analyzer/c_analyzer/variables/find.py
new file mode 100644
index 0000000..3fe7284
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/variables/find.py
@@ -0,0 +1,75 @@
+from ..common import files
+from ..common.info import UNKNOWN
+from ..parser import (
+        find as p_find,
+        )
+from ..symbols import (
+        info as s_info,
+        find as s_find,
+        )
+from .info import Variable
+
+# XXX need tests:
+# * vars_from_source
+
+
+def _remove_cached(cache, var):
+    if not cache:
+        return
+    try:
+        cached = cache[var.filename]
+        cached.remove(var)
+    except (KeyError, IndexError):
+        pass
+
+
+def vars_from_binary(binfile, *,
+                     known=None,
+                     filenames=None,
+                     handle_id=None,
+                     check_filename=None,
+                     handle_var=Variable.from_id,
+                     _iter_vars=s_find.variables,
+                     _get_symbol_resolver=s_find.get_resolver,
+                     ):
+    """Yield a Variable for each found Symbol.
+
+    Details are filled in from the given "known" variables and types.
+    """
+    cache = {}
+    resolve = _get_symbol_resolver(filenames, known,
+                                   handle_var=handle_var,
+                                   check_filename=check_filename,
+                                   perfilecache=cache,
+                                   )
+    for var, symbol in _iter_vars(binfile,
+                                  resolve=resolve,
+                                  handle_id=handle_id,
+                                  ):
+        if var is None:
+            var = Variable(symbol.id, UNKNOWN, UNKNOWN)
+        yield var
+        _remove_cached(cache, var)
+
+
+def vars_from_source(filenames, *,
+                     preprocessed=None,
+                     known=None,
+                     handle_id=None,
+                     handle_var=Variable.from_id,
+                     iter_vars=p_find.variables,
+                     ):
+    """Yield a Variable for each declaration in the raw source code.
+
+    Details are filled in from the given "known" variables and types.
+    """
+    cache = {}
+    for varid, decl in iter_vars(filenames or (),
+                                 perfilecache=cache,
+                                 preprocessed=preprocessed,
+                                 known=known,
+                                 handle_id=handle_id,
+                                 ):
+        var = handle_var(varid, decl)
+        yield var
+        _remove_cached(cache, var)
diff --git a/Tools/c-analyzer/c_analyzer/variables/info.py b/Tools/c-analyzer/c_analyzer/variables/info.py
new file mode 100644
index 0000000..336a523
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/variables/info.py
@@ -0,0 +1,93 @@
+from collections import namedtuple
+
+from ..common.info import ID, UNKNOWN
+from ..common.util import classonly, _NTBase
+
+
+def normalize_vartype(vartype):
+    """Return the canonical form for a variable type (or func signature)."""
+    # We allow empty strring through for semantic reasons.
+    if vartype is None:
+        return None
+
+    # XXX finish!
+    # XXX Return (modifiers, type, pointer)?
+    return str(vartype)
+
+
+# XXX Variable.vartype -> decl (Declaration).
+
+class Variable(_NTBase,
+               namedtuple('Variable', 'id storage vartype')):
+    """Information about a single variable declaration."""
+
+    __slots__ = ()
+
+    STORAGE = (
+            'static',
+            'extern',
+            'implicit',
+            'local',
+            )
+
+    @classonly
+    def from_parts(cls, filename, funcname, name, decl, storage=None):
+        varid = ID(filename, funcname, name)
+        if storage is None:
+            self = cls.from_id(varid, decl)
+        else:
+            self = cls(varid, storage, decl)
+        return self
+
+    @classonly
+    def from_id(cls, varid, decl):
+        from ..parser.declarations import extract_storage
+        storage = extract_storage(decl, infunc=varid.funcname)
+        return cls(varid, storage, decl)
+
+    def __new__(cls, id, storage, vartype):
+        self = super().__new__(
+                cls,
+                id=ID.from_raw(id),
+                storage=str(storage) if storage else None,
+                vartype=normalize_vartype(vartype) if vartype else None,
+                )
+        return self
+
+    def __hash__(self):
+        return hash(self.id)
+
+    def __getattr__(self, name):
+        return getattr(self.id, name)
+
+    def _validate_id(self):
+        if not self.id:
+            raise TypeError('missing id')
+
+        if not self.filename or self.filename == UNKNOWN:
+            raise TypeError(f'id missing filename ({self.id})')
+
+        if self.funcname and self.funcname == UNKNOWN:
+            raise TypeError(f'id missing funcname ({self.id})')
+
+        self.id.validate()
+
+    def validate(self):
+        """Fail if the object is invalid (i.e. init with bad data)."""
+        self._validate_id()
+
+        if self.storage is None or self.storage == UNKNOWN:
+            raise TypeError('missing storage')
+        elif self.storage not in self.STORAGE:
+            raise ValueError(f'unsupported storage {self.storage:r}')
+
+        if self.vartype is None or self.vartype == UNKNOWN:
+            raise TypeError('missing vartype')
+
+    @property
+    def isglobal(self):
+        return self.storage != 'local'
+
+    @property
+    def isconst(self):
+        return 'const' in self.vartype.split()
diff --git a/Tools/c-analyzer/c_analyzer/variables/known.py b/Tools/c-analyzer/c_analyzer/variables/known.py
new file mode 100644
index 0000000..aa2934a
--- /dev/null
+++ b/Tools/c-analyzer/c_analyzer/variables/known.py
@@ -0,0 +1,91 @@
+import csv
+
+from ..common.info import ID, UNKNOWN
+from ..common.util import read_tsv
+from .info import Variable
+
+
+# XXX need tests:
+# * read_file()
+# * look_up_variable()
+
+
+COLUMNS = ('filename', 'funcname', 'name', 'kind', 'declaration')
+HEADER = '\t'.join(COLUMNS)
+
+
+def read_file(infile, *,
+              _read_tsv=read_tsv,
+              ):
+    """Yield (kind, id, decl) for each row in the data file.
+
+    The caller is responsible for validating each row.
+    """
+    for row in _read_tsv(infile, HEADER):
+        filename, funcname, name, kind, declaration = row
+        if not funcname or funcname == '-':
+            funcname = None
+        id = ID(filename, funcname, name)
+        yield kind, id, declaration
+
+
+def from_file(infile, *,
+              handle_var=Variable.from_id,
+              _read_file=read_file,
+              ):
+    """Return the info for known declarations in the given file."""
+    known = {
+        'variables': {},
+        #'types': {},
+        #'constants': {},
+        #'macros': {},
+        }
+    for kind, id, decl in _read_file(infile):
+        if kind == 'variable':
+            values = known['variables']
+            value = handle_var(id, decl)
+        else:
+            raise ValueError(f'unsupported kind in row {row}')
+        value.validate()
+        values[id] = value
+    return known
+
+
+def look_up_variable(varid, knownvars, *,
+                     match_files=(lambda f1, f2: f1 == f2),
+                     ):
+    """Return the known Variable matching the given ID.
+
+    "knownvars" is a mapping of ID to Variable.
+
+    "match_files" is used to verify if two filenames point to
+    the same file.
+
+    If no match is found then None is returned.
+    """
+    if not knownvars:
+        return None
+
+    if varid.funcname == UNKNOWN:
+        if not varid.filename or varid.filename == UNKNOWN:
+            for varid in knownvars:
+                if not varid.funcname:
+                    continue
+                if varid.name == varid.name:
+                    return knownvars[varid]
+            else:
+                return None
+        else:
+            for varid in knownvars:
+                if not varid.funcname:
+                    continue
+                if not match_files(varid.filename, varid.filename):
+                    continue
+                if varid.name == varid.name:
+                    return knownvars[varid]
+            else:
+                return None
+    elif not varid.filename or varid.filename == UNKNOWN:
+        raise NotImplementedError
+    else:
+        return knownvars.get(varid.id)
diff --git a/Tools/c-globals/check-c-globals.py b/Tools/c-analyzer/check-c-globals.py
similarity index 100%
rename from Tools/c-globals/check-c-globals.py
rename to Tools/c-analyzer/check-c-globals.py
diff --git a/Tools/c-analyzer/cpython/README b/Tools/c-analyzer/cpython/README
new file mode 100644
index 0000000..772b8be
--- /dev/null
+++ b/Tools/c-analyzer/cpython/README
@@ -0,0 +1,72 @@
+#######################################
+# C Globals and CPython Runtime State.
+
+CPython's C code makes extensive use of global variables (whether static
+globals or static locals).  Each such variable falls into one of several
+categories:
+
+* strictly const data
+* used exclusively in main or in the REPL
+* process-global state (e.g. managing process-level resources
+  like signals and file descriptors)
+* Python "global" runtime state
+* per-interpreter runtime state
+
+The last one can be a problem as soon as anyone creates a second
+interpreter (AKA "subinterpreter") in a process.  It is definitely a
+problem under subinterpreters if they are no longer sharing the GIL,
+since the GIL protects us from a lot of race conditions.  Keep in mind
+that ultimately *all* objects (PyObject) should be treated as
+per-interpreter state.  This includes "static types", freelists,
+_PyIdentifier, and singletons.  Take that in for a second.  It has
+significant implications on where we use static variables!
+
+Be aware that module-global state (stored in C statics) is a kind of
+per-interpreter state.  There have been efforts across many years, and
+still going, to provide extension module authors mechanisms to store
+that state safely (see PEPs 3121, 489, etc.).
+
+(Note that there has been discussion around support for running multiple
+Python runtimes in the same process.  That would ends up with the same
+problems, relative to static variables, that subinterpreters have.)
+
+Historically we have been bad at keeping per-interpreter state out of
+static variables, mostly because until recently subinterpreters were
+not widely used nor even factored in to solutions.  However, the
+feature is growing in popularity and use in the community.
+
+Mandate: "Eliminate use of static variables for per-interpreter state."
+
+The "c-statics.py" script in this directory, along with its accompanying
+data files, are part of the effort to resolve existing problems with
+our use of static variables and to prevent future problems.
+
+#-------------------------
+## statics for actually-global state (and runtime state consolidation)
+
+In general, holding any kind of state in static variables
+increases maintenance burden and increases the complexity of code (e.g.
+we use TSS to identify the active thread state).  So it is a good idea
+to avoid using statics for state even if for the "global" runtime or
+for process-global state.
+
+Relative to maintenance burden, one problem is where the runtime
+state is spread throughout the codebase in dozens of individual
+globals.  Unlike the other globals, the runtime state represents a set
+of values that are constantly shifting in a complex way.  When they are
+spread out it's harder to get a clear picture of what the runtime
+involves.  Furthermore, when they are spread out it complicates efforts
+that change the runtime.
+
+Consequently, the globals for Python's runtime state have been
+consolidated under a single top-level _PyRuntime global. No new globals
+should be added for runtime state.  Instead, they should be added to
+_PyRuntimeState or one of its sub-structs.  The tools in this directory
+are run as part of the test suite to ensure that no new globals have
+been added.  The script can be run manually as well:
+
+  ./python Lib/test/test_c_statics/c-statics.py check
+
+If it reports any globals then they should be resolved.  If the globals
+are runtime state then they should be folded into _PyRuntimeState.
+Otherwise they should be marked as ignored.
diff --git a/Tools/c-analyzer/cpython/__init__.py b/Tools/c-analyzer/cpython/__init__.py
new file mode 100644
index 0000000..ae45b42
--- /dev/null
+++ b/Tools/c-analyzer/cpython/__init__.py
@@ -0,0 +1,29 @@
+import os.path
+import sys
+
+
+TOOL_ROOT = os.path.abspath(
+        os.path.dirname(  # c-analyzer/
+            os.path.dirname(__file__)))  # cpython/
+DATA_DIR = TOOL_ROOT
+REPO_ROOT = (
+        os.path.dirname(  # ..
+            os.path.dirname(TOOL_ROOT)))  # Tools/
+
+INCLUDE_DIRS = [os.path.join(REPO_ROOT, name) for name in [
+        'Include',
+        ]]
+SOURCE_DIRS = [os.path.join(REPO_ROOT, name) for name in [
+        'Python',
+        'Parser',
+        'Objects',
+        'Modules',
+        ]]
+
+#PYTHON = os.path.join(REPO_ROOT, 'python')
+PYTHON = sys.executable
+
+
+# Clean up the namespace.
+del sys
+del os
diff --git a/Tools/c-analyzer/cpython/__main__.py b/Tools/c-analyzer/cpython/__main__.py
new file mode 100644
index 0000000..6b0f9bc
--- /dev/null
+++ b/Tools/c-analyzer/cpython/__main__.py
@@ -0,0 +1,212 @@
+import argparse
+import re
+import sys
+
+from c_analyzer.common import show
+from c_analyzer.common.info import UNKNOWN
+
+from . import SOURCE_DIRS
+from .find import supported_vars
+from .known import (
+    from_file as known_from_file,
+    DATA_FILE as KNOWN_FILE,
+    )
+from .supported import IGNORED_FILE
+
+
+def _check_results(unknown, knownvars, used):
+    def _match_unused_global(variable):
+        found = []
+        for varid in knownvars:
+            if varid in used:
+                continue
+            if varid.funcname is not None:
+                continue
+            if varid.name != variable.name:
+                continue
+            if variable.filename and variable.filename != UNKNOWN:
+                if variable.filename == varid.filename:
+                    found.append(varid)
+            else:
+                found.append(varid)
+        return found
+
+    badknown = set()
+    for variable in sorted(unknown):
+        msg = None
+        if variable.funcname != UNKNOWN:
+            msg = f'could not find global symbol {variable.id}'
+        elif m := _match_unused_global(variable):
+            assert isinstance(m, list)
+            badknown.update(m)
+        elif variable.name in ('completed', 'id'):  # XXX Figure out where these variables are.
+            unknown.remove(variable)
+        else:
+            msg = f'could not find local symbol {variable.id}'
+        if msg:
+            #raise Exception(msg)
+            print(msg)
+    if badknown:
+        print('---')
+        print(f'{len(badknown)} globals in known.tsv, but may actually be local:')
+        for varid in sorted(badknown):
+            print(f'{varid.filename:30} {varid.name}')
+    unused = sorted(varid
+                    for varid in set(knownvars) - used
+                    if varid.name != 'id')  # XXX Figure out where these variables are.
+    if unused:
+        print('---')
+        print(f'did not use {len(unused)} known vars:')
+        for varid in unused:
+            print(f'{varid.filename:30} {varid.funcname or "-":20} {varid.name}')
+        raise Exception('not all known symbols used')
+    if unknown:
+        print('---')
+        raise Exception('could not find all symbols')
+
+
+# XXX Move this check to its own command.
+def cmd_check_cache(cmd, *,
+                    known=KNOWN_FILE,
+                    ignored=IGNORED_FILE,
+                    _known_from_file=known_from_file,
+                    _find=supported_vars,
+                    ):
+    known = _known_from_file(known)
+
+    used = set()
+    unknown = set()
+    for var, supported in _find(known=known, ignored=ignored):
+        if supported is None:
+            unknown.add(var)
+            continue
+        used.add(var.id)
+    _check_results(unknown, known['variables'], used)
+
+
+def cmd_check(cmd, *,
+              known=KNOWN_FILE,
+              ignored=IGNORED_FILE,
+              _find=supported_vars,
+              _show=show.basic,
+              _print=print,
+              ):
+    """
+    Fail if there are unsupported globals variables.
+
+    In the failure case, the list of unsupported variables
+    will be printed out.
+    """
+    unsupported = []
+    for var, supported in _find(known=known, ignored=ignored):
+        if not supported:
+            unsupported.append(var)
+
+    if not unsupported:
+        #_print('okay')
+        return
+
+    _print('ERROR: found unsupported global variables')
+    _print()
+    _show(sorted(unsupported))
+    _print(f' ({len(unsupported)} total)')
+    sys.exit(1)
+
+
+def cmd_show(cmd, *,
+             known=KNOWN_FILE,
+             ignored=IGNORED_FILE,
+             skip_objects=False,
+              _find=supported_vars,
+             _show=show.basic,
+             _print=print,
+             ):
+    """
+    Print out the list of found global variables.
+
+    The variables will be distinguished as "supported" or "unsupported".
+    """
+    allsupported = []
+    allunsupported = []
+    for found, supported in _find(known=known,
+                                  ignored=ignored,
+                                  skip_objects=skip_objects,
+                                  ):
+        if supported is None:
+            continue
+        (allsupported if supported else allunsupported
+         ).append(found)
+
+    _print('supported:')
+    _print('----------')
+    _show(sorted(allsupported))
+    _print(f' ({len(allsupported)} total)')
+    _print()
+    _print('unsupported:')
+    _print('------------')
+    _show(sorted(allunsupported))
+    _print(f' ({len(allunsupported)} total)')
+
+
+#############################
+# the script
+
+COMMANDS = {
+        'check': cmd_check,
+        'show': cmd_show,
+        }
+
+PROG = sys.argv[0]
+PROG = 'c-globals.py'
+
+
+def parse_args(prog=PROG, argv=sys.argv[1:], *, _fail=None):
+    common = argparse.ArgumentParser(add_help=False)
+    common.add_argument('--ignored', metavar='FILE',
+                        default=IGNORED_FILE,
+                        help='path to file that lists ignored vars')
+    common.add_argument('--known', metavar='FILE',
+                        default=KNOWN_FILE,
+                        help='path to file that lists known types')
+    #common.add_argument('dirs', metavar='DIR', nargs='*',
+    #                    default=SOURCE_DIRS,
+    #                    help='a directory to check')
+
+    parser = argparse.ArgumentParser(
+            prog=prog,
+            )
+    subs = parser.add_subparsers(dest='cmd')
+
+    check = subs.add_parser('check', parents=[common])
+
+    show = subs.add_parser('show', parents=[common])
+    show.add_argument('--skip-objects', action='store_true')
+
+    if _fail is None:
+        def _fail(msg):
+            parser.error(msg)
+
+    # Now parse the args.
+    args = parser.parse_args(argv)
+    ns = vars(args)
+
+    cmd = ns.pop('cmd')
+    if not cmd:
+        _fail('missing command')
+
+    return cmd, ns
+
+
+def main(cmd, cmdkwargs=None, *, _COMMANDS=COMMANDS):
+    try:
+        cmdfunc = _COMMANDS[cmd]
+    except KeyError:
+        raise ValueError(
+            f'unsupported cmd {cmd!r}' if cmd else 'missing cmd')
+
+    cmdfunc(cmd, **cmdkwargs or {})
+
+
+if __name__ == '__main__':
+    cmd, cmdkwargs = parse_args()
+    main(cmd, cmdkwargs)
diff --git a/Tools/c-analyzer/cpython/_generate.py b/Tools/c-analyzer/cpython/_generate.py
new file mode 100644
index 0000000..4c340ac
--- /dev/null
+++ b/Tools/c-analyzer/cpython/_generate.py
@@ -0,0 +1,329 @@
+# The code here consists of hacks for pre-populating the known.tsv file.
+
+from c_analyzer.parser.preprocessor import _iter_clean_lines
+from c_analyzer.parser.naive import (
+        iter_variables, parse_variable_declaration, find_variables,
+        )
+from c_analyzer.common.known import HEADER as KNOWN_HEADER
+from c_analyzer.common.info import UNKNOWN, ID
+from c_analyzer.variables import Variable
+from c_analyzer.util import write_tsv
+
+from . import SOURCE_DIRS, REPO_ROOT
+from .known import DATA_FILE as KNOWN_FILE
+from .files import iter_cpython_files
+
+
+POTS = ('char ', 'wchar_t ', 'int ', 'Py_ssize_t ')
+POTS += tuple('const ' + v for v in POTS)
+STRUCTS = ('PyTypeObject', 'PyObject', 'PyMethodDef', 'PyModuleDef', 'grammar')
+
+
+def _parse_global(line, funcname=None):
+    line = line.strip()
+    if line.startswith('static '):
+        if '(' in line and '[' not in line and ' = ' not in line:
+            return None, None
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith(('Py_LOCAL(', 'Py_LOCAL_INLINE(')):
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith('_Py_static_string('):
+        decl = line.strip(';').strip()
+        name = line.split('(')[1].split(',')[0].strip()
+    elif line.startswith('_Py_IDENTIFIER('):
+        decl = line.strip(';').strip()
+        name = 'PyId_' + line.split('(')[1].split(')')[0].strip()
+    elif funcname:
+        return None, None
+
+    # global-only
+    elif line.startswith('PyAPI_DATA('):  # only in .h files
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith('extern '):  # only in .h files
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith('PyDoc_VAR('):
+        decl = line.strip(';').strip()
+        name = line.split('(')[1].split(')')[0].strip()
+    elif line.startswith(POTS):  # implied static
+        if '(' in line and '[' not in line and ' = ' not in line:
+            return None, None
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith(STRUCTS) and line.endswith(' = {'):  # implied static
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith(STRUCTS) and line.endswith(' = NULL;'):  # implied static
+        name, decl = parse_variable_declaration(line)
+    elif line.startswith('struct '):
+        if not line.endswith(' = {'):
+            return None, None
+        if not line.partition(' ')[2].startswith(STRUCTS):
+            return None, None
+        # implied static
+        name, decl = parse_variable_declaration(line)
+
+    # file-specific
+    elif line.startswith(('SLOT1BINFULL(', 'SLOT1BIN(')):
+        # Objects/typeobject.c
+        funcname = line.split('(')[1].split(',')[0]
+        return [
+                ('op_id', funcname, '_Py_static_string(op_id, OPSTR)'),
+                ('rop_id', funcname, '_Py_static_string(op_id, OPSTR)'),
+                ]
+    elif line.startswith('WRAP_METHOD('):
+        # Objects/weakrefobject.c
+        funcname, name = (v.strip() for v in line.split('(')[1].split(')')[0].split(','))
+        return [
+                ('PyId_' + name, funcname, f'_Py_IDENTIFIER({name})'),
+                ]
+
+    else:
+        return None, None
+    return name, decl
+
+
+def _pop_cached(varcache, filename, funcname, name, *,
+                _iter_variables=iter_variables,
+                ):
+    # Look for the file.
+    try:
+        cached = varcache[filename]
+    except KeyError:
+        cached = varcache[filename] = {}
+        for variable in _iter_variables(filename,
+                                        parse_variable=_parse_global,
+                                        ):
+            variable._isglobal = True
+            cached[variable.id] = variable
+        for var in cached:
+            print(' ', var)
+
+    # Look for the variable.
+    if funcname == UNKNOWN:
+        for varid in cached:
+            if varid.name == name:
+                break
+        else:
+            return None
+        return cached.pop(varid)
+    else:
+        return cached.pop((filename, funcname, name), None)
+
+
+def find_matching_variable(varid, varcache, allfilenames, *,
+                           _pop_cached=_pop_cached,
+                           ):
+    if varid.filename and varid.filename != UNKNOWN:
+        filenames = [varid.filename]
+    else:
+        filenames = allfilenames
+    for filename in filenames:
+        variable = _pop_cached(varcache, filename, varid.funcname, varid.name)
+        if variable is not None:
+            return variable
+    else:
+        if varid.filename and varid.filename != UNKNOWN and varid.funcname is None:
+            for filename in allfilenames:
+                if not filename.endswith('.h'):
+                    continue
+                variable = _pop_cached(varcache, filename, None, varid.name)
+                if variable is not None:
+                    return variable
+        return None
+
+
+MULTILINE = {
+    # Python/Python-ast.c
+    'Load_singleton': 'PyObject *',
+    'Store_singleton': 'PyObject *',
+    'Del_singleton': 'PyObject *',
+    'AugLoad_singleton': 'PyObject *',
+    'AugStore_singleton': 'PyObject *',
+    'Param_singleton': 'PyObject *',
+    'And_singleton': 'PyObject *',
+    'Or_singleton': 'PyObject *',
+    'Add_singleton': 'static PyObject *',
+    'Sub_singleton': 'static PyObject *',
+    'Mult_singleton': 'static PyObject *',
+    'MatMult_singleton': 'static PyObject *',
+    'Div_singleton': 'static PyObject *',
+    'Mod_singleton': 'static PyObject *',
+    'Pow_singleton': 'static PyObject *',
+    'LShift_singleton': 'static PyObject *',
+    'RShift_singleton': 'static PyObject *',
+    'BitOr_singleton': 'static PyObject *',
+    'BitXor_singleton': 'static PyObject *',
+    'BitAnd_singleton': 'static PyObject *',
+    'FloorDiv_singleton': 'static PyObject *',
+    'Invert_singleton': 'static PyObject *',
+    'Not_singleton': 'static PyObject *',
+    'UAdd_singleton': 'static PyObject *',
+    'USub_singleton': 'static PyObject *',
+    'Eq_singleton': 'static PyObject *',
+    'NotEq_singleton': 'static PyObject *',
+    'Lt_singleton': 'static PyObject *',
+    'LtE_singleton': 'static PyObject *',
+    'Gt_singleton': 'static PyObject *',
+    'GtE_singleton': 'static PyObject *',
+    'Is_singleton': 'static PyObject *',
+    'IsNot_singleton': 'static PyObject *',
+    'In_singleton': 'static PyObject *',
+    'NotIn_singleton': 'static PyObject *',
+    # Python/symtable.c
+    'top': 'static identifier ',
+    'lambda': 'static identifier ',
+    'genexpr': 'static identifier ',
+    'listcomp': 'static identifier ',
+    'setcomp': 'static identifier ',
+    'dictcomp': 'static identifier ',
+    '__class__': 'static identifier ',
+    # Python/compile.c
+    '__doc__': 'static PyObject *',
+    '__annotations__': 'static PyObject *',
+    # Objects/floatobject.c
+    'double_format': 'static float_format_type ',
+    'float_format': 'static float_format_type ',
+    'detected_double_format': 'static float_format_type ',
+    'detected_float_format': 'static float_format_type ',
+    # Parser/listnode.c
+    'level': 'static int ',
+    'atbol': 'static int ',
+    # Python/dtoa.c
+    'private_mem': 'static double private_mem[PRIVATE_mem]',
+    'pmem_next': 'static double *',
+    # Modules/_weakref.c
+    'weakref_functions': 'static PyMethodDef ',
+}
+INLINE = {
+    # Modules/_tracemalloc.c
+    'allocators': 'static struct { PyMemAllocatorEx mem; PyMemAllocatorEx raw; PyMemAllocatorEx obj; } ',
+    # Modules/faulthandler.c
+    'fatal_error': 'static struct { int enabled; PyObject *file; int fd; int all_threads; PyInterpreterState *interp; void *exc_handler; } ',
+    'thread': 'static struct { PyObject *file; int fd; PY_TIMEOUT_T timeout_us; int repeat; PyInterpreterState *interp; int exit; char *header; size_t header_len; PyThread_type_lock cancel_event; PyThread_type_lock running; } ',
+    # Modules/signalmodule.c
+    'Handlers': 'static volatile struct { _Py_atomic_int tripped; PyObject *func; } Handlers[NSIG]',
+    'wakeup': 'static volatile struct { SOCKET_T fd; int warn_on_full_buffer; int use_send; } ',
+    # Python/dynload_shlib.c
+    'handles': 'static struct { dev_t dev; ino_t ino; void *handle; } handles[128]',
+    # Objects/obmalloc.c
+    '_PyMem_Debug': 'static struct { debug_alloc_api_t raw; debug_alloc_api_t mem; debug_alloc_api_t obj; } ',
+    # Python/bootstrap_hash.c
+    'urandom_cache': 'static struct { int fd; dev_t st_dev; ino_t st_ino; } ',
+    }
+FUNC = {
+    # Objects/object.c
+    '_Py_abstract_hack': 'Py_ssize_t (*_Py_abstract_hack)(PyObject *)',
+    # Parser/myreadline.c
+    'PyOS_InputHook': 'int (*PyOS_InputHook)(void)',
+    # Python/pylifecycle.c
+    '_PyOS_mystrnicmp_hack': 'int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t)',
+    # Parser/myreadline.c
+    'PyOS_ReadlineFunctionPointer': 'char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *)',
+    }
+IMPLIED = {
+    # Objects/boolobject.c
+    '_Py_FalseStruct': 'static struct _longobject ',
+    '_Py_TrueStruct': 'static struct _longobject ',
+    # Modules/config.c
+    '_PyImport_Inittab': 'struct _inittab _PyImport_Inittab[]',
+    }
+GLOBALS = {}
+GLOBALS.update(MULTILINE)
+GLOBALS.update(INLINE)
+GLOBALS.update(FUNC)
+GLOBALS.update(IMPLIED)
+
+LOCALS = {
+    'buildinfo': ('Modules/getbuildinfo.c',
+                  'Py_GetBuildInfo',
+                  'static char buildinfo[50 + sizeof(GITVERSION) + ((sizeof(GITTAG) > sizeof(GITBRANCH)) ?  sizeof(GITTAG) : sizeof(GITBRANCH))]'),
+    'methods': ('Python/codecs.c',
+                '_PyCodecRegistry_Init',
+                'static struct { char *name; PyMethodDef def; } methods[]'),
+    }
+
+
+def _known(symbol):
+    if symbol.funcname:
+        if symbol.funcname != UNKNOWN or symbol.filename != UNKNOWN:
+            raise KeyError(symbol.name)
+        filename, funcname, decl = LOCALS[symbol.name]
+        varid = ID(filename, funcname, symbol.name)
+    elif not symbol.filename or symbol.filename == UNKNOWN:
+        raise KeyError(symbol.name)
+    else:
+        varid = symbol.id
+        try:
+            decl = GLOBALS[symbol.name]
+        except KeyError:
+
+            if symbol.name.endswith('_methods'):
+                decl = 'static PyMethodDef '
+            elif symbol.filename == 'Objects/exceptions.c' and symbol.name.startswith(('PyExc_', '_PyExc_')):
+                decl = 'static PyTypeObject '
+            else:
+                raise
+    if symbol.name not in decl:
+        decl = decl + symbol.name
+    return Variable(varid, 'static', decl)
+
+
+def known_row(varid, decl):
+    return (
+            varid.filename,
+            varid.funcname or '-',
+            varid.name,
+            'variable',
+            decl,
+            )
+
+
+def known_rows(symbols, *,
+               cached=True,
+               _get_filenames=iter_cpython_files,
+               _find_match=find_matching_variable,
+               _find_symbols=find_variables,
+               _as_known=known_row,
+               ):
+    filenames = list(_get_filenames())
+    cache = {}
+    if cached:
+        for symbol in symbols:
+            try:
+                found = _known(symbol)
+            except KeyError:
+                found = _find_match(symbol, cache, filenames)
+                if found is None:
+                    found = Variable(symbol.id, UNKNOWN, UNKNOWN)
+            yield _as_known(found.id, found.vartype)
+    else:
+        raise NotImplementedError  # XXX incorporate KNOWN
+        for variable in _find_symbols(symbols, filenames,
+                                      srccache=cache,
+                                      parse_variable=_parse_global,
+                                      ):
+            #variable = variable._replace(
+            #    filename=os.path.relpath(variable.filename, REPO_ROOT))
+            if variable.funcname == UNKNOWN:
+                print(variable)
+            if variable.vartype== UNKNOWN:
+                print(variable)
+            yield _as_known(variable.id, variable.vartype)
+
+
+def generate(symbols, filename=None, *,
+             _generate_rows=known_rows,
+             _write_tsv=write_tsv,
+             ):
+    if not filename:
+        filename = KNOWN_FILE + '.new'
+
+    rows = _generate_rows(symbols)
+    _write_tsv(filename, KNOWN_HEADER, rows)
+
+
+if __name__ == '__main__':
+    from c_symbols import binary
+    symbols = binary.iter_symbols(
+            binary.PYTHON,
+            find_local_symbol=None,
+            )
+    generate(symbols)
diff --git a/Tools/c-analyzer/cpython/files.py b/Tools/c-analyzer/cpython/files.py
new file mode 100644
index 0000000..543097a
--- /dev/null
+++ b/Tools/c-analyzer/cpython/files.py
@@ -0,0 +1,29 @@
+from c_analyzer.common.files import (
+        C_SOURCE_SUFFIXES, walk_tree, iter_files_by_suffix,
+        )
+
+from . import SOURCE_DIRS, REPO_ROOT
+
+# XXX need tests:
+# * iter_files()
+
+
+def iter_files(*,
+               walk=walk_tree,
+               _files=iter_files_by_suffix,
+               ):
+    """Yield each file in the tree for each of the given directory names."""
+    excludedtrees = [
+        os.path.join('Include', 'cpython', ''),
+        ]
+    def is_excluded(filename):
+        for root in excludedtrees:
+            if filename.startswith(root):
+                return True
+        return False
+    for filename in _files(SOURCE_DIRS, C_SOURCE_SUFFIXES, REPO_ROOT,
+                           walk=walk,
+                           ):
+        if is_excluded(filename):
+            continue
+        yield filename
diff --git a/Tools/c-analyzer/cpython/find.py b/Tools/c-analyzer/cpython/find.py
new file mode 100644
index 0000000..a7bc0b4
--- /dev/null
+++ b/Tools/c-analyzer/cpython/find.py
@@ -0,0 +1,101 @@
+import os.path
+
+from c_analyzer.common import files
+from c_analyzer.common.info import UNKNOWN, ID
+from c_analyzer.variables import find as _common
+
+from . import SOURCE_DIRS, PYTHON, REPO_ROOT
+from .known import (
+    from_file as known_from_file,
+    DATA_FILE as KNOWN_FILE,
+    )
+from .supported import (
+        ignored_from_file, IGNORED_FILE, is_supported, _is_object,
+        )
+
+# XXX need tests:
+# * vars_from_binary()
+# * vars_from_source()
+# * supported_vars()
+
+
+def _handle_id(filename, funcname, name, *,
+               _relpath=os.path.relpath,
+               ):
+    filename = _relpath(filename, REPO_ROOT)
+    return ID(filename, funcname, name)
+
+
+def vars_from_binary(*,
+                     known=KNOWN_FILE,
+                     _known_from_file=known_from_file,
+                     _iter_files=files.iter_files_by_suffix,
+                     _iter_vars=_common.vars_from_binary,
+                     ):
+    """Yield a Variable for each found Symbol.
+
+    Details are filled in from the given "known" variables and types.
+    """
+    if isinstance(known, str):
+        known = _known_from_file(known)
+    dirnames = SOURCE_DIRS
+    suffixes = ('.c',)
+    filenames = _iter_files(dirnames, suffixes)
+    # XXX For now we only use known variables (no source lookup).
+    filenames = None
+    yield from _iter_vars(PYTHON,
+                          known=known,
+                          filenames=filenames,
+                          handle_id=_handle_id,
+                          check_filename=(lambda n: True),
+                          )
+
+
+def vars_from_source(*,
+                     preprocessed=None,
+                     known=KNOWN_FILE,
+                     _known_from_file=known_from_file,
+                     _iter_files=files.iter_files_by_suffix,
+                     _iter_vars=_common.vars_from_source,
+                     ):
+    """Yield a Variable for each declaration in the raw source code.
+
+    Details are filled in from the given "known" variables and types.
+    """
+    if isinstance(known, str):
+        known = _known_from_file(known)
+    dirnames = SOURCE_DIRS
+    suffixes = ('.c',)
+    filenames = _iter_files(dirnames, suffixes)
+    yield from _iter_vars(filenames,
+                          preprocessed=preprocessed,
+                          known=known,
+                          handle_id=_handle_id,
+                          )
+
+
+def supported_vars(*,
+                   known=KNOWN_FILE,
+                   ignored=IGNORED_FILE,
+                   skip_objects=False,
+                   _known_from_file=known_from_file,
+                   _ignored_from_file=ignored_from_file,
+                   _iter_vars=vars_from_binary,
+                   _is_supported=is_supported,
+                   ):
+    """Yield (var, is supported) for each found variable."""
+    if isinstance(known, str):
+        known = _known_from_file(known)
+    if isinstance(ignored, str):
+        ignored = _ignored_from_file(ignored)
+
+    for var in _iter_vars(known=known):
+        if not var.isglobal:
+            continue
+        elif var.vartype == UNKNOWN:
+            yield var, None
+        # XXX Support proper filters instead.
+        elif skip_objects and _is_object(found.vartype):
+            continue
+        else:
+            yield var, _is_supported(var, ignored, known)
diff --git a/Tools/c-analyzer/cpython/known.py b/Tools/c-analyzer/cpython/known.py
new file mode 100644
index 0000000..c3cc2c0
--- /dev/null
+++ b/Tools/c-analyzer/cpython/known.py
@@ -0,0 +1,66 @@
+import csv
+import os.path
+
+from c_analyzer.parser.declarations import extract_storage
+from c_analyzer.variables import known as _common
+from c_analyzer.variables.info import Variable
+
+from . import DATA_DIR
+
+
+# XXX need tests:
+# * from_file()
+# * look_up_variable()
+
+
+DATA_FILE = os.path.join(DATA_DIR, 'known.tsv')
+
+
+def _get_storage(decl, infunc):
+    # statics
+    if decl.startswith(('Py_LOCAL(', 'Py_LOCAL_INLINE(')):
+        return 'static'
+    if decl.startswith(('_Py_IDENTIFIER(', '_Py_static_string(')):
+        return 'static'
+    if decl.startswith('PyDoc_VAR('):
+        return 'static'
+    if decl.startswith(('SLOT1BINFULL(', 'SLOT1BIN(')):
+        return 'static'
+    if decl.startswith('WRAP_METHOD('):
+        return 'static'
+    # public extern
+    if decl.startswith('PyAPI_DATA('):
+        return 'extern'
+    # Fall back to the normal handler.
+    return extract_storage(decl, infunc=infunc)
+
+
+def _handle_var(varid, decl):
+#    if varid.name == 'id' and decl == UNKNOWN:
+#        # None of these are variables.
+#        decl = 'int id';
+    storage = _get_storage(decl, varid.funcname)
+    return Variable(varid, storage, decl)
+
+
+def from_file(infile=DATA_FILE, *,
+              _from_file=_common.from_file,
+              _handle_var=_handle_var,
+              ):
+    """Return the info for known declarations in the given file."""
+    return _from_file(infile, handle_var=_handle_var)
+
+
+def look_up_variable(varid, knownvars, *,
+                     _lookup=_common.look_up_variable,
+                     ):
+    """Return the known variable matching the given ID.
+
+    "knownvars" is a mapping of ID to Variable.
+
+    "match_files" is used to verify if two filenames point to
+    the same file.
+
+    If no match is found then None is returned.
+    """
+    return _lookup(varid, knownvars)
diff --git a/Tools/c-analyzer/cpython/supported.py b/Tools/c-analyzer/cpython/supported.py
new file mode 100644
index 0000000..18786ee
--- /dev/null
+++ b/Tools/c-analyzer/cpython/supported.py
@@ -0,0 +1,398 @@
+import os.path
+import re
+
+from c_analyzer.common.info import ID
+from c_analyzer.common.util import read_tsv, write_tsv
+
+from . import DATA_DIR
+
+# XXX need tests:
+# * generate / script
+
+
+IGNORED_FILE = os.path.join(DATA_DIR, 'ignored.tsv')
+
+IGNORED_COLUMNS = ('filename', 'funcname', 'name', 'kind', 'reason')
+IGNORED_HEADER = '\t'.join(IGNORED_COLUMNS)
+
+# XXX Move these to ignored.tsv.
+IGNORED = {
+        # global
+        'PyImport_FrozenModules': 'process-global',
+        'M___hello__': 'process-global',
+        'inittab_copy': 'process-global',
+        'PyHash_Func': 'process-global',
+        '_Py_HashSecret_Initialized': 'process-global',
+        '_TARGET_LOCALES': 'process-global',
+
+        # startup (only changed before/during)
+        '_PyRuntime': 'runtime startup',
+        'runtime_initialized': 'runtime startup',
+        'static_arg_parsers': 'runtime startup',
+        'orig_argv': 'runtime startup',
+        'opt_ptr': 'runtime startup',
+        '_preinit_warnoptions': 'runtime startup',
+        '_Py_StandardStreamEncoding': 'runtime startup',
+        'Py_FileSystemDefaultEncoding': 'runtime startup',
+        '_Py_StandardStreamErrors': 'runtime startup',
+        'Py_FileSystemDefaultEncodeErrors': 'runtime startup',
+        'Py_BytesWarningFlag': 'runtime startup',
+        'Py_DebugFlag': 'runtime startup',
+        'Py_DontWriteBytecodeFlag': 'runtime startup',
+        'Py_FrozenFlag': 'runtime startup',
+        'Py_HashRandomizationFlag': 'runtime startup',
+        'Py_IgnoreEnvironmentFlag': 'runtime startup',
+        'Py_InspectFlag': 'runtime startup',
+        'Py_InteractiveFlag': 'runtime startup',
+        'Py_IsolatedFlag': 'runtime startup',
+        'Py_NoSiteFlag': 'runtime startup',
+        'Py_NoUserSiteDirectory': 'runtime startup',
+        'Py_OptimizeFlag': 'runtime startup',
+        'Py_QuietFlag': 'runtime startup',
+        'Py_UTF8Mode': 'runtime startup',
+        'Py_UnbufferedStdioFlag': 'runtime startup',
+        'Py_VerboseFlag': 'runtime startup',
+        '_Py_path_config': 'runtime startup',
+        '_PyOS_optarg': 'runtime startup',
+        '_PyOS_opterr': 'runtime startup',
+        '_PyOS_optind': 'runtime startup',
+        '_Py_HashSecret': 'runtime startup',
+
+        # REPL
+        '_PyOS_ReadlineLock': 'repl',
+        '_PyOS_ReadlineTState': 'repl',
+
+        # effectively const
+        'tracemalloc_empty_traceback': 'const',
+        '_empty_bitmap_node': 'const',
+        'posix_constants_pathconf': 'const',
+        'posix_constants_confstr': 'const',
+        'posix_constants_sysconf': 'const',
+        '_PySys_ImplCacheTag': 'const',
+        '_PySys_ImplName': 'const',
+        'PyImport_Inittab': 'const',
+        '_PyImport_DynLoadFiletab': 'const',
+        '_PyParser_Grammar': 'const',
+        'Py_hexdigits': 'const',
+        '_PyImport_Inittab': 'const',
+        '_PyByteArray_empty_string': 'const',
+        '_PyLong_DigitValue': 'const',
+        '_Py_SwappedOp': 'const',
+        'PyStructSequence_UnnamedField': 'const',
+
+        # signals are main-thread only
+        'faulthandler_handlers': 'signals are main-thread only',
+        'user_signals': 'signals are main-thread only',
+        'wakeup': 'signals are main-thread only',
+
+        # hacks
+        '_PySet_Dummy': 'only used as a placeholder',
+        }
+
+BENIGN = 'races here are benign and unlikely'
+
+
+def is_supported(variable, ignored=None, known=None, *,
+                 _ignored=(lambda *a, **k: _is_ignored(*a, **k)),
+                 _vartype_okay=(lambda *a, **k: _is_vartype_okay(*a, **k)),
+                 ):
+    """Return True if the given global variable is okay in CPython."""
+    if _ignored(variable,
+                ignored and ignored.get('variables')):
+        return True
+    elif _vartype_okay(variable.vartype,
+                       ignored.get('types')):
+        return True
+    else:
+        return False
+
+
+def _is_ignored(variable, ignoredvars=None, *,
+                _IGNORED=IGNORED,
+                ):
+    """Return the reason if the variable is a supported global.
+
+    Return None if the variable is not a supported global.
+    """
+    if ignoredvars and (reason := ignoredvars.get(variable.id)):
+        return reason
+
+    if variable.funcname is None:
+        if reason := _IGNORED.get(variable.name):
+            return reason
+
+    # compiler
+    if variable.filename == 'Python/graminit.c':
+        if variable.vartype.startswith('static state '):
+            return 'compiler'
+    if variable.filename == 'Python/symtable.c':
+        if variable.vartype.startswith('static identifier '):
+            return 'compiler'
+    if variable.filename == 'Python/Python-ast.c':
+        # These should be const.
+        if variable.name.endswith('_field'):
+            return 'compiler'
+        if variable.name.endswith('_attribute'):
+            return 'compiler'
+
+    # other
+    if variable.filename == 'Python/dtoa.c':
+        # guarded by lock?
+        if variable.name in ('p5s', 'freelist'):
+            return 'dtoa is thread-safe?'
+        if variable.name in ('private_mem', 'pmem_next'):
+            return 'dtoa is thread-safe?'
+    if variable.filename == 'Python/thread.c':
+        # Threads do not become an issue until after these have been set
+        # and these never get changed after that.
+        if variable.name in ('initialized', 'thread_debug'):
+            return 'thread-safe'
+    if variable.filename == 'Python/getversion.c':
+        if variable.name == 'version':
+            # Races are benign here, as well as unlikely.
+            return BENIGN
+    if variable.filename == 'Python/fileutils.c':
+        if variable.name == 'force_ascii':
+            return BENIGN
+        if variable.name == 'ioctl_works':
+            return BENIGN
+        if variable.name == '_Py_open_cloexec_works':
+            return BENIGN
+    if variable.filename == 'Python/codecs.c':
+        if variable.name == 'ucnhash_CAPI':
+            return BENIGN
+    if variable.filename == 'Python/bootstrap_hash.c':
+        if variable.name == 'getrandom_works':
+            return BENIGN
+    if variable.filename == 'Objects/unicodeobject.c':
+        if variable.name == 'ucnhash_CAPI':
+            return BENIGN
+        if variable.name == 'bloom_linebreak':
+            # *mostly* benign
+            return BENIGN
+    if variable.filename == 'Modules/getbuildinfo.c':
+        if variable.name == 'buildinfo':
+            # The static is used for pre-allocation.
+            return BENIGN
+    if variable.filename == 'Modules/posixmodule.c':
+        if variable.name == 'ticks_per_second':
+            return BENIGN
+        if variable.name == 'dup3_works':
+            return BENIGN
+    if variable.filename == 'Modules/timemodule.c':
+        if variable.name == 'ticks_per_second':
+            return BENIGN
+    if variable.filename == 'Objects/longobject.c':
+        if variable.name == 'log_base_BASE':
+            return BENIGN
+        if variable.name == 'convwidth_base':
+            return BENIGN
+        if variable.name == 'convmultmax_base':
+            return BENIGN
+
+    return None
+
+
+def _is_vartype_okay(vartype, ignoredtypes=None):
+    if _is_object(vartype):
+        return None
+
+    if vartype.startswith('static const '):
+        return 'const'
+    if vartype.startswith('const '):
+        return 'const'
+
+    # components for TypeObject definitions
+    for name in ('PyMethodDef', 'PyGetSetDef', 'PyMemberDef'):
+        if name in vartype:
+            return 'const'
+    for name in ('PyNumberMethods', 'PySequenceMethods', 'PyMappingMethods',
+                 'PyBufferProcs', 'PyAsyncMethods'):
+        if name in vartype:
+            return 'const'
+    for name in ('slotdef', 'newfunc'):
+        if name in vartype:
+            return 'const'
+
+    # structseq
+    for name in ('PyStructSequence_Desc', 'PyStructSequence_Field'):
+        if name in vartype:
+            return 'const'
+
+    # other definiitions
+    if 'PyModuleDef' in vartype:
+        return 'const'
+
+    # thread-safe
+    if '_Py_atomic_int' in vartype:
+        return 'thread-safe'
+    if 'pthread_condattr_t' in vartype:
+        return 'thread-safe'
+
+    # startup
+    if '_Py_PreInitEntry' in vartype:
+        return 'startup'
+
+    # global
+#    if 'PyMemAllocatorEx' in vartype:
+#        return True
+
+    # others
+#    if 'PyThread_type_lock' in vartype:
+#        return True
+
+    # XXX ???
+    # _Py_tss_t
+    # _Py_hashtable_t
+    # stack_t
+    # _PyUnicode_Name_CAPI
+
+    # functions
+    if '(' in vartype and '[' not in vartype:
+        return 'function pointer'
+
+    # XXX finish!
+    # * allow const values?
+    #raise NotImplementedError
+    return None
+
+
+PYOBJECT_RE = re.compile(r'''
+        ^
+        (
+            # must start with "static "
+            static \s+
+            (
+                identifier
+            )
+            \b
+        ) |
+        (
+            # may start with "static "
+            ( static \s+ )?
+            (
+                .*
+                (
+                    PyObject |
+                    PyTypeObject |
+                    _? Py \w+ Object |
+                    _PyArg_Parser |
+                    _Py_Identifier |
+                    traceback_t |
+                    PyAsyncGenASend |
+                    _PyAsyncGenWrappedValue |
+                    PyContext |
+                    method_cache_entry
+                )
+                \b
+            ) |
+            (
+                (
+                    _Py_IDENTIFIER |
+                    _Py_static_string
+                )
+                [(]
+            )
+        )
+        ''', re.VERBOSE)
+
+
+def _is_object(vartype):
+    if 'PyDictKeysObject' in vartype:
+        return False
+    if PYOBJECT_RE.match(vartype):
+        return True
+    if vartype.endswith((' _Py_FalseStruct', ' _Py_TrueStruct')):
+        return True
+
+    # XXX Add more?
+
+    #for part in vartype.split():
+    #    # XXX const is automatic True?
+    #    if part == 'PyObject' or part.startswith('PyObject['):
+    #        return True
+    return False
+
+
+def ignored_from_file(infile, *,
+                      _read_tsv=read_tsv,
+                      ):
+    """Yield a Variable for each ignored var in the file."""
+    ignored = {
+        'variables': {},
+        #'types': {},
+        #'constants': {},
+        #'macros': {},
+        }
+    for row in _read_tsv(infile, IGNORED_HEADER):
+        filename, funcname, name, kind, reason = row
+        if not funcname or funcname == '-':
+            funcname = None
+        id = ID(filename, funcname, name)
+        if kind == 'variable':
+            values = ignored['variables']
+        else:
+            raise ValueError(f'unsupported kind in row {row}')
+        values[id] = reason
+    return ignored
+
+
+##################################
+# generate
+
+def _get_row(varid, reason):
+    return (
+            varid.filename,
+            varid.funcname or '-',
+            varid.name,
+            'variable',
+            str(reason),
+            )
+
+
+def _get_rows(variables, ignored=None, *,
+              _as_row=_get_row,
+              _is_ignored=_is_ignored,
+              _vartype_okay=_is_vartype_okay,
+              ):
+    count = 0
+    for variable in variables:
+        reason = _is_ignored(variable,
+                             ignored and ignored.get('variables'),
+                             )
+        if not reason:
+            reason = _vartype_okay(variable.vartype,
+                                   ignored and ignored.get('types'))
+        if not reason:
+            continue
+
+        print(' ', variable, repr(reason))
+        yield _as_row(variable.id, reason)
+        count += 1
+    print(f'total: {count}')
+
+
+def _generate_ignored_file(variables, filename=None, *,
+                           _generate_rows=_get_rows,
+                           _write_tsv=write_tsv,
+                           ):
+    if not filename:
+        filename = IGNORED_FILE + '.new'
+    rows = _generate_rows(variables)
+    _write_tsv(filename, IGNORED_HEADER, rows)
+
+
+if __name__ == '__main__':
+    from cpython import SOURCE_DIRS
+    from cpython.known import (
+        from_file as known_from_file,
+        DATA_FILE as KNOWN_FILE,
+        )
+    # XXX This is wrong!
+    from . import find
+    known = known_from_file(KNOWN_FILE)
+    knownvars = (known or {}).get('variables')
+    variables = find.globals_from_binary(knownvars=knownvars,
+                                         dirnames=SOURCE_DIRS)
+
+    _generate_ignored_file(variables)
diff --git a/Tools/c-globals/ignored-globals.txt b/Tools/c-analyzer/ignored-globals.txt
similarity index 100%
rename from Tools/c-globals/ignored-globals.txt
rename to Tools/c-analyzer/ignored-globals.txt
diff --git a/Tools/c-analyzer/ignored.tsv b/Tools/c-analyzer/ignored.tsv
new file mode 100644
index 0000000..a0e0e50
--- /dev/null
+++ b/Tools/c-analyzer/ignored.tsv
@@ -0,0 +1 @@
+filename	funcname	name	kind	reason
diff --git a/Tools/c-analyzer/known.tsv b/Tools/c-analyzer/known.tsv
new file mode 100644
index 0000000..db44080
--- /dev/null
+++ b/Tools/c-analyzer/known.tsv
@@ -0,0 +1,1930 @@
+filename	funcname	name	kind	declaration
+Modules/_abc.c	-	_abc_data_type	variable	static PyTypeObject _abc_data_type
+Modules/_abc.c	-	abc_invalidation_counter	variable	static unsigned long long abc_invalidation_counter
+Modules/_abc.c	-	_abcmodule	variable	static struct PyModuleDef _abcmodule
+Python/import.c	import_find_and_load	accumulated	variable	static _PyTime_t accumulated
+Modules/itertoolsmodule.c	-	accumulate_methods	variable	static PyMethodDef accumulate_methods
+Modules/itertoolsmodule.c	-	accumulate_type	variable	static PyTypeObject accumulate_type
+Python/Python-ast.c	-	Add_singleton	variable	static PyObject *Add_singleton
+Python/Python-ast.c	-	Add_type	variable	static PyTypeObject *Add_type
+Objects/genobject.c	-	ag_asend_freelist	variable	static PyAsyncGenASend *ag_asend_freelist[_PyAsyncGen_MAXFREELIST]
+Objects/genobject.c	-	ag_asend_freelist_free	variable	static int ag_asend_freelist_free
+Objects/genobject.c	-	ag_value_freelist	variable	static _PyAsyncGenWrappedValue *ag_value_freelist[_PyAsyncGen_MAXFREELIST]
+Objects/genobject.c	-	ag_value_freelist_free	variable	static int ag_value_freelist_free
+Python/Python-ast.c	-	alias_fields	variable	static const char *alias_fields[]
+Python/Python-ast.c	-	alias_type	variable	static PyTypeObject *alias_type
+Modules/_tracemalloc.c	-	allocators	variable	static struct { PyMemAllocatorEx mem; PyMemAllocatorEx raw; PyMemAllocatorEx obj; } allocators
+Python/Python-ast.c	-	And_singleton	variable	static PyObject *And_singleton
+Python/Python-ast.c	-	And_type	variable	static PyTypeObject *And_type
+Python/Python-ast.c	-	AnnAssign_fields	variable	static const char *AnnAssign_fields[]
+Python/Python-ast.c	-	AnnAssign_type	variable	static PyTypeObject *AnnAssign_type
+Python/compile.c	-	__annotations__	variable	static PyObject *__annotations__
+Objects/obmalloc.c	-	arenas	variable	static struct arena_object* arenas
+Python/Python-ast.c	-	arg_attributes	variable	static const char *arg_attributes[]
+Python/Python-ast.c	-	arg_fields	variable	static const char *arg_fields[]
+Python/Python-ast.c	-	arg_type	variable	static PyTypeObject *arg_type
+Python/Python-ast.c	-	arguments_fields	variable	static const char *arguments_fields[]
+Python/Python-ast.c	-	arguments_type	variable	static PyTypeObject *arguments_type
+Python/Python-ast.c	-	Assert_fields	variable	static const char *Assert_fields[]
+Python/compile.c	compiler_assert	assertion_error	variable	static PyObject *assertion_error
+Python/Python-ast.c	-	Assert_type	variable	static PyTypeObject *Assert_type
+Python/Python-ast.c	-	Assign_fields	variable	static const char *Assign_fields[]
+Python/Python-ast.c	-	Assign_type	variable	static PyTypeObject *Assign_type
+Python/Python-ast.c	-	_astmodule	variable	static struct PyModuleDef _astmodule
+Python/Python-ast.c	-	AST_type	variable	static PyTypeObject AST_type
+Python/Python-ast.c	-	ast_type_getsets	variable	static PyGetSetDef ast_type_getsets[]
+Python/Python-ast.c	-	ast_type_methods	variable	static PyMethodDef ast_type_methods
+Python/Python-ast.c	-	AsyncFor_fields	variable	static const char *AsyncFor_fields[]
+Python/Python-ast.c	-	AsyncFor_type	variable	static PyTypeObject *AsyncFor_type
+Python/Python-ast.c	-	AsyncFunctionDef_fields	variable	static const char *AsyncFunctionDef_fields[]
+Python/Python-ast.c	-	AsyncFunctionDef_type	variable	static PyTypeObject *AsyncFunctionDef_type
+Objects/genobject.c	-	async_gen_as_async	variable	static PyAsyncMethods async_gen_as_async
+Objects/genobject.c	-	async_gen_asend_as_async	variable	static PyAsyncMethods async_gen_asend_as_async
+Objects/genobject.c	-	async_gen_asend_methods	variable	static PyMethodDef async_gen_asend_methods
+Objects/genobject.c	-	async_gen_athrow_as_async	variable	static PyAsyncMethods async_gen_athrow_as_async
+Objects/genobject.c	-	async_gen_athrow_methods	variable	static PyMethodDef async_gen_athrow_methods
+Objects/genobject.c	-	async_gen_getsetlist	variable	static PyGetSetDef async_gen_getsetlist[]
+Python/sysmodule.c	-	asyncgen_hooks_desc	variable	static PyStructSequence_Desc asyncgen_hooks_desc
+Python/sysmodule.c	-	asyncgen_hooks_fields	variable	static PyStructSequence_Field asyncgen_hooks_fields[]
+Python/sysmodule.c	-	AsyncGenHooksType	variable	static PyTypeObject AsyncGenHooksType
+Objects/genobject.c	-	async_gen_memberlist	variable	static PyMemberDef async_gen_memberlist[]
+Objects/genobject.c	-	async_gen_methods	variable	static PyMethodDef async_gen_methods
+Python/Python-ast.c	-	AsyncWith_fields	variable	static const char *AsyncWith_fields[]
+Python/Python-ast.c	-	AsyncWith_type	variable	static PyTypeObject *AsyncWith_type
+Parser/listnode.c	-	atbol	variable	static int atbol
+Modules/atexitmodule.c	-	atexit_methods	variable	static PyMethodDef atexit_methods
+Modules/atexitmodule.c	-	atexitmodule	variable	static struct PyModuleDef atexitmodule
+Modules/atexitmodule.c	-	atexit_slots	variable	static PyModuleDef_Slot atexit_slots[]
+Modules/_operator.c	-	attrgetter_methods	variable	static PyMethodDef attrgetter_methods
+Modules/_operator.c	-	attrgetter_type	variable	static PyTypeObject attrgetter_type
+Python/Python-ast.c	-	Attribute_fields	variable	static const char *Attribute_fields[]
+Python/Python-ast.c	-	Attribute_type	variable	static PyTypeObject *Attribute_type
+Python/Python-ast.c	-	AugAssign_fields	variable	static const char *AugAssign_fields[]
+Python/Python-ast.c	-	AugAssign_type	variable	static PyTypeObject *AugAssign_type
+Python/Python-ast.c	-	AugLoad_singleton	variable	static PyObject *AugLoad_singleton
+Python/Python-ast.c	-	AugLoad_type	variable	static PyTypeObject *AugLoad_type
+Python/Python-ast.c	-	AugStore_singleton	variable	static PyObject *AugStore_singleton
+Python/Python-ast.c	-	AugStore_type	variable	static PyTypeObject *AugStore_type
+Python/Python-ast.c	-	Await_fields	variable	static const char *Await_fields[]
+Python/Python-ast.c	-	Await_type	variable	static PyTypeObject *Await_type
+Objects/exceptions.c	-	BaseException_getset	variable	static PyGetSetDef BaseException_getset[]
+Objects/exceptions.c	-	BaseException_members	variable	static struct PyMemberDef BaseException_members[]
+Objects/exceptions.c	-	BaseException_methods	variable	static PyMethodDef BaseException_methods
+Modules/posixmodule.c	-	billion	variable	static PyObject *billion
+Python/Python-ast.c	-	BinOp_fields	variable	static const char *BinOp_fields[]
+Python/Python-ast.c	-	BinOp_type	variable	static PyTypeObject *BinOp_type
+Python/Python-ast.c	-	BitAnd_singleton	variable	static PyObject *BitAnd_singleton
+Python/Python-ast.c	-	BitAnd_type	variable	static PyTypeObject *BitAnd_type
+Python/Python-ast.c	-	BitOr_singleton	variable	static PyObject *BitOr_singleton
+Python/Python-ast.c	-	BitOr_type	variable	static PyTypeObject *BitOr_type
+Python/Python-ast.c	-	BitXor_singleton	variable	static PyObject *BitXor_singleton
+Python/Python-ast.c	-	BitXor_type	variable	static PyTypeObject *BitXor_type
+Objects/unicodeobject.c	-	bloom_linebreak	variable	static BLOOM_MASK bloom_linebreak
+Objects/boolobject.c	-	bool_as_number	variable	static PyNumberMethods bool_as_number
+Python/Python-ast.c	-	BoolOp_fields	variable	static const char *BoolOp_fields[]
+Python/Python-ast.c	-	boolop_type	variable	static PyTypeObject *boolop_type
+Python/Python-ast.c	-	BoolOp_type	variable	static PyTypeObject *BoolOp_type
+Python/_warnings.c	is_internal_frame	bootstrap_string	variable	static PyObject *bootstrap_string
+Python/Python-ast.c	-	Break_type	variable	static PyTypeObject *Break_type
+Modules/_io/bufferedio.c	-	bufferediobase_methods	variable	static PyMethodDef bufferediobase_methods
+Modules/_io/bufferedio.c	-	bufferedrandom_getset	variable	static PyGetSetDef bufferedrandom_getset[]
+Modules/_io/bufferedio.c	-	bufferedrandom_members	variable	static PyMemberDef bufferedrandom_members[]
+Modules/_io/bufferedio.c	-	bufferedrandom_methods	variable	static PyMethodDef bufferedrandom_methods
+Modules/_io/bufferedio.c	-	bufferedreader_getset	variable	static PyGetSetDef bufferedreader_getset[]
+Modules/_io/bufferedio.c	-	bufferedreader_members	variable	static PyMemberDef bufferedreader_members[]
+Modules/_io/bufferedio.c	-	bufferedreader_methods	variable	static PyMethodDef bufferedreader_methods
+Modules/_io/bufferedio.c	-	bufferedrwpair_getset	variable	static PyGetSetDef bufferedrwpair_getset[]
+Modules/_io/bufferedio.c	-	bufferedrwpair_methods	variable	static PyMethodDef bufferedrwpair_methods
+Modules/_io/bufferedio.c	-	bufferedwriter_getset	variable	static PyGetSetDef bufferedwriter_getset[]
+Modules/_io/bufferedio.c	-	bufferedwriter_members	variable	static PyMemberDef bufferedwriter_members[]
+Modules/_io/bufferedio.c	-	bufferedwriter_methods	variable	static PyMethodDef bufferedwriter_methods
+Modules/getbuildinfo.c	Py_GetBuildInfo	buildinfo	variable	static char buildinfo[50 + sizeof(GITVERSION) + ((sizeof(GITTAG) > sizeof(GITBRANCH)) ?  sizeof(GITTAG) : sizeof(GITBRANCH))]
+Python/bltinmodule.c	-	builtin_methods	variable	static PyMethodDef builtin_methods
+Python/bltinmodule.c	-	builtinsmodule	variable	static struct PyModuleDef builtinsmodule
+Python/import.c	PyImport_Import	builtins_str	variable	static PyObject *builtins_str
+Python/ceval.c	make_pending_calls	busy	variable	static int busy
+Objects/bytearrayobject.c	-	bytearray_as_buffer	variable	static PyBufferProcs bytearray_as_buffer
+Objects/bytearrayobject.c	-	bytearray_as_mapping	variable	static PyMappingMethods bytearray_as_mapping
+Objects/bytearrayobject.c	-	bytearray_as_number	variable	static PyNumberMethods bytearray_as_number
+Objects/bytearrayobject.c	-	bytearray_as_sequence	variable	static PySequenceMethods bytearray_as_sequence
+Objects/bytearrayobject.c	-	bytearrayiter_methods	variable	static PyMethodDef bytearrayiter_methods
+Objects/bytearrayobject.c	-	bytearray_methods	variable	static PyMethodDef bytearray_methods
+Objects/bytesobject.c	-	bytes_as_buffer	variable	static PyBufferProcs bytes_as_buffer
+Objects/bytesobject.c	-	bytes_as_mapping	variable	static PyMappingMethods bytes_as_mapping
+Objects/bytesobject.c	-	bytes_as_number	variable	static PyNumberMethods bytes_as_number
+Objects/bytesobject.c	-	bytes_as_sequence	variable	static PySequenceMethods bytes_as_sequence
+Modules/_io/bytesio.c	-	bytesiobuf_as_buffer	variable	static PyBufferProcs bytesiobuf_as_buffer
+Modules/_io/bytesio.c	-	bytesio_getsetlist	variable	static PyGetSetDef bytesio_getsetlist[]
+Modules/_io/bytesio.c	-	bytesio_methods	variable	static PyMethodDef bytesio_methods
+Objects/bytesobject.c	-	bytes_methods	variable	static PyMethodDef bytes_methods
+Python/thread_pthread.h	init_condattr	ca	variable	static pthread_condattr_t ca
+Python/Python-ast.c	-	Call_fields	variable	static const char *Call_fields[]
+Objects/iterobject.c	-	calliter_methods	variable	static PyMethodDef calliter_methods
+Python/Python-ast.c	-	Call_type	variable	static PyTypeObject *Call_type
+Objects/cellobject.c	-	cell_getsetlist	variable	static PyGetSetDef cell_getsetlist[]
+Modules/itertoolsmodule.c	-	chain_methods	variable	static PyMethodDef chain_methods
+Modules/itertoolsmodule.c	-	chain_type	variable	static PyTypeObject chain_type
+Objects/bytesobject.c	-	characters	variable	static PyBytesObject *characters[UCHAR_MAX + 1]
+Python/symtable.c	-	__class__	variable	static identifier __class__
+Python/Python-ast.c	-	ClassDef_fields	variable	static const char *ClassDef_fields[]
+Python/Python-ast.c	-	ClassDef_type	variable	static PyTypeObject *ClassDef_type
+Objects/funcobject.c	-	cm_getsetlist	variable	static PyGetSetDef cm_getsetlist[]
+Objects/funcobject.c	-	cm_memberlist	variable	static PyMemberDef cm_memberlist[]
+Python/Python-ast.c	-	cmpop_type	variable	static PyTypeObject *cmpop_type
+Modules/_codecsmodule.c	-	_codecs_functions	variable	static PyMethodDef _codecs_functions[]
+Modules/_codecsmodule.c	-	codecsmodule	variable	static struct PyModuleDef codecsmodule
+Objects/codeobject.c	-	code_memberlist	variable	static PyMemberDef code_memberlist[]
+Objects/codeobject.c	-	code_methods	variable	static PyMethodDef code_methods
+Modules/_collectionsmodule.c	-	_collectionsmodule	variable	static struct PyModuleDef _collectionsmodule
+Modules/itertoolsmodule.c	-	combinations_methods	variable	static PyMethodDef combinations_methods
+Modules/itertoolsmodule.c	-	combinations_type	variable	static PyTypeObject combinations_type
+Objects/typeobject.c	object_new	comma_id	variable	_Py_static_string(comma_id, "", "")
+Python/Python-ast.c	-	Compare_fields	variable	static const char *Compare_fields[]
+Python/Python-ast.c	-	Compare_type	variable	static PyTypeObject *Compare_type
+Objects/complexobject.c	-	complex_as_number	variable	static PyNumberMethods complex_as_number
+Objects/complexobject.c	-	complex_members	variable	static PyMemberDef complex_members[]
+Objects/complexobject.c	-	complex_methods	variable	static PyMethodDef complex_methods
+Python/Python-ast.c	-	comprehension_fields	variable	static const char *comprehension_fields[]
+Python/Python-ast.c	-	comprehension_type	variable	static PyTypeObject *comprehension_type
+Modules/itertoolsmodule.c	-	compress_methods	variable	static PyMethodDef compress_methods
+Modules/itertoolsmodule.c	-	compress_type	variable	static PyTypeObject compress_type
+Python/thread_pthread.h	-	condattr_monotonic	variable	static pthread_condattr_t *condattr_monotonic
+Python/Python-ast.c	-	Constant_fields	variable	static const char *Constant_fields[]
+Python/Python-ast.c	-	Constant_type	variable	static PyTypeObject *Constant_type
+Python/Python-ast.c	-	Continue_type	variable	static PyTypeObject *Continue_type
+Objects/longobject.c	PyLong_FromString	convmultmax_base	variable	static twodigits convmultmax_base[37]
+Objects/longobject.c	PyLong_FromString	convwidth_base	variable	static int convwidth_base[37]
+Objects/genobject.c	-	coro_as_async	variable	static PyAsyncMethods coro_as_async
+Objects/genobject.c	-	coro_getsetlist	variable	static PyGetSetDef coro_getsetlist[]
+Objects/genobject.c	-	coro_memberlist	variable	static PyMemberDef coro_memberlist[]
+Objects/genobject.c	-	coro_methods	variable	static PyMethodDef coro_methods
+Objects/genobject.c	-	coro_wrapper_methods	variable	static PyMethodDef coro_wrapper_methods
+Modules/itertoolsmodule.c	-	count_methods	variable	static PyMethodDef count_methods
+Modules/itertoolsmodule.c	-	count_type	variable	static PyTypeObject count_type
+Python/context.c	-	ctx_freelist	variable	static PyContext *ctx_freelist
+Python/context.c	-	ctx_freelist_len	variable	static int ctx_freelist_len
+Modules/itertoolsmodule.c	-	cwr_methods	variable	static PyMethodDef cwr_methods
+Modules/itertoolsmodule.c	-	cwr_type	variable	static PyTypeObject cwr_type
+Modules/itertoolsmodule.c	-	cycle_methods	variable	static PyMethodDef cycle_methods
+Modules/itertoolsmodule.c	-	cycle_type	variable	static PyTypeObject cycle_type
+Objects/obmalloc.c	new_arena	debug_stats	variable	static int debug_stats
+Modules/signalmodule.c	-	DefaultHandler	variable	static PyObject *DefaultHandler
+Modules/_collectionsmodule.c	-	defdict_members	variable	static PyMemberDef defdict_members[]
+Modules/_collectionsmodule.c	-	defdict_methods	variable	static PyMethodDef defdict_methods
+Modules/_collectionsmodule.c	-	defdict_type	variable	static PyTypeObject defdict_type
+Python/Python-ast.c	-	Delete_fields	variable	static const char *Delete_fields[]
+Python/Python-ast.c	-	Delete_type	variable	static PyTypeObject *Delete_type
+Python/Python-ast.c	-	Del_singleton	variable	static PyObject *Del_singleton
+Python/Python-ast.c	-	Del_type	variable	static PyTypeObject *Del_type
+Modules/_collectionsmodule.c	-	deque_as_number	variable	static PyNumberMethods deque_as_number
+Modules/_collectionsmodule.c	-	deque_as_sequence	variable	static PySequenceMethods deque_as_sequence
+Modules/_collectionsmodule.c	-	deque_getset	variable	static PyGetSetDef deque_getset[]
+Modules/_collectionsmodule.c	-	dequeiter_methods	variable	static PyMethodDef dequeiter_methods
+Modules/_collectionsmodule.c	-	dequeiter_type	variable	static PyTypeObject dequeiter_type
+Modules/_collectionsmodule.c	-	deque_methods	variable	static PyMethodDef deque_methods
+Modules/_collectionsmodule.c	-	dequereviter_type	variable	static PyTypeObject dequereviter_type
+Modules/_collectionsmodule.c	-	deque_type	variable	static PyTypeObject deque_type
+Objects/descrobject.c	-	descr_members	variable	static PyMemberDef descr_members[]
+Objects/descrobject.c	-	descr_methods	variable	static PyMethodDef descr_methods
+Modules/_abc.c	-	_destroy_def	variable	static PyMethodDef _destroy_def
+Objects/floatobject.c	-	detected_double_format	variable	static float_format_type detected_double_format
+Objects/floatobject.c	-	detected_float_format	variable	static float_format_type detected_float_format
+Objects/dictobject.c	-	dict_as_mapping	variable	static PyMappingMethods dict_as_mapping
+Objects/dictobject.c	-	dict_as_sequence	variable	static PySequenceMethods dict_as_sequence
+Python/symtable.c	-	dictcomp	variable	static identifier dictcomp
+Python/Python-ast.c	-	DictComp_fields	variable	static const char *DictComp_fields[]
+Python/Python-ast.c	-	DictComp_type	variable	static PyTypeObject *DictComp_type
+Python/Python-ast.c	-	Dict_fields	variable	static const char *Dict_fields[]
+Objects/dictobject.c	-	dictitems_as_sequence	variable	static PySequenceMethods dictitems_as_sequence
+Objects/dictobject.c	-	dictitems_methods	variable	static PyMethodDef dictitems_methods
+Objects/dictobject.c	-	dictiter_methods	variable	static PyMethodDef dictiter_methods
+Objects/dictobject.c	-	dictkeys_as_sequence	variable	static PySequenceMethods dictkeys_as_sequence
+Objects/dictobject.c	-	dictkeys_methods	variable	static PyMethodDef dictkeys_methods
+Python/Python-ast.c	-	Dict_type	variable	static PyTypeObject *Dict_type
+Objects/dictobject.c	-	dictvalues_as_sequence	variable	static PySequenceMethods dictvalues_as_sequence
+Objects/dictobject.c	-	dictvalues_methods	variable	static PyMethodDef dictvalues_methods
+Objects/dictobject.c	-	dictviews_as_number	variable	static PyNumberMethods dictviews_as_number
+Modules/posixmodule.c	-	DirEntry_members	variable	static PyMemberDef DirEntry_members[]
+Modules/posixmodule.c	-	DirEntry_methods	variable	static PyMethodDef DirEntry_methods
+Modules/posixmodule.c	-	DirEntryType	variable	static PyTypeObject DirEntryType
+Python/Python-ast.c	-	Div_singleton	variable	static PyObject *Div_singleton
+Python/Python-ast.c	-	Div_type	variable	static PyTypeObject *Div_type
+Python/compile.c	-	__doc__	variable	static PyObject *__doc__
+Objects/classobject.c	method_get_doc	docstr	variable	static PyObject *docstr
+Objects/classobject.c	instancemethod_get_doc	docstr	variable	static PyObject *docstr
+Python/compile.c	compiler_set_qualname	dot	variable	_Py_static_string(dot, ""."")
+Python/compile.c	compiler_set_qualname	dot_locals	variable	_Py_static_string(dot_locals, "".<locals>"")
+Objects/floatobject.c	-	double_format	variable	static float_format_type double_format
+Modules/itertoolsmodule.c	-	dropwhile_methods	variable	static PyMethodDef dropwhile_methods
+Modules/itertoolsmodule.c	-	dropwhile_type	variable	static PyTypeObject dropwhile_type
+Objects/setobject.c	-	_dummy_struct	variable	static PyObject _dummy_struct
+Modules/posixmodule.c	os_dup2_impl	dup3_works	variable	static int dup3_works
+Modules/_io/bufferedio.c	_PyIO_trap_eintr	eintr_int	variable	static PyObject *eintr_int
+Objects/sliceobject.c	-	ellipsis_methods	variable	static PyMethodDef ellipsis_methods
+Python/hamt.c	-	_empty_bitmap_node	variable	static PyHamtNode_Bitmap *_empty_bitmap_node
+Objects/setobject.c	-	emptyfrozenset	variable	static PyObject *emptyfrozenset
+Python/hamt.c	-	_empty_hamt	variable	static PyHamtObject *_empty_hamt
+Objects/dictobject.c	-	empty_keys_struct	variable	static PyDictKeysObject empty_keys_struct
+Objects/codeobject.c	PyCode_NewEmpty	emptystring	variable	static PyObject *emptystring
+Python/compile.c	compiler_from_import	empty_string	variable	static PyObject *empty_string
+Objects/dictobject.c	-	empty_values	variable	static PyObject *empty_values[1]
+Objects/unicodeobject.c	-	encoding_map_methods	variable	static PyMethodDef encoding_map_methods
+Objects/unicodeobject.c	-	EncodingMapType	variable	static PyTypeObject EncodingMapType
+Objects/enumobject.c	-	enum_methods	variable	static PyMethodDef enum_methods
+Python/Python-ast.c	-	Eq_singleton	variable	static PyObject *Eq_singleton
+Python/Python-ast.c	-	Eq_type	variable	static PyTypeObject *Eq_type
+Objects/exceptions.c	-	errnomap	variable	static PyObject *errnomap
+Modules/errnomodule.c	-	errno_methods	variable	static PyMethodDef errno_methods
+Modules/errnomodule.c	-	errnomodule	variable	static struct PyModuleDef errnomodule
+Modules/_localemodule.c	-	Error	variable	static PyObject *Error
+Python/Python-ast.c	-	excepthandler_attributes	variable	static const char *excepthandler_attributes[]
+Python/Python-ast.c	-	ExceptHandler_fields	variable	static const char *ExceptHandler_fields[]
+Python/Python-ast.c	-	excepthandler_type	variable	static PyTypeObject *excepthandler_type
+Python/Python-ast.c	-	ExceptHandler_type	variable	static PyTypeObject *ExceptHandler_type
+Modules/_threadmodule.c	-	ExceptHookArgs_desc	variable	static PyStructSequence_Desc ExceptHookArgs_desc
+Modules/_threadmodule.c	-	ExceptHookArgs_fields	variable	static PyStructSequence_Field ExceptHookArgs_fields[]
+Modules/_threadmodule.c	-	ExceptHookArgsType	variable	static PyTypeObject ExceptHookArgsType
+Objects/exceptions.c	_check_for_legacy_statements	exec_prefix	variable	static PyObject *exec_prefix
+Python/Python-ast.c	-	expr_attributes	variable	static const char *expr_attributes[]
+Python/Python-ast.c	-	expr_context_type	variable	static PyTypeObject *expr_context_type
+Python/Python-ast.c	-	Expression_fields	variable	static const char *Expression_fields[]
+Python/Python-ast.c	-	Expression_type	variable	static PyTypeObject *Expression_type
+Python/Python-ast.c	-	Expr_fields	variable	static const char *Expr_fields[]
+Python/Python-ast.c	-	expr_type	variable	static PyTypeObject *expr_type
+Python/Python-ast.c	-	Expr_type	variable	static PyTypeObject *Expr_type
+Python/import.c	-	extensions	variable	static PyObject *extensions
+Python/Python-ast.c	-	ExtSlice_fields	variable	static const char *ExtSlice_fields[]
+Python/Python-ast.c	-	ExtSlice_type	variable	static PyTypeObject *ExtSlice_type
+Objects/boolobject.c	-	false_str	variable	static PyObject *false_str
+Modules/faulthandler.c	-	fatal_error	variable	static struct { int enabled; PyObject *file; int fd; int all_threads; PyInterpreterState *interp; void *exc_handler; } fatal_error
+Modules/faulthandler.c	-	faulthandler_handlers	variable	static fault_handler_t faulthandler_handlers[]
+Objects/stringlib/unicode_format.h	-	fieldnameiter_methods	variable	static PyMethodDef fieldnameiter_methods
+Modules/_io/fileio.c	-	fileio_getsetlist	variable	static PyGetSetDef fileio_getsetlist[]
+Modules/_io/fileio.c	-	fileio_members	variable	static PyMemberDef fileio_members[]
+Modules/_io/fileio.c	-	fileio_methods	variable	static PyMethodDef fileio_methods
+Modules/itertoolsmodule.c	-	filterfalse_methods	variable	static PyMethodDef filterfalse_methods
+Modules/itertoolsmodule.c	-	filterfalse_type	variable	static PyTypeObject filterfalse_type
+Python/bltinmodule.c	-	filter_methods	variable	static PyMethodDef filter_methods
+Python/sysmodule.c	-	flags_desc	variable	static PyStructSequence_Desc flags_desc
+Python/sysmodule.c	-	flags_fields	variable	static PyStructSequence_Field flags_fields[]
+Python/sysmodule.c	-	FlagsType	variable	static PyTypeObject FlagsType
+Objects/floatobject.c	-	float_as_number	variable	static PyNumberMethods float_as_number
+Objects/floatobject.c	-	float_format	variable	static float_format_type 
+Objects/floatobject.c	-	float_getset	variable	static PyGetSetDef float_getset[]
+Objects/floatobject.c	-	floatinfo_desc	variable	static PyStructSequence_Desc floatinfo_desc
+Objects/floatobject.c	-	floatinfo_fields	variable	static PyStructSequence_Field floatinfo_fields[]
+Objects/floatobject.c	-	FloatInfoType	variable	static PyTypeObject FloatInfoType
+Objects/floatobject.c	-	float_methods	variable	static PyMethodDef float_methods
+Python/Python-ast.c	-	FloorDiv_singleton	variable	static PyObject *FloorDiv_singleton
+Python/Python-ast.c	-	FloorDiv_type	variable	static PyTypeObject *FloorDiv_type
+Python/fileutils.c	-	force_ascii	variable	static int force_ascii
+Python/Python-ast.c	-	For_fields	variable	static const char *For_fields[]
+Python/Python-ast.c	-	FormattedValue_fields	variable	static const char *FormattedValue_fields[]
+Python/Python-ast.c	-	FormattedValue_type	variable	static PyTypeObject *FormattedValue_type
+Objects/stringlib/unicode_format.h	-	formatteriter_methods	variable	static PyMethodDef formatteriter_methods
+Python/Python-ast.c	-	For_type	variable	static PyTypeObject *For_type
+Objects/frameobject.c	-	frame_getsetlist	variable	static PyGetSetDef frame_getsetlist[]
+Objects/frameobject.c	-	frame_memberlist	variable	static PyMemberDef frame_memberlist[]
+Objects/frameobject.c	-	frame_methods	variable	static PyMethodDef frame_methods
+Modules/_collectionsmodule.c	-	freeblocks	variable	static block *freeblocks[MAXFREEBLOCKS]
+Python/dtoa.c	-	freelist	variable	static Bigint *freelist[Kmax+1]
+Objects/floatobject.c	-	free_list	variable	static PyFloatObject *free_list
+Objects/frameobject.c	-	free_list	variable	static PyFrameObject *free_list
+Objects/listobject.c	-	free_list	variable	static PyListObject *free_list[PyList_MAXFREELIST]
+Objects/dictobject.c	-	free_list	variable	static PyDictObject *free_list[PyDict_MAXFREELIST]
+Objects/methodobject.c	-	free_list	variable	static PyCFunctionObject *free_list
+Objects/tupleobject.c	-	free_list	variable	static PyTupleObject *free_list[PyTuple_MAXSAVESIZE]
+Objects/classobject.c	-	free_list	variable	static PyMethodObject *free_list
+Objects/setobject.c	-	frozenset_as_number	variable	static PyNumberMethods frozenset_as_number
+Objects/setobject.c	-	frozenset_methods	variable	static PyMethodDef frozenset_methods
+Objects/funcobject.c	-	func_getsetlist	variable	static PyGetSetDef func_getsetlist[]
+Objects/funcobject.c	-	func_memberlist	variable	static PyMemberDef func_memberlist[]
+Python/Python-ast.c	-	FunctionDef_fields	variable	static const char *FunctionDef_fields[]
+Python/Python-ast.c	-	FunctionDef_type	variable	static PyTypeObject *FunctionDef_type
+Modules/_sre.c	-	_functions	variable	static PyMethodDef _functions[]
+Python/Python-ast.c	-	FunctionType_fields	variable	static const char *FunctionType_fields[]
+Python/Python-ast.c	-	FunctionType_type	variable	static PyTypeObject *FunctionType_type
+Modules/_functoolsmodule.c	-	_functoolsmodule	variable	static struct PyModuleDef _functoolsmodule
+Modules/gcmodule.c	-	GcMethods	variable	static PyMethodDef GcMethods[]
+Modules/gcmodule.c	-	gcmodule	variable	static struct PyModuleDef gcmodule
+Modules/gcmodule.c	-	gc_str	variable	static PyObject *gc_str
+Python/Python-ast.c	-	GeneratorExp_fields	variable	static const char *GeneratorExp_fields[]
+Python/Python-ast.c	-	GeneratorExp_type	variable	static PyTypeObject *GeneratorExp_type
+Python/symtable.c	-	genexpr	variable	static identifier genexpr
+Objects/genobject.c	-	gen_getsetlist	variable	static PyGetSetDef gen_getsetlist[]
+Objects/genobject.c	-	gen_memberlist	variable	static PyMemberDef gen_memberlist[]
+Objects/genobject.c	-	gen_methods	variable	static PyMethodDef gen_methods
+Python/bootstrap_hash.c	py_getrandom	getrandom_works	variable	static int getrandom_works
+Objects/descrobject.c	-	getset_getset	variable	static PyGetSetDef getset_getset[]
+Python/Python-ast.c	-	Global_fields	variable	static const char *Global_fields[]
+Python/Python-ast.c	-	Global_type	variable	static PyTypeObject *Global_type
+Modules/itertoolsmodule.c	-	groupby_methods	variable	static PyMethodDef groupby_methods
+Modules/itertoolsmodule.c	-	groupby_type	variable	static PyTypeObject groupby_type
+Modules/itertoolsmodule.c	-	_grouper_methods	variable	static PyMethodDef _grouper_methods
+Modules/itertoolsmodule.c	-	_grouper_type	variable	static PyTypeObject _grouper_type
+Python/Python-ast.c	-	GtE_singleton	variable	static PyObject *GtE_singleton
+Python/Python-ast.c	-	GtE_type	variable	static PyTypeObject *GtE_type
+Python/Python-ast.c	-	Gt_singleton	variable	static PyObject *Gt_singleton
+Python/Python-ast.c	-	Gt_type	variable	static PyTypeObject *Gt_type
+Modules/signalmodule.c	-	Handlers	variable	static volatile struct { _Py_atomic_int tripped; PyObject *func; } Handlers[NSIG]
+Python/dynload_shlib.c	-	handles	variable	static struct { dev_t dev; ino_t ino; void *handle; } handles[128]
+Python/sysmodule.c	-	hash_info_desc	variable	static PyStructSequence_Desc hash_info_desc
+Python/sysmodule.c	-	hash_info_fields	variable	static PyStructSequence_Field hash_info_fields[]
+Python/sysmodule.c	-	Hash_InfoType	variable	static PyTypeObject Hash_InfoType
+Python/import.c	import_find_and_load	header	variable	static int header
+Python/Python-ast.c	-	IfExp_fields	variable	static const char *IfExp_fields[]
+Python/Python-ast.c	-	IfExp_type	variable	static PyTypeObject *IfExp_type
+Python/Python-ast.c	-	If_fields	variable	static const char *If_fields[]
+Python/Python-ast.c	-	If_type	variable	static PyTypeObject *If_type
+Modules/signalmodule.c	-	IgnoreHandler	variable	static PyObject *IgnoreHandler
+Python/import.c	-	imp_methods	variable	static PyMethodDef imp_methods
+Python/import.c	-	impmodule	variable	static struct PyModuleDef impmodule
+Objects/exceptions.c	-	ImportError_members	variable	static PyMemberDef ImportError_members[]
+Objects/exceptions.c	-	ImportError_methods	variable	static PyMethodDef ImportError_methods
+Python/Python-ast.c	-	Import_fields	variable	static const char *Import_fields[]
+Python/Python-ast.c	-	ImportFrom_fields	variable	static const char *ImportFrom_fields[]
+Python/Python-ast.c	-	ImportFrom_type	variable	static PyTypeObject *ImportFrom_type
+Python/import.c	import_find_and_load	import_level	variable	static int import_level
+Python/_warnings.c	is_internal_frame	importlib_string	variable	static PyObject *importlib_string
+Python/import.c	-	import_lock	variable	static PyThread_type_lock import_lock
+Python/import.c	-	import_lock_level	variable	static int import_lock_level
+Python/import.c	-	import_lock_thread	variable	static unsigned long import_lock_thread
+Python/import.c	PyImport_Import	import_str	variable	static PyObject *import_str
+Python/Python-ast.c	-	Import_type	variable	static PyTypeObject *Import_type
+Modules/_io/textio.c	-	incrementalnewlinedecoder_getset	variable	static PyGetSetDef incrementalnewlinedecoder_getset[]
+Modules/_io/textio.c	-	incrementalnewlinedecoder_methods	variable	static PyMethodDef incrementalnewlinedecoder_methods
+Objects/listobject.c	-	indexerr	variable	static PyObject *indexerr
+Python/Python-ast.c	-	Index_fields	variable	static const char *Index_fields[]
+Python/Python-ast.c	-	Index_type	variable	static PyTypeObject *Index_type
+Python/thread.c	-	initialized	variable	static int initialized
+Modules/posixmodule.c	-	initialized	variable	static int initialized
+Modules/pwdmodule.c	-	initialized	variable	static int initialized
+Modules/signalmodule.c	-	initialized	variable	static int initialized
+Modules/timemodule.c	-	initialized	variable	static int initialized
+Python/Python-ast.c	init_types	initialized	variable	static int initialized
+Objects/listobject.c	PyList_New	initialized	variable	static int initialized
+Python/import.c	-	inittab_copy	variable	static struct _inittab *inittab_copy
+Python/Python-ast.c	-	In_singleton	variable	static PyObject *In_singleton
+Objects/classobject.c	-	instancemethod_getset	variable	static PyGetSetDef instancemethod_getset[]
+Objects/classobject.c	-	instancemethod_memberlist	variable	static PyMemberDef instancemethod_memberlist[]
+Python/Python-ast.c	-	Interactive_fields	variable	static const char *Interactive_fields[]
+Python/Python-ast.c	-	Interactive_type	variable	static PyTypeObject *Interactive_type
+Objects/unicodeobject.c	-	interned	variable	static PyObject *interned
+Objects/interpreteridobject.c	-	interpid_as_number	variable	static PyNumberMethods interpid_as_number
+Modules/signalmodule.c	-	IntHandler	variable	static PyObject *IntHandler
+Objects/longobject.c	-	int_info_desc	variable	static PyStructSequence_Desc int_info_desc
+Objects/longobject.c	-	int_info_fields	variable	static PyStructSequence_Field int_info_fields[]
+Objects/longobject.c	-	Int_InfoType	variable	static PyTypeObject Int_InfoType
+Python/Python-ast.c	-	In_type	variable	static PyTypeObject *In_type
+Python/Python-ast.c	-	Invert_singleton	variable	static PyObject *Invert_singleton
+Python/Python-ast.c	-	Invert_type	variable	static PyTypeObject *Invert_type
+Modules/_io/iobase.c	-	iobase_getset	variable	static PyGetSetDef iobase_getset[]
+Modules/_io/iobase.c	-	iobase_methods	variable	static PyMethodDef iobase_methods
+Python/fileutils.c	set_inheritable	ioctl_works	variable	static int ioctl_works
+Modules/itertoolsmodule.c	-	islice_methods	variable	static PyMethodDef islice_methods
+Modules/itertoolsmodule.c	-	islice_type	variable	static PyTypeObject islice_type
+Python/Python-ast.c	-	IsNot_singleton	variable	static PyObject *IsNot_singleton
+Python/Python-ast.c	-	IsNot_type	variable	static PyTypeObject *IsNot_type
+Python/Python-ast.c	-	Is_singleton	variable	static PyObject *Is_singleton
+Modules/signalmodule.c	-	is_tripped	variable	static _Py_atomic_int is_tripped
+Python/Python-ast.c	-	Is_type	variable	static PyTypeObject *Is_type
+Modules/_operator.c	-	itemgetter_methods	variable	static PyMethodDef itemgetter_methods
+Modules/_operator.c	-	itemgetter_type	variable	static PyTypeObject itemgetter_type
+Modules/itertoolsmodule.c	-	itertoolsmodule	variable	static struct PyModuleDef itertoolsmodule
+Modules/signalmodule.c	-	ItimerError	variable	static PyObject *ItimerError
+Python/Python-ast.c	-	JoinedStr_fields	variable	static const char *JoinedStr_fields[]
+Python/Python-ast.c	-	JoinedStr_type	variable	static PyTypeObject *JoinedStr_type
+Modules/_functoolsmodule.c	-	keyobject_members	variable	static PyMemberDef keyobject_members[]
+Modules/_functoolsmodule.c	-	keyobject_type	variable	static PyTypeObject keyobject_type
+Objects/dictobject.c	-	keys_free_list	variable	static PyDictKeysObject *keys_free_list[PyDict_MAXFREELIST]
+Python/Python-ast.c	-	keyword_fields	variable	static const char *keyword_fields[]
+Python/sysmodule.c	sys_set_asyncgen_hooks	keywords	variable	static const char *keywords[]
+Modules/_bisectmodule.c	bisect_right	keywords	variable	static const char *keywords[]
+Modules/_bisectmodule.c	insort_right	keywords	variable	static const char *keywords[]
+Python/Python-ast.c	-	keyword_type	variable	static PyTypeObject *keyword_type
+Modules/_functoolsmodule.c	keyobject_call	kwargs	variable	static const char *kwargs[]
+Modules/_functoolsmodule.c	functools_cmp_to_key	kwargs	variable	static const char *kwargs[]
+Modules/itertoolsmodule.c	repeat_new	kwargs	variable	static const char *kwargs[]
+Python/_warnings.c	warnings_warn_explicit	kwd_list	variable	static const char *kwd_list[]
+Modules/_functoolsmodule.c	-	kwd_mark	variable	static PyObject *kwd_mark
+Python/bltinmodule.c	builtin___import__	kwlist	variable	static const char *kwlist[]
+Python/bltinmodule.c	min_max	kwlist	variable	static const char *kwlist[]
+Python/context.c	contextvar_tp_new	kwlist	variable	static const char *kwlist[]
+Python/sysmodule.c	sys_getsizeof	kwlist	variable	static const char *kwlist[]
+Objects/bytearrayobject.c	bytearray_init	kwlist	variable	static const char *kwlist[]
+Objects/bytesobject.c	bytes_new	kwlist	variable	static const char *kwlist[]
+Objects/exceptions.c	ImportError_init	kwlist	variable	static const char *kwlist[]
+Objects/interpreteridobject.c	interpid_new	kwlist	variable	static const char *kwlist[]
+Objects/memoryobject.c	memory_new	kwlist	variable	static const char *kwlist[]
+Objects/memoryobject.c	memory_cast	kwlist	variable	static const char *kwlist[]
+Objects/memoryobject.c	memory_tobytes	kwlist	variable	static const char *kwlist[]
+Objects/odictobject.c	odict_pop	kwlist	variable	static const char *kwlist[]
+Objects/unicodeobject.c	unicode_new	kwlist	variable	static const char *kwlist[]
+Objects/weakrefobject.c	weakref_call	kwlist	variable	static const char *kwlist[]
+Modules/_elementtree.c	element_setstate_from_Python	kwlist	variable	static const char *kwlist[]
+Modules/_json.c	scanner_call	kwlist	variable	static const char *kwlist[]
+Modules/_json.c	scanner_new	kwlist	variable	static const char *kwlist[]
+Modules/_json.c	encoder_new	kwlist	variable	static const char *kwlist[]
+Modules/_json.c	encoder_call	kwlist	variable	static const char *kwlist[]
+Python/symtable.c	-	lambda	variable	static identifier lambda
+Python/Python-ast.c	-	Lambda_fields	variable	static const char *Lambda_fields[]
+Python/Python-ast.c	-	Lambda_type	variable	static PyTypeObject *Lambda_type
+Parser/listnode.c	-	level	variable	static int level
+Objects/listobject.c	-	list_as_mapping	variable	static PyMappingMethods list_as_mapping
+Objects/listobject.c	-	list_as_sequence	variable	static PySequenceMethods list_as_sequence
+Python/symtable.c	-	listcomp	variable	static identifier listcomp
+Python/Python-ast.c	-	ListComp_fields	variable	static const char *ListComp_fields[]
+Python/Python-ast.c	-	ListComp_type	variable	static PyTypeObject *ListComp_type
+Python/Python-ast.c	-	List_fields	variable	static const char *List_fields[]
+Objects/listobject.c	-	listiter_methods	variable	static PyMethodDef listiter_methods
+Objects/listobject.c	-	list_methods	variable	static PyMethodDef list_methods
+Objects/listobject.c	-	listreviter_methods	variable	static PyMethodDef listreviter_methods
+Python/Python-ast.c	-	List_type	variable	static PyTypeObject *List_type
+Python/ceval.c	-	lltrace	variable	static int lltrace
+Python/Python-ast.c	-	Load_singleton	variable	static PyObject *Load_singleton
+Python/Python-ast.c	-	Load_type	variable	static PyTypeObject *Load_type
+Modules/_threadmodule.c	-	localdummytype	variable	static PyTypeObject localdummytype
+Modules/_localemodule.c	-	_localemodule	variable	static struct PyModuleDef _localemodule
+Modules/_threadmodule.c	-	localtype	variable	static PyTypeObject localtype
+Modules/_threadmodule.c	-	lock_methods	variable	static PyMethodDef lock_methods
+Modules/_threadmodule.c	-	Locktype	variable	static PyTypeObject Locktype
+Objects/longobject.c	PyLong_FromString	log_base_BASE	variable	static double log_base_BASE[37]
+Objects/longobject.c	-	long_as_number	variable	static PyNumberMethods long_as_number
+Objects/longobject.c	-	long_getset	variable	static PyGetSetDef long_getset[]
+Objects/longobject.c	-	long_methods	variable	static PyMethodDef long_methods
+Objects/rangeobject.c	-	longrangeiter_methods	variable	static PyMethodDef longrangeiter_methods
+Modules/_functoolsmodule.c	-	lru_cache_getsetlist	variable	static PyGetSetDef lru_cache_getsetlist[]
+Modules/_functoolsmodule.c	-	lru_cache_methods	variable	static PyMethodDef lru_cache_methods
+Modules/_functoolsmodule.c	-	lru_cache_type	variable	static PyTypeObject lru_cache_type
+Modules/_functoolsmodule.c	-	lru_list_elem_type	variable	static PyTypeObject lru_list_elem_type
+Python/Python-ast.c	-	LShift_singleton	variable	static PyObject *LShift_singleton
+Python/Python-ast.c	-	LShift_type	variable	static PyTypeObject *LShift_type
+Python/Python-ast.c	-	LtE_singleton	variable	static PyObject *LtE_singleton
+Python/Python-ast.c	-	LtE_type	variable	static PyTypeObject *LtE_type
+Python/Python-ast.c	-	Lt_singleton	variable	static PyObject *Lt_singleton
+Python/Python-ast.c	-	Lt_type	variable	static PyTypeObject *Lt_type
+Python/bltinmodule.c	-	map_methods	variable	static PyMethodDef map_methods
+Objects/descrobject.c	-	mappingproxy_as_mapping	variable	static PyMappingMethods mappingproxy_as_mapping
+Objects/descrobject.c	-	mappingproxy_as_sequence	variable	static PySequenceMethods mappingproxy_as_sequence
+Objects/descrobject.c	-	mappingproxy_methods	variable	static PyMethodDef mappingproxy_methods
+Objects/dictobject.c	-	mapp_methods	variable	static PyMethodDef mapp_methods
+Python/marshal.c	-	marshal_methods	variable	static PyMethodDef marshal_methods
+Python/marshal.c	-	marshalmodule	variable	static struct PyModuleDef marshalmodule
+Modules/_sre.c	-	match_as_mapping	variable	static PyMappingMethods match_as_mapping
+Modules/_sre.c	-	match_getset	variable	static PyGetSetDef match_getset[]
+Modules/_sre.c	-	match_members	variable	static PyMemberDef match_members[]
+Modules/_sre.c	-	match_methods	variable	static PyMethodDef match_methods
+Modules/_sre.c	-	Match_Type	variable	static PyTypeObject Match_Type
+Python/Python-ast.c	-	MatMult_singleton	variable	static PyObject *MatMult_singleton
+Python/Python-ast.c	-	MatMult_type	variable	static PyTypeObject *MatMult_type
+Objects/obmalloc.c	-	maxarenas	variable	static uint maxarenas
+Objects/moduleobject.c	-	max_module_number	variable	static Py_ssize_t max_module_number
+Objects/descrobject.c	-	member_getset	variable	static PyGetSetDef member_getset[]
+Objects/exceptions.c	-	memerrors_freelist	variable	static PyBaseExceptionObject *memerrors_freelist
+Objects/exceptions.c	-	memerrors_numfree	variable	static int memerrors_numfree
+Objects/memoryobject.c	-	memory_as_buffer	variable	static PyBufferProcs memory_as_buffer
+Objects/memoryobject.c	-	memory_as_mapping	variable	static PyMappingMethods memory_as_mapping
+Objects/memoryobject.c	-	memory_as_sequence	variable	static PySequenceMethods memory_as_sequence
+Objects/memoryobject.c	-	memory_getsetlist	variable	static PyGetSetDef memory_getsetlist[]
+Objects/memoryobject.c	-	memory_methods	variable	static PyMethodDef memory_methods
+Objects/methodobject.c	-	meth_getsets	variable	static PyGetSetDef meth_getsets []
+Objects/methodobject.c	-	meth_members	variable	static PyMemberDef meth_members[]
+Objects/methodobject.c	-	meth_methods	variable	static PyMethodDef meth_methods
+Objects/typeobject.c	-	method_cache	variable	static struct method_cache_entry method_cache[1 << MCACHE_SIZE_EXP]
+Modules/_operator.c	-	methodcaller_methods	variable	static PyMethodDef methodcaller_methods
+Modules/_operator.c	-	methodcaller_type	variable	static PyTypeObject methodcaller_type
+Objects/classobject.c	-	method_getset	variable	static PyGetSetDef method_getset[]
+Objects/descrobject.c	-	method_getset	variable	static PyGetSetDef method_getset[]
+Objects/classobject.c	-	method_memberlist	variable	static PyMemberDef method_memberlist[]
+Objects/classobject.c	-	method_methods	variable	static PyMethodDef method_methods
+Python/codecs.c	_PyCodecRegistry_Init	methods	variable	static struct { char *name; PyMethodDef def; } methods[]
+Python/frozen.c	-	M___hello__	variable	static unsigned char M___hello__[]
+Python/Python-ast.c	-	Mod_singleton	variable	static PyObject *Mod_singleton
+Python/Python-ast.c	-	mod_type	variable	static PyTypeObject *mod_type
+Python/Python-ast.c	-	Mod_type	variable	static PyTypeObject *Mod_type
+Modules/faulthandler.c	-	module_def	variable	static struct PyModuleDef module_def
+Modules/_tracemalloc.c	-	module_def	variable	static struct PyModuleDef module_def
+Python/Python-ast.c	-	Module_fields	variable	static const char *Module_fields[]
+Modules/_collectionsmodule.c	-	module_functions	variable	static struct PyMethodDef module_functions[]
+Modules/_abc.c	-	module_functions	variable	static struct PyMethodDef module_functions[]
+Objects/moduleobject.c	-	module_members	variable	static PyMemberDef module_members[]
+Objects/moduleobject.c	-	module_methods	variable	static PyMethodDef module_methods
+Modules/_functoolsmodule.c	-	module_methods	variable	static PyMethodDef module_methods
+Modules/itertoolsmodule.c	-	module_methods	variable	static PyMethodDef module_methods
+Modules/_io/_iomodule.c	-	module_methods	variable	static PyMethodDef module_methods
+Modules/faulthandler.c	-	module_methods	variable	static PyMethodDef module_methods
+Modules/_tracemalloc.c	-	module_methods	variable	static PyMethodDef module_methods
+Python/Python-ast.c	-	Module_type	variable	static PyTypeObject *Module_type
+Python/Python-ast.c	-	Mult_singleton	variable	static PyObject *Mult_singleton
+Python/Python-ast.c	-	Mult_type	variable	static PyTypeObject *Mult_type
+Objects/funcobject.c	PyFunction_NewWithQualName	__name__	variable	static PyObject *__name__
+Python/compile.c	compiler_lambda	name	variable	static identifier name
+Python/compile.c	compiler_genexp	name	variable	static identifier name
+Python/compile.c	compiler_listcomp	name	variable	static identifier name
+Python/compile.c	compiler_setcomp	name	variable	static identifier name
+Python/compile.c	compiler_dictcomp	name	variable	static identifier name
+Python/Python-ast.c	-	NamedExpr_fields	variable	static const char *NamedExpr_fields[]
+Python/Python-ast.c	-	NamedExpr_type	variable	static PyTypeObject *NamedExpr_type
+Python/Python-ast.c	-	Name_fields	variable	static const char *Name_fields[]
+Objects/typeobject.c	-	name_op	variable	static _Py_Identifier name_op[]
+Objects/namespaceobject.c	-	namespace_members	variable	static PyMemberDef namespace_members[]
+Objects/namespaceobject.c	-	namespace_methods	variable	static PyMethodDef namespace_methods
+Python/Python-ast.c	-	Name_type	variable	static PyTypeObject *Name_type
+Objects/obmalloc.c	-	narenas_currently_allocated	variable	static size_t narenas_currently_allocated
+Objects/obmalloc.c	-	narenas_highwater	variable	static size_t narenas_highwater
+Python/sysmodule.c	sys_displayhook	newline	variable	static PyObject *newline
+Objects/typeobject.c	-	next_version_tag	variable	static unsigned int next_version_tag
+Objects/obmalloc.c	-	nfp2lasta	variable	static struct arena_object* nfp2lasta[MAX_POOLS_IN_ARENA + 1]
+Python/dynload_shlib.c	-	nhandles	variable	static int nhandles
+Objects/object.c	-	none_as_number	variable	static PyNumberMethods none_as_number
+Python/Python-ast.c	-	Nonlocal_fields	variable	static const char *Nonlocal_fields[]
+Python/Python-ast.c	-	Nonlocal_type	variable	static PyTypeObject *Nonlocal_type
+Python/Python-ast.c	-	NotEq_singleton	variable	static PyObject *NotEq_singleton
+Python/Python-ast.c	-	NotEq_type	variable	static PyTypeObject *NotEq_type
+Objects/object.c	-	notimplemented_methods	variable	static PyMethodDef notimplemented_methods
+Python/Python-ast.c	-	NotIn_singleton	variable	static PyObject *NotIn_singleton
+Python/Python-ast.c	-	NotIn_type	variable	static PyTypeObject *NotIn_type
+Python/Python-ast.c	-	Not_singleton	variable	static PyObject *Not_singleton
+Python/Python-ast.c	-	Not_type	variable	static PyTypeObject *Not_type
+Objects/obmalloc.c	-	ntimes_arena_allocated	variable	static size_t ntimes_arena_allocated
+Objects/bytesobject.c	-	nullstring	variable	static PyBytesObject *nullstring
+Objects/codeobject.c	PyCode_NewEmpty	nulltuple	variable	static PyObject *nulltuple
+Objects/floatobject.c	-	numfree	variable	static int numfree
+Objects/frameobject.c	-	numfree	variable	static int numfree
+Objects/listobject.c	-	numfree	variable	static int numfree
+Objects/dictobject.c	-	numfree	variable	static int numfree
+Objects/methodobject.c	-	numfree	variable	static int numfree
+Objects/tupleobject.c	-	numfree	variable	static int numfree[PyTuple_MAXSAVESIZE]
+Objects/classobject.c	-	numfree	variable	static int numfree
+Modules/_collectionsmodule.c	-	numfreeblocks	variable	static Py_ssize_t numfreeblocks
+Objects/dictobject.c	-	numfreekeys	variable	static int numfreekeys
+Objects/typeobject.c	-	object_getsets	variable	static PyGetSetDef object_getsets[]
+Objects/typeobject.c	-	object_methods	variable	static PyMethodDef object_methods
+Objects/typeobject.c	object___reduce_ex___impl	objreduce	variable	static PyObject *objreduce
+Objects/odictobject.c	-	odict_as_mapping	variable	static PyMappingMethods odict_as_mapping
+Objects/odictobject.c	-	odict_getset	variable	static PyGetSetDef odict_getset[]
+Objects/odictobject.c	-	odictitems_methods	variable	static PyMethodDef odictitems_methods
+Objects/odictobject.c	-	odictiter_methods	variable	static PyMethodDef odictiter_methods
+Objects/odictobject.c	-	odictkeys_methods	variable	static PyMethodDef odictkeys_methods
+Objects/odictobject.c	-	odict_methods	variable	static PyMethodDef odict_methods
+Objects/odictobject.c	-	odictvalues_methods	variable	static PyMethodDef odictvalues_methods
+Modules/faulthandler.c	-	old_stack	variable	static stack_t old_stack
+Modules/_operator.c	-	operator_methods	variable	static PyMethodDef operator_methods
+Modules/_operator.c	-	operatormodule	variable	static struct PyModuleDef operatormodule
+Python/Python-ast.c	-	operator_type	variable	static PyTypeObject *operator_type
+Objects/typeobject.c	slot_nb_add	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_subtract	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_multiply	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_matrix_multiply	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_remainder	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_divmod	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_power_binary	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_lshift	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_rshift	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_and	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_xor	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_or	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_floor_divide	op_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_true_divide	op_id	variable	_Py_static_string(op_id, OPSTR)
+Python/getopt.c	-	opt_ptr	variable	static const wchar_t *opt_ptr
+Python/initconfig.c	-	orig_argv	variable	static PyWideStringList orig_argv
+Python/Python-ast.c	-	Or_singleton	variable	static PyObject *Or_singleton
+Python/Python-ast.c	-	Or_type	variable	static PyTypeObject *Or_type
+Objects/exceptions.c	-	OSError_getset	variable	static PyGetSetDef OSError_getset[]
+Objects/exceptions.c	-	OSError_members	variable	static PyMemberDef OSError_members[]
+Objects/exceptions.c	-	OSError_methods	variable	static PyMethodDef OSError_methods
+Python/dtoa.c	-	p5s	variable	static Bigint *p5s
+Python/Python-ast.c	-	Param_singleton	variable	static PyObject *Param_singleton
+Python/Python-ast.c	-	Param_type	variable	static PyTypeObject *Param_type
+Python/bltinmodule.c	builtin_print	_parser	variable	static struct _PyArg_Parser _parser
+Python/clinic/_warnings.c.h	warnings_warn	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/bltinmodule.c.h	builtin_compile	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/bltinmodule.c.h	builtin_round	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/bltinmodule.c.h	builtin_sum	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/import.c.h	_imp_source_hash	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/sysmodule.c.h	sys_addaudithook	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/sysmodule.c.h	sys_set_coroutine_origin_tracking_depth	_parser	variable	static _PyArg_Parser _parser
+Python/clinic/traceback.c.h	tb_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h	bytearray_translate	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h	bytearray_split	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h	bytearray_rsplit	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h	bytearray_decode	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h	bytearray_splitlines	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytearrayobject.c.h	bytearray_hex	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h	bytes_split	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h	bytes_rsplit	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h	bytes_translate	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h	bytes_decode	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h	bytes_splitlines	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/bytesobject.c.h	bytes_hex	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/codeobject.c.h	code_replace	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/complexobject.c.h	complex_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/descrobject.c.h	mappingproxy_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/descrobject.c.h	property_init	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/enumobject.c.h	enum_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/funcobject.c.h	func_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/listobject.c.h	list_sort	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/longobject.c.h	long_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/longobject.c.h	int_to_bytes	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/longobject.c.h	int_from_bytes	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/memoryobject.c.h	memoryview_hex	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/moduleobject.c.h	module___init__	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h	OrderedDict_fromkeys	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h	OrderedDict_setdefault	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h	OrderedDict_popitem	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/odictobject.c.h	OrderedDict_move_to_end	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/structseq.c.h	structseq_new	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h	unicode_encode	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h	unicode_expandtabs	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h	unicode_split	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h	unicode_rsplit	_parser	variable	static _PyArg_Parser _parser
+Objects/clinic/unicodeobject.c.h	unicode_splitlines	_parser	variable	static _PyArg_Parser _parser
+Objects/stringlib/clinic/transmogrify.h.h	stringlib_expandtabs	_parser	variable	static _PyArg_Parser _parser
+Modules/_blake2/clinic/blake2b_impl.c.h	py_blake2b_new	_parser	variable	static _PyArg_Parser _parser
+Modules/_blake2/clinic/blake2s_impl.c.h	py_blake2s_new	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/_iomodule.c.h	_io_open	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/_iomodule.c.h	_io_open_code	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/bufferedio.c.h	_io_BufferedReader___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/bufferedio.c.h	_io_BufferedWriter___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/bufferedio.c.h	_io_BufferedRandom___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/bytesio.c.h	_io_BytesIO___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/fileio.c.h	_io_FileIO___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/stringio.c.h	_io_StringIO___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h	_io_IncrementalNewlineDecoder___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h	_io_IncrementalNewlineDecoder_decode	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h	_io_TextIOWrapper___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/textio.c.h	_io_TextIOWrapper_reconfigure	_parser	variable	static _PyArg_Parser _parser
+Modules/_io/clinic/winconsoleio.c.h	_io__WindowsConsoleIO___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/_multiprocessing/clinic/posixshmem.c.h	_posixshmem_shm_open	_parser	variable	static _PyArg_Parser _parser
+Modules/_multiprocessing/clinic/posixshmem.c.h	_posixshmem_shm_unlink	_parser	variable	static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h	_multibytecodec_MultibyteCodec_encode	_parser	variable	static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h	_multibytecodec_MultibyteCodec_decode	_parser	variable	static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h	_multibytecodec_MultibyteIncrementalEncoder_encode	_parser	variable	static _PyArg_Parser _parser
+Modules/cjkcodecs/clinic/multibytecodec.c.h	_multibytecodec_MultibyteIncrementalDecoder_decode	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Future___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Future_add_done_callback	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Task___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Task_current_task	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Task_all_tasks	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Task_get_stack	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio_Task_print_stack	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio__register_task	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio__unregister_task	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio__enter_task	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_asynciomodule.c.h	_asyncio__leave_task	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_bz2module.c.h	_bz2_BZ2Decompressor_decompress	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_codecsmodule.c.h	_codecs_encode	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_codecsmodule.c.h	_codecs_decode	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_cursesmodule.c.h	_curses_setupterm	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_datetimemodule.c.h	datetime_datetime_now	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_find	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_findtext	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_findall	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_iterfind	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_get	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_iter	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_Element_getiterator	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_TreeBuilder___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_elementtree.c.h	_elementtree_XMLParser___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h	EVP_new	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h	pbkdf2_hmac	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h	_hashlib_scrypt	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_hashopenssl.c.h	_hashlib_hmac_digest	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_lzmamodule.c.h	_lzma_LZMADecompressor_decompress	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_lzmamodule.c.h	_lzma_LZMADecompressor___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_opcode.c.h	_opcode_stack_effect	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h	_pickle_Pickler___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h	_pickle_Unpickler___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h	_pickle_dump	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h	_pickle_dumps	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h	_pickle_load	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_pickle.c.h	_pickle_loads	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_queuemodule.c.h	_queue_SimpleQueue_put	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_queuemodule.c.h	_queue_SimpleQueue_put_nowait	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_queuemodule.c.h	_queue_SimpleQueue_get	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_match	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_fullmatch	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_search	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_findall	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_finditer	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_scanner	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_split	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_sub	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Pattern_subn	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_compile	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Match_expand	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Match_groups	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_sre.c.h	_sre_SRE_Match_groupdict	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl__SSLSocket_get_channel_binding	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl__SSLContext_load_cert_chain	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl__SSLContext_load_verify_locations	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl__SSLContext__wrap_socket	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl__SSLContext__wrap_bio	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl__SSLContext_get_ca_certs	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl_txt2obj	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl_enum_certificates	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_ssl.c.h	_ssl_enum_crls	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_struct.c.h	Struct___init__	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_struct.c.h	Struct_unpack_from	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_struct.c.h	unpack_from	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h	_winapi_ConnectNamedPipe	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h	_winapi_ReadFile	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h	_winapi_WriteFile	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/_winapi.c.h	_winapi_GetFileType	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h	binascii_b2a_uu	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h	binascii_b2a_base64	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h	binascii_b2a_hex	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h	binascii_hexlify	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h	binascii_a2b_qp	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/binascii.c.h	binascii_b2a_qp	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/cmathmodule.c.h	cmath_isclose	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/gcmodule.c.h	gc_collect	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/gcmodule.c.h	gc_get_objects	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/grpmodule.c.h	grp_getgrgid	_parser	variable	static _PyArg_Parser _parser
+Modules/clinic/grpmodule.c.h	grp_getgrnam	_parser	variable	static _PyArg_Parser _parser
+Modules/_functoolsmodule.c	-	partial_getsetlist	variable	static PyGetSetDef partial_getsetlist[]
+Modules/_functoolsmodule.c	-	partial_memberlist	variable	static PyMemberDef partial_memberlist[]
+Modules/_functoolsmodule.c	-	partial_methods	variable	static PyMethodDef partial_methods
+Modules/_functoolsmodule.c	-	partial_type	variable	static PyTypeObject partial_type
+Python/Python-ast.c	-	Pass_type	variable	static PyTypeObject *Pass_type
+Modules/_sre.c	-	pattern_getset	variable	static PyGetSetDef pattern_getset[]
+Modules/_sre.c	-	pattern_members	variable	static PyMemberDef pattern_members[]
+Modules/_sre.c	-	pattern_methods	variable	static PyMethodDef pattern_methods
+Modules/_sre.c	-	Pattern_Type	variable	static PyTypeObject Pattern_Type
+Modules/itertoolsmodule.c	-	permuations_methods	variable	static PyMethodDef permuations_methods
+Modules/itertoolsmodule.c	-	permutations_type	variable	static PyTypeObject permutations_type
+Objects/picklebufobject.c	-	picklebuf_as_buffer	variable	static PyBufferProcs picklebuf_as_buffer
+Objects/picklebufobject.c	-	picklebuf_methods	variable	static PyMethodDef picklebuf_methods
+Python/dtoa.c	-	pmem_next	variable	static double *pmem_next
+Objects/typeobject.c	resolve_slotdups	pname	variable	static PyObject *pname
+Modules/posixmodule.c	-	posix_constants_confstr	variable	static struct constdef posix_constants_confstr[]
+Modules/posixmodule.c	-	posix_constants_pathconf	variable	static struct constdef  posix_constants_pathconf[]
+Modules/posixmodule.c	-	posix_constants_sysconf	variable	static struct constdef posix_constants_sysconf[]
+Modules/posixmodule.c	-	posix_methods	variable	static PyMethodDef posix_methods
+Modules/posixmodule.c	-	posixmodule	variable	static struct PyModuleDef posixmodule
+Modules/posixmodule.c	-	posix_putenv_garbage	variable	static PyObject *posix_putenv_garbage
+Python/Python-ast.c	-	Pow_singleton	variable	static PyObject *Pow_singleton
+Python/Python-ast.c	-	Pow_type	variable	static PyTypeObject *Pow_type
+Python/sysmodule.c	-	_preinit_warnoptions	variable	static _Py_PreInitEntry _preinit_warnoptions
+Python/sysmodule.c	-	_preinit_xoptions	variable	static _Py_PreInitEntry _preinit_xoptions
+Objects/exceptions.c	_check_for_legacy_statements	print_prefix	variable	static PyObject *print_prefix
+Python/dtoa.c	-	private_mem	variable	static double private_mem[PRIVATE_mem]
+Modules/itertoolsmodule.c	-	product_methods	variable	static PyMethodDef product_methods
+Modules/itertoolsmodule.c	-	product_type	variable	static PyTypeObject product_type
+Objects/descrobject.c	-	property_getsetlist	variable	static PyGetSetDef property_getsetlist[]
+Objects/descrobject.c	-	property_members	variable	static PyMemberDef property_members[]
+Objects/descrobject.c	-	property_methods	variable	static PyMethodDef property_methods
+Objects/weakrefobject.c	-	proxy_as_mapping	variable	static PyMappingMethods proxy_as_mapping
+Objects/weakrefobject.c	-	proxy_as_number	variable	static PyNumberMethods proxy_as_number
+Objects/weakrefobject.c	-	proxy_as_sequence	variable	static PySequenceMethods proxy_as_sequence
+Objects/weakrefobject.c	-	proxy_methods	variable	static PyMethodDef proxy_methods
+Objects/typeobject.c	resolve_slotdups	ptrs	variable	static slotdef *ptrs[MAX_EQUIV]
+Modules/pwdmodule.c	-	pwd_methods	variable	static PyMethodDef pwd_methods
+Modules/pwdmodule.c	-	pwdmodule	variable	static struct PyModuleDef pwdmodule
+Objects/obmalloc.c	-	_Py_AllocatedBlocks	variable	static Py_ssize_t _Py_AllocatedBlocks
+Objects/genobject.c	-	_PyAsyncGenASend_Type	variable	PyTypeObject _PyAsyncGenASend_Type
+Objects/genobject.c	-	_PyAsyncGenAThrow_Type	variable	PyTypeObject _PyAsyncGenAThrow_Type
+Objects/genobject.c	-	PyAsyncGen_Type	variable	PyTypeObject PyAsyncGen_Type
+Objects/genobject.c	-	_PyAsyncGenWrappedValue_Type	variable	PyTypeObject _PyAsyncGenWrappedValue_Type
+Objects/typeobject.c	-	PyBaseObject_Type	variable	PyTypeObject PyBaseObject_Type
+Modules/_blake2/blake2b_impl.c	-	PyBlake2_BLAKE2bType	variable	PyTypeObject PyBlake2_BLAKE2bType
+Modules/_blake2/blake2s_impl.c	-	PyBlake2_BLAKE2sType	variable	PyTypeObject PyBlake2_BLAKE2sType
+Objects/boolobject.c	-	PyBool_Type	variable	PyTypeObject PyBool_Type
+Modules/_io/bufferedio.c	-	PyBufferedIOBase_Type	variable	PyTypeObject PyBufferedIOBase_Type
+Modules/_io/bufferedio.c	-	PyBufferedRandom_Type	variable	PyTypeObject PyBufferedRandom_Type
+Modules/_io/bufferedio.c	-	PyBufferedReader_Type	variable	PyTypeObject PyBufferedReader_Type
+Modules/_io/bufferedio.c	-	PyBufferedRWPair_Type	variable	PyTypeObject PyBufferedRWPair_Type
+Modules/_io/bufferedio.c	-	PyBufferedWriter_Type	variable	PyTypeObject PyBufferedWriter_Type
+Objects/bytearrayobject.c	-	_PyByteArray_empty_string	variable	char _PyByteArray_empty_string[]
+Objects/bytearrayobject.c	-	PyByteArrayIter_Type	variable	PyTypeObject PyByteArrayIter_Type
+Objects/bytearrayobject.c	-	PyByteArray_Type	variable	PyTypeObject PyByteArray_Type
+Modules/_io/bytesio.c	-	_PyBytesIOBuffer_Type	variable	PyTypeObject _PyBytesIOBuffer_Type
+Modules/_io/bytesio.c	-	PyBytesIO_Type	variable	PyTypeObject PyBytesIO_Type
+Objects/bytesobject.c	-	PyBytesIter_Type	variable	PyTypeObject PyBytesIter_Type
+Objects/bytesobject.c	-	PyBytes_Type	variable	PyTypeObject PyBytes_Type
+Python/initconfig.c	-	Py_BytesWarningFlag	variable	int Py_BytesWarningFlag
+Objects/iterobject.c	-	PyCallIter_Type	variable	PyTypeObject PyCallIter_Type
+Objects/capsule.c	-	PyCapsule_Type	variable	PyTypeObject PyCapsule_Type
+Objects/cellobject.c	-	PyCell_Type	variable	PyTypeObject PyCell_Type
+Objects/methodobject.c	-	PyCFunction_Type	variable	PyTypeObject PyCFunction_Type
+Python/ceval.c	-	_Py_CheckRecursionLimit	variable	int _Py_CheckRecursionLimit
+Objects/descrobject.c	-	PyClassMethodDescr_Type	variable	PyTypeObject PyClassMethodDescr_Type
+Objects/funcobject.c	-	PyClassMethod_Type	variable	PyTypeObject PyClassMethod_Type
+Objects/codeobject.c	-	PyCode_Type	variable	PyTypeObject PyCode_Type
+Objects/complexobject.c	-	PyComplex_Type	variable	PyTypeObject PyComplex_Type
+Python/context.c	-	PyContext_as_mapping	variable	static PyMappingMethods PyContext_as_mapping
+Python/context.c	-	PyContext_as_sequence	variable	static PySequenceMethods PyContext_as_sequence
+Python/context.c	-	PyContext_methods	variable	static PyMethodDef PyContext_methods
+Python/context.c	-	PyContextTokenMissing_Type	variable	PyTypeObject PyContextTokenMissing_Type
+Python/context.c	-	PyContextToken_Type	variable	PyTypeObject PyContextToken_Type
+Python/context.c	-	PyContextTokenType_getsetlist	variable	static PyGetSetDef PyContextTokenType_getsetlist[]
+Python/context.c	-	PyContext_Type	variable	PyTypeObject PyContext_Type
+Python/context.c	-	PyContextVar_members	variable	static PyMemberDef PyContextVar_members[]
+Python/context.c	-	PyContextVar_methods	variable	static PyMethodDef PyContextVar_methods
+Python/context.c	-	PyContextVar_Type	variable	PyTypeObject PyContextVar_Type
+Objects/genobject.c	-	PyCoro_Type	variable	PyTypeObject PyCoro_Type
+Objects/genobject.c	-	_PyCoroWrapper_Type	variable	PyTypeObject _PyCoroWrapper_Type
+Python/initconfig.c	-	Py_DebugFlag	variable	int Py_DebugFlag
+Objects/dictobject.c	-	pydict_global_version	variable	static uint64_t pydict_global_version
+Objects/dictobject.c	-	PyDictItems_Type	variable	PyTypeObject PyDictItems_Type
+Objects/dictobject.c	-	PyDictIterItem_Type	variable	PyTypeObject PyDictIterItem_Type
+Objects/dictobject.c	-	PyDictIterKey_Type	variable	PyTypeObject PyDictIterKey_Type
+Objects/dictobject.c	-	PyDictIterValue_Type	variable	PyTypeObject PyDictIterValue_Type
+Objects/dictobject.c	-	PyDictKeys_Type	variable	PyTypeObject PyDictKeys_Type
+Objects/descrobject.c	-	PyDictProxy_Type	variable	PyTypeObject PyDictProxy_Type
+Objects/dictobject.c	-	PyDictRevIterItem_Type	variable	PyTypeObject PyDictRevIterItem_Type
+Objects/dictobject.c	-	PyDictRevIterKey_Type	variable	PyTypeObject PyDictRevIterKey_Type
+Objects/dictobject.c	-	PyDictRevIterValue_Type	variable	PyTypeObject PyDictRevIterValue_Type
+Objects/dictobject.c	-	PyDict_Type	variable	PyTypeObject PyDict_Type
+Objects/dictobject.c	-	PyDictValues_Type	variable	PyTypeObject PyDictValues_Type
+Python/initconfig.c	-	Py_DontWriteBytecodeFlag	variable	int Py_DontWriteBytecodeFlag
+Objects/sliceobject.c	-	_Py_EllipsisObject	variable	PyObject _Py_EllipsisObject
+Objects/sliceobject.c	-	PyEllipsis_Type	variable	PyTypeObject PyEllipsis_Type
+Objects/enumobject.c	-	PyEnum_Type	variable	PyTypeObject PyEnum_Type
+Objects/exceptions.c	-	_PyExc_ArithmeticError	variable	static PyTypeObject _PyExc_ArithmeticError
+Objects/exceptions.c	-	PyExc_ArithmeticError	variable	static PyTypeObject PyExc_ArithmeticError
+Objects/exceptions.c	-	_PyExc_AssertionError	variable	static PyTypeObject _PyExc_AssertionError
+Objects/exceptions.c	-	PyExc_AssertionError	variable	static PyTypeObject PyExc_AssertionError
+Objects/exceptions.c	-	_PyExc_AttributeError	variable	static PyTypeObject _PyExc_AttributeError
+Objects/exceptions.c	-	PyExc_AttributeError	variable	static PyTypeObject PyExc_AttributeError
+Objects/exceptions.c	-	_PyExc_BaseException	variable	static PyTypeObject _PyExc_BaseException
+Objects/exceptions.c	-	PyExc_BaseException	variable	static PyTypeObject PyExc_BaseException
+Objects/exceptions.c	-	_PyExc_BlockingIOError	variable	static PyTypeObject _PyExc_BlockingIOError
+Objects/exceptions.c	-	PyExc_BlockingIOError	variable	static PyTypeObject PyExc_BlockingIOError
+Objects/exceptions.c	-	_PyExc_BrokenPipeError	variable	static PyTypeObject _PyExc_BrokenPipeError
+Objects/exceptions.c	-	PyExc_BrokenPipeError	variable	static PyTypeObject PyExc_BrokenPipeError
+Objects/exceptions.c	-	_PyExc_BufferError	variable	static PyTypeObject _PyExc_BufferError
+Objects/exceptions.c	-	PyExc_BufferError	variable	static PyTypeObject PyExc_BufferError
+Objects/exceptions.c	-	_PyExc_BytesWarning	variable	static PyTypeObject _PyExc_BytesWarning
+Objects/exceptions.c	-	PyExc_BytesWarning	variable	static PyTypeObject PyExc_BytesWarning
+Objects/exceptions.c	-	_PyExc_ChildProcessError	variable	static PyTypeObject _PyExc_ChildProcessError
+Objects/exceptions.c	-	PyExc_ChildProcessError	variable	static PyTypeObject PyExc_ChildProcessError
+Objects/exceptions.c	-	_PyExc_ConnectionAbortedError	variable	static PyTypeObject _PyExc_ConnectionAbortedError
+Objects/exceptions.c	-	PyExc_ConnectionAbortedError	variable	static PyTypeObject PyExc_ConnectionAbortedError
+Objects/exceptions.c	-	_PyExc_ConnectionError	variable	static PyTypeObject _PyExc_ConnectionError
+Objects/exceptions.c	-	PyExc_ConnectionError	variable	static PyTypeObject PyExc_ConnectionError
+Objects/exceptions.c	-	_PyExc_ConnectionRefusedError	variable	static PyTypeObject _PyExc_ConnectionRefusedError
+Objects/exceptions.c	-	PyExc_ConnectionRefusedError	variable	static PyTypeObject PyExc_ConnectionRefusedError
+Objects/exceptions.c	-	_PyExc_ConnectionResetError	variable	static PyTypeObject _PyExc_ConnectionResetError
+Objects/exceptions.c	-	PyExc_ConnectionResetError	variable	static PyTypeObject PyExc_ConnectionResetError
+Objects/exceptions.c	-	_PyExc_DeprecationWarning	variable	static PyTypeObject _PyExc_DeprecationWarning
+Objects/exceptions.c	-	PyExc_DeprecationWarning	variable	static PyTypeObject PyExc_DeprecationWarning
+Objects/exceptions.c	-	PyExc_EnvironmentError	variable	static PyTypeObject PyExc_EnvironmentError
+Objects/exceptions.c	-	_PyExc_EOFError	variable	static PyTypeObject _PyExc_EOFError
+Objects/exceptions.c	-	PyExc_EOFError	variable	static PyTypeObject PyExc_EOFError
+Objects/exceptions.c	-	_PyExc_Exception	variable	static PyTypeObject _PyExc_Exception
+Objects/exceptions.c	-	PyExc_Exception	variable	static PyTypeObject PyExc_Exception
+Objects/exceptions.c	-	_PyExc_FileExistsError	variable	static PyTypeObject _PyExc_FileExistsError
+Objects/exceptions.c	-	PyExc_FileExistsError	variable	static PyTypeObject PyExc_FileExistsError
+Objects/exceptions.c	-	_PyExc_FileNotFoundError	variable	static PyTypeObject _PyExc_FileNotFoundError
+Objects/exceptions.c	-	PyExc_FileNotFoundError	variable	static PyTypeObject PyExc_FileNotFoundError
+Objects/exceptions.c	-	_PyExc_FloatingPointError	variable	static PyTypeObject _PyExc_FloatingPointError
+Objects/exceptions.c	-	PyExc_FloatingPointError	variable	static PyTypeObject PyExc_FloatingPointError
+Objects/exceptions.c	-	_PyExc_FutureWarning	variable	static PyTypeObject _PyExc_FutureWarning
+Objects/exceptions.c	-	PyExc_FutureWarning	variable	static PyTypeObject PyExc_FutureWarning
+Objects/exceptions.c	-	_PyExc_GeneratorExit	variable	static PyTypeObject _PyExc_GeneratorExit
+Objects/exceptions.c	-	PyExc_GeneratorExit	variable	static PyTypeObject PyExc_GeneratorExit
+Objects/exceptions.c	-	_PyExc_ImportError	variable	static PyTypeObject _PyExc_ImportError
+Objects/exceptions.c	-	PyExc_ImportError	variable	static PyTypeObject PyExc_ImportError
+Objects/exceptions.c	-	_PyExc_ImportWarning	variable	static PyTypeObject _PyExc_ImportWarning
+Objects/exceptions.c	-	PyExc_ImportWarning	variable	static PyTypeObject PyExc_ImportWarning
+Objects/exceptions.c	-	_PyExc_IndentationError	variable	static PyTypeObject _PyExc_IndentationError
+Objects/exceptions.c	-	PyExc_IndentationError	variable	static PyTypeObject PyExc_IndentationError
+Objects/exceptions.c	-	_PyExc_IndexError	variable	static PyTypeObject _PyExc_IndexError
+Objects/exceptions.c	-	PyExc_IndexError	variable	static PyTypeObject PyExc_IndexError
+Objects/exceptions.c	-	_PyExc_InterruptedError	variable	static PyTypeObject _PyExc_InterruptedError
+Objects/exceptions.c	-	PyExc_InterruptedError	variable	static PyTypeObject PyExc_InterruptedError
+Objects/exceptions.c	-	PyExc_IOError	variable	static PyTypeObject PyExc_IOError
+Objects/exceptions.c	-	_PyExc_IsADirectoryError	variable	static PyTypeObject _PyExc_IsADirectoryError
+Objects/exceptions.c	-	PyExc_IsADirectoryError	variable	static PyTypeObject PyExc_IsADirectoryError
+Objects/exceptions.c	-	_PyExc_KeyboardInterrupt	variable	static PyTypeObject _PyExc_KeyboardInterrupt
+Objects/exceptions.c	-	PyExc_KeyboardInterrupt	variable	static PyTypeObject PyExc_KeyboardInterrupt
+Objects/exceptions.c	-	_PyExc_KeyError	variable	static PyTypeObject _PyExc_KeyError
+Objects/exceptions.c	-	PyExc_KeyError	variable	static PyTypeObject PyExc_KeyError
+Objects/exceptions.c	-	_PyExc_LookupError	variable	static PyTypeObject _PyExc_LookupError
+Objects/exceptions.c	-	PyExc_LookupError	variable	static PyTypeObject PyExc_LookupError
+Objects/exceptions.c	-	_PyExc_MemoryError	variable	static PyTypeObject _PyExc_MemoryError
+Objects/exceptions.c	-	PyExc_MemoryError	variable	static PyTypeObject PyExc_MemoryError
+Objects/exceptions.c	-	_PyExc_ModuleNotFoundError	variable	static PyTypeObject _PyExc_ModuleNotFoundError
+Objects/exceptions.c	-	PyExc_ModuleNotFoundError	variable	static PyTypeObject PyExc_ModuleNotFoundError
+Objects/exceptions.c	-	_PyExc_NameError	variable	static PyTypeObject _PyExc_NameError
+Objects/exceptions.c	-	PyExc_NameError	variable	static PyTypeObject PyExc_NameError
+Objects/exceptions.c	-	_PyExc_NotADirectoryError	variable	static PyTypeObject _PyExc_NotADirectoryError
+Objects/exceptions.c	-	PyExc_NotADirectoryError	variable	static PyTypeObject PyExc_NotADirectoryError
+Objects/exceptions.c	-	_PyExc_NotImplementedError	variable	static PyTypeObject _PyExc_NotImplementedError
+Objects/exceptions.c	-	PyExc_NotImplementedError	variable	static PyTypeObject PyExc_NotImplementedError
+Objects/exceptions.c	-	_PyExc_OSError	variable	static PyTypeObject _PyExc_OSError
+Objects/exceptions.c	-	PyExc_OSError	variable	static PyTypeObject PyExc_OSError
+Objects/exceptions.c	-	_PyExc_OverflowError	variable	static PyTypeObject _PyExc_OverflowError
+Objects/exceptions.c	-	PyExc_OverflowError	variable	static PyTypeObject PyExc_OverflowError
+Objects/exceptions.c	-	_PyExc_PendingDeprecationWarning	variable	static PyTypeObject _PyExc_PendingDeprecationWarning
+Objects/exceptions.c	-	PyExc_PendingDeprecationWarning	variable	static PyTypeObject PyExc_PendingDeprecationWarning
+Objects/exceptions.c	-	_PyExc_PermissionError	variable	static PyTypeObject _PyExc_PermissionError
+Objects/exceptions.c	-	PyExc_PermissionError	variable	static PyTypeObject PyExc_PermissionError
+Objects/exceptions.c	-	_PyExc_ProcessLookupError	variable	static PyTypeObject _PyExc_ProcessLookupError
+Objects/exceptions.c	-	PyExc_ProcessLookupError	variable	static PyTypeObject PyExc_ProcessLookupError
+Objects/exceptions.c	-	_PyExc_RecursionError	variable	static PyTypeObject _PyExc_RecursionError
+Objects/exceptions.c	-	PyExc_RecursionError	variable	static PyTypeObject PyExc_RecursionError
+Objects/exceptions.c	-	_PyExc_ReferenceError	variable	static PyTypeObject _PyExc_ReferenceError
+Objects/exceptions.c	-	PyExc_ReferenceError	variable	static PyTypeObject PyExc_ReferenceError
+Objects/exceptions.c	-	_PyExc_ResourceWarning	variable	static PyTypeObject _PyExc_ResourceWarning
+Objects/exceptions.c	-	PyExc_ResourceWarning	variable	static PyTypeObject PyExc_ResourceWarning
+Objects/exceptions.c	-	_PyExc_RuntimeError	variable	static PyTypeObject _PyExc_RuntimeError
+Objects/exceptions.c	-	PyExc_RuntimeError	variable	static PyTypeObject PyExc_RuntimeError
+Objects/exceptions.c	-	_PyExc_RuntimeWarning	variable	static PyTypeObject _PyExc_RuntimeWarning
+Objects/exceptions.c	-	PyExc_RuntimeWarning	variable	static PyTypeObject PyExc_RuntimeWarning
+Objects/exceptions.c	-	_PyExc_StopAsyncIteration	variable	static PyTypeObject _PyExc_StopAsyncIteration
+Objects/exceptions.c	-	PyExc_StopAsyncIteration	variable	static PyTypeObject PyExc_StopAsyncIteration
+Objects/exceptions.c	-	_PyExc_StopIteration	variable	static PyTypeObject _PyExc_StopIteration
+Objects/exceptions.c	-	PyExc_StopIteration	variable	static PyTypeObject PyExc_StopIteration
+Objects/exceptions.c	-	_PyExc_SyntaxError	variable	static PyTypeObject _PyExc_SyntaxError
+Objects/exceptions.c	-	PyExc_SyntaxError	variable	static PyTypeObject PyExc_SyntaxError
+Objects/exceptions.c	-	_PyExc_SyntaxWarning	variable	static PyTypeObject _PyExc_SyntaxWarning
+Objects/exceptions.c	-	PyExc_SyntaxWarning	variable	static PyTypeObject PyExc_SyntaxWarning
+Objects/exceptions.c	-	_PyExc_SystemError	variable	static PyTypeObject _PyExc_SystemError
+Objects/exceptions.c	-	PyExc_SystemError	variable	static PyTypeObject PyExc_SystemError
+Objects/exceptions.c	-	_PyExc_SystemExit	variable	static PyTypeObject _PyExc_SystemExit
+Objects/exceptions.c	-	PyExc_SystemExit	variable	static PyTypeObject PyExc_SystemExit
+Objects/exceptions.c	-	_PyExc_TabError	variable	static PyTypeObject _PyExc_TabError
+Objects/exceptions.c	-	PyExc_TabError	variable	static PyTypeObject PyExc_TabError
+Objects/exceptions.c	-	_PyExc_TargetScopeError	variable	static PyTypeObject _PyExc_TargetScopeError
+Objects/exceptions.c	-	PyExc_TargetScopeError	variable	static PyTypeObject PyExc_TargetScopeError
+Objects/exceptions.c	-	_PyExc_TimeoutError	variable	static PyTypeObject _PyExc_TimeoutError
+Objects/exceptions.c	-	PyExc_TimeoutError	variable	static PyTypeObject PyExc_TimeoutError
+Objects/exceptions.c	-	_PyExc_TypeError	variable	static PyTypeObject _PyExc_TypeError
+Objects/exceptions.c	-	PyExc_TypeError	variable	static PyTypeObject PyExc_TypeError
+Objects/exceptions.c	-	_PyExc_UnboundLocalError	variable	static PyTypeObject _PyExc_UnboundLocalError
+Objects/exceptions.c	-	PyExc_UnboundLocalError	variable	static PyTypeObject PyExc_UnboundLocalError
+Objects/exceptions.c	-	_PyExc_UnicodeDecodeError	variable	static PyTypeObject _PyExc_UnicodeDecodeError
+Objects/exceptions.c	-	PyExc_UnicodeDecodeError	variable	static PyTypeObject PyExc_UnicodeDecodeError
+Objects/exceptions.c	-	_PyExc_UnicodeEncodeError	variable	static PyTypeObject _PyExc_UnicodeEncodeError
+Objects/exceptions.c	-	PyExc_UnicodeEncodeError	variable	static PyTypeObject PyExc_UnicodeEncodeError
+Objects/exceptions.c	-	_PyExc_UnicodeError	variable	static PyTypeObject _PyExc_UnicodeError
+Objects/exceptions.c	-	PyExc_UnicodeError	variable	static PyTypeObject PyExc_UnicodeError
+Objects/exceptions.c	-	_PyExc_UnicodeTranslateError	variable	static PyTypeObject _PyExc_UnicodeTranslateError
+Objects/exceptions.c	-	PyExc_UnicodeTranslateError	variable	static PyTypeObject PyExc_UnicodeTranslateError
+Objects/exceptions.c	-	_PyExc_UnicodeWarning	variable	static PyTypeObject _PyExc_UnicodeWarning
+Objects/exceptions.c	-	PyExc_UnicodeWarning	variable	static PyTypeObject PyExc_UnicodeWarning
+Objects/exceptions.c	-	_PyExc_UserWarning	variable	static PyTypeObject _PyExc_UserWarning
+Objects/exceptions.c	-	PyExc_UserWarning	variable	static PyTypeObject PyExc_UserWarning
+Objects/exceptions.c	-	_PyExc_ValueError	variable	static PyTypeObject _PyExc_ValueError
+Objects/exceptions.c	-	PyExc_ValueError	variable	static PyTypeObject PyExc_ValueError
+Objects/exceptions.c	-	_PyExc_Warning	variable	static PyTypeObject _PyExc_Warning
+Objects/exceptions.c	-	PyExc_Warning	variable	static PyTypeObject PyExc_Warning
+Objects/exceptions.c	-	_PyExc_ZeroDivisionError	variable	static PyTypeObject _PyExc_ZeroDivisionError
+Objects/exceptions.c	-	PyExc_ZeroDivisionError	variable	static PyTypeObject PyExc_ZeroDivisionError
+Objects/boolobject.c	-	_Py_FalseStruct	variable	static struct _longobject _Py_FalseStruct
+Objects/tupleobject.c	-	_Py_fast_tuple_allocs	variable	Py_ssize_t _Py_fast_tuple_allocs
+Objects/stringlib/unicode_format.h	-	PyFieldNameIter_Type	variable	static PyTypeObject PyFieldNameIter_Type
+Modules/_io/fileio.c	-	PyFileIO_Type	variable	PyTypeObject PyFileIO_Type
+Python/preconfig.c	-	Py_FileSystemDefaultEncodeErrors	variable	const char *Py_FileSystemDefaultEncodeErrors
+Python/preconfig.c	-	Py_FileSystemDefaultEncoding	variable	const char * Py_FileSystemDefaultEncoding
+Python/bltinmodule.c	-	PyFilter_Type	variable	PyTypeObject PyFilter_Type
+Objects/floatobject.c	-	PyFloat_Type	variable	PyTypeObject PyFloat_Type
+Objects/stringlib/unicode_format.h	-	PyFormatterIter_Type	variable	static PyTypeObject PyFormatterIter_Type
+Objects/frameobject.c	-	PyFrame_Type	variable	PyTypeObject PyFrame_Type
+Python/initconfig.c	-	Py_FrozenFlag	variable	int Py_FrozenFlag
+Objects/setobject.c	-	PyFrozenSet_Type	variable	PyTypeObject PyFrozenSet_Type
+Objects/funcobject.c	-	PyFunction_Type	variable	PyTypeObject PyFunction_Type
+Objects/genobject.c	-	PyGen_Type	variable	PyTypeObject PyGen_Type
+Objects/descrobject.c	-	PyGetSetDescr_Type	variable	PyTypeObject PyGetSetDescr_Type
+Python/hamt.c	-	_PyHamt_ArrayNode_Type	variable	PyTypeObject _PyHamt_ArrayNode_Type
+Python/hamt.c	-	PyHamt_as_mapping	variable	static PyMappingMethods PyHamt_as_mapping
+Python/hamt.c	-	PyHamt_as_sequence	variable	static PySequenceMethods PyHamt_as_sequence
+Python/hamt.c	-	_PyHamt_BitmapNode_Type	variable	PyTypeObject _PyHamt_BitmapNode_Type
+Python/hamt.c	-	_PyHamt_CollisionNode_Type	variable	PyTypeObject _PyHamt_CollisionNode_Type
+Python/hamt.c	-	_PyHamtItems_Type	variable	PyTypeObject _PyHamtItems_Type
+Python/hamt.c	-	PyHamtIterator_as_mapping	variable	static PyMappingMethods PyHamtIterator_as_mapping
+Python/hamt.c	-	_PyHamtKeys_Type	variable	PyTypeObject _PyHamtKeys_Type
+Python/hamt.c	-	PyHamt_methods	variable	static PyMethodDef PyHamt_methods
+Python/hamt.c	-	_PyHamt_Type	variable	PyTypeObject _PyHamt_Type
+Python/hamt.c	-	_PyHamtValues_Type	variable	PyTypeObject _PyHamtValues_Type
+Python/preconfig.c	-	_Py_HasFileSystemDefaultEncodeErrors	variable	const(int) _Py_HasFileSystemDefaultEncodeErrors
+Python/preconfig.c	-	Py_HasFileSystemDefaultEncoding	variable	const(int) Py_HasFileSystemDefaultEncoding
+Python/pyhash.c	-	PyHash_Func	variable	static PyHash_FuncDef PyHash_Func
+Python/initconfig.c	-	Py_HashRandomizationFlag	variable	int Py_HashRandomizationFlag
+Python/pyhash.c	-	_Py_HashSecret	variable	_Py_HashSecret_t _Py_HashSecret
+Python/bootstrap_hash.c	-	_Py_HashSecret_Initialized	variable	static int _Py_HashSecret_Initialized
+Python/codecs.c	-	Py_hexdigits	variable	const char * Py_hexdigits
+Python/sysmodule.c	-	PyId__	variable	_Py_IDENTIFIER(_)
+Modules/_abc.c	-	PyId__abc_impl	variable	_Py_IDENTIFIER(_abc_impl)
+Objects/typeobject.c	-	PyId___abstractmethods__	variable	_Py_IDENTIFIER(__abstractmethods__)
+Modules/_abc.c	-	PyId___abstractmethods__	variable	_Py_IDENTIFIER(__abstractmethods__)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___aenter__	variable	_Py_IDENTIFIER(__aenter__)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___aexit__	variable	_Py_IDENTIFIER(__aexit__)
+Objects/typeobject.c	slot_am_aiter	PyId___aiter__	variable	_Py_IDENTIFIER(__aiter__)
+Python/ceval.c	import_all_from	PyId___all__	variable	_Py_IDENTIFIER(__all__)
+Objects/typeobject.c	slot_am_anext	PyId___anext__	variable	_Py_IDENTIFIER(__anext__)
+Python/Python-ast.c	-	PyId_annotation	variable	_Py_IDENTIFIER(annotation)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___annotations__	variable	_Py_IDENTIFIER(__annotations__)
+Python/Python-ast.c	-	PyId_arg	variable	_Py_IDENTIFIER(arg)
+Python/Python-ast.c	-	PyId_args	variable	_Py_IDENTIFIER(args)
+Python/Python-ast.c	-	PyId_argtypes	variable	_Py_IDENTIFIER(argtypes)
+Python/Python-ast.c	-	PyId_asname	variable	_Py_IDENTIFIER(asname)
+Python/Python-ast.c	make_type	PyId__ast	variable	_Py_IDENTIFIER(_ast)
+Python/Python-ast.c	-	PyId_attr	variable	_Py_IDENTIFIER(attr)
+Python/Python-ast.c	-	PyId__attributes	variable	_Py_IDENTIFIER(_attributes)
+Objects/typeobject.c	slot_am_await	PyId___await__	variable	_Py_IDENTIFIER(__await__)
+Python/Python-ast.c	-	PyId_bases	variable	_Py_IDENTIFIER(bases)
+Modules/_abc.c	-	PyId___bases__	variable	_Py_IDENTIFIER(__bases__)
+Objects/abstract.c	abstract_get_bases	PyId___bases__	variable	_Py_IDENTIFIER(__bases__)
+Objects/typeobject.c	merge_class_dict	PyId___bases__	variable	_Py_IDENTIFIER(__bases__)
+Objects/longobject.c	-	PyId_big	variable	_Py_IDENTIFIER(big)
+Modules/_io/_iomodule.c	_io_open_impl	PyId__blksize	variable	_Py_IDENTIFIER(_blksize)
+Python/Python-ast.c	-	PyId_body	variable	_Py_IDENTIFIER(body)
+Objects/typeobject.c	slot_nb_bool	PyId___bool__	variable	_Py_IDENTIFIER(__bool__)
+Python/sysmodule.c	-	PyId_buffer	variable	_Py_IDENTIFIER(buffer)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___build_class__	variable	_Py_IDENTIFIER(__build_class__)
+Objects/typeobject.c	-	PyId_builtins	variable	_Py_IDENTIFIER(builtins)
+Python/errors.c	-	PyId_builtins	variable	_Py_IDENTIFIER(builtins)
+Python/pythonrun.c	-	PyId_builtins	variable	_Py_IDENTIFIER(builtins)
+Python/sysmodule.c	-	PyId_builtins	variable	_Py_IDENTIFIER(builtins)
+Objects/frameobject.c	-	PyId___builtins__	variable	_Py_IDENTIFIER(__builtins__)
+Python/bltinmodule.c	-	PyId___builtins__	variable	_Py_IDENTIFIER(__builtins__)
+Python/import.c	module_dict_for_exec	PyId___builtins__	variable	_Py_IDENTIFIER(__builtins__)
+Objects/object.c	-	PyId___bytes__	variable	_Py_IDENTIFIER(__bytes__)
+Objects/bytesobject.c	format_obj	PyId___bytes__	variable	_Py_IDENTIFIER(__bytes__)
+Objects/bytesobject.c	bytes_new	PyId___bytes__	variable	_Py_IDENTIFIER(__bytes__)
+Objects/weakrefobject.c	proxy_bytes	PyId___bytes__	variable	_Py_IDENTIFIER(__bytes__)
+Objects/typeobject.c	slot_tp_call	PyId___call__	variable	_Py_IDENTIFIER(__call__)
+Python/Python-ast.c	-	PyId_cause	variable	_Py_IDENTIFIER(cause)
+Objects/typeobject.c	-	PyId___class__	variable	_Py_IDENTIFIER(__class__)
+Modules/_abc.c	-	PyId___class__	variable	_Py_IDENTIFIER(__class__)
+Python/compile.c	compiler_enter_scope	PyId___class__	variable	_Py_IDENTIFIER(__class__)
+Objects/abstract.c	recursive_isinstance	PyId___class__	variable	_Py_IDENTIFIER(__class__)
+Objects/typeobject.c	type_new	PyId___classcell__	variable	_Py_IDENTIFIER(__classcell__)
+Objects/typeobject.c	-	PyId___class_getitem__	variable	_Py_IDENTIFIER(__class_getitem__)
+Objects/abstract.c	PyObject_GetItem	PyId___class_getitem__	variable	_Py_IDENTIFIER(__class_getitem__)
+Python/import.c	PyImport_Cleanup	PyId_clear	variable	_Py_IDENTIFIER(clear)
+Python/traceback.c	-	PyId_close	variable	_Py_IDENTIFIER(close)
+Modules/_io/bufferedio.c	-	PyId_close	variable	_Py_IDENTIFIER(close)
+Modules/_io/textio.c	-	PyId_close	variable	_Py_IDENTIFIER(close)
+Objects/genobject.c	gen_close_iter	PyId_close	variable	_Py_IDENTIFIER(close)
+Modules/_dbmmodule.c	dbm__exit__	PyId_close	variable	_Py_IDENTIFIER(close)
+Modules/_gdbmmodule.c	dbm__exit__	PyId_close	variable	_Py_IDENTIFIER(close)
+Python/pythonrun.c	_Py_HandleSystemExit	PyId_code	variable	_Py_IDENTIFIER(code)
+Python/Python-ast.c	-	PyId_col_offset	variable	_Py_IDENTIFIER(col_offset)
+Python/Python-ast.c	-	PyId_comparators	variable	_Py_IDENTIFIER(comparators)
+Objects/complexobject.c	try_complex_special_method	PyId___complex__	variable	_Py_IDENTIFIER(__complex__)
+Objects/typeobject.c	slot_sq_contains	PyId___contains__	variable	_Py_IDENTIFIER(__contains__)
+Python/Python-ast.c	-	PyId_context_expr	variable	_Py_IDENTIFIER(context_expr)
+Python/Python-ast.c	-	PyId_conversion	variable	_Py_IDENTIFIER(conversion)
+Modules/itertoolsmodule.c	itertools_tee_impl	PyId___copy__	variable	_Py_IDENTIFIER(__copy__)
+Objects/descrobject.c	mappingproxy_copy	PyId_copy	variable	_Py_IDENTIFIER(copy)
+Objects/typeobject.c	import_copyreg	PyId_copyreg	variable	_Py_IDENTIFIER(copyreg)
+Python/Python-ast.c	-	PyId_ctx	variable	_Py_IDENTIFIER(ctx)
+Modules/_io/bufferedio.c	-	PyId__dealloc_warn	variable	_Py_IDENTIFIER(_dealloc_warn)
+Modules/_io/textio.c	-	PyId__dealloc_warn	variable	_Py_IDENTIFIER(_dealloc_warn)
+Modules/_io/textio.c	-	PyId_decode	variable	_Py_IDENTIFIER(decode)
+Python/Python-ast.c	-	PyId_decorator_list	variable	_Py_IDENTIFIER(decorator_list)
+Python/_warnings.c	get_default_action	PyId_defaultaction	variable	_Py_IDENTIFIER(defaultaction)
+Python/Python-ast.c	-	PyId_defaults	variable	_Py_IDENTIFIER(defaults)
+Objects/typeobject.c	slot_tp_finalize	PyId___del__	variable	_Py_IDENTIFIER(__del__)
+Objects/typeobject.c	slot_tp_setattro	PyId___delattr__	variable	_Py_IDENTIFIER(__delattr__)
+Objects/typeobject.c	slot_tp_descr_set	PyId___delete__	variable	_Py_IDENTIFIER(__delete__)
+Objects/typeobject.c	-	PyId___delitem__	variable	_Py_IDENTIFIER(__delitem__)
+Objects/typeobject.c	-	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Modules/_abc.c	-	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Python/bltinmodule.c	-	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Python/Python-ast.c	ast_type_reduce	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Python/ceval.c	import_all_from	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Objects/bytearrayobject.c	_common_reduce	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Objects/moduleobject.c	module_dir	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Objects/odictobject.c	odict_reduce	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Objects/setobject.c	set_reduce	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Modules/_collectionsmodule.c	deque_reduce	PyId___dict__	variable	_Py_IDENTIFIER(__dict__)
+Objects/dictobject.c	dictviews_sub	PyId_difference_update	variable	_Py_IDENTIFIER(difference_update)
+Python/Python-ast.c	-	PyId_dims	variable	_Py_IDENTIFIER(dims)
+Objects/object.c	-	PyId___dir__	variable	_Py_IDENTIFIER(__dir__)
+Objects/moduleobject.c	module_dir	PyId___dir__	variable	_Py_IDENTIFIER(__dir__)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId_displayhook	variable	_Py_IDENTIFIER(displayhook)
+Objects/typeobject.c	-	PyId___doc__	variable	_Py_IDENTIFIER(__doc__)
+Objects/descrobject.c	property_init_impl	PyId___doc__	variable	_Py_IDENTIFIER(__doc__)
+Objects/moduleobject.c	module_init_dict	PyId___doc__	variable	_Py_IDENTIFIER(__doc__)
+Objects/moduleobject.c	PyModule_SetDocString	PyId___doc__	variable	_Py_IDENTIFIER(__doc__)
+Python/Python-ast.c	-	PyId_elt	variable	_Py_IDENTIFIER(elt)
+Python/Python-ast.c	-	PyId_elts	variable	_Py_IDENTIFIER(elts)
+Modules/faulthandler.c	-	PyId_enable	variable	_Py_IDENTIFIER(enable)
+Python/sysmodule.c	-	PyId_encoding	variable	_Py_IDENTIFIER(encoding)
+Python/bltinmodule.c	-	PyId_encoding	variable	_Py_IDENTIFIER(encoding)
+Python/pythonrun.c	PyRun_InteractiveOneObjectEx	PyId_encoding	variable	_Py_IDENTIFIER(encoding)
+Python/Python-ast.c	-	PyId_end_col_offset	variable	_Py_IDENTIFIER(end_col_offset)
+Python/Python-ast.c	-	PyId_end_lineno	variable	_Py_IDENTIFIER(end_lineno)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___enter__	variable	_Py_IDENTIFIER(__enter__)
+Objects/typeobject.c	overrides_hash	PyId___eq__	variable	_Py_IDENTIFIER(__eq__)
+Python/bltinmodule.c	-	PyId_errors	variable	_Py_IDENTIFIER(errors)
+Python/Python-ast.c	-	PyId_exc	variable	_Py_IDENTIFIER(exc)
+Python/pythonrun.c	-	PyId_excepthook	variable	_Py_IDENTIFIER(excepthook)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___exit__	variable	_Py_IDENTIFIER(__exit__)
+Modules/_pickle.c	do_append	PyId_extend	variable	_Py_IDENTIFIER(extend)
+Python/Python-ast.c	-	PyId__fields	variable	_Py_IDENTIFIER(_fields)
+Objects/moduleobject.c	PyModule_GetFilenameObject	PyId___file__	variable	_Py_IDENTIFIER(__file__)
+Python/errors.c	PyErr_SyntaxLocationObject	PyId_filename	variable	_Py_IDENTIFIER(filename)
+Python/pythonrun.c	parse_syntax_error	PyId_filename	variable	_Py_IDENTIFIER(filename)
+Modules/_io/textio.c	-	PyId_fileno	variable	_Py_IDENTIFIER(fileno)
+Modules/faulthandler.c	-	PyId_fileno	variable	_Py_IDENTIFIER(fileno)
+Python/bltinmodule.c	-	PyId_fileno	variable	_Py_IDENTIFIER(fileno)
+Objects/fileobject.c	PyObject_AsFileDescriptor	PyId_fileno	variable	_Py_IDENTIFIER(fileno)
+Modules/itertoolsmodule.c	zip_longest_new	PyId_fillvalue	variable	_Py_IDENTIFIER(fillvalue)
+Python/_warnings.c	get_filter	PyId_filters	variable	_Py_IDENTIFIER(filters)
+Python/Python-ast.c	-	PyId_finalbody	variable	_Py_IDENTIFIER(finalbody)
+Modules/_io/iobase.c	iobase_finalize	PyId__finalizing	variable	_Py_IDENTIFIER(_finalizing)
+Python/import.c	import_find_and_load	PyId__find_and_load	variable	_Py_IDENTIFIER(_find_and_load)
+Python/import.c	PyImport_ExecCodeModuleObject	PyId__fix_up_module	variable	_Py_IDENTIFIER(_fix_up_module)
+Python/errors.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Python/pylifecycle.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Python/pythonrun.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Modules/_threadmodule.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Modules/_io/bufferedio.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Modules/_io/textio.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Modules/faulthandler.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Python/bltinmodule.c	-	PyId_flush	variable	_Py_IDENTIFIER(flush)
+Objects/abstract.c	PyObject_Format	PyId___format__	variable	_Py_IDENTIFIER(__format__)
+Python/Python-ast.c	-	PyId_format_spec	variable	_Py_IDENTIFIER(format_spec)
+Modules/posixmodule.c	path_converter	PyId___fspath__	variable	_Py_IDENTIFIER(__fspath__)
+Modules/posixmodule.c	PyOS_FSPath	PyId___fspath__	variable	_Py_IDENTIFIER(__fspath__)
+Python/Python-ast.c	-	PyId_func	variable	_Py_IDENTIFIER(func)
+Python/Python-ast.c	-	PyId_generators	variable	_Py_IDENTIFIER(generators)
+Objects/descrobject.c	mappingproxy_get	PyId_get	variable	_Py_IDENTIFIER(get)
+Modules/_collectionsmodule.c	_count_elements	PyId_get	variable	_Py_IDENTIFIER(get)
+Objects/typeobject.c	slot_tp_descr_get	PyId___get__	variable	_Py_IDENTIFIER(__get__)
+Objects/classobject.c	method_reduce	PyId_getattr	variable	_Py_IDENTIFIER(getattr)
+Objects/descrobject.c	descr_reduce	PyId_getattr	variable	_Py_IDENTIFIER(getattr)
+Objects/descrobject.c	wrapper_reduce	PyId_getattr	variable	_Py_IDENTIFIER(getattr)
+Objects/moduleobject.c	module_getattro	PyId___getattr__	variable	_Py_IDENTIFIER(__getattr__)
+Objects/methodobject.c	meth_reduce	PyId_getattr	variable	_Py_IDENTIFIER(getattr)
+Objects/typeobject.c	slot_tp_getattr_hook	PyId___getattr__	variable	_Py_IDENTIFIER(__getattr__)
+Objects/typeobject.c	-	PyId___getattribute__	variable	_Py_IDENTIFIER(__getattribute__)
+Objects/typeobject.c	-	PyId___getitem__	variable	_Py_IDENTIFIER(__getitem__)
+Objects/typeobject.c	_PyObject_GetNewArguments	PyId___getnewargs__	variable	_Py_IDENTIFIER(__getnewargs__)
+Objects/typeobject.c	_PyObject_GetNewArguments	PyId___getnewargs_ex__	variable	_Py_IDENTIFIER(__getnewargs_ex__)
+Modules/_io/textio.c	-	PyId_getpreferredencoding	variable	_Py_IDENTIFIER(getpreferredencoding)
+Python/_warnings.c	get_source_line	PyId_get_source	variable	_Py_IDENTIFIER(get_source)
+Python/import.c	PyImport_ExecCodeModuleWithPathnames	PyId__get_sourcefile	variable	_Py_IDENTIFIER(_get_sourcefile)
+Objects/typeobject.c	_PyObject_GetState	PyId___getstate__	variable	_Py_IDENTIFIER(__getstate__)
+Python/import.c	PyImport_ImportModuleLevelObject	PyId__handle_fromlist	variable	_Py_IDENTIFIER(_handle_fromlist)
+Python/Python-ast.c	-	PyId_handlers	variable	_Py_IDENTIFIER(handlers)
+Objects/typeobject.c	-	PyId___hash__	variable	_Py_IDENTIFIER(__hash__)
+Python/Python-ast.c	-	PyId_id	variable	_Py_IDENTIFIER(id)
+Python/Python-ast.c	-	PyId_ifs	variable	_Py_IDENTIFIER(ifs)
+Python/import.c	PyImport_ReloadModule	PyId_imp	variable	_Py_IDENTIFIER(imp)
+Python/ceval.c	import_name	PyId___import__	variable	_Py_IDENTIFIER(__import__)
+Objects/typeobject.c	slot_nb_index	PyId___index__	variable	_Py_IDENTIFIER(__index__)
+Objects/typeobject.c	slot_tp_init	PyId___init__	variable	_Py_IDENTIFIER(__init__)
+Objects/moduleobject.c	_PyModuleSpec_IsInitializing	PyId__initializing	variable	_Py_IDENTIFIER(_initializing)
+Objects/typeobject.c	-	PyId___init_subclass__	variable	_Py_IDENTIFIER(__init_subclass__)
+Objects/abstract.c	PyObject_IsInstance	PyId___instancecheck__	variable	_Py_IDENTIFIER(__instancecheck__)
+Objects/dictobject.c	_PyDictView_Intersect	PyId_intersection_update	variable	_Py_IDENTIFIER(intersection_update)
+Modules/_io/iobase.c	-	PyId___IOBase_closed	variable	_Py_IDENTIFIER(__IOBase_closed)
+Objects/typeobject.c	slot_nb_inplace_power	PyId___ipow__	variable	_Py_IDENTIFIER(__ipow__)
+Objects/object.c	-	PyId___isabstractmethod__	variable	_Py_IDENTIFIER(__isabstractmethod__)
+Python/Python-ast.c	-	PyId_is_async	variable	_Py_IDENTIFIER(is_async)
+Modules/_io/bufferedio.c	-	PyId_isatty	variable	_Py_IDENTIFIER(isatty)
+Modules/_io/textio.c	-	PyId_isatty	variable	_Py_IDENTIFIER(isatty)
+Python/pylifecycle.c	create_stdio	PyId_isatty	variable	_Py_IDENTIFIER(isatty)
+Modules/_io/_iomodule.c	_io_open_impl	PyId_isatty	variable	_Py_IDENTIFIER(isatty)
+Python/codecs.c	_PyCodec_LookupTextEncoding	PyId__is_text_encoding	variable	_Py_IDENTIFIER(_is_text_encoding)
+Python/Python-ast.c	-	PyId_items	variable	_Py_IDENTIFIER(items)
+Objects/abstract.c	PyMapping_Items	PyId_items	variable	_Py_IDENTIFIER(items)
+Objects/descrobject.c	mappingproxy_items	PyId_items	variable	_Py_IDENTIFIER(items)
+Objects/odictobject.c	odict_reduce	PyId_items	variable	_Py_IDENTIFIER(items)
+Objects/odictobject.c	odict_repr	PyId_items	variable	_Py_IDENTIFIER(items)
+Objects/odictobject.c	mutablemapping_update	PyId_items	variable	_Py_IDENTIFIER(items)
+Objects/typeobject.c	_PyObject_GetItemsIter	PyId_items	variable	_Py_IDENTIFIER(items)
+Modules/_collectionsmodule.c	defdict_reduce	PyId_items	variable	_Py_IDENTIFIER(items)
+Python/Python-ast.c	-	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/bytearrayobject.c	bytearrayiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/bytesobject.c	striter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/dictobject.c	dictiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/iterobject.c	iter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/iterobject.c	calliter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/listobject.c	listiter_reduce_general	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/odictobject.c	odictiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/rangeobject.c	rangeiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/rangeobject.c	longrangeiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/setobject.c	setiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/tupleobject.c	tupleiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/unicodeobject.c	unicodeiter_reduce	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Objects/typeobject.c	slot_tp_iter	PyId___iter__	variable	_Py_IDENTIFIER(__iter__)
+Modules/arraymodule.c	array_arrayiterator___reduce___impl	PyId_iter	variable	_Py_IDENTIFIER(iter)
+Python/Python-ast.c	-	PyId_key	variable	_Py_IDENTIFIER(key)
+Python/Python-ast.c	-	PyId_keys	variable	_Py_IDENTIFIER(keys)
+Objects/abstract.c	PyMapping_Keys	PyId_keys	variable	_Py_IDENTIFIER(keys)
+Objects/descrobject.c	mappingproxy_keys	PyId_keys	variable	_Py_IDENTIFIER(keys)
+Objects/dictobject.c	dict_update_common	PyId_keys	variable	_Py_IDENTIFIER(keys)
+Objects/odictobject.c	mutablemapping_update	PyId_keys	variable	_Py_IDENTIFIER(keys)
+Python/Python-ast.c	-	PyId_keywords	variable	_Py_IDENTIFIER(keywords)
+Python/Python-ast.c	-	PyId_kind	variable	_Py_IDENTIFIER(kind)
+Python/Python-ast.c	-	PyId_kwarg	variable	_Py_IDENTIFIER(kwarg)
+Python/Python-ast.c	-	PyId_kw_defaults	variable	_Py_IDENTIFIER(kw_defaults)
+Python/Python-ast.c	-	PyId_kwonlyargs	variable	_Py_IDENTIFIER(kwonlyargs)
+Python/pythonrun.c	-	PyId_last_traceback	variable	_Py_IDENTIFIER(last_traceback)
+Python/pythonrun.c	-	PyId_last_type	variable	_Py_IDENTIFIER(last_type)
+Python/pythonrun.c	-	PyId_last_value	variable	_Py_IDENTIFIER(last_value)
+Python/Python-ast.c	-	PyId_left	variable	_Py_IDENTIFIER(left)
+Objects/typeobject.c	-	PyId___len__	variable	_Py_IDENTIFIER(__len__)
+Objects/abstract.c	PyObject_LengthHint	PyId___length_hint__	variable	_Py_IDENTIFIER(__length_hint__)
+Python/Python-ast.c	-	PyId_level	variable	_Py_IDENTIFIER(level)
+Python/Python-ast.c	-	PyId_lineno	variable	_Py_IDENTIFIER(lineno)
+Python/errors.c	PyErr_SyntaxLocationObject	PyId_lineno	variable	_Py_IDENTIFIER(lineno)
+Python/pythonrun.c	parse_syntax_error	PyId_lineno	variable	_Py_IDENTIFIER(lineno)
+Objects/longobject.c	-	PyId_little	variable	_Py_IDENTIFIER(little)
+Python/_warnings.c	get_source_line	PyId___loader__	variable	_Py_IDENTIFIER(__loader__)
+Objects/moduleobject.c	module_init_dict	PyId___loader__	variable	_Py_IDENTIFIER(__loader__)
+Python/import.c	PyImport_ImportModuleLevelObject	PyId__lock_unlock_module	variable	_Py_IDENTIFIER(_lock_unlock_module)
+Python/Python-ast.c	-	PyId_lower	variable	_Py_IDENTIFIER(lower)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId___ltrace__	variable	_Py_IDENTIFIER(__ltrace__)
+Python/pythonrun.c	PyRun_InteractiveOneObjectEx	PyId___main__	variable	_Py_IDENTIFIER(__main__)
+Python/_warnings.c	check_matched	PyId_match	variable	_Py_IDENTIFIER(match)
+Python/bltinmodule.c	-	PyId_metaclass	variable	_Py_IDENTIFIER(metaclass)
+Objects/dictobject.c	dict_subscript	PyId___missing__	variable	_Py_IDENTIFIER(__missing__)
+Modules/_io/bufferedio.c	-	PyId_mode	variable	_Py_IDENTIFIER(mode)
+Modules/_io/textio.c	-	PyId_mode	variable	_Py_IDENTIFIER(mode)
+Python/pylifecycle.c	create_stdio	PyId_mode	variable	_Py_IDENTIFIER(mode)
+Modules/_io/_iomodule.c	_io_open_impl	PyId_mode	variable	_Py_IDENTIFIER(mode)
+Python/Python-ast.c	-	PyId_module	variable	_Py_IDENTIFIER(module)
+Objects/typeobject.c	-	PyId___module__	variable	_Py_IDENTIFIER(__module__)
+Python/Python-ast.c	make_type	PyId___module__	variable	_Py_IDENTIFIER(__module__)
+Python/errors.c	PyErr_NewException	PyId___module__	variable	_Py_IDENTIFIER(__module__)
+Python/errors.c	PyErr_NewException	PyId___module__	variable	_Py_IDENTIFIER(__module__)
+Python/pythonrun.c	print_exception	PyId___module__	variable	_Py_IDENTIFIER(__module__)
+Modules/_pickle.c	whichmodule	PyId___module__	variable	_Py_IDENTIFIER(__module__)
+Objects/typeobject.c	type_mro_modified	PyId_mro	variable	_Py_IDENTIFIER(mro)
+Objects/typeobject.c	mro_invoke	PyId_mro	variable	_Py_IDENTIFIER(mro)
+Python/bltinmodule.c	-	PyId___mro_entries__	variable	_Py_IDENTIFIER(__mro_entries__)
+Objects/typeobject.c	type_new	PyId___mro_entries__	variable	_Py_IDENTIFIER(__mro_entries__)
+Python/Python-ast.c	-	PyId_msg	variable	_Py_IDENTIFIER(msg)
+Python/errors.c	PyErr_SyntaxLocationObject	PyId_msg	variable	_Py_IDENTIFIER(msg)
+Python/pythonrun.c	parse_syntax_error	PyId_msg	variable	_Py_IDENTIFIER(msg)
+Python/pylifecycle.c	-	PyId_name	variable	_Py_IDENTIFIER(name)
+Modules/_io/fileio.c	-	PyId_name	variable	_Py_IDENTIFIER(name)
+Modules/_io/bufferedio.c	-	PyId_name	variable	_Py_IDENTIFIER(name)
+Modules/_io/textio.c	-	PyId_name	variable	_Py_IDENTIFIER(name)
+Python/Python-ast.c	-	PyId_name	variable	_Py_IDENTIFIER(name)
+Objects/exceptions.c	ImportError_getstate	PyId_name	variable	_Py_IDENTIFIER(name)
+Objects/typeobject.c	-	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Objects/classobject.c	-	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/_warnings.c	setup_context	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/_warnings.c	get_source_line	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/_warnings.c	show_warning	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/ceval.c	import_from	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/ceval.c	import_all_from	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/import.c	resolve_name	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Objects/moduleobject.c	module_init_dict	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Objects/moduleobject.c	PyModule_GetNameObject	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Objects/moduleobject.c	module_getattro	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Objects/weakrefobject.c	weakref_repr	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Modules/_pickle.c	save_global	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Modules/_pickle.c	save_reduce	PyId___name__	variable	_Py_IDENTIFIER(__name__)
+Python/Python-ast.c	-	PyId_names	variable	_Py_IDENTIFIER(names)
+Objects/typeobject.c	-	PyId___new__	variable	_Py_IDENTIFIER(__new__)
+Objects/typeobject.c	reduce_newobj	PyId___newobj__	variable	_Py_IDENTIFIER(__newobj__)
+Objects/typeobject.c	reduce_newobj	PyId___newobj_ex__	variable	_Py_IDENTIFIER(__newobj_ex__)
+Objects/typeobject.c	slot_tp_iternext	PyId___next__	variable	_Py_IDENTIFIER(__next__)
+Objects/structseq.c	-	PyId_n_fields	variable	_Py_IDENTIFIER(n_fields)
+Python/ast.c	new_identifier	PyId_NFKC	variable	_Py_IDENTIFIER(NFKC)
+Objects/structseq.c	-	PyId_n_sequence_fields	variable	_Py_IDENTIFIER(n_sequence_fields)
+Objects/structseq.c	-	PyId_n_unnamed_fields	variable	_Py_IDENTIFIER(n_unnamed_fields)
+Python/errors.c	PyErr_SyntaxLocationObject	PyId_offset	variable	_Py_IDENTIFIER(offset)
+Python/pythonrun.c	parse_syntax_error	PyId_offset	variable	_Py_IDENTIFIER(offset)
+Python/_warnings.c	get_once_registry	PyId_onceregistry	variable	_Py_IDENTIFIER(onceregistry)
+Python/Python-ast.c	-	PyId_op	variable	_Py_IDENTIFIER(op)
+Python/traceback.c	-	PyId_open	variable	_Py_IDENTIFIER(open)
+Python/pylifecycle.c	create_stdio	PyId_open	variable	_Py_IDENTIFIER(open)
+Parser/tokenizer.c	fp_setreadl	PyId_open	variable	_Py_IDENTIFIER(open)
+Objects/fileobject.c	PyFile_FromFd	PyId_open	variable	_Py_IDENTIFIER(open)
+Objects/fileobject.c	PyFile_OpenCodeObject	PyId_open	variable	_Py_IDENTIFIER(open)
+Python/Python-ast.c	-	PyId_operand	variable	_Py_IDENTIFIER(operand)
+Python/Python-ast.c	-	PyId_ops	variable	_Py_IDENTIFIER(ops)
+Python/Python-ast.c	-	PyId_optional_vars	variable	_Py_IDENTIFIER(optional_vars)
+Python/Python-ast.c	-	PyId_orelse	variable	_Py_IDENTIFIER(orelse)
+Python/import.c	resolve_name	PyId___package__	variable	_Py_IDENTIFIER(__package__)
+Objects/moduleobject.c	module_init_dict	PyId___package__	variable	_Py_IDENTIFIER(__package__)
+Python/import.c	resolve_name	PyId_parent	variable	_Py_IDENTIFIER(parent)
+Modules/_operator.c	methodcaller_reduce	PyId_partial	variable	_Py_IDENTIFIER(partial)
+Python/sysmodule.c	-	PyId_path	variable	_Py_IDENTIFIER(path)
+Python/traceback.c	-	PyId_path	variable	_Py_IDENTIFIER(path)
+Objects/exceptions.c	ImportError_getstate	PyId_path	variable	_Py_IDENTIFIER(path)
+Modules/main.c	pymain_sys_path_add_path0	PyId_path	variable	_Py_IDENTIFIER(path)
+Python/import.c	resolve_name	PyId___path__	variable	_Py_IDENTIFIER(__path__)
+Python/import.c	PyImport_ImportModuleLevelObject	PyId___path__	variable	_Py_IDENTIFIER(__path__)
+Modules/_io/bufferedio.c	-	PyId_peek	variable	_Py_IDENTIFIER(peek)
+Python/Python-ast.c	-	PyId_posonlyargs	variable	_Py_IDENTIFIER(posonlyargs)
+Objects/typeobject.c	slot_nb_power	PyId___pow__	variable	_Py_IDENTIFIER(__pow__)
+Python/bltinmodule.c	-	PyId___prepare__	variable	_Py_IDENTIFIER(__prepare__)
+Python/errors.c	PyErr_SyntaxLocationObject	PyId_print_file_and_line	variable	_Py_IDENTIFIER(print_file_and_line)
+Python/pythonrun.c	print_exception	PyId_print_file_and_line	variable	_Py_IDENTIFIER(print_file_and_line)
+Python/pythonrun.c	-	PyId_ps1	variable	_Py_IDENTIFIER(ps1)
+Python/pythonrun.c	-	PyId_ps2	variable	_Py_IDENTIFIER(ps2)
+Objects/object.c	-	PyId_Py_Repr	variable	_Py_IDENTIFIER(Py_Repr)
+Objects/classobject.c	-	PyId___qualname__	variable	_Py_IDENTIFIER(__qualname__)
+Objects/descrobject.c	calculate_qualname	PyId___qualname__	variable	_Py_IDENTIFIER(__qualname__)
+Objects/methodobject.c	meth_get__qualname__	PyId___qualname__	variable	_Py_IDENTIFIER(__qualname__)
+Objects/typeobject.c	type_new	PyId___qualname__	variable	_Py_IDENTIFIER(__qualname__)
+Modules/_io/textio.c	-	PyId_raw	variable	_Py_IDENTIFIER(raw)
+Python/pylifecycle.c	create_stdio	PyId_raw	variable	_Py_IDENTIFIER(raw)
+Modules/_io/iobase.c	-	PyId_read	variable	_Py_IDENTIFIER(read)
+Modules/_io/bufferedio.c	-	PyId_read	variable	_Py_IDENTIFIER(read)
+Modules/_io/textio.c	-	PyId_read	variable	_Py_IDENTIFIER(read)
+Modules/_io/bufferedio.c	-	PyId_read1	variable	_Py_IDENTIFIER(read1)
+Python/marshal.c	marshal_load	PyId_read	variable	_Py_IDENTIFIER(read)
+Modules/_io/bufferedio.c	-	PyId_readable	variable	_Py_IDENTIFIER(readable)
+Modules/_io/textio.c	-	PyId_readable	variable	_Py_IDENTIFIER(readable)
+Modules/_io/iobase.c	_io__RawIOBase_read_impl	PyId_readall	variable	_Py_IDENTIFIER(readall)
+Modules/_io/bufferedio.c	-	PyId_readinto	variable	_Py_IDENTIFIER(readinto)
+Modules/_io/bufferedio.c	-	PyId_readinto1	variable	_Py_IDENTIFIER(readinto1)
+Python/marshal.c	r_string	PyId_readinto	variable	_Py_IDENTIFIER(readinto)
+Parser/tokenizer.c	fp_setreadl	PyId_readline	variable	_Py_IDENTIFIER(readline)
+Objects/fileobject.c	PyFile_GetLine	PyId_readline	variable	_Py_IDENTIFIER(readline)
+Objects/typeobject.c	object___reduce_ex___impl	PyId___reduce__	variable	_Py_IDENTIFIER(__reduce__)
+Python/import.c	PyImport_ReloadModule	PyId_reload	variable	_Py_IDENTIFIER(reload)
+Modules/_io/textio.c	-	PyId_replace	variable	_Py_IDENTIFIER(replace)
+Python/importdl.c	get_encoded_name	PyId_replace	variable	_Py_IDENTIFIER(replace)
+Objects/typeobject.c	slot_tp_repr	PyId___repr__	variable	_Py_IDENTIFIER(__repr__)
+Modules/_io/textio.c	-	PyId_reset	variable	_Py_IDENTIFIER(reset)
+Python/Python-ast.c	-	PyId_returns	variable	_Py_IDENTIFIER(returns)
+Objects/enumobject.c	reversed_new_impl	PyId___reversed__	variable	_Py_IDENTIFIER(__reversed__)
+Objects/listobject.c	listiter_reduce_general	PyId_reversed	variable	_Py_IDENTIFIER(reversed)
+Python/Python-ast.c	-	PyId_right	variable	_Py_IDENTIFIER(right)
+Python/bltinmodule.c	-	PyId___round__	variable	_Py_IDENTIFIER(__round__)
+Modules/_io/textio.c	-	PyId_seek	variable	_Py_IDENTIFIER(seek)
+Modules/_io/iobase.c	_io__IOBase_tell_impl	PyId_seek	variable	_Py_IDENTIFIER(seek)
+Modules/_io/textio.c	-	PyId_seekable	variable	_Py_IDENTIFIER(seekable)
+Python/ceval.c	_PyEval_EvalFrameDefault	PyId_send	variable	_Py_IDENTIFIER(send)
+Objects/typeobject.c	slot_tp_descr_set	PyId___set__	variable	_Py_IDENTIFIER(__set__)
+Objects/typeobject.c	slot_tp_setattro	PyId___setattr__	variable	_Py_IDENTIFIER(__setattr__)
+Objects/typeobject.c	-	PyId___setitem__	variable	_Py_IDENTIFIER(__setitem__)
+Modules/_collectionsmodule.c	_count_elements	PyId___setitem__	variable	_Py_IDENTIFIER(__setitem__)
+Objects/typeobject.c	-	PyId___set_name__	variable	_Py_IDENTIFIER(__set_name__)
+Modules/_io/textio.c	-	PyId_setstate	variable	_Py_IDENTIFIER(setstate)
+Modules/_pickle.c	load_build	PyId___setstate__	variable	_Py_IDENTIFIER(__setstate__)
+Python/_warnings.c	call_show_warning	PyId__showwarnmsg	variable	_Py_IDENTIFIER(_showwarnmsg)
+Python/pylifecycle.c	wait_for_thread_shutdown	PyId__shutdown	variable	_Py_IDENTIFIER(_shutdown)
+Python/Python-ast.c	-	PyId_simple	variable	_Py_IDENTIFIER(simple)
+Python/sysmodule.c	-	PyId___sizeof__	variable	_Py_IDENTIFIER(__sizeof__)
+Python/Python-ast.c	-	PyId_slice	variable	_Py_IDENTIFIER(slice)
+Objects/typeobject.c	_PyType_GetSlotNames	PyId___slotnames__	variable	_Py_IDENTIFIER(__slotnames__)
+Objects/typeobject.c	_PyType_GetSlotNames	PyId__slotnames	variable	_Py_IDENTIFIER(_slotnames)
+Objects/typeobject.c	type_new	PyId___slots__	variable	_Py_IDENTIFIER(__slots__)
+Python/bltinmodule.c	-	PyId_sort	variable	_Py_IDENTIFIER(sort)
+Python/import.c	resolve_name	PyId___spec__	variable	_Py_IDENTIFIER(__spec__)
+Python/import.c	PyImport_ImportModuleLevelObject	PyId___spec__	variable	_Py_IDENTIFIER(__spec__)
+Objects/moduleobject.c	module_init_dict	PyId___spec__	variable	_Py_IDENTIFIER(__spec__)
+Objects/moduleobject.c	module_getattro	PyId___spec__	variable	_Py_IDENTIFIER(__spec__)
+Python/_warnings.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Python/errors.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Python/pylifecycle.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Python/pythonrun.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Python/sysmodule.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Modules/_threadmodule.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Modules/faulthandler.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Python/bltinmodule.c	-	PyId_stderr	variable	_Py_IDENTIFIER(stderr)
+Python/pylifecycle.c	-	PyId_stdin	variable	_Py_IDENTIFIER(stdin)
+Python/pythonrun.c	-	PyId_stdin	variable	_Py_IDENTIFIER(stdin)
+Python/bltinmodule.c	-	PyId_stdin	variable	_Py_IDENTIFIER(stdin)
+Python/pylifecycle.c	-	PyId_stdout	variable	_Py_IDENTIFIER(stdout)
+Python/pythonrun.c	-	PyId_stdout	variable	_Py_IDENTIFIER(stdout)
+Python/sysmodule.c	-	PyId_stdout	variable	_Py_IDENTIFIER(stdout)
+Python/bltinmodule.c	-	PyId_stdout	variable	_Py_IDENTIFIER(stdout)
+Python/Python-ast.c	-	PyId_step	variable	_Py_IDENTIFIER(step)
+Modules/posixmodule.c	DirEntry_test_mode	PyId_st_mode	variable	_Py_IDENTIFIER(st_mode)
+Modules/_io/textio.c	-	PyId_strict	variable	_Py_IDENTIFIER(strict)
+Python/pythonrun.c	-	PyId_string	variable	_Py_static_string(PyId_string, ""<string>"")
+Modules/timemodule.c	time_strptime	PyId__strptime_time	variable	_Py_IDENTIFIER(_strptime_time)
+Modules/posixmodule.c	wait_helper	PyId_struct_rusage	variable	_Py_IDENTIFIER(struct_rusage)
+Modules/_abc.c	-	PyId___subclasscheck__	variable	_Py_IDENTIFIER(__subclasscheck__)
+Objects/abstract.c	PyObject_IsSubclass	PyId___subclasscheck__	variable	_Py_IDENTIFIER(__subclasscheck__)
+Modules/_abc.c	-	PyId___subclasshook__	variable	_Py_IDENTIFIER(__subclasshook__)
+Objects/dictobject.c	dictviews_xor	PyId_symmetric_difference_update	variable	_Py_IDENTIFIER(symmetric_difference_update)
+Python/Python-ast.c	-	PyId_tag	variable	_Py_IDENTIFIER(tag)
+Python/Python-ast.c	-	PyId_target	variable	_Py_IDENTIFIER(target)
+Python/Python-ast.c	-	PyId_targets	variable	_Py_IDENTIFIER(targets)
+Modules/_io/textio.c	-	PyId_tell	variable	_Py_IDENTIFIER(tell)
+Python/Python-ast.c	-	PyId_test	variable	_Py_IDENTIFIER(test)
+Python/errors.c	PyErr_SyntaxLocationObject	PyId_text	variable	_Py_IDENTIFIER(text)
+Python/pythonrun.c	parse_syntax_error	PyId_text	variable	_Py_IDENTIFIER(text)
+Python/traceback.c	-	PyId_TextIOWrapper	variable	_Py_IDENTIFIER(TextIOWrapper)
+Python/pylifecycle.c	create_stdio	PyId_TextIOWrapper	variable	_Py_IDENTIFIER(TextIOWrapper)
+Python/pylifecycle.c	-	PyId_threading	variable	_Py_IDENTIFIER(threading)
+Objects/genobject.c	_gen_throw	PyId_throw	variable	_Py_IDENTIFIER(throw)
+Objects/abstract.c	PyNumber_Long	PyId___trunc__	variable	_Py_IDENTIFIER(__trunc__)
+Python/Python-ast.c	-	PyId_type	variable	_Py_IDENTIFIER(type)
+Python/Python-ast.c	-	PyId_type_comment	variable	_Py_IDENTIFIER(type_comment)
+Python/Python-ast.c	-	PyId_type_ignores	variable	_Py_IDENTIFIER(type_ignores)
+Python/errors.c	_PyErr_WriteUnraisableMsg	PyId_unraisablehook	variable	_Py_IDENTIFIER(unraisablehook)
+Objects/dictobject.c	dictviews_or	PyId_update	variable	_Py_IDENTIFIER(update)
+Python/Python-ast.c	-	PyId_upper	variable	_Py_IDENTIFIER(upper)
+Python/Python-ast.c	-	PyId_value	variable	_Py_IDENTIFIER(value)
+Python/Python-ast.c	-	PyId_values	variable	_Py_IDENTIFIER(values)
+Objects/abstract.c	PyMapping_Values	PyId_values	variable	_Py_IDENTIFIER(values)
+Objects/descrobject.c	mappingproxy_values	PyId_values	variable	_Py_IDENTIFIER(values)
+Python/Python-ast.c	-	PyId_vararg	variable	_Py_IDENTIFIER(vararg)
+Python/_warnings.c	already_warned	PyId_version	variable	_Py_IDENTIFIER(version)
+Python/_warnings.c	call_show_warning	PyId_WarningMessage	variable	_Py_IDENTIFIER(WarningMessage)
+Python/_warnings.c	setup_context	PyId___warningregistry__	variable	_Py_IDENTIFIER(__warningregistry__)
+Python/_warnings.c	get_warnings_attr	PyId_warnings	variable	_Py_IDENTIFIER(warnings)
+Python/sysmodule.c	-	PyId_warnoptions	variable	_Py_IDENTIFIER(warnoptions)
+Python/_warnings.c	_PyErr_WarnUnawaitedCoroutine	PyId__warn_unawaited_coroutine	variable	_Py_IDENTIFIER(_warn_unawaited_coroutine)
+Modules/_io/bufferedio.c	-	PyId_writable	variable	_Py_IDENTIFIER(writable)
+Modules/_io/textio.c	-	PyId_writable	variable	_Py_IDENTIFIER(writable)
+Python/sysmodule.c	-	PyId_write	variable	_Py_IDENTIFIER(write)
+Modules/_io/bufferedio.c	-	PyId_write	variable	_Py_IDENTIFIER(write)
+Python/marshal.c	marshal_dump_impl	PyId_write	variable	_Py_IDENTIFIER(write)
+Objects/fileobject.c	PyFile_WriteObject	PyId_write	variable	_Py_IDENTIFIER(write)
+Python/sysmodule.c	-	PyId__xoptions	variable	_Py_IDENTIFIER(_xoptions)
+Python/import.c	_PyImportZip_Init	PyId_zipimporter	variable	_Py_IDENTIFIER(zipimporter)
+Python/initconfig.c	-	Py_IgnoreEnvironmentFlag	variable	int Py_IgnoreEnvironmentFlag
+Python/dynload_shlib.c	-	_PyImport_DynLoadFiletab	variable	const char *_PyImport_DynLoadFiletab[]
+Python/frozen.c	-	PyImport_FrozenModules	variable	const struct _frozen * PyImport_FrozenModules
+Modules/config.c	-	_PyImport_Inittab	variable	struct _inittab _PyImport_Inittab[]
+Python/import.c	-	PyImport_Inittab	variable	struct _inittab * PyImport_Inittab
+Modules/_io/textio.c	-	PyIncrementalNewlineDecoder_Type	variable	PyTypeObject PyIncrementalNewlineDecoder_Type
+Python/initconfig.c	-	Py_InspectFlag	variable	int Py_InspectFlag
+Objects/classobject.c	-	PyInstanceMethod_Type	variable	PyTypeObject PyInstanceMethod_Type
+Python/initconfig.c	-	Py_InteractiveFlag	variable	int Py_InteractiveFlag
+Objects/interpreteridobject.c	-	_PyInterpreterID_Type	variable	PyTypeObject _PyInterpreterID_Type
+Modules/_io/iobase.c	-	PyIOBase_Type	variable	PyTypeObject PyIOBase_Type
+Modules/_io/_iomodule.c	-	_PyIO_empty_bytes	variable	PyObject *_PyIO_empty_bytes
+Modules/_io/_iomodule.c	-	_PyIO_empty_str	variable	PyObject *_PyIO_empty_str
+Modules/_io/_iomodule.c	-	_PyIO_Module	variable	struct PyModuleDef _PyIO_Module
+Modules/_io/_iomodule.c	-	_PyIO_str_close	variable	PyObject *_PyIO_str_close
+Modules/_io/_iomodule.c	-	_PyIO_str_closed	variable	PyObject *_PyIO_str_closed
+Modules/_io/_iomodule.c	-	_PyIO_str_decode	variable	PyObject *_PyIO_str_decode
+Modules/_io/_iomodule.c	-	_PyIO_str_encode	variable	PyObject *_PyIO_str_encode
+Modules/_io/_iomodule.c	-	_PyIO_str_fileno	variable	PyObject *_PyIO_str_fileno
+Modules/_io/_iomodule.c	-	_PyIO_str_flush	variable	PyObject *_PyIO_str_flush
+Modules/_io/_iomodule.c	-	_PyIO_str_getstate	variable	PyObject *_PyIO_str_getstate
+Modules/_io/_iomodule.c	-	_PyIO_str_isatty	variable	PyObject *_PyIO_str_isatty
+Modules/_io/_iomodule.c	-	_PyIO_str_newlines	variable	PyObject *_PyIO_str_newlines
+Modules/_io/_iomodule.c	-	_PyIO_str_nl	variable	PyObject *_PyIO_str_nl
+Modules/_io/_iomodule.c	-	_PyIO_str_peek	variable	PyObject *_PyIO_str_peek
+Modules/_io/_iomodule.c	-	_PyIO_str_read	variable	PyObject *_PyIO_str_read
+Modules/_io/_iomodule.c	-	_PyIO_str_read1	variable	PyObject *_PyIO_str_read1
+Modules/_io/_iomodule.c	-	_PyIO_str_readable	variable	PyObject *_PyIO_str_readable
+Modules/_io/_iomodule.c	-	_PyIO_str_readall	variable	PyObject *_PyIO_str_readall
+Modules/_io/_iomodule.c	-	_PyIO_str_readinto	variable	PyObject *_PyIO_str_readinto
+Modules/_io/_iomodule.c	-	_PyIO_str_readline	variable	PyObject *_PyIO_str_readline
+Modules/_io/_iomodule.c	-	_PyIO_str_reset	variable	PyObject *_PyIO_str_reset
+Modules/_io/_iomodule.c	-	_PyIO_str_seek	variable	PyObject *_PyIO_str_seek
+Modules/_io/_iomodule.c	-	_PyIO_str_seekable	variable	PyObject *_PyIO_str_seekable
+Modules/_io/_iomodule.c	-	_PyIO_str_setstate	variable	PyObject *_PyIO_str_setstate
+Modules/_io/_iomodule.c	-	_PyIO_str_tell	variable	PyObject *_PyIO_str_tell
+Modules/_io/_iomodule.c	-	_PyIO_str_truncate	variable	PyObject *_PyIO_str_truncate
+Modules/_io/_iomodule.c	-	_PyIO_str_writable	variable	PyObject *_PyIO_str_writable
+Modules/_io/_iomodule.c	-	_PyIO_str_write	variable	PyObject *_PyIO_str_write
+Python/initconfig.c	-	Py_IsolatedFlag	variable	int Py_IsolatedFlag
+Objects/listobject.c	-	PyListIter_Type	variable	PyTypeObject PyListIter_Type
+Objects/listobject.c	-	PyListRevIter_Type	variable	PyTypeObject PyListRevIter_Type
+Objects/listobject.c	-	PyList_Type	variable	PyTypeObject PyList_Type
+Modules/_localemodule.c	-	PyLocale_Methods	variable	static struct PyMethodDef PyLocale_Methods[]
+Objects/longobject.c	-	_PyLong_DigitValue	variable	unsigned char _PyLong_DigitValue[256]
+Objects/longobject.c	-	_PyLong_One	variable	PyObject *_PyLong_One
+Objects/rangeobject.c	-	PyLongRangeIter_Type	variable	PyTypeObject PyLongRangeIter_Type
+Objects/longobject.c	-	PyLong_Type	variable	PyTypeObject PyLong_Type
+Objects/longobject.c	-	_PyLong_Zero	variable	PyObject *_PyLong_Zero
+Objects/memoryobject.c	-	_PyManagedBuffer_Type	variable	PyTypeObject _PyManagedBuffer_Type
+Python/bltinmodule.c	-	PyMap_Type	variable	PyTypeObject PyMap_Type
+Objects/obmalloc.c	-	_PyMem	variable	static PyMemAllocatorEx _PyMem
+Objects/descrobject.c	-	PyMemberDescr_Type	variable	PyTypeObject PyMemberDescr_Type
+Objects/obmalloc.c	-	_PyMem_Debug	variable	static struct { debug_alloc_api_t raw; debug_alloc_api_t mem; debug_alloc_api_t obj; } _PyMem_Debug
+Objects/memoryobject.c	-	PyMemoryView_Type	variable	PyTypeObject PyMemoryView_Type
+Objects/obmalloc.c	-	_PyMem_Raw	variable	static PyMemAllocatorEx _PyMem_Raw
+Objects/descrobject.c	-	PyMethodDescr_Type	variable	PyTypeObject PyMethodDescr_Type
+Objects/classobject.c	-	PyMethod_Type	variable	PyTypeObject PyMethod_Type
+Objects/descrobject.c	-	_PyMethodWrapper_Type	variable	PyTypeObject _PyMethodWrapper_Type
+Objects/moduleobject.c	-	PyModuleDef_Type	variable	PyTypeObject PyModuleDef_Type
+Objects/moduleobject.c	-	PyModule_Type	variable	PyTypeObject PyModule_Type
+Objects/namespaceobject.c	-	_PyNamespace_Type	variable	PyTypeObject _PyNamespace_Type
+Objects/object.c	-	_Py_NoneStruct	variable	PyObject _Py_NoneStruct
+Objects/object.c	-	_PyNone_Type	variable	PyTypeObject _PyNone_Type
+Python/initconfig.c	-	Py_NoSiteFlag	variable	int Py_NoSiteFlag
+Objects/object.c	-	_Py_NotImplementedStruct	variable	PyObject _Py_NotImplementedStruct
+Objects/object.c	-	_PyNotImplemented_Type	variable	PyTypeObject _PyNotImplemented_Type
+Python/initconfig.c	-	Py_NoUserSiteDirectory	variable	int Py_NoUserSiteDirectory
+Objects/bytesobject.c	-	_Py_null_strings	variable	Py_ssize_t _Py_null_strings
+Objects/obmalloc.c	-	_PyObject	variable	static PyMemAllocatorEx _PyObject
+Objects/obmalloc.c	-	_PyObject_Arena	variable	static PyObjectArenaAllocator _PyObject_Arena
+Objects/odictobject.c	-	PyODictItems_Type	variable	PyTypeObject PyODictItems_Type
+Objects/odictobject.c	-	PyODictIter_Type	variable	PyTypeObject PyODictIter_Type
+Objects/odictobject.c	-	PyODictKeys_Type	variable	PyTypeObject PyODictKeys_Type
+Objects/odictobject.c	-	PyODict_Type	variable	PyTypeObject PyODict_Type
+Objects/odictobject.c	-	PyODictValues_Type	variable	PyTypeObject PyODictValues_Type
+Python/fileutils.c	-	_Py_open_cloexec_works	variable	int _Py_open_cloexec_works
+Objects/bytesobject.c	-	_Py_one_strings	variable	Py_ssize_t _Py_one_strings
+Python/initconfig.c	-	Py_OptimizeFlag	variable	int Py_OptimizeFlag
+Parser/myreadline.c	-	PyOS_InputHook	variable	int (*PyOS_InputHook)(void)
+Python/pylifecycle.c	-	_PyOS_mystrnicmp_hack	variable	int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t)
+Python/getopt.c	-	_PyOS_optarg	variable	const wchar_t *_PyOS_optarg
+Python/getopt.c	-	_PyOS_opterr	variable	int _PyOS_opterr
+Python/getopt.c	-	_PyOS_optind	variable	Py_ssize_t _PyOS_optind
+Parser/myreadline.c	-	PyOS_ReadlineFunctionPointer	variable	char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *)
+Parser/myreadline.c	-	_PyOS_ReadlineLock	variable	static PyThread_type_lock _PyOS_ReadlineLock
+Parser/myreadline.c	-	_PyOS_ReadlineTState	variable	PyThreadState* _PyOS_ReadlineTState
+Python/modsupport.c	-	_Py_PackageContext	variable	const char *_Py_PackageContext
+Python/graminit.c	-	_PyParser_Grammar	variable	grammar _PyParser_Grammar
+Python/pathconfig.c	-	_Py_path_config	variable	_PyPathConfig _Py_path_config
+Objects/picklebufobject.c	-	PyPickleBuffer_Type	variable	PyTypeObject PyPickleBuffer_Type
+Objects/descrobject.c	-	PyProperty_Type	variable	PyTypeObject PyProperty_Type
+Python/initconfig.c	-	Py_QuietFlag	variable	int Py_QuietFlag
+Objects.longobject.c	-	_Py_quick_int_allocs	variable	Py_ssize_t _Py_quick_int_allocs
+Objects.longobject.c	-	_Py_quick_new_int_allocs	variable	Py_ssize_t _Py_quick_new_int_allocs
+Objects/rangeobject.c	-	PyRangeIter_Type	variable	PyTypeObject PyRangeIter_Type
+Objects/rangeobject.c	-	PyRange_Type	variable	PyTypeObject PyRange_Type
+Modules/_io/iobase.c	-	PyRawIOBase_Type	variable	PyTypeObject PyRawIOBase_Type
+Objects/object.c	-	_Py_RefTotal	variable	Py_ssize_t _Py_RefTotal
+Objects/enumobject.c	-	PyReversed_Type	variable	PyTypeObject PyReversed_Type
+Python/pylifecycle.c	-	_PyRuntime	variable	_PyRuntimeState _PyRuntime
+Objects/iterobject.c	-	PySeqIter_Type	variable	PyTypeObject PySeqIter_Type
+Objects/setobject.c	-	_PySet_Dummy	variable	PyObject * _PySet_Dummy
+Objects/setobject.c	-	_PySetDummy_Type	variable	static PyTypeObject _PySetDummy_Type
+Objects/setobject.c	-	PySetIter_Type	variable	PyTypeObject PySetIter_Type
+Objects/setobject.c	-	PySet_Type	variable	PyTypeObject PySet_Type
+Objects/sliceobject.c	-	PySlice_Type	variable	PyTypeObject PySlice_Type
+Python/initconfig.c	-	_Py_StandardStreamEncoding	variable	static char *_Py_StandardStreamEncoding
+Python/initconfig.c	-	_Py_StandardStreamErrors	variable	static char *_Py_StandardStreamErrors
+Objects/funcobject.c	-	PyStaticMethod_Type	variable	PyTypeObject PyStaticMethod_Type
+Objects/fileobject.c	-	PyStdPrinter_Type	variable	PyTypeObject PyStdPrinter_Type
+Python/symtable.c	-	PySTEntry_Type	variable	PyTypeObject PySTEntry_Type
+Modules/_io/stringio.c	-	PyStringIO_Type	variable	PyTypeObject PyStringIO_Type
+Objects/structseq.c	-	PyStructSequence_UnnamedField	variable	char *PyStructSequence_UnnamedField
+Objects/typeobject.c	-	PySuper_Type	variable	PyTypeObject PySuper_Type
+Objects/object.c	-	_Py_SwappedOp	variable	int _Py_SwappedOp[]
+Python/sysmodule.c	-	_PySys_ImplCacheTag	variable	const char *_PySys_ImplCacheTag
+Python/sysmodule.c	-	_PySys_ImplName	variable	const char *_PySys_ImplName
+Modules/_io/textio.c	-	PyTextIOBase_Type	variable	PyTypeObject PyTextIOBase_Type
+Modules/_io/textio.c	-	PyTextIOWrapper_Type	variable	PyTypeObject PyTextIOWrapper_Type
+Python/traceback.c	-	PyTraceBack_Type	variable	PyTypeObject PyTraceBack_Type
+Objects/obmalloc.c	-	_Py_tracemalloc_config	variable	struct _PyTraceMalloc_Config _Py_tracemalloc_config
+Objects/boolobject.c	-	_Py_TrueStruct	variable	static struct _longobject _Py_TrueStruct
+Objects/tupleobject.c	-	PyTupleIter_Type	variable	PyTypeObject PyTupleIter_Type
+Objects/tupleobject.c	-	PyTuple_Type	variable	PyTypeObject PyTuple_Type
+Objects/tupleobject.c	-	_Py_tuple_zero_allocs	variable	Py_ssize_t _Py_tuple_zero_allocs
+Objects/typeobject.c	-	PyType_Type	variable	PyTypeObject PyType_Type
+Python/initconfig.c	-	Py_UnbufferedStdioFlag	variable	int Py_UnbufferedStdioFlag
+Python/pylifecycle.c	-	_Py_UnhandledKeyboardInterrupt	variable	int _Py_UnhandledKeyboardInterrupt
+Objects/unicodeobject.c	-	PyUnicodeIter_Type	variable	PyTypeObject PyUnicodeIter_Type
+Objects/unicodeobject.c	-	PyUnicode_Type	variable	PyTypeObject PyUnicode_Type
+Python/initconfig.c	-	Py_UTF8Mode	variable	int Py_UTF8Mode
+Python/initconfig.c	-	Py_VerboseFlag	variable	int Py_VerboseFlag
+Objects/weakrefobject.c	-	_PyWeakref_CallableProxyType	variable	PyTypeObject _PyWeakref_CallableProxyType
+Objects/weakrefobject.c	-	_PyWeakref_ProxyType	variable	PyTypeObject _PyWeakref_ProxyType
+Objects/weakrefobject.c	-	_PyWeakref_RefType	variable	PyTypeObject _PyWeakref_RefType
+Objects/weakrefobject.c	-	_PyWeakref_RefType	variable	PyTypeObject _PyWeakref_RefType
+Objects/descrobject.c	-	PyWrapperDescr_Type	variable	PyTypeObject PyWrapperDescr_Type
+Python/bltinmodule.c	-	PyZip_Type	variable	PyTypeObject PyZip_Type
+Python/Python-ast.c	-	Raise_fields	variable	static const char *Raise_fields[]
+Python/Python-ast.c	-	Raise_type	variable	static PyTypeObject *Raise_type
+Objects/rangeobject.c	-	range_as_mapping	variable	static PyMappingMethods range_as_mapping
+Objects/rangeobject.c	-	range_as_number	variable	static PyNumberMethods range_as_number
+Objects/rangeobject.c	-	range_as_sequence	variable	static PySequenceMethods range_as_sequence
+Objects/rangeobject.c	-	rangeiter_methods	variable	static PyMethodDef rangeiter_methods
+Objects/rangeobject.c	-	range_members	variable	static PyMemberDef range_members[]
+Objects/rangeobject.c	-	range_methods	variable	static PyMethodDef range_methods
+Modules/_io/iobase.c	-	rawiobase_methods	variable	static PyMethodDef rawiobase_methods
+Python/pylifecycle.c	fatal_error	reentrant	variable	static int reentrant
+Modules/faulthandler.c	faulthandler_dump_traceback	reentrant	variable	static volatile int reentrant
+Modules/itertoolsmodule.c	-	repeat_methods	variable	static PyMethodDef repeat_methods
+Modules/itertoolsmodule.c	-	repeat_type	variable	static PyTypeObject repeat_type
+Python/Python-ast.c	-	Return_fields	variable	static const char *Return_fields[]
+Python/compile.c	compiler_visit_annotations	return_str	variable	static identifier return_str
+Python/Python-ast.c	-	Return_type	variable	static PyTypeObject *Return_type
+Objects/enumobject.c	-	reversediter_methods	variable	static PyMethodDef reversediter_methods
+Modules/_threadmodule.c	-	rlock_methods	variable	static PyMethodDef rlock_methods
+Modules/_threadmodule.c	-	RLocktype	variable	static PyTypeObject RLocktype
+Objects/typeobject.c	slot_nb_add	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_subtract	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_multiply	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_matrix_multiply	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_remainder	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_divmod	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_power_binary	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_lshift	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_rshift	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_and	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_xor	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_or	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_floor_divide	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Objects/typeobject.c	slot_nb_true_divide	rop_id	variable	_Py_static_string(op_id, OPSTR)
+Python/Python-ast.c	-	RShift_singleton	variable	static PyObject *RShift_singleton
+Python/Python-ast.c	-	RShift_type	variable	static PyTypeObject *RShift_type
+Python/pylifecycle.c	-	runtime_initialized	variable	static int runtime_initialized
+Modules/posixmodule.c	-	ScandirIterator_methods	variable	static PyMethodDef ScandirIterator_methods
+Modules/posixmodule.c	-	ScandirIteratorType	variable	static PyTypeObject ScandirIteratorType
+Modules/_sre.c	-	scanner_members	variable	static PyMemberDef scanner_members[]
+Modules/_sre.c	-	scanner_methods	variable	static PyMethodDef scanner_methods
+Modules/_sre.c	-	Scanner_Type	variable	static PyTypeObject Scanner_Type
+Modules/posixmodule.c	-	sched_param_desc	variable	static PyStructSequence_Desc sched_param_desc
+Modules/posixmodule.c	-	sched_param_fields	variable	static PyStructSequence_Field sched_param_fields[]
+Modules/posixmodule.c	-	SchedParamType	variable	static PyTypeObject* SchedParamType
+Objects/iterobject.c	-	seqiter_methods	variable	static PyMethodDef seqiter_methods
+Objects/setobject.c	-	set_as_number	variable	static PyNumberMethods set_as_number
+Objects/setobject.c	-	set_as_sequence	variable	static PySequenceMethods set_as_sequence
+Python/symtable.c	-	setcomp	variable	static identifier setcomp
+Python/Python-ast.c	-	SetComp_fields	variable	static const char *SetComp_fields[]
+Python/Python-ast.c	-	SetComp_type	variable	static PyTypeObject *SetComp_type
+Python/Python-ast.c	-	Set_fields	variable	static const char *Set_fields[]
+Objects/setobject.c	-	setiter_methods	variable	static PyMethodDef setiter_methods
+Objects/setobject.c	-	set_methods	variable	static PyMethodDef set_methods
+Python/Python-ast.c	-	Set_type	variable	static PyTypeObject *Set_type
+Modules/signalmodule.c	-	SiginfoType	variable	static PyTypeObject SiginfoType
+Modules/signalmodule.c	-	signal_methods	variable	static PyMethodDef signal_methods
+Modules/signalmodule.c	-	signalmodule	variable	static struct PyModuleDef signalmodule
+Python/import.c	PyImport_Import	silly_list	variable	static PyObject *silly_list
+Objects/sliceobject.c	-	slice_cache	variable	static PySliceObject *slice_cache
+Python/Python-ast.c	-	Slice_fields	variable	static const char *Slice_fields[]
+Objects/sliceobject.c	-	slice_members	variable	static PyMemberDef slice_members[]
+Objects/sliceobject.c	-	slice_methods	variable	static PyMethodDef slice_methods
+Python/Python-ast.c	-	slice_type	variable	static PyTypeObject *slice_type
+Python/Python-ast.c	-	Slice_type	variable	static PyTypeObject *Slice_type
+Objects/typeobject.c	-	slotdefs	variable	static slotdef slotdefs[]
+Objects/typeobject.c	-	slotdefs_initialized	variable	static int slotdefs_initialized
+Objects/longobject.c	-	small_ints	variable	static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS]
+Objects/funcobject.c	-	sm_getsetlist	variable	static PyGetSetDef sm_getsetlist[]
+Objects/funcobject.c	-	sm_memberlist	variable	static PyMemberDef sm_memberlist[]
+Modules/xxsubtype.c	-	spamdict_members	variable	static PyMemberDef spamdict_members[]
+Modules/xxsubtype.c	-	spamdict_methods	variable	static PyMethodDef spamdict_methods
+Modules/xxsubtype.c	-	spamdict_type	variable	static PyTypeObject spamdict_type
+Modules/xxsubtype.c	-	spamlist_getsets	variable	static PyGetSetDef spamlist_getsets[]
+Modules/xxsubtype.c	-	spamlist_methods	variable	static PyMethodDef spamlist_methods
+Modules/xxsubtype.c	-	spamlist_type	variable	static PyTypeObject spamlist_type
+Modules/_sre.c	-	sremodule	variable	static struct PyModuleDef sremodule
+Modules/faulthandler.c	-	stack	variable	static stack_t stack
+Modules/itertoolsmodule.c	-	starmap_methods	variable	static PyMethodDef starmap_methods
+Modules/itertoolsmodule.c	-	starmap_type	variable	static PyTypeObject starmap_type
+Python/Python-ast.c	-	Starred_fields	variable	static const char *Starred_fields[]
+Python/Python-ast.c	-	Starred_type	variable	static PyTypeObject *Starred_type
+Python/graminit.c	-	states_0	variable	static state states_0[3]
+Python/graminit.c	-	states_1	variable	static state states_1[2]
+Python/graminit.c	-	states_10	variable	static state states_10[4]
+Python/graminit.c	-	states_11	variable	static state states_11[34]
+Python/graminit.c	-	states_12	variable	static state states_12[2]
+Python/graminit.c	-	states_13	variable	static state states_13[2]
+Python/graminit.c	-	states_14	variable	static state states_14[4]
+Python/graminit.c	-	states_15	variable	static state states_15[2]
+Python/graminit.c	-	states_16	variable	static state states_16[6]
+Python/graminit.c	-	states_17	variable	static state states_17[5]
+Python/graminit.c	-	states_18	variable	static state states_18[3]
+Python/graminit.c	-	states_19	variable	static state states_19[2]
+Python/graminit.c	-	states_2	variable	static state states_2[3]
+Python/graminit.c	-	states_20	variable	static state states_20[3]
+Python/graminit.c	-	states_21	variable	static state states_21[2]
+Python/graminit.c	-	states_22	variable	static state states_22[2]
+Python/graminit.c	-	states_23	variable	static state states_23[2]
+Python/graminit.c	-	states_24	variable	static state states_24[2]
+Python/graminit.c	-	states_25	variable	static state states_25[3]
+Python/graminit.c	-	states_26	variable	static state states_26[2]
+Python/graminit.c	-	states_27	variable	static state states_27[5]
+Python/graminit.c	-	states_28	variable	static state states_28[2]
+Python/graminit.c	-	states_29	variable	static state states_29[3]
+Python/graminit.c	-	states_3	variable	static state states_3[7]
+Python/graminit.c	-	states_30	variable	static state states_30[8]
+Python/graminit.c	-	states_31	variable	static state states_31[4]
+Python/graminit.c	-	states_32	variable	static state states_32[4]
+Python/graminit.c	-	states_33	variable	static state states_33[3]
+Python/graminit.c	-	states_34	variable	static state states_34[2]
+Python/graminit.c	-	states_35	variable	static state states_35[2]
+Python/graminit.c	-	states_36	variable	static state states_36[3]
+Python/graminit.c	-	states_37	variable	static state states_37[3]
+Python/graminit.c	-	states_38	variable	static state states_38[5]
+Python/graminit.c	-	states_39	variable	static state states_39[2]
+Python/graminit.c	-	states_4	variable	static state states_4[2]
+Python/graminit.c	-	states_40	variable	static state states_40[3]
+Python/graminit.c	-	states_41	variable	static state states_41[8]
+Python/graminit.c	-	states_42	variable	static state states_42[8]
+Python/graminit.c	-	states_43	variable	static state states_43[11]
+Python/graminit.c	-	states_44	variable	static state states_44[13]
+Python/graminit.c	-	states_45	variable	static state states_45[6]
+Python/graminit.c	-	states_46	variable	static state states_46[4]
+Python/graminit.c	-	states_47	variable	static state states_47[5]
+Python/graminit.c	-	states_48	variable	static state states_48[5]
+Python/graminit.c	-	states_49	variable	static state states_49[4]
+Python/graminit.c	-	states_5	variable	static state states_5[3]
+Python/graminit.c	-	states_50	variable	static state states_50[6]
+Python/graminit.c	-	states_51	variable	static state states_51[2]
+Python/graminit.c	-	states_52	variable	static state states_52[5]
+Python/graminit.c	-	states_53	variable	static state states_53[5]
+Python/graminit.c	-	states_54	variable	static state states_54[2]
+Python/graminit.c	-	states_55	variable	static state states_55[2]
+Python/graminit.c	-	states_56	variable	static state states_56[3]
+Python/graminit.c	-	states_57	variable	static state states_57[2]
+Python/graminit.c	-	states_58	variable	static state states_58[4]
+Python/graminit.c	-	states_59	variable	static state states_59[3]
+Python/graminit.c	-	states_6	variable	static state states_6[3]
+Python/graminit.c	-	states_60	variable	static state states_60[2]
+Python/graminit.c	-	states_61	variable	static state states_61[2]
+Python/graminit.c	-	states_62	variable	static state states_62[2]
+Python/graminit.c	-	states_63	variable	static state states_63[2]
+Python/graminit.c	-	states_64	variable	static state states_64[2]
+Python/graminit.c	-	states_65	variable	static state states_65[2]
+Python/graminit.c	-	states_66	variable	static state states_66[3]
+Python/graminit.c	-	states_67	variable	static state states_67[4]
+Python/graminit.c	-	states_68	variable	static state states_68[3]
+Python/graminit.c	-	states_69	variable	static state states_69[9]
+Python/graminit.c	-	states_7	variable	static state states_7[9]
+Python/graminit.c	-	states_70	variable	static state states_70[5]
+Python/graminit.c	-	states_71	variable	static state states_71[7]
+Python/graminit.c	-	states_72	variable	static state states_72[3]
+Python/graminit.c	-	states_73	variable	static state states_73[5]
+Python/graminit.c	-	states_74	variable	static state states_74[3]
+Python/graminit.c	-	states_75	variable	static state states_75[3]
+Python/graminit.c	-	states_76	variable	static state states_76[3]
+Python/graminit.c	-	states_77	variable	static state states_77[14]
+Python/graminit.c	-	states_78	variable	static state states_78[8]
+Python/graminit.c	-	states_79	variable	static state states_79[3]
+Python/graminit.c	-	states_8	variable	static state states_8[4]
+Python/graminit.c	-	states_80	variable	static state states_80[4]
+Python/graminit.c	-	states_81	variable	static state states_81[2]
+Python/graminit.c	-	states_82	variable	static state states_82[6]
+Python/graminit.c	-	states_83	variable	static state states_83[3]
+Python/graminit.c	-	states_84	variable	static state states_84[4]
+Python/graminit.c	-	states_85	variable	static state states_85[2]
+Python/graminit.c	-	states_86	variable	static state states_86[3]
+Python/graminit.c	-	states_87	variable	static state states_87[3]
+Python/graminit.c	-	states_88	variable	static state states_88[7]
+Python/graminit.c	-	states_89	variable	static state states_89[3]
+Python/graminit.c	-	states_9	variable	static state states_9[42]
+Python/graminit.c	-	states_90	variable	static state states_90[6]
+Python/graminit.c	-	states_91	variable	static state states_91[11]
+Python/getargs.c	-	static_arg_parsers	variable	static struct _PyArg_Parser *static_arg_parsers
+Objects/unicodeobject.c	-	static_strings	variable	static _Py_Identifier *static_strings
+Modules/_stat.c	-	stat_methods	variable	static PyMethodDef stat_methods
+Modules/_stat.c	-	statmodule	variable	static struct PyModuleDef statmodule
+Modules/posixmodule.c	-	stat_result_desc	variable	static PyStructSequence_Desc stat_result_desc
+Modules/posixmodule.c	-	stat_result_fields	variable	static PyStructSequence_Field stat_result_fields[]
+Modules/posixmodule.c	-	StatResultType	variable	static PyTypeObject* StatResultType
+Modules/posixmodule.c	-	statvfs_result_desc	variable	static PyStructSequence_Desc statvfs_result_desc
+Modules/posixmodule.c	-	statvfs_result_fields	variable	static PyStructSequence_Field statvfs_result_fields[]
+Modules/posixmodule.c	-	StatVFSResultType	variable	static PyTypeObject* StatVFSResultType
+Objects/fileobject.c	-	stdprinter_getsetlist	variable	static PyGetSetDef stdprinter_getsetlist[]
+Objects/fileobject.c	-	stdprinter_methods	variable	static PyMethodDef stdprinter_methods
+Python/symtable.c	-	ste_memberlist	variable	static PyMemberDef ste_memberlist[]
+Python/Python-ast.c	-	stmt_attributes	variable	static const char *stmt_attributes[]
+Python/Python-ast.c	-	stmt_type	variable	static PyTypeObject *stmt_type
+Objects/exceptions.c	-	StopIteration_members	variable	static PyMemberDef StopIteration_members[]
+Python/Python-ast.c	-	Store_singleton	variable	static PyObject *Store_singleton
+Python/Python-ast.c	-	Store_type	variable	static PyTypeObject *Store_type
+Python/ast_unparse.c	-	_str_close_br	variable	static PyObject *_str_close_br
+Python/ast_unparse.c	-	_str_dbl_close_br	variable	static PyObject *_str_dbl_close_br
+Python/ast_unparse.c	-	_str_dbl_open_br	variable	static PyObject *_str_dbl_open_br
+Modules/_threadmodule.c	-	str_dict	variable	static PyObject *str_dict
+Modules/_io/stringio.c	-	stringio_getset	variable	static PyGetSetDef stringio_getset[]
+Modules/_io/stringio.c	-	stringio_methods	variable	static PyMethodDef stringio_methods
+Objects/unicodeobject.c	-	_string_methods	variable	static PyMethodDef _string_methods
+Objects/unicodeobject.c	-	_string_module	variable	static struct PyModuleDef _string_module
+Objects/bytesobject.c	-	striter_methods	variable	static PyMethodDef striter_methods
+Python/ast_unparse.c	-	_str_open_br	variable	static PyObject *_str_open_br
+Modules/pwdmodule.c	-	StructPwdType	variable	static PyTypeObject StructPwdType
+Modules/pwdmodule.c	-	struct_pwd_type_desc	variable	static PyStructSequence_Desc struct_pwd_type_desc
+Modules/pwdmodule.c	-	struct_pwd_type_fields	variable	static PyStructSequence_Field struct_pwd_type_fields[]
+Modules/posixmodule.c	wait_helper	struct_rusage	variable	static PyObject *struct_rusage
+Objects/structseq.c	-	structseq_methods	variable	static PyMethodDef structseq_methods
+Modules/posixmodule.c	-	structseq_new	variable	static newfunc structseq_new
+Modules/signalmodule.c	-	struct_siginfo_desc	variable	static PyStructSequence_Desc struct_siginfo_desc
+Modules/signalmodule.c	-	struct_siginfo_fields	variable	static PyStructSequence_Field struct_siginfo_fields[]
+Modules/timemodule.c	-	StructTimeType	variable	static PyTypeObject StructTimeType
+Modules/timemodule.c	-	struct_time_type_desc	variable	static PyStructSequence_Desc struct_time_type_desc
+Modules/timemodule.c	-	struct_time_type_fields	variable	static PyStructSequence_Field struct_time_type_fields[]
+Python/Python-ast.c	-	Subscript_fields	variable	static const char *Subscript_fields[]
+Python/Python-ast.c	-	Subscript_type	variable	static PyTypeObject *Subscript_type
+Python/Python-ast.c	-	Sub_singleton	variable	static PyObject *Sub_singleton
+Python/Python-ast.c	-	Sub_type	variable	static PyTypeObject *Sub_type
+Objects/typeobject.c	-	subtype_getsets_dict_only	variable	static PyGetSetDef subtype_getsets_dict_only[]
+Objects/typeobject.c	-	subtype_getsets_full	variable	static PyGetSetDef subtype_getsets_full[]
+Objects/typeobject.c	-	subtype_getsets_weakref_only	variable	static PyGetSetDef subtype_getsets_weakref_only[]
+Python/Python-ast.c	-	Suite_fields	variable	static const char *Suite_fields[]
+Python/Python-ast.c	-	Suite_type	variable	static PyTypeObject *Suite_type
+Objects/typeobject.c	-	super_members	variable	static PyMemberDef super_members[]
+Modules/symtablemodule.c	-	symtable_methods	variable	static PyMethodDef symtable_methods
+Modules/symtablemodule.c	-	symtablemodule	variable	static struct PyModuleDef symtablemodule
+Objects/exceptions.c	-	SyntaxError_members	variable	static PyMemberDef SyntaxError_members[]
+Python/sysmodule.c	-	sys_methods	variable	static PyMethodDef sys_methods
+Python/sysmodule.c	-	sysmodule	variable	static struct PyModuleDef sysmodule
+Objects/exceptions.c	-	SystemExit_members	variable	static PyMemberDef SystemExit_members[]
+Modules/_tracemalloc.c	-	tables_lock	variable	static PyThread_type_lock tables_lock
+Modules/itertoolsmodule.c	-	takewhile_reduce_methods	variable	static PyMethodDef takewhile_reduce_methods
+Modules/itertoolsmodule.c	-	takewhile_type	variable	static PyTypeObject takewhile_type
+Python/pylifecycle.c	-	_TARGET_LOCALES	variable	static _LocaleCoercionTarget _TARGET_LOCALES[]
+Python/traceback.c	-	tb_getsetters	variable	static PyGetSetDef tb_getsetters[]
+Python/traceback.c	-	tb_memberlist	variable	static PyMemberDef tb_memberlist[]
+Python/traceback.c	-	tb_methods	variable	static PyMethodDef tb_methods
+Modules/itertoolsmodule.c	-	teedataobject_methods	variable	static PyMethodDef teedataobject_methods
+Modules/itertoolsmodule.c	-	teedataobject_type	variable	static PyTypeObject teedataobject_type
+Modules/itertoolsmodule.c	-	tee_methods	variable	static PyMethodDef tee_methods
+Modules/itertoolsmodule.c	-	tee_type	variable	static PyTypeObject tee_type
+Modules/posixmodule.c	-	TerminalSize_desc	variable	static PyStructSequence_Desc TerminalSize_desc
+Modules/posixmodule.c	-	TerminalSize_fields	variable	static PyStructSequence_Field TerminalSize_fields[]
+Modules/posixmodule.c	-	TerminalSizeType	variable	static PyTypeObject* TerminalSizeType
+Modules/_io/textio.c	-	textiobase_getset	variable	static PyGetSetDef textiobase_getset[]
+Modules/_io/textio.c	-	textiobase_methods	variable	static PyMethodDef textiobase_methods
+Modules/_io/textio.c	-	textiowrapper_getset	variable	static PyGetSetDef textiowrapper_getset[]
+Modules/_io/textio.c	-	textiowrapper_members	variable	static PyMemberDef textiowrapper_members[]
+Modules/_io/textio.c	-	textiowrapper_methods	variable	static PyMethodDef textiowrapper_methods
+Modules/faulthandler.c	-	thread	variable	static struct { PyObject *file; int fd; PY_TIMEOUT_T timeout_us; int repeat; PyInterpreterState *interp; int exit; char *header; size_t header_len; PyThread_type_lock cancel_event; PyThread_type_lock running; } thread
+Python/thread.c	-	thread_debug	variable	static int thread_debug
+Modules/_threadmodule.c	-	ThreadError	variable	static PyObject *ThreadError
+Python/thread.c	-	threadinfo_desc	variable	static PyStructSequence_Desc threadinfo_desc
+Python/thread.c	-	threadinfo_fields	variable	static PyStructSequence_Field threadinfo_fields[]
+Python/thread.c	-	ThreadInfoType	variable	static PyTypeObject ThreadInfoType
+Modules/_threadmodule.c	-	thread_methods	variable	static PyMethodDef thread_methods
+Modules/_threadmodule.c	-	threadmodule	variable	static struct PyModuleDef threadmodule
+Modules/posixmodule.c	-	ticks_per_second	variable	static long ticks_per_second
+Modules/timemodule.c	_PyTime_GetProcessTimeWithInfo	ticks_per_second	variable	static long ticks_per_second
+Modules/timemodule.c	-	time_methods	variable	static PyMethodDef time_methods
+Modules/timemodule.c	-	timemodule	variable	static struct PyModuleDef timemodule
+Modules/posixmodule.c	-	times_result_desc	variable	static PyStructSequence_Desc times_result_desc
+Modules/posixmodule.c	-	times_result_fields	variable	static PyStructSequence_Field times_result_fields[]
+Modules/posixmodule.c	-	TimesResultType	variable	static PyTypeObject* TimesResultType
+Python/context.c	-	_token_missing	variable	static PyObject *_token_missing
+Python/symtable.c	-	top	variable	static identifier top
+Objects/typeobject.c	-	tp_new_methoddef	variable	static struct PyMethodDef tp_new_methoddef[]
+Modules/_tracemalloc.c	-	tracemalloc_empty_traceback	variable	static traceback_t tracemalloc_empty_traceback
+Modules/_tracemalloc.c	-	tracemalloc_filenames	variable	static _Py_hashtable_t *tracemalloc_filenames
+Modules/_tracemalloc.c	-	tracemalloc_peak_traced_memory	variable	static size_t tracemalloc_peak_traced_memory
+Modules/_tracemalloc.c	-	tracemalloc_reentrant_key	variable	static Py_tss_t tracemalloc_reentrant_key
+Modules/_tracemalloc.c	-	tracemalloc_traceback	variable	static traceback_t *tracemalloc_traceback
+Modules/_tracemalloc.c	-	tracemalloc_tracebacks	variable	static _Py_hashtable_t *tracemalloc_tracebacks
+Modules/_tracemalloc.c	-	tracemalloc_traced_memory	variable	static size_t tracemalloc_traced_memory
+Modules/_tracemalloc.c	-	tracemalloc_traces	variable	static _Py_hashtable_t *tracemalloc_traces
+Objects/boolobject.c	-	true_str	variable	static PyObject *true_str
+Python/Python-ast.c	-	Try_fields	variable	static const char *Try_fields[]
+Python/Python-ast.c	-	Try_type	variable	static PyTypeObject *Try_type
+Objects/tupleobject.c	-	tuple_as_mapping	variable	static PyMappingMethods tuple_as_mapping
+Objects/tupleobject.c	-	tuple_as_sequence	variable	static PySequenceMethods tuple_as_sequence
+Python/Python-ast.c	-	Tuple_fields	variable	static const char *Tuple_fields[]
+Modules/_collectionsmodule.c	-	tuplegetter_members	variable	static PyMemberDef tuplegetter_members[]
+Modules/_collectionsmodule.c	-	tuplegetter_methods	variable	static PyMethodDef tuplegetter_methods
+Modules/_collectionsmodule.c	-	tuplegetter_type	variable	static PyTypeObject tuplegetter_type
+Objects/tupleobject.c	-	tupleiter_methods	variable	static PyMethodDef tupleiter_methods
+Objects/tupleobject.c	-	tuple_methods	variable	static PyMethodDef tuple_methods
+Python/Python-ast.c	-	Tuple_type	variable	static PyTypeObject *Tuple_type
+Objects/typeobject.c	-	type_getsets	variable	static PyGetSetDef type_getsets[]
+Python/Python-ast.c	-	TypeIgnore_fields	variable	static const char *TypeIgnore_fields[]
+Python/Python-ast.c	-	type_ignore_type	variable	static PyTypeObject *type_ignore_type
+Python/Python-ast.c	-	TypeIgnore_type	variable	static PyTypeObject *TypeIgnore_type
+Objects/typeobject.c	-	type_members	variable	static PyMemberDef type_members[]
+Objects/typeobject.c	-	type_methods	variable	static PyMethodDef type_methods
+Python/Python-ast.c	-	UAdd_singleton	variable	static PyObject *UAdd_singleton
+Python/Python-ast.c	-	UAdd_type	variable	static PyTypeObject *UAdd_type
+Objects/unicodeobject.c	-	ucnhash_CAPI	variable	static _PyUnicode_Name_CAPI *ucnhash_CAPI
+Python/codecs.c	-	ucnhash_CAPI	variable	static _PyUnicode_Name_CAPI *ucnhash_CAPI
+Python/ast.c	-	u_kind	variable	static PyObject *u_kind
+Modules/posixmodule.c	-	uname_result_desc	variable	static PyStructSequence_Desc uname_result_desc
+Modules/posixmodule.c	-	uname_result_fields	variable	static PyStructSequence_Field uname_result_fields[]
+Modules/posixmodule.c	-	UnameResultType	variable	static PyTypeObject* UnameResultType
+Python/Python-ast.c	-	UnaryOp_fields	variable	static const char *UnaryOp_fields[]
+Python/Python-ast.c	-	unaryop_type	variable	static PyTypeObject *unaryop_type
+Python/Python-ast.c	-	UnaryOp_type	variable	static PyTypeObject *UnaryOp_type
+Objects/unicodeobject.c	-	unicode_as_mapping	variable	static PyMappingMethods unicode_as_mapping
+Objects/unicodeobject.c	-	unicode_as_number	variable	static PyNumberMethods unicode_as_number
+Objects/unicodeobject.c	-	unicode_as_sequence	variable	static PySequenceMethods unicode_as_sequence
+Objects/unicodeobject.c	-	unicode_empty	variable	static PyObject *unicode_empty
+Objects/exceptions.c	-	UnicodeError_members	variable	static PyMemberDef UnicodeError_members[]
+Objects/unicodeobject.c	-	unicodeiter_methods	variable	static PyMethodDef unicodeiter_methods
+Objects/unicodeobject.c	-	unicode_latin1	variable	static PyObject *unicode_latin1[256]
+Objects/unicodeobject.c	-	unicode_methods	variable	static PyMethodDef unicode_methods
+Modules/_tracemalloc.c	-	unknown_filename	variable	static PyObject *unknown_filename
+Python/errors.c	-	UnraisableHookArgs_desc	variable	static PyStructSequence_Desc UnraisableHookArgs_desc
+Python/errors.c	-	UnraisableHookArgs_fields	variable	static PyStructSequence_Field UnraisableHookArgs_fields[]
+Python/errors.c	-	UnraisableHookArgsType	variable	static PyTypeObject UnraisableHookArgsType
+Objects/obmalloc.c	-	unused_arena_objects	variable	static struct arena_object* unused_arena_objects
+Python/bootstrap_hash.c	-	urandom_cache	variable	static struct { int fd; dev_t st_dev; ino_t st_ino; } urandom_cache
+Objects/obmalloc.c	-	usable_arenas	variable	static struct arena_object* usable_arenas
+Objects/obmalloc.c	-	usedpools	variable	static poolp usedpools[2 * ((NB_SMALL_SIZE_CLASSES + 7) / 8) * 8]
+Modules/faulthandler.c	-	user_signals	variable	static user_signal_t *user_signals
+Python/Python-ast.c	-	USub_singleton	variable	static PyObject *USub_singleton
+Python/Python-ast.c	-	USub_type	variable	static PyTypeObject *USub_type
+Python/getversion.c	Py_GetVersion	version	variable	static char version[250]
+Python/sysmodule.c	-	version_info_desc	variable	static PyStructSequence_Desc version_info_desc
+Python/sysmodule.c	-	version_info_fields	variable	static PyStructSequence_Field version_info_fields[]
+Python/sysmodule.c	-	VersionInfoType	variable	static PyTypeObject VersionInfoType
+Modules/posixmodule.c	-	waitid_result_desc	variable	static PyStructSequence_Desc waitid_result_desc
+Modules/posixmodule.c	-	waitid_result_fields	variable	static PyStructSequence_Field waitid_result_fields[]
+Modules/posixmodule.c	-	WaitidResultType	variable	static PyTypeObject* WaitidResultType
+Modules/signalmodule.c	-	wakeup	variable	static volatile struct { SOCKET_T fd; int warn_on_full_buffer; int use_send; } wakeup
+Python/_warnings.c	-	warnings_functions	variable	static PyMethodDef warnings_functions[]
+Python/_warnings.c	-	warningsmodule	variable	static struct PyModuleDef warningsmodule
+Modules/_weakref.c	-	weakref_functions	variable	static PyMethodDef weakref_functions
+Objects/weakrefobject.c	-	weakref_members	variable	static PyMemberDef weakref_members[]
+Modules/_weakref.c	-	weakrefmodule	variable	static struct PyModuleDef weakrefmodule
+Python/sysmodule.c	-	whatstrings	variable	static PyObject *whatstrings[8]
+Python/Python-ast.c	-	While_fields	variable	static const char *While_fields[]
+Python/Python-ast.c	-	While_type	variable	static PyTypeObject *While_type
+Python/Python-ast.c	-	With_fields	variable	static const char *With_fields[]
+Python/Python-ast.c	-	withitem_fields	variable	static const char *withitem_fields[]
+Python/Python-ast.c	-	withitem_type	variable	static PyTypeObject *withitem_type
+Python/Python-ast.c	-	With_type	variable	static PyTypeObject *With_type
+Objects/descrobject.c	-	wrapperdescr_getset	variable	static PyGetSetDef wrapperdescr_getset[]
+Objects/descrobject.c	-	wrapper_getsets	variable	static PyGetSetDef wrapper_getsets[]
+Objects/descrobject.c	-	wrapper_members	variable	static PyMemberDef wrapper_members[]
+Objects/descrobject.c	-	wrapper_methods	variable	static PyMethodDef wrapper_methods
+Modules/_threadmodule.c	local_new	wr_callback_def	variable	static PyMethodDef wr_callback_def
+Modules/xxsubtype.c	-	xxsubtype_functions	variable	static PyMethodDef xxsubtype_functions[]
+Modules/xxsubtype.c	-	xxsubtypemodule	variable	static struct PyModuleDef xxsubtypemodule
+Modules/xxsubtype.c	-	xxsubtype_slots	variable	static struct PyModuleDef_Slot xxsubtype_slots[]
+Python/Python-ast.c	-	Yield_fields	variable	static const char *Yield_fields[]
+Python/Python-ast.c	-	YieldFrom_fields	variable	static const char *YieldFrom_fields[]
+Python/Python-ast.c	-	YieldFrom_type	variable	static PyTypeObject *YieldFrom_type
+Python/Python-ast.c	-	Yield_type	variable	static PyTypeObject *Yield_type
+Modules/itertoolsmodule.c	-	zip_longest_methods	variable	static PyMethodDef zip_longest_methods
+Modules/itertoolsmodule.c	-	ziplongest_type	variable	static PyTypeObject ziplongest_type
+Python/bltinmodule.c	-	zip_methods	variable	static PyMethodDef zip_methods
diff --git a/Tools/ccbench/ccbench.py b/Tools/ccbench/ccbench.py
index 60cec3e..ab1465a 100644
--- a/Tools/ccbench/ccbench.py
+++ b/Tools/ccbench/ccbench.py
@@ -84,13 +84,6 @@
     pat = re.compile(r'^(\s*def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)', re.MULTILINE)
     with open(__file__, "r") as f:
         arg = f.read(2000)
-
-    def findall(s):
-        t = time.time()
-        try:
-            return pat.findall(s)
-        finally:
-            print(time.time() - t)
     return pat.findall, (arg, )
 
 def task_sort():
@@ -541,10 +534,12 @@
                       help="run I/O bandwidth tests")
     parser.add_option("-i", "--interval",
                       action="store", type="int", dest="check_interval", default=None,
-                      help="sys.setcheckinterval() value")
+                      help="sys.setcheckinterval() value "
+                           "(Python 3.8 and older)")
     parser.add_option("-I", "--switch-interval",
                       action="store", type="float", dest="switch_interval", default=None,
-                      help="sys.setswitchinterval() value")
+                      help="sys.setswitchinterval() value "
+                           "(Python 3.2 and newer)")
     parser.add_option("-n", "--num-threads",
                       action="store", type="int", dest="nthreads", default=4,
                       help="max number of threads in tests")
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index c5edc7c..34b5807 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -657,9 +657,14 @@
                 if not p.is_optional():
                     min_pos = i
 
+        requires_defining_class = any(
+            isinstance(p.converter, defining_class_converter)
+            for p in parameters)
+
         meth_o = (len(parameters) == 1 and
               parameters[0].is_positional_only() and
               not converters[0].is_optional() and
+              not requires_defining_class and
               not new_or_init)
 
         # we have to set these things before we're done:
@@ -717,6 +722,11 @@
             {c_basename}({self_type}{self_name}, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
             """)
 
+        parser_prototype_def_class = normalize_snippet("""
+            static PyObject *
+            {c_basename}({self_type}{self_name}, PyTypeObject *{defining_class_name}, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+        """)
+
         # parser_body_fields remembers the fields passed in to the
         # previous call to parser_body. this is used for an awful hack.
         parser_body_fields = ()
@@ -824,7 +834,7 @@
 
             parser_definition = parser_body(parser_prototype, '    {option_group_parsing}')
 
-        elif pos_only == len(parameters):
+        elif not requires_defining_class and pos_only == len(parameters):
             if not new_or_init:
                 # positional-only, but no option groups
                 # we only need one call to _PyArg_ParseStack
@@ -891,7 +901,7 @@
                 parser_prototype = parser_prototype_fastcall_keywords
                 argname_fmt = 'args[%d]'
                 declarations = normalize_snippet("""
-                    static const char * const _keywords[] = {{{keywords}, NULL}};
+                    static const char * const _keywords[] = {{{keywords} NULL}};
                     static _PyArg_Parser _parser = {{NULL, _keywords, "{name}", 0}};
                     PyObject *argsbuf[%s];
                     """ % len(converters))
@@ -909,7 +919,7 @@
                 parser_prototype = parser_prototype_keyword
                 argname_fmt = 'fastargs[%d]'
                 declarations = normalize_snippet("""
-                    static const char * const _keywords[] = {{{keywords}, NULL}};
+                    static const char * const _keywords[] = {{{keywords} NULL}};
                     static _PyArg_Parser _parser = {{NULL, _keywords, "{name}", 0}};
                     PyObject *argsbuf[%s];
                     PyObject * const *fastargs;
@@ -923,6 +933,9 @@
                         goto exit;
                     }}
                     """ % (min_pos, max_pos, min_kw_only), indent=4)]
+            if requires_defining_class:
+                flags = 'METH_METHOD|' + flags
+                parser_prototype = parser_prototype_def_class
 
             add_label = None
             for i, p in enumerate(parameters):
@@ -983,11 +996,11 @@
                     parser_code.append("%s:" % add_label)
             else:
                 declarations = (
-                    'static const char * const _keywords[] = {{{keywords}, NULL}};\n'
+                    'static const char * const _keywords[] = {{{keywords} NULL}};\n'
                     'static _PyArg_Parser _parser = {{"{format_units}:{name}", _keywords, 0}};')
                 if not new_or_init:
                     parser_code = [normalize_snippet("""
-                        if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
+                        if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser{parse_arguments_comma}
                             {parse_arguments})) {{
                             goto exit;
                         }}
@@ -1021,6 +1034,9 @@
             if parses_keywords:
                 assert parses_positional
 
+            if requires_defining_class:
+                raise ValueError("Slot methods cannot access their defining class.")
+
             if not parses_keywords:
                 fields.insert(0, normalize_snippet("""
                     if ({self_type_check}!_PyArg_NoKeywords("{name}", kwargs)) {{
@@ -1182,14 +1198,14 @@
             lines = [self.group_to_variable_name(g) + " = 1;" for g in group_ids]
             lines = "\n".join(lines)
 
-            s = """
+            s = """\
     case {count}:
         if (!PyArg_ParseTuple(args, "{format_units}:{name}", {parse_arguments})) {{
             goto exit;
         }}
         {group_booleans}
         break;
-"""[1:]
+"""
             s = linear_format(s, group_booleans=lines)
             s = s.format_map(d)
             add(s)
@@ -1289,7 +1305,8 @@
         template_dict['docstring'] = self.docstring_for_c_string(f)
 
         template_dict['self_name'] = template_dict['self_type'] = template_dict['self_type_check'] = ''
-        f_self.converter.set_template_dict(template_dict)
+        for converter in converters:
+            converter.set_template_dict(template_dict)
 
         f.return_converter.render(f, data)
         template_dict['impl_return_type'] = f.return_converter.type
@@ -1297,9 +1314,13 @@
         template_dict['declarations'] = format_escape("\n".join(data.declarations))
         template_dict['initializers'] = "\n\n".join(data.initializers)
         template_dict['modifications'] = '\n\n'.join(data.modifications)
-        template_dict['keywords'] = '"' + '", "'.join(data.keywords) + '"'
+        template_dict['keywords'] = ' '.join('"' + k + '",' for k in data.keywords)
         template_dict['format_units'] = ''.join(data.format_units)
         template_dict['parse_arguments'] = ', '.join(data.parse_arguments)
+        if data.parse_arguments:
+            template_dict['parse_arguments_comma'] = ',';
+        else:
+            template_dict['parse_arguments_comma'] = '';
         template_dict['impl_parameters'] = ", ".join(data.impl_parameters)
         template_dict['impl_arguments'] = ", ".join(data.impl_arguments)
         template_dict['return_conversion'] = format_escape("".join(data.return_conversion).rstrip())
@@ -1756,6 +1777,30 @@
 # The callable should not call builtins.print.
 return_converters = {}
 
+
+def write_file(filename, new_contents):
+    try:
+        with open(filename, 'r', encoding="utf-8") as fp:
+            old_contents = fp.read()
+
+        if old_contents == new_contents:
+            # no change: avoid modifying the file modification time
+            return
+    except FileNotFoundError:
+        pass
+
+    # Atomic write using a temporary file and os.replace()
+    filename_new = f"{filename}.new"
+    with open(filename_new, "w", encoding="utf-8") as fp:
+        fp.write(new_contents)
+
+    try:
+        os.replace(filename_new, filename)
+    except:
+        os.unlink(filename_new)
+        raise
+
+
 clinic = None
 class Clinic:
 
@@ -1802,7 +1847,7 @@
 
 """
 
-    def __init__(self, language, printer=None, *, force=False, verify=True, filename=None):
+    def __init__(self, language, printer=None, *, verify=True, filename=None):
         # maps strings to Parser objects.
         # (instantiated from the "parsers" global.)
         self.parsers = {}
@@ -1811,7 +1856,6 @@
             fail("Custom printers are broken right now")
         self.printer = printer or BlockPrinter(language)
         self.verify = verify
-        self.force = force
         self.filename = filename
         self.modules = collections.OrderedDict()
         self.classes = collections.OrderedDict()
@@ -1944,8 +1988,7 @@
                     block.input = 'preserve\n'
                     printer_2 = BlockPrinter(self.language)
                     printer_2.print_block(block)
-                    with open(destination.filename, "wt") as f:
-                        f.write(printer_2.f.getvalue())
+                    write_file(destination.filename, printer_2.f.getvalue())
                     continue
         text = printer.f.getvalue()
 
@@ -1997,7 +2040,10 @@
         return module, cls
 
 
-def parse_file(filename, *, force=False, verify=True, output=None, encoding='utf-8'):
+def parse_file(filename, *, verify=True, output=None):
+    if not output:
+        output = filename
+
     extension = os.path.splitext(filename)[1][1:]
     if not extension:
         fail("Can't extract file type for file " + repr(filename))
@@ -2007,7 +2053,7 @@
     except KeyError:
         fail("Can't identify file type for file " + repr(filename))
 
-    with open(filename, 'r', encoding=encoding) as f:
+    with open(filename, 'r', encoding="utf-8") as f:
         raw = f.read()
 
     # exit quickly if there are no clinic markers in the file
@@ -2015,19 +2061,10 @@
     if not find_start_re.search(raw):
         return
 
-    clinic = Clinic(language, force=force, verify=verify, filename=filename)
+    clinic = Clinic(language, verify=verify, filename=filename)
     cooked = clinic.parse(raw)
-    if (cooked == raw) and not force:
-        return
 
-    directory = os.path.dirname(filename) or '.'
-
-    with tempfile.TemporaryDirectory(prefix="clinic", dir=directory) as tmpdir:
-        bytes = cooked.encode(encoding)
-        tmpfilename = os.path.join(tmpdir, os.path.basename(filename))
-        with open(tmpfilename, "wb") as f:
-            f.write(bytes)
-        os.replace(tmpfilename, output or filename)
+    write_file(output, cooked)
 
 
 def compute_checksum(input, length=None):
@@ -2678,6 +2715,10 @@
                 """.format(argname=argname, paramname=self.name, cast=cast)
         return None
 
+    def set_template_dict(self, template_dict):
+        pass
+
+
 type_checks = {
     '&PyLong_Type': ('PyLong_Check', 'int'),
     '&PyTuple_Type': ('PyTuple_Check', 'tuple'),
@@ -2730,6 +2771,25 @@
                 """.format(argname=argname, paramname=self.name)
         return super().parse_arg(argname, displayname)
 
+class defining_class_converter(CConverter):
+    """
+    A special-case converter:
+    this is the default converter used for the defining class.
+    """
+    type = 'PyTypeObject *'
+    format_unit = ''
+    show_in_signature = False
+
+    def converter_init(self, *, type=None):
+        self.specified_type = type
+
+    def render(self, parameter, data):
+        self._render_self(parameter, data)
+
+    def set_template_dict(self, template_dict):
+        template_dict['defining_class_name'] = self.name
+
+
 class char_converter(CConverter):
     type = 'char'
     default_type = (bytes, bytearray)
@@ -3016,7 +3076,7 @@
                     goto exit;
                 }}}}
                 {paramname} = PyLong_AsLongLong({argname});
-                if ({paramname} == (PY_LONG_LONG)-1 && PyErr_Occurred()) {{{{
+                if ({paramname} == -1 && PyErr_Occurred()) {{{{
                     goto exit;
                 }}}}
                 """.format(argname=argname, paramname=self.name)
@@ -3585,17 +3645,14 @@
         cls = self.function.cls
 
         if ((kind in (METHOD_NEW, METHOD_INIT)) and cls and cls.typedef):
+            type_object = self.function.cls.type_object
             if kind == METHOD_NEW:
-                passed_in_type = self.name
+                type_check = '({} == {})'.format(self.name, type_object)
             else:
-                passed_in_type = 'Py_TYPE({})'.format(self.name)
+                type_check = 'Py_IS_TYPE({}, {})'.format(self.name, type_object)
 
-            line = '({passed_in_type} == {type_object}) &&\n        '
-            d = {
-                'type_object': self.function.cls.type_object,
-                'passed_in_type': passed_in_type
-                }
-            template_dict['self_type_check'] = line.format_map(d)
+            line = '{} &&\n        '.format(type_check)
+            template_dict['self_type_check'] = line
 
 
 
@@ -4511,6 +4568,19 @@
             else:
                 fail("A 'self' parameter, if specified, must be the very first thing in the parameter block.")
 
+        if isinstance(converter, defining_class_converter):
+            _lp = len(self.function.parameters)
+            if _lp == 1:
+                if (self.parameter_state != self.ps_required):
+                    fail("A 'defining_class' parameter cannot be marked optional.")
+                if value is not unspecified:
+                    fail("A 'defining_class' parameter cannot have a default value.")
+                if self.group:
+                    fail("A 'defining_class' parameter cannot be in an optional group.")
+            else:
+                fail("A 'defining_class' parameter, if specified, must either be the first thing in the parameter block, or come just after 'self'.")
+
+
         p = Parameter(parameter_name, kind, function=self.function, converter=converter, default=value, group=self.group)
 
         if parameter_name in self.function.parameters:
@@ -5033,7 +5103,7 @@
                 path = os.path.join(root, filename)
                 if ns.verbose:
                     print(path)
-                parse_file(path, force=ns.force, verify=not ns.force)
+                parse_file(path, verify=not ns.force)
         return
 
     if not ns.filename:
@@ -5049,7 +5119,7 @@
     for filename in ns.filename:
         if ns.verbose:
             print(filename)
-        parse_file(filename, output=ns.output, force=ns.force, verify=not ns.force)
+        parse_file(filename, output=ns.output, verify=not ns.force)
 
 
 if __name__ == "__main__":
diff --git a/Tools/demo/README b/Tools/demo/README
index e914358..9fccb97 100644
--- a/Tools/demo/README
+++ b/Tools/demo/README
@@ -1,16 +1,16 @@
 This directory contains a collection of demonstration scripts for
 various aspects of Python programming.
 
-beer.py        Well-known programming example: Bottles of beer.
-eiffel.py      Python advanced magic: A metaclass for Eiffel post/preconditions.
-hanoi.py       Well-known programming example: Towers of Hanoi.
-life.py        Curses programming: Simple game-of-life.
-markov.py      Algorithms: Markov chain simulation.
-mcast.py       Network programming: Send and receive UDP multicast packets.
-queens.py      Well-known programming example: N-Queens problem.
-redemo.py      Regular Expressions: GUI script to test regexes.
-rpython.py     Network programming: Small client for remote code execution.
-rpythond.py    Network programming: Small server for remote code execution.
-sortvisu.py    GUI programming: Visualization of different sort algorithms.
-ss1.py         GUI/Application programming: A simple spreadsheet application.
-vector.py      Python basics: A vector class with demonstrating special methods.
\ No newline at end of file
+beer.py           Well-known programming example: Bottles of beer.
+eiffel.py         Python advanced magic: A metaclass for Eiffel post/preconditions.
+hanoi.py          Well-known programming example: Towers of Hanoi.
+life.py           Curses programming: Simple game-of-life.
+markov.py         Algorithms: Markov chain simulation.
+mcast.py          Network programming: Send and receive UDP multicast packets.
+queens.py         Well-known programming example: N-Queens problem.
+redemo.py         Regular Expressions: GUI script to test regexes.
+rpython.py        Network programming: Small client for remote code execution.
+rpythond.py       Network programming: Small server for remote code execution.
+sortvisu.py       GUI programming: Visualization of different sort algorithms.
+spreadsheet.py    GUI/Application programming: A simple spreadsheet application.
+vector.py         Python basics: A vector class demonstrating special methods.
diff --git a/Tools/demo/hanoi.py b/Tools/demo/hanoi.py
index dad0234..8db895c 100755
--- a/Tools/demo/hanoi.py
+++ b/Tools/demo/hanoi.py
@@ -27,7 +27,7 @@
 class Tkhanoi:
 
     # Create our objects
-    def __init__(self, n, bitmap = None):
+    def __init__(self, n, bitmap=None):
         self.n = n
         self.tk = tk = Tk()
         self.canvas = c = Canvas(tk)
@@ -77,7 +77,7 @@
 
     # Run -- never returns
     def run(self):
-        while 1:
+        while True:
             hanoi(self.n, 0, 1, 2, self.report)
             hanoi(self.n, 1, 2, 0, self.report)
             hanoi(self.n, 2, 0, 1, self.report)
@@ -94,7 +94,7 @@
 
         # Lift the piece above peg a
         ax1, ay1, ax2, ay2 = c.bbox(self.pegs[a])
-        while 1:
+        while True:
             x1, y1, x2, y2 = c.bbox(p)
             if y2 < ay1: break
             c.move(p, 0, -1)
@@ -103,7 +103,7 @@
         # Move it towards peg b
         bx1, by1, bx2, by2 = c.bbox(self.pegs[b])
         newcenter = (bx1+bx2)//2
-        while 1:
+        while True:
             x1, y1, x2, y2 = c.bbox(p)
             center = (x1+x2)//2
             if center == newcenter: break
@@ -114,7 +114,7 @@
         # Move it down on top of the previous piece
         pieceheight = y2-y1
         newbottom = by2 - pieceheight*len(self.pegstate[b]) - 2
-        while 1:
+        while True:
             x1, y1, x2, y2 = c.bbox(p)
             if y2 >= newbottom: break
             c.move(p, 0, 1)
diff --git a/Tools/demo/rpythond.py b/Tools/demo/rpythond.py
index a885b3e..a18de13 100755
--- a/Tools/demo/rpythond.py
+++ b/Tools/demo/rpythond.py
@@ -29,7 +29,7 @@
         with conn:
             print('connection from', remotehost, remoteport)
             request = b''
-            while 1:
+            while True:
                 data = conn.recv(BUFSIZE)
                 if not data:
                     break
diff --git a/Tools/demo/sortvisu.py b/Tools/demo/sortvisu.py
index 8447bc7..056a0e0 100755
--- a/Tools/demo/sortvisu.py
+++ b/Tools/demo/sortvisu.py
@@ -444,7 +444,7 @@
             array.wait(1000)
             left = first
             right = last
-            while 1:
+            while True:
                 array.message("Sweep right pointer")
                 right = right-1
                 array.show_right(right)
@@ -473,7 +473,7 @@
         array.hide_partition()
 
 def demosort(array):
-    while 1:
+    while True:
         for alg in [quicksort, insertionsort, selectionsort, bubblesort]:
             randomize(array)
             alg(array)
diff --git a/Tools/demo/ss1.py b/Tools/demo/spreadsheet.py
similarity index 100%
rename from Tools/demo/ss1.py
rename to Tools/demo/spreadsheet.py
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index ffb1813..33bf5ac 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -1566,7 +1566,7 @@
             return False
 
         if (caller.startswith('cfunction_vectorcall_') or
-            caller == 'cfunction_call_varargs'):
+            caller == 'cfunction_call'):
             arg_name = 'func'
             # Within that frame:
             #   "func" is the local containing the PyObject* of the
diff --git a/Tools/msi/README.txt b/Tools/msi/README.txt
index f5656b9..82635f3 100644
--- a/Tools/msi/README.txt
+++ b/Tools/msi/README.txt
@@ -11,7 +11,7 @@
 
     set PYTHON=<path to Python 2.7 or 3.4>
     set SPHINXBUILD=<path to sphinx-build.exe>
-    set PATH=<path to Mercurial (hg.exe)>;
+    set PATH=<path to Git (git.exe)>;
              <path to HTML Help Compiler (hhc.exe)>;%PATH%
 
     buildrelease.bat [-x86] [-x64] [-D] [-B]
@@ -106,7 +106,7 @@
 
     set PYTHON=<path to Python 2.7 or 3.4>
     set SPHINXBUILD=<path to sphinx-build.exe>
-    set PATH=<path to Mercurial (hg.exe)>;
+    set PATH=<path to Git (git.exe)>;
              <path to HTML Help Compiler (hhc.exe)>;%PATH%
 
     buildrelease.bat [-x86] [-x64] [-D] [-B]
@@ -131,7 +131,7 @@
 
 Ensure %PYTHON% and %SPHINXBUILD% are set when passing this option. You
 may also set %HTMLHELP% to the Html Help Compiler (hhc.exe), or put HHC
-on your PATH or in externals/. You will also need Mercurial (hg.exe) on
+on your PATH or in externals/. You will also need Git (git.exe) on
 your PATH.
 
 If WiX is not found on your system, it will be automatically downloaded
diff --git a/Tools/msi/bundle/Default.thm b/Tools/msi/bundle/Default.thm
index 1c0bd08..f5ba43d 100644
--- a/Tools/msi/bundle/Default.thm
+++ b/Tools/msi/bundle/Default.thm
@@ -116,9 +116,9 @@
         <Text X="185" Y="11" Width="-11" Height="36" FontId="1" DisablePrefix="yes">#(loc.SuccessHeader)</Text>
         <Image X="0" Y="0" Width="178" Height="382" ImageFile="SideBar.png"/>
 
-        <Hypertext Name="SuccessText" X="205" Y="71" Width="-71" Height="150" FontId="3" DisablePrefix="yes"></Hypertext>
+        <Hypertext Name="SuccessText" X="205" Y="71" Width="-71" Height="160" FontId="3" DisablePrefix="yes"></Hypertext>
 
-        <Button Name="SuccessMaxPathButton" X="185" Y="-70" Width="-11" Height="81" TabStop="yes" FontId="3" HexStyle="0xE" HideWhenDisabled="yes">#(loc.SuccessMaxPathButton)</Button>
+        <Button Name="SuccessMaxPathButton" X="185" Y="-80" Width="-11" Height="81" TabStop="yes" FontId="3" HexStyle="0xE" HideWhenDisabled="yes">#(loc.SuccessMaxPathButton)</Button>
 
         <Text Name="SuccessRestartText" X="205" Y="-40" Width="-11" Height="34" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessRestartText)</Text>
         <Button Name="SuccessRestartButton" X="-101" Y="-11" Width="85" Height="27" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessRestartButton)</Button>
diff --git a/Tools/msi/bundle/Default.wxl b/Tools/msi/bundle/Default.wxl
index 43506d6..791ce6e 100644
--- a/Tools/msi/bundle/Default.wxl
+++ b/Tools/msi/bundle/Default.wxl
@@ -89,7 +89,7 @@
   <String Id="ShortInstallLauncherAllUsersLabel">Install &amp;launcher for all users (recommended)</String>
   <String Id="PrecompileLabel">&amp;Precompile standard library</String>
   <String Id="Include_symbolsLabel">Download debugging &amp;symbols</String>
-  <String Id="Include_debugLabel">Download debu&amp;g binaries (requires VS 2015 or later)</String>
+  <String Id="Include_debugLabel">Download debu&amp;g binaries (requires VS 2017 or later)</String>
   
   <String Id="ProgressHeader">[ActionLikeInstallation] Progress</String>
   <String Id="ProgressLabel">[ActionLikeInstalling]:</String>
@@ -105,11 +105,9 @@
   <String Id="SuccessLaunchButton">&amp;Launch</String>
   <String Id="SuccessRestartText">You may need to restart your computer to finish updating files.</String>
   <String Id="SuccessRestartButton">&amp;Restart</String>
-  <String Id="SuccessInstallMessage">Special thanks to Mark Hammond, without whose years of freely shared Windows expertise, Python for Windows would still be Python for DOS.
+  <String Id="SuccessInstallMessage">New to Python? Start with the &lt;a href="https://docs.python.org/[ShortVersion]/tutorial/index.html"&gt;online tutorial&lt;/a&gt; and &lt;a href="https://docs.python.org/[ShortVersion]/index.html"&gt;documentation&lt;/a&gt;. At your terminal, type "py" to launch Python, or search for Python in your Start menu.
 
-New to Python? Start with the &lt;a href="https://docs.python.org/[ShortVersion]/tutorial/index.html"&gt;online tutorial&lt;/a&gt; and &lt;a href="https://docs.python.org/[ShortVersion]/index.html"&gt;documentation&lt;/a&gt;.
-
-See &lt;a href="https://docs.python.org/[ShortVersion]/whatsnew/[ShortVersion].html"&gt;what's new&lt;/a&gt; in this release.</String>
+See &lt;a href="https://docs.python.org/[ShortVersion]/whatsnew/[ShortVersion].html"&gt;what's new&lt;/a&gt; in this release, or find more info about &lt;a href="https://docs.python.org/[ShortVersion]/using/windows.html"&gt;using Python on Windows&lt;/a&gt;.</String>
   <String Id="SuccessModifyMessage">Thank you for using [WixBundleName].</String>
   <String Id="SuccessRepairMessage">Thank you for using [WixBundleName].
 
@@ -123,26 +121,9 @@
   <String Id="FailureRestartButton">&amp;Restart</String>
   <String Id="FailureExistingInstall">Unable to install [WixBundleName] due to an existing install. Use Programs and Features to modify, repair or remove [WixBundleName].</String>
   
-  <String Id="FailureWin7MissingSP1">Windows 7 Service Pack 1 and all applicable updates are required to install [WixBundleName].
+  <String Id="FailureOldOS">At least Windows 8.1 or Windows Server 2012 are required to install [WixBundleName]
 
-Please &lt;a href="https://www.bing.com/search?q=how%20to%20install%20windows%207%20service%20pack%201"&gt;update your machine&lt;/a&gt; and then restart the installation.</String>
-  <String Id="FailureVistaMissingSP2">Windows Vista Service Pack 2 and all applicable updates are required to install [WixBundleName].
-
-Please &lt;a href="https://www.bing.com/search?q=how%20to%20install%20windows%20vista%20service%20pack%202"&gt;update your machine&lt;/a&gt; and then restart the installation.</String>
-  <String Id="FailureXPOrEarlier">Windows Vista or later is required to install and use [WixBundleName].
-
-Visit &lt;a href="https://www.python.org/"&gt;python.org&lt;/a&gt; to download Python 3.4.</String>
-
-  <String Id="FailureWS2K8R2MissingSP1">Windows Server 2008 R2 Service Pack 1 and all applicable updates are required to install [WixBundleName].
-
-Please &lt;a href="https://www.bing.com/search?q=how%20to%20install%20windows%20server%202008%20r2%20service%20pack%201"&gt;update your machine&lt;/a&gt; and then restart the installation.</String>
-  <String Id="FailureWS2K8MissingSP2">Windows Server 2008 Service Pack 2 and all applicable updates are required to install [WixBundleName].
-
-Please &lt;a href="https://www.bing.com/search?q=how%20to%20install%20windows%20server%202008%20service%20pack%202"&gt;update your machine&lt;/a&gt; and then restart the installation.</String>
-  <String Id="FailureWS2K3OrEarlier">Windows Server 2008 SP2 or later is required to install and use [WixBundleName].
-
-Visit &lt;a href="https://www.python.org/"&gt;python.org&lt;/a&gt; to download Python 3.4.</String>
-
+Visit &lt;a href="https://www.python.org/"&gt;python.org&lt;/a&gt; to download an earlier version of Python.</String>
   <String Id="SuccessMaxPathButton">Disable path length limit</String>
   <String Id="SuccessMaxPathButtonNote">Changes your machine configuration to allow programs, including Python, to bypass the 260 character "MAX_PATH" limitation.</String>
 </WixLocalization>
diff --git a/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp b/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp
index fbdf7b6..3c54e40 100644
--- a/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp
+++ b/Tools/msi/bundle/bootstrap/PythonBootstrapperApplication.cpp
@@ -3011,65 +3011,35 @@
                 BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows Server 2012 or later");
                 return;
             } else if (IsWindowsVersionOrGreater(6, 1, 1)) {
-                HMODULE hKernel32 = GetModuleHandleW(L"kernel32");
-                if (hKernel32 && !GetProcAddress(hKernel32, "AddDllDirectory")) {
-                    BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2008 R2 without KB2533623");
-                    BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "KB2533623 update is required to continue.");
-                    /* The "MissingSP1" error also specifies updates are required */
-                    LocGetString(_wixLoc, L"#(loc.FailureWS2K8R2MissingSP1)", &pLocString);
-                } else {
-                    BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows Server 2008 R2 or later");
-                    return;
-                }
+                BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Detected Windows Server 2008 R2");
             } else if (IsWindowsVersionOrGreater(6, 1, 0)) {
                 BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2008 R2");
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 1 is required to continue installation");
-                LocGetString(_wixLoc, L"#(loc.FailureWS2K8R2MissingSP1)", &pLocString);
-            } else if (IsWindowsVersionOrGreater(6, 0, 2)) {
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Target OS is Windows Server 2008 SP2 or later");
-                return;
             } else if (IsWindowsVersionOrGreater(6, 0, 0)) {
                 BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2008");
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 2 is required to continue installation");
-                LocGetString(_wixLoc, L"#(loc.FailureWS2K8MissingSP2)", &pLocString);
             } else {
                 BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Server 2003 or earlier");
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows Server 2008 SP2 or later is required to continue installation");
-                LocGetString(_wixLoc, L"#(loc.FailureWS2K3OrEarlier)", &pLocString);
             }
+            BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows Server 2012 or later is required to continue installation");
         } else {
-            if (IsWindows8OrGreater()) {
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows 8 or later");
+            if (IsWindows10OrGreater()) {
+                BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows 10 or later");
                 return;
-            } else if (IsWindows7SP1OrGreater()) {
-                HMODULE hKernel32 = GetModuleHandleW(L"kernel32");
-                if (hKernel32 && !GetProcAddress(hKernel32, "AddDllDirectory")) {
-                    BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows 7 SP1 without KB2533623");
-                    BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "KB2533623 update is required to continue.");
-                    /* The "MissingSP1" error also specifies updates are required */
-                    LocGetString(_wixLoc, L"#(loc.FailureWin7MissingSP1)", &pLocString);
-                } else {
-                    BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows 7 SP1 or later");
-                    return;
-                }
+            } else if (IsWindows8Point1OrGreater()) {
+                BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Target OS is Windows 8.1");
+                return;
+            } else if (IsWindows8OrGreater()) {
+                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows 8");
             } else if (IsWindows7OrGreater()) {
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows 7 RTM");
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 1 is required to continue installation");
-                LocGetString(_wixLoc, L"#(loc.FailureWin7MissingSP1)", &pLocString);
-            } else if (IsWindowsVistaSP2OrGreater()) {
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Target OS is Windows Vista SP2");
-                return;
+                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows 7");
             } else if (IsWindowsVistaOrGreater()) {
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Vista RTM or SP1");
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Service Pack 2 is required to continue installation");
-                LocGetString(_wixLoc, L"#(loc.FailureVistaMissingSP2)", &pLocString);
+                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows Vista");
             } else { 
                 BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Detected Windows XP or earlier");
-                BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows Vista SP2 or later is required to continue installation");
-                LocGetString(_wixLoc, L"#(loc.FailureXPOrEarlier)", &pLocString);
             }
+            BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Windows 8.1 or later is required to continue installation");
         }
 
+        LocGetString(_wixLoc, L"#(loc.FailureOldOS)", &pLocString);
         if (pLocString && pLocString->wzText) {
             BalFormatString(pLocString->wzText, &_failedMessage);
         }
diff --git a/Tools/msi/bundle/packagegroups/crt.wxs b/Tools/msi/bundle/packagegroups/crt.wxs
index 61b756f..f931da1 100644
--- a/Tools/msi/bundle/packagegroups/crt.wxs
+++ b/Tools/msi/bundle/packagegroups/crt.wxs
@@ -4,7 +4,7 @@
         <PackageGroup Id="crt">
             <MsiPackage Id="ucrt_AllUsers"
                         SourceFile="ucrt.msi"
-                        Compressed="$(var.CompressMSI)"
+                        Compressed="no"
                         DownloadUrl="$(var.DownloadUrl)"
                         ForcePerMachine="yes"
                         InstallCondition="InstallAllUsers and not CRTInstalled and (Include_core or Include_exe or Include_pip) and not LauncherOnly">
@@ -12,7 +12,7 @@
             </MsiPackage>
             <MsiPackage Id="ucrt_JustForMe"
                         SourceFile="ucrt.msi"
-                        Compressed="$(var.CompressMSI)"
+                        Compressed="no"
                         DownloadUrl="$(var.DownloadUrl)"
                         ForcePerMachine="no"
                         InstallCondition="not InstallAllUsers and not CRTInstalled and (Include_core or Include_exe or Include_pip) and not LauncherOnly">
diff --git a/Tools/msi/lib/lib_files.wxs b/Tools/msi/lib/lib_files.wxs
index b462372..037fc38 100644
--- a/Tools/msi/lib/lib_files.wxs
+++ b/Tools/msi/lib/lib_files.wxs
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
-    <?define exts=pyexpat;select;unicodedata;winsound;_bz2;_elementtree;_socket;_ssl;_msi;_ctypes;_hashlib;_multiprocessing;_lzma;_decimal;_overlapped;_sqlite3;_asyncio;_queue ?>
+    <?define exts=pyexpat;select;unicodedata;winsound;_bz2;_elementtree;_socket;_ssl;_msi;_ctypes;_hashlib;_multiprocessing;_lzma;_decimal;_overlapped;_sqlite3;_asyncio;_queue;_uuid;_zoneinfo ?>
     <Fragment>
         <DirectoryRef Id="Lib_venv_scripts_nt" />
 
diff --git a/Tools/msi/sdktools.psm1 b/Tools/msi/sdktools.psm1
index 8081b10..c5973f9 100644
--- a/Tools/msi/sdktools.psm1
+++ b/Tools/msi/sdktools.psm1
@@ -37,11 +37,11 @@
 
     foreach ($a in $files) {
         if ($certsha1) {
-            SignTool sign /sha1 $certsha1 /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d $description $a
+            SignTool sign /sha1 $certsha1 /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d $description $a
         } elseif ($certname) {
-            SignTool sign /a /n $certname /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d $description $a
+            SignTool sign /a /n $certname /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d $description $a
         } elseif ($certfile) {
-            SignTool sign /f $certfile /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d $description $a
+            SignTool sign /f $certfile /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d $description $a
         }
     }
 }
diff --git a/Tools/msi/test/test_files.wxs b/Tools/msi/test/test_files.wxs
index 82a9115..9127ce8 100644
--- a/Tools/msi/test/test_files.wxs
+++ b/Tools/msi/test/test_files.wxs
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
-    <?define exts=_testcapi;_ctypes_test;_testbuffer;_testimportmultiple;_testmultiphase;_testconsole ?>
+    <?define exts=_testcapi;_ctypes_test;_testbuffer;_testimportmultiple;_testmultiphase;_testconsole;_testinternalcapi ?>
     <Fragment>
         <ComponentGroup Id="test_extensions">
             <?foreach ext in $(var.exts)?>
diff --git a/Tools/nuget/python.nuspec b/Tools/nuget/python.nuspec
index 8f98e80..2da5f20 100644
--- a/Tools/nuget/python.nuspec
+++ b/Tools/nuget/python.nuspec
@@ -13,6 +13,6 @@
   </metadata>
   <files>
     <file src="**\*" exclude="python.props" target="tools" />
-    <file src="python.props" target="build\native" />
+    <file src="python.props" target="build\native\python.props" />
   </files>
 </package>
diff --git a/Tools/nuget/pythonarm32.nuspec b/Tools/nuget/pythonarm32.nuspec
index 273d79a..2d19793 100644
--- a/Tools/nuget/pythonarm32.nuspec
+++ b/Tools/nuget/pythonarm32.nuspec
@@ -14,6 +14,7 @@
   </metadata>
   <files>
     <file src="**\*" exclude="python.props" target="tools" />
-    <file src="python.props" target="build\native" />
+    <file src="python.props" target="build\native\python.props" />
+    <file src="python.props" target="build\native\pythonarm32.props" />
   </files>
 </package>
diff --git a/Tools/nuget/pythondaily.nuspec b/Tools/nuget/pythondaily.nuspec
index 5cf5580..7df1983 100644
--- a/Tools/nuget/pythondaily.nuspec
+++ b/Tools/nuget/pythondaily.nuspec
@@ -13,6 +13,7 @@
   </metadata>
   <files>
     <file src="**\*" exclude="python.props" target="tools" />
-    <file src="python.props" target="build\native" />
+    <file src="python.props" target="build\native\python.props" />
+    <file src="python.props" target="build\native\pythondaily.props" />
   </files>
 </package>
diff --git a/Tools/nuget/pythonx86.nuspec b/Tools/nuget/pythonx86.nuspec
index 27ef67e..ea878ba 100644
--- a/Tools/nuget/pythonx86.nuspec
+++ b/Tools/nuget/pythonx86.nuspec
@@ -13,6 +13,7 @@
   </metadata>
   <files>
     <file src="**\*" exclude="python.props" target="tools" />
-    <file src="python.props" target="build\native" />
+    <file src="python.props" target="build\native\python.props" />
+    <file src="python.props" target="build\native\pythonx86.props" />
   </files>
 </package>
diff --git a/Tools/parser/unparse.py b/Tools/parser/unparse.py
deleted file mode 100644
index 0642b84..0000000
--- a/Tools/parser/unparse.py
+++ /dev/null
@@ -1,719 +0,0 @@
-"Usage: unparse.py <path to source file>"
-import sys
-import ast
-import tokenize
-import io
-import os
-
-# Large float and imaginary literals get turned into infinities in the AST.
-# We unparse those infinities to INFSTR.
-INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
-
-def interleave(inter, f, seq):
-    """Call f on each item in seq, calling inter() in between.
-    """
-    seq = iter(seq)
-    try:
-        f(next(seq))
-    except StopIteration:
-        pass
-    else:
-        for x in seq:
-            inter()
-            f(x)
-
-class Unparser:
-    """Methods in this class recursively traverse an AST and
-    output source code for the abstract syntax; original formatting
-    is disregarded. """
-
-    def __init__(self, tree, file = sys.stdout):
-        """Unparser(tree, file=sys.stdout) -> None.
-         Print the source for tree to file."""
-        self.f = file
-        self._indent = 0
-        self.dispatch(tree)
-        print("", file=self.f)
-        self.f.flush()
-
-    def fill(self, text = ""):
-        "Indent a piece of text, according to the current indentation level"
-        self.f.write("\n"+"    "*self._indent + text)
-
-    def write(self, text):
-        "Append a piece of text to the current line."
-        self.f.write(text)
-
-    def enter(self):
-        "Print ':', and increase the indentation."
-        self.write(":")
-        self._indent += 1
-
-    def leave(self):
-        "Decrease the indentation level."
-        self._indent -= 1
-
-    def dispatch(self, tree):
-        "Dispatcher function, dispatching tree type T to method _T."
-        if isinstance(tree, list):
-            for t in tree:
-                self.dispatch(t)
-            return
-        meth = getattr(self, "_"+tree.__class__.__name__)
-        meth(tree)
-
-
-    ############### Unparsing methods ######################
-    # There should be one method per concrete grammar type #
-    # Constructors should be grouped by sum type. Ideally, #
-    # this would follow the order in the grammar, but      #
-    # currently doesn't.                                   #
-    ########################################################
-
-    def _Module(self, tree):
-        for stmt in tree.body:
-            self.dispatch(stmt)
-
-    # stmt
-    def _Expr(self, tree):
-        self.fill()
-        self.dispatch(tree.value)
-
-    def _NamedExpr(self, tree):
-        self.write("(")
-        self.dispatch(tree.target)
-        self.write(" := ")
-        self.dispatch(tree.value)
-        self.write(")")
-
-    def _Import(self, t):
-        self.fill("import ")
-        interleave(lambda: self.write(", "), self.dispatch, t.names)
-
-    def _ImportFrom(self, t):
-        self.fill("from ")
-        self.write("." * t.level)
-        if t.module:
-            self.write(t.module)
-        self.write(" import ")
-        interleave(lambda: self.write(", "), self.dispatch, t.names)
-
-    def _Assign(self, t):
-        self.fill()
-        for target in t.targets:
-            self.dispatch(target)
-            self.write(" = ")
-        self.dispatch(t.value)
-
-    def _AugAssign(self, t):
-        self.fill()
-        self.dispatch(t.target)
-        self.write(" "+self.binop[t.op.__class__.__name__]+"= ")
-        self.dispatch(t.value)
-
-    def _AnnAssign(self, t):
-        self.fill()
-        if not t.simple and isinstance(t.target, ast.Name):
-            self.write('(')
-        self.dispatch(t.target)
-        if not t.simple and isinstance(t.target, ast.Name):
-            self.write(')')
-        self.write(": ")
-        self.dispatch(t.annotation)
-        if t.value:
-            self.write(" = ")
-            self.dispatch(t.value)
-
-    def _Return(self, t):
-        self.fill("return")
-        if t.value:
-            self.write(" ")
-            self.dispatch(t.value)
-
-    def _Pass(self, t):
-        self.fill("pass")
-
-    def _Break(self, t):
-        self.fill("break")
-
-    def _Continue(self, t):
-        self.fill("continue")
-
-    def _Delete(self, t):
-        self.fill("del ")
-        interleave(lambda: self.write(", "), self.dispatch, t.targets)
-
-    def _Assert(self, t):
-        self.fill("assert ")
-        self.dispatch(t.test)
-        if t.msg:
-            self.write(", ")
-            self.dispatch(t.msg)
-
-    def _Global(self, t):
-        self.fill("global ")
-        interleave(lambda: self.write(", "), self.write, t.names)
-
-    def _Nonlocal(self, t):
-        self.fill("nonlocal ")
-        interleave(lambda: self.write(", "), self.write, t.names)
-
-    def _Await(self, t):
-        self.write("(")
-        self.write("await")
-        if t.value:
-            self.write(" ")
-            self.dispatch(t.value)
-        self.write(")")
-
-    def _Yield(self, t):
-        self.write("(")
-        self.write("yield")
-        if t.value:
-            self.write(" ")
-            self.dispatch(t.value)
-        self.write(")")
-
-    def _YieldFrom(self, t):
-        self.write("(")
-        self.write("yield from")
-        if t.value:
-            self.write(" ")
-            self.dispatch(t.value)
-        self.write(")")
-
-    def _Raise(self, t):
-        self.fill("raise")
-        if not t.exc:
-            assert not t.cause
-            return
-        self.write(" ")
-        self.dispatch(t.exc)
-        if t.cause:
-            self.write(" from ")
-            self.dispatch(t.cause)
-
-    def _Try(self, t):
-        self.fill("try")
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-        for ex in t.handlers:
-            self.dispatch(ex)
-        if t.orelse:
-            self.fill("else")
-            self.enter()
-            self.dispatch(t.orelse)
-            self.leave()
-        if t.finalbody:
-            self.fill("finally")
-            self.enter()
-            self.dispatch(t.finalbody)
-            self.leave()
-
-    def _ExceptHandler(self, t):
-        self.fill("except")
-        if t.type:
-            self.write(" ")
-            self.dispatch(t.type)
-        if t.name:
-            self.write(" as ")
-            self.write(t.name)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-
-    def _ClassDef(self, t):
-        self.write("\n")
-        for deco in t.decorator_list:
-            self.fill("@")
-            self.dispatch(deco)
-        self.fill("class "+t.name)
-        self.write("(")
-        comma = False
-        for e in t.bases:
-            if comma: self.write(", ")
-            else: comma = True
-            self.dispatch(e)
-        for e in t.keywords:
-            if comma: self.write(", ")
-            else: comma = True
-            self.dispatch(e)
-        self.write(")")
-
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-
-    def _FunctionDef(self, t):
-        self.__FunctionDef_helper(t, "def")
-
-    def _AsyncFunctionDef(self, t):
-        self.__FunctionDef_helper(t, "async def")
-
-    def __FunctionDef_helper(self, t, fill_suffix):
-        self.write("\n")
-        for deco in t.decorator_list:
-            self.fill("@")
-            self.dispatch(deco)
-        def_str = fill_suffix+" "+t.name + "("
-        self.fill(def_str)
-        self.dispatch(t.args)
-        self.write(")")
-        if t.returns:
-            self.write(" -> ")
-            self.dispatch(t.returns)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-
-    def _For(self, t):
-        self.__For_helper("for ", t)
-
-    def _AsyncFor(self, t):
-        self.__For_helper("async for ", t)
-
-    def __For_helper(self, fill, t):
-        self.fill(fill)
-        self.dispatch(t.target)
-        self.write(" in ")
-        self.dispatch(t.iter)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-        if t.orelse:
-            self.fill("else")
-            self.enter()
-            self.dispatch(t.orelse)
-            self.leave()
-
-    def _If(self, t):
-        self.fill("if ")
-        self.dispatch(t.test)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-        # collapse nested ifs into equivalent elifs.
-        while (t.orelse and len(t.orelse) == 1 and
-               isinstance(t.orelse[0], ast.If)):
-            t = t.orelse[0]
-            self.fill("elif ")
-            self.dispatch(t.test)
-            self.enter()
-            self.dispatch(t.body)
-            self.leave()
-        # final else
-        if t.orelse:
-            self.fill("else")
-            self.enter()
-            self.dispatch(t.orelse)
-            self.leave()
-
-    def _While(self, t):
-        self.fill("while ")
-        self.dispatch(t.test)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-        if t.orelse:
-            self.fill("else")
-            self.enter()
-            self.dispatch(t.orelse)
-            self.leave()
-
-    def _With(self, t):
-        self.fill("with ")
-        interleave(lambda: self.write(", "), self.dispatch, t.items)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-
-    def _AsyncWith(self, t):
-        self.fill("async with ")
-        interleave(lambda: self.write(", "), self.dispatch, t.items)
-        self.enter()
-        self.dispatch(t.body)
-        self.leave()
-
-    # expr
-    def _JoinedStr(self, t):
-        self.write("f")
-        string = io.StringIO()
-        self._fstring_JoinedStr(t, string.write)
-        self.write(repr(string.getvalue()))
-
-    def _FormattedValue(self, t):
-        self.write("f")
-        string = io.StringIO()
-        self._fstring_FormattedValue(t, string.write)
-        self.write(repr(string.getvalue()))
-
-    def _fstring_JoinedStr(self, t, write):
-        for value in t.values:
-            meth = getattr(self, "_fstring_" + type(value).__name__)
-            meth(value, write)
-
-    def _fstring_Constant(self, t, write):
-        assert isinstance(t.value, str)
-        value = t.value.replace("{", "{{").replace("}", "}}")
-        write(value)
-
-    def _fstring_FormattedValue(self, t, write):
-        write("{")
-        expr = io.StringIO()
-        Unparser(t.value, expr)
-        expr = expr.getvalue().rstrip("\n")
-        if expr.startswith("{"):
-            write(" ")  # Separate pair of opening brackets as "{ {"
-        write(expr)
-        if t.conversion != -1:
-            conversion = chr(t.conversion)
-            assert conversion in "sra"
-            write(f"!{conversion}")
-        if t.format_spec:
-            write(":")
-            meth = getattr(self, "_fstring_" + type(t.format_spec).__name__)
-            meth(t.format_spec, write)
-        write("}")
-
-    def _Name(self, t):
-        self.write(t.id)
-
-    def _write_constant(self, value):
-        if isinstance(value, (float, complex)):
-            # Substitute overflowing decimal literal for AST infinities.
-            self.write(repr(value).replace("inf", INFSTR))
-        else:
-            self.write(repr(value))
-
-    def _Constant(self, t):
-        value = t.value
-        if isinstance(value, tuple):
-            self.write("(")
-            if len(value) == 1:
-                self._write_constant(value[0])
-                self.write(",")
-            else:
-                interleave(lambda: self.write(", "), self._write_constant, value)
-            self.write(")")
-        elif value is ...:
-            self.write("...")
-        else:
-            if t.kind == "u":
-                self.write("u")
-            self._write_constant(t.value)
-
-    def _List(self, t):
-        self.write("[")
-        interleave(lambda: self.write(", "), self.dispatch, t.elts)
-        self.write("]")
-
-    def _ListComp(self, t):
-        self.write("[")
-        self.dispatch(t.elt)
-        for gen in t.generators:
-            self.dispatch(gen)
-        self.write("]")
-
-    def _GeneratorExp(self, t):
-        self.write("(")
-        self.dispatch(t.elt)
-        for gen in t.generators:
-            self.dispatch(gen)
-        self.write(")")
-
-    def _SetComp(self, t):
-        self.write("{")
-        self.dispatch(t.elt)
-        for gen in t.generators:
-            self.dispatch(gen)
-        self.write("}")
-
-    def _DictComp(self, t):
-        self.write("{")
-        self.dispatch(t.key)
-        self.write(": ")
-        self.dispatch(t.value)
-        for gen in t.generators:
-            self.dispatch(gen)
-        self.write("}")
-
-    def _comprehension(self, t):
-        if t.is_async:
-            self.write(" async for ")
-        else:
-            self.write(" for ")
-        self.dispatch(t.target)
-        self.write(" in ")
-        self.dispatch(t.iter)
-        for if_clause in t.ifs:
-            self.write(" if ")
-            self.dispatch(if_clause)
-
-    def _IfExp(self, t):
-        self.write("(")
-        self.dispatch(t.body)
-        self.write(" if ")
-        self.dispatch(t.test)
-        self.write(" else ")
-        self.dispatch(t.orelse)
-        self.write(")")
-
-    def _Set(self, t):
-        assert(t.elts) # should be at least one element
-        self.write("{")
-        interleave(lambda: self.write(", "), self.dispatch, t.elts)
-        self.write("}")
-
-    def _Dict(self, t):
-        self.write("{")
-        def write_key_value_pair(k, v):
-            self.dispatch(k)
-            self.write(": ")
-            self.dispatch(v)
-
-        def write_item(item):
-            k, v = item
-            if k is None:
-                # for dictionary unpacking operator in dicts {**{'y': 2}}
-                # see PEP 448 for details
-                self.write("**")
-                self.dispatch(v)
-            else:
-                write_key_value_pair(k, v)
-        interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values))
-        self.write("}")
-
-    def _Tuple(self, t):
-        self.write("(")
-        if len(t.elts) == 1:
-            elt = t.elts[0]
-            self.dispatch(elt)
-            self.write(",")
-        else:
-            interleave(lambda: self.write(", "), self.dispatch, t.elts)
-        self.write(")")
-
-    unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"}
-    def _UnaryOp(self, t):
-        self.write("(")
-        self.write(self.unop[t.op.__class__.__name__])
-        self.write(" ")
-        self.dispatch(t.operand)
-        self.write(")")
-
-    binop = { "Add":"+", "Sub":"-", "Mult":"*", "MatMult":"@", "Div":"/", "Mod":"%",
-                    "LShift":"<<", "RShift":">>", "BitOr":"|", "BitXor":"^", "BitAnd":"&",
-                    "FloorDiv":"//", "Pow": "**"}
-    def _BinOp(self, t):
-        self.write("(")
-        self.dispatch(t.left)
-        self.write(" " + self.binop[t.op.__class__.__name__] + " ")
-        self.dispatch(t.right)
-        self.write(")")
-
-    cmpops = {"Eq":"==", "NotEq":"!=", "Lt":"<", "LtE":"<=", "Gt":">", "GtE":">=",
-                        "Is":"is", "IsNot":"is not", "In":"in", "NotIn":"not in"}
-    def _Compare(self, t):
-        self.write("(")
-        self.dispatch(t.left)
-        for o, e in zip(t.ops, t.comparators):
-            self.write(" " + self.cmpops[o.__class__.__name__] + " ")
-            self.dispatch(e)
-        self.write(")")
-
-    boolops = {ast.And: 'and', ast.Or: 'or'}
-    def _BoolOp(self, t):
-        self.write("(")
-        s = " %s " % self.boolops[t.op.__class__]
-        interleave(lambda: self.write(s), self.dispatch, t.values)
-        self.write(")")
-
-    def _Attribute(self,t):
-        self.dispatch(t.value)
-        # Special case: 3.__abs__() is a syntax error, so if t.value
-        # is an integer literal then we need to either parenthesize
-        # it or add an extra space to get 3 .__abs__().
-        if isinstance(t.value, ast.Constant) and isinstance(t.value.value, int):
-            self.write(" ")
-        self.write(".")
-        self.write(t.attr)
-
-    def _Call(self, t):
-        self.dispatch(t.func)
-        self.write("(")
-        comma = False
-        for e in t.args:
-            if comma: self.write(", ")
-            else: comma = True
-            self.dispatch(e)
-        for e in t.keywords:
-            if comma: self.write(", ")
-            else: comma = True
-            self.dispatch(e)
-        self.write(")")
-
-    def _Subscript(self, t):
-        self.dispatch(t.value)
-        self.write("[")
-        if (isinstance(t.slice, ast.Index)
-                and isinstance(t.slice.value, ast.Tuple)
-                and t.slice.value.elts):
-            if len(t.slice.value.elts) == 1:
-                elt = t.slice.value.elts[0]
-                self.dispatch(elt)
-                self.write(",")
-            else:
-                interleave(lambda: self.write(", "), self.dispatch, t.slice.value.elts)
-        else:
-            self.dispatch(t.slice)
-        self.write("]")
-
-    def _Starred(self, t):
-        self.write("*")
-        self.dispatch(t.value)
-
-    # slice
-    def _Ellipsis(self, t):
-        self.write("...")
-
-    def _Index(self, t):
-        self.dispatch(t.value)
-
-    def _Slice(self, t):
-        if t.lower:
-            self.dispatch(t.lower)
-        self.write(":")
-        if t.upper:
-            self.dispatch(t.upper)
-        if t.step:
-            self.write(":")
-            self.dispatch(t.step)
-
-    def _ExtSlice(self, t):
-        if len(t.dims) == 1:
-            elt = t.dims[0]
-            self.dispatch(elt)
-            self.write(",")
-        else:
-            interleave(lambda: self.write(', '), self.dispatch, t.dims)
-
-    # argument
-    def _arg(self, t):
-        self.write(t.arg)
-        if t.annotation:
-            self.write(": ")
-            self.dispatch(t.annotation)
-
-    # others
-    def _arguments(self, t):
-        first = True
-        # normal arguments
-        all_args = t.posonlyargs + t.args
-        defaults = [None] * (len(all_args) - len(t.defaults)) + t.defaults
-        for index, elements in enumerate(zip(all_args, defaults), 1):
-            a, d = elements
-            if first:first = False
-            else: self.write(", ")
-            self.dispatch(a)
-            if d:
-                self.write("=")
-                self.dispatch(d)
-            if index == len(t.posonlyargs):
-                self.write(", /")
-
-        # varargs, or bare '*' if no varargs but keyword-only arguments present
-        if t.vararg or t.kwonlyargs:
-            if first:first = False
-            else: self.write(", ")
-            self.write("*")
-            if t.vararg:
-                self.write(t.vararg.arg)
-                if t.vararg.annotation:
-                    self.write(": ")
-                    self.dispatch(t.vararg.annotation)
-
-        # keyword-only arguments
-        if t.kwonlyargs:
-            for a, d in zip(t.kwonlyargs, t.kw_defaults):
-                if first:first = False
-                else: self.write(", ")
-                self.dispatch(a),
-                if d:
-                    self.write("=")
-                    self.dispatch(d)
-
-        # kwargs
-        if t.kwarg:
-            if first:first = False
-            else: self.write(", ")
-            self.write("**"+t.kwarg.arg)
-            if t.kwarg.annotation:
-                self.write(": ")
-                self.dispatch(t.kwarg.annotation)
-
-    def _keyword(self, t):
-        if t.arg is None:
-            self.write("**")
-        else:
-            self.write(t.arg)
-            self.write("=")
-        self.dispatch(t.value)
-
-    def _Lambda(self, t):
-        self.write("(")
-        self.write("lambda ")
-        self.dispatch(t.args)
-        self.write(": ")
-        self.dispatch(t.body)
-        self.write(")")
-
-    def _alias(self, t):
-        self.write(t.name)
-        if t.asname:
-            self.write(" as "+t.asname)
-
-    def _withitem(self, t):
-        self.dispatch(t.context_expr)
-        if t.optional_vars:
-            self.write(" as ")
-            self.dispatch(t.optional_vars)
-
-def roundtrip(filename, output=sys.stdout):
-    with open(filename, "rb") as pyfile:
-        encoding = tokenize.detect_encoding(pyfile.readline)[0]
-    with open(filename, "r", encoding=encoding) as pyfile:
-        source = pyfile.read()
-    tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST)
-    Unparser(tree, output)
-
-
-
-def testdir(a):
-    try:
-        names = [n for n in os.listdir(a) if n.endswith('.py')]
-    except OSError:
-        print("Directory not readable: %s" % a, file=sys.stderr)
-    else:
-        for n in names:
-            fullname = os.path.join(a, n)
-            if os.path.isfile(fullname):
-                output = io.StringIO()
-                print('Testing %s' % fullname)
-                try:
-                    roundtrip(fullname, output)
-                except Exception as e:
-                    print('  Failed to compile, exception is %s' % repr(e))
-            elif os.path.isdir(fullname):
-                testdir(fullname)
-
-def main(args):
-    if args[0] == '--testdir':
-        for a in args[1:]:
-            testdir(a)
-    else:
-        for a in args:
-            roundtrip(a)
-
-if __name__=='__main__':
-    main(sys.argv[1:])
diff --git a/Tools/peg_generator/.clang-format b/Tools/peg_generator/.clang-format
new file mode 100644
index 0000000..b2bb93d
--- /dev/null
+++ b/Tools/peg_generator/.clang-format
@@ -0,0 +1,17 @@
+# A clang-format style that approximates Python's PEP 7
+BasedOnStyle: Google
+AlwaysBreakAfterReturnType: All
+AllowShortIfStatementsOnASingleLine: false
+AlignAfterOpenBracket: Align
+BreakBeforeBraces: Stroustrup
+ColumnLimit: 95
+DerivePointerAlignment: false
+IndentWidth: 4
+Language: Cpp
+PointerAlignment: Right
+ReflowComments: true
+SpaceBeforeParens: ControlStatements
+SpacesInParentheses: false
+TabWidth: 4
+UseTab: Never
+SortIncludes: false
diff --git a/Tools/peg_generator/.gitignore b/Tools/peg_generator/.gitignore
new file mode 100644
index 0000000..f25e541
--- /dev/null
+++ b/Tools/peg_generator/.gitignore
@@ -0,0 +1,4 @@
+peg_extension/parse.c
+data/xxl.py
+venv/
+@data
diff --git a/Tools/peg_generator/Makefile b/Tools/peg_generator/Makefile
new file mode 100644
index 0000000..fb727c0
--- /dev/null
+++ b/Tools/peg_generator/Makefile
@@ -0,0 +1,115 @@
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Linux)
+	PYTHON ?= ../../python
+endif
+ifeq ($(UNAME_S),Darwin)
+	PYTHON ?= ../../python.exe
+endif
+VENVDIR ?= ./venv
+VENVPYTHON ?= $(VENVDIR)/bin/python
+CPYTHON ?= ../../Lib
+MYPY ?= mypy
+
+GRAMMAR = ../../Grammar/python.gram
+TOKENS = ../../Grammar/Tokens
+TESTFILE = data/cprog.py
+TIMEFILE = data/xxl.py
+TESTDIR = .
+TESTFLAGS = --short
+
+data/xxl.py:
+	$(PYTHON) -m zipfile -e data/xxl.zip data
+
+build: peg_extension/parse.c
+
+peg_extension/parse.c: $(GRAMMAR) $(TOKENS) pegen/*.py peg_extension/peg_extension.c ../../Parser/pegen/pegen.c ../../Parser/pegen/parse_string.c ../../Parser/pegen/*.h pegen/grammar_parser.py
+	$(PYTHON) -m pegen -q c $(GRAMMAR) $(TOKENS) -o peg_extension/parse.c --compile-extension
+
+clean:
+	-rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c
+	-rm -f data/xxl.py
+	-rm -rf $(VENVDIR)
+
+dump: peg_extension/parse.c
+	cat -n $(TESTFILE)
+	$(PYTHON) -c "from peg_extension import parse; import ast; t = parse.parse_file('$(TESTFILE)', mode=1); print(ast.dump(t))"
+
+regen-metaparser: pegen/metagrammar.gram pegen/*.py
+	$(PYTHON) -m pegen -q python pegen/metagrammar.gram -o pegen/grammar_parser.py
+
+# Note: These targets really depend on the generated shared object in peg_extension/parse.*.so but
+# this has different names in different systems so we are abusing the implicit dependency on
+# parse.c by the use of --compile-extension.
+
+.PHONY: test
+
+venv:
+	$(PYTHON) -m venv $(VENVDIR)
+	$(VENVPYTHON) -m pip install -U pip setuptools
+	$(VENVPYTHON) -m pip install -r requirements.pip
+	@echo "The venv has been created in the $(VENVDIR) directory"
+
+test: run
+
+run: peg_extension/parse.c
+	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)'); exec(t)"
+
+compile: peg_extension/parse.c
+	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)', mode=2)"
+
+parse: peg_extension/parse.c
+	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)', mode=1)"
+
+check: peg_extension/parse.c
+	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TESTFILE)', mode=0)"
+
+stats: peg_extension/parse.c data/xxl.py
+	$(PYTHON) -c "from peg_extension import parse; t = parse.parse_file('$(TIMEFILE)', mode=0); parse.dump_memo_stats()" >@data
+	$(PYTHON) scripts/joinstats.py @data
+
+time: time_compile
+
+time_compile: venv data/xxl.py
+	$(VENVPYTHON) scripts/benchmark.py --parser=new --target=xxl compile
+
+time_parse: venv data/xxl.py
+	$(VENVPYTHON) scripts/benchmark.py --parser=new --target=xxl parse
+
+time_old: time_old_compile
+
+time_old_compile: venv data/xxl.py
+	$(VENVPYTHON) scripts/benchmark.py --parser=old --target=xxl compile
+
+time_old_parse: venv data/xxl.py
+	$(VENVPYTHON) scripts/benchmark.py --parser=old --target=xxl parse
+
+time_peg_dir: venv
+	$(VENVPYTHON) scripts/test_parse_directory.py \
+		-d $(TESTDIR) \
+		$(TESTFLAGS) \
+		--exclude "*/failset/*" \
+		--exclude "*/failset/**" \
+		--exclude "*/failset/**/*"
+
+time_stdlib: $(CPYTHON) venv
+	$(VENVPYTHON) scripts/test_parse_directory.py \
+		-d $(CPYTHON) \
+		$(TESTFLAGS) \
+		--exclude "*/bad*" \
+		--exclude "*/lib2to3/tests/data/*"
+
+mypy: regen-metaparser
+	$(MYPY)  # For list of files, see mypy.ini
+
+format-python:
+	black pegen scripts
+
+format: format-python
+
+find_max_nesting:
+	$(PYTHON) scripts/find_max_nesting.py
+
+tags: TAGS
+
+TAGS: pegen/*.py test/test_pegen.py
+	etags pegen/*.py test/test_pegen.py
diff --git a/Tools/peg_generator/data/cprog.py b/Tools/peg_generator/data/cprog.py
new file mode 100644
index 0000000..79a4298
--- /dev/null
+++ b/Tools/peg_generator/data/cprog.py
@@ -0,0 +1,11 @@
+if 1:
+    print("Hello " + "world")
+    if 0:
+        print("then")
+        print("clause")
+    elif 1:
+        pass
+    elif 1:
+        pass
+    else:
+        print("else-clause")
diff --git a/Tools/peg_generator/data/top-pypi-packages-365-days.json b/Tools/peg_generator/data/top-pypi-packages-365-days.json
new file mode 100644
index 0000000..63ff084
--- /dev/null
+++ b/Tools/peg_generator/data/top-pypi-packages-365-days.json
@@ -0,0 +1,16011 @@
+{
+    "last_update": "2020-01-17 15:34:44",
+    "query": {
+        "bytes_billed": 646188105728,
+        "bytes_processed": 646187256701,
+        "cached": false,
+        "estimated_cost": "2.94"
+    },
+    "rows": [
+        {
+            "download_count": 910195765,
+            "project": "urllib3"
+        },
+        {
+            "download_count": 749120890,
+            "project": "six"
+        },
+        {
+            "download_count": 670113460,
+            "project": "botocore"
+        },
+        {
+            "download_count": 629757389,
+            "project": "python-dateutil"
+        },
+        {
+            "download_count": 629606070,
+            "project": "pip"
+        },
+        {
+            "download_count": 626954494,
+            "project": "requests"
+        },
+        {
+            "download_count": 595019137,
+            "project": "s3transfer"
+        },
+        {
+            "download_count": 570148733,
+            "project": "certifi"
+        },
+        {
+            "download_count": 542241710,
+            "project": "idna"
+        },
+        {
+            "download_count": 534393540,
+            "project": "pyyaml"
+        },
+        {
+            "download_count": 531342983,
+            "project": "pyasn1"
+        },
+        {
+            "download_count": 518080177,
+            "project": "docutils"
+        },
+        {
+            "download_count": 516892347,
+            "project": "chardet"
+        },
+        {
+            "download_count": 502956749,
+            "project": "rsa"
+        },
+        {
+            "download_count": 480905080,
+            "project": "jmespath"
+        },
+        {
+            "download_count": 410856025,
+            "project": "setuptools"
+        },
+        {
+            "download_count": 410196551,
+            "project": "pytz"
+        },
+        {
+            "download_count": 397671253,
+            "project": "awscli"
+        },
+        {
+            "download_count": 392932234,
+            "project": "futures"
+        },
+        {
+            "download_count": 375594752,
+            "project": "colorama"
+        },
+        {
+            "download_count": 346035749,
+            "project": "simplejson"
+        },
+        {
+            "download_count": 337185380,
+            "project": "boto3"
+        },
+        {
+            "download_count": 305750769,
+            "project": "numpy"
+        },
+        {
+            "download_count": 304101394,
+            "project": "wheel"
+        },
+        {
+            "download_count": 264199809,
+            "project": "protobuf"
+        },
+        {
+            "download_count": 244941990,
+            "project": "markupsafe"
+        },
+        {
+            "download_count": 242351858,
+            "project": "cffi"
+        },
+        {
+            "download_count": 214070466,
+            "project": "jinja2"
+        },
+        {
+            "download_count": 212238740,
+            "project": "pyasn1-modules"
+        },
+        {
+            "download_count": 210982876,
+            "project": "cryptography"
+        },
+        {
+            "download_count": 190156825,
+            "project": "attrs"
+        },
+        {
+            "download_count": 182755695,
+            "project": "cachetools"
+        },
+        {
+            "download_count": 178075863,
+            "project": "google-api-core"
+        },
+        {
+            "download_count": 177966855,
+            "project": "enum34"
+        },
+        {
+            "download_count": 173568874,
+            "project": "click"
+        },
+        {
+            "download_count": 168990924,
+            "project": "future"
+        },
+        {
+            "download_count": 168313449,
+            "project": "google-auth"
+        },
+        {
+            "download_count": 165064404,
+            "project": "pandas"
+        },
+        {
+            "download_count": 161184509,
+            "project": "grpcio"
+        },
+        {
+            "download_count": 153694077,
+            "project": "google-cloud-core"
+        },
+        {
+            "download_count": 152780068,
+            "project": "pycparser"
+        },
+        {
+            "download_count": 150391523,
+            "project": "googleapis-common-protos"
+        },
+        {
+            "download_count": 145133278,
+            "project": "pyparsing"
+        },
+        {
+            "download_count": 143193200,
+            "project": "werkzeug"
+        },
+        {
+            "download_count": 136092386,
+            "project": "pytest"
+        },
+        {
+            "download_count": 135106914,
+            "project": "decorator"
+        },
+        {
+            "download_count": 128924918,
+            "project": "asn1crypto"
+        },
+        {
+            "download_count": 126657878,
+            "project": "more-itertools"
+        },
+        {
+            "download_count": 126309809,
+            "project": "awscli-cwlogs"
+        },
+        {
+            "download_count": 120300118,
+            "project": "pluggy"
+        },
+        {
+            "download_count": 117455899,
+            "project": "flask"
+        },
+        {
+            "download_count": 116968652,
+            "project": "scipy"
+        },
+        {
+            "download_count": 113639938,
+            "project": "itsdangerous"
+        },
+        {
+            "download_count": 111213522,
+            "project": "oauthlib"
+        },
+        {
+            "download_count": 106969182,
+            "project": "py"
+        },
+        {
+            "download_count": 106245186,
+            "project": "coverage"
+        },
+        {
+            "download_count": 104256236,
+            "project": "virtualenv"
+        },
+        {
+            "download_count": 102765613,
+            "project": "requests-oauthlib"
+        },
+        {
+            "download_count": 102590841,
+            "project": "psutil"
+        },
+        {
+            "download_count": 102589154,
+            "project": "ipaddress"
+        },
+        {
+            "download_count": 102291693,
+            "project": "jsonschema"
+        },
+        {
+            "download_count": 100560003,
+            "project": "scikit-learn"
+        },
+        {
+            "download_count": 99249602,
+            "project": "importlib-metadata"
+        },
+        {
+            "download_count": 95618798,
+            "project": "pygments"
+        },
+        {
+            "download_count": 94913658,
+            "project": "wcwidth"
+        },
+        {
+            "download_count": 93958133,
+            "project": "zipp"
+        },
+        {
+            "download_count": 93185870,
+            "project": "pyopenssl"
+        },
+        {
+            "download_count": 92353815,
+            "project": "pyjwt"
+        },
+        {
+            "download_count": 92018680,
+            "project": "mock"
+        },
+        {
+            "download_count": 90635179,
+            "project": "wrapt"
+        },
+        {
+            "download_count": 90150749,
+            "project": "google-cloud-storage"
+        },
+        {
+            "download_count": 86097386,
+            "project": "pillow"
+        },
+        {
+            "download_count": 85698334,
+            "project": "websocket-client"
+        },
+        {
+            "download_count": 84842257,
+            "project": "packaging"
+        },
+        {
+            "download_count": 84475934,
+            "project": "pbr"
+        },
+        {
+            "download_count": 82019683,
+            "project": "ipython"
+        },
+        {
+            "download_count": 81402313,
+            "project": "prompt-toolkit"
+        },
+        {
+            "download_count": 80731622,
+            "project": "matplotlib"
+        },
+        {
+            "download_count": 80443033,
+            "project": "httplib2"
+        },
+        {
+            "download_count": 78391981,
+            "project": "boto"
+        },
+        {
+            "download_count": 77428445,
+            "project": "lxml"
+        },
+        {
+            "download_count": 76599773,
+            "project": "docker"
+        },
+        {
+            "download_count": 75883487,
+            "project": "atomicwrites"
+        },
+        {
+            "download_count": 73114976,
+            "project": "google-resumable-media"
+        },
+        {
+            "download_count": 72286328,
+            "project": "sqlalchemy"
+        },
+        {
+            "download_count": 71355694,
+            "project": "argparse"
+        },
+        {
+            "download_count": 70247997,
+            "project": "kiwisolver"
+        },
+        {
+            "download_count": 70157529,
+            "project": "mccabe"
+        },
+        {
+            "download_count": 69616809,
+            "project": "configparser"
+        },
+        {
+            "download_count": 68080016,
+            "project": "multidict"
+        },
+        {
+            "download_count": 65738785,
+            "project": "tqdm"
+        },
+        {
+            "download_count": 65716434,
+            "project": "tornado"
+        },
+        {
+            "download_count": 65152549,
+            "project": "funcsigs"
+        },
+        {
+            "download_count": 64373372,
+            "project": "beautifulsoup4"
+        },
+        {
+            "download_count": 64241326,
+            "project": "paramiko"
+        },
+        {
+            "download_count": 63570436,
+            "project": "psycopg2"
+        },
+        {
+            "download_count": 63544025,
+            "project": "pyrsistent"
+        },
+        {
+            "download_count": 63424037,
+            "project": "typing"
+        },
+        {
+            "download_count": 62605787,
+            "project": "markdown"
+        },
+        {
+            "download_count": 62535342,
+            "project": "google-api-python-client"
+        },
+        {
+            "download_count": 61655343,
+            "project": "redis"
+        },
+        {
+            "download_count": 61634970,
+            "project": "bcrypt"
+        },
+        {
+            "download_count": 60696872,
+            "project": "pexpect"
+        },
+        {
+            "download_count": 60144339,
+            "project": "pycodestyle"
+        },
+        {
+            "download_count": 60125614,
+            "project": "absl-py"
+        },
+        {
+            "download_count": 59496247,
+            "project": "ptyprocess"
+        },
+        {
+            "download_count": 59137610,
+            "project": "aiohttp"
+        },
+        {
+            "download_count": 59052497,
+            "project": "entrypoints"
+        },
+        {
+            "download_count": 58282657,
+            "project": "oauth2client"
+        },
+        {
+            "download_count": 57910701,
+            "project": "docopt"
+        },
+        {
+            "download_count": 57238190,
+            "project": "pynacl"
+        },
+        {
+            "download_count": 55087716,
+            "project": "traitlets"
+        },
+        {
+            "download_count": 55005408,
+            "project": "tabulate"
+        },
+        {
+            "download_count": 54655331,
+            "project": "backports-functools-lru-cache"
+        },
+        {
+            "download_count": 54439203,
+            "project": "lazy-object-proxy"
+        },
+        {
+            "download_count": 54278961,
+            "project": "dill"
+        },
+        {
+            "download_count": 53875643,
+            "project": "ipython-genutils"
+        },
+        {
+            "download_count": 53414364,
+            "project": "pathlib2"
+        },
+        {
+            "download_count": 53208142,
+            "project": "isodate"
+        },
+        {
+            "download_count": 52918821,
+            "project": "azure-common"
+        },
+        {
+            "download_count": 52876560,
+            "project": "gunicorn"
+        },
+        {
+            "download_count": 52367394,
+            "project": "uritemplate"
+        },
+        {
+            "download_count": 52356165,
+            "project": "cycler"
+        },
+        {
+            "download_count": 52009177,
+            "project": "defusedxml"
+        },
+        {
+            "download_count": 51204829,
+            "project": "psycopg2-binary"
+        },
+        {
+            "download_count": 51194283,
+            "project": "h5py"
+        },
+        {
+            "download_count": 51011471,
+            "project": "termcolor"
+        },
+        {
+            "download_count": 50365341,
+            "project": "pickleshare"
+        },
+        {
+            "download_count": 50282815,
+            "project": "soupsieve"
+        },
+        {
+            "download_count": 50184503,
+            "project": "pyflakes"
+        },
+        {
+            "download_count": 49235593,
+            "project": "requests-toolbelt"
+        },
+        {
+            "download_count": 48265870,
+            "project": "google-cloud-bigquery"
+        },
+        {
+            "download_count": 47092132,
+            "project": "tensorboard"
+        },
+        {
+            "download_count": 46785233,
+            "project": "typed-ast"
+        },
+        {
+            "download_count": 46639206,
+            "project": "networkx"
+        },
+        {
+            "download_count": 45991420,
+            "project": "webencodings"
+        },
+        {
+            "download_count": 45685686,
+            "project": "async-timeout"
+        },
+        {
+            "download_count": 45449338,
+            "project": "tensorflow"
+        },
+        {
+            "download_count": 45435235,
+            "project": "gitpython"
+        },
+        {
+            "download_count": 45275021,
+            "project": "pymongo"
+        },
+        {
+            "download_count": 45205520,
+            "project": "azure-storage-blob"
+        },
+        {
+            "download_count": 45085736,
+            "project": "flake8"
+        },
+        {
+            "download_count": 44565799,
+            "project": "isort"
+        },
+        {
+            "download_count": 44491717,
+            "project": "contextlib2"
+        },
+        {
+            "download_count": 44308938,
+            "project": "scandir"
+        },
+        {
+            "download_count": 44265261,
+            "project": "functools32"
+        },
+        {
+            "download_count": 44039749,
+            "project": "gevent"
+        },
+        {
+            "download_count": 42987880,
+            "project": "pytest-cov"
+        },
+        {
+            "download_count": 42298933,
+            "project": "docker-pycreds"
+        },
+        {
+            "download_count": 42280978,
+            "project": "joblib"
+        },
+        {
+            "download_count": 42125807,
+            "project": "yarl"
+        },
+        {
+            "download_count": 42105718,
+            "project": "grpc-google-iam-v1"
+        },
+        {
+            "download_count": 42070985,
+            "project": "greenlet"
+        },
+        {
+            "download_count": 41679952,
+            "project": "zope-interface"
+        },
+        {
+            "download_count": 41396597,
+            "project": "pyzmq"
+        },
+        {
+            "download_count": 41281740,
+            "project": "pymysql"
+        },
+        {
+            "download_count": 41194733,
+            "project": "django"
+        },
+        {
+            "download_count": 41174124,
+            "project": "datadog"
+        },
+        {
+            "download_count": 41132868,
+            "project": "bleach"
+        },
+        {
+            "download_count": 40599053,
+            "project": "astroid"
+        },
+        {
+            "download_count": 40529351,
+            "project": "gitdb2"
+        },
+        {
+            "download_count": 40342805,
+            "project": "pylint"
+        },
+        {
+            "download_count": 40116789,
+            "project": "babel"
+        },
+        {
+            "download_count": 39847400,
+            "project": "azure-storage-common"
+        },
+        {
+            "download_count": 39689270,
+            "project": "keras-applications"
+        },
+        {
+            "download_count": 39395842,
+            "project": "keras-preprocessing"
+        },
+        {
+            "download_count": 39184540,
+            "project": "smmap2"
+        },
+        {
+            "download_count": 38876199,
+            "project": "opencv-python"
+        },
+        {
+            "download_count": 38852272,
+            "project": "subprocess32"
+        },
+        {
+            "download_count": 38836392,
+            "project": "msrest"
+        },
+        {
+            "download_count": 38732044,
+            "project": "google-auth-httplib2"
+        },
+        {
+            "download_count": 38166504,
+            "project": "parso"
+        },
+        {
+            "download_count": 37940669,
+            "project": "jedi"
+        },
+        {
+            "download_count": 37805943,
+            "project": "pycryptodome"
+        },
+        {
+            "download_count": 37739739,
+            "project": "astor"
+        },
+        {
+            "download_count": 37110085,
+            "project": "gast"
+        },
+        {
+            "download_count": 36881409,
+            "project": "retrying"
+        },
+        {
+            "download_count": 35451582,
+            "project": "elasticsearch"
+        },
+        {
+            "download_count": 35263938,
+            "project": "jsonpickle"
+        },
+        {
+            "download_count": 34975483,
+            "project": "sqlparse"
+        },
+        {
+            "download_count": 34879648,
+            "project": "pyarrow"
+        },
+        {
+            "download_count": 34858569,
+            "project": "ordereddict"
+        },
+        {
+            "download_count": 33824794,
+            "project": "scikit-image"
+        },
+        {
+            "download_count": 33775490,
+            "project": "pycrypto"
+        },
+        {
+            "download_count": 32742937,
+            "project": "appdirs"
+        },
+        {
+            "download_count": 32689782,
+            "project": "toml"
+        },
+        {
+            "download_count": 32684718,
+            "project": "adal"
+        },
+        {
+            "download_count": 32591485,
+            "project": "azure-nspkg"
+        },
+        {
+            "download_count": 32103427,
+            "project": "xlrd"
+        },
+        {
+            "download_count": 32000159,
+            "project": "jupyter-core"
+        },
+        {
+            "download_count": 31774601,
+            "project": "xmltodict"
+        },
+        {
+            "download_count": 31736336,
+            "project": "toolz"
+        },
+        {
+            "download_count": 31576642,
+            "project": "cached-property"
+        },
+        {
+            "download_count": 31550164,
+            "project": "prometheus-client"
+        },
+        {
+            "download_count": 31302562,
+            "project": "tensorflow-estimator"
+        },
+        {
+            "download_count": 31010564,
+            "project": "py4j"
+        },
+        {
+            "download_count": 30527374,
+            "project": "websockets"
+        },
+        {
+            "download_count": 30383292,
+            "project": "dnspython"
+        },
+        {
+            "download_count": 30245623,
+            "project": "nbformat"
+        },
+        {
+            "download_count": 30162734,
+            "project": "monotonic"
+        },
+        {
+            "download_count": 29978338,
+            "project": "nose"
+        },
+        {
+            "download_count": 29531870,
+            "project": "typing-extensions"
+        },
+        {
+            "download_count": 29443454,
+            "project": "sklearn"
+        },
+        {
+            "download_count": 29064516,
+            "project": "cloudpickle"
+        },
+        {
+            "download_count": 28794637,
+            "project": "pywavelets"
+        },
+        {
+            "download_count": 28710649,
+            "project": "pycryptodomex"
+        },
+        {
+            "download_count": 28533182,
+            "project": "ansible"
+        },
+        {
+            "download_count": 28501824,
+            "project": "singledispatch"
+        },
+        {
+            "download_count": 28281846,
+            "project": "ply"
+        },
+        {
+            "download_count": 27973857,
+            "project": "cython"
+        },
+        {
+            "download_count": 27913607,
+            "project": "mako"
+        },
+        {
+            "download_count": 27864029,
+            "project": "selenium"
+        },
+        {
+            "download_count": 27848508,
+            "project": "html5lib"
+        },
+        {
+            "download_count": 27745677,
+            "project": "simplegeneric"
+        },
+        {
+            "download_count": 27671952,
+            "project": "apache-beam"
+        },
+        {
+            "download_count": 27579084,
+            "project": "backcall"
+        },
+        {
+            "download_count": 26844011,
+            "project": "msgpack"
+        },
+        {
+            "download_count": 26331607,
+            "project": "dask"
+        },
+        {
+            "download_count": 26266166,
+            "project": "regex"
+        },
+        {
+            "download_count": 26239282,
+            "project": "ipykernel"
+        },
+        {
+            "download_count": 25952891,
+            "project": "ujson"
+        },
+        {
+            "download_count": 25898723,
+            "project": "mistune"
+        },
+        {
+            "download_count": 25796973,
+            "project": "backports-ssl-match-hostname"
+        },
+        {
+            "download_count": 25756543,
+            "project": "amqp"
+        },
+        {
+            "download_count": 25750485,
+            "project": "jupyter-client"
+        },
+        {
+            "download_count": 25701706,
+            "project": "docker-compose"
+        },
+        {
+            "download_count": 25315661,
+            "project": "kombu"
+        },
+        {
+            "download_count": 25281035,
+            "project": "ruamel-yaml"
+        },
+        {
+            "download_count": 25271754,
+            "project": "nltk"
+        },
+        {
+            "download_count": 25075126,
+            "project": "alembic"
+        },
+        {
+            "download_count": 24664889,
+            "project": "google-auth-oauthlib"
+        },
+        {
+            "download_count": 24499399,
+            "project": "raven"
+        },
+        {
+            "download_count": 24483899,
+            "project": "python-editor"
+        },
+        {
+            "download_count": 24388318,
+            "project": "sortedcontainers"
+        },
+        {
+            "download_count": 24375921,
+            "project": "nbconvert"
+        },
+        {
+            "download_count": 24045975,
+            "project": "thrift"
+        },
+        {
+            "download_count": 23835990,
+            "project": "notebook"
+        },
+        {
+            "download_count": 23817589,
+            "project": "hdfs"
+        },
+        {
+            "download_count": 23689627,
+            "project": "slackclient"
+        },
+        {
+            "download_count": 23619686,
+            "project": "testpath"
+        },
+        {
+            "download_count": 23536824,
+            "project": "s3fs"
+        },
+        {
+            "download_count": 23476069,
+            "project": "keras"
+        },
+        {
+            "download_count": 23364791,
+            "project": "celery"
+        },
+        {
+            "download_count": 23339282,
+            "project": "discord-py"
+        },
+        {
+            "download_count": 23232254,
+            "project": "billiard"
+        },
+        {
+            "download_count": 23210897,
+            "project": "filelock"
+        },
+        {
+            "download_count": 23187414,
+            "project": "snowballstemmer"
+        },
+        {
+            "download_count": 23088875,
+            "project": "unidecode"
+        },
+        {
+            "download_count": 23011985,
+            "project": "netaddr"
+        },
+        {
+            "download_count": 22993463,
+            "project": "pandocfilters"
+        },
+        {
+            "download_count": 22747435,
+            "project": "send2trash"
+        },
+        {
+            "download_count": 22715519,
+            "project": "terminado"
+        },
+        {
+            "download_count": 22431738,
+            "project": "backports-shutil-get-terminal-size"
+        },
+        {
+            "download_count": 22409669,
+            "project": "backports-weakref"
+        },
+        {
+            "download_count": 22231171,
+            "project": "msrestazure"
+        },
+        {
+            "download_count": 21906531,
+            "project": "sentry-sdk"
+        },
+        {
+            "download_count": 21817254,
+            "project": "ipywidgets"
+        },
+        {
+            "download_count": 21711592,
+            "project": "tzlocal"
+        },
+        {
+            "download_count": 21626474,
+            "project": "widgetsnbextension"
+        },
+        {
+            "download_count": 21533795,
+            "project": "ijson"
+        },
+        {
+            "download_count": 21335834,
+            "project": "mysqlclient"
+        },
+        {
+            "download_count": 20939369,
+            "project": "tox"
+        },
+        {
+            "download_count": 20733637,
+            "project": "lockfile"
+        },
+        {
+            "download_count": 20642115,
+            "project": "xgboost"
+        },
+        {
+            "download_count": 20630795,
+            "project": "arrow"
+        },
+        {
+            "download_count": 20559416,
+            "project": "vine"
+        },
+        {
+            "download_count": 20399386,
+            "project": "google-cloud-pubsub"
+        },
+        {
+            "download_count": 20372136,
+            "project": "sphinx"
+        },
+        {
+            "download_count": 20261684,
+            "project": "djangorestframework"
+        },
+        {
+            "download_count": 20222772,
+            "project": "openpyxl"
+        },
+        {
+            "download_count": 20101811,
+            "project": "ecdsa"
+        },
+        {
+            "download_count": 20081473,
+            "project": "xlsxwriter"
+        },
+        {
+            "download_count": 20021156,
+            "project": "snowflake-connector-python"
+        },
+        {
+            "download_count": 19972964,
+            "project": "pyhamcrest"
+        },
+        {
+            "download_count": 19806017,
+            "project": "google-cloud-firestore"
+        },
+        {
+            "download_count": 19717486,
+            "project": "google-cloud-datastore"
+        },
+        {
+            "download_count": 19580510,
+            "project": "google-pasta"
+        },
+        {
+            "download_count": 19191080,
+            "project": "qtconsole"
+        },
+        {
+            "download_count": 19179159,
+            "project": "bs4"
+        },
+        {
+            "download_count": 19098496,
+            "project": "text-unidecode"
+        },
+        {
+            "download_count": 19089305,
+            "project": "prettytable"
+        },
+        {
+            "download_count": 19018504,
+            "project": "jdcal"
+        },
+        {
+            "download_count": 19002384,
+            "project": "google-cloud-logging"
+        },
+        {
+            "download_count": 18962785,
+            "project": "backports-abc"
+        },
+        {
+            "download_count": 18918332,
+            "project": "jupyter-console"
+        },
+        {
+            "download_count": 18706905,
+            "project": "smart-open"
+        },
+        {
+            "download_count": 18670352,
+            "project": "alabaster"
+        },
+        {
+            "download_count": 18664013,
+            "project": "pyspark"
+        },
+        {
+            "download_count": 18533388,
+            "project": "jupyter"
+        },
+        {
+            "download_count": 18480060,
+            "project": "statsmodels"
+        },
+        {
+            "download_count": 18431746,
+            "project": "unicodecsv"
+        },
+        {
+            "download_count": 18351262,
+            "project": "dockerpty"
+        },
+        {
+            "download_count": 18303864,
+            "project": "shapely"
+        },
+        {
+            "download_count": 18289269,
+            "project": "twisted"
+        },
+        {
+            "download_count": 18288202,
+            "project": "hiredis"
+        },
+        {
+            "download_count": 18166239,
+            "project": "virtualenv-clone"
+        },
+        {
+            "download_count": 18139397,
+            "project": "imagesize"
+        },
+        {
+            "download_count": 18056871,
+            "project": "idna-ssl"
+        },
+        {
+            "download_count": 18052633,
+            "project": "fasteners"
+        },
+        {
+            "download_count": 18027552,
+            "project": "marshmallow"
+        },
+        {
+            "download_count": 18017517,
+            "project": "plotly"
+        },
+        {
+            "download_count": 17675962,
+            "project": "pytest-forked"
+        },
+        {
+            "download_count": 17577035,
+            "project": "texttable"
+        },
+        {
+            "download_count": 17473671,
+            "project": "et-xmlfile"
+        },
+        {
+            "download_count": 17113449,
+            "project": "kubernetes"
+        },
+        {
+            "download_count": 17078526,
+            "project": "incremental"
+        },
+        {
+            "download_count": 16916001,
+            "project": "iso8601"
+        },
+        {
+            "download_count": 16883776,
+            "project": "applicationinsights"
+        },
+        {
+            "download_count": 16840538,
+            "project": "google-cloud-bigtable"
+        },
+        {
+            "download_count": 16823748,
+            "project": "pathlib"
+        },
+        {
+            "download_count": 16759673,
+            "project": "constantly"
+        },
+        {
+            "download_count": 16691118,
+            "project": "automat"
+        },
+        {
+            "download_count": 16638971,
+            "project": "hyperlink"
+        },
+        {
+            "download_count": 16463703,
+            "project": "azure-mgmt-resource"
+        },
+        {
+            "download_count": 16410162,
+            "project": "croniter"
+        },
+        {
+            "download_count": 16390810,
+            "project": "python-jose"
+        },
+        {
+            "download_count": 16303498,
+            "project": "pipenv"
+        },
+        {
+            "download_count": 15658966,
+            "project": "pathspec"
+        },
+        {
+            "download_count": 15520321,
+            "project": "nvidia-ml-py3"
+        },
+        {
+            "download_count": 15364508,
+            "project": "execnet"
+        },
+        {
+            "download_count": 15314360,
+            "project": "aniso8601"
+        },
+        {
+            "download_count": 15247809,
+            "project": "python-magic"
+        },
+        {
+            "download_count": 15213240,
+            "project": "flask-cors"
+        },
+        {
+            "download_count": 15203298,
+            "project": "inflection"
+        },
+        {
+            "download_count": 15113541,
+            "project": "gym"
+        },
+        {
+            "download_count": 14999608,
+            "project": "mypy"
+        },
+        {
+            "download_count": 14927461,
+            "project": "azure-mgmt-storage"
+        },
+        {
+            "download_count": 14835131,
+            "project": "flask-sqlalchemy"
+        },
+        {
+            "download_count": 14822442,
+            "project": "service-identity"
+        },
+        {
+            "download_count": 14807088,
+            "project": "mozrunner"
+        },
+        {
+            "download_count": 14682178,
+            "project": "argcomplete"
+        },
+        {
+            "download_count": 14637155,
+            "project": "faker"
+        },
+        {
+            "download_count": 14609350,
+            "project": "uvloop"
+        },
+        {
+            "download_count": 14582824,
+            "project": "apipkg"
+        },
+        {
+            "download_count": 14479520,
+            "project": "stevedore"
+        },
+        {
+            "download_count": 14469933,
+            "project": "azure-storage-nspkg"
+        },
+        {
+            "download_count": 14356576,
+            "project": "ndg-httpsclient"
+        },
+        {
+            "download_count": 14226382,
+            "project": "pyserial"
+        },
+        {
+            "download_count": 14190037,
+            "project": "seaborn"
+        },
+        {
+            "download_count": 14151070,
+            "project": "distro"
+        },
+        {
+            "download_count": 14141290,
+            "project": "pytest-timeout"
+        },
+        {
+            "download_count": 14122087,
+            "project": "bz2file"
+        },
+        {
+            "download_count": 14098838,
+            "project": "patsy"
+        },
+        {
+            "download_count": 14036101,
+            "project": "cssselect"
+        },
+        {
+            "download_count": 13956987,
+            "project": "tenacity"
+        },
+        {
+            "download_count": 13927328,
+            "project": "tensorflow-metadata"
+        },
+        {
+            "download_count": 13870715,
+            "project": "graphviz"
+        },
+        {
+            "download_count": 13850391,
+            "project": "pydot"
+        },
+        {
+            "download_count": 13813387,
+            "project": "azure-mgmt-nspkg"
+        },
+        {
+            "download_count": 13809809,
+            "project": "avro"
+        },
+        {
+            "download_count": 13771055,
+            "project": "imageio"
+        },
+        {
+            "download_count": 13764392,
+            "project": "fastavro"
+        },
+        {
+            "download_count": 13686467,
+            "project": "gensim"
+        },
+        {
+            "download_count": 13643493,
+            "project": "trueskill"
+        },
+        {
+            "download_count": 13548711,
+            "project": "statsd"
+        },
+        {
+            "download_count": 13505330,
+            "project": "pytest-xdist"
+        },
+        {
+            "download_count": 13453212,
+            "project": "azure-mgmt-containerregistry"
+        },
+        {
+            "download_count": 13380441,
+            "project": "mypy-extensions"
+        },
+        {
+            "download_count": 13340370,
+            "project": "azure-mgmt-keyvault"
+        },
+        {
+            "download_count": 13259227,
+            "project": "ua-parser"
+        },
+        {
+            "download_count": 13241753,
+            "project": "configobj"
+        },
+        {
+            "download_count": 13193523,
+            "project": "mozlog"
+        },
+        {
+            "download_count": 13161090,
+            "project": "fuzzywuzzy"
+        },
+        {
+            "download_count": 13153967,
+            "project": "google-gax"
+        },
+        {
+            "download_count": 12999681,
+            "project": "responses"
+        },
+        {
+            "download_count": 12946906,
+            "project": "aliyun-python-sdk-core"
+        },
+        {
+            "download_count": 12863346,
+            "project": "azure-datalake-store"
+        },
+        {
+            "download_count": 12839810,
+            "project": "pytest-mock"
+        },
+        {
+            "download_count": 12835022,
+            "project": "aliyun-python-sdk-ecs"
+        },
+        {
+            "download_count": 12816025,
+            "project": "elasticsearch-dsl"
+        },
+        {
+            "download_count": 12792645,
+            "project": "azure-mgmt-authorization"
+        },
+        {
+            "download_count": 12780433,
+            "project": "google-apitools"
+        },
+        {
+            "download_count": 12772525,
+            "project": "python-daemon"
+        },
+        {
+            "download_count": 12766382,
+            "project": "azure-graphrbac"
+        },
+        {
+            "download_count": 12561149,
+            "project": "netifaces"
+        },
+        {
+            "download_count": 12538305,
+            "project": "s3cmd"
+        },
+        {
+            "download_count": 12534903,
+            "project": "python-json-logger"
+        },
+        {
+            "download_count": 12484719,
+            "project": "aliyunsdkcore"
+        },
+        {
+            "download_count": 12406280,
+            "project": "manhole"
+        },
+        {
+            "download_count": 12261609,
+            "project": "hvac"
+        },
+        {
+            "download_count": 12253367,
+            "project": "humanfriendly"
+        },
+        {
+            "download_count": 12246930,
+            "project": "ipdb"
+        },
+        {
+            "download_count": 12209179,
+            "project": "deepdiff"
+        },
+        {
+            "download_count": 12207990,
+            "project": "freezegun"
+        },
+        {
+            "download_count": 12098216,
+            "project": "maxminddb"
+        },
+        {
+            "download_count": 12042231,
+            "project": "uwsgi"
+        },
+        {
+            "download_count": 11947362,
+            "project": "pykube"
+        },
+        {
+            "download_count": 11860617,
+            "project": "appnope"
+        },
+        {
+            "download_count": 11805813,
+            "project": "databricks-cli"
+        },
+        {
+            "download_count": 11788737,
+            "project": "python-levenshtein"
+        },
+        {
+            "download_count": 11778504,
+            "project": "tensorflow-transform"
+        },
+        {
+            "download_count": 11612558,
+            "project": "tldextract"
+        },
+        {
+            "download_count": 11569388,
+            "project": "pyodbc"
+        },
+        {
+            "download_count": 11561349,
+            "project": "autopep8"
+        },
+        {
+            "download_count": 11432600,
+            "project": "pendulum"
+        },
+        {
+            "download_count": 11383453,
+            "project": "newrelic"
+        },
+        {
+            "download_count": 11361327,
+            "project": "python-dotenv"
+        },
+        {
+            "download_count": 11334209,
+            "project": "pytzdata"
+        },
+        {
+            "download_count": 11270038,
+            "project": "wtforms"
+        },
+        {
+            "download_count": 11224152,
+            "project": "pytest-runner"
+        },
+        {
+            "download_count": 11104163,
+            "project": "libtmux"
+        },
+        {
+            "download_count": 11089587,
+            "project": "zope-deprecation"
+        },
+        {
+            "download_count": 11017907,
+            "project": "jsonpointer"
+        },
+        {
+            "download_count": 10994575,
+            "project": "webob"
+        },
+        {
+            "download_count": 10990219,
+            "project": "retry"
+        },
+        {
+            "download_count": 10987260,
+            "project": "blinker"
+        },
+        {
+            "download_count": 10973921,
+            "project": "semantic-version"
+        },
+        {
+            "download_count": 10843556,
+            "project": "requests-file"
+        },
+        {
+            "download_count": 10781388,
+            "project": "graphql-core"
+        },
+        {
+            "download_count": 10728518,
+            "project": "blessings"
+        },
+        {
+            "download_count": 10716974,
+            "project": "backoff"
+        },
+        {
+            "download_count": 10695298,
+            "project": "black"
+        },
+        {
+            "download_count": 10686016,
+            "project": "geopy"
+        },
+        {
+            "download_count": 10629161,
+            "project": "google-cloud"
+        },
+        {
+            "download_count": 10551343,
+            "project": "bottle"
+        },
+        {
+            "download_count": 10527245,
+            "project": "pep8"
+        },
+        {
+            "download_count": 10511519,
+            "project": "geoip2"
+        },
+        {
+            "download_count": 10451332,
+            "project": "grpcio-tools"
+        },
+        {
+            "download_count": 10410102,
+            "project": "traceback2"
+        },
+        {
+            "download_count": 10386312,
+            "project": "linecache2"
+        },
+        {
+            "download_count": 10351287,
+            "project": "django-extensions"
+        },
+        {
+            "download_count": 10318239,
+            "project": "sphinxcontrib-websupport"
+        },
+        {
+            "download_count": 10239847,
+            "project": "unittest2"
+        },
+        {
+            "download_count": 10187032,
+            "project": "fsspec"
+        },
+        {
+            "download_count": 10146539,
+            "project": "django-cors-headers"
+        },
+        {
+            "download_count": 10119472,
+            "project": "pkginfo"
+        },
+        {
+            "download_count": 10077843,
+            "project": "django-filter"
+        },
+        {
+            "download_count": 10057055,
+            "project": "secretstorage"
+        },
+        {
+            "download_count": 10050204,
+            "project": "user-agents"
+        },
+        {
+            "download_count": 10001744,
+            "project": "configargparse"
+        },
+        {
+            "download_count": 9957349,
+            "project": "scp"
+        },
+        {
+            "download_count": 9942530,
+            "project": "azure-devops"
+        },
+        {
+            "download_count": 9938936,
+            "project": "azure-mgmt-compute"
+        },
+        {
+            "download_count": 9934159,
+            "project": "azure-mgmt-network"
+        },
+        {
+            "download_count": 9904711,
+            "project": "msgpack-python"
+        },
+        {
+            "download_count": 9827614,
+            "project": "azure-mgmt-datalake-nspkg"
+        },
+        {
+            "download_count": 9735081,
+            "project": "azure-mgmt-datalake-store"
+        },
+        {
+            "download_count": 9706197,
+            "project": "google-cloud-monitoring"
+        },
+        {
+            "download_count": 9674967,
+            "project": "mpi4py"
+        },
+        {
+            "download_count": 9609045,
+            "project": "mozdevice"
+        },
+        {
+            "download_count": 9561083,
+            "project": "azure-keyvault"
+        },
+        {
+            "download_count": 9523786,
+            "project": "pysocks"
+        },
+        {
+            "download_count": 9521848,
+            "project": "azure-cli"
+        },
+        {
+            "download_count": 9493349,
+            "project": "jsondiff"
+        },
+        {
+            "download_count": 9467938,
+            "project": "cherrypy"
+        },
+        {
+            "download_count": 9467625,
+            "project": "pika"
+        },
+        {
+            "download_count": 9410911,
+            "project": "parsedatetime"
+        },
+        {
+            "download_count": 9399772,
+            "project": "azure-mgmt-batch"
+        },
+        {
+            "download_count": 9376391,
+            "project": "lightgbm"
+        },
+        {
+            "download_count": 9375734,
+            "project": "querystring-parser"
+        },
+        {
+            "download_count": 9342152,
+            "project": "pyrfc3339"
+        },
+        {
+            "download_count": 9319192,
+            "project": "argh"
+        },
+        {
+            "download_count": 9315946,
+            "project": "pyproj"
+        },
+        {
+            "download_count": 9307163,
+            "project": "mozprofile"
+        },
+        {
+            "download_count": 9301729,
+            "project": "pycurl"
+        },
+        {
+            "download_count": 9288555,
+            "project": "dictdiffer"
+        },
+        {
+            "download_count": 9274785,
+            "project": "flask-wtf"
+        },
+        {
+            "download_count": 9274704,
+            "project": "mysql-connector-python"
+        },
+        {
+            "download_count": 9272854,
+            "project": "cheroot"
+        },
+        {
+            "download_count": 9261620,
+            "project": "codecov"
+        },
+        {
+            "download_count": 9224842,
+            "project": "mozinfo"
+        },
+        {
+            "download_count": 9222371,
+            "project": "jsonpatch"
+        },
+        {
+            "download_count": 9217176,
+            "project": "glob2"
+        },
+        {
+            "download_count": 9059754,
+            "project": "azure-batch"
+        },
+        {
+            "download_count": 9057979,
+            "project": "crcmod"
+        },
+        {
+            "download_count": 9033939,
+            "project": "jaraco-functools"
+        },
+        {
+            "download_count": 8995380,
+            "project": "tempora"
+        },
+        {
+            "download_count": 8959399,
+            "project": "azure-mgmt-dns"
+        },
+        {
+            "download_count": 8945640,
+            "project": "pyhive"
+        },
+        {
+            "download_count": 8906609,
+            "project": "azure-mgmt-rdbms"
+        },
+        {
+            "download_count": 8891960,
+            "project": "azure-mgmt-sql"
+        },
+        {
+            "download_count": 8888437,
+            "project": "mozprocess"
+        },
+        {
+            "download_count": 8874708,
+            "project": "portend"
+        },
+        {
+            "download_count": 8853246,
+            "project": "geographiclib"
+        },
+        {
+            "download_count": 8803957,
+            "project": "azure-mgmt-web"
+        },
+        {
+            "download_count": 8753999,
+            "project": "deprecated"
+        },
+        {
+            "download_count": 8739361,
+            "project": "munch"
+        },
+        {
+            "download_count": 8687617,
+            "project": "jpype1"
+        },
+        {
+            "download_count": 8659485,
+            "project": "pysftp"
+        },
+        {
+            "download_count": 8648248,
+            "project": "watchdog"
+        },
+        {
+            "download_count": 8644057,
+            "project": "ruamel-yaml-clib"
+        },
+        {
+            "download_count": 8628293,
+            "project": "mlflow"
+        },
+        {
+            "download_count": 8605163,
+            "project": "kafka-python"
+        },
+        {
+            "download_count": 8593398,
+            "project": "google"
+        },
+        {
+            "download_count": 8591157,
+            "project": "gapic-google-cloud-logging-v2"
+        },
+        {
+            "download_count": 8565550,
+            "project": "mujoco-py"
+        },
+        {
+            "download_count": 8557624,
+            "project": "zeep"
+        },
+        {
+            "download_count": 8557527,
+            "project": "proto-google-cloud-logging-v2"
+        },
+        {
+            "download_count": 8555221,
+            "project": "azure-storage"
+        },
+        {
+            "download_count": 8548889,
+            "project": "pathtools"
+        },
+        {
+            "download_count": 8547554,
+            "project": "django-storages"
+        },
+        {
+            "download_count": 8493425,
+            "project": "spacy"
+        },
+        {
+            "download_count": 8479997,
+            "project": "pytest-instafail"
+        },
+        {
+            "download_count": 8476835,
+            "project": "thinc"
+        },
+        {
+            "download_count": 8468171,
+            "project": "factory-boy"
+        },
+        {
+            "download_count": 8466351,
+            "project": "preshed"
+        },
+        {
+            "download_count": 8433752,
+            "project": "google-cloud-spanner"
+        },
+        {
+            "download_count": 8433718,
+            "project": "simpleflock"
+        },
+        {
+            "download_count": 8402292,
+            "project": "cymem"
+        },
+        {
+            "download_count": 8374248,
+            "project": "azure-storage-queue"
+        },
+        {
+            "download_count": 8367380,
+            "project": "azure-mgmt-monitor"
+        },
+        {
+            "download_count": 8361234,
+            "project": "murmurhash"
+        },
+        {
+            "download_count": 8360473,
+            "project": "jeepney"
+        },
+        {
+            "download_count": 8358801,
+            "project": "azure-mgmt-containerservice"
+        },
+        {
+            "download_count": 8334989,
+            "project": "zc-lockfile"
+        },
+        {
+            "download_count": 8334854,
+            "project": "numpy-stl"
+        },
+        {
+            "download_count": 8334779,
+            "project": "requests-mock"
+        },
+        {
+            "download_count": 8331547,
+            "project": "tensorflow-serving-api"
+        },
+        {
+            "download_count": 8316359,
+            "project": "passlib"
+        },
+        {
+            "download_count": 8257864,
+            "project": "aws-xray-sdk"
+        },
+        {
+            "download_count": 8253117,
+            "project": "waitress"
+        },
+        {
+            "download_count": 8213115,
+            "project": "azure-mgmt-containerinstance"
+        },
+        {
+            "download_count": 8194190,
+            "project": "oauth"
+        },
+        {
+            "download_count": 8192420,
+            "project": "azure-mgmt-redis"
+        },
+        {
+            "download_count": 8182626,
+            "project": "azure-mgmt-cognitiveservices"
+        },
+        {
+            "download_count": 8169888,
+            "project": "fabric"
+        },
+        {
+            "download_count": 8160603,
+            "project": "sphinx-rtd-theme"
+        },
+        {
+            "download_count": 8151766,
+            "project": "azure-mgmt-trafficmanager"
+        },
+        {
+            "download_count": 8146427,
+            "project": "pystache"
+        },
+        {
+            "download_count": 8142774,
+            "project": "python-slugify"
+        },
+        {
+            "download_count": 8104254,
+            "project": "azure-mgmt-devtestlabs"
+        },
+        {
+            "download_count": 8101969,
+            "project": "sh"
+        },
+        {
+            "download_count": 8100079,
+            "project": "azure-mgmt-cdn"
+        },
+        {
+            "download_count": 8084499,
+            "project": "azure-mgmt-datalake-analytics"
+        },
+        {
+            "download_count": 8068973,
+            "project": "pyaml"
+        },
+        {
+            "download_count": 8068659,
+            "project": "azure-mgmt-iothub"
+        },
+        {
+            "download_count": 8045085,
+            "project": "azure-mgmt-cosmosdb"
+        },
+        {
+            "download_count": 8043637,
+            "project": "jira"
+        },
+        {
+            "download_count": 8016426,
+            "project": "mozterm"
+        },
+        {
+            "download_count": 8000597,
+            "project": "flask-login"
+        },
+        {
+            "download_count": 7983143,
+            "project": "pycairo"
+        },
+        {
+            "download_count": 7981647,
+            "project": "invoke"
+        },
+        {
+            "download_count": 7969857,
+            "project": "pyxdg"
+        },
+        {
+            "download_count": 7896477,
+            "project": "flask-restful"
+        },
+        {
+            "download_count": 7892342,
+            "project": "pymssql"
+        },
+        {
+            "download_count": 7872871,
+            "project": "plac"
+        },
+        {
+            "download_count": 7871712,
+            "project": "colorlog"
+        },
+        {
+            "download_count": 7841110,
+            "project": "stripe"
+        },
+        {
+            "download_count": 7795667,
+            "project": "pygobject"
+        },
+        {
+            "download_count": 7793570,
+            "project": "vsts"
+        },
+        {
+            "download_count": 7786931,
+            "project": "azure-mgmt-applicationinsights"
+        },
+        {
+            "download_count": 7755436,
+            "project": "azure-cosmosdb-table"
+        },
+        {
+            "download_count": 7751414,
+            "project": "zope-event"
+        },
+        {
+            "download_count": 7745717,
+            "project": "gspread"
+        },
+        {
+            "download_count": 7724172,
+            "project": "phonenumbers"
+        },
+        {
+            "download_count": 7698105,
+            "project": "torch"
+        },
+        {
+            "download_count": 7677484,
+            "project": "django-debug-toolbar"
+        },
+        {
+            "download_count": 7669014,
+            "project": "azure-mgmt-eventhub"
+        },
+        {
+            "download_count": 7653695,
+            "project": "sendgrid"
+        },
+        {
+            "download_count": 7621120,
+            "project": "azure-core"
+        },
+        {
+            "download_count": 7618409,
+            "project": "requests-aws4auth"
+        },
+        {
+            "download_count": 7606270,
+            "project": "zope-component"
+        },
+        {
+            "download_count": 7602809,
+            "project": "azure-mgmt-marketplaceordering"
+        },
+        {
+            "download_count": 7589910,
+            "project": "holidays"
+        },
+        {
+            "download_count": 7568947,
+            "project": "azure-cosmosdb-nspkg"
+        },
+        {
+            "download_count": 7560913,
+            "project": "azure-mgmt-servicebus"
+        },
+        {
+            "download_count": 7555791,
+            "project": "azure-mgmt-loganalytics"
+        },
+        {
+            "download_count": 7533328,
+            "project": "azure-mgmt-recoveryservices"
+        },
+        {
+            "download_count": 7532133,
+            "project": "azure-mgmt-recoveryservicesbackup"
+        },
+        {
+            "download_count": 7519987,
+            "project": "azure-mgmt-eventgrid"
+        },
+        {
+            "download_count": 7511851,
+            "project": "simple-salesforce"
+        },
+        {
+            "download_count": 7493612,
+            "project": "azure-mgmt-reservations"
+        },
+        {
+            "download_count": 7490404,
+            "project": "mysql-python"
+        },
+        {
+            "download_count": 7471849,
+            "project": "azure-mgmt-advisor"
+        },
+        {
+            "download_count": 7470909,
+            "project": "azure-mgmt-media"
+        },
+        {
+            "download_count": 7461600,
+            "project": "backports-tempfile"
+        },
+        {
+            "download_count": 7452831,
+            "project": "azure-mgmt-msi"
+        },
+        {
+            "download_count": 7444403,
+            "project": "azure-mgmt-batchai"
+        },
+        {
+            "download_count": 7443190,
+            "project": "azure-mgmt-iothubprovisioningservices"
+        },
+        {
+            "download_count": 7427082,
+            "project": "azure-mgmt-search"
+        },
+        {
+            "download_count": 7426073,
+            "project": "azure-mgmt-consumption"
+        },
+        {
+            "download_count": 7421118,
+            "project": "azure-mgmt-servicefabric"
+        },
+        {
+            "download_count": 7420661,
+            "project": "azure-mgmt-billing"
+        },
+        {
+            "download_count": 7410977,
+            "project": "semver"
+        },
+        {
+            "download_count": 7399599,
+            "project": "w3lib"
+        },
+        {
+            "download_count": 7377445,
+            "project": "supervisor"
+        },
+        {
+            "download_count": 7371140,
+            "project": "moto"
+        },
+        {
+            "download_count": 7360517,
+            "project": "josepy"
+        },
+        {
+            "download_count": 7359916,
+            "project": "azure-mgmt-relay"
+        },
+        {
+            "download_count": 7325634,
+            "project": "pandas-gbq"
+        },
+        {
+            "download_count": 7317868,
+            "project": "acme"
+        },
+        {
+            "download_count": 7308144,
+            "project": "azure-servicebus"
+        },
+        {
+            "download_count": 7271321,
+            "project": "xlwt"
+        },
+        {
+            "download_count": 7270699,
+            "project": "structlog"
+        },
+        {
+            "download_count": 7268987,
+            "project": "sphinxcontrib-serializinghtml"
+        },
+        {
+            "download_count": 7268175,
+            "project": "sphinxcontrib-htmlhelp"
+        },
+        {
+            "download_count": 7251725,
+            "project": "keyring"
+        },
+        {
+            "download_count": 7251674,
+            "project": "sphinxcontrib-qthelp"
+        },
+        {
+            "download_count": 7251256,
+            "project": "sphinxcontrib-devhelp"
+        },
+        {
+            "download_count": 7251076,
+            "project": "sphinxcontrib-applehelp"
+        },
+        {
+            "download_count": 7250627,
+            "project": "sphinxcontrib-jsmath"
+        },
+        {
+            "download_count": 7239285,
+            "project": "pytest-django"
+        },
+        {
+            "download_count": 7236146,
+            "project": "voluptuous"
+        },
+        {
+            "download_count": 7235602,
+            "project": "llvmlite"
+        },
+        {
+            "download_count": 7112734,
+            "project": "theano"
+        },
+        {
+            "download_count": 7042677,
+            "project": "numba"
+        },
+        {
+            "download_count": 7038235,
+            "project": "shellingham"
+        },
+        {
+            "download_count": 7023740,
+            "project": "pydocumentdb"
+        },
+        {
+            "download_count": 7014759,
+            "project": "parse"
+        },
+        {
+            "download_count": 7011858,
+            "project": "coloredlogs"
+        },
+        {
+            "download_count": 6991011,
+            "project": "certbot"
+        },
+        {
+            "download_count": 6989202,
+            "project": "google-cloud-vision"
+        },
+        {
+            "download_count": 6983443,
+            "project": "influxdb"
+        },
+        {
+            "download_count": 6981795,
+            "project": "azure-mgmt-managementgroups"
+        },
+        {
+            "download_count": 6962527,
+            "project": "azure-mgmt-datamigration"
+        },
+        {
+            "download_count": 6935874,
+            "project": "cheetah"
+        },
+        {
+            "download_count": 6931267,
+            "project": "azure-mgmt-policyinsights"
+        },
+        {
+            "download_count": 6910342,
+            "project": "python-augeas"
+        },
+        {
+            "download_count": 6902895,
+            "project": "tblib"
+        },
+        {
+            "download_count": 6885492,
+            "project": "azure-mgmt-iotcentral"
+        },
+        {
+            "download_count": 6882533,
+            "project": "azure-mgmt-signalr"
+        },
+        {
+            "download_count": 6879787,
+            "project": "instana"
+        },
+        {
+            "download_count": 6848658,
+            "project": "uptime"
+        },
+        {
+            "download_count": 6823328,
+            "project": "azure-mgmt-maps"
+        },
+        {
+            "download_count": 6811121,
+            "project": "coreapi"
+        },
+        {
+            "download_count": 6805884,
+            "project": "setproctitle"
+        },
+        {
+            "download_count": 6803339,
+            "project": "pymemcache"
+        },
+        {
+            "download_count": 6790921,
+            "project": "opt-einsum"
+        },
+        {
+            "download_count": 6746204,
+            "project": "coreschema"
+        },
+        {
+            "download_count": 6733204,
+            "project": "dicttoxml"
+        },
+        {
+            "download_count": 6709540,
+            "project": "python-mimeparse"
+        },
+        {
+            "download_count": 6686487,
+            "project": "letsencrypt"
+        },
+        {
+            "download_count": 6671209,
+            "project": "pypdf2"
+        },
+        {
+            "download_count": 6659143,
+            "project": "certbot-apache"
+        },
+        {
+            "download_count": 6650051,
+            "project": "feedparser"
+        },
+        {
+            "download_count": 6629341,
+            "project": "itypes"
+        },
+        {
+            "download_count": 6607528,
+            "project": "datetime"
+        },
+        {
+            "download_count": 6595896,
+            "project": "pyglet"
+        },
+        {
+            "download_count": 6565703,
+            "project": "pywin32"
+        },
+        {
+            "download_count": 6555587,
+            "project": "cachecontrol"
+        },
+        {
+            "download_count": 6537738,
+            "project": "whichcraft"
+        },
+        {
+            "download_count": 6493687,
+            "project": "repoze-lru"
+        },
+        {
+            "download_count": 6483589,
+            "project": "opentracing"
+        },
+        {
+            "download_count": 6471332,
+            "project": "yapf"
+        },
+        {
+            "download_count": 6470521,
+            "project": "reportlab"
+        },
+        {
+            "download_count": 6454108,
+            "project": "pyperclip"
+        },
+        {
+            "download_count": 6427226,
+            "project": "sasl"
+        },
+        {
+            "download_count": 6416154,
+            "project": "pydocstyle"
+        },
+        {
+            "download_count": 6412179,
+            "project": "ldap3"
+        },
+        {
+            "download_count": 6364528,
+            "project": "python-http-client"
+        },
+        {
+            "download_count": 6363103,
+            "project": "pycountry"
+        },
+        {
+            "download_count": 6348755,
+            "project": "azure-servicemanagement-legacy"
+        },
+        {
+            "download_count": 6348419,
+            "project": "certbot-nginx"
+        },
+        {
+            "download_count": 6347386,
+            "project": "python-gnupg"
+        },
+        {
+            "download_count": 6338642,
+            "project": "suds-jurko"
+        },
+        {
+            "download_count": 6325028,
+            "project": "promise"
+        },
+        {
+            "download_count": 6321828,
+            "project": "twine"
+        },
+        {
+            "download_count": 6310843,
+            "project": "django-redis"
+        },
+        {
+            "download_count": 6310630,
+            "project": "redis-py-cluster"
+        },
+        {
+            "download_count": 6301931,
+            "project": "mysql-connector"
+        },
+        {
+            "download_count": 6295377,
+            "project": "python-jenkins"
+        },
+        {
+            "download_count": 6275920,
+            "project": "azure-servicefabric"
+        },
+        {
+            "download_count": 6251258,
+            "project": "expiringdict"
+        },
+        {
+            "download_count": 6237744,
+            "project": "pyvcf"
+        },
+        {
+            "download_count": 6217846,
+            "project": "watchtower"
+        },
+        {
+            "download_count": 6191358,
+            "project": "poyo"
+        },
+        {
+            "download_count": 6177944,
+            "project": "html2text"
+        },
+        {
+            "download_count": 6167605,
+            "project": "binaryornot"
+        },
+        {
+            "download_count": 6156388,
+            "project": "azure-mgmt"
+        },
+        {
+            "download_count": 6141630,
+            "project": "bokeh"
+        },
+        {
+            "download_count": 6124335,
+            "project": "python3-openid"
+        },
+        {
+            "download_count": 6124110,
+            "project": "azure-storage-file"
+        },
+        {
+            "download_count": 6123086,
+            "project": "oscrypto"
+        },
+        {
+            "download_count": 6089609,
+            "project": "kazoo"
+        },
+        {
+            "download_count": 6087309,
+            "project": "cookiecutter"
+        },
+        {
+            "download_count": 6069231,
+            "project": "jinja2-time"
+        },
+        {
+            "download_count": 6060397,
+            "project": "azure"
+        },
+        {
+            "download_count": 6048114,
+            "project": "google-cloud-translate"
+        },
+        {
+            "download_count": 6041366,
+            "project": "humanize"
+        },
+        {
+            "download_count": 6039221,
+            "project": "numexpr"
+        },
+        {
+            "download_count": 6020894,
+            "project": "twilio"
+        },
+        {
+            "download_count": 6012401,
+            "project": "cerberus"
+        },
+        {
+            "download_count": 6012147,
+            "project": "azure-mgmt-logic"
+        },
+        {
+            "download_count": 6006198,
+            "project": "google-cloud-language"
+        },
+        {
+            "download_count": 6003966,
+            "project": "nodeenv"
+        },
+        {
+            "download_count": 5973514,
+            "project": "azure-mgmt-scheduler"
+        },
+        {
+            "download_count": 5943411,
+            "project": "backports-csv"
+        },
+        {
+            "download_count": 5918171,
+            "project": "multi-key-dict"
+        },
+        {
+            "download_count": 5880962,
+            "project": "python-memcached"
+        },
+        {
+            "download_count": 5873333,
+            "project": "srsly"
+        },
+        {
+            "download_count": 5867465,
+            "project": "cx-oracle"
+        },
+        {
+            "download_count": 5859924,
+            "project": "blis"
+        },
+        {
+            "download_count": 5855262,
+            "project": "azure-mgmt-datafactory"
+        },
+        {
+            "download_count": 5829317,
+            "project": "identify"
+        },
+        {
+            "download_count": 5817248,
+            "project": "pydata-google-auth"
+        },
+        {
+            "download_count": 5816751,
+            "project": "parsel"
+        },
+        {
+            "download_count": 5808925,
+            "project": "setuptools-scm"
+        },
+        {
+            "download_count": 5798570,
+            "project": "confluent-kafka"
+        },
+        {
+            "download_count": 5780362,
+            "project": "lunardate"
+        },
+        {
+            "download_count": 5770962,
+            "project": "eventlet"
+        },
+        {
+            "download_count": 5764369,
+            "project": "webtest"
+        },
+        {
+            "download_count": 5762114,
+            "project": "sqlalchemy-utils"
+        },
+        {
+            "download_count": 5748385,
+            "project": "pre-commit"
+        },
+        {
+            "download_count": 5744591,
+            "project": "flask-restplus"
+        },
+        {
+            "download_count": 5741800,
+            "project": "google-cloud-error-reporting"
+        },
+        {
+            "download_count": 5727692,
+            "project": "gapic-google-cloud-datastore-v1"
+        },
+        {
+            "download_count": 5726258,
+            "project": "google-cloud-speech"
+        },
+        {
+            "download_count": 5696390,
+            "project": "tensorflow-gpu"
+        },
+        {
+            "download_count": 5671626,
+            "project": "youtube-dl"
+        },
+        {
+            "download_count": 5669862,
+            "project": "zope-proxy"
+        },
+        {
+            "download_count": 5668657,
+            "project": "zope-hookable"
+        },
+        {
+            "download_count": 5666674,
+            "project": "aspy-yaml"
+        },
+        {
+            "download_count": 5665846,
+            "project": "pystan"
+        },
+        {
+            "download_count": 5658876,
+            "project": "meld3"
+        },
+        {
+            "download_count": 5657136,
+            "project": "zope-deferredimport"
+        },
+        {
+            "download_count": 5646525,
+            "project": "altgraph"
+        },
+        {
+            "download_count": 5638012,
+            "project": "yamllint"
+        },
+        {
+            "download_count": 5627465,
+            "project": "pydispatcher"
+        },
+        {
+            "download_count": 5598597,
+            "project": "pytest-html"
+        },
+        {
+            "download_count": 5589472,
+            "project": "queuelib"
+        },
+        {
+            "download_count": 5580580,
+            "project": "mpmath"
+        },
+        {
+            "download_count": 5556096,
+            "project": "wasabi"
+        },
+        {
+            "download_count": 5538810,
+            "project": "dateparser"
+        },
+        {
+            "download_count": 5522745,
+            "project": "azure-mgmt-subscription"
+        },
+        {
+            "download_count": 5500243,
+            "project": "flask-migrate"
+        },
+        {
+            "download_count": 5494861,
+            "project": "cfgv"
+        },
+        {
+            "download_count": 5490908,
+            "project": "azure-mgmt-notificationhubs"
+        },
+        {
+            "download_count": 5479229,
+            "project": "azure-mgmt-managementpartner"
+        },
+        {
+            "download_count": 5477766,
+            "project": "azure-mgmt-powerbiembedded"
+        },
+        {
+            "download_count": 5471458,
+            "project": "azure-eventgrid"
+        },
+        {
+            "download_count": 5469115,
+            "project": "azure-mgmt-commerce"
+        },
+        {
+            "download_count": 5465959,
+            "project": "azure-mgmt-machinelearningcompute"
+        },
+        {
+            "download_count": 5462201,
+            "project": "readme-renderer"
+        },
+        {
+            "download_count": 5461957,
+            "project": "azure-mgmt-hanaonazure"
+        },
+        {
+            "download_count": 5447652,
+            "project": "rfc3986"
+        },
+        {
+            "download_count": 5440586,
+            "project": "scrapy"
+        },
+        {
+            "download_count": 5434695,
+            "project": "aenum"
+        },
+        {
+            "download_count": 5420091,
+            "project": "anyjson"
+        },
+        {
+            "download_count": 5407106,
+            "project": "proto-google-cloud-datastore-v1"
+        },
+        {
+            "download_count": 5387258,
+            "project": "sympy"
+        },
+        {
+            "download_count": 5374203,
+            "project": "pygithub"
+        },
+        {
+            "download_count": 5373585,
+            "project": "pytest-metadata"
+        },
+        {
+            "download_count": 5340852,
+            "project": "paho-mqtt"
+        },
+        {
+            "download_count": 5335035,
+            "project": "multiprocess"
+        },
+        {
+            "download_count": 5333251,
+            "project": "googledatastore"
+        },
+        {
+            "download_count": 5328607,
+            "project": "phoenixdb"
+        },
+        {
+            "download_count": 5322559,
+            "project": "nose-exclude"
+        },
+        {
+            "download_count": 5309246,
+            "project": "importlib-resources"
+        },
+        {
+            "download_count": 5299450,
+            "project": "cookies"
+        },
+        {
+            "download_count": 5277019,
+            "project": "tensorflow-tensorboard"
+        },
+        {
+            "download_count": 5255084,
+            "project": "thrift-sasl"
+        },
+        {
+            "download_count": 5249244,
+            "project": "jsonpath-rw"
+        },
+        {
+            "download_count": 5245636,
+            "project": "oslo-i18n"
+        },
+        {
+            "download_count": 5245466,
+            "project": "s2sphere"
+        },
+        {
+            "download_count": 5245010,
+            "project": "whitenoise"
+        },
+        {
+            "download_count": 5236181,
+            "project": "google-cloud-dns"
+        },
+        {
+            "download_count": 5223390,
+            "project": "aws-sam-translator"
+        },
+        {
+            "download_count": 5213027,
+            "project": "slacker"
+        },
+        {
+            "download_count": 5165706,
+            "project": "hypothesis"
+        },
+        {
+            "download_count": 5155283,
+            "project": "google-cloud-resource-manager"
+        },
+        {
+            "download_count": 5152438,
+            "project": "debtcollector"
+        },
+        {
+            "download_count": 5141790,
+            "project": "ruamel-ordereddict"
+        },
+        {
+            "download_count": 5136659,
+            "project": "azure-loganalytics"
+        },
+        {
+            "download_count": 5089358,
+            "project": "rx"
+        },
+        {
+            "download_count": 5083806,
+            "project": "discord"
+        },
+        {
+            "download_count": 5082337,
+            "project": "click-plugins"
+        },
+        {
+            "download_count": 5069136,
+            "project": "google-cloud-videointelligence"
+        },
+        {
+            "download_count": 5067821,
+            "project": "google-cloud-runtimeconfig"
+        },
+        {
+            "download_count": 5043933,
+            "project": "inflect"
+        },
+        {
+            "download_count": 5006490,
+            "project": "pulp"
+        },
+        {
+            "download_count": 5001567,
+            "project": "oslo-utils"
+        },
+        {
+            "download_count": 4965630,
+            "project": "azure-mgmt-devspaces"
+        },
+        {
+            "download_count": 4949806,
+            "project": "stringcase"
+        },
+        {
+            "download_count": 4926195,
+            "project": "django-appconf"
+        },
+        {
+            "download_count": 4913373,
+            "project": "pynamodb"
+        },
+        {
+            "download_count": 4913090,
+            "project": "dogpile-cache"
+        },
+        {
+            "download_count": 4899768,
+            "project": "python-consul"
+        },
+        {
+            "download_count": 4896198,
+            "project": "milksnake"
+        },
+        {
+            "download_count": 4875874,
+            "project": "pypng"
+        },
+        {
+            "download_count": 4868256,
+            "project": "oslo-config"
+        },
+        {
+            "download_count": 4857940,
+            "project": "haversine"
+        },
+        {
+            "download_count": 4854545,
+            "project": "azure-applicationinsights"
+        },
+        {
+            "download_count": 4830085,
+            "project": "flower"
+        },
+        {
+            "download_count": 4787508,
+            "project": "bandit"
+        },
+        {
+            "download_count": 4766743,
+            "project": "strict-rfc3339"
+        },
+        {
+            "download_count": 4744246,
+            "project": "findspark"
+        },
+        {
+            "download_count": 4742234,
+            "project": "flask-admin"
+        },
+        {
+            "download_count": 4742026,
+            "project": "qds-sdk"
+        },
+        {
+            "download_count": 4735803,
+            "project": "pip-tools"
+        },
+        {
+            "download_count": 4701984,
+            "project": "cliff"
+        },
+        {
+            "download_count": 4701803,
+            "project": "ddtrace"
+        },
+        {
+            "download_count": 4693878,
+            "project": "progressbar2"
+        },
+        {
+            "download_count": 4652633,
+            "project": "python-utils"
+        },
+        {
+            "download_count": 4645712,
+            "project": "cairocffi"
+        },
+        {
+            "download_count": 4645547,
+            "project": "google-cloud-trace"
+        },
+        {
+            "download_count": 4636704,
+            "project": "docker-py"
+        },
+        {
+            "download_count": 4632853,
+            "project": "tinycss2"
+        },
+        {
+            "download_count": 4627762,
+            "project": "apscheduler"
+        },
+        {
+            "download_count": 4606642,
+            "project": "python-pam"
+        },
+        {
+            "download_count": 4606137,
+            "project": "grpcio-gcp"
+        },
+        {
+            "download_count": 4605186,
+            "project": "parse-type"
+        },
+        {
+            "download_count": 4601072,
+            "project": "parameterized"
+        },
+        {
+            "download_count": 4600206,
+            "project": "avro-python3"
+        },
+        {
+            "download_count": 4589906,
+            "project": "pypiwin32"
+        },
+        {
+            "download_count": 4587705,
+            "project": "olefile"
+        },
+        {
+            "download_count": 4586230,
+            "project": "testtools"
+        },
+        {
+            "download_count": 4583482,
+            "project": "dj-database-url"
+        },
+        {
+            "download_count": 4572193,
+            "project": "basictracer"
+        },
+        {
+            "download_count": 4567533,
+            "project": "macholib"
+        },
+        {
+            "download_count": 4563623,
+            "project": "cligj"
+        },
+        {
+            "download_count": 4560977,
+            "project": "google-cloud-container"
+        },
+        {
+            "download_count": 4553683,
+            "project": "oslo-serialization"
+        },
+        {
+            "download_count": 4544031,
+            "project": "logging"
+        },
+        {
+            "download_count": 4543347,
+            "project": "click-completion"
+        },
+        {
+            "download_count": 4542581,
+            "project": "pycares"
+        },
+        {
+            "download_count": 4461143,
+            "project": "fiona"
+        },
+        {
+            "download_count": 4454845,
+            "project": "mmh3"
+        },
+        {
+            "download_count": 4447608,
+            "project": "jws"
+        },
+        {
+            "download_count": 4433310,
+            "project": "python-docx"
+        },
+        {
+            "download_count": 4432803,
+            "project": "mleap"
+        },
+        {
+            "download_count": 4430881,
+            "project": "extras"
+        },
+        {
+            "download_count": 4394588,
+            "project": "dataclasses"
+        },
+        {
+            "download_count": 4384805,
+            "project": "fixtures"
+        },
+        {
+            "download_count": 4368983,
+            "project": "cfn-lint"
+        },
+        {
+            "download_count": 4347507,
+            "project": "cairosvg"
+        },
+        {
+            "download_count": 4345671,
+            "project": "lz4"
+        },
+        {
+            "download_count": 4341286,
+            "project": "flask-script"
+        },
+        {
+            "download_count": 4335840,
+            "project": "statistics"
+        },
+        {
+            "download_count": 4332342,
+            "project": "fbprophet"
+        },
+        {
+            "download_count": 4329185,
+            "project": "cmd2"
+        },
+        {
+            "download_count": 4323965,
+            "project": "brotli"
+        },
+        {
+            "download_count": 4323647,
+            "project": "cytoolz"
+        },
+        {
+            "download_count": 4315817,
+            "project": "polyaxon-client"
+        },
+        {
+            "download_count": 4309639,
+            "project": "portalocker"
+        },
+        {
+            "download_count": 4302427,
+            "project": "torchvision"
+        },
+        {
+            "download_count": 4299923,
+            "project": "bumpversion"
+        },
+        {
+            "download_count": 4291946,
+            "project": "python-jwt"
+        },
+        {
+            "download_count": 4264873,
+            "project": "polyaxon-cli"
+        },
+        {
+            "download_count": 4263296,
+            "project": "polyaxon-deploy"
+        },
+        {
+            "download_count": 4260496,
+            "project": "coveralls"
+        },
+        {
+            "download_count": 4256821,
+            "project": "python-geohash"
+        },
+        {
+            "download_count": 4247442,
+            "project": "flask-caching"
+        },
+        {
+            "download_count": 4223430,
+            "project": "cssselect2"
+        },
+        {
+            "download_count": 4217166,
+            "project": "behave"
+        },
+        {
+            "download_count": 4198998,
+            "project": "mozfile"
+        },
+        {
+            "download_count": 4198846,
+            "project": "ddt"
+        },
+        {
+            "download_count": 4192314,
+            "project": "aiodns"
+        },
+        {
+            "download_count": 4180658,
+            "project": "googleads"
+        },
+        {
+            "download_count": 4151629,
+            "project": "flake8-polyfill"
+        },
+        {
+            "download_count": 4142826,
+            "project": "pyphen"
+        },
+        {
+            "download_count": 4130090,
+            "project": "fastparquet"
+        },
+        {
+            "download_count": 4125828,
+            "project": "flask-babel"
+        },
+        {
+            "download_count": 4114954,
+            "project": "gcloud"
+        },
+        {
+            "download_count": 4098408,
+            "project": "google-cloud-bigquery-datatransfer"
+        },
+        {
+            "download_count": 4088308,
+            "project": "gorilla"
+        },
+        {
+            "download_count": 4081407,
+            "project": "keystoneauth1"
+        },
+        {
+            "download_count": 4077553,
+            "project": "requests-futures"
+        },
+        {
+            "download_count": 4054249,
+            "project": "azureml-core"
+        },
+        {
+            "download_count": 4042252,
+            "project": "python-ldap"
+        },
+        {
+            "download_count": 4007776,
+            "project": "pathos"
+        },
+        {
+            "download_count": 3999757,
+            "project": "ephem"
+        },
+        {
+            "download_count": 3969692,
+            "project": "hyperopt"
+        },
+        {
+            "download_count": 3949966,
+            "project": "testfixtures"
+        },
+        {
+            "download_count": 3937830,
+            "project": "fonttools"
+        },
+        {
+            "download_count": 3935226,
+            "project": "terminaltables"
+        },
+        {
+            "download_count": 3927254,
+            "project": "easyprocess"
+        },
+        {
+            "download_count": 3922990,
+            "project": "python-gflags"
+        },
+        {
+            "download_count": 3912801,
+            "project": "deprecation"
+        },
+        {
+            "download_count": 3905705,
+            "project": "nvidia-ml-py"
+        },
+        {
+            "download_count": 3885807,
+            "project": "google-cloud-kms"
+        },
+        {
+            "download_count": 3865843,
+            "project": "geojson"
+        },
+        {
+            "download_count": 3828132,
+            "project": "robotframework"
+        },
+        {
+            "download_count": 3820453,
+            "project": "gcsfs"
+        },
+        {
+            "download_count": 3810489,
+            "project": "convertdate"
+        },
+        {
+            "download_count": 3809802,
+            "project": "sockjs-tornado"
+        },
+        {
+            "download_count": 3799689,
+            "project": "multipledispatch"
+        },
+        {
+            "download_count": 3798810,
+            "project": "weasyprint"
+        },
+        {
+            "download_count": 3793665,
+            "project": "tomlkit"
+        },
+        {
+            "download_count": 3792308,
+            "project": "python-snappy"
+        },
+        {
+            "download_count": 3787259,
+            "project": "django-model-utils"
+        },
+        {
+            "download_count": 3780397,
+            "project": "distributed"
+        },
+        {
+            "download_count": 3775038,
+            "project": "grequests"
+        },
+        {
+            "download_count": 3771741,
+            "project": "flask-bcrypt"
+        },
+        {
+            "download_count": 3769931,
+            "project": "fakeredis"
+        },
+        {
+            "download_count": 3752939,
+            "project": "schedule"
+        },
+        {
+            "download_count": 3746896,
+            "project": "validators"
+        },
+        {
+            "download_count": 3721493,
+            "project": "knack"
+        },
+        {
+            "download_count": 3693854,
+            "project": "pox"
+        },
+        {
+            "download_count": 3682964,
+            "project": "sshtunnel"
+        },
+        {
+            "download_count": 3681065,
+            "project": "tftpy"
+        },
+        {
+            "download_count": 3676291,
+            "project": "pdfminer"
+        },
+        {
+            "download_count": 3664933,
+            "project": "google-compute-engine"
+        },
+        {
+            "download_count": 3647507,
+            "project": "graphene"
+        },
+        {
+            "download_count": 3639253,
+            "project": "setuptools-git"
+        },
+        {
+            "download_count": 3630380,
+            "project": "unittest-xml-reporting"
+        },
+        {
+            "download_count": 3627156,
+            "project": "ciso8601"
+        },
+        {
+            "download_count": 3627033,
+            "project": "sockjs"
+        },
+        {
+            "download_count": 3625069,
+            "project": "shortuuid"
+        },
+        {
+            "download_count": 3616592,
+            "project": "ray"
+        },
+        {
+            "download_count": 3613699,
+            "project": "ppft"
+        },
+        {
+            "download_count": 3597147,
+            "project": "shap"
+        },
+        {
+            "download_count": 3590917,
+            "project": "azureml-model-management-sdk"
+        },
+        {
+            "download_count": 3588391,
+            "project": "pygsheets"
+        },
+        {
+            "download_count": 3584999,
+            "project": "flask-swagger"
+        },
+        {
+            "download_count": 3575551,
+            "project": "cssutils"
+        },
+        {
+            "download_count": 3568283,
+            "project": "pattern"
+        },
+        {
+            "download_count": 3549188,
+            "project": "pylev"
+        },
+        {
+            "download_count": 3544798,
+            "project": "ibm-db-sa"
+        },
+        {
+            "download_count": 3526181,
+            "project": "pyathenajdbc"
+        },
+        {
+            "download_count": 3518011,
+            "project": "pylint-plugin-utils"
+        },
+        {
+            "download_count": 3517988,
+            "project": "pg8000"
+        },
+        {
+            "download_count": 3517712,
+            "project": "tensorflow-model-analysis"
+        },
+        {
+            "download_count": 3507991,
+            "project": "os-service-types"
+        },
+        {
+            "download_count": 3489788,
+            "project": "python-swiftclient"
+        },
+        {
+            "download_count": 3477450,
+            "project": "openstacksdk"
+        },
+        {
+            "download_count": 3465240,
+            "project": "cfn-flip"
+        },
+        {
+            "download_count": 3459223,
+            "project": "catkin-pkg"
+        },
+        {
+            "download_count": 3455963,
+            "project": "cleo"
+        },
+        {
+            "download_count": 3448945,
+            "project": "python-keystoneclient"
+        },
+        {
+            "download_count": 3448335,
+            "project": "jellyfish"
+        },
+        {
+            "download_count": 3444950,
+            "project": "apispec"
+        },
+        {
+            "download_count": 3443490,
+            "project": "pastel"
+        },
+        {
+            "download_count": 3434078,
+            "project": "django-tables2"
+        },
+        {
+            "download_count": 3429540,
+            "project": "qrcode"
+        },
+        {
+            "download_count": 3426160,
+            "project": "collectd-nvidianvml"
+        },
+        {
+            "download_count": 3420045,
+            "project": "apache-airflow"
+        },
+        {
+            "download_count": 3411604,
+            "project": "prison"
+        },
+        {
+            "download_count": 3402478,
+            "project": "pefile"
+        },
+        {
+            "download_count": 3393690,
+            "project": "commonmark"
+        },
+        {
+            "download_count": 3388484,
+            "project": "tablib"
+        },
+        {
+            "download_count": 3384168,
+            "project": "ntlm-auth"
+        },
+        {
+            "download_count": 3377675,
+            "project": "geopandas"
+        },
+        {
+            "download_count": 3366350,
+            "project": "jsmin"
+        },
+        {
+            "download_count": 3361635,
+            "project": "antlr4-python3-runtime"
+        },
+        {
+            "download_count": 3340033,
+            "project": "polyaxon-dockerizer"
+        },
+        {
+            "download_count": 3293582,
+            "project": "odfpy"
+        },
+        {
+            "download_count": 3269264,
+            "project": "openapi-codec"
+        },
+        {
+            "download_count": 3258675,
+            "project": "utm"
+        },
+        {
+            "download_count": 3251855,
+            "project": "pyvmomi"
+        },
+        {
+            "download_count": 3251588,
+            "project": "poetry"
+        },
+        {
+            "download_count": 3247520,
+            "project": "bitarray"
+        },
+        {
+            "download_count": 3244587,
+            "project": "python-crontab"
+        },
+        {
+            "download_count": 3243979,
+            "project": "django-mysql"
+        },
+        {
+            "download_count": 3242901,
+            "project": "databricks-pypi1"
+        },
+        {
+            "download_count": 3238235,
+            "project": "marshmallow-sqlalchemy"
+        },
+        {
+            "download_count": 3226761,
+            "project": "emoji"
+        },
+        {
+            "download_count": 3224704,
+            "project": "initools"
+        },
+        {
+            "download_count": 3209542,
+            "project": "capstone"
+        },
+        {
+            "download_count": 3200795,
+            "project": "djangorestframework-jwt"
+        },
+        {
+            "download_count": 3184641,
+            "project": "django-rest-swagger"
+        },
+        {
+            "download_count": 3181604,
+            "project": "tensorflow-hub"
+        },
+        {
+            "download_count": 3179141,
+            "project": "ratelimit"
+        },
+        {
+            "download_count": 3176283,
+            "project": "asyncio"
+        },
+        {
+            "download_count": 3176119,
+            "project": "spark-sklearn"
+        },
+        {
+            "download_count": 3173008,
+            "project": "paste"
+        },
+        {
+            "download_count": 3169917,
+            "project": "pytest-asyncio"
+        },
+        {
+            "download_count": 3159532,
+            "project": "django-crispy-forms"
+        },
+        {
+            "download_count": 3156134,
+            "project": "cachy"
+        },
+        {
+            "download_count": 3150001,
+            "project": "asgiref"
+        },
+        {
+            "download_count": 3138323,
+            "project": "django-environ"
+        },
+        {
+            "download_count": 3127100,
+            "project": "fire"
+        },
+        {
+            "download_count": 3123851,
+            "project": "salesforce-bulk"
+        },
+        {
+            "download_count": 3117730,
+            "project": "lightstep"
+        },
+        {
+            "download_count": 3116358,
+            "project": "azure-cli-core"
+        },
+        {
+            "download_count": 3110959,
+            "project": "recommonmark"
+        },
+        {
+            "download_count": 3095813,
+            "project": "pysqlite"
+        },
+        {
+            "download_count": 3088484,
+            "project": "clickclick"
+        },
+        {
+            "download_count": 3077942,
+            "project": "heapdict"
+        },
+        {
+            "download_count": 3077928,
+            "project": "google-cloud-dataflow"
+        },
+        {
+            "download_count": 3073863,
+            "project": "spotinst-agent"
+        },
+        {
+            "download_count": 3073217,
+            "project": "analytics-python"
+        },
+        {
+            "download_count": 3065872,
+            "project": "nose-timer"
+        },
+        {
+            "download_count": 3064209,
+            "project": "rq"
+        },
+        {
+            "download_count": 3062467,
+            "project": "wandb"
+        },
+        {
+            "download_count": 3060966,
+            "project": "jsonfield"
+        },
+        {
+            "download_count": 3050206,
+            "project": "pyinotify"
+        },
+        {
+            "download_count": 3048455,
+            "project": "pygame"
+        },
+        {
+            "download_count": 3043542,
+            "project": "intel-openmp"
+        },
+        {
+            "download_count": 3042574,
+            "project": "zict"
+        },
+        {
+            "download_count": 3040916,
+            "project": "pytest-split-tests"
+        },
+        {
+            "download_count": 3036872,
+            "project": "pep8-naming"
+        },
+        {
+            "download_count": 3029439,
+            "project": "ordered-set"
+        },
+        {
+            "download_count": 3025549,
+            "project": "graphql-relay"
+        },
+        {
+            "download_count": 3019093,
+            "project": "troposphere"
+        },
+        {
+            "download_count": 3009250,
+            "project": "azure-kusto-data"
+        },
+        {
+            "download_count": 3008025,
+            "project": "opencv-contrib-python"
+        },
+        {
+            "download_count": 3003750,
+            "project": "requests-ntlm"
+        },
+        {
+            "download_count": 3003003,
+            "project": "tb-nightly"
+        },
+        {
+            "download_count": 2996766,
+            "project": "credstash"
+        },
+        {
+            "download_count": 2989520,
+            "project": "flask-appbuilder"
+        },
+        {
+            "download_count": 2980537,
+            "project": "plumbum"
+        },
+        {
+            "download_count": 2973597,
+            "project": "pager"
+        },
+        {
+            "download_count": 2967237,
+            "project": "schema"
+        },
+        {
+            "download_count": 2965535,
+            "project": "mkl"
+        },
+        {
+            "download_count": 2963377,
+            "project": "blessed"
+        },
+        {
+            "download_count": 2953182,
+            "project": "datashape"
+        },
+        {
+            "download_count": 2941855,
+            "project": "validate-email"
+        },
+        {
+            "download_count": 2939744,
+            "project": "pylint-django"
+        },
+        {
+            "download_count": 2938945,
+            "project": "webapp2"
+        },
+        {
+            "download_count": 2936891,
+            "project": "livereload"
+        },
+        {
+            "download_count": 2935073,
+            "project": "cvxopt"
+        },
+        {
+            "download_count": 2934589,
+            "project": "cement"
+        },
+        {
+            "download_count": 2931314,
+            "project": "tfx-bsl"
+        },
+        {
+            "download_count": 2922270,
+            "project": "rospkg"
+        },
+        {
+            "download_count": 2912677,
+            "project": "flaky"
+        },
+        {
+            "download_count": 2909121,
+            "project": "filemagic"
+        },
+        {
+            "download_count": 2902933,
+            "project": "msgpack-numpy"
+        },
+        {
+            "download_count": 2895921,
+            "project": "uamqp"
+        },
+        {
+            "download_count": 2895636,
+            "project": "accumulation-tree"
+        },
+        {
+            "download_count": 2894366,
+            "project": "pyudorandom"
+        },
+        {
+            "download_count": 2892673,
+            "project": "tdigest"
+        },
+        {
+            "download_count": 2888615,
+            "project": "tensorflow-data-validation"
+        },
+        {
+            "download_count": 2886531,
+            "project": "python-subunit"
+        },
+        {
+            "download_count": 2878388,
+            "project": "gitdb"
+        },
+        {
+            "download_count": 2874189,
+            "project": "python-novaclient"
+        },
+        {
+            "download_count": 2857065,
+            "project": "asyncpg"
+        },
+        {
+            "download_count": 2847295,
+            "project": "social-auth-core"
+        },
+        {
+            "download_count": 2838600,
+            "project": "azure-cli-nspkg"
+        },
+        {
+            "download_count": 2838428,
+            "project": "requestsexceptions"
+        },
+        {
+            "download_count": 2834024,
+            "project": "filechunkio"
+        },
+        {
+            "download_count": 2828975,
+            "project": "argon2-cffi"
+        },
+        {
+            "download_count": 2822266,
+            "project": "beautifulsoup"
+        },
+        {
+            "download_count": 2821979,
+            "project": "smmap"
+        },
+        {
+            "download_count": 2819754,
+            "project": "django-multiselectfield"
+        },
+        {
+            "download_count": 2815640,
+            "project": "drf-yasg"
+        },
+        {
+            "download_count": 2813694,
+            "project": "boltons"
+        },
+        {
+            "download_count": 2810269,
+            "project": "httpretty"
+        },
+        {
+            "download_count": 2806190,
+            "project": "pyqt5"
+        },
+        {
+            "download_count": 2802770,
+            "project": "hashids"
+        },
+        {
+            "download_count": 2792830,
+            "project": "pdfrw"
+        },
+        {
+            "download_count": 2792334,
+            "project": "flask-openid"
+        },
+        {
+            "download_count": 2791834,
+            "project": "gapic-google-cloud-error-reporting-v1beta1"
+        },
+        {
+            "download_count": 2790983,
+            "project": "cookiejar"
+        },
+        {
+            "download_count": 2788259,
+            "project": "proto-google-cloud-error-reporting-v1beta1"
+        },
+        {
+            "download_count": 2779755,
+            "project": "flask-marshmallow"
+        },
+        {
+            "download_count": 2753420,
+            "project": "pyinstaller"
+        },
+        {
+            "download_count": 2752867,
+            "project": "sqlalchemy-redshift"
+        },
+        {
+            "download_count": 2749279,
+            "project": "python-logstash"
+        },
+        {
+            "download_count": 2747409,
+            "project": "django-nose"
+        },
+        {
+            "download_count": 2744486,
+            "project": "azure-cosmos"
+        },
+        {
+            "download_count": 2738853,
+            "project": "verboselogs"
+        },
+        {
+            "download_count": 2724920,
+            "project": "googlemaps"
+        },
+        {
+            "download_count": 2722861,
+            "project": "social-auth-app-django"
+        },
+        {
+            "download_count": 2706844,
+            "project": "async-generator"
+        },
+        {
+            "download_count": 2704711,
+            "project": "funcy"
+        },
+        {
+            "download_count": 2703274,
+            "project": "clint"
+        },
+        {
+            "download_count": 2701212,
+            "project": "pytest-sugar"
+        },
+        {
+            "download_count": 2699840,
+            "project": "django-timezone-field"
+        },
+        {
+            "download_count": 2697450,
+            "project": "jaydebeapi"
+        },
+        {
+            "download_count": 2693049,
+            "project": "brotlipy"
+        },
+        {
+            "download_count": 2686973,
+            "project": "args"
+        },
+        {
+            "download_count": 2683870,
+            "project": "vcrpy"
+        },
+        {
+            "download_count": 2677855,
+            "project": "marshmallow-enum"
+        },
+        {
+            "download_count": 2673327,
+            "project": "peewee"
+        },
+        {
+            "download_count": 2670889,
+            "project": "osc-lib"
+        },
+        {
+            "download_count": 2670484,
+            "project": "langdetect"
+        },
+        {
+            "download_count": 2663228,
+            "project": "enum"
+        },
+        {
+            "download_count": 2655265,
+            "project": "azure-cli-telemetry"
+        },
+        {
+            "download_count": 2651881,
+            "project": "tables"
+        },
+        {
+            "download_count": 2649758,
+            "project": "pastedeploy"
+        },
+        {
+            "download_count": 2646163,
+            "project": "swagger-spec-validator"
+        },
+        {
+            "download_count": 2644724,
+            "project": "tld"
+        },
+        {
+            "download_count": 2642975,
+            "project": "kafka"
+        },
+        {
+            "download_count": 2641270,
+            "project": "cchardet"
+        },
+        {
+            "download_count": 2636532,
+            "project": "timezonefinder"
+        },
+        {
+            "download_count": 2634114,
+            "project": "mongoengine"
+        },
+        {
+            "download_count": 2615568,
+            "project": "python-crfsuite"
+        },
+        {
+            "download_count": 2600491,
+            "project": "timeout-decorator"
+        },
+        {
+            "download_count": 2592520,
+            "project": "rjsmin"
+        },
+        {
+            "download_count": 2589546,
+            "project": "brunel"
+        },
+        {
+            "download_count": 2585708,
+            "project": "autobahn"
+        },
+        {
+            "download_count": 2584709,
+            "project": "webargs"
+        },
+        {
+            "download_count": 2584111,
+            "project": "pyvirtualdisplay"
+        },
+        {
+            "download_count": 2580140,
+            "project": "descartes"
+        },
+        {
+            "download_count": 2551557,
+            "project": "cassandra-driver"
+        },
+        {
+            "download_count": 2549257,
+            "project": "aws-requests-auth"
+        },
+        {
+            "download_count": 2540875,
+            "project": "rope"
+        },
+        {
+            "download_count": 2538617,
+            "project": "aiofiles"
+        },
+        {
+            "download_count": 2532557,
+            "project": "pycountry-convert"
+        },
+        {
+            "download_count": 2528277,
+            "project": "branca"
+        },
+        {
+            "download_count": 2524264,
+            "project": "mechanize"
+        },
+        {
+            "download_count": 2519234,
+            "project": "mysql-connector-python-rf"
+        },
+        {
+            "download_count": 2517497,
+            "project": "pywebhdfs"
+        },
+        {
+            "download_count": 2503645,
+            "project": "folium"
+        },
+        {
+            "download_count": 2498263,
+            "project": "aiohttp-cors"
+        },
+        {
+            "download_count": 2497590,
+            "project": "flask-httpauth"
+        },
+        {
+            "download_count": 2495242,
+            "project": "django-ipware"
+        },
+        {
+            "download_count": 2494397,
+            "project": "jupyterlab"
+        },
+        {
+            "download_count": 2493673,
+            "project": "pybind11"
+        },
+        {
+            "download_count": 2492477,
+            "project": "diff-match-patch"
+        },
+        {
+            "download_count": 2491248,
+            "project": "jupyter-pip"
+        },
+        {
+            "download_count": 2488659,
+            "project": "dpath"
+        },
+        {
+            "download_count": 2488591,
+            "project": "marionette-driver"
+        },
+        {
+            "download_count": 2484149,
+            "project": "dotnetcore2"
+        },
+        {
+            "download_count": 2478052,
+            "project": "pythonwhois"
+        },
+        {
+            "download_count": 2470002,
+            "project": "google-cloud-dataproc"
+        },
+        {
+            "download_count": 2458163,
+            "project": "enum-compat"
+        },
+        {
+            "download_count": 2455272,
+            "project": "awsebcli"
+        },
+        {
+            "download_count": 2454145,
+            "project": "django-celery-beat"
+        },
+        {
+            "download_count": 2453795,
+            "project": "rfc3987"
+        },
+        {
+            "download_count": 2447431,
+            "project": "py-bcrypt"
+        },
+        {
+            "download_count": 2442569,
+            "project": "python-gitlab"
+        },
+        {
+            "download_count": 2439713,
+            "project": "translationstring"
+        },
+        {
+            "download_count": 2439355,
+            "project": "yq"
+        },
+        {
+            "download_count": 2435098,
+            "project": "pysnmp"
+        },
+        {
+            "download_count": 2432521,
+            "project": "first"
+        },
+        {
+            "download_count": 2429585,
+            "project": "hpack"
+        },
+        {
+            "download_count": 2428283,
+            "project": "python-glanceclient"
+        },
+        {
+            "download_count": 2422100,
+            "project": "venusian"
+        },
+        {
+            "download_count": 2416591,
+            "project": "bitstring"
+        },
+        {
+            "download_count": 2408841,
+            "project": "flake8-docstrings"
+        },
+        {
+            "download_count": 2407495,
+            "project": "attrdict"
+        },
+        {
+            "download_count": 2404932,
+            "project": "ws4py"
+        },
+        {
+            "download_count": 2402857,
+            "project": "os-client-config"
+        },
+        {
+            "download_count": 2401078,
+            "project": "locustio"
+        },
+        {
+            "download_count": 2398281,
+            "project": "junit-xml"
+        },
+        {
+            "download_count": 2395343,
+            "project": "mozversion"
+        },
+        {
+            "download_count": 2395052,
+            "project": "azureml-dataprep"
+        },
+        {
+            "download_count": 2390036,
+            "project": "sshpubkeys"
+        },
+        {
+            "download_count": 2387469,
+            "project": "h2"
+        },
+        {
+            "download_count": 2386629,
+            "project": "ansible-lint"
+        },
+        {
+            "download_count": 2381639,
+            "project": "txaio"
+        },
+        {
+            "download_count": 2380783,
+            "project": "wget"
+        },
+        {
+            "download_count": 2375129,
+            "project": "pytest-rerunfailures"
+        },
+        {
+            "download_count": 2371842,
+            "project": "oslo-log"
+        },
+        {
+            "download_count": 2370221,
+            "project": "hyperframe"
+        },
+        {
+            "download_count": 2364172,
+            "project": "python-openid"
+        },
+        {
+            "download_count": 2357263,
+            "project": "flask-jwt-extended"
+        },
+        {
+            "download_count": 2354920,
+            "project": "azureml-dataprep-native"
+        },
+        {
+            "download_count": 2346411,
+            "project": "flake8-import-order"
+        },
+        {
+            "download_count": 2334525,
+            "project": "pypandoc"
+        },
+        {
+            "download_count": 2329461,
+            "project": "pysmi"
+        },
+        {
+            "download_count": 2328121,
+            "project": "json-merge-patch"
+        },
+        {
+            "download_count": 2325050,
+            "project": "falcon"
+        },
+        {
+            "download_count": 2314962,
+            "project": "google-cloud-automl"
+        },
+        {
+            "download_count": 2313548,
+            "project": "azure-kusto-ingest"
+        },
+        {
+            "download_count": 2311574,
+            "project": "aioredis"
+        },
+        {
+            "download_count": 2307595,
+            "project": "py-cpuinfo"
+        },
+        {
+            "download_count": 2305070,
+            "project": "imbalanced-learn"
+        },
+        {
+            "download_count": 2304296,
+            "project": "django-compressor"
+        },
+        {
+            "download_count": 2304263,
+            "project": "memoized-property"
+        },
+        {
+            "download_count": 2304114,
+            "project": "azureml-telemetry"
+        },
+        {
+            "download_count": 2301461,
+            "project": "textblob"
+        },
+        {
+            "download_count": 2299510,
+            "project": "snowflake-sqlalchemy"
+        },
+        {
+            "download_count": 2287102,
+            "project": "schematics"
+        },
+        {
+            "download_count": 2276329,
+            "project": "virtualenvwrapper"
+        },
+        {
+            "download_count": 2272329,
+            "project": "aws-encryption-sdk"
+        },
+        {
+            "download_count": 2272227,
+            "project": "opencensus"
+        },
+        {
+            "download_count": 2267894,
+            "project": "django-allauth"
+        },
+        {
+            "download_count": 2267072,
+            "project": "ibm-db"
+        },
+        {
+            "download_count": 2258528,
+            "project": "python-cinderclient"
+        },
+        {
+            "download_count": 2252312,
+            "project": "objectpath"
+        },
+        {
+            "download_count": 2242218,
+            "project": "tf-estimator-nightly"
+        },
+        {
+            "download_count": 2231619,
+            "project": "flask-compress"
+        },
+        {
+            "download_count": 2224267,
+            "project": "azureml-pipeline-core"
+        },
+        {
+            "download_count": 2221757,
+            "project": "connexion"
+        },
+        {
+            "download_count": 2219740,
+            "project": "django-phonenumber-field"
+        },
+        {
+            "download_count": 2214496,
+            "project": "warlock"
+        },
+        {
+            "download_count": 2213923,
+            "project": "pyqt5-sip"
+        },
+        {
+            "download_count": 2210221,
+            "project": "phonenumberslite"
+        },
+        {
+            "download_count": 2209512,
+            "project": "oslo-context"
+        },
+        {
+            "download_count": 2194021,
+            "project": "azure-cli-command-modules-nspkg"
+        },
+        {
+            "download_count": 2185051,
+            "project": "pathlib-mate"
+        },
+        {
+            "download_count": 2184347,
+            "project": "jsonref"
+        },
+        {
+            "download_count": 2182555,
+            "project": "pytimeparse"
+        },
+        {
+            "download_count": 2180696,
+            "project": "databricks-pypi2"
+        },
+        {
+            "download_count": 2178821,
+            "project": "natsort"
+        },
+        {
+            "download_count": 2176243,
+            "project": "ipaddr"
+        },
+        {
+            "download_count": 2171374,
+            "project": "path-py"
+        },
+        {
+            "download_count": 2170378,
+            "project": "azure-mgmt-hdinsight"
+        },
+        {
+            "download_count": 2153590,
+            "project": "firebase-admin"
+        },
+        {
+            "download_count": 2150903,
+            "project": "azureml-train-core"
+        },
+        {
+            "download_count": 2148663,
+            "project": "pypyodbc"
+        },
+        {
+            "download_count": 2145885,
+            "project": "uszipcode"
+        },
+        {
+            "download_count": 2145383,
+            "project": "azureml-train-restclients-hyperdrive"
+        },
+        {
+            "download_count": 2142865,
+            "project": "premailer"
+        },
+        {
+            "download_count": 2137325,
+            "project": "h11"
+        },
+        {
+            "download_count": 2132743,
+            "project": "pyformance"
+        },
+        {
+            "download_count": 2132535,
+            "project": "shellescape"
+        },
+        {
+            "download_count": 2130341,
+            "project": "django-import-export"
+        },
+        {
+            "download_count": 2127667,
+            "project": "wsaccel"
+        },
+        {
+            "download_count": 2126611,
+            "project": "django-js-asset"
+        },
+        {
+            "download_count": 2126191,
+            "project": "snakebite"
+        },
+        {
+            "download_count": 2124659,
+            "project": "wordcloud"
+        },
+        {
+            "download_count": 2109163,
+            "project": "antlr4-python2-runtime"
+        },
+        {
+            "download_count": 2099008,
+            "project": "naked"
+        },
+        {
+            "download_count": 2098854,
+            "project": "jinja2-cli"
+        },
+        {
+            "download_count": 2097764,
+            "project": "onnx"
+        },
+        {
+            "download_count": 2081320,
+            "project": "pytesseract"
+        },
+        {
+            "download_count": 2076961,
+            "project": "azureml-pipeline-steps"
+        },
+        {
+            "download_count": 2073133,
+            "project": "flask-testing"
+        },
+        {
+            "download_count": 2072907,
+            "project": "pytest-env"
+        },
+        {
+            "download_count": 2072150,
+            "project": "django-widget-tweaks"
+        },
+        {
+            "download_count": 2070728,
+            "project": "django-webpack-loader"
+        },
+        {
+            "download_count": 2069730,
+            "project": "azureml-pipeline"
+        },
+        {
+            "download_count": 2069241,
+            "project": "mrjob"
+        },
+        {
+            "download_count": 2055974,
+            "project": "public"
+        },
+        {
+            "download_count": 2053631,
+            "project": "python-whois"
+        },
+        {
+            "download_count": 2052521,
+            "project": "safety"
+        },
+        {
+            "download_count": 2038912,
+            "project": "azure-multiapi-storage"
+        },
+        {
+            "download_count": 2038114,
+            "project": "google-cloud-tasks"
+        },
+        {
+            "download_count": 2037912,
+            "project": "partd"
+        },
+        {
+            "download_count": 2033573,
+            "project": "rcssmin"
+        },
+        {
+            "download_count": 2032537,
+            "project": "uuid"
+        },
+        {
+            "download_count": 2030463,
+            "project": "azureml-train"
+        },
+        {
+            "download_count": 2028467,
+            "project": "vsts-cd-manager"
+        },
+        {
+            "download_count": 2025661,
+            "project": "pyjks"
+        },
+        {
+            "download_count": 2025022,
+            "project": "flake8-quotes"
+        },
+        {
+            "download_count": 2022199,
+            "project": "python-socketio"
+        },
+        {
+            "download_count": 2021994,
+            "project": "slimit"
+        },
+        {
+            "download_count": 2021337,
+            "project": "pygeocoder"
+        },
+        {
+            "download_count": 2020656,
+            "project": "javaobj-py3"
+        },
+        {
+            "download_count": 2019345,
+            "project": "tweepy"
+        },
+        {
+            "download_count": 2015977,
+            "project": "grpc-google-logging-v2"
+        },
+        {
+            "download_count": 2013359,
+            "project": "twofish"
+        },
+        {
+            "download_count": 2010440,
+            "project": "urwid"
+        },
+        {
+            "download_count": 2008501,
+            "project": "pyathena"
+        },
+        {
+            "download_count": 2004648,
+            "project": "azureml-sdk"
+        },
+        {
+            "download_count": 2002586,
+            "project": "pdfminer-six"
+        },
+        {
+            "download_count": 2000934,
+            "project": "grpc-google-pubsub-v1"
+        },
+        {
+            "download_count": 1999960,
+            "project": "astral"
+        },
+        {
+            "download_count": 1996773,
+            "project": "python-box"
+        },
+        {
+            "download_count": 1992382,
+            "project": "python-openstackclient"
+        },
+        {
+            "download_count": 1987939,
+            "project": "toposort"
+        },
+        {
+            "download_count": 1984547,
+            "project": "httptools"
+        },
+        {
+            "download_count": 1980989,
+            "project": "asynctest"
+        },
+        {
+            "download_count": 1978811,
+            "project": "pycalverter"
+        },
+        {
+            "download_count": 1975990,
+            "project": "django-mptt"
+        },
+        {
+            "download_count": 1974600,
+            "project": "nameparser"
+        },
+        {
+            "download_count": 1974472,
+            "project": "geomet"
+        },
+        {
+            "download_count": 1974084,
+            "project": "rtree"
+        },
+        {
+            "download_count": 1970886,
+            "project": "gax-google-logging-v2"
+        },
+        {
+            "download_count": 1967604,
+            "project": "openapi-spec-validator"
+        },
+        {
+            "download_count": 1966141,
+            "project": "simpleeval"
+        },
+        {
+            "download_count": 1965371,
+            "project": "gax-google-pubsub-v1"
+        },
+        {
+            "download_count": 1964155,
+            "project": "pympler"
+        },
+        {
+            "download_count": 1957946,
+            "project": "pint"
+        },
+        {
+            "download_count": 1954321,
+            "project": "django-celery-results"
+        },
+        {
+            "download_count": 1950586,
+            "project": "oauth2"
+        },
+        {
+            "download_count": 1947313,
+            "project": "collections-extended"
+        },
+        {
+            "download_count": 1943588,
+            "project": "dparse"
+        },
+        {
+            "download_count": 1937747,
+            "project": "azure-mgmt-botservice"
+        },
+        {
+            "download_count": 1935888,
+            "project": "facebook-business"
+        },
+        {
+            "download_count": 1932910,
+            "project": "django-localflavor"
+        },
+        {
+            "download_count": 1931470,
+            "project": "slackweb"
+        },
+        {
+            "download_count": 1919103,
+            "project": "azure-eventhub"
+        },
+        {
+            "download_count": 1918652,
+            "project": "django-braces"
+        },
+        {
+            "download_count": 1917375,
+            "project": "fake-useragent"
+        },
+        {
+            "download_count": 1916732,
+            "project": "python-engineio"
+        },
+        {
+            "download_count": 1904465,
+            "project": "django-countries"
+        },
+        {
+            "download_count": 1901273,
+            "project": "ptvsd"
+        },
+        {
+            "download_count": 1899393,
+            "project": "orderedmultidict"
+        },
+        {
+            "download_count": 1897121,
+            "project": "jwcrypto"
+        },
+        {
+            "download_count": 1895022,
+            "project": "azure-mgmt-security"
+        },
+        {
+            "download_count": 1893082,
+            "project": "awacs"
+        },
+        {
+            "download_count": 1889385,
+            "project": "azure-functions-devops-build"
+        },
+        {
+            "download_count": 1884376,
+            "project": "locket"
+        },
+        {
+            "download_count": 1882404,
+            "project": "ctutlz"
+        },
+        {
+            "download_count": 1875062,
+            "project": "snapshottest"
+        },
+        {
+            "download_count": 1874184,
+            "project": "pdfkit"
+        },
+        {
+            "download_count": 1870591,
+            "project": "scapy"
+        },
+        {
+            "download_count": 1869037,
+            "project": "opencensus-context"
+        },
+        {
+            "download_count": 1862753,
+            "project": "flask-mail"
+        },
+        {
+            "download_count": 1860985,
+            "project": "intervaltree"
+        },
+        {
+            "download_count": 1856012,
+            "project": "azure-mgmt-sqlvirtualmachine"
+        },
+        {
+            "download_count": 1853788,
+            "project": "azure-mgmt-kusto"
+        },
+        {
+            "download_count": 1853245,
+            "project": "luigi"
+        },
+        {
+            "download_count": 1852083,
+            "project": "pylru"
+        },
+        {
+            "download_count": 1848356,
+            "project": "sklearn-pandas"
+        },
+        {
+            "download_count": 1846838,
+            "project": "pydantic"
+        },
+        {
+            "download_count": 1845633,
+            "project": "email-validator"
+        },
+        {
+            "download_count": 1844376,
+            "project": "pyquery"
+        },
+        {
+            "download_count": 1841139,
+            "project": "django-oauth-toolkit"
+        },
+        {
+            "download_count": 1839835,
+            "project": "memory-profiler"
+        },
+        {
+            "download_count": 1839825,
+            "project": "jupyterlab-server"
+        },
+        {
+            "download_count": 1835726,
+            "project": "sqlalchemy-migrate"
+        },
+        {
+            "download_count": 1832053,
+            "project": "retry-decorator"
+        },
+        {
+            "download_count": 1830194,
+            "project": "robotframework-seleniumlibrary"
+        },
+        {
+            "download_count": 1825914,
+            "project": "koalas"
+        },
+        {
+            "download_count": 1822090,
+            "project": "amazon-dax-client"
+        },
+        {
+            "download_count": 1821759,
+            "project": "python-nvd3"
+        },
+        {
+            "download_count": 1818147,
+            "project": "utlz"
+        },
+        {
+            "download_count": 1813328,
+            "project": "requests-kerberos"
+        },
+        {
+            "download_count": 1803051,
+            "project": "ftfy"
+        },
+        {
+            "download_count": 1798001,
+            "project": "crypto"
+        },
+        {
+            "download_count": 1792237,
+            "project": "distlib"
+        },
+        {
+            "download_count": 1791068,
+            "project": "wordsegment"
+        },
+        {
+            "download_count": 1790178,
+            "project": "django-taggit"
+        },
+        {
+            "download_count": 1783750,
+            "project": "suds"
+        },
+        {
+            "download_count": 1782898,
+            "project": "fabric3"
+        },
+        {
+            "download_count": 1782756,
+            "project": "socksipy-branch"
+        },
+        {
+            "download_count": 1778530,
+            "project": "webcolors"
+        },
+        {
+            "download_count": 1773769,
+            "project": "orderedset"
+        },
+        {
+            "download_count": 1770892,
+            "project": "mxnet"
+        },
+        {
+            "download_count": 1767740,
+            "project": "mixpanel"
+        },
+        {
+            "download_count": 1766756,
+            "project": "python-stdnum"
+        },
+        {
+            "download_count": 1765611,
+            "project": "polib"
+        },
+        {
+            "download_count": 1762017,
+            "project": "pysaml2"
+        },
+        {
+            "download_count": 1760938,
+            "project": "pywinpty"
+        },
+        {
+            "download_count": 1760472,
+            "project": "curlify"
+        },
+        {
+            "download_count": 1759532,
+            "project": "dulwich"
+        },
+        {
+            "download_count": 1755858,
+            "project": "tzwhere"
+        },
+        {
+            "download_count": 1753697,
+            "project": "pyotp"
+        },
+        {
+            "download_count": 1752520,
+            "project": "dropbox"
+        },
+        {
+            "download_count": 1748789,
+            "project": "thriftpy"
+        },
+        {
+            "download_count": 1744492,
+            "project": "yattag"
+        },
+        {
+            "download_count": 1744207,
+            "project": "xxhash"
+        },
+        {
+            "download_count": 1740901,
+            "project": "colorlover"
+        },
+        {
+            "download_count": 1740812,
+            "project": "mkdocs"
+        },
+        {
+            "download_count": 1723311,
+            "project": "iso3166"
+        },
+        {
+            "download_count": 1722795,
+            "project": "gcs-oauth2-boto-plugin"
+        },
+        {
+            "download_count": 1720946,
+            "project": "protorpc"
+        },
+        {
+            "download_count": 1717972,
+            "project": "sentinels"
+        },
+        {
+            "download_count": 1716396,
+            "project": "pykalman"
+        },
+        {
+            "download_count": 1715123,
+            "project": "pkgconfig"
+        },
+        {
+            "download_count": 1714704,
+            "project": "geohash"
+        },
+        {
+            "download_count": 1712854,
+            "project": "google-cloud-dlp"
+        },
+        {
+            "download_count": 1711556,
+            "project": "resampy"
+        },
+        {
+            "download_count": 1705164,
+            "project": "request"
+        },
+        {
+            "download_count": 1696070,
+            "project": "usaddress"
+        },
+        {
+            "download_count": 1694720,
+            "project": "superlance"
+        },
+        {
+            "download_count": 1692010,
+            "project": "librato-metrics"
+        },
+        {
+            "download_count": 1690356,
+            "project": "flask-oauthlib"
+        },
+        {
+            "download_count": 1686047,
+            "project": "google-cloud-texttospeech"
+        },
+        {
+            "download_count": 1677666,
+            "project": "post"
+        },
+        {
+            "download_count": 1675876,
+            "project": "get"
+        },
+        {
+            "download_count": 1669578,
+            "project": "daphne"
+        },
+        {
+            "download_count": 1665895,
+            "project": "librosa"
+        },
+        {
+            "download_count": 1665557,
+            "project": "pyelftools"
+        },
+        {
+            "download_count": 1665384,
+            "project": "query-string"
+        },
+        {
+            "download_count": 1663244,
+            "project": "pywinrm"
+        },
+        {
+            "download_count": 1660863,
+            "project": "pyreadline"
+        },
+        {
+            "download_count": 1657504,
+            "project": "ez-setup"
+        },
+        {
+            "download_count": 1656438,
+            "project": "channels"
+        },
+        {
+            "download_count": 1640299,
+            "project": "node-semver"
+        },
+        {
+            "download_count": 1638276,
+            "project": "tensorboardx"
+        },
+        {
+            "download_count": 1631659,
+            "project": "htmlmin"
+        },
+        {
+            "download_count": 1625146,
+            "project": "tensorflow-datasets"
+        },
+        {
+            "download_count": 1624914,
+            "project": "audioread"
+        },
+        {
+            "download_count": 1621703,
+            "project": "couchdb"
+        },
+        {
+            "download_count": 1618223,
+            "project": "google-reauth"
+        },
+        {
+            "download_count": 1616648,
+            "project": "google-cloud-redis"
+        },
+        {
+            "download_count": 1615335,
+            "project": "autograd"
+        },
+        {
+            "download_count": 1609038,
+            "project": "rollbar"
+        },
+        {
+            "download_count": 1608426,
+            "project": "pyu2f"
+        },
+        {
+            "download_count": 1603406,
+            "project": "iptools"
+        },
+        {
+            "download_count": 1601716,
+            "project": "compatibility-lib"
+        },
+        {
+            "download_count": 1599718,
+            "project": "google-cloud-asset"
+        },
+        {
+            "download_count": 1599709,
+            "project": "azure-mgmt-privatedns"
+        },
+        {
+            "download_count": 1596670,
+            "project": "python-decouple"
+        },
+        {
+            "download_count": 1592734,
+            "project": "oslo-concurrency"
+        },
+        {
+            "download_count": 1590149,
+            "project": "mongomock"
+        },
+        {
+            "download_count": 1590067,
+            "project": "fluent-logger"
+        },
+        {
+            "download_count": 1589332,
+            "project": "pygrok"
+        },
+        {
+            "download_count": 1586920,
+            "project": "rauth"
+        },
+        {
+            "download_count": 1585024,
+            "project": "probableparsing"
+        },
+        {
+            "download_count": 1580625,
+            "project": "dominate"
+        },
+        {
+            "download_count": 1577725,
+            "project": "pykerberos"
+        },
+        {
+            "download_count": 1577380,
+            "project": "pyramid"
+        },
+        {
+            "download_count": 1575279,
+            "project": "flask-cache"
+        },
+        {
+            "download_count": 1575048,
+            "project": "pytest-cache"
+        },
+        {
+            "download_count": 1574450,
+            "project": "pyee"
+        },
+        {
+            "download_count": 1572539,
+            "project": "bingads"
+        },
+        {
+            "download_count": 1569151,
+            "project": "appium-python-client"
+        },
+        {
+            "download_count": 1567159,
+            "project": "pygam"
+        },
+        {
+            "download_count": 1564680,
+            "project": "fysom"
+        },
+        {
+            "download_count": 1563117,
+            "project": "tempita"
+        },
+        {
+            "download_count": 1561979,
+            "project": "pywin32-ctypes"
+        },
+        {
+            "download_count": 1561323,
+            "project": "diskcache"
+        },
+        {
+            "download_count": 1558407,
+            "project": "pyhs2"
+        },
+        {
+            "download_count": 1556417,
+            "project": "frozendict"
+        },
+        {
+            "download_count": 1556392,
+            "project": "immutables"
+        },
+        {
+            "download_count": 1550611,
+            "project": "python-neutronclient"
+        },
+        {
+            "download_count": 1549879,
+            "project": "gspread-dataframe"
+        },
+        {
+            "download_count": 1545947,
+            "project": "pyro4"
+        },
+        {
+            "download_count": 1539049,
+            "project": "vertica-python"
+        },
+        {
+            "download_count": 1538249,
+            "project": "google-cloud-securitycenter"
+        },
+        {
+            "download_count": 1532048,
+            "project": "m3u8"
+        },
+        {
+            "download_count": 1530674,
+            "project": "serpent"
+        },
+        {
+            "download_count": 1527389,
+            "project": "aiobotocore"
+        },
+        {
+            "download_count": 1526900,
+            "project": "django-reversion"
+        },
+        {
+            "download_count": 1525911,
+            "project": "tox-travis"
+        },
+        {
+            "download_count": 1524549,
+            "project": "pluginbase"
+        },
+        {
+            "download_count": 1523680,
+            "project": "google-cloud-iot"
+        },
+        {
+            "download_count": 1523139,
+            "project": "pykafka"
+        },
+        {
+            "download_count": 1522621,
+            "project": "anyconfig"
+        },
+        {
+            "download_count": 1520539,
+            "project": "pyjwkest"
+        },
+        {
+            "download_count": 1520176,
+            "project": "django-formtools"
+        },
+        {
+            "download_count": 1519701,
+            "project": "vowpalwabbit"
+        },
+        {
+            "download_count": 1518864,
+            "project": "gprof2dot"
+        },
+        {
+            "download_count": 1517841,
+            "project": "presto-python-client"
+        },
+        {
+            "download_count": 1515284,
+            "project": "delorean"
+        },
+        {
+            "download_count": 1514817,
+            "project": "json5"
+        },
+        {
+            "download_count": 1511462,
+            "project": "num2words"
+        },
+        {
+            "download_count": 1507178,
+            "project": "pylibmc"
+        },
+        {
+            "download_count": 1505966,
+            "project": "httpagentparser"
+        },
+        {
+            "download_count": 1504331,
+            "project": "drf-nested-routers"
+        },
+        {
+            "download_count": 1504075,
+            "project": "icalendar"
+        },
+        {
+            "download_count": 1503765,
+            "project": "google-cloud-websecurityscanner"
+        },
+        {
+            "download_count": 1501399,
+            "project": "lru-dict"
+        },
+        {
+            "download_count": 1496923,
+            "project": "cloudant"
+        },
+        {
+            "download_count": 1493340,
+            "project": "keyrings-alt"
+        },
+        {
+            "download_count": 1492739,
+            "project": "cattrs"
+        },
+        {
+            "download_count": 1491297,
+            "project": "model-mommy"
+        },
+        {
+            "download_count": 1490933,
+            "project": "jenkinsapi"
+        },
+        {
+            "download_count": 1488901,
+            "project": "workalendar"
+        },
+        {
+            "download_count": 1486683,
+            "project": "lifetimes"
+        },
+        {
+            "download_count": 1484449,
+            "project": "sseclient-py"
+        },
+        {
+            "download_count": 1481519,
+            "project": "python-etcd"
+        },
+        {
+            "download_count": 1480386,
+            "project": "testinfra"
+        },
+        {
+            "download_count": 1479219,
+            "project": "sentencepiece"
+        },
+        {
+            "download_count": 1479194,
+            "project": "scikit-optimize"
+        },
+        {
+            "download_count": 1477712,
+            "project": "flask-responses"
+        },
+        {
+            "download_count": 1468207,
+            "project": "django-polymorphic"
+        },
+        {
+            "download_count": 1467601,
+            "project": "azure-mgmt-deploymentmanager"
+        },
+        {
+            "download_count": 1464092,
+            "project": "routes"
+        },
+        {
+            "download_count": 1463152,
+            "project": "editdistance"
+        },
+        {
+            "download_count": 1460523,
+            "project": "bugsnag"
+        },
+        {
+            "download_count": 1453426,
+            "project": "conan"
+        },
+        {
+            "download_count": 1449766,
+            "project": "autowrapt"
+        },
+        {
+            "download_count": 1448235,
+            "project": "fasttext"
+        },
+        {
+            "download_count": 1445709,
+            "project": "django-rest-auth"
+        },
+        {
+            "download_count": 1444092,
+            "project": "catboost"
+        },
+        {
+            "download_count": 1442809,
+            "project": "pydash"
+        },
+        {
+            "download_count": 1442503,
+            "project": "libsass"
+        },
+        {
+            "download_count": 1441996,
+            "project": "importlib"
+        },
+        {
+            "download_count": 1440920,
+            "project": "pytest-flask"
+        },
+        {
+            "download_count": 1440731,
+            "project": "django-simple-history"
+        },
+        {
+            "download_count": 1439129,
+            "project": "django-picklefield"
+        },
+        {
+            "download_count": 1437255,
+            "project": "trollius"
+        },
+        {
+            "download_count": 1433413,
+            "project": "ml-metadata"
+        },
+        {
+            "download_count": 1428493,
+            "project": "port-for"
+        },
+        {
+            "download_count": 1426881,
+            "project": "flake8-bugbear"
+        },
+        {
+            "download_count": 1425070,
+            "project": "python-nmap"
+        },
+        {
+            "download_count": 1424275,
+            "project": "newlinejson"
+        },
+        {
+            "download_count": 1423507,
+            "project": "pytest-benchmark"
+        },
+        {
+            "download_count": 1422061,
+            "project": "hacking"
+        },
+        {
+            "download_count": 1420833,
+            "project": "ratelim"
+        },
+        {
+            "download_count": 1416683,
+            "project": "rdflib"
+        },
+        {
+            "download_count": 1415247,
+            "project": "ninja"
+        },
+        {
+            "download_count": 1413811,
+            "project": "geocoder"
+        },
+        {
+            "download_count": 1413778,
+            "project": "parsimonious"
+        },
+        {
+            "download_count": 1409060,
+            "project": "xmlsec"
+        },
+        {
+            "download_count": 1407612,
+            "project": "jsonpath-ng"
+        },
+        {
+            "download_count": 1404958,
+            "project": "authy"
+        },
+        {
+            "download_count": 1399670,
+            "project": "python3-saml"
+        },
+        {
+            "download_count": 1399023,
+            "project": "django-ratelimit"
+        },
+        {
+            "download_count": 1398229,
+            "project": "watson-machine-learning-client"
+        },
+        {
+            "download_count": 1397882,
+            "project": "motor"
+        },
+        {
+            "download_count": 1397503,
+            "project": "pyusb"
+        },
+        {
+            "download_count": 1393071,
+            "project": "eli5"
+        },
+        {
+            "download_count": 1392124,
+            "project": "facebook-sdk"
+        },
+        {
+            "download_count": 1391265,
+            "project": "py-zabbix"
+        },
+        {
+            "download_count": 1390039,
+            "project": "threatconnect"
+        },
+        {
+            "download_count": 1389772,
+            "project": "github3-py"
+        },
+        {
+            "download_count": 1384962,
+            "project": "dash-renderer"
+        },
+        {
+            "download_count": 1384373,
+            "project": "pyzipcode3"
+        },
+        {
+            "download_count": 1384208,
+            "project": "transaction"
+        },
+        {
+            "download_count": 1377748,
+            "project": "dash"
+        },
+        {
+            "download_count": 1377392,
+            "project": "contextvars"
+        },
+        {
+            "download_count": 1375491,
+            "project": "pyppeteer"
+        },
+        {
+            "download_count": 1374745,
+            "project": "imutils"
+        },
+        {
+            "download_count": 1373022,
+            "project": "predicthq"
+        },
+        {
+            "download_count": 1371449,
+            "project": "furl"
+        },
+        {
+            "download_count": 1370079,
+            "project": "graypy"
+        },
+        {
+            "download_count": 1368582,
+            "project": "ipy"
+        },
+        {
+            "download_count": 1365609,
+            "project": "apache-libcloud"
+        },
+        {
+            "download_count": 1363504,
+            "project": "langid"
+        },
+        {
+            "download_count": 1362248,
+            "project": "happybase"
+        },
+        {
+            "download_count": 1362080,
+            "project": "wand"
+        },
+        {
+            "download_count": 1359167,
+            "project": "dash-core-components"
+        },
+        {
+            "download_count": 1355835,
+            "project": "teamcity-messages"
+        },
+        {
+            "download_count": 1353938,
+            "project": "django-treebeard"
+        },
+        {
+            "download_count": 1353094,
+            "project": "bottleneck"
+        },
+        {
+            "download_count": 1347193,
+            "project": "pipdeptree"
+        },
+        {
+            "download_count": 1346804,
+            "project": "flask-socketio"
+        },
+        {
+            "download_count": 1345086,
+            "project": "feather-format"
+        },
+        {
+            "download_count": 1345015,
+            "project": "pyshp"
+        },
+        {
+            "download_count": 1340081,
+            "project": "cerberus-python-client"
+        },
+        {
+            "download_count": 1339531,
+            "project": "pytest-ordering"
+        },
+        {
+            "download_count": 1337974,
+            "project": "dateutils"
+        },
+        {
+            "download_count": 1337690,
+            "project": "ccy"
+        },
+        {
+            "download_count": 1336766,
+            "project": "ec2-metadata"
+        },
+        {
+            "download_count": 1336028,
+            "project": "gevent-websocket"
+        },
+        {
+            "download_count": 1333439,
+            "project": "pyenchant"
+        },
+        {
+            "download_count": 1333043,
+            "project": "pykwalify"
+        },
+        {
+            "download_count": 1331164,
+            "project": "ptable"
+        },
+        {
+            "download_count": 1324399,
+            "project": "dash-html-components"
+        },
+        {
+            "download_count": 1323369,
+            "project": "wmctrl"
+        },
+        {
+            "download_count": 1322854,
+            "project": "markdown2"
+        },
+        {
+            "download_count": 1320709,
+            "project": "fancycompleter"
+        },
+        {
+            "download_count": 1320502,
+            "project": "genson"
+        },
+        {
+            "download_count": 1317756,
+            "project": "pyhocon"
+        },
+        {
+            "download_count": 1317236,
+            "project": "pdbpp"
+        },
+        {
+            "download_count": 1316522,
+            "project": "crc16"
+        },
+        {
+            "download_count": 1310312,
+            "project": "gnupg"
+        },
+        {
+            "download_count": 1306934,
+            "project": "palettable"
+        },
+        {
+            "download_count": 1306842,
+            "project": "fake-factory"
+        },
+        {
+            "download_count": 1302234,
+            "project": "bson"
+        },
+        {
+            "download_count": 1293536,
+            "project": "jsonpath-rw-ext"
+        },
+        {
+            "download_count": 1291830,
+            "project": "graphene-django"
+        },
+        {
+            "download_count": 1288532,
+            "project": "elasticsearch-curator"
+        },
+        {
+            "download_count": 1287159,
+            "project": "agate"
+        },
+        {
+            "download_count": 1286419,
+            "project": "pyluach"
+        },
+        {
+            "download_count": 1276264,
+            "project": "pytoml"
+        },
+        {
+            "download_count": 1275859,
+            "project": "xhtml2pdf"
+        },
+        {
+            "download_count": 1275165,
+            "project": "mandrill"
+        },
+        {
+            "download_count": 1274724,
+            "project": "aws-sam-cli"
+        },
+        {
+            "download_count": 1274476,
+            "project": "aws-lambda-builders"
+        },
+        {
+            "download_count": 1274226,
+            "project": "algoliasearch"
+        },
+        {
+            "download_count": 1273921,
+            "project": "hupper"
+        },
+        {
+            "download_count": 1261688,
+            "project": "testscenarios"
+        },
+        {
+            "download_count": 1259972,
+            "project": "cufflinks"
+        },
+        {
+            "download_count": 1258105,
+            "project": "signalfx"
+        },
+        {
+            "download_count": 1257144,
+            "project": "moviepy"
+        },
+        {
+            "download_count": 1255798,
+            "project": "objgraph"
+        },
+        {
+            "download_count": 1252062,
+            "project": "chevron"
+        },
+        {
+            "download_count": 1235194,
+            "project": "pdf2image"
+        },
+        {
+            "download_count": 1234160,
+            "project": "uvicorn"
+        },
+        {
+            "download_count": 1233486,
+            "project": "tlslite"
+        },
+        {
+            "download_count": 1231831,
+            "project": "pybase64"
+        },
+        {
+            "download_count": 1230654,
+            "project": "createsend"
+        },
+        {
+            "download_count": 1230170,
+            "project": "gql"
+        },
+        {
+            "download_count": 1230039,
+            "project": "imagehash"
+        },
+        {
+            "download_count": 1228048,
+            "project": "azureml-defaults"
+        },
+        {
+            "download_count": 1227477,
+            "project": "azure-mgmt-imagebuilder"
+        },
+        {
+            "download_count": 1226165,
+            "project": "serverlessrepo"
+        },
+        {
+            "download_count": 1221206,
+            "project": "pytest-watch"
+        },
+        {
+            "download_count": 1220741,
+            "project": "google-cloud-bigquery-storage"
+        },
+        {
+            "download_count": 1218278,
+            "project": "django-ses"
+        },
+        {
+            "download_count": 1217113,
+            "project": "luminol"
+        },
+        {
+            "download_count": 1213653,
+            "project": "pyaes"
+        },
+        {
+            "download_count": 1213392,
+            "project": "flask-mongoalchemy"
+        },
+        {
+            "download_count": 1212483,
+            "project": "flake8-print"
+        },
+        {
+            "download_count": 1208573,
+            "project": "resource"
+        },
+        {
+            "download_count": 1207795,
+            "project": "stemming"
+        },
+        {
+            "download_count": 1206452,
+            "project": "python-easyconfig"
+        },
+        {
+            "download_count": 1206109,
+            "project": "jsonform"
+        },
+        {
+            "download_count": 1205968,
+            "project": "jsonsir"
+        },
+        {
+            "download_count": 1202856,
+            "project": "logbook"
+        },
+        {
+            "download_count": 1198077,
+            "project": "import-from-github-com"
+        },
+        {
+            "download_count": 1195471,
+            "project": "mss"
+        },
+        {
+            "download_count": 1195405,
+            "project": "robotframework-requests"
+        },
+        {
+            "download_count": 1194828,
+            "project": "nose2"
+        },
+        {
+            "download_count": 1194314,
+            "project": "fusepy"
+        },
+        {
+            "download_count": 1193288,
+            "project": "cmake"
+        },
+        {
+            "download_count": 1192641,
+            "project": "httpbin"
+        },
+        {
+            "download_count": 1190084,
+            "project": "graphql-server-core"
+        },
+        {
+            "download_count": 1189375,
+            "project": "stestr"
+        },
+        {
+            "download_count": 1188229,
+            "project": "recordclass"
+        },
+        {
+            "download_count": 1186101,
+            "project": "django-bootstrap4"
+        },
+        {
+            "download_count": 1181472,
+            "project": "tree-format"
+        },
+        {
+            "download_count": 1180564,
+            "project": "django-guardian"
+        },
+        {
+            "download_count": 1180286,
+            "project": "django-celery"
+        },
+        {
+            "download_count": 1179046,
+            "project": "publicsuffix"
+        },
+        {
+            "download_count": 1178235,
+            "project": "astropy"
+        },
+        {
+            "download_count": 1177835,
+            "project": "konlpy"
+        },
+        {
+            "download_count": 1174516,
+            "project": "threadloop"
+        },
+        {
+            "download_count": 1174367,
+            "project": "radon"
+        },
+        {
+            "download_count": 1172767,
+            "project": "azure-cli-profile"
+        },
+        {
+            "download_count": 1172663,
+            "project": "jieba"
+        },
+        {
+            "download_count": 1172300,
+            "project": "pyfakefs"
+        },
+        {
+            "download_count": 1172278,
+            "project": "namedlist"
+        },
+        {
+            "download_count": 1171988,
+            "project": "pubnub"
+        },
+        {
+            "download_count": 1170778,
+            "project": "flasgger"
+        },
+        {
+            "download_count": 1168270,
+            "project": "pymeeus"
+        },
+        {
+            "download_count": 1164230,
+            "project": "transitions"
+        },
+        {
+            "download_count": 1163775,
+            "project": "visitor"
+        },
+        {
+            "download_count": 1161777,
+            "project": "django-redis-cache"
+        },
+        {
+            "download_count": 1161264,
+            "project": "lmdb"
+        },
+        {
+            "download_count": 1160572,
+            "project": "json-logging-py"
+        },
+        {
+            "download_count": 1159436,
+            "project": "protobuf3-to-dict"
+        },
+        {
+            "download_count": 1153262,
+            "project": "patch"
+        },
+        {
+            "download_count": 1152875,
+            "project": "horovod"
+        },
+        {
+            "download_count": 1152461,
+            "project": "pyzabbix"
+        },
+        {
+            "download_count": 1148339,
+            "project": "tailer"
+        },
+        {
+            "download_count": 1146680,
+            "project": "azure-cli-resource"
+        },
+        {
+            "download_count": 1145300,
+            "project": "etcd3"
+        },
+        {
+            "download_count": 1143148,
+            "project": "azure-cli-iot"
+        },
+        {
+            "download_count": 1143069,
+            "project": "djangorestframework-xml"
+        },
+        {
+            "download_count": 1139676,
+            "project": "logutils"
+        },
+        {
+            "download_count": 1138222,
+            "project": "javaproperties"
+        },
+        {
+            "download_count": 1137231,
+            "project": "azure-cli-extension"
+        },
+        {
+            "download_count": 1137033,
+            "project": "python-telegram-bot"
+        },
+        {
+            "download_count": 1135140,
+            "project": "platformio"
+        },
+        {
+            "download_count": 1134846,
+            "project": "xvfbwrapper"
+        },
+        {
+            "download_count": 1133241,
+            "project": "pytest-pythonpath"
+        },
+        {
+            "download_count": 1129508,
+            "project": "google-cloud-iam"
+        },
+        {
+            "download_count": 1129177,
+            "project": "pydrive"
+        },
+        {
+            "download_count": 1128895,
+            "project": "minio"
+        },
+        {
+            "download_count": 1128310,
+            "project": "python-heatclient"
+        },
+        {
+            "download_count": 1127447,
+            "project": "azure-cli-dls"
+        },
+        {
+            "download_count": 1127383,
+            "project": "demjson"
+        },
+        {
+            "download_count": 1126928,
+            "project": "pygal"
+        },
+        {
+            "download_count": 1123556,
+            "project": "azure-cli-role"
+        },
+        {
+            "download_count": 1123087,
+            "project": "azure-cli-monitor"
+        },
+        {
+            "download_count": 1121560,
+            "project": "azure-cli-storage"
+        },
+        {
+            "download_count": 1121500,
+            "project": "azure-cli-sql"
+        },
+        {
+            "download_count": 1121354,
+            "project": "azure-cli-keyvault"
+        },
+        {
+            "download_count": 1121021,
+            "project": "azure-cli-network"
+        },
+        {
+            "download_count": 1120955,
+            "project": "azure-cli-interactive"
+        },
+        {
+            "download_count": 1120732,
+            "project": "azure-cli-container"
+        },
+        {
+            "download_count": 1120661,
+            "project": "azure-cli-appservice"
+        },
+        {
+            "download_count": 1120619,
+            "project": "azure-cli-lab"
+        },
+        {
+            "download_count": 1120596,
+            "project": "pydub"
+        },
+        {
+            "download_count": 1120448,
+            "project": "azure-cli-acr"
+        },
+        {
+            "download_count": 1120440,
+            "project": "pem"
+        },
+        {
+            "download_count": 1119943,
+            "project": "azure-cli-acs"
+        },
+        {
+            "download_count": 1119731,
+            "project": "azure-cli-cognitiveservices"
+        },
+        {
+            "download_count": 1118667,
+            "project": "azure-cli-batch"
+        },
+        {
+            "download_count": 1118554,
+            "project": "azure-cli-rdbms"
+        },
+        {
+            "download_count": 1118179,
+            "project": "dumbyaml"
+        },
+        {
+            "download_count": 1118164,
+            "project": "azure-cli-cosmosdb"
+        },
+        {
+            "download_count": 1117990,
+            "project": "azure-cli-dla"
+        },
+        {
+            "download_count": 1117671,
+            "project": "azure-cli-vm"
+        },
+        {
+            "download_count": 1117663,
+            "project": "graphite-web"
+        },
+        {
+            "download_count": 1117633,
+            "project": "easy-thumbnails"
+        },
+        {
+            "download_count": 1117629,
+            "project": "ggplot"
+        },
+        {
+            "download_count": 1117326,
+            "project": "ncclient"
+        },
+        {
+            "download_count": 1115734,
+            "project": "azure-cli-cdn"
+        },
+        {
+            "download_count": 1115095,
+            "project": "ipyparallel"
+        },
+        {
+            "download_count": 1114052,
+            "project": "uritemplate-py"
+        },
+        {
+            "download_count": 1113849,
+            "project": "azure-cli-servicefabric"
+        },
+        {
+            "download_count": 1112830,
+            "project": "azure-cli-batchai"
+        },
+        {
+            "download_count": 1112111,
+            "project": "colander"
+        },
+        {
+            "download_count": 1112004,
+            "project": "libhoney"
+        },
+        {
+            "download_count": 1111031,
+            "project": "robotframework-selenium2library"
+        },
+        {
+            "download_count": 1110924,
+            "project": "azure-cli-reservations"
+        },
+        {
+            "download_count": 1110554,
+            "project": "selectors34"
+        },
+        {
+            "download_count": 1109781,
+            "project": "python-redis-lock"
+        },
+        {
+            "download_count": 1109474,
+            "project": "django-waffle"
+        },
+        {
+            "download_count": 1109341,
+            "project": "construct"
+        },
+        {
+            "download_count": 1107612,
+            "project": "pyhcl"
+        },
+        {
+            "download_count": 1107023,
+            "project": "allure-python-commons"
+        },
+        {
+            "download_count": 1106855,
+            "project": "opencv-python-headless"
+        },
+        {
+            "download_count": 1104732,
+            "project": "nibabel"
+        },
+        {
+            "download_count": 1104394,
+            "project": "ntplib"
+        },
+        {
+            "download_count": 1101855,
+            "project": "gsutil"
+        },
+        {
+            "download_count": 1099271,
+            "project": "python-redis"
+        },
+        {
+            "download_count": 1099171,
+            "project": "honeycomb-beeline"
+        },
+        {
+            "download_count": 1095266,
+            "project": "google-cloud-profiler"
+        },
+        {
+            "download_count": 1094548,
+            "project": "djangorestframework-csv"
+        },
+        {
+            "download_count": 1093507,
+            "project": "imageio-ffmpeg"
+        },
+        {
+            "download_count": 1093006,
+            "project": "rpyc"
+        },
+        {
+            "download_count": 1092127,
+            "project": "databricks-api"
+        },
+        {
+            "download_count": 1091012,
+            "project": "django-otp"
+        },
+        {
+            "download_count": 1089786,
+            "project": "atlassian-jwt-auth"
+        },
+        {
+            "download_count": 1089668,
+            "project": "pyscreeze"
+        },
+        {
+            "download_count": 1088119,
+            "project": "jsonlines"
+        },
+        {
+            "download_count": 1087785,
+            "project": "google-cloud-scheduler"
+        },
+        {
+            "download_count": 1086837,
+            "project": "py-moneyed"
+        },
+        {
+            "download_count": 1086168,
+            "project": "prospector"
+        },
+        {
+            "download_count": 1084845,
+            "project": "pyfcm"
+        },
+        {
+            "download_count": 1084588,
+            "project": "leather"
+        },
+        {
+            "download_count": 1083842,
+            "project": "flask-session"
+        },
+        {
+            "download_count": 1083772,
+            "project": "flask-principal"
+        },
+        {
+            "download_count": 1081797,
+            "project": "azure-mgmt-managedservices"
+        },
+        {
+            "download_count": 1080061,
+            "project": "zope-sqlalchemy"
+        },
+        {
+            "download_count": 1079118,
+            "project": "wikipedia"
+        },
+        {
+            "download_count": 1078680,
+            "project": "pyopengl"
+        },
+        {
+            "download_count": 1077281,
+            "project": "django-anymail"
+        },
+        {
+            "download_count": 1075981,
+            "project": "cov-core"
+        },
+        {
+            "download_count": 1075897,
+            "project": "azure-mgmt-netapp"
+        },
+        {
+            "download_count": 1074798,
+            "project": "pytest-flake8"
+        },
+        {
+            "download_count": 1071887,
+            "project": "requests-cache"
+        },
+        {
+            "download_count": 1071617,
+            "project": "plaster-pastedeploy"
+        },
+        {
+            "download_count": 1071057,
+            "project": "boxsdk"
+        },
+        {
+            "download_count": 1070181,
+            "project": "numpydoc"
+        },
+        {
+            "download_count": 1069130,
+            "project": "dodgy"
+        },
+        {
+            "download_count": 1067802,
+            "project": "sphinxcontrib-httpdomain"
+        },
+        {
+            "download_count": 1067667,
+            "project": "git-url-parse"
+        },
+        {
+            "download_count": 1065839,
+            "project": "restructuredtext-lint"
+        },
+        {
+            "download_count": 1063327,
+            "project": "django-storages-redux"
+        },
+        {
+            "download_count": 1061635,
+            "project": "h2o-pysparkling-2-4"
+        },
+        {
+            "download_count": 1060942,
+            "project": "flatbuffers"
+        },
+        {
+            "download_count": 1059650,
+            "project": "webassets"
+        },
+        {
+            "download_count": 1057175,
+            "project": "gdata"
+        },
+        {
+            "download_count": 1055836,
+            "project": "pytest-pep8"
+        },
+        {
+            "download_count": 1054787,
+            "project": "setoptconf"
+        },
+        {
+            "download_count": 1053777,
+            "project": "flask-graphql"
+        },
+        {
+            "download_count": 1051978,
+            "project": "lark-parser"
+        },
+        {
+            "download_count": 1046552,
+            "project": "google-cloud-datacatalog"
+        },
+        {
+            "download_count": 1045356,
+            "project": "requirements-detector"
+        },
+        {
+            "download_count": 1043870,
+            "project": "google-cloud-talent"
+        },
+        {
+            "download_count": 1043546,
+            "project": "utils"
+        },
+        {
+            "download_count": 1043075,
+            "project": "google-cloud-datalabeling"
+        },
+        {
+            "download_count": 1042791,
+            "project": "django-mailgun"
+        },
+        {
+            "download_count": 1041833,
+            "project": "google-cloud-os-login"
+        },
+        {
+            "download_count": 1040789,
+            "project": "plaster"
+        },
+        {
+            "download_count": 1040645,
+            "project": "google-cloud-webrisk"
+        },
+        {
+            "download_count": 1040329,
+            "project": "beaker"
+        },
+        {
+            "download_count": 1039677,
+            "project": "django-fsm"
+        },
+        {
+            "download_count": 1039618,
+            "project": "grpcio-health-checking"
+        },
+        {
+            "download_count": 1039569,
+            "project": "flask-apispec"
+        },
+        {
+            "download_count": 1037586,
+            "project": "flake8-comprehensions"
+        },
+        {
+            "download_count": 1036471,
+            "project": "pylint-flask"
+        },
+        {
+            "download_count": 1036185,
+            "project": "pygerduty"
+        },
+        {
+            "download_count": 1036096,
+            "project": "pudb"
+        },
+        {
+            "download_count": 1036044,
+            "project": "biopython"
+        },
+        {
+            "download_count": 1035148,
+            "project": "brewer2mpl"
+        },
+        {
+            "download_count": 1034346,
+            "project": "rpy2"
+        },
+        {
+            "download_count": 1033958,
+            "project": "dash-table"
+        },
+        {
+            "download_count": 1033827,
+            "project": "base58"
+        },
+        {
+            "download_count": 1033818,
+            "project": "proto-google-cloud-pubsub-v1"
+        },
+        {
+            "download_count": 1033419,
+            "project": "maxminddb-geolite2"
+        },
+        {
+            "download_count": 1032216,
+            "project": "bravado-core"
+        },
+        {
+            "download_count": 1031978,
+            "project": "starlette"
+        },
+        {
+            "download_count": 1031797,
+            "project": "cftime"
+        },
+        {
+            "download_count": 1030527,
+            "project": "papermill"
+        },
+        {
+            "download_count": 1030356,
+            "project": "pytest-aiohttp"
+        },
+        {
+            "download_count": 1028784,
+            "project": "neotime"
+        },
+        {
+            "download_count": 1028024,
+            "project": "django-grappelli"
+        },
+        {
+            "download_count": 1026556,
+            "project": "csvkit"
+        },
+        {
+            "download_count": 1026453,
+            "project": "azure-mgmt-appconfiguration"
+        },
+        {
+            "download_count": 1025532,
+            "project": "mando"
+        },
+        {
+            "download_count": 1025061,
+            "project": "python-pptx"
+        },
+        {
+            "download_count": 1024849,
+            "project": "futurist"
+        },
+        {
+            "download_count": 1024564,
+            "project": "tfx"
+        },
+        {
+            "download_count": 1023148,
+            "project": "shyaml"
+        },
+        {
+            "download_count": 1020560,
+            "project": "whoosh"
+        },
+        {
+            "download_count": 1019249,
+            "project": "netcdf4"
+        },
+        {
+            "download_count": 1018441,
+            "project": "braintree"
+        },
+        {
+            "download_count": 1017498,
+            "project": "pylint-celery"
+        },
+        {
+            "download_count": 1015935,
+            "project": "pyautogui"
+        },
+        {
+            "download_count": 1015329,
+            "project": "uritools"
+        },
+        {
+            "download_count": 1014941,
+            "project": "openshift"
+        },
+        {
+            "download_count": 1014682,
+            "project": "jinjasql"
+        },
+        {
+            "download_count": 1011470,
+            "project": "bunch"
+        },
+        {
+            "download_count": 1011345,
+            "project": "tribool"
+        },
+        {
+            "download_count": 1010041,
+            "project": "shade"
+        },
+        {
+            "download_count": 1009923,
+            "project": "geoalchemy2"
+        },
+        {
+            "download_count": 1007914,
+            "project": "stups-tokens"
+        },
+        {
+            "download_count": 1007728,
+            "project": "django-health-check"
+        },
+        {
+            "download_count": 1006511,
+            "project": "ansiwrap"
+        },
+        {
+            "download_count": 1005973,
+            "project": "djangorestframework-simplejwt"
+        },
+        {
+            "download_count": 1004447,
+            "project": "repoze-who"
+        },
+        {
+            "download_count": 1003341,
+            "project": "u-msgpack-python"
+        },
+        {
+            "download_count": 1002884,
+            "project": "psycogreen"
+        },
+        {
+            "download_count": 1002180,
+            "project": "pyroute2"
+        },
+        {
+            "download_count": 997107,
+            "project": "impyla"
+        },
+        {
+            "download_count": 997057,
+            "project": "functools"
+        },
+        {
+            "download_count": 995470,
+            "project": "rq-scheduler"
+        },
+        {
+            "download_count": 995174,
+            "project": "xarray"
+        },
+        {
+            "download_count": 995018,
+            "project": "dictionaries"
+        },
+        {
+            "download_count": 995017,
+            "project": "django-haystack"
+        },
+        {
+            "download_count": 992160,
+            "project": "check-manifest"
+        },
+        {
+            "download_count": 990507,
+            "project": "python-rapidjson"
+        },
+        {
+            "download_count": 989611,
+            "project": "py-vapid"
+        },
+        {
+            "download_count": 989525,
+            "project": "textwrap3"
+        },
+        {
+            "download_count": 988451,
+            "project": "soundfile"
+        },
+        {
+            "download_count": 987924,
+            "project": "python-string-utils"
+        },
+        {
+            "download_count": 987136,
+            "project": "pywinauto"
+        },
+        {
+            "download_count": 985267,
+            "project": "oslo-db"
+        },
+        {
+            "download_count": 984514,
+            "project": "xmlrunner"
+        },
+        {
+            "download_count": 983293,
+            "project": "pymdown-extensions"
+        },
+        {
+            "download_count": 982272,
+            "project": "sphinx-autobuild"
+        },
+        {
+            "download_count": 981717,
+            "project": "django-ckeditor"
+        },
+        {
+            "download_count": 979521,
+            "project": "sorl-thumbnail"
+        },
+        {
+            "download_count": 979220,
+            "project": "pysmb"
+        },
+        {
+            "download_count": 978290,
+            "project": "pymsgbox"
+        },
+        {
+            "download_count": 977363,
+            "project": "gapic-google-cloud-pubsub-v1"
+        },
+        {
+            "download_count": 977316,
+            "project": "flake8-isort"
+        },
+        {
+            "download_count": 976939,
+            "project": "tensorflow-probability"
+        },
+        {
+            "download_count": 976069,
+            "project": "oslo-messaging"
+        },
+        {
+            "download_count": 975772,
+            "project": "python-coveralls"
+        },
+        {
+            "download_count": 975418,
+            "project": "flex"
+        },
+        {
+            "download_count": 973597,
+            "project": "seleniumbase"
+        },
+        {
+            "download_count": 972851,
+            "project": "flake8-commas"
+        },
+        {
+            "download_count": 972025,
+            "project": "dirq"
+        },
+        {
+            "download_count": 971725,
+            "project": "glfw"
+        },
+        {
+            "download_count": 968128,
+            "project": "trains"
+        },
+        {
+            "download_count": 967325,
+            "project": "hjson"
+        },
+        {
+            "download_count": 966886,
+            "project": "fs"
+        },
+        {
+            "download_count": 965395,
+            "project": "pyahocorasick"
+        },
+        {
+            "download_count": 965068,
+            "project": "pytest-repeat"
+        },
+        {
+            "download_count": 964628,
+            "project": "swagger-ui-bundle"
+        },
+        {
+            "download_count": 964597,
+            "project": "typing-inspect"
+        },
+        {
+            "download_count": 964448,
+            "project": "sagemaker"
+        },
+        {
+            "download_count": 964057,
+            "project": "vobject"
+        },
+        {
+            "download_count": 963489,
+            "project": "dbfread"
+        },
+        {
+            "download_count": 962456,
+            "project": "bidict"
+        },
+        {
+            "download_count": 960677,
+            "project": "google-python-cloud-debugger"
+        },
+        {
+            "download_count": 958036,
+            "project": "cognite-sdk"
+        },
+        {
+            "download_count": 957690,
+            "project": "vulture"
+        },
+        {
+            "download_count": 957559,
+            "project": "pytweening"
+        },
+        {
+            "download_count": 954913,
+            "project": "circleci"
+        },
+        {
+            "download_count": 954734,
+            "project": "onnxmltools"
+        },
+        {
+            "download_count": 953896,
+            "project": "django-jsonfield"
+        },
+        {
+            "download_count": 952673,
+            "project": "skl2onnx"
+        },
+        {
+            "download_count": 951906,
+            "project": "azure-cli-configure"
+        },
+        {
+            "download_count": 951530,
+            "project": "readerwriterlock"
+        },
+        {
+            "download_count": 951124,
+            "project": "django-silk"
+        },
+        {
+            "download_count": 948790,
+            "project": "json-log-formatter"
+        },
+        {
+            "download_count": 948696,
+            "project": "stups-zign"
+        },
+        {
+            "download_count": 948084,
+            "project": "commentjson"
+        },
+        {
+            "download_count": 947759,
+            "project": "opentracing-instrumentation"
+        },
+        {
+            "download_count": 947140,
+            "project": "hurry-filesize"
+        },
+        {
+            "download_count": 946596,
+            "project": "httpie"
+        },
+        {
+            "download_count": 945434,
+            "project": "comtypes"
+        },
+        {
+            "download_count": 944648,
+            "project": "azure-cli-cloud"
+        },
+        {
+            "download_count": 942122,
+            "project": "stups-cli-support"
+        },
+        {
+            "download_count": 941812,
+            "project": "textfsm"
+        },
+        {
+            "download_count": 941227,
+            "project": "django-bulk-update"
+        },
+        {
+            "download_count": 940485,
+            "project": "pydotplus"
+        },
+        {
+            "download_count": 939994,
+            "project": "logilab-common"
+        },
+        {
+            "download_count": 939219,
+            "project": "thriftpy2"
+        },
+        {
+            "download_count": 937977,
+            "project": "pyldap"
+        },
+        {
+            "download_count": 937103,
+            "project": "progressbar"
+        },
+        {
+            "download_count": 936822,
+            "project": "limits"
+        },
+        {
+            "download_count": 935302,
+            "project": "empy"
+        },
+        {
+            "download_count": 933336,
+            "project": "interval"
+        },
+        {
+            "download_count": 933102,
+            "project": "twitter-common-lang"
+        },
+        {
+            "download_count": 932594,
+            "project": "sanic"
+        },
+        {
+            "download_count": 932344,
+            "project": "twitter-common-dirutil"
+        },
+        {
+            "download_count": 931618,
+            "project": "uhashring"
+        },
+        {
+            "download_count": 929734,
+            "project": "asana"
+        },
+        {
+            "download_count": 926851,
+            "project": "base64io"
+        },
+        {
+            "download_count": 925789,
+            "project": "django-user-agents"
+        },
+        {
+            "download_count": 924447,
+            "project": "reno"
+        },
+        {
+            "download_count": 923715,
+            "project": "netmiko"
+        },
+        {
+            "download_count": 923299,
+            "project": "twitter-common-options"
+        },
+        {
+            "download_count": 923153,
+            "project": "twitter-common-log"
+        },
+        {
+            "download_count": 923141,
+            "project": "parsley"
+        },
+        {
+            "download_count": 921602,
+            "project": "azure-cli-find"
+        },
+        {
+            "download_count": 920951,
+            "project": "azure-cli-redis"
+        },
+        {
+            "download_count": 920654,
+            "project": "aws-encryption-sdk-cli"
+        },
+        {
+            "download_count": 920109,
+            "project": "stop-words"
+        },
+        {
+            "download_count": 919963,
+            "project": "azure-cli-consumption"
+        },
+        {
+            "download_count": 919735,
+            "project": "pydevd"
+        },
+        {
+            "download_count": 919608,
+            "project": "azure-cli-billing"
+        },
+        {
+            "download_count": 919364,
+            "project": "azure-cli-feedback"
+        },
+        {
+            "download_count": 919204,
+            "project": "click-log"
+        },
+        {
+            "download_count": 916168,
+            "project": "pypd"
+        },
+        {
+            "download_count": 914683,
+            "project": "azure-cli-advisor"
+        },
+        {
+            "download_count": 914682,
+            "project": "neobolt"
+        },
+        {
+            "download_count": 911537,
+            "project": "azure-cli-eventgrid"
+        },
+        {
+            "download_count": 911471,
+            "project": "annoy"
+        },
+        {
+            "download_count": 910544,
+            "project": "scramp"
+        },
+        {
+            "download_count": 910046,
+            "project": "azure-cli-backup"
+        },
+        {
+            "download_count": 908651,
+            "project": "flask-assets"
+        },
+        {
+            "download_count": 908244,
+            "project": "oslo-service"
+        },
+        {
+            "download_count": 905587,
+            "project": "flask-bootstrap"
+        },
+        {
+            "download_count": 903282,
+            "project": "proglog"
+        },
+        {
+            "download_count": 903200,
+            "project": "keras2onnx"
+        },
+        {
+            "download_count": 902334,
+            "project": "plyvel"
+        },
+        {
+            "download_count": 900779,
+            "project": "pybluez"
+        },
+        {
+            "download_count": 899502,
+            "project": "pyudev"
+        },
+        {
+            "download_count": 899012,
+            "project": "testrepository"
+        },
+        {
+            "download_count": 898793,
+            "project": "oslo-policy"
+        },
+        {
+            "download_count": 897914,
+            "project": "pmdarima"
+        },
+        {
+            "download_count": 897653,
+            "project": "django-autocomplete-light"
+        },
+        {
+            "download_count": 895791,
+            "project": "artifactory"
+        },
+        {
+            "download_count": 895766,
+            "project": "pytest-variables"
+        },
+        {
+            "download_count": 895437,
+            "project": "azure-cli-eventhubs"
+        },
+        {
+            "download_count": 895142,
+            "project": "twitter-common-collections"
+        },
+        {
+            "download_count": 894979,
+            "project": "azure-cli-servicebus"
+        },
+        {
+            "download_count": 894815,
+            "project": "testresources"
+        },
+        {
+            "download_count": 894191,
+            "project": "pybs"
+        },
+        {
+            "download_count": 893842,
+            "project": "azure-cli-dms"
+        },
+        {
+            "download_count": 893592,
+            "project": "channels-redis"
+        },
+        {
+            "download_count": 893412,
+            "project": "junitparser"
+        },
+        {
+            "download_count": 891540,
+            "project": "tifffile"
+        },
+        {
+            "download_count": 891533,
+            "project": "easydict"
+        },
+        {
+            "download_count": 891481,
+            "project": "json2parquet"
+        },
+        {
+            "download_count": 891341,
+            "project": "pyicu"
+        },
+        {
+            "download_count": 888690,
+            "project": "azure-cli-ams"
+        },
+        {
+            "download_count": 886402,
+            "project": "pyeapi"
+        },
+        {
+            "download_count": 885171,
+            "project": "python-gilt"
+        },
+        {
+            "download_count": 884033,
+            "project": "azure-cli-search"
+        },
+        {
+            "download_count": 882989,
+            "project": "jupyter-nbextensions-configurator"
+        },
+        {
+            "download_count": 881790,
+            "project": "monthdelta"
+        },
+        {
+            "download_count": 880765,
+            "project": "pynput"
+        },
+        {
+            "download_count": 880406,
+            "project": "pyfiglet"
+        },
+        {
+            "download_count": 878563,
+            "project": "jsonnet"
+        },
+        {
+            "download_count": 874987,
+            "project": "pvlib"
+        },
+        {
+            "download_count": 874000,
+            "project": "jupyter-contrib-core"
+        },
+        {
+            "download_count": 872790,
+            "project": "mockito"
+        },
+        {
+            "download_count": 872554,
+            "project": "nosexcover"
+        },
+        {
+            "download_count": 872485,
+            "project": "peakutils"
+        },
+        {
+            "download_count": 872331,
+            "project": "rednose"
+        },
+        {
+            "download_count": 872127,
+            "project": "ansicolors"
+        },
+        {
+            "download_count": 871498,
+            "project": "j2cli"
+        },
+        {
+            "download_count": 868629,
+            "project": "awsiotpythonsdk"
+        },
+        {
+            "download_count": 867297,
+            "project": "pywfm"
+        },
+        {
+            "download_count": 866741,
+            "project": "lml"
+        },
+        {
+            "download_count": 865346,
+            "project": "imblearn"
+        },
+        {
+            "download_count": 863870,
+            "project": "openstackdocstheme"
+        },
+        {
+            "download_count": 863120,
+            "project": "jupyter-contrib-nbextensions"
+        },
+        {
+            "download_count": 860421,
+            "project": "molecule"
+        },
+        {
+            "download_count": 858716,
+            "project": "zstandard"
+        },
+        {
+            "download_count": 858408,
+            "project": "pyqrcode"
+        },
+        {
+            "download_count": 856466,
+            "project": "line-profiler"
+        },
+        {
+            "download_count": 856334,
+            "project": "flask-api"
+        },
+        {
+            "download_count": 856299,
+            "project": "honcho"
+        },
+        {
+            "download_count": 856226,
+            "project": "jplephem"
+        },
+        {
+            "download_count": 855767,
+            "project": "rpqueue"
+        },
+        {
+            "download_count": 854839,
+            "project": "autoflake"
+        },
+        {
+            "download_count": 854260,
+            "project": "azure-mgmt-apimanagement"
+        },
+        {
+            "download_count": 854182,
+            "project": "cognite-model-hosting"
+        },
+        {
+            "download_count": 852933,
+            "project": "pytest-dependency"
+        },
+        {
+            "download_count": 852580,
+            "project": "pytest-pylint"
+        },
+        {
+            "download_count": 852418,
+            "project": "deepmerge"
+        },
+        {
+            "download_count": 850683,
+            "project": "jupyter-latex-envs"
+        },
+        {
+            "download_count": 849484,
+            "project": "polyline"
+        },
+        {
+            "download_count": 849092,
+            "project": "yappi"
+        },
+        {
+            "download_count": 849002,
+            "project": "logmatic-python"
+        },
+        {
+            "download_count": 848508,
+            "project": "sgp4"
+        },
+        {
+            "download_count": 848205,
+            "project": "onnxconverter-common"
+        },
+        {
+            "download_count": 847724,
+            "project": "django-pipeline"
+        },
+        {
+            "download_count": 847508,
+            "project": "envs"
+        },
+        {
+            "download_count": 847487,
+            "project": "jupyter-highlight-selected-word"
+        },
+        {
+            "download_count": 846088,
+            "project": "googletrans"
+        },
+        {
+            "download_count": 845652,
+            "project": "mkdocs-material"
+        },
+        {
+            "download_count": 845331,
+            "project": "django-bootstrap3"
+        },
+        {
+            "download_count": 843583,
+            "project": "isoweek"
+        },
+        {
+            "download_count": 843510,
+            "project": "image"
+        },
+        {
+            "download_count": 842232,
+            "project": "solartime"
+        },
+        {
+            "download_count": 841714,
+            "project": "flask-debugtoolbar"
+        },
+        {
+            "download_count": 840214,
+            "project": "rasterio"
+        },
+        {
+            "download_count": 839139,
+            "project": "diamond"
+        },
+        {
+            "download_count": 837673,
+            "project": "mailchimp3"
+        },
+        {
+            "download_count": 835610,
+            "project": "oslo-middleware"
+        },
+        {
+            "download_count": 835257,
+            "project": "mutagen"
+        },
+        {
+            "download_count": 834695,
+            "project": "catalogue"
+        },
+        {
+            "download_count": 834133,
+            "project": "faulthandler"
+        },
+        {
+            "download_count": 832671,
+            "project": "sacrebleu"
+        },
+        {
+            "download_count": 832545,
+            "project": "python-jose-cryptodome"
+        },
+        {
+            "download_count": 831517,
+            "project": "zeroconf"
+        },
+        {
+            "download_count": 830534,
+            "project": "jinja2-pluralize"
+        },
+        {
+            "download_count": 829948,
+            "project": "suds-py3"
+        },
+        {
+            "download_count": 829228,
+            "project": "pandasql"
+        },
+        {
+            "download_count": 828892,
+            "project": "logstash-formatter"
+        },
+        {
+            "download_count": 828549,
+            "project": "lifelines"
+        },
+        {
+            "download_count": 827727,
+            "project": "liac-arff"
+        },
+        {
+            "download_count": 827554,
+            "project": "diff-cover"
+        },
+        {
+            "download_count": 826205,
+            "project": "elastic-apm"
+        },
+        {
+            "download_count": 826135,
+            "project": "django-coverage-plugin"
+        },
+        {
+            "download_count": 825300,
+            "project": "skyfield"
+        },
+        {
+            "download_count": 824924,
+            "project": "drf-extensions"
+        },
+        {
+            "download_count": 823613,
+            "project": "databricks-pypi-extras"
+        },
+        {
+            "download_count": 823180,
+            "project": "azure-cli-relay"
+        },
+        {
+            "download_count": 822954,
+            "project": "azure-cli-iotcentral"
+        },
+        {
+            "download_count": 822898,
+            "project": "azure-cli-hdinsight"
+        },
+        {
+            "download_count": 822664,
+            "project": "azure-cli-maps"
+        },
+        {
+            "download_count": 822562,
+            "project": "azure-cli-botservice"
+        },
+        {
+            "download_count": 822180,
+            "project": "azure-cli-signalr"
+        },
+        {
+            "download_count": 822129,
+            "project": "lime"
+        },
+        {
+            "download_count": 821534,
+            "project": "transifex-client"
+        },
+        {
+            "download_count": 820293,
+            "project": "azure-cli-policyinsights"
+        },
+        {
+            "download_count": 819714,
+            "project": "django-classy-tags"
+        },
+        {
+            "download_count": 818561,
+            "project": "clickhouse-driver"
+        },
+        {
+            "download_count": 815459,
+            "project": "scrapy-splash"
+        },
+        {
+            "download_count": 815166,
+            "project": "pybrake"
+        },
+        {
+            "download_count": 814136,
+            "project": "carbon"
+        },
+        {
+            "download_count": 813628,
+            "project": "wmi"
+        },
+        {
+            "download_count": 810452,
+            "project": "python-ironicclient"
+        },
+        {
+            "download_count": 808082,
+            "project": "pusher"
+        },
+        {
+            "download_count": 806951,
+            "project": "datadiff"
+        },
+        {
+            "download_count": 806876,
+            "project": "js2py"
+        },
+        {
+            "download_count": 805430,
+            "project": "urlobject"
+        },
+        {
+            "download_count": 804845,
+            "project": "tinydb"
+        },
+        {
+            "download_count": 804621,
+            "project": "pytest-randomly"
+        },
+        {
+            "download_count": 804371,
+            "project": "placebo"
+        },
+        {
+            "download_count": 804270,
+            "project": "progress"
+        },
+        {
+            "download_count": 804201,
+            "project": "nimbusml"
+        },
+        {
+            "download_count": 803677,
+            "project": "ffmpeg-python"
+        },
+        {
+            "download_count": 803390,
+            "project": "pandas-profiling"
+        },
+        {
+            "download_count": 803033,
+            "project": "pyspark-flame"
+        },
+        {
+            "download_count": 802518,
+            "project": "nose-xunitmp"
+        },
+        {
+            "download_count": 801270,
+            "project": "ftputil"
+        },
+        {
+            "download_count": 800466,
+            "project": "pyexcel-io"
+        },
+        {
+            "download_count": 800452,
+            "project": "pysam"
+        },
+        {
+            "download_count": 800033,
+            "project": "oslo-cache"
+        },
+        {
+            "download_count": 799400,
+            "project": "jinja2schema"
+        },
+        {
+            "download_count": 797811,
+            "project": "skyfield-data"
+        },
+        {
+            "download_count": 797080,
+            "project": "bashate"
+        },
+        {
+            "download_count": 796778,
+            "project": "pytest-base-url"
+        },
+        {
+            "download_count": 795722,
+            "project": "mpld3"
+        },
+        {
+            "download_count": 795138,
+            "project": "pytest-selenium"
+        },
+        {
+            "download_count": 794945,
+            "project": "facebookads"
+        },
+        {
+            "download_count": 792726,
+            "project": "testing-common-database"
+        },
+        {
+            "download_count": 792699,
+            "project": "requests-unixsocket"
+        },
+        {
+            "download_count": 791454,
+            "project": "ansible-tower-cli"
+        },
+        {
+            "download_count": 790178,
+            "project": "dlib"
+        },
+        {
+            "download_count": 788016,
+            "project": "web3"
+        },
+        {
+            "download_count": 787379,
+            "project": "pygresql"
+        },
+        {
+            "download_count": 786501,
+            "project": "update-checker"
+        },
+        {
+            "download_count": 784385,
+            "project": "pygetwindow"
+        },
+        {
+            "download_count": 783264,
+            "project": "allure-pytest"
+        },
+        {
+            "download_count": 782719,
+            "project": "pycontracts"
+        },
+        {
+            "download_count": 782492,
+            "project": "wsgi-request-logger"
+        },
+        {
+            "download_count": 780141,
+            "project": "m2crypto"
+        },
+        {
+            "download_count": 779854,
+            "project": "scrapyd"
+        },
+        {
+            "download_count": 779681,
+            "project": "centrosome"
+        },
+        {
+            "download_count": 779517,
+            "project": "flask-mongoengine"
+        },
+        {
+            "download_count": 778027,
+            "project": "dataclasses-json"
+        },
+        {
+            "download_count": 777762,
+            "project": "splinter"
+        },
+        {
+            "download_count": 777345,
+            "project": "htmlparser"
+        },
+        {
+            "download_count": 775376,
+            "project": "loguru"
+        },
+        {
+            "download_count": 774793,
+            "project": "dumb-init"
+        },
+        {
+            "download_count": 774504,
+            "project": "python-designateclient"
+        },
+        {
+            "download_count": 774495,
+            "project": "speaklater"
+        },
+        {
+            "download_count": 773679,
+            "project": "eth-utils"
+        },
+        {
+            "download_count": 772719,
+            "project": "spark-df-profiling"
+        },
+        {
+            "download_count": 772355,
+            "project": "javabridge"
+        },
+        {
+            "download_count": 771179,
+            "project": "us"
+        },
+        {
+            "download_count": 769552,
+            "project": "xdg"
+        },
+        {
+            "download_count": 769306,
+            "project": "librabbitmq"
+        },
+        {
+            "download_count": 769240,
+            "project": "lepl"
+        },
+        {
+            "download_count": 769163,
+            "project": "pysolr"
+        },
+        {
+            "download_count": 768526,
+            "project": "google-cloud-happybase"
+        },
+        {
+            "download_count": 768426,
+            "project": "graphene-sqlalchemy"
+        },
+        {
+            "download_count": 768057,
+            "project": "google-endpoints-api-management"
+        },
+        {
+            "download_count": 767991,
+            "project": "affine"
+        },
+        {
+            "download_count": 767570,
+            "project": "colour"
+        },
+        {
+            "download_count": 764562,
+            "project": "django-constance"
+        },
+        {
+            "download_count": 762359,
+            "project": "infinity"
+        },
+        {
+            "download_count": 761920,
+            "project": "djangorestframework-filters"
+        },
+        {
+            "download_count": 760164,
+            "project": "robotremoteserver"
+        },
+        {
+            "download_count": 759992,
+            "project": "keystonemiddleware"
+        },
+        {
+            "download_count": 758677,
+            "project": "distribute"
+        },
+        {
+            "download_count": 757044,
+            "project": "hyper"
+        },
+        {
+            "download_count": 755707,
+            "project": "pyscreenshot"
+        },
+        {
+            "download_count": 755554,
+            "project": "google-endpoints"
+        },
+        {
+            "download_count": 754592,
+            "project": "intervals"
+        },
+        {
+            "download_count": 754564,
+            "project": "pysal"
+        },
+        {
+            "download_count": 754317,
+            "project": "svgwrite"
+        },
+        {
+            "download_count": 753732,
+            "project": "cognite-logger"
+        },
+        {
+            "download_count": 753586,
+            "project": "pytest-spark"
+        },
+        {
+            "download_count": 753503,
+            "project": "nose-parallel"
+        },
+        {
+            "download_count": 753048,
+            "project": "dynaconf"
+        },
+        {
+            "download_count": 752651,
+            "project": "mahotas"
+        },
+        {
+            "download_count": 751112,
+            "project": "databricks-pypi"
+        },
+        {
+            "download_count": 749141,
+            "project": "mysql"
+        },
+        {
+            "download_count": 749102,
+            "project": "flake8-builtins"
+        },
+        {
+            "download_count": 748778,
+            "project": "humpty"
+        },
+        {
+            "download_count": 748490,
+            "project": "pyspark-dist-explore"
+        },
+        {
+            "download_count": 746836,
+            "project": "django-annoying"
+        },
+        {
+            "download_count": 746781,
+            "project": "tinyrpc"
+        },
+        {
+            "download_count": 746415,
+            "project": "wincertstore"
+        },
+        {
+            "download_count": 745591,
+            "project": "django-axes"
+        },
+        {
+            "download_count": 742692,
+            "project": "aerospike"
+        },
+        {
+            "download_count": 739560,
+            "project": "pycadf"
+        },
+        {
+            "download_count": 739333,
+            "project": "django-csp"
+        },
+        {
+            "download_count": 737212,
+            "project": "django-compat"
+        },
+        {
+            "download_count": 735567,
+            "project": "azure-cli-security"
+        },
+        {
+            "download_count": 735347,
+            "project": "asyncssh"
+        },
+        {
+            "download_count": 734370,
+            "project": "robotframework-sshlibrary"
+        },
+        {
+            "download_count": 734265,
+            "project": "concurrentloghandler"
+        },
+        {
+            "download_count": 734033,
+            "project": "django-object-actions"
+        },
+        {
+            "download_count": 733362,
+            "project": "azure-cli-kusto"
+        },
+        {
+            "download_count": 733347,
+            "project": "tensorflowonspark"
+        },
+        {
+            "download_count": 732849,
+            "project": "aioresponses"
+        },
+        {
+            "download_count": 731576,
+            "project": "jenkins-job-builder"
+        },
+        {
+            "download_count": 731088,
+            "project": "bravado"
+        },
+        {
+            "download_count": 728665,
+            "project": "prometheus-flask-exporter"
+        },
+        {
+            "download_count": 727540,
+            "project": "pprint"
+        },
+        {
+            "download_count": 726931,
+            "project": "jaeger-client"
+        },
+        {
+            "download_count": 726893,
+            "project": "nose-parameterized"
+        },
+        {
+            "download_count": 726613,
+            "project": "pyrect"
+        },
+        {
+            "download_count": 726590,
+            "project": "htcondor"
+        },
+        {
+            "download_count": 723307,
+            "project": "pip-licenses"
+        },
+        {
+            "download_count": 723172,
+            "project": "mlxtend"
+        },
+        {
+            "download_count": 721353,
+            "project": "py2-ipaddress"
+        },
+        {
+            "download_count": 719973,
+            "project": "osprofiler"
+        },
+        {
+            "download_count": 719532,
+            "project": "pandas-datareader"
+        },
+        {
+            "download_count": 718534,
+            "project": "ngram"
+        },
+        {
+            "download_count": 718362,
+            "project": "h2o"
+        },
+        {
+            "download_count": 717198,
+            "project": "homeassistant"
+        },
+        {
+            "download_count": 716605,
+            "project": "pytest-mypy"
+        },
+        {
+            "download_count": 716398,
+            "project": "eth-typing"
+        },
+        {
+            "download_count": 716263,
+            "project": "django-auth-ldap"
+        },
+        {
+            "download_count": 714558,
+            "project": "jsonmerge"
+        },
+        {
+            "download_count": 714088,
+            "project": "django-cacheops"
+        },
+        {
+            "download_count": 713825,
+            "project": "python-bioformats"
+        },
+        {
+            "download_count": 713644,
+            "project": "stomp-py"
+        },
+        {
+            "download_count": 713346,
+            "project": "scrypt"
+        },
+        {
+            "download_count": 710233,
+            "project": "prokaryote"
+        },
+        {
+            "download_count": 709352,
+            "project": "testing-postgresql"
+        },
+        {
+            "download_count": 708670,
+            "project": "azure-cli-sqlvm"
+        },
+        {
+            "download_count": 708401,
+            "project": "shrub-py"
+        },
+        {
+            "download_count": 708219,
+            "project": "django-tinymce"
+        },
+        {
+            "download_count": 708181,
+            "project": "scrapyd-client"
+        },
+        {
+            "download_count": 707527,
+            "project": "apiclient"
+        },
+        {
+            "download_count": 707254,
+            "project": "imgaug"
+        },
+        {
+            "download_count": 707113,
+            "project": "nbsphinx"
+        },
+        {
+            "download_count": 707083,
+            "project": "waiting"
+        },
+        {
+            "download_count": 705264,
+            "project": "colorclass"
+        },
+        {
+            "download_count": 703706,
+            "project": "consul-kv"
+        },
+        {
+            "download_count": 702978,
+            "project": "html"
+        },
+        {
+            "download_count": 702738,
+            "project": "rlp"
+        },
+        {
+            "download_count": 702351,
+            "project": "nose-cov"
+        },
+        {
+            "download_count": 702193,
+            "project": "python-twitter"
+        },
+        {
+            "download_count": 701163,
+            "project": "splunk-sdk"
+        },
+        {
+            "download_count": 700250,
+            "project": "fastcluster"
+        },
+        {
+            "download_count": 698719,
+            "project": "yamale"
+        },
+        {
+            "download_count": 698219,
+            "project": "pyramid-arima"
+        },
+        {
+            "download_count": 697868,
+            "project": "termstyle"
+        },
+        {
+            "download_count": 697474,
+            "project": "xstatic-bootstrap-scss"
+        },
+        {
+            "download_count": 695211,
+            "project": "pyrouge"
+        },
+        {
+            "download_count": 694603,
+            "project": "snuggs"
+        },
+        {
+            "download_count": 693279,
+            "project": "python-barbicanclient"
+        },
+        {
+            "download_count": 693249,
+            "project": "pyaudio"
+        },
+        {
+            "download_count": 692957,
+            "project": "cvxpy"
+        },
+        {
+            "download_count": 692001,
+            "project": "async-lru"
+        },
+        {
+            "download_count": 691907,
+            "project": "mizani"
+        },
+        {
+            "download_count": 691307,
+            "project": "petname"
+        },
+        {
+            "download_count": 691300,
+            "project": "rouge"
+        },
+        {
+            "download_count": 689543,
+            "project": "agate-dbf"
+        },
+        {
+            "download_count": 688981,
+            "project": "fastapi"
+        },
+        {
+            "download_count": 687783,
+            "project": "category-encoders"
+        },
+        {
+            "download_count": 687548,
+            "project": "oyaml"
+        },
+        {
+            "download_count": 687522,
+            "project": "gnureadline"
+        },
+        {
+            "download_count": 687081,
+            "project": "rake-nltk"
+        },
+        {
+            "download_count": 686921,
+            "project": "titlecase"
+        },
+        {
+            "download_count": 685900,
+            "project": "robotframework-pabot"
+        },
+        {
+            "download_count": 685000,
+            "project": "pygraphviz"
+        },
+        {
+            "download_count": 684549,
+            "project": "awesome-slugify"
+        },
+        {
+            "download_count": 684157,
+            "project": "ibmiotf"
+        },
+        {
+            "download_count": 683792,
+            "project": "cpplint"
+        },
+        {
+            "download_count": 683191,
+            "project": "transforms3d"
+        },
+        {
+            "download_count": 681681,
+            "project": "junos-eznc"
+        },
+        {
+            "download_count": 680817,
+            "project": "edn-format"
+        },
+        {
+            "download_count": 680484,
+            "project": "kappa"
+        },
+        {
+            "download_count": 680439,
+            "project": "dist-keras"
+        },
+        {
+            "download_count": 679352,
+            "project": "wagtail"
+        },
+        {
+            "download_count": 679107,
+            "project": "xstatic"
+        },
+        {
+            "download_count": 678488,
+            "project": "sparkpost"
+        },
+        {
+            "download_count": 677907,
+            "project": "django-configurations"
+        },
+        {
+            "download_count": 676671,
+            "project": "warrant"
+        },
+        {
+            "download_count": 675669,
+            "project": "coremltools"
+        },
+        {
+            "download_count": 675660,
+            "project": "pystemmer"
+        },
+        {
+            "download_count": 674957,
+            "project": "piexif"
+        },
+        {
+            "download_count": 674880,
+            "project": "xstatic-jquery"
+        },
+        {
+            "download_count": 674487,
+            "project": "ebaysdk"
+        },
+        {
+            "download_count": 672829,
+            "project": "durationpy"
+        },
+        {
+            "download_count": 670913,
+            "project": "odo"
+        },
+        {
+            "download_count": 670060,
+            "project": "django-admin-rangefilter"
+        },
+        {
+            "download_count": 669445,
+            "project": "pytrie"
+        },
+        {
+            "download_count": 669083,
+            "project": "wxpython"
+        },
+        {
+            "download_count": 667717,
+            "project": "ovs"
+        },
+        {
+            "download_count": 667474,
+            "project": "ecos"
+        },
+        {
+            "download_count": 666906,
+            "project": "tinycss"
+        },
+        {
+            "download_count": 666871,
+            "project": "osqp"
+        },
+        {
+            "download_count": 666786,
+            "project": "eth-hash"
+        },
+        {
+            "download_count": 666275,
+            "project": "requirements-parser"
+        },
+        {
+            "download_count": 665693,
+            "project": "glom"
+        },
+        {
+            "download_count": 661492,
+            "project": "cbor"
+        },
+        {
+            "download_count": 661312,
+            "project": "typeguard"
+        },
+        {
+            "download_count": 660570,
+            "project": "auth0-python"
+        },
+        {
+            "download_count": 660013,
+            "project": "grpcio-opentracing"
+        },
+        {
+            "download_count": 659377,
+            "project": "fastcache"
+        },
+        {
+            "download_count": 659193,
+            "project": "eth-abi"
+        },
+        {
+            "download_count": 659114,
+            "project": "django-modelcluster"
+        },
+        {
+            "download_count": 657030,
+            "project": "jgscm"
+        },
+        {
+            "download_count": 656904,
+            "project": "xlocal"
+        },
+        {
+            "download_count": 656475,
+            "project": "plotnine"
+        },
+        {
+            "download_count": 655373,
+            "project": "oslo-reports"
+        },
+        {
+            "download_count": 654961,
+            "project": "selectors2"
+        },
+        {
+            "download_count": 653743,
+            "project": "pyexcel"
+        },
+        {
+            "download_count": 653621,
+            "project": "mongoalchemy"
+        },
+        {
+            "download_count": 652980,
+            "project": "django-celery-monitor"
+        },
+        {
+            "download_count": 652428,
+            "project": "django-modeltranslation"
+        },
+        {
+            "download_count": 651995,
+            "project": "m3-cdecimal"
+        },
+        {
+            "download_count": 651743,
+            "project": "django-prometheus"
+        },
+        {
+            "download_count": 649810,
+            "project": "pylama"
+        },
+        {
+            "download_count": 649753,
+            "project": "pygtrie"
+        },
+        {
+            "download_count": 649300,
+            "project": "zappa"
+        },
+        {
+            "download_count": 648596,
+            "project": "lambda-packages"
+        },
+        {
+            "download_count": 648298,
+            "project": "chainmap"
+        },
+        {
+            "download_count": 648259,
+            "project": "sqlitedict"
+        },
+        {
+            "download_count": 646634,
+            "project": "weakrefmethod"
+        },
+        {
+            "download_count": 646583,
+            "project": "pyephem"
+        },
+        {
+            "download_count": 646316,
+            "project": "pecan"
+        },
+        {
+            "download_count": 646192,
+            "project": "grpcio-testing"
+        },
+        {
+            "download_count": 645984,
+            "project": "ptpython"
+        },
+        {
+            "download_count": 645726,
+            "project": "uwsgitop"
+        },
+        {
+            "download_count": 645705,
+            "project": "xattr"
+        },
+        {
+            "download_count": 645542,
+            "project": "sseclient"
+        },
+        {
+            "download_count": 644773,
+            "project": "distance"
+        },
+        {
+            "download_count": 641990,
+            "project": "crayons"
+        },
+        {
+            "download_count": 641666,
+            "project": "scs"
+        },
+        {
+            "download_count": 641155,
+            "project": "youtube-dl-server"
+        },
+        {
+            "download_count": 640583,
+            "project": "pydicom"
+        },
+        {
+            "download_count": 640562,
+            "project": "disklist"
+        },
+        {
+            "download_count": 640283,
+            "project": "oslo-versionedobjects"
+        },
+        {
+            "download_count": 639381,
+            "project": "property-manager"
+        },
+        {
+            "download_count": 639343,
+            "project": "pyramid-tm"
+        },
+        {
+            "download_count": 638235,
+            "project": "civis"
+        },
+        {
+            "download_count": 638153,
+            "project": "flask-sslify"
+        },
+        {
+            "download_count": 637064,
+            "project": "tflearn"
+        },
+        {
+            "download_count": 635676,
+            "project": "pygeoif"
+        },
+        {
+            "download_count": 635375,
+            "project": "anytree"
+        },
+        {
+            "download_count": 634585,
+            "project": "prawcore"
+        },
+        {
+            "download_count": 633579,
+            "project": "httmock"
+        },
+        {
+            "download_count": 633551,
+            "project": "praw"
+        },
+        {
+            "download_count": 633536,
+            "project": "blaze"
+        },
+        {
+            "download_count": 630085,
+            "project": "dogstatsd-python"
+        },
+        {
+            "download_count": 629789,
+            "project": "df2gspread"
+        },
+        {
+            "download_count": 629728,
+            "project": "intelhex"
+        },
+        {
+            "download_count": 628881,
+            "project": "flask-pymongo"
+        },
+        {
+            "download_count": 628208,
+            "project": "ara"
+        },
+        {
+            "download_count": 628016,
+            "project": "supervisor-checks"
+        },
+        {
+            "download_count": 626928,
+            "project": "portpicker"
+        },
+        {
+            "download_count": 626822,
+            "project": "willow"
+        },
+        {
+            "download_count": 624147,
+            "project": "django-admin-sortable2"
+        },
+        {
+            "download_count": 623219,
+            "project": "py2neo"
+        },
+        {
+            "download_count": 622538,
+            "project": "dis3"
+        },
+        {
+            "download_count": 621132,
+            "project": "dask-ml"
+        },
+        {
+            "download_count": 620942,
+            "project": "doc8"
+        },
+        {
+            "download_count": 620211,
+            "project": "duo-client"
+        },
+        {
+            "download_count": 620141,
+            "project": "django-rq"
+        },
+        {
+            "download_count": 619804,
+            "project": "cronex"
+        },
+        {
+            "download_count": 619350,
+            "project": "quandl"
+        },
+        {
+            "download_count": 616490,
+            "project": "fpdf"
+        },
+        {
+            "download_count": 615575,
+            "project": "dpkt"
+        },
+        {
+            "download_count": 615407,
+            "project": "img2pdf"
+        },
+        {
+            "download_count": 614677,
+            "project": "twython"
+        },
+        {
+            "download_count": 612945,
+            "project": "django-tastypie"
+        },
+        {
+            "download_count": 612710,
+            "project": "fastkml"
+        },
+        {
+            "download_count": 611741,
+            "project": "pychef"
+        },
+        {
+            "download_count": 611286,
+            "project": "pbkdf2"
+        },
+        {
+            "download_count": 611114,
+            "project": "envparse"
+        },
+        {
+            "download_count": 610989,
+            "project": "pytest-profiling"
+        },
+        {
+            "download_count": 610971,
+            "project": "face"
+        },
+        {
+            "download_count": 609341,
+            "project": "sphinxcontrib-plantuml"
+        },
+        {
+            "download_count": 609245,
+            "project": "pockets"
+        },
+        {
+            "download_count": 609190,
+            "project": "pex"
+        },
+        {
+            "download_count": 607985,
+            "project": "codacy-coverage"
+        },
+        {
+            "download_count": 607915,
+            "project": "smtpapi"
+        },
+        {
+            "download_count": 607247,
+            "project": "recordtype"
+        },
+        {
+            "download_count": 604747,
+            "project": "django-sekizai"
+        },
+        {
+            "download_count": 604376,
+            "project": "glances"
+        },
+        {
+            "download_count": 603378,
+            "project": "pysha3"
+        },
+        {
+            "download_count": 602654,
+            "project": "sphinxcontrib-napoleon"
+        },
+        {
+            "download_count": 601446,
+            "project": "authlib"
+        },
+        {
+            "download_count": 601374,
+            "project": "python-intercom"
+        },
+        {
+            "download_count": 600575,
+            "project": "flask-limiter"
+        },
+        {
+            "download_count": 600277,
+            "project": "python-statsd"
+        },
+        {
+            "download_count": 599602,
+            "project": "draftjs-exporter"
+        },
+        {
+            "download_count": 598699,
+            "project": "flake8-debugger"
+        },
+        {
+            "download_count": 598674,
+            "project": "oslo-upgradecheck"
+        },
+        {
+            "download_count": 598119,
+            "project": "libvirt-python"
+        },
+        {
+            "download_count": 597629,
+            "project": "cron-descriptor"
+        },
+        {
+            "download_count": 597332,
+            "project": "wsproto"
+        },
+        {
+            "download_count": 597238,
+            "project": "asyncio-nats-client"
+        },
+        {
+            "download_count": 597234,
+            "project": "pytorch-pretrained-bert"
+        },
+        {
+            "download_count": 597090,
+            "project": "fixture"
+        },
+        {
+            "download_count": 596614,
+            "project": "alpha-vantage"
+        },
+        {
+            "download_count": 596308,
+            "project": "edgegrid-python"
+        },
+        {
+            "download_count": 596233,
+            "project": "eth-keys"
+        },
+        {
+            "download_count": 596043,
+            "project": "impacket"
+        },
+        {
+            "download_count": 595545,
+            "project": "win-inet-pton"
+        },
+        {
+            "download_count": 595350,
+            "project": "mox3"
+        },
+        {
+            "download_count": 595102,
+            "project": "rarfile"
+        },
+        {
+            "download_count": 593426,
+            "project": "yarn-api-client"
+        },
+        {
+            "download_count": 593291,
+            "project": "colored"
+        },
+        {
+            "download_count": 592042,
+            "project": "txaws"
+        },
+        {
+            "download_count": 591199,
+            "project": "speechrecognition"
+        },
+        {
+            "download_count": 591134,
+            "project": "frozen-flask"
+        },
+        {
+            "download_count": 590993,
+            "project": "django-log-request-id"
+        },
+        {
+            "download_count": 589804,
+            "project": "funcparserlib"
+        },
+        {
+            "download_count": 589445,
+            "project": "djangorestframework-camel-case"
+        },
+        {
+            "download_count": 588165,
+            "project": "oslo-privsep"
+        },
+        {
+            "download_count": 587455,
+            "project": "tf-nightly"
+        },
+        {
+            "download_count": 587372,
+            "project": "caniusepython3"
+        },
+        {
+            "download_count": 586559,
+            "project": "envtpl"
+        },
+        {
+            "download_count": 586159,
+            "project": "mockredispy"
+        },
+        {
+            "download_count": 586076,
+            "project": "properties"
+        },
+        {
+            "download_count": 585723,
+            "project": "ansi2html"
+        },
+        {
+            "download_count": 585253,
+            "project": "pyzipcode"
+        },
+        {
+            "download_count": 584788,
+            "project": "sphinx-autodoc-typehints"
+        },
+        {
+            "download_count": 583551,
+            "project": "environs"
+        },
+        {
+            "download_count": 583517,
+            "project": "junit2html"
+        },
+        {
+            "download_count": 583339,
+            "project": "yoyo-migrations"
+        },
+        {
+            "download_count": 582030,
+            "project": "junitxml"
+        },
+        {
+            "download_count": 580290,
+            "project": "django-heroku"
+        },
+        {
+            "download_count": 579947,
+            "project": "chart-studio"
+        },
+        {
+            "download_count": 579171,
+            "project": "pyexecjs"
+        },
+        {
+            "download_count": 578063,
+            "project": "datasketch"
+        },
+        {
+            "download_count": 577373,
+            "project": "django-autoslug"
+        },
+        {
+            "download_count": 577155,
+            "project": "pyrepl"
+        },
+        {
+            "download_count": 576195,
+            "project": "polygon-geohasher"
+        },
+        {
+            "download_count": 575933,
+            "project": "addict"
+        },
+        {
+            "download_count": 575932,
+            "project": "tooz"
+        },
+        {
+            "download_count": 575622,
+            "project": "mecab-python3"
+        },
+        {
+            "download_count": 575453,
+            "project": "shippo"
+        },
+        {
+            "download_count": 575188,
+            "project": "bindep"
+        },
+        {
+            "download_count": 574250,
+            "project": "requests-html"
+        },
+        {
+            "download_count": 573651,
+            "project": "python-louvain"
+        },
+        {
+            "download_count": 572787,
+            "project": "zmq"
+        },
+        {
+            "download_count": 571317,
+            "project": "eth-account"
+        },
+        {
+            "download_count": 571250,
+            "project": "ortools"
+        },
+        {
+            "download_count": 570798,
+            "project": "automaton"
+        },
+        {
+            "download_count": 570379,
+            "project": "django-cors-middleware"
+        },
+        {
+            "download_count": 570213,
+            "project": "rq-dashboard"
+        },
+        {
+            "download_count": 569967,
+            "project": "oslo-rootwrap"
+        },
+        {
+            "download_count": 569775,
+            "project": "pilkit"
+        },
+        {
+            "download_count": 569584,
+            "project": "readthedocs-sphinx-ext"
+        },
+        {
+            "download_count": 569334,
+            "project": "latexcodec"
+        },
+        {
+            "download_count": 568887,
+            "project": "south"
+        },
+        {
+            "download_count": 568427,
+            "project": "agate-excel"
+        },
+        {
+            "download_count": 568046,
+            "project": "hexbytes"
+        },
+        {
+            "download_count": 567653,
+            "project": "django-money"
+        },
+        {
+            "download_count": 567483,
+            "project": "agate-sql"
+        },
+        {
+            "download_count": 566872,
+            "project": "kitchen"
+        },
+        {
+            "download_count": 566696,
+            "project": "unipath"
+        },
+        {
+            "download_count": 566631,
+            "project": "sshuttle"
+        },
+        {
+            "download_count": 566158,
+            "project": "robotframework-faker"
+        },
+        {
+            "download_count": 565395,
+            "project": "pybtex"
+        },
+        {
+            "download_count": 565136,
+            "project": "django-nested-admin"
+        },
+        {
+            "download_count": 564284,
+            "project": "eth-keyfile"
+        },
+        {
+            "download_count": 564232,
+            "project": "djangorestframework-bulk"
+        },
+        {
+            "download_count": 564010,
+            "project": "dataset"
+        },
+        {
+            "download_count": 563254,
+            "project": "trafaret"
+        },
+        {
+            "download_count": 562622,
+            "project": "cheetah3"
+        },
+        {
+            "download_count": 561733,
+            "project": "flask-security"
+        },
+        {
+            "download_count": 560775,
+            "project": "aliyun-python-sdk-core-v3"
+        },
+        {
+            "download_count": 560763,
+            "project": "azureml-train-automl"
+        },
+        {
+            "download_count": 559850,
+            "project": "control"
+        },
+        {
+            "download_count": 559644,
+            "project": "implicit"
+        },
+        {
+            "download_count": 559092,
+            "project": "dependency-injector"
+        },
+        {
+            "download_count": 558284,
+            "project": "lazy"
+        },
+        {
+            "download_count": 558189,
+            "project": "unidiff"
+        },
+        {
+            "download_count": 557350,
+            "project": "textdistance"
+        },
+        {
+            "download_count": 557098,
+            "project": "python-monkey-business"
+        },
+        {
+            "download_count": 556600,
+            "project": "untangle"
+        },
+        {
+            "download_count": 556409,
+            "project": "reverse-geocoder"
+        },
+        {
+            "download_count": 556261,
+            "project": "pygeoip"
+        },
+        {
+            "download_count": 554953,
+            "project": "eth-rlp"
+        },
+        {
+            "download_count": 552622,
+            "project": "databricks"
+        },
+        {
+            "download_count": 552459,
+            "project": "pyvim"
+        },
+        {
+            "download_count": 551935,
+            "project": "taskflow"
+        },
+        {
+            "download_count": 551365,
+            "project": "ifaddr"
+        },
+        {
+            "download_count": 549608,
+            "project": "eeweather"
+        },
+        {
+            "download_count": 549360,
+            "project": "clickhouse-cityhash"
+        },
+        {
+            "download_count": 548549,
+            "project": "django-hijack"
+        },
+        {
+            "download_count": 547813,
+            "project": "names"
+        },
+        {
+            "download_count": 547796,
+            "project": "castellan"
+        },
+        {
+            "download_count": 547711,
+            "project": "sacremoses"
+        },
+        {
+            "download_count": 547488,
+            "project": "flake8-blind-except"
+        },
+        {
+            "download_count": 547363,
+            "project": "mozdebug"
+        },
+        {
+            "download_count": 547215,
+            "project": "ofxparse"
+        },
+        {
+            "download_count": 546668,
+            "project": "vatnumber"
+        },
+        {
+            "download_count": 546665,
+            "project": "remoto"
+        },
+        {
+            "download_count": 546052,
+            "project": "checksumdir"
+        },
+        {
+            "download_count": 545735,
+            "project": "pyowm"
+        },
+        {
+            "download_count": 545330,
+            "project": "poster"
+        },
+        {
+            "download_count": 543997,
+            "project": "lzstring"
+        },
+        {
+            "download_count": 543850,
+            "project": "pyminizip"
+        },
+        {
+            "download_count": 543634,
+            "project": "np-utils"
+        },
+        {
+            "download_count": 543596,
+            "project": "injector"
+        },
+        {
+            "download_count": 543183,
+            "project": "django-imagekit"
+        },
+        {
+            "download_count": 542497,
+            "project": "five9"
+        },
+        {
+            "download_count": 542414,
+            "project": "static3"
+        },
+        {
+            "download_count": 541667,
+            "project": "oset"
+        },
+        {
+            "download_count": 540962,
+            "project": "jsbeautifier"
+        },
+        {
+            "download_count": 540750,
+            "project": "hdbscan"
+        },
+        {
+            "download_count": 540280,
+            "project": "os-testr"
+        },
+        {
+            "download_count": 540000,
+            "project": "flask-babelex"
+        },
+        {
+            "download_count": 539901,
+            "project": "positional"
+        },
+        {
+            "download_count": 539021,
+            "project": "profilehooks"
+        },
+        {
+            "download_count": 538332,
+            "project": "flask-rq2"
+        },
+        {
+            "download_count": 538314,
+            "project": "pygpgme"
+        },
+        {
+            "download_count": 538159,
+            "project": "ts-flint"
+        },
+        {
+            "download_count": 538112,
+            "project": "google-api-helper"
+        },
+        {
+            "download_count": 537857,
+            "project": "markuppy"
+        },
+        {
+            "download_count": 537565,
+            "project": "keras-mxnet"
+        },
+        {
+            "download_count": 535795,
+            "project": "kwargs-only"
+        },
+        {
+            "download_count": 534335,
+            "project": "django-mathfilters"
+        },
+        {
+            "download_count": 534222,
+            "project": "dj-static"
+        },
+        {
+            "download_count": 533502,
+            "project": "web-py"
+        },
+        {
+            "download_count": 533322,
+            "project": "zenpy"
+        },
+        {
+            "download_count": 533300,
+            "project": "django-enumfields"
+        },
+        {
+            "download_count": 533281,
+            "project": "georaptor"
+        },
+        {
+            "download_count": 533198,
+            "project": "heroku3"
+        },
+        {
+            "download_count": 533034,
+            "project": "oci"
+        },
+        {
+            "download_count": 532545,
+            "project": "django-fernet-fields"
+        },
+        {
+            "download_count": 531368,
+            "project": "pyftpdlib"
+        },
+        {
+            "download_count": 529065,
+            "project": "neutron-lib"
+        },
+        {
+            "download_count": 529026,
+            "project": "grpcio-reflection"
+        },
+        {
+            "download_count": 528753,
+            "project": "python-jsonschema-objects"
+        },
+        {
+            "download_count": 528555,
+            "project": "django-dynamic-fixture"
+        },
+        {
+            "download_count": 528426,
+            "project": "pyod"
+        },
+        {
+            "download_count": 528307,
+            "project": "simplekml"
+        },
+        {
+            "download_count": 527593,
+            "project": "overrides"
+        },
+        {
+            "download_count": 526989,
+            "project": "ovsdbapp"
+        },
+        {
+            "download_count": 526603,
+            "project": "tavern"
+        },
+        {
+            "download_count": 526180,
+            "project": "peppercorn"
+        },
+        {
+            "download_count": 526018,
+            "project": "cbapi"
+        },
+        {
+            "download_count": 525952,
+            "project": "twitter-common-contextutil"
+        },
+        {
+            "download_count": 523345,
+            "project": "pypdf"
+        },
+        {
+            "download_count": 523091,
+            "project": "couchbase"
+        },
+        {
+            "download_count": 522723,
+            "project": "profanityfilter"
+        },
+        {
+            "download_count": 522269,
+            "project": "blist"
+        },
+        {
+            "download_count": 522185,
+            "project": "pydns"
+        },
+        {
+            "download_count": 521431,
+            "project": "stopit"
+        },
+        {
+            "download_count": 521064,
+            "project": "keyboard"
+        },
+        {
+            "download_count": 520346,
+            "project": "twitter-common-util"
+        },
+        {
+            "download_count": 520255,
+            "project": "flatten-json"
+        },
+        {
+            "download_count": 519427,
+            "project": "twitter-common-string"
+        },
+        {
+            "download_count": 519406,
+            "project": "tableauserverclient"
+        },
+        {
+            "download_count": 519368,
+            "project": "m2r"
+        },
+        {
+            "download_count": 519326,
+            "project": "twitter-common-process"
+        },
+        {
+            "download_count": 519222,
+            "project": "twitter-common-app"
+        },
+        {
+            "download_count": 518985,
+            "project": "json-rpc"
+        },
+        {
+            "download_count": 517770,
+            "project": "slack-webhook-cli"
+        },
+        {
+            "download_count": 517297,
+            "project": "antigate"
+        },
+        {
+            "download_count": 516754,
+            "project": "sphinxcontrib-bibtex"
+        },
+        {
+            "download_count": 516195,
+            "project": "pybtex-docutils"
+        },
+        {
+            "download_count": 515133,
+            "project": "rfc6266-parser"
+        },
+        {
+            "download_count": 514541,
+            "project": "nflx-genie-client"
+        },
+        {
+            "download_count": 513202,
+            "project": "missingno"
+        },
+        {
+            "download_count": 513069,
+            "project": "mitmproxy"
+        },
+        {
+            "download_count": 512838,
+            "project": "conan-package-tools"
+        },
+        {
+            "download_count": 512668,
+            "project": "xlutils"
+        },
+        {
+            "download_count": 512441,
+            "project": "pprintpp"
+        },
+        {
+            "download_count": 512440,
+            "project": "os-traits"
+        },
+        {
+            "download_count": 512397,
+            "project": "svglib"
+        },
+        {
+            "download_count": 510713,
+            "project": "btrees"
+        },
+        {
+            "download_count": 510636,
+            "project": "graphframes"
+        },
+        {
+            "download_count": 509946,
+            "project": "sarge"
+        },
+        {
+            "download_count": 509466,
+            "project": "shadowsocks"
+        },
+        {
+            "download_count": 509388,
+            "project": "hmsclient"
+        },
+        {
+            "download_count": 509166,
+            "project": "azure-mgmt-servermanager"
+        },
+        {
+            "download_count": 508757,
+            "project": "elasticache-pyclient"
+        },
+        {
+            "download_count": 508756,
+            "project": "xstatic-patternfly"
+        },
+        {
+            "download_count": 508352,
+            "project": "pep257"
+        },
+        {
+            "download_count": 508010,
+            "project": "xstatic-patternfly-bootstrap-treeview"
+        },
+        {
+            "download_count": 507803,
+            "project": "xstatic-datatables"
+        },
+        {
+            "download_count": 507499,
+            "project": "django-recaptcha"
+        },
+        {
+            "download_count": 507473,
+            "project": "persistent"
+        },
+        {
+            "download_count": 507135,
+            "project": "altair"
+        },
+        {
+            "download_count": 505888,
+            "project": "edx-enterprise"
+        },
+        {
+            "download_count": 505690,
+            "project": "graphy"
+        },
+        {
+            "download_count": 505101,
+            "project": "redlock-py"
+        },
+        {
+            "download_count": 504911,
+            "project": "pymc3"
+        },
+        {
+            "download_count": 504787,
+            "project": "mercantile"
+        },
+        {
+            "download_count": 504175,
+            "project": "lftools"
+        },
+        {
+            "download_count": 502985,
+            "project": "robotframework-httplibrary"
+        },
+        {
+            "download_count": 501914,
+            "project": "tsfresh"
+        },
+        {
+            "download_count": 501627,
+            "project": "fitbit"
+        },
+        {
+            "download_count": 501439,
+            "project": "lightfm"
+        },
+        {
+            "download_count": 501354,
+            "project": "djoser"
+        },
+        {
+            "download_count": 501217,
+            "project": "pytest-faulthandler"
+        },
+        {
+            "download_count": 500476,
+            "project": "formencode"
+        },
+        {
+            "download_count": 500465,
+            "project": "spyne"
+        },
+        {
+            "download_count": 500288,
+            "project": "backports-os"
+        },
+        {
+            "download_count": 500147,
+            "project": "customerio"
+        },
+        {
+            "download_count": 499726,
+            "project": "os-win"
+        },
+        {
+            "download_count": 499639,
+            "project": "neptune-client"
+        },
+        {
+            "download_count": 499204,
+            "project": "googleappenginecloudstorageclient"
+        },
+        {
+            "download_count": 498658,
+            "project": "sparqlwrapper"
+        },
+        {
+            "download_count": 498519,
+            "project": "sphinxcontrib-spelling"
+        },
+        {
+            "download_count": 498177,
+            "project": "geotext"
+        },
+        {
+            "download_count": 497560,
+            "project": "pytest-lazy-fixture"
+        },
+        {
+            "download_count": 497085,
+            "project": "pyarabic"
+        },
+        {
+            "download_count": 497017,
+            "project": "auditwheel"
+        },
+        {
+            "download_count": 496676,
+            "project": "django-debug-panel"
+        },
+        {
+            "download_count": 495919,
+            "project": "cssmin"
+        },
+        {
+            "download_count": 495656,
+            "project": "nose-progressive"
+        },
+        {
+            "download_count": 495187,
+            "project": "django-suit"
+        },
+        {
+            "download_count": 495183,
+            "project": "mercurial"
+        },
+        {
+            "download_count": 495032,
+            "project": "python-hosts"
+        },
+        {
+            "download_count": 494652,
+            "project": "pywatchman"
+        },
+        {
+            "download_count": 494192,
+            "project": "pip-lock"
+        },
+        {
+            "download_count": 494177,
+            "project": "clikit"
+        },
+        {
+            "download_count": 494100,
+            "project": "flake8-per-file-ignores"
+        },
+        {
+            "download_count": 493208,
+            "project": "os-brick"
+        },
+        {
+            "download_count": 492737,
+            "project": "cloudinary"
+        },
+        {
+            "download_count": 492342,
+            "project": "pyroma"
+        },
+        {
+            "download_count": 491821,
+            "project": "aiohttp-jinja2"
+        },
+        {
+            "download_count": 491668,
+            "project": "func-timeout"
+        },
+        {
+            "download_count": 491557,
+            "project": "ldapdomaindump"
+        },
+        {
+            "download_count": 490771,
+            "project": "logzio-python-handler"
+        },
+        {
+            "download_count": 490651,
+            "project": "yarg"
+        },
+        {
+            "download_count": 490261,
+            "project": "python-geoip"
+        },
+        {
+            "download_count": 489169,
+            "project": "gremlinpython"
+        },
+        {
+            "download_count": 488646,
+            "project": "uplink"
+        },
+        {
+            "download_count": 487621,
+            "project": "pyjarowinkler"
+        },
+        {
+            "download_count": 485859,
+            "project": "qt4reactor"
+        },
+        {
+            "download_count": 485712,
+            "project": "records"
+        },
+        {
+            "download_count": 485512,
+            "project": "flake8-string-format"
+        },
+        {
+            "download_count": 485371,
+            "project": "django-rest-framework"
+        },
+        {
+            "download_count": 485084,
+            "project": "pydruid"
+        },
+        {
+            "download_count": 484914,
+            "project": "meson"
+        },
+        {
+            "download_count": 484556,
+            "project": "django-select2"
+        },
+        {
+            "download_count": 484267,
+            "project": "pamqp"
+        },
+        {
+            "download_count": 484090,
+            "project": "xmljson"
+        },
+        {
+            "download_count": 483920,
+            "project": "slots"
+        },
+        {
+            "download_count": 483748,
+            "project": "doublemetaphone"
+        },
+        {
+            "download_count": 483545,
+            "project": "pycli"
+        },
+        {
+            "download_count": 483354,
+            "project": "jupyterlab-launcher"
+        },
+        {
+            "download_count": 482936,
+            "project": "editorconfig"
+        },
+        {
+            "download_count": 482719,
+            "project": "pamela"
+        },
+        {
+            "download_count": 482539,
+            "project": "rdpy"
+        },
+        {
+            "download_count": 482395,
+            "project": "word2number"
+        },
+        {
+            "download_count": 482346,
+            "project": "pykmip"
+        },
+        {
+            "download_count": 480460,
+            "project": "recurly"
+        },
+        {
+            "download_count": 479945,
+            "project": "datarobot"
+        },
+        {
+            "download_count": 479251,
+            "project": "email-reply-parser"
+        },
+        {
+            "download_count": 479059,
+            "project": "geohash2"
+        },
+        {
+            "download_count": 478838,
+            "project": "readchar"
+        },
+        {
+            "download_count": 478822,
+            "project": "mohawk"
+        },
+        {
+            "download_count": 478394,
+            "project": "orjson"
+        },
+        {
+            "download_count": 478032,
+            "project": "pycocotools"
+        },
+        {
+            "download_count": 477626,
+            "project": "pythonnet"
+        },
+        {
+            "download_count": 477384,
+            "project": "deap"
+        },
+        {
+            "download_count": 476311,
+            "project": "cursor"
+        },
+        {
+            "download_count": 475480,
+            "project": "django-jenkins"
+        },
+        {
+            "download_count": 475049,
+            "project": "azureml-automl-core"
+        },
+        {
+            "download_count": 474562,
+            "project": "sklearn-crfsuite"
+        },
+        {
+            "download_count": 472571,
+            "project": "azure-mgmt-documentdb"
+        },
+        {
+            "download_count": 471293,
+            "project": "paretochart"
+        },
+        {
+            "download_count": 471137,
+            "project": "python-debian"
+        },
+        {
+            "download_count": 471045,
+            "project": "rply"
+        },
+        {
+            "download_count": 469934,
+            "project": "pynliner"
+        },
+        {
+            "download_count": 469110,
+            "project": "ipwhois"
+        },
+        {
+            "download_count": 468984,
+            "project": "pylint-quotes"
+        },
+        {
+            "download_count": 468853,
+            "project": "sfmergeutility"
+        },
+        {
+            "download_count": 468745,
+            "project": "pyside2"
+        },
+        {
+            "download_count": 468673,
+            "project": "cupy-cuda100"
+        },
+        {
+            "download_count": 468012,
+            "project": "tokenize-rt"
+        },
+        {
+            "download_count": 467174,
+            "project": "halo"
+        },
+        {
+            "download_count": 467029,
+            "project": "pyblake2"
+        },
+        {
+            "download_count": 466658,
+            "project": "python-keyczar"
+        },
+        {
+            "download_count": 466596,
+            "project": "pytest-factoryboy"
+        },
+        {
+            "download_count": 466322,
+            "project": "pyramid-mako"
+        },
+        {
+            "download_count": 465692,
+            "project": "speedtest-cli"
+        },
+        {
+            "download_count": 465559,
+            "project": "ansible-vault"
+        },
+        {
+            "download_count": 465439,
+            "project": "sure"
+        },
+        {
+            "download_count": 465170,
+            "project": "h3"
+        },
+        {
+            "download_count": 464606,
+            "project": "pysolar"
+        },
+        {
+            "download_count": 464135,
+            "project": "os-vif"
+        },
+        {
+            "download_count": 462962,
+            "project": "gcovr"
+        },
+        {
+            "download_count": 462652,
+            "project": "gputil"
+        },
+        {
+            "download_count": 462649,
+            "project": "pyexcel-xlsx"
+        },
+        {
+            "download_count": 462258,
+            "project": "pytest-bdd"
+        },
+        {
+            "download_count": 462062,
+            "project": "qtpy"
+        },
+        {
+            "download_count": 461447,
+            "project": "marshmallow-jsonschema"
+        },
+        {
+            "download_count": 461130,
+            "project": "xmlschema"
+        },
+        {
+            "download_count": 461066,
+            "project": "log-symbols"
+        },
+        {
+            "download_count": 461026,
+            "project": "aiopg"
+        },
+        {
+            "download_count": 461021,
+            "project": "paypalrestsdk"
+        },
+        {
+            "download_count": 459361,
+            "project": "bpython"
+        },
+        {
+            "download_count": 459221,
+            "project": "django-memoize"
+        },
+        {
+            "download_count": 458741,
+            "project": "pastescript"
+        },
+        {
+            "download_count": 458467,
+            "project": "djangorestframework-gis"
+        },
+        {
+            "download_count": 458421,
+            "project": "yamlordereddictloader"
+        },
+        {
+            "download_count": 458237,
+            "project": "azure-cli-privatedns"
+        },
+        {
+            "download_count": 457094,
+            "project": "jupyterhub"
+        },
+        {
+            "download_count": 457021,
+            "project": "pytest-random-order"
+        },
+        {
+            "download_count": 456889,
+            "project": "cli-helpers"
+        },
+        {
+            "download_count": 456492,
+            "project": "django-jet"
+        },
+        {
+            "download_count": 456487,
+            "project": "django-solo"
+        },
+        {
+            "download_count": 455927,
+            "project": "easypkg"
+        },
+        {
+            "download_count": 455745,
+            "project": "oslotest"
+        },
+        {
+            "download_count": 455660,
+            "project": "td-client"
+        },
+        {
+            "download_count": 455550,
+            "project": "docker-buildtool"
+        },
+        {
+            "download_count": 455228,
+            "project": "pyactiveresource"
+        },
+        {
+            "download_count": 455148,
+            "project": "filetype"
+        },
+        {
+            "download_count": 454275,
+            "project": "integrationhelper"
+        },
+        {
+            "download_count": 454060,
+            "project": "treeinterpreter"
+        },
+        {
+            "download_count": 453726,
+            "project": "spinners"
+        },
+        {
+            "download_count": 453478,
+            "project": "tinys3"
+        },
+        {
+            "download_count": 452911,
+            "project": "google-nucleus"
+        },
+        {
+            "download_count": 452905,
+            "project": "sfctl"
+        },
+        {
+            "download_count": 452659,
+            "project": "wsme"
+        },
+        {
+            "download_count": 452548,
+            "project": "cloudml-hypertune"
+        },
+        {
+            "download_count": 452284,
+            "project": "djrill"
+        },
+        {
+            "download_count": 451894,
+            "project": "rdflib-jsonld"
+        },
+        {
+            "download_count": 451751,
+            "project": "pyhull"
+        },
+        {
+            "download_count": 451388,
+            "project": "weka-easypy"
+        },
+        {
+            "download_count": 451340,
+            "project": "zerorpc"
+        },
+        {
+            "download_count": 450074,
+            "project": "requests-aws-sign"
+        },
+        {
+            "download_count": 449859,
+            "project": "apns2"
+        },
+        {
+            "download_count": 449829,
+            "project": "pytest-freezegun"
+        },
+        {
+            "download_count": 449733,
+            "project": "logentries"
+        },
+        {
+            "download_count": 449274,
+            "project": "polling"
+        },
+        {
+            "download_count": 449144,
+            "project": "ner"
+        },
+        {
+            "download_count": 448946,
+            "project": "pycuber"
+        },
+        {
+            "download_count": 448187,
+            "project": "dfply"
+        },
+        {
+            "download_count": 447960,
+            "project": "elasticsearch5"
+        },
+        {
+            "download_count": 447647,
+            "project": "pyramid-debugtoolbar"
+        },
+        {
+            "download_count": 447433,
+            "project": "dohq-artifactory"
+        },
+        {
+            "download_count": 447042,
+            "project": "graphyte"
+        },
+        {
+            "download_count": 446699,
+            "project": "gtts-token"
+        },
+        {
+            "download_count": 446599,
+            "project": "s3io"
+        },
+        {
+            "download_count": 446457,
+            "project": "pyldavis"
+        },
+        {
+            "download_count": 446070,
+            "project": "dm-xmlsec-binding"
+        },
+        {
+            "download_count": 445558,
+            "project": "oslo-vmware"
+        },
+        {
+            "download_count": 445493,
+            "project": "mkdocs-minify-plugin"
+        },
+        {
+            "download_count": 442789,
+            "project": "systemd-python"
+        },
+        {
+            "download_count": 441825,
+            "project": "django-daterange-filter"
+        },
+        {
+            "download_count": 441288,
+            "project": "pycld2"
+        },
+        {
+            "download_count": 441011,
+            "project": "ffmpy"
+        },
+        {
+            "download_count": 440747,
+            "project": "onnxruntime"
+        },
+        {
+            "download_count": 440442,
+            "project": "pathmatch"
+        },
+        {
+            "download_count": 440074,
+            "project": "beatbox"
+        },
+        {
+            "download_count": 439695,
+            "project": "dotmap"
+        },
+        {
+            "download_count": 439566,
+            "project": "atari-py"
+        },
+        {
+            "download_count": 436976,
+            "project": "pytest-socket"
+        },
+        {
+            "download_count": 436145,
+            "project": "matplotlib-venn"
+        },
+        {
+            "download_count": 434595,
+            "project": "dnslib"
+        },
+        {
+            "download_count": 434167,
+            "project": "leveldb"
+        },
+        {
+            "download_count": 433865,
+            "project": "django-dirtyfields"
+        },
+        {
+            "download_count": 433860,
+            "project": "shiboken2"
+        },
+        {
+            "download_count": 433596,
+            "project": "chameleon"
+        },
+        {
+            "download_count": 433574,
+            "project": "python-social-auth"
+        },
+        {
+            "download_count": 433514,
+            "project": "xunitparser"
+        },
+        {
+            "download_count": 433494,
+            "project": "tempest"
+        },
+        {
+            "download_count": 433330,
+            "project": "django-extra-views"
+        },
+        {
+            "download_count": 433032,
+            "project": "django-sslserver"
+        },
+        {
+            "download_count": 432924,
+            "project": "netstorageapi"
+        },
+        {
+            "download_count": 432577,
+            "project": "django-bootstrap-form"
+        },
+        {
+            "download_count": 431716,
+            "project": "aio-pika"
+        },
+        {
+            "download_count": 431533,
+            "project": "curtsies"
+        },
+        {
+            "download_count": 431368,
+            "project": "edx-proctoring"
+        },
+        {
+            "download_count": 429918,
+            "project": "rules"
+        },
+        {
+            "download_count": 429501,
+            "project": "treq"
+        },
+        {
+            "download_count": 429446,
+            "project": "python2-pythondialog"
+        },
+        {
+            "download_count": 429251,
+            "project": "shopifyapi"
+        },
+        {
+            "download_count": 429239,
+            "project": "pyros-genmsg"
+        },
+        {
+            "download_count": 428668,
+            "project": "pyros-genpy"
+        },
+        {
+            "download_count": 427728,
+            "project": "django-webtest"
+        },
+        {
+            "download_count": 427374,
+            "project": "cpp-coveralls"
+        },
+        {
+            "download_count": 426629,
+            "project": "hyperloglog"
+        },
+        {
+            "download_count": 425518,
+            "project": "pathvalidate"
+        },
+        {
+            "download_count": 424129,
+            "project": "marisa-trie"
+        },
+        {
+            "download_count": 423827,
+            "project": "graphene-file-upload"
+        },
+        {
+            "download_count": 423528,
+            "project": "wurlitzer"
+        },
+        {
+            "download_count": 423446,
+            "project": "geoip"
+        },
+        {
+            "download_count": 423400,
+            "project": "nameko"
+        },
+        {
+            "download_count": 422280,
+            "project": "pipreqs"
+        },
+        {
+            "download_count": 422034,
+            "project": "airbrake"
+        },
+        {
+            "download_count": 421423,
+            "project": "python-barcode"
+        },
+        {
+            "download_count": 420487,
+            "project": "featuretools"
+        },
+        {
+            "download_count": 420463,
+            "project": "pydes"
+        },
+        {
+            "download_count": 420080,
+            "project": "oss2"
+        },
+        {
+            "download_count": 419064,
+            "project": "win-unicode-console"
+        },
+        {
+            "download_count": 418651,
+            "project": "aiocontextvars"
+        },
+        {
+            "download_count": 417979,
+            "project": "flake8-logging-format"
+        },
+        {
+            "download_count": 417452,
+            "project": "aiokafka"
+        },
+        {
+            "download_count": 416219,
+            "project": "astunparse"
+        },
+        {
+            "download_count": 414872,
+            "project": "doit"
+        },
+        {
+            "download_count": 414706,
+            "project": "scikit-surprise"
+        },
+        {
+            "download_count": 414280,
+            "project": "flask-mysql"
+        },
+        {
+            "download_count": 414268,
+            "project": "pygerrit2"
+        },
+        {
+            "download_count": 412851,
+            "project": "requests-http-signature"
+        },
+        {
+            "download_count": 412476,
+            "project": "django-dotenv"
+        },
+        {
+            "download_count": 412152,
+            "project": "ffmpeg-quality-metrics"
+        },
+        {
+            "download_count": 412022,
+            "project": "spotify-tensorflow"
+        },
+        {
+            "download_count": 411026,
+            "project": "wsgi-intercept"
+        },
+        {
+            "download_count": 410904,
+            "project": "breathe"
+        },
+        {
+            "download_count": 410783,
+            "project": "google-api-python-client-uritemplate"
+        },
+        {
+            "download_count": 408750,
+            "project": "django-ajax-selects"
+        },
+        {
+            "download_count": 408606,
+            "project": "websocket"
+        },
+        {
+            "download_count": 408486,
+            "project": "healthcheck"
+        },
+        {
+            "download_count": 408427,
+            "project": "redo"
+        },
+        {
+            "download_count": 408117,
+            "project": "pypiserver"
+        },
+        {
+            "download_count": 408017,
+            "project": "localstack-client"
+        },
+        {
+            "download_count": 407856,
+            "project": "fastai"
+        },
+        {
+            "download_count": 407560,
+            "project": "django-impersonate"
+        },
+        {
+            "download_count": 407287,
+            "project": "zipcodes"
+        },
+        {
+            "download_count": 407121,
+            "project": "treelib"
+        },
+        {
+            "download_count": 407028,
+            "project": "django-stubs"
+        },
+        {
+            "download_count": 406712,
+            "project": "django-two-factor-auth"
+        },
+        {
+            "download_count": 405396,
+            "project": "json-delta"
+        },
+        {
+            "download_count": 405170,
+            "project": "socketio-client"
+        },
+        {
+            "download_count": 405065,
+            "project": "gin-config"
+        },
+        {
+            "download_count": 405060,
+            "project": "coverage-badge"
+        },
+        {
+            "download_count": 404993,
+            "project": "django-sendgrid-v5"
+        },
+        {
+            "download_count": 404902,
+            "project": "shutilwhich"
+        },
+        {
+            "download_count": 404866,
+            "project": "flask-redis"
+        },
+        {
+            "download_count": 404373,
+            "project": "pep562"
+        },
+        {
+            "download_count": 404209,
+            "project": "niet"
+        },
+        {
+            "download_count": 403508,
+            "project": "dask-glm"
+        },
+        {
+            "download_count": 402928,
+            "project": "evergreen-py"
+        },
+        {
+            "download_count": 402697,
+            "project": "zxcvbn"
+        },
+        {
+            "download_count": 402692,
+            "project": "dataproperty"
+        },
+        {
+            "download_count": 402398,
+            "project": "pygeohash"
+        },
+        {
+            "download_count": 401062,
+            "project": "ast"
+        },
+        {
+            "download_count": 400982,
+            "project": "pyobjc-core"
+        },
+        {
+            "download_count": 400958,
+            "project": "http-ece"
+        },
+        {
+            "download_count": 400803,
+            "project": "readline"
+        },
+        {
+            "download_count": 400450,
+            "project": "django-elasticsearch-dsl"
+        },
+        {
+            "download_count": 400436,
+            "project": "python-xlib"
+        },
+        {
+            "download_count": 400407,
+            "project": "flatten-dict"
+        },
+        {
+            "download_count": 399614,
+            "project": "gherkin-official"
+        },
+        {
+            "download_count": 399263,
+            "project": "elementpath"
+        },
+        {
+            "download_count": 399214,
+            "project": "gdal"
+        },
+        {
+            "download_count": 399000,
+            "project": "roman"
+        },
+        {
+            "download_count": 398885,
+            "project": "click-spinner"
+        },
+        {
+            "download_count": 398873,
+            "project": "chalice"
+        },
+        {
+            "download_count": 398463,
+            "project": "django-filer"
+        },
+        {
+            "download_count": 398402,
+            "project": "ldclient-py"
+        },
+        {
+            "download_count": 398269,
+            "project": "gtts"
+        },
+        {
+            "download_count": 397948,
+            "project": "django-registration"
+        },
+        {
+            "download_count": 397646,
+            "project": "collectfast"
+        },
+        {
+            "download_count": 396999,
+            "project": "django-jinja"
+        },
+        {
+            "download_count": 396968,
+            "project": "eradicate"
+        },
+        {
+            "download_count": 396714,
+            "project": "neo4j-driver"
+        },
+        {
+            "download_count": 396369,
+            "project": "cybox"
+        },
+        {
+            "download_count": 396364,
+            "project": "asgi-redis"
+        },
+        {
+            "download_count": 396056,
+            "project": "boto3-type-annotations"
+        },
+        {
+            "download_count": 395861,
+            "project": "etcd3gw"
+        },
+        {
+            "download_count": 395415,
+            "project": "face-recognition"
+        },
+        {
+            "download_count": 395184,
+            "project": "os-xenapi"
+        },
+        {
+            "download_count": 395153,
+            "project": "neo4j"
+        },
+        {
+            "download_count": 394185,
+            "project": "pytrends"
+        },
+        {
+            "download_count": 393950,
+            "project": "grpcio-status"
+        },
+        {
+            "download_count": 393467,
+            "project": "sailthru-client"
+        },
+        {
+            "download_count": 393315,
+            "project": "repoze-sendmail"
+        },
+        {
+            "download_count": 393244,
+            "project": "bayesian-optimization"
+        },
+        {
+            "download_count": 393069,
+            "project": "pillow-simd"
+        },
+        {
+            "download_count": 392655,
+            "project": "inquirer"
+        },
+        {
+            "download_count": 391989,
+            "project": "watson-developer-cloud"
+        },
+        {
+            "download_count": 391807,
+            "project": "assertpy"
+        },
+        {
+            "download_count": 391722,
+            "project": "chainer"
+        },
+        {
+            "download_count": 391162,
+            "project": "aiogithubapi"
+        },
+        {
+            "download_count": 391117,
+            "project": "pyclustering"
+        },
+        {
+            "download_count": 390635,
+            "project": "django-test-plus"
+        },
+        {
+            "download_count": 389572,
+            "project": "azureml-explain-model"
+        },
+        {
+            "download_count": 389554,
+            "project": "param"
+        },
+        {
+            "download_count": 388843,
+            "project": "smartsheet-python-sdk"
+        },
+        {
+            "download_count": 388646,
+            "project": "google-ads"
+        },
+        {
+            "download_count": 387346,
+            "project": "unicode-slugify"
+        },
+        {
+            "download_count": 387007,
+            "project": "django-smtp-ssl"
+        },
+        {
+            "download_count": 386636,
+            "project": "udatetime"
+        },
+        {
+            "download_count": 386540,
+            "project": "pyobjc-framework-cocoa"
+        },
+        {
+            "download_count": 386296,
+            "project": "confuse"
+        },
+        {
+            "download_count": 386037,
+            "project": "hdfs3"
+        },
+        {
+            "download_count": 385593,
+            "project": "moznetwork"
+        },
+        {
+            "download_count": 385320,
+            "project": "pydot2"
+        },
+        {
+            "download_count": 385150,
+            "project": "djangocms-admin-style"
+        },
+        {
+            "download_count": 384650,
+            "project": "pyquaternion"
+        },
+        {
+            "download_count": 384272,
+            "project": "xblock"
+        },
+        {
+            "download_count": 384195,
+            "project": "flask-talisman"
+        },
+        {
+            "download_count": 383670,
+            "project": "paver"
+        },
+        {
+            "download_count": 383579,
+            "project": "pytorch-transformers"
+        },
+        {
+            "download_count": 383499,
+            "project": "netdisco"
+        },
+        {
+            "download_count": 383345,
+            "project": "kivy"
+        },
+        {
+            "download_count": 383182,
+            "project": "django-uuidfield"
+        },
+        {
+            "download_count": 382848,
+            "project": "jwt"
+        },
+        {
+            "download_count": 382404,
+            "project": "logdna"
+        },
+        {
+            "download_count": 382235,
+            "project": "relativetimebuilder"
+        },
+        {
+            "download_count": 381845,
+            "project": "json2html"
+        },
+        {
+            "download_count": 381570,
+            "project": "pytest-helpers-namespace"
+        },
+        {
+            "download_count": 381409,
+            "project": "codespell"
+        },
+        {
+            "download_count": 381241,
+            "project": "open3d-python"
+        },
+        {
+            "download_count": 381173,
+            "project": "aws"
+        },
+        {
+            "download_count": 381129,
+            "project": "plyfile"
+        },
+        {
+            "download_count": 380993,
+            "project": "py-spy"
+        },
+        {
+            "download_count": 380964,
+            "project": "aliyun-python-sdk-kms"
+        },
+        {
+            "download_count": 380771,
+            "project": "stix"
+        },
+        {
+            "download_count": 379960,
+            "project": "pywebpush"
+        },
+        {
+            "download_count": 379915,
+            "project": "paramiko-expect"
+        },
+        {
+            "download_count": 379467,
+            "project": "face-recognition-models"
+        },
+        {
+            "download_count": 379302,
+            "project": "umap-learn"
+        },
+        {
+            "download_count": 378977,
+            "project": "cbor2"
+        },
+        {
+            "download_count": 378025,
+            "project": "django-redis-sessions"
+        },
+        {
+            "download_count": 377737,
+            "project": "pymisp"
+        },
+        {
+            "download_count": 377661,
+            "project": "django-test-without-migrations"
+        },
+        {
+            "download_count": 377526,
+            "project": "readability-lxml"
+        },
+        {
+            "download_count": 377300,
+            "project": "python-jsonrpc-server"
+        },
+        {
+            "download_count": 377259,
+            "project": "yara-python"
+        },
+        {
+            "download_count": 376371,
+            "project": "scikit-build"
+        },
+        {
+            "download_count": 376213,
+            "project": "wasmer"
+        },
+        {
+            "download_count": 376182,
+            "project": "django-templated-email"
+        },
+        {
+            "download_count": 375778,
+            "project": "www-authenticate"
+        },
+        {
+            "download_count": 375656,
+            "project": "plaid-python"
+        },
+        {
+            "download_count": 375163,
+            "project": "mixbox"
+        },
+        {
+            "download_count": 374823,
+            "project": "fastdiff"
+        },
+        {
+            "download_count": 374712,
+            "project": "pyang"
+        },
+        {
+            "download_count": 373785,
+            "project": "flake8-tidy-imports"
+        },
+        {
+            "download_count": 373672,
+            "project": "dnspython3"
+        },
+        {
+            "download_count": 373668,
+            "project": "twitter-common-confluence"
+        },
+        {
+            "download_count": 373502,
+            "project": "cursive"
+        },
+        {
+            "download_count": 372891,
+            "project": "requests-oauth"
+        },
+        {
+            "download_count": 372768,
+            "project": "edx-opaque-keys"
+        },
+        {
+            "download_count": 372679,
+            "project": "flake8-mutable"
+        },
+        {
+            "download_count": 372516,
+            "project": "docxtpl"
+        },
+        {
+            "download_count": 372505,
+            "project": "reloader"
+        },
+        {
+            "download_count": 371987,
+            "project": "ibm-cos-sdk"
+        },
+        {
+            "download_count": 371891,
+            "project": "python-multipart"
+        },
+        {
+            "download_count": 371361,
+            "project": "shodan"
+        },
+        {
+            "download_count": 370894,
+            "project": "glance-store"
+        },
+        {
+            "download_count": 370618,
+            "project": "blobxfer"
+        },
+        {
+            "download_count": 370307,
+            "project": "mailchimp"
+        },
+        {
+            "download_count": 370281,
+            "project": "amazon-kclpy"
+        },
+        {
+            "download_count": 369713,
+            "project": "azure-cli-deploymentmanager"
+        },
+        {
+            "download_count": 369303,
+            "project": "cfscrape"
+        },
+        {
+            "download_count": 369271,
+            "project": "gabbi"
+        },
+        {
+            "download_count": 368704,
+            "project": "docker-registry-client"
+        },
+        {
+            "download_count": 368627,
+            "project": "visdom"
+        },
+        {
+            "download_count": 368133,
+            "project": "djangosaml2"
+        },
+        {
+            "download_count": 367774,
+            "project": "torchfile"
+        },
+        {
+            "download_count": 367743,
+            "project": "python-language-server"
+        },
+        {
+            "download_count": 367741,
+            "project": "django-registration-redux"
+        },
+        {
+            "download_count": 366408,
+            "project": "pypowervm"
+        },
+        {
+            "download_count": 365959,
+            "project": "pypubsub"
+        },
+        {
+            "download_count": 365726,
+            "project": "flake8-mypy"
+        },
+        {
+            "download_count": 365550,
+            "project": "mixer"
+        },
+        {
+            "download_count": 365313,
+            "project": "config"
+        },
+        {
+            "download_count": 365224,
+            "project": "pytorch"
+        },
+        {
+            "download_count": 364756,
+            "project": "py-geohash-any"
+        },
+        {
+            "download_count": 364330,
+            "project": "pantsbuild-pants"
+        },
+        {
+            "download_count": 364200,
+            "project": "strif"
+        },
+        {
+            "download_count": 364189,
+            "project": "pgc-interface"
+        },
+        {
+            "download_count": 363919,
+            "project": "pyrasite"
+        },
+        {
+            "download_count": 363463,
+            "project": "browsermob-proxy"
+        },
+        {
+            "download_count": 362770,
+            "project": "marshmallow-oneofschema"
+        },
+        {
+            "download_count": 362569,
+            "project": "python-saml"
+        },
+        {
+            "download_count": 362447,
+            "project": "pymc"
+        },
+        {
+            "download_count": 362409,
+            "project": "vadersentiment"
+        },
+        {
+            "download_count": 362107,
+            "project": "pyxero"
+        },
+        {
+            "download_count": 361277,
+            "project": "ccxt"
+        },
+        {
+            "download_count": 361145,
+            "project": "executor"
+        },
+        {
+            "download_count": 360517,
+            "project": "requests-pkcs12"
+        },
+        {
+            "download_count": 360423,
+            "project": "instaclone"
+        },
+        {
+            "download_count": 360015,
+            "project": "exchangelib"
+        },
+        {
+            "download_count": 359650,
+            "project": "lomond"
+        },
+        {
+            "download_count": 359422,
+            "project": "mibian"
+        },
+        {
+            "download_count": 359376,
+            "project": "sip"
+        },
+        {
+            "download_count": 358575,
+            "project": "django-ordered-model"
+        },
+        {
+            "download_count": 358484,
+            "project": "eyed3"
+        },
+        {
+            "download_count": 358443,
+            "project": "pysendfile"
+        },
+        {
+            "download_count": 358260,
+            "project": "nose-testconfig"
+        },
+        {
+            "download_count": 358034,
+            "project": "delegator-py"
+        },
+        {
+            "download_count": 357573,
+            "project": "currencyconverter"
+        },
+        {
+            "download_count": 356478,
+            "project": "backports-lzma"
+        },
+        {
+            "download_count": 356429,
+            "project": "p4python"
+        },
+        {
+            "download_count": 356412,
+            "project": "zope-index"
+        },
+        {
+            "download_count": 356169,
+            "project": "cloudflare"
+        },
+        {
+            "download_count": 356004,
+            "project": "cql"
+        },
+        {
+            "download_count": 355945,
+            "project": "dacite"
+        },
+        {
+            "download_count": 355827,
+            "project": "python-cjson"
+        },
+        {
+            "download_count": 355794,
+            "project": "marshmallow-arrow"
+        },
+        {
+            "download_count": 355729,
+            "project": "mbstrdecoder"
+        },
+        {
+            "download_count": 354987,
+            "project": "urlextract"
+        },
+        {
+            "download_count": 354886,
+            "project": "typepy"
+        },
+        {
+            "download_count": 354885,
+            "project": "htpasswd"
+        },
+        {
+            "download_count": 354555,
+            "project": "mod-wsgi"
+        },
+        {
+            "download_count": 354506,
+            "project": "django-cms"
+        },
+        {
+            "download_count": 353955,
+            "project": "flask-apscheduler"
+        },
+        {
+            "download_count": 353201,
+            "project": "pymobiledetect"
+        },
+        {
+            "download_count": 353184,
+            "project": "times"
+        },
+        {
+            "download_count": 352996,
+            "project": "zabbix-api"
+        },
+        {
+            "download_count": 352927,
+            "project": "bcdoc"
+        },
+        {
+            "download_count": 352725,
+            "project": "torchtext"
+        },
+        {
+            "download_count": 352313,
+            "project": "flashtext"
+        },
+        {
+            "download_count": 351678,
+            "project": "referer-parser"
+        },
+        {
+            "download_count": 350758,
+            "project": "pyexcel-xls"
+        },
+        {
+            "download_count": 350681,
+            "project": "edx-drf-extensions"
+        },
+        {
+            "download_count": 350665,
+            "project": "falcon-multipart"
+        },
+        {
+            "download_count": 350619,
+            "project": "inotify"
+        },
+        {
+            "download_count": 350184,
+            "project": "tpot"
+        },
+        {
+            "download_count": 349490,
+            "project": "mypy-protobuf"
+        },
+        {
+            "download_count": 349330,
+            "project": "pygit2"
+        },
+        {
+            "download_count": 348567,
+            "project": "robotbackgroundlogger"
+        },
+        {
+            "download_count": 348256,
+            "project": "traces"
+        },
+        {
+            "download_count": 348166,
+            "project": "django-extra-fields"
+        },
+        {
+            "download_count": 348009,
+            "project": "rook"
+        },
+        {
+            "download_count": 348008,
+            "project": "ssh2-python"
+        },
+        {
+            "download_count": 347979,
+            "project": "jupytext"
+        },
+        {
+            "download_count": 347497,
+            "project": "optunity"
+        },
+        {
+            "download_count": 347125,
+            "project": "django-safedelete"
+        },
+        {
+            "download_count": 347040,
+            "project": "django-jsonview"
+        },
+        {
+            "download_count": 347003,
+            "project": "allure-behave"
+        },
+        {
+            "download_count": 346883,
+            "project": "forex-python"
+        },
+        {
+            "download_count": 346742,
+            "project": "logger"
+        },
+        {
+            "download_count": 346329,
+            "project": "django-choices"
+        },
+        {
+            "download_count": 345484,
+            "project": "xdis"
+        },
+        {
+            "download_count": 345296,
+            "project": "django-babel"
+        },
+        {
+            "download_count": 345262,
+            "project": "parse-accept-language"
+        },
+        {
+            "download_count": 344856,
+            "project": "scons"
+        },
+        {
+            "download_count": 344819,
+            "project": "klein"
+        },
+        {
+            "download_count": 344742,
+            "project": "flask-shell-ipython"
+        },
+        {
+            "download_count": 344586,
+            "project": "amqplib"
+        },
+        {
+            "download_count": 344301,
+            "project": "betamax"
+        },
+        {
+            "download_count": 344260,
+            "project": "flask-basicauth"
+        },
+        {
+            "download_count": 344021,
+            "project": "pybarcode"
+        },
+        {
+            "download_count": 343992,
+            "project": "pytest-json"
+        },
+        {
+            "download_count": 343912,
+            "project": "uiautomation"
+        },
+        {
+            "download_count": 343788,
+            "project": "pyemd"
+        },
+        {
+            "download_count": 343547,
+            "project": "flufl-enum"
+        },
+        {
+            "download_count": 342092,
+            "project": "normality"
+        },
+        {
+            "download_count": 341312,
+            "project": "osc-placement"
+        },
+        {
+            "download_count": 340998,
+            "project": "pytest-parallel"
+        },
+        {
+            "download_count": 340763,
+            "project": "crochet"
+        },
+        {
+            "download_count": 340105,
+            "project": "proximityhash"
+        },
+        {
+            "download_count": 339952,
+            "project": "pyscss"
+        },
+        {
+            "download_count": 339480,
+            "project": "python-qpid-proton"
+        },
+        {
+            "download_count": 339302,
+            "project": "vtk"
+        },
+        {
+            "download_count": 338910,
+            "project": "hmmlearn"
+        },
+        {
+            "download_count": 338542,
+            "project": "pyqtwebengine"
+        },
+        {
+            "download_count": 337957,
+            "project": "django-watchman"
+        },
+        {
+            "download_count": 337701,
+            "project": "python-igraph"
+        },
+        {
+            "download_count": 337586,
+            "project": "edxval"
+        },
+        {
+            "download_count": 337501,
+            "project": "ibm-cos-sdk-core"
+        },
+        {
+            "download_count": 337200,
+            "project": "edx-django-utils"
+        },
+        {
+            "download_count": 336856,
+            "project": "ibm-cos-sdk-s3transfer"
+        },
+        {
+            "download_count": 336294,
+            "project": "spark-nlp"
+        },
+        {
+            "download_count": 335964,
+            "project": "rhea"
+        },
+        {
+            "download_count": 335873,
+            "project": "exifread"
+        },
+        {
+            "download_count": 335709,
+            "project": "tensorflow-estimator-2-0-preview"
+        },
+        {
+            "download_count": 335463,
+            "project": "python-binary-memcached"
+        },
+        {
+            "download_count": 335218,
+            "project": "spyder"
+        },
+        {
+            "download_count": 334977,
+            "project": "rstr"
+        },
+        {
+            "download_count": 334204,
+            "project": "asteval"
+        },
+        {
+            "download_count": 333818,
+            "project": "uncompyle6"
+        },
+        {
+            "download_count": 333754,
+            "project": "requests-async"
+        },
+        {
+            "download_count": 333266,
+            "project": "kaitaistruct"
+        },
+        {
+            "download_count": 332129,
+            "project": "multiprocessing"
+        },
+        {
+            "download_count": 332061,
+            "project": "chromedriver"
+        },
+        {
+            "download_count": 332013,
+            "project": "iso-639"
+        },
+        {
+            "download_count": 331946,
+            "project": "daiquiri"
+        },
+        {
+            "download_count": 331588,
+            "project": "tendo"
+        },
+        {
+            "download_count": 331525,
+            "project": "spark-parser"
+        },
+        {
+            "download_count": 331379,
+            "project": "setuptools-git-version"
+        },
+        {
+            "download_count": 331153,
+            "project": "priority"
+        },
+        {
+            "download_count": 330940,
+            "project": "cachelib"
+        },
+        {
+            "download_count": 330879,
+            "project": "os-ken"
+        },
+        {
+            "download_count": 330608,
+            "project": "microversion-parse"
+        },
+        {
+            "download_count": 329253,
+            "project": "django-contrib-comments"
+        },
+        {
+            "download_count": 329155,
+            "project": "o365"
+        },
+        {
+            "download_count": 328801,
+            "project": "panda"
+        },
+        {
+            "download_count": 328625,
+            "project": "ed25519"
+        },
+        {
+            "download_count": 327877,
+            "project": "pyxb"
+        },
+        {
+            "download_count": 327798,
+            "project": "rest-condition"
+        },
+        {
+            "download_count": 327008,
+            "project": "pandavro"
+        },
+        {
+            "download_count": 326932,
+            "project": "flask-autoindex"
+        },
+        {
+            "download_count": 326745,
+            "project": "jieba3k"
+        },
+        {
+            "download_count": 326444,
+            "project": "pipfile"
+        },
+        {
+            "download_count": 325679,
+            "project": "js2xml"
+        },
+        {
+            "download_count": 325610,
+            "project": "freetype-py"
+        },
+        {
+            "download_count": 325570,
+            "project": "sigopt"
+        },
+        {
+            "download_count": 325566,
+            "project": "flask-silk"
+        },
+        {
+            "download_count": 325431,
+            "project": "pynvim"
+        },
+        {
+            "download_count": 324936,
+            "project": "hunspell"
+        },
+        {
+            "download_count": 324782,
+            "project": "pytest-localserver"
+        },
+        {
+            "download_count": 324466,
+            "project": "genshi"
+        },
+        {
+            "download_count": 324252,
+            "project": "pyqtgraph"
+        },
+        {
+            "download_count": 324239,
+            "project": "backport-collections"
+        },
+        {
+            "download_count": 324070,
+            "project": "daemonize"
+        },
+        {
+            "download_count": 324045,
+            "project": "pafy"
+        },
+        {
+            "download_count": 323910,
+            "project": "pyvcloud"
+        },
+        {
+            "download_count": 322541,
+            "project": "imapclient"
+        },
+        {
+            "download_count": 321480,
+            "project": "tika"
+        },
+        {
+            "download_count": 321355,
+            "project": "simplekv"
+        },
+        {
+            "download_count": 321196,
+            "project": "rtslib-fb"
+        },
+        {
+            "download_count": 321126,
+            "project": "flake8-colors"
+        },
+        {
+            "download_count": 321035,
+            "project": "helper"
+        },
+        {
+            "download_count": 320909,
+            "project": "guessit"
+        },
+        {
+            "download_count": 320580,
+            "project": "ryu"
+        },
+        {
+            "download_count": 320316,
+            "project": "salt"
+        },
+        {
+            "download_count": 320262,
+            "project": "flexmock"
+        },
+        {
+            "download_count": 320230,
+            "project": "pytils"
+        },
+        {
+            "download_count": 320212,
+            "project": "phik"
+        },
+        {
+            "download_count": 319164,
+            "project": "sphinx-bootstrap-theme"
+        },
+        {
+            "download_count": 319042,
+            "project": "flake8-pep3101"
+        },
+        {
+            "download_count": 318722,
+            "project": "turicreate"
+        },
+        {
+            "download_count": 318705,
+            "project": "attr"
+        },
+        {
+            "download_count": 318586,
+            "project": "spyder-kernels"
+        },
+        {
+            "download_count": 318398,
+            "project": "drf-writable-nested"
+        },
+        {
+            "download_count": 318092,
+            "project": "future-fstrings"
+        },
+        {
+            "download_count": 317793,
+            "project": "python-mistralclient"
+        },
+        {
+            "download_count": 317688,
+            "project": "fuzzy"
+        },
+        {
+            "download_count": 317529,
+            "project": "pyxlsb"
+        },
+        {
+            "download_count": 317467,
+            "project": "twitter"
+        },
+        {
+            "download_count": 317447,
+            "project": "slumber"
+        },
+        {
+            "download_count": 316898,
+            "project": "protobuf-to-dict"
+        },
+        {
+            "download_count": 316783,
+            "project": "djangorestframework-recursive"
+        },
+        {
+            "download_count": 316760,
+            "project": "treeherder-client"
+        },
+        {
+            "download_count": 316758,
+            "project": "python-nomad"
+        },
+        {
+            "download_count": 316352,
+            "project": "click-default-group"
+        },
+        {
+            "download_count": 316307,
+            "project": "logzero"
+        },
+        {
+            "download_count": 316290,
+            "project": "orionsdk"
+        },
+        {
+            "download_count": 316243,
+            "project": "sanic-cors"
+        },
+        {
+            "download_count": 316239,
+            "project": "fastdtw"
+        },
+        {
+            "download_count": 315929,
+            "project": "python-moztelemetry"
+        },
+        {
+            "download_count": 315911,
+            "project": "pytest-azurepipelines"
+        },
+        {
+            "download_count": 315673,
+            "project": "expects"
+        },
+        {
+            "download_count": 314691,
+            "project": "feedfinder2"
+        },
+        {
+            "download_count": 314446,
+            "project": "multimethod"
+        },
+        {
+            "download_count": 314259,
+            "project": "janome"
+        },
+        {
+            "download_count": 314133,
+            "project": "voluptuous-serialize"
+        },
+        {
+            "download_count": 314097,
+            "project": "pyculiar"
+        },
+        {
+            "download_count": 314051,
+            "project": "mozdownload"
+        },
+        {
+            "download_count": 313826,
+            "project": "pylzma"
+        },
+        {
+            "download_count": 313796,
+            "project": "qtawesome"
+        },
+        {
+            "download_count": 313736,
+            "project": "everett"
+        },
+        {
+            "download_count": 313653,
+            "project": "coincurve"
+        },
+        {
+            "download_count": 313244,
+            "project": "characteristic"
+        },
+        {
+            "download_count": 312696,
+            "project": "python-can"
+        },
+        {
+            "download_count": 312614,
+            "project": "planout"
+        },
+        {
+            "download_count": 312044,
+            "project": "submit50"
+        },
+        {
+            "download_count": 312044,
+            "project": "transformers"
+        },
+        {
+            "download_count": 311745,
+            "project": "django-celery-email"
+        },
+        {
+            "download_count": 311632,
+            "project": "check50"
+        },
+        {
+            "download_count": 311531,
+            "project": "ansimarkup"
+        },
+        {
+            "download_count": 311273,
+            "project": "flatdict"
+        },
+        {
+            "download_count": 311140,
+            "project": "minimal-snowplow-tracker"
+        },
+        {
+            "download_count": 311122,
+            "project": "python-troveclient"
+        },
+        {
+            "download_count": 310826,
+            "project": "pycpfcnpj"
+        },
+        {
+            "download_count": 310446,
+            "project": "python-lzf"
+        },
+        {
+            "download_count": 310429,
+            "project": "apsw"
+        },
+        {
+            "download_count": 310269,
+            "project": "stem"
+        },
+        {
+            "download_count": 310019,
+            "project": "mozinstall"
+        },
+        {
+            "download_count": 309655,
+            "project": "os-resource-classes"
+        },
+        {
+            "download_count": 309355,
+            "project": "mimeparse"
+        },
+        {
+            "download_count": 309293,
+            "project": "comet-ml"
+        },
+        {
+            "download_count": 309286,
+            "project": "serpy"
+        },
+        {
+            "download_count": 309092,
+            "project": "skimage"
+        },
+        {
+            "download_count": 308894,
+            "project": "pandas-ml"
+        },
+        {
+            "download_count": 308548,
+            "project": "python-magnumclient"
+        },
+        {
+            "download_count": 307984,
+            "project": "azure-devtools"
+        },
+        {
+            "download_count": 307690,
+            "project": "typesentry"
+        },
+        {
+            "download_count": 307277,
+            "project": "awslogs"
+        },
+        {
+            "download_count": 306928,
+            "project": "pytest-flakes"
+        },
+        {
+            "download_count": 306784,
+            "project": "thespian"
+        },
+        {
+            "download_count": 305826,
+            "project": "pykcs11"
+        },
+        {
+            "download_count": 305226,
+            "project": "singer-python"
+        },
+        {
+            "download_count": 304755,
+            "project": "pyprind"
+        },
+        {
+            "download_count": 304717,
+            "project": "abbyy"
+        },
+        {
+            "download_count": 304490,
+            "project": "flask-restful-swagger"
+        },
+        {
+            "download_count": 304399,
+            "project": "os-api-ref"
+        },
+        {
+            "download_count": 304195,
+            "project": "simpleitk"
+        },
+        {
+            "download_count": 304060,
+            "project": "unicorn"
+        },
+        {
+            "download_count": 304021,
+            "project": "jobspy"
+        },
+        {
+            "download_count": 303998,
+            "project": "devpi-common"
+        },
+        {
+            "download_count": 303970,
+            "project": "jsonpath"
+        },
+        {
+            "download_count": 303806,
+            "project": "pysubnettree"
+        },
+        {
+            "download_count": 303693,
+            "project": "hypercorn"
+        },
+        {
+            "download_count": 303592,
+            "project": "scrapy-random-useragent"
+        },
+        {
+            "download_count": 303497,
+            "project": "zope-schema"
+        },
+        {
+            "download_count": 303260,
+            "project": "newspaper3k"
+        },
+        {
+            "download_count": 302739,
+            "project": "pyspellchecker"
+        },
+        {
+            "download_count": 302714,
+            "project": "password"
+        },
+        {
+            "download_count": 302400,
+            "project": "testlink-api-python-client"
+        },
+        {
+            "download_count": 302299,
+            "project": "dogpile-core"
+        },
+        {
+            "download_count": 302266,
+            "project": "nilearn"
+        },
+        {
+            "download_count": 302076,
+            "project": "pylibftdi"
+        },
+        {
+            "download_count": 301868,
+            "project": "python-termstyle"
+        },
+        {
+            "download_count": 301830,
+            "project": "pybreaker"
+        },
+        {
+            "download_count": 301435,
+            "project": "django-wkhtmltopdf"
+        },
+        {
+            "download_count": 300585,
+            "project": "pyxdameraulevenshtein"
+        },
+        {
+            "download_count": 300425,
+            "project": "hpsklearn"
+        },
+        {
+            "download_count": 300421,
+            "project": "tesserocr"
+        },
+        {
+            "download_count": 300359,
+            "project": "django-templated-mail"
+        },
+        {
+            "download_count": 300207,
+            "project": "comet-git-pure"
+        },
+        {
+            "download_count": 299910,
+            "project": "httpcore"
+        },
+        {
+            "download_count": 299706,
+            "project": "simhash"
+        },
+        {
+            "download_count": 299276,
+            "project": "aspy-refactor-imports"
+        },
+        {
+            "download_count": 298943,
+            "project": "fcm-django"
+        },
+        {
+            "download_count": 298927,
+            "project": "flask-jwt"
+        },
+        {
+            "download_count": 298823,
+            "project": "serial"
+        },
+        {
+            "download_count": 298802,
+            "project": "binary"
+        },
+        {
+            "download_count": 298544,
+            "project": "plaidml"
+        },
+        {
+            "download_count": 298085,
+            "project": "python-oauth2"
+        },
+        {
+            "download_count": 297969,
+            "project": "opencv-contrib-python-headless"
+        },
+        {
+            "download_count": 297585,
+            "project": "djangocms-text-ckeditor"
+        },
+        {
+            "download_count": 297361,
+            "project": "better-exceptions-fork"
+        },
+        {
+            "download_count": 297253,
+            "project": "dynamodb-json"
+        },
+        {
+            "download_count": 297052,
+            "project": "bitmath"
+        },
+        {
+            "download_count": 296269,
+            "project": "condor-git-config"
+        },
+        {
+            "download_count": 296162,
+            "project": "cornice"
+        },
+        {
+            "download_count": 295986,
+            "project": "polyglot"
+        },
+        {
+            "download_count": 295722,
+            "project": "pytelegrambotapi"
+        },
+        {
+            "download_count": 295667,
+            "project": "mbed-cloud-sdk"
+        },
+        {
+            "download_count": 295592,
+            "project": "behave-django"
+        },
+        {
+            "download_count": 295509,
+            "project": "modernize"
+        },
+        {
+            "download_count": 295419,
+            "project": "libusb1"
+        },
+        {
+            "download_count": 295355,
+            "project": "edx-organizations"
+        },
+        {
+            "download_count": 294743,
+            "project": "sendgrid-django"
+        },
+        {
+            "download_count": 294453,
+            "project": "sniffio"
+        },
+        {
+            "download_count": 294364,
+            "project": "slugid"
+        },
+        {
+            "download_count": 294093,
+            "project": "pypika"
+        },
+        {
+            "download_count": 293799,
+            "project": "oci-cli"
+        },
+        {
+            "download_count": 293404,
+            "project": "django-rosetta"
+        },
+        {
+            "download_count": 293277,
+            "project": "proxmoxer"
+        },
+        {
+            "download_count": 292761,
+            "project": "anytemplate"
+        },
+        {
+            "download_count": 292649,
+            "project": "raven-aiohttp"
+        },
+        {
+            "download_count": 292327,
+            "project": "bbcode"
+        },
+        {
+            "download_count": 292281,
+            "project": "protego"
+        },
+        {
+            "download_count": 292277,
+            "project": "securesystemslib"
+        },
+        {
+            "download_count": 292249,
+            "project": "outcome"
+        },
+        {
+            "download_count": 291695,
+            "project": "crontab"
+        },
+        {
+            "download_count": 291636,
+            "project": "pytelegraf"
+        },
+        {
+            "download_count": 291495,
+            "project": "pylbfgs"
+        },
+        {
+            "download_count": 291341,
+            "project": "asttokens"
+        },
+        {
+            "download_count": 291275,
+            "project": "wtforms-components"
+        },
+        {
+            "download_count": 291039,
+            "project": "elasticsearch-async"
+        },
+        {
+            "download_count": 290811,
+            "project": "py-dateutil"
+        },
+        {
+            "download_count": 290793,
+            "project": "buildbot-worker"
+        },
+        {
+            "download_count": 290753,
+            "project": "atpublic"
+        },
+        {
+            "download_count": 290628,
+            "project": "django-cleanup"
+        },
+        {
+            "download_count": 290574,
+            "project": "urlopen"
+        },
+        {
+            "download_count": 290457,
+            "project": "cleanco"
+        },
+        {
+            "download_count": 290025,
+            "project": "home-assistant-frontend"
+        },
+        {
+            "download_count": 289983,
+            "project": "azureml-widgets"
+        },
+        {
+            "download_count": 289907,
+            "project": "pycallgraph"
+        },
+        {
+            "download_count": 289633,
+            "project": "biplist"
+        },
+        {
+            "download_count": 289587,
+            "project": "django-datatables-view"
+        },
+        {
+            "download_count": 289573,
+            "project": "guppy"
+        },
+        {
+            "download_count": 289366,
+            "project": "kaggle"
+        },
+        {
+            "download_count": 289053,
+            "project": "ratelimiter"
+        },
+        {
+            "download_count": 288392,
+            "project": "requests-aws"
+        },
+        {
+            "download_count": 288145,
+            "project": "prov"
+        },
+        {
+            "download_count": 288066,
+            "project": "xmodem"
+        },
+        {
+            "download_count": 287756,
+            "project": "pyobjc-framework-fsevents"
+        },
+        {
+            "download_count": 287736,
+            "project": "djangorestframework-stubs"
+        },
+        {
+            "download_count": 287716,
+            "project": "dailymotion"
+        },
+        {
+            "download_count": 287610,
+            "project": "airspeed"
+        },
+        {
+            "download_count": 287211,
+            "project": "pdfminer3k"
+        },
+        {
+            "download_count": 286932,
+            "project": "django-admin-tools"
+        },
+        {
+            "download_count": 286676,
+            "project": "rfc3339"
+        },
+        {
+            "download_count": 286568,
+            "project": "runlike"
+        },
+        {
+            "download_count": 286494,
+            "project": "pyobjc-framework-systemconfiguration"
+        },
+        {
+            "download_count": 286287,
+            "project": "flask-swagger-ui"
+        },
+        {
+            "download_count": 286286,
+            "project": "pyrabbit"
+        },
+        {
+            "download_count": 286217,
+            "project": "pyobjc-framework-cfnetwork"
+        },
+        {
+            "download_count": 285962,
+            "project": "django-htmlmin"
+        },
+        {
+            "download_count": 285937,
+            "project": "affinegap"
+        },
+        {
+            "download_count": 285640,
+            "project": "django-smart-selects"
+        },
+        {
+            "download_count": 285368,
+            "project": "jaraco-classes"
+        },
+        {
+            "download_count": 285182,
+            "project": "pyjq"
+        },
+        {
+            "download_count": 284862,
+            "project": "plaidml-keras"
+        },
+        {
+            "download_count": 284806,
+            "project": "pyobjc-framework-webkit"
+        },
+        {
+            "download_count": 284790,
+            "project": "jq"
+        },
+        {
+            "download_count": 284781,
+            "project": "django-taggit-serializer"
+        },
+        {
+            "download_count": 284424,
+            "project": "robotframework-databaselibrary"
+        },
+        {
+            "download_count": 284410,
+            "project": "httpsig-cffi"
+        },
+        {
+            "download_count": 284050,
+            "project": "instaloader"
+        },
+        {
+            "download_count": 284049,
+            "project": "powerline-status"
+        },
+        {
+            "download_count": 283986,
+            "project": "tap-py"
+        },
+        {
+            "download_count": 283939,
+            "project": "devpi-client"
+        },
+        {
+            "download_count": 283785,
+            "project": "banal"
+        },
+        {
+            "download_count": 283663,
+            "project": "docx"
+        },
+        {
+            "download_count": 283563,
+            "project": "python-geoip-geolite2"
+        },
+        {
+            "download_count": 283441,
+            "project": "bitstruct"
+        },
+        {
+            "download_count": 283402,
+            "project": "pyramid-jinja2"
+        },
+        {
+            "download_count": 283279,
+            "project": "graphitesend"
+        },
+        {
+            "download_count": 283227,
+            "project": "metafone"
+        },
+        {
+            "download_count": 283149,
+            "project": "tinysegmenter"
+        },
+        {
+            "download_count": 282747,
+            "project": "sqlalchemy-continuum"
+        },
+        {
+            "download_count": 282696,
+            "project": "opencensus-ext-stackdriver"
+        },
+        {
+            "download_count": 282668,
+            "project": "waiter"
+        },
+        {
+            "download_count": 282655,
+            "project": "sphinx-gallery"
+        },
+        {
+            "download_count": 282575,
+            "project": "git-pylint-commit-hook"
+        },
+        {
+            "download_count": 282479,
+            "project": "fuzzyset"
+        },
+        {
+            "download_count": 282254,
+            "project": "pytest-custom-exit-code"
+        },
+        {
+            "download_count": 281823,
+            "project": "hyperas"
+        },
+        {
+            "download_count": 281726,
+            "project": "django-simple-captcha"
+        },
+        {
+            "download_count": 281640,
+            "project": "dynamodb-encryption-sdk"
+        },
+        {
+            "download_count": 281597,
+            "project": "openexr"
+        },
+        {
+            "download_count": 281522,
+            "project": "pid"
+        },
+        {
+            "download_count": 281467,
+            "project": "irc3-plugins-test"
+        },
+        {
+            "download_count": 280788,
+            "project": "murmurhash3"
+        },
+        {
+            "download_count": 280402,
+            "project": "quart"
+        },
+        {
+            "download_count": 280081,
+            "project": "salesforce-bulkipy"
+        },
+        {
+            "download_count": 279935,
+            "project": "sphinx-argparse"
+        },
+        {
+            "download_count": 279690,
+            "project": "pptree"
+        },
+        {
+            "download_count": 279227,
+            "project": "djangorestframework-jsonapi"
+        },
+        {
+            "download_count": 279117,
+            "project": "marshmallow-polyfield"
+        },
+        {
+            "download_count": 278996,
+            "project": "tls-syslog"
+        },
+        {
+            "download_count": 278801,
+            "project": "fastprogress"
+        },
+        {
+            "download_count": 278661,
+            "project": "style"
+        },
+        {
+            "download_count": 278616,
+            "project": "pyjsparser"
+        },
+        {
+            "download_count": 278381,
+            "project": "celery-redbeat"
+        },
+        {
+            "download_count": 278041,
+            "project": "dbutils"
+        },
+        {
+            "download_count": 277922,
+            "project": "zvmcloudconnector"
+        },
+        {
+            "download_count": 277703,
+            "project": "blockdiag"
+        },
+        {
+            "download_count": 277555,
+            "project": "jsl"
+        },
+        {
+            "download_count": 277355,
+            "project": "aiomysql"
+        },
+        {
+            "download_count": 277155,
+            "project": "softlayer"
+        },
+        {
+            "download_count": 276993,
+            "project": "levenshtein-search"
+        },
+        {
+            "download_count": 276886,
+            "project": "gender-guesser"
+        },
+        {
+            "download_count": 276825,
+            "project": "msal"
+        },
+        {
+            "download_count": 276567,
+            "project": "sqlalchemy-stubs"
+        },
+        {
+            "download_count": 276536,
+            "project": "pyliblzma"
+        },
+        {
+            "download_count": 276486,
+            "project": "django-sass-processor"
+        },
+        {
+            "download_count": 276464,
+            "project": "django-url-filter"
+        },
+        {
+            "download_count": 276353,
+            "project": "sanic-plugins-framework"
+        },
+        {
+            "download_count": 276240,
+            "project": "jxmlease"
+        },
+        {
+            "download_count": 275861,
+            "project": "purl"
+        },
+        {
+            "download_count": 275254,
+            "project": "base36"
+        },
+        {
+            "download_count": 275159,
+            "project": "pytools"
+        },
+        {
+            "download_count": 275147,
+            "project": "datrie"
+        },
+        {
+            "download_count": 274643,
+            "project": "zxcvbn-python"
+        },
+        {
+            "download_count": 274395,
+            "project": "pytest-datafiles"
+        },
+        {
+            "download_count": 273920,
+            "project": "pyspark-stubs"
+        },
+        {
+            "download_count": 273728,
+            "project": "natto-py"
+        },
+        {
+            "download_count": 273719,
+            "project": "mechanicalsoup"
+        },
+        {
+            "download_count": 273603,
+            "project": "sqlalchemy-postgres-copy"
+        },
+        {
+            "download_count": 273574,
+            "project": "pycosat"
+        },
+        {
+            "download_count": 273348,
+            "project": "q"
+        },
+        {
+            "download_count": 273202,
+            "project": "backpack"
+        },
+        {
+            "download_count": 273056,
+            "project": "gmplot"
+        },
+        {
+            "download_count": 273050,
+            "project": "websockify"
+        },
+        {
+            "download_count": 273001,
+            "project": "measurement"
+        },
+        {
+            "download_count": 272990,
+            "project": "hass-nabucasa"
+        },
+        {
+            "download_count": 272948,
+            "project": "virtualenvwrapper-win"
+        },
+        {
+            "download_count": 272942,
+            "project": "email"
+        },
+        {
+            "download_count": 272542,
+            "project": "pyobjc-framework-launchservices"
+        },
+        {
+            "download_count": 272383,
+            "project": "webdriver-manager"
+        },
+        {
+            "download_count": 272315,
+            "project": "google-oauth"
+        },
+        {
+            "download_count": 272029,
+            "project": "django-js-reverse"
+        },
+        {
+            "download_count": 271929,
+            "project": "meinheld"
+        },
+        {
+            "download_count": 271914,
+            "project": "yapsy"
+        },
+        {
+            "download_count": 271877,
+            "project": "nteract-scrapbook"
+        },
+        {
+            "download_count": 271874,
+            "project": "mouseinfo"
+        },
+        {
+            "download_count": 271864,
+            "project": "pyobjc-framework-exceptionhandling"
+        },
+        {
+            "download_count": 271786,
+            "project": "dbt"
+        },
+        {
+            "download_count": 271483,
+            "project": "django-tagging"
+        },
+        {
+            "download_count": 271439,
+            "project": "taskcluster"
+        },
+        {
+            "download_count": 271349,
+            "project": "evdev"
+        },
+        {
+            "download_count": 270918,
+            "project": "dedupe-hcluster"
+        },
+        {
+            "download_count": 270898,
+            "project": "tensor2tensor"
+        },
+        {
+            "download_count": 270014,
+            "project": "pymacaroons"
+        },
+        {
+            "download_count": 269770,
+            "project": "kivy-garden"
+        },
+        {
+            "download_count": 269533,
+            "project": "nine"
+        },
+        {
+            "download_count": 269249,
+            "project": "highered"
+        },
+        {
+            "download_count": 269216,
+            "project": "sounddevice"
+        },
+        {
+            "download_count": 268421,
+            "project": "docx2txt"
+        },
+        {
+            "download_count": 268411,
+            "project": "robotframework-debuglibrary"
+        },
+        {
+            "download_count": 268172,
+            "project": "aioamqp"
+        },
+        {
+            "download_count": 268107,
+            "project": "cma"
+        },
+        {
+            "download_count": 267772,
+            "project": "netstruct"
+        },
+        {
+            "download_count": 267766,
+            "project": "pyhacrf-datamade"
+        },
+        {
+            "download_count": 267588,
+            "project": "flake8-junit-report"
+        },
+        {
+            "download_count": 267292,
+            "project": "wptools"
+        },
+        {
+            "download_count": 266807,
+            "project": "bump2version"
+        },
+        {
+            "download_count": 266733,
+            "project": "lesscpy"
+        },
+        {
+            "download_count": 266561,
+            "project": "pytest-vcr"
+        },
+        {
+            "download_count": 266544,
+            "project": "pyexcel-webio"
+        },
+        {
+            "download_count": 266422,
+            "project": "maya"
+        },
+        {
+            "download_count": 266355,
+            "project": "robotframework-xvfb"
+        },
+        {
+            "download_count": 266132,
+            "project": "dedupe"
+        },
+        {
+            "download_count": 266017,
+            "project": "pyminifier"
+        },
+        {
+            "download_count": 265818,
+            "project": "winkerberos"
+        },
+        {
+            "download_count": 265798,
+            "project": "mozanalysis"
+        },
+        {
+            "download_count": 265437,
+            "project": "username-generator"
+        },
+        {
+            "download_count": 265328,
+            "project": "phpserialize"
+        },
+        {
+            "download_count": 265105,
+            "project": "crc32c"
+        },
+        {
+            "download_count": 264933,
+            "project": "pretrainedmodels"
+        },
+        {
+            "download_count": 264845,
+            "project": "pytest-remotedata"
+        },
+        {
+            "download_count": 264729,
+            "project": "python-owasp-zap-v2-4"
+        },
+        {
+            "download_count": 264669,
+            "project": "nexpose"
+        },
+        {
+            "download_count": 264414,
+            "project": "http-parser"
+        },
+        {
+            "download_count": 264412,
+            "project": "pyobjc-framework-diskarbitration"
+        },
+        {
+            "download_count": 264322,
+            "project": "dsp3"
+        },
+        {
+            "download_count": 264189,
+            "project": "rlr"
+        },
+        {
+            "download_count": 263902,
+            "project": "pyqt5-tools"
+        },
+        {
+            "download_count": 263840,
+            "project": "json-tricks"
+        },
+        {
+            "download_count": 263390,
+            "project": "categorical-distance"
+        },
+        {
+            "download_count": 263282,
+            "project": "datalab"
+        },
+        {
+            "download_count": 263021,
+            "project": "update"
+        },
+        {
+            "download_count": 262783,
+            "project": "blobfile"
+        },
+        {
+            "download_count": 262644,
+            "project": "zc-buildout"
+        },
+        {
+            "download_count": 262529,
+            "project": "dedupe-variable-datetime"
+        },
+        {
+            "download_count": 262152,
+            "project": "simplecosine"
+        },
+        {
+            "download_count": 261988,
+            "project": "pytest-mockito"
+        },
+        {
+            "download_count": 261860,
+            "project": "django-otp-twilio"
+        },
+        {
+            "download_count": 261797,
+            "project": "django-chartit"
+        },
+        {
+            "download_count": 261611,
+            "project": "datetime-distance"
+        },
+        {
+            "download_count": 260878,
+            "project": "jaraco-text"
+        },
+        {
+            "download_count": 260837,
+            "project": "fastrlock"
+        },
+        {
+            "download_count": 260816,
+            "project": "flake8-future-import"
+        },
+        {
+            "download_count": 260795,
+            "project": "pyghmi"
+        },
+        {
+            "download_count": 260576,
+            "project": "orator"
+        },
+        {
+            "download_count": 260536,
+            "project": "flake8-tuple"
+        },
+        {
+            "download_count": 260250,
+            "project": "aiocache"
+        },
+        {
+            "download_count": 260202,
+            "project": "cli53"
+        },
+        {
+            "download_count": 260043,
+            "project": "untokenize"
+        },
+        {
+            "download_count": 259904,
+            "project": "newrelic-plugin-agent"
+        },
+        {
+            "download_count": 259773,
+            "project": "pyangbind"
+        },
+        {
+            "download_count": 259756,
+            "project": "django-pyodbc-azure"
+        },
+        {
+            "download_count": 259273,
+            "project": "zstd"
+        },
+        {
+            "download_count": 258974,
+            "project": "pymodbus"
+        },
+        {
+            "download_count": 258942,
+            "project": "jupyter-spark"
+        },
+        {
+            "download_count": 258875,
+            "project": "django-sortedm2m"
+        },
+        {
+            "download_count": 258300,
+            "project": "python-logstash-async"
+        },
+        {
+            "download_count": 258254,
+            "project": "django-graphql-jwt"
+        },
+        {
+            "download_count": 257389,
+            "project": "elasticquery"
+        },
+        {
+            "download_count": 257227,
+            "project": "python-keycloak"
+        },
+        {
+            "download_count": 257086,
+            "project": "dbus-python"
+        },
+        {
+            "download_count": 257005,
+            "project": "cmarkgfm"
+        },
+        {
+            "download_count": 256972,
+            "project": "pysrt"
+        },
+        {
+            "download_count": 256801,
+            "project": "pyobjc-framework-coreservices"
+        },
+        {
+            "download_count": 256683,
+            "project": "django-paypal"
+        },
+        {
+            "download_count": 256576,
+            "project": "spur"
+        },
+        {
+            "download_count": 256447,
+            "project": "iniparse"
+        },
+        {
+            "download_count": 256111,
+            "project": "python-terraform"
+        },
+        {
+            "download_count": 255860,
+            "project": "djangorestframework-jsonp"
+        },
+        {
+            "download_count": 255835,
+            "project": "rethinkdb"
+        },
+        {
+            "download_count": 255719,
+            "project": "mozcrash"
+        },
+        {
+            "download_count": 255201,
+            "project": "pyobjc-framework-quartz"
+        },
+        {
+            "download_count": 254935,
+            "project": "django-organizations"
+        },
+        {
+            "download_count": 254677,
+            "project": "django-colorfield"
+        },
+        {
+            "download_count": 254646,
+            "project": "marshmallow-jsonapi"
+        },
+        {
+            "download_count": 254107,
+            "project": "djangorestframework-expander"
+        },
+        {
+            "download_count": 253885,
+            "project": "dci-utils"
+        },
+        {
+            "download_count": 253884,
+            "project": "pql"
+        },
+        {
+            "download_count": 253867,
+            "project": "tf-nightly-2-0-preview"
+        },
+        {
+            "download_count": 253608,
+            "project": "django-parler"
+        },
+        {
+            "download_count": 253475,
+            "project": "telethon"
+        },
+        {
+            "download_count": 253099,
+            "project": "celery-once"
+        },
+        {
+            "download_count": 253054,
+            "project": "scales"
+        },
+        {
+            "download_count": 253035,
+            "project": "rocketchat-api"
+        },
+        {
+            "download_count": 252896,
+            "project": "jaraco-collections"
+        },
+        {
+            "download_count": 252760,
+            "project": "yaql"
+        },
+        {
+            "download_count": 252588,
+            "project": "pyinquirer"
+        },
+        {
+            "download_count": 252471,
+            "project": "django-session-security"
+        },
+        {
+            "download_count": 252413,
+            "project": "django-rest-knox"
+        },
+        {
+            "download_count": 252295,
+            "project": "django-redshift-backend"
+        },
+        {
+            "download_count": 251901,
+            "project": "sphinx-markdown-tables"
+        },
+        {
+            "download_count": 251862,
+            "project": "sceptre"
+        },
+        {
+            "download_count": 251840,
+            "project": "py-mini-racer"
+        },
+        {
+            "download_count": 251759,
+            "project": "python-rake"
+        },
+        {
+            "download_count": 251594,
+            "project": "oauth2-client"
+        },
+        {
+            "download_count": 251347,
+            "project": "env"
+        },
+        {
+            "download_count": 251337,
+            "project": "timedelta"
+        },
+        {
+            "download_count": 250784,
+            "project": "awkward"
+        },
+        {
+            "download_count": 250362,
+            "project": "edx-rbac"
+        },
+        {
+            "download_count": 250192,
+            "project": "flask-log-request-id"
+        },
+        {
+            "download_count": 250110,
+            "project": "globre"
+        },
+        {
+            "download_count": 249752,
+            "project": "django-easy-pdf"
+        },
+        {
+            "download_count": 249646,
+            "project": "prettyexc"
+        },
+        {
+            "download_count": 249416,
+            "project": "django-notifications-hq"
+        },
+        {
+            "download_count": 249316,
+            "project": "mozleak"
+        },
+        {
+            "download_count": 249286,
+            "project": "autograd-gamma"
+        },
+        {
+            "download_count": 249216,
+            "project": "flask-injector"
+        },
+        {
+            "download_count": 249101,
+            "project": "holoviews"
+        },
+        {
+            "download_count": 249064,
+            "project": "inflector"
+        },
+        {
+            "download_count": 248895,
+            "project": "django-honeypot"
+        },
+        {
+            "download_count": 248839,
+            "project": "pip-api"
+        },
+        {
+            "download_count": 248670,
+            "project": "pytest-testmon"
+        },
+        {
+            "download_count": 248527,
+            "project": "pycapnp"
+        },
+        {
+            "download_count": 248395,
+            "project": "pgpy"
+        },
+        {
+            "download_count": 248134,
+            "project": "pretend"
+        },
+        {
+            "download_count": 247952,
+            "project": "webhelpers"
+        },
+        {
+            "download_count": 247612,
+            "project": "iso4217"
+        },
+        {
+            "download_count": 247588,
+            "project": "chargebee"
+        },
+        {
+            "download_count": 247194,
+            "project": "logging-tree"
+        },
+        {
+            "download_count": 247097,
+            "project": "bcolz"
+        },
+        {
+            "download_count": 247095,
+            "project": "pydomo"
+        },
+        {
+            "download_count": 247093,
+            "project": "pyviz-comms"
+        },
+        {
+            "download_count": 246905,
+            "project": "pyes"
+        },
+        {
+            "download_count": 246637,
+            "project": "patool"
+        },
+        {
+            "download_count": 246609,
+            "project": "django-saml2-auth"
+        },
+        {
+            "download_count": 246442,
+            "project": "lorem"
+        },
+        {
+            "download_count": 246345,
+            "project": "kociemba"
+        },
+        {
+            "download_count": 245924,
+            "project": "nylas"
+        },
+        {
+            "download_count": 245599,
+            "project": "urlparse3"
+        },
+        {
+            "download_count": 245592,
+            "project": "pytest-tornado"
+        },
+        {
+            "download_count": 245425,
+            "project": "inject"
+        },
+        {
+            "download_count": 244242,
+            "project": "tabledata"
+        },
+        {
+            "download_count": 244197,
+            "project": "percy"
+        },
+        {
+            "download_count": 243680,
+            "project": "snitun"
+        },
+        {
+            "download_count": 243665,
+            "project": "django-debug-toolbar-line-profiler"
+        },
+        {
+            "download_count": 243077,
+            "project": "bottlenose"
+        },
+        {
+            "download_count": 242781,
+            "project": "infi-clickhouse-orm"
+        },
+        {
+            "download_count": 242659,
+            "project": "reppy"
+        },
+        {
+            "download_count": 242378,
+            "project": "in-toto"
+        },
+        {
+            "download_count": 242112,
+            "project": "azureml"
+        },
+        {
+            "download_count": 242067,
+            "project": "django-common-helpers"
+        },
+        {
+            "download_count": 241994,
+            "project": "django-hijack-admin"
+        },
+        {
+            "download_count": 241868,
+            "project": "cmreshandler"
+        },
+        {
+            "download_count": 241645,
+            "project": "ruptures"
+        },
+        {
+            "download_count": 241594,
+            "project": "goslate"
+        },
+        {
+            "download_count": 241370,
+            "project": "aggdraw"
+        },
+        {
+            "download_count": 241223,
+            "project": "django-boto"
+        },
+        {
+            "download_count": 240546,
+            "project": "svn"
+        },
+        {
+            "download_count": 240121,
+            "project": "ssh"
+        },
+        {
+            "download_count": 240049,
+            "project": "py3dns"
+        },
+        {
+            "download_count": 239971,
+            "project": "pymonkey"
+        },
+        {
+            "download_count": 239838,
+            "project": "great-expectations"
+        },
+        {
+            "download_count": 239830,
+            "project": "pip-custom-platform"
+        },
+        {
+            "download_count": 239729,
+            "project": "django-libsass"
+        },
+        {
+            "download_count": 239683,
+            "project": "mirakuru"
+        },
+        {
+            "download_count": 239680,
+            "project": "microsoftgraph-python"
+        },
+        {
+            "download_count": 239524,
+            "project": "gnocchiclient"
+        },
+        {
+            "download_count": 239407,
+            "project": "pyct"
+        },
+        {
+            "download_count": 239390,
+            "project": "ansible-runner"
+        },
+        {
+            "download_count": 239360,
+            "project": "dbt-core"
+        },
+        {
+            "download_count": 239183,
+            "project": "hellosign-python-sdk"
+        },
+        {
+            "download_count": 239095,
+            "project": "pyaudioanalysis"
+        },
+        {
+            "download_count": 239001,
+            "project": "reportportal-client"
+        },
+        {
+            "download_count": 238983,
+            "project": "itunes-iap"
+        },
+        {
+            "download_count": 238603,
+            "project": "terminalone"
+        },
+        {
+            "download_count": 238597,
+            "project": "snaptime"
+        },
+        {
+            "download_count": 238394,
+            "project": "aiormq"
+        },
+        {
+            "download_count": 238154,
+            "project": "djangocms-attributes-field"
+        },
+        {
+            "download_count": 238141,
+            "project": "django-versatileimagefield"
+        },
+        {
+            "download_count": 237972,
+            "project": "django-push-notifications"
+        },
+        {
+            "download_count": 237750,
+            "project": "transliterate"
+        },
+        {
+            "download_count": 237652,
+            "project": "whaaaaat"
+        },
+        {
+            "download_count": 237622,
+            "project": "django-sslify"
+        },
+        {
+            "download_count": 237558,
+            "project": "towncrier"
+        },
+        {
+            "download_count": 237018,
+            "project": "py-lz4framed"
+        },
+        {
+            "download_count": 236912,
+            "project": "uproot-methods"
+        },
+        {
+            "download_count": 236619,
+            "project": "django-statici18n"
+        },
+        {
+            "download_count": 236529,
+            "project": "pytd"
+        },
+        {
+            "download_count": 236270,
+            "project": "pep517"
+        },
+        {
+            "download_count": 236180,
+            "project": "py-ecc"
+        },
+        {
+            "download_count": 236180,
+            "project": "layered-yaml-attrdict-config"
+        },
+        {
+            "download_count": 235952,
+            "project": "varint"
+        },
+        {
+            "download_count": 235921,
+            "project": "spotipy"
+        },
+        {
+            "download_count": 235732,
+            "project": "django-markdown-deux"
+        },
+        {
+            "download_count": 235635,
+            "project": "geventhttpclient-wheels"
+        },
+        {
+            "download_count": 235481,
+            "project": "parallel-ssh"
+        },
+        {
+            "download_count": 235241,
+            "project": "event-tracking"
+        },
+        {
+            "download_count": 234835,
+            "project": "jupyterthemes"
+        },
+        {
+            "download_count": 234721,
+            "project": "django-pandas"
+        },
+        {
+            "download_count": 234582,
+            "project": "stackprinter"
+        },
+        {
+            "download_count": 234393,
+            "project": "probablepeople"
+        },
+        {
+            "download_count": 234334,
+            "project": "flake8-eradicate"
+        },
+        {
+            "download_count": 234277,
+            "project": "mode"
+        },
+        {
+            "download_count": 234271,
+            "project": "asset"
+        },
+        {
+            "download_count": 234150,
+            "project": "loggly-python-handler"
+        },
+        {
+            "download_count": 233705,
+            "project": "supervisor-wildcards"
+        },
+        {
+            "download_count": 233601,
+            "project": "edx-bulk-grades"
+        },
+        {
+            "download_count": 233407,
+            "project": "glean-parser"
+        },
+        {
+            "download_count": 233242,
+            "project": "morfessor"
+        },
+        {
+            "download_count": 233191,
+            "project": "pyzbar"
+        },
+        {
+            "download_count": 232874,
+            "project": "nbstripout"
+        },
+        {
+            "download_count": 232838,
+            "project": "mnemonic"
+        },
+        {
+            "download_count": 232704,
+            "project": "pyeclib"
+        },
+        {
+            "download_count": 232607,
+            "project": "flask-sockets"
+        },
+        {
+            "download_count": 232578,
+            "project": "esrally"
+        },
+        {
+            "download_count": 232565,
+            "project": "django-crontab"
+        },
+        {
+            "download_count": 232517,
+            "project": "standardjson"
+        },
+        {
+            "download_count": 232389,
+            "project": "sphinxcontrib-svg2pdfconverter"
+        },
+        {
+            "download_count": 232208,
+            "project": "jep"
+        },
+        {
+            "download_count": 231947,
+            "project": "contractions"
+        },
+        {
+            "download_count": 231914,
+            "project": "hashlib"
+        },
+        {
+            "download_count": 231894,
+            "project": "hdrhistogram"
+        },
+        {
+            "download_count": 231873,
+            "project": "pydoe"
+        },
+        {
+            "download_count": 231818,
+            "project": "colorhash"
+        },
+        {
+            "download_count": 231678,
+            "project": "venv-update"
+        },
+        {
+            "download_count": 231678,
+            "project": "pytidylib"
+        },
+        {
+            "download_count": 231634,
+            "project": "sas7bdat"
+        },
+        {
+            "download_count": 231555,
+            "project": "pybrain"
+        },
+        {
+            "download_count": 231491,
+            "project": "locust"
+        },
+        {
+            "download_count": 231449,
+            "project": "easygui"
+        },
+        {
+            "download_count": 231322,
+            "project": "pytest-qt"
+        },
+        {
+            "download_count": 231297,
+            "project": "prance"
+        },
+        {
+            "download_count": 231250,
+            "project": "nose-ignore-docstring"
+        },
+        {
+            "download_count": 231113,
+            "project": "snakeviz"
+        },
+        {
+            "download_count": 231027,
+            "project": "pygaljs"
+        },
+        {
+            "download_count": 230954,
+            "project": "rainbow-saddle"
+        },
+        {
+            "download_count": 230879,
+            "project": "wsgiref"
+        },
+        {
+            "download_count": 230659,
+            "project": "django-config-models"
+        },
+        {
+            "download_count": 230631,
+            "project": "django-partial-index"
+        },
+        {
+            "download_count": 230614,
+            "project": "restrictedpython"
+        },
+        {
+            "download_count": 230470,
+            "project": "consulate"
+        },
+        {
+            "download_count": 230441,
+            "project": "django-s3-storage"
+        },
+        {
+            "download_count": 230436,
+            "project": "jenkins"
+        },
+        {
+            "download_count": 230427,
+            "project": "mtranslate"
+        },
+        {
+            "download_count": 230393,
+            "project": "aiosmtplib"
+        },
+        {
+            "download_count": 230248,
+            "project": "django-statsd-mozilla"
+        },
+        {
+            "download_count": 229850,
+            "project": "ffmpeg"
+        },
+        {
+            "download_count": 229620,
+            "project": "django-ranged-response"
+        },
+        {
+            "download_count": 229579,
+            "project": "pytest-cover"
+        },
+        {
+            "download_count": 229403,
+            "project": "flexget"
+        },
+        {
+            "download_count": 229292,
+            "project": "django-cachalot"
+        },
+        {
+            "download_count": 229142,
+            "project": "django-activity-stream"
+        },
+        {
+            "download_count": 229046,
+            "project": "daemonocle"
+        },
+        {
+            "download_count": 228702,
+            "project": "mimerender"
+        },
+        {
+            "download_count": 228552,
+            "project": "mathematics-dataset"
+        },
+        {
+            "download_count": 228521,
+            "project": "money"
+        },
+        {
+            "download_count": 228488,
+            "project": "flake8-formatter-junit-xml"
+        },
+        {
+            "download_count": 228281,
+            "project": "python-vagrant"
+        },
+        {
+            "download_count": 228240,
+            "project": "parquet"
+        },
+        {
+            "download_count": 228235,
+            "project": "asciimatics"
+        },
+        {
+            "download_count": 228066,
+            "project": "singleton-decorator"
+        },
+        {
+            "download_count": 228004,
+            "project": "petl"
+        },
+        {
+            "download_count": 227997,
+            "project": "dogpile"
+        },
+        {
+            "download_count": 227746,
+            "project": "beaver"
+        },
+        {
+            "download_count": 227738,
+            "project": "dbt-postgres"
+        },
+        {
+            "download_count": 227570,
+            "project": "patch-ng"
+        },
+        {
+            "download_count": 227212,
+            "project": "pytest-replay"
+        },
+        {
+            "download_count": 227202,
+            "project": "django-settings-export"
+        },
+        {
+            "download_count": 227048,
+            "project": "traittypes"
+        },
+        {
+            "download_count": 227010,
+            "project": "ipcalc"
+        },
+        {
+            "download_count": 226931,
+            "project": "django-elasticache"
+        },
+        {
+            "download_count": 226656,
+            "project": "pywsd"
+        },
+        {
+            "download_count": 226426,
+            "project": "flask-kvsession"
+        },
+        {
+            "download_count": 226328,
+            "project": "pytest-logging"
+        },
+        {
+            "download_count": 226143,
+            "project": "java-random"
+        },
+        {
+            "download_count": 226134,
+            "project": "flask-seasurf"
+        },
+        {
+            "download_count": 226129,
+            "project": "posix-ipc"
+        },
+        {
+            "download_count": 226063,
+            "project": "zconfig"
+        },
+        {
+            "download_count": 225964,
+            "project": "flask-uuid"
+        },
+        {
+            "download_count": 225932,
+            "project": "djangorestframework-oauth"
+        },
+        {
+            "download_count": 225898,
+            "project": "nest-asyncio"
+        },
+        {
+            "download_count": 225852,
+            "project": "flock"
+        },
+        {
+            "download_count": 225551,
+            "project": "taskcluster-urls"
+        },
+        {
+            "download_count": 225391,
+            "project": "cntk"
+        },
+        {
+            "download_count": 224972,
+            "project": "lolcat"
+        },
+        {
+            "download_count": 224933,
+            "project": "pyramid-beaker"
+        },
+        {
+            "download_count": 224799,
+            "project": "pytest-allure-adaptor"
+        },
+        {
+            "download_count": 224606,
+            "project": "openapi-core"
+        },
+        {
+            "download_count": 224528,
+            "project": "jaraco-itertools"
+        },
+        {
+            "download_count": 224426,
+            "project": "emcee"
+        },
+        {
+            "download_count": 224246,
+            "project": "trio"
+        },
+        {
+            "download_count": 224218,
+            "project": "plotly-express"
+        },
+        {
+            "download_count": 224064,
+            "project": "hexdump"
+        },
+        {
+            "download_count": 224043,
+            "project": "binpacking"
+        },
+        {
+            "download_count": 224021,
+            "project": "babelfish"
+        },
+        {
+            "download_count": 223853,
+            "project": "bincrafters-package-tools"
+        },
+        {
+            "download_count": 223736,
+            "project": "edx-rest-api-client"
+        },
+        {
+            "download_count": 223721,
+            "project": "rstcheck"
+        },
+        {
+            "download_count": 223494,
+            "project": "pylogo"
+        },
+        {
+            "download_count": 223248,
+            "project": "h2o-pysparkling-2-3"
+        },
+        {
+            "download_count": 223214,
+            "project": "pybloom"
+        },
+        {
+            "download_count": 222931,
+            "project": "python3-memcached"
+        },
+        {
+            "download_count": 222858,
+            "project": "conda"
+        },
+        {
+            "download_count": 222781,
+            "project": "confusable-homoglyphs"
+        },
+        {
+            "download_count": 222739,
+            "project": "loky"
+        },
+        {
+            "download_count": 222684,
+            "project": "super-csv"
+        },
+        {
+            "download_count": 222634,
+            "project": "jprops"
+        },
+        {
+            "download_count": 222587,
+            "project": "keyvaultlib"
+        },
+        {
+            "download_count": 222554,
+            "project": "fbmessenger"
+        },
+        {
+            "download_count": 222508,
+            "project": "wiremock"
+        },
+        {
+            "download_count": 222412,
+            "project": "django-prettyjson"
+        },
+        {
+            "download_count": 222176,
+            "project": "hug"
+        },
+        {
+            "download_count": 222175,
+            "project": "mws"
+        },
+        {
+            "download_count": 221970,
+            "project": "dash-daq"
+        },
+        {
+            "download_count": 221895,
+            "project": "slycot"
+        },
+        {
+            "download_count": 221892,
+            "project": "flask-uploads"
+        },
+        {
+            "download_count": 221647,
+            "project": "alooma"
+        },
+        {
+            "download_count": 221631,
+            "project": "muffnn"
+        },
+        {
+            "download_count": 221604,
+            "project": "python-gettext"
+        },
+        {
+            "download_count": 221598,
+            "project": "civisml-extensions"
+        },
+        {
+            "download_count": 221440,
+            "project": "jaydebeapi3"
+        },
+        {
+            "download_count": 221407,
+            "project": "scikit-plot"
+        },
+        {
+            "download_count": 220993,
+            "project": "twitter-ads"
+        },
+        {
+            "download_count": 220495,
+            "project": "pandoc"
+        },
+        {
+            "download_count": 220301,
+            "project": "nplusone"
+        },
+        {
+            "download_count": 220198,
+            "project": "sudachipy"
+        },
+        {
+            "download_count": 220107,
+            "project": "django-render-block"
+        },
+        {
+            "download_count": 219983,
+            "project": "pyrebase"
+        },
+        {
+            "download_count": 219731,
+            "project": "fabric2"
+        },
+        {
+            "download_count": 219711,
+            "project": "cloudfoundry-client"
+        },
+        {
+            "download_count": 219544,
+            "project": "edx-completion"
+        },
+        {
+            "download_count": 219404,
+            "project": "tabulator"
+        },
+        {
+            "download_count": 219376,
+            "project": "django-cron"
+        },
+        {
+            "download_count": 219261,
+            "project": "sk-video"
+        },
+        {
+            "download_count": 219216,
+            "project": "zope-i18nmessageid"
+        },
+        {
+            "download_count": 218973,
+            "project": "colorful"
+        },
+        {
+            "download_count": 218307,
+            "project": "s4cmd"
+        },
+        {
+            "download_count": 218171,
+            "project": "pychromecast"
+        },
+        {
+            "download_count": 218073,
+            "project": "pyvisa"
+        },
+        {
+            "download_count": 217824,
+            "project": "bok-choy"
+        },
+        {
+            "download_count": 217614,
+            "project": "py-zipkin"
+        },
+        {
+            "download_count": 217311,
+            "project": "ansible-modules-hashivault"
+        },
+        {
+            "download_count": 217201,
+            "project": "datefinder"
+        },
+        {
+            "download_count": 217188,
+            "project": "json-logic-qubit"
+        },
+        {
+            "download_count": 216980,
+            "project": "sparse-dot-topn"
+        },
+        {
+            "download_count": 216825,
+            "project": "flask-dance"
+        },
+        {
+            "download_count": 216707,
+            "project": "aiml"
+        },
+        {
+            "download_count": 216645,
+            "project": "certipy"
+        },
+        {
+            "download_count": 216205,
+            "project": "area"
+        },
+        {
+            "download_count": 216115,
+            "project": "sphinx-click"
+        },
+        {
+            "download_count": 215902,
+            "project": "pylint-common"
+        },
+        {
+            "download_count": 215763,
+            "project": "stompest"
+        },
+        {
+            "download_count": 215715,
+            "project": "questionary"
+        },
+        {
+            "download_count": 215011,
+            "project": "lupa"
+        },
+        {
+            "download_count": 214880,
+            "project": "usbinfo"
+        },
+        {
+            "download_count": 214864,
+            "project": "marshmallow-objects"
+        },
+        {
+            "download_count": 214855,
+            "project": "django-encrypted-filefield"
+        },
+        {
+            "download_count": 214793,
+            "project": "kerberos"
+        },
+        {
+            "download_count": 214757,
+            "project": "isim"
+        },
+        {
+            "download_count": 214507,
+            "project": "flask-moment"
+        },
+        {
+            "download_count": 214468,
+            "project": "boto3-session-cache"
+        },
+        {
+            "download_count": 214280,
+            "project": "yacs"
+        },
+        {
+            "download_count": 214088,
+            "project": "bigquery-python"
+        },
+        {
+            "download_count": 213952,
+            "project": "mobly"
+        },
+        {
+            "download_count": 213688,
+            "project": "pyethash"
+        },
+        {
+            "download_count": 213494,
+            "project": "django-colorful"
+        },
+        {
+            "download_count": 213445,
+            "project": "ics"
+        },
+        {
+            "download_count": 213185,
+            "project": "eyes-selenium"
+        },
+        {
+            "download_count": 213156,
+            "project": "zdesk"
+        },
+        {
+            "download_count": 213151,
+            "project": "requests-credssp"
+        },
+        {
+            "download_count": 213071,
+            "project": "autosemver"
+        },
+        {
+            "download_count": 212879,
+            "project": "ffx"
+        },
+        {
+            "download_count": 212740,
+            "project": "wn"
+        },
+        {
+            "download_count": 212739,
+            "project": "linear-tsv"
+        },
+        {
+            "download_count": 212738,
+            "project": "webexteamssdk"
+        },
+        {
+            "download_count": 212640,
+            "project": "circus"
+        },
+        {
+            "download_count": 212529,
+            "project": "multiaddr"
+        },
+        {
+            "download_count": 212516,
+            "project": "zipcode"
+        },
+        {
+            "download_count": 212435,
+            "project": "dbt-bigquery"
+        },
+        {
+            "download_count": 212295,
+            "project": "androguard"
+        },
+        {
+            "download_count": 212275,
+            "project": "gapic-google-cloud-spanner-v1"
+        },
+        {
+            "download_count": 212211,
+            "project": "gapic-google-cloud-spanner-admin-database-v1"
+        },
+        {
+            "download_count": 212204,
+            "project": "gapic-google-cloud-spanner-admin-instance-v1"
+        },
+        {
+            "download_count": 212074,
+            "project": "proto-google-cloud-spanner-v1"
+        },
+        {
+            "download_count": 211988,
+            "project": "pip-review"
+        },
+        {
+            "download_count": 211861,
+            "project": "passwordmeter"
+        },
+        {
+            "download_count": 211783,
+            "project": "dbt-redshift"
+        },
+        {
+            "download_count": 211766,
+            "project": "proto-google-cloud-spanner-admin-database-v1"
+        },
+        {
+            "download_count": 211758,
+            "project": "proto-google-cloud-spanner-admin-instance-v1"
+        },
+        {
+            "download_count": 211695,
+            "project": "python-prctl"
+        },
+        {
+            "download_count": 211523,
+            "project": "dbt-snowflake"
+        },
+        {
+            "download_count": 211483,
+            "project": "aws-kinesis-agg"
+        },
+        {
+            "download_count": 211368,
+            "project": "pwntools"
+        },
+        {
+            "download_count": 211309,
+            "project": "fs-s3fs"
+        },
+        {
+            "download_count": 211286,
+            "project": "cloudshell-automation-api"
+        },
+        {
+            "download_count": 211188,
+            "project": "postgres"
+        },
+        {
+            "download_count": 211130,
+            "project": "pymeta3"
+        },
+        {
+            "download_count": 210970,
+            "project": "robotframework-jsonlibrary"
+        },
+        {
+            "download_count": 210929,
+            "project": "conllu"
+        },
+        {
+            "download_count": 210633,
+            "project": "rpi-gpio"
+        },
+        {
+            "download_count": 210596,
+            "project": "aresponses"
+        },
+        {
+            "download_count": 210520,
+            "project": "textacy"
+        },
+        {
+            "download_count": 210501,
+            "project": "djangocms-link"
+        },
+        {
+            "download_count": 210080,
+            "project": "uproot"
+        },
+        {
+            "download_count": 209987,
+            "project": "django-fsm-admin"
+        },
+        {
+            "download_count": 209975,
+            "project": "anybadge"
+        },
+        {
+            "download_count": 209424,
+            "project": "clearbit"
+        },
+        {
+            "download_count": 209150,
+            "project": "fakenewsredis"
+        },
+        {
+            "download_count": 209126,
+            "project": "sdnotify"
+        },
+        {
+            "download_count": 209028,
+            "project": "python-baseconv"
+        },
+        {
+            "download_count": 208950,
+            "project": "pytest-dotenv"
+        },
+        {
+            "download_count": 208654,
+            "project": "pytest-logger"
+        },
+        {
+            "download_count": 208524,
+            "project": "c7n"
+        },
+        {
+            "download_count": 208338,
+            "project": "webium"
+        },
+        {
+            "download_count": 208232,
+            "project": "eliot"
+        },
+        {
+            "download_count": 208191,
+            "project": "anaconda"
+        },
+        {
+            "download_count": 208167,
+            "project": "zope-configuration"
+        },
+        {
+            "download_count": 208131,
+            "project": "talon"
+        },
+        {
+            "download_count": 208092,
+            "project": "django-split-settings"
+        },
+        {
+            "download_count": 207912,
+            "project": "elasticsearch6"
+        },
+        {
+            "download_count": 207665,
+            "project": "cx-freeze"
+        },
+        {
+            "download_count": 207551,
+            "project": "pyclipper"
+        },
+        {
+            "download_count": 207474,
+            "project": "duo-web"
+        },
+        {
+            "download_count": 207412,
+            "project": "django-easy-select2"
+        },
+        {
+            "download_count": 207319,
+            "project": "pytricia"
+        },
+        {
+            "download_count": 207241,
+            "project": "pyecharts"
+        },
+        {
+            "download_count": 207068,
+            "project": "zendesk"
+        },
+        {
+            "download_count": 206988,
+            "project": "zodbpickle"
+        },
+        {
+            "download_count": 206923,
+            "project": "scout-apm"
+        },
+        {
+            "download_count": 206832,
+            "project": "contexttimer"
+        },
+        {
+            "download_count": 206379,
+            "project": "ngxtop"
+        },
+        {
+            "download_count": 206215,
+            "project": "python-xmp-toolkit"
+        },
+        {
+            "download_count": 205992,
+            "project": "redlock"
+        },
+        {
+            "download_count": 205889,
+            "project": "smartypants"
+        },
+        {
+            "download_count": 205562,
+            "project": "flake8-coding"
+        },
+        {
+            "download_count": 205284,
+            "project": "zodb"
+        },
+        {
+            "download_count": 205270,
+            "project": "django-reversion-compare"
+        },
+        {
+            "download_count": 205192,
+            "project": "html-linter"
+        },
+        {
+            "download_count": 205141,
+            "project": "client"
+        },
+        {
+            "download_count": 205070,
+            "project": "backports-shutil-which"
+        },
+        {
+            "download_count": 204937,
+            "project": "frida"
+        },
+        {
+            "download_count": 204809,
+            "project": "dawg-python"
+        },
+        {
+            "download_count": 204696,
+            "project": "django-transaction-hooks"
+        },
+        {
+            "download_count": 204486,
+            "project": "aiotask-context"
+        },
+        {
+            "download_count": 204328,
+            "project": "lazy-property"
+        },
+        {
+            "download_count": 204268,
+            "project": "urlparse2"
+        },
+        {
+            "download_count": 204251,
+            "project": "template-remover"
+        },
+        {
+            "download_count": 204130,
+            "project": "pyttsx3"
+        },
+        {
+            "download_count": 204053,
+            "project": "mesh-tensorflow"
+        },
+        {
+            "download_count": 203892,
+            "project": "django-crum"
+        },
+        {
+            "download_count": 203786,
+            "project": "asciitree"
+        },
+        {
+            "download_count": 203548,
+            "project": "flake8-deprecated"
+        },
+        {
+            "download_count": 203495,
+            "project": "weberror"
+        },
+        {
+            "download_count": 203493,
+            "project": "shudder"
+        },
+        {
+            "download_count": 203310,
+            "project": "dash-auth"
+        },
+        {
+            "download_count": 203161,
+            "project": "rasa-nlu"
+        },
+        {
+            "download_count": 203073,
+            "project": "conf-d"
+        },
+        {
+            "download_count": 202765,
+            "project": "django-slack"
+        },
+        {
+            "download_count": 202648,
+            "project": "pocketsphinx"
+        },
+        {
+            "download_count": 202044,
+            "project": "pydivert"
+        },
+        {
+            "download_count": 202007,
+            "project": "blosc"
+        },
+        {
+            "download_count": 201958,
+            "project": "zipstream"
+        },
+        {
+            "download_count": 201831,
+            "project": "parallel-sync"
+        },
+        {
+            "download_count": 201651,
+            "project": "pycuda"
+        },
+        {
+            "download_count": 201622,
+            "project": "ta-lib"
+        },
+        {
+            "download_count": 201459,
+            "project": "jmxquery"
+        },
+        {
+            "download_count": 201457,
+            "project": "tabula-py"
+        },
+        {
+            "download_count": 201395,
+            "project": "pytest-flask-sqlalchemy"
+        },
+        {
+            "download_count": 201101,
+            "project": "collectd"
+        },
+        {
+            "download_count": 201096,
+            "project": "django-rest-multiple-models"
+        },
+        {
+            "download_count": 201084,
+            "project": "pyobjc-framework-coretext"
+        },
+        {
+            "download_count": 200633,
+            "project": "smart-getenv"
+        },
+        {
+            "download_count": 200507,
+            "project": "pyramid-retry"
+        },
+        {
+            "download_count": 200444,
+            "project": "codeclimate-test-reporter"
+        },
+        {
+            "download_count": 200411,
+            "project": "publicsuffixlist"
+        },
+        {
+            "download_count": 200394,
+            "project": "algoliasearch-django"
+        },
+        {
+            "download_count": 200267,
+            "project": "pytest-salt"
+        },
+        {
+            "download_count": 200235,
+            "project": "pytest-doctestplus"
+        },
+        {
+            "download_count": 200035,
+            "project": "zope-lifecycleevent"
+        },
+        {
+            "download_count": 199808,
+            "project": "python-zaqarclient"
+        },
+        {
+            "download_count": 199774,
+            "project": "iniherit"
+        },
+        {
+            "download_count": 199753,
+            "project": "pymorphy2-dicts"
+        },
+        {
+            "download_count": 199695,
+            "project": "hanging-threads"
+        },
+        {
+            "download_count": 199645,
+            "project": "flask-classful"
+        },
+        {
+            "download_count": 199602,
+            "project": "pyrad"
+        },
+        {
+            "download_count": 199568,
+            "project": "jsoncompare"
+        },
+        {
+            "download_count": 199376,
+            "project": "python-graph-core"
+        },
+        {
+            "download_count": 199234,
+            "project": "flask-mysqldb"
+        },
+        {
+            "download_count": 199123,
+            "project": "pymorphy2"
+        },
+        {
+            "download_count": 199116,
+            "project": "uncertainties"
+        },
+        {
+            "download_count": 198904,
+            "project": "jdatetime"
+        },
+        {
+            "download_count": 198768,
+            "project": "package"
+        },
+        {
+            "download_count": 198699,
+            "project": "django-user-sessions"
+        },
+        {
+            "download_count": 198662,
+            "project": "jproperties"
+        },
+        {
+            "download_count": 198655,
+            "project": "optional-django"
+        },
+        {
+            "download_count": 198573,
+            "project": "azure-mgmt-common"
+        },
+        {
+            "download_count": 198386,
+            "project": "csscompressor"
+        },
+        {
+            "download_count": 198360,
+            "project": "robotframework-lint"
+        },
+        {
+            "download_count": 198297,
+            "project": "bintrees"
+        },
+        {
+            "download_count": 198099,
+            "project": "esptool"
+        },
+        {
+            "download_count": 198014,
+            "project": "sox"
+        },
+        {
+            "download_count": 197847,
+            "project": "cotyledon"
+        },
+        {
+            "download_count": 197484,
+            "project": "kafka-utils"
+        },
+        {
+            "download_count": 197448,
+            "project": "pingparsing"
+        },
+        {
+            "download_count": 197436,
+            "project": "semidbm"
+        },
+        {
+            "download_count": 197405,
+            "project": "polyaxon-schemas"
+        },
+        {
+            "download_count": 196830,
+            "project": "python-mozaggregator"
+        },
+        {
+            "download_count": 196757,
+            "project": "pandas-summary"
+        },
+        {
+            "download_count": 196390,
+            "project": "nbval"
+        },
+        {
+            "download_count": 196154,
+            "project": "python3-xlib"
+        },
+        {
+            "download_count": 195862,
+            "project": "pyobjc-framework-coredata"
+        },
+        {
+            "download_count": 195697,
+            "project": "django-json-widget"
+        },
+        {
+            "download_count": 194638,
+            "project": "trimesh"
+        },
+        {
+            "download_count": 194604,
+            "project": "pyobjc-framework-addressbook"
+        },
+        {
+            "download_count": 194552,
+            "project": "sq-blocks"
+        },
+        {
+            "download_count": 194524,
+            "project": "simple-crypt"
+        },
+        {
+            "download_count": 194469,
+            "project": "imgkit"
+        },
+        {
+            "download_count": 194216,
+            "project": "pytype"
+        },
+        {
+            "download_count": 193866,
+            "project": "aiohttp-session"
+        },
+        {
+            "download_count": 193810,
+            "project": "lib"
+        },
+        {
+            "download_count": 193713,
+            "project": "pyobjc-framework-screensaver"
+        },
+        {
+            "download_count": 193702,
+            "project": "remote-pdb"
+        },
+        {
+            "download_count": 193646,
+            "project": "pyobjc-framework-syncservices"
+        },
+        {
+            "download_count": 193463,
+            "project": "pyobjc-framework-scriptingbridge"
+        },
+        {
+            "download_count": 193206,
+            "project": "glmnet-py"
+        },
+        {
+            "download_count": 193173,
+            "project": "edx-django-release-util"
+        },
+        {
+            "download_count": 193118,
+            "project": "pyobjc-framework-corelocation"
+        },
+        {
+            "download_count": 193105,
+            "project": "pyobjc-framework-inputmethodkit"
+        },
+        {
+            "download_count": 193099,
+            "project": "lob"
+        },
+        {
+            "download_count": 192939,
+            "project": "deb-pkg-tools"
+        },
+        {
+            "download_count": 192929,
+            "project": "traits"
+        },
+        {
+            "download_count": 192741,
+            "project": "django-revproxy"
+        },
+        {
+            "download_count": 192721,
+            "project": "edx-submissions"
+        },
+        {
+            "download_count": 192662,
+            "project": "simpy"
+        },
+        {
+            "download_count": 192636,
+            "project": "ebooklib"
+        },
+        {
+            "download_count": 192632,
+            "project": "importlab"
+        },
+        {
+            "download_count": 192581,
+            "project": "tweet-preprocessor"
+        },
+        {
+            "download_count": 192462,
+            "project": "eight"
+        },
+        {
+            "download_count": 192349,
+            "project": "edx-when"
+        },
+        {
+            "download_count": 192282,
+            "project": "telepot"
+        },
+        {
+            "download_count": 192227,
+            "project": "django-recaptcha2"
+        },
+        {
+            "download_count": 192174,
+            "project": "fastjsonschema"
+        },
+        {
+            "download_count": 191971,
+            "project": "rebulk"
+        },
+        {
+            "download_count": 191767,
+            "project": "zope-dottedname"
+        },
+        {
+            "download_count": 191702,
+            "project": "cli-proton-python"
+        },
+        {
+            "download_count": 191581,
+            "project": "schema-salad"
+        },
+        {
+            "download_count": 191533,
+            "project": "progressbar33"
+        },
+        {
+            "download_count": 191495,
+            "project": "libnacl"
+        },
+        {
+            "download_count": 191407,
+            "project": "mattermostwrapper"
+        },
+        {
+            "download_count": 191403,
+            "project": "mox"
+        },
+        {
+            "download_count": 191379,
+            "project": "esprima"
+        },
+        {
+            "download_count": 191100,
+            "project": "tf-nightly-gpu"
+        },
+        {
+            "download_count": 191091,
+            "project": "python-firebase"
+        },
+        {
+            "download_count": 190890,
+            "project": "flake8-bandit"
+        },
+        {
+            "download_count": 190752,
+            "project": "python3-logstash"
+        },
+        {
+            "download_count": 190743,
+            "project": "pyutilib"
+        },
+        {
+            "download_count": 190491,
+            "project": "easypost"
+        },
+        {
+            "download_count": 190474,
+            "project": "web-fragments"
+        },
+        {
+            "download_count": 190430,
+            "project": "pytest-coverage"
+        },
+        {
+            "download_count": 190275,
+            "project": "mailjet-rest"
+        },
+        {
+            "download_count": 190267,
+            "project": "riemann-client"
+        },
+        {
+            "download_count": 190168,
+            "project": "pytest-test-groups"
+        },
+        {
+            "download_count": 189997,
+            "project": "dialogflow"
+        },
+        {
+            "download_count": 189912,
+            "project": "tableschema"
+        },
+        {
+            "download_count": 189480,
+            "project": "segtok"
+        },
+        {
+            "download_count": 189475,
+            "project": "contentful"
+        },
+        {
+            "download_count": 189290,
+            "project": "ropgadget"
+        },
+        {
+            "download_count": 189289,
+            "project": "user-agent"
+        },
+        {
+            "download_count": 189193,
+            "project": "django-profiler"
+        },
+        {
+            "download_count": 189156,
+            "project": "devstack-tools"
+        },
+        {
+            "download_count": 188865,
+            "project": "django-leaflet"
+        },
+        {
+            "download_count": 188683,
+            "project": "datetime-truncate"
+        },
+        {
+            "download_count": 188451,
+            "project": "pyjslint"
+        },
+        {
+            "download_count": 188348,
+            "project": "dvc"
+        },
+        {
+            "download_count": 188172,
+            "project": "zope-cachedescriptors"
+        },
+        {
+            "download_count": 188122,
+            "project": "onetoken"
+        },
+        {
+            "download_count": 188063,
+            "project": "ipfshttpclient"
+        },
+        {
+            "download_count": 187976,
+            "project": "azure-functions"
+        },
+        {
+            "download_count": 187875,
+            "project": "optimizely-sdk"
+        },
+        {
+            "download_count": 187858,
+            "project": "cwltool"
+        },
+        {
+            "download_count": 187574,
+            "project": "seqdiag"
+        },
+        {
+            "download_count": 187547,
+            "project": "libthumbor"
+        },
+        {
+            "download_count": 187440,
+            "project": "atlassian-python-api"
+        },
+        {
+            "download_count": 187397,
+            "project": "pyobjc-framework-corewlan"
+        },
+        {
+            "download_count": 187363,
+            "project": "azure-cli-natgateway"
+        },
+        {
+            "download_count": 187117,
+            "project": "pyobjc-framework-imagecapturecore"
+        },
+        {
+            "download_count": 186984,
+            "project": "django-hosts"
+        },
+        {
+            "download_count": 186865,
+            "project": "pytest-reportportal"
+        },
+        {
+            "download_count": 186711,
+            "project": "pyobjc-framework-avfoundation"
+        },
+        {
+            "download_count": 186705,
+            "project": "pyobjc-framework-corebluetooth"
+        },
+        {
+            "download_count": 186590,
+            "project": "glog"
+        },
+        {
+            "download_count": 186547,
+            "project": "pyobjc-framework-mapkit"
+        },
+        {
+            "download_count": 186536,
+            "project": "pyobjc-framework-avkit"
+        },
+        {
+            "download_count": 186474,
+            "project": "pyobjc-framework-storekit"
+        },
+        {
+            "download_count": 186445,
+            "project": "pypom"
+        },
+        {
+            "download_count": 186363,
+            "project": "pyobjc-framework-multipeerconnectivity"
+        },
+        {
+            "download_count": 186349,
+            "project": "pyobjc-framework-scenekit"
+        },
+        {
+            "download_count": 186324,
+            "project": "richenum"
+        },
+        {
+            "download_count": 186299,
+            "project": "pyobjc-framework-imserviceplugin"
+        },
+        {
+            "download_count": 186260,
+            "project": "pyobjc-framework-gamecenter"
+        },
+        {
+            "download_count": 186239,
+            "project": "boto3-type-annotations-with-docs"
+        },
+        {
+            "download_count": 186229,
+            "project": "pyobjc-framework-spritekit"
+        },
+        {
+            "download_count": 186187,
+            "project": "pyobjc-framework-notificationcenter"
+        },
+        {
+            "download_count": 186170,
+            "project": "salttesting"
+        },
+        {
+            "download_count": 186131,
+            "project": "you-get"
+        },
+        {
+            "download_count": 186067,
+            "project": "pyobjc-framework-cryptotokenkit"
+        },
+        {
+            "download_count": 186058,
+            "project": "pytest-catchlog"
+        },
+        {
+            "download_count": 185930,
+            "project": "iptcinfo"
+        },
+        {
+            "download_count": 185874,
+            "project": "hashin"
+        },
+        {
+            "download_count": 185785,
+            "project": "colormath"
+        },
+        {
+            "download_count": 185776,
+            "project": "nanotime"
+        },
+        {
+            "download_count": 185712,
+            "project": "python-saharaclient"
+        },
+        {
+            "download_count": 185687,
+            "project": "yanc"
+        },
+        {
+            "download_count": 185684,
+            "project": "methodtools"
+        },
+        {
+            "download_count": 185575,
+            "project": "pytest-openfiles"
+        },
+        {
+            "download_count": 185568,
+            "project": "zope-security"
+        },
+        {
+            "download_count": 185489,
+            "project": "django-crequest"
+        },
+        {
+            "download_count": 185383,
+            "project": "pymemoize"
+        },
+        {
+            "download_count": 185321,
+            "project": "django-fsm-log"
+        },
+        {
+            "download_count": 185307,
+            "project": "django-warrant"
+        },
+        {
+            "download_count": 185226,
+            "project": "acora"
+        },
+        {
+            "download_count": 184984,
+            "project": "python-hpilo"
+        },
+        {
+            "download_count": 184866,
+            "project": "zope-exceptions"
+        },
+        {
+            "download_count": 184842,
+            "project": "ase"
+        },
+        {
+            "download_count": 184834,
+            "project": "django-debug-toolbar-request-history"
+        },
+        {
+            "download_count": 184816,
+            "project": "clipboard"
+        },
+        {
+            "download_count": 184780,
+            "project": "manifest-tool"
+        },
+        {
+            "download_count": 184769,
+            "project": "pdftotext"
+        },
+        {
+            "download_count": 184767,
+            "project": "events"
+        },
+        {
+            "download_count": 184609,
+            "project": "zope-contenttype"
+        },
+        {
+            "download_count": 184473,
+            "project": "django-discover-runner"
+        },
+        {
+            "download_count": 184469,
+            "project": "libtiff"
+        },
+        {
+            "download_count": 184406,
+            "project": "sqlacodegen"
+        },
+        {
+            "download_count": 184172,
+            "project": "pyomo"
+        },
+        {
+            "download_count": 184107,
+            "project": "django-admin-sortable"
+        },
+        {
+            "download_count": 183722,
+            "project": "oic"
+        },
+        {
+            "download_count": 183626,
+            "project": "django-user-tasks"
+        },
+        {
+            "download_count": 183425,
+            "project": "edx-lint"
+        },
+        {
+            "download_count": 183383,
+            "project": "netfilterqueue"
+        },
+        {
+            "download_count": 183355,
+            "project": "zope-location"
+        },
+        {
+            "download_count": 183073,
+            "project": "pyobjc-framework-qtkit"
+        },
+        {
+            "download_count": 183058,
+            "project": "apispec-webframeworks"
+        },
+        {
+            "download_count": 183054,
+            "project": "django-dbbackup"
+        },
+        {
+            "download_count": 182995,
+            "project": "interpret-core"
+        },
+        {
+            "download_count": 182971,
+            "project": "docker-compose-wait"
+        },
+        {
+            "download_count": 182913,
+            "project": "socketpool"
+        },
+        {
+            "download_count": 182775,
+            "project": "qgrid"
+        },
+        {
+            "download_count": 182678,
+            "project": "localstack-ext"
+        },
+        {
+            "download_count": 182643,
+            "project": "munkres"
+        },
+        {
+            "download_count": 182633,
+            "project": "django-admin-list-filter-dropdown"
+        },
+        {
+            "download_count": 182500,
+            "project": "edx-ccx-keys"
+        },
+        {
+            "download_count": 182205,
+            "project": "jsonrpclib"
+        },
+        {
+            "download_count": 182178,
+            "project": "pyinstrument-cext"
+        },
+        {
+            "download_count": 182161,
+            "project": "wsgiproxy2"
+        },
+        {
+            "download_count": 182080,
+            "project": "msgfy"
+        },
+        {
+            "download_count": 182061,
+            "project": "localstack"
+        },
+        {
+            "download_count": 182033,
+            "project": "mpl-finance"
+        },
+        {
+            "download_count": 182028,
+            "project": "sinon"
+        },
+        {
+            "download_count": 181902,
+            "project": "pyobjc-framework-photos"
+        },
+        {
+            "download_count": 181883,
+            "project": "pyobjc-framework-contacts"
+        },
+        {
+            "download_count": 181832,
+            "project": "pyobjc-framework-safariservices"
+        },
+        {
+            "download_count": 181822,
+            "project": "nagiosplugin"
+        },
+        {
+            "download_count": 181811,
+            "project": "hbmqtt"
+        },
+        {
+            "download_count": 181809,
+            "project": "pyobjc-framework-photosui"
+        },
+        {
+            "download_count": 181782,
+            "project": "rfc6266"
+        },
+        {
+            "download_count": 181770,
+            "project": "wtforms-alchemy"
+        },
+        {
+            "download_count": 181753,
+            "project": "pyobjc-framework-modelio"
+        },
+        {
+            "download_count": 181752,
+            "project": "gocardless-pro"
+        },
+        {
+            "download_count": 181742,
+            "project": "pyobjc-framework-applicationservices"
+        },
+        {
+            "download_count": 181658,
+            "project": "datadog-checks-base"
+        },
+        {
+            "download_count": 181619,
+            "project": "pyobjc-framework-contactsui"
+        },
+        {
+            "download_count": 181492,
+            "project": "zope-publisher"
+        },
+        {
+            "download_count": 181460,
+            "project": "pyobjc-framework-applescriptkit"
+        },
+        {
+            "download_count": 181449,
+            "project": "pyobjc-framework-networkextension"
+        },
+        {
+            "download_count": 181408,
+            "project": "zope-i18n"
+        },
+        {
+            "download_count": 181315,
+            "project": "recordio"
+        },
+        {
+            "download_count": 181306,
+            "project": "pyobjc-framework-preferencepanes"
+        },
+        {
+            "download_count": 181204,
+            "project": "pyobjc-framework-installerplugins"
+        },
+        {
+            "download_count": 181198,
+            "project": "pyobjc-framework-automator"
+        },
+        {
+            "download_count": 181194,
+            "project": "python-interface"
+        },
+        {
+            "download_count": 181178,
+            "project": "dogslow"
+        },
+        {
+            "download_count": 181007,
+            "project": "s3pypi"
+        },
+        {
+            "download_count": 180930,
+            "project": "arpeggio"
+        },
+        {
+            "download_count": 180918,
+            "project": "pyobjc-framework-searchkit"
+        },
+        {
+            "download_count": 180910,
+            "project": "pyobjc-framework-latentsemanticmapping"
+        },
+        {
+            "download_count": 180898,
+            "project": "imgurpython"
+        },
+        {
+            "download_count": 180787,
+            "project": "huey"
+        },
+        {
+            "download_count": 180646,
+            "project": "pyobjc-framework-applescriptobjc"
+        },
+        {
+            "download_count": 180541,
+            "project": "pyobjc-framework-instantmessage"
+        },
+        {
+            "download_count": 180484,
+            "project": "pyclamd"
+        },
+        {
+            "download_count": 180478,
+            "project": "pyobjc-framework-accounts"
+        },
+        {
+            "download_count": 180443,
+            "project": "pyobjc-framework-servicemanagement"
+        },
+        {
+            "download_count": 180359,
+            "project": "sortedcollections"
+        },
+        {
+            "download_count": 180352,
+            "project": "pyobjc-framework-dictionaryservices"
+        },
+        {
+            "download_count": 180326,
+            "project": "pyobjc-framework-pubsub"
+        },
+        {
+            "download_count": 180234,
+            "project": "pyobjc-framework-collaboration"
+        },
+        {
+            "download_count": 180184,
+            "project": "cqlsh"
+        },
+        {
+            "download_count": 180108,
+            "project": "hacs-frontend"
+        },
+        {
+            "download_count": 179819,
+            "project": "pyobjc-framework-social"
+        },
+        {
+            "download_count": 179803,
+            "project": "pybars3"
+        },
+        {
+            "download_count": 179768,
+            "project": "pyobjc-framework-eventkit"
+        },
+        {
+            "download_count": 179757,
+            "project": "pyobjc-framework-opendirectory"
+        },
+        {
+            "download_count": 179716,
+            "project": "chatterbot"
+        },
+        {
+            "download_count": 179610,
+            "project": "neovim"
+        },
+        {
+            "download_count": 179540,
+            "project": "json-logging"
+        },
+        {
+            "download_count": 179401,
+            "project": "pytest-splinter"
+        },
+        {
+            "download_count": 179317,
+            "project": "fig"
+        },
+        {
+            "download_count": 179255,
+            "project": "pyte"
+        },
+        {
+            "download_count": 179193,
+            "project": "bagit"
+        },
+        {
+            "download_count": 179031,
+            "project": "aiohttp-swagger"
+        },
+        {
+            "download_count": 178930,
+            "project": "django-cronman"
+        },
+        {
+            "download_count": 178836,
+            "project": "robotframework-pageobjectlibrary"
+        },
+        {
+            "download_count": 178805,
+            "project": "django-tenant-schemas"
+        },
+        {
+            "download_count": 178606,
+            "project": "pypcd"
+        },
+        {
+            "download_count": 178579,
+            "project": "s3contents"
+        },
+        {
+            "download_count": 178532,
+            "project": "pytube"
+        },
+        {
+            "download_count": 178420,
+            "project": "srvlookup"
+        },
+        {
+            "download_count": 178249,
+            "project": "django-cache-url"
+        },
+        {
+            "download_count": 178237,
+            "project": "pytest-sanic"
+        },
+        {
+            "download_count": 178164,
+            "project": "pybase62"
+        },
+        {
+            "download_count": 178040,
+            "project": "modulegraph"
+        },
+        {
+            "download_count": 177513,
+            "project": "flufl-lock"
+        },
+        {
+            "download_count": 177343,
+            "project": "pyobjc-framework-intents"
+        },
+        {
+            "download_count": 177128,
+            "project": "playsound"
+        },
+        {
+            "download_count": 177060,
+            "project": "django-sql-explorer"
+        },
+        {
+            "download_count": 177040,
+            "project": "pymavlink"
+        },
+        {
+            "download_count": 176939,
+            "project": "snowflake"
+        },
+        {
+            "download_count": 176684,
+            "project": "drfdocs"
+        },
+        {
+            "download_count": 176663,
+            "project": "django-sendfile"
+        },
+        {
+            "download_count": 176504,
+            "project": "zope-testing"
+        },
+        {
+            "download_count": 176439,
+            "project": "autocorrect"
+        },
+        {
+            "download_count": 176429,
+            "project": "django-filters"
+        },
+        {
+            "download_count": 176316,
+            "project": "delighted"
+        },
+        {
+            "download_count": 176189,
+            "project": "pick"
+        },
+        {
+            "download_count": 176166,
+            "project": "restricted-pkg"
+        },
+        {
+            "download_count": 176069,
+            "project": "tlslite-ng"
+        },
+        {
+            "download_count": 175910,
+            "project": "click-datetime"
+        },
+        {
+            "download_count": 175901,
+            "project": "mapbox"
+        },
+        {
+            "download_count": 175833,
+            "project": "zope-traversing"
+        },
+        {
+            "download_count": 175827,
+            "project": "yagmail"
+        },
+        {
+            "download_count": 175386,
+            "project": "os-diskconfig-python-novaclient-ext"
+        },
+        {
+            "download_count": 175252,
+            "project": "env-utils"
+        },
+        {
+            "download_count": 175153,
+            "project": "pyramid-chameleon"
+        },
+        {
+            "download_count": 175039,
+            "project": "pysphere"
+        },
+        {
+            "download_count": 174995,
+            "project": "pyobjc-framework-calendarstore"
+        },
+        {
+            "download_count": 174675,
+            "project": "tfrecord-lite"
+        },
+        {
+            "download_count": 174598,
+            "project": "zope-container"
+        },
+        {
+            "download_count": 174537,
+            "project": "pyobjc-framework-iosurface"
+        },
+        {
+            "download_count": 174516,
+            "project": "pyobjc-framework-netfs"
+        },
+        {
+            "download_count": 174283,
+            "project": "zope-browser"
+        },
+        {
+            "download_count": 174221,
+            "project": "cymysql"
+        },
+        {
+            "download_count": 174210,
+            "project": "scrapy-fake-useragent"
+        },
+        {
+            "download_count": 174182,
+            "project": "pysnooper"
+        },
+        {
+            "download_count": 174143,
+            "project": "allennlp"
+        },
+        {
+            "download_count": 174141,
+            "project": "itchat"
+        },
+        {
+            "download_count": 174002,
+            "project": "pytest-arraydiff"
+        },
+        {
+            "download_count": 174001,
+            "project": "multimethods"
+        },
+        {
+            "download_count": 173985,
+            "project": "concurrencytest"
+        },
+        {
+            "download_count": 173985,
+            "project": "pyxattr"
+        },
+        {
+            "download_count": 173977,
+            "project": "pyobjc-framework-medialibrary"
+        },
+        {
+            "download_count": 173974,
+            "project": "python-vlc"
+        },
+        {
+            "download_count": 173922,
+            "project": "django-summernote"
+        },
+        {
+            "download_count": 173897,
+            "project": "msal-extensions"
+        },
+        {
+            "download_count": 173878,
+            "project": "pyobjc-framework-gamecontroller"
+        },
+        {
+            "download_count": 173812,
+            "project": "pyobjc-framework-findersync"
+        },
+        {
+            "download_count": 173771,
+            "project": "pyobjc-framework-cloudkit"
+        },
+        {
+            "download_count": 173753,
+            "project": "pyobjc-framework-localauthentication"
+        },
+        {
+            "download_count": 173686,
+            "project": "pyobjc-framework-mediaaccessibility"
+        },
+        {
+            "download_count": 173647,
+            "project": "vega"
+        },
+        {
+            "download_count": 173582,
+            "project": "textstat"
+        },
+        {
+            "download_count": 173469,
+            "project": "neomodel"
+        },
+        {
+            "download_count": 173417,
+            "project": "pyobjc"
+        },
+        {
+            "download_count": 173414,
+            "project": "check-puppet-agent"
+        },
+        {
+            "download_count": 173066,
+            "project": "os-networksv2-python-novaclient-ext"
+        },
+        {
+            "download_count": 173034,
+            "project": "vcd-cli"
+        },
+        {
+            "download_count": 172953,
+            "project": "numdifftools"
+        },
+        {
+            "download_count": 172704,
+            "project": "tensorflow-graphics"
+        },
+        {
+            "download_count": 172697,
+            "project": "pysqslistener"
+        },
+        {
+            "download_count": 172681,
+            "project": "kazurator"
+        },
+        {
+            "download_count": 172661,
+            "project": "xstatic-roboto-fontface"
+        },
+        {
+            "download_count": 172595,
+            "project": "asyncio-nats-streaming"
+        },
+        {
+            "download_count": 172285,
+            "project": "slugify"
+        },
+        {
+            "download_count": 172276,
+            "project": "jupyter-notebook-gist"
+        },
+        {
+            "download_count": 172213,
+            "project": "awsretry"
+        },
+        {
+            "download_count": 172075,
+            "project": "flup"
+        },
+        {
+            "download_count": 172011,
+            "project": "tornado-aws"
+        },
+        {
+            "download_count": 171812,
+            "project": "rackspace-novaclient"
+        },
+        {
+            "download_count": 171679,
+            "project": "django-q"
+        },
+        {
+            "download_count": 171593,
+            "project": "rax-default-network-flags-python-novaclient-ext"
+        },
+        {
+            "download_count": 171548,
+            "project": "object-pool"
+        },
+        {
+            "download_count": 171504,
+            "project": "xstatic-font-awesome"
+        },
+        {
+            "download_count": 171492,
+            "project": "rackspace-auth-openstack"
+        },
+        {
+            "download_count": 171339,
+            "project": "qdarkstyle"
+        },
+        {
+            "download_count": 171275,
+            "project": "tox-monorepo"
+        }
+    ]
+}
diff --git a/Tools/peg_generator/data/xxl.zip b/Tools/peg_generator/data/xxl.zip
new file mode 100644
index 0000000..5421408
--- /dev/null
+++ b/Tools/peg_generator/data/xxl.zip
Binary files differ
diff --git a/Tools/peg_generator/mypy.ini b/Tools/peg_generator/mypy.ini
new file mode 100644
index 0000000..80d5c05
--- /dev/null
+++ b/Tools/peg_generator/mypy.ini
@@ -0,0 +1,26 @@
+[mypy]
+files = pegen, scripts
+
+follow_imports = error
+no_implicit_optional = True
+strict_optional = True
+
+#check_untyped_defs = True
+disallow_untyped_calls = True
+disallow_untyped_defs = True
+
+disallow_any_generics = true
+disallow_any_unimported = True
+disallow_incomplete_defs = True
+disallow_subclassing_any = True
+
+warn_unused_configs = True
+warn_unused_ignores = true
+warn_redundant_casts = true
+warn_no_return = True
+
+show_traceback = True
+show_error_codes = True
+
+[mypy-pegen.grammar_parser]
+strict_optional = False
diff --git a/Tools/peg_generator/peg_extension/__init__.py b/Tools/peg_generator/peg_extension/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/peg_generator/peg_extension/__init__.py
diff --git a/Tools/peg_generator/peg_extension/peg_extension.c b/Tools/peg_generator/peg_extension/peg_extension.c
new file mode 100644
index 0000000..96d3a52
--- /dev/null
+++ b/Tools/peg_generator/peg_extension/peg_extension.c
@@ -0,0 +1,154 @@
+#include "pegen.h"
+
+PyObject *
+_build_return_object(mod_ty module, int mode, PyObject *filename_ob, PyArena *arena)
+{
+    PyObject *result = NULL;
+
+    if (mode == 2) {
+        result = (PyObject *)PyAST_CompileObject(module, filename_ob, NULL, -1, arena);
+    } else if (mode == 1) {
+        result = PyAST_mod2obj(module);
+    } else {
+        result = Py_None;
+        Py_INCREF(result);
+    }
+
+    return result;
+}
+
+static PyObject *
+parse_file(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    static char *keywords[] = {"file", "mode", NULL};
+    const char *filename;
+    int mode = 2;
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", keywords, &filename, &mode)) {
+        return NULL;
+    }
+    if (mode < 0 || mode > 2) {
+        return PyErr_Format(PyExc_ValueError, "Bad mode, must be 0 <= mode <= 2");
+    }
+
+    PyArena *arena = PyArena_New();
+    if (arena == NULL) {
+        return NULL;
+    }
+
+    PyObject *result = NULL;
+
+    PyObject *filename_ob = PyUnicode_FromString(filename);
+    if (filename_ob == NULL) {
+        goto error;
+    }
+
+    PyCompilerFlags flags = _PyCompilerFlags_INIT;
+    mod_ty res = _PyPegen_run_parser_from_file(filename, Py_file_input, filename_ob, &flags, arena);
+    if (res == NULL) {
+        goto error;
+    }
+
+    result = _build_return_object(res, mode, filename_ob, arena);
+
+error:
+    Py_XDECREF(filename_ob);
+    PyArena_Free(arena);
+    return result;
+}
+
+static PyObject *
+parse_string(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    static char *keywords[] = {"str", "mode", NULL};
+    const char *the_string;
+    int mode = 2;
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", keywords, &the_string, &mode)) {
+        return NULL;
+    }
+    if (mode < 0 || mode > 2) {
+        return PyErr_Format(PyExc_ValueError, "Bad mode, must be 0 <= mode <= 2");
+    }
+
+    PyArena *arena = PyArena_New();
+    if (arena == NULL) {
+        return NULL;
+    }
+
+    PyObject *result = NULL;
+
+    PyObject *filename_ob = PyUnicode_FromString("<string>");
+    if (filename_ob == NULL) {
+        goto error;
+    }
+
+    PyCompilerFlags flags = _PyCompilerFlags_INIT;
+    mod_ty res = _PyPegen_run_parser_from_string(the_string, Py_file_input, filename_ob,
+                                        &flags, arena);
+    if (res == NULL) {
+        goto error;
+    }
+    result = _build_return_object(res, mode, filename_ob, arena);
+
+error:
+    Py_XDECREF(filename_ob);
+    PyArena_Free(arena);
+    return result;
+}
+
+static PyObject *
+clear_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
+{
+    _PyPegen_clear_memo_statistics();
+    Py_RETURN_NONE;
+}
+
+static PyObject *
+get_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
+{
+    return _PyPegen_get_memo_statistics();
+}
+
+// TODO: Write to Python's sys.stdout instead of C's stdout.
+static PyObject *
+dump_memo_stats(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
+{
+    PyObject *list = _PyPegen_get_memo_statistics();
+    if (list == NULL) {
+        return NULL;
+    }
+    Py_ssize_t len = PyList_Size(list);
+    for (Py_ssize_t i = 0; i < len; i++) {
+        PyObject *value = PyList_GetItem(list, i);  // Borrowed reference.
+        long count = PyLong_AsLong(value);
+        if (count < 0) {
+            break;
+        }
+        if (count > 0) {
+            printf("%4zd %9ld\n", i, count);
+        }
+    }
+    Py_DECREF(list);
+    Py_RETURN_NONE;
+}
+
+static PyMethodDef ParseMethods[] = {
+    {"parse_file", (PyCFunction)(void(*)(void))parse_file, METH_VARARGS|METH_KEYWORDS, "Parse a file."},
+    {"parse_string", (PyCFunction)(void(*)(void))parse_string, METH_VARARGS|METH_KEYWORDS, "Parse a string."},
+    {"clear_memo_stats", clear_memo_stats, METH_NOARGS},
+    {"dump_memo_stats", dump_memo_stats, METH_NOARGS},
+    {"get_memo_stats", get_memo_stats, METH_NOARGS},
+    {NULL, NULL, 0, NULL}        /* Sentinel */
+};
+
+static struct PyModuleDef parsemodule = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "parse",
+    .m_doc = "A parser.",
+    .m_methods = ParseMethods,
+};
+
+PyMODINIT_FUNC
+PyInit_parse(void)
+{
+    return PyModule_Create(&parsemodule);
+}
diff --git a/Tools/peg_generator/pegen/__init__.py b/Tools/peg_generator/pegen/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tools/peg_generator/pegen/__init__.py
diff --git a/Tools/peg_generator/pegen/__main__.py b/Tools/peg_generator/pegen/__main__.py
new file mode 100755
index 0000000..1dcbaad
--- /dev/null
+++ b/Tools/peg_generator/pegen/__main__.py
@@ -0,0 +1,182 @@
+#!/usr/bin/env python3.8
+
+"""pegen -- PEG Generator.
+
+Search the web for PEG Parsers for reference.
+"""
+
+import argparse
+import sys
+import time
+import token
+import traceback
+
+from typing import Tuple
+
+from pegen.build import Grammar, Parser, Tokenizer, ParserGenerator
+
+
+def generate_c_code(
+    args: argparse.Namespace,
+) -> Tuple[Grammar, Parser, Tokenizer, ParserGenerator]:
+    from pegen.build import build_c_parser_and_generator
+
+    verbose = args.verbose
+    verbose_tokenizer = verbose >= 3
+    verbose_parser = verbose == 2 or verbose >= 4
+    try:
+        grammar, parser, tokenizer, gen = build_c_parser_and_generator(
+            args.grammar_filename,
+            args.tokens_filename,
+            args.output,
+            args.compile_extension,
+            verbose_tokenizer,
+            verbose_parser,
+            args.verbose,
+            keep_asserts_in_extension=False if args.optimized else True,
+            skip_actions=args.skip_actions,
+        )
+        return grammar, parser, tokenizer, gen
+    except Exception as err:
+        if args.verbose:
+            raise  # Show traceback
+        traceback.print_exception(err.__class__, err, None)
+        sys.stderr.write("For full traceback, use -v\n")
+        sys.exit(1)
+
+
+def generate_python_code(
+    args: argparse.Namespace,
+) -> Tuple[Grammar, Parser, Tokenizer, ParserGenerator]:
+    from pegen.build import build_python_parser_and_generator
+
+    verbose = args.verbose
+    verbose_tokenizer = verbose >= 3
+    verbose_parser = verbose == 2 or verbose >= 4
+    try:
+        grammar, parser, tokenizer, gen = build_python_parser_and_generator(
+            args.grammar_filename,
+            args.output,
+            verbose_tokenizer,
+            verbose_parser,
+            skip_actions=args.skip_actions,
+        )
+        return grammar, parser, tokenizer, gen
+    except Exception as err:
+        if args.verbose:
+            raise  # Show traceback
+        traceback.print_exception(err.__class__, err, None)
+        sys.stderr.write("For full traceback, use -v\n")
+        sys.exit(1)
+
+
+argparser = argparse.ArgumentParser(
+    prog="pegen", description="Experimental PEG-like parser generator"
+)
+argparser.add_argument("-q", "--quiet", action="store_true", help="Don't print the parsed grammar")
+argparser.add_argument(
+    "-v",
+    "--verbose",
+    action="count",
+    default=0,
+    help="Print timing stats; repeat for more debug output",
+)
+subparsers = argparser.add_subparsers(help="target language for the generated code")
+
+c_parser = subparsers.add_parser("c", help="Generate C code for inclusion into CPython")
+c_parser.set_defaults(func=generate_c_code)
+c_parser.add_argument("grammar_filename", help="Grammar description")
+c_parser.add_argument("tokens_filename", help="Tokens description")
+c_parser.add_argument(
+    "-o", "--output", metavar="OUT", default="parse.c", help="Where to write the generated parser"
+)
+c_parser.add_argument(
+    "--compile-extension",
+    action="store_true",
+    help="Compile generated C code into an extension module",
+)
+c_parser.add_argument(
+    "--optimized", action="store_true", help="Compile the extension in optimized mode"
+)
+c_parser.add_argument(
+    "--skip-actions", action="store_true", help="Suppress code emission for rule actions",
+)
+
+python_parser = subparsers.add_parser("python", help="Generate Python code")
+python_parser.set_defaults(func=generate_python_code)
+python_parser.add_argument("grammar_filename", help="Grammar description")
+python_parser.add_argument(
+    "-o",
+    "--output",
+    metavar="OUT",
+    default="parse.py",
+    help="Where to write the generated parser",
+)
+python_parser.add_argument(
+    "--skip-actions", action="store_true", help="Suppress code emission for rule actions",
+)
+
+
+def main() -> None:
+    from pegen.testutil import print_memstats
+
+    args = argparser.parse_args()
+    if "func" not in args:
+        argparser.error("Must specify the target language mode ('c' or 'python')")
+
+    t0 = time.time()
+    grammar, parser, tokenizer, gen = args.func(args)
+    t1 = time.time()
+
+    if not args.quiet:
+        if args.verbose:
+            print("Raw Grammar:")
+            for line in repr(grammar).splitlines():
+                print(" ", line)
+
+        print("Clean Grammar:")
+        for line in str(grammar).splitlines():
+            print(" ", line)
+
+    if args.verbose:
+        print("First Graph:")
+        for src, dsts in gen.first_graph.items():
+            print(f"  {src} -> {', '.join(dsts)}")
+        print("First SCCS:")
+        for scc in gen.first_sccs:
+            print(" ", scc, end="")
+            if len(scc) > 1:
+                print(
+                    "  # Indirectly left-recursive; leaders:",
+                    {name for name in scc if grammar.rules[name].leader},
+                )
+            else:
+                name = next(iter(scc))
+                if name in gen.first_graph[name]:
+                    print("  # Left-recursive")
+                else:
+                    print()
+
+    if args.verbose:
+        dt = t1 - t0
+        diag = tokenizer.diagnose()
+        nlines = diag.end[0]
+        if diag.type == token.ENDMARKER:
+            nlines -= 1
+        print(f"Total time: {dt:.3f} sec; {nlines} lines", end="")
+        if dt:
+            print(f"; {nlines / dt:.0f} lines/sec")
+        else:
+            print()
+        print("Caches sizes:")
+        print(f"  token array : {len(tokenizer._tokens):10}")
+        print(f"        cache : {len(parser._cache):10}")
+        if not print_memstats():
+            print("(Can't find psutil; install it for memory stats.)")
+
+
+if __name__ == "__main__":
+    if sys.version_info < (3, 8):
+        print("ERROR: using pegen requires at least Python 3.8!", file=sys.stderr)
+        sys.exit(1)
+    main()
diff --git a/Tools/peg_generator/pegen/ast_dump.py b/Tools/peg_generator/pegen/ast_dump.py
new file mode 100644
index 0000000..93dfbfd
--- /dev/null
+++ b/Tools/peg_generator/pegen/ast_dump.py
@@ -0,0 +1,63 @@
+"""
+Copy-parse of ast.dump, removing the `isinstance` checks. This is needed,
+because testing pegen requires generating a C extension module, which contains
+a copy of the symbols defined in Python-ast.c. Thus, the isinstance check would
+always fail. We rely on string comparison of the base classes instead.
+TODO: Remove the above-described hack.
+"""
+
+
+def ast_dump(node, annotate_fields=True, include_attributes=False, *, indent=None):
+    def _format(node, level=0):
+        if indent is not None:
+            level += 1
+            prefix = "\n" + indent * level
+            sep = ",\n" + indent * level
+        else:
+            prefix = ""
+            sep = ", "
+        if any(cls.__name__ == "AST" for cls in node.__class__.__mro__):
+            cls = type(node)
+            args = []
+            allsimple = True
+            keywords = annotate_fields
+            for name in node._fields:
+                try:
+                    value = getattr(node, name)
+                except AttributeError:
+                    keywords = True
+                    continue
+                if value is None and getattr(cls, name, ...) is None:
+                    keywords = True
+                    continue
+                value, simple = _format(value, level)
+                allsimple = allsimple and simple
+                if keywords:
+                    args.append("%s=%s" % (name, value))
+                else:
+                    args.append(value)
+            if include_attributes and node._attributes:
+                for name in node._attributes:
+                    try:
+                        value = getattr(node, name)
+                    except AttributeError:
+                        continue
+                    if value is None and getattr(cls, name, ...) is None:
+                        continue
+                    value, simple = _format(value, level)
+                    allsimple = allsimple and simple
+                    args.append("%s=%s" % (name, value))
+            if allsimple and len(args) <= 3:
+                return "%s(%s)" % (node.__class__.__name__, ", ".join(args)), not args
+            return "%s(%s%s)" % (node.__class__.__name__, prefix, sep.join(args)), False
+        elif isinstance(node, list):
+            if not node:
+                return "[]", True
+            return "[%s%s]" % (prefix, sep.join(_format(x, level)[0] for x in node)), False
+        return repr(node), True
+
+    if all(cls.__name__ != "AST" for cls in node.__class__.__mro__):
+        raise TypeError("expected AST, got %r" % node.__class__.__name__)
+    if indent is not None and not isinstance(indent, str):
+        indent = " " * indent
+    return _format(node)[0]
diff --git a/Tools/peg_generator/pegen/build.py b/Tools/peg_generator/pegen/build.py
new file mode 100644
index 0000000..931ffc7
--- /dev/null
+++ b/Tools/peg_generator/pegen/build.py
@@ -0,0 +1,248 @@
+import pathlib
+import shutil
+import tokenize
+import sysconfig
+import tempfile
+import itertools
+
+from typing import Optional, Tuple, List, IO, Set, Dict
+
+from pegen.c_generator import CParserGenerator
+from pegen.grammar import Grammar
+from pegen.grammar_parser import GeneratedParser as GrammarParser
+from pegen.parser import Parser
+from pegen.parser_generator import ParserGenerator
+from pegen.python_generator import PythonParserGenerator
+from pegen.tokenizer import Tokenizer
+
+MOD_DIR = pathlib.Path(__file__).resolve().parent
+
+TokenDefinitions = Tuple[Dict[int, str], Dict[str, int], Set[str]]
+
+
+def get_extra_flags(compiler_flags: str, compiler_py_flags_nodist: str) -> List[str]:
+    flags = sysconfig.get_config_var(compiler_flags)
+    py_flags_nodist = sysconfig.get_config_var(compiler_py_flags_nodist)
+    if flags is None or py_flags_nodist is None:
+        return []
+    return f"{flags} {py_flags_nodist}".split()
+
+
+def compile_c_extension(
+    generated_source_path: str,
+    build_dir: Optional[str] = None,
+    verbose: bool = False,
+    keep_asserts: bool = True,
+) -> str:
+    """Compile the generated source for a parser generator into an extension module.
+
+    The extension module will be generated in the same directory as the provided path
+    for the generated source, with the same basename (in addition to extension module
+    metadata). For example, for the source mydir/parser.c the generated extension
+    in a darwin system with python 3.8 will be mydir/parser.cpython-38-darwin.so.
+
+    If *build_dir* is provided, that path will be used as the temporary build directory
+    of distutils (this is useful in case you want to use a temporary directory).
+    """
+    import distutils.log
+    from distutils.core import Distribution, Extension
+    from distutils.command.clean import clean  # type: ignore
+    from distutils.command.build_ext import build_ext  # type: ignore
+    from distutils.tests.support import fixup_build_ext  # type: ignore
+
+    if verbose:
+        distutils.log.set_verbosity(distutils.log.DEBUG)
+
+    source_file_path = pathlib.Path(generated_source_path)
+    extension_name = source_file_path.stem
+    extra_compile_args = get_extra_flags("CFLAGS", "PY_CFLAGS_NODIST")
+    extra_link_args = get_extra_flags("LDFLAGS", "PY_LDFLAGS_NODIST")
+    if keep_asserts:
+        extra_compile_args.append("-UNDEBUG")
+    extension = [
+        Extension(
+            extension_name,
+            sources=[
+                str(MOD_DIR.parent.parent.parent / "Python" / "Python-ast.c"),
+                str(MOD_DIR.parent.parent.parent / "Python" / "asdl.c"),
+                str(MOD_DIR.parent.parent.parent / "Parser" / "tokenizer.c"),
+                str(MOD_DIR.parent.parent.parent / "Parser" / "pegen" / "pegen.c"),
+                str(MOD_DIR.parent.parent.parent / "Parser" / "pegen" / "parse_string.c"),
+                str(MOD_DIR.parent / "peg_extension" / "peg_extension.c"),
+                generated_source_path,
+            ],
+            include_dirs=[
+                str(MOD_DIR.parent.parent.parent / "Include" / "internal"),
+                str(MOD_DIR.parent.parent.parent / "Parser"),
+                str(MOD_DIR.parent.parent.parent / "Parser" / "pegen"),
+            ],
+            extra_compile_args=extra_compile_args,
+            extra_link_args=extra_link_args,
+        )
+    ]
+    dist = Distribution({"name": extension_name, "ext_modules": extension})
+    cmd = build_ext(dist)
+    fixup_build_ext(cmd)
+    cmd.inplace = True
+    if build_dir:
+        cmd.build_temp = build_dir
+        cmd.build_lib = build_dir
+    cmd.ensure_finalized()
+    cmd.run()
+
+    extension_path = source_file_path.parent / cmd.get_ext_filename(extension_name)
+    shutil.move(cmd.get_ext_fullpath(extension_name), extension_path)
+
+    cmd = clean(dist)
+    cmd.finalize_options()
+    cmd.run()
+
+    return extension_path
+
+
+def build_parser(
+    grammar_file: str, verbose_tokenizer: bool = False, verbose_parser: bool = False
+) -> Tuple[Grammar, Parser, Tokenizer]:
+    with open(grammar_file) as file:
+        tokenizer = Tokenizer(tokenize.generate_tokens(file.readline), verbose=verbose_tokenizer)
+        parser = GrammarParser(tokenizer, verbose=verbose_parser)
+        grammar = parser.start()
+
+        if not grammar:
+            raise parser.make_syntax_error(grammar_file)
+
+    return grammar, parser, tokenizer
+
+
+def generate_token_definitions(tokens: IO[str]) -> TokenDefinitions:
+    all_tokens = {}
+    exact_tokens = {}
+    non_exact_tokens = set()
+    numbers = itertools.count(0)
+
+    for line in tokens:
+        line = line.strip()
+
+        if not line or line.startswith("#"):
+            continue
+
+        pieces = line.split()
+        index = next(numbers)
+
+        if len(pieces) == 1:
+            (token,) = pieces
+            non_exact_tokens.add(token)
+            all_tokens[index] = token
+        elif len(pieces) == 2:
+            token, op = pieces
+            exact_tokens[op.strip("'")] = index
+            all_tokens[index] = token
+        else:
+            raise ValueError(f"Unexpected line found in Tokens file: {line}")
+
+    return all_tokens, exact_tokens, non_exact_tokens
+
+
+def build_c_generator(
+    grammar: Grammar,
+    grammar_file: str,
+    tokens_file: str,
+    output_file: str,
+    compile_extension: bool = False,
+    verbose_c_extension: bool = False,
+    keep_asserts_in_extension: bool = True,
+    skip_actions: bool = False,
+) -> ParserGenerator:
+    with open(tokens_file, "r") as tok_file:
+        all_tokens, exact_tok, non_exact_tok = generate_token_definitions(tok_file)
+    with open(output_file, "w") as file:
+        gen: ParserGenerator = CParserGenerator(
+            grammar, all_tokens, exact_tok, non_exact_tok, file, skip_actions=skip_actions
+        )
+        gen.generate(grammar_file)
+
+    if compile_extension:
+        with tempfile.TemporaryDirectory() as build_dir:
+            compile_c_extension(
+                output_file,
+                build_dir=build_dir,
+                verbose=verbose_c_extension,
+                keep_asserts=keep_asserts_in_extension,
+            )
+    return gen
+
+
+def build_python_generator(
+    grammar: Grammar, grammar_file: str, output_file: str, skip_actions: bool = False,
+) -> ParserGenerator:
+    with open(output_file, "w") as file:
+        gen: ParserGenerator = PythonParserGenerator(grammar, file)  # TODO: skip_actions
+        gen.generate(grammar_file)
+    return gen
+
+
+def build_c_parser_and_generator(
+    grammar_file: str,
+    tokens_file: str,
+    output_file: str,
+    compile_extension: bool = False,
+    verbose_tokenizer: bool = False,
+    verbose_parser: bool = False,
+    verbose_c_extension: bool = False,
+    keep_asserts_in_extension: bool = True,
+    skip_actions: bool = False,
+) -> Tuple[Grammar, Parser, Tokenizer, ParserGenerator]:
+    """Generate rules, C parser, tokenizer, parser generator for a given grammar
+
+    Args:
+        grammar_file (string): Path for the grammar file
+        tokens_file (string): Path for the tokens file
+        output_file (string): Path for the output file
+        compile_extension (bool, optional): Whether to compile the C extension.
+          Defaults to False.
+        verbose_tokenizer (bool, optional): Whether to display additional output
+          when generating the tokenizer. Defaults to False.
+        verbose_parser (bool, optional): Whether to display additional output
+          when generating the parser. Defaults to False.
+        verbose_c_extension (bool, optional): Whether to display additional
+          output when compiling the C extension . Defaults to False.
+        keep_asserts_in_extension (bool, optional): Whether to keep the assert statements
+          when compiling the extension module. Defaults to True.
+        skip_actions (bool, optional): Whether to pretend no rule has any actions.
+    """
+    grammar, parser, tokenizer = build_parser(grammar_file, verbose_tokenizer, verbose_parser)
+    gen = build_c_generator(
+        grammar,
+        grammar_file,
+        tokens_file,
+        output_file,
+        compile_extension,
+        verbose_c_extension,
+        keep_asserts_in_extension,
+        skip_actions=skip_actions,
+    )
+
+    return grammar, parser, tokenizer, gen
+
+
+def build_python_parser_and_generator(
+    grammar_file: str,
+    output_file: str,
+    verbose_tokenizer: bool = False,
+    verbose_parser: bool = False,
+    skip_actions: bool = False,
+) -> Tuple[Grammar, Parser, Tokenizer, ParserGenerator]:
+    """Generate rules, python parser, tokenizer, parser generator for a given grammar
+
+    Args:
+        grammar_file (string): Path for the grammar file
+        output_file (string): Path for the output file
+        verbose_tokenizer (bool, optional): Whether to display additional output
+          when generating the tokenizer. Defaults to False.
+        verbose_parser (bool, optional): Whether to display additional output
+          when generating the parser. Defaults to False.
+        skip_actions (bool, optional): Whether to pretend no rule has any actions.
+    """
+    grammar, parser, tokenizer = build_parser(grammar_file, verbose_tokenizer, verbose_parser)
+    gen = build_python_generator(grammar, grammar_file, output_file, skip_actions=skip_actions,)
+    return grammar, parser, tokenizer, gen
diff --git a/Tools/peg_generator/pegen/c_generator.py b/Tools/peg_generator/pegen/c_generator.py
new file mode 100644
index 0000000..b4d6a0b
--- /dev/null
+++ b/Tools/peg_generator/pegen/c_generator.py
@@ -0,0 +1,791 @@
+import ast
+from dataclasses import field, dataclass
+import re
+from typing import Any, Dict, IO, Optional, List, Text, Tuple, Set
+from enum import Enum
+
+from pegen import grammar
+from pegen.grammar import (
+    Alt,
+    Cut,
+    Gather,
+    GrammarVisitor,
+    Group,
+    Lookahead,
+    NamedItem,
+    NameLeaf,
+    NegativeLookahead,
+    Opt,
+    PositiveLookahead,
+    Repeat0,
+    Repeat1,
+    Rhs,
+    Rule,
+    StringLeaf,
+)
+from pegen.parser_generator import ParserGenerator
+
+
+EXTENSION_PREFIX = """\
+#include "pegen.h"
+
+#if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
+extern int Py_DebugFlag;
+#define D(x) if (Py_DebugFlag) x;
+#else
+#define D(x)
+#endif
+
+"""
+
+
+EXTENSION_SUFFIX = """
+void *
+_PyPegen_parse(Parser *p)
+{
+    // Initialize keywords
+    p->keywords = reserved_keywords;
+    p->n_keyword_lists = n_keyword_lists;
+
+    return start_rule(p);
+}
+"""
+
+
+class NodeTypes(Enum):
+    NAME_TOKEN = 0
+    NUMBER_TOKEN = 1
+    STRING_TOKEN = 2
+    GENERIC_TOKEN = 3
+    KEYWORD = 4
+    SOFT_KEYWORD = 5
+    CUT_OPERATOR = 6
+
+
+BASE_NODETYPES = {
+    "NAME": NodeTypes.NAME_TOKEN,
+    "NUMBER": NodeTypes.NUMBER_TOKEN,
+    "STRING": NodeTypes.STRING_TOKEN,
+}
+
+
+@dataclass
+class FunctionCall:
+    function: str
+    arguments: List[Any] = field(default_factory=list)
+    assigned_variable: Optional[str] = None
+    return_type: Optional[str] = None
+    nodetype: Optional[NodeTypes] = None
+    force_true: bool = False
+    comment: Optional[str] = None
+
+    def __str__(self) -> str:
+        parts = []
+        parts.append(self.function)
+        if self.arguments:
+            parts.append(f"({', '.join(map(str, self.arguments))})")
+        if self.force_true:
+            parts.append(", 1")
+        if self.assigned_variable:
+            parts = ["(", self.assigned_variable, " = ", *parts, ")"]
+        if self.comment:
+            parts.append(f"  // {self.comment}")
+        return "".join(parts)
+
+
+class CCallMakerVisitor(GrammarVisitor):
+    def __init__(
+        self,
+        parser_generator: ParserGenerator,
+        exact_tokens: Dict[str, int],
+        non_exact_tokens: Set[str],
+    ):
+        self.gen = parser_generator
+        self.exact_tokens = exact_tokens
+        self.non_exact_tokens = non_exact_tokens
+        self.cache: Dict[Any, FunctionCall] = {}
+        self.keyword_cache: Dict[str, int] = {}
+        self.soft_keywords: Set[str] = set()
+
+    def keyword_helper(self, keyword: str) -> FunctionCall:
+        if keyword not in self.keyword_cache:
+            self.keyword_cache[keyword] = self.gen.keyword_type()
+        return FunctionCall(
+            assigned_variable="_keyword",
+            function="_PyPegen_expect_token",
+            arguments=["p", self.keyword_cache[keyword]],
+            return_type="Token *",
+            nodetype=NodeTypes.KEYWORD,
+            comment=f"token='{keyword}'",
+        )
+
+    def soft_keyword_helper(self, value: str) -> FunctionCall:
+        self.soft_keywords.add(value.replace('"', ""))
+        return FunctionCall(
+            assigned_variable="_keyword",
+            function="_PyPegen_expect_soft_keyword",
+            arguments=["p", value],
+            return_type="expr_ty",
+            nodetype=NodeTypes.SOFT_KEYWORD,
+            comment=f"soft_keyword='{value}'",
+        )
+
+    def visit_NameLeaf(self, node: NameLeaf) -> FunctionCall:
+        name = node.value
+        if name in self.non_exact_tokens:
+            if name in BASE_NODETYPES:
+                return FunctionCall(
+                    assigned_variable=f"{name.lower()}_var",
+                    function=f"_PyPegen_{name.lower()}_token",
+                    arguments=["p"],
+                    nodetype=BASE_NODETYPES[name],
+                    return_type="expr_ty",
+                    comment=name,
+                )
+            return FunctionCall(
+                assigned_variable=f"{name.lower()}_var",
+                function=f"_PyPegen_expect_token",
+                arguments=["p", name],
+                nodetype=NodeTypes.GENERIC_TOKEN,
+                return_type="Token *",
+                comment=f"token='{name}'",
+            )
+
+        type = None
+        rule = self.gen.all_rules.get(name.lower())
+        if rule is not None:
+            type = "asdl_seq *" if rule.is_loop() or rule.is_gather() else rule.type
+
+        return FunctionCall(
+            assigned_variable=f"{name}_var",
+            function=f"{name}_rule",
+            arguments=["p"],
+            return_type=type,
+            comment=f"{node}",
+        )
+
+    def visit_StringLeaf(self, node: StringLeaf) -> FunctionCall:
+        val = ast.literal_eval(node.value)
+        if re.match(r"[a-zA-Z_]\w*\Z", val):  # This is a keyword
+            if node.value.endswith("'"):
+                return self.keyword_helper(val)
+            else:
+                return self.soft_keyword_helper(node.value)
+        else:
+            assert val in self.exact_tokens, f"{node.value} is not a known literal"
+            type = self.exact_tokens[val]
+            return FunctionCall(
+                assigned_variable="_literal",
+                function=f"_PyPegen_expect_token",
+                arguments=["p", type],
+                nodetype=NodeTypes.GENERIC_TOKEN,
+                return_type="Token *",
+                comment=f"token='{val}'",
+            )
+
+    def visit_Rhs(self, node: Rhs) -> FunctionCall:
+        def can_we_inline(node: Rhs) -> int:
+            if len(node.alts) != 1 or len(node.alts[0].items) != 1:
+                return False
+            # If the alternative has an action we cannot inline
+            if getattr(node.alts[0], "action", None) is not None:
+                return False
+            return True
+
+        if node in self.cache:
+            return self.cache[node]
+        if can_we_inline(node):
+            self.cache[node] = self.generate_call(node.alts[0].items[0])
+        else:
+            name = self.gen.name_node(node)
+            self.cache[node] = FunctionCall(
+                assigned_variable=f"{name}_var",
+                function=f"{name}_rule",
+                arguments=["p"],
+                comment=f"{node}",
+            )
+        return self.cache[node]
+
+    def visit_NamedItem(self, node: NamedItem) -> FunctionCall:
+        call = self.generate_call(node.item)
+        if node.name:
+            call.assigned_variable = node.name
+        return call
+
+    def lookahead_call_helper(self, node: Lookahead, positive: int) -> FunctionCall:
+        call = self.generate_call(node.node)
+        if call.nodetype == NodeTypes.NAME_TOKEN:
+            return FunctionCall(
+                function=f"_PyPegen_lookahead_with_name",
+                arguments=[positive, call.function, *call.arguments],
+                return_type="int",
+            )
+        elif call.nodetype == NodeTypes.SOFT_KEYWORD:
+            return FunctionCall(
+                function=f"_PyPegen_lookahead_with_string",
+                arguments=[positive, call.function, *call.arguments],
+                return_type="int",
+            )
+        elif call.nodetype in {NodeTypes.GENERIC_TOKEN, NodeTypes.KEYWORD}:
+            return FunctionCall(
+                function=f"_PyPegen_lookahead_with_int",
+                arguments=[positive, call.function, *call.arguments],
+                return_type="int",
+                comment=f"token={node.node}",
+            )
+        else:
+            return FunctionCall(
+                function=f"_PyPegen_lookahead",
+                arguments=[positive, call.function, *call.arguments],
+                return_type="int",
+            )
+
+    def visit_PositiveLookahead(self, node: PositiveLookahead) -> FunctionCall:
+        return self.lookahead_call_helper(node, 1)
+
+    def visit_NegativeLookahead(self, node: NegativeLookahead) -> FunctionCall:
+        return self.lookahead_call_helper(node, 0)
+
+    def visit_Opt(self, node: Opt) -> FunctionCall:
+        call = self.generate_call(node.node)
+        return FunctionCall(
+            assigned_variable="_opt_var",
+            function=call.function,
+            arguments=call.arguments,
+            force_true=True,
+            comment=f"{node}",
+        )
+
+    def visit_Repeat0(self, node: Repeat0) -> FunctionCall:
+        if node in self.cache:
+            return self.cache[node]
+        name = self.gen.name_loop(node.node, False)
+        self.cache[node] = FunctionCall(
+            assigned_variable=f"{name}_var",
+            function=f"{name}_rule",
+            arguments=["p"],
+            return_type="asdl_seq *",
+            comment=f"{node}",
+        )
+        return self.cache[node]
+
+    def visit_Repeat1(self, node: Repeat1) -> FunctionCall:
+        if node in self.cache:
+            return self.cache[node]
+        name = self.gen.name_loop(node.node, True)
+        self.cache[node] = FunctionCall(
+            assigned_variable=f"{name}_var",
+            function=f"{name}_rule",
+            arguments=["p"],
+            return_type="asdl_seq *",
+            comment=f"{node}",
+        )
+        return self.cache[node]
+
+    def visit_Gather(self, node: Gather) -> FunctionCall:
+        if node in self.cache:
+            return self.cache[node]
+        name = self.gen.name_gather(node)
+        self.cache[node] = FunctionCall(
+            assigned_variable=f"{name}_var",
+            function=f"{name}_rule",
+            arguments=["p"],
+            return_type="asdl_seq *",
+            comment=f"{node}",
+        )
+        return self.cache[node]
+
+    def visit_Group(self, node: Group) -> FunctionCall:
+        return self.generate_call(node.rhs)
+
+    def visit_Cut(self, node: Cut) -> FunctionCall:
+        return FunctionCall(
+            assigned_variable="_cut_var",
+            return_type="int",
+            function="1",
+            nodetype=NodeTypes.CUT_OPERATOR,
+        )
+
+    def generate_call(self, node: Any) -> FunctionCall:
+        return super().visit(node)
+
+
+class CParserGenerator(ParserGenerator, GrammarVisitor):
+    def __init__(
+        self,
+        grammar: grammar.Grammar,
+        tokens: Dict[int, str],
+        exact_tokens: Dict[str, int],
+        non_exact_tokens: Set[str],
+        file: Optional[IO[Text]],
+        debug: bool = False,
+        skip_actions: bool = False,
+    ):
+        super().__init__(grammar, tokens, file)
+        self.callmakervisitor: CCallMakerVisitor = CCallMakerVisitor(
+            self, exact_tokens, non_exact_tokens
+        )
+        self._varname_counter = 0
+        self.debug = debug
+        self.skip_actions = skip_actions
+
+    def add_level(self) -> None:
+        self.print("D(p->level++);")
+
+    def remove_level(self) -> None:
+        self.print("D(p->level--);")
+
+    def add_return(self, ret_val: str) -> None:
+        self.remove_level()
+        self.print(f"return {ret_val};")
+
+    def unique_varname(self, name: str = "tmpvar") -> str:
+        new_var = name + "_" + str(self._varname_counter)
+        self._varname_counter += 1
+        return new_var
+
+    def call_with_errorcheck_return(self, call_text: str, returnval: str) -> None:
+        error_var = self.unique_varname()
+        self.print(f"int {error_var} = {call_text};")
+        self.print(f"if ({error_var}) {{")
+        with self.indent():
+            self.add_return(returnval)
+        self.print("}")
+
+    def call_with_errorcheck_goto(self, call_text: str, goto_target: str) -> None:
+        error_var = self.unique_varname()
+        self.print(f"int {error_var} = {call_text};")
+        self.print(f"if ({error_var}) {{")
+        with self.indent():
+            self.print(f"goto {goto_target};")
+        self.print(f"}}")
+
+    def out_of_memory_return(self, expr: str, cleanup_code: Optional[str] = None,) -> None:
+        self.print(f"if ({expr}) {{")
+        with self.indent():
+            if cleanup_code is not None:
+                self.print(cleanup_code)
+            self.print("p->error_indicator = 1;")
+            self.print("PyErr_NoMemory();")
+            self.add_return("NULL")
+        self.print(f"}}")
+
+    def out_of_memory_goto(self, expr: str, goto_target: str) -> None:
+        self.print(f"if ({expr}) {{")
+        with self.indent():
+            self.print("PyErr_NoMemory();")
+            self.print(f"goto {goto_target};")
+        self.print(f"}}")
+
+    def generate(self, filename: str) -> None:
+        self.collect_todo()
+        self.print(f"// @generated by pegen.py from {filename}")
+        header = self.grammar.metas.get("header", EXTENSION_PREFIX)
+        if header:
+            self.print(header.rstrip("\n"))
+        subheader = self.grammar.metas.get("subheader", "")
+        if subheader:
+            self.print(subheader)
+        self._setup_keywords()
+        for i, (rulename, rule) in enumerate(self.todo.items(), 1000):
+            comment = "  // Left-recursive" if rule.left_recursive else ""
+            self.print(f"#define {rulename}_type {i}{comment}")
+        self.print()
+        for rulename, rule in self.todo.items():
+            if rule.is_loop() or rule.is_gather():
+                type = "asdl_seq *"
+            elif rule.type:
+                type = rule.type + " "
+            else:
+                type = "void *"
+            self.print(f"static {type}{rulename}_rule(Parser *p);")
+        self.print()
+        while self.todo:
+            for rulename, rule in list(self.todo.items()):
+                del self.todo[rulename]
+                self.print()
+                if rule.left_recursive:
+                    self.print("// Left-recursive")
+                self.visit(rule)
+        if self.skip_actions:
+            mode = 0
+        else:
+            mode = int(self.rules["start"].type == "mod_ty") if "start" in self.rules else 1
+            if mode == 1 and self.grammar.metas.get("bytecode"):
+                mode += 1
+        modulename = self.grammar.metas.get("modulename", "parse")
+        trailer = self.grammar.metas.get("trailer", EXTENSION_SUFFIX)
+        if trailer:
+            self.print(trailer.rstrip("\n") % dict(mode=mode, modulename=modulename))
+
+    def _group_keywords_by_length(self) -> Dict[int, List[Tuple[str, int]]]:
+        groups: Dict[int, List[Tuple[str, int]]] = {}
+        for keyword_str, keyword_type in self.callmakervisitor.keyword_cache.items():
+            length = len(keyword_str)
+            if length in groups:
+                groups[length].append((keyword_str, keyword_type))
+            else:
+                groups[length] = [(keyword_str, keyword_type)]
+        return groups
+
+    def _setup_keywords(self) -> None:
+        keyword_cache = self.callmakervisitor.keyword_cache
+        n_keyword_lists = (
+            len(max(keyword_cache.keys(), key=len)) + 1 if len(keyword_cache) > 0 else 0
+        )
+        self.print(f"static const int n_keyword_lists = {n_keyword_lists};")
+        groups = self._group_keywords_by_length()
+        self.print("static KeywordToken *reserved_keywords[] = {")
+        with self.indent():
+            num_groups = max(groups) + 1 if groups else 1
+            for keywords_length in range(num_groups):
+                if keywords_length not in groups.keys():
+                    self.print("(KeywordToken[]) {{NULL, -1}},")
+                else:
+                    self.print("(KeywordToken[]) {")
+                    with self.indent():
+                        for keyword_str, keyword_type in groups[keywords_length]:
+                            self.print(f'{{"{keyword_str}", {keyword_type}}},')
+                        self.print("{NULL, -1},")
+                    self.print("},")
+        self.print("};")
+
+    def _set_up_token_start_metadata_extraction(self) -> None:
+        self.print("if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {")
+        with self.indent():
+            self.print("p->error_indicator = 1;")
+            self.add_return("NULL")
+        self.print("}")
+        self.print("int _start_lineno = p->tokens[_mark]->lineno;")
+        self.print("UNUSED(_start_lineno); // Only used by EXTRA macro")
+        self.print("int _start_col_offset = p->tokens[_mark]->col_offset;")
+        self.print("UNUSED(_start_col_offset); // Only used by EXTRA macro")
+
+    def _set_up_token_end_metadata_extraction(self) -> None:
+        self.print("Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);")
+        self.print("if (_token == NULL) {")
+        with self.indent():
+            self.add_return("NULL")
+        self.print("}")
+        self.print("int _end_lineno = _token->end_lineno;")
+        self.print("UNUSED(_end_lineno); // Only used by EXTRA macro")
+        self.print("int _end_col_offset = _token->end_col_offset;")
+        self.print("UNUSED(_end_col_offset); // Only used by EXTRA macro")
+
+    def _check_for_errors(self) -> None:
+        self.print("if (p->error_indicator) {")
+        with self.indent():
+            self.add_return("NULL")
+        self.print("}")
+
+    def _set_up_rule_memoization(self, node: Rule, result_type: str) -> None:
+        self.print("{")
+        with self.indent():
+            self.add_level()
+            self.print(f"{result_type} _res = NULL;")
+            self.print(f"if (_PyPegen_is_memoized(p, {node.name}_type, &_res)) {{")
+            with self.indent():
+                self.add_return("_res")
+            self.print("}")
+            self.print("int _mark = p->mark;")
+            self.print("int _resmark = p->mark;")
+            self.print("while (1) {")
+            with self.indent():
+                self.call_with_errorcheck_return(
+                    f"_PyPegen_update_memo(p, _mark, {node.name}_type, _res)", "_res"
+                )
+                self.print("p->mark = _mark;")
+                self.print(f"void *_raw = {node.name}_raw(p);")
+                self.print("if (p->error_indicator)")
+                with self.indent():
+                    self.print("return NULL;")
+                self.print("if (_raw == NULL || p->mark <= _resmark)")
+                with self.indent():
+                    self.print("break;")
+                self.print(f"_resmark = p->mark;")
+                self.print("_res = _raw;")
+            self.print("}")
+            self.print(f"p->mark = _resmark;")
+            self.add_return("_res")
+        self.print("}")
+        self.print(f"static {result_type}")
+        self.print(f"{node.name}_raw(Parser *p)")
+
+    def _should_memoize(self, node: Rule) -> bool:
+        return node.memo and not node.left_recursive
+
+    def _handle_default_rule_body(self, node: Rule, rhs: Rhs, result_type: str) -> None:
+        memoize = self._should_memoize(node)
+
+        with self.indent():
+            self.add_level()
+            self._check_for_errors()
+            self.print(f"{result_type} _res = NULL;")
+            if memoize:
+                self.print(f"if (_PyPegen_is_memoized(p, {node.name}_type, &_res)) {{")
+                with self.indent():
+                    self.add_return("_res")
+                self.print("}")
+            self.print("int _mark = p->mark;")
+            if any(alt.action and "EXTRA" in alt.action for alt in rhs.alts):
+                self._set_up_token_start_metadata_extraction()
+            self.visit(
+                rhs, is_loop=False, is_gather=node.is_gather(), rulename=node.name,
+            )
+            if self.debug:
+                self.print(f'D(fprintf(stderr, "Fail at %d: {node.name}\\n", p->mark));')
+            self.print("_res = NULL;")
+        self.print("  done:")
+        with self.indent():
+            if memoize:
+                self.print(f"_PyPegen_insert_memo(p, _mark, {node.name}_type, _res);")
+            self.add_return("_res")
+
+    def _handle_loop_rule_body(self, node: Rule, rhs: Rhs) -> None:
+        memoize = self._should_memoize(node)
+        is_repeat1 = node.name.startswith("_loop1")
+
+        with self.indent():
+            self.add_level()
+            self._check_for_errors()
+            self.print("void *_res = NULL;")
+            if memoize:
+                self.print(f"if (_PyPegen_is_memoized(p, {node.name}_type, &_res)) {{")
+                with self.indent():
+                    self.add_return("_res")
+                self.print("}")
+            self.print("int _mark = p->mark;")
+            self.print("int _start_mark = p->mark;")
+            self.print("void **_children = PyMem_Malloc(sizeof(void *));")
+            self.out_of_memory_return(f"!_children")
+            self.print("ssize_t _children_capacity = 1;")
+            self.print("ssize_t _n = 0;")
+            if any(alt.action and "EXTRA" in alt.action for alt in rhs.alts):
+                self._set_up_token_start_metadata_extraction()
+            self.visit(
+                rhs, is_loop=True, is_gather=node.is_gather(), rulename=node.name,
+            )
+            if is_repeat1:
+                self.print("if (_n == 0 || p->error_indicator) {")
+                with self.indent():
+                    self.print("PyMem_Free(_children);")
+                    self.add_return("NULL")
+                self.print("}")
+            self.print("asdl_seq *_seq = _Py_asdl_seq_new(_n, p->arena);")
+            self.out_of_memory_return(f"!_seq", cleanup_code="PyMem_Free(_children);")
+            self.print("for (int i = 0; i < _n; i++) asdl_seq_SET(_seq, i, _children[i]);")
+            self.print("PyMem_Free(_children);")
+            if node.name:
+                self.print(f"_PyPegen_insert_memo(p, _start_mark, {node.name}_type, _seq);")
+            self.add_return("_seq")
+
+    def visit_Rule(self, node: Rule) -> None:
+        is_loop = node.is_loop()
+        is_gather = node.is_gather()
+        rhs = node.flatten()
+        if is_loop or is_gather:
+            result_type = "asdl_seq *"
+        elif node.type:
+            result_type = node.type
+        else:
+            result_type = "void *"
+
+        for line in str(node).splitlines():
+            self.print(f"// {line}")
+        if node.left_recursive and node.leader:
+            self.print(f"static {result_type} {node.name}_raw(Parser *);")
+
+        self.print(f"static {result_type}")
+        self.print(f"{node.name}_rule(Parser *p)")
+
+        if node.left_recursive and node.leader:
+            self._set_up_rule_memoization(node, result_type)
+
+        self.print("{")
+        if is_loop:
+            self._handle_loop_rule_body(node, rhs)
+        else:
+            self._handle_default_rule_body(node, rhs, result_type)
+        self.print("}")
+
+    def visit_NamedItem(self, node: NamedItem) -> None:
+        call = self.callmakervisitor.generate_call(node)
+        if call.assigned_variable:
+            call.assigned_variable = self.dedupe(call.assigned_variable)
+        self.print(call)
+
+    def visit_Rhs(
+        self, node: Rhs, is_loop: bool, is_gather: bool, rulename: Optional[str]
+    ) -> None:
+        if is_loop:
+            assert len(node.alts) == 1
+        for alt in node.alts:
+            self.visit(alt, is_loop=is_loop, is_gather=is_gather, rulename=rulename)
+
+    def join_conditions(self, keyword: str, node: Any) -> None:
+        self.print(f"{keyword} (")
+        with self.indent():
+            first = True
+            for item in node.items:
+                if first:
+                    first = False
+                else:
+                    self.print("&&")
+                self.visit(item)
+        self.print(")")
+
+    def emit_action(self, node: Alt, cleanup_code: Optional[str] = None) -> None:
+        self.print(f"_res = {node.action};")
+
+        self.print("if (_res == NULL && PyErr_Occurred()) {")
+        with self.indent():
+            self.print("p->error_indicator = 1;")
+            if cleanup_code:
+                self.print(cleanup_code)
+            self.add_return("NULL")
+        self.print("}")
+
+        if self.debug:
+            self.print(
+                f'D(fprintf(stderr, "Hit with action [%d-%d]: %s\\n", _mark, p->mark, "{node}"));'
+            )
+
+    def emit_default_action(self, is_gather: bool, node: Alt) -> None:
+        if len(self.local_variable_names) > 1:
+            if is_gather:
+                assert len(self.local_variable_names) == 2
+                self.print(
+                    f"_res = _PyPegen_seq_insert_in_front(p, "
+                    f"{self.local_variable_names[0]}, {self.local_variable_names[1]});"
+                )
+            else:
+                if self.debug:
+                    self.print(
+                        f'D(fprintf(stderr, "Hit without action [%d:%d]: %s\\n", _mark, p->mark, "{node}"));'
+                    )
+                self.print(
+                    f"_res = _PyPegen_dummy_name(p, {', '.join(self.local_variable_names)});"
+                )
+        else:
+            if self.debug:
+                self.print(
+                    f'D(fprintf(stderr, "Hit with default action [%d:%d]: %s\\n", _mark, p->mark, "{node}"));'
+                )
+            self.print(f"_res = {self.local_variable_names[0]};")
+
+    def emit_dummy_action(self) -> None:
+        self.print("_res = _PyPegen_dummy_name(p);")
+
+    def handle_alt_normal(self, node: Alt, is_gather: bool, rulename: Optional[str]) -> None:
+        self.join_conditions(keyword="if", node=node)
+        self.print("{")
+        # We have parsed successfully all the conditions for the option.
+        with self.indent():
+            node_str = str(node).replace('"', '\\"')
+            self.print(
+                f'D(fprintf(stderr, "%*c+ {rulename}[%d-%d]: %s succeeded!\\n", p->level, \' \', _mark, p->mark, "{node_str}"));'
+            )
+            # Prepare to emmit the rule action and do so
+            if node.action and "EXTRA" in node.action:
+                self._set_up_token_end_metadata_extraction()
+            if self.skip_actions:
+                self.emit_dummy_action()
+            elif node.action:
+                self.emit_action(node)
+            else:
+                self.emit_default_action(is_gather, node)
+
+            # As the current option has parsed correctly, do not continue with the rest.
+            self.print(f"goto done;")
+        self.print("}")
+
+    def handle_alt_loop(self, node: Alt, is_gather: bool, rulename: Optional[str]) -> None:
+        # Condition of the main body of the alternative
+        self.join_conditions(keyword="while", node=node)
+        self.print("{")
+        # We have parsed successfully one item!
+        with self.indent():
+            # Prepare to emit the rule action and do so
+            if node.action and "EXTRA" in node.action:
+                self._set_up_token_end_metadata_extraction()
+            if self.skip_actions:
+                self.emit_dummy_action()
+            elif node.action:
+                self.emit_action(node, cleanup_code="PyMem_Free(_children);")
+            else:
+                self.emit_default_action(is_gather, node)
+
+            # Add the result of rule to the temporary buffer of children. This buffer
+            # will populate later an asdl_seq with all elements to return.
+            self.print("if (_n == _children_capacity) {")
+            with self.indent():
+                self.print("_children_capacity *= 2;")
+                self.print(
+                    "void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));"
+                )
+                self.out_of_memory_return(f"!_new_children")
+                self.print("_children = _new_children;")
+            self.print("}")
+            self.print("_children[_n++] = _res;")
+            self.print("_mark = p->mark;")
+        self.print("}")
+
+    def visit_Alt(
+        self, node: Alt, is_loop: bool, is_gather: bool, rulename: Optional[str]
+    ) -> None:
+        if len(node.items) == 1 and str(node.items[0]).startswith('invalid_'):
+            self.print(f"if (p->call_invalid_rules) {{ // {node}")
+        else:
+            self.print(f"{{ // {node}")
+        with self.indent():
+            self._check_for_errors()
+            node_str = str(node).replace('"', '\\"')
+            self.print(
+                f'D(fprintf(stderr, "%*c> {rulename}[%d-%d]: %s\\n", p->level, \' \', _mark, p->mark, "{node_str}"));'
+            )
+            # Prepare variable declarations for the alternative
+            vars = self.collect_vars(node)
+            for v, var_type in sorted(item for item in vars.items() if item[0] is not None):
+                if not var_type:
+                    var_type = "void *"
+                else:
+                    var_type += " "
+                if v == "_cut_var":
+                    v += " = 0"  # cut_var must be initialized
+                self.print(f"{var_type}{v};")
+                if v.startswith("_opt_var"):
+                    self.print(f"UNUSED({v}); // Silence compiler warnings")
+
+            with self.local_variable_context():
+                if is_loop:
+                    self.handle_alt_loop(node, is_gather, rulename)
+                else:
+                    self.handle_alt_normal(node, is_gather, rulename)
+
+            self.print("p->mark = _mark;")
+            node_str = str(node).replace('"', '\\"')
+            self.print(
+                f"D(fprintf(stderr, \"%*c%s {rulename}[%d-%d]: %s failed!\\n\", p->level, ' ',\n"
+                f'                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "{node_str}"));'
+            )
+            if "_cut_var" in vars:
+                self.print("if (_cut_var) {")
+                with self.indent():
+                    self.add_return("NULL")
+                self.print("}")
+        self.print("}")
+
+    def collect_vars(self, node: Alt) -> Dict[Optional[str], Optional[str]]:
+        types = {}
+        with self.local_variable_context():
+            for item in node.items:
+                name, type = self.add_var(item)
+                types[name] = type
+        return types
+
+    def add_var(self, node: NamedItem) -> Tuple[Optional[str], Optional[str]]:
+        call = self.callmakervisitor.generate_call(node.item)
+        name = node.name if node.name else call.assigned_variable
+        if name is not None:
+            name = self.dedupe(name)
+        return name, call.return_type
diff --git a/Tools/peg_generator/pegen/first_sets.py b/Tools/peg_generator/pegen/first_sets.py
new file mode 100755
index 0000000..71be5a2
--- /dev/null
+++ b/Tools/peg_generator/pegen/first_sets.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python3.8
+
+import argparse
+import pprint
+import sys
+from typing import Set, Dict
+
+from pegen.build import build_parser
+from pegen.grammar import (
+    Alt,
+    Cut,
+    Gather,
+    Grammar,
+    GrammarVisitor,
+    Group,
+    Leaf,
+    Lookahead,
+    NamedItem,
+    NameLeaf,
+    NegativeLookahead,
+    Opt,
+    Repeat,
+    Repeat0,
+    Repeat1,
+    Rhs,
+    Rule,
+    StringLeaf,
+    PositiveLookahead,
+)
+
+argparser = argparse.ArgumentParser(
+    prog="calculate_first_sets", description="Calculate the first sets of a grammar",
+)
+argparser.add_argument("grammar_file", help="The grammar file")
+
+
+class FirstSetCalculator(GrammarVisitor):
+    def __init__(self, rules: Dict[str, Rule]) -> None:
+        self.rules = rules
+        for rule in rules.values():
+            rule.nullable_visit(rules)
+        self.first_sets: Dict[str, Set[str]] = dict()
+        self.in_process: Set[str] = set()
+
+    def calculate(self) -> Dict[str, Set[str]]:
+        for name, rule in self.rules.items():
+            self.visit(rule)
+        return self.first_sets
+
+    def visit_Alt(self, item: Alt) -> Set[str]:
+        result: Set[str] = set()
+        to_remove: Set[str] = set()
+        for other in item.items:
+            new_terminals = self.visit(other)
+            if isinstance(other.item, NegativeLookahead):
+                to_remove |= new_terminals
+            result |= new_terminals
+            if to_remove:
+                result -= to_remove
+
+            # If the set of new terminals can start with the empty string,
+            # it means that the item is completelly nullable and we should
+            # also considering at least the next item in case the current
+            # one fails to parse.
+
+            if "" in new_terminals:
+                continue
+
+            if not isinstance(other.item, (Opt, NegativeLookahead, Repeat0)):
+                break
+
+        # Do not allow the empty string to propagate.
+        result.discard("")
+
+        return result
+
+    def visit_Cut(self, item: Cut) -> Set[str]:
+        return set()
+
+    def visit_Group(self, item: Group) -> Set[str]:
+        return self.visit(item.rhs)
+
+    def visit_PositiveLookahead(self, item: Lookahead) -> Set[str]:
+        return self.visit(item.node)
+
+    def visit_NegativeLookahead(self, item: NegativeLookahead) -> Set[str]:
+        return self.visit(item.node)
+
+    def visit_NamedItem(self, item: NamedItem) -> Set[str]:
+        return self.visit(item.item)
+
+    def visit_Opt(self, item: Opt) -> Set[str]:
+        return self.visit(item.node)
+
+    def visit_Gather(self, item: Gather) -> Set[str]:
+        return self.visit(item.node)
+
+    def visit_Repeat0(self, item: Repeat0) -> Set[str]:
+        return self.visit(item.node)
+
+    def visit_Repeat1(self, item: Repeat1) -> Set[str]:
+        return self.visit(item.node)
+
+    def visit_NameLeaf(self, item: NameLeaf) -> Set[str]:
+        if item.value not in self.rules:
+            return {item.value}
+
+        if item.value not in self.first_sets:
+            self.first_sets[item.value] = self.visit(self.rules[item.value])
+            return self.first_sets[item.value]
+        elif item.value in self.in_process:
+            return set()
+
+        return self.first_sets[item.value]
+
+    def visit_StringLeaf(self, item: StringLeaf) -> Set[str]:
+        return {item.value}
+
+    def visit_Rhs(self, item: Rhs) -> Set[str]:
+        result: Set[str] = set()
+        for alt in item.alts:
+            result |= self.visit(alt)
+        return result
+
+    def visit_Rule(self, item: Rule) -> Set[str]:
+        if item.name in self.in_process:
+            return set()
+        elif item.name not in self.first_sets:
+            self.in_process.add(item.name)
+            terminals = self.visit(item.rhs)
+            if item.nullable:
+                terminals.add("")
+            self.first_sets[item.name] = terminals
+            self.in_process.remove(item.name)
+        return self.first_sets[item.name]
+
+
+def main() -> None:
+    args = argparser.parse_args()
+
+    try:
+        grammar, parser, tokenizer = build_parser(args.grammar_file)
+    except Exception as err:
+        print("ERROR: Failed to parse grammar file", file=sys.stderr)
+        sys.exit(1)
+
+    firs_sets = FirstSetCalculator(grammar.rules).calculate()
+    pprint.pprint(firs_sets)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/pegen/grammar.py b/Tools/peg_generator/pegen/grammar.py
new file mode 100644
index 0000000..78edf41
--- /dev/null
+++ b/Tools/peg_generator/pegen/grammar.py
@@ -0,0 +1,467 @@
+from __future__ import annotations
+
+from abc import abstractmethod
+from typing import (
+    AbstractSet,
+    Any,
+    Dict,
+    Iterable,
+    Iterator,
+    List,
+    Optional,
+    Set,
+    Tuple,
+    TYPE_CHECKING,
+    Union,
+)
+
+
+if TYPE_CHECKING:
+    from pegen.parser_generator import ParserGenerator
+
+
+class GrammarError(Exception):
+    pass
+
+
+class GrammarVisitor:
+    def visit(self, node: Any, *args: Any, **kwargs: Any) -> Any:
+        """Visit a node."""
+        method = "visit_" + node.__class__.__name__
+        visitor = getattr(self, method, self.generic_visit)
+        return visitor(node, *args, **kwargs)
+
+    def generic_visit(self, node: Iterable[Any], *args: Any, **kwargs: Any) -> None:
+        """Called if no explicit visitor function exists for a node."""
+        for value in node:
+            if isinstance(value, list):
+                for item in value:
+                    self.visit(item, *args, **kwargs)
+            else:
+                self.visit(value, *args, **kwargs)
+
+
+class Grammar:
+    def __init__(self, rules: Iterable[Rule], metas: Iterable[Tuple[str, Optional[str]]]):
+        self.rules = {rule.name: rule for rule in rules}
+        self.metas = dict(metas)
+
+    def __str__(self) -> str:
+        return "\n".join(str(rule) for name, rule in self.rules.items())
+
+    def __repr__(self) -> str:
+        lines = ["Grammar("]
+        lines.append("  [")
+        for rule in self.rules.values():
+            lines.append(f"    {repr(rule)},")
+        lines.append("  ],")
+        lines.append("  {repr(list(self.metas.items()))}")
+        lines.append(")")
+        return "\n".join(lines)
+
+    def __iter__(self) -> Iterator[Rule]:
+        yield from self.rules.values()
+
+
+# Global flag whether we want actions in __str__() -- default off.
+SIMPLE_STR = True
+
+
+class Rule:
+    def __init__(self, name: str, type: Optional[str], rhs: Rhs, memo: Optional[object] = None):
+        self.name = name
+        self.type = type
+        self.rhs = rhs
+        self.memo = bool(memo)
+        self.visited = False
+        self.nullable = False
+        self.left_recursive = False
+        self.leader = False
+
+    def is_loop(self) -> bool:
+        return self.name.startswith("_loop")
+
+    def is_gather(self) -> bool:
+        return self.name.startswith("_gather")
+
+    def __str__(self) -> str:
+        if SIMPLE_STR or self.type is None:
+            res = f"{self.name}: {self.rhs}"
+        else:
+            res = f"{self.name}[{self.type}]: {self.rhs}"
+        if len(res) < 88:
+            return res
+        lines = [res.split(":")[0] + ":"]
+        lines += [f"    | {alt}" for alt in self.rhs.alts]
+        return "\n".join(lines)
+
+    def __repr__(self) -> str:
+        return f"Rule({self.name!r}, {self.type!r}, {self.rhs!r})"
+
+    def __iter__(self) -> Iterator[Rhs]:
+        yield self.rhs
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        if self.visited:
+            # A left-recursive rule is considered non-nullable.
+            return False
+        self.visited = True
+        self.nullable = self.rhs.nullable_visit(rules)
+        return self.nullable
+
+    def initial_names(self) -> AbstractSet[str]:
+        return self.rhs.initial_names()
+
+    def flatten(self) -> Rhs:
+        # If it's a single parenthesized group, flatten it.
+        rhs = self.rhs
+        if (
+            not self.is_loop()
+            and len(rhs.alts) == 1
+            and len(rhs.alts[0].items) == 1
+            and isinstance(rhs.alts[0].items[0].item, Group)
+        ):
+            rhs = rhs.alts[0].items[0].item.rhs
+        return rhs
+
+    def collect_todo(self, gen: ParserGenerator) -> None:
+        rhs = self.flatten()
+        rhs.collect_todo(gen)
+
+
+class Leaf:
+    def __init__(self, value: str):
+        self.value = value
+
+    def __str__(self) -> str:
+        return self.value
+
+    def __iter__(self) -> Iterable[str]:
+        if False:
+            yield
+
+    @abstractmethod
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        raise NotImplementedError
+
+    @abstractmethod
+    def initial_names(self) -> AbstractSet[str]:
+        raise NotImplementedError
+
+
+class NameLeaf(Leaf):
+    """The value is the name."""
+
+    def __str__(self) -> str:
+        if self.value == "ENDMARKER":
+            return "$"
+        return super().__str__()
+
+    def __repr__(self) -> str:
+        return f"NameLeaf({self.value!r})"
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        if self.value in rules:
+            return rules[self.value].nullable_visit(rules)
+        # Token or unknown; never empty.
+        return False
+
+    def initial_names(self) -> AbstractSet[str]:
+        return {self.value}
+
+
+class StringLeaf(Leaf):
+    """The value is a string literal, including quotes."""
+
+    def __repr__(self) -> str:
+        return f"StringLeaf({self.value!r})"
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        # The string token '' is considered empty.
+        return not self.value
+
+    def initial_names(self) -> AbstractSet[str]:
+        return set()
+
+
+class Rhs:
+    def __init__(self, alts: List[Alt]):
+        self.alts = alts
+        self.memo: Optional[Tuple[Optional[str], str]] = None
+
+    def __str__(self) -> str:
+        return " | ".join(str(alt) for alt in self.alts)
+
+    def __repr__(self) -> str:
+        return f"Rhs({self.alts!r})"
+
+    def __iter__(self) -> Iterator[List[Alt]]:
+        yield self.alts
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        for alt in self.alts:
+            if alt.nullable_visit(rules):
+                return True
+        return False
+
+    def initial_names(self) -> AbstractSet[str]:
+        names: Set[str] = set()
+        for alt in self.alts:
+            names |= alt.initial_names()
+        return names
+
+    def collect_todo(self, gen: ParserGenerator) -> None:
+        for alt in self.alts:
+            alt.collect_todo(gen)
+
+
+class Alt:
+    def __init__(self, items: List[NamedItem], *, icut: int = -1, action: Optional[str] = None):
+        self.items = items
+        self.icut = icut
+        self.action = action
+
+    def __str__(self) -> str:
+        core = " ".join(str(item) for item in self.items)
+        if not SIMPLE_STR and self.action:
+            return f"{core} {{ {self.action} }}"
+        else:
+            return core
+
+    def __repr__(self) -> str:
+        args = [repr(self.items)]
+        if self.icut >= 0:
+            args.append(f"icut={self.icut}")
+        if self.action:
+            args.append(f"action={self.action!r}")
+        return f"Alt({', '.join(args)})"
+
+    def __iter__(self) -> Iterator[List[NamedItem]]:
+        yield self.items
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        for item in self.items:
+            if not item.nullable_visit(rules):
+                return False
+        return True
+
+    def initial_names(self) -> AbstractSet[str]:
+        names: Set[str] = set()
+        for item in self.items:
+            names |= item.initial_names()
+            if not item.nullable:
+                break
+        return names
+
+    def collect_todo(self, gen: ParserGenerator) -> None:
+        for item in self.items:
+            item.collect_todo(gen)
+
+
+class NamedItem:
+    def __init__(self, name: Optional[str], item: Item):
+        self.name = name
+        self.item = item
+        self.nullable = False
+
+    def __str__(self) -> str:
+        if not SIMPLE_STR and self.name:
+            return f"{self.name}={self.item}"
+        else:
+            return str(self.item)
+
+    def __repr__(self) -> str:
+        return f"NamedItem({self.name!r}, {self.item!r})"
+
+    def __iter__(self) -> Iterator[Item]:
+        yield self.item
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        self.nullable = self.item.nullable_visit(rules)
+        return self.nullable
+
+    def initial_names(self) -> AbstractSet[str]:
+        return self.item.initial_names()
+
+    def collect_todo(self, gen: ParserGenerator) -> None:
+        gen.callmakervisitor.visit(self.item)
+
+
+class Lookahead:
+    def __init__(self, node: Plain, sign: str):
+        self.node = node
+        self.sign = sign
+
+    def __str__(self) -> str:
+        return f"{self.sign}{self.node}"
+
+    def __iter__(self) -> Iterator[Plain]:
+        yield self.node
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return True
+
+    def initial_names(self) -> AbstractSet[str]:
+        return set()
+
+
+class PositiveLookahead(Lookahead):
+    def __init__(self, node: Plain):
+        super().__init__(node, "&")
+
+    def __repr__(self) -> str:
+        return f"PositiveLookahead({self.node!r})"
+
+
+class NegativeLookahead(Lookahead):
+    def __init__(self, node: Plain):
+        super().__init__(node, "!")
+
+    def __repr__(self) -> str:
+        return f"NegativeLookahead({self.node!r})"
+
+
+class Opt:
+    def __init__(self, node: Item):
+        self.node = node
+
+    def __str__(self) -> str:
+        s = str(self.node)
+        # TODO: Decide whether to use [X] or X? based on type of X
+        if " " in s:
+            return f"[{s}]"
+        else:
+            return f"{s}?"
+
+    def __repr__(self) -> str:
+        return f"Opt({self.node!r})"
+
+    def __iter__(self) -> Iterator[Item]:
+        yield self.node
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return True
+
+    def initial_names(self) -> AbstractSet[str]:
+        return self.node.initial_names()
+
+
+class Repeat:
+    """Shared base class for x* and x+."""
+
+    def __init__(self, node: Plain):
+        self.node = node
+        self.memo: Optional[Tuple[Optional[str], str]] = None
+
+    @abstractmethod
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        raise NotImplementedError
+
+    def __iter__(self) -> Iterator[Plain]:
+        yield self.node
+
+    def initial_names(self) -> AbstractSet[str]:
+        return self.node.initial_names()
+
+
+class Repeat0(Repeat):
+    def __str__(self) -> str:
+        s = str(self.node)
+        # TODO: Decide whether to use (X)* or X* based on type of X
+        if " " in s:
+            return f"({s})*"
+        else:
+            return f"{s}*"
+
+    def __repr__(self) -> str:
+        return f"Repeat0({self.node!r})"
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return True
+
+
+class Repeat1(Repeat):
+    def __str__(self) -> str:
+        s = str(self.node)
+        # TODO: Decide whether to use (X)+ or X+ based on type of X
+        if " " in s:
+            return f"({s})+"
+        else:
+            return f"{s}+"
+
+    def __repr__(self) -> str:
+        return f"Repeat1({self.node!r})"
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return False
+
+
+class Gather(Repeat):
+    def __init__(self, separator: Plain, node: Plain):
+        self.separator = separator
+        self.node = node
+
+    def __str__(self) -> str:
+        return f"{self.separator!s}.{self.node!s}+"
+
+    def __repr__(self) -> str:
+        return f"Gather({self.separator!r}, {self.node!r})"
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return False
+
+
+class Group:
+    def __init__(self, rhs: Rhs):
+        self.rhs = rhs
+
+    def __str__(self) -> str:
+        return f"({self.rhs})"
+
+    def __repr__(self) -> str:
+        return f"Group({self.rhs!r})"
+
+    def __iter__(self) -> Iterator[Rhs]:
+        yield self.rhs
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return self.rhs.nullable_visit(rules)
+
+    def initial_names(self) -> AbstractSet[str]:
+        return self.rhs.initial_names()
+
+
+class Cut:
+    def __init__(self) -> None:
+        pass
+
+    def __repr__(self) -> str:
+        return f"Cut()"
+
+    def __str__(self) -> str:
+        return f"~"
+
+    def __iter__(self) -> Iterator[Tuple[str, str]]:
+        if False:
+            yield
+
+    def __eq__(self, other: object) -> bool:
+        if not isinstance(other, Cut):
+            return NotImplemented
+        return True
+
+    def nullable_visit(self, rules: Dict[str, Rule]) -> bool:
+        return True
+
+    def initial_names(self) -> AbstractSet[str]:
+        return set()
+
+
+Plain = Union[Leaf, Group]
+Item = Union[Plain, Opt, Repeat, Lookahead, Rhs, Cut]
+RuleName = Tuple[str, str]
+MetaTuple = Tuple[str, Optional[str]]
+MetaList = List[MetaTuple]
+RuleList = List[Rule]
+NamedItemList = List[NamedItem]
+LookaheadOrCut = Union[Lookahead, Cut]
diff --git a/Tools/peg_generator/pegen/grammar_parser.py b/Tools/peg_generator/pegen/grammar_parser.py
new file mode 100644
index 0000000..c784cfd
--- /dev/null
+++ b/Tools/peg_generator/pegen/grammar_parser.py
@@ -0,0 +1,677 @@
+#!/usr/bin/env python3.8
+# @generated by pegen from ./Tools/peg_generator/pegen/metagrammar.gram
+
+import ast
+import sys
+import tokenize
+
+from typing import Any, Optional
+
+from pegen.parser import memoize, memoize_left_rec, logger, Parser
+from ast import literal_eval
+
+from pegen.grammar import (
+    Alt,
+    Cut,
+    Gather,
+    Group,
+    Item,
+    Lookahead,
+    LookaheadOrCut,
+    MetaTuple,
+    MetaList,
+    NameLeaf,
+    NamedItem,
+    NamedItemList,
+    NegativeLookahead,
+    Opt,
+    Plain,
+    PositiveLookahead,
+    Repeat0,
+    Repeat1,
+    Rhs,
+    Rule,
+    RuleList,
+    RuleName,
+    Grammar,
+    StringLeaf,
+)
+
+class GeneratedParser(Parser):
+
+    @memoize
+    def start(self) -> Optional[Grammar]:
+        # start: grammar $
+        mark = self.mark()
+        cut = False
+        if (
+            (grammar := self.grammar())
+            and
+            (endmarker := self.expect('ENDMARKER'))
+        ):
+            return grammar
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def grammar(self) -> Optional[Grammar]:
+        # grammar: metas rules | rules
+        mark = self.mark()
+        cut = False
+        if (
+            (metas := self.metas())
+            and
+            (rules := self.rules())
+        ):
+            return Grammar ( rules , metas )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (rules := self.rules())
+        ):
+            return Grammar ( rules , [ ] )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def metas(self) -> Optional[MetaList]:
+        # metas: meta metas | meta
+        mark = self.mark()
+        cut = False
+        if (
+            (meta := self.meta())
+            and
+            (metas := self.metas())
+        ):
+            return [ meta ] + metas
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (meta := self.meta())
+        ):
+            return [ meta ]
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def meta(self) -> Optional[MetaTuple]:
+        # meta: "@" NAME NEWLINE | "@" NAME NAME NEWLINE | "@" NAME STRING NEWLINE
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect("@"))
+            and
+            (name := self.name())
+            and
+            (newline := self.expect('NEWLINE'))
+        ):
+            return ( name . string , None )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect("@"))
+            and
+            (a := self.name())
+            and
+            (b := self.name())
+            and
+            (newline := self.expect('NEWLINE'))
+        ):
+            return ( a . string , b . string )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect("@"))
+            and
+            (name := self.name())
+            and
+            (string := self.string())
+            and
+            (newline := self.expect('NEWLINE'))
+        ):
+            return ( name . string , literal_eval ( string . string ) )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def rules(self) -> Optional[RuleList]:
+        # rules: rule rules | rule
+        mark = self.mark()
+        cut = False
+        if (
+            (rule := self.rule())
+            and
+            (rules := self.rules())
+        ):
+            return [ rule ] + rules
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (rule := self.rule())
+        ):
+            return [ rule ]
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def rule(self) -> Optional[Rule]:
+        # rule: rulename memoflag? ":" alts NEWLINE INDENT more_alts DEDENT | rulename memoflag? ":" NEWLINE INDENT more_alts DEDENT | rulename memoflag? ":" alts NEWLINE
+        mark = self.mark()
+        cut = False
+        if (
+            (rulename := self.rulename())
+            and
+            (opt := self.memoflag(),)
+            and
+            (literal := self.expect(":"))
+            and
+            (alts := self.alts())
+            and
+            (newline := self.expect('NEWLINE'))
+            and
+            (indent := self.expect('INDENT'))
+            and
+            (more_alts := self.more_alts())
+            and
+            (dedent := self.expect('DEDENT'))
+        ):
+            return Rule ( rulename [ 0 ] , rulename [ 1 ] , Rhs ( alts . alts + more_alts . alts ) , memo = opt )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (rulename := self.rulename())
+            and
+            (opt := self.memoflag(),)
+            and
+            (literal := self.expect(":"))
+            and
+            (newline := self.expect('NEWLINE'))
+            and
+            (indent := self.expect('INDENT'))
+            and
+            (more_alts := self.more_alts())
+            and
+            (dedent := self.expect('DEDENT'))
+        ):
+            return Rule ( rulename [ 0 ] , rulename [ 1 ] , more_alts , memo = opt )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (rulename := self.rulename())
+            and
+            (opt := self.memoflag(),)
+            and
+            (literal := self.expect(":"))
+            and
+            (alts := self.alts())
+            and
+            (newline := self.expect('NEWLINE'))
+        ):
+            return Rule ( rulename [ 0 ] , rulename [ 1 ] , alts , memo = opt )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def rulename(self) -> Optional[RuleName]:
+        # rulename: NAME '[' NAME '*' ']' | NAME '[' NAME ']' | NAME
+        mark = self.mark()
+        cut = False
+        if (
+            (name := self.name())
+            and
+            (literal := self.expect('['))
+            and
+            (type := self.name())
+            and
+            (literal_1 := self.expect('*'))
+            and
+            (literal_2 := self.expect(']'))
+        ):
+            return ( name . string , type . string + "*" )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (name := self.name())
+            and
+            (literal := self.expect('['))
+            and
+            (type := self.name())
+            and
+            (literal_1 := self.expect(']'))
+        ):
+            return ( name . string , type . string )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (name := self.name())
+        ):
+            return ( name . string , None )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def memoflag(self) -> Optional[str]:
+        # memoflag: '(' 'memo' ')'
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect('('))
+            and
+            (literal_1 := self.expect('memo'))
+            and
+            (literal_2 := self.expect(')'))
+        ):
+            return "memo"
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def alts(self) -> Optional[Rhs]:
+        # alts: alt "|" alts | alt
+        mark = self.mark()
+        cut = False
+        if (
+            (alt := self.alt())
+            and
+            (literal := self.expect("|"))
+            and
+            (alts := self.alts())
+        ):
+            return Rhs ( [ alt ] + alts . alts )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (alt := self.alt())
+        ):
+            return Rhs ( [ alt ] )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def more_alts(self) -> Optional[Rhs]:
+        # more_alts: "|" alts NEWLINE more_alts | "|" alts NEWLINE
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect("|"))
+            and
+            (alts := self.alts())
+            and
+            (newline := self.expect('NEWLINE'))
+            and
+            (more_alts := self.more_alts())
+        ):
+            return Rhs ( alts . alts + more_alts . alts )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect("|"))
+            and
+            (alts := self.alts())
+            and
+            (newline := self.expect('NEWLINE'))
+        ):
+            return Rhs ( alts . alts )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def alt(self) -> Optional[Alt]:
+        # alt: items '$' action | items '$' | items action | items
+        mark = self.mark()
+        cut = False
+        if (
+            (items := self.items())
+            and
+            (literal := self.expect('$'))
+            and
+            (action := self.action())
+        ):
+            return Alt ( items + [ NamedItem ( None , NameLeaf ( 'ENDMARKER' ) ) ] , action = action )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (items := self.items())
+            and
+            (literal := self.expect('$'))
+        ):
+            return Alt ( items + [ NamedItem ( None , NameLeaf ( 'ENDMARKER' ) ) ] , action = None )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (items := self.items())
+            and
+            (action := self.action())
+        ):
+            return Alt ( items , action = action )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (items := self.items())
+        ):
+            return Alt ( items , action = None )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def items(self) -> Optional[NamedItemList]:
+        # items: named_item items | named_item
+        mark = self.mark()
+        cut = False
+        if (
+            (named_item := self.named_item())
+            and
+            (items := self.items())
+        ):
+            return [ named_item ] + items
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (named_item := self.named_item())
+        ):
+            return [ named_item ]
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def named_item(self) -> Optional[NamedItem]:
+        # named_item: NAME '=' ~ item | item | lookahead
+        mark = self.mark()
+        cut = False
+        if (
+            (name := self.name())
+            and
+            (literal := self.expect('='))
+            and
+            (cut := True)
+            and
+            (item := self.item())
+        ):
+            return NamedItem ( name . string , item )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (item := self.item())
+        ):
+            return NamedItem ( None , item )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (it := self.lookahead())
+        ):
+            return NamedItem ( None , it )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def lookahead(self) -> Optional[LookaheadOrCut]:
+        # lookahead: '&' ~ atom | '!' ~ atom | '~'
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect('&'))
+            and
+            (cut := True)
+            and
+            (atom := self.atom())
+        ):
+            return PositiveLookahead ( atom )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect('!'))
+            and
+            (cut := True)
+            and
+            (atom := self.atom())
+        ):
+            return NegativeLookahead ( atom )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect('~'))
+        ):
+            return Cut ( )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def item(self) -> Optional[Item]:
+        # item: '[' ~ alts ']' | atom '?' | atom '*' | atom '+' | atom '.' atom '+' | atom
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect('['))
+            and
+            (cut := True)
+            and
+            (alts := self.alts())
+            and
+            (literal_1 := self.expect(']'))
+        ):
+            return Opt ( alts )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (atom := self.atom())
+            and
+            (literal := self.expect('?'))
+        ):
+            return Opt ( atom )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (atom := self.atom())
+            and
+            (literal := self.expect('*'))
+        ):
+            return Repeat0 ( atom )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (atom := self.atom())
+            and
+            (literal := self.expect('+'))
+        ):
+            return Repeat1 ( atom )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (sep := self.atom())
+            and
+            (literal := self.expect('.'))
+            and
+            (node := self.atom())
+            and
+            (literal_1 := self.expect('+'))
+        ):
+            return Gather ( sep , node )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (atom := self.atom())
+        ):
+            return atom
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def atom(self) -> Optional[Plain]:
+        # atom: '(' ~ alts ')' | NAME | STRING
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect('('))
+            and
+            (cut := True)
+            and
+            (alts := self.alts())
+            and
+            (literal_1 := self.expect(')'))
+        ):
+            return Group ( alts )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (name := self.name())
+        ):
+            return NameLeaf ( name . string )
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (string := self.string())
+        ):
+            return StringLeaf ( string . string )
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def action(self) -> Optional[str]:
+        # action: "{" ~ target_atoms "}"
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect("{"))
+            and
+            (cut := True)
+            and
+            (target_atoms := self.target_atoms())
+            and
+            (literal_1 := self.expect("}"))
+        ):
+            return target_atoms
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def target_atoms(self) -> Optional[str]:
+        # target_atoms: target_atom target_atoms | target_atom
+        mark = self.mark()
+        cut = False
+        if (
+            (target_atom := self.target_atom())
+            and
+            (target_atoms := self.target_atoms())
+        ):
+            return target_atom + " " + target_atoms
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (target_atom := self.target_atom())
+        ):
+            return target_atom
+        self.reset(mark)
+        if cut: return None
+        return None
+
+    @memoize
+    def target_atom(self) -> Optional[str]:
+        # target_atom: "{" ~ target_atoms "}" | NAME | NUMBER | STRING | "?" | ":" | !"}" OP
+        mark = self.mark()
+        cut = False
+        if (
+            (literal := self.expect("{"))
+            and
+            (cut := True)
+            and
+            (target_atoms := self.target_atoms())
+            and
+            (literal_1 := self.expect("}"))
+        ):
+            return "{" + target_atoms + "}"
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (name := self.name())
+        ):
+            return name . string
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (number := self.number())
+        ):
+            return number . string
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (string := self.string())
+        ):
+            return string . string
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect("?"))
+        ):
+            return "?"
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            (literal := self.expect(":"))
+        ):
+            return ":"
+        self.reset(mark)
+        if cut: return None
+        cut = False
+        if (
+            self.negative_lookahead(self.expect, "}")
+            and
+            (op := self.op())
+        ):
+            return op . string
+        self.reset(mark)
+        if cut: return None
+        return None
+
+
+if __name__ == '__main__':
+    from pegen.parser import simple_parser_main
+    simple_parser_main(GeneratedParser)
diff --git a/Tools/peg_generator/pegen/grammar_visualizer.py b/Tools/peg_generator/pegen/grammar_visualizer.py
new file mode 100644
index 0000000..7362ec5
--- /dev/null
+++ b/Tools/peg_generator/pegen/grammar_visualizer.py
@@ -0,0 +1,65 @@
+import argparse
+import sys
+
+from typing import Any, Iterator, Callable
+
+from pegen.build import build_parser
+from pegen.grammar import Grammar, Rule
+
+argparser = argparse.ArgumentParser(
+    prog="pegen", description="Pretty print the AST for a given PEG grammar"
+)
+argparser.add_argument("filename", help="Grammar description")
+
+
+class ASTGrammarPrinter:
+    def children(self, node: Rule) -> Iterator[Any]:
+        for value in node:
+            if isinstance(value, list):
+                yield from value
+            else:
+                yield value
+
+    def name(self, node: Rule) -> str:
+        if not list(self.children(node)):
+            return repr(node)
+        return node.__class__.__name__
+
+    def print_grammar_ast(self, grammar: Grammar, printer: Callable[..., None] = print) -> None:
+        for rule in grammar.rules.values():
+            printer(self.print_nodes_recursively(rule))
+
+    def print_nodes_recursively(self, node: Rule, prefix: str = "", istail: bool = True) -> str:
+
+        children = list(self.children(node))
+        value = self.name(node)
+
+        line = prefix + ("└──" if istail else "├──") + value + "\n"
+        sufix = "   " if istail else "│  "
+
+        if not children:
+            return line
+
+        *children, last = children
+        for child in children:
+            line += self.print_nodes_recursively(child, prefix + sufix, False)
+        line += self.print_nodes_recursively(last, prefix + sufix, True)
+
+        return line
+
+
+def main() -> None:
+    args = argparser.parse_args()
+
+    try:
+        grammar, parser, tokenizer = build_parser(args.filename)
+    except Exception as err:
+        print("ERROR: Failed to parse grammar file", file=sys.stderr)
+        sys.exit(1)
+
+    visitor = ASTGrammarPrinter()
+    visitor.print_grammar_ast(grammar)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/pegen/keywordgen.py b/Tools/peg_generator/pegen/keywordgen.py
new file mode 100644
index 0000000..fa57770
--- /dev/null
+++ b/Tools/peg_generator/pegen/keywordgen.py
@@ -0,0 +1,78 @@
+"""Generate Lib/keyword.py from the Grammar and Tokens files using pgen"""
+
+import argparse
+
+from .build import build_parser, generate_token_definitions
+from .c_generator import CParserGenerator
+
+TEMPLATE = r'''
+"""Keywords (from "Grammar/python.gram")
+
+This file is automatically generated; please don't muck it up!
+
+To update the symbols in this file, 'cd' to the top directory of
+the python source tree and run:
+
+    PYTHONPATH=Tools/peg_generator python3 -m pegen.keywordgen \
+        Grammar/Grammar \
+        Grammar/Tokens \
+        Lib/keyword.py
+
+Alternatively, you can run 'make regen-keyword'.
+"""
+
+__all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"]
+
+kwlist = [
+{keywords}
+]
+
+softkwlist = [
+{soft_keywords}
+]
+
+iskeyword = frozenset(kwlist).__contains__
+issoftkeyword = frozenset(softkwlist).__contains__
+'''.lstrip()
+
+EXTRA_KEYWORDS = ["async", "await"]
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description="Generate the Lib/keywords.py file from the grammar."
+    )
+    parser.add_argument(
+        "grammar", type=str, help="The file with the grammar definition in PEG format"
+    )
+    parser.add_argument(
+        "tokens_file",
+        type=argparse.FileType("r"),
+        help="The file with the token definitions"
+    )
+    parser.add_argument(
+        "keyword_file",
+        type=argparse.FileType("w"),
+        help="The path to write the keyword definitions",
+    )
+    args = parser.parse_args()
+
+    grammar, _, _ = build_parser(args.grammar)
+    with args.tokens_file as tok_file:
+        all_tokens, exact_tok, non_exact_tok = generate_token_definitions(tok_file)
+    gen: ParserGenerator = CParserGenerator(
+        grammar, all_tokens, exact_tok, non_exact_tok, file=None
+    )
+    gen.collect_todo()
+
+    with args.keyword_file as thefile:
+        all_keywords = sorted(list(gen.callmakervisitor.keyword_cache.keys()) + EXTRA_KEYWORDS)
+        all_soft_keywords = sorted(gen.callmakervisitor.soft_keywords)
+
+        keywords = "" if not all_keywords else "    " + ",\n    ".join(map(repr, all_keywords))
+        soft_keywords = "" if not all_soft_keywords else "    " + ",\n    ".join(map(repr, all_soft_keywords))
+        thefile.write(TEMPLATE.format(keywords=keywords, soft_keywords=soft_keywords))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/pegen/metagrammar.gram b/Tools/peg_generator/pegen/metagrammar.gram
new file mode 100644
index 0000000..f0c5ac3
--- /dev/null
+++ b/Tools/peg_generator/pegen/metagrammar.gram
@@ -0,0 +1,123 @@
+@subheader """\
+from ast import literal_eval
+
+from pegen.grammar import (
+    Alt,
+    Cut,
+    Gather,
+    Group,
+    Item,
+    Lookahead,
+    LookaheadOrCut,
+    MetaTuple,
+    MetaList,
+    NameLeaf,
+    NamedItem,
+    NamedItemList,
+    NegativeLookahead,
+    Opt,
+    Plain,
+    PositiveLookahead,
+    Repeat0,
+    Repeat1,
+    Rhs,
+    Rule,
+    RuleList,
+    RuleName,
+    Grammar,
+    StringLeaf,
+)
+"""
+
+start[Grammar]: grammar ENDMARKER { grammar }
+
+grammar[Grammar]:
+    | metas rules { Grammar(rules, metas) }
+    | rules { Grammar(rules, []) }
+
+metas[MetaList]:
+    | meta metas { [meta] + metas }
+    | meta { [meta] }
+
+meta[MetaTuple]:
+    | "@" NAME NEWLINE { (name.string, None) }
+    | "@" a=NAME b=NAME NEWLINE { (a.string, b.string) }
+    | "@" NAME STRING NEWLINE { (name.string, literal_eval(string.string)) }
+
+rules[RuleList]:
+    | rule rules { [rule] + rules }
+    | rule { [rule] }
+
+rule[Rule]:
+    | rulename memoflag? ":" alts NEWLINE INDENT more_alts DEDENT {
+          Rule(rulename[0], rulename[1], Rhs(alts.alts + more_alts.alts), memo=opt) }
+    | rulename memoflag? ":" NEWLINE INDENT more_alts DEDENT {
+          Rule(rulename[0], rulename[1], more_alts, memo=opt) }
+    | rulename memoflag? ":" alts NEWLINE { Rule(rulename[0], rulename[1], alts, memo=opt) }
+
+rulename[RuleName]:
+    | NAME '[' type=NAME '*' ']' { (name.string, type.string+"*") }
+    | NAME '[' type=NAME ']' { (name.string, type.string) }
+    | NAME { (name.string, None) }
+
+# In the future this may return something more complicated
+memoflag[str]:
+    | '(' 'memo' ')' { "memo" }
+
+alts[Rhs]:
+    | alt "|" alts { Rhs([alt] + alts.alts)}
+    | alt { Rhs([alt]) }
+
+more_alts[Rhs]:
+    | "|" alts NEWLINE more_alts { Rhs(alts.alts + more_alts.alts) }
+    | "|" alts NEWLINE { Rhs(alts.alts) }
+
+alt[Alt]:
+    | items '$' action { Alt(items + [NamedItem(None, NameLeaf('ENDMARKER'))], action=action) }
+    | items '$' { Alt(items + [NamedItem(None, NameLeaf('ENDMARKER'))], action=None) }
+    | items action { Alt(items, action=action) }
+    | items { Alt(items, action=None) }
+
+items[NamedItemList]:
+    | named_item items { [named_item] + items }
+    | named_item { [named_item] }
+
+named_item[NamedItem]:
+    | NAME '=' ~ item {NamedItem(name.string, item)}
+    | item {NamedItem(None, item)}
+    | it=lookahead {NamedItem(None, it)}
+
+lookahead[LookaheadOrCut]:
+    | '&' ~ atom {PositiveLookahead(atom)}
+    | '!' ~ atom {NegativeLookahead(atom)}
+    | '~' {Cut()}
+
+item[Item]:
+    | '[' ~ alts ']' {Opt(alts)}
+    |  atom '?' {Opt(atom)}
+    |  atom '*' {Repeat0(atom)}
+    |  atom '+' {Repeat1(atom)}
+    |  sep=atom '.' node=atom '+' {Gather(sep, node)}
+    |  atom {atom}
+
+atom[Plain]:
+    | '(' ~ alts ')' {Group(alts)}
+    | NAME {NameLeaf(name.string) }
+    | STRING {StringLeaf(string.string)}
+
+# Mini-grammar for the actions
+
+action[str]: "{" ~ target_atoms "}" { target_atoms }
+
+target_atoms[str]:
+    | target_atom target_atoms { target_atom + " " + target_atoms }
+    | target_atom { target_atom }
+
+target_atom[str]:
+    | "{" ~ target_atoms "}" { "{" + target_atoms + "}" }
+    | NAME { name.string }
+    | NUMBER { number.string }
+    | STRING { string.string }
+    | "?" { "?" }
+    | ":" { ":" }
+    | !"}" OP { op.string }
diff --git a/Tools/peg_generator/pegen/parser.py b/Tools/peg_generator/pegen/parser.py
new file mode 100644
index 0000000..16d954d
--- /dev/null
+++ b/Tools/peg_generator/pegen/parser.py
@@ -0,0 +1,310 @@
+import argparse
+import sys
+import time
+import token
+import tokenize
+import traceback
+
+from abc import abstractmethod
+from typing import Any, Callable, cast, Dict, Optional, Tuple, Type, TypeVar
+
+from pegen.tokenizer import exact_token_types
+from pegen.tokenizer import Mark
+from pegen.tokenizer import Tokenizer
+
+T = TypeVar("T")
+P = TypeVar("P", bound="Parser")
+F = TypeVar("F", bound=Callable[..., Any])
+
+
+def logger(method: F) -> F:
+    """For non-memoized functions that we want to be logged.
+
+    (In practice this is only non-leader left-recursive functions.)
+    """
+    method_name = method.__name__
+
+    def logger_wrapper(self: P, *args: object) -> T:
+        if not self._verbose:
+            return method(self, *args)
+        argsr = ",".join(repr(arg) for arg in args)
+        fill = "  " * self._level
+        print(f"{fill}{method_name}({argsr}) .... (looking at {self.showpeek()})")
+        self._level += 1
+        tree = method(self, *args)
+        self._level -= 1
+        print(f"{fill}... {method_name}({argsr}) --> {tree!s:.200}")
+        return tree
+
+    logger_wrapper.__wrapped__ = method  # type: ignore
+    return cast(F, logger_wrapper)
+
+
+def memoize(method: F) -> F:
+    """Memoize a symbol method."""
+    method_name = method.__name__
+
+    def memoize_wrapper(self: P, *args: object) -> T:
+        mark = self.mark()
+        key = mark, method_name, args
+        # Fast path: cache hit, and not verbose.
+        if key in self._cache and not self._verbose:
+            tree, endmark = self._cache[key]
+            self.reset(endmark)
+            return tree
+        # Slow path: no cache hit, or verbose.
+        verbose = self._verbose
+        argsr = ",".join(repr(arg) for arg in args)
+        fill = "  " * self._level
+        if key not in self._cache:
+            if verbose:
+                print(f"{fill}{method_name}({argsr}) ... (looking at {self.showpeek()})")
+            self._level += 1
+            tree = method(self, *args)
+            self._level -= 1
+            if verbose:
+                print(f"{fill}... {method_name}({argsr}) -> {tree!s:.200}")
+            endmark = self.mark()
+            self._cache[key] = tree, endmark
+        else:
+            tree, endmark = self._cache[key]
+            if verbose:
+                print(f"{fill}{method_name}({argsr}) -> {tree!s:.200}")
+            self.reset(endmark)
+        return tree
+
+    memoize_wrapper.__wrapped__ = method  # type: ignore
+    return cast(F, memoize_wrapper)
+
+
+def memoize_left_rec(method: Callable[[P], Optional[T]]) -> Callable[[P], Optional[T]]:
+    """Memoize a left-recursive symbol method."""
+    method_name = method.__name__
+
+    def memoize_left_rec_wrapper(self: P) -> Optional[T]:
+        mark = self.mark()
+        key = mark, method_name, ()
+        # Fast path: cache hit, and not verbose.
+        if key in self._cache and not self._verbose:
+            tree, endmark = self._cache[key]
+            self.reset(endmark)
+            return tree
+        # Slow path: no cache hit, or verbose.
+        verbose = self._verbose
+        fill = "  " * self._level
+        if key not in self._cache:
+            if verbose:
+                print(f"{fill}{method_name} ... (looking at {self.showpeek()})")
+            self._level += 1
+
+            # For left-recursive rules we manipulate the cache and
+            # loop until the rule shows no progress, then pick the
+            # previous result.  For an explanation why this works, see
+            # https://github.com/PhilippeSigaud/Pegged/wiki/Left-Recursion
+            # (But we use the memoization cache instead of a static
+            # variable; perhaps this is similar to a paper by Warth et al.
+            # (http://web.cs.ucla.edu/~todd/research/pub.php?id=pepm08).
+
+            # Prime the cache with a failure.
+            self._cache[key] = None, mark
+            lastresult, lastmark = None, mark
+            depth = 0
+            if verbose:
+                print(f"{fill}Recursive {method_name} at {mark} depth {depth}")
+
+            while True:
+                self.reset(mark)
+                result = method(self)
+                endmark = self.mark()
+                depth += 1
+                if verbose:
+                    print(
+                        f"{fill}Recursive {method_name} at {mark} depth {depth}: {result!s:.200} to {endmark}"
+                    )
+                if not result:
+                    if verbose:
+                        print(f"{fill}Fail with {lastresult!s:.200} to {lastmark}")
+                    break
+                if endmark <= lastmark:
+                    if verbose:
+                        print(f"{fill}Bailing with {lastresult!s:.200} to {lastmark}")
+                    break
+                self._cache[key] = lastresult, lastmark = result, endmark
+
+            self.reset(lastmark)
+            tree = lastresult
+
+            self._level -= 1
+            if verbose:
+                print(f"{fill}{method_name}() -> {tree!s:.200} [cached]")
+            if tree:
+                endmark = self.mark()
+            else:
+                endmark = mark
+                self.reset(endmark)
+            self._cache[key] = tree, endmark
+        else:
+            tree, endmark = self._cache[key]
+            if verbose:
+                print(f"{fill}{method_name}() -> {tree!s:.200} [fresh]")
+            if tree:
+                self.reset(endmark)
+        return tree
+
+    memoize_left_rec_wrapper.__wrapped__ = method  # type: ignore
+    return memoize_left_rec_wrapper
+
+
+class Parser:
+    """Parsing base class."""
+
+    def __init__(self, tokenizer: Tokenizer, *, verbose: bool = False):
+        self._tokenizer = tokenizer
+        self._verbose = verbose
+        self._level = 0
+        self._cache: Dict[Tuple[Mark, str, Tuple[Any, ...]], Tuple[Any, Mark]] = {}
+        # Pass through common tokenizer methods.
+        # TODO: Rename to _mark and _reset.
+        self.mark = self._tokenizer.mark
+        self.reset = self._tokenizer.reset
+
+    @abstractmethod
+    def start(self) -> Any:
+        pass
+
+    def showpeek(self) -> str:
+        tok = self._tokenizer.peek()
+        return f"{tok.start[0]}.{tok.start[1]}: {token.tok_name[tok.type]}:{tok.string!r}"
+
+    @memoize
+    def name(self) -> Optional[tokenize.TokenInfo]:
+        tok = self._tokenizer.peek()
+        if tok.type == token.NAME:
+            return self._tokenizer.getnext()
+        return None
+
+    @memoize
+    def number(self) -> Optional[tokenize.TokenInfo]:
+        tok = self._tokenizer.peek()
+        if tok.type == token.NUMBER:
+            return self._tokenizer.getnext()
+        return None
+
+    @memoize
+    def string(self) -> Optional[tokenize.TokenInfo]:
+        tok = self._tokenizer.peek()
+        if tok.type == token.STRING:
+            return self._tokenizer.getnext()
+        return None
+
+    @memoize
+    def op(self) -> Optional[tokenize.TokenInfo]:
+        tok = self._tokenizer.peek()
+        if tok.type == token.OP:
+            return self._tokenizer.getnext()
+        return None
+
+    @memoize
+    def expect(self, type: str) -> Optional[tokenize.TokenInfo]:
+        tok = self._tokenizer.peek()
+        if tok.string == type:
+            return self._tokenizer.getnext()
+        if type in exact_token_types:
+            if tok.type == exact_token_types[type]:
+                return self._tokenizer.getnext()
+        if type in token.__dict__:
+            if tok.type == token.__dict__[type]:
+                return self._tokenizer.getnext()
+        if tok.type == token.OP and tok.string == type:
+            return self._tokenizer.getnext()
+        return None
+
+    def positive_lookahead(self, func: Callable[..., T], *args: object) -> T:
+        mark = self.mark()
+        ok = func(*args)
+        self.reset(mark)
+        return ok
+
+    def negative_lookahead(self, func: Callable[..., object], *args: object) -> bool:
+        mark = self.mark()
+        ok = func(*args)
+        self.reset(mark)
+        return not ok
+
+    def make_syntax_error(self, filename: str = "<unknown>") -> SyntaxError:
+        tok = self._tokenizer.diagnose()
+        return SyntaxError(
+            "pegen parse failure", (filename, tok.start[0], 1 + tok.start[1], tok.line)
+        )
+
+
+def simple_parser_main(parser_class: Type[Parser]) -> None:
+    argparser = argparse.ArgumentParser()
+    argparser.add_argument(
+        "-v",
+        "--verbose",
+        action="count",
+        default=0,
+        help="Print timing stats; repeat for more debug output",
+    )
+    argparser.add_argument(
+        "-q", "--quiet", action="store_true", help="Don't print the parsed program"
+    )
+    argparser.add_argument("filename", help="Input file ('-' to use stdin)")
+
+    args = argparser.parse_args()
+    verbose = args.verbose
+    verbose_tokenizer = verbose >= 3
+    verbose_parser = verbose == 2 or verbose >= 4
+
+    t0 = time.time()
+
+    filename = args.filename
+    if filename == "" or filename == "-":
+        filename = "<stdin>"
+        file = sys.stdin
+    else:
+        file = open(args.filename)
+    try:
+        tokengen = tokenize.generate_tokens(file.readline)
+        tokenizer = Tokenizer(tokengen, verbose=verbose_tokenizer)
+        parser = parser_class(tokenizer, verbose=verbose_parser)
+        tree = parser.start()
+        try:
+            if file.isatty():
+                endpos = 0
+            else:
+                endpos = file.tell()
+        except IOError:
+            endpos = 0
+    finally:
+        if file is not sys.stdin:
+            file.close()
+
+    t1 = time.time()
+
+    if not tree:
+        err = parser.make_syntax_error(filename)
+        traceback.print_exception(err.__class__, err, None)
+        sys.exit(1)
+
+    if not args.quiet:
+        print(tree)
+
+    if verbose:
+        dt = t1 - t0
+        diag = tokenizer.diagnose()
+        nlines = diag.end[0]
+        if diag.type == token.ENDMARKER:
+            nlines -= 1
+        print(f"Total time: {dt:.3f} sec; {nlines} lines", end="")
+        if endpos:
+            print(f" ({endpos} bytes)", end="")
+        if dt:
+            print(f"; {nlines / dt:.0f} lines/sec")
+        else:
+            print()
+        print("Caches sizes:")
+        print(f"  token array : {len(tokenizer._tokens):10}")
+        print(f"        cache : {len(parser._cache):10}")
+        ## print_memstats()
diff --git a/Tools/peg_generator/pegen/parser_generator.py b/Tools/peg_generator/pegen/parser_generator.py
new file mode 100644
index 0000000..364eccb
--- /dev/null
+++ b/Tools/peg_generator/pegen/parser_generator.py
@@ -0,0 +1,209 @@
+import contextlib
+from abc import abstractmethod
+
+from typing import AbstractSet, Dict, IO, Iterator, List, Optional, Set, Text, Tuple
+
+from pegen import sccutils
+from pegen.grammar import (
+    Grammar,
+    Rule,
+    Rhs,
+    Alt,
+    NamedItem,
+    Plain,
+    NameLeaf,
+    Gather,
+)
+from pegen.grammar import GrammarError, GrammarVisitor
+
+
+class RuleCheckingVisitor(GrammarVisitor):
+    def __init__(self, rules: Dict[str, Rule], tokens: Dict[int, str]):
+        self.rules = rules
+        self.tokens = tokens
+
+    def visit_NameLeaf(self, node: NameLeaf) -> None:
+        if node.value not in self.rules and node.value not in self.tokens.values():
+            # TODO: Add line/col info to (leaf) nodes
+            raise GrammarError(f"Dangling reference to rule {node.value!r}")
+
+    def visit_NamedItem(self, node: NamedItem) -> None:
+        if node.name and node.name.startswith("_"):
+            raise GrammarError(f"Variable names cannot start with underscore: '{node.name}'")
+        self.visit(node.item)
+
+
+class ParserGenerator:
+
+    callmakervisitor: GrammarVisitor
+
+    def __init__(self, grammar: Grammar, tokens: Dict[int, str], file: Optional[IO[Text]]):
+        self.grammar = grammar
+        self.tokens = tokens
+        self.rules = grammar.rules
+        self.validate_rule_names()
+        if "trailer" not in grammar.metas and "start" not in self.rules:
+            raise GrammarError("Grammar without a trailer must have a 'start' rule")
+        checker = RuleCheckingVisitor(self.rules, self.tokens)
+        for rule in self.rules.values():
+            checker.visit(rule)
+        self.file = file
+        self.level = 0
+        compute_nullables(self.rules)
+        self.first_graph, self.first_sccs = compute_left_recursives(self.rules)
+        self.todo = self.rules.copy()  # Rules to generate
+        self.counter = 0  # For name_rule()/name_loop()
+        self.keyword_counter = 499  # For keyword_type()
+        self.all_rules: Dict[str, Rule] = {}  # Rules + temporal rules
+        self._local_variable_stack: List[List[str]] = []
+
+    def validate_rule_names(self) -> None:
+        for rule in self.rules:
+            if rule.startswith("_"):
+                raise GrammarError(f"Rule names cannot start with underscore: '{rule}'")
+
+    @contextlib.contextmanager
+    def local_variable_context(self) -> Iterator[None]:
+        self._local_variable_stack.append([])
+        yield
+        self._local_variable_stack.pop()
+
+    @property
+    def local_variable_names(self) -> List[str]:
+        return self._local_variable_stack[-1]
+
+    @abstractmethod
+    def generate(self, filename: str) -> None:
+        raise NotImplementedError
+
+    @contextlib.contextmanager
+    def indent(self) -> Iterator[None]:
+        self.level += 1
+        try:
+            yield
+        finally:
+            self.level -= 1
+
+    def print(self, *args: object) -> None:
+        if not args:
+            print(file=self.file)
+        else:
+            print("    " * self.level, end="", file=self.file)
+            print(*args, file=self.file)
+
+    def printblock(self, lines: str) -> None:
+        for line in lines.splitlines():
+            self.print(line)
+
+    def collect_todo(self) -> None:
+        done: Set[str] = set()
+        while True:
+            alltodo = list(self.todo)
+            self.all_rules.update(self.todo)
+            todo = [i for i in alltodo if i not in done]
+            if not todo:
+                break
+            for rulename in todo:
+                self.todo[rulename].collect_todo(self)
+            done = set(alltodo)
+
+    def keyword_type(self) -> int:
+        self.keyword_counter += 1
+        return self.keyword_counter
+
+    def name_node(self, rhs: Rhs) -> str:
+        self.counter += 1
+        name = f"_tmp_{self.counter}"  # TODO: Pick a nicer name.
+        self.todo[name] = Rule(name, None, rhs)
+        return name
+
+    def name_loop(self, node: Plain, is_repeat1: bool) -> str:
+        self.counter += 1
+        if is_repeat1:
+            prefix = "_loop1_"
+        else:
+            prefix = "_loop0_"
+        name = f"{prefix}{self.counter}"  # TODO: It's ugly to signal via the name.
+        self.todo[name] = Rule(name, None, Rhs([Alt([NamedItem(None, node)])]))
+        return name
+
+    def name_gather(self, node: Gather) -> str:
+        self.counter += 1
+        name = f"_gather_{self.counter}"
+        self.counter += 1
+        extra_function_name = f"_loop0_{self.counter}"
+        extra_function_alt = Alt(
+            [NamedItem(None, node.separator), NamedItem("elem", node.node)], action="elem",
+        )
+        self.todo[extra_function_name] = Rule(
+            extra_function_name, None, Rhs([extra_function_alt]),
+        )
+        alt = Alt([NamedItem("elem", node.node), NamedItem("seq", NameLeaf(extra_function_name))],)
+        self.todo[name] = Rule(name, None, Rhs([alt]),)
+        return name
+
+    def dedupe(self, name: str) -> str:
+        origname = name
+        counter = 0
+        while name in self.local_variable_names:
+            counter += 1
+            name = f"{origname}_{counter}"
+        self.local_variable_names.append(name)
+        return name
+
+
+def compute_nullables(rules: Dict[str, Rule]) -> None:
+    """Compute which rules in a grammar are nullable.
+
+    Thanks to TatSu (tatsu/leftrec.py) for inspiration.
+    """
+    for rule in rules.values():
+        rule.nullable_visit(rules)
+
+
+def compute_left_recursives(
+    rules: Dict[str, Rule]
+) -> Tuple[Dict[str, AbstractSet[str]], List[AbstractSet[str]]]:
+    graph = make_first_graph(rules)
+    sccs = list(sccutils.strongly_connected_components(graph.keys(), graph))
+    for scc in sccs:
+        if len(scc) > 1:
+            for name in scc:
+                rules[name].left_recursive = True
+            # Try to find a leader such that all cycles go through it.
+            leaders = set(scc)
+            for start in scc:
+                for cycle in sccutils.find_cycles_in_scc(graph, scc, start):
+                    # print("Cycle:", " -> ".join(cycle))
+                    leaders -= scc - set(cycle)
+                    if not leaders:
+                        raise ValueError(
+                            f"SCC {scc} has no leadership candidate (no element is included in all cycles)"
+                        )
+            # print("Leaders:", leaders)
+            leader = min(leaders)  # Pick an arbitrary leader from the candidates.
+            rules[leader].leader = True
+        else:
+            name = min(scc)  # The only element.
+            if name in graph[name]:
+                rules[name].left_recursive = True
+                rules[name].leader = True
+    return graph, sccs
+
+
+def make_first_graph(rules: Dict[str, Rule]) -> Dict[str, AbstractSet[str]]:
+    """Compute the graph of left-invocations.
+
+    There's an edge from A to B if A may invoke B at its initial
+    position.
+
+    Note that this requires the nullable flags to have been computed.
+    """
+    graph = {}
+    vertices: Set[str] = set()
+    for rulename, rhs in rules.items():
+        graph[rulename] = names = rhs.initial_names()
+        vertices |= names
+    for vertex in vertices:
+        graph.setdefault(vertex, set())
+    return graph
diff --git a/Tools/peg_generator/pegen/python_generator.py b/Tools/peg_generator/pegen/python_generator.py
new file mode 100644
index 0000000..b786de7
--- /dev/null
+++ b/Tools/peg_generator/pegen/python_generator.py
@@ -0,0 +1,241 @@
+import token
+from typing import Any, Dict, Optional, IO, Text, Tuple
+
+from pegen.grammar import (
+    Cut,
+    GrammarVisitor,
+    NameLeaf,
+    StringLeaf,
+    Rhs,
+    NamedItem,
+    Lookahead,
+    PositiveLookahead,
+    NegativeLookahead,
+    Opt,
+    Repeat0,
+    Repeat1,
+    Gather,
+    Group,
+    Rule,
+    Alt,
+)
+from pegen import grammar
+from pegen.parser_generator import ParserGenerator
+
+MODULE_PREFIX = """\
+#!/usr/bin/env python3.8
+# @generated by pegen from {filename}
+
+import ast
+import sys
+import tokenize
+
+from typing import Any, Optional
+
+from pegen.parser import memoize, memoize_left_rec, logger, Parser
+
+"""
+MODULE_SUFFIX = """
+
+if __name__ == '__main__':
+    from pegen.parser import simple_parser_main
+    simple_parser_main(GeneratedParser)
+"""
+
+
+class PythonCallMakerVisitor(GrammarVisitor):
+    def __init__(self, parser_generator: ParserGenerator):
+        self.gen = parser_generator
+        self.cache: Dict[Any, Any] = {}
+
+    def visit_NameLeaf(self, node: NameLeaf) -> Tuple[Optional[str], str]:
+        name = node.value
+        if name in ("NAME", "NUMBER", "STRING", "OP"):
+            name = name.lower()
+            return name, f"self.{name}()"
+        if name in ("NEWLINE", "DEDENT", "INDENT", "ENDMARKER", "ASYNC", "AWAIT"):
+            return name.lower(), f"self.expect({name!r})"
+        return name, f"self.{name}()"
+
+    def visit_StringLeaf(self, node: StringLeaf) -> Tuple[str, str]:
+        return "literal", f"self.expect({node.value})"
+
+    def visit_Rhs(self, node: Rhs) -> Tuple[Optional[str], str]:
+        if node in self.cache:
+            return self.cache[node]
+        if len(node.alts) == 1 and len(node.alts[0].items) == 1:
+            self.cache[node] = self.visit(node.alts[0].items[0])
+        else:
+            name = self.gen.name_node(node)
+            self.cache[node] = name, f"self.{name}()"
+        return self.cache[node]
+
+    def visit_NamedItem(self, node: NamedItem) -> Tuple[Optional[str], str]:
+        name, call = self.visit(node.item)
+        if node.name:
+            name = node.name
+        return name, call
+
+    def lookahead_call_helper(self, node: Lookahead) -> Tuple[str, str]:
+        name, call = self.visit(node.node)
+        head, tail = call.split("(", 1)
+        assert tail[-1] == ")"
+        tail = tail[:-1]
+        return head, tail
+
+    def visit_PositiveLookahead(self, node: PositiveLookahead) -> Tuple[None, str]:
+        head, tail = self.lookahead_call_helper(node)
+        return None, f"self.positive_lookahead({head}, {tail})"
+
+    def visit_NegativeLookahead(self, node: NegativeLookahead) -> Tuple[None, str]:
+        head, tail = self.lookahead_call_helper(node)
+        return None, f"self.negative_lookahead({head}, {tail})"
+
+    def visit_Opt(self, node: Opt) -> Tuple[str, str]:
+        name, call = self.visit(node.node)
+        # Note trailing comma (the call may already have one comma
+        # at the end, for example when rules have both repeat0 and optional
+        # markers, e.g: [rule*])
+        if call.endswith(","):
+            return "opt", call
+        else:
+            return "opt", f"{call},"
+
+    def visit_Repeat0(self, node: Repeat0) -> Tuple[str, str]:
+        if node in self.cache:
+            return self.cache[node]
+        name = self.gen.name_loop(node.node, False)
+        self.cache[node] = name, f"self.{name}(),"  # Also a trailing comma!
+        return self.cache[node]
+
+    def visit_Repeat1(self, node: Repeat1) -> Tuple[str, str]:
+        if node in self.cache:
+            return self.cache[node]
+        name = self.gen.name_loop(node.node, True)
+        self.cache[node] = name, f"self.{name}()"  # But no trailing comma here!
+        return self.cache[node]
+
+    def visit_Gather(self, node: Gather) -> Tuple[str, str]:
+        if node in self.cache:
+            return self.cache[node]
+        name = self.gen.name_gather(node)
+        self.cache[node] = name, f"self.{name}()"  # No trailing comma here either!
+        return self.cache[node]
+
+    def visit_Group(self, node: Group) -> Tuple[Optional[str], str]:
+        return self.visit(node.rhs)
+
+    def visit_Cut(self, node: Cut) -> Tuple[str, str]:
+        return "cut", "True"
+
+
+class PythonParserGenerator(ParserGenerator, GrammarVisitor):
+    def __init__(
+        self,
+        grammar: grammar.Grammar,
+        file: Optional[IO[Text]],
+        tokens: Dict[int, str] = token.tok_name,
+    ):
+        super().__init__(grammar, tokens, file)
+        self.callmakervisitor = PythonCallMakerVisitor(self)
+
+    def generate(self, filename: str) -> None:
+        header = self.grammar.metas.get("header", MODULE_PREFIX)
+        if header is not None:
+            self.print(header.rstrip("\n").format(filename=filename))
+        subheader = self.grammar.metas.get("subheader", "")
+        if subheader:
+            self.print(subheader.format(filename=filename))
+        self.print("class GeneratedParser(Parser):")
+        while self.todo:
+            for rulename, rule in list(self.todo.items()):
+                del self.todo[rulename]
+                self.print()
+                with self.indent():
+                    self.visit(rule)
+        trailer = self.grammar.metas.get("trailer", MODULE_SUFFIX)
+        if trailer is not None:
+            self.print(trailer.rstrip("\n"))
+
+    def visit_Rule(self, node: Rule) -> None:
+        is_loop = node.is_loop()
+        is_gather = node.is_gather()
+        rhs = node.flatten()
+        if node.left_recursive:
+            if node.leader:
+                self.print("@memoize_left_rec")
+            else:
+                # Non-leader rules in a cycle are not memoized,
+                # but they must still be logged.
+                self.print("@logger")
+        else:
+            self.print("@memoize")
+        node_type = node.type or "Any"
+        self.print(f"def {node.name}(self) -> Optional[{node_type}]:")
+        with self.indent():
+            self.print(f"# {node.name}: {rhs}")
+            if node.nullable:
+                self.print(f"# nullable={node.nullable}")
+            self.print("mark = self.mark()")
+            if is_loop:
+                self.print("children = []")
+            self.visit(rhs, is_loop=is_loop, is_gather=is_gather)
+            if is_loop:
+                self.print("return children")
+            else:
+                self.print("return None")
+
+    def visit_NamedItem(self, node: NamedItem) -> None:
+        name, call = self.callmakervisitor.visit(node.item)
+        if node.name:
+            name = node.name
+        if not name:
+            self.print(call)
+        else:
+            if name != "cut":
+                name = self.dedupe(name)
+            self.print(f"({name} := {call})")
+
+    def visit_Rhs(self, node: Rhs, is_loop: bool = False, is_gather: bool = False) -> None:
+        if is_loop:
+            assert len(node.alts) == 1
+        for alt in node.alts:
+            self.visit(alt, is_loop=is_loop, is_gather=is_gather)
+
+    def visit_Alt(self, node: Alt, is_loop: bool, is_gather: bool) -> None:
+        with self.local_variable_context():
+            self.print("cut = False")  # TODO: Only if needed.
+            if is_loop:
+                self.print("while (")
+            else:
+                self.print("if (")
+            with self.indent():
+                first = True
+                for item in node.items:
+                    if first:
+                        first = False
+                    else:
+                        self.print("and")
+                    self.visit(item)
+                    if is_gather:
+                        self.print("is not None")
+
+            self.print("):")
+            with self.indent():
+                action = node.action
+                if not action:
+                    if is_gather:
+                        assert len(self.local_variable_names) == 2
+                        action = (
+                            f"[{self.local_variable_names[0]}] + {self.local_variable_names[1]}"
+                        )
+                    else:
+                        action = f"[{', '.join(self.local_variable_names)}]"
+                if is_loop:
+                    self.print(f"children.append({action})")
+                    self.print(f"mark = self.mark()")
+                else:
+                    self.print(f"return {action}")
+            self.print("self.reset(mark)")
+            # Skip remaining alternatives if a cut was reached.
+            self.print("if cut: return None")  # TODO: Only if needed.
diff --git a/Tools/peg_generator/pegen/sccutils.py b/Tools/peg_generator/pegen/sccutils.py
new file mode 100644
index 0000000..1f0586b
--- /dev/null
+++ b/Tools/peg_generator/pegen/sccutils.py
@@ -0,0 +1,128 @@
+# Adapted from mypy (mypy/build.py) under the MIT license.
+
+from typing import *
+
+
+def strongly_connected_components(
+    vertices: AbstractSet[str], edges: Dict[str, AbstractSet[str]]
+) -> Iterator[AbstractSet[str]]:
+    """Compute Strongly Connected Components of a directed graph.
+
+    Args:
+      vertices: the labels for the vertices
+      edges: for each vertex, gives the target vertices of its outgoing edges
+
+    Returns:
+      An iterator yielding strongly connected components, each
+      represented as a set of vertices.  Each input vertex will occur
+      exactly once; vertices not part of a SCC are returned as
+      singleton sets.
+
+    From http://code.activestate.com/recipes/578507/.
+    """
+    identified: Set[str] = set()
+    stack: List[str] = []
+    index: Dict[str, int] = {}
+    boundaries: List[int] = []
+
+    def dfs(v: str) -> Iterator[Set[str]]:
+        index[v] = len(stack)
+        stack.append(v)
+        boundaries.append(index[v])
+
+        for w in edges[v]:
+            if w not in index:
+                yield from dfs(w)
+            elif w not in identified:
+                while index[w] < boundaries[-1]:
+                    boundaries.pop()
+
+        if boundaries[-1] == index[v]:
+            boundaries.pop()
+            scc = set(stack[index[v] :])
+            del stack[index[v] :]
+            identified.update(scc)
+            yield scc
+
+    for v in vertices:
+        if v not in index:
+            yield from dfs(v)
+
+
+def topsort(
+    data: Dict[AbstractSet[str], Set[AbstractSet[str]]]
+) -> Iterable[AbstractSet[AbstractSet[str]]]:
+    """Topological sort.
+
+    Args:
+      data: A map from SCCs (represented as frozen sets of strings) to
+            sets of SCCs, its dependencies.  NOTE: This data structure
+            is modified in place -- for normalization purposes,
+            self-dependencies are removed and entries representing
+            orphans are added.
+
+    Returns:
+      An iterator yielding sets of SCCs that have an equivalent
+      ordering.  NOTE: The algorithm doesn't care about the internal
+      structure of SCCs.
+
+    Example:
+      Suppose the input has the following structure:
+
+        {A: {B, C}, B: {D}, C: {D}}
+
+      This is normalized to:
+
+        {A: {B, C}, B: {D}, C: {D}, D: {}}
+
+      The algorithm will yield the following values:
+
+        {D}
+        {B, C}
+        {A}
+
+    From http://code.activestate.com/recipes/577413/.
+    """
+    # TODO: Use a faster algorithm?
+    for k, v in data.items():
+        v.discard(k)  # Ignore self dependencies.
+    for item in set.union(*data.values()) - set(data.keys()):
+        data[item] = set()
+    while True:
+        ready = {item for item, dep in data.items() if not dep}
+        if not ready:
+            break
+        yield ready
+        data = {item: (dep - ready) for item, dep in data.items() if item not in ready}
+    assert not data, "A cyclic dependency exists amongst %r" % data
+
+
+def find_cycles_in_scc(
+    graph: Dict[str, AbstractSet[str]], scc: AbstractSet[str], start: str
+) -> Iterable[List[str]]:
+    """Find cycles in SCC emanating from start.
+
+    Yields lists of the form ['A', 'B', 'C', 'A'], which means there's
+    a path from A -> B -> C -> A.  The first item is always the start
+    argument, but the last item may be another element, e.g.  ['A',
+    'B', 'C', 'B'] means there's a path from A to B and there's a
+    cycle from B to C and back.
+    """
+    # Basic input checks.
+    assert start in scc, (start, scc)
+    assert scc <= graph.keys(), scc - graph.keys()
+
+    # Reduce the graph to nodes in the SCC.
+    graph = {src: {dst for dst in dsts if dst in scc} for src, dsts in graph.items() if src in scc}
+    assert start in graph
+
+    # Recursive helper that yields cycles.
+    def dfs(node: str, path: List[str]) -> Iterator[List[str]]:
+        if node in path:
+            yield path + [node]
+            return
+        path = path + [node]  # TODO: Make this not quadratic.
+        for child in graph[node]:
+            yield from dfs(child, path)
+
+    yield from dfs(start, [])
diff --git a/Tools/peg_generator/pegen/testutil.py b/Tools/peg_generator/pegen/testutil.py
new file mode 100644
index 0000000..920d246
--- /dev/null
+++ b/Tools/peg_generator/pegen/testutil.py
@@ -0,0 +1,133 @@
+import importlib.util
+import io
+import os
+import pathlib
+import sys
+import textwrap
+import tokenize
+import token
+
+from typing import Any, cast, Dict, IO, Type, Final
+
+from pegen.build import compile_c_extension
+from pegen.c_generator import CParserGenerator
+from pegen.grammar import Grammar
+from pegen.grammar_parser import GeneratedParser as GrammarParser
+from pegen.parser import Parser
+from pegen.python_generator import PythonParserGenerator
+from pegen.tokenizer import Tokenizer
+
+ALL_TOKENS = token.tok_name
+EXACT_TOKENS = token.EXACT_TOKEN_TYPES  # type: ignore
+NON_EXACT_TOKENS = {
+    name for index, name in token.tok_name.items() if index not in EXACT_TOKENS.values()
+}
+
+
+def generate_parser(grammar: Grammar) -> Type[Parser]:
+    # Generate a parser.
+    out = io.StringIO()
+    genr = PythonParserGenerator(grammar, out)
+    genr.generate("<string>")
+
+    # Load the generated parser class.
+    ns: Dict[str, Any] = {}
+    exec(out.getvalue(), ns)
+    return ns["GeneratedParser"]
+
+
+def run_parser(file: IO[bytes], parser_class: Type[Parser], *, verbose: bool = False) -> Any:
+    # Run a parser on a file (stream).
+    tokenizer = Tokenizer(tokenize.generate_tokens(file.readline))  # type: ignore # typeshed issue #3515
+    parser = parser_class(tokenizer, verbose=verbose)
+    result = parser.start()
+    if result is None:
+        raise parser.make_syntax_error()
+    return result
+
+
+def parse_string(
+    source: str, parser_class: Type[Parser], *, dedent: bool = True, verbose: bool = False
+) -> Any:
+    # Run the parser on a string.
+    if dedent:
+        source = textwrap.dedent(source)
+    file = io.StringIO(source)
+    return run_parser(file, parser_class, verbose=verbose)  # type: ignore # typeshed issue #3515
+
+
+def make_parser(source: str) -> Type[Parser]:
+    # Combine parse_string() and generate_parser().
+    grammar = parse_string(source, GrammarParser)
+    return generate_parser(grammar)
+
+
+def import_file(full_name: str, path: str) -> Any:
+    """Import a python module from a path"""
+
+    spec = importlib.util.spec_from_file_location(full_name, path)
+    mod = importlib.util.module_from_spec(spec)
+
+    # We assume this is not None and has an exec_module() method.
+    # See https://docs.python.org/3/reference/import.html?highlight=exec_module#loading
+    loader = cast(Any, spec.loader)
+    loader.exec_module(mod)
+    return mod
+
+
+def generate_c_parser_source(grammar: Grammar) -> str:
+    out = io.StringIO()
+    genr = CParserGenerator(grammar, ALL_TOKENS, EXACT_TOKENS, NON_EXACT_TOKENS, out)
+    genr.generate("<string>")
+    return out.getvalue()
+
+
+def generate_parser_c_extension(
+    grammar: Grammar, path: pathlib.PurePath, debug: bool = False
+) -> Any:
+    """Generate a parser c extension for the given grammar in the given path
+
+    Returns a module object with a parse_string() method.
+    TODO: express that using a Protocol.
+    """
+    # Make sure that the working directory is empty: reusing non-empty temporary
+    # directories when generating extensions can lead to segmentation faults.
+    # Check issue #95 (https://github.com/gvanrossum/pegen/issues/95) for more
+    # context.
+    assert not os.listdir(path)
+    source = path / "parse.c"
+    with open(source, "w", encoding="utf-8") as file:
+        genr = CParserGenerator(
+            grammar, ALL_TOKENS, EXACT_TOKENS, NON_EXACT_TOKENS, file, debug=debug
+        )
+        genr.generate("parse.c")
+    compile_c_extension(str(source), build_dir=str(path))
+
+
+def print_memstats() -> bool:
+    MiB: Final = 2 ** 20
+    try:
+        import psutil  # type: ignore
+    except ImportError:
+        return False
+    print("Memory stats:")
+    process = psutil.Process()
+    meminfo = process.memory_info()
+    res = {}
+    res["rss"] = meminfo.rss / MiB
+    res["vms"] = meminfo.vms / MiB
+    if sys.platform == "win32":
+        res["maxrss"] = meminfo.peak_wset / MiB
+    else:
+        # See https://stackoverflow.com/questions/938733/total-memory-used-by-python-process
+        import resource  # Since it doesn't exist on Windows.
+
+        rusage = resource.getrusage(resource.RUSAGE_SELF)
+        if sys.platform == "darwin":
+            factor = 1
+        else:
+            factor = 1024  # Linux
+        res["maxrss"] = rusage.ru_maxrss * factor / MiB
+    for key, value in res.items():
+        print(f"  {key:12.12s}: {value:10.0f} MiB")
+    return True
diff --git a/Tools/peg_generator/pegen/tokenizer.py b/Tools/peg_generator/pegen/tokenizer.py
new file mode 100644
index 0000000..61a28ef
--- /dev/null
+++ b/Tools/peg_generator/pegen/tokenizer.py
@@ -0,0 +1,86 @@
+import token
+import tokenize
+from typing import List, Iterator
+
+Mark = int  # NewType('Mark', int)
+
+exact_token_types = token.EXACT_TOKEN_TYPES  # type: ignore
+
+
+def shorttok(tok: tokenize.TokenInfo) -> str:
+    return "%-25.25s" % f"{tok.start[0]}.{tok.start[1]}: {token.tok_name[tok.type]}:{tok.string!r}"
+
+
+class Tokenizer:
+    """Caching wrapper for the tokenize module.
+
+    This is pretty tied to Python's syntax.
+    """
+
+    _tokens: List[tokenize.TokenInfo]
+
+    def __init__(self, tokengen: Iterator[tokenize.TokenInfo], *, verbose: bool = False):
+        self._tokengen = tokengen
+        self._tokens = []
+        self._index = 0
+        self._verbose = verbose
+        if verbose:
+            self.report(False, False)
+
+    def getnext(self) -> tokenize.TokenInfo:
+        """Return the next token and updates the index."""
+        cached = True
+        while self._index == len(self._tokens):
+            tok = next(self._tokengen)
+            if tok.type in (tokenize.NL, tokenize.COMMENT):
+                continue
+            if tok.type == token.ERRORTOKEN and tok.string.isspace():
+                continue
+            self._tokens.append(tok)
+            cached = False
+        tok = self._tokens[self._index]
+        self._index += 1
+        if self._verbose:
+            self.report(cached, False)
+        return tok
+
+    def peek(self) -> tokenize.TokenInfo:
+        """Return the next token *without* updating the index."""
+        while self._index == len(self._tokens):
+            tok = next(self._tokengen)
+            if tok.type in (tokenize.NL, tokenize.COMMENT):
+                continue
+            if tok.type == token.ERRORTOKEN and tok.string.isspace():
+                continue
+            self._tokens.append(tok)
+        return self._tokens[self._index]
+
+    def diagnose(self) -> tokenize.TokenInfo:
+        if not self._tokens:
+            self.getnext()
+        return self._tokens[-1]
+
+    def mark(self) -> Mark:
+        return self._index
+
+    def reset(self, index: Mark) -> None:
+        if index == self._index:
+            return
+        assert 0 <= index <= len(self._tokens), (index, len(self._tokens))
+        old_index = self._index
+        self._index = index
+        if self._verbose:
+            self.report(True, index < old_index)
+
+    def report(self, cached: bool, back: bool) -> None:
+        if back:
+            fill = "-" * self._index + "-"
+        elif cached:
+            fill = "-" * self._index + ">"
+        else:
+            fill = "-" * self._index + "*"
+        if self._index == 0:
+            print(f"{fill} (Bof)")
+        else:
+            tok = self._tokens[self._index - 1]
+            print(f"{fill} {shorttok(tok)}")
diff --git a/Tools/peg_generator/pyproject.toml b/Tools/peg_generator/pyproject.toml
new file mode 100644
index 0000000..f69c5b5
--- /dev/null
+++ b/Tools/peg_generator/pyproject.toml
@@ -0,0 +1,9 @@
+[tool.black]
+line-length = 99
+target_version = ['py38']
+exclude = '''
+(
+          /pegen/grammar_parser.py   # generated file
+        | /test/test_data/           # test files
+)
+'''
diff --git a/Tools/peg_generator/requirements.pip b/Tools/peg_generator/requirements.pip
new file mode 100644
index 0000000..190b348
--- /dev/null
+++ b/Tools/peg_generator/requirements.pip
@@ -0,0 +1,2 @@
+memory-profiler==0.57.0
+psutil==5.7.0
diff --git a/Tools/peg_generator/scripts/__init__.py b/Tools/peg_generator/scripts/__init__.py
new file mode 100644
index 0000000..1e423f4
--- /dev/null
+++ b/Tools/peg_generator/scripts/__init__.py
@@ -0,0 +1 @@
+# This exists to let mypy find modules here
diff --git a/Tools/peg_generator/scripts/ast_timings.py b/Tools/peg_generator/scripts/ast_timings.py
new file mode 100644
index 0000000..ca25220
--- /dev/null
+++ b/Tools/peg_generator/scripts/ast_timings.py
@@ -0,0 +1,26 @@
+import ast
+import sys
+import time
+
+from pegen.testutil import print_memstats
+
+
+def main() -> None:
+    t0 = time.time()
+    for filename in sys.argv[1:]:
+        print(filename, end="\r")
+        try:
+            with open(filename) as file:
+                source = file.read()
+            tree = ast.parse(source, filename)
+        except Exception as err:
+            print(f"{filename}: {err.__class__.__name__}: {err}", file=sys.stderr)
+    tok = None
+    t1 = time.time()
+    dt = t1 - t0
+    print(f"Parsed in {dt:.3f} secs", file=sys.stderr)
+    print_memstats()
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/benchmark.py b/Tools/peg_generator/scripts/benchmark.py
new file mode 100644
index 0000000..af356be
--- /dev/null
+++ b/Tools/peg_generator/scripts/benchmark.py
@@ -0,0 +1,136 @@
+#!/usr/bin/env python3
+
+import argparse
+import ast
+import sys
+import os
+from time import time
+
+import _peg_parser
+
+try:
+    import memory_profiler
+except ModuleNotFoundError:
+    print("Please run `make venv` to create a virtual environment and install"
+          " all the dependencies, before running this script.")
+    sys.exit(1)
+
+sys.path.insert(0, os.getcwd())
+from scripts.test_parse_directory import parse_directory
+
+argparser = argparse.ArgumentParser(
+    prog="benchmark", description="Reproduce the various pegen benchmarks"
+)
+argparser.add_argument(
+    "--parser",
+    action="store",
+    choices=["new", "old"],
+    default="pegen",
+    help="Which parser to benchmark (default is pegen)",
+)
+argparser.add_argument(
+    "--target",
+    action="store",
+    choices=["xxl", "stdlib"],
+    default="xxl",
+    help="Which target to use for the benchmark (default is xxl.py)",
+)
+
+subcommands = argparser.add_subparsers(title="Benchmarks", dest="subcommand")
+command_compile = subcommands.add_parser(
+    "compile", help="Benchmark parsing and compiling to bytecode"
+)
+command_parse = subcommands.add_parser(
+    "parse", help="Benchmark parsing and generating an ast.AST"
+)
+command_notree = subcommands.add_parser(
+    "notree", help="Benchmark parsing and dumping the tree"
+)
+
+
+def benchmark(func):
+    def wrapper(*args):
+        times = list()
+        for _ in range(3):
+            start = time()
+            result = func(*args)
+            end = time()
+            times.append(end - start)
+        memory = memory_profiler.memory_usage((func, args))
+        print(f"{func.__name__}")
+        print(f"\tTime: {sum(times)/3:.3f} seconds on an average of 3 runs")
+        print(f"\tMemory: {max(memory)} MiB on an average of 3 runs")
+        return result
+
+    return wrapper
+
+
+@benchmark
+def time_compile(source, parser):
+    if parser == "old":
+        return _peg_parser.compile_string(
+            source,
+            oldparser=True,
+        )
+    else:
+        return _peg_parser.compile_string(source)
+
+
+@benchmark
+def time_parse(source, parser):
+    if parser == "old":
+        return _peg_parser.parse_string(source, oldparser=True)
+    else:
+        return _peg_parser.parse_string(source)
+
+
+@benchmark
+def time_notree(source, parser):
+    if parser == "old":
+        return _peg_parser.parse_string(source, oldparser=True, ast=False)
+    else:
+        return _peg_parser.parse_string(source, ast=False)
+
+
+def run_benchmark_xxl(subcommand, parser, source):
+    if subcommand == "compile":
+        time_compile(source, parser)
+    elif subcommand == "parse":
+        time_parse(source, parser)
+    elif subcommand == "notree":
+        time_notree(source, parser)
+
+
+def run_benchmark_stdlib(subcommand, parser):
+    modes = {"compile": 2, "parse": 1, "notree": 0}
+    for _ in range(3):
+        parse_directory(
+            "../../Lib",
+            verbose=False,
+            excluded_files=["*/bad*", "*/lib2to3/tests/data/*",],
+            tree_arg=0,
+            short=True,
+            mode=modes[subcommand],
+            oldparser=(parser == "old"),
+        )
+
+
+def main():
+    args = argparser.parse_args()
+    subcommand = args.subcommand
+    parser = args.parser
+    target = args.target
+
+    if subcommand is None:
+        argparser.error("A benchmark to run is required")
+
+    if target == "xxl":
+        with open(os.path.join("data", "xxl.py"), "r") as f:
+            source = f.read()
+            run_benchmark_xxl(subcommand, parser, source)
+    elif target == "stdlib":
+        run_benchmark_stdlib(subcommand, parser)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/download_pypi_packages.py b/Tools/peg_generator/scripts/download_pypi_packages.py
new file mode 100755
index 0000000..9874202
--- /dev/null
+++ b/Tools/peg_generator/scripts/download_pypi_packages.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python3.8
+
+import argparse
+import os
+import json
+
+from typing import Dict, Any
+from urllib.request import urlretrieve
+
+argparser = argparse.ArgumentParser(
+    prog="download_pypi_packages", description="Helper program to download PyPI packages",
+)
+argparser.add_argument(
+    "-n", "--number", type=int, default=100, help="Number of packages to download"
+)
+argparser.add_argument(
+    "-a", "--all", action="store_true", help="Download all packages listed in the json file"
+)
+
+
+def load_json(filename: str) -> Dict[Any, Any]:
+    with open(os.path.join("data", f"{filename}.json"), "r") as f:
+        j = json.loads(f.read())
+    return j
+
+
+def remove_json(filename: str) -> None:
+    path = os.path.join("data", f"{filename}.json")
+    os.remove(path)
+
+
+def download_package_json(package_name: str) -> None:
+    url = f"https://pypi.org/pypi/{package_name}/json"
+    urlretrieve(url, os.path.join("data", f"{package_name}.json"))
+
+
+def download_package_code(name: str, package_json: Dict[Any, Any]) -> None:
+    source_index = -1
+    for idx, url_info in enumerate(package_json["urls"]):
+        if url_info["python_version"] == "source":
+            source_index = idx
+            break
+    filename = package_json["urls"][source_index]["filename"]
+    url = package_json["urls"][source_index]["url"]
+    urlretrieve(url, os.path.join("data", "pypi", filename))
+
+
+def main() -> None:
+    args = argparser.parse_args()
+    number_packages = args.number
+    all_packages = args.all
+
+    top_pypi_packages = load_json("top-pypi-packages-365-days")
+    if all_packages:
+        top_pypi_packages = top_pypi_packages["rows"]
+    elif number_packages >= 0 and number_packages <= 4000:
+        top_pypi_packages = top_pypi_packages["rows"][:number_packages]
+    else:
+        raise AssertionError("Unknown value for NUMBER_OF_PACKAGES")
+
+    try:
+        os.mkdir(os.path.join("data", "pypi"))
+    except FileExistsError:
+        pass
+
+    for package in top_pypi_packages:
+        package_name = package["project"]
+
+        print(f"Downloading JSON Data for {package_name}... ", end="")
+        download_package_json(package_name)
+        print("Done")
+
+        package_json = load_json(package_name)
+        try:
+            print(f"Dowloading and compressing package {package_name} ... ", end="")
+            download_package_code(package_name, package_json)
+            print("Done")
+        except (IndexError, KeyError):
+            print(f"Could not locate source for {package_name}")
+            continue
+        finally:
+            remove_json(package_name)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/find_max_nesting.py b/Tools/peg_generator/scripts/find_max_nesting.py
new file mode 100755
index 0000000..f2fdd00
--- /dev/null
+++ b/Tools/peg_generator/scripts/find_max_nesting.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3.8
+"""Find the maximum amount of nesting for an expression that can be parsed
+without causing a parse error.
+
+Starting at the INITIAL_NESTING_DEPTH, an expression containing n parenthesis
+around a 0 is generated then tested with both the C and Python parsers. We
+continue incrementing the number of parenthesis by 10 until both parsers have
+failed. As soon as a single parser fails, we stop testing that parser.
+
+The grammar file, initial nesting size, and amount by which the nested size is
+incremented on each success can be controlled by changing the GRAMMAR_FILE,
+INITIAL_NESTING_DEPTH, or NESTED_INCR_AMT variables.
+
+Usage: python -m scripts.find_max_nesting
+"""
+import sys
+
+from _peg_parser import parse_string
+
+GRAMMAR_FILE = "data/python.gram"
+INITIAL_NESTING_DEPTH = 10
+NESTED_INCR_AMT = 10
+
+
+FAIL = "\033[91m"
+ENDC = "\033[0m"
+
+
+def check_nested_expr(nesting_depth: int) -> bool:
+    expr = f"{'(' * nesting_depth}0{')' * nesting_depth}"
+
+    try:
+        parse_string(expr)
+        print(f"Nesting depth of {nesting_depth} is successful")
+        return True
+    except Exception as err:
+        print(f"{FAIL}(Failed with nesting depth of {nesting_depth}{ENDC}")
+        print(f"{FAIL}\t{err}{ENDC}")
+        return False
+
+
+def main() -> None:
+    print(f"Testing {GRAMMAR_FILE} starting at nesting depth of {INITIAL_NESTING_DEPTH}...")
+
+    nesting_depth = INITIAL_NESTING_DEPTH
+    succeeded = True
+    while succeeded:
+        expr = f"{'(' * nesting_depth}0{')' * nesting_depth}"
+        if succeeded:
+            succeeded = check_nested_expr(nesting_depth)
+        nesting_depth += NESTED_INCR_AMT
+
+    sys.exit(1)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/grammar_grapher.py b/Tools/peg_generator/scripts/grammar_grapher.py
new file mode 100755
index 0000000..4afdbce
--- /dev/null
+++ b/Tools/peg_generator/scripts/grammar_grapher.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3.8
+
+""" Convert a grammar into a dot-file suitable for use with GraphViz
+
+    For example:
+        Generate the GraphViz file:
+        # scripts/grammar_grapher.py data/python.gram > python.gv
+
+        Then generate the graph...
+
+        # twopi python.gv -Tpng > python_twopi.png
+
+        or
+
+        # dot python.gv -Tpng > python_dot.png
+
+        NOTE: The _dot_ and _twopi_ tools seem to produce the most useful results.
+              The _circo_ tool is the worst of the bunch. Don't even bother.
+"""
+
+import argparse
+import sys
+
+from typing import Any, List
+
+sys.path.insert(0, ".")
+
+from pegen.build import build_parser
+from pegen.grammar import (
+    Alt,
+    Cut,
+    Grammar,
+    Group,
+    Leaf,
+    Lookahead,
+    Rule,
+    NameLeaf,
+    NamedItem,
+    Opt,
+    Repeat,
+    Rhs,
+)
+
+argparser = argparse.ArgumentParser(prog="graph_grammar", description="Graph a grammar tree",)
+argparser.add_argument(
+    "-s",
+    "--start",
+    choices=["exec", "eval", "single"],
+    default="exec",
+    help="Choose the grammar's start rule (exec, eval or single)",
+)
+argparser.add_argument("grammar_file", help="The grammar file to graph")
+
+
+def references_for_item(item: Any) -> List[Any]:
+    if isinstance(item, Alt):
+        return [_ref for _item in item.items for _ref in references_for_item(_item)]
+    elif isinstance(item, Cut):
+        return []
+    elif isinstance(item, Group):
+        return references_for_item(item.rhs)
+    elif isinstance(item, Lookahead):
+        return references_for_item(item.node)
+    elif isinstance(item, NamedItem):
+        return references_for_item(item.item)
+
+    # NOTE NameLeaf must be before Leaf
+    elif isinstance(item, NameLeaf):
+        if item.value == "ENDMARKER":
+            return []
+        return [item.value]
+    elif isinstance(item, Leaf):
+        return []
+
+    elif isinstance(item, Opt):
+        return references_for_item(item.node)
+    elif isinstance(item, Repeat):
+        return references_for_item(item.node)
+    elif isinstance(item, Rhs):
+        return [_ref for alt in item.alts for _ref in references_for_item(alt)]
+    elif isinstance(item, Rule):
+        return references_for_item(item.rhs)
+    else:
+        raise RuntimeError(f"Unknown item: {type(item)}")
+
+
+def main() -> None:
+    args = argparser.parse_args()
+
+    try:
+        grammar, parser, tokenizer = build_parser(args.grammar_file)
+    except Exception as err:
+        print("ERROR: Failed to parse grammar file", file=sys.stderr)
+        sys.exit(1)
+
+    references = {}
+    for name, rule in grammar.rules.items():
+        references[name] = set(references_for_item(rule))
+
+    # Flatten the start node if has only a single reference
+    root_node = {"exec": "file", "eval": "eval", "single": "interactive"}[args.start]
+
+    print("digraph g1 {")
+    print('\toverlap="scale";')  # Force twopi to scale the graph to avoid overlaps
+    print(f'\troot="{root_node}";')
+    print(f"\t{root_node} [color=green, shape=circle];")
+    for name, refs in references.items():
+        for ref in refs:
+            print(f"\t{name} -> {ref};")
+    print("}")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/joinstats.py b/Tools/peg_generator/scripts/joinstats.py
new file mode 100644
index 0000000..b2d762b
--- /dev/null
+++ b/Tools/peg_generator/scripts/joinstats.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3.8
+
+"""Produce a report about the most-memoable types.
+
+Reads a list of statistics from stdin.  Each line must be two numbers,
+being a type and a count.  We then read some other files and produce a
+list sorted by most frequent type.
+
+There should also be something to recognize left-recursive rules.
+"""
+
+import os
+import re
+import sys
+
+from typing import Dict
+
+reporoot = os.path.dirname(os.path.dirname(__file__))
+parse_c = os.path.join(reporoot, "peg_extension", "parse.c")
+
+
+class TypeMapper:
+    """State used to map types to names."""
+
+    def __init__(self, filename: str) -> None:
+        self.table: Dict[int, str] = {}
+        with open(filename) as f:
+            for line in f:
+                match = re.match(r"#define (\w+)_type (\d+)", line)
+                if match:
+                    name, type = match.groups()
+                    if "left" in line.lower():
+                        name += " // Left-recursive"
+                    self.table[int(type)] = name
+
+    def lookup(self, type: int) -> str:
+        return self.table.get(type, str(type))
+
+
+def main() -> None:
+    mapper = TypeMapper(parse_c)
+    table = []
+    filename = sys.argv[1]
+    with open(filename) as f:
+        for lineno, line in enumerate(f, 1):
+            line = line.strip()
+            if not line or line.startswith("#"):
+                continue
+            parts = line.split()
+            # Extra fields ignored
+            if len(parts) < 2:
+                print(f"{lineno}: bad input ({line!r})")
+                continue
+            try:
+                type, count = map(int, parts[:2])
+            except ValueError as err:
+                print(f"{lineno}: non-integer input ({line!r})")
+                continue
+            table.append((type, count))
+    table.sort(key=lambda values: -values[1])
+    for type, count in table:
+        print(f"{type:4d} {count:9d} {mapper.lookup(type)}")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/show_parse.py b/Tools/peg_generator/scripts/show_parse.py
new file mode 100755
index 0000000..b4ee5a1
--- /dev/null
+++ b/Tools/peg_generator/scripts/show_parse.py
@@ -0,0 +1,121 @@
+#!/usr/bin/env python3.8
+
+"""Show the parse tree for a given program, nicely formatted.
+
+Example:
+
+$ scripts/show_parse.py a+b
+Module(
+    body=[
+        Expr(
+            value=BinOp(
+                left=Name(id="a", ctx=Load()), op=Add(), right=Name(id="b", ctx=Load())
+            )
+        )
+    ],
+    type_ignores=[],
+)
+$
+
+Use -v to show line numbers and column offsets.
+
+The formatting is done using black.  You can also import this module
+and call one of its functions.
+"""
+
+import argparse
+import ast
+import difflib
+import os
+import sys
+import tempfile
+
+import _peg_parser
+
+from typing import List
+
+sys.path.insert(0, os.getcwd())
+from pegen.ast_dump import ast_dump
+
+parser = argparse.ArgumentParser()
+parser.add_argument(
+    "-d", "--diff", action="store_true", help="show diff between grammar and ast (requires -g)"
+)
+parser.add_argument(
+    "-p",
+    "--parser",
+    choices=["new", "old"],
+    default="new",
+    help="choose the parser to use"
+)
+parser.add_argument(
+    "-m",
+    "--multiline",
+    action="store_true",
+    help="concatenate program arguments using newline instead of space",
+)
+parser.add_argument("-v", "--verbose", action="store_true", help="show line/column numbers")
+parser.add_argument("program", nargs="+", help="program to parse (will be concatenated)")
+
+
+def format_tree(tree: ast.AST, verbose: bool = False) -> str:
+    with tempfile.NamedTemporaryFile("w+") as tf:
+        tf.write(ast_dump(tree, include_attributes=verbose))
+        tf.write("\n")
+        tf.flush()
+        cmd = f"black -q {tf.name}"
+        sts = os.system(cmd)
+        if sts:
+            raise RuntimeError(f"Command {cmd!r} failed with status 0x{sts:x}")
+        tf.seek(0)
+        return tf.read()
+
+
+def diff_trees(a: ast.AST, b: ast.AST, verbose: bool = False) -> List[str]:
+    sa = format_tree(a, verbose)
+    sb = format_tree(b, verbose)
+    la = sa.splitlines()
+    lb = sb.splitlines()
+    return list(difflib.unified_diff(la, lb, "a", "b", lineterm=""))
+
+
+def show_parse(source: str, verbose: bool = False) -> str:
+    tree = _peg_parser.parse_string(source, oldparser=True)
+    return format_tree(tree, verbose).rstrip("\n")
+
+
+def print_parse(source: str, verbose: bool = False) -> None:
+    print(show_parse(source, verbose))
+
+
+def main() -> None:
+    args = parser.parse_args()
+    new_parser = args.parser == "new"
+    if args.multiline:
+        sep = "\n"
+    else:
+        sep = " "
+    program = sep.join(args.program)
+    if new_parser:
+        tree = _peg_parser.parse_string(program)
+
+        if args.diff:
+            a = _peg_parser.parse_string(program, oldparser=True)
+            b = tree
+            diff = diff_trees(a, b, args.verbose)
+            if diff:
+                for line in diff:
+                    print(line)
+            else:
+                print("# Trees are the same")
+        else:
+            print("# Parsed using the new parser")
+            print(format_tree(tree, args.verbose))
+    else:
+        tree = _peg_parser.parse_string(program, oldparser=True)
+        print("# Parsed using the old parser")
+        print(format_tree(tree, args.verbose))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/test_parse_directory.py b/Tools/peg_generator/scripts/test_parse_directory.py
new file mode 100755
index 0000000..6dfdbb9
--- /dev/null
+++ b/Tools/peg_generator/scripts/test_parse_directory.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3.8
+
+import argparse
+import ast
+import os
+import sys
+import time
+import tokenize
+import _peg_parser
+from glob import glob, escape
+from pathlib import PurePath
+
+from typing import List, Optional, Any, Tuple
+
+sys.path.insert(0, os.getcwd())
+from pegen.ast_dump import ast_dump
+from pegen.testutil import print_memstats
+from scripts import show_parse
+
+SUCCESS = "\033[92m"
+FAIL = "\033[91m"
+ENDC = "\033[0m"
+
+COMPILE = 2
+PARSE = 1
+NOTREE = 0
+
+argparser = argparse.ArgumentParser(
+    prog="test_parse_directory",
+    description="Helper program to test directories or files for pegen",
+)
+argparser.add_argument("-d", "--directory", help="Directory path containing files to test")
+argparser.add_argument(
+    "-e", "--exclude", action="append", default=[], help="Glob(s) for matching files to exclude"
+)
+argparser.add_argument(
+    "-s", "--short", action="store_true", help="Only show errors, in a more Emacs-friendly format"
+)
+argparser.add_argument(
+    "-v", "--verbose", action="store_true", help="Display detailed errors for failures"
+)
+argparser.add_argument(
+    "-t", "--tree", action="count", help="Compare parse tree to official AST", default=0
+)
+
+
+def report_status(
+    succeeded: bool,
+    file: str,
+    verbose: bool,
+    error: Optional[Exception] = None,
+    short: bool = False,
+) -> None:
+    if short and succeeded:
+        return
+
+    if succeeded is True:
+        status = "OK"
+        COLOR = SUCCESS
+    else:
+        status = "Fail"
+        COLOR = FAIL
+
+    if short:
+        lineno = 0
+        offset = 0
+        if isinstance(error, SyntaxError):
+            lineno = error.lineno or 1
+            offset = error.offset or 1
+            message = error.args[0]
+        else:
+            message = f"{error.__class__.__name__}: {error}"
+        print(f"{file}:{lineno}:{offset}: {message}")
+    else:
+        print(f"{COLOR}{file:60} {status}{ENDC}")
+
+        if error and verbose:
+            print(f"  {str(error.__class__.__name__)}: {error}")
+
+
+def compare_trees(
+    actual_tree: ast.AST, file: str, verbose: bool, include_attributes: bool = False,
+) -> int:
+    with open(file) as f:
+        expected_tree = _peg_parser.parse_string(f.read(), oldparser=True)
+
+    expected_text = ast_dump(expected_tree, include_attributes=include_attributes)
+    actual_text = ast_dump(actual_tree, include_attributes=include_attributes)
+    if actual_text == expected_text:
+        if verbose:
+            print("Tree for {file}:")
+            print(show_parse.format_tree(actual_tree, include_attributes))
+        return 0
+
+    print(f"Diffing ASTs for {file} ...")
+
+    expected = show_parse.format_tree(expected_tree, include_attributes)
+    actual = show_parse.format_tree(actual_tree, include_attributes)
+
+    if verbose:
+        print("Expected for {file}:")
+        print(expected)
+        print("Actual for {file}:")
+        print(actual)
+        print(f"Diff for {file}:")
+
+    diff = show_parse.diff_trees(expected_tree, actual_tree, include_attributes)
+    for line in diff:
+        print(line)
+
+    return 1
+
+
+def parse_file(source: str, file: str, mode: int, oldparser: bool) -> Tuple[Any, float]:
+    t0 = time.time()
+    if mode == COMPILE:
+        result = _peg_parser.compile_string(
+            source,
+            filename=file,
+            oldparser=oldparser,
+        )
+    else:
+        result = _peg_parser.parse_string(
+            source,
+            filename=file,
+            oldparser=oldparser,
+            ast=(mode == PARSE),
+        )
+    t1 = time.time()
+    return result, t1 - t0
+
+
+def is_parsing_failure(source: str) -> bool:
+    try:
+        _peg_parser.parse_string(source, mode="exec", oldparser=True)
+    except SyntaxError:
+        return False
+    return True
+
+
+def generate_time_stats(files, total_seconds) -> None:
+    total_files = len(files)
+    total_bytes = 0
+    total_lines = 0
+    for file in files:
+        # Count lines and bytes separately
+        with open(file, "rb") as f:
+            total_lines += sum(1 for _ in f)
+            total_bytes += f.tell()
+
+    print(
+        f"Checked {total_files:,} files, {total_lines:,} lines,",
+        f"{total_bytes:,} bytes in {total_seconds:,.3f} seconds.",
+    )
+    if total_seconds > 0:
+        print(
+            f"That's {total_lines / total_seconds :,.0f} lines/sec,",
+            f"or {total_bytes / total_seconds :,.0f} bytes/sec.",
+        )
+
+
+def parse_directory(
+    directory: str,
+    verbose: bool,
+    excluded_files: List[str],
+    tree_arg: int,
+    short: bool,
+    mode: int,
+    oldparser: bool,
+) -> int:
+    if tree_arg:
+        assert mode == PARSE, "Mode should be 1 (parse), when comparing the generated trees"
+
+    if oldparser and tree_arg:
+        print("Cannot specify tree argument with the cpython parser.", file=sys.stderr)
+        return 1
+
+    # For a given directory, traverse files and attempt to parse each one
+    # - Output success/failure for each file
+    errors = 0
+    files = []
+    trees = {}  # Trees to compare (after everything else is done)
+    total_seconds = 0
+
+    for file in sorted(glob(os.path.join(escape(directory), f"**/*.py"), recursive=True)):
+        # Only attempt to parse Python files and files that are not excluded
+        if any(PurePath(file).match(pattern) for pattern in excluded_files):
+            continue
+
+        with tokenize.open(file) as f:
+            source = f.read()
+
+        try:
+            result, dt = parse_file(source, file, mode, oldparser)
+            total_seconds += dt
+            if tree_arg:
+                trees[file] = result
+            report_status(succeeded=True, file=file, verbose=verbose, short=short)
+        except SyntaxError as error:
+            if is_parsing_failure(source):
+                print(f"File {file} cannot be parsed by either parser.")
+            else:
+                report_status(
+                    succeeded=False, file=file, verbose=verbose, error=error, short=short
+                )
+                errors += 1
+        files.append(file)
+
+    t1 = time.time()
+
+    generate_time_stats(files, total_seconds)
+    if short:
+        print_memstats()
+
+    if errors:
+        print(f"Encountered {errors} failures.", file=sys.stderr)
+
+    # Compare trees (the dict is empty unless -t is given)
+    compare_trees_errors = 0
+    for file, tree in trees.items():
+        if not short:
+            print("Comparing ASTs for", file)
+        if compare_trees(tree, file, verbose, tree_arg >= 2) == 1:
+            compare_trees_errors += 1
+
+    if errors or compare_trees_errors:
+        return 1
+
+    return 0
+
+
+def main() -> None:
+    args = argparser.parse_args()
+    directory = args.directory
+    verbose = args.verbose
+    excluded_files = args.exclude
+    tree = args.tree
+    short = args.short
+    mode = 1 if args.tree else 2
+    sys.exit(
+        parse_directory(
+            directory,
+            verbose,
+            excluded_files,
+            tree,
+            short,
+            mode,
+            oldparser=False,
+        )
+    )
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/peg_generator/scripts/test_pypi_packages.py b/Tools/peg_generator/scripts/test_pypi_packages.py
new file mode 100755
index 0000000..f014753
--- /dev/null
+++ b/Tools/peg_generator/scripts/test_pypi_packages.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3.8
+
+import argparse
+import os
+import glob
+import tarfile
+import zipfile
+import shutil
+import pathlib
+import sys
+
+from typing import Generator, Any
+
+sys.path.insert(0, ".")
+
+from pegen import build
+from scripts import test_parse_directory
+
+HERE = pathlib.Path(__file__).resolve().parent
+
+argparser = argparse.ArgumentParser(
+    prog="test_pypi_packages", description="Helper program to test parsing PyPI packages",
+)
+argparser.add_argument(
+    "-t", "--tree", action="count", help="Compare parse tree to official AST", default=0
+)
+
+
+def get_packages() -> Generator[str, None, None]:
+    all_packages = (
+        glob.glob("./data/pypi/*.tar.gz")
+        + glob.glob("./data/pypi/*.zip")
+        + glob.glob("./data/pypi/*.tgz")
+    )
+    for package in all_packages:
+        yield package
+
+
+def extract_files(filename: str) -> None:
+    savedir = os.path.join("data", "pypi")
+    if tarfile.is_tarfile(filename):
+        tarfile.open(filename).extractall(savedir)
+    elif zipfile.is_zipfile(filename):
+        zipfile.ZipFile(filename).extractall(savedir)
+    else:
+        raise ValueError(f"Could not identify type of compressed file {filename}")
+
+
+def find_dirname(package_name: str) -> str:
+    for name in os.listdir(os.path.join("data", "pypi")):
+        full_path = os.path.join("data", "pypi", name)
+        if os.path.isdir(full_path) and name in package_name:
+            return full_path
+    assert False  # This is to fix mypy, should never be reached
+
+
+def run_tests(dirname: str, tree: int) -> int:
+    return test_parse_directory.parse_directory(
+        dirname,
+        verbose=False,
+        excluded_files=[],
+        tree_arg=tree,
+        short=True,
+        mode=1 if tree else 0,
+        parser="pegen",
+    )
+
+
+def main() -> None:
+    args = argparser.parse_args()
+    tree = args.tree
+
+    for package in get_packages():
+        print(f"Extracting files from {package}... ", end="")
+        try:
+            extract_files(package)
+            print("Done")
+        except ValueError as e:
+            print(e)
+            continue
+
+        print(f"Trying to parse all python files ... ")
+        dirname = find_dirname(package)
+        status = run_tests(dirname, tree)
+        if status == 0:
+            shutil.rmtree(dirname)
+        else:
+            print(f"Failed to parse {dirname}")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/pynche/PyncheWidget.py b/Tools/pynche/PyncheWidget.py
index 364f22b..ef12198 100644
--- a/Tools/pynche/PyncheWidget.py
+++ b/Tools/pynche/PyncheWidget.py
@@ -281,10 +281,14 @@
         self.__window.deiconify()
 
     def __eq__(self, other):
-        return self.__menutext == other.__menutext
+        if isinstance(self, PopupViewer):
+            return self.__menutext == other.__menutext
+        return NotImplemented
 
     def __lt__(self, other):
-        return self.__menutext < other.__menutext
+        if isinstance(self, PopupViewer):
+            return self.__menutext < other.__menutext
+        return NotImplemented
 
 
 def make_view_popups(switchboard, root, extrapath):
diff --git a/Tools/pynche/StripViewer.py b/Tools/pynche/StripViewer.py
index 2b0ede3..6914ca9 100644
--- a/Tools/pynche/StripViewer.py
+++ b/Tools/pynche/StripViewer.py
@@ -371,22 +371,6 @@
                              command=self.__togglehex)
         hexbtn.grid(row=1, column=1, sticky=W)
 
-        # XXX: ignore this feature for now; it doesn't work quite right yet
-
-##        gentypevar = self.__gentypevar = IntVar()
-##        self.__variations = Radiobutton(frame,
-##                                        text='Variations',
-##                                        variable=gentypevar,
-##                                        value=0,
-##                                        command=self.__togglegentype)
-##        self.__variations.grid(row=0, column=1, sticky=W)
-##        self.__constants = Radiobutton(frame,
-##                                       text='Constants',
-##                                       variable=gentypevar,
-##                                       value=1,
-##                                       command=self.__togglegentype)
-##        self.__constants.grid(row=1, column=1, sticky=W)
-
         # create the white button
         whitebtn = Button(frame2,
                           text='White',
@@ -402,26 +386,6 @@
         red, green, blue = self.__sb.current_rgb()
         self.update_yourself(red, green, blue)
 
-##    def __togglegentype(self, event=None):
-##        which = self.__gentypevar.get()
-##        if which == 0:
-##            self.__reds.set(label='Red Variations',
-##                            generator=constant_cyan_generator)
-##            self.__greens.set(label='Green Variations',
-##                              generator=constant_magenta_generator)
-##            self.__blues.set(label='Blue Variations',
-##                             generator=constant_yellow_generator)
-##        elif which == 1:
-##            self.__reds.set(label='Red Constant',
-##                            generator=constant_red_generator)
-##            self.__greens.set(label='Green Constant',
-##                              generator=constant_green_generator)
-##            self.__blues.set(label='Blue Constant',
-##                             generator=constant_blue_generator)
-##        else:
-##            assert 0
-##        self.__sb.update_views_current()
-
     def __toblack(self, event=None):
         self.__sb.update_views(0, 0, 0)
 
diff --git a/Tools/scripts/README b/Tools/scripts/README
index d4ac2ad..7fc51a1 100644
--- a/Tools/scripts/README
+++ b/Tools/scripts/README
@@ -7,7 +7,6 @@
 analyze_dxp.py            Analyzes the result of sys.getdxp()
 byext.py                  Print lines/words/chars stats of files by extension
 byteyears.py              Print product of a file's size and age
-checkpyc.py               Check presence and validity of ".pyc" files
 cleanfuture.py            Fix redundant Python __future__ statements
 combinerefs.py            A helper for analyzing PYTHONDUMPREFS output
 copytime.py               Copy one file's atime and mtime to another
@@ -30,7 +29,6 @@
 get-remote-certificate.py Fetch the certificate that the server(s) are providing in PEM form
 google.py                 Open a webbrowser with Google
 gprof2html.py             Transform gprof(1) output into useful HTML
-h2py.py                   Translate #define's into Python assignments
 highlight.py              Python syntax highlighting with HTML output
 idle3                     Main program to start IDLE
 ifdef.py                  Remove #if(n)def groups from C sources
diff --git a/Tools/scripts/checkpyc.py b/Tools/scripts/checkpyc.py
deleted file mode 100755
index bbaa3d1..0000000
--- a/Tools/scripts/checkpyc.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#! /usr/bin/env python3
-# Check that all ".pyc" files exist and are up-to-date
-# Uses module 'os'
-
-import sys
-import os
-from stat import ST_MTIME
-import importlib.util
-
-# PEP 3147 compatibility (PYC Repository Directories)
-cache_from_source = (importlib.util.cache_from_source if sys.implementation.cache_tag
-                     else lambda path: path + 'c')
-
-
-def main():
-    if len(sys.argv) > 1:
-        verbose = (sys.argv[1] == '-v')
-        silent = (sys.argv[1] == '-s')
-    else:
-        verbose = silent = False
-    MAGIC = importlib.util.MAGIC_NUMBER
-    if not silent:
-        print('Using MAGIC word', repr(MAGIC))
-    for dirname in sys.path:
-        try:
-            names = os.listdir(dirname)
-        except OSError:
-            print('Cannot list directory', repr(dirname))
-            continue
-        if not silent:
-            print('Checking ', repr(dirname), '...')
-        for name in sorted(names):
-            if name.endswith('.py'):
-                name = os.path.join(dirname, name)
-                try:
-                    st = os.stat(name)
-                except OSError:
-                    print('Cannot stat', repr(name))
-                    continue
-                if verbose:
-                    print('Check', repr(name), '...')
-                name_c = cache_from_source(name)
-                try:
-                    with open(name_c, 'rb') as f:
-                        magic_str = f.read(4)
-                        mtime_str = f.read(4)
-                except IOError:
-                    print('Cannot open', repr(name_c))
-                    continue
-                if magic_str != MAGIC:
-                    print('Bad MAGIC word in ".pyc" file', end=' ')
-                    print(repr(name_c))
-                    continue
-                mtime = get_long(mtime_str)
-                if mtime in {0, -1}:
-                    print('Bad ".pyc" file', repr(name_c))
-                elif mtime != st[ST_MTIME]:
-                    print('Out-of-date ".pyc" file', end=' ')
-                    print(repr(name_c))
-
-
-def get_long(s):
-    if len(s) != 4:
-        return -1
-    return s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/Tools/scripts/generate_opcode_h.py b/Tools/scripts/generate_opcode_h.py
index b184ffa..873f821 100644
--- a/Tools/scripts/generate_opcode_h.py
+++ b/Tools/scripts/generate_opcode_h.py
@@ -22,11 +22,6 @@
    remaining private.*/
 #define EXCEPT_HANDLER 257
 
-
-enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE,
-                PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN,
-                PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
-
 #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
 
 #ifdef __cplusplus
diff --git a/Tools/scripts/generate_token.py b/Tools/scripts/generate_token.py
old mode 100644
new mode 100755
index f2745e8..77bb5bd
--- a/Tools/scripts/generate_token.py
+++ b/Tools/scripts/generate_token.py
@@ -69,6 +69,10 @@
 #define ISTERMINAL(x)           ((x) < NT_OFFSET)
 #define ISNONTERMINAL(x)        ((x) >= NT_OFFSET)
 #define ISEOF(x)                ((x) == ENDMARKER)
+#define ISWHITESPACE(x)         ((x) == ENDMARKER || \\
+                                 (x) == NEWLINE   || \\
+                                 (x) == INDENT    || \\
+                                 (x) == DEDENT)
 
 
 PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */
diff --git a/Tools/scripts/h2py.py b/Tools/scripts/h2py.py
deleted file mode 100755
index ea37c04..0000000
--- a/Tools/scripts/h2py.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#! /usr/bin/env python3
-
-# Read #define's and translate to Python code.
-# Handle #include statements.
-# Handle #define macros with one argument.
-# Anything that isn't recognized or doesn't translate into valid
-# Python is ignored.
-
-# Without filename arguments, acts as a filter.
-# If one or more filenames are given, output is written to corresponding
-# filenames in the local directory, translated to all uppercase, with
-# the extension replaced by ".py".
-
-# By passing one or more options of the form "-i regular_expression"
-# you can specify additional strings to be ignored.  This is useful
-# e.g. to ignore casts to u_long: simply specify "-i '(u_long)'".
-
-# XXX To do:
-# - turn trailing C comments into Python comments
-# - turn C Boolean operators "&& || !" into Python "and or not"
-# - what to do about #if(def)?
-# - what to do about macros with multiple parameters?
-
-import sys, re, getopt, os
-
-p_define = re.compile(r'^[\t ]*#[\t ]*define[\t ]+([a-zA-Z0-9_]+)[\t ]+')
-
-p_macro = re.compile(
-  r'^[\t ]*#[\t ]*define[\t ]+'
-  r'([a-zA-Z0-9_]+)\(([_a-zA-Z][_a-zA-Z0-9]*)\)[\t ]+')
-
-p_include = re.compile(r'^[\t ]*#[\t ]*include[\t ]+<([^>\n]+)>')
-
-p_comment = re.compile(r'/\*([^*]+|\*+[^/])*(\*+/)?')
-p_cpp_comment = re.compile('//.*')
-
-ignores = [p_comment, p_cpp_comment]
-
-p_char = re.compile(r"'(\\.[^\\]*|[^\\])'")
-
-p_hex = re.compile(r"0x([0-9a-fA-F]+)L?")
-
-filedict = {}
-importable = {}
-
-try:
-    searchdirs=os.environ['include'].split(';')
-except KeyError:
-    try:
-        searchdirs=os.environ['INCLUDE'].split(';')
-    except KeyError:
-        searchdirs=['/usr/include']
-        try:
-            searchdirs.insert(0, os.path.join('/usr/include',
-                                              os.environ['MULTIARCH']))
-        except KeyError:
-            pass
-
-def main():
-    global filedict
-    opts, args = getopt.getopt(sys.argv[1:], 'i:')
-    for o, a in opts:
-        if o == '-i':
-            ignores.append(re.compile(a))
-    if not args:
-        args = ['-']
-    for filename in args:
-        if filename == '-':
-            sys.stdout.write('# Generated by h2py from stdin\n')
-            process(sys.stdin, sys.stdout)
-        else:
-            with open(filename) as fp:
-                outfile = os.path.basename(filename)
-                i = outfile.rfind('.')
-                if i > 0: outfile = outfile[:i]
-                modname = outfile.upper()
-                outfile = modname + '.py'
-                with open(outfile, 'w') as outfp:
-                    outfp.write('# Generated by h2py from %s\n' % filename)
-                    filedict = {}
-                    for dir in searchdirs:
-                        if filename[:len(dir)] == dir:
-                            filedict[filename[len(dir)+1:]] = None  # no '/' trailing
-                            importable[filename[len(dir)+1:]] = modname
-                            break
-                    process(fp, outfp)
-
-def pytify(body):
-    # replace ignored patterns by spaces
-    for p in ignores:
-        body = p.sub(' ', body)
-    # replace char literals by ord(...)
-    body = p_char.sub("ord('\\1')", body)
-    # Compute negative hexadecimal constants
-    start = 0
-    UMAX = 2*(sys.maxsize+1)
-    while 1:
-        m = p_hex.search(body, start)
-        if not m: break
-        s,e = m.span()
-        val = int(body[slice(*m.span(1))], 16)
-        if val > sys.maxsize:
-            val -= UMAX
-            body = body[:s] + "(" + str(val) + ")" + body[e:]
-        start = s + 1
-    return body
-
-def process(fp, outfp, env = {}):
-    lineno = 0
-    while 1:
-        line = fp.readline()
-        if not line: break
-        lineno = lineno + 1
-        match = p_define.match(line)
-        if match:
-            # gobble up continuation lines
-            while line[-2:] == '\\\n':
-                nextline = fp.readline()
-                if not nextline: break
-                lineno = lineno + 1
-                line = line + nextline
-            name = match.group(1)
-            body = line[match.end():]
-            body = pytify(body)
-            ok = 0
-            stmt = '%s = %s\n' % (name, body.strip())
-            try:
-                exec(stmt, env)
-            except:
-                sys.stderr.write('Skipping: %s' % stmt)
-            else:
-                outfp.write(stmt)
-        match = p_macro.match(line)
-        if match:
-            macro, arg = match.group(1, 2)
-            body = line[match.end():]
-            body = pytify(body)
-            stmt = 'def %s(%s): return %s\n' % (macro, arg, body)
-            try:
-                exec(stmt, env)
-            except:
-                sys.stderr.write('Skipping: %s' % stmt)
-            else:
-                outfp.write(stmt)
-        match = p_include.match(line)
-        if match:
-            regs = match.regs
-            a, b = regs[1]
-            filename = line[a:b]
-            if filename in importable:
-                outfp.write('from %s import *\n' % importable[filename])
-            elif filename not in filedict:
-                filedict[filename] = None
-                inclfp = None
-                for dir in searchdirs:
-                    try:
-                        inclfp = open(dir + '/' + filename)
-                        break
-                    except IOError:
-                        pass
-                if inclfp:
-                    with inclfp:
-                        outfp.write(
-                                '\n# Included from %s\n' % filename)
-                        process(inclfp, outfp, env)
-                else:
-                    sys.stderr.write('Warning - could not find file %s\n' %
-                                     filename)
-
-if __name__ == '__main__':
-    main()
diff --git a/Tools/scripts/run_tests.py b/Tools/scripts/run_tests.py
index 3c1c3bd..bcfa5e9 100644
--- a/Tools/scripts/run_tests.py
+++ b/Tools/scripts/run_tests.py
@@ -25,8 +25,10 @@
             '-u',                 # Unbuffered stdout and stderr
             '-W', 'default',      # Warnings set to 'default'
             '-bb',                # Warnings about bytes/bytearray
-            '-E',                 # Ignore environment variables
             ]
+    if 'PYTHONOLDPARSER' not in os.environ:
+        args.append('-E')         # Ignore environment variables
+
     # Allow user-specified interpreter options to override our defaults.
     args.extend(test.support.args_from_interpreter_flags())
 
diff --git a/Tools/scripts/which.py b/Tools/scripts/which.py
index df54ce0..b42e07c 100755
--- a/Tools/scripts/which.py
+++ b/Tools/scripts/which.py
@@ -49,6 +49,7 @@
                     msg(filename + ': not executable')
             if longlist:
                 sts = os.system('ls ' + longlist + ' ' + filename)
+                sts = os.waitstatus_to_exitcode(sts)
                 if sts: msg('"ls -l" exit status: ' + repr(sts))
         if not ident:
             msg(prog + ': not found')
diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py
index c39e38c..1dc234f 100755
--- a/Tools/ssl/make_ssl_data.py
+++ b/Tools/ssl/make_ssl_data.py
@@ -2,7 +2,7 @@
 
 """
 This script should be called *manually* when we want to upgrade SSLError
-`library` and `reason` mnemnonics to a more recent OpenSSL version.
+`library` and `reason` mnemonics to a more recent OpenSSL version.
 
 It takes two arguments:
 - the path to the OpenSSL source tree (e.g. git checkout)
diff --git a/Tools/unicode/genmap_japanese.py b/Tools/unicode/genmap_japanese.py
new file mode 100644
index 0000000..21de37b
--- /dev/null
+++ b/Tools/unicode/genmap_japanese.py
@@ -0,0 +1,251 @@
+#
+# genmap_ja_codecs.py: Japanese Codecs Map Generator
+#
+# Original Author:  Hye-Shik Chang <perky@FreeBSD.org>
+# Modified Author:  Dong-hee Na <donghee.na92@gmail.com>
+#
+import os
+
+from genmap_support import *
+
+JISX0208_C1 = (0x21, 0x74)
+JISX0208_C2 = (0x21, 0x7e)
+JISX0212_C1 = (0x22, 0x6d)
+JISX0212_C2 = (0x21, 0x7e)
+JISX0213_C1 = (0x21, 0x7e)
+JISX0213_C2 = (0x21, 0x7e)
+CP932P0_C1  = (0x81, 0x81) # patches between shift-jis and cp932
+CP932P0_C2  = (0x5f, 0xca)
+CP932P1_C1  = (0x87, 0x87) # CP932 P1
+CP932P1_C2  = (0x40, 0x9c)
+CP932P2_C1  = (0xed, 0xfc) # CP932 P2
+CP932P2_C2  = (0x40, 0xfc)
+
+MAPPINGS_JIS0208 = 'http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT'
+MAPPINGS_JIS0212 = 'http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0212.TXT'
+MAPPINGS_CP932 = 'http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT'
+MAPPINGS_JISX0213_2004 = 'http://wakaba-web.hp.infoseek.co.jp/table/jisx0213-2004-std.txt'
+
+
+def loadmap_jisx0213(fo):
+    decmap3, decmap4 = {}, {} # maps to BMP for level 3 and 4
+    decmap3_2, decmap4_2 = {}, {} # maps to U+2xxxx for level 3 and 4
+    decmap3_pair = {} # maps to BMP-pair for level 3
+    for line in fo:
+        line = line.split('#', 1)[0].strip()
+        if not line or len(line.split()) < 2:
+            continue
+
+        row = line.split()
+        loc = eval('0x' + row[0][2:])
+        level = eval(row[0][0])
+        m = None
+        if len(row[1].split('+')) == 2: # single unicode
+            uni = eval('0x' + row[1][2:])
+            if level == 3:
+                if uni < 0x10000:
+                    m = decmap3
+                elif 0x20000 <= uni < 0x30000:
+                    uni -= 0x20000
+                    m = decmap3_2
+            elif level == 4:
+                if uni < 0x10000:
+                    m = decmap4
+                elif 0x20000 <= uni < 0x30000:
+                    uni -= 0x20000
+                    m = decmap4_2
+            m.setdefault((loc >> 8), {})
+            m[(loc >> 8)][(loc & 0xff)] = uni
+        else: # pair
+            uniprefix = eval('0x' + row[1][2:6]) # body
+            uni = eval('0x' + row[1][7:11]) # modifier
+            if level != 3:
+                raise ValueError("invalid map")
+            decmap3_pair.setdefault(uniprefix, {})
+            m = decmap3_pair[uniprefix]
+
+        if m is None:
+            raise ValueError("invalid map")
+        m.setdefault((loc >> 8), {})
+        m[(loc >> 8)][(loc & 0xff)] = uni
+
+    return decmap3, decmap4, decmap3_2, decmap4_2, decmap3_pair
+
+
+def main():
+    jisx0208file = open_mapping_file('python-mappings/JIS0208.TXT', MAPPINGS_JIS0208)
+    jisx0212file = open_mapping_file('python-mappings/JIS0212.TXT', MAPPINGS_JIS0212)
+    cp932file = open_mapping_file('python-mappings/CP932.TXT', MAPPINGS_CP932)
+    jisx0213file = open_mapping_file('python-mappings/jisx0213-2004-std.txt', MAPPINGS_JISX0213_2004)
+
+    print("Loading Mapping File...")
+
+    sjisdecmap = loadmap(jisx0208file, natcol=0, unicol=2)
+    jisx0208decmap = loadmap(jisx0208file, natcol=1, unicol=2)
+    jisx0212decmap = loadmap(jisx0212file)
+    cp932decmap = loadmap(cp932file)
+    jis3decmap, jis4decmap, jis3_2_decmap, jis4_2_decmap, jis3_pairdecmap = loadmap_jisx0213(jisx0213file)
+
+    if jis3decmap[0x21][0x24] != 0xff0c:
+        raise SystemExit('Please adjust your JIS X 0213 map using jisx0213-2000-std.txt.diff')
+
+    sjisencmap, cp932encmap = {}, {}
+    jisx0208_0212encmap = {}
+    for c1, m in sjisdecmap.items():
+        for c2, code in m.items():
+            sjisencmap.setdefault(code >> 8, {})
+            sjisencmap[code >> 8][code & 0xff] = c1 << 8 | c2
+    for c1, m in cp932decmap.items():
+        for c2, code in m.items():
+            cp932encmap.setdefault(code >> 8, {})
+            if (code & 0xff) not in cp932encmap[code >> 8]:
+                cp932encmap[code >> 8][code & 0xff] = c1 << 8 | c2
+    for c1, m in cp932encmap.copy().items():
+        for c2, code in m.copy().items():
+            if c1 in sjisencmap and c2 in sjisencmap[c1] and sjisencmap[c1][c2] == code:
+                del cp932encmap[c1][c2]
+                if not cp932encmap[c1]:
+                    del cp932encmap[c1]
+
+    jisx0213pairdecmap = {}
+    jisx0213pairencmap = []
+    for unibody, m1 in jis3_pairdecmap.items():
+        for c1, m2 in m1.items():
+            for c2, modifier in m2.items():
+                jisx0213pairencmap.append((unibody, modifier, c1 << 8 | c2))
+                jisx0213pairdecmap.setdefault(c1, {})
+                jisx0213pairdecmap[c1][c2] = unibody << 16 | modifier
+
+    # Twinmap for both of JIS X 0208 (MSB unset) and JIS X 0212 (MSB set)
+    for c1, m in jisx0208decmap.items():
+        for c2, code in m.items():
+            jisx0208_0212encmap.setdefault(code >> 8, {})
+            jisx0208_0212encmap[code >> 8][code & 0xff] = c1 << 8 | c2
+
+    for c1, m in jisx0212decmap.items():
+        for c2, code in m.items():
+            jisx0208_0212encmap.setdefault(code >> 8, {})
+            if (code & 0xff) in jisx0208_0212encmap[code >> 8]:
+                print("OOPS!!!", (code))
+            jisx0208_0212encmap[code >> 8][code & 0xff] = 0x8000 | c1 << 8 | c2
+
+    jisx0213bmpencmap = {}
+    for c1, m in jis3decmap.copy().items():
+        for c2, code in m.copy().items():
+            if c1 in jisx0208decmap and c2 in jisx0208decmap[c1]:
+                if code in jis3_pairdecmap:
+                    jisx0213bmpencmap[code >> 8][code & 0xff] = (0,) # pair
+                    jisx0213pairencmap.append((code, 0, c1 << 8 | c2))
+                elif jisx0208decmap[c1][c2] == code:
+                    del jis3decmap[c1][c2]
+                    if not jis3decmap[c1]:
+                        del jis3decmap[c1]
+                else:
+                    raise ValueError("Difference between JIS X 0208 and JIS X 0213 Plane 1 is found.")
+            else:
+                jisx0213bmpencmap.setdefault(code >> 8, {})
+                if code not in jis3_pairdecmap:
+                    jisx0213bmpencmap[code >> 8][code & 0xff] = c1 << 8 | c2
+                else:
+                    jisx0213bmpencmap[code >> 8][code & 0xff] = (0,) # pair
+                    jisx0213pairencmap.append((code, 0, c1 << 8 | c2))
+
+    for c1, m in jis4decmap.items():
+        for c2, code in m.items():
+            jisx0213bmpencmap.setdefault(code >> 8, {})
+            jisx0213bmpencmap[code >> 8][code & 0xff] = 0x8000 | c1 << 8 | c2
+
+    jisx0213empencmap = {}
+    for c1, m in jis3_2_decmap.items():
+        for c2, code in m.items():
+            jisx0213empencmap.setdefault(code >> 8, {})
+            jisx0213empencmap[code >> 8][code & 0xff] = c1 << 8 | c2
+    for c1, m in jis4_2_decmap.items():
+        for c2, code in m.items():
+            jisx0213empencmap.setdefault(code >> 8, {})
+            jisx0213empencmap[code >> 8][code & 0xff] = 0x8000 | c1 << 8 | c2
+
+    with open("mappings_jp.h", "w") as fp:
+        print_autogen(fp, os.path.basename(__file__))
+        print("Generating JIS X 0208 decode map...")
+        writer = DecodeMapWriter(fp, "jisx0208", jisx0208decmap)
+        writer.update_decode_map(JISX0208_C1, JISX0208_C2)
+        writer.generate()
+
+        print("Generating JIS X 0212 decode map...")
+        writer = DecodeMapWriter(fp, "jisx0212", jisx0212decmap)
+        writer.update_decode_map(JISX0212_C1, JISX0212_C2)
+        writer.generate()
+
+        print("Generating JIS X 0208 && JIS X 0212 encode map...")
+        writer = EncodeMapWriter(fp, "jisxcommon", jisx0208_0212encmap)
+        writer.generate()
+
+        print("Generating CP932 Extension decode map...")
+        writer = DecodeMapWriter(fp, "cp932ext", cp932decmap)
+        writer.update_decode_map(CP932P0_C1, CP932P0_C2)
+        writer.update_decode_map(CP932P1_C1, CP932P1_C2)
+        writer.update_decode_map(CP932P2_C1, CP932P2_C2)
+        writer.generate()
+
+        print("Generating CP932 Extension encode map...")
+        writer = EncodeMapWriter(fp, "cp932ext", cp932encmap)
+        writer.generate()
+
+        print("Generating JIS X 0213 Plane 1 BMP decode map...")
+        writer = DecodeMapWriter(fp, "jisx0213_1_bmp", jis3decmap)
+        writer.update_decode_map(JISX0213_C1, JISX0213_C2)
+        writer.generate()
+
+        print("Generating JIS X 0213 Plane 2 BMP decode map...")
+        writer = DecodeMapWriter(fp, "jisx0213_2_bmp", jis4decmap)
+        writer.update_decode_map(JISX0213_C1, JISX0213_C2)
+        writer.generate()
+
+        print("Generating JIS X 0213 BMP encode map...")
+        writer = EncodeMapWriter(fp, "jisx0213_bmp", jisx0213bmpencmap)
+        writer.generate()
+
+        print("Generating JIS X 0213 Plane 1 EMP decode map...")
+        writer = DecodeMapWriter(fp, "jisx0213_1_emp", jis3_2_decmap)
+        writer.update_decode_map(JISX0213_C1, JISX0213_C2)
+        writer.generate()
+
+        print("Generating JIS X 0213 Plane 2 EMP decode map...")
+        writer = DecodeMapWriter(fp, "jisx0213_2_emp", jis4_2_decmap)
+        writer.update_decode_map(JISX0213_C1, JISX0213_C2)
+        writer.generate()
+
+        print("Generating JIS X 0213 EMP encode map...")
+        writer = EncodeMapWriter(fp, "jisx0213_emp", jisx0213empencmap)
+        writer.generate()
+
+    with open('mappings_jisx0213_pair.h', 'w') as fp:
+        print_autogen(fp, os.path.basename(__file__))
+        fp.write(f"#define JISX0213_ENCPAIRS {len(jisx0213pairencmap)}\n")
+        fp.write("""\
+#ifdef EXTERN_JISX0213_PAIR
+static const struct widedbcs_index *jisx0213_pair_decmap;
+static const struct pair_encodemap *jisx0213_pair_encmap;
+#else
+""")
+
+        print("Generating JIS X 0213 unicode-pair decode map...")
+        writer = DecodeMapWriter(fp, "jisx0213_pair", jisx0213pairdecmap)
+        writer.update_decode_map(JISX0213_C1, JISX0213_C2)
+        writer.generate(wide=True)
+
+        print("Generating JIS X 0213 unicode-pair encode map...")
+        jisx0213pairencmap.sort()
+        fp.write("static const struct pair_encodemap jisx0213_pair_encmap[JISX0213_ENCPAIRS] = {\n")
+        filler = BufferedFiller()
+        for body, modifier, jis in jisx0213pairencmap:
+            filler.write('{', '0x%04x%04x,' % (body, modifier), '0x%04x' % jis, '},')
+        filler.printout(fp)
+        fp.write("};\n")
+        fp.write("#endif\n")
+
+    print("Done!")
+
+if __name__ == '__main__':
+    main()
diff --git a/Tools/unicode/genmap_korean.py b/Tools/unicode/genmap_korean.py
new file mode 100644
index 0000000..4b94a6c
--- /dev/null
+++ b/Tools/unicode/genmap_korean.py
@@ -0,0 +1,62 @@
+#
+# genmap_korean.py: Korean Codecs Map Generator
+#
+# Original Author:  Hye-Shik Chang <perky@FreeBSD.org>
+# Modified Author:  Dong-hee Na <donghee.na92@gmail.com>
+#
+import os
+
+from genmap_support import *
+
+
+KSX1001_C1 = (0x21, 0x7e)
+KSX1001_C2 = (0x21, 0x7e)
+UHCL1_C1 = (0x81, 0xa0)
+UHCL1_C2 = (0x41, 0xfe)
+UHCL2_C1 = (0xa1, 0xfe)
+UHCL2_C2 = (0x41, 0xa0)
+MAPPINGS_CP949 = 'http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT'
+
+
+def main():
+    mapfile = open_mapping_file('python-mappings/CP949.TXT', MAPPINGS_CP949)
+    print("Loading Mapping File...")
+    decmap = loadmap(mapfile)
+    uhcdecmap, ksx1001decmap, cp949encmap = {}, {}, {}
+    for c1, c2map in decmap.items():
+        for c2, code in c2map.items():
+            if c1 >= 0xa1 and c2 >= 0xa1:
+                ksx1001decmap.setdefault(c1 & 0x7f, {})
+                ksx1001decmap[c1 & 0x7f][c2 & 0x7f] = c2map[c2]
+                cp949encmap.setdefault(code >> 8, {})
+                cp949encmap[code >> 8][code & 0xFF] = (c1 << 8 | c2) & 0x7f7f
+            else:
+                # uhc
+                uhcdecmap.setdefault(c1, {})
+                uhcdecmap[c1][c2] = c2map[c2]
+                cp949encmap.setdefault(code >> 8, {})  # MSB set
+                cp949encmap[code >> 8][code & 0xFF] = (c1 << 8 | c2)
+
+    with open('mappings_kr.h', 'w') as fp:
+        print_autogen(fp, os.path.basename(__file__))
+
+        print("Generating KS X 1001 decode map...")
+        writer = DecodeMapWriter(fp, "ksx1001", ksx1001decmap)
+        writer.update_decode_map(KSX1001_C1, KSX1001_C2)
+        writer.generate()
+
+        print("Generating UHC decode map...")
+        writer = DecodeMapWriter(fp, "cp949ext", uhcdecmap)
+        writer.update_decode_map(UHCL1_C1, UHCL1_C2)
+        writer.update_decode_map(UHCL2_C1, UHCL2_C2)
+        writer.generate()
+
+        print("Generating CP949 (includes KS X 1001) encode map...")
+        writer = EncodeMapWriter(fp, "cp949", cp949encmap)
+        writer.generate()
+
+    print("Done!")
+
+
+if __name__ == '__main__':
+    main()
diff --git a/Tools/unicode/genmap_schinese.py b/Tools/unicode/genmap_schinese.py
new file mode 100644
index 0000000..647c033
--- /dev/null
+++ b/Tools/unicode/genmap_schinese.py
@@ -0,0 +1,149 @@
+#
+# genmap_schinese.py: Simplified Chinese Codecs Map Generator
+#
+# Original Author:  Hye-Shik Chang <perky@FreeBSD.org>
+# Modified Author:  Dong-hee Na <donghee.na92@gmail.com>
+#
+import os
+import re
+
+from genmap_support import *
+
+
+GB2312_C1   = (0x21, 0x7e)
+GB2312_C2   = (0x21, 0x7e)
+GBKL1_C1    = (0x81, 0xa8)
+GBKL1_C2    = (0x40, 0xfe)
+GBKL2_C1    = (0xa9, 0xfe)
+GBKL2_C2    = (0x40, 0xa0)
+GB18030EXTP1_C1 = (0xa1, 0xa9)
+GB18030EXTP1_C2 = (0x40, 0xfe)
+GB18030EXTP2_C1 = (0xaa, 0xaf)
+GB18030EXTP2_C2 = (0xa1, 0xfe)
+GB18030EXTP3_C1 = (0xd7, 0xd7)
+GB18030EXTP3_C2 = (0xfa, 0xfe)
+GB18030EXTP4_C1 = (0xf8, 0xfd)
+GB18030EXTP4_C2 = (0xa1, 0xfe)
+GB18030EXTP5_C1 = (0xfe, 0xfe)
+GB18030EXTP5_C2 = (0x50, 0xfe)
+
+MAPPINGS_GB2312 = 'http://people.freebsd.org/~perky/i18n/GB2312.TXT'
+MAPPINGS_CP936 = 'http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT'
+MAPPINGS_GB18030 = 'http://oss.software.ibm.com/cvs/icu/~checkout~/charset/data/xml/gb-18030-2000.xml'
+
+re_gb18030ass = re.compile('<a u="([A-F0-9]{4})" b="([0-9A-F ]+)"/>')
+
+
+def parse_gb18030map(fo):
+    m, gbuni = {}, {}
+    for i in range(65536):
+        if i < 0xd800 or i > 0xdfff: # exclude unicode surrogate area
+            gbuni[i] = None
+    for uni, native in re_gb18030ass.findall(fo.read()):
+        uni = eval('0x'+uni)
+        native = [eval('0x'+u) for u in native.split()]
+        if len(native) <= 2:
+            del gbuni[uni]
+        if len(native) == 2: # we can decode algorithmically for 1 or 4 bytes
+            m.setdefault(native[0], {})
+            m[native[0]][native[1]] = uni
+    gbuni = [k for k in gbuni.keys()]
+    gbuni.sort()
+    return m, gbuni
+
+def main():
+    print("Loading Mapping File...")
+    gb2312map = open_mapping_file('python-mappings/GB2312.TXT', MAPPINGS_GB2312)
+    cp936map = open_mapping_file('python-mappings/CP936.TXT', MAPPINGS_CP936)
+    gb18030map = open_mapping_file('python-mappings/gb-18030-2000.xml', MAPPINGS_GB18030)
+
+    gb18030decmap, gb18030unilinear = parse_gb18030map(gb18030map)
+    gbkdecmap = loadmap(cp936map)
+    gb2312decmap = loadmap(gb2312map)
+    difmap = {}
+    for c1, m in gbkdecmap.items():
+        for c2, code in m.items():
+            del gb18030decmap[c1][c2]
+            if not gb18030decmap[c1]:
+                del gb18030decmap[c1]
+    for c1, m in gb2312decmap.items():
+        for c2, code in m.items():
+            gbkc1, gbkc2 = c1 | 0x80, c2 | 0x80
+            if gbkdecmap[gbkc1][gbkc2] == code:
+                del gbkdecmap[gbkc1][gbkc2]
+                if not gbkdecmap[gbkc1]:
+                    del gbkdecmap[gbkc1]
+
+    gb2312_gbkencmap, gb18030encmap = {}, {}
+    for c1, m in gbkdecmap.items():
+        for c2, code in m.items():
+            gb2312_gbkencmap.setdefault(code >> 8, {})
+            gb2312_gbkencmap[code >> 8][code & 0xff] = c1 << 8 | c2 # MSB set
+    for c1, m in gb2312decmap.items():
+        for c2, code in m.items():
+            gb2312_gbkencmap.setdefault(code >> 8, {})
+            gb2312_gbkencmap[code >> 8][code & 0xff] = c1 << 8 | c2 # MSB unset
+    for c1, m in gb18030decmap.items():
+        for c2, code in m.items():
+            gb18030encmap.setdefault(code >> 8, {})
+            gb18030encmap[code >> 8][code & 0xff] = c1 << 8 | c2
+
+    with open('mappings_cn.h', 'w') as fp:
+        print_autogen(fp, os.path.basename(__file__))
+
+        print("Generating GB2312 decode map...")
+        writer = DecodeMapWriter(fp, "gb2312", gb2312decmap)
+        writer.update_decode_map(GB2312_C1, GB2312_C2)
+        writer.generate()
+
+        print("Generating GBK decode map...")
+        writer = DecodeMapWriter(fp, "gbkext", gbkdecmap)
+        writer.update_decode_map(GBKL1_C1, GBKL1_C2)
+        writer.update_decode_map(GBKL2_C1, GBKL2_C2)
+        writer.generate()
+
+        print("Generating GB2312 && GBK encode map...")
+        writer = EncodeMapWriter(fp, "gbcommon", gb2312_gbkencmap)
+        writer.generate()
+
+        print("Generating GB18030 extension decode map...")
+        writer = DecodeMapWriter(fp, "gb18030ext", gb18030decmap)
+        for i in range(1, 6):
+            writer.update_decode_map(eval("GB18030EXTP%d_C1" % i), eval("GB18030EXTP%d_C2" % i))
+
+        writer.generate()
+
+        print("Generating GB18030 extension encode map...")
+        writer = EncodeMapWriter(fp, "gb18030ext", gb18030encmap)
+        writer.generate()
+
+        print("Generating GB18030 Unicode BMP Mapping Ranges...")
+        ranges = [[-1, -1, -1]]
+        gblinnum = 0
+        fp.write("""
+static const struct _gb18030_to_unibmp_ranges {
+    Py_UCS4   first, last;
+    DBCHAR       base;
+} gb18030_to_unibmp_ranges[] = {
+""")
+
+        for uni in gb18030unilinear:
+            if uni == ranges[-1][1] + 1:
+                ranges[-1][1] = uni
+            else:
+                ranges.append([uni, uni, gblinnum])
+            gblinnum += 1
+
+        filler = BufferedFiller()
+        for first, last, base in ranges[1:]:
+            filler.write('{', str(first), ',', str(last), ',', str(base), '},')
+
+        filler.write('{', '0,', '0,', str(
+            ranges[-1][2] + ranges[-1][1] - ranges[-1][0] + 1), '}', '};')
+        filler.printout(fp)
+
+    print("Done!")
+
+
+if __name__ == '__main__':
+    main()
diff --git a/Tools/unicode/genmap_support.py b/Tools/unicode/genmap_support.py
new file mode 100644
index 0000000..5e1d9ee
--- /dev/null
+++ b/Tools/unicode/genmap_support.py
@@ -0,0 +1,198 @@
+#
+# genmap_support.py: Multibyte Codec Map Generator
+#
+# Original Author:  Hye-Shik Chang <perky@FreeBSD.org>
+# Modified Author:  Dong-hee Na <donghee.na92@gmail.com>
+#
+
+
+class BufferedFiller:
+    def __init__(self, column=78):
+        self.column = column
+        self.buffered = []
+        self.cline = []
+        self.clen = 0
+        self.count = 0
+
+    def write(self, *data):
+        for s in data:
+            if len(s) > self.column:
+                raise ValueError("token is too long")
+            if len(s) + self.clen > self.column:
+                self.flush()
+            self.clen += len(s)
+            self.cline.append(s)
+            self.count += 1
+
+    def flush(self):
+        if not self.cline:
+            return
+        self.buffered.append(''.join(self.cline))
+        self.clen = 0
+        del self.cline[:]
+
+    def printout(self, fp):
+        self.flush()
+        for l in self.buffered:
+            fp.write(f'{l}\n')
+        del self.buffered[:]
+
+    def __len__(self):
+        return self.count
+
+
+class DecodeMapWriter:
+    filler_class = BufferedFiller
+
+    def __init__(self, fp, prefix, decode_map):
+        self.fp = fp
+        self.prefix = prefix
+        self.decode_map = decode_map
+        self.filler = self.filler_class()
+
+    def update_decode_map(self, c1range, c2range, onlymask=(), wide=0):
+        c2values = range(c2range[0], c2range[1] + 1)
+
+        for c1 in range(c1range[0], c1range[1] + 1):
+            if c1 not in self.decode_map or (onlymask and c1 not in onlymask):
+                continue
+            c2map = self.decode_map[c1]
+            rc2values = [n for n in c2values if n in c2map]
+            if not rc2values:
+                continue
+
+            c2map[self.prefix] = True
+            c2map['min'] = rc2values[0]
+            c2map['max'] = rc2values[-1]
+            c2map['midx'] = len(self.filler)
+
+            for v in range(rc2values[0], rc2values[-1] + 1):
+                if v in c2map:
+                    self.filler.write('%d,' % c2map[v])
+                else:
+                    self.filler.write('U,')
+
+    def generate(self, wide=False):
+        if not wide:
+            self.fp.write(f"static const ucs2_t __{self.prefix}_decmap[{len(self.filler)}] = {{\n")
+        else:
+            self.fp.write(f"static const Py_UCS4 __{self.prefix}_decmap[{len(self.filler)}] = {{\n")
+
+        self.filler.printout(self.fp)
+        self.fp.write("};\n\n")
+
+        if not wide:
+            self.fp.write(f"static const struct dbcs_index {self.prefix}_decmap[256] = {{\n")
+        else:
+            self.fp.write(f"static const struct widedbcs_index {self.prefix}_decmap[256] = {{\n")
+
+        for i in range(256):
+            if i in self.decode_map and self.prefix in self.decode_map[i]:
+                m = self.decode_map
+                prefix = self.prefix
+            else:
+                self.filler.write("{", "0,", "0,", "0", "},")
+                continue
+
+            self.filler.write("{", "__%s_decmap" % prefix, "+", "%d" % m[i]['midx'],
+                              ",", "%d," % m[i]['min'], "%d" % m[i]['max'], "},")
+        self.filler.printout(self.fp)
+        self.fp.write("};\n\n")
+
+
+class EncodeMapWriter:
+    filler_class = BufferedFiller
+    elemtype = 'DBCHAR'
+    indextype = 'struct unim_index'
+
+    def __init__(self, fp, prefix, encode_map):
+        self.fp = fp
+        self.prefix = prefix
+        self.encode_map = encode_map
+        self.filler = self.filler_class()
+
+    def generate(self):
+        self.buildmap()
+        self.printmap()
+
+    def buildmap(self):
+        for c1 in range(0, 256):
+            if c1 not in self.encode_map:
+                continue
+            c2map = self.encode_map[c1]
+            rc2values = [k for k in c2map.keys()]
+            rc2values.sort()
+            if not rc2values:
+                continue
+
+            c2map[self.prefix] = True
+            c2map['min'] = rc2values[0]
+            c2map['max'] = rc2values[-1]
+            c2map['midx'] = len(self.filler)
+
+            for v in range(rc2values[0], rc2values[-1] + 1):
+                if v not in c2map:
+                    self.write_nochar()
+                elif isinstance(c2map[v], int):
+                    self.write_char(c2map[v])
+                elif isinstance(c2map[v], tuple):
+                    self.write_multic(c2map[v])
+                else:
+                    raise ValueError
+
+    def write_nochar(self):
+        self.filler.write('N,')
+
+    def write_multic(self, point):
+        self.filler.write('M,')
+
+    def write_char(self, point):
+        self.filler.write(str(point) + ',')
+
+    def printmap(self):
+        self.fp.write(f"static const {self.elemtype} __{self.prefix}_encmap[{len(self.filler)}] = {{\n")
+        self.filler.printout(self.fp)
+        self.fp.write("};\n\n")
+        self.fp.write(f"static const {self.indextype} {self.prefix}_encmap[256] = {{\n")
+
+        for i in range(256):
+            if i in self.encode_map and self.prefix in self.encode_map[i]:
+                self.filler.write("{", "__%s_encmap" % self.prefix, "+",
+                                  "%d" % self.encode_map[i]['midx'], ",",
+                                  "%d," % self.encode_map[i]['min'],
+                                  "%d" % self.encode_map[i]['max'], "},")
+            else:
+                self.filler.write("{", "0,", "0,", "0", "},")
+                continue
+        self.filler.printout(self.fp)
+        self.fp.write("};\n\n")
+
+
+def open_mapping_file(path, source):
+    try:
+        f = open(path)
+    except IOError:
+        raise SystemExit(f'{source} is needed')
+    return f
+
+
+def print_autogen(fo, source):
+    fo.write(f'// AUTO-GENERATED FILE FROM {source}: DO NOT EDIT\n')
+
+
+def loadmap(fo, natcol=0, unicol=1, sbcs=0):
+    print("Loading from", fo)
+    fo.seek(0, 0)
+    decmap = {}
+    for line in fo:
+        line = line.split('#', 1)[0].strip()
+        if not line or len(line.split()) < 2:
+            continue
+
+        row = [eval(e) for e in line.split()]
+        loc, uni = row[natcol], row[unicol]
+        if loc >= 0x100 or sbcs:
+            decmap.setdefault((loc >> 8), {})
+            decmap[(loc >> 8)][(loc & 0xff)] = uni
+
+    return decmap
diff --git a/Tools/unicode/makeunicodedata.py b/Tools/unicode/makeunicodedata.py
index 5b9427a..810b285 100644
--- a/Tools/unicode/makeunicodedata.py
+++ b/Tools/unicode/makeunicodedata.py
@@ -26,12 +26,14 @@
 # written by Fredrik Lundh (fredrik@pythonware.com)
 #
 
+import dataclasses
 import os
 import sys
 import zipfile
 
-from textwrap import dedent
 from functools import partial
+from textwrap import dedent
+from typing import Iterator, List, Optional, Set, Tuple
 
 SCRIPT = sys.argv[0]
 VERSION = "3.3"
@@ -42,7 +44,7 @@
 #   * Doc/library/stdtypes.rst, and
 #   * Doc/library/unicodedata.rst
 #   * Doc/reference/lexical_analysis.rst (two occurrences)
-UNIDATA_VERSION = "12.1.0"
+UNIDATA_VERSION = "13.0.0"
 UNICODE_DATA = "UnicodeData%s.txt"
 COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt"
 EASTASIAN_WIDTH = "EastAsianWidth%s.txt"
@@ -98,13 +100,14 @@
 
 # these ranges need to match unicodedata.c:is_unified_ideograph
 cjk_ranges = [
-    ('3400', '4DB5'),
-    ('4E00', '9FEF'),
-    ('20000', '2A6D6'),
+    ('3400', '4DBF'),
+    ('4E00', '9FFC'),
+    ('20000', '2A6DD'),
     ('2A700', '2B734'),
     ('2B740', '2B81D'),
     ('2B820', '2CEA1'),
     ('2CEB0', '2EBE0'),
+    ('30000', '3134A'),
 ]
 
 
@@ -147,12 +150,12 @@
         record = unicode.table[char]
         if record:
             # extract database properties
-            category = CATEGORY_NAMES.index(record[2])
-            combining = int(record[3])
-            bidirectional = BIDIRECTIONAL_NAMES.index(record[4])
-            mirrored = record[9] == "Y"
-            eastasianwidth = EASTASIANWIDTH_NAMES.index(record[15])
-            normalizationquickcheck = record[17]
+            category = CATEGORY_NAMES.index(record.general_category)
+            combining = int(record.canonical_combining_class)
+            bidirectional = BIDIRECTIONAL_NAMES.index(record.bidi_class)
+            mirrored = record.bidi_mirrored == "Y"
+            eastasianwidth = EASTASIANWIDTH_NAMES.index(record.east_asian_width)
+            normalizationquickcheck = record.quick_check
             item = (
                 category, combining, bidirectional, mirrored, eastasianwidth,
                 normalizationquickcheck
@@ -178,8 +181,8 @@
     for char in unicode.chars:
         record = unicode.table[char]
         if record:
-            if record[5]:
-                decomp = record[5].split()
+            if record.decomposition_type:
+                decomp = record.decomposition_type.split()
                 if len(decomp) > 19:
                     raise Exception("character %x has a decomposition too large for nfd_nfkd" % char)
                 # prefix
@@ -199,7 +202,7 @@
                 # Collect NFC pairs
                 if not prefix and len(decomp) == 3 and \
                    char not in unicode.exclusions and \
-                   unicode.table[decomp[1]][3] == "0":
+                   unicode.table[decomp[1]].canonical_combining_class == "0":
                     p, l, r = decomp
                     comp_first[l] = 1
                     comp_last[r] = 1
@@ -403,9 +406,9 @@
         record = unicode.table[char]
         if record:
             # extract database properties
-            category = record[2]
-            bidirectional = record[4]
-            properties = record[16]
+            category = record.general_category
+            bidirectional = record.bidi_class
+            properties = record.binary_properties
             flags = 0
             if category in ["Lm", "Lt", "Lu", "Ll", "Lo"]:
                 flags |= ALPHA_MASK
@@ -433,16 +436,16 @@
                 flags |= CASE_IGNORABLE_MASK
             sc = unicode.special_casing.get(char)
             cf = unicode.case_folding.get(char, [char])
-            if record[12]:
-                upper = int(record[12], 16)
+            if record.simple_uppercase_mapping:
+                upper = int(record.simple_uppercase_mapping, 16)
             else:
                 upper = char
-            if record[13]:
-                lower = int(record[13], 16)
+            if record.simple_lowercase_mapping:
+                lower = int(record.simple_lowercase_mapping, 16)
             else:
                 lower = char
-            if record[14]:
-                title = int(record[14], 16)
+            if record.simple_titlecase_mapping:
+                title = int(record.simple_titlecase_mapping, 16)
             else:
                 title = upper
             if sc is None and cf != [lower]:
@@ -479,16 +482,16 @@
                     extra_casing.extend(sc[1])
             # decimal digit, integer digit
             decimal = 0
-            if record[6]:
+            if record.decomposition_mapping:
                 flags |= DECIMAL_MASK
-                decimal = int(record[6])
+                decimal = int(record.decomposition_mapping)
             digit = 0
-            if record[7]:
+            if record.numeric_type:
                 flags |= DIGIT_MASK
-                digit = int(record[7])
-            if record[8]:
+                digit = int(record.numeric_type)
+            if record.numeric_value:
                 flags |= NUMERIC_MASK
-                numeric.setdefault(record[8], []).append(char)
+                numeric.setdefault(record.numeric_value, []).append(char)
             item = (
                 upper, lower, title, decimal, digit, flags
                 )
@@ -608,7 +611,7 @@
     for char in unicode.chars:
         record = unicode.table[char]
         if record:
-            name = record[1].strip()
+            name = record.name.strip()
             if name and name[0] != "<":
                 names[char] = name + chr(0)
 
@@ -718,7 +721,7 @@
     for char in unicode.chars:
         record = unicode.table[char]
         if record:
-            name = record[1].strip()
+            name = record.name.strip()
             if name and name[0] != "<":
                 data.append((name, char))
 
@@ -818,31 +821,27 @@
             continue
         # check characters that differ
         if old.table[i] != new.table[i]:
-            for k in range(len(old.table[i])):
-                if old.table[i][k] != new.table[i][k]:
-                    value = old.table[i][k]
+            for k, field in enumerate(dataclasses.fields(UcdRecord)):
+                value = getattr(old.table[i], field.name)
+                new_value = getattr(new.table[i], field.name)
+                if value != new_value:
                     if k == 1 and i in PUA_15:
                         # the name is not set in the old.table, but in the
                         # new.table we are using it for aliases and named seq
                         assert value == ''
                     elif k == 2:
-                        #print "CATEGORY",hex(i), old.table[i][k], new.table[i][k]
                         category_changes[i] = CATEGORY_NAMES.index(value)
                     elif k == 4:
-                        #print "BIDIR",hex(i), old.table[i][k], new.table[i][k]
                         bidir_changes[i] = BIDIRECTIONAL_NAMES.index(value)
                     elif k == 5:
-                        #print "DECOMP",hex(i), old.table[i][k], new.table[i][k]
                         # We assume that all normalization changes are in 1:1 mappings
                         assert " " not in value
                         normalization_changes.append((i, value))
                     elif k == 6:
-                        #print "DECIMAL",hex(i), old.table[i][k], new.table[i][k]
                         # we only support changes where the old value is a single digit
                         assert value in "0123456789"
                         decimal_changes[i] = int(value)
                     elif k == 8:
-                        # print "NUMERIC",hex(i), `old.table[i][k]`, new.table[i][k]
                         # Since 0 encodes "no change", the old value is better not 0
                         if not value:
                             numeric_changes[i] = -1
@@ -886,15 +885,18 @@
                         normalization_changes))
 
 
+DATA_DIR = os.path.join('Tools', 'unicode', 'data')
+
 def open_data(template, version):
-    local = template % ('-'+version,)
+    local = os.path.join(DATA_DIR, template % ('-'+version,))
     if not os.path.exists(local):
         import urllib.request
         if version == '3.2.0':
             # irregular url structure
-            url = 'http://www.unicode.org/Public/3.2-Update/' + local
+            url = ('https://www.unicode.org/Public/3.2-Update/'+template) % ('-'+version,)
         else:
-            url = ('http://www.unicode.org/Public/%s/ucd/'+template) % (version, '')
+            url = ('https://www.unicode.org/Public/%s/ucd/'+template) % (version, '')
+        os.makedirs(DATA_DIR, exist_ok=True)
         urllib.request.urlretrieve(url, filename=local)
     if local.endswith('.txt'):
         return open(local, encoding='utf-8')
@@ -903,6 +905,90 @@
         return open(local, 'rb')
 
 
+def expand_range(char_range: str) -> Iterator[int]:
+    '''
+    Parses ranges of code points, as described in UAX #44:
+      https://www.unicode.org/reports/tr44/#Code_Point_Ranges
+    '''
+    if '..' in char_range:
+        first, last = [int(c, 16) for c in char_range.split('..')]
+    else:
+        first = last = int(char_range, 16)
+    for char in range(first, last+1):
+        yield char
+
+
+class UcdFile:
+    '''
+    A file in the standard format of the UCD.
+
+    See: https://www.unicode.org/reports/tr44/#Format_Conventions
+
+    Note that, as described there, the Unihan data files have their
+    own separate format.
+    '''
+
+    def __init__(self, template: str, version: str) -> None:
+        self.template = template
+        self.version = version
+
+    def records(self) -> Iterator[List[str]]:
+        with open_data(self.template, self.version) as file:
+            for line in file:
+                line = line.split('#', 1)[0].strip()
+                if not line:
+                    continue
+                yield [field.strip() for field in line.split(';')]
+
+    def __iter__(self) -> Iterator[List[str]]:
+        return self.records()
+
+    def expanded(self) -> Iterator[Tuple[int, List[str]]]:
+        for record in self.records():
+            char_range, rest = record[0], record[1:]
+            for char in expand_range(char_range):
+                yield char, rest
+
+
+@dataclasses.dataclass
+class UcdRecord:
+    # 15 fields from UnicodeData.txt .  See:
+    #   https://www.unicode.org/reports/tr44/#UnicodeData.txt
+    codepoint: str
+    name: str
+    general_category: str
+    canonical_combining_class: str
+    bidi_class: str
+    decomposition_type: str
+    decomposition_mapping: str
+    numeric_type: str
+    numeric_value: str
+    bidi_mirrored: str
+    unicode_1_name: str  # obsolete
+    iso_comment: str  # obsolete
+    simple_uppercase_mapping: str
+    simple_lowercase_mapping: str
+    simple_titlecase_mapping: str
+
+    # https://www.unicode.org/reports/tr44/#EastAsianWidth.txt
+    east_asian_width: Optional[str]
+
+    # Binary properties, as a set of those that are true.
+    # Taken from multiple files:
+    #   https://www.unicode.org/reports/tr44/#DerivedCoreProperties.txt
+    #   https://www.unicode.org/reports/tr44/#LineBreak.txt
+    binary_properties: Set[str]
+
+    # The Quick_Check properties related to normalization:
+    #   https://www.unicode.org/reports/tr44/#Decompositions_and_Normalization
+    # We store them as a bitmask.
+    quick_check: int
+
+
+def from_row(row: List[str]) -> UcdRecord:
+    return UcdRecord(*row, None, set(), 0)
+
+
 # --------------------------------------------------------------------
 # the following support code is taken from the unidb utilities
 # Copyright (c) 1999-2000 by Secret Labs AB
@@ -910,50 +996,38 @@
 # load a unicode-data file from disk
 
 class UnicodeData:
-    # Record structure:
-    # [ID, name, category, combining, bidi, decomp,  (6)
-    #  decimal, digit, numeric, bidi-mirrored, Unicode-1-name, (11)
-    #  ISO-comment, uppercase, lowercase, titlecase, ea-width, (16)
-    #  derived-props] (17)
+    # table: List[Optional[UcdRecord]]  # index is codepoint; None means unassigned
 
-    def __init__(self, version,
-                 linebreakprops=False,
-                 expand=1,
-                 cjk_check=True):
+    def __init__(self, version, cjk_check=True):
         self.changed = []
         table = [None] * 0x110000
-        with open_data(UNICODE_DATA, version) as file:
-            while 1:
-                s = file.readline()
-                if not s:
-                    break
-                s = s.strip().split(";")
-                char = int(s[0], 16)
-                table[char] = s
+        for s in UcdFile(UNICODE_DATA, version):
+            char = int(s[0], 16)
+            table[char] = from_row(s)
 
         cjk_ranges_found = []
 
         # expand first-last ranges
-        if expand:
-            field = None
-            for i in range(0, 0x110000):
-                s = table[i]
-                if s:
-                    if s[1][-6:] == "First>":
-                        s[1] = ""
-                        field = s
-                    elif s[1][-5:] == "Last>":
-                        if s[1].startswith("<CJK Ideograph"):
-                            cjk_ranges_found.append((field[0],
-                                                     s[0]))
-                        s[1] = ""
-                        field = None
-                elif field:
-                    f2 = field[:]
-                    f2[0] = "%X" % i
-                    table[i] = f2
-            if cjk_check and cjk_ranges != cjk_ranges_found:
-                raise ValueError("CJK ranges deviate: have %r" % cjk_ranges_found)
+        field = None
+        for i in range(0, 0x110000):
+            # The file UnicodeData.txt has its own distinct way of
+            # expressing ranges.  See:
+            #   https://www.unicode.org/reports/tr44/#Code_Point_Ranges
+            s = table[i]
+            if s:
+                if s.name[-6:] == "First>":
+                    s.name = ""
+                    field = dataclasses.astuple(s)[:15]
+                elif s.name[-5:] == "Last>":
+                    if s.name.startswith("<CJK Ideograph"):
+                        cjk_ranges_found.append((field[0],
+                                                 s.codepoint))
+                    s.name = ""
+                    field = None
+            elif field:
+                table[i] = from_row(('%X' % i,) + field[1:])
+        if cjk_check and cjk_ranges != cjk_ranges_found:
+            raise ValueError("CJK ranges deviate: have %r" % cjk_ranges_found)
 
         # public attributes
         self.filename = UNICODE_DATA % ''
@@ -968,17 +1042,12 @@
             # in order to take advantage of the compression and lookup
             # algorithms used for the other characters
             pua_index = NAME_ALIASES_START
-            with open_data(NAME_ALIASES, version) as file:
-                for s in file:
-                    s = s.strip()
-                    if not s or s.startswith('#'):
-                        continue
-                    char, name, abbrev = s.split(';')
-                    char = int(char, 16)
-                    self.aliases.append((name, char))
-                    # also store the name in the PUA 1
-                    self.table[pua_index][1] = name
-                    pua_index += 1
+            for char, name, abbrev in UcdFile(NAME_ALIASES, version):
+                char = int(char, 16)
+                self.aliases.append((name, char))
+                # also store the name in the PUA 1
+                self.table[pua_index].name = name
+                pua_index += 1
             assert pua_index - NAME_ALIASES_START == len(self.aliases)
 
             self.named_sequences = []
@@ -988,91 +1057,42 @@
 
             assert pua_index < NAMED_SEQUENCES_START
             pua_index = NAMED_SEQUENCES_START
-            with open_data(NAMED_SEQUENCES, version) as file:
-                for s in file:
-                    s = s.strip()
-                    if not s or s.startswith('#'):
-                        continue
-                    name, chars = s.split(';')
-                    chars = tuple(int(char, 16) for char in chars.split())
-                    # check that the structure defined in makeunicodename is OK
-                    assert 2 <= len(chars) <= 4, "change the Py_UCS2 array size"
-                    assert all(c <= 0xFFFF for c in chars), ("use Py_UCS4 in "
-                        "the NamedSequence struct and in unicodedata_lookup")
-                    self.named_sequences.append((name, chars))
-                    # also store these in the PUA 1
-                    self.table[pua_index][1] = name
-                    pua_index += 1
+            for name, chars in UcdFile(NAMED_SEQUENCES, version):
+                chars = tuple(int(char, 16) for char in chars.split())
+                # check that the structure defined in makeunicodename is OK
+                assert 2 <= len(chars) <= 4, "change the Py_UCS2 array size"
+                assert all(c <= 0xFFFF for c in chars), ("use Py_UCS4 in "
+                    "the NamedSequence struct and in unicodedata_lookup")
+                self.named_sequences.append((name, chars))
+                # also store these in the PUA 1
+                self.table[pua_index].name = name
+                pua_index += 1
             assert pua_index - NAMED_SEQUENCES_START == len(self.named_sequences)
 
         self.exclusions = {}
-        with open_data(COMPOSITION_EXCLUSIONS, version) as file:
-            for s in file:
-                s = s.strip()
-                if not s:
-                    continue
-                if s[0] == '#':
-                    continue
-                char = int(s.split()[0],16)
-                self.exclusions[char] = 1
+        for char, in UcdFile(COMPOSITION_EXCLUSIONS, version):
+            char = int(char, 16)
+            self.exclusions[char] = 1
 
         widths = [None] * 0x110000
-        with open_data(EASTASIAN_WIDTH, version) as file:
-            for s in file:
-                s = s.strip()
-                if not s:
-                    continue
-                if s[0] == '#':
-                    continue
-                s = s.split()[0].split(';')
-                if '..' in s[0]:
-                    first, last = [int(c, 16) for c in s[0].split('..')]
-                    chars = list(range(first, last+1))
-                else:
-                    chars = [int(s[0], 16)]
-                for char in chars:
-                    widths[char] = s[1]
+        for char, (width,) in UcdFile(EASTASIAN_WIDTH, version).expanded():
+            widths[char] = width
 
         for i in range(0, 0x110000):
             if table[i] is not None:
-                table[i].append(widths[i])
+                table[i].east_asian_width = widths[i]
 
-        for i in range(0, 0x110000):
-            if table[i] is not None:
-                table[i].append(set())
+        for char, (p,) in UcdFile(DERIVED_CORE_PROPERTIES, version).expanded():
+            if table[char]:
+                # Some properties (e.g. Default_Ignorable_Code_Point)
+                # apply to unassigned code points; ignore them
+                table[char].binary_properties.add(p)
 
-        with open_data(DERIVED_CORE_PROPERTIES, version) as file:
-            for s in file:
-                s = s.split('#', 1)[0].strip()
-                if not s:
-                    continue
-
-                r, p = s.split(";")
-                r = r.strip()
-                p = p.strip()
-                if ".." in r:
-                    first, last = [int(c, 16) for c in r.split('..')]
-                    chars = list(range(first, last+1))
-                else:
-                    chars = [int(r, 16)]
-                for char in chars:
-                    if table[char]:
-                        # Some properties (e.g. Default_Ignorable_Code_Point)
-                        # apply to unassigned code points; ignore them
-                        table[char][-1].add(p)
-
-        with open_data(LINE_BREAK, version) as file:
-            for s in file:
-                s = s.partition('#')[0]
-                s = [i.strip() for i in s.split(';')]
-                if len(s) < 2 or s[1] not in MANDATORY_LINE_BREAKS:
-                    continue
-                if '..' not in s[0]:
-                    first = last = int(s[0], 16)
-                else:
-                    first, last = [int(c, 16) for c in s[0].split('..')]
-                for char in range(first, last+1):
-                    table[char][-1].add('Line_Break')
+        for char_range, value in UcdFile(LINE_BREAK, version):
+            if value not in MANDATORY_LINE_BREAKS:
+                continue
+            for char in expand_range(char_range):
+                table[char].binary_properties.add('Line_Break')
 
         # We only want the quickcheck properties
         # Format: NF?_QC; Y(es)/N(o)/M(aybe)
@@ -1083,26 +1103,18 @@
         # for older versions, and no delta records will be created.
         quickchecks = [0] * 0x110000
         qc_order = 'NFD_QC NFKD_QC NFC_QC NFKC_QC'.split()
-        with open_data(DERIVEDNORMALIZATION_PROPS, version) as file:
-            for s in file:
-                if '#' in s:
-                    s = s[:s.index('#')]
-                s = [i.strip() for i in s.split(';')]
-                if len(s) < 2 or s[1] not in qc_order:
-                    continue
-                quickcheck = 'MN'.index(s[2]) + 1 # Maybe or No
-                quickcheck_shift = qc_order.index(s[1])*2
-                quickcheck <<= quickcheck_shift
-                if '..' not in s[0]:
-                    first = last = int(s[0], 16)
-                else:
-                    first, last = [int(c, 16) for c in s[0].split('..')]
-                for char in range(first, last+1):
-                    assert not (quickchecks[char]>>quickcheck_shift)&3
-                    quickchecks[char] |= quickcheck
+        for s in UcdFile(DERIVEDNORMALIZATION_PROPS, version):
+            if len(s) < 2 or s[1] not in qc_order:
+                continue
+            quickcheck = 'MN'.index(s[2]) + 1 # Maybe or No
+            quickcheck_shift = qc_order.index(s[1])*2
+            quickcheck <<= quickcheck_shift
+            for char in expand_range(s[0]):
+                assert not (quickchecks[char]>>quickcheck_shift)&3
+                quickchecks[char] |= quickcheck
         for i in range(0, 0x110000):
             if table[i] is not None:
-                table[i].append(quickchecks[i])
+                table[i].quick_check = quickchecks[i]
 
         with open_data(UNIHAN, version) as file:
             zip = zipfile.ZipFile(file)
@@ -1121,35 +1133,27 @@
             i = int(code[2:], 16)
             # Patch the numeric field
             if table[i] is not None:
-                table[i][8] = value
+                table[i].numeric_value = value
+
         sc = self.special_casing = {}
-        with open_data(SPECIAL_CASING, version) as file:
-            for s in file:
-                s = s[:-1].split('#', 1)[0]
-                if not s:
-                    continue
-                data = s.split("; ")
-                if data[4]:
-                    # We ignore all conditionals (since they depend on
-                    # languages) except for one, which is hardcoded. See
-                    # handle_capital_sigma in unicodeobject.c.
-                    continue
-                c = int(data[0], 16)
-                lower = [int(char, 16) for char in data[1].split()]
-                title = [int(char, 16) for char in data[2].split()]
-                upper = [int(char, 16) for char in data[3].split()]
-                sc[c] = (lower, title, upper)
+        for data in UcdFile(SPECIAL_CASING, version):
+            if data[4]:
+                # We ignore all conditionals (since they depend on
+                # languages) except for one, which is hardcoded. See
+                # handle_capital_sigma in unicodeobject.c.
+                continue
+            c = int(data[0], 16)
+            lower = [int(char, 16) for char in data[1].split()]
+            title = [int(char, 16) for char in data[2].split()]
+            upper = [int(char, 16) for char in data[3].split()]
+            sc[c] = (lower, title, upper)
+
         cf = self.case_folding = {}
         if version != '3.2.0':
-            with open_data(CASE_FOLDING, version) as file:
-                for s in file:
-                    s = s[:-1].split('#', 1)[0]
-                    if not s:
-                        continue
-                    data = s.split("; ")
-                    if data[1] in "CF":
-                        c = int(data[0], 16)
-                        cf[c] = [int(char, 16) for char in data[2].split()]
+            for data in UcdFile(CASE_FOLDING, version):
+                if data[1] in "CF":
+                    c = int(data[0], 16)
+                    cf[c] = [int(char, 16) for char in data[2].split()]
 
     def uselatin1(self):
         # restrict character range to ISO Latin 1
diff --git a/Tools/unicode/mkstringprep.py b/Tools/unicode/mkstringprep.py
index ead020c..4271883 100644
--- a/Tools/unicode/mkstringprep.py
+++ b/Tools/unicode/mkstringprep.py
@@ -1,9 +1,6 @@
-import re, sys
+import re
 from unicodedata import ucd_3_2_0 as unicodedata
 
-if sys.maxunicode == 65535:
-    raise RuntimeError("need UCS-4 Python")
-
 def gen_category(cats):
     for i in range(0, 0x110000):
         if unicodedata.category(chr(i)) in cats:
diff --git a/Tools/unicode/python-mappings/GB2312.TXT b/Tools/unicode/python-mappings/GB2312.TXT
new file mode 100644
index 0000000..334b4cd
--- /dev/null
+++ b/Tools/unicode/python-mappings/GB2312.TXT
@@ -0,0 +1,7515 @@
+#
+#	Name:             GB2312-80 to Unicode table (complete, hex format)
+#	Unicode version:  3.0
+#	Table version:    1.0
+#	Table format:     Format A
+#	Date:             1999 October 8
+#
+#	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+#
+#	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+#	No claims are made as to fitness for any particular purpose.  No
+#	warranties of any kind are expressed or implied.  The recipient
+#	agrees to determine applicability of information provided.  If this
+#	file has been provided on optical media by Unicode, Inc., the sole
+#	remedy for any claim will be exchange of defective media within 90
+#	days of receipt.
+#
+#	Unicode, Inc. hereby grants the right to freely use the information
+#	supplied in this file in the creation of products supporting the
+#	Unicode Standard, and to make copies of this file in any form for
+#	internal or external distribution as long as this notice remains
+#	attached.
+#
+#	General notes:
+#
+#
+# This table contains one set of mappings from GB2312-80 into Unicode.
+# Note that these data are *possible* mappings only and may not be the
+# same as those used by actual products, nor may they be the best suited
+# for all uses.  For more information on the mappings between various code
+# pages incorporating the repertoire of GB2312-80 and Unicode, consult the
+# VENDORS mapping data.  Normative information on the mapping between
+# GB2312-80 and Unicode may be found in the Unihan.txt file in the
+# latest Unicode Character Database.
+#
+# If you have carefully considered the fact that the mappings in
+# this table are only one possible set of mappings between GB2312-80 and
+# Unicode and have no normative status, but still feel that you
+# have located an error in the table that requires fixing, you may
+# report any such error to errata@unicode.org.
+#
+#
+#	Format:  Three tab-separated columns
+#		 Column #1 is the GB2312 code (in hex as 0xXXXX)
+#		 Column #2 is the Unicode (in hex as 0xXXXX)
+#		 Column #3 the Unicode name (follows a comment sign, '#')
+#			The official names for Unicode characters U+4E00
+#			to U+9FA5, inclusive, is "CJK UNIFIED IDEOGRAPH-XXXX",
+#			where XXXX is the code point.  Including all these
+#			names in this file increases its size substantially
+#			and needlessly.  The token "<CJK>" is used for the
+#			name of these characters.  If necessary, it can be
+#			expanded algorithmically by a parser or editor.
+#
+#	The entries are in GB2312 order
+#
+#	The following algorithms can be used to change the hex form
+#		of GB2312 to other standard forms:
+#
+#		To change hex to EUC form, add 0x8080
+#		To change hex to kuten form, first subtract 0x2020.  Then
+#			the high and low bytes correspond to the ku and ten of
+#			the kuten form.  For example, 0x2121 -> 0x0101 -> 0101;
+#			0x777E -> 0x575E -> 8794
+#
+#	Version history
+#	1.0 version updates 0.0d2 version by correcting mapping for 0x212C
+#             from U+2225 to U+2016.
+#
+#
+0x2121	0x3000	# IDEOGRAPHIC SPACE
+0x2122	0x3001	# IDEOGRAPHIC COMMA
+0x2123	0x3002	# IDEOGRAPHIC FULL STOP
+0x2124	0x30FB	# KATAKANA MIDDLE DOT
+0x2125	0x02C9	# MODIFIER LETTER MACRON (Mandarin Chinese first tone)
+0x2126	0x02C7	# CARON (Mandarin Chinese third tone)
+0x2127	0x00A8	# DIAERESIS
+0x2128	0x3003	# DITTO MARK
+0x2129	0x3005	# IDEOGRAPHIC ITERATION MARK
+0x212A	0x2015	# HORIZONTAL BAR
+0x212B	0xFF5E	# FULLWIDTH TILDE
+0x212C	0x2016	# DOUBLE VERTICAL LINE
+0x212D	0x2026	# HORIZONTAL ELLIPSIS
+0x212E	0x2018	# LEFT SINGLE QUOTATION MARK
+0x212F	0x2019	# RIGHT SINGLE QUOTATION MARK
+0x2130	0x201C	# LEFT DOUBLE QUOTATION MARK
+0x2131	0x201D	# RIGHT DOUBLE QUOTATION MARK
+0x2132	0x3014	# LEFT TORTOISE SHELL BRACKET
+0x2133	0x3015	# RIGHT TORTOISE SHELL BRACKET
+0x2134	0x3008	# LEFT ANGLE BRACKET
+0x2135	0x3009	# RIGHT ANGLE BRACKET
+0x2136	0x300A	# LEFT DOUBLE ANGLE BRACKET
+0x2137	0x300B	# RIGHT DOUBLE ANGLE BRACKET
+0x2138	0x300C	# LEFT CORNER BRACKET
+0x2139	0x300D	# RIGHT CORNER BRACKET
+0x213A	0x300E	# LEFT WHITE CORNER BRACKET
+0x213B	0x300F	# RIGHT WHITE CORNER BRACKET
+0x213C	0x3016	# LEFT WHITE LENTICULAR BRACKET
+0x213D	0x3017	# RIGHT WHITE LENTICULAR BRACKET
+0x213E	0x3010	# LEFT BLACK LENTICULAR BRACKET
+0x213F	0x3011	# RIGHT BLACK LENTICULAR BRACKET
+0x2140	0x00B1	# PLUS-MINUS SIGN
+0x2141	0x00D7	# MULTIPLICATION SIGN
+0x2142	0x00F7	# DIVISION SIGN
+0x2143	0x2236	# RATIO
+0x2144	0x2227	# LOGICAL AND
+0x2145	0x2228	# LOGICAL OR
+0x2146	0x2211	# N-ARY SUMMATION
+0x2147	0x220F	# N-ARY PRODUCT
+0x2148	0x222A	# UNION
+0x2149	0x2229	# INTERSECTION
+0x214A	0x2208	# ELEMENT OF
+0x214B	0x2237	# PROPORTION
+0x214C	0x221A	# SQUARE ROOT
+0x214D	0x22A5	# UP TACK
+0x214E	0x2225	# PARALLEL TO
+0x214F	0x2220	# ANGLE
+0x2150	0x2312	# ARC
+0x2151	0x2299	# CIRCLED DOT OPERATOR
+0x2152	0x222B	# INTEGRAL
+0x2153	0x222E	# CONTOUR INTEGRAL
+0x2154	0x2261	# IDENTICAL TO
+0x2155	0x224C	# ALL EQUAL TO
+0x2156	0x2248	# ALMOST EQUAL TO
+0x2157	0x223D	# REVERSED TILDE
+0x2158	0x221D	# PROPORTIONAL TO
+0x2159	0x2260	# NOT EQUAL TO
+0x215A	0x226E	# NOT LESS-THAN
+0x215B	0x226F	# NOT GREATER-THAN
+0x215C	0x2264	# LESS-THAN OR EQUAL TO
+0x215D	0x2265	# GREATER-THAN OR EQUAL TO
+0x215E	0x221E	# INFINITY
+0x215F	0x2235	# BECAUSE
+0x2160	0x2234	# THEREFORE
+0x2161	0x2642	# MALE SIGN
+0x2162	0x2640	# FEMALE SIGN
+0x2163	0x00B0	# DEGREE SIGN
+0x2164	0x2032	# PRIME
+0x2165	0x2033	# DOUBLE PRIME
+0x2166	0x2103	# DEGREE CELSIUS
+0x2167	0xFF04	# FULLWIDTH DOLLAR SIGN
+0x2168	0x00A4	# CURRENCY SIGN
+0x2169	0xFFE0	# FULLWIDTH CENT SIGN
+0x216A	0xFFE1	# FULLWIDTH POUND SIGN
+0x216B	0x2030	# PER MILLE SIGN
+0x216C	0x00A7	# SECTION SIGN
+0x216D	0x2116	# NUMERO SIGN
+0x216E	0x2606	# WHITE STAR
+0x216F	0x2605	# BLACK STAR
+0x2170	0x25CB	# WHITE CIRCLE
+0x2171	0x25CF	# BLACK CIRCLE
+0x2172	0x25CE	# BULLSEYE
+0x2173	0x25C7	# WHITE DIAMOND
+0x2174	0x25C6	# BLACK DIAMOND
+0x2175	0x25A1	# WHITE SQUARE
+0x2176	0x25A0	# BLACK SQUARE
+0x2177	0x25B3	# WHITE UP-POINTING TRIANGLE
+0x2178	0x25B2	# BLACK UP-POINTING TRIANGLE
+0x2179	0x203B	# REFERENCE MARK
+0x217A	0x2192	# RIGHTWARDS ARROW
+0x217B	0x2190	# LEFTWARDS ARROW
+0x217C	0x2191	# UPWARDS ARROW
+0x217D	0x2193	# DOWNWARDS ARROW
+0x217E	0x3013	# GETA MARK
+0x2231	0x2488	# DIGIT ONE FULL STOP
+0x2232	0x2489	# DIGIT TWO FULL STOP
+0x2233	0x248A	# DIGIT THREE FULL STOP
+0x2234	0x248B	# DIGIT FOUR FULL STOP
+0x2235	0x248C	# DIGIT FIVE FULL STOP
+0x2236	0x248D	# DIGIT SIX FULL STOP
+0x2237	0x248E	# DIGIT SEVEN FULL STOP
+0x2238	0x248F	# DIGIT EIGHT FULL STOP
+0x2239	0x2490	# DIGIT NINE FULL STOP
+0x223A	0x2491	# NUMBER TEN FULL STOP
+0x223B	0x2492	# NUMBER ELEVEN FULL STOP
+0x223C	0x2493	# NUMBER TWELVE FULL STOP
+0x223D	0x2494	# NUMBER THIRTEEN FULL STOP
+0x223E	0x2495	# NUMBER FOURTEEN FULL STOP
+0x223F	0x2496	# NUMBER FIFTEEN FULL STOP
+0x2240	0x2497	# NUMBER SIXTEEN FULL STOP
+0x2241	0x2498	# NUMBER SEVENTEEN FULL STOP
+0x2242	0x2499	# NUMBER EIGHTEEN FULL STOP
+0x2243	0x249A	# NUMBER NINETEEN FULL STOP
+0x2244	0x249B	# NUMBER TWENTY FULL STOP
+0x2245	0x2474	# PARENTHESIZED DIGIT ONE
+0x2246	0x2475	# PARENTHESIZED DIGIT TWO
+0x2247	0x2476	# PARENTHESIZED DIGIT THREE
+0x2248	0x2477	# PARENTHESIZED DIGIT FOUR
+0x2249	0x2478	# PARENTHESIZED DIGIT FIVE
+0x224A	0x2479	# PARENTHESIZED DIGIT SIX
+0x224B	0x247A	# PARENTHESIZED DIGIT SEVEN
+0x224C	0x247B	# PARENTHESIZED DIGIT EIGHT
+0x224D	0x247C	# PARENTHESIZED DIGIT NINE
+0x224E	0x247D	# PARENTHESIZED NUMBER TEN
+0x224F	0x247E	# PARENTHESIZED NUMBER ELEVEN
+0x2250	0x247F	# PARENTHESIZED NUMBER TWELVE
+0x2251	0x2480	# PARENTHESIZED NUMBER THIRTEEN
+0x2252	0x2481	# PARENTHESIZED NUMBER FOURTEEN
+0x2253	0x2482	# PARENTHESIZED NUMBER FIFTEEN
+0x2254	0x2483	# PARENTHESIZED NUMBER SIXTEEN
+0x2255	0x2484	# PARENTHESIZED NUMBER SEVENTEEN
+0x2256	0x2485	# PARENTHESIZED NUMBER EIGHTEEN
+0x2257	0x2486	# PARENTHESIZED NUMBER NINETEEN
+0x2258	0x2487	# PARENTHESIZED NUMBER TWENTY
+0x2259	0x2460	# CIRCLED DIGIT ONE
+0x225A	0x2461	# CIRCLED DIGIT TWO
+0x225B	0x2462	# CIRCLED DIGIT THREE
+0x225C	0x2463	# CIRCLED DIGIT FOUR
+0x225D	0x2464	# CIRCLED DIGIT FIVE
+0x225E	0x2465	# CIRCLED DIGIT SIX
+0x225F	0x2466	# CIRCLED DIGIT SEVEN
+0x2260	0x2467	# CIRCLED DIGIT EIGHT
+0x2261	0x2468	# CIRCLED DIGIT NINE
+0x2262	0x2469	# CIRCLED NUMBER TEN
+0x2265	0x3220	# PARENTHESIZED IDEOGRAPH ONE
+0x2266	0x3221	# PARENTHESIZED IDEOGRAPH TWO
+0x2267	0x3222	# PARENTHESIZED IDEOGRAPH THREE
+0x2268	0x3223	# PARENTHESIZED IDEOGRAPH FOUR
+0x2269	0x3224	# PARENTHESIZED IDEOGRAPH FIVE
+0x226A	0x3225	# PARENTHESIZED IDEOGRAPH SIX
+0x226B	0x3226	# PARENTHESIZED IDEOGRAPH SEVEN
+0x226C	0x3227	# PARENTHESIZED IDEOGRAPH EIGHT
+0x226D	0x3228	# PARENTHESIZED IDEOGRAPH NINE
+0x226E	0x3229	# PARENTHESIZED IDEOGRAPH TEN
+0x2271	0x2160	# ROMAN NUMERAL ONE
+0x2272	0x2161	# ROMAN NUMERAL TWO
+0x2273	0x2162	# ROMAN NUMERAL THREE
+0x2274	0x2163	# ROMAN NUMERAL FOUR
+0x2275	0x2164	# ROMAN NUMERAL FIVE
+0x2276	0x2165	# ROMAN NUMERAL SIX
+0x2277	0x2166	# ROMAN NUMERAL SEVEN
+0x2278	0x2167	# ROMAN NUMERAL EIGHT
+0x2279	0x2168	# ROMAN NUMERAL NINE
+0x227A	0x2169	# ROMAN NUMERAL TEN
+0x227B	0x216A	# ROMAN NUMERAL ELEVEN
+0x227C	0x216B	# ROMAN NUMERAL TWELVE
+0x2321	0xFF01	# FULLWIDTH EXCLAMATION MARK
+0x2322	0xFF02	# FULLWIDTH QUOTATION MARK
+0x2323	0xFF03	# FULLWIDTH NUMBER SIGN
+0x2324	0xFFE5	# FULLWIDTH YEN SIGN
+0x2325	0xFF05	# FULLWIDTH PERCENT SIGN
+0x2326	0xFF06	# FULLWIDTH AMPERSAND
+0x2327	0xFF07	# FULLWIDTH APOSTROPHE
+0x2328	0xFF08	# FULLWIDTH LEFT PARENTHESIS
+0x2329	0xFF09	# FULLWIDTH RIGHT PARENTHESIS
+0x232A	0xFF0A	# FULLWIDTH ASTERISK
+0x232B	0xFF0B	# FULLWIDTH PLUS SIGN
+0x232C	0xFF0C	# FULLWIDTH COMMA
+0x232D	0xFF0D	# FULLWIDTH HYPHEN-MINUS
+0x232E	0xFF0E	# FULLWIDTH FULL STOP
+0x232F	0xFF0F	# FULLWIDTH SOLIDUS
+0x2330	0xFF10	# FULLWIDTH DIGIT ZERO
+0x2331	0xFF11	# FULLWIDTH DIGIT ONE
+0x2332	0xFF12	# FULLWIDTH DIGIT TWO
+0x2333	0xFF13	# FULLWIDTH DIGIT THREE
+0x2334	0xFF14	# FULLWIDTH DIGIT FOUR
+0x2335	0xFF15	# FULLWIDTH DIGIT FIVE
+0x2336	0xFF16	# FULLWIDTH DIGIT SIX
+0x2337	0xFF17	# FULLWIDTH DIGIT SEVEN
+0x2338	0xFF18	# FULLWIDTH DIGIT EIGHT
+0x2339	0xFF19	# FULLWIDTH DIGIT NINE
+0x233A	0xFF1A	# FULLWIDTH COLON
+0x233B	0xFF1B	# FULLWIDTH SEMICOLON
+0x233C	0xFF1C	# FULLWIDTH LESS-THAN SIGN
+0x233D	0xFF1D	# FULLWIDTH EQUALS SIGN
+0x233E	0xFF1E	# FULLWIDTH GREATER-THAN SIGN
+0x233F	0xFF1F	# FULLWIDTH QUESTION MARK
+0x2340	0xFF20	# FULLWIDTH COMMERCIAL AT
+0x2341	0xFF21	# FULLWIDTH LATIN CAPITAL LETTER A
+0x2342	0xFF22	# FULLWIDTH LATIN CAPITAL LETTER B
+0x2343	0xFF23	# FULLWIDTH LATIN CAPITAL LETTER C
+0x2344	0xFF24	# FULLWIDTH LATIN CAPITAL LETTER D
+0x2345	0xFF25	# FULLWIDTH LATIN CAPITAL LETTER E
+0x2346	0xFF26	# FULLWIDTH LATIN CAPITAL LETTER F
+0x2347	0xFF27	# FULLWIDTH LATIN CAPITAL LETTER G
+0x2348	0xFF28	# FULLWIDTH LATIN CAPITAL LETTER H
+0x2349	0xFF29	# FULLWIDTH LATIN CAPITAL LETTER I
+0x234A	0xFF2A	# FULLWIDTH LATIN CAPITAL LETTER J
+0x234B	0xFF2B	# FULLWIDTH LATIN CAPITAL LETTER K
+0x234C	0xFF2C	# FULLWIDTH LATIN CAPITAL LETTER L
+0x234D	0xFF2D	# FULLWIDTH LATIN CAPITAL LETTER M
+0x234E	0xFF2E	# FULLWIDTH LATIN CAPITAL LETTER N
+0x234F	0xFF2F	# FULLWIDTH LATIN CAPITAL LETTER O
+0x2350	0xFF30	# FULLWIDTH LATIN CAPITAL LETTER P
+0x2351	0xFF31	# FULLWIDTH LATIN CAPITAL LETTER Q
+0x2352	0xFF32	# FULLWIDTH LATIN CAPITAL LETTER R
+0x2353	0xFF33	# FULLWIDTH LATIN CAPITAL LETTER S
+0x2354	0xFF34	# FULLWIDTH LATIN CAPITAL LETTER T
+0x2355	0xFF35	# FULLWIDTH LATIN CAPITAL LETTER U
+0x2356	0xFF36	# FULLWIDTH LATIN CAPITAL LETTER V
+0x2357	0xFF37	# FULLWIDTH LATIN CAPITAL LETTER W
+0x2358	0xFF38	# FULLWIDTH LATIN CAPITAL LETTER X
+0x2359	0xFF39	# FULLWIDTH LATIN CAPITAL LETTER Y
+0x235A	0xFF3A	# FULLWIDTH LATIN CAPITAL LETTER Z
+0x235B	0xFF3B	# FULLWIDTH LEFT SQUARE BRACKET
+0x235C	0xFF3C	# FULLWIDTH REVERSE SOLIDUS
+0x235D	0xFF3D	# FULLWIDTH RIGHT SQUARE BRACKET
+0x235E	0xFF3E	# FULLWIDTH CIRCUMFLEX ACCENT
+0x235F	0xFF3F	# FULLWIDTH LOW LINE
+0x2360	0xFF40	# FULLWIDTH GRAVE ACCENT
+0x2361	0xFF41	# FULLWIDTH LATIN SMALL LETTER A
+0x2362	0xFF42	# FULLWIDTH LATIN SMALL LETTER B
+0x2363	0xFF43	# FULLWIDTH LATIN SMALL LETTER C
+0x2364	0xFF44	# FULLWIDTH LATIN SMALL LETTER D
+0x2365	0xFF45	# FULLWIDTH LATIN SMALL LETTER E
+0x2366	0xFF46	# FULLWIDTH LATIN SMALL LETTER F
+0x2367	0xFF47	# FULLWIDTH LATIN SMALL LETTER G
+0x2368	0xFF48	# FULLWIDTH LATIN SMALL LETTER H
+0x2369	0xFF49	# FULLWIDTH LATIN SMALL LETTER I
+0x236A	0xFF4A	# FULLWIDTH LATIN SMALL LETTER J
+0x236B	0xFF4B	# FULLWIDTH LATIN SMALL LETTER K
+0x236C	0xFF4C	# FULLWIDTH LATIN SMALL LETTER L
+0x236D	0xFF4D	# FULLWIDTH LATIN SMALL LETTER M
+0x236E	0xFF4E	# FULLWIDTH LATIN SMALL LETTER N
+0x236F	0xFF4F	# FULLWIDTH LATIN SMALL LETTER O
+0x2370	0xFF50	# FULLWIDTH LATIN SMALL LETTER P
+0x2371	0xFF51	# FULLWIDTH LATIN SMALL LETTER Q
+0x2372	0xFF52	# FULLWIDTH LATIN SMALL LETTER R
+0x2373	0xFF53	# FULLWIDTH LATIN SMALL LETTER S
+0x2374	0xFF54	# FULLWIDTH LATIN SMALL LETTER T
+0x2375	0xFF55	# FULLWIDTH LATIN SMALL LETTER U
+0x2376	0xFF56	# FULLWIDTH LATIN SMALL LETTER V
+0x2377	0xFF57	# FULLWIDTH LATIN SMALL LETTER W
+0x2378	0xFF58	# FULLWIDTH LATIN SMALL LETTER X
+0x2379	0xFF59	# FULLWIDTH LATIN SMALL LETTER Y
+0x237A	0xFF5A	# FULLWIDTH LATIN SMALL LETTER Z
+0x237B	0xFF5B	# FULLWIDTH LEFT CURLY BRACKET
+0x237C	0xFF5C	# FULLWIDTH VERTICAL LINE
+0x237D	0xFF5D	# FULLWIDTH RIGHT CURLY BRACKET
+0x237E	0xFFE3	# FULLWIDTH MACRON
+0x2421	0x3041	# HIRAGANA LETTER SMALL A
+0x2422	0x3042	# HIRAGANA LETTER A
+0x2423	0x3043	# HIRAGANA LETTER SMALL I
+0x2424	0x3044	# HIRAGANA LETTER I
+0x2425	0x3045	# HIRAGANA LETTER SMALL U
+0x2426	0x3046	# HIRAGANA LETTER U
+0x2427	0x3047	# HIRAGANA LETTER SMALL E
+0x2428	0x3048	# HIRAGANA LETTER E
+0x2429	0x3049	# HIRAGANA LETTER SMALL O
+0x242A	0x304A	# HIRAGANA LETTER O
+0x242B	0x304B	# HIRAGANA LETTER KA
+0x242C	0x304C	# HIRAGANA LETTER GA
+0x242D	0x304D	# HIRAGANA LETTER KI
+0x242E	0x304E	# HIRAGANA LETTER GI
+0x242F	0x304F	# HIRAGANA LETTER KU
+0x2430	0x3050	# HIRAGANA LETTER GU
+0x2431	0x3051	# HIRAGANA LETTER KE
+0x2432	0x3052	# HIRAGANA LETTER GE
+0x2433	0x3053	# HIRAGANA LETTER KO
+0x2434	0x3054	# HIRAGANA LETTER GO
+0x2435	0x3055	# HIRAGANA LETTER SA
+0x2436	0x3056	# HIRAGANA LETTER ZA
+0x2437	0x3057	# HIRAGANA LETTER SI
+0x2438	0x3058	# HIRAGANA LETTER ZI
+0x2439	0x3059	# HIRAGANA LETTER SU
+0x243A	0x305A	# HIRAGANA LETTER ZU
+0x243B	0x305B	# HIRAGANA LETTER SE
+0x243C	0x305C	# HIRAGANA LETTER ZE
+0x243D	0x305D	# HIRAGANA LETTER SO
+0x243E	0x305E	# HIRAGANA LETTER ZO
+0x243F	0x305F	# HIRAGANA LETTER TA
+0x2440	0x3060	# HIRAGANA LETTER DA
+0x2441	0x3061	# HIRAGANA LETTER TI
+0x2442	0x3062	# HIRAGANA LETTER DI
+0x2443	0x3063	# HIRAGANA LETTER SMALL TU
+0x2444	0x3064	# HIRAGANA LETTER TU
+0x2445	0x3065	# HIRAGANA LETTER DU
+0x2446	0x3066	# HIRAGANA LETTER TE
+0x2447	0x3067	# HIRAGANA LETTER DE
+0x2448	0x3068	# HIRAGANA LETTER TO
+0x2449	0x3069	# HIRAGANA LETTER DO
+0x244A	0x306A	# HIRAGANA LETTER NA
+0x244B	0x306B	# HIRAGANA LETTER NI
+0x244C	0x306C	# HIRAGANA LETTER NU
+0x244D	0x306D	# HIRAGANA LETTER NE
+0x244E	0x306E	# HIRAGANA LETTER NO
+0x244F	0x306F	# HIRAGANA LETTER HA
+0x2450	0x3070	# HIRAGANA LETTER BA
+0x2451	0x3071	# HIRAGANA LETTER PA
+0x2452	0x3072	# HIRAGANA LETTER HI
+0x2453	0x3073	# HIRAGANA LETTER BI
+0x2454	0x3074	# HIRAGANA LETTER PI
+0x2455	0x3075	# HIRAGANA LETTER HU
+0x2456	0x3076	# HIRAGANA LETTER BU
+0x2457	0x3077	# HIRAGANA LETTER PU
+0x2458	0x3078	# HIRAGANA LETTER HE
+0x2459	0x3079	# HIRAGANA LETTER BE
+0x245A	0x307A	# HIRAGANA LETTER PE
+0x245B	0x307B	# HIRAGANA LETTER HO
+0x245C	0x307C	# HIRAGANA LETTER BO
+0x245D	0x307D	# HIRAGANA LETTER PO
+0x245E	0x307E	# HIRAGANA LETTER MA
+0x245F	0x307F	# HIRAGANA LETTER MI
+0x2460	0x3080	# HIRAGANA LETTER MU
+0x2461	0x3081	# HIRAGANA LETTER ME
+0x2462	0x3082	# HIRAGANA LETTER MO
+0x2463	0x3083	# HIRAGANA LETTER SMALL YA
+0x2464	0x3084	# HIRAGANA LETTER YA
+0x2465	0x3085	# HIRAGANA LETTER SMALL YU
+0x2466	0x3086	# HIRAGANA LETTER YU
+0x2467	0x3087	# HIRAGANA LETTER SMALL YO
+0x2468	0x3088	# HIRAGANA LETTER YO
+0x2469	0x3089	# HIRAGANA LETTER RA
+0x246A	0x308A	# HIRAGANA LETTER RI
+0x246B	0x308B	# HIRAGANA LETTER RU
+0x246C	0x308C	# HIRAGANA LETTER RE
+0x246D	0x308D	# HIRAGANA LETTER RO
+0x246E	0x308E	# HIRAGANA LETTER SMALL WA
+0x246F	0x308F	# HIRAGANA LETTER WA
+0x2470	0x3090	# HIRAGANA LETTER WI
+0x2471	0x3091	# HIRAGANA LETTER WE
+0x2472	0x3092	# HIRAGANA LETTER WO
+0x2473	0x3093	# HIRAGANA LETTER N
+0x2521	0x30A1	# KATAKANA LETTER SMALL A
+0x2522	0x30A2	# KATAKANA LETTER A
+0x2523	0x30A3	# KATAKANA LETTER SMALL I
+0x2524	0x30A4	# KATAKANA LETTER I
+0x2525	0x30A5	# KATAKANA LETTER SMALL U
+0x2526	0x30A6	# KATAKANA LETTER U
+0x2527	0x30A7	# KATAKANA LETTER SMALL E
+0x2528	0x30A8	# KATAKANA LETTER E
+0x2529	0x30A9	# KATAKANA LETTER SMALL O
+0x252A	0x30AA	# KATAKANA LETTER O
+0x252B	0x30AB	# KATAKANA LETTER KA
+0x252C	0x30AC	# KATAKANA LETTER GA
+0x252D	0x30AD	# KATAKANA LETTER KI
+0x252E	0x30AE	# KATAKANA LETTER GI
+0x252F	0x30AF	# KATAKANA LETTER KU
+0x2530	0x30B0	# KATAKANA LETTER GU
+0x2531	0x30B1	# KATAKANA LETTER KE
+0x2532	0x30B2	# KATAKANA LETTER GE
+0x2533	0x30B3	# KATAKANA LETTER KO
+0x2534	0x30B4	# KATAKANA LETTER GO
+0x2535	0x30B5	# KATAKANA LETTER SA
+0x2536	0x30B6	# KATAKANA LETTER ZA
+0x2537	0x30B7	# KATAKANA LETTER SI
+0x2538	0x30B8	# KATAKANA LETTER ZI
+0x2539	0x30B9	# KATAKANA LETTER SU
+0x253A	0x30BA	# KATAKANA LETTER ZU
+0x253B	0x30BB	# KATAKANA LETTER SE
+0x253C	0x30BC	# KATAKANA LETTER ZE
+0x253D	0x30BD	# KATAKANA LETTER SO
+0x253E	0x30BE	# KATAKANA LETTER ZO
+0x253F	0x30BF	# KATAKANA LETTER TA
+0x2540	0x30C0	# KATAKANA LETTER DA
+0x2541	0x30C1	# KATAKANA LETTER TI
+0x2542	0x30C2	# KATAKANA LETTER DI
+0x2543	0x30C3	# KATAKANA LETTER SMALL TU
+0x2544	0x30C4	# KATAKANA LETTER TU
+0x2545	0x30C5	# KATAKANA LETTER DU
+0x2546	0x30C6	# KATAKANA LETTER TE
+0x2547	0x30C7	# KATAKANA LETTER DE
+0x2548	0x30C8	# KATAKANA LETTER TO
+0x2549	0x30C9	# KATAKANA LETTER DO
+0x254A	0x30CA	# KATAKANA LETTER NA
+0x254B	0x30CB	# KATAKANA LETTER NI
+0x254C	0x30CC	# KATAKANA LETTER NU
+0x254D	0x30CD	# KATAKANA LETTER NE
+0x254E	0x30CE	# KATAKANA LETTER NO
+0x254F	0x30CF	# KATAKANA LETTER HA
+0x2550	0x30D0	# KATAKANA LETTER BA
+0x2551	0x30D1	# KATAKANA LETTER PA
+0x2552	0x30D2	# KATAKANA LETTER HI
+0x2553	0x30D3	# KATAKANA LETTER BI
+0x2554	0x30D4	# KATAKANA LETTER PI
+0x2555	0x30D5	# KATAKANA LETTER HU
+0x2556	0x30D6	# KATAKANA LETTER BU
+0x2557	0x30D7	# KATAKANA LETTER PU
+0x2558	0x30D8	# KATAKANA LETTER HE
+0x2559	0x30D9	# KATAKANA LETTER BE
+0x255A	0x30DA	# KATAKANA LETTER PE
+0x255B	0x30DB	# KATAKANA LETTER HO
+0x255C	0x30DC	# KATAKANA LETTER BO
+0x255D	0x30DD	# KATAKANA LETTER PO
+0x255E	0x30DE	# KATAKANA LETTER MA
+0x255F	0x30DF	# KATAKANA LETTER MI
+0x2560	0x30E0	# KATAKANA LETTER MU
+0x2561	0x30E1	# KATAKANA LETTER ME
+0x2562	0x30E2	# KATAKANA LETTER MO
+0x2563	0x30E3	# KATAKANA LETTER SMALL YA
+0x2564	0x30E4	# KATAKANA LETTER YA
+0x2565	0x30E5	# KATAKANA LETTER SMALL YU
+0x2566	0x30E6	# KATAKANA LETTER YU
+0x2567	0x30E7	# KATAKANA LETTER SMALL YO
+0x2568	0x30E8	# KATAKANA LETTER YO
+0x2569	0x30E9	# KATAKANA LETTER RA
+0x256A	0x30EA	# KATAKANA LETTER RI
+0x256B	0x30EB	# KATAKANA LETTER RU
+0x256C	0x30EC	# KATAKANA LETTER RE
+0x256D	0x30ED	# KATAKANA LETTER RO
+0x256E	0x30EE	# KATAKANA LETTER SMALL WA
+0x256F	0x30EF	# KATAKANA LETTER WA
+0x2570	0x30F0	# KATAKANA LETTER WI
+0x2571	0x30F1	# KATAKANA LETTER WE
+0x2572	0x30F2	# KATAKANA LETTER WO
+0x2573	0x30F3	# KATAKANA LETTER N
+0x2574	0x30F4	# KATAKANA LETTER VU
+0x2575	0x30F5	# KATAKANA LETTER SMALL KA
+0x2576	0x30F6	# KATAKANA LETTER SMALL KE
+0x2621	0x0391	# GREEK CAPITAL LETTER ALPHA
+0x2622	0x0392	# GREEK CAPITAL LETTER BETA
+0x2623	0x0393	# GREEK CAPITAL LETTER GAMMA
+0x2624	0x0394	# GREEK CAPITAL LETTER DELTA
+0x2625	0x0395	# GREEK CAPITAL LETTER EPSILON
+0x2626	0x0396	# GREEK CAPITAL LETTER ZETA
+0x2627	0x0397	# GREEK CAPITAL LETTER ETA
+0x2628	0x0398	# GREEK CAPITAL LETTER THETA
+0x2629	0x0399	# GREEK CAPITAL LETTER IOTA
+0x262A	0x039A	# GREEK CAPITAL LETTER KAPPA
+0x262B	0x039B	# GREEK CAPITAL LETTER LAMDA
+0x262C	0x039C	# GREEK CAPITAL LETTER MU
+0x262D	0x039D	# GREEK CAPITAL LETTER NU
+0x262E	0x039E	# GREEK CAPITAL LETTER XI
+0x262F	0x039F	# GREEK CAPITAL LETTER OMICRON
+0x2630	0x03A0	# GREEK CAPITAL LETTER PI
+0x2631	0x03A1	# GREEK CAPITAL LETTER RHO
+0x2632	0x03A3	# GREEK CAPITAL LETTER SIGMA
+0x2633	0x03A4	# GREEK CAPITAL LETTER TAU
+0x2634	0x03A5	# GREEK CAPITAL LETTER UPSILON
+0x2635	0x03A6	# GREEK CAPITAL LETTER PHI
+0x2636	0x03A7	# GREEK CAPITAL LETTER CHI
+0x2637	0x03A8	# GREEK CAPITAL LETTER PSI
+0x2638	0x03A9	# GREEK CAPITAL LETTER OMEGA
+0x2641	0x03B1	# GREEK SMALL LETTER ALPHA
+0x2642	0x03B2	# GREEK SMALL LETTER BETA
+0x2643	0x03B3	# GREEK SMALL LETTER GAMMA
+0x2644	0x03B4	# GREEK SMALL LETTER DELTA
+0x2645	0x03B5	# GREEK SMALL LETTER EPSILON
+0x2646	0x03B6	# GREEK SMALL LETTER ZETA
+0x2647	0x03B7	# GREEK SMALL LETTER ETA
+0x2648	0x03B8	# GREEK SMALL LETTER THETA
+0x2649	0x03B9	# GREEK SMALL LETTER IOTA
+0x264A	0x03BA	# GREEK SMALL LETTER KAPPA
+0x264B	0x03BB	# GREEK SMALL LETTER LAMDA
+0x264C	0x03BC	# GREEK SMALL LETTER MU
+0x264D	0x03BD	# GREEK SMALL LETTER NU
+0x264E	0x03BE	# GREEK SMALL LETTER XI
+0x264F	0x03BF	# GREEK SMALL LETTER OMICRON
+0x2650	0x03C0	# GREEK SMALL LETTER PI
+0x2651	0x03C1	# GREEK SMALL LETTER RHO
+0x2652	0x03C3	# GREEK SMALL LETTER SIGMA
+0x2653	0x03C4	# GREEK SMALL LETTER TAU
+0x2654	0x03C5	# GREEK SMALL LETTER UPSILON
+0x2655	0x03C6	# GREEK SMALL LETTER PHI
+0x2656	0x03C7	# GREEK SMALL LETTER CHI
+0x2657	0x03C8	# GREEK SMALL LETTER PSI
+0x2658	0x03C9	# GREEK SMALL LETTER OMEGA
+0x2721	0x0410	# CYRILLIC CAPITAL LETTER A
+0x2722	0x0411	# CYRILLIC CAPITAL LETTER BE
+0x2723	0x0412	# CYRILLIC CAPITAL LETTER VE
+0x2724	0x0413	# CYRILLIC CAPITAL LETTER GHE
+0x2725	0x0414	# CYRILLIC CAPITAL LETTER DE
+0x2726	0x0415	# CYRILLIC CAPITAL LETTER IE
+0x2727	0x0401	# CYRILLIC CAPITAL LETTER IO
+0x2728	0x0416	# CYRILLIC CAPITAL LETTER ZHE
+0x2729	0x0417	# CYRILLIC CAPITAL LETTER ZE
+0x272A	0x0418	# CYRILLIC CAPITAL LETTER I
+0x272B	0x0419	# CYRILLIC CAPITAL LETTER SHORT I
+0x272C	0x041A	# CYRILLIC CAPITAL LETTER KA
+0x272D	0x041B	# CYRILLIC CAPITAL LETTER EL
+0x272E	0x041C	# CYRILLIC CAPITAL LETTER EM
+0x272F	0x041D	# CYRILLIC CAPITAL LETTER EN
+0x2730	0x041E	# CYRILLIC CAPITAL LETTER O
+0x2731	0x041F	# CYRILLIC CAPITAL LETTER PE
+0x2732	0x0420	# CYRILLIC CAPITAL LETTER ER
+0x2733	0x0421	# CYRILLIC CAPITAL LETTER ES
+0x2734	0x0422	# CYRILLIC CAPITAL LETTER TE
+0x2735	0x0423	# CYRILLIC CAPITAL LETTER U
+0x2736	0x0424	# CYRILLIC CAPITAL LETTER EF
+0x2737	0x0425	# CYRILLIC CAPITAL LETTER HA
+0x2738	0x0426	# CYRILLIC CAPITAL LETTER TSE
+0x2739	0x0427	# CYRILLIC CAPITAL LETTER CHE
+0x273A	0x0428	# CYRILLIC CAPITAL LETTER SHA
+0x273B	0x0429	# CYRILLIC CAPITAL LETTER SHCHA
+0x273C	0x042A	# CYRILLIC CAPITAL LETTER HARD SIGN
+0x273D	0x042B	# CYRILLIC CAPITAL LETTER YERU
+0x273E	0x042C	# CYRILLIC CAPITAL LETTER SOFT SIGN
+0x273F	0x042D	# CYRILLIC CAPITAL LETTER E
+0x2740	0x042E	# CYRILLIC CAPITAL LETTER YU
+0x2741	0x042F	# CYRILLIC CAPITAL LETTER YA
+0x2751	0x0430	# CYRILLIC SMALL LETTER A
+0x2752	0x0431	# CYRILLIC SMALL LETTER BE
+0x2753	0x0432	# CYRILLIC SMALL LETTER VE
+0x2754	0x0433	# CYRILLIC SMALL LETTER GHE
+0x2755	0x0434	# CYRILLIC SMALL LETTER DE
+0x2756	0x0435	# CYRILLIC SMALL LETTER IE
+0x2757	0x0451	# CYRILLIC SMALL LETTER IO
+0x2758	0x0436	# CYRILLIC SMALL LETTER ZHE
+0x2759	0x0437	# CYRILLIC SMALL LETTER ZE
+0x275A	0x0438	# CYRILLIC SMALL LETTER I
+0x275B	0x0439	# CYRILLIC SMALL LETTER SHORT I
+0x275C	0x043A	# CYRILLIC SMALL LETTER KA
+0x275D	0x043B	# CYRILLIC SMALL LETTER EL
+0x275E	0x043C	# CYRILLIC SMALL LETTER EM
+0x275F	0x043D	# CYRILLIC SMALL LETTER EN
+0x2760	0x043E	# CYRILLIC SMALL LETTER O
+0x2761	0x043F	# CYRILLIC SMALL LETTER PE
+0x2762	0x0440	# CYRILLIC SMALL LETTER ER
+0x2763	0x0441	# CYRILLIC SMALL LETTER ES
+0x2764	0x0442	# CYRILLIC SMALL LETTER TE
+0x2765	0x0443	# CYRILLIC SMALL LETTER U
+0x2766	0x0444	# CYRILLIC SMALL LETTER EF
+0x2767	0x0445	# CYRILLIC SMALL LETTER HA
+0x2768	0x0446	# CYRILLIC SMALL LETTER TSE
+0x2769	0x0447	# CYRILLIC SMALL LETTER CHE
+0x276A	0x0448	# CYRILLIC SMALL LETTER SHA
+0x276B	0x0449	# CYRILLIC SMALL LETTER SHCHA
+0x276C	0x044A	# CYRILLIC SMALL LETTER HARD SIGN
+0x276D	0x044B	# CYRILLIC SMALL LETTER YERU
+0x276E	0x044C	# CYRILLIC SMALL LETTER SOFT SIGN
+0x276F	0x044D	# CYRILLIC SMALL LETTER E
+0x2770	0x044E	# CYRILLIC SMALL LETTER YU
+0x2771	0x044F	# CYRILLIC SMALL LETTER YA
+0x2821	0x0101	# LATIN SMALL LETTER A WITH MACRON
+0x2822	0x00E1	# LATIN SMALL LETTER A WITH ACUTE
+0x2823	0x01CE	# LATIN SMALL LETTER A WITH CARON
+0x2824	0x00E0	# LATIN SMALL LETTER A WITH GRAVE
+0x2825	0x0113	# LATIN SMALL LETTER E WITH MACRON
+0x2826	0x00E9	# LATIN SMALL LETTER E WITH ACUTE
+0x2827	0x011B	# LATIN SMALL LETTER E WITH CARON
+0x2828	0x00E8	# LATIN SMALL LETTER E WITH GRAVE
+0x2829	0x012B	# LATIN SMALL LETTER I WITH MACRON
+0x282A	0x00ED	# LATIN SMALL LETTER I WITH ACUTE
+0x282B	0x01D0	# LATIN SMALL LETTER I WITH CARON
+0x282C	0x00EC	# LATIN SMALL LETTER I WITH GRAVE
+0x282D	0x014D	# LATIN SMALL LETTER O WITH MACRON
+0x282E	0x00F3	# LATIN SMALL LETTER O WITH ACUTE
+0x282F	0x01D2	# LATIN SMALL LETTER O WITH CARON
+0x2830	0x00F2	# LATIN SMALL LETTER O WITH GRAVE
+0x2831	0x016B	# LATIN SMALL LETTER U WITH MACRON
+0x2832	0x00FA	# LATIN SMALL LETTER U WITH ACUTE
+0x2833	0x01D4	# LATIN SMALL LETTER U WITH CARON
+0x2834	0x00F9	# LATIN SMALL LETTER U WITH GRAVE
+0x2835	0x01D6	# LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+0x2836	0x01D8	# LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+0x2837	0x01DA	# LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+0x2838	0x01DC	# LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+0x2839	0x00FC	# LATIN SMALL LETTER U WITH DIAERESIS
+0x283A	0x00EA	# LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x2845	0x3105	# BOPOMOFO LETTER B
+0x2846	0x3106	# BOPOMOFO LETTER P
+0x2847	0x3107	# BOPOMOFO LETTER M
+0x2848	0x3108	# BOPOMOFO LETTER F
+0x2849	0x3109	# BOPOMOFO LETTER D
+0x284A	0x310A	# BOPOMOFO LETTER T
+0x284B	0x310B	# BOPOMOFO LETTER N
+0x284C	0x310C	# BOPOMOFO LETTER L
+0x284D	0x310D	# BOPOMOFO LETTER G
+0x284E	0x310E	# BOPOMOFO LETTER K
+0x284F	0x310F	# BOPOMOFO LETTER H
+0x2850	0x3110	# BOPOMOFO LETTER J
+0x2851	0x3111	# BOPOMOFO LETTER Q
+0x2852	0x3112	# BOPOMOFO LETTER X
+0x2853	0x3113	# BOPOMOFO LETTER ZH
+0x2854	0x3114	# BOPOMOFO LETTER CH
+0x2855	0x3115	# BOPOMOFO LETTER SH
+0x2856	0x3116	# BOPOMOFO LETTER R
+0x2857	0x3117	# BOPOMOFO LETTER Z
+0x2858	0x3118	# BOPOMOFO LETTER C
+0x2859	0x3119	# BOPOMOFO LETTER S
+0x285A	0x311A	# BOPOMOFO LETTER A
+0x285B	0x311B	# BOPOMOFO LETTER O
+0x285C	0x311C	# BOPOMOFO LETTER E
+0x285D	0x311D	# BOPOMOFO LETTER EH
+0x285E	0x311E	# BOPOMOFO LETTER AI
+0x285F	0x311F	# BOPOMOFO LETTER EI
+0x2860	0x3120	# BOPOMOFO LETTER AU
+0x2861	0x3121	# BOPOMOFO LETTER OU
+0x2862	0x3122	# BOPOMOFO LETTER AN
+0x2863	0x3123	# BOPOMOFO LETTER EN
+0x2864	0x3124	# BOPOMOFO LETTER ANG
+0x2865	0x3125	# BOPOMOFO LETTER ENG
+0x2866	0x3126	# BOPOMOFO LETTER ER
+0x2867	0x3127	# BOPOMOFO LETTER I
+0x2868	0x3128	# BOPOMOFO LETTER U
+0x2869	0x3129	# BOPOMOFO LETTER IU
+0x2924	0x2500	# BOX DRAWINGS LIGHT HORIZONTAL
+0x2925	0x2501	# BOX DRAWINGS HEAVY HORIZONTAL
+0x2926	0x2502	# BOX DRAWINGS LIGHT VERTICAL
+0x2927	0x2503	# BOX DRAWINGS HEAVY VERTICAL
+0x2928	0x2504	# BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+0x2929	0x2505	# BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+0x292A	0x2506	# BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+0x292B	0x2507	# BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+0x292C	0x2508	# BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+0x292D	0x2509	# BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+0x292E	0x250A	# BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+0x292F	0x250B	# BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+0x2930	0x250C	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+0x2931	0x250D	# BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+0x2932	0x250E	# BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+0x2933	0x250F	# BOX DRAWINGS HEAVY DOWN AND RIGHT
+0x2934	0x2510	# BOX DRAWINGS LIGHT DOWN AND LEFT
+0x2935	0x2511	# BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+0x2936	0x2512	# BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+0x2937	0x2513	# BOX DRAWINGS HEAVY DOWN AND LEFT
+0x2938	0x2514	# BOX DRAWINGS LIGHT UP AND RIGHT
+0x2939	0x2515	# BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+0x293A	0x2516	# BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+0x293B	0x2517	# BOX DRAWINGS HEAVY UP AND RIGHT
+0x293C	0x2518	# BOX DRAWINGS LIGHT UP AND LEFT
+0x293D	0x2519	# BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+0x293E	0x251A	# BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+0x293F	0x251B	# BOX DRAWINGS HEAVY UP AND LEFT
+0x2940	0x251C	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0x2941	0x251D	# BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+0x2942	0x251E	# BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+0x2943	0x251F	# BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+0x2944	0x2520	# BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+0x2945	0x2521	# BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+0x2946	0x2522	# BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+0x2947	0x2523	# BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+0x2948	0x2524	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0x2949	0x2525	# BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+0x294A	0x2526	# BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+0x294B	0x2527	# BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+0x294C	0x2528	# BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+0x294D	0x2529	# BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+0x294E	0x252A	# BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+0x294F	0x252B	# BOX DRAWINGS HEAVY VERTICAL AND LEFT
+0x2950	0x252C	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0x2951	0x252D	# BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+0x2952	0x252E	# BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+0x2953	0x252F	# BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+0x2954	0x2530	# BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+0x2955	0x2531	# BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+0x2956	0x2532	# BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+0x2957	0x2533	# BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+0x2958	0x2534	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0x2959	0x2535	# BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+0x295A	0x2536	# BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+0x295B	0x2537	# BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+0x295C	0x2538	# BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+0x295D	0x2539	# BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+0x295E	0x253A	# BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+0x295F	0x253B	# BOX DRAWINGS HEAVY UP AND HORIZONTAL
+0x2960	0x253C	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0x2961	0x253D	# BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+0x2962	0x253E	# BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+0x2963	0x253F	# BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+0x2964	0x2540	# BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+0x2965	0x2541	# BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+0x2966	0x2542	# BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+0x2967	0x2543	# BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+0x2968	0x2544	# BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+0x2969	0x2545	# BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+0x296A	0x2546	# BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+0x296B	0x2547	# BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+0x296C	0x2548	# BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+0x296D	0x2549	# BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+0x296E	0x254A	# BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+0x296F	0x254B	# BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+0x3021	0x554A	# <CJK>
+0x3022	0x963F	# <CJK>
+0x3023	0x57C3	# <CJK>
+0x3024	0x6328	# <CJK>
+0x3025	0x54CE	# <CJK>
+0x3026	0x5509	# <CJK>
+0x3027	0x54C0	# <CJK>
+0x3028	0x7691	# <CJK>
+0x3029	0x764C	# <CJK>
+0x302A	0x853C	# <CJK>
+0x302B	0x77EE	# <CJK>
+0x302C	0x827E	# <CJK>
+0x302D	0x788D	# <CJK>
+0x302E	0x7231	# <CJK>
+0x302F	0x9698	# <CJK>
+0x3030	0x978D	# <CJK>
+0x3031	0x6C28	# <CJK>
+0x3032	0x5B89	# <CJK>
+0x3033	0x4FFA	# <CJK>
+0x3034	0x6309	# <CJK>
+0x3035	0x6697	# <CJK>
+0x3036	0x5CB8	# <CJK>
+0x3037	0x80FA	# <CJK>
+0x3038	0x6848	# <CJK>
+0x3039	0x80AE	# <CJK>
+0x303A	0x6602	# <CJK>
+0x303B	0x76CE	# <CJK>
+0x303C	0x51F9	# <CJK>
+0x303D	0x6556	# <CJK>
+0x303E	0x71AC	# <CJK>
+0x303F	0x7FF1	# <CJK>
+0x3040	0x8884	# <CJK>
+0x3041	0x50B2	# <CJK>
+0x3042	0x5965	# <CJK>
+0x3043	0x61CA	# <CJK>
+0x3044	0x6FB3	# <CJK>
+0x3045	0x82AD	# <CJK>
+0x3046	0x634C	# <CJK>
+0x3047	0x6252	# <CJK>
+0x3048	0x53ED	# <CJK>
+0x3049	0x5427	# <CJK>
+0x304A	0x7B06	# <CJK>
+0x304B	0x516B	# <CJK>
+0x304C	0x75A4	# <CJK>
+0x304D	0x5DF4	# <CJK>
+0x304E	0x62D4	# <CJK>
+0x304F	0x8DCB	# <CJK>
+0x3050	0x9776	# <CJK>
+0x3051	0x628A	# <CJK>
+0x3052	0x8019	# <CJK>
+0x3053	0x575D	# <CJK>
+0x3054	0x9738	# <CJK>
+0x3055	0x7F62	# <CJK>
+0x3056	0x7238	# <CJK>
+0x3057	0x767D	# <CJK>
+0x3058	0x67CF	# <CJK>
+0x3059	0x767E	# <CJK>
+0x305A	0x6446	# <CJK>
+0x305B	0x4F70	# <CJK>
+0x305C	0x8D25	# <CJK>
+0x305D	0x62DC	# <CJK>
+0x305E	0x7A17	# <CJK>
+0x305F	0x6591	# <CJK>
+0x3060	0x73ED	# <CJK>
+0x3061	0x642C	# <CJK>
+0x3062	0x6273	# <CJK>
+0x3063	0x822C	# <CJK>
+0x3064	0x9881	# <CJK>
+0x3065	0x677F	# <CJK>
+0x3066	0x7248	# <CJK>
+0x3067	0x626E	# <CJK>
+0x3068	0x62CC	# <CJK>
+0x3069	0x4F34	# <CJK>
+0x306A	0x74E3	# <CJK>
+0x306B	0x534A	# <CJK>
+0x306C	0x529E	# <CJK>
+0x306D	0x7ECA	# <CJK>
+0x306E	0x90A6	# <CJK>
+0x306F	0x5E2E	# <CJK>
+0x3070	0x6886	# <CJK>
+0x3071	0x699C	# <CJK>
+0x3072	0x8180	# <CJK>
+0x3073	0x7ED1	# <CJK>
+0x3074	0x68D2	# <CJK>
+0x3075	0x78C5	# <CJK>
+0x3076	0x868C	# <CJK>
+0x3077	0x9551	# <CJK>
+0x3078	0x508D	# <CJK>
+0x3079	0x8C24	# <CJK>
+0x307A	0x82DE	# <CJK>
+0x307B	0x80DE	# <CJK>
+0x307C	0x5305	# <CJK>
+0x307D	0x8912	# <CJK>
+0x307E	0x5265	# <CJK>
+0x3121	0x8584	# <CJK>
+0x3122	0x96F9	# <CJK>
+0x3123	0x4FDD	# <CJK>
+0x3124	0x5821	# <CJK>
+0x3125	0x9971	# <CJK>
+0x3126	0x5B9D	# <CJK>
+0x3127	0x62B1	# <CJK>
+0x3128	0x62A5	# <CJK>
+0x3129	0x66B4	# <CJK>
+0x312A	0x8C79	# <CJK>
+0x312B	0x9C8D	# <CJK>
+0x312C	0x7206	# <CJK>
+0x312D	0x676F	# <CJK>
+0x312E	0x7891	# <CJK>
+0x312F	0x60B2	# <CJK>
+0x3130	0x5351	# <CJK>
+0x3131	0x5317	# <CJK>
+0x3132	0x8F88	# <CJK>
+0x3133	0x80CC	# <CJK>
+0x3134	0x8D1D	# <CJK>
+0x3135	0x94A1	# <CJK>
+0x3136	0x500D	# <CJK>
+0x3137	0x72C8	# <CJK>
+0x3138	0x5907	# <CJK>
+0x3139	0x60EB	# <CJK>
+0x313A	0x7119	# <CJK>
+0x313B	0x88AB	# <CJK>
+0x313C	0x5954	# <CJK>
+0x313D	0x82EF	# <CJK>
+0x313E	0x672C	# <CJK>
+0x313F	0x7B28	# <CJK>
+0x3140	0x5D29	# <CJK>
+0x3141	0x7EF7	# <CJK>
+0x3142	0x752D	# <CJK>
+0x3143	0x6CF5	# <CJK>
+0x3144	0x8E66	# <CJK>
+0x3145	0x8FF8	# <CJK>
+0x3146	0x903C	# <CJK>
+0x3147	0x9F3B	# <CJK>
+0x3148	0x6BD4	# <CJK>
+0x3149	0x9119	# <CJK>
+0x314A	0x7B14	# <CJK>
+0x314B	0x5F7C	# <CJK>
+0x314C	0x78A7	# <CJK>
+0x314D	0x84D6	# <CJK>
+0x314E	0x853D	# <CJK>
+0x314F	0x6BD5	# <CJK>
+0x3150	0x6BD9	# <CJK>
+0x3151	0x6BD6	# <CJK>
+0x3152	0x5E01	# <CJK>
+0x3153	0x5E87	# <CJK>
+0x3154	0x75F9	# <CJK>
+0x3155	0x95ED	# <CJK>
+0x3156	0x655D	# <CJK>
+0x3157	0x5F0A	# <CJK>
+0x3158	0x5FC5	# <CJK>
+0x3159	0x8F9F	# <CJK>
+0x315A	0x58C1	# <CJK>
+0x315B	0x81C2	# <CJK>
+0x315C	0x907F	# <CJK>
+0x315D	0x965B	# <CJK>
+0x315E	0x97AD	# <CJK>
+0x315F	0x8FB9	# <CJK>
+0x3160	0x7F16	# <CJK>
+0x3161	0x8D2C	# <CJK>
+0x3162	0x6241	# <CJK>
+0x3163	0x4FBF	# <CJK>
+0x3164	0x53D8	# <CJK>
+0x3165	0x535E	# <CJK>
+0x3166	0x8FA8	# <CJK>
+0x3167	0x8FA9	# <CJK>
+0x3168	0x8FAB	# <CJK>
+0x3169	0x904D	# <CJK>
+0x316A	0x6807	# <CJK>
+0x316B	0x5F6A	# <CJK>
+0x316C	0x8198	# <CJK>
+0x316D	0x8868	# <CJK>
+0x316E	0x9CD6	# <CJK>
+0x316F	0x618B	# <CJK>
+0x3170	0x522B	# <CJK>
+0x3171	0x762A	# <CJK>
+0x3172	0x5F6C	# <CJK>
+0x3173	0x658C	# <CJK>
+0x3174	0x6FD2	# <CJK>
+0x3175	0x6EE8	# <CJK>
+0x3176	0x5BBE	# <CJK>
+0x3177	0x6448	# <CJK>
+0x3178	0x5175	# <CJK>
+0x3179	0x51B0	# <CJK>
+0x317A	0x67C4	# <CJK>
+0x317B	0x4E19	# <CJK>
+0x317C	0x79C9	# <CJK>
+0x317D	0x997C	# <CJK>
+0x317E	0x70B3	# <CJK>
+0x3221	0x75C5	# <CJK>
+0x3222	0x5E76	# <CJK>
+0x3223	0x73BB	# <CJK>
+0x3224	0x83E0	# <CJK>
+0x3225	0x64AD	# <CJK>
+0x3226	0x62E8	# <CJK>
+0x3227	0x94B5	# <CJK>
+0x3228	0x6CE2	# <CJK>
+0x3229	0x535A	# <CJK>
+0x322A	0x52C3	# <CJK>
+0x322B	0x640F	# <CJK>
+0x322C	0x94C2	# <CJK>
+0x322D	0x7B94	# <CJK>
+0x322E	0x4F2F	# <CJK>
+0x322F	0x5E1B	# <CJK>
+0x3230	0x8236	# <CJK>
+0x3231	0x8116	# <CJK>
+0x3232	0x818A	# <CJK>
+0x3233	0x6E24	# <CJK>
+0x3234	0x6CCA	# <CJK>
+0x3235	0x9A73	# <CJK>
+0x3236	0x6355	# <CJK>
+0x3237	0x535C	# <CJK>
+0x3238	0x54FA	# <CJK>
+0x3239	0x8865	# <CJK>
+0x323A	0x57E0	# <CJK>
+0x323B	0x4E0D	# <CJK>
+0x323C	0x5E03	# <CJK>
+0x323D	0x6B65	# <CJK>
+0x323E	0x7C3F	# <CJK>
+0x323F	0x90E8	# <CJK>
+0x3240	0x6016	# <CJK>
+0x3241	0x64E6	# <CJK>
+0x3242	0x731C	# <CJK>
+0x3243	0x88C1	# <CJK>
+0x3244	0x6750	# <CJK>
+0x3245	0x624D	# <CJK>
+0x3246	0x8D22	# <CJK>
+0x3247	0x776C	# <CJK>
+0x3248	0x8E29	# <CJK>
+0x3249	0x91C7	# <CJK>
+0x324A	0x5F69	# <CJK>
+0x324B	0x83DC	# <CJK>
+0x324C	0x8521	# <CJK>
+0x324D	0x9910	# <CJK>
+0x324E	0x53C2	# <CJK>
+0x324F	0x8695	# <CJK>
+0x3250	0x6B8B	# <CJK>
+0x3251	0x60ED	# <CJK>
+0x3252	0x60E8	# <CJK>
+0x3253	0x707F	# <CJK>
+0x3254	0x82CD	# <CJK>
+0x3255	0x8231	# <CJK>
+0x3256	0x4ED3	# <CJK>
+0x3257	0x6CA7	# <CJK>
+0x3258	0x85CF	# <CJK>
+0x3259	0x64CD	# <CJK>
+0x325A	0x7CD9	# <CJK>
+0x325B	0x69FD	# <CJK>
+0x325C	0x66F9	# <CJK>
+0x325D	0x8349	# <CJK>
+0x325E	0x5395	# <CJK>
+0x325F	0x7B56	# <CJK>
+0x3260	0x4FA7	# <CJK>
+0x3261	0x518C	# <CJK>
+0x3262	0x6D4B	# <CJK>
+0x3263	0x5C42	# <CJK>
+0x3264	0x8E6D	# <CJK>
+0x3265	0x63D2	# <CJK>
+0x3266	0x53C9	# <CJK>
+0x3267	0x832C	# <CJK>
+0x3268	0x8336	# <CJK>
+0x3269	0x67E5	# <CJK>
+0x326A	0x78B4	# <CJK>
+0x326B	0x643D	# <CJK>
+0x326C	0x5BDF	# <CJK>
+0x326D	0x5C94	# <CJK>
+0x326E	0x5DEE	# <CJK>
+0x326F	0x8BE7	# <CJK>
+0x3270	0x62C6	# <CJK>
+0x3271	0x67F4	# <CJK>
+0x3272	0x8C7A	# <CJK>
+0x3273	0x6400	# <CJK>
+0x3274	0x63BA	# <CJK>
+0x3275	0x8749	# <CJK>
+0x3276	0x998B	# <CJK>
+0x3277	0x8C17	# <CJK>
+0x3278	0x7F20	# <CJK>
+0x3279	0x94F2	# <CJK>
+0x327A	0x4EA7	# <CJK>
+0x327B	0x9610	# <CJK>
+0x327C	0x98A4	# <CJK>
+0x327D	0x660C	# <CJK>
+0x327E	0x7316	# <CJK>
+0x3321	0x573A	# <CJK>
+0x3322	0x5C1D	# <CJK>
+0x3323	0x5E38	# <CJK>
+0x3324	0x957F	# <CJK>
+0x3325	0x507F	# <CJK>
+0x3326	0x80A0	# <CJK>
+0x3327	0x5382	# <CJK>
+0x3328	0x655E	# <CJK>
+0x3329	0x7545	# <CJK>
+0x332A	0x5531	# <CJK>
+0x332B	0x5021	# <CJK>
+0x332C	0x8D85	# <CJK>
+0x332D	0x6284	# <CJK>
+0x332E	0x949E	# <CJK>
+0x332F	0x671D	# <CJK>
+0x3330	0x5632	# <CJK>
+0x3331	0x6F6E	# <CJK>
+0x3332	0x5DE2	# <CJK>
+0x3333	0x5435	# <CJK>
+0x3334	0x7092	# <CJK>
+0x3335	0x8F66	# <CJK>
+0x3336	0x626F	# <CJK>
+0x3337	0x64A4	# <CJK>
+0x3338	0x63A3	# <CJK>
+0x3339	0x5F7B	# <CJK>
+0x333A	0x6F88	# <CJK>
+0x333B	0x90F4	# <CJK>
+0x333C	0x81E3	# <CJK>
+0x333D	0x8FB0	# <CJK>
+0x333E	0x5C18	# <CJK>
+0x333F	0x6668	# <CJK>
+0x3340	0x5FF1	# <CJK>
+0x3341	0x6C89	# <CJK>
+0x3342	0x9648	# <CJK>
+0x3343	0x8D81	# <CJK>
+0x3344	0x886C	# <CJK>
+0x3345	0x6491	# <CJK>
+0x3346	0x79F0	# <CJK>
+0x3347	0x57CE	# <CJK>
+0x3348	0x6A59	# <CJK>
+0x3349	0x6210	# <CJK>
+0x334A	0x5448	# <CJK>
+0x334B	0x4E58	# <CJK>
+0x334C	0x7A0B	# <CJK>
+0x334D	0x60E9	# <CJK>
+0x334E	0x6F84	# <CJK>
+0x334F	0x8BDA	# <CJK>
+0x3350	0x627F	# <CJK>
+0x3351	0x901E	# <CJK>
+0x3352	0x9A8B	# <CJK>
+0x3353	0x79E4	# <CJK>
+0x3354	0x5403	# <CJK>
+0x3355	0x75F4	# <CJK>
+0x3356	0x6301	# <CJK>
+0x3357	0x5319	# <CJK>
+0x3358	0x6C60	# <CJK>
+0x3359	0x8FDF	# <CJK>
+0x335A	0x5F1B	# <CJK>
+0x335B	0x9A70	# <CJK>
+0x335C	0x803B	# <CJK>
+0x335D	0x9F7F	# <CJK>
+0x335E	0x4F88	# <CJK>
+0x335F	0x5C3A	# <CJK>
+0x3360	0x8D64	# <CJK>
+0x3361	0x7FC5	# <CJK>
+0x3362	0x65A5	# <CJK>
+0x3363	0x70BD	# <CJK>
+0x3364	0x5145	# <CJK>
+0x3365	0x51B2	# <CJK>
+0x3366	0x866B	# <CJK>
+0x3367	0x5D07	# <CJK>
+0x3368	0x5BA0	# <CJK>
+0x3369	0x62BD	# <CJK>
+0x336A	0x916C	# <CJK>
+0x336B	0x7574	# <CJK>
+0x336C	0x8E0C	# <CJK>
+0x336D	0x7A20	# <CJK>
+0x336E	0x6101	# <CJK>
+0x336F	0x7B79	# <CJK>
+0x3370	0x4EC7	# <CJK>
+0x3371	0x7EF8	# <CJK>
+0x3372	0x7785	# <CJK>
+0x3373	0x4E11	# <CJK>
+0x3374	0x81ED	# <CJK>
+0x3375	0x521D	# <CJK>
+0x3376	0x51FA	# <CJK>
+0x3377	0x6A71	# <CJK>
+0x3378	0x53A8	# <CJK>
+0x3379	0x8E87	# <CJK>
+0x337A	0x9504	# <CJK>
+0x337B	0x96CF	# <CJK>
+0x337C	0x6EC1	# <CJK>
+0x337D	0x9664	# <CJK>
+0x337E	0x695A	# <CJK>
+0x3421	0x7840	# <CJK>
+0x3422	0x50A8	# <CJK>
+0x3423	0x77D7	# <CJK>
+0x3424	0x6410	# <CJK>
+0x3425	0x89E6	# <CJK>
+0x3426	0x5904	# <CJK>
+0x3427	0x63E3	# <CJK>
+0x3428	0x5DDD	# <CJK>
+0x3429	0x7A7F	# <CJK>
+0x342A	0x693D	# <CJK>
+0x342B	0x4F20	# <CJK>
+0x342C	0x8239	# <CJK>
+0x342D	0x5598	# <CJK>
+0x342E	0x4E32	# <CJK>
+0x342F	0x75AE	# <CJK>
+0x3430	0x7A97	# <CJK>
+0x3431	0x5E62	# <CJK>
+0x3432	0x5E8A	# <CJK>
+0x3433	0x95EF	# <CJK>
+0x3434	0x521B	# <CJK>
+0x3435	0x5439	# <CJK>
+0x3436	0x708A	# <CJK>
+0x3437	0x6376	# <CJK>
+0x3438	0x9524	# <CJK>
+0x3439	0x5782	# <CJK>
+0x343A	0x6625	# <CJK>
+0x343B	0x693F	# <CJK>
+0x343C	0x9187	# <CJK>
+0x343D	0x5507	# <CJK>
+0x343E	0x6DF3	# <CJK>
+0x343F	0x7EAF	# <CJK>
+0x3440	0x8822	# <CJK>
+0x3441	0x6233	# <CJK>
+0x3442	0x7EF0	# <CJK>
+0x3443	0x75B5	# <CJK>
+0x3444	0x8328	# <CJK>
+0x3445	0x78C1	# <CJK>
+0x3446	0x96CC	# <CJK>
+0x3447	0x8F9E	# <CJK>
+0x3448	0x6148	# <CJK>
+0x3449	0x74F7	# <CJK>
+0x344A	0x8BCD	# <CJK>
+0x344B	0x6B64	# <CJK>
+0x344C	0x523A	# <CJK>
+0x344D	0x8D50	# <CJK>
+0x344E	0x6B21	# <CJK>
+0x344F	0x806A	# <CJK>
+0x3450	0x8471	# <CJK>
+0x3451	0x56F1	# <CJK>
+0x3452	0x5306	# <CJK>
+0x3453	0x4ECE	# <CJK>
+0x3454	0x4E1B	# <CJK>
+0x3455	0x51D1	# <CJK>
+0x3456	0x7C97	# <CJK>
+0x3457	0x918B	# <CJK>
+0x3458	0x7C07	# <CJK>
+0x3459	0x4FC3	# <CJK>
+0x345A	0x8E7F	# <CJK>
+0x345B	0x7BE1	# <CJK>
+0x345C	0x7A9C	# <CJK>
+0x345D	0x6467	# <CJK>
+0x345E	0x5D14	# <CJK>
+0x345F	0x50AC	# <CJK>
+0x3460	0x8106	# <CJK>
+0x3461	0x7601	# <CJK>
+0x3462	0x7CB9	# <CJK>
+0x3463	0x6DEC	# <CJK>
+0x3464	0x7FE0	# <CJK>
+0x3465	0x6751	# <CJK>
+0x3466	0x5B58	# <CJK>
+0x3467	0x5BF8	# <CJK>
+0x3468	0x78CB	# <CJK>
+0x3469	0x64AE	# <CJK>
+0x346A	0x6413	# <CJK>
+0x346B	0x63AA	# <CJK>
+0x346C	0x632B	# <CJK>
+0x346D	0x9519	# <CJK>
+0x346E	0x642D	# <CJK>
+0x346F	0x8FBE	# <CJK>
+0x3470	0x7B54	# <CJK>
+0x3471	0x7629	# <CJK>
+0x3472	0x6253	# <CJK>
+0x3473	0x5927	# <CJK>
+0x3474	0x5446	# <CJK>
+0x3475	0x6B79	# <CJK>
+0x3476	0x50A3	# <CJK>
+0x3477	0x6234	# <CJK>
+0x3478	0x5E26	# <CJK>
+0x3479	0x6B86	# <CJK>
+0x347A	0x4EE3	# <CJK>
+0x347B	0x8D37	# <CJK>
+0x347C	0x888B	# <CJK>
+0x347D	0x5F85	# <CJK>
+0x347E	0x902E	# <CJK>
+0x3521	0x6020	# <CJK>
+0x3522	0x803D	# <CJK>
+0x3523	0x62C5	# <CJK>
+0x3524	0x4E39	# <CJK>
+0x3525	0x5355	# <CJK>
+0x3526	0x90F8	# <CJK>
+0x3527	0x63B8	# <CJK>
+0x3528	0x80C6	# <CJK>
+0x3529	0x65E6	# <CJK>
+0x352A	0x6C2E	# <CJK>
+0x352B	0x4F46	# <CJK>
+0x352C	0x60EE	# <CJK>
+0x352D	0x6DE1	# <CJK>
+0x352E	0x8BDE	# <CJK>
+0x352F	0x5F39	# <CJK>
+0x3530	0x86CB	# <CJK>
+0x3531	0x5F53	# <CJK>
+0x3532	0x6321	# <CJK>
+0x3533	0x515A	# <CJK>
+0x3534	0x8361	# <CJK>
+0x3535	0x6863	# <CJK>
+0x3536	0x5200	# <CJK>
+0x3537	0x6363	# <CJK>
+0x3538	0x8E48	# <CJK>
+0x3539	0x5012	# <CJK>
+0x353A	0x5C9B	# <CJK>
+0x353B	0x7977	# <CJK>
+0x353C	0x5BFC	# <CJK>
+0x353D	0x5230	# <CJK>
+0x353E	0x7A3B	# <CJK>
+0x353F	0x60BC	# <CJK>
+0x3540	0x9053	# <CJK>
+0x3541	0x76D7	# <CJK>
+0x3542	0x5FB7	# <CJK>
+0x3543	0x5F97	# <CJK>
+0x3544	0x7684	# <CJK>
+0x3545	0x8E6C	# <CJK>
+0x3546	0x706F	# <CJK>
+0x3547	0x767B	# <CJK>
+0x3548	0x7B49	# <CJK>
+0x3549	0x77AA	# <CJK>
+0x354A	0x51F3	# <CJK>
+0x354B	0x9093	# <CJK>
+0x354C	0x5824	# <CJK>
+0x354D	0x4F4E	# <CJK>
+0x354E	0x6EF4	# <CJK>
+0x354F	0x8FEA	# <CJK>
+0x3550	0x654C	# <CJK>
+0x3551	0x7B1B	# <CJK>
+0x3552	0x72C4	# <CJK>
+0x3553	0x6DA4	# <CJK>
+0x3554	0x7FDF	# <CJK>
+0x3555	0x5AE1	# <CJK>
+0x3556	0x62B5	# <CJK>
+0x3557	0x5E95	# <CJK>
+0x3558	0x5730	# <CJK>
+0x3559	0x8482	# <CJK>
+0x355A	0x7B2C	# <CJK>
+0x355B	0x5E1D	# <CJK>
+0x355C	0x5F1F	# <CJK>
+0x355D	0x9012	# <CJK>
+0x355E	0x7F14	# <CJK>
+0x355F	0x98A0	# <CJK>
+0x3560	0x6382	# <CJK>
+0x3561	0x6EC7	# <CJK>
+0x3562	0x7898	# <CJK>
+0x3563	0x70B9	# <CJK>
+0x3564	0x5178	# <CJK>
+0x3565	0x975B	# <CJK>
+0x3566	0x57AB	# <CJK>
+0x3567	0x7535	# <CJK>
+0x3568	0x4F43	# <CJK>
+0x3569	0x7538	# <CJK>
+0x356A	0x5E97	# <CJK>
+0x356B	0x60E6	# <CJK>
+0x356C	0x5960	# <CJK>
+0x356D	0x6DC0	# <CJK>
+0x356E	0x6BBF	# <CJK>
+0x356F	0x7889	# <CJK>
+0x3570	0x53FC	# <CJK>
+0x3571	0x96D5	# <CJK>
+0x3572	0x51CB	# <CJK>
+0x3573	0x5201	# <CJK>
+0x3574	0x6389	# <CJK>
+0x3575	0x540A	# <CJK>
+0x3576	0x9493	# <CJK>
+0x3577	0x8C03	# <CJK>
+0x3578	0x8DCC	# <CJK>
+0x3579	0x7239	# <CJK>
+0x357A	0x789F	# <CJK>
+0x357B	0x8776	# <CJK>
+0x357C	0x8FED	# <CJK>
+0x357D	0x8C0D	# <CJK>
+0x357E	0x53E0	# <CJK>
+0x3621	0x4E01	# <CJK>
+0x3622	0x76EF	# <CJK>
+0x3623	0x53EE	# <CJK>
+0x3624	0x9489	# <CJK>
+0x3625	0x9876	# <CJK>
+0x3626	0x9F0E	# <CJK>
+0x3627	0x952D	# <CJK>
+0x3628	0x5B9A	# <CJK>
+0x3629	0x8BA2	# <CJK>
+0x362A	0x4E22	# <CJK>
+0x362B	0x4E1C	# <CJK>
+0x362C	0x51AC	# <CJK>
+0x362D	0x8463	# <CJK>
+0x362E	0x61C2	# <CJK>
+0x362F	0x52A8	# <CJK>
+0x3630	0x680B	# <CJK>
+0x3631	0x4F97	# <CJK>
+0x3632	0x606B	# <CJK>
+0x3633	0x51BB	# <CJK>
+0x3634	0x6D1E	# <CJK>
+0x3635	0x515C	# <CJK>
+0x3636	0x6296	# <CJK>
+0x3637	0x6597	# <CJK>
+0x3638	0x9661	# <CJK>
+0x3639	0x8C46	# <CJK>
+0x363A	0x9017	# <CJK>
+0x363B	0x75D8	# <CJK>
+0x363C	0x90FD	# <CJK>
+0x363D	0x7763	# <CJK>
+0x363E	0x6BD2	# <CJK>
+0x363F	0x728A	# <CJK>
+0x3640	0x72EC	# <CJK>
+0x3641	0x8BFB	# <CJK>
+0x3642	0x5835	# <CJK>
+0x3643	0x7779	# <CJK>
+0x3644	0x8D4C	# <CJK>
+0x3645	0x675C	# <CJK>
+0x3646	0x9540	# <CJK>
+0x3647	0x809A	# <CJK>
+0x3648	0x5EA6	# <CJK>
+0x3649	0x6E21	# <CJK>
+0x364A	0x5992	# <CJK>
+0x364B	0x7AEF	# <CJK>
+0x364C	0x77ED	# <CJK>
+0x364D	0x953B	# <CJK>
+0x364E	0x6BB5	# <CJK>
+0x364F	0x65AD	# <CJK>
+0x3650	0x7F0E	# <CJK>
+0x3651	0x5806	# <CJK>
+0x3652	0x5151	# <CJK>
+0x3653	0x961F	# <CJK>
+0x3654	0x5BF9	# <CJK>
+0x3655	0x58A9	# <CJK>
+0x3656	0x5428	# <CJK>
+0x3657	0x8E72	# <CJK>
+0x3658	0x6566	# <CJK>
+0x3659	0x987F	# <CJK>
+0x365A	0x56E4	# <CJK>
+0x365B	0x949D	# <CJK>
+0x365C	0x76FE	# <CJK>
+0x365D	0x9041	# <CJK>
+0x365E	0x6387	# <CJK>
+0x365F	0x54C6	# <CJK>
+0x3660	0x591A	# <CJK>
+0x3661	0x593A	# <CJK>
+0x3662	0x579B	# <CJK>
+0x3663	0x8EB2	# <CJK>
+0x3664	0x6735	# <CJK>
+0x3665	0x8DFA	# <CJK>
+0x3666	0x8235	# <CJK>
+0x3667	0x5241	# <CJK>
+0x3668	0x60F0	# <CJK>
+0x3669	0x5815	# <CJK>
+0x366A	0x86FE	# <CJK>
+0x366B	0x5CE8	# <CJK>
+0x366C	0x9E45	# <CJK>
+0x366D	0x4FC4	# <CJK>
+0x366E	0x989D	# <CJK>
+0x366F	0x8BB9	# <CJK>
+0x3670	0x5A25	# <CJK>
+0x3671	0x6076	# <CJK>
+0x3672	0x5384	# <CJK>
+0x3673	0x627C	# <CJK>
+0x3674	0x904F	# <CJK>
+0x3675	0x9102	# <CJK>
+0x3676	0x997F	# <CJK>
+0x3677	0x6069	# <CJK>
+0x3678	0x800C	# <CJK>
+0x3679	0x513F	# <CJK>
+0x367A	0x8033	# <CJK>
+0x367B	0x5C14	# <CJK>
+0x367C	0x9975	# <CJK>
+0x367D	0x6D31	# <CJK>
+0x367E	0x4E8C	# <CJK>
+0x3721	0x8D30	# <CJK>
+0x3722	0x53D1	# <CJK>
+0x3723	0x7F5A	# <CJK>
+0x3724	0x7B4F	# <CJK>
+0x3725	0x4F10	# <CJK>
+0x3726	0x4E4F	# <CJK>
+0x3727	0x9600	# <CJK>
+0x3728	0x6CD5	# <CJK>
+0x3729	0x73D0	# <CJK>
+0x372A	0x85E9	# <CJK>
+0x372B	0x5E06	# <CJK>
+0x372C	0x756A	# <CJK>
+0x372D	0x7FFB	# <CJK>
+0x372E	0x6A0A	# <CJK>
+0x372F	0x77FE	# <CJK>
+0x3730	0x9492	# <CJK>
+0x3731	0x7E41	# <CJK>
+0x3732	0x51E1	# <CJK>
+0x3733	0x70E6	# <CJK>
+0x3734	0x53CD	# <CJK>
+0x3735	0x8FD4	# <CJK>
+0x3736	0x8303	# <CJK>
+0x3737	0x8D29	# <CJK>
+0x3738	0x72AF	# <CJK>
+0x3739	0x996D	# <CJK>
+0x373A	0x6CDB	# <CJK>
+0x373B	0x574A	# <CJK>
+0x373C	0x82B3	# <CJK>
+0x373D	0x65B9	# <CJK>
+0x373E	0x80AA	# <CJK>
+0x373F	0x623F	# <CJK>
+0x3740	0x9632	# <CJK>
+0x3741	0x59A8	# <CJK>
+0x3742	0x4EFF	# <CJK>
+0x3743	0x8BBF	# <CJK>
+0x3744	0x7EBA	# <CJK>
+0x3745	0x653E	# <CJK>
+0x3746	0x83F2	# <CJK>
+0x3747	0x975E	# <CJK>
+0x3748	0x5561	# <CJK>
+0x3749	0x98DE	# <CJK>
+0x374A	0x80A5	# <CJK>
+0x374B	0x532A	# <CJK>
+0x374C	0x8BFD	# <CJK>
+0x374D	0x5420	# <CJK>
+0x374E	0x80BA	# <CJK>
+0x374F	0x5E9F	# <CJK>
+0x3750	0x6CB8	# <CJK>
+0x3751	0x8D39	# <CJK>
+0x3752	0x82AC	# <CJK>
+0x3753	0x915A	# <CJK>
+0x3754	0x5429	# <CJK>
+0x3755	0x6C1B	# <CJK>
+0x3756	0x5206	# <CJK>
+0x3757	0x7EB7	# <CJK>
+0x3758	0x575F	# <CJK>
+0x3759	0x711A	# <CJK>
+0x375A	0x6C7E	# <CJK>
+0x375B	0x7C89	# <CJK>
+0x375C	0x594B	# <CJK>
+0x375D	0x4EFD	# <CJK>
+0x375E	0x5FFF	# <CJK>
+0x375F	0x6124	# <CJK>
+0x3760	0x7CAA	# <CJK>
+0x3761	0x4E30	# <CJK>
+0x3762	0x5C01	# <CJK>
+0x3763	0x67AB	# <CJK>
+0x3764	0x8702	# <CJK>
+0x3765	0x5CF0	# <CJK>
+0x3766	0x950B	# <CJK>
+0x3767	0x98CE	# <CJK>
+0x3768	0x75AF	# <CJK>
+0x3769	0x70FD	# <CJK>
+0x376A	0x9022	# <CJK>
+0x376B	0x51AF	# <CJK>
+0x376C	0x7F1D	# <CJK>
+0x376D	0x8BBD	# <CJK>
+0x376E	0x5949	# <CJK>
+0x376F	0x51E4	# <CJK>
+0x3770	0x4F5B	# <CJK>
+0x3771	0x5426	# <CJK>
+0x3772	0x592B	# <CJK>
+0x3773	0x6577	# <CJK>
+0x3774	0x80A4	# <CJK>
+0x3775	0x5B75	# <CJK>
+0x3776	0x6276	# <CJK>
+0x3777	0x62C2	# <CJK>
+0x3778	0x8F90	# <CJK>
+0x3779	0x5E45	# <CJK>
+0x377A	0x6C1F	# <CJK>
+0x377B	0x7B26	# <CJK>
+0x377C	0x4F0F	# <CJK>
+0x377D	0x4FD8	# <CJK>
+0x377E	0x670D	# <CJK>
+0x3821	0x6D6E	# <CJK>
+0x3822	0x6DAA	# <CJK>
+0x3823	0x798F	# <CJK>
+0x3824	0x88B1	# <CJK>
+0x3825	0x5F17	# <CJK>
+0x3826	0x752B	# <CJK>
+0x3827	0x629A	# <CJK>
+0x3828	0x8F85	# <CJK>
+0x3829	0x4FEF	# <CJK>
+0x382A	0x91DC	# <CJK>
+0x382B	0x65A7	# <CJK>
+0x382C	0x812F	# <CJK>
+0x382D	0x8151	# <CJK>
+0x382E	0x5E9C	# <CJK>
+0x382F	0x8150	# <CJK>
+0x3830	0x8D74	# <CJK>
+0x3831	0x526F	# <CJK>
+0x3832	0x8986	# <CJK>
+0x3833	0x8D4B	# <CJK>
+0x3834	0x590D	# <CJK>
+0x3835	0x5085	# <CJK>
+0x3836	0x4ED8	# <CJK>
+0x3837	0x961C	# <CJK>
+0x3838	0x7236	# <CJK>
+0x3839	0x8179	# <CJK>
+0x383A	0x8D1F	# <CJK>
+0x383B	0x5BCC	# <CJK>
+0x383C	0x8BA3	# <CJK>
+0x383D	0x9644	# <CJK>
+0x383E	0x5987	# <CJK>
+0x383F	0x7F1A	# <CJK>
+0x3840	0x5490	# <CJK>
+0x3841	0x5676	# <CJK>
+0x3842	0x560E	# <CJK>
+0x3843	0x8BE5	# <CJK>
+0x3844	0x6539	# <CJK>
+0x3845	0x6982	# <CJK>
+0x3846	0x9499	# <CJK>
+0x3847	0x76D6	# <CJK>
+0x3848	0x6E89	# <CJK>
+0x3849	0x5E72	# <CJK>
+0x384A	0x7518	# <CJK>
+0x384B	0x6746	# <CJK>
+0x384C	0x67D1	# <CJK>
+0x384D	0x7AFF	# <CJK>
+0x384E	0x809D	# <CJK>
+0x384F	0x8D76	# <CJK>
+0x3850	0x611F	# <CJK>
+0x3851	0x79C6	# <CJK>
+0x3852	0x6562	# <CJK>
+0x3853	0x8D63	# <CJK>
+0x3854	0x5188	# <CJK>
+0x3855	0x521A	# <CJK>
+0x3856	0x94A2	# <CJK>
+0x3857	0x7F38	# <CJK>
+0x3858	0x809B	# <CJK>
+0x3859	0x7EB2	# <CJK>
+0x385A	0x5C97	# <CJK>
+0x385B	0x6E2F	# <CJK>
+0x385C	0x6760	# <CJK>
+0x385D	0x7BD9	# <CJK>
+0x385E	0x768B	# <CJK>
+0x385F	0x9AD8	# <CJK>
+0x3860	0x818F	# <CJK>
+0x3861	0x7F94	# <CJK>
+0x3862	0x7CD5	# <CJK>
+0x3863	0x641E	# <CJK>
+0x3864	0x9550	# <CJK>
+0x3865	0x7A3F	# <CJK>
+0x3866	0x544A	# <CJK>
+0x3867	0x54E5	# <CJK>
+0x3868	0x6B4C	# <CJK>
+0x3869	0x6401	# <CJK>
+0x386A	0x6208	# <CJK>
+0x386B	0x9E3D	# <CJK>
+0x386C	0x80F3	# <CJK>
+0x386D	0x7599	# <CJK>
+0x386E	0x5272	# <CJK>
+0x386F	0x9769	# <CJK>
+0x3870	0x845B	# <CJK>
+0x3871	0x683C	# <CJK>
+0x3872	0x86E4	# <CJK>
+0x3873	0x9601	# <CJK>
+0x3874	0x9694	# <CJK>
+0x3875	0x94EC	# <CJK>
+0x3876	0x4E2A	# <CJK>
+0x3877	0x5404	# <CJK>
+0x3878	0x7ED9	# <CJK>
+0x3879	0x6839	# <CJK>
+0x387A	0x8DDF	# <CJK>
+0x387B	0x8015	# <CJK>
+0x387C	0x66F4	# <CJK>
+0x387D	0x5E9A	# <CJK>
+0x387E	0x7FB9	# <CJK>
+0x3921	0x57C2	# <CJK>
+0x3922	0x803F	# <CJK>
+0x3923	0x6897	# <CJK>
+0x3924	0x5DE5	# <CJK>
+0x3925	0x653B	# <CJK>
+0x3926	0x529F	# <CJK>
+0x3927	0x606D	# <CJK>
+0x3928	0x9F9A	# <CJK>
+0x3929	0x4F9B	# <CJK>
+0x392A	0x8EAC	# <CJK>
+0x392B	0x516C	# <CJK>
+0x392C	0x5BAB	# <CJK>
+0x392D	0x5F13	# <CJK>
+0x392E	0x5DE9	# <CJK>
+0x392F	0x6C5E	# <CJK>
+0x3930	0x62F1	# <CJK>
+0x3931	0x8D21	# <CJK>
+0x3932	0x5171	# <CJK>
+0x3933	0x94A9	# <CJK>
+0x3934	0x52FE	# <CJK>
+0x3935	0x6C9F	# <CJK>
+0x3936	0x82DF	# <CJK>
+0x3937	0x72D7	# <CJK>
+0x3938	0x57A2	# <CJK>
+0x3939	0x6784	# <CJK>
+0x393A	0x8D2D	# <CJK>
+0x393B	0x591F	# <CJK>
+0x393C	0x8F9C	# <CJK>
+0x393D	0x83C7	# <CJK>
+0x393E	0x5495	# <CJK>
+0x393F	0x7B8D	# <CJK>
+0x3940	0x4F30	# <CJK>
+0x3941	0x6CBD	# <CJK>
+0x3942	0x5B64	# <CJK>
+0x3943	0x59D1	# <CJK>
+0x3944	0x9F13	# <CJK>
+0x3945	0x53E4	# <CJK>
+0x3946	0x86CA	# <CJK>
+0x3947	0x9AA8	# <CJK>
+0x3948	0x8C37	# <CJK>
+0x3949	0x80A1	# <CJK>
+0x394A	0x6545	# <CJK>
+0x394B	0x987E	# <CJK>
+0x394C	0x56FA	# <CJK>
+0x394D	0x96C7	# <CJK>
+0x394E	0x522E	# <CJK>
+0x394F	0x74DC	# <CJK>
+0x3950	0x5250	# <CJK>
+0x3951	0x5BE1	# <CJK>
+0x3952	0x6302	# <CJK>
+0x3953	0x8902	# <CJK>
+0x3954	0x4E56	# <CJK>
+0x3955	0x62D0	# <CJK>
+0x3956	0x602A	# <CJK>
+0x3957	0x68FA	# <CJK>
+0x3958	0x5173	# <CJK>
+0x3959	0x5B98	# <CJK>
+0x395A	0x51A0	# <CJK>
+0x395B	0x89C2	# <CJK>
+0x395C	0x7BA1	# <CJK>
+0x395D	0x9986	# <CJK>
+0x395E	0x7F50	# <CJK>
+0x395F	0x60EF	# <CJK>
+0x3960	0x704C	# <CJK>
+0x3961	0x8D2F	# <CJK>
+0x3962	0x5149	# <CJK>
+0x3963	0x5E7F	# <CJK>
+0x3964	0x901B	# <CJK>
+0x3965	0x7470	# <CJK>
+0x3966	0x89C4	# <CJK>
+0x3967	0x572D	# <CJK>
+0x3968	0x7845	# <CJK>
+0x3969	0x5F52	# <CJK>
+0x396A	0x9F9F	# <CJK>
+0x396B	0x95FA	# <CJK>
+0x396C	0x8F68	# <CJK>
+0x396D	0x9B3C	# <CJK>
+0x396E	0x8BE1	# <CJK>
+0x396F	0x7678	# <CJK>
+0x3970	0x6842	# <CJK>
+0x3971	0x67DC	# <CJK>
+0x3972	0x8DEA	# <CJK>
+0x3973	0x8D35	# <CJK>
+0x3974	0x523D	# <CJK>
+0x3975	0x8F8A	# <CJK>
+0x3976	0x6EDA	# <CJK>
+0x3977	0x68CD	# <CJK>
+0x3978	0x9505	# <CJK>
+0x3979	0x90ED	# <CJK>
+0x397A	0x56FD	# <CJK>
+0x397B	0x679C	# <CJK>
+0x397C	0x88F9	# <CJK>
+0x397D	0x8FC7	# <CJK>
+0x397E	0x54C8	# <CJK>
+0x3A21	0x9AB8	# <CJK>
+0x3A22	0x5B69	# <CJK>
+0x3A23	0x6D77	# <CJK>
+0x3A24	0x6C26	# <CJK>
+0x3A25	0x4EA5	# <CJK>
+0x3A26	0x5BB3	# <CJK>
+0x3A27	0x9A87	# <CJK>
+0x3A28	0x9163	# <CJK>
+0x3A29	0x61A8	# <CJK>
+0x3A2A	0x90AF	# <CJK>
+0x3A2B	0x97E9	# <CJK>
+0x3A2C	0x542B	# <CJK>
+0x3A2D	0x6DB5	# <CJK>
+0x3A2E	0x5BD2	# <CJK>
+0x3A2F	0x51FD	# <CJK>
+0x3A30	0x558A	# <CJK>
+0x3A31	0x7F55	# <CJK>
+0x3A32	0x7FF0	# <CJK>
+0x3A33	0x64BC	# <CJK>
+0x3A34	0x634D	# <CJK>
+0x3A35	0x65F1	# <CJK>
+0x3A36	0x61BE	# <CJK>
+0x3A37	0x608D	# <CJK>
+0x3A38	0x710A	# <CJK>
+0x3A39	0x6C57	# <CJK>
+0x3A3A	0x6C49	# <CJK>
+0x3A3B	0x592F	# <CJK>
+0x3A3C	0x676D	# <CJK>
+0x3A3D	0x822A	# <CJK>
+0x3A3E	0x58D5	# <CJK>
+0x3A3F	0x568E	# <CJK>
+0x3A40	0x8C6A	# <CJK>
+0x3A41	0x6BEB	# <CJK>
+0x3A42	0x90DD	# <CJK>
+0x3A43	0x597D	# <CJK>
+0x3A44	0x8017	# <CJK>
+0x3A45	0x53F7	# <CJK>
+0x3A46	0x6D69	# <CJK>
+0x3A47	0x5475	# <CJK>
+0x3A48	0x559D	# <CJK>
+0x3A49	0x8377	# <CJK>
+0x3A4A	0x83CF	# <CJK>
+0x3A4B	0x6838	# <CJK>
+0x3A4C	0x79BE	# <CJK>
+0x3A4D	0x548C	# <CJK>
+0x3A4E	0x4F55	# <CJK>
+0x3A4F	0x5408	# <CJK>
+0x3A50	0x76D2	# <CJK>
+0x3A51	0x8C89	# <CJK>
+0x3A52	0x9602	# <CJK>
+0x3A53	0x6CB3	# <CJK>
+0x3A54	0x6DB8	# <CJK>
+0x3A55	0x8D6B	# <CJK>
+0x3A56	0x8910	# <CJK>
+0x3A57	0x9E64	# <CJK>
+0x3A58	0x8D3A	# <CJK>
+0x3A59	0x563F	# <CJK>
+0x3A5A	0x9ED1	# <CJK>
+0x3A5B	0x75D5	# <CJK>
+0x3A5C	0x5F88	# <CJK>
+0x3A5D	0x72E0	# <CJK>
+0x3A5E	0x6068	# <CJK>
+0x3A5F	0x54FC	# <CJK>
+0x3A60	0x4EA8	# <CJK>
+0x3A61	0x6A2A	# <CJK>
+0x3A62	0x8861	# <CJK>
+0x3A63	0x6052	# <CJK>
+0x3A64	0x8F70	# <CJK>
+0x3A65	0x54C4	# <CJK>
+0x3A66	0x70D8	# <CJK>
+0x3A67	0x8679	# <CJK>
+0x3A68	0x9E3F	# <CJK>
+0x3A69	0x6D2A	# <CJK>
+0x3A6A	0x5B8F	# <CJK>
+0x3A6B	0x5F18	# <CJK>
+0x3A6C	0x7EA2	# <CJK>
+0x3A6D	0x5589	# <CJK>
+0x3A6E	0x4FAF	# <CJK>
+0x3A6F	0x7334	# <CJK>
+0x3A70	0x543C	# <CJK>
+0x3A71	0x539A	# <CJK>
+0x3A72	0x5019	# <CJK>
+0x3A73	0x540E	# <CJK>
+0x3A74	0x547C	# <CJK>
+0x3A75	0x4E4E	# <CJK>
+0x3A76	0x5FFD	# <CJK>
+0x3A77	0x745A	# <CJK>
+0x3A78	0x58F6	# <CJK>
+0x3A79	0x846B	# <CJK>
+0x3A7A	0x80E1	# <CJK>
+0x3A7B	0x8774	# <CJK>
+0x3A7C	0x72D0	# <CJK>
+0x3A7D	0x7CCA	# <CJK>
+0x3A7E	0x6E56	# <CJK>
+0x3B21	0x5F27	# <CJK>
+0x3B22	0x864E	# <CJK>
+0x3B23	0x552C	# <CJK>
+0x3B24	0x62A4	# <CJK>
+0x3B25	0x4E92	# <CJK>
+0x3B26	0x6CAA	# <CJK>
+0x3B27	0x6237	# <CJK>
+0x3B28	0x82B1	# <CJK>
+0x3B29	0x54D7	# <CJK>
+0x3B2A	0x534E	# <CJK>
+0x3B2B	0x733E	# <CJK>
+0x3B2C	0x6ED1	# <CJK>
+0x3B2D	0x753B	# <CJK>
+0x3B2E	0x5212	# <CJK>
+0x3B2F	0x5316	# <CJK>
+0x3B30	0x8BDD	# <CJK>
+0x3B31	0x69D0	# <CJK>
+0x3B32	0x5F8A	# <CJK>
+0x3B33	0x6000	# <CJK>
+0x3B34	0x6DEE	# <CJK>
+0x3B35	0x574F	# <CJK>
+0x3B36	0x6B22	# <CJK>
+0x3B37	0x73AF	# <CJK>
+0x3B38	0x6853	# <CJK>
+0x3B39	0x8FD8	# <CJK>
+0x3B3A	0x7F13	# <CJK>
+0x3B3B	0x6362	# <CJK>
+0x3B3C	0x60A3	# <CJK>
+0x3B3D	0x5524	# <CJK>
+0x3B3E	0x75EA	# <CJK>
+0x3B3F	0x8C62	# <CJK>
+0x3B40	0x7115	# <CJK>
+0x3B41	0x6DA3	# <CJK>
+0x3B42	0x5BA6	# <CJK>
+0x3B43	0x5E7B	# <CJK>
+0x3B44	0x8352	# <CJK>
+0x3B45	0x614C	# <CJK>
+0x3B46	0x9EC4	# <CJK>
+0x3B47	0x78FA	# <CJK>
+0x3B48	0x8757	# <CJK>
+0x3B49	0x7C27	# <CJK>
+0x3B4A	0x7687	# <CJK>
+0x3B4B	0x51F0	# <CJK>
+0x3B4C	0x60F6	# <CJK>
+0x3B4D	0x714C	# <CJK>
+0x3B4E	0x6643	# <CJK>
+0x3B4F	0x5E4C	# <CJK>
+0x3B50	0x604D	# <CJK>
+0x3B51	0x8C0E	# <CJK>
+0x3B52	0x7070	# <CJK>
+0x3B53	0x6325	# <CJK>
+0x3B54	0x8F89	# <CJK>
+0x3B55	0x5FBD	# <CJK>
+0x3B56	0x6062	# <CJK>
+0x3B57	0x86D4	# <CJK>
+0x3B58	0x56DE	# <CJK>
+0x3B59	0x6BC1	# <CJK>
+0x3B5A	0x6094	# <CJK>
+0x3B5B	0x6167	# <CJK>
+0x3B5C	0x5349	# <CJK>
+0x3B5D	0x60E0	# <CJK>
+0x3B5E	0x6666	# <CJK>
+0x3B5F	0x8D3F	# <CJK>
+0x3B60	0x79FD	# <CJK>
+0x3B61	0x4F1A	# <CJK>
+0x3B62	0x70E9	# <CJK>
+0x3B63	0x6C47	# <CJK>
+0x3B64	0x8BB3	# <CJK>
+0x3B65	0x8BF2	# <CJK>
+0x3B66	0x7ED8	# <CJK>
+0x3B67	0x8364	# <CJK>
+0x3B68	0x660F	# <CJK>
+0x3B69	0x5A5A	# <CJK>
+0x3B6A	0x9B42	# <CJK>
+0x3B6B	0x6D51	# <CJK>
+0x3B6C	0x6DF7	# <CJK>
+0x3B6D	0x8C41	# <CJK>
+0x3B6E	0x6D3B	# <CJK>
+0x3B6F	0x4F19	# <CJK>
+0x3B70	0x706B	# <CJK>
+0x3B71	0x83B7	# <CJK>
+0x3B72	0x6216	# <CJK>
+0x3B73	0x60D1	# <CJK>
+0x3B74	0x970D	# <CJK>
+0x3B75	0x8D27	# <CJK>
+0x3B76	0x7978	# <CJK>
+0x3B77	0x51FB	# <CJK>
+0x3B78	0x573E	# <CJK>
+0x3B79	0x57FA	# <CJK>
+0x3B7A	0x673A	# <CJK>
+0x3B7B	0x7578	# <CJK>
+0x3B7C	0x7A3D	# <CJK>
+0x3B7D	0x79EF	# <CJK>
+0x3B7E	0x7B95	# <CJK>
+0x3C21	0x808C	# <CJK>
+0x3C22	0x9965	# <CJK>
+0x3C23	0x8FF9	# <CJK>
+0x3C24	0x6FC0	# <CJK>
+0x3C25	0x8BA5	# <CJK>
+0x3C26	0x9E21	# <CJK>
+0x3C27	0x59EC	# <CJK>
+0x3C28	0x7EE9	# <CJK>
+0x3C29	0x7F09	# <CJK>
+0x3C2A	0x5409	# <CJK>
+0x3C2B	0x6781	# <CJK>
+0x3C2C	0x68D8	# <CJK>
+0x3C2D	0x8F91	# <CJK>
+0x3C2E	0x7C4D	# <CJK>
+0x3C2F	0x96C6	# <CJK>
+0x3C30	0x53CA	# <CJK>
+0x3C31	0x6025	# <CJK>
+0x3C32	0x75BE	# <CJK>
+0x3C33	0x6C72	# <CJK>
+0x3C34	0x5373	# <CJK>
+0x3C35	0x5AC9	# <CJK>
+0x3C36	0x7EA7	# <CJK>
+0x3C37	0x6324	# <CJK>
+0x3C38	0x51E0	# <CJK>
+0x3C39	0x810A	# <CJK>
+0x3C3A	0x5DF1	# <CJK>
+0x3C3B	0x84DF	# <CJK>
+0x3C3C	0x6280	# <CJK>
+0x3C3D	0x5180	# <CJK>
+0x3C3E	0x5B63	# <CJK>
+0x3C3F	0x4F0E	# <CJK>
+0x3C40	0x796D	# <CJK>
+0x3C41	0x5242	# <CJK>
+0x3C42	0x60B8	# <CJK>
+0x3C43	0x6D4E	# <CJK>
+0x3C44	0x5BC4	# <CJK>
+0x3C45	0x5BC2	# <CJK>
+0x3C46	0x8BA1	# <CJK>
+0x3C47	0x8BB0	# <CJK>
+0x3C48	0x65E2	# <CJK>
+0x3C49	0x5FCC	# <CJK>
+0x3C4A	0x9645	# <CJK>
+0x3C4B	0x5993	# <CJK>
+0x3C4C	0x7EE7	# <CJK>
+0x3C4D	0x7EAA	# <CJK>
+0x3C4E	0x5609	# <CJK>
+0x3C4F	0x67B7	# <CJK>
+0x3C50	0x5939	# <CJK>
+0x3C51	0x4F73	# <CJK>
+0x3C52	0x5BB6	# <CJK>
+0x3C53	0x52A0	# <CJK>
+0x3C54	0x835A	# <CJK>
+0x3C55	0x988A	# <CJK>
+0x3C56	0x8D3E	# <CJK>
+0x3C57	0x7532	# <CJK>
+0x3C58	0x94BE	# <CJK>
+0x3C59	0x5047	# <CJK>
+0x3C5A	0x7A3C	# <CJK>
+0x3C5B	0x4EF7	# <CJK>
+0x3C5C	0x67B6	# <CJK>
+0x3C5D	0x9A7E	# <CJK>
+0x3C5E	0x5AC1	# <CJK>
+0x3C5F	0x6B7C	# <CJK>
+0x3C60	0x76D1	# <CJK>
+0x3C61	0x575A	# <CJK>
+0x3C62	0x5C16	# <CJK>
+0x3C63	0x7B3A	# <CJK>
+0x3C64	0x95F4	# <CJK>
+0x3C65	0x714E	# <CJK>
+0x3C66	0x517C	# <CJK>
+0x3C67	0x80A9	# <CJK>
+0x3C68	0x8270	# <CJK>
+0x3C69	0x5978	# <CJK>
+0x3C6A	0x7F04	# <CJK>
+0x3C6B	0x8327	# <CJK>
+0x3C6C	0x68C0	# <CJK>
+0x3C6D	0x67EC	# <CJK>
+0x3C6E	0x78B1	# <CJK>
+0x3C6F	0x7877	# <CJK>
+0x3C70	0x62E3	# <CJK>
+0x3C71	0x6361	# <CJK>
+0x3C72	0x7B80	# <CJK>
+0x3C73	0x4FED	# <CJK>
+0x3C74	0x526A	# <CJK>
+0x3C75	0x51CF	# <CJK>
+0x3C76	0x8350	# <CJK>
+0x3C77	0x69DB	# <CJK>
+0x3C78	0x9274	# <CJK>
+0x3C79	0x8DF5	# <CJK>
+0x3C7A	0x8D31	# <CJK>
+0x3C7B	0x89C1	# <CJK>
+0x3C7C	0x952E	# <CJK>
+0x3C7D	0x7BAD	# <CJK>
+0x3C7E	0x4EF6	# <CJK>
+0x3D21	0x5065	# <CJK>
+0x3D22	0x8230	# <CJK>
+0x3D23	0x5251	# <CJK>
+0x3D24	0x996F	# <CJK>
+0x3D25	0x6E10	# <CJK>
+0x3D26	0x6E85	# <CJK>
+0x3D27	0x6DA7	# <CJK>
+0x3D28	0x5EFA	# <CJK>
+0x3D29	0x50F5	# <CJK>
+0x3D2A	0x59DC	# <CJK>
+0x3D2B	0x5C06	# <CJK>
+0x3D2C	0x6D46	# <CJK>
+0x3D2D	0x6C5F	# <CJK>
+0x3D2E	0x7586	# <CJK>
+0x3D2F	0x848B	# <CJK>
+0x3D30	0x6868	# <CJK>
+0x3D31	0x5956	# <CJK>
+0x3D32	0x8BB2	# <CJK>
+0x3D33	0x5320	# <CJK>
+0x3D34	0x9171	# <CJK>
+0x3D35	0x964D	# <CJK>
+0x3D36	0x8549	# <CJK>
+0x3D37	0x6912	# <CJK>
+0x3D38	0x7901	# <CJK>
+0x3D39	0x7126	# <CJK>
+0x3D3A	0x80F6	# <CJK>
+0x3D3B	0x4EA4	# <CJK>
+0x3D3C	0x90CA	# <CJK>
+0x3D3D	0x6D47	# <CJK>
+0x3D3E	0x9A84	# <CJK>
+0x3D3F	0x5A07	# <CJK>
+0x3D40	0x56BC	# <CJK>
+0x3D41	0x6405	# <CJK>
+0x3D42	0x94F0	# <CJK>
+0x3D43	0x77EB	# <CJK>
+0x3D44	0x4FA5	# <CJK>
+0x3D45	0x811A	# <CJK>
+0x3D46	0x72E1	# <CJK>
+0x3D47	0x89D2	# <CJK>
+0x3D48	0x997A	# <CJK>
+0x3D49	0x7F34	# <CJK>
+0x3D4A	0x7EDE	# <CJK>
+0x3D4B	0x527F	# <CJK>
+0x3D4C	0x6559	# <CJK>
+0x3D4D	0x9175	# <CJK>
+0x3D4E	0x8F7F	# <CJK>
+0x3D4F	0x8F83	# <CJK>
+0x3D50	0x53EB	# <CJK>
+0x3D51	0x7A96	# <CJK>
+0x3D52	0x63ED	# <CJK>
+0x3D53	0x63A5	# <CJK>
+0x3D54	0x7686	# <CJK>
+0x3D55	0x79F8	# <CJK>
+0x3D56	0x8857	# <CJK>
+0x3D57	0x9636	# <CJK>
+0x3D58	0x622A	# <CJK>
+0x3D59	0x52AB	# <CJK>
+0x3D5A	0x8282	# <CJK>
+0x3D5B	0x6854	# <CJK>
+0x3D5C	0x6770	# <CJK>
+0x3D5D	0x6377	# <CJK>
+0x3D5E	0x776B	# <CJK>
+0x3D5F	0x7AED	# <CJK>
+0x3D60	0x6D01	# <CJK>
+0x3D61	0x7ED3	# <CJK>
+0x3D62	0x89E3	# <CJK>
+0x3D63	0x59D0	# <CJK>
+0x3D64	0x6212	# <CJK>
+0x3D65	0x85C9	# <CJK>
+0x3D66	0x82A5	# <CJK>
+0x3D67	0x754C	# <CJK>
+0x3D68	0x501F	# <CJK>
+0x3D69	0x4ECB	# <CJK>
+0x3D6A	0x75A5	# <CJK>
+0x3D6B	0x8BEB	# <CJK>
+0x3D6C	0x5C4A	# <CJK>
+0x3D6D	0x5DFE	# <CJK>
+0x3D6E	0x7B4B	# <CJK>
+0x3D6F	0x65A4	# <CJK>
+0x3D70	0x91D1	# <CJK>
+0x3D71	0x4ECA	# <CJK>
+0x3D72	0x6D25	# <CJK>
+0x3D73	0x895F	# <CJK>
+0x3D74	0x7D27	# <CJK>
+0x3D75	0x9526	# <CJK>
+0x3D76	0x4EC5	# <CJK>
+0x3D77	0x8C28	# <CJK>
+0x3D78	0x8FDB	# <CJK>
+0x3D79	0x9773	# <CJK>
+0x3D7A	0x664B	# <CJK>
+0x3D7B	0x7981	# <CJK>
+0x3D7C	0x8FD1	# <CJK>
+0x3D7D	0x70EC	# <CJK>
+0x3D7E	0x6D78	# <CJK>
+0x3E21	0x5C3D	# <CJK>
+0x3E22	0x52B2	# <CJK>
+0x3E23	0x8346	# <CJK>
+0x3E24	0x5162	# <CJK>
+0x3E25	0x830E	# <CJK>
+0x3E26	0x775B	# <CJK>
+0x3E27	0x6676	# <CJK>
+0x3E28	0x9CB8	# <CJK>
+0x3E29	0x4EAC	# <CJK>
+0x3E2A	0x60CA	# <CJK>
+0x3E2B	0x7CBE	# <CJK>
+0x3E2C	0x7CB3	# <CJK>
+0x3E2D	0x7ECF	# <CJK>
+0x3E2E	0x4E95	# <CJK>
+0x3E2F	0x8B66	# <CJK>
+0x3E30	0x666F	# <CJK>
+0x3E31	0x9888	# <CJK>
+0x3E32	0x9759	# <CJK>
+0x3E33	0x5883	# <CJK>
+0x3E34	0x656C	# <CJK>
+0x3E35	0x955C	# <CJK>
+0x3E36	0x5F84	# <CJK>
+0x3E37	0x75C9	# <CJK>
+0x3E38	0x9756	# <CJK>
+0x3E39	0x7ADF	# <CJK>
+0x3E3A	0x7ADE	# <CJK>
+0x3E3B	0x51C0	# <CJK>
+0x3E3C	0x70AF	# <CJK>
+0x3E3D	0x7A98	# <CJK>
+0x3E3E	0x63EA	# <CJK>
+0x3E3F	0x7A76	# <CJK>
+0x3E40	0x7EA0	# <CJK>
+0x3E41	0x7396	# <CJK>
+0x3E42	0x97ED	# <CJK>
+0x3E43	0x4E45	# <CJK>
+0x3E44	0x7078	# <CJK>
+0x3E45	0x4E5D	# <CJK>
+0x3E46	0x9152	# <CJK>
+0x3E47	0x53A9	# <CJK>
+0x3E48	0x6551	# <CJK>
+0x3E49	0x65E7	# <CJK>
+0x3E4A	0x81FC	# <CJK>
+0x3E4B	0x8205	# <CJK>
+0x3E4C	0x548E	# <CJK>
+0x3E4D	0x5C31	# <CJK>
+0x3E4E	0x759A	# <CJK>
+0x3E4F	0x97A0	# <CJK>
+0x3E50	0x62D8	# <CJK>
+0x3E51	0x72D9	# <CJK>
+0x3E52	0x75BD	# <CJK>
+0x3E53	0x5C45	# <CJK>
+0x3E54	0x9A79	# <CJK>
+0x3E55	0x83CA	# <CJK>
+0x3E56	0x5C40	# <CJK>
+0x3E57	0x5480	# <CJK>
+0x3E58	0x77E9	# <CJK>
+0x3E59	0x4E3E	# <CJK>
+0x3E5A	0x6CAE	# <CJK>
+0x3E5B	0x805A	# <CJK>
+0x3E5C	0x62D2	# <CJK>
+0x3E5D	0x636E	# <CJK>
+0x3E5E	0x5DE8	# <CJK>
+0x3E5F	0x5177	# <CJK>
+0x3E60	0x8DDD	# <CJK>
+0x3E61	0x8E1E	# <CJK>
+0x3E62	0x952F	# <CJK>
+0x3E63	0x4FF1	# <CJK>
+0x3E64	0x53E5	# <CJK>
+0x3E65	0x60E7	# <CJK>
+0x3E66	0x70AC	# <CJK>
+0x3E67	0x5267	# <CJK>
+0x3E68	0x6350	# <CJK>
+0x3E69	0x9E43	# <CJK>
+0x3E6A	0x5A1F	# <CJK>
+0x3E6B	0x5026	# <CJK>
+0x3E6C	0x7737	# <CJK>
+0x3E6D	0x5377	# <CJK>
+0x3E6E	0x7EE2	# <CJK>
+0x3E6F	0x6485	# <CJK>
+0x3E70	0x652B	# <CJK>
+0x3E71	0x6289	# <CJK>
+0x3E72	0x6398	# <CJK>
+0x3E73	0x5014	# <CJK>
+0x3E74	0x7235	# <CJK>
+0x3E75	0x89C9	# <CJK>
+0x3E76	0x51B3	# <CJK>
+0x3E77	0x8BC0	# <CJK>
+0x3E78	0x7EDD	# <CJK>
+0x3E79	0x5747	# <CJK>
+0x3E7A	0x83CC	# <CJK>
+0x3E7B	0x94A7	# <CJK>
+0x3E7C	0x519B	# <CJK>
+0x3E7D	0x541B	# <CJK>
+0x3E7E	0x5CFB	# <CJK>
+0x3F21	0x4FCA	# <CJK>
+0x3F22	0x7AE3	# <CJK>
+0x3F23	0x6D5A	# <CJK>
+0x3F24	0x90E1	# <CJK>
+0x3F25	0x9A8F	# <CJK>
+0x3F26	0x5580	# <CJK>
+0x3F27	0x5496	# <CJK>
+0x3F28	0x5361	# <CJK>
+0x3F29	0x54AF	# <CJK>
+0x3F2A	0x5F00	# <CJK>
+0x3F2B	0x63E9	# <CJK>
+0x3F2C	0x6977	# <CJK>
+0x3F2D	0x51EF	# <CJK>
+0x3F2E	0x6168	# <CJK>
+0x3F2F	0x520A	# <CJK>
+0x3F30	0x582A	# <CJK>
+0x3F31	0x52D8	# <CJK>
+0x3F32	0x574E	# <CJK>
+0x3F33	0x780D	# <CJK>
+0x3F34	0x770B	# <CJK>
+0x3F35	0x5EB7	# <CJK>
+0x3F36	0x6177	# <CJK>
+0x3F37	0x7CE0	# <CJK>
+0x3F38	0x625B	# <CJK>
+0x3F39	0x6297	# <CJK>
+0x3F3A	0x4EA2	# <CJK>
+0x3F3B	0x7095	# <CJK>
+0x3F3C	0x8003	# <CJK>
+0x3F3D	0x62F7	# <CJK>
+0x3F3E	0x70E4	# <CJK>
+0x3F3F	0x9760	# <CJK>
+0x3F40	0x5777	# <CJK>
+0x3F41	0x82DB	# <CJK>
+0x3F42	0x67EF	# <CJK>
+0x3F43	0x68F5	# <CJK>
+0x3F44	0x78D5	# <CJK>
+0x3F45	0x9897	# <CJK>
+0x3F46	0x79D1	# <CJK>
+0x3F47	0x58F3	# <CJK>
+0x3F48	0x54B3	# <CJK>
+0x3F49	0x53EF	# <CJK>
+0x3F4A	0x6E34	# <CJK>
+0x3F4B	0x514B	# <CJK>
+0x3F4C	0x523B	# <CJK>
+0x3F4D	0x5BA2	# <CJK>
+0x3F4E	0x8BFE	# <CJK>
+0x3F4F	0x80AF	# <CJK>
+0x3F50	0x5543	# <CJK>
+0x3F51	0x57A6	# <CJK>
+0x3F52	0x6073	# <CJK>
+0x3F53	0x5751	# <CJK>
+0x3F54	0x542D	# <CJK>
+0x3F55	0x7A7A	# <CJK>
+0x3F56	0x6050	# <CJK>
+0x3F57	0x5B54	# <CJK>
+0x3F58	0x63A7	# <CJK>
+0x3F59	0x62A0	# <CJK>
+0x3F5A	0x53E3	# <CJK>
+0x3F5B	0x6263	# <CJK>
+0x3F5C	0x5BC7	# <CJK>
+0x3F5D	0x67AF	# <CJK>
+0x3F5E	0x54ED	# <CJK>
+0x3F5F	0x7A9F	# <CJK>
+0x3F60	0x82E6	# <CJK>
+0x3F61	0x9177	# <CJK>
+0x3F62	0x5E93	# <CJK>
+0x3F63	0x88E4	# <CJK>
+0x3F64	0x5938	# <CJK>
+0x3F65	0x57AE	# <CJK>
+0x3F66	0x630E	# <CJK>
+0x3F67	0x8DE8	# <CJK>
+0x3F68	0x80EF	# <CJK>
+0x3F69	0x5757	# <CJK>
+0x3F6A	0x7B77	# <CJK>
+0x3F6B	0x4FA9	# <CJK>
+0x3F6C	0x5FEB	# <CJK>
+0x3F6D	0x5BBD	# <CJK>
+0x3F6E	0x6B3E	# <CJK>
+0x3F6F	0x5321	# <CJK>
+0x3F70	0x7B50	# <CJK>
+0x3F71	0x72C2	# <CJK>
+0x3F72	0x6846	# <CJK>
+0x3F73	0x77FF	# <CJK>
+0x3F74	0x7736	# <CJK>
+0x3F75	0x65F7	# <CJK>
+0x3F76	0x51B5	# <CJK>
+0x3F77	0x4E8F	# <CJK>
+0x3F78	0x76D4	# <CJK>
+0x3F79	0x5CBF	# <CJK>
+0x3F7A	0x7AA5	# <CJK>
+0x3F7B	0x8475	# <CJK>
+0x3F7C	0x594E	# <CJK>
+0x3F7D	0x9B41	# <CJK>
+0x3F7E	0x5080	# <CJK>
+0x4021	0x9988	# <CJK>
+0x4022	0x6127	# <CJK>
+0x4023	0x6E83	# <CJK>
+0x4024	0x5764	# <CJK>
+0x4025	0x6606	# <CJK>
+0x4026	0x6346	# <CJK>
+0x4027	0x56F0	# <CJK>
+0x4028	0x62EC	# <CJK>
+0x4029	0x6269	# <CJK>
+0x402A	0x5ED3	# <CJK>
+0x402B	0x9614	# <CJK>
+0x402C	0x5783	# <CJK>
+0x402D	0x62C9	# <CJK>
+0x402E	0x5587	# <CJK>
+0x402F	0x8721	# <CJK>
+0x4030	0x814A	# <CJK>
+0x4031	0x8FA3	# <CJK>
+0x4032	0x5566	# <CJK>
+0x4033	0x83B1	# <CJK>
+0x4034	0x6765	# <CJK>
+0x4035	0x8D56	# <CJK>
+0x4036	0x84DD	# <CJK>
+0x4037	0x5A6A	# <CJK>
+0x4038	0x680F	# <CJK>
+0x4039	0x62E6	# <CJK>
+0x403A	0x7BEE	# <CJK>
+0x403B	0x9611	# <CJK>
+0x403C	0x5170	# <CJK>
+0x403D	0x6F9C	# <CJK>
+0x403E	0x8C30	# <CJK>
+0x403F	0x63FD	# <CJK>
+0x4040	0x89C8	# <CJK>
+0x4041	0x61D2	# <CJK>
+0x4042	0x7F06	# <CJK>
+0x4043	0x70C2	# <CJK>
+0x4044	0x6EE5	# <CJK>
+0x4045	0x7405	# <CJK>
+0x4046	0x6994	# <CJK>
+0x4047	0x72FC	# <CJK>
+0x4048	0x5ECA	# <CJK>
+0x4049	0x90CE	# <CJK>
+0x404A	0x6717	# <CJK>
+0x404B	0x6D6A	# <CJK>
+0x404C	0x635E	# <CJK>
+0x404D	0x52B3	# <CJK>
+0x404E	0x7262	# <CJK>
+0x404F	0x8001	# <CJK>
+0x4050	0x4F6C	# <CJK>
+0x4051	0x59E5	# <CJK>
+0x4052	0x916A	# <CJK>
+0x4053	0x70D9	# <CJK>
+0x4054	0x6D9D	# <CJK>
+0x4055	0x52D2	# <CJK>
+0x4056	0x4E50	# <CJK>
+0x4057	0x96F7	# <CJK>
+0x4058	0x956D	# <CJK>
+0x4059	0x857E	# <CJK>
+0x405A	0x78CA	# <CJK>
+0x405B	0x7D2F	# <CJK>
+0x405C	0x5121	# <CJK>
+0x405D	0x5792	# <CJK>
+0x405E	0x64C2	# <CJK>
+0x405F	0x808B	# <CJK>
+0x4060	0x7C7B	# <CJK>
+0x4061	0x6CEA	# <CJK>
+0x4062	0x68F1	# <CJK>
+0x4063	0x695E	# <CJK>
+0x4064	0x51B7	# <CJK>
+0x4065	0x5398	# <CJK>
+0x4066	0x68A8	# <CJK>
+0x4067	0x7281	# <CJK>
+0x4068	0x9ECE	# <CJK>
+0x4069	0x7BF1	# <CJK>
+0x406A	0x72F8	# <CJK>
+0x406B	0x79BB	# <CJK>
+0x406C	0x6F13	# <CJK>
+0x406D	0x7406	# <CJK>
+0x406E	0x674E	# <CJK>
+0x406F	0x91CC	# <CJK>
+0x4070	0x9CA4	# <CJK>
+0x4071	0x793C	# <CJK>
+0x4072	0x8389	# <CJK>
+0x4073	0x8354	# <CJK>
+0x4074	0x540F	# <CJK>
+0x4075	0x6817	# <CJK>
+0x4076	0x4E3D	# <CJK>
+0x4077	0x5389	# <CJK>
+0x4078	0x52B1	# <CJK>
+0x4079	0x783E	# <CJK>
+0x407A	0x5386	# <CJK>
+0x407B	0x5229	# <CJK>
+0x407C	0x5088	# <CJK>
+0x407D	0x4F8B	# <CJK>
+0x407E	0x4FD0	# <CJK>
+0x4121	0x75E2	# <CJK>
+0x4122	0x7ACB	# <CJK>
+0x4123	0x7C92	# <CJK>
+0x4124	0x6CA5	# <CJK>
+0x4125	0x96B6	# <CJK>
+0x4126	0x529B	# <CJK>
+0x4127	0x7483	# <CJK>
+0x4128	0x54E9	# <CJK>
+0x4129	0x4FE9	# <CJK>
+0x412A	0x8054	# <CJK>
+0x412B	0x83B2	# <CJK>
+0x412C	0x8FDE	# <CJK>
+0x412D	0x9570	# <CJK>
+0x412E	0x5EC9	# <CJK>
+0x412F	0x601C	# <CJK>
+0x4130	0x6D9F	# <CJK>
+0x4131	0x5E18	# <CJK>
+0x4132	0x655B	# <CJK>
+0x4133	0x8138	# <CJK>
+0x4134	0x94FE	# <CJK>
+0x4135	0x604B	# <CJK>
+0x4136	0x70BC	# <CJK>
+0x4137	0x7EC3	# <CJK>
+0x4138	0x7CAE	# <CJK>
+0x4139	0x51C9	# <CJK>
+0x413A	0x6881	# <CJK>
+0x413B	0x7CB1	# <CJK>
+0x413C	0x826F	# <CJK>
+0x413D	0x4E24	# <CJK>
+0x413E	0x8F86	# <CJK>
+0x413F	0x91CF	# <CJK>
+0x4140	0x667E	# <CJK>
+0x4141	0x4EAE	# <CJK>
+0x4142	0x8C05	# <CJK>
+0x4143	0x64A9	# <CJK>
+0x4144	0x804A	# <CJK>
+0x4145	0x50DA	# <CJK>
+0x4146	0x7597	# <CJK>
+0x4147	0x71CE	# <CJK>
+0x4148	0x5BE5	# <CJK>
+0x4149	0x8FBD	# <CJK>
+0x414A	0x6F66	# <CJK>
+0x414B	0x4E86	# <CJK>
+0x414C	0x6482	# <CJK>
+0x414D	0x9563	# <CJK>
+0x414E	0x5ED6	# <CJK>
+0x414F	0x6599	# <CJK>
+0x4150	0x5217	# <CJK>
+0x4151	0x88C2	# <CJK>
+0x4152	0x70C8	# <CJK>
+0x4153	0x52A3	# <CJK>
+0x4154	0x730E	# <CJK>
+0x4155	0x7433	# <CJK>
+0x4156	0x6797	# <CJK>
+0x4157	0x78F7	# <CJK>
+0x4158	0x9716	# <CJK>
+0x4159	0x4E34	# <CJK>
+0x415A	0x90BB	# <CJK>
+0x415B	0x9CDE	# <CJK>
+0x415C	0x6DCB	# <CJK>
+0x415D	0x51DB	# <CJK>
+0x415E	0x8D41	# <CJK>
+0x415F	0x541D	# <CJK>
+0x4160	0x62CE	# <CJK>
+0x4161	0x73B2	# <CJK>
+0x4162	0x83F1	# <CJK>
+0x4163	0x96F6	# <CJK>
+0x4164	0x9F84	# <CJK>
+0x4165	0x94C3	# <CJK>
+0x4166	0x4F36	# <CJK>
+0x4167	0x7F9A	# <CJK>
+0x4168	0x51CC	# <CJK>
+0x4169	0x7075	# <CJK>
+0x416A	0x9675	# <CJK>
+0x416B	0x5CAD	# <CJK>
+0x416C	0x9886	# <CJK>
+0x416D	0x53E6	# <CJK>
+0x416E	0x4EE4	# <CJK>
+0x416F	0x6E9C	# <CJK>
+0x4170	0x7409	# <CJK>
+0x4171	0x69B4	# <CJK>
+0x4172	0x786B	# <CJK>
+0x4173	0x998F	# <CJK>
+0x4174	0x7559	# <CJK>
+0x4175	0x5218	# <CJK>
+0x4176	0x7624	# <CJK>
+0x4177	0x6D41	# <CJK>
+0x4178	0x67F3	# <CJK>
+0x4179	0x516D	# <CJK>
+0x417A	0x9F99	# <CJK>
+0x417B	0x804B	# <CJK>
+0x417C	0x5499	# <CJK>
+0x417D	0x7B3C	# <CJK>
+0x417E	0x7ABF	# <CJK>
+0x4221	0x9686	# <CJK>
+0x4222	0x5784	# <CJK>
+0x4223	0x62E2	# <CJK>
+0x4224	0x9647	# <CJK>
+0x4225	0x697C	# <CJK>
+0x4226	0x5A04	# <CJK>
+0x4227	0x6402	# <CJK>
+0x4228	0x7BD3	# <CJK>
+0x4229	0x6F0F	# <CJK>
+0x422A	0x964B	# <CJK>
+0x422B	0x82A6	# <CJK>
+0x422C	0x5362	# <CJK>
+0x422D	0x9885	# <CJK>
+0x422E	0x5E90	# <CJK>
+0x422F	0x7089	# <CJK>
+0x4230	0x63B3	# <CJK>
+0x4231	0x5364	# <CJK>
+0x4232	0x864F	# <CJK>
+0x4233	0x9C81	# <CJK>
+0x4234	0x9E93	# <CJK>
+0x4235	0x788C	# <CJK>
+0x4236	0x9732	# <CJK>
+0x4237	0x8DEF	# <CJK>
+0x4238	0x8D42	# <CJK>
+0x4239	0x9E7F	# <CJK>
+0x423A	0x6F5E	# <CJK>
+0x423B	0x7984	# <CJK>
+0x423C	0x5F55	# <CJK>
+0x423D	0x9646	# <CJK>
+0x423E	0x622E	# <CJK>
+0x423F	0x9A74	# <CJK>
+0x4240	0x5415	# <CJK>
+0x4241	0x94DD	# <CJK>
+0x4242	0x4FA3	# <CJK>
+0x4243	0x65C5	# <CJK>
+0x4244	0x5C65	# <CJK>
+0x4245	0x5C61	# <CJK>
+0x4246	0x7F15	# <CJK>
+0x4247	0x8651	# <CJK>
+0x4248	0x6C2F	# <CJK>
+0x4249	0x5F8B	# <CJK>
+0x424A	0x7387	# <CJK>
+0x424B	0x6EE4	# <CJK>
+0x424C	0x7EFF	# <CJK>
+0x424D	0x5CE6	# <CJK>
+0x424E	0x631B	# <CJK>
+0x424F	0x5B6A	# <CJK>
+0x4250	0x6EE6	# <CJK>
+0x4251	0x5375	# <CJK>
+0x4252	0x4E71	# <CJK>
+0x4253	0x63A0	# <CJK>
+0x4254	0x7565	# <CJK>
+0x4255	0x62A1	# <CJK>
+0x4256	0x8F6E	# <CJK>
+0x4257	0x4F26	# <CJK>
+0x4258	0x4ED1	# <CJK>
+0x4259	0x6CA6	# <CJK>
+0x425A	0x7EB6	# <CJK>
+0x425B	0x8BBA	# <CJK>
+0x425C	0x841D	# <CJK>
+0x425D	0x87BA	# <CJK>
+0x425E	0x7F57	# <CJK>
+0x425F	0x903B	# <CJK>
+0x4260	0x9523	# <CJK>
+0x4261	0x7BA9	# <CJK>
+0x4262	0x9AA1	# <CJK>
+0x4263	0x88F8	# <CJK>
+0x4264	0x843D	# <CJK>
+0x4265	0x6D1B	# <CJK>
+0x4266	0x9A86	# <CJK>
+0x4267	0x7EDC	# <CJK>
+0x4268	0x5988	# <CJK>
+0x4269	0x9EBB	# <CJK>
+0x426A	0x739B	# <CJK>
+0x426B	0x7801	# <CJK>
+0x426C	0x8682	# <CJK>
+0x426D	0x9A6C	# <CJK>
+0x426E	0x9A82	# <CJK>
+0x426F	0x561B	# <CJK>
+0x4270	0x5417	# <CJK>
+0x4271	0x57CB	# <CJK>
+0x4272	0x4E70	# <CJK>
+0x4273	0x9EA6	# <CJK>
+0x4274	0x5356	# <CJK>
+0x4275	0x8FC8	# <CJK>
+0x4276	0x8109	# <CJK>
+0x4277	0x7792	# <CJK>
+0x4278	0x9992	# <CJK>
+0x4279	0x86EE	# <CJK>
+0x427A	0x6EE1	# <CJK>
+0x427B	0x8513	# <CJK>
+0x427C	0x66FC	# <CJK>
+0x427D	0x6162	# <CJK>
+0x427E	0x6F2B	# <CJK>
+0x4321	0x8C29	# <CJK>
+0x4322	0x8292	# <CJK>
+0x4323	0x832B	# <CJK>
+0x4324	0x76F2	# <CJK>
+0x4325	0x6C13	# <CJK>
+0x4326	0x5FD9	# <CJK>
+0x4327	0x83BD	# <CJK>
+0x4328	0x732B	# <CJK>
+0x4329	0x8305	# <CJK>
+0x432A	0x951A	# <CJK>
+0x432B	0x6BDB	# <CJK>
+0x432C	0x77DB	# <CJK>
+0x432D	0x94C6	# <CJK>
+0x432E	0x536F	# <CJK>
+0x432F	0x8302	# <CJK>
+0x4330	0x5192	# <CJK>
+0x4331	0x5E3D	# <CJK>
+0x4332	0x8C8C	# <CJK>
+0x4333	0x8D38	# <CJK>
+0x4334	0x4E48	# <CJK>
+0x4335	0x73AB	# <CJK>
+0x4336	0x679A	# <CJK>
+0x4337	0x6885	# <CJK>
+0x4338	0x9176	# <CJK>
+0x4339	0x9709	# <CJK>
+0x433A	0x7164	# <CJK>
+0x433B	0x6CA1	# <CJK>
+0x433C	0x7709	# <CJK>
+0x433D	0x5A92	# <CJK>
+0x433E	0x9541	# <CJK>
+0x433F	0x6BCF	# <CJK>
+0x4340	0x7F8E	# <CJK>
+0x4341	0x6627	# <CJK>
+0x4342	0x5BD0	# <CJK>
+0x4343	0x59B9	# <CJK>
+0x4344	0x5A9A	# <CJK>
+0x4345	0x95E8	# <CJK>
+0x4346	0x95F7	# <CJK>
+0x4347	0x4EEC	# <CJK>
+0x4348	0x840C	# <CJK>
+0x4349	0x8499	# <CJK>
+0x434A	0x6AAC	# <CJK>
+0x434B	0x76DF	# <CJK>
+0x434C	0x9530	# <CJK>
+0x434D	0x731B	# <CJK>
+0x434E	0x68A6	# <CJK>
+0x434F	0x5B5F	# <CJK>
+0x4350	0x772F	# <CJK>
+0x4351	0x919A	# <CJK>
+0x4352	0x9761	# <CJK>
+0x4353	0x7CDC	# <CJK>
+0x4354	0x8FF7	# <CJK>
+0x4355	0x8C1C	# <CJK>
+0x4356	0x5F25	# <CJK>
+0x4357	0x7C73	# <CJK>
+0x4358	0x79D8	# <CJK>
+0x4359	0x89C5	# <CJK>
+0x435A	0x6CCC	# <CJK>
+0x435B	0x871C	# <CJK>
+0x435C	0x5BC6	# <CJK>
+0x435D	0x5E42	# <CJK>
+0x435E	0x68C9	# <CJK>
+0x435F	0x7720	# <CJK>
+0x4360	0x7EF5	# <CJK>
+0x4361	0x5195	# <CJK>
+0x4362	0x514D	# <CJK>
+0x4363	0x52C9	# <CJK>
+0x4364	0x5A29	# <CJK>
+0x4365	0x7F05	# <CJK>
+0x4366	0x9762	# <CJK>
+0x4367	0x82D7	# <CJK>
+0x4368	0x63CF	# <CJK>
+0x4369	0x7784	# <CJK>
+0x436A	0x85D0	# <CJK>
+0x436B	0x79D2	# <CJK>
+0x436C	0x6E3A	# <CJK>
+0x436D	0x5E99	# <CJK>
+0x436E	0x5999	# <CJK>
+0x436F	0x8511	# <CJK>
+0x4370	0x706D	# <CJK>
+0x4371	0x6C11	# <CJK>
+0x4372	0x62BF	# <CJK>
+0x4373	0x76BF	# <CJK>
+0x4374	0x654F	# <CJK>
+0x4375	0x60AF	# <CJK>
+0x4376	0x95FD	# <CJK>
+0x4377	0x660E	# <CJK>
+0x4378	0x879F	# <CJK>
+0x4379	0x9E23	# <CJK>
+0x437A	0x94ED	# <CJK>
+0x437B	0x540D	# <CJK>
+0x437C	0x547D	# <CJK>
+0x437D	0x8C2C	# <CJK>
+0x437E	0x6478	# <CJK>
+0x4421	0x6479	# <CJK>
+0x4422	0x8611	# <CJK>
+0x4423	0x6A21	# <CJK>
+0x4424	0x819C	# <CJK>
+0x4425	0x78E8	# <CJK>
+0x4426	0x6469	# <CJK>
+0x4427	0x9B54	# <CJK>
+0x4428	0x62B9	# <CJK>
+0x4429	0x672B	# <CJK>
+0x442A	0x83AB	# <CJK>
+0x442B	0x58A8	# <CJK>
+0x442C	0x9ED8	# <CJK>
+0x442D	0x6CAB	# <CJK>
+0x442E	0x6F20	# <CJK>
+0x442F	0x5BDE	# <CJK>
+0x4430	0x964C	# <CJK>
+0x4431	0x8C0B	# <CJK>
+0x4432	0x725F	# <CJK>
+0x4433	0x67D0	# <CJK>
+0x4434	0x62C7	# <CJK>
+0x4435	0x7261	# <CJK>
+0x4436	0x4EA9	# <CJK>
+0x4437	0x59C6	# <CJK>
+0x4438	0x6BCD	# <CJK>
+0x4439	0x5893	# <CJK>
+0x443A	0x66AE	# <CJK>
+0x443B	0x5E55	# <CJK>
+0x443C	0x52DF	# <CJK>
+0x443D	0x6155	# <CJK>
+0x443E	0x6728	# <CJK>
+0x443F	0x76EE	# <CJK>
+0x4440	0x7766	# <CJK>
+0x4441	0x7267	# <CJK>
+0x4442	0x7A46	# <CJK>
+0x4443	0x62FF	# <CJK>
+0x4444	0x54EA	# <CJK>
+0x4445	0x5450	# <CJK>
+0x4446	0x94A0	# <CJK>
+0x4447	0x90A3	# <CJK>
+0x4448	0x5A1C	# <CJK>
+0x4449	0x7EB3	# <CJK>
+0x444A	0x6C16	# <CJK>
+0x444B	0x4E43	# <CJK>
+0x444C	0x5976	# <CJK>
+0x444D	0x8010	# <CJK>
+0x444E	0x5948	# <CJK>
+0x444F	0x5357	# <CJK>
+0x4450	0x7537	# <CJK>
+0x4451	0x96BE	# <CJK>
+0x4452	0x56CA	# <CJK>
+0x4453	0x6320	# <CJK>
+0x4454	0x8111	# <CJK>
+0x4455	0x607C	# <CJK>
+0x4456	0x95F9	# <CJK>
+0x4457	0x6DD6	# <CJK>
+0x4458	0x5462	# <CJK>
+0x4459	0x9981	# <CJK>
+0x445A	0x5185	# <CJK>
+0x445B	0x5AE9	# <CJK>
+0x445C	0x80FD	# <CJK>
+0x445D	0x59AE	# <CJK>
+0x445E	0x9713	# <CJK>
+0x445F	0x502A	# <CJK>
+0x4460	0x6CE5	# <CJK>
+0x4461	0x5C3C	# <CJK>
+0x4462	0x62DF	# <CJK>
+0x4463	0x4F60	# <CJK>
+0x4464	0x533F	# <CJK>
+0x4465	0x817B	# <CJK>
+0x4466	0x9006	# <CJK>
+0x4467	0x6EBA	# <CJK>
+0x4468	0x852B	# <CJK>
+0x4469	0x62C8	# <CJK>
+0x446A	0x5E74	# <CJK>
+0x446B	0x78BE	# <CJK>
+0x446C	0x64B5	# <CJK>
+0x446D	0x637B	# <CJK>
+0x446E	0x5FF5	# <CJK>
+0x446F	0x5A18	# <CJK>
+0x4470	0x917F	# <CJK>
+0x4471	0x9E1F	# <CJK>
+0x4472	0x5C3F	# <CJK>
+0x4473	0x634F	# <CJK>
+0x4474	0x8042	# <CJK>
+0x4475	0x5B7D	# <CJK>
+0x4476	0x556E	# <CJK>
+0x4477	0x954A	# <CJK>
+0x4478	0x954D	# <CJK>
+0x4479	0x6D85	# <CJK>
+0x447A	0x60A8	# <CJK>
+0x447B	0x67E0	# <CJK>
+0x447C	0x72DE	# <CJK>
+0x447D	0x51DD	# <CJK>
+0x447E	0x5B81	# <CJK>
+0x4521	0x62E7	# <CJK>
+0x4522	0x6CDE	# <CJK>
+0x4523	0x725B	# <CJK>
+0x4524	0x626D	# <CJK>
+0x4525	0x94AE	# <CJK>
+0x4526	0x7EBD	# <CJK>
+0x4527	0x8113	# <CJK>
+0x4528	0x6D53	# <CJK>
+0x4529	0x519C	# <CJK>
+0x452A	0x5F04	# <CJK>
+0x452B	0x5974	# <CJK>
+0x452C	0x52AA	# <CJK>
+0x452D	0x6012	# <CJK>
+0x452E	0x5973	# <CJK>
+0x452F	0x6696	# <CJK>
+0x4530	0x8650	# <CJK>
+0x4531	0x759F	# <CJK>
+0x4532	0x632A	# <CJK>
+0x4533	0x61E6	# <CJK>
+0x4534	0x7CEF	# <CJK>
+0x4535	0x8BFA	# <CJK>
+0x4536	0x54E6	# <CJK>
+0x4537	0x6B27	# <CJK>
+0x4538	0x9E25	# <CJK>
+0x4539	0x6BB4	# <CJK>
+0x453A	0x85D5	# <CJK>
+0x453B	0x5455	# <CJK>
+0x453C	0x5076	# <CJK>
+0x453D	0x6CA4	# <CJK>
+0x453E	0x556A	# <CJK>
+0x453F	0x8DB4	# <CJK>
+0x4540	0x722C	# <CJK>
+0x4541	0x5E15	# <CJK>
+0x4542	0x6015	# <CJK>
+0x4543	0x7436	# <CJK>
+0x4544	0x62CD	# <CJK>
+0x4545	0x6392	# <CJK>
+0x4546	0x724C	# <CJK>
+0x4547	0x5F98	# <CJK>
+0x4548	0x6E43	# <CJK>
+0x4549	0x6D3E	# <CJK>
+0x454A	0x6500	# <CJK>
+0x454B	0x6F58	# <CJK>
+0x454C	0x76D8	# <CJK>
+0x454D	0x78D0	# <CJK>
+0x454E	0x76FC	# <CJK>
+0x454F	0x7554	# <CJK>
+0x4550	0x5224	# <CJK>
+0x4551	0x53DB	# <CJK>
+0x4552	0x4E53	# <CJK>
+0x4553	0x5E9E	# <CJK>
+0x4554	0x65C1	# <CJK>
+0x4555	0x802A	# <CJK>
+0x4556	0x80D6	# <CJK>
+0x4557	0x629B	# <CJK>
+0x4558	0x5486	# <CJK>
+0x4559	0x5228	# <CJK>
+0x455A	0x70AE	# <CJK>
+0x455B	0x888D	# <CJK>
+0x455C	0x8DD1	# <CJK>
+0x455D	0x6CE1	# <CJK>
+0x455E	0x5478	# <CJK>
+0x455F	0x80DA	# <CJK>
+0x4560	0x57F9	# <CJK>
+0x4561	0x88F4	# <CJK>
+0x4562	0x8D54	# <CJK>
+0x4563	0x966A	# <CJK>
+0x4564	0x914D	# <CJK>
+0x4565	0x4F69	# <CJK>
+0x4566	0x6C9B	# <CJK>
+0x4567	0x55B7	# <CJK>
+0x4568	0x76C6	# <CJK>
+0x4569	0x7830	# <CJK>
+0x456A	0x62A8	# <CJK>
+0x456B	0x70F9	# <CJK>
+0x456C	0x6F8E	# <CJK>
+0x456D	0x5F6D	# <CJK>
+0x456E	0x84EC	# <CJK>
+0x456F	0x68DA	# <CJK>
+0x4570	0x787C	# <CJK>
+0x4571	0x7BF7	# <CJK>
+0x4572	0x81A8	# <CJK>
+0x4573	0x670B	# <CJK>
+0x4574	0x9E4F	# <CJK>
+0x4575	0x6367	# <CJK>
+0x4576	0x78B0	# <CJK>
+0x4577	0x576F	# <CJK>
+0x4578	0x7812	# <CJK>
+0x4579	0x9739	# <CJK>
+0x457A	0x6279	# <CJK>
+0x457B	0x62AB	# <CJK>
+0x457C	0x5288	# <CJK>
+0x457D	0x7435	# <CJK>
+0x457E	0x6BD7	# <CJK>
+0x4621	0x5564	# <CJK>
+0x4622	0x813E	# <CJK>
+0x4623	0x75B2	# <CJK>
+0x4624	0x76AE	# <CJK>
+0x4625	0x5339	# <CJK>
+0x4626	0x75DE	# <CJK>
+0x4627	0x50FB	# <CJK>
+0x4628	0x5C41	# <CJK>
+0x4629	0x8B6C	# <CJK>
+0x462A	0x7BC7	# <CJK>
+0x462B	0x504F	# <CJK>
+0x462C	0x7247	# <CJK>
+0x462D	0x9A97	# <CJK>
+0x462E	0x98D8	# <CJK>
+0x462F	0x6F02	# <CJK>
+0x4630	0x74E2	# <CJK>
+0x4631	0x7968	# <CJK>
+0x4632	0x6487	# <CJK>
+0x4633	0x77A5	# <CJK>
+0x4634	0x62FC	# <CJK>
+0x4635	0x9891	# <CJK>
+0x4636	0x8D2B	# <CJK>
+0x4637	0x54C1	# <CJK>
+0x4638	0x8058	# <CJK>
+0x4639	0x4E52	# <CJK>
+0x463A	0x576A	# <CJK>
+0x463B	0x82F9	# <CJK>
+0x463C	0x840D	# <CJK>
+0x463D	0x5E73	# <CJK>
+0x463E	0x51ED	# <CJK>
+0x463F	0x74F6	# <CJK>
+0x4640	0x8BC4	# <CJK>
+0x4641	0x5C4F	# <CJK>
+0x4642	0x5761	# <CJK>
+0x4643	0x6CFC	# <CJK>
+0x4644	0x9887	# <CJK>
+0x4645	0x5A46	# <CJK>
+0x4646	0x7834	# <CJK>
+0x4647	0x9B44	# <CJK>
+0x4648	0x8FEB	# <CJK>
+0x4649	0x7C95	# <CJK>
+0x464A	0x5256	# <CJK>
+0x464B	0x6251	# <CJK>
+0x464C	0x94FA	# <CJK>
+0x464D	0x4EC6	# <CJK>
+0x464E	0x8386	# <CJK>
+0x464F	0x8461	# <CJK>
+0x4650	0x83E9	# <CJK>
+0x4651	0x84B2	# <CJK>
+0x4652	0x57D4	# <CJK>
+0x4653	0x6734	# <CJK>
+0x4654	0x5703	# <CJK>
+0x4655	0x666E	# <CJK>
+0x4656	0x6D66	# <CJK>
+0x4657	0x8C31	# <CJK>
+0x4658	0x66DD	# <CJK>
+0x4659	0x7011	# <CJK>
+0x465A	0x671F	# <CJK>
+0x465B	0x6B3A	# <CJK>
+0x465C	0x6816	# <CJK>
+0x465D	0x621A	# <CJK>
+0x465E	0x59BB	# <CJK>
+0x465F	0x4E03	# <CJK>
+0x4660	0x51C4	# <CJK>
+0x4661	0x6F06	# <CJK>
+0x4662	0x67D2	# <CJK>
+0x4663	0x6C8F	# <CJK>
+0x4664	0x5176	# <CJK>
+0x4665	0x68CB	# <CJK>
+0x4666	0x5947	# <CJK>
+0x4667	0x6B67	# <CJK>
+0x4668	0x7566	# <CJK>
+0x4669	0x5D0E	# <CJK>
+0x466A	0x8110	# <CJK>
+0x466B	0x9F50	# <CJK>
+0x466C	0x65D7	# <CJK>
+0x466D	0x7948	# <CJK>
+0x466E	0x7941	# <CJK>
+0x466F	0x9A91	# <CJK>
+0x4670	0x8D77	# <CJK>
+0x4671	0x5C82	# <CJK>
+0x4672	0x4E5E	# <CJK>
+0x4673	0x4F01	# <CJK>
+0x4674	0x542F	# <CJK>
+0x4675	0x5951	# <CJK>
+0x4676	0x780C	# <CJK>
+0x4677	0x5668	# <CJK>
+0x4678	0x6C14	# <CJK>
+0x4679	0x8FC4	# <CJK>
+0x467A	0x5F03	# <CJK>
+0x467B	0x6C7D	# <CJK>
+0x467C	0x6CE3	# <CJK>
+0x467D	0x8BAB	# <CJK>
+0x467E	0x6390	# <CJK>
+0x4721	0x6070	# <CJK>
+0x4722	0x6D3D	# <CJK>
+0x4723	0x7275	# <CJK>
+0x4724	0x6266	# <CJK>
+0x4725	0x948E	# <CJK>
+0x4726	0x94C5	# <CJK>
+0x4727	0x5343	# <CJK>
+0x4728	0x8FC1	# <CJK>
+0x4729	0x7B7E	# <CJK>
+0x472A	0x4EDF	# <CJK>
+0x472B	0x8C26	# <CJK>
+0x472C	0x4E7E	# <CJK>
+0x472D	0x9ED4	# <CJK>
+0x472E	0x94B1	# <CJK>
+0x472F	0x94B3	# <CJK>
+0x4730	0x524D	# <CJK>
+0x4731	0x6F5C	# <CJK>
+0x4732	0x9063	# <CJK>
+0x4733	0x6D45	# <CJK>
+0x4734	0x8C34	# <CJK>
+0x4735	0x5811	# <CJK>
+0x4736	0x5D4C	# <CJK>
+0x4737	0x6B20	# <CJK>
+0x4738	0x6B49	# <CJK>
+0x4739	0x67AA	# <CJK>
+0x473A	0x545B	# <CJK>
+0x473B	0x8154	# <CJK>
+0x473C	0x7F8C	# <CJK>
+0x473D	0x5899	# <CJK>
+0x473E	0x8537	# <CJK>
+0x473F	0x5F3A	# <CJK>
+0x4740	0x62A2	# <CJK>
+0x4741	0x6A47	# <CJK>
+0x4742	0x9539	# <CJK>
+0x4743	0x6572	# <CJK>
+0x4744	0x6084	# <CJK>
+0x4745	0x6865	# <CJK>
+0x4746	0x77A7	# <CJK>
+0x4747	0x4E54	# <CJK>
+0x4748	0x4FA8	# <CJK>
+0x4749	0x5DE7	# <CJK>
+0x474A	0x9798	# <CJK>
+0x474B	0x64AC	# <CJK>
+0x474C	0x7FD8	# <CJK>
+0x474D	0x5CED	# <CJK>
+0x474E	0x4FCF	# <CJK>
+0x474F	0x7A8D	# <CJK>
+0x4750	0x5207	# <CJK>
+0x4751	0x8304	# <CJK>
+0x4752	0x4E14	# <CJK>
+0x4753	0x602F	# <CJK>
+0x4754	0x7A83	# <CJK>
+0x4755	0x94A6	# <CJK>
+0x4756	0x4FB5	# <CJK>
+0x4757	0x4EB2	# <CJK>
+0x4758	0x79E6	# <CJK>
+0x4759	0x7434	# <CJK>
+0x475A	0x52E4	# <CJK>
+0x475B	0x82B9	# <CJK>
+0x475C	0x64D2	# <CJK>
+0x475D	0x79BD	# <CJK>
+0x475E	0x5BDD	# <CJK>
+0x475F	0x6C81	# <CJK>
+0x4760	0x9752	# <CJK>
+0x4761	0x8F7B	# <CJK>
+0x4762	0x6C22	# <CJK>
+0x4763	0x503E	# <CJK>
+0x4764	0x537F	# <CJK>
+0x4765	0x6E05	# <CJK>
+0x4766	0x64CE	# <CJK>
+0x4767	0x6674	# <CJK>
+0x4768	0x6C30	# <CJK>
+0x4769	0x60C5	# <CJK>
+0x476A	0x9877	# <CJK>
+0x476B	0x8BF7	# <CJK>
+0x476C	0x5E86	# <CJK>
+0x476D	0x743C	# <CJK>
+0x476E	0x7A77	# <CJK>
+0x476F	0x79CB	# <CJK>
+0x4770	0x4E18	# <CJK>
+0x4771	0x90B1	# <CJK>
+0x4772	0x7403	# <CJK>
+0x4773	0x6C42	# <CJK>
+0x4774	0x56DA	# <CJK>
+0x4775	0x914B	# <CJK>
+0x4776	0x6CC5	# <CJK>
+0x4777	0x8D8B	# <CJK>
+0x4778	0x533A	# <CJK>
+0x4779	0x86C6	# <CJK>
+0x477A	0x66F2	# <CJK>
+0x477B	0x8EAF	# <CJK>
+0x477C	0x5C48	# <CJK>
+0x477D	0x9A71	# <CJK>
+0x477E	0x6E20	# <CJK>
+0x4821	0x53D6	# <CJK>
+0x4822	0x5A36	# <CJK>
+0x4823	0x9F8B	# <CJK>
+0x4824	0x8DA3	# <CJK>
+0x4825	0x53BB	# <CJK>
+0x4826	0x5708	# <CJK>
+0x4827	0x98A7	# <CJK>
+0x4828	0x6743	# <CJK>
+0x4829	0x919B	# <CJK>
+0x482A	0x6CC9	# <CJK>
+0x482B	0x5168	# <CJK>
+0x482C	0x75CA	# <CJK>
+0x482D	0x62F3	# <CJK>
+0x482E	0x72AC	# <CJK>
+0x482F	0x5238	# <CJK>
+0x4830	0x529D	# <CJK>
+0x4831	0x7F3A	# <CJK>
+0x4832	0x7094	# <CJK>
+0x4833	0x7638	# <CJK>
+0x4834	0x5374	# <CJK>
+0x4835	0x9E4A	# <CJK>
+0x4836	0x69B7	# <CJK>
+0x4837	0x786E	# <CJK>
+0x4838	0x96C0	# <CJK>
+0x4839	0x88D9	# <CJK>
+0x483A	0x7FA4	# <CJK>
+0x483B	0x7136	# <CJK>
+0x483C	0x71C3	# <CJK>
+0x483D	0x5189	# <CJK>
+0x483E	0x67D3	# <CJK>
+0x483F	0x74E4	# <CJK>
+0x4840	0x58E4	# <CJK>
+0x4841	0x6518	# <CJK>
+0x4842	0x56B7	# <CJK>
+0x4843	0x8BA9	# <CJK>
+0x4844	0x9976	# <CJK>
+0x4845	0x6270	# <CJK>
+0x4846	0x7ED5	# <CJK>
+0x4847	0x60F9	# <CJK>
+0x4848	0x70ED	# <CJK>
+0x4849	0x58EC	# <CJK>
+0x484A	0x4EC1	# <CJK>
+0x484B	0x4EBA	# <CJK>
+0x484C	0x5FCD	# <CJK>
+0x484D	0x97E7	# <CJK>
+0x484E	0x4EFB	# <CJK>
+0x484F	0x8BA4	# <CJK>
+0x4850	0x5203	# <CJK>
+0x4851	0x598A	# <CJK>
+0x4852	0x7EAB	# <CJK>
+0x4853	0x6254	# <CJK>
+0x4854	0x4ECD	# <CJK>
+0x4855	0x65E5	# <CJK>
+0x4856	0x620E	# <CJK>
+0x4857	0x8338	# <CJK>
+0x4858	0x84C9	# <CJK>
+0x4859	0x8363	# <CJK>
+0x485A	0x878D	# <CJK>
+0x485B	0x7194	# <CJK>
+0x485C	0x6EB6	# <CJK>
+0x485D	0x5BB9	# <CJK>
+0x485E	0x7ED2	# <CJK>
+0x485F	0x5197	# <CJK>
+0x4860	0x63C9	# <CJK>
+0x4861	0x67D4	# <CJK>
+0x4862	0x8089	# <CJK>
+0x4863	0x8339	# <CJK>
+0x4864	0x8815	# <CJK>
+0x4865	0x5112	# <CJK>
+0x4866	0x5B7A	# <CJK>
+0x4867	0x5982	# <CJK>
+0x4868	0x8FB1	# <CJK>
+0x4869	0x4E73	# <CJK>
+0x486A	0x6C5D	# <CJK>
+0x486B	0x5165	# <CJK>
+0x486C	0x8925	# <CJK>
+0x486D	0x8F6F	# <CJK>
+0x486E	0x962E	# <CJK>
+0x486F	0x854A	# <CJK>
+0x4870	0x745E	# <CJK>
+0x4871	0x9510	# <CJK>
+0x4872	0x95F0	# <CJK>
+0x4873	0x6DA6	# <CJK>
+0x4874	0x82E5	# <CJK>
+0x4875	0x5F31	# <CJK>
+0x4876	0x6492	# <CJK>
+0x4877	0x6D12	# <CJK>
+0x4878	0x8428	# <CJK>
+0x4879	0x816E	# <CJK>
+0x487A	0x9CC3	# <CJK>
+0x487B	0x585E	# <CJK>
+0x487C	0x8D5B	# <CJK>
+0x487D	0x4E09	# <CJK>
+0x487E	0x53C1	# <CJK>
+0x4921	0x4F1E	# <CJK>
+0x4922	0x6563	# <CJK>
+0x4923	0x6851	# <CJK>
+0x4924	0x55D3	# <CJK>
+0x4925	0x4E27	# <CJK>
+0x4926	0x6414	# <CJK>
+0x4927	0x9A9A	# <CJK>
+0x4928	0x626B	# <CJK>
+0x4929	0x5AC2	# <CJK>
+0x492A	0x745F	# <CJK>
+0x492B	0x8272	# <CJK>
+0x492C	0x6DA9	# <CJK>
+0x492D	0x68EE	# <CJK>
+0x492E	0x50E7	# <CJK>
+0x492F	0x838E	# <CJK>
+0x4930	0x7802	# <CJK>
+0x4931	0x6740	# <CJK>
+0x4932	0x5239	# <CJK>
+0x4933	0x6C99	# <CJK>
+0x4934	0x7EB1	# <CJK>
+0x4935	0x50BB	# <CJK>
+0x4936	0x5565	# <CJK>
+0x4937	0x715E	# <CJK>
+0x4938	0x7B5B	# <CJK>
+0x4939	0x6652	# <CJK>
+0x493A	0x73CA	# <CJK>
+0x493B	0x82EB	# <CJK>
+0x493C	0x6749	# <CJK>
+0x493D	0x5C71	# <CJK>
+0x493E	0x5220	# <CJK>
+0x493F	0x717D	# <CJK>
+0x4940	0x886B	# <CJK>
+0x4941	0x95EA	# <CJK>
+0x4942	0x9655	# <CJK>
+0x4943	0x64C5	# <CJK>
+0x4944	0x8D61	# <CJK>
+0x4945	0x81B3	# <CJK>
+0x4946	0x5584	# <CJK>
+0x4947	0x6C55	# <CJK>
+0x4948	0x6247	# <CJK>
+0x4949	0x7F2E	# <CJK>
+0x494A	0x5892	# <CJK>
+0x494B	0x4F24	# <CJK>
+0x494C	0x5546	# <CJK>
+0x494D	0x8D4F	# <CJK>
+0x494E	0x664C	# <CJK>
+0x494F	0x4E0A	# <CJK>
+0x4950	0x5C1A	# <CJK>
+0x4951	0x88F3	# <CJK>
+0x4952	0x68A2	# <CJK>
+0x4953	0x634E	# <CJK>
+0x4954	0x7A0D	# <CJK>
+0x4955	0x70E7	# <CJK>
+0x4956	0x828D	# <CJK>
+0x4957	0x52FA	# <CJK>
+0x4958	0x97F6	# <CJK>
+0x4959	0x5C11	# <CJK>
+0x495A	0x54E8	# <CJK>
+0x495B	0x90B5	# <CJK>
+0x495C	0x7ECD	# <CJK>
+0x495D	0x5962	# <CJK>
+0x495E	0x8D4A	# <CJK>
+0x495F	0x86C7	# <CJK>
+0x4960	0x820C	# <CJK>
+0x4961	0x820D	# <CJK>
+0x4962	0x8D66	# <CJK>
+0x4963	0x6444	# <CJK>
+0x4964	0x5C04	# <CJK>
+0x4965	0x6151	# <CJK>
+0x4966	0x6D89	# <CJK>
+0x4967	0x793E	# <CJK>
+0x4968	0x8BBE	# <CJK>
+0x4969	0x7837	# <CJK>
+0x496A	0x7533	# <CJK>
+0x496B	0x547B	# <CJK>
+0x496C	0x4F38	# <CJK>
+0x496D	0x8EAB	# <CJK>
+0x496E	0x6DF1	# <CJK>
+0x496F	0x5A20	# <CJK>
+0x4970	0x7EC5	# <CJK>
+0x4971	0x795E	# <CJK>
+0x4972	0x6C88	# <CJK>
+0x4973	0x5BA1	# <CJK>
+0x4974	0x5A76	# <CJK>
+0x4975	0x751A	# <CJK>
+0x4976	0x80BE	# <CJK>
+0x4977	0x614E	# <CJK>
+0x4978	0x6E17	# <CJK>
+0x4979	0x58F0	# <CJK>
+0x497A	0x751F	# <CJK>
+0x497B	0x7525	# <CJK>
+0x497C	0x7272	# <CJK>
+0x497D	0x5347	# <CJK>
+0x497E	0x7EF3	# <CJK>
+0x4A21	0x7701	# <CJK>
+0x4A22	0x76DB	# <CJK>
+0x4A23	0x5269	# <CJK>
+0x4A24	0x80DC	# <CJK>
+0x4A25	0x5723	# <CJK>
+0x4A26	0x5E08	# <CJK>
+0x4A27	0x5931	# <CJK>
+0x4A28	0x72EE	# <CJK>
+0x4A29	0x65BD	# <CJK>
+0x4A2A	0x6E7F	# <CJK>
+0x4A2B	0x8BD7	# <CJK>
+0x4A2C	0x5C38	# <CJK>
+0x4A2D	0x8671	# <CJK>
+0x4A2E	0x5341	# <CJK>
+0x4A2F	0x77F3	# <CJK>
+0x4A30	0x62FE	# <CJK>
+0x4A31	0x65F6	# <CJK>
+0x4A32	0x4EC0	# <CJK>
+0x4A33	0x98DF	# <CJK>
+0x4A34	0x8680	# <CJK>
+0x4A35	0x5B9E	# <CJK>
+0x4A36	0x8BC6	# <CJK>
+0x4A37	0x53F2	# <CJK>
+0x4A38	0x77E2	# <CJK>
+0x4A39	0x4F7F	# <CJK>
+0x4A3A	0x5C4E	# <CJK>
+0x4A3B	0x9A76	# <CJK>
+0x4A3C	0x59CB	# <CJK>
+0x4A3D	0x5F0F	# <CJK>
+0x4A3E	0x793A	# <CJK>
+0x4A3F	0x58EB	# <CJK>
+0x4A40	0x4E16	# <CJK>
+0x4A41	0x67FF	# <CJK>
+0x4A42	0x4E8B	# <CJK>
+0x4A43	0x62ED	# <CJK>
+0x4A44	0x8A93	# <CJK>
+0x4A45	0x901D	# <CJK>
+0x4A46	0x52BF	# <CJK>
+0x4A47	0x662F	# <CJK>
+0x4A48	0x55DC	# <CJK>
+0x4A49	0x566C	# <CJK>
+0x4A4A	0x9002	# <CJK>
+0x4A4B	0x4ED5	# <CJK>
+0x4A4C	0x4F8D	# <CJK>
+0x4A4D	0x91CA	# <CJK>
+0x4A4E	0x9970	# <CJK>
+0x4A4F	0x6C0F	# <CJK>
+0x4A50	0x5E02	# <CJK>
+0x4A51	0x6043	# <CJK>
+0x4A52	0x5BA4	# <CJK>
+0x4A53	0x89C6	# <CJK>
+0x4A54	0x8BD5	# <CJK>
+0x4A55	0x6536	# <CJK>
+0x4A56	0x624B	# <CJK>
+0x4A57	0x9996	# <CJK>
+0x4A58	0x5B88	# <CJK>
+0x4A59	0x5BFF	# <CJK>
+0x4A5A	0x6388	# <CJK>
+0x4A5B	0x552E	# <CJK>
+0x4A5C	0x53D7	# <CJK>
+0x4A5D	0x7626	# <CJK>
+0x4A5E	0x517D	# <CJK>
+0x4A5F	0x852C	# <CJK>
+0x4A60	0x67A2	# <CJK>
+0x4A61	0x68B3	# <CJK>
+0x4A62	0x6B8A	# <CJK>
+0x4A63	0x6292	# <CJK>
+0x4A64	0x8F93	# <CJK>
+0x4A65	0x53D4	# <CJK>
+0x4A66	0x8212	# <CJK>
+0x4A67	0x6DD1	# <CJK>
+0x4A68	0x758F	# <CJK>
+0x4A69	0x4E66	# <CJK>
+0x4A6A	0x8D4E	# <CJK>
+0x4A6B	0x5B70	# <CJK>
+0x4A6C	0x719F	# <CJK>
+0x4A6D	0x85AF	# <CJK>
+0x4A6E	0x6691	# <CJK>
+0x4A6F	0x66D9	# <CJK>
+0x4A70	0x7F72	# <CJK>
+0x4A71	0x8700	# <CJK>
+0x4A72	0x9ECD	# <CJK>
+0x4A73	0x9F20	# <CJK>
+0x4A74	0x5C5E	# <CJK>
+0x4A75	0x672F	# <CJK>
+0x4A76	0x8FF0	# <CJK>
+0x4A77	0x6811	# <CJK>
+0x4A78	0x675F	# <CJK>
+0x4A79	0x620D	# <CJK>
+0x4A7A	0x7AD6	# <CJK>
+0x4A7B	0x5885	# <CJK>
+0x4A7C	0x5EB6	# <CJK>
+0x4A7D	0x6570	# <CJK>
+0x4A7E	0x6F31	# <CJK>
+0x4B21	0x6055	# <CJK>
+0x4B22	0x5237	# <CJK>
+0x4B23	0x800D	# <CJK>
+0x4B24	0x6454	# <CJK>
+0x4B25	0x8870	# <CJK>
+0x4B26	0x7529	# <CJK>
+0x4B27	0x5E05	# <CJK>
+0x4B28	0x6813	# <CJK>
+0x4B29	0x62F4	# <CJK>
+0x4B2A	0x971C	# <CJK>
+0x4B2B	0x53CC	# <CJK>
+0x4B2C	0x723D	# <CJK>
+0x4B2D	0x8C01	# <CJK>
+0x4B2E	0x6C34	# <CJK>
+0x4B2F	0x7761	# <CJK>
+0x4B30	0x7A0E	# <CJK>
+0x4B31	0x542E	# <CJK>
+0x4B32	0x77AC	# <CJK>
+0x4B33	0x987A	# <CJK>
+0x4B34	0x821C	# <CJK>
+0x4B35	0x8BF4	# <CJK>
+0x4B36	0x7855	# <CJK>
+0x4B37	0x6714	# <CJK>
+0x4B38	0x70C1	# <CJK>
+0x4B39	0x65AF	# <CJK>
+0x4B3A	0x6495	# <CJK>
+0x4B3B	0x5636	# <CJK>
+0x4B3C	0x601D	# <CJK>
+0x4B3D	0x79C1	# <CJK>
+0x4B3E	0x53F8	# <CJK>
+0x4B3F	0x4E1D	# <CJK>
+0x4B40	0x6B7B	# <CJK>
+0x4B41	0x8086	# <CJK>
+0x4B42	0x5BFA	# <CJK>
+0x4B43	0x55E3	# <CJK>
+0x4B44	0x56DB	# <CJK>
+0x4B45	0x4F3A	# <CJK>
+0x4B46	0x4F3C	# <CJK>
+0x4B47	0x9972	# <CJK>
+0x4B48	0x5DF3	# <CJK>
+0x4B49	0x677E	# <CJK>
+0x4B4A	0x8038	# <CJK>
+0x4B4B	0x6002	# <CJK>
+0x4B4C	0x9882	# <CJK>
+0x4B4D	0x9001	# <CJK>
+0x4B4E	0x5B8B	# <CJK>
+0x4B4F	0x8BBC	# <CJK>
+0x4B50	0x8BF5	# <CJK>
+0x4B51	0x641C	# <CJK>
+0x4B52	0x8258	# <CJK>
+0x4B53	0x64DE	# <CJK>
+0x4B54	0x55FD	# <CJK>
+0x4B55	0x82CF	# <CJK>
+0x4B56	0x9165	# <CJK>
+0x4B57	0x4FD7	# <CJK>
+0x4B58	0x7D20	# <CJK>
+0x4B59	0x901F	# <CJK>
+0x4B5A	0x7C9F	# <CJK>
+0x4B5B	0x50F3	# <CJK>
+0x4B5C	0x5851	# <CJK>
+0x4B5D	0x6EAF	# <CJK>
+0x4B5E	0x5BBF	# <CJK>
+0x4B5F	0x8BC9	# <CJK>
+0x4B60	0x8083	# <CJK>
+0x4B61	0x9178	# <CJK>
+0x4B62	0x849C	# <CJK>
+0x4B63	0x7B97	# <CJK>
+0x4B64	0x867D	# <CJK>
+0x4B65	0x968B	# <CJK>
+0x4B66	0x968F	# <CJK>
+0x4B67	0x7EE5	# <CJK>
+0x4B68	0x9AD3	# <CJK>
+0x4B69	0x788E	# <CJK>
+0x4B6A	0x5C81	# <CJK>
+0x4B6B	0x7A57	# <CJK>
+0x4B6C	0x9042	# <CJK>
+0x4B6D	0x96A7	# <CJK>
+0x4B6E	0x795F	# <CJK>
+0x4B6F	0x5B59	# <CJK>
+0x4B70	0x635F	# <CJK>
+0x4B71	0x7B0B	# <CJK>
+0x4B72	0x84D1	# <CJK>
+0x4B73	0x68AD	# <CJK>
+0x4B74	0x5506	# <CJK>
+0x4B75	0x7F29	# <CJK>
+0x4B76	0x7410	# <CJK>
+0x4B77	0x7D22	# <CJK>
+0x4B78	0x9501	# <CJK>
+0x4B79	0x6240	# <CJK>
+0x4B7A	0x584C	# <CJK>
+0x4B7B	0x4ED6	# <CJK>
+0x4B7C	0x5B83	# <CJK>
+0x4B7D	0x5979	# <CJK>
+0x4B7E	0x5854	# <CJK>
+0x4C21	0x736D	# <CJK>
+0x4C22	0x631E	# <CJK>
+0x4C23	0x8E4B	# <CJK>
+0x4C24	0x8E0F	# <CJK>
+0x4C25	0x80CE	# <CJK>
+0x4C26	0x82D4	# <CJK>
+0x4C27	0x62AC	# <CJK>
+0x4C28	0x53F0	# <CJK>
+0x4C29	0x6CF0	# <CJK>
+0x4C2A	0x915E	# <CJK>
+0x4C2B	0x592A	# <CJK>
+0x4C2C	0x6001	# <CJK>
+0x4C2D	0x6C70	# <CJK>
+0x4C2E	0x574D	# <CJK>
+0x4C2F	0x644A	# <CJK>
+0x4C30	0x8D2A	# <CJK>
+0x4C31	0x762B	# <CJK>
+0x4C32	0x6EE9	# <CJK>
+0x4C33	0x575B	# <CJK>
+0x4C34	0x6A80	# <CJK>
+0x4C35	0x75F0	# <CJK>
+0x4C36	0x6F6D	# <CJK>
+0x4C37	0x8C2D	# <CJK>
+0x4C38	0x8C08	# <CJK>
+0x4C39	0x5766	# <CJK>
+0x4C3A	0x6BEF	# <CJK>
+0x4C3B	0x8892	# <CJK>
+0x4C3C	0x78B3	# <CJK>
+0x4C3D	0x63A2	# <CJK>
+0x4C3E	0x53F9	# <CJK>
+0x4C3F	0x70AD	# <CJK>
+0x4C40	0x6C64	# <CJK>
+0x4C41	0x5858	# <CJK>
+0x4C42	0x642A	# <CJK>
+0x4C43	0x5802	# <CJK>
+0x4C44	0x68E0	# <CJK>
+0x4C45	0x819B	# <CJK>
+0x4C46	0x5510	# <CJK>
+0x4C47	0x7CD6	# <CJK>
+0x4C48	0x5018	# <CJK>
+0x4C49	0x8EBA	# <CJK>
+0x4C4A	0x6DCC	# <CJK>
+0x4C4B	0x8D9F	# <CJK>
+0x4C4C	0x70EB	# <CJK>
+0x4C4D	0x638F	# <CJK>
+0x4C4E	0x6D9B	# <CJK>
+0x4C4F	0x6ED4	# <CJK>
+0x4C50	0x7EE6	# <CJK>
+0x4C51	0x8404	# <CJK>
+0x4C52	0x6843	# <CJK>
+0x4C53	0x9003	# <CJK>
+0x4C54	0x6DD8	# <CJK>
+0x4C55	0x9676	# <CJK>
+0x4C56	0x8BA8	# <CJK>
+0x4C57	0x5957	# <CJK>
+0x4C58	0x7279	# <CJK>
+0x4C59	0x85E4	# <CJK>
+0x4C5A	0x817E	# <CJK>
+0x4C5B	0x75BC	# <CJK>
+0x4C5C	0x8A8A	# <CJK>
+0x4C5D	0x68AF	# <CJK>
+0x4C5E	0x5254	# <CJK>
+0x4C5F	0x8E22	# <CJK>
+0x4C60	0x9511	# <CJK>
+0x4C61	0x63D0	# <CJK>
+0x4C62	0x9898	# <CJK>
+0x4C63	0x8E44	# <CJK>
+0x4C64	0x557C	# <CJK>
+0x4C65	0x4F53	# <CJK>
+0x4C66	0x66FF	# <CJK>
+0x4C67	0x568F	# <CJK>
+0x4C68	0x60D5	# <CJK>
+0x4C69	0x6D95	# <CJK>
+0x4C6A	0x5243	# <CJK>
+0x4C6B	0x5C49	# <CJK>
+0x4C6C	0x5929	# <CJK>
+0x4C6D	0x6DFB	# <CJK>
+0x4C6E	0x586B	# <CJK>
+0x4C6F	0x7530	# <CJK>
+0x4C70	0x751C	# <CJK>
+0x4C71	0x606C	# <CJK>
+0x4C72	0x8214	# <CJK>
+0x4C73	0x8146	# <CJK>
+0x4C74	0x6311	# <CJK>
+0x4C75	0x6761	# <CJK>
+0x4C76	0x8FE2	# <CJK>
+0x4C77	0x773A	# <CJK>
+0x4C78	0x8DF3	# <CJK>
+0x4C79	0x8D34	# <CJK>
+0x4C7A	0x94C1	# <CJK>
+0x4C7B	0x5E16	# <CJK>
+0x4C7C	0x5385	# <CJK>
+0x4C7D	0x542C	# <CJK>
+0x4C7E	0x70C3	# <CJK>
+0x4D21	0x6C40	# <CJK>
+0x4D22	0x5EF7	# <CJK>
+0x4D23	0x505C	# <CJK>
+0x4D24	0x4EAD	# <CJK>
+0x4D25	0x5EAD	# <CJK>
+0x4D26	0x633A	# <CJK>
+0x4D27	0x8247	# <CJK>
+0x4D28	0x901A	# <CJK>
+0x4D29	0x6850	# <CJK>
+0x4D2A	0x916E	# <CJK>
+0x4D2B	0x77B3	# <CJK>
+0x4D2C	0x540C	# <CJK>
+0x4D2D	0x94DC	# <CJK>
+0x4D2E	0x5F64	# <CJK>
+0x4D2F	0x7AE5	# <CJK>
+0x4D30	0x6876	# <CJK>
+0x4D31	0x6345	# <CJK>
+0x4D32	0x7B52	# <CJK>
+0x4D33	0x7EDF	# <CJK>
+0x4D34	0x75DB	# <CJK>
+0x4D35	0x5077	# <CJK>
+0x4D36	0x6295	# <CJK>
+0x4D37	0x5934	# <CJK>
+0x4D38	0x900F	# <CJK>
+0x4D39	0x51F8	# <CJK>
+0x4D3A	0x79C3	# <CJK>
+0x4D3B	0x7A81	# <CJK>
+0x4D3C	0x56FE	# <CJK>
+0x4D3D	0x5F92	# <CJK>
+0x4D3E	0x9014	# <CJK>
+0x4D3F	0x6D82	# <CJK>
+0x4D40	0x5C60	# <CJK>
+0x4D41	0x571F	# <CJK>
+0x4D42	0x5410	# <CJK>
+0x4D43	0x5154	# <CJK>
+0x4D44	0x6E4D	# <CJK>
+0x4D45	0x56E2	# <CJK>
+0x4D46	0x63A8	# <CJK>
+0x4D47	0x9893	# <CJK>
+0x4D48	0x817F	# <CJK>
+0x4D49	0x8715	# <CJK>
+0x4D4A	0x892A	# <CJK>
+0x4D4B	0x9000	# <CJK>
+0x4D4C	0x541E	# <CJK>
+0x4D4D	0x5C6F	# <CJK>
+0x4D4E	0x81C0	# <CJK>
+0x4D4F	0x62D6	# <CJK>
+0x4D50	0x6258	# <CJK>
+0x4D51	0x8131	# <CJK>
+0x4D52	0x9E35	# <CJK>
+0x4D53	0x9640	# <CJK>
+0x4D54	0x9A6E	# <CJK>
+0x4D55	0x9A7C	# <CJK>
+0x4D56	0x692D	# <CJK>
+0x4D57	0x59A5	# <CJK>
+0x4D58	0x62D3	# <CJK>
+0x4D59	0x553E	# <CJK>
+0x4D5A	0x6316	# <CJK>
+0x4D5B	0x54C7	# <CJK>
+0x4D5C	0x86D9	# <CJK>
+0x4D5D	0x6D3C	# <CJK>
+0x4D5E	0x5A03	# <CJK>
+0x4D5F	0x74E6	# <CJK>
+0x4D60	0x889C	# <CJK>
+0x4D61	0x6B6A	# <CJK>
+0x4D62	0x5916	# <CJK>
+0x4D63	0x8C4C	# <CJK>
+0x4D64	0x5F2F	# <CJK>
+0x4D65	0x6E7E	# <CJK>
+0x4D66	0x73A9	# <CJK>
+0x4D67	0x987D	# <CJK>
+0x4D68	0x4E38	# <CJK>
+0x4D69	0x70F7	# <CJK>
+0x4D6A	0x5B8C	# <CJK>
+0x4D6B	0x7897	# <CJK>
+0x4D6C	0x633D	# <CJK>
+0x4D6D	0x665A	# <CJK>
+0x4D6E	0x7696	# <CJK>
+0x4D6F	0x60CB	# <CJK>
+0x4D70	0x5B9B	# <CJK>
+0x4D71	0x5A49	# <CJK>
+0x4D72	0x4E07	# <CJK>
+0x4D73	0x8155	# <CJK>
+0x4D74	0x6C6A	# <CJK>
+0x4D75	0x738B	# <CJK>
+0x4D76	0x4EA1	# <CJK>
+0x4D77	0x6789	# <CJK>
+0x4D78	0x7F51	# <CJK>
+0x4D79	0x5F80	# <CJK>
+0x4D7A	0x65FA	# <CJK>
+0x4D7B	0x671B	# <CJK>
+0x4D7C	0x5FD8	# <CJK>
+0x4D7D	0x5984	# <CJK>
+0x4D7E	0x5A01	# <CJK>
+0x4E21	0x5DCD	# <CJK>
+0x4E22	0x5FAE	# <CJK>
+0x4E23	0x5371	# <CJK>
+0x4E24	0x97E6	# <CJK>
+0x4E25	0x8FDD	# <CJK>
+0x4E26	0x6845	# <CJK>
+0x4E27	0x56F4	# <CJK>
+0x4E28	0x552F	# <CJK>
+0x4E29	0x60DF	# <CJK>
+0x4E2A	0x4E3A	# <CJK>
+0x4E2B	0x6F4D	# <CJK>
+0x4E2C	0x7EF4	# <CJK>
+0x4E2D	0x82C7	# <CJK>
+0x4E2E	0x840E	# <CJK>
+0x4E2F	0x59D4	# <CJK>
+0x4E30	0x4F1F	# <CJK>
+0x4E31	0x4F2A	# <CJK>
+0x4E32	0x5C3E	# <CJK>
+0x4E33	0x7EAC	# <CJK>
+0x4E34	0x672A	# <CJK>
+0x4E35	0x851A	# <CJK>
+0x4E36	0x5473	# <CJK>
+0x4E37	0x754F	# <CJK>
+0x4E38	0x80C3	# <CJK>
+0x4E39	0x5582	# <CJK>
+0x4E3A	0x9B4F	# <CJK>
+0x4E3B	0x4F4D	# <CJK>
+0x4E3C	0x6E2D	# <CJK>
+0x4E3D	0x8C13	# <CJK>
+0x4E3E	0x5C09	# <CJK>
+0x4E3F	0x6170	# <CJK>
+0x4E40	0x536B	# <CJK>
+0x4E41	0x761F	# <CJK>
+0x4E42	0x6E29	# <CJK>
+0x4E43	0x868A	# <CJK>
+0x4E44	0x6587	# <CJK>
+0x4E45	0x95FB	# <CJK>
+0x4E46	0x7EB9	# <CJK>
+0x4E47	0x543B	# <CJK>
+0x4E48	0x7A33	# <CJK>
+0x4E49	0x7D0A	# <CJK>
+0x4E4A	0x95EE	# <CJK>
+0x4E4B	0x55E1	# <CJK>
+0x4E4C	0x7FC1	# <CJK>
+0x4E4D	0x74EE	# <CJK>
+0x4E4E	0x631D	# <CJK>
+0x4E4F	0x8717	# <CJK>
+0x4E50	0x6DA1	# <CJK>
+0x4E51	0x7A9D	# <CJK>
+0x4E52	0x6211	# <CJK>
+0x4E53	0x65A1	# <CJK>
+0x4E54	0x5367	# <CJK>
+0x4E55	0x63E1	# <CJK>
+0x4E56	0x6C83	# <CJK>
+0x4E57	0x5DEB	# <CJK>
+0x4E58	0x545C	# <CJK>
+0x4E59	0x94A8	# <CJK>
+0x4E5A	0x4E4C	# <CJK>
+0x4E5B	0x6C61	# <CJK>
+0x4E5C	0x8BEC	# <CJK>
+0x4E5D	0x5C4B	# <CJK>
+0x4E5E	0x65E0	# <CJK>
+0x4E5F	0x829C	# <CJK>
+0x4E60	0x68A7	# <CJK>
+0x4E61	0x543E	# <CJK>
+0x4E62	0x5434	# <CJK>
+0x4E63	0x6BCB	# <CJK>
+0x4E64	0x6B66	# <CJK>
+0x4E65	0x4E94	# <CJK>
+0x4E66	0x6342	# <CJK>
+0x4E67	0x5348	# <CJK>
+0x4E68	0x821E	# <CJK>
+0x4E69	0x4F0D	# <CJK>
+0x4E6A	0x4FAE	# <CJK>
+0x4E6B	0x575E	# <CJK>
+0x4E6C	0x620A	# <CJK>
+0x4E6D	0x96FE	# <CJK>
+0x4E6E	0x6664	# <CJK>
+0x4E6F	0x7269	# <CJK>
+0x4E70	0x52FF	# <CJK>
+0x4E71	0x52A1	# <CJK>
+0x4E72	0x609F	# <CJK>
+0x4E73	0x8BEF	# <CJK>
+0x4E74	0x6614	# <CJK>
+0x4E75	0x7199	# <CJK>
+0x4E76	0x6790	# <CJK>
+0x4E77	0x897F	# <CJK>
+0x4E78	0x7852	# <CJK>
+0x4E79	0x77FD	# <CJK>
+0x4E7A	0x6670	# <CJK>
+0x4E7B	0x563B	# <CJK>
+0x4E7C	0x5438	# <CJK>
+0x4E7D	0x9521	# <CJK>
+0x4E7E	0x727A	# <CJK>
+0x4F21	0x7A00	# <CJK>
+0x4F22	0x606F	# <CJK>
+0x4F23	0x5E0C	# <CJK>
+0x4F24	0x6089	# <CJK>
+0x4F25	0x819D	# <CJK>
+0x4F26	0x5915	# <CJK>
+0x4F27	0x60DC	# <CJK>
+0x4F28	0x7184	# <CJK>
+0x4F29	0x70EF	# <CJK>
+0x4F2A	0x6EAA	# <CJK>
+0x4F2B	0x6C50	# <CJK>
+0x4F2C	0x7280	# <CJK>
+0x4F2D	0x6A84	# <CJK>
+0x4F2E	0x88AD	# <CJK>
+0x4F2F	0x5E2D	# <CJK>
+0x4F30	0x4E60	# <CJK>
+0x4F31	0x5AB3	# <CJK>
+0x4F32	0x559C	# <CJK>
+0x4F33	0x94E3	# <CJK>
+0x4F34	0x6D17	# <CJK>
+0x4F35	0x7CFB	# <CJK>
+0x4F36	0x9699	# <CJK>
+0x4F37	0x620F	# <CJK>
+0x4F38	0x7EC6	# <CJK>
+0x4F39	0x778E	# <CJK>
+0x4F3A	0x867E	# <CJK>
+0x4F3B	0x5323	# <CJK>
+0x4F3C	0x971E	# <CJK>
+0x4F3D	0x8F96	# <CJK>
+0x4F3E	0x6687	# <CJK>
+0x4F3F	0x5CE1	# <CJK>
+0x4F40	0x4FA0	# <CJK>
+0x4F41	0x72ED	# <CJK>
+0x4F42	0x4E0B	# <CJK>
+0x4F43	0x53A6	# <CJK>
+0x4F44	0x590F	# <CJK>
+0x4F45	0x5413	# <CJK>
+0x4F46	0x6380	# <CJK>
+0x4F47	0x9528	# <CJK>
+0x4F48	0x5148	# <CJK>
+0x4F49	0x4ED9	# <CJK>
+0x4F4A	0x9C9C	# <CJK>
+0x4F4B	0x7EA4	# <CJK>
+0x4F4C	0x54B8	# <CJK>
+0x4F4D	0x8D24	# <CJK>
+0x4F4E	0x8854	# <CJK>
+0x4F4F	0x8237	# <CJK>
+0x4F50	0x95F2	# <CJK>
+0x4F51	0x6D8E	# <CJK>
+0x4F52	0x5F26	# <CJK>
+0x4F53	0x5ACC	# <CJK>
+0x4F54	0x663E	# <CJK>
+0x4F55	0x9669	# <CJK>
+0x4F56	0x73B0	# <CJK>
+0x4F57	0x732E	# <CJK>
+0x4F58	0x53BF	# <CJK>
+0x4F59	0x817A	# <CJK>
+0x4F5A	0x9985	# <CJK>
+0x4F5B	0x7FA1	# <CJK>
+0x4F5C	0x5BAA	# <CJK>
+0x4F5D	0x9677	# <CJK>
+0x4F5E	0x9650	# <CJK>
+0x4F5F	0x7EBF	# <CJK>
+0x4F60	0x76F8	# <CJK>
+0x4F61	0x53A2	# <CJK>
+0x4F62	0x9576	# <CJK>
+0x4F63	0x9999	# <CJK>
+0x4F64	0x7BB1	# <CJK>
+0x4F65	0x8944	# <CJK>
+0x4F66	0x6E58	# <CJK>
+0x4F67	0x4E61	# <CJK>
+0x4F68	0x7FD4	# <CJK>
+0x4F69	0x7965	# <CJK>
+0x4F6A	0x8BE6	# <CJK>
+0x4F6B	0x60F3	# <CJK>
+0x4F6C	0x54CD	# <CJK>
+0x4F6D	0x4EAB	# <CJK>
+0x4F6E	0x9879	# <CJK>
+0x4F6F	0x5DF7	# <CJK>
+0x4F70	0x6A61	# <CJK>
+0x4F71	0x50CF	# <CJK>
+0x4F72	0x5411	# <CJK>
+0x4F73	0x8C61	# <CJK>
+0x4F74	0x8427	# <CJK>
+0x4F75	0x785D	# <CJK>
+0x4F76	0x9704	# <CJK>
+0x4F77	0x524A	# <CJK>
+0x4F78	0x54EE	# <CJK>
+0x4F79	0x56A3	# <CJK>
+0x4F7A	0x9500	# <CJK>
+0x4F7B	0x6D88	# <CJK>
+0x4F7C	0x5BB5	# <CJK>
+0x4F7D	0x6DC6	# <CJK>
+0x4F7E	0x6653	# <CJK>
+0x5021	0x5C0F	# <CJK>
+0x5022	0x5B5D	# <CJK>
+0x5023	0x6821	# <CJK>
+0x5024	0x8096	# <CJK>
+0x5025	0x5578	# <CJK>
+0x5026	0x7B11	# <CJK>
+0x5027	0x6548	# <CJK>
+0x5028	0x6954	# <CJK>
+0x5029	0x4E9B	# <CJK>
+0x502A	0x6B47	# <CJK>
+0x502B	0x874E	# <CJK>
+0x502C	0x978B	# <CJK>
+0x502D	0x534F	# <CJK>
+0x502E	0x631F	# <CJK>
+0x502F	0x643A	# <CJK>
+0x5030	0x90AA	# <CJK>
+0x5031	0x659C	# <CJK>
+0x5032	0x80C1	# <CJK>
+0x5033	0x8C10	# <CJK>
+0x5034	0x5199	# <CJK>
+0x5035	0x68B0	# <CJK>
+0x5036	0x5378	# <CJK>
+0x5037	0x87F9	# <CJK>
+0x5038	0x61C8	# <CJK>
+0x5039	0x6CC4	# <CJK>
+0x503A	0x6CFB	# <CJK>
+0x503B	0x8C22	# <CJK>
+0x503C	0x5C51	# <CJK>
+0x503D	0x85AA	# <CJK>
+0x503E	0x82AF	# <CJK>
+0x503F	0x950C	# <CJK>
+0x5040	0x6B23	# <CJK>
+0x5041	0x8F9B	# <CJK>
+0x5042	0x65B0	# <CJK>
+0x5043	0x5FFB	# <CJK>
+0x5044	0x5FC3	# <CJK>
+0x5045	0x4FE1	# <CJK>
+0x5046	0x8845	# <CJK>
+0x5047	0x661F	# <CJK>
+0x5048	0x8165	# <CJK>
+0x5049	0x7329	# <CJK>
+0x504A	0x60FA	# <CJK>
+0x504B	0x5174	# <CJK>
+0x504C	0x5211	# <CJK>
+0x504D	0x578B	# <CJK>
+0x504E	0x5F62	# <CJK>
+0x504F	0x90A2	# <CJK>
+0x5050	0x884C	# <CJK>
+0x5051	0x9192	# <CJK>
+0x5052	0x5E78	# <CJK>
+0x5053	0x674F	# <CJK>
+0x5054	0x6027	# <CJK>
+0x5055	0x59D3	# <CJK>
+0x5056	0x5144	# <CJK>
+0x5057	0x51F6	# <CJK>
+0x5058	0x80F8	# <CJK>
+0x5059	0x5308	# <CJK>
+0x505A	0x6C79	# <CJK>
+0x505B	0x96C4	# <CJK>
+0x505C	0x718A	# <CJK>
+0x505D	0x4F11	# <CJK>
+0x505E	0x4FEE	# <CJK>
+0x505F	0x7F9E	# <CJK>
+0x5060	0x673D	# <CJK>
+0x5061	0x55C5	# <CJK>
+0x5062	0x9508	# <CJK>
+0x5063	0x79C0	# <CJK>
+0x5064	0x8896	# <CJK>
+0x5065	0x7EE3	# <CJK>
+0x5066	0x589F	# <CJK>
+0x5067	0x620C	# <CJK>
+0x5068	0x9700	# <CJK>
+0x5069	0x865A	# <CJK>
+0x506A	0x5618	# <CJK>
+0x506B	0x987B	# <CJK>
+0x506C	0x5F90	# <CJK>
+0x506D	0x8BB8	# <CJK>
+0x506E	0x84C4	# <CJK>
+0x506F	0x9157	# <CJK>
+0x5070	0x53D9	# <CJK>
+0x5071	0x65ED	# <CJK>
+0x5072	0x5E8F	# <CJK>
+0x5073	0x755C	# <CJK>
+0x5074	0x6064	# <CJK>
+0x5075	0x7D6E	# <CJK>
+0x5076	0x5A7F	# <CJK>
+0x5077	0x7EEA	# <CJK>
+0x5078	0x7EED	# <CJK>
+0x5079	0x8F69	# <CJK>
+0x507A	0x55A7	# <CJK>
+0x507B	0x5BA3	# <CJK>
+0x507C	0x60AC	# <CJK>
+0x507D	0x65CB	# <CJK>
+0x507E	0x7384	# <CJK>
+0x5121	0x9009	# <CJK>
+0x5122	0x7663	# <CJK>
+0x5123	0x7729	# <CJK>
+0x5124	0x7EDA	# <CJK>
+0x5125	0x9774	# <CJK>
+0x5126	0x859B	# <CJK>
+0x5127	0x5B66	# <CJK>
+0x5128	0x7A74	# <CJK>
+0x5129	0x96EA	# <CJK>
+0x512A	0x8840	# <CJK>
+0x512B	0x52CB	# <CJK>
+0x512C	0x718F	# <CJK>
+0x512D	0x5FAA	# <CJK>
+0x512E	0x65EC	# <CJK>
+0x512F	0x8BE2	# <CJK>
+0x5130	0x5BFB	# <CJK>
+0x5131	0x9A6F	# <CJK>
+0x5132	0x5DE1	# <CJK>
+0x5133	0x6B89	# <CJK>
+0x5134	0x6C5B	# <CJK>
+0x5135	0x8BAD	# <CJK>
+0x5136	0x8BAF	# <CJK>
+0x5137	0x900A	# <CJK>
+0x5138	0x8FC5	# <CJK>
+0x5139	0x538B	# <CJK>
+0x513A	0x62BC	# <CJK>
+0x513B	0x9E26	# <CJK>
+0x513C	0x9E2D	# <CJK>
+0x513D	0x5440	# <CJK>
+0x513E	0x4E2B	# <CJK>
+0x513F	0x82BD	# <CJK>
+0x5140	0x7259	# <CJK>
+0x5141	0x869C	# <CJK>
+0x5142	0x5D16	# <CJK>
+0x5143	0x8859	# <CJK>
+0x5144	0x6DAF	# <CJK>
+0x5145	0x96C5	# <CJK>
+0x5146	0x54D1	# <CJK>
+0x5147	0x4E9A	# <CJK>
+0x5148	0x8BB6	# <CJK>
+0x5149	0x7109	# <CJK>
+0x514A	0x54BD	# <CJK>
+0x514B	0x9609	# <CJK>
+0x514C	0x70DF	# <CJK>
+0x514D	0x6DF9	# <CJK>
+0x514E	0x76D0	# <CJK>
+0x514F	0x4E25	# <CJK>
+0x5150	0x7814	# <CJK>
+0x5151	0x8712	# <CJK>
+0x5152	0x5CA9	# <CJK>
+0x5153	0x5EF6	# <CJK>
+0x5154	0x8A00	# <CJK>
+0x5155	0x989C	# <CJK>
+0x5156	0x960E	# <CJK>
+0x5157	0x708E	# <CJK>
+0x5158	0x6CBF	# <CJK>
+0x5159	0x5944	# <CJK>
+0x515A	0x63A9	# <CJK>
+0x515B	0x773C	# <CJK>
+0x515C	0x884D	# <CJK>
+0x515D	0x6F14	# <CJK>
+0x515E	0x8273	# <CJK>
+0x515F	0x5830	# <CJK>
+0x5160	0x71D5	# <CJK>
+0x5161	0x538C	# <CJK>
+0x5162	0x781A	# <CJK>
+0x5163	0x96C1	# <CJK>
+0x5164	0x5501	# <CJK>
+0x5165	0x5F66	# <CJK>
+0x5166	0x7130	# <CJK>
+0x5167	0x5BB4	# <CJK>
+0x5168	0x8C1A	# <CJK>
+0x5169	0x9A8C	# <CJK>
+0x516A	0x6B83	# <CJK>
+0x516B	0x592E	# <CJK>
+0x516C	0x9E2F	# <CJK>
+0x516D	0x79E7	# <CJK>
+0x516E	0x6768	# <CJK>
+0x516F	0x626C	# <CJK>
+0x5170	0x4F6F	# <CJK>
+0x5171	0x75A1	# <CJK>
+0x5172	0x7F8A	# <CJK>
+0x5173	0x6D0B	# <CJK>
+0x5174	0x9633	# <CJK>
+0x5175	0x6C27	# <CJK>
+0x5176	0x4EF0	# <CJK>
+0x5177	0x75D2	# <CJK>
+0x5178	0x517B	# <CJK>
+0x5179	0x6837	# <CJK>
+0x517A	0x6F3E	# <CJK>
+0x517B	0x9080	# <CJK>
+0x517C	0x8170	# <CJK>
+0x517D	0x5996	# <CJK>
+0x517E	0x7476	# <CJK>
+0x5221	0x6447	# <CJK>
+0x5222	0x5C27	# <CJK>
+0x5223	0x9065	# <CJK>
+0x5224	0x7A91	# <CJK>
+0x5225	0x8C23	# <CJK>
+0x5226	0x59DA	# <CJK>
+0x5227	0x54AC	# <CJK>
+0x5228	0x8200	# <CJK>
+0x5229	0x836F	# <CJK>
+0x522A	0x8981	# <CJK>
+0x522B	0x8000	# <CJK>
+0x522C	0x6930	# <CJK>
+0x522D	0x564E	# <CJK>
+0x522E	0x8036	# <CJK>
+0x522F	0x7237	# <CJK>
+0x5230	0x91CE	# <CJK>
+0x5231	0x51B6	# <CJK>
+0x5232	0x4E5F	# <CJK>
+0x5233	0x9875	# <CJK>
+0x5234	0x6396	# <CJK>
+0x5235	0x4E1A	# <CJK>
+0x5236	0x53F6	# <CJK>
+0x5237	0x66F3	# <CJK>
+0x5238	0x814B	# <CJK>
+0x5239	0x591C	# <CJK>
+0x523A	0x6DB2	# <CJK>
+0x523B	0x4E00	# <CJK>
+0x523C	0x58F9	# <CJK>
+0x523D	0x533B	# <CJK>
+0x523E	0x63D6	# <CJK>
+0x523F	0x94F1	# <CJK>
+0x5240	0x4F9D	# <CJK>
+0x5241	0x4F0A	# <CJK>
+0x5242	0x8863	# <CJK>
+0x5243	0x9890	# <CJK>
+0x5244	0x5937	# <CJK>
+0x5245	0x9057	# <CJK>
+0x5246	0x79FB	# <CJK>
+0x5247	0x4EEA	# <CJK>
+0x5248	0x80F0	# <CJK>
+0x5249	0x7591	# <CJK>
+0x524A	0x6C82	# <CJK>
+0x524B	0x5B9C	# <CJK>
+0x524C	0x59E8	# <CJK>
+0x524D	0x5F5D	# <CJK>
+0x524E	0x6905	# <CJK>
+0x524F	0x8681	# <CJK>
+0x5250	0x501A	# <CJK>
+0x5251	0x5DF2	# <CJK>
+0x5252	0x4E59	# <CJK>
+0x5253	0x77E3	# <CJK>
+0x5254	0x4EE5	# <CJK>
+0x5255	0x827A	# <CJK>
+0x5256	0x6291	# <CJK>
+0x5257	0x6613	# <CJK>
+0x5258	0x9091	# <CJK>
+0x5259	0x5C79	# <CJK>
+0x525A	0x4EBF	# <CJK>
+0x525B	0x5F79	# <CJK>
+0x525C	0x81C6	# <CJK>
+0x525D	0x9038	# <CJK>
+0x525E	0x8084	# <CJK>
+0x525F	0x75AB	# <CJK>
+0x5260	0x4EA6	# <CJK>
+0x5261	0x88D4	# <CJK>
+0x5262	0x610F	# <CJK>
+0x5263	0x6BC5	# <CJK>
+0x5264	0x5FC6	# <CJK>
+0x5265	0x4E49	# <CJK>
+0x5266	0x76CA	# <CJK>
+0x5267	0x6EA2	# <CJK>
+0x5268	0x8BE3	# <CJK>
+0x5269	0x8BAE	# <CJK>
+0x526A	0x8C0A	# <CJK>
+0x526B	0x8BD1	# <CJK>
+0x526C	0x5F02	# <CJK>
+0x526D	0x7FFC	# <CJK>
+0x526E	0x7FCC	# <CJK>
+0x526F	0x7ECE	# <CJK>
+0x5270	0x8335	# <CJK>
+0x5271	0x836B	# <CJK>
+0x5272	0x56E0	# <CJK>
+0x5273	0x6BB7	# <CJK>
+0x5274	0x97F3	# <CJK>
+0x5275	0x9634	# <CJK>
+0x5276	0x59FB	# <CJK>
+0x5277	0x541F	# <CJK>
+0x5278	0x94F6	# <CJK>
+0x5279	0x6DEB	# <CJK>
+0x527A	0x5BC5	# <CJK>
+0x527B	0x996E	# <CJK>
+0x527C	0x5C39	# <CJK>
+0x527D	0x5F15	# <CJK>
+0x527E	0x9690	# <CJK>
+0x5321	0x5370	# <CJK>
+0x5322	0x82F1	# <CJK>
+0x5323	0x6A31	# <CJK>
+0x5324	0x5A74	# <CJK>
+0x5325	0x9E70	# <CJK>
+0x5326	0x5E94	# <CJK>
+0x5327	0x7F28	# <CJK>
+0x5328	0x83B9	# <CJK>
+0x5329	0x8424	# <CJK>
+0x532A	0x8425	# <CJK>
+0x532B	0x8367	# <CJK>
+0x532C	0x8747	# <CJK>
+0x532D	0x8FCE	# <CJK>
+0x532E	0x8D62	# <CJK>
+0x532F	0x76C8	# <CJK>
+0x5330	0x5F71	# <CJK>
+0x5331	0x9896	# <CJK>
+0x5332	0x786C	# <CJK>
+0x5333	0x6620	# <CJK>
+0x5334	0x54DF	# <CJK>
+0x5335	0x62E5	# <CJK>
+0x5336	0x4F63	# <CJK>
+0x5337	0x81C3	# <CJK>
+0x5338	0x75C8	# <CJK>
+0x5339	0x5EB8	# <CJK>
+0x533A	0x96CD	# <CJK>
+0x533B	0x8E0A	# <CJK>
+0x533C	0x86F9	# <CJK>
+0x533D	0x548F	# <CJK>
+0x533E	0x6CF3	# <CJK>
+0x533F	0x6D8C	# <CJK>
+0x5340	0x6C38	# <CJK>
+0x5341	0x607F	# <CJK>
+0x5342	0x52C7	# <CJK>
+0x5343	0x7528	# <CJK>
+0x5344	0x5E7D	# <CJK>
+0x5345	0x4F18	# <CJK>
+0x5346	0x60A0	# <CJK>
+0x5347	0x5FE7	# <CJK>
+0x5348	0x5C24	# <CJK>
+0x5349	0x7531	# <CJK>
+0x534A	0x90AE	# <CJK>
+0x534B	0x94C0	# <CJK>
+0x534C	0x72B9	# <CJK>
+0x534D	0x6CB9	# <CJK>
+0x534E	0x6E38	# <CJK>
+0x534F	0x9149	# <CJK>
+0x5350	0x6709	# <CJK>
+0x5351	0x53CB	# <CJK>
+0x5352	0x53F3	# <CJK>
+0x5353	0x4F51	# <CJK>
+0x5354	0x91C9	# <CJK>
+0x5355	0x8BF1	# <CJK>
+0x5356	0x53C8	# <CJK>
+0x5357	0x5E7C	# <CJK>
+0x5358	0x8FC2	# <CJK>
+0x5359	0x6DE4	# <CJK>
+0x535A	0x4E8E	# <CJK>
+0x535B	0x76C2	# <CJK>
+0x535C	0x6986	# <CJK>
+0x535D	0x865E	# <CJK>
+0x535E	0x611A	# <CJK>
+0x535F	0x8206	# <CJK>
+0x5360	0x4F59	# <CJK>
+0x5361	0x4FDE	# <CJK>
+0x5362	0x903E	# <CJK>
+0x5363	0x9C7C	# <CJK>
+0x5364	0x6109	# <CJK>
+0x5365	0x6E1D	# <CJK>
+0x5366	0x6E14	# <CJK>
+0x5367	0x9685	# <CJK>
+0x5368	0x4E88	# <CJK>
+0x5369	0x5A31	# <CJK>
+0x536A	0x96E8	# <CJK>
+0x536B	0x4E0E	# <CJK>
+0x536C	0x5C7F	# <CJK>
+0x536D	0x79B9	# <CJK>
+0x536E	0x5B87	# <CJK>
+0x536F	0x8BED	# <CJK>
+0x5370	0x7FBD	# <CJK>
+0x5371	0x7389	# <CJK>
+0x5372	0x57DF	# <CJK>
+0x5373	0x828B	# <CJK>
+0x5374	0x90C1	# <CJK>
+0x5375	0x5401	# <CJK>
+0x5376	0x9047	# <CJK>
+0x5377	0x55BB	# <CJK>
+0x5378	0x5CEA	# <CJK>
+0x5379	0x5FA1	# <CJK>
+0x537A	0x6108	# <CJK>
+0x537B	0x6B32	# <CJK>
+0x537C	0x72F1	# <CJK>
+0x537D	0x80B2	# <CJK>
+0x537E	0x8A89	# <CJK>
+0x5421	0x6D74	# <CJK>
+0x5422	0x5BD3	# <CJK>
+0x5423	0x88D5	# <CJK>
+0x5424	0x9884	# <CJK>
+0x5425	0x8C6B	# <CJK>
+0x5426	0x9A6D	# <CJK>
+0x5427	0x9E33	# <CJK>
+0x5428	0x6E0A	# <CJK>
+0x5429	0x51A4	# <CJK>
+0x542A	0x5143	# <CJK>
+0x542B	0x57A3	# <CJK>
+0x542C	0x8881	# <CJK>
+0x542D	0x539F	# <CJK>
+0x542E	0x63F4	# <CJK>
+0x542F	0x8F95	# <CJK>
+0x5430	0x56ED	# <CJK>
+0x5431	0x5458	# <CJK>
+0x5432	0x5706	# <CJK>
+0x5433	0x733F	# <CJK>
+0x5434	0x6E90	# <CJK>
+0x5435	0x7F18	# <CJK>
+0x5436	0x8FDC	# <CJK>
+0x5437	0x82D1	# <CJK>
+0x5438	0x613F	# <CJK>
+0x5439	0x6028	# <CJK>
+0x543A	0x9662	# <CJK>
+0x543B	0x66F0	# <CJK>
+0x543C	0x7EA6	# <CJK>
+0x543D	0x8D8A	# <CJK>
+0x543E	0x8DC3	# <CJK>
+0x543F	0x94A5	# <CJK>
+0x5440	0x5CB3	# <CJK>
+0x5441	0x7CA4	# <CJK>
+0x5442	0x6708	# <CJK>
+0x5443	0x60A6	# <CJK>
+0x5444	0x9605	# <CJK>
+0x5445	0x8018	# <CJK>
+0x5446	0x4E91	# <CJK>
+0x5447	0x90E7	# <CJK>
+0x5448	0x5300	# <CJK>
+0x5449	0x9668	# <CJK>
+0x544A	0x5141	# <CJK>
+0x544B	0x8FD0	# <CJK>
+0x544C	0x8574	# <CJK>
+0x544D	0x915D	# <CJK>
+0x544E	0x6655	# <CJK>
+0x544F	0x97F5	# <CJK>
+0x5450	0x5B55	# <CJK>
+0x5451	0x531D	# <CJK>
+0x5452	0x7838	# <CJK>
+0x5453	0x6742	# <CJK>
+0x5454	0x683D	# <CJK>
+0x5455	0x54C9	# <CJK>
+0x5456	0x707E	# <CJK>
+0x5457	0x5BB0	# <CJK>
+0x5458	0x8F7D	# <CJK>
+0x5459	0x518D	# <CJK>
+0x545A	0x5728	# <CJK>
+0x545B	0x54B1	# <CJK>
+0x545C	0x6512	# <CJK>
+0x545D	0x6682	# <CJK>
+0x545E	0x8D5E	# <CJK>
+0x545F	0x8D43	# <CJK>
+0x5460	0x810F	# <CJK>
+0x5461	0x846C	# <CJK>
+0x5462	0x906D	# <CJK>
+0x5463	0x7CDF	# <CJK>
+0x5464	0x51FF	# <CJK>
+0x5465	0x85FB	# <CJK>
+0x5466	0x67A3	# <CJK>
+0x5467	0x65E9	# <CJK>
+0x5468	0x6FA1	# <CJK>
+0x5469	0x86A4	# <CJK>
+0x546A	0x8E81	# <CJK>
+0x546B	0x566A	# <CJK>
+0x546C	0x9020	# <CJK>
+0x546D	0x7682	# <CJK>
+0x546E	0x7076	# <CJK>
+0x546F	0x71E5	# <CJK>
+0x5470	0x8D23	# <CJK>
+0x5471	0x62E9	# <CJK>
+0x5472	0x5219	# <CJK>
+0x5473	0x6CFD	# <CJK>
+0x5474	0x8D3C	# <CJK>
+0x5475	0x600E	# <CJK>
+0x5476	0x589E	# <CJK>
+0x5477	0x618E	# <CJK>
+0x5478	0x66FE	# <CJK>
+0x5479	0x8D60	# <CJK>
+0x547A	0x624E	# <CJK>
+0x547B	0x55B3	# <CJK>
+0x547C	0x6E23	# <CJK>
+0x547D	0x672D	# <CJK>
+0x547E	0x8F67	# <CJK>
+0x5521	0x94E1	# <CJK>
+0x5522	0x95F8	# <CJK>
+0x5523	0x7728	# <CJK>
+0x5524	0x6805	# <CJK>
+0x5525	0x69A8	# <CJK>
+0x5526	0x548B	# <CJK>
+0x5527	0x4E4D	# <CJK>
+0x5528	0x70B8	# <CJK>
+0x5529	0x8BC8	# <CJK>
+0x552A	0x6458	# <CJK>
+0x552B	0x658B	# <CJK>
+0x552C	0x5B85	# <CJK>
+0x552D	0x7A84	# <CJK>
+0x552E	0x503A	# <CJK>
+0x552F	0x5BE8	# <CJK>
+0x5530	0x77BB	# <CJK>
+0x5531	0x6BE1	# <CJK>
+0x5532	0x8A79	# <CJK>
+0x5533	0x7C98	# <CJK>
+0x5534	0x6CBE	# <CJK>
+0x5535	0x76CF	# <CJK>
+0x5536	0x65A9	# <CJK>
+0x5537	0x8F97	# <CJK>
+0x5538	0x5D2D	# <CJK>
+0x5539	0x5C55	# <CJK>
+0x553A	0x8638	# <CJK>
+0x553B	0x6808	# <CJK>
+0x553C	0x5360	# <CJK>
+0x553D	0x6218	# <CJK>
+0x553E	0x7AD9	# <CJK>
+0x553F	0x6E5B	# <CJK>
+0x5540	0x7EFD	# <CJK>
+0x5541	0x6A1F	# <CJK>
+0x5542	0x7AE0	# <CJK>
+0x5543	0x5F70	# <CJK>
+0x5544	0x6F33	# <CJK>
+0x5545	0x5F20	# <CJK>
+0x5546	0x638C	# <CJK>
+0x5547	0x6DA8	# <CJK>
+0x5548	0x6756	# <CJK>
+0x5549	0x4E08	# <CJK>
+0x554A	0x5E10	# <CJK>
+0x554B	0x8D26	# <CJK>
+0x554C	0x4ED7	# <CJK>
+0x554D	0x80C0	# <CJK>
+0x554E	0x7634	# <CJK>
+0x554F	0x969C	# <CJK>
+0x5550	0x62DB	# <CJK>
+0x5551	0x662D	# <CJK>
+0x5552	0x627E	# <CJK>
+0x5553	0x6CBC	# <CJK>
+0x5554	0x8D75	# <CJK>
+0x5555	0x7167	# <CJK>
+0x5556	0x7F69	# <CJK>
+0x5557	0x5146	# <CJK>
+0x5558	0x8087	# <CJK>
+0x5559	0x53EC	# <CJK>
+0x555A	0x906E	# <CJK>
+0x555B	0x6298	# <CJK>
+0x555C	0x54F2	# <CJK>
+0x555D	0x86F0	# <CJK>
+0x555E	0x8F99	# <CJK>
+0x555F	0x8005	# <CJK>
+0x5560	0x9517	# <CJK>
+0x5561	0x8517	# <CJK>
+0x5562	0x8FD9	# <CJK>
+0x5563	0x6D59	# <CJK>
+0x5564	0x73CD	# <CJK>
+0x5565	0x659F	# <CJK>
+0x5566	0x771F	# <CJK>
+0x5567	0x7504	# <CJK>
+0x5568	0x7827	# <CJK>
+0x5569	0x81FB	# <CJK>
+0x556A	0x8D1E	# <CJK>
+0x556B	0x9488	# <CJK>
+0x556C	0x4FA6	# <CJK>
+0x556D	0x6795	# <CJK>
+0x556E	0x75B9	# <CJK>
+0x556F	0x8BCA	# <CJK>
+0x5570	0x9707	# <CJK>
+0x5571	0x632F	# <CJK>
+0x5572	0x9547	# <CJK>
+0x5573	0x9635	# <CJK>
+0x5574	0x84B8	# <CJK>
+0x5575	0x6323	# <CJK>
+0x5576	0x7741	# <CJK>
+0x5577	0x5F81	# <CJK>
+0x5578	0x72F0	# <CJK>
+0x5579	0x4E89	# <CJK>
+0x557A	0x6014	# <CJK>
+0x557B	0x6574	# <CJK>
+0x557C	0x62EF	# <CJK>
+0x557D	0x6B63	# <CJK>
+0x557E	0x653F	# <CJK>
+0x5621	0x5E27	# <CJK>
+0x5622	0x75C7	# <CJK>
+0x5623	0x90D1	# <CJK>
+0x5624	0x8BC1	# <CJK>
+0x5625	0x829D	# <CJK>
+0x5626	0x679D	# <CJK>
+0x5627	0x652F	# <CJK>
+0x5628	0x5431	# <CJK>
+0x5629	0x8718	# <CJK>
+0x562A	0x77E5	# <CJK>
+0x562B	0x80A2	# <CJK>
+0x562C	0x8102	# <CJK>
+0x562D	0x6C41	# <CJK>
+0x562E	0x4E4B	# <CJK>
+0x562F	0x7EC7	# <CJK>
+0x5630	0x804C	# <CJK>
+0x5631	0x76F4	# <CJK>
+0x5632	0x690D	# <CJK>
+0x5633	0x6B96	# <CJK>
+0x5634	0x6267	# <CJK>
+0x5635	0x503C	# <CJK>
+0x5636	0x4F84	# <CJK>
+0x5637	0x5740	# <CJK>
+0x5638	0x6307	# <CJK>
+0x5639	0x6B62	# <CJK>
+0x563A	0x8DBE	# <CJK>
+0x563B	0x53EA	# <CJK>
+0x563C	0x65E8	# <CJK>
+0x563D	0x7EB8	# <CJK>
+0x563E	0x5FD7	# <CJK>
+0x563F	0x631A	# <CJK>
+0x5640	0x63B7	# <CJK>
+0x5641	0x81F3	# <CJK>
+0x5642	0x81F4	# <CJK>
+0x5643	0x7F6E	# <CJK>
+0x5644	0x5E1C	# <CJK>
+0x5645	0x5CD9	# <CJK>
+0x5646	0x5236	# <CJK>
+0x5647	0x667A	# <CJK>
+0x5648	0x79E9	# <CJK>
+0x5649	0x7A1A	# <CJK>
+0x564A	0x8D28	# <CJK>
+0x564B	0x7099	# <CJK>
+0x564C	0x75D4	# <CJK>
+0x564D	0x6EDE	# <CJK>
+0x564E	0x6CBB	# <CJK>
+0x564F	0x7A92	# <CJK>
+0x5650	0x4E2D	# <CJK>
+0x5651	0x76C5	# <CJK>
+0x5652	0x5FE0	# <CJK>
+0x5653	0x949F	# <CJK>
+0x5654	0x8877	# <CJK>
+0x5655	0x7EC8	# <CJK>
+0x5656	0x79CD	# <CJK>
+0x5657	0x80BF	# <CJK>
+0x5658	0x91CD	# <CJK>
+0x5659	0x4EF2	# <CJK>
+0x565A	0x4F17	# <CJK>
+0x565B	0x821F	# <CJK>
+0x565C	0x5468	# <CJK>
+0x565D	0x5DDE	# <CJK>
+0x565E	0x6D32	# <CJK>
+0x565F	0x8BCC	# <CJK>
+0x5660	0x7CA5	# <CJK>
+0x5661	0x8F74	# <CJK>
+0x5662	0x8098	# <CJK>
+0x5663	0x5E1A	# <CJK>
+0x5664	0x5492	# <CJK>
+0x5665	0x76B1	# <CJK>
+0x5666	0x5B99	# <CJK>
+0x5667	0x663C	# <CJK>
+0x5668	0x9AA4	# <CJK>
+0x5669	0x73E0	# <CJK>
+0x566A	0x682A	# <CJK>
+0x566B	0x86DB	# <CJK>
+0x566C	0x6731	# <CJK>
+0x566D	0x732A	# <CJK>
+0x566E	0x8BF8	# <CJK>
+0x566F	0x8BDB	# <CJK>
+0x5670	0x9010	# <CJK>
+0x5671	0x7AF9	# <CJK>
+0x5672	0x70DB	# <CJK>
+0x5673	0x716E	# <CJK>
+0x5674	0x62C4	# <CJK>
+0x5675	0x77A9	# <CJK>
+0x5676	0x5631	# <CJK>
+0x5677	0x4E3B	# <CJK>
+0x5678	0x8457	# <CJK>
+0x5679	0x67F1	# <CJK>
+0x567A	0x52A9	# <CJK>
+0x567B	0x86C0	# <CJK>
+0x567C	0x8D2E	# <CJK>
+0x567D	0x94F8	# <CJK>
+0x567E	0x7B51	# <CJK>
+0x5721	0x4F4F	# <CJK>
+0x5722	0x6CE8	# <CJK>
+0x5723	0x795D	# <CJK>
+0x5724	0x9A7B	# <CJK>
+0x5725	0x6293	# <CJK>
+0x5726	0x722A	# <CJK>
+0x5727	0x62FD	# <CJK>
+0x5728	0x4E13	# <CJK>
+0x5729	0x7816	# <CJK>
+0x572A	0x8F6C	# <CJK>
+0x572B	0x64B0	# <CJK>
+0x572C	0x8D5A	# <CJK>
+0x572D	0x7BC6	# <CJK>
+0x572E	0x6869	# <CJK>
+0x572F	0x5E84	# <CJK>
+0x5730	0x88C5	# <CJK>
+0x5731	0x5986	# <CJK>
+0x5732	0x649E	# <CJK>
+0x5733	0x58EE	# <CJK>
+0x5734	0x72B6	# <CJK>
+0x5735	0x690E	# <CJK>
+0x5736	0x9525	# <CJK>
+0x5737	0x8FFD	# <CJK>
+0x5738	0x8D58	# <CJK>
+0x5739	0x5760	# <CJK>
+0x573A	0x7F00	# <CJK>
+0x573B	0x8C06	# <CJK>
+0x573C	0x51C6	# <CJK>
+0x573D	0x6349	# <CJK>
+0x573E	0x62D9	# <CJK>
+0x573F	0x5353	# <CJK>
+0x5740	0x684C	# <CJK>
+0x5741	0x7422	# <CJK>
+0x5742	0x8301	# <CJK>
+0x5743	0x914C	# <CJK>
+0x5744	0x5544	# <CJK>
+0x5745	0x7740	# <CJK>
+0x5746	0x707C	# <CJK>
+0x5747	0x6D4A	# <CJK>
+0x5748	0x5179	# <CJK>
+0x5749	0x54A8	# <CJK>
+0x574A	0x8D44	# <CJK>
+0x574B	0x59FF	# <CJK>
+0x574C	0x6ECB	# <CJK>
+0x574D	0x6DC4	# <CJK>
+0x574E	0x5B5C	# <CJK>
+0x574F	0x7D2B	# <CJK>
+0x5750	0x4ED4	# <CJK>
+0x5751	0x7C7D	# <CJK>
+0x5752	0x6ED3	# <CJK>
+0x5753	0x5B50	# <CJK>
+0x5754	0x81EA	# <CJK>
+0x5755	0x6E0D	# <CJK>
+0x5756	0x5B57	# <CJK>
+0x5757	0x9B03	# <CJK>
+0x5758	0x68D5	# <CJK>
+0x5759	0x8E2A	# <CJK>
+0x575A	0x5B97	# <CJK>
+0x575B	0x7EFC	# <CJK>
+0x575C	0x603B	# <CJK>
+0x575D	0x7EB5	# <CJK>
+0x575E	0x90B9	# <CJK>
+0x575F	0x8D70	# <CJK>
+0x5760	0x594F	# <CJK>
+0x5761	0x63CD	# <CJK>
+0x5762	0x79DF	# <CJK>
+0x5763	0x8DB3	# <CJK>
+0x5764	0x5352	# <CJK>
+0x5765	0x65CF	# <CJK>
+0x5766	0x7956	# <CJK>
+0x5767	0x8BC5	# <CJK>
+0x5768	0x963B	# <CJK>
+0x5769	0x7EC4	# <CJK>
+0x576A	0x94BB	# <CJK>
+0x576B	0x7E82	# <CJK>
+0x576C	0x5634	# <CJK>
+0x576D	0x9189	# <CJK>
+0x576E	0x6700	# <CJK>
+0x576F	0x7F6A	# <CJK>
+0x5770	0x5C0A	# <CJK>
+0x5771	0x9075	# <CJK>
+0x5772	0x6628	# <CJK>
+0x5773	0x5DE6	# <CJK>
+0x5774	0x4F50	# <CJK>
+0x5775	0x67DE	# <CJK>
+0x5776	0x505A	# <CJK>
+0x5777	0x4F5C	# <CJK>
+0x5778	0x5750	# <CJK>
+0x5779	0x5EA7	# <CJK>
+0x5821	0x4E8D	# <CJK>
+0x5822	0x4E0C	# <CJK>
+0x5823	0x5140	# <CJK>
+0x5824	0x4E10	# <CJK>
+0x5825	0x5EFF	# <CJK>
+0x5826	0x5345	# <CJK>
+0x5827	0x4E15	# <CJK>
+0x5828	0x4E98	# <CJK>
+0x5829	0x4E1E	# <CJK>
+0x582A	0x9B32	# <CJK>
+0x582B	0x5B6C	# <CJK>
+0x582C	0x5669	# <CJK>
+0x582D	0x4E28	# <CJK>
+0x582E	0x79BA	# <CJK>
+0x582F	0x4E3F	# <CJK>
+0x5830	0x5315	# <CJK>
+0x5831	0x4E47	# <CJK>
+0x5832	0x592D	# <CJK>
+0x5833	0x723B	# <CJK>
+0x5834	0x536E	# <CJK>
+0x5835	0x6C10	# <CJK>
+0x5836	0x56DF	# <CJK>
+0x5837	0x80E4	# <CJK>
+0x5838	0x9997	# <CJK>
+0x5839	0x6BD3	# <CJK>
+0x583A	0x777E	# <CJK>
+0x583B	0x9F17	# <CJK>
+0x583C	0x4E36	# <CJK>
+0x583D	0x4E9F	# <CJK>
+0x583E	0x9F10	# <CJK>
+0x583F	0x4E5C	# <CJK>
+0x5840	0x4E69	# <CJK>
+0x5841	0x4E93	# <CJK>
+0x5842	0x8288	# <CJK>
+0x5843	0x5B5B	# <CJK>
+0x5844	0x556C	# <CJK>
+0x5845	0x560F	# <CJK>
+0x5846	0x4EC4	# <CJK>
+0x5847	0x538D	# <CJK>
+0x5848	0x539D	# <CJK>
+0x5849	0x53A3	# <CJK>
+0x584A	0x53A5	# <CJK>
+0x584B	0x53AE	# <CJK>
+0x584C	0x9765	# <CJK>
+0x584D	0x8D5D	# <CJK>
+0x584E	0x531A	# <CJK>
+0x584F	0x53F5	# <CJK>
+0x5850	0x5326	# <CJK>
+0x5851	0x532E	# <CJK>
+0x5852	0x533E	# <CJK>
+0x5853	0x8D5C	# <CJK>
+0x5854	0x5366	# <CJK>
+0x5855	0x5363	# <CJK>
+0x5856	0x5202	# <CJK>
+0x5857	0x5208	# <CJK>
+0x5858	0x520E	# <CJK>
+0x5859	0x522D	# <CJK>
+0x585A	0x5233	# <CJK>
+0x585B	0x523F	# <CJK>
+0x585C	0x5240	# <CJK>
+0x585D	0x524C	# <CJK>
+0x585E	0x525E	# <CJK>
+0x585F	0x5261	# <CJK>
+0x5860	0x525C	# <CJK>
+0x5861	0x84AF	# <CJK>
+0x5862	0x527D	# <CJK>
+0x5863	0x5282	# <CJK>
+0x5864	0x5281	# <CJK>
+0x5865	0x5290	# <CJK>
+0x5866	0x5293	# <CJK>
+0x5867	0x5182	# <CJK>
+0x5868	0x7F54	# <CJK>
+0x5869	0x4EBB	# <CJK>
+0x586A	0x4EC3	# <CJK>
+0x586B	0x4EC9	# <CJK>
+0x586C	0x4EC2	# <CJK>
+0x586D	0x4EE8	# <CJK>
+0x586E	0x4EE1	# <CJK>
+0x586F	0x4EEB	# <CJK>
+0x5870	0x4EDE	# <CJK>
+0x5871	0x4F1B	# <CJK>
+0x5872	0x4EF3	# <CJK>
+0x5873	0x4F22	# <CJK>
+0x5874	0x4F64	# <CJK>
+0x5875	0x4EF5	# <CJK>
+0x5876	0x4F25	# <CJK>
+0x5877	0x4F27	# <CJK>
+0x5878	0x4F09	# <CJK>
+0x5879	0x4F2B	# <CJK>
+0x587A	0x4F5E	# <CJK>
+0x587B	0x4F67	# <CJK>
+0x587C	0x6538	# <CJK>
+0x587D	0x4F5A	# <CJK>
+0x587E	0x4F5D	# <CJK>
+0x5921	0x4F5F	# <CJK>
+0x5922	0x4F57	# <CJK>
+0x5923	0x4F32	# <CJK>
+0x5924	0x4F3D	# <CJK>
+0x5925	0x4F76	# <CJK>
+0x5926	0x4F74	# <CJK>
+0x5927	0x4F91	# <CJK>
+0x5928	0x4F89	# <CJK>
+0x5929	0x4F83	# <CJK>
+0x592A	0x4F8F	# <CJK>
+0x592B	0x4F7E	# <CJK>
+0x592C	0x4F7B	# <CJK>
+0x592D	0x4FAA	# <CJK>
+0x592E	0x4F7C	# <CJK>
+0x592F	0x4FAC	# <CJK>
+0x5930	0x4F94	# <CJK>
+0x5931	0x4FE6	# <CJK>
+0x5932	0x4FE8	# <CJK>
+0x5933	0x4FEA	# <CJK>
+0x5934	0x4FC5	# <CJK>
+0x5935	0x4FDA	# <CJK>
+0x5936	0x4FE3	# <CJK>
+0x5937	0x4FDC	# <CJK>
+0x5938	0x4FD1	# <CJK>
+0x5939	0x4FDF	# <CJK>
+0x593A	0x4FF8	# <CJK>
+0x593B	0x5029	# <CJK>
+0x593C	0x504C	# <CJK>
+0x593D	0x4FF3	# <CJK>
+0x593E	0x502C	# <CJK>
+0x593F	0x500F	# <CJK>
+0x5940	0x502E	# <CJK>
+0x5941	0x502D	# <CJK>
+0x5942	0x4FFE	# <CJK>
+0x5943	0x501C	# <CJK>
+0x5944	0x500C	# <CJK>
+0x5945	0x5025	# <CJK>
+0x5946	0x5028	# <CJK>
+0x5947	0x507E	# <CJK>
+0x5948	0x5043	# <CJK>
+0x5949	0x5055	# <CJK>
+0x594A	0x5048	# <CJK>
+0x594B	0x504E	# <CJK>
+0x594C	0x506C	# <CJK>
+0x594D	0x507B	# <CJK>
+0x594E	0x50A5	# <CJK>
+0x594F	0x50A7	# <CJK>
+0x5950	0x50A9	# <CJK>
+0x5951	0x50BA	# <CJK>
+0x5952	0x50D6	# <CJK>
+0x5953	0x5106	# <CJK>
+0x5954	0x50ED	# <CJK>
+0x5955	0x50EC	# <CJK>
+0x5956	0x50E6	# <CJK>
+0x5957	0x50EE	# <CJK>
+0x5958	0x5107	# <CJK>
+0x5959	0x510B	# <CJK>
+0x595A	0x4EDD	# <CJK>
+0x595B	0x6C3D	# <CJK>
+0x595C	0x4F58	# <CJK>
+0x595D	0x4F65	# <CJK>
+0x595E	0x4FCE	# <CJK>
+0x595F	0x9FA0	# <CJK>
+0x5960	0x6C46	# <CJK>
+0x5961	0x7C74	# <CJK>
+0x5962	0x516E	# <CJK>
+0x5963	0x5DFD	# <CJK>
+0x5964	0x9EC9	# <CJK>
+0x5965	0x9998	# <CJK>
+0x5966	0x5181	# <CJK>
+0x5967	0x5914	# <CJK>
+0x5968	0x52F9	# <CJK>
+0x5969	0x530D	# <CJK>
+0x596A	0x8A07	# <CJK>
+0x596B	0x5310	# <CJK>
+0x596C	0x51EB	# <CJK>
+0x596D	0x5919	# <CJK>
+0x596E	0x5155	# <CJK>
+0x596F	0x4EA0	# <CJK>
+0x5970	0x5156	# <CJK>
+0x5971	0x4EB3	# <CJK>
+0x5972	0x886E	# <CJK>
+0x5973	0x88A4	# <CJK>
+0x5974	0x4EB5	# <CJK>
+0x5975	0x8114	# <CJK>
+0x5976	0x88D2	# <CJK>
+0x5977	0x7980	# <CJK>
+0x5978	0x5B34	# <CJK>
+0x5979	0x8803	# <CJK>
+0x597A	0x7FB8	# <CJK>
+0x597B	0x51AB	# <CJK>
+0x597C	0x51B1	# <CJK>
+0x597D	0x51BD	# <CJK>
+0x597E	0x51BC	# <CJK>
+0x5A21	0x51C7	# <CJK>
+0x5A22	0x5196	# <CJK>
+0x5A23	0x51A2	# <CJK>
+0x5A24	0x51A5	# <CJK>
+0x5A25	0x8BA0	# <CJK>
+0x5A26	0x8BA6	# <CJK>
+0x5A27	0x8BA7	# <CJK>
+0x5A28	0x8BAA	# <CJK>
+0x5A29	0x8BB4	# <CJK>
+0x5A2A	0x8BB5	# <CJK>
+0x5A2B	0x8BB7	# <CJK>
+0x5A2C	0x8BC2	# <CJK>
+0x5A2D	0x8BC3	# <CJK>
+0x5A2E	0x8BCB	# <CJK>
+0x5A2F	0x8BCF	# <CJK>
+0x5A30	0x8BCE	# <CJK>
+0x5A31	0x8BD2	# <CJK>
+0x5A32	0x8BD3	# <CJK>
+0x5A33	0x8BD4	# <CJK>
+0x5A34	0x8BD6	# <CJK>
+0x5A35	0x8BD8	# <CJK>
+0x5A36	0x8BD9	# <CJK>
+0x5A37	0x8BDC	# <CJK>
+0x5A38	0x8BDF	# <CJK>
+0x5A39	0x8BE0	# <CJK>
+0x5A3A	0x8BE4	# <CJK>
+0x5A3B	0x8BE8	# <CJK>
+0x5A3C	0x8BE9	# <CJK>
+0x5A3D	0x8BEE	# <CJK>
+0x5A3E	0x8BF0	# <CJK>
+0x5A3F	0x8BF3	# <CJK>
+0x5A40	0x8BF6	# <CJK>
+0x5A41	0x8BF9	# <CJK>
+0x5A42	0x8BFC	# <CJK>
+0x5A43	0x8BFF	# <CJK>
+0x5A44	0x8C00	# <CJK>
+0x5A45	0x8C02	# <CJK>
+0x5A46	0x8C04	# <CJK>
+0x5A47	0x8C07	# <CJK>
+0x5A48	0x8C0C	# <CJK>
+0x5A49	0x8C0F	# <CJK>
+0x5A4A	0x8C11	# <CJK>
+0x5A4B	0x8C12	# <CJK>
+0x5A4C	0x8C14	# <CJK>
+0x5A4D	0x8C15	# <CJK>
+0x5A4E	0x8C16	# <CJK>
+0x5A4F	0x8C19	# <CJK>
+0x5A50	0x8C1B	# <CJK>
+0x5A51	0x8C18	# <CJK>
+0x5A52	0x8C1D	# <CJK>
+0x5A53	0x8C1F	# <CJK>
+0x5A54	0x8C20	# <CJK>
+0x5A55	0x8C21	# <CJK>
+0x5A56	0x8C25	# <CJK>
+0x5A57	0x8C27	# <CJK>
+0x5A58	0x8C2A	# <CJK>
+0x5A59	0x8C2B	# <CJK>
+0x5A5A	0x8C2E	# <CJK>
+0x5A5B	0x8C2F	# <CJK>
+0x5A5C	0x8C32	# <CJK>
+0x5A5D	0x8C33	# <CJK>
+0x5A5E	0x8C35	# <CJK>
+0x5A5F	0x8C36	# <CJK>
+0x5A60	0x5369	# <CJK>
+0x5A61	0x537A	# <CJK>
+0x5A62	0x961D	# <CJK>
+0x5A63	0x9622	# <CJK>
+0x5A64	0x9621	# <CJK>
+0x5A65	0x9631	# <CJK>
+0x5A66	0x962A	# <CJK>
+0x5A67	0x963D	# <CJK>
+0x5A68	0x963C	# <CJK>
+0x5A69	0x9642	# <CJK>
+0x5A6A	0x9649	# <CJK>
+0x5A6B	0x9654	# <CJK>
+0x5A6C	0x965F	# <CJK>
+0x5A6D	0x9667	# <CJK>
+0x5A6E	0x966C	# <CJK>
+0x5A6F	0x9672	# <CJK>
+0x5A70	0x9674	# <CJK>
+0x5A71	0x9688	# <CJK>
+0x5A72	0x968D	# <CJK>
+0x5A73	0x9697	# <CJK>
+0x5A74	0x96B0	# <CJK>
+0x5A75	0x9097	# <CJK>
+0x5A76	0x909B	# <CJK>
+0x5A77	0x909D	# <CJK>
+0x5A78	0x9099	# <CJK>
+0x5A79	0x90AC	# <CJK>
+0x5A7A	0x90A1	# <CJK>
+0x5A7B	0x90B4	# <CJK>
+0x5A7C	0x90B3	# <CJK>
+0x5A7D	0x90B6	# <CJK>
+0x5A7E	0x90BA	# <CJK>
+0x5B21	0x90B8	# <CJK>
+0x5B22	0x90B0	# <CJK>
+0x5B23	0x90CF	# <CJK>
+0x5B24	0x90C5	# <CJK>
+0x5B25	0x90BE	# <CJK>
+0x5B26	0x90D0	# <CJK>
+0x5B27	0x90C4	# <CJK>
+0x5B28	0x90C7	# <CJK>
+0x5B29	0x90D3	# <CJK>
+0x5B2A	0x90E6	# <CJK>
+0x5B2B	0x90E2	# <CJK>
+0x5B2C	0x90DC	# <CJK>
+0x5B2D	0x90D7	# <CJK>
+0x5B2E	0x90DB	# <CJK>
+0x5B2F	0x90EB	# <CJK>
+0x5B30	0x90EF	# <CJK>
+0x5B31	0x90FE	# <CJK>
+0x5B32	0x9104	# <CJK>
+0x5B33	0x9122	# <CJK>
+0x5B34	0x911E	# <CJK>
+0x5B35	0x9123	# <CJK>
+0x5B36	0x9131	# <CJK>
+0x5B37	0x912F	# <CJK>
+0x5B38	0x9139	# <CJK>
+0x5B39	0x9143	# <CJK>
+0x5B3A	0x9146	# <CJK>
+0x5B3B	0x520D	# <CJK>
+0x5B3C	0x5942	# <CJK>
+0x5B3D	0x52A2	# <CJK>
+0x5B3E	0x52AC	# <CJK>
+0x5B3F	0x52AD	# <CJK>
+0x5B40	0x52BE	# <CJK>
+0x5B41	0x54FF	# <CJK>
+0x5B42	0x52D0	# <CJK>
+0x5B43	0x52D6	# <CJK>
+0x5B44	0x52F0	# <CJK>
+0x5B45	0x53DF	# <CJK>
+0x5B46	0x71EE	# <CJK>
+0x5B47	0x77CD	# <CJK>
+0x5B48	0x5EF4	# <CJK>
+0x5B49	0x51F5	# <CJK>
+0x5B4A	0x51FC	# <CJK>
+0x5B4B	0x9B2F	# <CJK>
+0x5B4C	0x53B6	# <CJK>
+0x5B4D	0x5F01	# <CJK>
+0x5B4E	0x755A	# <CJK>
+0x5B4F	0x5DEF	# <CJK>
+0x5B50	0x574C	# <CJK>
+0x5B51	0x57A9	# <CJK>
+0x5B52	0x57A1	# <CJK>
+0x5B53	0x587E	# <CJK>
+0x5B54	0x58BC	# <CJK>
+0x5B55	0x58C5	# <CJK>
+0x5B56	0x58D1	# <CJK>
+0x5B57	0x5729	# <CJK>
+0x5B58	0x572C	# <CJK>
+0x5B59	0x572A	# <CJK>
+0x5B5A	0x5733	# <CJK>
+0x5B5B	0x5739	# <CJK>
+0x5B5C	0x572E	# <CJK>
+0x5B5D	0x572F	# <CJK>
+0x5B5E	0x575C	# <CJK>
+0x5B5F	0x573B	# <CJK>
+0x5B60	0x5742	# <CJK>
+0x5B61	0x5769	# <CJK>
+0x5B62	0x5785	# <CJK>
+0x5B63	0x576B	# <CJK>
+0x5B64	0x5786	# <CJK>
+0x5B65	0x577C	# <CJK>
+0x5B66	0x577B	# <CJK>
+0x5B67	0x5768	# <CJK>
+0x5B68	0x576D	# <CJK>
+0x5B69	0x5776	# <CJK>
+0x5B6A	0x5773	# <CJK>
+0x5B6B	0x57AD	# <CJK>
+0x5B6C	0x57A4	# <CJK>
+0x5B6D	0x578C	# <CJK>
+0x5B6E	0x57B2	# <CJK>
+0x5B6F	0x57CF	# <CJK>
+0x5B70	0x57A7	# <CJK>
+0x5B71	0x57B4	# <CJK>
+0x5B72	0x5793	# <CJK>
+0x5B73	0x57A0	# <CJK>
+0x5B74	0x57D5	# <CJK>
+0x5B75	0x57D8	# <CJK>
+0x5B76	0x57DA	# <CJK>
+0x5B77	0x57D9	# <CJK>
+0x5B78	0x57D2	# <CJK>
+0x5B79	0x57B8	# <CJK>
+0x5B7A	0x57F4	# <CJK>
+0x5B7B	0x57EF	# <CJK>
+0x5B7C	0x57F8	# <CJK>
+0x5B7D	0x57E4	# <CJK>
+0x5B7E	0x57DD	# <CJK>
+0x5C21	0x580B	# <CJK>
+0x5C22	0x580D	# <CJK>
+0x5C23	0x57FD	# <CJK>
+0x5C24	0x57ED	# <CJK>
+0x5C25	0x5800	# <CJK>
+0x5C26	0x581E	# <CJK>
+0x5C27	0x5819	# <CJK>
+0x5C28	0x5844	# <CJK>
+0x5C29	0x5820	# <CJK>
+0x5C2A	0x5865	# <CJK>
+0x5C2B	0x586C	# <CJK>
+0x5C2C	0x5881	# <CJK>
+0x5C2D	0x5889	# <CJK>
+0x5C2E	0x589A	# <CJK>
+0x5C2F	0x5880	# <CJK>
+0x5C30	0x99A8	# <CJK>
+0x5C31	0x9F19	# <CJK>
+0x5C32	0x61FF	# <CJK>
+0x5C33	0x8279	# <CJK>
+0x5C34	0x827D	# <CJK>
+0x5C35	0x827F	# <CJK>
+0x5C36	0x828F	# <CJK>
+0x5C37	0x828A	# <CJK>
+0x5C38	0x82A8	# <CJK>
+0x5C39	0x8284	# <CJK>
+0x5C3A	0x828E	# <CJK>
+0x5C3B	0x8291	# <CJK>
+0x5C3C	0x8297	# <CJK>
+0x5C3D	0x8299	# <CJK>
+0x5C3E	0x82AB	# <CJK>
+0x5C3F	0x82B8	# <CJK>
+0x5C40	0x82BE	# <CJK>
+0x5C41	0x82B0	# <CJK>
+0x5C42	0x82C8	# <CJK>
+0x5C43	0x82CA	# <CJK>
+0x5C44	0x82E3	# <CJK>
+0x5C45	0x8298	# <CJK>
+0x5C46	0x82B7	# <CJK>
+0x5C47	0x82AE	# <CJK>
+0x5C48	0x82CB	# <CJK>
+0x5C49	0x82CC	# <CJK>
+0x5C4A	0x82C1	# <CJK>
+0x5C4B	0x82A9	# <CJK>
+0x5C4C	0x82B4	# <CJK>
+0x5C4D	0x82A1	# <CJK>
+0x5C4E	0x82AA	# <CJK>
+0x5C4F	0x829F	# <CJK>
+0x5C50	0x82C4	# <CJK>
+0x5C51	0x82CE	# <CJK>
+0x5C52	0x82A4	# <CJK>
+0x5C53	0x82E1	# <CJK>
+0x5C54	0x8309	# <CJK>
+0x5C55	0x82F7	# <CJK>
+0x5C56	0x82E4	# <CJK>
+0x5C57	0x830F	# <CJK>
+0x5C58	0x8307	# <CJK>
+0x5C59	0x82DC	# <CJK>
+0x5C5A	0x82F4	# <CJK>
+0x5C5B	0x82D2	# <CJK>
+0x5C5C	0x82D8	# <CJK>
+0x5C5D	0x830C	# <CJK>
+0x5C5E	0x82FB	# <CJK>
+0x5C5F	0x82D3	# <CJK>
+0x5C60	0x8311	# <CJK>
+0x5C61	0x831A	# <CJK>
+0x5C62	0x8306	# <CJK>
+0x5C63	0x8314	# <CJK>
+0x5C64	0x8315	# <CJK>
+0x5C65	0x82E0	# <CJK>
+0x5C66	0x82D5	# <CJK>
+0x5C67	0x831C	# <CJK>
+0x5C68	0x8351	# <CJK>
+0x5C69	0x835B	# <CJK>
+0x5C6A	0x835C	# <CJK>
+0x5C6B	0x8308	# <CJK>
+0x5C6C	0x8392	# <CJK>
+0x5C6D	0x833C	# <CJK>
+0x5C6E	0x8334	# <CJK>
+0x5C6F	0x8331	# <CJK>
+0x5C70	0x839B	# <CJK>
+0x5C71	0x835E	# <CJK>
+0x5C72	0x832F	# <CJK>
+0x5C73	0x834F	# <CJK>
+0x5C74	0x8347	# <CJK>
+0x5C75	0x8343	# <CJK>
+0x5C76	0x835F	# <CJK>
+0x5C77	0x8340	# <CJK>
+0x5C78	0x8317	# <CJK>
+0x5C79	0x8360	# <CJK>
+0x5C7A	0x832D	# <CJK>
+0x5C7B	0x833A	# <CJK>
+0x5C7C	0x8333	# <CJK>
+0x5C7D	0x8366	# <CJK>
+0x5C7E	0x8365	# <CJK>
+0x5D21	0x8368	# <CJK>
+0x5D22	0x831B	# <CJK>
+0x5D23	0x8369	# <CJK>
+0x5D24	0x836C	# <CJK>
+0x5D25	0x836A	# <CJK>
+0x5D26	0x836D	# <CJK>
+0x5D27	0x836E	# <CJK>
+0x5D28	0x83B0	# <CJK>
+0x5D29	0x8378	# <CJK>
+0x5D2A	0x83B3	# <CJK>
+0x5D2B	0x83B4	# <CJK>
+0x5D2C	0x83A0	# <CJK>
+0x5D2D	0x83AA	# <CJK>
+0x5D2E	0x8393	# <CJK>
+0x5D2F	0x839C	# <CJK>
+0x5D30	0x8385	# <CJK>
+0x5D31	0x837C	# <CJK>
+0x5D32	0x83B6	# <CJK>
+0x5D33	0x83A9	# <CJK>
+0x5D34	0x837D	# <CJK>
+0x5D35	0x83B8	# <CJK>
+0x5D36	0x837B	# <CJK>
+0x5D37	0x8398	# <CJK>
+0x5D38	0x839E	# <CJK>
+0x5D39	0x83A8	# <CJK>
+0x5D3A	0x83BA	# <CJK>
+0x5D3B	0x83BC	# <CJK>
+0x5D3C	0x83C1	# <CJK>
+0x5D3D	0x8401	# <CJK>
+0x5D3E	0x83E5	# <CJK>
+0x5D3F	0x83D8	# <CJK>
+0x5D40	0x5807	# <CJK>
+0x5D41	0x8418	# <CJK>
+0x5D42	0x840B	# <CJK>
+0x5D43	0x83DD	# <CJK>
+0x5D44	0x83FD	# <CJK>
+0x5D45	0x83D6	# <CJK>
+0x5D46	0x841C	# <CJK>
+0x5D47	0x8438	# <CJK>
+0x5D48	0x8411	# <CJK>
+0x5D49	0x8406	# <CJK>
+0x5D4A	0x83D4	# <CJK>
+0x5D4B	0x83DF	# <CJK>
+0x5D4C	0x840F	# <CJK>
+0x5D4D	0x8403	# <CJK>
+0x5D4E	0x83F8	# <CJK>
+0x5D4F	0x83F9	# <CJK>
+0x5D50	0x83EA	# <CJK>
+0x5D51	0x83C5	# <CJK>
+0x5D52	0x83C0	# <CJK>
+0x5D53	0x8426	# <CJK>
+0x5D54	0x83F0	# <CJK>
+0x5D55	0x83E1	# <CJK>
+0x5D56	0x845C	# <CJK>
+0x5D57	0x8451	# <CJK>
+0x5D58	0x845A	# <CJK>
+0x5D59	0x8459	# <CJK>
+0x5D5A	0x8473	# <CJK>
+0x5D5B	0x8487	# <CJK>
+0x5D5C	0x8488	# <CJK>
+0x5D5D	0x847A	# <CJK>
+0x5D5E	0x8489	# <CJK>
+0x5D5F	0x8478	# <CJK>
+0x5D60	0x843C	# <CJK>
+0x5D61	0x8446	# <CJK>
+0x5D62	0x8469	# <CJK>
+0x5D63	0x8476	# <CJK>
+0x5D64	0x848C	# <CJK>
+0x5D65	0x848E	# <CJK>
+0x5D66	0x8431	# <CJK>
+0x5D67	0x846D	# <CJK>
+0x5D68	0x84C1	# <CJK>
+0x5D69	0x84CD	# <CJK>
+0x5D6A	0x84D0	# <CJK>
+0x5D6B	0x84E6	# <CJK>
+0x5D6C	0x84BD	# <CJK>
+0x5D6D	0x84D3	# <CJK>
+0x5D6E	0x84CA	# <CJK>
+0x5D6F	0x84BF	# <CJK>
+0x5D70	0x84BA	# <CJK>
+0x5D71	0x84E0	# <CJK>
+0x5D72	0x84A1	# <CJK>
+0x5D73	0x84B9	# <CJK>
+0x5D74	0x84B4	# <CJK>
+0x5D75	0x8497	# <CJK>
+0x5D76	0x84E5	# <CJK>
+0x5D77	0x84E3	# <CJK>
+0x5D78	0x850C	# <CJK>
+0x5D79	0x750D	# <CJK>
+0x5D7A	0x8538	# <CJK>
+0x5D7B	0x84F0	# <CJK>
+0x5D7C	0x8539	# <CJK>
+0x5D7D	0x851F	# <CJK>
+0x5D7E	0x853A	# <CJK>
+0x5E21	0x8556	# <CJK>
+0x5E22	0x853B	# <CJK>
+0x5E23	0x84FF	# <CJK>
+0x5E24	0x84FC	# <CJK>
+0x5E25	0x8559	# <CJK>
+0x5E26	0x8548	# <CJK>
+0x5E27	0x8568	# <CJK>
+0x5E28	0x8564	# <CJK>
+0x5E29	0x855E	# <CJK>
+0x5E2A	0x857A	# <CJK>
+0x5E2B	0x77A2	# <CJK>
+0x5E2C	0x8543	# <CJK>
+0x5E2D	0x8572	# <CJK>
+0x5E2E	0x857B	# <CJK>
+0x5E2F	0x85A4	# <CJK>
+0x5E30	0x85A8	# <CJK>
+0x5E31	0x8587	# <CJK>
+0x5E32	0x858F	# <CJK>
+0x5E33	0x8579	# <CJK>
+0x5E34	0x85AE	# <CJK>
+0x5E35	0x859C	# <CJK>
+0x5E36	0x8585	# <CJK>
+0x5E37	0x85B9	# <CJK>
+0x5E38	0x85B7	# <CJK>
+0x5E39	0x85B0	# <CJK>
+0x5E3A	0x85D3	# <CJK>
+0x5E3B	0x85C1	# <CJK>
+0x5E3C	0x85DC	# <CJK>
+0x5E3D	0x85FF	# <CJK>
+0x5E3E	0x8627	# <CJK>
+0x5E3F	0x8605	# <CJK>
+0x5E40	0x8629	# <CJK>
+0x5E41	0x8616	# <CJK>
+0x5E42	0x863C	# <CJK>
+0x5E43	0x5EFE	# <CJK>
+0x5E44	0x5F08	# <CJK>
+0x5E45	0x593C	# <CJK>
+0x5E46	0x5941	# <CJK>
+0x5E47	0x8037	# <CJK>
+0x5E48	0x5955	# <CJK>
+0x5E49	0x595A	# <CJK>
+0x5E4A	0x5958	# <CJK>
+0x5E4B	0x530F	# <CJK>
+0x5E4C	0x5C22	# <CJK>
+0x5E4D	0x5C25	# <CJK>
+0x5E4E	0x5C2C	# <CJK>
+0x5E4F	0x5C34	# <CJK>
+0x5E50	0x624C	# <CJK>
+0x5E51	0x626A	# <CJK>
+0x5E52	0x629F	# <CJK>
+0x5E53	0x62BB	# <CJK>
+0x5E54	0x62CA	# <CJK>
+0x5E55	0x62DA	# <CJK>
+0x5E56	0x62D7	# <CJK>
+0x5E57	0x62EE	# <CJK>
+0x5E58	0x6322	# <CJK>
+0x5E59	0x62F6	# <CJK>
+0x5E5A	0x6339	# <CJK>
+0x5E5B	0x634B	# <CJK>
+0x5E5C	0x6343	# <CJK>
+0x5E5D	0x63AD	# <CJK>
+0x5E5E	0x63F6	# <CJK>
+0x5E5F	0x6371	# <CJK>
+0x5E60	0x637A	# <CJK>
+0x5E61	0x638E	# <CJK>
+0x5E62	0x63B4	# <CJK>
+0x5E63	0x636D	# <CJK>
+0x5E64	0x63AC	# <CJK>
+0x5E65	0x638A	# <CJK>
+0x5E66	0x6369	# <CJK>
+0x5E67	0x63AE	# <CJK>
+0x5E68	0x63BC	# <CJK>
+0x5E69	0x63F2	# <CJK>
+0x5E6A	0x63F8	# <CJK>
+0x5E6B	0x63E0	# <CJK>
+0x5E6C	0x63FF	# <CJK>
+0x5E6D	0x63C4	# <CJK>
+0x5E6E	0x63DE	# <CJK>
+0x5E6F	0x63CE	# <CJK>
+0x5E70	0x6452	# <CJK>
+0x5E71	0x63C6	# <CJK>
+0x5E72	0x63BE	# <CJK>
+0x5E73	0x6445	# <CJK>
+0x5E74	0x6441	# <CJK>
+0x5E75	0x640B	# <CJK>
+0x5E76	0x641B	# <CJK>
+0x5E77	0x6420	# <CJK>
+0x5E78	0x640C	# <CJK>
+0x5E79	0x6426	# <CJK>
+0x5E7A	0x6421	# <CJK>
+0x5E7B	0x645E	# <CJK>
+0x5E7C	0x6484	# <CJK>
+0x5E7D	0x646D	# <CJK>
+0x5E7E	0x6496	# <CJK>
+0x5F21	0x647A	# <CJK>
+0x5F22	0x64B7	# <CJK>
+0x5F23	0x64B8	# <CJK>
+0x5F24	0x6499	# <CJK>
+0x5F25	0x64BA	# <CJK>
+0x5F26	0x64C0	# <CJK>
+0x5F27	0x64D0	# <CJK>
+0x5F28	0x64D7	# <CJK>
+0x5F29	0x64E4	# <CJK>
+0x5F2A	0x64E2	# <CJK>
+0x5F2B	0x6509	# <CJK>
+0x5F2C	0x6525	# <CJK>
+0x5F2D	0x652E	# <CJK>
+0x5F2E	0x5F0B	# <CJK>
+0x5F2F	0x5FD2	# <CJK>
+0x5F30	0x7519	# <CJK>
+0x5F31	0x5F11	# <CJK>
+0x5F32	0x535F	# <CJK>
+0x5F33	0x53F1	# <CJK>
+0x5F34	0x53FD	# <CJK>
+0x5F35	0x53E9	# <CJK>
+0x5F36	0x53E8	# <CJK>
+0x5F37	0x53FB	# <CJK>
+0x5F38	0x5412	# <CJK>
+0x5F39	0x5416	# <CJK>
+0x5F3A	0x5406	# <CJK>
+0x5F3B	0x544B	# <CJK>
+0x5F3C	0x5452	# <CJK>
+0x5F3D	0x5453	# <CJK>
+0x5F3E	0x5454	# <CJK>
+0x5F3F	0x5456	# <CJK>
+0x5F40	0x5443	# <CJK>
+0x5F41	0x5421	# <CJK>
+0x5F42	0x5457	# <CJK>
+0x5F43	0x5459	# <CJK>
+0x5F44	0x5423	# <CJK>
+0x5F45	0x5432	# <CJK>
+0x5F46	0x5482	# <CJK>
+0x5F47	0x5494	# <CJK>
+0x5F48	0x5477	# <CJK>
+0x5F49	0x5471	# <CJK>
+0x5F4A	0x5464	# <CJK>
+0x5F4B	0x549A	# <CJK>
+0x5F4C	0x549B	# <CJK>
+0x5F4D	0x5484	# <CJK>
+0x5F4E	0x5476	# <CJK>
+0x5F4F	0x5466	# <CJK>
+0x5F50	0x549D	# <CJK>
+0x5F51	0x54D0	# <CJK>
+0x5F52	0x54AD	# <CJK>
+0x5F53	0x54C2	# <CJK>
+0x5F54	0x54B4	# <CJK>
+0x5F55	0x54D2	# <CJK>
+0x5F56	0x54A7	# <CJK>
+0x5F57	0x54A6	# <CJK>
+0x5F58	0x54D3	# <CJK>
+0x5F59	0x54D4	# <CJK>
+0x5F5A	0x5472	# <CJK>
+0x5F5B	0x54A3	# <CJK>
+0x5F5C	0x54D5	# <CJK>
+0x5F5D	0x54BB	# <CJK>
+0x5F5E	0x54BF	# <CJK>
+0x5F5F	0x54CC	# <CJK>
+0x5F60	0x54D9	# <CJK>
+0x5F61	0x54DA	# <CJK>
+0x5F62	0x54DC	# <CJK>
+0x5F63	0x54A9	# <CJK>
+0x5F64	0x54AA	# <CJK>
+0x5F65	0x54A4	# <CJK>
+0x5F66	0x54DD	# <CJK>
+0x5F67	0x54CF	# <CJK>
+0x5F68	0x54DE	# <CJK>
+0x5F69	0x551B	# <CJK>
+0x5F6A	0x54E7	# <CJK>
+0x5F6B	0x5520	# <CJK>
+0x5F6C	0x54FD	# <CJK>
+0x5F6D	0x5514	# <CJK>
+0x5F6E	0x54F3	# <CJK>
+0x5F6F	0x5522	# <CJK>
+0x5F70	0x5523	# <CJK>
+0x5F71	0x550F	# <CJK>
+0x5F72	0x5511	# <CJK>
+0x5F73	0x5527	# <CJK>
+0x5F74	0x552A	# <CJK>
+0x5F75	0x5567	# <CJK>
+0x5F76	0x558F	# <CJK>
+0x5F77	0x55B5	# <CJK>
+0x5F78	0x5549	# <CJK>
+0x5F79	0x556D	# <CJK>
+0x5F7A	0x5541	# <CJK>
+0x5F7B	0x5555	# <CJK>
+0x5F7C	0x553F	# <CJK>
+0x5F7D	0x5550	# <CJK>
+0x5F7E	0x553C	# <CJK>
+0x6021	0x5537	# <CJK>
+0x6022	0x5556	# <CJK>
+0x6023	0x5575	# <CJK>
+0x6024	0x5576	# <CJK>
+0x6025	0x5577	# <CJK>
+0x6026	0x5533	# <CJK>
+0x6027	0x5530	# <CJK>
+0x6028	0x555C	# <CJK>
+0x6029	0x558B	# <CJK>
+0x602A	0x55D2	# <CJK>
+0x602B	0x5583	# <CJK>
+0x602C	0x55B1	# <CJK>
+0x602D	0x55B9	# <CJK>
+0x602E	0x5588	# <CJK>
+0x602F	0x5581	# <CJK>
+0x6030	0x559F	# <CJK>
+0x6031	0x557E	# <CJK>
+0x6032	0x55D6	# <CJK>
+0x6033	0x5591	# <CJK>
+0x6034	0x557B	# <CJK>
+0x6035	0x55DF	# <CJK>
+0x6036	0x55BD	# <CJK>
+0x6037	0x55BE	# <CJK>
+0x6038	0x5594	# <CJK>
+0x6039	0x5599	# <CJK>
+0x603A	0x55EA	# <CJK>
+0x603B	0x55F7	# <CJK>
+0x603C	0x55C9	# <CJK>
+0x603D	0x561F	# <CJK>
+0x603E	0x55D1	# <CJK>
+0x603F	0x55EB	# <CJK>
+0x6040	0x55EC	# <CJK>
+0x6041	0x55D4	# <CJK>
+0x6042	0x55E6	# <CJK>
+0x6043	0x55DD	# <CJK>
+0x6044	0x55C4	# <CJK>
+0x6045	0x55EF	# <CJK>
+0x6046	0x55E5	# <CJK>
+0x6047	0x55F2	# <CJK>
+0x6048	0x55F3	# <CJK>
+0x6049	0x55CC	# <CJK>
+0x604A	0x55CD	# <CJK>
+0x604B	0x55E8	# <CJK>
+0x604C	0x55F5	# <CJK>
+0x604D	0x55E4	# <CJK>
+0x604E	0x8F94	# <CJK>
+0x604F	0x561E	# <CJK>
+0x6050	0x5608	# <CJK>
+0x6051	0x560C	# <CJK>
+0x6052	0x5601	# <CJK>
+0x6053	0x5624	# <CJK>
+0x6054	0x5623	# <CJK>
+0x6055	0x55FE	# <CJK>
+0x6056	0x5600	# <CJK>
+0x6057	0x5627	# <CJK>
+0x6058	0x562D	# <CJK>
+0x6059	0x5658	# <CJK>
+0x605A	0x5639	# <CJK>
+0x605B	0x5657	# <CJK>
+0x605C	0x562C	# <CJK>
+0x605D	0x564D	# <CJK>
+0x605E	0x5662	# <CJK>
+0x605F	0x5659	# <CJK>
+0x6060	0x565C	# <CJK>
+0x6061	0x564C	# <CJK>
+0x6062	0x5654	# <CJK>
+0x6063	0x5686	# <CJK>
+0x6064	0x5664	# <CJK>
+0x6065	0x5671	# <CJK>
+0x6066	0x566B	# <CJK>
+0x6067	0x567B	# <CJK>
+0x6068	0x567C	# <CJK>
+0x6069	0x5685	# <CJK>
+0x606A	0x5693	# <CJK>
+0x606B	0x56AF	# <CJK>
+0x606C	0x56D4	# <CJK>
+0x606D	0x56D7	# <CJK>
+0x606E	0x56DD	# <CJK>
+0x606F	0x56E1	# <CJK>
+0x6070	0x56F5	# <CJK>
+0x6071	0x56EB	# <CJK>
+0x6072	0x56F9	# <CJK>
+0x6073	0x56FF	# <CJK>
+0x6074	0x5704	# <CJK>
+0x6075	0x570A	# <CJK>
+0x6076	0x5709	# <CJK>
+0x6077	0x571C	# <CJK>
+0x6078	0x5E0F	# <CJK>
+0x6079	0x5E19	# <CJK>
+0x607A	0x5E14	# <CJK>
+0x607B	0x5E11	# <CJK>
+0x607C	0x5E31	# <CJK>
+0x607D	0x5E3B	# <CJK>
+0x607E	0x5E3C	# <CJK>
+0x6121	0x5E37	# <CJK>
+0x6122	0x5E44	# <CJK>
+0x6123	0x5E54	# <CJK>
+0x6124	0x5E5B	# <CJK>
+0x6125	0x5E5E	# <CJK>
+0x6126	0x5E61	# <CJK>
+0x6127	0x5C8C	# <CJK>
+0x6128	0x5C7A	# <CJK>
+0x6129	0x5C8D	# <CJK>
+0x612A	0x5C90	# <CJK>
+0x612B	0x5C96	# <CJK>
+0x612C	0x5C88	# <CJK>
+0x612D	0x5C98	# <CJK>
+0x612E	0x5C99	# <CJK>
+0x612F	0x5C91	# <CJK>
+0x6130	0x5C9A	# <CJK>
+0x6131	0x5C9C	# <CJK>
+0x6132	0x5CB5	# <CJK>
+0x6133	0x5CA2	# <CJK>
+0x6134	0x5CBD	# <CJK>
+0x6135	0x5CAC	# <CJK>
+0x6136	0x5CAB	# <CJK>
+0x6137	0x5CB1	# <CJK>
+0x6138	0x5CA3	# <CJK>
+0x6139	0x5CC1	# <CJK>
+0x613A	0x5CB7	# <CJK>
+0x613B	0x5CC4	# <CJK>
+0x613C	0x5CD2	# <CJK>
+0x613D	0x5CE4	# <CJK>
+0x613E	0x5CCB	# <CJK>
+0x613F	0x5CE5	# <CJK>
+0x6140	0x5D02	# <CJK>
+0x6141	0x5D03	# <CJK>
+0x6142	0x5D27	# <CJK>
+0x6143	0x5D26	# <CJK>
+0x6144	0x5D2E	# <CJK>
+0x6145	0x5D24	# <CJK>
+0x6146	0x5D1E	# <CJK>
+0x6147	0x5D06	# <CJK>
+0x6148	0x5D1B	# <CJK>
+0x6149	0x5D58	# <CJK>
+0x614A	0x5D3E	# <CJK>
+0x614B	0x5D34	# <CJK>
+0x614C	0x5D3D	# <CJK>
+0x614D	0x5D6C	# <CJK>
+0x614E	0x5D5B	# <CJK>
+0x614F	0x5D6F	# <CJK>
+0x6150	0x5D5D	# <CJK>
+0x6151	0x5D6B	# <CJK>
+0x6152	0x5D4B	# <CJK>
+0x6153	0x5D4A	# <CJK>
+0x6154	0x5D69	# <CJK>
+0x6155	0x5D74	# <CJK>
+0x6156	0x5D82	# <CJK>
+0x6157	0x5D99	# <CJK>
+0x6158	0x5D9D	# <CJK>
+0x6159	0x8C73	# <CJK>
+0x615A	0x5DB7	# <CJK>
+0x615B	0x5DC5	# <CJK>
+0x615C	0x5F73	# <CJK>
+0x615D	0x5F77	# <CJK>
+0x615E	0x5F82	# <CJK>
+0x615F	0x5F87	# <CJK>
+0x6160	0x5F89	# <CJK>
+0x6161	0x5F8C	# <CJK>
+0x6162	0x5F95	# <CJK>
+0x6163	0x5F99	# <CJK>
+0x6164	0x5F9C	# <CJK>
+0x6165	0x5FA8	# <CJK>
+0x6166	0x5FAD	# <CJK>
+0x6167	0x5FB5	# <CJK>
+0x6168	0x5FBC	# <CJK>
+0x6169	0x8862	# <CJK>
+0x616A	0x5F61	# <CJK>
+0x616B	0x72AD	# <CJK>
+0x616C	0x72B0	# <CJK>
+0x616D	0x72B4	# <CJK>
+0x616E	0x72B7	# <CJK>
+0x616F	0x72B8	# <CJK>
+0x6170	0x72C3	# <CJK>
+0x6171	0x72C1	# <CJK>
+0x6172	0x72CE	# <CJK>
+0x6173	0x72CD	# <CJK>
+0x6174	0x72D2	# <CJK>
+0x6175	0x72E8	# <CJK>
+0x6176	0x72EF	# <CJK>
+0x6177	0x72E9	# <CJK>
+0x6178	0x72F2	# <CJK>
+0x6179	0x72F4	# <CJK>
+0x617A	0x72F7	# <CJK>
+0x617B	0x7301	# <CJK>
+0x617C	0x72F3	# <CJK>
+0x617D	0x7303	# <CJK>
+0x617E	0x72FA	# <CJK>
+0x6221	0x72FB	# <CJK>
+0x6222	0x7317	# <CJK>
+0x6223	0x7313	# <CJK>
+0x6224	0x7321	# <CJK>
+0x6225	0x730A	# <CJK>
+0x6226	0x731E	# <CJK>
+0x6227	0x731D	# <CJK>
+0x6228	0x7315	# <CJK>
+0x6229	0x7322	# <CJK>
+0x622A	0x7339	# <CJK>
+0x622B	0x7325	# <CJK>
+0x622C	0x732C	# <CJK>
+0x622D	0x7338	# <CJK>
+0x622E	0x7331	# <CJK>
+0x622F	0x7350	# <CJK>
+0x6230	0x734D	# <CJK>
+0x6231	0x7357	# <CJK>
+0x6232	0x7360	# <CJK>
+0x6233	0x736C	# <CJK>
+0x6234	0x736F	# <CJK>
+0x6235	0x737E	# <CJK>
+0x6236	0x821B	# <CJK>
+0x6237	0x5925	# <CJK>
+0x6238	0x98E7	# <CJK>
+0x6239	0x5924	# <CJK>
+0x623A	0x5902	# <CJK>
+0x623B	0x9963	# <CJK>
+0x623C	0x9967	# <CJK>
+0x623D	0x9968	# <CJK>
+0x623E	0x9969	# <CJK>
+0x623F	0x996A	# <CJK>
+0x6240	0x996B	# <CJK>
+0x6241	0x996C	# <CJK>
+0x6242	0x9974	# <CJK>
+0x6243	0x9977	# <CJK>
+0x6244	0x997D	# <CJK>
+0x6245	0x9980	# <CJK>
+0x6246	0x9984	# <CJK>
+0x6247	0x9987	# <CJK>
+0x6248	0x998A	# <CJK>
+0x6249	0x998D	# <CJK>
+0x624A	0x9990	# <CJK>
+0x624B	0x9991	# <CJK>
+0x624C	0x9993	# <CJK>
+0x624D	0x9994	# <CJK>
+0x624E	0x9995	# <CJK>
+0x624F	0x5E80	# <CJK>
+0x6250	0x5E91	# <CJK>
+0x6251	0x5E8B	# <CJK>
+0x6252	0x5E96	# <CJK>
+0x6253	0x5EA5	# <CJK>
+0x6254	0x5EA0	# <CJK>
+0x6255	0x5EB9	# <CJK>
+0x6256	0x5EB5	# <CJK>
+0x6257	0x5EBE	# <CJK>
+0x6258	0x5EB3	# <CJK>
+0x6259	0x8D53	# <CJK>
+0x625A	0x5ED2	# <CJK>
+0x625B	0x5ED1	# <CJK>
+0x625C	0x5EDB	# <CJK>
+0x625D	0x5EE8	# <CJK>
+0x625E	0x5EEA	# <CJK>
+0x625F	0x81BA	# <CJK>
+0x6260	0x5FC4	# <CJK>
+0x6261	0x5FC9	# <CJK>
+0x6262	0x5FD6	# <CJK>
+0x6263	0x5FCF	# <CJK>
+0x6264	0x6003	# <CJK>
+0x6265	0x5FEE	# <CJK>
+0x6266	0x6004	# <CJK>
+0x6267	0x5FE1	# <CJK>
+0x6268	0x5FE4	# <CJK>
+0x6269	0x5FFE	# <CJK>
+0x626A	0x6005	# <CJK>
+0x626B	0x6006	# <CJK>
+0x626C	0x5FEA	# <CJK>
+0x626D	0x5FED	# <CJK>
+0x626E	0x5FF8	# <CJK>
+0x626F	0x6019	# <CJK>
+0x6270	0x6035	# <CJK>
+0x6271	0x6026	# <CJK>
+0x6272	0x601B	# <CJK>
+0x6273	0x600F	# <CJK>
+0x6274	0x600D	# <CJK>
+0x6275	0x6029	# <CJK>
+0x6276	0x602B	# <CJK>
+0x6277	0x600A	# <CJK>
+0x6278	0x603F	# <CJK>
+0x6279	0x6021	# <CJK>
+0x627A	0x6078	# <CJK>
+0x627B	0x6079	# <CJK>
+0x627C	0x607B	# <CJK>
+0x627D	0x607A	# <CJK>
+0x627E	0x6042	# <CJK>
+0x6321	0x606A	# <CJK>
+0x6322	0x607D	# <CJK>
+0x6323	0x6096	# <CJK>
+0x6324	0x609A	# <CJK>
+0x6325	0x60AD	# <CJK>
+0x6326	0x609D	# <CJK>
+0x6327	0x6083	# <CJK>
+0x6328	0x6092	# <CJK>
+0x6329	0x608C	# <CJK>
+0x632A	0x609B	# <CJK>
+0x632B	0x60EC	# <CJK>
+0x632C	0x60BB	# <CJK>
+0x632D	0x60B1	# <CJK>
+0x632E	0x60DD	# <CJK>
+0x632F	0x60D8	# <CJK>
+0x6330	0x60C6	# <CJK>
+0x6331	0x60DA	# <CJK>
+0x6332	0x60B4	# <CJK>
+0x6333	0x6120	# <CJK>
+0x6334	0x6126	# <CJK>
+0x6335	0x6115	# <CJK>
+0x6336	0x6123	# <CJK>
+0x6337	0x60F4	# <CJK>
+0x6338	0x6100	# <CJK>
+0x6339	0x610E	# <CJK>
+0x633A	0x612B	# <CJK>
+0x633B	0x614A	# <CJK>
+0x633C	0x6175	# <CJK>
+0x633D	0x61AC	# <CJK>
+0x633E	0x6194	# <CJK>
+0x633F	0x61A7	# <CJK>
+0x6340	0x61B7	# <CJK>
+0x6341	0x61D4	# <CJK>
+0x6342	0x61F5	# <CJK>
+0x6343	0x5FDD	# <CJK>
+0x6344	0x96B3	# <CJK>
+0x6345	0x95E9	# <CJK>
+0x6346	0x95EB	# <CJK>
+0x6347	0x95F1	# <CJK>
+0x6348	0x95F3	# <CJK>
+0x6349	0x95F5	# <CJK>
+0x634A	0x95F6	# <CJK>
+0x634B	0x95FC	# <CJK>
+0x634C	0x95FE	# <CJK>
+0x634D	0x9603	# <CJK>
+0x634E	0x9604	# <CJK>
+0x634F	0x9606	# <CJK>
+0x6350	0x9608	# <CJK>
+0x6351	0x960A	# <CJK>
+0x6352	0x960B	# <CJK>
+0x6353	0x960C	# <CJK>
+0x6354	0x960D	# <CJK>
+0x6355	0x960F	# <CJK>
+0x6356	0x9612	# <CJK>
+0x6357	0x9615	# <CJK>
+0x6358	0x9616	# <CJK>
+0x6359	0x9617	# <CJK>
+0x635A	0x9619	# <CJK>
+0x635B	0x961A	# <CJK>
+0x635C	0x4E2C	# <CJK>
+0x635D	0x723F	# <CJK>
+0x635E	0x6215	# <CJK>
+0x635F	0x6C35	# <CJK>
+0x6360	0x6C54	# <CJK>
+0x6361	0x6C5C	# <CJK>
+0x6362	0x6C4A	# <CJK>
+0x6363	0x6CA3	# <CJK>
+0x6364	0x6C85	# <CJK>
+0x6365	0x6C90	# <CJK>
+0x6366	0x6C94	# <CJK>
+0x6367	0x6C8C	# <CJK>
+0x6368	0x6C68	# <CJK>
+0x6369	0x6C69	# <CJK>
+0x636A	0x6C74	# <CJK>
+0x636B	0x6C76	# <CJK>
+0x636C	0x6C86	# <CJK>
+0x636D	0x6CA9	# <CJK>
+0x636E	0x6CD0	# <CJK>
+0x636F	0x6CD4	# <CJK>
+0x6370	0x6CAD	# <CJK>
+0x6371	0x6CF7	# <CJK>
+0x6372	0x6CF8	# <CJK>
+0x6373	0x6CF1	# <CJK>
+0x6374	0x6CD7	# <CJK>
+0x6375	0x6CB2	# <CJK>
+0x6376	0x6CE0	# <CJK>
+0x6377	0x6CD6	# <CJK>
+0x6378	0x6CFA	# <CJK>
+0x6379	0x6CEB	# <CJK>
+0x637A	0x6CEE	# <CJK>
+0x637B	0x6CB1	# <CJK>
+0x637C	0x6CD3	# <CJK>
+0x637D	0x6CEF	# <CJK>
+0x637E	0x6CFE	# <CJK>
+0x6421	0x6D39	# <CJK>
+0x6422	0x6D27	# <CJK>
+0x6423	0x6D0C	# <CJK>
+0x6424	0x6D43	# <CJK>
+0x6425	0x6D48	# <CJK>
+0x6426	0x6D07	# <CJK>
+0x6427	0x6D04	# <CJK>
+0x6428	0x6D19	# <CJK>
+0x6429	0x6D0E	# <CJK>
+0x642A	0x6D2B	# <CJK>
+0x642B	0x6D4D	# <CJK>
+0x642C	0x6D2E	# <CJK>
+0x642D	0x6D35	# <CJK>
+0x642E	0x6D1A	# <CJK>
+0x642F	0x6D4F	# <CJK>
+0x6430	0x6D52	# <CJK>
+0x6431	0x6D54	# <CJK>
+0x6432	0x6D33	# <CJK>
+0x6433	0x6D91	# <CJK>
+0x6434	0x6D6F	# <CJK>
+0x6435	0x6D9E	# <CJK>
+0x6436	0x6DA0	# <CJK>
+0x6437	0x6D5E	# <CJK>
+0x6438	0x6D93	# <CJK>
+0x6439	0x6D94	# <CJK>
+0x643A	0x6D5C	# <CJK>
+0x643B	0x6D60	# <CJK>
+0x643C	0x6D7C	# <CJK>
+0x643D	0x6D63	# <CJK>
+0x643E	0x6E1A	# <CJK>
+0x643F	0x6DC7	# <CJK>
+0x6440	0x6DC5	# <CJK>
+0x6441	0x6DDE	# <CJK>
+0x6442	0x6E0E	# <CJK>
+0x6443	0x6DBF	# <CJK>
+0x6444	0x6DE0	# <CJK>
+0x6445	0x6E11	# <CJK>
+0x6446	0x6DE6	# <CJK>
+0x6447	0x6DDD	# <CJK>
+0x6448	0x6DD9	# <CJK>
+0x6449	0x6E16	# <CJK>
+0x644A	0x6DAB	# <CJK>
+0x644B	0x6E0C	# <CJK>
+0x644C	0x6DAE	# <CJK>
+0x644D	0x6E2B	# <CJK>
+0x644E	0x6E6E	# <CJK>
+0x644F	0x6E4E	# <CJK>
+0x6450	0x6E6B	# <CJK>
+0x6451	0x6EB2	# <CJK>
+0x6452	0x6E5F	# <CJK>
+0x6453	0x6E86	# <CJK>
+0x6454	0x6E53	# <CJK>
+0x6455	0x6E54	# <CJK>
+0x6456	0x6E32	# <CJK>
+0x6457	0x6E25	# <CJK>
+0x6458	0x6E44	# <CJK>
+0x6459	0x6EDF	# <CJK>
+0x645A	0x6EB1	# <CJK>
+0x645B	0x6E98	# <CJK>
+0x645C	0x6EE0	# <CJK>
+0x645D	0x6F2D	# <CJK>
+0x645E	0x6EE2	# <CJK>
+0x645F	0x6EA5	# <CJK>
+0x6460	0x6EA7	# <CJK>
+0x6461	0x6EBD	# <CJK>
+0x6462	0x6EBB	# <CJK>
+0x6463	0x6EB7	# <CJK>
+0x6464	0x6ED7	# <CJK>
+0x6465	0x6EB4	# <CJK>
+0x6466	0x6ECF	# <CJK>
+0x6467	0x6E8F	# <CJK>
+0x6468	0x6EC2	# <CJK>
+0x6469	0x6E9F	# <CJK>
+0x646A	0x6F62	# <CJK>
+0x646B	0x6F46	# <CJK>
+0x646C	0x6F47	# <CJK>
+0x646D	0x6F24	# <CJK>
+0x646E	0x6F15	# <CJK>
+0x646F	0x6EF9	# <CJK>
+0x6470	0x6F2F	# <CJK>
+0x6471	0x6F36	# <CJK>
+0x6472	0x6F4B	# <CJK>
+0x6473	0x6F74	# <CJK>
+0x6474	0x6F2A	# <CJK>
+0x6475	0x6F09	# <CJK>
+0x6476	0x6F29	# <CJK>
+0x6477	0x6F89	# <CJK>
+0x6478	0x6F8D	# <CJK>
+0x6479	0x6F8C	# <CJK>
+0x647A	0x6F78	# <CJK>
+0x647B	0x6F72	# <CJK>
+0x647C	0x6F7C	# <CJK>
+0x647D	0x6F7A	# <CJK>
+0x647E	0x6FD1	# <CJK>
+0x6521	0x6FC9	# <CJK>
+0x6522	0x6FA7	# <CJK>
+0x6523	0x6FB9	# <CJK>
+0x6524	0x6FB6	# <CJK>
+0x6525	0x6FC2	# <CJK>
+0x6526	0x6FE1	# <CJK>
+0x6527	0x6FEE	# <CJK>
+0x6528	0x6FDE	# <CJK>
+0x6529	0x6FE0	# <CJK>
+0x652A	0x6FEF	# <CJK>
+0x652B	0x701A	# <CJK>
+0x652C	0x7023	# <CJK>
+0x652D	0x701B	# <CJK>
+0x652E	0x7039	# <CJK>
+0x652F	0x7035	# <CJK>
+0x6530	0x704F	# <CJK>
+0x6531	0x705E	# <CJK>
+0x6532	0x5B80	# <CJK>
+0x6533	0x5B84	# <CJK>
+0x6534	0x5B95	# <CJK>
+0x6535	0x5B93	# <CJK>
+0x6536	0x5BA5	# <CJK>
+0x6537	0x5BB8	# <CJK>
+0x6538	0x752F	# <CJK>
+0x6539	0x9A9E	# <CJK>
+0x653A	0x6434	# <CJK>
+0x653B	0x5BE4	# <CJK>
+0x653C	0x5BEE	# <CJK>
+0x653D	0x8930	# <CJK>
+0x653E	0x5BF0	# <CJK>
+0x653F	0x8E47	# <CJK>
+0x6540	0x8B07	# <CJK>
+0x6541	0x8FB6	# <CJK>
+0x6542	0x8FD3	# <CJK>
+0x6543	0x8FD5	# <CJK>
+0x6544	0x8FE5	# <CJK>
+0x6545	0x8FEE	# <CJK>
+0x6546	0x8FE4	# <CJK>
+0x6547	0x8FE9	# <CJK>
+0x6548	0x8FE6	# <CJK>
+0x6549	0x8FF3	# <CJK>
+0x654A	0x8FE8	# <CJK>
+0x654B	0x9005	# <CJK>
+0x654C	0x9004	# <CJK>
+0x654D	0x900B	# <CJK>
+0x654E	0x9026	# <CJK>
+0x654F	0x9011	# <CJK>
+0x6550	0x900D	# <CJK>
+0x6551	0x9016	# <CJK>
+0x6552	0x9021	# <CJK>
+0x6553	0x9035	# <CJK>
+0x6554	0x9036	# <CJK>
+0x6555	0x902D	# <CJK>
+0x6556	0x902F	# <CJK>
+0x6557	0x9044	# <CJK>
+0x6558	0x9051	# <CJK>
+0x6559	0x9052	# <CJK>
+0x655A	0x9050	# <CJK>
+0x655B	0x9068	# <CJK>
+0x655C	0x9058	# <CJK>
+0x655D	0x9062	# <CJK>
+0x655E	0x905B	# <CJK>
+0x655F	0x66B9	# <CJK>
+0x6560	0x9074	# <CJK>
+0x6561	0x907D	# <CJK>
+0x6562	0x9082	# <CJK>
+0x6563	0x9088	# <CJK>
+0x6564	0x9083	# <CJK>
+0x6565	0x908B	# <CJK>
+0x6566	0x5F50	# <CJK>
+0x6567	0x5F57	# <CJK>
+0x6568	0x5F56	# <CJK>
+0x6569	0x5F58	# <CJK>
+0x656A	0x5C3B	# <CJK>
+0x656B	0x54AB	# <CJK>
+0x656C	0x5C50	# <CJK>
+0x656D	0x5C59	# <CJK>
+0x656E	0x5B71	# <CJK>
+0x656F	0x5C63	# <CJK>
+0x6570	0x5C66	# <CJK>
+0x6571	0x7FBC	# <CJK>
+0x6572	0x5F2A	# <CJK>
+0x6573	0x5F29	# <CJK>
+0x6574	0x5F2D	# <CJK>
+0x6575	0x8274	# <CJK>
+0x6576	0x5F3C	# <CJK>
+0x6577	0x9B3B	# <CJK>
+0x6578	0x5C6E	# <CJK>
+0x6579	0x5981	# <CJK>
+0x657A	0x5983	# <CJK>
+0x657B	0x598D	# <CJK>
+0x657C	0x59A9	# <CJK>
+0x657D	0x59AA	# <CJK>
+0x657E	0x59A3	# <CJK>
+0x6621	0x5997	# <CJK>
+0x6622	0x59CA	# <CJK>
+0x6623	0x59AB	# <CJK>
+0x6624	0x599E	# <CJK>
+0x6625	0x59A4	# <CJK>
+0x6626	0x59D2	# <CJK>
+0x6627	0x59B2	# <CJK>
+0x6628	0x59AF	# <CJK>
+0x6629	0x59D7	# <CJK>
+0x662A	0x59BE	# <CJK>
+0x662B	0x5A05	# <CJK>
+0x662C	0x5A06	# <CJK>
+0x662D	0x59DD	# <CJK>
+0x662E	0x5A08	# <CJK>
+0x662F	0x59E3	# <CJK>
+0x6630	0x59D8	# <CJK>
+0x6631	0x59F9	# <CJK>
+0x6632	0x5A0C	# <CJK>
+0x6633	0x5A09	# <CJK>
+0x6634	0x5A32	# <CJK>
+0x6635	0x5A34	# <CJK>
+0x6636	0x5A11	# <CJK>
+0x6637	0x5A23	# <CJK>
+0x6638	0x5A13	# <CJK>
+0x6639	0x5A40	# <CJK>
+0x663A	0x5A67	# <CJK>
+0x663B	0x5A4A	# <CJK>
+0x663C	0x5A55	# <CJK>
+0x663D	0x5A3C	# <CJK>
+0x663E	0x5A62	# <CJK>
+0x663F	0x5A75	# <CJK>
+0x6640	0x80EC	# <CJK>
+0x6641	0x5AAA	# <CJK>
+0x6642	0x5A9B	# <CJK>
+0x6643	0x5A77	# <CJK>
+0x6644	0x5A7A	# <CJK>
+0x6645	0x5ABE	# <CJK>
+0x6646	0x5AEB	# <CJK>
+0x6647	0x5AB2	# <CJK>
+0x6648	0x5AD2	# <CJK>
+0x6649	0x5AD4	# <CJK>
+0x664A	0x5AB8	# <CJK>
+0x664B	0x5AE0	# <CJK>
+0x664C	0x5AE3	# <CJK>
+0x664D	0x5AF1	# <CJK>
+0x664E	0x5AD6	# <CJK>
+0x664F	0x5AE6	# <CJK>
+0x6650	0x5AD8	# <CJK>
+0x6651	0x5ADC	# <CJK>
+0x6652	0x5B09	# <CJK>
+0x6653	0x5B17	# <CJK>
+0x6654	0x5B16	# <CJK>
+0x6655	0x5B32	# <CJK>
+0x6656	0x5B37	# <CJK>
+0x6657	0x5B40	# <CJK>
+0x6658	0x5C15	# <CJK>
+0x6659	0x5C1C	# <CJK>
+0x665A	0x5B5A	# <CJK>
+0x665B	0x5B65	# <CJK>
+0x665C	0x5B73	# <CJK>
+0x665D	0x5B51	# <CJK>
+0x665E	0x5B53	# <CJK>
+0x665F	0x5B62	# <CJK>
+0x6660	0x9A75	# <CJK>
+0x6661	0x9A77	# <CJK>
+0x6662	0x9A78	# <CJK>
+0x6663	0x9A7A	# <CJK>
+0x6664	0x9A7F	# <CJK>
+0x6665	0x9A7D	# <CJK>
+0x6666	0x9A80	# <CJK>
+0x6667	0x9A81	# <CJK>
+0x6668	0x9A85	# <CJK>
+0x6669	0x9A88	# <CJK>
+0x666A	0x9A8A	# <CJK>
+0x666B	0x9A90	# <CJK>
+0x666C	0x9A92	# <CJK>
+0x666D	0x9A93	# <CJK>
+0x666E	0x9A96	# <CJK>
+0x666F	0x9A98	# <CJK>
+0x6670	0x9A9B	# <CJK>
+0x6671	0x9A9C	# <CJK>
+0x6672	0x9A9D	# <CJK>
+0x6673	0x9A9F	# <CJK>
+0x6674	0x9AA0	# <CJK>
+0x6675	0x9AA2	# <CJK>
+0x6676	0x9AA3	# <CJK>
+0x6677	0x9AA5	# <CJK>
+0x6678	0x9AA7	# <CJK>
+0x6679	0x7E9F	# <CJK>
+0x667A	0x7EA1	# <CJK>
+0x667B	0x7EA3	# <CJK>
+0x667C	0x7EA5	# <CJK>
+0x667D	0x7EA8	# <CJK>
+0x667E	0x7EA9	# <CJK>
+0x6721	0x7EAD	# <CJK>
+0x6722	0x7EB0	# <CJK>
+0x6723	0x7EBE	# <CJK>
+0x6724	0x7EC0	# <CJK>
+0x6725	0x7EC1	# <CJK>
+0x6726	0x7EC2	# <CJK>
+0x6727	0x7EC9	# <CJK>
+0x6728	0x7ECB	# <CJK>
+0x6729	0x7ECC	# <CJK>
+0x672A	0x7ED0	# <CJK>
+0x672B	0x7ED4	# <CJK>
+0x672C	0x7ED7	# <CJK>
+0x672D	0x7EDB	# <CJK>
+0x672E	0x7EE0	# <CJK>
+0x672F	0x7EE1	# <CJK>
+0x6730	0x7EE8	# <CJK>
+0x6731	0x7EEB	# <CJK>
+0x6732	0x7EEE	# <CJK>
+0x6733	0x7EEF	# <CJK>
+0x6734	0x7EF1	# <CJK>
+0x6735	0x7EF2	# <CJK>
+0x6736	0x7F0D	# <CJK>
+0x6737	0x7EF6	# <CJK>
+0x6738	0x7EFA	# <CJK>
+0x6739	0x7EFB	# <CJK>
+0x673A	0x7EFE	# <CJK>
+0x673B	0x7F01	# <CJK>
+0x673C	0x7F02	# <CJK>
+0x673D	0x7F03	# <CJK>
+0x673E	0x7F07	# <CJK>
+0x673F	0x7F08	# <CJK>
+0x6740	0x7F0B	# <CJK>
+0x6741	0x7F0C	# <CJK>
+0x6742	0x7F0F	# <CJK>
+0x6743	0x7F11	# <CJK>
+0x6744	0x7F12	# <CJK>
+0x6745	0x7F17	# <CJK>
+0x6746	0x7F19	# <CJK>
+0x6747	0x7F1C	# <CJK>
+0x6748	0x7F1B	# <CJK>
+0x6749	0x7F1F	# <CJK>
+0x674A	0x7F21	# <CJK>
+0x674B	0x7F22	# <CJK>
+0x674C	0x7F23	# <CJK>
+0x674D	0x7F24	# <CJK>
+0x674E	0x7F25	# <CJK>
+0x674F	0x7F26	# <CJK>
+0x6750	0x7F27	# <CJK>
+0x6751	0x7F2A	# <CJK>
+0x6752	0x7F2B	# <CJK>
+0x6753	0x7F2C	# <CJK>
+0x6754	0x7F2D	# <CJK>
+0x6755	0x7F2F	# <CJK>
+0x6756	0x7F30	# <CJK>
+0x6757	0x7F31	# <CJK>
+0x6758	0x7F32	# <CJK>
+0x6759	0x7F33	# <CJK>
+0x675A	0x7F35	# <CJK>
+0x675B	0x5E7A	# <CJK>
+0x675C	0x757F	# <CJK>
+0x675D	0x5DDB	# <CJK>
+0x675E	0x753E	# <CJK>
+0x675F	0x9095	# <CJK>
+0x6760	0x738E	# <CJK>
+0x6761	0x7391	# <CJK>
+0x6762	0x73AE	# <CJK>
+0x6763	0x73A2	# <CJK>
+0x6764	0x739F	# <CJK>
+0x6765	0x73CF	# <CJK>
+0x6766	0x73C2	# <CJK>
+0x6767	0x73D1	# <CJK>
+0x6768	0x73B7	# <CJK>
+0x6769	0x73B3	# <CJK>
+0x676A	0x73C0	# <CJK>
+0x676B	0x73C9	# <CJK>
+0x676C	0x73C8	# <CJK>
+0x676D	0x73E5	# <CJK>
+0x676E	0x73D9	# <CJK>
+0x676F	0x987C	# <CJK>
+0x6770	0x740A	# <CJK>
+0x6771	0x73E9	# <CJK>
+0x6772	0x73E7	# <CJK>
+0x6773	0x73DE	# <CJK>
+0x6774	0x73BA	# <CJK>
+0x6775	0x73F2	# <CJK>
+0x6776	0x740F	# <CJK>
+0x6777	0x742A	# <CJK>
+0x6778	0x745B	# <CJK>
+0x6779	0x7426	# <CJK>
+0x677A	0x7425	# <CJK>
+0x677B	0x7428	# <CJK>
+0x677C	0x7430	# <CJK>
+0x677D	0x742E	# <CJK>
+0x677E	0x742C	# <CJK>
+0x6821	0x741B	# <CJK>
+0x6822	0x741A	# <CJK>
+0x6823	0x7441	# <CJK>
+0x6824	0x745C	# <CJK>
+0x6825	0x7457	# <CJK>
+0x6826	0x7455	# <CJK>
+0x6827	0x7459	# <CJK>
+0x6828	0x7477	# <CJK>
+0x6829	0x746D	# <CJK>
+0x682A	0x747E	# <CJK>
+0x682B	0x749C	# <CJK>
+0x682C	0x748E	# <CJK>
+0x682D	0x7480	# <CJK>
+0x682E	0x7481	# <CJK>
+0x682F	0x7487	# <CJK>
+0x6830	0x748B	# <CJK>
+0x6831	0x749E	# <CJK>
+0x6832	0x74A8	# <CJK>
+0x6833	0x74A9	# <CJK>
+0x6834	0x7490	# <CJK>
+0x6835	0x74A7	# <CJK>
+0x6836	0x74D2	# <CJK>
+0x6837	0x74BA	# <CJK>
+0x6838	0x97EA	# <CJK>
+0x6839	0x97EB	# <CJK>
+0x683A	0x97EC	# <CJK>
+0x683B	0x674C	# <CJK>
+0x683C	0x6753	# <CJK>
+0x683D	0x675E	# <CJK>
+0x683E	0x6748	# <CJK>
+0x683F	0x6769	# <CJK>
+0x6840	0x67A5	# <CJK>
+0x6841	0x6787	# <CJK>
+0x6842	0x676A	# <CJK>
+0x6843	0x6773	# <CJK>
+0x6844	0x6798	# <CJK>
+0x6845	0x67A7	# <CJK>
+0x6846	0x6775	# <CJK>
+0x6847	0x67A8	# <CJK>
+0x6848	0x679E	# <CJK>
+0x6849	0x67AD	# <CJK>
+0x684A	0x678B	# <CJK>
+0x684B	0x6777	# <CJK>
+0x684C	0x677C	# <CJK>
+0x684D	0x67F0	# <CJK>
+0x684E	0x6809	# <CJK>
+0x684F	0x67D8	# <CJK>
+0x6850	0x680A	# <CJK>
+0x6851	0x67E9	# <CJK>
+0x6852	0x67B0	# <CJK>
+0x6853	0x680C	# <CJK>
+0x6854	0x67D9	# <CJK>
+0x6855	0x67B5	# <CJK>
+0x6856	0x67DA	# <CJK>
+0x6857	0x67B3	# <CJK>
+0x6858	0x67DD	# <CJK>
+0x6859	0x6800	# <CJK>
+0x685A	0x67C3	# <CJK>
+0x685B	0x67B8	# <CJK>
+0x685C	0x67E2	# <CJK>
+0x685D	0x680E	# <CJK>
+0x685E	0x67C1	# <CJK>
+0x685F	0x67FD	# <CJK>
+0x6860	0x6832	# <CJK>
+0x6861	0x6833	# <CJK>
+0x6862	0x6860	# <CJK>
+0x6863	0x6861	# <CJK>
+0x6864	0x684E	# <CJK>
+0x6865	0x6862	# <CJK>
+0x6866	0x6844	# <CJK>
+0x6867	0x6864	# <CJK>
+0x6868	0x6883	# <CJK>
+0x6869	0x681D	# <CJK>
+0x686A	0x6855	# <CJK>
+0x686B	0x6866	# <CJK>
+0x686C	0x6841	# <CJK>
+0x686D	0x6867	# <CJK>
+0x686E	0x6840	# <CJK>
+0x686F	0x683E	# <CJK>
+0x6870	0x684A	# <CJK>
+0x6871	0x6849	# <CJK>
+0x6872	0x6829	# <CJK>
+0x6873	0x68B5	# <CJK>
+0x6874	0x688F	# <CJK>
+0x6875	0x6874	# <CJK>
+0x6876	0x6877	# <CJK>
+0x6877	0x6893	# <CJK>
+0x6878	0x686B	# <CJK>
+0x6879	0x68C2	# <CJK>
+0x687A	0x696E	# <CJK>
+0x687B	0x68FC	# <CJK>
+0x687C	0x691F	# <CJK>
+0x687D	0x6920	# <CJK>
+0x687E	0x68F9	# <CJK>
+0x6921	0x6924	# <CJK>
+0x6922	0x68F0	# <CJK>
+0x6923	0x690B	# <CJK>
+0x6924	0x6901	# <CJK>
+0x6925	0x6957	# <CJK>
+0x6926	0x68E3	# <CJK>
+0x6927	0x6910	# <CJK>
+0x6928	0x6971	# <CJK>
+0x6929	0x6939	# <CJK>
+0x692A	0x6960	# <CJK>
+0x692B	0x6942	# <CJK>
+0x692C	0x695D	# <CJK>
+0x692D	0x6984	# <CJK>
+0x692E	0x696B	# <CJK>
+0x692F	0x6980	# <CJK>
+0x6930	0x6998	# <CJK>
+0x6931	0x6978	# <CJK>
+0x6932	0x6934	# <CJK>
+0x6933	0x69CC	# <CJK>
+0x6934	0x6987	# <CJK>
+0x6935	0x6988	# <CJK>
+0x6936	0x69CE	# <CJK>
+0x6937	0x6989	# <CJK>
+0x6938	0x6966	# <CJK>
+0x6939	0x6963	# <CJK>
+0x693A	0x6979	# <CJK>
+0x693B	0x699B	# <CJK>
+0x693C	0x69A7	# <CJK>
+0x693D	0x69BB	# <CJK>
+0x693E	0x69AB	# <CJK>
+0x693F	0x69AD	# <CJK>
+0x6940	0x69D4	# <CJK>
+0x6941	0x69B1	# <CJK>
+0x6942	0x69C1	# <CJK>
+0x6943	0x69CA	# <CJK>
+0x6944	0x69DF	# <CJK>
+0x6945	0x6995	# <CJK>
+0x6946	0x69E0	# <CJK>
+0x6947	0x698D	# <CJK>
+0x6948	0x69FF	# <CJK>
+0x6949	0x6A2F	# <CJK>
+0x694A	0x69ED	# <CJK>
+0x694B	0x6A17	# <CJK>
+0x694C	0x6A18	# <CJK>
+0x694D	0x6A65	# <CJK>
+0x694E	0x69F2	# <CJK>
+0x694F	0x6A44	# <CJK>
+0x6950	0x6A3E	# <CJK>
+0x6951	0x6AA0	# <CJK>
+0x6952	0x6A50	# <CJK>
+0x6953	0x6A5B	# <CJK>
+0x6954	0x6A35	# <CJK>
+0x6955	0x6A8E	# <CJK>
+0x6956	0x6A79	# <CJK>
+0x6957	0x6A3D	# <CJK>
+0x6958	0x6A28	# <CJK>
+0x6959	0x6A58	# <CJK>
+0x695A	0x6A7C	# <CJK>
+0x695B	0x6A91	# <CJK>
+0x695C	0x6A90	# <CJK>
+0x695D	0x6AA9	# <CJK>
+0x695E	0x6A97	# <CJK>
+0x695F	0x6AAB	# <CJK>
+0x6960	0x7337	# <CJK>
+0x6961	0x7352	# <CJK>
+0x6962	0x6B81	# <CJK>
+0x6963	0x6B82	# <CJK>
+0x6964	0x6B87	# <CJK>
+0x6965	0x6B84	# <CJK>
+0x6966	0x6B92	# <CJK>
+0x6967	0x6B93	# <CJK>
+0x6968	0x6B8D	# <CJK>
+0x6969	0x6B9A	# <CJK>
+0x696A	0x6B9B	# <CJK>
+0x696B	0x6BA1	# <CJK>
+0x696C	0x6BAA	# <CJK>
+0x696D	0x8F6B	# <CJK>
+0x696E	0x8F6D	# <CJK>
+0x696F	0x8F71	# <CJK>
+0x6970	0x8F72	# <CJK>
+0x6971	0x8F73	# <CJK>
+0x6972	0x8F75	# <CJK>
+0x6973	0x8F76	# <CJK>
+0x6974	0x8F78	# <CJK>
+0x6975	0x8F77	# <CJK>
+0x6976	0x8F79	# <CJK>
+0x6977	0x8F7A	# <CJK>
+0x6978	0x8F7C	# <CJK>
+0x6979	0x8F7E	# <CJK>
+0x697A	0x8F81	# <CJK>
+0x697B	0x8F82	# <CJK>
+0x697C	0x8F84	# <CJK>
+0x697D	0x8F87	# <CJK>
+0x697E	0x8F8B	# <CJK>
+0x6A21	0x8F8D	# <CJK>
+0x6A22	0x8F8E	# <CJK>
+0x6A23	0x8F8F	# <CJK>
+0x6A24	0x8F98	# <CJK>
+0x6A25	0x8F9A	# <CJK>
+0x6A26	0x8ECE	# <CJK>
+0x6A27	0x620B	# <CJK>
+0x6A28	0x6217	# <CJK>
+0x6A29	0x621B	# <CJK>
+0x6A2A	0x621F	# <CJK>
+0x6A2B	0x6222	# <CJK>
+0x6A2C	0x6221	# <CJK>
+0x6A2D	0x6225	# <CJK>
+0x6A2E	0x6224	# <CJK>
+0x6A2F	0x622C	# <CJK>
+0x6A30	0x81E7	# <CJK>
+0x6A31	0x74EF	# <CJK>
+0x6A32	0x74F4	# <CJK>
+0x6A33	0x74FF	# <CJK>
+0x6A34	0x750F	# <CJK>
+0x6A35	0x7511	# <CJK>
+0x6A36	0x7513	# <CJK>
+0x6A37	0x6534	# <CJK>
+0x6A38	0x65EE	# <CJK>
+0x6A39	0x65EF	# <CJK>
+0x6A3A	0x65F0	# <CJK>
+0x6A3B	0x660A	# <CJK>
+0x6A3C	0x6619	# <CJK>
+0x6A3D	0x6772	# <CJK>
+0x6A3E	0x6603	# <CJK>
+0x6A3F	0x6615	# <CJK>
+0x6A40	0x6600	# <CJK>
+0x6A41	0x7085	# <CJK>
+0x6A42	0x66F7	# <CJK>
+0x6A43	0x661D	# <CJK>
+0x6A44	0x6634	# <CJK>
+0x6A45	0x6631	# <CJK>
+0x6A46	0x6636	# <CJK>
+0x6A47	0x6635	# <CJK>
+0x6A48	0x8006	# <CJK>
+0x6A49	0x665F	# <CJK>
+0x6A4A	0x6654	# <CJK>
+0x6A4B	0x6641	# <CJK>
+0x6A4C	0x664F	# <CJK>
+0x6A4D	0x6656	# <CJK>
+0x6A4E	0x6661	# <CJK>
+0x6A4F	0x6657	# <CJK>
+0x6A50	0x6677	# <CJK>
+0x6A51	0x6684	# <CJK>
+0x6A52	0x668C	# <CJK>
+0x6A53	0x66A7	# <CJK>
+0x6A54	0x669D	# <CJK>
+0x6A55	0x66BE	# <CJK>
+0x6A56	0x66DB	# <CJK>
+0x6A57	0x66DC	# <CJK>
+0x6A58	0x66E6	# <CJK>
+0x6A59	0x66E9	# <CJK>
+0x6A5A	0x8D32	# <CJK>
+0x6A5B	0x8D33	# <CJK>
+0x6A5C	0x8D36	# <CJK>
+0x6A5D	0x8D3B	# <CJK>
+0x6A5E	0x8D3D	# <CJK>
+0x6A5F	0x8D40	# <CJK>
+0x6A60	0x8D45	# <CJK>
+0x6A61	0x8D46	# <CJK>
+0x6A62	0x8D48	# <CJK>
+0x6A63	0x8D49	# <CJK>
+0x6A64	0x8D47	# <CJK>
+0x6A65	0x8D4D	# <CJK>
+0x6A66	0x8D55	# <CJK>
+0x6A67	0x8D59	# <CJK>
+0x6A68	0x89C7	# <CJK>
+0x6A69	0x89CA	# <CJK>
+0x6A6A	0x89CB	# <CJK>
+0x6A6B	0x89CC	# <CJK>
+0x6A6C	0x89CE	# <CJK>
+0x6A6D	0x89CF	# <CJK>
+0x6A6E	0x89D0	# <CJK>
+0x6A6F	0x89D1	# <CJK>
+0x6A70	0x726E	# <CJK>
+0x6A71	0x729F	# <CJK>
+0x6A72	0x725D	# <CJK>
+0x6A73	0x7266	# <CJK>
+0x6A74	0x726F	# <CJK>
+0x6A75	0x727E	# <CJK>
+0x6A76	0x727F	# <CJK>
+0x6A77	0x7284	# <CJK>
+0x6A78	0x728B	# <CJK>
+0x6A79	0x728D	# <CJK>
+0x6A7A	0x728F	# <CJK>
+0x6A7B	0x7292	# <CJK>
+0x6A7C	0x6308	# <CJK>
+0x6A7D	0x6332	# <CJK>
+0x6A7E	0x63B0	# <CJK>
+0x6B21	0x643F	# <CJK>
+0x6B22	0x64D8	# <CJK>
+0x6B23	0x8004	# <CJK>
+0x6B24	0x6BEA	# <CJK>
+0x6B25	0x6BF3	# <CJK>
+0x6B26	0x6BFD	# <CJK>
+0x6B27	0x6BF5	# <CJK>
+0x6B28	0x6BF9	# <CJK>
+0x6B29	0x6C05	# <CJK>
+0x6B2A	0x6C07	# <CJK>
+0x6B2B	0x6C06	# <CJK>
+0x6B2C	0x6C0D	# <CJK>
+0x6B2D	0x6C15	# <CJK>
+0x6B2E	0x6C18	# <CJK>
+0x6B2F	0x6C19	# <CJK>
+0x6B30	0x6C1A	# <CJK>
+0x6B31	0x6C21	# <CJK>
+0x6B32	0x6C29	# <CJK>
+0x6B33	0x6C24	# <CJK>
+0x6B34	0x6C2A	# <CJK>
+0x6B35	0x6C32	# <CJK>
+0x6B36	0x6535	# <CJK>
+0x6B37	0x6555	# <CJK>
+0x6B38	0x656B	# <CJK>
+0x6B39	0x724D	# <CJK>
+0x6B3A	0x7252	# <CJK>
+0x6B3B	0x7256	# <CJK>
+0x6B3C	0x7230	# <CJK>
+0x6B3D	0x8662	# <CJK>
+0x6B3E	0x5216	# <CJK>
+0x6B3F	0x809F	# <CJK>
+0x6B40	0x809C	# <CJK>
+0x6B41	0x8093	# <CJK>
+0x6B42	0x80BC	# <CJK>
+0x6B43	0x670A	# <CJK>
+0x6B44	0x80BD	# <CJK>
+0x6B45	0x80B1	# <CJK>
+0x6B46	0x80AB	# <CJK>
+0x6B47	0x80AD	# <CJK>
+0x6B48	0x80B4	# <CJK>
+0x6B49	0x80B7	# <CJK>
+0x6B4A	0x80E7	# <CJK>
+0x6B4B	0x80E8	# <CJK>
+0x6B4C	0x80E9	# <CJK>
+0x6B4D	0x80EA	# <CJK>
+0x6B4E	0x80DB	# <CJK>
+0x6B4F	0x80C2	# <CJK>
+0x6B50	0x80C4	# <CJK>
+0x6B51	0x80D9	# <CJK>
+0x6B52	0x80CD	# <CJK>
+0x6B53	0x80D7	# <CJK>
+0x6B54	0x6710	# <CJK>
+0x6B55	0x80DD	# <CJK>
+0x6B56	0x80EB	# <CJK>
+0x6B57	0x80F1	# <CJK>
+0x6B58	0x80F4	# <CJK>
+0x6B59	0x80ED	# <CJK>
+0x6B5A	0x810D	# <CJK>
+0x6B5B	0x810E	# <CJK>
+0x6B5C	0x80F2	# <CJK>
+0x6B5D	0x80FC	# <CJK>
+0x6B5E	0x6715	# <CJK>
+0x6B5F	0x8112	# <CJK>
+0x6B60	0x8C5A	# <CJK>
+0x6B61	0x8136	# <CJK>
+0x6B62	0x811E	# <CJK>
+0x6B63	0x812C	# <CJK>
+0x6B64	0x8118	# <CJK>
+0x6B65	0x8132	# <CJK>
+0x6B66	0x8148	# <CJK>
+0x6B67	0x814C	# <CJK>
+0x6B68	0x8153	# <CJK>
+0x6B69	0x8174	# <CJK>
+0x6B6A	0x8159	# <CJK>
+0x6B6B	0x815A	# <CJK>
+0x6B6C	0x8171	# <CJK>
+0x6B6D	0x8160	# <CJK>
+0x6B6E	0x8169	# <CJK>
+0x6B6F	0x817C	# <CJK>
+0x6B70	0x817D	# <CJK>
+0x6B71	0x816D	# <CJK>
+0x6B72	0x8167	# <CJK>
+0x6B73	0x584D	# <CJK>
+0x6B74	0x5AB5	# <CJK>
+0x6B75	0x8188	# <CJK>
+0x6B76	0x8182	# <CJK>
+0x6B77	0x8191	# <CJK>
+0x6B78	0x6ED5	# <CJK>
+0x6B79	0x81A3	# <CJK>
+0x6B7A	0x81AA	# <CJK>
+0x6B7B	0x81CC	# <CJK>
+0x6B7C	0x6726	# <CJK>
+0x6B7D	0x81CA	# <CJK>
+0x6B7E	0x81BB	# <CJK>
+0x6C21	0x81C1	# <CJK>
+0x6C22	0x81A6	# <CJK>
+0x6C23	0x6B24	# <CJK>
+0x6C24	0x6B37	# <CJK>
+0x6C25	0x6B39	# <CJK>
+0x6C26	0x6B43	# <CJK>
+0x6C27	0x6B46	# <CJK>
+0x6C28	0x6B59	# <CJK>
+0x6C29	0x98D1	# <CJK>
+0x6C2A	0x98D2	# <CJK>
+0x6C2B	0x98D3	# <CJK>
+0x6C2C	0x98D5	# <CJK>
+0x6C2D	0x98D9	# <CJK>
+0x6C2E	0x98DA	# <CJK>
+0x6C2F	0x6BB3	# <CJK>
+0x6C30	0x5F40	# <CJK>
+0x6C31	0x6BC2	# <CJK>
+0x6C32	0x89F3	# <CJK>
+0x6C33	0x6590	# <CJK>
+0x6C34	0x9F51	# <CJK>
+0x6C35	0x6593	# <CJK>
+0x6C36	0x65BC	# <CJK>
+0x6C37	0x65C6	# <CJK>
+0x6C38	0x65C4	# <CJK>
+0x6C39	0x65C3	# <CJK>
+0x6C3A	0x65CC	# <CJK>
+0x6C3B	0x65CE	# <CJK>
+0x6C3C	0x65D2	# <CJK>
+0x6C3D	0x65D6	# <CJK>
+0x6C3E	0x7080	# <CJK>
+0x6C3F	0x709C	# <CJK>
+0x6C40	0x7096	# <CJK>
+0x6C41	0x709D	# <CJK>
+0x6C42	0x70BB	# <CJK>
+0x6C43	0x70C0	# <CJK>
+0x6C44	0x70B7	# <CJK>
+0x6C45	0x70AB	# <CJK>
+0x6C46	0x70B1	# <CJK>
+0x6C47	0x70E8	# <CJK>
+0x6C48	0x70CA	# <CJK>
+0x6C49	0x7110	# <CJK>
+0x6C4A	0x7113	# <CJK>
+0x6C4B	0x7116	# <CJK>
+0x6C4C	0x712F	# <CJK>
+0x6C4D	0x7131	# <CJK>
+0x6C4E	0x7173	# <CJK>
+0x6C4F	0x715C	# <CJK>
+0x6C50	0x7168	# <CJK>
+0x6C51	0x7145	# <CJK>
+0x6C52	0x7172	# <CJK>
+0x6C53	0x714A	# <CJK>
+0x6C54	0x7178	# <CJK>
+0x6C55	0x717A	# <CJK>
+0x6C56	0x7198	# <CJK>
+0x6C57	0x71B3	# <CJK>
+0x6C58	0x71B5	# <CJK>
+0x6C59	0x71A8	# <CJK>
+0x6C5A	0x71A0	# <CJK>
+0x6C5B	0x71E0	# <CJK>
+0x6C5C	0x71D4	# <CJK>
+0x6C5D	0x71E7	# <CJK>
+0x6C5E	0x71F9	# <CJK>
+0x6C5F	0x721D	# <CJK>
+0x6C60	0x7228	# <CJK>
+0x6C61	0x706C	# <CJK>
+0x6C62	0x7118	# <CJK>
+0x6C63	0x7166	# <CJK>
+0x6C64	0x71B9	# <CJK>
+0x6C65	0x623E	# <CJK>
+0x6C66	0x623D	# <CJK>
+0x6C67	0x6243	# <CJK>
+0x6C68	0x6248	# <CJK>
+0x6C69	0x6249	# <CJK>
+0x6C6A	0x793B	# <CJK>
+0x6C6B	0x7940	# <CJK>
+0x6C6C	0x7946	# <CJK>
+0x6C6D	0x7949	# <CJK>
+0x6C6E	0x795B	# <CJK>
+0x6C6F	0x795C	# <CJK>
+0x6C70	0x7953	# <CJK>
+0x6C71	0x795A	# <CJK>
+0x6C72	0x7962	# <CJK>
+0x6C73	0x7957	# <CJK>
+0x6C74	0x7960	# <CJK>
+0x6C75	0x796F	# <CJK>
+0x6C76	0x7967	# <CJK>
+0x6C77	0x797A	# <CJK>
+0x6C78	0x7985	# <CJK>
+0x6C79	0x798A	# <CJK>
+0x6C7A	0x799A	# <CJK>
+0x6C7B	0x79A7	# <CJK>
+0x6C7C	0x79B3	# <CJK>
+0x6C7D	0x5FD1	# <CJK>
+0x6C7E	0x5FD0	# <CJK>
+0x6D21	0x603C	# <CJK>
+0x6D22	0x605D	# <CJK>
+0x6D23	0x605A	# <CJK>
+0x6D24	0x6067	# <CJK>
+0x6D25	0x6041	# <CJK>
+0x6D26	0x6059	# <CJK>
+0x6D27	0x6063	# <CJK>
+0x6D28	0x60AB	# <CJK>
+0x6D29	0x6106	# <CJK>
+0x6D2A	0x610D	# <CJK>
+0x6D2B	0x615D	# <CJK>
+0x6D2C	0x61A9	# <CJK>
+0x6D2D	0x619D	# <CJK>
+0x6D2E	0x61CB	# <CJK>
+0x6D2F	0x61D1	# <CJK>
+0x6D30	0x6206	# <CJK>
+0x6D31	0x8080	# <CJK>
+0x6D32	0x807F	# <CJK>
+0x6D33	0x6C93	# <CJK>
+0x6D34	0x6CF6	# <CJK>
+0x6D35	0x6DFC	# <CJK>
+0x6D36	0x77F6	# <CJK>
+0x6D37	0x77F8	# <CJK>
+0x6D38	0x7800	# <CJK>
+0x6D39	0x7809	# <CJK>
+0x6D3A	0x7817	# <CJK>
+0x6D3B	0x7818	# <CJK>
+0x6D3C	0x7811	# <CJK>
+0x6D3D	0x65AB	# <CJK>
+0x6D3E	0x782D	# <CJK>
+0x6D3F	0x781C	# <CJK>
+0x6D40	0x781D	# <CJK>
+0x6D41	0x7839	# <CJK>
+0x6D42	0x783A	# <CJK>
+0x6D43	0x783B	# <CJK>
+0x6D44	0x781F	# <CJK>
+0x6D45	0x783C	# <CJK>
+0x6D46	0x7825	# <CJK>
+0x6D47	0x782C	# <CJK>
+0x6D48	0x7823	# <CJK>
+0x6D49	0x7829	# <CJK>
+0x6D4A	0x784E	# <CJK>
+0x6D4B	0x786D	# <CJK>
+0x6D4C	0x7856	# <CJK>
+0x6D4D	0x7857	# <CJK>
+0x6D4E	0x7826	# <CJK>
+0x6D4F	0x7850	# <CJK>
+0x6D50	0x7847	# <CJK>
+0x6D51	0x784C	# <CJK>
+0x6D52	0x786A	# <CJK>
+0x6D53	0x789B	# <CJK>
+0x6D54	0x7893	# <CJK>
+0x6D55	0x789A	# <CJK>
+0x6D56	0x7887	# <CJK>
+0x6D57	0x789C	# <CJK>
+0x6D58	0x78A1	# <CJK>
+0x6D59	0x78A3	# <CJK>
+0x6D5A	0x78B2	# <CJK>
+0x6D5B	0x78B9	# <CJK>
+0x6D5C	0x78A5	# <CJK>
+0x6D5D	0x78D4	# <CJK>
+0x6D5E	0x78D9	# <CJK>
+0x6D5F	0x78C9	# <CJK>
+0x6D60	0x78EC	# <CJK>
+0x6D61	0x78F2	# <CJK>
+0x6D62	0x7905	# <CJK>
+0x6D63	0x78F4	# <CJK>
+0x6D64	0x7913	# <CJK>
+0x6D65	0x7924	# <CJK>
+0x6D66	0x791E	# <CJK>
+0x6D67	0x7934	# <CJK>
+0x6D68	0x9F9B	# <CJK>
+0x6D69	0x9EF9	# <CJK>
+0x6D6A	0x9EFB	# <CJK>
+0x6D6B	0x9EFC	# <CJK>
+0x6D6C	0x76F1	# <CJK>
+0x6D6D	0x7704	# <CJK>
+0x6D6E	0x770D	# <CJK>
+0x6D6F	0x76F9	# <CJK>
+0x6D70	0x7707	# <CJK>
+0x6D71	0x7708	# <CJK>
+0x6D72	0x771A	# <CJK>
+0x6D73	0x7722	# <CJK>
+0x6D74	0x7719	# <CJK>
+0x6D75	0x772D	# <CJK>
+0x6D76	0x7726	# <CJK>
+0x6D77	0x7735	# <CJK>
+0x6D78	0x7738	# <CJK>
+0x6D79	0x7750	# <CJK>
+0x6D7A	0x7751	# <CJK>
+0x6D7B	0x7747	# <CJK>
+0x6D7C	0x7743	# <CJK>
+0x6D7D	0x775A	# <CJK>
+0x6D7E	0x7768	# <CJK>
+0x6E21	0x7762	# <CJK>
+0x6E22	0x7765	# <CJK>
+0x6E23	0x777F	# <CJK>
+0x6E24	0x778D	# <CJK>
+0x6E25	0x777D	# <CJK>
+0x6E26	0x7780	# <CJK>
+0x6E27	0x778C	# <CJK>
+0x6E28	0x7791	# <CJK>
+0x6E29	0x779F	# <CJK>
+0x6E2A	0x77A0	# <CJK>
+0x6E2B	0x77B0	# <CJK>
+0x6E2C	0x77B5	# <CJK>
+0x6E2D	0x77BD	# <CJK>
+0x6E2E	0x753A	# <CJK>
+0x6E2F	0x7540	# <CJK>
+0x6E30	0x754E	# <CJK>
+0x6E31	0x754B	# <CJK>
+0x6E32	0x7548	# <CJK>
+0x6E33	0x755B	# <CJK>
+0x6E34	0x7572	# <CJK>
+0x6E35	0x7579	# <CJK>
+0x6E36	0x7583	# <CJK>
+0x6E37	0x7F58	# <CJK>
+0x6E38	0x7F61	# <CJK>
+0x6E39	0x7F5F	# <CJK>
+0x6E3A	0x8A48	# <CJK>
+0x6E3B	0x7F68	# <CJK>
+0x6E3C	0x7F74	# <CJK>
+0x6E3D	0x7F71	# <CJK>
+0x6E3E	0x7F79	# <CJK>
+0x6E3F	0x7F81	# <CJK>
+0x6E40	0x7F7E	# <CJK>
+0x6E41	0x76CD	# <CJK>
+0x6E42	0x76E5	# <CJK>
+0x6E43	0x8832	# <CJK>
+0x6E44	0x9485	# <CJK>
+0x6E45	0x9486	# <CJK>
+0x6E46	0x9487	# <CJK>
+0x6E47	0x948B	# <CJK>
+0x6E48	0x948A	# <CJK>
+0x6E49	0x948C	# <CJK>
+0x6E4A	0x948D	# <CJK>
+0x6E4B	0x948F	# <CJK>
+0x6E4C	0x9490	# <CJK>
+0x6E4D	0x9494	# <CJK>
+0x6E4E	0x9497	# <CJK>
+0x6E4F	0x9495	# <CJK>
+0x6E50	0x949A	# <CJK>
+0x6E51	0x949B	# <CJK>
+0x6E52	0x949C	# <CJK>
+0x6E53	0x94A3	# <CJK>
+0x6E54	0x94A4	# <CJK>
+0x6E55	0x94AB	# <CJK>
+0x6E56	0x94AA	# <CJK>
+0x6E57	0x94AD	# <CJK>
+0x6E58	0x94AC	# <CJK>
+0x6E59	0x94AF	# <CJK>
+0x6E5A	0x94B0	# <CJK>
+0x6E5B	0x94B2	# <CJK>
+0x6E5C	0x94B4	# <CJK>
+0x6E5D	0x94B6	# <CJK>
+0x6E5E	0x94B7	# <CJK>
+0x6E5F	0x94B8	# <CJK>
+0x6E60	0x94B9	# <CJK>
+0x6E61	0x94BA	# <CJK>
+0x6E62	0x94BC	# <CJK>
+0x6E63	0x94BD	# <CJK>
+0x6E64	0x94BF	# <CJK>
+0x6E65	0x94C4	# <CJK>
+0x6E66	0x94C8	# <CJK>
+0x6E67	0x94C9	# <CJK>
+0x6E68	0x94CA	# <CJK>
+0x6E69	0x94CB	# <CJK>
+0x6E6A	0x94CC	# <CJK>
+0x6E6B	0x94CD	# <CJK>
+0x6E6C	0x94CE	# <CJK>
+0x6E6D	0x94D0	# <CJK>
+0x6E6E	0x94D1	# <CJK>
+0x6E6F	0x94D2	# <CJK>
+0x6E70	0x94D5	# <CJK>
+0x6E71	0x94D6	# <CJK>
+0x6E72	0x94D7	# <CJK>
+0x6E73	0x94D9	# <CJK>
+0x6E74	0x94D8	# <CJK>
+0x6E75	0x94DB	# <CJK>
+0x6E76	0x94DE	# <CJK>
+0x6E77	0x94DF	# <CJK>
+0x6E78	0x94E0	# <CJK>
+0x6E79	0x94E2	# <CJK>
+0x6E7A	0x94E4	# <CJK>
+0x6E7B	0x94E5	# <CJK>
+0x6E7C	0x94E7	# <CJK>
+0x6E7D	0x94E8	# <CJK>
+0x6E7E	0x94EA	# <CJK>
+0x6F21	0x94E9	# <CJK>
+0x6F22	0x94EB	# <CJK>
+0x6F23	0x94EE	# <CJK>
+0x6F24	0x94EF	# <CJK>
+0x6F25	0x94F3	# <CJK>
+0x6F26	0x94F4	# <CJK>
+0x6F27	0x94F5	# <CJK>
+0x6F28	0x94F7	# <CJK>
+0x6F29	0x94F9	# <CJK>
+0x6F2A	0x94FC	# <CJK>
+0x6F2B	0x94FD	# <CJK>
+0x6F2C	0x94FF	# <CJK>
+0x6F2D	0x9503	# <CJK>
+0x6F2E	0x9502	# <CJK>
+0x6F2F	0x9506	# <CJK>
+0x6F30	0x9507	# <CJK>
+0x6F31	0x9509	# <CJK>
+0x6F32	0x950A	# <CJK>
+0x6F33	0x950D	# <CJK>
+0x6F34	0x950E	# <CJK>
+0x6F35	0x950F	# <CJK>
+0x6F36	0x9512	# <CJK>
+0x6F37	0x9513	# <CJK>
+0x6F38	0x9514	# <CJK>
+0x6F39	0x9515	# <CJK>
+0x6F3A	0x9516	# <CJK>
+0x6F3B	0x9518	# <CJK>
+0x6F3C	0x951B	# <CJK>
+0x6F3D	0x951D	# <CJK>
+0x6F3E	0x951E	# <CJK>
+0x6F3F	0x951F	# <CJK>
+0x6F40	0x9522	# <CJK>
+0x6F41	0x952A	# <CJK>
+0x6F42	0x952B	# <CJK>
+0x6F43	0x9529	# <CJK>
+0x6F44	0x952C	# <CJK>
+0x6F45	0x9531	# <CJK>
+0x6F46	0x9532	# <CJK>
+0x6F47	0x9534	# <CJK>
+0x6F48	0x9536	# <CJK>
+0x6F49	0x9537	# <CJK>
+0x6F4A	0x9538	# <CJK>
+0x6F4B	0x953C	# <CJK>
+0x6F4C	0x953E	# <CJK>
+0x6F4D	0x953F	# <CJK>
+0x6F4E	0x9542	# <CJK>
+0x6F4F	0x9535	# <CJK>
+0x6F50	0x9544	# <CJK>
+0x6F51	0x9545	# <CJK>
+0x6F52	0x9546	# <CJK>
+0x6F53	0x9549	# <CJK>
+0x6F54	0x954C	# <CJK>
+0x6F55	0x954E	# <CJK>
+0x6F56	0x954F	# <CJK>
+0x6F57	0x9552	# <CJK>
+0x6F58	0x9553	# <CJK>
+0x6F59	0x9554	# <CJK>
+0x6F5A	0x9556	# <CJK>
+0x6F5B	0x9557	# <CJK>
+0x6F5C	0x9558	# <CJK>
+0x6F5D	0x9559	# <CJK>
+0x6F5E	0x955B	# <CJK>
+0x6F5F	0x955E	# <CJK>
+0x6F60	0x955F	# <CJK>
+0x6F61	0x955D	# <CJK>
+0x6F62	0x9561	# <CJK>
+0x6F63	0x9562	# <CJK>
+0x6F64	0x9564	# <CJK>
+0x6F65	0x9565	# <CJK>
+0x6F66	0x9566	# <CJK>
+0x6F67	0x9567	# <CJK>
+0x6F68	0x9568	# <CJK>
+0x6F69	0x9569	# <CJK>
+0x6F6A	0x956A	# <CJK>
+0x6F6B	0x956B	# <CJK>
+0x6F6C	0x956C	# <CJK>
+0x6F6D	0x956F	# <CJK>
+0x6F6E	0x9571	# <CJK>
+0x6F6F	0x9572	# <CJK>
+0x6F70	0x9573	# <CJK>
+0x6F71	0x953A	# <CJK>
+0x6F72	0x77E7	# <CJK>
+0x6F73	0x77EC	# <CJK>
+0x6F74	0x96C9	# <CJK>
+0x6F75	0x79D5	# <CJK>
+0x6F76	0x79ED	# <CJK>
+0x6F77	0x79E3	# <CJK>
+0x6F78	0x79EB	# <CJK>
+0x6F79	0x7A06	# <CJK>
+0x6F7A	0x5D47	# <CJK>
+0x6F7B	0x7A03	# <CJK>
+0x6F7C	0x7A02	# <CJK>
+0x6F7D	0x7A1E	# <CJK>
+0x6F7E	0x7A14	# <CJK>
+0x7021	0x7A39	# <CJK>
+0x7022	0x7A37	# <CJK>
+0x7023	0x7A51	# <CJK>
+0x7024	0x9ECF	# <CJK>
+0x7025	0x99A5	# <CJK>
+0x7026	0x7A70	# <CJK>
+0x7027	0x7688	# <CJK>
+0x7028	0x768E	# <CJK>
+0x7029	0x7693	# <CJK>
+0x702A	0x7699	# <CJK>
+0x702B	0x76A4	# <CJK>
+0x702C	0x74DE	# <CJK>
+0x702D	0x74E0	# <CJK>
+0x702E	0x752C	# <CJK>
+0x702F	0x9E20	# <CJK>
+0x7030	0x9E22	# <CJK>
+0x7031	0x9E28	# <CJK>
+0x7032	0x9E29	# <CJK>
+0x7033	0x9E2A	# <CJK>
+0x7034	0x9E2B	# <CJK>
+0x7035	0x9E2C	# <CJK>
+0x7036	0x9E32	# <CJK>
+0x7037	0x9E31	# <CJK>
+0x7038	0x9E36	# <CJK>
+0x7039	0x9E38	# <CJK>
+0x703A	0x9E37	# <CJK>
+0x703B	0x9E39	# <CJK>
+0x703C	0x9E3A	# <CJK>
+0x703D	0x9E3E	# <CJK>
+0x703E	0x9E41	# <CJK>
+0x703F	0x9E42	# <CJK>
+0x7040	0x9E44	# <CJK>
+0x7041	0x9E46	# <CJK>
+0x7042	0x9E47	# <CJK>
+0x7043	0x9E48	# <CJK>
+0x7044	0x9E49	# <CJK>
+0x7045	0x9E4B	# <CJK>
+0x7046	0x9E4C	# <CJK>
+0x7047	0x9E4E	# <CJK>
+0x7048	0x9E51	# <CJK>
+0x7049	0x9E55	# <CJK>
+0x704A	0x9E57	# <CJK>
+0x704B	0x9E5A	# <CJK>
+0x704C	0x9E5B	# <CJK>
+0x704D	0x9E5C	# <CJK>
+0x704E	0x9E5E	# <CJK>
+0x704F	0x9E63	# <CJK>
+0x7050	0x9E66	# <CJK>
+0x7051	0x9E67	# <CJK>
+0x7052	0x9E68	# <CJK>
+0x7053	0x9E69	# <CJK>
+0x7054	0x9E6A	# <CJK>
+0x7055	0x9E6B	# <CJK>
+0x7056	0x9E6C	# <CJK>
+0x7057	0x9E71	# <CJK>
+0x7058	0x9E6D	# <CJK>
+0x7059	0x9E73	# <CJK>
+0x705A	0x7592	# <CJK>
+0x705B	0x7594	# <CJK>
+0x705C	0x7596	# <CJK>
+0x705D	0x75A0	# <CJK>
+0x705E	0x759D	# <CJK>
+0x705F	0x75AC	# <CJK>
+0x7060	0x75A3	# <CJK>
+0x7061	0x75B3	# <CJK>
+0x7062	0x75B4	# <CJK>
+0x7063	0x75B8	# <CJK>
+0x7064	0x75C4	# <CJK>
+0x7065	0x75B1	# <CJK>
+0x7066	0x75B0	# <CJK>
+0x7067	0x75C3	# <CJK>
+0x7068	0x75C2	# <CJK>
+0x7069	0x75D6	# <CJK>
+0x706A	0x75CD	# <CJK>
+0x706B	0x75E3	# <CJK>
+0x706C	0x75E8	# <CJK>
+0x706D	0x75E6	# <CJK>
+0x706E	0x75E4	# <CJK>
+0x706F	0x75EB	# <CJK>
+0x7070	0x75E7	# <CJK>
+0x7071	0x7603	# <CJK>
+0x7072	0x75F1	# <CJK>
+0x7073	0x75FC	# <CJK>
+0x7074	0x75FF	# <CJK>
+0x7075	0x7610	# <CJK>
+0x7076	0x7600	# <CJK>
+0x7077	0x7605	# <CJK>
+0x7078	0x760C	# <CJK>
+0x7079	0x7617	# <CJK>
+0x707A	0x760A	# <CJK>
+0x707B	0x7625	# <CJK>
+0x707C	0x7618	# <CJK>
+0x707D	0x7615	# <CJK>
+0x707E	0x7619	# <CJK>
+0x7121	0x761B	# <CJK>
+0x7122	0x763C	# <CJK>
+0x7123	0x7622	# <CJK>
+0x7124	0x7620	# <CJK>
+0x7125	0x7640	# <CJK>
+0x7126	0x762D	# <CJK>
+0x7127	0x7630	# <CJK>
+0x7128	0x763F	# <CJK>
+0x7129	0x7635	# <CJK>
+0x712A	0x7643	# <CJK>
+0x712B	0x763E	# <CJK>
+0x712C	0x7633	# <CJK>
+0x712D	0x764D	# <CJK>
+0x712E	0x765E	# <CJK>
+0x712F	0x7654	# <CJK>
+0x7130	0x765C	# <CJK>
+0x7131	0x7656	# <CJK>
+0x7132	0x766B	# <CJK>
+0x7133	0x766F	# <CJK>
+0x7134	0x7FCA	# <CJK>
+0x7135	0x7AE6	# <CJK>
+0x7136	0x7A78	# <CJK>
+0x7137	0x7A79	# <CJK>
+0x7138	0x7A80	# <CJK>
+0x7139	0x7A86	# <CJK>
+0x713A	0x7A88	# <CJK>
+0x713B	0x7A95	# <CJK>
+0x713C	0x7AA6	# <CJK>
+0x713D	0x7AA0	# <CJK>
+0x713E	0x7AAC	# <CJK>
+0x713F	0x7AA8	# <CJK>
+0x7140	0x7AAD	# <CJK>
+0x7141	0x7AB3	# <CJK>
+0x7142	0x8864	# <CJK>
+0x7143	0x8869	# <CJK>
+0x7144	0x8872	# <CJK>
+0x7145	0x887D	# <CJK>
+0x7146	0x887F	# <CJK>
+0x7147	0x8882	# <CJK>
+0x7148	0x88A2	# <CJK>
+0x7149	0x88C6	# <CJK>
+0x714A	0x88B7	# <CJK>
+0x714B	0x88BC	# <CJK>
+0x714C	0x88C9	# <CJK>
+0x714D	0x88E2	# <CJK>
+0x714E	0x88CE	# <CJK>
+0x714F	0x88E3	# <CJK>
+0x7150	0x88E5	# <CJK>
+0x7151	0x88F1	# <CJK>
+0x7152	0x891A	# <CJK>
+0x7153	0x88FC	# <CJK>
+0x7154	0x88E8	# <CJK>
+0x7155	0x88FE	# <CJK>
+0x7156	0x88F0	# <CJK>
+0x7157	0x8921	# <CJK>
+0x7158	0x8919	# <CJK>
+0x7159	0x8913	# <CJK>
+0x715A	0x891B	# <CJK>
+0x715B	0x890A	# <CJK>
+0x715C	0x8934	# <CJK>
+0x715D	0x892B	# <CJK>
+0x715E	0x8936	# <CJK>
+0x715F	0x8941	# <CJK>
+0x7160	0x8966	# <CJK>
+0x7161	0x897B	# <CJK>
+0x7162	0x758B	# <CJK>
+0x7163	0x80E5	# <CJK>
+0x7164	0x76B2	# <CJK>
+0x7165	0x76B4	# <CJK>
+0x7166	0x77DC	# <CJK>
+0x7167	0x8012	# <CJK>
+0x7168	0x8014	# <CJK>
+0x7169	0x8016	# <CJK>
+0x716A	0x801C	# <CJK>
+0x716B	0x8020	# <CJK>
+0x716C	0x8022	# <CJK>
+0x716D	0x8025	# <CJK>
+0x716E	0x8026	# <CJK>
+0x716F	0x8027	# <CJK>
+0x7170	0x8029	# <CJK>
+0x7171	0x8028	# <CJK>
+0x7172	0x8031	# <CJK>
+0x7173	0x800B	# <CJK>
+0x7174	0x8035	# <CJK>
+0x7175	0x8043	# <CJK>
+0x7176	0x8046	# <CJK>
+0x7177	0x804D	# <CJK>
+0x7178	0x8052	# <CJK>
+0x7179	0x8069	# <CJK>
+0x717A	0x8071	# <CJK>
+0x717B	0x8983	# <CJK>
+0x717C	0x9878	# <CJK>
+0x717D	0x9880	# <CJK>
+0x717E	0x9883	# <CJK>
+0x7221	0x9889	# <CJK>
+0x7222	0x988C	# <CJK>
+0x7223	0x988D	# <CJK>
+0x7224	0x988F	# <CJK>
+0x7225	0x9894	# <CJK>
+0x7226	0x989A	# <CJK>
+0x7227	0x989B	# <CJK>
+0x7228	0x989E	# <CJK>
+0x7229	0x989F	# <CJK>
+0x722A	0x98A1	# <CJK>
+0x722B	0x98A2	# <CJK>
+0x722C	0x98A5	# <CJK>
+0x722D	0x98A6	# <CJK>
+0x722E	0x864D	# <CJK>
+0x722F	0x8654	# <CJK>
+0x7230	0x866C	# <CJK>
+0x7231	0x866E	# <CJK>
+0x7232	0x867F	# <CJK>
+0x7233	0x867A	# <CJK>
+0x7234	0x867C	# <CJK>
+0x7235	0x867B	# <CJK>
+0x7236	0x86A8	# <CJK>
+0x7237	0x868D	# <CJK>
+0x7238	0x868B	# <CJK>
+0x7239	0x86AC	# <CJK>
+0x723A	0x869D	# <CJK>
+0x723B	0x86A7	# <CJK>
+0x723C	0x86A3	# <CJK>
+0x723D	0x86AA	# <CJK>
+0x723E	0x8693	# <CJK>
+0x723F	0x86A9	# <CJK>
+0x7240	0x86B6	# <CJK>
+0x7241	0x86C4	# <CJK>
+0x7242	0x86B5	# <CJK>
+0x7243	0x86CE	# <CJK>
+0x7244	0x86B0	# <CJK>
+0x7245	0x86BA	# <CJK>
+0x7246	0x86B1	# <CJK>
+0x7247	0x86AF	# <CJK>
+0x7248	0x86C9	# <CJK>
+0x7249	0x86CF	# <CJK>
+0x724A	0x86B4	# <CJK>
+0x724B	0x86E9	# <CJK>
+0x724C	0x86F1	# <CJK>
+0x724D	0x86F2	# <CJK>
+0x724E	0x86ED	# <CJK>
+0x724F	0x86F3	# <CJK>
+0x7250	0x86D0	# <CJK>
+0x7251	0x8713	# <CJK>
+0x7252	0x86DE	# <CJK>
+0x7253	0x86F4	# <CJK>
+0x7254	0x86DF	# <CJK>
+0x7255	0x86D8	# <CJK>
+0x7256	0x86D1	# <CJK>
+0x7257	0x8703	# <CJK>
+0x7258	0x8707	# <CJK>
+0x7259	0x86F8	# <CJK>
+0x725A	0x8708	# <CJK>
+0x725B	0x870A	# <CJK>
+0x725C	0x870D	# <CJK>
+0x725D	0x8709	# <CJK>
+0x725E	0x8723	# <CJK>
+0x725F	0x873B	# <CJK>
+0x7260	0x871E	# <CJK>
+0x7261	0x8725	# <CJK>
+0x7262	0x872E	# <CJK>
+0x7263	0x871A	# <CJK>
+0x7264	0x873E	# <CJK>
+0x7265	0x8748	# <CJK>
+0x7266	0x8734	# <CJK>
+0x7267	0x8731	# <CJK>
+0x7268	0x8729	# <CJK>
+0x7269	0x8737	# <CJK>
+0x726A	0x873F	# <CJK>
+0x726B	0x8782	# <CJK>
+0x726C	0x8722	# <CJK>
+0x726D	0x877D	# <CJK>
+0x726E	0x877E	# <CJK>
+0x726F	0x877B	# <CJK>
+0x7270	0x8760	# <CJK>
+0x7271	0x8770	# <CJK>
+0x7272	0x874C	# <CJK>
+0x7273	0x876E	# <CJK>
+0x7274	0x878B	# <CJK>
+0x7275	0x8753	# <CJK>
+0x7276	0x8763	# <CJK>
+0x7277	0x877C	# <CJK>
+0x7278	0x8764	# <CJK>
+0x7279	0x8759	# <CJK>
+0x727A	0x8765	# <CJK>
+0x727B	0x8793	# <CJK>
+0x727C	0x87AF	# <CJK>
+0x727D	0x87A8	# <CJK>
+0x727E	0x87D2	# <CJK>
+0x7321	0x87C6	# <CJK>
+0x7322	0x8788	# <CJK>
+0x7323	0x8785	# <CJK>
+0x7324	0x87AD	# <CJK>
+0x7325	0x8797	# <CJK>
+0x7326	0x8783	# <CJK>
+0x7327	0x87AB	# <CJK>
+0x7328	0x87E5	# <CJK>
+0x7329	0x87AC	# <CJK>
+0x732A	0x87B5	# <CJK>
+0x732B	0x87B3	# <CJK>
+0x732C	0x87CB	# <CJK>
+0x732D	0x87D3	# <CJK>
+0x732E	0x87BD	# <CJK>
+0x732F	0x87D1	# <CJK>
+0x7330	0x87C0	# <CJK>
+0x7331	0x87CA	# <CJK>
+0x7332	0x87DB	# <CJK>
+0x7333	0x87EA	# <CJK>
+0x7334	0x87E0	# <CJK>
+0x7335	0x87EE	# <CJK>
+0x7336	0x8816	# <CJK>
+0x7337	0x8813	# <CJK>
+0x7338	0x87FE	# <CJK>
+0x7339	0x880A	# <CJK>
+0x733A	0x881B	# <CJK>
+0x733B	0x8821	# <CJK>
+0x733C	0x8839	# <CJK>
+0x733D	0x883C	# <CJK>
+0x733E	0x7F36	# <CJK>
+0x733F	0x7F42	# <CJK>
+0x7340	0x7F44	# <CJK>
+0x7341	0x7F45	# <CJK>
+0x7342	0x8210	# <CJK>
+0x7343	0x7AFA	# <CJK>
+0x7344	0x7AFD	# <CJK>
+0x7345	0x7B08	# <CJK>
+0x7346	0x7B03	# <CJK>
+0x7347	0x7B04	# <CJK>
+0x7348	0x7B15	# <CJK>
+0x7349	0x7B0A	# <CJK>
+0x734A	0x7B2B	# <CJK>
+0x734B	0x7B0F	# <CJK>
+0x734C	0x7B47	# <CJK>
+0x734D	0x7B38	# <CJK>
+0x734E	0x7B2A	# <CJK>
+0x734F	0x7B19	# <CJK>
+0x7350	0x7B2E	# <CJK>
+0x7351	0x7B31	# <CJK>
+0x7352	0x7B20	# <CJK>
+0x7353	0x7B25	# <CJK>
+0x7354	0x7B24	# <CJK>
+0x7355	0x7B33	# <CJK>
+0x7356	0x7B3E	# <CJK>
+0x7357	0x7B1E	# <CJK>
+0x7358	0x7B58	# <CJK>
+0x7359	0x7B5A	# <CJK>
+0x735A	0x7B45	# <CJK>
+0x735B	0x7B75	# <CJK>
+0x735C	0x7B4C	# <CJK>
+0x735D	0x7B5D	# <CJK>
+0x735E	0x7B60	# <CJK>
+0x735F	0x7B6E	# <CJK>
+0x7360	0x7B7B	# <CJK>
+0x7361	0x7B62	# <CJK>
+0x7362	0x7B72	# <CJK>
+0x7363	0x7B71	# <CJK>
+0x7364	0x7B90	# <CJK>
+0x7365	0x7BA6	# <CJK>
+0x7366	0x7BA7	# <CJK>
+0x7367	0x7BB8	# <CJK>
+0x7368	0x7BAC	# <CJK>
+0x7369	0x7B9D	# <CJK>
+0x736A	0x7BA8	# <CJK>
+0x736B	0x7B85	# <CJK>
+0x736C	0x7BAA	# <CJK>
+0x736D	0x7B9C	# <CJK>
+0x736E	0x7BA2	# <CJK>
+0x736F	0x7BAB	# <CJK>
+0x7370	0x7BB4	# <CJK>
+0x7371	0x7BD1	# <CJK>
+0x7372	0x7BC1	# <CJK>
+0x7373	0x7BCC	# <CJK>
+0x7374	0x7BDD	# <CJK>
+0x7375	0x7BDA	# <CJK>
+0x7376	0x7BE5	# <CJK>
+0x7377	0x7BE6	# <CJK>
+0x7378	0x7BEA	# <CJK>
+0x7379	0x7C0C	# <CJK>
+0x737A	0x7BFE	# <CJK>
+0x737B	0x7BFC	# <CJK>
+0x737C	0x7C0F	# <CJK>
+0x737D	0x7C16	# <CJK>
+0x737E	0x7C0B	# <CJK>
+0x7421	0x7C1F	# <CJK>
+0x7422	0x7C2A	# <CJK>
+0x7423	0x7C26	# <CJK>
+0x7424	0x7C38	# <CJK>
+0x7425	0x7C41	# <CJK>
+0x7426	0x7C40	# <CJK>
+0x7427	0x81FE	# <CJK>
+0x7428	0x8201	# <CJK>
+0x7429	0x8202	# <CJK>
+0x742A	0x8204	# <CJK>
+0x742B	0x81EC	# <CJK>
+0x742C	0x8844	# <CJK>
+0x742D	0x8221	# <CJK>
+0x742E	0x8222	# <CJK>
+0x742F	0x8223	# <CJK>
+0x7430	0x822D	# <CJK>
+0x7431	0x822F	# <CJK>
+0x7432	0x8228	# <CJK>
+0x7433	0x822B	# <CJK>
+0x7434	0x8238	# <CJK>
+0x7435	0x823B	# <CJK>
+0x7436	0x8233	# <CJK>
+0x7437	0x8234	# <CJK>
+0x7438	0x823E	# <CJK>
+0x7439	0x8244	# <CJK>
+0x743A	0x8249	# <CJK>
+0x743B	0x824B	# <CJK>
+0x743C	0x824F	# <CJK>
+0x743D	0x825A	# <CJK>
+0x743E	0x825F	# <CJK>
+0x743F	0x8268	# <CJK>
+0x7440	0x887E	# <CJK>
+0x7441	0x8885	# <CJK>
+0x7442	0x8888	# <CJK>
+0x7443	0x88D8	# <CJK>
+0x7444	0x88DF	# <CJK>
+0x7445	0x895E	# <CJK>
+0x7446	0x7F9D	# <CJK>
+0x7447	0x7F9F	# <CJK>
+0x7448	0x7FA7	# <CJK>
+0x7449	0x7FAF	# <CJK>
+0x744A	0x7FB0	# <CJK>
+0x744B	0x7FB2	# <CJK>
+0x744C	0x7C7C	# <CJK>
+0x744D	0x6549	# <CJK>
+0x744E	0x7C91	# <CJK>
+0x744F	0x7C9D	# <CJK>
+0x7450	0x7C9C	# <CJK>
+0x7451	0x7C9E	# <CJK>
+0x7452	0x7CA2	# <CJK>
+0x7453	0x7CB2	# <CJK>
+0x7454	0x7CBC	# <CJK>
+0x7455	0x7CBD	# <CJK>
+0x7456	0x7CC1	# <CJK>
+0x7457	0x7CC7	# <CJK>
+0x7458	0x7CCC	# <CJK>
+0x7459	0x7CCD	# <CJK>
+0x745A	0x7CC8	# <CJK>
+0x745B	0x7CC5	# <CJK>
+0x745C	0x7CD7	# <CJK>
+0x745D	0x7CE8	# <CJK>
+0x745E	0x826E	# <CJK>
+0x745F	0x66A8	# <CJK>
+0x7460	0x7FBF	# <CJK>
+0x7461	0x7FCE	# <CJK>
+0x7462	0x7FD5	# <CJK>
+0x7463	0x7FE5	# <CJK>
+0x7464	0x7FE1	# <CJK>
+0x7465	0x7FE6	# <CJK>
+0x7466	0x7FE9	# <CJK>
+0x7467	0x7FEE	# <CJK>
+0x7468	0x7FF3	# <CJK>
+0x7469	0x7CF8	# <CJK>
+0x746A	0x7D77	# <CJK>
+0x746B	0x7DA6	# <CJK>
+0x746C	0x7DAE	# <CJK>
+0x746D	0x7E47	# <CJK>
+0x746E	0x7E9B	# <CJK>
+0x746F	0x9EB8	# <CJK>
+0x7470	0x9EB4	# <CJK>
+0x7471	0x8D73	# <CJK>
+0x7472	0x8D84	# <CJK>
+0x7473	0x8D94	# <CJK>
+0x7474	0x8D91	# <CJK>
+0x7475	0x8DB1	# <CJK>
+0x7476	0x8D67	# <CJK>
+0x7477	0x8D6D	# <CJK>
+0x7478	0x8C47	# <CJK>
+0x7479	0x8C49	# <CJK>
+0x747A	0x914A	# <CJK>
+0x747B	0x9150	# <CJK>
+0x747C	0x914E	# <CJK>
+0x747D	0x914F	# <CJK>
+0x747E	0x9164	# <CJK>
+0x7521	0x9162	# <CJK>
+0x7522	0x9161	# <CJK>
+0x7523	0x9170	# <CJK>
+0x7524	0x9169	# <CJK>
+0x7525	0x916F	# <CJK>
+0x7526	0x917D	# <CJK>
+0x7527	0x917E	# <CJK>
+0x7528	0x9172	# <CJK>
+0x7529	0x9174	# <CJK>
+0x752A	0x9179	# <CJK>
+0x752B	0x918C	# <CJK>
+0x752C	0x9185	# <CJK>
+0x752D	0x9190	# <CJK>
+0x752E	0x918D	# <CJK>
+0x752F	0x9191	# <CJK>
+0x7530	0x91A2	# <CJK>
+0x7531	0x91A3	# <CJK>
+0x7532	0x91AA	# <CJK>
+0x7533	0x91AD	# <CJK>
+0x7534	0x91AE	# <CJK>
+0x7535	0x91AF	# <CJK>
+0x7536	0x91B5	# <CJK>
+0x7537	0x91B4	# <CJK>
+0x7538	0x91BA	# <CJK>
+0x7539	0x8C55	# <CJK>
+0x753A	0x9E7E	# <CJK>
+0x753B	0x8DB8	# <CJK>
+0x753C	0x8DEB	# <CJK>
+0x753D	0x8E05	# <CJK>
+0x753E	0x8E59	# <CJK>
+0x753F	0x8E69	# <CJK>
+0x7540	0x8DB5	# <CJK>
+0x7541	0x8DBF	# <CJK>
+0x7542	0x8DBC	# <CJK>
+0x7543	0x8DBA	# <CJK>
+0x7544	0x8DC4	# <CJK>
+0x7545	0x8DD6	# <CJK>
+0x7546	0x8DD7	# <CJK>
+0x7547	0x8DDA	# <CJK>
+0x7548	0x8DDE	# <CJK>
+0x7549	0x8DCE	# <CJK>
+0x754A	0x8DCF	# <CJK>
+0x754B	0x8DDB	# <CJK>
+0x754C	0x8DC6	# <CJK>
+0x754D	0x8DEC	# <CJK>
+0x754E	0x8DF7	# <CJK>
+0x754F	0x8DF8	# <CJK>
+0x7550	0x8DE3	# <CJK>
+0x7551	0x8DF9	# <CJK>
+0x7552	0x8DFB	# <CJK>
+0x7553	0x8DE4	# <CJK>
+0x7554	0x8E09	# <CJK>
+0x7555	0x8DFD	# <CJK>
+0x7556	0x8E14	# <CJK>
+0x7557	0x8E1D	# <CJK>
+0x7558	0x8E1F	# <CJK>
+0x7559	0x8E2C	# <CJK>
+0x755A	0x8E2E	# <CJK>
+0x755B	0x8E23	# <CJK>
+0x755C	0x8E2F	# <CJK>
+0x755D	0x8E3A	# <CJK>
+0x755E	0x8E40	# <CJK>
+0x755F	0x8E39	# <CJK>
+0x7560	0x8E35	# <CJK>
+0x7561	0x8E3D	# <CJK>
+0x7562	0x8E31	# <CJK>
+0x7563	0x8E49	# <CJK>
+0x7564	0x8E41	# <CJK>
+0x7565	0x8E42	# <CJK>
+0x7566	0x8E51	# <CJK>
+0x7567	0x8E52	# <CJK>
+0x7568	0x8E4A	# <CJK>
+0x7569	0x8E70	# <CJK>
+0x756A	0x8E76	# <CJK>
+0x756B	0x8E7C	# <CJK>
+0x756C	0x8E6F	# <CJK>
+0x756D	0x8E74	# <CJK>
+0x756E	0x8E85	# <CJK>
+0x756F	0x8E8F	# <CJK>
+0x7570	0x8E94	# <CJK>
+0x7571	0x8E90	# <CJK>
+0x7572	0x8E9C	# <CJK>
+0x7573	0x8E9E	# <CJK>
+0x7574	0x8C78	# <CJK>
+0x7575	0x8C82	# <CJK>
+0x7576	0x8C8A	# <CJK>
+0x7577	0x8C85	# <CJK>
+0x7578	0x8C98	# <CJK>
+0x7579	0x8C94	# <CJK>
+0x757A	0x659B	# <CJK>
+0x757B	0x89D6	# <CJK>
+0x757C	0x89DE	# <CJK>
+0x757D	0x89DA	# <CJK>
+0x757E	0x89DC	# <CJK>
+0x7621	0x89E5	# <CJK>
+0x7622	0x89EB	# <CJK>
+0x7623	0x89EF	# <CJK>
+0x7624	0x8A3E	# <CJK>
+0x7625	0x8B26	# <CJK>
+0x7626	0x9753	# <CJK>
+0x7627	0x96E9	# <CJK>
+0x7628	0x96F3	# <CJK>
+0x7629	0x96EF	# <CJK>
+0x762A	0x9706	# <CJK>
+0x762B	0x9701	# <CJK>
+0x762C	0x9708	# <CJK>
+0x762D	0x970F	# <CJK>
+0x762E	0x970E	# <CJK>
+0x762F	0x972A	# <CJK>
+0x7630	0x972D	# <CJK>
+0x7631	0x9730	# <CJK>
+0x7632	0x973E	# <CJK>
+0x7633	0x9F80	# <CJK>
+0x7634	0x9F83	# <CJK>
+0x7635	0x9F85	# <CJK>
+0x7636	0x9F86	# <CJK>
+0x7637	0x9F87	# <CJK>
+0x7638	0x9F88	# <CJK>
+0x7639	0x9F89	# <CJK>
+0x763A	0x9F8A	# <CJK>
+0x763B	0x9F8C	# <CJK>
+0x763C	0x9EFE	# <CJK>
+0x763D	0x9F0B	# <CJK>
+0x763E	0x9F0D	# <CJK>
+0x763F	0x96B9	# <CJK>
+0x7640	0x96BC	# <CJK>
+0x7641	0x96BD	# <CJK>
+0x7642	0x96CE	# <CJK>
+0x7643	0x96D2	# <CJK>
+0x7644	0x77BF	# <CJK>
+0x7645	0x96E0	# <CJK>
+0x7646	0x928E	# <CJK>
+0x7647	0x92AE	# <CJK>
+0x7648	0x92C8	# <CJK>
+0x7649	0x933E	# <CJK>
+0x764A	0x936A	# <CJK>
+0x764B	0x93CA	# <CJK>
+0x764C	0x938F	# <CJK>
+0x764D	0x943E	# <CJK>
+0x764E	0x946B	# <CJK>
+0x764F	0x9C7F	# <CJK>
+0x7650	0x9C82	# <CJK>
+0x7651	0x9C85	# <CJK>
+0x7652	0x9C86	# <CJK>
+0x7653	0x9C87	# <CJK>
+0x7654	0x9C88	# <CJK>
+0x7655	0x7A23	# <CJK>
+0x7656	0x9C8B	# <CJK>
+0x7657	0x9C8E	# <CJK>
+0x7658	0x9C90	# <CJK>
+0x7659	0x9C91	# <CJK>
+0x765A	0x9C92	# <CJK>
+0x765B	0x9C94	# <CJK>
+0x765C	0x9C95	# <CJK>
+0x765D	0x9C9A	# <CJK>
+0x765E	0x9C9B	# <CJK>
+0x765F	0x9C9E	# <CJK>
+0x7660	0x9C9F	# <CJK>
+0x7661	0x9CA0	# <CJK>
+0x7662	0x9CA1	# <CJK>
+0x7663	0x9CA2	# <CJK>
+0x7664	0x9CA3	# <CJK>
+0x7665	0x9CA5	# <CJK>
+0x7666	0x9CA6	# <CJK>
+0x7667	0x9CA7	# <CJK>
+0x7668	0x9CA8	# <CJK>
+0x7669	0x9CA9	# <CJK>
+0x766A	0x9CAB	# <CJK>
+0x766B	0x9CAD	# <CJK>
+0x766C	0x9CAE	# <CJK>
+0x766D	0x9CB0	# <CJK>
+0x766E	0x9CB1	# <CJK>
+0x766F	0x9CB2	# <CJK>
+0x7670	0x9CB3	# <CJK>
+0x7671	0x9CB4	# <CJK>
+0x7672	0x9CB5	# <CJK>
+0x7673	0x9CB6	# <CJK>
+0x7674	0x9CB7	# <CJK>
+0x7675	0x9CBA	# <CJK>
+0x7676	0x9CBB	# <CJK>
+0x7677	0x9CBC	# <CJK>
+0x7678	0x9CBD	# <CJK>
+0x7679	0x9CC4	# <CJK>
+0x767A	0x9CC5	# <CJK>
+0x767B	0x9CC6	# <CJK>
+0x767C	0x9CC7	# <CJK>
+0x767D	0x9CCA	# <CJK>
+0x767E	0x9CCB	# <CJK>
+0x7721	0x9CCC	# <CJK>
+0x7722	0x9CCD	# <CJK>
+0x7723	0x9CCE	# <CJK>
+0x7724	0x9CCF	# <CJK>
+0x7725	0x9CD0	# <CJK>
+0x7726	0x9CD3	# <CJK>
+0x7727	0x9CD4	# <CJK>
+0x7728	0x9CD5	# <CJK>
+0x7729	0x9CD7	# <CJK>
+0x772A	0x9CD8	# <CJK>
+0x772B	0x9CD9	# <CJK>
+0x772C	0x9CDC	# <CJK>
+0x772D	0x9CDD	# <CJK>
+0x772E	0x9CDF	# <CJK>
+0x772F	0x9CE2	# <CJK>
+0x7730	0x977C	# <CJK>
+0x7731	0x9785	# <CJK>
+0x7732	0x9791	# <CJK>
+0x7733	0x9792	# <CJK>
+0x7734	0x9794	# <CJK>
+0x7735	0x97AF	# <CJK>
+0x7736	0x97AB	# <CJK>
+0x7737	0x97A3	# <CJK>
+0x7738	0x97B2	# <CJK>
+0x7739	0x97B4	# <CJK>
+0x773A	0x9AB1	# <CJK>
+0x773B	0x9AB0	# <CJK>
+0x773C	0x9AB7	# <CJK>
+0x773D	0x9E58	# <CJK>
+0x773E	0x9AB6	# <CJK>
+0x773F	0x9ABA	# <CJK>
+0x7740	0x9ABC	# <CJK>
+0x7741	0x9AC1	# <CJK>
+0x7742	0x9AC0	# <CJK>
+0x7743	0x9AC5	# <CJK>
+0x7744	0x9AC2	# <CJK>
+0x7745	0x9ACB	# <CJK>
+0x7746	0x9ACC	# <CJK>
+0x7747	0x9AD1	# <CJK>
+0x7748	0x9B45	# <CJK>
+0x7749	0x9B43	# <CJK>
+0x774A	0x9B47	# <CJK>
+0x774B	0x9B49	# <CJK>
+0x774C	0x9B48	# <CJK>
+0x774D	0x9B4D	# <CJK>
+0x774E	0x9B51	# <CJK>
+0x774F	0x98E8	# <CJK>
+0x7750	0x990D	# <CJK>
+0x7751	0x992E	# <CJK>
+0x7752	0x9955	# <CJK>
+0x7753	0x9954	# <CJK>
+0x7754	0x9ADF	# <CJK>
+0x7755	0x9AE1	# <CJK>
+0x7756	0x9AE6	# <CJK>
+0x7757	0x9AEF	# <CJK>
+0x7758	0x9AEB	# <CJK>
+0x7759	0x9AFB	# <CJK>
+0x775A	0x9AED	# <CJK>
+0x775B	0x9AF9	# <CJK>
+0x775C	0x9B08	# <CJK>
+0x775D	0x9B0F	# <CJK>
+0x775E	0x9B13	# <CJK>
+0x775F	0x9B1F	# <CJK>
+0x7760	0x9B23	# <CJK>
+0x7761	0x9EBD	# <CJK>
+0x7762	0x9EBE	# <CJK>
+0x7763	0x7E3B	# <CJK>
+0x7764	0x9E82	# <CJK>
+0x7765	0x9E87	# <CJK>
+0x7766	0x9E88	# <CJK>
+0x7767	0x9E8B	# <CJK>
+0x7768	0x9E92	# <CJK>
+0x7769	0x93D6	# <CJK>
+0x776A	0x9E9D	# <CJK>
+0x776B	0x9E9F	# <CJK>
+0x776C	0x9EDB	# <CJK>
+0x776D	0x9EDC	# <CJK>
+0x776E	0x9EDD	# <CJK>
+0x776F	0x9EE0	# <CJK>
+0x7770	0x9EDF	# <CJK>
+0x7771	0x9EE2	# <CJK>
+0x7772	0x9EE9	# <CJK>
+0x7773	0x9EE7	# <CJK>
+0x7774	0x9EE5	# <CJK>
+0x7775	0x9EEA	# <CJK>
+0x7776	0x9EEF	# <CJK>
+0x7777	0x9F22	# <CJK>
+0x7778	0x9F2C	# <CJK>
+0x7779	0x9F2F	# <CJK>
+0x777A	0x9F39	# <CJK>
+0x777B	0x9F37	# <CJK>
+0x777C	0x9F3D	# <CJK>
+0x777D	0x9F3E	# <CJK>
+0x777E	0x9F44	# <CJK>
diff --git a/Tools/unicode/python-mappings/diff/jisx0213-2000-std.txt.diff b/Tools/unicode/python-mappings/diff/jisx0213-2000-std.txt.diff
new file mode 100644
index 0000000..e4171d5
--- /dev/null
+++ b/Tools/unicode/python-mappings/diff/jisx0213-2000-std.txt.diff
@@ -0,0 +1,271 @@
+--- jisx0213-2000-std.txt.orig	Tue Apr 16 23:32:38 2002
++++ jisx0213-2000-std.txt	Wed Jun 16 14:49:05 2004
+@@ -23,21 +23,21 @@
+ 3-2121	U+3000	# IDEOGRAPHIC SPACE
+ 3-2122	U+3001	# IDEOGRAPHIC COMMA
+ 3-2123	U+3002	# IDEOGRAPHIC FULL STOP
+-3-2124	U+002C	# COMMA	Fullwidth: U+FF0C
+-3-2125	U+002E	# FULL STOP	Fullwidth: U+FF0E
++3-2124	U+FF0C	# COMMA	Fullwidth: U+FF0C
++3-2125	U+FF0E	# FULL STOP	Fullwidth: U+FF0E
+ 3-2126	U+30FB	# KATAKANA MIDDLE DOT
+-3-2127	U+003A	# COLON	Fullwidth: U+FF1A
+-3-2128	U+003B	# SEMICOLON	Fullwidth: U+FF1B
+-3-2129	U+003F	# QUESTION MARK	Fullwidth: U+FF1F
+-3-212A	U+0021	# EXCLAMATION MARK	Fullwidth: U+FF01
++3-2127	U+FF1A	# COLON	Fullwidth: U+FF1A
++3-2128	U+FF1B	# SEMICOLON	Fullwidth: U+FF1B
++3-2129	U+FF1F	# QUESTION MARK	Fullwidth: U+FF1F
++3-212A	U+FF01	# EXCLAMATION MARK	Fullwidth: U+FF01
+ 3-212B	U+309B	# KATAKANA-HIRAGANA VOICED SOUND MARK
+ 3-212C	U+309C	# KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ 3-212D	U+00B4	# ACUTE ACCENT
+-3-212E	U+0060	# GRAVE ACCENT	Fullwidth: U+FF40
++3-212E	U+FF40	# GRAVE ACCENT	Fullwidth: U+FF40
+ 3-212F	U+00A8	# DIAERESIS
+-3-2130	U+005E	# CIRCUMFLEX ACCENT	Fullwidth: U+FF3E
+-3-2131	U+203E	# OVERLINE	Windows: U+FFE3
+-3-2132	U+005F	# LOW LINE	Fullwidth: U+FF3F
++3-2130	U+FF3E	# CIRCUMFLEX ACCENT	Fullwidth: U+FF3E
++3-2131	U+FFE3	# OVERLINE	Windows: U+FFE3
++3-2132	U+FF3F	# LOW LINE	Fullwidth: U+FF3F
+ 3-2133	U+30FD	# KATAKANA ITERATION MARK
+ 3-2134	U+30FE	# KATAKANA VOICED ITERATION MARK
+ 3-2135	U+309D	# HIRAGANA ITERATION MARK
+@@ -48,27 +48,27 @@
+ 3-213A	U+3006	# IDEOGRAPHIC CLOSING MARK
+ 3-213B	U+3007	# IDEOGRAPHIC NUMBER ZERO
+ 3-213C	U+30FC	# KATAKANA-HIRAGANA PROLONGED SOUND MARK
+-3-213D	U+2014	# EM DASH	Windows: U+2015
++3-213D	U+2015	# EM DASH	Windows: U+2015
+ 3-213E	U+2010	# HYPHEN
+-3-213F	U+002F	# SOLIDUS	Fullwidth: U+FF0F
++3-213F	U+FF0F	# SOLIDUS	Fullwidth: U+FF0F
+ 3-2140	U+005C	# REVERSE SOLIDUS	Fullwidth: U+FF3C
+ 3-2141	U+301C	# WAVE DASH	Windows: U+FF5E
+ 3-2142	U+2016	# DOUBLE VERTICAL LINE	Windows: U+2225
+-3-2143	U+007C	# VERTICAL LINE	Fullwidth: U+FF5C
++3-2143	U+FF5C	# VERTICAL LINE	Fullwidth: U+FF5C
+ 3-2144	U+2026	# HORIZONTAL ELLIPSIS
+ 3-2145	U+2025	# TWO DOT LEADER
+ 3-2146	U+2018	# LEFT SINGLE QUOTATION MARK
+ 3-2147	U+2019	# RIGHT SINGLE QUOTATION MARK
+ 3-2148	U+201C	# LEFT DOUBLE QUOTATION MARK
+ 3-2149	U+201D	# RIGHT DOUBLE QUOTATION MARK
+-3-214A	U+0028	# LEFT PARENTHESIS	Fullwidth: U+FF08
+-3-214B	U+0029	# RIGHT PARENTHESIS	Fullwidth: U+FF09
++3-214A	U+FF08	# LEFT PARENTHESIS	Fullwidth: U+FF08
++3-214B	U+FF09	# RIGHT PARENTHESIS	Fullwidth: U+FF09
+ 3-214C	U+3014	# LEFT TORTOISE SHELL BRACKET
+ 3-214D	U+3015	# RIGHT TORTOISE SHELL BRACKET
+-3-214E	U+005B	# LEFT SQUARE BRACKET	Fullwidth: U+FF3B
+-3-214F	U+005D	# RIGHT SQUARE BRACKET	Fullwidth: U+FF3D
+-3-2150	U+007B	# LEFT CURLY BRACKET	Fullwidth: U+FF5B
+-3-2151	U+007D	# RIGHT CURLY BRACKET	Fullwidth: U+FF5D
++3-214E	U+FF3B	# LEFT SQUARE BRACKET	Fullwidth: U+FF3B
++3-214F	U+FF3D	# RIGHT SQUARE BRACKET	Fullwidth: U+FF3D
++3-2150	U+FF5B	# LEFT CURLY BRACKET	Fullwidth: U+FF5B
++3-2151	U+FF5D	# RIGHT CURLY BRACKET	Fullwidth: U+FF5D
+ 3-2152	U+3008	# LEFT ANGLE BRACKET
+ 3-2153	U+3009	# RIGHT ANGLE BRACKET
+ 3-2154	U+300A	# LEFT DOUBLE ANGLE BRACKET
+@@ -79,15 +79,15 @@
+ 3-2159	U+300F	# RIGHT WHITE CORNER BRACKET
+ 3-215A	U+3010	# LEFT BLACK LENTICULAR BRACKET
+ 3-215B	U+3011	# RIGHT BLACK LENTICULAR BRACKET
+-3-215C	U+002B	# PLUS SIGN	Fullwidth: U+FF0B
++3-215C	U+FF0B	# PLUS SIGN	Fullwidth: U+FF0B
+ 3-215D	U+2212	# MINUS SIGN	Windows: U+FF0D
+ 3-215E	U+00B1	# PLUS-MINUS SIGN
+ 3-215F	U+00D7	# MULTIPLICATION SIGN
+ 3-2160	U+00F7	# DIVISION SIGN
+-3-2161	U+003D	# EQUALS SIGN	Fullwidth: U+FF1D
++3-2161	U+FF1D	# EQUALS SIGN	Fullwidth: U+FF1D
+ 3-2162	U+2260	# NOT EQUAL TO
+-3-2163	U+003C	# LESS-THAN SIGN	Fullwidth: U+FF1C
+-3-2164	U+003E	# GREATER-THAN SIGN	Fullwidth: U+FF1E
++3-2163	U+FF1C	# LESS-THAN SIGN	Fullwidth: U+FF1C
++3-2164	U+FF1E	# GREATER-THAN SIGN	Fullwidth: U+FF1E
+ 3-2165	U+2266	# LESS-THAN OVER EQUAL TO
+ 3-2166	U+2267	# GREATER-THAN OVER EQUAL TO
+ 3-2167	U+221E	# INFINITY
+@@ -98,15 +98,15 @@
+ 3-216C	U+2032	# PRIME
+ 3-216D	U+2033	# DOUBLE PRIME
+ 3-216E	U+2103	# DEGREE CELSIUS
+-3-216F	U+00A5	# YEN SIGN	Windows: U+FFE5
+-3-2170	U+0024	# DOLLAR SIGN	Fullwidth: U+FF04
++3-216F	U+FFE5	# YEN SIGN	Windows: U+FFE5
++3-2170	U+FF04	# DOLLAR SIGN	Fullwidth: U+FF04
+ 3-2171	U+00A2	# CENT SIGN	Windows: U+FFE0
+ 3-2172	U+00A3	# POUND SIGN	Windows: U+FFE1
+-3-2173	U+0025	# PERCENT SIGN	Fullwidth: U+FF05
+-3-2174	U+0023	# NUMBER SIGN	Fullwidth: U+FF03
+-3-2175	U+0026	# AMPERSAND	Fullwidth: U+FF06
+-3-2176	U+002A	# ASTERISK	Fullwidth: U+FF0A
+-3-2177	U+0040	# COMMERCIAL AT	Fullwidth: U+FF20
++3-2173	U+FF05	# PERCENT SIGN	Fullwidth: U+FF05
++3-2174	U+FF03	# NUMBER SIGN	Fullwidth: U+FF03
++3-2175	U+FF06	# AMPERSAND	Fullwidth: U+FF06
++3-2176	U+FF0A	# ASTERISK	Fullwidth: U+FF0A
++3-2177	U+FF20	# COMMERCIAL AT	Fullwidth: U+FF20
+ 3-2178	U+00A7	# SECTION SIGN
+ 3-2179	U+2606	# WHITE STAR
+ 3-217A	U+2605	# BLACK STAR
+@@ -128,9 +128,9 @@
+ 3-222C	U+2191	# UPWARDS ARROW
+ 3-222D	U+2193	# DOWNWARDS ARROW
+ 3-222E	U+3013	# GETA MARK
+-3-222F	U+0027	# APOSTROPHE	Fullwidth: U+FF07
+-3-2230	U+0022	# QUOTATION MARK	[2000]	Fullwidth: U+FF02
+-3-2231	U+002D	# HYPHEN-MINUS	[2000]	Fullwidth: U+FF0D
++3-222F	U+FF07	# APOSTROPHE	Fullwidth: U+FF07
++3-2230	U+FF02	# QUOTATION MARK	[2000]	Fullwidth: U+FF02
++3-2231	U+FF0D	# HYPHEN-MINUS	[2000]	Fullwidth: U+FF0D
+ 3-2232	U+007E	# TILDE	[2000]	Fullwidth: U+FF5E
+ 3-2233	U+3033	# VERTICAL KANA REPEAT MARK UPPER HALF	[2000]
+ 3-2234	U+3034	# VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF	[2000]
+@@ -223,16 +223,16 @@
+ 3-232D	U+21E9	# DOWNWARDS WHITE ARROW	[2000]
+ 3-232E	U+2934	# ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS	[2000]	[Unicode3.2]
+ 3-232F	U+2935	# ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS	[2000]	[Unicode3.2]
+-3-2330	U+0030	# DIGIT ZERO	Fullwidth: U+FF10
+-3-2331	U+0031	# DIGIT ONE	Fullwidth: U+FF11
+-3-2332	U+0032	# DIGIT TWO	Fullwidth: U+FF12
+-3-2333	U+0033	# DIGIT THREE	Fullwidth: U+FF13
+-3-2334	U+0034	# DIGIT FOUR	Fullwidth: U+FF14
+-3-2335	U+0035	# DIGIT FIVE	Fullwidth: U+FF15
+-3-2336	U+0036	# DIGIT SIX	Fullwidth: U+FF16
+-3-2337	U+0037	# DIGIT SEVEN	Fullwidth: U+FF17
+-3-2338	U+0038	# DIGIT EIGHT	Fullwidth: U+FF18
+-3-2339	U+0039	# DIGIT NINE	Fullwidth: U+FF19
++3-2330	U+FF10	# DIGIT ZERO	Fullwidth: U+FF10
++3-2331	U+FF11	# DIGIT ONE	Fullwidth: U+FF11
++3-2332	U+FF12	# DIGIT TWO	Fullwidth: U+FF12
++3-2333	U+FF13	# DIGIT THREE	Fullwidth: U+FF13
++3-2334	U+FF14	# DIGIT FOUR	Fullwidth: U+FF14
++3-2335	U+FF15	# DIGIT FIVE	Fullwidth: U+FF15
++3-2336	U+FF16	# DIGIT SIX	Fullwidth: U+FF16
++3-2337	U+FF17	# DIGIT SEVEN	Fullwidth: U+FF17
++3-2338	U+FF18	# DIGIT EIGHT	Fullwidth: U+FF18
++3-2339	U+FF19	# DIGIT NINE	Fullwidth: U+FF19
+ 3-233A	U+29BF	# CIRCLED BULLET	[2000]	[Unicode3.2]
+ 3-233B	U+25C9	# FISHEYE	[2000]
+ 3-233C	U+303D	# PART ALTERNATION MARK	[2000]	[Unicode3.2]
+@@ -240,64 +240,64 @@
+ 3-233E	U+FE45	# SESAME DOT	[2000]	[Unicode3.2]
+ 3-233F	U+25E6	# WHITE BULLET	[2000]
+ 3-2340	U+2022	# BULLET	[2000]
+-3-2341	U+0041	# LATIN CAPITAL LETTER A	Fullwidth: U+FF21
+-3-2342	U+0042	# LATIN CAPITAL LETTER B	Fullwidth: U+FF22
+-3-2343	U+0043	# LATIN CAPITAL LETTER C	Fullwidth: U+FF23
+-3-2344	U+0044	# LATIN CAPITAL LETTER D	Fullwidth: U+FF24
+-3-2345	U+0045	# LATIN CAPITAL LETTER E	Fullwidth: U+FF25
+-3-2346	U+0046	# LATIN CAPITAL LETTER F	Fullwidth: U+FF26
+-3-2347	U+0047	# LATIN CAPITAL LETTER G	Fullwidth: U+FF27
+-3-2348	U+0048	# LATIN CAPITAL LETTER H	Fullwidth: U+FF28
+-3-2349	U+0049	# LATIN CAPITAL LETTER I	Fullwidth: U+FF29
+-3-234A	U+004A	# LATIN CAPITAL LETTER J	Fullwidth: U+FF2A
+-3-234B	U+004B	# LATIN CAPITAL LETTER K	Fullwidth: U+FF2B
+-3-234C	U+004C	# LATIN CAPITAL LETTER L	Fullwidth: U+FF2C
+-3-234D	U+004D	# LATIN CAPITAL LETTER M	Fullwidth: U+FF2D
+-3-234E	U+004E	# LATIN CAPITAL LETTER N	Fullwidth: U+FF2E
+-3-234F	U+004F	# LATIN CAPITAL LETTER O	Fullwidth: U+FF2F
+-3-2350	U+0050	# LATIN CAPITAL LETTER P	Fullwidth: U+FF30
+-3-2351	U+0051	# LATIN CAPITAL LETTER Q	Fullwidth: U+FF31
+-3-2352	U+0052	# LATIN CAPITAL LETTER R	Fullwidth: U+FF32
+-3-2353	U+0053	# LATIN CAPITAL LETTER S	Fullwidth: U+FF33
+-3-2354	U+0054	# LATIN CAPITAL LETTER T	Fullwidth: U+FF34
+-3-2355	U+0055	# LATIN CAPITAL LETTER U	Fullwidth: U+FF35
+-3-2356	U+0056	# LATIN CAPITAL LETTER V	Fullwidth: U+FF36
+-3-2357	U+0057	# LATIN CAPITAL LETTER W	Fullwidth: U+FF37
+-3-2358	U+0058	# LATIN CAPITAL LETTER X	Fullwidth: U+FF38
+-3-2359	U+0059	# LATIN CAPITAL LETTER Y	Fullwidth: U+FF39
+-3-235A	U+005A	# LATIN CAPITAL LETTER Z	Fullwidth: U+FF3A
++3-2341	U+FF21	# LATIN CAPITAL LETTER A	Fullwidth: U+FF21
++3-2342	U+FF22	# LATIN CAPITAL LETTER B	Fullwidth: U+FF22
++3-2343	U+FF23	# LATIN CAPITAL LETTER C	Fullwidth: U+FF23
++3-2344	U+FF24	# LATIN CAPITAL LETTER D	Fullwidth: U+FF24
++3-2345	U+FF25	# LATIN CAPITAL LETTER E	Fullwidth: U+FF25
++3-2346	U+FF26	# LATIN CAPITAL LETTER F	Fullwidth: U+FF26
++3-2347	U+FF27	# LATIN CAPITAL LETTER G	Fullwidth: U+FF27
++3-2348	U+FF28	# LATIN CAPITAL LETTER H	Fullwidth: U+FF28
++3-2349	U+FF29	# LATIN CAPITAL LETTER I	Fullwidth: U+FF29
++3-234A	U+FF2A	# LATIN CAPITAL LETTER J	Fullwidth: U+FF2A
++3-234B	U+FF2B	# LATIN CAPITAL LETTER K	Fullwidth: U+FF2B
++3-234C	U+FF2C	# LATIN CAPITAL LETTER L	Fullwidth: U+FF2C
++3-234D	U+FF2D	# LATIN CAPITAL LETTER M	Fullwidth: U+FF2D
++3-234E	U+FF2E	# LATIN CAPITAL LETTER N	Fullwidth: U+FF2E
++3-234F	U+FF2F	# LATIN CAPITAL LETTER O	Fullwidth: U+FF2F
++3-2350	U+FF30	# LATIN CAPITAL LETTER P	Fullwidth: U+FF30
++3-2351	U+FF31	# LATIN CAPITAL LETTER Q	Fullwidth: U+FF31
++3-2352	U+FF32	# LATIN CAPITAL LETTER R	Fullwidth: U+FF32
++3-2353	U+FF33	# LATIN CAPITAL LETTER S	Fullwidth: U+FF33
++3-2354	U+FF34	# LATIN CAPITAL LETTER T	Fullwidth: U+FF34
++3-2355	U+FF35	# LATIN CAPITAL LETTER U	Fullwidth: U+FF35
++3-2356	U+FF36	# LATIN CAPITAL LETTER V	Fullwidth: U+FF36
++3-2357	U+FF37	# LATIN CAPITAL LETTER W	Fullwidth: U+FF37
++3-2358	U+FF38	# LATIN CAPITAL LETTER X	Fullwidth: U+FF38
++3-2359	U+FF39	# LATIN CAPITAL LETTER Y	Fullwidth: U+FF39
++3-235A	U+FF3A	# LATIN CAPITAL LETTER Z	Fullwidth: U+FF3A
+ 3-235B	U+2213	# MINUS-OR-PLUS SIGN	[2000]
+ 3-235C	U+2135	# ALEF SYMBOL	[2000]
+ 3-235D	U+210F	# PLANCK CONSTANT OVER TWO PI	[2000]
+ 3-235E	U+33CB	# SQUARE HP	[2000]
+ 3-235F	U+2113	# SCRIPT SMALL L	[2000]
+ 3-2360	U+2127	# INVERTED OHM SIGN	[2000]
+-3-2361	U+0061	# LATIN SMALL LETTER A	Fullwidth: U+FF41
+-3-2362	U+0062	# LATIN SMALL LETTER B	Fullwidth: U+FF42
+-3-2363	U+0063	# LATIN SMALL LETTER C	Fullwidth: U+FF43
+-3-2364	U+0064	# LATIN SMALL LETTER D	Fullwidth: U+FF44
+-3-2365	U+0065	# LATIN SMALL LETTER E	Fullwidth: U+FF45
+-3-2366	U+0066	# LATIN SMALL LETTER F	Fullwidth: U+FF46
+-3-2367	U+0067	# LATIN SMALL LETTER G	Fullwidth: U+FF47
+-3-2368	U+0068	# LATIN SMALL LETTER H	Fullwidth: U+FF48
+-3-2369	U+0069	# LATIN SMALL LETTER I	Fullwidth: U+FF49
+-3-236A	U+006A	# LATIN SMALL LETTER J	Fullwidth: U+FF4A
+-3-236B	U+006B	# LATIN SMALL LETTER K	Fullwidth: U+FF4B
+-3-236C	U+006C	# LATIN SMALL LETTER L	Fullwidth: U+FF4C
+-3-236D	U+006D	# LATIN SMALL LETTER M	Fullwidth: U+FF4D
+-3-236E	U+006E	# LATIN SMALL LETTER N	Fullwidth: U+FF4E
+-3-236F	U+006F	# LATIN SMALL LETTER O	Fullwidth: U+FF4F
+-3-2370	U+0070	# LATIN SMALL LETTER P	Fullwidth: U+FF50
+-3-2371	U+0071	# LATIN SMALL LETTER Q	Fullwidth: U+FF51
+-3-2372	U+0072	# LATIN SMALL LETTER R	Fullwidth: U+FF52
+-3-2373	U+0073	# LATIN SMALL LETTER S	Fullwidth: U+FF53
+-3-2374	U+0074	# LATIN SMALL LETTER T	Fullwidth: U+FF54
+-3-2375	U+0075	# LATIN SMALL LETTER U	Fullwidth: U+FF55
+-3-2376	U+0076	# LATIN SMALL LETTER V	Fullwidth: U+FF56
+-3-2377	U+0077	# LATIN SMALL LETTER W	Fullwidth: U+FF57
+-3-2378	U+0078	# LATIN SMALL LETTER X	Fullwidth: U+FF58
+-3-2379	U+0079	# LATIN SMALL LETTER Y	Fullwidth: U+FF59
+-3-237A	U+007A	# LATIN SMALL LETTER Z	Fullwidth: U+FF5A
++3-2361	U+FF41	# LATIN SMALL LETTER A	Fullwidth: U+FF41
++3-2362	U+FF42	# LATIN SMALL LETTER B	Fullwidth: U+FF42
++3-2363	U+FF43	# LATIN SMALL LETTER C	Fullwidth: U+FF43
++3-2364	U+FF44	# LATIN SMALL LETTER D	Fullwidth: U+FF44
++3-2365	U+FF45	# LATIN SMALL LETTER E	Fullwidth: U+FF45
++3-2366	U+FF46	# LATIN SMALL LETTER F	Fullwidth: U+FF46
++3-2367	U+FF47	# LATIN SMALL LETTER G	Fullwidth: U+FF47
++3-2368	U+FF48	# LATIN SMALL LETTER H	Fullwidth: U+FF48
++3-2369	U+FF49	# LATIN SMALL LETTER I	Fullwidth: U+FF49
++3-236A	U+FF4A	# LATIN SMALL LETTER J	Fullwidth: U+FF4A
++3-236B	U+FF4B	# LATIN SMALL LETTER K	Fullwidth: U+FF4B
++3-236C	U+FF4C	# LATIN SMALL LETTER L	Fullwidth: U+FF4C
++3-236D	U+FF4D	# LATIN SMALL LETTER M	Fullwidth: U+FF4D
++3-236E	U+FF4E	# LATIN SMALL LETTER N	Fullwidth: U+FF4E
++3-236F	U+FF4F	# LATIN SMALL LETTER O	Fullwidth: U+FF4F
++3-2370	U+FF50	# LATIN SMALL LETTER P	Fullwidth: U+FF50
++3-2371	U+FF51	# LATIN SMALL LETTER Q	Fullwidth: U+FF51
++3-2372	U+FF52	# LATIN SMALL LETTER R	Fullwidth: U+FF52
++3-2373	U+FF53	# LATIN SMALL LETTER S	Fullwidth: U+FF53
++3-2374	U+FF54	# LATIN SMALL LETTER T	Fullwidth: U+FF54
++3-2375	U+FF55	# LATIN SMALL LETTER U	Fullwidth: U+FF55
++3-2376	U+FF56	# LATIN SMALL LETTER V	Fullwidth: U+FF56
++3-2377	U+FF57	# LATIN SMALL LETTER W	Fullwidth: U+FF57
++3-2378	U+FF58	# LATIN SMALL LETTER X	Fullwidth: U+FF58
++3-2379	U+FF59	# LATIN SMALL LETTER Y	Fullwidth: U+FF59
++3-237A	U+FF5A	# LATIN SMALL LETTER Z	Fullwidth: U+FF5A
+ 3-237B	U+30A0	# KATAKANA-HIRAGANA DOUBLE HYPHEN	[2000]	[Unicode3.2]
+ 3-237C	U+2013	# EN DASH	[2000]
+ 3-237D	U+29FA	# DOUBLE PLUS	[2000]	[Unicode3.2]
diff --git a/Tools/unicode/python-mappings/diff/jisx0213-2004-std.txt.diff b/Tools/unicode/python-mappings/diff/jisx0213-2004-std.txt.diff
new file mode 100644
index 0000000..f862a49
--- /dev/null
+++ b/Tools/unicode/python-mappings/diff/jisx0213-2004-std.txt.diff
@@ -0,0 +1,351 @@
+--- jisx0213-2000-std.txt.orig	Tue Apr 16 23:32:38 2002
++++ jisx0213-2004-std.txt	Thu Jul  8 11:51:54 2004
+@@ -1,6 +1,6 @@
+-## JIS X 0213:2000 vs Unicode mapping table
++## JIS X 0213:2004 vs Unicode mapping table
+ ## 
+-## Date: 16 Apr 2002 13:09:49 GMT
++## Date: 7 Jul 2004 13:09:49 GMT
+ ## License:
+ ## 	Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved.
+ ## 	Copyright (C) 2001 I'O, All Rights Reserved.
+@@ -23,21 +23,21 @@
+ 3-2121	U+3000	# IDEOGRAPHIC SPACE
+ 3-2122	U+3001	# IDEOGRAPHIC COMMA
+ 3-2123	U+3002	# IDEOGRAPHIC FULL STOP
+-3-2124	U+002C	# COMMA	Fullwidth: U+FF0C
+-3-2125	U+002E	# FULL STOP	Fullwidth: U+FF0E
++3-2124	U+FF0C	# COMMA	Fullwidth: U+FF0C
++3-2125	U+FF0E	# FULL STOP	Fullwidth: U+FF0E
+ 3-2126	U+30FB	# KATAKANA MIDDLE DOT
+-3-2127	U+003A	# COLON	Fullwidth: U+FF1A
+-3-2128	U+003B	# SEMICOLON	Fullwidth: U+FF1B
+-3-2129	U+003F	# QUESTION MARK	Fullwidth: U+FF1F
+-3-212A	U+0021	# EXCLAMATION MARK	Fullwidth: U+FF01
++3-2127	U+FF1A	# COLON	Fullwidth: U+FF1A
++3-2128	U+FF1B	# SEMICOLON	Fullwidth: U+FF1B
++3-2129	U+FF1F	# QUESTION MARK	Fullwidth: U+FF1F
++3-212A	U+FF01	# EXCLAMATION MARK	Fullwidth: U+FF01
+ 3-212B	U+309B	# KATAKANA-HIRAGANA VOICED SOUND MARK
+ 3-212C	U+309C	# KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ 3-212D	U+00B4	# ACUTE ACCENT
+-3-212E	U+0060	# GRAVE ACCENT	Fullwidth: U+FF40
++3-212E	U+FF40	# GRAVE ACCENT	Fullwidth: U+FF40
+ 3-212F	U+00A8	# DIAERESIS
+-3-2130	U+005E	# CIRCUMFLEX ACCENT	Fullwidth: U+FF3E
+-3-2131	U+203E	# OVERLINE	Windows: U+FFE3
+-3-2132	U+005F	# LOW LINE	Fullwidth: U+FF3F
++3-2130	U+FF3E	# CIRCUMFLEX ACCENT	Fullwidth: U+FF3E
++3-2131	U+FFE3	# OVERLINE	Windows: U+FFE3
++3-2132	U+FF3F	# LOW LINE	Fullwidth: U+FF3F
+ 3-2133	U+30FD	# KATAKANA ITERATION MARK
+ 3-2134	U+30FE	# KATAKANA VOICED ITERATION MARK
+ 3-2135	U+309D	# HIRAGANA ITERATION MARK
+@@ -48,27 +48,27 @@
+ 3-213A	U+3006	# IDEOGRAPHIC CLOSING MARK
+ 3-213B	U+3007	# IDEOGRAPHIC NUMBER ZERO
+ 3-213C	U+30FC	# KATAKANA-HIRAGANA PROLONGED SOUND MARK
+-3-213D	U+2014	# EM DASH	Windows: U+2015
++3-213D	U+2015	# EM DASH	Windows: U+2015
+ 3-213E	U+2010	# HYPHEN
+-3-213F	U+002F	# SOLIDUS	Fullwidth: U+FF0F
++3-213F	U+FF0F	# SOLIDUS	Fullwidth: U+FF0F
+ 3-2140	U+005C	# REVERSE SOLIDUS	Fullwidth: U+FF3C
+ 3-2141	U+301C	# WAVE DASH	Windows: U+FF5E
+ 3-2142	U+2016	# DOUBLE VERTICAL LINE	Windows: U+2225
+-3-2143	U+007C	# VERTICAL LINE	Fullwidth: U+FF5C
++3-2143	U+FF5C	# VERTICAL LINE	Fullwidth: U+FF5C
+ 3-2144	U+2026	# HORIZONTAL ELLIPSIS
+ 3-2145	U+2025	# TWO DOT LEADER
+ 3-2146	U+2018	# LEFT SINGLE QUOTATION MARK
+ 3-2147	U+2019	# RIGHT SINGLE QUOTATION MARK
+ 3-2148	U+201C	# LEFT DOUBLE QUOTATION MARK
+ 3-2149	U+201D	# RIGHT DOUBLE QUOTATION MARK
+-3-214A	U+0028	# LEFT PARENTHESIS	Fullwidth: U+FF08
+-3-214B	U+0029	# RIGHT PARENTHESIS	Fullwidth: U+FF09
++3-214A	U+FF08	# LEFT PARENTHESIS	Fullwidth: U+FF08
++3-214B	U+FF09	# RIGHT PARENTHESIS	Fullwidth: U+FF09
+ 3-214C	U+3014	# LEFT TORTOISE SHELL BRACKET
+ 3-214D	U+3015	# RIGHT TORTOISE SHELL BRACKET
+-3-214E	U+005B	# LEFT SQUARE BRACKET	Fullwidth: U+FF3B
+-3-214F	U+005D	# RIGHT SQUARE BRACKET	Fullwidth: U+FF3D
+-3-2150	U+007B	# LEFT CURLY BRACKET	Fullwidth: U+FF5B
+-3-2151	U+007D	# RIGHT CURLY BRACKET	Fullwidth: U+FF5D
++3-214E	U+FF3B	# LEFT SQUARE BRACKET	Fullwidth: U+FF3B
++3-214F	U+FF3D	# RIGHT SQUARE BRACKET	Fullwidth: U+FF3D
++3-2150	U+FF5B	# LEFT CURLY BRACKET	Fullwidth: U+FF5B
++3-2151	U+FF5D	# RIGHT CURLY BRACKET	Fullwidth: U+FF5D
+ 3-2152	U+3008	# LEFT ANGLE BRACKET
+ 3-2153	U+3009	# RIGHT ANGLE BRACKET
+ 3-2154	U+300A	# LEFT DOUBLE ANGLE BRACKET
+@@ -79,15 +79,15 @@
+ 3-2159	U+300F	# RIGHT WHITE CORNER BRACKET
+ 3-215A	U+3010	# LEFT BLACK LENTICULAR BRACKET
+ 3-215B	U+3011	# RIGHT BLACK LENTICULAR BRACKET
+-3-215C	U+002B	# PLUS SIGN	Fullwidth: U+FF0B
++3-215C	U+FF0B	# PLUS SIGN	Fullwidth: U+FF0B
+ 3-215D	U+2212	# MINUS SIGN	Windows: U+FF0D
+ 3-215E	U+00B1	# PLUS-MINUS SIGN
+ 3-215F	U+00D7	# MULTIPLICATION SIGN
+ 3-2160	U+00F7	# DIVISION SIGN
+-3-2161	U+003D	# EQUALS SIGN	Fullwidth: U+FF1D
++3-2161	U+FF1D	# EQUALS SIGN	Fullwidth: U+FF1D
+ 3-2162	U+2260	# NOT EQUAL TO
+-3-2163	U+003C	# LESS-THAN SIGN	Fullwidth: U+FF1C
+-3-2164	U+003E	# GREATER-THAN SIGN	Fullwidth: U+FF1E
++3-2163	U+FF1C	# LESS-THAN SIGN	Fullwidth: U+FF1C
++3-2164	U+FF1E	# GREATER-THAN SIGN	Fullwidth: U+FF1E
+ 3-2165	U+2266	# LESS-THAN OVER EQUAL TO
+ 3-2166	U+2267	# GREATER-THAN OVER EQUAL TO
+ 3-2167	U+221E	# INFINITY
+@@ -98,15 +98,15 @@
+ 3-216C	U+2032	# PRIME
+ 3-216D	U+2033	# DOUBLE PRIME
+ 3-216E	U+2103	# DEGREE CELSIUS
+-3-216F	U+00A5	# YEN SIGN	Windows: U+FFE5
+-3-2170	U+0024	# DOLLAR SIGN	Fullwidth: U+FF04
++3-216F	U+FFE5	# YEN SIGN	Windows: U+FFE5
++3-2170	U+FF04	# DOLLAR SIGN	Fullwidth: U+FF04
+ 3-2171	U+00A2	# CENT SIGN	Windows: U+FFE0
+ 3-2172	U+00A3	# POUND SIGN	Windows: U+FFE1
+-3-2173	U+0025	# PERCENT SIGN	Fullwidth: U+FF05
+-3-2174	U+0023	# NUMBER SIGN	Fullwidth: U+FF03
+-3-2175	U+0026	# AMPERSAND	Fullwidth: U+FF06
+-3-2176	U+002A	# ASTERISK	Fullwidth: U+FF0A
+-3-2177	U+0040	# COMMERCIAL AT	Fullwidth: U+FF20
++3-2173	U+FF05	# PERCENT SIGN	Fullwidth: U+FF05
++3-2174	U+FF03	# NUMBER SIGN	Fullwidth: U+FF03
++3-2175	U+FF06	# AMPERSAND	Fullwidth: U+FF06
++3-2176	U+FF0A	# ASTERISK	Fullwidth: U+FF0A
++3-2177	U+FF20	# COMMERCIAL AT	Fullwidth: U+FF20
+ 3-2178	U+00A7	# SECTION SIGN
+ 3-2179	U+2606	# WHITE STAR
+ 3-217A	U+2605	# BLACK STAR
+@@ -128,9 +128,9 @@
+ 3-222C	U+2191	# UPWARDS ARROW
+ 3-222D	U+2193	# DOWNWARDS ARROW
+ 3-222E	U+3013	# GETA MARK
+-3-222F	U+0027	# APOSTROPHE	Fullwidth: U+FF07
+-3-2230	U+0022	# QUOTATION MARK	[2000]	Fullwidth: U+FF02
+-3-2231	U+002D	# HYPHEN-MINUS	[2000]	Fullwidth: U+FF0D
++3-222F	U+FF07	# APOSTROPHE	Fullwidth: U+FF07
++3-2230	U+FF02	# QUOTATION MARK	[2000]	Fullwidth: U+FF02
++3-2231	U+FF0D	# HYPHEN-MINUS	[2000]	Fullwidth: U+FF0D
+ 3-2232	U+007E	# TILDE	[2000]	Fullwidth: U+FF5E
+ 3-2233	U+3033	# VERTICAL KANA REPEAT MARK UPPER HALF	[2000]
+ 3-2234	U+3034	# VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF	[2000]
+@@ -223,16 +223,16 @@
+ 3-232D	U+21E9	# DOWNWARDS WHITE ARROW	[2000]
+ 3-232E	U+2934	# ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS	[2000]	[Unicode3.2]
+ 3-232F	U+2935	# ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS	[2000]	[Unicode3.2]
+-3-2330	U+0030	# DIGIT ZERO	Fullwidth: U+FF10
+-3-2331	U+0031	# DIGIT ONE	Fullwidth: U+FF11
+-3-2332	U+0032	# DIGIT TWO	Fullwidth: U+FF12
+-3-2333	U+0033	# DIGIT THREE	Fullwidth: U+FF13
+-3-2334	U+0034	# DIGIT FOUR	Fullwidth: U+FF14
+-3-2335	U+0035	# DIGIT FIVE	Fullwidth: U+FF15
+-3-2336	U+0036	# DIGIT SIX	Fullwidth: U+FF16
+-3-2337	U+0037	# DIGIT SEVEN	Fullwidth: U+FF17
+-3-2338	U+0038	# DIGIT EIGHT	Fullwidth: U+FF18
+-3-2339	U+0039	# DIGIT NINE	Fullwidth: U+FF19
++3-2330	U+FF10	# DIGIT ZERO	Fullwidth: U+FF10
++3-2331	U+FF11	# DIGIT ONE	Fullwidth: U+FF11
++3-2332	U+FF12	# DIGIT TWO	Fullwidth: U+FF12
++3-2333	U+FF13	# DIGIT THREE	Fullwidth: U+FF13
++3-2334	U+FF14	# DIGIT FOUR	Fullwidth: U+FF14
++3-2335	U+FF15	# DIGIT FIVE	Fullwidth: U+FF15
++3-2336	U+FF16	# DIGIT SIX	Fullwidth: U+FF16
++3-2337	U+FF17	# DIGIT SEVEN	Fullwidth: U+FF17
++3-2338	U+FF18	# DIGIT EIGHT	Fullwidth: U+FF18
++3-2339	U+FF19	# DIGIT NINE	Fullwidth: U+FF19
+ 3-233A	U+29BF	# CIRCLED BULLET	[2000]	[Unicode3.2]
+ 3-233B	U+25C9	# FISHEYE	[2000]
+ 3-233C	U+303D	# PART ALTERNATION MARK	[2000]	[Unicode3.2]
+@@ -240,64 +240,64 @@
+ 3-233E	U+FE45	# SESAME DOT	[2000]	[Unicode3.2]
+ 3-233F	U+25E6	# WHITE BULLET	[2000]
+ 3-2340	U+2022	# BULLET	[2000]
+-3-2341	U+0041	# LATIN CAPITAL LETTER A	Fullwidth: U+FF21
+-3-2342	U+0042	# LATIN CAPITAL LETTER B	Fullwidth: U+FF22
+-3-2343	U+0043	# LATIN CAPITAL LETTER C	Fullwidth: U+FF23
+-3-2344	U+0044	# LATIN CAPITAL LETTER D	Fullwidth: U+FF24
+-3-2345	U+0045	# LATIN CAPITAL LETTER E	Fullwidth: U+FF25
+-3-2346	U+0046	# LATIN CAPITAL LETTER F	Fullwidth: U+FF26
+-3-2347	U+0047	# LATIN CAPITAL LETTER G	Fullwidth: U+FF27
+-3-2348	U+0048	# LATIN CAPITAL LETTER H	Fullwidth: U+FF28
+-3-2349	U+0049	# LATIN CAPITAL LETTER I	Fullwidth: U+FF29
+-3-234A	U+004A	# LATIN CAPITAL LETTER J	Fullwidth: U+FF2A
+-3-234B	U+004B	# LATIN CAPITAL LETTER K	Fullwidth: U+FF2B
+-3-234C	U+004C	# LATIN CAPITAL LETTER L	Fullwidth: U+FF2C
+-3-234D	U+004D	# LATIN CAPITAL LETTER M	Fullwidth: U+FF2D
+-3-234E	U+004E	# LATIN CAPITAL LETTER N	Fullwidth: U+FF2E
+-3-234F	U+004F	# LATIN CAPITAL LETTER O	Fullwidth: U+FF2F
+-3-2350	U+0050	# LATIN CAPITAL LETTER P	Fullwidth: U+FF30
+-3-2351	U+0051	# LATIN CAPITAL LETTER Q	Fullwidth: U+FF31
+-3-2352	U+0052	# LATIN CAPITAL LETTER R	Fullwidth: U+FF32
+-3-2353	U+0053	# LATIN CAPITAL LETTER S	Fullwidth: U+FF33
+-3-2354	U+0054	# LATIN CAPITAL LETTER T	Fullwidth: U+FF34
+-3-2355	U+0055	# LATIN CAPITAL LETTER U	Fullwidth: U+FF35
+-3-2356	U+0056	# LATIN CAPITAL LETTER V	Fullwidth: U+FF36
+-3-2357	U+0057	# LATIN CAPITAL LETTER W	Fullwidth: U+FF37
+-3-2358	U+0058	# LATIN CAPITAL LETTER X	Fullwidth: U+FF38
+-3-2359	U+0059	# LATIN CAPITAL LETTER Y	Fullwidth: U+FF39
+-3-235A	U+005A	# LATIN CAPITAL LETTER Z	Fullwidth: U+FF3A
++3-2341	U+FF21	# LATIN CAPITAL LETTER A	Fullwidth: U+FF21
++3-2342	U+FF22	# LATIN CAPITAL LETTER B	Fullwidth: U+FF22
++3-2343	U+FF23	# LATIN CAPITAL LETTER C	Fullwidth: U+FF23
++3-2344	U+FF24	# LATIN CAPITAL LETTER D	Fullwidth: U+FF24
++3-2345	U+FF25	# LATIN CAPITAL LETTER E	Fullwidth: U+FF25
++3-2346	U+FF26	# LATIN CAPITAL LETTER F	Fullwidth: U+FF26
++3-2347	U+FF27	# LATIN CAPITAL LETTER G	Fullwidth: U+FF27
++3-2348	U+FF28	# LATIN CAPITAL LETTER H	Fullwidth: U+FF28
++3-2349	U+FF29	# LATIN CAPITAL LETTER I	Fullwidth: U+FF29
++3-234A	U+FF2A	# LATIN CAPITAL LETTER J	Fullwidth: U+FF2A
++3-234B	U+FF2B	# LATIN CAPITAL LETTER K	Fullwidth: U+FF2B
++3-234C	U+FF2C	# LATIN CAPITAL LETTER L	Fullwidth: U+FF2C
++3-234D	U+FF2D	# LATIN CAPITAL LETTER M	Fullwidth: U+FF2D
++3-234E	U+FF2E	# LATIN CAPITAL LETTER N	Fullwidth: U+FF2E
++3-234F	U+FF2F	# LATIN CAPITAL LETTER O	Fullwidth: U+FF2F
++3-2350	U+FF30	# LATIN CAPITAL LETTER P	Fullwidth: U+FF30
++3-2351	U+FF31	# LATIN CAPITAL LETTER Q	Fullwidth: U+FF31
++3-2352	U+FF32	# LATIN CAPITAL LETTER R	Fullwidth: U+FF32
++3-2353	U+FF33	# LATIN CAPITAL LETTER S	Fullwidth: U+FF33
++3-2354	U+FF34	# LATIN CAPITAL LETTER T	Fullwidth: U+FF34
++3-2355	U+FF35	# LATIN CAPITAL LETTER U	Fullwidth: U+FF35
++3-2356	U+FF36	# LATIN CAPITAL LETTER V	Fullwidth: U+FF36
++3-2357	U+FF37	# LATIN CAPITAL LETTER W	Fullwidth: U+FF37
++3-2358	U+FF38	# LATIN CAPITAL LETTER X	Fullwidth: U+FF38
++3-2359	U+FF39	# LATIN CAPITAL LETTER Y	Fullwidth: U+FF39
++3-235A	U+FF3A	# LATIN CAPITAL LETTER Z	Fullwidth: U+FF3A
+ 3-235B	U+2213	# MINUS-OR-PLUS SIGN	[2000]
+ 3-235C	U+2135	# ALEF SYMBOL	[2000]
+ 3-235D	U+210F	# PLANCK CONSTANT OVER TWO PI	[2000]
+ 3-235E	U+33CB	# SQUARE HP	[2000]
+ 3-235F	U+2113	# SCRIPT SMALL L	[2000]
+ 3-2360	U+2127	# INVERTED OHM SIGN	[2000]
+-3-2361	U+0061	# LATIN SMALL LETTER A	Fullwidth: U+FF41
+-3-2362	U+0062	# LATIN SMALL LETTER B	Fullwidth: U+FF42
+-3-2363	U+0063	# LATIN SMALL LETTER C	Fullwidth: U+FF43
+-3-2364	U+0064	# LATIN SMALL LETTER D	Fullwidth: U+FF44
+-3-2365	U+0065	# LATIN SMALL LETTER E	Fullwidth: U+FF45
+-3-2366	U+0066	# LATIN SMALL LETTER F	Fullwidth: U+FF46
+-3-2367	U+0067	# LATIN SMALL LETTER G	Fullwidth: U+FF47
+-3-2368	U+0068	# LATIN SMALL LETTER H	Fullwidth: U+FF48
+-3-2369	U+0069	# LATIN SMALL LETTER I	Fullwidth: U+FF49
+-3-236A	U+006A	# LATIN SMALL LETTER J	Fullwidth: U+FF4A
+-3-236B	U+006B	# LATIN SMALL LETTER K	Fullwidth: U+FF4B
+-3-236C	U+006C	# LATIN SMALL LETTER L	Fullwidth: U+FF4C
+-3-236D	U+006D	# LATIN SMALL LETTER M	Fullwidth: U+FF4D
+-3-236E	U+006E	# LATIN SMALL LETTER N	Fullwidth: U+FF4E
+-3-236F	U+006F	# LATIN SMALL LETTER O	Fullwidth: U+FF4F
+-3-2370	U+0070	# LATIN SMALL LETTER P	Fullwidth: U+FF50
+-3-2371	U+0071	# LATIN SMALL LETTER Q	Fullwidth: U+FF51
+-3-2372	U+0072	# LATIN SMALL LETTER R	Fullwidth: U+FF52
+-3-2373	U+0073	# LATIN SMALL LETTER S	Fullwidth: U+FF53
+-3-2374	U+0074	# LATIN SMALL LETTER T	Fullwidth: U+FF54
+-3-2375	U+0075	# LATIN SMALL LETTER U	Fullwidth: U+FF55
+-3-2376	U+0076	# LATIN SMALL LETTER V	Fullwidth: U+FF56
+-3-2377	U+0077	# LATIN SMALL LETTER W	Fullwidth: U+FF57
+-3-2378	U+0078	# LATIN SMALL LETTER X	Fullwidth: U+FF58
+-3-2379	U+0079	# LATIN SMALL LETTER Y	Fullwidth: U+FF59
+-3-237A	U+007A	# LATIN SMALL LETTER Z	Fullwidth: U+FF5A
++3-2361	U+FF41	# LATIN SMALL LETTER A	Fullwidth: U+FF41
++3-2362	U+FF42	# LATIN SMALL LETTER B	Fullwidth: U+FF42
++3-2363	U+FF43	# LATIN SMALL LETTER C	Fullwidth: U+FF43
++3-2364	U+FF44	# LATIN SMALL LETTER D	Fullwidth: U+FF44
++3-2365	U+FF45	# LATIN SMALL LETTER E	Fullwidth: U+FF45
++3-2366	U+FF46	# LATIN SMALL LETTER F	Fullwidth: U+FF46
++3-2367	U+FF47	# LATIN SMALL LETTER G	Fullwidth: U+FF47
++3-2368	U+FF48	# LATIN SMALL LETTER H	Fullwidth: U+FF48
++3-2369	U+FF49	# LATIN SMALL LETTER I	Fullwidth: U+FF49
++3-236A	U+FF4A	# LATIN SMALL LETTER J	Fullwidth: U+FF4A
++3-236B	U+FF4B	# LATIN SMALL LETTER K	Fullwidth: U+FF4B
++3-236C	U+FF4C	# LATIN SMALL LETTER L	Fullwidth: U+FF4C
++3-236D	U+FF4D	# LATIN SMALL LETTER M	Fullwidth: U+FF4D
++3-236E	U+FF4E	# LATIN SMALL LETTER N	Fullwidth: U+FF4E
++3-236F	U+FF4F	# LATIN SMALL LETTER O	Fullwidth: U+FF4F
++3-2370	U+FF50	# LATIN SMALL LETTER P	Fullwidth: U+FF50
++3-2371	U+FF51	# LATIN SMALL LETTER Q	Fullwidth: U+FF51
++3-2372	U+FF52	# LATIN SMALL LETTER R	Fullwidth: U+FF52
++3-2373	U+FF53	# LATIN SMALL LETTER S	Fullwidth: U+FF53
++3-2374	U+FF54	# LATIN SMALL LETTER T	Fullwidth: U+FF54
++3-2375	U+FF55	# LATIN SMALL LETTER U	Fullwidth: U+FF55
++3-2376	U+FF56	# LATIN SMALL LETTER V	Fullwidth: U+FF56
++3-2377	U+FF57	# LATIN SMALL LETTER W	Fullwidth: U+FF57
++3-2378	U+FF58	# LATIN SMALL LETTER X	Fullwidth: U+FF58
++3-2379	U+FF59	# LATIN SMALL LETTER Y	Fullwidth: U+FF59
++3-237A	U+FF5A	# LATIN SMALL LETTER Z	Fullwidth: U+FF5A
+ 3-237B	U+30A0	# KATAKANA-HIRAGANA DOUBLE HYPHEN	[2000]	[Unicode3.2]
+ 3-237C	U+2013	# EN DASH	[2000]
+ 3-237D	U+29FA	# DOUBLE PLUS	[2000]	[Unicode3.2]
+@@ -1242,7 +1242,7 @@
+ 3-2D7C		# <reserved>	Windows: U+222A
+ 3-2D7D	U+2756	# BLACK DIAMOND MINUS WHITE X	[2000]
+ 3-2D7E	U+261E	# WHITE RIGHT POINTING INDEX	[2000]
+-3-2E21		# <reserved>
++3-2E21	U+4FF1	# <cjk> [2004]
+ 3-2E22	U+2000B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F780
+ 3-2E23	U+3402	# <cjk>	[2000]
+ 3-2E24	U+4E28	# <cjk>	[2000]
+@@ -1429,7 +1429,7 @@
+ 3-2F7B	U+218BD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F78F
+ 3-2F7C	U+5B19	# <cjk>	[2000]
+ 3-2F7D	U+5B25	# <cjk>	[2000]
+-3-2F7E		# <reserved>
++3-2F7E	U+525D	# <cjk> [2004]
+ 3-3021	U+4E9C	# <cjk>
+ 3-3022	U+5516	# <cjk>
+ 3-3023	U+5A03	# <cjk>
+@@ -4395,7 +4395,7 @@
+ 3-4F51	U+6E7E	# <cjk>
+ 3-4F52	U+7897	# <cjk>
+ 3-4F53	U+8155	# <cjk>
+-3-4F54		# <reserved>
++3-4F54	U+20B9F	# <cjk> [2004]
+ 3-4F55	U+5B41	# <cjk>	[2000]
+ 3-4F56	U+5B56	# <cjk>	[2000]
+ 3-4F57	U+5B7D	# <cjk>	[2000]
+@@ -4437,7 +4437,7 @@
+ 3-4F7B	U+5DA7	# <cjk>	[2000]
+ 3-4F7C	U+5DB8	# <cjk>	[2000]
+ 3-4F7D	U+5DCB	# <cjk>	[2000]
+-3-4F7E		# <reserved>
++3-4F7E	U+541E	# <cjk> [2004]
+ 3-5021	U+5F0C	# <cjk>
+ 3-5022	U+4E10	# <cjk>
+ 3-5023	U+4E15	# <cjk>
+@@ -7828,7 +7828,7 @@
+ 3-7424	U+7464	# <cjk>	[1983]
+ 3-7425	U+51DC	# <cjk>	[1990]
+ 3-7426	U+7199	# <cjk>	[1990]
+-3-7427		# <reserved>
++3-7427	U+5653	# <cjk> [2004]
+ 3-7428	U+5DE2	# <cjk>	[2000]
+ 3-7429	U+5E14	# <cjk>	[2000]
+ 3-742A	U+5E18	# <cjk>	[2000]
+@@ -8851,11 +8851,11 @@
+ 3-7E77	U+9F94	# <cjk>	[2000]
+ 3-7E78	U+9F97	# <cjk>	[2000]
+ 3-7E79	U+9FA2	# <cjk>	[2000]
+-3-7E7A		# <reserved>
+-3-7E7B		# <reserved>
+-3-7E7C		# <reserved>
+-3-7E7D		# <reserved>
+-3-7E7E		# <reserved>
++3-7E7A	U+59F8	# <cjk> [2004]
++3-7E7B	U+5C5B	# <cjk> [2004]
++3-7E7C	U+5E77	# <cjk> [2004]
++3-7E7D	U+7626	# <cjk> [2004]
++3-7E7E	U+7E6B	# <cjk> [2004]
+ 4-2121	U+20089	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D1
+ 4-2122	U+4E02	# <cjk>	[2000]
+ 4-2123	U+4E0F	# <cjk>	[2000]
+@@ -11138,7 +11138,7 @@
+ 4-7D38	U+9B10	# <cjk>	[2000]
+ 4-7D39	U+9B12	# <cjk>	[2000]
+ 4-7D3A	U+9B16	# <cjk>	[2000]
+-4-7D3B	U+9B1D	# <cjk>	[2000]
++4-7D3B	U+9B1C	# <cjk>	[2000]
+ 4-7D3C	U+9B2B	# <cjk>	[2000]
+ 4-7D3D	U+9B33	# <cjk>	[2000]
+ 4-7D3E	U+9B3D	# <cjk>	[2000]
diff --git a/Tools/unicode/python-mappings/gb-18030-2000.xml b/Tools/unicode/python-mappings/gb-18030-2000.xml
new file mode 100644
index 0000000..ef86d83
--- /dev/null
+++ b/Tools/unicode/python-mappings/gb-18030-2000.xml
@@ -0,0 +1,30917 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE characterMapping SYSTEM "http://www.unicode.org/unicode/reports/tr22/CharacterMapping.dtd">
+<characterMapping id="gb-18030-2000" version="3">
+ <history>
+  <modified version="3" date="2001-02-21">
+   0x80 appears to be a valid (and unassigned) single-byte code, added to the validity.
+  </modified>
+  <modified version="2" date="2000-11-30">
+   New mapping data, changing all four-byte mappings to the BMP.
+   Removed mappings to single surrogates.
+  </modified>
+  <modified version="1" date="2000-03-17">
+   Original table.
+  </modified>
+ </history>
+
+ <validity>
+  <state type="FIRST"  s="00" e="80" next="VALID" max="7f"/>
+  <state type="FIRST"  s="81" e="fe" next="SECOND"/>
+
+  <state type="SECOND" s="40" e="7e" next="VALID" max="ffff"/>
+  <state type="SECOND" s="80" e="fe" next="VALID" max="ffff"/>
+  <state type="SECOND" s="30" e="39" next="THIRD"/>
+
+  <state type="THIRD"  s="81" e="fe" next="FOURTH"/>
+
+  <state type="FOURTH" s="30" e="39" next="VALID" max="10ffff"/>
+ </validity>
+ <assignments sub="1A">
+  <!-- One to one mappings -->
+  <a u="0000" b="00"/>
+  <a u="0001" b="01"/>
+  <a u="0002" b="02"/>
+  <a u="0003" b="03"/>
+  <a u="0004" b="04"/>
+  <a u="0005" b="05"/>
+  <a u="0006" b="06"/>
+  <a u="0007" b="07"/>
+  <a u="0008" b="08"/>
+  <a u="0009" b="09"/>
+  <a u="000A" b="0A"/>
+  <a u="000B" b="0B"/>
+  <a u="000C" b="0C"/>
+  <a u="000D" b="0D"/>
+  <a u="000E" b="0E"/>
+  <a u="000F" b="0F"/>
+  <a u="0010" b="10"/>
+  <a u="0011" b="11"/>
+  <a u="0012" b="12"/>
+  <a u="0013" b="13"/>
+  <a u="0014" b="14"/>
+  <a u="0015" b="15"/>
+  <a u="0016" b="16"/>
+  <a u="0017" b="17"/>
+  <a u="0018" b="18"/>
+  <a u="0019" b="19"/>
+  <a u="001A" b="1A"/>
+  <a u="001B" b="1B"/>
+  <a u="001C" b="1C"/>
+  <a u="001D" b="1D"/>
+  <a u="001E" b="1E"/>
+  <a u="001F" b="1F"/>
+  <a u="0020" b="20"/>
+  <a u="0021" b="21"/>
+  <a u="0022" b="22"/>
+  <a u="0023" b="23"/>
+  <a u="0024" b="24"/>
+  <a u="0025" b="25"/>
+  <a u="0026" b="26"/>
+  <a u="0027" b="27"/>
+  <a u="0028" b="28"/>
+  <a u="0029" b="29"/>
+  <a u="002A" b="2A"/>
+  <a u="002B" b="2B"/>
+  <a u="002C" b="2C"/>
+  <a u="002D" b="2D"/>
+  <a u="002E" b="2E"/>
+  <a u="002F" b="2F"/>
+  <a u="0030" b="30"/>
+  <a u="0031" b="31"/>
+  <a u="0032" b="32"/>
+  <a u="0033" b="33"/>
+  <a u="0034" b="34"/>
+  <a u="0035" b="35"/>
+  <a u="0036" b="36"/>
+  <a u="0037" b="37"/>
+  <a u="0038" b="38"/>
+  <a u="0039" b="39"/>
+  <a u="003A" b="3A"/>
+  <a u="003B" b="3B"/>
+  <a u="003C" b="3C"/>
+  <a u="003D" b="3D"/>
+  <a u="003E" b="3E"/>
+  <a u="003F" b="3F"/>
+  <a u="0040" b="40"/>
+  <a u="0041" b="41"/>
+  <a u="0042" b="42"/>
+  <a u="0043" b="43"/>
+  <a u="0044" b="44"/>
+  <a u="0045" b="45"/>
+  <a u="0046" b="46"/>
+  <a u="0047" b="47"/>
+  <a u="0048" b="48"/>
+  <a u="0049" b="49"/>
+  <a u="004A" b="4A"/>
+  <a u="004B" b="4B"/>
+  <a u="004C" b="4C"/>
+  <a u="004D" b="4D"/>
+  <a u="004E" b="4E"/>
+  <a u="004F" b="4F"/>
+  <a u="0050" b="50"/>
+  <a u="0051" b="51"/>
+  <a u="0052" b="52"/>
+  <a u="0053" b="53"/>
+  <a u="0054" b="54"/>
+  <a u="0055" b="55"/>
+  <a u="0056" b="56"/>
+  <a u="0057" b="57"/>
+  <a u="0058" b="58"/>
+  <a u="0059" b="59"/>
+  <a u="005A" b="5A"/>
+  <a u="005B" b="5B"/>
+  <a u="005C" b="5C"/>
+  <a u="005D" b="5D"/>
+  <a u="005E" b="5E"/>
+  <a u="005F" b="5F"/>
+  <a u="0060" b="60"/>
+  <a u="0061" b="61"/>
+  <a u="0062" b="62"/>
+  <a u="0063" b="63"/>
+  <a u="0064" b="64"/>
+  <a u="0065" b="65"/>
+  <a u="0066" b="66"/>
+  <a u="0067" b="67"/>
+  <a u="0068" b="68"/>
+  <a u="0069" b="69"/>
+  <a u="006A" b="6A"/>
+  <a u="006B" b="6B"/>
+  <a u="006C" b="6C"/>
+  <a u="006D" b="6D"/>
+  <a u="006E" b="6E"/>
+  <a u="006F" b="6F"/>
+  <a u="0070" b="70"/>
+  <a u="0071" b="71"/>
+  <a u="0072" b="72"/>
+  <a u="0073" b="73"/>
+  <a u="0074" b="74"/>
+  <a u="0075" b="75"/>
+  <a u="0076" b="76"/>
+  <a u="0077" b="77"/>
+  <a u="0078" b="78"/>
+  <a u="0079" b="79"/>
+  <a u="007A" b="7A"/>
+  <a u="007B" b="7B"/>
+  <a u="007C" b="7C"/>
+  <a u="007D" b="7D"/>
+  <a u="007E" b="7E"/>
+  <a u="007F" b="7F"/>
+  <a u="0080" b="81 30 81 30"/>
+  <a u="0081" b="81 30 81 31"/>
+  <a u="0082" b="81 30 81 32"/>
+  <a u="0083" b="81 30 81 33"/>
+  <a u="0084" b="81 30 81 34"/>
+  <a u="0085" b="81 30 81 35"/>
+  <a u="0086" b="81 30 81 36"/>
+  <a u="0087" b="81 30 81 37"/>
+  <a u="0088" b="81 30 81 38"/>
+  <a u="0089" b="81 30 81 39"/>
+  <a u="008A" b="81 30 82 30"/>
+  <a u="008B" b="81 30 82 31"/>
+  <a u="008C" b="81 30 82 32"/>
+  <a u="008D" b="81 30 82 33"/>
+  <a u="008E" b="81 30 82 34"/>
+  <a u="008F" b="81 30 82 35"/>
+  <a u="0090" b="81 30 82 36"/>
+  <a u="0091" b="81 30 82 37"/>
+  <a u="0092" b="81 30 82 38"/>
+  <a u="0093" b="81 30 82 39"/>
+  <a u="0094" b="81 30 83 30"/>
+  <a u="0095" b="81 30 83 31"/>
+  <a u="0096" b="81 30 83 32"/>
+  <a u="0097" b="81 30 83 33"/>
+  <a u="0098" b="81 30 83 34"/>
+  <a u="0099" b="81 30 83 35"/>
+  <a u="009A" b="81 30 83 36"/>
+  <a u="009B" b="81 30 83 37"/>
+  <a u="009C" b="81 30 83 38"/>
+  <a u="009D" b="81 30 83 39"/>
+  <a u="009E" b="81 30 84 30"/>
+  <a u="009F" b="81 30 84 31"/>
+  <a u="00A0" b="81 30 84 32"/>
+  <a u="00A1" b="81 30 84 33"/>
+  <a u="00A2" b="81 30 84 34"/>
+  <a u="00A3" b="81 30 84 35"/>
+  <a u="00A4" b="A1 E8"/>
+  <a u="00A5" b="81 30 84 36"/>
+  <a u="00A6" b="81 30 84 37"/>
+  <a u="00A7" b="A1 EC"/>
+  <a u="00A8" b="A1 A7"/>
+  <a u="00A9" b="81 30 84 38"/>
+  <a u="00AA" b="81 30 84 39"/>
+  <a u="00AB" b="81 30 85 30"/>
+  <a u="00AC" b="81 30 85 31"/>
+  <a u="00AD" b="81 30 85 32"/>
+  <a u="00AE" b="81 30 85 33"/>
+  <a u="00AF" b="81 30 85 34"/>
+  <a u="00B0" b="A1 E3"/>
+  <a u="00B1" b="A1 C0"/>
+  <a u="00B2" b="81 30 85 35"/>
+  <a u="00B3" b="81 30 85 36"/>
+  <a u="00B4" b="81 30 85 37"/>
+  <a u="00B5" b="81 30 85 38"/>
+  <a u="00B6" b="81 30 85 39"/>
+  <a u="00B7" b="A1 A4"/>
+  <a u="00B8" b="81 30 86 30"/>
+  <a u="00B9" b="81 30 86 31"/>
+  <a u="00BA" b="81 30 86 32"/>
+  <a u="00BB" b="81 30 86 33"/>
+  <a u="00BC" b="81 30 86 34"/>
+  <a u="00BD" b="81 30 86 35"/>
+  <a u="00BE" b="81 30 86 36"/>
+  <a u="00BF" b="81 30 86 37"/>
+  <a u="00C0" b="81 30 86 38"/>
+  <a u="00C1" b="81 30 86 39"/>
+  <a u="00C2" b="81 30 87 30"/>
+  <a u="00C3" b="81 30 87 31"/>
+  <a u="00C4" b="81 30 87 32"/>
+  <a u="00C5" b="81 30 87 33"/>
+  <a u="00C6" b="81 30 87 34"/>
+  <a u="00C7" b="81 30 87 35"/>
+  <a u="00C8" b="81 30 87 36"/>
+  <a u="00C9" b="81 30 87 37"/>
+  <a u="00CA" b="81 30 87 38"/>
+  <a u="00CB" b="81 30 87 39"/>
+  <a u="00CC" b="81 30 88 30"/>
+  <a u="00CD" b="81 30 88 31"/>
+  <a u="00CE" b="81 30 88 32"/>
+  <a u="00CF" b="81 30 88 33"/>
+  <a u="00D0" b="81 30 88 34"/>
+  <a u="00D1" b="81 30 88 35"/>
+  <a u="00D2" b="81 30 88 36"/>
+  <a u="00D3" b="81 30 88 37"/>
+  <a u="00D4" b="81 30 88 38"/>
+  <a u="00D5" b="81 30 88 39"/>
+  <a u="00D6" b="81 30 89 30"/>
+  <a u="00D7" b="A1 C1"/>
+  <a u="00D8" b="81 30 89 31"/>
+  <a u="00D9" b="81 30 89 32"/>
+  <a u="00DA" b="81 30 89 33"/>
+  <a u="00DB" b="81 30 89 34"/>
+  <a u="00DC" b="81 30 89 35"/>
+  <a u="00DD" b="81 30 89 36"/>
+  <a u="00DE" b="81 30 89 37"/>
+  <a u="00DF" b="81 30 89 38"/>
+  <a u="00E0" b="A8 A4"/>
+  <a u="00E1" b="A8 A2"/>
+  <a u="00E2" b="81 30 89 39"/>
+  <a u="00E3" b="81 30 8A 30"/>
+  <a u="00E4" b="81 30 8A 31"/>
+  <a u="00E5" b="81 30 8A 32"/>
+  <a u="00E6" b="81 30 8A 33"/>
+  <a u="00E7" b="81 30 8A 34"/>
+  <a u="00E8" b="A8 A8"/>
+  <a u="00E9" b="A8 A6"/>
+  <a u="00EA" b="A8 BA"/>
+  <a u="00EB" b="81 30 8A 35"/>
+  <a u="00EC" b="A8 AC"/>
+  <a u="00ED" b="A8 AA"/>
+  <a u="00EE" b="81 30 8A 36"/>
+  <a u="00EF" b="81 30 8A 37"/>
+  <a u="00F0" b="81 30 8A 38"/>
+  <a u="00F1" b="81 30 8A 39"/>
+  <a u="00F2" b="A8 B0"/>
+  <a u="00F3" b="A8 AE"/>
+  <a u="00F4" b="81 30 8B 30"/>
+  <a u="00F5" b="81 30 8B 31"/>
+  <a u="00F6" b="81 30 8B 32"/>
+  <a u="00F7" b="A1 C2"/>
+  <a u="00F8" b="81 30 8B 33"/>
+  <a u="00F9" b="A8 B4"/>
+  <a u="00FA" b="A8 B2"/>
+  <a u="00FB" b="81 30 8B 34"/>
+  <a u="00FC" b="A8 B9"/>
+  <a u="00FD" b="81 30 8B 35"/>
+  <a u="00FE" b="81 30 8B 36"/>
+  <a u="00FF" b="81 30 8B 37"/>
+  <a u="0100" b="81 30 8B 38"/>
+  <a u="0101" b="A8 A1"/>
+  <a u="0102" b="81 30 8B 39"/>
+  <a u="0103" b="81 30 8C 30"/>
+  <a u="0104" b="81 30 8C 31"/>
+  <a u="0105" b="81 30 8C 32"/>
+  <a u="0106" b="81 30 8C 33"/>
+  <a u="0107" b="81 30 8C 34"/>
+  <a u="0108" b="81 30 8C 35"/>
+  <a u="0109" b="81 30 8C 36"/>
+  <a u="010A" b="81 30 8C 37"/>
+  <a u="010B" b="81 30 8C 38"/>
+  <a u="010C" b="81 30 8C 39"/>
+  <a u="010D" b="81 30 8D 30"/>
+  <a u="010E" b="81 30 8D 31"/>
+  <a u="010F" b="81 30 8D 32"/>
+  <a u="0110" b="81 30 8D 33"/>
+  <a u="0111" b="81 30 8D 34"/>
+  <a u="0112" b="81 30 8D 35"/>
+  <a u="0113" b="A8 A5"/>
+  <a u="0114" b="81 30 8D 36"/>
+  <a u="0115" b="81 30 8D 37"/>
+  <a u="0116" b="81 30 8D 38"/>
+  <a u="0117" b="81 30 8D 39"/>
+  <a u="0118" b="81 30 8E 30"/>
+  <a u="0119" b="81 30 8E 31"/>
+  <a u="011A" b="81 30 8E 32"/>
+  <a u="011B" b="A8 A7"/>
+  <a u="011C" b="81 30 8E 33"/>
+  <a u="011D" b="81 30 8E 34"/>
+  <a u="011E" b="81 30 8E 35"/>
+  <a u="011F" b="81 30 8E 36"/>
+  <a u="0120" b="81 30 8E 37"/>
+  <a u="0121" b="81 30 8E 38"/>
+  <a u="0122" b="81 30 8E 39"/>
+  <a u="0123" b="81 30 8F 30"/>
+  <a u="0124" b="81 30 8F 31"/>
+  <a u="0125" b="81 30 8F 32"/>
+  <a u="0126" b="81 30 8F 33"/>
+  <a u="0127" b="81 30 8F 34"/>
+  <a u="0128" b="81 30 8F 35"/>
+  <a u="0129" b="81 30 8F 36"/>
+  <a u="012A" b="81 30 8F 37"/>
+  <a u="012B" b="A8 A9"/>
+  <a u="012C" b="81 30 8F 38"/>
+  <a u="012D" b="81 30 8F 39"/>
+  <a u="012E" b="81 30 90 30"/>
+  <a u="012F" b="81 30 90 31"/>
+  <a u="0130" b="81 30 90 32"/>
+  <a u="0131" b="81 30 90 33"/>
+  <a u="0132" b="81 30 90 34"/>
+  <a u="0133" b="81 30 90 35"/>
+  <a u="0134" b="81 30 90 36"/>
+  <a u="0135" b="81 30 90 37"/>
+  <a u="0136" b="81 30 90 38"/>
+  <a u="0137" b="81 30 90 39"/>
+  <a u="0138" b="81 30 91 30"/>
+  <a u="0139" b="81 30 91 31"/>
+  <a u="013A" b="81 30 91 32"/>
+  <a u="013B" b="81 30 91 33"/>
+  <a u="013C" b="81 30 91 34"/>
+  <a u="013D" b="81 30 91 35"/>
+  <a u="013E" b="81 30 91 36"/>
+  <a u="013F" b="81 30 91 37"/>
+  <a u="0140" b="81 30 91 38"/>
+  <a u="0141" b="81 30 91 39"/>
+  <a u="0142" b="81 30 92 30"/>
+  <a u="0143" b="81 30 92 31"/>
+  <a u="0144" b="A8 BD"/>
+  <a u="0145" b="81 30 92 32"/>
+  <a u="0146" b="81 30 92 33"/>
+  <a u="0147" b="81 30 92 34"/>
+  <a u="0148" b="A8 BE"/>
+  <a u="0149" b="81 30 92 35"/>
+  <a u="014A" b="81 30 92 36"/>
+  <a u="014B" b="81 30 92 37"/>
+  <a u="014C" b="81 30 92 38"/>
+  <a u="014D" b="A8 AD"/>
+  <a u="014E" b="81 30 92 39"/>
+  <a u="014F" b="81 30 93 30"/>
+  <a u="0150" b="81 30 93 31"/>
+  <a u="0151" b="81 30 93 32"/>
+  <a u="0152" b="81 30 93 33"/>
+  <a u="0153" b="81 30 93 34"/>
+  <a u="0154" b="81 30 93 35"/>
+  <a u="0155" b="81 30 93 36"/>
+  <a u="0156" b="81 30 93 37"/>
+  <a u="0157" b="81 30 93 38"/>
+  <a u="0158" b="81 30 93 39"/>
+  <a u="0159" b="81 30 94 30"/>
+  <a u="015A" b="81 30 94 31"/>
+  <a u="015B" b="81 30 94 32"/>
+  <a u="015C" b="81 30 94 33"/>
+  <a u="015D" b="81 30 94 34"/>
+  <a u="015E" b="81 30 94 35"/>
+  <a u="015F" b="81 30 94 36"/>
+  <a u="0160" b="81 30 94 37"/>
+  <a u="0161" b="81 30 94 38"/>
+  <a u="0162" b="81 30 94 39"/>
+  <a u="0163" b="81 30 95 30"/>
+  <a u="0164" b="81 30 95 31"/>
+  <a u="0165" b="81 30 95 32"/>
+  <a u="0166" b="81 30 95 33"/>
+  <a u="0167" b="81 30 95 34"/>
+  <a u="0168" b="81 30 95 35"/>
+  <a u="0169" b="81 30 95 36"/>
+  <a u="016A" b="81 30 95 37"/>
+  <a u="016B" b="A8 B1"/>
+  <a u="016C" b="81 30 95 38"/>
+  <a u="016D" b="81 30 95 39"/>
+  <a u="016E" b="81 30 96 30"/>
+  <a u="016F" b="81 30 96 31"/>
+  <a u="0170" b="81 30 96 32"/>
+  <a u="0171" b="81 30 96 33"/>
+  <a u="0172" b="81 30 96 34"/>
+  <a u="0173" b="81 30 96 35"/>
+  <a u="0174" b="81 30 96 36"/>
+  <a u="0175" b="81 30 96 37"/>
+  <a u="0176" b="81 30 96 38"/>
+  <a u="0177" b="81 30 96 39"/>
+  <a u="0178" b="81 30 97 30"/>
+  <a u="0179" b="81 30 97 31"/>
+  <a u="017A" b="81 30 97 32"/>
+  <a u="017B" b="81 30 97 33"/>
+  <a u="017C" b="81 30 97 34"/>
+  <a u="017D" b="81 30 97 35"/>
+  <a u="017E" b="81 30 97 36"/>
+  <a u="017F" b="81 30 97 37"/>
+  <a u="0180" b="81 30 97 38"/>
+  <a u="0181" b="81 30 97 39"/>
+  <a u="0182" b="81 30 98 30"/>
+  <a u="0183" b="81 30 98 31"/>
+  <a u="0184" b="81 30 98 32"/>
+  <a u="0185" b="81 30 98 33"/>
+  <a u="0186" b="81 30 98 34"/>
+  <a u="0187" b="81 30 98 35"/>
+  <a u="0188" b="81 30 98 36"/>
+  <a u="0189" b="81 30 98 37"/>
+  <a u="018A" b="81 30 98 38"/>
+  <a u="018B" b="81 30 98 39"/>
+  <a u="018C" b="81 30 99 30"/>
+  <a u="018D" b="81 30 99 31"/>
+  <a u="018E" b="81 30 99 32"/>
+  <a u="018F" b="81 30 99 33"/>
+  <a u="0190" b="81 30 99 34"/>
+  <a u="0191" b="81 30 99 35"/>
+  <a u="0192" b="81 30 99 36"/>
+  <a u="0193" b="81 30 99 37"/>
+  <a u="0194" b="81 30 99 38"/>
+  <a u="0195" b="81 30 99 39"/>
+  <a u="0196" b="81 30 9A 30"/>
+  <a u="0197" b="81 30 9A 31"/>
+  <a u="0198" b="81 30 9A 32"/>
+  <a u="0199" b="81 30 9A 33"/>
+  <a u="019A" b="81 30 9A 34"/>
+  <a u="019B" b="81 30 9A 35"/>
+  <a u="019C" b="81 30 9A 36"/>
+  <a u="019D" b="81 30 9A 37"/>
+  <a u="019E" b="81 30 9A 38"/>
+  <a u="019F" b="81 30 9A 39"/>
+  <a u="01A0" b="81 30 9B 30"/>
+  <a u="01A1" b="81 30 9B 31"/>
+  <a u="01A2" b="81 30 9B 32"/>
+  <a u="01A3" b="81 30 9B 33"/>
+  <a u="01A4" b="81 30 9B 34"/>
+  <a u="01A5" b="81 30 9B 35"/>
+  <a u="01A6" b="81 30 9B 36"/>
+  <a u="01A7" b="81 30 9B 37"/>
+  <a u="01A8" b="81 30 9B 38"/>
+  <a u="01A9" b="81 30 9B 39"/>
+  <a u="01AA" b="81 30 9C 30"/>
+  <a u="01AB" b="81 30 9C 31"/>
+  <a u="01AC" b="81 30 9C 32"/>
+  <a u="01AD" b="81 30 9C 33"/>
+  <a u="01AE" b="81 30 9C 34"/>
+  <a u="01AF" b="81 30 9C 35"/>
+  <a u="01B0" b="81 30 9C 36"/>
+  <a u="01B1" b="81 30 9C 37"/>
+  <a u="01B2" b="81 30 9C 38"/>
+  <a u="01B3" b="81 30 9C 39"/>
+  <a u="01B4" b="81 30 9D 30"/>
+  <a u="01B5" b="81 30 9D 31"/>
+  <a u="01B6" b="81 30 9D 32"/>
+  <a u="01B7" b="81 30 9D 33"/>
+  <a u="01B8" b="81 30 9D 34"/>
+  <a u="01B9" b="81 30 9D 35"/>
+  <a u="01BA" b="81 30 9D 36"/>
+  <a u="01BB" b="81 30 9D 37"/>
+  <a u="01BC" b="81 30 9D 38"/>
+  <a u="01BD" b="81 30 9D 39"/>
+  <a u="01BE" b="81 30 9E 30"/>
+  <a u="01BF" b="81 30 9E 31"/>
+  <a u="01C0" b="81 30 9E 32"/>
+  <a u="01C1" b="81 30 9E 33"/>
+  <a u="01C2" b="81 30 9E 34"/>
+  <a u="01C3" b="81 30 9E 35"/>
+  <a u="01C4" b="81 30 9E 36"/>
+  <a u="01C5" b="81 30 9E 37"/>
+  <a u="01C6" b="81 30 9E 38"/>
+  <a u="01C7" b="81 30 9E 39"/>
+  <a u="01C8" b="81 30 9F 30"/>
+  <a u="01C9" b="81 30 9F 31"/>
+  <a u="01CA" b="81 30 9F 32"/>
+  <a u="01CB" b="81 30 9F 33"/>
+  <a u="01CC" b="81 30 9F 34"/>
+  <a u="01CD" b="81 30 9F 35"/>
+  <a u="01CE" b="A8 A3"/>
+  <a u="01CF" b="81 30 9F 36"/>
+  <a u="01D0" b="A8 AB"/>
+  <a u="01D1" b="81 30 9F 37"/>
+  <a u="01D2" b="A8 AF"/>
+  <a u="01D3" b="81 30 9F 38"/>
+  <a u="01D4" b="A8 B3"/>
+  <a u="01D5" b="81 30 9F 39"/>
+  <a u="01D6" b="A8 B5"/>
+  <a u="01D7" b="81 30 A0 30"/>
+  <a u="01D8" b="A8 B6"/>
+  <a u="01D9" b="81 30 A0 31"/>
+  <a u="01DA" b="A8 B7"/>
+  <a u="01DB" b="81 30 A0 32"/>
+  <a u="01DC" b="A8 B8"/>
+  <a u="01DD" b="81 30 A0 33"/>
+  <a u="01DE" b="81 30 A0 34"/>
+  <a u="01DF" b="81 30 A0 35"/>
+  <a u="01E0" b="81 30 A0 36"/>
+  <a u="01E1" b="81 30 A0 37"/>
+  <a u="01E2" b="81 30 A0 38"/>
+  <a u="01E3" b="81 30 A0 39"/>
+  <a u="01E4" b="81 30 A1 30"/>
+  <a u="01E5" b="81 30 A1 31"/>
+  <a u="01E6" b="81 30 A1 32"/>
+  <a u="01E7" b="81 30 A1 33"/>
+  <a u="01E8" b="81 30 A1 34"/>
+  <a u="01E9" b="81 30 A1 35"/>
+  <a u="01EA" b="81 30 A1 36"/>
+  <a u="01EB" b="81 30 A1 37"/>
+  <a u="01EC" b="81 30 A1 38"/>
+  <a u="01ED" b="81 30 A1 39"/>
+  <a u="01EE" b="81 30 A2 30"/>
+  <a u="01EF" b="81 30 A2 31"/>
+  <a u="01F0" b="81 30 A2 32"/>
+  <a u="01F1" b="81 30 A2 33"/>
+  <a u="01F2" b="81 30 A2 34"/>
+  <a u="01F3" b="81 30 A2 35"/>
+  <a u="01F4" b="81 30 A2 36"/>
+  <a u="01F5" b="81 30 A2 37"/>
+  <a u="01F6" b="81 30 A2 38"/>
+  <a u="01F7" b="81 30 A2 39"/>
+  <a u="01F8" b="81 30 A3 30"/>
+  <a u="01F9" b="A8 BF"/>
+  <a u="01FA" b="81 30 A3 31"/>
+  <a u="01FB" b="81 30 A3 32"/>
+  <a u="01FC" b="81 30 A3 33"/>
+  <a u="01FD" b="81 30 A3 34"/>
+  <a u="01FE" b="81 30 A3 35"/>
+  <a u="01FF" b="81 30 A3 36"/>
+  <a u="0200" b="81 30 A3 37"/>
+  <a u="0201" b="81 30 A3 38"/>
+  <a u="0202" b="81 30 A3 39"/>
+  <a u="0203" b="81 30 A4 30"/>
+  <a u="0204" b="81 30 A4 31"/>
+  <a u="0205" b="81 30 A4 32"/>
+  <a u="0206" b="81 30 A4 33"/>
+  <a u="0207" b="81 30 A4 34"/>
+  <a u="0208" b="81 30 A4 35"/>
+  <a u="0209" b="81 30 A4 36"/>
+  <a u="020A" b="81 30 A4 37"/>
+  <a u="020B" b="81 30 A4 38"/>
+  <a u="020C" b="81 30 A4 39"/>
+  <a u="020D" b="81 30 A5 30"/>
+  <a u="020E" b="81 30 A5 31"/>
+  <a u="020F" b="81 30 A5 32"/>
+  <a u="0210" b="81 30 A5 33"/>
+  <a u="0211" b="81 30 A5 34"/>
+  <a u="0212" b="81 30 A5 35"/>
+  <a u="0213" b="81 30 A5 36"/>
+  <a u="0214" b="81 30 A5 37"/>
+  <a u="0215" b="81 30 A5 38"/>
+  <a u="0216" b="81 30 A5 39"/>
+  <a u="0217" b="81 30 A6 30"/>
+  <a u="0218" b="81 30 A6 31"/>
+  <a u="0219" b="81 30 A6 32"/>
+  <a u="021A" b="81 30 A6 33"/>
+  <a u="021B" b="81 30 A6 34"/>
+  <a u="021C" b="81 30 A6 35"/>
+  <a u="021D" b="81 30 A6 36"/>
+  <a u="021E" b="81 30 A6 37"/>
+  <a u="021F" b="81 30 A6 38"/>
+  <a u="0220" b="81 30 A6 39"/>
+  <a u="0221" b="81 30 A7 30"/>
+  <a u="0222" b="81 30 A7 31"/>
+  <a u="0223" b="81 30 A7 32"/>
+  <a u="0224" b="81 30 A7 33"/>
+  <a u="0225" b="81 30 A7 34"/>
+  <a u="0226" b="81 30 A7 35"/>
+  <a u="0227" b="81 30 A7 36"/>
+  <a u="0228" b="81 30 A7 37"/>
+  <a u="0229" b="81 30 A7 38"/>
+  <a u="022A" b="81 30 A7 39"/>
+  <a u="022B" b="81 30 A8 30"/>
+  <a u="022C" b="81 30 A8 31"/>
+  <a u="022D" b="81 30 A8 32"/>
+  <a u="022E" b="81 30 A8 33"/>
+  <a u="022F" b="81 30 A8 34"/>
+  <a u="0230" b="81 30 A8 35"/>
+  <a u="0231" b="81 30 A8 36"/>
+  <a u="0232" b="81 30 A8 37"/>
+  <a u="0233" b="81 30 A8 38"/>
+  <a u="0234" b="81 30 A8 39"/>
+  <a u="0235" b="81 30 A9 30"/>
+  <a u="0236" b="81 30 A9 31"/>
+  <a u="0237" b="81 30 A9 32"/>
+  <a u="0238" b="81 30 A9 33"/>
+  <a u="0239" b="81 30 A9 34"/>
+  <a u="023A" b="81 30 A9 35"/>
+  <a u="023B" b="81 30 A9 36"/>
+  <a u="023C" b="81 30 A9 37"/>
+  <a u="023D" b="81 30 A9 38"/>
+  <a u="023E" b="81 30 A9 39"/>
+  <a u="023F" b="81 30 AA 30"/>
+  <a u="0240" b="81 30 AA 31"/>
+  <a u="0241" b="81 30 AA 32"/>
+  <a u="0242" b="81 30 AA 33"/>
+  <a u="0243" b="81 30 AA 34"/>
+  <a u="0244" b="81 30 AA 35"/>
+  <a u="0245" b="81 30 AA 36"/>
+  <a u="0246" b="81 30 AA 37"/>
+  <a u="0247" b="81 30 AA 38"/>
+  <a u="0248" b="81 30 AA 39"/>
+  <a u="0249" b="81 30 AB 30"/>
+  <a u="024A" b="81 30 AB 31"/>
+  <a u="024B" b="81 30 AB 32"/>
+  <a u="024C" b="81 30 AB 33"/>
+  <a u="024D" b="81 30 AB 34"/>
+  <a u="024E" b="81 30 AB 35"/>
+  <a u="024F" b="81 30 AB 36"/>
+  <a u="0250" b="81 30 AB 37"/>
+  <a u="0251" b="A8 BB"/>
+  <a u="0252" b="81 30 AB 38"/>
+  <a u="0253" b="81 30 AB 39"/>
+  <a u="0254" b="81 30 AC 30"/>
+  <a u="0255" b="81 30 AC 31"/>
+  <a u="0256" b="81 30 AC 32"/>
+  <a u="0257" b="81 30 AC 33"/>
+  <a u="0258" b="81 30 AC 34"/>
+  <a u="0259" b="81 30 AC 35"/>
+  <a u="025A" b="81 30 AC 36"/>
+  <a u="025B" b="81 30 AC 37"/>
+  <a u="025C" b="81 30 AC 38"/>
+  <a u="025D" b="81 30 AC 39"/>
+  <a u="025E" b="81 30 AD 30"/>
+  <a u="025F" b="81 30 AD 31"/>
+  <a u="0260" b="81 30 AD 32"/>
+  <a u="0261" b="A8 C0"/>
+  <a u="0262" b="81 30 AD 33"/>
+  <a u="0263" b="81 30 AD 34"/>
+  <a u="0264" b="81 30 AD 35"/>
+  <a u="0265" b="81 30 AD 36"/>
+  <a u="0266" b="81 30 AD 37"/>
+  <a u="0267" b="81 30 AD 38"/>
+  <a u="0268" b="81 30 AD 39"/>
+  <a u="0269" b="81 30 AE 30"/>
+  <a u="026A" b="81 30 AE 31"/>
+  <a u="026B" b="81 30 AE 32"/>
+  <a u="026C" b="81 30 AE 33"/>
+  <a u="026D" b="81 30 AE 34"/>
+  <a u="026E" b="81 30 AE 35"/>
+  <a u="026F" b="81 30 AE 36"/>
+  <a u="0270" b="81 30 AE 37"/>
+  <a u="0271" b="81 30 AE 38"/>
+  <a u="0272" b="81 30 AE 39"/>
+  <a u="0273" b="81 30 AF 30"/>
+  <a u="0274" b="81 30 AF 31"/>
+  <a u="0275" b="81 30 AF 32"/>
+  <a u="0276" b="81 30 AF 33"/>
+  <a u="0277" b="81 30 AF 34"/>
+  <a u="0278" b="81 30 AF 35"/>
+  <a u="0279" b="81 30 AF 36"/>
+  <a u="027A" b="81 30 AF 37"/>
+  <a u="027B" b="81 30 AF 38"/>
+  <a u="027C" b="81 30 AF 39"/>
+  <a u="027D" b="81 30 B0 30"/>
+  <a u="027E" b="81 30 B0 31"/>
+  <a u="027F" b="81 30 B0 32"/>
+  <a u="0280" b="81 30 B0 33"/>
+  <a u="0281" b="81 30 B0 34"/>
+  <a u="0282" b="81 30 B0 35"/>
+  <a u="0283" b="81 30 B0 36"/>
+  <a u="0284" b="81 30 B0 37"/>
+  <a u="0285" b="81 30 B0 38"/>
+  <a u="0286" b="81 30 B0 39"/>
+  <a u="0287" b="81 30 B1 30"/>
+  <a u="0288" b="81 30 B1 31"/>
+  <a u="0289" b="81 30 B1 32"/>
+  <a u="028A" b="81 30 B1 33"/>
+  <a u="028B" b="81 30 B1 34"/>
+  <a u="028C" b="81 30 B1 35"/>
+  <a u="028D" b="81 30 B1 36"/>
+  <a u="028E" b="81 30 B1 37"/>
+  <a u="028F" b="81 30 B1 38"/>
+  <a u="0290" b="81 30 B1 39"/>
+  <a u="0291" b="81 30 B2 30"/>
+  <a u="0292" b="81 30 B2 31"/>
+  <a u="0293" b="81 30 B2 32"/>
+  <a u="0294" b="81 30 B2 33"/>
+  <a u="0295" b="81 30 B2 34"/>
+  <a u="0296" b="81 30 B2 35"/>
+  <a u="0297" b="81 30 B2 36"/>
+  <a u="0298" b="81 30 B2 37"/>
+  <a u="0299" b="81 30 B2 38"/>
+  <a u="029A" b="81 30 B2 39"/>
+  <a u="029B" b="81 30 B3 30"/>
+  <a u="029C" b="81 30 B3 31"/>
+  <a u="029D" b="81 30 B3 32"/>
+  <a u="029E" b="81 30 B3 33"/>
+  <a u="029F" b="81 30 B3 34"/>
+  <a u="02A0" b="81 30 B3 35"/>
+  <a u="02A1" b="81 30 B3 36"/>
+  <a u="02A2" b="81 30 B3 37"/>
+  <a u="02A3" b="81 30 B3 38"/>
+  <a u="02A4" b="81 30 B3 39"/>
+  <a u="02A5" b="81 30 B4 30"/>
+  <a u="02A6" b="81 30 B4 31"/>
+  <a u="02A7" b="81 30 B4 32"/>
+  <a u="02A8" b="81 30 B4 33"/>
+  <a u="02A9" b="81 30 B4 34"/>
+  <a u="02AA" b="81 30 B4 35"/>
+  <a u="02AB" b="81 30 B4 36"/>
+  <a u="02AC" b="81 30 B4 37"/>
+  <a u="02AD" b="81 30 B4 38"/>
+  <a u="02AE" b="81 30 B4 39"/>
+  <a u="02AF" b="81 30 B5 30"/>
+  <a u="02B0" b="81 30 B5 31"/>
+  <a u="02B1" b="81 30 B5 32"/>
+  <a u="02B2" b="81 30 B5 33"/>
+  <a u="02B3" b="81 30 B5 34"/>
+  <a u="02B4" b="81 30 B5 35"/>
+  <a u="02B5" b="81 30 B5 36"/>
+  <a u="02B6" b="81 30 B5 37"/>
+  <a u="02B7" b="81 30 B5 38"/>
+  <a u="02B8" b="81 30 B5 39"/>
+  <a u="02B9" b="81 30 B6 30"/>
+  <a u="02BA" b="81 30 B6 31"/>
+  <a u="02BB" b="81 30 B6 32"/>
+  <a u="02BC" b="81 30 B6 33"/>
+  <a u="02BD" b="81 30 B6 34"/>
+  <a u="02BE" b="81 30 B6 35"/>
+  <a u="02BF" b="81 30 B6 36"/>
+  <a u="02C0" b="81 30 B6 37"/>
+  <a u="02C1" b="81 30 B6 38"/>
+  <a u="02C2" b="81 30 B6 39"/>
+  <a u="02C3" b="81 30 B7 30"/>
+  <a u="02C4" b="81 30 B7 31"/>
+  <a u="02C5" b="81 30 B7 32"/>
+  <a u="02C6" b="81 30 B7 33"/>
+  <a u="02C7" b="A1 A6"/>
+  <a u="02C8" b="81 30 B7 34"/>
+  <a u="02C9" b="A1 A5"/>
+  <a u="02CA" b="A8 40"/>
+  <a u="02CB" b="A8 41"/>
+  <a u="02CC" b="81 30 B7 35"/>
+  <a u="02CD" b="81 30 B7 36"/>
+  <a u="02CE" b="81 30 B7 37"/>
+  <a u="02CF" b="81 30 B7 38"/>
+  <a u="02D0" b="81 30 B7 39"/>
+  <a u="02D1" b="81 30 B8 30"/>
+  <a u="02D2" b="81 30 B8 31"/>
+  <a u="02D3" b="81 30 B8 32"/>
+  <a u="02D4" b="81 30 B8 33"/>
+  <a u="02D5" b="81 30 B8 34"/>
+  <a u="02D6" b="81 30 B8 35"/>
+  <a u="02D7" b="81 30 B8 36"/>
+  <a u="02D8" b="81 30 B8 37"/>
+  <a u="02D9" b="A8 42"/>
+  <a u="02DA" b="81 30 B8 38"/>
+  <a u="02DB" b="81 30 B8 39"/>
+  <a u="02DC" b="81 30 B9 30"/>
+  <a u="02DD" b="81 30 B9 31"/>
+  <a u="02DE" b="81 30 B9 32"/>
+  <a u="02DF" b="81 30 B9 33"/>
+  <a u="02E0" b="81 30 B9 34"/>
+  <a u="02E1" b="81 30 B9 35"/>
+  <a u="02E2" b="81 30 B9 36"/>
+  <a u="02E3" b="81 30 B9 37"/>
+  <a u="02E4" b="81 30 B9 38"/>
+  <a u="02E5" b="81 30 B9 39"/>
+  <a u="02E6" b="81 30 BA 30"/>
+  <a u="02E7" b="81 30 BA 31"/>
+  <a u="02E8" b="81 30 BA 32"/>
+  <a u="02E9" b="81 30 BA 33"/>
+  <a u="02EA" b="81 30 BA 34"/>
+  <a u="02EB" b="81 30 BA 35"/>
+  <a u="02EC" b="81 30 BA 36"/>
+  <a u="02ED" b="81 30 BA 37"/>
+  <a u="02EE" b="81 30 BA 38"/>
+  <a u="02EF" b="81 30 BA 39"/>
+  <a u="02F0" b="81 30 BB 30"/>
+  <a u="02F1" b="81 30 BB 31"/>
+  <a u="02F2" b="81 30 BB 32"/>
+  <a u="02F3" b="81 30 BB 33"/>
+  <a u="02F4" b="81 30 BB 34"/>
+  <a u="02F5" b="81 30 BB 35"/>
+  <a u="02F6" b="81 30 BB 36"/>
+  <a u="02F7" b="81 30 BB 37"/>
+  <a u="02F8" b="81 30 BB 38"/>
+  <a u="02F9" b="81 30 BB 39"/>
+  <a u="02FA" b="81 30 BC 30"/>
+  <a u="02FB" b="81 30 BC 31"/>
+  <a u="02FC" b="81 30 BC 32"/>
+  <a u="02FD" b="81 30 BC 33"/>
+  <a u="02FE" b="81 30 BC 34"/>
+  <a u="02FF" b="81 30 BC 35"/>
+  <a u="0300" b="81 30 BC 36"/>
+  <a u="0301" b="81 30 BC 37"/>
+  <a u="0302" b="81 30 BC 38"/>
+  <a u="0303" b="81 30 BC 39"/>
+  <a u="0304" b="81 30 BD 30"/>
+  <a u="0305" b="81 30 BD 31"/>
+  <a u="0306" b="81 30 BD 32"/>
+  <a u="0307" b="81 30 BD 33"/>
+  <a u="0308" b="81 30 BD 34"/>
+  <a u="0309" b="81 30 BD 35"/>
+  <a u="030A" b="81 30 BD 36"/>
+  <a u="030B" b="81 30 BD 37"/>
+  <a u="030C" b="81 30 BD 38"/>
+  <a u="030D" b="81 30 BD 39"/>
+  <a u="030E" b="81 30 BE 30"/>
+  <a u="030F" b="81 30 BE 31"/>
+  <a u="0310" b="81 30 BE 32"/>
+  <a u="0311" b="81 30 BE 33"/>
+  <a u="0312" b="81 30 BE 34"/>
+  <a u="0313" b="81 30 BE 35"/>
+  <a u="0314" b="81 30 BE 36"/>
+  <a u="0315" b="81 30 BE 37"/>
+  <a u="0316" b="81 30 BE 38"/>
+  <a u="0317" b="81 30 BE 39"/>
+  <a u="0318" b="81 30 BF 30"/>
+  <a u="0319" b="81 30 BF 31"/>
+  <a u="031A" b="81 30 BF 32"/>
+  <a u="031B" b="81 30 BF 33"/>
+  <a u="031C" b="81 30 BF 34"/>
+  <a u="031D" b="81 30 BF 35"/>
+  <a u="031E" b="81 30 BF 36"/>
+  <a u="031F" b="81 30 BF 37"/>
+  <a u="0320" b="81 30 BF 38"/>
+  <a u="0321" b="81 30 BF 39"/>
+  <a u="0322" b="81 30 C0 30"/>
+  <a u="0323" b="81 30 C0 31"/>
+  <a u="0324" b="81 30 C0 32"/>
+  <a u="0325" b="81 30 C0 33"/>
+  <a u="0326" b="81 30 C0 34"/>
+  <a u="0327" b="81 30 C0 35"/>
+  <a u="0328" b="81 30 C0 36"/>
+  <a u="0329" b="81 30 C0 37"/>
+  <a u="032A" b="81 30 C0 38"/>
+  <a u="032B" b="81 30 C0 39"/>
+  <a u="032C" b="81 30 C1 30"/>
+  <a u="032D" b="81 30 C1 31"/>
+  <a u="032E" b="81 30 C1 32"/>
+  <a u="032F" b="81 30 C1 33"/>
+  <a u="0330" b="81 30 C1 34"/>
+  <a u="0331" b="81 30 C1 35"/>
+  <a u="0332" b="81 30 C1 36"/>
+  <a u="0333" b="81 30 C1 37"/>
+  <a u="0334" b="81 30 C1 38"/>
+  <a u="0335" b="81 30 C1 39"/>
+  <a u="0336" b="81 30 C2 30"/>
+  <a u="0337" b="81 30 C2 31"/>
+  <a u="0338" b="81 30 C2 32"/>
+  <a u="0339" b="81 30 C2 33"/>
+  <a u="033A" b="81 30 C2 34"/>
+  <a u="033B" b="81 30 C2 35"/>
+  <a u="033C" b="81 30 C2 36"/>
+  <a u="033D" b="81 30 C2 37"/>
+  <a u="033E" b="81 30 C2 38"/>
+  <a u="033F" b="81 30 C2 39"/>
+  <a u="0340" b="81 30 C3 30"/>
+  <a u="0341" b="81 30 C3 31"/>
+  <a u="0342" b="81 30 C3 32"/>
+  <a u="0343" b="81 30 C3 33"/>
+  <a u="0344" b="81 30 C3 34"/>
+  <a u="0345" b="81 30 C3 35"/>
+  <a u="0346" b="81 30 C3 36"/>
+  <a u="0347" b="81 30 C3 37"/>
+  <a u="0348" b="81 30 C3 38"/>
+  <a u="0349" b="81 30 C3 39"/>
+  <a u="034A" b="81 30 C4 30"/>
+  <a u="034B" b="81 30 C4 31"/>
+  <a u="034C" b="81 30 C4 32"/>
+  <a u="034D" b="81 30 C4 33"/>
+  <a u="034E" b="81 30 C4 34"/>
+  <a u="034F" b="81 30 C4 35"/>
+  <a u="0350" b="81 30 C4 36"/>
+  <a u="0351" b="81 30 C4 37"/>
+  <a u="0352" b="81 30 C4 38"/>
+  <a u="0353" b="81 30 C4 39"/>
+  <a u="0354" b="81 30 C5 30"/>
+  <a u="0355" b="81 30 C5 31"/>
+  <a u="0356" b="81 30 C5 32"/>
+  <a u="0357" b="81 30 C5 33"/>
+  <a u="0358" b="81 30 C5 34"/>
+  <a u="0359" b="81 30 C5 35"/>
+  <a u="035A" b="81 30 C5 36"/>
+  <a u="035B" b="81 30 C5 37"/>
+  <a u="035C" b="81 30 C5 38"/>
+  <a u="035D" b="81 30 C5 39"/>
+  <a u="035E" b="81 30 C6 30"/>
+  <a u="035F" b="81 30 C6 31"/>
+  <a u="0360" b="81 30 C6 32"/>
+  <a u="0361" b="81 30 C6 33"/>
+  <a u="0362" b="81 30 C6 34"/>
+  <a u="0363" b="81 30 C6 35"/>
+  <a u="0364" b="81 30 C6 36"/>
+  <a u="0365" b="81 30 C6 37"/>
+  <a u="0366" b="81 30 C6 38"/>
+  <a u="0367" b="81 30 C6 39"/>
+  <a u="0368" b="81 30 C7 30"/>
+  <a u="0369" b="81 30 C7 31"/>
+  <a u="036A" b="81 30 C7 32"/>
+  <a u="036B" b="81 30 C7 33"/>
+  <a u="036C" b="81 30 C7 34"/>
+  <a u="036D" b="81 30 C7 35"/>
+  <a u="036E" b="81 30 C7 36"/>
+  <a u="036F" b="81 30 C7 37"/>
+  <a u="0370" b="81 30 C7 38"/>
+  <a u="0371" b="81 30 C7 39"/>
+  <a u="0372" b="81 30 C8 30"/>
+  <a u="0373" b="81 30 C8 31"/>
+  <a u="0374" b="81 30 C8 32"/>
+  <a u="0375" b="81 30 C8 33"/>
+  <a u="0376" b="81 30 C8 34"/>
+  <a u="0377" b="81 30 C8 35"/>
+  <a u="0378" b="81 30 C8 36"/>
+  <a u="0379" b="81 30 C8 37"/>
+  <a u="037A" b="81 30 C8 38"/>
+  <a u="037B" b="81 30 C8 39"/>
+  <a u="037C" b="81 30 C9 30"/>
+  <a u="037D" b="81 30 C9 31"/>
+  <a u="037E" b="81 30 C9 32"/>
+  <a u="037F" b="81 30 C9 33"/>
+  <a u="0380" b="81 30 C9 34"/>
+  <a u="0381" b="81 30 C9 35"/>
+  <a u="0382" b="81 30 C9 36"/>
+  <a u="0383" b="81 30 C9 37"/>
+  <a u="0384" b="81 30 C9 38"/>
+  <a u="0385" b="81 30 C9 39"/>
+  <a u="0386" b="81 30 CA 30"/>
+  <a u="0387" b="81 30 CA 31"/>
+  <a u="0388" b="81 30 CA 32"/>
+  <a u="0389" b="81 30 CA 33"/>
+  <a u="038A" b="81 30 CA 34"/>
+  <a u="038B" b="81 30 CA 35"/>
+  <a u="038C" b="81 30 CA 36"/>
+  <a u="038D" b="81 30 CA 37"/>
+  <a u="038E" b="81 30 CA 38"/>
+  <a u="038F" b="81 30 CA 39"/>
+  <a u="0390" b="81 30 CB 30"/>
+  <a u="0391" b="A6 A1"/>
+  <a u="0392" b="A6 A2"/>
+  <a u="0393" b="A6 A3"/>
+  <a u="0394" b="A6 A4"/>
+  <a u="0395" b="A6 A5"/>
+  <a u="0396" b="A6 A6"/>
+  <a u="0397" b="A6 A7"/>
+  <a u="0398" b="A6 A8"/>
+  <a u="0399" b="A6 A9"/>
+  <a u="039A" b="A6 AA"/>
+  <a u="039B" b="A6 AB"/>
+  <a u="039C" b="A6 AC"/>
+  <a u="039D" b="A6 AD"/>
+  <a u="039E" b="A6 AE"/>
+  <a u="039F" b="A6 AF"/>
+  <a u="03A0" b="A6 B0"/>
+  <a u="03A1" b="A6 B1"/>
+  <a u="03A2" b="81 30 CB 31"/>
+  <a u="03A3" b="A6 B2"/>
+  <a u="03A4" b="A6 B3"/>
+  <a u="03A5" b="A6 B4"/>
+  <a u="03A6" b="A6 B5"/>
+  <a u="03A7" b="A6 B6"/>
+  <a u="03A8" b="A6 B7"/>
+  <a u="03A9" b="A6 B8"/>
+  <a u="03AA" b="81 30 CB 32"/>
+  <a u="03AB" b="81 30 CB 33"/>
+  <a u="03AC" b="81 30 CB 34"/>
+  <a u="03AD" b="81 30 CB 35"/>
+  <a u="03AE" b="81 30 CB 36"/>
+  <a u="03AF" b="81 30 CB 37"/>
+  <a u="03B0" b="81 30 CB 38"/>
+  <a u="03B1" b="A6 C1"/>
+  <a u="03B2" b="A6 C2"/>
+  <a u="03B3" b="A6 C3"/>
+  <a u="03B4" b="A6 C4"/>
+  <a u="03B5" b="A6 C5"/>
+  <a u="03B6" b="A6 C6"/>
+  <a u="03B7" b="A6 C7"/>
+  <a u="03B8" b="A6 C8"/>
+  <a u="03B9" b="A6 C9"/>
+  <a u="03BA" b="A6 CA"/>
+  <a u="03BB" b="A6 CB"/>
+  <a u="03BC" b="A6 CC"/>
+  <a u="03BD" b="A6 CD"/>
+  <a u="03BE" b="A6 CE"/>
+  <a u="03BF" b="A6 CF"/>
+  <a u="03C0" b="A6 D0"/>
+  <a u="03C1" b="A6 D1"/>
+  <a u="03C2" b="81 30 CB 39"/>
+  <a u="03C3" b="A6 D2"/>
+  <a u="03C4" b="A6 D3"/>
+  <a u="03C5" b="A6 D4"/>
+  <a u="03C6" b="A6 D5"/>
+  <a u="03C7" b="A6 D6"/>
+  <a u="03C8" b="A6 D7"/>
+  <a u="03C9" b="A6 D8"/>
+  <a u="03CA" b="81 30 CC 30"/>
+  <a u="03CB" b="81 30 CC 31"/>
+  <a u="03CC" b="81 30 CC 32"/>
+  <a u="03CD" b="81 30 CC 33"/>
+  <a u="03CE" b="81 30 CC 34"/>
+  <a u="03CF" b="81 30 CC 35"/>
+  <a u="03D0" b="81 30 CC 36"/>
+  <a u="03D1" b="81 30 CC 37"/>
+  <a u="03D2" b="81 30 CC 38"/>
+  <a u="03D3" b="81 30 CC 39"/>
+  <a u="03D4" b="81 30 CD 30"/>
+  <a u="03D5" b="81 30 CD 31"/>
+  <a u="03D6" b="81 30 CD 32"/>
+  <a u="03D7" b="81 30 CD 33"/>
+  <a u="03D8" b="81 30 CD 34"/>
+  <a u="03D9" b="81 30 CD 35"/>
+  <a u="03DA" b="81 30 CD 36"/>
+  <a u="03DB" b="81 30 CD 37"/>
+  <a u="03DC" b="81 30 CD 38"/>
+  <a u="03DD" b="81 30 CD 39"/>
+  <a u="03DE" b="81 30 CE 30"/>
+  <a u="03DF" b="81 30 CE 31"/>
+  <a u="03E0" b="81 30 CE 32"/>
+  <a u="03E1" b="81 30 CE 33"/>
+  <a u="03E2" b="81 30 CE 34"/>
+  <a u="03E3" b="81 30 CE 35"/>
+  <a u="03E4" b="81 30 CE 36"/>
+  <a u="03E5" b="81 30 CE 37"/>
+  <a u="03E6" b="81 30 CE 38"/>
+  <a u="03E7" b="81 30 CE 39"/>
+  <a u="03E8" b="81 30 CF 30"/>
+  <a u="03E9" b="81 30 CF 31"/>
+  <a u="03EA" b="81 30 CF 32"/>
+  <a u="03EB" b="81 30 CF 33"/>
+  <a u="03EC" b="81 30 CF 34"/>
+  <a u="03ED" b="81 30 CF 35"/>
+  <a u="03EE" b="81 30 CF 36"/>
+  <a u="03EF" b="81 30 CF 37"/>
+  <a u="03F0" b="81 30 CF 38"/>
+  <a u="03F1" b="81 30 CF 39"/>
+  <a u="03F2" b="81 30 D0 30"/>
+  <a u="03F3" b="81 30 D0 31"/>
+  <a u="03F4" b="81 30 D0 32"/>
+  <a u="03F5" b="81 30 D0 33"/>
+  <a u="03F6" b="81 30 D0 34"/>
+  <a u="03F7" b="81 30 D0 35"/>
+  <a u="03F8" b="81 30 D0 36"/>
+  <a u="03F9" b="81 30 D0 37"/>
+  <a u="03FA" b="81 30 D0 38"/>
+  <a u="03FB" b="81 30 D0 39"/>
+  <a u="03FC" b="81 30 D1 30"/>
+  <a u="03FD" b="81 30 D1 31"/>
+  <a u="03FE" b="81 30 D1 32"/>
+  <a u="03FF" b="81 30 D1 33"/>
+  <a u="0400" b="81 30 D1 34"/>
+  <a u="0401" b="A7 A7"/>
+  <a u="0402" b="81 30 D1 35"/>
+  <a u="0403" b="81 30 D1 36"/>
+  <a u="0404" b="81 30 D1 37"/>
+  <a u="0405" b="81 30 D1 38"/>
+  <a u="0406" b="81 30 D1 39"/>
+  <a u="0407" b="81 30 D2 30"/>
+  <a u="0408" b="81 30 D2 31"/>
+  <a u="0409" b="81 30 D2 32"/>
+  <a u="040A" b="81 30 D2 33"/>
+  <a u="040B" b="81 30 D2 34"/>
+  <a u="040C" b="81 30 D2 35"/>
+  <a u="040D" b="81 30 D2 36"/>
+  <a u="040E" b="81 30 D2 37"/>
+  <a u="040F" b="81 30 D2 38"/>
+  <a u="0410" b="A7 A1"/>
+  <a u="0411" b="A7 A2"/>
+  <a u="0412" b="A7 A3"/>
+  <a u="0413" b="A7 A4"/>
+  <a u="0414" b="A7 A5"/>
+  <a u="0415" b="A7 A6"/>
+  <a u="0416" b="A7 A8"/>
+  <a u="0417" b="A7 A9"/>
+  <a u="0418" b="A7 AA"/>
+  <a u="0419" b="A7 AB"/>
+  <a u="041A" b="A7 AC"/>
+  <a u="041B" b="A7 AD"/>
+  <a u="041C" b="A7 AE"/>
+  <a u="041D" b="A7 AF"/>
+  <a u="041E" b="A7 B0"/>
+  <a u="041F" b="A7 B1"/>
+  <a u="0420" b="A7 B2"/>
+  <a u="0421" b="A7 B3"/>
+  <a u="0422" b="A7 B4"/>
+  <a u="0423" b="A7 B5"/>
+  <a u="0424" b="A7 B6"/>
+  <a u="0425" b="A7 B7"/>
+  <a u="0426" b="A7 B8"/>
+  <a u="0427" b="A7 B9"/>
+  <a u="0428" b="A7 BA"/>
+  <a u="0429" b="A7 BB"/>
+  <a u="042A" b="A7 BC"/>
+  <a u="042B" b="A7 BD"/>
+  <a u="042C" b="A7 BE"/>
+  <a u="042D" b="A7 BF"/>
+  <a u="042E" b="A7 C0"/>
+  <a u="042F" b="A7 C1"/>
+  <a u="0430" b="A7 D1"/>
+  <a u="0431" b="A7 D2"/>
+  <a u="0432" b="A7 D3"/>
+  <a u="0433" b="A7 D4"/>
+  <a u="0434" b="A7 D5"/>
+  <a u="0435" b="A7 D6"/>
+  <a u="0436" b="A7 D8"/>
+  <a u="0437" b="A7 D9"/>
+  <a u="0438" b="A7 DA"/>
+  <a u="0439" b="A7 DB"/>
+  <a u="043A" b="A7 DC"/>
+  <a u="043B" b="A7 DD"/>
+  <a u="043C" b="A7 DE"/>
+  <a u="043D" b="A7 DF"/>
+  <a u="043E" b="A7 E0"/>
+  <a u="043F" b="A7 E1"/>
+  <a u="0440" b="A7 E2"/>
+  <a u="0441" b="A7 E3"/>
+  <a u="0442" b="A7 E4"/>
+  <a u="0443" b="A7 E5"/>
+  <a u="0444" b="A7 E6"/>
+  <a u="0445" b="A7 E7"/>
+  <a u="0446" b="A7 E8"/>
+  <a u="0447" b="A7 E9"/>
+  <a u="0448" b="A7 EA"/>
+  <a u="0449" b="A7 EB"/>
+  <a u="044A" b="A7 EC"/>
+  <a u="044B" b="A7 ED"/>
+  <a u="044C" b="A7 EE"/>
+  <a u="044D" b="A7 EF"/>
+  <a u="044E" b="A7 F0"/>
+  <a u="044F" b="A7 F1"/>
+  <a u="0450" b="81 30 D2 39"/>
+  <a u="0451" b="A7 D7"/>
+  <a u="2010" b="A9 5C"/>
+  <a u="2011" b="81 36 A5 32"/>
+  <a u="2012" b="81 36 A5 33"/>
+  <a u="2013" b="A8 43"/>
+  <a u="2014" b="A1 AA"/>
+  <a u="2015" b="A8 44"/>
+  <a u="2016" b="A1 AC"/>
+  <a u="2017" b="81 36 A5 34"/>
+  <a u="2018" b="A1 AE"/>
+  <a u="2019" b="A1 AF"/>
+  <a u="201A" b="81 36 A5 35"/>
+  <a u="201B" b="81 36 A5 36"/>
+  <a u="201C" b="A1 B0"/>
+  <a u="201D" b="A1 B1"/>
+  <a u="201E" b="81 36 A5 37"/>
+  <a u="201F" b="81 36 A5 38"/>
+  <a u="2020" b="81 36 A5 39"/>
+  <a u="2021" b="81 36 A6 30"/>
+  <a u="2022" b="81 36 A6 31"/>
+  <a u="2023" b="81 36 A6 32"/>
+  <a u="2024" b="81 36 A6 33"/>
+  <a u="2025" b="A8 45"/>
+  <a u="2026" b="A1 AD"/>
+  <a u="2027" b="81 36 A6 34"/>
+  <a u="2028" b="81 36 A6 35"/>
+  <a u="2029" b="81 36 A6 36"/>
+  <a u="202A" b="81 36 A6 37"/>
+  <a u="202B" b="81 36 A6 38"/>
+  <a u="202C" b="81 36 A6 39"/>
+  <a u="202D" b="81 36 A7 30"/>
+  <a u="202E" b="81 36 A7 31"/>
+  <a u="202F" b="81 36 A7 32"/>
+  <a u="2030" b="A1 EB"/>
+  <a u="2031" b="81 36 A7 33"/>
+  <a u="2032" b="A1 E4"/>
+  <a u="2033" b="A1 E5"/>
+  <a u="2034" b="81 36 A7 34"/>
+  <a u="2035" b="A8 46"/>
+  <a u="2036" b="81 36 A7 35"/>
+  <a u="2037" b="81 36 A7 36"/>
+  <a u="2038" b="81 36 A7 37"/>
+  <a u="2039" b="81 36 A7 38"/>
+  <a u="203A" b="81 36 A7 39"/>
+  <a u="203B" b="A1 F9"/>
+  <a u="203C" b="81 36 A8 30"/>
+  <a u="203D" b="81 36 A8 31"/>
+  <a u="203E" b="81 36 A8 32"/>
+  <a u="203F" b="81 36 A8 33"/>
+  <a u="2040" b="81 36 A8 34"/>
+  <a u="2041" b="81 36 A8 35"/>
+  <a u="2042" b="81 36 A8 36"/>
+  <a u="2043" b="81 36 A8 37"/>
+  <a u="2044" b="81 36 A8 38"/>
+  <a u="2045" b="81 36 A8 39"/>
+  <a u="2046" b="81 36 A9 30"/>
+  <a u="2047" b="81 36 A9 31"/>
+  <a u="2048" b="81 36 A9 32"/>
+  <a u="2049" b="81 36 A9 33"/>
+  <a u="204A" b="81 36 A9 34"/>
+  <a u="204B" b="81 36 A9 35"/>
+  <a u="204C" b="81 36 A9 36"/>
+  <a u="204D" b="81 36 A9 37"/>
+  <a u="204E" b="81 36 A9 38"/>
+  <a u="204F" b="81 36 A9 39"/>
+  <a u="2050" b="81 36 AA 30"/>
+  <a u="2051" b="81 36 AA 31"/>
+  <a u="2052" b="81 36 AA 32"/>
+  <a u="2053" b="81 36 AA 33"/>
+  <a u="2054" b="81 36 AA 34"/>
+  <a u="2055" b="81 36 AA 35"/>
+  <a u="2056" b="81 36 AA 36"/>
+  <a u="2057" b="81 36 AA 37"/>
+  <a u="2058" b="81 36 AA 38"/>
+  <a u="2059" b="81 36 AA 39"/>
+  <a u="205A" b="81 36 AB 30"/>
+  <a u="205B" b="81 36 AB 31"/>
+  <a u="205C" b="81 36 AB 32"/>
+  <a u="205D" b="81 36 AB 33"/>
+  <a u="205E" b="81 36 AB 34"/>
+  <a u="205F" b="81 36 AB 35"/>
+  <a u="2060" b="81 36 AB 36"/>
+  <a u="2061" b="81 36 AB 37"/>
+  <a u="2062" b="81 36 AB 38"/>
+  <a u="2063" b="81 36 AB 39"/>
+  <a u="2064" b="81 36 AC 30"/>
+  <a u="2065" b="81 36 AC 31"/>
+  <a u="2066" b="81 36 AC 32"/>
+  <a u="2067" b="81 36 AC 33"/>
+  <a u="2068" b="81 36 AC 34"/>
+  <a u="2069" b="81 36 AC 35"/>
+  <a u="206A" b="81 36 AC 36"/>
+  <a u="206B" b="81 36 AC 37"/>
+  <a u="206C" b="81 36 AC 38"/>
+  <a u="206D" b="81 36 AC 39"/>
+  <a u="206E" b="81 36 AD 30"/>
+  <a u="206F" b="81 36 AD 31"/>
+  <a u="2070" b="81 36 AD 32"/>
+  <a u="2071" b="81 36 AD 33"/>
+  <a u="2072" b="81 36 AD 34"/>
+  <a u="2073" b="81 36 AD 35"/>
+  <a u="2074" b="81 36 AD 36"/>
+  <a u="2075" b="81 36 AD 37"/>
+  <a u="2076" b="81 36 AD 38"/>
+  <a u="2077" b="81 36 AD 39"/>
+  <a u="2078" b="81 36 AE 30"/>
+  <a u="2079" b="81 36 AE 31"/>
+  <a u="207A" b="81 36 AE 32"/>
+  <a u="207B" b="81 36 AE 33"/>
+  <a u="207C" b="81 36 AE 34"/>
+  <a u="207D" b="81 36 AE 35"/>
+  <a u="207E" b="81 36 AE 36"/>
+  <a u="207F" b="81 36 AE 37"/>
+  <a u="2080" b="81 36 AE 38"/>
+  <a u="2081" b="81 36 AE 39"/>
+  <a u="2082" b="81 36 AF 30"/>
+  <a u="2083" b="81 36 AF 31"/>
+  <a u="2084" b="81 36 AF 32"/>
+  <a u="2085" b="81 36 AF 33"/>
+  <a u="2086" b="81 36 AF 34"/>
+  <a u="2087" b="81 36 AF 35"/>
+  <a u="2088" b="81 36 AF 36"/>
+  <a u="2089" b="81 36 AF 37"/>
+  <a u="208A" b="81 36 AF 38"/>
+  <a u="208B" b="81 36 AF 39"/>
+  <a u="208C" b="81 36 B0 30"/>
+  <a u="208D" b="81 36 B0 31"/>
+  <a u="208E" b="81 36 B0 32"/>
+  <a u="208F" b="81 36 B0 33"/>
+  <a u="2090" b="81 36 B0 34"/>
+  <a u="2091" b="81 36 B0 35"/>
+  <a u="2092" b="81 36 B0 36"/>
+  <a u="2093" b="81 36 B0 37"/>
+  <a u="2094" b="81 36 B0 38"/>
+  <a u="2095" b="81 36 B0 39"/>
+  <a u="2096" b="81 36 B1 30"/>
+  <a u="2097" b="81 36 B1 31"/>
+  <a u="2098" b="81 36 B1 32"/>
+  <a u="2099" b="81 36 B1 33"/>
+  <a u="209A" b="81 36 B1 34"/>
+  <a u="209B" b="81 36 B1 35"/>
+  <a u="209C" b="81 36 B1 36"/>
+  <a u="209D" b="81 36 B1 37"/>
+  <a u="209E" b="81 36 B1 38"/>
+  <a u="209F" b="81 36 B1 39"/>
+  <a u="20A0" b="81 36 B2 30"/>
+  <a u="20A1" b="81 36 B2 31"/>
+  <a u="20A2" b="81 36 B2 32"/>
+  <a u="20A3" b="81 36 B2 33"/>
+  <a u="20A4" b="81 36 B2 34"/>
+  <a u="20A5" b="81 36 B2 35"/>
+  <a u="20A6" b="81 36 B2 36"/>
+  <a u="20A7" b="81 36 B2 37"/>
+  <a u="20A8" b="81 36 B2 38"/>
+  <a u="20A9" b="81 36 B2 39"/>
+  <a u="20AA" b="81 36 B3 30"/>
+  <a u="20AB" b="81 36 B3 31"/>
+  <a u="20AC" b="A2 E3"/>
+  <a u="20AD" b="81 36 B3 32"/>
+  <a u="20AE" b="81 36 B3 33"/>
+  <a u="20AF" b="81 36 B3 34"/>
+  <a u="20B0" b="81 36 B3 35"/>
+  <a u="20B1" b="81 36 B3 36"/>
+  <a u="20B2" b="81 36 B3 37"/>
+  <a u="20B3" b="81 36 B3 38"/>
+  <a u="20B4" b="81 36 B3 39"/>
+  <a u="20B5" b="81 36 B4 30"/>
+  <a u="20B6" b="81 36 B4 31"/>
+  <a u="20B7" b="81 36 B4 32"/>
+  <a u="20B8" b="81 36 B4 33"/>
+  <a u="20B9" b="81 36 B4 34"/>
+  <a u="20BA" b="81 36 B4 35"/>
+  <a u="20BB" b="81 36 B4 36"/>
+  <a u="20BC" b="81 36 B4 37"/>
+  <a u="20BD" b="81 36 B4 38"/>
+  <a u="20BE" b="81 36 B4 39"/>
+  <a u="20BF" b="81 36 B5 30"/>
+  <a u="20C0" b="81 36 B5 31"/>
+  <a u="20C1" b="81 36 B5 32"/>
+  <a u="20C2" b="81 36 B5 33"/>
+  <a u="20C3" b="81 36 B5 34"/>
+  <a u="20C4" b="81 36 B5 35"/>
+  <a u="20C5" b="81 36 B5 36"/>
+  <a u="20C6" b="81 36 B5 37"/>
+  <a u="20C7" b="81 36 B5 38"/>
+  <a u="20C8" b="81 36 B5 39"/>
+  <a u="20C9" b="81 36 B6 30"/>
+  <a u="20CA" b="81 36 B6 31"/>
+  <a u="20CB" b="81 36 B6 32"/>
+  <a u="20CC" b="81 36 B6 33"/>
+  <a u="20CD" b="81 36 B6 34"/>
+  <a u="20CE" b="81 36 B6 35"/>
+  <a u="20CF" b="81 36 B6 36"/>
+  <a u="20D0" b="81 36 B6 37"/>
+  <a u="20D1" b="81 36 B6 38"/>
+  <a u="20D2" b="81 36 B6 39"/>
+  <a u="20D3" b="81 36 B7 30"/>
+  <a u="20D4" b="81 36 B7 31"/>
+  <a u="20D5" b="81 36 B7 32"/>
+  <a u="20D6" b="81 36 B7 33"/>
+  <a u="20D7" b="81 36 B7 34"/>
+  <a u="20D8" b="81 36 B7 35"/>
+  <a u="20D9" b="81 36 B7 36"/>
+  <a u="20DA" b="81 36 B7 37"/>
+  <a u="20DB" b="81 36 B7 38"/>
+  <a u="20DC" b="81 36 B7 39"/>
+  <a u="20DD" b="81 36 B8 30"/>
+  <a u="20DE" b="81 36 B8 31"/>
+  <a u="20DF" b="81 36 B8 32"/>
+  <a u="20E0" b="81 36 B8 33"/>
+  <a u="20E1" b="81 36 B8 34"/>
+  <a u="20E2" b="81 36 B8 35"/>
+  <a u="20E3" b="81 36 B8 36"/>
+  <a u="20E4" b="81 36 B8 37"/>
+  <a u="20E5" b="81 36 B8 38"/>
+  <a u="20E6" b="81 36 B8 39"/>
+  <a u="20E7" b="81 36 B9 30"/>
+  <a u="20E8" b="81 36 B9 31"/>
+  <a u="20E9" b="81 36 B9 32"/>
+  <a u="20EA" b="81 36 B9 33"/>
+  <a u="20EB" b="81 36 B9 34"/>
+  <a u="20EC" b="81 36 B9 35"/>
+  <a u="20ED" b="81 36 B9 36"/>
+  <a u="20EE" b="81 36 B9 37"/>
+  <a u="20EF" b="81 36 B9 38"/>
+  <a u="20F0" b="81 36 B9 39"/>
+  <a u="20F1" b="81 36 BA 30"/>
+  <a u="20F2" b="81 36 BA 31"/>
+  <a u="20F3" b="81 36 BA 32"/>
+  <a u="20F4" b="81 36 BA 33"/>
+  <a u="20F5" b="81 36 BA 34"/>
+  <a u="20F6" b="81 36 BA 35"/>
+  <a u="20F7" b="81 36 BA 36"/>
+  <a u="20F8" b="81 36 BA 37"/>
+  <a u="20F9" b="81 36 BA 38"/>
+  <a u="20FA" b="81 36 BA 39"/>
+  <a u="20FB" b="81 36 BB 30"/>
+  <a u="20FC" b="81 36 BB 31"/>
+  <a u="20FD" b="81 36 BB 32"/>
+  <a u="20FE" b="81 36 BB 33"/>
+  <a u="20FF" b="81 36 BB 34"/>
+  <a u="2100" b="81 36 BB 35"/>
+  <a u="2101" b="81 36 BB 36"/>
+  <a u="2102" b="81 36 BB 37"/>
+  <a u="2103" b="A1 E6"/>
+  <a u="2104" b="81 36 BB 38"/>
+  <a u="2105" b="A8 47"/>
+  <a u="2106" b="81 36 BB 39"/>
+  <a u="2107" b="81 36 BC 30"/>
+  <a u="2108" b="81 36 BC 31"/>
+  <a u="2109" b="A8 48"/>
+  <a u="210A" b="81 36 BC 32"/>
+  <a u="210B" b="81 36 BC 33"/>
+  <a u="210C" b="81 36 BC 34"/>
+  <a u="210D" b="81 36 BC 35"/>
+  <a u="210E" b="81 36 BC 36"/>
+  <a u="210F" b="81 36 BC 37"/>
+  <a u="2110" b="81 36 BC 38"/>
+  <a u="2111" b="81 36 BC 39"/>
+  <a u="2112" b="81 36 BD 30"/>
+  <a u="2113" b="81 36 BD 31"/>
+  <a u="2114" b="81 36 BD 32"/>
+  <a u="2115" b="81 36 BD 33"/>
+  <a u="2116" b="A1 ED"/>
+  <a u="2117" b="81 36 BD 34"/>
+  <a u="2118" b="81 36 BD 35"/>
+  <a u="2119" b="81 36 BD 36"/>
+  <a u="211A" b="81 36 BD 37"/>
+  <a u="211B" b="81 36 BD 38"/>
+  <a u="211C" b="81 36 BD 39"/>
+  <a u="211D" b="81 36 BE 30"/>
+  <a u="211E" b="81 36 BE 31"/>
+  <a u="211F" b="81 36 BE 32"/>
+  <a u="2120" b="81 36 BE 33"/>
+  <a u="2121" b="A9 59"/>
+  <a u="2122" b="81 36 BE 34"/>
+  <a u="2123" b="81 36 BE 35"/>
+  <a u="2124" b="81 36 BE 36"/>
+  <a u="2125" b="81 36 BE 37"/>
+  <a u="2126" b="81 36 BE 38"/>
+  <a u="2127" b="81 36 BE 39"/>
+  <a u="2128" b="81 36 BF 30"/>
+  <a u="2129" b="81 36 BF 31"/>
+  <a u="212A" b="81 36 BF 32"/>
+  <a u="212B" b="81 36 BF 33"/>
+  <a u="212C" b="81 36 BF 34"/>
+  <a u="212D" b="81 36 BF 35"/>
+  <a u="212E" b="81 36 BF 36"/>
+  <a u="212F" b="81 36 BF 37"/>
+  <a u="2130" b="81 36 BF 38"/>
+  <a u="2131" b="81 36 BF 39"/>
+  <a u="2132" b="81 36 C0 30"/>
+  <a u="2133" b="81 36 C0 31"/>
+  <a u="2134" b="81 36 C0 32"/>
+  <a u="2135" b="81 36 C0 33"/>
+  <a u="2136" b="81 36 C0 34"/>
+  <a u="2137" b="81 36 C0 35"/>
+  <a u="2138" b="81 36 C0 36"/>
+  <a u="2139" b="81 36 C0 37"/>
+  <a u="213A" b="81 36 C0 38"/>
+  <a u="213B" b="81 36 C0 39"/>
+  <a u="213C" b="81 36 C1 30"/>
+  <a u="213D" b="81 36 C1 31"/>
+  <a u="213E" b="81 36 C1 32"/>
+  <a u="213F" b="81 36 C1 33"/>
+  <a u="2140" b="81 36 C1 34"/>
+  <a u="2141" b="81 36 C1 35"/>
+  <a u="2142" b="81 36 C1 36"/>
+  <a u="2143" b="81 36 C1 37"/>
+  <a u="2144" b="81 36 C1 38"/>
+  <a u="2145" b="81 36 C1 39"/>
+  <a u="2146" b="81 36 C2 30"/>
+  <a u="2147" b="81 36 C2 31"/>
+  <a u="2148" b="81 36 C2 32"/>
+  <a u="2149" b="81 36 C2 33"/>
+  <a u="214A" b="81 36 C2 34"/>
+  <a u="214B" b="81 36 C2 35"/>
+  <a u="214C" b="81 36 C2 36"/>
+  <a u="214D" b="81 36 C2 37"/>
+  <a u="214E" b="81 36 C2 38"/>
+  <a u="214F" b="81 36 C2 39"/>
+  <a u="2150" b="81 36 C3 30"/>
+  <a u="2151" b="81 36 C3 31"/>
+  <a u="2152" b="81 36 C3 32"/>
+  <a u="2153" b="81 36 C3 33"/>
+  <a u="2154" b="81 36 C3 34"/>
+  <a u="2155" b="81 36 C3 35"/>
+  <a u="2156" b="81 36 C3 36"/>
+  <a u="2157" b="81 36 C3 37"/>
+  <a u="2158" b="81 36 C3 38"/>
+  <a u="2159" b="81 36 C3 39"/>
+  <a u="215A" b="81 36 C4 30"/>
+  <a u="215B" b="81 36 C4 31"/>
+  <a u="215C" b="81 36 C4 32"/>
+  <a u="215D" b="81 36 C4 33"/>
+  <a u="215E" b="81 36 C4 34"/>
+  <a u="215F" b="81 36 C4 35"/>
+  <a u="2160" b="A2 F1"/>
+  <a u="2161" b="A2 F2"/>
+  <a u="2162" b="A2 F3"/>
+  <a u="2163" b="A2 F4"/>
+  <a u="2164" b="A2 F5"/>
+  <a u="2165" b="A2 F6"/>
+  <a u="2166" b="A2 F7"/>
+  <a u="2167" b="A2 F8"/>
+  <a u="2168" b="A2 F9"/>
+  <a u="2169" b="A2 FA"/>
+  <a u="216A" b="A2 FB"/>
+  <a u="216B" b="A2 FC"/>
+  <a u="216C" b="81 36 C4 36"/>
+  <a u="216D" b="81 36 C4 37"/>
+  <a u="216E" b="81 36 C4 38"/>
+  <a u="216F" b="81 36 C4 39"/>
+  <a u="2170" b="A2 A1"/>
+  <a u="2171" b="A2 A2"/>
+  <a u="2172" b="A2 A3"/>
+  <a u="2173" b="A2 A4"/>
+  <a u="2174" b="A2 A5"/>
+  <a u="2175" b="A2 A6"/>
+  <a u="2176" b="A2 A7"/>
+  <a u="2177" b="A2 A8"/>
+  <a u="2178" b="A2 A9"/>
+  <a u="2179" b="A2 AA"/>
+  <a u="217A" b="81 36 C5 30"/>
+  <a u="217B" b="81 36 C5 31"/>
+  <a u="217C" b="81 36 C5 32"/>
+  <a u="217D" b="81 36 C5 33"/>
+  <a u="217E" b="81 36 C5 34"/>
+  <a u="217F" b="81 36 C5 35"/>
+  <a u="2180" b="81 36 C5 36"/>
+  <a u="2181" b="81 36 C5 37"/>
+  <a u="2182" b="81 36 C5 38"/>
+  <a u="2183" b="81 36 C5 39"/>
+  <a u="2184" b="81 36 C6 30"/>
+  <a u="2185" b="81 36 C6 31"/>
+  <a u="2186" b="81 36 C6 32"/>
+  <a u="2187" b="81 36 C6 33"/>
+  <a u="2188" b="81 36 C6 34"/>
+  <a u="2189" b="81 36 C6 35"/>
+  <a u="218A" b="81 36 C6 36"/>
+  <a u="218B" b="81 36 C6 37"/>
+  <a u="218C" b="81 36 C6 38"/>
+  <a u="218D" b="81 36 C6 39"/>
+  <a u="218E" b="81 36 C7 30"/>
+  <a u="218F" b="81 36 C7 31"/>
+  <a u="2190" b="A1 FB"/>
+  <a u="2191" b="A1 FC"/>
+  <a u="2192" b="A1 FA"/>
+  <a u="2193" b="A1 FD"/>
+  <a u="2194" b="81 36 C7 32"/>
+  <a u="2195" b="81 36 C7 33"/>
+  <a u="2196" b="A8 49"/>
+  <a u="2197" b="A8 4A"/>
+  <a u="2198" b="A8 4B"/>
+  <a u="2199" b="A8 4C"/>
+  <a u="219A" b="81 36 C7 34"/>
+  <a u="219B" b="81 36 C7 35"/>
+  <a u="219C" b="81 36 C7 36"/>
+  <a u="219D" b="81 36 C7 37"/>
+  <a u="219E" b="81 36 C7 38"/>
+  <a u="219F" b="81 36 C7 39"/>
+  <a u="21A0" b="81 36 C8 30"/>
+  <a u="21A1" b="81 36 C8 31"/>
+  <a u="21A2" b="81 36 C8 32"/>
+  <a u="21A3" b="81 36 C8 33"/>
+  <a u="21A4" b="81 36 C8 34"/>
+  <a u="21A5" b="81 36 C8 35"/>
+  <a u="21A6" b="81 36 C8 36"/>
+  <a u="21A7" b="81 36 C8 37"/>
+  <a u="21A8" b="81 36 C8 38"/>
+  <a u="21A9" b="81 36 C8 39"/>
+  <a u="21AA" b="81 36 C9 30"/>
+  <a u="21AB" b="81 36 C9 31"/>
+  <a u="21AC" b="81 36 C9 32"/>
+  <a u="21AD" b="81 36 C9 33"/>
+  <a u="21AE" b="81 36 C9 34"/>
+  <a u="21AF" b="81 36 C9 35"/>
+  <a u="21B0" b="81 36 C9 36"/>
+  <a u="21B1" b="81 36 C9 37"/>
+  <a u="21B2" b="81 36 C9 38"/>
+  <a u="21B3" b="81 36 C9 39"/>
+  <a u="21B4" b="81 36 CA 30"/>
+  <a u="21B5" b="81 36 CA 31"/>
+  <a u="21B6" b="81 36 CA 32"/>
+  <a u="21B7" b="81 36 CA 33"/>
+  <a u="21B8" b="81 36 CA 34"/>
+  <a u="21B9" b="81 36 CA 35"/>
+  <a u="21BA" b="81 36 CA 36"/>
+  <a u="21BB" b="81 36 CA 37"/>
+  <a u="21BC" b="81 36 CA 38"/>
+  <a u="21BD" b="81 36 CA 39"/>
+  <a u="21BE" b="81 36 CB 30"/>
+  <a u="21BF" b="81 36 CB 31"/>
+  <a u="21C0" b="81 36 CB 32"/>
+  <a u="21C1" b="81 36 CB 33"/>
+  <a u="21C2" b="81 36 CB 34"/>
+  <a u="21C3" b="81 36 CB 35"/>
+  <a u="21C4" b="81 36 CB 36"/>
+  <a u="21C5" b="81 36 CB 37"/>
+  <a u="21C6" b="81 36 CB 38"/>
+  <a u="21C7" b="81 36 CB 39"/>
+  <a u="21C8" b="81 36 CC 30"/>
+  <a u="21C9" b="81 36 CC 31"/>
+  <a u="21CA" b="81 36 CC 32"/>
+  <a u="21CB" b="81 36 CC 33"/>
+  <a u="21CC" b="81 36 CC 34"/>
+  <a u="21CD" b="81 36 CC 35"/>
+  <a u="21CE" b="81 36 CC 36"/>
+  <a u="21CF" b="81 36 CC 37"/>
+  <a u="21D0" b="81 36 CC 38"/>
+  <a u="21D1" b="81 36 CC 39"/>
+  <a u="21D2" b="81 36 CD 30"/>
+  <a u="21D3" b="81 36 CD 31"/>
+  <a u="21D4" b="81 36 CD 32"/>
+  <a u="21D5" b="81 36 CD 33"/>
+  <a u="21D6" b="81 36 CD 34"/>
+  <a u="21D7" b="81 36 CD 35"/>
+  <a u="21D8" b="81 36 CD 36"/>
+  <a u="21D9" b="81 36 CD 37"/>
+  <a u="21DA" b="81 36 CD 38"/>
+  <a u="21DB" b="81 36 CD 39"/>
+  <a u="21DC" b="81 36 CE 30"/>
+  <a u="21DD" b="81 36 CE 31"/>
+  <a u="21DE" b="81 36 CE 32"/>
+  <a u="21DF" b="81 36 CE 33"/>
+  <a u="21E0" b="81 36 CE 34"/>
+  <a u="21E1" b="81 36 CE 35"/>
+  <a u="21E2" b="81 36 CE 36"/>
+  <a u="21E3" b="81 36 CE 37"/>
+  <a u="21E4" b="81 36 CE 38"/>
+  <a u="21E5" b="81 36 CE 39"/>
+  <a u="21E6" b="81 36 CF 30"/>
+  <a u="21E7" b="81 36 CF 31"/>
+  <a u="21E8" b="81 36 CF 32"/>
+  <a u="21E9" b="81 36 CF 33"/>
+  <a u="21EA" b="81 36 CF 34"/>
+  <a u="21EB" b="81 36 CF 35"/>
+  <a u="21EC" b="81 36 CF 36"/>
+  <a u="21ED" b="81 36 CF 37"/>
+  <a u="21EE" b="81 36 CF 38"/>
+  <a u="21EF" b="81 36 CF 39"/>
+  <a u="21F0" b="81 36 D0 30"/>
+  <a u="21F1" b="81 36 D0 31"/>
+  <a u="21F2" b="81 36 D0 32"/>
+  <a u="21F3" b="81 36 D0 33"/>
+  <a u="21F4" b="81 36 D0 34"/>
+  <a u="21F5" b="81 36 D0 35"/>
+  <a u="21F6" b="81 36 D0 36"/>
+  <a u="21F7" b="81 36 D0 37"/>
+  <a u="21F8" b="81 36 D0 38"/>
+  <a u="21F9" b="81 36 D0 39"/>
+  <a u="21FA" b="81 36 D1 30"/>
+  <a u="21FB" b="81 36 D1 31"/>
+  <a u="21FC" b="81 36 D1 32"/>
+  <a u="21FD" b="81 36 D1 33"/>
+  <a u="21FE" b="81 36 D1 34"/>
+  <a u="21FF" b="81 36 D1 35"/>
+  <a u="2200" b="81 36 D1 36"/>
+  <a u="2201" b="81 36 D1 37"/>
+  <a u="2202" b="81 36 D1 38"/>
+  <a u="2203" b="81 36 D1 39"/>
+  <a u="2204" b="81 36 D2 30"/>
+  <a u="2205" b="81 36 D2 31"/>
+  <a u="2206" b="81 36 D2 32"/>
+  <a u="2207" b="81 36 D2 33"/>
+  <a u="2208" b="A1 CA"/>
+  <a u="2209" b="81 36 D2 34"/>
+  <a u="220A" b="81 36 D2 35"/>
+  <a u="220B" b="81 36 D2 36"/>
+  <a u="220C" b="81 36 D2 37"/>
+  <a u="220D" b="81 36 D2 38"/>
+  <a u="220E" b="81 36 D2 39"/>
+  <a u="220F" b="A1 C7"/>
+  <a u="2210" b="81 36 D3 30"/>
+  <a u="2211" b="A1 C6"/>
+  <a u="2212" b="81 36 D3 31"/>
+  <a u="2213" b="81 36 D3 32"/>
+  <a u="2214" b="81 36 D3 33"/>
+  <a u="2215" b="A8 4D"/>
+  <a u="2216" b="81 36 D3 34"/>
+  <a u="2217" b="81 36 D3 35"/>
+  <a u="2218" b="81 36 D3 36"/>
+  <a u="2219" b="81 36 D3 37"/>
+  <a u="221A" b="A1 CC"/>
+  <a u="221B" b="81 36 D3 38"/>
+  <a u="221C" b="81 36 D3 39"/>
+  <a u="221D" b="A1 D8"/>
+  <a u="221E" b="A1 DE"/>
+  <a u="221F" b="A8 4E"/>
+  <a u="2220" b="A1 CF"/>
+  <a u="2221" b="81 36 D4 30"/>
+  <a u="2222" b="81 36 D4 31"/>
+  <a u="2223" b="A8 4F"/>
+  <a u="2224" b="81 36 D4 32"/>
+  <a u="2225" b="A1 CE"/>
+  <a u="2226" b="81 36 D4 33"/>
+  <a u="2227" b="A1 C4"/>
+  <a u="2228" b="A1 C5"/>
+  <a u="2229" b="A1 C9"/>
+  <a u="222A" b="A1 C8"/>
+  <a u="222B" b="A1 D2"/>
+  <a u="222C" b="81 36 D4 34"/>
+  <a u="222D" b="81 36 D4 35"/>
+  <a u="222E" b="A1 D3"/>
+  <a u="222F" b="81 36 D4 36"/>
+  <a u="2230" b="81 36 D4 37"/>
+  <a u="2231" b="81 36 D4 38"/>
+  <a u="2232" b="81 36 D4 39"/>
+  <a u="2233" b="81 36 D5 30"/>
+  <a u="2234" b="A1 E0"/>
+  <a u="2235" b="A1 DF"/>
+  <a u="2236" b="A1 C3"/>
+  <a u="2237" b="A1 CB"/>
+  <a u="2238" b="81 36 D5 31"/>
+  <a u="2239" b="81 36 D5 32"/>
+  <a u="223A" b="81 36 D5 33"/>
+  <a u="223B" b="81 36 D5 34"/>
+  <a u="223C" b="81 36 D5 35"/>
+  <a u="223D" b="A1 D7"/>
+  <a u="223E" b="81 36 D5 36"/>
+  <a u="223F" b="81 36 D5 37"/>
+  <a u="2240" b="81 36 D5 38"/>
+  <a u="2241" b="81 36 D5 39"/>
+  <a u="2242" b="81 36 D6 30"/>
+  <a u="2243" b="81 36 D6 31"/>
+  <a u="2244" b="81 36 D6 32"/>
+  <a u="2245" b="81 36 D6 33"/>
+  <a u="2246" b="81 36 D6 34"/>
+  <a u="2247" b="81 36 D6 35"/>
+  <a u="2248" b="A1 D6"/>
+  <a u="2249" b="81 36 D6 36"/>
+  <a u="224A" b="81 36 D6 37"/>
+  <a u="224B" b="81 36 D6 38"/>
+  <a u="224C" b="A1 D5"/>
+  <a u="224D" b="81 36 D6 39"/>
+  <a u="224E" b="81 36 D7 30"/>
+  <a u="224F" b="81 36 D7 31"/>
+  <a u="2250" b="81 36 D7 32"/>
+  <a u="2251" b="81 36 D7 33"/>
+  <a u="2252" b="A8 50"/>
+  <a u="2253" b="81 36 D7 34"/>
+  <a u="2254" b="81 36 D7 35"/>
+  <a u="2255" b="81 36 D7 36"/>
+  <a u="2256" b="81 36 D7 37"/>
+  <a u="2257" b="81 36 D7 38"/>
+  <a u="2258" b="81 36 D7 39"/>
+  <a u="2259" b="81 36 D8 30"/>
+  <a u="225A" b="81 36 D8 31"/>
+  <a u="225B" b="81 36 D8 32"/>
+  <a u="225C" b="81 36 D8 33"/>
+  <a u="225D" b="81 36 D8 34"/>
+  <a u="225E" b="81 36 D8 35"/>
+  <a u="225F" b="81 36 D8 36"/>
+  <a u="2260" b="A1 D9"/>
+  <a u="2261" b="A1 D4"/>
+  <a u="2262" b="81 36 D8 37"/>
+  <a u="2263" b="81 36 D8 38"/>
+  <a u="2264" b="A1 DC"/>
+  <a u="2265" b="A1 DD"/>
+  <a u="2266" b="A8 51"/>
+  <a u="2267" b="A8 52"/>
+  <a u="2268" b="81 36 D8 39"/>
+  <a u="2269" b="81 36 D9 30"/>
+  <a u="226A" b="81 36 D9 31"/>
+  <a u="226B" b="81 36 D9 32"/>
+  <a u="226C" b="81 36 D9 33"/>
+  <a u="226D" b="81 36 D9 34"/>
+  <a u="226E" b="A1 DA"/>
+  <a u="226F" b="A1 DB"/>
+  <a u="2270" b="81 36 D9 35"/>
+  <a u="2271" b="81 36 D9 36"/>
+  <a u="2272" b="81 36 D9 37"/>
+  <a u="2273" b="81 36 D9 38"/>
+  <a u="2274" b="81 36 D9 39"/>
+  <a u="2275" b="81 36 DA 30"/>
+  <a u="2276" b="81 36 DA 31"/>
+  <a u="2277" b="81 36 DA 32"/>
+  <a u="2278" b="81 36 DA 33"/>
+  <a u="2279" b="81 36 DA 34"/>
+  <a u="227A" b="81 36 DA 35"/>
+  <a u="227B" b="81 36 DA 36"/>
+  <a u="227C" b="81 36 DA 37"/>
+  <a u="227D" b="81 36 DA 38"/>
+  <a u="227E" b="81 36 DA 39"/>
+  <a u="227F" b="81 36 DB 30"/>
+  <a u="2280" b="81 36 DB 31"/>
+  <a u="2281" b="81 36 DB 32"/>
+  <a u="2282" b="81 36 DB 33"/>
+  <a u="2283" b="81 36 DB 34"/>
+  <a u="2284" b="81 36 DB 35"/>
+  <a u="2285" b="81 36 DB 36"/>
+  <a u="2286" b="81 36 DB 37"/>
+  <a u="2287" b="81 36 DB 38"/>
+  <a u="2288" b="81 36 DB 39"/>
+  <a u="2289" b="81 36 DC 30"/>
+  <a u="228A" b="81 36 DC 31"/>
+  <a u="228B" b="81 36 DC 32"/>
+  <a u="228C" b="81 36 DC 33"/>
+  <a u="228D" b="81 36 DC 34"/>
+  <a u="228E" b="81 36 DC 35"/>
+  <a u="228F" b="81 36 DC 36"/>
+  <a u="2290" b="81 36 DC 37"/>
+  <a u="2291" b="81 36 DC 38"/>
+  <a u="2292" b="81 36 DC 39"/>
+  <a u="2293" b="81 36 DD 30"/>
+  <a u="2294" b="81 36 DD 31"/>
+  <a u="2295" b="A8 92"/>
+  <a u="2296" b="81 36 DD 32"/>
+  <a u="2297" b="81 36 DD 33"/>
+  <a u="2298" b="81 36 DD 34"/>
+  <a u="2299" b="A1 D1"/>
+  <a u="229A" b="81 36 DD 35"/>
+  <a u="229B" b="81 36 DD 36"/>
+  <a u="229C" b="81 36 DD 37"/>
+  <a u="229D" b="81 36 DD 38"/>
+  <a u="229E" b="81 36 DD 39"/>
+  <a u="229F" b="81 36 DE 30"/>
+  <a u="22A0" b="81 36 DE 31"/>
+  <a u="22A1" b="81 36 DE 32"/>
+  <a u="22A2" b="81 36 DE 33"/>
+  <a u="22A3" b="81 36 DE 34"/>
+  <a u="22A4" b="81 36 DE 35"/>
+  <a u="22A5" b="A1 CD"/>
+  <a u="22A6" b="81 36 DE 36"/>
+  <a u="22A7" b="81 36 DE 37"/>
+  <a u="22A8" b="81 36 DE 38"/>
+  <a u="22A9" b="81 36 DE 39"/>
+  <a u="22AA" b="81 36 DF 30"/>
+  <a u="22AB" b="81 36 DF 31"/>
+  <a u="22AC" b="81 36 DF 32"/>
+  <a u="22AD" b="81 36 DF 33"/>
+  <a u="22AE" b="81 36 DF 34"/>
+  <a u="22AF" b="81 36 DF 35"/>
+  <a u="22B0" b="81 36 DF 36"/>
+  <a u="22B1" b="81 36 DF 37"/>
+  <a u="22B2" b="81 36 DF 38"/>
+  <a u="22B3" b="81 36 DF 39"/>
+  <a u="22B4" b="81 36 E0 30"/>
+  <a u="22B5" b="81 36 E0 31"/>
+  <a u="22B6" b="81 36 E0 32"/>
+  <a u="22B7" b="81 36 E0 33"/>
+  <a u="22B8" b="81 36 E0 34"/>
+  <a u="22B9" b="81 36 E0 35"/>
+  <a u="22BA" b="81 36 E0 36"/>
+  <a u="22BB" b="81 36 E0 37"/>
+  <a u="22BC" b="81 36 E0 38"/>
+  <a u="22BD" b="81 36 E0 39"/>
+  <a u="22BE" b="81 36 E1 30"/>
+  <a u="22BF" b="A8 53"/>
+  <a u="22C0" b="81 36 E1 31"/>
+  <a u="22C1" b="81 36 E1 32"/>
+  <a u="22C2" b="81 36 E1 33"/>
+  <a u="22C3" b="81 36 E1 34"/>
+  <a u="22C4" b="81 36 E1 35"/>
+  <a u="22C5" b="81 36 E1 36"/>
+  <a u="22C6" b="81 36 E1 37"/>
+  <a u="22C7" b="81 36 E1 38"/>
+  <a u="22C8" b="81 36 E1 39"/>
+  <a u="22C9" b="81 36 E2 30"/>
+  <a u="22CA" b="81 36 E2 31"/>
+  <a u="22CB" b="81 36 E2 32"/>
+  <a u="22CC" b="81 36 E2 33"/>
+  <a u="22CD" b="81 36 E2 34"/>
+  <a u="22CE" b="81 36 E2 35"/>
+  <a u="22CF" b="81 36 E2 36"/>
+  <a u="22D0" b="81 36 E2 37"/>
+  <a u="22D1" b="81 36 E2 38"/>
+  <a u="22D2" b="81 36 E2 39"/>
+  <a u="22D3" b="81 36 E3 30"/>
+  <a u="22D4" b="81 36 E3 31"/>
+  <a u="22D5" b="81 36 E3 32"/>
+  <a u="22D6" b="81 36 E3 33"/>
+  <a u="22D7" b="81 36 E3 34"/>
+  <a u="22D8" b="81 36 E3 35"/>
+  <a u="22D9" b="81 36 E3 36"/>
+  <a u="22DA" b="81 36 E3 37"/>
+  <a u="22DB" b="81 36 E3 38"/>
+  <a u="22DC" b="81 36 E3 39"/>
+  <a u="22DD" b="81 36 E4 30"/>
+  <a u="22DE" b="81 36 E4 31"/>
+  <a u="22DF" b="81 36 E4 32"/>
+  <a u="22E0" b="81 36 E4 33"/>
+  <a u="22E1" b="81 36 E4 34"/>
+  <a u="22E2" b="81 36 E4 35"/>
+  <a u="22E3" b="81 36 E4 36"/>
+  <a u="22E4" b="81 36 E4 37"/>
+  <a u="22E5" b="81 36 E4 38"/>
+  <a u="22E6" b="81 36 E4 39"/>
+  <a u="22E7" b="81 36 E5 30"/>
+  <a u="22E8" b="81 36 E5 31"/>
+  <a u="22E9" b="81 36 E5 32"/>
+  <a u="22EA" b="81 36 E5 33"/>
+  <a u="22EB" b="81 36 E5 34"/>
+  <a u="22EC" b="81 36 E5 35"/>
+  <a u="22ED" b="81 36 E5 36"/>
+  <a u="22EE" b="81 36 E5 37"/>
+  <a u="22EF" b="81 36 E5 38"/>
+  <a u="22F0" b="81 36 E5 39"/>
+  <a u="22F1" b="81 36 E6 30"/>
+  <a u="22F2" b="81 36 E6 31"/>
+  <a u="22F3" b="81 36 E6 32"/>
+  <a u="22F4" b="81 36 E6 33"/>
+  <a u="22F5" b="81 36 E6 34"/>
+  <a u="22F6" b="81 36 E6 35"/>
+  <a u="22F7" b="81 36 E6 36"/>
+  <a u="22F8" b="81 36 E6 37"/>
+  <a u="22F9" b="81 36 E6 38"/>
+  <a u="22FA" b="81 36 E6 39"/>
+  <a u="22FB" b="81 36 E7 30"/>
+  <a u="22FC" b="81 36 E7 31"/>
+  <a u="22FD" b="81 36 E7 32"/>
+  <a u="22FE" b="81 36 E7 33"/>
+  <a u="22FF" b="81 36 E7 34"/>
+  <a u="2300" b="81 36 E7 35"/>
+  <a u="2301" b="81 36 E7 36"/>
+  <a u="2302" b="81 36 E7 37"/>
+  <a u="2303" b="81 36 E7 38"/>
+  <a u="2304" b="81 36 E7 39"/>
+  <a u="2305" b="81 36 E8 30"/>
+  <a u="2306" b="81 36 E8 31"/>
+  <a u="2307" b="81 36 E8 32"/>
+  <a u="2308" b="81 36 E8 33"/>
+  <a u="2309" b="81 36 E8 34"/>
+  <a u="230A" b="81 36 E8 35"/>
+  <a u="230B" b="81 36 E8 36"/>
+  <a u="230C" b="81 36 E8 37"/>
+  <a u="230D" b="81 36 E8 38"/>
+  <a u="230E" b="81 36 E8 39"/>
+  <a u="230F" b="81 36 E9 30"/>
+  <a u="2310" b="81 36 E9 31"/>
+  <a u="2311" b="81 36 E9 32"/>
+  <a u="2312" b="A1 D0"/>
+  <a u="2313" b="81 36 E9 33"/>
+  <a u="2314" b="81 36 E9 34"/>
+  <a u="2315" b="81 36 E9 35"/>
+  <a u="2316" b="81 36 E9 36"/>
+  <a u="2317" b="81 36 E9 37"/>
+  <a u="2318" b="81 36 E9 38"/>
+  <a u="2319" b="81 36 E9 39"/>
+  <a u="231A" b="81 36 EA 30"/>
+  <a u="231B" b="81 36 EA 31"/>
+  <a u="231C" b="81 36 EA 32"/>
+  <a u="231D" b="81 36 EA 33"/>
+  <a u="231E" b="81 36 EA 34"/>
+  <a u="231F" b="81 36 EA 35"/>
+  <a u="2320" b="81 36 EA 36"/>
+  <a u="2321" b="81 36 EA 37"/>
+  <a u="2322" b="81 36 EA 38"/>
+  <a u="2323" b="81 36 EA 39"/>
+  <a u="2324" b="81 36 EB 30"/>
+  <a u="2325" b="81 36 EB 31"/>
+  <a u="2326" b="81 36 EB 32"/>
+  <a u="2327" b="81 36 EB 33"/>
+  <a u="2328" b="81 36 EB 34"/>
+  <a u="2329" b="81 36 EB 35"/>
+  <a u="232A" b="81 36 EB 36"/>
+  <a u="232B" b="81 36 EB 37"/>
+  <a u="232C" b="81 36 EB 38"/>
+  <a u="232D" b="81 36 EB 39"/>
+  <a u="232E" b="81 36 EC 30"/>
+  <a u="232F" b="81 36 EC 31"/>
+  <a u="2330" b="81 36 EC 32"/>
+  <a u="2331" b="81 36 EC 33"/>
+  <a u="2332" b="81 36 EC 34"/>
+  <a u="2333" b="81 36 EC 35"/>
+  <a u="2334" b="81 36 EC 36"/>
+  <a u="2335" b="81 36 EC 37"/>
+  <a u="2336" b="81 36 EC 38"/>
+  <a u="2337" b="81 36 EC 39"/>
+  <a u="2338" b="81 36 ED 30"/>
+  <a u="2339" b="81 36 ED 31"/>
+  <a u="233A" b="81 36 ED 32"/>
+  <a u="233B" b="81 36 ED 33"/>
+  <a u="233C" b="81 36 ED 34"/>
+  <a u="233D" b="81 36 ED 35"/>
+  <a u="233E" b="81 36 ED 36"/>
+  <a u="233F" b="81 36 ED 37"/>
+  <a u="2340" b="81 36 ED 38"/>
+  <a u="2341" b="81 36 ED 39"/>
+  <a u="2342" b="81 36 EE 30"/>
+  <a u="2343" b="81 36 EE 31"/>
+  <a u="2344" b="81 36 EE 32"/>
+  <a u="2345" b="81 36 EE 33"/>
+  <a u="2346" b="81 36 EE 34"/>
+  <a u="2347" b="81 36 EE 35"/>
+  <a u="2348" b="81 36 EE 36"/>
+  <a u="2349" b="81 36 EE 37"/>
+  <a u="234A" b="81 36 EE 38"/>
+  <a u="234B" b="81 36 EE 39"/>
+  <a u="234C" b="81 36 EF 30"/>
+  <a u="234D" b="81 36 EF 31"/>
+  <a u="234E" b="81 36 EF 32"/>
+  <a u="234F" b="81 36 EF 33"/>
+  <a u="2350" b="81 36 EF 34"/>
+  <a u="2351" b="81 36 EF 35"/>
+  <a u="2352" b="81 36 EF 36"/>
+  <a u="2353" b="81 36 EF 37"/>
+  <a u="2354" b="81 36 EF 38"/>
+  <a u="2355" b="81 36 EF 39"/>
+  <a u="2356" b="81 36 F0 30"/>
+  <a u="2357" b="81 36 F0 31"/>
+  <a u="2358" b="81 36 F0 32"/>
+  <a u="2359" b="81 36 F0 33"/>
+  <a u="235A" b="81 36 F0 34"/>
+  <a u="235B" b="81 36 F0 35"/>
+  <a u="235C" b="81 36 F0 36"/>
+  <a u="235D" b="81 36 F0 37"/>
+  <a u="235E" b="81 36 F0 38"/>
+  <a u="235F" b="81 36 F0 39"/>
+  <a u="2360" b="81 36 F1 30"/>
+  <a u="2361" b="81 36 F1 31"/>
+  <a u="2362" b="81 36 F1 32"/>
+  <a u="2363" b="81 36 F1 33"/>
+  <a u="2364" b="81 36 F1 34"/>
+  <a u="2365" b="81 36 F1 35"/>
+  <a u="2366" b="81 36 F1 36"/>
+  <a u="2367" b="81 36 F1 37"/>
+  <a u="2368" b="81 36 F1 38"/>
+  <a u="2369" b="81 36 F1 39"/>
+  <a u="236A" b="81 36 F2 30"/>
+  <a u="236B" b="81 36 F2 31"/>
+  <a u="236C" b="81 36 F2 32"/>
+  <a u="236D" b="81 36 F2 33"/>
+  <a u="236E" b="81 36 F2 34"/>
+  <a u="236F" b="81 36 F2 35"/>
+  <a u="2370" b="81 36 F2 36"/>
+  <a u="2371" b="81 36 F2 37"/>
+  <a u="2372" b="81 36 F2 38"/>
+  <a u="2373" b="81 36 F2 39"/>
+  <a u="2374" b="81 36 F3 30"/>
+  <a u="2375" b="81 36 F3 31"/>
+  <a u="2376" b="81 36 F3 32"/>
+  <a u="2377" b="81 36 F3 33"/>
+  <a u="2378" b="81 36 F3 34"/>
+  <a u="2379" b="81 36 F3 35"/>
+  <a u="237A" b="81 36 F3 36"/>
+  <a u="237B" b="81 36 F3 37"/>
+  <a u="237C" b="81 36 F3 38"/>
+  <a u="237D" b="81 36 F3 39"/>
+  <a u="237E" b="81 36 F4 30"/>
+  <a u="237F" b="81 36 F4 31"/>
+  <a u="2380" b="81 36 F4 32"/>
+  <a u="2381" b="81 36 F4 33"/>
+  <a u="2382" b="81 36 F4 34"/>
+  <a u="2383" b="81 36 F4 35"/>
+  <a u="2384" b="81 36 F4 36"/>
+  <a u="2385" b="81 36 F4 37"/>
+  <a u="2386" b="81 36 F4 38"/>
+  <a u="2387" b="81 36 F4 39"/>
+  <a u="2388" b="81 36 F5 30"/>
+  <a u="2389" b="81 36 F5 31"/>
+  <a u="238A" b="81 36 F5 32"/>
+  <a u="238B" b="81 36 F5 33"/>
+  <a u="238C" b="81 36 F5 34"/>
+  <a u="238D" b="81 36 F5 35"/>
+  <a u="238E" b="81 36 F5 36"/>
+  <a u="238F" b="81 36 F5 37"/>
+  <a u="2390" b="81 36 F5 38"/>
+  <a u="2391" b="81 36 F5 39"/>
+  <a u="2392" b="81 36 F6 30"/>
+  <a u="2393" b="81 36 F6 31"/>
+  <a u="2394" b="81 36 F6 32"/>
+  <a u="2395" b="81 36 F6 33"/>
+  <a u="2396" b="81 36 F6 34"/>
+  <a u="2397" b="81 36 F6 35"/>
+  <a u="2398" b="81 36 F6 36"/>
+  <a u="2399" b="81 36 F6 37"/>
+  <a u="239A" b="81 36 F6 38"/>
+  <a u="239B" b="81 36 F6 39"/>
+  <a u="239C" b="81 36 F7 30"/>
+  <a u="239D" b="81 36 F7 31"/>
+  <a u="239E" b="81 36 F7 32"/>
+  <a u="239F" b="81 36 F7 33"/>
+  <a u="23A0" b="81 36 F7 34"/>
+  <a u="23A1" b="81 36 F7 35"/>
+  <a u="23A2" b="81 36 F7 36"/>
+  <a u="23A3" b="81 36 F7 37"/>
+  <a u="23A4" b="81 36 F7 38"/>
+  <a u="23A5" b="81 36 F7 39"/>
+  <a u="23A6" b="81 36 F8 30"/>
+  <a u="23A7" b="81 36 F8 31"/>
+  <a u="23A8" b="81 36 F8 32"/>
+  <a u="23A9" b="81 36 F8 33"/>
+  <a u="23AA" b="81 36 F8 34"/>
+  <a u="23AB" b="81 36 F8 35"/>
+  <a u="23AC" b="81 36 F8 36"/>
+  <a u="23AD" b="81 36 F8 37"/>
+  <a u="23AE" b="81 36 F8 38"/>
+  <a u="23AF" b="81 36 F8 39"/>
+  <a u="23B0" b="81 36 F9 30"/>
+  <a u="23B1" b="81 36 F9 31"/>
+  <a u="23B2" b="81 36 F9 32"/>
+  <a u="23B3" b="81 36 F9 33"/>
+  <a u="23B4" b="81 36 F9 34"/>
+  <a u="23B5" b="81 36 F9 35"/>
+  <a u="23B6" b="81 36 F9 36"/>
+  <a u="23B7" b="81 36 F9 37"/>
+  <a u="23B8" b="81 36 F9 38"/>
+  <a u="23B9" b="81 36 F9 39"/>
+  <a u="23BA" b="81 36 FA 30"/>
+  <a u="23BB" b="81 36 FA 31"/>
+  <a u="23BC" b="81 36 FA 32"/>
+  <a u="23BD" b="81 36 FA 33"/>
+  <a u="23BE" b="81 36 FA 34"/>
+  <a u="23BF" b="81 36 FA 35"/>
+  <a u="23C0" b="81 36 FA 36"/>
+  <a u="23C1" b="81 36 FA 37"/>
+  <a u="23C2" b="81 36 FA 38"/>
+  <a u="23C3" b="81 36 FA 39"/>
+  <a u="23C4" b="81 36 FB 30"/>
+  <a u="23C5" b="81 36 FB 31"/>
+  <a u="23C6" b="81 36 FB 32"/>
+  <a u="23C7" b="81 36 FB 33"/>
+  <a u="23C8" b="81 36 FB 34"/>
+  <a u="23C9" b="81 36 FB 35"/>
+  <a u="23CA" b="81 36 FB 36"/>
+  <a u="23CB" b="81 36 FB 37"/>
+  <a u="23CC" b="81 36 FB 38"/>
+  <a u="23CD" b="81 36 FB 39"/>
+  <a u="23CE" b="81 36 FC 30"/>
+  <a u="23CF" b="81 36 FC 31"/>
+  <a u="23D0" b="81 36 FC 32"/>
+  <a u="23D1" b="81 36 FC 33"/>
+  <a u="23D2" b="81 36 FC 34"/>
+  <a u="23D3" b="81 36 FC 35"/>
+  <a u="23D4" b="81 36 FC 36"/>
+  <a u="23D5" b="81 36 FC 37"/>
+  <a u="23D6" b="81 36 FC 38"/>
+  <a u="23D7" b="81 36 FC 39"/>
+  <a u="23D8" b="81 36 FD 30"/>
+  <a u="23D9" b="81 36 FD 31"/>
+  <a u="23DA" b="81 36 FD 32"/>
+  <a u="23DB" b="81 36 FD 33"/>
+  <a u="23DC" b="81 36 FD 34"/>
+  <a u="23DD" b="81 36 FD 35"/>
+  <a u="23DE" b="81 36 FD 36"/>
+  <a u="23DF" b="81 36 FD 37"/>
+  <a u="23E0" b="81 36 FD 38"/>
+  <a u="23E1" b="81 36 FD 39"/>
+  <a u="23E2" b="81 36 FE 30"/>
+  <a u="23E3" b="81 36 FE 31"/>
+  <a u="23E4" b="81 36 FE 32"/>
+  <a u="23E5" b="81 36 FE 33"/>
+  <a u="23E6" b="81 36 FE 34"/>
+  <a u="23E7" b="81 36 FE 35"/>
+  <a u="23E8" b="81 36 FE 36"/>
+  <a u="23E9" b="81 36 FE 37"/>
+  <a u="23EA" b="81 36 FE 38"/>
+  <a u="23EB" b="81 36 FE 39"/>
+  <a u="23EC" b="81 37 81 30"/>
+  <a u="23ED" b="81 37 81 31"/>
+  <a u="23EE" b="81 37 81 32"/>
+  <a u="23EF" b="81 37 81 33"/>
+  <a u="23F0" b="81 37 81 34"/>
+  <a u="23F1" b="81 37 81 35"/>
+  <a u="23F2" b="81 37 81 36"/>
+  <a u="23F3" b="81 37 81 37"/>
+  <a u="23F4" b="81 37 81 38"/>
+  <a u="23F5" b="81 37 81 39"/>
+  <a u="23F6" b="81 37 82 30"/>
+  <a u="23F7" b="81 37 82 31"/>
+  <a u="23F8" b="81 37 82 32"/>
+  <a u="23F9" b="81 37 82 33"/>
+  <a u="23FA" b="81 37 82 34"/>
+  <a u="23FB" b="81 37 82 35"/>
+  <a u="23FC" b="81 37 82 36"/>
+  <a u="23FD" b="81 37 82 37"/>
+  <a u="23FE" b="81 37 82 38"/>
+  <a u="23FF" b="81 37 82 39"/>
+  <a u="2400" b="81 37 83 30"/>
+  <a u="2401" b="81 37 83 31"/>
+  <a u="2402" b="81 37 83 32"/>
+  <a u="2403" b="81 37 83 33"/>
+  <a u="2404" b="81 37 83 34"/>
+  <a u="2405" b="81 37 83 35"/>
+  <a u="2406" b="81 37 83 36"/>
+  <a u="2407" b="81 37 83 37"/>
+  <a u="2408" b="81 37 83 38"/>
+  <a u="2409" b="81 37 83 39"/>
+  <a u="240A" b="81 37 84 30"/>
+  <a u="240B" b="81 37 84 31"/>
+  <a u="240C" b="81 37 84 32"/>
+  <a u="240D" b="81 37 84 33"/>
+  <a u="240E" b="81 37 84 34"/>
+  <a u="240F" b="81 37 84 35"/>
+  <a u="2410" b="81 37 84 36"/>
+  <a u="2411" b="81 37 84 37"/>
+  <a u="2412" b="81 37 84 38"/>
+  <a u="2413" b="81 37 84 39"/>
+  <a u="2414" b="81 37 85 30"/>
+  <a u="2415" b="81 37 85 31"/>
+  <a u="2416" b="81 37 85 32"/>
+  <a u="2417" b="81 37 85 33"/>
+  <a u="2418" b="81 37 85 34"/>
+  <a u="2419" b="81 37 85 35"/>
+  <a u="241A" b="81 37 85 36"/>
+  <a u="241B" b="81 37 85 37"/>
+  <a u="241C" b="81 37 85 38"/>
+  <a u="241D" b="81 37 85 39"/>
+  <a u="241E" b="81 37 86 30"/>
+  <a u="241F" b="81 37 86 31"/>
+  <a u="2420" b="81 37 86 32"/>
+  <a u="2421" b="81 37 86 33"/>
+  <a u="2422" b="81 37 86 34"/>
+  <a u="2423" b="81 37 86 35"/>
+  <a u="2424" b="81 37 86 36"/>
+  <a u="2425" b="81 37 86 37"/>
+  <a u="2426" b="81 37 86 38"/>
+  <a u="2427" b="81 37 86 39"/>
+  <a u="2428" b="81 37 87 30"/>
+  <a u="2429" b="81 37 87 31"/>
+  <a u="242A" b="81 37 87 32"/>
+  <a u="242B" b="81 37 87 33"/>
+  <a u="242C" b="81 37 87 34"/>
+  <a u="242D" b="81 37 87 35"/>
+  <a u="242E" b="81 37 87 36"/>
+  <a u="242F" b="81 37 87 37"/>
+  <a u="2430" b="81 37 87 38"/>
+  <a u="2431" b="81 37 87 39"/>
+  <a u="2432" b="81 37 88 30"/>
+  <a u="2433" b="81 37 88 31"/>
+  <a u="2434" b="81 37 88 32"/>
+  <a u="2435" b="81 37 88 33"/>
+  <a u="2436" b="81 37 88 34"/>
+  <a u="2437" b="81 37 88 35"/>
+  <a u="2438" b="81 37 88 36"/>
+  <a u="2439" b="81 37 88 37"/>
+  <a u="243A" b="81 37 88 38"/>
+  <a u="243B" b="81 37 88 39"/>
+  <a u="243C" b="81 37 89 30"/>
+  <a u="243D" b="81 37 89 31"/>
+  <a u="243E" b="81 37 89 32"/>
+  <a u="243F" b="81 37 89 33"/>
+  <a u="2440" b="81 37 89 34"/>
+  <a u="2441" b="81 37 89 35"/>
+  <a u="2442" b="81 37 89 36"/>
+  <a u="2443" b="81 37 89 37"/>
+  <a u="2444" b="81 37 89 38"/>
+  <a u="2445" b="81 37 89 39"/>
+  <a u="2446" b="81 37 8A 30"/>
+  <a u="2447" b="81 37 8A 31"/>
+  <a u="2448" b="81 37 8A 32"/>
+  <a u="2449" b="81 37 8A 33"/>
+  <a u="244A" b="81 37 8A 34"/>
+  <a u="244B" b="81 37 8A 35"/>
+  <a u="244C" b="81 37 8A 36"/>
+  <a u="244D" b="81 37 8A 37"/>
+  <a u="244E" b="81 37 8A 38"/>
+  <a u="244F" b="81 37 8A 39"/>
+  <a u="2450" b="81 37 8B 30"/>
+  <a u="2451" b="81 37 8B 31"/>
+  <a u="2452" b="81 37 8B 32"/>
+  <a u="2453" b="81 37 8B 33"/>
+  <a u="2454" b="81 37 8B 34"/>
+  <a u="2455" b="81 37 8B 35"/>
+  <a u="2456" b="81 37 8B 36"/>
+  <a u="2457" b="81 37 8B 37"/>
+  <a u="2458" b="81 37 8B 38"/>
+  <a u="2459" b="81 37 8B 39"/>
+  <a u="245A" b="81 37 8C 30"/>
+  <a u="245B" b="81 37 8C 31"/>
+  <a u="245C" b="81 37 8C 32"/>
+  <a u="245D" b="81 37 8C 33"/>
+  <a u="245E" b="81 37 8C 34"/>
+  <a u="245F" b="81 37 8C 35"/>
+  <a u="2460" b="A2 D9"/>
+  <a u="2461" b="A2 DA"/>
+  <a u="2462" b="A2 DB"/>
+  <a u="2463" b="A2 DC"/>
+  <a u="2464" b="A2 DD"/>
+  <a u="2465" b="A2 DE"/>
+  <a u="2466" b="A2 DF"/>
+  <a u="2467" b="A2 E0"/>
+  <a u="2468" b="A2 E1"/>
+  <a u="2469" b="A2 E2"/>
+  <a u="246A" b="81 37 8C 36"/>
+  <a u="246B" b="81 37 8C 37"/>
+  <a u="246C" b="81 37 8C 38"/>
+  <a u="246D" b="81 37 8C 39"/>
+  <a u="246E" b="81 37 8D 30"/>
+  <a u="246F" b="81 37 8D 31"/>
+  <a u="2470" b="81 37 8D 32"/>
+  <a u="2471" b="81 37 8D 33"/>
+  <a u="2472" b="81 37 8D 34"/>
+  <a u="2473" b="81 37 8D 35"/>
+  <a u="2474" b="A2 C5"/>
+  <a u="2475" b="A2 C6"/>
+  <a u="2476" b="A2 C7"/>
+  <a u="2477" b="A2 C8"/>
+  <a u="2478" b="A2 C9"/>
+  <a u="2479" b="A2 CA"/>
+  <a u="247A" b="A2 CB"/>
+  <a u="247B" b="A2 CC"/>
+  <a u="247C" b="A2 CD"/>
+  <a u="247D" b="A2 CE"/>
+  <a u="247E" b="A2 CF"/>
+  <a u="247F" b="A2 D0"/>
+  <a u="2480" b="A2 D1"/>
+  <a u="2481" b="A2 D2"/>
+  <a u="2482" b="A2 D3"/>
+  <a u="2483" b="A2 D4"/>
+  <a u="2484" b="A2 D5"/>
+  <a u="2485" b="A2 D6"/>
+  <a u="2486" b="A2 D7"/>
+  <a u="2487" b="A2 D8"/>
+  <a u="2488" b="A2 B1"/>
+  <a u="2489" b="A2 B2"/>
+  <a u="248A" b="A2 B3"/>
+  <a u="248B" b="A2 B4"/>
+  <a u="248C" b="A2 B5"/>
+  <a u="248D" b="A2 B6"/>
+  <a u="248E" b="A2 B7"/>
+  <a u="248F" b="A2 B8"/>
+  <a u="2490" b="A2 B9"/>
+  <a u="2491" b="A2 BA"/>
+  <a u="2492" b="A2 BB"/>
+  <a u="2493" b="A2 BC"/>
+  <a u="2494" b="A2 BD"/>
+  <a u="2495" b="A2 BE"/>
+  <a u="2496" b="A2 BF"/>
+  <a u="2497" b="A2 C0"/>
+  <a u="2498" b="A2 C1"/>
+  <a u="2499" b="A2 C2"/>
+  <a u="249A" b="A2 C3"/>
+  <a u="249B" b="A2 C4"/>
+  <a u="249C" b="81 37 8D 36"/>
+  <a u="249D" b="81 37 8D 37"/>
+  <a u="249E" b="81 37 8D 38"/>
+  <a u="249F" b="81 37 8D 39"/>
+  <a u="24A0" b="81 37 8E 30"/>
+  <a u="24A1" b="81 37 8E 31"/>
+  <a u="24A2" b="81 37 8E 32"/>
+  <a u="24A3" b="81 37 8E 33"/>
+  <a u="24A4" b="81 37 8E 34"/>
+  <a u="24A5" b="81 37 8E 35"/>
+  <a u="24A6" b="81 37 8E 36"/>
+  <a u="24A7" b="81 37 8E 37"/>
+  <a u="24A8" b="81 37 8E 38"/>
+  <a u="24A9" b="81 37 8E 39"/>
+  <a u="24AA" b="81 37 8F 30"/>
+  <a u="24AB" b="81 37 8F 31"/>
+  <a u="24AC" b="81 37 8F 32"/>
+  <a u="24AD" b="81 37 8F 33"/>
+  <a u="24AE" b="81 37 8F 34"/>
+  <a u="24AF" b="81 37 8F 35"/>
+  <a u="24B0" b="81 37 8F 36"/>
+  <a u="24B1" b="81 37 8F 37"/>
+  <a u="24B2" b="81 37 8F 38"/>
+  <a u="24B3" b="81 37 8F 39"/>
+  <a u="24B4" b="81 37 90 30"/>
+  <a u="24B5" b="81 37 90 31"/>
+  <a u="24B6" b="81 37 90 32"/>
+  <a u="24B7" b="81 37 90 33"/>
+  <a u="24B8" b="81 37 90 34"/>
+  <a u="24B9" b="81 37 90 35"/>
+  <a u="24BA" b="81 37 90 36"/>
+  <a u="24BB" b="81 37 90 37"/>
+  <a u="24BC" b="81 37 90 38"/>
+  <a u="24BD" b="81 37 90 39"/>
+  <a u="24BE" b="81 37 91 30"/>
+  <a u="24BF" b="81 37 91 31"/>
+  <a u="24C0" b="81 37 91 32"/>
+  <a u="24C1" b="81 37 91 33"/>
+  <a u="24C2" b="81 37 91 34"/>
+  <a u="24C3" b="81 37 91 35"/>
+  <a u="24C4" b="81 37 91 36"/>
+  <a u="24C5" b="81 37 91 37"/>
+  <a u="24C6" b="81 37 91 38"/>
+  <a u="24C7" b="81 37 91 39"/>
+  <a u="24C8" b="81 37 92 30"/>
+  <a u="24C9" b="81 37 92 31"/>
+  <a u="24CA" b="81 37 92 32"/>
+  <a u="24CB" b="81 37 92 33"/>
+  <a u="24CC" b="81 37 92 34"/>
+  <a u="24CD" b="81 37 92 35"/>
+  <a u="24CE" b="81 37 92 36"/>
+  <a u="24CF" b="81 37 92 37"/>
+  <a u="24D0" b="81 37 92 38"/>
+  <a u="24D1" b="81 37 92 39"/>
+  <a u="24D2" b="81 37 93 30"/>
+  <a u="24D3" b="81 37 93 31"/>
+  <a u="24D4" b="81 37 93 32"/>
+  <a u="24D5" b="81 37 93 33"/>
+  <a u="24D6" b="81 37 93 34"/>
+  <a u="24D7" b="81 37 93 35"/>
+  <a u="24D8" b="81 37 93 36"/>
+  <a u="24D9" b="81 37 93 37"/>
+  <a u="24DA" b="81 37 93 38"/>
+  <a u="24DB" b="81 37 93 39"/>
+  <a u="24DC" b="81 37 94 30"/>
+  <a u="24DD" b="81 37 94 31"/>
+  <a u="24DE" b="81 37 94 32"/>
+  <a u="24DF" b="81 37 94 33"/>
+  <a u="24E0" b="81 37 94 34"/>
+  <a u="24E1" b="81 37 94 35"/>
+  <a u="24E2" b="81 37 94 36"/>
+  <a u="24E3" b="81 37 94 37"/>
+  <a u="24E4" b="81 37 94 38"/>
+  <a u="24E5" b="81 37 94 39"/>
+  <a u="24E6" b="81 37 95 30"/>
+  <a u="24E7" b="81 37 95 31"/>
+  <a u="24E8" b="81 37 95 32"/>
+  <a u="24E9" b="81 37 95 33"/>
+  <a u="24EA" b="81 37 95 34"/>
+  <a u="24EB" b="81 37 95 35"/>
+  <a u="24EC" b="81 37 95 36"/>
+  <a u="24ED" b="81 37 95 37"/>
+  <a u="24EE" b="81 37 95 38"/>
+  <a u="24EF" b="81 37 95 39"/>
+  <a u="24F0" b="81 37 96 30"/>
+  <a u="24F1" b="81 37 96 31"/>
+  <a u="24F2" b="81 37 96 32"/>
+  <a u="24F3" b="81 37 96 33"/>
+  <a u="24F4" b="81 37 96 34"/>
+  <a u="24F5" b="81 37 96 35"/>
+  <a u="24F6" b="81 37 96 36"/>
+  <a u="24F7" b="81 37 96 37"/>
+  <a u="24F8" b="81 37 96 38"/>
+  <a u="24F9" b="81 37 96 39"/>
+  <a u="24FA" b="81 37 97 30"/>
+  <a u="24FB" b="81 37 97 31"/>
+  <a u="24FC" b="81 37 97 32"/>
+  <a u="24FD" b="81 37 97 33"/>
+  <a u="24FE" b="81 37 97 34"/>
+  <a u="24FF" b="81 37 97 35"/>
+  <a u="2500" b="A9 A4"/>
+  <a u="2501" b="A9 A5"/>
+  <a u="2502" b="A9 A6"/>
+  <a u="2503" b="A9 A7"/>
+  <a u="2504" b="A9 A8"/>
+  <a u="2505" b="A9 A9"/>
+  <a u="2506" b="A9 AA"/>
+  <a u="2507" b="A9 AB"/>
+  <a u="2508" b="A9 AC"/>
+  <a u="2509" b="A9 AD"/>
+  <a u="250A" b="A9 AE"/>
+  <a u="250B" b="A9 AF"/>
+  <a u="250C" b="A9 B0"/>
+  <a u="250D" b="A9 B1"/>
+  <a u="250E" b="A9 B2"/>
+  <a u="250F" b="A9 B3"/>
+  <a u="2510" b="A9 B4"/>
+  <a u="2511" b="A9 B5"/>
+  <a u="2512" b="A9 B6"/>
+  <a u="2513" b="A9 B7"/>
+  <a u="2514" b="A9 B8"/>
+  <a u="2515" b="A9 B9"/>
+  <a u="2516" b="A9 BA"/>
+  <a u="2517" b="A9 BB"/>
+  <a u="2518" b="A9 BC"/>
+  <a u="2519" b="A9 BD"/>
+  <a u="251A" b="A9 BE"/>
+  <a u="251B" b="A9 BF"/>
+  <a u="251C" b="A9 C0"/>
+  <a u="251D" b="A9 C1"/>
+  <a u="251E" b="A9 C2"/>
+  <a u="251F" b="A9 C3"/>
+  <a u="2520" b="A9 C4"/>
+  <a u="2521" b="A9 C5"/>
+  <a u="2522" b="A9 C6"/>
+  <a u="2523" b="A9 C7"/>
+  <a u="2524" b="A9 C8"/>
+  <a u="2525" b="A9 C9"/>
+  <a u="2526" b="A9 CA"/>
+  <a u="2527" b="A9 CB"/>
+  <a u="2528" b="A9 CC"/>
+  <a u="2529" b="A9 CD"/>
+  <a u="252A" b="A9 CE"/>
+  <a u="252B" b="A9 CF"/>
+  <a u="252C" b="A9 D0"/>
+  <a u="252D" b="A9 D1"/>
+  <a u="252E" b="A9 D2"/>
+  <a u="252F" b="A9 D3"/>
+  <a u="2530" b="A9 D4"/>
+  <a u="2531" b="A9 D5"/>
+  <a u="2532" b="A9 D6"/>
+  <a u="2533" b="A9 D7"/>
+  <a u="2534" b="A9 D8"/>
+  <a u="2535" b="A9 D9"/>
+  <a u="2536" b="A9 DA"/>
+  <a u="2537" b="A9 DB"/>
+  <a u="2538" b="A9 DC"/>
+  <a u="2539" b="A9 DD"/>
+  <a u="253A" b="A9 DE"/>
+  <a u="253B" b="A9 DF"/>
+  <a u="253C" b="A9 E0"/>
+  <a u="253D" b="A9 E1"/>
+  <a u="253E" b="A9 E2"/>
+  <a u="253F" b="A9 E3"/>
+  <a u="2540" b="A9 E4"/>
+  <a u="2541" b="A9 E5"/>
+  <a u="2542" b="A9 E6"/>
+  <a u="2543" b="A9 E7"/>
+  <a u="2544" b="A9 E8"/>
+  <a u="2545" b="A9 E9"/>
+  <a u="2546" b="A9 EA"/>
+  <a u="2547" b="A9 EB"/>
+  <a u="2548" b="A9 EC"/>
+  <a u="2549" b="A9 ED"/>
+  <a u="254A" b="A9 EE"/>
+  <a u="254B" b="A9 EF"/>
+  <a u="254C" b="81 37 97 36"/>
+  <a u="254D" b="81 37 97 37"/>
+  <a u="254E" b="81 37 97 38"/>
+  <a u="254F" b="81 37 97 39"/>
+  <a u="2550" b="A8 54"/>
+  <a u="2551" b="A8 55"/>
+  <a u="2552" b="A8 56"/>
+  <a u="2553" b="A8 57"/>
+  <a u="2554" b="A8 58"/>
+  <a u="2555" b="A8 59"/>
+  <a u="2556" b="A8 5A"/>
+  <a u="2557" b="A8 5B"/>
+  <a u="2558" b="A8 5C"/>
+  <a u="2559" b="A8 5D"/>
+  <a u="255A" b="A8 5E"/>
+  <a u="255B" b="A8 5F"/>
+  <a u="255C" b="A8 60"/>
+  <a u="255D" b="A8 61"/>
+  <a u="255E" b="A8 62"/>
+  <a u="255F" b="A8 63"/>
+  <a u="2560" b="A8 64"/>
+  <a u="2561" b="A8 65"/>
+  <a u="2562" b="A8 66"/>
+  <a u="2563" b="A8 67"/>
+  <a u="2564" b="A8 68"/>
+  <a u="2565" b="A8 69"/>
+  <a u="2566" b="A8 6A"/>
+  <a u="2567" b="A8 6B"/>
+  <a u="2568" b="A8 6C"/>
+  <a u="2569" b="A8 6D"/>
+  <a u="256A" b="A8 6E"/>
+  <a u="256B" b="A8 6F"/>
+  <a u="256C" b="A8 70"/>
+  <a u="256D" b="A8 71"/>
+  <a u="256E" b="A8 72"/>
+  <a u="256F" b="A8 73"/>
+  <a u="2570" b="A8 74"/>
+  <a u="2571" b="A8 75"/>
+  <a u="2572" b="A8 76"/>
+  <a u="2573" b="A8 77"/>
+  <a u="2574" b="81 37 98 30"/>
+  <a u="2575" b="81 37 98 31"/>
+  <a u="2576" b="81 37 98 32"/>
+  <a u="2577" b="81 37 98 33"/>
+  <a u="2578" b="81 37 98 34"/>
+  <a u="2579" b="81 37 98 35"/>
+  <a u="257A" b="81 37 98 36"/>
+  <a u="257B" b="81 37 98 37"/>
+  <a u="257C" b="81 37 98 38"/>
+  <a u="257D" b="81 37 98 39"/>
+  <a u="257E" b="81 37 99 30"/>
+  <a u="257F" b="81 37 99 31"/>
+  <a u="2580" b="81 37 99 32"/>
+  <a u="2581" b="A8 78"/>
+  <a u="2582" b="A8 79"/>
+  <a u="2583" b="A8 7A"/>
+  <a u="2584" b="A8 7B"/>
+  <a u="2585" b="A8 7C"/>
+  <a u="2586" b="A8 7D"/>
+  <a u="2587" b="A8 7E"/>
+  <a u="2588" b="A8 80"/>
+  <a u="2589" b="A8 81"/>
+  <a u="258A" b="A8 82"/>
+  <a u="258B" b="A8 83"/>
+  <a u="258C" b="A8 84"/>
+  <a u="258D" b="A8 85"/>
+  <a u="258E" b="A8 86"/>
+  <a u="258F" b="A8 87"/>
+  <a u="2590" b="81 37 99 33"/>
+  <a u="2591" b="81 37 99 34"/>
+  <a u="2592" b="81 37 99 35"/>
+  <a u="2593" b="A8 88"/>
+  <a u="2594" b="A8 89"/>
+  <a u="2595" b="A8 8A"/>
+  <a u="2596" b="81 37 99 36"/>
+  <a u="2597" b="81 37 99 37"/>
+  <a u="2598" b="81 37 99 38"/>
+  <a u="2599" b="81 37 99 39"/>
+  <a u="259A" b="81 37 9A 30"/>
+  <a u="259B" b="81 37 9A 31"/>
+  <a u="259C" b="81 37 9A 32"/>
+  <a u="259D" b="81 37 9A 33"/>
+  <a u="259E" b="81 37 9A 34"/>
+  <a u="259F" b="81 37 9A 35"/>
+  <a u="25A0" b="A1 F6"/>
+  <a u="25A1" b="A1 F5"/>
+  <a u="25A2" b="81 37 9A 36"/>
+  <a u="25A3" b="81 37 9A 37"/>
+  <a u="25A4" b="81 37 9A 38"/>
+  <a u="25A5" b="81 37 9A 39"/>
+  <a u="25A6" b="81 37 9B 30"/>
+  <a u="25A7" b="81 37 9B 31"/>
+  <a u="25A8" b="81 37 9B 32"/>
+  <a u="25A9" b="81 37 9B 33"/>
+  <a u="25AA" b="81 37 9B 34"/>
+  <a u="25AB" b="81 37 9B 35"/>
+  <a u="25AC" b="81 37 9B 36"/>
+  <a u="25AD" b="81 37 9B 37"/>
+  <a u="25AE" b="81 37 9B 38"/>
+  <a u="25AF" b="81 37 9B 39"/>
+  <a u="25B0" b="81 37 9C 30"/>
+  <a u="25B1" b="81 37 9C 31"/>
+  <a u="25B2" b="A1 F8"/>
+  <a u="25B3" b="A1 F7"/>
+  <a u="25B4" b="81 37 9C 32"/>
+  <a u="25B5" b="81 37 9C 33"/>
+  <a u="25B6" b="81 37 9C 34"/>
+  <a u="25B7" b="81 37 9C 35"/>
+  <a u="25B8" b="81 37 9C 36"/>
+  <a u="25B9" b="81 37 9C 37"/>
+  <a u="25BA" b="81 37 9C 38"/>
+  <a u="25BB" b="81 37 9C 39"/>
+  <a u="25BC" b="A8 8B"/>
+  <a u="25BD" b="A8 8C"/>
+  <a u="25BE" b="81 37 9D 30"/>
+  <a u="25BF" b="81 37 9D 31"/>
+  <a u="25C0" b="81 37 9D 32"/>
+  <a u="25C1" b="81 37 9D 33"/>
+  <a u="25C2" b="81 37 9D 34"/>
+  <a u="25C3" b="81 37 9D 35"/>
+  <a u="25C4" b="81 37 9D 36"/>
+  <a u="25C5" b="81 37 9D 37"/>
+  <a u="25C6" b="A1 F4"/>
+  <a u="25C7" b="A1 F3"/>
+  <a u="25C8" b="81 37 9D 38"/>
+  <a u="25C9" b="81 37 9D 39"/>
+  <a u="25CA" b="81 37 9E 30"/>
+  <a u="25CB" b="A1 F0"/>
+  <a u="25CC" b="81 37 9E 31"/>
+  <a u="25CD" b="81 37 9E 32"/>
+  <a u="25CE" b="A1 F2"/>
+  <a u="25CF" b="A1 F1"/>
+  <a u="25D0" b="81 37 9E 33"/>
+  <a u="25D1" b="81 37 9E 34"/>
+  <a u="25D2" b="81 37 9E 35"/>
+  <a u="25D3" b="81 37 9E 36"/>
+  <a u="25D4" b="81 37 9E 37"/>
+  <a u="25D5" b="81 37 9E 38"/>
+  <a u="25D6" b="81 37 9E 39"/>
+  <a u="25D7" b="81 37 9F 30"/>
+  <a u="25D8" b="81 37 9F 31"/>
+  <a u="25D9" b="81 37 9F 32"/>
+  <a u="25DA" b="81 37 9F 33"/>
+  <a u="25DB" b="81 37 9F 34"/>
+  <a u="25DC" b="81 37 9F 35"/>
+  <a u="25DD" b="81 37 9F 36"/>
+  <a u="25DE" b="81 37 9F 37"/>
+  <a u="25DF" b="81 37 9F 38"/>
+  <a u="25E0" b="81 37 9F 39"/>
+  <a u="25E1" b="81 37 A0 30"/>
+  <a u="25E2" b="A8 8D"/>
+  <a u="25E3" b="A8 8E"/>
+  <a u="25E4" b="A8 8F"/>
+  <a u="25E5" b="A8 90"/>
+  <a u="25E6" b="81 37 A0 31"/>
+  <a u="25E7" b="81 37 A0 32"/>
+  <a u="25E8" b="81 37 A0 33"/>
+  <a u="25E9" b="81 37 A0 34"/>
+  <a u="25EA" b="81 37 A0 35"/>
+  <a u="25EB" b="81 37 A0 36"/>
+  <a u="25EC" b="81 37 A0 37"/>
+  <a u="25ED" b="81 37 A0 38"/>
+  <a u="25EE" b="81 37 A0 39"/>
+  <a u="25EF" b="81 37 A1 30"/>
+  <a u="25F0" b="81 37 A1 31"/>
+  <a u="25F1" b="81 37 A1 32"/>
+  <a u="25F2" b="81 37 A1 33"/>
+  <a u="25F3" b="81 37 A1 34"/>
+  <a u="25F4" b="81 37 A1 35"/>
+  <a u="25F5" b="81 37 A1 36"/>
+  <a u="25F6" b="81 37 A1 37"/>
+  <a u="25F7" b="81 37 A1 38"/>
+  <a u="25F8" b="81 37 A1 39"/>
+  <a u="25F9" b="81 37 A2 30"/>
+  <a u="25FA" b="81 37 A2 31"/>
+  <a u="25FB" b="81 37 A2 32"/>
+  <a u="25FC" b="81 37 A2 33"/>
+  <a u="25FD" b="81 37 A2 34"/>
+  <a u="25FE" b="81 37 A2 35"/>
+  <a u="25FF" b="81 37 A2 36"/>
+  <a u="2600" b="81 37 A2 37"/>
+  <a u="2601" b="81 37 A2 38"/>
+  <a u="2602" b="81 37 A2 39"/>
+  <a u="2603" b="81 37 A3 30"/>
+  <a u="2604" b="81 37 A3 31"/>
+  <a u="2605" b="A1 EF"/>
+  <a u="2606" b="A1 EE"/>
+  <a u="2607" b="81 37 A3 32"/>
+  <a u="2608" b="81 37 A3 33"/>
+  <a u="2609" b="A8 91"/>
+  <a u="260A" b="81 37 A3 34"/>
+  <a u="260B" b="81 37 A3 35"/>
+  <a u="260C" b="81 37 A3 36"/>
+  <a u="260D" b="81 37 A3 37"/>
+  <a u="260E" b="81 37 A3 38"/>
+  <a u="260F" b="81 37 A3 39"/>
+  <a u="2610" b="81 37 A4 30"/>
+  <a u="2611" b="81 37 A4 31"/>
+  <a u="2612" b="81 37 A4 32"/>
+  <a u="2613" b="81 37 A4 33"/>
+  <a u="2614" b="81 37 A4 34"/>
+  <a u="2615" b="81 37 A4 35"/>
+  <a u="2616" b="81 37 A4 36"/>
+  <a u="2617" b="81 37 A4 37"/>
+  <a u="2618" b="81 37 A4 38"/>
+  <a u="2619" b="81 37 A4 39"/>
+  <a u="261A" b="81 37 A5 30"/>
+  <a u="261B" b="81 37 A5 31"/>
+  <a u="261C" b="81 37 A5 32"/>
+  <a u="261D" b="81 37 A5 33"/>
+  <a u="261E" b="81 37 A5 34"/>
+  <a u="261F" b="81 37 A5 35"/>
+  <a u="2620" b="81 37 A5 36"/>
+  <a u="2621" b="81 37 A5 37"/>
+  <a u="2622" b="81 37 A5 38"/>
+  <a u="2623" b="81 37 A5 39"/>
+  <a u="2624" b="81 37 A6 30"/>
+  <a u="2625" b="81 37 A6 31"/>
+  <a u="2626" b="81 37 A6 32"/>
+  <a u="2627" b="81 37 A6 33"/>
+  <a u="2628" b="81 37 A6 34"/>
+  <a u="2629" b="81 37 A6 35"/>
+  <a u="262A" b="81 37 A6 36"/>
+  <a u="262B" b="81 37 A6 37"/>
+  <a u="262C" b="81 37 A6 38"/>
+  <a u="262D" b="81 37 A6 39"/>
+  <a u="262E" b="81 37 A7 30"/>
+  <a u="262F" b="81 37 A7 31"/>
+  <a u="2630" b="81 37 A7 32"/>
+  <a u="2631" b="81 37 A7 33"/>
+  <a u="2632" b="81 37 A7 34"/>
+  <a u="2633" b="81 37 A7 35"/>
+  <a u="2634" b="81 37 A7 36"/>
+  <a u="2635" b="81 37 A7 37"/>
+  <a u="2636" b="81 37 A7 38"/>
+  <a u="2637" b="81 37 A7 39"/>
+  <a u="2638" b="81 37 A8 30"/>
+  <a u="2639" b="81 37 A8 31"/>
+  <a u="263A" b="81 37 A8 32"/>
+  <a u="263B" b="81 37 A8 33"/>
+  <a u="263C" b="81 37 A8 34"/>
+  <a u="263D" b="81 37 A8 35"/>
+  <a u="263E" b="81 37 A8 36"/>
+  <a u="263F" b="81 37 A8 37"/>
+  <a u="2640" b="A1 E2"/>
+  <a u="2641" b="81 37 A8 38"/>
+  <a u="2642" b="A1 E1"/>
+  <a u="2E81" b="FE 50"/>
+  <a u="2E82" b="81 38 FD 39"/>
+  <a u="2E83" b="81 38 FE 30"/>
+  <a u="2E84" b="FE 54"/>
+  <a u="2E85" b="81 38 FE 31"/>
+  <a u="2E86" b="81 38 FE 32"/>
+  <a u="2E87" b="81 38 FE 33"/>
+  <a u="2E88" b="FE 57"/>
+  <a u="2E89" b="81 38 FE 34"/>
+  <a u="2E8A" b="81 38 FE 35"/>
+  <a u="2E8B" b="FE 58"/>
+  <a u="2E8C" b="FE 5D"/>
+  <a u="2E8D" b="81 38 FE 36"/>
+  <a u="2E8E" b="81 38 FE 37"/>
+  <a u="2E8F" b="81 38 FE 38"/>
+  <a u="2E90" b="81 38 FE 39"/>
+  <a u="2E91" b="81 39 81 30"/>
+  <a u="2E92" b="81 39 81 31"/>
+  <a u="2E93" b="81 39 81 32"/>
+  <a u="2E94" b="81 39 81 33"/>
+  <a u="2E95" b="81 39 81 34"/>
+  <a u="2E96" b="81 39 81 35"/>
+  <a u="2E97" b="FE 5E"/>
+  <a u="2E98" b="81 39 81 36"/>
+  <a u="2E99" b="81 39 81 37"/>
+  <a u="2E9A" b="81 39 81 38"/>
+  <a u="2E9B" b="81 39 81 39"/>
+  <a u="2E9C" b="81 39 82 30"/>
+  <a u="2E9D" b="81 39 82 31"/>
+  <a u="2E9E" b="81 39 82 32"/>
+  <a u="2E9F" b="81 39 82 33"/>
+  <a u="2EA0" b="81 39 82 34"/>
+  <a u="2EA1" b="81 39 82 35"/>
+  <a u="2EA2" b="81 39 82 36"/>
+  <a u="2EA3" b="81 39 82 37"/>
+  <a u="2EA4" b="81 39 82 38"/>
+  <a u="2EA5" b="81 39 82 39"/>
+  <a u="2EA6" b="81 39 83 30"/>
+  <a u="2EA7" b="FE 6B"/>
+  <a u="2EA8" b="81 39 83 31"/>
+  <a u="2EA9" b="81 39 83 32"/>
+  <a u="2EAA" b="FE 6E"/>
+  <a u="2EAB" b="81 39 83 33"/>
+  <a u="2EAC" b="81 39 83 34"/>
+  <a u="2EAD" b="81 39 83 35"/>
+  <a u="2EAE" b="FE 71"/>
+  <a u="2EAF" b="81 39 83 36"/>
+  <a u="2EB0" b="81 39 83 37"/>
+  <a u="2EB1" b="81 39 83 38"/>
+  <a u="2EB2" b="81 39 83 39"/>
+  <a u="2EB3" b="FE 73"/>
+  <a u="2EB4" b="81 39 84 30"/>
+  <a u="2EB5" b="81 39 84 31"/>
+  <a u="2EB6" b="FE 74"/>
+  <a u="2EB7" b="FE 75"/>
+  <a u="2EB8" b="81 39 84 32"/>
+  <a u="2EB9" b="81 39 84 33"/>
+  <a u="2EBA" b="81 39 84 34"/>
+  <a u="2EBB" b="FE 79"/>
+  <a u="2EBC" b="81 39 84 35"/>
+  <a u="2EBD" b="81 39 84 36"/>
+  <a u="2EBE" b="81 39 84 37"/>
+  <a u="2EBF" b="81 39 84 38"/>
+  <a u="2EC0" b="81 39 84 39"/>
+  <a u="2EC1" b="81 39 85 30"/>
+  <a u="2EC2" b="81 39 85 31"/>
+  <a u="2EC3" b="81 39 85 32"/>
+  <a u="2EC4" b="81 39 85 33"/>
+  <a u="2EC5" b="81 39 85 34"/>
+  <a u="2EC6" b="81 39 85 35"/>
+  <a u="2EC7" b="81 39 85 36"/>
+  <a u="2EC8" b="81 39 85 37"/>
+  <a u="2EC9" b="81 39 85 38"/>
+  <a u="2ECA" b="FE 84"/>
+  <a u="2ECB" b="81 39 85 39"/>
+  <a u="2ECC" b="81 39 86 30"/>
+  <a u="2ECD" b="81 39 86 31"/>
+  <a u="2ECE" b="81 39 86 32"/>
+  <a u="2ECF" b="81 39 86 33"/>
+  <a u="2ED0" b="81 39 86 34"/>
+  <a u="2ED1" b="81 39 86 35"/>
+  <a u="2ED2" b="81 39 86 36"/>
+  <a u="2ED3" b="81 39 86 37"/>
+  <a u="2ED4" b="81 39 86 38"/>
+  <a u="2ED5" b="81 39 86 39"/>
+  <a u="2ED6" b="81 39 87 30"/>
+  <a u="2ED7" b="81 39 87 31"/>
+  <a u="2ED8" b="81 39 87 32"/>
+  <a u="2ED9" b="81 39 87 33"/>
+  <a u="2EDA" b="81 39 87 34"/>
+  <a u="2EDB" b="81 39 87 35"/>
+  <a u="2EDC" b="81 39 87 36"/>
+  <a u="2EDD" b="81 39 87 37"/>
+  <a u="2EDE" b="81 39 87 38"/>
+  <a u="2EDF" b="81 39 87 39"/>
+  <a u="2EE0" b="81 39 88 30"/>
+  <a u="2EE1" b="81 39 88 31"/>
+  <a u="2EE2" b="81 39 88 32"/>
+  <a u="2EE3" b="81 39 88 33"/>
+  <a u="2EE4" b="81 39 88 34"/>
+  <a u="2EE5" b="81 39 88 35"/>
+  <a u="2EE6" b="81 39 88 36"/>
+  <a u="2EE7" b="81 39 88 37"/>
+  <a u="2EE8" b="81 39 88 38"/>
+  <a u="2EE9" b="81 39 88 39"/>
+  <a u="2EEA" b="81 39 89 30"/>
+  <a u="2EEB" b="81 39 89 31"/>
+  <a u="2EEC" b="81 39 89 32"/>
+  <a u="2EED" b="81 39 89 33"/>
+  <a u="2EEE" b="81 39 89 34"/>
+  <a u="2EEF" b="81 39 89 35"/>
+  <a u="2EF0" b="81 39 89 36"/>
+  <a u="2EF1" b="81 39 89 37"/>
+  <a u="2EF2" b="81 39 89 38"/>
+  <a u="2EF3" b="81 39 89 39"/>
+  <a u="2EF4" b="81 39 8A 30"/>
+  <a u="2EF5" b="81 39 8A 31"/>
+  <a u="2EF6" b="81 39 8A 32"/>
+  <a u="2EF7" b="81 39 8A 33"/>
+  <a u="2EF8" b="81 39 8A 34"/>
+  <a u="2EF9" b="81 39 8A 35"/>
+  <a u="2EFA" b="81 39 8A 36"/>
+  <a u="2EFB" b="81 39 8A 37"/>
+  <a u="2EFC" b="81 39 8A 38"/>
+  <a u="2EFD" b="81 39 8A 39"/>
+  <a u="2EFE" b="81 39 8B 30"/>
+  <a u="2EFF" b="81 39 8B 31"/>
+  <a u="2F00" b="81 39 8B 32"/>
+  <a u="2F01" b="81 39 8B 33"/>
+  <a u="2F02" b="81 39 8B 34"/>
+  <a u="2F03" b="81 39 8B 35"/>
+  <a u="2F04" b="81 39 8B 36"/>
+  <a u="2F05" b="81 39 8B 37"/>
+  <a u="2F06" b="81 39 8B 38"/>
+  <a u="2F07" b="81 39 8B 39"/>
+  <a u="2F08" b="81 39 8C 30"/>
+  <a u="2F09" b="81 39 8C 31"/>
+  <a u="2F0A" b="81 39 8C 32"/>
+  <a u="2F0B" b="81 39 8C 33"/>
+  <a u="2F0C" b="81 39 8C 34"/>
+  <a u="2F0D" b="81 39 8C 35"/>
+  <a u="2F0E" b="81 39 8C 36"/>
+  <a u="2F0F" b="81 39 8C 37"/>
+  <a u="2F10" b="81 39 8C 38"/>
+  <a u="2F11" b="81 39 8C 39"/>
+  <a u="2F12" b="81 39 8D 30"/>
+  <a u="2F13" b="81 39 8D 31"/>
+  <a u="2F14" b="81 39 8D 32"/>
+  <a u="2F15" b="81 39 8D 33"/>
+  <a u="2F16" b="81 39 8D 34"/>
+  <a u="2F17" b="81 39 8D 35"/>
+  <a u="2F18" b="81 39 8D 36"/>
+  <a u="2F19" b="81 39 8D 37"/>
+  <a u="2F1A" b="81 39 8D 38"/>
+  <a u="2F1B" b="81 39 8D 39"/>
+  <a u="2F1C" b="81 39 8E 30"/>
+  <a u="2F1D" b="81 39 8E 31"/>
+  <a u="2F1E" b="81 39 8E 32"/>
+  <a u="2F1F" b="81 39 8E 33"/>
+  <a u="2F20" b="81 39 8E 34"/>
+  <a u="2F21" b="81 39 8E 35"/>
+  <a u="2F22" b="81 39 8E 36"/>
+  <a u="2F23" b="81 39 8E 37"/>
+  <a u="2F24" b="81 39 8E 38"/>
+  <a u="2F25" b="81 39 8E 39"/>
+  <a u="2F26" b="81 39 8F 30"/>
+  <a u="2F27" b="81 39 8F 31"/>
+  <a u="2F28" b="81 39 8F 32"/>
+  <a u="2F29" b="81 39 8F 33"/>
+  <a u="2F2A" b="81 39 8F 34"/>
+  <a u="2F2B" b="81 39 8F 35"/>
+  <a u="2F2C" b="81 39 8F 36"/>
+  <a u="2F2D" b="81 39 8F 37"/>
+  <a u="2F2E" b="81 39 8F 38"/>
+  <a u="2F2F" b="81 39 8F 39"/>
+  <a u="2F30" b="81 39 90 30"/>
+  <a u="2F31" b="81 39 90 31"/>
+  <a u="2F32" b="81 39 90 32"/>
+  <a u="2F33" b="81 39 90 33"/>
+  <a u="2F34" b="81 39 90 34"/>
+  <a u="2F35" b="81 39 90 35"/>
+  <a u="2F36" b="81 39 90 36"/>
+  <a u="2F37" b="81 39 90 37"/>
+  <a u="2F38" b="81 39 90 38"/>
+  <a u="2F39" b="81 39 90 39"/>
+  <a u="2F3A" b="81 39 91 30"/>
+  <a u="2F3B" b="81 39 91 31"/>
+  <a u="2F3C" b="81 39 91 32"/>
+  <a u="2F3D" b="81 39 91 33"/>
+  <a u="2F3E" b="81 39 91 34"/>
+  <a u="2F3F" b="81 39 91 35"/>
+  <a u="2F40" b="81 39 91 36"/>
+  <a u="2F41" b="81 39 91 37"/>
+  <a u="2F42" b="81 39 91 38"/>
+  <a u="2F43" b="81 39 91 39"/>
+  <a u="2F44" b="81 39 92 30"/>
+  <a u="2F45" b="81 39 92 31"/>
+  <a u="2F46" b="81 39 92 32"/>
+  <a u="2F47" b="81 39 92 33"/>
+  <a u="2F48" b="81 39 92 34"/>
+  <a u="2F49" b="81 39 92 35"/>
+  <a u="2F4A" b="81 39 92 36"/>
+  <a u="2F4B" b="81 39 92 37"/>
+  <a u="2F4C" b="81 39 92 38"/>
+  <a u="2F4D" b="81 39 92 39"/>
+  <a u="2F4E" b="81 39 93 30"/>
+  <a u="2F4F" b="81 39 93 31"/>
+  <a u="2F50" b="81 39 93 32"/>
+  <a u="2F51" b="81 39 93 33"/>
+  <a u="2F52" b="81 39 93 34"/>
+  <a u="2F53" b="81 39 93 35"/>
+  <a u="2F54" b="81 39 93 36"/>
+  <a u="2F55" b="81 39 93 37"/>
+  <a u="2F56" b="81 39 93 38"/>
+  <a u="2F57" b="81 39 93 39"/>
+  <a u="2F58" b="81 39 94 30"/>
+  <a u="2F59" b="81 39 94 31"/>
+  <a u="2F5A" b="81 39 94 32"/>
+  <a u="2F5B" b="81 39 94 33"/>
+  <a u="2F5C" b="81 39 94 34"/>
+  <a u="2F5D" b="81 39 94 35"/>
+  <a u="2F5E" b="81 39 94 36"/>
+  <a u="2F5F" b="81 39 94 37"/>
+  <a u="2F60" b="81 39 94 38"/>
+  <a u="2F61" b="81 39 94 39"/>
+  <a u="2F62" b="81 39 95 30"/>
+  <a u="2F63" b="81 39 95 31"/>
+  <a u="2F64" b="81 39 95 32"/>
+  <a u="2F65" b="81 39 95 33"/>
+  <a u="2F66" b="81 39 95 34"/>
+  <a u="2F67" b="81 39 95 35"/>
+  <a u="2F68" b="81 39 95 36"/>
+  <a u="2F69" b="81 39 95 37"/>
+  <a u="2F6A" b="81 39 95 38"/>
+  <a u="2F6B" b="81 39 95 39"/>
+  <a u="2F6C" b="81 39 96 30"/>
+  <a u="2F6D" b="81 39 96 31"/>
+  <a u="2F6E" b="81 39 96 32"/>
+  <a u="2F6F" b="81 39 96 33"/>
+  <a u="2F70" b="81 39 96 34"/>
+  <a u="2F71" b="81 39 96 35"/>
+  <a u="2F72" b="81 39 96 36"/>
+  <a u="2F73" b="81 39 96 37"/>
+  <a u="2F74" b="81 39 96 38"/>
+  <a u="2F75" b="81 39 96 39"/>
+  <a u="2F76" b="81 39 97 30"/>
+  <a u="2F77" b="81 39 97 31"/>
+  <a u="2F78" b="81 39 97 32"/>
+  <a u="2F79" b="81 39 97 33"/>
+  <a u="2F7A" b="81 39 97 34"/>
+  <a u="2F7B" b="81 39 97 35"/>
+  <a u="2F7C" b="81 39 97 36"/>
+  <a u="2F7D" b="81 39 97 37"/>
+  <a u="2F7E" b="81 39 97 38"/>
+  <a u="2F7F" b="81 39 97 39"/>
+  <a u="2F80" b="81 39 98 30"/>
+  <a u="2F81" b="81 39 98 31"/>
+  <a u="2F82" b="81 39 98 32"/>
+  <a u="2F83" b="81 39 98 33"/>
+  <a u="2F84" b="81 39 98 34"/>
+  <a u="2F85" b="81 39 98 35"/>
+  <a u="2F86" b="81 39 98 36"/>
+  <a u="2F87" b="81 39 98 37"/>
+  <a u="2F88" b="81 39 98 38"/>
+  <a u="2F89" b="81 39 98 39"/>
+  <a u="2F8A" b="81 39 99 30"/>
+  <a u="2F8B" b="81 39 99 31"/>
+  <a u="2F8C" b="81 39 99 32"/>
+  <a u="2F8D" b="81 39 99 33"/>
+  <a u="2F8E" b="81 39 99 34"/>
+  <a u="2F8F" b="81 39 99 35"/>
+  <a u="2F90" b="81 39 99 36"/>
+  <a u="2F91" b="81 39 99 37"/>
+  <a u="2F92" b="81 39 99 38"/>
+  <a u="2F93" b="81 39 99 39"/>
+  <a u="2F94" b="81 39 9A 30"/>
+  <a u="2F95" b="81 39 9A 31"/>
+  <a u="2F96" b="81 39 9A 32"/>
+  <a u="2F97" b="81 39 9A 33"/>
+  <a u="2F98" b="81 39 9A 34"/>
+  <a u="2F99" b="81 39 9A 35"/>
+  <a u="2F9A" b="81 39 9A 36"/>
+  <a u="2F9B" b="81 39 9A 37"/>
+  <a u="2F9C" b="81 39 9A 38"/>
+  <a u="2F9D" b="81 39 9A 39"/>
+  <a u="2F9E" b="81 39 9B 30"/>
+  <a u="2F9F" b="81 39 9B 31"/>
+  <a u="2FA0" b="81 39 9B 32"/>
+  <a u="2FA1" b="81 39 9B 33"/>
+  <a u="2FA2" b="81 39 9B 34"/>
+  <a u="2FA3" b="81 39 9B 35"/>
+  <a u="2FA4" b="81 39 9B 36"/>
+  <a u="2FA5" b="81 39 9B 37"/>
+  <a u="2FA6" b="81 39 9B 38"/>
+  <a u="2FA7" b="81 39 9B 39"/>
+  <a u="2FA8" b="81 39 9C 30"/>
+  <a u="2FA9" b="81 39 9C 31"/>
+  <a u="2FAA" b="81 39 9C 32"/>
+  <a u="2FAB" b="81 39 9C 33"/>
+  <a u="2FAC" b="81 39 9C 34"/>
+  <a u="2FAD" b="81 39 9C 35"/>
+  <a u="2FAE" b="81 39 9C 36"/>
+  <a u="2FAF" b="81 39 9C 37"/>
+  <a u="2FB0" b="81 39 9C 38"/>
+  <a u="2FB1" b="81 39 9C 39"/>
+  <a u="2FB2" b="81 39 9D 30"/>
+  <a u="2FB3" b="81 39 9D 31"/>
+  <a u="2FB4" b="81 39 9D 32"/>
+  <a u="2FB5" b="81 39 9D 33"/>
+  <a u="2FB6" b="81 39 9D 34"/>
+  <a u="2FB7" b="81 39 9D 35"/>
+  <a u="2FB8" b="81 39 9D 36"/>
+  <a u="2FB9" b="81 39 9D 37"/>
+  <a u="2FBA" b="81 39 9D 38"/>
+  <a u="2FBB" b="81 39 9D 39"/>
+  <a u="2FBC" b="81 39 9E 30"/>
+  <a u="2FBD" b="81 39 9E 31"/>
+  <a u="2FBE" b="81 39 9E 32"/>
+  <a u="2FBF" b="81 39 9E 33"/>
+  <a u="2FC0" b="81 39 9E 34"/>
+  <a u="2FC1" b="81 39 9E 35"/>
+  <a u="2FC2" b="81 39 9E 36"/>
+  <a u="2FC3" b="81 39 9E 37"/>
+  <a u="2FC4" b="81 39 9E 38"/>
+  <a u="2FC5" b="81 39 9E 39"/>
+  <a u="2FC6" b="81 39 9F 30"/>
+  <a u="2FC7" b="81 39 9F 31"/>
+  <a u="2FC8" b="81 39 9F 32"/>
+  <a u="2FC9" b="81 39 9F 33"/>
+  <a u="2FCA" b="81 39 9F 34"/>
+  <a u="2FCB" b="81 39 9F 35"/>
+  <a u="2FCC" b="81 39 9F 36"/>
+  <a u="2FCD" b="81 39 9F 37"/>
+  <a u="2FCE" b="81 39 9F 38"/>
+  <a u="2FCF" b="81 39 9F 39"/>
+  <a u="2FD0" b="81 39 A0 30"/>
+  <a u="2FD1" b="81 39 A0 31"/>
+  <a u="2FD2" b="81 39 A0 32"/>
+  <a u="2FD3" b="81 39 A0 33"/>
+  <a u="2FD4" b="81 39 A0 34"/>
+  <a u="2FD5" b="81 39 A0 35"/>
+  <a u="2FD6" b="81 39 A0 36"/>
+  <a u="2FD7" b="81 39 A0 37"/>
+  <a u="2FD8" b="81 39 A0 38"/>
+  <a u="2FD9" b="81 39 A0 39"/>
+  <a u="2FDA" b="81 39 A1 30"/>
+  <a u="2FDB" b="81 39 A1 31"/>
+  <a u="2FDC" b="81 39 A1 32"/>
+  <a u="2FDD" b="81 39 A1 33"/>
+  <a u="2FDE" b="81 39 A1 34"/>
+  <a u="2FDF" b="81 39 A1 35"/>
+  <a u="2FE0" b="81 39 A1 36"/>
+  <a u="2FE1" b="81 39 A1 37"/>
+  <a u="2FE2" b="81 39 A1 38"/>
+  <a u="2FE3" b="81 39 A1 39"/>
+  <a u="2FE4" b="81 39 A2 30"/>
+  <a u="2FE5" b="81 39 A2 31"/>
+  <a u="2FE6" b="81 39 A2 32"/>
+  <a u="2FE7" b="81 39 A2 33"/>
+  <a u="2FE8" b="81 39 A2 34"/>
+  <a u="2FE9" b="81 39 A2 35"/>
+  <a u="2FEA" b="81 39 A2 36"/>
+  <a u="2FEB" b="81 39 A2 37"/>
+  <a u="2FEC" b="81 39 A2 38"/>
+  <a u="2FED" b="81 39 A2 39"/>
+  <a u="2FEE" b="81 39 A3 30"/>
+  <a u="2FEF" b="81 39 A3 31"/>
+  <a u="2FF0" b="A9 8A"/>
+  <a u="2FF1" b="A9 8B"/>
+  <a u="2FF2" b="A9 8C"/>
+  <a u="2FF3" b="A9 8D"/>
+  <a u="2FF4" b="A9 8E"/>
+  <a u="2FF5" b="A9 8F"/>
+  <a u="2FF6" b="A9 90"/>
+  <a u="2FF7" b="A9 91"/>
+  <a u="2FF8" b="A9 92"/>
+  <a u="2FF9" b="A9 93"/>
+  <a u="2FFA" b="A9 94"/>
+  <a u="2FFB" b="A9 95"/>
+  <a u="2FFC" b="81 39 A3 32"/>
+  <a u="2FFD" b="81 39 A3 33"/>
+  <a u="2FFE" b="81 39 A3 34"/>
+  <a u="2FFF" b="81 39 A3 35"/>
+  <a u="3000" b="A1 A1"/>
+  <a u="3001" b="A1 A2"/>
+  <a u="3002" b="A1 A3"/>
+  <a u="3003" b="A1 A8"/>
+  <a u="3004" b="81 39 A3 36"/>
+  <a u="3005" b="A1 A9"/>
+  <a u="3006" b="A9 65"/>
+  <a u="3007" b="A9 96"/>
+  <a u="3008" b="A1 B4"/>
+  <a u="3009" b="A1 B5"/>
+  <a u="300A" b="A1 B6"/>
+  <a u="300B" b="A1 B7"/>
+  <a u="300C" b="A1 B8"/>
+  <a u="300D" b="A1 B9"/>
+  <a u="300E" b="A1 BA"/>
+  <a u="300F" b="A1 BB"/>
+  <a u="3010" b="A1 BE"/>
+  <a u="3011" b="A1 BF"/>
+  <a u="3012" b="A8 93"/>
+  <a u="3013" b="A1 FE"/>
+  <a u="3014" b="A1 B2"/>
+  <a u="3015" b="A1 B3"/>
+  <a u="3016" b="A1 BC"/>
+  <a u="3017" b="A1 BD"/>
+  <a u="3018" b="81 39 A3 37"/>
+  <a u="3019" b="81 39 A3 38"/>
+  <a u="301A" b="81 39 A3 39"/>
+  <a u="301B" b="81 39 A4 30"/>
+  <a u="301C" b="81 39 A4 31"/>
+  <a u="301D" b="A8 94"/>
+  <a u="301E" b="A8 95"/>
+  <a u="301F" b="81 39 A4 32"/>
+  <a u="3020" b="81 39 A4 33"/>
+  <a u="3021" b="A9 40"/>
+  <a u="3022" b="A9 41"/>
+  <a u="3023" b="A9 42"/>
+  <a u="3024" b="A9 43"/>
+  <a u="3025" b="A9 44"/>
+  <a u="3026" b="A9 45"/>
+  <a u="3027" b="A9 46"/>
+  <a u="3028" b="A9 47"/>
+  <a u="3029" b="A9 48"/>
+  <a u="302A" b="81 39 A4 34"/>
+  <a u="302B" b="81 39 A4 35"/>
+  <a u="302C" b="81 39 A4 36"/>
+  <a u="302D" b="81 39 A4 37"/>
+  <a u="302E" b="81 39 A4 38"/>
+  <a u="302F" b="81 39 A4 39"/>
+  <a u="3030" b="81 39 A5 30"/>
+  <a u="3031" b="81 39 A5 31"/>
+  <a u="3032" b="81 39 A5 32"/>
+  <a u="3033" b="81 39 A5 33"/>
+  <a u="3034" b="81 39 A5 34"/>
+  <a u="3035" b="81 39 A5 35"/>
+  <a u="3036" b="81 39 A5 36"/>
+  <a u="3037" b="81 39 A5 37"/>
+  <a u="3038" b="81 39 A5 38"/>
+  <a u="3039" b="81 39 A5 39"/>
+  <a u="303A" b="81 39 A6 30"/>
+  <a u="303B" b="81 39 A6 31"/>
+  <a u="303C" b="81 39 A6 32"/>
+  <a u="303D" b="81 39 A6 33"/>
+  <a u="303E" b="A9 89"/>
+  <a u="303F" b="81 39 A6 34"/>
+  <a u="3040" b="81 39 A6 35"/>
+  <a u="3041" b="A4 A1"/>
+  <a u="3042" b="A4 A2"/>
+  <a u="3043" b="A4 A3"/>
+  <a u="3044" b="A4 A4"/>
+  <a u="3045" b="A4 A5"/>
+  <a u="3046" b="A4 A6"/>
+  <a u="3047" b="A4 A7"/>
+  <a u="3048" b="A4 A8"/>
+  <a u="3049" b="A4 A9"/>
+  <a u="304A" b="A4 AA"/>
+  <a u="304B" b="A4 AB"/>
+  <a u="304C" b="A4 AC"/>
+  <a u="304D" b="A4 AD"/>
+  <a u="304E" b="A4 AE"/>
+  <a u="304F" b="A4 AF"/>
+  <a u="3050" b="A4 B0"/>
+  <a u="3051" b="A4 B1"/>
+  <a u="3052" b="A4 B2"/>
+  <a u="3053" b="A4 B3"/>
+  <a u="3054" b="A4 B4"/>
+  <a u="3055" b="A4 B5"/>
+  <a u="3056" b="A4 B6"/>
+  <a u="3057" b="A4 B7"/>
+  <a u="3058" b="A4 B8"/>
+  <a u="3059" b="A4 B9"/>
+  <a u="305A" b="A4 BA"/>
+  <a u="305B" b="A4 BB"/>
+  <a u="305C" b="A4 BC"/>
+  <a u="305D" b="A4 BD"/>
+  <a u="305E" b="A4 BE"/>
+  <a u="305F" b="A4 BF"/>
+  <a u="3060" b="A4 C0"/>
+  <a u="3061" b="A4 C1"/>
+  <a u="3062" b="A4 C2"/>
+  <a u="3063" b="A4 C3"/>
+  <a u="3064" b="A4 C4"/>
+  <a u="3065" b="A4 C5"/>
+  <a u="3066" b="A4 C6"/>
+  <a u="3067" b="A4 C7"/>
+  <a u="3068" b="A4 C8"/>
+  <a u="3069" b="A4 C9"/>
+  <a u="306A" b="A4 CA"/>
+  <a u="306B" b="A4 CB"/>
+  <a u="306C" b="A4 CC"/>
+  <a u="306D" b="A4 CD"/>
+  <a u="306E" b="A4 CE"/>
+  <a u="306F" b="A4 CF"/>
+  <a u="3070" b="A4 D0"/>
+  <a u="3071" b="A4 D1"/>
+  <a u="3072" b="A4 D2"/>
+  <a u="3073" b="A4 D3"/>
+  <a u="3074" b="A4 D4"/>
+  <a u="3075" b="A4 D5"/>
+  <a u="3076" b="A4 D6"/>
+  <a u="3077" b="A4 D7"/>
+  <a u="3078" b="A4 D8"/>
+  <a u="3079" b="A4 D9"/>
+  <a u="307A" b="A4 DA"/>
+  <a u="307B" b="A4 DB"/>
+  <a u="307C" b="A4 DC"/>
+  <a u="307D" b="A4 DD"/>
+  <a u="307E" b="A4 DE"/>
+  <a u="307F" b="A4 DF"/>
+  <a u="3080" b="A4 E0"/>
+  <a u="3081" b="A4 E1"/>
+  <a u="3082" b="A4 E2"/>
+  <a u="3083" b="A4 E3"/>
+  <a u="3084" b="A4 E4"/>
+  <a u="3085" b="A4 E5"/>
+  <a u="3086" b="A4 E6"/>
+  <a u="3087" b="A4 E7"/>
+  <a u="3088" b="A4 E8"/>
+  <a u="3089" b="A4 E9"/>
+  <a u="308A" b="A4 EA"/>
+  <a u="308B" b="A4 EB"/>
+  <a u="308C" b="A4 EC"/>
+  <a u="308D" b="A4 ED"/>
+  <a u="308E" b="A4 EE"/>
+  <a u="308F" b="A4 EF"/>
+  <a u="3090" b="A4 F0"/>
+  <a u="3091" b="A4 F1"/>
+  <a u="3092" b="A4 F2"/>
+  <a u="3093" b="A4 F3"/>
+  <a u="3094" b="81 39 A6 36"/>
+  <a u="3095" b="81 39 A6 37"/>
+  <a u="3096" b="81 39 A6 38"/>
+  <a u="3097" b="81 39 A6 39"/>
+  <a u="3098" b="81 39 A7 30"/>
+  <a u="3099" b="81 39 A7 31"/>
+  <a u="309A" b="81 39 A7 32"/>
+  <a u="309B" b="A9 61"/>
+  <a u="309C" b="A9 62"/>
+  <a u="309D" b="A9 66"/>
+  <a u="309E" b="A9 67"/>
+  <a u="309F" b="81 39 A7 33"/>
+  <a u="30A0" b="81 39 A7 34"/>
+  <a u="30A1" b="A5 A1"/>
+  <a u="30A2" b="A5 A2"/>
+  <a u="30A3" b="A5 A3"/>
+  <a u="30A4" b="A5 A4"/>
+  <a u="30A5" b="A5 A5"/>
+  <a u="30A6" b="A5 A6"/>
+  <a u="30A7" b="A5 A7"/>
+  <a u="30A8" b="A5 A8"/>
+  <a u="30A9" b="A5 A9"/>
+  <a u="30AA" b="A5 AA"/>
+  <a u="30AB" b="A5 AB"/>
+  <a u="30AC" b="A5 AC"/>
+  <a u="30AD" b="A5 AD"/>
+  <a u="30AE" b="A5 AE"/>
+  <a u="30AF" b="A5 AF"/>
+  <a u="30B0" b="A5 B0"/>
+  <a u="30B1" b="A5 B1"/>
+  <a u="30B2" b="A5 B2"/>
+  <a u="30B3" b="A5 B3"/>
+  <a u="30B4" b="A5 B4"/>
+  <a u="30B5" b="A5 B5"/>
+  <a u="30B6" b="A5 B6"/>
+  <a u="30B7" b="A5 B7"/>
+  <a u="30B8" b="A5 B8"/>
+  <a u="30B9" b="A5 B9"/>
+  <a u="30BA" b="A5 BA"/>
+  <a u="30BB" b="A5 BB"/>
+  <a u="30BC" b="A5 BC"/>
+  <a u="30BD" b="A5 BD"/>
+  <a u="30BE" b="A5 BE"/>
+  <a u="30BF" b="A5 BF"/>
+  <a u="30C0" b="A5 C0"/>
+  <a u="30C1" b="A5 C1"/>
+  <a u="30C2" b="A5 C2"/>
+  <a u="30C3" b="A5 C3"/>
+  <a u="30C4" b="A5 C4"/>
+  <a u="30C5" b="A5 C5"/>
+  <a u="30C6" b="A5 C6"/>
+  <a u="30C7" b="A5 C7"/>
+  <a u="30C8" b="A5 C8"/>
+  <a u="30C9" b="A5 C9"/>
+  <a u="30CA" b="A5 CA"/>
+  <a u="30CB" b="A5 CB"/>
+  <a u="30CC" b="A5 CC"/>
+  <a u="30CD" b="A5 CD"/>
+  <a u="30CE" b="A5 CE"/>
+  <a u="30CF" b="A5 CF"/>
+  <a u="30D0" b="A5 D0"/>
+  <a u="30D1" b="A5 D1"/>
+  <a u="30D2" b="A5 D2"/>
+  <a u="30D3" b="A5 D3"/>
+  <a u="30D4" b="A5 D4"/>
+  <a u="30D5" b="A5 D5"/>
+  <a u="30D6" b="A5 D6"/>
+  <a u="30D7" b="A5 D7"/>
+  <a u="30D8" b="A5 D8"/>
+  <a u="30D9" b="A5 D9"/>
+  <a u="30DA" b="A5 DA"/>
+  <a u="30DB" b="A5 DB"/>
+  <a u="30DC" b="A5 DC"/>
+  <a u="30DD" b="A5 DD"/>
+  <a u="30DE" b="A5 DE"/>
+  <a u="30DF" b="A5 DF"/>
+  <a u="30E0" b="A5 E0"/>
+  <a u="30E1" b="A5 E1"/>
+  <a u="30E2" b="A5 E2"/>
+  <a u="30E3" b="A5 E3"/>
+  <a u="30E4" b="A5 E4"/>
+  <a u="30E5" b="A5 E5"/>
+  <a u="30E6" b="A5 E6"/>
+  <a u="30E7" b="A5 E7"/>
+  <a u="30E8" b="A5 E8"/>
+  <a u="30E9" b="A5 E9"/>
+  <a u="30EA" b="A5 EA"/>
+  <a u="30EB" b="A5 EB"/>
+  <a u="30EC" b="A5 EC"/>
+  <a u="30ED" b="A5 ED"/>
+  <a u="30EE" b="A5 EE"/>
+  <a u="30EF" b="A5 EF"/>
+  <a u="30F0" b="A5 F0"/>
+  <a u="30F1" b="A5 F1"/>
+  <a u="30F2" b="A5 F2"/>
+  <a u="30F3" b="A5 F3"/>
+  <a u="30F4" b="A5 F4"/>
+  <a u="30F5" b="A5 F5"/>
+  <a u="30F6" b="A5 F6"/>
+  <a u="30F7" b="81 39 A7 35"/>
+  <a u="30F8" b="81 39 A7 36"/>
+  <a u="30F9" b="81 39 A7 37"/>
+  <a u="30FA" b="81 39 A7 38"/>
+  <a u="30FB" b="81 39 A7 39"/>
+  <a u="30FC" b="A9 60"/>
+  <a u="30FD" b="A9 63"/>
+  <a u="30FE" b="A9 64"/>
+  <a u="30FF" b="81 39 A8 30"/>
+  <a u="3100" b="81 39 A8 31"/>
+  <a u="3101" b="81 39 A8 32"/>
+  <a u="3102" b="81 39 A8 33"/>
+  <a u="3103" b="81 39 A8 34"/>
+  <a u="3104" b="81 39 A8 35"/>
+  <a u="3105" b="A8 C5"/>
+  <a u="3106" b="A8 C6"/>
+  <a u="3107" b="A8 C7"/>
+  <a u="3108" b="A8 C8"/>
+  <a u="3109" b="A8 C9"/>
+  <a u="310A" b="A8 CA"/>
+  <a u="310B" b="A8 CB"/>
+  <a u="310C" b="A8 CC"/>
+  <a u="310D" b="A8 CD"/>
+  <a u="310E" b="A8 CE"/>
+  <a u="310F" b="A8 CF"/>
+  <a u="3110" b="A8 D0"/>
+  <a u="3111" b="A8 D1"/>
+  <a u="3112" b="A8 D2"/>
+  <a u="3113" b="A8 D3"/>
+  <a u="3114" b="A8 D4"/>
+  <a u="3115" b="A8 D5"/>
+  <a u="3116" b="A8 D6"/>
+  <a u="3117" b="A8 D7"/>
+  <a u="3118" b="A8 D8"/>
+  <a u="3119" b="A8 D9"/>
+  <a u="311A" b="A8 DA"/>
+  <a u="311B" b="A8 DB"/>
+  <a u="311C" b="A8 DC"/>
+  <a u="311D" b="A8 DD"/>
+  <a u="311E" b="A8 DE"/>
+  <a u="311F" b="A8 DF"/>
+  <a u="3120" b="A8 E0"/>
+  <a u="3121" b="A8 E1"/>
+  <a u="3122" b="A8 E2"/>
+  <a u="3123" b="A8 E3"/>
+  <a u="3124" b="A8 E4"/>
+  <a u="3125" b="A8 E5"/>
+  <a u="3126" b="A8 E6"/>
+  <a u="3127" b="A8 E7"/>
+  <a u="3128" b="A8 E8"/>
+  <a u="3129" b="A8 E9"/>
+  <a u="312A" b="81 39 A8 36"/>
+  <a u="312B" b="81 39 A8 37"/>
+  <a u="312C" b="81 39 A8 38"/>
+  <a u="312D" b="81 39 A8 39"/>
+  <a u="312E" b="81 39 A9 30"/>
+  <a u="312F" b="81 39 A9 31"/>
+  <a u="3130" b="81 39 A9 32"/>
+  <a u="3131" b="81 39 A9 33"/>
+  <a u="3132" b="81 39 A9 34"/>
+  <a u="3133" b="81 39 A9 35"/>
+  <a u="3134" b="81 39 A9 36"/>
+  <a u="3135" b="81 39 A9 37"/>
+  <a u="3136" b="81 39 A9 38"/>
+  <a u="3137" b="81 39 A9 39"/>
+  <a u="3138" b="81 39 AA 30"/>
+  <a u="3139" b="81 39 AA 31"/>
+  <a u="313A" b="81 39 AA 32"/>
+  <a u="313B" b="81 39 AA 33"/>
+  <a u="313C" b="81 39 AA 34"/>
+  <a u="313D" b="81 39 AA 35"/>
+  <a u="313E" b="81 39 AA 36"/>
+  <a u="313F" b="81 39 AA 37"/>
+  <a u="3140" b="81 39 AA 38"/>
+  <a u="3141" b="81 39 AA 39"/>
+  <a u="3142" b="81 39 AB 30"/>
+  <a u="3143" b="81 39 AB 31"/>
+  <a u="3144" b="81 39 AB 32"/>
+  <a u="3145" b="81 39 AB 33"/>
+  <a u="3146" b="81 39 AB 34"/>
+  <a u="3147" b="81 39 AB 35"/>
+  <a u="3148" b="81 39 AB 36"/>
+  <a u="3149" b="81 39 AB 37"/>
+  <a u="314A" b="81 39 AB 38"/>
+  <a u="314B" b="81 39 AB 39"/>
+  <a u="314C" b="81 39 AC 30"/>
+  <a u="314D" b="81 39 AC 31"/>
+  <a u="314E" b="81 39 AC 32"/>
+  <a u="314F" b="81 39 AC 33"/>
+  <a u="3150" b="81 39 AC 34"/>
+  <a u="3151" b="81 39 AC 35"/>
+  <a u="3152" b="81 39 AC 36"/>
+  <a u="3153" b="81 39 AC 37"/>
+  <a u="3154" b="81 39 AC 38"/>
+  <a u="3155" b="81 39 AC 39"/>
+  <a u="3156" b="81 39 AD 30"/>
+  <a u="3157" b="81 39 AD 31"/>
+  <a u="3158" b="81 39 AD 32"/>
+  <a u="3159" b="81 39 AD 33"/>
+  <a u="315A" b="81 39 AD 34"/>
+  <a u="315B" b="81 39 AD 35"/>
+  <a u="315C" b="81 39 AD 36"/>
+  <a u="315D" b="81 39 AD 37"/>
+  <a u="315E" b="81 39 AD 38"/>
+  <a u="315F" b="81 39 AD 39"/>
+  <a u="3160" b="81 39 AE 30"/>
+  <a u="3161" b="81 39 AE 31"/>
+  <a u="3162" b="81 39 AE 32"/>
+  <a u="3163" b="81 39 AE 33"/>
+  <a u="3164" b="81 39 AE 34"/>
+  <a u="3165" b="81 39 AE 35"/>
+  <a u="3166" b="81 39 AE 36"/>
+  <a u="3167" b="81 39 AE 37"/>
+  <a u="3168" b="81 39 AE 38"/>
+  <a u="3169" b="81 39 AE 39"/>
+  <a u="316A" b="81 39 AF 30"/>
+  <a u="316B" b="81 39 AF 31"/>
+  <a u="316C" b="81 39 AF 32"/>
+  <a u="316D" b="81 39 AF 33"/>
+  <a u="316E" b="81 39 AF 34"/>
+  <a u="316F" b="81 39 AF 35"/>
+  <a u="3170" b="81 39 AF 36"/>
+  <a u="3171" b="81 39 AF 37"/>
+  <a u="3172" b="81 39 AF 38"/>
+  <a u="3173" b="81 39 AF 39"/>
+  <a u="3174" b="81 39 B0 30"/>
+  <a u="3175" b="81 39 B0 31"/>
+  <a u="3176" b="81 39 B0 32"/>
+  <a u="3177" b="81 39 B0 33"/>
+  <a u="3178" b="81 39 B0 34"/>
+  <a u="3179" b="81 39 B0 35"/>
+  <a u="317A" b="81 39 B0 36"/>
+  <a u="317B" b="81 39 B0 37"/>
+  <a u="317C" b="81 39 B0 38"/>
+  <a u="317D" b="81 39 B0 39"/>
+  <a u="317E" b="81 39 B1 30"/>
+  <a u="317F" b="81 39 B1 31"/>
+  <a u="3180" b="81 39 B1 32"/>
+  <a u="3181" b="81 39 B1 33"/>
+  <a u="3182" b="81 39 B1 34"/>
+  <a u="3183" b="81 39 B1 35"/>
+  <a u="3184" b="81 39 B1 36"/>
+  <a u="3185" b="81 39 B1 37"/>
+  <a u="3186" b="81 39 B1 38"/>
+  <a u="3187" b="81 39 B1 39"/>
+  <a u="3188" b="81 39 B2 30"/>
+  <a u="3189" b="81 39 B2 31"/>
+  <a u="318A" b="81 39 B2 32"/>
+  <a u="318B" b="81 39 B2 33"/>
+  <a u="318C" b="81 39 B2 34"/>
+  <a u="318D" b="81 39 B2 35"/>
+  <a u="318E" b="81 39 B2 36"/>
+  <a u="318F" b="81 39 B2 37"/>
+  <a u="3190" b="81 39 B2 38"/>
+  <a u="3191" b="81 39 B2 39"/>
+  <a u="3192" b="81 39 B3 30"/>
+  <a u="3193" b="81 39 B3 31"/>
+  <a u="3194" b="81 39 B3 32"/>
+  <a u="3195" b="81 39 B3 33"/>
+  <a u="3196" b="81 39 B3 34"/>
+  <a u="3197" b="81 39 B3 35"/>
+  <a u="3198" b="81 39 B3 36"/>
+  <a u="3199" b="81 39 B3 37"/>
+  <a u="319A" b="81 39 B3 38"/>
+  <a u="319B" b="81 39 B3 39"/>
+  <a u="319C" b="81 39 B4 30"/>
+  <a u="319D" b="81 39 B4 31"/>
+  <a u="319E" b="81 39 B4 32"/>
+  <a u="319F" b="81 39 B4 33"/>
+  <a u="31A0" b="81 39 B4 34"/>
+  <a u="31A1" b="81 39 B4 35"/>
+  <a u="31A2" b="81 39 B4 36"/>
+  <a u="31A3" b="81 39 B4 37"/>
+  <a u="31A4" b="81 39 B4 38"/>
+  <a u="31A5" b="81 39 B4 39"/>
+  <a u="31A6" b="81 39 B5 30"/>
+  <a u="31A7" b="81 39 B5 31"/>
+  <a u="31A8" b="81 39 B5 32"/>
+  <a u="31A9" b="81 39 B5 33"/>
+  <a u="31AA" b="81 39 B5 34"/>
+  <a u="31AB" b="81 39 B5 35"/>
+  <a u="31AC" b="81 39 B5 36"/>
+  <a u="31AD" b="81 39 B5 37"/>
+  <a u="31AE" b="81 39 B5 38"/>
+  <a u="31AF" b="81 39 B5 39"/>
+  <a u="31B0" b="81 39 B6 30"/>
+  <a u="31B1" b="81 39 B6 31"/>
+  <a u="31B2" b="81 39 B6 32"/>
+  <a u="31B3" b="81 39 B6 33"/>
+  <a u="31B4" b="81 39 B6 34"/>
+  <a u="31B5" b="81 39 B6 35"/>
+  <a u="31B6" b="81 39 B6 36"/>
+  <a u="31B7" b="81 39 B6 37"/>
+  <a u="31B8" b="81 39 B6 38"/>
+  <a u="31B9" b="81 39 B6 39"/>
+  <a u="31BA" b="81 39 B7 30"/>
+  <a u="31BB" b="81 39 B7 31"/>
+  <a u="31BC" b="81 39 B7 32"/>
+  <a u="31BD" b="81 39 B7 33"/>
+  <a u="31BE" b="81 39 B7 34"/>
+  <a u="31BF" b="81 39 B7 35"/>
+  <a u="31C0" b="81 39 B7 36"/>
+  <a u="31C1" b="81 39 B7 37"/>
+  <a u="31C2" b="81 39 B7 38"/>
+  <a u="31C3" b="81 39 B7 39"/>
+  <a u="31C4" b="81 39 B8 30"/>
+  <a u="31C5" b="81 39 B8 31"/>
+  <a u="31C6" b="81 39 B8 32"/>
+  <a u="31C7" b="81 39 B8 33"/>
+  <a u="31C8" b="81 39 B8 34"/>
+  <a u="31C9" b="81 39 B8 35"/>
+  <a u="31CA" b="81 39 B8 36"/>
+  <a u="31CB" b="81 39 B8 37"/>
+  <a u="31CC" b="81 39 B8 38"/>
+  <a u="31CD" b="81 39 B8 39"/>
+  <a u="31CE" b="81 39 B9 30"/>
+  <a u="31CF" b="81 39 B9 31"/>
+  <a u="31D0" b="81 39 B9 32"/>
+  <a u="31D1" b="81 39 B9 33"/>
+  <a u="31D2" b="81 39 B9 34"/>
+  <a u="31D3" b="81 39 B9 35"/>
+  <a u="31D4" b="81 39 B9 36"/>
+  <a u="31D5" b="81 39 B9 37"/>
+  <a u="31D6" b="81 39 B9 38"/>
+  <a u="31D7" b="81 39 B9 39"/>
+  <a u="31D8" b="81 39 BA 30"/>
+  <a u="31D9" b="81 39 BA 31"/>
+  <a u="31DA" b="81 39 BA 32"/>
+  <a u="31DB" b="81 39 BA 33"/>
+  <a u="31DC" b="81 39 BA 34"/>
+  <a u="31DD" b="81 39 BA 35"/>
+  <a u="31DE" b="81 39 BA 36"/>
+  <a u="31DF" b="81 39 BA 37"/>
+  <a u="31E0" b="81 39 BA 38"/>
+  <a u="31E1" b="81 39 BA 39"/>
+  <a u="31E2" b="81 39 BB 30"/>
+  <a u="31E3" b="81 39 BB 31"/>
+  <a u="31E4" b="81 39 BB 32"/>
+  <a u="31E5" b="81 39 BB 33"/>
+  <a u="31E6" b="81 39 BB 34"/>
+  <a u="31E7" b="81 39 BB 35"/>
+  <a u="31E8" b="81 39 BB 36"/>
+  <a u="31E9" b="81 39 BB 37"/>
+  <a u="31EA" b="81 39 BB 38"/>
+  <a u="31EB" b="81 39 BB 39"/>
+  <a u="31EC" b="81 39 BC 30"/>
+  <a u="31ED" b="81 39 BC 31"/>
+  <a u="31EE" b="81 39 BC 32"/>
+  <a u="31EF" b="81 39 BC 33"/>
+  <a u="31F0" b="81 39 BC 34"/>
+  <a u="31F1" b="81 39 BC 35"/>
+  <a u="31F2" b="81 39 BC 36"/>
+  <a u="31F3" b="81 39 BC 37"/>
+  <a u="31F4" b="81 39 BC 38"/>
+  <a u="31F5" b="81 39 BC 39"/>
+  <a u="31F6" b="81 39 BD 30"/>
+  <a u="31F7" b="81 39 BD 31"/>
+  <a u="31F8" b="81 39 BD 32"/>
+  <a u="31F9" b="81 39 BD 33"/>
+  <a u="31FA" b="81 39 BD 34"/>
+  <a u="31FB" b="81 39 BD 35"/>
+  <a u="31FC" b="81 39 BD 36"/>
+  <a u="31FD" b="81 39 BD 37"/>
+  <a u="31FE" b="81 39 BD 38"/>
+  <a u="31FF" b="81 39 BD 39"/>
+  <a u="3200" b="81 39 BE 30"/>
+  <a u="3201" b="81 39 BE 31"/>
+  <a u="3202" b="81 39 BE 32"/>
+  <a u="3203" b="81 39 BE 33"/>
+  <a u="3204" b="81 39 BE 34"/>
+  <a u="3205" b="81 39 BE 35"/>
+  <a u="3206" b="81 39 BE 36"/>
+  <a u="3207" b="81 39 BE 37"/>
+  <a u="3208" b="81 39 BE 38"/>
+  <a u="3209" b="81 39 BE 39"/>
+  <a u="320A" b="81 39 BF 30"/>
+  <a u="320B" b="81 39 BF 31"/>
+  <a u="320C" b="81 39 BF 32"/>
+  <a u="320D" b="81 39 BF 33"/>
+  <a u="320E" b="81 39 BF 34"/>
+  <a u="320F" b="81 39 BF 35"/>
+  <a u="3210" b="81 39 BF 36"/>
+  <a u="3211" b="81 39 BF 37"/>
+  <a u="3212" b="81 39 BF 38"/>
+  <a u="3213" b="81 39 BF 39"/>
+  <a u="3214" b="81 39 C0 30"/>
+  <a u="3215" b="81 39 C0 31"/>
+  <a u="3216" b="81 39 C0 32"/>
+  <a u="3217" b="81 39 C0 33"/>
+  <a u="3218" b="81 39 C0 34"/>
+  <a u="3219" b="81 39 C0 35"/>
+  <a u="321A" b="81 39 C0 36"/>
+  <a u="321B" b="81 39 C0 37"/>
+  <a u="321C" b="81 39 C0 38"/>
+  <a u="321D" b="81 39 C0 39"/>
+  <a u="321E" b="81 39 C1 30"/>
+  <a u="321F" b="81 39 C1 31"/>
+  <a u="3220" b="A2 E5"/>
+  <a u="3221" b="A2 E6"/>
+  <a u="3222" b="A2 E7"/>
+  <a u="3223" b="A2 E8"/>
+  <a u="3224" b="A2 E9"/>
+  <a u="3225" b="A2 EA"/>
+  <a u="3226" b="A2 EB"/>
+  <a u="3227" b="A2 EC"/>
+  <a u="3228" b="A2 ED"/>
+  <a u="3229" b="A2 EE"/>
+  <a u="322A" b="81 39 C1 32"/>
+  <a u="322B" b="81 39 C1 33"/>
+  <a u="322C" b="81 39 C1 34"/>
+  <a u="322D" b="81 39 C1 35"/>
+  <a u="322E" b="81 39 C1 36"/>
+  <a u="322F" b="81 39 C1 37"/>
+  <a u="3230" b="81 39 C1 38"/>
+  <a u="3231" b="A9 5A"/>
+  <a u="3232" b="81 39 C1 39"/>
+  <a u="3233" b="81 39 C2 30"/>
+  <a u="3234" b="81 39 C2 31"/>
+  <a u="3235" b="81 39 C2 32"/>
+  <a u="3236" b="81 39 C2 33"/>
+  <a u="3237" b="81 39 C2 34"/>
+  <a u="3238" b="81 39 C2 35"/>
+  <a u="3239" b="81 39 C2 36"/>
+  <a u="323A" b="81 39 C2 37"/>
+  <a u="323B" b="81 39 C2 38"/>
+  <a u="323C" b="81 39 C2 39"/>
+  <a u="323D" b="81 39 C3 30"/>
+  <a u="323E" b="81 39 C3 31"/>
+  <a u="323F" b="81 39 C3 32"/>
+  <a u="3240" b="81 39 C3 33"/>
+  <a u="3241" b="81 39 C3 34"/>
+  <a u="3242" b="81 39 C3 35"/>
+  <a u="3243" b="81 39 C3 36"/>
+  <a u="3244" b="81 39 C3 37"/>
+  <a u="3245" b="81 39 C3 38"/>
+  <a u="3246" b="81 39 C3 39"/>
+  <a u="3247" b="81 39 C4 30"/>
+  <a u="3248" b="81 39 C4 31"/>
+  <a u="3249" b="81 39 C4 32"/>
+  <a u="324A" b="81 39 C4 33"/>
+  <a u="324B" b="81 39 C4 34"/>
+  <a u="324C" b="81 39 C4 35"/>
+  <a u="324D" b="81 39 C4 36"/>
+  <a u="324E" b="81 39 C4 37"/>
+  <a u="324F" b="81 39 C4 38"/>
+  <a u="3250" b="81 39 C4 39"/>
+  <a u="3251" b="81 39 C5 30"/>
+  <a u="3252" b="81 39 C5 31"/>
+  <a u="3253" b="81 39 C5 32"/>
+  <a u="3254" b="81 39 C5 33"/>
+  <a u="3255" b="81 39 C5 34"/>
+  <a u="3256" b="81 39 C5 35"/>
+  <a u="3257" b="81 39 C5 36"/>
+  <a u="3258" b="81 39 C5 37"/>
+  <a u="3259" b="81 39 C5 38"/>
+  <a u="325A" b="81 39 C5 39"/>
+  <a u="325B" b="81 39 C6 30"/>
+  <a u="325C" b="81 39 C6 31"/>
+  <a u="325D" b="81 39 C6 32"/>
+  <a u="325E" b="81 39 C6 33"/>
+  <a u="325F" b="81 39 C6 34"/>
+  <a u="3260" b="81 39 C6 35"/>
+  <a u="3261" b="81 39 C6 36"/>
+  <a u="3262" b="81 39 C6 37"/>
+  <a u="3263" b="81 39 C6 38"/>
+  <a u="3264" b="81 39 C6 39"/>
+  <a u="3265" b="81 39 C7 30"/>
+  <a u="3266" b="81 39 C7 31"/>
+  <a u="3267" b="81 39 C7 32"/>
+  <a u="3268" b="81 39 C7 33"/>
+  <a u="3269" b="81 39 C7 34"/>
+  <a u="326A" b="81 39 C7 35"/>
+  <a u="326B" b="81 39 C7 36"/>
+  <a u="326C" b="81 39 C7 37"/>
+  <a u="326D" b="81 39 C7 38"/>
+  <a u="326E" b="81 39 C7 39"/>
+  <a u="326F" b="81 39 C8 30"/>
+  <a u="3270" b="81 39 C8 31"/>
+  <a u="3271" b="81 39 C8 32"/>
+  <a u="3272" b="81 39 C8 33"/>
+  <a u="3273" b="81 39 C8 34"/>
+  <a u="3274" b="81 39 C8 35"/>
+  <a u="3275" b="81 39 C8 36"/>
+  <a u="3276" b="81 39 C8 37"/>
+  <a u="3277" b="81 39 C8 38"/>
+  <a u="3278" b="81 39 C8 39"/>
+  <a u="3279" b="81 39 C9 30"/>
+  <a u="327A" b="81 39 C9 31"/>
+  <a u="327B" b="81 39 C9 32"/>
+  <a u="327C" b="81 39 C9 33"/>
+  <a u="327D" b="81 39 C9 34"/>
+  <a u="327E" b="81 39 C9 35"/>
+  <a u="327F" b="81 39 C9 36"/>
+  <a u="3280" b="81 39 C9 37"/>
+  <a u="3281" b="81 39 C9 38"/>
+  <a u="3282" b="81 39 C9 39"/>
+  <a u="3283" b="81 39 CA 30"/>
+  <a u="3284" b="81 39 CA 31"/>
+  <a u="3285" b="81 39 CA 32"/>
+  <a u="3286" b="81 39 CA 33"/>
+  <a u="3287" b="81 39 CA 34"/>
+  <a u="3288" b="81 39 CA 35"/>
+  <a u="3289" b="81 39 CA 36"/>
+  <a u="328A" b="81 39 CA 37"/>
+  <a u="328B" b="81 39 CA 38"/>
+  <a u="328C" b="81 39 CA 39"/>
+  <a u="328D" b="81 39 CB 30"/>
+  <a u="328E" b="81 39 CB 31"/>
+  <a u="328F" b="81 39 CB 32"/>
+  <a u="3290" b="81 39 CB 33"/>
+  <a u="3291" b="81 39 CB 34"/>
+  <a u="3292" b="81 39 CB 35"/>
+  <a u="3293" b="81 39 CB 36"/>
+  <a u="3294" b="81 39 CB 37"/>
+  <a u="3295" b="81 39 CB 38"/>
+  <a u="3296" b="81 39 CB 39"/>
+  <a u="3297" b="81 39 CC 30"/>
+  <a u="3298" b="81 39 CC 31"/>
+  <a u="3299" b="81 39 CC 32"/>
+  <a u="329A" b="81 39 CC 33"/>
+  <a u="329B" b="81 39 CC 34"/>
+  <a u="329C" b="81 39 CC 35"/>
+  <a u="329D" b="81 39 CC 36"/>
+  <a u="329E" b="81 39 CC 37"/>
+  <a u="329F" b="81 39 CC 38"/>
+  <a u="32A0" b="81 39 CC 39"/>
+  <a u="32A1" b="81 39 CD 30"/>
+  <a u="32A2" b="81 39 CD 31"/>
+  <a u="32A3" b="A9 49"/>
+  <a u="32A4" b="81 39 CD 32"/>
+  <a u="32A5" b="81 39 CD 33"/>
+  <a u="32A6" b="81 39 CD 34"/>
+  <a u="32A7" b="81 39 CD 35"/>
+  <a u="32A8" b="81 39 CD 36"/>
+  <a u="32A9" b="81 39 CD 37"/>
+  <a u="32AA" b="81 39 CD 38"/>
+  <a u="32AB" b="81 39 CD 39"/>
+  <a u="32AC" b="81 39 CE 30"/>
+  <a u="32AD" b="81 39 CE 31"/>
+  <a u="32AE" b="81 39 CE 32"/>
+  <a u="32AF" b="81 39 CE 33"/>
+  <a u="32B0" b="81 39 CE 34"/>
+  <a u="32B1" b="81 39 CE 35"/>
+  <a u="32B2" b="81 39 CE 36"/>
+  <a u="32B3" b="81 39 CE 37"/>
+  <a u="32B4" b="81 39 CE 38"/>
+  <a u="32B5" b="81 39 CE 39"/>
+  <a u="32B6" b="81 39 CF 30"/>
+  <a u="32B7" b="81 39 CF 31"/>
+  <a u="32B8" b="81 39 CF 32"/>
+  <a u="32B9" b="81 39 CF 33"/>
+  <a u="32BA" b="81 39 CF 34"/>
+  <a u="32BB" b="81 39 CF 35"/>
+  <a u="32BC" b="81 39 CF 36"/>
+  <a u="32BD" b="81 39 CF 37"/>
+  <a u="32BE" b="81 39 CF 38"/>
+  <a u="32BF" b="81 39 CF 39"/>
+  <a u="32C0" b="81 39 D0 30"/>
+  <a u="32C1" b="81 39 D0 31"/>
+  <a u="32C2" b="81 39 D0 32"/>
+  <a u="32C3" b="81 39 D0 33"/>
+  <a u="32C4" b="81 39 D0 34"/>
+  <a u="32C5" b="81 39 D0 35"/>
+  <a u="32C6" b="81 39 D0 36"/>
+  <a u="32C7" b="81 39 D0 37"/>
+  <a u="32C8" b="81 39 D0 38"/>
+  <a u="32C9" b="81 39 D0 39"/>
+  <a u="32CA" b="81 39 D1 30"/>
+  <a u="32CB" b="81 39 D1 31"/>
+  <a u="32CC" b="81 39 D1 32"/>
+  <a u="32CD" b="81 39 D1 33"/>
+  <a u="32CE" b="81 39 D1 34"/>
+  <a u="32CF" b="81 39 D1 35"/>
+  <a u="32D0" b="81 39 D1 36"/>
+  <a u="32D1" b="81 39 D1 37"/>
+  <a u="32D2" b="81 39 D1 38"/>
+  <a u="32D3" b="81 39 D1 39"/>
+  <a u="32D4" b="81 39 D2 30"/>
+  <a u="32D5" b="81 39 D2 31"/>
+  <a u="32D6" b="81 39 D2 32"/>
+  <a u="32D7" b="81 39 D2 33"/>
+  <a u="32D8" b="81 39 D2 34"/>
+  <a u="32D9" b="81 39 D2 35"/>
+  <a u="32DA" b="81 39 D2 36"/>
+  <a u="32DB" b="81 39 D2 37"/>
+  <a u="32DC" b="81 39 D2 38"/>
+  <a u="32DD" b="81 39 D2 39"/>
+  <a u="32DE" b="81 39 D3 30"/>
+  <a u="32DF" b="81 39 D3 31"/>
+  <a u="32E0" b="81 39 D3 32"/>
+  <a u="32E1" b="81 39 D3 33"/>
+  <a u="32E2" b="81 39 D3 34"/>
+  <a u="32E3" b="81 39 D3 35"/>
+  <a u="32E4" b="81 39 D3 36"/>
+  <a u="32E5" b="81 39 D3 37"/>
+  <a u="32E6" b="81 39 D3 38"/>
+  <a u="32E7" b="81 39 D3 39"/>
+  <a u="32E8" b="81 39 D4 30"/>
+  <a u="32E9" b="81 39 D4 31"/>
+  <a u="32EA" b="81 39 D4 32"/>
+  <a u="32EB" b="81 39 D4 33"/>
+  <a u="32EC" b="81 39 D4 34"/>
+  <a u="32ED" b="81 39 D4 35"/>
+  <a u="32EE" b="81 39 D4 36"/>
+  <a u="32EF" b="81 39 D4 37"/>
+  <a u="32F0" b="81 39 D4 38"/>
+  <a u="32F1" b="81 39 D4 39"/>
+  <a u="32F2" b="81 39 D5 30"/>
+  <a u="32F3" b="81 39 D5 31"/>
+  <a u="32F4" b="81 39 D5 32"/>
+  <a u="32F5" b="81 39 D5 33"/>
+  <a u="32F6" b="81 39 D5 34"/>
+  <a u="32F7" b="81 39 D5 35"/>
+  <a u="32F8" b="81 39 D5 36"/>
+  <a u="32F9" b="81 39 D5 37"/>
+  <a u="32FA" b="81 39 D5 38"/>
+  <a u="32FB" b="81 39 D5 39"/>
+  <a u="32FC" b="81 39 D6 30"/>
+  <a u="32FD" b="81 39 D6 31"/>
+  <a u="32FE" b="81 39 D6 32"/>
+  <a u="32FF" b="81 39 D6 33"/>
+  <a u="3300" b="81 39 D6 34"/>
+  <a u="3301" b="81 39 D6 35"/>
+  <a u="3302" b="81 39 D6 36"/>
+  <a u="3303" b="81 39 D6 37"/>
+  <a u="3304" b="81 39 D6 38"/>
+  <a u="3305" b="81 39 D6 39"/>
+  <a u="3306" b="81 39 D7 30"/>
+  <a u="3307" b="81 39 D7 31"/>
+  <a u="3308" b="81 39 D7 32"/>
+  <a u="3309" b="81 39 D7 33"/>
+  <a u="330A" b="81 39 D7 34"/>
+  <a u="330B" b="81 39 D7 35"/>
+  <a u="330C" b="81 39 D7 36"/>
+  <a u="330D" b="81 39 D7 37"/>
+  <a u="330E" b="81 39 D7 38"/>
+  <a u="330F" b="81 39 D7 39"/>
+  <a u="3310" b="81 39 D8 30"/>
+  <a u="3311" b="81 39 D8 31"/>
+  <a u="3312" b="81 39 D8 32"/>
+  <a u="3313" b="81 39 D8 33"/>
+  <a u="3314" b="81 39 D8 34"/>
+  <a u="3315" b="81 39 D8 35"/>
+  <a u="3316" b="81 39 D8 36"/>
+  <a u="3317" b="81 39 D8 37"/>
+  <a u="3318" b="81 39 D8 38"/>
+  <a u="3319" b="81 39 D8 39"/>
+  <a u="331A" b="81 39 D9 30"/>
+  <a u="331B" b="81 39 D9 31"/>
+  <a u="331C" b="81 39 D9 32"/>
+  <a u="331D" b="81 39 D9 33"/>
+  <a u="331E" b="81 39 D9 34"/>
+  <a u="331F" b="81 39 D9 35"/>
+  <a u="3320" b="81 39 D9 36"/>
+  <a u="3321" b="81 39 D9 37"/>
+  <a u="3322" b="81 39 D9 38"/>
+  <a u="3323" b="81 39 D9 39"/>
+  <a u="3324" b="81 39 DA 30"/>
+  <a u="3325" b="81 39 DA 31"/>
+  <a u="3326" b="81 39 DA 32"/>
+  <a u="3327" b="81 39 DA 33"/>
+  <a u="3328" b="81 39 DA 34"/>
+  <a u="3329" b="81 39 DA 35"/>
+  <a u="332A" b="81 39 DA 36"/>
+  <a u="332B" b="81 39 DA 37"/>
+  <a u="332C" b="81 39 DA 38"/>
+  <a u="332D" b="81 39 DA 39"/>
+  <a u="332E" b="81 39 DB 30"/>
+  <a u="332F" b="81 39 DB 31"/>
+  <a u="3330" b="81 39 DB 32"/>
+  <a u="3331" b="81 39 DB 33"/>
+  <a u="3332" b="81 39 DB 34"/>
+  <a u="3333" b="81 39 DB 35"/>
+  <a u="3334" b="81 39 DB 36"/>
+  <a u="3335" b="81 39 DB 37"/>
+  <a u="3336" b="81 39 DB 38"/>
+  <a u="3337" b="81 39 DB 39"/>
+  <a u="3338" b="81 39 DC 30"/>
+  <a u="3339" b="81 39 DC 31"/>
+  <a u="333A" b="81 39 DC 32"/>
+  <a u="333B" b="81 39 DC 33"/>
+  <a u="333C" b="81 39 DC 34"/>
+  <a u="333D" b="81 39 DC 35"/>
+  <a u="333E" b="81 39 DC 36"/>
+  <a u="333F" b="81 39 DC 37"/>
+  <a u="3340" b="81 39 DC 38"/>
+  <a u="3341" b="81 39 DC 39"/>
+  <a u="3342" b="81 39 DD 30"/>
+  <a u="3343" b="81 39 DD 31"/>
+  <a u="3344" b="81 39 DD 32"/>
+  <a u="3345" b="81 39 DD 33"/>
+  <a u="3346" b="81 39 DD 34"/>
+  <a u="3347" b="81 39 DD 35"/>
+  <a u="3348" b="81 39 DD 36"/>
+  <a u="3349" b="81 39 DD 37"/>
+  <a u="334A" b="81 39 DD 38"/>
+  <a u="334B" b="81 39 DD 39"/>
+  <a u="334C" b="81 39 DE 30"/>
+  <a u="334D" b="81 39 DE 31"/>
+  <a u="334E" b="81 39 DE 32"/>
+  <a u="334F" b="81 39 DE 33"/>
+  <a u="3350" b="81 39 DE 34"/>
+  <a u="3351" b="81 39 DE 35"/>
+  <a u="3352" b="81 39 DE 36"/>
+  <a u="3353" b="81 39 DE 37"/>
+  <a u="3354" b="81 39 DE 38"/>
+  <a u="3355" b="81 39 DE 39"/>
+  <a u="3356" b="81 39 DF 30"/>
+  <a u="3357" b="81 39 DF 31"/>
+  <a u="3358" b="81 39 DF 32"/>
+  <a u="3359" b="81 39 DF 33"/>
+  <a u="335A" b="81 39 DF 34"/>
+  <a u="335B" b="81 39 DF 35"/>
+  <a u="335C" b="81 39 DF 36"/>
+  <a u="335D" b="81 39 DF 37"/>
+  <a u="335E" b="81 39 DF 38"/>
+  <a u="335F" b="81 39 DF 39"/>
+  <a u="3360" b="81 39 E0 30"/>
+  <a u="3361" b="81 39 E0 31"/>
+  <a u="3362" b="81 39 E0 32"/>
+  <a u="3363" b="81 39 E0 33"/>
+  <a u="3364" b="81 39 E0 34"/>
+  <a u="3365" b="81 39 E0 35"/>
+  <a u="3366" b="81 39 E0 36"/>
+  <a u="3367" b="81 39 E0 37"/>
+  <a u="3368" b="81 39 E0 38"/>
+  <a u="3369" b="81 39 E0 39"/>
+  <a u="336A" b="81 39 E1 30"/>
+  <a u="336B" b="81 39 E1 31"/>
+  <a u="336C" b="81 39 E1 32"/>
+  <a u="336D" b="81 39 E1 33"/>
+  <a u="336E" b="81 39 E1 34"/>
+  <a u="336F" b="81 39 E1 35"/>
+  <a u="3370" b="81 39 E1 36"/>
+  <a u="3371" b="81 39 E1 37"/>
+  <a u="3372" b="81 39 E1 38"/>
+  <a u="3373" b="81 39 E1 39"/>
+  <a u="3374" b="81 39 E2 30"/>
+  <a u="3375" b="81 39 E2 31"/>
+  <a u="3376" b="81 39 E2 32"/>
+  <a u="3377" b="81 39 E2 33"/>
+  <a u="3378" b="81 39 E2 34"/>
+  <a u="3379" b="81 39 E2 35"/>
+  <a u="337A" b="81 39 E2 36"/>
+  <a u="337B" b="81 39 E2 37"/>
+  <a u="337C" b="81 39 E2 38"/>
+  <a u="337D" b="81 39 E2 39"/>
+  <a u="337E" b="81 39 E3 30"/>
+  <a u="337F" b="81 39 E3 31"/>
+  <a u="3380" b="81 39 E3 32"/>
+  <a u="3381" b="81 39 E3 33"/>
+  <a u="3382" b="81 39 E3 34"/>
+  <a u="3383" b="81 39 E3 35"/>
+  <a u="3384" b="81 39 E3 36"/>
+  <a u="3385" b="81 39 E3 37"/>
+  <a u="3386" b="81 39 E3 38"/>
+  <a u="3387" b="81 39 E3 39"/>
+  <a u="3388" b="81 39 E4 30"/>
+  <a u="3389" b="81 39 E4 31"/>
+  <a u="338A" b="81 39 E4 32"/>
+  <a u="338B" b="81 39 E4 33"/>
+  <a u="338C" b="81 39 E4 34"/>
+  <a u="338D" b="81 39 E4 35"/>
+  <a u="338E" b="A9 4A"/>
+  <a u="338F" b="A9 4B"/>
+  <a u="3390" b="81 39 E4 36"/>
+  <a u="3391" b="81 39 E4 37"/>
+  <a u="3392" b="81 39 E4 38"/>
+  <a u="3393" b="81 39 E4 39"/>
+  <a u="3394" b="81 39 E5 30"/>
+  <a u="3395" b="81 39 E5 31"/>
+  <a u="3396" b="81 39 E5 32"/>
+  <a u="3397" b="81 39 E5 33"/>
+  <a u="3398" b="81 39 E5 34"/>
+  <a u="3399" b="81 39 E5 35"/>
+  <a u="339A" b="81 39 E5 36"/>
+  <a u="339B" b="81 39 E5 37"/>
+  <a u="339C" b="A9 4C"/>
+  <a u="339D" b="A9 4D"/>
+  <a u="339E" b="A9 4E"/>
+  <a u="339F" b="81 39 E5 38"/>
+  <a u="33A0" b="81 39 E5 39"/>
+  <a u="33A1" b="A9 4F"/>
+  <a u="33A2" b="81 39 E6 30"/>
+  <a u="33A3" b="81 39 E6 31"/>
+  <a u="33A4" b="81 39 E6 32"/>
+  <a u="33A5" b="81 39 E6 33"/>
+  <a u="33A6" b="81 39 E6 34"/>
+  <a u="33A7" b="81 39 E6 35"/>
+  <a u="33A8" b="81 39 E6 36"/>
+  <a u="33A9" b="81 39 E6 37"/>
+  <a u="33AA" b="81 39 E6 38"/>
+  <a u="33AB" b="81 39 E6 39"/>
+  <a u="33AC" b="81 39 E7 30"/>
+  <a u="33AD" b="81 39 E7 31"/>
+  <a u="33AE" b="81 39 E7 32"/>
+  <a u="33AF" b="81 39 E7 33"/>
+  <a u="33B0" b="81 39 E7 34"/>
+  <a u="33B1" b="81 39 E7 35"/>
+  <a u="33B2" b="81 39 E7 36"/>
+  <a u="33B3" b="81 39 E7 37"/>
+  <a u="33B4" b="81 39 E7 38"/>
+  <a u="33B5" b="81 39 E7 39"/>
+  <a u="33B6" b="81 39 E8 30"/>
+  <a u="33B7" b="81 39 E8 31"/>
+  <a u="33B8" b="81 39 E8 32"/>
+  <a u="33B9" b="81 39 E8 33"/>
+  <a u="33BA" b="81 39 E8 34"/>
+  <a u="33BB" b="81 39 E8 35"/>
+  <a u="33BC" b="81 39 E8 36"/>
+  <a u="33BD" b="81 39 E8 37"/>
+  <a u="33BE" b="81 39 E8 38"/>
+  <a u="33BF" b="81 39 E8 39"/>
+  <a u="33C0" b="81 39 E9 30"/>
+  <a u="33C1" b="81 39 E9 31"/>
+  <a u="33C2" b="81 39 E9 32"/>
+  <a u="33C3" b="81 39 E9 33"/>
+  <a u="33C4" b="A9 50"/>
+  <a u="33C5" b="81 39 E9 34"/>
+  <a u="33C6" b="81 39 E9 35"/>
+  <a u="33C7" b="81 39 E9 36"/>
+  <a u="33C8" b="81 39 E9 37"/>
+  <a u="33C9" b="81 39 E9 38"/>
+  <a u="33CA" b="81 39 E9 39"/>
+  <a u="33CB" b="81 39 EA 30"/>
+  <a u="33CC" b="81 39 EA 31"/>
+  <a u="33CD" b="81 39 EA 32"/>
+  <a u="33CE" b="A9 51"/>
+  <a u="33CF" b="81 39 EA 33"/>
+  <a u="33D0" b="81 39 EA 34"/>
+  <a u="33D1" b="A9 52"/>
+  <a u="33D2" b="A9 53"/>
+  <a u="33D3" b="81 39 EA 35"/>
+  <a u="33D4" b="81 39 EA 36"/>
+  <a u="33D5" b="A9 54"/>
+  <a u="33D6" b="81 39 EA 37"/>
+  <a u="33D7" b="81 39 EA 38"/>
+  <a u="33D8" b="81 39 EA 39"/>
+  <a u="33D9" b="81 39 EB 30"/>
+  <a u="33DA" b="81 39 EB 31"/>
+  <a u="33DB" b="81 39 EB 32"/>
+  <a u="33DC" b="81 39 EB 33"/>
+  <a u="33DD" b="81 39 EB 34"/>
+  <a u="33DE" b="81 39 EB 35"/>
+  <a u="33DF" b="81 39 EB 36"/>
+  <a u="33E0" b="81 39 EB 37"/>
+  <a u="33E1" b="81 39 EB 38"/>
+  <a u="33E2" b="81 39 EB 39"/>
+  <a u="33E3" b="81 39 EC 30"/>
+  <a u="33E4" b="81 39 EC 31"/>
+  <a u="33E5" b="81 39 EC 32"/>
+  <a u="33E6" b="81 39 EC 33"/>
+  <a u="33E7" b="81 39 EC 34"/>
+  <a u="33E8" b="81 39 EC 35"/>
+  <a u="33E9" b="81 39 EC 36"/>
+  <a u="33EA" b="81 39 EC 37"/>
+  <a u="33EB" b="81 39 EC 38"/>
+  <a u="33EC" b="81 39 EC 39"/>
+  <a u="33ED" b="81 39 ED 30"/>
+  <a u="33EE" b="81 39 ED 31"/>
+  <a u="33EF" b="81 39 ED 32"/>
+  <a u="33F0" b="81 39 ED 33"/>
+  <a u="33F1" b="81 39 ED 34"/>
+  <a u="33F2" b="81 39 ED 35"/>
+  <a u="33F3" b="81 39 ED 36"/>
+  <a u="33F4" b="81 39 ED 37"/>
+  <a u="33F5" b="81 39 ED 38"/>
+  <a u="33F6" b="81 39 ED 39"/>
+  <a u="33F7" b="81 39 EE 30"/>
+  <a u="33F8" b="81 39 EE 31"/>
+  <a u="33F9" b="81 39 EE 32"/>
+  <a u="33FA" b="81 39 EE 33"/>
+  <a u="33FB" b="81 39 EE 34"/>
+  <a u="33FC" b="81 39 EE 35"/>
+  <a u="33FD" b="81 39 EE 36"/>
+  <a u="33FE" b="81 39 EE 37"/>
+  <a u="33FF" b="81 39 EE 38"/>
+  <a u="3400" b="81 39 EE 39"/>
+  <a u="3401" b="81 39 EF 30"/>
+  <a u="3402" b="81 39 EF 31"/>
+  <a u="3403" b="81 39 EF 32"/>
+  <a u="3404" b="81 39 EF 33"/>
+  <a u="3405" b="81 39 EF 34"/>
+  <a u="3406" b="81 39 EF 35"/>
+  <a u="3407" b="81 39 EF 36"/>
+  <a u="3408" b="81 39 EF 37"/>
+  <a u="3409" b="81 39 EF 38"/>
+  <a u="340A" b="81 39 EF 39"/>
+  <a u="340B" b="81 39 F0 30"/>
+  <a u="340C" b="81 39 F0 31"/>
+  <a u="340D" b="81 39 F0 32"/>
+  <a u="340E" b="81 39 F0 33"/>
+  <a u="340F" b="81 39 F0 34"/>
+  <a u="3410" b="81 39 F0 35"/>
+  <a u="3411" b="81 39 F0 36"/>
+  <a u="3412" b="81 39 F0 37"/>
+  <a u="3413" b="81 39 F0 38"/>
+  <a u="3414" b="81 39 F0 39"/>
+  <a u="3415" b="81 39 F1 30"/>
+  <a u="3416" b="81 39 F1 31"/>
+  <a u="3417" b="81 39 F1 32"/>
+  <a u="3418" b="81 39 F1 33"/>
+  <a u="3419" b="81 39 F1 34"/>
+  <a u="341A" b="81 39 F1 35"/>
+  <a u="341B" b="81 39 F1 36"/>
+  <a u="341C" b="81 39 F1 37"/>
+  <a u="341D" b="81 39 F1 38"/>
+  <a u="341E" b="81 39 F1 39"/>
+  <a u="341F" b="81 39 F2 30"/>
+  <a u="3420" b="81 39 F2 31"/>
+  <a u="3421" b="81 39 F2 32"/>
+  <a u="3422" b="81 39 F2 33"/>
+  <a u="3423" b="81 39 F2 34"/>
+  <a u="3424" b="81 39 F2 35"/>
+  <a u="3425" b="81 39 F2 36"/>
+  <a u="3426" b="81 39 F2 37"/>
+  <a u="3427" b="81 39 F2 38"/>
+  <a u="3428" b="81 39 F2 39"/>
+  <a u="3429" b="81 39 F3 30"/>
+  <a u="342A" b="81 39 F3 31"/>
+  <a u="342B" b="81 39 F3 32"/>
+  <a u="342C" b="81 39 F3 33"/>
+  <a u="342D" b="81 39 F3 34"/>
+  <a u="342E" b="81 39 F3 35"/>
+  <a u="342F" b="81 39 F3 36"/>
+  <a u="3430" b="81 39 F3 37"/>
+  <a u="3431" b="81 39 F3 38"/>
+  <a u="3432" b="81 39 F3 39"/>
+  <a u="3433" b="81 39 F4 30"/>
+  <a u="3434" b="81 39 F4 31"/>
+  <a u="3435" b="81 39 F4 32"/>
+  <a u="3436" b="81 39 F4 33"/>
+  <a u="3437" b="81 39 F4 34"/>
+  <a u="3438" b="81 39 F4 35"/>
+  <a u="3439" b="81 39 F4 36"/>
+  <a u="343A" b="81 39 F4 37"/>
+  <a u="343B" b="81 39 F4 38"/>
+  <a u="343C" b="81 39 F4 39"/>
+  <a u="343D" b="81 39 F5 30"/>
+  <a u="343E" b="81 39 F5 31"/>
+  <a u="343F" b="81 39 F5 32"/>
+  <a u="3440" b="81 39 F5 33"/>
+  <a u="3441" b="81 39 F5 34"/>
+  <a u="3442" b="81 39 F5 35"/>
+  <a u="3443" b="81 39 F5 36"/>
+  <a u="3444" b="81 39 F5 37"/>
+  <a u="3445" b="81 39 F5 38"/>
+  <a u="3446" b="81 39 F5 39"/>
+  <a u="3447" b="FE 56"/>
+  <a u="3448" b="81 39 F6 30"/>
+  <a u="3449" b="81 39 F6 31"/>
+  <a u="344A" b="81 39 F6 32"/>
+  <a u="344B" b="81 39 F6 33"/>
+  <a u="344C" b="81 39 F6 34"/>
+  <a u="344D" b="81 39 F6 35"/>
+  <a u="344E" b="81 39 F6 36"/>
+  <a u="344F" b="81 39 F6 37"/>
+  <a u="3450" b="81 39 F6 38"/>
+  <a u="3451" b="81 39 F6 39"/>
+  <a u="3452" b="81 39 F7 30"/>
+  <a u="3453" b="81 39 F7 31"/>
+  <a u="3454" b="81 39 F7 32"/>
+  <a u="3455" b="81 39 F7 33"/>
+  <a u="3456" b="81 39 F7 34"/>
+  <a u="3457" b="81 39 F7 35"/>
+  <a u="3458" b="81 39 F7 36"/>
+  <a u="3459" b="81 39 F7 37"/>
+  <a u="345A" b="81 39 F7 38"/>
+  <a u="345B" b="81 39 F7 39"/>
+  <a u="345C" b="81 39 F8 30"/>
+  <a u="345D" b="81 39 F8 31"/>
+  <a u="345E" b="81 39 F8 32"/>
+  <a u="345F" b="81 39 F8 33"/>
+  <a u="3460" b="81 39 F8 34"/>
+  <a u="3461" b="81 39 F8 35"/>
+  <a u="3462" b="81 39 F8 36"/>
+  <a u="3463" b="81 39 F8 37"/>
+  <a u="3464" b="81 39 F8 38"/>
+  <a u="3465" b="81 39 F8 39"/>
+  <a u="3466" b="81 39 F9 30"/>
+  <a u="3467" b="81 39 F9 31"/>
+  <a u="3468" b="81 39 F9 32"/>
+  <a u="3469" b="81 39 F9 33"/>
+  <a u="346A" b="81 39 F9 34"/>
+  <a u="346B" b="81 39 F9 35"/>
+  <a u="346C" b="81 39 F9 36"/>
+  <a u="346D" b="81 39 F9 37"/>
+  <a u="346E" b="81 39 F9 38"/>
+  <a u="346F" b="81 39 F9 39"/>
+  <a u="3470" b="81 39 FA 30"/>
+  <a u="3471" b="81 39 FA 31"/>
+  <a u="3472" b="81 39 FA 32"/>
+  <a u="3473" b="FE 55"/>
+  <a u="3474" b="81 39 FA 33"/>
+  <a u="3475" b="81 39 FA 34"/>
+  <a u="3476" b="81 39 FA 35"/>
+  <a u="3477" b="81 39 FA 36"/>
+  <a u="3478" b="81 39 FA 37"/>
+  <a u="3479" b="81 39 FA 38"/>
+  <a u="347A" b="81 39 FA 39"/>
+  <a u="347B" b="81 39 FB 30"/>
+  <a u="347C" b="81 39 FB 31"/>
+  <a u="347D" b="81 39 FB 32"/>
+  <a u="347E" b="81 39 FB 33"/>
+  <a u="347F" b="81 39 FB 34"/>
+  <a u="3480" b="81 39 FB 35"/>
+  <a u="3481" b="81 39 FB 36"/>
+  <a u="3482" b="81 39 FB 37"/>
+  <a u="3483" b="81 39 FB 38"/>
+  <a u="3484" b="81 39 FB 39"/>
+  <a u="3485" b="81 39 FC 30"/>
+  <a u="3486" b="81 39 FC 31"/>
+  <a u="3487" b="81 39 FC 32"/>
+  <a u="3488" b="81 39 FC 33"/>
+  <a u="3489" b="81 39 FC 34"/>
+  <a u="348A" b="81 39 FC 35"/>
+  <a u="348B" b="81 39 FC 36"/>
+  <a u="348C" b="81 39 FC 37"/>
+  <a u="348D" b="81 39 FC 38"/>
+  <a u="348E" b="81 39 FC 39"/>
+  <a u="348F" b="81 39 FD 30"/>
+  <a u="3490" b="81 39 FD 31"/>
+  <a u="3491" b="81 39 FD 32"/>
+  <a u="3492" b="81 39 FD 33"/>
+  <a u="3493" b="81 39 FD 34"/>
+  <a u="3494" b="81 39 FD 35"/>
+  <a u="3495" b="81 39 FD 36"/>
+  <a u="3496" b="81 39 FD 37"/>
+  <a u="3497" b="81 39 FD 38"/>
+  <a u="3498" b="81 39 FD 39"/>
+  <a u="3499" b="81 39 FE 30"/>
+  <a u="349A" b="81 39 FE 31"/>
+  <a u="349B" b="81 39 FE 32"/>
+  <a u="349C" b="81 39 FE 33"/>
+  <a u="349D" b="81 39 FE 34"/>
+  <a u="349E" b="81 39 FE 35"/>
+  <a u="349F" b="81 39 FE 36"/>
+  <a u="34A0" b="81 39 FE 37"/>
+  <a u="34A1" b="81 39 FE 38"/>
+  <a u="34A2" b="81 39 FE 39"/>
+  <a u="34A3" b="82 30 81 30"/>
+  <a u="34A4" b="82 30 81 31"/>
+  <a u="34A5" b="82 30 81 32"/>
+  <a u="34A6" b="82 30 81 33"/>
+  <a u="34A7" b="82 30 81 34"/>
+  <a u="34A8" b="82 30 81 35"/>
+  <a u="34A9" b="82 30 81 36"/>
+  <a u="34AA" b="82 30 81 37"/>
+  <a u="34AB" b="82 30 81 38"/>
+  <a u="34AC" b="82 30 81 39"/>
+  <a u="34AD" b="82 30 82 30"/>
+  <a u="34AE" b="82 30 82 31"/>
+  <a u="34AF" b="82 30 82 32"/>
+  <a u="34B0" b="82 30 82 33"/>
+  <a u="34B1" b="82 30 82 34"/>
+  <a u="34B2" b="82 30 82 35"/>
+  <a u="34B3" b="82 30 82 36"/>
+  <a u="34B4" b="82 30 82 37"/>
+  <a u="34B5" b="82 30 82 38"/>
+  <a u="34B6" b="82 30 82 39"/>
+  <a u="34B7" b="82 30 83 30"/>
+  <a u="34B8" b="82 30 83 31"/>
+  <a u="34B9" b="82 30 83 32"/>
+  <a u="34BA" b="82 30 83 33"/>
+  <a u="34BB" b="82 30 83 34"/>
+  <a u="34BC" b="82 30 83 35"/>
+  <a u="34BD" b="82 30 83 36"/>
+  <a u="34BE" b="82 30 83 37"/>
+  <a u="34BF" b="82 30 83 38"/>
+  <a u="34C0" b="82 30 83 39"/>
+  <a u="34C1" b="82 30 84 30"/>
+  <a u="34C2" b="82 30 84 31"/>
+  <a u="34C3" b="82 30 84 32"/>
+  <a u="34C4" b="82 30 84 33"/>
+  <a u="34C5" b="82 30 84 34"/>
+  <a u="34C6" b="82 30 84 35"/>
+  <a u="34C7" b="82 30 84 36"/>
+  <a u="34C8" b="82 30 84 37"/>
+  <a u="34C9" b="82 30 84 38"/>
+  <a u="34CA" b="82 30 84 39"/>
+  <a u="34CB" b="82 30 85 30"/>
+  <a u="34CC" b="82 30 85 31"/>
+  <a u="34CD" b="82 30 85 32"/>
+  <a u="34CE" b="82 30 85 33"/>
+  <a u="34CF" b="82 30 85 34"/>
+  <a u="34D0" b="82 30 85 35"/>
+  <a u="34D1" b="82 30 85 36"/>
+  <a u="34D2" b="82 30 85 37"/>
+  <a u="34D3" b="82 30 85 38"/>
+  <a u="34D4" b="82 30 85 39"/>
+  <a u="34D5" b="82 30 86 30"/>
+  <a u="34D6" b="82 30 86 31"/>
+  <a u="34D7" b="82 30 86 32"/>
+  <a u="34D8" b="82 30 86 33"/>
+  <a u="34D9" b="82 30 86 34"/>
+  <a u="34DA" b="82 30 86 35"/>
+  <a u="34DB" b="82 30 86 36"/>
+  <a u="34DC" b="82 30 86 37"/>
+  <a u="34DD" b="82 30 86 38"/>
+  <a u="34DE" b="82 30 86 39"/>
+  <a u="34DF" b="82 30 87 30"/>
+  <a u="34E0" b="82 30 87 31"/>
+  <a u="34E1" b="82 30 87 32"/>
+  <a u="34E2" b="82 30 87 33"/>
+  <a u="34E3" b="82 30 87 34"/>
+  <a u="34E4" b="82 30 87 35"/>
+  <a u="34E5" b="82 30 87 36"/>
+  <a u="34E6" b="82 30 87 37"/>
+  <a u="34E7" b="82 30 87 38"/>
+  <a u="34E8" b="82 30 87 39"/>
+  <a u="34E9" b="82 30 88 30"/>
+  <a u="34EA" b="82 30 88 31"/>
+  <a u="34EB" b="82 30 88 32"/>
+  <a u="34EC" b="82 30 88 33"/>
+  <a u="34ED" b="82 30 88 34"/>
+  <a u="34EE" b="82 30 88 35"/>
+  <a u="34EF" b="82 30 88 36"/>
+  <a u="34F0" b="82 30 88 37"/>
+  <a u="34F1" b="82 30 88 38"/>
+  <a u="34F2" b="82 30 88 39"/>
+  <a u="34F3" b="82 30 89 30"/>
+  <a u="34F4" b="82 30 89 31"/>
+  <a u="34F5" b="82 30 89 32"/>
+  <a u="34F6" b="82 30 89 33"/>
+  <a u="34F7" b="82 30 89 34"/>
+  <a u="34F8" b="82 30 89 35"/>
+  <a u="34F9" b="82 30 89 36"/>
+  <a u="34FA" b="82 30 89 37"/>
+  <a u="34FB" b="82 30 89 38"/>
+  <a u="34FC" b="82 30 89 39"/>
+  <a u="34FD" b="82 30 8A 30"/>
+  <a u="34FE" b="82 30 8A 31"/>
+  <a u="34FF" b="82 30 8A 32"/>
+  <a u="3500" b="82 30 8A 33"/>
+  <a u="3501" b="82 30 8A 34"/>
+  <a u="3502" b="82 30 8A 35"/>
+  <a u="3503" b="82 30 8A 36"/>
+  <a u="3504" b="82 30 8A 37"/>
+  <a u="3505" b="82 30 8A 38"/>
+  <a u="3506" b="82 30 8A 39"/>
+  <a u="3507" b="82 30 8B 30"/>
+  <a u="3508" b="82 30 8B 31"/>
+  <a u="3509" b="82 30 8B 32"/>
+  <a u="350A" b="82 30 8B 33"/>
+  <a u="350B" b="82 30 8B 34"/>
+  <a u="350C" b="82 30 8B 35"/>
+  <a u="350D" b="82 30 8B 36"/>
+  <a u="350E" b="82 30 8B 37"/>
+  <a u="350F" b="82 30 8B 38"/>
+  <a u="3510" b="82 30 8B 39"/>
+  <a u="3511" b="82 30 8C 30"/>
+  <a u="3512" b="82 30 8C 31"/>
+  <a u="3513" b="82 30 8C 32"/>
+  <a u="3514" b="82 30 8C 33"/>
+  <a u="3515" b="82 30 8C 34"/>
+  <a u="3516" b="82 30 8C 35"/>
+  <a u="3517" b="82 30 8C 36"/>
+  <a u="3518" b="82 30 8C 37"/>
+  <a u="3519" b="82 30 8C 38"/>
+  <a u="351A" b="82 30 8C 39"/>
+  <a u="351B" b="82 30 8D 30"/>
+  <a u="351C" b="82 30 8D 31"/>
+  <a u="351D" b="82 30 8D 32"/>
+  <a u="351E" b="82 30 8D 33"/>
+  <a u="351F" b="82 30 8D 34"/>
+  <a u="3520" b="82 30 8D 35"/>
+  <a u="3521" b="82 30 8D 36"/>
+  <a u="3522" b="82 30 8D 37"/>
+  <a u="3523" b="82 30 8D 38"/>
+  <a u="3524" b="82 30 8D 39"/>
+  <a u="3525" b="82 30 8E 30"/>
+  <a u="3526" b="82 30 8E 31"/>
+  <a u="3527" b="82 30 8E 32"/>
+  <a u="3528" b="82 30 8E 33"/>
+  <a u="3529" b="82 30 8E 34"/>
+  <a u="352A" b="82 30 8E 35"/>
+  <a u="352B" b="82 30 8E 36"/>
+  <a u="352C" b="82 30 8E 37"/>
+  <a u="352D" b="82 30 8E 38"/>
+  <a u="352E" b="82 30 8E 39"/>
+  <a u="352F" b="82 30 8F 30"/>
+  <a u="3530" b="82 30 8F 31"/>
+  <a u="3531" b="82 30 8F 32"/>
+  <a u="3532" b="82 30 8F 33"/>
+  <a u="3533" b="82 30 8F 34"/>
+  <a u="3534" b="82 30 8F 35"/>
+  <a u="3535" b="82 30 8F 36"/>
+  <a u="3536" b="82 30 8F 37"/>
+  <a u="3537" b="82 30 8F 38"/>
+  <a u="3538" b="82 30 8F 39"/>
+  <a u="3539" b="82 30 90 30"/>
+  <a u="353A" b="82 30 90 31"/>
+  <a u="353B" b="82 30 90 32"/>
+  <a u="353C" b="82 30 90 33"/>
+  <a u="353D" b="82 30 90 34"/>
+  <a u="353E" b="82 30 90 35"/>
+  <a u="353F" b="82 30 90 36"/>
+  <a u="3540" b="82 30 90 37"/>
+  <a u="3541" b="82 30 90 38"/>
+  <a u="3542" b="82 30 90 39"/>
+  <a u="3543" b="82 30 91 30"/>
+  <a u="3544" b="82 30 91 31"/>
+  <a u="3545" b="82 30 91 32"/>
+  <a u="3546" b="82 30 91 33"/>
+  <a u="3547" b="82 30 91 34"/>
+  <a u="3548" b="82 30 91 35"/>
+  <a u="3549" b="82 30 91 36"/>
+  <a u="354A" b="82 30 91 37"/>
+  <a u="354B" b="82 30 91 38"/>
+  <a u="354C" b="82 30 91 39"/>
+  <a u="354D" b="82 30 92 30"/>
+  <a u="354E" b="82 30 92 31"/>
+  <a u="354F" b="82 30 92 32"/>
+  <a u="3550" b="82 30 92 33"/>
+  <a u="3551" b="82 30 92 34"/>
+  <a u="3552" b="82 30 92 35"/>
+  <a u="3553" b="82 30 92 36"/>
+  <a u="3554" b="82 30 92 37"/>
+  <a u="3555" b="82 30 92 38"/>
+  <a u="3556" b="82 30 92 39"/>
+  <a u="3557" b="82 30 93 30"/>
+  <a u="3558" b="82 30 93 31"/>
+  <a u="3559" b="82 30 93 32"/>
+  <a u="355A" b="82 30 93 33"/>
+  <a u="355B" b="82 30 93 34"/>
+  <a u="355C" b="82 30 93 35"/>
+  <a u="355D" b="82 30 93 36"/>
+  <a u="355E" b="82 30 93 37"/>
+  <a u="355F" b="82 30 93 38"/>
+  <a u="3560" b="82 30 93 39"/>
+  <a u="3561" b="82 30 94 30"/>
+  <a u="3562" b="82 30 94 31"/>
+  <a u="3563" b="82 30 94 32"/>
+  <a u="3564" b="82 30 94 33"/>
+  <a u="3565" b="82 30 94 34"/>
+  <a u="3566" b="82 30 94 35"/>
+  <a u="3567" b="82 30 94 36"/>
+  <a u="3568" b="82 30 94 37"/>
+  <a u="3569" b="82 30 94 38"/>
+  <a u="356A" b="82 30 94 39"/>
+  <a u="356B" b="82 30 95 30"/>
+  <a u="356C" b="82 30 95 31"/>
+  <a u="356D" b="82 30 95 32"/>
+  <a u="356E" b="82 30 95 33"/>
+  <a u="356F" b="82 30 95 34"/>
+  <a u="3570" b="82 30 95 35"/>
+  <a u="3571" b="82 30 95 36"/>
+  <a u="3572" b="82 30 95 37"/>
+  <a u="3573" b="82 30 95 38"/>
+  <a u="3574" b="82 30 95 39"/>
+  <a u="3575" b="82 30 96 30"/>
+  <a u="3576" b="82 30 96 31"/>
+  <a u="3577" b="82 30 96 32"/>
+  <a u="3578" b="82 30 96 33"/>
+  <a u="3579" b="82 30 96 34"/>
+  <a u="357A" b="82 30 96 35"/>
+  <a u="357B" b="82 30 96 36"/>
+  <a u="357C" b="82 30 96 37"/>
+  <a u="357D" b="82 30 96 38"/>
+  <a u="357E" b="82 30 96 39"/>
+  <a u="357F" b="82 30 97 30"/>
+  <a u="3580" b="82 30 97 31"/>
+  <a u="3581" b="82 30 97 32"/>
+  <a u="3582" b="82 30 97 33"/>
+  <a u="3583" b="82 30 97 34"/>
+  <a u="3584" b="82 30 97 35"/>
+  <a u="3585" b="82 30 97 36"/>
+  <a u="3586" b="82 30 97 37"/>
+  <a u="3587" b="82 30 97 38"/>
+  <a u="3588" b="82 30 97 39"/>
+  <a u="3589" b="82 30 98 30"/>
+  <a u="358A" b="82 30 98 31"/>
+  <a u="358B" b="82 30 98 32"/>
+  <a u="358C" b="82 30 98 33"/>
+  <a u="358D" b="82 30 98 34"/>
+  <a u="358E" b="82 30 98 35"/>
+  <a u="358F" b="82 30 98 36"/>
+  <a u="3590" b="82 30 98 37"/>
+  <a u="3591" b="82 30 98 38"/>
+  <a u="3592" b="82 30 98 39"/>
+  <a u="3593" b="82 30 99 30"/>
+  <a u="3594" b="82 30 99 31"/>
+  <a u="3595" b="82 30 99 32"/>
+  <a u="3596" b="82 30 99 33"/>
+  <a u="3597" b="82 30 99 34"/>
+  <a u="3598" b="82 30 99 35"/>
+  <a u="3599" b="82 30 99 36"/>
+  <a u="359A" b="82 30 99 37"/>
+  <a u="359B" b="82 30 99 38"/>
+  <a u="359C" b="82 30 99 39"/>
+  <a u="359D" b="82 30 9A 30"/>
+  <a u="359E" b="FE 5A"/>
+  <a u="359F" b="82 30 9A 31"/>
+  <a u="35A0" b="82 30 9A 32"/>
+  <a u="35A1" b="82 30 9A 33"/>
+  <a u="35A2" b="82 30 9A 34"/>
+  <a u="35A3" b="82 30 9A 35"/>
+  <a u="35A4" b="82 30 9A 36"/>
+  <a u="35A5" b="82 30 9A 37"/>
+  <a u="35A6" b="82 30 9A 38"/>
+  <a u="35A7" b="82 30 9A 39"/>
+  <a u="35A8" b="82 30 9B 30"/>
+  <a u="35A9" b="82 30 9B 31"/>
+  <a u="35AA" b="82 30 9B 32"/>
+  <a u="35AB" b="82 30 9B 33"/>
+  <a u="35AC" b="82 30 9B 34"/>
+  <a u="35AD" b="82 30 9B 35"/>
+  <a u="35AE" b="82 30 9B 36"/>
+  <a u="35AF" b="82 30 9B 37"/>
+  <a u="35B0" b="82 30 9B 38"/>
+  <a u="35B1" b="82 30 9B 39"/>
+  <a u="35B2" b="82 30 9C 30"/>
+  <a u="35B3" b="82 30 9C 31"/>
+  <a u="35B4" b="82 30 9C 32"/>
+  <a u="35B5" b="82 30 9C 33"/>
+  <a u="35B6" b="82 30 9C 34"/>
+  <a u="35B7" b="82 30 9C 35"/>
+  <a u="35B8" b="82 30 9C 36"/>
+  <a u="35B9" b="82 30 9C 37"/>
+  <a u="35BA" b="82 30 9C 38"/>
+  <a u="35BB" b="82 30 9C 39"/>
+  <a u="35BC" b="82 30 9D 30"/>
+  <a u="35BD" b="82 30 9D 31"/>
+  <a u="35BE" b="82 30 9D 32"/>
+  <a u="35BF" b="82 30 9D 33"/>
+  <a u="35C0" b="82 30 9D 34"/>
+  <a u="35C1" b="82 30 9D 35"/>
+  <a u="35C2" b="82 30 9D 36"/>
+  <a u="35C3" b="82 30 9D 37"/>
+  <a u="35C4" b="82 30 9D 38"/>
+  <a u="35C5" b="82 30 9D 39"/>
+  <a u="35C6" b="82 30 9E 30"/>
+  <a u="35C7" b="82 30 9E 31"/>
+  <a u="35C8" b="82 30 9E 32"/>
+  <a u="35C9" b="82 30 9E 33"/>
+  <a u="35CA" b="82 30 9E 34"/>
+  <a u="35CB" b="82 30 9E 35"/>
+  <a u="35CC" b="82 30 9E 36"/>
+  <a u="35CD" b="82 30 9E 37"/>
+  <a u="35CE" b="82 30 9E 38"/>
+  <a u="35CF" b="82 30 9E 39"/>
+  <a u="35D0" b="82 30 9F 30"/>
+  <a u="35D1" b="82 30 9F 31"/>
+  <a u="35D2" b="82 30 9F 32"/>
+  <a u="35D3" b="82 30 9F 33"/>
+  <a u="35D4" b="82 30 9F 34"/>
+  <a u="35D5" b="82 30 9F 35"/>
+  <a u="35D6" b="82 30 9F 36"/>
+  <a u="35D7" b="82 30 9F 37"/>
+  <a u="35D8" b="82 30 9F 38"/>
+  <a u="35D9" b="82 30 9F 39"/>
+  <a u="35DA" b="82 30 A0 30"/>
+  <a u="35DB" b="82 30 A0 31"/>
+  <a u="35DC" b="82 30 A0 32"/>
+  <a u="35DD" b="82 30 A0 33"/>
+  <a u="35DE" b="82 30 A0 34"/>
+  <a u="35DF" b="82 30 A0 35"/>
+  <a u="35E0" b="82 30 A0 36"/>
+  <a u="35E1" b="82 30 A0 37"/>
+  <a u="35E2" b="82 30 A0 38"/>
+  <a u="35E3" b="82 30 A0 39"/>
+  <a u="35E4" b="82 30 A1 30"/>
+  <a u="35E5" b="82 30 A1 31"/>
+  <a u="35E6" b="82 30 A1 32"/>
+  <a u="35E7" b="82 30 A1 33"/>
+  <a u="35E8" b="82 30 A1 34"/>
+  <a u="35E9" b="82 30 A1 35"/>
+  <a u="35EA" b="82 30 A1 36"/>
+  <a u="35EB" b="82 30 A1 37"/>
+  <a u="35EC" b="82 30 A1 38"/>
+  <a u="35ED" b="82 30 A1 39"/>
+  <a u="35EE" b="82 30 A2 30"/>
+  <a u="35EF" b="82 30 A2 31"/>
+  <a u="35F0" b="82 30 A2 32"/>
+  <a u="35F1" b="82 30 A2 33"/>
+  <a u="35F2" b="82 30 A2 34"/>
+  <a u="35F3" b="82 30 A2 35"/>
+  <a u="35F4" b="82 30 A2 36"/>
+  <a u="35F5" b="82 30 A2 37"/>
+  <a u="35F6" b="82 30 A2 38"/>
+  <a u="35F7" b="82 30 A2 39"/>
+  <a u="35F8" b="82 30 A3 30"/>
+  <a u="35F9" b="82 30 A3 31"/>
+  <a u="35FA" b="82 30 A3 32"/>
+  <a u="35FB" b="82 30 A3 33"/>
+  <a u="35FC" b="82 30 A3 34"/>
+  <a u="35FD" b="82 30 A3 35"/>
+  <a u="35FE" b="82 30 A3 36"/>
+  <a u="35FF" b="82 30 A3 37"/>
+  <a u="3600" b="82 30 A3 38"/>
+  <a u="3601" b="82 30 A3 39"/>
+  <a u="3602" b="82 30 A4 30"/>
+  <a u="3603" b="82 30 A4 31"/>
+  <a u="3604" b="82 30 A4 32"/>
+  <a u="3605" b="82 30 A4 33"/>
+  <a u="3606" b="82 30 A4 34"/>
+  <a u="3607" b="82 30 A4 35"/>
+  <a u="3608" b="82 30 A4 36"/>
+  <a u="3609" b="82 30 A4 37"/>
+  <a u="360A" b="82 30 A4 38"/>
+  <a u="360B" b="82 30 A4 39"/>
+  <a u="360C" b="82 30 A5 30"/>
+  <a u="360D" b="82 30 A5 31"/>
+  <a u="360E" b="FE 5C"/>
+  <a u="360F" b="82 30 A5 32"/>
+  <a u="3610" b="82 30 A5 33"/>
+  <a u="3611" b="82 30 A5 34"/>
+  <a u="3612" b="82 30 A5 35"/>
+  <a u="3613" b="82 30 A5 36"/>
+  <a u="3614" b="82 30 A5 37"/>
+  <a u="3615" b="82 30 A5 38"/>
+  <a u="3616" b="82 30 A5 39"/>
+  <a u="3617" b="82 30 A6 30"/>
+  <a u="3618" b="82 30 A6 31"/>
+  <a u="3619" b="82 30 A6 32"/>
+  <a u="361A" b="FE 5B"/>
+  <a u="3918" b="FE 60"/>
+  <a u="3919" b="82 30 F2 38"/>
+  <a u="391A" b="82 30 F2 39"/>
+  <a u="391B" b="82 30 F3 30"/>
+  <a u="391C" b="82 30 F3 31"/>
+  <a u="391D" b="82 30 F3 32"/>
+  <a u="391E" b="82 30 F3 33"/>
+  <a u="391F" b="82 30 F3 34"/>
+  <a u="3920" b="82 30 F3 35"/>
+  <a u="3921" b="82 30 F3 36"/>
+  <a u="3922" b="82 30 F3 37"/>
+  <a u="3923" b="82 30 F3 38"/>
+  <a u="3924" b="82 30 F3 39"/>
+  <a u="3925" b="82 30 F4 30"/>
+  <a u="3926" b="82 30 F4 31"/>
+  <a u="3927" b="82 30 F4 32"/>
+  <a u="3928" b="82 30 F4 33"/>
+  <a u="3929" b="82 30 F4 34"/>
+  <a u="392A" b="82 30 F4 35"/>
+  <a u="392B" b="82 30 F4 36"/>
+  <a u="392C" b="82 30 F4 37"/>
+  <a u="392D" b="82 30 F4 38"/>
+  <a u="392E" b="82 30 F4 39"/>
+  <a u="392F" b="82 30 F5 30"/>
+  <a u="3930" b="82 30 F5 31"/>
+  <a u="3931" b="82 30 F5 32"/>
+  <a u="3932" b="82 30 F5 33"/>
+  <a u="3933" b="82 30 F5 34"/>
+  <a u="3934" b="82 30 F5 35"/>
+  <a u="3935" b="82 30 F5 36"/>
+  <a u="3936" b="82 30 F5 37"/>
+  <a u="3937" b="82 30 F5 38"/>
+  <a u="3938" b="82 30 F5 39"/>
+  <a u="3939" b="82 30 F6 30"/>
+  <a u="393A" b="82 30 F6 31"/>
+  <a u="393B" b="82 30 F6 32"/>
+  <a u="393C" b="82 30 F6 33"/>
+  <a u="393D" b="82 30 F6 34"/>
+  <a u="393E" b="82 30 F6 35"/>
+  <a u="393F" b="82 30 F6 36"/>
+  <a u="3940" b="82 30 F6 37"/>
+  <a u="3941" b="82 30 F6 38"/>
+  <a u="3942" b="82 30 F6 39"/>
+  <a u="3943" b="82 30 F7 30"/>
+  <a u="3944" b="82 30 F7 31"/>
+  <a u="3945" b="82 30 F7 32"/>
+  <a u="3946" b="82 30 F7 33"/>
+  <a u="3947" b="82 30 F7 34"/>
+  <a u="3948" b="82 30 F7 35"/>
+  <a u="3949" b="82 30 F7 36"/>
+  <a u="394A" b="82 30 F7 37"/>
+  <a u="394B" b="82 30 F7 38"/>
+  <a u="394C" b="82 30 F7 39"/>
+  <a u="394D" b="82 30 F8 30"/>
+  <a u="394E" b="82 30 F8 31"/>
+  <a u="394F" b="82 30 F8 32"/>
+  <a u="3950" b="82 30 F8 33"/>
+  <a u="3951" b="82 30 F8 34"/>
+  <a u="3952" b="82 30 F8 35"/>
+  <a u="3953" b="82 30 F8 36"/>
+  <a u="3954" b="82 30 F8 37"/>
+  <a u="3955" b="82 30 F8 38"/>
+  <a u="3956" b="82 30 F8 39"/>
+  <a u="3957" b="82 30 F9 30"/>
+  <a u="3958" b="82 30 F9 31"/>
+  <a u="3959" b="82 30 F9 32"/>
+  <a u="395A" b="82 30 F9 33"/>
+  <a u="395B" b="82 30 F9 34"/>
+  <a u="395C" b="82 30 F9 35"/>
+  <a u="395D" b="82 30 F9 36"/>
+  <a u="395E" b="82 30 F9 37"/>
+  <a u="395F" b="82 30 F9 38"/>
+  <a u="3960" b="82 30 F9 39"/>
+  <a u="3961" b="82 30 FA 30"/>
+  <a u="3962" b="82 30 FA 31"/>
+  <a u="3963" b="82 30 FA 32"/>
+  <a u="3964" b="82 30 FA 33"/>
+  <a u="3965" b="82 30 FA 34"/>
+  <a u="3966" b="82 30 FA 35"/>
+  <a u="3967" b="82 30 FA 36"/>
+  <a u="3968" b="82 30 FA 37"/>
+  <a u="3969" b="82 30 FA 38"/>
+  <a u="396A" b="82 30 FA 39"/>
+  <a u="396B" b="82 30 FB 30"/>
+  <a u="396C" b="82 30 FB 31"/>
+  <a u="396D" b="82 30 FB 32"/>
+  <a u="396E" b="FE 5F"/>
+  <a u="396F" b="82 30 FB 33"/>
+  <a u="3970" b="82 30 FB 34"/>
+  <a u="3971" b="82 30 FB 35"/>
+  <a u="3972" b="82 30 FB 36"/>
+  <a u="3973" b="82 30 FB 37"/>
+  <a u="3974" b="82 30 FB 38"/>
+  <a u="3975" b="82 30 FB 39"/>
+  <a u="3976" b="82 30 FC 30"/>
+  <a u="3977" b="82 30 FC 31"/>
+  <a u="3978" b="82 30 FC 32"/>
+  <a u="3979" b="82 30 FC 33"/>
+  <a u="397A" b="82 30 FC 34"/>
+  <a u="397B" b="82 30 FC 35"/>
+  <a u="397C" b="82 30 FC 36"/>
+  <a u="397D" b="82 30 FC 37"/>
+  <a u="397E" b="82 30 FC 38"/>
+  <a u="397F" b="82 30 FC 39"/>
+  <a u="3980" b="82 30 FD 30"/>
+  <a u="3981" b="82 30 FD 31"/>
+  <a u="3982" b="82 30 FD 32"/>
+  <a u="3983" b="82 30 FD 33"/>
+  <a u="3984" b="82 30 FD 34"/>
+  <a u="3985" b="82 30 FD 35"/>
+  <a u="3986" b="82 30 FD 36"/>
+  <a u="3987" b="82 30 FD 37"/>
+  <a u="3988" b="82 30 FD 38"/>
+  <a u="3989" b="82 30 FD 39"/>
+  <a u="398A" b="82 30 FE 30"/>
+  <a u="398B" b="82 30 FE 31"/>
+  <a u="398C" b="82 30 FE 32"/>
+  <a u="398D" b="82 30 FE 33"/>
+  <a u="398E" b="82 30 FE 34"/>
+  <a u="398F" b="82 30 FE 35"/>
+  <a u="3990" b="82 30 FE 36"/>
+  <a u="3991" b="82 30 FE 37"/>
+  <a u="3992" b="82 30 FE 38"/>
+  <a u="3993" b="82 30 FE 39"/>
+  <a u="3994" b="82 31 81 30"/>
+  <a u="3995" b="82 31 81 31"/>
+  <a u="3996" b="82 31 81 32"/>
+  <a u="3997" b="82 31 81 33"/>
+  <a u="3998" b="82 31 81 34"/>
+  <a u="3999" b="82 31 81 35"/>
+  <a u="399A" b="82 31 81 36"/>
+  <a u="399B" b="82 31 81 37"/>
+  <a u="399C" b="82 31 81 38"/>
+  <a u="399D" b="82 31 81 39"/>
+  <a u="399E" b="82 31 82 30"/>
+  <a u="399F" b="82 31 82 31"/>
+  <a u="39A0" b="82 31 82 32"/>
+  <a u="39A1" b="82 31 82 33"/>
+  <a u="39A2" b="82 31 82 34"/>
+  <a u="39A3" b="82 31 82 35"/>
+  <a u="39A4" b="82 31 82 36"/>
+  <a u="39A5" b="82 31 82 37"/>
+  <a u="39A6" b="82 31 82 38"/>
+  <a u="39A7" b="82 31 82 39"/>
+  <a u="39A8" b="82 31 83 30"/>
+  <a u="39A9" b="82 31 83 31"/>
+  <a u="39AA" b="82 31 83 32"/>
+  <a u="39AB" b="82 31 83 33"/>
+  <a u="39AC" b="82 31 83 34"/>
+  <a u="39AD" b="82 31 83 35"/>
+  <a u="39AE" b="82 31 83 36"/>
+  <a u="39AF" b="82 31 83 37"/>
+  <a u="39B0" b="82 31 83 38"/>
+  <a u="39B1" b="82 31 83 39"/>
+  <a u="39B2" b="82 31 84 30"/>
+  <a u="39B3" b="82 31 84 31"/>
+  <a u="39B4" b="82 31 84 32"/>
+  <a u="39B5" b="82 31 84 33"/>
+  <a u="39B6" b="82 31 84 34"/>
+  <a u="39B7" b="82 31 84 35"/>
+  <a u="39B8" b="82 31 84 36"/>
+  <a u="39B9" b="82 31 84 37"/>
+  <a u="39BA" b="82 31 84 38"/>
+  <a u="39BB" b="82 31 84 39"/>
+  <a u="39BC" b="82 31 85 30"/>
+  <a u="39BD" b="82 31 85 31"/>
+  <a u="39BE" b="82 31 85 32"/>
+  <a u="39BF" b="82 31 85 33"/>
+  <a u="39C0" b="82 31 85 34"/>
+  <a u="39C1" b="82 31 85 35"/>
+  <a u="39C2" b="82 31 85 36"/>
+  <a u="39C3" b="82 31 85 37"/>
+  <a u="39C4" b="82 31 85 38"/>
+  <a u="39C5" b="82 31 85 39"/>
+  <a u="39C6" b="82 31 86 30"/>
+  <a u="39C7" b="82 31 86 31"/>
+  <a u="39C8" b="82 31 86 32"/>
+  <a u="39C9" b="82 31 86 33"/>
+  <a u="39CA" b="82 31 86 34"/>
+  <a u="39CB" b="82 31 86 35"/>
+  <a u="39CC" b="82 31 86 36"/>
+  <a u="39CD" b="82 31 86 37"/>
+  <a u="39CE" b="82 31 86 38"/>
+  <a u="39CF" b="FE 62"/>
+  <a u="39D0" b="FE 65"/>
+  <a u="39D1" b="82 31 86 39"/>
+  <a u="39D2" b="82 31 87 30"/>
+  <a u="39D3" b="82 31 87 31"/>
+  <a u="39D4" b="82 31 87 32"/>
+  <a u="39D5" b="82 31 87 33"/>
+  <a u="39D6" b="82 31 87 34"/>
+  <a u="39D7" b="82 31 87 35"/>
+  <a u="39D8" b="82 31 87 36"/>
+  <a u="39D9" b="82 31 87 37"/>
+  <a u="39DA" b="82 31 87 38"/>
+  <a u="39DB" b="82 31 87 39"/>
+  <a u="39DC" b="82 31 88 30"/>
+  <a u="39DD" b="82 31 88 31"/>
+  <a u="39DE" b="82 31 88 32"/>
+  <a u="39DF" b="FE 63"/>
+  <a u="39E0" b="82 31 88 33"/>
+  <a u="39E1" b="82 31 88 34"/>
+  <a u="39E2" b="82 31 88 35"/>
+  <a u="39E3" b="82 31 88 36"/>
+  <a u="39E4" b="82 31 88 37"/>
+  <a u="39E5" b="82 31 88 38"/>
+  <a u="39E6" b="82 31 88 39"/>
+  <a u="39E7" b="82 31 89 30"/>
+  <a u="39E8" b="82 31 89 31"/>
+  <a u="39E9" b="82 31 89 32"/>
+  <a u="39EA" b="82 31 89 33"/>
+  <a u="39EB" b="82 31 89 34"/>
+  <a u="39EC" b="82 31 89 35"/>
+  <a u="39ED" b="82 31 89 36"/>
+  <a u="39EE" b="82 31 89 37"/>
+  <a u="39EF" b="82 31 89 38"/>
+  <a u="39F0" b="82 31 89 39"/>
+  <a u="39F1" b="82 31 8A 30"/>
+  <a u="39F2" b="82 31 8A 31"/>
+  <a u="39F3" b="82 31 8A 32"/>
+  <a u="39F4" b="82 31 8A 33"/>
+  <a u="39F5" b="82 31 8A 34"/>
+  <a u="39F6" b="82 31 8A 35"/>
+  <a u="39F7" b="82 31 8A 36"/>
+  <a u="39F8" b="82 31 8A 37"/>
+  <a u="39F9" b="82 31 8A 38"/>
+  <a u="39FA" b="82 31 8A 39"/>
+  <a u="39FB" b="82 31 8B 30"/>
+  <a u="39FC" b="82 31 8B 31"/>
+  <a u="39FD" b="82 31 8B 32"/>
+  <a u="39FE" b="82 31 8B 33"/>
+  <a u="39FF" b="82 31 8B 34"/>
+  <a u="3A00" b="82 31 8B 35"/>
+  <a u="3A01" b="82 31 8B 36"/>
+  <a u="3A02" b="82 31 8B 37"/>
+  <a u="3A03" b="82 31 8B 38"/>
+  <a u="3A04" b="82 31 8B 39"/>
+  <a u="3A05" b="82 31 8C 30"/>
+  <a u="3A06" b="82 31 8C 31"/>
+  <a u="3A07" b="82 31 8C 32"/>
+  <a u="3A08" b="82 31 8C 33"/>
+  <a u="3A09" b="82 31 8C 34"/>
+  <a u="3A0A" b="82 31 8C 35"/>
+  <a u="3A0B" b="82 31 8C 36"/>
+  <a u="3A0C" b="82 31 8C 37"/>
+  <a u="3A0D" b="82 31 8C 38"/>
+  <a u="3A0E" b="82 31 8C 39"/>
+  <a u="3A0F" b="82 31 8D 30"/>
+  <a u="3A10" b="82 31 8D 31"/>
+  <a u="3A11" b="82 31 8D 32"/>
+  <a u="3A12" b="82 31 8D 33"/>
+  <a u="3A13" b="82 31 8D 34"/>
+  <a u="3A14" b="82 31 8D 35"/>
+  <a u="3A15" b="82 31 8D 36"/>
+  <a u="3A16" b="82 31 8D 37"/>
+  <a u="3A17" b="82 31 8D 38"/>
+  <a u="3A18" b="82 31 8D 39"/>
+  <a u="3A19" b="82 31 8E 30"/>
+  <a u="3A1A" b="82 31 8E 31"/>
+  <a u="3A1B" b="82 31 8E 32"/>
+  <a u="3A1C" b="82 31 8E 33"/>
+  <a u="3A1D" b="82 31 8E 34"/>
+  <a u="3A1E" b="82 31 8E 35"/>
+  <a u="3A1F" b="82 31 8E 36"/>
+  <a u="3A20" b="82 31 8E 37"/>
+  <a u="3A21" b="82 31 8E 38"/>
+  <a u="3A22" b="82 31 8E 39"/>
+  <a u="3A23" b="82 31 8F 30"/>
+  <a u="3A24" b="82 31 8F 31"/>
+  <a u="3A25" b="82 31 8F 32"/>
+  <a u="3A26" b="82 31 8F 33"/>
+  <a u="3A27" b="82 31 8F 34"/>
+  <a u="3A28" b="82 31 8F 35"/>
+  <a u="3A29" b="82 31 8F 36"/>
+  <a u="3A2A" b="82 31 8F 37"/>
+  <a u="3A2B" b="82 31 8F 38"/>
+  <a u="3A2C" b="82 31 8F 39"/>
+  <a u="3A2D" b="82 31 90 30"/>
+  <a u="3A2E" b="82 31 90 31"/>
+  <a u="3A2F" b="82 31 90 32"/>
+  <a u="3A30" b="82 31 90 33"/>
+  <a u="3A31" b="82 31 90 34"/>
+  <a u="3A32" b="82 31 90 35"/>
+  <a u="3A33" b="82 31 90 36"/>
+  <a u="3A34" b="82 31 90 37"/>
+  <a u="3A35" b="82 31 90 38"/>
+  <a u="3A36" b="82 31 90 39"/>
+  <a u="3A37" b="82 31 91 30"/>
+  <a u="3A38" b="82 31 91 31"/>
+  <a u="3A39" b="82 31 91 32"/>
+  <a u="3A3A" b="82 31 91 33"/>
+  <a u="3A3B" b="82 31 91 34"/>
+  <a u="3A3C" b="82 31 91 35"/>
+  <a u="3A3D" b="82 31 91 36"/>
+  <a u="3A3E" b="82 31 91 37"/>
+  <a u="3A3F" b="82 31 91 38"/>
+  <a u="3A40" b="82 31 91 39"/>
+  <a u="3A41" b="82 31 92 30"/>
+  <a u="3A42" b="82 31 92 31"/>
+  <a u="3A43" b="82 31 92 32"/>
+  <a u="3A44" b="82 31 92 33"/>
+  <a u="3A45" b="82 31 92 34"/>
+  <a u="3A46" b="82 31 92 35"/>
+  <a u="3A47" b="82 31 92 36"/>
+  <a u="3A48" b="82 31 92 37"/>
+  <a u="3A49" b="82 31 92 38"/>
+  <a u="3A4A" b="82 31 92 39"/>
+  <a u="3A4B" b="82 31 93 30"/>
+  <a u="3A4C" b="82 31 93 31"/>
+  <a u="3A4D" b="82 31 93 32"/>
+  <a u="3A4E" b="82 31 93 33"/>
+  <a u="3A4F" b="82 31 93 34"/>
+  <a u="3A50" b="82 31 93 35"/>
+  <a u="3A51" b="82 31 93 36"/>
+  <a u="3A52" b="82 31 93 37"/>
+  <a u="3A53" b="82 31 93 38"/>
+  <a u="3A54" b="82 31 93 39"/>
+  <a u="3A55" b="82 31 94 30"/>
+  <a u="3A56" b="82 31 94 31"/>
+  <a u="3A57" b="82 31 94 32"/>
+  <a u="3A58" b="82 31 94 33"/>
+  <a u="3A59" b="82 31 94 34"/>
+  <a u="3A5A" b="82 31 94 35"/>
+  <a u="3A5B" b="82 31 94 36"/>
+  <a u="3A5C" b="82 31 94 37"/>
+  <a u="3A5D" b="82 31 94 38"/>
+  <a u="3A5E" b="82 31 94 39"/>
+  <a u="3A5F" b="82 31 95 30"/>
+  <a u="3A60" b="82 31 95 31"/>
+  <a u="3A61" b="82 31 95 32"/>
+  <a u="3A62" b="82 31 95 33"/>
+  <a u="3A63" b="82 31 95 34"/>
+  <a u="3A64" b="82 31 95 35"/>
+  <a u="3A65" b="82 31 95 36"/>
+  <a u="3A66" b="82 31 95 37"/>
+  <a u="3A67" b="82 31 95 38"/>
+  <a u="3A68" b="82 31 95 39"/>
+  <a u="3A69" b="82 31 96 30"/>
+  <a u="3A6A" b="82 31 96 31"/>
+  <a u="3A6B" b="82 31 96 32"/>
+  <a u="3A6C" b="82 31 96 33"/>
+  <a u="3A6D" b="82 31 96 34"/>
+  <a u="3A6E" b="82 31 96 35"/>
+  <a u="3A6F" b="82 31 96 36"/>
+  <a u="3A70" b="82 31 96 37"/>
+  <a u="3A71" b="82 31 96 38"/>
+  <a u="3A72" b="82 31 96 39"/>
+  <a u="3A73" b="FE 64"/>
+  <a u="3A74" b="82 31 97 30"/>
+  <a u="3A75" b="82 31 97 31"/>
+  <a u="3A76" b="82 31 97 32"/>
+  <a u="3A77" b="82 31 97 33"/>
+  <a u="3A78" b="82 31 97 34"/>
+  <a u="3A79" b="82 31 97 35"/>
+  <a u="3A7A" b="82 31 97 36"/>
+  <a u="3A7B" b="82 31 97 37"/>
+  <a u="3A7C" b="82 31 97 38"/>
+  <a u="3A7D" b="82 31 97 39"/>
+  <a u="3A7E" b="82 31 98 30"/>
+  <a u="3A7F" b="82 31 98 31"/>
+  <a u="3A80" b="82 31 98 32"/>
+  <a u="3A81" b="82 31 98 33"/>
+  <a u="3A82" b="82 31 98 34"/>
+  <a u="3A83" b="82 31 98 35"/>
+  <a u="3A84" b="82 31 98 36"/>
+  <a u="3A85" b="82 31 98 37"/>
+  <a u="3A86" b="82 31 98 38"/>
+  <a u="3A87" b="82 31 98 39"/>
+  <a u="3A88" b="82 31 99 30"/>
+  <a u="3A89" b="82 31 99 31"/>
+  <a u="3A8A" b="82 31 99 32"/>
+  <a u="3A8B" b="82 31 99 33"/>
+  <a u="3A8C" b="82 31 99 34"/>
+  <a u="3A8D" b="82 31 99 35"/>
+  <a u="3A8E" b="82 31 99 36"/>
+  <a u="3A8F" b="82 31 99 37"/>
+  <a u="3A90" b="82 31 99 38"/>
+  <a u="3A91" b="82 31 99 39"/>
+  <a u="3A92" b="82 31 9A 30"/>
+  <a u="3A93" b="82 31 9A 31"/>
+  <a u="3A94" b="82 31 9A 32"/>
+  <a u="3A95" b="82 31 9A 33"/>
+  <a u="3A96" b="82 31 9A 34"/>
+  <a u="3A97" b="82 31 9A 35"/>
+  <a u="3A98" b="82 31 9A 36"/>
+  <a u="3A99" b="82 31 9A 37"/>
+  <a u="3A9A" b="82 31 9A 38"/>
+  <a u="3A9B" b="82 31 9A 39"/>
+  <a u="3A9C" b="82 31 9B 30"/>
+  <a u="3A9D" b="82 31 9B 31"/>
+  <a u="3A9E" b="82 31 9B 32"/>
+  <a u="3A9F" b="82 31 9B 33"/>
+  <a u="3AA0" b="82 31 9B 34"/>
+  <a u="3AA1" b="82 31 9B 35"/>
+  <a u="3AA2" b="82 31 9B 36"/>
+  <a u="3AA3" b="82 31 9B 37"/>
+  <a u="3AA4" b="82 31 9B 38"/>
+  <a u="3AA5" b="82 31 9B 39"/>
+  <a u="3AA6" b="82 31 9C 30"/>
+  <a u="3AA7" b="82 31 9C 31"/>
+  <a u="3AA8" b="82 31 9C 32"/>
+  <a u="3AA9" b="82 31 9C 33"/>
+  <a u="3AAA" b="82 31 9C 34"/>
+  <a u="3AAB" b="82 31 9C 35"/>
+  <a u="3AAC" b="82 31 9C 36"/>
+  <a u="3AAD" b="82 31 9C 37"/>
+  <a u="3AAE" b="82 31 9C 38"/>
+  <a u="3AAF" b="82 31 9C 39"/>
+  <a u="3AB0" b="82 31 9D 30"/>
+  <a u="3AB1" b="82 31 9D 31"/>
+  <a u="3AB2" b="82 31 9D 32"/>
+  <a u="3AB3" b="82 31 9D 33"/>
+  <a u="3AB4" b="82 31 9D 34"/>
+  <a u="3AB5" b="82 31 9D 35"/>
+  <a u="3AB6" b="82 31 9D 36"/>
+  <a u="3AB7" b="82 31 9D 37"/>
+  <a u="3AB8" b="82 31 9D 38"/>
+  <a u="3AB9" b="82 31 9D 39"/>
+  <a u="3ABA" b="82 31 9E 30"/>
+  <a u="3ABB" b="82 31 9E 31"/>
+  <a u="3ABC" b="82 31 9E 32"/>
+  <a u="3ABD" b="82 31 9E 33"/>
+  <a u="3ABE" b="82 31 9E 34"/>
+  <a u="3ABF" b="82 31 9E 35"/>
+  <a u="3AC0" b="82 31 9E 36"/>
+  <a u="3AC1" b="82 31 9E 37"/>
+  <a u="3AC2" b="82 31 9E 38"/>
+  <a u="3AC3" b="82 31 9E 39"/>
+  <a u="3AC4" b="82 31 9F 30"/>
+  <a u="3AC5" b="82 31 9F 31"/>
+  <a u="3AC6" b="82 31 9F 32"/>
+  <a u="3AC7" b="82 31 9F 33"/>
+  <a u="3AC8" b="82 31 9F 34"/>
+  <a u="3AC9" b="82 31 9F 35"/>
+  <a u="3ACA" b="82 31 9F 36"/>
+  <a u="3ACB" b="82 31 9F 37"/>
+  <a u="3ACC" b="82 31 9F 38"/>
+  <a u="3ACD" b="82 31 9F 39"/>
+  <a u="3ACE" b="82 31 A0 30"/>
+  <a u="3ACF" b="82 31 A0 31"/>
+  <a u="3AD0" b="82 31 A0 32"/>
+  <a u="3AD1" b="82 31 A0 33"/>
+  <a u="3AD2" b="82 31 A0 34"/>
+  <a u="3AD3" b="82 31 A0 35"/>
+  <a u="3AD4" b="82 31 A0 36"/>
+  <a u="3AD5" b="82 31 A0 37"/>
+  <a u="3AD6" b="82 31 A0 38"/>
+  <a u="3AD7" b="82 31 A0 39"/>
+  <a u="3AD8" b="82 31 A1 30"/>
+  <a u="3AD9" b="82 31 A1 31"/>
+  <a u="3ADA" b="82 31 A1 32"/>
+  <a u="3ADB" b="82 31 A1 33"/>
+  <a u="3ADC" b="82 31 A1 34"/>
+  <a u="3ADD" b="82 31 A1 35"/>
+  <a u="3ADE" b="82 31 A1 36"/>
+  <a u="3ADF" b="82 31 A1 37"/>
+  <a u="3AE0" b="82 31 A1 38"/>
+  <a u="3AE1" b="82 31 A1 39"/>
+  <a u="3AE2" b="82 31 A2 30"/>
+  <a u="3AE3" b="82 31 A2 31"/>
+  <a u="3AE4" b="82 31 A2 32"/>
+  <a u="3AE5" b="82 31 A2 33"/>
+  <a u="3AE6" b="82 31 A2 34"/>
+  <a u="3AE7" b="82 31 A2 35"/>
+  <a u="3AE8" b="82 31 A2 36"/>
+  <a u="3AE9" b="82 31 A2 37"/>
+  <a u="3AEA" b="82 31 A2 38"/>
+  <a u="3AEB" b="82 31 A2 39"/>
+  <a u="3AEC" b="82 31 A3 30"/>
+  <a u="3AED" b="82 31 A3 31"/>
+  <a u="3AEE" b="82 31 A3 32"/>
+  <a u="3AEF" b="82 31 A3 33"/>
+  <a u="3AF0" b="82 31 A3 34"/>
+  <a u="3AF1" b="82 31 A3 35"/>
+  <a u="3AF2" b="82 31 A3 36"/>
+  <a u="3AF3" b="82 31 A3 37"/>
+  <a u="3AF4" b="82 31 A3 38"/>
+  <a u="3AF5" b="82 31 A3 39"/>
+  <a u="3AF6" b="82 31 A4 30"/>
+  <a u="3AF7" b="82 31 A4 31"/>
+  <a u="3AF8" b="82 31 A4 32"/>
+  <a u="3AF9" b="82 31 A4 33"/>
+  <a u="3AFA" b="82 31 A4 34"/>
+  <a u="3AFB" b="82 31 A4 35"/>
+  <a u="3AFC" b="82 31 A4 36"/>
+  <a u="3AFD" b="82 31 A4 37"/>
+  <a u="3AFE" b="82 31 A4 38"/>
+  <a u="3AFF" b="82 31 A4 39"/>
+  <a u="3B00" b="82 31 A5 30"/>
+  <a u="3B01" b="82 31 A5 31"/>
+  <a u="3B02" b="82 31 A5 32"/>
+  <a u="3B03" b="82 31 A5 33"/>
+  <a u="3B04" b="82 31 A5 34"/>
+  <a u="3B05" b="82 31 A5 35"/>
+  <a u="3B06" b="82 31 A5 36"/>
+  <a u="3B07" b="82 31 A5 37"/>
+  <a u="3B08" b="82 31 A5 38"/>
+  <a u="3B09" b="82 31 A5 39"/>
+  <a u="3B0A" b="82 31 A6 30"/>
+  <a u="3B0B" b="82 31 A6 31"/>
+  <a u="3B0C" b="82 31 A6 32"/>
+  <a u="3B0D" b="82 31 A6 33"/>
+  <a u="3B0E" b="82 31 A6 34"/>
+  <a u="3B0F" b="82 31 A6 35"/>
+  <a u="3B10" b="82 31 A6 36"/>
+  <a u="3B11" b="82 31 A6 37"/>
+  <a u="3B12" b="82 31 A6 38"/>
+  <a u="3B13" b="82 31 A6 39"/>
+  <a u="3B14" b="82 31 A7 30"/>
+  <a u="3B15" b="82 31 A7 31"/>
+  <a u="3B16" b="82 31 A7 32"/>
+  <a u="3B17" b="82 31 A7 33"/>
+  <a u="3B18" b="82 31 A7 34"/>
+  <a u="3B19" b="82 31 A7 35"/>
+  <a u="3B1A" b="82 31 A7 36"/>
+  <a u="3B1B" b="82 31 A7 37"/>
+  <a u="3B1C" b="82 31 A7 38"/>
+  <a u="3B1D" b="82 31 A7 39"/>
+  <a u="3B1E" b="82 31 A8 30"/>
+  <a u="3B1F" b="82 31 A8 31"/>
+  <a u="3B20" b="82 31 A8 32"/>
+  <a u="3B21" b="82 31 A8 33"/>
+  <a u="3B22" b="82 31 A8 34"/>
+  <a u="3B23" b="82 31 A8 35"/>
+  <a u="3B24" b="82 31 A8 36"/>
+  <a u="3B25" b="82 31 A8 37"/>
+  <a u="3B26" b="82 31 A8 38"/>
+  <a u="3B27" b="82 31 A8 39"/>
+  <a u="3B28" b="82 31 A9 30"/>
+  <a u="3B29" b="82 31 A9 31"/>
+  <a u="3B2A" b="82 31 A9 32"/>
+  <a u="3B2B" b="82 31 A9 33"/>
+  <a u="3B2C" b="82 31 A9 34"/>
+  <a u="3B2D" b="82 31 A9 35"/>
+  <a u="3B2E" b="82 31 A9 36"/>
+  <a u="3B2F" b="82 31 A9 37"/>
+  <a u="3B30" b="82 31 A9 38"/>
+  <a u="3B31" b="82 31 A9 39"/>
+  <a u="3B32" b="82 31 AA 30"/>
+  <a u="3B33" b="82 31 AA 31"/>
+  <a u="3B34" b="82 31 AA 32"/>
+  <a u="3B35" b="82 31 AA 33"/>
+  <a u="3B36" b="82 31 AA 34"/>
+  <a u="3B37" b="82 31 AA 35"/>
+  <a u="3B38" b="82 31 AA 36"/>
+  <a u="3B39" b="82 31 AA 37"/>
+  <a u="3B3A" b="82 31 AA 38"/>
+  <a u="3B3B" b="82 31 AA 39"/>
+  <a u="3B3C" b="82 31 AB 30"/>
+  <a u="3B3D" b="82 31 AB 31"/>
+  <a u="3B3E" b="82 31 AB 32"/>
+  <a u="3B3F" b="82 31 AB 33"/>
+  <a u="3B40" b="82 31 AB 34"/>
+  <a u="3B41" b="82 31 AB 35"/>
+  <a u="3B42" b="82 31 AB 36"/>
+  <a u="3B43" b="82 31 AB 37"/>
+  <a u="3B44" b="82 31 AB 38"/>
+  <a u="3B45" b="82 31 AB 39"/>
+  <a u="3B46" b="82 31 AC 30"/>
+  <a u="3B47" b="82 31 AC 31"/>
+  <a u="3B48" b="82 31 AC 32"/>
+  <a u="3B49" b="82 31 AC 33"/>
+  <a u="3B4A" b="82 31 AC 34"/>
+  <a u="3B4B" b="82 31 AC 35"/>
+  <a u="3B4C" b="82 31 AC 36"/>
+  <a u="3B4D" b="82 31 AC 37"/>
+  <a u="3B4E" b="FE 68"/>
+  <a u="3B4F" b="82 31 AC 38"/>
+  <a u="3B50" b="82 31 AC 39"/>
+  <a u="3B51" b="82 31 AD 30"/>
+  <a u="3B52" b="82 31 AD 31"/>
+  <a u="3B53" b="82 31 AD 32"/>
+  <a u="3B54" b="82 31 AD 33"/>
+  <a u="3B55" b="82 31 AD 34"/>
+  <a u="3B56" b="82 31 AD 35"/>
+  <a u="3B57" b="82 31 AD 36"/>
+  <a u="3B58" b="82 31 AD 37"/>
+  <a u="3B59" b="82 31 AD 38"/>
+  <a u="3B5A" b="82 31 AD 39"/>
+  <a u="3B5B" b="82 31 AE 30"/>
+  <a u="3B5C" b="82 31 AE 31"/>
+  <a u="3B5D" b="82 31 AE 32"/>
+  <a u="3B5E" b="82 31 AE 33"/>
+  <a u="3B5F" b="82 31 AE 34"/>
+  <a u="3B60" b="82 31 AE 35"/>
+  <a u="3B61" b="82 31 AE 36"/>
+  <a u="3B62" b="82 31 AE 37"/>
+  <a u="3B63" b="82 31 AE 38"/>
+  <a u="3B64" b="82 31 AE 39"/>
+  <a u="3B65" b="82 31 AF 30"/>
+  <a u="3B66" b="82 31 AF 31"/>
+  <a u="3B67" b="82 31 AF 32"/>
+  <a u="3B68" b="82 31 AF 33"/>
+  <a u="3B69" b="82 31 AF 34"/>
+  <a u="3B6A" b="82 31 AF 35"/>
+  <a u="3B6B" b="82 31 AF 36"/>
+  <a u="3B6C" b="82 31 AF 37"/>
+  <a u="3B6D" b="82 31 AF 38"/>
+  <a u="3B6E" b="82 31 AF 39"/>
+  <a u="3B6F" b="82 31 B0 30"/>
+  <a u="3B70" b="82 31 B0 31"/>
+  <a u="3B71" b="82 31 B0 32"/>
+  <a u="3B72" b="82 31 B0 33"/>
+  <a u="3B73" b="82 31 B0 34"/>
+  <a u="3B74" b="82 31 B0 35"/>
+  <a u="3B75" b="82 31 B0 36"/>
+  <a u="3B76" b="82 31 B0 37"/>
+  <a u="3B77" b="82 31 B0 38"/>
+  <a u="3B78" b="82 31 B0 39"/>
+  <a u="3B79" b="82 31 B1 30"/>
+  <a u="3B7A" b="82 31 B1 31"/>
+  <a u="3B7B" b="82 31 B1 32"/>
+  <a u="3B7C" b="82 31 B1 33"/>
+  <a u="3B7D" b="82 31 B1 34"/>
+  <a u="3B7E" b="82 31 B1 35"/>
+  <a u="3B7F" b="82 31 B1 36"/>
+  <a u="3B80" b="82 31 B1 37"/>
+  <a u="3B81" b="82 31 B1 38"/>
+  <a u="3B82" b="82 31 B1 39"/>
+  <a u="3B83" b="82 31 B2 30"/>
+  <a u="3B84" b="82 31 B2 31"/>
+  <a u="3B85" b="82 31 B2 32"/>
+  <a u="3B86" b="82 31 B2 33"/>
+  <a u="3B87" b="82 31 B2 34"/>
+  <a u="3B88" b="82 31 B2 35"/>
+  <a u="3B89" b="82 31 B2 36"/>
+  <a u="3B8A" b="82 31 B2 37"/>
+  <a u="3B8B" b="82 31 B2 38"/>
+  <a u="3B8C" b="82 31 B2 39"/>
+  <a u="3B8D" b="82 31 B3 30"/>
+  <a u="3B8E" b="82 31 B3 31"/>
+  <a u="3B8F" b="82 31 B3 32"/>
+  <a u="3B90" b="82 31 B3 33"/>
+  <a u="3B91" b="82 31 B3 34"/>
+  <a u="3B92" b="82 31 B3 35"/>
+  <a u="3B93" b="82 31 B3 36"/>
+  <a u="3B94" b="82 31 B3 37"/>
+  <a u="3B95" b="82 31 B3 38"/>
+  <a u="3B96" b="82 31 B3 39"/>
+  <a u="3B97" b="82 31 B4 30"/>
+  <a u="3B98" b="82 31 B4 31"/>
+  <a u="3B99" b="82 31 B4 32"/>
+  <a u="3B9A" b="82 31 B4 33"/>
+  <a u="3B9B" b="82 31 B4 34"/>
+  <a u="3B9C" b="82 31 B4 35"/>
+  <a u="3B9D" b="82 31 B4 36"/>
+  <a u="3B9E" b="82 31 B4 37"/>
+  <a u="3B9F" b="82 31 B4 38"/>
+  <a u="3BA0" b="82 31 B4 39"/>
+  <a u="3BA1" b="82 31 B5 30"/>
+  <a u="3BA2" b="82 31 B5 31"/>
+  <a u="3BA3" b="82 31 B5 32"/>
+  <a u="3BA4" b="82 31 B5 33"/>
+  <a u="3BA5" b="82 31 B5 34"/>
+  <a u="3BA6" b="82 31 B5 35"/>
+  <a u="3BA7" b="82 31 B5 36"/>
+  <a u="3BA8" b="82 31 B5 37"/>
+  <a u="3BA9" b="82 31 B5 38"/>
+  <a u="3BAA" b="82 31 B5 39"/>
+  <a u="3BAB" b="82 31 B6 30"/>
+  <a u="3BAC" b="82 31 B6 31"/>
+  <a u="3BAD" b="82 31 B6 32"/>
+  <a u="3BAE" b="82 31 B6 33"/>
+  <a u="3BAF" b="82 31 B6 34"/>
+  <a u="3BB0" b="82 31 B6 35"/>
+  <a u="3BB1" b="82 31 B6 36"/>
+  <a u="3BB2" b="82 31 B6 37"/>
+  <a u="3BB3" b="82 31 B6 38"/>
+  <a u="3BB4" b="82 31 B6 39"/>
+  <a u="3BB5" b="82 31 B7 30"/>
+  <a u="3BB6" b="82 31 B7 31"/>
+  <a u="3BB7" b="82 31 B7 32"/>
+  <a u="3BB8" b="82 31 B7 33"/>
+  <a u="3BB9" b="82 31 B7 34"/>
+  <a u="3BBA" b="82 31 B7 35"/>
+  <a u="3BBB" b="82 31 B7 36"/>
+  <a u="3BBC" b="82 31 B7 37"/>
+  <a u="3BBD" b="82 31 B7 38"/>
+  <a u="3BBE" b="82 31 B7 39"/>
+  <a u="3BBF" b="82 31 B8 30"/>
+  <a u="3BC0" b="82 31 B8 31"/>
+  <a u="3BC1" b="82 31 B8 32"/>
+  <a u="3BC2" b="82 31 B8 33"/>
+  <a u="3BC3" b="82 31 B8 34"/>
+  <a u="3BC4" b="82 31 B8 35"/>
+  <a u="3BC5" b="82 31 B8 36"/>
+  <a u="3BC6" b="82 31 B8 37"/>
+  <a u="3BC7" b="82 31 B8 38"/>
+  <a u="3BC8" b="82 31 B8 39"/>
+  <a u="3BC9" b="82 31 B9 30"/>
+  <a u="3BCA" b="82 31 B9 31"/>
+  <a u="3BCB" b="82 31 B9 32"/>
+  <a u="3BCC" b="82 31 B9 33"/>
+  <a u="3BCD" b="82 31 B9 34"/>
+  <a u="3BCE" b="82 31 B9 35"/>
+  <a u="3BCF" b="82 31 B9 36"/>
+  <a u="3BD0" b="82 31 B9 37"/>
+  <a u="3BD1" b="82 31 B9 38"/>
+  <a u="3BD2" b="82 31 B9 39"/>
+  <a u="3BD3" b="82 31 BA 30"/>
+  <a u="3BD4" b="82 31 BA 31"/>
+  <a u="3BD5" b="82 31 BA 32"/>
+  <a u="3BD6" b="82 31 BA 33"/>
+  <a u="3BD7" b="82 31 BA 34"/>
+  <a u="3BD8" b="82 31 BA 35"/>
+  <a u="3BD9" b="82 31 BA 36"/>
+  <a u="3BDA" b="82 31 BA 37"/>
+  <a u="3BDB" b="82 31 BA 38"/>
+  <a u="3BDC" b="82 31 BA 39"/>
+  <a u="3BDD" b="82 31 BB 30"/>
+  <a u="3BDE" b="82 31 BB 31"/>
+  <a u="3BDF" b="82 31 BB 32"/>
+  <a u="3BE0" b="82 31 BB 33"/>
+  <a u="3BE1" b="82 31 BB 34"/>
+  <a u="3BE2" b="82 31 BB 35"/>
+  <a u="3BE3" b="82 31 BB 36"/>
+  <a u="3BE4" b="82 31 BB 37"/>
+  <a u="3BE5" b="82 31 BB 38"/>
+  <a u="3BE6" b="82 31 BB 39"/>
+  <a u="3BE7" b="82 31 BC 30"/>
+  <a u="3BE8" b="82 31 BC 31"/>
+  <a u="3BE9" b="82 31 BC 32"/>
+  <a u="3BEA" b="82 31 BC 33"/>
+  <a u="3BEB" b="82 31 BC 34"/>
+  <a u="3BEC" b="82 31 BC 35"/>
+  <a u="3BED" b="82 31 BC 36"/>
+  <a u="3BEE" b="82 31 BC 37"/>
+  <a u="3BEF" b="82 31 BC 38"/>
+  <a u="3BF0" b="82 31 BC 39"/>
+  <a u="3BF1" b="82 31 BD 30"/>
+  <a u="3BF2" b="82 31 BD 31"/>
+  <a u="3BF3" b="82 31 BD 32"/>
+  <a u="3BF4" b="82 31 BD 33"/>
+  <a u="3BF5" b="82 31 BD 34"/>
+  <a u="3BF6" b="82 31 BD 35"/>
+  <a u="3BF7" b="82 31 BD 36"/>
+  <a u="3BF8" b="82 31 BD 37"/>
+  <a u="3BF9" b="82 31 BD 38"/>
+  <a u="3BFA" b="82 31 BD 39"/>
+  <a u="3BFB" b="82 31 BE 30"/>
+  <a u="3BFC" b="82 31 BE 31"/>
+  <a u="3BFD" b="82 31 BE 32"/>
+  <a u="3BFE" b="82 31 BE 33"/>
+  <a u="3BFF" b="82 31 BE 34"/>
+  <a u="3C00" b="82 31 BE 35"/>
+  <a u="3C01" b="82 31 BE 36"/>
+  <a u="3C02" b="82 31 BE 37"/>
+  <a u="3C03" b="82 31 BE 38"/>
+  <a u="3C04" b="82 31 BE 39"/>
+  <a u="3C05" b="82 31 BF 30"/>
+  <a u="3C06" b="82 31 BF 31"/>
+  <a u="3C07" b="82 31 BF 32"/>
+  <a u="3C08" b="82 31 BF 33"/>
+  <a u="3C09" b="82 31 BF 34"/>
+  <a u="3C0A" b="82 31 BF 35"/>
+  <a u="3C0B" b="82 31 BF 36"/>
+  <a u="3C0C" b="82 31 BF 37"/>
+  <a u="3C0D" b="82 31 BF 38"/>
+  <a u="3C0E" b="82 31 BF 39"/>
+  <a u="3C0F" b="82 31 C0 30"/>
+  <a u="3C10" b="82 31 C0 31"/>
+  <a u="3C11" b="82 31 C0 32"/>
+  <a u="3C12" b="82 31 C0 33"/>
+  <a u="3C13" b="82 31 C0 34"/>
+  <a u="3C14" b="82 31 C0 35"/>
+  <a u="3C15" b="82 31 C0 36"/>
+  <a u="3C16" b="82 31 C0 37"/>
+  <a u="3C17" b="82 31 C0 38"/>
+  <a u="3C18" b="82 31 C0 39"/>
+  <a u="3C19" b="82 31 C1 30"/>
+  <a u="3C1A" b="82 31 C1 31"/>
+  <a u="3C1B" b="82 31 C1 32"/>
+  <a u="3C1C" b="82 31 C1 33"/>
+  <a u="3C1D" b="82 31 C1 34"/>
+  <a u="3C1E" b="82 31 C1 35"/>
+  <a u="3C1F" b="82 31 C1 36"/>
+  <a u="3C20" b="82 31 C1 37"/>
+  <a u="3C21" b="82 31 C1 38"/>
+  <a u="3C22" b="82 31 C1 39"/>
+  <a u="3C23" b="82 31 C2 30"/>
+  <a u="3C24" b="82 31 C2 31"/>
+  <a u="3C25" b="82 31 C2 32"/>
+  <a u="3C26" b="82 31 C2 33"/>
+  <a u="3C27" b="82 31 C2 34"/>
+  <a u="3C28" b="82 31 C2 35"/>
+  <a u="3C29" b="82 31 C2 36"/>
+  <a u="3C2A" b="82 31 C2 37"/>
+  <a u="3C2B" b="82 31 C2 38"/>
+  <a u="3C2C" b="82 31 C2 39"/>
+  <a u="3C2D" b="82 31 C3 30"/>
+  <a u="3C2E" b="82 31 C3 31"/>
+  <a u="3C2F" b="82 31 C3 32"/>
+  <a u="3C30" b="82 31 C3 33"/>
+  <a u="3C31" b="82 31 C3 34"/>
+  <a u="3C32" b="82 31 C3 35"/>
+  <a u="3C33" b="82 31 C3 36"/>
+  <a u="3C34" b="82 31 C3 37"/>
+  <a u="3C35" b="82 31 C3 38"/>
+  <a u="3C36" b="82 31 C3 39"/>
+  <a u="3C37" b="82 31 C4 30"/>
+  <a u="3C38" b="82 31 C4 31"/>
+  <a u="3C39" b="82 31 C4 32"/>
+  <a u="3C3A" b="82 31 C4 33"/>
+  <a u="3C3B" b="82 31 C4 34"/>
+  <a u="3C3C" b="82 31 C4 35"/>
+  <a u="3C3D" b="82 31 C4 36"/>
+  <a u="3C3E" b="82 31 C4 37"/>
+  <a u="3C3F" b="82 31 C4 38"/>
+  <a u="3C40" b="82 31 C4 39"/>
+  <a u="3C41" b="82 31 C5 30"/>
+  <a u="3C42" b="82 31 C5 31"/>
+  <a u="3C43" b="82 31 C5 32"/>
+  <a u="3C44" b="82 31 C5 33"/>
+  <a u="3C45" b="82 31 C5 34"/>
+  <a u="3C46" b="82 31 C5 35"/>
+  <a u="3C47" b="82 31 C5 36"/>
+  <a u="3C48" b="82 31 C5 37"/>
+  <a u="3C49" b="82 31 C5 38"/>
+  <a u="3C4A" b="82 31 C5 39"/>
+  <a u="3C4B" b="82 31 C6 30"/>
+  <a u="3C4C" b="82 31 C6 31"/>
+  <a u="3C4D" b="82 31 C6 32"/>
+  <a u="3C4E" b="82 31 C6 33"/>
+  <a u="3C4F" b="82 31 C6 34"/>
+  <a u="3C50" b="82 31 C6 35"/>
+  <a u="3C51" b="82 31 C6 36"/>
+  <a u="3C52" b="82 31 C6 37"/>
+  <a u="3C53" b="82 31 C6 38"/>
+  <a u="3C54" b="82 31 C6 39"/>
+  <a u="3C55" b="82 31 C7 30"/>
+  <a u="3C56" b="82 31 C7 31"/>
+  <a u="3C57" b="82 31 C7 32"/>
+  <a u="3C58" b="82 31 C7 33"/>
+  <a u="3C59" b="82 31 C7 34"/>
+  <a u="3C5A" b="82 31 C7 35"/>
+  <a u="3C5B" b="82 31 C7 36"/>
+  <a u="3C5C" b="82 31 C7 37"/>
+  <a u="3C5D" b="82 31 C7 38"/>
+  <a u="3C5E" b="82 31 C7 39"/>
+  <a u="3C5F" b="82 31 C8 30"/>
+  <a u="3C60" b="82 31 C8 31"/>
+  <a u="3C61" b="82 31 C8 32"/>
+  <a u="3C62" b="82 31 C8 33"/>
+  <a u="3C63" b="82 31 C8 34"/>
+  <a u="3C64" b="82 31 C8 35"/>
+  <a u="3C65" b="82 31 C8 36"/>
+  <a u="3C66" b="82 31 C8 37"/>
+  <a u="3C67" b="82 31 C8 38"/>
+  <a u="3C68" b="82 31 C8 39"/>
+  <a u="3C69" b="82 31 C9 30"/>
+  <a u="3C6A" b="82 31 C9 31"/>
+  <a u="3C6B" b="82 31 C9 32"/>
+  <a u="3C6C" b="82 31 C9 33"/>
+  <a u="3C6D" b="82 31 C9 34"/>
+  <a u="3C6E" b="FE 69"/>
+  <a u="3C6F" b="82 31 C9 35"/>
+  <a u="3C70" b="82 31 C9 36"/>
+  <a u="3C71" b="82 31 C9 37"/>
+  <a u="3C72" b="82 31 C9 38"/>
+  <a u="3C73" b="82 31 C9 39"/>
+  <a u="3C74" b="82 31 CA 30"/>
+  <a u="3C75" b="82 31 CA 31"/>
+  <a u="3C76" b="82 31 CA 32"/>
+  <a u="3C77" b="82 31 CA 33"/>
+  <a u="3C78" b="82 31 CA 34"/>
+  <a u="3C79" b="82 31 CA 35"/>
+  <a u="3C7A" b="82 31 CA 36"/>
+  <a u="3C7B" b="82 31 CA 37"/>
+  <a u="3C7C" b="82 31 CA 38"/>
+  <a u="3C7D" b="82 31 CA 39"/>
+  <a u="3C7E" b="82 31 CB 30"/>
+  <a u="3C7F" b="82 31 CB 31"/>
+  <a u="3C80" b="82 31 CB 32"/>
+  <a u="3C81" b="82 31 CB 33"/>
+  <a u="3C82" b="82 31 CB 34"/>
+  <a u="3C83" b="82 31 CB 35"/>
+  <a u="3C84" b="82 31 CB 36"/>
+  <a u="3C85" b="82 31 CB 37"/>
+  <a u="3C86" b="82 31 CB 38"/>
+  <a u="3C87" b="82 31 CB 39"/>
+  <a u="3C88" b="82 31 CC 30"/>
+  <a u="3C89" b="82 31 CC 31"/>
+  <a u="3C8A" b="82 31 CC 32"/>
+  <a u="3C8B" b="82 31 CC 33"/>
+  <a u="3C8C" b="82 31 CC 34"/>
+  <a u="3C8D" b="82 31 CC 35"/>
+  <a u="3C8E" b="82 31 CC 36"/>
+  <a u="3C8F" b="82 31 CC 37"/>
+  <a u="3C90" b="82 31 CC 38"/>
+  <a u="3C91" b="82 31 CC 39"/>
+  <a u="3C92" b="82 31 CD 30"/>
+  <a u="3C93" b="82 31 CD 31"/>
+  <a u="3C94" b="82 31 CD 32"/>
+  <a u="3C95" b="82 31 CD 33"/>
+  <a u="3C96" b="82 31 CD 34"/>
+  <a u="3C97" b="82 31 CD 35"/>
+  <a u="3C98" b="82 31 CD 36"/>
+  <a u="3C99" b="82 31 CD 37"/>
+  <a u="3C9A" b="82 31 CD 38"/>
+  <a u="3C9B" b="82 31 CD 39"/>
+  <a u="3C9C" b="82 31 CE 30"/>
+  <a u="3C9D" b="82 31 CE 31"/>
+  <a u="3C9E" b="82 31 CE 32"/>
+  <a u="3C9F" b="82 31 CE 33"/>
+  <a u="3CA0" b="82 31 CE 34"/>
+  <a u="3CA1" b="82 31 CE 35"/>
+  <a u="3CA2" b="82 31 CE 36"/>
+  <a u="3CA3" b="82 31 CE 37"/>
+  <a u="3CA4" b="82 31 CE 38"/>
+  <a u="3CA5" b="82 31 CE 39"/>
+  <a u="3CA6" b="82 31 CF 30"/>
+  <a u="3CA7" b="82 31 CF 31"/>
+  <a u="3CA8" b="82 31 CF 32"/>
+  <a u="3CA9" b="82 31 CF 33"/>
+  <a u="3CAA" b="82 31 CF 34"/>
+  <a u="3CAB" b="82 31 CF 35"/>
+  <a u="3CAC" b="82 31 CF 36"/>
+  <a u="3CAD" b="82 31 CF 37"/>
+  <a u="3CAE" b="82 31 CF 38"/>
+  <a u="3CAF" b="82 31 CF 39"/>
+  <a u="3CB0" b="82 31 D0 30"/>
+  <a u="3CB1" b="82 31 D0 31"/>
+  <a u="3CB2" b="82 31 D0 32"/>
+  <a u="3CB3" b="82 31 D0 33"/>
+  <a u="3CB4" b="82 31 D0 34"/>
+  <a u="3CB5" b="82 31 D0 35"/>
+  <a u="3CB6" b="82 31 D0 36"/>
+  <a u="3CB7" b="82 31 D0 37"/>
+  <a u="3CB8" b="82 31 D0 38"/>
+  <a u="3CB9" b="82 31 D0 39"/>
+  <a u="3CBA" b="82 31 D1 30"/>
+  <a u="3CBB" b="82 31 D1 31"/>
+  <a u="3CBC" b="82 31 D1 32"/>
+  <a u="3CBD" b="82 31 D1 33"/>
+  <a u="3CBE" b="82 31 D1 34"/>
+  <a u="3CBF" b="82 31 D1 35"/>
+  <a u="3CC0" b="82 31 D1 36"/>
+  <a u="3CC1" b="82 31 D1 37"/>
+  <a u="3CC2" b="82 31 D1 38"/>
+  <a u="3CC3" b="82 31 D1 39"/>
+  <a u="3CC4" b="82 31 D2 30"/>
+  <a u="3CC5" b="82 31 D2 31"/>
+  <a u="3CC6" b="82 31 D2 32"/>
+  <a u="3CC7" b="82 31 D2 33"/>
+  <a u="3CC8" b="82 31 D2 34"/>
+  <a u="3CC9" b="82 31 D2 35"/>
+  <a u="3CCA" b="82 31 D2 36"/>
+  <a u="3CCB" b="82 31 D2 37"/>
+  <a u="3CCC" b="82 31 D2 38"/>
+  <a u="3CCD" b="82 31 D2 39"/>
+  <a u="3CCE" b="82 31 D3 30"/>
+  <a u="3CCF" b="82 31 D3 31"/>
+  <a u="3CD0" b="82 31 D3 32"/>
+  <a u="3CD1" b="82 31 D3 33"/>
+  <a u="3CD2" b="82 31 D3 34"/>
+  <a u="3CD3" b="82 31 D3 35"/>
+  <a u="3CD4" b="82 31 D3 36"/>
+  <a u="3CD5" b="82 31 D3 37"/>
+  <a u="3CD6" b="82 31 D3 38"/>
+  <a u="3CD7" b="82 31 D3 39"/>
+  <a u="3CD8" b="82 31 D4 30"/>
+  <a u="3CD9" b="82 31 D4 31"/>
+  <a u="3CDA" b="82 31 D4 32"/>
+  <a u="3CDB" b="82 31 D4 33"/>
+  <a u="3CDC" b="82 31 D4 34"/>
+  <a u="3CDD" b="82 31 D4 35"/>
+  <a u="3CDE" b="82 31 D4 36"/>
+  <a u="3CDF" b="82 31 D4 37"/>
+  <a u="3CE0" b="FE 6A"/>
+  <a u="4056" b="FE 6F"/>
+  <a u="4057" b="82 32 AF 33"/>
+  <a u="4058" b="82 32 AF 34"/>
+  <a u="4059" b="82 32 AF 35"/>
+  <a u="405A" b="82 32 AF 36"/>
+  <a u="405B" b="82 32 AF 37"/>
+  <a u="405C" b="82 32 AF 38"/>
+  <a u="405D" b="82 32 AF 39"/>
+  <a u="405E" b="82 32 B0 30"/>
+  <a u="405F" b="82 32 B0 31"/>
+  <a u="4060" b="82 32 B0 32"/>
+  <a u="4061" b="82 32 B0 33"/>
+  <a u="4062" b="82 32 B0 34"/>
+  <a u="4063" b="82 32 B0 35"/>
+  <a u="4064" b="82 32 B0 36"/>
+  <a u="4065" b="82 32 B0 37"/>
+  <a u="4066" b="82 32 B0 38"/>
+  <a u="4067" b="82 32 B0 39"/>
+  <a u="4068" b="82 32 B1 30"/>
+  <a u="4069" b="82 32 B1 31"/>
+  <a u="406A" b="82 32 B1 32"/>
+  <a u="406B" b="82 32 B1 33"/>
+  <a u="406C" b="82 32 B1 34"/>
+  <a u="406D" b="82 32 B1 35"/>
+  <a u="406E" b="82 32 B1 36"/>
+  <a u="406F" b="82 32 B1 37"/>
+  <a u="4070" b="82 32 B1 38"/>
+  <a u="4071" b="82 32 B1 39"/>
+  <a u="4072" b="82 32 B2 30"/>
+  <a u="4073" b="82 32 B2 31"/>
+  <a u="4074" b="82 32 B2 32"/>
+  <a u="4075" b="82 32 B2 33"/>
+  <a u="4076" b="82 32 B2 34"/>
+  <a u="4077" b="82 32 B2 35"/>
+  <a u="4078" b="82 32 B2 36"/>
+  <a u="4079" b="82 32 B2 37"/>
+  <a u="407A" b="82 32 B2 38"/>
+  <a u="407B" b="82 32 B2 39"/>
+  <a u="407C" b="82 32 B3 30"/>
+  <a u="407D" b="82 32 B3 31"/>
+  <a u="407E" b="82 32 B3 32"/>
+  <a u="407F" b="82 32 B3 33"/>
+  <a u="4080" b="82 32 B3 34"/>
+  <a u="4081" b="82 32 B3 35"/>
+  <a u="4082" b="82 32 B3 36"/>
+  <a u="4083" b="82 32 B3 37"/>
+  <a u="4084" b="82 32 B3 38"/>
+  <a u="4085" b="82 32 B3 39"/>
+  <a u="4086" b="82 32 B4 30"/>
+  <a u="4087" b="82 32 B4 31"/>
+  <a u="4088" b="82 32 B4 32"/>
+  <a u="4089" b="82 32 B4 33"/>
+  <a u="408A" b="82 32 B4 34"/>
+  <a u="408B" b="82 32 B4 35"/>
+  <a u="408C" b="82 32 B4 36"/>
+  <a u="408D" b="82 32 B4 37"/>
+  <a u="408E" b="82 32 B4 38"/>
+  <a u="408F" b="82 32 B4 39"/>
+  <a u="4090" b="82 32 B5 30"/>
+  <a u="4091" b="82 32 B5 31"/>
+  <a u="4092" b="82 32 B5 32"/>
+  <a u="4093" b="82 32 B5 33"/>
+  <a u="4094" b="82 32 B5 34"/>
+  <a u="4095" b="82 32 B5 35"/>
+  <a u="4096" b="82 32 B5 36"/>
+  <a u="4097" b="82 32 B5 37"/>
+  <a u="4098" b="82 32 B5 38"/>
+  <a u="4099" b="82 32 B5 39"/>
+  <a u="409A" b="82 32 B6 30"/>
+  <a u="409B" b="82 32 B6 31"/>
+  <a u="409C" b="82 32 B6 32"/>
+  <a u="409D" b="82 32 B6 33"/>
+  <a u="409E" b="82 32 B6 34"/>
+  <a u="409F" b="82 32 B6 35"/>
+  <a u="40A0" b="82 32 B6 36"/>
+  <a u="40A1" b="82 32 B6 37"/>
+  <a u="40A2" b="82 32 B6 38"/>
+  <a u="40A3" b="82 32 B6 39"/>
+  <a u="40A4" b="82 32 B7 30"/>
+  <a u="40A5" b="82 32 B7 31"/>
+  <a u="40A6" b="82 32 B7 32"/>
+  <a u="40A7" b="82 32 B7 33"/>
+  <a u="40A8" b="82 32 B7 34"/>
+  <a u="40A9" b="82 32 B7 35"/>
+  <a u="40AA" b="82 32 B7 36"/>
+  <a u="40AB" b="82 32 B7 37"/>
+  <a u="40AC" b="82 32 B7 38"/>
+  <a u="40AD" b="82 32 B7 39"/>
+  <a u="40AE" b="82 32 B8 30"/>
+  <a u="40AF" b="82 32 B8 31"/>
+  <a u="40B0" b="82 32 B8 32"/>
+  <a u="40B1" b="82 32 B8 33"/>
+  <a u="40B2" b="82 32 B8 34"/>
+  <a u="40B3" b="82 32 B8 35"/>
+  <a u="40B4" b="82 32 B8 36"/>
+  <a u="40B5" b="82 32 B8 37"/>
+  <a u="40B6" b="82 32 B8 38"/>
+  <a u="40B7" b="82 32 B8 39"/>
+  <a u="40B8" b="82 32 B9 30"/>
+  <a u="40B9" b="82 32 B9 31"/>
+  <a u="40BA" b="82 32 B9 32"/>
+  <a u="40BB" b="82 32 B9 33"/>
+  <a u="40BC" b="82 32 B9 34"/>
+  <a u="40BD" b="82 32 B9 35"/>
+  <a u="40BE" b="82 32 B9 36"/>
+  <a u="40BF" b="82 32 B9 37"/>
+  <a u="40C0" b="82 32 B9 38"/>
+  <a u="40C1" b="82 32 B9 39"/>
+  <a u="40C2" b="82 32 BA 30"/>
+  <a u="40C3" b="82 32 BA 31"/>
+  <a u="40C4" b="82 32 BA 32"/>
+  <a u="40C5" b="82 32 BA 33"/>
+  <a u="40C6" b="82 32 BA 34"/>
+  <a u="40C7" b="82 32 BA 35"/>
+  <a u="40C8" b="82 32 BA 36"/>
+  <a u="40C9" b="82 32 BA 37"/>
+  <a u="40CA" b="82 32 BA 38"/>
+  <a u="40CB" b="82 32 BA 39"/>
+  <a u="40CC" b="82 32 BB 30"/>
+  <a u="40CD" b="82 32 BB 31"/>
+  <a u="40CE" b="82 32 BB 32"/>
+  <a u="40CF" b="82 32 BB 33"/>
+  <a u="40D0" b="82 32 BB 34"/>
+  <a u="40D1" b="82 32 BB 35"/>
+  <a u="40D2" b="82 32 BB 36"/>
+  <a u="40D3" b="82 32 BB 37"/>
+  <a u="40D4" b="82 32 BB 38"/>
+  <a u="40D5" b="82 32 BB 39"/>
+  <a u="40D6" b="82 32 BC 30"/>
+  <a u="40D7" b="82 32 BC 31"/>
+  <a u="40D8" b="82 32 BC 32"/>
+  <a u="40D9" b="82 32 BC 33"/>
+  <a u="40DA" b="82 32 BC 34"/>
+  <a u="40DB" b="82 32 BC 35"/>
+  <a u="40DC" b="82 32 BC 36"/>
+  <a u="40DD" b="82 32 BC 37"/>
+  <a u="40DE" b="82 32 BC 38"/>
+  <a u="40DF" b="82 32 BC 39"/>
+  <a u="40E0" b="82 32 BD 30"/>
+  <a u="40E1" b="82 32 BD 31"/>
+  <a u="40E2" b="82 32 BD 32"/>
+  <a u="40E3" b="82 32 BD 33"/>
+  <a u="40E4" b="82 32 BD 34"/>
+  <a u="40E5" b="82 32 BD 35"/>
+  <a u="40E6" b="82 32 BD 36"/>
+  <a u="40E7" b="82 32 BD 37"/>
+  <a u="40E8" b="82 32 BD 38"/>
+  <a u="40E9" b="82 32 BD 39"/>
+  <a u="40EA" b="82 32 BE 30"/>
+  <a u="40EB" b="82 32 BE 31"/>
+  <a u="40EC" b="82 32 BE 32"/>
+  <a u="40ED" b="82 32 BE 33"/>
+  <a u="40EE" b="82 32 BE 34"/>
+  <a u="40EF" b="82 32 BE 35"/>
+  <a u="40F0" b="82 32 BE 36"/>
+  <a u="40F1" b="82 32 BE 37"/>
+  <a u="40F2" b="82 32 BE 38"/>
+  <a u="40F3" b="82 32 BE 39"/>
+  <a u="40F4" b="82 32 BF 30"/>
+  <a u="40F5" b="82 32 BF 31"/>
+  <a u="40F6" b="82 32 BF 32"/>
+  <a u="40F7" b="82 32 BF 33"/>
+  <a u="40F8" b="82 32 BF 34"/>
+  <a u="40F9" b="82 32 BF 35"/>
+  <a u="40FA" b="82 32 BF 36"/>
+  <a u="40FB" b="82 32 BF 37"/>
+  <a u="40FC" b="82 32 BF 38"/>
+  <a u="40FD" b="82 32 BF 39"/>
+  <a u="40FE" b="82 32 C0 30"/>
+  <a u="40FF" b="82 32 C0 31"/>
+  <a u="4100" b="82 32 C0 32"/>
+  <a u="4101" b="82 32 C0 33"/>
+  <a u="4102" b="82 32 C0 34"/>
+  <a u="4103" b="82 32 C0 35"/>
+  <a u="4104" b="82 32 C0 36"/>
+  <a u="4105" b="82 32 C0 37"/>
+  <a u="4106" b="82 32 C0 38"/>
+  <a u="4107" b="82 32 C0 39"/>
+  <a u="4108" b="82 32 C1 30"/>
+  <a u="4109" b="82 32 C1 31"/>
+  <a u="410A" b="82 32 C1 32"/>
+  <a u="410B" b="82 32 C1 33"/>
+  <a u="410C" b="82 32 C1 34"/>
+  <a u="410D" b="82 32 C1 35"/>
+  <a u="410E" b="82 32 C1 36"/>
+  <a u="410F" b="82 32 C1 37"/>
+  <a u="4110" b="82 32 C1 38"/>
+  <a u="4111" b="82 32 C1 39"/>
+  <a u="4112" b="82 32 C2 30"/>
+  <a u="4113" b="82 32 C2 31"/>
+  <a u="4114" b="82 32 C2 32"/>
+  <a u="4115" b="82 32 C2 33"/>
+  <a u="4116" b="82 32 C2 34"/>
+  <a u="4117" b="82 32 C2 35"/>
+  <a u="4118" b="82 32 C2 36"/>
+  <a u="4119" b="82 32 C2 37"/>
+  <a u="411A" b="82 32 C2 38"/>
+  <a u="411B" b="82 32 C2 39"/>
+  <a u="411C" b="82 32 C3 30"/>
+  <a u="411D" b="82 32 C3 31"/>
+  <a u="411E" b="82 32 C3 32"/>
+  <a u="411F" b="82 32 C3 33"/>
+  <a u="4120" b="82 32 C3 34"/>
+  <a u="4121" b="82 32 C3 35"/>
+  <a u="4122" b="82 32 C3 36"/>
+  <a u="4123" b="82 32 C3 37"/>
+  <a u="4124" b="82 32 C3 38"/>
+  <a u="4125" b="82 32 C3 39"/>
+  <a u="4126" b="82 32 C4 30"/>
+  <a u="4127" b="82 32 C4 31"/>
+  <a u="4128" b="82 32 C4 32"/>
+  <a u="4129" b="82 32 C4 33"/>
+  <a u="412A" b="82 32 C4 34"/>
+  <a u="412B" b="82 32 C4 35"/>
+  <a u="412C" b="82 32 C4 36"/>
+  <a u="412D" b="82 32 C4 37"/>
+  <a u="412E" b="82 32 C4 38"/>
+  <a u="412F" b="82 32 C4 39"/>
+  <a u="4130" b="82 32 C5 30"/>
+  <a u="4131" b="82 32 C5 31"/>
+  <a u="4132" b="82 32 C5 32"/>
+  <a u="4133" b="82 32 C5 33"/>
+  <a u="4134" b="82 32 C5 34"/>
+  <a u="4135" b="82 32 C5 35"/>
+  <a u="4136" b="82 32 C5 36"/>
+  <a u="4137" b="82 32 C5 37"/>
+  <a u="4138" b="82 32 C5 38"/>
+  <a u="4139" b="82 32 C5 39"/>
+  <a u="413A" b="82 32 C6 30"/>
+  <a u="413B" b="82 32 C6 31"/>
+  <a u="413C" b="82 32 C6 32"/>
+  <a u="413D" b="82 32 C6 33"/>
+  <a u="413E" b="82 32 C6 34"/>
+  <a u="413F" b="82 32 C6 35"/>
+  <a u="4140" b="82 32 C6 36"/>
+  <a u="4141" b="82 32 C6 37"/>
+  <a u="4142" b="82 32 C6 38"/>
+  <a u="4143" b="82 32 C6 39"/>
+  <a u="4144" b="82 32 C7 30"/>
+  <a u="4145" b="82 32 C7 31"/>
+  <a u="4146" b="82 32 C7 32"/>
+  <a u="4147" b="82 32 C7 33"/>
+  <a u="4148" b="82 32 C7 34"/>
+  <a u="4149" b="82 32 C7 35"/>
+  <a u="414A" b="82 32 C7 36"/>
+  <a u="414B" b="82 32 C7 37"/>
+  <a u="414C" b="82 32 C7 38"/>
+  <a u="414D" b="82 32 C7 39"/>
+  <a u="414E" b="82 32 C8 30"/>
+  <a u="414F" b="82 32 C8 31"/>
+  <a u="4150" b="82 32 C8 32"/>
+  <a u="4151" b="82 32 C8 33"/>
+  <a u="4152" b="82 32 C8 34"/>
+  <a u="4153" b="82 32 C8 35"/>
+  <a u="4154" b="82 32 C8 36"/>
+  <a u="4155" b="82 32 C8 37"/>
+  <a u="4156" b="82 32 C8 38"/>
+  <a u="4157" b="82 32 C8 39"/>
+  <a u="4158" b="82 32 C9 30"/>
+  <a u="4159" b="82 32 C9 31"/>
+  <a u="415A" b="82 32 C9 32"/>
+  <a u="415B" b="82 32 C9 33"/>
+  <a u="415C" b="82 32 C9 34"/>
+  <a u="415D" b="82 32 C9 35"/>
+  <a u="415E" b="82 32 C9 36"/>
+  <a u="415F" b="FE 70"/>
+  <a u="4337" b="FE 72"/>
+  <a u="4338" b="82 32 F8 38"/>
+  <a u="4339" b="82 32 F8 39"/>
+  <a u="433A" b="82 32 F9 30"/>
+  <a u="433B" b="82 32 F9 31"/>
+  <a u="433C" b="82 32 F9 32"/>
+  <a u="433D" b="82 32 F9 33"/>
+  <a u="433E" b="82 32 F9 34"/>
+  <a u="433F" b="82 32 F9 35"/>
+  <a u="4340" b="82 32 F9 36"/>
+  <a u="4341" b="82 32 F9 37"/>
+  <a u="4342" b="82 32 F9 38"/>
+  <a u="4343" b="82 32 F9 39"/>
+  <a u="4344" b="82 32 FA 30"/>
+  <a u="4345" b="82 32 FA 31"/>
+  <a u="4346" b="82 32 FA 32"/>
+  <a u="4347" b="82 32 FA 33"/>
+  <a u="4348" b="82 32 FA 34"/>
+  <a u="4349" b="82 32 FA 35"/>
+  <a u="434A" b="82 32 FA 36"/>
+  <a u="434B" b="82 32 FA 37"/>
+  <a u="434C" b="82 32 FA 38"/>
+  <a u="434D" b="82 32 FA 39"/>
+  <a u="434E" b="82 32 FB 30"/>
+  <a u="434F" b="82 32 FB 31"/>
+  <a u="4350" b="82 32 FB 32"/>
+  <a u="4351" b="82 32 FB 33"/>
+  <a u="4352" b="82 32 FB 34"/>
+  <a u="4353" b="82 32 FB 35"/>
+  <a u="4354" b="82 32 FB 36"/>
+  <a u="4355" b="82 32 FB 37"/>
+  <a u="4356" b="82 32 FB 38"/>
+  <a u="4357" b="82 32 FB 39"/>
+  <a u="4358" b="82 32 FC 30"/>
+  <a u="4359" b="82 32 FC 31"/>
+  <a u="435A" b="82 32 FC 32"/>
+  <a u="435B" b="82 32 FC 33"/>
+  <a u="435C" b="82 32 FC 34"/>
+  <a u="435D" b="82 32 FC 35"/>
+  <a u="435E" b="82 32 FC 36"/>
+  <a u="435F" b="82 32 FC 37"/>
+  <a u="4360" b="82 32 FC 38"/>
+  <a u="4361" b="82 32 FC 39"/>
+  <a u="4362" b="82 32 FD 30"/>
+  <a u="4363" b="82 32 FD 31"/>
+  <a u="4364" b="82 32 FD 32"/>
+  <a u="4365" b="82 32 FD 33"/>
+  <a u="4366" b="82 32 FD 34"/>
+  <a u="4367" b="82 32 FD 35"/>
+  <a u="4368" b="82 32 FD 36"/>
+  <a u="4369" b="82 32 FD 37"/>
+  <a u="436A" b="82 32 FD 38"/>
+  <a u="436B" b="82 32 FD 39"/>
+  <a u="436C" b="82 32 FE 30"/>
+  <a u="436D" b="82 32 FE 31"/>
+  <a u="436E" b="82 32 FE 32"/>
+  <a u="436F" b="82 32 FE 33"/>
+  <a u="4370" b="82 32 FE 34"/>
+  <a u="4371" b="82 32 FE 35"/>
+  <a u="4372" b="82 32 FE 36"/>
+  <a u="4373" b="82 32 FE 37"/>
+  <a u="4374" b="82 32 FE 38"/>
+  <a u="4375" b="82 32 FE 39"/>
+  <a u="4376" b="82 33 81 30"/>
+  <a u="4377" b="82 33 81 31"/>
+  <a u="4378" b="82 33 81 32"/>
+  <a u="4379" b="82 33 81 33"/>
+  <a u="437A" b="82 33 81 34"/>
+  <a u="437B" b="82 33 81 35"/>
+  <a u="437C" b="82 33 81 36"/>
+  <a u="437D" b="82 33 81 37"/>
+  <a u="437E" b="82 33 81 38"/>
+  <a u="437F" b="82 33 81 39"/>
+  <a u="4380" b="82 33 82 30"/>
+  <a u="4381" b="82 33 82 31"/>
+  <a u="4382" b="82 33 82 32"/>
+  <a u="4383" b="82 33 82 33"/>
+  <a u="4384" b="82 33 82 34"/>
+  <a u="4385" b="82 33 82 35"/>
+  <a u="4386" b="82 33 82 36"/>
+  <a u="4387" b="82 33 82 37"/>
+  <a u="4388" b="82 33 82 38"/>
+  <a u="4389" b="82 33 82 39"/>
+  <a u="438A" b="82 33 83 30"/>
+  <a u="438B" b="82 33 83 31"/>
+  <a u="438C" b="82 33 83 32"/>
+  <a u="438D" b="82 33 83 33"/>
+  <a u="438E" b="82 33 83 34"/>
+  <a u="438F" b="82 33 83 35"/>
+  <a u="4390" b="82 33 83 36"/>
+  <a u="4391" b="82 33 83 37"/>
+  <a u="4392" b="82 33 83 38"/>
+  <a u="4393" b="82 33 83 39"/>
+  <a u="4394" b="82 33 84 30"/>
+  <a u="4395" b="82 33 84 31"/>
+  <a u="4396" b="82 33 84 32"/>
+  <a u="4397" b="82 33 84 33"/>
+  <a u="4398" b="82 33 84 34"/>
+  <a u="4399" b="82 33 84 35"/>
+  <a u="439A" b="82 33 84 36"/>
+  <a u="439B" b="82 33 84 37"/>
+  <a u="439C" b="82 33 84 38"/>
+  <a u="439D" b="82 33 84 39"/>
+  <a u="439E" b="82 33 85 30"/>
+  <a u="439F" b="82 33 85 31"/>
+  <a u="43A0" b="82 33 85 32"/>
+  <a u="43A1" b="82 33 85 33"/>
+  <a u="43A2" b="82 33 85 34"/>
+  <a u="43A3" b="82 33 85 35"/>
+  <a u="43A4" b="82 33 85 36"/>
+  <a u="43A5" b="82 33 85 37"/>
+  <a u="43A6" b="82 33 85 38"/>
+  <a u="43A7" b="82 33 85 39"/>
+  <a u="43A8" b="82 33 86 30"/>
+  <a u="43A9" b="82 33 86 31"/>
+  <a u="43AA" b="82 33 86 32"/>
+  <a u="43AB" b="82 33 86 33"/>
+  <a u="43AC" b="FE 78"/>
+  <a u="43AD" b="82 33 86 34"/>
+  <a u="43AE" b="82 33 86 35"/>
+  <a u="43AF" b="82 33 86 36"/>
+  <a u="43B0" b="82 33 86 37"/>
+  <a u="43B1" b="FE 77"/>
+  <a u="43B2" b="82 33 86 38"/>
+  <a u="43B3" b="82 33 86 39"/>
+  <a u="43B4" b="82 33 87 30"/>
+  <a u="43B5" b="82 33 87 31"/>
+  <a u="43B6" b="82 33 87 32"/>
+  <a u="43B7" b="82 33 87 33"/>
+  <a u="43B8" b="82 33 87 34"/>
+  <a u="43B9" b="82 33 87 35"/>
+  <a u="43BA" b="82 33 87 36"/>
+  <a u="43BB" b="82 33 87 37"/>
+  <a u="43BC" b="82 33 87 38"/>
+  <a u="43BD" b="82 33 87 39"/>
+  <a u="43BE" b="82 33 88 30"/>
+  <a u="43BF" b="82 33 88 31"/>
+  <a u="43C0" b="82 33 88 32"/>
+  <a u="43C1" b="82 33 88 33"/>
+  <a u="43C2" b="82 33 88 34"/>
+  <a u="43C3" b="82 33 88 35"/>
+  <a u="43C4" b="82 33 88 36"/>
+  <a u="43C5" b="82 33 88 37"/>
+  <a u="43C6" b="82 33 88 38"/>
+  <a u="43C7" b="82 33 88 39"/>
+  <a u="43C8" b="82 33 89 30"/>
+  <a u="43C9" b="82 33 89 31"/>
+  <a u="43CA" b="82 33 89 32"/>
+  <a u="43CB" b="82 33 89 33"/>
+  <a u="43CC" b="82 33 89 34"/>
+  <a u="43CD" b="82 33 89 35"/>
+  <a u="43CE" b="82 33 89 36"/>
+  <a u="43CF" b="82 33 89 37"/>
+  <a u="43D0" b="82 33 89 38"/>
+  <a u="43D1" b="82 33 89 39"/>
+  <a u="43D2" b="82 33 8A 30"/>
+  <a u="43D3" b="82 33 8A 31"/>
+  <a u="43D4" b="82 33 8A 32"/>
+  <a u="43D5" b="82 33 8A 33"/>
+  <a u="43D6" b="82 33 8A 34"/>
+  <a u="43D7" b="82 33 8A 35"/>
+  <a u="43D8" b="82 33 8A 36"/>
+  <a u="43D9" b="82 33 8A 37"/>
+  <a u="43DA" b="82 33 8A 38"/>
+  <a u="43DB" b="82 33 8A 39"/>
+  <a u="43DC" b="82 33 8B 30"/>
+  <a u="43DD" b="FE 7A"/>
+  <a u="43DE" b="82 33 8B 31"/>
+  <a u="43DF" b="82 33 8B 32"/>
+  <a u="43E0" b="82 33 8B 33"/>
+  <a u="43E1" b="82 33 8B 34"/>
+  <a u="43E2" b="82 33 8B 35"/>
+  <a u="43E3" b="82 33 8B 36"/>
+  <a u="43E4" b="82 33 8B 37"/>
+  <a u="43E5" b="82 33 8B 38"/>
+  <a u="43E6" b="82 33 8B 39"/>
+  <a u="43E7" b="82 33 8C 30"/>
+  <a u="43E8" b="82 33 8C 31"/>
+  <a u="43E9" b="82 33 8C 32"/>
+  <a u="43EA" b="82 33 8C 33"/>
+  <a u="43EB" b="82 33 8C 34"/>
+  <a u="43EC" b="82 33 8C 35"/>
+  <a u="43ED" b="82 33 8C 36"/>
+  <a u="43EE" b="82 33 8C 37"/>
+  <a u="43EF" b="82 33 8C 38"/>
+  <a u="43F0" b="82 33 8C 39"/>
+  <a u="43F1" b="82 33 8D 30"/>
+  <a u="43F2" b="82 33 8D 31"/>
+  <a u="43F3" b="82 33 8D 32"/>
+  <a u="43F4" b="82 33 8D 33"/>
+  <a u="43F5" b="82 33 8D 34"/>
+  <a u="43F6" b="82 33 8D 35"/>
+  <a u="43F7" b="82 33 8D 36"/>
+  <a u="43F8" b="82 33 8D 37"/>
+  <a u="43F9" b="82 33 8D 38"/>
+  <a u="43FA" b="82 33 8D 39"/>
+  <a u="43FB" b="82 33 8E 30"/>
+  <a u="43FC" b="82 33 8E 31"/>
+  <a u="43FD" b="82 33 8E 32"/>
+  <a u="43FE" b="82 33 8E 33"/>
+  <a u="43FF" b="82 33 8E 34"/>
+  <a u="4400" b="82 33 8E 35"/>
+  <a u="4401" b="82 33 8E 36"/>
+  <a u="4402" b="82 33 8E 37"/>
+  <a u="4403" b="82 33 8E 38"/>
+  <a u="4404" b="82 33 8E 39"/>
+  <a u="4405" b="82 33 8F 30"/>
+  <a u="4406" b="82 33 8F 31"/>
+  <a u="4407" b="82 33 8F 32"/>
+  <a u="4408" b="82 33 8F 33"/>
+  <a u="4409" b="82 33 8F 34"/>
+  <a u="440A" b="82 33 8F 35"/>
+  <a u="440B" b="82 33 8F 36"/>
+  <a u="440C" b="82 33 8F 37"/>
+  <a u="440D" b="82 33 8F 38"/>
+  <a u="440E" b="82 33 8F 39"/>
+  <a u="440F" b="82 33 90 30"/>
+  <a u="4410" b="82 33 90 31"/>
+  <a u="4411" b="82 33 90 32"/>
+  <a u="4412" b="82 33 90 33"/>
+  <a u="4413" b="82 33 90 34"/>
+  <a u="4414" b="82 33 90 35"/>
+  <a u="4415" b="82 33 90 36"/>
+  <a u="4416" b="82 33 90 37"/>
+  <a u="4417" b="82 33 90 38"/>
+  <a u="4418" b="82 33 90 39"/>
+  <a u="4419" b="82 33 91 30"/>
+  <a u="441A" b="82 33 91 31"/>
+  <a u="441B" b="82 33 91 32"/>
+  <a u="441C" b="82 33 91 33"/>
+  <a u="441D" b="82 33 91 34"/>
+  <a u="441E" b="82 33 91 35"/>
+  <a u="441F" b="82 33 91 36"/>
+  <a u="4420" b="82 33 91 37"/>
+  <a u="4421" b="82 33 91 38"/>
+  <a u="4422" b="82 33 91 39"/>
+  <a u="4423" b="82 33 92 30"/>
+  <a u="4424" b="82 33 92 31"/>
+  <a u="4425" b="82 33 92 32"/>
+  <a u="4426" b="82 33 92 33"/>
+  <a u="4427" b="82 33 92 34"/>
+  <a u="4428" b="82 33 92 35"/>
+  <a u="4429" b="82 33 92 36"/>
+  <a u="442A" b="82 33 92 37"/>
+  <a u="442B" b="82 33 92 38"/>
+  <a u="442C" b="82 33 92 39"/>
+  <a u="442D" b="82 33 93 30"/>
+  <a u="442E" b="82 33 93 31"/>
+  <a u="442F" b="82 33 93 32"/>
+  <a u="4430" b="82 33 93 33"/>
+  <a u="4431" b="82 33 93 34"/>
+  <a u="4432" b="82 33 93 35"/>
+  <a u="4433" b="82 33 93 36"/>
+  <a u="4434" b="82 33 93 37"/>
+  <a u="4435" b="82 33 93 38"/>
+  <a u="4436" b="82 33 93 39"/>
+  <a u="4437" b="82 33 94 30"/>
+  <a u="4438" b="82 33 94 31"/>
+  <a u="4439" b="82 33 94 32"/>
+  <a u="443A" b="82 33 94 33"/>
+  <a u="443B" b="82 33 94 34"/>
+  <a u="443C" b="82 33 94 35"/>
+  <a u="443D" b="82 33 94 36"/>
+  <a u="443E" b="82 33 94 37"/>
+  <a u="443F" b="82 33 94 38"/>
+  <a u="4440" b="82 33 94 39"/>
+  <a u="4441" b="82 33 95 30"/>
+  <a u="4442" b="82 33 95 31"/>
+  <a u="4443" b="82 33 95 32"/>
+  <a u="4444" b="82 33 95 33"/>
+  <a u="4445" b="82 33 95 34"/>
+  <a u="4446" b="82 33 95 35"/>
+  <a u="4447" b="82 33 95 36"/>
+  <a u="4448" b="82 33 95 37"/>
+  <a u="4449" b="82 33 95 38"/>
+  <a u="444A" b="82 33 95 39"/>
+  <a u="444B" b="82 33 96 30"/>
+  <a u="444C" b="82 33 96 31"/>
+  <a u="444D" b="82 33 96 32"/>
+  <a u="444E" b="82 33 96 33"/>
+  <a u="444F" b="82 33 96 34"/>
+  <a u="4450" b="82 33 96 35"/>
+  <a u="4451" b="82 33 96 36"/>
+  <a u="4452" b="82 33 96 37"/>
+  <a u="4453" b="82 33 96 38"/>
+  <a u="4454" b="82 33 96 39"/>
+  <a u="4455" b="82 33 97 30"/>
+  <a u="4456" b="82 33 97 31"/>
+  <a u="4457" b="82 33 97 32"/>
+  <a u="4458" b="82 33 97 33"/>
+  <a u="4459" b="82 33 97 34"/>
+  <a u="445A" b="82 33 97 35"/>
+  <a u="445B" b="82 33 97 36"/>
+  <a u="445C" b="82 33 97 37"/>
+  <a u="445D" b="82 33 97 38"/>
+  <a u="445E" b="82 33 97 39"/>
+  <a u="445F" b="82 33 98 30"/>
+  <a u="4460" b="82 33 98 31"/>
+  <a u="4461" b="82 33 98 32"/>
+  <a u="4462" b="82 33 98 33"/>
+  <a u="4463" b="82 33 98 34"/>
+  <a u="4464" b="82 33 98 35"/>
+  <a u="4465" b="82 33 98 36"/>
+  <a u="4466" b="82 33 98 37"/>
+  <a u="4467" b="82 33 98 38"/>
+  <a u="4468" b="82 33 98 39"/>
+  <a u="4469" b="82 33 99 30"/>
+  <a u="446A" b="82 33 99 31"/>
+  <a u="446B" b="82 33 99 32"/>
+  <a u="446C" b="82 33 99 33"/>
+  <a u="446D" b="82 33 99 34"/>
+  <a u="446E" b="82 33 99 35"/>
+  <a u="446F" b="82 33 99 36"/>
+  <a u="4470" b="82 33 99 37"/>
+  <a u="4471" b="82 33 99 38"/>
+  <a u="4472" b="82 33 99 39"/>
+  <a u="4473" b="82 33 9A 30"/>
+  <a u="4474" b="82 33 9A 31"/>
+  <a u="4475" b="82 33 9A 32"/>
+  <a u="4476" b="82 33 9A 33"/>
+  <a u="4477" b="82 33 9A 34"/>
+  <a u="4478" b="82 33 9A 35"/>
+  <a u="4479" b="82 33 9A 36"/>
+  <a u="447A" b="82 33 9A 37"/>
+  <a u="447B" b="82 33 9A 38"/>
+  <a u="447C" b="82 33 9A 39"/>
+  <a u="447D" b="82 33 9B 30"/>
+  <a u="447E" b="82 33 9B 31"/>
+  <a u="447F" b="82 33 9B 32"/>
+  <a u="4480" b="82 33 9B 33"/>
+  <a u="4481" b="82 33 9B 34"/>
+  <a u="4482" b="82 33 9B 35"/>
+  <a u="4483" b="82 33 9B 36"/>
+  <a u="4484" b="82 33 9B 37"/>
+  <a u="4485" b="82 33 9B 38"/>
+  <a u="4486" b="82 33 9B 39"/>
+  <a u="4487" b="82 33 9C 30"/>
+  <a u="4488" b="82 33 9C 31"/>
+  <a u="4489" b="82 33 9C 32"/>
+  <a u="448A" b="82 33 9C 33"/>
+  <a u="448B" b="82 33 9C 34"/>
+  <a u="448C" b="82 33 9C 35"/>
+  <a u="448D" b="82 33 9C 36"/>
+  <a u="448E" b="82 33 9C 37"/>
+  <a u="448F" b="82 33 9C 38"/>
+  <a u="4490" b="82 33 9C 39"/>
+  <a u="4491" b="82 33 9D 30"/>
+  <a u="4492" b="82 33 9D 31"/>
+  <a u="4493" b="82 33 9D 32"/>
+  <a u="4494" b="82 33 9D 33"/>
+  <a u="4495" b="82 33 9D 34"/>
+  <a u="4496" b="82 33 9D 35"/>
+  <a u="4497" b="82 33 9D 36"/>
+  <a u="4498" b="82 33 9D 37"/>
+  <a u="4499" b="82 33 9D 38"/>
+  <a u="449A" b="82 33 9D 39"/>
+  <a u="449B" b="82 33 9E 30"/>
+  <a u="449C" b="82 33 9E 31"/>
+  <a u="449D" b="82 33 9E 32"/>
+  <a u="449E" b="82 33 9E 33"/>
+  <a u="449F" b="82 33 9E 34"/>
+  <a u="44A0" b="82 33 9E 35"/>
+  <a u="44A1" b="82 33 9E 36"/>
+  <a u="44A2" b="82 33 9E 37"/>
+  <a u="44A3" b="82 33 9E 38"/>
+  <a u="44A4" b="82 33 9E 39"/>
+  <a u="44A5" b="82 33 9F 30"/>
+  <a u="44A6" b="82 33 9F 31"/>
+  <a u="44A7" b="82 33 9F 32"/>
+  <a u="44A8" b="82 33 9F 33"/>
+  <a u="44A9" b="82 33 9F 34"/>
+  <a u="44AA" b="82 33 9F 35"/>
+  <a u="44AB" b="82 33 9F 36"/>
+  <a u="44AC" b="82 33 9F 37"/>
+  <a u="44AD" b="82 33 9F 38"/>
+  <a u="44AE" b="82 33 9F 39"/>
+  <a u="44AF" b="82 33 A0 30"/>
+  <a u="44B0" b="82 33 A0 31"/>
+  <a u="44B1" b="82 33 A0 32"/>
+  <a u="44B2" b="82 33 A0 33"/>
+  <a u="44B3" b="82 33 A0 34"/>
+  <a u="44B4" b="82 33 A0 35"/>
+  <a u="44B5" b="82 33 A0 36"/>
+  <a u="44B6" b="82 33 A0 37"/>
+  <a u="44B7" b="82 33 A0 38"/>
+  <a u="44B8" b="82 33 A0 39"/>
+  <a u="44B9" b="82 33 A1 30"/>
+  <a u="44BA" b="82 33 A1 31"/>
+  <a u="44BB" b="82 33 A1 32"/>
+  <a u="44BC" b="82 33 A1 33"/>
+  <a u="44BD" b="82 33 A1 34"/>
+  <a u="44BE" b="82 33 A1 35"/>
+  <a u="44BF" b="82 33 A1 36"/>
+  <a u="44C0" b="82 33 A1 37"/>
+  <a u="44C1" b="82 33 A1 38"/>
+  <a u="44C2" b="82 33 A1 39"/>
+  <a u="44C3" b="82 33 A2 30"/>
+  <a u="44C4" b="82 33 A2 31"/>
+  <a u="44C5" b="82 33 A2 32"/>
+  <a u="44C6" b="82 33 A2 33"/>
+  <a u="44C7" b="82 33 A2 34"/>
+  <a u="44C8" b="82 33 A2 35"/>
+  <a u="44C9" b="82 33 A2 36"/>
+  <a u="44CA" b="82 33 A2 37"/>
+  <a u="44CB" b="82 33 A2 38"/>
+  <a u="44CC" b="82 33 A2 39"/>
+  <a u="44CD" b="82 33 A3 30"/>
+  <a u="44CE" b="82 33 A3 31"/>
+  <a u="44CF" b="82 33 A3 32"/>
+  <a u="44D0" b="82 33 A3 33"/>
+  <a u="44D1" b="82 33 A3 34"/>
+  <a u="44D2" b="82 33 A3 35"/>
+  <a u="44D3" b="82 33 A3 36"/>
+  <a u="44D4" b="82 33 A3 37"/>
+  <a u="44D5" b="82 33 A3 38"/>
+  <a u="44D6" b="FE 7B"/>
+  <a u="464C" b="FE 7D"/>
+  <a u="464D" b="82 33 C9 32"/>
+  <a u="464E" b="82 33 C9 33"/>
+  <a u="464F" b="82 33 C9 34"/>
+  <a u="4650" b="82 33 C9 35"/>
+  <a u="4651" b="82 33 C9 36"/>
+  <a u="4652" b="82 33 C9 37"/>
+  <a u="4653" b="82 33 C9 38"/>
+  <a u="4654" b="82 33 C9 39"/>
+  <a u="4655" b="82 33 CA 30"/>
+  <a u="4656" b="82 33 CA 31"/>
+  <a u="4657" b="82 33 CA 32"/>
+  <a u="4658" b="82 33 CA 33"/>
+  <a u="4659" b="82 33 CA 34"/>
+  <a u="465A" b="82 33 CA 35"/>
+  <a u="465B" b="82 33 CA 36"/>
+  <a u="465C" b="82 33 CA 37"/>
+  <a u="465D" b="82 33 CA 38"/>
+  <a u="465E" b="82 33 CA 39"/>
+  <a u="465F" b="82 33 CB 30"/>
+  <a u="4660" b="82 33 CB 31"/>
+  <a u="4661" b="FE 7C"/>
+  <a u="4662" b="82 33 CB 32"/>
+  <a u="4663" b="82 33 CB 33"/>
+  <a u="4664" b="82 33 CB 34"/>
+  <a u="4665" b="82 33 CB 35"/>
+  <a u="4666" b="82 33 CB 36"/>
+  <a u="4667" b="82 33 CB 37"/>
+  <a u="4668" b="82 33 CB 38"/>
+  <a u="4669" b="82 33 CB 39"/>
+  <a u="466A" b="82 33 CC 30"/>
+  <a u="466B" b="82 33 CC 31"/>
+  <a u="466C" b="82 33 CC 32"/>
+  <a u="466D" b="82 33 CC 33"/>
+  <a u="466E" b="82 33 CC 34"/>
+  <a u="466F" b="82 33 CC 35"/>
+  <a u="4670" b="82 33 CC 36"/>
+  <a u="4671" b="82 33 CC 37"/>
+  <a u="4672" b="82 33 CC 38"/>
+  <a u="4673" b="82 33 CC 39"/>
+  <a u="4674" b="82 33 CD 30"/>
+  <a u="4675" b="82 33 CD 31"/>
+  <a u="4676" b="82 33 CD 32"/>
+  <a u="4677" b="82 33 CD 33"/>
+  <a u="4678" b="82 33 CD 34"/>
+  <a u="4679" b="82 33 CD 35"/>
+  <a u="467A" b="82 33 CD 36"/>
+  <a u="467B" b="82 33 CD 37"/>
+  <a u="467C" b="82 33 CD 38"/>
+  <a u="467D" b="82 33 CD 39"/>
+  <a u="467E" b="82 33 CE 30"/>
+  <a u="467F" b="82 33 CE 31"/>
+  <a u="4680" b="82 33 CE 32"/>
+  <a u="4681" b="82 33 CE 33"/>
+  <a u="4682" b="82 33 CE 34"/>
+  <a u="4683" b="82 33 CE 35"/>
+  <a u="4684" b="82 33 CE 36"/>
+  <a u="4685" b="82 33 CE 37"/>
+  <a u="4686" b="82 33 CE 38"/>
+  <a u="4687" b="82 33 CE 39"/>
+  <a u="4688" b="82 33 CF 30"/>
+  <a u="4689" b="82 33 CF 31"/>
+  <a u="468A" b="82 33 CF 32"/>
+  <a u="468B" b="82 33 CF 33"/>
+  <a u="468C" b="82 33 CF 34"/>
+  <a u="468D" b="82 33 CF 35"/>
+  <a u="468E" b="82 33 CF 36"/>
+  <a u="468F" b="82 33 CF 37"/>
+  <a u="4690" b="82 33 CF 38"/>
+  <a u="4691" b="82 33 CF 39"/>
+  <a u="4692" b="82 33 D0 30"/>
+  <a u="4693" b="82 33 D0 31"/>
+  <a u="4694" b="82 33 D0 32"/>
+  <a u="4695" b="82 33 D0 33"/>
+  <a u="4696" b="82 33 D0 34"/>
+  <a u="4697" b="82 33 D0 35"/>
+  <a u="4698" b="82 33 D0 36"/>
+  <a u="4699" b="82 33 D0 37"/>
+  <a u="469A" b="82 33 D0 38"/>
+  <a u="469B" b="82 33 D0 39"/>
+  <a u="469C" b="82 33 D1 30"/>
+  <a u="469D" b="82 33 D1 31"/>
+  <a u="469E" b="82 33 D1 32"/>
+  <a u="469F" b="82 33 D1 33"/>
+  <a u="46A0" b="82 33 D1 34"/>
+  <a u="46A1" b="82 33 D1 35"/>
+  <a u="46A2" b="82 33 D1 36"/>
+  <a u="46A3" b="82 33 D1 37"/>
+  <a u="46A4" b="82 33 D1 38"/>
+  <a u="46A5" b="82 33 D1 39"/>
+  <a u="46A6" b="82 33 D2 30"/>
+  <a u="46A7" b="82 33 D2 31"/>
+  <a u="46A8" b="82 33 D2 32"/>
+  <a u="46A9" b="82 33 D2 33"/>
+  <a u="46AA" b="82 33 D2 34"/>
+  <a u="46AB" b="82 33 D2 35"/>
+  <a u="46AC" b="82 33 D2 36"/>
+  <a u="46AD" b="82 33 D2 37"/>
+  <a u="46AE" b="82 33 D2 38"/>
+  <a u="46AF" b="82 33 D2 39"/>
+  <a u="46B0" b="82 33 D3 30"/>
+  <a u="46B1" b="82 33 D3 31"/>
+  <a u="46B2" b="82 33 D3 32"/>
+  <a u="46B3" b="82 33 D3 33"/>
+  <a u="46B4" b="82 33 D3 34"/>
+  <a u="46B5" b="82 33 D3 35"/>
+  <a u="46B6" b="82 33 D3 36"/>
+  <a u="46B7" b="82 33 D3 37"/>
+  <a u="46B8" b="82 33 D3 38"/>
+  <a u="46B9" b="82 33 D3 39"/>
+  <a u="46BA" b="82 33 D4 30"/>
+  <a u="46BB" b="82 33 D4 31"/>
+  <a u="46BC" b="82 33 D4 32"/>
+  <a u="46BD" b="82 33 D4 33"/>
+  <a u="46BE" b="82 33 D4 34"/>
+  <a u="46BF" b="82 33 D4 35"/>
+  <a u="46C0" b="82 33 D4 36"/>
+  <a u="46C1" b="82 33 D4 37"/>
+  <a u="46C2" b="82 33 D4 38"/>
+  <a u="46C3" b="82 33 D4 39"/>
+  <a u="46C4" b="82 33 D5 30"/>
+  <a u="46C5" b="82 33 D5 31"/>
+  <a u="46C6" b="82 33 D5 32"/>
+  <a u="46C7" b="82 33 D5 33"/>
+  <a u="46C8" b="82 33 D5 34"/>
+  <a u="46C9" b="82 33 D5 35"/>
+  <a u="46CA" b="82 33 D5 36"/>
+  <a u="46CB" b="82 33 D5 37"/>
+  <a u="46CC" b="82 33 D5 38"/>
+  <a u="46CD" b="82 33 D5 39"/>
+  <a u="46CE" b="82 33 D6 30"/>
+  <a u="46CF" b="82 33 D6 31"/>
+  <a u="46D0" b="82 33 D6 32"/>
+  <a u="46D1" b="82 33 D6 33"/>
+  <a u="46D2" b="82 33 D6 34"/>
+  <a u="46D3" b="82 33 D6 35"/>
+  <a u="46D4" b="82 33 D6 36"/>
+  <a u="46D5" b="82 33 D6 37"/>
+  <a u="46D6" b="82 33 D6 38"/>
+  <a u="46D7" b="82 33 D6 39"/>
+  <a u="46D8" b="82 33 D7 30"/>
+  <a u="46D9" b="82 33 D7 31"/>
+  <a u="46DA" b="82 33 D7 32"/>
+  <a u="46DB" b="82 33 D7 33"/>
+  <a u="46DC" b="82 33 D7 34"/>
+  <a u="46DD" b="82 33 D7 35"/>
+  <a u="46DE" b="82 33 D7 36"/>
+  <a u="46DF" b="82 33 D7 37"/>
+  <a u="46E0" b="82 33 D7 38"/>
+  <a u="46E1" b="82 33 D7 39"/>
+  <a u="46E2" b="82 33 D8 30"/>
+  <a u="46E3" b="82 33 D8 31"/>
+  <a u="46E4" b="82 33 D8 32"/>
+  <a u="46E5" b="82 33 D8 33"/>
+  <a u="46E6" b="82 33 D8 34"/>
+  <a u="46E7" b="82 33 D8 35"/>
+  <a u="46E8" b="82 33 D8 36"/>
+  <a u="46E9" b="82 33 D8 37"/>
+  <a u="46EA" b="82 33 D8 38"/>
+  <a u="46EB" b="82 33 D8 39"/>
+  <a u="46EC" b="82 33 D9 30"/>
+  <a u="46ED" b="82 33 D9 31"/>
+  <a u="46EE" b="82 33 D9 32"/>
+  <a u="46EF" b="82 33 D9 33"/>
+  <a u="46F0" b="82 33 D9 34"/>
+  <a u="46F1" b="82 33 D9 35"/>
+  <a u="46F2" b="82 33 D9 36"/>
+  <a u="46F3" b="82 33 D9 37"/>
+  <a u="46F4" b="82 33 D9 38"/>
+  <a u="46F5" b="82 33 D9 39"/>
+  <a u="46F6" b="82 33 DA 30"/>
+  <a u="46F7" b="82 33 DA 31"/>
+  <a u="46F8" b="82 33 DA 32"/>
+  <a u="46F9" b="82 33 DA 33"/>
+  <a u="46FA" b="82 33 DA 34"/>
+  <a u="46FB" b="82 33 DA 35"/>
+  <a u="46FC" b="82 33 DA 36"/>
+  <a u="46FD" b="82 33 DA 37"/>
+  <a u="46FE" b="82 33 DA 38"/>
+  <a u="46FF" b="82 33 DA 39"/>
+  <a u="4700" b="82 33 DB 30"/>
+  <a u="4701" b="82 33 DB 31"/>
+  <a u="4702" b="82 33 DB 32"/>
+  <a u="4703" b="82 33 DB 33"/>
+  <a u="4704" b="82 33 DB 34"/>
+  <a u="4705" b="82 33 DB 35"/>
+  <a u="4706" b="82 33 DB 36"/>
+  <a u="4707" b="82 33 DB 37"/>
+  <a u="4708" b="82 33 DB 38"/>
+  <a u="4709" b="82 33 DB 39"/>
+  <a u="470A" b="82 33 DC 30"/>
+  <a u="470B" b="82 33 DC 31"/>
+  <a u="470C" b="82 33 DC 32"/>
+  <a u="470D" b="82 33 DC 33"/>
+  <a u="470E" b="82 33 DC 34"/>
+  <a u="470F" b="82 33 DC 35"/>
+  <a u="4710" b="82 33 DC 36"/>
+  <a u="4711" b="82 33 DC 37"/>
+  <a u="4712" b="82 33 DC 38"/>
+  <a u="4713" b="82 33 DC 39"/>
+  <a u="4714" b="82 33 DD 30"/>
+  <a u="4715" b="82 33 DD 31"/>
+  <a u="4716" b="82 33 DD 32"/>
+  <a u="4717" b="82 33 DD 33"/>
+  <a u="4718" b="82 33 DD 34"/>
+  <a u="4719" b="82 33 DD 35"/>
+  <a u="471A" b="82 33 DD 36"/>
+  <a u="471B" b="82 33 DD 37"/>
+  <a u="471C" b="82 33 DD 38"/>
+  <a u="471D" b="82 33 DD 39"/>
+  <a u="471E" b="82 33 DE 30"/>
+  <a u="471F" b="82 33 DE 31"/>
+  <a u="4720" b="82 33 DE 32"/>
+  <a u="4721" b="82 33 DE 33"/>
+  <a u="4722" b="82 33 DE 34"/>
+  <a u="4723" b="FE 80"/>
+  <a u="4724" b="82 33 DE 35"/>
+  <a u="4725" b="82 33 DE 36"/>
+  <a u="4726" b="82 33 DE 37"/>
+  <a u="4727" b="82 33 DE 38"/>
+  <a u="4728" b="82 33 DE 39"/>
+  <a u="4729" b="FE 81"/>
+  <a u="472A" b="82 33 DF 30"/>
+  <a u="472B" b="82 33 DF 31"/>
+  <a u="472C" b="82 33 DF 32"/>
+  <a u="472D" b="82 33 DF 33"/>
+  <a u="472E" b="82 33 DF 34"/>
+  <a u="472F" b="82 33 DF 35"/>
+  <a u="4730" b="82 33 DF 36"/>
+  <a u="4731" b="82 33 DF 37"/>
+  <a u="4732" b="82 33 DF 38"/>
+  <a u="4733" b="82 33 DF 39"/>
+  <a u="4734" b="82 33 E0 30"/>
+  <a u="4735" b="82 33 E0 31"/>
+  <a u="4736" b="82 33 E0 32"/>
+  <a u="4737" b="82 33 E0 33"/>
+  <a u="4738" b="82 33 E0 34"/>
+  <a u="4739" b="82 33 E0 35"/>
+  <a u="473A" b="82 33 E0 36"/>
+  <a u="473B" b="82 33 E0 37"/>
+  <a u="473C" b="82 33 E0 38"/>
+  <a u="473D" b="82 33 E0 39"/>
+  <a u="473E" b="82 33 E1 30"/>
+  <a u="473F" b="82 33 E1 31"/>
+  <a u="4740" b="82 33 E1 32"/>
+  <a u="4741" b="82 33 E1 33"/>
+  <a u="4742" b="82 33 E1 34"/>
+  <a u="4743" b="82 33 E1 35"/>
+  <a u="4744" b="82 33 E1 36"/>
+  <a u="4745" b="82 33 E1 37"/>
+  <a u="4746" b="82 33 E1 38"/>
+  <a u="4747" b="82 33 E1 39"/>
+  <a u="4748" b="82 33 E2 30"/>
+  <a u="4749" b="82 33 E2 31"/>
+  <a u="474A" b="82 33 E2 32"/>
+  <a u="474B" b="82 33 E2 33"/>
+  <a u="474C" b="82 33 E2 34"/>
+  <a u="474D" b="82 33 E2 35"/>
+  <a u="474E" b="82 33 E2 36"/>
+  <a u="474F" b="82 33 E2 37"/>
+  <a u="4750" b="82 33 E2 38"/>
+  <a u="4751" b="82 33 E2 39"/>
+  <a u="4752" b="82 33 E3 30"/>
+  <a u="4753" b="82 33 E3 31"/>
+  <a u="4754" b="82 33 E3 32"/>
+  <a u="4755" b="82 33 E3 33"/>
+  <a u="4756" b="82 33 E3 34"/>
+  <a u="4757" b="82 33 E3 35"/>
+  <a u="4758" b="82 33 E3 36"/>
+  <a u="4759" b="82 33 E3 37"/>
+  <a u="475A" b="82 33 E3 38"/>
+  <a u="475B" b="82 33 E3 39"/>
+  <a u="475C" b="82 33 E4 30"/>
+  <a u="475D" b="82 33 E4 31"/>
+  <a u="475E" b="82 33 E4 32"/>
+  <a u="475F" b="82 33 E4 33"/>
+  <a u="4760" b="82 33 E4 34"/>
+  <a u="4761" b="82 33 E4 35"/>
+  <a u="4762" b="82 33 E4 36"/>
+  <a u="4763" b="82 33 E4 37"/>
+  <a u="4764" b="82 33 E4 38"/>
+  <a u="4765" b="82 33 E4 39"/>
+  <a u="4766" b="82 33 E5 30"/>
+  <a u="4767" b="82 33 E5 31"/>
+  <a u="4768" b="82 33 E5 32"/>
+  <a u="4769" b="82 33 E5 33"/>
+  <a u="476A" b="82 33 E5 34"/>
+  <a u="476B" b="82 33 E5 35"/>
+  <a u="476C" b="82 33 E5 36"/>
+  <a u="476D" b="82 33 E5 37"/>
+  <a u="476E" b="82 33 E5 38"/>
+  <a u="476F" b="82 33 E5 39"/>
+  <a u="4770" b="82 33 E6 30"/>
+  <a u="4771" b="82 33 E6 31"/>
+  <a u="4772" b="82 33 E6 32"/>
+  <a u="4773" b="82 33 E6 33"/>
+  <a u="4774" b="82 33 E6 34"/>
+  <a u="4775" b="82 33 E6 35"/>
+  <a u="4776" b="82 33 E6 36"/>
+  <a u="4777" b="82 33 E6 37"/>
+  <a u="4778" b="82 33 E6 38"/>
+  <a u="4779" b="82 33 E6 39"/>
+  <a u="477A" b="82 33 E7 30"/>
+  <a u="477B" b="82 33 E7 31"/>
+  <a u="477C" b="FE 82"/>
+  <a u="477D" b="82 33 E7 32"/>
+  <a u="477E" b="82 33 E7 33"/>
+  <a u="477F" b="82 33 E7 34"/>
+  <a u="4780" b="82 33 E7 35"/>
+  <a u="4781" b="82 33 E7 36"/>
+  <a u="4782" b="82 33 E7 37"/>
+  <a u="4783" b="82 33 E7 38"/>
+  <a u="4784" b="82 33 E7 39"/>
+  <a u="4785" b="82 33 E8 30"/>
+  <a u="4786" b="82 33 E8 31"/>
+  <a u="4787" b="82 33 E8 32"/>
+  <a u="4788" b="82 33 E8 33"/>
+  <a u="4789" b="82 33 E8 34"/>
+  <a u="478A" b="82 33 E8 35"/>
+  <a u="478B" b="82 33 E8 36"/>
+  <a u="478C" b="82 33 E8 37"/>
+  <a u="478D" b="FE 83"/>
+  <a u="4947" b="FE 85"/>
+  <a u="4948" b="82 34 96 39"/>
+  <a u="4949" b="82 34 97 30"/>
+  <a u="494A" b="82 34 97 31"/>
+  <a u="494B" b="82 34 97 32"/>
+  <a u="494C" b="82 34 97 33"/>
+  <a u="494D" b="82 34 97 34"/>
+  <a u="494E" b="82 34 97 35"/>
+  <a u="494F" b="82 34 97 36"/>
+  <a u="4950" b="82 34 97 37"/>
+  <a u="4951" b="82 34 97 38"/>
+  <a u="4952" b="82 34 97 39"/>
+  <a u="4953" b="82 34 98 30"/>
+  <a u="4954" b="82 34 98 31"/>
+  <a u="4955" b="82 34 98 32"/>
+  <a u="4956" b="82 34 98 33"/>
+  <a u="4957" b="82 34 98 34"/>
+  <a u="4958" b="82 34 98 35"/>
+  <a u="4959" b="82 34 98 36"/>
+  <a u="495A" b="82 34 98 37"/>
+  <a u="495B" b="82 34 98 38"/>
+  <a u="495C" b="82 34 98 39"/>
+  <a u="495D" b="82 34 99 30"/>
+  <a u="495E" b="82 34 99 31"/>
+  <a u="495F" b="82 34 99 32"/>
+  <a u="4960" b="82 34 99 33"/>
+  <a u="4961" b="82 34 99 34"/>
+  <a u="4962" b="82 34 99 35"/>
+  <a u="4963" b="82 34 99 36"/>
+  <a u="4964" b="82 34 99 37"/>
+  <a u="4965" b="82 34 99 38"/>
+  <a u="4966" b="82 34 99 39"/>
+  <a u="4967" b="82 34 9A 30"/>
+  <a u="4968" b="82 34 9A 31"/>
+  <a u="4969" b="82 34 9A 32"/>
+  <a u="496A" b="82 34 9A 33"/>
+  <a u="496B" b="82 34 9A 34"/>
+  <a u="496C" b="82 34 9A 35"/>
+  <a u="496D" b="82 34 9A 36"/>
+  <a u="496E" b="82 34 9A 37"/>
+  <a u="496F" b="82 34 9A 38"/>
+  <a u="4970" b="82 34 9A 39"/>
+  <a u="4971" b="82 34 9B 30"/>
+  <a u="4972" b="82 34 9B 31"/>
+  <a u="4973" b="82 34 9B 32"/>
+  <a u="4974" b="82 34 9B 33"/>
+  <a u="4975" b="82 34 9B 34"/>
+  <a u="4976" b="82 34 9B 35"/>
+  <a u="4977" b="82 34 9B 36"/>
+  <a u="4978" b="82 34 9B 37"/>
+  <a u="4979" b="82 34 9B 38"/>
+  <a u="497A" b="FE 86"/>
+  <a u="497B" b="82 34 9B 39"/>
+  <a u="497C" b="82 34 9C 30"/>
+  <a u="497D" b="FE 87"/>
+  <a u="497E" b="82 34 9C 31"/>
+  <a u="497F" b="82 34 9C 32"/>
+  <a u="4980" b="82 34 9C 33"/>
+  <a u="4981" b="82 34 9C 34"/>
+  <a u="4982" b="FE 88"/>
+  <a u="4983" b="FE 89"/>
+  <a u="4984" b="82 34 9C 35"/>
+  <a u="4985" b="FE 8A"/>
+  <a u="4986" b="FE 8B"/>
+  <a u="4987" b="82 34 9C 36"/>
+  <a u="4988" b="82 34 9C 37"/>
+  <a u="4989" b="82 34 9C 38"/>
+  <a u="498A" b="82 34 9C 39"/>
+  <a u="498B" b="82 34 9D 30"/>
+  <a u="498C" b="82 34 9D 31"/>
+  <a u="498D" b="82 34 9D 32"/>
+  <a u="498E" b="82 34 9D 33"/>
+  <a u="498F" b="82 34 9D 34"/>
+  <a u="4990" b="82 34 9D 35"/>
+  <a u="4991" b="82 34 9D 36"/>
+  <a u="4992" b="82 34 9D 37"/>
+  <a u="4993" b="82 34 9D 38"/>
+  <a u="4994" b="82 34 9D 39"/>
+  <a u="4995" b="82 34 9E 30"/>
+  <a u="4996" b="82 34 9E 31"/>
+  <a u="4997" b="82 34 9E 32"/>
+  <a u="4998" b="82 34 9E 33"/>
+  <a u="4999" b="82 34 9E 34"/>
+  <a u="499A" b="82 34 9E 35"/>
+  <a u="499B" b="FE 8D"/>
+  <a u="499C" b="82 34 9E 36"/>
+  <a u="499D" b="82 34 9E 37"/>
+  <a u="499E" b="82 34 9E 38"/>
+  <a u="499F" b="FE 8C"/>
+  <a u="49A0" b="82 34 9E 39"/>
+  <a u="49A1" b="82 34 9F 30"/>
+  <a u="49A2" b="82 34 9F 31"/>
+  <a u="49A3" b="82 34 9F 32"/>
+  <a u="49A4" b="82 34 9F 33"/>
+  <a u="49A5" b="82 34 9F 34"/>
+  <a u="49A6" b="82 34 9F 35"/>
+  <a u="49A7" b="82 34 9F 36"/>
+  <a u="49A8" b="82 34 9F 37"/>
+  <a u="49A9" b="82 34 9F 38"/>
+  <a u="49AA" b="82 34 9F 39"/>
+  <a u="49AB" b="82 34 A0 30"/>
+  <a u="49AC" b="82 34 A0 31"/>
+  <a u="49AD" b="82 34 A0 32"/>
+  <a u="49AE" b="82 34 A0 33"/>
+  <a u="49AF" b="82 34 A0 34"/>
+  <a u="49B0" b="82 34 A0 35"/>
+  <a u="49B1" b="82 34 A0 36"/>
+  <a u="49B2" b="82 34 A0 37"/>
+  <a u="49B3" b="82 34 A0 38"/>
+  <a u="49B4" b="82 34 A0 39"/>
+  <a u="49B5" b="82 34 A1 30"/>
+  <a u="49B6" b="FE 8F"/>
+  <a u="49B7" b="FE 8E"/>
+  <a u="4C77" b="FE 96"/>
+  <a u="4C78" b="82 34 E7 34"/>
+  <a u="4C79" b="82 34 E7 35"/>
+  <a u="4C7A" b="82 34 E7 36"/>
+  <a u="4C7B" b="82 34 E7 37"/>
+  <a u="4C7C" b="82 34 E7 38"/>
+  <a u="4C7D" b="82 34 E7 39"/>
+  <a u="4C7E" b="82 34 E8 30"/>
+  <a u="4C7F" b="82 34 E8 31"/>
+  <a u="4C80" b="82 34 E8 32"/>
+  <a u="4C81" b="82 34 E8 33"/>
+  <a u="4C82" b="82 34 E8 34"/>
+  <a u="4C83" b="82 34 E8 35"/>
+  <a u="4C84" b="82 34 E8 36"/>
+  <a u="4C85" b="82 34 E8 37"/>
+  <a u="4C86" b="82 34 E8 38"/>
+  <a u="4C87" b="82 34 E8 39"/>
+  <a u="4C88" b="82 34 E9 30"/>
+  <a u="4C89" b="82 34 E9 31"/>
+  <a u="4C8A" b="82 34 E9 32"/>
+  <a u="4C8B" b="82 34 E9 33"/>
+  <a u="4C8C" b="82 34 E9 34"/>
+  <a u="4C8D" b="82 34 E9 35"/>
+  <a u="4C8E" b="82 34 E9 36"/>
+  <a u="4C8F" b="82 34 E9 37"/>
+  <a u="4C90" b="82 34 E9 38"/>
+  <a u="4C91" b="82 34 E9 39"/>
+  <a u="4C92" b="82 34 EA 30"/>
+  <a u="4C93" b="82 34 EA 31"/>
+  <a u="4C94" b="82 34 EA 32"/>
+  <a u="4C95" b="82 34 EA 33"/>
+  <a u="4C96" b="82 34 EA 34"/>
+  <a u="4C97" b="82 34 EA 35"/>
+  <a u="4C98" b="82 34 EA 36"/>
+  <a u="4C99" b="82 34 EA 37"/>
+  <a u="4C9A" b="82 34 EA 38"/>
+  <a u="4C9B" b="82 34 EA 39"/>
+  <a u="4C9C" b="82 34 EB 30"/>
+  <a u="4C9D" b="82 34 EB 31"/>
+  <a u="4C9E" b="82 34 EB 32"/>
+  <a u="4C9F" b="FE 93"/>
+  <a u="4CA0" b="FE 94"/>
+  <a u="4CA1" b="FE 95"/>
+  <a u="4CA2" b="FE 97"/>
+  <a u="4CA3" b="FE 92"/>
+  <a u="4CA4" b="82 34 EB 33"/>
+  <a u="4CA5" b="82 34 EB 34"/>
+  <a u="4CA6" b="82 34 EB 35"/>
+  <a u="4CA7" b="82 34 EB 36"/>
+  <a u="4CA8" b="82 34 EB 37"/>
+  <a u="4CA9" b="82 34 EB 38"/>
+  <a u="4CAA" b="82 34 EB 39"/>
+  <a u="4CAB" b="82 34 EC 30"/>
+  <a u="4CAC" b="82 34 EC 31"/>
+  <a u="4CAD" b="82 34 EC 32"/>
+  <a u="4CAE" b="82 34 EC 33"/>
+  <a u="4CAF" b="82 34 EC 34"/>
+  <a u="4CB0" b="82 34 EC 35"/>
+  <a u="4CB1" b="82 34 EC 36"/>
+  <a u="4CB2" b="82 34 EC 37"/>
+  <a u="4CB3" b="82 34 EC 38"/>
+  <a u="4CB4" b="82 34 EC 39"/>
+  <a u="4CB5" b="82 34 ED 30"/>
+  <a u="4CB6" b="82 34 ED 31"/>
+  <a u="4CB7" b="82 34 ED 32"/>
+  <a u="4CB8" b="82 34 ED 33"/>
+  <a u="4CB9" b="82 34 ED 34"/>
+  <a u="4CBA" b="82 34 ED 35"/>
+  <a u="4CBB" b="82 34 ED 36"/>
+  <a u="4CBC" b="82 34 ED 37"/>
+  <a u="4CBD" b="82 34 ED 38"/>
+  <a u="4CBE" b="82 34 ED 39"/>
+  <a u="4CBF" b="82 34 EE 30"/>
+  <a u="4CC0" b="82 34 EE 31"/>
+  <a u="4CC1" b="82 34 EE 32"/>
+  <a u="4CC2" b="82 34 EE 33"/>
+  <a u="4CC3" b="82 34 EE 34"/>
+  <a u="4CC4" b="82 34 EE 35"/>
+  <a u="4CC5" b="82 34 EE 36"/>
+  <a u="4CC6" b="82 34 EE 37"/>
+  <a u="4CC7" b="82 34 EE 38"/>
+  <a u="4CC8" b="82 34 EE 39"/>
+  <a u="4CC9" b="82 34 EF 30"/>
+  <a u="4CCA" b="82 34 EF 31"/>
+  <a u="4CCB" b="82 34 EF 32"/>
+  <a u="4CCC" b="82 34 EF 33"/>
+  <a u="4CCD" b="82 34 EF 34"/>
+  <a u="4CCE" b="82 34 EF 35"/>
+  <a u="4CCF" b="82 34 EF 36"/>
+  <a u="4CD0" b="82 34 EF 37"/>
+  <a u="4CD1" b="82 34 EF 38"/>
+  <a u="4CD2" b="82 34 EF 39"/>
+  <a u="4CD3" b="82 34 F0 30"/>
+  <a u="4CD4" b="82 34 F0 31"/>
+  <a u="4CD5" b="82 34 F0 32"/>
+  <a u="4CD6" b="82 34 F0 33"/>
+  <a u="4CD7" b="82 34 F0 34"/>
+  <a u="4CD8" b="82 34 F0 35"/>
+  <a u="4CD9" b="82 34 F0 36"/>
+  <a u="4CDA" b="82 34 F0 37"/>
+  <a u="4CDB" b="82 34 F0 38"/>
+  <a u="4CDC" b="82 34 F0 39"/>
+  <a u="4CDD" b="82 34 F1 30"/>
+  <a u="4CDE" b="82 34 F1 31"/>
+  <a u="4CDF" b="82 34 F1 32"/>
+  <a u="4CE0" b="82 34 F1 33"/>
+  <a u="4CE1" b="82 34 F1 34"/>
+  <a u="4CE2" b="82 34 F1 35"/>
+  <a u="4CE3" b="82 34 F1 36"/>
+  <a u="4CE4" b="82 34 F1 37"/>
+  <a u="4CE5" b="82 34 F1 38"/>
+  <a u="4CE6" b="82 34 F1 39"/>
+  <a u="4CE7" b="82 34 F2 30"/>
+  <a u="4CE8" b="82 34 F2 31"/>
+  <a u="4CE9" b="82 34 F2 32"/>
+  <a u="4CEA" b="82 34 F2 33"/>
+  <a u="4CEB" b="82 34 F2 34"/>
+  <a u="4CEC" b="82 34 F2 35"/>
+  <a u="4CED" b="82 34 F2 36"/>
+  <a u="4CEE" b="82 34 F2 37"/>
+  <a u="4CEF" b="82 34 F2 38"/>
+  <a u="4CF0" b="82 34 F2 39"/>
+  <a u="4CF1" b="82 34 F3 30"/>
+  <a u="4CF2" b="82 34 F3 31"/>
+  <a u="4CF3" b="82 34 F3 32"/>
+  <a u="4CF4" b="82 34 F3 33"/>
+  <a u="4CF5" b="82 34 F3 34"/>
+  <a u="4CF6" b="82 34 F3 35"/>
+  <a u="4CF7" b="82 34 F3 36"/>
+  <a u="4CF8" b="82 34 F3 37"/>
+  <a u="4CF9" b="82 34 F3 38"/>
+  <a u="4CFA" b="82 34 F3 39"/>
+  <a u="4CFB" b="82 34 F4 30"/>
+  <a u="4CFC" b="82 34 F4 31"/>
+  <a u="4CFD" b="82 34 F4 32"/>
+  <a u="4CFE" b="82 34 F4 33"/>
+  <a u="4CFF" b="82 34 F4 34"/>
+  <a u="4D00" b="82 34 F4 35"/>
+  <a u="4D01" b="82 34 F4 36"/>
+  <a u="4D02" b="82 34 F4 37"/>
+  <a u="4D03" b="82 34 F4 38"/>
+  <a u="4D04" b="82 34 F4 39"/>
+  <a u="4D05" b="82 34 F5 30"/>
+  <a u="4D06" b="82 34 F5 31"/>
+  <a u="4D07" b="82 34 F5 32"/>
+  <a u="4D08" b="82 34 F5 33"/>
+  <a u="4D09" b="82 34 F5 34"/>
+  <a u="4D0A" b="82 34 F5 35"/>
+  <a u="4D0B" b="82 34 F5 36"/>
+  <a u="4D0C" b="82 34 F5 37"/>
+  <a u="4D0D" b="82 34 F5 38"/>
+  <a u="4D0E" b="82 34 F5 39"/>
+  <a u="4D0F" b="82 34 F6 30"/>
+  <a u="4D10" b="82 34 F6 31"/>
+  <a u="4D11" b="82 34 F6 32"/>
+  <a u="4D12" b="82 34 F6 33"/>
+  <a u="4D13" b="FE 98"/>
+  <a u="4D14" b="FE 99"/>
+  <a u="4D15" b="FE 9A"/>
+  <a u="4D16" b="FE 9B"/>
+  <a u="4D17" b="FE 9C"/>
+  <a u="4D18" b="FE 9D"/>
+  <a u="4D19" b="FE 9E"/>
+  <a u="4D1A" b="82 34 F6 34"/>
+  <a u="4D1B" b="82 34 F6 35"/>
+  <a u="4D1C" b="82 34 F6 36"/>
+  <a u="4D1D" b="82 34 F6 37"/>
+  <a u="4D1E" b="82 34 F6 38"/>
+  <a u="4D1F" b="82 34 F6 39"/>
+  <a u="4D20" b="82 34 F7 30"/>
+  <a u="4D21" b="82 34 F7 31"/>
+  <a u="4D22" b="82 34 F7 32"/>
+  <a u="4D23" b="82 34 F7 33"/>
+  <a u="4D24" b="82 34 F7 34"/>
+  <a u="4D25" b="82 34 F7 35"/>
+  <a u="4D26" b="82 34 F7 36"/>
+  <a u="4D27" b="82 34 F7 37"/>
+  <a u="4D28" b="82 34 F7 38"/>
+  <a u="4D29" b="82 34 F7 39"/>
+  <a u="4D2A" b="82 34 F8 30"/>
+  <a u="4D2B" b="82 34 F8 31"/>
+  <a u="4D2C" b="82 34 F8 32"/>
+  <a u="4D2D" b="82 34 F8 33"/>
+  <a u="4D2E" b="82 34 F8 34"/>
+  <a u="4D2F" b="82 34 F8 35"/>
+  <a u="4D30" b="82 34 F8 36"/>
+  <a u="4D31" b="82 34 F8 37"/>
+  <a u="4D32" b="82 34 F8 38"/>
+  <a u="4D33" b="82 34 F8 39"/>
+  <a u="4D34" b="82 34 F9 30"/>
+  <a u="4D35" b="82 34 F9 31"/>
+  <a u="4D36" b="82 34 F9 32"/>
+  <a u="4D37" b="82 34 F9 33"/>
+  <a u="4D38" b="82 34 F9 34"/>
+  <a u="4D39" b="82 34 F9 35"/>
+  <a u="4D3A" b="82 34 F9 36"/>
+  <a u="4D3B" b="82 34 F9 37"/>
+  <a u="4D3C" b="82 34 F9 38"/>
+  <a u="4D3D" b="82 34 F9 39"/>
+  <a u="4D3E" b="82 34 FA 30"/>
+  <a u="4D3F" b="82 34 FA 31"/>
+  <a u="4D40" b="82 34 FA 32"/>
+  <a u="4D41" b="82 34 FA 33"/>
+  <a u="4D42" b="82 34 FA 34"/>
+  <a u="4D43" b="82 34 FA 35"/>
+  <a u="4D44" b="82 34 FA 36"/>
+  <a u="4D45" b="82 34 FA 37"/>
+  <a u="4D46" b="82 34 FA 38"/>
+  <a u="4D47" b="82 34 FA 39"/>
+  <a u="4D48" b="82 34 FB 30"/>
+  <a u="4D49" b="82 34 FB 31"/>
+  <a u="4D4A" b="82 34 FB 32"/>
+  <a u="4D4B" b="82 34 FB 33"/>
+  <a u="4D4C" b="82 34 FB 34"/>
+  <a u="4D4D" b="82 34 FB 35"/>
+  <a u="4D4E" b="82 34 FB 36"/>
+  <a u="4D4F" b="82 34 FB 37"/>
+  <a u="4D50" b="82 34 FB 38"/>
+  <a u="4D51" b="82 34 FB 39"/>
+  <a u="4D52" b="82 34 FC 30"/>
+  <a u="4D53" b="82 34 FC 31"/>
+  <a u="4D54" b="82 34 FC 32"/>
+  <a u="4D55" b="82 34 FC 33"/>
+  <a u="4D56" b="82 34 FC 34"/>
+  <a u="4D57" b="82 34 FC 35"/>
+  <a u="4D58" b="82 34 FC 36"/>
+  <a u="4D59" b="82 34 FC 37"/>
+  <a u="4D5A" b="82 34 FC 38"/>
+  <a u="4D5B" b="82 34 FC 39"/>
+  <a u="4D5C" b="82 34 FD 30"/>
+  <a u="4D5D" b="82 34 FD 31"/>
+  <a u="4D5E" b="82 34 FD 32"/>
+  <a u="4D5F" b="82 34 FD 33"/>
+  <a u="4D60" b="82 34 FD 34"/>
+  <a u="4D61" b="82 34 FD 35"/>
+  <a u="4D62" b="82 34 FD 36"/>
+  <a u="4D63" b="82 34 FD 37"/>
+  <a u="4D64" b="82 34 FD 38"/>
+  <a u="4D65" b="82 34 FD 39"/>
+  <a u="4D66" b="82 34 FE 30"/>
+  <a u="4D67" b="82 34 FE 31"/>
+  <a u="4D68" b="82 34 FE 32"/>
+  <a u="4D69" b="82 34 FE 33"/>
+  <a u="4D6A" b="82 34 FE 34"/>
+  <a u="4D6B" b="82 34 FE 35"/>
+  <a u="4D6C" b="82 34 FE 36"/>
+  <a u="4D6D" b="82 34 FE 37"/>
+  <a u="4D6E" b="82 34 FE 38"/>
+  <a u="4D6F" b="82 34 FE 39"/>
+  <a u="4D70" b="82 35 81 30"/>
+  <a u="4D71" b="82 35 81 31"/>
+  <a u="4D72" b="82 35 81 32"/>
+  <a u="4D73" b="82 35 81 33"/>
+  <a u="4D74" b="82 35 81 34"/>
+  <a u="4D75" b="82 35 81 35"/>
+  <a u="4D76" b="82 35 81 36"/>
+  <a u="4D77" b="82 35 81 37"/>
+  <a u="4D78" b="82 35 81 38"/>
+  <a u="4D79" b="82 35 81 39"/>
+  <a u="4D7A" b="82 35 82 30"/>
+  <a u="4D7B" b="82 35 82 31"/>
+  <a u="4D7C" b="82 35 82 32"/>
+  <a u="4D7D" b="82 35 82 33"/>
+  <a u="4D7E" b="82 35 82 34"/>
+  <a u="4D7F" b="82 35 82 35"/>
+  <a u="4D80" b="82 35 82 36"/>
+  <a u="4D81" b="82 35 82 37"/>
+  <a u="4D82" b="82 35 82 38"/>
+  <a u="4D83" b="82 35 82 39"/>
+  <a u="4D84" b="82 35 83 30"/>
+  <a u="4D85" b="82 35 83 31"/>
+  <a u="4D86" b="82 35 83 32"/>
+  <a u="4D87" b="82 35 83 33"/>
+  <a u="4D88" b="82 35 83 34"/>
+  <a u="4D89" b="82 35 83 35"/>
+  <a u="4D8A" b="82 35 83 36"/>
+  <a u="4D8B" b="82 35 83 37"/>
+  <a u="4D8C" b="82 35 83 38"/>
+  <a u="4D8D" b="82 35 83 39"/>
+  <a u="4D8E" b="82 35 84 30"/>
+  <a u="4D8F" b="82 35 84 31"/>
+  <a u="4D90" b="82 35 84 32"/>
+  <a u="4D91" b="82 35 84 33"/>
+  <a u="4D92" b="82 35 84 34"/>
+  <a u="4D93" b="82 35 84 35"/>
+  <a u="4D94" b="82 35 84 36"/>
+  <a u="4D95" b="82 35 84 37"/>
+  <a u="4D96" b="82 35 84 38"/>
+  <a u="4D97" b="82 35 84 39"/>
+  <a u="4D98" b="82 35 85 30"/>
+  <a u="4D99" b="82 35 85 31"/>
+  <a u="4D9A" b="82 35 85 32"/>
+  <a u="4D9B" b="82 35 85 33"/>
+  <a u="4D9C" b="82 35 85 34"/>
+  <a u="4D9D" b="82 35 85 35"/>
+  <a u="4D9E" b="82 35 85 36"/>
+  <a u="4D9F" b="82 35 85 37"/>
+  <a u="4DA0" b="82 35 85 38"/>
+  <a u="4DA1" b="82 35 85 39"/>
+  <a u="4DA2" b="82 35 86 30"/>
+  <a u="4DA3" b="82 35 86 31"/>
+  <a u="4DA4" b="82 35 86 32"/>
+  <a u="4DA5" b="82 35 86 33"/>
+  <a u="4DA6" b="82 35 86 34"/>
+  <a u="4DA7" b="82 35 86 35"/>
+  <a u="4DA8" b="82 35 86 36"/>
+  <a u="4DA9" b="82 35 86 37"/>
+  <a u="4DAA" b="82 35 86 38"/>
+  <a u="4DAB" b="82 35 86 39"/>
+  <a u="4DAC" b="82 35 87 30"/>
+  <a u="4DAD" b="82 35 87 31"/>
+  <a u="4DAE" b="FE 9F"/>
+  <a u="4DAF" b="82 35 87 32"/>
+  <a u="4DB0" b="82 35 87 33"/>
+  <a u="4DB1" b="82 35 87 34"/>
+  <a u="4DB2" b="82 35 87 35"/>
+  <a u="4DB3" b="82 35 87 36"/>
+  <a u="4DB4" b="82 35 87 37"/>
+  <a u="4DB5" b="82 35 87 38"/>
+  <a u="4DB6" b="82 35 87 39"/>
+  <a u="4DB7" b="82 35 88 30"/>
+  <a u="4DB8" b="82 35 88 31"/>
+  <a u="4DB9" b="82 35 88 32"/>
+  <a u="4DBA" b="82 35 88 33"/>
+  <a u="4DBB" b="82 35 88 34"/>
+  <a u="4DBC" b="82 35 88 35"/>
+  <a u="4DBD" b="82 35 88 36"/>
+  <a u="4DBE" b="82 35 88 37"/>
+  <a u="4DBF" b="82 35 88 38"/>
+  <a u="4DC0" b="82 35 88 39"/>
+  <a u="4DC1" b="82 35 89 30"/>
+  <a u="4DC2" b="82 35 89 31"/>
+  <a u="4DC3" b="82 35 89 32"/>
+  <a u="4DC4" b="82 35 89 33"/>
+  <a u="4DC5" b="82 35 89 34"/>
+  <a u="4DC6" b="82 35 89 35"/>
+  <a u="4DC7" b="82 35 89 36"/>
+  <a u="4DC8" b="82 35 89 37"/>
+  <a u="4DC9" b="82 35 89 38"/>
+  <a u="4DCA" b="82 35 89 39"/>
+  <a u="4DCB" b="82 35 8A 30"/>
+  <a u="4DCC" b="82 35 8A 31"/>
+  <a u="4DCD" b="82 35 8A 32"/>
+  <a u="4DCE" b="82 35 8A 33"/>
+  <a u="4DCF" b="82 35 8A 34"/>
+  <a u="4DD0" b="82 35 8A 35"/>
+  <a u="4DD1" b="82 35 8A 36"/>
+  <a u="4DD2" b="82 35 8A 37"/>
+  <a u="4DD3" b="82 35 8A 38"/>
+  <a u="4DD4" b="82 35 8A 39"/>
+  <a u="4DD5" b="82 35 8B 30"/>
+  <a u="4DD6" b="82 35 8B 31"/>
+  <a u="4DD7" b="82 35 8B 32"/>
+  <a u="4DD8" b="82 35 8B 33"/>
+  <a u="4DD9" b="82 35 8B 34"/>
+  <a u="4DDA" b="82 35 8B 35"/>
+  <a u="4DDB" b="82 35 8B 36"/>
+  <a u="4DDC" b="82 35 8B 37"/>
+  <a u="4DDD" b="82 35 8B 38"/>
+  <a u="4DDE" b="82 35 8B 39"/>
+  <a u="4DDF" b="82 35 8C 30"/>
+  <a u="4DE0" b="82 35 8C 31"/>
+  <a u="4DE1" b="82 35 8C 32"/>
+  <a u="4DE2" b="82 35 8C 33"/>
+  <a u="4DE3" b="82 35 8C 34"/>
+  <a u="4DE4" b="82 35 8C 35"/>
+  <a u="4DE5" b="82 35 8C 36"/>
+  <a u="4DE6" b="82 35 8C 37"/>
+  <a u="4DE7" b="82 35 8C 38"/>
+  <a u="4DE8" b="82 35 8C 39"/>
+  <a u="4DE9" b="82 35 8D 30"/>
+  <a u="4DEA" b="82 35 8D 31"/>
+  <a u="4DEB" b="82 35 8D 32"/>
+  <a u="4DEC" b="82 35 8D 33"/>
+  <a u="4DED" b="82 35 8D 34"/>
+  <a u="4DEE" b="82 35 8D 35"/>
+  <a u="4DEF" b="82 35 8D 36"/>
+  <a u="4DF0" b="82 35 8D 37"/>
+  <a u="4DF1" b="82 35 8D 38"/>
+  <a u="4DF2" b="82 35 8D 39"/>
+  <a u="4DF3" b="82 35 8E 30"/>
+  <a u="4DF4" b="82 35 8E 31"/>
+  <a u="4DF5" b="82 35 8E 32"/>
+  <a u="4DF6" b="82 35 8E 33"/>
+  <a u="4DF7" b="82 35 8E 34"/>
+  <a u="4DF8" b="82 35 8E 35"/>
+  <a u="4DF9" b="82 35 8E 36"/>
+  <a u="4DFA" b="82 35 8E 37"/>
+  <a u="4DFB" b="82 35 8E 38"/>
+  <a u="4DFC" b="82 35 8E 39"/>
+  <a u="4DFD" b="82 35 8F 30"/>
+  <a u="4DFE" b="82 35 8F 31"/>
+  <a u="4DFF" b="82 35 8F 32"/>
+  <a u="4E00" b="D2 BB"/>
+  <a u="4E01" b="B6 A1"/>
+  <a u="4E02" b="81 40"/>
+  <a u="4E03" b="C6 DF"/>
+  <a u="4E04" b="81 41"/>
+  <a u="4E05" b="81 42"/>
+  <a u="4E06" b="81 43"/>
+  <a u="4E07" b="CD F2"/>
+  <a u="4E08" b="D5 C9"/>
+  <a u="4E09" b="C8 FD"/>
+  <a u="4E0A" b="C9 CF"/>
+  <a u="4E0B" b="CF C2"/>
+  <a u="4E0C" b="D8 A2"/>
+  <a u="4E0D" b="B2 BB"/>
+  <a u="4E0E" b="D3 EB"/>
+  <a u="4E0F" b="81 44"/>
+  <a u="4E10" b="D8 A4"/>
+  <a u="4E11" b="B3 F3"/>
+  <a u="4E12" b="81 45"/>
+  <a u="4E13" b="D7 A8"/>
+  <a u="4E14" b="C7 D2"/>
+  <a u="4E15" b="D8 A7"/>
+  <a u="4E16" b="CA C0"/>
+  <a u="4E17" b="81 46"/>
+  <a u="4E18" b="C7 F0"/>
+  <a u="4E19" b="B1 FB"/>
+  <a u="4E1A" b="D2 B5"/>
+  <a u="4E1B" b="B4 D4"/>
+  <a u="4E1C" b="B6 AB"/>
+  <a u="4E1D" b="CB BF"/>
+  <a u="4E1E" b="D8 A9"/>
+  <a u="4E1F" b="81 47"/>
+  <a u="4E20" b="81 48"/>
+  <a u="4E21" b="81 49"/>
+  <a u="4E22" b="B6 AA"/>
+  <a u="4E23" b="81 4A"/>
+  <a u="4E24" b="C1 BD"/>
+  <a u="4E25" b="D1 CF"/>
+  <a u="4E26" b="81 4B"/>
+  <a u="4E27" b="C9 A5"/>
+  <a u="4E28" b="D8 AD"/>
+  <a u="4E29" b="81 4C"/>
+  <a u="4E2A" b="B8 F6"/>
+  <a u="4E2B" b="D1 BE"/>
+  <a u="4E2C" b="E3 DC"/>
+  <a u="4E2D" b="D6 D0"/>
+  <a u="4E2E" b="81 4D"/>
+  <a u="4E2F" b="81 4E"/>
+  <a u="4E30" b="B7 E1"/>
+  <a u="4E31" b="81 4F"/>
+  <a u="4E32" b="B4 AE"/>
+  <a u="4E33" b="81 50"/>
+  <a u="4E34" b="C1 D9"/>
+  <a u="4E35" b="81 51"/>
+  <a u="4E36" b="D8 BC"/>
+  <a u="4E37" b="81 52"/>
+  <a u="4E38" b="CD E8"/>
+  <a u="4E39" b="B5 A4"/>
+  <a u="4E3A" b="CE AA"/>
+  <a u="4E3B" b="D6 F7"/>
+  <a u="4E3C" b="81 53"/>
+  <a u="4E3D" b="C0 F6"/>
+  <a u="4E3E" b="BE D9"/>
+  <a u="4E3F" b="D8 AF"/>
+  <a u="4E40" b="81 54"/>
+  <a u="4E41" b="81 55"/>
+  <a u="4E42" b="81 56"/>
+  <a u="4E43" b="C4 CB"/>
+  <a u="4E44" b="81 57"/>
+  <a u="4E45" b="BE C3"/>
+  <a u="4E46" b="81 58"/>
+  <a u="4E47" b="D8 B1"/>
+  <a u="4E48" b="C3 B4"/>
+  <a u="4E49" b="D2 E5"/>
+  <a u="4E4A" b="81 59"/>
+  <a u="4E4B" b="D6 AE"/>
+  <a u="4E4C" b="CE DA"/>
+  <a u="4E4D" b="D5 A7"/>
+  <a u="4E4E" b="BA F5"/>
+  <a u="4E4F" b="B7 A6"/>
+  <a u="4E50" b="C0 D6"/>
+  <a u="4E51" b="81 5A"/>
+  <a u="4E52" b="C6 B9"/>
+  <a u="4E53" b="C5 D2"/>
+  <a u="4E54" b="C7 C7"/>
+  <a u="4E55" b="81 5B"/>
+  <a u="4E56" b="B9 D4"/>
+  <a u="4E57" b="81 5C"/>
+  <a u="4E58" b="B3 CB"/>
+  <a u="4E59" b="D2 D2"/>
+  <a u="4E5A" b="81 5D"/>
+  <a u="4E5B" b="81 5E"/>
+  <a u="4E5C" b="D8 BF"/>
+  <a u="4E5D" b="BE C5"/>
+  <a u="4E5E" b="C6 F2"/>
+  <a u="4E5F" b="D2 B2"/>
+  <a u="4E60" b="CF B0"/>
+  <a u="4E61" b="CF E7"/>
+  <a u="4E62" b="81 5F"/>
+  <a u="4E63" b="81 60"/>
+  <a u="4E64" b="81 61"/>
+  <a u="4E65" b="81 62"/>
+  <a u="4E66" b="CA E9"/>
+  <a u="4E67" b="81 63"/>
+  <a u="4E68" b="81 64"/>
+  <a u="4E69" b="D8 C0"/>
+  <a u="4E6A" b="81 65"/>
+  <a u="4E6B" b="81 66"/>
+  <a u="4E6C" b="81 67"/>
+  <a u="4E6D" b="81 68"/>
+  <a u="4E6E" b="81 69"/>
+  <a u="4E6F" b="81 6A"/>
+  <a u="4E70" b="C2 F2"/>
+  <a u="4E71" b="C2 D2"/>
+  <a u="4E72" b="81 6B"/>
+  <a u="4E73" b="C8 E9"/>
+  <a u="4E74" b="81 6C"/>
+  <a u="4E75" b="81 6D"/>
+  <a u="4E76" b="81 6E"/>
+  <a u="4E77" b="81 6F"/>
+  <a u="4E78" b="81 70"/>
+  <a u="4E79" b="81 71"/>
+  <a u="4E7A" b="81 72"/>
+  <a u="4E7B" b="81 73"/>
+  <a u="4E7C" b="81 74"/>
+  <a u="4E7D" b="81 75"/>
+  <a u="4E7E" b="C7 AC"/>
+  <a u="4E7F" b="81 76"/>
+  <a u="4E80" b="81 77"/>
+  <a u="4E81" b="81 78"/>
+  <a u="4E82" b="81 79"/>
+  <a u="4E83" b="81 7A"/>
+  <a u="4E84" b="81 7B"/>
+  <a u="4E85" b="81 7C"/>
+  <a u="4E86" b="C1 CB"/>
+  <a u="4E87" b="81 7D"/>
+  <a u="4E88" b="D3 E8"/>
+  <a u="4E89" b="D5 F9"/>
+  <a u="4E8A" b="81 7E"/>
+  <a u="4E8B" b="CA C2"/>
+  <a u="4E8C" b="B6 FE"/>
+  <a u="4E8D" b="D8 A1"/>
+  <a u="4E8E" b="D3 DA"/>
+  <a u="4E8F" b="BF F7"/>
+  <a u="4E90" b="81 80"/>
+  <a u="4E91" b="D4 C6"/>
+  <a u="4E92" b="BB A5"/>
+  <a u="4E93" b="D8 C1"/>
+  <a u="4E94" b="CE E5"/>
+  <a u="4E95" b="BE AE"/>
+  <a u="4E96" b="81 81"/>
+  <a u="4E97" b="81 82"/>
+  <a u="4E98" b="D8 A8"/>
+  <a u="4E99" b="81 83"/>
+  <a u="4E9A" b="D1 C7"/>
+  <a u="4E9B" b="D0 A9"/>
+  <a u="4E9C" b="81 84"/>
+  <a u="4E9D" b="81 85"/>
+  <a u="4E9E" b="81 86"/>
+  <a u="4E9F" b="D8 BD"/>
+  <a u="4EA0" b="D9 EF"/>
+  <a u="4EA1" b="CD F6"/>
+  <a u="4EA2" b="BF BA"/>
+  <a u="4EA3" b="81 87"/>
+  <a u="4EA4" b="BD BB"/>
+  <a u="4EA5" b="BA A5"/>
+  <a u="4EA6" b="D2 E0"/>
+  <a u="4EA7" b="B2 FA"/>
+  <a u="4EA8" b="BA E0"/>
+  <a u="4EA9" b="C4 B6"/>
+  <a u="4EAA" b="81 88"/>
+  <a u="4EAB" b="CF ED"/>
+  <a u="4EAC" b="BE A9"/>
+  <a u="4EAD" b="CD A4"/>
+  <a u="4EAE" b="C1 C1"/>
+  <a u="4EAF" b="81 89"/>
+  <a u="4EB0" b="81 8A"/>
+  <a u="4EB1" b="81 8B"/>
+  <a u="4EB2" b="C7 D7"/>
+  <a u="4EB3" b="D9 F1"/>
+  <a u="4EB4" b="81 8C"/>
+  <a u="4EB5" b="D9 F4"/>
+  <a u="4EB6" b="81 8D"/>
+  <a u="4EB7" b="81 8E"/>
+  <a u="4EB8" b="81 8F"/>
+  <a u="4EB9" b="81 90"/>
+  <a u="4EBA" b="C8 CB"/>
+  <a u="4EBB" b="D8 E9"/>
+  <a u="4EBC" b="81 91"/>
+  <a u="4EBD" b="81 92"/>
+  <a u="4EBE" b="81 93"/>
+  <a u="4EBF" b="D2 DA"/>
+  <a u="4EC0" b="CA B2"/>
+  <a u="4EC1" b="C8 CA"/>
+  <a u="4EC2" b="D8 EC"/>
+  <a u="4EC3" b="D8 EA"/>
+  <a u="4EC4" b="D8 C6"/>
+  <a u="4EC5" b="BD F6"/>
+  <a u="4EC6" b="C6 CD"/>
+  <a u="4EC7" b="B3 F0"/>
+  <a u="4EC8" b="81 94"/>
+  <a u="4EC9" b="D8 EB"/>
+  <a u="4ECA" b="BD F1"/>
+  <a u="4ECB" b="BD E9"/>
+  <a u="4ECC" b="81 95"/>
+  <a u="4ECD" b="C8 D4"/>
+  <a u="4ECE" b="B4 D3"/>
+  <a u="4ECF" b="81 96"/>
+  <a u="4ED0" b="81 97"/>
+  <a u="4ED1" b="C2 D8"/>
+  <a u="4ED2" b="81 98"/>
+  <a u="4ED3" b="B2 D6"/>
+  <a u="4ED4" b="D7 D0"/>
+  <a u="4ED5" b="CA CB"/>
+  <a u="4ED6" b="CB FB"/>
+  <a u="4ED7" b="D5 CC"/>
+  <a u="4ED8" b="B8 B6"/>
+  <a u="4ED9" b="CF C9"/>
+  <a u="4EDA" b="81 99"/>
+  <a u="4EDB" b="81 9A"/>
+  <a u="4EDC" b="81 9B"/>
+  <a u="4EDD" b="D9 DA"/>
+  <a u="4EDE" b="D8 F0"/>
+  <a u="4EDF" b="C7 AA"/>
+  <a u="4EE0" b="81 9C"/>
+  <a u="4EE1" b="D8 EE"/>
+  <a u="4EE2" b="81 9D"/>
+  <a u="4EE3" b="B4 FA"/>
+  <a u="4EE4" b="C1 EE"/>
+  <a u="4EE5" b="D2 D4"/>
+  <a u="4EE6" b="81 9E"/>
+  <a u="4EE7" b="81 9F"/>
+  <a u="4EE8" b="D8 ED"/>
+  <a u="4EE9" b="81 A0"/>
+  <a u="4EEA" b="D2 C7"/>
+  <a u="4EEB" b="D8 EF"/>
+  <a u="4EEC" b="C3 C7"/>
+  <a u="4EED" b="81 A1"/>
+  <a u="4EEE" b="81 A2"/>
+  <a u="4EEF" b="81 A3"/>
+  <a u="4EF0" b="D1 F6"/>
+  <a u="4EF1" b="81 A4"/>
+  <a u="4EF2" b="D6 D9"/>
+  <a u="4EF3" b="D8 F2"/>
+  <a u="4EF4" b="81 A5"/>
+  <a u="4EF5" b="D8 F5"/>
+  <a u="4EF6" b="BC FE"/>
+  <a u="4EF7" b="BC DB"/>
+  <a u="4EF8" b="81 A6"/>
+  <a u="4EF9" b="81 A7"/>
+  <a u="4EFA" b="81 A8"/>
+  <a u="4EFB" b="C8 CE"/>
+  <a u="4EFC" b="81 A9"/>
+  <a u="4EFD" b="B7 DD"/>
+  <a u="4EFE" b="81 AA"/>
+  <a u="4EFF" b="B7 C2"/>
+  <a u="4F00" b="81 AB"/>
+  <a u="4F01" b="C6 F3"/>
+  <a u="4F02" b="81 AC"/>
+  <a u="4F03" b="81 AD"/>
+  <a u="4F04" b="81 AE"/>
+  <a u="4F05" b="81 AF"/>
+  <a u="4F06" b="81 B0"/>
+  <a u="4F07" b="81 B1"/>
+  <a u="4F08" b="81 B2"/>
+  <a u="4F09" b="D8 F8"/>
+  <a u="4F0A" b="D2 C1"/>
+  <a u="4F0B" b="81 B3"/>
+  <a u="4F0C" b="81 B4"/>
+  <a u="4F0D" b="CE E9"/>
+  <a u="4F0E" b="BC BF"/>
+  <a u="4F0F" b="B7 FC"/>
+  <a u="4F10" b="B7 A5"/>
+  <a u="4F11" b="D0 DD"/>
+  <a u="4F12" b="81 B5"/>
+  <a u="4F13" b="81 B6"/>
+  <a u="4F14" b="81 B7"/>
+  <a u="4F15" b="81 B8"/>
+  <a u="4F16" b="81 B9"/>
+  <a u="4F17" b="D6 DA"/>
+  <a u="4F18" b="D3 C5"/>
+  <a u="4F19" b="BB EF"/>
+  <a u="4F1A" b="BB E1"/>
+  <a u="4F1B" b="D8 F1"/>
+  <a u="4F1C" b="81 BA"/>
+  <a u="4F1D" b="81 BB"/>
+  <a u="4F1E" b="C9 A1"/>
+  <a u="4F1F" b="CE B0"/>
+  <a u="4F20" b="B4 AB"/>
+  <a u="4F21" b="81 BC"/>
+  <a u="4F22" b="D8 F3"/>
+  <a u="4F23" b="81 BD"/>
+  <a u="4F24" b="C9 CB"/>
+  <a u="4F25" b="D8 F6"/>
+  <a u="4F26" b="C2 D7"/>
+  <a u="4F27" b="D8 F7"/>
+  <a u="4F28" b="81 BE"/>
+  <a u="4F29" b="81 BF"/>
+  <a u="4F2A" b="CE B1"/>
+  <a u="4F2B" b="D8 F9"/>
+  <a u="4F2C" b="81 C0"/>
+  <a u="4F2D" b="81 C1"/>
+  <a u="4F2E" b="81 C2"/>
+  <a u="4F2F" b="B2 AE"/>
+  <a u="4F30" b="B9 C0"/>
+  <a u="4F31" b="81 C3"/>
+  <a u="4F32" b="D9 A3"/>
+  <a u="4F33" b="81 C4"/>
+  <a u="4F34" b="B0 E9"/>
+  <a u="4F35" b="81 C5"/>
+  <a u="4F36" b="C1 E6"/>
+  <a u="4F37" b="81 C6"/>
+  <a u="4F38" b="C9 EC"/>
+  <a u="4F39" b="81 C7"/>
+  <a u="4F3A" b="CB C5"/>
+  <a u="4F3B" b="81 C8"/>
+  <a u="4F3C" b="CB C6"/>
+  <a u="4F3D" b="D9 A4"/>
+  <a u="4F3E" b="81 C9"/>
+  <a u="4F3F" b="81 CA"/>
+  <a u="4F40" b="81 CB"/>
+  <a u="4F41" b="81 CC"/>
+  <a u="4F42" b="81 CD"/>
+  <a u="4F43" b="B5 E8"/>
+  <a u="4F44" b="81 CE"/>
+  <a u="4F45" b="81 CF"/>
+  <a u="4F46" b="B5 AB"/>
+  <a u="4F47" b="81 D0"/>
+  <a u="4F48" b="81 D1"/>
+  <a u="4F49" b="81 D2"/>
+  <a u="4F4A" b="81 D3"/>
+  <a u="4F4B" b="81 D4"/>
+  <a u="4F4C" b="81 D5"/>
+  <a u="4F4D" b="CE BB"/>
+  <a u="4F4E" b="B5 CD"/>
+  <a u="4F4F" b="D7 A1"/>
+  <a u="4F50" b="D7 F4"/>
+  <a u="4F51" b="D3 D3"/>
+  <a u="4F52" b="81 D6"/>
+  <a u="4F53" b="CC E5"/>
+  <a u="4F54" b="81 D7"/>
+  <a u="4F55" b="BA CE"/>
+  <a u="4F56" b="81 D8"/>
+  <a u="4F57" b="D9 A2"/>
+  <a u="4F58" b="D9 DC"/>
+  <a u="4F59" b="D3 E0"/>
+  <a u="4F5A" b="D8 FD"/>
+  <a u="4F5B" b="B7 F0"/>
+  <a u="4F5C" b="D7 F7"/>
+  <a u="4F5D" b="D8 FE"/>
+  <a u="4F5E" b="D8 FA"/>
+  <a u="4F5F" b="D9 A1"/>
+  <a u="4F60" b="C4 E3"/>
+  <a u="4F61" b="81 D9"/>
+  <a u="4F62" b="81 DA"/>
+  <a u="4F63" b="D3 B6"/>
+  <a u="4F64" b="D8 F4"/>
+  <a u="4F65" b="D9 DD"/>
+  <a u="4F66" b="81 DB"/>
+  <a u="4F67" b="D8 FB"/>
+  <a u="4F68" b="81 DC"/>
+  <a u="4F69" b="C5 E5"/>
+  <a u="4F6A" b="81 DD"/>
+  <a u="4F6B" b="81 DE"/>
+  <a u="4F6C" b="C0 D0"/>
+  <a u="4F6D" b="81 DF"/>
+  <a u="4F6E" b="81 E0"/>
+  <a u="4F6F" b="D1 F0"/>
+  <a u="4F70" b="B0 DB"/>
+  <a u="4F71" b="81 E1"/>
+  <a u="4F72" b="81 E2"/>
+  <a u="4F73" b="BC D1"/>
+  <a u="4F74" b="D9 A6"/>
+  <a u="4F75" b="81 E3"/>
+  <a u="4F76" b="D9 A5"/>
+  <a u="4F77" b="81 E4"/>
+  <a u="4F78" b="81 E5"/>
+  <a u="4F79" b="81 E6"/>
+  <a u="4F7A" b="81 E7"/>
+  <a u="4F7B" b="D9 AC"/>
+  <a u="4F7C" b="D9 AE"/>
+  <a u="4F7D" b="81 E8"/>
+  <a u="4F7E" b="D9 AB"/>
+  <a u="4F7F" b="CA B9"/>
+  <a u="4F80" b="81 E9"/>
+  <a u="4F81" b="81 EA"/>
+  <a u="4F82" b="81 EB"/>
+  <a u="4F83" b="D9 A9"/>
+  <a u="4F84" b="D6 B6"/>
+  <a u="4F85" b="81 EC"/>
+  <a u="4F86" b="81 ED"/>
+  <a u="4F87" b="81 EE"/>
+  <a u="4F88" b="B3 DE"/>
+  <a u="4F89" b="D9 A8"/>
+  <a u="4F8A" b="81 EF"/>
+  <a u="4F8B" b="C0 FD"/>
+  <a u="4F8C" b="81 F0"/>
+  <a u="4F8D" b="CA CC"/>
+  <a u="4F8E" b="81 F1"/>
+  <a u="4F8F" b="D9 AA"/>
+  <a u="4F90" b="81 F2"/>
+  <a u="4F91" b="D9 A7"/>
+  <a u="4F92" b="81 F3"/>
+  <a u="4F93" b="81 F4"/>
+  <a u="4F94" b="D9 B0"/>
+  <a u="4F95" b="81 F5"/>
+  <a u="4F96" b="81 F6"/>
+  <a u="4F97" b="B6 B1"/>
+  <a u="4F98" b="81 F7"/>
+  <a u="4F99" b="81 F8"/>
+  <a u="4F9A" b="81 F9"/>
+  <a u="4F9B" b="B9 A9"/>
+  <a u="4F9C" b="81 FA"/>
+  <a u="4F9D" b="D2 C0"/>
+  <a u="4F9E" b="81 FB"/>
+  <a u="4F9F" b="81 FC"/>
+  <a u="4FA0" b="CF C0"/>
+  <a u="4FA1" b="81 FD"/>
+  <a u="4FA2" b="81 FE"/>
+  <a u="4FA3" b="C2 C2"/>
+  <a u="4FA4" b="82 40"/>
+  <a u="4FA5" b="BD C4"/>
+  <a u="4FA6" b="D5 EC"/>
+  <a u="4FA7" b="B2 E0"/>
+  <a u="4FA8" b="C7 C8"/>
+  <a u="4FA9" b="BF EB"/>
+  <a u="4FAA" b="D9 AD"/>
+  <a u="4FAB" b="82 41"/>
+  <a u="4FAC" b="D9 AF"/>
+  <a u="4FAD" b="82 42"/>
+  <a u="4FAE" b="CE EA"/>
+  <a u="4FAF" b="BA EE"/>
+  <a u="4FB0" b="82 43"/>
+  <a u="4FB1" b="82 44"/>
+  <a u="4FB2" b="82 45"/>
+  <a u="4FB3" b="82 46"/>
+  <a u="4FB4" b="82 47"/>
+  <a u="4FB5" b="C7 D6"/>
+  <a u="4FB6" b="82 48"/>
+  <a u="4FB7" b="82 49"/>
+  <a u="4FB8" b="82 4A"/>
+  <a u="4FB9" b="82 4B"/>
+  <a u="4FBA" b="82 4C"/>
+  <a u="4FBB" b="82 4D"/>
+  <a u="4FBC" b="82 4E"/>
+  <a u="4FBD" b="82 4F"/>
+  <a u="4FBE" b="82 50"/>
+  <a u="4FBF" b="B1 E3"/>
+  <a u="4FC0" b="82 51"/>
+  <a u="4FC1" b="82 52"/>
+  <a u="4FC2" b="82 53"/>
+  <a u="4FC3" b="B4 D9"/>
+  <a u="4FC4" b="B6 ED"/>
+  <a u="4FC5" b="D9 B4"/>
+  <a u="4FC6" b="82 54"/>
+  <a u="4FC7" b="82 55"/>
+  <a u="4FC8" b="82 56"/>
+  <a u="4FC9" b="82 57"/>
+  <a u="4FCA" b="BF A1"/>
+  <a u="4FCB" b="82 58"/>
+  <a u="4FCC" b="82 59"/>
+  <a u="4FCD" b="82 5A"/>
+  <a u="4FCE" b="D9 DE"/>
+  <a u="4FCF" b="C7 CE"/>
+  <a u="4FD0" b="C0 FE"/>
+  <a u="4FD1" b="D9 B8"/>
+  <a u="4FD2" b="82 5B"/>
+  <a u="4FD3" b="82 5C"/>
+  <a u="4FD4" b="82 5D"/>
+  <a u="4FD5" b="82 5E"/>
+  <a u="4FD6" b="82 5F"/>
+  <a u="4FD7" b="CB D7"/>
+  <a u="4FD8" b="B7 FD"/>
+  <a u="4FD9" b="82 60"/>
+  <a u="4FDA" b="D9 B5"/>
+  <a u="4FDB" b="82 61"/>
+  <a u="4FDC" b="D9 B7"/>
+  <a u="4FDD" b="B1 A3"/>
+  <a u="4FDE" b="D3 E1"/>
+  <a u="4FDF" b="D9 B9"/>
+  <a u="4FE0" b="82 62"/>
+  <a u="4FE1" b="D0 C5"/>
+  <a u="4FE2" b="82 63"/>
+  <a u="4FE3" b="D9 B6"/>
+  <a u="4FE4" b="82 64"/>
+  <a u="4FE5" b="82 65"/>
+  <a u="4FE6" b="D9 B1"/>
+  <a u="4FE7" b="82 66"/>
+  <a u="4FE8" b="D9 B2"/>
+  <a u="4FE9" b="C1 A9"/>
+  <a u="4FEA" b="D9 B3"/>
+  <a u="4FEB" b="82 67"/>
+  <a u="4FEC" b="82 68"/>
+  <a u="4FED" b="BC F3"/>
+  <a u="4FEE" b="D0 DE"/>
+  <a u="4FEF" b="B8 A9"/>
+  <a u="4FF0" b="82 69"/>
+  <a u="4FF1" b="BE E3"/>
+  <a u="4FF2" b="82 6A"/>
+  <a u="4FF3" b="D9 BD"/>
+  <a u="4FF4" b="82 6B"/>
+  <a u="4FF5" b="82 6C"/>
+  <a u="4FF6" b="82 6D"/>
+  <a u="4FF7" b="82 6E"/>
+  <a u="4FF8" b="D9 BA"/>
+  <a u="4FF9" b="82 6F"/>
+  <a u="4FFA" b="B0 B3"/>
+  <a u="4FFB" b="82 70"/>
+  <a u="4FFC" b="82 71"/>
+  <a u="4FFD" b="82 72"/>
+  <a u="4FFE" b="D9 C2"/>
+  <a u="4FFF" b="82 73"/>
+  <a u="5000" b="82 74"/>
+  <a u="5001" b="82 75"/>
+  <a u="5002" b="82 76"/>
+  <a u="5003" b="82 77"/>
+  <a u="5004" b="82 78"/>
+  <a u="5005" b="82 79"/>
+  <a u="5006" b="82 7A"/>
+  <a u="5007" b="82 7B"/>
+  <a u="5008" b="82 7C"/>
+  <a u="5009" b="82 7D"/>
+  <a u="500A" b="82 7E"/>
+  <a u="500B" b="82 80"/>
+  <a u="500C" b="D9 C4"/>
+  <a u="500D" b="B1 B6"/>
+  <a u="500E" b="82 81"/>
+  <a u="500F" b="D9 BF"/>
+  <a u="5010" b="82 82"/>
+  <a u="5011" b="82 83"/>
+  <a u="5012" b="B5 B9"/>
+  <a u="5013" b="82 84"/>
+  <a u="5014" b="BE F3"/>
+  <a u="5015" b="82 85"/>
+  <a u="5016" b="82 86"/>
+  <a u="5017" b="82 87"/>
+  <a u="5018" b="CC C8"/>
+  <a u="5019" b="BA F2"/>
+  <a u="501A" b="D2 D0"/>
+  <a u="501B" b="82 88"/>
+  <a u="501C" b="D9 C3"/>
+  <a u="501D" b="82 89"/>
+  <a u="501E" b="82 8A"/>
+  <a u="501F" b="BD E8"/>
+  <a u="5020" b="82 8B"/>
+  <a u="5021" b="B3 AB"/>
+  <a u="5022" b="82 8C"/>
+  <a u="5023" b="82 8D"/>
+  <a u="5024" b="82 8E"/>
+  <a u="5025" b="D9 C5"/>
+  <a u="5026" b="BE EB"/>
+  <a u="5027" b="82 8F"/>
+  <a u="5028" b="D9 C6"/>
+  <a u="5029" b="D9 BB"/>
+  <a u="502A" b="C4 DF"/>
+  <a u="502B" b="82 90"/>
+  <a u="502C" b="D9 BE"/>
+  <a u="502D" b="D9 C1"/>
+  <a u="502E" b="D9 C0"/>
+  <a u="502F" b="82 91"/>
+  <a u="5030" b="82 92"/>
+  <a u="5031" b="82 93"/>
+  <a u="5032" b="82 94"/>
+  <a u="5033" b="82 95"/>
+  <a u="5034" b="82 96"/>
+  <a u="5035" b="82 97"/>
+  <a u="5036" b="82 98"/>
+  <a u="5037" b="82 99"/>
+  <a u="5038" b="82 9A"/>
+  <a u="5039" b="82 9B"/>
+  <a u="503A" b="D5 AE"/>
+  <a u="503B" b="82 9C"/>
+  <a u="503C" b="D6 B5"/>
+  <a u="503D" b="82 9D"/>
+  <a u="503E" b="C7 E3"/>
+  <a u="503F" b="82 9E"/>
+  <a u="5040" b="82 9F"/>
+  <a u="5041" b="82 A0"/>
+  <a u="5042" b="82 A1"/>
+  <a u="5043" b="D9 C8"/>
+  <a u="5044" b="82 A2"/>
+  <a u="5045" b="82 A3"/>
+  <a u="5046" b="82 A4"/>
+  <a u="5047" b="BC D9"/>
+  <a u="5048" b="D9 CA"/>
+  <a u="5049" b="82 A5"/>
+  <a u="504A" b="82 A6"/>
+  <a u="504B" b="82 A7"/>
+  <a u="504C" b="D9 BC"/>
+  <a u="504D" b="82 A8"/>
+  <a u="504E" b="D9 CB"/>
+  <a u="504F" b="C6 AB"/>
+  <a u="5050" b="82 A9"/>
+  <a u="5051" b="82 AA"/>
+  <a u="5052" b="82 AB"/>
+  <a u="5053" b="82 AC"/>
+  <a u="5054" b="82 AD"/>
+  <a u="5055" b="D9 C9"/>
+  <a u="5056" b="82 AE"/>
+  <a u="5057" b="82 AF"/>
+  <a u="5058" b="82 B0"/>
+  <a u="5059" b="82 B1"/>
+  <a u="505A" b="D7 F6"/>
+  <a u="505B" b="82 B2"/>
+  <a u="505C" b="CD A3"/>
+  <a u="505D" b="82 B3"/>
+  <a u="505E" b="82 B4"/>
+  <a u="505F" b="82 B5"/>
+  <a u="5060" b="82 B6"/>
+  <a u="5061" b="82 B7"/>
+  <a u="5062" b="82 B8"/>
+  <a u="5063" b="82 B9"/>
+  <a u="5064" b="82 BA"/>
+  <a u="5065" b="BD A1"/>
+  <a u="5066" b="82 BB"/>
+  <a u="5067" b="82 BC"/>
+  <a u="5068" b="82 BD"/>
+  <a u="5069" b="82 BE"/>
+  <a u="506A" b="82 BF"/>
+  <a u="506B" b="82 C0"/>
+  <a u="506C" b="D9 CC"/>
+  <a u="506D" b="82 C1"/>
+  <a u="506E" b="82 C2"/>
+  <a u="506F" b="82 C3"/>
+  <a u="5070" b="82 C4"/>
+  <a u="5071" b="82 C5"/>
+  <a u="5072" b="82 C6"/>
+  <a u="5073" b="82 C7"/>
+  <a u="5074" b="82 C8"/>
+  <a u="5075" b="82 C9"/>
+  <a u="5076" b="C5 BC"/>
+  <a u="5077" b="CD B5"/>
+  <a u="5078" b="82 CA"/>
+  <a u="5079" b="82 CB"/>
+  <a u="507A" b="82 CC"/>
+  <a u="507B" b="D9 CD"/>
+  <a u="507C" b="82 CD"/>
+  <a u="507D" b="82 CE"/>
+  <a u="507E" b="D9 C7"/>
+  <a u="507F" b="B3 A5"/>
+  <a u="5080" b="BF FE"/>
+  <a u="5081" b="82 CF"/>
+  <a u="5082" b="82 D0"/>
+  <a u="5083" b="82 D1"/>
+  <a u="5084" b="82 D2"/>
+  <a u="5085" b="B8 B5"/>
+  <a u="5086" b="82 D3"/>
+  <a u="5087" b="82 D4"/>
+  <a u="5088" b="C0 FC"/>
+  <a u="5089" b="82 D5"/>
+  <a u="508A" b="82 D6"/>
+  <a u="508B" b="82 D7"/>
+  <a u="508C" b="82 D8"/>
+  <a u="508D" b="B0 F8"/>
+  <a u="508E" b="82 D9"/>
+  <a u="508F" b="82 DA"/>
+  <a u="5090" b="82 DB"/>
+  <a u="5091" b="82 DC"/>
+  <a u="5092" b="82 DD"/>
+  <a u="5093" b="82 DE"/>
+  <a u="5094" b="82 DF"/>
+  <a u="5095" b="82 E0"/>
+  <a u="5096" b="82 E1"/>
+  <a u="5097" b="82 E2"/>
+  <a u="5098" b="82 E3"/>
+  <a u="5099" b="82 E4"/>
+  <a u="509A" b="82 E5"/>
+  <a u="509B" b="82 E6"/>
+  <a u="509C" b="82 E7"/>
+  <a u="509D" b="82 E8"/>
+  <a u="509E" b="82 E9"/>
+  <a u="509F" b="82 EA"/>
+  <a u="50A0" b="82 EB"/>
+  <a u="50A1" b="82 EC"/>
+  <a u="50A2" b="82 ED"/>
+  <a u="50A3" b="B4 F6"/>
+  <a u="50A4" b="82 EE"/>
+  <a u="50A5" b="D9 CE"/>
+  <a u="50A6" b="82 EF"/>
+  <a u="50A7" b="D9 CF"/>
+  <a u="50A8" b="B4 A2"/>
+  <a u="50A9" b="D9 D0"/>
+  <a u="50AA" b="82 F0"/>
+  <a u="50AB" b="82 F1"/>
+  <a u="50AC" b="B4 DF"/>
+  <a u="50AD" b="82 F2"/>
+  <a u="50AE" b="82 F3"/>
+  <a u="50AF" b="82 F4"/>
+  <a u="50B0" b="82 F5"/>
+  <a u="50B1" b="82 F6"/>
+  <a u="50B2" b="B0 C1"/>
+  <a u="50B3" b="82 F7"/>
+  <a u="50B4" b="82 F8"/>
+  <a u="50B5" b="82 F9"/>
+  <a u="50B6" b="82 FA"/>
+  <a u="50B7" b="82 FB"/>
+  <a u="50B8" b="82 FC"/>
+  <a u="50B9" b="82 FD"/>
+  <a u="50BA" b="D9 D1"/>
+  <a u="50BB" b="C9 B5"/>
+  <a u="50BC" b="82 FE"/>
+  <a u="50BD" b="83 40"/>
+  <a u="50BE" b="83 41"/>
+  <a u="50BF" b="83 42"/>
+  <a u="50C0" b="83 43"/>
+  <a u="50C1" b="83 44"/>
+  <a u="50C2" b="83 45"/>
+  <a u="50C3" b="83 46"/>
+  <a u="50C4" b="83 47"/>
+  <a u="50C5" b="83 48"/>
+  <a u="50C6" b="83 49"/>
+  <a u="50C7" b="83 4A"/>
+  <a u="50C8" b="83 4B"/>
+  <a u="50C9" b="83 4C"/>
+  <a u="50CA" b="83 4D"/>
+  <a u="50CB" b="83 4E"/>
+  <a u="50CC" b="83 4F"/>
+  <a u="50CD" b="83 50"/>
+  <a u="50CE" b="83 51"/>
+  <a u="50CF" b="CF F1"/>
+  <a u="50D0" b="83 52"/>
+  <a u="50D1" b="83 53"/>
+  <a u="50D2" b="83 54"/>
+  <a u="50D3" b="83 55"/>
+  <a u="50D4" b="83 56"/>
+  <a u="50D5" b="83 57"/>
+  <a u="50D6" b="D9 D2"/>
+  <a u="50D7" b="83 58"/>
+  <a u="50D8" b="83 59"/>
+  <a u="50D9" b="83 5A"/>
+  <a u="50DA" b="C1 C5"/>
+  <a u="50DB" b="83 5B"/>
+  <a u="50DC" b="83 5C"/>
+  <a u="50DD" b="83 5D"/>
+  <a u="50DE" b="83 5E"/>
+  <a u="50DF" b="83 5F"/>
+  <a u="50E0" b="83 60"/>
+  <a u="50E1" b="83 61"/>
+  <a u="50E2" b="83 62"/>
+  <a u="50E3" b="83 63"/>
+  <a u="50E4" b="83 64"/>
+  <a u="50E5" b="83 65"/>
+  <a u="50E6" b="D9 D6"/>
+  <a u="50E7" b="C9 AE"/>
+  <a u="50E8" b="83 66"/>
+  <a u="50E9" b="83 67"/>
+  <a u="50EA" b="83 68"/>
+  <a u="50EB" b="83 69"/>
+  <a u="50EC" b="D9 D5"/>
+  <a u="50ED" b="D9 D4"/>
+  <a u="50EE" b="D9 D7"/>
+  <a u="50EF" b="83 6A"/>
+  <a u="50F0" b="83 6B"/>
+  <a u="50F1" b="83 6C"/>
+  <a u="50F2" b="83 6D"/>
+  <a u="50F3" b="CB DB"/>
+  <a u="50F4" b="83 6E"/>
+  <a u="50F5" b="BD A9"/>
+  <a u="50F6" b="83 6F"/>
+  <a u="50F7" b="83 70"/>
+  <a u="50F8" b="83 71"/>
+  <a u="50F9" b="83 72"/>
+  <a u="50FA" b="83 73"/>
+  <a u="50FB" b="C6 A7"/>
+  <a u="50FC" b="83 74"/>
+  <a u="50FD" b="83 75"/>
+  <a u="50FE" b="83 76"/>
+  <a u="50FF" b="83 77"/>
+  <a u="5100" b="83 78"/>
+  <a u="5101" b="83 79"/>
+  <a u="5102" b="83 7A"/>
+  <a u="5103" b="83 7B"/>
+  <a u="5104" b="83 7C"/>
+  <a u="5105" b="83 7D"/>
+  <a u="5106" b="D9 D3"/>
+  <a u="5107" b="D9 D8"/>
+  <a u="5108" b="83 7E"/>
+  <a u="5109" b="83 80"/>
+  <a u="510A" b="83 81"/>
+  <a u="510B" b="D9 D9"/>
+  <a u="510C" b="83 82"/>
+  <a u="510D" b="83 83"/>
+  <a u="510E" b="83 84"/>
+  <a u="510F" b="83 85"/>
+  <a u="5110" b="83 86"/>
+  <a u="5111" b="83 87"/>
+  <a u="5112" b="C8 E5"/>
+  <a u="5113" b="83 88"/>
+  <a u="5114" b="83 89"/>
+  <a u="5115" b="83 8A"/>
+  <a u="5116" b="83 8B"/>
+  <a u="5117" b="83 8C"/>
+  <a u="5118" b="83 8D"/>
+  <a u="5119" b="83 8E"/>
+  <a u="511A" b="83 8F"/>
+  <a u="511B" b="83 90"/>
+  <a u="511C" b="83 91"/>
+  <a u="511D" b="83 92"/>
+  <a u="511E" b="83 93"/>
+  <a u="511F" b="83 94"/>
+  <a u="5120" b="83 95"/>
+  <a u="5121" b="C0 DC"/>
+  <a u="5122" b="83 96"/>
+  <a u="5123" b="83 97"/>
+  <a u="5124" b="83 98"/>
+  <a u="5125" b="83 99"/>
+  <a u="5126" b="83 9A"/>
+  <a u="5127" b="83 9B"/>
+  <a u="5128" b="83 9C"/>
+  <a u="5129" b="83 9D"/>
+  <a u="512A" b="83 9E"/>
+  <a u="512B" b="83 9F"/>
+  <a u="512C" b="83 A0"/>
+  <a u="512D" b="83 A1"/>
+  <a u="512E" b="83 A2"/>
+  <a u="512F" b="83 A3"/>
+  <a u="5130" b="83 A4"/>
+  <a u="5131" b="83 A5"/>
+  <a u="5132" b="83 A6"/>
+  <a u="5133" b="83 A7"/>
+  <a u="5134" b="83 A8"/>
+  <a u="5135" b="83 A9"/>
+  <a u="5136" b="83 AA"/>
+  <a u="5137" b="83 AB"/>
+  <a u="5138" b="83 AC"/>
+  <a u="5139" b="83 AD"/>
+  <a u="513A" b="83 AE"/>
+  <a u="513B" b="83 AF"/>
+  <a u="513C" b="83 B0"/>
+  <a u="513D" b="83 B1"/>
+  <a u="513E" b="83 B2"/>
+  <a u="513F" b="B6 F9"/>
+  <a u="5140" b="D8 A3"/>
+  <a u="5141" b="D4 CA"/>
+  <a u="5142" b="83 B3"/>
+  <a u="5143" b="D4 AA"/>
+  <a u="5144" b="D0 D6"/>
+  <a u="5145" b="B3 E4"/>
+  <a u="5146" b="D5 D7"/>
+  <a u="5147" b="83 B4"/>
+  <a u="5148" b="CF C8"/>
+  <a u="5149" b="B9 E2"/>
+  <a u="514A" b="83 B5"/>
+  <a u="514B" b="BF CB"/>
+  <a u="514C" b="83 B6"/>
+  <a u="514D" b="C3 E2"/>
+  <a u="514E" b="83 B7"/>
+  <a u="514F" b="83 B8"/>
+  <a u="5150" b="83 B9"/>
+  <a u="5151" b="B6 D2"/>
+  <a u="5152" b="83 BA"/>
+  <a u="5153" b="83 BB"/>
+  <a u="5154" b="CD C3"/>
+  <a u="5155" b="D9 EE"/>
+  <a u="5156" b="D9 F0"/>
+  <a u="5157" b="83 BC"/>
+  <a u="5158" b="83 BD"/>
+  <a u="5159" b="83 BE"/>
+  <a u="515A" b="B5 B3"/>
+  <a u="515B" b="83 BF"/>
+  <a u="515C" b="B6 B5"/>
+  <a u="515D" b="83 C0"/>
+  <a u="515E" b="83 C1"/>
+  <a u="515F" b="83 C2"/>
+  <a u="5160" b="83 C3"/>
+  <a u="5161" b="83 C4"/>
+  <a u="5162" b="BE A4"/>
+  <a u="5163" b="83 C5"/>
+  <a u="5164" b="83 C6"/>
+  <a u="5165" b="C8 EB"/>
+  <a u="5166" b="83 C7"/>
+  <a u="5167" b="83 C8"/>
+  <a u="5168" b="C8 AB"/>
+  <a u="5169" b="83 C9"/>
+  <a u="516A" b="83 CA"/>
+  <a u="516B" b="B0 CB"/>
+  <a u="516C" b="B9 AB"/>
+  <a u="516D" b="C1 F9"/>
+  <a u="516E" b="D9 E2"/>
+  <a u="516F" b="83 CB"/>
+  <a u="5170" b="C0 BC"/>
+  <a u="5171" b="B9 B2"/>
+  <a u="5172" b="83 CC"/>
+  <a u="5173" b="B9 D8"/>
+  <a u="5174" b="D0 CB"/>
+  <a u="5175" b="B1 F8"/>
+  <a u="5176" b="C6 E4"/>
+  <a u="5177" b="BE DF"/>
+  <a u="5178" b="B5 E4"/>
+  <a u="5179" b="D7 C8"/>
+  <a u="517A" b="83 CD"/>
+  <a u="517B" b="D1 F8"/>
+  <a u="517C" b="BC E6"/>
+  <a u="517D" b="CA DE"/>
+  <a u="517E" b="83 CE"/>
+  <a u="517F" b="83 CF"/>
+  <a u="5180" b="BC BD"/>
+  <a u="5181" b="D9 E6"/>
+  <a u="5182" b="D8 E7"/>
+  <a u="5183" b="83 D0"/>
+  <a u="5184" b="83 D1"/>
+  <a u="5185" b="C4 DA"/>
+  <a u="5186" b="83 D2"/>
+  <a u="5187" b="83 D3"/>
+  <a u="5188" b="B8 D4"/>
+  <a u="5189" b="C8 BD"/>
+  <a u="518A" b="83 D4"/>
+  <a u="518B" b="83 D5"/>
+  <a u="518C" b="B2 E1"/>
+  <a u="518D" b="D4 D9"/>
+  <a u="518E" b="83 D6"/>
+  <a u="518F" b="83 D7"/>
+  <a u="5190" b="83 D8"/>
+  <a u="5191" b="83 D9"/>
+  <a u="5192" b="C3 B0"/>
+  <a u="5193" b="83 DA"/>
+  <a u="5194" b="83 DB"/>
+  <a u="5195" b="C3 E1"/>
+  <a u="5196" b="DA A2"/>
+  <a u="5197" b="C8 DF"/>
+  <a u="5198" b="83 DC"/>
+  <a u="5199" b="D0 B4"/>
+  <a u="519A" b="83 DD"/>
+  <a u="519B" b="BE FC"/>
+  <a u="519C" b="C5 A9"/>
+  <a u="519D" b="83 DE"/>
+  <a u="519E" b="83 DF"/>
+  <a u="519F" b="83 E0"/>
+  <a u="51A0" b="B9 DA"/>
+  <a u="51A1" b="83 E1"/>
+  <a u="51A2" b="DA A3"/>
+  <a u="51A3" b="83 E2"/>
+  <a u="51A4" b="D4 A9"/>
+  <a u="51A5" b="DA A4"/>
+  <a u="51A6" b="83 E3"/>
+  <a u="51A7" b="83 E4"/>
+  <a u="51A8" b="83 E5"/>
+  <a u="51A9" b="83 E6"/>
+  <a u="51AA" b="83 E7"/>
+  <a u="51AB" b="D9 FB"/>
+  <a u="51AC" b="B6 AC"/>
+  <a u="51AD" b="83 E8"/>
+  <a u="51AE" b="83 E9"/>
+  <a u="51AF" b="B7 EB"/>
+  <a u="51B0" b="B1 F9"/>
+  <a u="51B1" b="D9 FC"/>
+  <a u="51B2" b="B3 E5"/>
+  <a u="51B3" b="BE F6"/>
+  <a u="51B4" b="83 EA"/>
+  <a u="51B5" b="BF F6"/>
+  <a u="51B6" b="D2 B1"/>
+  <a u="51B7" b="C0 E4"/>
+  <a u="51B8" b="83 EB"/>
+  <a u="51B9" b="83 EC"/>
+  <a u="51BA" b="83 ED"/>
+  <a u="51BB" b="B6 B3"/>
+  <a u="51BC" b="D9 FE"/>
+  <a u="51BD" b="D9 FD"/>
+  <a u="51BE" b="83 EE"/>
+  <a u="51BF" b="83 EF"/>
+  <a u="51C0" b="BE BB"/>
+  <a u="51C1" b="83 F0"/>
+  <a u="51C2" b="83 F1"/>
+  <a u="51C3" b="83 F2"/>
+  <a u="51C4" b="C6 E0"/>
+  <a u="51C5" b="83 F3"/>
+  <a u="51C6" b="D7 BC"/>
+  <a u="51C7" b="DA A1"/>
+  <a u="51C8" b="83 F4"/>
+  <a u="51C9" b="C1 B9"/>
+  <a u="51CA" b="83 F5"/>
+  <a u="51CB" b="B5 F2"/>
+  <a u="51CC" b="C1 E8"/>
+  <a u="51CD" b="83 F6"/>
+  <a u="51CE" b="83 F7"/>
+  <a u="51CF" b="BC F5"/>
+  <a u="51D0" b="83 F8"/>
+  <a u="51D1" b="B4 D5"/>
+  <a u="51D2" b="83 F9"/>
+  <a u="51D3" b="83 FA"/>
+  <a u="51D4" b="83 FB"/>
+  <a u="51D5" b="83 FC"/>
+  <a u="51D6" b="83 FD"/>
+  <a u="51D7" b="83 FE"/>
+  <a u="51D8" b="84 40"/>
+  <a u="51D9" b="84 41"/>
+  <a u="51DA" b="84 42"/>
+  <a u="51DB" b="C1 DD"/>
+  <a u="51DC" b="84 43"/>
+  <a u="51DD" b="C4 FD"/>
+  <a u="51DE" b="84 44"/>
+  <a u="51DF" b="84 45"/>
+  <a u="51E0" b="BC B8"/>
+  <a u="51E1" b="B7 B2"/>
+  <a u="51E2" b="84 46"/>
+  <a u="51E3" b="84 47"/>
+  <a u="51E4" b="B7 EF"/>
+  <a u="51E5" b="84 48"/>
+  <a u="51E6" b="84 49"/>
+  <a u="51E7" b="84 4A"/>
+  <a u="51E8" b="84 4B"/>
+  <a u="51E9" b="84 4C"/>
+  <a u="51EA" b="84 4D"/>
+  <a u="51EB" b="D9 EC"/>
+  <a u="51EC" b="84 4E"/>
+  <a u="51ED" b="C6 BE"/>
+  <a u="51EE" b="84 4F"/>
+  <a u="51EF" b="BF AD"/>
+  <a u="51F0" b="BB CB"/>
+  <a u="51F1" b="84 50"/>
+  <a u="51F2" b="84 51"/>
+  <a u="51F3" b="B5 CA"/>
+  <a u="51F4" b="84 52"/>
+  <a u="51F5" b="DB C9"/>
+  <a u="51F6" b="D0 D7"/>
+  <a u="51F7" b="84 53"/>
+  <a u="51F8" b="CD B9"/>
+  <a u="51F9" b="B0 BC"/>
+  <a u="51FA" b="B3 F6"/>
+  <a u="51FB" b="BB F7"/>
+  <a u="51FC" b="DB CA"/>
+  <a u="51FD" b="BA AF"/>
+  <a u="51FE" b="84 54"/>
+  <a u="51FF" b="D4 E4"/>
+  <a u="5200" b="B5 B6"/>
+  <a u="5201" b="B5 F3"/>
+  <a u="5202" b="D8 D6"/>
+  <a u="5203" b="C8 D0"/>
+  <a u="5204" b="84 55"/>
+  <a u="5205" b="84 56"/>
+  <a u="5206" b="B7 D6"/>
+  <a u="5207" b="C7 D0"/>
+  <a u="5208" b="D8 D7"/>
+  <a u="5209" b="84 57"/>
+  <a u="520A" b="BF AF"/>
+  <a u="520B" b="84 58"/>
+  <a u="520C" b="84 59"/>
+  <a u="520D" b="DB BB"/>
+  <a u="520E" b="D8 D8"/>
+  <a u="520F" b="84 5A"/>
+  <a u="5210" b="84 5B"/>
+  <a u="5211" b="D0 CC"/>
+  <a u="5212" b="BB AE"/>
+  <a u="5213" b="84 5C"/>
+  <a u="5214" b="84 5D"/>
+  <a u="5215" b="84 5E"/>
+  <a u="5216" b="EB BE"/>
+  <a u="5217" b="C1 D0"/>
+  <a u="5218" b="C1 F5"/>
+  <a u="5219" b="D4 F2"/>
+  <a u="521A" b="B8 D5"/>
+  <a u="521B" b="B4 B4"/>
+  <a u="521C" b="84 5F"/>
+  <a u="521D" b="B3 F5"/>
+  <a u="521E" b="84 60"/>
+  <a u="521F" b="84 61"/>
+  <a u="5220" b="C9 BE"/>
+  <a u="5221" b="84 62"/>
+  <a u="5222" b="84 63"/>
+  <a u="5223" b="84 64"/>
+  <a u="5224" b="C5 D0"/>
+  <a u="5225" b="84 65"/>
+  <a u="5226" b="84 66"/>
+  <a u="5227" b="84 67"/>
+  <a u="5228" b="C5 D9"/>
+  <a u="5229" b="C0 FB"/>
+  <a u="522A" b="84 68"/>
+  <a u="522B" b="B1 F0"/>
+  <a u="522C" b="84 69"/>
+  <a u="522D" b="D8 D9"/>
+  <a u="522E" b="B9 CE"/>
+  <a u="522F" b="84 6A"/>
+  <a u="5230" b="B5 BD"/>
+  <a u="5231" b="84 6B"/>
+  <a u="5232" b="84 6C"/>
+  <a u="5233" b="D8 DA"/>
+  <a u="5234" b="84 6D"/>
+  <a u="5235" b="84 6E"/>
+  <a u="5236" b="D6 C6"/>
+  <a u="5237" b="CB A2"/>
+  <a u="5238" b="C8 AF"/>
+  <a u="5239" b="C9 B2"/>
+  <a u="523A" b="B4 CC"/>
+  <a u="523B" b="BF CC"/>
+  <a u="523C" b="84 6F"/>
+  <a u="523D" b="B9 F4"/>
+  <a u="523E" b="84 70"/>
+  <a u="523F" b="D8 DB"/>
+  <a u="5240" b="D8 DC"/>
+  <a u="5241" b="B6 E7"/>
+  <a u="5242" b="BC C1"/>
+  <a u="5243" b="CC EA"/>
+  <a u="5244" b="84 71"/>
+  <a u="5245" b="84 72"/>
+  <a u="5246" b="84 73"/>
+  <a u="5247" b="84 74"/>
+  <a u="5248" b="84 75"/>
+  <a u="5249" b="84 76"/>
+  <a u="524A" b="CF F7"/>
+  <a u="524B" b="84 77"/>
+  <a u="524C" b="D8 DD"/>
+  <a u="524D" b="C7 B0"/>
+  <a u="524E" b="84 78"/>
+  <a u="524F" b="84 79"/>
+  <a u="5250" b="B9 D0"/>
+  <a u="5251" b="BD A3"/>
+  <a u="5252" b="84 7A"/>
+  <a u="5253" b="84 7B"/>
+  <a u="5254" b="CC DE"/>
+  <a u="5255" b="84 7C"/>
+  <a u="5256" b="C6 CA"/>
+  <a u="5257" b="84 7D"/>
+  <a u="5258" b="84 7E"/>
+  <a u="5259" b="84 80"/>
+  <a u="525A" b="84 81"/>
+  <a u="525B" b="84 82"/>
+  <a u="525C" b="D8 E0"/>
+  <a u="525D" b="84 83"/>
+  <a u="525E" b="D8 DE"/>
+  <a u="525F" b="84 84"/>
+  <a u="5260" b="84 85"/>
+  <a u="5261" b="D8 DF"/>
+  <a u="5262" b="84 86"/>
+  <a u="5263" b="84 87"/>
+  <a u="5264" b="84 88"/>
+  <a u="5265" b="B0 FE"/>
+  <a u="5266" b="84 89"/>
+  <a u="5267" b="BE E7"/>
+  <a u="5268" b="84 8A"/>
+  <a u="5269" b="CA A3"/>
+  <a u="526A" b="BC F4"/>
+  <a u="526B" b="84 8B"/>
+  <a u="526C" b="84 8C"/>
+  <a u="526D" b="84 8D"/>
+  <a u="526E" b="84 8E"/>
+  <a u="526F" b="B8 B1"/>
+  <a u="5270" b="84 8F"/>
+  <a u="5271" b="84 90"/>
+  <a u="5272" b="B8 EE"/>
+  <a u="5273" b="84 91"/>
+  <a u="5274" b="84 92"/>
+  <a u="5275" b="84 93"/>
+  <a u="5276" b="84 94"/>
+  <a u="5277" b="84 95"/>
+  <a u="5278" b="84 96"/>
+  <a u="5279" b="84 97"/>
+  <a u="527A" b="84 98"/>
+  <a u="527B" b="84 99"/>
+  <a u="527C" b="84 9A"/>
+  <a u="527D" b="D8 E2"/>
+  <a u="527E" b="84 9B"/>
+  <a u="527F" b="BD CB"/>
+  <a u="5280" b="84 9C"/>
+  <a u="5281" b="D8 E4"/>
+  <a u="5282" b="D8 E3"/>
+  <a u="5283" b="84 9D"/>
+  <a u="5284" b="84 9E"/>
+  <a u="5285" b="84 9F"/>
+  <a u="5286" b="84 A0"/>
+  <a u="5287" b="84 A1"/>
+  <a u="5288" b="C5 FC"/>
+  <a u="5289" b="84 A2"/>
+  <a u="528A" b="84 A3"/>
+  <a u="528B" b="84 A4"/>
+  <a u="528C" b="84 A5"/>
+  <a u="528D" b="84 A6"/>
+  <a u="528E" b="84 A7"/>
+  <a u="528F" b="84 A8"/>
+  <a u="5290" b="D8 E5"/>
+  <a u="5291" b="84 A9"/>
+  <a u="5292" b="84 AA"/>
+  <a u="5293" b="D8 E6"/>
+  <a u="5294" b="84 AB"/>
+  <a u="5295" b="84 AC"/>
+  <a u="5296" b="84 AD"/>
+  <a u="5297" b="84 AE"/>
+  <a u="5298" b="84 AF"/>
+  <a u="5299" b="84 B0"/>
+  <a u="529A" b="84 B1"/>
+  <a u="529B" b="C1 A6"/>
+  <a u="529C" b="84 B2"/>
+  <a u="529D" b="C8 B0"/>
+  <a u="529E" b="B0 EC"/>
+  <a u="529F" b="B9 A6"/>
+  <a u="52A0" b="BC D3"/>
+  <a u="52A1" b="CE F1"/>
+  <a u="52A2" b="DB BD"/>
+  <a u="52A3" b="C1 D3"/>
+  <a u="52A4" b="84 B3"/>
+  <a u="52A5" b="84 B4"/>
+  <a u="52A6" b="84 B5"/>
+  <a u="52A7" b="84 B6"/>
+  <a u="52A8" b="B6 AF"/>
+  <a u="52A9" b="D6 FA"/>
+  <a u="52AA" b="C5 AC"/>
+  <a u="52AB" b="BD D9"/>
+  <a u="52AC" b="DB BE"/>
+  <a u="52AD" b="DB BF"/>
+  <a u="52AE" b="84 B7"/>
+  <a u="52AF" b="84 B8"/>
+  <a u="52B0" b="84 B9"/>
+  <a u="52B1" b="C0 F8"/>
+  <a u="52B2" b="BE A2"/>
+  <a u="52B3" b="C0 CD"/>
+  <a u="52B4" b="84 BA"/>
+  <a u="52B5" b="84 BB"/>
+  <a u="52B6" b="84 BC"/>
+  <a u="52B7" b="84 BD"/>
+  <a u="52B8" b="84 BE"/>
+  <a u="52B9" b="84 BF"/>
+  <a u="52BA" b="84 C0"/>
+  <a u="52BB" b="84 C1"/>
+  <a u="52BC" b="84 C2"/>
+  <a u="52BD" b="84 C3"/>
+  <a u="52BE" b="DB C0"/>
+  <a u="52BF" b="CA C6"/>
+  <a u="52C0" b="84 C4"/>
+  <a u="52C1" b="84 C5"/>
+  <a u="52C2" b="84 C6"/>
+  <a u="52C3" b="B2 AA"/>
+  <a u="52C4" b="84 C7"/>
+  <a u="52C5" b="84 C8"/>
+  <a u="52C6" b="84 C9"/>
+  <a u="52C7" b="D3 C2"/>
+  <a u="52C8" b="84 CA"/>
+  <a u="52C9" b="C3 E3"/>
+  <a u="52CA" b="84 CB"/>
+  <a u="52CB" b="D1 AB"/>
+  <a u="52CC" b="84 CC"/>
+  <a u="52CD" b="84 CD"/>
+  <a u="52CE" b="84 CE"/>
+  <a u="52CF" b="84 CF"/>
+  <a u="52D0" b="DB C2"/>
+  <a u="52D1" b="84 D0"/>
+  <a u="52D2" b="C0 D5"/>
+  <a u="52D3" b="84 D1"/>
+  <a u="52D4" b="84 D2"/>
+  <a u="52D5" b="84 D3"/>
+  <a u="52D6" b="DB C3"/>
+  <a u="52D7" b="84 D4"/>
+  <a u="52D8" b="BF B1"/>
+  <a u="52D9" b="84 D5"/>
+  <a u="52DA" b="84 D6"/>
+  <a u="52DB" b="84 D7"/>
+  <a u="52DC" b="84 D8"/>
+  <a u="52DD" b="84 D9"/>
+  <a u="52DE" b="84 DA"/>
+  <a u="52DF" b="C4 BC"/>
+  <a u="52E0" b="84 DB"/>
+  <a u="52E1" b="84 DC"/>
+  <a u="52E2" b="84 DD"/>
+  <a u="52E3" b="84 DE"/>
+  <a u="52E4" b="C7 DA"/>
+  <a u="52E5" b="84 DF"/>
+  <a u="52E6" b="84 E0"/>
+  <a u="52E7" b="84 E1"/>
+  <a u="52E8" b="84 E2"/>
+  <a u="52E9" b="84 E3"/>
+  <a u="52EA" b="84 E4"/>
+  <a u="52EB" b="84 E5"/>
+  <a u="52EC" b="84 E6"/>
+  <a u="52ED" b="84 E7"/>
+  <a u="52EE" b="84 E8"/>
+  <a u="52EF" b="84 E9"/>
+  <a u="52F0" b="DB C4"/>
+  <a u="52F1" b="84 EA"/>
+  <a u="52F2" b="84 EB"/>
+  <a u="52F3" b="84 EC"/>
+  <a u="52F4" b="84 ED"/>
+  <a u="52F5" b="84 EE"/>
+  <a u="52F6" b="84 EF"/>
+  <a u="52F7" b="84 F0"/>
+  <a u="52F8" b="84 F1"/>
+  <a u="52F9" b="D9 E8"/>
+  <a u="52FA" b="C9 D7"/>
+  <a u="52FB" b="84 F2"/>
+  <a u="52FC" b="84 F3"/>
+  <a u="52FD" b="84 F4"/>
+  <a u="52FE" b="B9 B4"/>
+  <a u="52FF" b="CE F0"/>
+  <a u="5300" b="D4 C8"/>
+  <a u="5301" b="84 F5"/>
+  <a u="5302" b="84 F6"/>
+  <a u="5303" b="84 F7"/>
+  <a u="5304" b="84 F8"/>
+  <a u="5305" b="B0 FC"/>
+  <a u="5306" b="B4 D2"/>
+  <a u="5307" b="84 F9"/>
+  <a u="5308" b="D0 D9"/>
+  <a u="5309" b="84 FA"/>
+  <a u="530A" b="84 FB"/>
+  <a u="530B" b="84 FC"/>
+  <a u="530C" b="84 FD"/>
+  <a u="530D" b="D9 E9"/>
+  <a u="530E" b="84 FE"/>
+  <a u="530F" b="DE CB"/>
+  <a u="5310" b="D9 EB"/>
+  <a u="5311" b="85 40"/>
+  <a u="5312" b="85 41"/>
+  <a u="5313" b="85 42"/>
+  <a u="5314" b="85 43"/>
+  <a u="5315" b="D8 B0"/>
+  <a u="5316" b="BB AF"/>
+  <a u="5317" b="B1 B1"/>
+  <a u="5318" b="85 44"/>
+  <a u="5319" b="B3 D7"/>
+  <a u="531A" b="D8 CE"/>
+  <a u="531B" b="85 45"/>
+  <a u="531C" b="85 46"/>
+  <a u="531D" b="D4 D1"/>
+  <a u="531E" b="85 47"/>
+  <a u="531F" b="85 48"/>
+  <a u="5320" b="BD B3"/>
+  <a u="5321" b="BF EF"/>
+  <a u="5322" b="85 49"/>
+  <a u="5323" b="CF BB"/>
+  <a u="5324" b="85 4A"/>
+  <a u="5325" b="85 4B"/>
+  <a u="5326" b="D8 D0"/>
+  <a u="5327" b="85 4C"/>
+  <a u="5328" b="85 4D"/>
+  <a u="5329" b="85 4E"/>
+  <a u="532A" b="B7 CB"/>
+  <a u="532B" b="85 4F"/>
+  <a u="532C" b="85 50"/>
+  <a u="532D" b="85 51"/>
+  <a u="532E" b="D8 D1"/>
+  <a u="532F" b="85 52"/>
+  <a u="5330" b="85 53"/>
+  <a u="5331" b="85 54"/>
+  <a u="5332" b="85 55"/>
+  <a u="5333" b="85 56"/>
+  <a u="5334" b="85 57"/>
+  <a u="5335" b="85 58"/>
+  <a u="5336" b="85 59"/>
+  <a u="5337" b="85 5A"/>
+  <a u="5338" b="85 5B"/>
+  <a u="5339" b="C6 A5"/>
+  <a u="533A" b="C7 F8"/>
+  <a u="533B" b="D2 BD"/>
+  <a u="533C" b="85 5C"/>
+  <a u="533D" b="85 5D"/>
+  <a u="533E" b="D8 D2"/>
+  <a u="533F" b="C4 E4"/>
+  <a u="5340" b="85 5E"/>
+  <a u="5341" b="CA AE"/>
+  <a u="5342" b="85 5F"/>
+  <a u="5343" b="C7 A7"/>
+  <a u="5344" b="85 60"/>
+  <a u="5345" b="D8 A6"/>
+  <a u="5346" b="85 61"/>
+  <a u="5347" b="C9 FD"/>
+  <a u="5348" b="CE E7"/>
+  <a u="5349" b="BB DC"/>
+  <a u="534A" b="B0 EB"/>
+  <a u="534B" b="85 62"/>
+  <a u="534C" b="85 63"/>
+  <a u="534D" b="85 64"/>
+  <a u="534E" b="BB AA"/>
+  <a u="534F" b="D0 AD"/>
+  <a u="5350" b="85 65"/>
+  <a u="5351" b="B1 B0"/>
+  <a u="5352" b="D7 E4"/>
+  <a u="5353" b="D7 BF"/>
+  <a u="5354" b="85 66"/>
+  <a u="5355" b="B5 A5"/>
+  <a u="5356" b="C2 F4"/>
+  <a u="5357" b="C4 CF"/>
+  <a u="5358" b="85 67"/>
+  <a u="5359" b="85 68"/>
+  <a u="535A" b="B2 A9"/>
+  <a u="535B" b="85 69"/>
+  <a u="535C" b="B2 B7"/>
+  <a u="535D" b="85 6A"/>
+  <a u="535E" b="B1 E5"/>
+  <a u="535F" b="DF B2"/>
+  <a u="5360" b="D5 BC"/>
+  <a u="5361" b="BF A8"/>
+  <a u="5362" b="C2 AC"/>
+  <a u="5363" b="D8 D5"/>
+  <a u="5364" b="C2 B1"/>
+  <a u="5365" b="85 6B"/>
+  <a u="5366" b="D8 D4"/>
+  <a u="5367" b="CE D4"/>
+  <a u="5368" b="85 6C"/>
+  <a u="5369" b="DA E0"/>
+  <a u="536A" b="85 6D"/>
+  <a u="536B" b="CE C0"/>
+  <a u="536C" b="85 6E"/>
+  <a u="536D" b="85 6F"/>
+  <a u="536E" b="D8 B4"/>
+  <a u="536F" b="C3 AE"/>
+  <a u="5370" b="D3 A1"/>
+  <a u="5371" b="CE A3"/>
+  <a u="5372" b="85 70"/>
+  <a u="5373" b="BC B4"/>
+  <a u="5374" b="C8 B4"/>
+  <a u="5375" b="C2 D1"/>
+  <a u="5376" b="85 71"/>
+  <a u="5377" b="BE ED"/>
+  <a u="5378" b="D0 B6"/>
+  <a u="5379" b="85 72"/>
+  <a u="537A" b="DA E1"/>
+  <a u="537B" b="85 73"/>
+  <a u="537C" b="85 74"/>
+  <a u="537D" b="85 75"/>
+  <a u="537E" b="85 76"/>
+  <a u="537F" b="C7 E4"/>
+  <a u="5380" b="85 77"/>
+  <a u="5381" b="85 78"/>
+  <a u="5382" b="B3 A7"/>
+  <a u="5383" b="85 79"/>
+  <a u="5384" b="B6 F2"/>
+  <a u="5385" b="CC FC"/>
+  <a u="5386" b="C0 FA"/>
+  <a u="5387" b="85 7A"/>
+  <a u="5388" b="85 7B"/>
+  <a u="5389" b="C0 F7"/>
+  <a u="538A" b="85 7C"/>
+  <a u="538B" b="D1 B9"/>
+  <a u="538C" b="D1 E1"/>
+  <a u="538D" b="D8 C7"/>
+  <a u="538E" b="85 7D"/>
+  <a u="538F" b="85 7E"/>
+  <a u="5390" b="85 80"/>
+  <a u="5391" b="85 81"/>
+  <a u="5392" b="85 82"/>
+  <a u="5393" b="85 83"/>
+  <a u="5394" b="85 84"/>
+  <a u="5395" b="B2 DE"/>
+  <a u="5396" b="85 85"/>
+  <a u="5397" b="85 86"/>
+  <a u="5398" b="C0 E5"/>
+  <a u="5399" b="85 87"/>
+  <a u="539A" b="BA F1"/>
+  <a u="539B" b="85 88"/>
+  <a u="539C" b="85 89"/>
+  <a u="539D" b="D8 C8"/>
+  <a u="539E" b="85 8A"/>
+  <a u="539F" b="D4 AD"/>
+  <a u="53A0" b="85 8B"/>
+  <a u="53A1" b="85 8C"/>
+  <a u="53A2" b="CF E1"/>
+  <a u="53A3" b="D8 C9"/>
+  <a u="53A4" b="85 8D"/>
+  <a u="53A5" b="D8 CA"/>
+  <a u="53A6" b="CF C3"/>
+  <a u="53A7" b="85 8E"/>
+  <a u="53A8" b="B3 F8"/>
+  <a u="53A9" b="BE C7"/>
+  <a u="53AA" b="85 8F"/>
+  <a u="53AB" b="85 90"/>
+  <a u="53AC" b="85 91"/>
+  <a u="53AD" b="85 92"/>
+  <a u="53AE" b="D8 CB"/>
+  <a u="53AF" b="85 93"/>
+  <a u="53B0" b="85 94"/>
+  <a u="53B1" b="85 95"/>
+  <a u="53B2" b="85 96"/>
+  <a u="53B3" b="85 97"/>
+  <a u="53B4" b="85 98"/>
+  <a u="53B5" b="85 99"/>
+  <a u="53B6" b="DB CC"/>
+  <a u="53B7" b="85 9A"/>
+  <a u="53B8" b="85 9B"/>
+  <a u="53B9" b="85 9C"/>
+  <a u="53BA" b="85 9D"/>
+  <a u="53BB" b="C8 A5"/>
+  <a u="53BC" b="85 9E"/>
+  <a u="53BD" b="85 9F"/>
+  <a u="53BE" b="85 A0"/>
+  <a u="53BF" b="CF D8"/>
+  <a u="53C0" b="85 A1"/>
+  <a u="53C1" b="C8 FE"/>
+  <a u="53C2" b="B2 CE"/>
+  <a u="53C3" b="85 A2"/>
+  <a u="53C4" b="85 A3"/>
+  <a u="53C5" b="85 A4"/>
+  <a u="53C6" b="85 A5"/>
+  <a u="53C7" b="85 A6"/>
+  <a u="53C8" b="D3 D6"/>
+  <a u="53C9" b="B2 E6"/>
+  <a u="53CA" b="BC B0"/>
+  <a u="53CB" b="D3 D1"/>
+  <a u="53CC" b="CB AB"/>
+  <a u="53CD" b="B7 B4"/>
+  <a u="53CE" b="85 A7"/>
+  <a u="53CF" b="85 A8"/>
+  <a u="53D0" b="85 A9"/>
+  <a u="53D1" b="B7 A2"/>
+  <a u="53D2" b="85 AA"/>
+  <a u="53D3" b="85 AB"/>
+  <a u="53D4" b="CA E5"/>
+  <a u="53D5" b="85 AC"/>
+  <a u="53D6" b="C8 A1"/>
+  <a u="53D7" b="CA DC"/>
+  <a u="53D8" b="B1 E4"/>
+  <a u="53D9" b="D0 F0"/>
+  <a u="53DA" b="85 AD"/>
+  <a u="53DB" b="C5 D1"/>
+  <a u="53DC" b="85 AE"/>
+  <a u="53DD" b="85 AF"/>
+  <a u="53DE" b="85 B0"/>
+  <a u="53DF" b="DB C5"/>
+  <a u="53E0" b="B5 FE"/>
+  <a u="53E1" b="85 B1"/>
+  <a u="53E2" b="85 B2"/>
+  <a u="53E3" b="BF DA"/>
+  <a u="53E4" b="B9 C5"/>
+  <a u="53E5" b="BE E4"/>
+  <a u="53E6" b="C1 ED"/>
+  <a u="53E7" b="85 B3"/>
+  <a u="53E8" b="DF B6"/>
+  <a u="53E9" b="DF B5"/>
+  <a u="53EA" b="D6 BB"/>
+  <a u="53EB" b="BD D0"/>
+  <a u="53EC" b="D5 D9"/>
+  <a u="53ED" b="B0 C8"/>
+  <a u="53EE" b="B6 A3"/>
+  <a u="53EF" b="BF C9"/>
+  <a u="53F0" b="CC A8"/>
+  <a u="53F1" b="DF B3"/>
+  <a u="53F2" b="CA B7"/>
+  <a u="53F3" b="D3 D2"/>
+  <a u="53F4" b="85 B4"/>
+  <a u="53F5" b="D8 CF"/>
+  <a u="53F6" b="D2 B6"/>
+  <a u="53F7" b="BA C5"/>
+  <a u="53F8" b="CB BE"/>
+  <a u="53F9" b="CC BE"/>
+  <a u="53FA" b="85 B5"/>
+  <a u="53FB" b="DF B7"/>
+  <a u="53FC" b="B5 F0"/>
+  <a u="53FD" b="DF B4"/>
+  <a u="53FE" b="85 B6"/>
+  <a u="53FF" b="85 B7"/>
+  <a u="5400" b="85 B8"/>
+  <a u="5401" b="D3 F5"/>
+  <a u="5402" b="85 B9"/>
+  <a u="5403" b="B3 D4"/>
+  <a u="5404" b="B8 F7"/>
+  <a u="5405" b="85 BA"/>
+  <a u="5406" b="DF BA"/>
+  <a u="5407" b="85 BB"/>
+  <a u="5408" b="BA CF"/>
+  <a u="5409" b="BC AA"/>
+  <a u="540A" b="B5 F5"/>
+  <a u="540B" b="85 BC"/>
+  <a u="540C" b="CD AC"/>
+  <a u="540D" b="C3 FB"/>
+  <a u="540E" b="BA F3"/>
+  <a u="540F" b="C0 F4"/>
+  <a u="5410" b="CD C2"/>
+  <a u="5411" b="CF F2"/>
+  <a u="5412" b="DF B8"/>
+  <a u="5413" b="CF C5"/>
+  <a u="5414" b="85 BD"/>
+  <a u="5415" b="C2 C0"/>
+  <a u="5416" b="DF B9"/>
+  <a u="5417" b="C2 F0"/>
+  <a u="5418" b="85 BE"/>
+  <a u="5419" b="85 BF"/>
+  <a u="541A" b="85 C0"/>
+  <a u="541B" b="BE FD"/>
+  <a u="541C" b="85 C1"/>
+  <a u="541D" b="C1 DF"/>
+  <a u="541E" b="CD CC"/>
+  <a u="541F" b="D2 F7"/>
+  <a u="5420" b="B7 CD"/>
+  <a u="5421" b="DF C1"/>
+  <a u="5422" b="85 C2"/>
+  <a u="5423" b="DF C4"/>
+  <a u="5424" b="85 C3"/>
+  <a u="5425" b="85 C4"/>
+  <a u="5426" b="B7 F1"/>
+  <a u="5427" b="B0 C9"/>
+  <a u="5428" b="B6 D6"/>
+  <a u="5429" b="B7 D4"/>
+  <a u="542A" b="85 C5"/>
+  <a u="542B" b="BA AC"/>
+  <a u="542C" b="CC FD"/>
+  <a u="542D" b="BF D4"/>
+  <a u="542E" b="CB B1"/>
+  <a u="542F" b="C6 F4"/>
+  <a u="5430" b="85 C6"/>
+  <a u="5431" b="D6 A8"/>
+  <a u="5432" b="DF C5"/>
+  <a u="5433" b="85 C7"/>
+  <a u="5434" b="CE E2"/>
+  <a u="5435" b="B3 B3"/>
+  <a u="5436" b="85 C8"/>
+  <a u="5437" b="85 C9"/>
+  <a u="5438" b="CE FC"/>
+  <a u="5439" b="B4 B5"/>
+  <a u="543A" b="85 CA"/>
+  <a u="543B" b="CE C7"/>
+  <a u="543C" b="BA F0"/>
+  <a u="543D" b="85 CB"/>
+  <a u="543E" b="CE E1"/>
+  <a u="543F" b="85 CC"/>
+  <a u="5440" b="D1 BD"/>
+  <a u="5441" b="85 CD"/>
+  <a u="5442" b="85 CE"/>
+  <a u="5443" b="DF C0"/>
+  <a u="5444" b="85 CF"/>
+  <a u="5445" b="85 D0"/>
+  <a u="5446" b="B4 F4"/>
+  <a u="5447" b="85 D1"/>
+  <a u="5448" b="B3 CA"/>
+  <a u="5449" b="85 D2"/>
+  <a u="544A" b="B8 E6"/>
+  <a u="544B" b="DF BB"/>
+  <a u="544C" b="85 D3"/>
+  <a u="544D" b="85 D4"/>
+  <a u="544E" b="85 D5"/>
+  <a u="544F" b="85 D6"/>
+  <a u="5450" b="C4 C5"/>
+  <a u="5451" b="85 D7"/>
+  <a u="5452" b="DF BC"/>
+  <a u="5453" b="DF BD"/>
+  <a u="5454" b="DF BE"/>
+  <a u="5455" b="C5 BB"/>
+  <a u="5456" b="DF BF"/>
+  <a u="5457" b="DF C2"/>
+  <a u="5458" b="D4 B1"/>
+  <a u="5459" b="DF C3"/>
+  <a u="545A" b="85 D8"/>
+  <a u="545B" b="C7 BA"/>
+  <a u="545C" b="CE D8"/>
+  <a u="545D" b="85 D9"/>
+  <a u="545E" b="85 DA"/>
+  <a u="545F" b="85 DB"/>
+  <a u="5460" b="85 DC"/>
+  <a u="5461" b="85 DD"/>
+  <a u="5462" b="C4 D8"/>
+  <a u="5463" b="85 DE"/>
+  <a u="5464" b="DF CA"/>
+  <a u="5465" b="85 DF"/>
+  <a u="5466" b="DF CF"/>
+  <a u="5467" b="85 E0"/>
+  <a u="5468" b="D6 DC"/>
+  <a u="5469" b="85 E1"/>
+  <a u="546A" b="85 E2"/>
+  <a u="546B" b="85 E3"/>
+  <a u="546C" b="85 E4"/>
+  <a u="546D" b="85 E5"/>
+  <a u="546E" b="85 E6"/>
+  <a u="546F" b="85 E7"/>
+  <a u="5470" b="85 E8"/>
+  <a u="5471" b="DF C9"/>
+  <a u="5472" b="DF DA"/>
+  <a u="5473" b="CE B6"/>
+  <a u="5474" b="85 E9"/>
+  <a u="5475" b="BA C7"/>
+  <a u="5476" b="DF CE"/>
+  <a u="5477" b="DF C8"/>
+  <a u="5478" b="C5 DE"/>
+  <a u="5479" b="85 EA"/>
+  <a u="547A" b="85 EB"/>
+  <a u="547B" b="C9 EB"/>
+  <a u="547C" b="BA F4"/>
+  <a u="547D" b="C3 FC"/>
+  <a u="547E" b="85 EC"/>
+  <a u="547F" b="85 ED"/>
+  <a u="5480" b="BE D7"/>
+  <a u="5481" b="85 EE"/>
+  <a u="5482" b="DF C6"/>
+  <a u="5483" b="85 EF"/>
+  <a u="5484" b="DF CD"/>
+  <a u="5485" b="85 F0"/>
+  <a u="5486" b="C5 D8"/>
+  <a u="5487" b="85 F1"/>
+  <a u="5488" b="85 F2"/>
+  <a u="5489" b="85 F3"/>
+  <a u="548A" b="85 F4"/>
+  <a u="548B" b="D5 A6"/>
+  <a u="548C" b="BA CD"/>
+  <a u="548D" b="85 F5"/>
+  <a u="548E" b="BE CC"/>
+  <a u="548F" b="D3 BD"/>
+  <a u="5490" b="B8 C0"/>
+  <a u="5491" b="85 F6"/>
+  <a u="5492" b="D6 E4"/>
+  <a u="5493" b="85 F7"/>
+  <a u="5494" b="DF C7"/>
+  <a u="5495" b="B9 BE"/>
+  <a u="5496" b="BF A7"/>
+  <a u="5497" b="85 F8"/>
+  <a u="5498" b="85 F9"/>
+  <a u="5499" b="C1 FC"/>
+  <a u="549A" b="DF CB"/>
+  <a u="549B" b="DF CC"/>
+  <a u="549C" b="85 FA"/>
+  <a u="549D" b="DF D0"/>
+  <a u="549E" b="85 FB"/>
+  <a u="549F" b="85 FC"/>
+  <a u="54A0" b="85 FD"/>
+  <a u="54A1" b="85 FE"/>
+  <a u="54A2" b="86 40"/>
+  <a u="54A3" b="DF DB"/>
+  <a u="54A4" b="DF E5"/>
+  <a u="54A5" b="86 41"/>
+  <a u="54A6" b="DF D7"/>
+  <a u="54A7" b="DF D6"/>
+  <a u="54A8" b="D7 C9"/>
+  <a u="54A9" b="DF E3"/>
+  <a u="54AA" b="DF E4"/>
+  <a u="54AB" b="E5 EB"/>
+  <a u="54AC" b="D2 A7"/>
+  <a u="54AD" b="DF D2"/>
+  <a u="54AE" b="86 42"/>
+  <a u="54AF" b="BF A9"/>
+  <a u="54B0" b="86 43"/>
+  <a u="54B1" b="D4 DB"/>
+  <a u="54B2" b="86 44"/>
+  <a u="54B3" b="BF C8"/>
+  <a u="54B4" b="DF D4"/>
+  <a u="54B5" b="86 45"/>
+  <a u="54B6" b="86 46"/>
+  <a u="54B7" b="86 47"/>
+  <a u="54B8" b="CF CC"/>
+  <a u="54B9" b="86 48"/>
+  <a u="54BA" b="86 49"/>
+  <a u="54BB" b="DF DD"/>
+  <a u="54BC" b="86 4A"/>
+  <a u="54BD" b="D1 CA"/>
+  <a u="54BE" b="86 4B"/>
+  <a u="54BF" b="DF DE"/>
+  <a u="54C0" b="B0 A7"/>
+  <a u="54C1" b="C6 B7"/>
+  <a u="54C2" b="DF D3"/>
+  <a u="54C3" b="86 4C"/>
+  <a u="54C4" b="BA E5"/>
+  <a u="54C5" b="86 4D"/>
+  <a u="54C6" b="B6 DF"/>
+  <a u="54C7" b="CD DB"/>
+  <a u="54C8" b="B9 FE"/>
+  <a u="54C9" b="D4 D5"/>
+  <a u="54CA" b="86 4E"/>
+  <a u="54CB" b="86 4F"/>
+  <a u="54CC" b="DF DF"/>
+  <a u="54CD" b="CF EC"/>
+  <a u="54CE" b="B0 A5"/>
+  <a u="54CF" b="DF E7"/>
+  <a u="54D0" b="DF D1"/>
+  <a u="54D1" b="D1 C6"/>
+  <a u="54D2" b="DF D5"/>
+  <a u="54D3" b="DF D8"/>
+  <a u="54D4" b="DF D9"/>
+  <a u="54D5" b="DF DC"/>
+  <a u="54D6" b="86 50"/>
+  <a u="54D7" b="BB A9"/>
+  <a u="54D8" b="86 51"/>
+  <a u="54D9" b="DF E0"/>
+  <a u="54DA" b="DF E1"/>
+  <a u="54DB" b="86 52"/>
+  <a u="54DC" b="DF E2"/>
+  <a u="54DD" b="DF E6"/>
+  <a u="54DE" b="DF E8"/>
+  <a u="54DF" b="D3 B4"/>
+  <a u="54E0" b="86 53"/>
+  <a u="54E1" b="86 54"/>
+  <a u="54E2" b="86 55"/>
+  <a u="54E3" b="86 56"/>
+  <a u="54E4" b="86 57"/>
+  <a u="54E5" b="B8 E7"/>
+  <a u="54E6" b="C5 B6"/>
+  <a u="54E7" b="DF EA"/>
+  <a u="54E8" b="C9 DA"/>
+  <a u="54E9" b="C1 A8"/>
+  <a u="54EA" b="C4 C4"/>
+  <a u="54EB" b="86 58"/>
+  <a u="54EC" b="86 59"/>
+  <a u="54ED" b="BF DE"/>
+  <a u="54EE" b="CF F8"/>
+  <a u="54EF" b="86 5A"/>
+  <a u="54F0" b="86 5B"/>
+  <a u="54F1" b="86 5C"/>
+  <a u="54F2" b="D5 DC"/>
+  <a u="54F3" b="DF EE"/>
+  <a u="54F4" b="86 5D"/>
+  <a u="54F5" b="86 5E"/>
+  <a u="54F6" b="86 5F"/>
+  <a u="54F7" b="86 60"/>
+  <a u="54F8" b="86 61"/>
+  <a u="54F9" b="86 62"/>
+  <a u="54FA" b="B2 B8"/>
+  <a u="54FB" b="86 63"/>
+  <a u="54FC" b="BA DF"/>
+  <a u="54FD" b="DF EC"/>
+  <a u="54FE" b="86 64"/>
+  <a u="54FF" b="DB C1"/>
+  <a u="5500" b="86 65"/>
+  <a u="5501" b="D1 E4"/>
+  <a u="5502" b="86 66"/>
+  <a u="5503" b="86 67"/>
+  <a u="5504" b="86 68"/>
+  <a u="5505" b="86 69"/>
+  <a u="5506" b="CB F4"/>
+  <a u="5507" b="B4 BD"/>
+  <a u="5508" b="86 6A"/>
+  <a u="5509" b="B0 A6"/>
+  <a u="550A" b="86 6B"/>
+  <a u="550B" b="86 6C"/>
+  <a u="550C" b="86 6D"/>
+  <a u="550D" b="86 6E"/>
+  <a u="550E" b="86 6F"/>
+  <a u="550F" b="DF F1"/>
+  <a u="5510" b="CC C6"/>
+  <a u="5511" b="DF F2"/>
+  <a u="5512" b="86 70"/>
+  <a u="5513" b="86 71"/>
+  <a u="5514" b="DF ED"/>
+  <a u="5515" b="86 72"/>
+  <a u="5516" b="86 73"/>
+  <a u="5517" b="86 74"/>
+  <a u="5518" b="86 75"/>
+  <a u="5519" b="86 76"/>
+  <a u="551A" b="86 77"/>
+  <a u="551B" b="DF E9"/>
+  <a u="551C" b="86 78"/>
+  <a u="551D" b="86 79"/>
+  <a u="551E" b="86 7A"/>
+  <a u="551F" b="86 7B"/>
+  <a u="5520" b="DF EB"/>
+  <a u="5521" b="86 7C"/>
+  <a u="5522" b="DF EF"/>
+  <a u="5523" b="DF F0"/>
+  <a u="5524" b="BB BD"/>
+  <a u="5525" b="86 7D"/>
+  <a u="5526" b="86 7E"/>
+  <a u="5527" b="DF F3"/>
+  <a u="5528" b="86 80"/>
+  <a u="5529" b="86 81"/>
+  <a u="552A" b="DF F4"/>
+  <a u="552B" b="86 82"/>
+  <a u="552C" b="BB A3"/>
+  <a u="552D" b="86 83"/>
+  <a u="552E" b="CA DB"/>
+  <a u="552F" b="CE A8"/>
+  <a u="5530" b="E0 A7"/>
+  <a u="5531" b="B3 AA"/>
+  <a u="5532" b="86 84"/>
+  <a u="5533" b="E0 A6"/>
+  <a u="5534" b="86 85"/>
+  <a u="5535" b="86 86"/>
+  <a u="5536" b="86 87"/>
+  <a u="5537" b="E0 A1"/>
+  <a u="5538" b="86 88"/>
+  <a u="5539" b="86 89"/>
+  <a u="553A" b="86 8A"/>
+  <a u="553B" b="86 8B"/>
+  <a u="553C" b="DF FE"/>
+  <a u="553D" b="86 8C"/>
+  <a u="553E" b="CD D9"/>
+  <a u="553F" b="DF FC"/>
+  <a u="5540" b="86 8D"/>
+  <a u="5541" b="DF FA"/>
+  <a u="5542" b="86 8E"/>
+  <a u="5543" b="BF D0"/>
+  <a u="5544" b="D7 C4"/>
+  <a u="5545" b="86 8F"/>
+  <a u="5546" b="C9 CC"/>
+  <a u="5547" b="86 90"/>
+  <a u="5548" b="86 91"/>
+  <a u="5549" b="DF F8"/>
+  <a u="554A" b="B0 A1"/>
+  <a u="554B" b="86 92"/>
+  <a u="554C" b="86 93"/>
+  <a u="554D" b="86 94"/>
+  <a u="554E" b="86 95"/>
+  <a u="554F" b="86 96"/>
+  <a u="5550" b="DF FD"/>
+  <a u="5551" b="86 97"/>
+  <a u="5552" b="86 98"/>
+  <a u="5553" b="86 99"/>
+  <a u="5554" b="86 9A"/>
+  <a u="5555" b="DF FB"/>
+  <a u="5556" b="E0 A2"/>
+  <a u="5557" b="86 9B"/>
+  <a u="5558" b="86 9C"/>
+  <a u="5559" b="86 9D"/>
+  <a u="555A" b="86 9E"/>
+  <a u="555B" b="86 9F"/>
+  <a u="555C" b="E0 A8"/>
+  <a u="555D" b="86 A0"/>
+  <a u="555E" b="86 A1"/>
+  <a u="555F" b="86 A2"/>
+  <a u="5560" b="86 A3"/>
+  <a u="5561" b="B7 C8"/>
+  <a u="5562" b="86 A4"/>
+  <a u="5563" b="86 A5"/>
+  <a u="5564" b="C6 A1"/>
+  <a u="5565" b="C9 B6"/>
+  <a u="5566" b="C0 B2"/>
+  <a u="5567" b="DF F5"/>
+  <a u="5568" b="86 A6"/>
+  <a u="5569" b="86 A7"/>
+  <a u="556A" b="C5 BE"/>
+  <a u="556B" b="86 A8"/>
+  <a u="556C" b="D8 C4"/>
+  <a u="556D" b="DF F9"/>
+  <a u="556E" b="C4 F6"/>
+  <a u="556F" b="86 A9"/>
+  <a u="5570" b="86 AA"/>
+  <a u="5571" b="86 AB"/>
+  <a u="5572" b="86 AC"/>
+  <a u="5573" b="86 AD"/>
+  <a u="5574" b="86 AE"/>
+  <a u="5575" b="E0 A3"/>
+  <a u="5576" b="E0 A4"/>
+  <a u="5577" b="E0 A5"/>
+  <a u="5578" b="D0 A5"/>
+  <a u="5579" b="86 AF"/>
+  <a u="557A" b="86 B0"/>
+  <a u="557B" b="E0 B4"/>
+  <a u="557C" b="CC E4"/>
+  <a u="557D" b="86 B1"/>
+  <a u="557E" b="E0 B1"/>
+  <a u="557F" b="86 B2"/>
+  <a u="5580" b="BF A6"/>
+  <a u="5581" b="E0 AF"/>
+  <a u="5582" b="CE B9"/>
+  <a u="5583" b="E0 AB"/>
+  <a u="5584" b="C9 C6"/>
+  <a u="5585" b="86 B3"/>
+  <a u="5586" b="86 B4"/>
+  <a u="5587" b="C0 AE"/>
+  <a u="5588" b="E0 AE"/>
+  <a u="5589" b="BA ED"/>
+  <a u="558A" b="BA B0"/>
+  <a u="558B" b="E0 A9"/>
+  <a u="558C" b="86 B5"/>
+  <a u="558D" b="86 B6"/>
+  <a u="558E" b="86 B7"/>
+  <a u="558F" b="DF F6"/>
+  <a u="5590" b="86 B8"/>
+  <a u="5591" b="E0 B3"/>
+  <a u="5592" b="86 B9"/>
+  <a u="5593" b="86 BA"/>
+  <a u="5594" b="E0 B8"/>
+  <a u="5595" b="86 BB"/>
+  <a u="5596" b="86 BC"/>
+  <a u="5597" b="86 BD"/>
+  <a u="5598" b="B4 AD"/>
+  <a u="5599" b="E0 B9"/>
+  <a u="559A" b="86 BE"/>
+  <a u="559B" b="86 BF"/>
+  <a u="559C" b="CF B2"/>
+  <a u="559D" b="BA C8"/>
+  <a u="559E" b="86 C0"/>
+  <a u="559F" b="E0 B0"/>
+  <a u="55A0" b="86 C1"/>
+  <a u="55A1" b="86 C2"/>
+  <a u="55A2" b="86 C3"/>
+  <a u="55A3" b="86 C4"/>
+  <a u="55A4" b="86 C5"/>
+  <a u="55A5" b="86 C6"/>
+  <a u="55A6" b="86 C7"/>
+  <a u="55A7" b="D0 FA"/>
+  <a u="55A8" b="86 C8"/>
+  <a u="55A9" b="86 C9"/>
+  <a u="55AA" b="86 CA"/>
+  <a u="55AB" b="86 CB"/>
+  <a u="55AC" b="86 CC"/>
+  <a u="55AD" b="86 CD"/>
+  <a u="55AE" b="86 CE"/>
+  <a u="55AF" b="86 CF"/>
+  <a u="55B0" b="86 D0"/>
+  <a u="55B1" b="E0 AC"/>
+  <a u="55B2" b="86 D1"/>
+  <a u="55B3" b="D4 FB"/>
+  <a u="55B4" b="86 D2"/>
+  <a u="55B5" b="DF F7"/>
+  <a u="55B6" b="86 D3"/>
+  <a u="55B7" b="C5 E7"/>
+  <a u="55B8" b="86 D4"/>
+  <a u="55B9" b="E0 AD"/>
+  <a u="55BA" b="86 D5"/>
+  <a u="55BB" b="D3 F7"/>
+  <a u="55BC" b="86 D6"/>
+  <a u="55BD" b="E0 B6"/>
+  <a u="55BE" b="E0 B7"/>
+  <a u="55BF" b="86 D7"/>
+  <a u="55C0" b="86 D8"/>
+  <a u="55C1" b="86 D9"/>
+  <a u="55C2" b="86 DA"/>
+  <a u="55C3" b="86 DB"/>
+  <a u="55C4" b="E0 C4"/>
+  <a u="55C5" b="D0 E1"/>
+  <a u="55C6" b="86 DC"/>
+  <a u="55C7" b="86 DD"/>
+  <a u="55C8" b="86 DE"/>
+  <a u="55C9" b="E0 BC"/>
+  <a u="55CA" b="86 DF"/>
+  <a u="55CB" b="86 E0"/>
+  <a u="55CC" b="E0 C9"/>
+  <a u="55CD" b="E0 CA"/>
+  <a u="55CE" b="86 E1"/>
+  <a u="55CF" b="86 E2"/>
+  <a u="55D0" b="86 E3"/>
+  <a u="55D1" b="E0 BE"/>
+  <a u="55D2" b="E0 AA"/>
+  <a u="55D3" b="C9 A4"/>
+  <a u="55D4" b="E0 C1"/>
+  <a u="55D5" b="86 E4"/>
+  <a u="55D6" b="E0 B2"/>
+  <a u="55D7" b="86 E5"/>
+  <a u="55D8" b="86 E6"/>
+  <a u="55D9" b="86 E7"/>
+  <a u="55DA" b="86 E8"/>
+  <a u="55DB" b="86 E9"/>
+  <a u="55DC" b="CA C8"/>
+  <a u="55DD" b="E0 C3"/>
+  <a u="55DE" b="86 EA"/>
+  <a u="55DF" b="E0 B5"/>
+  <a u="55E0" b="86 EB"/>
+  <a u="55E1" b="CE CB"/>
+  <a u="55E2" b="86 EC"/>
+  <a u="55E3" b="CB C3"/>
+  <a u="55E4" b="E0 CD"/>
+  <a u="55E5" b="E0 C6"/>
+  <a u="55E6" b="E0 C2"/>
+  <a u="55E7" b="86 ED"/>
+  <a u="55E8" b="E0 CB"/>
+  <a u="55E9" b="86 EE"/>
+  <a u="55EA" b="E0 BA"/>
+  <a u="55EB" b="E0 BF"/>
+  <a u="55EC" b="E0 C0"/>
+  <a u="55ED" b="86 EF"/>
+  <a u="55EE" b="86 F0"/>
+  <a u="55EF" b="E0 C5"/>
+  <a u="55F0" b="86 F1"/>
+  <a u="55F1" b="86 F2"/>
+  <a u="55F2" b="E0 C7"/>
+  <a u="55F3" b="E0 C8"/>
+  <a u="55F4" b="86 F3"/>
+  <a u="55F5" b="E0 CC"/>
+  <a u="55F6" b="86 F4"/>
+  <a u="55F7" b="E0 BB"/>
+  <a u="55F8" b="86 F5"/>
+  <a u="55F9" b="86 F6"/>
+  <a u="55FA" b="86 F7"/>
+  <a u="55FB" b="86 F8"/>
+  <a u="55FC" b="86 F9"/>
+  <a u="55FD" b="CB D4"/>
+  <a u="55FE" b="E0 D5"/>
+  <a u="55FF" b="86 FA"/>
+  <a u="5600" b="E0 D6"/>
+  <a u="5601" b="E0 D2"/>
+  <a u="5602" b="86 FB"/>
+  <a u="5603" b="86 FC"/>
+  <a u="5604" b="86 FD"/>
+  <a u="5605" b="86 FE"/>
+  <a u="5606" b="87 40"/>
+  <a u="5607" b="87 41"/>
+  <a u="5608" b="E0 D0"/>
+  <a u="5609" b="BC CE"/>
+  <a u="560A" b="87 42"/>
+  <a u="560B" b="87 43"/>
+  <a u="560C" b="E0 D1"/>
+  <a u="560D" b="87 44"/>
+  <a u="560E" b="B8 C2"/>
+  <a u="560F" b="D8 C5"/>
+  <a u="5610" b="87 45"/>
+  <a u="5611" b="87 46"/>
+  <a u="5612" b="87 47"/>
+  <a u="5613" b="87 48"/>
+  <a u="5614" b="87 49"/>
+  <a u="5615" b="87 4A"/>
+  <a u="5616" b="87 4B"/>
+  <a u="5617" b="87 4C"/>
+  <a u="5618" b="D0 EA"/>
+  <a u="5619" b="87 4D"/>
+  <a u="561A" b="87 4E"/>
+  <a u="561B" b="C2 EF"/>
+  <a u="561C" b="87 4F"/>
+  <a u="561D" b="87 50"/>
+  <a u="561E" b="E0 CF"/>
+  <a u="561F" b="E0 BD"/>
+  <a u="5620" b="87 51"/>
+  <a u="5621" b="87 52"/>
+  <a u="5622" b="87 53"/>
+  <a u="5623" b="E0 D4"/>
+  <a u="5624" b="E0 D3"/>
+  <a u="5625" b="87 54"/>
+  <a u="5626" b="87 55"/>
+  <a u="5627" b="E0 D7"/>
+  <a u="5628" b="87 56"/>
+  <a u="5629" b="87 57"/>
+  <a u="562A" b="87 58"/>
+  <a u="562B" b="87 59"/>
+  <a u="562C" b="E0 DC"/>
+  <a u="562D" b="E0 D8"/>
+  <a u="562E" b="87 5A"/>
+  <a u="562F" b="87 5B"/>
+  <a u="5630" b="87 5C"/>
+  <a u="5631" b="D6 F6"/>
+  <a u="5632" b="B3 B0"/>
+  <a u="5633" b="87 5D"/>
+  <a u="5634" b="D7 EC"/>
+  <a u="5635" b="87 5E"/>
+  <a u="5636" b="CB BB"/>
+  <a u="5637" b="87 5F"/>
+  <a u="5638" b="87 60"/>
+  <a u="5639" b="E0 DA"/>
+  <a u="563A" b="87 61"/>
+  <a u="563B" b="CE FB"/>
+  <a u="563C" b="87 62"/>
+  <a u="563D" b="87 63"/>
+  <a u="563E" b="87 64"/>
+  <a u="563F" b="BA D9"/>
+  <a u="5640" b="87 65"/>
+  <a u="5641" b="87 66"/>
+  <a u="5642" b="87 67"/>
+  <a u="5643" b="87 68"/>
+  <a u="5644" b="87 69"/>
+  <a u="5645" b="87 6A"/>
+  <a u="5646" b="87 6B"/>
+  <a u="5647" b="87 6C"/>
+  <a u="5648" b="87 6D"/>
+  <a u="5649" b="87 6E"/>
+  <a u="564A" b="87 6F"/>
+  <a u="564B" b="87 70"/>
+  <a u="564C" b="E0 E1"/>
+  <a u="564D" b="E0 DD"/>
+  <a u="564E" b="D2 AD"/>
+  <a u="564F" b="87 71"/>
+  <a u="5650" b="87 72"/>
+  <a u="5651" b="87 73"/>
+  <a u="5652" b="87 74"/>
+  <a u="5653" b="87 75"/>
+  <a u="5654" b="E0 E2"/>
+  <a u="5655" b="87 76"/>
+  <a u="5656" b="87 77"/>
+  <a u="5657" b="E0 DB"/>
+  <a u="5658" b="E0 D9"/>
+  <a u="5659" b="E0 DF"/>
+  <a u="565A" b="87 78"/>
+  <a u="565B" b="87 79"/>
+  <a u="565C" b="E0 E0"/>
+  <a u="565D" b="87 7A"/>
+  <a u="565E" b="87 7B"/>
+  <a u="565F" b="87 7C"/>
+  <a u="5660" b="87 7D"/>
+  <a u="5661" b="87 7E"/>
+  <a u="5662" b="E0 DE"/>
+  <a u="5663" b="87 80"/>
+  <a u="5664" b="E0 E4"/>
+  <a u="5665" b="87 81"/>
+  <a u="5666" b="87 82"/>
+  <a u="5667" b="87 83"/>
+  <a u="5668" b="C6 F7"/>
+  <a u="5669" b="D8 AC"/>
+  <a u="566A" b="D4 EB"/>
+  <a u="566B" b="E0 E6"/>
+  <a u="566C" b="CA C9"/>
+  <a u="566D" b="87 84"/>
+  <a u="566E" b="87 85"/>
+  <a u="566F" b="87 86"/>
+  <a u="5670" b="87 87"/>
+  <a u="5671" b="E0 E5"/>
+  <a u="5672" b="87 88"/>
+  <a u="5673" b="87 89"/>
+  <a u="5674" b="87 8A"/>
+  <a u="5675" b="87 8B"/>
+  <a u="5676" b="B8 C1"/>
+  <a u="5677" b="87 8C"/>
+  <a u="5678" b="87 8D"/>
+  <a u="5679" b="87 8E"/>
+  <a u="567A" b="87 8F"/>
+  <a u="567B" b="E0 E7"/>
+  <a u="567C" b="E0 E8"/>
+  <a u="567D" b="87 90"/>
+  <a u="567E" b="87 91"/>
+  <a u="567F" b="87 92"/>
+  <a u="5680" b="87 93"/>
+  <a u="5681" b="87 94"/>
+  <a u="5682" b="87 95"/>
+  <a u="5683" b="87 96"/>
+  <a u="5684" b="87 97"/>
+  <a u="5685" b="E0 E9"/>
+  <a u="5686" b="E0 E3"/>
+  <a u="5687" b="87 98"/>
+  <a u="5688" b="87 99"/>
+  <a u="5689" b="87 9A"/>
+  <a u="568A" b="87 9B"/>
+  <a u="568B" b="87 9C"/>
+  <a u="568C" b="87 9D"/>
+  <a u="568D" b="87 9E"/>
+  <a u="568E" b="BA BF"/>
+  <a u="568F" b="CC E7"/>
+  <a u="5690" b="87 9F"/>
+  <a u="5691" b="87 A0"/>
+  <a u="5692" b="87 A1"/>
+  <a u="5693" b="E0 EA"/>
+  <a u="5694" b="87 A2"/>
+  <a u="5695" b="87 A3"/>
+  <a u="5696" b="87 A4"/>
+  <a u="5697" b="87 A5"/>
+  <a u="5698" b="87 A6"/>
+  <a u="5699" b="87 A7"/>
+  <a u="569A" b="87 A8"/>
+  <a u="569B" b="87 A9"/>
+  <a u="569C" b="87 AA"/>
+  <a u="569D" b="87 AB"/>
+  <a u="569E" b="87 AC"/>
+  <a u="569F" b="87 AD"/>
+  <a u="56A0" b="87 AE"/>
+  <a u="56A1" b="87 AF"/>
+  <a u="56A2" b="87 B0"/>
+  <a u="56A3" b="CF F9"/>
+  <a u="56A4" b="87 B1"/>
+  <a u="56A5" b="87 B2"/>
+  <a u="56A6" b="87 B3"/>
+  <a u="56A7" b="87 B4"/>
+  <a u="56A8" b="87 B5"/>
+  <a u="56A9" b="87 B6"/>
+  <a u="56AA" b="87 B7"/>
+  <a u="56AB" b="87 B8"/>
+  <a u="56AC" b="87 B9"/>
+  <a u="56AD" b="87 BA"/>
+  <a u="56AE" b="87 BB"/>
+  <a u="56AF" b="E0 EB"/>
+  <a u="56B0" b="87 BC"/>
+  <a u="56B1" b="87 BD"/>
+  <a u="56B2" b="87 BE"/>
+  <a u="56B3" b="87 BF"/>
+  <a u="56B4" b="87 C0"/>
+  <a u="56B5" b="87 C1"/>
+  <a u="56B6" b="87 C2"/>
+  <a u="56B7" b="C8 C2"/>
+  <a u="56B8" b="87 C3"/>
+  <a u="56B9" b="87 C4"/>
+  <a u="56BA" b="87 C5"/>
+  <a u="56BB" b="87 C6"/>
+  <a u="56BC" b="BD C0"/>
+  <a u="56BD" b="87 C7"/>
+  <a u="56BE" b="87 C8"/>
+  <a u="56BF" b="87 C9"/>
+  <a u="56C0" b="87 CA"/>
+  <a u="56C1" b="87 CB"/>
+  <a u="56C2" b="87 CC"/>
+  <a u="56C3" b="87 CD"/>
+  <a u="56C4" b="87 CE"/>
+  <a u="56C5" b="87 CF"/>
+  <a u="56C6" b="87 D0"/>
+  <a u="56C7" b="87 D1"/>
+  <a u="56C8" b="87 D2"/>
+  <a u="56C9" b="87 D3"/>
+  <a u="56CA" b="C4 D2"/>
+  <a u="56CB" b="87 D4"/>
+  <a u="56CC" b="87 D5"/>
+  <a u="56CD" b="87 D6"/>
+  <a u="56CE" b="87 D7"/>
+  <a u="56CF" b="87 D8"/>
+  <a u="56D0" b="87 D9"/>
+  <a u="56D1" b="87 DA"/>
+  <a u="56D2" b="87 DB"/>
+  <a u="56D3" b="87 DC"/>
+  <a u="56D4" b="E0 EC"/>
+  <a u="56D5" b="87 DD"/>
+  <a u="56D6" b="87 DE"/>
+  <a u="56D7" b="E0 ED"/>
+  <a u="56D8" b="87 DF"/>
+  <a u="56D9" b="87 E0"/>
+  <a u="56DA" b="C7 F4"/>
+  <a u="56DB" b="CB C4"/>
+  <a u="56DC" b="87 E1"/>
+  <a u="56DD" b="E0 EE"/>
+  <a u="56DE" b="BB D8"/>
+  <a u="56DF" b="D8 B6"/>
+  <a u="56E0" b="D2 F2"/>
+  <a u="56E1" b="E0 EF"/>
+  <a u="56E2" b="CD C5"/>
+  <a u="56E3" b="87 E2"/>
+  <a u="56E4" b="B6 DA"/>
+  <a u="56E5" b="87 E3"/>
+  <a u="56E6" b="87 E4"/>
+  <a u="56E7" b="87 E5"/>
+  <a u="56E8" b="87 E6"/>
+  <a u="56E9" b="87 E7"/>
+  <a u="56EA" b="87 E8"/>
+  <a u="56EB" b="E0 F1"/>
+  <a u="56EC" b="87 E9"/>
+  <a u="56ED" b="D4 B0"/>
+  <a u="56EE" b="87 EA"/>
+  <a u="56EF" b="87 EB"/>
+  <a u="56F0" b="C0 A7"/>
+  <a u="56F1" b="B4 D1"/>
+  <a u="56F2" b="87 EC"/>
+  <a u="56F3" b="87 ED"/>
+  <a u="56F4" b="CE A7"/>
+  <a u="56F5" b="E0 F0"/>
+  <a u="56F6" b="87 EE"/>
+  <a u="56F7" b="87 EF"/>
+  <a u="56F8" b="87 F0"/>
+  <a u="56F9" b="E0 F2"/>
+  <a u="56FA" b="B9 CC"/>
+  <a u="56FB" b="87 F1"/>
+  <a u="56FC" b="87 F2"/>
+  <a u="56FD" b="B9 FA"/>
+  <a u="56FE" b="CD BC"/>
+  <a u="56FF" b="E0 F3"/>
+  <a u="5700" b="87 F3"/>
+  <a u="5701" b="87 F4"/>
+  <a u="5702" b="87 F5"/>
+  <a u="5703" b="C6 D4"/>
+  <a u="5704" b="E0 F4"/>
+  <a u="5705" b="87 F6"/>
+  <a u="5706" b="D4 B2"/>
+  <a u="5707" b="87 F7"/>
+  <a u="5708" b="C8 A6"/>
+  <a u="5709" b="E0 F6"/>
+  <a u="570A" b="E0 F5"/>
+  <a u="570B" b="87 F8"/>
+  <a u="570C" b="87 F9"/>
+  <a u="570D" b="87 FA"/>
+  <a u="570E" b="87 FB"/>
+  <a u="570F" b="87 FC"/>
+  <a u="5710" b="87 FD"/>
+  <a u="5711" b="87 FE"/>
+  <a u="5712" b="88 40"/>
+  <a u="5713" b="88 41"/>
+  <a u="5714" b="88 42"/>
+  <a u="5715" b="88 43"/>
+  <a u="5716" b="88 44"/>
+  <a u="5717" b="88 45"/>
+  <a u="5718" b="88 46"/>
+  <a u="5719" b="88 47"/>
+  <a u="571A" b="88 48"/>
+  <a u="571B" b="88 49"/>
+  <a u="571C" b="E0 F7"/>
+  <a u="571D" b="88 4A"/>
+  <a u="571E" b="88 4B"/>
+  <a u="571F" b="CD C1"/>
+  <a u="5720" b="88 4C"/>
+  <a u="5721" b="88 4D"/>
+  <a u="5722" b="88 4E"/>
+  <a u="5723" b="CA A5"/>
+  <a u="5724" b="88 4F"/>
+  <a u="5725" b="88 50"/>
+  <a u="5726" b="88 51"/>
+  <a u="5727" b="88 52"/>
+  <a u="5728" b="D4 DA"/>
+  <a u="5729" b="DB D7"/>
+  <a u="572A" b="DB D9"/>
+  <a u="572B" b="88 53"/>
+  <a u="572C" b="DB D8"/>
+  <a u="572D" b="B9 E7"/>
+  <a u="572E" b="DB DC"/>
+  <a u="572F" b="DB DD"/>
+  <a u="5730" b="B5 D8"/>
+  <a u="5731" b="88 54"/>
+  <a u="5732" b="88 55"/>
+  <a u="5733" b="DB DA"/>
+  <a u="5734" b="88 56"/>
+  <a u="5735" b="88 57"/>
+  <a u="5736" b="88 58"/>
+  <a u="5737" b="88 59"/>
+  <a u="5738" b="88 5A"/>
+  <a u="5739" b="DB DB"/>
+  <a u="573A" b="B3 A1"/>
+  <a u="573B" b="DB DF"/>
+  <a u="573C" b="88 5B"/>
+  <a u="573D" b="88 5C"/>
+  <a u="573E" b="BB F8"/>
+  <a u="573F" b="88 5D"/>
+  <a u="5740" b="D6 B7"/>
+  <a u="5741" b="88 5E"/>
+  <a u="5742" b="DB E0"/>
+  <a u="5743" b="88 5F"/>
+  <a u="5744" b="88 60"/>
+  <a u="5745" b="88 61"/>
+  <a u="5746" b="88 62"/>
+  <a u="5747" b="BE F9"/>
+  <a u="5748" b="88 63"/>
+  <a u="5749" b="88 64"/>
+  <a u="574A" b="B7 BB"/>
+  <a u="574B" b="88 65"/>
+  <a u="574C" b="DB D0"/>
+  <a u="574D" b="CC AE"/>
+  <a u="574E" b="BF B2"/>
+  <a u="574F" b="BB B5"/>
+  <a u="5750" b="D7 F8"/>
+  <a u="5751" b="BF D3"/>
+  <a u="5752" b="88 66"/>
+  <a u="5753" b="88 67"/>
+  <a u="5754" b="88 68"/>
+  <a u="5755" b="88 69"/>
+  <a u="5756" b="88 6A"/>
+  <a u="5757" b="BF E9"/>
+  <a u="5758" b="88 6B"/>
+  <a u="5759" b="88 6C"/>
+  <a u="575A" b="BC E1"/>
+  <a u="575B" b="CC B3"/>
+  <a u="575C" b="DB DE"/>
+  <a u="575D" b="B0 D3"/>
+  <a u="575E" b="CE EB"/>
+  <a u="575F" b="B7 D8"/>
+  <a u="5760" b="D7 B9"/>
+  <a u="5761" b="C6 C2"/>
+  <a u="5762" b="88 6D"/>
+  <a u="5763" b="88 6E"/>
+  <a u="5764" b="C0 A4"/>
+  <a u="5765" b="88 6F"/>
+  <a u="5766" b="CC B9"/>
+  <a u="5767" b="88 70"/>
+  <a u="5768" b="DB E7"/>
+  <a u="5769" b="DB E1"/>
+  <a u="576A" b="C6 BA"/>
+  <a u="576B" b="DB E3"/>
+  <a u="576C" b="88 71"/>
+  <a u="576D" b="DB E8"/>
+  <a u="576E" b="88 72"/>
+  <a u="576F" b="C5 F7"/>
+  <a u="5770" b="88 73"/>
+  <a u="5771" b="88 74"/>
+  <a u="5772" b="88 75"/>
+  <a u="5773" b="DB EA"/>
+  <a u="5774" b="88 76"/>
+  <a u="5775" b="88 77"/>
+  <a u="5776" b="DB E9"/>
+  <a u="5777" b="BF C0"/>
+  <a u="5778" b="88 78"/>
+  <a u="5779" b="88 79"/>
+  <a u="577A" b="88 7A"/>
+  <a u="577B" b="DB E6"/>
+  <a u="577C" b="DB E5"/>
+  <a u="577D" b="88 7B"/>
+  <a u="577E" b="88 7C"/>
+  <a u="577F" b="88 7D"/>
+  <a u="5780" b="88 7E"/>
+  <a u="5781" b="88 80"/>
+  <a u="5782" b="B4 B9"/>
+  <a u="5783" b="C0 AC"/>
+  <a u="5784" b="C2 A2"/>
+  <a u="5785" b="DB E2"/>
+  <a u="5786" b="DB E4"/>
+  <a u="5787" b="88 81"/>
+  <a u="5788" b="88 82"/>
+  <a u="5789" b="88 83"/>
+  <a u="578A" b="88 84"/>
+  <a u="578B" b="D0 CD"/>
+  <a u="578C" b="DB ED"/>
+  <a u="578D" b="88 85"/>
+  <a u="578E" b="88 86"/>
+  <a u="578F" b="88 87"/>
+  <a u="5790" b="88 88"/>
+  <a u="5791" b="88 89"/>
+  <a u="5792" b="C0 DD"/>
+  <a u="5793" b="DB F2"/>
+  <a u="5794" b="88 8A"/>
+  <a u="5795" b="88 8B"/>
+  <a u="5796" b="88 8C"/>
+  <a u="5797" b="88 8D"/>
+  <a u="5798" b="88 8E"/>
+  <a u="5799" b="88 8F"/>
+  <a u="579A" b="88 90"/>
+  <a u="579B" b="B6 E2"/>
+  <a u="579C" b="88 91"/>
+  <a u="579D" b="88 92"/>
+  <a u="579E" b="88 93"/>
+  <a u="579F" b="88 94"/>
+  <a u="57A0" b="DB F3"/>
+  <a u="57A1" b="DB D2"/>
+  <a u="57A2" b="B9 B8"/>
+  <a u="57A3" b="D4 AB"/>
+  <a u="57A4" b="DB EC"/>
+  <a u="57A5" b="88 95"/>
+  <a u="57A6" b="BF D1"/>
+  <a u="57A7" b="DB F0"/>
+  <a u="57A8" b="88 96"/>
+  <a u="57A9" b="DB D1"/>
+  <a u="57AA" b="88 97"/>
+  <a u="57AB" b="B5 E6"/>
+  <a u="57AC" b="88 98"/>
+  <a u="57AD" b="DB EB"/>
+  <a u="57AE" b="BF E5"/>
+  <a u="57AF" b="88 99"/>
+  <a u="57B0" b="88 9A"/>
+  <a u="57B1" b="88 9B"/>
+  <a u="57B2" b="DB EE"/>
+  <a u="57B3" b="88 9C"/>
+  <a u="57B4" b="DB F1"/>
+  <a u="57B5" b="88 9D"/>
+  <a u="57B6" b="88 9E"/>
+  <a u="57B7" b="88 9F"/>
+  <a u="57B8" b="DB F9"/>
+  <a u="57B9" b="88 A0"/>
+  <a u="57BA" b="88 A1"/>
+  <a u="57BB" b="88 A2"/>
+  <a u="57BC" b="88 A3"/>
+  <a u="57BD" b="88 A4"/>
+  <a u="57BE" b="88 A5"/>
+  <a u="57BF" b="88 A6"/>
+  <a u="57C0" b="88 A7"/>
+  <a u="57C1" b="88 A8"/>
+  <a u="57C2" b="B9 A1"/>
+  <a u="57C3" b="B0 A3"/>
+  <a u="57C4" b="88 A9"/>
+  <a u="57C5" b="88 AA"/>
+  <a u="57C6" b="88 AB"/>
+  <a u="57C7" b="88 AC"/>
+  <a u="57C8" b="88 AD"/>
+  <a u="57C9" b="88 AE"/>
+  <a u="57CA" b="88 AF"/>
+  <a u="57CB" b="C2 F1"/>
+  <a u="57CC" b="88 B0"/>
+  <a u="57CD" b="88 B1"/>
+  <a u="57CE" b="B3 C7"/>
+  <a u="57CF" b="DB EF"/>
+  <a u="57D0" b="88 B2"/>
+  <a u="57D1" b="88 B3"/>
+  <a u="57D2" b="DB F8"/>
+  <a u="57D3" b="88 B4"/>
+  <a u="57D4" b="C6 D2"/>
+  <a u="57D5" b="DB F4"/>
+  <a u="57D6" b="88 B5"/>
+  <a u="57D7" b="88 B6"/>
+  <a u="57D8" b="DB F5"/>
+  <a u="57D9" b="DB F7"/>
+  <a u="57DA" b="DB F6"/>
+  <a u="57DB" b="88 B7"/>
+  <a u="57DC" b="88 B8"/>
+  <a u="57DD" b="DB FE"/>
+  <a u="57DE" b="88 B9"/>
+  <a u="57DF" b="D3 F2"/>
+  <a u="57E0" b="B2 BA"/>
+  <a u="57E1" b="88 BA"/>
+  <a u="57E2" b="88 BB"/>
+  <a u="57E3" b="88 BC"/>
+  <a u="57E4" b="DB FD"/>
+  <a u="57E5" b="88 BD"/>
+  <a u="57E6" b="88 BE"/>
+  <a u="57E7" b="88 BF"/>
+  <a u="57E8" b="88 C0"/>
+  <a u="57E9" b="88 C1"/>
+  <a u="57EA" b="88 C2"/>
+  <a u="57EB" b="88 C3"/>
+  <a u="57EC" b="88 C4"/>
+  <a u="57ED" b="DC A4"/>
+  <a u="57EE" b="88 C5"/>
+  <a u="57EF" b="DB FB"/>
+  <a u="57F0" b="88 C6"/>
+  <a u="57F1" b="88 C7"/>
+  <a u="57F2" b="88 C8"/>
+  <a u="57F3" b="88 C9"/>
+  <a u="57F4" b="DB FA"/>
+  <a u="57F5" b="88 CA"/>
+  <a u="57F6" b="88 CB"/>
+  <a u="57F7" b="88 CC"/>
+  <a u="57F8" b="DB FC"/>
+  <a u="57F9" b="C5 E0"/>
+  <a u="57FA" b="BB F9"/>
+  <a u="57FB" b="88 CD"/>
+  <a u="57FC" b="88 CE"/>
+  <a u="57FD" b="DC A3"/>
+  <a u="57FE" b="88 CF"/>
+  <a u="57FF" b="88 D0"/>
+  <a u="5800" b="DC A5"/>
+  <a u="5801" b="88 D1"/>
+  <a u="5802" b="CC C3"/>
+  <a u="5803" b="88 D2"/>
+  <a u="5804" b="88 D3"/>
+  <a u="5805" b="88 D4"/>
+  <a u="5806" b="B6 D1"/>
+  <a u="5807" b="DD C0"/>
+  <a u="5808" b="88 D5"/>
+  <a u="5809" b="88 D6"/>
+  <a u="580A" b="88 D7"/>
+  <a u="580B" b="DC A1"/>
+  <a u="580C" b="88 D8"/>
+  <a u="580D" b="DC A2"/>
+  <a u="580E" b="88 D9"/>
+  <a u="580F" b="88 DA"/>
+  <a u="5810" b="88 DB"/>
+  <a u="5811" b="C7 B5"/>
+  <a u="5812" b="88 DC"/>
+  <a u="5813" b="88 DD"/>
+  <a u="5814" b="88 DE"/>
+  <a u="5815" b="B6 E9"/>
+  <a u="5816" b="88 DF"/>
+  <a u="5817" b="88 E0"/>
+  <a u="5818" b="88 E1"/>
+  <a u="5819" b="DC A7"/>
+  <a u="581A" b="88 E2"/>
+  <a u="581B" b="88 E3"/>
+  <a u="581C" b="88 E4"/>
+  <a u="581D" b="88 E5"/>
+  <a u="581E" b="DC A6"/>
+  <a u="581F" b="88 E6"/>
+  <a u="5820" b="DC A9"/>
+  <a u="5821" b="B1 A4"/>
+  <a u="5822" b="88 E7"/>
+  <a u="5823" b="88 E8"/>
+  <a u="5824" b="B5 CC"/>
+  <a u="5825" b="88 E9"/>
+  <a u="5826" b="88 EA"/>
+  <a u="5827" b="88 EB"/>
+  <a u="5828" b="88 EC"/>
+  <a u="5829" b="88 ED"/>
+  <a u="582A" b="BF B0"/>
+  <a u="582B" b="88 EE"/>
+  <a u="582C" b="88 EF"/>
+  <a u="582D" b="88 F0"/>
+  <a u="582E" b="88 F1"/>
+  <a u="582F" b="88 F2"/>
+  <a u="5830" b="D1 DF"/>
+  <a u="5831" b="88 F3"/>
+  <a u="5832" b="88 F4"/>
+  <a u="5833" b="88 F5"/>
+  <a u="5834" b="88 F6"/>
+  <a u="5835" b="B6 C2"/>
+  <a u="5836" b="88 F7"/>
+  <a u="5837" b="88 F8"/>
+  <a u="5838" b="88 F9"/>
+  <a u="5839" b="88 FA"/>
+  <a u="583A" b="88 FB"/>
+  <a u="583B" b="88 FC"/>
+  <a u="583C" b="88 FD"/>
+  <a u="583D" b="88 FE"/>
+  <a u="583E" b="89 40"/>
+  <a u="583F" b="89 41"/>
+  <a u="5840" b="89 42"/>
+  <a u="5841" b="89 43"/>
+  <a u="5842" b="89 44"/>
+  <a u="5843" b="89 45"/>
+  <a u="5844" b="DC A8"/>
+  <a u="5845" b="89 46"/>
+  <a u="5846" b="89 47"/>
+  <a u="5847" b="89 48"/>
+  <a u="5848" b="89 49"/>
+  <a u="5849" b="89 4A"/>
+  <a u="584A" b="89 4B"/>
+  <a u="584B" b="89 4C"/>
+  <a u="584C" b="CB FA"/>
+  <a u="584D" b="EB F3"/>
+  <a u="584E" b="89 4D"/>
+  <a u="584F" b="89 4E"/>
+  <a u="5850" b="89 4F"/>
+  <a u="5851" b="CB DC"/>
+  <a u="5852" b="89 50"/>
+  <a u="5853" b="89 51"/>
+  <a u="5854" b="CB FE"/>
+  <a u="5855" b="89 52"/>
+  <a u="5856" b="89 53"/>
+  <a u="5857" b="89 54"/>
+  <a u="5858" b="CC C1"/>
+  <a u="5859" b="89 55"/>
+  <a u="585A" b="89 56"/>
+  <a u="585B" b="89 57"/>
+  <a u="585C" b="89 58"/>
+  <a u="585D" b="89 59"/>
+  <a u="585E" b="C8 FB"/>
+  <a u="585F" b="89 5A"/>
+  <a u="5860" b="89 5B"/>
+  <a u="5861" b="89 5C"/>
+  <a u="5862" b="89 5D"/>
+  <a u="5863" b="89 5E"/>
+  <a u="5864" b="89 5F"/>
+  <a u="5865" b="DC AA"/>
+  <a u="5866" b="89 60"/>
+  <a u="5867" b="89 61"/>
+  <a u="5868" b="89 62"/>
+  <a u="5869" b="89 63"/>
+  <a u="586A" b="89 64"/>
+  <a u="586B" b="CC EE"/>
+  <a u="586C" b="DC AB"/>
+  <a u="586D" b="89 65"/>
+  <a u="586E" b="89 66"/>
+  <a u="586F" b="89 67"/>
+  <a u="5870" b="89 68"/>
+  <a u="5871" b="89 69"/>
+  <a u="5872" b="89 6A"/>
+  <a u="5873" b="89 6B"/>
+  <a u="5874" b="89 6C"/>
+  <a u="5875" b="89 6D"/>
+  <a u="5876" b="89 6E"/>
+  <a u="5877" b="89 6F"/>
+  <a u="5878" b="89 70"/>
+  <a u="5879" b="89 71"/>
+  <a u="587A" b="89 72"/>
+  <a u="587B" b="89 73"/>
+  <a u="587C" b="89 74"/>
+  <a u="587D" b="89 75"/>
+  <a u="587E" b="DB D3"/>
+  <a u="587F" b="89 76"/>
+  <a u="5880" b="DC AF"/>
+  <a u="5881" b="DC AC"/>
+  <a u="5882" b="89 77"/>
+  <a u="5883" b="BE B3"/>
+  <a u="5884" b="89 78"/>
+  <a u="5885" b="CA FB"/>
+  <a u="5886" b="89 79"/>
+  <a u="5887" b="89 7A"/>
+  <a u="5888" b="89 7B"/>
+  <a u="5889" b="DC AD"/>
+  <a u="588A" b="89 7C"/>
+  <a u="588B" b="89 7D"/>
+  <a u="588C" b="89 7E"/>
+  <a u="588D" b="89 80"/>
+  <a u="588E" b="89 81"/>
+  <a u="588F" b="89 82"/>
+  <a u="5890" b="89 83"/>
+  <a u="5891" b="89 84"/>
+  <a u="5892" b="C9 CA"/>
+  <a u="5893" b="C4 B9"/>
+  <a u="5894" b="89 85"/>
+  <a u="5895" b="89 86"/>
+  <a u="5896" b="89 87"/>
+  <a u="5897" b="89 88"/>
+  <a u="5898" b="89 89"/>
+  <a u="5899" b="C7 BD"/>
+  <a u="589A" b="DC AE"/>
+  <a u="589B" b="89 8A"/>
+  <a u="589C" b="89 8B"/>
+  <a u="589D" b="89 8C"/>
+  <a u="589E" b="D4 F6"/>
+  <a u="589F" b="D0 E6"/>
+  <a u="58A0" b="89 8D"/>
+  <a u="58A1" b="89 8E"/>
+  <a u="58A2" b="89 8F"/>
+  <a u="58A3" b="89 90"/>
+  <a u="58A4" b="89 91"/>
+  <a u="58A5" b="89 92"/>
+  <a u="58A6" b="89 93"/>
+  <a u="58A7" b="89 94"/>
+  <a u="58A8" b="C4 AB"/>
+  <a u="58A9" b="B6 D5"/>
+  <a u="58AA" b="89 95"/>
+  <a u="58AB" b="89 96"/>
+  <a u="58AC" b="89 97"/>
+  <a u="58AD" b="89 98"/>
+  <a u="58AE" b="89 99"/>
+  <a u="58AF" b="89 9A"/>
+  <a u="58B0" b="89 9B"/>
+  <a u="58B1" b="89 9C"/>
+  <a u="58B2" b="89 9D"/>
+  <a u="58B3" b="89 9E"/>
+  <a u="58B4" b="89 9F"/>
+  <a u="58B5" b="89 A0"/>
+  <a u="58B6" b="89 A1"/>
+  <a u="58B7" b="89 A2"/>
+  <a u="58B8" b="89 A3"/>
+  <a u="58B9" b="89 A4"/>
+  <a u="58BA" b="89 A5"/>
+  <a u="58BB" b="89 A6"/>
+  <a u="58BC" b="DB D4"/>
+  <a u="58BD" b="89 A7"/>
+  <a u="58BE" b="89 A8"/>
+  <a u="58BF" b="89 A9"/>
+  <a u="58C0" b="89 AA"/>
+  <a u="58C1" b="B1 DA"/>
+  <a u="58C2" b="89 AB"/>
+  <a u="58C3" b="89 AC"/>
+  <a u="58C4" b="89 AD"/>
+  <a u="58C5" b="DB D5"/>
+  <a u="58C6" b="89 AE"/>
+  <a u="58C7" b="89 AF"/>
+  <a u="58C8" b="89 B0"/>
+  <a u="58C9" b="89 B1"/>
+  <a u="58CA" b="89 B2"/>
+  <a u="58CB" b="89 B3"/>
+  <a u="58CC" b="89 B4"/>
+  <a u="58CD" b="89 B5"/>
+  <a u="58CE" b="89 B6"/>
+  <a u="58CF" b="89 B7"/>
+  <a u="58D0" b="89 B8"/>
+  <a u="58D1" b="DB D6"/>
+  <a u="58D2" b="89 B9"/>
+  <a u="58D3" b="89 BA"/>
+  <a u="58D4" b="89 BB"/>
+  <a u="58D5" b="BA BE"/>
+  <a u="58D6" b="89 BC"/>
+  <a u="58D7" b="89 BD"/>
+  <a u="58D8" b="89 BE"/>
+  <a u="58D9" b="89 BF"/>
+  <a u="58DA" b="89 C0"/>
+  <a u="58DB" b="89 C1"/>
+  <a u="58DC" b="89 C2"/>
+  <a u="58DD" b="89 C3"/>
+  <a u="58DE" b="89 C4"/>
+  <a u="58DF" b="89 C5"/>
+  <a u="58E0" b="89 C6"/>
+  <a u="58E1" b="89 C7"/>
+  <a u="58E2" b="89 C8"/>
+  <a u="58E3" b="89 C9"/>
+  <a u="58E4" b="C8 C0"/>
+  <a u="58E5" b="89 CA"/>
+  <a u="58E6" b="89 CB"/>
+  <a u="58E7" b="89 CC"/>
+  <a u="58E8" b="89 CD"/>
+  <a u="58E9" b="89 CE"/>
+  <a u="58EA" b="89 CF"/>
+  <a u="58EB" b="CA BF"/>
+  <a u="58EC" b="C8 C9"/>
+  <a u="58ED" b="89 D0"/>
+  <a u="58EE" b="D7 B3"/>
+  <a u="58EF" b="89 D1"/>
+  <a u="58F0" b="C9 F9"/>
+  <a u="58F1" b="89 D2"/>
+  <a u="58F2" b="89 D3"/>
+  <a u="58F3" b="BF C7"/>
+  <a u="58F4" b="89 D4"/>
+  <a u="58F5" b="89 D5"/>
+  <a u="58F6" b="BA F8"/>
+  <a u="58F7" b="89 D6"/>
+  <a u="58F8" b="89 D7"/>
+  <a u="58F9" b="D2 BC"/>
+  <a u="58FA" b="89 D8"/>
+  <a u="58FB" b="89 D9"/>
+  <a u="58FC" b="89 DA"/>
+  <a u="58FD" b="89 DB"/>
+  <a u="58FE" b="89 DC"/>
+  <a u="58FF" b="89 DD"/>
+  <a u="5900" b="89 DE"/>
+  <a u="5901" b="89 DF"/>
+  <a u="5902" b="E2 BA"/>
+  <a u="5903" b="89 E0"/>
+  <a u="5904" b="B4 A6"/>
+  <a u="5905" b="89 E1"/>
+  <a u="5906" b="89 E2"/>
+  <a u="5907" b="B1 B8"/>
+  <a u="5908" b="89 E3"/>
+  <a u="5909" b="89 E4"/>
+  <a u="590A" b="89 E5"/>
+  <a u="590B" b="89 E6"/>
+  <a u="590C" b="89 E7"/>
+  <a u="590D" b="B8 B4"/>
+  <a u="590E" b="89 E8"/>
+  <a u="590F" b="CF C4"/>
+  <a u="5910" b="89 E9"/>
+  <a u="5911" b="89 EA"/>
+  <a u="5912" b="89 EB"/>
+  <a u="5913" b="89 EC"/>
+  <a u="5914" b="D9 E7"/>
+  <a u="5915" b="CF A6"/>
+  <a u="5916" b="CD E2"/>
+  <a u="5917" b="89 ED"/>
+  <a u="5918" b="89 EE"/>
+  <a u="5919" b="D9 ED"/>
+  <a u="591A" b="B6 E0"/>
+  <a u="591B" b="89 EF"/>
+  <a u="591C" b="D2 B9"/>
+  <a u="591D" b="89 F0"/>
+  <a u="591E" b="89 F1"/>
+  <a u="591F" b="B9 BB"/>
+  <a u="5920" b="89 F2"/>
+  <a u="5921" b="89 F3"/>
+  <a u="5922" b="89 F4"/>
+  <a u="5923" b="89 F5"/>
+  <a u="5924" b="E2 B9"/>
+  <a u="5925" b="E2 B7"/>
+  <a u="5926" b="89 F6"/>
+  <a u="5927" b="B4 F3"/>
+  <a u="5928" b="89 F7"/>
+  <a u="5929" b="CC EC"/>
+  <a u="592A" b="CC AB"/>
+  <a u="592B" b="B7 F2"/>
+  <a u="592C" b="89 F8"/>
+  <a u="592D" b="D8 B2"/>
+  <a u="592E" b="D1 EB"/>
+  <a u="592F" b="BA BB"/>
+  <a u="5930" b="89 F9"/>
+  <a u="5931" b="CA A7"/>
+  <a u="5932" b="89 FA"/>
+  <a u="5933" b="89 FB"/>
+  <a u="5934" b="CD B7"/>
+  <a u="5935" b="89 FC"/>
+  <a u="5936" b="89 FD"/>
+  <a u="5937" b="D2 C4"/>
+  <a u="5938" b="BF E4"/>
+  <a u="5939" b="BC D0"/>
+  <a u="593A" b="B6 E1"/>
+  <a u="593B" b="89 FE"/>
+  <a u="593C" b="DE C5"/>
+  <a u="593D" b="8A 40"/>
+  <a u="593E" b="8A 41"/>
+  <a u="593F" b="8A 42"/>
+  <a u="5940" b="8A 43"/>
+  <a u="5941" b="DE C6"/>
+  <a u="5942" b="DB BC"/>
+  <a u="5943" b="8A 44"/>
+  <a u="5944" b="D1 D9"/>
+  <a u="5945" b="8A 45"/>
+  <a u="5946" b="8A 46"/>
+  <a u="5947" b="C6 E6"/>
+  <a u="5948" b="C4 CE"/>
+  <a u="5949" b="B7 EE"/>
+  <a u="594A" b="8A 47"/>
+  <a u="594B" b="B7 DC"/>
+  <a u="594C" b="8A 48"/>
+  <a u="594D" b="8A 49"/>
+  <a u="594E" b="BF FC"/>
+  <a u="594F" b="D7 E0"/>
+  <a u="5950" b="8A 4A"/>
+  <a u="5951" b="C6 F5"/>
+  <a u="5952" b="8A 4B"/>
+  <a u="5953" b="8A 4C"/>
+  <a u="5954" b="B1 BC"/>
+  <a u="5955" b="DE C8"/>
+  <a u="5956" b="BD B1"/>
+  <a u="5957" b="CC D7"/>
+  <a u="5958" b="DE CA"/>
+  <a u="5959" b="8A 4D"/>
+  <a u="595A" b="DE C9"/>
+  <a u="595B" b="8A 4E"/>
+  <a u="595C" b="8A 4F"/>
+  <a u="595D" b="8A 50"/>
+  <a u="595E" b="8A 51"/>
+  <a u="595F" b="8A 52"/>
+  <a u="5960" b="B5 EC"/>
+  <a u="5961" b="8A 53"/>
+  <a u="5962" b="C9 DD"/>
+  <a u="5963" b="8A 54"/>
+  <a u="5964" b="8A 55"/>
+  <a u="5965" b="B0 C2"/>
+  <a u="5966" b="8A 56"/>
+  <a u="5967" b="8A 57"/>
+  <a u="5968" b="8A 58"/>
+  <a u="5969" b="8A 59"/>
+  <a u="596A" b="8A 5A"/>
+  <a u="596B" b="8A 5B"/>
+  <a u="596C" b="8A 5C"/>
+  <a u="596D" b="8A 5D"/>
+  <a u="596E" b="8A 5E"/>
+  <a u="596F" b="8A 5F"/>
+  <a u="5970" b="8A 60"/>
+  <a u="5971" b="8A 61"/>
+  <a u="5972" b="8A 62"/>
+  <a u="5973" b="C5 AE"/>
+  <a u="5974" b="C5 AB"/>
+  <a u="5975" b="8A 63"/>
+  <a u="5976" b="C4 CC"/>
+  <a u="5977" b="8A 64"/>
+  <a u="5978" b="BC E9"/>
+  <a u="5979" b="CB FD"/>
+  <a u="597A" b="8A 65"/>
+  <a u="597B" b="8A 66"/>
+  <a u="597C" b="8A 67"/>
+  <a u="597D" b="BA C3"/>
+  <a u="597E" b="8A 68"/>
+  <a u="597F" b="8A 69"/>
+  <a u="5980" b="8A 6A"/>
+  <a u="5981" b="E5 F9"/>
+  <a u="5982" b="C8 E7"/>
+  <a u="5983" b="E5 FA"/>
+  <a u="5984" b="CD FD"/>
+  <a u="5985" b="8A 6B"/>
+  <a u="5986" b="D7 B1"/>
+  <a u="5987" b="B8 BE"/>
+  <a u="5988" b="C2 E8"/>
+  <a u="5989" b="8A 6C"/>
+  <a u="598A" b="C8 D1"/>
+  <a u="598B" b="8A 6D"/>
+  <a u="598C" b="8A 6E"/>
+  <a u="598D" b="E5 FB"/>
+  <a u="598E" b="8A 6F"/>
+  <a u="598F" b="8A 70"/>
+  <a u="5990" b="8A 71"/>
+  <a u="5991" b="8A 72"/>
+  <a u="5992" b="B6 CA"/>
+  <a u="5993" b="BC CB"/>
+  <a u="5994" b="8A 73"/>
+  <a u="5995" b="8A 74"/>
+  <a u="5996" b="D1 FD"/>
+  <a u="5997" b="E6 A1"/>
+  <a u="5998" b="8A 75"/>
+  <a u="5999" b="C3 EE"/>
+  <a u="599A" b="8A 76"/>
+  <a u="599B" b="8A 77"/>
+  <a u="599C" b="8A 78"/>
+  <a u="599D" b="8A 79"/>
+  <a u="599E" b="E6 A4"/>
+  <a u="599F" b="8A 7A"/>
+  <a u="59A0" b="8A 7B"/>
+  <a u="59A1" b="8A 7C"/>
+  <a u="59A2" b="8A 7D"/>
+  <a u="59A3" b="E5 FE"/>
+  <a u="59A4" b="E6 A5"/>
+  <a u="59A5" b="CD D7"/>
+  <a u="59A6" b="8A 7E"/>
+  <a u="59A7" b="8A 80"/>
+  <a u="59A8" b="B7 C1"/>
+  <a u="59A9" b="E5 FC"/>
+  <a u="59AA" b="E5 FD"/>
+  <a u="59AB" b="E6 A3"/>
+  <a u="59AC" b="8A 81"/>
+  <a u="59AD" b="8A 82"/>
+  <a u="59AE" b="C4 DD"/>
+  <a u="59AF" b="E6 A8"/>
+  <a u="59B0" b="8A 83"/>
+  <a u="59B1" b="8A 84"/>
+  <a u="59B2" b="E6 A7"/>
+  <a u="59B3" b="8A 85"/>
+  <a u="59B4" b="8A 86"/>
+  <a u="59B5" b="8A 87"/>
+  <a u="59B6" b="8A 88"/>
+  <a u="59B7" b="8A 89"/>
+  <a u="59B8" b="8A 8A"/>
+  <a u="59B9" b="C3 C3"/>
+  <a u="59BA" b="8A 8B"/>
+  <a u="59BB" b="C6 DE"/>
+  <a u="59BC" b="8A 8C"/>
+  <a u="59BD" b="8A 8D"/>
+  <a u="59BE" b="E6 AA"/>
+  <a u="59BF" b="8A 8E"/>
+  <a u="59C0" b="8A 8F"/>
+  <a u="59C1" b="8A 90"/>
+  <a u="59C2" b="8A 91"/>
+  <a u="59C3" b="8A 92"/>
+  <a u="59C4" b="8A 93"/>
+  <a u="59C5" b="8A 94"/>
+  <a u="59C6" b="C4 B7"/>
+  <a u="59C7" b="8A 95"/>
+  <a u="59C8" b="8A 96"/>
+  <a u="59C9" b="8A 97"/>
+  <a u="59CA" b="E6 A2"/>
+  <a u="59CB" b="CA BC"/>
+  <a u="59CC" b="8A 98"/>
+  <a u="59CD" b="8A 99"/>
+  <a u="59CE" b="8A 9A"/>
+  <a u="59CF" b="8A 9B"/>
+  <a u="59D0" b="BD E3"/>
+  <a u="59D1" b="B9 C3"/>
+  <a u="59D2" b="E6 A6"/>
+  <a u="59D3" b="D0 D5"/>
+  <a u="59D4" b="CE AF"/>
+  <a u="59D5" b="8A 9C"/>
+  <a u="59D6" b="8A 9D"/>
+  <a u="59D7" b="E6 A9"/>
+  <a u="59D8" b="E6 B0"/>
+  <a u="59D9" b="8A 9E"/>
+  <a u="59DA" b="D2 A6"/>
+  <a u="59DB" b="8A 9F"/>
+  <a u="59DC" b="BD AA"/>
+  <a u="59DD" b="E6 AD"/>
+  <a u="59DE" b="8A A0"/>
+  <a u="59DF" b="8A A1"/>
+  <a u="59E0" b="8A A2"/>
+  <a u="59E1" b="8A A3"/>
+  <a u="59E2" b="8A A4"/>
+  <a u="59E3" b="E6 AF"/>
+  <a u="59E4" b="8A A5"/>
+  <a u="59E5" b="C0 D1"/>
+  <a u="59E6" b="8A A6"/>
+  <a u="59E7" b="8A A7"/>
+  <a u="59E8" b="D2 CC"/>
+  <a u="59E9" b="8A A8"/>
+  <a u="59EA" b="8A A9"/>
+  <a u="59EB" b="8A AA"/>
+  <a u="59EC" b="BC A7"/>
+  <a u="59ED" b="8A AB"/>
+  <a u="59EE" b="8A AC"/>
+  <a u="59EF" b="8A AD"/>
+  <a u="59F0" b="8A AE"/>
+  <a u="59F1" b="8A AF"/>
+  <a u="59F2" b="8A B0"/>
+  <a u="59F3" b="8A B1"/>
+  <a u="59F4" b="8A B2"/>
+  <a u="59F5" b="8A B3"/>
+  <a u="59F6" b="8A B4"/>
+  <a u="59F7" b="8A B5"/>
+  <a u="59F8" b="8A B6"/>
+  <a u="59F9" b="E6 B1"/>
+  <a u="59FA" b="8A B7"/>
+  <a u="59FB" b="D2 F6"/>
+  <a u="59FC" b="8A B8"/>
+  <a u="59FD" b="8A B9"/>
+  <a u="59FE" b="8A BA"/>
+  <a u="59FF" b="D7 CB"/>
+  <a u="5A00" b="8A BB"/>
+  <a u="5A01" b="CD FE"/>
+  <a u="5A02" b="8A BC"/>
+  <a u="5A03" b="CD DE"/>
+  <a u="5A04" b="C2 A6"/>
+  <a u="5A05" b="E6 AB"/>
+  <a u="5A06" b="E6 AC"/>
+  <a u="5A07" b="BD BF"/>
+  <a u="5A08" b="E6 AE"/>
+  <a u="5A09" b="E6 B3"/>
+  <a u="5A0A" b="8A BD"/>
+  <a u="5A0B" b="8A BE"/>
+  <a u="5A0C" b="E6 B2"/>
+  <a u="5A0D" b="8A BF"/>
+  <a u="5A0E" b="8A C0"/>
+  <a u="5A0F" b="8A C1"/>
+  <a u="5A10" b="8A C2"/>
+  <a u="5A11" b="E6 B6"/>
+  <a u="5A12" b="8A C3"/>
+  <a u="5A13" b="E6 B8"/>
+  <a u="5A14" b="8A C4"/>
+  <a u="5A15" b="8A C5"/>
+  <a u="5A16" b="8A C6"/>
+  <a u="5A17" b="8A C7"/>
+  <a u="5A18" b="C4 EF"/>
+  <a u="5A19" b="8A C8"/>
+  <a u="5A1A" b="8A C9"/>
+  <a u="5A1B" b="8A CA"/>
+  <a u="5A1C" b="C4 C8"/>
+  <a u="5A1D" b="8A CB"/>
+  <a u="5A1E" b="8A CC"/>
+  <a u="5A1F" b="BE EA"/>
+  <a u="5A20" b="C9 EF"/>
+  <a u="5A21" b="8A CD"/>
+  <a u="5A22" b="8A CE"/>
+  <a u="5A23" b="E6 B7"/>
+  <a u="5A24" b="8A CF"/>
+  <a u="5A25" b="B6 F0"/>
+  <a u="5A26" b="8A D0"/>
+  <a u="5A27" b="8A D1"/>
+  <a u="5A28" b="8A D2"/>
+  <a u="5A29" b="C3 E4"/>
+  <a u="5A2A" b="8A D3"/>
+  <a u="5A2B" b="8A D4"/>
+  <a u="5A2C" b="8A D5"/>
+  <a u="5A2D" b="8A D6"/>
+  <a u="5A2E" b="8A D7"/>
+  <a u="5A2F" b="8A D8"/>
+  <a u="5A30" b="8A D9"/>
+  <a u="5A31" b="D3 E9"/>
+  <a u="5A32" b="E6 B4"/>
+  <a u="5A33" b="8A DA"/>
+  <a u="5A34" b="E6 B5"/>
+  <a u="5A35" b="8A DB"/>
+  <a u="5A36" b="C8 A2"/>
+  <a u="5A37" b="8A DC"/>
+  <a u="5A38" b="8A DD"/>
+  <a u="5A39" b="8A DE"/>
+  <a u="5A3A" b="8A DF"/>
+  <a u="5A3B" b="8A E0"/>
+  <a u="5A3C" b="E6 BD"/>
+  <a u="5A3D" b="8A E1"/>
+  <a u="5A3E" b="8A E2"/>
+  <a u="5A3F" b="8A E3"/>
+  <a u="5A40" b="E6 B9"/>
+  <a u="5A41" b="8A E4"/>
+  <a u="5A42" b="8A E5"/>
+  <a u="5A43" b="8A E6"/>
+  <a u="5A44" b="8A E7"/>
+  <a u="5A45" b="8A E8"/>
+  <a u="5A46" b="C6 C5"/>
+  <a u="5A47" b="8A E9"/>
+  <a u="5A48" b="8A EA"/>
+  <a u="5A49" b="CD F1"/>
+  <a u="5A4A" b="E6 BB"/>
+  <a u="5A4B" b="8A EB"/>
+  <a u="5A4C" b="8A EC"/>
+  <a u="5A4D" b="8A ED"/>
+  <a u="5A4E" b="8A EE"/>
+  <a u="5A4F" b="8A EF"/>
+  <a u="5A50" b="8A F0"/>
+  <a u="5A51" b="8A F1"/>
+  <a u="5A52" b="8A F2"/>
+  <a u="5A53" b="8A F3"/>
+  <a u="5A54" b="8A F4"/>
+  <a u="5A55" b="E6 BC"/>
+  <a u="5A56" b="8A F5"/>
+  <a u="5A57" b="8A F6"/>
+  <a u="5A58" b="8A F7"/>
+  <a u="5A59" b="8A F8"/>
+  <a u="5A5A" b="BB E9"/>
+  <a u="5A5B" b="8A F9"/>
+  <a u="5A5C" b="8A FA"/>
+  <a u="5A5D" b="8A FB"/>
+  <a u="5A5E" b="8A FC"/>
+  <a u="5A5F" b="8A FD"/>
+  <a u="5A60" b="8A FE"/>
+  <a u="5A61" b="8B 40"/>
+  <a u="5A62" b="E6 BE"/>
+  <a u="5A63" b="8B 41"/>
+  <a u="5A64" b="8B 42"/>
+  <a u="5A65" b="8B 43"/>
+  <a u="5A66" b="8B 44"/>
+  <a u="5A67" b="E6 BA"/>
+  <a u="5A68" b="8B 45"/>
+  <a u="5A69" b="8B 46"/>
+  <a u="5A6A" b="C0 B7"/>
+  <a u="5A6B" b="8B 47"/>
+  <a u="5A6C" b="8B 48"/>
+  <a u="5A6D" b="8B 49"/>
+  <a u="5A6E" b="8B 4A"/>
+  <a u="5A6F" b="8B 4B"/>
+  <a u="5A70" b="8B 4C"/>
+  <a u="5A71" b="8B 4D"/>
+  <a u="5A72" b="8B 4E"/>
+  <a u="5A73" b="8B 4F"/>
+  <a u="5A74" b="D3 A4"/>
+  <a u="5A75" b="E6 BF"/>
+  <a u="5A76" b="C9 F4"/>
+  <a u="5A77" b="E6 C3"/>
+  <a u="5A78" b="8B 50"/>
+  <a u="5A79" b="8B 51"/>
+  <a u="5A7A" b="E6 C4"/>
+  <a u="5A7B" b="8B 52"/>
+  <a u="5A7C" b="8B 53"/>
+  <a u="5A7D" b="8B 54"/>
+  <a u="5A7E" b="8B 55"/>
+  <a u="5A7F" b="D0 F6"/>
+  <a u="5A80" b="8B 56"/>
+  <a u="5A81" b="8B 57"/>
+  <a u="5A82" b="8B 58"/>
+  <a u="5A83" b="8B 59"/>
+  <a u="5A84" b="8B 5A"/>
+  <a u="5A85" b="8B 5B"/>
+  <a u="5A86" b="8B 5C"/>
+  <a u="5A87" b="8B 5D"/>
+  <a u="5A88" b="8B 5E"/>
+  <a u="5A89" b="8B 5F"/>
+  <a u="5A8A" b="8B 60"/>
+  <a u="5A8B" b="8B 61"/>
+  <a u="5A8C" b="8B 62"/>
+  <a u="5A8D" b="8B 63"/>
+  <a u="5A8E" b="8B 64"/>
+  <a u="5A8F" b="8B 65"/>
+  <a u="5A90" b="8B 66"/>
+  <a u="5A91" b="8B 67"/>
+  <a u="5A92" b="C3 BD"/>
+  <a u="5A93" b="8B 68"/>
+  <a u="5A94" b="8B 69"/>
+  <a u="5A95" b="8B 6A"/>
+  <a u="5A96" b="8B 6B"/>
+  <a u="5A97" b="8B 6C"/>
+  <a u="5A98" b="8B 6D"/>
+  <a u="5A99" b="8B 6E"/>
+  <a u="5A9A" b="C3 C4"/>
+  <a u="5A9B" b="E6 C2"/>
+  <a u="5A9C" b="8B 6F"/>
+  <a u="5A9D" b="8B 70"/>
+  <a u="5A9E" b="8B 71"/>
+  <a u="5A9F" b="8B 72"/>
+  <a u="5AA0" b="8B 73"/>
+  <a u="5AA1" b="8B 74"/>
+  <a u="5AA2" b="8B 75"/>
+  <a u="5AA3" b="8B 76"/>
+  <a u="5AA4" b="8B 77"/>
+  <a u="5AA5" b="8B 78"/>
+  <a u="5AA6" b="8B 79"/>
+  <a u="5AA7" b="8B 7A"/>
+  <a u="5AA8" b="8B 7B"/>
+  <a u="5AA9" b="8B 7C"/>
+  <a u="5AAA" b="E6 C1"/>
+  <a u="5AAB" b="8B 7D"/>
+  <a u="5AAC" b="8B 7E"/>
+  <a u="5AAD" b="8B 80"/>
+  <a u="5AAE" b="8B 81"/>
+  <a u="5AAF" b="8B 82"/>
+  <a u="5AB0" b="8B 83"/>
+  <a u="5AB1" b="8B 84"/>
+  <a u="5AB2" b="E6 C7"/>
+  <a u="5AB3" b="CF B1"/>
+  <a u="5AB4" b="8B 85"/>
+  <a u="5AB5" b="EB F4"/>
+  <a u="5AB6" b="8B 86"/>
+  <a u="5AB7" b="8B 87"/>
+  <a u="5AB8" b="E6 CA"/>
+  <a u="5AB9" b="8B 88"/>
+  <a u="5ABA" b="8B 89"/>
+  <a u="5ABB" b="8B 8A"/>
+  <a u="5ABC" b="8B 8B"/>
+  <a u="5ABD" b="8B 8C"/>
+  <a u="5ABE" b="E6 C5"/>
+  <a u="5ABF" b="8B 8D"/>
+  <a u="5AC0" b="8B 8E"/>
+  <a u="5AC1" b="BC DE"/>
+  <a u="5AC2" b="C9 A9"/>
+  <a u="5AC3" b="8B 8F"/>
+  <a u="5AC4" b="8B 90"/>
+  <a u="5AC5" b="8B 91"/>
+  <a u="5AC6" b="8B 92"/>
+  <a u="5AC7" b="8B 93"/>
+  <a u="5AC8" b="8B 94"/>
+  <a u="5AC9" b="BC B5"/>
+  <a u="5ACA" b="8B 95"/>
+  <a u="5ACB" b="8B 96"/>
+  <a u="5ACC" b="CF D3"/>
+  <a u="5ACD" b="8B 97"/>
+  <a u="5ACE" b="8B 98"/>
+  <a u="5ACF" b="8B 99"/>
+  <a u="5AD0" b="8B 9A"/>
+  <a u="5AD1" b="8B 9B"/>
+  <a u="5AD2" b="E6 C8"/>
+  <a u="5AD3" b="8B 9C"/>
+  <a u="5AD4" b="E6 C9"/>
+  <a u="5AD5" b="8B 9D"/>
+  <a u="5AD6" b="E6 CE"/>
+  <a u="5AD7" b="8B 9E"/>
+  <a u="5AD8" b="E6 D0"/>
+  <a u="5AD9" b="8B 9F"/>
+  <a u="5ADA" b="8B A0"/>
+  <a u="5ADB" b="8B A1"/>
+  <a u="5ADC" b="E6 D1"/>
+  <a u="5ADD" b="8B A2"/>
+  <a u="5ADE" b="8B A3"/>
+  <a u="5ADF" b="8B A4"/>
+  <a u="5AE0" b="E6 CB"/>
+  <a u="5AE1" b="B5 D5"/>
+  <a u="5AE2" b="8B A5"/>
+  <a u="5AE3" b="E6 CC"/>
+  <a u="5AE4" b="8B A6"/>
+  <a u="5AE5" b="8B A7"/>
+  <a u="5AE6" b="E6 CF"/>
+  <a u="5AE7" b="8B A8"/>
+  <a u="5AE8" b="8B A9"/>
+  <a u="5AE9" b="C4 DB"/>
+  <a u="5AEA" b="8B AA"/>
+  <a u="5AEB" b="E6 C6"/>
+  <a u="5AEC" b="8B AB"/>
+  <a u="5AED" b="8B AC"/>
+  <a u="5AEE" b="8B AD"/>
+  <a u="5AEF" b="8B AE"/>
+  <a u="5AF0" b="8B AF"/>
+  <a u="5AF1" b="E6 CD"/>
+  <a u="5AF2" b="8B B0"/>
+  <a u="5AF3" b="8B B1"/>
+  <a u="5AF4" b="8B B2"/>
+  <a u="5AF5" b="8B B3"/>
+  <a u="5AF6" b="8B B4"/>
+  <a u="5AF7" b="8B B5"/>
+  <a u="5AF8" b="8B B6"/>
+  <a u="5AF9" b="8B B7"/>
+  <a u="5AFA" b="8B B8"/>
+  <a u="5AFB" b="8B B9"/>
+  <a u="5AFC" b="8B BA"/>
+  <a u="5AFD" b="8B BB"/>
+  <a u="5AFE" b="8B BC"/>
+  <a u="5AFF" b="8B BD"/>
+  <a u="5B00" b="8B BE"/>
+  <a u="5B01" b="8B BF"/>
+  <a u="5B02" b="8B C0"/>
+  <a u="5B03" b="8B C1"/>
+  <a u="5B04" b="8B C2"/>
+  <a u="5B05" b="8B C3"/>
+  <a u="5B06" b="8B C4"/>
+  <a u="5B07" b="8B C5"/>
+  <a u="5B08" b="8B C6"/>
+  <a u="5B09" b="E6 D2"/>
+  <a u="5B0A" b="8B C7"/>
+  <a u="5B0B" b="8B C8"/>
+  <a u="5B0C" b="8B C9"/>
+  <a u="5B0D" b="8B CA"/>
+  <a u="5B0E" b="8B CB"/>
+  <a u="5B0F" b="8B CC"/>
+  <a u="5B10" b="8B CD"/>
+  <a u="5B11" b="8B CE"/>
+  <a u="5B12" b="8B CF"/>
+  <a u="5B13" b="8B D0"/>
+  <a u="5B14" b="8B D1"/>
+  <a u="5B15" b="8B D2"/>
+  <a u="5B16" b="E6 D4"/>
+  <a u="5B17" b="E6 D3"/>
+  <a u="5B18" b="8B D3"/>
+  <a u="5B19" b="8B D4"/>
+  <a u="5B1A" b="8B D5"/>
+  <a u="5B1B" b="8B D6"/>
+  <a u="5B1C" b="8B D7"/>
+  <a u="5B1D" b="8B D8"/>
+  <a u="5B1E" b="8B D9"/>
+  <a u="5B1F" b="8B DA"/>
+  <a u="5B20" b="8B DB"/>
+  <a u="5B21" b="8B DC"/>
+  <a u="5B22" b="8B DD"/>
+  <a u="5B23" b="8B DE"/>
+  <a u="5B24" b="8B DF"/>
+  <a u="5B25" b="8B E0"/>
+  <a u="5B26" b="8B E1"/>
+  <a u="5B27" b="8B E2"/>
+  <a u="5B28" b="8B E3"/>
+  <a u="5B29" b="8B E4"/>
+  <a u="5B2A" b="8B E5"/>
+  <a u="5B2B" b="8B E6"/>
+  <a u="5B2C" b="8B E7"/>
+  <a u="5B2D" b="8B E8"/>
+  <a u="5B2E" b="8B E9"/>
+  <a u="5B2F" b="8B EA"/>
+  <a u="5B30" b="8B EB"/>
+  <a u="5B31" b="8B EC"/>
+  <a u="5B32" b="E6 D5"/>
+  <a u="5B33" b="8B ED"/>
+  <a u="5B34" b="D9 F8"/>
+  <a u="5B35" b="8B EE"/>
+  <a u="5B36" b="8B EF"/>
+  <a u="5B37" b="E6 D6"/>
+  <a u="5B38" b="8B F0"/>
+  <a u="5B39" b="8B F1"/>
+  <a u="5B3A" b="8B F2"/>
+  <a u="5B3B" b="8B F3"/>
+  <a u="5B3C" b="8B F4"/>
+  <a u="5B3D" b="8B F5"/>
+  <a u="5B3E" b="8B F6"/>
+  <a u="5B3F" b="8B F7"/>
+  <a u="5B40" b="E6 D7"/>
+  <a u="5B41" b="8B F8"/>
+  <a u="5B42" b="8B F9"/>
+  <a u="5B43" b="8B FA"/>
+  <a u="5B44" b="8B FB"/>
+  <a u="5B45" b="8B FC"/>
+  <a u="5B46" b="8B FD"/>
+  <a u="5B47" b="8B FE"/>
+  <a u="5B48" b="8C 40"/>
+  <a u="5B49" b="8C 41"/>
+  <a u="5B4A" b="8C 42"/>
+  <a u="5B4B" b="8C 43"/>
+  <a u="5B4C" b="8C 44"/>
+  <a u="5B4D" b="8C 45"/>
+  <a u="5B4E" b="8C 46"/>
+  <a u="5B4F" b="8C 47"/>
+  <a u="5B50" b="D7 D3"/>
+  <a u="5B51" b="E6 DD"/>
+  <a u="5B52" b="8C 48"/>
+  <a u="5B53" b="E6 DE"/>
+  <a u="5B54" b="BF D7"/>
+  <a u="5B55" b="D4 D0"/>
+  <a u="5B56" b="8C 49"/>
+  <a u="5B57" b="D7 D6"/>
+  <a u="5B58" b="B4 E6"/>
+  <a u="5B59" b="CB EF"/>
+  <a u="5B5A" b="E6 DA"/>
+  <a u="5B5B" b="D8 C3"/>
+  <a u="5B5C" b="D7 CE"/>
+  <a u="5B5D" b="D0 A2"/>
+  <a u="5B5E" b="8C 4A"/>
+  <a u="5B5F" b="C3 CF"/>
+  <a u="5B60" b="8C 4B"/>
+  <a u="5B61" b="8C 4C"/>
+  <a u="5B62" b="E6 DF"/>
+  <a u="5B63" b="BC BE"/>
+  <a u="5B64" b="B9 C2"/>
+  <a u="5B65" b="E6 DB"/>
+  <a u="5B66" b="D1 A7"/>
+  <a u="5B67" b="8C 4D"/>
+  <a u="5B68" b="8C 4E"/>
+  <a u="5B69" b="BA A2"/>
+  <a u="5B6A" b="C2 CF"/>
+  <a u="5B6B" b="8C 4F"/>
+  <a u="5B6C" b="D8 AB"/>
+  <a u="5B6D" b="8C 50"/>
+  <a u="5B6E" b="8C 51"/>
+  <a u="5B6F" b="8C 52"/>
+  <a u="5B70" b="CA EB"/>
+  <a u="5B71" b="E5 EE"/>
+  <a u="5B72" b="8C 53"/>
+  <a u="5B73" b="E6 DC"/>
+  <a u="5B74" b="8C 54"/>
+  <a u="5B75" b="B7 F5"/>
+  <a u="5B76" b="8C 55"/>
+  <a u="5B77" b="8C 56"/>
+  <a u="5B78" b="8C 57"/>
+  <a u="5B79" b="8C 58"/>
+  <a u="5B7A" b="C8 E6"/>
+  <a u="5B7B" b="8C 59"/>
+  <a u="5B7C" b="8C 5A"/>
+  <a u="5B7D" b="C4 F5"/>
+  <a u="5B7E" b="8C 5B"/>
+  <a u="5B7F" b="8C 5C"/>
+  <a u="5B80" b="E5 B2"/>
+  <a u="5B81" b="C4 FE"/>
+  <a u="5B82" b="8C 5D"/>
+  <a u="5B83" b="CB FC"/>
+  <a u="5B84" b="E5 B3"/>
+  <a u="5B85" b="D5 AC"/>
+  <a u="5B86" b="8C 5E"/>
+  <a u="5B87" b="D3 EE"/>
+  <a u="5B88" b="CA D8"/>
+  <a u="5B89" b="B0 B2"/>
+  <a u="5B8A" b="8C 5F"/>
+  <a u="5B8B" b="CB CE"/>
+  <a u="5B8C" b="CD EA"/>
+  <a u="5B8D" b="8C 60"/>
+  <a u="5B8E" b="8C 61"/>
+  <a u="5B8F" b="BA EA"/>
+  <a u="5B90" b="8C 62"/>
+  <a u="5B91" b="8C 63"/>
+  <a u="5B92" b="8C 64"/>
+  <a u="5B93" b="E5 B5"/>
+  <a u="5B94" b="8C 65"/>
+  <a u="5B95" b="E5 B4"/>
+  <a u="5B96" b="8C 66"/>
+  <a u="5B97" b="D7 DA"/>
+  <a u="5B98" b="B9 D9"/>
+  <a u="5B99" b="D6 E6"/>
+  <a u="5B9A" b="B6 A8"/>
+  <a u="5B9B" b="CD F0"/>
+  <a u="5B9C" b="D2 CB"/>
+  <a u="5B9D" b="B1 A6"/>
+  <a u="5B9E" b="CA B5"/>
+  <a u="5B9F" b="8C 67"/>
+  <a u="5BA0" b="B3 E8"/>
+  <a u="5BA1" b="C9 F3"/>
+  <a u="5BA2" b="BF CD"/>
+  <a u="5BA3" b="D0 FB"/>
+  <a u="5BA4" b="CA D2"/>
+  <a u="5BA5" b="E5 B6"/>
+  <a u="5BA6" b="BB C2"/>
+  <a u="5BA7" b="8C 68"/>
+  <a u="5BA8" b="8C 69"/>
+  <a u="5BA9" b="8C 6A"/>
+  <a u="5BAA" b="CF DC"/>
+  <a u="5BAB" b="B9 AC"/>
+  <a u="5BAC" b="8C 6B"/>
+  <a u="5BAD" b="8C 6C"/>
+  <a u="5BAE" b="8C 6D"/>
+  <a u="5BAF" b="8C 6E"/>
+  <a u="5BB0" b="D4 D7"/>
+  <a u="5BB1" b="8C 6F"/>
+  <a u="5BB2" b="8C 70"/>
+  <a u="5BB3" b="BA A6"/>
+  <a u="5BB4" b="D1 E7"/>
+  <a u="5BB5" b="CF FC"/>
+  <a u="5BB6" b="BC D2"/>
+  <a u="5BB7" b="8C 71"/>
+  <a u="5BB8" b="E5 B7"/>
+  <a u="5BB9" b="C8 DD"/>
+  <a u="5BBA" b="8C 72"/>
+  <a u="5BBB" b="8C 73"/>
+  <a u="5BBC" b="8C 74"/>
+  <a u="5BBD" b="BF ED"/>
+  <a u="5BBE" b="B1 F6"/>
+  <a u="5BBF" b="CB DE"/>
+  <a u="5BC0" b="8C 75"/>
+  <a u="5BC1" b="8C 76"/>
+  <a u="5BC2" b="BC C5"/>
+  <a u="5BC3" b="8C 77"/>
+  <a u="5BC4" b="BC C4"/>
+  <a u="5BC5" b="D2 FA"/>
+  <a u="5BC6" b="C3 DC"/>
+  <a u="5BC7" b="BF DC"/>
+  <a u="5BC8" b="8C 78"/>
+  <a u="5BC9" b="8C 79"/>
+  <a u="5BCA" b="8C 7A"/>
+  <a u="5BCB" b="8C 7B"/>
+  <a u="5BCC" b="B8 BB"/>
+  <a u="5BCD" b="8C 7C"/>
+  <a u="5BCE" b="8C 7D"/>
+  <a u="5BCF" b="8C 7E"/>
+  <a u="5BD0" b="C3 C2"/>
+  <a u="5BD1" b="8C 80"/>
+  <a u="5BD2" b="BA AE"/>
+  <a u="5BD3" b="D4 A2"/>
+  <a u="5BD4" b="8C 81"/>
+  <a u="5BD5" b="8C 82"/>
+  <a u="5BD6" b="8C 83"/>
+  <a u="5BD7" b="8C 84"/>
+  <a u="5BD8" b="8C 85"/>
+  <a u="5BD9" b="8C 86"/>
+  <a u="5BDA" b="8C 87"/>
+  <a u="5BDB" b="8C 88"/>
+  <a u="5BDC" b="8C 89"/>
+  <a u="5BDD" b="C7 DE"/>
+  <a u="5BDE" b="C4 AF"/>
+  <a u="5BDF" b="B2 EC"/>
+  <a u="5BE0" b="8C 8A"/>
+  <a u="5BE1" b="B9 D1"/>
+  <a u="5BE2" b="8C 8B"/>
+  <a u="5BE3" b="8C 8C"/>
+  <a u="5BE4" b="E5 BB"/>
+  <a u="5BE5" b="C1 C8"/>
+  <a u="5BE6" b="8C 8D"/>
+  <a u="5BE7" b="8C 8E"/>
+  <a u="5BE8" b="D5 AF"/>
+  <a u="5BE9" b="8C 8F"/>
+  <a u="5BEA" b="8C 90"/>
+  <a u="5BEB" b="8C 91"/>
+  <a u="5BEC" b="8C 92"/>
+  <a u="5BED" b="8C 93"/>
+  <a u="5BEE" b="E5 BC"/>
+  <a u="5BEF" b="8C 94"/>
+  <a u="5BF0" b="E5 BE"/>
+  <a u="5BF1" b="8C 95"/>
+  <a u="5BF2" b="8C 96"/>
+  <a u="5BF3" b="8C 97"/>
+  <a u="5BF4" b="8C 98"/>
+  <a u="5BF5" b="8C 99"/>
+  <a u="5BF6" b="8C 9A"/>
+  <a u="5BF7" b="8C 9B"/>
+  <a u="5BF8" b="B4 E7"/>
+  <a u="5BF9" b="B6 D4"/>
+  <a u="5BFA" b="CB C2"/>
+  <a u="5BFB" b="D1 B0"/>
+  <a u="5BFC" b="B5 BC"/>
+  <a u="5BFD" b="8C 9C"/>
+  <a u="5BFE" b="8C 9D"/>
+  <a u="5BFF" b="CA D9"/>
+  <a u="5C00" b="8C 9E"/>
+  <a u="5C01" b="B7 E2"/>
+  <a u="5C02" b="8C 9F"/>
+  <a u="5C03" b="8C A0"/>
+  <a u="5C04" b="C9 E4"/>
+  <a u="5C05" b="8C A1"/>
+  <a u="5C06" b="BD AB"/>
+  <a u="5C07" b="8C A2"/>
+  <a u="5C08" b="8C A3"/>
+  <a u="5C09" b="CE BE"/>
+  <a u="5C0A" b="D7 F0"/>
+  <a u="5C0B" b="8C A4"/>
+  <a u="5C0C" b="8C A5"/>
+  <a u="5C0D" b="8C A6"/>
+  <a u="5C0E" b="8C A7"/>
+  <a u="5C0F" b="D0 A1"/>
+  <a u="5C10" b="8C A8"/>
+  <a u="5C11" b="C9 D9"/>
+  <a u="5C12" b="8C A9"/>
+  <a u="5C13" b="8C AA"/>
+  <a u="5C14" b="B6 FB"/>
+  <a u="5C15" b="E6 D8"/>
+  <a u="5C16" b="BC E2"/>
+  <a u="5C17" b="8C AB"/>
+  <a u="5C18" b="B3 BE"/>
+  <a u="5C19" b="8C AC"/>
+  <a u="5C1A" b="C9 D0"/>
+  <a u="5C1B" b="8C AD"/>
+  <a u="5C1C" b="E6 D9"/>
+  <a u="5C1D" b="B3 A2"/>
+  <a u="5C1E" b="8C AE"/>
+  <a u="5C1F" b="8C AF"/>
+  <a u="5C20" b="8C B0"/>
+  <a u="5C21" b="8C B1"/>
+  <a u="5C22" b="DE CC"/>
+  <a u="5C23" b="8C B2"/>
+  <a u="5C24" b="D3 C8"/>
+  <a u="5C25" b="DE CD"/>
+  <a u="5C26" b="8C B3"/>
+  <a u="5C27" b="D2 A2"/>
+  <a u="5C28" b="8C B4"/>
+  <a u="5C29" b="8C B5"/>
+  <a u="5C2A" b="8C B6"/>
+  <a u="5C2B" b="8C B7"/>
+  <a u="5C2C" b="DE CE"/>
+  <a u="5C2D" b="8C B8"/>
+  <a u="5C2E" b="8C B9"/>
+  <a u="5C2F" b="8C BA"/>
+  <a u="5C30" b="8C BB"/>
+  <a u="5C31" b="BE CD"/>
+  <a u="5C32" b="8C BC"/>
+  <a u="5C33" b="8C BD"/>
+  <a u="5C34" b="DE CF"/>
+  <a u="5C35" b="8C BE"/>
+  <a u="5C36" b="8C BF"/>
+  <a u="5C37" b="8C C0"/>
+  <a u="5C38" b="CA AC"/>
+  <a u="5C39" b="D2 FC"/>
+  <a u="5C3A" b="B3 DF"/>
+  <a u="5C3B" b="E5 EA"/>
+  <a u="5C3C" b="C4 E1"/>
+  <a u="5C3D" b="BE A1"/>
+  <a u="5C3E" b="CE B2"/>
+  <a u="5C3F" b="C4 F2"/>
+  <a u="5C40" b="BE D6"/>
+  <a u="5C41" b="C6 A8"/>
+  <a u="5C42" b="B2 E3"/>
+  <a u="5C43" b="8C C1"/>
+  <a u="5C44" b="8C C2"/>
+  <a u="5C45" b="BE D3"/>
+  <a u="5C46" b="8C C3"/>
+  <a u="5C47" b="8C C4"/>
+  <a u="5C48" b="C7 FC"/>
+  <a u="5C49" b="CC EB"/>
+  <a u="5C4A" b="BD EC"/>
+  <a u="5C4B" b="CE DD"/>
+  <a u="5C4C" b="8C C5"/>
+  <a u="5C4D" b="8C C6"/>
+  <a u="5C4E" b="CA BA"/>
+  <a u="5C4F" b="C6 C1"/>
+  <a u="5C50" b="E5 EC"/>
+  <a u="5C51" b="D0 BC"/>
+  <a u="5C52" b="8C C7"/>
+  <a u="5C53" b="8C C8"/>
+  <a u="5C54" b="8C C9"/>
+  <a u="5C55" b="D5 B9"/>
+  <a u="5C56" b="8C CA"/>
+  <a u="5C57" b="8C CB"/>
+  <a u="5C58" b="8C CC"/>
+  <a u="5C59" b="E5 ED"/>
+  <a u="5C5A" b="8C CD"/>
+  <a u="5C5B" b="8C CE"/>
+  <a u="5C5C" b="8C CF"/>
+  <a u="5C5D" b="8C D0"/>
+  <a u="5C5E" b="CA F4"/>
+  <a u="5C5F" b="8C D1"/>
+  <a u="5C60" b="CD C0"/>
+  <a u="5C61" b="C2 C5"/>
+  <a u="5C62" b="8C D2"/>
+  <a u="5C63" b="E5 EF"/>
+  <a u="5C64" b="8C D3"/>
+  <a u="5C65" b="C2 C4"/>
+  <a u="5C66" b="E5 F0"/>
+  <a u="5C67" b="8C D4"/>
+  <a u="5C68" b="8C D5"/>
+  <a u="5C69" b="8C D6"/>
+  <a u="5C6A" b="8C D7"/>
+  <a u="5C6B" b="8C D8"/>
+  <a u="5C6C" b="8C D9"/>
+  <a u="5C6D" b="8C DA"/>
+  <a u="5C6E" b="E5 F8"/>
+  <a u="5C6F" b="CD CD"/>
+  <a u="5C70" b="8C DB"/>
+  <a u="5C71" b="C9 BD"/>
+  <a u="5C72" b="8C DC"/>
+  <a u="5C73" b="8C DD"/>
+  <a u="5C74" b="8C DE"/>
+  <a u="5C75" b="8C DF"/>
+  <a u="5C76" b="8C E0"/>
+  <a u="5C77" b="8C E1"/>
+  <a u="5C78" b="8C E2"/>
+  <a u="5C79" b="D2 D9"/>
+  <a u="5C7A" b="E1 A8"/>
+  <a u="5C7B" b="8C E3"/>
+  <a u="5C7C" b="8C E4"/>
+  <a u="5C7D" b="8C E5"/>
+  <a u="5C7E" b="8C E6"/>
+  <a u="5C7F" b="D3 EC"/>
+  <a u="5C80" b="8C E7"/>
+  <a u="5C81" b="CB EA"/>
+  <a u="5C82" b="C6 F1"/>
+  <a u="5C83" b="8C E8"/>
+  <a u="5C84" b="8C E9"/>
+  <a u="5C85" b="8C EA"/>
+  <a u="5C86" b="8C EB"/>
+  <a u="5C87" b="8C EC"/>
+  <a u="5C88" b="E1 AC"/>
+  <a u="5C89" b="8C ED"/>
+  <a u="5C8A" b="8C EE"/>
+  <a u="5C8B" b="8C EF"/>
+  <a u="5C8C" b="E1 A7"/>
+  <a u="5C8D" b="E1 A9"/>
+  <a u="5C8E" b="8C F0"/>
+  <a u="5C8F" b="8C F1"/>
+  <a u="5C90" b="E1 AA"/>
+  <a u="5C91" b="E1 AF"/>
+  <a u="5C92" b="8C F2"/>
+  <a u="5C93" b="8C F3"/>
+  <a u="5C94" b="B2 ED"/>
+  <a u="5C95" b="8C F4"/>
+  <a u="5C96" b="E1 AB"/>
+  <a u="5C97" b="B8 DA"/>
+  <a u="5C98" b="E1 AD"/>
+  <a u="5C99" b="E1 AE"/>
+  <a u="5C9A" b="E1 B0"/>
+  <a u="5C9B" b="B5 BA"/>
+  <a u="5C9C" b="E1 B1"/>
+  <a u="5C9D" b="8C F5"/>
+  <a u="5C9E" b="8C F6"/>
+  <a u="5C9F" b="8C F7"/>
+  <a u="5CA0" b="8C F8"/>
+  <a u="5CA1" b="8C F9"/>
+  <a u="5CA2" b="E1 B3"/>
+  <a u="5CA3" b="E1 B8"/>
+  <a u="5CA4" b="8C FA"/>
+  <a u="5CA5" b="8C FB"/>
+  <a u="5CA6" b="8C FC"/>
+  <a u="5CA7" b="8C FD"/>
+  <a u="5CA8" b="8C FE"/>
+  <a u="5CA9" b="D1 D2"/>
+  <a u="5CAA" b="8D 40"/>
+  <a u="5CAB" b="E1 B6"/>
+  <a u="5CAC" b="E1 B5"/>
+  <a u="5CAD" b="C1 EB"/>
+  <a u="5CAE" b="8D 41"/>
+  <a u="5CAF" b="8D 42"/>
+  <a u="5CB0" b="8D 43"/>
+  <a u="5CB1" b="E1 B7"/>
+  <a u="5CB2" b="8D 44"/>
+  <a u="5CB3" b="D4 C0"/>
+  <a u="5CB4" b="8D 45"/>
+  <a u="5CB5" b="E1 B2"/>
+  <a u="5CB6" b="8D 46"/>
+  <a u="5CB7" b="E1 BA"/>
+  <a u="5CB8" b="B0 B6"/>
+  <a u="5CB9" b="8D 47"/>
+  <a u="5CBA" b="8D 48"/>
+  <a u="5CBB" b="8D 49"/>
+  <a u="5CBC" b="8D 4A"/>
+  <a u="5CBD" b="E1 B4"/>
+  <a u="5CBE" b="8D 4B"/>
+  <a u="5CBF" b="BF F9"/>
+  <a u="5CC0" b="8D 4C"/>
+  <a u="5CC1" b="E1 B9"/>
+  <a u="5CC2" b="8D 4D"/>
+  <a u="5CC3" b="8D 4E"/>
+  <a u="5CC4" b="E1 BB"/>
+  <a u="5CC5" b="8D 4F"/>
+  <a u="5CC6" b="8D 50"/>
+  <a u="5CC7" b="8D 51"/>
+  <a u="5CC8" b="8D 52"/>
+  <a u="5CC9" b="8D 53"/>
+  <a u="5CCA" b="8D 54"/>
+  <a u="5CCB" b="E1 BE"/>
+  <a u="5CCC" b="8D 55"/>
+  <a u="5CCD" b="8D 56"/>
+  <a u="5CCE" b="8D 57"/>
+  <a u="5CCF" b="8D 58"/>
+  <a u="5CD0" b="8D 59"/>
+  <a u="5CD1" b="8D 5A"/>
+  <a u="5CD2" b="E1 BC"/>
+  <a u="5CD3" b="8D 5B"/>
+  <a u="5CD4" b="8D 5C"/>
+  <a u="5CD5" b="8D 5D"/>
+  <a u="5CD6" b="8D 5E"/>
+  <a u="5CD7" b="8D 5F"/>
+  <a u="5CD8" b="8D 60"/>
+  <a u="5CD9" b="D6 C5"/>
+  <a u="5CDA" b="8D 61"/>
+  <a u="5CDB" b="8D 62"/>
+  <a u="5CDC" b="8D 63"/>
+  <a u="5CDD" b="8D 64"/>
+  <a u="5CDE" b="8D 65"/>
+  <a u="5CDF" b="8D 66"/>
+  <a u="5CE0" b="8D 67"/>
+  <a u="5CE1" b="CF BF"/>
+  <a u="5CE2" b="8D 68"/>
+  <a u="5CE3" b="8D 69"/>
+  <a u="5CE4" b="E1 BD"/>
+  <a u="5CE5" b="E1 BF"/>
+  <a u="5CE6" b="C2 CD"/>
+  <a u="5CE7" b="8D 6A"/>
+  <a u="5CE8" b="B6 EB"/>
+  <a u="5CE9" b="8D 6B"/>
+  <a u="5CEA" b="D3 F8"/>
+  <a u="5CEB" b="8D 6C"/>
+  <a u="5CEC" b="8D 6D"/>
+  <a u="5CED" b="C7 CD"/>
+  <a u="5CEE" b="8D 6E"/>
+  <a u="5CEF" b="8D 6F"/>
+  <a u="5CF0" b="B7 E5"/>
+  <a u="5CF1" b="8D 70"/>
+  <a u="5CF2" b="8D 71"/>
+  <a u="5CF3" b="8D 72"/>
+  <a u="5CF4" b="8D 73"/>
+  <a u="5CF5" b="8D 74"/>
+  <a u="5CF6" b="8D 75"/>
+  <a u="5CF7" b="8D 76"/>
+  <a u="5CF8" b="8D 77"/>
+  <a u="5CF9" b="8D 78"/>
+  <a u="5CFA" b="8D 79"/>
+  <a u="5CFB" b="BE FE"/>
+  <a u="5CFC" b="8D 7A"/>
+  <a u="5CFD" b="8D 7B"/>
+  <a u="5CFE" b="8D 7C"/>
+  <a u="5CFF" b="8D 7D"/>
+  <a u="5D00" b="8D 7E"/>
+  <a u="5D01" b="8D 80"/>
+  <a u="5D02" b="E1 C0"/>
+  <a u="5D03" b="E1 C1"/>
+  <a u="5D04" b="8D 81"/>
+  <a u="5D05" b="8D 82"/>
+  <a u="5D06" b="E1 C7"/>
+  <a u="5D07" b="B3 E7"/>
+  <a u="5D08" b="8D 83"/>
+  <a u="5D09" b="8D 84"/>
+  <a u="5D0A" b="8D 85"/>
+  <a u="5D0B" b="8D 86"/>
+  <a u="5D0C" b="8D 87"/>
+  <a u="5D0D" b="8D 88"/>
+  <a u="5D0E" b="C6 E9"/>
+  <a u="5D0F" b="8D 89"/>
+  <a u="5D10" b="8D 8A"/>
+  <a u="5D11" b="8D 8B"/>
+  <a u="5D12" b="8D 8C"/>
+  <a u="5D13" b="8D 8D"/>
+  <a u="5D14" b="B4 DE"/>
+  <a u="5D15" b="8D 8E"/>
+  <a u="5D16" b="D1 C2"/>
+  <a u="5D17" b="8D 8F"/>
+  <a u="5D18" b="8D 90"/>
+  <a u="5D19" b="8D 91"/>
+  <a u="5D1A" b="8D 92"/>
+  <a u="5D1B" b="E1 C8"/>
+  <a u="5D1C" b="8D 93"/>
+  <a u="5D1D" b="8D 94"/>
+  <a u="5D1E" b="E1 C6"/>
+  <a u="5D1F" b="8D 95"/>
+  <a u="5D20" b="8D 96"/>
+  <a u="5D21" b="8D 97"/>
+  <a u="5D22" b="8D 98"/>
+  <a u="5D23" b="8D 99"/>
+  <a u="5D24" b="E1 C5"/>
+  <a u="5D25" b="8D 9A"/>
+  <a u="5D26" b="E1 C3"/>
+  <a u="5D27" b="E1 C2"/>
+  <a u="5D28" b="8D 9B"/>
+  <a u="5D29" b="B1 C0"/>
+  <a u="5D2A" b="8D 9C"/>
+  <a u="5D2B" b="8D 9D"/>
+  <a u="5D2C" b="8D 9E"/>
+  <a u="5D2D" b="D5 B8"/>
+  <a u="5D2E" b="E1 C4"/>
+  <a u="5D2F" b="8D 9F"/>
+  <a u="5D30" b="8D A0"/>
+  <a u="5D31" b="8D A1"/>
+  <a u="5D32" b="8D A2"/>
+  <a u="5D33" b="8D A3"/>
+  <a u="5D34" b="E1 CB"/>
+  <a u="5D35" b="8D A4"/>
+  <a u="5D36" b="8D A5"/>
+  <a u="5D37" b="8D A6"/>
+  <a u="5D38" b="8D A7"/>
+  <a u="5D39" b="8D A8"/>
+  <a u="5D3A" b="8D A9"/>
+  <a u="5D3B" b="8D AA"/>
+  <a u="5D3C" b="8D AB"/>
+  <a u="5D3D" b="E1 CC"/>
+  <a u="5D3E" b="E1 CA"/>
+  <a u="5D3F" b="8D AC"/>
+  <a u="5D40" b="8D AD"/>
+  <a u="5D41" b="8D AE"/>
+  <a u="5D42" b="8D AF"/>
+  <a u="5D43" b="8D B0"/>
+  <a u="5D44" b="8D B1"/>
+  <a u="5D45" b="8D B2"/>
+  <a u="5D46" b="8D B3"/>
+  <a u="5D47" b="EF FA"/>
+  <a u="5D48" b="8D B4"/>
+  <a u="5D49" b="8D B5"/>
+  <a u="5D4A" b="E1 D3"/>
+  <a u="5D4B" b="E1 D2"/>
+  <a u="5D4C" b="C7 B6"/>
+  <a u="5D4D" b="8D B6"/>
+  <a u="5D4E" b="8D B7"/>
+  <a u="5D4F" b="8D B8"/>
+  <a u="5D50" b="8D B9"/>
+  <a u="5D51" b="8D BA"/>
+  <a u="5D52" b="8D BB"/>
+  <a u="5D53" b="8D BC"/>
+  <a u="5D54" b="8D BD"/>
+  <a u="5D55" b="8D BE"/>
+  <a u="5D56" b="8D BF"/>
+  <a u="5D57" b="8D C0"/>
+  <a u="5D58" b="E1 C9"/>
+  <a u="5D59" b="8D C1"/>
+  <a u="5D5A" b="8D C2"/>
+  <a u="5D5B" b="E1 CE"/>
+  <a u="5D5C" b="8D C3"/>
+  <a u="5D5D" b="E1 D0"/>
+  <a u="5D5E" b="8D C4"/>
+  <a u="5D5F" b="8D C5"/>
+  <a u="5D60" b="8D C6"/>
+  <a u="5D61" b="8D C7"/>
+  <a u="5D62" b="8D C8"/>
+  <a u="5D63" b="8D C9"/>
+  <a u="5D64" b="8D CA"/>
+  <a u="5D65" b="8D CB"/>
+  <a u="5D66" b="8D CC"/>
+  <a u="5D67" b="8D CD"/>
+  <a u="5D68" b="8D CE"/>
+  <a u="5D69" b="E1 D4"/>
+  <a u="5D6A" b="8D CF"/>
+  <a u="5D6B" b="E1 D1"/>
+  <a u="5D6C" b="E1 CD"/>
+  <a u="5D6D" b="8D D0"/>
+  <a u="5D6E" b="8D D1"/>
+  <a u="5D6F" b="E1 CF"/>
+  <a u="5D70" b="8D D2"/>
+  <a u="5D71" b="8D D3"/>
+  <a u="5D72" b="8D D4"/>
+  <a u="5D73" b="8D D5"/>
+  <a u="5D74" b="E1 D5"/>
+  <a u="5D75" b="8D D6"/>
+  <a u="5D76" b="8D D7"/>
+  <a u="5D77" b="8D D8"/>
+  <a u="5D78" b="8D D9"/>
+  <a u="5D79" b="8D DA"/>
+  <a u="5D7A" b="8D DB"/>
+  <a u="5D7B" b="8D DC"/>
+  <a u="5D7C" b="8D DD"/>
+  <a u="5D7D" b="8D DE"/>
+  <a u="5D7E" b="8D DF"/>
+  <a u="5D7F" b="8D E0"/>
+  <a u="5D80" b="8D E1"/>
+  <a u="5D81" b="8D E2"/>
+  <a u="5D82" b="E1 D6"/>
+  <a u="5D83" b="8D E3"/>
+  <a u="5D84" b="8D E4"/>
+  <a u="5D85" b="8D E5"/>
+  <a u="5D86" b="8D E6"/>
+  <a u="5D87" b="8D E7"/>
+  <a u="5D88" b="8D E8"/>
+  <a u="5D89" b="8D E9"/>
+  <a u="5D8A" b="8D EA"/>
+  <a u="5D8B" b="8D EB"/>
+  <a u="5D8C" b="8D EC"/>
+  <a u="5D8D" b="8D ED"/>
+  <a u="5D8E" b="8D EE"/>
+  <a u="5D8F" b="8D EF"/>
+  <a u="5D90" b="8D F0"/>
+  <a u="5D91" b="8D F1"/>
+  <a u="5D92" b="8D F2"/>
+  <a u="5D93" b="8D F3"/>
+  <a u="5D94" b="8D F4"/>
+  <a u="5D95" b="8D F5"/>
+  <a u="5D96" b="8D F6"/>
+  <a u="5D97" b="8D F7"/>
+  <a u="5D98" b="8D F8"/>
+  <a u="5D99" b="E1 D7"/>
+  <a u="5D9A" b="8D F9"/>
+  <a u="5D9B" b="8D FA"/>
+  <a u="5D9C" b="8D FB"/>
+  <a u="5D9D" b="E1 D8"/>
+  <a u="5D9E" b="8D FC"/>
+  <a u="5D9F" b="8D FD"/>
+  <a u="5DA0" b="8D FE"/>
+  <a u="5DA1" b="8E 40"/>
+  <a u="5DA2" b="8E 41"/>
+  <a u="5DA3" b="8E 42"/>
+  <a u="5DA4" b="8E 43"/>
+  <a u="5DA5" b="8E 44"/>
+  <a u="5DA6" b="8E 45"/>
+  <a u="5DA7" b="8E 46"/>
+  <a u="5DA8" b="8E 47"/>
+  <a u="5DA9" b="8E 48"/>
+  <a u="5DAA" b="8E 49"/>
+  <a u="5DAB" b="8E 4A"/>
+  <a u="5DAC" b="8E 4B"/>
+  <a u="5DAD" b="8E 4C"/>
+  <a u="5DAE" b="8E 4D"/>
+  <a u="5DAF" b="8E 4E"/>
+  <a u="5DB0" b="8E 4F"/>
+  <a u="5DB1" b="8E 50"/>
+  <a u="5DB2" b="8E 51"/>
+  <a u="5DB3" b="8E 52"/>
+  <a u="5DB4" b="8E 53"/>
+  <a u="5DB5" b="8E 54"/>
+  <a u="5DB6" b="8E 55"/>
+  <a u="5DB7" b="E1 DA"/>
+  <a u="5DB8" b="8E 56"/>
+  <a u="5DB9" b="8E 57"/>
+  <a u="5DBA" b="8E 58"/>
+  <a u="5DBB" b="8E 59"/>
+  <a u="5DBC" b="8E 5A"/>
+  <a u="5DBD" b="8E 5B"/>
+  <a u="5DBE" b="8E 5C"/>
+  <a u="5DBF" b="8E 5D"/>
+  <a u="5DC0" b="8E 5E"/>
+  <a u="5DC1" b="8E 5F"/>
+  <a u="5DC2" b="8E 60"/>
+  <a u="5DC3" b="8E 61"/>
+  <a u="5DC4" b="8E 62"/>
+  <a u="5DC5" b="E1 DB"/>
+  <a u="5DC6" b="8E 63"/>
+  <a u="5DC7" b="8E 64"/>
+  <a u="5DC8" b="8E 65"/>
+  <a u="5DC9" b="8E 66"/>
+  <a u="5DCA" b="8E 67"/>
+  <a u="5DCB" b="8E 68"/>
+  <a u="5DCC" b="8E 69"/>
+  <a u="5DCD" b="CE A1"/>
+  <a u="5DCE" b="8E 6A"/>
+  <a u="5DCF" b="8E 6B"/>
+  <a u="5DD0" b="8E 6C"/>
+  <a u="5DD1" b="8E 6D"/>
+  <a u="5DD2" b="8E 6E"/>
+  <a u="5DD3" b="8E 6F"/>
+  <a u="5DD4" b="8E 70"/>
+  <a u="5DD5" b="8E 71"/>
+  <a u="5DD6" b="8E 72"/>
+  <a u="5DD7" b="8E 73"/>
+  <a u="5DD8" b="8E 74"/>
+  <a u="5DD9" b="8E 75"/>
+  <a u="5DDA" b="8E 76"/>
+  <a u="5DDB" b="E7 DD"/>
+  <a u="5DDC" b="8E 77"/>
+  <a u="5DDD" b="B4 A8"/>
+  <a u="5DDE" b="D6 DD"/>
+  <a u="5DDF" b="8E 78"/>
+  <a u="5DE0" b="8E 79"/>
+  <a u="5DE1" b="D1 B2"/>
+  <a u="5DE2" b="B3 B2"/>
+  <a u="5DE3" b="8E 7A"/>
+  <a u="5DE4" b="8E 7B"/>
+  <a u="5DE5" b="B9 A4"/>
+  <a u="5DE6" b="D7 F3"/>
+  <a u="5DE7" b="C7 C9"/>
+  <a u="5DE8" b="BE DE"/>
+  <a u="5DE9" b="B9 AE"/>
+  <a u="5DEA" b="8E 7C"/>
+  <a u="5DEB" b="CE D7"/>
+  <a u="5DEC" b="8E 7D"/>
+  <a u="5DED" b="8E 7E"/>
+  <a u="5DEE" b="B2 EE"/>
+  <a u="5DEF" b="DB CF"/>
+  <a u="5DF0" b="8E 80"/>
+  <a u="5DF1" b="BC BA"/>
+  <a u="5DF2" b="D2 D1"/>
+  <a u="5DF3" b="CB C8"/>
+  <a u="5DF4" b="B0 CD"/>
+  <a u="5DF5" b="8E 81"/>
+  <a u="5DF6" b="8E 82"/>
+  <a u="5DF7" b="CF EF"/>
+  <a u="5DF8" b="8E 83"/>
+  <a u="5DF9" b="8E 84"/>
+  <a u="5DFA" b="8E 85"/>
+  <a u="5DFB" b="8E 86"/>
+  <a u="5DFC" b="8E 87"/>
+  <a u="5DFD" b="D9 E3"/>
+  <a u="5DFE" b="BD ED"/>
+  <a u="5DFF" b="8E 88"/>
+  <a u="5E00" b="8E 89"/>
+  <a u="5E01" b="B1 D2"/>
+  <a u="5E02" b="CA D0"/>
+  <a u="5E03" b="B2 BC"/>
+  <a u="5E04" b="8E 8A"/>
+  <a u="5E05" b="CB A7"/>
+  <a u="5E06" b="B7 AB"/>
+  <a u="5E07" b="8E 8B"/>
+  <a u="5E08" b="CA A6"/>
+  <a u="5E09" b="8E 8C"/>
+  <a u="5E0A" b="8E 8D"/>
+  <a u="5E0B" b="8E 8E"/>
+  <a u="5E0C" b="CF A3"/>
+  <a u="5E0D" b="8E 8F"/>
+  <a u="5E0E" b="8E 90"/>
+  <a u="5E0F" b="E0 F8"/>
+  <a u="5E10" b="D5 CA"/>
+  <a u="5E11" b="E0 FB"/>
+  <a u="5E12" b="8E 91"/>
+  <a u="5E13" b="8E 92"/>
+  <a u="5E14" b="E0 FA"/>
+  <a u="5E15" b="C5 C1"/>
+  <a u="5E16" b="CC FB"/>
+  <a u="5E17" b="8E 93"/>
+  <a u="5E18" b="C1 B1"/>
+  <a u="5E19" b="E0 F9"/>
+  <a u="5E1A" b="D6 E3"/>
+  <a u="5E1B" b="B2 AF"/>
+  <a u="5E1C" b="D6 C4"/>
+  <a u="5E1D" b="B5 DB"/>
+  <a u="5E1E" b="8E 94"/>
+  <a u="5E1F" b="8E 95"/>
+  <a u="5E20" b="8E 96"/>
+  <a u="5E21" b="8E 97"/>
+  <a u="5E22" b="8E 98"/>
+  <a u="5E23" b="8E 99"/>
+  <a u="5E24" b="8E 9A"/>
+  <a u="5E25" b="8E 9B"/>
+  <a u="5E26" b="B4 F8"/>
+  <a u="5E27" b="D6 A1"/>
+  <a u="5E28" b="8E 9C"/>
+  <a u="5E29" b="8E 9D"/>
+  <a u="5E2A" b="8E 9E"/>
+  <a u="5E2B" b="8E 9F"/>
+  <a u="5E2C" b="8E A0"/>
+  <a u="5E2D" b="CF AF"/>
+  <a u="5E2E" b="B0 EF"/>
+  <a u="5E2F" b="8E A1"/>
+  <a u="5E30" b="8E A2"/>
+  <a u="5E31" b="E0 FC"/>
+  <a u="5E32" b="8E A3"/>
+  <a u="5E33" b="8E A4"/>
+  <a u="5E34" b="8E A5"/>
+  <a u="5E35" b="8E A6"/>
+  <a u="5E36" b="8E A7"/>
+  <a u="5E37" b="E1 A1"/>
+  <a u="5E38" b="B3 A3"/>
+  <a u="5E39" b="8E A8"/>
+  <a u="5E3A" b="8E A9"/>
+  <a u="5E3B" b="E0 FD"/>
+  <a u="5E3C" b="E0 FE"/>
+  <a u="5E3D" b="C3 B1"/>
+  <a u="5E3E" b="8E AA"/>
+  <a u="5E3F" b="8E AB"/>
+  <a u="5E40" b="8E AC"/>
+  <a u="5E41" b="8E AD"/>
+  <a u="5E42" b="C3 DD"/>
+  <a u="5E43" b="8E AE"/>
+  <a u="5E44" b="E1 A2"/>
+  <a u="5E45" b="B7 F9"/>
+  <a u="5E46" b="8E AF"/>
+  <a u="5E47" b="8E B0"/>
+  <a u="5E48" b="8E B1"/>
+  <a u="5E49" b="8E B2"/>
+  <a u="5E4A" b="8E B3"/>
+  <a u="5E4B" b="8E B4"/>
+  <a u="5E4C" b="BB CF"/>
+  <a u="5E4D" b="8E B5"/>
+  <a u="5E4E" b="8E B6"/>
+  <a u="5E4F" b="8E B7"/>
+  <a u="5E50" b="8E B8"/>
+  <a u="5E51" b="8E B9"/>
+  <a u="5E52" b="8E BA"/>
+  <a u="5E53" b="8E BB"/>
+  <a u="5E54" b="E1 A3"/>
+  <a u="5E55" b="C4 BB"/>
+  <a u="5E56" b="8E BC"/>
+  <a u="5E57" b="8E BD"/>
+  <a u="5E58" b="8E BE"/>
+  <a u="5E59" b="8E BF"/>
+  <a u="5E5A" b="8E C0"/>
+  <a u="5E5B" b="E1 A4"/>
+  <a u="5E5C" b="8E C1"/>
+  <a u="5E5D" b="8E C2"/>
+  <a u="5E5E" b="E1 A5"/>
+  <a u="5E5F" b="8E C3"/>
+  <a u="5E60" b="8E C4"/>
+  <a u="5E61" b="E1 A6"/>
+  <a u="5E62" b="B4 B1"/>
+  <a u="5E63" b="8E C5"/>
+  <a u="5E64" b="8E C6"/>
+  <a u="5E65" b="8E C7"/>
+  <a u="5E66" b="8E C8"/>
+  <a u="5E67" b="8E C9"/>
+  <a u="5E68" b="8E CA"/>
+  <a u="5E69" b="8E CB"/>
+  <a u="5E6A" b="8E CC"/>
+  <a u="5E6B" b="8E CD"/>
+  <a u="5E6C" b="8E CE"/>
+  <a u="5E6D" b="8E CF"/>
+  <a u="5E6E" b="8E D0"/>
+  <a u="5E6F" b="8E D1"/>
+  <a u="5E70" b="8E D2"/>
+  <a u="5E71" b="8E D3"/>
+  <a u="5E72" b="B8 C9"/>
+  <a u="5E73" b="C6 BD"/>
+  <a u="5E74" b="C4 EA"/>
+  <a u="5E75" b="8E D4"/>
+  <a u="5E76" b="B2 A2"/>
+  <a u="5E77" b="8E D5"/>
+  <a u="5E78" b="D0 D2"/>
+  <a u="5E79" b="8E D6"/>
+  <a u="5E7A" b="E7 DB"/>
+  <a u="5E7B" b="BB C3"/>
+  <a u="5E7C" b="D3 D7"/>
+  <a u="5E7D" b="D3 C4"/>
+  <a u="5E7E" b="8E D7"/>
+  <a u="5E7F" b="B9 E3"/>
+  <a u="5E80" b="E2 CF"/>
+  <a u="5E81" b="8E D8"/>
+  <a u="5E82" b="8E D9"/>
+  <a u="5E83" b="8E DA"/>
+  <a u="5E84" b="D7 AF"/>
+  <a u="5E85" b="8E DB"/>
+  <a u="5E86" b="C7 EC"/>
+  <a u="5E87" b="B1 D3"/>
+  <a u="5E88" b="8E DC"/>
+  <a u="5E89" b="8E DD"/>
+  <a u="5E8A" b="B4 B2"/>
+  <a u="5E8B" b="E2 D1"/>
+  <a u="5E8C" b="8E DE"/>
+  <a u="5E8D" b="8E DF"/>
+  <a u="5E8E" b="8E E0"/>
+  <a u="5E8F" b="D0 F2"/>
+  <a u="5E90" b="C2 AE"/>
+  <a u="5E91" b="E2 D0"/>
+  <a u="5E92" b="8E E1"/>
+  <a u="5E93" b="BF E2"/>
+  <a u="5E94" b="D3 A6"/>
+  <a u="5E95" b="B5 D7"/>
+  <a u="5E96" b="E2 D2"/>
+  <a u="5E97" b="B5 EA"/>
+  <a u="5E98" b="8E E2"/>
+  <a u="5E99" b="C3 ED"/>
+  <a u="5E9A" b="B8 FD"/>
+  <a u="5E9B" b="8E E3"/>
+  <a u="5E9C" b="B8 AE"/>
+  <a u="5E9D" b="8E E4"/>
+  <a u="5E9E" b="C5 D3"/>
+  <a u="5E9F" b="B7 CF"/>
+  <a u="5EA0" b="E2 D4"/>
+  <a u="5EA1" b="8E E5"/>
+  <a u="5EA2" b="8E E6"/>
+  <a u="5EA3" b="8E E7"/>
+  <a u="5EA4" b="8E E8"/>
+  <a u="5EA5" b="E2 D3"/>
+  <a u="5EA6" b="B6 C8"/>
+  <a u="5EA7" b="D7 F9"/>
+  <a u="5EA8" b="8E E9"/>
+  <a u="5EA9" b="8E EA"/>
+  <a u="5EAA" b="8E EB"/>
+  <a u="5EAB" b="8E EC"/>
+  <a u="5EAC" b="8E ED"/>
+  <a u="5EAD" b="CD A5"/>
+  <a u="5EAE" b="8E EE"/>
+  <a u="5EAF" b="8E EF"/>
+  <a u="5EB0" b="8E F0"/>
+  <a u="5EB1" b="8E F1"/>
+  <a u="5EB2" b="8E F2"/>
+  <a u="5EB3" b="E2 D8"/>
+  <a u="5EB4" b="8E F3"/>
+  <a u="5EB5" b="E2 D6"/>
+  <a u="5EB6" b="CA FC"/>
+  <a u="5EB7" b="BF B5"/>
+  <a u="5EB8" b="D3 B9"/>
+  <a u="5EB9" b="E2 D5"/>
+  <a u="5EBA" b="8E F4"/>
+  <a u="5EBB" b="8E F5"/>
+  <a u="5EBC" b="8E F6"/>
+  <a u="5EBD" b="8E F7"/>
+  <a u="5EBE" b="E2 D7"/>
+  <a u="5EBF" b="8E F8"/>
+  <a u="5EC0" b="8E F9"/>
+  <a u="5EC1" b="8E FA"/>
+  <a u="5EC2" b="8E FB"/>
+  <a u="5EC3" b="8E FC"/>
+  <a u="5EC4" b="8E FD"/>
+  <a u="5EC5" b="8E FE"/>
+  <a u="5EC6" b="8F 40"/>
+  <a u="5EC7" b="8F 41"/>
+  <a u="5EC8" b="8F 42"/>
+  <a u="5EC9" b="C1 AE"/>
+  <a u="5ECA" b="C0 C8"/>
+  <a u="5ECB" b="8F 43"/>
+  <a u="5ECC" b="8F 44"/>
+  <a u="5ECD" b="8F 45"/>
+  <a u="5ECE" b="8F 46"/>
+  <a u="5ECF" b="8F 47"/>
+  <a u="5ED0" b="8F 48"/>
+  <a u="5ED1" b="E2 DB"/>
+  <a u="5ED2" b="E2 DA"/>
+  <a u="5ED3" b="C0 AA"/>
+  <a u="5ED4" b="8F 49"/>
+  <a u="5ED5" b="8F 4A"/>
+  <a u="5ED6" b="C1 CE"/>
+  <a u="5ED7" b="8F 4B"/>
+  <a u="5ED8" b="8F 4C"/>
+  <a u="5ED9" b="8F 4D"/>
+  <a u="5EDA" b="8F 4E"/>
+  <a u="5EDB" b="E2 DC"/>
+  <a u="5EDC" b="8F 4F"/>
+  <a u="5EDD" b="8F 50"/>
+  <a u="5EDE" b="8F 51"/>
+  <a u="5EDF" b="8F 52"/>
+  <a u="5EE0" b="8F 53"/>
+  <a u="5EE1" b="8F 54"/>
+  <a u="5EE2" b="8F 55"/>
+  <a u="5EE3" b="8F 56"/>
+  <a u="5EE4" b="8F 57"/>
+  <a u="5EE5" b="8F 58"/>
+  <a u="5EE6" b="8F 59"/>
+  <a u="5EE7" b="8F 5A"/>
+  <a u="5EE8" b="E2 DD"/>
+  <a u="5EE9" b="8F 5B"/>
+  <a u="5EEA" b="E2 DE"/>
+  <a u="5EEB" b="8F 5C"/>
+  <a u="5EEC" b="8F 5D"/>
+  <a u="5EED" b="8F 5E"/>
+  <a u="5EEE" b="8F 5F"/>
+  <a u="5EEF" b="8F 60"/>
+  <a u="5EF0" b="8F 61"/>
+  <a u="5EF1" b="8F 62"/>
+  <a u="5EF2" b="8F 63"/>
+  <a u="5EF3" b="8F 64"/>
+  <a u="5EF4" b="DB C8"/>
+  <a u="5EF5" b="8F 65"/>
+  <a u="5EF6" b="D1 D3"/>
+  <a u="5EF7" b="CD A2"/>
+  <a u="5EF8" b="8F 66"/>
+  <a u="5EF9" b="8F 67"/>
+  <a u="5EFA" b="BD A8"/>
+  <a u="5EFB" b="8F 68"/>
+  <a u="5EFC" b="8F 69"/>
+  <a u="5EFD" b="8F 6A"/>
+  <a u="5EFE" b="DE C3"/>
+  <a u="5EFF" b="D8 A5"/>
+  <a u="5F00" b="BF AA"/>
+  <a u="5F01" b="DB CD"/>
+  <a u="5F02" b="D2 EC"/>
+  <a u="5F03" b="C6 FA"/>
+  <a u="5F04" b="C5 AA"/>
+  <a u="5F05" b="8F 6B"/>
+  <a u="5F06" b="8F 6C"/>
+  <a u="5F07" b="8F 6D"/>
+  <a u="5F08" b="DE C4"/>
+  <a u="5F09" b="8F 6E"/>
+  <a u="5F0A" b="B1 D7"/>
+  <a u="5F0B" b="DF AE"/>
+  <a u="5F0C" b="8F 6F"/>
+  <a u="5F0D" b="8F 70"/>
+  <a u="5F0E" b="8F 71"/>
+  <a u="5F0F" b="CA BD"/>
+  <a u="5F10" b="8F 72"/>
+  <a u="5F11" b="DF B1"/>
+  <a u="5F12" b="8F 73"/>
+  <a u="5F13" b="B9 AD"/>
+  <a u="5F14" b="8F 74"/>
+  <a u="5F15" b="D2 FD"/>
+  <a u="5F16" b="8F 75"/>
+  <a u="5F17" b="B8 A5"/>
+  <a u="5F18" b="BA EB"/>
+  <a u="5F19" b="8F 76"/>
+  <a u="5F1A" b="8F 77"/>
+  <a u="5F1B" b="B3 DA"/>
+  <a u="5F1C" b="8F 78"/>
+  <a u="5F1D" b="8F 79"/>
+  <a u="5F1E" b="8F 7A"/>
+  <a u="5F1F" b="B5 DC"/>
+  <a u="5F20" b="D5 C5"/>
+  <a u="5F21" b="8F 7B"/>
+  <a u="5F22" b="8F 7C"/>
+  <a u="5F23" b="8F 7D"/>
+  <a u="5F24" b="8F 7E"/>
+  <a u="5F25" b="C3 D6"/>
+  <a u="5F26" b="CF D2"/>
+  <a u="5F27" b="BB A1"/>
+  <a u="5F28" b="8F 80"/>
+  <a u="5F29" b="E5 F3"/>
+  <a u="5F2A" b="E5 F2"/>
+  <a u="5F2B" b="8F 81"/>
+  <a u="5F2C" b="8F 82"/>
+  <a u="5F2D" b="E5 F4"/>
+  <a u="5F2E" b="8F 83"/>
+  <a u="5F2F" b="CD E4"/>
+  <a u="5F30" b="8F 84"/>
+  <a u="5F31" b="C8 F5"/>
+  <a u="5F32" b="8F 85"/>
+  <a u="5F33" b="8F 86"/>
+  <a u="5F34" b="8F 87"/>
+  <a u="5F35" b="8F 88"/>
+  <a u="5F36" b="8F 89"/>
+  <a u="5F37" b="8F 8A"/>
+  <a u="5F38" b="8F 8B"/>
+  <a u="5F39" b="B5 AF"/>
+  <a u="5F3A" b="C7 BF"/>
+  <a u="5F3B" b="8F 8C"/>
+  <a u="5F3C" b="E5 F6"/>
+  <a u="5F3D" b="8F 8D"/>
+  <a u="5F3E" b="8F 8E"/>
+  <a u="5F3F" b="8F 8F"/>
+  <a u="5F40" b="EC B0"/>
+  <a u="5F41" b="8F 90"/>
+  <a u="5F42" b="8F 91"/>
+  <a u="5F43" b="8F 92"/>
+  <a u="5F44" b="8F 93"/>
+  <a u="5F45" b="8F 94"/>
+  <a u="5F46" b="8F 95"/>
+  <a u="5F47" b="8F 96"/>
+  <a u="5F48" b="8F 97"/>
+  <a u="5F49" b="8F 98"/>
+  <a u="5F4A" b="8F 99"/>
+  <a u="5F4B" b="8F 9A"/>
+  <a u="5F4C" b="8F 9B"/>
+  <a u="5F4D" b="8F 9C"/>
+  <a u="5F4E" b="8F 9D"/>
+  <a u="5F4F" b="8F 9E"/>
+  <a u="5F50" b="E5 E6"/>
+  <a u="5F51" b="8F 9F"/>
+  <a u="5F52" b="B9 E9"/>
+  <a u="5F53" b="B5 B1"/>
+  <a u="5F54" b="8F A0"/>
+  <a u="5F55" b="C2 BC"/>
+  <a u="5F56" b="E5 E8"/>
+  <a u="5F57" b="E5 E7"/>
+  <a u="5F58" b="E5 E9"/>
+  <a u="5F59" b="8F A1"/>
+  <a u="5F5A" b="8F A2"/>
+  <a u="5F5B" b="8F A3"/>
+  <a u="5F5C" b="8F A4"/>
+  <a u="5F5D" b="D2 CD"/>
+  <a u="5F5E" b="8F A5"/>
+  <a u="5F5F" b="8F A6"/>
+  <a u="5F60" b="8F A7"/>
+  <a u="5F61" b="E1 EA"/>
+  <a u="5F62" b="D0 CE"/>
+  <a u="5F63" b="8F A8"/>
+  <a u="5F64" b="CD AE"/>
+  <a u="5F65" b="8F A9"/>
+  <a u="5F66" b="D1 E5"/>
+  <a u="5F67" b="8F AA"/>
+  <a u="5F68" b="8F AB"/>
+  <a u="5F69" b="B2 CA"/>
+  <a u="5F6A" b="B1 EB"/>
+  <a u="5F6B" b="8F AC"/>
+  <a u="5F6C" b="B1 F2"/>
+  <a u="5F6D" b="C5 ED"/>
+  <a u="5F6E" b="8F AD"/>
+  <a u="5F6F" b="8F AE"/>
+  <a u="5F70" b="D5 C3"/>
+  <a u="5F71" b="D3 B0"/>
+  <a u="5F72" b="8F AF"/>
+  <a u="5F73" b="E1 DC"/>
+  <a u="5F74" b="8F B0"/>
+  <a u="5F75" b="8F B1"/>
+  <a u="5F76" b="8F B2"/>
+  <a u="5F77" b="E1 DD"/>
+  <a u="5F78" b="8F B3"/>
+  <a u="5F79" b="D2 DB"/>
+  <a u="5F7A" b="8F B4"/>
+  <a u="5F7B" b="B3 B9"/>
+  <a u="5F7C" b="B1 CB"/>
+  <a u="5F7D" b="8F B5"/>
+  <a u="5F7E" b="8F B6"/>
+  <a u="5F7F" b="8F B7"/>
+  <a u="5F80" b="CD F9"/>
+  <a u="5F81" b="D5 F7"/>
+  <a u="5F82" b="E1 DE"/>
+  <a u="5F83" b="8F B8"/>
+  <a u="5F84" b="BE B6"/>
+  <a u="5F85" b="B4 FD"/>
+  <a u="5F86" b="8F B9"/>
+  <a u="5F87" b="E1 DF"/>
+  <a u="5F88" b="BA DC"/>
+  <a u="5F89" b="E1 E0"/>
+  <a u="5F8A" b="BB B2"/>
+  <a u="5F8B" b="C2 C9"/>
+  <a u="5F8C" b="E1 E1"/>
+  <a u="5F8D" b="8F BA"/>
+  <a u="5F8E" b="8F BB"/>
+  <a u="5F8F" b="8F BC"/>
+  <a u="5F90" b="D0 EC"/>
+  <a u="5F91" b="8F BD"/>
+  <a u="5F92" b="CD BD"/>
+  <a u="5F93" b="8F BE"/>
+  <a u="5F94" b="8F BF"/>
+  <a u="5F95" b="E1 E2"/>
+  <a u="5F96" b="8F C0"/>
+  <a u="5F97" b="B5 C3"/>
+  <a u="5F98" b="C5 C7"/>
+  <a u="5F99" b="E1 E3"/>
+  <a u="5F9A" b="8F C1"/>
+  <a u="5F9B" b="8F C2"/>
+  <a u="5F9C" b="E1 E4"/>
+  <a u="5F9D" b="8F C3"/>
+  <a u="5F9E" b="8F C4"/>
+  <a u="5F9F" b="8F C5"/>
+  <a u="5FA0" b="8F C6"/>
+  <a u="5FA1" b="D3 F9"/>
+  <a u="5FA2" b="8F C7"/>
+  <a u="5FA3" b="8F C8"/>
+  <a u="5FA4" b="8F C9"/>
+  <a u="5FA5" b="8F CA"/>
+  <a u="5FA6" b="8F CB"/>
+  <a u="5FA7" b="8F CC"/>
+  <a u="5FA8" b="E1 E5"/>
+  <a u="5FA9" b="8F CD"/>
+  <a u="5FAA" b="D1 AD"/>
+  <a u="5FAB" b="8F CE"/>
+  <a u="5FAC" b="8F CF"/>
+  <a u="5FAD" b="E1 E6"/>
+  <a u="5FAE" b="CE A2"/>
+  <a u="5FAF" b="8F D0"/>
+  <a u="5FB0" b="8F D1"/>
+  <a u="5FB1" b="8F D2"/>
+  <a u="5FB2" b="8F D3"/>
+  <a u="5FB3" b="8F D4"/>
+  <a u="5FB4" b="8F D5"/>
+  <a u="5FB5" b="E1 E7"/>
+  <a u="5FB6" b="8F D6"/>
+  <a u="5FB7" b="B5 C2"/>
+  <a u="5FB8" b="8F D7"/>
+  <a u="5FB9" b="8F D8"/>
+  <a u="5FBA" b="8F D9"/>
+  <a u="5FBB" b="8F DA"/>
+  <a u="5FBC" b="E1 E8"/>
+  <a u="5FBD" b="BB D5"/>
+  <a u="5FBE" b="8F DB"/>
+  <a u="5FBF" b="8F DC"/>
+  <a u="5FC0" b="8F DD"/>
+  <a u="5FC1" b="8F DE"/>
+  <a u="5FC2" b="8F DF"/>
+  <a u="5FC3" b="D0 C4"/>
+  <a u="5FC4" b="E2 E0"/>
+  <a u="5FC5" b="B1 D8"/>
+  <a u="5FC6" b="D2 E4"/>
+  <a u="5FC7" b="8F E0"/>
+  <a u="5FC8" b="8F E1"/>
+  <a u="5FC9" b="E2 E1"/>
+  <a u="5FCA" b="8F E2"/>
+  <a u="5FCB" b="8F E3"/>
+  <a u="5FCC" b="BC C9"/>
+  <a u="5FCD" b="C8 CC"/>
+  <a u="5FCE" b="8F E4"/>
+  <a u="5FCF" b="E2 E3"/>
+  <a u="5FD0" b="EC FE"/>
+  <a u="5FD1" b="EC FD"/>
+  <a u="5FD2" b="DF AF"/>
+  <a u="5FD3" b="8F E5"/>
+  <a u="5FD4" b="8F E6"/>
+  <a u="5FD5" b="8F E7"/>
+  <a u="5FD6" b="E2 E2"/>
+  <a u="5FD7" b="D6 BE"/>
+  <a u="5FD8" b="CD FC"/>
+  <a u="5FD9" b="C3 A6"/>
+  <a u="5FDA" b="8F E8"/>
+  <a u="5FDB" b="8F E9"/>
+  <a u="5FDC" b="8F EA"/>
+  <a u="5FDD" b="E3 C3"/>
+  <a u="5FDE" b="8F EB"/>
+  <a u="5FDF" b="8F EC"/>
+  <a u="5FE0" b="D6 D2"/>
+  <a u="5FE1" b="E2 E7"/>
+  <a u="5FE2" b="8F ED"/>
+  <a u="5FE3" b="8F EE"/>
+  <a u="5FE4" b="E2 E8"/>
+  <a u="5FE5" b="8F EF"/>
+  <a u="5FE6" b="8F F0"/>
+  <a u="5FE7" b="D3 C7"/>
+  <a u="5FE8" b="8F F1"/>
+  <a u="5FE9" b="8F F2"/>
+  <a u="5FEA" b="E2 EC"/>
+  <a u="5FEB" b="BF EC"/>
+  <a u="5FEC" b="8F F3"/>
+  <a u="5FED" b="E2 ED"/>
+  <a u="5FEE" b="E2 E5"/>
+  <a u="5FEF" b="8F F4"/>
+  <a u="5FF0" b="8F F5"/>
+  <a u="5FF1" b="B3 C0"/>
+  <a u="5FF2" b="8F F6"/>
+  <a u="5FF3" b="8F F7"/>
+  <a u="5FF4" b="8F F8"/>
+  <a u="5FF5" b="C4 EE"/>
+  <a u="5FF6" b="8F F9"/>
+  <a u="5FF7" b="8F FA"/>
+  <a u="5FF8" b="E2 EE"/>
+  <a u="5FF9" b="8F FB"/>
+  <a u="5FFA" b="8F FC"/>
+  <a u="5FFB" b="D0 C3"/>
+  <a u="5FFC" b="8F FD"/>
+  <a u="5FFD" b="BA F6"/>
+  <a u="5FFE" b="E2 E9"/>
+  <a u="5FFF" b="B7 DE"/>
+  <a u="6000" b="BB B3"/>
+  <a u="6001" b="CC AC"/>
+  <a u="6002" b="CB CB"/>
+  <a u="6003" b="E2 E4"/>
+  <a u="6004" b="E2 E6"/>
+  <a u="6005" b="E2 EA"/>
+  <a u="6006" b="E2 EB"/>
+  <a u="6007" b="8F FE"/>
+  <a u="6008" b="90 40"/>
+  <a u="6009" b="90 41"/>
+  <a u="600A" b="E2 F7"/>
+  <a u="600B" b="90 42"/>
+  <a u="600C" b="90 43"/>
+  <a u="600D" b="E2 F4"/>
+  <a u="600E" b="D4 F5"/>
+  <a u="600F" b="E2 F3"/>
+  <a u="6010" b="90 44"/>
+  <a u="6011" b="90 45"/>
+  <a u="6012" b="C5 AD"/>
+  <a u="6013" b="90 46"/>
+  <a u="6014" b="D5 FA"/>
+  <a u="6015" b="C5 C2"/>
+  <a u="6016" b="B2 C0"/>
+  <a u="6017" b="90 47"/>
+  <a u="6018" b="90 48"/>
+  <a u="6019" b="E2 EF"/>
+  <a u="601A" b="90 49"/>
+  <a u="601B" b="E2 F2"/>
+  <a u="601C" b="C1 AF"/>
+  <a u="601D" b="CB BC"/>
+  <a u="601E" b="90 4A"/>
+  <a u="601F" b="90 4B"/>
+  <a u="6020" b="B5 A1"/>
+  <a u="6021" b="E2 F9"/>
+  <a u="6022" b="90 4C"/>
+  <a u="6023" b="90 4D"/>
+  <a u="6024" b="90 4E"/>
+  <a u="6025" b="BC B1"/>
+  <a u="6026" b="E2 F1"/>
+  <a u="6027" b="D0 D4"/>
+  <a u="6028" b="D4 B9"/>
+  <a u="6029" b="E2 F5"/>
+  <a u="602A" b="B9 D6"/>
+  <a u="602B" b="E2 F6"/>
+  <a u="602C" b="90 4F"/>
+  <a u="602D" b="90 50"/>
+  <a u="602E" b="90 51"/>
+  <a u="602F" b="C7 D3"/>
+  <a u="6030" b="90 52"/>
+  <a u="6031" b="90 53"/>
+  <a u="6032" b="90 54"/>
+  <a u="6033" b="90 55"/>
+  <a u="6034" b="90 56"/>
+  <a u="6035" b="E2 F0"/>
+  <a u="6036" b="90 57"/>
+  <a u="6037" b="90 58"/>
+  <a u="6038" b="90 59"/>
+  <a u="6039" b="90 5A"/>
+  <a u="603A" b="90 5B"/>
+  <a u="603B" b="D7 DC"/>
+  <a u="603C" b="ED A1"/>
+  <a u="603D" b="90 5C"/>
+  <a u="603E" b="90 5D"/>
+  <a u="603F" b="E2 F8"/>
+  <a u="6040" b="90 5E"/>
+  <a u="6041" b="ED A5"/>
+  <a u="6042" b="E2 FE"/>
+  <a u="6043" b="CA D1"/>
+  <a u="6044" b="90 5F"/>
+  <a u="6045" b="90 60"/>
+  <a u="6046" b="90 61"/>
+  <a u="6047" b="90 62"/>
+  <a u="6048" b="90 63"/>
+  <a u="6049" b="90 64"/>
+  <a u="604A" b="90 65"/>
+  <a u="604B" b="C1 B5"/>
+  <a u="604C" b="90 66"/>
+  <a u="604D" b="BB D0"/>
+  <a u="604E" b="90 67"/>
+  <a u="604F" b="90 68"/>
+  <a u="6050" b="BF D6"/>
+  <a u="6051" b="90 69"/>
+  <a u="6052" b="BA E3"/>
+  <a u="6053" b="90 6A"/>
+  <a u="6054" b="90 6B"/>
+  <a u="6055" b="CB A1"/>
+  <a u="6056" b="90 6C"/>
+  <a u="6057" b="90 6D"/>
+  <a u="6058" b="90 6E"/>
+  <a u="6059" b="ED A6"/>
+  <a u="605A" b="ED A3"/>
+  <a u="605B" b="90 6F"/>
+  <a u="605C" b="90 70"/>
+  <a u="605D" b="ED A2"/>
+  <a u="605E" b="90 71"/>
+  <a u="605F" b="90 72"/>
+  <a u="6060" b="90 73"/>
+  <a u="6061" b="90 74"/>
+  <a u="6062" b="BB D6"/>
+  <a u="6063" b="ED A7"/>
+  <a u="6064" b="D0 F4"/>
+  <a u="6065" b="90 75"/>
+  <a u="6066" b="90 76"/>
+  <a u="6067" b="ED A4"/>
+  <a u="6068" b="BA DE"/>
+  <a u="6069" b="B6 F7"/>
+  <a u="606A" b="E3 A1"/>
+  <a u="606B" b="B6 B2"/>
+  <a u="606C" b="CC F1"/>
+  <a u="606D" b="B9 A7"/>
+  <a u="606E" b="90 77"/>
+  <a u="606F" b="CF A2"/>
+  <a u="6070" b="C7 A1"/>
+  <a u="6071" b="90 78"/>
+  <a u="6072" b="90 79"/>
+  <a u="6073" b="BF D2"/>
+  <a u="6074" b="90 7A"/>
+  <a u="6075" b="90 7B"/>
+  <a u="6076" b="B6 F1"/>
+  <a u="6077" b="90 7C"/>
+  <a u="6078" b="E2 FA"/>
+  <a u="6079" b="E2 FB"/>
+  <a u="607A" b="E2 FD"/>
+  <a u="607B" b="E2 FC"/>
+  <a u="607C" b="C4 D5"/>
+  <a u="607D" b="E3 A2"/>
+  <a u="607E" b="90 7D"/>
+  <a u="607F" b="D3 C1"/>
+  <a u="6080" b="90 7E"/>
+  <a u="6081" b="90 80"/>
+  <a u="6082" b="90 81"/>
+  <a u="6083" b="E3 A7"/>
+  <a u="6084" b="C7 C4"/>
+  <a u="6085" b="90 82"/>
+  <a u="6086" b="90 83"/>
+  <a u="6087" b="90 84"/>
+  <a u="6088" b="90 85"/>
+  <a u="6089" b="CF A4"/>
+  <a u="608A" b="90 86"/>
+  <a u="608B" b="90 87"/>
+  <a u="608C" b="E3 A9"/>
+  <a u="608D" b="BA B7"/>
+  <a u="608E" b="90 88"/>
+  <a u="608F" b="90 89"/>
+  <a u="6090" b="90 8A"/>
+  <a u="6091" b="90 8B"/>
+  <a u="6092" b="E3 A8"/>
+  <a u="6093" b="90 8C"/>
+  <a u="6094" b="BB DA"/>
+  <a u="6095" b="90 8D"/>
+  <a u="6096" b="E3 A3"/>
+  <a u="6097" b="90 8E"/>
+  <a u="6098" b="90 8F"/>
+  <a u="6099" b="90 90"/>
+  <a u="609A" b="E3 A4"/>
+  <a u="609B" b="E3 AA"/>
+  <a u="609C" b="90 91"/>
+  <a u="609D" b="E3 A6"/>
+  <a u="609E" b="90 92"/>
+  <a u="609F" b="CE F2"/>
+  <a u="60A0" b="D3 C6"/>
+  <a u="60A1" b="90 93"/>
+  <a u="60A2" b="90 94"/>
+  <a u="60A3" b="BB BC"/>
+  <a u="60A4" b="90 95"/>
+  <a u="60A5" b="90 96"/>
+  <a u="60A6" b="D4 C3"/>
+  <a u="60A7" b="90 97"/>
+  <a u="60A8" b="C4 FA"/>
+  <a u="60A9" b="90 98"/>
+  <a u="60AA" b="90 99"/>
+  <a u="60AB" b="ED A8"/>
+  <a u="60AC" b="D0 FC"/>
+  <a u="60AD" b="E3 A5"/>
+  <a u="60AE" b="90 9A"/>
+  <a u="60AF" b="C3 F5"/>
+  <a u="60B0" b="90 9B"/>
+  <a u="60B1" b="E3 AD"/>
+  <a u="60B2" b="B1 AF"/>
+  <a u="60B3" b="90 9C"/>
+  <a u="60B4" b="E3 B2"/>
+  <a u="60B5" b="90 9D"/>
+  <a u="60B6" b="90 9E"/>
+  <a u="60B7" b="90 9F"/>
+  <a u="60B8" b="BC C2"/>
+  <a u="60B9" b="90 A0"/>
+  <a u="60BA" b="90 A1"/>
+  <a u="60BB" b="E3 AC"/>
+  <a u="60BC" b="B5 BF"/>
+  <a u="60BD" b="90 A2"/>
+  <a u="60BE" b="90 A3"/>
+  <a u="60BF" b="90 A4"/>
+  <a u="60C0" b="90 A5"/>
+  <a u="60C1" b="90 A6"/>
+  <a u="60C2" b="90 A7"/>
+  <a u="60C3" b="90 A8"/>
+  <a u="60C4" b="90 A9"/>
+  <a u="60C5" b="C7 E9"/>
+  <a u="60C6" b="E3 B0"/>
+  <a u="60C7" b="90 AA"/>
+  <a u="60C8" b="90 AB"/>
+  <a u="60C9" b="90 AC"/>
+  <a u="60CA" b="BE AA"/>
+  <a u="60CB" b="CD EF"/>
+  <a u="60CC" b="90 AD"/>
+  <a u="60CD" b="90 AE"/>
+  <a u="60CE" b="90 AF"/>
+  <a u="60CF" b="90 B0"/>
+  <a u="60D0" b="90 B1"/>
+  <a u="60D1" b="BB F3"/>
+  <a u="60D2" b="90 B2"/>
+  <a u="60D3" b="90 B3"/>
+  <a u="60D4" b="90 B4"/>
+  <a u="60D5" b="CC E8"/>
+  <a u="60D6" b="90 B5"/>
+  <a u="60D7" b="90 B6"/>
+  <a u="60D8" b="E3 AF"/>
+  <a u="60D9" b="90 B7"/>
+  <a u="60DA" b="E3 B1"/>
+  <a u="60DB" b="90 B8"/>
+  <a u="60DC" b="CF A7"/>
+  <a u="60DD" b="E3 AE"/>
+  <a u="60DE" b="90 B9"/>
+  <a u="60DF" b="CE A9"/>
+  <a u="60E0" b="BB DD"/>
+  <a u="60E1" b="90 BA"/>
+  <a u="60E2" b="90 BB"/>
+  <a u="60E3" b="90 BC"/>
+  <a u="60E4" b="90 BD"/>
+  <a u="60E5" b="90 BE"/>
+  <a u="60E6" b="B5 EB"/>
+  <a u="60E7" b="BE E5"/>
+  <a u="60E8" b="B2 D2"/>
+  <a u="60E9" b="B3 CD"/>
+  <a u="60EA" b="90 BF"/>
+  <a u="60EB" b="B1 B9"/>
+  <a u="60EC" b="E3 AB"/>
+  <a u="60ED" b="B2 D1"/>
+  <a u="60EE" b="B5 AC"/>
+  <a u="60EF" b="B9 DF"/>
+  <a u="60F0" b="B6 E8"/>
+  <a u="60F1" b="90 C0"/>
+  <a u="60F2" b="90 C1"/>
+  <a u="60F3" b="CF EB"/>
+  <a u="60F4" b="E3 B7"/>
+  <a u="60F5" b="90 C2"/>
+  <a u="60F6" b="BB CC"/>
+  <a u="60F7" b="90 C3"/>
+  <a u="60F8" b="90 C4"/>
+  <a u="60F9" b="C8 C7"/>
+  <a u="60FA" b="D0 CA"/>
+  <a u="60FB" b="90 C5"/>
+  <a u="60FC" b="90 C6"/>
+  <a u="60FD" b="90 C7"/>
+  <a u="60FE" b="90 C8"/>
+  <a u="60FF" b="90 C9"/>
+  <a u="6100" b="E3 B8"/>
+  <a u="6101" b="B3 EE"/>
+  <a u="6102" b="90 CA"/>
+  <a u="6103" b="90 CB"/>
+  <a u="6104" b="90 CC"/>
+  <a u="6105" b="90 CD"/>
+  <a u="6106" b="ED A9"/>
+  <a u="6107" b="90 CE"/>
+  <a u="6108" b="D3 FA"/>
+  <a u="6109" b="D3 E4"/>
+  <a u="610A" b="90 CF"/>
+  <a u="610B" b="90 D0"/>
+  <a u="610C" b="90 D1"/>
+  <a u="610D" b="ED AA"/>
+  <a u="610E" b="E3 B9"/>
+  <a u="610F" b="D2 E2"/>
+  <a u="6110" b="90 D2"/>
+  <a u="6111" b="90 D3"/>
+  <a u="6112" b="90 D4"/>
+  <a u="6113" b="90 D5"/>
+  <a u="6114" b="90 D6"/>
+  <a u="6115" b="E3 B5"/>
+  <a u="6116" b="90 D7"/>
+  <a u="6117" b="90 D8"/>
+  <a u="6118" b="90 D9"/>
+  <a u="6119" b="90 DA"/>
+  <a u="611A" b="D3 DE"/>
+  <a u="611B" b="90 DB"/>
+  <a u="611C" b="90 DC"/>
+  <a u="611D" b="90 DD"/>
+  <a u="611E" b="90 DE"/>
+  <a u="611F" b="B8 D0"/>
+  <a u="6120" b="E3 B3"/>
+  <a u="6121" b="90 DF"/>
+  <a u="6122" b="90 E0"/>
+  <a u="6123" b="E3 B6"/>
+  <a u="6124" b="B7 DF"/>
+  <a u="6125" b="90 E1"/>
+  <a u="6126" b="E3 B4"/>
+  <a u="6127" b="C0 A2"/>
+  <a u="6128" b="90 E2"/>
+  <a u="6129" b="90 E3"/>
+  <a u="612A" b="90 E4"/>
+  <a u="612B" b="E3 BA"/>
+  <a u="612C" b="90 E5"/>
+  <a u="612D" b="90 E6"/>
+  <a u="612E" b="90 E7"/>
+  <a u="612F" b="90 E8"/>
+  <a u="6130" b="90 E9"/>
+  <a u="6131" b="90 EA"/>
+  <a u="6132" b="90 EB"/>
+  <a u="6133" b="90 EC"/>
+  <a u="6134" b="90 ED"/>
+  <a u="6135" b="90 EE"/>
+  <a u="6136" b="90 EF"/>
+  <a u="6137" b="90 F0"/>
+  <a u="6138" b="90 F1"/>
+  <a u="6139" b="90 F2"/>
+  <a u="613A" b="90 F3"/>
+  <a u="613B" b="90 F4"/>
+  <a u="613C" b="90 F5"/>
+  <a u="613D" b="90 F6"/>
+  <a u="613E" b="90 F7"/>
+  <a u="613F" b="D4 B8"/>
+  <a u="6140" b="90 F8"/>
+  <a u="6141" b="90 F9"/>
+  <a u="6142" b="90 FA"/>
+  <a u="6143" b="90 FB"/>
+  <a u="6144" b="90 FC"/>
+  <a u="6145" b="90 FD"/>
+  <a u="6146" b="90 FE"/>
+  <a u="6147" b="91 40"/>
+  <a u="6148" b="B4 C8"/>
+  <a u="6149" b="91 41"/>
+  <a u="614A" b="E3 BB"/>
+  <a u="614B" b="91 42"/>
+  <a u="614C" b="BB C5"/>
+  <a u="614D" b="91 43"/>
+  <a u="614E" b="C9 F7"/>
+  <a u="614F" b="91 44"/>
+  <a u="6150" b="91 45"/>
+  <a u="6151" b="C9 E5"/>
+  <a u="6152" b="91 46"/>
+  <a u="6153" b="91 47"/>
+  <a u="6154" b="91 48"/>
+  <a u="6155" b="C4 BD"/>
+  <a u="6156" b="91 49"/>
+  <a u="6157" b="91 4A"/>
+  <a u="6158" b="91 4B"/>
+  <a u="6159" b="91 4C"/>
+  <a u="615A" b="91 4D"/>
+  <a u="615B" b="91 4E"/>
+  <a u="615C" b="91 4F"/>
+  <a u="615D" b="ED AB"/>
+  <a u="615E" b="91 50"/>
+  <a u="615F" b="91 51"/>
+  <a u="6160" b="91 52"/>
+  <a u="6161" b="91 53"/>
+  <a u="6162" b="C2 FD"/>
+  <a u="6163" b="91 54"/>
+  <a u="6164" b="91 55"/>
+  <a u="6165" b="91 56"/>
+  <a u="6166" b="91 57"/>
+  <a u="6167" b="BB DB"/>
+  <a u="6168" b="BF AE"/>
+  <a u="6169" b="91 58"/>
+  <a u="616A" b="91 59"/>
+  <a u="616B" b="91 5A"/>
+  <a u="616C" b="91 5B"/>
+  <a u="616D" b="91 5C"/>
+  <a u="616E" b="91 5D"/>
+  <a u="616F" b="91 5E"/>
+  <a u="6170" b="CE BF"/>
+  <a u="6171" b="91 5F"/>
+  <a u="6172" b="91 60"/>
+  <a u="6173" b="91 61"/>
+  <a u="6174" b="91 62"/>
+  <a u="6175" b="E3 BC"/>
+  <a u="6176" b="91 63"/>
+  <a u="6177" b="BF B6"/>
+  <a u="6178" b="91 64"/>
+  <a u="6179" b="91 65"/>
+  <a u="617A" b="91 66"/>
+  <a u="617B" b="91 67"/>
+  <a u="617C" b="91 68"/>
+  <a u="617D" b="91 69"/>
+  <a u="617E" b="91 6A"/>
+  <a u="617F" b="91 6B"/>
+  <a u="6180" b="91 6C"/>
+  <a u="6181" b="91 6D"/>
+  <a u="6182" b="91 6E"/>
+  <a u="6183" b="91 6F"/>
+  <a u="6184" b="91 70"/>
+  <a u="6185" b="91 71"/>
+  <a u="6186" b="91 72"/>
+  <a u="6187" b="91 73"/>
+  <a u="6188" b="91 74"/>
+  <a u="6189" b="91 75"/>
+  <a u="618A" b="91 76"/>
+  <a u="618B" b="B1 EF"/>
+  <a u="618C" b="91 77"/>
+  <a u="618D" b="91 78"/>
+  <a u="618E" b="D4 F7"/>
+  <a u="618F" b="91 79"/>
+  <a u="6190" b="91 7A"/>
+  <a u="6191" b="91 7B"/>
+  <a u="6192" b="91 7C"/>
+  <a u="6193" b="91 7D"/>
+  <a u="6194" b="E3 BE"/>
+  <a u="6195" b="91 7E"/>
+  <a u="6196" b="91 80"/>
+  <a u="6197" b="91 81"/>
+  <a u="6198" b="91 82"/>
+  <a u="6199" b="91 83"/>
+  <a u="619A" b="91 84"/>
+  <a u="619B" b="91 85"/>
+  <a u="619C" b="91 86"/>
+  <a u="619D" b="ED AD"/>
+  <a u="619E" b="91 87"/>
+  <a u="619F" b="91 88"/>
+  <a u="61A0" b="91 89"/>
+  <a u="61A1" b="91 8A"/>
+  <a u="61A2" b="91 8B"/>
+  <a u="61A3" b="91 8C"/>
+  <a u="61A4" b="91 8D"/>
+  <a u="61A5" b="91 8E"/>
+  <a u="61A6" b="91 8F"/>
+  <a u="61A7" b="E3 BF"/>
+  <a u="61A8" b="BA A9"/>
+  <a u="61A9" b="ED AC"/>
+  <a u="61AA" b="91 90"/>
+  <a u="61AB" b="91 91"/>
+  <a u="61AC" b="E3 BD"/>
+  <a u="61AD" b="91 92"/>
+  <a u="61AE" b="91 93"/>
+  <a u="61AF" b="91 94"/>
+  <a u="61B0" b="91 95"/>
+  <a u="61B1" b="91 96"/>
+  <a u="61B2" b="91 97"/>
+  <a u="61B3" b="91 98"/>
+  <a u="61B4" b="91 99"/>
+  <a u="61B5" b="91 9A"/>
+  <a u="61B6" b="91 9B"/>
+  <a u="61B7" b="E3 C0"/>
+  <a u="61B8" b="91 9C"/>
+  <a u="61B9" b="91 9D"/>
+  <a u="61BA" b="91 9E"/>
+  <a u="61BB" b="91 9F"/>
+  <a u="61BC" b="91 A0"/>
+  <a u="61BD" b="91 A1"/>
+  <a u="61BE" b="BA B6"/>
+  <a u="61BF" b="91 A2"/>
+  <a u="61C0" b="91 A3"/>
+  <a u="61C1" b="91 A4"/>
+  <a u="61C2" b="B6 AE"/>
+  <a u="61C3" b="91 A5"/>
+  <a u="61C4" b="91 A6"/>
+  <a u="61C5" b="91 A7"/>
+  <a u="61C6" b="91 A8"/>
+  <a u="61C7" b="91 A9"/>
+  <a u="61C8" b="D0 B8"/>
+  <a u="61C9" b="91 AA"/>
+  <a u="61CA" b="B0 C3"/>
+  <a u="61CB" b="ED AE"/>
+  <a u="61CC" b="91 AB"/>
+  <a u="61CD" b="91 AC"/>
+  <a u="61CE" b="91 AD"/>
+  <a u="61CF" b="91 AE"/>
+  <a u="61D0" b="91 AF"/>
+  <a u="61D1" b="ED AF"/>
+  <a u="61D2" b="C0 C1"/>
+  <a u="61D3" b="91 B0"/>
+  <a u="61D4" b="E3 C1"/>
+  <a u="61D5" b="91 B1"/>
+  <a u="61D6" b="91 B2"/>
+  <a u="61D7" b="91 B3"/>
+  <a u="61D8" b="91 B4"/>
+  <a u="61D9" b="91 B5"/>
+  <a u="61DA" b="91 B6"/>
+  <a u="61DB" b="91 B7"/>
+  <a u="61DC" b="91 B8"/>
+  <a u="61DD" b="91 B9"/>
+  <a u="61DE" b="91 BA"/>
+  <a u="61DF" b="91 BB"/>
+  <a u="61E0" b="91 BC"/>
+  <a u="61E1" b="91 BD"/>
+  <a u="61E2" b="91 BE"/>
+  <a u="61E3" b="91 BF"/>
+  <a u="61E4" b="91 C0"/>
+  <a u="61E5" b="91 C1"/>
+  <a u="61E6" b="C5 B3"/>
+  <a u="61E7" b="91 C2"/>
+  <a u="61E8" b="91 C3"/>
+  <a u="61E9" b="91 C4"/>
+  <a u="61EA" b="91 C5"/>
+  <a u="61EB" b="91 C6"/>
+  <a u="61EC" b="91 C7"/>
+  <a u="61ED" b="91 C8"/>
+  <a u="61EE" b="91 C9"/>
+  <a u="61EF" b="91 CA"/>
+  <a u="61F0" b="91 CB"/>
+  <a u="61F1" b="91 CC"/>
+  <a u="61F2" b="91 CD"/>
+  <a u="61F3" b="91 CE"/>
+  <a u="61F4" b="91 CF"/>
+  <a u="61F5" b="E3 C2"/>
+  <a u="61F6" b="91 D0"/>
+  <a u="61F7" b="91 D1"/>
+  <a u="61F8" b="91 D2"/>
+  <a u="61F9" b="91 D3"/>
+  <a u="61FA" b="91 D4"/>
+  <a u="61FB" b="91 D5"/>
+  <a u="61FC" b="91 D6"/>
+  <a u="61FD" b="91 D7"/>
+  <a u="61FE" b="91 D8"/>
+  <a u="61FF" b="DC B2"/>
+  <a u="6200" b="91 D9"/>
+  <a u="6201" b="91 DA"/>
+  <a u="6202" b="91 DB"/>
+  <a u="6203" b="91 DC"/>
+  <a u="6204" b="91 DD"/>
+  <a u="6205" b="91 DE"/>
+  <a u="6206" b="ED B0"/>
+  <a u="6207" b="91 DF"/>
+  <a u="6208" b="B8 EA"/>
+  <a u="6209" b="91 E0"/>
+  <a u="620A" b="CE EC"/>
+  <a u="620B" b="EA A7"/>
+  <a u="620C" b="D0 E7"/>
+  <a u="620D" b="CA F9"/>
+  <a u="620E" b="C8 D6"/>
+  <a u="620F" b="CF B7"/>
+  <a u="6210" b="B3 C9"/>
+  <a u="6211" b="CE D2"/>
+  <a u="6212" b="BD E4"/>
+  <a u="6213" b="91 E1"/>
+  <a u="6214" b="91 E2"/>
+  <a u="6215" b="E3 DE"/>
+  <a u="6216" b="BB F2"/>
+  <a u="6217" b="EA A8"/>
+  <a u="6218" b="D5 BD"/>
+  <a u="6219" b="91 E3"/>
+  <a u="621A" b="C6 DD"/>
+  <a u="621B" b="EA A9"/>
+  <a u="621C" b="91 E4"/>
+  <a u="621D" b="91 E5"/>
+  <a u="621E" b="91 E6"/>
+  <a u="621F" b="EA AA"/>
+  <a u="6220" b="91 E7"/>
+  <a u="6221" b="EA AC"/>
+  <a u="6222" b="EA AB"/>
+  <a u="6223" b="91 E8"/>
+  <a u="6224" b="EA AE"/>
+  <a u="6225" b="EA AD"/>
+  <a u="6226" b="91 E9"/>
+  <a u="6227" b="91 EA"/>
+  <a u="6228" b="91 EB"/>
+  <a u="6229" b="91 EC"/>
+  <a u="622A" b="BD D8"/>
+  <a u="622B" b="91 ED"/>
+  <a u="622C" b="EA AF"/>
+  <a u="622D" b="91 EE"/>
+  <a u="622E" b="C2 BE"/>
+  <a u="622F" b="91 EF"/>
+  <a u="6230" b="91 F0"/>
+  <a u="6231" b="91 F1"/>
+  <a u="6232" b="91 F2"/>
+  <a u="6233" b="B4 C1"/>
+  <a u="6234" b="B4 F7"/>
+  <a u="6235" b="91 F3"/>
+  <a u="6236" b="91 F4"/>
+  <a u="6237" b="BB A7"/>
+  <a u="6238" b="91 F5"/>
+  <a u="6239" b="91 F6"/>
+  <a u="623A" b="91 F7"/>
+  <a u="623B" b="91 F8"/>
+  <a u="623C" b="91 F9"/>
+  <a u="623D" b="EC E6"/>
+  <a u="623E" b="EC E5"/>
+  <a u="623F" b="B7 BF"/>
+  <a u="6240" b="CB F9"/>
+  <a u="6241" b="B1 E2"/>
+  <a u="6242" b="91 FA"/>
+  <a u="6243" b="EC E7"/>
+  <a u="6244" b="91 FB"/>
+  <a u="6245" b="91 FC"/>
+  <a u="6246" b="91 FD"/>
+  <a u="6247" b="C9 C8"/>
+  <a u="6248" b="EC E8"/>
+  <a u="6249" b="EC E9"/>
+  <a u="624A" b="91 FE"/>
+  <a u="624B" b="CA D6"/>
+  <a u="624C" b="DE D0"/>
+  <a u="624D" b="B2 C5"/>
+  <a u="624E" b="D4 FA"/>
+  <a u="624F" b="92 40"/>
+  <a u="6250" b="92 41"/>
+  <a u="6251" b="C6 CB"/>
+  <a u="6252" b="B0 C7"/>
+  <a u="6253" b="B4 F2"/>
+  <a u="6254" b="C8 D3"/>
+  <a u="6255" b="92 42"/>
+  <a u="6256" b="92 43"/>
+  <a u="6257" b="92 44"/>
+  <a u="6258" b="CD D0"/>
+  <a u="6259" b="92 45"/>
+  <a u="625A" b="92 46"/>
+  <a u="625B" b="BF B8"/>
+  <a u="625C" b="92 47"/>
+  <a u="625D" b="92 48"/>
+  <a u="625E" b="92 49"/>
+  <a u="625F" b="92 4A"/>
+  <a u="6260" b="92 4B"/>
+  <a u="6261" b="92 4C"/>
+  <a u="6262" b="92 4D"/>
+  <a u="6263" b="BF DB"/>
+  <a u="6264" b="92 4E"/>
+  <a u="6265" b="92 4F"/>
+  <a u="6266" b="C7 A4"/>
+  <a u="6267" b="D6 B4"/>
+  <a u="6268" b="92 50"/>
+  <a u="6269" b="C0 A9"/>
+  <a u="626A" b="DE D1"/>
+  <a u="626B" b="C9 A8"/>
+  <a u="626C" b="D1 EF"/>
+  <a u="626D" b="C5 A4"/>
+  <a u="626E" b="B0 E7"/>
+  <a u="626F" b="B3 B6"/>
+  <a u="6270" b="C8 C5"/>
+  <a u="6271" b="92 51"/>
+  <a u="6272" b="92 52"/>
+  <a u="6273" b="B0 E2"/>
+  <a u="6274" b="92 53"/>
+  <a u="6275" b="92 54"/>
+  <a u="6276" b="B7 F6"/>
+  <a u="6277" b="92 55"/>
+  <a u="6278" b="92 56"/>
+  <a u="6279" b="C5 FA"/>
+  <a u="627A" b="92 57"/>
+  <a u="627B" b="92 58"/>
+  <a u="627C" b="B6 F3"/>
+  <a u="627D" b="92 59"/>
+  <a u="627E" b="D5 D2"/>
+  <a u="627F" b="B3 D0"/>
+  <a u="6280" b="BC BC"/>
+  <a u="6281" b="92 5A"/>
+  <a u="6282" b="92 5B"/>
+  <a u="6283" b="92 5C"/>
+  <a u="6284" b="B3 AD"/>
+  <a u="6285" b="92 5D"/>
+  <a u="6286" b="92 5E"/>
+  <a u="6287" b="92 5F"/>
+  <a u="6288" b="92 60"/>
+  <a u="6289" b="BE F1"/>
+  <a u="628A" b="B0 D1"/>
+  <a u="628B" b="92 61"/>
+  <a u="628C" b="92 62"/>
+  <a u="628D" b="92 63"/>
+  <a u="628E" b="92 64"/>
+  <a u="628F" b="92 65"/>
+  <a u="6290" b="92 66"/>
+  <a u="6291" b="D2 D6"/>
+  <a u="6292" b="CA E3"/>
+  <a u="6293" b="D7 A5"/>
+  <a u="6294" b="92 67"/>
+  <a u="6295" b="CD B6"/>
+  <a u="6296" b="B6 B6"/>
+  <a u="6297" b="BF B9"/>
+  <a u="6298" b="D5 DB"/>
+  <a u="6299" b="92 68"/>
+  <a u="629A" b="B8 A7"/>
+  <a u="629B" b="C5 D7"/>
+  <a u="629C" b="92 69"/>
+  <a u="629D" b="92 6A"/>
+  <a u="629E" b="92 6B"/>
+  <a u="629F" b="DE D2"/>
+  <a u="62A0" b="BF D9"/>
+  <a u="62A1" b="C2 D5"/>
+  <a u="62A2" b="C7 C0"/>
+  <a u="62A3" b="92 6C"/>
+  <a u="62A4" b="BB A4"/>
+  <a u="62A5" b="B1 A8"/>
+  <a u="62A6" b="92 6D"/>
+  <a u="62A7" b="92 6E"/>
+  <a u="62A8" b="C5 EA"/>
+  <a u="62A9" b="92 6F"/>
+  <a u="62AA" b="92 70"/>
+  <a u="62AB" b="C5 FB"/>
+  <a u="62AC" b="CC A7"/>
+  <a u="62AD" b="92 71"/>
+  <a u="62AE" b="92 72"/>
+  <a u="62AF" b="92 73"/>
+  <a u="62B0" b="92 74"/>
+  <a u="62B1" b="B1 A7"/>
+  <a u="62B2" b="92 75"/>
+  <a u="62B3" b="92 76"/>
+  <a u="62B4" b="92 77"/>
+  <a u="62B5" b="B5 D6"/>
+  <a u="62B6" b="92 78"/>
+  <a u="62B7" b="92 79"/>
+  <a u="62B8" b="92 7A"/>
+  <a u="62B9" b="C4 A8"/>
+  <a u="62BA" b="92 7B"/>
+  <a u="62BB" b="DE D3"/>
+  <a u="62BC" b="D1 BA"/>
+  <a u="62BD" b="B3 E9"/>
+  <a u="62BE" b="92 7C"/>
+  <a u="62BF" b="C3 F2"/>
+  <a u="62C0" b="92 7D"/>
+  <a u="62C1" b="92 7E"/>
+  <a u="62C2" b="B7 F7"/>
+  <a u="62C3" b="92 80"/>
+  <a u="62C4" b="D6 F4"/>
+  <a u="62C5" b="B5 A3"/>
+  <a u="62C6" b="B2 F0"/>
+  <a u="62C7" b="C4 B4"/>
+  <a u="62C8" b="C4 E9"/>
+  <a u="62C9" b="C0 AD"/>
+  <a u="62CA" b="DE D4"/>
+  <a u="62CB" b="92 81"/>
+  <a u="62CC" b="B0 E8"/>
+  <a u="62CD" b="C5 C4"/>
+  <a u="62CE" b="C1 E0"/>
+  <a u="62CF" b="92 82"/>
+  <a u="62D0" b="B9 D5"/>
+  <a u="62D1" b="92 83"/>
+  <a u="62D2" b="BE DC"/>
+  <a u="62D3" b="CD D8"/>
+  <a u="62D4" b="B0 CE"/>
+  <a u="62D5" b="92 84"/>
+  <a u="62D6" b="CD CF"/>
+  <a u="62D7" b="DE D6"/>
+  <a u="62D8" b="BE D0"/>
+  <a u="62D9" b="D7 BE"/>
+  <a u="62DA" b="DE D5"/>
+  <a u="62DB" b="D5 D0"/>
+  <a u="62DC" b="B0 DD"/>
+  <a u="62DD" b="92 85"/>
+  <a u="62DE" b="92 86"/>
+  <a u="62DF" b="C4 E2"/>
+  <a u="62E0" b="92 87"/>
+  <a u="62E1" b="92 88"/>
+  <a u="62E2" b="C2 A3"/>
+  <a u="62E3" b="BC F0"/>
+  <a u="62E4" b="92 89"/>
+  <a u="62E5" b="D3 B5"/>
+  <a u="62E6" b="C0 B9"/>
+  <a u="62E7" b="C5 A1"/>
+  <a u="62E8" b="B2 A6"/>
+  <a u="62E9" b="D4 F1"/>
+  <a u="62EA" b="92 8A"/>
+  <a u="62EB" b="92 8B"/>
+  <a u="62EC" b="C0 A8"/>
+  <a u="62ED" b="CA C3"/>
+  <a u="62EE" b="DE D7"/>
+  <a u="62EF" b="D5 FC"/>
+  <a u="62F0" b="92 8C"/>
+  <a u="62F1" b="B9 B0"/>
+  <a u="62F2" b="92 8D"/>
+  <a u="62F3" b="C8 AD"/>
+  <a u="62F4" b="CB A9"/>
+  <a u="62F5" b="92 8E"/>
+  <a u="62F6" b="DE D9"/>
+  <a u="62F7" b="BF BD"/>
+  <a u="62F8" b="92 8F"/>
+  <a u="62F9" b="92 90"/>
+  <a u="62FA" b="92 91"/>
+  <a u="62FB" b="92 92"/>
+  <a u="62FC" b="C6 B4"/>
+  <a u="62FD" b="D7 A7"/>
+  <a u="62FE" b="CA B0"/>
+  <a u="62FF" b="C4 C3"/>
+  <a u="6300" b="92 93"/>
+  <a u="6301" b="B3 D6"/>
+  <a u="6302" b="B9 D2"/>
+  <a u="6303" b="92 94"/>
+  <a u="6304" b="92 95"/>
+  <a u="6305" b="92 96"/>
+  <a u="6306" b="92 97"/>
+  <a u="6307" b="D6 B8"/>
+  <a u="6308" b="EA FC"/>
+  <a u="6309" b="B0 B4"/>
+  <a u="630A" b="92 98"/>
+  <a u="630B" b="92 99"/>
+  <a u="630C" b="92 9A"/>
+  <a u="630D" b="92 9B"/>
+  <a u="630E" b="BF E6"/>
+  <a u="630F" b="92 9C"/>
+  <a u="6310" b="92 9D"/>
+  <a u="6311" b="CC F4"/>
+  <a u="6312" b="92 9E"/>
+  <a u="6313" b="92 9F"/>
+  <a u="6314" b="92 A0"/>
+  <a u="6315" b="92 A1"/>
+  <a u="6316" b="CD DA"/>
+  <a u="6317" b="92 A2"/>
+  <a u="6318" b="92 A3"/>
+  <a u="6319" b="92 A4"/>
+  <a u="631A" b="D6 BF"/>
+  <a u="631B" b="C2 CE"/>
+  <a u="631C" b="92 A5"/>
+  <a u="631D" b="CE CE"/>
+  <a u="631E" b="CC A2"/>
+  <a u="631F" b="D0 AE"/>
+  <a u="6320" b="C4 D3"/>
+  <a u="6321" b="B5 B2"/>
+  <a u="6322" b="DE D8"/>
+  <a u="6323" b="D5 F5"/>
+  <a u="6324" b="BC B7"/>
+  <a u="6325" b="BB D3"/>
+  <a u="6326" b="92 A6"/>
+  <a u="6327" b="92 A7"/>
+  <a u="6328" b="B0 A4"/>
+  <a u="6329" b="92 A8"/>
+  <a u="632A" b="C5 B2"/>
+  <a u="632B" b="B4 EC"/>
+  <a u="632C" b="92 A9"/>
+  <a u="632D" b="92 AA"/>
+  <a u="632E" b="92 AB"/>
+  <a u="632F" b="D5 F1"/>
+  <a u="6330" b="92 AC"/>
+  <a u="6331" b="92 AD"/>
+  <a u="6332" b="EA FD"/>
+  <a u="6333" b="92 AE"/>
+  <a u="6334" b="92 AF"/>
+  <a u="6335" b="92 B0"/>
+  <a u="6336" b="92 B1"/>
+  <a u="6337" b="92 B2"/>
+  <a u="6338" b="92 B3"/>
+  <a u="6339" b="DE DA"/>
+  <a u="633A" b="CD A6"/>
+  <a u="633B" b="92 B4"/>
+  <a u="633C" b="92 B5"/>
+  <a u="633D" b="CD EC"/>
+  <a u="633E" b="92 B6"/>
+  <a u="633F" b="92 B7"/>
+  <a u="6340" b="92 B8"/>
+  <a u="6341" b="92 B9"/>
+  <a u="6342" b="CE E6"/>
+  <a u="6343" b="DE DC"/>
+  <a u="6344" b="92 BA"/>
+  <a u="6345" b="CD B1"/>
+  <a u="6346" b="C0 A6"/>
+  <a u="6347" b="92 BB"/>
+  <a u="6348" b="92 BC"/>
+  <a u="6349" b="D7 BD"/>
+  <a u="634A" b="92 BD"/>
+  <a u="634B" b="DE DB"/>
+  <a u="634C" b="B0 C6"/>
+  <a u="634D" b="BA B4"/>
+  <a u="634E" b="C9 D3"/>
+  <a u="634F" b="C4 F3"/>
+  <a u="6350" b="BE E8"/>
+  <a u="6351" b="92 BE"/>
+  <a u="6352" b="92 BF"/>
+  <a u="6353" b="92 C0"/>
+  <a u="6354" b="92 C1"/>
+  <a u="6355" b="B2 B6"/>
+  <a u="6356" b="92 C2"/>
+  <a u="6357" b="92 C3"/>
+  <a u="6358" b="92 C4"/>
+  <a u="6359" b="92 C5"/>
+  <a u="635A" b="92 C6"/>
+  <a u="635B" b="92 C7"/>
+  <a u="635C" b="92 C8"/>
+  <a u="635D" b="92 C9"/>
+  <a u="635E" b="C0 CC"/>
+  <a u="635F" b="CB F0"/>
+  <a u="6360" b="92 CA"/>
+  <a u="6361" b="BC F1"/>
+  <a u="6362" b="BB BB"/>
+  <a u="6363" b="B5 B7"/>
+  <a u="6364" b="92 CB"/>
+  <a u="6365" b="92 CC"/>
+  <a u="6366" b="92 CD"/>
+  <a u="6367" b="C5 F5"/>
+  <a u="6368" b="92 CE"/>
+  <a u="6369" b="DE E6"/>
+  <a u="636A" b="92 CF"/>
+  <a u="636B" b="92 D0"/>
+  <a u="636C" b="92 D1"/>
+  <a u="636D" b="DE E3"/>
+  <a u="636E" b="BE DD"/>
+  <a u="636F" b="92 D2"/>
+  <a u="6370" b="92 D3"/>
+  <a u="6371" b="DE DF"/>
+  <a u="6372" b="92 D4"/>
+  <a u="6373" b="92 D5"/>
+  <a u="6374" b="92 D6"/>
+  <a u="6375" b="92 D7"/>
+  <a u="6376" b="B4 B7"/>
+  <a u="6377" b="BD DD"/>
+  <a u="6378" b="92 D8"/>
+  <a u="6379" b="92 D9"/>
+  <a u="637A" b="DE E0"/>
+  <a u="637B" b="C4 ED"/>
+  <a u="637C" b="92 DA"/>
+  <a u="637D" b="92 DB"/>
+  <a u="637E" b="92 DC"/>
+  <a u="637F" b="92 DD"/>
+  <a u="6380" b="CF C6"/>
+  <a u="6381" b="92 DE"/>
+  <a u="6382" b="B5 E0"/>
+  <a u="6383" b="92 DF"/>
+  <a u="6384" b="92 E0"/>
+  <a u="6385" b="92 E1"/>
+  <a u="6386" b="92 E2"/>
+  <a u="6387" b="B6 DE"/>
+  <a u="6388" b="CA DA"/>
+  <a u="6389" b="B5 F4"/>
+  <a u="638A" b="DE E5"/>
+  <a u="638B" b="92 E3"/>
+  <a u="638C" b="D5 C6"/>
+  <a u="638D" b="92 E4"/>
+  <a u="638E" b="DE E1"/>
+  <a u="638F" b="CC CD"/>
+  <a u="6390" b="C6 FE"/>
+  <a u="6391" b="92 E5"/>
+  <a u="6392" b="C5 C5"/>
+  <a u="6393" b="92 E6"/>
+  <a u="6394" b="92 E7"/>
+  <a u="6395" b="92 E8"/>
+  <a u="6396" b="D2 B4"/>
+  <a u="6397" b="92 E9"/>
+  <a u="6398" b="BE F2"/>
+  <a u="6399" b="92 EA"/>
+  <a u="639A" b="92 EB"/>
+  <a u="639B" b="92 EC"/>
+  <a u="639C" b="92 ED"/>
+  <a u="639D" b="92 EE"/>
+  <a u="639E" b="92 EF"/>
+  <a u="639F" b="92 F0"/>
+  <a u="63A0" b="C2 D3"/>
+  <a u="63A1" b="92 F1"/>
+  <a u="63A2" b="CC BD"/>
+  <a u="63A3" b="B3 B8"/>
+  <a u="63A4" b="92 F2"/>
+  <a u="63A5" b="BD D3"/>
+  <a u="63A6" b="92 F3"/>
+  <a u="63A7" b="BF D8"/>
+  <a u="63A8" b="CD C6"/>
+  <a u="63A9" b="D1 DA"/>
+  <a u="63AA" b="B4 EB"/>
+  <a u="63AB" b="92 F4"/>
+  <a u="63AC" b="DE E4"/>
+  <a u="63AD" b="DE DD"/>
+  <a u="63AE" b="DE E7"/>
+  <a u="63AF" b="92 F5"/>
+  <a u="63B0" b="EA FE"/>
+  <a u="63B1" b="92 F6"/>
+  <a u="63B2" b="92 F7"/>
+  <a u="63B3" b="C2 B0"/>
+  <a u="63B4" b="DE E2"/>
+  <a u="63B5" b="92 F8"/>
+  <a u="63B6" b="92 F9"/>
+  <a u="63B7" b="D6 C0"/>
+  <a u="63B8" b="B5 A7"/>
+  <a u="63B9" b="92 FA"/>
+  <a u="63BA" b="B2 F4"/>
+  <a u="63BB" b="92 FB"/>
+  <a u="63BC" b="DE E8"/>
+  <a u="63BD" b="92 FC"/>
+  <a u="63BE" b="DE F2"/>
+  <a u="63BF" b="92 FD"/>
+  <a u="63C0" b="92 FE"/>
+  <a u="63C1" b="93 40"/>
+  <a u="63C2" b="93 41"/>
+  <a u="63C3" b="93 42"/>
+  <a u="63C4" b="DE ED"/>
+  <a u="63C5" b="93 43"/>
+  <a u="63C6" b="DE F1"/>
+  <a u="63C7" b="93 44"/>
+  <a u="63C8" b="93 45"/>
+  <a u="63C9" b="C8 E0"/>
+  <a u="63CA" b="93 46"/>
+  <a u="63CB" b="93 47"/>
+  <a u="63CC" b="93 48"/>
+  <a u="63CD" b="D7 E1"/>
+  <a u="63CE" b="DE EF"/>
+  <a u="63CF" b="C3 E8"/>
+  <a u="63D0" b="CC E1"/>
+  <a u="63D1" b="93 49"/>
+  <a u="63D2" b="B2 E5"/>
+  <a u="63D3" b="93 4A"/>
+  <a u="63D4" b="93 4B"/>
+  <a u="63D5" b="93 4C"/>
+  <a u="63D6" b="D2 BE"/>
+  <a u="63D7" b="93 4D"/>
+  <a u="63D8" b="93 4E"/>
+  <a u="63D9" b="93 4F"/>
+  <a u="63DA" b="93 50"/>
+  <a u="63DB" b="93 51"/>
+  <a u="63DC" b="93 52"/>
+  <a u="63DD" b="93 53"/>
+  <a u="63DE" b="DE EE"/>
+  <a u="63DF" b="93 54"/>
+  <a u="63E0" b="DE EB"/>
+  <a u="63E1" b="CE D5"/>
+  <a u="63E2" b="93 55"/>
+  <a u="63E3" b="B4 A7"/>
+  <a u="63E4" b="93 56"/>
+  <a u="63E5" b="93 57"/>
+  <a u="63E6" b="93 58"/>
+  <a u="63E7" b="93 59"/>
+  <a u="63E8" b="93 5A"/>
+  <a u="63E9" b="BF AB"/>
+  <a u="63EA" b="BE BE"/>
+  <a u="63EB" b="93 5B"/>
+  <a u="63EC" b="93 5C"/>
+  <a u="63ED" b="BD D2"/>
+  <a u="63EE" b="93 5D"/>
+  <a u="63EF" b="93 5E"/>
+  <a u="63F0" b="93 5F"/>
+  <a u="63F1" b="93 60"/>
+  <a u="63F2" b="DE E9"/>
+  <a u="63F3" b="93 61"/>
+  <a u="63F4" b="D4 AE"/>
+  <a u="63F5" b="93 62"/>
+  <a u="63F6" b="DE DE"/>
+  <a u="63F7" b="93 63"/>
+  <a u="63F8" b="DE EA"/>
+  <a u="63F9" b="93 64"/>
+  <a u="63FA" b="93 65"/>
+  <a u="63FB" b="93 66"/>
+  <a u="63FC" b="93 67"/>
+  <a u="63FD" b="C0 BF"/>
+  <a u="63FE" b="93 68"/>
+  <a u="63FF" b="DE EC"/>
+  <a u="6400" b="B2 F3"/>
+  <a u="6401" b="B8 E9"/>
+  <a u="6402" b="C2 A7"/>
+  <a u="6403" b="93 69"/>
+  <a u="6404" b="93 6A"/>
+  <a u="6405" b="BD C1"/>
+  <a u="6406" b="93 6B"/>
+  <a u="6407" b="93 6C"/>
+  <a u="6408" b="93 6D"/>
+  <a u="6409" b="93 6E"/>
+  <a u="640A" b="93 6F"/>
+  <a u="640B" b="DE F5"/>
+  <a u="640C" b="DE F8"/>
+  <a u="640D" b="93 70"/>
+  <a u="640E" b="93 71"/>
+  <a u="640F" b="B2 AB"/>
+  <a u="6410" b="B4 A4"/>
+  <a u="6411" b="93 72"/>
+  <a u="6412" b="93 73"/>
+  <a u="6413" b="B4 EA"/>
+  <a u="6414" b="C9 A6"/>
+  <a u="6415" b="93 74"/>
+  <a u="6416" b="93 75"/>
+  <a u="6417" b="93 76"/>
+  <a u="6418" b="93 77"/>
+  <a u="6419" b="93 78"/>
+  <a u="641A" b="93 79"/>
+  <a u="641B" b="DE F6"/>
+  <a u="641C" b="CB D1"/>
+  <a u="641D" b="93 7A"/>
+  <a u="641E" b="B8 E3"/>
+  <a u="641F" b="93 7B"/>
+  <a u="6420" b="DE F7"/>
+  <a u="6421" b="DE FA"/>
+  <a u="6422" b="93 7C"/>
+  <a u="6423" b="93 7D"/>
+  <a u="6424" b="93 7E"/>
+  <a u="6425" b="93 80"/>
+  <a u="6426" b="DE F9"/>
+  <a u="6427" b="93 81"/>
+  <a u="6428" b="93 82"/>
+  <a u="6429" b="93 83"/>
+  <a u="642A" b="CC C2"/>
+  <a u="642B" b="93 84"/>
+  <a u="642C" b="B0 E1"/>
+  <a u="642D" b="B4 EE"/>
+  <a u="642E" b="93 85"/>
+  <a u="642F" b="93 86"/>
+  <a u="6430" b="93 87"/>
+  <a u="6431" b="93 88"/>
+  <a u="6432" b="93 89"/>
+  <a u="6433" b="93 8A"/>
+  <a u="6434" b="E5 BA"/>
+  <a u="6435" b="93 8B"/>
+  <a u="6436" b="93 8C"/>
+  <a u="6437" b="93 8D"/>
+  <a u="6438" b="93 8E"/>
+  <a u="6439" b="93 8F"/>
+  <a u="643A" b="D0 AF"/>
+  <a u="643B" b="93 90"/>
+  <a u="643C" b="93 91"/>
+  <a u="643D" b="B2 EB"/>
+  <a u="643E" b="93 92"/>
+  <a u="643F" b="EB A1"/>
+  <a u="6440" b="93 93"/>
+  <a u="6441" b="DE F4"/>
+  <a u="6442" b="93 94"/>
+  <a u="6443" b="93 95"/>
+  <a u="6444" b="C9 E3"/>
+  <a u="6445" b="DE F3"/>
+  <a u="6446" b="B0 DA"/>
+  <a u="6447" b="D2 A1"/>
+  <a u="6448" b="B1 F7"/>
+  <a u="6449" b="93 96"/>
+  <a u="644A" b="CC AF"/>
+  <a u="644B" b="93 97"/>
+  <a u="644C" b="93 98"/>
+  <a u="644D" b="93 99"/>
+  <a u="644E" b="93 9A"/>
+  <a u="644F" b="93 9B"/>
+  <a u="6450" b="93 9C"/>
+  <a u="6451" b="93 9D"/>
+  <a u="6452" b="DE F0"/>
+  <a u="6453" b="93 9E"/>
+  <a u="6454" b="CB A4"/>
+  <a u="6455" b="93 9F"/>
+  <a u="6456" b="93 A0"/>
+  <a u="6457" b="93 A1"/>
+  <a u="6458" b="D5 AA"/>
+  <a u="6459" b="93 A2"/>
+  <a u="645A" b="93 A3"/>
+  <a u="645B" b="93 A4"/>
+  <a u="645C" b="93 A5"/>
+  <a u="645D" b="93 A6"/>
+  <a u="645E" b="DE FB"/>
+  <a u="645F" b="93 A7"/>
+  <a u="6460" b="93 A8"/>
+  <a u="6461" b="93 A9"/>
+  <a u="6462" b="93 AA"/>
+  <a u="6463" b="93 AB"/>
+  <a u="6464" b="93 AC"/>
+  <a u="6465" b="93 AD"/>
+  <a u="6466" b="93 AE"/>
+  <a u="6467" b="B4 DD"/>
+  <a u="6468" b="93 AF"/>
+  <a u="6469" b="C4 A6"/>
+  <a u="646A" b="93 B0"/>
+  <a u="646B" b="93 B1"/>
+  <a u="646C" b="93 B2"/>
+  <a u="646D" b="DE FD"/>
+  <a u="646E" b="93 B3"/>
+  <a u="646F" b="93 B4"/>
+  <a u="6470" b="93 B5"/>
+  <a u="6471" b="93 B6"/>
+  <a u="6472" b="93 B7"/>
+  <a u="6473" b="93 B8"/>
+  <a u="6474" b="93 B9"/>
+  <a u="6475" b="93 BA"/>
+  <a u="6476" b="93 BB"/>
+  <a u="6477" b="93 BC"/>
+  <a u="6478" b="C3 FE"/>
+  <a u="6479" b="C4 A1"/>
+  <a u="647A" b="DF A1"/>
+  <a u="647B" b="93 BD"/>
+  <a u="647C" b="93 BE"/>
+  <a u="647D" b="93 BF"/>
+  <a u="647E" b="93 C0"/>
+  <a u="647F" b="93 C1"/>
+  <a u="6480" b="93 C2"/>
+  <a u="6481" b="93 C3"/>
+  <a u="6482" b="C1 CC"/>
+  <a u="6483" b="93 C4"/>
+  <a u="6484" b="DE FC"/>
+  <a u="6485" b="BE EF"/>
+  <a u="6486" b="93 C5"/>
+  <a u="6487" b="C6 B2"/>
+  <a u="6488" b="93 C6"/>
+  <a u="6489" b="93 C7"/>
+  <a u="648A" b="93 C8"/>
+  <a u="648B" b="93 C9"/>
+  <a u="648C" b="93 CA"/>
+  <a u="648D" b="93 CB"/>
+  <a u="648E" b="93 CC"/>
+  <a u="648F" b="93 CD"/>
+  <a u="6490" b="93 CE"/>
+  <a u="6491" b="B3 C5"/>
+  <a u="6492" b="C8 F6"/>
+  <a u="6493" b="93 CF"/>
+  <a u="6494" b="93 D0"/>
+  <a u="6495" b="CB BA"/>
+  <a u="6496" b="DE FE"/>
+  <a u="6497" b="93 D1"/>
+  <a u="6498" b="93 D2"/>
+  <a u="6499" b="DF A4"/>
+  <a u="649A" b="93 D3"/>
+  <a u="649B" b="93 D4"/>
+  <a u="649C" b="93 D5"/>
+  <a u="649D" b="93 D6"/>
+  <a u="649E" b="D7 B2"/>
+  <a u="649F" b="93 D7"/>
+  <a u="64A0" b="93 D8"/>
+  <a u="64A1" b="93 D9"/>
+  <a u="64A2" b="93 DA"/>
+  <a u="64A3" b="93 DB"/>
+  <a u="64A4" b="B3 B7"/>
+  <a u="64A5" b="93 DC"/>
+  <a u="64A6" b="93 DD"/>
+  <a u="64A7" b="93 DE"/>
+  <a u="64A8" b="93 DF"/>
+  <a u="64A9" b="C1 C3"/>
+  <a u="64AA" b="93 E0"/>
+  <a u="64AB" b="93 E1"/>
+  <a u="64AC" b="C7 CB"/>
+  <a u="64AD" b="B2 A5"/>
+  <a u="64AE" b="B4 E9"/>
+  <a u="64AF" b="93 E2"/>
+  <a u="64B0" b="D7 AB"/>
+  <a u="64B1" b="93 E3"/>
+  <a u="64B2" b="93 E4"/>
+  <a u="64B3" b="93 E5"/>
+  <a u="64B4" b="93 E6"/>
+  <a u="64B5" b="C4 EC"/>
+  <a u="64B6" b="93 E7"/>
+  <a u="64B7" b="DF A2"/>
+  <a u="64B8" b="DF A3"/>
+  <a u="64B9" b="93 E8"/>
+  <a u="64BA" b="DF A5"/>
+  <a u="64BB" b="93 E9"/>
+  <a u="64BC" b="BA B3"/>
+  <a u="64BD" b="93 EA"/>
+  <a u="64BE" b="93 EB"/>
+  <a u="64BF" b="93 EC"/>
+  <a u="64C0" b="DF A6"/>
+  <a u="64C1" b="93 ED"/>
+  <a u="64C2" b="C0 DE"/>
+  <a u="64C3" b="93 EE"/>
+  <a u="64C4" b="93 EF"/>
+  <a u="64C5" b="C9 C3"/>
+  <a u="64C6" b="93 F0"/>
+  <a u="64C7" b="93 F1"/>
+  <a u="64C8" b="93 F2"/>
+  <a u="64C9" b="93 F3"/>
+  <a u="64CA" b="93 F4"/>
+  <a u="64CB" b="93 F5"/>
+  <a u="64CC" b="93 F6"/>
+  <a u="64CD" b="B2 D9"/>
+  <a u="64CE" b="C7 E6"/>
+  <a u="64CF" b="93 F7"/>
+  <a u="64D0" b="DF A7"/>
+  <a u="64D1" b="93 F8"/>
+  <a u="64D2" b="C7 DC"/>
+  <a u="64D3" b="93 F9"/>
+  <a u="64D4" b="93 FA"/>
+  <a u="64D5" b="93 FB"/>
+  <a u="64D6" b="93 FC"/>
+  <a u="64D7" b="DF A8"/>
+  <a u="64D8" b="EB A2"/>
+  <a u="64D9" b="93 FD"/>
+  <a u="64DA" b="93 FE"/>
+  <a u="64DB" b="94 40"/>
+  <a u="64DC" b="94 41"/>
+  <a u="64DD" b="94 42"/>
+  <a u="64DE" b="CB D3"/>
+  <a u="64DF" b="94 43"/>
+  <a u="64E0" b="94 44"/>
+  <a u="64E1" b="94 45"/>
+  <a u="64E2" b="DF AA"/>
+  <a u="64E3" b="94 46"/>
+  <a u="64E4" b="DF A9"/>
+  <a u="64E5" b="94 47"/>
+  <a u="64E6" b="B2 C1"/>
+  <a u="64E7" b="94 48"/>
+  <a u="64E8" b="94 49"/>
+  <a u="64E9" b="94 4A"/>
+  <a u="64EA" b="94 4B"/>
+  <a u="64EB" b="94 4C"/>
+  <a u="64EC" b="94 4D"/>
+  <a u="64ED" b="94 4E"/>
+  <a u="64EE" b="94 4F"/>
+  <a u="64EF" b="94 50"/>
+  <a u="64F0" b="94 51"/>
+  <a u="64F1" b="94 52"/>
+  <a u="64F2" b="94 53"/>
+  <a u="64F3" b="94 54"/>
+  <a u="64F4" b="94 55"/>
+  <a u="64F5" b="94 56"/>
+  <a u="64F6" b="94 57"/>
+  <a u="64F7" b="94 58"/>
+  <a u="64F8" b="94 59"/>
+  <a u="64F9" b="94 5A"/>
+  <a u="64FA" b="94 5B"/>
+  <a u="64FB" b="94 5C"/>
+  <a u="64FC" b="94 5D"/>
+  <a u="64FD" b="94 5E"/>
+  <a u="64FE" b="94 5F"/>
+  <a u="64FF" b="94 60"/>
+  <a u="6500" b="C5 CA"/>
+  <a u="6501" b="94 61"/>
+  <a u="6502" b="94 62"/>
+  <a u="6503" b="94 63"/>
+  <a u="6504" b="94 64"/>
+  <a u="6505" b="94 65"/>
+  <a u="6506" b="94 66"/>
+  <a u="6507" b="94 67"/>
+  <a u="6508" b="94 68"/>
+  <a u="6509" b="DF AB"/>
+  <a u="650A" b="94 69"/>
+  <a u="650B" b="94 6A"/>
+  <a u="650C" b="94 6B"/>
+  <a u="650D" b="94 6C"/>
+  <a u="650E" b="94 6D"/>
+  <a u="650F" b="94 6E"/>
+  <a u="6510" b="94 6F"/>
+  <a u="6511" b="94 70"/>
+  <a u="6512" b="D4 DC"/>
+  <a u="6513" b="94 71"/>
+  <a u="6514" b="94 72"/>
+  <a u="6515" b="94 73"/>
+  <a u="6516" b="94 74"/>
+  <a u="6517" b="94 75"/>
+  <a u="6518" b="C8 C1"/>
+  <a u="6519" b="94 76"/>
+  <a u="651A" b="94 77"/>
+  <a u="651B" b="94 78"/>
+  <a u="651C" b="94 79"/>
+  <a u="651D" b="94 7A"/>
+  <a u="651E" b="94 7B"/>
+  <a u="651F" b="94 7C"/>
+  <a u="6520" b="94 7D"/>
+  <a u="6521" b="94 7E"/>
+  <a u="6522" b="94 80"/>
+  <a u="6523" b="94 81"/>
+  <a u="6524" b="94 82"/>
+  <a u="6525" b="DF AC"/>
+  <a u="6526" b="94 83"/>
+  <a u="6527" b="94 84"/>
+  <a u="6528" b="94 85"/>
+  <a u="6529" b="94 86"/>
+  <a u="652A" b="94 87"/>
+  <a u="652B" b="BE F0"/>
+  <a u="652C" b="94 88"/>
+  <a u="652D" b="94 89"/>
+  <a u="652E" b="DF AD"/>
+  <a u="652F" b="D6 A7"/>
+  <a u="6530" b="94 8A"/>
+  <a u="6531" b="94 8B"/>
+  <a u="6532" b="94 8C"/>
+  <a u="6533" b="94 8D"/>
+  <a u="6534" b="EA B7"/>
+  <a u="6535" b="EB B6"/>
+  <a u="6536" b="CA D5"/>
+  <a u="6537" b="94 8E"/>
+  <a u="6538" b="D8 FC"/>
+  <a u="6539" b="B8 C4"/>
+  <a u="653A" b="94 8F"/>
+  <a u="653B" b="B9 A5"/>
+  <a u="653C" b="94 90"/>
+  <a u="653D" b="94 91"/>
+  <a u="653E" b="B7 C5"/>
+  <a u="653F" b="D5 FE"/>
+  <a u="6540" b="94 92"/>
+  <a u="6541" b="94 93"/>
+  <a u="6542" b="94 94"/>
+  <a u="6543" b="94 95"/>
+  <a u="6544" b="94 96"/>
+  <a u="6545" b="B9 CA"/>
+  <a u="6546" b="94 97"/>
+  <a u="6547" b="94 98"/>
+  <a u="6548" b="D0 A7"/>
+  <a u="6549" b="F4 CD"/>
+  <a u="654A" b="94 99"/>
+  <a u="654B" b="94 9A"/>
+  <a u="654C" b="B5 D0"/>
+  <a u="654D" b="94 9B"/>
+  <a u="654E" b="94 9C"/>
+  <a u="654F" b="C3 F4"/>
+  <a u="6550" b="94 9D"/>
+  <a u="6551" b="BE C8"/>
+  <a u="6552" b="94 9E"/>
+  <a u="6553" b="94 9F"/>
+  <a u="6554" b="94 A0"/>
+  <a u="6555" b="EB B7"/>
+  <a u="6556" b="B0 BD"/>
+  <a u="6557" b="94 A1"/>
+  <a u="6558" b="94 A2"/>
+  <a u="6559" b="BD CC"/>
+  <a u="655A" b="94 A3"/>
+  <a u="655B" b="C1 B2"/>
+  <a u="655C" b="94 A4"/>
+  <a u="655D" b="B1 D6"/>
+  <a u="655E" b="B3 A8"/>
+  <a u="655F" b="94 A5"/>
+  <a u="6560" b="94 A6"/>
+  <a u="6561" b="94 A7"/>
+  <a u="6562" b="B8 D2"/>
+  <a u="6563" b="C9 A2"/>
+  <a u="6564" b="94 A8"/>
+  <a u="6565" b="94 A9"/>
+  <a u="6566" b="B6 D8"/>
+  <a u="6567" b="94 AA"/>
+  <a u="6568" b="94 AB"/>
+  <a u="6569" b="94 AC"/>
+  <a u="656A" b="94 AD"/>
+  <a u="656B" b="EB B8"/>
+  <a u="656C" b="BE B4"/>
+  <a u="656D" b="94 AE"/>
+  <a u="656E" b="94 AF"/>
+  <a u="656F" b="94 B0"/>
+  <a u="6570" b="CA FD"/>
+  <a u="6571" b="94 B1"/>
+  <a u="6572" b="C7 C3"/>
+  <a u="6573" b="94 B2"/>
+  <a u="6574" b="D5 FB"/>
+  <a u="6575" b="94 B3"/>
+  <a u="6576" b="94 B4"/>
+  <a u="6577" b="B7 F3"/>
+  <a u="6578" b="94 B5"/>
+  <a u="6579" b="94 B6"/>
+  <a u="657A" b="94 B7"/>
+  <a u="657B" b="94 B8"/>
+  <a u="657C" b="94 B9"/>
+  <a u="657D" b="94 BA"/>
+  <a u="657E" b="94 BB"/>
+  <a u="657F" b="94 BC"/>
+  <a u="6580" b="94 BD"/>
+  <a u="6581" b="94 BE"/>
+  <a u="6582" b="94 BF"/>
+  <a u="6583" b="94 C0"/>
+  <a u="6584" b="94 C1"/>
+  <a u="6585" b="94 C2"/>
+  <a u="6586" b="94 C3"/>
+  <a u="6587" b="CE C4"/>
+  <a u="6588" b="94 C4"/>
+  <a u="6589" b="94 C5"/>
+  <a u="658A" b="94 C6"/>
+  <a u="658B" b="D5 AB"/>
+  <a u="658C" b="B1 F3"/>
+  <a u="658D" b="94 C7"/>
+  <a u="658E" b="94 C8"/>
+  <a u="658F" b="94 C9"/>
+  <a u="6590" b="EC B3"/>
+  <a u="6591" b="B0 DF"/>
+  <a u="6592" b="94 CA"/>
+  <a u="6593" b="EC B5"/>
+  <a u="6594" b="94 CB"/>
+  <a u="6595" b="94 CC"/>
+  <a u="6596" b="94 CD"/>
+  <a u="6597" b="B6 B7"/>
+  <a u="6598" b="94 CE"/>
+  <a u="6599" b="C1 CF"/>
+  <a u="659A" b="94 CF"/>
+  <a u="659B" b="F5 FA"/>
+  <a u="659C" b="D0 B1"/>
+  <a u="659D" b="94 D0"/>
+  <a u="659E" b="94 D1"/>
+  <a u="659F" b="D5 E5"/>
+  <a u="65A0" b="94 D2"/>
+  <a u="65A1" b="CE D3"/>
+  <a u="65A2" b="94 D3"/>
+  <a u="65A3" b="94 D4"/>
+  <a u="65A4" b="BD EF"/>
+  <a u="65A5" b="B3 E2"/>
+  <a u="65A6" b="94 D5"/>
+  <a u="65A7" b="B8 AB"/>
+  <a u="65A8" b="94 D6"/>
+  <a u="65A9" b="D5 B6"/>
+  <a u="65AA" b="94 D7"/>
+  <a u="65AB" b="ED BD"/>
+  <a u="65AC" b="94 D8"/>
+  <a u="65AD" b="B6 CF"/>
+  <a u="65AE" b="94 D9"/>
+  <a u="65AF" b="CB B9"/>
+  <a u="65B0" b="D0 C2"/>
+  <a u="65B1" b="94 DA"/>
+  <a u="65B2" b="94 DB"/>
+  <a u="65B3" b="94 DC"/>
+  <a u="65B4" b="94 DD"/>
+  <a u="65B5" b="94 DE"/>
+  <a u="65B6" b="94 DF"/>
+  <a u="65B7" b="94 E0"/>
+  <a u="65B8" b="94 E1"/>
+  <a u="65B9" b="B7 BD"/>
+  <a u="65BA" b="94 E2"/>
+  <a u="65BB" b="94 E3"/>
+  <a u="65BC" b="EC B6"/>
+  <a u="65BD" b="CA A9"/>
+  <a u="65BE" b="94 E4"/>
+  <a u="65BF" b="94 E5"/>
+  <a u="65C0" b="94 E6"/>
+  <a u="65C1" b="C5 D4"/>
+  <a u="65C2" b="94 E7"/>
+  <a u="65C3" b="EC B9"/>
+  <a u="65C4" b="EC B8"/>
+  <a u="65C5" b="C2 C3"/>
+  <a u="65C6" b="EC B7"/>
+  <a u="65C7" b="94 E8"/>
+  <a u="65C8" b="94 E9"/>
+  <a u="65C9" b="94 EA"/>
+  <a u="65CA" b="94 EB"/>
+  <a u="65CB" b="D0 FD"/>
+  <a u="65CC" b="EC BA"/>
+  <a u="65CD" b="94 EC"/>
+  <a u="65CE" b="EC BB"/>
+  <a u="65CF" b="D7 E5"/>
+  <a u="65D0" b="94 ED"/>
+  <a u="65D1" b="94 EE"/>
+  <a u="65D2" b="EC BC"/>
+  <a u="65D3" b="94 EF"/>
+  <a u="65D4" b="94 F0"/>
+  <a u="65D5" b="94 F1"/>
+  <a u="65D6" b="EC BD"/>
+  <a u="65D7" b="C6 EC"/>
+  <a u="65D8" b="94 F2"/>
+  <a u="65D9" b="94 F3"/>
+  <a u="65DA" b="94 F4"/>
+  <a u="65DB" b="94 F5"/>
+  <a u="65DC" b="94 F6"/>
+  <a u="65DD" b="94 F7"/>
+  <a u="65DE" b="94 F8"/>
+  <a u="65DF" b="94 F9"/>
+  <a u="65E0" b="CE DE"/>
+  <a u="65E1" b="94 FA"/>
+  <a u="65E2" b="BC C8"/>
+  <a u="65E3" b="94 FB"/>
+  <a u="65E4" b="94 FC"/>
+  <a u="65E5" b="C8 D5"/>
+  <a u="65E6" b="B5 A9"/>
+  <a u="65E7" b="BE C9"/>
+  <a u="65E8" b="D6 BC"/>
+  <a u="65E9" b="D4 E7"/>
+  <a u="65EA" b="94 FD"/>
+  <a u="65EB" b="94 FE"/>
+  <a u="65EC" b="D1 AE"/>
+  <a u="65ED" b="D0 F1"/>
+  <a u="65EE" b="EA B8"/>
+  <a u="65EF" b="EA B9"/>
+  <a u="65F0" b="EA BA"/>
+  <a u="65F1" b="BA B5"/>
+  <a u="65F2" b="95 40"/>
+  <a u="65F3" b="95 41"/>
+  <a u="65F4" b="95 42"/>
+  <a u="65F5" b="95 43"/>
+  <a u="65F6" b="CA B1"/>
+  <a u="65F7" b="BF F5"/>
+  <a u="65F8" b="95 44"/>
+  <a u="65F9" b="95 45"/>
+  <a u="65FA" b="CD FA"/>
+  <a u="65FB" b="95 46"/>
+  <a u="65FC" b="95 47"/>
+  <a u="65FD" b="95 48"/>
+  <a u="65FE" b="95 49"/>
+  <a u="65FF" b="95 4A"/>
+  <a u="6600" b="EA C0"/>
+  <a u="6601" b="95 4B"/>
+  <a u="6602" b="B0 BA"/>
+  <a u="6603" b="EA BE"/>
+  <a u="6604" b="95 4C"/>
+  <a u="6605" b="95 4D"/>
+  <a u="6606" b="C0 A5"/>
+  <a u="6607" b="95 4E"/>
+  <a u="6608" b="95 4F"/>
+  <a u="6609" b="95 50"/>
+  <a u="660A" b="EA BB"/>
+  <a u="660B" b="95 51"/>
+  <a u="660C" b="B2 FD"/>
+  <a u="660D" b="95 52"/>
+  <a u="660E" b="C3 F7"/>
+  <a u="660F" b="BB E8"/>
+  <a u="6610" b="95 53"/>
+  <a u="6611" b="95 54"/>
+  <a u="6612" b="95 55"/>
+  <a u="6613" b="D2 D7"/>
+  <a u="6614" b="CE F4"/>
+  <a u="6615" b="EA BF"/>
+  <a u="6616" b="95 56"/>
+  <a u="6617" b="95 57"/>
+  <a u="6618" b="95 58"/>
+  <a u="6619" b="EA BC"/>
+  <a u="661A" b="95 59"/>
+  <a u="661B" b="95 5A"/>
+  <a u="661C" b="95 5B"/>
+  <a u="661D" b="EA C3"/>
+  <a u="661E" b="95 5C"/>
+  <a u="661F" b="D0 C7"/>
+  <a u="6620" b="D3 B3"/>
+  <a u="6621" b="95 5D"/>
+  <a u="6622" b="95 5E"/>
+  <a u="6623" b="95 5F"/>
+  <a u="6624" b="95 60"/>
+  <a u="6625" b="B4 BA"/>
+  <a u="6626" b="95 61"/>
+  <a u="6627" b="C3 C1"/>
+  <a u="6628" b="D7 F2"/>
+  <a u="6629" b="95 62"/>
+  <a u="662A" b="95 63"/>
+  <a u="662B" b="95 64"/>
+  <a u="662C" b="95 65"/>
+  <a u="662D" b="D5 D1"/>
+  <a u="662E" b="95 66"/>
+  <a u="662F" b="CA C7"/>
+  <a u="6630" b="95 67"/>
+  <a u="6631" b="EA C5"/>
+  <a u="6632" b="95 68"/>
+  <a u="6633" b="95 69"/>
+  <a u="6634" b="EA C4"/>
+  <a u="6635" b="EA C7"/>
+  <a u="6636" b="EA C6"/>
+  <a u="6637" b="95 6A"/>
+  <a u="6638" b="95 6B"/>
+  <a u="6639" b="95 6C"/>
+  <a u="663A" b="95 6D"/>
+  <a u="663B" b="95 6E"/>
+  <a u="663C" b="D6 E7"/>
+  <a u="663D" b="95 6F"/>
+  <a u="663E" b="CF D4"/>
+  <a u="663F" b="95 70"/>
+  <a u="6640" b="95 71"/>
+  <a u="6641" b="EA CB"/>
+  <a u="6642" b="95 72"/>
+  <a u="6643" b="BB CE"/>
+  <a u="6644" b="95 73"/>
+  <a u="6645" b="95 74"/>
+  <a u="6646" b="95 75"/>
+  <a u="6647" b="95 76"/>
+  <a u="6648" b="95 77"/>
+  <a u="6649" b="95 78"/>
+  <a u="664A" b="95 79"/>
+  <a u="664B" b="BD FA"/>
+  <a u="664C" b="C9 CE"/>
+  <a u="664D" b="95 7A"/>
+  <a u="664E" b="95 7B"/>
+  <a u="664F" b="EA CC"/>
+  <a u="6650" b="95 7C"/>
+  <a u="6651" b="95 7D"/>
+  <a u="6652" b="C9 B9"/>
+  <a u="6653" b="CF FE"/>
+  <a u="6654" b="EA CA"/>
+  <a u="6655" b="D4 CE"/>
+  <a u="6656" b="EA CD"/>
+  <a u="6657" b="EA CF"/>
+  <a u="6658" b="95 7E"/>
+  <a u="6659" b="95 80"/>
+  <a u="665A" b="CD ED"/>
+  <a u="665B" b="95 81"/>
+  <a u="665C" b="95 82"/>
+  <a u="665D" b="95 83"/>
+  <a u="665E" b="95 84"/>
+  <a u="665F" b="EA C9"/>
+  <a u="6660" b="95 85"/>
+  <a u="6661" b="EA CE"/>
+  <a u="6662" b="95 86"/>
+  <a u="6663" b="95 87"/>
+  <a u="6664" b="CE EE"/>
+  <a u="6665" b="95 88"/>
+  <a u="6666" b="BB DE"/>
+  <a u="6667" b="95 89"/>
+  <a u="6668" b="B3 BF"/>
+  <a u="6669" b="95 8A"/>
+  <a u="666A" b="95 8B"/>
+  <a u="666B" b="95 8C"/>
+  <a u="666C" b="95 8D"/>
+  <a u="666D" b="95 8E"/>
+  <a u="666E" b="C6 D5"/>
+  <a u="666F" b="BE B0"/>
+  <a u="6670" b="CE FA"/>
+  <a u="6671" b="95 8F"/>
+  <a u="6672" b="95 90"/>
+  <a u="6673" b="95 91"/>
+  <a u="6674" b="C7 E7"/>
+  <a u="6675" b="95 92"/>
+  <a u="6676" b="BE A7"/>
+  <a u="6677" b="EA D0"/>
+  <a u="6678" b="95 93"/>
+  <a u="6679" b="95 94"/>
+  <a u="667A" b="D6 C7"/>
+  <a u="667B" b="95 95"/>
+  <a u="667C" b="95 96"/>
+  <a u="667D" b="95 97"/>
+  <a u="667E" b="C1 C0"/>
+  <a u="667F" b="95 98"/>
+  <a u="6680" b="95 99"/>
+  <a u="6681" b="95 9A"/>
+  <a u="6682" b="D4 DD"/>
+  <a u="6683" b="95 9B"/>
+  <a u="6684" b="EA D1"/>
+  <a u="6685" b="95 9C"/>
+  <a u="6686" b="95 9D"/>
+  <a u="6687" b="CF BE"/>
+  <a u="6688" b="95 9E"/>
+  <a u="6689" b="95 9F"/>
+  <a u="668A" b="95 A0"/>
+  <a u="668B" b="95 A1"/>
+  <a u="668C" b="EA D2"/>
+  <a u="668D" b="95 A2"/>
+  <a u="668E" b="95 A3"/>
+  <a u="668F" b="95 A4"/>
+  <a u="6690" b="95 A5"/>
+  <a u="6691" b="CA EE"/>
+  <a u="6692" b="95 A6"/>
+  <a u="6693" b="95 A7"/>
+  <a u="6694" b="95 A8"/>
+  <a u="6695" b="95 A9"/>
+  <a u="6696" b="C5 AF"/>
+  <a u="6697" b="B0 B5"/>
+  <a u="6698" b="95 AA"/>
+  <a u="6699" b="95 AB"/>
+  <a u="669A" b="95 AC"/>
+  <a u="669B" b="95 AD"/>
+  <a u="669C" b="95 AE"/>
+  <a u="669D" b="EA D4"/>
+  <a u="669E" b="95 AF"/>
+  <a u="669F" b="95 B0"/>
+  <a u="66A0" b="95 B1"/>
+  <a u="66A1" b="95 B2"/>
+  <a u="66A2" b="95 B3"/>
+  <a u="66A3" b="95 B4"/>
+  <a u="66A4" b="95 B5"/>
+  <a u="66A5" b="95 B6"/>
+  <a u="66A6" b="95 B7"/>
+  <a u="66A7" b="EA D3"/>
+  <a u="66A8" b="F4 DF"/>
+  <a u="66A9" b="95 B8"/>
+  <a u="66AA" b="95 B9"/>
+  <a u="66AB" b="95 BA"/>
+  <a u="66AC" b="95 BB"/>
+  <a u="66AD" b="95 BC"/>
+  <a u="66AE" b="C4 BA"/>
+  <a u="66AF" b="95 BD"/>
+  <a u="66B0" b="95 BE"/>
+  <a u="66B1" b="95 BF"/>
+  <a u="66B2" b="95 C0"/>
+  <a u="66B3" b="95 C1"/>
+  <a u="66B4" b="B1 A9"/>
+  <a u="66B5" b="95 C2"/>
+  <a u="66B6" b="95 C3"/>
+  <a u="66B7" b="95 C4"/>
+  <a u="66B8" b="95 C5"/>
+  <a u="66B9" b="E5 DF"/>
+  <a u="66BA" b="95 C6"/>
+  <a u="66BB" b="95 C7"/>
+  <a u="66BC" b="95 C8"/>
+  <a u="66BD" b="95 C9"/>
+  <a u="66BE" b="EA D5"/>
+  <a u="66BF" b="95 CA"/>
+  <a u="66C0" b="95 CB"/>
+  <a u="66C1" b="95 CC"/>
+  <a u="66C2" b="95 CD"/>
+  <a u="66C3" b="95 CE"/>
+  <a u="66C4" b="95 CF"/>
+  <a u="66C5" b="95 D0"/>
+  <a u="66C6" b="95 D1"/>
+  <a u="66C7" b="95 D2"/>
+  <a u="66C8" b="95 D3"/>
+  <a u="66C9" b="95 D4"/>
+  <a u="66CA" b="95 D5"/>
+  <a u="66CB" b="95 D6"/>
+  <a u="66CC" b="95 D7"/>
+  <a u="66CD" b="95 D8"/>
+  <a u="66CE" b="95 D9"/>
+  <a u="66CF" b="95 DA"/>
+  <a u="66D0" b="95 DB"/>
+  <a u="66D1" b="95 DC"/>
+  <a u="66D2" b="95 DD"/>
+  <a u="66D3" b="95 DE"/>
+  <a u="66D4" b="95 DF"/>
+  <a u="66D5" b="95 E0"/>
+  <a u="66D6" b="95 E1"/>
+  <a u="66D7" b="95 E2"/>
+  <a u="66D8" b="95 E3"/>
+  <a u="66D9" b="CA EF"/>
+  <a u="66DA" b="95 E4"/>
+  <a u="66DB" b="EA D6"/>
+  <a u="66DC" b="EA D7"/>
+  <a u="66DD" b="C6 D8"/>
+  <a u="66DE" b="95 E5"/>
+  <a u="66DF" b="95 E6"/>
+  <a u="66E0" b="95 E7"/>
+  <a u="66E1" b="95 E8"/>
+  <a u="66E2" b="95 E9"/>
+  <a u="66E3" b="95 EA"/>
+  <a u="66E4" b="95 EB"/>
+  <a u="66E5" b="95 EC"/>
+  <a u="66E6" b="EA D8"/>
+  <a u="66E7" b="95 ED"/>
+  <a u="66E8" b="95 EE"/>
+  <a u="66E9" b="EA D9"/>
+  <a u="66EA" b="95 EF"/>
+  <a u="66EB" b="95 F0"/>
+  <a u="66EC" b="95 F1"/>
+  <a u="66ED" b="95 F2"/>
+  <a u="66EE" b="95 F3"/>
+  <a u="66EF" b="95 F4"/>
+  <a u="66F0" b="D4 BB"/>
+  <a u="66F1" b="95 F5"/>
+  <a u="66F2" b="C7 FA"/>
+  <a u="66F3" b="D2 B7"/>
+  <a u="66F4" b="B8 FC"/>
+  <a u="66F5" b="95 F6"/>
+  <a u="66F6" b="95 F7"/>
+  <a u="66F7" b="EA C2"/>
+  <a u="66F8" b="95 F8"/>
+  <a u="66F9" b="B2 DC"/>
+  <a u="66FA" b="95 F9"/>
+  <a u="66FB" b="95 FA"/>
+  <a u="66FC" b="C2 FC"/>
+  <a u="66FD" b="95 FB"/>
+  <a u="66FE" b="D4 F8"/>
+  <a u="66FF" b="CC E6"/>
+  <a u="6700" b="D7 EE"/>
+  <a u="6701" b="95 FC"/>
+  <a u="6702" b="95 FD"/>
+  <a u="6703" b="95 FE"/>
+  <a u="6704" b="96 40"/>
+  <a u="6705" b="96 41"/>
+  <a u="6706" b="96 42"/>
+  <a u="6707" b="96 43"/>
+  <a u="6708" b="D4 C2"/>
+  <a u="6709" b="D3 D0"/>
+  <a u="670A" b="EB C3"/>
+  <a u="670B" b="C5 F3"/>
+  <a u="670C" b="96 44"/>
+  <a u="670D" b="B7 FE"/>
+  <a u="670E" b="96 45"/>
+  <a u="670F" b="96 46"/>
+  <a u="6710" b="EB D4"/>
+  <a u="6711" b="96 47"/>
+  <a u="6712" b="96 48"/>
+  <a u="6713" b="96 49"/>
+  <a u="6714" b="CB B7"/>
+  <a u="6715" b="EB DE"/>
+  <a u="6716" b="96 4A"/>
+  <a u="6717" b="C0 CA"/>
+  <a u="6718" b="96 4B"/>
+  <a u="6719" b="96 4C"/>
+  <a u="671A" b="96 4D"/>
+  <a u="671B" b="CD FB"/>
+  <a u="671C" b="96 4E"/>
+  <a u="671D" b="B3 AF"/>
+  <a u="671E" b="96 4F"/>
+  <a u="671F" b="C6 DA"/>
+  <a u="6720" b="96 50"/>
+  <a u="6721" b="96 51"/>
+  <a u="6722" b="96 52"/>
+  <a u="6723" b="96 53"/>
+  <a u="6724" b="96 54"/>
+  <a u="6725" b="96 55"/>
+  <a u="6726" b="EB FC"/>
+  <a u="6727" b="96 56"/>
+  <a u="6728" b="C4 BE"/>
+  <a u="6729" b="96 57"/>
+  <a u="672A" b="CE B4"/>
+  <a u="672B" b="C4 A9"/>
+  <a u="672C" b="B1 BE"/>
+  <a u="672D" b="D4 FD"/>
+  <a u="672E" b="96 58"/>
+  <a u="672F" b="CA F5"/>
+  <a u="6730" b="96 59"/>
+  <a u="6731" b="D6 EC"/>
+  <a u="6732" b="96 5A"/>
+  <a u="6733" b="96 5B"/>
+  <a u="6734" b="C6 D3"/>
+  <a u="6735" b="B6 E4"/>
+  <a u="6736" b="96 5C"/>
+  <a u="6737" b="96 5D"/>
+  <a u="6738" b="96 5E"/>
+  <a u="6739" b="96 5F"/>
+  <a u="673A" b="BB FA"/>
+  <a u="673B" b="96 60"/>
+  <a u="673C" b="96 61"/>
+  <a u="673D" b="D0 E0"/>
+  <a u="673E" b="96 62"/>
+  <a u="673F" b="96 63"/>
+  <a u="6740" b="C9 B1"/>
+  <a u="6741" b="96 64"/>
+  <a u="6742" b="D4 D3"/>
+  <a u="6743" b="C8 A8"/>
+  <a u="6744" b="96 65"/>
+  <a u="6745" b="96 66"/>
+  <a u="6746" b="B8 CB"/>
+  <a u="6747" b="96 67"/>
+  <a u="6748" b="E8 BE"/>
+  <a u="6749" b="C9 BC"/>
+  <a u="674A" b="96 68"/>
+  <a u="674B" b="96 69"/>
+  <a u="674C" b="E8 BB"/>
+  <a u="674D" b="96 6A"/>
+  <a u="674E" b="C0 EE"/>
+  <a u="674F" b="D0 D3"/>
+  <a u="6750" b="B2 C4"/>
+  <a u="6751" b="B4 E5"/>
+  <a u="6752" b="96 6B"/>
+  <a u="6753" b="E8 BC"/>
+  <a u="6754" b="96 6C"/>
+  <a u="6755" b="96 6D"/>
+  <a u="6756" b="D5 C8"/>
+  <a u="6757" b="96 6E"/>
+  <a u="6758" b="96 6F"/>
+  <a u="6759" b="96 70"/>
+  <a u="675A" b="96 71"/>
+  <a u="675B" b="96 72"/>
+  <a u="675C" b="B6 C5"/>
+  <a u="675D" b="96 73"/>
+  <a u="675E" b="E8 BD"/>
+  <a u="675F" b="CA F8"/>
+  <a u="6760" b="B8 DC"/>
+  <a u="6761" b="CC F5"/>
+  <a u="6762" b="96 74"/>
+  <a u="6763" b="96 75"/>
+  <a u="6764" b="96 76"/>
+  <a u="6765" b="C0 B4"/>
+  <a u="6766" b="96 77"/>
+  <a u="6767" b="96 78"/>
+  <a u="6768" b="D1 EE"/>
+  <a u="6769" b="E8 BF"/>
+  <a u="676A" b="E8 C2"/>
+  <a u="676B" b="96 79"/>
+  <a u="676C" b="96 7A"/>
+  <a u="676D" b="BA BC"/>
+  <a u="676E" b="96 7B"/>
+  <a u="676F" b="B1 AD"/>
+  <a u="6770" b="BD DC"/>
+  <a u="6771" b="96 7C"/>
+  <a u="6772" b="EA BD"/>
+  <a u="6773" b="E8 C3"/>
+  <a u="6774" b="96 7D"/>
+  <a u="6775" b="E8 C6"/>
+  <a u="6776" b="96 7E"/>
+  <a u="6777" b="E8 CB"/>
+  <a u="6778" b="96 80"/>
+  <a u="6779" b="96 81"/>
+  <a u="677A" b="96 82"/>
+  <a u="677B" b="96 83"/>
+  <a u="677C" b="E8 CC"/>
+  <a u="677D" b="96 84"/>
+  <a u="677E" b="CB C9"/>
+  <a u="677F" b="B0 E5"/>
+  <a u="6780" b="96 85"/>
+  <a u="6781" b="BC AB"/>
+  <a u="6782" b="96 86"/>
+  <a u="6783" b="96 87"/>
+  <a u="6784" b="B9 B9"/>
+  <a u="6785" b="96 88"/>
+  <a u="6786" b="96 89"/>
+  <a u="6787" b="E8 C1"/>
+  <a u="6788" b="96 8A"/>
+  <a u="6789" b="CD F7"/>
+  <a u="678A" b="96 8B"/>
+  <a u="678B" b="E8 CA"/>
+  <a u="678C" b="96 8C"/>
+  <a u="678D" b="96 8D"/>
+  <a u="678E" b="96 8E"/>
+  <a u="678F" b="96 8F"/>
+  <a u="6790" b="CE F6"/>
+  <a u="6791" b="96 90"/>
+  <a u="6792" b="96 91"/>
+  <a u="6793" b="96 92"/>
+  <a u="6794" b="96 93"/>
+  <a u="6795" b="D5 ED"/>
+  <a u="6796" b="96 94"/>
+  <a u="6797" b="C1 D6"/>
+  <a u="6798" b="E8 C4"/>
+  <a u="6799" b="96 95"/>
+  <a u="679A" b="C3 B6"/>
+  <a u="679B" b="96 96"/>
+  <a u="679C" b="B9 FB"/>
+  <a u="679D" b="D6 A6"/>
+  <a u="679E" b="E8 C8"/>
+  <a u="679F" b="96 97"/>
+  <a u="67A0" b="96 98"/>
+  <a u="67A1" b="96 99"/>
+  <a u="67A2" b="CA E0"/>
+  <a u="67A3" b="D4 E6"/>
+  <a u="67A4" b="96 9A"/>
+  <a u="67A5" b="E8 C0"/>
+  <a u="67A6" b="96 9B"/>
+  <a u="67A7" b="E8 C5"/>
+  <a u="67A8" b="E8 C7"/>
+  <a u="67A9" b="96 9C"/>
+  <a u="67AA" b="C7 B9"/>
+  <a u="67AB" b="B7 E3"/>
+  <a u="67AC" b="96 9D"/>
+  <a u="67AD" b="E8 C9"/>
+  <a u="67AE" b="96 9E"/>
+  <a u="67AF" b="BF DD"/>
+  <a u="67B0" b="E8 D2"/>
+  <a u="67B1" b="96 9F"/>
+  <a u="67B2" b="96 A0"/>
+  <a u="67B3" b="E8 D7"/>
+  <a u="67B4" b="96 A1"/>
+  <a u="67B5" b="E8 D5"/>
+  <a u="67B6" b="BC DC"/>
+  <a u="67B7" b="BC CF"/>
+  <a u="67B8" b="E8 DB"/>
+  <a u="67B9" b="96 A2"/>
+  <a u="67BA" b="96 A3"/>
+  <a u="67BB" b="96 A4"/>
+  <a u="67BC" b="96 A5"/>
+  <a u="67BD" b="96 A6"/>
+  <a u="67BE" b="96 A7"/>
+  <a u="67BF" b="96 A8"/>
+  <a u="67C0" b="96 A9"/>
+  <a u="67C1" b="E8 DE"/>
+  <a u="67C2" b="96 AA"/>
+  <a u="67C3" b="E8 DA"/>
+  <a u="67C4" b="B1 FA"/>
+  <a u="67C5" b="96 AB"/>
+  <a u="67C6" b="96 AC"/>
+  <a u="67C7" b="96 AD"/>
+  <a u="67C8" b="96 AE"/>
+  <a u="67C9" b="96 AF"/>
+  <a u="67CA" b="96 B0"/>
+  <a u="67CB" b="96 B1"/>
+  <a u="67CC" b="96 B2"/>
+  <a u="67CD" b="96 B3"/>
+  <a u="67CE" b="96 B4"/>
+  <a u="67CF" b="B0 D8"/>
+  <a u="67D0" b="C4 B3"/>
+  <a u="67D1" b="B8 CC"/>
+  <a u="67D2" b="C6 E2"/>
+  <a u="67D3" b="C8 BE"/>
+  <a u="67D4" b="C8 E1"/>
+  <a u="67D5" b="96 B5"/>
+  <a u="67D6" b="96 B6"/>
+  <a u="67D7" b="96 B7"/>
+  <a u="67D8" b="E8 CF"/>
+  <a u="67D9" b="E8 D4"/>
+  <a u="67DA" b="E8 D6"/>
+  <a u="67DB" b="96 B8"/>
+  <a u="67DC" b="B9 F1"/>
+  <a u="67DD" b="E8 D8"/>
+  <a u="67DE" b="D7 F5"/>
+  <a u="67DF" b="96 B9"/>
+  <a u="67E0" b="C4 FB"/>
+  <a u="67E1" b="96 BA"/>
+  <a u="67E2" b="E8 DC"/>
+  <a u="67E3" b="96 BB"/>
+  <a u="67E4" b="96 BC"/>
+  <a u="67E5" b="B2 E9"/>
+  <a u="67E6" b="96 BD"/>
+  <a u="67E7" b="96 BE"/>
+  <a u="67E8" b="96 BF"/>
+  <a u="67E9" b="E8 D1"/>
+  <a u="67EA" b="96 C0"/>
+  <a u="67EB" b="96 C1"/>
+  <a u="67EC" b="BC ED"/>
+  <a u="67ED" b="96 C2"/>
+  <a u="67EE" b="96 C3"/>
+  <a u="67EF" b="BF C2"/>
+  <a u="67F0" b="E8 CD"/>
+  <a u="67F1" b="D6 F9"/>
+  <a u="67F2" b="96 C4"/>
+  <a u="67F3" b="C1 F8"/>
+  <a u="67F4" b="B2 F1"/>
+  <a u="67F5" b="96 C5"/>
+  <a u="67F6" b="96 C6"/>
+  <a u="67F7" b="96 C7"/>
+  <a u="67F8" b="96 C8"/>
+  <a u="67F9" b="96 C9"/>
+  <a u="67FA" b="96 CA"/>
+  <a u="67FB" b="96 CB"/>
+  <a u="67FC" b="96 CC"/>
+  <a u="67FD" b="E8 DF"/>
+  <a u="67FE" b="96 CD"/>
+  <a u="67FF" b="CA C1"/>
+  <a u="6800" b="E8 D9"/>
+  <a u="6801" b="96 CE"/>
+  <a u="6802" b="96 CF"/>
+  <a u="6803" b="96 D0"/>
+  <a u="6804" b="96 D1"/>
+  <a u="6805" b="D5 A4"/>
+  <a u="6806" b="96 D2"/>
+  <a u="6807" b="B1 EA"/>
+  <a u="6808" b="D5 BB"/>
+  <a u="6809" b="E8 CE"/>
+  <a u="680A" b="E8 D0"/>
+  <a u="680B" b="B6 B0"/>
+  <a u="680C" b="E8 D3"/>
+  <a u="680D" b="96 D3"/>
+  <a u="680E" b="E8 DD"/>
+  <a u="680F" b="C0 B8"/>
+  <a u="6810" b="96 D4"/>
+  <a u="6811" b="CA F7"/>
+  <a u="6812" b="96 D5"/>
+  <a u="6813" b="CB A8"/>
+  <a u="6814" b="96 D6"/>
+  <a u="6815" b="96 D7"/>
+  <a u="6816" b="C6 DC"/>
+  <a u="6817" b="C0 F5"/>
+  <a u="6818" b="96 D8"/>
+  <a u="6819" b="96 D9"/>
+  <a u="681A" b="96 DA"/>
+  <a u="681B" b="96 DB"/>
+  <a u="681C" b="96 DC"/>
+  <a u="681D" b="E8 E9"/>
+  <a u="681E" b="96 DD"/>
+  <a u="681F" b="96 DE"/>
+  <a u="6820" b="96 DF"/>
+  <a u="6821" b="D0 A3"/>
+  <a u="6822" b="96 E0"/>
+  <a u="6823" b="96 E1"/>
+  <a u="6824" b="96 E2"/>
+  <a u="6825" b="96 E3"/>
+  <a u="6826" b="96 E4"/>
+  <a u="6827" b="96 E5"/>
+  <a u="6828" b="96 E6"/>
+  <a u="6829" b="E8 F2"/>
+  <a u="682A" b="D6 EA"/>
+  <a u="682B" b="96 E7"/>
+  <a u="682C" b="96 E8"/>
+  <a u="682D" b="96 E9"/>
+  <a u="682E" b="96 EA"/>
+  <a u="682F" b="96 EB"/>
+  <a u="6830" b="96 EC"/>
+  <a u="6831" b="96 ED"/>
+  <a u="6832" b="E8 E0"/>
+  <a u="6833" b="E8 E1"/>
+  <a u="6834" b="96 EE"/>
+  <a u="6835" b="96 EF"/>
+  <a u="6836" b="96 F0"/>
+  <a u="6837" b="D1 F9"/>
+  <a u="6838" b="BA CB"/>
+  <a u="6839" b="B8 F9"/>
+  <a u="683A" b="96 F1"/>
+  <a u="683B" b="96 F2"/>
+  <a u="683C" b="B8 F1"/>
+  <a u="683D" b="D4 D4"/>
+  <a u="683E" b="E8 EF"/>
+  <a u="683F" b="96 F3"/>
+  <a u="6840" b="E8 EE"/>
+  <a u="6841" b="E8 EC"/>
+  <a u="6842" b="B9 F0"/>
+  <a u="6843" b="CC D2"/>
+  <a u="6844" b="E8 E6"/>
+  <a u="6845" b="CE A6"/>
+  <a u="6846" b="BF F2"/>
+  <a u="6847" b="96 F4"/>
+  <a u="6848" b="B0 B8"/>
+  <a u="6849" b="E8 F1"/>
+  <a u="684A" b="E8 F0"/>
+  <a u="684B" b="96 F5"/>
+  <a u="684C" b="D7 C0"/>
+  <a u="684D" b="96 F6"/>
+  <a u="684E" b="E8 E4"/>
+  <a u="684F" b="96 F7"/>
+  <a u="6850" b="CD A9"/>
+  <a u="6851" b="C9 A3"/>
+  <a u="6852" b="96 F8"/>
+  <a u="6853" b="BB B8"/>
+  <a u="6854" b="BD DB"/>
+  <a u="6855" b="E8 EA"/>
+  <a u="6856" b="96 F9"/>
+  <a u="6857" b="96 FA"/>
+  <a u="6858" b="96 FB"/>
+  <a u="6859" b="96 FC"/>
+  <a u="685A" b="96 FD"/>
+  <a u="685B" b="96 FE"/>
+  <a u="685C" b="97 40"/>
+  <a u="685D" b="97 41"/>
+  <a u="685E" b="97 42"/>
+  <a u="685F" b="97 43"/>
+  <a u="6860" b="E8 E2"/>
+  <a u="6861" b="E8 E3"/>
+  <a u="6862" b="E8 E5"/>
+  <a u="6863" b="B5 B5"/>
+  <a u="6864" b="E8 E7"/>
+  <a u="6865" b="C7 C5"/>
+  <a u="6866" b="E8 EB"/>
+  <a u="6867" b="E8 ED"/>
+  <a u="6868" b="BD B0"/>
+  <a u="6869" b="D7 AE"/>
+  <a u="686A" b="97 44"/>
+  <a u="686B" b="E8 F8"/>
+  <a u="686C" b="97 45"/>
+  <a u="686D" b="97 46"/>
+  <a u="686E" b="97 47"/>
+  <a u="686F" b="97 48"/>
+  <a u="6870" b="97 49"/>
+  <a u="6871" b="97 4A"/>
+  <a u="6872" b="97 4B"/>
+  <a u="6873" b="97 4C"/>
+  <a u="6874" b="E8 F5"/>
+  <a u="6875" b="97 4D"/>
+  <a u="6876" b="CD B0"/>
+  <a u="6877" b="E8 F6"/>
+  <a u="6878" b="97 4E"/>
+  <a u="6879" b="97 4F"/>
+  <a u="687A" b="97 50"/>
+  <a u="687B" b="97 51"/>
+  <a u="687C" b="97 52"/>
+  <a u="687D" b="97 53"/>
+  <a u="687E" b="97 54"/>
+  <a u="687F" b="97 55"/>
+  <a u="6880" b="97 56"/>
+  <a u="6881" b="C1 BA"/>
+  <a u="6882" b="97 57"/>
+  <a u="6883" b="E8 E8"/>
+  <a u="6884" b="97 58"/>
+  <a u="6885" b="C3 B7"/>
+  <a u="6886" b="B0 F0"/>
+  <a u="6887" b="97 59"/>
+  <a u="6888" b="97 5A"/>
+  <a u="6889" b="97 5B"/>
+  <a u="688A" b="97 5C"/>
+  <a u="688B" b="97 5D"/>
+  <a u="688C" b="97 5E"/>
+  <a u="688D" b="97 5F"/>
+  <a u="688E" b="97 60"/>
+  <a u="688F" b="E8 F4"/>
+  <a u="6890" b="97 61"/>
+  <a u="6891" b="97 62"/>
+  <a u="6892" b="97 63"/>
+  <a u="6893" b="E8 F7"/>
+  <a u="6894" b="97 64"/>
+  <a u="6895" b="97 65"/>
+  <a u="6896" b="97 66"/>
+  <a u="6897" b="B9 A3"/>
+  <a u="6898" b="97 67"/>
+  <a u="6899" b="97 68"/>
+  <a u="689A" b="97 69"/>
+  <a u="689B" b="97 6A"/>
+  <a u="689C" b="97 6B"/>
+  <a u="689D" b="97 6C"/>
+  <a u="689E" b="97 6D"/>
+  <a u="689F" b="97 6E"/>
+  <a u="68A0" b="97 6F"/>
+  <a u="68A1" b="97 70"/>
+  <a u="68A2" b="C9 D2"/>
+  <a u="68A3" b="97 71"/>
+  <a u="68A4" b="97 72"/>
+  <a u="68A5" b="97 73"/>
+  <a u="68A6" b="C3 CE"/>
+  <a u="68A7" b="CE E0"/>
+  <a u="68A8" b="C0 E6"/>
+  <a u="68A9" b="97 74"/>
+  <a u="68AA" b="97 75"/>
+  <a u="68AB" b="97 76"/>
+  <a u="68AC" b="97 77"/>
+  <a u="68AD" b="CB F3"/>
+  <a u="68AE" b="97 78"/>
+  <a u="68AF" b="CC DD"/>
+  <a u="68B0" b="D0 B5"/>
+  <a u="68B1" b="97 79"/>
+  <a u="68B2" b="97 7A"/>
+  <a u="68B3" b="CA E1"/>
+  <a u="68B4" b="97 7B"/>
+  <a u="68B5" b="E8 F3"/>
+  <a u="68B6" b="97 7C"/>
+  <a u="68B7" b="97 7D"/>
+  <a u="68B8" b="97 7E"/>
+  <a u="68B9" b="97 80"/>
+  <a u="68BA" b="97 81"/>
+  <a u="68BB" b="97 82"/>
+  <a u="68BC" b="97 83"/>
+  <a u="68BD" b="97 84"/>
+  <a u="68BE" b="97 85"/>
+  <a u="68BF" b="97 86"/>
+  <a u="68C0" b="BC EC"/>
+  <a u="68C1" b="97 87"/>
+  <a u="68C2" b="E8 F9"/>
+  <a u="68C3" b="97 88"/>
+  <a u="68C4" b="97 89"/>
+  <a u="68C5" b="97 8A"/>
+  <a u="68C6" b="97 8B"/>
+  <a u="68C7" b="97 8C"/>
+  <a u="68C8" b="97 8D"/>
+  <a u="68C9" b="C3 DE"/>
+  <a u="68CA" b="97 8E"/>
+  <a u="68CB" b="C6 E5"/>
+  <a u="68CC" b="97 8F"/>
+  <a u="68CD" b="B9 F7"/>
+  <a u="68CE" b="97 90"/>
+  <a u="68CF" b="97 91"/>
+  <a u="68D0" b="97 92"/>
+  <a u="68D1" b="97 93"/>
+  <a u="68D2" b="B0 F4"/>
+  <a u="68D3" b="97 94"/>
+  <a u="68D4" b="97 95"/>
+  <a u="68D5" b="D7 D8"/>
+  <a u="68D6" b="97 96"/>
+  <a u="68D7" b="97 97"/>
+  <a u="68D8" b="BC AC"/>
+  <a u="68D9" b="97 98"/>
+  <a u="68DA" b="C5 EF"/>
+  <a u="68DB" b="97 99"/>
+  <a u="68DC" b="97 9A"/>
+  <a u="68DD" b="97 9B"/>
+  <a u="68DE" b="97 9C"/>
+  <a u="68DF" b="97 9D"/>
+  <a u="68E0" b="CC C4"/>
+  <a u="68E1" b="97 9E"/>
+  <a u="68E2" b="97 9F"/>
+  <a u="68E3" b="E9 A6"/>
+  <a u="68E4" b="97 A0"/>
+  <a u="68E5" b="97 A1"/>
+  <a u="68E6" b="97 A2"/>
+  <a u="68E7" b="97 A3"/>
+  <a u="68E8" b="97 A4"/>
+  <a u="68E9" b="97 A5"/>
+  <a u="68EA" b="97 A6"/>
+  <a u="68EB" b="97 A7"/>
+  <a u="68EC" b="97 A8"/>
+  <a u="68ED" b="97 A9"/>
+  <a u="68EE" b="C9 AD"/>
+  <a u="68EF" b="97 AA"/>
+  <a u="68F0" b="E9 A2"/>
+  <a u="68F1" b="C0 E2"/>
+  <a u="68F2" b="97 AB"/>
+  <a u="68F3" b="97 AC"/>
+  <a u="68F4" b="97 AD"/>
+  <a u="68F5" b="BF C3"/>
+  <a u="68F6" b="97 AE"/>
+  <a u="68F7" b="97 AF"/>
+  <a u="68F8" b="97 B0"/>
+  <a u="68F9" b="E8 FE"/>
+  <a u="68FA" b="B9 D7"/>
+  <a u="68FB" b="97 B1"/>
+  <a u="68FC" b="E8 FB"/>
+  <a u="68FD" b="97 B2"/>
+  <a u="68FE" b="97 B3"/>
+  <a u="68FF" b="97 B4"/>
+  <a u="6900" b="97 B5"/>
+  <a u="6901" b="E9 A4"/>
+  <a u="6902" b="97 B6"/>
+  <a u="6903" b="97 B7"/>
+  <a u="6904" b="97 B8"/>
+  <a u="6905" b="D2 CE"/>
+  <a u="6906" b="97 B9"/>
+  <a u="6907" b="97 BA"/>
+  <a u="6908" b="97 BB"/>
+  <a u="6909" b="97 BC"/>
+  <a u="690A" b="97 BD"/>
+  <a u="690B" b="E9 A3"/>
+  <a u="690C" b="97 BE"/>
+  <a u="690D" b="D6 B2"/>
+  <a u="690E" b="D7 B5"/>
+  <a u="690F" b="97 BF"/>
+  <a u="6910" b="E9 A7"/>
+  <a u="6911" b="97 C0"/>
+  <a u="6912" b="BD B7"/>
+  <a u="6913" b="97 C1"/>
+  <a u="6914" b="97 C2"/>
+  <a u="6915" b="97 C3"/>
+  <a u="6916" b="97 C4"/>
+  <a u="6917" b="97 C5"/>
+  <a u="6918" b="97 C6"/>
+  <a u="6919" b="97 C7"/>
+  <a u="691A" b="97 C8"/>
+  <a u="691B" b="97 C9"/>
+  <a u="691C" b="97 CA"/>
+  <a u="691D" b="97 CB"/>
+  <a u="691E" b="97 CC"/>
+  <a u="691F" b="E8 FC"/>
+  <a u="6920" b="E8 FD"/>
+  <a u="6921" b="97 CD"/>
+  <a u="6922" b="97 CE"/>
+  <a u="6923" b="97 CF"/>
+  <a u="6924" b="E9 A1"/>
+  <a u="6925" b="97 D0"/>
+  <a u="6926" b="97 D1"/>
+  <a u="6927" b="97 D2"/>
+  <a u="6928" b="97 D3"/>
+  <a u="6929" b="97 D4"/>
+  <a u="692A" b="97 D5"/>
+  <a u="692B" b="97 D6"/>
+  <a u="692C" b="97 D7"/>
+  <a u="692D" b="CD D6"/>
+  <a u="692E" b="97 D8"/>
+  <a u="692F" b="97 D9"/>
+  <a u="6930" b="D2 AC"/>
+  <a u="6931" b="97 DA"/>
+  <a u="6932" b="97 DB"/>
+  <a u="6933" b="97 DC"/>
+  <a u="6934" b="E9 B2"/>
+  <a u="6935" b="97 DD"/>
+  <a u="6936" b="97 DE"/>
+  <a u="6937" b="97 DF"/>
+  <a u="6938" b="97 E0"/>
+  <a u="6939" b="E9 A9"/>
+  <a u="693A" b="97 E1"/>
+  <a u="693B" b="97 E2"/>
+  <a u="693C" b="97 E3"/>
+  <a u="693D" b="B4 AA"/>
+  <a u="693E" b="97 E4"/>
+  <a u="693F" b="B4 BB"/>
+  <a u="6940" b="97 E5"/>
+  <a u="6941" b="97 E6"/>
+  <a u="6942" b="E9 AB"/>
+  <a u="6943" b="97 E7"/>
+  <a u="6944" b="97 E8"/>
+  <a u="6945" b="97 E9"/>
+  <a u="6946" b="97 EA"/>
+  <a u="6947" b="97 EB"/>
+  <a u="6948" b="97 EC"/>
+  <a u="6949" b="97 ED"/>
+  <a u="694A" b="97 EE"/>
+  <a u="694B" b="97 EF"/>
+  <a u="694C" b="97 F0"/>
+  <a u="694D" b="97 F1"/>
+  <a u="694E" b="97 F2"/>
+  <a u="694F" b="97 F3"/>
+  <a u="6950" b="97 F4"/>
+  <a u="6951" b="97 F5"/>
+  <a u="6952" b="97 F6"/>
+  <a u="6953" b="97 F7"/>
+  <a u="6954" b="D0 A8"/>
+  <a u="6955" b="97 F8"/>
+  <a u="6956" b="97 F9"/>
+  <a u="6957" b="E9 A5"/>
+  <a u="6958" b="97 FA"/>
+  <a u="6959" b="97 FB"/>
+  <a u="695A" b="B3 FE"/>
+  <a u="695B" b="97 FC"/>
+  <a u="695C" b="97 FD"/>
+  <a u="695D" b="E9 AC"/>
+  <a u="695E" b="C0 E3"/>
+  <a u="695F" b="97 FE"/>
+  <a u="6960" b="E9 AA"/>
+  <a u="6961" b="98 40"/>
+  <a u="6962" b="98 41"/>
+  <a u="6963" b="E9 B9"/>
+  <a u="6964" b="98 42"/>
+  <a u="6965" b="98 43"/>
+  <a u="6966" b="E9 B8"/>
+  <a u="6967" b="98 44"/>
+  <a u="6968" b="98 45"/>
+  <a u="6969" b="98 46"/>
+  <a u="696A" b="98 47"/>
+  <a u="696B" b="E9 AE"/>
+  <a u="696C" b="98 48"/>
+  <a u="696D" b="98 49"/>
+  <a u="696E" b="E8 FA"/>
+  <a u="696F" b="98 4A"/>
+  <a u="6970" b="98 4B"/>
+  <a u="6971" b="E9 A8"/>
+  <a u="6972" b="98 4C"/>
+  <a u="6973" b="98 4D"/>
+  <a u="6974" b="98 4E"/>
+  <a u="6975" b="98 4F"/>
+  <a u="6976" b="98 50"/>
+  <a u="6977" b="BF AC"/>
+  <a u="6978" b="E9 B1"/>
+  <a u="6979" b="E9 BA"/>
+  <a u="697A" b="98 51"/>
+  <a u="697B" b="98 52"/>
+  <a u="697C" b="C2 A5"/>
+  <a u="697D" b="98 53"/>
+  <a u="697E" b="98 54"/>
+  <a u="697F" b="98 55"/>
+  <a u="6980" b="E9 AF"/>
+  <a u="6981" b="98 56"/>
+  <a u="6982" b="B8 C5"/>
+  <a u="6983" b="98 57"/>
+  <a u="6984" b="E9 AD"/>
+  <a u="6985" b="98 58"/>
+  <a u="6986" b="D3 DC"/>
+  <a u="6987" b="E9 B4"/>
+  <a u="6988" b="E9 B5"/>
+  <a u="6989" b="E9 B7"/>
+  <a u="698A" b="98 59"/>
+  <a u="698B" b="98 5A"/>
+  <a u="698C" b="98 5B"/>
+  <a u="698D" b="E9 C7"/>
+  <a u="698E" b="98 5C"/>
+  <a u="698F" b="98 5D"/>
+  <a u="6990" b="98 5E"/>
+  <a u="6991" b="98 5F"/>
+  <a u="6992" b="98 60"/>
+  <a u="6993" b="98 61"/>
+  <a u="6994" b="C0 C6"/>
+  <a u="6995" b="E9 C5"/>
+  <a u="6996" b="98 62"/>
+  <a u="6997" b="98 63"/>
+  <a u="6998" b="E9 B0"/>
+  <a u="6999" b="98 64"/>
+  <a u="699A" b="98 65"/>
+  <a u="699B" b="E9 BB"/>
+  <a u="699C" b="B0 F1"/>
+  <a u="699D" b="98 66"/>
+  <a u="699E" b="98 67"/>
+  <a u="699F" b="98 68"/>
+  <a u="69A0" b="98 69"/>
+  <a u="69A1" b="98 6A"/>
+  <a u="69A2" b="98 6B"/>
+  <a u="69A3" b="98 6C"/>
+  <a u="69A4" b="98 6D"/>
+  <a u="69A5" b="98 6E"/>
+  <a u="69A6" b="98 6F"/>
+  <a u="69A7" b="E9 BC"/>
+  <a u="69A8" b="D5 A5"/>
+  <a u="69A9" b="98 70"/>
+  <a u="69AA" b="98 71"/>
+  <a u="69AB" b="E9 BE"/>
+  <a u="69AC" b="98 72"/>
+  <a u="69AD" b="E9 BF"/>
+  <a u="69AE" b="98 73"/>
+  <a u="69AF" b="98 74"/>
+  <a u="69B0" b="98 75"/>
+  <a u="69B1" b="E9 C1"/>
+  <a u="69B2" b="98 76"/>
+  <a u="69B3" b="98 77"/>
+  <a u="69B4" b="C1 F1"/>
+  <a u="69B5" b="98 78"/>
+  <a u="69B6" b="98 79"/>
+  <a u="69B7" b="C8 B6"/>
+  <a u="69B8" b="98 7A"/>
+  <a u="69B9" b="98 7B"/>
+  <a u="69BA" b="98 7C"/>
+  <a u="69BB" b="E9 BD"/>
+  <a u="69BC" b="98 7D"/>
+  <a u="69BD" b="98 7E"/>
+  <a u="69BE" b="98 80"/>
+  <a u="69BF" b="98 81"/>
+  <a u="69C0" b="98 82"/>
+  <a u="69C1" b="E9 C2"/>
+  <a u="69C2" b="98 83"/>
+  <a u="69C3" b="98 84"/>
+  <a u="69C4" b="98 85"/>
+  <a u="69C5" b="98 86"/>
+  <a u="69C6" b="98 87"/>
+  <a u="69C7" b="98 88"/>
+  <a u="69C8" b="98 89"/>
+  <a u="69C9" b="98 8A"/>
+  <a u="69CA" b="E9 C3"/>
+  <a u="69CB" b="98 8B"/>
+  <a u="69CC" b="E9 B3"/>
+  <a u="69CD" b="98 8C"/>
+  <a u="69CE" b="E9 B6"/>
+  <a u="69CF" b="98 8D"/>
+  <a u="69D0" b="BB B1"/>
+  <a u="69D1" b="98 8E"/>
+  <a u="69D2" b="98 8F"/>
+  <a u="69D3" b="98 90"/>
+  <a u="69D4" b="E9 C0"/>
+  <a u="69D5" b="98 91"/>
+  <a u="69D6" b="98 92"/>
+  <a u="69D7" b="98 93"/>
+  <a u="69D8" b="98 94"/>
+  <a u="69D9" b="98 95"/>
+  <a u="69DA" b="98 96"/>
+  <a u="69DB" b="BC F7"/>
+  <a u="69DC" b="98 97"/>
+  <a u="69DD" b="98 98"/>
+  <a u="69DE" b="98 99"/>
+  <a u="69DF" b="E9 C4"/>
+  <a u="69E0" b="E9 C6"/>
+  <a u="69E1" b="98 9A"/>
+  <a u="69E2" b="98 9B"/>
+  <a u="69E3" b="98 9C"/>
+  <a u="69E4" b="98 9D"/>
+  <a u="69E5" b="98 9E"/>
+  <a u="69E6" b="98 9F"/>
+  <a u="69E7" b="98 A0"/>
+  <a u="69E8" b="98 A1"/>
+  <a u="69E9" b="98 A2"/>
+  <a u="69EA" b="98 A3"/>
+  <a u="69EB" b="98 A4"/>
+  <a u="69EC" b="98 A5"/>
+  <a u="69ED" b="E9 CA"/>
+  <a u="69EE" b="98 A6"/>
+  <a u="69EF" b="98 A7"/>
+  <a u="69F0" b="98 A8"/>
+  <a u="69F1" b="98 A9"/>
+  <a u="69F2" b="E9 CE"/>
+  <a u="69F3" b="98 AA"/>
+  <a u="69F4" b="98 AB"/>
+  <a u="69F5" b="98 AC"/>
+  <a u="69F6" b="98 AD"/>
+  <a u="69F7" b="98 AE"/>
+  <a u="69F8" b="98 AF"/>
+  <a u="69F9" b="98 B0"/>
+  <a u="69FA" b="98 B1"/>
+  <a u="69FB" b="98 B2"/>
+  <a u="69FC" b="98 B3"/>
+  <a u="69FD" b="B2 DB"/>
+  <a u="69FE" b="98 B4"/>
+  <a u="69FF" b="E9 C8"/>
+  <a u="6A00" b="98 B5"/>
+  <a u="6A01" b="98 B6"/>
+  <a u="6A02" b="98 B7"/>
+  <a u="6A03" b="98 B8"/>
+  <a u="6A04" b="98 B9"/>
+  <a u="6A05" b="98 BA"/>
+  <a u="6A06" b="98 BB"/>
+  <a u="6A07" b="98 BC"/>
+  <a u="6A08" b="98 BD"/>
+  <a u="6A09" b="98 BE"/>
+  <a u="6A0A" b="B7 AE"/>
+  <a u="6A0B" b="98 BF"/>
+  <a u="6A0C" b="98 C0"/>
+  <a u="6A0D" b="98 C1"/>
+  <a u="6A0E" b="98 C2"/>
+  <a u="6A0F" b="98 C3"/>
+  <a u="6A10" b="98 C4"/>
+  <a u="6A11" b="98 C5"/>
+  <a u="6A12" b="98 C6"/>
+  <a u="6A13" b="98 C7"/>
+  <a u="6A14" b="98 C8"/>
+  <a u="6A15" b="98 C9"/>
+  <a u="6A16" b="98 CA"/>
+  <a u="6A17" b="E9 CB"/>
+  <a u="6A18" b="E9 CC"/>
+  <a u="6A19" b="98 CB"/>
+  <a u="6A1A" b="98 CC"/>
+  <a u="6A1B" b="98 CD"/>
+  <a u="6A1C" b="98 CE"/>
+  <a u="6A1D" b="98 CF"/>
+  <a u="6A1E" b="98 D0"/>
+  <a u="6A1F" b="D5 C1"/>
+  <a u="6A20" b="98 D1"/>
+  <a u="6A21" b="C4 A3"/>
+  <a u="6A22" b="98 D2"/>
+  <a u="6A23" b="98 D3"/>
+  <a u="6A24" b="98 D4"/>
+  <a u="6A25" b="98 D5"/>
+  <a u="6A26" b="98 D6"/>
+  <a u="6A27" b="98 D7"/>
+  <a u="6A28" b="E9 D8"/>
+  <a u="6A29" b="98 D8"/>
+  <a u="6A2A" b="BA E1"/>
+  <a u="6A2B" b="98 D9"/>
+  <a u="6A2C" b="98 DA"/>
+  <a u="6A2D" b="98 DB"/>
+  <a u="6A2E" b="98 DC"/>
+  <a u="6A2F" b="E9 C9"/>
+  <a u="6A30" b="98 DD"/>
+  <a u="6A31" b="D3 A3"/>
+  <a u="6A32" b="98 DE"/>
+  <a u="6A33" b="98 DF"/>
+  <a u="6A34" b="98 E0"/>
+  <a u="6A35" b="E9 D4"/>
+  <a u="6A36" b="98 E1"/>
+  <a u="6A37" b="98 E2"/>
+  <a u="6A38" b="98 E3"/>
+  <a u="6A39" b="98 E4"/>
+  <a u="6A3A" b="98 E5"/>
+  <a u="6A3B" b="98 E6"/>
+  <a u="6A3C" b="98 E7"/>
+  <a u="6A3D" b="E9 D7"/>
+  <a u="6A3E" b="E9 D0"/>
+  <a u="6A3F" b="98 E8"/>
+  <a u="6A40" b="98 E9"/>
+  <a u="6A41" b="98 EA"/>
+  <a u="6A42" b="98 EB"/>
+  <a u="6A43" b="98 EC"/>
+  <a u="6A44" b="E9 CF"/>
+  <a u="6A45" b="98 ED"/>
+  <a u="6A46" b="98 EE"/>
+  <a u="6A47" b="C7 C1"/>
+  <a u="6A48" b="98 EF"/>
+  <a u="6A49" b="98 F0"/>
+  <a u="6A4A" b="98 F1"/>
+  <a u="6A4B" b="98 F2"/>
+  <a u="6A4C" b="98 F3"/>
+  <a u="6A4D" b="98 F4"/>
+  <a u="6A4E" b="98 F5"/>
+  <a u="6A4F" b="98 F6"/>
+  <a u="6A50" b="E9 D2"/>
+  <a u="6A51" b="98 F7"/>
+  <a u="6A52" b="98 F8"/>
+  <a u="6A53" b="98 F9"/>
+  <a u="6A54" b="98 FA"/>
+  <a u="6A55" b="98 FB"/>
+  <a u="6A56" b="98 FC"/>
+  <a u="6A57" b="98 FD"/>
+  <a u="6A58" b="E9 D9"/>
+  <a u="6A59" b="B3 C8"/>
+  <a u="6A5A" b="98 FE"/>
+  <a u="6A5B" b="E9 D3"/>
+  <a u="6A5C" b="99 40"/>
+  <a u="6A5D" b="99 41"/>
+  <a u="6A5E" b="99 42"/>
+  <a u="6A5F" b="99 43"/>
+  <a u="6A60" b="99 44"/>
+  <a u="6A61" b="CF F0"/>
+  <a u="6A62" b="99 45"/>
+  <a u="6A63" b="99 46"/>
+  <a u="6A64" b="99 47"/>
+  <a u="6A65" b="E9 CD"/>
+  <a u="6A66" b="99 48"/>
+  <a u="6A67" b="99 49"/>
+  <a u="6A68" b="99 4A"/>
+  <a u="6A69" b="99 4B"/>
+  <a u="6A6A" b="99 4C"/>
+  <a u="6A6B" b="99 4D"/>
+  <a u="6A6C" b="99 4E"/>
+  <a u="6A6D" b="99 4F"/>
+  <a u="6A6E" b="99 50"/>
+  <a u="6A6F" b="99 51"/>
+  <a u="6A70" b="99 52"/>
+  <a u="6A71" b="B3 F7"/>
+  <a u="6A72" b="99 53"/>
+  <a u="6A73" b="99 54"/>
+  <a u="6A74" b="99 55"/>
+  <a u="6A75" b="99 56"/>
+  <a u="6A76" b="99 57"/>
+  <a u="6A77" b="99 58"/>
+  <a u="6A78" b="99 59"/>
+  <a u="6A79" b="E9 D6"/>
+  <a u="6A7A" b="99 5A"/>
+  <a u="6A7B" b="99 5B"/>
+  <a u="6A7C" b="E9 DA"/>
+  <a u="6A7D" b="99 5C"/>
+  <a u="6A7E" b="99 5D"/>
+  <a u="6A7F" b="99 5E"/>
+  <a u="6A80" b="CC B4"/>
+  <a u="6A81" b="99 5F"/>
+  <a u="6A82" b="99 60"/>
+  <a u="6A83" b="99 61"/>
+  <a u="6A84" b="CF AD"/>
+  <a u="6A85" b="99 62"/>
+  <a u="6A86" b="99 63"/>
+  <a u="6A87" b="99 64"/>
+  <a u="6A88" b="99 65"/>
+  <a u="6A89" b="99 66"/>
+  <a u="6A8A" b="99 67"/>
+  <a u="6A8B" b="99 68"/>
+  <a u="6A8C" b="99 69"/>
+  <a u="6A8D" b="99 6A"/>
+  <a u="6A8E" b="E9 D5"/>
+  <a u="6A8F" b="99 6B"/>
+  <a u="6A90" b="E9 DC"/>
+  <a u="6A91" b="E9 DB"/>
+  <a u="6A92" b="99 6C"/>
+  <a u="6A93" b="99 6D"/>
+  <a u="6A94" b="99 6E"/>
+  <a u="6A95" b="99 6F"/>
+  <a u="6A96" b="99 70"/>
+  <a u="6A97" b="E9 DE"/>
+  <a u="6A98" b="99 71"/>
+  <a u="6A99" b="99 72"/>
+  <a u="6A9A" b="99 73"/>
+  <a u="6A9B" b="99 74"/>
+  <a u="6A9C" b="99 75"/>
+  <a u="6A9D" b="99 76"/>
+  <a u="6A9E" b="99 77"/>
+  <a u="6A9F" b="99 78"/>
+  <a u="6AA0" b="E9 D1"/>
+  <a u="6AA1" b="99 79"/>
+  <a u="6AA2" b="99 7A"/>
+  <a u="6AA3" b="99 7B"/>
+  <a u="6AA4" b="99 7C"/>
+  <a u="6AA5" b="99 7D"/>
+  <a u="6AA6" b="99 7E"/>
+  <a u="6AA7" b="99 80"/>
+  <a u="6AA8" b="99 81"/>
+  <a u="6AA9" b="E9 DD"/>
+  <a u="6AAA" b="99 82"/>
+  <a u="6AAB" b="E9 DF"/>
+  <a u="6AAC" b="C3 CA"/>
+  <a u="6AAD" b="99 83"/>
+  <a u="6AAE" b="99 84"/>
+  <a u="6AAF" b="99 85"/>
+  <a u="6AB0" b="99 86"/>
+  <a u="6AB1" b="99 87"/>
+  <a u="6AB2" b="99 88"/>
+  <a u="6AB3" b="99 89"/>
+  <a u="6AB4" b="99 8A"/>
+  <a u="6AB5" b="99 8B"/>
+  <a u="6AB6" b="99 8C"/>
+  <a u="6AB7" b="99 8D"/>
+  <a u="6AB8" b="99 8E"/>
+  <a u="6AB9" b="99 8F"/>
+  <a u="6ABA" b="99 90"/>
+  <a u="6ABB" b="99 91"/>
+  <a u="6ABC" b="99 92"/>
+  <a u="6ABD" b="99 93"/>
+  <a u="6ABE" b="99 94"/>
+  <a u="6ABF" b="99 95"/>
+  <a u="6AC0" b="99 96"/>
+  <a u="6AC1" b="99 97"/>
+  <a u="6AC2" b="99 98"/>
+  <a u="6AC3" b="99 99"/>
+  <a u="6AC4" b="99 9A"/>
+  <a u="6AC5" b="99 9B"/>
+  <a u="6AC6" b="99 9C"/>
+  <a u="6AC7" b="99 9D"/>
+  <a u="6AC8" b="99 9E"/>
+  <a u="6AC9" b="99 9F"/>
+  <a u="6ACA" b="99 A0"/>
+  <a u="6ACB" b="99 A1"/>
+  <a u="6ACC" b="99 A2"/>
+  <a u="6ACD" b="99 A3"/>
+  <a u="6ACE" b="99 A4"/>
+  <a u="6ACF" b="99 A5"/>
+  <a u="6AD0" b="99 A6"/>
+  <a u="6AD1" b="99 A7"/>
+  <a u="6AD2" b="99 A8"/>
+  <a u="6AD3" b="99 A9"/>
+  <a u="6AD4" b="99 AA"/>
+  <a u="6AD5" b="99 AB"/>
+  <a u="6AD6" b="99 AC"/>
+  <a u="6AD7" b="99 AD"/>
+  <a u="6AD8" b="99 AE"/>
+  <a u="6AD9" b="99 AF"/>
+  <a u="6ADA" b="99 B0"/>
+  <a u="6ADB" b="99 B1"/>
+  <a u="6ADC" b="99 B2"/>
+  <a u="6ADD" b="99 B3"/>
+  <a u="6ADE" b="99 B4"/>
+  <a u="6ADF" b="99 B5"/>
+  <a u="6AE0" b="99 B6"/>
+  <a u="6AE1" b="99 B7"/>
+  <a u="6AE2" b="99 B8"/>
+  <a u="6AE3" b="99 B9"/>
+  <a u="6AE4" b="99 BA"/>
+  <a u="6AE5" b="99 BB"/>
+  <a u="6AE6" b="99 BC"/>
+  <a u="6AE7" b="99 BD"/>
+  <a u="6AE8" b="99 BE"/>
+  <a u="6AE9" b="99 BF"/>
+  <a u="6AEA" b="99 C0"/>
+  <a u="6AEB" b="99 C1"/>
+  <a u="6AEC" b="99 C2"/>
+  <a u="6AED" b="99 C3"/>
+  <a u="6AEE" b="99 C4"/>
+  <a u="6AEF" b="99 C5"/>
+  <a u="6AF0" b="99 C6"/>
+  <a u="6AF1" b="99 C7"/>
+  <a u="6AF2" b="99 C8"/>
+  <a u="6AF3" b="99 C9"/>
+  <a u="6AF4" b="99 CA"/>
+  <a u="6AF5" b="99 CB"/>
+  <a u="6AF6" b="99 CC"/>
+  <a u="6AF7" b="99 CD"/>
+  <a u="6AF8" b="99 CE"/>
+  <a u="6AF9" b="99 CF"/>
+  <a u="6AFA" b="99 D0"/>
+  <a u="6AFB" b="99 D1"/>
+  <a u="6AFC" b="99 D2"/>
+  <a u="6AFD" b="99 D3"/>
+  <a u="6AFE" b="99 D4"/>
+  <a u="6AFF" b="99 D5"/>
+  <a u="6B00" b="99 D6"/>
+  <a u="6B01" b="99 D7"/>
+  <a u="6B02" b="99 D8"/>
+  <a u="6B03" b="99 D9"/>
+  <a u="6B04" b="99 DA"/>
+  <a u="6B05" b="99 DB"/>
+  <a u="6B06" b="99 DC"/>
+  <a u="6B07" b="99 DD"/>
+  <a u="6B08" b="99 DE"/>
+  <a u="6B09" b="99 DF"/>
+  <a u="6B0A" b="99 E0"/>
+  <a u="6B0B" b="99 E1"/>
+  <a u="6B0C" b="99 E2"/>
+  <a u="6B0D" b="99 E3"/>
+  <a u="6B0E" b="99 E4"/>
+  <a u="6B0F" b="99 E5"/>
+  <a u="6B10" b="99 E6"/>
+  <a u="6B11" b="99 E7"/>
+  <a u="6B12" b="99 E8"/>
+  <a u="6B13" b="99 E9"/>
+  <a u="6B14" b="99 EA"/>
+  <a u="6B15" b="99 EB"/>
+  <a u="6B16" b="99 EC"/>
+  <a u="6B17" b="99 ED"/>
+  <a u="6B18" b="99 EE"/>
+  <a u="6B19" b="99 EF"/>
+  <a u="6B1A" b="99 F0"/>
+  <a u="6B1B" b="99 F1"/>
+  <a u="6B1C" b="99 F2"/>
+  <a u="6B1D" b="99 F3"/>
+  <a u="6B1E" b="99 F4"/>
+  <a u="6B1F" b="99 F5"/>
+  <a u="6B20" b="C7 B7"/>
+  <a u="6B21" b="B4 CE"/>
+  <a u="6B22" b="BB B6"/>
+  <a u="6B23" b="D0 C0"/>
+  <a u="6B24" b="EC A3"/>
+  <a u="6B25" b="99 F6"/>
+  <a u="6B26" b="99 F7"/>
+  <a u="6B27" b="C5 B7"/>
+  <a u="6B28" b="99 F8"/>
+  <a u="6B29" b="99 F9"/>
+  <a u="6B2A" b="99 FA"/>
+  <a u="6B2B" b="99 FB"/>
+  <a u="6B2C" b="99 FC"/>
+  <a u="6B2D" b="99 FD"/>
+  <a u="6B2E" b="99 FE"/>
+  <a u="6B2F" b="9A 40"/>
+  <a u="6B30" b="9A 41"/>
+  <a u="6B31" b="9A 42"/>
+  <a u="6B32" b="D3 FB"/>
+  <a u="6B33" b="9A 43"/>
+  <a u="6B34" b="9A 44"/>
+  <a u="6B35" b="9A 45"/>
+  <a u="6B36" b="9A 46"/>
+  <a u="6B37" b="EC A4"/>
+  <a u="6B38" b="9A 47"/>
+  <a u="6B39" b="EC A5"/>
+  <a u="6B3A" b="C6 DB"/>
+  <a u="6B3B" b="9A 48"/>
+  <a u="6B3C" b="9A 49"/>
+  <a u="6B3D" b="9A 4A"/>
+  <a u="6B3E" b="BF EE"/>
+  <a u="6B3F" b="9A 4B"/>
+  <a u="6B40" b="9A 4C"/>
+  <a u="6B41" b="9A 4D"/>
+  <a u="6B42" b="9A 4E"/>
+  <a u="6B43" b="EC A6"/>
+  <a u="6B44" b="9A 4F"/>
+  <a u="6B45" b="9A 50"/>
+  <a u="6B46" b="EC A7"/>
+  <a u="6B47" b="D0 AA"/>
+  <a u="6B48" b="9A 51"/>
+  <a u="6B49" b="C7 B8"/>
+  <a u="6B4A" b="9A 52"/>
+  <a u="6B4B" b="9A 53"/>
+  <a u="6B4C" b="B8 E8"/>
+  <a u="6B4D" b="9A 54"/>
+  <a u="6B4E" b="9A 55"/>
+  <a u="6B4F" b="9A 56"/>
+  <a u="6B50" b="9A 57"/>
+  <a u="6B51" b="9A 58"/>
+  <a u="6B52" b="9A 59"/>
+  <a u="6B53" b="9A 5A"/>
+  <a u="6B54" b="9A 5B"/>
+  <a u="6B55" b="9A 5C"/>
+  <a u="6B56" b="9A 5D"/>
+  <a u="6B57" b="9A 5E"/>
+  <a u="6B58" b="9A 5F"/>
+  <a u="6B59" b="EC A8"/>
+  <a u="6B5A" b="9A 60"/>
+  <a u="6B5B" b="9A 61"/>
+  <a u="6B5C" b="9A 62"/>
+  <a u="6B5D" b="9A 63"/>
+  <a u="6B5E" b="9A 64"/>
+  <a u="6B5F" b="9A 65"/>
+  <a u="6B60" b="9A 66"/>
+  <a u="6B61" b="9A 67"/>
+  <a u="6B62" b="D6 B9"/>
+  <a u="6B63" b="D5 FD"/>
+  <a u="6B64" b="B4 CB"/>
+  <a u="6B65" b="B2 BD"/>
+  <a u="6B66" b="CE E4"/>
+  <a u="6B67" b="C6 E7"/>
+  <a u="6B68" b="9A 68"/>
+  <a u="6B69" b="9A 69"/>
+  <a u="6B6A" b="CD E1"/>
+  <a u="6B6B" b="9A 6A"/>
+  <a u="6B6C" b="9A 6B"/>
+  <a u="6B6D" b="9A 6C"/>
+  <a u="6B6E" b="9A 6D"/>
+  <a u="6B6F" b="9A 6E"/>
+  <a u="6B70" b="9A 6F"/>
+  <a u="6B71" b="9A 70"/>
+  <a u="6B72" b="9A 71"/>
+  <a u="6B73" b="9A 72"/>
+  <a u="6B74" b="9A 73"/>
+  <a u="6B75" b="9A 74"/>
+  <a u="6B76" b="9A 75"/>
+  <a u="6B77" b="9A 76"/>
+  <a u="6B78" b="9A 77"/>
+  <a u="6B79" b="B4 F5"/>
+  <a u="6B7A" b="9A 78"/>
+  <a u="6B7B" b="CB C0"/>
+  <a u="6B7C" b="BC DF"/>
+  <a u="6B7D" b="9A 79"/>
+  <a u="6B7E" b="9A 7A"/>
+  <a u="6B7F" b="9A 7B"/>
+  <a u="6B80" b="9A 7C"/>
+  <a u="6B81" b="E9 E2"/>
+  <a u="6B82" b="E9 E3"/>
+  <a u="6B83" b="D1 EA"/>
+  <a u="6B84" b="E9 E5"/>
+  <a u="6B85" b="9A 7D"/>
+  <a u="6B86" b="B4 F9"/>
+  <a u="6B87" b="E9 E4"/>
+  <a u="6B88" b="9A 7E"/>
+  <a u="6B89" b="D1 B3"/>
+  <a u="6B8A" b="CA E2"/>
+  <a u="6B8B" b="B2 D0"/>
+  <a u="6B8C" b="9A 80"/>
+  <a u="6B8D" b="E9 E8"/>
+  <a u="6B8E" b="9A 81"/>
+  <a u="6B8F" b="9A 82"/>
+  <a u="6B90" b="9A 83"/>
+  <a u="6B91" b="9A 84"/>
+  <a u="6B92" b="E9 E6"/>
+  <a u="6B93" b="E9 E7"/>
+  <a u="6B94" b="9A 85"/>
+  <a u="6B95" b="9A 86"/>
+  <a u="6B96" b="D6 B3"/>
+  <a u="6B97" b="9A 87"/>
+  <a u="6B98" b="9A 88"/>
+  <a u="6B99" b="9A 89"/>
+  <a u="6B9A" b="E9 E9"/>
+  <a u="6B9B" b="E9 EA"/>
+  <a u="6B9C" b="9A 8A"/>
+  <a u="6B9D" b="9A 8B"/>
+  <a u="6B9E" b="9A 8C"/>
+  <a u="6B9F" b="9A 8D"/>
+  <a u="6BA0" b="9A 8E"/>
+  <a u="6BA1" b="E9 EB"/>
+  <a u="6BA2" b="9A 8F"/>
+  <a u="6BA3" b="9A 90"/>
+  <a u="6BA4" b="9A 91"/>
+  <a u="6BA5" b="9A 92"/>
+  <a u="6BA6" b="9A 93"/>
+  <a u="6BA7" b="9A 94"/>
+  <a u="6BA8" b="9A 95"/>
+  <a u="6BA9" b="9A 96"/>
+  <a u="6BAA" b="E9 EC"/>
+  <a u="6BAB" b="9A 97"/>
+  <a u="6BAC" b="9A 98"/>
+  <a u="6BAD" b="9A 99"/>
+  <a u="6BAE" b="9A 9A"/>
+  <a u="6BAF" b="9A 9B"/>
+  <a u="6BB0" b="9A 9C"/>
+  <a u="6BB1" b="9A 9D"/>
+  <a u="6BB2" b="9A 9E"/>
+  <a u="6BB3" b="EC AF"/>
+  <a u="6BB4" b="C5 B9"/>
+  <a u="6BB5" b="B6 CE"/>
+  <a u="6BB6" b="9A 9F"/>
+  <a u="6BB7" b="D2 F3"/>
+  <a u="6BB8" b="9A A0"/>
+  <a u="6BB9" b="9A A1"/>
+  <a u="6BBA" b="9A A2"/>
+  <a u="6BBB" b="9A A3"/>
+  <a u="6BBC" b="9A A4"/>
+  <a u="6BBD" b="9A A5"/>
+  <a u="6BBE" b="9A A6"/>
+  <a u="6BBF" b="B5 EE"/>
+  <a u="6BC0" b="9A A7"/>
+  <a u="6BC1" b="BB D9"/>
+  <a u="6BC2" b="EC B1"/>
+  <a u="6BC3" b="9A A8"/>
+  <a u="6BC4" b="9A A9"/>
+  <a u="6BC5" b="D2 E3"/>
+  <a u="6BC6" b="9A AA"/>
+  <a u="6BC7" b="9A AB"/>
+  <a u="6BC8" b="9A AC"/>
+  <a u="6BC9" b="9A AD"/>
+  <a u="6BCA" b="9A AE"/>
+  <a u="6BCB" b="CE E3"/>
+  <a u="6BCC" b="9A AF"/>
+  <a u="6BCD" b="C4 B8"/>
+  <a u="6BCE" b="9A B0"/>
+  <a u="6BCF" b="C3 BF"/>
+  <a u="6BD0" b="9A B1"/>
+  <a u="6BD1" b="9A B2"/>
+  <a u="6BD2" b="B6 BE"/>
+  <a u="6BD3" b="D8 B9"/>
+  <a u="6BD4" b="B1 C8"/>
+  <a u="6BD5" b="B1 CF"/>
+  <a u="6BD6" b="B1 D1"/>
+  <a u="6BD7" b="C5 FE"/>
+  <a u="6BD8" b="9A B3"/>
+  <a u="6BD9" b="B1 D0"/>
+  <a u="6BDA" b="9A B4"/>
+  <a u="6BDB" b="C3 AB"/>
+  <a u="6BDC" b="9A B5"/>
+  <a u="6BDD" b="9A B6"/>
+  <a u="6BDE" b="9A B7"/>
+  <a u="6BDF" b="9A B8"/>
+  <a u="6BE0" b="9A B9"/>
+  <a u="6BE1" b="D5 B1"/>
+  <a u="6BE2" b="9A BA"/>
+  <a u="6BE3" b="9A BB"/>
+  <a u="6BE4" b="9A BC"/>
+  <a u="6BE5" b="9A BD"/>
+  <a u="6BE6" b="9A BE"/>
+  <a u="6BE7" b="9A BF"/>
+  <a u="6BE8" b="9A C0"/>
+  <a u="6BE9" b="9A C1"/>
+  <a u="6BEA" b="EB A4"/>
+  <a u="6BEB" b="BA C1"/>
+  <a u="6BEC" b="9A C2"/>
+  <a u="6BED" b="9A C3"/>
+  <a u="6BEE" b="9A C4"/>
+  <a u="6BEF" b="CC BA"/>
+  <a u="6BF0" b="9A C5"/>
+  <a u="6BF1" b="9A C6"/>
+  <a u="6BF2" b="9A C7"/>
+  <a u="6BF3" b="EB A5"/>
+  <a u="6BF4" b="9A C8"/>
+  <a u="6BF5" b="EB A7"/>
+  <a u="6BF6" b="9A C9"/>
+  <a u="6BF7" b="9A CA"/>
+  <a u="6BF8" b="9A CB"/>
+  <a u="6BF9" b="EB A8"/>
+  <a u="6BFA" b="9A CC"/>
+  <a u="6BFB" b="9A CD"/>
+  <a u="6BFC" b="9A CE"/>
+  <a u="6BFD" b="EB A6"/>
+  <a u="6BFE" b="9A CF"/>
+  <a u="6BFF" b="9A D0"/>
+  <a u="6C00" b="9A D1"/>
+  <a u="6C01" b="9A D2"/>
+  <a u="6C02" b="9A D3"/>
+  <a u="6C03" b="9A D4"/>
+  <a u="6C04" b="9A D5"/>
+  <a u="6C05" b="EB A9"/>
+  <a u="6C06" b="EB AB"/>
+  <a u="6C07" b="EB AA"/>
+  <a u="6C08" b="9A D6"/>
+  <a u="6C09" b="9A D7"/>
+  <a u="6C0A" b="9A D8"/>
+  <a u="6C0B" b="9A D9"/>
+  <a u="6C0C" b="9A DA"/>
+  <a u="6C0D" b="EB AC"/>
+  <a u="6C0E" b="9A DB"/>
+  <a u="6C0F" b="CA CF"/>
+  <a u="6C10" b="D8 B5"/>
+  <a u="6C11" b="C3 F1"/>
+  <a u="6C12" b="9A DC"/>
+  <a u="6C13" b="C3 A5"/>
+  <a u="6C14" b="C6 F8"/>
+  <a u="6C15" b="EB AD"/>
+  <a u="6C16" b="C4 CA"/>
+  <a u="6C17" b="9A DD"/>
+  <a u="6C18" b="EB AE"/>
+  <a u="6C19" b="EB AF"/>
+  <a u="6C1A" b="EB B0"/>
+  <a u="6C1B" b="B7 D5"/>
+  <a u="6C1C" b="9A DE"/>
+  <a u="6C1D" b="9A DF"/>
+  <a u="6C1E" b="9A E0"/>
+  <a u="6C1F" b="B7 FA"/>
+  <a u="6C20" b="9A E1"/>
+  <a u="6C21" b="EB B1"/>
+  <a u="6C22" b="C7 E2"/>
+  <a u="6C23" b="9A E2"/>
+  <a u="6C24" b="EB B3"/>
+  <a u="6C25" b="9A E3"/>
+  <a u="6C26" b="BA A4"/>
+  <a u="6C27" b="D1 F5"/>
+  <a u="6C28" b="B0 B1"/>
+  <a u="6C29" b="EB B2"/>
+  <a u="6C2A" b="EB B4"/>
+  <a u="6C2B" b="9A E4"/>
+  <a u="6C2C" b="9A E5"/>
+  <a u="6C2D" b="9A E6"/>
+  <a u="6C2E" b="B5 AA"/>
+  <a u="6C2F" b="C2 C8"/>
+  <a u="6C30" b="C7 E8"/>
+  <a u="6C31" b="9A E7"/>
+  <a u="6C32" b="EB B5"/>
+  <a u="6C33" b="9A E8"/>
+  <a u="6C34" b="CB AE"/>
+  <a u="6C35" b="E3 DF"/>
+  <a u="6C36" b="9A E9"/>
+  <a u="6C37" b="9A EA"/>
+  <a u="6C38" b="D3 C0"/>
+  <a u="6C39" b="9A EB"/>
+  <a u="6C3A" b="9A EC"/>
+  <a u="6C3B" b="9A ED"/>
+  <a u="6C3C" b="9A EE"/>
+  <a u="6C3D" b="D9 DB"/>
+  <a u="6C3E" b="9A EF"/>
+  <a u="6C3F" b="9A F0"/>
+  <a u="6C40" b="CD A1"/>
+  <a u="6C41" b="D6 AD"/>
+  <a u="6C42" b="C7 F3"/>
+  <a u="6C43" b="9A F1"/>
+  <a u="6C44" b="9A F2"/>
+  <a u="6C45" b="9A F3"/>
+  <a u="6C46" b="D9 E0"/>
+  <a u="6C47" b="BB E3"/>
+  <a u="6C48" b="9A F4"/>
+  <a u="6C49" b="BA BA"/>
+  <a u="6C4A" b="E3 E2"/>
+  <a u="6C4B" b="9A F5"/>
+  <a u="6C4C" b="9A F6"/>
+  <a u="6C4D" b="9A F7"/>
+  <a u="6C4E" b="9A F8"/>
+  <a u="6C4F" b="9A F9"/>
+  <a u="6C50" b="CF AB"/>
+  <a u="6C51" b="9A FA"/>
+  <a u="6C52" b="9A FB"/>
+  <a u="6C53" b="9A FC"/>
+  <a u="6C54" b="E3 E0"/>
+  <a u="6C55" b="C9 C7"/>
+  <a u="6C56" b="9A FD"/>
+  <a u="6C57" b="BA B9"/>
+  <a u="6C58" b="9A FE"/>
+  <a u="6C59" b="9B 40"/>
+  <a u="6C5A" b="9B 41"/>
+  <a u="6C5B" b="D1 B4"/>
+  <a u="6C5C" b="E3 E1"/>
+  <a u="6C5D" b="C8 EA"/>
+  <a u="6C5E" b="B9 AF"/>
+  <a u="6C5F" b="BD AD"/>
+  <a u="6C60" b="B3 D8"/>
+  <a u="6C61" b="CE DB"/>
+  <a u="6C62" b="9B 42"/>
+  <a u="6C63" b="9B 43"/>
+  <a u="6C64" b="CC C0"/>
+  <a u="6C65" b="9B 44"/>
+  <a u="6C66" b="9B 45"/>
+  <a u="6C67" b="9B 46"/>
+  <a u="6C68" b="E3 E8"/>
+  <a u="6C69" b="E3 E9"/>
+  <a u="6C6A" b="CD F4"/>
+  <a u="6C6B" b="9B 47"/>
+  <a u="6C6C" b="9B 48"/>
+  <a u="6C6D" b="9B 49"/>
+  <a u="6C6E" b="9B 4A"/>
+  <a u="6C6F" b="9B 4B"/>
+  <a u="6C70" b="CC AD"/>
+  <a u="6C71" b="9B 4C"/>
+  <a u="6C72" b="BC B3"/>
+  <a u="6C73" b="9B 4D"/>
+  <a u="6C74" b="E3 EA"/>
+  <a u="6C75" b="9B 4E"/>
+  <a u="6C76" b="E3 EB"/>
+  <a u="6C77" b="9B 4F"/>
+  <a u="6C78" b="9B 50"/>
+  <a u="6C79" b="D0 DA"/>
+  <a u="6C7A" b="9B 51"/>
+  <a u="6C7B" b="9B 52"/>
+  <a u="6C7C" b="9B 53"/>
+  <a u="6C7D" b="C6 FB"/>
+  <a u="6C7E" b="B7 DA"/>
+  <a u="6C7F" b="9B 54"/>
+  <a u="6C80" b="9B 55"/>
+  <a u="6C81" b="C7 DF"/>
+  <a u="6C82" b="D2 CA"/>
+  <a u="6C83" b="CE D6"/>
+  <a u="6C84" b="9B 56"/>
+  <a u="6C85" b="E3 E4"/>
+  <a u="6C86" b="E3 EC"/>
+  <a u="6C87" b="9B 57"/>
+  <a u="6C88" b="C9 F2"/>
+  <a u="6C89" b="B3 C1"/>
+  <a u="6C8A" b="9B 58"/>
+  <a u="6C8B" b="9B 59"/>
+  <a u="6C8C" b="E3 E7"/>
+  <a u="6C8D" b="9B 5A"/>
+  <a u="6C8E" b="9B 5B"/>
+  <a u="6C8F" b="C6 E3"/>
+  <a u="6C90" b="E3 E5"/>
+  <a u="6C91" b="9B 5C"/>
+  <a u="6C92" b="9B 5D"/>
+  <a u="6C93" b="ED B3"/>
+  <a u="6C94" b="E3 E6"/>
+  <a u="6C95" b="9B 5E"/>
+  <a u="6C96" b="9B 5F"/>
+  <a u="6C97" b="9B 60"/>
+  <a u="6C98" b="9B 61"/>
+  <a u="6C99" b="C9 B3"/>
+  <a u="6C9A" b="9B 62"/>
+  <a u="6C9B" b="C5 E6"/>
+  <a u="6C9C" b="9B 63"/>
+  <a u="6C9D" b="9B 64"/>
+  <a u="6C9E" b="9B 65"/>
+  <a u="6C9F" b="B9 B5"/>
+  <a u="6CA0" b="9B 66"/>
+  <a u="6CA1" b="C3 BB"/>
+  <a u="6CA2" b="9B 67"/>
+  <a u="6CA3" b="E3 E3"/>
+  <a u="6CA4" b="C5 BD"/>
+  <a u="6CA5" b="C1 A4"/>
+  <a u="6CA6" b="C2 D9"/>
+  <a u="6CA7" b="B2 D7"/>
+  <a u="6CA8" b="9B 68"/>
+  <a u="6CA9" b="E3 ED"/>
+  <a u="6CAA" b="BB A6"/>
+  <a u="6CAB" b="C4 AD"/>
+  <a u="6CAC" b="9B 69"/>
+  <a u="6CAD" b="E3 F0"/>
+  <a u="6CAE" b="BE DA"/>
+  <a u="6CAF" b="9B 6A"/>
+  <a u="6CB0" b="9B 6B"/>
+  <a u="6CB1" b="E3 FB"/>
+  <a u="6CB2" b="E3 F5"/>
+  <a u="6CB3" b="BA D3"/>
+  <a u="6CB4" b="9B 6C"/>
+  <a u="6CB5" b="9B 6D"/>
+  <a u="6CB6" b="9B 6E"/>
+  <a u="6CB7" b="9B 6F"/>
+  <a u="6CB8" b="B7 D0"/>
+  <a u="6CB9" b="D3 CD"/>
+  <a u="6CBA" b="9B 70"/>
+  <a u="6CBB" b="D6 CE"/>
+  <a u="6CBC" b="D5 D3"/>
+  <a u="6CBD" b="B9 C1"/>
+  <a u="6CBE" b="D5 B4"/>
+  <a u="6CBF" b="D1 D8"/>
+  <a u="6CC0" b="9B 71"/>
+  <a u="6CC1" b="9B 72"/>
+  <a u="6CC2" b="9B 73"/>
+  <a u="6CC3" b="9B 74"/>
+  <a u="6CC4" b="D0 B9"/>
+  <a u="6CC5" b="C7 F6"/>
+  <a u="6CC6" b="9B 75"/>
+  <a u="6CC7" b="9B 76"/>
+  <a u="6CC8" b="9B 77"/>
+  <a u="6CC9" b="C8 AA"/>
+  <a u="6CCA" b="B2 B4"/>
+  <a u="6CCB" b="9B 78"/>
+  <a u="6CCC" b="C3 DA"/>
+  <a u="6CCD" b="9B 79"/>
+  <a u="6CCE" b="9B 7A"/>
+  <a u="6CCF" b="9B 7B"/>
+  <a u="6CD0" b="E3 EE"/>
+  <a u="6CD1" b="9B 7C"/>
+  <a u="6CD2" b="9B 7D"/>
+  <a u="6CD3" b="E3 FC"/>
+  <a u="6CD4" b="E3 EF"/>
+  <a u="6CD5" b="B7 A8"/>
+  <a u="6CD6" b="E3 F7"/>
+  <a u="6CD7" b="E3 F4"/>
+  <a u="6CD8" b="9B 7E"/>
+  <a u="6CD9" b="9B 80"/>
+  <a u="6CDA" b="9B 81"/>
+  <a u="6CDB" b="B7 BA"/>
+  <a u="6CDC" b="9B 82"/>
+  <a u="6CDD" b="9B 83"/>
+  <a u="6CDE" b="C5 A2"/>
+  <a u="6CDF" b="9B 84"/>
+  <a u="6CE0" b="E3 F6"/>
+  <a u="6CE1" b="C5 DD"/>
+  <a u="6CE2" b="B2 A8"/>
+  <a u="6CE3" b="C6 FC"/>
+  <a u="6CE4" b="9B 85"/>
+  <a u="6CE5" b="C4 E0"/>
+  <a u="6CE6" b="9B 86"/>
+  <a u="6CE7" b="9B 87"/>
+  <a u="6CE8" b="D7 A2"/>
+  <a u="6CE9" b="9B 88"/>
+  <a u="6CEA" b="C0 E1"/>
+  <a u="6CEB" b="E3 F9"/>
+  <a u="6CEC" b="9B 89"/>
+  <a u="6CED" b="9B 8A"/>
+  <a u="6CEE" b="E3 FA"/>
+  <a u="6CEF" b="E3 FD"/>
+  <a u="6CF0" b="CC A9"/>
+  <a u="6CF1" b="E3 F3"/>
+  <a u="6CF2" b="9B 8B"/>
+  <a u="6CF3" b="D3 BE"/>
+  <a u="6CF4" b="9B 8C"/>
+  <a u="6CF5" b="B1 C3"/>
+  <a u="6CF6" b="ED B4"/>
+  <a u="6CF7" b="E3 F1"/>
+  <a u="6CF8" b="E3 F2"/>
+  <a u="6CF9" b="9B 8D"/>
+  <a u="6CFA" b="E3 F8"/>
+  <a u="6CFB" b="D0 BA"/>
+  <a u="6CFC" b="C6 C3"/>
+  <a u="6CFD" b="D4 F3"/>
+  <a u="6CFE" b="E3 FE"/>
+  <a u="6CFF" b="9B 8E"/>
+  <a u="6D00" b="9B 8F"/>
+  <a u="6D01" b="BD E0"/>
+  <a u="6D02" b="9B 90"/>
+  <a u="6D03" b="9B 91"/>
+  <a u="6D04" b="E4 A7"/>
+  <a u="6D05" b="9B 92"/>
+  <a u="6D06" b="9B 93"/>
+  <a u="6D07" b="E4 A6"/>
+  <a u="6D08" b="9B 94"/>
+  <a u="6D09" b="9B 95"/>
+  <a u="6D0A" b="9B 96"/>
+  <a u="6D0B" b="D1 F3"/>
+  <a u="6D0C" b="E4 A3"/>
+  <a u="6D0D" b="9B 97"/>
+  <a u="6D0E" b="E4 A9"/>
+  <a u="6D0F" b="9B 98"/>
+  <a u="6D10" b="9B 99"/>
+  <a u="6D11" b="9B 9A"/>
+  <a u="6D12" b="C8 F7"/>
+  <a u="6D13" b="9B 9B"/>
+  <a u="6D14" b="9B 9C"/>
+  <a u="6D15" b="9B 9D"/>
+  <a u="6D16" b="9B 9E"/>
+  <a u="6D17" b="CF B4"/>
+  <a u="6D18" b="9B 9F"/>
+  <a u="6D19" b="E4 A8"/>
+  <a u="6D1A" b="E4 AE"/>
+  <a u="6D1B" b="C2 E5"/>
+  <a u="6D1C" b="9B A0"/>
+  <a u="6D1D" b="9B A1"/>
+  <a u="6D1E" b="B6 B4"/>
+  <a u="6D1F" b="9B A2"/>
+  <a u="6D20" b="9B A3"/>
+  <a u="6D21" b="9B A4"/>
+  <a u="6D22" b="9B A5"/>
+  <a u="6D23" b="9B A6"/>
+  <a u="6D24" b="9B A7"/>
+  <a u="6D25" b="BD F2"/>
+  <a u="6D26" b="9B A8"/>
+  <a u="6D27" b="E4 A2"/>
+  <a u="6D28" b="9B A9"/>
+  <a u="6D29" b="9B AA"/>
+  <a u="6D2A" b="BA E9"/>
+  <a u="6D2B" b="E4 AA"/>
+  <a u="6D2C" b="9B AB"/>
+  <a u="6D2D" b="9B AC"/>
+  <a u="6D2E" b="E4 AC"/>
+  <a u="6D2F" b="9B AD"/>
+  <a u="6D30" b="9B AE"/>
+  <a u="6D31" b="B6 FD"/>
+  <a u="6D32" b="D6 DE"/>
+  <a u="6D33" b="E4 B2"/>
+  <a u="6D34" b="9B AF"/>
+  <a u="6D35" b="E4 AD"/>
+  <a u="6D36" b="9B B0"/>
+  <a u="6D37" b="9B B1"/>
+  <a u="6D38" b="9B B2"/>
+  <a u="6D39" b="E4 A1"/>
+  <a u="6D3A" b="9B B3"/>
+  <a u="6D3B" b="BB EE"/>
+  <a u="6D3C" b="CD DD"/>
+  <a u="6D3D" b="C7 A2"/>
+  <a u="6D3E" b="C5 C9"/>
+  <a u="6D3F" b="9B B4"/>
+  <a u="6D40" b="9B B5"/>
+  <a u="6D41" b="C1 F7"/>
+  <a u="6D42" b="9B B6"/>
+  <a u="6D43" b="E4 A4"/>
+  <a u="6D44" b="9B B7"/>
+  <a u="6D45" b="C7 B3"/>
+  <a u="6D46" b="BD AC"/>
+  <a u="6D47" b="BD BD"/>
+  <a u="6D48" b="E4 A5"/>
+  <a u="6D49" b="9B B8"/>
+  <a u="6D4A" b="D7 C7"/>
+  <a u="6D4B" b="B2 E2"/>
+  <a u="6D4C" b="9B B9"/>
+  <a u="6D4D" b="E4 AB"/>
+  <a u="6D4E" b="BC C3"/>
+  <a u="6D4F" b="E4 AF"/>
+  <a u="6D50" b="9B BA"/>
+  <a u="6D51" b="BB EB"/>
+  <a u="6D52" b="E4 B0"/>
+  <a u="6D53" b="C5 A8"/>
+  <a u="6D54" b="E4 B1"/>
+  <a u="6D55" b="9B BB"/>
+  <a u="6D56" b="9B BC"/>
+  <a u="6D57" b="9B BD"/>
+  <a u="6D58" b="9B BE"/>
+  <a u="6D59" b="D5 E3"/>
+  <a u="6D5A" b="BF A3"/>
+  <a u="6D5B" b="9B BF"/>
+  <a u="6D5C" b="E4 BA"/>
+  <a u="6D5D" b="9B C0"/>
+  <a u="6D5E" b="E4 B7"/>
+  <a u="6D5F" b="9B C1"/>
+  <a u="6D60" b="E4 BB"/>
+  <a u="6D61" b="9B C2"/>
+  <a u="6D62" b="9B C3"/>
+  <a u="6D63" b="E4 BD"/>
+  <a u="6D64" b="9B C4"/>
+  <a u="6D65" b="9B C5"/>
+  <a u="6D66" b="C6 D6"/>
+  <a u="6D67" b="9B C6"/>
+  <a u="6D68" b="9B C7"/>
+  <a u="6D69" b="BA C6"/>
+  <a u="6D6A" b="C0 CB"/>
+  <a u="6D6B" b="9B C8"/>
+  <a u="6D6C" b="9B C9"/>
+  <a u="6D6D" b="9B CA"/>
+  <a u="6D6E" b="B8 A1"/>
+  <a u="6D6F" b="E4 B4"/>
+  <a u="6D70" b="9B CB"/>
+  <a u="6D71" b="9B CC"/>
+  <a u="6D72" b="9B CD"/>
+  <a u="6D73" b="9B CE"/>
+  <a u="6D74" b="D4 A1"/>
+  <a u="6D75" b="9B CF"/>
+  <a u="6D76" b="9B D0"/>
+  <a u="6D77" b="BA A3"/>
+  <a u="6D78" b="BD FE"/>
+  <a u="6D79" b="9B D1"/>
+  <a u="6D7A" b="9B D2"/>
+  <a u="6D7B" b="9B D3"/>
+  <a u="6D7C" b="E4 BC"/>
+  <a u="6D7D" b="9B D4"/>
+  <a u="6D7E" b="9B D5"/>
+  <a u="6D7F" b="9B D6"/>
+  <a u="6D80" b="9B D7"/>
+  <a u="6D81" b="9B D8"/>
+  <a u="6D82" b="CD BF"/>
+  <a u="6D83" b="9B D9"/>
+  <a u="6D84" b="9B DA"/>
+  <a u="6D85" b="C4 F9"/>
+  <a u="6D86" b="9B DB"/>
+  <a u="6D87" b="9B DC"/>
+  <a u="6D88" b="CF FB"/>
+  <a u="6D89" b="C9 E6"/>
+  <a u="6D8A" b="9B DD"/>
+  <a u="6D8B" b="9B DE"/>
+  <a u="6D8C" b="D3 BF"/>
+  <a u="6D8D" b="9B DF"/>
+  <a u="6D8E" b="CF D1"/>
+  <a u="6D8F" b="9B E0"/>
+  <a u="6D90" b="9B E1"/>
+  <a u="6D91" b="E4 B3"/>
+  <a u="6D92" b="9B E2"/>
+  <a u="6D93" b="E4 B8"/>
+  <a u="6D94" b="E4 B9"/>
+  <a u="6D95" b="CC E9"/>
+  <a u="6D96" b="9B E3"/>
+  <a u="6D97" b="9B E4"/>
+  <a u="6D98" b="9B E5"/>
+  <a u="6D99" b="9B E6"/>
+  <a u="6D9A" b="9B E7"/>
+  <a u="6D9B" b="CC CE"/>
+  <a u="6D9C" b="9B E8"/>
+  <a u="6D9D" b="C0 D4"/>
+  <a u="6D9E" b="E4 B5"/>
+  <a u="6D9F" b="C1 B0"/>
+  <a u="6DA0" b="E4 B6"/>
+  <a u="6DA1" b="CE D0"/>
+  <a u="6DA2" b="9B E9"/>
+  <a u="6DA3" b="BB C1"/>
+  <a u="6DA4" b="B5 D3"/>
+  <a u="6DA5" b="9B EA"/>
+  <a u="6DA6" b="C8 F3"/>
+  <a u="6DA7" b="BD A7"/>
+  <a u="6DA8" b="D5 C7"/>
+  <a u="6DA9" b="C9 AC"/>
+  <a u="6DAA" b="B8 A2"/>
+  <a u="6DAB" b="E4 CA"/>
+  <a u="6DAC" b="9B EB"/>
+  <a u="6DAD" b="9B EC"/>
+  <a u="6DAE" b="E4 CC"/>
+  <a u="6DAF" b="D1 C4"/>
+  <a u="6DB0" b="9B ED"/>
+  <a u="6DB1" b="9B EE"/>
+  <a u="6DB2" b="D2 BA"/>
+  <a u="6DB3" b="9B EF"/>
+  <a u="6DB4" b="9B F0"/>
+  <a u="6DB5" b="BA AD"/>
+  <a u="6DB6" b="9B F1"/>
+  <a u="6DB7" b="9B F2"/>
+  <a u="6DB8" b="BA D4"/>
+  <a u="6DB9" b="9B F3"/>
+  <a u="6DBA" b="9B F4"/>
+  <a u="6DBB" b="9B F5"/>
+  <a u="6DBC" b="9B F6"/>
+  <a u="6DBD" b="9B F7"/>
+  <a u="6DBE" b="9B F8"/>
+  <a u="6DBF" b="E4 C3"/>
+  <a u="6DC0" b="B5 ED"/>
+  <a u="6DC1" b="9B F9"/>
+  <a u="6DC2" b="9B FA"/>
+  <a u="6DC3" b="9B FB"/>
+  <a u="6DC4" b="D7 CD"/>
+  <a u="6DC5" b="E4 C0"/>
+  <a u="6DC6" b="CF FD"/>
+  <a u="6DC7" b="E4 BF"/>
+  <a u="6DC8" b="9B FC"/>
+  <a u="6DC9" b="9B FD"/>
+  <a u="6DCA" b="9B FE"/>
+  <a u="6DCB" b="C1 DC"/>
+  <a u="6DCC" b="CC CA"/>
+  <a u="6DCD" b="9C 40"/>
+  <a u="6DCE" b="9C 41"/>
+  <a u="6DCF" b="9C 42"/>
+  <a u="6DD0" b="9C 43"/>
+  <a u="6DD1" b="CA E7"/>
+  <a u="6DD2" b="9C 44"/>
+  <a u="6DD3" b="9C 45"/>
+  <a u="6DD4" b="9C 46"/>
+  <a u="6DD5" b="9C 47"/>
+  <a u="6DD6" b="C4 D7"/>
+  <a u="6DD7" b="9C 48"/>
+  <a u="6DD8" b="CC D4"/>
+  <a u="6DD9" b="E4 C8"/>
+  <a u="6DDA" b="9C 49"/>
+  <a u="6DDB" b="9C 4A"/>
+  <a u="6DDC" b="9C 4B"/>
+  <a u="6DDD" b="E4 C7"/>
+  <a u="6DDE" b="E4 C1"/>
+  <a u="6DDF" b="9C 4C"/>
+  <a u="6DE0" b="E4 C4"/>
+  <a u="6DE1" b="B5 AD"/>
+  <a u="6DE2" b="9C 4D"/>
+  <a u="6DE3" b="9C 4E"/>
+  <a u="6DE4" b="D3 D9"/>
+  <a u="6DE5" b="9C 4F"/>
+  <a u="6DE6" b="E4 C6"/>
+  <a u="6DE7" b="9C 50"/>
+  <a u="6DE8" b="9C 51"/>
+  <a u="6DE9" b="9C 52"/>
+  <a u="6DEA" b="9C 53"/>
+  <a u="6DEB" b="D2 F9"/>
+  <a u="6DEC" b="B4 E3"/>
+  <a u="6DED" b="9C 54"/>
+  <a u="6DEE" b="BB B4"/>
+  <a u="6DEF" b="9C 55"/>
+  <a u="6DF0" b="9C 56"/>
+  <a u="6DF1" b="C9 EE"/>
+  <a u="6DF2" b="9C 57"/>
+  <a u="6DF3" b="B4 BE"/>
+  <a u="6DF4" b="9C 58"/>
+  <a u="6DF5" b="9C 59"/>
+  <a u="6DF6" b="9C 5A"/>
+  <a u="6DF7" b="BB EC"/>
+  <a u="6DF8" b="9C 5B"/>
+  <a u="6DF9" b="D1 CD"/>
+  <a u="6DFA" b="9C 5C"/>
+  <a u="6DFB" b="CC ED"/>
+  <a u="6DFC" b="ED B5"/>
+  <a u="6DFD" b="9C 5D"/>
+  <a u="6DFE" b="9C 5E"/>
+  <a u="6DFF" b="9C 5F"/>
+  <a u="6E00" b="9C 60"/>
+  <a u="6E01" b="9C 61"/>
+  <a u="6E02" b="9C 62"/>
+  <a u="6E03" b="9C 63"/>
+  <a u="6E04" b="9C 64"/>
+  <a u="6E05" b="C7 E5"/>
+  <a u="6E06" b="9C 65"/>
+  <a u="6E07" b="9C 66"/>
+  <a u="6E08" b="9C 67"/>
+  <a u="6E09" b="9C 68"/>
+  <a u="6E0A" b="D4 A8"/>
+  <a u="6E0B" b="9C 69"/>
+  <a u="6E0C" b="E4 CB"/>
+  <a u="6E0D" b="D7 D5"/>
+  <a u="6E0E" b="E4 C2"/>
+  <a u="6E0F" b="9C 6A"/>
+  <a u="6E10" b="BD A5"/>
+  <a u="6E11" b="E4 C5"/>
+  <a u="6E12" b="9C 6B"/>
+  <a u="6E13" b="9C 6C"/>
+  <a u="6E14" b="D3 E6"/>
+  <a u="6E15" b="9C 6D"/>
+  <a u="6E16" b="E4 C9"/>
+  <a u="6E17" b="C9 F8"/>
+  <a u="6E18" b="9C 6E"/>
+  <a u="6E19" b="9C 6F"/>
+  <a u="6E1A" b="E4 BE"/>
+  <a u="6E1B" b="9C 70"/>
+  <a u="6E1C" b="9C 71"/>
+  <a u="6E1D" b="D3 E5"/>
+  <a u="6E1E" b="9C 72"/>
+  <a u="6E1F" b="9C 73"/>
+  <a u="6E20" b="C7 FE"/>
+  <a u="6E21" b="B6 C9"/>
+  <a u="6E22" b="9C 74"/>
+  <a u="6E23" b="D4 FC"/>
+  <a u="6E24" b="B2 B3"/>
+  <a u="6E25" b="E4 D7"/>
+  <a u="6E26" b="9C 75"/>
+  <a u="6E27" b="9C 76"/>
+  <a u="6E28" b="9C 77"/>
+  <a u="6E29" b="CE C2"/>
+  <a u="6E2A" b="9C 78"/>
+  <a u="6E2B" b="E4 CD"/>
+  <a u="6E2C" b="9C 79"/>
+  <a u="6E2D" b="CE BC"/>
+  <a u="6E2E" b="9C 7A"/>
+  <a u="6E2F" b="B8 DB"/>
+  <a u="6E30" b="9C 7B"/>
+  <a u="6E31" b="9C 7C"/>
+  <a u="6E32" b="E4 D6"/>
+  <a u="6E33" b="9C 7D"/>
+  <a u="6E34" b="BF CA"/>
+  <a u="6E35" b="9C 7E"/>
+  <a u="6E36" b="9C 80"/>
+  <a u="6E37" b="9C 81"/>
+  <a u="6E38" b="D3 CE"/>
+  <a u="6E39" b="9C 82"/>
+  <a u="6E3A" b="C3 EC"/>
+  <a u="6E3B" b="9C 83"/>
+  <a u="6E3C" b="9C 84"/>
+  <a u="6E3D" b="9C 85"/>
+  <a u="6E3E" b="9C 86"/>
+  <a u="6E3F" b="9C 87"/>
+  <a u="6E40" b="9C 88"/>
+  <a u="6E41" b="9C 89"/>
+  <a u="6E42" b="9C 8A"/>
+  <a u="6E43" b="C5 C8"/>
+  <a u="6E44" b="E4 D8"/>
+  <a u="6E45" b="9C 8B"/>
+  <a u="6E46" b="9C 8C"/>
+  <a u="6E47" b="9C 8D"/>
+  <a u="6E48" b="9C 8E"/>
+  <a u="6E49" b="9C 8F"/>
+  <a u="6E4A" b="9C 90"/>
+  <a u="6E4B" b="9C 91"/>
+  <a u="6E4C" b="9C 92"/>
+  <a u="6E4D" b="CD C4"/>
+  <a u="6E4E" b="E4 CF"/>
+  <a u="6E4F" b="9C 93"/>
+  <a u="6E50" b="9C 94"/>
+  <a u="6E51" b="9C 95"/>
+  <a u="6E52" b="9C 96"/>
+  <a u="6E53" b="E4 D4"/>
+  <a u="6E54" b="E4 D5"/>
+  <a u="6E55" b="9C 97"/>
+  <a u="6E56" b="BA FE"/>
+  <a u="6E57" b="9C 98"/>
+  <a u="6E58" b="CF E6"/>
+  <a u="6E59" b="9C 99"/>
+  <a u="6E5A" b="9C 9A"/>
+  <a u="6E5B" b="D5 BF"/>
+  <a u="6E5C" b="9C 9B"/>
+  <a u="6E5D" b="9C 9C"/>
+  <a u="6E5E" b="9C 9D"/>
+  <a u="6E5F" b="E4 D2"/>
+  <a u="6E60" b="9C 9E"/>
+  <a u="6E61" b="9C 9F"/>
+  <a u="6E62" b="9C A0"/>
+  <a u="6E63" b="9C A1"/>
+  <a u="6E64" b="9C A2"/>
+  <a u="6E65" b="9C A3"/>
+  <a u="6E66" b="9C A4"/>
+  <a u="6E67" b="9C A5"/>
+  <a u="6E68" b="9C A6"/>
+  <a u="6E69" b="9C A7"/>
+  <a u="6E6A" b="9C A8"/>
+  <a u="6E6B" b="E4 D0"/>
+  <a u="6E6C" b="9C A9"/>
+  <a u="6E6D" b="9C AA"/>
+  <a u="6E6E" b="E4 CE"/>
+  <a u="6E6F" b="9C AB"/>
+  <a u="6E70" b="9C AC"/>
+  <a u="6E71" b="9C AD"/>
+  <a u="6E72" b="9C AE"/>
+  <a u="6E73" b="9C AF"/>
+  <a u="6E74" b="9C B0"/>
+  <a u="6E75" b="9C B1"/>
+  <a u="6E76" b="9C B2"/>
+  <a u="6E77" b="9C B3"/>
+  <a u="6E78" b="9C B4"/>
+  <a u="6E79" b="9C B5"/>
+  <a u="6E7A" b="9C B6"/>
+  <a u="6E7B" b="9C B7"/>
+  <a u="6E7C" b="9C B8"/>
+  <a u="6E7D" b="9C B9"/>
+  <a u="6E7E" b="CD E5"/>
+  <a u="6E7F" b="CA AA"/>
+  <a u="6E80" b="9C BA"/>
+  <a u="6E81" b="9C BB"/>
+  <a u="6E82" b="9C BC"/>
+  <a u="6E83" b="C0 A3"/>
+  <a u="6E84" b="9C BD"/>
+  <a u="6E85" b="BD A6"/>
+  <a u="6E86" b="E4 D3"/>
+  <a u="6E87" b="9C BE"/>
+  <a u="6E88" b="9C BF"/>
+  <a u="6E89" b="B8 C8"/>
+  <a u="6E8A" b="9C C0"/>
+  <a u="6E8B" b="9C C1"/>
+  <a u="6E8C" b="9C C2"/>
+  <a u="6E8D" b="9C C3"/>
+  <a u="6E8E" b="9C C4"/>
+  <a u="6E8F" b="E4 E7"/>
+  <a u="6E90" b="D4 B4"/>
+  <a u="6E91" b="9C C5"/>
+  <a u="6E92" b="9C C6"/>
+  <a u="6E93" b="9C C7"/>
+  <a u="6E94" b="9C C8"/>
+  <a u="6E95" b="9C C9"/>
+  <a u="6E96" b="9C CA"/>
+  <a u="6E97" b="9C CB"/>
+  <a u="6E98" b="E4 DB"/>
+  <a u="6E99" b="9C CC"/>
+  <a u="6E9A" b="9C CD"/>
+  <a u="6E9B" b="9C CE"/>
+  <a u="6E9C" b="C1 EF"/>
+  <a u="6E9D" b="9C CF"/>
+  <a u="6E9E" b="9C D0"/>
+  <a u="6E9F" b="E4 E9"/>
+  <a u="6EA0" b="9C D1"/>
+  <a u="6EA1" b="9C D2"/>
+  <a u="6EA2" b="D2 E7"/>
+  <a u="6EA3" b="9C D3"/>
+  <a u="6EA4" b="9C D4"/>
+  <a u="6EA5" b="E4 DF"/>
+  <a u="6EA6" b="9C D5"/>
+  <a u="6EA7" b="E4 E0"/>
+  <a u="6EA8" b="9C D6"/>
+  <a u="6EA9" b="9C D7"/>
+  <a u="6EAA" b="CF AA"/>
+  <a u="6EAB" b="9C D8"/>
+  <a u="6EAC" b="9C D9"/>
+  <a u="6EAD" b="9C DA"/>
+  <a u="6EAE" b="9C DB"/>
+  <a u="6EAF" b="CB DD"/>
+  <a u="6EB0" b="9C DC"/>
+  <a u="6EB1" b="E4 DA"/>
+  <a u="6EB2" b="E4 D1"/>
+  <a u="6EB3" b="9C DD"/>
+  <a u="6EB4" b="E4 E5"/>
+  <a u="6EB5" b="9C DE"/>
+  <a u="6EB6" b="C8 DC"/>
+  <a u="6EB7" b="E4 E3"/>
+  <a u="6EB8" b="9C DF"/>
+  <a u="6EB9" b="9C E0"/>
+  <a u="6EBA" b="C4 E7"/>
+  <a u="6EBB" b="E4 E2"/>
+  <a u="6EBC" b="9C E1"/>
+  <a u="6EBD" b="E4 E1"/>
+  <a u="6EBE" b="9C E2"/>
+  <a u="6EBF" b="9C E3"/>
+  <a u="6EC0" b="9C E4"/>
+  <a u="6EC1" b="B3 FC"/>
+  <a u="6EC2" b="E4 E8"/>
+  <a u="6EC3" b="9C E5"/>
+  <a u="6EC4" b="9C E6"/>
+  <a u="6EC5" b="9C E7"/>
+  <a u="6EC6" b="9C E8"/>
+  <a u="6EC7" b="B5 E1"/>
+  <a u="6EC8" b="9C E9"/>
+  <a u="6EC9" b="9C EA"/>
+  <a u="6ECA" b="9C EB"/>
+  <a u="6ECB" b="D7 CC"/>
+  <a u="6ECC" b="9C EC"/>
+  <a u="6ECD" b="9C ED"/>
+  <a u="6ECE" b="9C EE"/>
+  <a u="6ECF" b="E4 E6"/>
+  <a u="6ED0" b="9C EF"/>
+  <a u="6ED1" b="BB AC"/>
+  <a u="6ED2" b="9C F0"/>
+  <a u="6ED3" b="D7 D2"/>
+  <a u="6ED4" b="CC CF"/>
+  <a u="6ED5" b="EB F8"/>
+  <a u="6ED6" b="9C F1"/>
+  <a u="6ED7" b="E4 E4"/>
+  <a u="6ED8" b="9C F2"/>
+  <a u="6ED9" b="9C F3"/>
+  <a u="6EDA" b="B9 F6"/>
+  <a u="6EDB" b="9C F4"/>
+  <a u="6EDC" b="9C F5"/>
+  <a u="6EDD" b="9C F6"/>
+  <a u="6EDE" b="D6 CD"/>
+  <a u="6EDF" b="E4 D9"/>
+  <a u="6EE0" b="E4 DC"/>
+  <a u="6EE1" b="C2 FA"/>
+  <a u="6EE2" b="E4 DE"/>
+  <a u="6EE3" b="9C F7"/>
+  <a u="6EE4" b="C2 CB"/>
+  <a u="6EE5" b="C0 C4"/>
+  <a u="6EE6" b="C2 D0"/>
+  <a u="6EE7" b="9C F8"/>
+  <a u="6EE8" b="B1 F5"/>
+  <a u="6EE9" b="CC B2"/>
+  <a u="6EEA" b="9C F9"/>
+  <a u="6EEB" b="9C FA"/>
+  <a u="6EEC" b="9C FB"/>
+  <a u="6EED" b="9C FC"/>
+  <a u="6EEE" b="9C FD"/>
+  <a u="6EEF" b="9C FE"/>
+  <a u="6EF0" b="9D 40"/>
+  <a u="6EF1" b="9D 41"/>
+  <a u="6EF2" b="9D 42"/>
+  <a u="6EF3" b="9D 43"/>
+  <a u="6EF4" b="B5 CE"/>
+  <a u="6EF5" b="9D 44"/>
+  <a u="6EF6" b="9D 45"/>
+  <a u="6EF7" b="9D 46"/>
+  <a u="6EF8" b="9D 47"/>
+  <a u="6EF9" b="E4 EF"/>
+  <a u="6EFA" b="9D 48"/>
+  <a u="6EFB" b="9D 49"/>
+  <a u="6EFC" b="9D 4A"/>
+  <a u="6EFD" b="9D 4B"/>
+  <a u="6EFE" b="9D 4C"/>
+  <a u="6EFF" b="9D 4D"/>
+  <a u="6F00" b="9D 4E"/>
+  <a u="6F01" b="9D 4F"/>
+  <a u="6F02" b="C6 AF"/>
+  <a u="6F03" b="9D 50"/>
+  <a u="6F04" b="9D 51"/>
+  <a u="6F05" b="9D 52"/>
+  <a u="6F06" b="C6 E1"/>
+  <a u="6F07" b="9D 53"/>
+  <a u="6F08" b="9D 54"/>
+  <a u="6F09" b="E4 F5"/>
+  <a u="6F0A" b="9D 55"/>
+  <a u="6F0B" b="9D 56"/>
+  <a u="6F0C" b="9D 57"/>
+  <a u="6F0D" b="9D 58"/>
+  <a u="6F0E" b="9D 59"/>
+  <a u="6F0F" b="C2 A9"/>
+  <a u="6F10" b="9D 5A"/>
+  <a u="6F11" b="9D 5B"/>
+  <a u="6F12" b="9D 5C"/>
+  <a u="6F13" b="C0 EC"/>
+  <a u="6F14" b="D1 DD"/>
+  <a u="6F15" b="E4 EE"/>
+  <a u="6F16" b="9D 5D"/>
+  <a u="6F17" b="9D 5E"/>
+  <a u="6F18" b="9D 5F"/>
+  <a u="6F19" b="9D 60"/>
+  <a u="6F1A" b="9D 61"/>
+  <a u="6F1B" b="9D 62"/>
+  <a u="6F1C" b="9D 63"/>
+  <a u="6F1D" b="9D 64"/>
+  <a u="6F1E" b="9D 65"/>
+  <a u="6F1F" b="9D 66"/>
+  <a u="6F20" b="C4 AE"/>
+  <a u="6F21" b="9D 67"/>
+  <a u="6F22" b="9D 68"/>
+  <a u="6F23" b="9D 69"/>
+  <a u="6F24" b="E4 ED"/>
+  <a u="6F25" b="9D 6A"/>
+  <a u="6F26" b="9D 6B"/>
+  <a u="6F27" b="9D 6C"/>
+  <a u="6F28" b="9D 6D"/>
+  <a u="6F29" b="E4 F6"/>
+  <a u="6F2A" b="E4 F4"/>
+  <a u="6F2B" b="C2 FE"/>
+  <a u="6F2C" b="9D 6E"/>
+  <a u="6F2D" b="E4 DD"/>
+  <a u="6F2E" b="9D 6F"/>
+  <a u="6F2F" b="E4 F0"/>
+  <a u="6F30" b="9D 70"/>
+  <a u="6F31" b="CA FE"/>
+  <a u="6F32" b="9D 71"/>
+  <a u="6F33" b="D5 C4"/>
+  <a u="6F34" b="9D 72"/>
+  <a u="6F35" b="9D 73"/>
+  <a u="6F36" b="E4 F1"/>
+  <a u="6F37" b="9D 74"/>
+  <a u="6F38" b="9D 75"/>
+  <a u="6F39" b="9D 76"/>
+  <a u="6F3A" b="9D 77"/>
+  <a u="6F3B" b="9D 78"/>
+  <a u="6F3C" b="9D 79"/>
+  <a u="6F3D" b="9D 7A"/>
+  <a u="6F3E" b="D1 FA"/>
+  <a u="6F3F" b="9D 7B"/>
+  <a u="6F40" b="9D 7C"/>
+  <a u="6F41" b="9D 7D"/>
+  <a u="6F42" b="9D 7E"/>
+  <a u="6F43" b="9D 80"/>
+  <a u="6F44" b="9D 81"/>
+  <a u="6F45" b="9D 82"/>
+  <a u="6F46" b="E4 EB"/>
+  <a u="6F47" b="E4 EC"/>
+  <a u="6F48" b="9D 83"/>
+  <a u="6F49" b="9D 84"/>
+  <a u="6F4A" b="9D 85"/>
+  <a u="6F4B" b="E4 F2"/>
+  <a u="6F4C" b="9D 86"/>
+  <a u="6F4D" b="CE AB"/>
+  <a u="6F4E" b="9D 87"/>
+  <a u="6F4F" b="9D 88"/>
+  <a u="6F50" b="9D 89"/>
+  <a u="6F51" b="9D 8A"/>
+  <a u="6F52" b="9D 8B"/>
+  <a u="6F53" b="9D 8C"/>
+  <a u="6F54" b="9D 8D"/>
+  <a u="6F55" b="9D 8E"/>
+  <a u="6F56" b="9D 8F"/>
+  <a u="6F57" b="9D 90"/>
+  <a u="6F58" b="C5 CB"/>
+  <a u="6F59" b="9D 91"/>
+  <a u="6F5A" b="9D 92"/>
+  <a u="6F5B" b="9D 93"/>
+  <a u="6F5C" b="C7 B1"/>
+  <a u="6F5D" b="9D 94"/>
+  <a u="6F5E" b="C2 BA"/>
+  <a u="6F5F" b="9D 95"/>
+  <a u="6F60" b="9D 96"/>
+  <a u="6F61" b="9D 97"/>
+  <a u="6F62" b="E4 EA"/>
+  <a u="6F63" b="9D 98"/>
+  <a u="6F64" b="9D 99"/>
+  <a u="6F65" b="9D 9A"/>
+  <a u="6F66" b="C1 CA"/>
+  <a u="6F67" b="9D 9B"/>
+  <a u="6F68" b="9D 9C"/>
+  <a u="6F69" b="9D 9D"/>
+  <a u="6F6A" b="9D 9E"/>
+  <a u="6F6B" b="9D 9F"/>
+  <a u="6F6C" b="9D A0"/>
+  <a u="6F6D" b="CC B6"/>
+  <a u="6F6E" b="B3 B1"/>
+  <a u="6F6F" b="9D A1"/>
+  <a u="6F70" b="9D A2"/>
+  <a u="6F71" b="9D A3"/>
+  <a u="6F72" b="E4 FB"/>
+  <a u="6F73" b="9D A4"/>
+  <a u="6F74" b="E4 F3"/>
+  <a u="6F75" b="9D A5"/>
+  <a u="6F76" b="9D A6"/>
+  <a u="6F77" b="9D A7"/>
+  <a u="6F78" b="E4 FA"/>
+  <a u="6F79" b="9D A8"/>
+  <a u="6F7A" b="E4 FD"/>
+  <a u="6F7B" b="9D A9"/>
+  <a u="6F7C" b="E4 FC"/>
+  <a u="6F7D" b="9D AA"/>
+  <a u="6F7E" b="9D AB"/>
+  <a u="6F7F" b="9D AC"/>
+  <a u="6F80" b="9D AD"/>
+  <a u="6F81" b="9D AE"/>
+  <a u="6F82" b="9D AF"/>
+  <a u="6F83" b="9D B0"/>
+  <a u="6F84" b="B3 CE"/>
+  <a u="6F85" b="9D B1"/>
+  <a u="6F86" b="9D B2"/>
+  <a u="6F87" b="9D B3"/>
+  <a u="6F88" b="B3 BA"/>
+  <a u="6F89" b="E4 F7"/>
+  <a u="6F8A" b="9D B4"/>
+  <a u="6F8B" b="9D B5"/>
+  <a u="6F8C" b="E4 F9"/>
+  <a u="6F8D" b="E4 F8"/>
+  <a u="6F8E" b="C5 EC"/>
+  <a u="6F8F" b="9D B6"/>
+  <a u="6F90" b="9D B7"/>
+  <a u="6F91" b="9D B8"/>
+  <a u="6F92" b="9D B9"/>
+  <a u="6F93" b="9D BA"/>
+  <a u="6F94" b="9D BB"/>
+  <a u="6F95" b="9D BC"/>
+  <a u="6F96" b="9D BD"/>
+  <a u="6F97" b="9D BE"/>
+  <a u="6F98" b="9D BF"/>
+  <a u="6F99" b="9D C0"/>
+  <a u="6F9A" b="9D C1"/>
+  <a u="6F9B" b="9D C2"/>
+  <a u="6F9C" b="C0 BD"/>
+  <a u="6F9D" b="9D C3"/>
+  <a u="6F9E" b="9D C4"/>
+  <a u="6F9F" b="9D C5"/>
+  <a u="6FA0" b="9D C6"/>
+  <a u="6FA1" b="D4 E8"/>
+  <a u="6FA2" b="9D C7"/>
+  <a u="6FA3" b="9D C8"/>
+  <a u="6FA4" b="9D C9"/>
+  <a u="6FA5" b="9D CA"/>
+  <a u="6FA6" b="9D CB"/>
+  <a u="6FA7" b="E5 A2"/>
+  <a u="6FA8" b="9D CC"/>
+  <a u="6FA9" b="9D CD"/>
+  <a u="6FAA" b="9D CE"/>
+  <a u="6FAB" b="9D CF"/>
+  <a u="6FAC" b="9D D0"/>
+  <a u="6FAD" b="9D D1"/>
+  <a u="6FAE" b="9D D2"/>
+  <a u="6FAF" b="9D D3"/>
+  <a u="6FB0" b="9D D4"/>
+  <a u="6FB1" b="9D D5"/>
+  <a u="6FB2" b="9D D6"/>
+  <a u="6FB3" b="B0 C4"/>
+  <a u="6FB4" b="9D D7"/>
+  <a u="6FB5" b="9D D8"/>
+  <a u="6FB6" b="E5 A4"/>
+  <a u="6FB7" b="9D D9"/>
+  <a u="6FB8" b="9D DA"/>
+  <a u="6FB9" b="E5 A3"/>
+  <a u="6FBA" b="9D DB"/>
+  <a u="6FBB" b="9D DC"/>
+  <a u="6FBC" b="9D DD"/>
+  <a u="6FBD" b="9D DE"/>
+  <a u="6FBE" b="9D DF"/>
+  <a u="6FBF" b="9D E0"/>
+  <a u="6FC0" b="BC A4"/>
+  <a u="6FC1" b="9D E1"/>
+  <a u="6FC2" b="E5 A5"/>
+  <a u="6FC3" b="9D E2"/>
+  <a u="6FC4" b="9D E3"/>
+  <a u="6FC5" b="9D E4"/>
+  <a u="6FC6" b="9D E5"/>
+  <a u="6FC7" b="9D E6"/>
+  <a u="6FC8" b="9D E7"/>
+  <a u="6FC9" b="E5 A1"/>
+  <a u="6FCA" b="9D E8"/>
+  <a u="6FCB" b="9D E9"/>
+  <a u="6FCC" b="9D EA"/>
+  <a u="6FCD" b="9D EB"/>
+  <a u="6FCE" b="9D EC"/>
+  <a u="6FCF" b="9D ED"/>
+  <a u="6FD0" b="9D EE"/>
+  <a u="6FD1" b="E4 FE"/>
+  <a u="6FD2" b="B1 F4"/>
+  <a u="6FD3" b="9D EF"/>
+  <a u="6FD4" b="9D F0"/>
+  <a u="6FD5" b="9D F1"/>
+  <a u="6FD6" b="9D F2"/>
+  <a u="6FD7" b="9D F3"/>
+  <a u="6FD8" b="9D F4"/>
+  <a u="6FD9" b="9D F5"/>
+  <a u="6FDA" b="9D F6"/>
+  <a u="6FDB" b="9D F7"/>
+  <a u="6FDC" b="9D F8"/>
+  <a u="6FDD" b="9D F9"/>
+  <a u="6FDE" b="E5 A8"/>
+  <a u="6FDF" b="9D FA"/>
+  <a u="6FE0" b="E5 A9"/>
+  <a u="6FE1" b="E5 A6"/>
+  <a u="6FE2" b="9D FB"/>
+  <a u="6FE3" b="9D FC"/>
+  <a u="6FE4" b="9D FD"/>
+  <a u="6FE5" b="9D FE"/>
+  <a u="6FE6" b="9E 40"/>
+  <a u="6FE7" b="9E 41"/>
+  <a u="6FE8" b="9E 42"/>
+  <a u="6FE9" b="9E 43"/>
+  <a u="6FEA" b="9E 44"/>
+  <a u="6FEB" b="9E 45"/>
+  <a u="6FEC" b="9E 46"/>
+  <a u="6FED" b="9E 47"/>
+  <a u="6FEE" b="E5 A7"/>
+  <a u="6FEF" b="E5 AA"/>
+  <a u="6FF0" b="9E 48"/>
+  <a u="6FF1" b="9E 49"/>
+  <a u="6FF2" b="9E 4A"/>
+  <a u="6FF3" b="9E 4B"/>
+  <a u="6FF4" b="9E 4C"/>
+  <a u="6FF5" b="9E 4D"/>
+  <a u="6FF6" b="9E 4E"/>
+  <a u="6FF7" b="9E 4F"/>
+  <a u="6FF8" b="9E 50"/>
+  <a u="6FF9" b="9E 51"/>
+  <a u="6FFA" b="9E 52"/>
+  <a u="6FFB" b="9E 53"/>
+  <a u="6FFC" b="9E 54"/>
+  <a u="6FFD" b="9E 55"/>
+  <a u="6FFE" b="9E 56"/>
+  <a u="6FFF" b="9E 57"/>
+  <a u="7000" b="9E 58"/>
+  <a u="7001" b="9E 59"/>
+  <a u="7002" b="9E 5A"/>
+  <a u="7003" b="9E 5B"/>
+  <a u="7004" b="9E 5C"/>
+  <a u="7005" b="9E 5D"/>
+  <a u="7006" b="9E 5E"/>
+  <a u="7007" b="9E 5F"/>
+  <a u="7008" b="9E 60"/>
+  <a u="7009" b="9E 61"/>
+  <a u="700A" b="9E 62"/>
+  <a u="700B" b="9E 63"/>
+  <a u="700C" b="9E 64"/>
+  <a u="700D" b="9E 65"/>
+  <a u="700E" b="9E 66"/>
+  <a u="700F" b="9E 67"/>
+  <a u="7010" b="9E 68"/>
+  <a u="7011" b="C6 D9"/>
+  <a u="7012" b="9E 69"/>
+  <a u="7013" b="9E 6A"/>
+  <a u="7014" b="9E 6B"/>
+  <a u="7015" b="9E 6C"/>
+  <a u="7016" b="9E 6D"/>
+  <a u="7017" b="9E 6E"/>
+  <a u="7018" b="9E 6F"/>
+  <a u="7019" b="9E 70"/>
+  <a u="701A" b="E5 AB"/>
+  <a u="701B" b="E5 AD"/>
+  <a u="701C" b="9E 71"/>
+  <a u="701D" b="9E 72"/>
+  <a u="701E" b="9E 73"/>
+  <a u="701F" b="9E 74"/>
+  <a u="7020" b="9E 75"/>
+  <a u="7021" b="9E 76"/>
+  <a u="7022" b="9E 77"/>
+  <a u="7023" b="E5 AC"/>
+  <a u="7024" b="9E 78"/>
+  <a u="7025" b="9E 79"/>
+  <a u="7026" b="9E 7A"/>
+  <a u="7027" b="9E 7B"/>
+  <a u="7028" b="9E 7C"/>
+  <a u="7029" b="9E 7D"/>
+  <a u="702A" b="9E 7E"/>
+  <a u="702B" b="9E 80"/>
+  <a u="702C" b="9E 81"/>
+  <a u="702D" b="9E 82"/>
+  <a u="702E" b="9E 83"/>
+  <a u="702F" b="9E 84"/>
+  <a u="7030" b="9E 85"/>
+  <a u="7031" b="9E 86"/>
+  <a u="7032" b="9E 87"/>
+  <a u="7033" b="9E 88"/>
+  <a u="7034" b="9E 89"/>
+  <a u="7035" b="E5 AF"/>
+  <a u="7036" b="9E 8A"/>
+  <a u="7037" b="9E 8B"/>
+  <a u="7038" b="9E 8C"/>
+  <a u="7039" b="E5 AE"/>
+  <a u="703A" b="9E 8D"/>
+  <a u="703B" b="9E 8E"/>
+  <a u="703C" b="9E 8F"/>
+  <a u="703D" b="9E 90"/>
+  <a u="703E" b="9E 91"/>
+  <a u="703F" b="9E 92"/>
+  <a u="7040" b="9E 93"/>
+  <a u="7041" b="9E 94"/>
+  <a u="7042" b="9E 95"/>
+  <a u="7043" b="9E 96"/>
+  <a u="7044" b="9E 97"/>
+  <a u="7045" b="9E 98"/>
+  <a u="7046" b="9E 99"/>
+  <a u="7047" b="9E 9A"/>
+  <a u="7048" b="9E 9B"/>
+  <a u="7049" b="9E 9C"/>
+  <a u="704A" b="9E 9D"/>
+  <a u="704B" b="9E 9E"/>
+  <a u="704C" b="B9 E0"/>
+  <a u="704D" b="9E 9F"/>
+  <a u="704E" b="9E A0"/>
+  <a u="704F" b="E5 B0"/>
+  <a u="7050" b="9E A1"/>
+  <a u="7051" b="9E A2"/>
+  <a u="7052" b="9E A3"/>
+  <a u="7053" b="9E A4"/>
+  <a u="7054" b="9E A5"/>
+  <a u="7055" b="9E A6"/>
+  <a u="7056" b="9E A7"/>
+  <a u="7057" b="9E A8"/>
+  <a u="7058" b="9E A9"/>
+  <a u="7059" b="9E AA"/>
+  <a u="705A" b="9E AB"/>
+  <a u="705B" b="9E AC"/>
+  <a u="705C" b="9E AD"/>
+  <a u="705D" b="9E AE"/>
+  <a u="705E" b="E5 B1"/>
+  <a u="705F" b="9E AF"/>
+  <a u="7060" b="9E B0"/>
+  <a u="7061" b="9E B1"/>
+  <a u="7062" b="9E B2"/>
+  <a u="7063" b="9E B3"/>
+  <a u="7064" b="9E B4"/>
+  <a u="7065" b="9E B5"/>
+  <a u="7066" b="9E B6"/>
+  <a u="7067" b="9E B7"/>
+  <a u="7068" b="9E B8"/>
+  <a u="7069" b="9E B9"/>
+  <a u="706A" b="9E BA"/>
+  <a u="706B" b="BB F0"/>
+  <a u="706C" b="EC E1"/>
+  <a u="706D" b="C3 F0"/>
+  <a u="706E" b="9E BB"/>
+  <a u="706F" b="B5 C6"/>
+  <a u="7070" b="BB D2"/>
+  <a u="7071" b="9E BC"/>
+  <a u="7072" b="9E BD"/>
+  <a u="7073" b="9E BE"/>
+  <a u="7074" b="9E BF"/>
+  <a u="7075" b="C1 E9"/>
+  <a u="7076" b="D4 EE"/>
+  <a u="7077" b="9E C0"/>
+  <a u="7078" b="BE C4"/>
+  <a u="7079" b="9E C1"/>
+  <a u="707A" b="9E C2"/>
+  <a u="707B" b="9E C3"/>
+  <a u="707C" b="D7 C6"/>
+  <a u="707D" b="9E C4"/>
+  <a u="707E" b="D4 D6"/>
+  <a u="707F" b="B2 D3"/>
+  <a u="7080" b="EC BE"/>
+  <a u="7081" b="9E C5"/>
+  <a u="7082" b="9E C6"/>
+  <a u="7083" b="9E C7"/>
+  <a u="7084" b="9E C8"/>
+  <a u="7085" b="EA C1"/>
+  <a u="7086" b="9E C9"/>
+  <a u="7087" b="9E CA"/>
+  <a u="7088" b="9E CB"/>
+  <a u="7089" b="C2 AF"/>
+  <a u="708A" b="B4 B6"/>
+  <a u="708B" b="9E CC"/>
+  <a u="708C" b="9E CD"/>
+  <a u="708D" b="9E CE"/>
+  <a u="708E" b="D1 D7"/>
+  <a u="708F" b="9E CF"/>
+  <a u="7090" b="9E D0"/>
+  <a u="7091" b="9E D1"/>
+  <a u="7092" b="B3 B4"/>
+  <a u="7093" b="9E D2"/>
+  <a u="7094" b="C8 B2"/>
+  <a u="7095" b="BF BB"/>
+  <a u="7096" b="EC C0"/>
+  <a u="7097" b="9E D3"/>
+  <a u="7098" b="9E D4"/>
+  <a u="7099" b="D6 CB"/>
+  <a u="709A" b="9E D5"/>
+  <a u="709B" b="9E D6"/>
+  <a u="709C" b="EC BF"/>
+  <a u="709D" b="EC C1"/>
+  <a u="709E" b="9E D7"/>
+  <a u="709F" b="9E D8"/>
+  <a u="70A0" b="9E D9"/>
+  <a u="70A1" b="9E DA"/>
+  <a u="70A2" b="9E DB"/>
+  <a u="70A3" b="9E DC"/>
+  <a u="70A4" b="9E DD"/>
+  <a u="70A5" b="9E DE"/>
+  <a u="70A6" b="9E DF"/>
+  <a u="70A7" b="9E E0"/>
+  <a u="70A8" b="9E E1"/>
+  <a u="70A9" b="9E E2"/>
+  <a u="70AA" b="9E E3"/>
+  <a u="70AB" b="EC C5"/>
+  <a u="70AC" b="BE E6"/>
+  <a u="70AD" b="CC BF"/>
+  <a u="70AE" b="C5 DA"/>
+  <a u="70AF" b="BE BC"/>
+  <a u="70B0" b="9E E4"/>
+  <a u="70B1" b="EC C6"/>
+  <a u="70B2" b="9E E5"/>
+  <a u="70B3" b="B1 FE"/>
+  <a u="70B4" b="9E E6"/>
+  <a u="70B5" b="9E E7"/>
+  <a u="70B6" b="9E E8"/>
+  <a u="70B7" b="EC C4"/>
+  <a u="70B8" b="D5 A8"/>
+  <a u="70B9" b="B5 E3"/>
+  <a u="70BA" b="9E E9"/>
+  <a u="70BB" b="EC C2"/>
+  <a u="70BC" b="C1 B6"/>
+  <a u="70BD" b="B3 E3"/>
+  <a u="70BE" b="9E EA"/>
+  <a u="70BF" b="9E EB"/>
+  <a u="70C0" b="EC C3"/>
+  <a u="70C1" b="CB B8"/>
+  <a u="70C2" b="C0 C3"/>
+  <a u="70C3" b="CC FE"/>
+  <a u="70C4" b="9E EC"/>
+  <a u="70C5" b="9E ED"/>
+  <a u="70C6" b="9E EE"/>
+  <a u="70C7" b="9E EF"/>
+  <a u="70C8" b="C1 D2"/>
+  <a u="70C9" b="9E F0"/>
+  <a u="70CA" b="EC C8"/>
+  <a u="70CB" b="9E F1"/>
+  <a u="70CC" b="9E F2"/>
+  <a u="70CD" b="9E F3"/>
+  <a u="70CE" b="9E F4"/>
+  <a u="70CF" b="9E F5"/>
+  <a u="70D0" b="9E F6"/>
+  <a u="70D1" b="9E F7"/>
+  <a u="70D2" b="9E F8"/>
+  <a u="70D3" b="9E F9"/>
+  <a u="70D4" b="9E FA"/>
+  <a u="70D5" b="9E FB"/>
+  <a u="70D6" b="9E FC"/>
+  <a u="70D7" b="9E FD"/>
+  <a u="70D8" b="BA E6"/>
+  <a u="70D9" b="C0 D3"/>
+  <a u="70DA" b="9E FE"/>
+  <a u="70DB" b="D6 F2"/>
+  <a u="70DC" b="9F 40"/>
+  <a u="70DD" b="9F 41"/>
+  <a u="70DE" b="9F 42"/>
+  <a u="70DF" b="D1 CC"/>
+  <a u="70E0" b="9F 43"/>
+  <a u="70E1" b="9F 44"/>
+  <a u="70E2" b="9F 45"/>
+  <a u="70E3" b="9F 46"/>
+  <a u="70E4" b="BF BE"/>
+  <a u="70E5" b="9F 47"/>
+  <a u="70E6" b="B7 B3"/>
+  <a u="70E7" b="C9 D5"/>
+  <a u="70E8" b="EC C7"/>
+  <a u="70E9" b="BB E2"/>
+  <a u="70EA" b="9F 48"/>
+  <a u="70EB" b="CC CC"/>
+  <a u="70EC" b="BD FD"/>
+  <a u="70ED" b="C8 C8"/>
+  <a u="70EE" b="9F 49"/>
+  <a u="70EF" b="CF A9"/>
+  <a u="70F0" b="9F 4A"/>
+  <a u="70F1" b="9F 4B"/>
+  <a u="70F2" b="9F 4C"/>
+  <a u="70F3" b="9F 4D"/>
+  <a u="70F4" b="9F 4E"/>
+  <a u="70F5" b="9F 4F"/>
+  <a u="70F6" b="9F 50"/>
+  <a u="70F7" b="CD E9"/>
+  <a u="70F8" b="9F 51"/>
+  <a u="70F9" b="C5 EB"/>
+  <a u="70FA" b="9F 52"/>
+  <a u="70FB" b="9F 53"/>
+  <a u="70FC" b="9F 54"/>
+  <a u="70FD" b="B7 E9"/>
+  <a u="70FE" b="9F 55"/>
+  <a u="70FF" b="9F 56"/>
+  <a u="7100" b="9F 57"/>
+  <a u="7101" b="9F 58"/>
+  <a u="7102" b="9F 59"/>
+  <a u="7103" b="9F 5A"/>
+  <a u="7104" b="9F 5B"/>
+  <a u="7105" b="9F 5C"/>
+  <a u="7106" b="9F 5D"/>
+  <a u="7107" b="9F 5E"/>
+  <a u="7108" b="9F 5F"/>
+  <a u="7109" b="D1 C9"/>
+  <a u="710A" b="BA B8"/>
+  <a u="710B" b="9F 60"/>
+  <a u="710C" b="9F 61"/>
+  <a u="710D" b="9F 62"/>
+  <a u="710E" b="9F 63"/>
+  <a u="710F" b="9F 64"/>
+  <a u="7110" b="EC C9"/>
+  <a u="7111" b="9F 65"/>
+  <a u="7112" b="9F 66"/>
+  <a u="7113" b="EC CA"/>
+  <a u="7114" b="9F 67"/>
+  <a u="7115" b="BB C0"/>
+  <a u="7116" b="EC CB"/>
+  <a u="7117" b="9F 68"/>
+  <a u="7118" b="EC E2"/>
+  <a u="7119" b="B1 BA"/>
+  <a u="711A" b="B7 D9"/>
+  <a u="711B" b="9F 69"/>
+  <a u="711C" b="9F 6A"/>
+  <a u="711D" b="9F 6B"/>
+  <a u="711E" b="9F 6C"/>
+  <a u="711F" b="9F 6D"/>
+  <a u="7120" b="9F 6E"/>
+  <a u="7121" b="9F 6F"/>
+  <a u="7122" b="9F 70"/>
+  <a u="7123" b="9F 71"/>
+  <a u="7124" b="9F 72"/>
+  <a u="7125" b="9F 73"/>
+  <a u="7126" b="BD B9"/>
+  <a u="7127" b="9F 74"/>
+  <a u="7128" b="9F 75"/>
+  <a u="7129" b="9F 76"/>
+  <a u="712A" b="9F 77"/>
+  <a u="712B" b="9F 78"/>
+  <a u="712C" b="9F 79"/>
+  <a u="712D" b="9F 7A"/>
+  <a u="712E" b="9F 7B"/>
+  <a u="712F" b="EC CC"/>
+  <a u="7130" b="D1 E6"/>
+  <a u="7131" b="EC CD"/>
+  <a u="7132" b="9F 7C"/>
+  <a u="7133" b="9F 7D"/>
+  <a u="7134" b="9F 7E"/>
+  <a u="7135" b="9F 80"/>
+  <a u="7136" b="C8 BB"/>
+  <a u="7137" b="9F 81"/>
+  <a u="7138" b="9F 82"/>
+  <a u="7139" b="9F 83"/>
+  <a u="713A" b="9F 84"/>
+  <a u="713B" b="9F 85"/>
+  <a u="713C" b="9F 86"/>
+  <a u="713D" b="9F 87"/>
+  <a u="713E" b="9F 88"/>
+  <a u="713F" b="9F 89"/>
+  <a u="7140" b="9F 8A"/>
+  <a u="7141" b="9F 8B"/>
+  <a u="7142" b="9F 8C"/>
+  <a u="7143" b="9F 8D"/>
+  <a u="7144" b="9F 8E"/>
+  <a u="7145" b="EC D1"/>
+  <a u="7146" b="9F 8F"/>
+  <a u="7147" b="9F 90"/>
+  <a u="7148" b="9F 91"/>
+  <a u="7149" b="9F 92"/>
+  <a u="714A" b="EC D3"/>
+  <a u="714B" b="9F 93"/>
+  <a u="714C" b="BB CD"/>
+  <a u="714D" b="9F 94"/>
+  <a u="714E" b="BC E5"/>
+  <a u="714F" b="9F 95"/>
+  <a u="7150" b="9F 96"/>
+  <a u="7151" b="9F 97"/>
+  <a u="7152" b="9F 98"/>
+  <a u="7153" b="9F 99"/>
+  <a u="7154" b="9F 9A"/>
+  <a u="7155" b="9F 9B"/>
+  <a u="7156" b="9F 9C"/>
+  <a u="7157" b="9F 9D"/>
+  <a u="7158" b="9F 9E"/>
+  <a u="7159" b="9F 9F"/>
+  <a u="715A" b="9F A0"/>
+  <a u="715B" b="9F A1"/>
+  <a u="715C" b="EC CF"/>
+  <a u="715D" b="9F A2"/>
+  <a u="715E" b="C9 B7"/>
+  <a u="715F" b="9F A3"/>
+  <a u="7160" b="9F A4"/>
+  <a u="7161" b="9F A5"/>
+  <a u="7162" b="9F A6"/>
+  <a u="7163" b="9F A7"/>
+  <a u="7164" b="C3 BA"/>
+  <a u="7165" b="9F A8"/>
+  <a u="7166" b="EC E3"/>
+  <a u="7167" b="D5 D5"/>
+  <a u="7168" b="EC D0"/>
+  <a u="7169" b="9F A9"/>
+  <a u="716A" b="9F AA"/>
+  <a u="716B" b="9F AB"/>
+  <a u="716C" b="9F AC"/>
+  <a u="716D" b="9F AD"/>
+  <a u="716E" b="D6 F3"/>
+  <a u="716F" b="9F AE"/>
+  <a u="7170" b="9F AF"/>
+  <a u="7171" b="9F B0"/>
+  <a u="7172" b="EC D2"/>
+  <a u="7173" b="EC CE"/>
+  <a u="7174" b="9F B1"/>
+  <a u="7175" b="9F B2"/>
+  <a u="7176" b="9F B3"/>
+  <a u="7177" b="9F B4"/>
+  <a u="7178" b="EC D4"/>
+  <a u="7179" b="9F B5"/>
+  <a u="717A" b="EC D5"/>
+  <a u="717B" b="9F B6"/>
+  <a u="717C" b="9F B7"/>
+  <a u="717D" b="C9 BF"/>
+  <a u="717E" b="9F B8"/>
+  <a u="717F" b="9F B9"/>
+  <a u="7180" b="9F BA"/>
+  <a u="7181" b="9F BB"/>
+  <a u="7182" b="9F BC"/>
+  <a u="7183" b="9F BD"/>
+  <a u="7184" b="CF A8"/>
+  <a u="7185" b="9F BE"/>
+  <a u="7186" b="9F BF"/>
+  <a u="7187" b="9F C0"/>
+  <a u="7188" b="9F C1"/>
+  <a u="7189" b="9F C2"/>
+  <a u="718A" b="D0 DC"/>
+  <a u="718B" b="9F C3"/>
+  <a u="718C" b="9F C4"/>
+  <a u="718D" b="9F C5"/>
+  <a u="718E" b="9F C6"/>
+  <a u="718F" b="D1 AC"/>
+  <a u="7190" b="9F C7"/>
+  <a u="7191" b="9F C8"/>
+  <a u="7192" b="9F C9"/>
+  <a u="7193" b="9F CA"/>
+  <a u="7194" b="C8 DB"/>
+  <a u="7195" b="9F CB"/>
+  <a u="7196" b="9F CC"/>
+  <a u="7197" b="9F CD"/>
+  <a u="7198" b="EC D6"/>
+  <a u="7199" b="CE F5"/>
+  <a u="719A" b="9F CE"/>
+  <a u="719B" b="9F CF"/>
+  <a u="719C" b="9F D0"/>
+  <a u="719D" b="9F D1"/>
+  <a u="719E" b="9F D2"/>
+  <a u="719F" b="CA EC"/>
+  <a u="71A0" b="EC DA"/>
+  <a u="71A1" b="9F D3"/>
+  <a u="71A2" b="9F D4"/>
+  <a u="71A3" b="9F D5"/>
+  <a u="71A4" b="9F D6"/>
+  <a u="71A5" b="9F D7"/>
+  <a u="71A6" b="9F D8"/>
+  <a u="71A7" b="9F D9"/>
+  <a u="71A8" b="EC D9"/>
+  <a u="71A9" b="9F DA"/>
+  <a u="71AA" b="9F DB"/>
+  <a u="71AB" b="9F DC"/>
+  <a u="71AC" b="B0 BE"/>
+  <a u="71AD" b="9F DD"/>
+  <a u="71AE" b="9F DE"/>
+  <a u="71AF" b="9F DF"/>
+  <a u="71B0" b="9F E0"/>
+  <a u="71B1" b="9F E1"/>
+  <a u="71B2" b="9F E2"/>
+  <a u="71B3" b="EC D7"/>
+  <a u="71B4" b="9F E3"/>
+  <a u="71B5" b="EC D8"/>
+  <a u="71B6" b="9F E4"/>
+  <a u="71B7" b="9F E5"/>
+  <a u="71B8" b="9F E6"/>
+  <a u="71B9" b="EC E4"/>
+  <a u="71BA" b="9F E7"/>
+  <a u="71BB" b="9F E8"/>
+  <a u="71BC" b="9F E9"/>
+  <a u="71BD" b="9F EA"/>
+  <a u="71BE" b="9F EB"/>
+  <a u="71BF" b="9F EC"/>
+  <a u="71C0" b="9F ED"/>
+  <a u="71C1" b="9F EE"/>
+  <a u="71C2" b="9F EF"/>
+  <a u="71C3" b="C8 BC"/>
+  <a u="71C4" b="9F F0"/>
+  <a u="71C5" b="9F F1"/>
+  <a u="71C6" b="9F F2"/>
+  <a u="71C7" b="9F F3"/>
+  <a u="71C8" b="9F F4"/>
+  <a u="71C9" b="9F F5"/>
+  <a u="71CA" b="9F F6"/>
+  <a u="71CB" b="9F F7"/>
+  <a u="71CC" b="9F F8"/>
+  <a u="71CD" b="9F F9"/>
+  <a u="71CE" b="C1 C7"/>
+  <a u="71CF" b="9F FA"/>
+  <a u="71D0" b="9F FB"/>
+  <a u="71D1" b="9F FC"/>
+  <a u="71D2" b="9F FD"/>
+  <a u="71D3" b="9F FE"/>
+  <a u="71D4" b="EC DC"/>
+  <a u="71D5" b="D1 E0"/>
+  <a u="71D6" b="A0 40"/>
+  <a u="71D7" b="A0 41"/>
+  <a u="71D8" b="A0 42"/>
+  <a u="71D9" b="A0 43"/>
+  <a u="71DA" b="A0 44"/>
+  <a u="71DB" b="A0 45"/>
+  <a u="71DC" b="A0 46"/>
+  <a u="71DD" b="A0 47"/>
+  <a u="71DE" b="A0 48"/>
+  <a u="71DF" b="A0 49"/>
+  <a u="71E0" b="EC DB"/>
+  <a u="71E1" b="A0 4A"/>
+  <a u="71E2" b="A0 4B"/>
+  <a u="71E3" b="A0 4C"/>
+  <a u="71E4" b="A0 4D"/>
+  <a u="71E5" b="D4 EF"/>
+  <a u="71E6" b="A0 4E"/>
+  <a u="71E7" b="EC DD"/>
+  <a u="71E8" b="A0 4F"/>
+  <a u="71E9" b="A0 50"/>
+  <a u="71EA" b="A0 51"/>
+  <a u="71EB" b="A0 52"/>
+  <a u="71EC" b="A0 53"/>
+  <a u="71ED" b="A0 54"/>
+  <a u="71EE" b="DB C6"/>
+  <a u="71EF" b="A0 55"/>
+  <a u="71F0" b="A0 56"/>
+  <a u="71F1" b="A0 57"/>
+  <a u="71F2" b="A0 58"/>
+  <a u="71F3" b="A0 59"/>
+  <a u="71F4" b="A0 5A"/>
+  <a u="71F5" b="A0 5B"/>
+  <a u="71F6" b="A0 5C"/>
+  <a u="71F7" b="A0 5D"/>
+  <a u="71F8" b="A0 5E"/>
+  <a u="71F9" b="EC DE"/>
+  <a u="71FA" b="A0 5F"/>
+  <a u="71FB" b="A0 60"/>
+  <a u="71FC" b="A0 61"/>
+  <a u="71FD" b="A0 62"/>
+  <a u="71FE" b="A0 63"/>
+  <a u="71FF" b="A0 64"/>
+  <a u="7200" b="A0 65"/>
+  <a u="7201" b="A0 66"/>
+  <a u="7202" b="A0 67"/>
+  <a u="7203" b="A0 68"/>
+  <a u="7204" b="A0 69"/>
+  <a u="7205" b="A0 6A"/>
+  <a u="7206" b="B1 AC"/>
+  <a u="7207" b="A0 6B"/>
+  <a u="7208" b="A0 6C"/>
+  <a u="7209" b="A0 6D"/>
+  <a u="720A" b="A0 6E"/>
+  <a u="720B" b="A0 6F"/>
+  <a u="720C" b="A0 70"/>
+  <a u="720D" b="A0 71"/>
+  <a u="720E" b="A0 72"/>
+  <a u="720F" b="A0 73"/>
+  <a u="7210" b="A0 74"/>
+  <a u="7211" b="A0 75"/>
+  <a u="7212" b="A0 76"/>
+  <a u="7213" b="A0 77"/>
+  <a u="7214" b="A0 78"/>
+  <a u="7215" b="A0 79"/>
+  <a u="7216" b="A0 7A"/>
+  <a u="7217" b="A0 7B"/>
+  <a u="7218" b="A0 7C"/>
+  <a u="7219" b="A0 7D"/>
+  <a u="721A" b="A0 7E"/>
+  <a u="721B" b="A0 80"/>
+  <a u="721C" b="A0 81"/>
+  <a u="721D" b="EC DF"/>
+  <a u="721E" b="A0 82"/>
+  <a u="721F" b="A0 83"/>
+  <a u="7220" b="A0 84"/>
+  <a u="7221" b="A0 85"/>
+  <a u="7222" b="A0 86"/>
+  <a u="7223" b="A0 87"/>
+  <a u="7224" b="A0 88"/>
+  <a u="7225" b="A0 89"/>
+  <a u="7226" b="A0 8A"/>
+  <a u="7227" b="A0 8B"/>
+  <a u="7228" b="EC E0"/>
+  <a u="7229" b="A0 8C"/>
+  <a u="722A" b="D7 A6"/>
+  <a u="722B" b="A0 8D"/>
+  <a u="722C" b="C5 C0"/>
+  <a u="722D" b="A0 8E"/>
+  <a u="722E" b="A0 8F"/>
+  <a u="722F" b="A0 90"/>
+  <a u="7230" b="EB BC"/>
+  <a u="7231" b="B0 AE"/>
+  <a u="7232" b="A0 91"/>
+  <a u="7233" b="A0 92"/>
+  <a u="7234" b="A0 93"/>
+  <a u="7235" b="BE F4"/>
+  <a u="7236" b="B8 B8"/>
+  <a u="7237" b="D2 AF"/>
+  <a u="7238" b="B0 D6"/>
+  <a u="7239" b="B5 F9"/>
+  <a u="723A" b="A0 94"/>
+  <a u="723B" b="D8 B3"/>
+  <a u="723C" b="A0 95"/>
+  <a u="723D" b="CB AC"/>
+  <a u="723E" b="A0 96"/>
+  <a u="723F" b="E3 DD"/>
+  <a u="7240" b="A0 97"/>
+  <a u="7241" b="A0 98"/>
+  <a u="7242" b="A0 99"/>
+  <a u="7243" b="A0 9A"/>
+  <a u="7244" b="A0 9B"/>
+  <a u="7245" b="A0 9C"/>
+  <a u="7246" b="A0 9D"/>
+  <a u="7247" b="C6 AC"/>
+  <a u="7248" b="B0 E6"/>
+  <a u="7249" b="A0 9E"/>
+  <a u="724A" b="A0 9F"/>
+  <a u="724B" b="A0 A0"/>
+  <a u="724C" b="C5 C6"/>
+  <a u="724D" b="EB B9"/>
+  <a u="724E" b="A0 A1"/>
+  <a u="724F" b="A0 A2"/>
+  <a u="7250" b="A0 A3"/>
+  <a u="7251" b="A0 A4"/>
+  <a u="7252" b="EB BA"/>
+  <a u="7253" b="A0 A5"/>
+  <a u="7254" b="A0 A6"/>
+  <a u="7255" b="A0 A7"/>
+  <a u="7256" b="EB BB"/>
+  <a u="7257" b="A0 A8"/>
+  <a u="7258" b="A0 A9"/>
+  <a u="7259" b="D1 C0"/>
+  <a u="725A" b="A0 AA"/>
+  <a u="725B" b="C5 A3"/>
+  <a u="725C" b="A0 AB"/>
+  <a u="725D" b="EA F2"/>
+  <a u="725E" b="A0 AC"/>
+  <a u="725F" b="C4 B2"/>
+  <a u="7260" b="A0 AD"/>
+  <a u="7261" b="C4 B5"/>
+  <a u="7262" b="C0 CE"/>
+  <a u="7263" b="A0 AE"/>
+  <a u="7264" b="A0 AF"/>
+  <a u="7265" b="A0 B0"/>
+  <a u="7266" b="EA F3"/>
+  <a u="7267" b="C4 C1"/>
+  <a u="7268" b="A0 B1"/>
+  <a u="7269" b="CE EF"/>
+  <a u="726A" b="A0 B2"/>
+  <a u="726B" b="A0 B3"/>
+  <a u="726C" b="A0 B4"/>
+  <a u="726D" b="A0 B5"/>
+  <a u="726E" b="EA F0"/>
+  <a u="726F" b="EA F4"/>
+  <a u="7270" b="A0 B6"/>
+  <a u="7271" b="A0 B7"/>
+  <a u="7272" b="C9 FC"/>
+  <a u="7273" b="A0 B8"/>
+  <a u="7274" b="A0 B9"/>
+  <a u="7275" b="C7 A3"/>
+  <a u="7276" b="A0 BA"/>
+  <a u="7277" b="A0 BB"/>
+  <a u="7278" b="A0 BC"/>
+  <a u="7279" b="CC D8"/>
+  <a u="727A" b="CE FE"/>
+  <a u="727B" b="A0 BD"/>
+  <a u="727C" b="A0 BE"/>
+  <a u="727D" b="A0 BF"/>
+  <a u="727E" b="EA F5"/>
+  <a u="727F" b="EA F6"/>
+  <a u="7280" b="CF AC"/>
+  <a u="7281" b="C0 E7"/>
+  <a u="7282" b="A0 C0"/>
+  <a u="7283" b="A0 C1"/>
+  <a u="7284" b="EA F7"/>
+  <a u="7285" b="A0 C2"/>
+  <a u="7286" b="A0 C3"/>
+  <a u="7287" b="A0 C4"/>
+  <a u="7288" b="A0 C5"/>
+  <a u="7289" b="A0 C6"/>
+  <a u="728A" b="B6 BF"/>
+  <a u="728B" b="EA F8"/>
+  <a u="728C" b="A0 C7"/>
+  <a u="728D" b="EA F9"/>
+  <a u="728E" b="A0 C8"/>
+  <a u="728F" b="EA FA"/>
+  <a u="7290" b="A0 C9"/>
+  <a u="7291" b="A0 CA"/>
+  <a u="7292" b="EA FB"/>
+  <a u="7293" b="A0 CB"/>
+  <a u="7294" b="A0 CC"/>
+  <a u="7295" b="A0 CD"/>
+  <a u="7296" b="A0 CE"/>
+  <a u="7297" b="A0 CF"/>
+  <a u="7298" b="A0 D0"/>
+  <a u="7299" b="A0 D1"/>
+  <a u="729A" b="A0 D2"/>
+  <a u="729B" b="A0 D3"/>
+  <a u="729C" b="A0 D4"/>
+  <a u="729D" b="A0 D5"/>
+  <a u="729E" b="A0 D6"/>
+  <a u="729F" b="EA F1"/>
+  <a u="72A0" b="A0 D7"/>
+  <a u="72A1" b="A0 D8"/>
+  <a u="72A2" b="A0 D9"/>
+  <a u="72A3" b="A0 DA"/>
+  <a u="72A4" b="A0 DB"/>
+  <a u="72A5" b="A0 DC"/>
+  <a u="72A6" b="A0 DD"/>
+  <a u="72A7" b="A0 DE"/>
+  <a u="72A8" b="A0 DF"/>
+  <a u="72A9" b="A0 E0"/>
+  <a u="72AA" b="A0 E1"/>
+  <a u="72AB" b="A0 E2"/>
+  <a u="72AC" b="C8 AE"/>
+  <a u="72AD" b="E1 EB"/>
+  <a u="72AE" b="A0 E3"/>
+  <a u="72AF" b="B7 B8"/>
+  <a u="72B0" b="E1 EC"/>
+  <a u="72B1" b="A0 E4"/>
+  <a u="72B2" b="A0 E5"/>
+  <a u="72B3" b="A0 E6"/>
+  <a u="72B4" b="E1 ED"/>
+  <a u="72B5" b="A0 E7"/>
+  <a u="72B6" b="D7 B4"/>
+  <a u="72B7" b="E1 EE"/>
+  <a u="72B8" b="E1 EF"/>
+  <a u="72B9" b="D3 CC"/>
+  <a u="72BA" b="A0 E8"/>
+  <a u="72BB" b="A0 E9"/>
+  <a u="72BC" b="A0 EA"/>
+  <a u="72BD" b="A0 EB"/>
+  <a u="72BE" b="A0 EC"/>
+  <a u="72BF" b="A0 ED"/>
+  <a u="72C0" b="A0 EE"/>
+  <a u="72C1" b="E1 F1"/>
+  <a u="72C2" b="BF F1"/>
+  <a u="72C3" b="E1 F0"/>
+  <a u="72C4" b="B5 D2"/>
+  <a u="72C5" b="A0 EF"/>
+  <a u="72C6" b="A0 F0"/>
+  <a u="72C7" b="A0 F1"/>
+  <a u="72C8" b="B1 B7"/>
+  <a u="72C9" b="A0 F2"/>
+  <a u="72CA" b="A0 F3"/>
+  <a u="72CB" b="A0 F4"/>
+  <a u="72CC" b="A0 F5"/>
+  <a u="72CD" b="E1 F3"/>
+  <a u="72CE" b="E1 F2"/>
+  <a u="72CF" b="A0 F6"/>
+  <a u="72D0" b="BA FC"/>
+  <a u="72D1" b="A0 F7"/>
+  <a u="72D2" b="E1 F4"/>
+  <a u="72D3" b="A0 F8"/>
+  <a u="72D4" b="A0 F9"/>
+  <a u="72D5" b="A0 FA"/>
+  <a u="72D6" b="A0 FB"/>
+  <a u="72D7" b="B9 B7"/>
+  <a u="72D8" b="A0 FC"/>
+  <a u="72D9" b="BE D1"/>
+  <a u="72DA" b="A0 FD"/>
+  <a u="72DB" b="A0 FE"/>
+  <a u="72DC" b="AA 40"/>
+  <a u="72DD" b="AA 41"/>
+  <a u="72DE" b="C4 FC"/>
+  <a u="72DF" b="AA 42"/>
+  <a u="72E0" b="BA DD"/>
+  <a u="72E1" b="BD C6"/>
+  <a u="72E2" b="AA 43"/>
+  <a u="72E3" b="AA 44"/>
+  <a u="72E4" b="AA 45"/>
+  <a u="72E5" b="AA 46"/>
+  <a u="72E6" b="AA 47"/>
+  <a u="72E7" b="AA 48"/>
+  <a u="72E8" b="E1 F5"/>
+  <a u="72E9" b="E1 F7"/>
+  <a u="72EA" b="AA 49"/>
+  <a u="72EB" b="AA 4A"/>
+  <a u="72EC" b="B6 C0"/>
+  <a u="72ED" b="CF C1"/>
+  <a u="72EE" b="CA A8"/>
+  <a u="72EF" b="E1 F6"/>
+  <a u="72F0" b="D5 F8"/>
+  <a u="72F1" b="D3 FC"/>
+  <a u="72F2" b="E1 F8"/>
+  <a u="72F3" b="E1 FC"/>
+  <a u="72F4" b="E1 F9"/>
+  <a u="72F5" b="AA 4B"/>
+  <a u="72F6" b="AA 4C"/>
+  <a u="72F7" b="E1 FA"/>
+  <a u="72F8" b="C0 EA"/>
+  <a u="72F9" b="AA 4D"/>
+  <a u="72FA" b="E1 FE"/>
+  <a u="72FB" b="E2 A1"/>
+  <a u="72FC" b="C0 C7"/>
+  <a u="72FD" b="AA 4E"/>
+  <a u="72FE" b="AA 4F"/>
+  <a u="72FF" b="AA 50"/>
+  <a u="7300" b="AA 51"/>
+  <a u="7301" b="E1 FB"/>
+  <a u="7302" b="AA 52"/>
+  <a u="7303" b="E1 FD"/>
+  <a u="7304" b="AA 53"/>
+  <a u="7305" b="AA 54"/>
+  <a u="7306" b="AA 55"/>
+  <a u="7307" b="AA 56"/>
+  <a u="7308" b="AA 57"/>
+  <a u="7309" b="AA 58"/>
+  <a u="730A" b="E2 A5"/>
+  <a u="730B" b="AA 59"/>
+  <a u="730C" b="AA 5A"/>
+  <a u="730D" b="AA 5B"/>
+  <a u="730E" b="C1 D4"/>
+  <a u="730F" b="AA 5C"/>
+  <a u="7310" b="AA 5D"/>
+  <a u="7311" b="AA 5E"/>
+  <a u="7312" b="AA 5F"/>
+  <a u="7313" b="E2 A3"/>
+  <a u="7314" b="AA 60"/>
+  <a u="7315" b="E2 A8"/>
+  <a u="7316" b="B2 FE"/>
+  <a u="7317" b="E2 A2"/>
+  <a u="7318" b="AA 61"/>
+  <a u="7319" b="AA 62"/>
+  <a u="731A" b="AA 63"/>
+  <a u="731B" b="C3 CD"/>
+  <a u="731C" b="B2 C2"/>
+  <a u="731D" b="E2 A7"/>
+  <a u="731E" b="E2 A6"/>
+  <a u="731F" b="AA 64"/>
+  <a u="7320" b="AA 65"/>
+  <a u="7321" b="E2 A4"/>
+  <a u="7322" b="E2 A9"/>
+  <a u="7323" b="AA 66"/>
+  <a u="7324" b="AA 67"/>
+  <a u="7325" b="E2 AB"/>
+  <a u="7326" b="AA 68"/>
+  <a u="7327" b="AA 69"/>
+  <a u="7328" b="AA 6A"/>
+  <a u="7329" b="D0 C9"/>
+  <a u="732A" b="D6 ED"/>
+  <a u="732B" b="C3 A8"/>
+  <a u="732C" b="E2 AC"/>
+  <a u="732D" b="AA 6B"/>
+  <a u="732E" b="CF D7"/>
+  <a u="732F" b="AA 6C"/>
+  <a u="7330" b="AA 6D"/>
+  <a u="7331" b="E2 AE"/>
+  <a u="7332" b="AA 6E"/>
+  <a u="7333" b="AA 6F"/>
+  <a u="7334" b="BA EF"/>
+  <a u="7335" b="AA 70"/>
+  <a u="7336" b="AA 71"/>
+  <a u="7337" b="E9 E0"/>
+  <a u="7338" b="E2 AD"/>
+  <a u="7339" b="E2 AA"/>
+  <a u="733A" b="AA 72"/>
+  <a u="733B" b="AA 73"/>
+  <a u="733C" b="AA 74"/>
+  <a u="733D" b="AA 75"/>
+  <a u="733E" b="BB AB"/>
+  <a u="733F" b="D4 B3"/>
+  <a u="7340" b="AA 76"/>
+  <a u="7341" b="AA 77"/>
+  <a u="7342" b="AA 78"/>
+  <a u="7343" b="AA 79"/>
+  <a u="7344" b="AA 7A"/>
+  <a u="7345" b="AA 7B"/>
+  <a u="7346" b="AA 7C"/>
+  <a u="7347" b="AA 7D"/>
+  <a u="7348" b="AA 7E"/>
+  <a u="7349" b="AA 80"/>
+  <a u="734A" b="AA 81"/>
+  <a u="734B" b="AA 82"/>
+  <a u="734C" b="AA 83"/>
+  <a u="734D" b="E2 B0"/>
+  <a u="734E" b="AA 84"/>
+  <a u="734F" b="AA 85"/>
+  <a u="7350" b="E2 AF"/>
+  <a u="7351" b="AA 86"/>
+  <a u="7352" b="E9 E1"/>
+  <a u="7353" b="AA 87"/>
+  <a u="7354" b="AA 88"/>
+  <a u="7355" b="AA 89"/>
+  <a u="7356" b="AA 8A"/>
+  <a u="7357" b="E2 B1"/>
+  <a u="7358" b="AA 8B"/>
+  <a u="7359" b="AA 8C"/>
+  <a u="735A" b="AA 8D"/>
+  <a u="735B" b="AA 8E"/>
+  <a u="735C" b="AA 8F"/>
+  <a u="735D" b="AA 90"/>
+  <a u="735E" b="AA 91"/>
+  <a u="735F" b="AA 92"/>
+  <a u="7360" b="E2 B2"/>
+  <a u="7361" b="AA 93"/>
+  <a u="7362" b="AA 94"/>
+  <a u="7363" b="AA 95"/>
+  <a u="7364" b="AA 96"/>
+  <a u="7365" b="AA 97"/>
+  <a u="7366" b="AA 98"/>
+  <a u="7367" b="AA 99"/>
+  <a u="7368" b="AA 9A"/>
+  <a u="7369" b="AA 9B"/>
+  <a u="736A" b="AA 9C"/>
+  <a u="736B" b="AA 9D"/>
+  <a u="736C" b="E2 B3"/>
+  <a u="736D" b="CC A1"/>
+  <a u="736E" b="AA 9E"/>
+  <a u="736F" b="E2 B4"/>
+  <a u="7370" b="AA 9F"/>
+  <a u="7371" b="AA A0"/>
+  <a u="7372" b="AB 40"/>
+  <a u="7373" b="AB 41"/>
+  <a u="7374" b="AB 42"/>
+  <a u="7375" b="AB 43"/>
+  <a u="7376" b="AB 44"/>
+  <a u="7377" b="AB 45"/>
+  <a u="7378" b="AB 46"/>
+  <a u="7379" b="AB 47"/>
+  <a u="737A" b="AB 48"/>
+  <a u="737B" b="AB 49"/>
+  <a u="737C" b="AB 4A"/>
+  <a u="737D" b="AB 4B"/>
+  <a u="737E" b="E2 B5"/>
+  <a u="737F" b="AB 4C"/>
+  <a u="7380" b="AB 4D"/>
+  <a u="7381" b="AB 4E"/>
+  <a u="7382" b="AB 4F"/>
+  <a u="7383" b="AB 50"/>
+  <a u="7384" b="D0 FE"/>
+  <a u="7385" b="AB 51"/>
+  <a u="7386" b="AB 52"/>
+  <a u="7387" b="C2 CA"/>
+  <a u="7388" b="AB 53"/>
+  <a u="7389" b="D3 F1"/>
+  <a u="738A" b="AB 54"/>
+  <a u="738B" b="CD F5"/>
+  <a u="738C" b="AB 55"/>
+  <a u="738D" b="AB 56"/>
+  <a u="738E" b="E7 E0"/>
+  <a u="738F" b="AB 57"/>
+  <a u="7390" b="AB 58"/>
+  <a u="7391" b="E7 E1"/>
+  <a u="7392" b="AB 59"/>
+  <a u="7393" b="AB 5A"/>
+  <a u="7394" b="AB 5B"/>
+  <a u="7395" b="AB 5C"/>
+  <a u="7396" b="BE C1"/>
+  <a u="7397" b="AB 5D"/>
+  <a u="7398" b="AB 5E"/>
+  <a u="7399" b="AB 5F"/>
+  <a u="739A" b="AB 60"/>
+  <a u="739B" b="C2 EA"/>
+  <a u="739C" b="AB 61"/>
+  <a u="739D" b="AB 62"/>
+  <a u="739E" b="AB 63"/>
+  <a u="739F" b="E7 E4"/>
+  <a u="73A0" b="AB 64"/>
+  <a u="73A1" b="AB 65"/>
+  <a u="73A2" b="E7 E3"/>
+  <a u="73A3" b="AB 66"/>
+  <a u="73A4" b="AB 67"/>
+  <a u="73A5" b="AB 68"/>
+  <a u="73A6" b="AB 69"/>
+  <a u="73A7" b="AB 6A"/>
+  <a u="73A8" b="AB 6B"/>
+  <a u="73A9" b="CD E6"/>
+  <a u="73AA" b="AB 6C"/>
+  <a u="73AB" b="C3 B5"/>
+  <a u="73AC" b="AB 6D"/>
+  <a u="73AD" b="AB 6E"/>
+  <a u="73AE" b="E7 E2"/>
+  <a u="73AF" b="BB B7"/>
+  <a u="73B0" b="CF D6"/>
+  <a u="73B1" b="AB 6F"/>
+  <a u="73B2" b="C1 E1"/>
+  <a u="73B3" b="E7 E9"/>
+  <a u="73B4" b="AB 70"/>
+  <a u="73B5" b="AB 71"/>
+  <a u="73B6" b="AB 72"/>
+  <a u="73B7" b="E7 E8"/>
+  <a u="73B8" b="AB 73"/>
+  <a u="73B9" b="AB 74"/>
+  <a u="73BA" b="E7 F4"/>
+  <a u="73BB" b="B2 A3"/>
+  <a u="73BC" b="AB 75"/>
+  <a u="73BD" b="AB 76"/>
+  <a u="73BE" b="AB 77"/>
+  <a u="73BF" b="AB 78"/>
+  <a u="73C0" b="E7 EA"/>
+  <a u="73C1" b="AB 79"/>
+  <a u="73C2" b="E7 E6"/>
+  <a u="73C3" b="AB 7A"/>
+  <a u="73C4" b="AB 7B"/>
+  <a u="73C5" b="AB 7C"/>
+  <a u="73C6" b="AB 7D"/>
+  <a u="73C7" b="AB 7E"/>
+  <a u="73C8" b="E7 EC"/>
+  <a u="73C9" b="E7 EB"/>
+  <a u="73CA" b="C9 BA"/>
+  <a u="73CB" b="AB 80"/>
+  <a u="73CC" b="AB 81"/>
+  <a u="73CD" b="D5 E4"/>
+  <a u="73CE" b="AB 82"/>
+  <a u="73CF" b="E7 E5"/>
+  <a u="73D0" b="B7 A9"/>
+  <a u="73D1" b="E7 E7"/>
+  <a u="73D2" b="AB 83"/>
+  <a u="73D3" b="AB 84"/>
+  <a u="73D4" b="AB 85"/>
+  <a u="73D5" b="AB 86"/>
+  <a u="73D6" b="AB 87"/>
+  <a u="73D7" b="AB 88"/>
+  <a u="73D8" b="AB 89"/>
+  <a u="73D9" b="E7 EE"/>
+  <a u="73DA" b="AB 8A"/>
+  <a u="73DB" b="AB 8B"/>
+  <a u="73DC" b="AB 8C"/>
+  <a u="73DD" b="AB 8D"/>
+  <a u="73DE" b="E7 F3"/>
+  <a u="73DF" b="AB 8E"/>
+  <a u="73E0" b="D6 E9"/>
+  <a u="73E1" b="AB 8F"/>
+  <a u="73E2" b="AB 90"/>
+  <a u="73E3" b="AB 91"/>
+  <a u="73E4" b="AB 92"/>
+  <a u="73E5" b="E7 ED"/>
+  <a u="73E6" b="AB 93"/>
+  <a u="73E7" b="E7 F2"/>
+  <a u="73E8" b="AB 94"/>
+  <a u="73E9" b="E7 F1"/>
+  <a u="73EA" b="AB 95"/>
+  <a u="73EB" b="AB 96"/>
+  <a u="73EC" b="AB 97"/>
+  <a u="73ED" b="B0 E0"/>
+  <a u="73EE" b="AB 98"/>
+  <a u="73EF" b="AB 99"/>
+  <a u="73F0" b="AB 9A"/>
+  <a u="73F1" b="AB 9B"/>
+  <a u="73F2" b="E7 F5"/>
+  <a u="73F3" b="AB 9C"/>
+  <a u="73F4" b="AB 9D"/>
+  <a u="73F5" b="AB 9E"/>
+  <a u="73F6" b="AB 9F"/>
+  <a u="73F7" b="AB A0"/>
+  <a u="73F8" b="AC 40"/>
+  <a u="73F9" b="AC 41"/>
+  <a u="73FA" b="AC 42"/>
+  <a u="73FB" b="AC 43"/>
+  <a u="73FC" b="AC 44"/>
+  <a u="73FD" b="AC 45"/>
+  <a u="73FE" b="AC 46"/>
+  <a u="73FF" b="AC 47"/>
+  <a u="7400" b="AC 48"/>
+  <a u="7401" b="AC 49"/>
+  <a u="7402" b="AC 4A"/>
+  <a u="7403" b="C7 F2"/>
+  <a u="7404" b="AC 4B"/>
+  <a u="7405" b="C0 C5"/>
+  <a u="7406" b="C0 ED"/>
+  <a u="7407" b="AC 4C"/>
+  <a u="7408" b="AC 4D"/>
+  <a u="7409" b="C1 F0"/>
+  <a u="740A" b="E7 F0"/>
+  <a u="740B" b="AC 4E"/>
+  <a u="740C" b="AC 4F"/>
+  <a u="740D" b="AC 50"/>
+  <a u="740E" b="AC 51"/>
+  <a u="740F" b="E7 F6"/>
+  <a u="7410" b="CB F6"/>
+  <a u="7411" b="AC 52"/>
+  <a u="7412" b="AC 53"/>
+  <a u="7413" b="AC 54"/>
+  <a u="7414" b="AC 55"/>
+  <a u="7415" b="AC 56"/>
+  <a u="7416" b="AC 57"/>
+  <a u="7417" b="AC 58"/>
+  <a u="7418" b="AC 59"/>
+  <a u="7419" b="AC 5A"/>
+  <a u="741A" b="E8 A2"/>
+  <a u="741B" b="E8 A1"/>
+  <a u="741C" b="AC 5B"/>
+  <a u="741D" b="AC 5C"/>
+  <a u="741E" b="AC 5D"/>
+  <a u="741F" b="AC 5E"/>
+  <a u="7420" b="AC 5F"/>
+  <a u="7421" b="AC 60"/>
+  <a u="7422" b="D7 C1"/>
+  <a u="7423" b="AC 61"/>
+  <a u="7424" b="AC 62"/>
+  <a u="7425" b="E7 FA"/>
+  <a u="7426" b="E7 F9"/>
+  <a u="7427" b="AC 63"/>
+  <a u="7428" b="E7 FB"/>
+  <a u="7429" b="AC 64"/>
+  <a u="742A" b="E7 F7"/>
+  <a u="742B" b="AC 65"/>
+  <a u="742C" b="E7 FE"/>
+  <a u="742D" b="AC 66"/>
+  <a u="742E" b="E7 FD"/>
+  <a u="742F" b="AC 67"/>
+  <a u="7430" b="E7 FC"/>
+  <a u="7431" b="AC 68"/>
+  <a u="7432" b="AC 69"/>
+  <a u="7433" b="C1 D5"/>
+  <a u="7434" b="C7 D9"/>
+  <a u="7435" b="C5 FD"/>
+  <a u="7436" b="C5 C3"/>
+  <a u="7437" b="AC 6A"/>
+  <a u="7438" b="AC 6B"/>
+  <a u="7439" b="AC 6C"/>
+  <a u="743A" b="AC 6D"/>
+  <a u="743B" b="AC 6E"/>
+  <a u="743C" b="C7 ED"/>
+  <a u="743D" b="AC 6F"/>
+  <a u="743E" b="AC 70"/>
+  <a u="743F" b="AC 71"/>
+  <a u="7440" b="AC 72"/>
+  <a u="7441" b="E8 A3"/>
+  <a u="7442" b="AC 73"/>
+  <a u="7443" b="AC 74"/>
+  <a u="7444" b="AC 75"/>
+  <a u="7445" b="AC 76"/>
+  <a u="7446" b="AC 77"/>
+  <a u="7447" b="AC 78"/>
+  <a u="7448" b="AC 79"/>
+  <a u="7449" b="AC 7A"/>
+  <a u="744A" b="AC 7B"/>
+  <a u="744B" b="AC 7C"/>
+  <a u="744C" b="AC 7D"/>
+  <a u="744D" b="AC 7E"/>
+  <a u="744E" b="AC 80"/>
+  <a u="744F" b="AC 81"/>
+  <a u="7450" b="AC 82"/>
+  <a u="7451" b="AC 83"/>
+  <a u="7452" b="AC 84"/>
+  <a u="7453" b="AC 85"/>
+  <a u="7454" b="AC 86"/>
+  <a u="7455" b="E8 A6"/>
+  <a u="7456" b="AC 87"/>
+  <a u="7457" b="E8 A5"/>
+  <a u="7458" b="AC 88"/>
+  <a u="7459" b="E8 A7"/>
+  <a u="745A" b="BA F7"/>
+  <a u="745B" b="E7 F8"/>
+  <a u="745C" b="E8 A4"/>
+  <a u="745D" b="AC 89"/>
+  <a u="745E" b="C8 F0"/>
+  <a u="745F" b="C9 AA"/>
+  <a u="7460" b="AC 8A"/>
+  <a u="7461" b="AC 8B"/>
+  <a u="7462" b="AC 8C"/>
+  <a u="7463" b="AC 8D"/>
+  <a u="7464" b="AC 8E"/>
+  <a u="7465" b="AC 8F"/>
+  <a u="7466" b="AC 90"/>
+  <a u="7467" b="AC 91"/>
+  <a u="7468" b="AC 92"/>
+  <a u="7469" b="AC 93"/>
+  <a u="746A" b="AC 94"/>
+  <a u="746B" b="AC 95"/>
+  <a u="746C" b="AC 96"/>
+  <a u="746D" b="E8 A9"/>
+  <a u="746E" b="AC 97"/>
+  <a u="746F" b="AC 98"/>
+  <a u="7470" b="B9 E5"/>
+  <a u="7471" b="AC 99"/>
+  <a u="7472" b="AC 9A"/>
+  <a u="7473" b="AC 9B"/>
+  <a u="7474" b="AC 9C"/>
+  <a u="7475" b="AC 9D"/>
+  <a u="7476" b="D1 FE"/>
+  <a u="7477" b="E8 A8"/>
+  <a u="7478" b="AC 9E"/>
+  <a u="7479" b="AC 9F"/>
+  <a u="747A" b="AC A0"/>
+  <a u="747B" b="AD 40"/>
+  <a u="747C" b="AD 41"/>
+  <a u="747D" b="AD 42"/>
+  <a u="747E" b="E8 AA"/>
+  <a u="747F" b="AD 43"/>
+  <a u="7480" b="E8 AD"/>
+  <a u="7481" b="E8 AE"/>
+  <a u="7482" b="AD 44"/>
+  <a u="7483" b="C1 A7"/>
+  <a u="7484" b="AD 45"/>
+  <a u="7485" b="AD 46"/>
+  <a u="7486" b="AD 47"/>
+  <a u="7487" b="E8 AF"/>
+  <a u="7488" b="AD 48"/>
+  <a u="7489" b="AD 49"/>
+  <a u="748A" b="AD 4A"/>
+  <a u="748B" b="E8 B0"/>
+  <a u="748C" b="AD 4B"/>
+  <a u="748D" b="AD 4C"/>
+  <a u="748E" b="E8 AC"/>
+  <a u="748F" b="AD 4D"/>
+  <a u="7490" b="E8 B4"/>
+  <a u="7491" b="AD 4E"/>
+  <a u="7492" b="AD 4F"/>
+  <a u="7493" b="AD 50"/>
+  <a u="7494" b="AD 51"/>
+  <a u="7495" b="AD 52"/>
+  <a u="7496" b="AD 53"/>
+  <a u="7497" b="AD 54"/>
+  <a u="7498" b="AD 55"/>
+  <a u="7499" b="AD 56"/>
+  <a u="749A" b="AD 57"/>
+  <a u="749B" b="AD 58"/>
+  <a u="749C" b="E8 AB"/>
+  <a u="749D" b="AD 59"/>
+  <a u="749E" b="E8 B1"/>
+  <a u="749F" b="AD 5A"/>
+  <a u="74A0" b="AD 5B"/>
+  <a u="74A1" b="AD 5C"/>
+  <a u="74A2" b="AD 5D"/>
+  <a u="74A3" b="AD 5E"/>
+  <a u="74A4" b="AD 5F"/>
+  <a u="74A5" b="AD 60"/>
+  <a u="74A6" b="AD 61"/>
+  <a u="74A7" b="E8 B5"/>
+  <a u="74A8" b="E8 B2"/>
+  <a u="74A9" b="E8 B3"/>
+  <a u="74AA" b="AD 62"/>
+  <a u="74AB" b="AD 63"/>
+  <a u="74AC" b="AD 64"/>
+  <a u="74AD" b="AD 65"/>
+  <a u="74AE" b="AD 66"/>
+  <a u="74AF" b="AD 67"/>
+  <a u="74B0" b="AD 68"/>
+  <a u="74B1" b="AD 69"/>
+  <a u="74B2" b="AD 6A"/>
+  <a u="74B3" b="AD 6B"/>
+  <a u="74B4" b="AD 6C"/>
+  <a u="74B5" b="AD 6D"/>
+  <a u="74B6" b="AD 6E"/>
+  <a u="74B7" b="AD 6F"/>
+  <a u="74B8" b="AD 70"/>
+  <a u="74B9" b="AD 71"/>
+  <a u="74BA" b="E8 B7"/>
+  <a u="74BB" b="AD 72"/>
+  <a u="74BC" b="AD 73"/>
+  <a u="74BD" b="AD 74"/>
+  <a u="74BE" b="AD 75"/>
+  <a u="74BF" b="AD 76"/>
+  <a u="74C0" b="AD 77"/>
+  <a u="74C1" b="AD 78"/>
+  <a u="74C2" b="AD 79"/>
+  <a u="74C3" b="AD 7A"/>
+  <a u="74C4" b="AD 7B"/>
+  <a u="74C5" b="AD 7C"/>
+  <a u="74C6" b="AD 7D"/>
+  <a u="74C7" b="AD 7E"/>
+  <a u="74C8" b="AD 80"/>
+  <a u="74C9" b="AD 81"/>
+  <a u="74CA" b="AD 82"/>
+  <a u="74CB" b="AD 83"/>
+  <a u="74CC" b="AD 84"/>
+  <a u="74CD" b="AD 85"/>
+  <a u="74CE" b="AD 86"/>
+  <a u="74CF" b="AD 87"/>
+  <a u="74D0" b="AD 88"/>
+  <a u="74D1" b="AD 89"/>
+  <a u="74D2" b="E8 B6"/>
+  <a u="74D3" b="AD 8A"/>
+  <a u="74D4" b="AD 8B"/>
+  <a u="74D5" b="AD 8C"/>
+  <a u="74D6" b="AD 8D"/>
+  <a u="74D7" b="AD 8E"/>
+  <a u="74D8" b="AD 8F"/>
+  <a u="74D9" b="AD 90"/>
+  <a u="74DA" b="AD 91"/>
+  <a u="74DB" b="AD 92"/>
+  <a u="74DC" b="B9 CF"/>
+  <a u="74DD" b="AD 93"/>
+  <a u="74DE" b="F0 AC"/>
+  <a u="74DF" b="AD 94"/>
+  <a u="74E0" b="F0 AD"/>
+  <a u="74E1" b="AD 95"/>
+  <a u="74E2" b="C6 B0"/>
+  <a u="74E3" b="B0 EA"/>
+  <a u="74E4" b="C8 BF"/>
+  <a u="74E5" b="AD 96"/>
+  <a u="74E6" b="CD DF"/>
+  <a u="74E7" b="AD 97"/>
+  <a u="74E8" b="AD 98"/>
+  <a u="74E9" b="AD 99"/>
+  <a u="74EA" b="AD 9A"/>
+  <a u="74EB" b="AD 9B"/>
+  <a u="74EC" b="AD 9C"/>
+  <a u="74ED" b="AD 9D"/>
+  <a u="74EE" b="CE CD"/>
+  <a u="74EF" b="EA B1"/>
+  <a u="74F0" b="AD 9E"/>
+  <a u="74F1" b="AD 9F"/>
+  <a u="74F2" b="AD A0"/>
+  <a u="74F3" b="AE 40"/>
+  <a u="74F4" b="EA B2"/>
+  <a u="74F5" b="AE 41"/>
+  <a u="74F6" b="C6 BF"/>
+  <a u="74F7" b="B4 C9"/>
+  <a u="74F8" b="AE 42"/>
+  <a u="74F9" b="AE 43"/>
+  <a u="74FA" b="AE 44"/>
+  <a u="74FB" b="AE 45"/>
+  <a u="74FC" b="AE 46"/>
+  <a u="74FD" b="AE 47"/>
+  <a u="74FE" b="AE 48"/>
+  <a u="74FF" b="EA B3"/>
+  <a u="7500" b="AE 49"/>
+  <a u="7501" b="AE 4A"/>
+  <a u="7502" b="AE 4B"/>
+  <a u="7503" b="AE 4C"/>
+  <a u="7504" b="D5 E7"/>
+  <a u="7505" b="AE 4D"/>
+  <a u="7506" b="AE 4E"/>
+  <a u="7507" b="AE 4F"/>
+  <a u="7508" b="AE 50"/>
+  <a u="7509" b="AE 51"/>
+  <a u="750A" b="AE 52"/>
+  <a u="750B" b="AE 53"/>
+  <a u="750C" b="AE 54"/>
+  <a u="750D" b="DD F9"/>
+  <a u="750E" b="AE 55"/>
+  <a u="750F" b="EA B4"/>
+  <a u="7510" b="AE 56"/>
+  <a u="7511" b="EA B5"/>
+  <a u="7512" b="AE 57"/>
+  <a u="7513" b="EA B6"/>
+  <a u="7514" b="AE 58"/>
+  <a u="7515" b="AE 59"/>
+  <a u="7516" b="AE 5A"/>
+  <a u="7517" b="AE 5B"/>
+  <a u="7518" b="B8 CA"/>
+  <a u="7519" b="DF B0"/>
+  <a u="751A" b="C9 F5"/>
+  <a u="751B" b="AE 5C"/>
+  <a u="751C" b="CC F0"/>
+  <a u="751D" b="AE 5D"/>
+  <a u="751E" b="AE 5E"/>
+  <a u="751F" b="C9 FA"/>
+  <a u="7520" b="AE 5F"/>
+  <a u="7521" b="AE 60"/>
+  <a u="7522" b="AE 61"/>
+  <a u="7523" b="AE 62"/>
+  <a u="7524" b="AE 63"/>
+  <a u="7525" b="C9 FB"/>
+  <a u="7526" b="AE 64"/>
+  <a u="7527" b="AE 65"/>
+  <a u="7528" b="D3 C3"/>
+  <a u="7529" b="CB A6"/>
+  <a u="752A" b="AE 66"/>
+  <a u="752B" b="B8 A6"/>
+  <a u="752C" b="F0 AE"/>
+  <a u="752D" b="B1 C2"/>
+  <a u="752E" b="AE 67"/>
+  <a u="752F" b="E5 B8"/>
+  <a u="7530" b="CC EF"/>
+  <a u="7531" b="D3 C9"/>
+  <a u="7532" b="BC D7"/>
+  <a u="7533" b="C9 EA"/>
+  <a u="7534" b="AE 68"/>
+  <a u="7535" b="B5 E7"/>
+  <a u="7536" b="AE 69"/>
+  <a u="7537" b="C4 D0"/>
+  <a u="7538" b="B5 E9"/>
+  <a u="7539" b="AE 6A"/>
+  <a u="753A" b="EE AE"/>
+  <a u="753B" b="BB AD"/>
+  <a u="753C" b="AE 6B"/>
+  <a u="753D" b="AE 6C"/>
+  <a u="753E" b="E7 DE"/>
+  <a u="753F" b="AE 6D"/>
+  <a u="7540" b="EE AF"/>
+  <a u="7541" b="AE 6E"/>
+  <a u="7542" b="AE 6F"/>
+  <a u="7543" b="AE 70"/>
+  <a u="7544" b="AE 71"/>
+  <a u="7545" b="B3 A9"/>
+  <a u="7546" b="AE 72"/>
+  <a u="7547" b="AE 73"/>
+  <a u="7548" b="EE B2"/>
+  <a u="7549" b="AE 74"/>
+  <a u="754A" b="AE 75"/>
+  <a u="754B" b="EE B1"/>
+  <a u="754C" b="BD E7"/>
+  <a u="754D" b="AE 76"/>
+  <a u="754E" b="EE B0"/>
+  <a u="754F" b="CE B7"/>
+  <a u="7550" b="AE 77"/>
+  <a u="7551" b="AE 78"/>
+  <a u="7552" b="AE 79"/>
+  <a u="7553" b="AE 7A"/>
+  <a u="7554" b="C5 CF"/>
+  <a u="7555" b="AE 7B"/>
+  <a u="7556" b="AE 7C"/>
+  <a u="7557" b="AE 7D"/>
+  <a u="7558" b="AE 7E"/>
+  <a u="7559" b="C1 F4"/>
+  <a u="755A" b="DB CE"/>
+  <a u="755B" b="EE B3"/>
+  <a u="755C" b="D0 F3"/>
+  <a u="755D" b="AE 80"/>
+  <a u="755E" b="AE 81"/>
+  <a u="755F" b="AE 82"/>
+  <a u="7560" b="AE 83"/>
+  <a u="7561" b="AE 84"/>
+  <a u="7562" b="AE 85"/>
+  <a u="7563" b="AE 86"/>
+  <a u="7564" b="AE 87"/>
+  <a u="7565" b="C2 D4"/>
+  <a u="7566" b="C6 E8"/>
+  <a u="7567" b="AE 88"/>
+  <a u="7568" b="AE 89"/>
+  <a u="7569" b="AE 8A"/>
+  <a u="756A" b="B7 AC"/>
+  <a u="756B" b="AE 8B"/>
+  <a u="756C" b="AE 8C"/>
+  <a u="756D" b="AE 8D"/>
+  <a u="756E" b="AE 8E"/>
+  <a u="756F" b="AE 8F"/>
+  <a u="7570" b="AE 90"/>
+  <a u="7571" b="AE 91"/>
+  <a u="7572" b="EE B4"/>
+  <a u="7573" b="AE 92"/>
+  <a u="7574" b="B3 EB"/>
+  <a u="7575" b="AE 93"/>
+  <a u="7576" b="AE 94"/>
+  <a u="7577" b="AE 95"/>
+  <a u="7578" b="BB FB"/>
+  <a u="7579" b="EE B5"/>
+  <a u="757A" b="AE 96"/>
+  <a u="757B" b="AE 97"/>
+  <a u="757C" b="AE 98"/>
+  <a u="757D" b="AE 99"/>
+  <a u="757E" b="AE 9A"/>
+  <a u="757F" b="E7 DC"/>
+  <a u="7580" b="AE 9B"/>
+  <a u="7581" b="AE 9C"/>
+  <a u="7582" b="AE 9D"/>
+  <a u="7583" b="EE B6"/>
+  <a u="7584" b="AE 9E"/>
+  <a u="7585" b="AE 9F"/>
+  <a u="7586" b="BD AE"/>
+  <a u="7587" b="AE A0"/>
+  <a u="7588" b="AF 40"/>
+  <a u="7589" b="AF 41"/>
+  <a u="758A" b="AF 42"/>
+  <a u="758B" b="F1 E2"/>
+  <a u="758C" b="AF 43"/>
+  <a u="758D" b="AF 44"/>
+  <a u="758E" b="AF 45"/>
+  <a u="758F" b="CA E8"/>
+  <a u="7590" b="AF 46"/>
+  <a u="7591" b="D2 C9"/>
+  <a u="7592" b="F0 DA"/>
+  <a u="7593" b="AF 47"/>
+  <a u="7594" b="F0 DB"/>
+  <a u="7595" b="AF 48"/>
+  <a u="7596" b="F0 DC"/>
+  <a u="7597" b="C1 C6"/>
+  <a u="7598" b="AF 49"/>
+  <a u="7599" b="B8 ED"/>
+  <a u="759A" b="BE CE"/>
+  <a u="759B" b="AF 4A"/>
+  <a u="759C" b="AF 4B"/>
+  <a u="759D" b="F0 DE"/>
+  <a u="759E" b="AF 4C"/>
+  <a u="759F" b="C5 B1"/>
+  <a u="75A0" b="F0 DD"/>
+  <a u="75A1" b="D1 F1"/>
+  <a u="75A2" b="AF 4D"/>
+  <a u="75A3" b="F0 E0"/>
+  <a u="75A4" b="B0 CC"/>
+  <a u="75A5" b="BD EA"/>
+  <a u="75A6" b="AF 4E"/>
+  <a u="75A7" b="AF 4F"/>
+  <a u="75A8" b="AF 50"/>
+  <a u="75A9" b="AF 51"/>
+  <a u="75AA" b="AF 52"/>
+  <a u="75AB" b="D2 DF"/>
+  <a u="75AC" b="F0 DF"/>
+  <a u="75AD" b="AF 53"/>
+  <a u="75AE" b="B4 AF"/>
+  <a u="75AF" b="B7 E8"/>
+  <a u="75B0" b="F0 E6"/>
+  <a u="75B1" b="F0 E5"/>
+  <a u="75B2" b="C6 A3"/>
+  <a u="75B3" b="F0 E1"/>
+  <a u="75B4" b="F0 E2"/>
+  <a u="75B5" b="B4 C3"/>
+  <a u="75B6" b="AF 54"/>
+  <a u="75B7" b="AF 55"/>
+  <a u="75B8" b="F0 E3"/>
+  <a u="75B9" b="D5 EE"/>
+  <a u="75BA" b="AF 56"/>
+  <a u="75BB" b="AF 57"/>
+  <a u="75BC" b="CC DB"/>
+  <a u="75BD" b="BE D2"/>
+  <a u="75BE" b="BC B2"/>
+  <a u="75BF" b="AF 58"/>
+  <a u="75C0" b="AF 59"/>
+  <a u="75C1" b="AF 5A"/>
+  <a u="75C2" b="F0 E8"/>
+  <a u="75C3" b="F0 E7"/>
+  <a u="75C4" b="F0 E4"/>
+  <a u="75C5" b="B2 A1"/>
+  <a u="75C6" b="AF 5B"/>
+  <a u="75C7" b="D6 A2"/>
+  <a u="75C8" b="D3 B8"/>
+  <a u="75C9" b="BE B7"/>
+  <a u="75CA" b="C8 AC"/>
+  <a u="75CB" b="AF 5C"/>
+  <a u="75CC" b="AF 5D"/>
+  <a u="75CD" b="F0 EA"/>
+  <a u="75CE" b="AF 5E"/>
+  <a u="75CF" b="AF 5F"/>
+  <a u="75D0" b="AF 60"/>
+  <a u="75D1" b="AF 61"/>
+  <a u="75D2" b="D1 F7"/>
+  <a u="75D3" b="AF 62"/>
+  <a u="75D4" b="D6 CC"/>
+  <a u="75D5" b="BA DB"/>
+  <a u="75D6" b="F0 E9"/>
+  <a u="75D7" b="AF 63"/>
+  <a u="75D8" b="B6 BB"/>
+  <a u="75D9" b="AF 64"/>
+  <a u="75DA" b="AF 65"/>
+  <a u="75DB" b="CD B4"/>
+  <a u="75DC" b="AF 66"/>
+  <a u="75DD" b="AF 67"/>
+  <a u="75DE" b="C6 A6"/>
+  <a u="75DF" b="AF 68"/>
+  <a u="75E0" b="AF 69"/>
+  <a u="75E1" b="AF 6A"/>
+  <a u="75E2" b="C1 A1"/>
+  <a u="75E3" b="F0 EB"/>
+  <a u="75E4" b="F0 EE"/>
+  <a u="75E5" b="AF 6B"/>
+  <a u="75E6" b="F0 ED"/>
+  <a u="75E7" b="F0 F0"/>
+  <a u="75E8" b="F0 EC"/>
+  <a u="75E9" b="AF 6C"/>
+  <a u="75EA" b="BB BE"/>
+  <a u="75EB" b="F0 EF"/>
+  <a u="75EC" b="AF 6D"/>
+  <a u="75ED" b="AF 6E"/>
+  <a u="75EE" b="AF 6F"/>
+  <a u="75EF" b="AF 70"/>
+  <a u="75F0" b="CC B5"/>
+  <a u="75F1" b="F0 F2"/>
+  <a u="75F2" b="AF 71"/>
+  <a u="75F3" b="AF 72"/>
+  <a u="75F4" b="B3 D5"/>
+  <a u="75F5" b="AF 73"/>
+  <a u="75F6" b="AF 74"/>
+  <a u="75F7" b="AF 75"/>
+  <a u="75F8" b="AF 76"/>
+  <a u="75F9" b="B1 D4"/>
+  <a u="75FA" b="AF 77"/>
+  <a u="75FB" b="AF 78"/>
+  <a u="75FC" b="F0 F3"/>
+  <a u="75FD" b="AF 79"/>
+  <a u="75FE" b="AF 7A"/>
+  <a u="75FF" b="F0 F4"/>
+  <a u="7600" b="F0 F6"/>
+  <a u="7601" b="B4 E1"/>
+  <a u="7602" b="AF 7B"/>
+  <a u="7603" b="F0 F1"/>
+  <a u="7604" b="AF 7C"/>
+  <a u="7605" b="F0 F7"/>
+  <a u="7606" b="AF 7D"/>
+  <a u="7607" b="AF 7E"/>
+  <a u="7608" b="AF 80"/>
+  <a u="7609" b="AF 81"/>
+  <a u="760A" b="F0 FA"/>
+  <a u="760B" b="AF 82"/>
+  <a u="760C" b="F0 F8"/>
+  <a u="760D" b="AF 83"/>
+  <a u="760E" b="AF 84"/>
+  <a u="760F" b="AF 85"/>
+  <a u="7610" b="F0 F5"/>
+  <a u="7611" b="AF 86"/>
+  <a u="7612" b="AF 87"/>
+  <a u="7613" b="AF 88"/>
+  <a u="7614" b="AF 89"/>
+  <a u="7615" b="F0 FD"/>
+  <a u="7616" b="AF 8A"/>
+  <a u="7617" b="F0 F9"/>
+  <a u="7618" b="F0 FC"/>
+  <a u="7619" b="F0 FE"/>
+  <a u="761A" b="AF 8B"/>
+  <a u="761B" b="F1 A1"/>
+  <a u="761C" b="AF 8C"/>
+  <a u="761D" b="AF 8D"/>
+  <a u="761E" b="AF 8E"/>
+  <a u="761F" b="CE C1"/>
+  <a u="7620" b="F1 A4"/>
+  <a u="7621" b="AF 8F"/>
+  <a u="7622" b="F1 A3"/>
+  <a u="7623" b="AF 90"/>
+  <a u="7624" b="C1 F6"/>
+  <a u="7625" b="F0 FB"/>
+  <a u="7626" b="CA DD"/>
+  <a u="7627" b="AF 91"/>
+  <a u="7628" b="AF 92"/>
+  <a u="7629" b="B4 F1"/>
+  <a u="762A" b="B1 F1"/>
+  <a u="762B" b="CC B1"/>
+  <a u="762C" b="AF 93"/>
+  <a u="762D" b="F1 A6"/>
+  <a u="762E" b="AF 94"/>
+  <a u="762F" b="AF 95"/>
+  <a u="7630" b="F1 A7"/>
+  <a u="7631" b="AF 96"/>
+  <a u="7632" b="AF 97"/>
+  <a u="7633" b="F1 AC"/>
+  <a u="7634" b="D5 CE"/>
+  <a u="7635" b="F1 A9"/>
+  <a u="7636" b="AF 98"/>
+  <a u="7637" b="AF 99"/>
+  <a u="7638" b="C8 B3"/>
+  <a u="7639" b="AF 9A"/>
+  <a u="763A" b="AF 9B"/>
+  <a u="763B" b="AF 9C"/>
+  <a u="763C" b="F1 A2"/>
+  <a u="763D" b="AF 9D"/>
+  <a u="763E" b="F1 AB"/>
+  <a u="763F" b="F1 A8"/>
+  <a u="7640" b="F1 A5"/>
+  <a u="7641" b="AF 9E"/>
+  <a u="7642" b="AF 9F"/>
+  <a u="7643" b="F1 AA"/>
+  <a u="7644" b="AF A0"/>
+  <a u="7645" b="B0 40"/>
+  <a u="7646" b="B0 41"/>
+  <a u="7647" b="B0 42"/>
+  <a u="7648" b="B0 43"/>
+  <a u="7649" b="B0 44"/>
+  <a u="764A" b="B0 45"/>
+  <a u="764B" b="B0 46"/>
+  <a u="764C" b="B0 A9"/>
+  <a u="764D" b="F1 AD"/>
+  <a u="764E" b="B0 47"/>
+  <a u="764F" b="B0 48"/>
+  <a u="7650" b="B0 49"/>
+  <a u="7651" b="B0 4A"/>
+  <a u="7652" b="B0 4B"/>
+  <a u="7653" b="B0 4C"/>
+  <a u="7654" b="F1 AF"/>
+  <a u="7655" b="B0 4D"/>
+  <a u="7656" b="F1 B1"/>
+  <a u="7657" b="B0 4E"/>
+  <a u="7658" b="B0 4F"/>
+  <a u="7659" b="B0 50"/>
+  <a u="765A" b="B0 51"/>
+  <a u="765B" b="B0 52"/>
+  <a u="765C" b="F1 B0"/>
+  <a u="765D" b="B0 53"/>
+  <a u="765E" b="F1 AE"/>
+  <a u="765F" b="B0 54"/>
+  <a u="7660" b="B0 55"/>
+  <a u="7661" b="B0 56"/>
+  <a u="7662" b="B0 57"/>
+  <a u="7663" b="D1 A2"/>
+  <a u="7664" b="B0 58"/>
+  <a u="7665" b="B0 59"/>
+  <a u="7666" b="B0 5A"/>
+  <a u="7667" b="B0 5B"/>
+  <a u="7668" b="B0 5C"/>
+  <a u="7669" b="B0 5D"/>
+  <a u="766A" b="B0 5E"/>
+  <a u="766B" b="F1 B2"/>
+  <a u="766C" b="B0 5F"/>
+  <a u="766D" b="B0 60"/>
+  <a u="766E" b="B0 61"/>
+  <a u="766F" b="F1 B3"/>
+  <a u="7670" b="B0 62"/>
+  <a u="7671" b="B0 63"/>
+  <a u="7672" b="B0 64"/>
+  <a u="7673" b="B0 65"/>
+  <a u="7674" b="B0 66"/>
+  <a u="7675" b="B0 67"/>
+  <a u="7676" b="B0 68"/>
+  <a u="7677" b="B0 69"/>
+  <a u="7678" b="B9 EF"/>
+  <a u="7679" b="B0 6A"/>
+  <a u="767A" b="B0 6B"/>
+  <a u="767B" b="B5 C7"/>
+  <a u="767C" b="B0 6C"/>
+  <a u="767D" b="B0 D7"/>
+  <a u="767E" b="B0 D9"/>
+  <a u="767F" b="B0 6D"/>
+  <a u="7680" b="B0 6E"/>
+  <a u="7681" b="B0 6F"/>
+  <a u="7682" b="D4 ED"/>
+  <a u="7683" b="B0 70"/>
+  <a u="7684" b="B5 C4"/>
+  <a u="7685" b="B0 71"/>
+  <a u="7686" b="BD D4"/>
+  <a u="7687" b="BB CA"/>
+  <a u="7688" b="F0 A7"/>
+  <a u="7689" b="B0 72"/>
+  <a u="768A" b="B0 73"/>
+  <a u="768B" b="B8 DE"/>
+  <a u="768C" b="B0 74"/>
+  <a u="768D" b="B0 75"/>
+  <a u="768E" b="F0 A8"/>
+  <a u="768F" b="B0 76"/>
+  <a u="7690" b="B0 77"/>
+  <a u="7691" b="B0 A8"/>
+  <a u="7692" b="B0 78"/>
+  <a u="7693" b="F0 A9"/>
+  <a u="7694" b="B0 79"/>
+  <a u="7695" b="B0 7A"/>
+  <a u="7696" b="CD EE"/>
+  <a u="7697" b="B0 7B"/>
+  <a u="7698" b="B0 7C"/>
+  <a u="7699" b="F0 AA"/>
+  <a u="769A" b="B0 7D"/>
+  <a u="769B" b="B0 7E"/>
+  <a u="769C" b="B0 80"/>
+  <a u="769D" b="B0 81"/>
+  <a u="769E" b="B0 82"/>
+  <a u="769F" b="B0 83"/>
+  <a u="76A0" b="B0 84"/>
+  <a u="76A1" b="B0 85"/>
+  <a u="76A2" b="B0 86"/>
+  <a u="76A3" b="B0 87"/>
+  <a u="76A4" b="F0 AB"/>
+  <a u="76A5" b="B0 88"/>
+  <a u="76A6" b="B0 89"/>
+  <a u="76A7" b="B0 8A"/>
+  <a u="76A8" b="B0 8B"/>
+  <a u="76A9" b="B0 8C"/>
+  <a u="76AA" b="B0 8D"/>
+  <a u="76AB" b="B0 8E"/>
+  <a u="76AC" b="B0 8F"/>
+  <a u="76AD" b="B0 90"/>
+  <a u="76AE" b="C6 A4"/>
+  <a u="76AF" b="B0 91"/>
+  <a u="76B0" b="B0 92"/>
+  <a u="76B1" b="D6 E5"/>
+  <a u="76B2" b="F1 E4"/>
+  <a u="76B3" b="B0 93"/>
+  <a u="76B4" b="F1 E5"/>
+  <a u="76B5" b="B0 94"/>
+  <a u="76B6" b="B0 95"/>
+  <a u="76B7" b="B0 96"/>
+  <a u="76B8" b="B0 97"/>
+  <a u="76B9" b="B0 98"/>
+  <a u="76BA" b="B0 99"/>
+  <a u="76BB" b="B0 9A"/>
+  <a u="76BC" b="B0 9B"/>
+  <a u="76BD" b="B0 9C"/>
+  <a u="76BE" b="B0 9D"/>
+  <a u="76BF" b="C3 F3"/>
+  <a u="76C0" b="B0 9E"/>
+  <a u="76C1" b="B0 9F"/>
+  <a u="76C2" b="D3 DB"/>
+  <a u="76C3" b="B0 A0"/>
+  <a u="76C4" b="B1 40"/>
+  <a u="76C5" b="D6 D1"/>
+  <a u="76C6" b="C5 E8"/>
+  <a u="76C7" b="B1 41"/>
+  <a u="76C8" b="D3 AF"/>
+  <a u="76C9" b="B1 42"/>
+  <a u="76CA" b="D2 E6"/>
+  <a u="76CB" b="B1 43"/>
+  <a u="76CC" b="B1 44"/>
+  <a u="76CD" b="EE C1"/>
+  <a u="76CE" b="B0 BB"/>
+  <a u="76CF" b="D5 B5"/>
+  <a u="76D0" b="D1 CE"/>
+  <a u="76D1" b="BC E0"/>
+  <a u="76D2" b="BA D0"/>
+  <a u="76D3" b="B1 45"/>
+  <a u="76D4" b="BF F8"/>
+  <a u="76D5" b="B1 46"/>
+  <a u="76D6" b="B8 C7"/>
+  <a u="76D7" b="B5 C1"/>
+  <a u="76D8" b="C5 CC"/>
+  <a u="76D9" b="B1 47"/>
+  <a u="76DA" b="B1 48"/>
+  <a u="76DB" b="CA A2"/>
+  <a u="76DC" b="B1 49"/>
+  <a u="76DD" b="B1 4A"/>
+  <a u="76DE" b="B1 4B"/>
+  <a u="76DF" b="C3 CB"/>
+  <a u="76E0" b="B1 4C"/>
+  <a u="76E1" b="B1 4D"/>
+  <a u="76E2" b="B1 4E"/>
+  <a u="76E3" b="B1 4F"/>
+  <a u="76E4" b="B1 50"/>
+  <a u="76E5" b="EE C2"/>
+  <a u="76E6" b="B1 51"/>
+  <a u="76E7" b="B1 52"/>
+  <a u="76E8" b="B1 53"/>
+  <a u="76E9" b="B1 54"/>
+  <a u="76EA" b="B1 55"/>
+  <a u="76EB" b="B1 56"/>
+  <a u="76EC" b="B1 57"/>
+  <a u="76ED" b="B1 58"/>
+  <a u="76EE" b="C4 BF"/>
+  <a u="76EF" b="B6 A2"/>
+  <a u="76F0" b="B1 59"/>
+  <a u="76F1" b="ED EC"/>
+  <a u="76F2" b="C3 A4"/>
+  <a u="76F3" b="B1 5A"/>
+  <a u="76F4" b="D6 B1"/>
+  <a u="76F5" b="B1 5B"/>
+  <a u="76F6" b="B1 5C"/>
+  <a u="76F7" b="B1 5D"/>
+  <a u="76F8" b="CF E0"/>
+  <a u="76F9" b="ED EF"/>
+  <a u="76FA" b="B1 5E"/>
+  <a u="76FB" b="B1 5F"/>
+  <a u="76FC" b="C5 CE"/>
+  <a u="76FD" b="B1 60"/>
+  <a u="76FE" b="B6 DC"/>
+  <a u="76FF" b="B1 61"/>
+  <a u="7700" b="B1 62"/>
+  <a u="7701" b="CA A1"/>
+  <a u="7702" b="B1 63"/>
+  <a u="7703" b="B1 64"/>
+  <a u="7704" b="ED ED"/>
+  <a u="7705" b="B1 65"/>
+  <a u="7706" b="B1 66"/>
+  <a u="7707" b="ED F0"/>
+  <a u="7708" b="ED F1"/>
+  <a u="7709" b="C3 BC"/>
+  <a u="770A" b="B1 67"/>
+  <a u="770B" b="BF B4"/>
+  <a u="770C" b="B1 68"/>
+  <a u="770D" b="ED EE"/>
+  <a u="770E" b="B1 69"/>
+  <a u="770F" b="B1 6A"/>
+  <a u="7710" b="B1 6B"/>
+  <a u="7711" b="B1 6C"/>
+  <a u="7712" b="B1 6D"/>
+  <a u="7713" b="B1 6E"/>
+  <a u="7714" b="B1 6F"/>
+  <a u="7715" b="B1 70"/>
+  <a u="7716" b="B1 71"/>
+  <a u="7717" b="B1 72"/>
+  <a u="7718" b="B1 73"/>
+  <a u="7719" b="ED F4"/>
+  <a u="771A" b="ED F2"/>
+  <a u="771B" b="B1 74"/>
+  <a u="771C" b="B1 75"/>
+  <a u="771D" b="B1 76"/>
+  <a u="771E" b="B1 77"/>
+  <a u="771F" b="D5 E6"/>
+  <a u="7720" b="C3 DF"/>
+  <a u="7721" b="B1 78"/>
+  <a u="7722" b="ED F3"/>
+  <a u="7723" b="B1 79"/>
+  <a u="7724" b="B1 7A"/>
+  <a u="7725" b="B1 7B"/>
+  <a u="7726" b="ED F6"/>
+  <a u="7727" b="B1 7C"/>
+  <a u="7728" b="D5 A3"/>
+  <a u="7729" b="D1 A3"/>
+  <a u="772A" b="B1 7D"/>
+  <a u="772B" b="B1 7E"/>
+  <a u="772C" b="B1 80"/>
+  <a u="772D" b="ED F5"/>
+  <a u="772E" b="B1 81"/>
+  <a u="772F" b="C3 D0"/>
+  <a u="7730" b="B1 82"/>
+  <a u="7731" b="B1 83"/>
+  <a u="7732" b="B1 84"/>
+  <a u="7733" b="B1 85"/>
+  <a u="7734" b="B1 86"/>
+  <a u="7735" b="ED F7"/>
+  <a u="7736" b="BF F4"/>
+  <a u="7737" b="BE EC"/>
+  <a u="7738" b="ED F8"/>
+  <a u="7739" b="B1 87"/>
+  <a u="773A" b="CC F7"/>
+  <a u="773B" b="B1 88"/>
+  <a u="773C" b="D1 DB"/>
+  <a u="773D" b="B1 89"/>
+  <a u="773E" b="B1 8A"/>
+  <a u="773F" b="B1 8B"/>
+  <a u="7740" b="D7 C5"/>
+  <a u="7741" b="D5 F6"/>
+  <a u="7742" b="B1 8C"/>
+  <a u="7743" b="ED FC"/>
+  <a u="7744" b="B1 8D"/>
+  <a u="7745" b="B1 8E"/>
+  <a u="7746" b="B1 8F"/>
+  <a u="7747" b="ED FB"/>
+  <a u="7748" b="B1 90"/>
+  <a u="7749" b="B1 91"/>
+  <a u="774A" b="B1 92"/>
+  <a u="774B" b="B1 93"/>
+  <a u="774C" b="B1 94"/>
+  <a u="774D" b="B1 95"/>
+  <a u="774E" b="B1 96"/>
+  <a u="774F" b="B1 97"/>
+  <a u="7750" b="ED F9"/>
+  <a u="7751" b="ED FA"/>
+  <a u="7752" b="B1 98"/>
+  <a u="7753" b="B1 99"/>
+  <a u="7754" b="B1 9A"/>
+  <a u="7755" b="B1 9B"/>
+  <a u="7756" b="B1 9C"/>
+  <a u="7757" b="B1 9D"/>
+  <a u="7758" b="B1 9E"/>
+  <a u="7759" b="B1 9F"/>
+  <a u="775A" b="ED FD"/>
+  <a u="775B" b="BE A6"/>
+  <a u="775C" b="B1 A0"/>
+  <a u="775D" b="B2 40"/>
+  <a u="775E" b="B2 41"/>
+  <a u="775F" b="B2 42"/>
+  <a u="7760" b="B2 43"/>
+  <a u="7761" b="CB AF"/>
+  <a u="7762" b="EE A1"/>
+  <a u="7763" b="B6 BD"/>
+  <a u="7764" b="B2 44"/>
+  <a u="7765" b="EE A2"/>
+  <a u="7766" b="C4 C0"/>
+  <a u="7767" b="B2 45"/>
+  <a u="7768" b="ED FE"/>
+  <a u="7769" b="B2 46"/>
+  <a u="776A" b="B2 47"/>
+  <a u="776B" b="BD DE"/>
+  <a u="776C" b="B2 C7"/>
+  <a u="776D" b="B2 48"/>
+  <a u="776E" b="B2 49"/>
+  <a u="776F" b="B2 4A"/>
+  <a u="7770" b="B2 4B"/>
+  <a u="7771" b="B2 4C"/>
+  <a u="7772" b="B2 4D"/>
+  <a u="7773" b="B2 4E"/>
+  <a u="7774" b="B2 4F"/>
+  <a u="7775" b="B2 50"/>
+  <a u="7776" b="B2 51"/>
+  <a u="7777" b="B2 52"/>
+  <a u="7778" b="B2 53"/>
+  <a u="7779" b="B6 C3"/>
+  <a u="777A" b="B2 54"/>
+  <a u="777B" b="B2 55"/>
+  <a u="777C" b="B2 56"/>
+  <a u="777D" b="EE A5"/>
+  <a u="777E" b="D8 BA"/>
+  <a u="777F" b="EE A3"/>
+  <a u="7780" b="EE A6"/>
+  <a u="7781" b="B2 57"/>
+  <a u="7782" b="B2 58"/>
+  <a u="7783" b="B2 59"/>
+  <a u="7784" b="C3 E9"/>
+  <a u="7785" b="B3 F2"/>
+  <a u="7786" b="B2 5A"/>
+  <a u="7787" b="B2 5B"/>
+  <a u="7788" b="B2 5C"/>
+  <a u="7789" b="B2 5D"/>
+  <a u="778A" b="B2 5E"/>
+  <a u="778B" b="B2 5F"/>
+  <a u="778C" b="EE A7"/>
+  <a u="778D" b="EE A4"/>
+  <a u="778E" b="CF B9"/>
+  <a u="778F" b="B2 60"/>
+  <a u="7790" b="B2 61"/>
+  <a u="7791" b="EE A8"/>
+  <a u="7792" b="C2 F7"/>
+  <a u="7793" b="B2 62"/>
+  <a u="7794" b="B2 63"/>
+  <a u="7795" b="B2 64"/>
+  <a u="7796" b="B2 65"/>
+  <a u="7797" b="B2 66"/>
+  <a u="7798" b="B2 67"/>
+  <a u="7799" b="B2 68"/>
+  <a u="779A" b="B2 69"/>
+  <a u="779B" b="B2 6A"/>
+  <a u="779C" b="B2 6B"/>
+  <a u="779D" b="B2 6C"/>
+  <a u="779E" b="B2 6D"/>
+  <a u="779F" b="EE A9"/>
+  <a u="77A0" b="EE AA"/>
+  <a u="77A1" b="B2 6E"/>
+  <a u="77A2" b="DE AB"/>
+  <a u="77A3" b="B2 6F"/>
+  <a u="77A4" b="B2 70"/>
+  <a u="77A5" b="C6 B3"/>
+  <a u="77A6" b="B2 71"/>
+  <a u="77A7" b="C7 C6"/>
+  <a u="77A8" b="B2 72"/>
+  <a u="77A9" b="D6 F5"/>
+  <a u="77AA" b="B5 C9"/>
+  <a u="77AB" b="B2 73"/>
+  <a u="77AC" b="CB B2"/>
+  <a u="77AD" b="B2 74"/>
+  <a u="77AE" b="B2 75"/>
+  <a u="77AF" b="B2 76"/>
+  <a u="77B0" b="EE AB"/>
+  <a u="77B1" b="B2 77"/>
+  <a u="77B2" b="B2 78"/>
+  <a u="77B3" b="CD AB"/>
+  <a u="77B4" b="B2 79"/>
+  <a u="77B5" b="EE AC"/>
+  <a u="77B6" b="B2 7A"/>
+  <a u="77B7" b="B2 7B"/>
+  <a u="77B8" b="B2 7C"/>
+  <a u="77B9" b="B2 7D"/>
+  <a u="77BA" b="B2 7E"/>
+  <a u="77BB" b="D5 B0"/>
+  <a u="77BC" b="B2 80"/>
+  <a u="77BD" b="EE AD"/>
+  <a u="77BE" b="B2 81"/>
+  <a u="77BF" b="F6 C4"/>
+  <a u="77C0" b="B2 82"/>
+  <a u="77C1" b="B2 83"/>
+  <a u="77C2" b="B2 84"/>
+  <a u="77C3" b="B2 85"/>
+  <a u="77C4" b="B2 86"/>
+  <a u="77C5" b="B2 87"/>
+  <a u="77C6" b="B2 88"/>
+  <a u="77C7" b="B2 89"/>
+  <a u="77C8" b="B2 8A"/>
+  <a u="77C9" b="B2 8B"/>
+  <a u="77CA" b="B2 8C"/>
+  <a u="77CB" b="B2 8D"/>
+  <a u="77CC" b="B2 8E"/>
+  <a u="77CD" b="DB C7"/>
+  <a u="77CE" b="B2 8F"/>
+  <a u="77CF" b="B2 90"/>
+  <a u="77D0" b="B2 91"/>
+  <a u="77D1" b="B2 92"/>
+  <a u="77D2" b="B2 93"/>
+  <a u="77D3" b="B2 94"/>
+  <a u="77D4" b="B2 95"/>
+  <a u="77D5" b="B2 96"/>
+  <a u="77D6" b="B2 97"/>
+  <a u="77D7" b="B4 A3"/>
+  <a u="77D8" b="B2 98"/>
+  <a u="77D9" b="B2 99"/>
+  <a u="77DA" b="B2 9A"/>
+  <a u="77DB" b="C3 AC"/>
+  <a u="77DC" b="F1 E6"/>
+  <a u="77DD" b="B2 9B"/>
+  <a u="77DE" b="B2 9C"/>
+  <a u="77DF" b="B2 9D"/>
+  <a u="77E0" b="B2 9E"/>
+  <a u="77E1" b="B2 9F"/>
+  <a u="77E2" b="CA B8"/>
+  <a u="77E3" b="D2 D3"/>
+  <a u="77E4" b="B2 A0"/>
+  <a u="77E5" b="D6 AA"/>
+  <a u="77E6" b="B3 40"/>
+  <a u="77E7" b="EF F2"/>
+  <a u="77E8" b="B3 41"/>
+  <a u="77E9" b="BE D8"/>
+  <a u="77EA" b="B3 42"/>
+  <a u="77EB" b="BD C3"/>
+  <a u="77EC" b="EF F3"/>
+  <a u="77ED" b="B6 CC"/>
+  <a u="77EE" b="B0 AB"/>
+  <a u="77EF" b="B3 43"/>
+  <a u="77F0" b="B3 44"/>
+  <a u="77F1" b="B3 45"/>
+  <a u="77F2" b="B3 46"/>
+  <a u="77F3" b="CA AF"/>
+  <a u="77F4" b="B3 47"/>
+  <a u="77F5" b="B3 48"/>
+  <a u="77F6" b="ED B6"/>
+  <a u="77F7" b="B3 49"/>
+  <a u="77F8" b="ED B7"/>
+  <a u="77F9" b="B3 4A"/>
+  <a u="77FA" b="B3 4B"/>
+  <a u="77FB" b="B3 4C"/>
+  <a u="77FC" b="B3 4D"/>
+  <a u="77FD" b="CE F9"/>
+  <a u="77FE" b="B7 AF"/>
+  <a u="77FF" b="BF F3"/>
+  <a u="7800" b="ED B8"/>
+  <a u="7801" b="C2 EB"/>
+  <a u="7802" b="C9 B0"/>
+  <a u="7803" b="B3 4E"/>
+  <a u="7804" b="B3 4F"/>
+  <a u="7805" b="B3 50"/>
+  <a u="7806" b="B3 51"/>
+  <a u="7807" b="B3 52"/>
+  <a u="7808" b="B3 53"/>
+  <a u="7809" b="ED B9"/>
+  <a u="780A" b="B3 54"/>
+  <a u="780B" b="B3 55"/>
+  <a u="780C" b="C6 F6"/>
+  <a u="780D" b="BF B3"/>
+  <a u="780E" b="B3 56"/>
+  <a u="780F" b="B3 57"/>
+  <a u="7810" b="B3 58"/>
+  <a u="7811" b="ED BC"/>
+  <a u="7812" b="C5 F8"/>
+  <a u="7813" b="B3 59"/>
+  <a u="7814" b="D1 D0"/>
+  <a u="7815" b="B3 5A"/>
+  <a u="7816" b="D7 A9"/>
+  <a u="7817" b="ED BA"/>
+  <a u="7818" b="ED BB"/>
+  <a u="7819" b="B3 5B"/>
+  <a u="781A" b="D1 E2"/>
+  <a u="781B" b="B3 5C"/>
+  <a u="781C" b="ED BF"/>
+  <a u="781D" b="ED C0"/>
+  <a u="781E" b="B3 5D"/>
+  <a u="781F" b="ED C4"/>
+  <a u="7820" b="B3 5E"/>
+  <a u="7821" b="B3 5F"/>
+  <a u="7822" b="B3 60"/>
+  <a u="7823" b="ED C8"/>
+  <a u="7824" b="B3 61"/>
+  <a u="7825" b="ED C6"/>
+  <a u="7826" b="ED CE"/>
+  <a u="7827" b="D5 E8"/>
+  <a u="7828" b="B3 62"/>
+  <a u="7829" b="ED C9"/>
+  <a u="782A" b="B3 63"/>
+  <a u="782B" b="B3 64"/>
+  <a u="782C" b="ED C7"/>
+  <a u="782D" b="ED BE"/>
+  <a u="782E" b="B3 65"/>
+  <a u="782F" b="B3 66"/>
+  <a u="7830" b="C5 E9"/>
+  <a u="7831" b="B3 67"/>
+  <a u="7832" b="B3 68"/>
+  <a u="7833" b="B3 69"/>
+  <a u="7834" b="C6 C6"/>
+  <a u="7835" b="B3 6A"/>
+  <a u="7836" b="B3 6B"/>
+  <a u="7837" b="C9 E9"/>
+  <a u="7838" b="D4 D2"/>
+  <a u="7839" b="ED C1"/>
+  <a u="783A" b="ED C2"/>
+  <a u="783B" b="ED C3"/>
+  <a u="783C" b="ED C5"/>
+  <a u="783D" b="B3 6C"/>
+  <a u="783E" b="C0 F9"/>
+  <a u="783F" b="B3 6D"/>
+  <a u="7840" b="B4 A1"/>
+  <a u="7841" b="B3 6E"/>
+  <a u="7842" b="B3 6F"/>
+  <a u="7843" b="B3 70"/>
+  <a u="7844" b="B3 71"/>
+  <a u="7845" b="B9 E8"/>
+  <a u="7846" b="B3 72"/>
+  <a u="7847" b="ED D0"/>
+  <a u="7848" b="B3 73"/>
+  <a u="7849" b="B3 74"/>
+  <a u="784A" b="B3 75"/>
+  <a u="784B" b="B3 76"/>
+  <a u="784C" b="ED D1"/>
+  <a u="784D" b="B3 77"/>
+  <a u="784E" b="ED CA"/>
+  <a u="784F" b="B3 78"/>
+  <a u="7850" b="ED CF"/>
+  <a u="7851" b="B3 79"/>
+  <a u="7852" b="CE F8"/>
+  <a u="7853" b="B3 7A"/>
+  <a u="7854" b="B3 7B"/>
+  <a u="7855" b="CB B6"/>
+  <a u="7856" b="ED CC"/>
+  <a u="7857" b="ED CD"/>
+  <a u="7858" b="B3 7C"/>
+  <a u="7859" b="B3 7D"/>
+  <a u="785A" b="B3 7E"/>
+  <a u="785B" b="B3 80"/>
+  <a u="785C" b="B3 81"/>
+  <a u="785D" b="CF F5"/>
+  <a u="785E" b="B3 82"/>
+  <a u="785F" b="B3 83"/>
+  <a u="7860" b="B3 84"/>
+  <a u="7861" b="B3 85"/>
+  <a u="7862" b="B3 86"/>
+  <a u="7863" b="B3 87"/>
+  <a u="7864" b="B3 88"/>
+  <a u="7865" b="B3 89"/>
+  <a u="7866" b="B3 8A"/>
+  <a u="7867" b="B3 8B"/>
+  <a u="7868" b="B3 8C"/>
+  <a u="7869" b="B3 8D"/>
+  <a u="786A" b="ED D2"/>
+  <a u="786B" b="C1 F2"/>
+  <a u="786C" b="D3 B2"/>
+  <a u="786D" b="ED CB"/>
+  <a u="786E" b="C8 B7"/>
+  <a u="786F" b="B3 8E"/>
+  <a u="7870" b="B3 8F"/>
+  <a u="7871" b="B3 90"/>
+  <a u="7872" b="B3 91"/>
+  <a u="7873" b="B3 92"/>
+  <a u="7874" b="B3 93"/>
+  <a u="7875" b="B3 94"/>
+  <a u="7876" b="B3 95"/>
+  <a u="7877" b="BC EF"/>
+  <a u="7878" b="B3 96"/>
+  <a u="7879" b="B3 97"/>
+  <a u="787A" b="B3 98"/>
+  <a u="787B" b="B3 99"/>
+  <a u="787C" b="C5 F0"/>
+  <a u="787D" b="B3 9A"/>
+  <a u="787E" b="B3 9B"/>
+  <a u="787F" b="B3 9C"/>
+  <a u="7880" b="B3 9D"/>
+  <a u="7881" b="B3 9E"/>
+  <a u="7882" b="B3 9F"/>
+  <a u="7883" b="B3 A0"/>
+  <a u="7884" b="B4 40"/>
+  <a u="7885" b="B4 41"/>
+  <a u="7886" b="B4 42"/>
+  <a u="7887" b="ED D6"/>
+  <a u="7888" b="B4 43"/>
+  <a u="7889" b="B5 EF"/>
+  <a u="788A" b="B4 44"/>
+  <a u="788B" b="B4 45"/>
+  <a u="788C" b="C2 B5"/>
+  <a u="788D" b="B0 AD"/>
+  <a u="788E" b="CB E9"/>
+  <a u="788F" b="B4 46"/>
+  <a u="7890" b="B4 47"/>
+  <a u="7891" b="B1 AE"/>
+  <a u="7892" b="B4 48"/>
+  <a u="7893" b="ED D4"/>
+  <a u="7894" b="B4 49"/>
+  <a u="7895" b="B4 4A"/>
+  <a u="7896" b="B4 4B"/>
+  <a u="7897" b="CD EB"/>
+  <a u="7898" b="B5 E2"/>
+  <a u="7899" b="B4 4C"/>
+  <a u="789A" b="ED D5"/>
+  <a u="789B" b="ED D3"/>
+  <a u="789C" b="ED D7"/>
+  <a u="789D" b="B4 4D"/>
+  <a u="789E" b="B4 4E"/>
+  <a u="789F" b="B5 FA"/>
+  <a u="78A0" b="B4 4F"/>
+  <a u="78A1" b="ED D8"/>
+  <a u="78A2" b="B4 50"/>
+  <a u="78A3" b="ED D9"/>
+  <a u="78A4" b="B4 51"/>
+  <a u="78A5" b="ED DC"/>
+  <a u="78A6" b="B4 52"/>
+  <a u="78A7" b="B1 CC"/>
+  <a u="78A8" b="B4 53"/>
+  <a u="78A9" b="B4 54"/>
+  <a u="78AA" b="B4 55"/>
+  <a u="78AB" b="B4 56"/>
+  <a u="78AC" b="B4 57"/>
+  <a u="78AD" b="B4 58"/>
+  <a u="78AE" b="B4 59"/>
+  <a u="78AF" b="B4 5A"/>
+  <a u="78B0" b="C5 F6"/>
+  <a u="78B1" b="BC EE"/>
+  <a u="78B2" b="ED DA"/>
+  <a u="78B3" b="CC BC"/>
+  <a u="78B4" b="B2 EA"/>
+  <a u="78B5" b="B4 5B"/>
+  <a u="78B6" b="B4 5C"/>
+  <a u="78B7" b="B4 5D"/>
+  <a u="78B8" b="B4 5E"/>
+  <a u="78B9" b="ED DB"/>
+  <a u="78BA" b="B4 5F"/>
+  <a u="78BB" b="B4 60"/>
+  <a u="78BC" b="B4 61"/>
+  <a u="78BD" b="B4 62"/>
+  <a u="78BE" b="C4 EB"/>
+  <a u="78BF" b="B4 63"/>
+  <a u="78C0" b="B4 64"/>
+  <a u="78C1" b="B4 C5"/>
+  <a u="78C2" b="B4 65"/>
+  <a u="78C3" b="B4 66"/>
+  <a u="78C4" b="B4 67"/>
+  <a u="78C5" b="B0 F5"/>
+  <a u="78C6" b="B4 68"/>
+  <a u="78C7" b="B4 69"/>
+  <a u="78C8" b="B4 6A"/>
+  <a u="78C9" b="ED DF"/>
+  <a u="78CA" b="C0 DA"/>
+  <a u="78CB" b="B4 E8"/>
+  <a u="78CC" b="B4 6B"/>
+  <a u="78CD" b="B4 6C"/>
+  <a u="78CE" b="B4 6D"/>
+  <a u="78CF" b="B4 6E"/>
+  <a u="78D0" b="C5 CD"/>
+  <a u="78D1" b="B4 6F"/>
+  <a u="78D2" b="B4 70"/>
+  <a u="78D3" b="B4 71"/>
+  <a u="78D4" b="ED DD"/>
+  <a u="78D5" b="BF C4"/>
+  <a u="78D6" b="B4 72"/>
+  <a u="78D7" b="B4 73"/>
+  <a u="78D8" b="B4 74"/>
+  <a u="78D9" b="ED DE"/>
+  <a u="78DA" b="B4 75"/>
+  <a u="78DB" b="B4 76"/>
+  <a u="78DC" b="B4 77"/>
+  <a u="78DD" b="B4 78"/>
+  <a u="78DE" b="B4 79"/>
+  <a u="78DF" b="B4 7A"/>
+  <a u="78E0" b="B4 7B"/>
+  <a u="78E1" b="B4 7C"/>
+  <a u="78E2" b="B4 7D"/>
+  <a u="78E3" b="B4 7E"/>
+  <a u="78E4" b="B4 80"/>
+  <a u="78E5" b="B4 81"/>
+  <a u="78E6" b="B4 82"/>
+  <a u="78E7" b="B4 83"/>
+  <a u="78E8" b="C4 A5"/>
+  <a u="78E9" b="B4 84"/>
+  <a u="78EA" b="B4 85"/>
+  <a u="78EB" b="B4 86"/>
+  <a u="78EC" b="ED E0"/>
+  <a u="78ED" b="B4 87"/>
+  <a u="78EE" b="B4 88"/>
+  <a u="78EF" b="B4 89"/>
+  <a u="78F0" b="B4 8A"/>
+  <a u="78F1" b="B4 8B"/>
+  <a u="78F2" b="ED E1"/>
+  <a u="78F3" b="B4 8C"/>
+  <a u="78F4" b="ED E3"/>
+  <a u="78F5" b="B4 8D"/>
+  <a u="78F6" b="B4 8E"/>
+  <a u="78F7" b="C1 D7"/>
+  <a u="78F8" b="B4 8F"/>
+  <a u="78F9" b="B4 90"/>
+  <a u="78FA" b="BB C7"/>
+  <a u="78FB" b="B4 91"/>
+  <a u="78FC" b="B4 92"/>
+  <a u="78FD" b="B4 93"/>
+  <a u="78FE" b="B4 94"/>
+  <a u="78FF" b="B4 95"/>
+  <a u="7900" b="B4 96"/>
+  <a u="7901" b="BD B8"/>
+  <a u="7902" b="B4 97"/>
+  <a u="7903" b="B4 98"/>
+  <a u="7904" b="B4 99"/>
+  <a u="7905" b="ED E2"/>
+  <a u="7906" b="B4 9A"/>
+  <a u="7907" b="B4 9B"/>
+  <a u="7908" b="B4 9C"/>
+  <a u="7909" b="B4 9D"/>
+  <a u="790A" b="B4 9E"/>
+  <a u="790B" b="B4 9F"/>
+  <a u="790C" b="B4 A0"/>
+  <a u="790D" b="B5 40"/>
+  <a u="790E" b="B5 41"/>
+  <a u="790F" b="B5 42"/>
+  <a u="7910" b="B5 43"/>
+  <a u="7911" b="B5 44"/>
+  <a u="7912" b="B5 45"/>
+  <a u="7913" b="ED E4"/>
+  <a u="7914" b="B5 46"/>
+  <a u="7915" b="B5 47"/>
+  <a u="7916" b="B5 48"/>
+  <a u="7917" b="B5 49"/>
+  <a u="7918" b="B5 4A"/>
+  <a u="7919" b="B5 4B"/>
+  <a u="791A" b="B5 4C"/>
+  <a u="791B" b="B5 4D"/>
+  <a u="791C" b="B5 4E"/>
+  <a u="791D" b="B5 4F"/>
+  <a u="791E" b="ED E6"/>
+  <a u="791F" b="B5 50"/>
+  <a u="7920" b="B5 51"/>
+  <a u="7921" b="B5 52"/>
+  <a u="7922" b="B5 53"/>
+  <a u="7923" b="B5 54"/>
+  <a u="7924" b="ED E5"/>
+  <a u="7925" b="B5 55"/>
+  <a u="7926" b="B5 56"/>
+  <a u="7927" b="B5 57"/>
+  <a u="7928" b="B5 58"/>
+  <a u="7929" b="B5 59"/>
+  <a u="792A" b="B5 5A"/>
+  <a u="792B" b="B5 5B"/>
+  <a u="792C" b="B5 5C"/>
+  <a u="792D" b="B5 5D"/>
+  <a u="792E" b="B5 5E"/>
+  <a u="792F" b="B5 5F"/>
+  <a u="7930" b="B5 60"/>
+  <a u="7931" b="B5 61"/>
+  <a u="7932" b="B5 62"/>
+  <a u="7933" b="B5 63"/>
+  <a u="7934" b="ED E7"/>
+  <a u="7935" b="B5 64"/>
+  <a u="7936" b="B5 65"/>
+  <a u="7937" b="B5 66"/>
+  <a u="7938" b="B5 67"/>
+  <a u="7939" b="B5 68"/>
+  <a u="793A" b="CA BE"/>
+  <a u="793B" b="EC EA"/>
+  <a u="793C" b="C0 F1"/>
+  <a u="793D" b="B5 69"/>
+  <a u="793E" b="C9 E7"/>
+  <a u="793F" b="B5 6A"/>
+  <a u="7940" b="EC EB"/>
+  <a u="7941" b="C6 EE"/>
+  <a u="7942" b="B5 6B"/>
+  <a u="7943" b="B5 6C"/>
+  <a u="7944" b="B5 6D"/>
+  <a u="7945" b="B5 6E"/>
+  <a u="7946" b="EC EC"/>
+  <a u="7947" b="B5 6F"/>
+  <a u="7948" b="C6 ED"/>
+  <a u="7949" b="EC ED"/>
+  <a u="794A" b="B5 70"/>
+  <a u="794B" b="B5 71"/>
+  <a u="794C" b="B5 72"/>
+  <a u="794D" b="B5 73"/>
+  <a u="794E" b="B5 74"/>
+  <a u="794F" b="B5 75"/>
+  <a u="7950" b="B5 76"/>
+  <a u="7951" b="B5 77"/>
+  <a u="7952" b="B5 78"/>
+  <a u="7953" b="EC F0"/>
+  <a u="7954" b="B5 79"/>
+  <a u="7955" b="B5 7A"/>
+  <a u="7956" b="D7 E6"/>
+  <a u="7957" b="EC F3"/>
+  <a u="7958" b="B5 7B"/>
+  <a u="7959" b="B5 7C"/>
+  <a u="795A" b="EC F1"/>
+  <a u="795B" b="EC EE"/>
+  <a u="795C" b="EC EF"/>
+  <a u="795D" b="D7 A3"/>
+  <a u="795E" b="C9 F1"/>
+  <a u="795F" b="CB EE"/>
+  <a u="7960" b="EC F4"/>
+  <a u="7961" b="B5 7D"/>
+  <a u="7962" b="EC F2"/>
+  <a u="7963" b="B5 7E"/>
+  <a u="7964" b="B5 80"/>
+  <a u="7965" b="CF E9"/>
+  <a u="7966" b="B5 81"/>
+  <a u="7967" b="EC F6"/>
+  <a u="7968" b="C6 B1"/>
+  <a u="7969" b="B5 82"/>
+  <a u="796A" b="B5 83"/>
+  <a u="796B" b="B5 84"/>
+  <a u="796C" b="B5 85"/>
+  <a u="796D" b="BC C0"/>
+  <a u="796E" b="B5 86"/>
+  <a u="796F" b="EC F5"/>
+  <a u="7970" b="B5 87"/>
+  <a u="7971" b="B5 88"/>
+  <a u="7972" b="B5 89"/>
+  <a u="7973" b="B5 8A"/>
+  <a u="7974" b="B5 8B"/>
+  <a u="7975" b="B5 8C"/>
+  <a u="7976" b="B5 8D"/>
+  <a u="7977" b="B5 BB"/>
+  <a u="7978" b="BB F6"/>
+  <a u="7979" b="B5 8E"/>
+  <a u="797A" b="EC F7"/>
+  <a u="797B" b="B5 8F"/>
+  <a u="797C" b="B5 90"/>
+  <a u="797D" b="B5 91"/>
+  <a u="797E" b="B5 92"/>
+  <a u="797F" b="B5 93"/>
+  <a u="7980" b="D9 F7"/>
+  <a u="7981" b="BD FB"/>
+  <a u="7982" b="B5 94"/>
+  <a u="7983" b="B5 95"/>
+  <a u="7984" b="C2 BB"/>
+  <a u="7985" b="EC F8"/>
+  <a u="7986" b="B5 96"/>
+  <a u="7987" b="B5 97"/>
+  <a u="7988" b="B5 98"/>
+  <a u="7989" b="B5 99"/>
+  <a u="798A" b="EC F9"/>
+  <a u="798B" b="B5 9A"/>
+  <a u="798C" b="B5 9B"/>
+  <a u="798D" b="B5 9C"/>
+  <a u="798E" b="B5 9D"/>
+  <a u="798F" b="B8 A3"/>
+  <a u="7990" b="B5 9E"/>
+  <a u="7991" b="B5 9F"/>
+  <a u="7992" b="B5 A0"/>
+  <a u="7993" b="B6 40"/>
+  <a u="7994" b="B6 41"/>
+  <a u="7995" b="B6 42"/>
+  <a u="7996" b="B6 43"/>
+  <a u="7997" b="B6 44"/>
+  <a u="7998" b="B6 45"/>
+  <a u="7999" b="B6 46"/>
+  <a u="799A" b="EC FA"/>
+  <a u="799B" b="B6 47"/>
+  <a u="799C" b="B6 48"/>
+  <a u="799D" b="B6 49"/>
+  <a u="799E" b="B6 4A"/>
+  <a u="799F" b="B6 4B"/>
+  <a u="79A0" b="B6 4C"/>
+  <a u="79A1" b="B6 4D"/>
+  <a u="79A2" b="B6 4E"/>
+  <a u="79A3" b="B6 4F"/>
+  <a u="79A4" b="B6 50"/>
+  <a u="79A5" b="B6 51"/>
+  <a u="79A6" b="B6 52"/>
+  <a u="79A7" b="EC FB"/>
+  <a u="79A8" b="B6 53"/>
+  <a u="79A9" b="B6 54"/>
+  <a u="79AA" b="B6 55"/>
+  <a u="79AB" b="B6 56"/>
+  <a u="79AC" b="B6 57"/>
+  <a u="79AD" b="B6 58"/>
+  <a u="79AE" b="B6 59"/>
+  <a u="79AF" b="B6 5A"/>
+  <a u="79B0" b="B6 5B"/>
+  <a u="79B1" b="B6 5C"/>
+  <a u="79B2" b="B6 5D"/>
+  <a u="79B3" b="EC FC"/>
+  <a u="79B4" b="B6 5E"/>
+  <a u="79B5" b="B6 5F"/>
+  <a u="79B6" b="B6 60"/>
+  <a u="79B7" b="B6 61"/>
+  <a u="79B8" b="B6 62"/>
+  <a u="79B9" b="D3 ED"/>
+  <a u="79BA" b="D8 AE"/>
+  <a u="79BB" b="C0 EB"/>
+  <a u="79BC" b="B6 63"/>
+  <a u="79BD" b="C7 DD"/>
+  <a u="79BE" b="BA CC"/>
+  <a u="79BF" b="B6 64"/>
+  <a u="79C0" b="D0 E3"/>
+  <a u="79C1" b="CB BD"/>
+  <a u="79C2" b="B6 65"/>
+  <a u="79C3" b="CD BA"/>
+  <a u="79C4" b="B6 66"/>
+  <a u="79C5" b="B6 67"/>
+  <a u="79C6" b="B8 D1"/>
+  <a u="79C7" b="B6 68"/>
+  <a u="79C8" b="B6 69"/>
+  <a u="79C9" b="B1 FC"/>
+  <a u="79CA" b="B6 6A"/>
+  <a u="79CB" b="C7 EF"/>
+  <a u="79CC" b="B6 6B"/>
+  <a u="79CD" b="D6 D6"/>
+  <a u="79CE" b="B6 6C"/>
+  <a u="79CF" b="B6 6D"/>
+  <a u="79D0" b="B6 6E"/>
+  <a u="79D1" b="BF C6"/>
+  <a u="79D2" b="C3 EB"/>
+  <a u="79D3" b="B6 6F"/>
+  <a u="79D4" b="B6 70"/>
+  <a u="79D5" b="EF F5"/>
+  <a u="79D6" b="B6 71"/>
+  <a u="79D7" b="B6 72"/>
+  <a u="79D8" b="C3 D8"/>
+  <a u="79D9" b="B6 73"/>
+  <a u="79DA" b="B6 74"/>
+  <a u="79DB" b="B6 75"/>
+  <a u="79DC" b="B6 76"/>
+  <a u="79DD" b="B6 77"/>
+  <a u="79DE" b="B6 78"/>
+  <a u="79DF" b="D7 E2"/>
+  <a u="79E0" b="B6 79"/>
+  <a u="79E1" b="B6 7A"/>
+  <a u="79E2" b="B6 7B"/>
+  <a u="79E3" b="EF F7"/>
+  <a u="79E4" b="B3 D3"/>
+  <a u="79E5" b="B6 7C"/>
+  <a u="79E6" b="C7 D8"/>
+  <a u="79E7" b="D1 ED"/>
+  <a u="79E8" b="B6 7D"/>
+  <a u="79E9" b="D6 C8"/>
+  <a u="79EA" b="B6 7E"/>
+  <a u="79EB" b="EF F8"/>
+  <a u="79EC" b="B6 80"/>
+  <a u="79ED" b="EF F6"/>
+  <a u="79EE" b="B6 81"/>
+  <a u="79EF" b="BB FD"/>
+  <a u="79F0" b="B3 C6"/>
+  <a u="79F1" b="B6 82"/>
+  <a u="79F2" b="B6 83"/>
+  <a u="79F3" b="B6 84"/>
+  <a u="79F4" b="B6 85"/>
+  <a u="79F5" b="B6 86"/>
+  <a u="79F6" b="B6 87"/>
+  <a u="79F7" b="B6 88"/>
+  <a u="79F8" b="BD D5"/>
+  <a u="79F9" b="B6 89"/>
+  <a u="79FA" b="B6 8A"/>
+  <a u="79FB" b="D2 C6"/>
+  <a u="79FC" b="B6 8B"/>
+  <a u="79FD" b="BB E0"/>
+  <a u="79FE" b="B6 8C"/>
+  <a u="79FF" b="B6 8D"/>
+  <a u="7A00" b="CF A1"/>
+  <a u="7A01" b="B6 8E"/>
+  <a u="7A02" b="EF FC"/>
+  <a u="7A03" b="EF FB"/>
+  <a u="7A04" b="B6 8F"/>
+  <a u="7A05" b="B6 90"/>
+  <a u="7A06" b="EF F9"/>
+  <a u="7A07" b="B6 91"/>
+  <a u="7A08" b="B6 92"/>
+  <a u="7A09" b="B6 93"/>
+  <a u="7A0A" b="B6 94"/>
+  <a u="7A0B" b="B3 CC"/>
+  <a u="7A0C" b="B6 95"/>
+  <a u="7A0D" b="C9 D4"/>
+  <a u="7A0E" b="CB B0"/>
+  <a u="7A0F" b="B6 96"/>
+  <a u="7A10" b="B6 97"/>
+  <a u="7A11" b="B6 98"/>
+  <a u="7A12" b="B6 99"/>
+  <a u="7A13" b="B6 9A"/>
+  <a u="7A14" b="EF FE"/>
+  <a u="7A15" b="B6 9B"/>
+  <a u="7A16" b="B6 9C"/>
+  <a u="7A17" b="B0 DE"/>
+  <a u="7A18" b="B6 9D"/>
+  <a u="7A19" b="B6 9E"/>
+  <a u="7A1A" b="D6 C9"/>
+  <a u="7A1B" b="B6 9F"/>
+  <a u="7A1C" b="B6 A0"/>
+  <a u="7A1D" b="B7 40"/>
+  <a u="7A1E" b="EF FD"/>
+  <a u="7A1F" b="B7 41"/>
+  <a u="7A20" b="B3 ED"/>
+  <a u="7A21" b="B7 42"/>
+  <a u="7A22" b="B7 43"/>
+  <a u="7A23" b="F6 D5"/>
+  <a u="7A24" b="B7 44"/>
+  <a u="7A25" b="B7 45"/>
+  <a u="7A26" b="B7 46"/>
+  <a u="7A27" b="B7 47"/>
+  <a u="7A28" b="B7 48"/>
+  <a u="7A29" b="B7 49"/>
+  <a u="7A2A" b="B7 4A"/>
+  <a u="7A2B" b="B7 4B"/>
+  <a u="7A2C" b="B7 4C"/>
+  <a u="7A2D" b="B7 4D"/>
+  <a u="7A2E" b="B7 4E"/>
+  <a u="7A2F" b="B7 4F"/>
+  <a u="7A30" b="B7 50"/>
+  <a u="7A31" b="B7 51"/>
+  <a u="7A32" b="B7 52"/>
+  <a u="7A33" b="CE C8"/>
+  <a u="7A34" b="B7 53"/>
+  <a u="7A35" b="B7 54"/>
+  <a u="7A36" b="B7 55"/>
+  <a u="7A37" b="F0 A2"/>
+  <a u="7A38" b="B7 56"/>
+  <a u="7A39" b="F0 A1"/>
+  <a u="7A3A" b="B7 57"/>
+  <a u="7A3B" b="B5 BE"/>
+  <a u="7A3C" b="BC DA"/>
+  <a u="7A3D" b="BB FC"/>
+  <a u="7A3E" b="B7 58"/>
+  <a u="7A3F" b="B8 E5"/>
+  <a u="7A40" b="B7 59"/>
+  <a u="7A41" b="B7 5A"/>
+  <a u="7A42" b="B7 5B"/>
+  <a u="7A43" b="B7 5C"/>
+  <a u="7A44" b="B7 5D"/>
+  <a u="7A45" b="B7 5E"/>
+  <a u="7A46" b="C4 C2"/>
+  <a u="7A47" b="B7 5F"/>
+  <a u="7A48" b="B7 60"/>
+  <a u="7A49" b="B7 61"/>
+  <a u="7A4A" b="B7 62"/>
+  <a u="7A4B" b="B7 63"/>
+  <a u="7A4C" b="B7 64"/>
+  <a u="7A4D" b="B7 65"/>
+  <a u="7A4E" b="B7 66"/>
+  <a u="7A4F" b="B7 67"/>
+  <a u="7A50" b="B7 68"/>
+  <a u="7A51" b="F0 A3"/>
+  <a u="7A52" b="B7 69"/>
+  <a u="7A53" b="B7 6A"/>
+  <a u="7A54" b="B7 6B"/>
+  <a u="7A55" b="B7 6C"/>
+  <a u="7A56" b="B7 6D"/>
+  <a u="7A57" b="CB EB"/>
+  <a u="7A58" b="B7 6E"/>
+  <a u="7A59" b="B7 6F"/>
+  <a u="7A5A" b="B7 70"/>
+  <a u="7A5B" b="B7 71"/>
+  <a u="7A5C" b="B7 72"/>
+  <a u="7A5D" b="B7 73"/>
+  <a u="7A5E" b="B7 74"/>
+  <a u="7A5F" b="B7 75"/>
+  <a u="7A60" b="B7 76"/>
+  <a u="7A61" b="B7 77"/>
+  <a u="7A62" b="B7 78"/>
+  <a u="7A63" b="B7 79"/>
+  <a u="7A64" b="B7 7A"/>
+  <a u="7A65" b="B7 7B"/>
+  <a u="7A66" b="B7 7C"/>
+  <a u="7A67" b="B7 7D"/>
+  <a u="7A68" b="B7 7E"/>
+  <a u="7A69" b="B7 80"/>
+  <a u="7A6A" b="B7 81"/>
+  <a u="7A6B" b="B7 82"/>
+  <a u="7A6C" b="B7 83"/>
+  <a u="7A6D" b="B7 84"/>
+  <a u="7A6E" b="B7 85"/>
+  <a u="7A6F" b="B7 86"/>
+  <a u="7A70" b="F0 A6"/>
+  <a u="7A71" b="B7 87"/>
+  <a u="7A72" b="B7 88"/>
+  <a u="7A73" b="B7 89"/>
+  <a u="7A74" b="D1 A8"/>
+  <a u="7A75" b="B7 8A"/>
+  <a u="7A76" b="BE BF"/>
+  <a u="7A77" b="C7 EE"/>
+  <a u="7A78" b="F1 B6"/>
+  <a u="7A79" b="F1 B7"/>
+  <a u="7A7A" b="BF D5"/>
+  <a u="7A7B" b="B7 8B"/>
+  <a u="7A7C" b="B7 8C"/>
+  <a u="7A7D" b="B7 8D"/>
+  <a u="7A7E" b="B7 8E"/>
+  <a u="7A7F" b="B4 A9"/>
+  <a u="7A80" b="F1 B8"/>
+  <a u="7A81" b="CD BB"/>
+  <a u="7A82" b="B7 8F"/>
+  <a u="7A83" b="C7 D4"/>
+  <a u="7A84" b="D5 AD"/>
+  <a u="7A85" b="B7 90"/>
+  <a u="7A86" b="F1 B9"/>
+  <a u="7A87" b="B7 91"/>
+  <a u="7A88" b="F1 BA"/>
+  <a u="7A89" b="B7 92"/>
+  <a u="7A8A" b="B7 93"/>
+  <a u="7A8B" b="B7 94"/>
+  <a u="7A8C" b="B7 95"/>
+  <a u="7A8D" b="C7 CF"/>
+  <a u="7A8E" b="B7 96"/>
+  <a u="7A8F" b="B7 97"/>
+  <a u="7A90" b="B7 98"/>
+  <a u="7A91" b="D2 A4"/>
+  <a u="7A92" b="D6 CF"/>
+  <a u="7A93" b="B7 99"/>
+  <a u="7A94" b="B7 9A"/>
+  <a u="7A95" b="F1 BB"/>
+  <a u="7A96" b="BD D1"/>
+  <a u="7A97" b="B4 B0"/>
+  <a u="7A98" b="BE BD"/>
+  <a u="7A99" b="B7 9B"/>
+  <a u="7A9A" b="B7 9C"/>
+  <a u="7A9B" b="B7 9D"/>
+  <a u="7A9C" b="B4 DC"/>
+  <a u="7A9D" b="CE D1"/>
+  <a u="7A9E" b="B7 9E"/>
+  <a u="7A9F" b="BF DF"/>
+  <a u="7AA0" b="F1 BD"/>
+  <a u="7AA1" b="B7 9F"/>
+  <a u="7AA2" b="B7 A0"/>
+  <a u="7AA3" b="B8 40"/>
+  <a u="7AA4" b="B8 41"/>
+  <a u="7AA5" b="BF FA"/>
+  <a u="7AA6" b="F1 BC"/>
+  <a u="7AA7" b="B8 42"/>
+  <a u="7AA8" b="F1 BF"/>
+  <a u="7AA9" b="B8 43"/>
+  <a u="7AAA" b="B8 44"/>
+  <a u="7AAB" b="B8 45"/>
+  <a u="7AAC" b="F1 BE"/>
+  <a u="7AAD" b="F1 C0"/>
+  <a u="7AAE" b="B8 46"/>
+  <a u="7AAF" b="B8 47"/>
+  <a u="7AB0" b="B8 48"/>
+  <a u="7AB1" b="B8 49"/>
+  <a u="7AB2" b="B8 4A"/>
+  <a u="7AB3" b="F1 C1"/>
+  <a u="7AB4" b="B8 4B"/>
+  <a u="7AB5" b="B8 4C"/>
+  <a u="7AB6" b="B8 4D"/>
+  <a u="7AB7" b="B8 4E"/>
+  <a u="7AB8" b="B8 4F"/>
+  <a u="7AB9" b="B8 50"/>
+  <a u="7ABA" b="B8 51"/>
+  <a u="7ABB" b="B8 52"/>
+  <a u="7ABC" b="B8 53"/>
+  <a u="7ABD" b="B8 54"/>
+  <a u="7ABE" b="B8 55"/>
+  <a u="7ABF" b="C1 FE"/>
+  <a u="7AC0" b="B8 56"/>
+  <a u="7AC1" b="B8 57"/>
+  <a u="7AC2" b="B8 58"/>
+  <a u="7AC3" b="B8 59"/>
+  <a u="7AC4" b="B8 5A"/>
+  <a u="7AC5" b="B8 5B"/>
+  <a u="7AC6" b="B8 5C"/>
+  <a u="7AC7" b="B8 5D"/>
+  <a u="7AC8" b="B8 5E"/>
+  <a u="7AC9" b="B8 5F"/>
+  <a u="7ACA" b="B8 60"/>
+  <a u="7ACB" b="C1 A2"/>
+  <a u="7ACC" b="B8 61"/>
+  <a u="7ACD" b="B8 62"/>
+  <a u="7ACE" b="B8 63"/>
+  <a u="7ACF" b="B8 64"/>
+  <a u="7AD0" b="B8 65"/>
+  <a u="7AD1" b="B8 66"/>
+  <a u="7AD2" b="B8 67"/>
+  <a u="7AD3" b="B8 68"/>
+  <a u="7AD4" b="B8 69"/>
+  <a u="7AD5" b="B8 6A"/>
+  <a u="7AD6" b="CA FA"/>
+  <a u="7AD7" b="B8 6B"/>
+  <a u="7AD8" b="B8 6C"/>
+  <a u="7AD9" b="D5 BE"/>
+  <a u="7ADA" b="B8 6D"/>
+  <a u="7ADB" b="B8 6E"/>
+  <a u="7ADC" b="B8 6F"/>
+  <a u="7ADD" b="B8 70"/>
+  <a u="7ADE" b="BE BA"/>
+  <a u="7ADF" b="BE B9"/>
+  <a u="7AE0" b="D5 C2"/>
+  <a u="7AE1" b="B8 71"/>
+  <a u="7AE2" b="B8 72"/>
+  <a u="7AE3" b="BF A2"/>
+  <a u="7AE4" b="B8 73"/>
+  <a u="7AE5" b="CD AF"/>
+  <a u="7AE6" b="F1 B5"/>
+  <a u="7AE7" b="B8 74"/>
+  <a u="7AE8" b="B8 75"/>
+  <a u="7AE9" b="B8 76"/>
+  <a u="7AEA" b="B8 77"/>
+  <a u="7AEB" b="B8 78"/>
+  <a u="7AEC" b="B8 79"/>
+  <a u="7AED" b="BD DF"/>
+  <a u="7AEE" b="B8 7A"/>
+  <a u="7AEF" b="B6 CB"/>
+  <a u="7AF0" b="B8 7B"/>
+  <a u="7AF1" b="B8 7C"/>
+  <a u="7AF2" b="B8 7D"/>
+  <a u="7AF3" b="B8 7E"/>
+  <a u="7AF4" b="B8 80"/>
+  <a u="7AF5" b="B8 81"/>
+  <a u="7AF6" b="B8 82"/>
+  <a u="7AF7" b="B8 83"/>
+  <a u="7AF8" b="B8 84"/>
+  <a u="7AF9" b="D6 F1"/>
+  <a u="7AFA" b="F3 C3"/>
+  <a u="7AFB" b="B8 85"/>
+  <a u="7AFC" b="B8 86"/>
+  <a u="7AFD" b="F3 C4"/>
+  <a u="7AFE" b="B8 87"/>
+  <a u="7AFF" b="B8 CD"/>
+  <a u="7B00" b="B8 88"/>
+  <a u="7B01" b="B8 89"/>
+  <a u="7B02" b="B8 8A"/>
+  <a u="7B03" b="F3 C6"/>
+  <a u="7B04" b="F3 C7"/>
+  <a u="7B05" b="B8 8B"/>
+  <a u="7B06" b="B0 CA"/>
+  <a u="7B07" b="B8 8C"/>
+  <a u="7B08" b="F3 C5"/>
+  <a u="7B09" b="B8 8D"/>
+  <a u="7B0A" b="F3 C9"/>
+  <a u="7B0B" b="CB F1"/>
+  <a u="7B0C" b="B8 8E"/>
+  <a u="7B0D" b="B8 8F"/>
+  <a u="7B0E" b="B8 90"/>
+  <a u="7B0F" b="F3 CB"/>
+  <a u="7B10" b="B8 91"/>
+  <a u="7B11" b="D0 A6"/>
+  <a u="7B12" b="B8 92"/>
+  <a u="7B13" b="B8 93"/>
+  <a u="7B14" b="B1 CA"/>
+  <a u="7B15" b="F3 C8"/>
+  <a u="7B16" b="B8 94"/>
+  <a u="7B17" b="B8 95"/>
+  <a u="7B18" b="B8 96"/>
+  <a u="7B19" b="F3 CF"/>
+  <a u="7B1A" b="B8 97"/>
+  <a u="7B1B" b="B5 D1"/>
+  <a u="7B1C" b="B8 98"/>
+  <a u="7B1D" b="B8 99"/>
+  <a u="7B1E" b="F3 D7"/>
+  <a u="7B1F" b="B8 9A"/>
+  <a u="7B20" b="F3 D2"/>
+  <a u="7B21" b="B8 9B"/>
+  <a u="7B22" b="B8 9C"/>
+  <a u="7B23" b="B8 9D"/>
+  <a u="7B24" b="F3 D4"/>
+  <a u="7B25" b="F3 D3"/>
+  <a u="7B26" b="B7 FB"/>
+  <a u="7B27" b="B8 9E"/>
+  <a u="7B28" b="B1 BF"/>
+  <a u="7B29" b="B8 9F"/>
+  <a u="7B2A" b="F3 CE"/>
+  <a u="7B2B" b="F3 CA"/>
+  <a u="7B2C" b="B5 DA"/>
+  <a u="7B2D" b="B8 A0"/>
+  <a u="7B2E" b="F3 D0"/>
+  <a u="7B2F" b="B9 40"/>
+  <a u="7B30" b="B9 41"/>
+  <a u="7B31" b="F3 D1"/>
+  <a u="7B32" b="B9 42"/>
+  <a u="7B33" b="F3 D5"/>
+  <a u="7B34" b="B9 43"/>
+  <a u="7B35" b="B9 44"/>
+  <a u="7B36" b="B9 45"/>
+  <a u="7B37" b="B9 46"/>
+  <a u="7B38" b="F3 CD"/>
+  <a u="7B39" b="B9 47"/>
+  <a u="7B3A" b="BC E3"/>
+  <a u="7B3B" b="B9 48"/>
+  <a u="7B3C" b="C1 FD"/>
+  <a u="7B3D" b="B9 49"/>
+  <a u="7B3E" b="F3 D6"/>
+  <a u="7B3F" b="B9 4A"/>
+  <a u="7B40" b="B9 4B"/>
+  <a u="7B41" b="B9 4C"/>
+  <a u="7B42" b="B9 4D"/>
+  <a u="7B43" b="B9 4E"/>
+  <a u="7B44" b="B9 4F"/>
+  <a u="7B45" b="F3 DA"/>
+  <a u="7B46" b="B9 50"/>
+  <a u="7B47" b="F3 CC"/>
+  <a u="7B48" b="B9 51"/>
+  <a u="7B49" b="B5 C8"/>
+  <a u="7B4A" b="B9 52"/>
+  <a u="7B4B" b="BD EE"/>
+  <a u="7B4C" b="F3 DC"/>
+  <a u="7B4D" b="B9 53"/>
+  <a u="7B4E" b="B9 54"/>
+  <a u="7B4F" b="B7 A4"/>
+  <a u="7B50" b="BF F0"/>
+  <a u="7B51" b="D6 FE"/>
+  <a u="7B52" b="CD B2"/>
+  <a u="7B53" b="B9 55"/>
+  <a u="7B54" b="B4 F0"/>
+  <a u="7B55" b="B9 56"/>
+  <a u="7B56" b="B2 DF"/>
+  <a u="7B57" b="B9 57"/>
+  <a u="7B58" b="F3 D8"/>
+  <a u="7B59" b="B9 58"/>
+  <a u="7B5A" b="F3 D9"/>
+  <a u="7B5B" b="C9 B8"/>
+  <a u="7B5C" b="B9 59"/>
+  <a u="7B5D" b="F3 DD"/>
+  <a u="7B5E" b="B9 5A"/>
+  <a u="7B5F" b="B9 5B"/>
+  <a u="7B60" b="F3 DE"/>
+  <a u="7B61" b="B9 5C"/>
+  <a u="7B62" b="F3 E1"/>
+  <a u="7B63" b="B9 5D"/>
+  <a u="7B64" b="B9 5E"/>
+  <a u="7B65" b="B9 5F"/>
+  <a u="7B66" b="B9 60"/>
+  <a u="7B67" b="B9 61"/>
+  <a u="7B68" b="B9 62"/>
+  <a u="7B69" b="B9 63"/>
+  <a u="7B6A" b="B9 64"/>
+  <a u="7B6B" b="B9 65"/>
+  <a u="7B6C" b="B9 66"/>
+  <a u="7B6D" b="B9 67"/>
+  <a u="7B6E" b="F3 DF"/>
+  <a u="7B6F" b="B9 68"/>
+  <a u="7B70" b="B9 69"/>
+  <a u="7B71" b="F3 E3"/>
+  <a u="7B72" b="F3 E2"/>
+  <a u="7B73" b="B9 6A"/>
+  <a u="7B74" b="B9 6B"/>
+  <a u="7B75" b="F3 DB"/>
+  <a u="7B76" b="B9 6C"/>
+  <a u="7B77" b="BF EA"/>
+  <a u="7B78" b="B9 6D"/>
+  <a u="7B79" b="B3 EF"/>
+  <a u="7B7A" b="B9 6E"/>
+  <a u="7B7B" b="F3 E0"/>
+  <a u="7B7C" b="B9 6F"/>
+  <a u="7B7D" b="B9 70"/>
+  <a u="7B7E" b="C7 A9"/>
+  <a u="7B7F" b="B9 71"/>
+  <a u="7B80" b="BC F2"/>
+  <a u="7B81" b="B9 72"/>
+  <a u="7B82" b="B9 73"/>
+  <a u="7B83" b="B9 74"/>
+  <a u="7B84" b="B9 75"/>
+  <a u="7B85" b="F3 EB"/>
+  <a u="7B86" b="B9 76"/>
+  <a u="7B87" b="B9 77"/>
+  <a u="7B88" b="B9 78"/>
+  <a u="7B89" b="B9 79"/>
+  <a u="7B8A" b="B9 7A"/>
+  <a u="7B8B" b="B9 7B"/>
+  <a u="7B8C" b="B9 7C"/>
+  <a u="7B8D" b="B9 BF"/>
+  <a u="7B8E" b="B9 7D"/>
+  <a u="7B8F" b="B9 7E"/>
+  <a u="7B90" b="F3 E4"/>
+  <a u="7B91" b="B9 80"/>
+  <a u="7B92" b="B9 81"/>
+  <a u="7B93" b="B9 82"/>
+  <a u="7B94" b="B2 AD"/>
+  <a u="7B95" b="BB FE"/>
+  <a u="7B96" b="B9 83"/>
+  <a u="7B97" b="CB E3"/>
+  <a u="7B98" b="B9 84"/>
+  <a u="7B99" b="B9 85"/>
+  <a u="7B9A" b="B9 86"/>
+  <a u="7B9B" b="B9 87"/>
+  <a u="7B9C" b="F3 ED"/>
+  <a u="7B9D" b="F3 E9"/>
+  <a u="7B9E" b="B9 88"/>
+  <a u="7B9F" b="B9 89"/>
+  <a u="7BA0" b="B9 8A"/>
+  <a u="7BA1" b="B9 DC"/>
+  <a u="7BA2" b="F3 EE"/>
+  <a u="7BA3" b="B9 8B"/>
+  <a u="7BA4" b="B9 8C"/>
+  <a u="7BA5" b="B9 8D"/>
+  <a u="7BA6" b="F3 E5"/>
+  <a u="7BA7" b="F3 E6"/>
+  <a u="7BA8" b="F3 EA"/>
+  <a u="7BA9" b="C2 E1"/>
+  <a u="7BAA" b="F3 EC"/>
+  <a u="7BAB" b="F3 EF"/>
+  <a u="7BAC" b="F3 E8"/>
+  <a u="7BAD" b="BC FD"/>
+  <a u="7BAE" b="B9 8E"/>
+  <a u="7BAF" b="B9 8F"/>
+  <a u="7BB0" b="B9 90"/>
+  <a u="7BB1" b="CF E4"/>
+  <a u="7BB2" b="B9 91"/>
+  <a u="7BB3" b="B9 92"/>
+  <a u="7BB4" b="F3 F0"/>
+  <a u="7BB5" b="B9 93"/>
+  <a u="7BB6" b="B9 94"/>
+  <a u="7BB7" b="B9 95"/>
+  <a u="7BB8" b="F3 E7"/>
+  <a u="7BB9" b="B9 96"/>
+  <a u="7BBA" b="B9 97"/>
+  <a u="7BBB" b="B9 98"/>
+  <a u="7BBC" b="B9 99"/>
+  <a u="7BBD" b="B9 9A"/>
+  <a u="7BBE" b="B9 9B"/>
+  <a u="7BBF" b="B9 9C"/>
+  <a u="7BC0" b="B9 9D"/>
+  <a u="7BC1" b="F3 F2"/>
+  <a u="7BC2" b="B9 9E"/>
+  <a u="7BC3" b="B9 9F"/>
+  <a u="7BC4" b="B9 A0"/>
+  <a u="7BC5" b="BA 40"/>
+  <a u="7BC6" b="D7 AD"/>
+  <a u="7BC7" b="C6 AA"/>
+  <a u="7BC8" b="BA 41"/>
+  <a u="7BC9" b="BA 42"/>
+  <a u="7BCA" b="BA 43"/>
+  <a u="7BCB" b="BA 44"/>
+  <a u="7BCC" b="F3 F3"/>
+  <a u="7BCD" b="BA 45"/>
+  <a u="7BCE" b="BA 46"/>
+  <a u="7BCF" b="BA 47"/>
+  <a u="7BD0" b="BA 48"/>
+  <a u="7BD1" b="F3 F1"/>
+  <a u="7BD2" b="BA 49"/>
+  <a u="7BD3" b="C2 A8"/>
+  <a u="7BD4" b="BA 4A"/>
+  <a u="7BD5" b="BA 4B"/>
+  <a u="7BD6" b="BA 4C"/>
+  <a u="7BD7" b="BA 4D"/>
+  <a u="7BD8" b="BA 4E"/>
+  <a u="7BD9" b="B8 DD"/>
+  <a u="7BDA" b="F3 F5"/>
+  <a u="7BDB" b="BA 4F"/>
+  <a u="7BDC" b="BA 50"/>
+  <a u="7BDD" b="F3 F4"/>
+  <a u="7BDE" b="BA 51"/>
+  <a u="7BDF" b="BA 52"/>
+  <a u="7BE0" b="BA 53"/>
+  <a u="7BE1" b="B4 DB"/>
+  <a u="7BE2" b="BA 54"/>
+  <a u="7BE3" b="BA 55"/>
+  <a u="7BE4" b="BA 56"/>
+  <a u="7BE5" b="F3 F6"/>
+  <a u="7BE6" b="F3 F7"/>
+  <a u="7BE7" b="BA 57"/>
+  <a u="7BE8" b="BA 58"/>
+  <a u="7BE9" b="BA 59"/>
+  <a u="7BEA" b="F3 F8"/>
+  <a u="7BEB" b="BA 5A"/>
+  <a u="7BEC" b="BA 5B"/>
+  <a u="7BED" b="BA 5C"/>
+  <a u="7BEE" b="C0 BA"/>
+  <a u="7BEF" b="BA 5D"/>
+  <a u="7BF0" b="BA 5E"/>
+  <a u="7BF1" b="C0 E9"/>
+  <a u="7BF2" b="BA 5F"/>
+  <a u="7BF3" b="BA 60"/>
+  <a u="7BF4" b="BA 61"/>
+  <a u="7BF5" b="BA 62"/>
+  <a u="7BF6" b="BA 63"/>
+  <a u="7BF7" b="C5 F1"/>
+  <a u="7BF8" b="BA 64"/>
+  <a u="7BF9" b="BA 65"/>
+  <a u="7BFA" b="BA 66"/>
+  <a u="7BFB" b="BA 67"/>
+  <a u="7BFC" b="F3 FB"/>
+  <a u="7BFD" b="BA 68"/>
+  <a u="7BFE" b="F3 FA"/>
+  <a u="7BFF" b="BA 69"/>
+  <a u="7C00" b="BA 6A"/>
+  <a u="7C01" b="BA 6B"/>
+  <a u="7C02" b="BA 6C"/>
+  <a u="7C03" b="BA 6D"/>
+  <a u="7C04" b="BA 6E"/>
+  <a u="7C05" b="BA 6F"/>
+  <a u="7C06" b="BA 70"/>
+  <a u="7C07" b="B4 D8"/>
+  <a u="7C08" b="BA 71"/>
+  <a u="7C09" b="BA 72"/>
+  <a u="7C0A" b="BA 73"/>
+  <a u="7C0B" b="F3 FE"/>
+  <a u="7C0C" b="F3 F9"/>
+  <a u="7C0D" b="BA 74"/>
+  <a u="7C0E" b="BA 75"/>
+  <a u="7C0F" b="F3 FC"/>
+  <a u="7C10" b="BA 76"/>
+  <a u="7C11" b="BA 77"/>
+  <a u="7C12" b="BA 78"/>
+  <a u="7C13" b="BA 79"/>
+  <a u="7C14" b="BA 7A"/>
+  <a u="7C15" b="BA 7B"/>
+  <a u="7C16" b="F3 FD"/>
+  <a u="7C17" b="BA 7C"/>
+  <a u="7C18" b="BA 7D"/>
+  <a u="7C19" b="BA 7E"/>
+  <a u="7C1A" b="BA 80"/>
+  <a u="7C1B" b="BA 81"/>
+  <a u="7C1C" b="BA 82"/>
+  <a u="7C1D" b="BA 83"/>
+  <a u="7C1E" b="BA 84"/>
+  <a u="7C1F" b="F4 A1"/>
+  <a u="7C20" b="BA 85"/>
+  <a u="7C21" b="BA 86"/>
+  <a u="7C22" b="BA 87"/>
+  <a u="7C23" b="BA 88"/>
+  <a u="7C24" b="BA 89"/>
+  <a u="7C25" b="BA 8A"/>
+  <a u="7C26" b="F4 A3"/>
+  <a u="7C27" b="BB C9"/>
+  <a u="7C28" b="BA 8B"/>
+  <a u="7C29" b="BA 8C"/>
+  <a u="7C2A" b="F4 A2"/>
+  <a u="7C2B" b="BA 8D"/>
+  <a u="7C2C" b="BA 8E"/>
+  <a u="7C2D" b="BA 8F"/>
+  <a u="7C2E" b="BA 90"/>
+  <a u="7C2F" b="BA 91"/>
+  <a u="7C30" b="BA 92"/>
+  <a u="7C31" b="BA 93"/>
+  <a u="7C32" b="BA 94"/>
+  <a u="7C33" b="BA 95"/>
+  <a u="7C34" b="BA 96"/>
+  <a u="7C35" b="BA 97"/>
+  <a u="7C36" b="BA 98"/>
+  <a u="7C37" b="BA 99"/>
+  <a u="7C38" b="F4 A4"/>
+  <a u="7C39" b="BA 9A"/>
+  <a u="7C3A" b="BA 9B"/>
+  <a u="7C3B" b="BA 9C"/>
+  <a u="7C3C" b="BA 9D"/>
+  <a u="7C3D" b="BA 9E"/>
+  <a u="7C3E" b="BA 9F"/>
+  <a u="7C3F" b="B2 BE"/>
+  <a u="7C40" b="F4 A6"/>
+  <a u="7C41" b="F4 A5"/>
+  <a u="7C42" b="BA A0"/>
+  <a u="7C43" b="BB 40"/>
+  <a u="7C44" b="BB 41"/>
+  <a u="7C45" b="BB 42"/>
+  <a u="7C46" b="BB 43"/>
+  <a u="7C47" b="BB 44"/>
+  <a u="7C48" b="BB 45"/>
+  <a u="7C49" b="BB 46"/>
+  <a u="7C4A" b="BB 47"/>
+  <a u="7C4B" b="BB 48"/>
+  <a u="7C4C" b="BB 49"/>
+  <a u="7C4D" b="BC AE"/>
+  <a u="7C4E" b="BB 4A"/>
+  <a u="7C4F" b="BB 4B"/>
+  <a u="7C50" b="BB 4C"/>
+  <a u="7C51" b="BB 4D"/>
+  <a u="7C52" b="BB 4E"/>
+  <a u="7C53" b="BB 4F"/>
+  <a u="7C54" b="BB 50"/>
+  <a u="7C55" b="BB 51"/>
+  <a u="7C56" b="BB 52"/>
+  <a u="7C57" b="BB 53"/>
+  <a u="7C58" b="BB 54"/>
+  <a u="7C59" b="BB 55"/>
+  <a u="7C5A" b="BB 56"/>
+  <a u="7C5B" b="BB 57"/>
+  <a u="7C5C" b="BB 58"/>
+  <a u="7C5D" b="BB 59"/>
+  <a u="7C5E" b="BB 5A"/>
+  <a u="7C5F" b="BB 5B"/>
+  <a u="7C60" b="BB 5C"/>
+  <a u="7C61" b="BB 5D"/>
+  <a u="7C62" b="BB 5E"/>
+  <a u="7C63" b="BB 5F"/>
+  <a u="7C64" b="BB 60"/>
+  <a u="7C65" b="BB 61"/>
+  <a u="7C66" b="BB 62"/>
+  <a u="7C67" b="BB 63"/>
+  <a u="7C68" b="BB 64"/>
+  <a u="7C69" b="BB 65"/>
+  <a u="7C6A" b="BB 66"/>
+  <a u="7C6B" b="BB 67"/>
+  <a u="7C6C" b="BB 68"/>
+  <a u="7C6D" b="BB 69"/>
+  <a u="7C6E" b="BB 6A"/>
+  <a u="7C6F" b="BB 6B"/>
+  <a u="7C70" b="BB 6C"/>
+  <a u="7C71" b="BB 6D"/>
+  <a u="7C72" b="BB 6E"/>
+  <a u="7C73" b="C3 D7"/>
+  <a u="7C74" b="D9 E1"/>
+  <a u="7C75" b="BB 6F"/>
+  <a u="7C76" b="BB 70"/>
+  <a u="7C77" b="BB 71"/>
+  <a u="7C78" b="BB 72"/>
+  <a u="7C79" b="BB 73"/>
+  <a u="7C7A" b="BB 74"/>
+  <a u="7C7B" b="C0 E0"/>
+  <a u="7C7C" b="F4 CC"/>
+  <a u="7C7D" b="D7 D1"/>
+  <a u="7C7E" b="BB 75"/>
+  <a u="7C7F" b="BB 76"/>
+  <a u="7C80" b="BB 77"/>
+  <a u="7C81" b="BB 78"/>
+  <a u="7C82" b="BB 79"/>
+  <a u="7C83" b="BB 7A"/>
+  <a u="7C84" b="BB 7B"/>
+  <a u="7C85" b="BB 7C"/>
+  <a u="7C86" b="BB 7D"/>
+  <a u="7C87" b="BB 7E"/>
+  <a u="7C88" b="BB 80"/>
+  <a u="7C89" b="B7 DB"/>
+  <a u="7C8A" b="BB 81"/>
+  <a u="7C8B" b="BB 82"/>
+  <a u="7C8C" b="BB 83"/>
+  <a u="7C8D" b="BB 84"/>
+  <a u="7C8E" b="BB 85"/>
+  <a u="7C8F" b="BB 86"/>
+  <a u="7C90" b="BB 87"/>
+  <a u="7C91" b="F4 CE"/>
+  <a u="7C92" b="C1 A3"/>
+  <a u="7C93" b="BB 88"/>
+  <a u="7C94" b="BB 89"/>
+  <a u="7C95" b="C6 C9"/>
+  <a u="7C96" b="BB 8A"/>
+  <a u="7C97" b="B4 D6"/>
+  <a u="7C98" b="D5 B3"/>
+  <a u="7C99" b="BB 8B"/>
+  <a u="7C9A" b="BB 8C"/>
+  <a u="7C9B" b="BB 8D"/>
+  <a u="7C9C" b="F4 D0"/>
+  <a u="7C9D" b="F4 CF"/>
+  <a u="7C9E" b="F4 D1"/>
+  <a u="7C9F" b="CB DA"/>
+  <a u="7CA0" b="BB 8E"/>
+  <a u="7CA1" b="BB 8F"/>
+  <a u="7CA2" b="F4 D2"/>
+  <a u="7CA3" b="BB 90"/>
+  <a u="7CA4" b="D4 C1"/>
+  <a u="7CA5" b="D6 E0"/>
+  <a u="7CA6" b="BB 91"/>
+  <a u="7CA7" b="BB 92"/>
+  <a u="7CA8" b="BB 93"/>
+  <a u="7CA9" b="BB 94"/>
+  <a u="7CAA" b="B7 E0"/>
+  <a u="7CAB" b="BB 95"/>
+  <a u="7CAC" b="BB 96"/>
+  <a u="7CAD" b="BB 97"/>
+  <a u="7CAE" b="C1 B8"/>
+  <a u="7CAF" b="BB 98"/>
+  <a u="7CB0" b="BB 99"/>
+  <a u="7CB1" b="C1 BB"/>
+  <a u="7CB2" b="F4 D3"/>
+  <a u="7CB3" b="BE AC"/>
+  <a u="7CB4" b="BB 9A"/>
+  <a u="7CB5" b="BB 9B"/>
+  <a u="7CB6" b="BB 9C"/>
+  <a u="7CB7" b="BB 9D"/>
+  <a u="7CB8" b="BB 9E"/>
+  <a u="7CB9" b="B4 E2"/>
+  <a u="7CBA" b="BB 9F"/>
+  <a u="7CBB" b="BB A0"/>
+  <a u="7CBC" b="F4 D4"/>
+  <a u="7CBD" b="F4 D5"/>
+  <a u="7CBE" b="BE AB"/>
+  <a u="7CBF" b="BC 40"/>
+  <a u="7CC0" b="BC 41"/>
+  <a u="7CC1" b="F4 D6"/>
+  <a u="7CC2" b="BC 42"/>
+  <a u="7CC3" b="BC 43"/>
+  <a u="7CC4" b="BC 44"/>
+  <a u="7CC5" b="F4 DB"/>
+  <a u="7CC6" b="BC 45"/>
+  <a u="7CC7" b="F4 D7"/>
+  <a u="7CC8" b="F4 DA"/>
+  <a u="7CC9" b="BC 46"/>
+  <a u="7CCA" b="BA FD"/>
+  <a u="7CCB" b="BC 47"/>
+  <a u="7CCC" b="F4 D8"/>
+  <a u="7CCD" b="F4 D9"/>
+  <a u="7CCE" b="BC 48"/>
+  <a u="7CCF" b="BC 49"/>
+  <a u="7CD0" b="BC 4A"/>
+  <a u="7CD1" b="BC 4B"/>
+  <a u="7CD2" b="BC 4C"/>
+  <a u="7CD3" b="BC 4D"/>
+  <a u="7CD4" b="BC 4E"/>
+  <a u="7CD5" b="B8 E2"/>
+  <a u="7CD6" b="CC C7"/>
+  <a u="7CD7" b="F4 DC"/>
+  <a u="7CD8" b="BC 4F"/>
+  <a u="7CD9" b="B2 DA"/>
+  <a u="7CDA" b="BC 50"/>
+  <a u="7CDB" b="BC 51"/>
+  <a u="7CDC" b="C3 D3"/>
+  <a u="7CDD" b="BC 52"/>
+  <a u="7CDE" b="BC 53"/>
+  <a u="7CDF" b="D4 E3"/>
+  <a u="7CE0" b="BF B7"/>
+  <a u="7CE1" b="BC 54"/>
+  <a u="7CE2" b="BC 55"/>
+  <a u="7CE3" b="BC 56"/>
+  <a u="7CE4" b="BC 57"/>
+  <a u="7CE5" b="BC 58"/>
+  <a u="7CE6" b="BC 59"/>
+  <a u="7CE7" b="BC 5A"/>
+  <a u="7CE8" b="F4 DD"/>
+  <a u="7CE9" b="BC 5B"/>
+  <a u="7CEA" b="BC 5C"/>
+  <a u="7CEB" b="BC 5D"/>
+  <a u="7CEC" b="BC 5E"/>
+  <a u="7CED" b="BC 5F"/>
+  <a u="7CEE" b="BC 60"/>
+  <a u="7CEF" b="C5 B4"/>
+  <a u="7CF0" b="BC 61"/>
+  <a u="7CF1" b="BC 62"/>
+  <a u="7CF2" b="BC 63"/>
+  <a u="7CF3" b="BC 64"/>
+  <a u="7CF4" b="BC 65"/>
+  <a u="7CF5" b="BC 66"/>
+  <a u="7CF6" b="BC 67"/>
+  <a u="7CF7" b="BC 68"/>
+  <a u="7CF8" b="F4 E9"/>
+  <a u="7CF9" b="BC 69"/>
+  <a u="7CFA" b="BC 6A"/>
+  <a u="7CFB" b="CF B5"/>
+  <a u="7CFC" b="BC 6B"/>
+  <a u="7CFD" b="BC 6C"/>
+  <a u="7CFE" b="BC 6D"/>
+  <a u="7CFF" b="BC 6E"/>
+  <a u="7D00" b="BC 6F"/>
+  <a u="7D01" b="BC 70"/>
+  <a u="7D02" b="BC 71"/>
+  <a u="7D03" b="BC 72"/>
+  <a u="7D04" b="BC 73"/>
+  <a u="7D05" b="BC 74"/>
+  <a u="7D06" b="BC 75"/>
+  <a u="7D07" b="BC 76"/>
+  <a u="7D08" b="BC 77"/>
+  <a u="7D09" b="BC 78"/>
+  <a u="7D0A" b="CE C9"/>
+  <a u="7D0B" b="BC 79"/>
+  <a u="7D0C" b="BC 7A"/>
+  <a u="7D0D" b="BC 7B"/>
+  <a u="7D0E" b="BC 7C"/>
+  <a u="7D0F" b="BC 7D"/>
+  <a u="7D10" b="BC 7E"/>
+  <a u="7D11" b="BC 80"/>
+  <a u="7D12" b="BC 81"/>
+  <a u="7D13" b="BC 82"/>
+  <a u="7D14" b="BC 83"/>
+  <a u="7D15" b="BC 84"/>
+  <a u="7D16" b="BC 85"/>
+  <a u="7D17" b="BC 86"/>
+  <a u="7D18" b="BC 87"/>
+  <a u="7D19" b="BC 88"/>
+  <a u="7D1A" b="BC 89"/>
+  <a u="7D1B" b="BC 8A"/>
+  <a u="7D1C" b="BC 8B"/>
+  <a u="7D1D" b="BC 8C"/>
+  <a u="7D1E" b="BC 8D"/>
+  <a u="7D1F" b="BC 8E"/>
+  <a u="7D20" b="CB D8"/>
+  <a u="7D21" b="BC 8F"/>
+  <a u="7D22" b="CB F7"/>
+  <a u="7D23" b="BC 90"/>
+  <a u="7D24" b="BC 91"/>
+  <a u="7D25" b="BC 92"/>
+  <a u="7D26" b="BC 93"/>
+  <a u="7D27" b="BD F4"/>
+  <a u="7D28" b="BC 94"/>
+  <a u="7D29" b="BC 95"/>
+  <a u="7D2A" b="BC 96"/>
+  <a u="7D2B" b="D7 CF"/>
+  <a u="7D2C" b="BC 97"/>
+  <a u="7D2D" b="BC 98"/>
+  <a u="7D2E" b="BC 99"/>
+  <a u="7D2F" b="C0 DB"/>
+  <a u="7D30" b="BC 9A"/>
+  <a u="7D31" b="BC 9B"/>
+  <a u="7D32" b="BC 9C"/>
+  <a u="7D33" b="BC 9D"/>
+  <a u="7D34" b="BC 9E"/>
+  <a u="7D35" b="BC 9F"/>
+  <a u="7D36" b="BC A0"/>
+  <a u="7D37" b="BD 40"/>
+  <a u="7D38" b="BD 41"/>
+  <a u="7D39" b="BD 42"/>
+  <a u="7D3A" b="BD 43"/>
+  <a u="7D3B" b="BD 44"/>
+  <a u="7D3C" b="BD 45"/>
+  <a u="7D3D" b="BD 46"/>
+  <a u="7D3E" b="BD 47"/>
+  <a u="7D3F" b="BD 48"/>
+  <a u="7D40" b="BD 49"/>
+  <a u="7D41" b="BD 4A"/>
+  <a u="7D42" b="BD 4B"/>
+  <a u="7D43" b="BD 4C"/>
+  <a u="7D44" b="BD 4D"/>
+  <a u="7D45" b="BD 4E"/>
+  <a u="7D46" b="BD 4F"/>
+  <a u="7D47" b="BD 50"/>
+  <a u="7D48" b="BD 51"/>
+  <a u="7D49" b="BD 52"/>
+  <a u="7D4A" b="BD 53"/>
+  <a u="7D4B" b="BD 54"/>
+  <a u="7D4C" b="BD 55"/>
+  <a u="7D4D" b="BD 56"/>
+  <a u="7D4E" b="BD 57"/>
+  <a u="7D4F" b="BD 58"/>
+  <a u="7D50" b="BD 59"/>
+  <a u="7D51" b="BD 5A"/>
+  <a u="7D52" b="BD 5B"/>
+  <a u="7D53" b="BD 5C"/>
+  <a u="7D54" b="BD 5D"/>
+  <a u="7D55" b="BD 5E"/>
+  <a u="7D56" b="BD 5F"/>
+  <a u="7D57" b="BD 60"/>
+  <a u="7D58" b="BD 61"/>
+  <a u="7D59" b="BD 62"/>
+  <a u="7D5A" b="BD 63"/>
+  <a u="7D5B" b="BD 64"/>
+  <a u="7D5C" b="BD 65"/>
+  <a u="7D5D" b="BD 66"/>
+  <a u="7D5E" b="BD 67"/>
+  <a u="7D5F" b="BD 68"/>
+  <a u="7D60" b="BD 69"/>
+  <a u="7D61" b="BD 6A"/>
+  <a u="7D62" b="BD 6B"/>
+  <a u="7D63" b="BD 6C"/>
+  <a u="7D64" b="BD 6D"/>
+  <a u="7D65" b="BD 6E"/>
+  <a u="7D66" b="BD 6F"/>
+  <a u="7D67" b="BD 70"/>
+  <a u="7D68" b="BD 71"/>
+  <a u="7D69" b="BD 72"/>
+  <a u="7D6A" b="BD 73"/>
+  <a u="7D6B" b="BD 74"/>
+  <a u="7D6C" b="BD 75"/>
+  <a u="7D6D" b="BD 76"/>
+  <a u="7D6E" b="D0 F5"/>
+  <a u="7D6F" b="BD 77"/>
+  <a u="7D70" b="BD 78"/>
+  <a u="7D71" b="BD 79"/>
+  <a u="7D72" b="BD 7A"/>
+  <a u="7D73" b="BD 7B"/>
+  <a u="7D74" b="BD 7C"/>
+  <a u="7D75" b="BD 7D"/>
+  <a u="7D76" b="BD 7E"/>
+  <a u="7D77" b="F4 EA"/>
+  <a u="7D78" b="BD 80"/>
+  <a u="7D79" b="BD 81"/>
+  <a u="7D7A" b="BD 82"/>
+  <a u="7D7B" b="BD 83"/>
+  <a u="7D7C" b="BD 84"/>
+  <a u="7D7D" b="BD 85"/>
+  <a u="7D7E" b="BD 86"/>
+  <a u="7D7F" b="BD 87"/>
+  <a u="7D80" b="BD 88"/>
+  <a u="7D81" b="BD 89"/>
+  <a u="7D82" b="BD 8A"/>
+  <a u="7D83" b="BD 8B"/>
+  <a u="7D84" b="BD 8C"/>
+  <a u="7D85" b="BD 8D"/>
+  <a u="7D86" b="BD 8E"/>
+  <a u="7D87" b="BD 8F"/>
+  <a u="7D88" b="BD 90"/>
+  <a u="7D89" b="BD 91"/>
+  <a u="7D8A" b="BD 92"/>
+  <a u="7D8B" b="BD 93"/>
+  <a u="7D8C" b="BD 94"/>
+  <a u="7D8D" b="BD 95"/>
+  <a u="7D8E" b="BD 96"/>
+  <a u="7D8F" b="BD 97"/>
+  <a u="7D90" b="BD 98"/>
+  <a u="7D91" b="BD 99"/>
+  <a u="7D92" b="BD 9A"/>
+  <a u="7D93" b="BD 9B"/>
+  <a u="7D94" b="BD 9C"/>
+  <a u="7D95" b="BD 9D"/>
+  <a u="7D96" b="BD 9E"/>
+  <a u="7D97" b="BD 9F"/>
+  <a u="7D98" b="BD A0"/>
+  <a u="7D99" b="BE 40"/>
+  <a u="7D9A" b="BE 41"/>
+  <a u="7D9B" b="BE 42"/>
+  <a u="7D9C" b="BE 43"/>
+  <a u="7D9D" b="BE 44"/>
+  <a u="7D9E" b="BE 45"/>
+  <a u="7D9F" b="BE 46"/>
+  <a u="7DA0" b="BE 47"/>
+  <a u="7DA1" b="BE 48"/>
+  <a u="7DA2" b="BE 49"/>
+  <a u="7DA3" b="BE 4A"/>
+  <a u="7DA4" b="BE 4B"/>
+  <a u="7DA5" b="BE 4C"/>
+  <a u="7DA6" b="F4 EB"/>
+  <a u="7DA7" b="BE 4D"/>
+  <a u="7DA8" b="BE 4E"/>
+  <a u="7DA9" b="BE 4F"/>
+  <a u="7DAA" b="BE 50"/>
+  <a u="7DAB" b="BE 51"/>
+  <a u="7DAC" b="BE 52"/>
+  <a u="7DAD" b="BE 53"/>
+  <a u="7DAE" b="F4 EC"/>
+  <a u="7DAF" b="BE 54"/>
+  <a u="7DB0" b="BE 55"/>
+  <a u="7DB1" b="BE 56"/>
+  <a u="7DB2" b="BE 57"/>
+  <a u="7DB3" b="BE 58"/>
+  <a u="7DB4" b="BE 59"/>
+  <a u="7DB5" b="BE 5A"/>
+  <a u="7DB6" b="BE 5B"/>
+  <a u="7DB7" b="BE 5C"/>
+  <a u="7DB8" b="BE 5D"/>
+  <a u="7DB9" b="BE 5E"/>
+  <a u="7DBA" b="BE 5F"/>
+  <a u="7DBB" b="BE 60"/>
+  <a u="7DBC" b="BE 61"/>
+  <a u="7DBD" b="BE 62"/>
+  <a u="7DBE" b="BE 63"/>
+  <a u="7DBF" b="BE 64"/>
+  <a u="7DC0" b="BE 65"/>
+  <a u="7DC1" b="BE 66"/>
+  <a u="7DC2" b="BE 67"/>
+  <a u="7DC3" b="BE 68"/>
+  <a u="7DC4" b="BE 69"/>
+  <a u="7DC5" b="BE 6A"/>
+  <a u="7DC6" b="BE 6B"/>
+  <a u="7DC7" b="BE 6C"/>
+  <a u="7DC8" b="BE 6D"/>
+  <a u="7DC9" b="BE 6E"/>
+  <a u="7DCA" b="BE 6F"/>
+  <a u="7DCB" b="BE 70"/>
+  <a u="7DCC" b="BE 71"/>
+  <a u="7DCD" b="BE 72"/>
+  <a u="7DCE" b="BE 73"/>
+  <a u="7DCF" b="BE 74"/>
+  <a u="7DD0" b="BE 75"/>
+  <a u="7DD1" b="BE 76"/>
+  <a u="7DD2" b="BE 77"/>
+  <a u="7DD3" b="BE 78"/>
+  <a u="7DD4" b="BE 79"/>
+  <a u="7DD5" b="BE 7A"/>
+  <a u="7DD6" b="BE 7B"/>
+  <a u="7DD7" b="BE 7C"/>
+  <a u="7DD8" b="BE 7D"/>
+  <a u="7DD9" b="BE 7E"/>
+  <a u="7DDA" b="BE 80"/>
+  <a u="7DDB" b="BE 81"/>
+  <a u="7DDC" b="BE 82"/>
+  <a u="7DDD" b="BE 83"/>
+  <a u="7DDE" b="BE 84"/>
+  <a u="7DDF" b="BE 85"/>
+  <a u="7DE0" b="BE 86"/>
+  <a u="7DE1" b="BE 87"/>
+  <a u="7DE2" b="BE 88"/>
+  <a u="7DE3" b="BE 89"/>
+  <a u="7DE4" b="BE 8A"/>
+  <a u="7DE5" b="BE 8B"/>
+  <a u="7DE6" b="BE 8C"/>
+  <a u="7DE7" b="BE 8D"/>
+  <a u="7DE8" b="BE 8E"/>
+  <a u="7DE9" b="BE 8F"/>
+  <a u="7DEA" b="BE 90"/>
+  <a u="7DEB" b="BE 91"/>
+  <a u="7DEC" b="BE 92"/>
+  <a u="7DED" b="BE 93"/>
+  <a u="7DEE" b="BE 94"/>
+  <a u="7DEF" b="BE 95"/>
+  <a u="7DF0" b="BE 96"/>
+  <a u="7DF1" b="BE 97"/>
+  <a u="7DF2" b="BE 98"/>
+  <a u="7DF3" b="BE 99"/>
+  <a u="7DF4" b="BE 9A"/>
+  <a u="7DF5" b="BE 9B"/>
+  <a u="7DF6" b="BE 9C"/>
+  <a u="7DF7" b="BE 9D"/>
+  <a u="7DF8" b="BE 9E"/>
+  <a u="7DF9" b="BE 9F"/>
+  <a u="7DFA" b="BE A0"/>
+  <a u="7DFB" b="BF 40"/>
+  <a u="7DFC" b="BF 41"/>
+  <a u="7DFD" b="BF 42"/>
+  <a u="7DFE" b="BF 43"/>
+  <a u="7DFF" b="BF 44"/>
+  <a u="7E00" b="BF 45"/>
+  <a u="7E01" b="BF 46"/>
+  <a u="7E02" b="BF 47"/>
+  <a u="7E03" b="BF 48"/>
+  <a u="7E04" b="BF 49"/>
+  <a u="7E05" b="BF 4A"/>
+  <a u="7E06" b="BF 4B"/>
+  <a u="7E07" b="BF 4C"/>
+  <a u="7E08" b="BF 4D"/>
+  <a u="7E09" b="BF 4E"/>
+  <a u="7E0A" b="BF 4F"/>
+  <a u="7E0B" b="BF 50"/>
+  <a u="7E0C" b="BF 51"/>
+  <a u="7E0D" b="BF 52"/>
+  <a u="7E0E" b="BF 53"/>
+  <a u="7E0F" b="BF 54"/>
+  <a u="7E10" b="BF 55"/>
+  <a u="7E11" b="BF 56"/>
+  <a u="7E12" b="BF 57"/>
+  <a u="7E13" b="BF 58"/>
+  <a u="7E14" b="BF 59"/>
+  <a u="7E15" b="BF 5A"/>
+  <a u="7E16" b="BF 5B"/>
+  <a u="7E17" b="BF 5C"/>
+  <a u="7E18" b="BF 5D"/>
+  <a u="7E19" b="BF 5E"/>
+  <a u="7E1A" b="BF 5F"/>
+  <a u="7E1B" b="BF 60"/>
+  <a u="7E1C" b="BF 61"/>
+  <a u="7E1D" b="BF 62"/>
+  <a u="7E1E" b="BF 63"/>
+  <a u="7E1F" b="BF 64"/>
+  <a u="7E20" b="BF 65"/>
+  <a u="7E21" b="BF 66"/>
+  <a u="7E22" b="BF 67"/>
+  <a u="7E23" b="BF 68"/>
+  <a u="7E24" b="BF 69"/>
+  <a u="7E25" b="BF 6A"/>
+  <a u="7E26" b="BF 6B"/>
+  <a u="7E27" b="BF 6C"/>
+  <a u="7E28" b="BF 6D"/>
+  <a u="7E29" b="BF 6E"/>
+  <a u="7E2A" b="BF 6F"/>
+  <a u="7E2B" b="BF 70"/>
+  <a u="7E2C" b="BF 71"/>
+  <a u="7E2D" b="BF 72"/>
+  <a u="7E2E" b="BF 73"/>
+  <a u="7E2F" b="BF 74"/>
+  <a u="7E30" b="BF 75"/>
+  <a u="7E31" b="BF 76"/>
+  <a u="7E32" b="BF 77"/>
+  <a u="7E33" b="BF 78"/>
+  <a u="7E34" b="BF 79"/>
+  <a u="7E35" b="BF 7A"/>
+  <a u="7E36" b="BF 7B"/>
+  <a u="7E37" b="BF 7C"/>
+  <a u="7E38" b="BF 7D"/>
+  <a u="7E39" b="BF 7E"/>
+  <a u="7E3A" b="BF 80"/>
+  <a u="7E3B" b="F7 E3"/>
+  <a u="7E3C" b="BF 81"/>
+  <a u="7E3D" b="BF 82"/>
+  <a u="7E3E" b="BF 83"/>
+  <a u="7E3F" b="BF 84"/>
+  <a u="7E40" b="BF 85"/>
+  <a u="7E41" b="B7 B1"/>
+  <a u="7E42" b="BF 86"/>
+  <a u="7E43" b="BF 87"/>
+  <a u="7E44" b="BF 88"/>
+  <a u="7E45" b="BF 89"/>
+  <a u="7E46" b="BF 8A"/>
+  <a u="7E47" b="F4 ED"/>
+  <a u="7E48" b="BF 8B"/>
+  <a u="7E49" b="BF 8C"/>
+  <a u="7E4A" b="BF 8D"/>
+  <a u="7E4B" b="BF 8E"/>
+  <a u="7E4C" b="BF 8F"/>
+  <a u="7E4D" b="BF 90"/>
+  <a u="7E4E" b="BF 91"/>
+  <a u="7E4F" b="BF 92"/>
+  <a u="7E50" b="BF 93"/>
+  <a u="7E51" b="BF 94"/>
+  <a u="7E52" b="BF 95"/>
+  <a u="7E53" b="BF 96"/>
+  <a u="7E54" b="BF 97"/>
+  <a u="7E55" b="BF 98"/>
+  <a u="7E56" b="BF 99"/>
+  <a u="7E57" b="BF 9A"/>
+  <a u="7E58" b="BF 9B"/>
+  <a u="7E59" b="BF 9C"/>
+  <a u="7E5A" b="BF 9D"/>
+  <a u="7E5B" b="BF 9E"/>
+  <a u="7E5C" b="BF 9F"/>
+  <a u="7E5D" b="BF A0"/>
+  <a u="7E5E" b="C0 40"/>
+  <a u="7E5F" b="C0 41"/>
+  <a u="7E60" b="C0 42"/>
+  <a u="7E61" b="C0 43"/>
+  <a u="7E62" b="C0 44"/>
+  <a u="7E63" b="C0 45"/>
+  <a u="7E64" b="C0 46"/>
+  <a u="7E65" b="C0 47"/>
+  <a u="7E66" b="C0 48"/>
+  <a u="7E67" b="C0 49"/>
+  <a u="7E68" b="C0 4A"/>
+  <a u="7E69" b="C0 4B"/>
+  <a u="7E6A" b="C0 4C"/>
+  <a u="7E6B" b="C0 4D"/>
+  <a u="7E6C" b="C0 4E"/>
+  <a u="7E6D" b="C0 4F"/>
+  <a u="7E6E" b="C0 50"/>
+  <a u="7E6F" b="C0 51"/>
+  <a u="7E70" b="C0 52"/>
+  <a u="7E71" b="C0 53"/>
+  <a u="7E72" b="C0 54"/>
+  <a u="7E73" b="C0 55"/>
+  <a u="7E74" b="C0 56"/>
+  <a u="7E75" b="C0 57"/>
+  <a u="7E76" b="C0 58"/>
+  <a u="7E77" b="C0 59"/>
+  <a u="7E78" b="C0 5A"/>
+  <a u="7E79" b="C0 5B"/>
+  <a u="7E7A" b="C0 5C"/>
+  <a u="7E7B" b="C0 5D"/>
+  <a u="7E7C" b="C0 5E"/>
+  <a u="7E7D" b="C0 5F"/>
+  <a u="7E7E" b="C0 60"/>
+  <a u="7E7F" b="C0 61"/>
+  <a u="7E80" b="C0 62"/>
+  <a u="7E81" b="C0 63"/>
+  <a u="7E82" b="D7 EB"/>
+  <a u="7E83" b="C0 64"/>
+  <a u="7E84" b="C0 65"/>
+  <a u="7E85" b="C0 66"/>
+  <a u="7E86" b="C0 67"/>
+  <a u="7E87" b="C0 68"/>
+  <a u="7E88" b="C0 69"/>
+  <a u="7E89" b="C0 6A"/>
+  <a u="7E8A" b="C0 6B"/>
+  <a u="7E8B" b="C0 6C"/>
+  <a u="7E8C" b="C0 6D"/>
+  <a u="7E8D" b="C0 6E"/>
+  <a u="7E8E" b="C0 6F"/>
+  <a u="7E8F" b="C0 70"/>
+  <a u="7E90" b="C0 71"/>
+  <a u="7E91" b="C0 72"/>
+  <a u="7E92" b="C0 73"/>
+  <a u="7E93" b="C0 74"/>
+  <a u="7E94" b="C0 75"/>
+  <a u="7E95" b="C0 76"/>
+  <a u="7E96" b="C0 77"/>
+  <a u="7E97" b="C0 78"/>
+  <a u="7E98" b="C0 79"/>
+  <a u="7E99" b="C0 7A"/>
+  <a u="7E9A" b="C0 7B"/>
+  <a u="7E9B" b="F4 EE"/>
+  <a u="7E9C" b="C0 7C"/>
+  <a u="7E9D" b="C0 7D"/>
+  <a u="7E9E" b="C0 7E"/>
+  <a u="7E9F" b="E6 F9"/>
+  <a u="7EA0" b="BE C0"/>
+  <a u="7EA1" b="E6 FA"/>
+  <a u="7EA2" b="BA EC"/>
+  <a u="7EA3" b="E6 FB"/>
+  <a u="7EA4" b="CF CB"/>
+  <a u="7EA5" b="E6 FC"/>
+  <a u="7EA6" b="D4 BC"/>
+  <a u="7EA7" b="BC B6"/>
+  <a u="7EA8" b="E6 FD"/>
+  <a u="7EA9" b="E6 FE"/>
+  <a u="7EAA" b="BC CD"/>
+  <a u="7EAB" b="C8 D2"/>
+  <a u="7EAC" b="CE B3"/>
+  <a u="7EAD" b="E7 A1"/>
+  <a u="7EAE" b="C0 80"/>
+  <a u="7EAF" b="B4 BF"/>
+  <a u="7EB0" b="E7 A2"/>
+  <a u="7EB1" b="C9 B4"/>
+  <a u="7EB2" b="B8 D9"/>
+  <a u="7EB3" b="C4 C9"/>
+  <a u="7EB4" b="C0 81"/>
+  <a u="7EB5" b="D7 DD"/>
+  <a u="7EB6" b="C2 DA"/>
+  <a u="7EB7" b="B7 D7"/>
+  <a u="7EB8" b="D6 BD"/>
+  <a u="7EB9" b="CE C6"/>
+  <a u="7EBA" b="B7 C4"/>
+  <a u="7EBB" b="C0 82"/>
+  <a u="7EBC" b="C0 83"/>
+  <a u="7EBD" b="C5 A6"/>
+  <a u="7EBE" b="E7 A3"/>
+  <a u="7EBF" b="CF DF"/>
+  <a u="7EC0" b="E7 A4"/>
+  <a u="7EC1" b="E7 A5"/>
+  <a u="7EC2" b="E7 A6"/>
+  <a u="7EC3" b="C1 B7"/>
+  <a u="7EC4" b="D7 E9"/>
+  <a u="7EC5" b="C9 F0"/>
+  <a u="7EC6" b="CF B8"/>
+  <a u="7EC7" b="D6 AF"/>
+  <a u="7EC8" b="D6 D5"/>
+  <a u="7EC9" b="E7 A7"/>
+  <a u="7ECA" b="B0 ED"/>
+  <a u="7ECB" b="E7 A8"/>
+  <a u="7ECC" b="E7 A9"/>
+  <a u="7ECD" b="C9 DC"/>
+  <a u="7ECE" b="D2 EF"/>
+  <a u="7ECF" b="BE AD"/>
+  <a u="7ED0" b="E7 AA"/>
+  <a u="7ED1" b="B0 F3"/>
+  <a u="7ED2" b="C8 DE"/>
+  <a u="7ED3" b="BD E1"/>
+  <a u="7ED4" b="E7 AB"/>
+  <a u="7ED5" b="C8 C6"/>
+  <a u="7ED6" b="C0 84"/>
+  <a u="7ED7" b="E7 AC"/>
+  <a u="7ED8" b="BB E6"/>
+  <a u="7ED9" b="B8 F8"/>
+  <a u="7EDA" b="D1 A4"/>
+  <a u="7EDB" b="E7 AD"/>
+  <a u="7EDC" b="C2 E7"/>
+  <a u="7EDD" b="BE F8"/>
+  <a u="7EDE" b="BD CA"/>
+  <a u="7EDF" b="CD B3"/>
+  <a u="7EE0" b="E7 AE"/>
+  <a u="7EE1" b="E7 AF"/>
+  <a u="7EE2" b="BE EE"/>
+  <a u="7EE3" b="D0 E5"/>
+  <a u="7EE4" b="C0 85"/>
+  <a u="7EE5" b="CB E7"/>
+  <a u="7EE6" b="CC D0"/>
+  <a u="7EE7" b="BC CC"/>
+  <a u="7EE8" b="E7 B0"/>
+  <a u="7EE9" b="BC A8"/>
+  <a u="7EEA" b="D0 F7"/>
+  <a u="7EEB" b="E7 B1"/>
+  <a u="7EEC" b="C0 86"/>
+  <a u="7EED" b="D0 F8"/>
+  <a u="7EEE" b="E7 B2"/>
+  <a u="7EEF" b="E7 B3"/>
+  <a u="7EF0" b="B4 C2"/>
+  <a u="7EF1" b="E7 B4"/>
+  <a u="7EF2" b="E7 B5"/>
+  <a u="7EF3" b="C9 FE"/>
+  <a u="7EF4" b="CE AC"/>
+  <a u="7EF5" b="C3 E0"/>
+  <a u="7EF6" b="E7 B7"/>
+  <a u="7EF7" b="B1 C1"/>
+  <a u="7EF8" b="B3 F1"/>
+  <a u="7EF9" b="C0 87"/>
+  <a u="7EFA" b="E7 B8"/>
+  <a u="7EFB" b="E7 B9"/>
+  <a u="7EFC" b="D7 DB"/>
+  <a u="7EFD" b="D5 C0"/>
+  <a u="7EFE" b="E7 BA"/>
+  <a u="7EFF" b="C2 CC"/>
+  <a u="7F00" b="D7 BA"/>
+  <a u="7F01" b="E7 BB"/>
+  <a u="7F02" b="E7 BC"/>
+  <a u="7F03" b="E7 BD"/>
+  <a u="7F04" b="BC EA"/>
+  <a u="7F05" b="C3 E5"/>
+  <a u="7F06" b="C0 C2"/>
+  <a u="7F07" b="E7 BE"/>
+  <a u="7F08" b="E7 BF"/>
+  <a u="7F09" b="BC A9"/>
+  <a u="7F0A" b="C0 88"/>
+  <a u="7F0B" b="E7 C0"/>
+  <a u="7F0C" b="E7 C1"/>
+  <a u="7F0D" b="E7 B6"/>
+  <a u="7F0E" b="B6 D0"/>
+  <a u="7F0F" b="E7 C2"/>
+  <a u="7F10" b="C0 89"/>
+  <a u="7F11" b="E7 C3"/>
+  <a u="7F12" b="E7 C4"/>
+  <a u="7F13" b="BB BA"/>
+  <a u="7F14" b="B5 DE"/>
+  <a u="7F15" b="C2 C6"/>
+  <a u="7F16" b="B1 E0"/>
+  <a u="7F17" b="E7 C5"/>
+  <a u="7F18" b="D4 B5"/>
+  <a u="7F19" b="E7 C6"/>
+  <a u="7F1A" b="B8 BF"/>
+  <a u="7F1B" b="E7 C8"/>
+  <a u="7F1C" b="E7 C7"/>
+  <a u="7F1D" b="B7 EC"/>
+  <a u="7F1E" b="C0 8A"/>
+  <a u="7F1F" b="E7 C9"/>
+  <a u="7F20" b="B2 F8"/>
+  <a u="7F21" b="E7 CA"/>
+  <a u="7F22" b="E7 CB"/>
+  <a u="7F23" b="E7 CC"/>
+  <a u="7F24" b="E7 CD"/>
+  <a u="7F25" b="E7 CE"/>
+  <a u="7F26" b="E7 CF"/>
+  <a u="7F27" b="E7 D0"/>
+  <a u="7F28" b="D3 A7"/>
+  <a u="7F29" b="CB F5"/>
+  <a u="7F2A" b="E7 D1"/>
+  <a u="7F2B" b="E7 D2"/>
+  <a u="7F2C" b="E7 D3"/>
+  <a u="7F2D" b="E7 D4"/>
+  <a u="7F2E" b="C9 C9"/>
+  <a u="7F2F" b="E7 D5"/>
+  <a u="7F30" b="E7 D6"/>
+  <a u="7F31" b="E7 D7"/>
+  <a u="7F32" b="E7 D8"/>
+  <a u="7F33" b="E7 D9"/>
+  <a u="7F34" b="BD C9"/>
+  <a u="7F35" b="E7 DA"/>
+  <a u="7F36" b="F3 BE"/>
+  <a u="7F37" b="C0 8B"/>
+  <a u="7F38" b="B8 D7"/>
+  <a u="7F39" b="C0 8C"/>
+  <a u="7F3A" b="C8 B1"/>
+  <a u="7F3B" b="C0 8D"/>
+  <a u="7F3C" b="C0 8E"/>
+  <a u="7F3D" b="C0 8F"/>
+  <a u="7F3E" b="C0 90"/>
+  <a u="7F3F" b="C0 91"/>
+  <a u="7F40" b="C0 92"/>
+  <a u="7F41" b="C0 93"/>
+  <a u="7F42" b="F3 BF"/>
+  <a u="7F43" b="C0 94"/>
+  <a u="7F44" b="F3 C0"/>
+  <a u="7F45" b="F3 C1"/>
+  <a u="7F46" b="C0 95"/>
+  <a u="7F47" b="C0 96"/>
+  <a u="7F48" b="C0 97"/>
+  <a u="7F49" b="C0 98"/>
+  <a u="7F4A" b="C0 99"/>
+  <a u="7F4B" b="C0 9A"/>
+  <a u="7F4C" b="C0 9B"/>
+  <a u="7F4D" b="C0 9C"/>
+  <a u="7F4E" b="C0 9D"/>
+  <a u="7F4F" b="C0 9E"/>
+  <a u="7F50" b="B9 DE"/>
+  <a u="7F51" b="CD F8"/>
+  <a u="7F52" b="C0 9F"/>
+  <a u="7F53" b="C0 A0"/>
+  <a u="7F54" b="D8 E8"/>
+  <a u="7F55" b="BA B1"/>
+  <a u="7F56" b="C1 40"/>
+  <a u="7F57" b="C2 DE"/>
+  <a u="7F58" b="EE B7"/>
+  <a u="7F59" b="C1 41"/>
+  <a u="7F5A" b="B7 A3"/>
+  <a u="7F5B" b="C1 42"/>
+  <a u="7F5C" b="C1 43"/>
+  <a u="7F5D" b="C1 44"/>
+  <a u="7F5E" b="C1 45"/>
+  <a u="7F5F" b="EE B9"/>
+  <a u="7F60" b="C1 46"/>
+  <a u="7F61" b="EE B8"/>
+  <a u="7F62" b="B0 D5"/>
+  <a u="7F63" b="C1 47"/>
+  <a u="7F64" b="C1 48"/>
+  <a u="7F65" b="C1 49"/>
+  <a u="7F66" b="C1 4A"/>
+  <a u="7F67" b="C1 4B"/>
+  <a u="7F68" b="EE BB"/>
+  <a u="7F69" b="D5 D6"/>
+  <a u="7F6A" b="D7 EF"/>
+  <a u="7F6B" b="C1 4C"/>
+  <a u="7F6C" b="C1 4D"/>
+  <a u="7F6D" b="C1 4E"/>
+  <a u="7F6E" b="D6 C3"/>
+  <a u="7F6F" b="C1 4F"/>
+  <a u="7F70" b="C1 50"/>
+  <a u="7F71" b="EE BD"/>
+  <a u="7F72" b="CA F0"/>
+  <a u="7F73" b="C1 51"/>
+  <a u="7F74" b="EE BC"/>
+  <a u="7F75" b="C1 52"/>
+  <a u="7F76" b="C1 53"/>
+  <a u="7F77" b="C1 54"/>
+  <a u="7F78" b="C1 55"/>
+  <a u="7F79" b="EE BE"/>
+  <a u="7F7A" b="C1 56"/>
+  <a u="7F7B" b="C1 57"/>
+  <a u="7F7C" b="C1 58"/>
+  <a u="7F7D" b="C1 59"/>
+  <a u="7F7E" b="EE C0"/>
+  <a u="7F7F" b="C1 5A"/>
+  <a u="7F80" b="C1 5B"/>
+  <a u="7F81" b="EE BF"/>
+  <a u="7F82" b="C1 5C"/>
+  <a u="7F83" b="C1 5D"/>
+  <a u="7F84" b="C1 5E"/>
+  <a u="7F85" b="C1 5F"/>
+  <a u="7F86" b="C1 60"/>
+  <a u="7F87" b="C1 61"/>
+  <a u="7F88" b="C1 62"/>
+  <a u="7F89" b="C1 63"/>
+  <a u="7F8A" b="D1 F2"/>
+  <a u="7F8B" b="C1 64"/>
+  <a u="7F8C" b="C7 BC"/>
+  <a u="7F8D" b="C1 65"/>
+  <a u="7F8E" b="C3 C0"/>
+  <a u="7F8F" b="C1 66"/>
+  <a u="7F90" b="C1 67"/>
+  <a u="7F91" b="C1 68"/>
+  <a u="7F92" b="C1 69"/>
+  <a u="7F93" b="C1 6A"/>
+  <a u="7F94" b="B8 E1"/>
+  <a u="7F95" b="C1 6B"/>
+  <a u="7F96" b="C1 6C"/>
+  <a u="7F97" b="C1 6D"/>
+  <a u="7F98" b="C1 6E"/>
+  <a u="7F99" b="C1 6F"/>
+  <a u="7F9A" b="C1 E7"/>
+  <a u="7F9B" b="C1 70"/>
+  <a u="7F9C" b="C1 71"/>
+  <a u="7F9D" b="F4 C6"/>
+  <a u="7F9E" b="D0 DF"/>
+  <a u="7F9F" b="F4 C7"/>
+  <a u="7FA0" b="C1 72"/>
+  <a u="7FA1" b="CF DB"/>
+  <a u="7FA2" b="C1 73"/>
+  <a u="7FA3" b="C1 74"/>
+  <a u="7FA4" b="C8 BA"/>
+  <a u="7FA5" b="C1 75"/>
+  <a u="7FA6" b="C1 76"/>
+  <a u="7FA7" b="F4 C8"/>
+  <a u="7FA8" b="C1 77"/>
+  <a u="7FA9" b="C1 78"/>
+  <a u="7FAA" b="C1 79"/>
+  <a u="7FAB" b="C1 7A"/>
+  <a u="7FAC" b="C1 7B"/>
+  <a u="7FAD" b="C1 7C"/>
+  <a u="7FAE" b="C1 7D"/>
+  <a u="7FAF" b="F4 C9"/>
+  <a u="7FB0" b="F4 CA"/>
+  <a u="7FB1" b="C1 7E"/>
+  <a u="7FB2" b="F4 CB"/>
+  <a u="7FB3" b="C1 80"/>
+  <a u="7FB4" b="C1 81"/>
+  <a u="7FB5" b="C1 82"/>
+  <a u="7FB6" b="C1 83"/>
+  <a u="7FB7" b="C1 84"/>
+  <a u="7FB8" b="D9 FA"/>
+  <a u="7FB9" b="B8 FE"/>
+  <a u="7FBA" b="C1 85"/>
+  <a u="7FBB" b="C1 86"/>
+  <a u="7FBC" b="E5 F1"/>
+  <a u="7FBD" b="D3 F0"/>
+  <a u="7FBE" b="C1 87"/>
+  <a u="7FBF" b="F4 E0"/>
+  <a u="7FC0" b="C1 88"/>
+  <a u="7FC1" b="CE CC"/>
+  <a u="7FC2" b="C1 89"/>
+  <a u="7FC3" b="C1 8A"/>
+  <a u="7FC4" b="C1 8B"/>
+  <a u="7FC5" b="B3 E1"/>
+  <a u="7FC6" b="C1 8C"/>
+  <a u="7FC7" b="C1 8D"/>
+  <a u="7FC8" b="C1 8E"/>
+  <a u="7FC9" b="C1 8F"/>
+  <a u="7FCA" b="F1 B4"/>
+  <a u="7FCB" b="C1 90"/>
+  <a u="7FCC" b="D2 EE"/>
+  <a u="7FCD" b="C1 91"/>
+  <a u="7FCE" b="F4 E1"/>
+  <a u="7FCF" b="C1 92"/>
+  <a u="7FD0" b="C1 93"/>
+  <a u="7FD1" b="C1 94"/>
+  <a u="7FD2" b="C1 95"/>
+  <a u="7FD3" b="C1 96"/>
+  <a u="7FD4" b="CF E8"/>
+  <a u="7FD5" b="F4 E2"/>
+  <a u="7FD6" b="C1 97"/>
+  <a u="7FD7" b="C1 98"/>
+  <a u="7FD8" b="C7 CC"/>
+  <a u="7FD9" b="C1 99"/>
+  <a u="7FDA" b="C1 9A"/>
+  <a u="7FDB" b="C1 9B"/>
+  <a u="7FDC" b="C1 9C"/>
+  <a u="7FDD" b="C1 9D"/>
+  <a u="7FDE" b="C1 9E"/>
+  <a u="7FDF" b="B5 D4"/>
+  <a u="7FE0" b="B4 E4"/>
+  <a u="7FE1" b="F4 E4"/>
+  <a u="7FE2" b="C1 9F"/>
+  <a u="7FE3" b="C1 A0"/>
+  <a u="7FE4" b="C2 40"/>
+  <a u="7FE5" b="F4 E3"/>
+  <a u="7FE6" b="F4 E5"/>
+  <a u="7FE7" b="C2 41"/>
+  <a u="7FE8" b="C2 42"/>
+  <a u="7FE9" b="F4 E6"/>
+  <a u="7FEA" b="C2 43"/>
+  <a u="7FEB" b="C2 44"/>
+  <a u="7FEC" b="C2 45"/>
+  <a u="7FED" b="C2 46"/>
+  <a u="7FEE" b="F4 E7"/>
+  <a u="7FEF" b="C2 47"/>
+  <a u="7FF0" b="BA B2"/>
+  <a u="7FF1" b="B0 BF"/>
+  <a u="7FF2" b="C2 48"/>
+  <a u="7FF3" b="F4 E8"/>
+  <a u="7FF4" b="C2 49"/>
+  <a u="7FF5" b="C2 4A"/>
+  <a u="7FF6" b="C2 4B"/>
+  <a u="7FF7" b="C2 4C"/>
+  <a u="7FF8" b="C2 4D"/>
+  <a u="7FF9" b="C2 4E"/>
+  <a u="7FFA" b="C2 4F"/>
+  <a u="7FFB" b="B7 AD"/>
+  <a u="7FFC" b="D2 ED"/>
+  <a u="7FFD" b="C2 50"/>
+  <a u="7FFE" b="C2 51"/>
+  <a u="7FFF" b="C2 52"/>
+  <a u="8000" b="D2 AB"/>
+  <a u="8001" b="C0 CF"/>
+  <a u="8002" b="C2 53"/>
+  <a u="8003" b="BF BC"/>
+  <a u="8004" b="EB A3"/>
+  <a u="8005" b="D5 DF"/>
+  <a u="8006" b="EA C8"/>
+  <a u="8007" b="C2 54"/>
+  <a u="8008" b="C2 55"/>
+  <a u="8009" b="C2 56"/>
+  <a u="800A" b="C2 57"/>
+  <a u="800B" b="F1 F3"/>
+  <a u="800C" b="B6 F8"/>
+  <a u="800D" b="CB A3"/>
+  <a u="800E" b="C2 58"/>
+  <a u="800F" b="C2 59"/>
+  <a u="8010" b="C4 CD"/>
+  <a u="8011" b="C2 5A"/>
+  <a u="8012" b="F1 E7"/>
+  <a u="8013" b="C2 5B"/>
+  <a u="8014" b="F1 E8"/>
+  <a u="8015" b="B8 FB"/>
+  <a u="8016" b="F1 E9"/>
+  <a u="8017" b="BA C4"/>
+  <a u="8018" b="D4 C5"/>
+  <a u="8019" b="B0 D2"/>
+  <a u="801A" b="C2 5C"/>
+  <a u="801B" b="C2 5D"/>
+  <a u="801C" b="F1 EA"/>
+  <a u="801D" b="C2 5E"/>
+  <a u="801E" b="C2 5F"/>
+  <a u="801F" b="C2 60"/>
+  <a u="8020" b="F1 EB"/>
+  <a u="8021" b="C2 61"/>
+  <a u="8022" b="F1 EC"/>
+  <a u="8023" b="C2 62"/>
+  <a u="8024" b="C2 63"/>
+  <a u="8025" b="F1 ED"/>
+  <a u="8026" b="F1 EE"/>
+  <a u="8027" b="F1 EF"/>
+  <a u="8028" b="F1 F1"/>
+  <a u="8029" b="F1 F0"/>
+  <a u="802A" b="C5 D5"/>
+  <a u="802B" b="C2 64"/>
+  <a u="802C" b="C2 65"/>
+  <a u="802D" b="C2 66"/>
+  <a u="802E" b="C2 67"/>
+  <a u="802F" b="C2 68"/>
+  <a u="8030" b="C2 69"/>
+  <a u="8031" b="F1 F2"/>
+  <a u="8032" b="C2 6A"/>
+  <a u="8033" b="B6 FA"/>
+  <a u="8034" b="C2 6B"/>
+  <a u="8035" b="F1 F4"/>
+  <a u="8036" b="D2 AE"/>
+  <a u="8037" b="DE C7"/>
+  <a u="8038" b="CB CA"/>
+  <a u="8039" b="C2 6C"/>
+  <a u="803A" b="C2 6D"/>
+  <a u="803B" b="B3 DC"/>
+  <a u="803C" b="C2 6E"/>
+  <a u="803D" b="B5 A2"/>
+  <a u="803E" b="C2 6F"/>
+  <a u="803F" b="B9 A2"/>
+  <a u="8040" b="C2 70"/>
+  <a u="8041" b="C2 71"/>
+  <a u="8042" b="C4 F4"/>
+  <a u="8043" b="F1 F5"/>
+  <a u="8044" b="C2 72"/>
+  <a u="8045" b="C2 73"/>
+  <a u="8046" b="F1 F6"/>
+  <a u="8047" b="C2 74"/>
+  <a u="8048" b="C2 75"/>
+  <a u="8049" b="C2 76"/>
+  <a u="804A" b="C1 C4"/>
+  <a u="804B" b="C1 FB"/>
+  <a u="804C" b="D6 B0"/>
+  <a u="804D" b="F1 F7"/>
+  <a u="804E" b="C2 77"/>
+  <a u="804F" b="C2 78"/>
+  <a u="8050" b="C2 79"/>
+  <a u="8051" b="C2 7A"/>
+  <a u="8052" b="F1 F8"/>
+  <a u="8053" b="C2 7B"/>
+  <a u="8054" b="C1 AA"/>
+  <a u="8055" b="C2 7C"/>
+  <a u="8056" b="C2 7D"/>
+  <a u="8057" b="C2 7E"/>
+  <a u="8058" b="C6 B8"/>
+  <a u="8059" b="C2 80"/>
+  <a u="805A" b="BE DB"/>
+  <a u="805B" b="C2 81"/>
+  <a u="805C" b="C2 82"/>
+  <a u="805D" b="C2 83"/>
+  <a u="805E" b="C2 84"/>
+  <a u="805F" b="C2 85"/>
+  <a u="8060" b="C2 86"/>
+  <a u="8061" b="C2 87"/>
+  <a u="8062" b="C2 88"/>
+  <a u="8063" b="C2 89"/>
+  <a u="8064" b="C2 8A"/>
+  <a u="8065" b="C2 8B"/>
+  <a u="8066" b="C2 8C"/>
+  <a u="8067" b="C2 8D"/>
+  <a u="8068" b="C2 8E"/>
+  <a u="8069" b="F1 F9"/>
+  <a u="806A" b="B4 CF"/>
+  <a u="806B" b="C2 8F"/>
+  <a u="806C" b="C2 90"/>
+  <a u="806D" b="C2 91"/>
+  <a u="806E" b="C2 92"/>
+  <a u="806F" b="C2 93"/>
+  <a u="8070" b="C2 94"/>
+  <a u="8071" b="F1 FA"/>
+  <a u="8072" b="C2 95"/>
+  <a u="8073" b="C2 96"/>
+  <a u="8074" b="C2 97"/>
+  <a u="8075" b="C2 98"/>
+  <a u="8076" b="C2 99"/>
+  <a u="8077" b="C2 9A"/>
+  <a u="8078" b="C2 9B"/>
+  <a u="8079" b="C2 9C"/>
+  <a u="807A" b="C2 9D"/>
+  <a u="807B" b="C2 9E"/>
+  <a u="807C" b="C2 9F"/>
+  <a u="807D" b="C2 A0"/>
+  <a u="807E" b="C3 40"/>
+  <a u="807F" b="ED B2"/>
+  <a u="8080" b="ED B1"/>
+  <a u="8081" b="C3 41"/>
+  <a u="8082" b="C3 42"/>
+  <a u="8083" b="CB E0"/>
+  <a u="8084" b="D2 DE"/>
+  <a u="8085" b="C3 43"/>
+  <a u="8086" b="CB C1"/>
+  <a u="8087" b="D5 D8"/>
+  <a u="8088" b="C3 44"/>
+  <a u="8089" b="C8 E2"/>
+  <a u="808A" b="C3 45"/>
+  <a u="808B" b="C0 DF"/>
+  <a u="808C" b="BC A1"/>
+  <a u="808D" b="C3 46"/>
+  <a u="808E" b="C3 47"/>
+  <a u="808F" b="C3 48"/>
+  <a u="8090" b="C3 49"/>
+  <a u="8091" b="C3 4A"/>
+  <a u="8092" b="C3 4B"/>
+  <a u="8093" b="EB C1"/>
+  <a u="8094" b="C3 4C"/>
+  <a u="8095" b="C3 4D"/>
+  <a u="8096" b="D0 A4"/>
+  <a u="8097" b="C3 4E"/>
+  <a u="8098" b="D6 E2"/>
+  <a u="8099" b="C3 4F"/>
+  <a u="809A" b="B6 C7"/>
+  <a u="809B" b="B8 D8"/>
+  <a u="809C" b="EB C0"/>
+  <a u="809D" b="B8 CE"/>
+  <a u="809E" b="C3 50"/>
+  <a u="809F" b="EB BF"/>
+  <a u="80A0" b="B3 A6"/>
+  <a u="80A1" b="B9 C9"/>
+  <a u="80A2" b="D6 AB"/>
+  <a u="80A3" b="C3 51"/>
+  <a u="80A4" b="B7 F4"/>
+  <a u="80A5" b="B7 CA"/>
+  <a u="80A6" b="C3 52"/>
+  <a u="80A7" b="C3 53"/>
+  <a u="80A8" b="C3 54"/>
+  <a u="80A9" b="BC E7"/>
+  <a u="80AA" b="B7 BE"/>
+  <a u="80AB" b="EB C6"/>
+  <a u="80AC" b="C3 55"/>
+  <a u="80AD" b="EB C7"/>
+  <a u="80AE" b="B0 B9"/>
+  <a u="80AF" b="BF CF"/>
+  <a u="80B0" b="C3 56"/>
+  <a u="80B1" b="EB C5"/>
+  <a u="80B2" b="D3 FD"/>
+  <a u="80B3" b="C3 57"/>
+  <a u="80B4" b="EB C8"/>
+  <a u="80B5" b="C3 58"/>
+  <a u="80B6" b="C3 59"/>
+  <a u="80B7" b="EB C9"/>
+  <a u="80B8" b="C3 5A"/>
+  <a u="80B9" b="C3 5B"/>
+  <a u="80BA" b="B7 CE"/>
+  <a u="80BB" b="C3 5C"/>
+  <a u="80BC" b="EB C2"/>
+  <a u="80BD" b="EB C4"/>
+  <a u="80BE" b="C9 F6"/>
+  <a u="80BF" b="D6 D7"/>
+  <a u="80C0" b="D5 CD"/>
+  <a u="80C1" b="D0 B2"/>
+  <a u="80C2" b="EB CF"/>
+  <a u="80C3" b="CE B8"/>
+  <a u="80C4" b="EB D0"/>
+  <a u="80C5" b="C3 5D"/>
+  <a u="80C6" b="B5 A8"/>
+  <a u="80C7" b="C3 5E"/>
+  <a u="80C8" b="C3 5F"/>
+  <a u="80C9" b="C3 60"/>
+  <a u="80CA" b="C3 61"/>
+  <a u="80CB" b="C3 62"/>
+  <a u="80CC" b="B1 B3"/>
+  <a u="80CD" b="EB D2"/>
+  <a u="80CE" b="CC A5"/>
+  <a u="80CF" b="C3 63"/>
+  <a u="80D0" b="C3 64"/>
+  <a u="80D1" b="C3 65"/>
+  <a u="80D2" b="C3 66"/>
+  <a u="80D3" b="C3 67"/>
+  <a u="80D4" b="C3 68"/>
+  <a u="80D5" b="C3 69"/>
+  <a u="80D6" b="C5 D6"/>
+  <a u="80D7" b="EB D3"/>
+  <a u="80D8" b="C3 6A"/>
+  <a u="80D9" b="EB D1"/>
+  <a u="80DA" b="C5 DF"/>
+  <a u="80DB" b="EB CE"/>
+  <a u="80DC" b="CA A4"/>
+  <a u="80DD" b="EB D5"/>
+  <a u="80DE" b="B0 FB"/>
+  <a u="80DF" b="C3 6B"/>
+  <a u="80E0" b="C3 6C"/>
+  <a u="80E1" b="BA FA"/>
+  <a u="80E2" b="C3 6D"/>
+  <a u="80E3" b="C3 6E"/>
+  <a u="80E4" b="D8 B7"/>
+  <a u="80E5" b="F1 E3"/>
+  <a u="80E6" b="C3 6F"/>
+  <a u="80E7" b="EB CA"/>
+  <a u="80E8" b="EB CB"/>
+  <a u="80E9" b="EB CC"/>
+  <a u="80EA" b="EB CD"/>
+  <a u="80EB" b="EB D6"/>
+  <a u="80EC" b="E6 C0"/>
+  <a u="80ED" b="EB D9"/>
+  <a u="80EE" b="C3 70"/>
+  <a u="80EF" b="BF E8"/>
+  <a u="80F0" b="D2 C8"/>
+  <a u="80F1" b="EB D7"/>
+  <a u="80F2" b="EB DC"/>
+  <a u="80F3" b="B8 EC"/>
+  <a u="80F4" b="EB D8"/>
+  <a u="80F5" b="C3 71"/>
+  <a u="80F6" b="BD BA"/>
+  <a u="80F7" b="C3 72"/>
+  <a u="80F8" b="D0 D8"/>
+  <a u="80F9" b="C3 73"/>
+  <a u="80FA" b="B0 B7"/>
+  <a u="80FB" b="C3 74"/>
+  <a u="80FC" b="EB DD"/>
+  <a u="80FD" b="C4 DC"/>
+  <a u="80FE" b="C3 75"/>
+  <a u="80FF" b="C3 76"/>
+  <a u="8100" b="C3 77"/>
+  <a u="8101" b="C3 78"/>
+  <a u="8102" b="D6 AC"/>
+  <a u="8103" b="C3 79"/>
+  <a u="8104" b="C3 7A"/>
+  <a u="8105" b="C3 7B"/>
+  <a u="8106" b="B4 E0"/>
+  <a u="8107" b="C3 7C"/>
+  <a u="8108" b="C3 7D"/>
+  <a u="8109" b="C2 F6"/>
+  <a u="810A" b="BC B9"/>
+  <a u="810B" b="C3 7E"/>
+  <a u="810C" b="C3 80"/>
+  <a u="810D" b="EB DA"/>
+  <a u="810E" b="EB DB"/>
+  <a u="810F" b="D4 E0"/>
+  <a u="8110" b="C6 EA"/>
+  <a u="8111" b="C4 D4"/>
+  <a u="8112" b="EB DF"/>
+  <a u="8113" b="C5 A7"/>
+  <a u="8114" b="D9 F5"/>
+  <a u="8115" b="C3 81"/>
+  <a u="8116" b="B2 B1"/>
+  <a u="8117" b="C3 82"/>
+  <a u="8118" b="EB E4"/>
+  <a u="8119" b="C3 83"/>
+  <a u="811A" b="BD C5"/>
+  <a u="811B" b="C3 84"/>
+  <a u="811C" b="C3 85"/>
+  <a u="811D" b="C3 86"/>
+  <a u="811E" b="EB E2"/>
+  <a u="811F" b="C3 87"/>
+  <a u="8120" b="C3 88"/>
+  <a u="8121" b="C3 89"/>
+  <a u="8122" b="C3 8A"/>
+  <a u="8123" b="C3 8B"/>
+  <a u="8124" b="C3 8C"/>
+  <a u="8125" b="C3 8D"/>
+  <a u="8126" b="C3 8E"/>
+  <a u="8127" b="C3 8F"/>
+  <a u="8128" b="C3 90"/>
+  <a u="8129" b="C3 91"/>
+  <a u="812A" b="C3 92"/>
+  <a u="812B" b="C3 93"/>
+  <a u="812C" b="EB E3"/>
+  <a u="812D" b="C3 94"/>
+  <a u="812E" b="C3 95"/>
+  <a u="812F" b="B8 AC"/>
+  <a u="8130" b="C3 96"/>
+  <a u="8131" b="CD D1"/>
+  <a u="8132" b="EB E5"/>
+  <a u="8133" b="C3 97"/>
+  <a u="8134" b="C3 98"/>
+  <a u="8135" b="C3 99"/>
+  <a u="8136" b="EB E1"/>
+  <a u="8137" b="C3 9A"/>
+  <a u="8138" b="C1 B3"/>
+  <a u="8139" b="C3 9B"/>
+  <a u="813A" b="C3 9C"/>
+  <a u="813B" b="C3 9D"/>
+  <a u="813C" b="C3 9E"/>
+  <a u="813D" b="C3 9F"/>
+  <a u="813E" b="C6 A2"/>
+  <a u="813F" b="C3 A0"/>
+  <a u="8140" b="C4 40"/>
+  <a u="8141" b="C4 41"/>
+  <a u="8142" b="C4 42"/>
+  <a u="8143" b="C4 43"/>
+  <a u="8144" b="C4 44"/>
+  <a u="8145" b="C4 45"/>
+  <a u="8146" b="CC F3"/>
+  <a u="8147" b="C4 46"/>
+  <a u="8148" b="EB E6"/>
+  <a u="8149" b="C4 47"/>
+  <a u="814A" b="C0 B0"/>
+  <a u="814B" b="D2 B8"/>
+  <a u="814C" b="EB E7"/>
+  <a u="814D" b="C4 48"/>
+  <a u="814E" b="C4 49"/>
+  <a u="814F" b="C4 4A"/>
+  <a u="8150" b="B8 AF"/>
+  <a u="8151" b="B8 AD"/>
+  <a u="8152" b="C4 4B"/>
+  <a u="8153" b="EB E8"/>
+  <a u="8154" b="C7 BB"/>
+  <a u="8155" b="CD F3"/>
+  <a u="8156" b="C4 4C"/>
+  <a u="8157" b="C4 4D"/>
+  <a u="8158" b="C4 4E"/>
+  <a u="8159" b="EB EA"/>
+  <a u="815A" b="EB EB"/>
+  <a u="815B" b="C4 4F"/>
+  <a u="815C" b="C4 50"/>
+  <a u="815D" b="C4 51"/>
+  <a u="815E" b="C4 52"/>
+  <a u="815F" b="C4 53"/>
+  <a u="8160" b="EB ED"/>
+  <a u="8161" b="C4 54"/>
+  <a u="8162" b="C4 55"/>
+  <a u="8163" b="C4 56"/>
+  <a u="8164" b="C4 57"/>
+  <a u="8165" b="D0 C8"/>
+  <a u="8166" b="C4 58"/>
+  <a u="8167" b="EB F2"/>
+  <a u="8168" b="C4 59"/>
+  <a u="8169" b="EB EE"/>
+  <a u="816A" b="C4 5A"/>
+  <a u="816B" b="C4 5B"/>
+  <a u="816C" b="C4 5C"/>
+  <a u="816D" b="EB F1"/>
+  <a u="816E" b="C8 F9"/>
+  <a u="816F" b="C4 5D"/>
+  <a u="8170" b="D1 FC"/>
+  <a u="8171" b="EB EC"/>
+  <a u="8172" b="C4 5E"/>
+  <a u="8173" b="C4 5F"/>
+  <a u="8174" b="EB E9"/>
+  <a u="8175" b="C4 60"/>
+  <a u="8176" b="C4 61"/>
+  <a u="8177" b="C4 62"/>
+  <a u="8178" b="C4 63"/>
+  <a u="8179" b="B8 B9"/>
+  <a u="817A" b="CF D9"/>
+  <a u="817B" b="C4 E5"/>
+  <a u="817C" b="EB EF"/>
+  <a u="817D" b="EB F0"/>
+  <a u="817E" b="CC DA"/>
+  <a u="817F" b="CD C8"/>
+  <a u="8180" b="B0 F2"/>
+  <a u="8181" b="C4 64"/>
+  <a u="8182" b="EB F6"/>
+  <a u="8183" b="C4 65"/>
+  <a u="8184" b="C4 66"/>
+  <a u="8185" b="C4 67"/>
+  <a u="8186" b="C4 68"/>
+  <a u="8187" b="C4 69"/>
+  <a u="8188" b="EB F5"/>
+  <a u="8189" b="C4 6A"/>
+  <a u="818A" b="B2 B2"/>
+  <a u="818B" b="C4 6B"/>
+  <a u="818C" b="C4 6C"/>
+  <a u="818D" b="C4 6D"/>
+  <a u="818E" b="C4 6E"/>
+  <a u="818F" b="B8 E0"/>
+  <a u="8190" b="C4 6F"/>
+  <a u="8191" b="EB F7"/>
+  <a u="8192" b="C4 70"/>
+  <a u="8193" b="C4 71"/>
+  <a u="8194" b="C4 72"/>
+  <a u="8195" b="C4 73"/>
+  <a u="8196" b="C4 74"/>
+  <a u="8197" b="C4 75"/>
+  <a u="8198" b="B1 EC"/>
+  <a u="8199" b="C4 76"/>
+  <a u="819A" b="C4 77"/>
+  <a u="819B" b="CC C5"/>
+  <a u="819C" b="C4 A4"/>
+  <a u="819D" b="CF A5"/>
+  <a u="819E" b="C4 78"/>
+  <a u="819F" b="C4 79"/>
+  <a u="81A0" b="C4 7A"/>
+  <a u="81A1" b="C4 7B"/>
+  <a u="81A2" b="C4 7C"/>
+  <a u="81A3" b="EB F9"/>
+  <a u="81A4" b="C4 7D"/>
+  <a u="81A5" b="C4 7E"/>
+  <a u="81A6" b="EC A2"/>
+  <a u="81A7" b="C4 80"/>
+  <a u="81A8" b="C5 F2"/>
+  <a u="81A9" b="C4 81"/>
+  <a u="81AA" b="EB FA"/>
+  <a u="81AB" b="C4 82"/>
+  <a u="81AC" b="C4 83"/>
+  <a u="81AD" b="C4 84"/>
+  <a u="81AE" b="C4 85"/>
+  <a u="81AF" b="C4 86"/>
+  <a u="81B0" b="C4 87"/>
+  <a u="81B1" b="C4 88"/>
+  <a u="81B2" b="C4 89"/>
+  <a u="81B3" b="C9 C5"/>
+  <a u="81B4" b="C4 8A"/>
+  <a u="81B5" b="C4 8B"/>
+  <a u="81B6" b="C4 8C"/>
+  <a u="81B7" b="C4 8D"/>
+  <a u="81B8" b="C4 8E"/>
+  <a u="81B9" b="C4 8F"/>
+  <a u="81BA" b="E2 DF"/>
+  <a u="81BB" b="EB FE"/>
+  <a u="81BC" b="C4 90"/>
+  <a u="81BD" b="C4 91"/>
+  <a u="81BE" b="C4 92"/>
+  <a u="81BF" b="C4 93"/>
+  <a u="81C0" b="CD CE"/>
+  <a u="81C1" b="EC A1"/>
+  <a u="81C2" b="B1 DB"/>
+  <a u="81C3" b="D3 B7"/>
+  <a u="81C4" b="C4 94"/>
+  <a u="81C5" b="C4 95"/>
+  <a u="81C6" b="D2 DC"/>
+  <a u="81C7" b="C4 96"/>
+  <a u="81C8" b="C4 97"/>
+  <a u="81C9" b="C4 98"/>
+  <a u="81CA" b="EB FD"/>
+  <a u="81CB" b="C4 99"/>
+  <a u="81CC" b="EB FB"/>
+  <a u="81CD" b="C4 9A"/>
+  <a u="81CE" b="C4 9B"/>
+  <a u="81CF" b="C4 9C"/>
+  <a u="81D0" b="C4 9D"/>
+  <a u="81D1" b="C4 9E"/>
+  <a u="81D2" b="C4 9F"/>
+  <a u="81D3" b="C4 A0"/>
+  <a u="81D4" b="C5 40"/>
+  <a u="81D5" b="C5 41"/>
+  <a u="81D6" b="C5 42"/>
+  <a u="81D7" b="C5 43"/>
+  <a u="81D8" b="C5 44"/>
+  <a u="81D9" b="C5 45"/>
+  <a u="81DA" b="C5 46"/>
+  <a u="81DB" b="C5 47"/>
+  <a u="81DC" b="C5 48"/>
+  <a u="81DD" b="C5 49"/>
+  <a u="81DE" b="C5 4A"/>
+  <a u="81DF" b="C5 4B"/>
+  <a u="81E0" b="C5 4C"/>
+  <a u="81E1" b="C5 4D"/>
+  <a u="81E2" b="C5 4E"/>
+  <a u="81E3" b="B3 BC"/>
+  <a u="81E4" b="C5 4F"/>
+  <a u="81E5" b="C5 50"/>
+  <a u="81E6" b="C5 51"/>
+  <a u="81E7" b="EA B0"/>
+  <a u="81E8" b="C5 52"/>
+  <a u="81E9" b="C5 53"/>
+  <a u="81EA" b="D7 D4"/>
+  <a u="81EB" b="C5 54"/>
+  <a u="81EC" b="F4 AB"/>
+  <a u="81ED" b="B3 F4"/>
+  <a u="81EE" b="C5 55"/>
+  <a u="81EF" b="C5 56"/>
+  <a u="81F0" b="C5 57"/>
+  <a u="81F1" b="C5 58"/>
+  <a u="81F2" b="C5 59"/>
+  <a u="81F3" b="D6 C1"/>
+  <a u="81F4" b="D6 C2"/>
+  <a u="81F5" b="C5 5A"/>
+  <a u="81F6" b="C5 5B"/>
+  <a u="81F7" b="C5 5C"/>
+  <a u="81F8" b="C5 5D"/>
+  <a u="81F9" b="C5 5E"/>
+  <a u="81FA" b="C5 5F"/>
+  <a u="81FB" b="D5 E9"/>
+  <a u="81FC" b="BE CA"/>
+  <a u="81FD" b="C5 60"/>
+  <a u="81FE" b="F4 A7"/>
+  <a u="81FF" b="C5 61"/>
+  <a u="8200" b="D2 A8"/>
+  <a u="8201" b="F4 A8"/>
+  <a u="8202" b="F4 A9"/>
+  <a u="8203" b="C5 62"/>
+  <a u="8204" b="F4 AA"/>
+  <a u="8205" b="BE CB"/>
+  <a u="8206" b="D3 DF"/>
+  <a u="8207" b="C5 63"/>
+  <a u="8208" b="C5 64"/>
+  <a u="8209" b="C5 65"/>
+  <a u="820A" b="C5 66"/>
+  <a u="820B" b="C5 67"/>
+  <a u="820C" b="C9 E0"/>
+  <a u="820D" b="C9 E1"/>
+  <a u="820E" b="C5 68"/>
+  <a u="820F" b="C5 69"/>
+  <a u="8210" b="F3 C2"/>
+  <a u="8211" b="C5 6A"/>
+  <a u="8212" b="CA E6"/>
+  <a u="8213" b="C5 6B"/>
+  <a u="8214" b="CC F2"/>
+  <a u="8215" b="C5 6C"/>
+  <a u="8216" b="C5 6D"/>
+  <a u="8217" b="C5 6E"/>
+  <a u="8218" b="C5 6F"/>
+  <a u="8219" b="C5 70"/>
+  <a u="821A" b="C5 71"/>
+  <a u="821B" b="E2 B6"/>
+  <a u="821C" b="CB B4"/>
+  <a u="821D" b="C5 72"/>
+  <a u="821E" b="CE E8"/>
+  <a u="821F" b="D6 DB"/>
+  <a u="8220" b="C5 73"/>
+  <a u="8221" b="F4 AD"/>
+  <a u="8222" b="F4 AE"/>
+  <a u="8223" b="F4 AF"/>
+  <a u="8224" b="C5 74"/>
+  <a u="8225" b="C5 75"/>
+  <a u="8226" b="C5 76"/>
+  <a u="8227" b="C5 77"/>
+  <a u="8228" b="F4 B2"/>
+  <a u="8229" b="C5 78"/>
+  <a u="822A" b="BA BD"/>
+  <a u="822B" b="F4 B3"/>
+  <a u="822C" b="B0 E3"/>
+  <a u="822D" b="F4 B0"/>
+  <a u="822E" b="C5 79"/>
+  <a u="822F" b="F4 B1"/>
+  <a u="8230" b="BD A2"/>
+  <a u="8231" b="B2 D5"/>
+  <a u="8232" b="C5 7A"/>
+  <a u="8233" b="F4 B6"/>
+  <a u="8234" b="F4 B7"/>
+  <a u="8235" b="B6 E6"/>
+  <a u="8236" b="B2 B0"/>
+  <a u="8237" b="CF CF"/>
+  <a u="8238" b="F4 B4"/>
+  <a u="8239" b="B4 AC"/>
+  <a u="823A" b="C5 7B"/>
+  <a u="823B" b="F4 B5"/>
+  <a u="823C" b="C5 7C"/>
+  <a u="823D" b="C5 7D"/>
+  <a u="823E" b="F4 B8"/>
+  <a u="823F" b="C5 7E"/>
+  <a u="8240" b="C5 80"/>
+  <a u="8241" b="C5 81"/>
+  <a u="8242" b="C5 82"/>
+  <a u="8243" b="C5 83"/>
+  <a u="8244" b="F4 B9"/>
+  <a u="8245" b="C5 84"/>
+  <a u="8246" b="C5 85"/>
+  <a u="8247" b="CD A7"/>
+  <a u="8248" b="C5 86"/>
+  <a u="8249" b="F4 BA"/>
+  <a u="824A" b="C5 87"/>
+  <a u="824B" b="F4 BB"/>
+  <a u="824C" b="C5 88"/>
+  <a u="824D" b="C5 89"/>
+  <a u="824E" b="C5 8A"/>
+  <a u="824F" b="F4 BC"/>
+  <a u="8250" b="C5 8B"/>
+  <a u="8251" b="C5 8C"/>
+  <a u="8252" b="C5 8D"/>
+  <a u="8253" b="C5 8E"/>
+  <a u="8254" b="C5 8F"/>
+  <a u="8255" b="C5 90"/>
+  <a u="8256" b="C5 91"/>
+  <a u="8257" b="C5 92"/>
+  <a u="8258" b="CB D2"/>
+  <a u="8259" b="C5 93"/>
+  <a u="825A" b="F4 BD"/>
+  <a u="825B" b="C5 94"/>
+  <a u="825C" b="C5 95"/>
+  <a u="825D" b="C5 96"/>
+  <a u="825E" b="C5 97"/>
+  <a u="825F" b="F4 BE"/>
+  <a u="8260" b="C5 98"/>
+  <a u="8261" b="C5 99"/>
+  <a u="8262" b="C5 9A"/>
+  <a u="8263" b="C5 9B"/>
+  <a u="8264" b="C5 9C"/>
+  <a u="8265" b="C5 9D"/>
+  <a u="8266" b="C5 9E"/>
+  <a u="8267" b="C5 9F"/>
+  <a u="8268" b="F4 BF"/>
+  <a u="8269" b="C5 A0"/>
+  <a u="826A" b="C6 40"/>
+  <a u="826B" b="C6 41"/>
+  <a u="826C" b="C6 42"/>
+  <a u="826D" b="C6 43"/>
+  <a u="826E" b="F4 DE"/>
+  <a u="826F" b="C1 BC"/>
+  <a u="8270" b="BC E8"/>
+  <a u="8271" b="C6 44"/>
+  <a u="8272" b="C9 AB"/>
+  <a u="8273" b="D1 DE"/>
+  <a u="8274" b="E5 F5"/>
+  <a u="8275" b="C6 45"/>
+  <a u="8276" b="C6 46"/>
+  <a u="8277" b="C6 47"/>
+  <a u="8278" b="C6 48"/>
+  <a u="8279" b="DC B3"/>
+  <a u="827A" b="D2 D5"/>
+  <a u="827B" b="C6 49"/>
+  <a u="827C" b="C6 4A"/>
+  <a u="827D" b="DC B4"/>
+  <a u="827E" b="B0 AC"/>
+  <a u="827F" b="DC B5"/>
+  <a u="8280" b="C6 4B"/>
+  <a u="8281" b="C6 4C"/>
+  <a u="8282" b="BD DA"/>
+  <a u="8283" b="C6 4D"/>
+  <a u="8284" b="DC B9"/>
+  <a u="8285" b="C6 4E"/>
+  <a u="8286" b="C6 4F"/>
+  <a u="8287" b="C6 50"/>
+  <a u="8288" b="D8 C2"/>
+  <a u="8289" b="C6 51"/>
+  <a u="828A" b="DC B7"/>
+  <a u="828B" b="D3 F3"/>
+  <a u="828C" b="C6 52"/>
+  <a u="828D" b="C9 D6"/>
+  <a u="828E" b="DC BA"/>
+  <a u="828F" b="DC B6"/>
+  <a u="8290" b="C6 53"/>
+  <a u="8291" b="DC BB"/>
+  <a u="8292" b="C3 A2"/>
+  <a u="8293" b="C6 54"/>
+  <a u="8294" b="C6 55"/>
+  <a u="8295" b="C6 56"/>
+  <a u="8296" b="C6 57"/>
+  <a u="8297" b="DC BC"/>
+  <a u="8298" b="DC C5"/>
+  <a u="8299" b="DC BD"/>
+  <a u="829A" b="C6 58"/>
+  <a u="829B" b="C6 59"/>
+  <a u="829C" b="CE DF"/>
+  <a u="829D" b="D6 A5"/>
+  <a u="829E" b="C6 5A"/>
+  <a u="829F" b="DC CF"/>
+  <a u="82A0" b="C6 5B"/>
+  <a u="82A1" b="DC CD"/>
+  <a u="82A2" b="C6 5C"/>
+  <a u="82A3" b="C6 5D"/>
+  <a u="82A4" b="DC D2"/>
+  <a u="82A5" b="BD E6"/>
+  <a u="82A6" b="C2 AB"/>
+  <a u="82A7" b="C6 5E"/>
+  <a u="82A8" b="DC B8"/>
+  <a u="82A9" b="DC CB"/>
+  <a u="82AA" b="DC CE"/>
+  <a u="82AB" b="DC BE"/>
+  <a u="82AC" b="B7 D2"/>
+  <a u="82AD" b="B0 C5"/>
+  <a u="82AE" b="DC C7"/>
+  <a u="82AF" b="D0 BE"/>
+  <a u="82B0" b="DC C1"/>
+  <a u="82B1" b="BB A8"/>
+  <a u="82B2" b="C6 5F"/>
+  <a u="82B3" b="B7 BC"/>
+  <a u="82B4" b="DC CC"/>
+  <a u="82B5" b="C6 60"/>
+  <a u="82B6" b="C6 61"/>
+  <a u="82B7" b="DC C6"/>
+  <a u="82B8" b="DC BF"/>
+  <a u="82B9" b="C7 DB"/>
+  <a u="82BA" b="C6 62"/>
+  <a u="82BB" b="C6 63"/>
+  <a u="82BC" b="C6 64"/>
+  <a u="82BD" b="D1 BF"/>
+  <a u="82BE" b="DC C0"/>
+  <a u="82BF" b="C6 65"/>
+  <a u="82C0" b="C6 66"/>
+  <a u="82C1" b="DC CA"/>
+  <a u="82C2" b="C6 67"/>
+  <a u="82C3" b="C6 68"/>
+  <a u="82C4" b="DC D0"/>
+  <a u="82C5" b="C6 69"/>
+  <a u="82C6" b="C6 6A"/>
+  <a u="82C7" b="CE AD"/>
+  <a u="82C8" b="DC C2"/>
+  <a u="82C9" b="C6 6B"/>
+  <a u="82CA" b="DC C3"/>
+  <a u="82CB" b="DC C8"/>
+  <a u="82CC" b="DC C9"/>
+  <a u="82CD" b="B2 D4"/>
+  <a u="82CE" b="DC D1"/>
+  <a u="82CF" b="CB D5"/>
+  <a u="82D0" b="C6 6C"/>
+  <a u="82D1" b="D4 B7"/>
+  <a u="82D2" b="DC DB"/>
+  <a u="82D3" b="DC DF"/>
+  <a u="82D4" b="CC A6"/>
+  <a u="82D5" b="DC E6"/>
+  <a u="82D6" b="C6 6D"/>
+  <a u="82D7" b="C3 E7"/>
+  <a u="82D8" b="DC DC"/>
+  <a u="82D9" b="C6 6E"/>
+  <a u="82DA" b="C6 6F"/>
+  <a u="82DB" b="BF C1"/>
+  <a u="82DC" b="DC D9"/>
+  <a u="82DD" b="C6 70"/>
+  <a u="82DE" b="B0 FA"/>
+  <a u="82DF" b="B9 B6"/>
+  <a u="82E0" b="DC E5"/>
+  <a u="82E1" b="DC D3"/>
+  <a u="82E2" b="C6 71"/>
+  <a u="82E3" b="DC C4"/>
+  <a u="82E4" b="DC D6"/>
+  <a u="82E5" b="C8 F4"/>
+  <a u="82E6" b="BF E0"/>
+  <a u="82E7" b="C6 72"/>
+  <a u="82E8" b="C6 73"/>
+  <a u="82E9" b="C6 74"/>
+  <a u="82EA" b="C6 75"/>
+  <a u="82EB" b="C9 BB"/>
+  <a u="82EC" b="C6 76"/>
+  <a u="82ED" b="C6 77"/>
+  <a u="82EE" b="C6 78"/>
+  <a u="82EF" b="B1 BD"/>
+  <a u="82F0" b="C6 79"/>
+  <a u="82F1" b="D3 A2"/>
+  <a u="82F2" b="C6 7A"/>
+  <a u="82F3" b="C6 7B"/>
+  <a u="82F4" b="DC DA"/>
+  <a u="82F5" b="C6 7C"/>
+  <a u="82F6" b="C6 7D"/>
+  <a u="82F7" b="DC D5"/>
+  <a u="82F8" b="C6 7E"/>
+  <a u="82F9" b="C6 BB"/>
+  <a u="82FA" b="C6 80"/>
+  <a u="82FB" b="DC DE"/>
+  <a u="82FC" b="C6 81"/>
+  <a u="82FD" b="C6 82"/>
+  <a u="82FE" b="C6 83"/>
+  <a u="82FF" b="C6 84"/>
+  <a u="8300" b="C6 85"/>
+  <a u="8301" b="D7 C2"/>
+  <a u="8302" b="C3 AF"/>
+  <a u="8303" b="B7 B6"/>
+  <a u="8304" b="C7 D1"/>
+  <a u="8305" b="C3 A9"/>
+  <a u="8306" b="DC E2"/>
+  <a u="8307" b="DC D8"/>
+  <a u="8308" b="DC EB"/>
+  <a u="8309" b="DC D4"/>
+  <a u="830A" b="C6 86"/>
+  <a u="830B" b="C6 87"/>
+  <a u="830C" b="DC DD"/>
+  <a u="830D" b="C6 88"/>
+  <a u="830E" b="BE A5"/>
+  <a u="830F" b="DC D7"/>
+  <a u="8310" b="C6 89"/>
+  <a u="8311" b="DC E0"/>
+  <a u="8312" b="C6 8A"/>
+  <a u="8313" b="C6 8B"/>
+  <a u="8314" b="DC E3"/>
+  <a u="8315" b="DC E4"/>
+  <a u="8316" b="C6 8C"/>
+  <a u="8317" b="DC F8"/>
+  <a u="8318" b="C6 8D"/>
+  <a u="8319" b="C6 8E"/>
+  <a u="831A" b="DC E1"/>
+  <a u="831B" b="DD A2"/>
+  <a u="831C" b="DC E7"/>
+  <a u="831D" b="C6 8F"/>
+  <a u="831E" b="C6 90"/>
+  <a u="831F" b="C6 91"/>
+  <a u="8320" b="C6 92"/>
+  <a u="8321" b="C6 93"/>
+  <a u="8322" b="C6 94"/>
+  <a u="8323" b="C6 95"/>
+  <a u="8324" b="C6 96"/>
+  <a u="8325" b="C6 97"/>
+  <a u="8326" b="C6 98"/>
+  <a u="8327" b="BC EB"/>
+  <a u="8328" b="B4 C4"/>
+  <a u="8329" b="C6 99"/>
+  <a u="832A" b="C6 9A"/>
+  <a u="832B" b="C3 A3"/>
+  <a u="832C" b="B2 E7"/>
+  <a u="832D" b="DC FA"/>
+  <a u="832E" b="C6 9B"/>
+  <a u="832F" b="DC F2"/>
+  <a u="8330" b="C6 9C"/>
+  <a u="8331" b="DC EF"/>
+  <a u="8332" b="C6 9D"/>
+  <a u="8333" b="DC FC"/>
+  <a u="8334" b="DC EE"/>
+  <a u="8335" b="D2 F0"/>
+  <a u="8336" b="B2 E8"/>
+  <a u="8337" b="C6 9E"/>
+  <a u="8338" b="C8 D7"/>
+  <a u="8339" b="C8 E3"/>
+  <a u="833A" b="DC FB"/>
+  <a u="833B" b="C6 9F"/>
+  <a u="833C" b="DC ED"/>
+  <a u="833D" b="C6 A0"/>
+  <a u="833E" b="C7 40"/>
+  <a u="833F" b="C7 41"/>
+  <a u="8340" b="DC F7"/>
+  <a u="8341" b="C7 42"/>
+  <a u="8342" b="C7 43"/>
+  <a u="8343" b="DC F5"/>
+  <a u="8344" b="C7 44"/>
+  <a u="8345" b="C7 45"/>
+  <a u="8346" b="BE A3"/>
+  <a u="8347" b="DC F4"/>
+  <a u="8348" b="C7 46"/>
+  <a u="8349" b="B2 DD"/>
+  <a u="834A" b="C7 47"/>
+  <a u="834B" b="C7 48"/>
+  <a u="834C" b="C7 49"/>
+  <a u="834D" b="C7 4A"/>
+  <a u="834E" b="C7 4B"/>
+  <a u="834F" b="DC F3"/>
+  <a u="8350" b="BC F6"/>
+  <a u="8351" b="DC E8"/>
+  <a u="8352" b="BB C4"/>
+  <a u="8353" b="C7 4C"/>
+  <a u="8354" b="C0 F3"/>
+  <a u="8355" b="C7 4D"/>
+  <a u="8356" b="C7 4E"/>
+  <a u="8357" b="C7 4F"/>
+  <a u="8358" b="C7 50"/>
+  <a u="8359" b="C7 51"/>
+  <a u="835A" b="BC D4"/>
+  <a u="835B" b="DC E9"/>
+  <a u="835C" b="DC EA"/>
+  <a u="835D" b="C7 52"/>
+  <a u="835E" b="DC F1"/>
+  <a u="835F" b="DC F6"/>
+  <a u="8360" b="DC F9"/>
+  <a u="8361" b="B5 B4"/>
+  <a u="8362" b="C7 53"/>
+  <a u="8363" b="C8 D9"/>
+  <a u="8364" b="BB E7"/>
+  <a u="8365" b="DC FE"/>
+  <a u="8366" b="DC FD"/>
+  <a u="8367" b="D3 AB"/>
+  <a u="8368" b="DD A1"/>
+  <a u="8369" b="DD A3"/>
+  <a u="836A" b="DD A5"/>
+  <a u="836B" b="D2 F1"/>
+  <a u="836C" b="DD A4"/>
+  <a u="836D" b="DD A6"/>
+  <a u="836E" b="DD A7"/>
+  <a u="836F" b="D2 A9"/>
+  <a u="8370" b="C7 54"/>
+  <a u="8371" b="C7 55"/>
+  <a u="8372" b="C7 56"/>
+  <a u="8373" b="C7 57"/>
+  <a u="8374" b="C7 58"/>
+  <a u="8375" b="C7 59"/>
+  <a u="8376" b="C7 5A"/>
+  <a u="8377" b="BA C9"/>
+  <a u="8378" b="DD A9"/>
+  <a u="8379" b="C7 5B"/>
+  <a u="837A" b="C7 5C"/>
+  <a u="837B" b="DD B6"/>
+  <a u="837C" b="DD B1"/>
+  <a u="837D" b="DD B4"/>
+  <a u="837E" b="C7 5D"/>
+  <a u="837F" b="C7 5E"/>
+  <a u="8380" b="C7 5F"/>
+  <a u="8381" b="C7 60"/>
+  <a u="8382" b="C7 61"/>
+  <a u="8383" b="C7 62"/>
+  <a u="8384" b="C7 63"/>
+  <a u="8385" b="DD B0"/>
+  <a u="8386" b="C6 CE"/>
+  <a u="8387" b="C7 64"/>
+  <a u="8388" b="C7 65"/>
+  <a u="8389" b="C0 F2"/>
+  <a u="838A" b="C7 66"/>
+  <a u="838B" b="C7 67"/>
+  <a u="838C" b="C7 68"/>
+  <a u="838D" b="C7 69"/>
+  <a u="838E" b="C9 AF"/>
+  <a u="838F" b="C7 6A"/>
+  <a u="8390" b="C7 6B"/>
+  <a u="8391" b="C7 6C"/>
+  <a u="8392" b="DC EC"/>
+  <a u="8393" b="DD AE"/>
+  <a u="8394" b="C7 6D"/>
+  <a u="8395" b="C7 6E"/>
+  <a u="8396" b="C7 6F"/>
+  <a u="8397" b="C7 70"/>
+  <a u="8398" b="DD B7"/>
+  <a u="8399" b="C7 71"/>
+  <a u="839A" b="C7 72"/>
+  <a u="839B" b="DC F0"/>
+  <a u="839C" b="DD AF"/>
+  <a u="839D" b="C7 73"/>
+  <a u="839E" b="DD B8"/>
+  <a u="839F" b="C7 74"/>
+  <a u="83A0" b="DD AC"/>
+  <a u="83A1" b="C7 75"/>
+  <a u="83A2" b="C7 76"/>
+  <a u="83A3" b="C7 77"/>
+  <a u="83A4" b="C7 78"/>
+  <a u="83A5" b="C7 79"/>
+  <a u="83A6" b="C7 7A"/>
+  <a u="83A7" b="C7 7B"/>
+  <a u="83A8" b="DD B9"/>
+  <a u="83A9" b="DD B3"/>
+  <a u="83AA" b="DD AD"/>
+  <a u="83AB" b="C4 AA"/>
+  <a u="83AC" b="C7 7C"/>
+  <a u="83AD" b="C7 7D"/>
+  <a u="83AE" b="C7 7E"/>
+  <a u="83AF" b="C7 80"/>
+  <a u="83B0" b="DD A8"/>
+  <a u="83B1" b="C0 B3"/>
+  <a u="83B2" b="C1 AB"/>
+  <a u="83B3" b="DD AA"/>
+  <a u="83B4" b="DD AB"/>
+  <a u="83B5" b="C7 81"/>
+  <a u="83B6" b="DD B2"/>
+  <a u="83B7" b="BB F1"/>
+  <a u="83B8" b="DD B5"/>
+  <a u="83B9" b="D3 A8"/>
+  <a u="83BA" b="DD BA"/>
+  <a u="83BB" b="C7 82"/>
+  <a u="83BC" b="DD BB"/>
+  <a u="83BD" b="C3 A7"/>
+  <a u="83BE" b="C7 83"/>
+  <a u="83BF" b="C7 84"/>
+  <a u="83C0" b="DD D2"/>
+  <a u="83C1" b="DD BC"/>
+  <a u="83C2" b="C7 85"/>
+  <a u="83C3" b="C7 86"/>
+  <a u="83C4" b="C7 87"/>
+  <a u="83C5" b="DD D1"/>
+  <a u="83C6" b="C7 88"/>
+  <a u="83C7" b="B9 BD"/>
+  <a u="83C8" b="C7 89"/>
+  <a u="83C9" b="C7 8A"/>
+  <a u="83CA" b="BE D5"/>
+  <a u="83CB" b="C7 8B"/>
+  <a u="83CC" b="BE FA"/>
+  <a u="83CD" b="C7 8C"/>
+  <a u="83CE" b="C7 8D"/>
+  <a u="83CF" b="BA CA"/>
+  <a u="83D0" b="C7 8E"/>
+  <a u="83D1" b="C7 8F"/>
+  <a u="83D2" b="C7 90"/>
+  <a u="83D3" b="C7 91"/>
+  <a u="83D4" b="DD CA"/>
+  <a u="83D5" b="C7 92"/>
+  <a u="83D6" b="DD C5"/>
+  <a u="83D7" b="C7 93"/>
+  <a u="83D8" b="DD BF"/>
+  <a u="83D9" b="C7 94"/>
+  <a u="83DA" b="C7 95"/>
+  <a u="83DB" b="C7 96"/>
+  <a u="83DC" b="B2 CB"/>
+  <a u="83DD" b="DD C3"/>
+  <a u="83DE" b="C7 97"/>
+  <a u="83DF" b="DD CB"/>
+  <a u="83E0" b="B2 A4"/>
+  <a u="83E1" b="DD D5"/>
+  <a u="83E2" b="C7 98"/>
+  <a u="83E3" b="C7 99"/>
+  <a u="83E4" b="C7 9A"/>
+  <a u="83E5" b="DD BE"/>
+  <a u="83E6" b="C7 9B"/>
+  <a u="83E7" b="C7 9C"/>
+  <a u="83E8" b="C7 9D"/>
+  <a u="83E9" b="C6 D0"/>
+  <a u="83EA" b="DD D0"/>
+  <a u="83EB" b="C7 9E"/>
+  <a u="83EC" b="C7 9F"/>
+  <a u="83ED" b="C7 A0"/>
+  <a u="83EE" b="C8 40"/>
+  <a u="83EF" b="C8 41"/>
+  <a u="83F0" b="DD D4"/>
+  <a u="83F1" b="C1 E2"/>
+  <a u="83F2" b="B7 C6"/>
+  <a u="83F3" b="C8 42"/>
+  <a u="83F4" b="C8 43"/>
+  <a u="83F5" b="C8 44"/>
+  <a u="83F6" b="C8 45"/>
+  <a u="83F7" b="C8 46"/>
+  <a u="83F8" b="DD CE"/>
+  <a u="83F9" b="DD CF"/>
+  <a u="83FA" b="C8 47"/>
+  <a u="83FB" b="C8 48"/>
+  <a u="83FC" b="C8 49"/>
+  <a u="83FD" b="DD C4"/>
+  <a u="83FE" b="C8 4A"/>
+  <a u="83FF" b="C8 4B"/>
+  <a u="8400" b="C8 4C"/>
+  <a u="8401" b="DD BD"/>
+  <a u="8402" b="C8 4D"/>
+  <a u="8403" b="DD CD"/>
+  <a u="8404" b="CC D1"/>
+  <a u="8405" b="C8 4E"/>
+  <a u="8406" b="DD C9"/>
+  <a u="8407" b="C8 4F"/>
+  <a u="8408" b="C8 50"/>
+  <a u="8409" b="C8 51"/>
+  <a u="840A" b="C8 52"/>
+  <a u="840B" b="DD C2"/>
+  <a u="840C" b="C3 C8"/>
+  <a u="840D" b="C6 BC"/>
+  <a u="840E" b="CE AE"/>
+  <a u="840F" b="DD CC"/>
+  <a u="8410" b="C8 53"/>
+  <a u="8411" b="DD C8"/>
+  <a u="8412" b="C8 54"/>
+  <a u="8413" b="C8 55"/>
+  <a u="8414" b="C8 56"/>
+  <a u="8415" b="C8 57"/>
+  <a u="8416" b="C8 58"/>
+  <a u="8417" b="C8 59"/>
+  <a u="8418" b="DD C1"/>
+  <a u="8419" b="C8 5A"/>
+  <a u="841A" b="C8 5B"/>
+  <a u="841B" b="C8 5C"/>
+  <a u="841C" b="DD C6"/>
+  <a u="841D" b="C2 DC"/>
+  <a u="841E" b="C8 5D"/>
+  <a u="841F" b="C8 5E"/>
+  <a u="8420" b="C8 5F"/>
+  <a u="8421" b="C8 60"/>
+  <a u="8422" b="C8 61"/>
+  <a u="8423" b="C8 62"/>
+  <a u="8424" b="D3 A9"/>
+  <a u="8425" b="D3 AA"/>
+  <a u="8426" b="DD D3"/>
+  <a u="8427" b="CF F4"/>
+  <a u="8428" b="C8 F8"/>
+  <a u="8429" b="C8 63"/>
+  <a u="842A" b="C8 64"/>
+  <a u="842B" b="C8 65"/>
+  <a u="842C" b="C8 66"/>
+  <a u="842D" b="C8 67"/>
+  <a u="842E" b="C8 68"/>
+  <a u="842F" b="C8 69"/>
+  <a u="8430" b="C8 6A"/>
+  <a u="8431" b="DD E6"/>
+  <a u="8432" b="C8 6B"/>
+  <a u="8433" b="C8 6C"/>
+  <a u="8434" b="C8 6D"/>
+  <a u="8435" b="C8 6E"/>
+  <a u="8436" b="C8 6F"/>
+  <a u="8437" b="C8 70"/>
+  <a u="8438" b="DD C7"/>
+  <a u="8439" b="C8 71"/>
+  <a u="843A" b="C8 72"/>
+  <a u="843B" b="C8 73"/>
+  <a u="843C" b="DD E0"/>
+  <a u="843D" b="C2 E4"/>
+  <a u="843E" b="C8 74"/>
+  <a u="843F" b="C8 75"/>
+  <a u="8440" b="C8 76"/>
+  <a u="8441" b="C8 77"/>
+  <a u="8442" b="C8 78"/>
+  <a u="8443" b="C8 79"/>
+  <a u="8444" b="C8 7A"/>
+  <a u="8445" b="C8 7B"/>
+  <a u="8446" b="DD E1"/>
+  <a u="8447" b="C8 7C"/>
+  <a u="8448" b="C8 7D"/>
+  <a u="8449" b="C8 7E"/>
+  <a u="844A" b="C8 80"/>
+  <a u="844B" b="C8 81"/>
+  <a u="844C" b="C8 82"/>
+  <a u="844D" b="C8 83"/>
+  <a u="844E" b="C8 84"/>
+  <a u="844F" b="C8 85"/>
+  <a u="8450" b="C8 86"/>
+  <a u="8451" b="DD D7"/>
+  <a u="8452" b="C8 87"/>
+  <a u="8453" b="C8 88"/>
+  <a u="8454" b="C8 89"/>
+  <a u="8455" b="C8 8A"/>
+  <a u="8456" b="C8 8B"/>
+  <a u="8457" b="D6 F8"/>
+  <a u="8458" b="C8 8C"/>
+  <a u="8459" b="DD D9"/>
+  <a u="845A" b="DD D8"/>
+  <a u="845B" b="B8 F0"/>
+  <a u="845C" b="DD D6"/>
+  <a u="845D" b="C8 8D"/>
+  <a u="845E" b="C8 8E"/>
+  <a u="845F" b="C8 8F"/>
+  <a u="8460" b="C8 90"/>
+  <a u="8461" b="C6 CF"/>
+  <a u="8462" b="C8 91"/>
+  <a u="8463" b="B6 AD"/>
+  <a u="8464" b="C8 92"/>
+  <a u="8465" b="C8 93"/>
+  <a u="8466" b="C8 94"/>
+  <a u="8467" b="C8 95"/>
+  <a u="8468" b="C8 96"/>
+  <a u="8469" b="DD E2"/>
+  <a u="846A" b="C8 97"/>
+  <a u="846B" b="BA F9"/>
+  <a u="846C" b="D4 E1"/>
+  <a u="846D" b="DD E7"/>
+  <a u="846E" b="C8 98"/>
+  <a u="846F" b="C8 99"/>
+  <a u="8470" b="C8 9A"/>
+  <a u="8471" b="B4 D0"/>
+  <a u="8472" b="C8 9B"/>
+  <a u="8473" b="DD DA"/>
+  <a u="8474" b="C8 9C"/>
+  <a u="8475" b="BF FB"/>
+  <a u="8476" b="DD E3"/>
+  <a u="8477" b="C8 9D"/>
+  <a u="8478" b="DD DF"/>
+  <a u="8479" b="C8 9E"/>
+  <a u="847A" b="DD DD"/>
+  <a u="847B" b="C8 9F"/>
+  <a u="847C" b="C8 A0"/>
+  <a u="847D" b="C9 40"/>
+  <a u="847E" b="C9 41"/>
+  <a u="847F" b="C9 42"/>
+  <a u="8480" b="C9 43"/>
+  <a u="8481" b="C9 44"/>
+  <a u="8482" b="B5 D9"/>
+  <a u="8483" b="C9 45"/>
+  <a u="8484" b="C9 46"/>
+  <a u="8485" b="C9 47"/>
+  <a u="8486" b="C9 48"/>
+  <a u="8487" b="DD DB"/>
+  <a u="8488" b="DD DC"/>
+  <a u="8489" b="DD DE"/>
+  <a u="848A" b="C9 49"/>
+  <a u="848B" b="BD AF"/>
+  <a u="848C" b="DD E4"/>
+  <a u="848D" b="C9 4A"/>
+  <a u="848E" b="DD E5"/>
+  <a u="848F" b="C9 4B"/>
+  <a u="8490" b="C9 4C"/>
+  <a u="8491" b="C9 4D"/>
+  <a u="8492" b="C9 4E"/>
+  <a u="8493" b="C9 4F"/>
+  <a u="8494" b="C9 50"/>
+  <a u="8495" b="C9 51"/>
+  <a u="8496" b="C9 52"/>
+  <a u="8497" b="DD F5"/>
+  <a u="8498" b="C9 53"/>
+  <a u="8499" b="C3 C9"/>
+  <a u="849A" b="C9 54"/>
+  <a u="849B" b="C9 55"/>
+  <a u="849C" b="CB E2"/>
+  <a u="849D" b="C9 56"/>
+  <a u="849E" b="C9 57"/>
+  <a u="849F" b="C9 58"/>
+  <a u="84A0" b="C9 59"/>
+  <a u="84A1" b="DD F2"/>
+  <a u="84A2" b="C9 5A"/>
+  <a u="84A3" b="C9 5B"/>
+  <a u="84A4" b="C9 5C"/>
+  <a u="84A5" b="C9 5D"/>
+  <a u="84A6" b="C9 5E"/>
+  <a u="84A7" b="C9 5F"/>
+  <a u="84A8" b="C9 60"/>
+  <a u="84A9" b="C9 61"/>
+  <a u="84AA" b="C9 62"/>
+  <a u="84AB" b="C9 63"/>
+  <a u="84AC" b="C9 64"/>
+  <a u="84AD" b="C9 65"/>
+  <a u="84AE" b="C9 66"/>
+  <a u="84AF" b="D8 E1"/>
+  <a u="84B0" b="C9 67"/>
+  <a u="84B1" b="C9 68"/>
+  <a u="84B2" b="C6 D1"/>
+  <a u="84B3" b="C9 69"/>
+  <a u="84B4" b="DD F4"/>
+  <a u="84B5" b="C9 6A"/>
+  <a u="84B6" b="C9 6B"/>
+  <a u="84B7" b="C9 6C"/>
+  <a u="84B8" b="D5 F4"/>
+  <a u="84B9" b="DD F3"/>
+  <a u="84BA" b="DD F0"/>
+  <a u="84BB" b="C9 6D"/>
+  <a u="84BC" b="C9 6E"/>
+  <a u="84BD" b="DD EC"/>
+  <a u="84BE" b="C9 6F"/>
+  <a u="84BF" b="DD EF"/>
+  <a u="84C0" b="C9 70"/>
+  <a u="84C1" b="DD E8"/>
+  <a u="84C2" b="C9 71"/>
+  <a u="84C3" b="C9 72"/>
+  <a u="84C4" b="D0 EE"/>
+  <a u="84C5" b="C9 73"/>
+  <a u="84C6" b="C9 74"/>
+  <a u="84C7" b="C9 75"/>
+  <a u="84C8" b="C9 76"/>
+  <a u="84C9" b="C8 D8"/>
+  <a u="84CA" b="DD EE"/>
+  <a u="84CB" b="C9 77"/>
+  <a u="84CC" b="C9 78"/>
+  <a u="84CD" b="DD E9"/>
+  <a u="84CE" b="C9 79"/>
+  <a u="84CF" b="C9 7A"/>
+  <a u="84D0" b="DD EA"/>
+  <a u="84D1" b="CB F2"/>
+  <a u="84D2" b="C9 7B"/>
+  <a u="84D3" b="DD ED"/>
+  <a u="84D4" b="C9 7C"/>
+  <a u="84D5" b="C9 7D"/>
+  <a u="84D6" b="B1 CD"/>
+  <a u="84D7" b="C9 7E"/>
+  <a u="84D8" b="C9 80"/>
+  <a u="84D9" b="C9 81"/>
+  <a u="84DA" b="C9 82"/>
+  <a u="84DB" b="C9 83"/>
+  <a u="84DC" b="C9 84"/>
+  <a u="84DD" b="C0 B6"/>
+  <a u="84DE" b="C9 85"/>
+  <a u="84DF" b="BC BB"/>
+  <a u="84E0" b="DD F1"/>
+  <a u="84E1" b="C9 86"/>
+  <a u="84E2" b="C9 87"/>
+  <a u="84E3" b="DD F7"/>
+  <a u="84E4" b="C9 88"/>
+  <a u="84E5" b="DD F6"/>
+  <a u="84E6" b="DD EB"/>
+  <a u="84E7" b="C9 89"/>
+  <a u="84E8" b="C9 8A"/>
+  <a u="84E9" b="C9 8B"/>
+  <a u="84EA" b="C9 8C"/>
+  <a u="84EB" b="C9 8D"/>
+  <a u="84EC" b="C5 EE"/>
+  <a u="84ED" b="C9 8E"/>
+  <a u="84EE" b="C9 8F"/>
+  <a u="84EF" b="C9 90"/>
+  <a u="84F0" b="DD FB"/>
+  <a u="84F1" b="C9 91"/>
+  <a u="84F2" b="C9 92"/>
+  <a u="84F3" b="C9 93"/>
+  <a u="84F4" b="C9 94"/>
+  <a u="84F5" b="C9 95"/>
+  <a u="84F6" b="C9 96"/>
+  <a u="84F7" b="C9 97"/>
+  <a u="84F8" b="C9 98"/>
+  <a u="84F9" b="C9 99"/>
+  <a u="84FA" b="C9 9A"/>
+  <a u="84FB" b="C9 9B"/>
+  <a u="84FC" b="DE A4"/>
+  <a u="84FD" b="C9 9C"/>
+  <a u="84FE" b="C9 9D"/>
+  <a u="84FF" b="DE A3"/>
+  <a u="8500" b="C9 9E"/>
+  <a u="8501" b="C9 9F"/>
+  <a u="8502" b="C9 A0"/>
+  <a u="8503" b="CA 40"/>
+  <a u="8504" b="CA 41"/>
+  <a u="8505" b="CA 42"/>
+  <a u="8506" b="CA 43"/>
+  <a u="8507" b="CA 44"/>
+  <a u="8508" b="CA 45"/>
+  <a u="8509" b="CA 46"/>
+  <a u="850A" b="CA 47"/>
+  <a u="850B" b="CA 48"/>
+  <a u="850C" b="DD F8"/>
+  <a u="850D" b="CA 49"/>
+  <a u="850E" b="CA 4A"/>
+  <a u="850F" b="CA 4B"/>
+  <a u="8510" b="CA 4C"/>
+  <a u="8511" b="C3 EF"/>
+  <a u="8512" b="CA 4D"/>
+  <a u="8513" b="C2 FB"/>
+  <a u="8514" b="CA 4E"/>
+  <a u="8515" b="CA 4F"/>
+  <a u="8516" b="CA 50"/>
+  <a u="8517" b="D5 E1"/>
+  <a u="8518" b="CA 51"/>
+  <a u="8519" b="CA 52"/>
+  <a u="851A" b="CE B5"/>
+  <a u="851B" b="CA 53"/>
+  <a u="851C" b="CA 54"/>
+  <a u="851D" b="CA 55"/>
+  <a u="851E" b="CA 56"/>
+  <a u="851F" b="DD FD"/>
+  <a u="8520" b="CA 57"/>
+  <a u="8521" b="B2 CC"/>
+  <a u="8522" b="CA 58"/>
+  <a u="8523" b="CA 59"/>
+  <a u="8524" b="CA 5A"/>
+  <a u="8525" b="CA 5B"/>
+  <a u="8526" b="CA 5C"/>
+  <a u="8527" b="CA 5D"/>
+  <a u="8528" b="CA 5E"/>
+  <a u="8529" b="CA 5F"/>
+  <a u="852A" b="CA 60"/>
+  <a u="852B" b="C4 E8"/>
+  <a u="852C" b="CA DF"/>
+  <a u="852D" b="CA 61"/>
+  <a u="852E" b="CA 62"/>
+  <a u="852F" b="CA 63"/>
+  <a u="8530" b="CA 64"/>
+  <a u="8531" b="CA 65"/>
+  <a u="8532" b="CA 66"/>
+  <a u="8533" b="CA 67"/>
+  <a u="8534" b="CA 68"/>
+  <a u="8535" b="CA 69"/>
+  <a u="8536" b="CA 6A"/>
+  <a u="8537" b="C7 BE"/>
+  <a u="8538" b="DD FA"/>
+  <a u="8539" b="DD FC"/>
+  <a u="853A" b="DD FE"/>
+  <a u="853B" b="DE A2"/>
+  <a u="853C" b="B0 AA"/>
+  <a u="853D" b="B1 CE"/>
+  <a u="853E" b="CA 6B"/>
+  <a u="853F" b="CA 6C"/>
+  <a u="8540" b="CA 6D"/>
+  <a u="8541" b="CA 6E"/>
+  <a u="8542" b="CA 6F"/>
+  <a u="8543" b="DE AC"/>
+  <a u="8544" b="CA 70"/>
+  <a u="8545" b="CA 71"/>
+  <a u="8546" b="CA 72"/>
+  <a u="8547" b="CA 73"/>
+  <a u="8548" b="DE A6"/>
+  <a u="8549" b="BD B6"/>
+  <a u="854A" b="C8 EF"/>
+  <a u="854B" b="CA 74"/>
+  <a u="854C" b="CA 75"/>
+  <a u="854D" b="CA 76"/>
+  <a u="854E" b="CA 77"/>
+  <a u="854F" b="CA 78"/>
+  <a u="8550" b="CA 79"/>
+  <a u="8551" b="CA 7A"/>
+  <a u="8552" b="CA 7B"/>
+  <a u="8553" b="CA 7C"/>
+  <a u="8554" b="CA 7D"/>
+  <a u="8555" b="CA 7E"/>
+  <a u="8556" b="DE A1"/>
+  <a u="8557" b="CA 80"/>
+  <a u="8558" b="CA 81"/>
+  <a u="8559" b="DE A5"/>
+  <a u="855A" b="CA 82"/>
+  <a u="855B" b="CA 83"/>
+  <a u="855C" b="CA 84"/>
+  <a u="855D" b="CA 85"/>
+  <a u="855E" b="DE A9"/>
+  <a u="855F" b="CA 86"/>
+  <a u="8560" b="CA 87"/>
+  <a u="8561" b="CA 88"/>
+  <a u="8562" b="CA 89"/>
+  <a u="8563" b="CA 8A"/>
+  <a u="8564" b="DE A8"/>
+  <a u="8565" b="CA 8B"/>
+  <a u="8566" b="CA 8C"/>
+  <a u="8567" b="CA 8D"/>
+  <a u="8568" b="DE A7"/>
+  <a u="8569" b="CA 8E"/>
+  <a u="856A" b="CA 8F"/>
+  <a u="856B" b="CA 90"/>
+  <a u="856C" b="CA 91"/>
+  <a u="856D" b="CA 92"/>
+  <a u="856E" b="CA 93"/>
+  <a u="856F" b="CA 94"/>
+  <a u="8570" b="CA 95"/>
+  <a u="8571" b="CA 96"/>
+  <a u="8572" b="DE AD"/>
+  <a u="8573" b="CA 97"/>
+  <a u="8574" b="D4 CC"/>
+  <a u="8575" b="CA 98"/>
+  <a u="8576" b="CA 99"/>
+  <a u="8577" b="CA 9A"/>
+  <a u="8578" b="CA 9B"/>
+  <a u="8579" b="DE B3"/>
+  <a u="857A" b="DE AA"/>
+  <a u="857B" b="DE AE"/>
+  <a u="857C" b="CA 9C"/>
+  <a u="857D" b="CA 9D"/>
+  <a u="857E" b="C0 D9"/>
+  <a u="857F" b="CA 9E"/>
+  <a u="8580" b="CA 9F"/>
+  <a u="8581" b="CA A0"/>
+  <a u="8582" b="CB 40"/>
+  <a u="8583" b="CB 41"/>
+  <a u="8584" b="B1 A1"/>
+  <a u="8585" b="DE B6"/>
+  <a u="8586" b="CB 42"/>
+  <a u="8587" b="DE B1"/>
+  <a u="8588" b="CB 43"/>
+  <a u="8589" b="CB 44"/>
+  <a u="858A" b="CB 45"/>
+  <a u="858B" b="CB 46"/>
+  <a u="858C" b="CB 47"/>
+  <a u="858D" b="CB 48"/>
+  <a u="858E" b="CB 49"/>
+  <a u="858F" b="DE B2"/>
+  <a u="8590" b="CB 4A"/>
+  <a u="8591" b="CB 4B"/>
+  <a u="8592" b="CB 4C"/>
+  <a u="8593" b="CB 4D"/>
+  <a u="8594" b="CB 4E"/>
+  <a u="8595" b="CB 4F"/>
+  <a u="8596" b="CB 50"/>
+  <a u="8597" b="CB 51"/>
+  <a u="8598" b="CB 52"/>
+  <a u="8599" b="CB 53"/>
+  <a u="859A" b="CB 54"/>
+  <a u="859B" b="D1 A6"/>
+  <a u="859C" b="DE B5"/>
+  <a u="859D" b="CB 55"/>
+  <a u="859E" b="CB 56"/>
+  <a u="859F" b="CB 57"/>
+  <a u="85A0" b="CB 58"/>
+  <a u="85A1" b="CB 59"/>
+  <a u="85A2" b="CB 5A"/>
+  <a u="85A3" b="CB 5B"/>
+  <a u="85A4" b="DE AF"/>
+  <a u="85A5" b="CB 5C"/>
+  <a u="85A6" b="CB 5D"/>
+  <a u="85A7" b="CB 5E"/>
+  <a u="85A8" b="DE B0"/>
+  <a u="85A9" b="CB 5F"/>
+  <a u="85AA" b="D0 BD"/>
+  <a u="85AB" b="CB 60"/>
+  <a u="85AC" b="CB 61"/>
+  <a u="85AD" b="CB 62"/>
+  <a u="85AE" b="DE B4"/>
+  <a u="85AF" b="CA ED"/>
+  <a u="85B0" b="DE B9"/>
+  <a u="85B1" b="CB 63"/>
+  <a u="85B2" b="CB 64"/>
+  <a u="85B3" b="CB 65"/>
+  <a u="85B4" b="CB 66"/>
+  <a u="85B5" b="CB 67"/>
+  <a u="85B6" b="CB 68"/>
+  <a u="85B7" b="DE B8"/>
+  <a u="85B8" b="CB 69"/>
+  <a u="85B9" b="DE B7"/>
+  <a u="85BA" b="CB 6A"/>
+  <a u="85BB" b="CB 6B"/>
+  <a u="85BC" b="CB 6C"/>
+  <a u="85BD" b="CB 6D"/>
+  <a u="85BE" b="CB 6E"/>
+  <a u="85BF" b="CB 6F"/>
+  <a u="85C0" b="CB 70"/>
+  <a u="85C1" b="DE BB"/>
+  <a u="85C2" b="CB 71"/>
+  <a u="85C3" b="CB 72"/>
+  <a u="85C4" b="CB 73"/>
+  <a u="85C5" b="CB 74"/>
+  <a u="85C6" b="CB 75"/>
+  <a u="85C7" b="CB 76"/>
+  <a u="85C8" b="CB 77"/>
+  <a u="85C9" b="BD E5"/>
+  <a u="85CA" b="CB 78"/>
+  <a u="85CB" b="CB 79"/>
+  <a u="85CC" b="CB 7A"/>
+  <a u="85CD" b="CB 7B"/>
+  <a u="85CE" b="CB 7C"/>
+  <a u="85CF" b="B2 D8"/>
+  <a u="85D0" b="C3 EA"/>
+  <a u="85D1" b="CB 7D"/>
+  <a u="85D2" b="CB 7E"/>
+  <a u="85D3" b="DE BA"/>
+  <a u="85D4" b="CB 80"/>
+  <a u="85D5" b="C5 BA"/>
+  <a u="85D6" b="CB 81"/>
+  <a u="85D7" b="CB 82"/>
+  <a u="85D8" b="CB 83"/>
+  <a u="85D9" b="CB 84"/>
+  <a u="85DA" b="CB 85"/>
+  <a u="85DB" b="CB 86"/>
+  <a u="85DC" b="DE BC"/>
+  <a u="85DD" b="CB 87"/>
+  <a u="85DE" b="CB 88"/>
+  <a u="85DF" b="CB 89"/>
+  <a u="85E0" b="CB 8A"/>
+  <a u="85E1" b="CB 8B"/>
+  <a u="85E2" b="CB 8C"/>
+  <a u="85E3" b="CB 8D"/>
+  <a u="85E4" b="CC D9"/>
+  <a u="85E5" b="CB 8E"/>
+  <a u="85E6" b="CB 8F"/>
+  <a u="85E7" b="CB 90"/>
+  <a u="85E8" b="CB 91"/>
+  <a u="85E9" b="B7 AA"/>
+  <a u="85EA" b="CB 92"/>
+  <a u="85EB" b="CB 93"/>
+  <a u="85EC" b="CB 94"/>
+  <a u="85ED" b="CB 95"/>
+  <a u="85EE" b="CB 96"/>
+  <a u="85EF" b="CB 97"/>
+  <a u="85F0" b="CB 98"/>
+  <a u="85F1" b="CB 99"/>
+  <a u="85F2" b="CB 9A"/>
+  <a u="85F3" b="CB 9B"/>
+  <a u="85F4" b="CB 9C"/>
+  <a u="85F5" b="CB 9D"/>
+  <a u="85F6" b="CB 9E"/>
+  <a u="85F7" b="CB 9F"/>
+  <a u="85F8" b="CB A0"/>
+  <a u="85F9" b="CC 40"/>
+  <a u="85FA" b="CC 41"/>
+  <a u="85FB" b="D4 E5"/>
+  <a u="85FC" b="CC 42"/>
+  <a u="85FD" b="CC 43"/>
+  <a u="85FE" b="CC 44"/>
+  <a u="85FF" b="DE BD"/>
+  <a u="8600" b="CC 45"/>
+  <a u="8601" b="CC 46"/>
+  <a u="8602" b="CC 47"/>
+  <a u="8603" b="CC 48"/>
+  <a u="8604" b="CC 49"/>
+  <a u="8605" b="DE BF"/>
+  <a u="8606" b="CC 4A"/>
+  <a u="8607" b="CC 4B"/>
+  <a u="8608" b="CC 4C"/>
+  <a u="8609" b="CC 4D"/>
+  <a u="860A" b="CC 4E"/>
+  <a u="860B" b="CC 4F"/>
+  <a u="860C" b="CC 50"/>
+  <a u="860D" b="CC 51"/>
+  <a u="860E" b="CC 52"/>
+  <a u="860F" b="CC 53"/>
+  <a u="8610" b="CC 54"/>
+  <a u="8611" b="C4 A2"/>
+  <a u="8612" b="CC 55"/>
+  <a u="8613" b="CC 56"/>
+  <a u="8614" b="CC 57"/>
+  <a u="8615" b="CC 58"/>
+  <a u="8616" b="DE C1"/>
+  <a u="8617" b="CC 59"/>
+  <a u="8618" b="CC 5A"/>
+  <a u="8619" b="CC 5B"/>
+  <a u="861A" b="CC 5C"/>
+  <a u="861B" b="CC 5D"/>
+  <a u="861C" b="CC 5E"/>
+  <a u="861D" b="CC 5F"/>
+  <a u="861E" b="CC 60"/>
+  <a u="861F" b="CC 61"/>
+  <a u="8620" b="CC 62"/>
+  <a u="8621" b="CC 63"/>
+  <a u="8622" b="CC 64"/>
+  <a u="8623" b="CC 65"/>
+  <a u="8624" b="CC 66"/>
+  <a u="8625" b="CC 67"/>
+  <a u="8626" b="CC 68"/>
+  <a u="8627" b="DE BE"/>
+  <a u="8628" b="CC 69"/>
+  <a u="8629" b="DE C0"/>
+  <a u="862A" b="CC 6A"/>
+  <a u="862B" b="CC 6B"/>
+  <a u="862C" b="CC 6C"/>
+  <a u="862D" b="CC 6D"/>
+  <a u="862E" b="CC 6E"/>
+  <a u="862F" b="CC 6F"/>
+  <a u="8630" b="CC 70"/>
+  <a u="8631" b="CC 71"/>
+  <a u="8632" b="CC 72"/>
+  <a u="8633" b="CC 73"/>
+  <a u="8634" b="CC 74"/>
+  <a u="8635" b="CC 75"/>
+  <a u="8636" b="CC 76"/>
+  <a u="8637" b="CC 77"/>
+  <a u="8638" b="D5 BA"/>
+  <a u="8639" b="CC 78"/>
+  <a u="863A" b="CC 79"/>
+  <a u="863B" b="CC 7A"/>
+  <a u="863C" b="DE C2"/>
+  <a u="863D" b="CC 7B"/>
+  <a u="863E" b="CC 7C"/>
+  <a u="863F" b="CC 7D"/>
+  <a u="8640" b="CC 7E"/>
+  <a u="8641" b="CC 80"/>
+  <a u="8642" b="CC 81"/>
+  <a u="8643" b="CC 82"/>
+  <a u="8644" b="CC 83"/>
+  <a u="8645" b="CC 84"/>
+  <a u="8646" b="CC 85"/>
+  <a u="8647" b="CC 86"/>
+  <a u="8648" b="CC 87"/>
+  <a u="8649" b="CC 88"/>
+  <a u="864A" b="CC 89"/>
+  <a u="864B" b="CC 8A"/>
+  <a u="864C" b="CC 8B"/>
+  <a u="864D" b="F2 AE"/>
+  <a u="864E" b="BB A2"/>
+  <a u="864F" b="C2 B2"/>
+  <a u="8650" b="C5 B0"/>
+  <a u="8651" b="C2 C7"/>
+  <a u="8652" b="CC 8C"/>
+  <a u="8653" b="CC 8D"/>
+  <a u="8654" b="F2 AF"/>
+  <a u="8655" b="CC 8E"/>
+  <a u="8656" b="CC 8F"/>
+  <a u="8657" b="CC 90"/>
+  <a u="8658" b="CC 91"/>
+  <a u="8659" b="CC 92"/>
+  <a u="865A" b="D0 E9"/>
+  <a u="865B" b="CC 93"/>
+  <a u="865C" b="CC 94"/>
+  <a u="865D" b="CC 95"/>
+  <a u="865E" b="D3 DD"/>
+  <a u="865F" b="CC 96"/>
+  <a u="8660" b="CC 97"/>
+  <a u="8661" b="CC 98"/>
+  <a u="8662" b="EB BD"/>
+  <a u="8663" b="CC 99"/>
+  <a u="8664" b="CC 9A"/>
+  <a u="8665" b="CC 9B"/>
+  <a u="8666" b="CC 9C"/>
+  <a u="8667" b="CC 9D"/>
+  <a u="8668" b="CC 9E"/>
+  <a u="8669" b="CC 9F"/>
+  <a u="866A" b="CC A0"/>
+  <a u="866B" b="B3 E6"/>
+  <a u="866C" b="F2 B0"/>
+  <a u="866D" b="CD 40"/>
+  <a u="866E" b="F2 B1"/>
+  <a u="866F" b="CD 41"/>
+  <a u="8670" b="CD 42"/>
+  <a u="8671" b="CA AD"/>
+  <a u="8672" b="CD 43"/>
+  <a u="8673" b="CD 44"/>
+  <a u="8674" b="CD 45"/>
+  <a u="8675" b="CD 46"/>
+  <a u="8676" b="CD 47"/>
+  <a u="8677" b="CD 48"/>
+  <a u="8678" b="CD 49"/>
+  <a u="8679" b="BA E7"/>
+  <a u="867A" b="F2 B3"/>
+  <a u="867B" b="F2 B5"/>
+  <a u="867C" b="F2 B4"/>
+  <a u="867D" b="CB E4"/>
+  <a u="867E" b="CF BA"/>
+  <a u="867F" b="F2 B2"/>
+  <a u="8680" b="CA B4"/>
+  <a u="8681" b="D2 CF"/>
+  <a u="8682" b="C2 EC"/>
+  <a u="8683" b="CD 4A"/>
+  <a u="8684" b="CD 4B"/>
+  <a u="8685" b="CD 4C"/>
+  <a u="8686" b="CD 4D"/>
+  <a u="8687" b="CD 4E"/>
+  <a u="8688" b="CD 4F"/>
+  <a u="8689" b="CD 50"/>
+  <a u="868A" b="CE C3"/>
+  <a u="868B" b="F2 B8"/>
+  <a u="868C" b="B0 F6"/>
+  <a u="868D" b="F2 B7"/>
+  <a u="868E" b="CD 51"/>
+  <a u="868F" b="CD 52"/>
+  <a u="8690" b="CD 53"/>
+  <a u="8691" b="CD 54"/>
+  <a u="8692" b="CD 55"/>
+  <a u="8693" b="F2 BE"/>
+  <a u="8694" b="CD 56"/>
+  <a u="8695" b="B2 CF"/>
+  <a u="8696" b="CD 57"/>
+  <a u="8697" b="CD 58"/>
+  <a u="8698" b="CD 59"/>
+  <a u="8699" b="CD 5A"/>
+  <a u="869A" b="CD 5B"/>
+  <a u="869B" b="CD 5C"/>
+  <a u="869C" b="D1 C1"/>
+  <a u="869D" b="F2 BA"/>
+  <a u="869E" b="CD 5D"/>
+  <a u="869F" b="CD 5E"/>
+  <a u="86A0" b="CD 5F"/>
+  <a u="86A1" b="CD 60"/>
+  <a u="86A2" b="CD 61"/>
+  <a u="86A3" b="F2 BC"/>
+  <a u="86A4" b="D4 E9"/>
+  <a u="86A5" b="CD 62"/>
+  <a u="86A6" b="CD 63"/>
+  <a u="86A7" b="F2 BB"/>
+  <a u="86A8" b="F2 B6"/>
+  <a u="86A9" b="F2 BF"/>
+  <a u="86AA" b="F2 BD"/>
+  <a u="86AB" b="CD 64"/>
+  <a u="86AC" b="F2 B9"/>
+  <a u="86AD" b="CD 65"/>
+  <a u="86AE" b="CD 66"/>
+  <a u="86AF" b="F2 C7"/>
+  <a u="86B0" b="F2 C4"/>
+  <a u="86B1" b="F2 C6"/>
+  <a u="86B2" b="CD 67"/>
+  <a u="86B3" b="CD 68"/>
+  <a u="86B4" b="F2 CA"/>
+  <a u="86B5" b="F2 C2"/>
+  <a u="86B6" b="F2 C0"/>
+  <a u="86B7" b="CD 69"/>
+  <a u="86B8" b="CD 6A"/>
+  <a u="86B9" b="CD 6B"/>
+  <a u="86BA" b="F2 C5"/>
+  <a u="86BB" b="CD 6C"/>
+  <a u="86BC" b="CD 6D"/>
+  <a u="86BD" b="CD 6E"/>
+  <a u="86BE" b="CD 6F"/>
+  <a u="86BF" b="CD 70"/>
+  <a u="86C0" b="D6 FB"/>
+  <a u="86C1" b="CD 71"/>
+  <a u="86C2" b="CD 72"/>
+  <a u="86C3" b="CD 73"/>
+  <a u="86C4" b="F2 C1"/>
+  <a u="86C5" b="CD 74"/>
+  <a u="86C6" b="C7 F9"/>
+  <a u="86C7" b="C9 DF"/>
+  <a u="86C8" b="CD 75"/>
+  <a u="86C9" b="F2 C8"/>
+  <a u="86CA" b="B9 C6"/>
+  <a u="86CB" b="B5 B0"/>
+  <a u="86CC" b="CD 76"/>
+  <a u="86CD" b="CD 77"/>
+  <a u="86CE" b="F2 C3"/>
+  <a u="86CF" b="F2 C9"/>
+  <a u="86D0" b="F2 D0"/>
+  <a u="86D1" b="F2 D6"/>
+  <a u="86D2" b="CD 78"/>
+  <a u="86D3" b="CD 79"/>
+  <a u="86D4" b="BB D7"/>
+  <a u="86D5" b="CD 7A"/>
+  <a u="86D6" b="CD 7B"/>
+  <a u="86D7" b="CD 7C"/>
+  <a u="86D8" b="F2 D5"/>
+  <a u="86D9" b="CD DC"/>
+  <a u="86DA" b="CD 7D"/>
+  <a u="86DB" b="D6 EB"/>
+  <a u="86DC" b="CD 7E"/>
+  <a u="86DD" b="CD 80"/>
+  <a u="86DE" b="F2 D2"/>
+  <a u="86DF" b="F2 D4"/>
+  <a u="86E0" b="CD 81"/>
+  <a u="86E1" b="CD 82"/>
+  <a u="86E2" b="CD 83"/>
+  <a u="86E3" b="CD 84"/>
+  <a u="86E4" b="B8 F2"/>
+  <a u="86E5" b="CD 85"/>
+  <a u="86E6" b="CD 86"/>
+  <a u="86E7" b="CD 87"/>
+  <a u="86E8" b="CD 88"/>
+  <a u="86E9" b="F2 CB"/>
+  <a u="86EA" b="CD 89"/>
+  <a u="86EB" b="CD 8A"/>
+  <a u="86EC" b="CD 8B"/>
+  <a u="86ED" b="F2 CE"/>
+  <a u="86EE" b="C2 F9"/>
+  <a u="86EF" b="CD 8C"/>
+  <a u="86F0" b="D5 DD"/>
+  <a u="86F1" b="F2 CC"/>
+  <a u="86F2" b="F2 CD"/>
+  <a u="86F3" b="F2 CF"/>
+  <a u="86F4" b="F2 D3"/>
+  <a u="86F5" b="CD 8D"/>
+  <a u="86F6" b="CD 8E"/>
+  <a u="86F7" b="CD 8F"/>
+  <a u="86F8" b="F2 D9"/>
+  <a u="86F9" b="D3 BC"/>
+  <a u="86FA" b="CD 90"/>
+  <a u="86FB" b="CD 91"/>
+  <a u="86FC" b="CD 92"/>
+  <a u="86FD" b="CD 93"/>
+  <a u="86FE" b="B6 EA"/>
+  <a u="86FF" b="CD 94"/>
+  <a u="8700" b="CA F1"/>
+  <a u="8701" b="CD 95"/>
+  <a u="8702" b="B7 E4"/>
+  <a u="8703" b="F2 D7"/>
+  <a u="8704" b="CD 96"/>
+  <a u="8705" b="CD 97"/>
+  <a u="8706" b="CD 98"/>
+  <a u="8707" b="F2 D8"/>
+  <a u="8708" b="F2 DA"/>
+  <a u="8709" b="F2 DD"/>
+  <a u="870A" b="F2 DB"/>
+  <a u="870B" b="CD 99"/>
+  <a u="870C" b="CD 9A"/>
+  <a u="870D" b="F2 DC"/>
+  <a u="870E" b="CD 9B"/>
+  <a u="870F" b="CD 9C"/>
+  <a u="8710" b="CD 9D"/>
+  <a u="8711" b="CD 9E"/>
+  <a u="8712" b="D1 D1"/>
+  <a u="8713" b="F2 D1"/>
+  <a u="8714" b="CD 9F"/>
+  <a u="8715" b="CD C9"/>
+  <a u="8716" b="CD A0"/>
+  <a u="8717" b="CE CF"/>
+  <a u="8718" b="D6 A9"/>
+  <a u="8719" b="CE 40"/>
+  <a u="871A" b="F2 E3"/>
+  <a u="871B" b="CE 41"/>
+  <a u="871C" b="C3 DB"/>
+  <a u="871D" b="CE 42"/>
+  <a u="871E" b="F2 E0"/>
+  <a u="871F" b="CE 43"/>
+  <a u="8720" b="CE 44"/>
+  <a u="8721" b="C0 AF"/>
+  <a u="8722" b="F2 EC"/>
+  <a u="8723" b="F2 DE"/>
+  <a u="8724" b="CE 45"/>
+  <a u="8725" b="F2 E1"/>
+  <a u="8726" b="CE 46"/>
+  <a u="8727" b="CE 47"/>
+  <a u="8728" b="CE 48"/>
+  <a u="8729" b="F2 E8"/>
+  <a u="872A" b="CE 49"/>
+  <a u="872B" b="CE 4A"/>
+  <a u="872C" b="CE 4B"/>
+  <a u="872D" b="CE 4C"/>
+  <a u="872E" b="F2 E2"/>
+  <a u="872F" b="CE 4D"/>
+  <a u="8730" b="CE 4E"/>
+  <a u="8731" b="F2 E7"/>
+  <a u="8732" b="CE 4F"/>
+  <a u="8733" b="CE 50"/>
+  <a u="8734" b="F2 E6"/>
+  <a u="8735" b="CE 51"/>
+  <a u="8736" b="CE 52"/>
+  <a u="8737" b="F2 E9"/>
+  <a u="8738" b="CE 53"/>
+  <a u="8739" b="CE 54"/>
+  <a u="873A" b="CE 55"/>
+  <a u="873B" b="F2 DF"/>
+  <a u="873C" b="CE 56"/>
+  <a u="873D" b="CE 57"/>
+  <a u="873E" b="F2 E4"/>
+  <a u="873F" b="F2 EA"/>
+  <a u="8740" b="CE 58"/>
+  <a u="8741" b="CE 59"/>
+  <a u="8742" b="CE 5A"/>
+  <a u="8743" b="CE 5B"/>
+  <a u="8744" b="CE 5C"/>
+  <a u="8745" b="CE 5D"/>
+  <a u="8746" b="CE 5E"/>
+  <a u="8747" b="D3 AC"/>
+  <a u="8748" b="F2 E5"/>
+  <a u="8749" b="B2 F5"/>
+  <a u="874A" b="CE 5F"/>
+  <a u="874B" b="CE 60"/>
+  <a u="874C" b="F2 F2"/>
+  <a u="874D" b="CE 61"/>
+  <a u="874E" b="D0 AB"/>
+  <a u="874F" b="CE 62"/>
+  <a u="8750" b="CE 63"/>
+  <a u="8751" b="CE 64"/>
+  <a u="8752" b="CE 65"/>
+  <a u="8753" b="F2 F5"/>
+  <a u="8754" b="CE 66"/>
+  <a u="8755" b="CE 67"/>
+  <a u="8756" b="CE 68"/>
+  <a u="8757" b="BB C8"/>
+  <a u="8758" b="CE 69"/>
+  <a u="8759" b="F2 F9"/>
+  <a u="875A" b="CE 6A"/>
+  <a u="875B" b="CE 6B"/>
+  <a u="875C" b="CE 6C"/>
+  <a u="875D" b="CE 6D"/>
+  <a u="875E" b="CE 6E"/>
+  <a u="875F" b="CE 6F"/>
+  <a u="8760" b="F2 F0"/>
+  <a u="8761" b="CE 70"/>
+  <a u="8762" b="CE 71"/>
+  <a u="8763" b="F2 F6"/>
+  <a u="8764" b="F2 F8"/>
+  <a u="8765" b="F2 FA"/>
+  <a u="8766" b="CE 72"/>
+  <a u="8767" b="CE 73"/>
+  <a u="8768" b="CE 74"/>
+  <a u="8769" b="CE 75"/>
+  <a u="876A" b="CE 76"/>
+  <a u="876B" b="CE 77"/>
+  <a u="876C" b="CE 78"/>
+  <a u="876D" b="CE 79"/>
+  <a u="876E" b="F2 F3"/>
+  <a u="876F" b="CE 7A"/>
+  <a u="8770" b="F2 F1"/>
+  <a u="8771" b="CE 7B"/>
+  <a u="8772" b="CE 7C"/>
+  <a u="8773" b="CE 7D"/>
+  <a u="8774" b="BA FB"/>
+  <a u="8775" b="CE 7E"/>
+  <a u="8776" b="B5 FB"/>
+  <a u="8777" b="CE 80"/>
+  <a u="8778" b="CE 81"/>
+  <a u="8779" b="CE 82"/>
+  <a u="877A" b="CE 83"/>
+  <a u="877B" b="F2 EF"/>
+  <a u="877C" b="F2 F7"/>
+  <a u="877D" b="F2 ED"/>
+  <a u="877E" b="F2 EE"/>
+  <a u="877F" b="CE 84"/>
+  <a u="8780" b="CE 85"/>
+  <a u="8781" b="CE 86"/>
+  <a u="8782" b="F2 EB"/>
+  <a u="8783" b="F3 A6"/>
+  <a u="8784" b="CE 87"/>
+  <a u="8785" b="F3 A3"/>
+  <a u="8786" b="CE 88"/>
+  <a u="8787" b="CE 89"/>
+  <a u="8788" b="F3 A2"/>
+  <a u="8789" b="CE 8A"/>
+  <a u="878A" b="CE 8B"/>
+  <a u="878B" b="F2 F4"/>
+  <a u="878C" b="CE 8C"/>
+  <a u="878D" b="C8 DA"/>
+  <a u="878E" b="CE 8D"/>
+  <a u="878F" b="CE 8E"/>
+  <a u="8790" b="CE 8F"/>
+  <a u="8791" b="CE 90"/>
+  <a u="8792" b="CE 91"/>
+  <a u="8793" b="F2 FB"/>
+  <a u="8794" b="CE 92"/>
+  <a u="8795" b="CE 93"/>
+  <a u="8796" b="CE 94"/>
+  <a u="8797" b="F3 A5"/>
+  <a u="8798" b="CE 95"/>
+  <a u="8799" b="CE 96"/>
+  <a u="879A" b="CE 97"/>
+  <a u="879B" b="CE 98"/>
+  <a u="879C" b="CE 99"/>
+  <a u="879D" b="CE 9A"/>
+  <a u="879E" b="CE 9B"/>
+  <a u="879F" b="C3 F8"/>
+  <a u="87A0" b="CE 9C"/>
+  <a u="87A1" b="CE 9D"/>
+  <a u="87A2" b="CE 9E"/>
+  <a u="87A3" b="CE 9F"/>
+  <a u="87A4" b="CE A0"/>
+  <a u="87A5" b="CF 40"/>
+  <a u="87A6" b="CF 41"/>
+  <a u="87A7" b="CF 42"/>
+  <a u="87A8" b="F2 FD"/>
+  <a u="87A9" b="CF 43"/>
+  <a u="87AA" b="CF 44"/>
+  <a u="87AB" b="F3 A7"/>
+  <a u="87AC" b="F3 A9"/>
+  <a u="87AD" b="F3 A4"/>
+  <a u="87AE" b="CF 45"/>
+  <a u="87AF" b="F2 FC"/>
+  <a u="87B0" b="CF 46"/>
+  <a u="87B1" b="CF 47"/>
+  <a u="87B2" b="CF 48"/>
+  <a u="87B3" b="F3 AB"/>
+  <a u="87B4" b="CF 49"/>
+  <a u="87B5" b="F3 AA"/>
+  <a u="87B6" b="CF 4A"/>
+  <a u="87B7" b="CF 4B"/>
+  <a u="87B8" b="CF 4C"/>
+  <a u="87B9" b="CF 4D"/>
+  <a u="87BA" b="C2 DD"/>
+  <a u="87BB" b="CF 4E"/>
+  <a u="87BC" b="CF 4F"/>
+  <a u="87BD" b="F3 AE"/>
+  <a u="87BE" b="CF 50"/>
+  <a u="87BF" b="CF 51"/>
+  <a u="87C0" b="F3 B0"/>
+  <a u="87C1" b="CF 52"/>
+  <a u="87C2" b="CF 53"/>
+  <a u="87C3" b="CF 54"/>
+  <a u="87C4" b="CF 55"/>
+  <a u="87C5" b="CF 56"/>
+  <a u="87C6" b="F3 A1"/>
+  <a u="87C7" b="CF 57"/>
+  <a u="87C8" b="CF 58"/>
+  <a u="87C9" b="CF 59"/>
+  <a u="87CA" b="F3 B1"/>
+  <a u="87CB" b="F3 AC"/>
+  <a u="87CC" b="CF 5A"/>
+  <a u="87CD" b="CF 5B"/>
+  <a u="87CE" b="CF 5C"/>
+  <a u="87CF" b="CF 5D"/>
+  <a u="87D0" b="CF 5E"/>
+  <a u="87D1" b="F3 AF"/>
+  <a u="87D2" b="F2 FE"/>
+  <a u="87D3" b="F3 AD"/>
+  <a u="87D4" b="CF 5F"/>
+  <a u="87D5" b="CF 60"/>
+  <a u="87D6" b="CF 61"/>
+  <a u="87D7" b="CF 62"/>
+  <a u="87D8" b="CF 63"/>
+  <a u="87D9" b="CF 64"/>
+  <a u="87DA" b="CF 65"/>
+  <a u="87DB" b="F3 B2"/>
+  <a u="87DC" b="CF 66"/>
+  <a u="87DD" b="CF 67"/>
+  <a u="87DE" b="CF 68"/>
+  <a u="87DF" b="CF 69"/>
+  <a u="87E0" b="F3 B4"/>
+  <a u="87E1" b="CF 6A"/>
+  <a u="87E2" b="CF 6B"/>
+  <a u="87E3" b="CF 6C"/>
+  <a u="87E4" b="CF 6D"/>
+  <a u="87E5" b="F3 A8"/>
+  <a u="87E6" b="CF 6E"/>
+  <a u="87E7" b="CF 6F"/>
+  <a u="87E8" b="CF 70"/>
+  <a u="87E9" b="CF 71"/>
+  <a u="87EA" b="F3 B3"/>
+  <a u="87EB" b="CF 72"/>
+  <a u="87EC" b="CF 73"/>
+  <a u="87ED" b="CF 74"/>
+  <a u="87EE" b="F3 B5"/>
+  <a u="87EF" b="CF 75"/>
+  <a u="87F0" b="CF 76"/>
+  <a u="87F1" b="CF 77"/>
+  <a u="87F2" b="CF 78"/>
+  <a u="87F3" b="CF 79"/>
+  <a u="87F4" b="CF 7A"/>
+  <a u="87F5" b="CF 7B"/>
+  <a u="87F6" b="CF 7C"/>
+  <a u="87F7" b="CF 7D"/>
+  <a u="87F8" b="CF 7E"/>
+  <a u="87F9" b="D0 B7"/>
+  <a u="87FA" b="CF 80"/>
+  <a u="87FB" b="CF 81"/>
+  <a u="87FC" b="CF 82"/>
+  <a u="87FD" b="CF 83"/>
+  <a u="87FE" b="F3 B8"/>
+  <a u="87FF" b="CF 84"/>
+  <a u="8800" b="CF 85"/>
+  <a u="8801" b="CF 86"/>
+  <a u="8802" b="CF 87"/>
+  <a u="8803" b="D9 F9"/>
+  <a u="8804" b="CF 88"/>
+  <a u="8805" b="CF 89"/>
+  <a u="8806" b="CF 8A"/>
+  <a u="8807" b="CF 8B"/>
+  <a u="8808" b="CF 8C"/>
+  <a u="8809" b="CF 8D"/>
+  <a u="880A" b="F3 B9"/>
+  <a u="880B" b="CF 8E"/>
+  <a u="880C" b="CF 8F"/>
+  <a u="880D" b="CF 90"/>
+  <a u="880E" b="CF 91"/>
+  <a u="880F" b="CF 92"/>
+  <a u="8810" b="CF 93"/>
+  <a u="8811" b="CF 94"/>
+  <a u="8812" b="CF 95"/>
+  <a u="8813" b="F3 B7"/>
+  <a u="8814" b="CF 96"/>
+  <a u="8815" b="C8 E4"/>
+  <a u="8816" b="F3 B6"/>
+  <a u="8817" b="CF 97"/>
+  <a u="8818" b="CF 98"/>
+  <a u="8819" b="CF 99"/>
+  <a u="881A" b="CF 9A"/>
+  <a u="881B" b="F3 BA"/>
+  <a u="881C" b="CF 9B"/>
+  <a u="881D" b="CF 9C"/>
+  <a u="881E" b="CF 9D"/>
+  <a u="881F" b="CF 9E"/>
+  <a u="8820" b="CF 9F"/>
+  <a u="8821" b="F3 BB"/>
+  <a u="8822" b="B4 C0"/>
+  <a u="8823" b="CF A0"/>
+  <a u="8824" b="D0 40"/>
+  <a u="8825" b="D0 41"/>
+  <a u="8826" b="D0 42"/>
+  <a u="8827" b="D0 43"/>
+  <a u="8828" b="D0 44"/>
+  <a u="8829" b="D0 45"/>
+  <a u="882A" b="D0 46"/>
+  <a u="882B" b="D0 47"/>
+  <a u="882C" b="D0 48"/>
+  <a u="882D" b="D0 49"/>
+  <a u="882E" b="D0 4A"/>
+  <a u="882F" b="D0 4B"/>
+  <a u="8830" b="D0 4C"/>
+  <a u="8831" b="D0 4D"/>
+  <a u="8832" b="EE C3"/>
+  <a u="8833" b="D0 4E"/>
+  <a u="8834" b="D0 4F"/>
+  <a u="8835" b="D0 50"/>
+  <a u="8836" b="D0 51"/>
+  <a u="8837" b="D0 52"/>
+  <a u="8838" b="D0 53"/>
+  <a u="8839" b="F3 BC"/>
+  <a u="883A" b="D0 54"/>
+  <a u="883B" b="D0 55"/>
+  <a u="883C" b="F3 BD"/>
+  <a u="883D" b="D0 56"/>
+  <a u="883E" b="D0 57"/>
+  <a u="883F" b="D0 58"/>
+  <a u="8840" b="D1 AA"/>
+  <a u="8841" b="D0 59"/>
+  <a u="8842" b="D0 5A"/>
+  <a u="8843" b="D0 5B"/>
+  <a u="8844" b="F4 AC"/>
+  <a u="8845" b="D0 C6"/>
+  <a u="8846" b="D0 5C"/>
+  <a u="8847" b="D0 5D"/>
+  <a u="8848" b="D0 5E"/>
+  <a u="8849" b="D0 5F"/>
+  <a u="884A" b="D0 60"/>
+  <a u="884B" b="D0 61"/>
+  <a u="884C" b="D0 D0"/>
+  <a u="884D" b="D1 DC"/>
+  <a u="884E" b="D0 62"/>
+  <a u="884F" b="D0 63"/>
+  <a u="8850" b="D0 64"/>
+  <a u="8851" b="D0 65"/>
+  <a u="8852" b="D0 66"/>
+  <a u="8853" b="D0 67"/>
+  <a u="8854" b="CF CE"/>
+  <a u="8855" b="D0 68"/>
+  <a u="8856" b="D0 69"/>
+  <a u="8857" b="BD D6"/>
+  <a u="8858" b="D0 6A"/>
+  <a u="8859" b="D1 C3"/>
+  <a u="885A" b="D0 6B"/>
+  <a u="885B" b="D0 6C"/>
+  <a u="885C" b="D0 6D"/>
+  <a u="885D" b="D0 6E"/>
+  <a u="885E" b="D0 6F"/>
+  <a u="885F" b="D0 70"/>
+  <a u="8860" b="D0 71"/>
+  <a u="8861" b="BA E2"/>
+  <a u="8862" b="E1 E9"/>
+  <a u="8863" b="D2 C2"/>
+  <a u="8864" b="F1 C2"/>
+  <a u="8865" b="B2 B9"/>
+  <a u="8866" b="D0 72"/>
+  <a u="8867" b="D0 73"/>
+  <a u="8868" b="B1 ED"/>
+  <a u="8869" b="F1 C3"/>
+  <a u="886A" b="D0 74"/>
+  <a u="886B" b="C9 C0"/>
+  <a u="886C" b="B3 C4"/>
+  <a u="886D" b="D0 75"/>
+  <a u="886E" b="D9 F2"/>
+  <a u="886F" b="D0 76"/>
+  <a u="8870" b="CB A5"/>
+  <a u="8871" b="D0 77"/>
+  <a u="8872" b="F1 C4"/>
+  <a u="8873" b="D0 78"/>
+  <a u="8874" b="D0 79"/>
+  <a u="8875" b="D0 7A"/>
+  <a u="8876" b="D0 7B"/>
+  <a u="8877" b="D6 D4"/>
+  <a u="8878" b="D0 7C"/>
+  <a u="8879" b="D0 7D"/>
+  <a u="887A" b="D0 7E"/>
+  <a u="887B" b="D0 80"/>
+  <a u="887C" b="D0 81"/>
+  <a u="887D" b="F1 C5"/>
+  <a u="887E" b="F4 C0"/>
+  <a u="887F" b="F1 C6"/>
+  <a u="8880" b="D0 82"/>
+  <a u="8881" b="D4 AC"/>
+  <a u="8882" b="F1 C7"/>
+  <a u="8883" b="D0 83"/>
+  <a u="8884" b="B0 C0"/>
+  <a u="8885" b="F4 C1"/>
+  <a u="8886" b="D0 84"/>
+  <a u="8887" b="D0 85"/>
+  <a u="8888" b="F4 C2"/>
+  <a u="8889" b="D0 86"/>
+  <a u="888A" b="D0 87"/>
+  <a u="888B" b="B4 FC"/>
+  <a u="888C" b="D0 88"/>
+  <a u="888D" b="C5 DB"/>
+  <a u="888E" b="D0 89"/>
+  <a u="888F" b="D0 8A"/>
+  <a u="8890" b="D0 8B"/>
+  <a u="8891" b="D0 8C"/>
+  <a u="8892" b="CC BB"/>
+  <a u="8893" b="D0 8D"/>
+  <a u="8894" b="D0 8E"/>
+  <a u="8895" b="D0 8F"/>
+  <a u="8896" b="D0 E4"/>
+  <a u="8897" b="D0 90"/>
+  <a u="8898" b="D0 91"/>
+  <a u="8899" b="D0 92"/>
+  <a u="889A" b="D0 93"/>
+  <a u="889B" b="D0 94"/>
+  <a u="889C" b="CD E0"/>
+  <a u="889D" b="D0 95"/>
+  <a u="889E" b="D0 96"/>
+  <a u="889F" b="D0 97"/>
+  <a u="88A0" b="D0 98"/>
+  <a u="88A1" b="D0 99"/>
+  <a u="88A2" b="F1 C8"/>
+  <a u="88A3" b="D0 9A"/>
+  <a u="88A4" b="D9 F3"/>
+  <a u="88A5" b="D0 9B"/>
+  <a u="88A6" b="D0 9C"/>
+  <a u="88A7" b="D0 9D"/>
+  <a u="88A8" b="D0 9E"/>
+  <a u="88A9" b="D0 9F"/>
+  <a u="88AA" b="D0 A0"/>
+  <a u="88AB" b="B1 BB"/>
+  <a u="88AC" b="D1 40"/>
+  <a u="88AD" b="CF AE"/>
+  <a u="88AE" b="D1 41"/>
+  <a u="88AF" b="D1 42"/>
+  <a u="88B0" b="D1 43"/>
+  <a u="88B1" b="B8 A4"/>
+  <a u="88B2" b="D1 44"/>
+  <a u="88B3" b="D1 45"/>
+  <a u="88B4" b="D1 46"/>
+  <a u="88B5" b="D1 47"/>
+  <a u="88B6" b="D1 48"/>
+  <a u="88B7" b="F1 CA"/>
+  <a u="88B8" b="D1 49"/>
+  <a u="88B9" b="D1 4A"/>
+  <a u="88BA" b="D1 4B"/>
+  <a u="88BB" b="D1 4C"/>
+  <a u="88BC" b="F1 CB"/>
+  <a u="88BD" b="D1 4D"/>
+  <a u="88BE" b="D1 4E"/>
+  <a u="88BF" b="D1 4F"/>
+  <a u="88C0" b="D1 50"/>
+  <a u="88C1" b="B2 C3"/>
+  <a u="88C2" b="C1 D1"/>
+  <a u="88C3" b="D1 51"/>
+  <a u="88C4" b="D1 52"/>
+  <a u="88C5" b="D7 B0"/>
+  <a u="88C6" b="F1 C9"/>
+  <a u="88C7" b="D1 53"/>
+  <a u="88C8" b="D1 54"/>
+  <a u="88C9" b="F1 CC"/>
+  <a u="88CA" b="D1 55"/>
+  <a u="88CB" b="D1 56"/>
+  <a u="88CC" b="D1 57"/>
+  <a u="88CD" b="D1 58"/>
+  <a u="88CE" b="F1 CE"/>
+  <a u="88CF" b="D1 59"/>
+  <a u="88D0" b="D1 5A"/>
+  <a u="88D1" b="D1 5B"/>
+  <a u="88D2" b="D9 F6"/>
+  <a u="88D3" b="D1 5C"/>
+  <a u="88D4" b="D2 E1"/>
+  <a u="88D5" b="D4 A3"/>
+  <a u="88D6" b="D1 5D"/>
+  <a u="88D7" b="D1 5E"/>
+  <a u="88D8" b="F4 C3"/>
+  <a u="88D9" b="C8 B9"/>
+  <a u="88DA" b="D1 5F"/>
+  <a u="88DB" b="D1 60"/>
+  <a u="88DC" b="D1 61"/>
+  <a u="88DD" b="D1 62"/>
+  <a u="88DE" b="D1 63"/>
+  <a u="88DF" b="F4 C4"/>
+  <a u="88E0" b="D1 64"/>
+  <a u="88E1" b="D1 65"/>
+  <a u="88E2" b="F1 CD"/>
+  <a u="88E3" b="F1 CF"/>
+  <a u="88E4" b="BF E3"/>
+  <a u="88E5" b="F1 D0"/>
+  <a u="88E6" b="D1 66"/>
+  <a u="88E7" b="D1 67"/>
+  <a u="88E8" b="F1 D4"/>
+  <a u="88E9" b="D1 68"/>
+  <a u="88EA" b="D1 69"/>
+  <a u="88EB" b="D1 6A"/>
+  <a u="88EC" b="D1 6B"/>
+  <a u="88ED" b="D1 6C"/>
+  <a u="88EE" b="D1 6D"/>
+  <a u="88EF" b="D1 6E"/>
+  <a u="88F0" b="F1 D6"/>
+  <a u="88F1" b="F1 D1"/>
+  <a u="88F2" b="D1 6F"/>
+  <a u="88F3" b="C9 D1"/>
+  <a u="88F4" b="C5 E1"/>
+  <a u="88F5" b="D1 70"/>
+  <a u="88F6" b="D1 71"/>
+  <a u="88F7" b="D1 72"/>
+  <a u="88F8" b="C2 E3"/>
+  <a u="88F9" b="B9 FC"/>
+  <a u="88FA" b="D1 73"/>
+  <a u="88FB" b="D1 74"/>
+  <a u="88FC" b="F1 D3"/>
+  <a u="88FD" b="D1 75"/>
+  <a u="88FE" b="F1 D5"/>
+  <a u="88FF" b="D1 76"/>
+  <a u="8900" b="D1 77"/>
+  <a u="8901" b="D1 78"/>
+  <a u="8902" b="B9 D3"/>
+  <a u="8903" b="D1 79"/>
+  <a u="8904" b="D1 7A"/>
+  <a u="8905" b="D1 7B"/>
+  <a u="8906" b="D1 7C"/>
+  <a u="8907" b="D1 7D"/>
+  <a u="8908" b="D1 7E"/>
+  <a u="8909" b="D1 80"/>
+  <a u="890A" b="F1 DB"/>
+  <a u="890B" b="D1 81"/>
+  <a u="890C" b="D1 82"/>
+  <a u="890D" b="D1 83"/>
+  <a u="890E" b="D1 84"/>
+  <a u="890F" b="D1 85"/>
+  <a u="8910" b="BA D6"/>
+  <a u="8911" b="D1 86"/>
+  <a u="8912" b="B0 FD"/>
+  <a u="8913" b="F1 D9"/>
+  <a u="8914" b="D1 87"/>
+  <a u="8915" b="D1 88"/>
+  <a u="8916" b="D1 89"/>
+  <a u="8917" b="D1 8A"/>
+  <a u="8918" b="D1 8B"/>
+  <a u="8919" b="F1 D8"/>
+  <a u="891A" b="F1 D2"/>
+  <a u="891B" b="F1 DA"/>
+  <a u="891C" b="D1 8C"/>
+  <a u="891D" b="D1 8D"/>
+  <a u="891E" b="D1 8E"/>
+  <a u="891F" b="D1 8F"/>
+  <a u="8920" b="D1 90"/>
+  <a u="8921" b="F1 D7"/>
+  <a u="8922" b="D1 91"/>
+  <a u="8923" b="D1 92"/>
+  <a u="8924" b="D1 93"/>
+  <a u="8925" b="C8 EC"/>
+  <a u="8926" b="D1 94"/>
+  <a u="8927" b="D1 95"/>
+  <a u="8928" b="D1 96"/>
+  <a u="8929" b="D1 97"/>
+  <a u="892A" b="CD CA"/>
+  <a u="892B" b="F1 DD"/>
+  <a u="892C" b="D1 98"/>
+  <a u="892D" b="D1 99"/>
+  <a u="892E" b="D1 9A"/>
+  <a u="892F" b="D1 9B"/>
+  <a u="8930" b="E5 BD"/>
+  <a u="8931" b="D1 9C"/>
+  <a u="8932" b="D1 9D"/>
+  <a u="8933" b="D1 9E"/>
+  <a u="8934" b="F1 DC"/>
+  <a u="8935" b="D1 9F"/>
+  <a u="8936" b="F1 DE"/>
+  <a u="8937" b="D1 A0"/>
+  <a u="8938" b="D2 40"/>
+  <a u="8939" b="D2 41"/>
+  <a u="893A" b="D2 42"/>
+  <a u="893B" b="D2 43"/>
+  <a u="893C" b="D2 44"/>
+  <a u="893D" b="D2 45"/>
+  <a u="893E" b="D2 46"/>
+  <a u="893F" b="D2 47"/>
+  <a u="8940" b="D2 48"/>
+  <a u="8941" b="F1 DF"/>
+  <a u="8942" b="D2 49"/>
+  <a u="8943" b="D2 4A"/>
+  <a u="8944" b="CF E5"/>
+  <a u="8945" b="D2 4B"/>
+  <a u="8946" b="D2 4C"/>
+  <a u="8947" b="D2 4D"/>
+  <a u="8948" b="D2 4E"/>
+  <a u="8949" b="D2 4F"/>
+  <a u="894A" b="D2 50"/>
+  <a u="894B" b="D2 51"/>
+  <a u="894C" b="D2 52"/>
+  <a u="894D" b="D2 53"/>
+  <a u="894E" b="D2 54"/>
+  <a u="894F" b="D2 55"/>
+  <a u="8950" b="D2 56"/>
+  <a u="8951" b="D2 57"/>
+  <a u="8952" b="D2 58"/>
+  <a u="8953" b="D2 59"/>
+  <a u="8954" b="D2 5A"/>
+  <a u="8955" b="D2 5B"/>
+  <a u="8956" b="D2 5C"/>
+  <a u="8957" b="D2 5D"/>
+  <a u="8958" b="D2 5E"/>
+  <a u="8959" b="D2 5F"/>
+  <a u="895A" b="D2 60"/>
+  <a u="895B" b="D2 61"/>
+  <a u="895C" b="D2 62"/>
+  <a u="895D" b="D2 63"/>
+  <a u="895E" b="F4 C5"/>
+  <a u="895F" b="BD F3"/>
+  <a u="8960" b="D2 64"/>
+  <a u="8961" b="D2 65"/>
+  <a u="8962" b="D2 66"/>
+  <a u="8963" b="D2 67"/>
+  <a u="8964" b="D2 68"/>
+  <a u="8965" b="D2 69"/>
+  <a u="8966" b="F1 E0"/>
+  <a u="8967" b="D2 6A"/>
+  <a u="8968" b="D2 6B"/>
+  <a u="8969" b="D2 6C"/>
+  <a u="896A" b="D2 6D"/>
+  <a u="896B" b="D2 6E"/>
+  <a u="896C" b="D2 6F"/>
+  <a u="896D" b="D2 70"/>
+  <a u="896E" b="D2 71"/>
+  <a u="896F" b="D2 72"/>
+  <a u="8970" b="D2 73"/>
+  <a u="8971" b="D2 74"/>
+  <a u="8972" b="D2 75"/>
+  <a u="8973" b="D2 76"/>
+  <a u="8974" b="D2 77"/>
+  <a u="8975" b="D2 78"/>
+  <a u="8976" b="D2 79"/>
+  <a u="8977" b="D2 7A"/>
+  <a u="8978" b="D2 7B"/>
+  <a u="8979" b="D2 7C"/>
+  <a u="897A" b="D2 7D"/>
+  <a u="897B" b="F1 E1"/>
+  <a u="897C" b="D2 7E"/>
+  <a u="897D" b="D2 80"/>
+  <a u="897E" b="D2 81"/>
+  <a u="897F" b="CE F7"/>
+  <a u="8980" b="D2 82"/>
+  <a u="8981" b="D2 AA"/>
+  <a u="8982" b="D2 83"/>
+  <a u="8983" b="F1 FB"/>
+  <a u="8984" b="D2 84"/>
+  <a u="8985" b="D2 85"/>
+  <a u="8986" b="B8 B2"/>
+  <a u="8987" b="D2 86"/>
+  <a u="8988" b="D2 87"/>
+  <a u="8989" b="D2 88"/>
+  <a u="898A" b="D2 89"/>
+  <a u="898B" b="D2 8A"/>
+  <a u="898C" b="D2 8B"/>
+  <a u="898D" b="D2 8C"/>
+  <a u="898E" b="D2 8D"/>
+  <a u="898F" b="D2 8E"/>
+  <a u="8990" b="D2 8F"/>
+  <a u="8991" b="D2 90"/>
+  <a u="8992" b="D2 91"/>
+  <a u="8993" b="D2 92"/>
+  <a u="8994" b="D2 93"/>
+  <a u="8995" b="D2 94"/>
+  <a u="8996" b="D2 95"/>
+  <a u="8997" b="D2 96"/>
+  <a u="8998" b="D2 97"/>
+  <a u="8999" b="D2 98"/>
+  <a u="899A" b="D2 99"/>
+  <a u="899B" b="D2 9A"/>
+  <a u="899C" b="D2 9B"/>
+  <a u="899D" b="D2 9C"/>
+  <a u="899E" b="D2 9D"/>
+  <a u="899F" b="D2 9E"/>
+  <a u="89A0" b="D2 9F"/>
+  <a u="89A1" b="D2 A0"/>
+  <a u="89A2" b="D3 40"/>
+  <a u="89A3" b="D3 41"/>
+  <a u="89A4" b="D3 42"/>
+  <a u="89A5" b="D3 43"/>
+  <a u="89A6" b="D3 44"/>
+  <a u="89A7" b="D3 45"/>
+  <a u="89A8" b="D3 46"/>
+  <a u="89A9" b="D3 47"/>
+  <a u="89AA" b="D3 48"/>
+  <a u="89AB" b="D3 49"/>
+  <a u="89AC" b="D3 4A"/>
+  <a u="89AD" b="D3 4B"/>
+  <a u="89AE" b="D3 4C"/>
+  <a u="89AF" b="D3 4D"/>
+  <a u="89B0" b="D3 4E"/>
+  <a u="89B1" b="D3 4F"/>
+  <a u="89B2" b="D3 50"/>
+  <a u="89B3" b="D3 51"/>
+  <a u="89B4" b="D3 52"/>
+  <a u="89B5" b="D3 53"/>
+  <a u="89B6" b="D3 54"/>
+  <a u="89B7" b="D3 55"/>
+  <a u="89B8" b="D3 56"/>
+  <a u="89B9" b="D3 57"/>
+  <a u="89BA" b="D3 58"/>
+  <a u="89BB" b="D3 59"/>
+  <a u="89BC" b="D3 5A"/>
+  <a u="89BD" b="D3 5B"/>
+  <a u="89BE" b="D3 5C"/>
+  <a u="89BF" b="D3 5D"/>
+  <a u="89C0" b="D3 5E"/>
+  <a u="89C1" b="BC FB"/>
+  <a u="89C2" b="B9 DB"/>
+  <a u="89C3" b="D3 5F"/>
+  <a u="89C4" b="B9 E6"/>
+  <a u="89C5" b="C3 D9"/>
+  <a u="89C6" b="CA D3"/>
+  <a u="89C7" b="EA E8"/>
+  <a u="89C8" b="C0 C0"/>
+  <a u="89C9" b="BE F5"/>
+  <a u="89CA" b="EA E9"/>
+  <a u="89CB" b="EA EA"/>
+  <a u="89CC" b="EA EB"/>
+  <a u="89CD" b="D3 60"/>
+  <a u="89CE" b="EA EC"/>
+  <a u="89CF" b="EA ED"/>
+  <a u="89D0" b="EA EE"/>
+  <a u="89D1" b="EA EF"/>
+  <a u="89D2" b="BD C7"/>
+  <a u="89D3" b="D3 61"/>
+  <a u="89D4" b="D3 62"/>
+  <a u="89D5" b="D3 63"/>
+  <a u="89D6" b="F5 FB"/>
+  <a u="89D7" b="D3 64"/>
+  <a u="89D8" b="D3 65"/>
+  <a u="89D9" b="D3 66"/>
+  <a u="89DA" b="F5 FD"/>
+  <a u="89DB" b="D3 67"/>
+  <a u="89DC" b="F5 FE"/>
+  <a u="89DD" b="D3 68"/>
+  <a u="89DE" b="F5 FC"/>
+  <a u="89DF" b="D3 69"/>
+  <a u="89E0" b="D3 6A"/>
+  <a u="89E1" b="D3 6B"/>
+  <a u="89E2" b="D3 6C"/>
+  <a u="89E3" b="BD E2"/>
+  <a u="89E4" b="D3 6D"/>
+  <a u="89E5" b="F6 A1"/>
+  <a u="89E6" b="B4 A5"/>
+  <a u="89E7" b="D3 6E"/>
+  <a u="89E8" b="D3 6F"/>
+  <a u="89E9" b="D3 70"/>
+  <a u="89EA" b="D3 71"/>
+  <a u="89EB" b="F6 A2"/>
+  <a u="89EC" b="D3 72"/>
+  <a u="89ED" b="D3 73"/>
+  <a u="89EE" b="D3 74"/>
+  <a u="89EF" b="F6 A3"/>
+  <a u="89F0" b="D3 75"/>
+  <a u="89F1" b="D3 76"/>
+  <a u="89F2" b="D3 77"/>
+  <a u="89F3" b="EC B2"/>
+  <a u="89F4" b="D3 78"/>
+  <a u="89F5" b="D3 79"/>
+  <a u="89F6" b="D3 7A"/>
+  <a u="89F7" b="D3 7B"/>
+  <a u="89F8" b="D3 7C"/>
+  <a u="89F9" b="D3 7D"/>
+  <a u="89FA" b="D3 7E"/>
+  <a u="89FB" b="D3 80"/>
+  <a u="89FC" b="D3 81"/>
+  <a u="89FD" b="D3 82"/>
+  <a u="89FE" b="D3 83"/>
+  <a u="89FF" b="D3 84"/>
+  <a u="8A00" b="D1 D4"/>
+  <a u="8A01" b="D3 85"/>
+  <a u="8A02" b="D3 86"/>
+  <a u="8A03" b="D3 87"/>
+  <a u="8A04" b="D3 88"/>
+  <a u="8A05" b="D3 89"/>
+  <a u="8A06" b="D3 8A"/>
+  <a u="8A07" b="D9 EA"/>
+  <a u="8A08" b="D3 8B"/>
+  <a u="8A09" b="D3 8C"/>
+  <a u="8A0A" b="D3 8D"/>
+  <a u="8A0B" b="D3 8E"/>
+  <a u="8A0C" b="D3 8F"/>
+  <a u="8A0D" b="D3 90"/>
+  <a u="8A0E" b="D3 91"/>
+  <a u="8A0F" b="D3 92"/>
+  <a u="8A10" b="D3 93"/>
+  <a u="8A11" b="D3 94"/>
+  <a u="8A12" b="D3 95"/>
+  <a u="8A13" b="D3 96"/>
+  <a u="8A14" b="D3 97"/>
+  <a u="8A15" b="D3 98"/>
+  <a u="8A16" b="D3 99"/>
+  <a u="8A17" b="D3 9A"/>
+  <a u="8A18" b="D3 9B"/>
+  <a u="8A19" b="D3 9C"/>
+  <a u="8A1A" b="D3 9D"/>
+  <a u="8A1B" b="D3 9E"/>
+  <a u="8A1C" b="D3 9F"/>
+  <a u="8A1D" b="D3 A0"/>
+  <a u="8A1E" b="D4 40"/>
+  <a u="8A1F" b="D4 41"/>
+  <a u="8A20" b="D4 42"/>
+  <a u="8A21" b="D4 43"/>
+  <a u="8A22" b="D4 44"/>
+  <a u="8A23" b="D4 45"/>
+  <a u="8A24" b="D4 46"/>
+  <a u="8A25" b="D4 47"/>
+  <a u="8A26" b="D4 48"/>
+  <a u="8A27" b="D4 49"/>
+  <a u="8A28" b="D4 4A"/>
+  <a u="8A29" b="D4 4B"/>
+  <a u="8A2A" b="D4 4C"/>
+  <a u="8A2B" b="D4 4D"/>
+  <a u="8A2C" b="D4 4E"/>
+  <a u="8A2D" b="D4 4F"/>
+  <a u="8A2E" b="D4 50"/>
+  <a u="8A2F" b="D4 51"/>
+  <a u="8A30" b="D4 52"/>
+  <a u="8A31" b="D4 53"/>
+  <a u="8A32" b="D4 54"/>
+  <a u="8A33" b="D4 55"/>
+  <a u="8A34" b="D4 56"/>
+  <a u="8A35" b="D4 57"/>
+  <a u="8A36" b="D4 58"/>
+  <a u="8A37" b="D4 59"/>
+  <a u="8A38" b="D4 5A"/>
+  <a u="8A39" b="D4 5B"/>
+  <a u="8A3A" b="D4 5C"/>
+  <a u="8A3B" b="D4 5D"/>
+  <a u="8A3C" b="D4 5E"/>
+  <a u="8A3D" b="D4 5F"/>
+  <a u="8A3E" b="F6 A4"/>
+  <a u="8A3F" b="D4 60"/>
+  <a u="8A40" b="D4 61"/>
+  <a u="8A41" b="D4 62"/>
+  <a u="8A42" b="D4 63"/>
+  <a u="8A43" b="D4 64"/>
+  <a u="8A44" b="D4 65"/>
+  <a u="8A45" b="D4 66"/>
+  <a u="8A46" b="D4 67"/>
+  <a u="8A47" b="D4 68"/>
+  <a u="8A48" b="EE BA"/>
+  <a u="8A49" b="D4 69"/>
+  <a u="8A4A" b="D4 6A"/>
+  <a u="8A4B" b="D4 6B"/>
+  <a u="8A4C" b="D4 6C"/>
+  <a u="8A4D" b="D4 6D"/>
+  <a u="8A4E" b="D4 6E"/>
+  <a u="8A4F" b="D4 6F"/>
+  <a u="8A50" b="D4 70"/>
+  <a u="8A51" b="D4 71"/>
+  <a u="8A52" b="D4 72"/>
+  <a u="8A53" b="D4 73"/>
+  <a u="8A54" b="D4 74"/>
+  <a u="8A55" b="D4 75"/>
+  <a u="8A56" b="D4 76"/>
+  <a u="8A57" b="D4 77"/>
+  <a u="8A58" b="D4 78"/>
+  <a u="8A59" b="D4 79"/>
+  <a u="8A5A" b="D4 7A"/>
+  <a u="8A5B" b="D4 7B"/>
+  <a u="8A5C" b="D4 7C"/>
+  <a u="8A5D" b="D4 7D"/>
+  <a u="8A5E" b="D4 7E"/>
+  <a u="8A5F" b="D4 80"/>
+  <a u="8A60" b="D4 81"/>
+  <a u="8A61" b="D4 82"/>
+  <a u="8A62" b="D4 83"/>
+  <a u="8A63" b="D4 84"/>
+  <a u="8A64" b="D4 85"/>
+  <a u="8A65" b="D4 86"/>
+  <a u="8A66" b="D4 87"/>
+  <a u="8A67" b="D4 88"/>
+  <a u="8A68" b="D4 89"/>
+  <a u="8A69" b="D4 8A"/>
+  <a u="8A6A" b="D4 8B"/>
+  <a u="8A6B" b="D4 8C"/>
+  <a u="8A6C" b="D4 8D"/>
+  <a u="8A6D" b="D4 8E"/>
+  <a u="8A6E" b="D4 8F"/>
+  <a u="8A6F" b="D4 90"/>
+  <a u="8A70" b="D4 91"/>
+  <a u="8A71" b="D4 92"/>
+  <a u="8A72" b="D4 93"/>
+  <a u="8A73" b="D4 94"/>
+  <a u="8A74" b="D4 95"/>
+  <a u="8A75" b="D4 96"/>
+  <a u="8A76" b="D4 97"/>
+  <a u="8A77" b="D4 98"/>
+  <a u="8A78" b="D4 99"/>
+  <a u="8A79" b="D5 B2"/>
+  <a u="8A7A" b="D4 9A"/>
+  <a u="8A7B" b="D4 9B"/>
+  <a u="8A7C" b="D4 9C"/>
+  <a u="8A7D" b="D4 9D"/>
+  <a u="8A7E" b="D4 9E"/>
+  <a u="8A7F" b="D4 9F"/>
+  <a u="8A80" b="D4 A0"/>
+  <a u="8A81" b="D5 40"/>
+  <a u="8A82" b="D5 41"/>
+  <a u="8A83" b="D5 42"/>
+  <a u="8A84" b="D5 43"/>
+  <a u="8A85" b="D5 44"/>
+  <a u="8A86" b="D5 45"/>
+  <a u="8A87" b="D5 46"/>
+  <a u="8A88" b="D5 47"/>
+  <a u="8A89" b="D3 FE"/>
+  <a u="8A8A" b="CC DC"/>
+  <a u="8A8B" b="D5 48"/>
+  <a u="8A8C" b="D5 49"/>
+  <a u="8A8D" b="D5 4A"/>
+  <a u="8A8E" b="D5 4B"/>
+  <a u="8A8F" b="D5 4C"/>
+  <a u="8A90" b="D5 4D"/>
+  <a u="8A91" b="D5 4E"/>
+  <a u="8A92" b="D5 4F"/>
+  <a u="8A93" b="CA C4"/>
+  <a u="8A94" b="D5 50"/>
+  <a u="8A95" b="D5 51"/>
+  <a u="8A96" b="D5 52"/>
+  <a u="8A97" b="D5 53"/>
+  <a u="8A98" b="D5 54"/>
+  <a u="8A99" b="D5 55"/>
+  <a u="8A9A" b="D5 56"/>
+  <a u="8A9B" b="D5 57"/>
+  <a u="8A9C" b="D5 58"/>
+  <a u="8A9D" b="D5 59"/>
+  <a u="8A9E" b="D5 5A"/>
+  <a u="8A9F" b="D5 5B"/>
+  <a u="8AA0" b="D5 5C"/>
+  <a u="8AA1" b="D5 5D"/>
+  <a u="8AA2" b="D5 5E"/>
+  <a u="8AA3" b="D5 5F"/>
+  <a u="8AA4" b="D5 60"/>
+  <a u="8AA5" b="D5 61"/>
+  <a u="8AA6" b="D5 62"/>
+  <a u="8AA7" b="D5 63"/>
+  <a u="8AA8" b="D5 64"/>
+  <a u="8AA9" b="D5 65"/>
+  <a u="8AAA" b="D5 66"/>
+  <a u="8AAB" b="D5 67"/>
+  <a u="8AAC" b="D5 68"/>
+  <a u="8AAD" b="D5 69"/>
+  <a u="8AAE" b="D5 6A"/>
+  <a u="8AAF" b="D5 6B"/>
+  <a u="8AB0" b="D5 6C"/>
+  <a u="8AB1" b="D5 6D"/>
+  <a u="8AB2" b="D5 6E"/>
+  <a u="8AB3" b="D5 6F"/>
+  <a u="8AB4" b="D5 70"/>
+  <a u="8AB5" b="D5 71"/>
+  <a u="8AB6" b="D5 72"/>
+  <a u="8AB7" b="D5 73"/>
+  <a u="8AB8" b="D5 74"/>
+  <a u="8AB9" b="D5 75"/>
+  <a u="8ABA" b="D5 76"/>
+  <a u="8ABB" b="D5 77"/>
+  <a u="8ABC" b="D5 78"/>
+  <a u="8ABD" b="D5 79"/>
+  <a u="8ABE" b="D5 7A"/>
+  <a u="8ABF" b="D5 7B"/>
+  <a u="8AC0" b="D5 7C"/>
+  <a u="8AC1" b="D5 7D"/>
+  <a u="8AC2" b="D5 7E"/>
+  <a u="8AC3" b="D5 80"/>
+  <a u="8AC4" b="D5 81"/>
+  <a u="8AC5" b="D5 82"/>
+  <a u="8AC6" b="D5 83"/>
+  <a u="8AC7" b="D5 84"/>
+  <a u="8AC8" b="D5 85"/>
+  <a u="8AC9" b="D5 86"/>
+  <a u="8ACA" b="D5 87"/>
+  <a u="8ACB" b="D5 88"/>
+  <a u="8ACC" b="D5 89"/>
+  <a u="8ACD" b="D5 8A"/>
+  <a u="8ACE" b="D5 8B"/>
+  <a u="8ACF" b="D5 8C"/>
+  <a u="8AD0" b="D5 8D"/>
+  <a u="8AD1" b="D5 8E"/>
+  <a u="8AD2" b="D5 8F"/>
+  <a u="8AD3" b="D5 90"/>
+  <a u="8AD4" b="D5 91"/>
+  <a u="8AD5" b="D5 92"/>
+  <a u="8AD6" b="D5 93"/>
+  <a u="8AD7" b="D5 94"/>
+  <a u="8AD8" b="D5 95"/>
+  <a u="8AD9" b="D5 96"/>
+  <a u="8ADA" b="D5 97"/>
+  <a u="8ADB" b="D5 98"/>
+  <a u="8ADC" b="D5 99"/>
+  <a u="8ADD" b="D5 9A"/>
+  <a u="8ADE" b="D5 9B"/>
+  <a u="8ADF" b="D5 9C"/>
+  <a u="8AE0" b="D5 9D"/>
+  <a u="8AE1" b="D5 9E"/>
+  <a u="8AE2" b="D5 9F"/>
+  <a u="8AE3" b="D5 A0"/>
+  <a u="8AE4" b="D6 40"/>
+  <a u="8AE5" b="D6 41"/>
+  <a u="8AE6" b="D6 42"/>
+  <a u="8AE7" b="D6 43"/>
+  <a u="8AE8" b="D6 44"/>
+  <a u="8AE9" b="D6 45"/>
+  <a u="8AEA" b="D6 46"/>
+  <a u="8AEB" b="D6 47"/>
+  <a u="8AEC" b="D6 48"/>
+  <a u="8AED" b="D6 49"/>
+  <a u="8AEE" b="D6 4A"/>
+  <a u="8AEF" b="D6 4B"/>
+  <a u="8AF0" b="D6 4C"/>
+  <a u="8AF1" b="D6 4D"/>
+  <a u="8AF2" b="D6 4E"/>
+  <a u="8AF3" b="D6 4F"/>
+  <a u="8AF4" b="D6 50"/>
+  <a u="8AF5" b="D6 51"/>
+  <a u="8AF6" b="D6 52"/>
+  <a u="8AF7" b="D6 53"/>
+  <a u="8AF8" b="D6 54"/>
+  <a u="8AF9" b="D6 55"/>
+  <a u="8AFA" b="D6 56"/>
+  <a u="8AFB" b="D6 57"/>
+  <a u="8AFC" b="D6 58"/>
+  <a u="8AFD" b="D6 59"/>
+  <a u="8AFE" b="D6 5A"/>
+  <a u="8AFF" b="D6 5B"/>
+  <a u="8B00" b="D6 5C"/>
+  <a u="8B01" b="D6 5D"/>
+  <a u="8B02" b="D6 5E"/>
+  <a u="8B03" b="D6 5F"/>
+  <a u="8B04" b="D6 60"/>
+  <a u="8B05" b="D6 61"/>
+  <a u="8B06" b="D6 62"/>
+  <a u="8B07" b="E5 C0"/>
+  <a u="8B08" b="D6 63"/>
+  <a u="8B09" b="D6 64"/>
+  <a u="8B0A" b="D6 65"/>
+  <a u="8B0B" b="D6 66"/>
+  <a u="8B0C" b="D6 67"/>
+  <a u="8B0D" b="D6 68"/>
+  <a u="8B0E" b="D6 69"/>
+  <a u="8B0F" b="D6 6A"/>
+  <a u="8B10" b="D6 6B"/>
+  <a u="8B11" b="D6 6C"/>
+  <a u="8B12" b="D6 6D"/>
+  <a u="8B13" b="D6 6E"/>
+  <a u="8B14" b="D6 6F"/>
+  <a u="8B15" b="D6 70"/>
+  <a u="8B16" b="D6 71"/>
+  <a u="8B17" b="D6 72"/>
+  <a u="8B18" b="D6 73"/>
+  <a u="8B19" b="D6 74"/>
+  <a u="8B1A" b="D6 75"/>
+  <a u="8B1B" b="D6 76"/>
+  <a u="8B1C" b="D6 77"/>
+  <a u="8B1D" b="D6 78"/>
+  <a u="8B1E" b="D6 79"/>
+  <a u="8B1F" b="D6 7A"/>
+  <a u="8B20" b="D6 7B"/>
+  <a u="8B21" b="D6 7C"/>
+  <a u="8B22" b="D6 7D"/>
+  <a u="8B23" b="D6 7E"/>
+  <a u="8B24" b="D6 80"/>
+  <a u="8B25" b="D6 81"/>
+  <a u="8B26" b="F6 A5"/>
+  <a u="8B27" b="D6 82"/>
+  <a u="8B28" b="D6 83"/>
+  <a u="8B29" b="D6 84"/>
+  <a u="8B2A" b="D6 85"/>
+  <a u="8B2B" b="D6 86"/>
+  <a u="8B2C" b="D6 87"/>
+  <a u="8B2D" b="D6 88"/>
+  <a u="8B2E" b="D6 89"/>
+  <a u="8B2F" b="D6 8A"/>
+  <a u="8B30" b="D6 8B"/>
+  <a u="8B31" b="D6 8C"/>
+  <a u="8B32" b="D6 8D"/>
+  <a u="8B33" b="D6 8E"/>
+  <a u="8B34" b="D6 8F"/>
+  <a u="8B35" b="D6 90"/>
+  <a u="8B36" b="D6 91"/>
+  <a u="8B37" b="D6 92"/>
+  <a u="8B38" b="D6 93"/>
+  <a u="8B39" b="D6 94"/>
+  <a u="8B3A" b="D6 95"/>
+  <a u="8B3B" b="D6 96"/>
+  <a u="8B3C" b="D6 97"/>
+  <a u="8B3D" b="D6 98"/>
+  <a u="8B3E" b="D6 99"/>
+  <a u="8B3F" b="D6 9A"/>
+  <a u="8B40" b="D6 9B"/>
+  <a u="8B41" b="D6 9C"/>
+  <a u="8B42" b="D6 9D"/>
+  <a u="8B43" b="D6 9E"/>
+  <a u="8B44" b="D6 9F"/>
+  <a u="8B45" b="D6 A0"/>
+  <a u="8B46" b="D7 40"/>
+  <a u="8B47" b="D7 41"/>
+  <a u="8B48" b="D7 42"/>
+  <a u="8B49" b="D7 43"/>
+  <a u="8B4A" b="D7 44"/>
+  <a u="8B4B" b="D7 45"/>
+  <a u="8B4C" b="D7 46"/>
+  <a u="8B4D" b="D7 47"/>
+  <a u="8B4E" b="D7 48"/>
+  <a u="8B4F" b="D7 49"/>
+  <a u="8B50" b="D7 4A"/>
+  <a u="8B51" b="D7 4B"/>
+  <a u="8B52" b="D7 4C"/>
+  <a u="8B53" b="D7 4D"/>
+  <a u="8B54" b="D7 4E"/>
+  <a u="8B55" b="D7 4F"/>
+  <a u="8B56" b="D7 50"/>
+  <a u="8B57" b="D7 51"/>
+  <a u="8B58" b="D7 52"/>
+  <a u="8B59" b="D7 53"/>
+  <a u="8B5A" b="D7 54"/>
+  <a u="8B5B" b="D7 55"/>
+  <a u="8B5C" b="D7 56"/>
+  <a u="8B5D" b="D7 57"/>
+  <a u="8B5E" b="D7 58"/>
+  <a u="8B5F" b="D7 59"/>
+  <a u="8B60" b="D7 5A"/>
+  <a u="8B61" b="D7 5B"/>
+  <a u="8B62" b="D7 5C"/>
+  <a u="8B63" b="D7 5D"/>
+  <a u="8B64" b="D7 5E"/>
+  <a u="8B65" b="D7 5F"/>
+  <a u="8B66" b="BE AF"/>
+  <a u="8B67" b="D7 60"/>
+  <a u="8B68" b="D7 61"/>
+  <a u="8B69" b="D7 62"/>
+  <a u="8B6A" b="D7 63"/>
+  <a u="8B6B" b="D7 64"/>
+  <a u="8B6C" b="C6 A9"/>
+  <a u="8B6D" b="D7 65"/>
+  <a u="8B6E" b="D7 66"/>
+  <a u="8B6F" b="D7 67"/>
+  <a u="8B70" b="D7 68"/>
+  <a u="8B71" b="D7 69"/>
+  <a u="8B72" b="D7 6A"/>
+  <a u="8B73" b="D7 6B"/>
+  <a u="8B74" b="D7 6C"/>
+  <a u="8B75" b="D7 6D"/>
+  <a u="8B76" b="D7 6E"/>
+  <a u="8B77" b="D7 6F"/>
+  <a u="8B78" b="D7 70"/>
+  <a u="8B79" b="D7 71"/>
+  <a u="8B7A" b="D7 72"/>
+  <a u="8B7B" b="D7 73"/>
+  <a u="8B7C" b="D7 74"/>
+  <a u="8B7D" b="D7 75"/>
+  <a u="8B7E" b="D7 76"/>
+  <a u="8B7F" b="D7 77"/>
+  <a u="8B80" b="D7 78"/>
+  <a u="8B81" b="D7 79"/>
+  <a u="8B82" b="D7 7A"/>
+  <a u="8B83" b="D7 7B"/>
+  <a u="8B84" b="D7 7C"/>
+  <a u="8B85" b="D7 7D"/>
+  <a u="8B86" b="D7 7E"/>
+  <a u="8B87" b="D7 80"/>
+  <a u="8B88" b="D7 81"/>
+  <a u="8B89" b="D7 82"/>
+  <a u="8B8A" b="D7 83"/>
+  <a u="8B8B" b="D7 84"/>
+  <a u="8B8C" b="D7 85"/>
+  <a u="8B8D" b="D7 86"/>
+  <a u="8B8E" b="D7 87"/>
+  <a u="8B8F" b="D7 88"/>
+  <a u="8B90" b="D7 89"/>
+  <a u="8B91" b="D7 8A"/>
+  <a u="8B92" b="D7 8B"/>
+  <a u="8B93" b="D7 8C"/>
+  <a u="8B94" b="D7 8D"/>
+  <a u="8B95" b="D7 8E"/>
+  <a u="8B96" b="D7 8F"/>
+  <a u="8B97" b="D7 90"/>
+  <a u="8B98" b="D7 91"/>
+  <a u="8B99" b="D7 92"/>
+  <a u="8B9A" b="D7 93"/>
+  <a u="8B9B" b="D7 94"/>
+  <a u="8B9C" b="D7 95"/>
+  <a u="8B9D" b="D7 96"/>
+  <a u="8B9E" b="D7 97"/>
+  <a u="8B9F" b="D7 98"/>
+  <a u="8BA0" b="DA A5"/>
+  <a u="8BA1" b="BC C6"/>
+  <a u="8BA2" b="B6 A9"/>
+  <a u="8BA3" b="B8 BC"/>
+  <a u="8BA4" b="C8 CF"/>
+  <a u="8BA5" b="BC A5"/>
+  <a u="8BA6" b="DA A6"/>
+  <a u="8BA7" b="DA A7"/>
+  <a u="8BA8" b="CC D6"/>
+  <a u="8BA9" b="C8 C3"/>
+  <a u="8BAA" b="DA A8"/>
+  <a u="8BAB" b="C6 FD"/>
+  <a u="8BAC" b="D7 99"/>
+  <a u="8BAD" b="D1 B5"/>
+  <a u="8BAE" b="D2 E9"/>
+  <a u="8BAF" b="D1 B6"/>
+  <a u="8BB0" b="BC C7"/>
+  <a u="8BB1" b="D7 9A"/>
+  <a u="8BB2" b="BD B2"/>
+  <a u="8BB3" b="BB E4"/>
+  <a u="8BB4" b="DA A9"/>
+  <a u="8BB5" b="DA AA"/>
+  <a u="8BB6" b="D1 C8"/>
+  <a u="8BB7" b="DA AB"/>
+  <a u="8BB8" b="D0 ED"/>
+  <a u="8BB9" b="B6 EF"/>
+  <a u="8BBA" b="C2 DB"/>
+  <a u="8BBB" b="D7 9B"/>
+  <a u="8BBC" b="CB CF"/>
+  <a u="8BBD" b="B7 ED"/>
+  <a u="8BBE" b="C9 E8"/>
+  <a u="8BBF" b="B7 C3"/>
+  <a u="8BC0" b="BE F7"/>
+  <a u="8BC1" b="D6 A4"/>
+  <a u="8BC2" b="DA AC"/>
+  <a u="8BC3" b="DA AD"/>
+  <a u="8BC4" b="C6 C0"/>
+  <a u="8BC5" b="D7 E7"/>
+  <a u="8BC6" b="CA B6"/>
+  <a u="8BC7" b="D7 9C"/>
+  <a u="8BC8" b="D5 A9"/>
+  <a u="8BC9" b="CB DF"/>
+  <a u="8BCA" b="D5 EF"/>
+  <a u="8BCB" b="DA AE"/>
+  <a u="8BCC" b="D6 DF"/>
+  <a u="8BCD" b="B4 CA"/>
+  <a u="8BCE" b="DA B0"/>
+  <a u="8BCF" b="DA AF"/>
+  <a u="8BD0" b="D7 9D"/>
+  <a u="8BD1" b="D2 EB"/>
+  <a u="8BD2" b="DA B1"/>
+  <a u="8BD3" b="DA B2"/>
+  <a u="8BD4" b="DA B3"/>
+  <a u="8BD5" b="CA D4"/>
+  <a u="8BD6" b="DA B4"/>
+  <a u="8BD7" b="CA AB"/>
+  <a u="8BD8" b="DA B5"/>
+  <a u="8BD9" b="DA B6"/>
+  <a u="8BDA" b="B3 CF"/>
+  <a u="8BDB" b="D6 EF"/>
+  <a u="8BDC" b="DA B7"/>
+  <a u="8BDD" b="BB B0"/>
+  <a u="8BDE" b="B5 AE"/>
+  <a u="8BDF" b="DA B8"/>
+  <a u="8BE0" b="DA B9"/>
+  <a u="8BE1" b="B9 EE"/>
+  <a u="8BE2" b="D1 AF"/>
+  <a u="8BE3" b="D2 E8"/>
+  <a u="8BE4" b="DA BA"/>
+  <a u="8BE5" b="B8 C3"/>
+  <a u="8BE6" b="CF EA"/>
+  <a u="8BE7" b="B2 EF"/>
+  <a u="8BE8" b="DA BB"/>
+  <a u="8BE9" b="DA BC"/>
+  <a u="8BEA" b="D7 9E"/>
+  <a u="8BEB" b="BD EB"/>
+  <a u="8BEC" b="CE DC"/>
+  <a u="8BED" b="D3 EF"/>
+  <a u="8BEE" b="DA BD"/>
+  <a u="8BEF" b="CE F3"/>
+  <a u="8BF0" b="DA BE"/>
+  <a u="8BF1" b="D3 D5"/>
+  <a u="8BF2" b="BB E5"/>
+  <a u="8BF3" b="DA BF"/>
+  <a u="8BF4" b="CB B5"/>
+  <a u="8BF5" b="CB D0"/>
+  <a u="8BF6" b="DA C0"/>
+  <a u="8BF7" b="C7 EB"/>
+  <a u="8BF8" b="D6 EE"/>
+  <a u="8BF9" b="DA C1"/>
+  <a u="8BFA" b="C5 B5"/>
+  <a u="8BFB" b="B6 C1"/>
+  <a u="8BFC" b="DA C2"/>
+  <a u="8BFD" b="B7 CC"/>
+  <a u="8BFE" b="BF CE"/>
+  <a u="8BFF" b="DA C3"/>
+  <a u="8C00" b="DA C4"/>
+  <a u="8C01" b="CB AD"/>
+  <a u="8C02" b="DA C5"/>
+  <a u="8C03" b="B5 F7"/>
+  <a u="8C04" b="DA C6"/>
+  <a u="8C05" b="C1 C2"/>
+  <a u="8C06" b="D7 BB"/>
+  <a u="8C07" b="DA C7"/>
+  <a u="8C08" b="CC B8"/>
+  <a u="8C09" b="D7 9F"/>
+  <a u="8C0A" b="D2 EA"/>
+  <a u="8C0B" b="C4 B1"/>
+  <a u="8C0C" b="DA C8"/>
+  <a u="8C0D" b="B5 FD"/>
+  <a u="8C0E" b="BB D1"/>
+  <a u="8C0F" b="DA C9"/>
+  <a u="8C10" b="D0 B3"/>
+  <a u="8C11" b="DA CA"/>
+  <a u="8C12" b="DA CB"/>
+  <a u="8C13" b="CE BD"/>
+  <a u="8C14" b="DA CC"/>
+  <a u="8C15" b="DA CD"/>
+  <a u="8C16" b="DA CE"/>
+  <a u="8C17" b="B2 F7"/>
+  <a u="8C18" b="DA D1"/>
+  <a u="8C19" b="DA CF"/>
+  <a u="8C1A" b="D1 E8"/>
+  <a u="8C1B" b="DA D0"/>
+  <a u="8C1C" b="C3 D5"/>
+  <a u="8C1D" b="DA D2"/>
+  <a u="8C1E" b="D7 A0"/>
+  <a u="8C1F" b="DA D3"/>
+  <a u="8C20" b="DA D4"/>
+  <a u="8C21" b="DA D5"/>
+  <a u="8C22" b="D0 BB"/>
+  <a u="8C23" b="D2 A5"/>
+  <a u="8C24" b="B0 F9"/>
+  <a u="8C25" b="DA D6"/>
+  <a u="8C26" b="C7 AB"/>
+  <a u="8C27" b="DA D7"/>
+  <a u="8C28" b="BD F7"/>
+  <a u="8C29" b="C3 A1"/>
+  <a u="8C2A" b="DA D8"/>
+  <a u="8C2B" b="DA D9"/>
+  <a u="8C2C" b="C3 FD"/>
+  <a u="8C2D" b="CC B7"/>
+  <a u="8C2E" b="DA DA"/>
+  <a u="8C2F" b="DA DB"/>
+  <a u="8C30" b="C0 BE"/>
+  <a u="8C31" b="C6 D7"/>
+  <a u="8C32" b="DA DC"/>
+  <a u="8C33" b="DA DD"/>
+  <a u="8C34" b="C7 B4"/>
+  <a u="8C35" b="DA DE"/>
+  <a u="8C36" b="DA DF"/>
+  <a u="8C37" b="B9 C8"/>
+  <a u="8C38" b="D8 40"/>
+  <a u="8C39" b="D8 41"/>
+  <a u="8C3A" b="D8 42"/>
+  <a u="8C3B" b="D8 43"/>
+  <a u="8C3C" b="D8 44"/>
+  <a u="8C3D" b="D8 45"/>
+  <a u="8C3E" b="D8 46"/>
+  <a u="8C3F" b="D8 47"/>
+  <a u="8C40" b="D8 48"/>
+  <a u="8C41" b="BB ED"/>
+  <a u="8C42" b="D8 49"/>
+  <a u="8C43" b="D8 4A"/>
+  <a u="8C44" b="D8 4B"/>
+  <a u="8C45" b="D8 4C"/>
+  <a u="8C46" b="B6 B9"/>
+  <a u="8C47" b="F4 F8"/>
+  <a u="8C48" b="D8 4D"/>
+  <a u="8C49" b="F4 F9"/>
+  <a u="8C4A" b="D8 4E"/>
+  <a u="8C4B" b="D8 4F"/>
+  <a u="8C4C" b="CD E3"/>
+  <a u="8C4D" b="D8 50"/>
+  <a u="8C4E" b="D8 51"/>
+  <a u="8C4F" b="D8 52"/>
+  <a u="8C50" b="D8 53"/>
+  <a u="8C51" b="D8 54"/>
+  <a u="8C52" b="D8 55"/>
+  <a u="8C53" b="D8 56"/>
+  <a u="8C54" b="D8 57"/>
+  <a u="8C55" b="F5 B9"/>
+  <a u="8C56" b="D8 58"/>
+  <a u="8C57" b="D8 59"/>
+  <a u="8C58" b="D8 5A"/>
+  <a u="8C59" b="D8 5B"/>
+  <a u="8C5A" b="EB E0"/>
+  <a u="8C5B" b="D8 5C"/>
+  <a u="8C5C" b="D8 5D"/>
+  <a u="8C5D" b="D8 5E"/>
+  <a u="8C5E" b="D8 5F"/>
+  <a u="8C5F" b="D8 60"/>
+  <a u="8C60" b="D8 61"/>
+  <a u="8C61" b="CF F3"/>
+  <a u="8C62" b="BB BF"/>
+  <a u="8C63" b="D8 62"/>
+  <a u="8C64" b="D8 63"/>
+  <a u="8C65" b="D8 64"/>
+  <a u="8C66" b="D8 65"/>
+  <a u="8C67" b="D8 66"/>
+  <a u="8C68" b="D8 67"/>
+  <a u="8C69" b="D8 68"/>
+  <a u="8C6A" b="BA C0"/>
+  <a u="8C6B" b="D4 A5"/>
+  <a u="8C6C" b="D8 69"/>
+  <a u="8C6D" b="D8 6A"/>
+  <a u="8C6E" b="D8 6B"/>
+  <a u="8C6F" b="D8 6C"/>
+  <a u="8C70" b="D8 6D"/>
+  <a u="8C71" b="D8 6E"/>
+  <a u="8C72" b="D8 6F"/>
+  <a u="8C73" b="E1 D9"/>
+  <a u="8C74" b="D8 70"/>
+  <a u="8C75" b="D8 71"/>
+  <a u="8C76" b="D8 72"/>
+  <a u="8C77" b="D8 73"/>
+  <a u="8C78" b="F5 F4"/>
+  <a u="8C79" b="B1 AA"/>
+  <a u="8C7A" b="B2 F2"/>
+  <a u="8C7B" b="D8 74"/>
+  <a u="8C7C" b="D8 75"/>
+  <a u="8C7D" b="D8 76"/>
+  <a u="8C7E" b="D8 77"/>
+  <a u="8C7F" b="D8 78"/>
+  <a u="8C80" b="D8 79"/>
+  <a u="8C81" b="D8 7A"/>
+  <a u="8C82" b="F5 F5"/>
+  <a u="8C83" b="D8 7B"/>
+  <a u="8C84" b="D8 7C"/>
+  <a u="8C85" b="F5 F7"/>
+  <a u="8C86" b="D8 7D"/>
+  <a u="8C87" b="D8 7E"/>
+  <a u="8C88" b="D8 80"/>
+  <a u="8C89" b="BA D1"/>
+  <a u="8C8A" b="F5 F6"/>
+  <a u="8C8B" b="D8 81"/>
+  <a u="8C8C" b="C3 B2"/>
+  <a u="8C8D" b="D8 82"/>
+  <a u="8C8E" b="D8 83"/>
+  <a u="8C8F" b="D8 84"/>
+  <a u="8C90" b="D8 85"/>
+  <a u="8C91" b="D8 86"/>
+  <a u="8C92" b="D8 87"/>
+  <a u="8C93" b="D8 88"/>
+  <a u="8C94" b="F5 F9"/>
+  <a u="8C95" b="D8 89"/>
+  <a u="8C96" b="D8 8A"/>
+  <a u="8C97" b="D8 8B"/>
+  <a u="8C98" b="F5 F8"/>
+  <a u="8C99" b="D8 8C"/>
+  <a u="8C9A" b="D8 8D"/>
+  <a u="8C9B" b="D8 8E"/>
+  <a u="8C9C" b="D8 8F"/>
+  <a u="8C9D" b="D8 90"/>
+  <a u="8C9E" b="D8 91"/>
+  <a u="8C9F" b="D8 92"/>
+  <a u="8CA0" b="D8 93"/>
+  <a u="8CA1" b="D8 94"/>
+  <a u="8CA2" b="D8 95"/>
+  <a u="8CA3" b="D8 96"/>
+  <a u="8CA4" b="D8 97"/>
+  <a u="8CA5" b="D8 98"/>
+  <a u="8CA6" b="D8 99"/>
+  <a u="8CA7" b="D8 9A"/>
+  <a u="8CA8" b="D8 9B"/>
+  <a u="8CA9" b="D8 9C"/>
+  <a u="8CAA" b="D8 9D"/>
+  <a u="8CAB" b="D8 9E"/>
+  <a u="8CAC" b="D8 9F"/>
+  <a u="8CAD" b="D8 A0"/>
+  <a u="8CAE" b="D9 40"/>
+  <a u="8CAF" b="D9 41"/>
+  <a u="8CB0" b="D9 42"/>
+  <a u="8CB1" b="D9 43"/>
+  <a u="8CB2" b="D9 44"/>
+  <a u="8CB3" b="D9 45"/>
+  <a u="8CB4" b="D9 46"/>
+  <a u="8CB5" b="D9 47"/>
+  <a u="8CB6" b="D9 48"/>
+  <a u="8CB7" b="D9 49"/>
+  <a u="8CB8" b="D9 4A"/>
+  <a u="8CB9" b="D9 4B"/>
+  <a u="8CBA" b="D9 4C"/>
+  <a u="8CBB" b="D9 4D"/>
+  <a u="8CBC" b="D9 4E"/>
+  <a u="8CBD" b="D9 4F"/>
+  <a u="8CBE" b="D9 50"/>
+  <a u="8CBF" b="D9 51"/>
+  <a u="8CC0" b="D9 52"/>
+  <a u="8CC1" b="D9 53"/>
+  <a u="8CC2" b="D9 54"/>
+  <a u="8CC3" b="D9 55"/>
+  <a u="8CC4" b="D9 56"/>
+  <a u="8CC5" b="D9 57"/>
+  <a u="8CC6" b="D9 58"/>
+  <a u="8CC7" b="D9 59"/>
+  <a u="8CC8" b="D9 5A"/>
+  <a u="8CC9" b="D9 5B"/>
+  <a u="8CCA" b="D9 5C"/>
+  <a u="8CCB" b="D9 5D"/>
+  <a u="8CCC" b="D9 5E"/>
+  <a u="8CCD" b="D9 5F"/>
+  <a u="8CCE" b="D9 60"/>
+  <a u="8CCF" b="D9 61"/>
+  <a u="8CD0" b="D9 62"/>
+  <a u="8CD1" b="D9 63"/>
+  <a u="8CD2" b="D9 64"/>
+  <a u="8CD3" b="D9 65"/>
+  <a u="8CD4" b="D9 66"/>
+  <a u="8CD5" b="D9 67"/>
+  <a u="8CD6" b="D9 68"/>
+  <a u="8CD7" b="D9 69"/>
+  <a u="8CD8" b="D9 6A"/>
+  <a u="8CD9" b="D9 6B"/>
+  <a u="8CDA" b="D9 6C"/>
+  <a u="8CDB" b="D9 6D"/>
+  <a u="8CDC" b="D9 6E"/>
+  <a u="8CDD" b="D9 6F"/>
+  <a u="8CDE" b="D9 70"/>
+  <a u="8CDF" b="D9 71"/>
+  <a u="8CE0" b="D9 72"/>
+  <a u="8CE1" b="D9 73"/>
+  <a u="8CE2" b="D9 74"/>
+  <a u="8CE3" b="D9 75"/>
+  <a u="8CE4" b="D9 76"/>
+  <a u="8CE5" b="D9 77"/>
+  <a u="8CE6" b="D9 78"/>
+  <a u="8CE7" b="D9 79"/>
+  <a u="8CE8" b="D9 7A"/>
+  <a u="8CE9" b="D9 7B"/>
+  <a u="8CEA" b="D9 7C"/>
+  <a u="8CEB" b="D9 7D"/>
+  <a u="8CEC" b="D9 7E"/>
+  <a u="8CED" b="D9 80"/>
+  <a u="8CEE" b="D9 81"/>
+  <a u="8CEF" b="D9 82"/>
+  <a u="8CF0" b="D9 83"/>
+  <a u="8CF1" b="D9 84"/>
+  <a u="8CF2" b="D9 85"/>
+  <a u="8CF3" b="D9 86"/>
+  <a u="8CF4" b="D9 87"/>
+  <a u="8CF5" b="D9 88"/>
+  <a u="8CF6" b="D9 89"/>
+  <a u="8CF7" b="D9 8A"/>
+  <a u="8CF8" b="D9 8B"/>
+  <a u="8CF9" b="D9 8C"/>
+  <a u="8CFA" b="D9 8D"/>
+  <a u="8CFB" b="D9 8E"/>
+  <a u="8CFC" b="D9 8F"/>
+  <a u="8CFD" b="D9 90"/>
+  <a u="8CFE" b="D9 91"/>
+  <a u="8CFF" b="D9 92"/>
+  <a u="8D00" b="D9 93"/>
+  <a u="8D01" b="D9 94"/>
+  <a u="8D02" b="D9 95"/>
+  <a u="8D03" b="D9 96"/>
+  <a u="8D04" b="D9 97"/>
+  <a u="8D05" b="D9 98"/>
+  <a u="8D06" b="D9 99"/>
+  <a u="8D07" b="D9 9A"/>
+  <a u="8D08" b="D9 9B"/>
+  <a u="8D09" b="D9 9C"/>
+  <a u="8D0A" b="D9 9D"/>
+  <a u="8D0B" b="D9 9E"/>
+  <a u="8D0C" b="D9 9F"/>
+  <a u="8D0D" b="D9 A0"/>
+  <a u="8D0E" b="DA 40"/>
+  <a u="8D0F" b="DA 41"/>
+  <a u="8D10" b="DA 42"/>
+  <a u="8D11" b="DA 43"/>
+  <a u="8D12" b="DA 44"/>
+  <a u="8D13" b="DA 45"/>
+  <a u="8D14" b="DA 46"/>
+  <a u="8D15" b="DA 47"/>
+  <a u="8D16" b="DA 48"/>
+  <a u="8D17" b="DA 49"/>
+  <a u="8D18" b="DA 4A"/>
+  <a u="8D19" b="DA 4B"/>
+  <a u="8D1A" b="DA 4C"/>
+  <a u="8D1B" b="DA 4D"/>
+  <a u="8D1C" b="DA 4E"/>
+  <a u="8D1D" b="B1 B4"/>
+  <a u="8D1E" b="D5 EA"/>
+  <a u="8D1F" b="B8 BA"/>
+  <a u="8D20" b="DA 4F"/>
+  <a u="8D21" b="B9 B1"/>
+  <a u="8D22" b="B2 C6"/>
+  <a u="8D23" b="D4 F0"/>
+  <a u="8D24" b="CF CD"/>
+  <a u="8D25" b="B0 DC"/>
+  <a u="8D26" b="D5 CB"/>
+  <a u="8D27" b="BB F5"/>
+  <a u="8D28" b="D6 CA"/>
+  <a u="8D29" b="B7 B7"/>
+  <a u="8D2A" b="CC B0"/>
+  <a u="8D2B" b="C6 B6"/>
+  <a u="8D2C" b="B1 E1"/>
+  <a u="8D2D" b="B9 BA"/>
+  <a u="8D2E" b="D6 FC"/>
+  <a u="8D2F" b="B9 E1"/>
+  <a u="8D30" b="B7 A1"/>
+  <a u="8D31" b="BC FA"/>
+  <a u="8D32" b="EA DA"/>
+  <a u="8D33" b="EA DB"/>
+  <a u="8D34" b="CC F9"/>
+  <a u="8D35" b="B9 F3"/>
+  <a u="8D36" b="EA DC"/>
+  <a u="8D37" b="B4 FB"/>
+  <a u="8D38" b="C3 B3"/>
+  <a u="8D39" b="B7 D1"/>
+  <a u="8D3A" b="BA D8"/>
+  <a u="8D3B" b="EA DD"/>
+  <a u="8D3C" b="D4 F4"/>
+  <a u="8D3D" b="EA DE"/>
+  <a u="8D3E" b="BC D6"/>
+  <a u="8D3F" b="BB DF"/>
+  <a u="8D40" b="EA DF"/>
+  <a u="8D41" b="C1 DE"/>
+  <a u="8D42" b="C2 B8"/>
+  <a u="8D43" b="D4 DF"/>
+  <a u="8D44" b="D7 CA"/>
+  <a u="8D45" b="EA E0"/>
+  <a u="8D46" b="EA E1"/>
+  <a u="8D47" b="EA E4"/>
+  <a u="8D48" b="EA E2"/>
+  <a u="8D49" b="EA E3"/>
+  <a u="8D4A" b="C9 DE"/>
+  <a u="8D4B" b="B8 B3"/>
+  <a u="8D4C" b="B6 C4"/>
+  <a u="8D4D" b="EA E5"/>
+  <a u="8D4E" b="CA EA"/>
+  <a u="8D4F" b="C9 CD"/>
+  <a u="8D50" b="B4 CD"/>
+  <a u="8D51" b="DA 50"/>
+  <a u="8D52" b="DA 51"/>
+  <a u="8D53" b="E2 D9"/>
+  <a u="8D54" b="C5 E2"/>
+  <a u="8D55" b="EA E6"/>
+  <a u="8D56" b="C0 B5"/>
+  <a u="8D57" b="DA 52"/>
+  <a u="8D58" b="D7 B8"/>
+  <a u="8D59" b="EA E7"/>
+  <a u="8D5A" b="D7 AC"/>
+  <a u="8D5B" b="C8 FC"/>
+  <a u="8D5C" b="D8 D3"/>
+  <a u="8D5D" b="D8 CD"/>
+  <a u="8D5E" b="D4 DE"/>
+  <a u="8D5F" b="DA 53"/>
+  <a u="8D60" b="D4 F9"/>
+  <a u="8D61" b="C9 C4"/>
+  <a u="8D62" b="D3 AE"/>
+  <a u="8D63" b="B8 D3"/>
+  <a u="8D64" b="B3 E0"/>
+  <a u="8D65" b="DA 54"/>
+  <a u="8D66" b="C9 E2"/>
+  <a u="8D67" b="F4 F6"/>
+  <a u="8D68" b="DA 55"/>
+  <a u="8D69" b="DA 56"/>
+  <a u="8D6A" b="DA 57"/>
+  <a u="8D6B" b="BA D5"/>
+  <a u="8D6C" b="DA 58"/>
+  <a u="8D6D" b="F4 F7"/>
+  <a u="8D6E" b="DA 59"/>
+  <a u="8D6F" b="DA 5A"/>
+  <a u="8D70" b="D7 DF"/>
+  <a u="8D71" b="DA 5B"/>
+  <a u="8D72" b="DA 5C"/>
+  <a u="8D73" b="F4 F1"/>
+  <a u="8D74" b="B8 B0"/>
+  <a u="8D75" b="D5 D4"/>
+  <a u="8D76" b="B8 CF"/>
+  <a u="8D77" b="C6 F0"/>
+  <a u="8D78" b="DA 5D"/>
+  <a u="8D79" b="DA 5E"/>
+  <a u="8D7A" b="DA 5F"/>
+  <a u="8D7B" b="DA 60"/>
+  <a u="8D7C" b="DA 61"/>
+  <a u="8D7D" b="DA 62"/>
+  <a u="8D7E" b="DA 63"/>
+  <a u="8D7F" b="DA 64"/>
+  <a u="8D80" b="DA 65"/>
+  <a u="8D81" b="B3 C3"/>
+  <a u="8D82" b="DA 66"/>
+  <a u="8D83" b="DA 67"/>
+  <a u="8D84" b="F4 F2"/>
+  <a u="8D85" b="B3 AC"/>
+  <a u="8D86" b="DA 68"/>
+  <a u="8D87" b="DA 69"/>
+  <a u="8D88" b="DA 6A"/>
+  <a u="8D89" b="DA 6B"/>
+  <a u="8D8A" b="D4 BD"/>
+  <a u="8D8B" b="C7 F7"/>
+  <a u="8D8C" b="DA 6C"/>
+  <a u="8D8D" b="DA 6D"/>
+  <a u="8D8E" b="DA 6E"/>
+  <a u="8D8F" b="DA 6F"/>
+  <a u="8D90" b="DA 70"/>
+  <a u="8D91" b="F4 F4"/>
+  <a u="8D92" b="DA 71"/>
+  <a u="8D93" b="DA 72"/>
+  <a u="8D94" b="F4 F3"/>
+  <a u="8D95" b="DA 73"/>
+  <a u="8D96" b="DA 74"/>
+  <a u="8D97" b="DA 75"/>
+  <a u="8D98" b="DA 76"/>
+  <a u="8D99" b="DA 77"/>
+  <a u="8D9A" b="DA 78"/>
+  <a u="8D9B" b="DA 79"/>
+  <a u="8D9C" b="DA 7A"/>
+  <a u="8D9D" b="DA 7B"/>
+  <a u="8D9E" b="DA 7C"/>
+  <a u="8D9F" b="CC CB"/>
+  <a u="8DA0" b="DA 7D"/>
+  <a u="8DA1" b="DA 7E"/>
+  <a u="8DA2" b="DA 80"/>
+  <a u="8DA3" b="C8 A4"/>
+  <a u="8DA4" b="DA 81"/>
+  <a u="8DA5" b="DA 82"/>
+  <a u="8DA6" b="DA 83"/>
+  <a u="8DA7" b="DA 84"/>
+  <a u="8DA8" b="DA 85"/>
+  <a u="8DA9" b="DA 86"/>
+  <a u="8DAA" b="DA 87"/>
+  <a u="8DAB" b="DA 88"/>
+  <a u="8DAC" b="DA 89"/>
+  <a u="8DAD" b="DA 8A"/>
+  <a u="8DAE" b="DA 8B"/>
+  <a u="8DAF" b="DA 8C"/>
+  <a u="8DB0" b="DA 8D"/>
+  <a u="8DB1" b="F4 F5"/>
+  <a u="8DB2" b="DA 8E"/>
+  <a u="8DB3" b="D7 E3"/>
+  <a u="8DB4" b="C5 BF"/>
+  <a u="8DB5" b="F5 C0"/>
+  <a u="8DB6" b="DA 8F"/>
+  <a u="8DB7" b="DA 90"/>
+  <a u="8DB8" b="F5 BB"/>
+  <a u="8DB9" b="DA 91"/>
+  <a u="8DBA" b="F5 C3"/>
+  <a u="8DBB" b="DA 92"/>
+  <a u="8DBC" b="F5 C2"/>
+  <a u="8DBD" b="DA 93"/>
+  <a u="8DBE" b="D6 BA"/>
+  <a u="8DBF" b="F5 C1"/>
+  <a u="8DC0" b="DA 94"/>
+  <a u="8DC1" b="DA 95"/>
+  <a u="8DC2" b="DA 96"/>
+  <a u="8DC3" b="D4 BE"/>
+  <a u="8DC4" b="F5 C4"/>
+  <a u="8DC5" b="DA 97"/>
+  <a u="8DC6" b="F5 CC"/>
+  <a u="8DC7" b="DA 98"/>
+  <a u="8DC8" b="DA 99"/>
+  <a u="8DC9" b="DA 9A"/>
+  <a u="8DCA" b="DA 9B"/>
+  <a u="8DCB" b="B0 CF"/>
+  <a u="8DCC" b="B5 F8"/>
+  <a u="8DCD" b="DA 9C"/>
+  <a u="8DCE" b="F5 C9"/>
+  <a u="8DCF" b="F5 CA"/>
+  <a u="8DD0" b="DA 9D"/>
+  <a u="8DD1" b="C5 DC"/>
+  <a u="8DD2" b="DA 9E"/>
+  <a u="8DD3" b="DA 9F"/>
+  <a u="8DD4" b="DA A0"/>
+  <a u="8DD5" b="DB 40"/>
+  <a u="8DD6" b="F5 C5"/>
+  <a u="8DD7" b="F5 C6"/>
+  <a u="8DD8" b="DB 41"/>
+  <a u="8DD9" b="DB 42"/>
+  <a u="8DDA" b="F5 C7"/>
+  <a u="8DDB" b="F5 CB"/>
+  <a u="8DDC" b="DB 43"/>
+  <a u="8DDD" b="BE E0"/>
+  <a u="8DDE" b="F5 C8"/>
+  <a u="8DDF" b="B8 FA"/>
+  <a u="8DE0" b="DB 44"/>
+  <a u="8DE1" b="DB 45"/>
+  <a u="8DE2" b="DB 46"/>
+  <a u="8DE3" b="F5 D0"/>
+  <a u="8DE4" b="F5 D3"/>
+  <a u="8DE5" b="DB 47"/>
+  <a u="8DE6" b="DB 48"/>
+  <a u="8DE7" b="DB 49"/>
+  <a u="8DE8" b="BF E7"/>
+  <a u="8DE9" b="DB 4A"/>
+  <a u="8DEA" b="B9 F2"/>
+  <a u="8DEB" b="F5 BC"/>
+  <a u="8DEC" b="F5 CD"/>
+  <a u="8DED" b="DB 4B"/>
+  <a u="8DEE" b="DB 4C"/>
+  <a u="8DEF" b="C2 B7"/>
+  <a u="8DF0" b="DB 4D"/>
+  <a u="8DF1" b="DB 4E"/>
+  <a u="8DF2" b="DB 4F"/>
+  <a u="8DF3" b="CC F8"/>
+  <a u="8DF4" b="DB 50"/>
+  <a u="8DF5" b="BC F9"/>
+  <a u="8DF6" b="DB 51"/>
+  <a u="8DF7" b="F5 CE"/>
+  <a u="8DF8" b="F5 CF"/>
+  <a u="8DF9" b="F5 D1"/>
+  <a u="8DFA" b="B6 E5"/>
+  <a u="8DFB" b="F5 D2"/>
+  <a u="8DFC" b="DB 52"/>
+  <a u="8DFD" b="F5 D5"/>
+  <a u="8DFE" b="DB 53"/>
+  <a u="8DFF" b="DB 54"/>
+  <a u="8E00" b="DB 55"/>
+  <a u="8E01" b="DB 56"/>
+  <a u="8E02" b="DB 57"/>
+  <a u="8E03" b="DB 58"/>
+  <a u="8E04" b="DB 59"/>
+  <a u="8E05" b="F5 BD"/>
+  <a u="8E06" b="DB 5A"/>
+  <a u="8E07" b="DB 5B"/>
+  <a u="8E08" b="DB 5C"/>
+  <a u="8E09" b="F5 D4"/>
+  <a u="8E0A" b="D3 BB"/>
+  <a u="8E0B" b="DB 5D"/>
+  <a u="8E0C" b="B3 EC"/>
+  <a u="8E0D" b="DB 5E"/>
+  <a u="8E0E" b="DB 5F"/>
+  <a u="8E0F" b="CC A4"/>
+  <a u="8E10" b="DB 60"/>
+  <a u="8E11" b="DB 61"/>
+  <a u="8E12" b="DB 62"/>
+  <a u="8E13" b="DB 63"/>
+  <a u="8E14" b="F5 D6"/>
+  <a u="8E15" b="DB 64"/>
+  <a u="8E16" b="DB 65"/>
+  <a u="8E17" b="DB 66"/>
+  <a u="8E18" b="DB 67"/>
+  <a u="8E19" b="DB 68"/>
+  <a u="8E1A" b="DB 69"/>
+  <a u="8E1B" b="DB 6A"/>
+  <a u="8E1C" b="DB 6B"/>
+  <a u="8E1D" b="F5 D7"/>
+  <a u="8E1E" b="BE E1"/>
+  <a u="8E1F" b="F5 D8"/>
+  <a u="8E20" b="DB 6C"/>
+  <a u="8E21" b="DB 6D"/>
+  <a u="8E22" b="CC DF"/>
+  <a u="8E23" b="F5 DB"/>
+  <a u="8E24" b="DB 6E"/>
+  <a u="8E25" b="DB 6F"/>
+  <a u="8E26" b="DB 70"/>
+  <a u="8E27" b="DB 71"/>
+  <a u="8E28" b="DB 72"/>
+  <a u="8E29" b="B2 C8"/>
+  <a u="8E2A" b="D7 D9"/>
+  <a u="8E2B" b="DB 73"/>
+  <a u="8E2C" b="F5 D9"/>
+  <a u="8E2D" b="DB 74"/>
+  <a u="8E2E" b="F5 DA"/>
+  <a u="8E2F" b="F5 DC"/>
+  <a u="8E30" b="DB 75"/>
+  <a u="8E31" b="F5 E2"/>
+  <a u="8E32" b="DB 76"/>
+  <a u="8E33" b="DB 77"/>
+  <a u="8E34" b="DB 78"/>
+  <a u="8E35" b="F5 E0"/>
+  <a u="8E36" b="DB 79"/>
+  <a u="8E37" b="DB 7A"/>
+  <a u="8E38" b="DB 7B"/>
+  <a u="8E39" b="F5 DF"/>
+  <a u="8E3A" b="F5 DD"/>
+  <a u="8E3B" b="DB 7C"/>
+  <a u="8E3C" b="DB 7D"/>
+  <a u="8E3D" b="F5 E1"/>
+  <a u="8E3E" b="DB 7E"/>
+  <a u="8E3F" b="DB 80"/>
+  <a u="8E40" b="F5 DE"/>
+  <a u="8E41" b="F5 E4"/>
+  <a u="8E42" b="F5 E5"/>
+  <a u="8E43" b="DB 81"/>
+  <a u="8E44" b="CC E3"/>
+  <a u="8E45" b="DB 82"/>
+  <a u="8E46" b="DB 83"/>
+  <a u="8E47" b="E5 BF"/>
+  <a u="8E48" b="B5 B8"/>
+  <a u="8E49" b="F5 E3"/>
+  <a u="8E4A" b="F5 E8"/>
+  <a u="8E4B" b="CC A3"/>
+  <a u="8E4C" b="DB 84"/>
+  <a u="8E4D" b="DB 85"/>
+  <a u="8E4E" b="DB 86"/>
+  <a u="8E4F" b="DB 87"/>
+  <a u="8E50" b="DB 88"/>
+  <a u="8E51" b="F5 E6"/>
+  <a u="8E52" b="F5 E7"/>
+  <a u="8E53" b="DB 89"/>
+  <a u="8E54" b="DB 8A"/>
+  <a u="8E55" b="DB 8B"/>
+  <a u="8E56" b="DB 8C"/>
+  <a u="8E57" b="DB 8D"/>
+  <a u="8E58" b="DB 8E"/>
+  <a u="8E59" b="F5 BE"/>
+  <a u="8E5A" b="DB 8F"/>
+  <a u="8E5B" b="DB 90"/>
+  <a u="8E5C" b="DB 91"/>
+  <a u="8E5D" b="DB 92"/>
+  <a u="8E5E" b="DB 93"/>
+  <a u="8E5F" b="DB 94"/>
+  <a u="8E60" b="DB 95"/>
+  <a u="8E61" b="DB 96"/>
+  <a u="8E62" b="DB 97"/>
+  <a u="8E63" b="DB 98"/>
+  <a u="8E64" b="DB 99"/>
+  <a u="8E65" b="DB 9A"/>
+  <a u="8E66" b="B1 C4"/>
+  <a u="8E67" b="DB 9B"/>
+  <a u="8E68" b="DB 9C"/>
+  <a u="8E69" b="F5 BF"/>
+  <a u="8E6A" b="DB 9D"/>
+  <a u="8E6B" b="DB 9E"/>
+  <a u="8E6C" b="B5 C5"/>
+  <a u="8E6D" b="B2 E4"/>
+  <a u="8E6E" b="DB 9F"/>
+  <a u="8E6F" b="F5 EC"/>
+  <a u="8E70" b="F5 E9"/>
+  <a u="8E71" b="DB A0"/>
+  <a u="8E72" b="B6 D7"/>
+  <a u="8E73" b="DC 40"/>
+  <a u="8E74" b="F5 ED"/>
+  <a u="8E75" b="DC 41"/>
+  <a u="8E76" b="F5 EA"/>
+  <a u="8E77" b="DC 42"/>
+  <a u="8E78" b="DC 43"/>
+  <a u="8E79" b="DC 44"/>
+  <a u="8E7A" b="DC 45"/>
+  <a u="8E7B" b="DC 46"/>
+  <a u="8E7C" b="F5 EB"/>
+  <a u="8E7D" b="DC 47"/>
+  <a u="8E7E" b="DC 48"/>
+  <a u="8E7F" b="B4 DA"/>
+  <a u="8E80" b="DC 49"/>
+  <a u="8E81" b="D4 EA"/>
+  <a u="8E82" b="DC 4A"/>
+  <a u="8E83" b="DC 4B"/>
+  <a u="8E84" b="DC 4C"/>
+  <a u="8E85" b="F5 EE"/>
+  <a u="8E86" b="DC 4D"/>
+  <a u="8E87" b="B3 F9"/>
+  <a u="8E88" b="DC 4E"/>
+  <a u="8E89" b="DC 4F"/>
+  <a u="8E8A" b="DC 50"/>
+  <a u="8E8B" b="DC 51"/>
+  <a u="8E8C" b="DC 52"/>
+  <a u="8E8D" b="DC 53"/>
+  <a u="8E8E" b="DC 54"/>
+  <a u="8E8F" b="F5 EF"/>
+  <a u="8E90" b="F5 F1"/>
+  <a u="8E91" b="DC 55"/>
+  <a u="8E92" b="DC 56"/>
+  <a u="8E93" b="DC 57"/>
+  <a u="8E94" b="F5 F0"/>
+  <a u="8E95" b="DC 58"/>
+  <a u="8E96" b="DC 59"/>
+  <a u="8E97" b="DC 5A"/>
+  <a u="8E98" b="DC 5B"/>
+  <a u="8E99" b="DC 5C"/>
+  <a u="8E9A" b="DC 5D"/>
+  <a u="8E9B" b="DC 5E"/>
+  <a u="8E9C" b="F5 F2"/>
+  <a u="8E9D" b="DC 5F"/>
+  <a u="8E9E" b="F5 F3"/>
+  <a u="8E9F" b="DC 60"/>
+  <a u="8EA0" b="DC 61"/>
+  <a u="8EA1" b="DC 62"/>
+  <a u="8EA2" b="DC 63"/>
+  <a u="8EA3" b="DC 64"/>
+  <a u="8EA4" b="DC 65"/>
+  <a u="8EA5" b="DC 66"/>
+  <a u="8EA6" b="DC 67"/>
+  <a u="8EA7" b="DC 68"/>
+  <a u="8EA8" b="DC 69"/>
+  <a u="8EA9" b="DC 6A"/>
+  <a u="8EAA" b="DC 6B"/>
+  <a u="8EAB" b="C9 ED"/>
+  <a u="8EAC" b="B9 AA"/>
+  <a u="8EAD" b="DC 6C"/>
+  <a u="8EAE" b="DC 6D"/>
+  <a u="8EAF" b="C7 FB"/>
+  <a u="8EB0" b="DC 6E"/>
+  <a u="8EB1" b="DC 6F"/>
+  <a u="8EB2" b="B6 E3"/>
+  <a u="8EB3" b="DC 70"/>
+  <a u="8EB4" b="DC 71"/>
+  <a u="8EB5" b="DC 72"/>
+  <a u="8EB6" b="DC 73"/>
+  <a u="8EB7" b="DC 74"/>
+  <a u="8EB8" b="DC 75"/>
+  <a u="8EB9" b="DC 76"/>
+  <a u="8EBA" b="CC C9"/>
+  <a u="8EBB" b="DC 77"/>
+  <a u="8EBC" b="DC 78"/>
+  <a u="8EBD" b="DC 79"/>
+  <a u="8EBE" b="DC 7A"/>
+  <a u="8EBF" b="DC 7B"/>
+  <a u="8EC0" b="DC 7C"/>
+  <a u="8EC1" b="DC 7D"/>
+  <a u="8EC2" b="DC 7E"/>
+  <a u="8EC3" b="DC 80"/>
+  <a u="8EC4" b="DC 81"/>
+  <a u="8EC5" b="DC 82"/>
+  <a u="8EC6" b="DC 83"/>
+  <a u="8EC7" b="DC 84"/>
+  <a u="8EC8" b="DC 85"/>
+  <a u="8EC9" b="DC 86"/>
+  <a u="8ECA" b="DC 87"/>
+  <a u="8ECB" b="DC 88"/>
+  <a u="8ECC" b="DC 89"/>
+  <a u="8ECD" b="DC 8A"/>
+  <a u="8ECE" b="EA A6"/>
+  <a u="8ECF" b="DC 8B"/>
+  <a u="8ED0" b="DC 8C"/>
+  <a u="8ED1" b="DC 8D"/>
+  <a u="8ED2" b="DC 8E"/>
+  <a u="8ED3" b="DC 8F"/>
+  <a u="8ED4" b="DC 90"/>
+  <a u="8ED5" b="DC 91"/>
+  <a u="8ED6" b="DC 92"/>
+  <a u="8ED7" b="DC 93"/>
+  <a u="8ED8" b="DC 94"/>
+  <a u="8ED9" b="DC 95"/>
+  <a u="8EDA" b="DC 96"/>
+  <a u="8EDB" b="DC 97"/>
+  <a u="8EDC" b="DC 98"/>
+  <a u="8EDD" b="DC 99"/>
+  <a u="8EDE" b="DC 9A"/>
+  <a u="8EDF" b="DC 9B"/>
+  <a u="8EE0" b="DC 9C"/>
+  <a u="8EE1" b="DC 9D"/>
+  <a u="8EE2" b="DC 9E"/>
+  <a u="8EE3" b="DC 9F"/>
+  <a u="8EE4" b="DC A0"/>
+  <a u="8EE5" b="DD 40"/>
+  <a u="8EE6" b="DD 41"/>
+  <a u="8EE7" b="DD 42"/>
+  <a u="8EE8" b="DD 43"/>
+  <a u="8EE9" b="DD 44"/>
+  <a u="8EEA" b="DD 45"/>
+  <a u="8EEB" b="DD 46"/>
+  <a u="8EEC" b="DD 47"/>
+  <a u="8EED" b="DD 48"/>
+  <a u="8EEE" b="DD 49"/>
+  <a u="8EEF" b="DD 4A"/>
+  <a u="8EF0" b="DD 4B"/>
+  <a u="8EF1" b="DD 4C"/>
+  <a u="8EF2" b="DD 4D"/>
+  <a u="8EF3" b="DD 4E"/>
+  <a u="8EF4" b="DD 4F"/>
+  <a u="8EF5" b="DD 50"/>
+  <a u="8EF6" b="DD 51"/>
+  <a u="8EF7" b="DD 52"/>
+  <a u="8EF8" b="DD 53"/>
+  <a u="8EF9" b="DD 54"/>
+  <a u="8EFA" b="DD 55"/>
+  <a u="8EFB" b="DD 56"/>
+  <a u="8EFC" b="DD 57"/>
+  <a u="8EFD" b="DD 58"/>
+  <a u="8EFE" b="DD 59"/>
+  <a u="8EFF" b="DD 5A"/>
+  <a u="8F00" b="DD 5B"/>
+  <a u="8F01" b="DD 5C"/>
+  <a u="8F02" b="DD 5D"/>
+  <a u="8F03" b="DD 5E"/>
+  <a u="8F04" b="DD 5F"/>
+  <a u="8F05" b="DD 60"/>
+  <a u="8F06" b="DD 61"/>
+  <a u="8F07" b="DD 62"/>
+  <a u="8F08" b="DD 63"/>
+  <a u="8F09" b="DD 64"/>
+  <a u="8F0A" b="DD 65"/>
+  <a u="8F0B" b="DD 66"/>
+  <a u="8F0C" b="DD 67"/>
+  <a u="8F0D" b="DD 68"/>
+  <a u="8F0E" b="DD 69"/>
+  <a u="8F0F" b="DD 6A"/>
+  <a u="8F10" b="DD 6B"/>
+  <a u="8F11" b="DD 6C"/>
+  <a u="8F12" b="DD 6D"/>
+  <a u="8F13" b="DD 6E"/>
+  <a u="8F14" b="DD 6F"/>
+  <a u="8F15" b="DD 70"/>
+  <a u="8F16" b="DD 71"/>
+  <a u="8F17" b="DD 72"/>
+  <a u="8F18" b="DD 73"/>
+  <a u="8F19" b="DD 74"/>
+  <a u="8F1A" b="DD 75"/>
+  <a u="8F1B" b="DD 76"/>
+  <a u="8F1C" b="DD 77"/>
+  <a u="8F1D" b="DD 78"/>
+  <a u="8F1E" b="DD 79"/>
+  <a u="8F1F" b="DD 7A"/>
+  <a u="8F20" b="DD 7B"/>
+  <a u="8F21" b="DD 7C"/>
+  <a u="8F22" b="DD 7D"/>
+  <a u="8F23" b="DD 7E"/>
+  <a u="8F24" b="DD 80"/>
+  <a u="8F25" b="DD 81"/>
+  <a u="8F26" b="DD 82"/>
+  <a u="8F27" b="DD 83"/>
+  <a u="8F28" b="DD 84"/>
+  <a u="8F29" b="DD 85"/>
+  <a u="8F2A" b="DD 86"/>
+  <a u="8F2B" b="DD 87"/>
+  <a u="8F2C" b="DD 88"/>
+  <a u="8F2D" b="DD 89"/>
+  <a u="8F2E" b="DD 8A"/>
+  <a u="8F2F" b="DD 8B"/>
+  <a u="8F30" b="DD 8C"/>
+  <a u="8F31" b="DD 8D"/>
+  <a u="8F32" b="DD 8E"/>
+  <a u="8F33" b="DD 8F"/>
+  <a u="8F34" b="DD 90"/>
+  <a u="8F35" b="DD 91"/>
+  <a u="8F36" b="DD 92"/>
+  <a u="8F37" b="DD 93"/>
+  <a u="8F38" b="DD 94"/>
+  <a u="8F39" b="DD 95"/>
+  <a u="8F3A" b="DD 96"/>
+  <a u="8F3B" b="DD 97"/>
+  <a u="8F3C" b="DD 98"/>
+  <a u="8F3D" b="DD 99"/>
+  <a u="8F3E" b="DD 9A"/>
+  <a u="8F3F" b="DD 9B"/>
+  <a u="8F40" b="DD 9C"/>
+  <a u="8F41" b="DD 9D"/>
+  <a u="8F42" b="DD 9E"/>
+  <a u="8F43" b="DD 9F"/>
+  <a u="8F44" b="DD A0"/>
+  <a u="8F45" b="DE 40"/>
+  <a u="8F46" b="DE 41"/>
+  <a u="8F47" b="DE 42"/>
+  <a u="8F48" b="DE 43"/>
+  <a u="8F49" b="DE 44"/>
+  <a u="8F4A" b="DE 45"/>
+  <a u="8F4B" b="DE 46"/>
+  <a u="8F4C" b="DE 47"/>
+  <a u="8F4D" b="DE 48"/>
+  <a u="8F4E" b="DE 49"/>
+  <a u="8F4F" b="DE 4A"/>
+  <a u="8F50" b="DE 4B"/>
+  <a u="8F51" b="DE 4C"/>
+  <a u="8F52" b="DE 4D"/>
+  <a u="8F53" b="DE 4E"/>
+  <a u="8F54" b="DE 4F"/>
+  <a u="8F55" b="DE 50"/>
+  <a u="8F56" b="DE 51"/>
+  <a u="8F57" b="DE 52"/>
+  <a u="8F58" b="DE 53"/>
+  <a u="8F59" b="DE 54"/>
+  <a u="8F5A" b="DE 55"/>
+  <a u="8F5B" b="DE 56"/>
+  <a u="8F5C" b="DE 57"/>
+  <a u="8F5D" b="DE 58"/>
+  <a u="8F5E" b="DE 59"/>
+  <a u="8F5F" b="DE 5A"/>
+  <a u="8F60" b="DE 5B"/>
+  <a u="8F61" b="DE 5C"/>
+  <a u="8F62" b="DE 5D"/>
+  <a u="8F63" b="DE 5E"/>
+  <a u="8F64" b="DE 5F"/>
+  <a u="8F65" b="DE 60"/>
+  <a u="8F66" b="B3 B5"/>
+  <a u="8F67" b="D4 FE"/>
+  <a u="8F68" b="B9 EC"/>
+  <a u="8F69" b="D0 F9"/>
+  <a u="8F6A" b="DE 61"/>
+  <a u="8F6B" b="E9 ED"/>
+  <a u="8F6C" b="D7 AA"/>
+  <a u="8F6D" b="E9 EE"/>
+  <a u="8F6E" b="C2 D6"/>
+  <a u="8F6F" b="C8 ED"/>
+  <a u="8F70" b="BA E4"/>
+  <a u="8F71" b="E9 EF"/>
+  <a u="8F72" b="E9 F0"/>
+  <a u="8F73" b="E9 F1"/>
+  <a u="8F74" b="D6 E1"/>
+  <a u="8F75" b="E9 F2"/>
+  <a u="8F76" b="E9 F3"/>
+  <a u="8F77" b="E9 F5"/>
+  <a u="8F78" b="E9 F4"/>
+  <a u="8F79" b="E9 F6"/>
+  <a u="8F7A" b="E9 F7"/>
+  <a u="8F7B" b="C7 E1"/>
+  <a u="8F7C" b="E9 F8"/>
+  <a u="8F7D" b="D4 D8"/>
+  <a u="8F7E" b="E9 F9"/>
+  <a u="8F7F" b="BD CE"/>
+  <a u="8F80" b="DE 62"/>
+  <a u="8F81" b="E9 FA"/>
+  <a u="8F82" b="E9 FB"/>
+  <a u="8F83" b="BD CF"/>
+  <a u="8F84" b="E9 FC"/>
+  <a u="8F85" b="B8 A8"/>
+  <a u="8F86" b="C1 BE"/>
+  <a u="8F87" b="E9 FD"/>
+  <a u="8F88" b="B1 B2"/>
+  <a u="8F89" b="BB D4"/>
+  <a u="8F8A" b="B9 F5"/>
+  <a u="8F8B" b="E9 FE"/>
+  <a u="8F8C" b="DE 63"/>
+  <a u="8F8D" b="EA A1"/>
+  <a u="8F8E" b="EA A2"/>
+  <a u="8F8F" b="EA A3"/>
+  <a u="8F90" b="B7 F8"/>
+  <a u="8F91" b="BC AD"/>
+  <a u="8F92" b="DE 64"/>
+  <a u="8F93" b="CA E4"/>
+  <a u="8F94" b="E0 CE"/>
+  <a u="8F95" b="D4 AF"/>
+  <a u="8F96" b="CF BD"/>
+  <a u="8F97" b="D5 B7"/>
+  <a u="8F98" b="EA A4"/>
+  <a u="8F99" b="D5 DE"/>
+  <a u="8F9A" b="EA A5"/>
+  <a u="8F9B" b="D0 C1"/>
+  <a u="8F9C" b="B9 BC"/>
+  <a u="8F9D" b="DE 65"/>
+  <a u="8F9E" b="B4 C7"/>
+  <a u="8F9F" b="B1 D9"/>
+  <a u="8FA0" b="DE 66"/>
+  <a u="8FA1" b="DE 67"/>
+  <a u="8FA2" b="DE 68"/>
+  <a u="8FA3" b="C0 B1"/>
+  <a u="8FA4" b="DE 69"/>
+  <a u="8FA5" b="DE 6A"/>
+  <a u="8FA6" b="DE 6B"/>
+  <a u="8FA7" b="DE 6C"/>
+  <a u="8FA8" b="B1 E6"/>
+  <a u="8FA9" b="B1 E7"/>
+  <a u="8FAA" b="DE 6D"/>
+  <a u="8FAB" b="B1 E8"/>
+  <a u="8FAC" b="DE 6E"/>
+  <a u="8FAD" b="DE 6F"/>
+  <a u="8FAE" b="DE 70"/>
+  <a u="8FAF" b="DE 71"/>
+  <a u="8FB0" b="B3 BD"/>
+  <a u="8FB1" b="C8 E8"/>
+  <a u="8FB2" b="DE 72"/>
+  <a u="8FB3" b="DE 73"/>
+  <a u="8FB4" b="DE 74"/>
+  <a u="8FB5" b="DE 75"/>
+  <a u="8FB6" b="E5 C1"/>
+  <a u="8FB7" b="DE 76"/>
+  <a u="8FB8" b="DE 77"/>
+  <a u="8FB9" b="B1 DF"/>
+  <a u="8FBA" b="DE 78"/>
+  <a u="8FBB" b="DE 79"/>
+  <a u="8FBC" b="DE 7A"/>
+  <a u="8FBD" b="C1 C9"/>
+  <a u="8FBE" b="B4 EF"/>
+  <a u="8FBF" b="DE 7B"/>
+  <a u="8FC0" b="DE 7C"/>
+  <a u="8FC1" b="C7 A8"/>
+  <a u="8FC2" b="D3 D8"/>
+  <a u="8FC3" b="DE 7D"/>
+  <a u="8FC4" b="C6 F9"/>
+  <a u="8FC5" b="D1 B8"/>
+  <a u="8FC6" b="DE 7E"/>
+  <a u="8FC7" b="B9 FD"/>
+  <a u="8FC8" b="C2 F5"/>
+  <a u="8FC9" b="DE 80"/>
+  <a u="8FCA" b="DE 81"/>
+  <a u="8FCB" b="DE 82"/>
+  <a u="8FCC" b="DE 83"/>
+  <a u="8FCD" b="DE 84"/>
+  <a u="8FCE" b="D3 AD"/>
+  <a u="8FCF" b="DE 85"/>
+  <a u="8FD0" b="D4 CB"/>
+  <a u="8FD1" b="BD FC"/>
+  <a u="8FD2" b="DE 86"/>
+  <a u="8FD3" b="E5 C2"/>
+  <a u="8FD4" b="B7 B5"/>
+  <a u="8FD5" b="E5 C3"/>
+  <a u="8FD6" b="DE 87"/>
+  <a u="8FD7" b="DE 88"/>
+  <a u="8FD8" b="BB B9"/>
+  <a u="8FD9" b="D5 E2"/>
+  <a u="8FDA" b="DE 89"/>
+  <a u="8FDB" b="BD F8"/>
+  <a u="8FDC" b="D4 B6"/>
+  <a u="8FDD" b="CE A5"/>
+  <a u="8FDE" b="C1 AC"/>
+  <a u="8FDF" b="B3 D9"/>
+  <a u="8FE0" b="DE 8A"/>
+  <a u="8FE1" b="DE 8B"/>
+  <a u="8FE2" b="CC F6"/>
+  <a u="8FE3" b="DE 8C"/>
+  <a u="8FE4" b="E5 C6"/>
+  <a u="8FE5" b="E5 C4"/>
+  <a u="8FE6" b="E5 C8"/>
+  <a u="8FE7" b="DE 8D"/>
+  <a u="8FE8" b="E5 CA"/>
+  <a u="8FE9" b="E5 C7"/>
+  <a u="8FEA" b="B5 CF"/>
+  <a u="8FEB" b="C6 C8"/>
+  <a u="8FEC" b="DE 8E"/>
+  <a u="8FED" b="B5 FC"/>
+  <a u="8FEE" b="E5 C5"/>
+  <a u="8FEF" b="DE 8F"/>
+  <a u="8FF0" b="CA F6"/>
+  <a u="8FF1" b="DE 90"/>
+  <a u="8FF2" b="DE 91"/>
+  <a u="8FF3" b="E5 C9"/>
+  <a u="8FF4" b="DE 92"/>
+  <a u="8FF5" b="DE 93"/>
+  <a u="8FF6" b="DE 94"/>
+  <a u="8FF7" b="C3 D4"/>
+  <a u="8FF8" b="B1 C5"/>
+  <a u="8FF9" b="BC A3"/>
+  <a u="8FFA" b="DE 95"/>
+  <a u="8FFB" b="DE 96"/>
+  <a u="8FFC" b="DE 97"/>
+  <a u="8FFD" b="D7 B7"/>
+  <a u="8FFE" b="DE 98"/>
+  <a u="8FFF" b="DE 99"/>
+  <a u="9000" b="CD CB"/>
+  <a u="9001" b="CB CD"/>
+  <a u="9002" b="CA CA"/>
+  <a u="9003" b="CC D3"/>
+  <a u="9004" b="E5 CC"/>
+  <a u="9005" b="E5 CB"/>
+  <a u="9006" b="C4 E6"/>
+  <a u="9007" b="DE 9A"/>
+  <a u="9008" b="DE 9B"/>
+  <a u="9009" b="D1 A1"/>
+  <a u="900A" b="D1 B7"/>
+  <a u="900B" b="E5 CD"/>
+  <a u="900C" b="DE 9C"/>
+  <a u="900D" b="E5 D0"/>
+  <a u="900E" b="DE 9D"/>
+  <a u="900F" b="CD B8"/>
+  <a u="9010" b="D6 F0"/>
+  <a u="9011" b="E5 CF"/>
+  <a u="9012" b="B5 DD"/>
+  <a u="9013" b="DE 9E"/>
+  <a u="9014" b="CD BE"/>
+  <a u="9015" b="DE 9F"/>
+  <a u="9016" b="E5 D1"/>
+  <a u="9017" b="B6 BA"/>
+  <a u="9018" b="DE A0"/>
+  <a u="9019" b="DF 40"/>
+  <a u="901A" b="CD A8"/>
+  <a u="901B" b="B9 E4"/>
+  <a u="901C" b="DF 41"/>
+  <a u="901D" b="CA C5"/>
+  <a u="901E" b="B3 D1"/>
+  <a u="901F" b="CB D9"/>
+  <a u="9020" b="D4 EC"/>
+  <a u="9021" b="E5 D2"/>
+  <a u="9022" b="B7 EA"/>
+  <a u="9023" b="DF 42"/>
+  <a u="9024" b="DF 43"/>
+  <a u="9025" b="DF 44"/>
+  <a u="9026" b="E5 CE"/>
+  <a u="9027" b="DF 45"/>
+  <a u="9028" b="DF 46"/>
+  <a u="9029" b="DF 47"/>
+  <a u="902A" b="DF 48"/>
+  <a u="902B" b="DF 49"/>
+  <a u="902C" b="DF 4A"/>
+  <a u="902D" b="E5 D5"/>
+  <a u="902E" b="B4 FE"/>
+  <a u="902F" b="E5 D6"/>
+  <a u="9030" b="DF 4B"/>
+  <a u="9031" b="DF 4C"/>
+  <a u="9032" b="DF 4D"/>
+  <a u="9033" b="DF 4E"/>
+  <a u="9034" b="DF 4F"/>
+  <a u="9035" b="E5 D3"/>
+  <a u="9036" b="E5 D4"/>
+  <a u="9037" b="DF 50"/>
+  <a u="9038" b="D2 DD"/>
+  <a u="9039" b="DF 51"/>
+  <a u="903A" b="DF 52"/>
+  <a u="903B" b="C2 DF"/>
+  <a u="903C" b="B1 C6"/>
+  <a u="903D" b="DF 53"/>
+  <a u="903E" b="D3 E2"/>
+  <a u="903F" b="DF 54"/>
+  <a u="9040" b="DF 55"/>
+  <a u="9041" b="B6 DD"/>
+  <a u="9042" b="CB EC"/>
+  <a u="9043" b="DF 56"/>
+  <a u="9044" b="E5 D7"/>
+  <a u="9045" b="DF 57"/>
+  <a u="9046" b="DF 58"/>
+  <a u="9047" b="D3 F6"/>
+  <a u="9048" b="DF 59"/>
+  <a u="9049" b="DF 5A"/>
+  <a u="904A" b="DF 5B"/>
+  <a u="904B" b="DF 5C"/>
+  <a u="904C" b="DF 5D"/>
+  <a u="904D" b="B1 E9"/>
+  <a u="904E" b="DF 5E"/>
+  <a u="904F" b="B6 F4"/>
+  <a u="9050" b="E5 DA"/>
+  <a u="9051" b="E5 D8"/>
+  <a u="9052" b="E5 D9"/>
+  <a u="9053" b="B5 C0"/>
+  <a u="9054" b="DF 5F"/>
+  <a u="9055" b="DF 60"/>
+  <a u="9056" b="DF 61"/>
+  <a u="9057" b="D2 C5"/>
+  <a u="9058" b="E5 DC"/>
+  <a u="9059" b="DF 62"/>
+  <a u="905A" b="DF 63"/>
+  <a u="905B" b="E5 DE"/>
+  <a u="905C" b="DF 64"/>
+  <a u="905D" b="DF 65"/>
+  <a u="905E" b="DF 66"/>
+  <a u="905F" b="DF 67"/>
+  <a u="9060" b="DF 68"/>
+  <a u="9061" b="DF 69"/>
+  <a u="9062" b="E5 DD"/>
+  <a u="9063" b="C7 B2"/>
+  <a u="9064" b="DF 6A"/>
+  <a u="9065" b="D2 A3"/>
+  <a u="9066" b="DF 6B"/>
+  <a u="9067" b="DF 6C"/>
+  <a u="9068" b="E5 DB"/>
+  <a u="9069" b="DF 6D"/>
+  <a u="906A" b="DF 6E"/>
+  <a u="906B" b="DF 6F"/>
+  <a u="906C" b="DF 70"/>
+  <a u="906D" b="D4 E2"/>
+  <a u="906E" b="D5 DA"/>
+  <a u="906F" b="DF 71"/>
+  <a u="9070" b="DF 72"/>
+  <a u="9071" b="DF 73"/>
+  <a u="9072" b="DF 74"/>
+  <a u="9073" b="DF 75"/>
+  <a u="9074" b="E5 E0"/>
+  <a u="9075" b="D7 F1"/>
+  <a u="9076" b="DF 76"/>
+  <a u="9077" b="DF 77"/>
+  <a u="9078" b="DF 78"/>
+  <a u="9079" b="DF 79"/>
+  <a u="907A" b="DF 7A"/>
+  <a u="907B" b="DF 7B"/>
+  <a u="907C" b="DF 7C"/>
+  <a u="907D" b="E5 E1"/>
+  <a u="907E" b="DF 7D"/>
+  <a u="907F" b="B1 DC"/>
+  <a u="9080" b="D1 FB"/>
+  <a u="9081" b="DF 7E"/>
+  <a u="9082" b="E5 E2"/>
+  <a u="9083" b="E5 E4"/>
+  <a u="9084" b="DF 80"/>
+  <a u="9085" b="DF 81"/>
+  <a u="9086" b="DF 82"/>
+  <a u="9087" b="DF 83"/>
+  <a u="9088" b="E5 E3"/>
+  <a u="9089" b="DF 84"/>
+  <a u="908A" b="DF 85"/>
+  <a u="908B" b="E5 E5"/>
+  <a u="908C" b="DF 86"/>
+  <a u="908D" b="DF 87"/>
+  <a u="908E" b="DF 88"/>
+  <a u="908F" b="DF 89"/>
+  <a u="9090" b="DF 8A"/>
+  <a u="9091" b="D2 D8"/>
+  <a u="9092" b="DF 8B"/>
+  <a u="9093" b="B5 CB"/>
+  <a u="9094" b="DF 8C"/>
+  <a u="9095" b="E7 DF"/>
+  <a u="9096" b="DF 8D"/>
+  <a u="9097" b="DA F5"/>
+  <a u="9098" b="DF 8E"/>
+  <a u="9099" b="DA F8"/>
+  <a u="909A" b="DF 8F"/>
+  <a u="909B" b="DA F6"/>
+  <a u="909C" b="DF 90"/>
+  <a u="909D" b="DA F7"/>
+  <a u="909E" b="DF 91"/>
+  <a u="909F" b="DF 92"/>
+  <a u="90A0" b="DF 93"/>
+  <a u="90A1" b="DA FA"/>
+  <a u="90A2" b="D0 CF"/>
+  <a u="90A3" b="C4 C7"/>
+  <a u="90A4" b="DF 94"/>
+  <a u="90A5" b="DF 95"/>
+  <a u="90A6" b="B0 EE"/>
+  <a u="90A7" b="DF 96"/>
+  <a u="90A8" b="DF 97"/>
+  <a u="90A9" b="DF 98"/>
+  <a u="90AA" b="D0 B0"/>
+  <a u="90AB" b="DF 99"/>
+  <a u="90AC" b="DA F9"/>
+  <a u="90AD" b="DF 9A"/>
+  <a u="90AE" b="D3 CA"/>
+  <a u="90AF" b="BA AA"/>
+  <a u="90B0" b="DB A2"/>
+  <a u="90B1" b="C7 F1"/>
+  <a u="90B2" b="DF 9B"/>
+  <a u="90B3" b="DA FC"/>
+  <a u="90B4" b="DA FB"/>
+  <a u="90B5" b="C9 DB"/>
+  <a u="90B6" b="DA FD"/>
+  <a u="90B7" b="DF 9C"/>
+  <a u="90B8" b="DB A1"/>
+  <a u="90B9" b="D7 DE"/>
+  <a u="90BA" b="DA FE"/>
+  <a u="90BB" b="C1 DA"/>
+  <a u="90BC" b="DF 9D"/>
+  <a u="90BD" b="DF 9E"/>
+  <a u="90BE" b="DB A5"/>
+  <a u="90BF" b="DF 9F"/>
+  <a u="90C0" b="DF A0"/>
+  <a u="90C1" b="D3 F4"/>
+  <a u="90C2" b="E0 40"/>
+  <a u="90C3" b="E0 41"/>
+  <a u="90C4" b="DB A7"/>
+  <a u="90C5" b="DB A4"/>
+  <a u="90C6" b="E0 42"/>
+  <a u="90C7" b="DB A8"/>
+  <a u="90C8" b="E0 43"/>
+  <a u="90C9" b="E0 44"/>
+  <a u="90CA" b="BD BC"/>
+  <a u="90CB" b="E0 45"/>
+  <a u="90CC" b="E0 46"/>
+  <a u="90CD" b="E0 47"/>
+  <a u="90CE" b="C0 C9"/>
+  <a u="90CF" b="DB A3"/>
+  <a u="90D0" b="DB A6"/>
+  <a u="90D1" b="D6 A3"/>
+  <a u="90D2" b="E0 48"/>
+  <a u="90D3" b="DB A9"/>
+  <a u="90D4" b="E0 49"/>
+  <a u="90D5" b="E0 4A"/>
+  <a u="90D6" b="E0 4B"/>
+  <a u="90D7" b="DB AD"/>
+  <a u="90D8" b="E0 4C"/>
+  <a u="90D9" b="E0 4D"/>
+  <a u="90DA" b="E0 4E"/>
+  <a u="90DB" b="DB AE"/>
+  <a u="90DC" b="DB AC"/>
+  <a u="90DD" b="BA C2"/>
+  <a u="90DE" b="E0 4F"/>
+  <a u="90DF" b="E0 50"/>
+  <a u="90E0" b="E0 51"/>
+  <a u="90E1" b="BF A4"/>
+  <a u="90E2" b="DB AB"/>
+  <a u="90E3" b="E0 52"/>
+  <a u="90E4" b="E0 53"/>
+  <a u="90E5" b="E0 54"/>
+  <a u="90E6" b="DB AA"/>
+  <a u="90E7" b="D4 C7"/>
+  <a u="90E8" b="B2 BF"/>
+  <a u="90E9" b="E0 55"/>
+  <a u="90EA" b="E0 56"/>
+  <a u="90EB" b="DB AF"/>
+  <a u="90EC" b="E0 57"/>
+  <a u="90ED" b="B9 F9"/>
+  <a u="90EE" b="E0 58"/>
+  <a u="90EF" b="DB B0"/>
+  <a u="90F0" b="E0 59"/>
+  <a u="90F1" b="E0 5A"/>
+  <a u="90F2" b="E0 5B"/>
+  <a u="90F3" b="E0 5C"/>
+  <a u="90F4" b="B3 BB"/>
+  <a u="90F5" b="E0 5D"/>
+  <a u="90F6" b="E0 5E"/>
+  <a u="90F7" b="E0 5F"/>
+  <a u="90F8" b="B5 A6"/>
+  <a u="90F9" b="E0 60"/>
+  <a u="90FA" b="E0 61"/>
+  <a u="90FB" b="E0 62"/>
+  <a u="90FC" b="E0 63"/>
+  <a u="90FD" b="B6 BC"/>
+  <a u="90FE" b="DB B1"/>
+  <a u="90FF" b="E0 64"/>
+  <a u="9100" b="E0 65"/>
+  <a u="9101" b="E0 66"/>
+  <a u="9102" b="B6 F5"/>
+  <a u="9103" b="E0 67"/>
+  <a u="9104" b="DB B2"/>
+  <a u="9105" b="E0 68"/>
+  <a u="9106" b="E0 69"/>
+  <a u="9107" b="E0 6A"/>
+  <a u="9108" b="E0 6B"/>
+  <a u="9109" b="E0 6C"/>
+  <a u="910A" b="E0 6D"/>
+  <a u="910B" b="E0 6E"/>
+  <a u="910C" b="E0 6F"/>
+  <a u="910D" b="E0 70"/>
+  <a u="910E" b="E0 71"/>
+  <a u="910F" b="E0 72"/>
+  <a u="9110" b="E0 73"/>
+  <a u="9111" b="E0 74"/>
+  <a u="9112" b="E0 75"/>
+  <a u="9113" b="E0 76"/>
+  <a u="9114" b="E0 77"/>
+  <a u="9115" b="E0 78"/>
+  <a u="9116" b="E0 79"/>
+  <a u="9117" b="E0 7A"/>
+  <a u="9118" b="E0 7B"/>
+  <a u="9119" b="B1 C9"/>
+  <a u="911A" b="E0 7C"/>
+  <a u="911B" b="E0 7D"/>
+  <a u="911C" b="E0 7E"/>
+  <a u="911D" b="E0 80"/>
+  <a u="911E" b="DB B4"/>
+  <a u="911F" b="E0 81"/>
+  <a u="9120" b="E0 82"/>
+  <a u="9121" b="E0 83"/>
+  <a u="9122" b="DB B3"/>
+  <a u="9123" b="DB B5"/>
+  <a u="9124" b="E0 84"/>
+  <a u="9125" b="E0 85"/>
+  <a u="9126" b="E0 86"/>
+  <a u="9127" b="E0 87"/>
+  <a u="9128" b="E0 88"/>
+  <a u="9129" b="E0 89"/>
+  <a u="912A" b="E0 8A"/>
+  <a u="912B" b="E0 8B"/>
+  <a u="912C" b="E0 8C"/>
+  <a u="912D" b="E0 8D"/>
+  <a u="912E" b="E0 8E"/>
+  <a u="912F" b="DB B7"/>
+  <a u="9130" b="E0 8F"/>
+  <a u="9131" b="DB B6"/>
+  <a u="9132" b="E0 90"/>
+  <a u="9133" b="E0 91"/>
+  <a u="9134" b="E0 92"/>
+  <a u="9135" b="E0 93"/>
+  <a u="9136" b="E0 94"/>
+  <a u="9137" b="E0 95"/>
+  <a u="9138" b="E0 96"/>
+  <a u="9139" b="DB B8"/>
+  <a u="913A" b="E0 97"/>
+  <a u="913B" b="E0 98"/>
+  <a u="913C" b="E0 99"/>
+  <a u="913D" b="E0 9A"/>
+  <a u="913E" b="E0 9B"/>
+  <a u="913F" b="E0 9C"/>
+  <a u="9140" b="E0 9D"/>
+  <a u="9141" b="E0 9E"/>
+  <a u="9142" b="E0 9F"/>
+  <a u="9143" b="DB B9"/>
+  <a u="9144" b="E0 A0"/>
+  <a u="9145" b="E1 40"/>
+  <a u="9146" b="DB BA"/>
+  <a u="9147" b="E1 41"/>
+  <a u="9148" b="E1 42"/>
+  <a u="9149" b="D3 CF"/>
+  <a u="914A" b="F4 FA"/>
+  <a u="914B" b="C7 F5"/>
+  <a u="914C" b="D7 C3"/>
+  <a u="914D" b="C5 E4"/>
+  <a u="914E" b="F4 FC"/>
+  <a u="914F" b="F4 FD"/>
+  <a u="9150" b="F4 FB"/>
+  <a u="9151" b="E1 43"/>
+  <a u="9152" b="BE C6"/>
+  <a u="9153" b="E1 44"/>
+  <a u="9154" b="E1 45"/>
+  <a u="9155" b="E1 46"/>
+  <a u="9156" b="E1 47"/>
+  <a u="9157" b="D0 EF"/>
+  <a u="9158" b="E1 48"/>
+  <a u="9159" b="E1 49"/>
+  <a u="915A" b="B7 D3"/>
+  <a u="915B" b="E1 4A"/>
+  <a u="915C" b="E1 4B"/>
+  <a u="915D" b="D4 CD"/>
+  <a u="915E" b="CC AA"/>
+  <a u="915F" b="E1 4C"/>
+  <a u="9160" b="E1 4D"/>
+  <a u="9161" b="F5 A2"/>
+  <a u="9162" b="F5 A1"/>
+  <a u="9163" b="BA A8"/>
+  <a u="9164" b="F4 FE"/>
+  <a u="9165" b="CB D6"/>
+  <a u="9166" b="E1 4E"/>
+  <a u="9167" b="E1 4F"/>
+  <a u="9168" b="E1 50"/>
+  <a u="9169" b="F5 A4"/>
+  <a u="916A" b="C0 D2"/>
+  <a u="916B" b="E1 51"/>
+  <a u="916C" b="B3 EA"/>
+  <a u="916D" b="E1 52"/>
+  <a u="916E" b="CD AA"/>
+  <a u="916F" b="F5 A5"/>
+  <a u="9170" b="F5 A3"/>
+  <a u="9171" b="BD B4"/>
+  <a u="9172" b="F5 A8"/>
+  <a u="9173" b="E1 53"/>
+  <a u="9174" b="F5 A9"/>
+  <a u="9175" b="BD CD"/>
+  <a u="9176" b="C3 B8"/>
+  <a u="9177" b="BF E1"/>
+  <a u="9178" b="CB E1"/>
+  <a u="9179" b="F5 AA"/>
+  <a u="917A" b="E1 54"/>
+  <a u="917B" b="E1 55"/>
+  <a u="917C" b="E1 56"/>
+  <a u="917D" b="F5 A6"/>
+  <a u="917E" b="F5 A7"/>
+  <a u="917F" b="C4 F0"/>
+  <a u="9180" b="E1 57"/>
+  <a u="9181" b="E1 58"/>
+  <a u="9182" b="E1 59"/>
+  <a u="9183" b="E1 5A"/>
+  <a u="9184" b="E1 5B"/>
+  <a u="9185" b="F5 AC"/>
+  <a u="9186" b="E1 5C"/>
+  <a u="9187" b="B4 BC"/>
+  <a u="9188" b="E1 5D"/>
+  <a u="9189" b="D7 ED"/>
+  <a u="918A" b="E1 5E"/>
+  <a u="918B" b="B4 D7"/>
+  <a u="918C" b="F5 AB"/>
+  <a u="918D" b="F5 AE"/>
+  <a u="918E" b="E1 5F"/>
+  <a u="918F" b="E1 60"/>
+  <a u="9190" b="F5 AD"/>
+  <a u="9191" b="F5 AF"/>
+  <a u="9192" b="D0 D1"/>
+  <a u="9193" b="E1 61"/>
+  <a u="9194" b="E1 62"/>
+  <a u="9195" b="E1 63"/>
+  <a u="9196" b="E1 64"/>
+  <a u="9197" b="E1 65"/>
+  <a u="9198" b="E1 66"/>
+  <a u="9199" b="E1 67"/>
+  <a u="919A" b="C3 D1"/>
+  <a u="919B" b="C8 A9"/>
+  <a u="919C" b="E1 68"/>
+  <a u="919D" b="E1 69"/>
+  <a u="919E" b="E1 6A"/>
+  <a u="919F" b="E1 6B"/>
+  <a u="91A0" b="E1 6C"/>
+  <a u="91A1" b="E1 6D"/>
+  <a u="91A2" b="F5 B0"/>
+  <a u="91A3" b="F5 B1"/>
+  <a u="91A4" b="E1 6E"/>
+  <a u="91A5" b="E1 6F"/>
+  <a u="91A6" b="E1 70"/>
+  <a u="91A7" b="E1 71"/>
+  <a u="91A8" b="E1 72"/>
+  <a u="91A9" b="E1 73"/>
+  <a u="91AA" b="F5 B2"/>
+  <a u="91AB" b="E1 74"/>
+  <a u="91AC" b="E1 75"/>
+  <a u="91AD" b="F5 B3"/>
+  <a u="91AE" b="F5 B4"/>
+  <a u="91AF" b="F5 B5"/>
+  <a u="91B0" b="E1 76"/>
+  <a u="91B1" b="E1 77"/>
+  <a u="91B2" b="E1 78"/>
+  <a u="91B3" b="E1 79"/>
+  <a u="91B4" b="F5 B7"/>
+  <a u="91B5" b="F5 B6"/>
+  <a u="91B6" b="E1 7A"/>
+  <a u="91B7" b="E1 7B"/>
+  <a u="91B8" b="E1 7C"/>
+  <a u="91B9" b="E1 7D"/>
+  <a u="91BA" b="F5 B8"/>
+  <a u="91BB" b="E1 7E"/>
+  <a u="91BC" b="E1 80"/>
+  <a u="91BD" b="E1 81"/>
+  <a u="91BE" b="E1 82"/>
+  <a u="91BF" b="E1 83"/>
+  <a u="91C0" b="E1 84"/>
+  <a u="91C1" b="E1 85"/>
+  <a u="91C2" b="E1 86"/>
+  <a u="91C3" b="E1 87"/>
+  <a u="91C4" b="E1 88"/>
+  <a u="91C5" b="E1 89"/>
+  <a u="91C6" b="E1 8A"/>
+  <a u="91C7" b="B2 C9"/>
+  <a u="91C8" b="E1 8B"/>
+  <a u="91C9" b="D3 D4"/>
+  <a u="91CA" b="CA CD"/>
+  <a u="91CB" b="E1 8C"/>
+  <a u="91CC" b="C0 EF"/>
+  <a u="91CD" b="D6 D8"/>
+  <a u="91CE" b="D2 B0"/>
+  <a u="91CF" b="C1 BF"/>
+  <a u="91D0" b="E1 8D"/>
+  <a u="91D1" b="BD F0"/>
+  <a u="91D2" b="E1 8E"/>
+  <a u="91D3" b="E1 8F"/>
+  <a u="91D4" b="E1 90"/>
+  <a u="91D5" b="E1 91"/>
+  <a u="91D6" b="E1 92"/>
+  <a u="91D7" b="E1 93"/>
+  <a u="91D8" b="E1 94"/>
+  <a u="91D9" b="E1 95"/>
+  <a u="91DA" b="E1 96"/>
+  <a u="91DB" b="E1 97"/>
+  <a u="91DC" b="B8 AA"/>
+  <a u="91DD" b="E1 98"/>
+  <a u="91DE" b="E1 99"/>
+  <a u="91DF" b="E1 9A"/>
+  <a u="91E0" b="E1 9B"/>
+  <a u="91E1" b="E1 9C"/>
+  <a u="91E2" b="E1 9D"/>
+  <a u="91E3" b="E1 9E"/>
+  <a u="91E4" b="E1 9F"/>
+  <a u="91E5" b="E1 A0"/>
+  <a u="91E6" b="E2 40"/>
+  <a u="91E7" b="E2 41"/>
+  <a u="91E8" b="E2 42"/>
+  <a u="91E9" b="E2 43"/>
+  <a u="91EA" b="E2 44"/>
+  <a u="91EB" b="E2 45"/>
+  <a u="91EC" b="E2 46"/>
+  <a u="91ED" b="E2 47"/>
+  <a u="91EE" b="E2 48"/>
+  <a u="91EF" b="E2 49"/>
+  <a u="91F0" b="E2 4A"/>
+  <a u="91F1" b="E2 4B"/>
+  <a u="91F2" b="E2 4C"/>
+  <a u="91F3" b="E2 4D"/>
+  <a u="91F4" b="E2 4E"/>
+  <a u="91F5" b="E2 4F"/>
+  <a u="91F6" b="E2 50"/>
+  <a u="91F7" b="E2 51"/>
+  <a u="91F8" b="E2 52"/>
+  <a u="91F9" b="E2 53"/>
+  <a u="91FA" b="E2 54"/>
+  <a u="91FB" b="E2 55"/>
+  <a u="91FC" b="E2 56"/>
+  <a u="91FD" b="E2 57"/>
+  <a u="91FE" b="E2 58"/>
+  <a u="91FF" b="E2 59"/>
+  <a u="9200" b="E2 5A"/>
+  <a u="9201" b="E2 5B"/>
+  <a u="9202" b="E2 5C"/>
+  <a u="9203" b="E2 5D"/>
+  <a u="9204" b="E2 5E"/>
+  <a u="9205" b="E2 5F"/>
+  <a u="9206" b="E2 60"/>
+  <a u="9207" b="E2 61"/>
+  <a u="9208" b="E2 62"/>
+  <a u="9209" b="E2 63"/>
+  <a u="920A" b="E2 64"/>
+  <a u="920B" b="E2 65"/>
+  <a u="920C" b="E2 66"/>
+  <a u="920D" b="E2 67"/>
+  <a u="920E" b="E2 68"/>
+  <a u="920F" b="E2 69"/>
+  <a u="9210" b="E2 6A"/>
+  <a u="9211" b="E2 6B"/>
+  <a u="9212" b="E2 6C"/>
+  <a u="9213" b="E2 6D"/>
+  <a u="9214" b="E2 6E"/>
+  <a u="9215" b="E2 6F"/>
+  <a u="9216" b="E2 70"/>
+  <a u="9217" b="E2 71"/>
+  <a u="9218" b="E2 72"/>
+  <a u="9219" b="E2 73"/>
+  <a u="921A" b="E2 74"/>
+  <a u="921B" b="E2 75"/>
+  <a u="921C" b="E2 76"/>
+  <a u="921D" b="E2 77"/>
+  <a u="921E" b="E2 78"/>
+  <a u="921F" b="E2 79"/>
+  <a u="9220" b="E2 7A"/>
+  <a u="9221" b="E2 7B"/>
+  <a u="9222" b="E2 7C"/>
+  <a u="9223" b="E2 7D"/>
+  <a u="9224" b="E2 7E"/>
+  <a u="9225" b="E2 80"/>
+  <a u="9226" b="E2 81"/>
+  <a u="9227" b="E2 82"/>
+  <a u="9228" b="E2 83"/>
+  <a u="9229" b="E2 84"/>
+  <a u="922A" b="E2 85"/>
+  <a u="922B" b="E2 86"/>
+  <a u="922C" b="E2 87"/>
+  <a u="922D" b="E2 88"/>
+  <a u="922E" b="E2 89"/>
+  <a u="922F" b="E2 8A"/>
+  <a u="9230" b="E2 8B"/>
+  <a u="9231" b="E2 8C"/>
+  <a u="9232" b="E2 8D"/>
+  <a u="9233" b="E2 8E"/>
+  <a u="9234" b="E2 8F"/>
+  <a u="9235" b="E2 90"/>
+  <a u="9236" b="E2 91"/>
+  <a u="9237" b="E2 92"/>
+  <a u="9238" b="E2 93"/>
+  <a u="9239" b="E2 94"/>
+  <a u="923A" b="E2 95"/>
+  <a u="923B" b="E2 96"/>
+  <a u="923C" b="E2 97"/>
+  <a u="923D" b="E2 98"/>
+  <a u="923E" b="E2 99"/>
+  <a u="923F" b="E2 9A"/>
+  <a u="9240" b="E2 9B"/>
+  <a u="9241" b="E2 9C"/>
+  <a u="9242" b="E2 9D"/>
+  <a u="9243" b="E2 9E"/>
+  <a u="9244" b="E2 9F"/>
+  <a u="9245" b="E2 A0"/>
+  <a u="9246" b="E3 40"/>
+  <a u="9247" b="E3 41"/>
+  <a u="9248" b="E3 42"/>
+  <a u="9249" b="E3 43"/>
+  <a u="924A" b="E3 44"/>
+  <a u="924B" b="E3 45"/>
+  <a u="924C" b="E3 46"/>
+  <a u="924D" b="E3 47"/>
+  <a u="924E" b="E3 48"/>
+  <a u="924F" b="E3 49"/>
+  <a u="9250" b="E3 4A"/>
+  <a u="9251" b="E3 4B"/>
+  <a u="9252" b="E3 4C"/>
+  <a u="9253" b="E3 4D"/>
+  <a u="9254" b="E3 4E"/>
+  <a u="9255" b="E3 4F"/>
+  <a u="9256" b="E3 50"/>
+  <a u="9257" b="E3 51"/>
+  <a u="9258" b="E3 52"/>
+  <a u="9259" b="E3 53"/>
+  <a u="925A" b="E3 54"/>
+  <a u="925B" b="E3 55"/>
+  <a u="925C" b="E3 56"/>
+  <a u="925D" b="E3 57"/>
+  <a u="925E" b="E3 58"/>
+  <a u="925F" b="E3 59"/>
+  <a u="9260" b="E3 5A"/>
+  <a u="9261" b="E3 5B"/>
+  <a u="9262" b="E3 5C"/>
+  <a u="9263" b="E3 5D"/>
+  <a u="9264" b="E3 5E"/>
+  <a u="9265" b="E3 5F"/>
+  <a u="9266" b="E3 60"/>
+  <a u="9267" b="E3 61"/>
+  <a u="9268" b="E3 62"/>
+  <a u="9269" b="E3 63"/>
+  <a u="926A" b="E3 64"/>
+  <a u="926B" b="E3 65"/>
+  <a u="926C" b="E3 66"/>
+  <a u="926D" b="E3 67"/>
+  <a u="926E" b="E3 68"/>
+  <a u="926F" b="E3 69"/>
+  <a u="9270" b="E3 6A"/>
+  <a u="9271" b="E3 6B"/>
+  <a u="9272" b="E3 6C"/>
+  <a u="9273" b="E3 6D"/>
+  <a u="9274" b="BC F8"/>
+  <a u="9275" b="E3 6E"/>
+  <a u="9276" b="E3 6F"/>
+  <a u="9277" b="E3 70"/>
+  <a u="9278" b="E3 71"/>
+  <a u="9279" b="E3 72"/>
+  <a u="927A" b="E3 73"/>
+  <a u="927B" b="E3 74"/>
+  <a u="927C" b="E3 75"/>
+  <a u="927D" b="E3 76"/>
+  <a u="927E" b="E3 77"/>
+  <a u="927F" b="E3 78"/>
+  <a u="9280" b="E3 79"/>
+  <a u="9281" b="E3 7A"/>
+  <a u="9282" b="E3 7B"/>
+  <a u="9283" b="E3 7C"/>
+  <a u="9284" b="E3 7D"/>
+  <a u="9285" b="E3 7E"/>
+  <a u="9286" b="E3 80"/>
+  <a u="9287" b="E3 81"/>
+  <a u="9288" b="E3 82"/>
+  <a u="9289" b="E3 83"/>
+  <a u="928A" b="E3 84"/>
+  <a u="928B" b="E3 85"/>
+  <a u="928C" b="E3 86"/>
+  <a u="928D" b="E3 87"/>
+  <a u="928E" b="F6 C6"/>
+  <a u="928F" b="E3 88"/>
+  <a u="9290" b="E3 89"/>
+  <a u="9291" b="E3 8A"/>
+  <a u="9292" b="E3 8B"/>
+  <a u="9293" b="E3 8C"/>
+  <a u="9294" b="E3 8D"/>
+  <a u="9295" b="E3 8E"/>
+  <a u="9296" b="E3 8F"/>
+  <a u="9297" b="E3 90"/>
+  <a u="9298" b="E3 91"/>
+  <a u="9299" b="E3 92"/>
+  <a u="929A" b="E3 93"/>
+  <a u="929B" b="E3 94"/>
+  <a u="929C" b="E3 95"/>
+  <a u="929D" b="E3 96"/>
+  <a u="929E" b="E3 97"/>
+  <a u="929F" b="E3 98"/>
+  <a u="92A0" b="E3 99"/>
+  <a u="92A1" b="E3 9A"/>
+  <a u="92A2" b="E3 9B"/>
+  <a u="92A3" b="E3 9C"/>
+  <a u="92A4" b="E3 9D"/>
+  <a u="92A5" b="E3 9E"/>
+  <a u="92A6" b="E3 9F"/>
+  <a u="92A7" b="E3 A0"/>
+  <a u="92A8" b="E4 40"/>
+  <a u="92A9" b="E4 41"/>
+  <a u="92AA" b="E4 42"/>
+  <a u="92AB" b="E4 43"/>
+  <a u="92AC" b="E4 44"/>
+  <a u="92AD" b="E4 45"/>
+  <a u="92AE" b="F6 C7"/>
+  <a u="92AF" b="E4 46"/>
+  <a u="92B0" b="E4 47"/>
+  <a u="92B1" b="E4 48"/>
+  <a u="92B2" b="E4 49"/>
+  <a u="92B3" b="E4 4A"/>
+  <a u="92B4" b="E4 4B"/>
+  <a u="92B5" b="E4 4C"/>
+  <a u="92B6" b="E4 4D"/>
+  <a u="92B7" b="E4 4E"/>
+  <a u="92B8" b="E4 4F"/>
+  <a u="92B9" b="E4 50"/>
+  <a u="92BA" b="E4 51"/>
+  <a u="92BB" b="E4 52"/>
+  <a u="92BC" b="E4 53"/>
+  <a u="92BD" b="E4 54"/>
+  <a u="92BE" b="E4 55"/>
+  <a u="92BF" b="E4 56"/>
+  <a u="92C0" b="E4 57"/>
+  <a u="92C1" b="E4 58"/>
+  <a u="92C2" b="E4 59"/>
+  <a u="92C3" b="E4 5A"/>
+  <a u="92C4" b="E4 5B"/>
+  <a u="92C5" b="E4 5C"/>
+  <a u="92C6" b="E4 5D"/>
+  <a u="92C7" b="E4 5E"/>
+  <a u="92C8" b="F6 C8"/>
+  <a u="92C9" b="E4 5F"/>
+  <a u="92CA" b="E4 60"/>
+  <a u="92CB" b="E4 61"/>
+  <a u="92CC" b="E4 62"/>
+  <a u="92CD" b="E4 63"/>
+  <a u="92CE" b="E4 64"/>
+  <a u="92CF" b="E4 65"/>
+  <a u="92D0" b="E4 66"/>
+  <a u="92D1" b="E4 67"/>
+  <a u="92D2" b="E4 68"/>
+  <a u="92D3" b="E4 69"/>
+  <a u="92D4" b="E4 6A"/>
+  <a u="92D5" b="E4 6B"/>
+  <a u="92D6" b="E4 6C"/>
+  <a u="92D7" b="E4 6D"/>
+  <a u="92D8" b="E4 6E"/>
+  <a u="92D9" b="E4 6F"/>
+  <a u="92DA" b="E4 70"/>
+  <a u="92DB" b="E4 71"/>
+  <a u="92DC" b="E4 72"/>
+  <a u="92DD" b="E4 73"/>
+  <a u="92DE" b="E4 74"/>
+  <a u="92DF" b="E4 75"/>
+  <a u="92E0" b="E4 76"/>
+  <a u="92E1" b="E4 77"/>
+  <a u="92E2" b="E4 78"/>
+  <a u="92E3" b="E4 79"/>
+  <a u="92E4" b="E4 7A"/>
+  <a u="92E5" b="E4 7B"/>
+  <a u="92E6" b="E4 7C"/>
+  <a u="92E7" b="E4 7D"/>
+  <a u="92E8" b="E4 7E"/>
+  <a u="92E9" b="E4 80"/>
+  <a u="92EA" b="E4 81"/>
+  <a u="92EB" b="E4 82"/>
+  <a u="92EC" b="E4 83"/>
+  <a u="92ED" b="E4 84"/>
+  <a u="92EE" b="E4 85"/>
+  <a u="92EF" b="E4 86"/>
+  <a u="92F0" b="E4 87"/>
+  <a u="92F1" b="E4 88"/>
+  <a u="92F2" b="E4 89"/>
+  <a u="92F3" b="E4 8A"/>
+  <a u="92F4" b="E4 8B"/>
+  <a u="92F5" b="E4 8C"/>
+  <a u="92F6" b="E4 8D"/>
+  <a u="92F7" b="E4 8E"/>
+  <a u="92F8" b="E4 8F"/>
+  <a u="92F9" b="E4 90"/>
+  <a u="92FA" b="E4 91"/>
+  <a u="92FB" b="E4 92"/>
+  <a u="92FC" b="E4 93"/>
+  <a u="92FD" b="E4 94"/>
+  <a u="92FE" b="E4 95"/>
+  <a u="92FF" b="E4 96"/>
+  <a u="9300" b="E4 97"/>
+  <a u="9301" b="E4 98"/>
+  <a u="9302" b="E4 99"/>
+  <a u="9303" b="E4 9A"/>
+  <a u="9304" b="E4 9B"/>
+  <a u="9305" b="E4 9C"/>
+  <a u="9306" b="E4 9D"/>
+  <a u="9307" b="E4 9E"/>
+  <a u="9308" b="E4 9F"/>
+  <a u="9309" b="E4 A0"/>
+  <a u="930A" b="E5 40"/>
+  <a u="930B" b="E5 41"/>
+  <a u="930C" b="E5 42"/>
+  <a u="930D" b="E5 43"/>
+  <a u="930E" b="E5 44"/>
+  <a u="930F" b="E5 45"/>
+  <a u="9310" b="E5 46"/>
+  <a u="9311" b="E5 47"/>
+  <a u="9312" b="E5 48"/>
+  <a u="9313" b="E5 49"/>
+  <a u="9314" b="E5 4A"/>
+  <a u="9315" b="E5 4B"/>
+  <a u="9316" b="E5 4C"/>
+  <a u="9317" b="E5 4D"/>
+  <a u="9318" b="E5 4E"/>
+  <a u="9319" b="E5 4F"/>
+  <a u="931A" b="E5 50"/>
+  <a u="931B" b="E5 51"/>
+  <a u="931C" b="E5 52"/>
+  <a u="931D" b="E5 53"/>
+  <a u="931E" b="E5 54"/>
+  <a u="931F" b="E5 55"/>
+  <a u="9320" b="E5 56"/>
+  <a u="9321" b="E5 57"/>
+  <a u="9322" b="E5 58"/>
+  <a u="9323" b="E5 59"/>
+  <a u="9324" b="E5 5A"/>
+  <a u="9325" b="E5 5B"/>
+  <a u="9326" b="E5 5C"/>
+  <a u="9327" b="E5 5D"/>
+  <a u="9328" b="E5 5E"/>
+  <a u="9329" b="E5 5F"/>
+  <a u="932A" b="E5 60"/>
+  <a u="932B" b="E5 61"/>
+  <a u="932C" b="E5 62"/>
+  <a u="932D" b="E5 63"/>
+  <a u="932E" b="E5 64"/>
+  <a u="932F" b="E5 65"/>
+  <a u="9330" b="E5 66"/>
+  <a u="9331" b="E5 67"/>
+  <a u="9332" b="E5 68"/>
+  <a u="9333" b="E5 69"/>
+  <a u="9334" b="E5 6A"/>
+  <a u="9335" b="E5 6B"/>
+  <a u="9336" b="E5 6C"/>
+  <a u="9337" b="E5 6D"/>
+  <a u="9338" b="E5 6E"/>
+  <a u="9339" b="E5 6F"/>
+  <a u="933A" b="E5 70"/>
+  <a u="933B" b="E5 71"/>
+  <a u="933C" b="E5 72"/>
+  <a u="933D" b="E5 73"/>
+  <a u="933E" b="F6 C9"/>
+  <a u="933F" b="E5 74"/>
+  <a u="9340" b="E5 75"/>
+  <a u="9341" b="E5 76"/>
+  <a u="9342" b="E5 77"/>
+  <a u="9343" b="E5 78"/>
+  <a u="9344" b="E5 79"/>
+  <a u="9345" b="E5 7A"/>
+  <a u="9346" b="E5 7B"/>
+  <a u="9347" b="E5 7C"/>
+  <a u="9348" b="E5 7D"/>
+  <a u="9349" b="E5 7E"/>
+  <a u="934A" b="E5 80"/>
+  <a u="934B" b="E5 81"/>
+  <a u="934C" b="E5 82"/>
+  <a u="934D" b="E5 83"/>
+  <a u="934E" b="E5 84"/>
+  <a u="934F" b="E5 85"/>
+  <a u="9350" b="E5 86"/>
+  <a u="9351" b="E5 87"/>
+  <a u="9352" b="E5 88"/>
+  <a u="9353" b="E5 89"/>
+  <a u="9354" b="E5 8A"/>
+  <a u="9355" b="E5 8B"/>
+  <a u="9356" b="E5 8C"/>
+  <a u="9357" b="E5 8D"/>
+  <a u="9358" b="E5 8E"/>
+  <a u="9359" b="E5 8F"/>
+  <a u="935A" b="E5 90"/>
+  <a u="935B" b="E5 91"/>
+  <a u="935C" b="E5 92"/>
+  <a u="935D" b="E5 93"/>
+  <a u="935E" b="E5 94"/>
+  <a u="935F" b="E5 95"/>
+  <a u="9360" b="E5 96"/>
+  <a u="9361" b="E5 97"/>
+  <a u="9362" b="E5 98"/>
+  <a u="9363" b="E5 99"/>
+  <a u="9364" b="E5 9A"/>
+  <a u="9365" b="E5 9B"/>
+  <a u="9366" b="E5 9C"/>
+  <a u="9367" b="E5 9D"/>
+  <a u="9368" b="E5 9E"/>
+  <a u="9369" b="E5 9F"/>
+  <a u="936A" b="F6 CA"/>
+  <a u="936B" b="E5 A0"/>
+  <a u="936C" b="E6 40"/>
+  <a u="936D" b="E6 41"/>
+  <a u="936E" b="E6 42"/>
+  <a u="936F" b="E6 43"/>
+  <a u="9370" b="E6 44"/>
+  <a u="9371" b="E6 45"/>
+  <a u="9372" b="E6 46"/>
+  <a u="9373" b="E6 47"/>
+  <a u="9374" b="E6 48"/>
+  <a u="9375" b="E6 49"/>
+  <a u="9376" b="E6 4A"/>
+  <a u="9377" b="E6 4B"/>
+  <a u="9378" b="E6 4C"/>
+  <a u="9379" b="E6 4D"/>
+  <a u="937A" b="E6 4E"/>
+  <a u="937B" b="E6 4F"/>
+  <a u="937C" b="E6 50"/>
+  <a u="937D" b="E6 51"/>
+  <a u="937E" b="E6 52"/>
+  <a u="937F" b="E6 53"/>
+  <a u="9380" b="E6 54"/>
+  <a u="9381" b="E6 55"/>
+  <a u="9382" b="E6 56"/>
+  <a u="9383" b="E6 57"/>
+  <a u="9384" b="E6 58"/>
+  <a u="9385" b="E6 59"/>
+  <a u="9386" b="E6 5A"/>
+  <a u="9387" b="E6 5B"/>
+  <a u="9388" b="E6 5C"/>
+  <a u="9389" b="E6 5D"/>
+  <a u="938A" b="E6 5E"/>
+  <a u="938B" b="E6 5F"/>
+  <a u="938C" b="E6 60"/>
+  <a u="938D" b="E6 61"/>
+  <a u="938E" b="E6 62"/>
+  <a u="938F" b="F6 CC"/>
+  <a u="9390" b="E6 63"/>
+  <a u="9391" b="E6 64"/>
+  <a u="9392" b="E6 65"/>
+  <a u="9393" b="E6 66"/>
+  <a u="9394" b="E6 67"/>
+  <a u="9395" b="E6 68"/>
+  <a u="9396" b="E6 69"/>
+  <a u="9397" b="E6 6A"/>
+  <a u="9398" b="E6 6B"/>
+  <a u="9399" b="E6 6C"/>
+  <a u="939A" b="E6 6D"/>
+  <a u="939B" b="E6 6E"/>
+  <a u="939C" b="E6 6F"/>
+  <a u="939D" b="E6 70"/>
+  <a u="939E" b="E6 71"/>
+  <a u="939F" b="E6 72"/>
+  <a u="93A0" b="E6 73"/>
+  <a u="93A1" b="E6 74"/>
+  <a u="93A2" b="E6 75"/>
+  <a u="93A3" b="E6 76"/>
+  <a u="93A4" b="E6 77"/>
+  <a u="93A5" b="E6 78"/>
+  <a u="93A6" b="E6 79"/>
+  <a u="93A7" b="E6 7A"/>
+  <a u="93A8" b="E6 7B"/>
+  <a u="93A9" b="E6 7C"/>
+  <a u="93AA" b="E6 7D"/>
+  <a u="93AB" b="E6 7E"/>
+  <a u="93AC" b="E6 80"/>
+  <a u="93AD" b="E6 81"/>
+  <a u="93AE" b="E6 82"/>
+  <a u="93AF" b="E6 83"/>
+  <a u="93B0" b="E6 84"/>
+  <a u="93B1" b="E6 85"/>
+  <a u="93B2" b="E6 86"/>
+  <a u="93B3" b="E6 87"/>
+  <a u="93B4" b="E6 88"/>
+  <a u="93B5" b="E6 89"/>
+  <a u="93B6" b="E6 8A"/>
+  <a u="93B7" b="E6 8B"/>
+  <a u="93B8" b="E6 8C"/>
+  <a u="93B9" b="E6 8D"/>
+  <a u="93BA" b="E6 8E"/>
+  <a u="93BB" b="E6 8F"/>
+  <a u="93BC" b="E6 90"/>
+  <a u="93BD" b="E6 91"/>
+  <a u="93BE" b="E6 92"/>
+  <a u="93BF" b="E6 93"/>
+  <a u="93C0" b="E6 94"/>
+  <a u="93C1" b="E6 95"/>
+  <a u="93C2" b="E6 96"/>
+  <a u="93C3" b="E6 97"/>
+  <a u="93C4" b="E6 98"/>
+  <a u="93C5" b="E6 99"/>
+  <a u="93C6" b="E6 9A"/>
+  <a u="93C7" b="E6 9B"/>
+  <a u="93C8" b="E6 9C"/>
+  <a u="93C9" b="E6 9D"/>
+  <a u="93CA" b="F6 CB"/>
+  <a u="93CB" b="E6 9E"/>
+  <a u="93CC" b="E6 9F"/>
+  <a u="93CD" b="E6 A0"/>
+  <a u="93CE" b="E7 40"/>
+  <a u="93CF" b="E7 41"/>
+  <a u="93D0" b="E7 42"/>
+  <a u="93D1" b="E7 43"/>
+  <a u="93D2" b="E7 44"/>
+  <a u="93D3" b="E7 45"/>
+  <a u="93D4" b="E7 46"/>
+  <a u="93D5" b="E7 47"/>
+  <a u="93D6" b="F7 E9"/>
+  <a u="93D7" b="E7 48"/>
+  <a u="93D8" b="E7 49"/>
+  <a u="93D9" b="E7 4A"/>
+  <a u="93DA" b="E7 4B"/>
+  <a u="93DB" b="E7 4C"/>
+  <a u="93DC" b="E7 4D"/>
+  <a u="93DD" b="E7 4E"/>
+  <a u="93DE" b="E7 4F"/>
+  <a u="93DF" b="E7 50"/>
+  <a u="93E0" b="E7 51"/>
+  <a u="93E1" b="E7 52"/>
+  <a u="93E2" b="E7 53"/>
+  <a u="93E3" b="E7 54"/>
+  <a u="93E4" b="E7 55"/>
+  <a u="93E5" b="E7 56"/>
+  <a u="93E6" b="E7 57"/>
+  <a u="93E7" b="E7 58"/>
+  <a u="93E8" b="E7 59"/>
+  <a u="93E9" b="E7 5A"/>
+  <a u="93EA" b="E7 5B"/>
+  <a u="93EB" b="E7 5C"/>
+  <a u="93EC" b="E7 5D"/>
+  <a u="93ED" b="E7 5E"/>
+  <a u="93EE" b="E7 5F"/>
+  <a u="93EF" b="E7 60"/>
+  <a u="93F0" b="E7 61"/>
+  <a u="93F1" b="E7 62"/>
+  <a u="93F2" b="E7 63"/>
+  <a u="93F3" b="E7 64"/>
+  <a u="93F4" b="E7 65"/>
+  <a u="93F5" b="E7 66"/>
+  <a u="93F6" b="E7 67"/>
+  <a u="93F7" b="E7 68"/>
+  <a u="93F8" b="E7 69"/>
+  <a u="93F9" b="E7 6A"/>
+  <a u="93FA" b="E7 6B"/>
+  <a u="93FB" b="E7 6C"/>
+  <a u="93FC" b="E7 6D"/>
+  <a u="93FD" b="E7 6E"/>
+  <a u="93FE" b="E7 6F"/>
+  <a u="93FF" b="E7 70"/>
+  <a u="9400" b="E7 71"/>
+  <a u="9401" b="E7 72"/>
+  <a u="9402" b="E7 73"/>
+  <a u="9403" b="E7 74"/>
+  <a u="9404" b="E7 75"/>
+  <a u="9405" b="E7 76"/>
+  <a u="9406" b="E7 77"/>
+  <a u="9407" b="E7 78"/>
+  <a u="9408" b="E7 79"/>
+  <a u="9409" b="E7 7A"/>
+  <a u="940A" b="E7 7B"/>
+  <a u="940B" b="E7 7C"/>
+  <a u="940C" b="E7 7D"/>
+  <a u="940D" b="E7 7E"/>
+  <a u="940E" b="E7 80"/>
+  <a u="940F" b="E7 81"/>
+  <a u="9410" b="E7 82"/>
+  <a u="9411" b="E7 83"/>
+  <a u="9412" b="E7 84"/>
+  <a u="9413" b="E7 85"/>
+  <a u="9414" b="E7 86"/>
+  <a u="9415" b="E7 87"/>
+  <a u="9416" b="E7 88"/>
+  <a u="9417" b="E7 89"/>
+  <a u="9418" b="E7 8A"/>
+  <a u="9419" b="E7 8B"/>
+  <a u="941A" b="E7 8C"/>
+  <a u="941B" b="E7 8D"/>
+  <a u="941C" b="E7 8E"/>
+  <a u="941D" b="E7 8F"/>
+  <a u="941E" b="E7 90"/>
+  <a u="941F" b="E7 91"/>
+  <a u="9420" b="E7 92"/>
+  <a u="9421" b="E7 93"/>
+  <a u="9422" b="E7 94"/>
+  <a u="9423" b="E7 95"/>
+  <a u="9424" b="E7 96"/>
+  <a u="9425" b="E7 97"/>
+  <a u="9426" b="E7 98"/>
+  <a u="9427" b="E7 99"/>
+  <a u="9428" b="E7 9A"/>
+  <a u="9429" b="E7 9B"/>
+  <a u="942A" b="E7 9C"/>
+  <a u="942B" b="E7 9D"/>
+  <a u="942C" b="E7 9E"/>
+  <a u="942D" b="E7 9F"/>
+  <a u="942E" b="E7 A0"/>
+  <a u="942F" b="E8 40"/>
+  <a u="9430" b="E8 41"/>
+  <a u="9431" b="E8 42"/>
+  <a u="9432" b="E8 43"/>
+  <a u="9433" b="E8 44"/>
+  <a u="9434" b="E8 45"/>
+  <a u="9435" b="E8 46"/>
+  <a u="9436" b="E8 47"/>
+  <a u="9437" b="E8 48"/>
+  <a u="9438" b="E8 49"/>
+  <a u="9439" b="E8 4A"/>
+  <a u="943A" b="E8 4B"/>
+  <a u="943B" b="E8 4C"/>
+  <a u="943C" b="E8 4D"/>
+  <a u="943D" b="E8 4E"/>
+  <a u="943E" b="F6 CD"/>
+  <a u="943F" b="E8 4F"/>
+  <a u="9440" b="E8 50"/>
+  <a u="9441" b="E8 51"/>
+  <a u="9442" b="E8 52"/>
+  <a u="9443" b="E8 53"/>
+  <a u="9444" b="E8 54"/>
+  <a u="9445" b="E8 55"/>
+  <a u="9446" b="E8 56"/>
+  <a u="9447" b="E8 57"/>
+  <a u="9448" b="E8 58"/>
+  <a u="9449" b="E8 59"/>
+  <a u="944A" b="E8 5A"/>
+  <a u="944B" b="E8 5B"/>
+  <a u="944C" b="E8 5C"/>
+  <a u="944D" b="E8 5D"/>
+  <a u="944E" b="E8 5E"/>
+  <a u="944F" b="E8 5F"/>
+  <a u="9450" b="E8 60"/>
+  <a u="9451" b="E8 61"/>
+  <a u="9452" b="E8 62"/>
+  <a u="9453" b="E8 63"/>
+  <a u="9454" b="E8 64"/>
+  <a u="9455" b="E8 65"/>
+  <a u="9456" b="E8 66"/>
+  <a u="9457" b="E8 67"/>
+  <a u="9458" b="E8 68"/>
+  <a u="9459" b="E8 69"/>
+  <a u="945A" b="E8 6A"/>
+  <a u="945B" b="E8 6B"/>
+  <a u="945C" b="E8 6C"/>
+  <a u="945D" b="E8 6D"/>
+  <a u="945E" b="E8 6E"/>
+  <a u="945F" b="E8 6F"/>
+  <a u="9460" b="E8 70"/>
+  <a u="9461" b="E8 71"/>
+  <a u="9462" b="E8 72"/>
+  <a u="9463" b="E8 73"/>
+  <a u="9464" b="E8 74"/>
+  <a u="9465" b="E8 75"/>
+  <a u="9466" b="E8 76"/>
+  <a u="9467" b="E8 77"/>
+  <a u="9468" b="E8 78"/>
+  <a u="9469" b="E8 79"/>
+  <a u="946A" b="E8 7A"/>
+  <a u="946B" b="F6 CE"/>
+  <a u="946C" b="E8 7B"/>
+  <a u="946D" b="E8 7C"/>
+  <a u="946E" b="E8 7D"/>
+  <a u="946F" b="E8 7E"/>
+  <a u="9470" b="E8 80"/>
+  <a u="9471" b="E8 81"/>
+  <a u="9472" b="E8 82"/>
+  <a u="9473" b="E8 83"/>
+  <a u="9474" b="E8 84"/>
+  <a u="9475" b="E8 85"/>
+  <a u="9476" b="E8 86"/>
+  <a u="9477" b="E8 87"/>
+  <a u="9478" b="E8 88"/>
+  <a u="9479" b="E8 89"/>
+  <a u="947A" b="E8 8A"/>
+  <a u="947B" b="E8 8B"/>
+  <a u="947C" b="E8 8C"/>
+  <a u="947D" b="E8 8D"/>
+  <a u="947E" b="E8 8E"/>
+  <a u="947F" b="E8 8F"/>
+  <a u="9480" b="E8 90"/>
+  <a u="9481" b="E8 91"/>
+  <a u="9482" b="E8 92"/>
+  <a u="9483" b="E8 93"/>
+  <a u="9484" b="E8 94"/>
+  <a u="9485" b="EE C4"/>
+  <a u="9486" b="EE C5"/>
+  <a u="9487" b="EE C6"/>
+  <a u="9488" b="D5 EB"/>
+  <a u="9489" b="B6 A4"/>
+  <a u="948A" b="EE C8"/>
+  <a u="948B" b="EE C7"/>
+  <a u="948C" b="EE C9"/>
+  <a u="948D" b="EE CA"/>
+  <a u="948E" b="C7 A5"/>
+  <a u="948F" b="EE CB"/>
+  <a u="9490" b="EE CC"/>
+  <a u="9491" b="E8 95"/>
+  <a u="9492" b="B7 B0"/>
+  <a u="9493" b="B5 F6"/>
+  <a u="9494" b="EE CD"/>
+  <a u="9495" b="EE CF"/>
+  <a u="9496" b="E8 96"/>
+  <a u="9497" b="EE CE"/>
+  <a u="9498" b="E8 97"/>
+  <a u="9499" b="B8 C6"/>
+  <a u="949A" b="EE D0"/>
+  <a u="949B" b="EE D1"/>
+  <a u="949C" b="EE D2"/>
+  <a u="949D" b="B6 DB"/>
+  <a u="949E" b="B3 AE"/>
+  <a u="949F" b="D6 D3"/>
+  <a u="94A0" b="C4 C6"/>
+  <a u="94A1" b="B1 B5"/>
+  <a u="94A2" b="B8 D6"/>
+  <a u="94A3" b="EE D3"/>
+  <a u="94A4" b="EE D4"/>
+  <a u="94A5" b="D4 BF"/>
+  <a u="94A6" b="C7 D5"/>
+  <a u="94A7" b="BE FB"/>
+  <a u="94A8" b="CE D9"/>
+  <a u="94A9" b="B9 B3"/>
+  <a u="94AA" b="EE D6"/>
+  <a u="94AB" b="EE D5"/>
+  <a u="94AC" b="EE D8"/>
+  <a u="94AD" b="EE D7"/>
+  <a u="94AE" b="C5 A5"/>
+  <a u="94AF" b="EE D9"/>
+  <a u="94B0" b="EE DA"/>
+  <a u="94B1" b="C7 AE"/>
+  <a u="94B2" b="EE DB"/>
+  <a u="94B3" b="C7 AF"/>
+  <a u="94B4" b="EE DC"/>
+  <a u="94B5" b="B2 A7"/>
+  <a u="94B6" b="EE DD"/>
+  <a u="94B7" b="EE DE"/>
+  <a u="94B8" b="EE DF"/>
+  <a u="94B9" b="EE E0"/>
+  <a u="94BA" b="EE E1"/>
+  <a u="94BB" b="D7 EA"/>
+  <a u="94BC" b="EE E2"/>
+  <a u="94BD" b="EE E3"/>
+  <a u="94BE" b="BC D8"/>
+  <a u="94BF" b="EE E4"/>
+  <a u="94C0" b="D3 CB"/>
+  <a u="94C1" b="CC FA"/>
+  <a u="94C2" b="B2 AC"/>
+  <a u="94C3" b="C1 E5"/>
+  <a u="94C4" b="EE E5"/>
+  <a u="94C5" b="C7 A6"/>
+  <a u="94C6" b="C3 AD"/>
+  <a u="94C7" b="E8 98"/>
+  <a u="94C8" b="EE E6"/>
+  <a u="94C9" b="EE E7"/>
+  <a u="94CA" b="EE E8"/>
+  <a u="94CB" b="EE E9"/>
+  <a u="94CC" b="EE EA"/>
+  <a u="94CD" b="EE EB"/>
+  <a u="94CE" b="EE EC"/>
+  <a u="94CF" b="E8 99"/>
+  <a u="94D0" b="EE ED"/>
+  <a u="94D1" b="EE EE"/>
+  <a u="94D2" b="EE EF"/>
+  <a u="94D3" b="E8 9A"/>
+  <a u="94D4" b="E8 9B"/>
+  <a u="94D5" b="EE F0"/>
+  <a u="94D6" b="EE F1"/>
+  <a u="94D7" b="EE F2"/>
+  <a u="94D8" b="EE F4"/>
+  <a u="94D9" b="EE F3"/>
+  <a u="94DA" b="E8 9C"/>
+  <a u="94DB" b="EE F5"/>
+  <a u="94DC" b="CD AD"/>
+  <a u="94DD" b="C2 C1"/>
+  <a u="94DE" b="EE F6"/>
+  <a u="94DF" b="EE F7"/>
+  <a u="94E0" b="EE F8"/>
+  <a u="94E1" b="D5 A1"/>
+  <a u="94E2" b="EE F9"/>
+  <a u="94E3" b="CF B3"/>
+  <a u="94E4" b="EE FA"/>
+  <a u="94E5" b="EE FB"/>
+  <a u="94E6" b="E8 9D"/>
+  <a u="94E7" b="EE FC"/>
+  <a u="94E8" b="EE FD"/>
+  <a u="94E9" b="EF A1"/>
+  <a u="94EA" b="EE FE"/>
+  <a u="94EB" b="EF A2"/>
+  <a u="94EC" b="B8 F5"/>
+  <a u="94ED" b="C3 FA"/>
+  <a u="94EE" b="EF A3"/>
+  <a u="94EF" b="EF A4"/>
+  <a u="94F0" b="BD C2"/>
+  <a u="94F1" b="D2 BF"/>
+  <a u="94F2" b="B2 F9"/>
+  <a u="94F3" b="EF A5"/>
+  <a u="94F4" b="EF A6"/>
+  <a u="94F5" b="EF A7"/>
+  <a u="94F6" b="D2 F8"/>
+  <a u="94F7" b="EF A8"/>
+  <a u="94F8" b="D6 FD"/>
+  <a u="94F9" b="EF A9"/>
+  <a u="94FA" b="C6 CC"/>
+  <a u="94FB" b="E8 9E"/>
+  <a u="94FC" b="EF AA"/>
+  <a u="94FD" b="EF AB"/>
+  <a u="94FE" b="C1 B4"/>
+  <a u="94FF" b="EF AC"/>
+  <a u="9500" b="CF FA"/>
+  <a u="9501" b="CB F8"/>
+  <a u="9502" b="EF AE"/>
+  <a u="9503" b="EF AD"/>
+  <a u="9504" b="B3 FA"/>
+  <a u="9505" b="B9 F8"/>
+  <a u="9506" b="EF AF"/>
+  <a u="9507" b="EF B0"/>
+  <a u="9508" b="D0 E2"/>
+  <a u="9509" b="EF B1"/>
+  <a u="950A" b="EF B2"/>
+  <a u="950B" b="B7 E6"/>
+  <a u="950C" b="D0 BF"/>
+  <a u="950D" b="EF B3"/>
+  <a u="950E" b="EF B4"/>
+  <a u="950F" b="EF B5"/>
+  <a u="9510" b="C8 F1"/>
+  <a u="9511" b="CC E0"/>
+  <a u="9512" b="EF B6"/>
+  <a u="9513" b="EF B7"/>
+  <a u="9514" b="EF B8"/>
+  <a u="9515" b="EF B9"/>
+  <a u="9516" b="EF BA"/>
+  <a u="9517" b="D5 E0"/>
+  <a u="9518" b="EF BB"/>
+  <a u="9519" b="B4 ED"/>
+  <a u="951A" b="C3 AA"/>
+  <a u="951B" b="EF BC"/>
+  <a u="951C" b="E8 9F"/>
+  <a u="951D" b="EF BD"/>
+  <a u="951E" b="EF BE"/>
+  <a u="951F" b="EF BF"/>
+  <a u="9520" b="E8 A0"/>
+  <a u="9521" b="CE FD"/>
+  <a u="9522" b="EF C0"/>
+  <a u="9523" b="C2 E0"/>
+  <a u="9524" b="B4 B8"/>
+  <a u="9525" b="D7 B6"/>
+  <a u="9526" b="BD F5"/>
+  <a u="9527" b="E9 40"/>
+  <a u="9528" b="CF C7"/>
+  <a u="9529" b="EF C3"/>
+  <a u="952A" b="EF C1"/>
+  <a u="952B" b="EF C2"/>
+  <a u="952C" b="EF C4"/>
+  <a u="952D" b="B6 A7"/>
+  <a u="952E" b="BC FC"/>
+  <a u="952F" b="BE E2"/>
+  <a u="9530" b="C3 CC"/>
+  <a u="9531" b="EF C5"/>
+  <a u="9532" b="EF C6"/>
+  <a u="9533" b="E9 41"/>
+  <a u="9534" b="EF C7"/>
+  <a u="9535" b="EF CF"/>
+  <a u="9536" b="EF C8"/>
+  <a u="9537" b="EF C9"/>
+  <a u="9538" b="EF CA"/>
+  <a u="9539" b="C7 C2"/>
+  <a u="953A" b="EF F1"/>
+  <a u="953B" b="B6 CD"/>
+  <a u="953C" b="EF CB"/>
+  <a u="953D" b="E9 42"/>
+  <a u="953E" b="EF CC"/>
+  <a u="953F" b="EF CD"/>
+  <a u="9540" b="B6 C6"/>
+  <a u="9541" b="C3 BE"/>
+  <a u="9542" b="EF CE"/>
+  <a u="9543" b="E9 43"/>
+  <a u="9544" b="EF D0"/>
+  <a u="9545" b="EF D1"/>
+  <a u="9546" b="EF D2"/>
+  <a u="9547" b="D5 F2"/>
+  <a u="9548" b="E9 44"/>
+  <a u="9549" b="EF D3"/>
+  <a u="954A" b="C4 F7"/>
+  <a u="954B" b="E9 45"/>
+  <a u="954C" b="EF D4"/>
+  <a u="954D" b="C4 F8"/>
+  <a u="954E" b="EF D5"/>
+  <a u="954F" b="EF D6"/>
+  <a u="9550" b="B8 E4"/>
+  <a u="9551" b="B0 F7"/>
+  <a u="9552" b="EF D7"/>
+  <a u="9553" b="EF D8"/>
+  <a u="9554" b="EF D9"/>
+  <a u="9555" b="E9 46"/>
+  <a u="9556" b="EF DA"/>
+  <a u="9557" b="EF DB"/>
+  <a u="9558" b="EF DC"/>
+  <a u="9559" b="EF DD"/>
+  <a u="955A" b="E9 47"/>
+  <a u="955B" b="EF DE"/>
+  <a u="955C" b="BE B5"/>
+  <a u="955D" b="EF E1"/>
+  <a u="955E" b="EF DF"/>
+  <a u="955F" b="EF E0"/>
+  <a u="9560" b="E9 48"/>
+  <a u="9561" b="EF E2"/>
+  <a u="9562" b="EF E3"/>
+  <a u="9563" b="C1 CD"/>
+  <a u="9564" b="EF E4"/>
+  <a u="9565" b="EF E5"/>
+  <a u="9566" b="EF E6"/>
+  <a u="9567" b="EF E7"/>
+  <a u="9568" b="EF E8"/>
+  <a u="9569" b="EF E9"/>
+  <a u="956A" b="EF EA"/>
+  <a u="956B" b="EF EB"/>
+  <a u="956C" b="EF EC"/>
+  <a u="956D" b="C0 D8"/>
+  <a u="956E" b="E9 49"/>
+  <a u="956F" b="EF ED"/>
+  <a u="9570" b="C1 AD"/>
+  <a u="9571" b="EF EE"/>
+  <a u="9572" b="EF EF"/>
+  <a u="9573" b="EF F0"/>
+  <a u="9574" b="E9 4A"/>
+  <a u="9575" b="E9 4B"/>
+  <a u="9576" b="CF E2"/>
+  <a u="9577" b="E9 4C"/>
+  <a u="9578" b="E9 4D"/>
+  <a u="9579" b="E9 4E"/>
+  <a u="957A" b="E9 4F"/>
+  <a u="957B" b="E9 50"/>
+  <a u="957C" b="E9 51"/>
+  <a u="957D" b="E9 52"/>
+  <a u="957E" b="E9 53"/>
+  <a u="957F" b="B3 A4"/>
+  <a u="9580" b="E9 54"/>
+  <a u="9581" b="E9 55"/>
+  <a u="9582" b="E9 56"/>
+  <a u="9583" b="E9 57"/>
+  <a u="9584" b="E9 58"/>
+  <a u="9585" b="E9 59"/>
+  <a u="9586" b="E9 5A"/>
+  <a u="9587" b="E9 5B"/>
+  <a u="9588" b="E9 5C"/>
+  <a u="9589" b="E9 5D"/>
+  <a u="958A" b="E9 5E"/>
+  <a u="958B" b="E9 5F"/>
+  <a u="958C" b="E9 60"/>
+  <a u="958D" b="E9 61"/>
+  <a u="958E" b="E9 62"/>
+  <a u="958F" b="E9 63"/>
+  <a u="9590" b="E9 64"/>
+  <a u="9591" b="E9 65"/>
+  <a u="9592" b="E9 66"/>
+  <a u="9593" b="E9 67"/>
+  <a u="9594" b="E9 68"/>
+  <a u="9595" b="E9 69"/>
+  <a u="9596" b="E9 6A"/>
+  <a u="9597" b="E9 6B"/>
+  <a u="9598" b="E9 6C"/>
+  <a u="9599" b="E9 6D"/>
+  <a u="959A" b="E9 6E"/>
+  <a u="959B" b="E9 6F"/>
+  <a u="959C" b="E9 70"/>
+  <a u="959D" b="E9 71"/>
+  <a u="959E" b="E9 72"/>
+  <a u="959F" b="E9 73"/>
+  <a u="95A0" b="E9 74"/>
+  <a u="95A1" b="E9 75"/>
+  <a u="95A2" b="E9 76"/>
+  <a u="95A3" b="E9 77"/>
+  <a u="95A4" b="E9 78"/>
+  <a u="95A5" b="E9 79"/>
+  <a u="95A6" b="E9 7A"/>
+  <a u="95A7" b="E9 7B"/>
+  <a u="95A8" b="E9 7C"/>
+  <a u="95A9" b="E9 7D"/>
+  <a u="95AA" b="E9 7E"/>
+  <a u="95AB" b="E9 80"/>
+  <a u="95AC" b="E9 81"/>
+  <a u="95AD" b="E9 82"/>
+  <a u="95AE" b="E9 83"/>
+  <a u="95AF" b="E9 84"/>
+  <a u="95B0" b="E9 85"/>
+  <a u="95B1" b="E9 86"/>
+  <a u="95B2" b="E9 87"/>
+  <a u="95B3" b="E9 88"/>
+  <a u="95B4" b="E9 89"/>
+  <a u="95B5" b="E9 8A"/>
+  <a u="95B6" b="E9 8B"/>
+  <a u="95B7" b="E9 8C"/>
+  <a u="95B8" b="E9 8D"/>
+  <a u="95B9" b="E9 8E"/>
+  <a u="95BA" b="E9 8F"/>
+  <a u="95BB" b="E9 90"/>
+  <a u="95BC" b="E9 91"/>
+  <a u="95BD" b="E9 92"/>
+  <a u="95BE" b="E9 93"/>
+  <a u="95BF" b="E9 94"/>
+  <a u="95C0" b="E9 95"/>
+  <a u="95C1" b="E9 96"/>
+  <a u="95C2" b="E9 97"/>
+  <a u="95C3" b="E9 98"/>
+  <a u="95C4" b="E9 99"/>
+  <a u="95C5" b="E9 9A"/>
+  <a u="95C6" b="E9 9B"/>
+  <a u="95C7" b="E9 9C"/>
+  <a u="95C8" b="E9 9D"/>
+  <a u="95C9" b="E9 9E"/>
+  <a u="95CA" b="E9 9F"/>
+  <a u="95CB" b="E9 A0"/>
+  <a u="95CC" b="EA 40"/>
+  <a u="95CD" b="EA 41"/>
+  <a u="95CE" b="EA 42"/>
+  <a u="95CF" b="EA 43"/>
+  <a u="95D0" b="EA 44"/>
+  <a u="95D1" b="EA 45"/>
+  <a u="95D2" b="EA 46"/>
+  <a u="95D3" b="EA 47"/>
+  <a u="95D4" b="EA 48"/>
+  <a u="95D5" b="EA 49"/>
+  <a u="95D6" b="EA 4A"/>
+  <a u="95D7" b="EA 4B"/>
+  <a u="95D8" b="EA 4C"/>
+  <a u="95D9" b="EA 4D"/>
+  <a u="95DA" b="EA 4E"/>
+  <a u="95DB" b="EA 4F"/>
+  <a u="95DC" b="EA 50"/>
+  <a u="95DD" b="EA 51"/>
+  <a u="95DE" b="EA 52"/>
+  <a u="95DF" b="EA 53"/>
+  <a u="95E0" b="EA 54"/>
+  <a u="95E1" b="EA 55"/>
+  <a u="95E2" b="EA 56"/>
+  <a u="95E3" b="EA 57"/>
+  <a u="95E4" b="EA 58"/>
+  <a u="95E5" b="EA 59"/>
+  <a u="95E6" b="EA 5A"/>
+  <a u="95E7" b="EA 5B"/>
+  <a u="95E8" b="C3 C5"/>
+  <a u="95E9" b="E3 C5"/>
+  <a u="95EA" b="C9 C1"/>
+  <a u="95EB" b="E3 C6"/>
+  <a u="95EC" b="EA 5C"/>
+  <a u="95ED" b="B1 D5"/>
+  <a u="95EE" b="CE CA"/>
+  <a u="95EF" b="B4 B3"/>
+  <a u="95F0" b="C8 F2"/>
+  <a u="95F1" b="E3 C7"/>
+  <a u="95F2" b="CF D0"/>
+  <a u="95F3" b="E3 C8"/>
+  <a u="95F4" b="BC E4"/>
+  <a u="95F5" b="E3 C9"/>
+  <a u="95F6" b="E3 CA"/>
+  <a u="95F7" b="C3 C6"/>
+  <a u="95F8" b="D5 A2"/>
+  <a u="95F9" b="C4 D6"/>
+  <a u="95FA" b="B9 EB"/>
+  <a u="95FB" b="CE C5"/>
+  <a u="95FC" b="E3 CB"/>
+  <a u="95FD" b="C3 F6"/>
+  <a u="95FE" b="E3 CC"/>
+  <a u="95FF" b="EA 5D"/>
+  <a u="9600" b="B7 A7"/>
+  <a u="9601" b="B8 F3"/>
+  <a u="9602" b="BA D2"/>
+  <a u="9603" b="E3 CD"/>
+  <a u="9604" b="E3 CE"/>
+  <a u="9605" b="D4 C4"/>
+  <a u="9606" b="E3 CF"/>
+  <a u="9607" b="EA 5E"/>
+  <a u="9608" b="E3 D0"/>
+  <a u="9609" b="D1 CB"/>
+  <a u="960A" b="E3 D1"/>
+  <a u="960B" b="E3 D2"/>
+  <a u="960C" b="E3 D3"/>
+  <a u="960D" b="E3 D4"/>
+  <a u="960E" b="D1 D6"/>
+  <a u="960F" b="E3 D5"/>
+  <a u="9610" b="B2 FB"/>
+  <a u="9611" b="C0 BB"/>
+  <a u="9612" b="E3 D6"/>
+  <a u="9613" b="EA 5F"/>
+  <a u="9614" b="C0 AB"/>
+  <a u="9615" b="E3 D7"/>
+  <a u="9616" b="E3 D8"/>
+  <a u="9617" b="E3 D9"/>
+  <a u="9618" b="EA 60"/>
+  <a u="9619" b="E3 DA"/>
+  <a u="961A" b="E3 DB"/>
+  <a u="961B" b="EA 61"/>
+  <a u="961C" b="B8 B7"/>
+  <a u="961D" b="DA E2"/>
+  <a u="961E" b="EA 62"/>
+  <a u="961F" b="B6 D3"/>
+  <a u="9620" b="EA 63"/>
+  <a u="9621" b="DA E4"/>
+  <a u="9622" b="DA E3"/>
+  <a u="9623" b="EA 64"/>
+  <a u="9624" b="EA 65"/>
+  <a u="9625" b="EA 66"/>
+  <a u="9626" b="EA 67"/>
+  <a u="9627" b="EA 68"/>
+  <a u="9628" b="EA 69"/>
+  <a u="9629" b="EA 6A"/>
+  <a u="962A" b="DA E6"/>
+  <a u="962B" b="EA 6B"/>
+  <a u="962C" b="EA 6C"/>
+  <a u="962D" b="EA 6D"/>
+  <a u="962E" b="C8 EE"/>
+  <a u="962F" b="EA 6E"/>
+  <a u="9630" b="EA 6F"/>
+  <a u="9631" b="DA E5"/>
+  <a u="9632" b="B7 C0"/>
+  <a u="9633" b="D1 F4"/>
+  <a u="9634" b="D2 F5"/>
+  <a u="9635" b="D5 F3"/>
+  <a u="9636" b="BD D7"/>
+  <a u="9637" b="EA 70"/>
+  <a u="9638" b="EA 71"/>
+  <a u="9639" b="EA 72"/>
+  <a u="963A" b="EA 73"/>
+  <a u="963B" b="D7 E8"/>
+  <a u="963C" b="DA E8"/>
+  <a u="963D" b="DA E7"/>
+  <a u="963E" b="EA 74"/>
+  <a u="963F" b="B0 A2"/>
+  <a u="9640" b="CD D3"/>
+  <a u="9641" b="EA 75"/>
+  <a u="9642" b="DA E9"/>
+  <a u="9643" b="EA 76"/>
+  <a u="9644" b="B8 BD"/>
+  <a u="9645" b="BC CA"/>
+  <a u="9646" b="C2 BD"/>
+  <a u="9647" b="C2 A4"/>
+  <a u="9648" b="B3 C2"/>
+  <a u="9649" b="DA EA"/>
+  <a u="964A" b="EA 77"/>
+  <a u="964B" b="C2 AA"/>
+  <a u="964C" b="C4 B0"/>
+  <a u="964D" b="BD B5"/>
+  <a u="964E" b="EA 78"/>
+  <a u="964F" b="EA 79"/>
+  <a u="9650" b="CF DE"/>
+  <a u="9651" b="EA 7A"/>
+  <a u="9652" b="EA 7B"/>
+  <a u="9653" b="EA 7C"/>
+  <a u="9654" b="DA EB"/>
+  <a u="9655" b="C9 C2"/>
+  <a u="9656" b="EA 7D"/>
+  <a u="9657" b="EA 7E"/>
+  <a u="9658" b="EA 80"/>
+  <a u="9659" b="EA 81"/>
+  <a u="965A" b="EA 82"/>
+  <a u="965B" b="B1 DD"/>
+  <a u="965C" b="EA 83"/>
+  <a u="965D" b="EA 84"/>
+  <a u="965E" b="EA 85"/>
+  <a u="965F" b="DA EC"/>
+  <a u="9660" b="EA 86"/>
+  <a u="9661" b="B6 B8"/>
+  <a u="9662" b="D4 BA"/>
+  <a u="9663" b="EA 87"/>
+  <a u="9664" b="B3 FD"/>
+  <a u="9665" b="EA 88"/>
+  <a u="9666" b="EA 89"/>
+  <a u="9667" b="DA ED"/>
+  <a u="9668" b="D4 C9"/>
+  <a u="9669" b="CF D5"/>
+  <a u="966A" b="C5 E3"/>
+  <a u="966B" b="EA 8A"/>
+  <a u="966C" b="DA EE"/>
+  <a u="966D" b="EA 8B"/>
+  <a u="966E" b="EA 8C"/>
+  <a u="966F" b="EA 8D"/>
+  <a u="9670" b="EA 8E"/>
+  <a u="9671" b="EA 8F"/>
+  <a u="9672" b="DA EF"/>
+  <a u="9673" b="EA 90"/>
+  <a u="9674" b="DA F0"/>
+  <a u="9675" b="C1 EA"/>
+  <a u="9676" b="CC D5"/>
+  <a u="9677" b="CF DD"/>
+  <a u="9678" b="EA 91"/>
+  <a u="9679" b="EA 92"/>
+  <a u="967A" b="EA 93"/>
+  <a u="967B" b="EA 94"/>
+  <a u="967C" b="EA 95"/>
+  <a u="967D" b="EA 96"/>
+  <a u="967E" b="EA 97"/>
+  <a u="967F" b="EA 98"/>
+  <a u="9680" b="EA 99"/>
+  <a u="9681" b="EA 9A"/>
+  <a u="9682" b="EA 9B"/>
+  <a u="9683" b="EA 9C"/>
+  <a u="9684" b="EA 9D"/>
+  <a u="9685" b="D3 E7"/>
+  <a u="9686" b="C2 A1"/>
+  <a u="9687" b="EA 9E"/>
+  <a u="9688" b="DA F1"/>
+  <a u="9689" b="EA 9F"/>
+  <a u="968A" b="EA A0"/>
+  <a u="968B" b="CB E5"/>
+  <a u="968C" b="EB 40"/>
+  <a u="968D" b="DA F2"/>
+  <a u="968E" b="EB 41"/>
+  <a u="968F" b="CB E6"/>
+  <a u="9690" b="D2 FE"/>
+  <a u="9691" b="EB 42"/>
+  <a u="9692" b="EB 43"/>
+  <a u="9693" b="EB 44"/>
+  <a u="9694" b="B8 F4"/>
+  <a u="9695" b="EB 45"/>
+  <a u="9696" b="EB 46"/>
+  <a u="9697" b="DA F3"/>
+  <a u="9698" b="B0 AF"/>
+  <a u="9699" b="CF B6"/>
+  <a u="969A" b="EB 47"/>
+  <a u="969B" b="EB 48"/>
+  <a u="969C" b="D5 CF"/>
+  <a u="969D" b="EB 49"/>
+  <a u="969E" b="EB 4A"/>
+  <a u="969F" b="EB 4B"/>
+  <a u="96A0" b="EB 4C"/>
+  <a u="96A1" b="EB 4D"/>
+  <a u="96A2" b="EB 4E"/>
+  <a u="96A3" b="EB 4F"/>
+  <a u="96A4" b="EB 50"/>
+  <a u="96A5" b="EB 51"/>
+  <a u="96A6" b="EB 52"/>
+  <a u="96A7" b="CB ED"/>
+  <a u="96A8" b="EB 53"/>
+  <a u="96A9" b="EB 54"/>
+  <a u="96AA" b="EB 55"/>
+  <a u="96AB" b="EB 56"/>
+  <a u="96AC" b="EB 57"/>
+  <a u="96AD" b="EB 58"/>
+  <a u="96AE" b="EB 59"/>
+  <a u="96AF" b="EB 5A"/>
+  <a u="96B0" b="DA F4"/>
+  <a u="96B1" b="EB 5B"/>
+  <a u="96B2" b="EB 5C"/>
+  <a u="96B3" b="E3 C4"/>
+  <a u="96B4" b="EB 5D"/>
+  <a u="96B5" b="EB 5E"/>
+  <a u="96B6" b="C1 A5"/>
+  <a u="96B7" b="EB 5F"/>
+  <a u="96B8" b="EB 60"/>
+  <a u="96B9" b="F6 BF"/>
+  <a u="96BA" b="EB 61"/>
+  <a u="96BB" b="EB 62"/>
+  <a u="96BC" b="F6 C0"/>
+  <a u="96BD" b="F6 C1"/>
+  <a u="96BE" b="C4 D1"/>
+  <a u="96BF" b="EB 63"/>
+  <a u="96C0" b="C8 B8"/>
+  <a u="96C1" b="D1 E3"/>
+  <a u="96C2" b="EB 64"/>
+  <a u="96C3" b="EB 65"/>
+  <a u="96C4" b="D0 DB"/>
+  <a u="96C5" b="D1 C5"/>
+  <a u="96C6" b="BC AF"/>
+  <a u="96C7" b="B9 CD"/>
+  <a u="96C8" b="EB 66"/>
+  <a u="96C9" b="EF F4"/>
+  <a u="96CA" b="EB 67"/>
+  <a u="96CB" b="EB 68"/>
+  <a u="96CC" b="B4 C6"/>
+  <a u="96CD" b="D3 BA"/>
+  <a u="96CE" b="F6 C2"/>
+  <a u="96CF" b="B3 FB"/>
+  <a u="96D0" b="EB 69"/>
+  <a u="96D1" b="EB 6A"/>
+  <a u="96D2" b="F6 C3"/>
+  <a u="96D3" b="EB 6B"/>
+  <a u="96D4" b="EB 6C"/>
+  <a u="96D5" b="B5 F1"/>
+  <a u="96D6" b="EB 6D"/>
+  <a u="96D7" b="EB 6E"/>
+  <a u="96D8" b="EB 6F"/>
+  <a u="96D9" b="EB 70"/>
+  <a u="96DA" b="EB 71"/>
+  <a u="96DB" b="EB 72"/>
+  <a u="96DC" b="EB 73"/>
+  <a u="96DD" b="EB 74"/>
+  <a u="96DE" b="EB 75"/>
+  <a u="96DF" b="EB 76"/>
+  <a u="96E0" b="F6 C5"/>
+  <a u="96E1" b="EB 77"/>
+  <a u="96E2" b="EB 78"/>
+  <a u="96E3" b="EB 79"/>
+  <a u="96E4" b="EB 7A"/>
+  <a u="96E5" b="EB 7B"/>
+  <a u="96E6" b="EB 7C"/>
+  <a u="96E7" b="EB 7D"/>
+  <a u="96E8" b="D3 EA"/>
+  <a u="96E9" b="F6 A7"/>
+  <a u="96EA" b="D1 A9"/>
+  <a u="96EB" b="EB 7E"/>
+  <a u="96EC" b="EB 80"/>
+  <a u="96ED" b="EB 81"/>
+  <a u="96EE" b="EB 82"/>
+  <a u="96EF" b="F6 A9"/>
+  <a u="96F0" b="EB 83"/>
+  <a u="96F1" b="EB 84"/>
+  <a u="96F2" b="EB 85"/>
+  <a u="96F3" b="F6 A8"/>
+  <a u="96F4" b="EB 86"/>
+  <a u="96F5" b="EB 87"/>
+  <a u="96F6" b="C1 E3"/>
+  <a u="96F7" b="C0 D7"/>
+  <a u="96F8" b="EB 88"/>
+  <a u="96F9" b="B1 A2"/>
+  <a u="96FA" b="EB 89"/>
+  <a u="96FB" b="EB 8A"/>
+  <a u="96FC" b="EB 8B"/>
+  <a u="96FD" b="EB 8C"/>
+  <a u="96FE" b="CE ED"/>
+  <a u="96FF" b="EB 8D"/>
+  <a u="9700" b="D0 E8"/>
+  <a u="9701" b="F6 AB"/>
+  <a u="9702" b="EB 8E"/>
+  <a u="9703" b="EB 8F"/>
+  <a u="9704" b="CF F6"/>
+  <a u="9705" b="EB 90"/>
+  <a u="9706" b="F6 AA"/>
+  <a u="9707" b="D5 F0"/>
+  <a u="9708" b="F6 AC"/>
+  <a u="9709" b="C3 B9"/>
+  <a u="970A" b="EB 91"/>
+  <a u="970B" b="EB 92"/>
+  <a u="970C" b="EB 93"/>
+  <a u="970D" b="BB F4"/>
+  <a u="970E" b="F6 AE"/>
+  <a u="970F" b="F6 AD"/>
+  <a u="9710" b="EB 94"/>
+  <a u="9711" b="EB 95"/>
+  <a u="9712" b="EB 96"/>
+  <a u="9713" b="C4 DE"/>
+  <a u="9714" b="EB 97"/>
+  <a u="9715" b="EB 98"/>
+  <a u="9716" b="C1 D8"/>
+  <a u="9717" b="EB 99"/>
+  <a u="9718" b="EB 9A"/>
+  <a u="9719" b="EB 9B"/>
+  <a u="971A" b="EB 9C"/>
+  <a u="971B" b="EB 9D"/>
+  <a u="971C" b="CB AA"/>
+  <a u="971D" b="EB 9E"/>
+  <a u="971E" b="CF BC"/>
+  <a u="971F" b="EB 9F"/>
+  <a u="9720" b="EB A0"/>
+  <a u="9721" b="EC 40"/>
+  <a u="9722" b="EC 41"/>
+  <a u="9723" b="EC 42"/>
+  <a u="9724" b="EC 43"/>
+  <a u="9725" b="EC 44"/>
+  <a u="9726" b="EC 45"/>
+  <a u="9727" b="EC 46"/>
+  <a u="9728" b="EC 47"/>
+  <a u="9729" b="EC 48"/>
+  <a u="972A" b="F6 AF"/>
+  <a u="972B" b="EC 49"/>
+  <a u="972C" b="EC 4A"/>
+  <a u="972D" b="F6 B0"/>
+  <a u="972E" b="EC 4B"/>
+  <a u="972F" b="EC 4C"/>
+  <a u="9730" b="F6 B1"/>
+  <a u="9731" b="EC 4D"/>
+  <a u="9732" b="C2 B6"/>
+  <a u="9733" b="EC 4E"/>
+  <a u="9734" b="EC 4F"/>
+  <a u="9735" b="EC 50"/>
+  <a u="9736" b="EC 51"/>
+  <a u="9737" b="EC 52"/>
+  <a u="9738" b="B0 D4"/>
+  <a u="9739" b="C5 F9"/>
+  <a u="973A" b="EC 53"/>
+  <a u="973B" b="EC 54"/>
+  <a u="973C" b="EC 55"/>
+  <a u="973D" b="EC 56"/>
+  <a u="973E" b="F6 B2"/>
+  <a u="973F" b="EC 57"/>
+  <a u="9740" b="EC 58"/>
+  <a u="9741" b="EC 59"/>
+  <a u="9742" b="EC 5A"/>
+  <a u="9743" b="EC 5B"/>
+  <a u="9744" b="EC 5C"/>
+  <a u="9745" b="EC 5D"/>
+  <a u="9746" b="EC 5E"/>
+  <a u="9747" b="EC 5F"/>
+  <a u="9748" b="EC 60"/>
+  <a u="9749" b="EC 61"/>
+  <a u="974A" b="EC 62"/>
+  <a u="974B" b="EC 63"/>
+  <a u="974C" b="EC 64"/>
+  <a u="974D" b="EC 65"/>
+  <a u="974E" b="EC 66"/>
+  <a u="974F" b="EC 67"/>
+  <a u="9750" b="EC 68"/>
+  <a u="9751" b="EC 69"/>
+  <a u="9752" b="C7 E0"/>
+  <a u="9753" b="F6 A6"/>
+  <a u="9754" b="EC 6A"/>
+  <a u="9755" b="EC 6B"/>
+  <a u="9756" b="BE B8"/>
+  <a u="9757" b="EC 6C"/>
+  <a u="9758" b="EC 6D"/>
+  <a u="9759" b="BE B2"/>
+  <a u="975A" b="EC 6E"/>
+  <a u="975B" b="B5 E5"/>
+  <a u="975C" b="EC 6F"/>
+  <a u="975D" b="EC 70"/>
+  <a u="975E" b="B7 C7"/>
+  <a u="975F" b="EC 71"/>
+  <a u="9760" b="BF BF"/>
+  <a u="9761" b="C3 D2"/>
+  <a u="9762" b="C3 E6"/>
+  <a u="9763" b="EC 72"/>
+  <a u="9764" b="EC 73"/>
+  <a u="9765" b="D8 CC"/>
+  <a u="9766" b="EC 74"/>
+  <a u="9767" b="EC 75"/>
+  <a u="9768" b="EC 76"/>
+  <a u="9769" b="B8 EF"/>
+  <a u="976A" b="EC 77"/>
+  <a u="976B" b="EC 78"/>
+  <a u="976C" b="EC 79"/>
+  <a u="976D" b="EC 7A"/>
+  <a u="976E" b="EC 7B"/>
+  <a u="976F" b="EC 7C"/>
+  <a u="9770" b="EC 7D"/>
+  <a u="9771" b="EC 7E"/>
+  <a u="9772" b="EC 80"/>
+  <a u="9773" b="BD F9"/>
+  <a u="9774" b="D1 A5"/>
+  <a u="9775" b="EC 81"/>
+  <a u="9776" b="B0 D0"/>
+  <a u="9777" b="EC 82"/>
+  <a u="9778" b="EC 83"/>
+  <a u="9779" b="EC 84"/>
+  <a u="977A" b="EC 85"/>
+  <a u="977B" b="EC 86"/>
+  <a u="977C" b="F7 B0"/>
+  <a u="977D" b="EC 87"/>
+  <a u="977E" b="EC 88"/>
+  <a u="977F" b="EC 89"/>
+  <a u="9780" b="EC 8A"/>
+  <a u="9781" b="EC 8B"/>
+  <a u="9782" b="EC 8C"/>
+  <a u="9783" b="EC 8D"/>
+  <a u="9784" b="EC 8E"/>
+  <a u="9785" b="F7 B1"/>
+  <a u="9786" b="EC 8F"/>
+  <a u="9787" b="EC 90"/>
+  <a u="9788" b="EC 91"/>
+  <a u="9789" b="EC 92"/>
+  <a u="978A" b="EC 93"/>
+  <a u="978B" b="D0 AC"/>
+  <a u="978C" b="EC 94"/>
+  <a u="978D" b="B0 B0"/>
+  <a u="978E" b="EC 95"/>
+  <a u="978F" b="EC 96"/>
+  <a u="9790" b="EC 97"/>
+  <a u="9791" b="F7 B2"/>
+  <a u="9792" b="F7 B3"/>
+  <a u="9793" b="EC 98"/>
+  <a u="9794" b="F7 B4"/>
+  <a u="9795" b="EC 99"/>
+  <a u="9796" b="EC 9A"/>
+  <a u="9797" b="EC 9B"/>
+  <a u="9798" b="C7 CA"/>
+  <a u="9799" b="EC 9C"/>
+  <a u="979A" b="EC 9D"/>
+  <a u="979B" b="EC 9E"/>
+  <a u="979C" b="EC 9F"/>
+  <a u="979D" b="EC A0"/>
+  <a u="979E" b="ED 40"/>
+  <a u="979F" b="ED 41"/>
+  <a u="97A0" b="BE CF"/>
+  <a u="97A1" b="ED 42"/>
+  <a u="97A2" b="ED 43"/>
+  <a u="97A3" b="F7 B7"/>
+  <a u="97A4" b="ED 44"/>
+  <a u="97A5" b="ED 45"/>
+  <a u="97A6" b="ED 46"/>
+  <a u="97A7" b="ED 47"/>
+  <a u="97A8" b="ED 48"/>
+  <a u="97A9" b="ED 49"/>
+  <a u="97AA" b="ED 4A"/>
+  <a u="97AB" b="F7 B6"/>
+  <a u="97AC" b="ED 4B"/>
+  <a u="97AD" b="B1 DE"/>
+  <a u="97AE" b="ED 4C"/>
+  <a u="97AF" b="F7 B5"/>
+  <a u="97B0" b="ED 4D"/>
+  <a u="97B1" b="ED 4E"/>
+  <a u="97B2" b="F7 B8"/>
+  <a u="97B3" b="ED 4F"/>
+  <a u="97B4" b="F7 B9"/>
+  <a u="97B5" b="ED 50"/>
+  <a u="97B6" b="ED 51"/>
+  <a u="97B7" b="ED 52"/>
+  <a u="97B8" b="ED 53"/>
+  <a u="97B9" b="ED 54"/>
+  <a u="97BA" b="ED 55"/>
+  <a u="97BB" b="ED 56"/>
+  <a u="97BC" b="ED 57"/>
+  <a u="97BD" b="ED 58"/>
+  <a u="97BE" b="ED 59"/>
+  <a u="97BF" b="ED 5A"/>
+  <a u="97C0" b="ED 5B"/>
+  <a u="97C1" b="ED 5C"/>
+  <a u="97C2" b="ED 5D"/>
+  <a u="97C3" b="ED 5E"/>
+  <a u="97C4" b="ED 5F"/>
+  <a u="97C5" b="ED 60"/>
+  <a u="97C6" b="ED 61"/>
+  <a u="97C7" b="ED 62"/>
+  <a u="97C8" b="ED 63"/>
+  <a u="97C9" b="ED 64"/>
+  <a u="97CA" b="ED 65"/>
+  <a u="97CB" b="ED 66"/>
+  <a u="97CC" b="ED 67"/>
+  <a u="97CD" b="ED 68"/>
+  <a u="97CE" b="ED 69"/>
+  <a u="97CF" b="ED 6A"/>
+  <a u="97D0" b="ED 6B"/>
+  <a u="97D1" b="ED 6C"/>
+  <a u="97D2" b="ED 6D"/>
+  <a u="97D3" b="ED 6E"/>
+  <a u="97D4" b="ED 6F"/>
+  <a u="97D5" b="ED 70"/>
+  <a u="97D6" b="ED 71"/>
+  <a u="97D7" b="ED 72"/>
+  <a u="97D8" b="ED 73"/>
+  <a u="97D9" b="ED 74"/>
+  <a u="97DA" b="ED 75"/>
+  <a u="97DB" b="ED 76"/>
+  <a u="97DC" b="ED 77"/>
+  <a u="97DD" b="ED 78"/>
+  <a u="97DE" b="ED 79"/>
+  <a u="97DF" b="ED 7A"/>
+  <a u="97E0" b="ED 7B"/>
+  <a u="97E1" b="ED 7C"/>
+  <a u="97E2" b="ED 7D"/>
+  <a u="97E3" b="ED 7E"/>
+  <a u="97E4" b="ED 80"/>
+  <a u="97E5" b="ED 81"/>
+  <a u="97E6" b="CE A4"/>
+  <a u="97E7" b="C8 CD"/>
+  <a u="97E8" b="ED 82"/>
+  <a u="97E9" b="BA AB"/>
+  <a u="97EA" b="E8 B8"/>
+  <a u="97EB" b="E8 B9"/>
+  <a u="97EC" b="E8 BA"/>
+  <a u="97ED" b="BE C2"/>
+  <a u="97EE" b="ED 83"/>
+  <a u="97EF" b="ED 84"/>
+  <a u="97F0" b="ED 85"/>
+  <a u="97F1" b="ED 86"/>
+  <a u="97F2" b="ED 87"/>
+  <a u="97F3" b="D2 F4"/>
+  <a u="97F4" b="ED 88"/>
+  <a u="97F5" b="D4 CF"/>
+  <a u="97F6" b="C9 D8"/>
+  <a u="97F7" b="ED 89"/>
+  <a u="97F8" b="ED 8A"/>
+  <a u="97F9" b="ED 8B"/>
+  <a u="97FA" b="ED 8C"/>
+  <a u="97FB" b="ED 8D"/>
+  <a u="97FC" b="ED 8E"/>
+  <a u="97FD" b="ED 8F"/>
+  <a u="97FE" b="ED 90"/>
+  <a u="97FF" b="ED 91"/>
+  <a u="9800" b="ED 92"/>
+  <a u="9801" b="ED 93"/>
+  <a u="9802" b="ED 94"/>
+  <a u="9803" b="ED 95"/>
+  <a u="9804" b="ED 96"/>
+  <a u="9805" b="ED 97"/>
+  <a u="9806" b="ED 98"/>
+  <a u="9807" b="ED 99"/>
+  <a u="9808" b="ED 9A"/>
+  <a u="9809" b="ED 9B"/>
+  <a u="980A" b="ED 9C"/>
+  <a u="980B" b="ED 9D"/>
+  <a u="980C" b="ED 9E"/>
+  <a u="980D" b="ED 9F"/>
+  <a u="980E" b="ED A0"/>
+  <a u="980F" b="EE 40"/>
+  <a u="9810" b="EE 41"/>
+  <a u="9811" b="EE 42"/>
+  <a u="9812" b="EE 43"/>
+  <a u="9813" b="EE 44"/>
+  <a u="9814" b="EE 45"/>
+  <a u="9815" b="EE 46"/>
+  <a u="9816" b="EE 47"/>
+  <a u="9817" b="EE 48"/>
+  <a u="9818" b="EE 49"/>
+  <a u="9819" b="EE 4A"/>
+  <a u="981A" b="EE 4B"/>
+  <a u="981B" b="EE 4C"/>
+  <a u="981C" b="EE 4D"/>
+  <a u="981D" b="EE 4E"/>
+  <a u="981E" b="EE 4F"/>
+  <a u="981F" b="EE 50"/>
+  <a u="9820" b="EE 51"/>
+  <a u="9821" b="EE 52"/>
+  <a u="9822" b="EE 53"/>
+  <a u="9823" b="EE 54"/>
+  <a u="9824" b="EE 55"/>
+  <a u="9825" b="EE 56"/>
+  <a u="9826" b="EE 57"/>
+  <a u="9827" b="EE 58"/>
+  <a u="9828" b="EE 59"/>
+  <a u="9829" b="EE 5A"/>
+  <a u="982A" b="EE 5B"/>
+  <a u="982B" b="EE 5C"/>
+  <a u="982C" b="EE 5D"/>
+  <a u="982D" b="EE 5E"/>
+  <a u="982E" b="EE 5F"/>
+  <a u="982F" b="EE 60"/>
+  <a u="9830" b="EE 61"/>
+  <a u="9831" b="EE 62"/>
+  <a u="9832" b="EE 63"/>
+  <a u="9833" b="EE 64"/>
+  <a u="9834" b="EE 65"/>
+  <a u="9835" b="EE 66"/>
+  <a u="9836" b="EE 67"/>
+  <a u="9837" b="EE 68"/>
+  <a u="9838" b="EE 69"/>
+  <a u="9839" b="EE 6A"/>
+  <a u="983A" b="EE 6B"/>
+  <a u="983B" b="EE 6C"/>
+  <a u="983C" b="EE 6D"/>
+  <a u="983D" b="EE 6E"/>
+  <a u="983E" b="EE 6F"/>
+  <a u="983F" b="EE 70"/>
+  <a u="9840" b="EE 71"/>
+  <a u="9841" b="EE 72"/>
+  <a u="9842" b="EE 73"/>
+  <a u="9843" b="EE 74"/>
+  <a u="9844" b="EE 75"/>
+  <a u="9845" b="EE 76"/>
+  <a u="9846" b="EE 77"/>
+  <a u="9847" b="EE 78"/>
+  <a u="9848" b="EE 79"/>
+  <a u="9849" b="EE 7A"/>
+  <a u="984A" b="EE 7B"/>
+  <a u="984B" b="EE 7C"/>
+  <a u="984C" b="EE 7D"/>
+  <a u="984D" b="EE 7E"/>
+  <a u="984E" b="EE 80"/>
+  <a u="984F" b="EE 81"/>
+  <a u="9850" b="EE 82"/>
+  <a u="9851" b="EE 83"/>
+  <a u="9852" b="EE 84"/>
+  <a u="9853" b="EE 85"/>
+  <a u="9854" b="EE 86"/>
+  <a u="9855" b="EE 87"/>
+  <a u="9856" b="EE 88"/>
+  <a u="9857" b="EE 89"/>
+  <a u="9858" b="EE 8A"/>
+  <a u="9859" b="EE 8B"/>
+  <a u="985A" b="EE 8C"/>
+  <a u="985B" b="EE 8D"/>
+  <a u="985C" b="EE 8E"/>
+  <a u="985D" b="EE 8F"/>
+  <a u="985E" b="EE 90"/>
+  <a u="985F" b="EE 91"/>
+  <a u="9860" b="EE 92"/>
+  <a u="9861" b="EE 93"/>
+  <a u="9862" b="EE 94"/>
+  <a u="9863" b="EE 95"/>
+  <a u="9864" b="EE 96"/>
+  <a u="9865" b="EE 97"/>
+  <a u="9866" b="EE 98"/>
+  <a u="9867" b="EE 99"/>
+  <a u="9868" b="EE 9A"/>
+  <a u="9869" b="EE 9B"/>
+  <a u="986A" b="EE 9C"/>
+  <a u="986B" b="EE 9D"/>
+  <a u="986C" b="EE 9E"/>
+  <a u="986D" b="EE 9F"/>
+  <a u="986E" b="EE A0"/>
+  <a u="986F" b="EF 40"/>
+  <a u="9870" b="EF 41"/>
+  <a u="9871" b="EF 42"/>
+  <a u="9872" b="EF 43"/>
+  <a u="9873" b="EF 44"/>
+  <a u="9874" b="EF 45"/>
+  <a u="9875" b="D2 B3"/>
+  <a u="9876" b="B6 A5"/>
+  <a u="9877" b="C7 EA"/>
+  <a u="9878" b="F1 FC"/>
+  <a u="9879" b="CF EE"/>
+  <a u="987A" b="CB B3"/>
+  <a u="987B" b="D0 EB"/>
+  <a u="987C" b="E7 EF"/>
+  <a u="987D" b="CD E7"/>
+  <a u="987E" b="B9 CB"/>
+  <a u="987F" b="B6 D9"/>
+  <a u="9880" b="F1 FD"/>
+  <a u="9881" b="B0 E4"/>
+  <a u="9882" b="CB CC"/>
+  <a u="9883" b="F1 FE"/>
+  <a u="9884" b="D4 A4"/>
+  <a u="9885" b="C2 AD"/>
+  <a u="9886" b="C1 EC"/>
+  <a u="9887" b="C6 C4"/>
+  <a u="9888" b="BE B1"/>
+  <a u="9889" b="F2 A1"/>
+  <a u="988A" b="BC D5"/>
+  <a u="988B" b="EF 46"/>
+  <a u="988C" b="F2 A2"/>
+  <a u="988D" b="F2 A3"/>
+  <a u="988E" b="EF 47"/>
+  <a u="988F" b="F2 A4"/>
+  <a u="9890" b="D2 C3"/>
+  <a u="9891" b="C6 B5"/>
+  <a u="9892" b="EF 48"/>
+  <a u="9893" b="CD C7"/>
+  <a u="9894" b="F2 A5"/>
+  <a u="9895" b="EF 49"/>
+  <a u="9896" b="D3 B1"/>
+  <a u="9897" b="BF C5"/>
+  <a u="9898" b="CC E2"/>
+  <a u="9899" b="EF 4A"/>
+  <a u="989A" b="F2 A6"/>
+  <a u="989B" b="F2 A7"/>
+  <a u="989C" b="D1 D5"/>
+  <a u="989D" b="B6 EE"/>
+  <a u="989E" b="F2 A8"/>
+  <a u="989F" b="F2 A9"/>
+  <a u="98A0" b="B5 DF"/>
+  <a u="98A1" b="F2 AA"/>
+  <a u="98A2" b="F2 AB"/>
+  <a u="98A3" b="EF 4B"/>
+  <a u="98A4" b="B2 FC"/>
+  <a u="98A5" b="F2 AC"/>
+  <a u="98A6" b="F2 AD"/>
+  <a u="98A7" b="C8 A7"/>
+  <a u="98A8" b="EF 4C"/>
+  <a u="98A9" b="EF 4D"/>
+  <a u="98AA" b="EF 4E"/>
+  <a u="98AB" b="EF 4F"/>
+  <a u="98AC" b="EF 50"/>
+  <a u="98AD" b="EF 51"/>
+  <a u="98AE" b="EF 52"/>
+  <a u="98AF" b="EF 53"/>
+  <a u="98B0" b="EF 54"/>
+  <a u="98B1" b="EF 55"/>
+  <a u="98B2" b="EF 56"/>
+  <a u="98B3" b="EF 57"/>
+  <a u="98B4" b="EF 58"/>
+  <a u="98B5" b="EF 59"/>
+  <a u="98B6" b="EF 5A"/>
+  <a u="98B7" b="EF 5B"/>
+  <a u="98B8" b="EF 5C"/>
+  <a u="98B9" b="EF 5D"/>
+  <a u="98BA" b="EF 5E"/>
+  <a u="98BB" b="EF 5F"/>
+  <a u="98BC" b="EF 60"/>
+  <a u="98BD" b="EF 61"/>
+  <a u="98BE" b="EF 62"/>
+  <a u="98BF" b="EF 63"/>
+  <a u="98C0" b="EF 64"/>
+  <a u="98C1" b="EF 65"/>
+  <a u="98C2" b="EF 66"/>
+  <a u="98C3" b="EF 67"/>
+  <a u="98C4" b="EF 68"/>
+  <a u="98C5" b="EF 69"/>
+  <a u="98C6" b="EF 6A"/>
+  <a u="98C7" b="EF 6B"/>
+  <a u="98C8" b="EF 6C"/>
+  <a u="98C9" b="EF 6D"/>
+  <a u="98CA" b="EF 6E"/>
+  <a u="98CB" b="EF 6F"/>
+  <a u="98CC" b="EF 70"/>
+  <a u="98CD" b="EF 71"/>
+  <a u="98CE" b="B7 E7"/>
+  <a u="98CF" b="EF 72"/>
+  <a u="98D0" b="EF 73"/>
+  <a u="98D1" b="EC A9"/>
+  <a u="98D2" b="EC AA"/>
+  <a u="98D3" b="EC AB"/>
+  <a u="98D4" b="EF 74"/>
+  <a u="98D5" b="EC AC"/>
+  <a u="98D6" b="EF 75"/>
+  <a u="98D7" b="EF 76"/>
+  <a u="98D8" b="C6 AE"/>
+  <a u="98D9" b="EC AD"/>
+  <a u="98DA" b="EC AE"/>
+  <a u="98DB" b="EF 77"/>
+  <a u="98DC" b="EF 78"/>
+  <a u="98DD" b="EF 79"/>
+  <a u="98DE" b="B7 C9"/>
+  <a u="98DF" b="CA B3"/>
+  <a u="98E0" b="EF 7A"/>
+  <a u="98E1" b="EF 7B"/>
+  <a u="98E2" b="EF 7C"/>
+  <a u="98E3" b="EF 7D"/>
+  <a u="98E4" b="EF 7E"/>
+  <a u="98E5" b="EF 80"/>
+  <a u="98E6" b="EF 81"/>
+  <a u="98E7" b="E2 B8"/>
+  <a u="98E8" b="F7 CF"/>
+  <a u="98E9" b="EF 82"/>
+  <a u="98EA" b="EF 83"/>
+  <a u="98EB" b="EF 84"/>
+  <a u="98EC" b="EF 85"/>
+  <a u="98ED" b="EF 86"/>
+  <a u="98EE" b="EF 87"/>
+  <a u="98EF" b="EF 88"/>
+  <a u="98F0" b="EF 89"/>
+  <a u="98F1" b="EF 8A"/>
+  <a u="98F2" b="EF 8B"/>
+  <a u="98F3" b="EF 8C"/>
+  <a u="98F4" b="EF 8D"/>
+  <a u="98F5" b="EF 8E"/>
+  <a u="98F6" b="EF 8F"/>
+  <a u="98F7" b="EF 90"/>
+  <a u="98F8" b="EF 91"/>
+  <a u="98F9" b="EF 92"/>
+  <a u="98FA" b="EF 93"/>
+  <a u="98FB" b="EF 94"/>
+  <a u="98FC" b="EF 95"/>
+  <a u="98FD" b="EF 96"/>
+  <a u="98FE" b="EF 97"/>
+  <a u="98FF" b="EF 98"/>
+  <a u="9900" b="EF 99"/>
+  <a u="9901" b="EF 9A"/>
+  <a u="9902" b="EF 9B"/>
+  <a u="9903" b="EF 9C"/>
+  <a u="9904" b="EF 9D"/>
+  <a u="9905" b="EF 9E"/>
+  <a u="9906" b="EF 9F"/>
+  <a u="9907" b="EF A0"/>
+  <a u="9908" b="F0 40"/>
+  <a u="9909" b="F0 41"/>
+  <a u="990A" b="F0 42"/>
+  <a u="990B" b="F0 43"/>
+  <a u="990C" b="F0 44"/>
+  <a u="990D" b="F7 D0"/>
+  <a u="990E" b="F0 45"/>
+  <a u="990F" b="F0 46"/>
+  <a u="9910" b="B2 CD"/>
+  <a u="9911" b="F0 47"/>
+  <a u="9912" b="F0 48"/>
+  <a u="9913" b="F0 49"/>
+  <a u="9914" b="F0 4A"/>
+  <a u="9915" b="F0 4B"/>
+  <a u="9916" b="F0 4C"/>
+  <a u="9917" b="F0 4D"/>
+  <a u="9918" b="F0 4E"/>
+  <a u="9919" b="F0 4F"/>
+  <a u="991A" b="F0 50"/>
+  <a u="991B" b="F0 51"/>
+  <a u="991C" b="F0 52"/>
+  <a u="991D" b="F0 53"/>
+  <a u="991E" b="F0 54"/>
+  <a u="991F" b="F0 55"/>
+  <a u="9920" b="F0 56"/>
+  <a u="9921" b="F0 57"/>
+  <a u="9922" b="F0 58"/>
+  <a u="9923" b="F0 59"/>
+  <a u="9924" b="F0 5A"/>
+  <a u="9925" b="F0 5B"/>
+  <a u="9926" b="F0 5C"/>
+  <a u="9927" b="F0 5D"/>
+  <a u="9928" b="F0 5E"/>
+  <a u="9929" b="F0 5F"/>
+  <a u="992A" b="F0 60"/>
+  <a u="992B" b="F0 61"/>
+  <a u="992C" b="F0 62"/>
+  <a u="992D" b="F0 63"/>
+  <a u="992E" b="F7 D1"/>
+  <a u="992F" b="F0 64"/>
+  <a u="9930" b="F0 65"/>
+  <a u="9931" b="F0 66"/>
+  <a u="9932" b="F0 67"/>
+  <a u="9933" b="F0 68"/>
+  <a u="9934" b="F0 69"/>
+  <a u="9935" b="F0 6A"/>
+  <a u="9936" b="F0 6B"/>
+  <a u="9937" b="F0 6C"/>
+  <a u="9938" b="F0 6D"/>
+  <a u="9939" b="F0 6E"/>
+  <a u="993A" b="F0 6F"/>
+  <a u="993B" b="F0 70"/>
+  <a u="993C" b="F0 71"/>
+  <a u="993D" b="F0 72"/>
+  <a u="993E" b="F0 73"/>
+  <a u="993F" b="F0 74"/>
+  <a u="9940" b="F0 75"/>
+  <a u="9941" b="F0 76"/>
+  <a u="9942" b="F0 77"/>
+  <a u="9943" b="F0 78"/>
+  <a u="9944" b="F0 79"/>
+  <a u="9945" b="F0 7A"/>
+  <a u="9946" b="F0 7B"/>
+  <a u="9947" b="F0 7C"/>
+  <a u="9948" b="F0 7D"/>
+  <a u="9949" b="F0 7E"/>
+  <a u="994A" b="F0 80"/>
+  <a u="994B" b="F0 81"/>
+  <a u="994C" b="F0 82"/>
+  <a u="994D" b="F0 83"/>
+  <a u="994E" b="F0 84"/>
+  <a u="994F" b="F0 85"/>
+  <a u="9950" b="F0 86"/>
+  <a u="9951" b="F0 87"/>
+  <a u="9952" b="F0 88"/>
+  <a u="9953" b="F0 89"/>
+  <a u="9954" b="F7 D3"/>
+  <a u="9955" b="F7 D2"/>
+  <a u="9956" b="F0 8A"/>
+  <a u="9957" b="F0 8B"/>
+  <a u="9958" b="F0 8C"/>
+  <a u="9959" b="F0 8D"/>
+  <a u="995A" b="F0 8E"/>
+  <a u="995B" b="F0 8F"/>
+  <a u="995C" b="F0 90"/>
+  <a u="995D" b="F0 91"/>
+  <a u="995E" b="F0 92"/>
+  <a u="995F" b="F0 93"/>
+  <a u="9960" b="F0 94"/>
+  <a u="9961" b="F0 95"/>
+  <a u="9962" b="F0 96"/>
+  <a u="9963" b="E2 BB"/>
+  <a u="9964" b="F0 97"/>
+  <a u="9965" b="BC A2"/>
+  <a u="9966" b="F0 98"/>
+  <a u="9967" b="E2 BC"/>
+  <a u="9968" b="E2 BD"/>
+  <a u="9969" b="E2 BE"/>
+  <a u="996A" b="E2 BF"/>
+  <a u="996B" b="E2 C0"/>
+  <a u="996C" b="E2 C1"/>
+  <a u="996D" b="B7 B9"/>
+  <a u="996E" b="D2 FB"/>
+  <a u="996F" b="BD A4"/>
+  <a u="9970" b="CA CE"/>
+  <a u="9971" b="B1 A5"/>
+  <a u="9972" b="CB C7"/>
+  <a u="9973" b="F0 99"/>
+  <a u="9974" b="E2 C2"/>
+  <a u="9975" b="B6 FC"/>
+  <a u="9976" b="C8 C4"/>
+  <a u="9977" b="E2 C3"/>
+  <a u="9978" b="F0 9A"/>
+  <a u="9979" b="F0 9B"/>
+  <a u="997A" b="BD C8"/>
+  <a u="997B" b="F0 9C"/>
+  <a u="997C" b="B1 FD"/>
+  <a u="997D" b="E2 C4"/>
+  <a u="997E" b="F0 9D"/>
+  <a u="997F" b="B6 F6"/>
+  <a u="9980" b="E2 C5"/>
+  <a u="9981" b="C4 D9"/>
+  <a u="9982" b="F0 9E"/>
+  <a u="9983" b="F0 9F"/>
+  <a u="9984" b="E2 C6"/>
+  <a u="9985" b="CF DA"/>
+  <a u="9986" b="B9 DD"/>
+  <a u="9987" b="E2 C7"/>
+  <a u="9988" b="C0 A1"/>
+  <a u="9989" b="F0 A0"/>
+  <a u="998A" b="E2 C8"/>
+  <a u="998B" b="B2 F6"/>
+  <a u="998C" b="F1 40"/>
+  <a u="998D" b="E2 C9"/>
+  <a u="998E" b="F1 41"/>
+  <a u="998F" b="C1 F3"/>
+  <a u="9990" b="E2 CA"/>
+  <a u="9991" b="E2 CB"/>
+  <a u="9992" b="C2 F8"/>
+  <a u="9993" b="E2 CC"/>
+  <a u="9994" b="E2 CD"/>
+  <a u="9995" b="E2 CE"/>
+  <a u="9996" b="CA D7"/>
+  <a u="9997" b="D8 B8"/>
+  <a u="9998" b="D9 E5"/>
+  <a u="9999" b="CF E3"/>
+  <a u="999A" b="F1 42"/>
+  <a u="999B" b="F1 43"/>
+  <a u="999C" b="F1 44"/>
+  <a u="999D" b="F1 45"/>
+  <a u="999E" b="F1 46"/>
+  <a u="999F" b="F1 47"/>
+  <a u="99A0" b="F1 48"/>
+  <a u="99A1" b="F1 49"/>
+  <a u="99A2" b="F1 4A"/>
+  <a u="99A3" b="F1 4B"/>
+  <a u="99A4" b="F1 4C"/>
+  <a u="99A5" b="F0 A5"/>
+  <a u="99A6" b="F1 4D"/>
+  <a u="99A7" b="F1 4E"/>
+  <a u="99A8" b="DC B0"/>
+  <a u="99A9" b="F1 4F"/>
+  <a u="99AA" b="F1 50"/>
+  <a u="99AB" b="F1 51"/>
+  <a u="99AC" b="F1 52"/>
+  <a u="99AD" b="F1 53"/>
+  <a u="99AE" b="F1 54"/>
+  <a u="99AF" b="F1 55"/>
+  <a u="99B0" b="F1 56"/>
+  <a u="99B1" b="F1 57"/>
+  <a u="99B2" b="F1 58"/>
+  <a u="99B3" b="F1 59"/>
+  <a u="99B4" b="F1 5A"/>
+  <a u="99B5" b="F1 5B"/>
+  <a u="99B6" b="F1 5C"/>
+  <a u="99B7" b="F1 5D"/>
+  <a u="99B8" b="F1 5E"/>
+  <a u="99B9" b="F1 5F"/>
+  <a u="99BA" b="F1 60"/>
+  <a u="99BB" b="F1 61"/>
+  <a u="99BC" b="F1 62"/>
+  <a u="99BD" b="F1 63"/>
+  <a u="99BE" b="F1 64"/>
+  <a u="99BF" b="F1 65"/>
+  <a u="99C0" b="F1 66"/>
+  <a u="99C1" b="F1 67"/>
+  <a u="99C2" b="F1 68"/>
+  <a u="99C3" b="F1 69"/>
+  <a u="99C4" b="F1 6A"/>
+  <a u="99C5" b="F1 6B"/>
+  <a u="99C6" b="F1 6C"/>
+  <a u="99C7" b="F1 6D"/>
+  <a u="99C8" b="F1 6E"/>
+  <a u="99C9" b="F1 6F"/>
+  <a u="99CA" b="F1 70"/>
+  <a u="99CB" b="F1 71"/>
+  <a u="99CC" b="F1 72"/>
+  <a u="99CD" b="F1 73"/>
+  <a u="99CE" b="F1 74"/>
+  <a u="99CF" b="F1 75"/>
+  <a u="99D0" b="F1 76"/>
+  <a u="99D1" b="F1 77"/>
+  <a u="99D2" b="F1 78"/>
+  <a u="99D3" b="F1 79"/>
+  <a u="99D4" b="F1 7A"/>
+  <a u="99D5" b="F1 7B"/>
+  <a u="99D6" b="F1 7C"/>
+  <a u="99D7" b="F1 7D"/>
+  <a u="99D8" b="F1 7E"/>
+  <a u="99D9" b="F1 80"/>
+  <a u="99DA" b="F1 81"/>
+  <a u="99DB" b="F1 82"/>
+  <a u="99DC" b="F1 83"/>
+  <a u="99DD" b="F1 84"/>
+  <a u="99DE" b="F1 85"/>
+  <a u="99DF" b="F1 86"/>
+  <a u="99E0" b="F1 87"/>
+  <a u="99E1" b="F1 88"/>
+  <a u="99E2" b="F1 89"/>
+  <a u="99E3" b="F1 8A"/>
+  <a u="99E4" b="F1 8B"/>
+  <a u="99E5" b="F1 8C"/>
+  <a u="99E6" b="F1 8D"/>
+  <a u="99E7" b="F1 8E"/>
+  <a u="99E8" b="F1 8F"/>
+  <a u="99E9" b="F1 90"/>
+  <a u="99EA" b="F1 91"/>
+  <a u="99EB" b="F1 92"/>
+  <a u="99EC" b="F1 93"/>
+  <a u="99ED" b="F1 94"/>
+  <a u="99EE" b="F1 95"/>
+  <a u="99EF" b="F1 96"/>
+  <a u="99F0" b="F1 97"/>
+  <a u="99F1" b="F1 98"/>
+  <a u="99F2" b="F1 99"/>
+  <a u="99F3" b="F1 9A"/>
+  <a u="99F4" b="F1 9B"/>
+  <a u="99F5" b="F1 9C"/>
+  <a u="99F6" b="F1 9D"/>
+  <a u="99F7" b="F1 9E"/>
+  <a u="99F8" b="F1 9F"/>
+  <a u="99F9" b="F1 A0"/>
+  <a u="99FA" b="F2 40"/>
+  <a u="99FB" b="F2 41"/>
+  <a u="99FC" b="F2 42"/>
+  <a u="99FD" b="F2 43"/>
+  <a u="99FE" b="F2 44"/>
+  <a u="99FF" b="F2 45"/>
+  <a u="9A00" b="F2 46"/>
+  <a u="9A01" b="F2 47"/>
+  <a u="9A02" b="F2 48"/>
+  <a u="9A03" b="F2 49"/>
+  <a u="9A04" b="F2 4A"/>
+  <a u="9A05" b="F2 4B"/>
+  <a u="9A06" b="F2 4C"/>
+  <a u="9A07" b="F2 4D"/>
+  <a u="9A08" b="F2 4E"/>
+  <a u="9A09" b="F2 4F"/>
+  <a u="9A0A" b="F2 50"/>
+  <a u="9A0B" b="F2 51"/>
+  <a u="9A0C" b="F2 52"/>
+  <a u="9A0D" b="F2 53"/>
+  <a u="9A0E" b="F2 54"/>
+  <a u="9A0F" b="F2 55"/>
+  <a u="9A10" b="F2 56"/>
+  <a u="9A11" b="F2 57"/>
+  <a u="9A12" b="F2 58"/>
+  <a u="9A13" b="F2 59"/>
+  <a u="9A14" b="F2 5A"/>
+  <a u="9A15" b="F2 5B"/>
+  <a u="9A16" b="F2 5C"/>
+  <a u="9A17" b="F2 5D"/>
+  <a u="9A18" b="F2 5E"/>
+  <a u="9A19" b="F2 5F"/>
+  <a u="9A1A" b="F2 60"/>
+  <a u="9A1B" b="F2 61"/>
+  <a u="9A1C" b="F2 62"/>
+  <a u="9A1D" b="F2 63"/>
+  <a u="9A1E" b="F2 64"/>
+  <a u="9A1F" b="F2 65"/>
+  <a u="9A20" b="F2 66"/>
+  <a u="9A21" b="F2 67"/>
+  <a u="9A22" b="F2 68"/>
+  <a u="9A23" b="F2 69"/>
+  <a u="9A24" b="F2 6A"/>
+  <a u="9A25" b="F2 6B"/>
+  <a u="9A26" b="F2 6C"/>
+  <a u="9A27" b="F2 6D"/>
+  <a u="9A28" b="F2 6E"/>
+  <a u="9A29" b="F2 6F"/>
+  <a u="9A2A" b="F2 70"/>
+  <a u="9A2B" b="F2 71"/>
+  <a u="9A2C" b="F2 72"/>
+  <a u="9A2D" b="F2 73"/>
+  <a u="9A2E" b="F2 74"/>
+  <a u="9A2F" b="F2 75"/>
+  <a u="9A30" b="F2 76"/>
+  <a u="9A31" b="F2 77"/>
+  <a u="9A32" b="F2 78"/>
+  <a u="9A33" b="F2 79"/>
+  <a u="9A34" b="F2 7A"/>
+  <a u="9A35" b="F2 7B"/>
+  <a u="9A36" b="F2 7C"/>
+  <a u="9A37" b="F2 7D"/>
+  <a u="9A38" b="F2 7E"/>
+  <a u="9A39" b="F2 80"/>
+  <a u="9A3A" b="F2 81"/>
+  <a u="9A3B" b="F2 82"/>
+  <a u="9A3C" b="F2 83"/>
+  <a u="9A3D" b="F2 84"/>
+  <a u="9A3E" b="F2 85"/>
+  <a u="9A3F" b="F2 86"/>
+  <a u="9A40" b="F2 87"/>
+  <a u="9A41" b="F2 88"/>
+  <a u="9A42" b="F2 89"/>
+  <a u="9A43" b="F2 8A"/>
+  <a u="9A44" b="F2 8B"/>
+  <a u="9A45" b="F2 8C"/>
+  <a u="9A46" b="F2 8D"/>
+  <a u="9A47" b="F2 8E"/>
+  <a u="9A48" b="F2 8F"/>
+  <a u="9A49" b="F2 90"/>
+  <a u="9A4A" b="F2 91"/>
+  <a u="9A4B" b="F2 92"/>
+  <a u="9A4C" b="F2 93"/>
+  <a u="9A4D" b="F2 94"/>
+  <a u="9A4E" b="F2 95"/>
+  <a u="9A4F" b="F2 96"/>
+  <a u="9A50" b="F2 97"/>
+  <a u="9A51" b="F2 98"/>
+  <a u="9A52" b="F2 99"/>
+  <a u="9A53" b="F2 9A"/>
+  <a u="9A54" b="F2 9B"/>
+  <a u="9A55" b="F2 9C"/>
+  <a u="9A56" b="F2 9D"/>
+  <a u="9A57" b="F2 9E"/>
+  <a u="9A58" b="F2 9F"/>
+  <a u="9A59" b="F2 A0"/>
+  <a u="9A5A" b="F3 40"/>
+  <a u="9A5B" b="F3 41"/>
+  <a u="9A5C" b="F3 42"/>
+  <a u="9A5D" b="F3 43"/>
+  <a u="9A5E" b="F3 44"/>
+  <a u="9A5F" b="F3 45"/>
+  <a u="9A60" b="F3 46"/>
+  <a u="9A61" b="F3 47"/>
+  <a u="9A62" b="F3 48"/>
+  <a u="9A63" b="F3 49"/>
+  <a u="9A64" b="F3 4A"/>
+  <a u="9A65" b="F3 4B"/>
+  <a u="9A66" b="F3 4C"/>
+  <a u="9A67" b="F3 4D"/>
+  <a u="9A68" b="F3 4E"/>
+  <a u="9A69" b="F3 4F"/>
+  <a u="9A6A" b="F3 50"/>
+  <a u="9A6B" b="F3 51"/>
+  <a u="9A6C" b="C2 ED"/>
+  <a u="9A6D" b="D4 A6"/>
+  <a u="9A6E" b="CD D4"/>
+  <a u="9A6F" b="D1 B1"/>
+  <a u="9A70" b="B3 DB"/>
+  <a u="9A71" b="C7 FD"/>
+  <a u="9A72" b="F3 52"/>
+  <a u="9A73" b="B2 B5"/>
+  <a u="9A74" b="C2 BF"/>
+  <a u="9A75" b="E6 E0"/>
+  <a u="9A76" b="CA BB"/>
+  <a u="9A77" b="E6 E1"/>
+  <a u="9A78" b="E6 E2"/>
+  <a u="9A79" b="BE D4"/>
+  <a u="9A7A" b="E6 E3"/>
+  <a u="9A7B" b="D7 A4"/>
+  <a u="9A7C" b="CD D5"/>
+  <a u="9A7D" b="E6 E5"/>
+  <a u="9A7E" b="BC DD"/>
+  <a u="9A7F" b="E6 E4"/>
+  <a u="9A80" b="E6 E6"/>
+  <a u="9A81" b="E6 E7"/>
+  <a u="9A82" b="C2 EE"/>
+  <a u="9A83" b="F3 53"/>
+  <a u="9A84" b="BD BE"/>
+  <a u="9A85" b="E6 E8"/>
+  <a u="9A86" b="C2 E6"/>
+  <a u="9A87" b="BA A7"/>
+  <a u="9A88" b="E6 E9"/>
+  <a u="9A89" b="F3 54"/>
+  <a u="9A8A" b="E6 EA"/>
+  <a u="9A8B" b="B3 D2"/>
+  <a u="9A8C" b="D1 E9"/>
+  <a u="9A8D" b="F3 55"/>
+  <a u="9A8E" b="F3 56"/>
+  <a u="9A8F" b="BF A5"/>
+  <a u="9A90" b="E6 EB"/>
+  <a u="9A91" b="C6 EF"/>
+  <a u="9A92" b="E6 EC"/>
+  <a u="9A93" b="E6 ED"/>
+  <a u="9A94" b="F3 57"/>
+  <a u="9A95" b="F3 58"/>
+  <a u="9A96" b="E6 EE"/>
+  <a u="9A97" b="C6 AD"/>
+  <a u="9A98" b="E6 EF"/>
+  <a u="9A99" b="F3 59"/>
+  <a u="9A9A" b="C9 A7"/>
+  <a u="9A9B" b="E6 F0"/>
+  <a u="9A9C" b="E6 F1"/>
+  <a u="9A9D" b="E6 F2"/>
+  <a u="9A9E" b="E5 B9"/>
+  <a u="9A9F" b="E6 F3"/>
+  <a u="9AA0" b="E6 F4"/>
+  <a u="9AA1" b="C2 E2"/>
+  <a u="9AA2" b="E6 F5"/>
+  <a u="9AA3" b="E6 F6"/>
+  <a u="9AA4" b="D6 E8"/>
+  <a u="9AA5" b="E6 F7"/>
+  <a u="9AA6" b="F3 5A"/>
+  <a u="9AA7" b="E6 F8"/>
+  <a u="9AA8" b="B9 C7"/>
+  <a u="9AA9" b="F3 5B"/>
+  <a u="9AAA" b="F3 5C"/>
+  <a u="9AAB" b="F3 5D"/>
+  <a u="9AAC" b="F3 5E"/>
+  <a u="9AAD" b="F3 5F"/>
+  <a u="9AAE" b="F3 60"/>
+  <a u="9AAF" b="F3 61"/>
+  <a u="9AB0" b="F7 BB"/>
+  <a u="9AB1" b="F7 BA"/>
+  <a u="9AB2" b="F3 62"/>
+  <a u="9AB3" b="F3 63"/>
+  <a u="9AB4" b="F3 64"/>
+  <a u="9AB5" b="F3 65"/>
+  <a u="9AB6" b="F7 BE"/>
+  <a u="9AB7" b="F7 BC"/>
+  <a u="9AB8" b="BA A1"/>
+  <a u="9AB9" b="F3 66"/>
+  <a u="9ABA" b="F7 BF"/>
+  <a u="9ABB" b="F3 67"/>
+  <a u="9ABC" b="F7 C0"/>
+  <a u="9ABD" b="F3 68"/>
+  <a u="9ABE" b="F3 69"/>
+  <a u="9ABF" b="F3 6A"/>
+  <a u="9AC0" b="F7 C2"/>
+  <a u="9AC1" b="F7 C1"/>
+  <a u="9AC2" b="F7 C4"/>
+  <a u="9AC3" b="F3 6B"/>
+  <a u="9AC4" b="F3 6C"/>
+  <a u="9AC5" b="F7 C3"/>
+  <a u="9AC6" b="F3 6D"/>
+  <a u="9AC7" b="F3 6E"/>
+  <a u="9AC8" b="F3 6F"/>
+  <a u="9AC9" b="F3 70"/>
+  <a u="9ACA" b="F3 71"/>
+  <a u="9ACB" b="F7 C5"/>
+  <a u="9ACC" b="F7 C6"/>
+  <a u="9ACD" b="F3 72"/>
+  <a u="9ACE" b="F3 73"/>
+  <a u="9ACF" b="F3 74"/>
+  <a u="9AD0" b="F3 75"/>
+  <a u="9AD1" b="F7 C7"/>
+  <a u="9AD2" b="F3 76"/>
+  <a u="9AD3" b="CB E8"/>
+  <a u="9AD4" b="F3 77"/>
+  <a u="9AD5" b="F3 78"/>
+  <a u="9AD6" b="F3 79"/>
+  <a u="9AD7" b="F3 7A"/>
+  <a u="9AD8" b="B8 DF"/>
+  <a u="9AD9" b="F3 7B"/>
+  <a u="9ADA" b="F3 7C"/>
+  <a u="9ADB" b="F3 7D"/>
+  <a u="9ADC" b="F3 7E"/>
+  <a u="9ADD" b="F3 80"/>
+  <a u="9ADE" b="F3 81"/>
+  <a u="9ADF" b="F7 D4"/>
+  <a u="9AE0" b="F3 82"/>
+  <a u="9AE1" b="F7 D5"/>
+  <a u="9AE2" b="F3 83"/>
+  <a u="9AE3" b="F3 84"/>
+  <a u="9AE4" b="F3 85"/>
+  <a u="9AE5" b="F3 86"/>
+  <a u="9AE6" b="F7 D6"/>
+  <a u="9AE7" b="F3 87"/>
+  <a u="9AE8" b="F3 88"/>
+  <a u="9AE9" b="F3 89"/>
+  <a u="9AEA" b="F3 8A"/>
+  <a u="9AEB" b="F7 D8"/>
+  <a u="9AEC" b="F3 8B"/>
+  <a u="9AED" b="F7 DA"/>
+  <a u="9AEE" b="F3 8C"/>
+  <a u="9AEF" b="F7 D7"/>
+  <a u="9AF0" b="F3 8D"/>
+  <a u="9AF1" b="F3 8E"/>
+  <a u="9AF2" b="F3 8F"/>
+  <a u="9AF3" b="F3 90"/>
+  <a u="9AF4" b="F3 91"/>
+  <a u="9AF5" b="F3 92"/>
+  <a u="9AF6" b="F3 93"/>
+  <a u="9AF7" b="F3 94"/>
+  <a u="9AF8" b="F3 95"/>
+  <a u="9AF9" b="F7 DB"/>
+  <a u="9AFA" b="F3 96"/>
+  <a u="9AFB" b="F7 D9"/>
+  <a u="9AFC" b="F3 97"/>
+  <a u="9AFD" b="F3 98"/>
+  <a u="9AFE" b="F3 99"/>
+  <a u="9AFF" b="F3 9A"/>
+  <a u="9B00" b="F3 9B"/>
+  <a u="9B01" b="F3 9C"/>
+  <a u="9B02" b="F3 9D"/>
+  <a u="9B03" b="D7 D7"/>
+  <a u="9B04" b="F3 9E"/>
+  <a u="9B05" b="F3 9F"/>
+  <a u="9B06" b="F3 A0"/>
+  <a u="9B07" b="F4 40"/>
+  <a u="9B08" b="F7 DC"/>
+  <a u="9B09" b="F4 41"/>
+  <a u="9B0A" b="F4 42"/>
+  <a u="9B0B" b="F4 43"/>
+  <a u="9B0C" b="F4 44"/>
+  <a u="9B0D" b="F4 45"/>
+  <a u="9B0E" b="F4 46"/>
+  <a u="9B0F" b="F7 DD"/>
+  <a u="9B10" b="F4 47"/>
+  <a u="9B11" b="F4 48"/>
+  <a u="9B12" b="F4 49"/>
+  <a u="9B13" b="F7 DE"/>
+  <a u="9B14" b="F4 4A"/>
+  <a u="9B15" b="F4 4B"/>
+  <a u="9B16" b="F4 4C"/>
+  <a u="9B17" b="F4 4D"/>
+  <a u="9B18" b="F4 4E"/>
+  <a u="9B19" b="F4 4F"/>
+  <a u="9B1A" b="F4 50"/>
+  <a u="9B1B" b="F4 51"/>
+  <a u="9B1C" b="F4 52"/>
+  <a u="9B1D" b="F4 53"/>
+  <a u="9B1E" b="F4 54"/>
+  <a u="9B1F" b="F7 DF"/>
+  <a u="9B20" b="F4 55"/>
+  <a u="9B21" b="F4 56"/>
+  <a u="9B22" b="F4 57"/>
+  <a u="9B23" b="F7 E0"/>
+  <a u="9B24" b="F4 58"/>
+  <a u="9B25" b="F4 59"/>
+  <a u="9B26" b="F4 5A"/>
+  <a u="9B27" b="F4 5B"/>
+  <a u="9B28" b="F4 5C"/>
+  <a u="9B29" b="F4 5D"/>
+  <a u="9B2A" b="F4 5E"/>
+  <a u="9B2B" b="F4 5F"/>
+  <a u="9B2C" b="F4 60"/>
+  <a u="9B2D" b="F4 61"/>
+  <a u="9B2E" b="F4 62"/>
+  <a u="9B2F" b="DB CB"/>
+  <a u="9B30" b="F4 63"/>
+  <a u="9B31" b="F4 64"/>
+  <a u="9B32" b="D8 AA"/>
+  <a u="9B33" b="F4 65"/>
+  <a u="9B34" b="F4 66"/>
+  <a u="9B35" b="F4 67"/>
+  <a u="9B36" b="F4 68"/>
+  <a u="9B37" b="F4 69"/>
+  <a u="9B38" b="F4 6A"/>
+  <a u="9B39" b="F4 6B"/>
+  <a u="9B3A" b="F4 6C"/>
+  <a u="9B3B" b="E5 F7"/>
+  <a u="9B3C" b="B9 ED"/>
+  <a u="9B3D" b="F4 6D"/>
+  <a u="9B3E" b="F4 6E"/>
+  <a u="9B3F" b="F4 6F"/>
+  <a u="9B40" b="F4 70"/>
+  <a u="9B41" b="BF FD"/>
+  <a u="9B42" b="BB EA"/>
+  <a u="9B43" b="F7 C9"/>
+  <a u="9B44" b="C6 C7"/>
+  <a u="9B45" b="F7 C8"/>
+  <a u="9B46" b="F4 71"/>
+  <a u="9B47" b="F7 CA"/>
+  <a u="9B48" b="F7 CC"/>
+  <a u="9B49" b="F7 CB"/>
+  <a u="9B4A" b="F4 72"/>
+  <a u="9B4B" b="F4 73"/>
+  <a u="9B4C" b="F4 74"/>
+  <a u="9B4D" b="F7 CD"/>
+  <a u="9B4E" b="F4 75"/>
+  <a u="9B4F" b="CE BA"/>
+  <a u="9B50" b="F4 76"/>
+  <a u="9B51" b="F7 CE"/>
+  <a u="9B52" b="F4 77"/>
+  <a u="9B53" b="F4 78"/>
+  <a u="9B54" b="C4 A7"/>
+  <a u="9B55" b="F4 79"/>
+  <a u="9B56" b="F4 7A"/>
+  <a u="9B57" b="F4 7B"/>
+  <a u="9B58" b="F4 7C"/>
+  <a u="9B59" b="F4 7D"/>
+  <a u="9B5A" b="F4 7E"/>
+  <a u="9B5B" b="F4 80"/>
+  <a u="9B5C" b="F4 81"/>
+  <a u="9B5D" b="F4 82"/>
+  <a u="9B5E" b="F4 83"/>
+  <a u="9B5F" b="F4 84"/>
+  <a u="9B60" b="F4 85"/>
+  <a u="9B61" b="F4 86"/>
+  <a u="9B62" b="F4 87"/>
+  <a u="9B63" b="F4 88"/>
+  <a u="9B64" b="F4 89"/>
+  <a u="9B65" b="F4 8A"/>
+  <a u="9B66" b="F4 8B"/>
+  <a u="9B67" b="F4 8C"/>
+  <a u="9B68" b="F4 8D"/>
+  <a u="9B69" b="F4 8E"/>
+  <a u="9B6A" b="F4 8F"/>
+  <a u="9B6B" b="F4 90"/>
+  <a u="9B6C" b="F4 91"/>
+  <a u="9B6D" b="F4 92"/>
+  <a u="9B6E" b="F4 93"/>
+  <a u="9B6F" b="F4 94"/>
+  <a u="9B70" b="F4 95"/>
+  <a u="9B71" b="F4 96"/>
+  <a u="9B72" b="F4 97"/>
+  <a u="9B73" b="F4 98"/>
+  <a u="9B74" b="F4 99"/>
+  <a u="9B75" b="F4 9A"/>
+  <a u="9B76" b="F4 9B"/>
+  <a u="9B77" b="F4 9C"/>
+  <a u="9B78" b="F4 9D"/>
+  <a u="9B79" b="F4 9E"/>
+  <a u="9B7A" b="F4 9F"/>
+  <a u="9B7B" b="F4 A0"/>
+  <a u="9B7C" b="F5 40"/>
+  <a u="9B7D" b="F5 41"/>
+  <a u="9B7E" b="F5 42"/>
+  <a u="9B7F" b="F5 43"/>
+  <a u="9B80" b="F5 44"/>
+  <a u="9B81" b="F5 45"/>
+  <a u="9B82" b="F5 46"/>
+  <a u="9B83" b="F5 47"/>
+  <a u="9B84" b="F5 48"/>
+  <a u="9B85" b="F5 49"/>
+  <a u="9B86" b="F5 4A"/>
+  <a u="9B87" b="F5 4B"/>
+  <a u="9B88" b="F5 4C"/>
+  <a u="9B89" b="F5 4D"/>
+  <a u="9B8A" b="F5 4E"/>
+  <a u="9B8B" b="F5 4F"/>
+  <a u="9B8C" b="F5 50"/>
+  <a u="9B8D" b="F5 51"/>
+  <a u="9B8E" b="F5 52"/>
+  <a u="9B8F" b="F5 53"/>
+  <a u="9B90" b="F5 54"/>
+  <a u="9B91" b="F5 55"/>
+  <a u="9B92" b="F5 56"/>
+  <a u="9B93" b="F5 57"/>
+  <a u="9B94" b="F5 58"/>
+  <a u="9B95" b="F5 59"/>
+  <a u="9B96" b="F5 5A"/>
+  <a u="9B97" b="F5 5B"/>
+  <a u="9B98" b="F5 5C"/>
+  <a u="9B99" b="F5 5D"/>
+  <a u="9B9A" b="F5 5E"/>
+  <a u="9B9B" b="F5 5F"/>
+  <a u="9B9C" b="F5 60"/>
+  <a u="9B9D" b="F5 61"/>
+  <a u="9B9E" b="F5 62"/>
+  <a u="9B9F" b="F5 63"/>
+  <a u="9BA0" b="F5 64"/>
+  <a u="9BA1" b="F5 65"/>
+  <a u="9BA2" b="F5 66"/>
+  <a u="9BA3" b="F5 67"/>
+  <a u="9BA4" b="F5 68"/>
+  <a u="9BA5" b="F5 69"/>
+  <a u="9BA6" b="F5 6A"/>
+  <a u="9BA7" b="F5 6B"/>
+  <a u="9BA8" b="F5 6C"/>
+  <a u="9BA9" b="F5 6D"/>
+  <a u="9BAA" b="F5 6E"/>
+  <a u="9BAB" b="F5 6F"/>
+  <a u="9BAC" b="F5 70"/>
+  <a u="9BAD" b="F5 71"/>
+  <a u="9BAE" b="F5 72"/>
+  <a u="9BAF" b="F5 73"/>
+  <a u="9BB0" b="F5 74"/>
+  <a u="9BB1" b="F5 75"/>
+  <a u="9BB2" b="F5 76"/>
+  <a u="9BB3" b="F5 77"/>
+  <a u="9BB4" b="F5 78"/>
+  <a u="9BB5" b="F5 79"/>
+  <a u="9BB6" b="F5 7A"/>
+  <a u="9BB7" b="F5 7B"/>
+  <a u="9BB8" b="F5 7C"/>
+  <a u="9BB9" b="F5 7D"/>
+  <a u="9BBA" b="F5 7E"/>
+  <a u="9BBB" b="F5 80"/>
+  <a u="9BBC" b="F5 81"/>
+  <a u="9BBD" b="F5 82"/>
+  <a u="9BBE" b="F5 83"/>
+  <a u="9BBF" b="F5 84"/>
+  <a u="9BC0" b="F5 85"/>
+  <a u="9BC1" b="F5 86"/>
+  <a u="9BC2" b="F5 87"/>
+  <a u="9BC3" b="F5 88"/>
+  <a u="9BC4" b="F5 89"/>
+  <a u="9BC5" b="F5 8A"/>
+  <a u="9BC6" b="F5 8B"/>
+  <a u="9BC7" b="F5 8C"/>
+  <a u="9BC8" b="F5 8D"/>
+  <a u="9BC9" b="F5 8E"/>
+  <a u="9BCA" b="F5 8F"/>
+  <a u="9BCB" b="F5 90"/>
+  <a u="9BCC" b="F5 91"/>
+  <a u="9BCD" b="F5 92"/>
+  <a u="9BCE" b="F5 93"/>
+  <a u="9BCF" b="F5 94"/>
+  <a u="9BD0" b="F5 95"/>
+  <a u="9BD1" b="F5 96"/>
+  <a u="9BD2" b="F5 97"/>
+  <a u="9BD3" b="F5 98"/>
+  <a u="9BD4" b="F5 99"/>
+  <a u="9BD5" b="F5 9A"/>
+  <a u="9BD6" b="F5 9B"/>
+  <a u="9BD7" b="F5 9C"/>
+  <a u="9BD8" b="F5 9D"/>
+  <a u="9BD9" b="F5 9E"/>
+  <a u="9BDA" b="F5 9F"/>
+  <a u="9BDB" b="F5 A0"/>
+  <a u="9BDC" b="F6 40"/>
+  <a u="9BDD" b="F6 41"/>
+  <a u="9BDE" b="F6 42"/>
+  <a u="9BDF" b="F6 43"/>
+  <a u="9BE0" b="F6 44"/>
+  <a u="9BE1" b="F6 45"/>
+  <a u="9BE2" b="F6 46"/>
+  <a u="9BE3" b="F6 47"/>
+  <a u="9BE4" b="F6 48"/>
+  <a u="9BE5" b="F6 49"/>
+  <a u="9BE6" b="F6 4A"/>
+  <a u="9BE7" b="F6 4B"/>
+  <a u="9BE8" b="F6 4C"/>
+  <a u="9BE9" b="F6 4D"/>
+  <a u="9BEA" b="F6 4E"/>
+  <a u="9BEB" b="F6 4F"/>
+  <a u="9BEC" b="F6 50"/>
+  <a u="9BED" b="F6 51"/>
+  <a u="9BEE" b="F6 52"/>
+  <a u="9BEF" b="F6 53"/>
+  <a u="9BF0" b="F6 54"/>
+  <a u="9BF1" b="F6 55"/>
+  <a u="9BF2" b="F6 56"/>
+  <a u="9BF3" b="F6 57"/>
+  <a u="9BF4" b="F6 58"/>
+  <a u="9BF5" b="F6 59"/>
+  <a u="9BF6" b="F6 5A"/>
+  <a u="9BF7" b="F6 5B"/>
+  <a u="9BF8" b="F6 5C"/>
+  <a u="9BF9" b="F6 5D"/>
+  <a u="9BFA" b="F6 5E"/>
+  <a u="9BFB" b="F6 5F"/>
+  <a u="9BFC" b="F6 60"/>
+  <a u="9BFD" b="F6 61"/>
+  <a u="9BFE" b="F6 62"/>
+  <a u="9BFF" b="F6 63"/>
+  <a u="9C00" b="F6 64"/>
+  <a u="9C01" b="F6 65"/>
+  <a u="9C02" b="F6 66"/>
+  <a u="9C03" b="F6 67"/>
+  <a u="9C04" b="F6 68"/>
+  <a u="9C05" b="F6 69"/>
+  <a u="9C06" b="F6 6A"/>
+  <a u="9C07" b="F6 6B"/>
+  <a u="9C08" b="F6 6C"/>
+  <a u="9C09" b="F6 6D"/>
+  <a u="9C0A" b="F6 6E"/>
+  <a u="9C0B" b="F6 6F"/>
+  <a u="9C0C" b="F6 70"/>
+  <a u="9C0D" b="F6 71"/>
+  <a u="9C0E" b="F6 72"/>
+  <a u="9C0F" b="F6 73"/>
+  <a u="9C10" b="F6 74"/>
+  <a u="9C11" b="F6 75"/>
+  <a u="9C12" b="F6 76"/>
+  <a u="9C13" b="F6 77"/>
+  <a u="9C14" b="F6 78"/>
+  <a u="9C15" b="F6 79"/>
+  <a u="9C16" b="F6 7A"/>
+  <a u="9C17" b="F6 7B"/>
+  <a u="9C18" b="F6 7C"/>
+  <a u="9C19" b="F6 7D"/>
+  <a u="9C1A" b="F6 7E"/>
+  <a u="9C1B" b="F6 80"/>
+  <a u="9C1C" b="F6 81"/>
+  <a u="9C1D" b="F6 82"/>
+  <a u="9C1E" b="F6 83"/>
+  <a u="9C1F" b="F6 84"/>
+  <a u="9C20" b="F6 85"/>
+  <a u="9C21" b="F6 86"/>
+  <a u="9C22" b="F6 87"/>
+  <a u="9C23" b="F6 88"/>
+  <a u="9C24" b="F6 89"/>
+  <a u="9C25" b="F6 8A"/>
+  <a u="9C26" b="F6 8B"/>
+  <a u="9C27" b="F6 8C"/>
+  <a u="9C28" b="F6 8D"/>
+  <a u="9C29" b="F6 8E"/>
+  <a u="9C2A" b="F6 8F"/>
+  <a u="9C2B" b="F6 90"/>
+  <a u="9C2C" b="F6 91"/>
+  <a u="9C2D" b="F6 92"/>
+  <a u="9C2E" b="F6 93"/>
+  <a u="9C2F" b="F6 94"/>
+  <a u="9C30" b="F6 95"/>
+  <a u="9C31" b="F6 96"/>
+  <a u="9C32" b="F6 97"/>
+  <a u="9C33" b="F6 98"/>
+  <a u="9C34" b="F6 99"/>
+  <a u="9C35" b="F6 9A"/>
+  <a u="9C36" b="F6 9B"/>
+  <a u="9C37" b="F6 9C"/>
+  <a u="9C38" b="F6 9D"/>
+  <a u="9C39" b="F6 9E"/>
+  <a u="9C3A" b="F6 9F"/>
+  <a u="9C3B" b="F6 A0"/>
+  <a u="9C3C" b="F7 40"/>
+  <a u="9C3D" b="F7 41"/>
+  <a u="9C3E" b="F7 42"/>
+  <a u="9C3F" b="F7 43"/>
+  <a u="9C40" b="F7 44"/>
+  <a u="9C41" b="F7 45"/>
+  <a u="9C42" b="F7 46"/>
+  <a u="9C43" b="F7 47"/>
+  <a u="9C44" b="F7 48"/>
+  <a u="9C45" b="F7 49"/>
+  <a u="9C46" b="F7 4A"/>
+  <a u="9C47" b="F7 4B"/>
+  <a u="9C48" b="F7 4C"/>
+  <a u="9C49" b="F7 4D"/>
+  <a u="9C4A" b="F7 4E"/>
+  <a u="9C4B" b="F7 4F"/>
+  <a u="9C4C" b="F7 50"/>
+  <a u="9C4D" b="F7 51"/>
+  <a u="9C4E" b="F7 52"/>
+  <a u="9C4F" b="F7 53"/>
+  <a u="9C50" b="F7 54"/>
+  <a u="9C51" b="F7 55"/>
+  <a u="9C52" b="F7 56"/>
+  <a u="9C53" b="F7 57"/>
+  <a u="9C54" b="F7 58"/>
+  <a u="9C55" b="F7 59"/>
+  <a u="9C56" b="F7 5A"/>
+  <a u="9C57" b="F7 5B"/>
+  <a u="9C58" b="F7 5C"/>
+  <a u="9C59" b="F7 5D"/>
+  <a u="9C5A" b="F7 5E"/>
+  <a u="9C5B" b="F7 5F"/>
+  <a u="9C5C" b="F7 60"/>
+  <a u="9C5D" b="F7 61"/>
+  <a u="9C5E" b="F7 62"/>
+  <a u="9C5F" b="F7 63"/>
+  <a u="9C60" b="F7 64"/>
+  <a u="9C61" b="F7 65"/>
+  <a u="9C62" b="F7 66"/>
+  <a u="9C63" b="F7 67"/>
+  <a u="9C64" b="F7 68"/>
+  <a u="9C65" b="F7 69"/>
+  <a u="9C66" b="F7 6A"/>
+  <a u="9C67" b="F7 6B"/>
+  <a u="9C68" b="F7 6C"/>
+  <a u="9C69" b="F7 6D"/>
+  <a u="9C6A" b="F7 6E"/>
+  <a u="9C6B" b="F7 6F"/>
+  <a u="9C6C" b="F7 70"/>
+  <a u="9C6D" b="F7 71"/>
+  <a u="9C6E" b="F7 72"/>
+  <a u="9C6F" b="F7 73"/>
+  <a u="9C70" b="F7 74"/>
+  <a u="9C71" b="F7 75"/>
+  <a u="9C72" b="F7 76"/>
+  <a u="9C73" b="F7 77"/>
+  <a u="9C74" b="F7 78"/>
+  <a u="9C75" b="F7 79"/>
+  <a u="9C76" b="F7 7A"/>
+  <a u="9C77" b="F7 7B"/>
+  <a u="9C78" b="F7 7C"/>
+  <a u="9C79" b="F7 7D"/>
+  <a u="9C7A" b="F7 7E"/>
+  <a u="9C7B" b="F7 80"/>
+  <a u="9C7C" b="D3 E3"/>
+  <a u="9C7D" b="F7 81"/>
+  <a u="9C7E" b="F7 82"/>
+  <a u="9C7F" b="F6 CF"/>
+  <a u="9C80" b="F7 83"/>
+  <a u="9C81" b="C2 B3"/>
+  <a u="9C82" b="F6 D0"/>
+  <a u="9C83" b="F7 84"/>
+  <a u="9C84" b="F7 85"/>
+  <a u="9C85" b="F6 D1"/>
+  <a u="9C86" b="F6 D2"/>
+  <a u="9C87" b="F6 D3"/>
+  <a u="9C88" b="F6 D4"/>
+  <a u="9C89" b="F7 86"/>
+  <a u="9C8A" b="F7 87"/>
+  <a u="9C8B" b="F6 D6"/>
+  <a u="9C8C" b="F7 88"/>
+  <a u="9C8D" b="B1 AB"/>
+  <a u="9C8E" b="F6 D7"/>
+  <a u="9C8F" b="F7 89"/>
+  <a u="9C90" b="F6 D8"/>
+  <a u="9C91" b="F6 D9"/>
+  <a u="9C92" b="F6 DA"/>
+  <a u="9C93" b="F7 8A"/>
+  <a u="9C94" b="F6 DB"/>
+  <a u="9C95" b="F6 DC"/>
+  <a u="9C96" b="F7 8B"/>
+  <a u="9C97" b="F7 8C"/>
+  <a u="9C98" b="F7 8D"/>
+  <a u="9C99" b="F7 8E"/>
+  <a u="9C9A" b="F6 DD"/>
+  <a u="9C9B" b="F6 DE"/>
+  <a u="9C9C" b="CF CA"/>
+  <a u="9C9D" b="F7 8F"/>
+  <a u="9C9E" b="F6 DF"/>
+  <a u="9C9F" b="F6 E0"/>
+  <a u="9CA0" b="F6 E1"/>
+  <a u="9CA1" b="F6 E2"/>
+  <a u="9CA2" b="F6 E3"/>
+  <a u="9CA3" b="F6 E4"/>
+  <a u="9CA4" b="C0 F0"/>
+  <a u="9CA5" b="F6 E5"/>
+  <a u="9CA6" b="F6 E6"/>
+  <a u="9CA7" b="F6 E7"/>
+  <a u="9CA8" b="F6 E8"/>
+  <a u="9CA9" b="F6 E9"/>
+  <a u="9CAA" b="F7 90"/>
+  <a u="9CAB" b="F6 EA"/>
+  <a u="9CAC" b="F7 91"/>
+  <a u="9CAD" b="F6 EB"/>
+  <a u="9CAE" b="F6 EC"/>
+  <a u="9CAF" b="F7 92"/>
+  <a u="9CB0" b="F6 ED"/>
+  <a u="9CB1" b="F6 EE"/>
+  <a u="9CB2" b="F6 EF"/>
+  <a u="9CB3" b="F6 F0"/>
+  <a u="9CB4" b="F6 F1"/>
+  <a u="9CB5" b="F6 F2"/>
+  <a u="9CB6" b="F6 F3"/>
+  <a u="9CB7" b="F6 F4"/>
+  <a u="9CB8" b="BE A8"/>
+  <a u="9CB9" b="F7 93"/>
+  <a u="9CBA" b="F6 F5"/>
+  <a u="9CBB" b="F6 F6"/>
+  <a u="9CBC" b="F6 F7"/>
+  <a u="9CBD" b="F6 F8"/>
+  <a u="9CBE" b="F7 94"/>
+  <a u="9CBF" b="F7 95"/>
+  <a u="9CC0" b="F7 96"/>
+  <a u="9CC1" b="F7 97"/>
+  <a u="9CC2" b="F7 98"/>
+  <a u="9CC3" b="C8 FA"/>
+  <a u="9CC4" b="F6 F9"/>
+  <a u="9CC5" b="F6 FA"/>
+  <a u="9CC6" b="F6 FB"/>
+  <a u="9CC7" b="F6 FC"/>
+  <a u="9CC8" b="F7 99"/>
+  <a u="9CC9" b="F7 9A"/>
+  <a u="9CCA" b="F6 FD"/>
+  <a u="9CCB" b="F6 FE"/>
+  <a u="9CCC" b="F7 A1"/>
+  <a u="9CCD" b="F7 A2"/>
+  <a u="9CCE" b="F7 A3"/>
+  <a u="9CCF" b="F7 A4"/>
+  <a u="9CD0" b="F7 A5"/>
+  <a u="9CD1" b="F7 9B"/>
+  <a u="9CD2" b="F7 9C"/>
+  <a u="9CD3" b="F7 A6"/>
+  <a u="9CD4" b="F7 A7"/>
+  <a u="9CD5" b="F7 A8"/>
+  <a u="9CD6" b="B1 EE"/>
+  <a u="9CD7" b="F7 A9"/>
+  <a u="9CD8" b="F7 AA"/>
+  <a u="9CD9" b="F7 AB"/>
+  <a u="9CDA" b="F7 9D"/>
+  <a u="9CDB" b="F7 9E"/>
+  <a u="9CDC" b="F7 AC"/>
+  <a u="9CDD" b="F7 AD"/>
+  <a u="9CDE" b="C1 DB"/>
+  <a u="9CDF" b="F7 AE"/>
+  <a u="9CE0" b="F7 9F"/>
+  <a u="9CE1" b="F7 A0"/>
+  <a u="9CE2" b="F7 AF"/>
+  <a u="9CE3" b="F8 40"/>
+  <a u="9CE4" b="F8 41"/>
+  <a u="9CE5" b="F8 42"/>
+  <a u="9CE6" b="F8 43"/>
+  <a u="9CE7" b="F8 44"/>
+  <a u="9CE8" b="F8 45"/>
+  <a u="9CE9" b="F8 46"/>
+  <a u="9CEA" b="F8 47"/>
+  <a u="9CEB" b="F8 48"/>
+  <a u="9CEC" b="F8 49"/>
+  <a u="9CED" b="F8 4A"/>
+  <a u="9CEE" b="F8 4B"/>
+  <a u="9CEF" b="F8 4C"/>
+  <a u="9CF0" b="F8 4D"/>
+  <a u="9CF1" b="F8 4E"/>
+  <a u="9CF2" b="F8 4F"/>
+  <a u="9CF3" b="F8 50"/>
+  <a u="9CF4" b="F8 51"/>
+  <a u="9CF5" b="F8 52"/>
+  <a u="9CF6" b="F8 53"/>
+  <a u="9CF7" b="F8 54"/>
+  <a u="9CF8" b="F8 55"/>
+  <a u="9CF9" b="F8 56"/>
+  <a u="9CFA" b="F8 57"/>
+  <a u="9CFB" b="F8 58"/>
+  <a u="9CFC" b="F8 59"/>
+  <a u="9CFD" b="F8 5A"/>
+  <a u="9CFE" b="F8 5B"/>
+  <a u="9CFF" b="F8 5C"/>
+  <a u="9D00" b="F8 5D"/>
+  <a u="9D01" b="F8 5E"/>
+  <a u="9D02" b="F8 5F"/>
+  <a u="9D03" b="F8 60"/>
+  <a u="9D04" b="F8 61"/>
+  <a u="9D05" b="F8 62"/>
+  <a u="9D06" b="F8 63"/>
+  <a u="9D07" b="F8 64"/>
+  <a u="9D08" b="F8 65"/>
+  <a u="9D09" b="F8 66"/>
+  <a u="9D0A" b="F8 67"/>
+  <a u="9D0B" b="F8 68"/>
+  <a u="9D0C" b="F8 69"/>
+  <a u="9D0D" b="F8 6A"/>
+  <a u="9D0E" b="F8 6B"/>
+  <a u="9D0F" b="F8 6C"/>
+  <a u="9D10" b="F8 6D"/>
+  <a u="9D11" b="F8 6E"/>
+  <a u="9D12" b="F8 6F"/>
+  <a u="9D13" b="F8 70"/>
+  <a u="9D14" b="F8 71"/>
+  <a u="9D15" b="F8 72"/>
+  <a u="9D16" b="F8 73"/>
+  <a u="9D17" b="F8 74"/>
+  <a u="9D18" b="F8 75"/>
+  <a u="9D19" b="F8 76"/>
+  <a u="9D1A" b="F8 77"/>
+  <a u="9D1B" b="F8 78"/>
+  <a u="9D1C" b="F8 79"/>
+  <a u="9D1D" b="F8 7A"/>
+  <a u="9D1E" b="F8 7B"/>
+  <a u="9D1F" b="F8 7C"/>
+  <a u="9D20" b="F8 7D"/>
+  <a u="9D21" b="F8 7E"/>
+  <a u="9D22" b="F8 80"/>
+  <a u="9D23" b="F8 81"/>
+  <a u="9D24" b="F8 82"/>
+  <a u="9D25" b="F8 83"/>
+  <a u="9D26" b="F8 84"/>
+  <a u="9D27" b="F8 85"/>
+  <a u="9D28" b="F8 86"/>
+  <a u="9D29" b="F8 87"/>
+  <a u="9D2A" b="F8 88"/>
+  <a u="9D2B" b="F8 89"/>
+  <a u="9D2C" b="F8 8A"/>
+  <a u="9D2D" b="F8 8B"/>
+  <a u="9D2E" b="F8 8C"/>
+  <a u="9D2F" b="F8 8D"/>
+  <a u="9D30" b="F8 8E"/>
+  <a u="9D31" b="F8 8F"/>
+  <a u="9D32" b="F8 90"/>
+  <a u="9D33" b="F8 91"/>
+  <a u="9D34" b="F8 92"/>
+  <a u="9D35" b="F8 93"/>
+  <a u="9D36" b="F8 94"/>
+  <a u="9D37" b="F8 95"/>
+  <a u="9D38" b="F8 96"/>
+  <a u="9D39" b="F8 97"/>
+  <a u="9D3A" b="F8 98"/>
+  <a u="9D3B" b="F8 99"/>
+  <a u="9D3C" b="F8 9A"/>
+  <a u="9D3D" b="F8 9B"/>
+  <a u="9D3E" b="F8 9C"/>
+  <a u="9D3F" b="F8 9D"/>
+  <a u="9D40" b="F8 9E"/>
+  <a u="9D41" b="F8 9F"/>
+  <a u="9D42" b="F8 A0"/>
+  <a u="9D43" b="F9 40"/>
+  <a u="9D44" b="F9 41"/>
+  <a u="9D45" b="F9 42"/>
+  <a u="9D46" b="F9 43"/>
+  <a u="9D47" b="F9 44"/>
+  <a u="9D48" b="F9 45"/>
+  <a u="9D49" b="F9 46"/>
+  <a u="9D4A" b="F9 47"/>
+  <a u="9D4B" b="F9 48"/>
+  <a u="9D4C" b="F9 49"/>
+  <a u="9D4D" b="F9 4A"/>
+  <a u="9D4E" b="F9 4B"/>
+  <a u="9D4F" b="F9 4C"/>
+  <a u="9D50" b="F9 4D"/>
+  <a u="9D51" b="F9 4E"/>
+  <a u="9D52" b="F9 4F"/>
+  <a u="9D53" b="F9 50"/>
+  <a u="9D54" b="F9 51"/>
+  <a u="9D55" b="F9 52"/>
+  <a u="9D56" b="F9 53"/>
+  <a u="9D57" b="F9 54"/>
+  <a u="9D58" b="F9 55"/>
+  <a u="9D59" b="F9 56"/>
+  <a u="9D5A" b="F9 57"/>
+  <a u="9D5B" b="F9 58"/>
+  <a u="9D5C" b="F9 59"/>
+  <a u="9D5D" b="F9 5A"/>
+  <a u="9D5E" b="F9 5B"/>
+  <a u="9D5F" b="F9 5C"/>
+  <a u="9D60" b="F9 5D"/>
+  <a u="9D61" b="F9 5E"/>
+  <a u="9D62" b="F9 5F"/>
+  <a u="9D63" b="F9 60"/>
+  <a u="9D64" b="F9 61"/>
+  <a u="9D65" b="F9 62"/>
+  <a u="9D66" b="F9 63"/>
+  <a u="9D67" b="F9 64"/>
+  <a u="9D68" b="F9 65"/>
+  <a u="9D69" b="F9 66"/>
+  <a u="9D6A" b="F9 67"/>
+  <a u="9D6B" b="F9 68"/>
+  <a u="9D6C" b="F9 69"/>
+  <a u="9D6D" b="F9 6A"/>
+  <a u="9D6E" b="F9 6B"/>
+  <a u="9D6F" b="F9 6C"/>
+  <a u="9D70" b="F9 6D"/>
+  <a u="9D71" b="F9 6E"/>
+  <a u="9D72" b="F9 6F"/>
+  <a u="9D73" b="F9 70"/>
+  <a u="9D74" b="F9 71"/>
+  <a u="9D75" b="F9 72"/>
+  <a u="9D76" b="F9 73"/>
+  <a u="9D77" b="F9 74"/>
+  <a u="9D78" b="F9 75"/>
+  <a u="9D79" b="F9 76"/>
+  <a u="9D7A" b="F9 77"/>
+  <a u="9D7B" b="F9 78"/>
+  <a u="9D7C" b="F9 79"/>
+  <a u="9D7D" b="F9 7A"/>
+  <a u="9D7E" b="F9 7B"/>
+  <a u="9D7F" b="F9 7C"/>
+  <a u="9D80" b="F9 7D"/>
+  <a u="9D81" b="F9 7E"/>
+  <a u="9D82" b="F9 80"/>
+  <a u="9D83" b="F9 81"/>
+  <a u="9D84" b="F9 82"/>
+  <a u="9D85" b="F9 83"/>
+  <a u="9D86" b="F9 84"/>
+  <a u="9D87" b="F9 85"/>
+  <a u="9D88" b="F9 86"/>
+  <a u="9D89" b="F9 87"/>
+  <a u="9D8A" b="F9 88"/>
+  <a u="9D8B" b="F9 89"/>
+  <a u="9D8C" b="F9 8A"/>
+  <a u="9D8D" b="F9 8B"/>
+  <a u="9D8E" b="F9 8C"/>
+  <a u="9D8F" b="F9 8D"/>
+  <a u="9D90" b="F9 8E"/>
+  <a u="9D91" b="F9 8F"/>
+  <a u="9D92" b="F9 90"/>
+  <a u="9D93" b="F9 91"/>
+  <a u="9D94" b="F9 92"/>
+  <a u="9D95" b="F9 93"/>
+  <a u="9D96" b="F9 94"/>
+  <a u="9D97" b="F9 95"/>
+  <a u="9D98" b="F9 96"/>
+  <a u="9D99" b="F9 97"/>
+  <a u="9D9A" b="F9 98"/>
+  <a u="9D9B" b="F9 99"/>
+  <a u="9D9C" b="F9 9A"/>
+  <a u="9D9D" b="F9 9B"/>
+  <a u="9D9E" b="F9 9C"/>
+  <a u="9D9F" b="F9 9D"/>
+  <a u="9DA0" b="F9 9E"/>
+  <a u="9DA1" b="F9 9F"/>
+  <a u="9DA2" b="F9 A0"/>
+  <a u="9DA3" b="FA 40"/>
+  <a u="9DA4" b="FA 41"/>
+  <a u="9DA5" b="FA 42"/>
+  <a u="9DA6" b="FA 43"/>
+  <a u="9DA7" b="FA 44"/>
+  <a u="9DA8" b="FA 45"/>
+  <a u="9DA9" b="FA 46"/>
+  <a u="9DAA" b="FA 47"/>
+  <a u="9DAB" b="FA 48"/>
+  <a u="9DAC" b="FA 49"/>
+  <a u="9DAD" b="FA 4A"/>
+  <a u="9DAE" b="FA 4B"/>
+  <a u="9DAF" b="FA 4C"/>
+  <a u="9DB0" b="FA 4D"/>
+  <a u="9DB1" b="FA 4E"/>
+  <a u="9DB2" b="FA 4F"/>
+  <a u="9DB3" b="FA 50"/>
+  <a u="9DB4" b="FA 51"/>
+  <a u="9DB5" b="FA 52"/>
+  <a u="9DB6" b="FA 53"/>
+  <a u="9DB7" b="FA 54"/>
+  <a u="9DB8" b="FA 55"/>
+  <a u="9DB9" b="FA 56"/>
+  <a u="9DBA" b="FA 57"/>
+  <a u="9DBB" b="FA 58"/>
+  <a u="9DBC" b="FA 59"/>
+  <a u="9DBD" b="FA 5A"/>
+  <a u="9DBE" b="FA 5B"/>
+  <a u="9DBF" b="FA 5C"/>
+  <a u="9DC0" b="FA 5D"/>
+  <a u="9DC1" b="FA 5E"/>
+  <a u="9DC2" b="FA 5F"/>
+  <a u="9DC3" b="FA 60"/>
+  <a u="9DC4" b="FA 61"/>
+  <a u="9DC5" b="FA 62"/>
+  <a u="9DC6" b="FA 63"/>
+  <a u="9DC7" b="FA 64"/>
+  <a u="9DC8" b="FA 65"/>
+  <a u="9DC9" b="FA 66"/>
+  <a u="9DCA" b="FA 67"/>
+  <a u="9DCB" b="FA 68"/>
+  <a u="9DCC" b="FA 69"/>
+  <a u="9DCD" b="FA 6A"/>
+  <a u="9DCE" b="FA 6B"/>
+  <a u="9DCF" b="FA 6C"/>
+  <a u="9DD0" b="FA 6D"/>
+  <a u="9DD1" b="FA 6E"/>
+  <a u="9DD2" b="FA 6F"/>
+  <a u="9DD3" b="FA 70"/>
+  <a u="9DD4" b="FA 71"/>
+  <a u="9DD5" b="FA 72"/>
+  <a u="9DD6" b="FA 73"/>
+  <a u="9DD7" b="FA 74"/>
+  <a u="9DD8" b="FA 75"/>
+  <a u="9DD9" b="FA 76"/>
+  <a u="9DDA" b="FA 77"/>
+  <a u="9DDB" b="FA 78"/>
+  <a u="9DDC" b="FA 79"/>
+  <a u="9DDD" b="FA 7A"/>
+  <a u="9DDE" b="FA 7B"/>
+  <a u="9DDF" b="FA 7C"/>
+  <a u="9DE0" b="FA 7D"/>
+  <a u="9DE1" b="FA 7E"/>
+  <a u="9DE2" b="FA 80"/>
+  <a u="9DE3" b="FA 81"/>
+  <a u="9DE4" b="FA 82"/>
+  <a u="9DE5" b="FA 83"/>
+  <a u="9DE6" b="FA 84"/>
+  <a u="9DE7" b="FA 85"/>
+  <a u="9DE8" b="FA 86"/>
+  <a u="9DE9" b="FA 87"/>
+  <a u="9DEA" b="FA 88"/>
+  <a u="9DEB" b="FA 89"/>
+  <a u="9DEC" b="FA 8A"/>
+  <a u="9DED" b="FA 8B"/>
+  <a u="9DEE" b="FA 8C"/>
+  <a u="9DEF" b="FA 8D"/>
+  <a u="9DF0" b="FA 8E"/>
+  <a u="9DF1" b="FA 8F"/>
+  <a u="9DF2" b="FA 90"/>
+  <a u="9DF3" b="FA 91"/>
+  <a u="9DF4" b="FA 92"/>
+  <a u="9DF5" b="FA 93"/>
+  <a u="9DF6" b="FA 94"/>
+  <a u="9DF7" b="FA 95"/>
+  <a u="9DF8" b="FA 96"/>
+  <a u="9DF9" b="FA 97"/>
+  <a u="9DFA" b="FA 98"/>
+  <a u="9DFB" b="FA 99"/>
+  <a u="9DFC" b="FA 9A"/>
+  <a u="9DFD" b="FA 9B"/>
+  <a u="9DFE" b="FA 9C"/>
+  <a u="9DFF" b="FA 9D"/>
+  <a u="9E00" b="FA 9E"/>
+  <a u="9E01" b="FA 9F"/>
+  <a u="9E02" b="FA A0"/>
+  <a u="9E03" b="FB 40"/>
+  <a u="9E04" b="FB 41"/>
+  <a u="9E05" b="FB 42"/>
+  <a u="9E06" b="FB 43"/>
+  <a u="9E07" b="FB 44"/>
+  <a u="9E08" b="FB 45"/>
+  <a u="9E09" b="FB 46"/>
+  <a u="9E0A" b="FB 47"/>
+  <a u="9E0B" b="FB 48"/>
+  <a u="9E0C" b="FB 49"/>
+  <a u="9E0D" b="FB 4A"/>
+  <a u="9E0E" b="FB 4B"/>
+  <a u="9E0F" b="FB 4C"/>
+  <a u="9E10" b="FB 4D"/>
+  <a u="9E11" b="FB 4E"/>
+  <a u="9E12" b="FB 4F"/>
+  <a u="9E13" b="FB 50"/>
+  <a u="9E14" b="FB 51"/>
+  <a u="9E15" b="FB 52"/>
+  <a u="9E16" b="FB 53"/>
+  <a u="9E17" b="FB 54"/>
+  <a u="9E18" b="FB 55"/>
+  <a u="9E19" b="FB 56"/>
+  <a u="9E1A" b="FB 57"/>
+  <a u="9E1B" b="FB 58"/>
+  <a u="9E1C" b="FB 59"/>
+  <a u="9E1D" b="FB 5A"/>
+  <a u="9E1E" b="FB 5B"/>
+  <a u="9E1F" b="C4 F1"/>
+  <a u="9E20" b="F0 AF"/>
+  <a u="9E21" b="BC A6"/>
+  <a u="9E22" b="F0 B0"/>
+  <a u="9E23" b="C3 F9"/>
+  <a u="9E24" b="FB 5C"/>
+  <a u="9E25" b="C5 B8"/>
+  <a u="9E26" b="D1 BB"/>
+  <a u="9E27" b="FB 5D"/>
+  <a u="9E28" b="F0 B1"/>
+  <a u="9E29" b="F0 B2"/>
+  <a u="9E2A" b="F0 B3"/>
+  <a u="9E2B" b="F0 B4"/>
+  <a u="9E2C" b="F0 B5"/>
+  <a u="9E2D" b="D1 BC"/>
+  <a u="9E2E" b="FB 5E"/>
+  <a u="9E2F" b="D1 EC"/>
+  <a u="9E30" b="FB 5F"/>
+  <a u="9E31" b="F0 B7"/>
+  <a u="9E32" b="F0 B6"/>
+  <a u="9E33" b="D4 A7"/>
+  <a u="9E34" b="FB 60"/>
+  <a u="9E35" b="CD D2"/>
+  <a u="9E36" b="F0 B8"/>
+  <a u="9E37" b="F0 BA"/>
+  <a u="9E38" b="F0 B9"/>
+  <a u="9E39" b="F0 BB"/>
+  <a u="9E3A" b="F0 BC"/>
+  <a u="9E3B" b="FB 61"/>
+  <a u="9E3C" b="FB 62"/>
+  <a u="9E3D" b="B8 EB"/>
+  <a u="9E3E" b="F0 BD"/>
+  <a u="9E3F" b="BA E8"/>
+  <a u="9E40" b="FB 63"/>
+  <a u="9E41" b="F0 BE"/>
+  <a u="9E42" b="F0 BF"/>
+  <a u="9E43" b="BE E9"/>
+  <a u="9E44" b="F0 C0"/>
+  <a u="9E45" b="B6 EC"/>
+  <a u="9E46" b="F0 C1"/>
+  <a u="9E47" b="F0 C2"/>
+  <a u="9E48" b="F0 C3"/>
+  <a u="9E49" b="F0 C4"/>
+  <a u="9E4A" b="C8 B5"/>
+  <a u="9E4B" b="F0 C5"/>
+  <a u="9E4C" b="F0 C6"/>
+  <a u="9E4D" b="FB 64"/>
+  <a u="9E4E" b="F0 C7"/>
+  <a u="9E4F" b="C5 F4"/>
+  <a u="9E50" b="FB 65"/>
+  <a u="9E51" b="F0 C8"/>
+  <a u="9E52" b="FB 66"/>
+  <a u="9E53" b="FB 67"/>
+  <a u="9E54" b="FB 68"/>
+  <a u="9E55" b="F0 C9"/>
+  <a u="9E56" b="FB 69"/>
+  <a u="9E57" b="F0 CA"/>
+  <a u="9E58" b="F7 BD"/>
+  <a u="9E59" b="FB 6A"/>
+  <a u="9E5A" b="F0 CB"/>
+  <a u="9E5B" b="F0 CC"/>
+  <a u="9E5C" b="F0 CD"/>
+  <a u="9E5D" b="FB 6B"/>
+  <a u="9E5E" b="F0 CE"/>
+  <a u="9E5F" b="FB 6C"/>
+  <a u="9E60" b="FB 6D"/>
+  <a u="9E61" b="FB 6E"/>
+  <a u="9E62" b="FB 6F"/>
+  <a u="9E63" b="F0 CF"/>
+  <a u="9E64" b="BA D7"/>
+  <a u="9E65" b="FB 70"/>
+  <a u="9E66" b="F0 D0"/>
+  <a u="9E67" b="F0 D1"/>
+  <a u="9E68" b="F0 D2"/>
+  <a u="9E69" b="F0 D3"/>
+  <a u="9E6A" b="F0 D4"/>
+  <a u="9E6B" b="F0 D5"/>
+  <a u="9E6C" b="F0 D6"/>
+  <a u="9E6D" b="F0 D8"/>
+  <a u="9E6E" b="FB 71"/>
+  <a u="9E6F" b="FB 72"/>
+  <a u="9E70" b="D3 A5"/>
+  <a u="9E71" b="F0 D7"/>
+  <a u="9E72" b="FB 73"/>
+  <a u="9E73" b="F0 D9"/>
+  <a u="9E74" b="FB 74"/>
+  <a u="9E75" b="FB 75"/>
+  <a u="9E76" b="FB 76"/>
+  <a u="9E77" b="FB 77"/>
+  <a u="9E78" b="FB 78"/>
+  <a u="9E79" b="FB 79"/>
+  <a u="9E7A" b="FB 7A"/>
+  <a u="9E7B" b="FB 7B"/>
+  <a u="9E7C" b="FB 7C"/>
+  <a u="9E7D" b="FB 7D"/>
+  <a u="9E7E" b="F5 BA"/>
+  <a u="9E7F" b="C2 B9"/>
+  <a u="9E80" b="FB 7E"/>
+  <a u="9E81" b="FB 80"/>
+  <a u="9E82" b="F7 E4"/>
+  <a u="9E83" b="FB 81"/>
+  <a u="9E84" b="FB 82"/>
+  <a u="9E85" b="FB 83"/>
+  <a u="9E86" b="FB 84"/>
+  <a u="9E87" b="F7 E5"/>
+  <a u="9E88" b="F7 E6"/>
+  <a u="9E89" b="FB 85"/>
+  <a u="9E8A" b="FB 86"/>
+  <a u="9E8B" b="F7 E7"/>
+  <a u="9E8C" b="FB 87"/>
+  <a u="9E8D" b="FB 88"/>
+  <a u="9E8E" b="FB 89"/>
+  <a u="9E8F" b="FB 8A"/>
+  <a u="9E90" b="FB 8B"/>
+  <a u="9E91" b="FB 8C"/>
+  <a u="9E92" b="F7 E8"/>
+  <a u="9E93" b="C2 B4"/>
+  <a u="9E94" b="FB 8D"/>
+  <a u="9E95" b="FB 8E"/>
+  <a u="9E96" b="FB 8F"/>
+  <a u="9E97" b="FB 90"/>
+  <a u="9E98" b="FB 91"/>
+  <a u="9E99" b="FB 92"/>
+  <a u="9E9A" b="FB 93"/>
+  <a u="9E9B" b="FB 94"/>
+  <a u="9E9C" b="FB 95"/>
+  <a u="9E9D" b="F7 EA"/>
+  <a u="9E9E" b="FB 96"/>
+  <a u="9E9F" b="F7 EB"/>
+  <a u="9EA0" b="FB 97"/>
+  <a u="9EA1" b="FB 98"/>
+  <a u="9EA2" b="FB 99"/>
+  <a u="9EA3" b="FB 9A"/>
+  <a u="9EA4" b="FB 9B"/>
+  <a u="9EA5" b="FB 9C"/>
+  <a u="9EA6" b="C2 F3"/>
+  <a u="9EA7" b="FB 9D"/>
+  <a u="9EA8" b="FB 9E"/>
+  <a u="9EA9" b="FB 9F"/>
+  <a u="9EAA" b="FB A0"/>
+  <a u="9EAB" b="FC 40"/>
+  <a u="9EAC" b="FC 41"/>
+  <a u="9EAD" b="FC 42"/>
+  <a u="9EAE" b="FC 43"/>
+  <a u="9EAF" b="FC 44"/>
+  <a u="9EB0" b="FC 45"/>
+  <a u="9EB1" b="FC 46"/>
+  <a u="9EB2" b="FC 47"/>
+  <a u="9EB3" b="FC 48"/>
+  <a u="9EB4" b="F4 F0"/>
+  <a u="9EB5" b="FC 49"/>
+  <a u="9EB6" b="FC 4A"/>
+  <a u="9EB7" b="FC 4B"/>
+  <a u="9EB8" b="F4 EF"/>
+  <a u="9EB9" b="FC 4C"/>
+  <a u="9EBA" b="FC 4D"/>
+  <a u="9EBB" b="C2 E9"/>
+  <a u="9EBC" b="FC 4E"/>
+  <a u="9EBD" b="F7 E1"/>
+  <a u="9EBE" b="F7 E2"/>
+  <a u="9EBF" b="FC 4F"/>
+  <a u="9EC0" b="FC 50"/>
+  <a u="9EC1" b="FC 51"/>
+  <a u="9EC2" b="FC 52"/>
+  <a u="9EC3" b="FC 53"/>
+  <a u="9EC4" b="BB C6"/>
+  <a u="9EC5" b="FC 54"/>
+  <a u="9EC6" b="FC 55"/>
+  <a u="9EC7" b="FC 56"/>
+  <a u="9EC8" b="FC 57"/>
+  <a u="9EC9" b="D9 E4"/>
+  <a u="9ECA" b="FC 58"/>
+  <a u="9ECB" b="FC 59"/>
+  <a u="9ECC" b="FC 5A"/>
+  <a u="9ECD" b="CA F2"/>
+  <a u="9ECE" b="C0 E8"/>
+  <a u="9ECF" b="F0 A4"/>
+  <a u="9ED0" b="FC 5B"/>
+  <a u="9ED1" b="BA DA"/>
+  <a u="9ED2" b="FC 5C"/>
+  <a u="9ED3" b="FC 5D"/>
+  <a u="9ED4" b="C7 AD"/>
+  <a u="9ED5" b="FC 5E"/>
+  <a u="9ED6" b="FC 5F"/>
+  <a u="9ED7" b="FC 60"/>
+  <a u="9ED8" b="C4 AC"/>
+  <a u="9ED9" b="FC 61"/>
+  <a u="9EDA" b="FC 62"/>
+  <a u="9EDB" b="F7 EC"/>
+  <a u="9EDC" b="F7 ED"/>
+  <a u="9EDD" b="F7 EE"/>
+  <a u="9EDE" b="FC 63"/>
+  <a u="9EDF" b="F7 F0"/>
+  <a u="9EE0" b="F7 EF"/>
+  <a u="9EE1" b="FC 64"/>
+  <a u="9EE2" b="F7 F1"/>
+  <a u="9EE3" b="FC 65"/>
+  <a u="9EE4" b="FC 66"/>
+  <a u="9EE5" b="F7 F4"/>
+  <a u="9EE6" b="FC 67"/>
+  <a u="9EE7" b="F7 F3"/>
+  <a u="9EE8" b="FC 68"/>
+  <a u="9EE9" b="F7 F2"/>
+  <a u="9EEA" b="F7 F5"/>
+  <a u="9EEB" b="FC 69"/>
+  <a u="9EEC" b="FC 6A"/>
+  <a u="9EED" b="FC 6B"/>
+  <a u="9EEE" b="FC 6C"/>
+  <a u="9EEF" b="F7 F6"/>
+  <a u="9EF0" b="FC 6D"/>
+  <a u="9EF1" b="FC 6E"/>
+  <a u="9EF2" b="FC 6F"/>
+  <a u="9EF3" b="FC 70"/>
+  <a u="9EF4" b="FC 71"/>
+  <a u="9EF5" b="FC 72"/>
+  <a u="9EF6" b="FC 73"/>
+  <a u="9EF7" b="FC 74"/>
+  <a u="9EF8" b="FC 75"/>
+  <a u="9EF9" b="ED E9"/>
+  <a u="9EFA" b="FC 76"/>
+  <a u="9EFB" b="ED EA"/>
+  <a u="9EFC" b="ED EB"/>
+  <a u="9EFD" b="FC 77"/>
+  <a u="9EFE" b="F6 BC"/>
+  <a u="9EFF" b="FC 78"/>
+  <a u="9F00" b="FC 79"/>
+  <a u="9F01" b="FC 7A"/>
+  <a u="9F02" b="FC 7B"/>
+  <a u="9F03" b="FC 7C"/>
+  <a u="9F04" b="FC 7D"/>
+  <a u="9F05" b="FC 7E"/>
+  <a u="9F06" b="FC 80"/>
+  <a u="9F07" b="FC 81"/>
+  <a u="9F08" b="FC 82"/>
+  <a u="9F09" b="FC 83"/>
+  <a u="9F0A" b="FC 84"/>
+  <a u="9F0B" b="F6 BD"/>
+  <a u="9F0C" b="FC 85"/>
+  <a u="9F0D" b="F6 BE"/>
+  <a u="9F0E" b="B6 A6"/>
+  <a u="9F0F" b="FC 86"/>
+  <a u="9F10" b="D8 BE"/>
+  <a u="9F11" b="FC 87"/>
+  <a u="9F12" b="FC 88"/>
+  <a u="9F13" b="B9 C4"/>
+  <a u="9F14" b="FC 89"/>
+  <a u="9F15" b="FC 8A"/>
+  <a u="9F16" b="FC 8B"/>
+  <a u="9F17" b="D8 BB"/>
+  <a u="9F18" b="FC 8C"/>
+  <a u="9F19" b="DC B1"/>
+  <a u="9F1A" b="FC 8D"/>
+  <a u="9F1B" b="FC 8E"/>
+  <a u="9F1C" b="FC 8F"/>
+  <a u="9F1D" b="FC 90"/>
+  <a u="9F1E" b="FC 91"/>
+  <a u="9F1F" b="FC 92"/>
+  <a u="9F20" b="CA F3"/>
+  <a u="9F21" b="FC 93"/>
+  <a u="9F22" b="F7 F7"/>
+  <a u="9F23" b="FC 94"/>
+  <a u="9F24" b="FC 95"/>
+  <a u="9F25" b="FC 96"/>
+  <a u="9F26" b="FC 97"/>
+  <a u="9F27" b="FC 98"/>
+  <a u="9F28" b="FC 99"/>
+  <a u="9F29" b="FC 9A"/>
+  <a u="9F2A" b="FC 9B"/>
+  <a u="9F2B" b="FC 9C"/>
+  <a u="9F2C" b="F7 F8"/>
+  <a u="9F2D" b="FC 9D"/>
+  <a u="9F2E" b="FC 9E"/>
+  <a u="9F2F" b="F7 F9"/>
+  <a u="9F30" b="FC 9F"/>
+  <a u="9F31" b="FC A0"/>
+  <a u="9F32" b="FD 40"/>
+  <a u="9F33" b="FD 41"/>
+  <a u="9F34" b="FD 42"/>
+  <a u="9F35" b="FD 43"/>
+  <a u="9F36" b="FD 44"/>
+  <a u="9F37" b="F7 FB"/>
+  <a u="9F38" b="FD 45"/>
+  <a u="9F39" b="F7 FA"/>
+  <a u="9F3A" b="FD 46"/>
+  <a u="9F3B" b="B1 C7"/>
+  <a u="9F3C" b="FD 47"/>
+  <a u="9F3D" b="F7 FC"/>
+  <a u="9F3E" b="F7 FD"/>
+  <a u="9F3F" b="FD 48"/>
+  <a u="9F40" b="FD 49"/>
+  <a u="9F41" b="FD 4A"/>
+  <a u="9F42" b="FD 4B"/>
+  <a u="9F43" b="FD 4C"/>
+  <a u="9F44" b="F7 FE"/>
+  <a u="9F45" b="FD 4D"/>
+  <a u="9F46" b="FD 4E"/>
+  <a u="9F47" b="FD 4F"/>
+  <a u="9F48" b="FD 50"/>
+  <a u="9F49" b="FD 51"/>
+  <a u="9F4A" b="FD 52"/>
+  <a u="9F4B" b="FD 53"/>
+  <a u="9F4C" b="FD 54"/>
+  <a u="9F4D" b="FD 55"/>
+  <a u="9F4E" b="FD 56"/>
+  <a u="9F4F" b="FD 57"/>
+  <a u="9F50" b="C6 EB"/>
+  <a u="9F51" b="EC B4"/>
+  <a u="9F52" b="FD 58"/>
+  <a u="9F53" b="FD 59"/>
+  <a u="9F54" b="FD 5A"/>
+  <a u="9F55" b="FD 5B"/>
+  <a u="9F56" b="FD 5C"/>
+  <a u="9F57" b="FD 5D"/>
+  <a u="9F58" b="FD 5E"/>
+  <a u="9F59" b="FD 5F"/>
+  <a u="9F5A" b="FD 60"/>
+  <a u="9F5B" b="FD 61"/>
+  <a u="9F5C" b="FD 62"/>
+  <a u="9F5D" b="FD 63"/>
+  <a u="9F5E" b="FD 64"/>
+  <a u="9F5F" b="FD 65"/>
+  <a u="9F60" b="FD 66"/>
+  <a u="9F61" b="FD 67"/>
+  <a u="9F62" b="FD 68"/>
+  <a u="9F63" b="FD 69"/>
+  <a u="9F64" b="FD 6A"/>
+  <a u="9F65" b="FD 6B"/>
+  <a u="9F66" b="FD 6C"/>
+  <a u="9F67" b="FD 6D"/>
+  <a u="9F68" b="FD 6E"/>
+  <a u="9F69" b="FD 6F"/>
+  <a u="9F6A" b="FD 70"/>
+  <a u="9F6B" b="FD 71"/>
+  <a u="9F6C" b="FD 72"/>
+  <a u="9F6D" b="FD 73"/>
+  <a u="9F6E" b="FD 74"/>
+  <a u="9F6F" b="FD 75"/>
+  <a u="9F70" b="FD 76"/>
+  <a u="9F71" b="FD 77"/>
+  <a u="9F72" b="FD 78"/>
+  <a u="9F73" b="FD 79"/>
+  <a u="9F74" b="FD 7A"/>
+  <a u="9F75" b="FD 7B"/>
+  <a u="9F76" b="FD 7C"/>
+  <a u="9F77" b="FD 7D"/>
+  <a u="9F78" b="FD 7E"/>
+  <a u="9F79" b="FD 80"/>
+  <a u="9F7A" b="FD 81"/>
+  <a u="9F7B" b="FD 82"/>
+  <a u="9F7C" b="FD 83"/>
+  <a u="9F7D" b="FD 84"/>
+  <a u="9F7E" b="FD 85"/>
+  <a u="9F7F" b="B3 DD"/>
+  <a u="9F80" b="F6 B3"/>
+  <a u="9F81" b="FD 86"/>
+  <a u="9F82" b="FD 87"/>
+  <a u="9F83" b="F6 B4"/>
+  <a u="9F84" b="C1 E4"/>
+  <a u="9F85" b="F6 B5"/>
+  <a u="9F86" b="F6 B6"/>
+  <a u="9F87" b="F6 B7"/>
+  <a u="9F88" b="F6 B8"/>
+  <a u="9F89" b="F6 B9"/>
+  <a u="9F8A" b="F6 BA"/>
+  <a u="9F8B" b="C8 A3"/>
+  <a u="9F8C" b="F6 BB"/>
+  <a u="9F8D" b="FD 88"/>
+  <a u="9F8E" b="FD 89"/>
+  <a u="9F8F" b="FD 8A"/>
+  <a u="9F90" b="FD 8B"/>
+  <a u="9F91" b="FD 8C"/>
+  <a u="9F92" b="FD 8D"/>
+  <a u="9F93" b="FD 8E"/>
+  <a u="9F94" b="FD 8F"/>
+  <a u="9F95" b="FD 90"/>
+  <a u="9F96" b="FD 91"/>
+  <a u="9F97" b="FD 92"/>
+  <a u="9F98" b="FD 93"/>
+  <a u="9F99" b="C1 FA"/>
+  <a u="9F9A" b="B9 A8"/>
+  <a u="9F9B" b="ED E8"/>
+  <a u="9F9C" b="FD 94"/>
+  <a u="9F9D" b="FD 95"/>
+  <a u="9F9E" b="FD 96"/>
+  <a u="9F9F" b="B9 EA"/>
+  <a u="9FA0" b="D9 DF"/>
+  <a u="9FA1" b="FD 97"/>
+  <a u="9FA2" b="FD 98"/>
+  <a u="9FA3" b="FD 99"/>
+  <a u="9FA4" b="FD 9A"/>
+  <a u="9FA5" b="FD 9B"/>
+  <a u="E000" b="AA A1"/>
+  <a u="E001" b="AA A2"/>
+  <a u="E002" b="AA A3"/>
+  <a u="E003" b="AA A4"/>
+  <a u="E004" b="AA A5"/>
+  <a u="E005" b="AA A6"/>
+  <a u="E006" b="AA A7"/>
+  <a u="E007" b="AA A8"/>
+  <a u="E008" b="AA A9"/>
+  <a u="E009" b="AA AA"/>
+  <a u="E00A" b="AA AB"/>
+  <a u="E00B" b="AA AC"/>
+  <a u="E00C" b="AA AD"/>
+  <a u="E00D" b="AA AE"/>
+  <a u="E00E" b="AA AF"/>
+  <a u="E00F" b="AA B0"/>
+  <a u="E010" b="AA B1"/>
+  <a u="E011" b="AA B2"/>
+  <a u="E012" b="AA B3"/>
+  <a u="E013" b="AA B4"/>
+  <a u="E014" b="AA B5"/>
+  <a u="E015" b="AA B6"/>
+  <a u="E016" b="AA B7"/>
+  <a u="E017" b="AA B8"/>
+  <a u="E018" b="AA B9"/>
+  <a u="E019" b="AA BA"/>
+  <a u="E01A" b="AA BB"/>
+  <a u="E01B" b="AA BC"/>
+  <a u="E01C" b="AA BD"/>
+  <a u="E01D" b="AA BE"/>
+  <a u="E01E" b="AA BF"/>
+  <a u="E01F" b="AA C0"/>
+  <a u="E020" b="AA C1"/>
+  <a u="E021" b="AA C2"/>
+  <a u="E022" b="AA C3"/>
+  <a u="E023" b="AA C4"/>
+  <a u="E024" b="AA C5"/>
+  <a u="E025" b="AA C6"/>
+  <a u="E026" b="AA C7"/>
+  <a u="E027" b="AA C8"/>
+  <a u="E028" b="AA C9"/>
+  <a u="E029" b="AA CA"/>
+  <a u="E02A" b="AA CB"/>
+  <a u="E02B" b="AA CC"/>
+  <a u="E02C" b="AA CD"/>
+  <a u="E02D" b="AA CE"/>
+  <a u="E02E" b="AA CF"/>
+  <a u="E02F" b="AA D0"/>
+  <a u="E030" b="AA D1"/>
+  <a u="E031" b="AA D2"/>
+  <a u="E032" b="AA D3"/>
+  <a u="E033" b="AA D4"/>
+  <a u="E034" b="AA D5"/>
+  <a u="E035" b="AA D6"/>
+  <a u="E036" b="AA D7"/>
+  <a u="E037" b="AA D8"/>
+  <a u="E038" b="AA D9"/>
+  <a u="E039" b="AA DA"/>
+  <a u="E03A" b="AA DB"/>
+  <a u="E03B" b="AA DC"/>
+  <a u="E03C" b="AA DD"/>
+  <a u="E03D" b="AA DE"/>
+  <a u="E03E" b="AA DF"/>
+  <a u="E03F" b="AA E0"/>
+  <a u="E040" b="AA E1"/>
+  <a u="E041" b="AA E2"/>
+  <a u="E042" b="AA E3"/>
+  <a u="E043" b="AA E4"/>
+  <a u="E044" b="AA E5"/>
+  <a u="E045" b="AA E6"/>
+  <a u="E046" b="AA E7"/>
+  <a u="E047" b="AA E8"/>
+  <a u="E048" b="AA E9"/>
+  <a u="E049" b="AA EA"/>
+  <a u="E04A" b="AA EB"/>
+  <a u="E04B" b="AA EC"/>
+  <a u="E04C" b="AA ED"/>
+  <a u="E04D" b="AA EE"/>
+  <a u="E04E" b="AA EF"/>
+  <a u="E04F" b="AA F0"/>
+  <a u="E050" b="AA F1"/>
+  <a u="E051" b="AA F2"/>
+  <a u="E052" b="AA F3"/>
+  <a u="E053" b="AA F4"/>
+  <a u="E054" b="AA F5"/>
+  <a u="E055" b="AA F6"/>
+  <a u="E056" b="AA F7"/>
+  <a u="E057" b="AA F8"/>
+  <a u="E058" b="AA F9"/>
+  <a u="E059" b="AA FA"/>
+  <a u="E05A" b="AA FB"/>
+  <a u="E05B" b="AA FC"/>
+  <a u="E05C" b="AA FD"/>
+  <a u="E05D" b="AA FE"/>
+  <a u="E05E" b="AB A1"/>
+  <a u="E05F" b="AB A2"/>
+  <a u="E060" b="AB A3"/>
+  <a u="E061" b="AB A4"/>
+  <a u="E062" b="AB A5"/>
+  <a u="E063" b="AB A6"/>
+  <a u="E064" b="AB A7"/>
+  <a u="E065" b="AB A8"/>
+  <a u="E066" b="AB A9"/>
+  <a u="E067" b="AB AA"/>
+  <a u="E068" b="AB AB"/>
+  <a u="E069" b="AB AC"/>
+  <a u="E06A" b="AB AD"/>
+  <a u="E06B" b="AB AE"/>
+  <a u="E06C" b="AB AF"/>
+  <a u="E06D" b="AB B0"/>
+  <a u="E06E" b="AB B1"/>
+  <a u="E06F" b="AB B2"/>
+  <a u="E070" b="AB B3"/>
+  <a u="E071" b="AB B4"/>
+  <a u="E072" b="AB B5"/>
+  <a u="E073" b="AB B6"/>
+  <a u="E074" b="AB B7"/>
+  <a u="E075" b="AB B8"/>
+  <a u="E076" b="AB B9"/>
+  <a u="E077" b="AB BA"/>
+  <a u="E078" b="AB BB"/>
+  <a u="E079" b="AB BC"/>
+  <a u="E07A" b="AB BD"/>
+  <a u="E07B" b="AB BE"/>
+  <a u="E07C" b="AB BF"/>
+  <a u="E07D" b="AB C0"/>
+  <a u="E07E" b="AB C1"/>
+  <a u="E07F" b="AB C2"/>
+  <a u="E080" b="AB C3"/>
+  <a u="E081" b="AB C4"/>
+  <a u="E082" b="AB C5"/>
+  <a u="E083" b="AB C6"/>
+  <a u="E084" b="AB C7"/>
+  <a u="E085" b="AB C8"/>
+  <a u="E086" b="AB C9"/>
+  <a u="E087" b="AB CA"/>
+  <a u="E088" b="AB CB"/>
+  <a u="E089" b="AB CC"/>
+  <a u="E08A" b="AB CD"/>
+  <a u="E08B" b="AB CE"/>
+  <a u="E08C" b="AB CF"/>
+  <a u="E08D" b="AB D0"/>
+  <a u="E08E" b="AB D1"/>
+  <a u="E08F" b="AB D2"/>
+  <a u="E090" b="AB D3"/>
+  <a u="E091" b="AB D4"/>
+  <a u="E092" b="AB D5"/>
+  <a u="E093" b="AB D6"/>
+  <a u="E094" b="AB D7"/>
+  <a u="E095" b="AB D8"/>
+  <a u="E096" b="AB D9"/>
+  <a u="E097" b="AB DA"/>
+  <a u="E098" b="AB DB"/>
+  <a u="E099" b="AB DC"/>
+  <a u="E09A" b="AB DD"/>
+  <a u="E09B" b="AB DE"/>
+  <a u="E09C" b="AB DF"/>
+  <a u="E09D" b="AB E0"/>
+  <a u="E09E" b="AB E1"/>
+  <a u="E09F" b="AB E2"/>
+  <a u="E0A0" b="AB E3"/>
+  <a u="E0A1" b="AB E4"/>
+  <a u="E0A2" b="AB E5"/>
+  <a u="E0A3" b="AB E6"/>
+  <a u="E0A4" b="AB E7"/>
+  <a u="E0A5" b="AB E8"/>
+  <a u="E0A6" b="AB E9"/>
+  <a u="E0A7" b="AB EA"/>
+  <a u="E0A8" b="AB EB"/>
+  <a u="E0A9" b="AB EC"/>
+  <a u="E0AA" b="AB ED"/>
+  <a u="E0AB" b="AB EE"/>
+  <a u="E0AC" b="AB EF"/>
+  <a u="E0AD" b="AB F0"/>
+  <a u="E0AE" b="AB F1"/>
+  <a u="E0AF" b="AB F2"/>
+  <a u="E0B0" b="AB F3"/>
+  <a u="E0B1" b="AB F4"/>
+  <a u="E0B2" b="AB F5"/>
+  <a u="E0B3" b="AB F6"/>
+  <a u="E0B4" b="AB F7"/>
+  <a u="E0B5" b="AB F8"/>
+  <a u="E0B6" b="AB F9"/>
+  <a u="E0B7" b="AB FA"/>
+  <a u="E0B8" b="AB FB"/>
+  <a u="E0B9" b="AB FC"/>
+  <a u="E0BA" b="AB FD"/>
+  <a u="E0BB" b="AB FE"/>
+  <a u="E0BC" b="AC A1"/>
+  <a u="E0BD" b="AC A2"/>
+  <a u="E0BE" b="AC A3"/>
+  <a u="E0BF" b="AC A4"/>
+  <a u="E0C0" b="AC A5"/>
+  <a u="E0C1" b="AC A6"/>
+  <a u="E0C2" b="AC A7"/>
+  <a u="E0C3" b="AC A8"/>
+  <a u="E0C4" b="AC A9"/>
+  <a u="E0C5" b="AC AA"/>
+  <a u="E0C6" b="AC AB"/>
+  <a u="E0C7" b="AC AC"/>
+  <a u="E0C8" b="AC AD"/>
+  <a u="E0C9" b="AC AE"/>
+  <a u="E0CA" b="AC AF"/>
+  <a u="E0CB" b="AC B0"/>
+  <a u="E0CC" b="AC B1"/>
+  <a u="E0CD" b="AC B2"/>
+  <a u="E0CE" b="AC B3"/>
+  <a u="E0CF" b="AC B4"/>
+  <a u="E0D0" b="AC B5"/>
+  <a u="E0D1" b="AC B6"/>
+  <a u="E0D2" b="AC B7"/>
+  <a u="E0D3" b="AC B8"/>
+  <a u="E0D4" b="AC B9"/>
+  <a u="E0D5" b="AC BA"/>
+  <a u="E0D6" b="AC BB"/>
+  <a u="E0D7" b="AC BC"/>
+  <a u="E0D8" b="AC BD"/>
+  <a u="E0D9" b="AC BE"/>
+  <a u="E0DA" b="AC BF"/>
+  <a u="E0DB" b="AC C0"/>
+  <a u="E0DC" b="AC C1"/>
+  <a u="E0DD" b="AC C2"/>
+  <a u="E0DE" b="AC C3"/>
+  <a u="E0DF" b="AC C4"/>
+  <a u="E0E0" b="AC C5"/>
+  <a u="E0E1" b="AC C6"/>
+  <a u="E0E2" b="AC C7"/>
+  <a u="E0E3" b="AC C8"/>
+  <a u="E0E4" b="AC C9"/>
+  <a u="E0E5" b="AC CA"/>
+  <a u="E0E6" b="AC CB"/>
+  <a u="E0E7" b="AC CC"/>
+  <a u="E0E8" b="AC CD"/>
+  <a u="E0E9" b="AC CE"/>
+  <a u="E0EA" b="AC CF"/>
+  <a u="E0EB" b="AC D0"/>
+  <a u="E0EC" b="AC D1"/>
+  <a u="E0ED" b="AC D2"/>
+  <a u="E0EE" b="AC D3"/>
+  <a u="E0EF" b="AC D4"/>
+  <a u="E0F0" b="AC D5"/>
+  <a u="E0F1" b="AC D6"/>
+  <a u="E0F2" b="AC D7"/>
+  <a u="E0F3" b="AC D8"/>
+  <a u="E0F4" b="AC D9"/>
+  <a u="E0F5" b="AC DA"/>
+  <a u="E0F6" b="AC DB"/>
+  <a u="E0F7" b="AC DC"/>
+  <a u="E0F8" b="AC DD"/>
+  <a u="E0F9" b="AC DE"/>
+  <a u="E0FA" b="AC DF"/>
+  <a u="E0FB" b="AC E0"/>
+  <a u="E0FC" b="AC E1"/>
+  <a u="E0FD" b="AC E2"/>
+  <a u="E0FE" b="AC E3"/>
+  <a u="E0FF" b="AC E4"/>
+  <a u="E100" b="AC E5"/>
+  <a u="E101" b="AC E6"/>
+  <a u="E102" b="AC E7"/>
+  <a u="E103" b="AC E8"/>
+  <a u="E104" b="AC E9"/>
+  <a u="E105" b="AC EA"/>
+  <a u="E106" b="AC EB"/>
+  <a u="E107" b="AC EC"/>
+  <a u="E108" b="AC ED"/>
+  <a u="E109" b="AC EE"/>
+  <a u="E10A" b="AC EF"/>
+  <a u="E10B" b="AC F0"/>
+  <a u="E10C" b="AC F1"/>
+  <a u="E10D" b="AC F2"/>
+  <a u="E10E" b="AC F3"/>
+  <a u="E10F" b="AC F4"/>
+  <a u="E110" b="AC F5"/>
+  <a u="E111" b="AC F6"/>
+  <a u="E112" b="AC F7"/>
+  <a u="E113" b="AC F8"/>
+  <a u="E114" b="AC F9"/>
+  <a u="E115" b="AC FA"/>
+  <a u="E116" b="AC FB"/>
+  <a u="E117" b="AC FC"/>
+  <a u="E118" b="AC FD"/>
+  <a u="E119" b="AC FE"/>
+  <a u="E11A" b="AD A1"/>
+  <a u="E11B" b="AD A2"/>
+  <a u="E11C" b="AD A3"/>
+  <a u="E11D" b="AD A4"/>
+  <a u="E11E" b="AD A5"/>
+  <a u="E11F" b="AD A6"/>
+  <a u="E120" b="AD A7"/>
+  <a u="E121" b="AD A8"/>
+  <a u="E122" b="AD A9"/>
+  <a u="E123" b="AD AA"/>
+  <a u="E124" b="AD AB"/>
+  <a u="E125" b="AD AC"/>
+  <a u="E126" b="AD AD"/>
+  <a u="E127" b="AD AE"/>
+  <a u="E128" b="AD AF"/>
+  <a u="E129" b="AD B0"/>
+  <a u="E12A" b="AD B1"/>
+  <a u="E12B" b="AD B2"/>
+  <a u="E12C" b="AD B3"/>
+  <a u="E12D" b="AD B4"/>
+  <a u="E12E" b="AD B5"/>
+  <a u="E12F" b="AD B6"/>
+  <a u="E130" b="AD B7"/>
+  <a u="E131" b="AD B8"/>
+  <a u="E132" b="AD B9"/>
+  <a u="E133" b="AD BA"/>
+  <a u="E134" b="AD BB"/>
+  <a u="E135" b="AD BC"/>
+  <a u="E136" b="AD BD"/>
+  <a u="E137" b="AD BE"/>
+  <a u="E138" b="AD BF"/>
+  <a u="E139" b="AD C0"/>
+  <a u="E13A" b="AD C1"/>
+  <a u="E13B" b="AD C2"/>
+  <a u="E13C" b="AD C3"/>
+  <a u="E13D" b="AD C4"/>
+  <a u="E13E" b="AD C5"/>
+  <a u="E13F" b="AD C6"/>
+  <a u="E140" b="AD C7"/>
+  <a u="E141" b="AD C8"/>
+  <a u="E142" b="AD C9"/>
+  <a u="E143" b="AD CA"/>
+  <a u="E144" b="AD CB"/>
+  <a u="E145" b="AD CC"/>
+  <a u="E146" b="AD CD"/>
+  <a u="E147" b="AD CE"/>
+  <a u="E148" b="AD CF"/>
+  <a u="E149" b="AD D0"/>
+  <a u="E14A" b="AD D1"/>
+  <a u="E14B" b="AD D2"/>
+  <a u="E14C" b="AD D3"/>
+  <a u="E14D" b="AD D4"/>
+  <a u="E14E" b="AD D5"/>
+  <a u="E14F" b="AD D6"/>
+  <a u="E150" b="AD D7"/>
+  <a u="E151" b="AD D8"/>
+  <a u="E152" b="AD D9"/>
+  <a u="E153" b="AD DA"/>
+  <a u="E154" b="AD DB"/>
+  <a u="E155" b="AD DC"/>
+  <a u="E156" b="AD DD"/>
+  <a u="E157" b="AD DE"/>
+  <a u="E158" b="AD DF"/>
+  <a u="E159" b="AD E0"/>
+  <a u="E15A" b="AD E1"/>
+  <a u="E15B" b="AD E2"/>
+  <a u="E15C" b="AD E3"/>
+  <a u="E15D" b="AD E4"/>
+  <a u="E15E" b="AD E5"/>
+  <a u="E15F" b="AD E6"/>
+  <a u="E160" b="AD E7"/>
+  <a u="E161" b="AD E8"/>
+  <a u="E162" b="AD E9"/>
+  <a u="E163" b="AD EA"/>
+  <a u="E164" b="AD EB"/>
+  <a u="E165" b="AD EC"/>
+  <a u="E166" b="AD ED"/>
+  <a u="E167" b="AD EE"/>
+  <a u="E168" b="AD EF"/>
+  <a u="E169" b="AD F0"/>
+  <a u="E16A" b="AD F1"/>
+  <a u="E16B" b="AD F2"/>
+  <a u="E16C" b="AD F3"/>
+  <a u="E16D" b="AD F4"/>
+  <a u="E16E" b="AD F5"/>
+  <a u="E16F" b="AD F6"/>
+  <a u="E170" b="AD F7"/>
+  <a u="E171" b="AD F8"/>
+  <a u="E172" b="AD F9"/>
+  <a u="E173" b="AD FA"/>
+  <a u="E174" b="AD FB"/>
+  <a u="E175" b="AD FC"/>
+  <a u="E176" b="AD FD"/>
+  <a u="E177" b="AD FE"/>
+  <a u="E178" b="AE A1"/>
+  <a u="E179" b="AE A2"/>
+  <a u="E17A" b="AE A3"/>
+  <a u="E17B" b="AE A4"/>
+  <a u="E17C" b="AE A5"/>
+  <a u="E17D" b="AE A6"/>
+  <a u="E17E" b="AE A7"/>
+  <a u="E17F" b="AE A8"/>
+  <a u="E180" b="AE A9"/>
+  <a u="E181" b="AE AA"/>
+  <a u="E182" b="AE AB"/>
+  <a u="E183" b="AE AC"/>
+  <a u="E184" b="AE AD"/>
+  <a u="E185" b="AE AE"/>
+  <a u="E186" b="AE AF"/>
+  <a u="E187" b="AE B0"/>
+  <a u="E188" b="AE B1"/>
+  <a u="E189" b="AE B2"/>
+  <a u="E18A" b="AE B3"/>
+  <a u="E18B" b="AE B4"/>
+  <a u="E18C" b="AE B5"/>
+  <a u="E18D" b="AE B6"/>
+  <a u="E18E" b="AE B7"/>
+  <a u="E18F" b="AE B8"/>
+  <a u="E190" b="AE B9"/>
+  <a u="E191" b="AE BA"/>
+  <a u="E192" b="AE BB"/>
+  <a u="E193" b="AE BC"/>
+  <a u="E194" b="AE BD"/>
+  <a u="E195" b="AE BE"/>
+  <a u="E196" b="AE BF"/>
+  <a u="E197" b="AE C0"/>
+  <a u="E198" b="AE C1"/>
+  <a u="E199" b="AE C2"/>
+  <a u="E19A" b="AE C3"/>
+  <a u="E19B" b="AE C4"/>
+  <a u="E19C" b="AE C5"/>
+  <a u="E19D" b="AE C6"/>
+  <a u="E19E" b="AE C7"/>
+  <a u="E19F" b="AE C8"/>
+  <a u="E1A0" b="AE C9"/>
+  <a u="E1A1" b="AE CA"/>
+  <a u="E1A2" b="AE CB"/>
+  <a u="E1A3" b="AE CC"/>
+  <a u="E1A4" b="AE CD"/>
+  <a u="E1A5" b="AE CE"/>
+  <a u="E1A6" b="AE CF"/>
+  <a u="E1A7" b="AE D0"/>
+  <a u="E1A8" b="AE D1"/>
+  <a u="E1A9" b="AE D2"/>
+  <a u="E1AA" b="AE D3"/>
+  <a u="E1AB" b="AE D4"/>
+  <a u="E1AC" b="AE D5"/>
+  <a u="E1AD" b="AE D6"/>
+  <a u="E1AE" b="AE D7"/>
+  <a u="E1AF" b="AE D8"/>
+  <a u="E1B0" b="AE D9"/>
+  <a u="E1B1" b="AE DA"/>
+  <a u="E1B2" b="AE DB"/>
+  <a u="E1B3" b="AE DC"/>
+  <a u="E1B4" b="AE DD"/>
+  <a u="E1B5" b="AE DE"/>
+  <a u="E1B6" b="AE DF"/>
+  <a u="E1B7" b="AE E0"/>
+  <a u="E1B8" b="AE E1"/>
+  <a u="E1B9" b="AE E2"/>
+  <a u="E1BA" b="AE E3"/>
+  <a u="E1BB" b="AE E4"/>
+  <a u="E1BC" b="AE E5"/>
+  <a u="E1BD" b="AE E6"/>
+  <a u="E1BE" b="AE E7"/>
+  <a u="E1BF" b="AE E8"/>
+  <a u="E1C0" b="AE E9"/>
+  <a u="E1C1" b="AE EA"/>
+  <a u="E1C2" b="AE EB"/>
+  <a u="E1C3" b="AE EC"/>
+  <a u="E1C4" b="AE ED"/>
+  <a u="E1C5" b="AE EE"/>
+  <a u="E1C6" b="AE EF"/>
+  <a u="E1C7" b="AE F0"/>
+  <a u="E1C8" b="AE F1"/>
+  <a u="E1C9" b="AE F2"/>
+  <a u="E1CA" b="AE F3"/>
+  <a u="E1CB" b="AE F4"/>
+  <a u="E1CC" b="AE F5"/>
+  <a u="E1CD" b="AE F6"/>
+  <a u="E1CE" b="AE F7"/>
+  <a u="E1CF" b="AE F8"/>
+  <a u="E1D0" b="AE F9"/>
+  <a u="E1D1" b="AE FA"/>
+  <a u="E1D2" b="AE FB"/>
+  <a u="E1D3" b="AE FC"/>
+  <a u="E1D4" b="AE FD"/>
+  <a u="E1D5" b="AE FE"/>
+  <a u="E1D6" b="AF A1"/>
+  <a u="E1D7" b="AF A2"/>
+  <a u="E1D8" b="AF A3"/>
+  <a u="E1D9" b="AF A4"/>
+  <a u="E1DA" b="AF A5"/>
+  <a u="E1DB" b="AF A6"/>
+  <a u="E1DC" b="AF A7"/>
+  <a u="E1DD" b="AF A8"/>
+  <a u="E1DE" b="AF A9"/>
+  <a u="E1DF" b="AF AA"/>
+  <a u="E1E0" b="AF AB"/>
+  <a u="E1E1" b="AF AC"/>
+  <a u="E1E2" b="AF AD"/>
+  <a u="E1E3" b="AF AE"/>
+  <a u="E1E4" b="AF AF"/>
+  <a u="E1E5" b="AF B0"/>
+  <a u="E1E6" b="AF B1"/>
+  <a u="E1E7" b="AF B2"/>
+  <a u="E1E8" b="AF B3"/>
+  <a u="E1E9" b="AF B4"/>
+  <a u="E1EA" b="AF B5"/>
+  <a u="E1EB" b="AF B6"/>
+  <a u="E1EC" b="AF B7"/>
+  <a u="E1ED" b="AF B8"/>
+  <a u="E1EE" b="AF B9"/>
+  <a u="E1EF" b="AF BA"/>
+  <a u="E1F0" b="AF BB"/>
+  <a u="E1F1" b="AF BC"/>
+  <a u="E1F2" b="AF BD"/>
+  <a u="E1F3" b="AF BE"/>
+  <a u="E1F4" b="AF BF"/>
+  <a u="E1F5" b="AF C0"/>
+  <a u="E1F6" b="AF C1"/>
+  <a u="E1F7" b="AF C2"/>
+  <a u="E1F8" b="AF C3"/>
+  <a u="E1F9" b="AF C4"/>
+  <a u="E1FA" b="AF C5"/>
+  <a u="E1FB" b="AF C6"/>
+  <a u="E1FC" b="AF C7"/>
+  <a u="E1FD" b="AF C8"/>
+  <a u="E1FE" b="AF C9"/>
+  <a u="E1FF" b="AF CA"/>
+  <a u="E200" b="AF CB"/>
+  <a u="E201" b="AF CC"/>
+  <a u="E202" b="AF CD"/>
+  <a u="E203" b="AF CE"/>
+  <a u="E204" b="AF CF"/>
+  <a u="E205" b="AF D0"/>
+  <a u="E206" b="AF D1"/>
+  <a u="E207" b="AF D2"/>
+  <a u="E208" b="AF D3"/>
+  <a u="E209" b="AF D4"/>
+  <a u="E20A" b="AF D5"/>
+  <a u="E20B" b="AF D6"/>
+  <a u="E20C" b="AF D7"/>
+  <a u="E20D" b="AF D8"/>
+  <a u="E20E" b="AF D9"/>
+  <a u="E20F" b="AF DA"/>
+  <a u="E210" b="AF DB"/>
+  <a u="E211" b="AF DC"/>
+  <a u="E212" b="AF DD"/>
+  <a u="E213" b="AF DE"/>
+  <a u="E214" b="AF DF"/>
+  <a u="E215" b="AF E0"/>
+  <a u="E216" b="AF E1"/>
+  <a u="E217" b="AF E2"/>
+  <a u="E218" b="AF E3"/>
+  <a u="E219" b="AF E4"/>
+  <a u="E21A" b="AF E5"/>
+  <a u="E21B" b="AF E6"/>
+  <a u="E21C" b="AF E7"/>
+  <a u="E21D" b="AF E8"/>
+  <a u="E21E" b="AF E9"/>
+  <a u="E21F" b="AF EA"/>
+  <a u="E220" b="AF EB"/>
+  <a u="E221" b="AF EC"/>
+  <a u="E222" b="AF ED"/>
+  <a u="E223" b="AF EE"/>
+  <a u="E224" b="AF EF"/>
+  <a u="E225" b="AF F0"/>
+  <a u="E226" b="AF F1"/>
+  <a u="E227" b="AF F2"/>
+  <a u="E228" b="AF F3"/>
+  <a u="E229" b="AF F4"/>
+  <a u="E22A" b="AF F5"/>
+  <a u="E22B" b="AF F6"/>
+  <a u="E22C" b="AF F7"/>
+  <a u="E22D" b="AF F8"/>
+  <a u="E22E" b="AF F9"/>
+  <a u="E22F" b="AF FA"/>
+  <a u="E230" b="AF FB"/>
+  <a u="E231" b="AF FC"/>
+  <a u="E232" b="AF FD"/>
+  <a u="E233" b="AF FE"/>
+  <a u="E234" b="F8 A1"/>
+  <a u="E235" b="F8 A2"/>
+  <a u="E236" b="F8 A3"/>
+  <a u="E237" b="F8 A4"/>
+  <a u="E238" b="F8 A5"/>
+  <a u="E239" b="F8 A6"/>
+  <a u="E23A" b="F8 A7"/>
+  <a u="E23B" b="F8 A8"/>
+  <a u="E23C" b="F8 A9"/>
+  <a u="E23D" b="F8 AA"/>
+  <a u="E23E" b="F8 AB"/>
+  <a u="E23F" b="F8 AC"/>
+  <a u="E240" b="F8 AD"/>
+  <a u="E241" b="F8 AE"/>
+  <a u="E242" b="F8 AF"/>
+  <a u="E243" b="F8 B0"/>
+  <a u="E244" b="F8 B1"/>
+  <a u="E245" b="F8 B2"/>
+  <a u="E246" b="F8 B3"/>
+  <a u="E247" b="F8 B4"/>
+  <a u="E248" b="F8 B5"/>
+  <a u="E249" b="F8 B6"/>
+  <a u="E24A" b="F8 B7"/>
+  <a u="E24B" b="F8 B8"/>
+  <a u="E24C" b="F8 B9"/>
+  <a u="E24D" b="F8 BA"/>
+  <a u="E24E" b="F8 BB"/>
+  <a u="E24F" b="F8 BC"/>
+  <a u="E250" b="F8 BD"/>
+  <a u="E251" b="F8 BE"/>
+  <a u="E252" b="F8 BF"/>
+  <a u="E253" b="F8 C0"/>
+  <a u="E254" b="F8 C1"/>
+  <a u="E255" b="F8 C2"/>
+  <a u="E256" b="F8 C3"/>
+  <a u="E257" b="F8 C4"/>
+  <a u="E258" b="F8 C5"/>
+  <a u="E259" b="F8 C6"/>
+  <a u="E25A" b="F8 C7"/>
+  <a u="E25B" b="F8 C8"/>
+  <a u="E25C" b="F8 C9"/>
+  <a u="E25D" b="F8 CA"/>
+  <a u="E25E" b="F8 CB"/>
+  <a u="E25F" b="F8 CC"/>
+  <a u="E260" b="F8 CD"/>
+  <a u="E261" b="F8 CE"/>
+  <a u="E262" b="F8 CF"/>
+  <a u="E263" b="F8 D0"/>
+  <a u="E264" b="F8 D1"/>
+  <a u="E265" b="F8 D2"/>
+  <a u="E266" b="F8 D3"/>
+  <a u="E267" b="F8 D4"/>
+  <a u="E268" b="F8 D5"/>
+  <a u="E269" b="F8 D6"/>
+  <a u="E26A" b="F8 D7"/>
+  <a u="E26B" b="F8 D8"/>
+  <a u="E26C" b="F8 D9"/>
+  <a u="E26D" b="F8 DA"/>
+  <a u="E26E" b="F8 DB"/>
+  <a u="E26F" b="F8 DC"/>
+  <a u="E270" b="F8 DD"/>
+  <a u="E271" b="F8 DE"/>
+  <a u="E272" b="F8 DF"/>
+  <a u="E273" b="F8 E0"/>
+  <a u="E274" b="F8 E1"/>
+  <a u="E275" b="F8 E2"/>
+  <a u="E276" b="F8 E3"/>
+  <a u="E277" b="F8 E4"/>
+  <a u="E278" b="F8 E5"/>
+  <a u="E279" b="F8 E6"/>
+  <a u="E27A" b="F8 E7"/>
+  <a u="E27B" b="F8 E8"/>
+  <a u="E27C" b="F8 E9"/>
+  <a u="E27D" b="F8 EA"/>
+  <a u="E27E" b="F8 EB"/>
+  <a u="E27F" b="F8 EC"/>
+  <a u="E280" b="F8 ED"/>
+  <a u="E281" b="F8 EE"/>
+  <a u="E282" b="F8 EF"/>
+  <a u="E283" b="F8 F0"/>
+  <a u="E284" b="F8 F1"/>
+  <a u="E285" b="F8 F2"/>
+  <a u="E286" b="F8 F3"/>
+  <a u="E287" b="F8 F4"/>
+  <a u="E288" b="F8 F5"/>
+  <a u="E289" b="F8 F6"/>
+  <a u="E28A" b="F8 F7"/>
+  <a u="E28B" b="F8 F8"/>
+  <a u="E28C" b="F8 F9"/>
+  <a u="E28D" b="F8 FA"/>
+  <a u="E28E" b="F8 FB"/>
+  <a u="E28F" b="F8 FC"/>
+  <a u="E290" b="F8 FD"/>
+  <a u="E291" b="F8 FE"/>
+  <a u="E292" b="F9 A1"/>
+  <a u="E293" b="F9 A2"/>
+  <a u="E294" b="F9 A3"/>
+  <a u="E295" b="F9 A4"/>
+  <a u="E296" b="F9 A5"/>
+  <a u="E297" b="F9 A6"/>
+  <a u="E298" b="F9 A7"/>
+  <a u="E299" b="F9 A8"/>
+  <a u="E29A" b="F9 A9"/>
+  <a u="E29B" b="F9 AA"/>
+  <a u="E29C" b="F9 AB"/>
+  <a u="E29D" b="F9 AC"/>
+  <a u="E29E" b="F9 AD"/>
+  <a u="E29F" b="F9 AE"/>
+  <a u="E2A0" b="F9 AF"/>
+  <a u="E2A1" b="F9 B0"/>
+  <a u="E2A2" b="F9 B1"/>
+  <a u="E2A3" b="F9 B2"/>
+  <a u="E2A4" b="F9 B3"/>
+  <a u="E2A5" b="F9 B4"/>
+  <a u="E2A6" b="F9 B5"/>
+  <a u="E2A7" b="F9 B6"/>
+  <a u="E2A8" b="F9 B7"/>
+  <a u="E2A9" b="F9 B8"/>
+  <a u="E2AA" b="F9 B9"/>
+  <a u="E2AB" b="F9 BA"/>
+  <a u="E2AC" b="F9 BB"/>
+  <a u="E2AD" b="F9 BC"/>
+  <a u="E2AE" b="F9 BD"/>
+  <a u="E2AF" b="F9 BE"/>
+  <a u="E2B0" b="F9 BF"/>
+  <a u="E2B1" b="F9 C0"/>
+  <a u="E2B2" b="F9 C1"/>
+  <a u="E2B3" b="F9 C2"/>
+  <a u="E2B4" b="F9 C3"/>
+  <a u="E2B5" b="F9 C4"/>
+  <a u="E2B6" b="F9 C5"/>
+  <a u="E2B7" b="F9 C6"/>
+  <a u="E2B8" b="F9 C7"/>
+  <a u="E2B9" b="F9 C8"/>
+  <a u="E2BA" b="F9 C9"/>
+  <a u="E2BB" b="F9 CA"/>
+  <a u="E2BC" b="F9 CB"/>
+  <a u="E2BD" b="F9 CC"/>
+  <a u="E2BE" b="F9 CD"/>
+  <a u="E2BF" b="F9 CE"/>
+  <a u="E2C0" b="F9 CF"/>
+  <a u="E2C1" b="F9 D0"/>
+  <a u="E2C2" b="F9 D1"/>
+  <a u="E2C3" b="F9 D2"/>
+  <a u="E2C4" b="F9 D3"/>
+  <a u="E2C5" b="F9 D4"/>
+  <a u="E2C6" b="F9 D5"/>
+  <a u="E2C7" b="F9 D6"/>
+  <a u="E2C8" b="F9 D7"/>
+  <a u="E2C9" b="F9 D8"/>
+  <a u="E2CA" b="F9 D9"/>
+  <a u="E2CB" b="F9 DA"/>
+  <a u="E2CC" b="F9 DB"/>
+  <a u="E2CD" b="F9 DC"/>
+  <a u="E2CE" b="F9 DD"/>
+  <a u="E2CF" b="F9 DE"/>
+  <a u="E2D0" b="F9 DF"/>
+  <a u="E2D1" b="F9 E0"/>
+  <a u="E2D2" b="F9 E1"/>
+  <a u="E2D3" b="F9 E2"/>
+  <a u="E2D4" b="F9 E3"/>
+  <a u="E2D5" b="F9 E4"/>
+  <a u="E2D6" b="F9 E5"/>
+  <a u="E2D7" b="F9 E6"/>
+  <a u="E2D8" b="F9 E7"/>
+  <a u="E2D9" b="F9 E8"/>
+  <a u="E2DA" b="F9 E9"/>
+  <a u="E2DB" b="F9 EA"/>
+  <a u="E2DC" b="F9 EB"/>
+  <a u="E2DD" b="F9 EC"/>
+  <a u="E2DE" b="F9 ED"/>
+  <a u="E2DF" b="F9 EE"/>
+  <a u="E2E0" b="F9 EF"/>
+  <a u="E2E1" b="F9 F0"/>
+  <a u="E2E2" b="F9 F1"/>
+  <a u="E2E3" b="F9 F2"/>
+  <a u="E2E4" b="F9 F3"/>
+  <a u="E2E5" b="F9 F4"/>
+  <a u="E2E6" b="F9 F5"/>
+  <a u="E2E7" b="F9 F6"/>
+  <a u="E2E8" b="F9 F7"/>
+  <a u="E2E9" b="F9 F8"/>
+  <a u="E2EA" b="F9 F9"/>
+  <a u="E2EB" b="F9 FA"/>
+  <a u="E2EC" b="F9 FB"/>
+  <a u="E2ED" b="F9 FC"/>
+  <a u="E2EE" b="F9 FD"/>
+  <a u="E2EF" b="F9 FE"/>
+  <a u="E2F0" b="FA A1"/>
+  <a u="E2F1" b="FA A2"/>
+  <a u="E2F2" b="FA A3"/>
+  <a u="E2F3" b="FA A4"/>
+  <a u="E2F4" b="FA A5"/>
+  <a u="E2F5" b="FA A6"/>
+  <a u="E2F6" b="FA A7"/>
+  <a u="E2F7" b="FA A8"/>
+  <a u="E2F8" b="FA A9"/>
+  <a u="E2F9" b="FA AA"/>
+  <a u="E2FA" b="FA AB"/>
+  <a u="E2FB" b="FA AC"/>
+  <a u="E2FC" b="FA AD"/>
+  <a u="E2FD" b="FA AE"/>
+  <a u="E2FE" b="FA AF"/>
+  <a u="E2FF" b="FA B0"/>
+  <a u="E300" b="FA B1"/>
+  <a u="E301" b="FA B2"/>
+  <a u="E302" b="FA B3"/>
+  <a u="E303" b="FA B4"/>
+  <a u="E304" b="FA B5"/>
+  <a u="E305" b="FA B6"/>
+  <a u="E306" b="FA B7"/>
+  <a u="E307" b="FA B8"/>
+  <a u="E308" b="FA B9"/>
+  <a u="E309" b="FA BA"/>
+  <a u="E30A" b="FA BB"/>
+  <a u="E30B" b="FA BC"/>
+  <a u="E30C" b="FA BD"/>
+  <a u="E30D" b="FA BE"/>
+  <a u="E30E" b="FA BF"/>
+  <a u="E30F" b="FA C0"/>
+  <a u="E310" b="FA C1"/>
+  <a u="E311" b="FA C2"/>
+  <a u="E312" b="FA C3"/>
+  <a u="E313" b="FA C4"/>
+  <a u="E314" b="FA C5"/>
+  <a u="E315" b="FA C6"/>
+  <a u="E316" b="FA C7"/>
+  <a u="E317" b="FA C8"/>
+  <a u="E318" b="FA C9"/>
+  <a u="E319" b="FA CA"/>
+  <a u="E31A" b="FA CB"/>
+  <a u="E31B" b="FA CC"/>
+  <a u="E31C" b="FA CD"/>
+  <a u="E31D" b="FA CE"/>
+  <a u="E31E" b="FA CF"/>
+  <a u="E31F" b="FA D0"/>
+  <a u="E320" b="FA D1"/>
+  <a u="E321" b="FA D2"/>
+  <a u="E322" b="FA D3"/>
+  <a u="E323" b="FA D4"/>
+  <a u="E324" b="FA D5"/>
+  <a u="E325" b="FA D6"/>
+  <a u="E326" b="FA D7"/>
+  <a u="E327" b="FA D8"/>
+  <a u="E328" b="FA D9"/>
+  <a u="E329" b="FA DA"/>
+  <a u="E32A" b="FA DB"/>
+  <a u="E32B" b="FA DC"/>
+  <a u="E32C" b="FA DD"/>
+  <a u="E32D" b="FA DE"/>
+  <a u="E32E" b="FA DF"/>
+  <a u="E32F" b="FA E0"/>
+  <a u="E330" b="FA E1"/>
+  <a u="E331" b="FA E2"/>
+  <a u="E332" b="FA E3"/>
+  <a u="E333" b="FA E4"/>
+  <a u="E334" b="FA E5"/>
+  <a u="E335" b="FA E6"/>
+  <a u="E336" b="FA E7"/>
+  <a u="E337" b="FA E8"/>
+  <a u="E338" b="FA E9"/>
+  <a u="E339" b="FA EA"/>
+  <a u="E33A" b="FA EB"/>
+  <a u="E33B" b="FA EC"/>
+  <a u="E33C" b="FA ED"/>
+  <a u="E33D" b="FA EE"/>
+  <a u="E33E" b="FA EF"/>
+  <a u="E33F" b="FA F0"/>
+  <a u="E340" b="FA F1"/>
+  <a u="E341" b="FA F2"/>
+  <a u="E342" b="FA F3"/>
+  <a u="E343" b="FA F4"/>
+  <a u="E344" b="FA F5"/>
+  <a u="E345" b="FA F6"/>
+  <a u="E346" b="FA F7"/>
+  <a u="E347" b="FA F8"/>
+  <a u="E348" b="FA F9"/>
+  <a u="E349" b="FA FA"/>
+  <a u="E34A" b="FA FB"/>
+  <a u="E34B" b="FA FC"/>
+  <a u="E34C" b="FA FD"/>
+  <a u="E34D" b="FA FE"/>
+  <a u="E34E" b="FB A1"/>
+  <a u="E34F" b="FB A2"/>
+  <a u="E350" b="FB A3"/>
+  <a u="E351" b="FB A4"/>
+  <a u="E352" b="FB A5"/>
+  <a u="E353" b="FB A6"/>
+  <a u="E354" b="FB A7"/>
+  <a u="E355" b="FB A8"/>
+  <a u="E356" b="FB A9"/>
+  <a u="E357" b="FB AA"/>
+  <a u="E358" b="FB AB"/>
+  <a u="E359" b="FB AC"/>
+  <a u="E35A" b="FB AD"/>
+  <a u="E35B" b="FB AE"/>
+  <a u="E35C" b="FB AF"/>
+  <a u="E35D" b="FB B0"/>
+  <a u="E35E" b="FB B1"/>
+  <a u="E35F" b="FB B2"/>
+  <a u="E360" b="FB B3"/>
+  <a u="E361" b="FB B4"/>
+  <a u="E362" b="FB B5"/>
+  <a u="E363" b="FB B6"/>
+  <a u="E364" b="FB B7"/>
+  <a u="E365" b="FB B8"/>
+  <a u="E366" b="FB B9"/>
+  <a u="E367" b="FB BA"/>
+  <a u="E368" b="FB BB"/>
+  <a u="E369" b="FB BC"/>
+  <a u="E36A" b="FB BD"/>
+  <a u="E36B" b="FB BE"/>
+  <a u="E36C" b="FB BF"/>
+  <a u="E36D" b="FB C0"/>
+  <a u="E36E" b="FB C1"/>
+  <a u="E36F" b="FB C2"/>
+  <a u="E370" b="FB C3"/>
+  <a u="E371" b="FB C4"/>
+  <a u="E372" b="FB C5"/>
+  <a u="E373" b="FB C6"/>
+  <a u="E374" b="FB C7"/>
+  <a u="E375" b="FB C8"/>
+  <a u="E376" b="FB C9"/>
+  <a u="E377" b="FB CA"/>
+  <a u="E378" b="FB CB"/>
+  <a u="E379" b="FB CC"/>
+  <a u="E37A" b="FB CD"/>
+  <a u="E37B" b="FB CE"/>
+  <a u="E37C" b="FB CF"/>
+  <a u="E37D" b="FB D0"/>
+  <a u="E37E" b="FB D1"/>
+  <a u="E37F" b="FB D2"/>
+  <a u="E380" b="FB D3"/>
+  <a u="E381" b="FB D4"/>
+  <a u="E382" b="FB D5"/>
+  <a u="E383" b="FB D6"/>
+  <a u="E384" b="FB D7"/>
+  <a u="E385" b="FB D8"/>
+  <a u="E386" b="FB D9"/>
+  <a u="E387" b="FB DA"/>
+  <a u="E388" b="FB DB"/>
+  <a u="E389" b="FB DC"/>
+  <a u="E38A" b="FB DD"/>
+  <a u="E38B" b="FB DE"/>
+  <a u="E38C" b="FB DF"/>
+  <a u="E38D" b="FB E0"/>
+  <a u="E38E" b="FB E1"/>
+  <a u="E38F" b="FB E2"/>
+  <a u="E390" b="FB E3"/>
+  <a u="E391" b="FB E4"/>
+  <a u="E392" b="FB E5"/>
+  <a u="E393" b="FB E6"/>
+  <a u="E394" b="FB E7"/>
+  <a u="E395" b="FB E8"/>
+  <a u="E396" b="FB E9"/>
+  <a u="E397" b="FB EA"/>
+  <a u="E398" b="FB EB"/>
+  <a u="E399" b="FB EC"/>
+  <a u="E39A" b="FB ED"/>
+  <a u="E39B" b="FB EE"/>
+  <a u="E39C" b="FB EF"/>
+  <a u="E39D" b="FB F0"/>
+  <a u="E39E" b="FB F1"/>
+  <a u="E39F" b="FB F2"/>
+  <a u="E3A0" b="FB F3"/>
+  <a u="E3A1" b="FB F4"/>
+  <a u="E3A2" b="FB F5"/>
+  <a u="E3A3" b="FB F6"/>
+  <a u="E3A4" b="FB F7"/>
+  <a u="E3A5" b="FB F8"/>
+  <a u="E3A6" b="FB F9"/>
+  <a u="E3A7" b="FB FA"/>
+  <a u="E3A8" b="FB FB"/>
+  <a u="E3A9" b="FB FC"/>
+  <a u="E3AA" b="FB FD"/>
+  <a u="E3AB" b="FB FE"/>
+  <a u="E3AC" b="FC A1"/>
+  <a u="E3AD" b="FC A2"/>
+  <a u="E3AE" b="FC A3"/>
+  <a u="E3AF" b="FC A4"/>
+  <a u="E3B0" b="FC A5"/>
+  <a u="E3B1" b="FC A6"/>
+  <a u="E3B2" b="FC A7"/>
+  <a u="E3B3" b="FC A8"/>
+  <a u="E3B4" b="FC A9"/>
+  <a u="E3B5" b="FC AA"/>
+  <a u="E3B6" b="FC AB"/>
+  <a u="E3B7" b="FC AC"/>
+  <a u="E3B8" b="FC AD"/>
+  <a u="E3B9" b="FC AE"/>
+  <a u="E3BA" b="FC AF"/>
+  <a u="E3BB" b="FC B0"/>
+  <a u="E3BC" b="FC B1"/>
+  <a u="E3BD" b="FC B2"/>
+  <a u="E3BE" b="FC B3"/>
+  <a u="E3BF" b="FC B4"/>
+  <a u="E3C0" b="FC B5"/>
+  <a u="E3C1" b="FC B6"/>
+  <a u="E3C2" b="FC B7"/>
+  <a u="E3C3" b="FC B8"/>
+  <a u="E3C4" b="FC B9"/>
+  <a u="E3C5" b="FC BA"/>
+  <a u="E3C6" b="FC BB"/>
+  <a u="E3C7" b="FC BC"/>
+  <a u="E3C8" b="FC BD"/>
+  <a u="E3C9" b="FC BE"/>
+  <a u="E3CA" b="FC BF"/>
+  <a u="E3CB" b="FC C0"/>
+  <a u="E3CC" b="FC C1"/>
+  <a u="E3CD" b="FC C2"/>
+  <a u="E3CE" b="FC C3"/>
+  <a u="E3CF" b="FC C4"/>
+  <a u="E3D0" b="FC C5"/>
+  <a u="E3D1" b="FC C6"/>
+  <a u="E3D2" b="FC C7"/>
+  <a u="E3D3" b="FC C8"/>
+  <a u="E3D4" b="FC C9"/>
+  <a u="E3D5" b="FC CA"/>
+  <a u="E3D6" b="FC CB"/>
+  <a u="E3D7" b="FC CC"/>
+  <a u="E3D8" b="FC CD"/>
+  <a u="E3D9" b="FC CE"/>
+  <a u="E3DA" b="FC CF"/>
+  <a u="E3DB" b="FC D0"/>
+  <a u="E3DC" b="FC D1"/>
+  <a u="E3DD" b="FC D2"/>
+  <a u="E3DE" b="FC D3"/>
+  <a u="E3DF" b="FC D4"/>
+  <a u="E3E0" b="FC D5"/>
+  <a u="E3E1" b="FC D6"/>
+  <a u="E3E2" b="FC D7"/>
+  <a u="E3E3" b="FC D8"/>
+  <a u="E3E4" b="FC D9"/>
+  <a u="E3E5" b="FC DA"/>
+  <a u="E3E6" b="FC DB"/>
+  <a u="E3E7" b="FC DC"/>
+  <a u="E3E8" b="FC DD"/>
+  <a u="E3E9" b="FC DE"/>
+  <a u="E3EA" b="FC DF"/>
+  <a u="E3EB" b="FC E0"/>
+  <a u="E3EC" b="FC E1"/>
+  <a u="E3ED" b="FC E2"/>
+  <a u="E3EE" b="FC E3"/>
+  <a u="E3EF" b="FC E4"/>
+  <a u="E3F0" b="FC E5"/>
+  <a u="E3F1" b="FC E6"/>
+  <a u="E3F2" b="FC E7"/>
+  <a u="E3F3" b="FC E8"/>
+  <a u="E3F4" b="FC E9"/>
+  <a u="E3F5" b="FC EA"/>
+  <a u="E3F6" b="FC EB"/>
+  <a u="E3F7" b="FC EC"/>
+  <a u="E3F8" b="FC ED"/>
+  <a u="E3F9" b="FC EE"/>
+  <a u="E3FA" b="FC EF"/>
+  <a u="E3FB" b="FC F0"/>
+  <a u="E3FC" b="FC F1"/>
+  <a u="E3FD" b="FC F2"/>
+  <a u="E3FE" b="FC F3"/>
+  <a u="E3FF" b="FC F4"/>
+  <a u="E400" b="FC F5"/>
+  <a u="E401" b="FC F6"/>
+  <a u="E402" b="FC F7"/>
+  <a u="E403" b="FC F8"/>
+  <a u="E404" b="FC F9"/>
+  <a u="E405" b="FC FA"/>
+  <a u="E406" b="FC FB"/>
+  <a u="E407" b="FC FC"/>
+  <a u="E408" b="FC FD"/>
+  <a u="E409" b="FC FE"/>
+  <a u="E40A" b="FD A1"/>
+  <a u="E40B" b="FD A2"/>
+  <a u="E40C" b="FD A3"/>
+  <a u="E40D" b="FD A4"/>
+  <a u="E40E" b="FD A5"/>
+  <a u="E40F" b="FD A6"/>
+  <a u="E410" b="FD A7"/>
+  <a u="E411" b="FD A8"/>
+  <a u="E412" b="FD A9"/>
+  <a u="E413" b="FD AA"/>
+  <a u="E414" b="FD AB"/>
+  <a u="E415" b="FD AC"/>
+  <a u="E416" b="FD AD"/>
+  <a u="E417" b="FD AE"/>
+  <a u="E418" b="FD AF"/>
+  <a u="E419" b="FD B0"/>
+  <a u="E41A" b="FD B1"/>
+  <a u="E41B" b="FD B2"/>
+  <a u="E41C" b="FD B3"/>
+  <a u="E41D" b="FD B4"/>
+  <a u="E41E" b="FD B5"/>
+  <a u="E41F" b="FD B6"/>
+  <a u="E420" b="FD B7"/>
+  <a u="E421" b="FD B8"/>
+  <a u="E422" b="FD B9"/>
+  <a u="E423" b="FD BA"/>
+  <a u="E424" b="FD BB"/>
+  <a u="E425" b="FD BC"/>
+  <a u="E426" b="FD BD"/>
+  <a u="E427" b="FD BE"/>
+  <a u="E428" b="FD BF"/>
+  <a u="E429" b="FD C0"/>
+  <a u="E42A" b="FD C1"/>
+  <a u="E42B" b="FD C2"/>
+  <a u="E42C" b="FD C3"/>
+  <a u="E42D" b="FD C4"/>
+  <a u="E42E" b="FD C5"/>
+  <a u="E42F" b="FD C6"/>
+  <a u="E430" b="FD C7"/>
+  <a u="E431" b="FD C8"/>
+  <a u="E432" b="FD C9"/>
+  <a u="E433" b="FD CA"/>
+  <a u="E434" b="FD CB"/>
+  <a u="E435" b="FD CC"/>
+  <a u="E436" b="FD CD"/>
+  <a u="E437" b="FD CE"/>
+  <a u="E438" b="FD CF"/>
+  <a u="E439" b="FD D0"/>
+  <a u="E43A" b="FD D1"/>
+  <a u="E43B" b="FD D2"/>
+  <a u="E43C" b="FD D3"/>
+  <a u="E43D" b="FD D4"/>
+  <a u="E43E" b="FD D5"/>
+  <a u="E43F" b="FD D6"/>
+  <a u="E440" b="FD D7"/>
+  <a u="E441" b="FD D8"/>
+  <a u="E442" b="FD D9"/>
+  <a u="E443" b="FD DA"/>
+  <a u="E444" b="FD DB"/>
+  <a u="E445" b="FD DC"/>
+  <a u="E446" b="FD DD"/>
+  <a u="E447" b="FD DE"/>
+  <a u="E448" b="FD DF"/>
+  <a u="E449" b="FD E0"/>
+  <a u="E44A" b="FD E1"/>
+  <a u="E44B" b="FD E2"/>
+  <a u="E44C" b="FD E3"/>
+  <a u="E44D" b="FD E4"/>
+  <a u="E44E" b="FD E5"/>
+  <a u="E44F" b="FD E6"/>
+  <a u="E450" b="FD E7"/>
+  <a u="E451" b="FD E8"/>
+  <a u="E452" b="FD E9"/>
+  <a u="E453" b="FD EA"/>
+  <a u="E454" b="FD EB"/>
+  <a u="E455" b="FD EC"/>
+  <a u="E456" b="FD ED"/>
+  <a u="E457" b="FD EE"/>
+  <a u="E458" b="FD EF"/>
+  <a u="E459" b="FD F0"/>
+  <a u="E45A" b="FD F1"/>
+  <a u="E45B" b="FD F2"/>
+  <a u="E45C" b="FD F3"/>
+  <a u="E45D" b="FD F4"/>
+  <a u="E45E" b="FD F5"/>
+  <a u="E45F" b="FD F6"/>
+  <a u="E460" b="FD F7"/>
+  <a u="E461" b="FD F8"/>
+  <a u="E462" b="FD F9"/>
+  <a u="E463" b="FD FA"/>
+  <a u="E464" b="FD FB"/>
+  <a u="E465" b="FD FC"/>
+  <a u="E466" b="FD FD"/>
+  <a u="E467" b="FD FE"/>
+  <a u="E468" b="FE A1"/>
+  <a u="E469" b="FE A2"/>
+  <a u="E46A" b="FE A3"/>
+  <a u="E46B" b="FE A4"/>
+  <a u="E46C" b="FE A5"/>
+  <a u="E46D" b="FE A6"/>
+  <a u="E46E" b="FE A7"/>
+  <a u="E46F" b="FE A8"/>
+  <a u="E470" b="FE A9"/>
+  <a u="E471" b="FE AA"/>
+  <a u="E472" b="FE AB"/>
+  <a u="E473" b="FE AC"/>
+  <a u="E474" b="FE AD"/>
+  <a u="E475" b="FE AE"/>
+  <a u="E476" b="FE AF"/>
+  <a u="E477" b="FE B0"/>
+  <a u="E478" b="FE B1"/>
+  <a u="E479" b="FE B2"/>
+  <a u="E47A" b="FE B3"/>
+  <a u="E47B" b="FE B4"/>
+  <a u="E47C" b="FE B5"/>
+  <a u="E47D" b="FE B6"/>
+  <a u="E47E" b="FE B7"/>
+  <a u="E47F" b="FE B8"/>
+  <a u="E480" b="FE B9"/>
+  <a u="E481" b="FE BA"/>
+  <a u="E482" b="FE BB"/>
+  <a u="E483" b="FE BC"/>
+  <a u="E484" b="FE BD"/>
+  <a u="E485" b="FE BE"/>
+  <a u="E486" b="FE BF"/>
+  <a u="E487" b="FE C0"/>
+  <a u="E488" b="FE C1"/>
+  <a u="E489" b="FE C2"/>
+  <a u="E48A" b="FE C3"/>
+  <a u="E48B" b="FE C4"/>
+  <a u="E48C" b="FE C5"/>
+  <a u="E48D" b="FE C6"/>
+  <a u="E48E" b="FE C7"/>
+  <a u="E48F" b="FE C8"/>
+  <a u="E490" b="FE C9"/>
+  <a u="E491" b="FE CA"/>
+  <a u="E492" b="FE CB"/>
+  <a u="E493" b="FE CC"/>
+  <a u="E494" b="FE CD"/>
+  <a u="E495" b="FE CE"/>
+  <a u="E496" b="FE CF"/>
+  <a u="E497" b="FE D0"/>
+  <a u="E498" b="FE D1"/>
+  <a u="E499" b="FE D2"/>
+  <a u="E49A" b="FE D3"/>
+  <a u="E49B" b="FE D4"/>
+  <a u="E49C" b="FE D5"/>
+  <a u="E49D" b="FE D6"/>
+  <a u="E49E" b="FE D7"/>
+  <a u="E49F" b="FE D8"/>
+  <a u="E4A0" b="FE D9"/>
+  <a u="E4A1" b="FE DA"/>
+  <a u="E4A2" b="FE DB"/>
+  <a u="E4A3" b="FE DC"/>
+  <a u="E4A4" b="FE DD"/>
+  <a u="E4A5" b="FE DE"/>
+  <a u="E4A6" b="FE DF"/>
+  <a u="E4A7" b="FE E0"/>
+  <a u="E4A8" b="FE E1"/>
+  <a u="E4A9" b="FE E2"/>
+  <a u="E4AA" b="FE E3"/>
+  <a u="E4AB" b="FE E4"/>
+  <a u="E4AC" b="FE E5"/>
+  <a u="E4AD" b="FE E6"/>
+  <a u="E4AE" b="FE E7"/>
+  <a u="E4AF" b="FE E8"/>
+  <a u="E4B0" b="FE E9"/>
+  <a u="E4B1" b="FE EA"/>
+  <a u="E4B2" b="FE EB"/>
+  <a u="E4B3" b="FE EC"/>
+  <a u="E4B4" b="FE ED"/>
+  <a u="E4B5" b="FE EE"/>
+  <a u="E4B6" b="FE EF"/>
+  <a u="E4B7" b="FE F0"/>
+  <a u="E4B8" b="FE F1"/>
+  <a u="E4B9" b="FE F2"/>
+  <a u="E4BA" b="FE F3"/>
+  <a u="E4BB" b="FE F4"/>
+  <a u="E4BC" b="FE F5"/>
+  <a u="E4BD" b="FE F6"/>
+  <a u="E4BE" b="FE F7"/>
+  <a u="E4BF" b="FE F8"/>
+  <a u="E4C0" b="FE F9"/>
+  <a u="E4C1" b="FE FA"/>
+  <a u="E4C2" b="FE FB"/>
+  <a u="E4C3" b="FE FC"/>
+  <a u="E4C4" b="FE FD"/>
+  <a u="E4C5" b="FE FE"/>
+  <a u="E4C6" b="A1 40"/>
+  <a u="E4C7" b="A1 41"/>
+  <a u="E4C8" b="A1 42"/>
+  <a u="E4C9" b="A1 43"/>
+  <a u="E4CA" b="A1 44"/>
+  <a u="E4CB" b="A1 45"/>
+  <a u="E4CC" b="A1 46"/>
+  <a u="E4CD" b="A1 47"/>
+  <a u="E4CE" b="A1 48"/>
+  <a u="E4CF" b="A1 49"/>
+  <a u="E4D0" b="A1 4A"/>
+  <a u="E4D1" b="A1 4B"/>
+  <a u="E4D2" b="A1 4C"/>
+  <a u="E4D3" b="A1 4D"/>
+  <a u="E4D4" b="A1 4E"/>
+  <a u="E4D5" b="A1 4F"/>
+  <a u="E4D6" b="A1 50"/>
+  <a u="E4D7" b="A1 51"/>
+  <a u="E4D8" b="A1 52"/>
+  <a u="E4D9" b="A1 53"/>
+  <a u="E4DA" b="A1 54"/>
+  <a u="E4DB" b="A1 55"/>
+  <a u="E4DC" b="A1 56"/>
+  <a u="E4DD" b="A1 57"/>
+  <a u="E4DE" b="A1 58"/>
+  <a u="E4DF" b="A1 59"/>
+  <a u="E4E0" b="A1 5A"/>
+  <a u="E4E1" b="A1 5B"/>
+  <a u="E4E2" b="A1 5C"/>
+  <a u="E4E3" b="A1 5D"/>
+  <a u="E4E4" b="A1 5E"/>
+  <a u="E4E5" b="A1 5F"/>
+  <a u="E4E6" b="A1 60"/>
+  <a u="E4E7" b="A1 61"/>
+  <a u="E4E8" b="A1 62"/>
+  <a u="E4E9" b="A1 63"/>
+  <a u="E4EA" b="A1 64"/>
+  <a u="E4EB" b="A1 65"/>
+  <a u="E4EC" b="A1 66"/>
+  <a u="E4ED" b="A1 67"/>
+  <a u="E4EE" b="A1 68"/>
+  <a u="E4EF" b="A1 69"/>
+  <a u="E4F0" b="A1 6A"/>
+  <a u="E4F1" b="A1 6B"/>
+  <a u="E4F2" b="A1 6C"/>
+  <a u="E4F3" b="A1 6D"/>
+  <a u="E4F4" b="A1 6E"/>
+  <a u="E4F5" b="A1 6F"/>
+  <a u="E4F6" b="A1 70"/>
+  <a u="E4F7" b="A1 71"/>
+  <a u="E4F8" b="A1 72"/>
+  <a u="E4F9" b="A1 73"/>
+  <a u="E4FA" b="A1 74"/>
+  <a u="E4FB" b="A1 75"/>
+  <a u="E4FC" b="A1 76"/>
+  <a u="E4FD" b="A1 77"/>
+  <a u="E4FE" b="A1 78"/>
+  <a u="E4FF" b="A1 79"/>
+  <a u="E500" b="A1 7A"/>
+  <a u="E501" b="A1 7B"/>
+  <a u="E502" b="A1 7C"/>
+  <a u="E503" b="A1 7D"/>
+  <a u="E504" b="A1 7E"/>
+  <a u="E505" b="A1 80"/>
+  <a u="E506" b="A1 81"/>
+  <a u="E507" b="A1 82"/>
+  <a u="E508" b="A1 83"/>
+  <a u="E509" b="A1 84"/>
+  <a u="E50A" b="A1 85"/>
+  <a u="E50B" b="A1 86"/>
+  <a u="E50C" b="A1 87"/>
+  <a u="E50D" b="A1 88"/>
+  <a u="E50E" b="A1 89"/>
+  <a u="E50F" b="A1 8A"/>
+  <a u="E510" b="A1 8B"/>
+  <a u="E511" b="A1 8C"/>
+  <a u="E512" b="A1 8D"/>
+  <a u="E513" b="A1 8E"/>
+  <a u="E514" b="A1 8F"/>
+  <a u="E515" b="A1 90"/>
+  <a u="E516" b="A1 91"/>
+  <a u="E517" b="A1 92"/>
+  <a u="E518" b="A1 93"/>
+  <a u="E519" b="A1 94"/>
+  <a u="E51A" b="A1 95"/>
+  <a u="E51B" b="A1 96"/>
+  <a u="E51C" b="A1 97"/>
+  <a u="E51D" b="A1 98"/>
+  <a u="E51E" b="A1 99"/>
+  <a u="E51F" b="A1 9A"/>
+  <a u="E520" b="A1 9B"/>
+  <a u="E521" b="A1 9C"/>
+  <a u="E522" b="A1 9D"/>
+  <a u="E523" b="A1 9E"/>
+  <a u="E524" b="A1 9F"/>
+  <a u="E525" b="A1 A0"/>
+  <a u="E526" b="A2 40"/>
+  <a u="E527" b="A2 41"/>
+  <a u="E528" b="A2 42"/>
+  <a u="E529" b="A2 43"/>
+  <a u="E52A" b="A2 44"/>
+  <a u="E52B" b="A2 45"/>
+  <a u="E52C" b="A2 46"/>
+  <a u="E52D" b="A2 47"/>
+  <a u="E52E" b="A2 48"/>
+  <a u="E52F" b="A2 49"/>
+  <a u="E530" b="A2 4A"/>
+  <a u="E531" b="A2 4B"/>
+  <a u="E532" b="A2 4C"/>
+  <a u="E533" b="A2 4D"/>
+  <a u="E534" b="A2 4E"/>
+  <a u="E535" b="A2 4F"/>
+  <a u="E536" b="A2 50"/>
+  <a u="E537" b="A2 51"/>
+  <a u="E538" b="A2 52"/>
+  <a u="E539" b="A2 53"/>
+  <a u="E53A" b="A2 54"/>
+  <a u="E53B" b="A2 55"/>
+  <a u="E53C" b="A2 56"/>
+  <a u="E53D" b="A2 57"/>
+  <a u="E53E" b="A2 58"/>
+  <a u="E53F" b="A2 59"/>
+  <a u="E540" b="A2 5A"/>
+  <a u="E541" b="A2 5B"/>
+  <a u="E542" b="A2 5C"/>
+  <a u="E543" b="A2 5D"/>
+  <a u="E544" b="A2 5E"/>
+  <a u="E545" b="A2 5F"/>
+  <a u="E546" b="A2 60"/>
+  <a u="E547" b="A2 61"/>
+  <a u="E548" b="A2 62"/>
+  <a u="E549" b="A2 63"/>
+  <a u="E54A" b="A2 64"/>
+  <a u="E54B" b="A2 65"/>
+  <a u="E54C" b="A2 66"/>
+  <a u="E54D" b="A2 67"/>
+  <a u="E54E" b="A2 68"/>
+  <a u="E54F" b="A2 69"/>
+  <a u="E550" b="A2 6A"/>
+  <a u="E551" b="A2 6B"/>
+  <a u="E552" b="A2 6C"/>
+  <a u="E553" b="A2 6D"/>
+  <a u="E554" b="A2 6E"/>
+  <a u="E555" b="A2 6F"/>
+  <a u="E556" b="A2 70"/>
+  <a u="E557" b="A2 71"/>
+  <a u="E558" b="A2 72"/>
+  <a u="E559" b="A2 73"/>
+  <a u="E55A" b="A2 74"/>
+  <a u="E55B" b="A2 75"/>
+  <a u="E55C" b="A2 76"/>
+  <a u="E55D" b="A2 77"/>
+  <a u="E55E" b="A2 78"/>
+  <a u="E55F" b="A2 79"/>
+  <a u="E560" b="A2 7A"/>
+  <a u="E561" b="A2 7B"/>
+  <a u="E562" b="A2 7C"/>
+  <a u="E563" b="A2 7D"/>
+  <a u="E564" b="A2 7E"/>
+  <a u="E565" b="A2 80"/>
+  <a u="E566" b="A2 81"/>
+  <a u="E567" b="A2 82"/>
+  <a u="E568" b="A2 83"/>
+  <a u="E569" b="A2 84"/>
+  <a u="E56A" b="A2 85"/>
+  <a u="E56B" b="A2 86"/>
+  <a u="E56C" b="A2 87"/>
+  <a u="E56D" b="A2 88"/>
+  <a u="E56E" b="A2 89"/>
+  <a u="E56F" b="A2 8A"/>
+  <a u="E570" b="A2 8B"/>
+  <a u="E571" b="A2 8C"/>
+  <a u="E572" b="A2 8D"/>
+  <a u="E573" b="A2 8E"/>
+  <a u="E574" b="A2 8F"/>
+  <a u="E575" b="A2 90"/>
+  <a u="E576" b="A2 91"/>
+  <a u="E577" b="A2 92"/>
+  <a u="E578" b="A2 93"/>
+  <a u="E579" b="A2 94"/>
+  <a u="E57A" b="A2 95"/>
+  <a u="E57B" b="A2 96"/>
+  <a u="E57C" b="A2 97"/>
+  <a u="E57D" b="A2 98"/>
+  <a u="E57E" b="A2 99"/>
+  <a u="E57F" b="A2 9A"/>
+  <a u="E580" b="A2 9B"/>
+  <a u="E581" b="A2 9C"/>
+  <a u="E582" b="A2 9D"/>
+  <a u="E583" b="A2 9E"/>
+  <a u="E584" b="A2 9F"/>
+  <a u="E585" b="A2 A0"/>
+  <a u="E586" b="A3 40"/>
+  <a u="E587" b="A3 41"/>
+  <a u="E588" b="A3 42"/>
+  <a u="E589" b="A3 43"/>
+  <a u="E58A" b="A3 44"/>
+  <a u="E58B" b="A3 45"/>
+  <a u="E58C" b="A3 46"/>
+  <a u="E58D" b="A3 47"/>
+  <a u="E58E" b="A3 48"/>
+  <a u="E58F" b="A3 49"/>
+  <a u="E590" b="A3 4A"/>
+  <a u="E591" b="A3 4B"/>
+  <a u="E592" b="A3 4C"/>
+  <a u="E593" b="A3 4D"/>
+  <a u="E594" b="A3 4E"/>
+  <a u="E595" b="A3 4F"/>
+  <a u="E596" b="A3 50"/>
+  <a u="E597" b="A3 51"/>
+  <a u="E598" b="A3 52"/>
+  <a u="E599" b="A3 53"/>
+  <a u="E59A" b="A3 54"/>
+  <a u="E59B" b="A3 55"/>
+  <a u="E59C" b="A3 56"/>
+  <a u="E59D" b="A3 57"/>
+  <a u="E59E" b="A3 58"/>
+  <a u="E59F" b="A3 59"/>
+  <a u="E5A0" b="A3 5A"/>
+  <a u="E5A1" b="A3 5B"/>
+  <a u="E5A2" b="A3 5C"/>
+  <a u="E5A3" b="A3 5D"/>
+  <a u="E5A4" b="A3 5E"/>
+  <a u="E5A5" b="A3 5F"/>
+  <a u="E5A6" b="A3 60"/>
+  <a u="E5A7" b="A3 61"/>
+  <a u="E5A8" b="A3 62"/>
+  <a u="E5A9" b="A3 63"/>
+  <a u="E5AA" b="A3 64"/>
+  <a u="E5AB" b="A3 65"/>
+  <a u="E5AC" b="A3 66"/>
+  <a u="E5AD" b="A3 67"/>
+  <a u="E5AE" b="A3 68"/>
+  <a u="E5AF" b="A3 69"/>
+  <a u="E5B0" b="A3 6A"/>
+  <a u="E5B1" b="A3 6B"/>
+  <a u="E5B2" b="A3 6C"/>
+  <a u="E5B3" b="A3 6D"/>
+  <a u="E5B4" b="A3 6E"/>
+  <a u="E5B5" b="A3 6F"/>
+  <a u="E5B6" b="A3 70"/>
+  <a u="E5B7" b="A3 71"/>
+  <a u="E5B8" b="A3 72"/>
+  <a u="E5B9" b="A3 73"/>
+  <a u="E5BA" b="A3 74"/>
+  <a u="E5BB" b="A3 75"/>
+  <a u="E5BC" b="A3 76"/>
+  <a u="E5BD" b="A3 77"/>
+  <a u="E5BE" b="A3 78"/>
+  <a u="E5BF" b="A3 79"/>
+  <a u="E5C0" b="A3 7A"/>
+  <a u="E5C1" b="A3 7B"/>
+  <a u="E5C2" b="A3 7C"/>
+  <a u="E5C3" b="A3 7D"/>
+  <a u="E5C4" b="A3 7E"/>
+  <a u="E5C5" b="A3 80"/>
+  <a u="E5C6" b="A3 81"/>
+  <a u="E5C7" b="A3 82"/>
+  <a u="E5C8" b="A3 83"/>
+  <a u="E5C9" b="A3 84"/>
+  <a u="E5CA" b="A3 85"/>
+  <a u="E5CB" b="A3 86"/>
+  <a u="E5CC" b="A3 87"/>
+  <a u="E5CD" b="A3 88"/>
+  <a u="E5CE" b="A3 89"/>
+  <a u="E5CF" b="A3 8A"/>
+  <a u="E5D0" b="A3 8B"/>
+  <a u="E5D1" b="A3 8C"/>
+  <a u="E5D2" b="A3 8D"/>
+  <a u="E5D3" b="A3 8E"/>
+  <a u="E5D4" b="A3 8F"/>
+  <a u="E5D5" b="A3 90"/>
+  <a u="E5D6" b="A3 91"/>
+  <a u="E5D7" b="A3 92"/>
+  <a u="E5D8" b="A3 93"/>
+  <a u="E5D9" b="A3 94"/>
+  <a u="E5DA" b="A3 95"/>
+  <a u="E5DB" b="A3 96"/>
+  <a u="E5DC" b="A3 97"/>
+  <a u="E5DD" b="A3 98"/>
+  <a u="E5DE" b="A3 99"/>
+  <a u="E5DF" b="A3 9A"/>
+  <a u="E5E0" b="A3 9B"/>
+  <a u="E5E1" b="A3 9C"/>
+  <a u="E5E2" b="A3 9D"/>
+  <a u="E5E3" b="A3 9E"/>
+  <a u="E5E4" b="A3 9F"/>
+  <a u="E5E5" b="A3 A0"/>
+  <a u="E5E6" b="A4 40"/>
+  <a u="E5E7" b="A4 41"/>
+  <a u="E5E8" b="A4 42"/>
+  <a u="E5E9" b="A4 43"/>
+  <a u="E5EA" b="A4 44"/>
+  <a u="E5EB" b="A4 45"/>
+  <a u="E5EC" b="A4 46"/>
+  <a u="E5ED" b="A4 47"/>
+  <a u="E5EE" b="A4 48"/>
+  <a u="E5EF" b="A4 49"/>
+  <a u="E5F0" b="A4 4A"/>
+  <a u="E5F1" b="A4 4B"/>
+  <a u="E5F2" b="A4 4C"/>
+  <a u="E5F3" b="A4 4D"/>
+  <a u="E5F4" b="A4 4E"/>
+  <a u="E5F5" b="A4 4F"/>
+  <a u="E5F6" b="A4 50"/>
+  <a u="E5F7" b="A4 51"/>
+  <a u="E5F8" b="A4 52"/>
+  <a u="E5F9" b="A4 53"/>
+  <a u="E5FA" b="A4 54"/>
+  <a u="E5FB" b="A4 55"/>
+  <a u="E5FC" b="A4 56"/>
+  <a u="E5FD" b="A4 57"/>
+  <a u="E5FE" b="A4 58"/>
+  <a u="E5FF" b="A4 59"/>
+  <a u="E600" b="A4 5A"/>
+  <a u="E601" b="A4 5B"/>
+  <a u="E602" b="A4 5C"/>
+  <a u="E603" b="A4 5D"/>
+  <a u="E604" b="A4 5E"/>
+  <a u="E605" b="A4 5F"/>
+  <a u="E606" b="A4 60"/>
+  <a u="E607" b="A4 61"/>
+  <a u="E608" b="A4 62"/>
+  <a u="E609" b="A4 63"/>
+  <a u="E60A" b="A4 64"/>
+  <a u="E60B" b="A4 65"/>
+  <a u="E60C" b="A4 66"/>
+  <a u="E60D" b="A4 67"/>
+  <a u="E60E" b="A4 68"/>
+  <a u="E60F" b="A4 69"/>
+  <a u="E610" b="A4 6A"/>
+  <a u="E611" b="A4 6B"/>
+  <a u="E612" b="A4 6C"/>
+  <a u="E613" b="A4 6D"/>
+  <a u="E614" b="A4 6E"/>
+  <a u="E615" b="A4 6F"/>
+  <a u="E616" b="A4 70"/>
+  <a u="E617" b="A4 71"/>
+  <a u="E618" b="A4 72"/>
+  <a u="E619" b="A4 73"/>
+  <a u="E61A" b="A4 74"/>
+  <a u="E61B" b="A4 75"/>
+  <a u="E61C" b="A4 76"/>
+  <a u="E61D" b="A4 77"/>
+  <a u="E61E" b="A4 78"/>
+  <a u="E61F" b="A4 79"/>
+  <a u="E620" b="A4 7A"/>
+  <a u="E621" b="A4 7B"/>
+  <a u="E622" b="A4 7C"/>
+  <a u="E623" b="A4 7D"/>
+  <a u="E624" b="A4 7E"/>
+  <a u="E625" b="A4 80"/>
+  <a u="E626" b="A4 81"/>
+  <a u="E627" b="A4 82"/>
+  <a u="E628" b="A4 83"/>
+  <a u="E629" b="A4 84"/>
+  <a u="E62A" b="A4 85"/>
+  <a u="E62B" b="A4 86"/>
+  <a u="E62C" b="A4 87"/>
+  <a u="E62D" b="A4 88"/>
+  <a u="E62E" b="A4 89"/>
+  <a u="E62F" b="A4 8A"/>
+  <a u="E630" b="A4 8B"/>
+  <a u="E631" b="A4 8C"/>
+  <a u="E632" b="A4 8D"/>
+  <a u="E633" b="A4 8E"/>
+  <a u="E634" b="A4 8F"/>
+  <a u="E635" b="A4 90"/>
+  <a u="E636" b="A4 91"/>
+  <a u="E637" b="A4 92"/>
+  <a u="E638" b="A4 93"/>
+  <a u="E639" b="A4 94"/>
+  <a u="E63A" b="A4 95"/>
+  <a u="E63B" b="A4 96"/>
+  <a u="E63C" b="A4 97"/>
+  <a u="E63D" b="A4 98"/>
+  <a u="E63E" b="A4 99"/>
+  <a u="E63F" b="A4 9A"/>
+  <a u="E640" b="A4 9B"/>
+  <a u="E641" b="A4 9C"/>
+  <a u="E642" b="A4 9D"/>
+  <a u="E643" b="A4 9E"/>
+  <a u="E644" b="A4 9F"/>
+  <a u="E645" b="A4 A0"/>
+  <a u="E646" b="A5 40"/>
+  <a u="E647" b="A5 41"/>
+  <a u="E648" b="A5 42"/>
+  <a u="E649" b="A5 43"/>
+  <a u="E64A" b="A5 44"/>
+  <a u="E64B" b="A5 45"/>
+  <a u="E64C" b="A5 46"/>
+  <a u="E64D" b="A5 47"/>
+  <a u="E64E" b="A5 48"/>
+  <a u="E64F" b="A5 49"/>
+  <a u="E650" b="A5 4A"/>
+  <a u="E651" b="A5 4B"/>
+  <a u="E652" b="A5 4C"/>
+  <a u="E653" b="A5 4D"/>
+  <a u="E654" b="A5 4E"/>
+  <a u="E655" b="A5 4F"/>
+  <a u="E656" b="A5 50"/>
+  <a u="E657" b="A5 51"/>
+  <a u="E658" b="A5 52"/>
+  <a u="E659" b="A5 53"/>
+  <a u="E65A" b="A5 54"/>
+  <a u="E65B" b="A5 55"/>
+  <a u="E65C" b="A5 56"/>
+  <a u="E65D" b="A5 57"/>
+  <a u="E65E" b="A5 58"/>
+  <a u="E65F" b="A5 59"/>
+  <a u="E660" b="A5 5A"/>
+  <a u="E661" b="A5 5B"/>
+  <a u="E662" b="A5 5C"/>
+  <a u="E663" b="A5 5D"/>
+  <a u="E664" b="A5 5E"/>
+  <a u="E665" b="A5 5F"/>
+  <a u="E666" b="A5 60"/>
+  <a u="E667" b="A5 61"/>
+  <a u="E668" b="A5 62"/>
+  <a u="E669" b="A5 63"/>
+  <a u="E66A" b="A5 64"/>
+  <a u="E66B" b="A5 65"/>
+  <a u="E66C" b="A5 66"/>
+  <a u="E66D" b="A5 67"/>
+  <a u="E66E" b="A5 68"/>
+  <a u="E66F" b="A5 69"/>
+  <a u="E670" b="A5 6A"/>
+  <a u="E671" b="A5 6B"/>
+  <a u="E672" b="A5 6C"/>
+  <a u="E673" b="A5 6D"/>
+  <a u="E674" b="A5 6E"/>
+  <a u="E675" b="A5 6F"/>
+  <a u="E676" b="A5 70"/>
+  <a u="E677" b="A5 71"/>
+  <a u="E678" b="A5 72"/>
+  <a u="E679" b="A5 73"/>
+  <a u="E67A" b="A5 74"/>
+  <a u="E67B" b="A5 75"/>
+  <a u="E67C" b="A5 76"/>
+  <a u="E67D" b="A5 77"/>
+  <a u="E67E" b="A5 78"/>
+  <a u="E67F" b="A5 79"/>
+  <a u="E680" b="A5 7A"/>
+  <a u="E681" b="A5 7B"/>
+  <a u="E682" b="A5 7C"/>
+  <a u="E683" b="A5 7D"/>
+  <a u="E684" b="A5 7E"/>
+  <a u="E685" b="A5 80"/>
+  <a u="E686" b="A5 81"/>
+  <a u="E687" b="A5 82"/>
+  <a u="E688" b="A5 83"/>
+  <a u="E689" b="A5 84"/>
+  <a u="E68A" b="A5 85"/>
+  <a u="E68B" b="A5 86"/>
+  <a u="E68C" b="A5 87"/>
+  <a u="E68D" b="A5 88"/>
+  <a u="E68E" b="A5 89"/>
+  <a u="E68F" b="A5 8A"/>
+  <a u="E690" b="A5 8B"/>
+  <a u="E691" b="A5 8C"/>
+  <a u="E692" b="A5 8D"/>
+  <a u="E693" b="A5 8E"/>
+  <a u="E694" b="A5 8F"/>
+  <a u="E695" b="A5 90"/>
+  <a u="E696" b="A5 91"/>
+  <a u="E697" b="A5 92"/>
+  <a u="E698" b="A5 93"/>
+  <a u="E699" b="A5 94"/>
+  <a u="E69A" b="A5 95"/>
+  <a u="E69B" b="A5 96"/>
+  <a u="E69C" b="A5 97"/>
+  <a u="E69D" b="A5 98"/>
+  <a u="E69E" b="A5 99"/>
+  <a u="E69F" b="A5 9A"/>
+  <a u="E6A0" b="A5 9B"/>
+  <a u="E6A1" b="A5 9C"/>
+  <a u="E6A2" b="A5 9D"/>
+  <a u="E6A3" b="A5 9E"/>
+  <a u="E6A4" b="A5 9F"/>
+  <a u="E6A5" b="A5 A0"/>
+  <a u="E6A6" b="A6 40"/>
+  <a u="E6A7" b="A6 41"/>
+  <a u="E6A8" b="A6 42"/>
+  <a u="E6A9" b="A6 43"/>
+  <a u="E6AA" b="A6 44"/>
+  <a u="E6AB" b="A6 45"/>
+  <a u="E6AC" b="A6 46"/>
+  <a u="E6AD" b="A6 47"/>
+  <a u="E6AE" b="A6 48"/>
+  <a u="E6AF" b="A6 49"/>
+  <a u="E6B0" b="A6 4A"/>
+  <a u="E6B1" b="A6 4B"/>
+  <a u="E6B2" b="A6 4C"/>
+  <a u="E6B3" b="A6 4D"/>
+  <a u="E6B4" b="A6 4E"/>
+  <a u="E6B5" b="A6 4F"/>
+  <a u="E6B6" b="A6 50"/>
+  <a u="E6B7" b="A6 51"/>
+  <a u="E6B8" b="A6 52"/>
+  <a u="E6B9" b="A6 53"/>
+  <a u="E6BA" b="A6 54"/>
+  <a u="E6BB" b="A6 55"/>
+  <a u="E6BC" b="A6 56"/>
+  <a u="E6BD" b="A6 57"/>
+  <a u="E6BE" b="A6 58"/>
+  <a u="E6BF" b="A6 59"/>
+  <a u="E6C0" b="A6 5A"/>
+  <a u="E6C1" b="A6 5B"/>
+  <a u="E6C2" b="A6 5C"/>
+  <a u="E6C3" b="A6 5D"/>
+  <a u="E6C4" b="A6 5E"/>
+  <a u="E6C5" b="A6 5F"/>
+  <a u="E6C6" b="A6 60"/>
+  <a u="E6C7" b="A6 61"/>
+  <a u="E6C8" b="A6 62"/>
+  <a u="E6C9" b="A6 63"/>
+  <a u="E6CA" b="A6 64"/>
+  <a u="E6CB" b="A6 65"/>
+  <a u="E6CC" b="A6 66"/>
+  <a u="E6CD" b="A6 67"/>
+  <a u="E6CE" b="A6 68"/>
+  <a u="E6CF" b="A6 69"/>
+  <a u="E6D0" b="A6 6A"/>
+  <a u="E6D1" b="A6 6B"/>
+  <a u="E6D2" b="A6 6C"/>
+  <a u="E6D3" b="A6 6D"/>
+  <a u="E6D4" b="A6 6E"/>
+  <a u="E6D5" b="A6 6F"/>
+  <a u="E6D6" b="A6 70"/>
+  <a u="E6D7" b="A6 71"/>
+  <a u="E6D8" b="A6 72"/>
+  <a u="E6D9" b="A6 73"/>
+  <a u="E6DA" b="A6 74"/>
+  <a u="E6DB" b="A6 75"/>
+  <a u="E6DC" b="A6 76"/>
+  <a u="E6DD" b="A6 77"/>
+  <a u="E6DE" b="A6 78"/>
+  <a u="E6DF" b="A6 79"/>
+  <a u="E6E0" b="A6 7A"/>
+  <a u="E6E1" b="A6 7B"/>
+  <a u="E6E2" b="A6 7C"/>
+  <a u="E6E3" b="A6 7D"/>
+  <a u="E6E4" b="A6 7E"/>
+  <a u="E6E5" b="A6 80"/>
+  <a u="E6E6" b="A6 81"/>
+  <a u="E6E7" b="A6 82"/>
+  <a u="E6E8" b="A6 83"/>
+  <a u="E6E9" b="A6 84"/>
+  <a u="E6EA" b="A6 85"/>
+  <a u="E6EB" b="A6 86"/>
+  <a u="E6EC" b="A6 87"/>
+  <a u="E6ED" b="A6 88"/>
+  <a u="E6EE" b="A6 89"/>
+  <a u="E6EF" b="A6 8A"/>
+  <a u="E6F0" b="A6 8B"/>
+  <a u="E6F1" b="A6 8C"/>
+  <a u="E6F2" b="A6 8D"/>
+  <a u="E6F3" b="A6 8E"/>
+  <a u="E6F4" b="A6 8F"/>
+  <a u="E6F5" b="A6 90"/>
+  <a u="E6F6" b="A6 91"/>
+  <a u="E6F7" b="A6 92"/>
+  <a u="E6F8" b="A6 93"/>
+  <a u="E6F9" b="A6 94"/>
+  <a u="E6FA" b="A6 95"/>
+  <a u="E6FB" b="A6 96"/>
+  <a u="E6FC" b="A6 97"/>
+  <a u="E6FD" b="A6 98"/>
+  <a u="E6FE" b="A6 99"/>
+  <a u="E6FF" b="A6 9A"/>
+  <a u="E700" b="A6 9B"/>
+  <a u="E701" b="A6 9C"/>
+  <a u="E702" b="A6 9D"/>
+  <a u="E703" b="A6 9E"/>
+  <a u="E704" b="A6 9F"/>
+  <a u="E705" b="A6 A0"/>
+  <a u="E706" b="A7 40"/>
+  <a u="E707" b="A7 41"/>
+  <a u="E708" b="A7 42"/>
+  <a u="E709" b="A7 43"/>
+  <a u="E70A" b="A7 44"/>
+  <a u="E70B" b="A7 45"/>
+  <a u="E70C" b="A7 46"/>
+  <a u="E70D" b="A7 47"/>
+  <a u="E70E" b="A7 48"/>
+  <a u="E70F" b="A7 49"/>
+  <a u="E710" b="A7 4A"/>
+  <a u="E711" b="A7 4B"/>
+  <a u="E712" b="A7 4C"/>
+  <a u="E713" b="A7 4D"/>
+  <a u="E714" b="A7 4E"/>
+  <a u="E715" b="A7 4F"/>
+  <a u="E716" b="A7 50"/>
+  <a u="E717" b="A7 51"/>
+  <a u="E718" b="A7 52"/>
+  <a u="E719" b="A7 53"/>
+  <a u="E71A" b="A7 54"/>
+  <a u="E71B" b="A7 55"/>
+  <a u="E71C" b="A7 56"/>
+  <a u="E71D" b="A7 57"/>
+  <a u="E71E" b="A7 58"/>
+  <a u="E71F" b="A7 59"/>
+  <a u="E720" b="A7 5A"/>
+  <a u="E721" b="A7 5B"/>
+  <a u="E722" b="A7 5C"/>
+  <a u="E723" b="A7 5D"/>
+  <a u="E724" b="A7 5E"/>
+  <a u="E725" b="A7 5F"/>
+  <a u="E726" b="A7 60"/>
+  <a u="E727" b="A7 61"/>
+  <a u="E728" b="A7 62"/>
+  <a u="E729" b="A7 63"/>
+  <a u="E72A" b="A7 64"/>
+  <a u="E72B" b="A7 65"/>
+  <a u="E72C" b="A7 66"/>
+  <a u="E72D" b="A7 67"/>
+  <a u="E72E" b="A7 68"/>
+  <a u="E72F" b="A7 69"/>
+  <a u="E730" b="A7 6A"/>
+  <a u="E731" b="A7 6B"/>
+  <a u="E732" b="A7 6C"/>
+  <a u="E733" b="A7 6D"/>
+  <a u="E734" b="A7 6E"/>
+  <a u="E735" b="A7 6F"/>
+  <a u="E736" b="A7 70"/>
+  <a u="E737" b="A7 71"/>
+  <a u="E738" b="A7 72"/>
+  <a u="E739" b="A7 73"/>
+  <a u="E73A" b="A7 74"/>
+  <a u="E73B" b="A7 75"/>
+  <a u="E73C" b="A7 76"/>
+  <a u="E73D" b="A7 77"/>
+  <a u="E73E" b="A7 78"/>
+  <a u="E73F" b="A7 79"/>
+  <a u="E740" b="A7 7A"/>
+  <a u="E741" b="A7 7B"/>
+  <a u="E742" b="A7 7C"/>
+  <a u="E743" b="A7 7D"/>
+  <a u="E744" b="A7 7E"/>
+  <a u="E745" b="A7 80"/>
+  <a u="E746" b="A7 81"/>
+  <a u="E747" b="A7 82"/>
+  <a u="E748" b="A7 83"/>
+  <a u="E749" b="A7 84"/>
+  <a u="E74A" b="A7 85"/>
+  <a u="E74B" b="A7 86"/>
+  <a u="E74C" b="A7 87"/>
+  <a u="E74D" b="A7 88"/>
+  <a u="E74E" b="A7 89"/>
+  <a u="E74F" b="A7 8A"/>
+  <a u="E750" b="A7 8B"/>
+  <a u="E751" b="A7 8C"/>
+  <a u="E752" b="A7 8D"/>
+  <a u="E753" b="A7 8E"/>
+  <a u="E754" b="A7 8F"/>
+  <a u="E755" b="A7 90"/>
+  <a u="E756" b="A7 91"/>
+  <a u="E757" b="A7 92"/>
+  <a u="E758" b="A7 93"/>
+  <a u="E759" b="A7 94"/>
+  <a u="E75A" b="A7 95"/>
+  <a u="E75B" b="A7 96"/>
+  <a u="E75C" b="A7 97"/>
+  <a u="E75D" b="A7 98"/>
+  <a u="E75E" b="A7 99"/>
+  <a u="E75F" b="A7 9A"/>
+  <a u="E760" b="A7 9B"/>
+  <a u="E761" b="A7 9C"/>
+  <a u="E762" b="A7 9D"/>
+  <a u="E763" b="A7 9E"/>
+  <a u="E764" b="A7 9F"/>
+  <a u="E765" b="A7 A0"/>
+  <a u="E766" b="A2 AB"/>
+  <a u="E767" b="A2 AC"/>
+  <a u="E768" b="A2 AD"/>
+  <a u="E769" b="A2 AE"/>
+  <a u="E76A" b="A2 AF"/>
+  <a u="E76B" b="A2 B0"/>
+  <a u="E76C" b="83 36 C7 39"/>
+  <a u="E76D" b="A2 E4"/>
+  <a u="E76E" b="A2 EF"/>
+  <a u="E76F" b="A2 F0"/>
+  <a u="E770" b="A2 FD"/>
+  <a u="E771" b="A2 FE"/>
+  <a u="E772" b="A4 F4"/>
+  <a u="E773" b="A4 F5"/>
+  <a u="E774" b="A4 F6"/>
+  <a u="E775" b="A4 F7"/>
+  <a u="E776" b="A4 F8"/>
+  <a u="E777" b="A4 F9"/>
+  <a u="E778" b="A4 FA"/>
+  <a u="E779" b="A4 FB"/>
+  <a u="E77A" b="A4 FC"/>
+  <a u="E77B" b="A4 FD"/>
+  <a u="E77C" b="A4 FE"/>
+  <a u="E77D" b="A5 F7"/>
+  <a u="E77E" b="A5 F8"/>
+  <a u="E77F" b="A5 F9"/>
+  <a u="E780" b="A5 FA"/>
+  <a u="E781" b="A5 FB"/>
+  <a u="E782" b="A5 FC"/>
+  <a u="E783" b="A5 FD"/>
+  <a u="E784" b="A5 FE"/>
+  <a u="E785" b="A6 B9"/>
+  <a u="E786" b="A6 BA"/>
+  <a u="E787" b="A6 BB"/>
+  <a u="E788" b="A6 BC"/>
+  <a u="E789" b="A6 BD"/>
+  <a u="E78A" b="A6 BE"/>
+  <a u="E78B" b="A6 BF"/>
+  <a u="E78C" b="A6 C0"/>
+  <a u="E78D" b="A6 D9"/>
+  <a u="E78E" b="A6 DA"/>
+  <a u="E78F" b="A6 DB"/>
+  <a u="E790" b="A6 DC"/>
+  <a u="E791" b="A6 DD"/>
+  <a u="E792" b="A6 DE"/>
+  <a u="E793" b="A6 DF"/>
+  <a u="E794" b="A6 EC"/>
+  <a u="E795" b="A6 ED"/>
+  <a u="E796" b="A6 F3"/>
+  <a u="E797" b="A6 F6"/>
+  <a u="E798" b="A6 F7"/>
+  <a u="E799" b="A6 F8"/>
+  <a u="E79A" b="A6 F9"/>
+  <a u="E79B" b="A6 FA"/>
+  <a u="E79C" b="A6 FB"/>
+  <a u="E79D" b="A6 FC"/>
+  <a u="E79E" b="A6 FD"/>
+  <a u="E79F" b="A6 FE"/>
+  <a u="E7A0" b="A7 C2"/>
+  <a u="E7A1" b="A7 C3"/>
+  <a u="E7A2" b="A7 C4"/>
+  <a u="E7A3" b="A7 C5"/>
+  <a u="E7A4" b="A7 C6"/>
+  <a u="E7A5" b="A7 C7"/>
+  <a u="E7A6" b="A7 C8"/>
+  <a u="E7A7" b="A7 C9"/>
+  <a u="E7A8" b="A7 CA"/>
+  <a u="E7A9" b="A7 CB"/>
+  <a u="E7AA" b="A7 CC"/>
+  <a u="E7AB" b="A7 CD"/>
+  <a u="E7AC" b="A7 CE"/>
+  <a u="E7AD" b="A7 CF"/>
+  <a u="E7AE" b="A7 D0"/>
+  <a u="E7AF" b="A7 F2"/>
+  <a u="E7B0" b="A7 F3"/>
+  <a u="E7B1" b="A7 F4"/>
+  <a u="E7B2" b="A7 F5"/>
+  <a u="E7B3" b="A7 F6"/>
+  <a u="E7B4" b="A7 F7"/>
+  <a u="E7B5" b="A7 F8"/>
+  <a u="E7B6" b="A7 F9"/>
+  <a u="E7B7" b="A7 FA"/>
+  <a u="E7B8" b="A7 FB"/>
+  <a u="E7B9" b="A7 FC"/>
+  <a u="E7BA" b="A7 FD"/>
+  <a u="E7BB" b="A7 FE"/>
+  <a u="E7BC" b="A8 96"/>
+  <a u="E7BD" b="A8 97"/>
+  <a u="E7BE" b="A8 98"/>
+  <a u="E7BF" b="A8 99"/>
+  <a u="E7C0" b="A8 9A"/>
+  <a u="E7C1" b="A8 9B"/>
+  <a u="E7C2" b="A8 9C"/>
+  <a u="E7C3" b="A8 9D"/>
+  <a u="E7C4" b="A8 9E"/>
+  <a u="E7C5" b="A8 9F"/>
+  <a u="E7C6" b="A8 A0"/>
+  <a u="E7C7" b="A8 BC"/>
+  <a u="E7C8" b="83 36 C8 30"/>
+  <a u="E7C9" b="A8 C1"/>
+  <a u="E7CA" b="A8 C2"/>
+  <a u="E7CB" b="A8 C3"/>
+  <a u="E7CC" b="A8 C4"/>
+  <a u="E7CD" b="A8 EA"/>
+  <a u="E7CE" b="A8 EB"/>
+  <a u="E7CF" b="A8 EC"/>
+  <a u="E7D0" b="A8 ED"/>
+  <a u="E7D1" b="A8 EE"/>
+  <a u="E7D2" b="A8 EF"/>
+  <a u="E7D3" b="A8 F0"/>
+  <a u="E7D4" b="A8 F1"/>
+  <a u="E7D5" b="A8 F2"/>
+  <a u="E7D6" b="A8 F3"/>
+  <a u="E7D7" b="A8 F4"/>
+  <a u="E7D8" b="A8 F5"/>
+  <a u="E7D9" b="A8 F6"/>
+  <a u="E7DA" b="A8 F7"/>
+  <a u="E7DB" b="A8 F8"/>
+  <a u="E7DC" b="A8 F9"/>
+  <a u="E7DD" b="A8 FA"/>
+  <a u="E7DE" b="A8 FB"/>
+  <a u="E7DF" b="A8 FC"/>
+  <a u="E7E0" b="A8 FD"/>
+  <a u="E7E1" b="A8 FE"/>
+  <a u="E7E2" b="A9 58"/>
+  <a u="E7E3" b="A9 5B"/>
+  <a u="E7E4" b="A9 5D"/>
+  <a u="E7E5" b="A9 5E"/>
+  <a u="E7E6" b="A9 5F"/>
+  <a u="E7E7" b="83 36 C8 31"/>
+  <a u="E7E8" b="83 36 C8 32"/>
+  <a u="E7E9" b="83 36 C8 33"/>
+  <a u="E7EA" b="83 36 C8 34"/>
+  <a u="E7EB" b="83 36 C8 35"/>
+  <a u="E7EC" b="83 36 C8 36"/>
+  <a u="E7ED" b="83 36 C8 37"/>
+  <a u="E7EE" b="83 36 C8 38"/>
+  <a u="E7EF" b="83 36 C8 39"/>
+  <a u="E7F0" b="83 36 C9 30"/>
+  <a u="E7F1" b="83 36 C9 31"/>
+  <a u="E7F2" b="83 36 C9 32"/>
+  <a u="E7F3" b="83 36 C9 33"/>
+  <a u="E7F4" b="A9 97"/>
+  <a u="E7F5" b="A9 98"/>
+  <a u="E7F6" b="A9 99"/>
+  <a u="E7F7" b="A9 9A"/>
+  <a u="E7F8" b="A9 9B"/>
+  <a u="E7F9" b="A9 9C"/>
+  <a u="E7FA" b="A9 9D"/>
+  <a u="E7FB" b="A9 9E"/>
+  <a u="E7FC" b="A9 9F"/>
+  <a u="E7FD" b="A9 A0"/>
+  <a u="E7FE" b="A9 A1"/>
+  <a u="E7FF" b="A9 A2"/>
+  <a u="E800" b="A9 A3"/>
+  <a u="E801" b="A9 F0"/>
+  <a u="E802" b="A9 F1"/>
+  <a u="E803" b="A9 F2"/>
+  <a u="E804" b="A9 F3"/>
+  <a u="E805" b="A9 F4"/>
+  <a u="E806" b="A9 F5"/>
+  <a u="E807" b="A9 F6"/>
+  <a u="E808" b="A9 F7"/>
+  <a u="E809" b="A9 F8"/>
+  <a u="E80A" b="A9 F9"/>
+  <a u="E80B" b="A9 FA"/>
+  <a u="E80C" b="A9 FB"/>
+  <a u="E80D" b="A9 FC"/>
+  <a u="E80E" b="A9 FD"/>
+  <a u="E80F" b="A9 FE"/>
+  <a u="E810" b="D7 FA"/>
+  <a u="E811" b="D7 FB"/>
+  <a u="E812" b="D7 FC"/>
+  <a u="E813" b="D7 FD"/>
+  <a u="E814" b="D7 FE"/>
+  <a u="E815" b="83 36 C9 34"/>
+  <a u="E816" b="FE 51"/>
+  <a u="E817" b="FE 52"/>
+  <a u="E818" b="FE 53"/>
+  <a u="E819" b="83 36 C9 35"/>
+  <a u="E81A" b="83 36 C9 36"/>
+  <a u="E81B" b="83 36 C9 37"/>
+  <a u="E81C" b="83 36 C9 38"/>
+  <a u="E81D" b="83 36 C9 39"/>
+  <a u="E81E" b="FE 59"/>
+  <a u="E81F" b="83 36 CA 30"/>
+  <a u="E820" b="83 36 CA 31"/>
+  <a u="E821" b="83 36 CA 32"/>
+  <a u="E822" b="83 36 CA 33"/>
+  <a u="E823" b="83 36 CA 34"/>
+  <a u="E824" b="83 36 CA 35"/>
+  <a u="E825" b="83 36 CA 36"/>
+  <a u="E826" b="FE 61"/>
+  <a u="E827" b="83 36 CA 37"/>
+  <a u="E828" b="83 36 CA 38"/>
+  <a u="E829" b="83 36 CA 39"/>
+  <a u="E82A" b="83 36 CB 30"/>
+  <a u="E82B" b="FE 66"/>
+  <a u="E82C" b="FE 67"/>
+  <a u="E82D" b="83 36 CB 31"/>
+  <a u="E82E" b="83 36 CB 32"/>
+  <a u="E82F" b="83 36 CB 33"/>
+  <a u="E830" b="83 36 CB 34"/>
+  <a u="E831" b="FE 6C"/>
+  <a u="E832" b="FE 6D"/>
+  <a u="E833" b="83 36 CB 35"/>
+  <a u="E834" b="83 36 CB 36"/>
+  <a u="E835" b="83 36 CB 37"/>
+  <a u="E836" b="83 36 CB 38"/>
+  <a u="E837" b="83 36 CB 39"/>
+  <a u="E838" b="83 36 CC 30"/>
+  <a u="E839" b="83 36 CC 31"/>
+  <a u="E83A" b="83 36 CC 32"/>
+  <a u="E83B" b="FE 76"/>
+  <a u="E83C" b="83 36 CC 33"/>
+  <a u="E83D" b="83 36 CC 34"/>
+  <a u="E83E" b="83 36 CC 35"/>
+  <a u="E83F" b="83 36 CC 36"/>
+  <a u="E840" b="83 36 CC 37"/>
+  <a u="E841" b="83 36 CC 38"/>
+  <a u="E842" b="83 36 CC 39"/>
+  <a u="E843" b="FE 7E"/>
+  <a u="E844" b="83 36 CD 30"/>
+  <a u="E845" b="83 36 CD 31"/>
+  <a u="E846" b="83 36 CD 32"/>
+  <a u="E847" b="83 36 CD 33"/>
+  <a u="E848" b="83 36 CD 34"/>
+  <a u="E849" b="83 36 CD 35"/>
+  <a u="E84A" b="83 36 CD 36"/>
+  <a u="E84B" b="83 36 CD 37"/>
+  <a u="E84C" b="83 36 CD 38"/>
+  <a u="E84D" b="83 36 CD 39"/>
+  <a u="E84E" b="83 36 CE 30"/>
+  <a u="E84F" b="83 36 CE 31"/>
+  <a u="E850" b="83 36 CE 32"/>
+  <a u="E851" b="83 36 CE 33"/>
+  <a u="E852" b="83 36 CE 34"/>
+  <a u="E853" b="83 36 CE 35"/>
+  <a u="E854" b="FE 90"/>
+  <a u="E855" b="FE 91"/>
+  <a u="E856" b="83 36 CE 36"/>
+  <a u="E857" b="83 36 CE 37"/>
+  <a u="E858" b="83 36 CE 38"/>
+  <a u="E859" b="83 36 CE 39"/>
+  <a u="E85A" b="83 36 CF 30"/>
+  <a u="E85B" b="83 36 CF 31"/>
+  <a u="E85C" b="83 36 CF 32"/>
+  <a u="E85D" b="83 36 CF 33"/>
+  <a u="E85E" b="83 36 CF 34"/>
+  <a u="E85F" b="83 36 CF 35"/>
+  <a u="E860" b="83 36 CF 36"/>
+  <a u="E861" b="83 36 CF 37"/>
+  <a u="E862" b="83 36 CF 38"/>
+  <a u="E863" b="83 36 CF 39"/>
+  <a u="E864" b="FE A0"/>
+  <a u="F92C" b="FD 9C"/>
+  <a u="F92D" b="84 30 85 35"/>
+  <a u="F92E" b="84 30 85 36"/>
+  <a u="F92F" b="84 30 85 37"/>
+  <a u="F930" b="84 30 85 38"/>
+  <a u="F931" b="84 30 85 39"/>
+  <a u="F932" b="84 30 86 30"/>
+  <a u="F933" b="84 30 86 31"/>
+  <a u="F934" b="84 30 86 32"/>
+  <a u="F935" b="84 30 86 33"/>
+  <a u="F936" b="84 30 86 34"/>
+  <a u="F937" b="84 30 86 35"/>
+  <a u="F938" b="84 30 86 36"/>
+  <a u="F939" b="84 30 86 37"/>
+  <a u="F93A" b="84 30 86 38"/>
+  <a u="F93B" b="84 30 86 39"/>
+  <a u="F93C" b="84 30 87 30"/>
+  <a u="F93D" b="84 30 87 31"/>
+  <a u="F93E" b="84 30 87 32"/>
+  <a u="F93F" b="84 30 87 33"/>
+  <a u="F940" b="84 30 87 34"/>
+  <a u="F941" b="84 30 87 35"/>
+  <a u="F942" b="84 30 87 36"/>
+  <a u="F943" b="84 30 87 37"/>
+  <a u="F944" b="84 30 87 38"/>
+  <a u="F945" b="84 30 87 39"/>
+  <a u="F946" b="84 30 88 30"/>
+  <a u="F947" b="84 30 88 31"/>
+  <a u="F948" b="84 30 88 32"/>
+  <a u="F949" b="84 30 88 33"/>
+  <a u="F94A" b="84 30 88 34"/>
+  <a u="F94B" b="84 30 88 35"/>
+  <a u="F94C" b="84 30 88 36"/>
+  <a u="F94D" b="84 30 88 37"/>
+  <a u="F94E" b="84 30 88 38"/>
+  <a u="F94F" b="84 30 88 39"/>
+  <a u="F950" b="84 30 89 30"/>
+  <a u="F951" b="84 30 89 31"/>
+  <a u="F952" b="84 30 89 32"/>
+  <a u="F953" b="84 30 89 33"/>
+  <a u="F954" b="84 30 89 34"/>
+  <a u="F955" b="84 30 89 35"/>
+  <a u="F956" b="84 30 89 36"/>
+  <a u="F957" b="84 30 89 37"/>
+  <a u="F958" b="84 30 89 38"/>
+  <a u="F959" b="84 30 89 39"/>
+  <a u="F95A" b="84 30 8A 30"/>
+  <a u="F95B" b="84 30 8A 31"/>
+  <a u="F95C" b="84 30 8A 32"/>
+  <a u="F95D" b="84 30 8A 33"/>
+  <a u="F95E" b="84 30 8A 34"/>
+  <a u="F95F" b="84 30 8A 35"/>
+  <a u="F960" b="84 30 8A 36"/>
+  <a u="F961" b="84 30 8A 37"/>
+  <a u="F962" b="84 30 8A 38"/>
+  <a u="F963" b="84 30 8A 39"/>
+  <a u="F964" b="84 30 8B 30"/>
+  <a u="F965" b="84 30 8B 31"/>
+  <a u="F966" b="84 30 8B 32"/>
+  <a u="F967" b="84 30 8B 33"/>
+  <a u="F968" b="84 30 8B 34"/>
+  <a u="F969" b="84 30 8B 35"/>
+  <a u="F96A" b="84 30 8B 36"/>
+  <a u="F96B" b="84 30 8B 37"/>
+  <a u="F96C" b="84 30 8B 38"/>
+  <a u="F96D" b="84 30 8B 39"/>
+  <a u="F96E" b="84 30 8C 30"/>
+  <a u="F96F" b="84 30 8C 31"/>
+  <a u="F970" b="84 30 8C 32"/>
+  <a u="F971" b="84 30 8C 33"/>
+  <a u="F972" b="84 30 8C 34"/>
+  <a u="F973" b="84 30 8C 35"/>
+  <a u="F974" b="84 30 8C 36"/>
+  <a u="F975" b="84 30 8C 37"/>
+  <a u="F976" b="84 30 8C 38"/>
+  <a u="F977" b="84 30 8C 39"/>
+  <a u="F978" b="84 30 8D 30"/>
+  <a u="F979" b="FD 9D"/>
+  <a u="F97A" b="84 30 8D 31"/>
+  <a u="F97B" b="84 30 8D 32"/>
+  <a u="F97C" b="84 30 8D 33"/>
+  <a u="F97D" b="84 30 8D 34"/>
+  <a u="F97E" b="84 30 8D 35"/>
+  <a u="F97F" b="84 30 8D 36"/>
+  <a u="F980" b="84 30 8D 37"/>
+  <a u="F981" b="84 30 8D 38"/>
+  <a u="F982" b="84 30 8D 39"/>
+  <a u="F983" b="84 30 8E 30"/>
+  <a u="F984" b="84 30 8E 31"/>
+  <a u="F985" b="84 30 8E 32"/>
+  <a u="F986" b="84 30 8E 33"/>
+  <a u="F987" b="84 30 8E 34"/>
+  <a u="F988" b="84 30 8E 35"/>
+  <a u="F989" b="84 30 8E 36"/>
+  <a u="F98A" b="84 30 8E 37"/>
+  <a u="F98B" b="84 30 8E 38"/>
+  <a u="F98C" b="84 30 8E 39"/>
+  <a u="F98D" b="84 30 8F 30"/>
+  <a u="F98E" b="84 30 8F 31"/>
+  <a u="F98F" b="84 30 8F 32"/>
+  <a u="F990" b="84 30 8F 33"/>
+  <a u="F991" b="84 30 8F 34"/>
+  <a u="F992" b="84 30 8F 35"/>
+  <a u="F993" b="84 30 8F 36"/>
+  <a u="F994" b="84 30 8F 37"/>
+  <a u="F995" b="FD 9E"/>
+  <a u="F996" b="84 30 8F 38"/>
+  <a u="F997" b="84 30 8F 39"/>
+  <a u="F998" b="84 30 90 30"/>
+  <a u="F999" b="84 30 90 31"/>
+  <a u="F99A" b="84 30 90 32"/>
+  <a u="F99B" b="84 30 90 33"/>
+  <a u="F99C" b="84 30 90 34"/>
+  <a u="F99D" b="84 30 90 35"/>
+  <a u="F99E" b="84 30 90 36"/>
+  <a u="F99F" b="84 30 90 37"/>
+  <a u="F9A0" b="84 30 90 38"/>
+  <a u="F9A1" b="84 30 90 39"/>
+  <a u="F9A2" b="84 30 91 30"/>
+  <a u="F9A3" b="84 30 91 31"/>
+  <a u="F9A4" b="84 30 91 32"/>
+  <a u="F9A5" b="84 30 91 33"/>
+  <a u="F9A6" b="84 30 91 34"/>
+  <a u="F9A7" b="84 30 91 35"/>
+  <a u="F9A8" b="84 30 91 36"/>
+  <a u="F9A9" b="84 30 91 37"/>
+  <a u="F9AA" b="84 30 91 38"/>
+  <a u="F9AB" b="84 30 91 39"/>
+  <a u="F9AC" b="84 30 92 30"/>
+  <a u="F9AD" b="84 30 92 31"/>
+  <a u="F9AE" b="84 30 92 32"/>
+  <a u="F9AF" b="84 30 92 33"/>
+  <a u="F9B0" b="84 30 92 34"/>
+  <a u="F9B1" b="84 30 92 35"/>
+  <a u="F9B2" b="84 30 92 36"/>
+  <a u="F9B3" b="84 30 92 37"/>
+  <a u="F9B4" b="84 30 92 38"/>
+  <a u="F9B5" b="84 30 92 39"/>
+  <a u="F9B6" b="84 30 93 30"/>
+  <a u="F9B7" b="84 30 93 31"/>
+  <a u="F9B8" b="84 30 93 32"/>
+  <a u="F9B9" b="84 30 93 33"/>
+  <a u="F9BA" b="84 30 93 34"/>
+  <a u="F9BB" b="84 30 93 35"/>
+  <a u="F9BC" b="84 30 93 36"/>
+  <a u="F9BD" b="84 30 93 37"/>
+  <a u="F9BE" b="84 30 93 38"/>
+  <a u="F9BF" b="84 30 93 39"/>
+  <a u="F9C0" b="84 30 94 30"/>
+  <a u="F9C1" b="84 30 94 31"/>
+  <a u="F9C2" b="84 30 94 32"/>
+  <a u="F9C3" b="84 30 94 33"/>
+  <a u="F9C4" b="84 30 94 34"/>
+  <a u="F9C5" b="84 30 94 35"/>
+  <a u="F9C6" b="84 30 94 36"/>
+  <a u="F9C7" b="84 30 94 37"/>
+  <a u="F9C8" b="84 30 94 38"/>
+  <a u="F9C9" b="84 30 94 39"/>
+  <a u="F9CA" b="84 30 95 30"/>
+  <a u="F9CB" b="84 30 95 31"/>
+  <a u="F9CC" b="84 30 95 32"/>
+  <a u="F9CD" b="84 30 95 33"/>
+  <a u="F9CE" b="84 30 95 34"/>
+  <a u="F9CF" b="84 30 95 35"/>
+  <a u="F9D0" b="84 30 95 36"/>
+  <a u="F9D1" b="84 30 95 37"/>
+  <a u="F9D2" b="84 30 95 38"/>
+  <a u="F9D3" b="84 30 95 39"/>
+  <a u="F9D4" b="84 30 96 30"/>
+  <a u="F9D5" b="84 30 96 31"/>
+  <a u="F9D6" b="84 30 96 32"/>
+  <a u="F9D7" b="84 30 96 33"/>
+  <a u="F9D8" b="84 30 96 34"/>
+  <a u="F9D9" b="84 30 96 35"/>
+  <a u="F9DA" b="84 30 96 36"/>
+  <a u="F9DB" b="84 30 96 37"/>
+  <a u="F9DC" b="84 30 96 38"/>
+  <a u="F9DD" b="84 30 96 39"/>
+  <a u="F9DE" b="84 30 97 30"/>
+  <a u="F9DF" b="84 30 97 31"/>
+  <a u="F9E0" b="84 30 97 32"/>
+  <a u="F9E1" b="84 30 97 33"/>
+  <a u="F9E2" b="84 30 97 34"/>
+  <a u="F9E3" b="84 30 97 35"/>
+  <a u="F9E4" b="84 30 97 36"/>
+  <a u="F9E5" b="84 30 97 37"/>
+  <a u="F9E6" b="84 30 97 38"/>
+  <a u="F9E7" b="FD 9F"/>
+  <a u="F9E8" b="84 30 97 39"/>
+  <a u="F9E9" b="84 30 98 30"/>
+  <a u="F9EA" b="84 30 98 31"/>
+  <a u="F9EB" b="84 30 98 32"/>
+  <a u="F9EC" b="84 30 98 33"/>
+  <a u="F9ED" b="84 30 98 34"/>
+  <a u="F9EE" b="84 30 98 35"/>
+  <a u="F9EF" b="84 30 98 36"/>
+  <a u="F9F0" b="84 30 98 37"/>
+  <a u="F9F1" b="FD A0"/>
+  <a u="F9F2" b="84 30 98 38"/>
+  <a u="F9F3" b="84 30 98 39"/>
+  <a u="F9F4" b="84 30 99 30"/>
+  <a u="F9F5" b="84 30 99 31"/>
+  <a u="F9F6" b="84 30 99 32"/>
+  <a u="F9F7" b="84 30 99 33"/>
+  <a u="F9F8" b="84 30 99 34"/>
+  <a u="F9F9" b="84 30 99 35"/>
+  <a u="F9FA" b="84 30 99 36"/>
+  <a u="F9FB" b="84 30 99 37"/>
+  <a u="F9FC" b="84 30 99 38"/>
+  <a u="F9FD" b="84 30 99 39"/>
+  <a u="F9FE" b="84 30 9A 30"/>
+  <a u="F9FF" b="84 30 9A 31"/>
+  <a u="FA00" b="84 30 9A 32"/>
+  <a u="FA01" b="84 30 9A 33"/>
+  <a u="FA02" b="84 30 9A 34"/>
+  <a u="FA03" b="84 30 9A 35"/>
+  <a u="FA04" b="84 30 9A 36"/>
+  <a u="FA05" b="84 30 9A 37"/>
+  <a u="FA06" b="84 30 9A 38"/>
+  <a u="FA07" b="84 30 9A 39"/>
+  <a u="FA08" b="84 30 9B 30"/>
+  <a u="FA09" b="84 30 9B 31"/>
+  <a u="FA0A" b="84 30 9B 32"/>
+  <a u="FA0B" b="84 30 9B 33"/>
+  <a u="FA0C" b="FE 40"/>
+  <a u="FA0D" b="FE 41"/>
+  <a u="FA0E" b="FE 42"/>
+  <a u="FA0F" b="FE 43"/>
+  <a u="FA10" b="84 30 9B 34"/>
+  <a u="FA11" b="FE 44"/>
+  <a u="FA12" b="84 30 9B 35"/>
+  <a u="FA13" b="FE 45"/>
+  <a u="FA14" b="FE 46"/>
+  <a u="FA15" b="84 30 9B 36"/>
+  <a u="FA16" b="84 30 9B 37"/>
+  <a u="FA17" b="84 30 9B 38"/>
+  <a u="FA18" b="FE 47"/>
+  <a u="FA19" b="84 30 9B 39"/>
+  <a u="FA1A" b="84 30 9C 30"/>
+  <a u="FA1B" b="84 30 9C 31"/>
+  <a u="FA1C" b="84 30 9C 32"/>
+  <a u="FA1D" b="84 30 9C 33"/>
+  <a u="FA1E" b="84 30 9C 34"/>
+  <a u="FA1F" b="FE 48"/>
+  <a u="FA20" b="FE 49"/>
+  <a u="FA21" b="FE 4A"/>
+  <a u="FA22" b="84 30 9C 35"/>
+  <a u="FA23" b="FE 4B"/>
+  <a u="FA24" b="FE 4C"/>
+  <a u="FA25" b="84 30 9C 36"/>
+  <a u="FA26" b="84 30 9C 37"/>
+  <a u="FA27" b="FE 4D"/>
+  <a u="FA28" b="FE 4E"/>
+  <a u="FA29" b="FE 4F"/>
+  <a u="FE30" b="A9 55"/>
+  <a u="FE31" b="A6 F2"/>
+  <a u="FE32" b="84 31 85 38"/>
+  <a u="FE33" b="A6 F4"/>
+  <a u="FE34" b="A6 F5"/>
+  <a u="FE35" b="A6 E0"/>
+  <a u="FE36" b="A6 E1"/>
+  <a u="FE37" b="A6 F0"/>
+  <a u="FE38" b="A6 F1"/>
+  <a u="FE39" b="A6 E2"/>
+  <a u="FE3A" b="A6 E3"/>
+  <a u="FE3B" b="A6 EE"/>
+  <a u="FE3C" b="A6 EF"/>
+  <a u="FE3D" b="A6 E6"/>
+  <a u="FE3E" b="A6 E7"/>
+  <a u="FE3F" b="A6 E4"/>
+  <a u="FE40" b="A6 E5"/>
+  <a u="FE41" b="A6 E8"/>
+  <a u="FE42" b="A6 E9"/>
+  <a u="FE43" b="A6 EA"/>
+  <a u="FE44" b="A6 EB"/>
+  <a u="FE45" b="84 31 85 39"/>
+  <a u="FE46" b="84 31 86 30"/>
+  <a u="FE47" b="84 31 86 31"/>
+  <a u="FE48" b="84 31 86 32"/>
+  <a u="FE49" b="A9 68"/>
+  <a u="FE4A" b="A9 69"/>
+  <a u="FE4B" b="A9 6A"/>
+  <a u="FE4C" b="A9 6B"/>
+  <a u="FE4D" b="A9 6C"/>
+  <a u="FE4E" b="A9 6D"/>
+  <a u="FE4F" b="A9 6E"/>
+  <a u="FE50" b="A9 6F"/>
+  <a u="FE51" b="A9 70"/>
+  <a u="FE52" b="A9 71"/>
+  <a u="FE53" b="84 31 86 33"/>
+  <a u="FE54" b="A9 72"/>
+  <a u="FE55" b="A9 73"/>
+  <a u="FE56" b="A9 74"/>
+  <a u="FE57" b="A9 75"/>
+  <a u="FE58" b="84 31 86 34"/>
+  <a u="FE59" b="A9 76"/>
+  <a u="FE5A" b="A9 77"/>
+  <a u="FE5B" b="A9 78"/>
+  <a u="FE5C" b="A9 79"/>
+  <a u="FE5D" b="A9 7A"/>
+  <a u="FE5E" b="A9 7B"/>
+  <a u="FE5F" b="A9 7C"/>
+  <a u="FE60" b="A9 7D"/>
+  <a u="FE61" b="A9 7E"/>
+  <a u="FE62" b="A9 80"/>
+  <a u="FE63" b="A9 81"/>
+  <a u="FE64" b="A9 82"/>
+  <a u="FE65" b="A9 83"/>
+  <a u="FE66" b="A9 84"/>
+  <a u="FE67" b="84 31 86 35"/>
+  <a u="FE68" b="A9 85"/>
+  <a u="FE69" b="A9 86"/>
+  <a u="FE6A" b="A9 87"/>
+  <a u="FE6B" b="A9 88"/>
+  <a u="FE6C" b="84 31 86 36"/>
+  <a u="FE6D" b="84 31 86 37"/>
+  <a u="FE6E" b="84 31 86 38"/>
+  <a u="FE6F" b="84 31 86 39"/>
+  <a u="FE70" b="84 31 87 30"/>
+  <a u="FE71" b="84 31 87 31"/>
+  <a u="FE72" b="84 31 87 32"/>
+  <a u="FE73" b="84 31 87 33"/>
+  <a u="FE74" b="84 31 87 34"/>
+  <a u="FE75" b="84 31 87 35"/>
+  <a u="FE76" b="84 31 87 36"/>
+  <a u="FE77" b="84 31 87 37"/>
+  <a u="FE78" b="84 31 87 38"/>
+  <a u="FE79" b="84 31 87 39"/>
+  <a u="FE7A" b="84 31 88 30"/>
+  <a u="FE7B" b="84 31 88 31"/>
+  <a u="FE7C" b="84 31 88 32"/>
+  <a u="FE7D" b="84 31 88 33"/>
+  <a u="FE7E" b="84 31 88 34"/>
+  <a u="FE7F" b="84 31 88 35"/>
+  <a u="FE80" b="84 31 88 36"/>
+  <a u="FE81" b="84 31 88 37"/>
+  <a u="FE82" b="84 31 88 38"/>
+  <a u="FE83" b="84 31 88 39"/>
+  <a u="FE84" b="84 31 89 30"/>
+  <a u="FE85" b="84 31 89 31"/>
+  <a u="FE86" b="84 31 89 32"/>
+  <a u="FE87" b="84 31 89 33"/>
+  <a u="FE88" b="84 31 89 34"/>
+  <a u="FE89" b="84 31 89 35"/>
+  <a u="FE8A" b="84 31 89 36"/>
+  <a u="FE8B" b="84 31 89 37"/>
+  <a u="FE8C" b="84 31 89 38"/>
+  <a u="FE8D" b="84 31 89 39"/>
+  <a u="FE8E" b="84 31 8A 30"/>
+  <a u="FE8F" b="84 31 8A 31"/>
+  <a u="FE90" b="84 31 8A 32"/>
+  <a u="FE91" b="84 31 8A 33"/>
+  <a u="FE92" b="84 31 8A 34"/>
+  <a u="FE93" b="84 31 8A 35"/>
+  <a u="FE94" b="84 31 8A 36"/>
+  <a u="FE95" b="84 31 8A 37"/>
+  <a u="FE96" b="84 31 8A 38"/>
+  <a u="FE97" b="84 31 8A 39"/>
+  <a u="FE98" b="84 31 8B 30"/>
+  <a u="FE99" b="84 31 8B 31"/>
+  <a u="FE9A" b="84 31 8B 32"/>
+  <a u="FE9B" b="84 31 8B 33"/>
+  <a u="FE9C" b="84 31 8B 34"/>
+  <a u="FE9D" b="84 31 8B 35"/>
+  <a u="FE9E" b="84 31 8B 36"/>
+  <a u="FE9F" b="84 31 8B 37"/>
+  <a u="FEA0" b="84 31 8B 38"/>
+  <a u="FEA1" b="84 31 8B 39"/>
+  <a u="FEA2" b="84 31 8C 30"/>
+  <a u="FEA3" b="84 31 8C 31"/>
+  <a u="FEA4" b="84 31 8C 32"/>
+  <a u="FEA5" b="84 31 8C 33"/>
+  <a u="FEA6" b="84 31 8C 34"/>
+  <a u="FEA7" b="84 31 8C 35"/>
+  <a u="FEA8" b="84 31 8C 36"/>
+  <a u="FEA9" b="84 31 8C 37"/>
+  <a u="FEAA" b="84 31 8C 38"/>
+  <a u="FEAB" b="84 31 8C 39"/>
+  <a u="FEAC" b="84 31 8D 30"/>
+  <a u="FEAD" b="84 31 8D 31"/>
+  <a u="FEAE" b="84 31 8D 32"/>
+  <a u="FEAF" b="84 31 8D 33"/>
+  <a u="FEB0" b="84 31 8D 34"/>
+  <a u="FEB1" b="84 31 8D 35"/>
+  <a u="FEB2" b="84 31 8D 36"/>
+  <a u="FEB3" b="84 31 8D 37"/>
+  <a u="FEB4" b="84 31 8D 38"/>
+  <a u="FEB5" b="84 31 8D 39"/>
+  <a u="FEB6" b="84 31 8E 30"/>
+  <a u="FEB7" b="84 31 8E 31"/>
+  <a u="FEB8" b="84 31 8E 32"/>
+  <a u="FEB9" b="84 31 8E 33"/>
+  <a u="FEBA" b="84 31 8E 34"/>
+  <a u="FEBB" b="84 31 8E 35"/>
+  <a u="FEBC" b="84 31 8E 36"/>
+  <a u="FEBD" b="84 31 8E 37"/>
+  <a u="FEBE" b="84 31 8E 38"/>
+  <a u="FEBF" b="84 31 8E 39"/>
+  <a u="FEC0" b="84 31 8F 30"/>
+  <a u="FEC1" b="84 31 8F 31"/>
+  <a u="FEC2" b="84 31 8F 32"/>
+  <a u="FEC3" b="84 31 8F 33"/>
+  <a u="FEC4" b="84 31 8F 34"/>
+  <a u="FEC5" b="84 31 8F 35"/>
+  <a u="FEC6" b="84 31 8F 36"/>
+  <a u="FEC7" b="84 31 8F 37"/>
+  <a u="FEC8" b="84 31 8F 38"/>
+  <a u="FEC9" b="84 31 8F 39"/>
+  <a u="FECA" b="84 31 90 30"/>
+  <a u="FECB" b="84 31 90 31"/>
+  <a u="FECC" b="84 31 90 32"/>
+  <a u="FECD" b="84 31 90 33"/>
+  <a u="FECE" b="84 31 90 34"/>
+  <a u="FECF" b="84 31 90 35"/>
+  <a u="FED0" b="84 31 90 36"/>
+  <a u="FED1" b="84 31 90 37"/>
+  <a u="FED2" b="84 31 90 38"/>
+  <a u="FED3" b="84 31 90 39"/>
+  <a u="FED4" b="84 31 91 30"/>
+  <a u="FED5" b="84 31 91 31"/>
+  <a u="FED6" b="84 31 91 32"/>
+  <a u="FED7" b="84 31 91 33"/>
+  <a u="FED8" b="84 31 91 34"/>
+  <a u="FED9" b="84 31 91 35"/>
+  <a u="FEDA" b="84 31 91 36"/>
+  <a u="FEDB" b="84 31 91 37"/>
+  <a u="FEDC" b="84 31 91 38"/>
+  <a u="FEDD" b="84 31 91 39"/>
+  <a u="FEDE" b="84 31 92 30"/>
+  <a u="FEDF" b="84 31 92 31"/>
+  <a u="FEE0" b="84 31 92 32"/>
+  <a u="FEE1" b="84 31 92 33"/>
+  <a u="FEE2" b="84 31 92 34"/>
+  <a u="FEE3" b="84 31 92 35"/>
+  <a u="FEE4" b="84 31 92 36"/>
+  <a u="FEE5" b="84 31 92 37"/>
+  <a u="FEE6" b="84 31 92 38"/>
+  <a u="FEE7" b="84 31 92 39"/>
+  <a u="FEE8" b="84 31 93 30"/>
+  <a u="FEE9" b="84 31 93 31"/>
+  <a u="FEEA" b="84 31 93 32"/>
+  <a u="FEEB" b="84 31 93 33"/>
+  <a u="FEEC" b="84 31 93 34"/>
+  <a u="FEED" b="84 31 93 35"/>
+  <a u="FEEE" b="84 31 93 36"/>
+  <a u="FEEF" b="84 31 93 37"/>
+  <a u="FEF0" b="84 31 93 38"/>
+  <a u="FEF1" b="84 31 93 39"/>
+  <a u="FEF2" b="84 31 94 30"/>
+  <a u="FEF3" b="84 31 94 31"/>
+  <a u="FEF4" b="84 31 94 32"/>
+  <a u="FEF5" b="84 31 94 33"/>
+  <a u="FEF6" b="84 31 94 34"/>
+  <a u="FEF7" b="84 31 94 35"/>
+  <a u="FEF8" b="84 31 94 36"/>
+  <a u="FEF9" b="84 31 94 37"/>
+  <a u="FEFA" b="84 31 94 38"/>
+  <a u="FEFB" b="84 31 94 39"/>
+  <a u="FEFC" b="84 31 95 30"/>
+  <a u="FEFD" b="84 31 95 31"/>
+  <a u="FEFE" b="84 31 95 32"/>
+  <a u="FEFF" b="84 31 95 33"/>
+  <a u="FF00" b="84 31 95 34"/>
+  <a u="FF01" b="A3 A1"/>
+  <a u="FF02" b="A3 A2"/>
+  <a u="FF03" b="A3 A3"/>
+  <a u="FF04" b="A1 E7"/>
+  <a u="FF05" b="A3 A5"/>
+  <a u="FF06" b="A3 A6"/>
+  <a u="FF07" b="A3 A7"/>
+  <a u="FF08" b="A3 A8"/>
+  <a u="FF09" b="A3 A9"/>
+  <a u="FF0A" b="A3 AA"/>
+  <a u="FF0B" b="A3 AB"/>
+  <a u="FF0C" b="A3 AC"/>
+  <a u="FF0D" b="A3 AD"/>
+  <a u="FF0E" b="A3 AE"/>
+  <a u="FF0F" b="A3 AF"/>
+  <a u="FF10" b="A3 B0"/>
+  <a u="FF11" b="A3 B1"/>
+  <a u="FF12" b="A3 B2"/>
+  <a u="FF13" b="A3 B3"/>
+  <a u="FF14" b="A3 B4"/>
+  <a u="FF15" b="A3 B5"/>
+  <a u="FF16" b="A3 B6"/>
+  <a u="FF17" b="A3 B7"/>
+  <a u="FF18" b="A3 B8"/>
+  <a u="FF19" b="A3 B9"/>
+  <a u="FF1A" b="A3 BA"/>
+  <a u="FF1B" b="A3 BB"/>
+  <a u="FF1C" b="A3 BC"/>
+  <a u="FF1D" b="A3 BD"/>
+  <a u="FF1E" b="A3 BE"/>
+  <a u="FF1F" b="A3 BF"/>
+  <a u="FF20" b="A3 C0"/>
+  <a u="FF21" b="A3 C1"/>
+  <a u="FF22" b="A3 C2"/>
+  <a u="FF23" b="A3 C3"/>
+  <a u="FF24" b="A3 C4"/>
+  <a u="FF25" b="A3 C5"/>
+  <a u="FF26" b="A3 C6"/>
+  <a u="FF27" b="A3 C7"/>
+  <a u="FF28" b="A3 C8"/>
+  <a u="FF29" b="A3 C9"/>
+  <a u="FF2A" b="A3 CA"/>
+  <a u="FF2B" b="A3 CB"/>
+  <a u="FF2C" b="A3 CC"/>
+  <a u="FF2D" b="A3 CD"/>
+  <a u="FF2E" b="A3 CE"/>
+  <a u="FF2F" b="A3 CF"/>
+  <a u="FF30" b="A3 D0"/>
+  <a u="FF31" b="A3 D1"/>
+  <a u="FF32" b="A3 D2"/>
+  <a u="FF33" b="A3 D3"/>
+  <a u="FF34" b="A3 D4"/>
+  <a u="FF35" b="A3 D5"/>
+  <a u="FF36" b="A3 D6"/>
+  <a u="FF37" b="A3 D7"/>
+  <a u="FF38" b="A3 D8"/>
+  <a u="FF39" b="A3 D9"/>
+  <a u="FF3A" b="A3 DA"/>
+  <a u="FF3B" b="A3 DB"/>
+  <a u="FF3C" b="A3 DC"/>
+  <a u="FF3D" b="A3 DD"/>
+  <a u="FF3E" b="A3 DE"/>
+  <a u="FF3F" b="A3 DF"/>
+  <a u="FF40" b="A3 E0"/>
+  <a u="FF41" b="A3 E1"/>
+  <a u="FF42" b="A3 E2"/>
+  <a u="FF43" b="A3 E3"/>
+  <a u="FF44" b="A3 E4"/>
+  <a u="FF45" b="A3 E5"/>
+  <a u="FF46" b="A3 E6"/>
+  <a u="FF47" b="A3 E7"/>
+  <a u="FF48" b="A3 E8"/>
+  <a u="FF49" b="A3 E9"/>
+  <a u="FF4A" b="A3 EA"/>
+  <a u="FF4B" b="A3 EB"/>
+  <a u="FF4C" b="A3 EC"/>
+  <a u="FF4D" b="A3 ED"/>
+  <a u="FF4E" b="A3 EE"/>
+  <a u="FF4F" b="A3 EF"/>
+  <a u="FF50" b="A3 F0"/>
+  <a u="FF51" b="A3 F1"/>
+  <a u="FF52" b="A3 F2"/>
+  <a u="FF53" b="A3 F3"/>
+  <a u="FF54" b="A3 F4"/>
+  <a u="FF55" b="A3 F5"/>
+  <a u="FF56" b="A3 F6"/>
+  <a u="FF57" b="A3 F7"/>
+  <a u="FF58" b="A3 F8"/>
+  <a u="FF59" b="A3 F9"/>
+  <a u="FF5A" b="A3 FA"/>
+  <a u="FF5B" b="A3 FB"/>
+  <a u="FF5C" b="A3 FC"/>
+  <a u="FF5D" b="A3 FD"/>
+  <a u="FF5E" b="A1 AB"/>
+  <a u="FF5F" b="84 31 95 35"/>
+  <a u="FF60" b="84 31 95 36"/>
+  <a u="FF61" b="84 31 95 37"/>
+  <a u="FF62" b="84 31 95 38"/>
+  <a u="FF63" b="84 31 95 39"/>
+  <a u="FF64" b="84 31 96 30"/>
+  <a u="FF65" b="84 31 96 31"/>
+  <a u="FF66" b="84 31 96 32"/>
+  <a u="FF67" b="84 31 96 33"/>
+  <a u="FF68" b="84 31 96 34"/>
+  <a u="FF69" b="84 31 96 35"/>
+  <a u="FF6A" b="84 31 96 36"/>
+  <a u="FF6B" b="84 31 96 37"/>
+  <a u="FF6C" b="84 31 96 38"/>
+  <a u="FF6D" b="84 31 96 39"/>
+  <a u="FF6E" b="84 31 97 30"/>
+  <a u="FF6F" b="84 31 97 31"/>
+  <a u="FF70" b="84 31 97 32"/>
+  <a u="FF71" b="84 31 97 33"/>
+  <a u="FF72" b="84 31 97 34"/>
+  <a u="FF73" b="84 31 97 35"/>
+  <a u="FF74" b="84 31 97 36"/>
+  <a u="FF75" b="84 31 97 37"/>
+  <a u="FF76" b="84 31 97 38"/>
+  <a u="FF77" b="84 31 97 39"/>
+  <a u="FF78" b="84 31 98 30"/>
+  <a u="FF79" b="84 31 98 31"/>
+  <a u="FF7A" b="84 31 98 32"/>
+  <a u="FF7B" b="84 31 98 33"/>
+  <a u="FF7C" b="84 31 98 34"/>
+  <a u="FF7D" b="84 31 98 35"/>
+  <a u="FF7E" b="84 31 98 36"/>
+  <a u="FF7F" b="84 31 98 37"/>
+  <a u="FF80" b="84 31 98 38"/>
+  <a u="FF81" b="84 31 98 39"/>
+  <a u="FF82" b="84 31 99 30"/>
+  <a u="FF83" b="84 31 99 31"/>
+  <a u="FF84" b="84 31 99 32"/>
+  <a u="FF85" b="84 31 99 33"/>
+  <a u="FF86" b="84 31 99 34"/>
+  <a u="FF87" b="84 31 99 35"/>
+  <a u="FF88" b="84 31 99 36"/>
+  <a u="FF89" b="84 31 99 37"/>
+  <a u="FF8A" b="84 31 99 38"/>
+  <a u="FF8B" b="84 31 99 39"/>
+  <a u="FF8C" b="84 31 9A 30"/>
+  <a u="FF8D" b="84 31 9A 31"/>
+  <a u="FF8E" b="84 31 9A 32"/>
+  <a u="FF8F" b="84 31 9A 33"/>
+  <a u="FF90" b="84 31 9A 34"/>
+  <a u="FF91" b="84 31 9A 35"/>
+  <a u="FF92" b="84 31 9A 36"/>
+  <a u="FF93" b="84 31 9A 37"/>
+  <a u="FF94" b="84 31 9A 38"/>
+  <a u="FF95" b="84 31 9A 39"/>
+  <a u="FF96" b="84 31 9B 30"/>
+  <a u="FF97" b="84 31 9B 31"/>
+  <a u="FF98" b="84 31 9B 32"/>
+  <a u="FF99" b="84 31 9B 33"/>
+  <a u="FF9A" b="84 31 9B 34"/>
+  <a u="FF9B" b="84 31 9B 35"/>
+  <a u="FF9C" b="84 31 9B 36"/>
+  <a u="FF9D" b="84 31 9B 37"/>
+  <a u="FF9E" b="84 31 9B 38"/>
+  <a u="FF9F" b="84 31 9B 39"/>
+  <a u="FFA0" b="84 31 9C 30"/>
+  <a u="FFA1" b="84 31 9C 31"/>
+  <a u="FFA2" b="84 31 9C 32"/>
+  <a u="FFA3" b="84 31 9C 33"/>
+  <a u="FFA4" b="84 31 9C 34"/>
+  <a u="FFA5" b="84 31 9C 35"/>
+  <a u="FFA6" b="84 31 9C 36"/>
+  <a u="FFA7" b="84 31 9C 37"/>
+  <a u="FFA8" b="84 31 9C 38"/>
+  <a u="FFA9" b="84 31 9C 39"/>
+  <a u="FFAA" b="84 31 9D 30"/>
+  <a u="FFAB" b="84 31 9D 31"/>
+  <a u="FFAC" b="84 31 9D 32"/>
+  <a u="FFAD" b="84 31 9D 33"/>
+  <a u="FFAE" b="84 31 9D 34"/>
+  <a u="FFAF" b="84 31 9D 35"/>
+  <a u="FFB0" b="84 31 9D 36"/>
+  <a u="FFB1" b="84 31 9D 37"/>
+  <a u="FFB2" b="84 31 9D 38"/>
+  <a u="FFB3" b="84 31 9D 39"/>
+  <a u="FFB4" b="84 31 9E 30"/>
+  <a u="FFB5" b="84 31 9E 31"/>
+  <a u="FFB6" b="84 31 9E 32"/>
+  <a u="FFB7" b="84 31 9E 33"/>
+  <a u="FFB8" b="84 31 9E 34"/>
+  <a u="FFB9" b="84 31 9E 35"/>
+  <a u="FFBA" b="84 31 9E 36"/>
+  <a u="FFBB" b="84 31 9E 37"/>
+  <a u="FFBC" b="84 31 9E 38"/>
+  <a u="FFBD" b="84 31 9E 39"/>
+  <a u="FFBE" b="84 31 9F 30"/>
+  <a u="FFBF" b="84 31 9F 31"/>
+  <a u="FFC0" b="84 31 9F 32"/>
+  <a u="FFC1" b="84 31 9F 33"/>
+  <a u="FFC2" b="84 31 9F 34"/>
+  <a u="FFC3" b="84 31 9F 35"/>
+  <a u="FFC4" b="84 31 9F 36"/>
+  <a u="FFC5" b="84 31 9F 37"/>
+  <a u="FFC6" b="84 31 9F 38"/>
+  <a u="FFC7" b="84 31 9F 39"/>
+  <a u="FFC8" b="84 31 A0 30"/>
+  <a u="FFC9" b="84 31 A0 31"/>
+  <a u="FFCA" b="84 31 A0 32"/>
+  <a u="FFCB" b="84 31 A0 33"/>
+  <a u="FFCC" b="84 31 A0 34"/>
+  <a u="FFCD" b="84 31 A0 35"/>
+  <a u="FFCE" b="84 31 A0 36"/>
+  <a u="FFCF" b="84 31 A0 37"/>
+  <a u="FFD0" b="84 31 A0 38"/>
+  <a u="FFD1" b="84 31 A0 39"/>
+  <a u="FFD2" b="84 31 A1 30"/>
+  <a u="FFD3" b="84 31 A1 31"/>
+  <a u="FFD4" b="84 31 A1 32"/>
+  <a u="FFD5" b="84 31 A1 33"/>
+  <a u="FFD6" b="84 31 A1 34"/>
+  <a u="FFD7" b="84 31 A1 35"/>
+  <a u="FFD8" b="84 31 A1 36"/>
+  <a u="FFD9" b="84 31 A1 37"/>
+  <a u="FFDA" b="84 31 A1 38"/>
+  <a u="FFDB" b="84 31 A1 39"/>
+  <a u="FFDC" b="84 31 A2 30"/>
+  <a u="FFDD" b="84 31 A2 31"/>
+  <a u="FFDE" b="84 31 A2 32"/>
+  <a u="FFDF" b="84 31 A2 33"/>
+  <a u="FFE0" b="A1 E9"/>
+  <a u="FFE1" b="A1 EA"/>
+  <a u="FFE2" b="A9 56"/>
+  <a u="FFE3" b="A3 FE"/>
+  <a u="FFE4" b="A9 57"/>
+  <a u="FFE5" b="A3 A4"/>
+  <!-- Fallback mappings from Unicode to bytes -->
+  <!-- NONE -->
+  <!-- Fallback mappings from bytes to Unicode -->
+  <!-- NONE -->
+  <!-- Roundtrip-mappings that can be enumerated
+       Note that GB 18030 defines roundtrip mappings for all Unicode code points U+0000..U+10ffff.
+       This would require 1.1 million <a> elements.
+       However, most four-byte GB 18030 mappings can be enumerated efficiently within distinct ranges.
+       Therefore, we use <range> elements for all but the 31000 or so assignments above.
+    -->
+  <range uFirst="0452" uLast="200F"  bFirst="81 30 D3 30" bLast="81 36 A5 31"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="2643" uLast="2E80"  bFirst="81 37 A8 39" bLast="81 38 FD 38"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="361B" uLast="3917"  bFirst="82 30 A6 33" bLast="82 30 F2 37"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="3CE1" uLast="4055"  bFirst="82 31 D4 38" bLast="82 32 AF 32"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="4160" uLast="4336"  bFirst="82 32 C9 37" bLast="82 32 F8 37"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="44D7" uLast="464B"  bFirst="82 33 A3 39" bLast="82 33 C9 31"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="478E" uLast="4946"  bFirst="82 33 E8 38" bLast="82 34 96 38"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="49B8" uLast="4C76"  bFirst="82 34 A1 31" bLast="82 34 E7 33"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="9FA6" uLast="D7FF"  bFirst="82 35 8F 33" bLast="83 36 C7 38"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="E865" uLast="F92B"  bFirst="83 36 D0 30" bLast="84 30 85 34"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="FA2A" uLast="FE2F"  bFirst="84 30 9C 38" bLast="84 31 85 37"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="FFE6" uLast="FFFF"  bFirst="84 31 A2 34" bLast="84 31 A4 39"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+  <range uFirst="10000" uLast="10FFFF"  bFirst="90 30 81 30" bLast="E3 32 9A 35"  bMin="81 30 81 30" bMax="FE 39 FE 39"/>
+ </assignments>
+</characterMapping>
+
diff --git a/Tools/unicode/python-mappings/jisx0213-2004-std.txt b/Tools/unicode/python-mappings/jisx0213-2004-std.txt
new file mode 100644
index 0000000..a302fa1
--- /dev/null
+++ b/Tools/unicode/python-mappings/jisx0213-2004-std.txt
@@ -0,0 +1,11294 @@
+## JIS X 0213:2004 vs Unicode mapping table
+##
+## Date: 7 Jul 2004 13:09:49 GMT
+## License:
+## 	Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved.
+## 	Copyright (C) 2001 I'O, All Rights Reserved.
+## 	You can use, modify, distribute this table freely.
+## Note:
+## 	3-XXXX	JIS X 0213:2000 plane 1 (GL encoding)
+## 	4-XXXX	JIS X 0213:2000 plane 2 (GL encoding)
+## 	[1983]	JIS codepoint defined by JIS X 0208-1983
+## 	[1990]	JIS codepoint defined by JIS X 0208-1990
+## 	[2000]	JIS codepoint defined by JIS X 0213:2000
+## 	[Unicode3.1]	UCS codepoint defined by Unicode 3.1
+## 	[Unicode3.2]	UCS codepoint defined by Unicode 3.2
+## 	Fullwidth	UCS fullwidth form (U+Fxxx)
+## 	Windows 	Windows (CP932) mapping
+## 	Private 	UCS private area mapping
+## 	Some 0213 character can't represent by one UCS character.
+## 	In this table, such characters are described as 'U+xxxx+xxxx'.
+##
+## JIS	Unicode	Name	Note
+3-2121	U+3000	# IDEOGRAPHIC SPACE
+3-2122	U+3001	# IDEOGRAPHIC COMMA
+3-2123	U+3002	# IDEOGRAPHIC FULL STOP
+3-2124	U+FF0C	# COMMA	Fullwidth: U+FF0C
+3-2125	U+FF0E	# FULL STOP	Fullwidth: U+FF0E
+3-2126	U+30FB	# KATAKANA MIDDLE DOT
+3-2127	U+FF1A	# COLON	Fullwidth: U+FF1A
+3-2128	U+FF1B	# SEMICOLON	Fullwidth: U+FF1B
+3-2129	U+FF1F	# QUESTION MARK	Fullwidth: U+FF1F
+3-212A	U+FF01	# EXCLAMATION MARK	Fullwidth: U+FF01
+3-212B	U+309B	# KATAKANA-HIRAGANA VOICED SOUND MARK
+3-212C	U+309C	# KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+3-212D	U+00B4	# ACUTE ACCENT
+3-212E	U+FF40	# GRAVE ACCENT	Fullwidth: U+FF40
+3-212F	U+00A8	# DIAERESIS
+3-2130	U+FF3E	# CIRCUMFLEX ACCENT	Fullwidth: U+FF3E
+3-2131	U+FFE3	# OVERLINE	Windows: U+FFE3
+3-2132	U+FF3F	# LOW LINE	Fullwidth: U+FF3F
+3-2133	U+30FD	# KATAKANA ITERATION MARK
+3-2134	U+30FE	# KATAKANA VOICED ITERATION MARK
+3-2135	U+309D	# HIRAGANA ITERATION MARK
+3-2136	U+309E	# HIRAGANA VOICED ITERATION MARK
+3-2137	U+3003	# DITTO MARK
+3-2138	U+4EDD	# <cjk>
+3-2139	U+3005	# IDEOGRAPHIC ITERATION MARK
+3-213A	U+3006	# IDEOGRAPHIC CLOSING MARK
+3-213B	U+3007	# IDEOGRAPHIC NUMBER ZERO
+3-213C	U+30FC	# KATAKANA-HIRAGANA PROLONGED SOUND MARK
+3-213D	U+2015	# EM DASH	Windows: U+2015
+3-213E	U+2010	# HYPHEN
+3-213F	U+FF0F	# SOLIDUS	Fullwidth: U+FF0F
+3-2140	U+005C	# REVERSE SOLIDUS	Fullwidth: U+FF3C
+3-2141	U+301C	# WAVE DASH	Windows: U+FF5E
+3-2142	U+2016	# DOUBLE VERTICAL LINE	Windows: U+2225
+3-2143	U+FF5C	# VERTICAL LINE	Fullwidth: U+FF5C
+3-2144	U+2026	# HORIZONTAL ELLIPSIS
+3-2145	U+2025	# TWO DOT LEADER
+3-2146	U+2018	# LEFT SINGLE QUOTATION MARK
+3-2147	U+2019	# RIGHT SINGLE QUOTATION MARK
+3-2148	U+201C	# LEFT DOUBLE QUOTATION MARK
+3-2149	U+201D	# RIGHT DOUBLE QUOTATION MARK
+3-214A	U+FF08	# LEFT PARENTHESIS	Fullwidth: U+FF08
+3-214B	U+FF09	# RIGHT PARENTHESIS	Fullwidth: U+FF09
+3-214C	U+3014	# LEFT TORTOISE SHELL BRACKET
+3-214D	U+3015	# RIGHT TORTOISE SHELL BRACKET
+3-214E	U+FF3B	# LEFT SQUARE BRACKET	Fullwidth: U+FF3B
+3-214F	U+FF3D	# RIGHT SQUARE BRACKET	Fullwidth: U+FF3D
+3-2150	U+FF5B	# LEFT CURLY BRACKET	Fullwidth: U+FF5B
+3-2151	U+FF5D	# RIGHT CURLY BRACKET	Fullwidth: U+FF5D
+3-2152	U+3008	# LEFT ANGLE BRACKET
+3-2153	U+3009	# RIGHT ANGLE BRACKET
+3-2154	U+300A	# LEFT DOUBLE ANGLE BRACKET
+3-2155	U+300B	# RIGHT DOUBLE ANGLE BRACKET
+3-2156	U+300C	# LEFT CORNER BRACKET
+3-2157	U+300D	# RIGHT CORNER BRACKET
+3-2158	U+300E	# LEFT WHITE CORNER BRACKET
+3-2159	U+300F	# RIGHT WHITE CORNER BRACKET
+3-215A	U+3010	# LEFT BLACK LENTICULAR BRACKET
+3-215B	U+3011	# RIGHT BLACK LENTICULAR BRACKET
+3-215C	U+FF0B	# PLUS SIGN	Fullwidth: U+FF0B
+3-215D	U+2212	# MINUS SIGN	Windows: U+FF0D
+3-215E	U+00B1	# PLUS-MINUS SIGN
+3-215F	U+00D7	# MULTIPLICATION SIGN
+3-2160	U+00F7	# DIVISION SIGN
+3-2161	U+FF1D	# EQUALS SIGN	Fullwidth: U+FF1D
+3-2162	U+2260	# NOT EQUAL TO
+3-2163	U+FF1C	# LESS-THAN SIGN	Fullwidth: U+FF1C
+3-2164	U+FF1E	# GREATER-THAN SIGN	Fullwidth: U+FF1E
+3-2165	U+2266	# LESS-THAN OVER EQUAL TO
+3-2166	U+2267	# GREATER-THAN OVER EQUAL TO
+3-2167	U+221E	# INFINITY
+3-2168	U+2234	# THEREFORE
+3-2169	U+2642	# MALE SIGN
+3-216A	U+2640	# FEMALE SIGN
+3-216B	U+00B0	# DEGREE SIGN
+3-216C	U+2032	# PRIME
+3-216D	U+2033	# DOUBLE PRIME
+3-216E	U+2103	# DEGREE CELSIUS
+3-216F	U+FFE5	# YEN SIGN	Windows: U+FFE5
+3-2170	U+FF04	# DOLLAR SIGN	Fullwidth: U+FF04
+3-2171	U+00A2	# CENT SIGN	Windows: U+FFE0
+3-2172	U+00A3	# POUND SIGN	Windows: U+FFE1
+3-2173	U+FF05	# PERCENT SIGN	Fullwidth: U+FF05
+3-2174	U+FF03	# NUMBER SIGN	Fullwidth: U+FF03
+3-2175	U+FF06	# AMPERSAND	Fullwidth: U+FF06
+3-2176	U+FF0A	# ASTERISK	Fullwidth: U+FF0A
+3-2177	U+FF20	# COMMERCIAL AT	Fullwidth: U+FF20
+3-2178	U+00A7	# SECTION SIGN
+3-2179	U+2606	# WHITE STAR
+3-217A	U+2605	# BLACK STAR
+3-217B	U+25CB	# WHITE CIRCLE
+3-217C	U+25CF	# BLACK CIRCLE
+3-217D	U+25CE	# BULLSEYE
+3-217E	U+25C7	# WHITE DIAMOND
+3-2221	U+25C6	# BLACK DIAMOND
+3-2222	U+25A1	# WHITE SQUARE
+3-2223	U+25A0	# BLACK SQUARE
+3-2224	U+25B3	# WHITE UP-POINTING TRIANGLE
+3-2225	U+25B2	# BLACK UP-POINTING TRIANGLE
+3-2226	U+25BD	# WHITE DOWN-POINTING TRIANGLE
+3-2227	U+25BC	# BLACK DOWN-POINTING TRIANGLE
+3-2228	U+203B	# REFERENCE MARK
+3-2229	U+3012	# POSTAL MARK
+3-222A	U+2192	# RIGHTWARDS ARROW
+3-222B	U+2190	# LEFTWARDS ARROW
+3-222C	U+2191	# UPWARDS ARROW
+3-222D	U+2193	# DOWNWARDS ARROW
+3-222E	U+3013	# GETA MARK
+3-222F	U+FF07	# APOSTROPHE	Fullwidth: U+FF07
+3-2230	U+FF02	# QUOTATION MARK	[2000]	Fullwidth: U+FF02
+3-2231	U+FF0D	# HYPHEN-MINUS	[2000]	Fullwidth: U+FF0D
+3-2232	U+007E	# TILDE	[2000]	Fullwidth: U+FF5E
+3-2233	U+3033	# VERTICAL KANA REPEAT MARK UPPER HALF	[2000]
+3-2234	U+3034	# VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF	[2000]
+3-2235	U+3035	# VERTICAL KANA REPEAT MARK LOWER HALF	[2000]
+3-2236	U+303B	# VERTICAL IDEOGRAPHIC ITERATION MARK	[2000]	[Unicode3.2]
+3-2237	U+303C	# MASU MARK	[2000]	[Unicode3.2]
+3-2238	U+30FF	# KATAKANA DIGRAPH KOTO	[2000]	[Unicode3.2]
+3-2239	U+309F	# HIRAGANA DIGRAPH YORI	[2000]	[Unicode3.2]
+3-223A	U+2208	# ELEMENT OF	[1983]
+3-223B	U+220B	# CONTAINS AS MEMBER	[1983]
+3-223C	U+2286	# SUBSET OF OR EQUAL TO	[1983]
+3-223D	U+2287	# SUPERSET OF OR EQUAL TO	[1983]
+3-223E	U+2282	# SUBSET OF	[1983]
+3-223F	U+2283	# SUPERSET OF	[1983]
+3-2240	U+222A	# UNION	[1983]
+3-2241	U+2229	# INTERSECTION	[1983]
+3-2242	U+2284	# NOT A SUBSET OF	[2000]
+3-2243	U+2285	# NOT A SUPERSET OF	[2000]
+3-2244	U+228A	# SUBSET OF WITH NOT EQUAL TO	[2000]
+3-2245	U+228B	# SUPERSET OF WITH NOT EQUAL TO	[2000]
+3-2246	U+2209	# NOT AN ELEMENT OF	[2000]
+3-2247	U+2205	# EMPTY SET	[2000]
+3-2248	U+2305	# PROJECTIVE	[2000]
+3-2249	U+2306	# PERSPECTIVE	[2000]
+3-224A	U+2227	# LOGICAL AND	[1983]
+3-224B	U+2228	# LOGICAL OR	[1983]
+3-224C	U+00AC	# NOT SIGN	[1983]	Windows: U+FFE2
+3-224D	U+21D2	# RIGHTWARDS DOUBLE ARROW	[1983]
+3-224E	U+21D4	# LEFT RIGHT DOUBLE ARROW	[1983]
+3-224F	U+2200	# FOR ALL	[1983]
+3-2250	U+2203	# THERE EXISTS	[1983]
+3-2251	U+2295	# CIRCLED PLUS	[2000]
+3-2252	U+2296	# CIRCLED MINUS	[2000]
+3-2253	U+2297	# CIRCLED TIMES	[2000]
+3-2254	U+2225	# PARALLEL TO	[2000]
+3-2255	U+2226	# NOT PARALLEL TO	[2000]
+3-2256	U+2985	# LEFT WHITE PARENTHESIS	[2000]	[Unicode3.2]
+3-2257	U+2986	# RIGHT WHITE PARENTHESIS	[2000]	[Unicode3.2]
+3-2258	U+3018	# LEFT WHITE TORTOISE SHELL BRACKET	[2000]
+3-2259	U+3019	# RIGHT WHITE TORTOISE SHELL BRACKET	[2000]
+3-225A	U+3016	# LEFT WHITE LENTICULAR BRACKET	[2000]
+3-225B	U+3017	# RIGHT WHITE LENTICULAR BRACKET	[2000]
+3-225C	U+2220	# ANGLE	[1983]
+3-225D	U+22A5	# UP TACK	[1983]
+3-225E	U+2312	# ARC	[1983]
+3-225F	U+2202	# PARTIAL DIFFERENTIAL	[1983]
+3-2260	U+2207	# NABLA	[1983]
+3-2261	U+2261	# IDENTICAL TO	[1983]
+3-2262	U+2252	# APPROXIMATELY EQUAL TO OR THE IMAGE OF	[1983]
+3-2263	U+226A	# MUCH LESS-THAN	[1983]
+3-2264	U+226B	# MUCH GREATER-THAN	[1983]
+3-2265	U+221A	# SQUARE ROOT	[1983]
+3-2266	U+223D	# REVERSED TILDE 	[1983]
+3-2267	U+221D	# PROPORTIONAL TO	[1983]
+3-2268	U+2235	# BECAUSE	[1983]
+3-2269	U+222B	# INTEGRAL	[1983]
+3-226A	U+222C	# DOUBLE INTEGRAL	[1983]
+3-226B	U+2262	# NOT IDENTICAL TO	[2000]
+3-226C	U+2243	# ASYMPTOTICALLY EQUAL TO	[2000]
+3-226D	U+2245	# APPROXIMATELY EQUAL TO	[2000]
+3-226E	U+2248	# ALMOST EQUAL TO	[2000]
+3-226F	U+2276	# LESS-THAN OR GREATER-THAN	[2000]
+3-2270	U+2277	# GREATER-THAN OR LESS-THAN	[2000]
+3-2271	U+2194	# LEFT RIGHT ARROW	[2000]
+3-2272	U+212B	# ANGSTROM SIGN	[1983]
+3-2273	U+2030	# PER MILLE SIGN	[1983]
+3-2274	U+266F	# MUSIC SHARP SIGN	[1983]
+3-2275	U+266D	# MUSIC FLAT SIGN	[1983]
+3-2276	U+266A	# EIGHTH NOTE	[1983]
+3-2277	U+2020	# DAGGER	[1983]
+3-2278	U+2021	# DOUBLE DAGGER	[1983]
+3-2279	U+00B6	# PILCROW SIGN	[1983]
+3-227A	U+266E	# MUSIC NATURAL SIGN	[2000]
+3-227B	U+266B	# BEAMED EIGHTH NOTES	[2000]
+3-227C	U+266C	# BEAMED SIXTEENTH NOTES	[2000]
+3-227D	U+2669	# QUARTER NOTE	[2000]
+3-227E	U+25EF	# LARGE CIRCLE	[1983]
+3-2321	U+25B7	# WHITE RIGHT-POINTING TRIANGLE	[2000]
+3-2322	U+25B6	# BLACK RIGHT-POINTING TRIANGLE	[2000]
+3-2323	U+25C1	# WHITE LEFT-POINTING TRIANGLE	[2000]
+3-2324	U+25C0	# BLACK LEFT-POINTING TRIANGLE	[2000]
+3-2325	U+2197	# NORTH EAST ARROW	[2000]
+3-2326	U+2198	# SOUTH EAST ARROW	[2000]
+3-2327	U+2196	# NORTH WEST ARROW	[2000]
+3-2328	U+2199	# SOUTH WEST ARROW	[2000]
+3-2329	U+21C4	# RIGHTWARDS ARROW OVER LEFTWARDS ARROW	[2000]
+3-232A	U+21E8	# RIGHTWARDS WHITE ARROW	[2000]
+3-232B	U+21E6	# LEFTWARDS WHITE ARROW	[2000]
+3-232C	U+21E7	# UPWARDS WHITE ARROW	[2000]
+3-232D	U+21E9	# DOWNWARDS WHITE ARROW	[2000]
+3-232E	U+2934	# ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS	[2000]	[Unicode3.2]
+3-232F	U+2935	# ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS	[2000]	[Unicode3.2]
+3-2330	U+FF10	# DIGIT ZERO	Fullwidth: U+FF10
+3-2331	U+FF11	# DIGIT ONE	Fullwidth: U+FF11
+3-2332	U+FF12	# DIGIT TWO	Fullwidth: U+FF12
+3-2333	U+FF13	# DIGIT THREE	Fullwidth: U+FF13
+3-2334	U+FF14	# DIGIT FOUR	Fullwidth: U+FF14
+3-2335	U+FF15	# DIGIT FIVE	Fullwidth: U+FF15
+3-2336	U+FF16	# DIGIT SIX	Fullwidth: U+FF16
+3-2337	U+FF17	# DIGIT SEVEN	Fullwidth: U+FF17
+3-2338	U+FF18	# DIGIT EIGHT	Fullwidth: U+FF18
+3-2339	U+FF19	# DIGIT NINE	Fullwidth: U+FF19
+3-233A	U+29BF	# CIRCLED BULLET	[2000]	[Unicode3.2]
+3-233B	U+25C9	# FISHEYE	[2000]
+3-233C	U+303D	# PART ALTERNATION MARK	[2000]	[Unicode3.2]
+3-233D	U+FE46	# WHITE SESAME DOT	[2000]	[Unicode3.2]
+3-233E	U+FE45	# SESAME DOT	[2000]	[Unicode3.2]
+3-233F	U+25E6	# WHITE BULLET	[2000]
+3-2340	U+2022	# BULLET	[2000]
+3-2341	U+FF21	# LATIN CAPITAL LETTER A	Fullwidth: U+FF21
+3-2342	U+FF22	# LATIN CAPITAL LETTER B	Fullwidth: U+FF22
+3-2343	U+FF23	# LATIN CAPITAL LETTER C	Fullwidth: U+FF23
+3-2344	U+FF24	# LATIN CAPITAL LETTER D	Fullwidth: U+FF24
+3-2345	U+FF25	# LATIN CAPITAL LETTER E	Fullwidth: U+FF25
+3-2346	U+FF26	# LATIN CAPITAL LETTER F	Fullwidth: U+FF26
+3-2347	U+FF27	# LATIN CAPITAL LETTER G	Fullwidth: U+FF27
+3-2348	U+FF28	# LATIN CAPITAL LETTER H	Fullwidth: U+FF28
+3-2349	U+FF29	# LATIN CAPITAL LETTER I	Fullwidth: U+FF29
+3-234A	U+FF2A	# LATIN CAPITAL LETTER J	Fullwidth: U+FF2A
+3-234B	U+FF2B	# LATIN CAPITAL LETTER K	Fullwidth: U+FF2B
+3-234C	U+FF2C	# LATIN CAPITAL LETTER L	Fullwidth: U+FF2C
+3-234D	U+FF2D	# LATIN CAPITAL LETTER M	Fullwidth: U+FF2D
+3-234E	U+FF2E	# LATIN CAPITAL LETTER N	Fullwidth: U+FF2E
+3-234F	U+FF2F	# LATIN CAPITAL LETTER O	Fullwidth: U+FF2F
+3-2350	U+FF30	# LATIN CAPITAL LETTER P	Fullwidth: U+FF30
+3-2351	U+FF31	# LATIN CAPITAL LETTER Q	Fullwidth: U+FF31
+3-2352	U+FF32	# LATIN CAPITAL LETTER R	Fullwidth: U+FF32
+3-2353	U+FF33	# LATIN CAPITAL LETTER S	Fullwidth: U+FF33
+3-2354	U+FF34	# LATIN CAPITAL LETTER T	Fullwidth: U+FF34
+3-2355	U+FF35	# LATIN CAPITAL LETTER U	Fullwidth: U+FF35
+3-2356	U+FF36	# LATIN CAPITAL LETTER V	Fullwidth: U+FF36
+3-2357	U+FF37	# LATIN CAPITAL LETTER W	Fullwidth: U+FF37
+3-2358	U+FF38	# LATIN CAPITAL LETTER X	Fullwidth: U+FF38
+3-2359	U+FF39	# LATIN CAPITAL LETTER Y	Fullwidth: U+FF39
+3-235A	U+FF3A	# LATIN CAPITAL LETTER Z	Fullwidth: U+FF3A
+3-235B	U+2213	# MINUS-OR-PLUS SIGN	[2000]
+3-235C	U+2135	# ALEF SYMBOL	[2000]
+3-235D	U+210F	# PLANCK CONSTANT OVER TWO PI	[2000]
+3-235E	U+33CB	# SQUARE HP	[2000]
+3-235F	U+2113	# SCRIPT SMALL L	[2000]
+3-2360	U+2127	# INVERTED OHM SIGN	[2000]
+3-2361	U+FF41	# LATIN SMALL LETTER A	Fullwidth: U+FF41
+3-2362	U+FF42	# LATIN SMALL LETTER B	Fullwidth: U+FF42
+3-2363	U+FF43	# LATIN SMALL LETTER C	Fullwidth: U+FF43
+3-2364	U+FF44	# LATIN SMALL LETTER D	Fullwidth: U+FF44
+3-2365	U+FF45	# LATIN SMALL LETTER E	Fullwidth: U+FF45
+3-2366	U+FF46	# LATIN SMALL LETTER F	Fullwidth: U+FF46
+3-2367	U+FF47	# LATIN SMALL LETTER G	Fullwidth: U+FF47
+3-2368	U+FF48	# LATIN SMALL LETTER H	Fullwidth: U+FF48
+3-2369	U+FF49	# LATIN SMALL LETTER I	Fullwidth: U+FF49
+3-236A	U+FF4A	# LATIN SMALL LETTER J	Fullwidth: U+FF4A
+3-236B	U+FF4B	# LATIN SMALL LETTER K	Fullwidth: U+FF4B
+3-236C	U+FF4C	# LATIN SMALL LETTER L	Fullwidth: U+FF4C
+3-236D	U+FF4D	# LATIN SMALL LETTER M	Fullwidth: U+FF4D
+3-236E	U+FF4E	# LATIN SMALL LETTER N	Fullwidth: U+FF4E
+3-236F	U+FF4F	# LATIN SMALL LETTER O	Fullwidth: U+FF4F
+3-2370	U+FF50	# LATIN SMALL LETTER P	Fullwidth: U+FF50
+3-2371	U+FF51	# LATIN SMALL LETTER Q	Fullwidth: U+FF51
+3-2372	U+FF52	# LATIN SMALL LETTER R	Fullwidth: U+FF52
+3-2373	U+FF53	# LATIN SMALL LETTER S	Fullwidth: U+FF53
+3-2374	U+FF54	# LATIN SMALL LETTER T	Fullwidth: U+FF54
+3-2375	U+FF55	# LATIN SMALL LETTER U	Fullwidth: U+FF55
+3-2376	U+FF56	# LATIN SMALL LETTER V	Fullwidth: U+FF56
+3-2377	U+FF57	# LATIN SMALL LETTER W	Fullwidth: U+FF57
+3-2378	U+FF58	# LATIN SMALL LETTER X	Fullwidth: U+FF58
+3-2379	U+FF59	# LATIN SMALL LETTER Y	Fullwidth: U+FF59
+3-237A	U+FF5A	# LATIN SMALL LETTER Z	Fullwidth: U+FF5A
+3-237B	U+30A0	# KATAKANA-HIRAGANA DOUBLE HYPHEN	[2000]	[Unicode3.2]
+3-237C	U+2013	# EN DASH	[2000]
+3-237D	U+29FA	# DOUBLE PLUS	[2000]	[Unicode3.2]
+3-237E	U+29FB	# TRIPLE PLUS	[2000]	[Unicode3.2]
+3-2421	U+3041	# HIRAGANA LETTER SMALL A
+3-2422	U+3042	# HIRAGANA LETTER A
+3-2423	U+3043	# HIRAGANA LETTER SMALL I
+3-2424	U+3044	# HIRAGANA LETTER I
+3-2425	U+3045	# HIRAGANA LETTER SMALL U
+3-2426	U+3046	# HIRAGANA LETTER U
+3-2427	U+3047	# HIRAGANA LETTER SMALL E
+3-2428	U+3048	# HIRAGANA LETTER E
+3-2429	U+3049	# HIRAGANA LETTER SMALL O
+3-242A	U+304A	# HIRAGANA LETTER O
+3-242B	U+304B	# HIRAGANA LETTER KA
+3-242C	U+304C	# HIRAGANA LETTER GA
+3-242D	U+304D	# HIRAGANA LETTER KI
+3-242E	U+304E	# HIRAGANA LETTER GI
+3-242F	U+304F	# HIRAGANA LETTER KU
+3-2430	U+3050	# HIRAGANA LETTER GU
+3-2431	U+3051	# HIRAGANA LETTER KE
+3-2432	U+3052	# HIRAGANA LETTER GE
+3-2433	U+3053	# HIRAGANA LETTER KO
+3-2434	U+3054	# HIRAGANA LETTER GO
+3-2435	U+3055	# HIRAGANA LETTER SA
+3-2436	U+3056	# HIRAGANA LETTER ZA
+3-2437	U+3057	# HIRAGANA LETTER SI
+3-2438	U+3058	# HIRAGANA LETTER ZI
+3-2439	U+3059	# HIRAGANA LETTER SU
+3-243A	U+305A	# HIRAGANA LETTER ZU
+3-243B	U+305B	# HIRAGANA LETTER SE
+3-243C	U+305C	# HIRAGANA LETTER ZE
+3-243D	U+305D	# HIRAGANA LETTER SO
+3-243E	U+305E	# HIRAGANA LETTER ZO
+3-243F	U+305F	# HIRAGANA LETTER TA
+3-2440	U+3060	# HIRAGANA LETTER DA
+3-2441	U+3061	# HIRAGANA LETTER TI
+3-2442	U+3062	# HIRAGANA LETTER DI
+3-2443	U+3063	# HIRAGANA LETTER SMALL TU
+3-2444	U+3064	# HIRAGANA LETTER TU
+3-2445	U+3065	# HIRAGANA LETTER DU
+3-2446	U+3066	# HIRAGANA LETTER TE
+3-2447	U+3067	# HIRAGANA LETTER DE
+3-2448	U+3068	# HIRAGANA LETTER TO
+3-2449	U+3069	# HIRAGANA LETTER DO
+3-244A	U+306A	# HIRAGANA LETTER NA
+3-244B	U+306B	# HIRAGANA LETTER NI
+3-244C	U+306C	# HIRAGANA LETTER NU
+3-244D	U+306D	# HIRAGANA LETTER NE
+3-244E	U+306E	# HIRAGANA LETTER NO
+3-244F	U+306F	# HIRAGANA LETTER HA
+3-2450	U+3070	# HIRAGANA LETTER BA
+3-2451	U+3071	# HIRAGANA LETTER PA
+3-2452	U+3072	# HIRAGANA LETTER HI
+3-2453	U+3073	# HIRAGANA LETTER BI
+3-2454	U+3074	# HIRAGANA LETTER PI
+3-2455	U+3075	# HIRAGANA LETTER HU
+3-2456	U+3076	# HIRAGANA LETTER BU
+3-2457	U+3077	# HIRAGANA LETTER PU
+3-2458	U+3078	# HIRAGANA LETTER HE
+3-2459	U+3079	# HIRAGANA LETTER BE
+3-245A	U+307A	# HIRAGANA LETTER PE
+3-245B	U+307B	# HIRAGANA LETTER HO
+3-245C	U+307C	# HIRAGANA LETTER BO
+3-245D	U+307D	# HIRAGANA LETTER PO
+3-245E	U+307E	# HIRAGANA LETTER MA
+3-245F	U+307F	# HIRAGANA LETTER MI
+3-2460	U+3080	# HIRAGANA LETTER MU
+3-2461	U+3081	# HIRAGANA LETTER ME
+3-2462	U+3082	# HIRAGANA LETTER MO
+3-2463	U+3083	# HIRAGANA LETTER SMALL YA
+3-2464	U+3084	# HIRAGANA LETTER YA
+3-2465	U+3085	# HIRAGANA LETTER SMALL YU
+3-2466	U+3086	# HIRAGANA LETTER YU
+3-2467	U+3087	# HIRAGANA LETTER SMALL YO
+3-2468	U+3088	# HIRAGANA LETTER YO
+3-2469	U+3089	# HIRAGANA LETTER RA
+3-246A	U+308A	# HIRAGANA LETTER RI
+3-246B	U+308B	# HIRAGANA LETTER RU
+3-246C	U+308C	# HIRAGANA LETTER RE
+3-246D	U+308D	# HIRAGANA LETTER RO
+3-246E	U+308E	# HIRAGANA LETTER SMALL WA
+3-246F	U+308F	# HIRAGANA LETTER WA
+3-2470	U+3090	# HIRAGANA LETTER WI
+3-2471	U+3091	# HIRAGANA LETTER WE
+3-2472	U+3092	# HIRAGANA LETTER WO
+3-2473	U+3093	# HIRAGANA LETTER N
+3-2474	U+3094	# HIRAGANA LETTER VU	[2000]
+3-2475	U+3095	# HIRAGANA LETTER SMALL KA	[2000]	[Unicode3.2]
+3-2476	U+3096	# HIRAGANA LETTER SMALL KE	[2000]	[Unicode3.2]
+3-2477	U+304B+309A	# 	[2000]	Private: U+F711
+3-2478	U+304D+309A	# 	[2000]	Private: U+F712
+3-2479	U+304F+309A	# 	[2000]	Private: U+F713
+3-247A	U+3051+309A	# 	[2000]	Private: U+F714
+3-247B	U+3053+309A	# 	[2000]	Private: U+F715
+3-247C		# <reserved>
+3-247D		# <reserved>
+3-247E		# <reserved>
+3-2521	U+30A1	# KATAKANA LETTER SMALL A
+3-2522	U+30A2	# KATAKANA LETTER A
+3-2523	U+30A3	# KATAKANA LETTER SMALL I
+3-2524	U+30A4	# KATAKANA LETTER I
+3-2525	U+30A5	# KATAKANA LETTER SMALL U
+3-2526	U+30A6	# KATAKANA LETTER U
+3-2527	U+30A7	# KATAKANA LETTER SMALL E
+3-2528	U+30A8	# KATAKANA LETTER E
+3-2529	U+30A9	# KATAKANA LETTER SMALL O
+3-252A	U+30AA	# KATAKANA LETTER O
+3-252B	U+30AB	# KATAKANA LETTER KA
+3-252C	U+30AC	# KATAKANA LETTER GA
+3-252D	U+30AD	# KATAKANA LETTER KI
+3-252E	U+30AE	# KATAKANA LETTER GI
+3-252F	U+30AF	# KATAKANA LETTER KU
+3-2530	U+30B0	# KATAKANA LETTER GU
+3-2531	U+30B1	# KATAKANA LETTER KE
+3-2532	U+30B2	# KATAKANA LETTER GE
+3-2533	U+30B3	# KATAKANA LETTER KO
+3-2534	U+30B4	# KATAKANA LETTER GO
+3-2535	U+30B5	# KATAKANA LETTER SA
+3-2536	U+30B6	# KATAKANA LETTER ZA
+3-2537	U+30B7	# KATAKANA LETTER SI
+3-2538	U+30B8	# KATAKANA LETTER ZI
+3-2539	U+30B9	# KATAKANA LETTER SU
+3-253A	U+30BA	# KATAKANA LETTER ZU
+3-253B	U+30BB	# KATAKANA LETTER SE
+3-253C	U+30BC	# KATAKANA LETTER ZE
+3-253D	U+30BD	# KATAKANA LETTER SO
+3-253E	U+30BE	# KATAKANA LETTER ZO
+3-253F	U+30BF	# KATAKANA LETTER TA
+3-2540	U+30C0	# KATAKANA LETTER DA
+3-2541	U+30C1	# KATAKANA LETTER TI
+3-2542	U+30C2	# KATAKANA LETTER DI
+3-2543	U+30C3	# KATAKANA LETTER SMALL TU
+3-2544	U+30C4	# KATAKANA LETTER TU
+3-2545	U+30C5	# KATAKANA LETTER DU
+3-2546	U+30C6	# KATAKANA LETTER TE
+3-2547	U+30C7	# KATAKANA LETTER DE
+3-2548	U+30C8	# KATAKANA LETTER TO
+3-2549	U+30C9	# KATAKANA LETTER DO
+3-254A	U+30CA	# KATAKANA LETTER NA
+3-254B	U+30CB	# KATAKANA LETTER NI
+3-254C	U+30CC	# KATAKANA LETTER NU
+3-254D	U+30CD	# KATAKANA LETTER NE
+3-254E	U+30CE	# KATAKANA LETTER NO
+3-254F	U+30CF	# KATAKANA LETTER HA
+3-2550	U+30D0	# KATAKANA LETTER BA
+3-2551	U+30D1	# KATAKANA LETTER PA
+3-2552	U+30D2	# KATAKANA LETTER HI
+3-2553	U+30D3	# KATAKANA LETTER BI
+3-2554	U+30D4	# KATAKANA LETTER PI
+3-2555	U+30D5	# KATAKANA LETTER HU
+3-2556	U+30D6	# KATAKANA LETTER BU
+3-2557	U+30D7	# KATAKANA LETTER PU
+3-2558	U+30D8	# KATAKANA LETTER HE
+3-2559	U+30D9	# KATAKANA LETTER BE
+3-255A	U+30DA	# KATAKANA LETTER PE
+3-255B	U+30DB	# KATAKANA LETTER HO
+3-255C	U+30DC	# KATAKANA LETTER BO
+3-255D	U+30DD	# KATAKANA LETTER PO
+3-255E	U+30DE	# KATAKANA LETTER MA
+3-255F	U+30DF	# KATAKANA LETTER MI
+3-2560	U+30E0	# KATAKANA LETTER MU
+3-2561	U+30E1	# KATAKANA LETTER ME
+3-2562	U+30E2	# KATAKANA LETTER MO
+3-2563	U+30E3	# KATAKANA LETTER SMALL YA
+3-2564	U+30E4	# KATAKANA LETTER YA
+3-2565	U+30E5	# KATAKANA LETTER SMALL YU
+3-2566	U+30E6	# KATAKANA LETTER YU
+3-2567	U+30E7	# KATAKANA LETTER SMALL YO
+3-2568	U+30E8	# KATAKANA LETTER YO
+3-2569	U+30E9	# KATAKANA LETTER RA
+3-256A	U+30EA	# KATAKANA LETTER RI
+3-256B	U+30EB	# KATAKANA LETTER RU
+3-256C	U+30EC	# KATAKANA LETTER RE
+3-256D	U+30ED	# KATAKANA LETTER RO
+3-256E	U+30EE	# KATAKANA LETTER SMALL WA
+3-256F	U+30EF	# KATAKANA LETTER WA
+3-2570	U+30F0	# KATAKANA LETTER WI
+3-2571	U+30F1	# KATAKANA LETTER WE
+3-2572	U+30F2	# KATAKANA LETTER WO
+3-2573	U+30F3	# KATAKANA LETTER N
+3-2574	U+30F4	# KATAKANA LETTER VU
+3-2575	U+30F5	# KATAKANA LETTER SMALL KA
+3-2576	U+30F6	# KATAKANA LETTER SMALL KE
+3-2577	U+30AB+309A	# 	[2000]	Private: U+F716
+3-2578	U+30AD+309A	# 	[2000]	Private: U+F717
+3-2579	U+30AF+309A	# 	[2000]	Private: U+F718
+3-257A	U+30B1+309A	# 	[2000]	Private: U+F719
+3-257B	U+30B3+309A	# 	[2000]	Private: U+F71A
+3-257C	U+30BB+309A	# 	[2000]	Private: U+F71B
+3-257D	U+30C4+309A	# 	[2000]	Private: U+F71C
+3-257E	U+30C8+309A	# 	[2000]	Private: U+F71D
+3-2621	U+0391	# GREEK CAPITAL LETTER ALPHA
+3-2622	U+0392	# GREEK CAPITAL LETTER BETA
+3-2623	U+0393	# GREEK CAPITAL LETTER GAMMA
+3-2624	U+0394	# GREEK CAPITAL LETTER DELTA
+3-2625	U+0395	# GREEK CAPITAL LETTER EPSILON
+3-2626	U+0396	# GREEK CAPITAL LETTER ZETA
+3-2627	U+0397	# GREEK CAPITAL LETTER ETA
+3-2628	U+0398	# GREEK CAPITAL LETTER THETA
+3-2629	U+0399	# GREEK CAPITAL LETTER IOTA
+3-262A	U+039A	# GREEK CAPITAL LETTER KAPPA
+3-262B	U+039B	# GREEK CAPITAL LETTER LAMDA
+3-262C	U+039C	# GREEK CAPITAL LETTER MU
+3-262D	U+039D	# GREEK CAPITAL LETTER NU
+3-262E	U+039E	# GREEK CAPITAL LETTER XI
+3-262F	U+039F	# GREEK CAPITAL LETTER OMICRON
+3-2630	U+03A0	# GREEK CAPITAL LETTER PI
+3-2631	U+03A1	# GREEK CAPITAL LETTER RHO
+3-2632	U+03A3	# GREEK CAPITAL LETTER SIGMA
+3-2633	U+03A4	# GREEK CAPITAL LETTER TAU
+3-2634	U+03A5	# GREEK CAPITAL LETTER UPSILON
+3-2635	U+03A6	# GREEK CAPITAL LETTER PHI
+3-2636	U+03A7	# GREEK CAPITAL LETTER CHI
+3-2637	U+03A8	# GREEK CAPITAL LETTER PSI
+3-2638	U+03A9	# GREEK CAPITAL LETTER OMEGA
+3-2639	U+2664	# WHITE SPADE SUIT	[2000]
+3-263A	U+2660	# BLACK SPADE SUIT	[2000]
+3-263B	U+2662	# WHITE DIAMOND SUIT	[2000]
+3-263C	U+2666	# BLACK DIAMOND SUIT	[2000]
+3-263D	U+2661	# WHITE HEART SUIT	[2000]
+3-263E	U+2665	# BLACK HEART SUIT	[2000]
+3-263F	U+2667	# WHITE CLUB SUIT	[2000]
+3-2640	U+2663	# BLACK CLUB SUIT	[2000]
+3-2641	U+03B1	# GREEK SMALL LETTER ALPHA
+3-2642	U+03B2	# GREEK SMALL LETTER BETA
+3-2643	U+03B3	# GREEK SMALL LETTER GAMMA
+3-2644	U+03B4	# GREEK SMALL LETTER DELTA
+3-2645	U+03B5	# GREEK SMALL LETTER EPSILON
+3-2646	U+03B6	# GREEK SMALL LETTER ZETA
+3-2647	U+03B7	# GREEK SMALL LETTER ETA
+3-2648	U+03B8	# GREEK SMALL LETTER THETA
+3-2649	U+03B9	# GREEK SMALL LETTER IOTA
+3-264A	U+03BA	# GREEK SMALL LETTER KAPPA
+3-264B	U+03BB	# GREEK SMALL LETTER LAMDA
+3-264C	U+03BC	# GREEK SMALL LETTER MU
+3-264D	U+03BD	# GREEK SMALL LETTER NU
+3-264E	U+03BE	# GREEK SMALL LETTER XI
+3-264F	U+03BF	# GREEK SMALL LETTER OMICRON
+3-2650	U+03C0	# GREEK SMALL LETTER PI
+3-2651	U+03C1	# GREEK SMALL LETTER RHO
+3-2652	U+03C3	# GREEK SMALL LETTER SIGMA
+3-2653	U+03C4	# GREEK SMALL LETTER TAU
+3-2654	U+03C5	# GREEK SMALL LETTER UPSILON
+3-2655	U+03C6	# GREEK SMALL LETTER PHI
+3-2656	U+03C7	# GREEK SMALL LETTER CHI
+3-2657	U+03C8	# GREEK SMALL LETTER PSI
+3-2658	U+03C9	# GREEK SMALL LETTER OMEGA
+3-2659	U+03C2	# GREEK SMALL LETTER FINAL SIGMA	[2000]
+3-265A	U+24F5	# DOUBLE CIRCLED DIGIT ONE	[2000]	[Unicode3.2]
+3-265B	U+24F6	# DOUBLE CIRCLED DIGIT TWO	[2000]	[Unicode3.2]
+3-265C	U+24F7	# DOUBLE CIRCLED DIGIT THREE	[2000]	[Unicode3.2]
+3-265D	U+24F8	# DOUBLE CIRCLED DIGIT FOUR	[2000]	[Unicode3.2]
+3-265E	U+24F9	# DOUBLE CIRCLED DIGIT FIVE	[2000]	[Unicode3.2]
+3-265F	U+24FA	# DOUBLE CIRCLED DIGIT SIX	[2000]	[Unicode3.2]
+3-2660	U+24FB	# DOUBLE CIRCLED DIGIT SEVEN	[2000]	[Unicode3.2]
+3-2661	U+24FC	# DOUBLE CIRCLED DIGIT EIGHT	[2000]	[Unicode3.2]
+3-2662	U+24FD	# DOUBLE CIRCLED DIGIT NINE	[2000]	[Unicode3.2]
+3-2663	U+24FE	# DOUBLE CIRCLED NUMBER TEN	[2000]	[Unicode3.2]
+3-2664	U+2616	# WHITE SHOGI PIECE	[2000]	[Unicode3.2]
+3-2665	U+2617	# BLACK SHOGI PIECE	[2000]	[Unicode3.2]
+3-2666	U+3020	# POSTAL MARK FACE	[2000]
+3-2667	U+260E	# BLACK TELEPHONE	[2000]
+3-2668	U+2600	# BLACK SUN WITH RAYS	[2000]
+3-2669	U+2601	# CLOUD	[2000]
+3-266A	U+2602	# UMBRELLA	[2000]
+3-266B	U+2603	# SNOWMAN	[2000]
+3-266C	U+2668	# HOT SPRINGS	[2000]
+3-266D	U+25B1	# WHITE PARALLELOGRAM	[2000]
+3-266E	U+31F0	# KATAKANA LETTER SMALL KU	[2000]	[Unicode3.2]
+3-266F	U+31F1	# KATAKANA LETTER SMALL SI	[2000]	[Unicode3.2]
+3-2670	U+31F2	# KATAKANA LETTER SMALL SU	[2000]	[Unicode3.2]
+3-2671	U+31F3	# KATAKANA LETTER SMALL TO	[2000]	[Unicode3.2]
+3-2672	U+31F4	# KATAKANA LETTER SMALL NU	[2000]	[Unicode3.2]
+3-2673	U+31F5	# KATAKANA LETTER SMALL HA	[2000]	[Unicode3.2]
+3-2674	U+31F6	# KATAKANA LETTER SMALL HI	[2000]	[Unicode3.2]
+3-2675	U+31F7	# KATAKANA LETTER SMALL HU	[2000]	[Unicode3.2]
+3-2676	U+31F8	# KATAKANA LETTER SMALL HE	[2000]	[Unicode3.2]
+3-2677	U+31F9	# KATAKANA LETTER SMALL HO	[2000]	[Unicode3.2]
+3-2678	U+31F7+309A	# 	[2000]	Private: U+F734
+3-2679	U+31FA	# KATAKANA LETTER SMALL MU	[2000]	[Unicode3.2]
+3-267A	U+31FB	# KATAKANA LETTER SMALL RA	[2000]	[Unicode3.2]
+3-267B	U+31FC	# KATAKANA LETTER SMALL RI	[2000]	[Unicode3.2]
+3-267C	U+31FD	# KATAKANA LETTER SMALL RU	[2000]	[Unicode3.2]
+3-267D	U+31FE	# KATAKANA LETTER SMALL RE	[2000]	[Unicode3.2]
+3-267E	U+31FF	# KATAKANA LETTER SMALL RO	[2000]	[Unicode3.2]
+3-2721	U+0410	# CYRILLIC CAPITAL LETTER A
+3-2722	U+0411	# CYRILLIC CAPITAL LETTER BE
+3-2723	U+0412	# CYRILLIC CAPITAL LETTER VE
+3-2724	U+0413	# CYRILLIC CAPITAL LETTER GHE
+3-2725	U+0414	# CYRILLIC CAPITAL LETTER DE
+3-2726	U+0415	# CYRILLIC CAPITAL LETTER IE
+3-2727	U+0401	# CYRILLIC CAPITAL LETTER IO
+3-2728	U+0416	# CYRILLIC CAPITAL LETTER ZHE
+3-2729	U+0417	# CYRILLIC CAPITAL LETTER ZE
+3-272A	U+0418	# CYRILLIC CAPITAL LETTER I
+3-272B	U+0419	# CYRILLIC CAPITAL LETTER SHORT I
+3-272C	U+041A	# CYRILLIC CAPITAL LETTER KA
+3-272D	U+041B	# CYRILLIC CAPITAL LETTER EL
+3-272E	U+041C	# CYRILLIC CAPITAL LETTER EM
+3-272F	U+041D	# CYRILLIC CAPITAL LETTER EN
+3-2730	U+041E	# CYRILLIC CAPITAL LETTER O
+3-2731	U+041F	# CYRILLIC CAPITAL LETTER PE
+3-2732	U+0420	# CYRILLIC CAPITAL LETTER ER
+3-2733	U+0421	# CYRILLIC CAPITAL LETTER ES
+3-2734	U+0422	# CYRILLIC CAPITAL LETTER TE
+3-2735	U+0423	# CYRILLIC CAPITAL LETTER U
+3-2736	U+0424	# CYRILLIC CAPITAL LETTER EF
+3-2737	U+0425	# CYRILLIC CAPITAL LETTER HA
+3-2738	U+0426	# CYRILLIC CAPITAL LETTER TSE
+3-2739	U+0427	# CYRILLIC CAPITAL LETTER CHE
+3-273A	U+0428	# CYRILLIC CAPITAL LETTER SHA
+3-273B	U+0429	# CYRILLIC CAPITAL LETTER SHCHA
+3-273C	U+042A	# CYRILLIC CAPITAL LETTER HARD SIGN
+3-273D	U+042B	# CYRILLIC CAPITAL LETTER YERU
+3-273E	U+042C	# CYRILLIC CAPITAL LETTER SOFT SIGN
+3-273F	U+042D	# CYRILLIC CAPITAL LETTER E
+3-2740	U+042E	# CYRILLIC CAPITAL LETTER YU
+3-2741	U+042F	# CYRILLIC CAPITAL LETTER YA
+3-2742	U+23BE	# DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT	[2000]	[Unicode3.2]
+3-2743	U+23BF	# DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT	[2000]	[Unicode3.2]
+3-2744	U+23C0	# DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE	[2000]	[Unicode3.2]
+3-2745	U+23C1	# DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE	[2000]	[Unicode3.2]
+3-2746	U+23C2	# DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE	[2000]	[Unicode3.2]
+3-2747	U+23C3	# DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE	[2000]	[Unicode3.2]
+3-2748	U+23C4	# DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE	[2000]	[Unicode3.2]
+3-2749	U+23C5	# DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE	[2000]	[Unicode3.2]
+3-274A	U+23C6	# DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE	[2000]	[Unicode3.2]
+3-274B	U+23C7	# DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE	[2000]	[Unicode3.2]
+3-274C	U+23C8	# DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE	[2000]	[Unicode3.2]
+3-274D	U+23C9	# DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL	[2000]	[Unicode3.2]
+3-274E	U+23CA	# DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL	[2000]	[Unicode3.2]
+3-274F	U+23CB	# DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT	[2000]	[Unicode3.2]
+3-2750	U+23CC	# DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT	[2000]	[Unicode3.2]
+3-2751	U+0430	# CYRILLIC SMALL LETTER A
+3-2752	U+0431	# CYRILLIC SMALL LETTER BE
+3-2753	U+0432	# CYRILLIC SMALL LETTER VE
+3-2754	U+0433	# CYRILLIC SMALL LETTER GHE
+3-2755	U+0434	# CYRILLIC SMALL LETTER DE
+3-2756	U+0435	# CYRILLIC SMALL LETTER IE
+3-2757	U+0451	# CYRILLIC SMALL LETTER IO
+3-2758	U+0436	# CYRILLIC SMALL LETTER ZHE
+3-2759	U+0437	# CYRILLIC SMALL LETTER ZE
+3-275A	U+0438	# CYRILLIC SMALL LETTER I
+3-275B	U+0439	# CYRILLIC SMALL LETTER SHORT I
+3-275C	U+043A	# CYRILLIC SMALL LETTER KA
+3-275D	U+043B	# CYRILLIC SMALL LETTER EL
+3-275E	U+043C	# CYRILLIC SMALL LETTER EM
+3-275F	U+043D	# CYRILLIC SMALL LETTER EN
+3-2760	U+043E	# CYRILLIC SMALL LETTER O
+3-2761	U+043F	# CYRILLIC SMALL LETTER PE
+3-2762	U+0440	# CYRILLIC SMALL LETTER ER
+3-2763	U+0441	# CYRILLIC SMALL LETTER ES
+3-2764	U+0442	# CYRILLIC SMALL LETTER TE
+3-2765	U+0443	# CYRILLIC SMALL LETTER U
+3-2766	U+0444	# CYRILLIC SMALL LETTER EF
+3-2767	U+0445	# CYRILLIC SMALL LETTER HA
+3-2768	U+0446	# CYRILLIC SMALL LETTER TSE
+3-2769	U+0447	# CYRILLIC SMALL LETTER CHE
+3-276A	U+0448	# CYRILLIC SMALL LETTER SHA
+3-276B	U+0449	# CYRILLIC SMALL LETTER SHCHA
+3-276C	U+044A	# CYRILLIC SMALL LETTER HARD SIGN
+3-276D	U+044B	# CYRILLIC SMALL LETTER YERU
+3-276E	U+044C	# CYRILLIC SMALL LETTER SOFT SIGN
+3-276F	U+044D	# CYRILLIC SMALL LETTER E
+3-2770	U+044E	# CYRILLIC SMALL LETTER YU
+3-2771	U+044F	# CYRILLIC SMALL LETTER YA
+3-2772	U+30F7	# KATAKANA LETTER VA	[2000]
+3-2773	U+30F8	# KATAKANA LETTER VI	[2000]
+3-2774	U+30F9	# KATAKANA LETTER VE	[2000]
+3-2775	U+30FA	# KATAKANA LETTER VO	[2000]
+3-2776	U+22DA	# LESS-THAN EQUAL TO OR GREATER-THAN	[2000]
+3-2777	U+22DB	# GREATER-THAN EQUAL TO OR LESS-THAN	[2000]
+3-2778	U+2153	# VULGAR FRACTION ONE THIRD	[2000]
+3-2779	U+2154	# VULGAR FRACTION TWO THIRDS	[2000]
+3-277A	U+2155	# VULGAR FRACTION ONE FIFTH	[2000]
+3-277B	U+2713	# CHECK MARK	[2000]
+3-277C	U+2318	# PLACE OF INTEREST SIGN	[2000]
+3-277D	U+2423	# OPEN BOX	[2000]
+3-277E	U+23CE	# RETURN SYMBOL	[2000]	[Unicode3.2]
+3-2821	U+2500	# BOX DRAWINGS LIGHT HORIZONTAL	[1983]
+3-2822	U+2502	# BOX DRAWINGS LIGHT VERTICAL	[1983]
+3-2823	U+250C	# BOX DRAWINGS LIGHT DOWN AND RIGHT	[1983]
+3-2824	U+2510	# BOX DRAWINGS LIGHT DOWN AND LEFT	[1983]
+3-2825	U+2518	# BOX DRAWINGS LIGHT UP AND LEFT	[1983]
+3-2826	U+2514	# BOX DRAWINGS LIGHT UP AND RIGHT	[1983]
+3-2827	U+251C	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT	[1983]
+3-2828	U+252C	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL	[1983]
+3-2829	U+2524	# BOX DRAWINGS LIGHT VERTICAL AND LEFT	[1983]
+3-282A	U+2534	# BOX DRAWINGS LIGHT UP AND HORIZONTAL	[1983]
+3-282B	U+253C	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL	[1983]
+3-282C	U+2501	# BOX DRAWINGS HEAVY HORIZONTAL	[1983]
+3-282D	U+2503	# BOX DRAWINGS HEAVY VERTICAL	[1983]
+3-282E	U+250F	# BOX DRAWINGS HEAVY DOWN AND RIGHT	[1983]
+3-282F	U+2513	# BOX DRAWINGS HEAVY DOWN AND LEFT	[1983]
+3-2830	U+251B	# BOX DRAWINGS HEAVY UP AND LEFT	[1983]
+3-2831	U+2517	# BOX DRAWINGS HEAVY UP AND RIGHT	[1983]
+3-2832	U+2523	# BOX DRAWINGS HEAVY VERTICAL AND RIGHT	[1983]
+3-2833	U+2533	# BOX DRAWINGS HEAVY DOWN AND HORIZONTAL	[1983]
+3-2834	U+252B	# BOX DRAWINGS HEAVY VERTICAL AND LEFT	[1983]
+3-2835	U+253B	# BOX DRAWINGS HEAVY UP AND HORIZONTAL	[1983]
+3-2836	U+254B	# BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL	[1983]
+3-2837	U+2520	# BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT	[1983]
+3-2838	U+252F	# BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY	[1983]
+3-2839	U+2528	# BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT	[1983]
+3-283A	U+2537	# BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY	[1983]
+3-283B	U+253F	# BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY	[1983]
+3-283C	U+251D	# BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY	[1983]
+3-283D	U+2530	# BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT	[1983]
+3-283E	U+2525	# BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY	[1983]
+3-283F	U+2538	# BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT	[1983]
+3-2840	U+2542	# BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT	[1983]
+3-2841	U+3251	# CIRCLED NUMBER TWENTY ONE	[2000]	[Unicode3.2]
+3-2842	U+3252	# CIRCLED NUMBER TWENTY TWO	[2000]	[Unicode3.2]
+3-2843	U+3253	# CIRCLED NUMBER TWENTY THREE	[2000]	[Unicode3.2]
+3-2844	U+3254	# CIRCLED NUMBER TWENTY FOUR	[2000]	[Unicode3.2]
+3-2845	U+3255	# CIRCLED NUMBER TWENTY FIVE	[2000]	[Unicode3.2]
+3-2846	U+3256	# CIRCLED NUMBER TWENTY SIX	[2000]	[Unicode3.2]
+3-2847	U+3257	# CIRCLED NUMBER TWENTY SEVEN	[2000]	[Unicode3.2]
+3-2848	U+3258	# CIRCLED NUMBER TWENTY EIGHT	[2000]	[Unicode3.2]
+3-2849	U+3259	# CIRCLED NUMBER TWENTY NINE	[2000]	[Unicode3.2]
+3-284A	U+325A	# CIRCLED NUMBER THIRTY	[2000]	[Unicode3.2]
+3-284B	U+325B	# CIRCLED NUMBER THIRTY ONE	[2000]	[Unicode3.2]
+3-284C	U+325C	# CIRCLED NUMBER THIRTY TWO	[2000]	[Unicode3.2]
+3-284D	U+325D	# CIRCLED NUMBER THIRTY THREE	[2000]	[Unicode3.2]
+3-284E	U+325E	# CIRCLED NUMBER THIRTY FOUR	[2000]	[Unicode3.2]
+3-284F	U+325F	# CIRCLED NUMBER THIRTY FIVE	[2000]	[Unicode3.2]
+3-2850	U+32B1	# CIRCLED NUMBER THIRTY SIX	[2000]	[Unicode3.2]
+3-2851	U+32B2	# CIRCLED NUMBER THIRTY SEVEN	[2000]	[Unicode3.2]
+3-2852	U+32B3	# CIRCLED NUMBER THIRTY EIGHT	[2000]	[Unicode3.2]
+3-2853	U+32B4	# CIRCLED NUMBER THIRTY NINE	[2000]	[Unicode3.2]
+3-2854	U+32B5	# CIRCLED NUMBER FORTY	[2000]	[Unicode3.2]
+3-2855	U+32B6	# CIRCLED NUMBER FORTY ONE	[2000]	[Unicode3.2]
+3-2856	U+32B7	# CIRCLED NUMBER FORTY TWO	[2000]	[Unicode3.2]
+3-2857	U+32B8	# CIRCLED NUMBER FORTY THREE	[2000]	[Unicode3.2]
+3-2858	U+32B9	# CIRCLED NUMBER FORTY FOUR	[2000]	[Unicode3.2]
+3-2859	U+32BA	# CIRCLED NUMBER FORTY FIVE	[2000]	[Unicode3.2]
+3-285A	U+32BB	# CIRCLED NUMBER FORTY SIX	[2000]	[Unicode3.2]
+3-285B	U+32BC	# CIRCLED NUMBER FORTY SEVEN	[2000]	[Unicode3.2]
+3-285C	U+32BD	# CIRCLED NUMBER FORTY EIGHT	[2000]	[Unicode3.2]
+3-285D	U+32BE	# CIRCLED NUMBER FORTY NINE	[2000]	[Unicode3.2]
+3-285E	U+32BF	# CIRCLED NUMBER FIFTY	[2000]	[Unicode3.2]
+3-285F		# <reserved>
+3-2860		# <reserved>
+3-2861		# <reserved>
+3-2862		# <reserved>
+3-2863		# <reserved>
+3-2864		# <reserved>
+3-2865		# <reserved>
+3-2866		# <reserved>
+3-2867	U+25D0	# CIRCLE WITH LEFT HALF BLACK	[2000]
+3-2868	U+25D1	# CIRCLE WITH RIGHT HALF BLACK	[2000]
+3-2869	U+25D2	# CIRCLE WITH LOWER HALF BLACK	[2000]
+3-286A	U+25D3	# CIRCLE WITH UPPER HALF BLACK	[2000]
+3-286B	U+203C	# DOUBLE EXCLAMATION MARK	[2000]
+3-286C	U+2047	# DOUBLE QUESTION MARK	[2000]	[Unicode3.2]
+3-286D	U+2048	# QUESTION EXCLAMATION MARK	[2000]
+3-286E	U+2049	# EXCLAMATION QUESTION MARK	[2000]
+3-286F	U+01CD	# LATIN CAPITAL LETTER A WITH CARON	[2000]
+3-2870	U+01CE	# LATIN SMALL LETTER A WITH CARON	[2000]
+3-2871	U+01D0	# LATIN SMALL LETTER I WITH CARON	[2000]
+3-2872	U+1E3E	# LATIN CAPITAL LETTER M WITH ACUTE	[2000]
+3-2873	U+1E3F	# LATIN SMALL LETTER M WITH ACUTE	[2000]
+3-2874	U+01F8	# LATIN CAPITAL LETTER N WITH GRAVE	[2000]
+3-2875	U+01F9	# LATIN SMALL LETTER N WITH GRAVE	[2000]
+3-2876	U+01D1	# LATIN CAPITAL LETTER O WITH CARON	[2000]
+3-2877	U+01D2	# LATIN SMALL LETTER O WITH CARON	[2000]
+3-2878	U+01D4	# LATIN SMALL LETTER U WITH CARON	[2000]
+3-2879	U+01D6	# LATIN SMALL LETTER U WITH DIAERESIS AND MACRON	[2000]
+3-287A	U+01D8	# LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE	[2000]
+3-287B	U+01DA	# LATIN SMALL LETTER U WITH DIAERESIS AND CARON	[2000]
+3-287C	U+01DC	# LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE	[2000]
+3-287D		# <reserved>
+3-287E		# <reserved>
+3-2921	U+20AC	# EURO SIGN	[2000]
+3-2922	U+00A0	# NO-BREAK SPACE	[2000]
+3-2923	U+00A1	# INVERTED EXCLAMATION MARK	[2000]
+3-2924	U+00A4	# CURRENCY SIGN	[2000]
+3-2925	U+00A6	# BROKEN BAR	[2000]
+3-2926	U+00A9	# COPYRIGHT SIGN	[2000]
+3-2927	U+00AA	# FEMININE ORDINAL INDICATOR	[2000]
+3-2928	U+00AB	# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 	[2000]
+3-2929	U+00AD	# SOFT HYPHEN	[2000]
+3-292A	U+00AE	# REGISTERED SIGN	[2000]
+3-292B	U+00AF	# MACRON	[2000]
+3-292C	U+00B2	# SUPERSCRIPT TWO	[2000]
+3-292D	U+00B3	# SUPERSCRIPT THREE	[2000]
+3-292E	U+00B7	# MIDDLE DOT	[2000]
+3-292F	U+00B8	# CEDILLA	[2000]
+3-2930	U+00B9	# SUPERSCRIPT ONE	[2000]
+3-2931	U+00BA	# MASCULINE ORDINAL INDICATOR	[2000]
+3-2932	U+00BB	# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 	[2000]
+3-2933	U+00BC	# VULGAR FRACTION ONE QUARTER	[2000]
+3-2934	U+00BD	# VULGAR FRACTION ONE HALF	[2000]
+3-2935	U+00BE	# VULGAR FRACTION THREE QUARTERS	[2000]
+3-2936	U+00BF	# INVERTED QUESTION MARK	[2000]
+3-2937	U+00C0	# LATIN CAPITAL LETTER A WITH GRAVE	[2000]
+3-2938	U+00C1	# LATIN CAPITAL LETTER A WITH ACUTE	[2000]
+3-2939	U+00C2	# LATIN CAPITAL LETTER A WITH CIRCUMFLEX	[2000]
+3-293A	U+00C3	# LATIN CAPITAL LETTER A WITH TILDE	[2000]
+3-293B	U+00C4	# LATIN CAPITAL LETTER A WITH DIAERESIS	[2000]
+3-293C	U+00C5	# LATIN CAPITAL LETTER A WITH RING ABOVE	[2000]
+3-293D	U+00C6	# LATIN CAPITAL LETTER AE 	[2000]
+3-293E	U+00C7	# LATIN CAPITAL LETTER C WITH CEDILLA	[2000]
+3-293F	U+00C8	# LATIN CAPITAL LETTER E WITH GRAVE	[2000]
+3-2940	U+00C9	# LATIN CAPITAL LETTER E WITH ACUTE	[2000]
+3-2941	U+00CA	# LATIN CAPITAL LETTER E WITH CIRCUMFLEX	[2000]
+3-2942	U+00CB	# LATIN CAPITAL LETTER E WITH DIAERESIS	[2000]
+3-2943	U+00CC	# LATIN CAPITAL LETTER I WITH GRAVE	[2000]
+3-2944	U+00CD	# LATIN CAPITAL LETTER I WITH ACUTE	[2000]
+3-2945	U+00CE	# LATIN CAPITAL LETTER I WITH CIRCUMFLEX	[2000]
+3-2946	U+00CF	# LATIN CAPITAL LETTER I WITH DIAERESIS	[2000]
+3-2947	U+00D0	# LATIN CAPITAL LETTER ETH 	[2000]
+3-2948	U+00D1	# LATIN CAPITAL LETTER N WITH TILDE	[2000]
+3-2949	U+00D2	# LATIN CAPITAL LETTER O WITH GRAVE	[2000]
+3-294A	U+00D3	# LATIN CAPITAL LETTER O WITH ACUTE	[2000]
+3-294B	U+00D4	# LATIN CAPITAL LETTER O WITH CIRCUMFLEX	[2000]
+3-294C	U+00D5	# LATIN CAPITAL LETTER O WITH TILDE	[2000]
+3-294D	U+00D6	# LATIN CAPITAL LETTER O WITH DIAERESIS	[2000]
+3-294E	U+00D8	# LATIN CAPITAL LETTER O WITH STROKE	[2000]
+3-294F	U+00D9	# LATIN CAPITAL LETTER U WITH GRAVE	[2000]
+3-2950	U+00DA	# LATIN CAPITAL LETTER U WITH ACUTE	[2000]
+3-2951	U+00DB	# LATIN CAPITAL LETTER U WITH CIRCUMFLEX	[2000]
+3-2952	U+00DC	# LATIN CAPITAL LETTER U WITH DIAERESIS	[2000]
+3-2953	U+00DD	# LATIN CAPITAL LETTER Y WITH ACUTE	[2000]
+3-2954	U+00DE	# LATIN CAPITAL LETTER THORN 	[2000]
+3-2955	U+00DF	# LATIN SMALL LETTER SHARP S 	[2000]
+3-2956	U+00E0	# LATIN SMALL LETTER A WITH GRAVE	[2000]
+3-2957	U+00E1	# LATIN SMALL LETTER A WITH ACUTE	[2000]
+3-2958	U+00E2	# LATIN SMALL LETTER A WITH CIRCUMFLEX	[2000]
+3-2959	U+00E3	# LATIN SMALL LETTER A WITH TILDE	[2000]
+3-295A	U+00E4	# LATIN SMALL LETTER A WITH DIAERESIS	[2000]
+3-295B	U+00E5	# LATIN SMALL LETTER A WITH RING ABOVE	[2000]
+3-295C	U+00E6	# LATIN SMALL LETTER AE 	[2000]
+3-295D	U+00E7	# LATIN SMALL LETTER C WITH CEDILLA	[2000]
+3-295E	U+00E8	# LATIN SMALL LETTER E WITH GRAVE	[2000]
+3-295F	U+00E9	# LATIN SMALL LETTER E WITH ACUTE	[2000]
+3-2960	U+00EA	# LATIN SMALL LETTER E WITH CIRCUMFLEX	[2000]
+3-2961	U+00EB	# LATIN SMALL LETTER E WITH DIAERESIS	[2000]
+3-2962	U+00EC	# LATIN SMALL LETTER I WITH GRAVE	[2000]
+3-2963	U+00ED	# LATIN SMALL LETTER I WITH ACUTE	[2000]
+3-2964	U+00EE	# LATIN SMALL LETTER I WITH CIRCUMFLEX	[2000]
+3-2965	U+00EF	# LATIN SMALL LETTER I WITH DIAERESIS	[2000]
+3-2966	U+00F0	# LATIN SMALL LETTER ETH 	[2000]
+3-2967	U+00F1	# LATIN SMALL LETTER N WITH TILDE	[2000]
+3-2968	U+00F2	# LATIN SMALL LETTER O WITH GRAVE	[2000]
+3-2969	U+00F3	# LATIN SMALL LETTER O WITH ACUTE	[2000]
+3-296A	U+00F4	# LATIN SMALL LETTER O WITH CIRCUMFLEX	[2000]
+3-296B	U+00F5	# LATIN SMALL LETTER O WITH TILDE	[2000]
+3-296C	U+00F6	# LATIN SMALL LETTER O WITH DIAERESIS	[2000]
+3-296D	U+00F8	# LATIN SMALL LETTER O WITH STROKE	[2000]
+3-296E	U+00F9	# LATIN SMALL LETTER U WITH GRAVE	[2000]
+3-296F	U+00FA	# LATIN SMALL LETTER U WITH ACUTE	[2000]
+3-2970	U+00FB	# LATIN SMALL LETTER U WITH CIRCUMFLEX	[2000]
+3-2971	U+00FC	# LATIN SMALL LETTER U WITH DIAERESIS	[2000]
+3-2972	U+00FD	# LATIN SMALL LETTER Y WITH ACUTE	[2000]
+3-2973	U+00FE	# LATIN SMALL LETTER THORN 	[2000]
+3-2974	U+00FF	# LATIN SMALL LETTER Y WITH DIAERESIS	[2000]
+3-2975	U+0100	# LATIN CAPITAL LETTER A WITH MACRON	[2000]
+3-2976	U+012A	# LATIN CAPITAL LETTER I WITH MACRON	[2000]
+3-2977	U+016A	# LATIN CAPITAL LETTER U WITH MACRON	[2000]
+3-2978	U+0112	# LATIN CAPITAL LETTER E WITH MACRON	[2000]
+3-2979	U+014C	# LATIN CAPITAL LETTER O WITH MACRON	[2000]
+3-297A	U+0101	# LATIN SMALL LETTER A WITH MACRON	[2000]
+3-297B	U+012B	# LATIN SMALL LETTER I WITH MACRON	[2000]
+3-297C	U+016B	# LATIN SMALL LETTER U WITH MACRON	[2000]
+3-297D	U+0113	# LATIN SMALL LETTER E WITH MACRON	[2000]
+3-297E	U+014D	# LATIN SMALL LETTER O WITH MACRON	[2000]
+3-2A21	U+0104	# LATIN CAPITAL LETTER A WITH OGONEK	[2000]
+3-2A22	U+02D8	# BREVE	[2000]
+3-2A23	U+0141	# LATIN CAPITAL LETTER L WITH STROKE	[2000]
+3-2A24	U+013D	# LATIN CAPITAL LETTER L WITH CARON	[2000]
+3-2A25	U+015A	# LATIN CAPITAL LETTER S WITH ACUTE	[2000]
+3-2A26	U+0160	# LATIN CAPITAL LETTER S WITH CARON	[2000]
+3-2A27	U+015E	# LATIN CAPITAL LETTER S WITH CEDILLA 	[2000]
+3-2A28	U+0164	# LATIN CAPITAL LETTER T WITH CARON	[2000]
+3-2A29	U+0179	# LATIN CAPITAL LETTER Z WITH ACUTE	[2000]
+3-2A2A	U+017D	# LATIN CAPITAL LETTER Z WITH CARON	[2000]
+3-2A2B	U+017B	# LATIN CAPITAL LETTER Z WITH DOT ABOVE	[2000]
+3-2A2C	U+0105	# LATIN SMALL LETTER A WITH OGONEK	[2000]
+3-2A2D	U+02DB	# OGONEK	[2000]
+3-2A2E	U+0142	# LATIN SMALL LETTER L WITH STROKE	[2000]
+3-2A2F	U+013E	# LATIN SMALL LETTER L WITH CARON	[2000]
+3-2A30	U+015B	# LATIN SMALL LETTER S WITH ACUTE	[2000]
+3-2A31	U+02C7	# CARON 	[2000]
+3-2A32	U+0161	# LATIN SMALL LETTER S WITH CARON	[2000]
+3-2A33	U+015F	# LATIN SMALL LETTER S WITH CEDILLA 	[2000]
+3-2A34	U+0165	# LATIN SMALL LETTER T WITH CARON	[2000]
+3-2A35	U+017A	# LATIN SMALL LETTER Z WITH ACUTE	[2000]
+3-2A36	U+02DD	# DOUBLE ACUTE ACCENT	[2000]
+3-2A37	U+017E	# LATIN SMALL LETTER Z WITH CARON	[2000]
+3-2A38	U+017C	# LATIN SMALL LETTER Z WITH DOT ABOVE	[2000]
+3-2A39	U+0154	# LATIN CAPITAL LETTER R WITH ACUTE	[2000]
+3-2A3A	U+0102	# LATIN CAPITAL LETTER A WITH BREVE	[2000]
+3-2A3B	U+0139	# LATIN CAPITAL LETTER L WITH ACUTE	[2000]
+3-2A3C	U+0106	# LATIN CAPITAL LETTER C WITH ACUTE	[2000]
+3-2A3D	U+010C	# LATIN CAPITAL LETTER C WITH CARON	[2000]
+3-2A3E	U+0118	# LATIN CAPITAL LETTER E WITH OGONEK	[2000]
+3-2A3F	U+011A	# LATIN CAPITAL LETTER E WITH CARON	[2000]
+3-2A40	U+010E	# LATIN CAPITAL LETTER D WITH CARON	[2000]
+3-2A41	U+0143	# LATIN CAPITAL LETTER N WITH ACUTE	[2000]
+3-2A42	U+0147	# LATIN CAPITAL LETTER N WITH CARON	[2000]
+3-2A43	U+0150	# LATIN CAPITAL LETTER O WITH DOUBLE ACUTE	[2000]
+3-2A44	U+0158	# LATIN CAPITAL LETTER R WITH CARON	[2000]
+3-2A45	U+016E	# LATIN CAPITAL LETTER U WITH RING ABOVE	[2000]
+3-2A46	U+0170	# LATIN CAPITAL LETTER U WITH DOUBLE ACUTE	[2000]
+3-2A47	U+0162	# LATIN CAPITAL LETTER T WITH CEDILLA 	[2000]
+3-2A48	U+0155	# LATIN SMALL LETTER R WITH ACUTE	[2000]
+3-2A49	U+0103	# LATIN SMALL LETTER A WITH BREVE	[2000]
+3-2A4A	U+013A	# LATIN SMALL LETTER L WITH ACUTE	[2000]
+3-2A4B	U+0107	# LATIN SMALL LETTER C WITH ACUTE	[2000]
+3-2A4C	U+010D	# LATIN SMALL LETTER C WITH CARON	[2000]
+3-2A4D	U+0119	# LATIN SMALL LETTER E WITH OGONEK	[2000]
+3-2A4E	U+011B	# LATIN SMALL LETTER E WITH CARON	[2000]
+3-2A4F	U+010F	# LATIN SMALL LETTER D WITH CARON	[2000]
+3-2A50	U+0111	# LATIN SMALL LETTER D WITH STROKE	[2000]
+3-2A51	U+0144	# LATIN SMALL LETTER N WITH ACUTE	[2000]
+3-2A52	U+0148	# LATIN SMALL LETTER N WITH CARON	[2000]
+3-2A53	U+0151	# LATIN SMALL LETTER O WITH DOUBLE ACUTE	[2000]
+3-2A54	U+0159	# LATIN SMALL LETTER R WITH CARON	[2000]
+3-2A55	U+016F	# LATIN SMALL LETTER U WITH RING ABOVE	[2000]
+3-2A56	U+0171	# LATIN SMALL LETTER U WITH DOUBLE ACUTE	[2000]
+3-2A57	U+0163	# LATIN SMALL LETTER T WITH CEDILLA 	[2000]
+3-2A58	U+02D9	# DOT ABOVE 	[2000]
+3-2A59	U+0108	# LATIN CAPITAL LETTER C WITH CIRCUMFLEX	[2000]
+3-2A5A	U+011C	# LATIN CAPITAL LETTER G WITH CIRCUMFLEX	[2000]
+3-2A5B	U+0124	# LATIN CAPITAL LETTER H WITH CIRCUMFLEX	[2000]
+3-2A5C	U+0134	# LATIN CAPITAL LETTER J WITH CIRCUMFLEX	[2000]
+3-2A5D	U+015C	# LATIN CAPITAL LETTER S WITH CIRCUMFLEX	[2000]
+3-2A5E	U+016C	# LATIN CAPITAL LETTER U WITH BREVE	[2000]
+3-2A5F	U+0109	# LATIN SMALL LETTER C WITH CIRCUMFLEX	[2000]
+3-2A60	U+011D	# LATIN SMALL LETTER G WITH CIRCUMFLEX	[2000]
+3-2A61	U+0125	# LATIN SMALL LETTER H WITH CIRCUMFLEX	[2000]
+3-2A62	U+0135	# LATIN SMALL LETTER J WITH CIRCUMFLEX	[2000]
+3-2A63	U+015D	# LATIN SMALL LETTER S WITH CIRCUMFLEX	[2000]
+3-2A64	U+016D	# LATIN SMALL LETTER U WITH BREVE	[2000]
+3-2A65	U+0271	# LATIN SMALL LETTER M WITH HOOK	[2000]
+3-2A66	U+028B	# LATIN SMALL LETTER V WITH HOOK	[2000]
+3-2A67	U+027E	# LATIN SMALL LETTER R WITH FISHHOOK	[2000]
+3-2A68	U+0283	# LATIN SMALL LETTER ESH	[2000]
+3-2A69	U+0292	# LATIN SMALL LETTER EZH	[2000]
+3-2A6A	U+026C	# LATIN SMALL LETTER L WITH BELT	[2000]
+3-2A6B	U+026E	# LATIN SMALL LETTER LEZH	[2000]
+3-2A6C	U+0279	# LATIN SMALL LETTER TURNED R	[2000]
+3-2A6D	U+0288	# LATIN SMALL LETTER T WITH RETROFLEX HOOK	[2000]
+3-2A6E	U+0256	# LATIN SMALL LETTER D WITH TAIL	[2000]
+3-2A6F	U+0273	# LATIN SMALL LETTER N WITH RETROFLEX HOOK	[2000]
+3-2A70	U+027D	# LATIN SMALL LETTER R WITH TAIL	[2000]
+3-2A71	U+0282	# LATIN SMALL LETTER S WITH HOOK	[2000]
+3-2A72	U+0290	# LATIN SMALL LETTER Z WITH RETROFLEX HOOK	[2000]
+3-2A73	U+027B	# LATIN SMALL LETTER TURNED R WITH HOOK	[2000]
+3-2A74	U+026D	# LATIN SMALL LETTER L WITH RETROFLEX HOOK	[2000]
+3-2A75	U+025F	# LATIN SMALL LETTER DOTLESS J WITH STROKE	[2000]
+3-2A76	U+0272	# LATIN SMALL LETTER N WITH LEFT HOOK	[2000]
+3-2A77	U+029D	# LATIN SMALL LETTER J WITH CROSSED-TAIL	[2000]
+3-2A78	U+028E	# LATIN SMALL LETTER TURNED Y	[2000]
+3-2A79	U+0261	# LATIN SMALL LETTER SCRIPT G	[2000]
+3-2A7A	U+014B	# LATIN SMALL LETTER ENG 	[2000]
+3-2A7B	U+0270	# LATIN SMALL LETTER TURNED M WITH LONG LEG	[2000]
+3-2A7C	U+0281	# LATIN LETTER SMALL CAPITAL INVERTED R	[2000]
+3-2A7D	U+0127	# LATIN SMALL LETTER H WITH STROKE	[2000]
+3-2A7E	U+0295	# LATIN LETTER PHARYNGEAL VOICED FRICATIVE	[2000]
+3-2B21	U+0294	# LATIN LETTER GLOTTAL STOP	[2000]
+3-2B22	U+0266	# LATIN SMALL LETTER H WITH HOOK	[2000]
+3-2B23	U+0298	# LATIN LETTER BILABIAL CLICK	[2000]
+3-2B24	U+01C2	# LATIN LETTER ALVEOLAR CLICK	[2000]
+3-2B25	U+0253	# LATIN SMALL LETTER B WITH HOOK	[2000]
+3-2B26	U+0257	# LATIN SMALL LETTER D WITH HOOK	[2000]
+3-2B27	U+0284	# LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK	[2000]
+3-2B28	U+0260	# LATIN SMALL LETTER G WITH HOOK	[2000]
+3-2B29	U+0193	# LATIN CAPITAL LETTER G WITH HOOK	[2000]
+3-2B2A	U+0153	# LATIN SMALL LIGATURE OE	[2000]
+3-2B2B	U+0152	# LATIN CAPITAL LIGATURE OE	[2000]
+3-2B2C	U+0268	# LATIN SMALL LETTER I WITH STROKE	[2000]
+3-2B2D	U+0289	# LATIN SMALL LETTER U BAR	[2000]
+3-2B2E	U+0258	# LATIN SMALL LETTER REVERSED E	[2000]
+3-2B2F	U+0275	# LATIN SMALL LETTER BARRED O	[2000]
+3-2B30	U+0259	# LATIN SMALL LETTER SCHWA	[2000]
+3-2B31	U+025C	# LATIN SMALL LETTER REVERSED OPEN E	[2000]
+3-2B32	U+025E	# LATIN SMALL LETTER CLOSED REVERSED OPEN E	[2000]
+3-2B33	U+0250	# LATIN SMALL LETTER TURNED A	[2000]
+3-2B34	U+026F	# LATIN SMALL LETTER TURNED M	[2000]
+3-2B35	U+028A	# LATIN SMALL LETTER UPSILON	[2000]
+3-2B36	U+0264	# LATIN SMALL LETTER RAMS HORN	[2000]
+3-2B37	U+028C	# LATIN SMALL LETTER TURNED V	[2000]
+3-2B38	U+0254	# LATIN SMALL LETTER OPEN O	[2000]
+3-2B39	U+0251	# LATIN SMALL LETTER ALPHA	[2000]
+3-2B3A	U+0252	# LATIN SMALL LETTER TURNED ALPHA	[2000]
+3-2B3B	U+028D	# LATIN SMALL LETTER TURNED W	[2000]
+3-2B3C	U+0265	# LATIN SMALL LETTER TURNED H	[2000]
+3-2B3D	U+02A2	# LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE	[2000]
+3-2B3E	U+02A1	# LATIN LETTER GLOTTAL STOP WITH STROKE	[2000]
+3-2B3F	U+0255	# LATIN SMALL LETTER C WITH CURL	[2000]
+3-2B40	U+0291	# LATIN SMALL LETTER Z WITH CURL	[2000]
+3-2B41	U+027A	# LATIN SMALL LETTER TURNED R WITH LONG LEG	[2000]
+3-2B42	U+0267	# LATIN SMALL LETTER HENG WITH HOOK	[2000]
+3-2B43	U+025A	# LATIN SMALL LETTER SCHWA WITH HOOK	[2000]
+3-2B44	U+00E6+0300	# 	[2000]	Private: U+F76A
+3-2B45	U+01FD	# LATIN SMALL LETTER AE WITH ACUTE 	[2000]
+3-2B46	U+1F70	# GREEK SMALL LETTER ALPHA WITH VARIA	[2000]
+3-2B47	U+1F71	# GREEK SMALL LETTER ALPHA WITH OXIA	[2000]
+3-2B48	U+0254+0300	# 	[2000]	Private: U+F76B
+3-2B49	U+0254+0301	# 	[2000]	Private: U+F76C
+3-2B4A	U+028C+0300	# 	[2000]	Private: U+F76D
+3-2B4B	U+028C+0301	# 	[2000]	Private: U+F76E
+3-2B4C	U+0259+0300	# 	[2000]	Private: U+F76F
+3-2B4D	U+0259+0301	# 	[2000]	Private: U+F770
+3-2B4E	U+025A+0300	# 	[2000]	Private: U+F771
+3-2B4F	U+025A+0301	# 	[2000]	Private: U+F772
+3-2B50	U+1F72	# GREEK SMALL LETTER EPSILON WITH VARIA	[2000]
+3-2B51	U+1F73	# GREEK SMALL LETTER EPSILON WITH OXIA	[2000]
+3-2B52	U+0361	# COMBINING DOUBLE INVERTED BREVE	[2000]
+3-2B53	U+02C8	# MODIFIER LETTER VERTICAL LINE	[2000]
+3-2B54	U+02CC	# MODIFIER LETTER LOW VERTICAL LINE	[2000]
+3-2B55	U+02D0	# MODIFIER LETTER TRIANGULAR COLON	[2000]
+3-2B56	U+02D1	# MODIFIER LETTER HALF TRIANGULAR COLON	[2000]
+3-2B57	U+0306	# COMBINING BREVE 	[2000]
+3-2B58	U+203F	# UNDERTIE 	[2000]
+3-2B59	U+030B	# COMBINING DOUBLE ACUTE ACCENT	[2000]
+3-2B5A	U+0301	# COMBINING ACUTE ACCENT 	[2000]
+3-2B5B	U+0304	# COMBINING MACRON	[2000]
+3-2B5C	U+0300	# COMBINING GRAVE ACCENT 	[2000]
+3-2B5D	U+030F	# COMBINING DOUBLE GRAVE ACCENT	[2000]
+3-2B5E	U+030C	# COMBINING CARON	[2000]
+3-2B5F	U+0302	# COMBINING CIRCUMFLEX ACCENT	[2000]
+3-2B60	U+02E5	# MODIFIER LETTER EXTRA-HIGH TONE BAR	[2000]
+3-2B61	U+02E6	# MODIFIER LETTER HIGH TONE BAR	[2000]
+3-2B62	U+02E7	# MODIFIER LETTER MID TONE BAR	[2000]
+3-2B63	U+02E8	# MODIFIER LETTER LOW TONE BAR	[2000]
+3-2B64	U+02E9	# MODIFIER LETTER EXTRA-LOW TONE BAR	[2000]
+3-2B65	U+02E9+02E5	# 	[2000]	Private: U+F773
+3-2B66	U+02E5+02E9	# 	[2000]	Private: U+F774
+3-2B67	U+0325	# COMBINING RING BELOW	[2000]
+3-2B68	U+032C	# COMBINING CARON BELOW	[2000]
+3-2B69	U+0339	# COMBINING RIGHT HALF RING BELOW	[2000]
+3-2B6A	U+031C	# COMBINING LEFT HALF RING BELOW	[2000]
+3-2B6B	U+031F	# COMBINING PLUS SIGN BELOW	[2000]
+3-2B6C	U+0320	# COMBINING MINUS SIGN BELOW	[2000]
+3-2B6D	U+0308	# COMBINING DIAERESIS 	[2000]
+3-2B6E	U+033D	# COMBINING X ABOVE	[2000]
+3-2B6F	U+0329	# COMBINING VERTICAL LINE BELOW	[2000]
+3-2B70	U+032F	# COMBINING INVERTED BREVE BELOW	[2000]
+3-2B71	U+02DE	# MODIFIER LETTER RHOTIC HOOK	[2000]
+3-2B72	U+0324	# COMBINING DIAERESIS BELOW	[2000]
+3-2B73	U+0330	# COMBINING TILDE BELOW	[2000]
+3-2B74	U+033C	# COMBINING SEAGULL BELOW	[2000]
+3-2B75	U+0334	# COMBINING TILDE OVERLAY	[2000]
+3-2B76	U+031D	# COMBINING UP TACK BELOW	[2000]
+3-2B77	U+031E	# COMBINING DOWN TACK BELOW	[2000]
+3-2B78	U+0318	# COMBINING LEFT TACK BELOW	[2000]
+3-2B79	U+0319	# COMBINING RIGHT TACK BELOW	[2000]
+3-2B7A	U+032A	# COMBINING BRIDGE BELOW	[2000]
+3-2B7B	U+033A	# COMBINING INVERTED BRIDGE BELOW	[2000]
+3-2B7C	U+033B	# COMBINING SQUARE BELOW	[2000]
+3-2B7D	U+0303	# COMBINING TILDE	[2000]
+3-2B7E	U+031A	# COMBINING LEFT ANGLE ABOVE	[2000]
+3-2C21	U+2776	# DINGBAT NEGATIVE CIRCLED DIGIT ONE	[2000]
+3-2C22	U+2777	# DINGBAT NEGATIVE CIRCLED DIGIT TWO	[2000]
+3-2C23	U+2778	# DINGBAT NEGATIVE CIRCLED DIGIT THREE	[2000]
+3-2C24	U+2779	# DINGBAT NEGATIVE CIRCLED DIGIT FOUR	[2000]
+3-2C25	U+277A	# DINGBAT NEGATIVE CIRCLED DIGIT FIVE	[2000]
+3-2C26	U+277B	# DINGBAT NEGATIVE CIRCLED DIGIT SIX	[2000]
+3-2C27	U+277C	# DINGBAT NEGATIVE CIRCLED DIGIT SEVEN	[2000]
+3-2C28	U+277D	# DINGBAT NEGATIVE CIRCLED DIGIT EIGHT	[2000]
+3-2C29	U+277E	# DINGBAT NEGATIVE CIRCLED DIGIT NINE	[2000]
+3-2C2A	U+277F	# DINGBAT NEGATIVE CIRCLED NUMBER TEN	[2000]
+3-2C2B	U+24EB	# NEGATIVE CIRCLED NUMBER ELEVEN	[2000]	[Unicode3.2]
+3-2C2C	U+24EC	# NEGATIVE CIRCLED NUMBER TWELVE	[2000]	[Unicode3.2]
+3-2C2D	U+24ED	# NEGATIVE CIRCLED NUMBER THIRTEEN	[2000]	[Unicode3.2]
+3-2C2E	U+24EE	# NEGATIVE CIRCLED NUMBER FOURTEEN	[2000]	[Unicode3.2]
+3-2C2F	U+24EF	# NEGATIVE CIRCLED NUMBER FIFTEEN	[2000]	[Unicode3.2]
+3-2C30	U+24F0	# NEGATIVE CIRCLED NUMBER SIXTEEN	[2000]	[Unicode3.2]
+3-2C31	U+24F1	# NEGATIVE CIRCLED NUMBER SEVENTEEN	[2000]	[Unicode3.2]
+3-2C32	U+24F2	# NEGATIVE CIRCLED NUMBER EIGHTEEN	[2000]	[Unicode3.2]
+3-2C33	U+24F3	# NEGATIVE CIRCLED NUMBER NINETEEN	[2000]	[Unicode3.2]
+3-2C34	U+24F4	# NEGATIVE CIRCLED NUMBER TWENTY	[2000]	[Unicode3.2]
+3-2C35	U+2170	# SMALL ROMAN NUMERAL ONE	[2000]
+3-2C36	U+2171	# SMALL ROMAN NUMERAL TWO	[2000]
+3-2C37	U+2172	# SMALL ROMAN NUMERAL THREE	[2000]
+3-2C38	U+2173	# SMALL ROMAN NUMERAL FOUR	[2000]
+3-2C39	U+2174	# SMALL ROMAN NUMERAL FIVE	[2000]
+3-2C3A	U+2175	# SMALL ROMAN NUMERAL SIX	[2000]
+3-2C3B	U+2176	# SMALL ROMAN NUMERAL SEVEN	[2000]
+3-2C3C	U+2177	# SMALL ROMAN NUMERAL EIGHT	[2000]
+3-2C3D	U+2178	# SMALL ROMAN NUMERAL NINE	[2000]
+3-2C3E	U+2179	# SMALL ROMAN NUMERAL TEN	[2000]
+3-2C3F	U+217A	# SMALL ROMAN NUMERAL ELEVEN	[2000]
+3-2C40	U+217B	# SMALL ROMAN NUMERAL TWELVE	[2000]
+3-2C41	U+24D0	# CIRCLED LATIN SMALL LETTER A	[2000]
+3-2C42	U+24D1	# CIRCLED LATIN SMALL LETTER B	[2000]
+3-2C43	U+24D2	# CIRCLED LATIN SMALL LETTER C	[2000]
+3-2C44	U+24D3	# CIRCLED LATIN SMALL LETTER D	[2000]
+3-2C45	U+24D4	# CIRCLED LATIN SMALL LETTER E	[2000]
+3-2C46	U+24D5	# CIRCLED LATIN SMALL LETTER F	[2000]
+3-2C47	U+24D6	# CIRCLED LATIN SMALL LETTER G	[2000]
+3-2C48	U+24D7	# CIRCLED LATIN SMALL LETTER H	[2000]
+3-2C49	U+24D8	# CIRCLED LATIN SMALL LETTER I	[2000]
+3-2C4A	U+24D9	# CIRCLED LATIN SMALL LETTER J	[2000]
+3-2C4B	U+24DA	# CIRCLED LATIN SMALL LETTER K	[2000]
+3-2C4C	U+24DB	# CIRCLED LATIN SMALL LETTER L	[2000]
+3-2C4D	U+24DC	# CIRCLED LATIN SMALL LETTER M	[2000]
+3-2C4E	U+24DD	# CIRCLED LATIN SMALL LETTER N	[2000]
+3-2C4F	U+24DE	# CIRCLED LATIN SMALL LETTER O	[2000]
+3-2C50	U+24DF	# CIRCLED LATIN SMALL LETTER P	[2000]
+3-2C51	U+24E0	# CIRCLED LATIN SMALL LETTER Q	[2000]
+3-2C52	U+24E1	# CIRCLED LATIN SMALL LETTER R	[2000]
+3-2C53	U+24E2	# CIRCLED LATIN SMALL LETTER S	[2000]
+3-2C54	U+24E3	# CIRCLED LATIN SMALL LETTER T	[2000]
+3-2C55	U+24E4	# CIRCLED LATIN SMALL LETTER U	[2000]
+3-2C56	U+24E5	# CIRCLED LATIN SMALL LETTER V	[2000]
+3-2C57	U+24E6	# CIRCLED LATIN SMALL LETTER W	[2000]
+3-2C58	U+24E7	# CIRCLED LATIN SMALL LETTER X	[2000]
+3-2C59	U+24E8	# CIRCLED LATIN SMALL LETTER Y	[2000]
+3-2C5A	U+24E9	# CIRCLED LATIN SMALL LETTER Z	[2000]
+3-2C5B	U+32D0	# CIRCLED KATAKANA A	[2000]
+3-2C5C	U+32D1	# CIRCLED KATAKANA I	[2000]
+3-2C5D	U+32D2	# CIRCLED KATAKANA U	[2000]
+3-2C5E	U+32D3	# CIRCLED KATAKANA E	[2000]
+3-2C5F	U+32D4	# CIRCLED KATAKANA O	[2000]
+3-2C60	U+32D5	# CIRCLED KATAKANA KA	[2000]
+3-2C61	U+32D6	# CIRCLED KATAKANA KI	[2000]
+3-2C62	U+32D7	# CIRCLED KATAKANA KU	[2000]
+3-2C63	U+32D8	# CIRCLED KATAKANA KE	[2000]
+3-2C64	U+32D9	# CIRCLED KATAKANA KO	[2000]
+3-2C65	U+32DA	# CIRCLED KATAKANA SA	[2000]
+3-2C66	U+32DB	# CIRCLED KATAKANA SI	[2000]
+3-2C67	U+32DC	# CIRCLED KATAKANA SU	[2000]
+3-2C68	U+32DD	# CIRCLED KATAKANA SE	[2000]
+3-2C69	U+32DE	# CIRCLED KATAKANA SO	[2000]
+3-2C6A	U+32DF	# CIRCLED KATAKANA TA	[2000]
+3-2C6B	U+32E0	# CIRCLED KATAKANA TI	[2000]
+3-2C6C	U+32E1	# CIRCLED KATAKANA TU	[2000]
+3-2C6D	U+32E2	# CIRCLED KATAKANA TE	[2000]
+3-2C6E	U+32E3	# CIRCLED KATAKANA TO	[2000]
+3-2C6F	U+32FA	# CIRCLED KATAKANA RO	[2000]
+3-2C70	U+32E9	# CIRCLED KATAKANA HA	[2000]
+3-2C71	U+32E5	# CIRCLED KATAKANA NI	[2000]
+3-2C72	U+32ED	# CIRCLED KATAKANA HO	[2000]
+3-2C73	U+32EC	# CIRCLED KATAKANA HE	[2000]
+3-2C74		# <reserved>
+3-2C75		# <reserved>
+3-2C76		# <reserved>
+3-2C77		# <reserved>
+3-2C78		# <reserved>
+3-2C79		# <reserved>
+3-2C7A		# <reserved>
+3-2C7B		# <reserved>
+3-2C7C		# <reserved>
+3-2C7D	U+2051	# TWO ASTERISKS ALIGNED VERTICALLY	[2000]	[Unicode3.2]
+3-2C7E	U+2042	# ASTERISM	[2000]
+3-2D21	U+2460	# CIRCLED DIGIT ONE	[2000]
+3-2D22	U+2461	# CIRCLED DIGIT TWO	[2000]
+3-2D23	U+2462	# CIRCLED DIGIT THREE	[2000]
+3-2D24	U+2463	# CIRCLED DIGIT FOUR	[2000]
+3-2D25	U+2464	# CIRCLED DIGIT FIVE	[2000]
+3-2D26	U+2465	# CIRCLED DIGIT SIX	[2000]
+3-2D27	U+2466	# CIRCLED DIGIT SEVEN	[2000]
+3-2D28	U+2467	# CIRCLED DIGIT EIGHT	[2000]
+3-2D29	U+2468	# CIRCLED DIGIT NINE	[2000]
+3-2D2A	U+2469	# CIRCLED NUMBER TEN	[2000]
+3-2D2B	U+246A	# CIRCLED NUMBER ELEVEN	[2000]
+3-2D2C	U+246B	# CIRCLED NUMBER TWELVE	[2000]
+3-2D2D	U+246C	# CIRCLED NUMBER THIRTEEN	[2000]
+3-2D2E	U+246D	# CIRCLED NUMBER FOURTEEN	[2000]
+3-2D2F	U+246E	# CIRCLED NUMBER FIFTEEN	[2000]
+3-2D30	U+246F	# CIRCLED NUMBER SIXTEEN	[2000]
+3-2D31	U+2470	# CIRCLED NUMBER SEVENTEEN	[2000]
+3-2D32	U+2471	# CIRCLED NUMBER EIGHTEEN	[2000]
+3-2D33	U+2472	# CIRCLED NUMBER NINETEEN	[2000]
+3-2D34	U+2473	# CIRCLED NUMBER TWENTY	[2000]
+3-2D35	U+2160	# ROMAN NUMERAL ONE	[2000]
+3-2D36	U+2161	# ROMAN NUMERAL TWO	[2000]
+3-2D37	U+2162	# ROMAN NUMERAL THREE	[2000]
+3-2D38	U+2163	# ROMAN NUMERAL FOUR	[2000]
+3-2D39	U+2164	# ROMAN NUMERAL FIVE	[2000]
+3-2D3A	U+2165	# ROMAN NUMERAL SIX	[2000]
+3-2D3B	U+2166	# ROMAN NUMERAL SEVEN	[2000]
+3-2D3C	U+2167	# ROMAN NUMERAL EIGHT	[2000]
+3-2D3D	U+2168	# ROMAN NUMERAL NINE	[2000]
+3-2D3E	U+2169	# ROMAN NUMERAL TEN	[2000]
+3-2D3F	U+216A	# ROMAN NUMERAL ELEVEN	[2000]
+3-2D40	U+3349	# SQUARE MIRI	[2000]
+3-2D41	U+3314	# SQUARE KIRO	[2000]
+3-2D42	U+3322	# SQUARE SENTI	[2000]
+3-2D43	U+334D	# SQUARE MEETORU	[2000]
+3-2D44	U+3318	# SQUARE GURAMU	[2000]
+3-2D45	U+3327	# SQUARE TON	[2000]
+3-2D46	U+3303	# SQUARE AARU	[2000]
+3-2D47	U+3336	# SQUARE HEKUTAARU	[2000]
+3-2D48	U+3351	# SQUARE RITTORU	[2000]
+3-2D49	U+3357	# SQUARE WATTO	[2000]
+3-2D4A	U+330D	# SQUARE KARORII	[2000]
+3-2D4B	U+3326	# SQUARE DORU	[2000]
+3-2D4C	U+3323	# SQUARE SENTO	[2000]
+3-2D4D	U+332B	# SQUARE PAASENTO	[2000]
+3-2D4E	U+334A	# SQUARE MIRIBAARU	[2000]
+3-2D4F	U+333B	# SQUARE PEEZI	[2000]
+3-2D50	U+339C	# SQUARE MM	[2000]
+3-2D51	U+339D	# SQUARE CM	[2000]
+3-2D52	U+339E	# SQUARE KM	[2000]
+3-2D53	U+338E	# SQUARE MG	[2000]
+3-2D54	U+338F	# SQUARE KG	[2000]
+3-2D55	U+33C4	# SQUARE CC	[2000]
+3-2D56	U+33A1	# SQUARE M SQUARED	[2000]
+3-2D57	U+216B	# ROMAN NUMERAL TWELVE	[2000]
+3-2D58		# <reserved>
+3-2D59		# <reserved>
+3-2D5A		# <reserved>
+3-2D5B		# <reserved>
+3-2D5C		# <reserved>
+3-2D5D		# <reserved>
+3-2D5E		# <reserved>
+3-2D5F	U+337B	# SQUARE ERA NAME HEISEI	[2000]
+3-2D60	U+301D	# REVERSED DOUBLE PRIME QUOTATION MARK	[2000]
+3-2D61	U+301F	# LOW DOUBLE PRIME QUOTATION MARK	[2000]
+3-2D62	U+2116	# NUMERO SIGN	[2000]
+3-2D63	U+33CD	# SQUARE KK	[2000]
+3-2D64	U+2121	# TELEPHONE SIGN	[2000]
+3-2D65	U+32A4	# CIRCLED IDEOGRAPH HIGH	[2000]
+3-2D66	U+32A5	# CIRCLED IDEOGRAPH CENTRE	[2000]
+3-2D67	U+32A6	# CIRCLED IDEOGRAPH LOW	[2000]
+3-2D68	U+32A7	# CIRCLED IDEOGRAPH LEFT	[2000]
+3-2D69	U+32A8	# CIRCLED IDEOGRAPH RIGHT	[2000]
+3-2D6A	U+3231	# PARENTHESIZED IDEOGRAPH STOCK	[2000]
+3-2D6B	U+3232	# PARENTHESIZED IDEOGRAPH HAVE	[2000]
+3-2D6C	U+3239	# PARENTHESIZED IDEOGRAPH REPRESENT	[2000]
+3-2D6D	U+337E	# SQUARE ERA NAME MEIZI	[2000]
+3-2D6E	U+337D	# SQUARE ERA NAME TAISYOU	[2000]
+3-2D6F	U+337C	# SQUARE ERA NAME SYOUWA	[2000]
+3-2D70		# <reserved>	Windows: U+2252
+3-2D71		# <reserved>	Windows: U+2261
+3-2D72		# <reserved>	Windows: U+222B
+3-2D73	U+222E	# CONTOUR INTEGRAL	[2000]
+3-2D74		# <reserved>	Windows: U+2211
+3-2D75		# <reserved>	Windows: U+221A
+3-2D76		# <reserved>	Windows: U+22A5
+3-2D77		# <reserved>	Windows: U+2220
+3-2D78	U+221F	# RIGHT ANGLE	[2000]
+3-2D79	U+22BF	# RIGHT TRIANGLE	[2000]
+3-2D7A		# <reserved>	Windows: U+2235
+3-2D7B		# <reserved>	Windows: U+2229
+3-2D7C		# <reserved>	Windows: U+222A
+3-2D7D	U+2756	# BLACK DIAMOND MINUS WHITE X	[2000]
+3-2D7E	U+261E	# WHITE RIGHT POINTING INDEX	[2000]
+3-2E21	U+4FF1	# <cjk> [2004]
+3-2E22	U+2000B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F780
+3-2E23	U+3402	# <cjk>	[2000]
+3-2E24	U+4E28	# <cjk>	[2000]
+3-2E25	U+4E2F	# <cjk>	[2000]
+3-2E26	U+4E30	# <cjk>	[2000]
+3-2E27	U+4E8D	# <cjk>	[2000]
+3-2E28	U+4EE1	# <cjk>	[2000]
+3-2E29	U+4EFD	# <cjk>	[2000]
+3-2E2A	U+4EFF	# <cjk>	[2000]
+3-2E2B	U+4F03	# <cjk>	[2000]
+3-2E2C	U+4F0B	# <cjk>	[2000]
+3-2E2D	U+4F60	# <cjk>	[2000]
+3-2E2E	U+4F48	# <cjk>	[2000]
+3-2E2F	U+4F49	# <cjk>	[2000]
+3-2E30	U+4F56	# <cjk>	[2000]
+3-2E31	U+4F5F	# <cjk>	[2000]
+3-2E32	U+4F6A	# <cjk>	[2000]
+3-2E33	U+4F6C	# <cjk>	[2000]
+3-2E34	U+4F7E	# <cjk>	[2000]
+3-2E35	U+4F8A	# <cjk>	[2000]
+3-2E36	U+4F94	# <cjk>	[2000]
+3-2E37	U+4F97	# <cjk>	[2000]
+3-2E38	U+FA30	# CJK COMPATIBILITY IDEOGRAPH-FA30	[2000]	[Unicode3.2]
+3-2E39	U+4FC9	# <cjk>	[2000]
+3-2E3A	U+4FE0	# <cjk>	[2000]
+3-2E3B	U+5001	# <cjk>	[2000]
+3-2E3C	U+5002	# <cjk>	[2000]
+3-2E3D	U+500E	# <cjk>	[2000]
+3-2E3E	U+5018	# <cjk>	[2000]
+3-2E3F	U+5027	# <cjk>	[2000]
+3-2E40	U+502E	# <cjk>	[2000]
+3-2E41	U+5040	# <cjk>	[2000]
+3-2E42	U+503B	# <cjk>	[2000]
+3-2E43	U+5041	# <cjk>	[2000]
+3-2E44	U+5094	# <cjk>	[2000]
+3-2E45	U+50CC	# <cjk>	[2000]
+3-2E46	U+50F2	# <cjk>	[2000]
+3-2E47	U+50D0	# <cjk>	[2000]
+3-2E48	U+50E6	# <cjk>	[2000]
+3-2E49	U+FA31	# CJK COMPATIBILITY IDEOGRAPH-FA31	[2000]	[Unicode3.2]
+3-2E4A	U+5106	# <cjk>	[2000]
+3-2E4B	U+5103	# <cjk>	[2000]
+3-2E4C	U+510B	# <cjk>	[2000]
+3-2E4D	U+511E	# <cjk>	[2000]
+3-2E4E	U+5135	# <cjk>	[2000]
+3-2E4F	U+514A	# <cjk>	[2000]
+3-2E50	U+FA32	# CJK COMPATIBILITY IDEOGRAPH-FA32	[2000]	[Unicode3.2]
+3-2E51	U+5155	# <cjk>	[2000]
+3-2E52	U+5157	# <cjk>	[2000]
+3-2E53	U+34B5	# <cjk>	[2000]
+3-2E54	U+519D	# <cjk>	[2000]
+3-2E55	U+51C3	# <cjk>	[2000]
+3-2E56	U+51CA	# <cjk>	[2000]
+3-2E57	U+51DE	# <cjk>	[2000]
+3-2E58	U+51E2	# <cjk>	[2000]
+3-2E59	U+51EE	# <cjk>	[2000]
+3-2E5A	U+5201	# <cjk>	[2000]
+3-2E5B	U+34DB	# <cjk>	[2000]
+3-2E5C	U+5213	# <cjk>	[2000]
+3-2E5D	U+5215	# <cjk>	[2000]
+3-2E5E	U+5249	# <cjk>	[2000]
+3-2E5F	U+5257	# <cjk>	[2000]
+3-2E60	U+5261	# <cjk>	[2000]
+3-2E61	U+5293	# <cjk>	[2000]
+3-2E62	U+52C8	# <cjk>	[2000]
+3-2E63	U+FA33	# CJK COMPATIBILITY IDEOGRAPH-FA33	[2000]	[Unicode3.2]
+3-2E64	U+52CC	# <cjk>	[2000]
+3-2E65	U+52D0	# <cjk>	[2000]
+3-2E66	U+52D6	# <cjk>	[2000]
+3-2E67	U+52DB	# <cjk>	[2000]
+3-2E68	U+FA34	# CJK COMPATIBILITY IDEOGRAPH-FA34	[2000]	[Unicode3.2]
+3-2E69	U+52F0	# <cjk>	[2000]
+3-2E6A	U+52FB	# <cjk>	[2000]
+3-2E6B	U+5300	# <cjk>	[2000]
+3-2E6C	U+5307	# <cjk>	[2000]
+3-2E6D	U+531C	# <cjk>	[2000]
+3-2E6E	U+FA35	# CJK COMPATIBILITY IDEOGRAPH-FA35	[2000]	[Unicode3.2]
+3-2E6F	U+5361	# <cjk>	[2000]
+3-2E70	U+5363	# <cjk>	[2000]
+3-2E71	U+537D	# <cjk>	[2000]
+3-2E72	U+5393	# <cjk>	[2000]
+3-2E73	U+539D	# <cjk>	[2000]
+3-2E74	U+53B2	# <cjk>	[2000]
+3-2E75	U+5412	# <cjk>	[2000]
+3-2E76	U+5427	# <cjk>	[2000]
+3-2E77	U+544D	# <cjk>	[2000]
+3-2E78	U+549C	# <cjk>	[2000]
+3-2E79	U+546B	# <cjk>	[2000]
+3-2E7A	U+5474	# <cjk>	[2000]
+3-2E7B	U+547F	# <cjk>	[2000]
+3-2E7C	U+5488	# <cjk>	[2000]
+3-2E7D	U+5496	# <cjk>	[2000]
+3-2E7E	U+54A1	# <cjk>	[2000]
+3-2F21	U+54A9	# <cjk>	[2000]
+3-2F22	U+54C6	# <cjk>	[2000]
+3-2F23	U+54FF	# <cjk>	[2000]
+3-2F24	U+550E	# <cjk>	[2000]
+3-2F25	U+552B	# <cjk>	[2000]
+3-2F26	U+5535	# <cjk>	[2000]
+3-2F27	U+5550	# <cjk>	[2000]
+3-2F28	U+555E	# <cjk>	[2000]
+3-2F29	U+5581	# <cjk>	[2000]
+3-2F2A	U+5586	# <cjk>	[2000]
+3-2F2B	U+558E	# <cjk>	[2000]
+3-2F2C	U+FA36	# CJK COMPATIBILITY IDEOGRAPH-FA36	[2000]	[Unicode3.2]
+3-2F2D	U+55AD	# <cjk>	[2000]
+3-2F2E	U+55CE	# <cjk>	[2000]
+3-2F2F	U+FA37	# CJK COMPATIBILITY IDEOGRAPH-FA37	[2000]	[Unicode3.2]
+3-2F30	U+5608	# <cjk>	[2000]
+3-2F31	U+560E	# <cjk>	[2000]
+3-2F32	U+563B	# <cjk>	[2000]
+3-2F33	U+5649	# <cjk>	[2000]
+3-2F34	U+5676	# <cjk>	[2000]
+3-2F35	U+5666	# <cjk>	[2000]
+3-2F36	U+FA38	# CJK COMPATIBILITY IDEOGRAPH-FA38	[2000]	[Unicode3.2]
+3-2F37	U+566F	# <cjk>	[2000]
+3-2F38	U+5671	# <cjk>	[2000]
+3-2F39	U+5672	# <cjk>	[2000]
+3-2F3A	U+5699	# <cjk>	[2000]
+3-2F3B	U+569E	# <cjk>	[2000]
+3-2F3C	U+56A9	# <cjk>	[2000]
+3-2F3D	U+56AC	# <cjk>	[2000]
+3-2F3E	U+56B3	# <cjk>	[2000]
+3-2F3F	U+56C9	# <cjk>	[2000]
+3-2F40	U+56CA	# <cjk>	[2000]
+3-2F41	U+570A	# <cjk>	[2000]
+3-2F42	U+2123D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F78A
+3-2F43	U+5721	# <cjk>	[2000]
+3-2F44	U+572F	# <cjk>	[2000]
+3-2F45	U+5733	# <cjk>	[2000]
+3-2F46	U+5734	# <cjk>	[2000]
+3-2F47	U+5770	# <cjk>	[2000]
+3-2F48	U+5777	# <cjk>	[2000]
+3-2F49	U+577C	# <cjk>	[2000]
+3-2F4A	U+579C	# <cjk>	[2000]
+3-2F4B	U+FA0F	# CJK COMPATIBILITY IDEOGRAPH-FA0F	[2000]
+3-2F4C	U+2131B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F78B
+3-2F4D	U+57B8	# <cjk>	[2000]
+3-2F4E	U+57C7	# <cjk>	[2000]
+3-2F4F	U+57C8	# <cjk>	[2000]
+3-2F50	U+57CF	# <cjk>	[2000]
+3-2F51	U+57E4	# <cjk>	[2000]
+3-2F52	U+57ED	# <cjk>	[2000]
+3-2F53	U+57F5	# <cjk>	[2000]
+3-2F54	U+57F6	# <cjk>	[2000]
+3-2F55	U+57FF	# <cjk>	[2000]
+3-2F56	U+5809	# <cjk>	[2000]
+3-2F57	U+FA10	# CJK COMPATIBILITY IDEOGRAPH-FA10	[2000]
+3-2F58	U+5861	# <cjk>	[2000]
+3-2F59	U+5864	# <cjk>	[2000]
+3-2F5A	U+FA39	# CJK COMPATIBILITY IDEOGRAPH-FA39	[2000]	[Unicode3.2]
+3-2F5B	U+587C	# <cjk>	[2000]
+3-2F5C	U+5889	# <cjk>	[2000]
+3-2F5D	U+589E	# <cjk>	[2000]
+3-2F5E	U+FA3A	# CJK COMPATIBILITY IDEOGRAPH-FA3A	[2000]	[Unicode3.2]
+3-2F5F	U+58A9	# <cjk>	[2000]
+3-2F60	U+2146E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F78E
+3-2F61	U+58D2	# <cjk>	[2000]
+3-2F62	U+58CE	# <cjk>	[2000]
+3-2F63	U+58D4	# <cjk>	[2000]
+3-2F64	U+58DA	# <cjk>	[2000]
+3-2F65	U+58E0	# <cjk>	[2000]
+3-2F66	U+58E9	# <cjk>	[2000]
+3-2F67	U+590C	# <cjk>	[2000]
+3-2F68	U+8641	# <cjk>	[2000]
+3-2F69	U+595D	# <cjk>	[2000]
+3-2F6A	U+596D	# <cjk>	[2000]
+3-2F6B	U+598B	# <cjk>	[2000]
+3-2F6C	U+5992	# <cjk>	[2000]
+3-2F6D	U+59A4	# <cjk>	[2000]
+3-2F6E	U+59C3	# <cjk>	[2000]
+3-2F6F	U+59D2	# <cjk>	[2000]
+3-2F70	U+59DD	# <cjk>	[2000]
+3-2F71	U+5A13	# <cjk>	[2000]
+3-2F72	U+5A23	# <cjk>	[2000]
+3-2F73	U+5A67	# <cjk>	[2000]
+3-2F74	U+5A6D	# <cjk>	[2000]
+3-2F75	U+5A77	# <cjk>	[2000]
+3-2F76	U+5A7E	# <cjk>	[2000]
+3-2F77	U+5A84	# <cjk>	[2000]
+3-2F78	U+5A9E	# <cjk>	[2000]
+3-2F79	U+5AA7	# <cjk>	[2000]
+3-2F7A	U+5AC4	# <cjk>	[2000]
+3-2F7B	U+218BD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F78F
+3-2F7C	U+5B19	# <cjk>	[2000]
+3-2F7D	U+5B25	# <cjk>	[2000]
+3-2F7E	U+525D	# <cjk> [2004]
+3-3021	U+4E9C	# <cjk>
+3-3022	U+5516	# <cjk>
+3-3023	U+5A03	# <cjk>
+3-3024	U+963F	# <cjk>
+3-3025	U+54C0	# <cjk>
+3-3026	U+611B	# <cjk>
+3-3027	U+6328	# <cjk>
+3-3028	U+59F6	# <cjk>
+3-3029	U+9022	# <cjk>
+3-302A	U+8475	# <cjk>
+3-302B	U+831C	# <cjk>
+3-302C	U+7A50	# <cjk>
+3-302D	U+60AA	# <cjk>
+3-302E	U+63E1	# <cjk>
+3-302F	U+6E25	# <cjk>
+3-3030	U+65ED	# <cjk>
+3-3031	U+8466	# <cjk>
+3-3032	U+82A6	# <cjk>
+3-3033	U+9BF5	# <cjk>
+3-3034	U+6893	# <cjk>
+3-3035	U+5727	# <cjk>
+3-3036	U+65A1	# <cjk>
+3-3037	U+6271	# <cjk>
+3-3038	U+5B9B	# <cjk>
+3-3039	U+59D0	# <cjk>
+3-303A	U+867B	# <cjk>
+3-303B	U+98F4	# <cjk>
+3-303C	U+7D62	# <cjk>
+3-303D	U+7DBE	# <cjk>
+3-303E	U+9B8E	# <cjk>
+3-303F	U+6216	# <cjk>
+3-3040	U+7C9F	# <cjk>
+3-3041	U+88B7	# <cjk>
+3-3042	U+5B89	# <cjk>
+3-3043	U+5EB5	# <cjk>
+3-3044	U+6309	# <cjk>
+3-3045	U+6697	# <cjk>
+3-3046	U+6848	# <cjk>
+3-3047	U+95C7	# <cjk>
+3-3048	U+978D	# <cjk>
+3-3049	U+674F	# <cjk>
+3-304A	U+4EE5	# <cjk>
+3-304B	U+4F0A	# <cjk>
+3-304C	U+4F4D	# <cjk>
+3-304D	U+4F9D	# <cjk>
+3-304E	U+5049	# <cjk>
+3-304F	U+56F2	# <cjk>
+3-3050	U+5937	# <cjk>
+3-3051	U+59D4	# <cjk>
+3-3052	U+5A01	# <cjk>
+3-3053	U+5C09	# <cjk>
+3-3054	U+60DF	# <cjk>
+3-3055	U+610F	# <cjk>
+3-3056	U+6170	# <cjk>
+3-3057	U+6613	# <cjk>
+3-3058	U+6905	# <cjk>
+3-3059	U+70BA	# <cjk>
+3-305A	U+754F	# <cjk>
+3-305B	U+7570	# <cjk>
+3-305C	U+79FB	# <cjk>
+3-305D	U+7DAD	# <cjk>
+3-305E	U+7DEF	# <cjk>
+3-305F	U+80C3	# <cjk>
+3-3060	U+840E	# <cjk>
+3-3061	U+8863	# <cjk>
+3-3062	U+8B02	# <cjk>
+3-3063	U+9055	# <cjk>
+3-3064	U+907A	# <cjk>
+3-3065	U+533B	# <cjk>
+3-3066	U+4E95	# <cjk>
+3-3067	U+4EA5	# <cjk>
+3-3068	U+57DF	# <cjk>
+3-3069	U+80B2	# <cjk>
+3-306A	U+90C1	# <cjk>
+3-306B	U+78EF	# <cjk>
+3-306C	U+4E00	# <cjk>
+3-306D	U+58F1	# <cjk>
+3-306E	U+6EA2	# <cjk>
+3-306F	U+9038	# <cjk>
+3-3070	U+7A32	# <cjk>
+3-3071	U+8328	# <cjk>
+3-3072	U+828B	# <cjk>
+3-3073	U+9C2F	# <cjk>
+3-3074	U+5141	# <cjk>
+3-3075	U+5370	# <cjk>
+3-3076	U+54BD	# <cjk>
+3-3077	U+54E1	# <cjk>
+3-3078	U+56E0	# <cjk>
+3-3079	U+59FB	# <cjk>
+3-307A	U+5F15	# <cjk>
+3-307B	U+98F2	# <cjk>
+3-307C	U+6DEB	# <cjk>
+3-307D	U+80E4	# <cjk>
+3-307E	U+852D	# <cjk>
+3-3121	U+9662	# <cjk>
+3-3122	U+9670	# <cjk>
+3-3123	U+96A0	# <cjk>
+3-3124	U+97FB	# <cjk>
+3-3125	U+540B	# <cjk>
+3-3126	U+53F3	# <cjk>
+3-3127	U+5B87	# <cjk>
+3-3128	U+70CF	# <cjk>
+3-3129	U+7FBD	# <cjk>
+3-312A	U+8FC2	# <cjk>
+3-312B	U+96E8	# <cjk>
+3-312C	U+536F	# <cjk>
+3-312D	U+9D5C	# <cjk>
+3-312E	U+7ABA	# <cjk>
+3-312F	U+4E11	# <cjk>
+3-3130	U+7893	# <cjk>
+3-3131	U+81FC	# <cjk>
+3-3132	U+6E26	# <cjk>
+3-3133	U+5618	# <cjk>
+3-3134	U+5504	# <cjk>
+3-3135	U+6B1D	# <cjk>
+3-3136	U+851A	# <cjk>
+3-3137	U+9C3B	# <cjk>
+3-3138	U+59E5	# <cjk>
+3-3139	U+53A9	# <cjk>
+3-313A	U+6D66	# <cjk>
+3-313B	U+74DC	# <cjk>
+3-313C	U+958F	# <cjk>
+3-313D	U+5642	# <cjk>
+3-313E	U+4E91	# <cjk>
+3-313F	U+904B	# <cjk>
+3-3140	U+96F2	# <cjk>
+3-3141	U+834F	# <cjk>
+3-3142	U+990C	# <cjk>
+3-3143	U+53E1	# <cjk>
+3-3144	U+55B6	# <cjk>
+3-3145	U+5B30	# <cjk>
+3-3146	U+5F71	# <cjk>
+3-3147	U+6620	# <cjk>
+3-3148	U+66F3	# <cjk>
+3-3149	U+6804	# <cjk>
+3-314A	U+6C38	# <cjk>
+3-314B	U+6CF3	# <cjk>
+3-314C	U+6D29	# <cjk>
+3-314D	U+745B	# <cjk>
+3-314E	U+76C8	# <cjk>
+3-314F	U+7A4E	# <cjk>
+3-3150	U+9834	# <cjk>
+3-3151	U+82F1	# <cjk>
+3-3152	U+885B	# <cjk>
+3-3153	U+8A60	# <cjk>
+3-3154	U+92ED	# <cjk>
+3-3155	U+6DB2	# <cjk>
+3-3156	U+75AB	# <cjk>
+3-3157	U+76CA	# <cjk>
+3-3158	U+99C5	# <cjk>
+3-3159	U+60A6	# <cjk>
+3-315A	U+8B01	# <cjk>
+3-315B	U+8D8A	# <cjk>
+3-315C	U+95B2	# <cjk>
+3-315D	U+698E	# <cjk>
+3-315E	U+53AD	# <cjk>
+3-315F	U+5186	# <cjk>
+3-3160	U+5712	# <cjk>
+3-3161	U+5830	# <cjk>
+3-3162	U+5944	# <cjk>
+3-3163	U+5BB4	# <cjk>
+3-3164	U+5EF6	# <cjk>
+3-3165	U+6028	# <cjk>
+3-3166	U+63A9	# <cjk>
+3-3167	U+63F4	# <cjk>
+3-3168	U+6CBF	# <cjk>
+3-3169	U+6F14	# <cjk>
+3-316A	U+708E	# <cjk>
+3-316B	U+7114	# <cjk>
+3-316C	U+7159	# <cjk>
+3-316D	U+71D5	# <cjk>
+3-316E	U+733F	# <cjk>
+3-316F	U+7E01	# <cjk>
+3-3170	U+8276	# <cjk>
+3-3171	U+82D1	# <cjk>
+3-3172	U+8597	# <cjk>
+3-3173	U+9060	# <cjk>
+3-3174	U+925B	# <cjk>
+3-3175	U+9D1B	# <cjk>
+3-3176	U+5869	# <cjk>
+3-3177	U+65BC	# <cjk>
+3-3178	U+6C5A	# <cjk>
+3-3179	U+7525	# <cjk>
+3-317A	U+51F9	# <cjk>
+3-317B	U+592E	# <cjk>
+3-317C	U+5965	# <cjk>
+3-317D	U+5F80	# <cjk>
+3-317E	U+5FDC	# <cjk>
+3-3221	U+62BC	# <cjk>
+3-3222	U+65FA	# <cjk>
+3-3223	U+6A2A	# <cjk>
+3-3224	U+6B27	# <cjk>
+3-3225	U+6BB4	# <cjk>
+3-3226	U+738B	# <cjk>
+3-3227	U+7FC1	# <cjk>
+3-3228	U+8956	# <cjk>
+3-3229	U+9D2C	# <cjk>
+3-322A	U+9D0E	# <cjk>
+3-322B	U+9EC4	# <cjk>
+3-322C	U+5CA1	# <cjk>
+3-322D	U+6C96	# <cjk>
+3-322E	U+837B	# <cjk>
+3-322F	U+5104	# <cjk>
+3-3230	U+5C4B	# <cjk>
+3-3231	U+61B6	# <cjk>
+3-3232	U+81C6	# <cjk>
+3-3233	U+6876	# <cjk>
+3-3234	U+7261	# <cjk>
+3-3235	U+4E59	# <cjk>
+3-3236	U+4FFA	# <cjk>
+3-3237	U+5378	# <cjk>
+3-3238	U+6069	# <cjk>
+3-3239	U+6E29	# <cjk>
+3-323A	U+7A4F	# <cjk>
+3-323B	U+97F3	# <cjk>
+3-323C	U+4E0B	# <cjk>
+3-323D	U+5316	# <cjk>
+3-323E	U+4EEE	# <cjk>
+3-323F	U+4F55	# <cjk>
+3-3240	U+4F3D	# <cjk>
+3-3241	U+4FA1	# <cjk>
+3-3242	U+4F73	# <cjk>
+3-3243	U+52A0	# <cjk>
+3-3244	U+53EF	# <cjk>
+3-3245	U+5609	# <cjk>
+3-3246	U+590F	# <cjk>
+3-3247	U+5AC1	# <cjk>
+3-3248	U+5BB6	# <cjk>
+3-3249	U+5BE1	# <cjk>
+3-324A	U+79D1	# <cjk>
+3-324B	U+6687	# <cjk>
+3-324C	U+679C	# <cjk>
+3-324D	U+67B6	# <cjk>
+3-324E	U+6B4C	# <cjk>
+3-324F	U+6CB3	# <cjk>
+3-3250	U+706B	# <cjk>
+3-3251	U+73C2	# <cjk>
+3-3252	U+798D	# <cjk>
+3-3253	U+79BE	# <cjk>
+3-3254	U+7A3C	# <cjk>
+3-3255	U+7B87	# <cjk>
+3-3256	U+82B1	# <cjk>
+3-3257	U+82DB	# <cjk>
+3-3258	U+8304	# <cjk>
+3-3259	U+8377	# <cjk>
+3-325A	U+83EF	# <cjk>
+3-325B	U+83D3	# <cjk>
+3-325C	U+8766	# <cjk>
+3-325D	U+8AB2	# <cjk>
+3-325E	U+5629	# <cjk>
+3-325F	U+8CA8	# <cjk>
+3-3260	U+8FE6	# <cjk>
+3-3261	U+904E	# <cjk>
+3-3262	U+971E	# <cjk>
+3-3263	U+868A	# <cjk>
+3-3264	U+4FC4	# <cjk>
+3-3265	U+5CE8	# <cjk>
+3-3266	U+6211	# <cjk>
+3-3267	U+7259	# <cjk>
+3-3268	U+753B	# <cjk>
+3-3269	U+81E5	# <cjk>
+3-326A	U+82BD	# <cjk>
+3-326B	U+86FE	# <cjk>
+3-326C	U+8CC0	# <cjk>
+3-326D	U+96C5	# <cjk>
+3-326E	U+9913	# <cjk>
+3-326F	U+99D5	# <cjk>
+3-3270	U+4ECB	# <cjk>
+3-3271	U+4F1A	# <cjk>
+3-3272	U+89E3	# <cjk>
+3-3273	U+56DE	# <cjk>
+3-3274	U+584A	# <cjk>
+3-3275	U+58CA	# <cjk>
+3-3276	U+5EFB	# <cjk>
+3-3277	U+5FEB	# <cjk>
+3-3278	U+602A	# <cjk>
+3-3279	U+6094	# <cjk>
+3-327A	U+6062	# <cjk>
+3-327B	U+61D0	# <cjk>
+3-327C	U+6212	# <cjk>
+3-327D	U+62D0	# <cjk>
+3-327E	U+6539	# <cjk>
+3-3321	U+9B41	# <cjk>
+3-3322	U+6666	# <cjk>
+3-3323	U+68B0	# <cjk>
+3-3324	U+6D77	# <cjk>
+3-3325	U+7070	# <cjk>
+3-3326	U+754C	# <cjk>
+3-3327	U+7686	# <cjk>
+3-3328	U+7D75	# <cjk>
+3-3329	U+82A5	# <cjk>
+3-332A	U+87F9	# <cjk>
+3-332B	U+958B	# <cjk>
+3-332C	U+968E	# <cjk>
+3-332D	U+8C9D	# <cjk>
+3-332E	U+51F1	# <cjk>
+3-332F	U+52BE	# <cjk>
+3-3330	U+5916	# <cjk>
+3-3331	U+54B3	# <cjk>
+3-3332	U+5BB3	# <cjk>
+3-3333	U+5D16	# <cjk>
+3-3334	U+6168	# <cjk>
+3-3335	U+6982	# <cjk>
+3-3336	U+6DAF	# <cjk>
+3-3337	U+788D	# <cjk>
+3-3338	U+84CB	# <cjk>
+3-3339	U+8857	# <cjk>
+3-333A	U+8A72	# <cjk>
+3-333B	U+93A7	# <cjk>
+3-333C	U+9AB8	# <cjk>
+3-333D	U+6D6C	# <cjk>
+3-333E	U+99A8	# <cjk>
+3-333F	U+86D9	# <cjk>
+3-3340	U+57A3	# <cjk>
+3-3341	U+67FF	# <cjk>
+3-3342	U+86CE	# <cjk>
+3-3343	U+920E	# <cjk>
+3-3344	U+5283	# <cjk>
+3-3345	U+5687	# <cjk>
+3-3346	U+5404	# <cjk>
+3-3347	U+5ED3	# <cjk>
+3-3348	U+62E1	# <cjk>
+3-3349	U+64B9	# <cjk>
+3-334A	U+683C	# <cjk>
+3-334B	U+6838	# <cjk>
+3-334C	U+6BBB	# <cjk>
+3-334D	U+7372	# <cjk>
+3-334E	U+78BA	# <cjk>
+3-334F	U+7A6B	# <cjk>
+3-3350	U+899A	# <cjk>
+3-3351	U+89D2	# <cjk>
+3-3352	U+8D6B	# <cjk>
+3-3353	U+8F03	# <cjk>
+3-3354	U+90ED	# <cjk>
+3-3355	U+95A3	# <cjk>
+3-3356	U+9694	# <cjk>
+3-3357	U+9769	# <cjk>
+3-3358	U+5B66	# <cjk>
+3-3359	U+5CB3	# <cjk>
+3-335A	U+697D	# <cjk>
+3-335B	U+984D	# <cjk>
+3-335C	U+984E	# <cjk>
+3-335D	U+639B	# <cjk>
+3-335E	U+7B20	# <cjk>
+3-335F	U+6A2B	# <cjk>
+3-3360	U+6A7F	# <cjk>
+3-3361	U+68B6	# <cjk>
+3-3362	U+9C0D	# <cjk>
+3-3363	U+6F5F	# <cjk>
+3-3364	U+5272	# <cjk>
+3-3365	U+559D	# <cjk>
+3-3366	U+6070	# <cjk>
+3-3367	U+62EC	# <cjk>
+3-3368	U+6D3B	# <cjk>
+3-3369	U+6E07	# <cjk>
+3-336A	U+6ED1	# <cjk>
+3-336B	U+845B	# <cjk>
+3-336C	U+8910	# <cjk>
+3-336D	U+8F44	# <cjk>
+3-336E	U+4E14	# <cjk>
+3-336F	U+9C39	# <cjk>
+3-3370	U+53F6	# <cjk>
+3-3371	U+691B	# <cjk>
+3-3372	U+6A3A	# <cjk>
+3-3373	U+9784	# <cjk>
+3-3374	U+682A	# <cjk>
+3-3375	U+515C	# <cjk>
+3-3376	U+7AC3	# <cjk>
+3-3377	U+84B2	# <cjk>
+3-3378	U+91DC	# <cjk>
+3-3379	U+938C	# <cjk>
+3-337A	U+565B	# <cjk>
+3-337B	U+9D28	# <cjk>
+3-337C	U+6822	# <cjk>
+3-337D	U+8305	# <cjk>
+3-337E	U+8431	# <cjk>
+3-3421	U+7CA5	# <cjk>
+3-3422	U+5208	# <cjk>
+3-3423	U+82C5	# <cjk>
+3-3424	U+74E6	# <cjk>
+3-3425	U+4E7E	# <cjk>
+3-3426	U+4F83	# <cjk>
+3-3427	U+51A0	# <cjk>
+3-3428	U+5BD2	# <cjk>
+3-3429	U+520A	# <cjk>
+3-342A	U+52D8	# <cjk>
+3-342B	U+52E7	# <cjk>
+3-342C	U+5DFB	# <cjk>
+3-342D	U+559A	# <cjk>
+3-342E	U+582A	# <cjk>
+3-342F	U+59E6	# <cjk>
+3-3430	U+5B8C	# <cjk>
+3-3431	U+5B98	# <cjk>
+3-3432	U+5BDB	# <cjk>
+3-3433	U+5E72	# <cjk>
+3-3434	U+5E79	# <cjk>
+3-3435	U+60A3	# <cjk>
+3-3436	U+611F	# <cjk>
+3-3437	U+6163	# <cjk>
+3-3438	U+61BE	# <cjk>
+3-3439	U+63DB	# <cjk>
+3-343A	U+6562	# <cjk>
+3-343B	U+67D1	# <cjk>
+3-343C	U+6853	# <cjk>
+3-343D	U+68FA	# <cjk>
+3-343E	U+6B3E	# <cjk>
+3-343F	U+6B53	# <cjk>
+3-3440	U+6C57	# <cjk>
+3-3441	U+6F22	# <cjk>
+3-3442	U+6F97	# <cjk>
+3-3443	U+6F45	# <cjk>
+3-3444	U+74B0	# <cjk>
+3-3445	U+7518	# <cjk>
+3-3446	U+76E3	# <cjk>
+3-3447	U+770B	# <cjk>
+3-3448	U+7AFF	# <cjk>
+3-3449	U+7BA1	# <cjk>
+3-344A	U+7C21	# <cjk>
+3-344B	U+7DE9	# <cjk>
+3-344C	U+7F36	# <cjk>
+3-344D	U+7FF0	# <cjk>
+3-344E	U+809D	# <cjk>
+3-344F	U+8266	# <cjk>
+3-3450	U+839E	# <cjk>
+3-3451	U+89B3	# <cjk>
+3-3452	U+8ACC	# <cjk>
+3-3453	U+8CAB	# <cjk>
+3-3454	U+9084	# <cjk>
+3-3455	U+9451	# <cjk>
+3-3456	U+9593	# <cjk>
+3-3457	U+9591	# <cjk>
+3-3458	U+95A2	# <cjk>
+3-3459	U+9665	# <cjk>
+3-345A	U+97D3	# <cjk>
+3-345B	U+9928	# <cjk>
+3-345C	U+8218	# <cjk>
+3-345D	U+4E38	# <cjk>
+3-345E	U+542B	# <cjk>
+3-345F	U+5CB8	# <cjk>
+3-3460	U+5DCC	# <cjk>
+3-3461	U+73A9	# <cjk>
+3-3462	U+764C	# <cjk>
+3-3463	U+773C	# <cjk>
+3-3464	U+5CA9	# <cjk>
+3-3465	U+7FEB	# <cjk>
+3-3466	U+8D0B	# <cjk>
+3-3467	U+96C1	# <cjk>
+3-3468	U+9811	# <cjk>
+3-3469	U+9854	# <cjk>
+3-346A	U+9858	# <cjk>
+3-346B	U+4F01	# <cjk>
+3-346C	U+4F0E	# <cjk>
+3-346D	U+5371	# <cjk>
+3-346E	U+559C	# <cjk>
+3-346F	U+5668	# <cjk>
+3-3470	U+57FA	# <cjk>
+3-3471	U+5947	# <cjk>
+3-3472	U+5B09	# <cjk>
+3-3473	U+5BC4	# <cjk>
+3-3474	U+5C90	# <cjk>
+3-3475	U+5E0C	# <cjk>
+3-3476	U+5E7E	# <cjk>
+3-3477	U+5FCC	# <cjk>
+3-3478	U+63EE	# <cjk>
+3-3479	U+673A	# <cjk>
+3-347A	U+65D7	# <cjk>
+3-347B	U+65E2	# <cjk>
+3-347C	U+671F	# <cjk>
+3-347D	U+68CB	# <cjk>
+3-347E	U+68C4	# <cjk>
+3-3521	U+6A5F	# <cjk>
+3-3522	U+5E30	# <cjk>
+3-3523	U+6BC5	# <cjk>
+3-3524	U+6C17	# <cjk>
+3-3525	U+6C7D	# <cjk>
+3-3526	U+757F	# <cjk>
+3-3527	U+7948	# <cjk>
+3-3528	U+5B63	# <cjk>
+3-3529	U+7A00	# <cjk>
+3-352A	U+7D00	# <cjk>
+3-352B	U+5FBD	# <cjk>
+3-352C	U+898F	# <cjk>
+3-352D	U+8A18	# <cjk>
+3-352E	U+8CB4	# <cjk>
+3-352F	U+8D77	# <cjk>
+3-3530	U+8ECC	# <cjk>
+3-3531	U+8F1D	# <cjk>
+3-3532	U+98E2	# <cjk>
+3-3533	U+9A0E	# <cjk>
+3-3534	U+9B3C	# <cjk>
+3-3535	U+4E80	# <cjk>
+3-3536	U+507D	# <cjk>
+3-3537	U+5100	# <cjk>
+3-3538	U+5993	# <cjk>
+3-3539	U+5B9C	# <cjk>
+3-353A	U+622F	# <cjk>
+3-353B	U+6280	# <cjk>
+3-353C	U+64EC	# <cjk>
+3-353D	U+6B3A	# <cjk>
+3-353E	U+72A0	# <cjk>
+3-353F	U+7591	# <cjk>
+3-3540	U+7947	# <cjk>
+3-3541	U+7FA9	# <cjk>
+3-3542	U+87FB	# <cjk>
+3-3543	U+8ABC	# <cjk>
+3-3544	U+8B70	# <cjk>
+3-3545	U+63AC	# <cjk>
+3-3546	U+83CA	# <cjk>
+3-3547	U+97A0	# <cjk>
+3-3548	U+5409	# <cjk>
+3-3549	U+5403	# <cjk>
+3-354A	U+55AB	# <cjk>
+3-354B	U+6854	# <cjk>
+3-354C	U+6A58	# <cjk>
+3-354D	U+8A70	# <cjk>
+3-354E	U+7827	# <cjk>
+3-354F	U+6775	# <cjk>
+3-3550	U+9ECD	# <cjk>
+3-3551	U+5374	# <cjk>
+3-3552	U+5BA2	# <cjk>
+3-3553	U+811A	# <cjk>
+3-3554	U+8650	# <cjk>
+3-3555	U+9006	# <cjk>
+3-3556	U+4E18	# <cjk>
+3-3557	U+4E45	# <cjk>
+3-3558	U+4EC7	# <cjk>
+3-3559	U+4F11	# <cjk>
+3-355A	U+53CA	# <cjk>
+3-355B	U+5438	# <cjk>
+3-355C	U+5BAE	# <cjk>
+3-355D	U+5F13	# <cjk>
+3-355E	U+6025	# <cjk>
+3-355F	U+6551	# <cjk>
+3-3560	U+673D	# <cjk>
+3-3561	U+6C42	# <cjk>
+3-3562	U+6C72	# <cjk>
+3-3563	U+6CE3	# <cjk>
+3-3564	U+7078	# <cjk>
+3-3565	U+7403	# <cjk>
+3-3566	U+7A76	# <cjk>
+3-3567	U+7AAE	# <cjk>
+3-3568	U+7B08	# <cjk>
+3-3569	U+7D1A	# <cjk>
+3-356A	U+7CFE	# <cjk>
+3-356B	U+7D66	# <cjk>
+3-356C	U+65E7	# <cjk>
+3-356D	U+725B	# <cjk>
+3-356E	U+53BB	# <cjk>
+3-356F	U+5C45	# <cjk>
+3-3570	U+5DE8	# <cjk>
+3-3571	U+62D2	# <cjk>
+3-3572	U+62E0	# <cjk>
+3-3573	U+6319	# <cjk>
+3-3574	U+6E20	# <cjk>
+3-3575	U+865A	# <cjk>
+3-3576	U+8A31	# <cjk>
+3-3577	U+8DDD	# <cjk>
+3-3578	U+92F8	# <cjk>
+3-3579	U+6F01	# <cjk>
+3-357A	U+79A6	# <cjk>
+3-357B	U+9B5A	# <cjk>
+3-357C	U+4EA8	# <cjk>
+3-357D	U+4EAB	# <cjk>
+3-357E	U+4EAC	# <cjk>
+3-3621	U+4F9B	# <cjk>
+3-3622	U+4FA0	# <cjk>
+3-3623	U+50D1	# <cjk>
+3-3624	U+5147	# <cjk>
+3-3625	U+7AF6	# <cjk>
+3-3626	U+5171	# <cjk>
+3-3627	U+51F6	# <cjk>
+3-3628	U+5354	# <cjk>
+3-3629	U+5321	# <cjk>
+3-362A	U+537F	# <cjk>
+3-362B	U+53EB	# <cjk>
+3-362C	U+55AC	# <cjk>
+3-362D	U+5883	# <cjk>
+3-362E	U+5CE1	# <cjk>
+3-362F	U+5F37	# <cjk>
+3-3630	U+5F4A	# <cjk>
+3-3631	U+602F	# <cjk>
+3-3632	U+6050	# <cjk>
+3-3633	U+606D	# <cjk>
+3-3634	U+631F	# <cjk>
+3-3635	U+6559	# <cjk>
+3-3636	U+6A4B	# <cjk>
+3-3637	U+6CC1	# <cjk>
+3-3638	U+72C2	# <cjk>
+3-3639	U+72ED	# <cjk>
+3-363A	U+77EF	# <cjk>
+3-363B	U+80F8	# <cjk>
+3-363C	U+8105	# <cjk>
+3-363D	U+8208	# <cjk>
+3-363E	U+854E	# <cjk>
+3-363F	U+90F7	# <cjk>
+3-3640	U+93E1	# <cjk>
+3-3641	U+97FF	# <cjk>
+3-3642	U+9957	# <cjk>
+3-3643	U+9A5A	# <cjk>
+3-3644	U+4EF0	# <cjk>
+3-3645	U+51DD	# <cjk>
+3-3646	U+5C2D	# <cjk>
+3-3647	U+6681	# <cjk>
+3-3648	U+696D	# <cjk>
+3-3649	U+5C40	# <cjk>
+3-364A	U+66F2	# <cjk>
+3-364B	U+6975	# <cjk>
+3-364C	U+7389	# <cjk>
+3-364D	U+6850	# <cjk>
+3-364E	U+7C81	# <cjk>
+3-364F	U+50C5	# <cjk>
+3-3650	U+52E4	# <cjk>
+3-3651	U+5747	# <cjk>
+3-3652	U+5DFE	# <cjk>
+3-3653	U+9326	# <cjk>
+3-3654	U+65A4	# <cjk>
+3-3655	U+6B23	# <cjk>
+3-3656	U+6B3D	# <cjk>
+3-3657	U+7434	# <cjk>
+3-3658	U+7981	# <cjk>
+3-3659	U+79BD	# <cjk>
+3-365A	U+7B4B	# <cjk>
+3-365B	U+7DCA	# <cjk>
+3-365C	U+82B9	# <cjk>
+3-365D	U+83CC	# <cjk>
+3-365E	U+887F	# <cjk>
+3-365F	U+895F	# <cjk>
+3-3660	U+8B39	# <cjk>
+3-3661	U+8FD1	# <cjk>
+3-3662	U+91D1	# <cjk>
+3-3663	U+541F	# <cjk>
+3-3664	U+9280	# <cjk>
+3-3665	U+4E5D	# <cjk>
+3-3666	U+5036	# <cjk>
+3-3667	U+53E5	# <cjk>
+3-3668	U+533A	# <cjk>
+3-3669	U+72D7	# <cjk>
+3-366A	U+7396	# <cjk>
+3-366B	U+77E9	# <cjk>
+3-366C	U+82E6	# <cjk>
+3-366D	U+8EAF	# <cjk>
+3-366E	U+99C6	# <cjk>
+3-366F	U+99C8	# <cjk>
+3-3670	U+99D2	# <cjk>
+3-3671	U+5177	# <cjk>
+3-3672	U+611A	# <cjk>
+3-3673	U+865E	# <cjk>
+3-3674	U+55B0	# <cjk>
+3-3675	U+7A7A	# <cjk>
+3-3676	U+5076	# <cjk>
+3-3677	U+5BD3	# <cjk>
+3-3678	U+9047	# <cjk>
+3-3679	U+9685	# <cjk>
+3-367A	U+4E32	# <cjk>
+3-367B	U+6ADB	# <cjk>
+3-367C	U+91E7	# <cjk>
+3-367D	U+5C51	# <cjk>
+3-367E	U+5C48	# <cjk>
+3-3721	U+6398	# <cjk>
+3-3722	U+7A9F	# <cjk>
+3-3723	U+6C93	# <cjk>
+3-3724	U+9774	# <cjk>
+3-3725	U+8F61	# <cjk>
+3-3726	U+7AAA	# <cjk>
+3-3727	U+718A	# <cjk>
+3-3728	U+9688	# <cjk>
+3-3729	U+7C82	# <cjk>
+3-372A	U+6817	# <cjk>
+3-372B	U+7E70	# <cjk>
+3-372C	U+6851	# <cjk>
+3-372D	U+936C	# <cjk>
+3-372E	U+52F2	# <cjk>
+3-372F	U+541B	# <cjk>
+3-3730	U+85AB	# <cjk>
+3-3731	U+8A13	# <cjk>
+3-3732	U+7FA4	# <cjk>
+3-3733	U+8ECD	# <cjk>
+3-3734	U+90E1	# <cjk>
+3-3735	U+5366	# <cjk>
+3-3736	U+8888	# <cjk>
+3-3737	U+7941	# <cjk>
+3-3738	U+4FC2	# <cjk>
+3-3739	U+50BE	# <cjk>
+3-373A	U+5211	# <cjk>
+3-373B	U+5144	# <cjk>
+3-373C	U+5553	# <cjk>
+3-373D	U+572D	# <cjk>
+3-373E	U+73EA	# <cjk>
+3-373F	U+578B	# <cjk>
+3-3740	U+5951	# <cjk>
+3-3741	U+5F62	# <cjk>
+3-3742	U+5F84	# <cjk>
+3-3743	U+6075	# <cjk>
+3-3744	U+6176	# <cjk>
+3-3745	U+6167	# <cjk>
+3-3746	U+61A9	# <cjk>
+3-3747	U+63B2	# <cjk>
+3-3748	U+643A	# <cjk>
+3-3749	U+656C	# <cjk>
+3-374A	U+666F	# <cjk>
+3-374B	U+6842	# <cjk>
+3-374C	U+6E13	# <cjk>
+3-374D	U+7566	# <cjk>
+3-374E	U+7A3D	# <cjk>
+3-374F	U+7CFB	# <cjk>
+3-3750	U+7D4C	# <cjk>
+3-3751	U+7D99	# <cjk>
+3-3752	U+7E4B	# <cjk>
+3-3753	U+7F6B	# <cjk>
+3-3754	U+830E	# <cjk>
+3-3755	U+834A	# <cjk>
+3-3756	U+86CD	# <cjk>
+3-3757	U+8A08	# <cjk>
+3-3758	U+8A63	# <cjk>
+3-3759	U+8B66	# <cjk>
+3-375A	U+8EFD	# <cjk>
+3-375B	U+981A	# <cjk>
+3-375C	U+9D8F	# <cjk>
+3-375D	U+82B8	# <cjk>
+3-375E	U+8FCE	# <cjk>
+3-375F	U+9BE8	# <cjk>
+3-3760	U+5287	# <cjk>
+3-3761	U+621F	# <cjk>
+3-3762	U+6483	# <cjk>
+3-3763	U+6FC0	# <cjk>
+3-3764	U+9699	# <cjk>
+3-3765	U+6841	# <cjk>
+3-3766	U+5091	# <cjk>
+3-3767	U+6B20	# <cjk>
+3-3768	U+6C7A	# <cjk>
+3-3769	U+6F54	# <cjk>
+3-376A	U+7A74	# <cjk>
+3-376B	U+7D50	# <cjk>
+3-376C	U+8840	# <cjk>
+3-376D	U+8A23	# <cjk>
+3-376E	U+6708	# <cjk>
+3-376F	U+4EF6	# <cjk>
+3-3770	U+5039	# <cjk>
+3-3771	U+5026	# <cjk>
+3-3772	U+5065	# <cjk>
+3-3773	U+517C	# <cjk>
+3-3774	U+5238	# <cjk>
+3-3775	U+5263	# <cjk>
+3-3776	U+55A7	# <cjk>
+3-3777	U+570F	# <cjk>
+3-3778	U+5805	# <cjk>
+3-3779	U+5ACC	# <cjk>
+3-377A	U+5EFA	# <cjk>
+3-377B	U+61B2	# <cjk>
+3-377C	U+61F8	# <cjk>
+3-377D	U+62F3	# <cjk>
+3-377E	U+6372	# <cjk>
+3-3821	U+691C	# <cjk>
+3-3822	U+6A29	# <cjk>
+3-3823	U+727D	# <cjk>
+3-3824	U+72AC	# <cjk>
+3-3825	U+732E	# <cjk>
+3-3826	U+7814	# <cjk>
+3-3827	U+786F	# <cjk>
+3-3828	U+7D79	# <cjk>
+3-3829	U+770C	# <cjk>
+3-382A	U+80A9	# <cjk>
+3-382B	U+898B	# <cjk>
+3-382C	U+8B19	# <cjk>
+3-382D	U+8CE2	# <cjk>
+3-382E	U+8ED2	# <cjk>
+3-382F	U+9063	# <cjk>
+3-3830	U+9375	# <cjk>
+3-3831	U+967A	# <cjk>
+3-3832	U+9855	# <cjk>
+3-3833	U+9A13	# <cjk>
+3-3834	U+9E78	# <cjk>
+3-3835	U+5143	# <cjk>
+3-3836	U+539F	# <cjk>
+3-3837	U+53B3	# <cjk>
+3-3838	U+5E7B	# <cjk>
+3-3839	U+5F26	# <cjk>
+3-383A	U+6E1B	# <cjk>
+3-383B	U+6E90	# <cjk>
+3-383C	U+7384	# <cjk>
+3-383D	U+73FE	# <cjk>
+3-383E	U+7D43	# <cjk>
+3-383F	U+8237	# <cjk>
+3-3840	U+8A00	# <cjk>
+3-3841	U+8AFA	# <cjk>
+3-3842	U+9650	# <cjk>
+3-3843	U+4E4E	# <cjk>
+3-3844	U+500B	# <cjk>
+3-3845	U+53E4	# <cjk>
+3-3846	U+547C	# <cjk>
+3-3847	U+56FA	# <cjk>
+3-3848	U+59D1	# <cjk>
+3-3849	U+5B64	# <cjk>
+3-384A	U+5DF1	# <cjk>
+3-384B	U+5EAB	# <cjk>
+3-384C	U+5F27	# <cjk>
+3-384D	U+6238	# <cjk>
+3-384E	U+6545	# <cjk>
+3-384F	U+67AF	# <cjk>
+3-3850	U+6E56	# <cjk>
+3-3851	U+72D0	# <cjk>
+3-3852	U+7CCA	# <cjk>
+3-3853	U+88B4	# <cjk>
+3-3854	U+80A1	# <cjk>
+3-3855	U+80E1	# <cjk>
+3-3856	U+83F0	# <cjk>
+3-3857	U+864E	# <cjk>
+3-3858	U+8A87	# <cjk>
+3-3859	U+8DE8	# <cjk>
+3-385A	U+9237	# <cjk>
+3-385B	U+96C7	# <cjk>
+3-385C	U+9867	# <cjk>
+3-385D	U+9F13	# <cjk>
+3-385E	U+4E94	# <cjk>
+3-385F	U+4E92	# <cjk>
+3-3860	U+4F0D	# <cjk>
+3-3861	U+5348	# <cjk>
+3-3862	U+5449	# <cjk>
+3-3863	U+543E	# <cjk>
+3-3864	U+5A2F	# <cjk>
+3-3865	U+5F8C	# <cjk>
+3-3866	U+5FA1	# <cjk>
+3-3867	U+609F	# <cjk>
+3-3868	U+68A7	# <cjk>
+3-3869	U+6A8E	# <cjk>
+3-386A	U+745A	# <cjk>
+3-386B	U+7881	# <cjk>
+3-386C	U+8A9E	# <cjk>
+3-386D	U+8AA4	# <cjk>
+3-386E	U+8B77	# <cjk>
+3-386F	U+9190	# <cjk>
+3-3870	U+4E5E	# <cjk>
+3-3871	U+9BC9	# <cjk>
+3-3872	U+4EA4	# <cjk>
+3-3873	U+4F7C	# <cjk>
+3-3874	U+4FAF	# <cjk>
+3-3875	U+5019	# <cjk>
+3-3876	U+5016	# <cjk>
+3-3877	U+5149	# <cjk>
+3-3878	U+516C	# <cjk>
+3-3879	U+529F	# <cjk>
+3-387A	U+52B9	# <cjk>
+3-387B	U+52FE	# <cjk>
+3-387C	U+539A	# <cjk>
+3-387D	U+53E3	# <cjk>
+3-387E	U+5411	# <cjk>
+3-3921	U+540E	# <cjk>
+3-3922	U+5589	# <cjk>
+3-3923	U+5751	# <cjk>
+3-3924	U+57A2	# <cjk>
+3-3925	U+597D	# <cjk>
+3-3926	U+5B54	# <cjk>
+3-3927	U+5B5D	# <cjk>
+3-3928	U+5B8F	# <cjk>
+3-3929	U+5DE5	# <cjk>
+3-392A	U+5DE7	# <cjk>
+3-392B	U+5DF7	# <cjk>
+3-392C	U+5E78	# <cjk>
+3-392D	U+5E83	# <cjk>
+3-392E	U+5E9A	# <cjk>
+3-392F	U+5EB7	# <cjk>
+3-3930	U+5F18	# <cjk>
+3-3931	U+6052	# <cjk>
+3-3932	U+614C	# <cjk>
+3-3933	U+6297	# <cjk>
+3-3934	U+62D8	# <cjk>
+3-3935	U+63A7	# <cjk>
+3-3936	U+653B	# <cjk>
+3-3937	U+6602	# <cjk>
+3-3938	U+6643	# <cjk>
+3-3939	U+66F4	# <cjk>
+3-393A	U+676D	# <cjk>
+3-393B	U+6821	# <cjk>
+3-393C	U+6897	# <cjk>
+3-393D	U+69CB	# <cjk>
+3-393E	U+6C5F	# <cjk>
+3-393F	U+6D2A	# <cjk>
+3-3940	U+6D69	# <cjk>
+3-3941	U+6E2F	# <cjk>
+3-3942	U+6E9D	# <cjk>
+3-3943	U+7532	# <cjk>
+3-3944	U+7687	# <cjk>
+3-3945	U+786C	# <cjk>
+3-3946	U+7A3F	# <cjk>
+3-3947	U+7CE0	# <cjk>
+3-3948	U+7D05	# <cjk>
+3-3949	U+7D18	# <cjk>
+3-394A	U+7D5E	# <cjk>
+3-394B	U+7DB1	# <cjk>
+3-394C	U+8015	# <cjk>
+3-394D	U+8003	# <cjk>
+3-394E	U+80AF	# <cjk>
+3-394F	U+80B1	# <cjk>
+3-3950	U+8154	# <cjk>
+3-3951	U+818F	# <cjk>
+3-3952	U+822A	# <cjk>
+3-3953	U+8352	# <cjk>
+3-3954	U+884C	# <cjk>
+3-3955	U+8861	# <cjk>
+3-3956	U+8B1B	# <cjk>
+3-3957	U+8CA2	# <cjk>
+3-3958	U+8CFC	# <cjk>
+3-3959	U+90CA	# <cjk>
+3-395A	U+9175	# <cjk>
+3-395B	U+9271	# <cjk>
+3-395C	U+783F	# <cjk>
+3-395D	U+92FC	# <cjk>
+3-395E	U+95A4	# <cjk>
+3-395F	U+964D	# <cjk>
+3-3960	U+9805	# <cjk>
+3-3961	U+9999	# <cjk>
+3-3962	U+9AD8	# <cjk>
+3-3963	U+9D3B	# <cjk>
+3-3964	U+525B	# <cjk>
+3-3965	U+52AB	# <cjk>
+3-3966	U+53F7	# <cjk>
+3-3967	U+5408	# <cjk>
+3-3968	U+58D5	# <cjk>
+3-3969	U+62F7	# <cjk>
+3-396A	U+6FE0	# <cjk>
+3-396B	U+8C6A	# <cjk>
+3-396C	U+8F5F	# <cjk>
+3-396D	U+9EB9	# <cjk>
+3-396E	U+514B	# <cjk>
+3-396F	U+523B	# <cjk>
+3-3970	U+544A	# <cjk>
+3-3971	U+56FD	# <cjk>
+3-3972	U+7A40	# <cjk>
+3-3973	U+9177	# <cjk>
+3-3974	U+9D60	# <cjk>
+3-3975	U+9ED2	# <cjk>
+3-3976	U+7344	# <cjk>
+3-3977	U+6F09	# <cjk>
+3-3978	U+8170	# <cjk>
+3-3979	U+7511	# <cjk>
+3-397A	U+5FFD	# <cjk>
+3-397B	U+60DA	# <cjk>
+3-397C	U+9AA8	# <cjk>
+3-397D	U+72DB	# <cjk>
+3-397E	U+8FBC	# <cjk>
+3-3A21	U+6B64	# <cjk>
+3-3A22	U+9803	# <cjk>
+3-3A23	U+4ECA	# <cjk>
+3-3A24	U+56F0	# <cjk>
+3-3A25	U+5764	# <cjk>
+3-3A26	U+58BE	# <cjk>
+3-3A27	U+5A5A	# <cjk>
+3-3A28	U+6068	# <cjk>
+3-3A29	U+61C7	# <cjk>
+3-3A2A	U+660F	# <cjk>
+3-3A2B	U+6606	# <cjk>
+3-3A2C	U+6839	# <cjk>
+3-3A2D	U+68B1	# <cjk>
+3-3A2E	U+6DF7	# <cjk>
+3-3A2F	U+75D5	# <cjk>
+3-3A30	U+7D3A	# <cjk>
+3-3A31	U+826E	# <cjk>
+3-3A32	U+9B42	# <cjk>
+3-3A33	U+4E9B	# <cjk>
+3-3A34	U+4F50	# <cjk>
+3-3A35	U+53C9	# <cjk>
+3-3A36	U+5506	# <cjk>
+3-3A37	U+5D6F	# <cjk>
+3-3A38	U+5DE6	# <cjk>
+3-3A39	U+5DEE	# <cjk>
+3-3A3A	U+67FB	# <cjk>
+3-3A3B	U+6C99	# <cjk>
+3-3A3C	U+7473	# <cjk>
+3-3A3D	U+7802	# <cjk>
+3-3A3E	U+8A50	# <cjk>
+3-3A3F	U+9396	# <cjk>
+3-3A40	U+88DF	# <cjk>
+3-3A41	U+5750	# <cjk>
+3-3A42	U+5EA7	# <cjk>
+3-3A43	U+632B	# <cjk>
+3-3A44	U+50B5	# <cjk>
+3-3A45	U+50AC	# <cjk>
+3-3A46	U+518D	# <cjk>
+3-3A47	U+6700	# <cjk>
+3-3A48	U+54C9	# <cjk>
+3-3A49	U+585E	# <cjk>
+3-3A4A	U+59BB	# <cjk>
+3-3A4B	U+5BB0	# <cjk>
+3-3A4C	U+5F69	# <cjk>
+3-3A4D	U+624D	# <cjk>
+3-3A4E	U+63A1	# <cjk>
+3-3A4F	U+683D	# <cjk>
+3-3A50	U+6B73	# <cjk>
+3-3A51	U+6E08	# <cjk>
+3-3A52	U+707D	# <cjk>
+3-3A53	U+91C7	# <cjk>
+3-3A54	U+7280	# <cjk>
+3-3A55	U+7815	# <cjk>
+3-3A56	U+7826	# <cjk>
+3-3A57	U+796D	# <cjk>
+3-3A58	U+658E	# <cjk>
+3-3A59	U+7D30	# <cjk>
+3-3A5A	U+83DC	# <cjk>
+3-3A5B	U+88C1	# <cjk>
+3-3A5C	U+8F09	# <cjk>
+3-3A5D	U+969B	# <cjk>
+3-3A5E	U+5264	# <cjk>
+3-3A5F	U+5728	# <cjk>
+3-3A60	U+6750	# <cjk>
+3-3A61	U+7F6A	# <cjk>
+3-3A62	U+8CA1	# <cjk>
+3-3A63	U+51B4	# <cjk>
+3-3A64	U+5742	# <cjk>
+3-3A65	U+962A	# <cjk>
+3-3A66	U+583A	# <cjk>
+3-3A67	U+698A	# <cjk>
+3-3A68	U+80B4	# <cjk>
+3-3A69	U+54B2	# <cjk>
+3-3A6A	U+5D0E	# <cjk>
+3-3A6B	U+57FC	# <cjk>
+3-3A6C	U+7895	# <cjk>
+3-3A6D	U+9DFA	# <cjk>
+3-3A6E	U+4F5C	# <cjk>
+3-3A6F	U+524A	# <cjk>
+3-3A70	U+548B	# <cjk>
+3-3A71	U+643E	# <cjk>
+3-3A72	U+6628	# <cjk>
+3-3A73	U+6714	# <cjk>
+3-3A74	U+67F5	# <cjk>
+3-3A75	U+7A84	# <cjk>
+3-3A76	U+7B56	# <cjk>
+3-3A77	U+7D22	# <cjk>
+3-3A78	U+932F	# <cjk>
+3-3A79	U+685C	# <cjk>
+3-3A7A	U+9BAD	# <cjk>
+3-3A7B	U+7B39	# <cjk>
+3-3A7C	U+5319	# <cjk>
+3-3A7D	U+518A	# <cjk>
+3-3A7E	U+5237	# <cjk>
+3-3B21	U+5BDF	# <cjk>
+3-3B22	U+62F6	# <cjk>
+3-3B23	U+64AE	# <cjk>
+3-3B24	U+64E6	# <cjk>
+3-3B25	U+672D	# <cjk>
+3-3B26	U+6BBA	# <cjk>
+3-3B27	U+85A9	# <cjk>
+3-3B28	U+96D1	# <cjk>
+3-3B29	U+7690	# <cjk>
+3-3B2A	U+9BD6	# <cjk>
+3-3B2B	U+634C	# <cjk>
+3-3B2C	U+9306	# <cjk>
+3-3B2D	U+9BAB	# <cjk>
+3-3B2E	U+76BF	# <cjk>
+3-3B2F	U+6652	# <cjk>
+3-3B30	U+4E09	# <cjk>
+3-3B31	U+5098	# <cjk>
+3-3B32	U+53C2	# <cjk>
+3-3B33	U+5C71	# <cjk>
+3-3B34	U+60E8	# <cjk>
+3-3B35	U+6492	# <cjk>
+3-3B36	U+6563	# <cjk>
+3-3B37	U+685F	# <cjk>
+3-3B38	U+71E6	# <cjk>
+3-3B39	U+73CA	# <cjk>
+3-3B3A	U+7523	# <cjk>
+3-3B3B	U+7B97	# <cjk>
+3-3B3C	U+7E82	# <cjk>
+3-3B3D	U+8695	# <cjk>
+3-3B3E	U+8B83	# <cjk>
+3-3B3F	U+8CDB	# <cjk>
+3-3B40	U+9178	# <cjk>
+3-3B41	U+9910	# <cjk>
+3-3B42	U+65AC	# <cjk>
+3-3B43	U+66AB	# <cjk>
+3-3B44	U+6B8B	# <cjk>
+3-3B45	U+4ED5	# <cjk>
+3-3B46	U+4ED4	# <cjk>
+3-3B47	U+4F3A	# <cjk>
+3-3B48	U+4F7F	# <cjk>
+3-3B49	U+523A	# <cjk>
+3-3B4A	U+53F8	# <cjk>
+3-3B4B	U+53F2	# <cjk>
+3-3B4C	U+55E3	# <cjk>
+3-3B4D	U+56DB	# <cjk>
+3-3B4E	U+58EB	# <cjk>
+3-3B4F	U+59CB	# <cjk>
+3-3B50	U+59C9	# <cjk>
+3-3B51	U+59FF	# <cjk>
+3-3B52	U+5B50	# <cjk>
+3-3B53	U+5C4D	# <cjk>
+3-3B54	U+5E02	# <cjk>
+3-3B55	U+5E2B	# <cjk>
+3-3B56	U+5FD7	# <cjk>
+3-3B57	U+601D	# <cjk>
+3-3B58	U+6307	# <cjk>
+3-3B59	U+652F	# <cjk>
+3-3B5A	U+5B5C	# <cjk>
+3-3B5B	U+65AF	# <cjk>
+3-3B5C	U+65BD	# <cjk>
+3-3B5D	U+65E8	# <cjk>
+3-3B5E	U+679D	# <cjk>
+3-3B5F	U+6B62	# <cjk>
+3-3B60	U+6B7B	# <cjk>
+3-3B61	U+6C0F	# <cjk>
+3-3B62	U+7345	# <cjk>
+3-3B63	U+7949	# <cjk>
+3-3B64	U+79C1	# <cjk>
+3-3B65	U+7CF8	# <cjk>
+3-3B66	U+7D19	# <cjk>
+3-3B67	U+7D2B	# <cjk>
+3-3B68	U+80A2	# <cjk>
+3-3B69	U+8102	# <cjk>
+3-3B6A	U+81F3	# <cjk>
+3-3B6B	U+8996	# <cjk>
+3-3B6C	U+8A5E	# <cjk>
+3-3B6D	U+8A69	# <cjk>
+3-3B6E	U+8A66	# <cjk>
+3-3B6F	U+8A8C	# <cjk>
+3-3B70	U+8AEE	# <cjk>
+3-3B71	U+8CC7	# <cjk>
+3-3B72	U+8CDC	# <cjk>
+3-3B73	U+96CC	# <cjk>
+3-3B74	U+98FC	# <cjk>
+3-3B75	U+6B6F	# <cjk>
+3-3B76	U+4E8B	# <cjk>
+3-3B77	U+4F3C	# <cjk>
+3-3B78	U+4F8D	# <cjk>
+3-3B79	U+5150	# <cjk>
+3-3B7A	U+5B57	# <cjk>
+3-3B7B	U+5BFA	# <cjk>
+3-3B7C	U+6148	# <cjk>
+3-3B7D	U+6301	# <cjk>
+3-3B7E	U+6642	# <cjk>
+3-3C21	U+6B21	# <cjk>
+3-3C22	U+6ECB	# <cjk>
+3-3C23	U+6CBB	# <cjk>
+3-3C24	U+723E	# <cjk>
+3-3C25	U+74BD	# <cjk>
+3-3C26	U+75D4	# <cjk>
+3-3C27	U+78C1	# <cjk>
+3-3C28	U+793A	# <cjk>
+3-3C29	U+800C	# <cjk>
+3-3C2A	U+8033	# <cjk>
+3-3C2B	U+81EA	# <cjk>
+3-3C2C	U+8494	# <cjk>
+3-3C2D	U+8F9E	# <cjk>
+3-3C2E	U+6C50	# <cjk>
+3-3C2F	U+9E7F	# <cjk>
+3-3C30	U+5F0F	# <cjk>
+3-3C31	U+8B58	# <cjk>
+3-3C32	U+9D2B	# <cjk>
+3-3C33	U+7AFA	# <cjk>
+3-3C34	U+8EF8	# <cjk>
+3-3C35	U+5B8D	# <cjk>
+3-3C36	U+96EB	# <cjk>
+3-3C37	U+4E03	# <cjk>
+3-3C38	U+53F1	# <cjk>
+3-3C39	U+57F7	# <cjk>
+3-3C3A	U+5931	# <cjk>
+3-3C3B	U+5AC9	# <cjk>
+3-3C3C	U+5BA4	# <cjk>
+3-3C3D	U+6089	# <cjk>
+3-3C3E	U+6E7F	# <cjk>
+3-3C3F	U+6F06	# <cjk>
+3-3C40	U+75BE	# <cjk>
+3-3C41	U+8CEA	# <cjk>
+3-3C42	U+5B9F	# <cjk>
+3-3C43	U+8500	# <cjk>
+3-3C44	U+7BE0	# <cjk>
+3-3C45	U+5072	# <cjk>
+3-3C46	U+67F4	# <cjk>
+3-3C47	U+829D	# <cjk>
+3-3C48	U+5C61	# <cjk>
+3-3C49	U+854A	# <cjk>
+3-3C4A	U+7E1E	# <cjk>
+3-3C4B	U+820E	# <cjk>
+3-3C4C	U+5199	# <cjk>
+3-3C4D	U+5C04	# <cjk>
+3-3C4E	U+6368	# <cjk>
+3-3C4F	U+8D66	# <cjk>
+3-3C50	U+659C	# <cjk>
+3-3C51	U+716E	# <cjk>
+3-3C52	U+793E	# <cjk>
+3-3C53	U+7D17	# <cjk>
+3-3C54	U+8005	# <cjk>
+3-3C55	U+8B1D	# <cjk>
+3-3C56	U+8ECA	# <cjk>
+3-3C57	U+906E	# <cjk>
+3-3C58	U+86C7	# <cjk>
+3-3C59	U+90AA	# <cjk>
+3-3C5A	U+501F	# <cjk>
+3-3C5B	U+52FA	# <cjk>
+3-3C5C	U+5C3A	# <cjk>
+3-3C5D	U+6753	# <cjk>
+3-3C5E	U+707C	# <cjk>
+3-3C5F	U+7235	# <cjk>
+3-3C60	U+914C	# <cjk>
+3-3C61	U+91C8	# <cjk>
+3-3C62	U+932B	# <cjk>
+3-3C63	U+82E5	# <cjk>
+3-3C64	U+5BC2	# <cjk>
+3-3C65	U+5F31	# <cjk>
+3-3C66	U+60F9	# <cjk>
+3-3C67	U+4E3B	# <cjk>
+3-3C68	U+53D6	# <cjk>
+3-3C69	U+5B88	# <cjk>
+3-3C6A	U+624B	# <cjk>
+3-3C6B	U+6731	# <cjk>
+3-3C6C	U+6B8A	# <cjk>
+3-3C6D	U+72E9	# <cjk>
+3-3C6E	U+73E0	# <cjk>
+3-3C6F	U+7A2E	# <cjk>
+3-3C70	U+816B	# <cjk>
+3-3C71	U+8DA3	# <cjk>
+3-3C72	U+9152	# <cjk>
+3-3C73	U+9996	# <cjk>
+3-3C74	U+5112	# <cjk>
+3-3C75	U+53D7	# <cjk>
+3-3C76	U+546A	# <cjk>
+3-3C77	U+5BFF	# <cjk>
+3-3C78	U+6388	# <cjk>
+3-3C79	U+6A39	# <cjk>
+3-3C7A	U+7DAC	# <cjk>
+3-3C7B	U+9700	# <cjk>
+3-3C7C	U+56DA	# <cjk>
+3-3C7D	U+53CE	# <cjk>
+3-3C7E	U+5468	# <cjk>
+3-3D21	U+5B97	# <cjk>
+3-3D22	U+5C31	# <cjk>
+3-3D23	U+5DDE	# <cjk>
+3-3D24	U+4FEE	# <cjk>
+3-3D25	U+6101	# <cjk>
+3-3D26	U+62FE	# <cjk>
+3-3D27	U+6D32	# <cjk>
+3-3D28	U+79C0	# <cjk>
+3-3D29	U+79CB	# <cjk>
+3-3D2A	U+7D42	# <cjk>
+3-3D2B	U+7E4D	# <cjk>
+3-3D2C	U+7FD2	# <cjk>
+3-3D2D	U+81ED	# <cjk>
+3-3D2E	U+821F	# <cjk>
+3-3D2F	U+8490	# <cjk>
+3-3D30	U+8846	# <cjk>
+3-3D31	U+8972	# <cjk>
+3-3D32	U+8B90	# <cjk>
+3-3D33	U+8E74	# <cjk>
+3-3D34	U+8F2F	# <cjk>
+3-3D35	U+9031	# <cjk>
+3-3D36	U+914B	# <cjk>
+3-3D37	U+916C	# <cjk>
+3-3D38	U+96C6	# <cjk>
+3-3D39	U+919C	# <cjk>
+3-3D3A	U+4EC0	# <cjk>
+3-3D3B	U+4F4F	# <cjk>
+3-3D3C	U+5145	# <cjk>
+3-3D3D	U+5341	# <cjk>
+3-3D3E	U+5F93	# <cjk>
+3-3D3F	U+620E	# <cjk>
+3-3D40	U+67D4	# <cjk>
+3-3D41	U+6C41	# <cjk>
+3-3D42	U+6E0B	# <cjk>
+3-3D43	U+7363	# <cjk>
+3-3D44	U+7E26	# <cjk>
+3-3D45	U+91CD	# <cjk>
+3-3D46	U+9283	# <cjk>
+3-3D47	U+53D4	# <cjk>
+3-3D48	U+5919	# <cjk>
+3-3D49	U+5BBF	# <cjk>
+3-3D4A	U+6DD1	# <cjk>
+3-3D4B	U+795D	# <cjk>
+3-3D4C	U+7E2E	# <cjk>
+3-3D4D	U+7C9B	# <cjk>
+3-3D4E	U+587E	# <cjk>
+3-3D4F	U+719F	# <cjk>
+3-3D50	U+51FA	# <cjk>
+3-3D51	U+8853	# <cjk>
+3-3D52	U+8FF0	# <cjk>
+3-3D53	U+4FCA	# <cjk>
+3-3D54	U+5CFB	# <cjk>
+3-3D55	U+6625	# <cjk>
+3-3D56	U+77AC	# <cjk>
+3-3D57	U+7AE3	# <cjk>
+3-3D58	U+821C	# <cjk>
+3-3D59	U+99FF	# <cjk>
+3-3D5A	U+51C6	# <cjk>
+3-3D5B	U+5FAA	# <cjk>
+3-3D5C	U+65EC	# <cjk>
+3-3D5D	U+696F	# <cjk>
+3-3D5E	U+6B89	# <cjk>
+3-3D5F	U+6DF3	# <cjk>
+3-3D60	U+6E96	# <cjk>
+3-3D61	U+6F64	# <cjk>
+3-3D62	U+76FE	# <cjk>
+3-3D63	U+7D14	# <cjk>
+3-3D64	U+5DE1	# <cjk>
+3-3D65	U+9075	# <cjk>
+3-3D66	U+9187	# <cjk>
+3-3D67	U+9806	# <cjk>
+3-3D68	U+51E6	# <cjk>
+3-3D69	U+521D	# <cjk>
+3-3D6A	U+6240	# <cjk>
+3-3D6B	U+6691	# <cjk>
+3-3D6C	U+66D9	# <cjk>
+3-3D6D	U+6E1A	# <cjk>
+3-3D6E	U+5EB6	# <cjk>
+3-3D6F	U+7DD2	# <cjk>
+3-3D70	U+7F72	# <cjk>
+3-3D71	U+66F8	# <cjk>
+3-3D72	U+85AF	# <cjk>
+3-3D73	U+85F7	# <cjk>
+3-3D74	U+8AF8	# <cjk>
+3-3D75	U+52A9	# <cjk>
+3-3D76	U+53D9	# <cjk>
+3-3D77	U+5973	# <cjk>
+3-3D78	U+5E8F	# <cjk>
+3-3D79	U+5F90	# <cjk>
+3-3D7A	U+6055	# <cjk>
+3-3D7B	U+92E4	# <cjk>
+3-3D7C	U+9664	# <cjk>
+3-3D7D	U+50B7	# <cjk>
+3-3D7E	U+511F	# <cjk>
+3-3E21	U+52DD	# <cjk>
+3-3E22	U+5320	# <cjk>
+3-3E23	U+5347	# <cjk>
+3-3E24	U+53EC	# <cjk>
+3-3E25	U+54E8	# <cjk>
+3-3E26	U+5546	# <cjk>
+3-3E27	U+5531	# <cjk>
+3-3E28	U+5617	# <cjk>
+3-3E29	U+5968	# <cjk>
+3-3E2A	U+59BE	# <cjk>
+3-3E2B	U+5A3C	# <cjk>
+3-3E2C	U+5BB5	# <cjk>
+3-3E2D	U+5C06	# <cjk>
+3-3E2E	U+5C0F	# <cjk>
+3-3E2F	U+5C11	# <cjk>
+3-3E30	U+5C1A	# <cjk>
+3-3E31	U+5E84	# <cjk>
+3-3E32	U+5E8A	# <cjk>
+3-3E33	U+5EE0	# <cjk>
+3-3E34	U+5F70	# <cjk>
+3-3E35	U+627F	# <cjk>
+3-3E36	U+6284	# <cjk>
+3-3E37	U+62DB	# <cjk>
+3-3E38	U+638C	# <cjk>
+3-3E39	U+6377	# <cjk>
+3-3E3A	U+6607	# <cjk>
+3-3E3B	U+660C	# <cjk>
+3-3E3C	U+662D	# <cjk>
+3-3E3D	U+6676	# <cjk>
+3-3E3E	U+677E	# <cjk>
+3-3E3F	U+68A2	# <cjk>
+3-3E40	U+6A1F	# <cjk>
+3-3E41	U+6A35	# <cjk>
+3-3E42	U+6CBC	# <cjk>
+3-3E43	U+6D88	# <cjk>
+3-3E44	U+6E09	# <cjk>
+3-3E45	U+6E58	# <cjk>
+3-3E46	U+713C	# <cjk>
+3-3E47	U+7126	# <cjk>
+3-3E48	U+7167	# <cjk>
+3-3E49	U+75C7	# <cjk>
+3-3E4A	U+7701	# <cjk>
+3-3E4B	U+785D	# <cjk>
+3-3E4C	U+7901	# <cjk>
+3-3E4D	U+7965	# <cjk>
+3-3E4E	U+79F0	# <cjk>
+3-3E4F	U+7AE0	# <cjk>
+3-3E50	U+7B11	# <cjk>
+3-3E51	U+7CA7	# <cjk>
+3-3E52	U+7D39	# <cjk>
+3-3E53	U+8096	# <cjk>
+3-3E54	U+83D6	# <cjk>
+3-3E55	U+848B	# <cjk>
+3-3E56	U+8549	# <cjk>
+3-3E57	U+885D	# <cjk>
+3-3E58	U+88F3	# <cjk>
+3-3E59	U+8A1F	# <cjk>
+3-3E5A	U+8A3C	# <cjk>
+3-3E5B	U+8A54	# <cjk>
+3-3E5C	U+8A73	# <cjk>
+3-3E5D	U+8C61	# <cjk>
+3-3E5E	U+8CDE	# <cjk>
+3-3E5F	U+91A4	# <cjk>
+3-3E60	U+9266	# <cjk>
+3-3E61	U+937E	# <cjk>
+3-3E62	U+9418	# <cjk>
+3-3E63	U+969C	# <cjk>
+3-3E64	U+9798	# <cjk>
+3-3E65	U+4E0A	# <cjk>
+3-3E66	U+4E08	# <cjk>
+3-3E67	U+4E1E	# <cjk>
+3-3E68	U+4E57	# <cjk>
+3-3E69	U+5197	# <cjk>
+3-3E6A	U+5270	# <cjk>
+3-3E6B	U+57CE	# <cjk>
+3-3E6C	U+5834	# <cjk>
+3-3E6D	U+58CC	# <cjk>
+3-3E6E	U+5B22	# <cjk>
+3-3E6F	U+5E38	# <cjk>
+3-3E70	U+60C5	# <cjk>
+3-3E71	U+64FE	# <cjk>
+3-3E72	U+6761	# <cjk>
+3-3E73	U+6756	# <cjk>
+3-3E74	U+6D44	# <cjk>
+3-3E75	U+72B6	# <cjk>
+3-3E76	U+7573	# <cjk>
+3-3E77	U+7A63	# <cjk>
+3-3E78	U+84B8	# <cjk>
+3-3E79	U+8B72	# <cjk>
+3-3E7A	U+91B8	# <cjk>
+3-3E7B	U+9320	# <cjk>
+3-3E7C	U+5631	# <cjk>
+3-3E7D	U+57F4	# <cjk>
+3-3E7E	U+98FE	# <cjk>
+3-3F21	U+62ED	# <cjk>
+3-3F22	U+690D	# <cjk>
+3-3F23	U+6B96	# <cjk>
+3-3F24	U+71ED	# <cjk>
+3-3F25	U+7E54	# <cjk>
+3-3F26	U+8077	# <cjk>
+3-3F27	U+8272	# <cjk>
+3-3F28	U+89E6	# <cjk>
+3-3F29	U+98DF	# <cjk>
+3-3F2A	U+8755	# <cjk>
+3-3F2B	U+8FB1	# <cjk>
+3-3F2C	U+5C3B	# <cjk>
+3-3F2D	U+4F38	# <cjk>
+3-3F2E	U+4FE1	# <cjk>
+3-3F2F	U+4FB5	# <cjk>
+3-3F30	U+5507	# <cjk>
+3-3F31	U+5A20	# <cjk>
+3-3F32	U+5BDD	# <cjk>
+3-3F33	U+5BE9	# <cjk>
+3-3F34	U+5FC3	# <cjk>
+3-3F35	U+614E	# <cjk>
+3-3F36	U+632F	# <cjk>
+3-3F37	U+65B0	# <cjk>
+3-3F38	U+664B	# <cjk>
+3-3F39	U+68EE	# <cjk>
+3-3F3A	U+699B	# <cjk>
+3-3F3B	U+6D78	# <cjk>
+3-3F3C	U+6DF1	# <cjk>
+3-3F3D	U+7533	# <cjk>
+3-3F3E	U+75B9	# <cjk>
+3-3F3F	U+771F	# <cjk>
+3-3F40	U+795E	# <cjk>
+3-3F41	U+79E6	# <cjk>
+3-3F42	U+7D33	# <cjk>
+3-3F43	U+81E3	# <cjk>
+3-3F44	U+82AF	# <cjk>
+3-3F45	U+85AA	# <cjk>
+3-3F46	U+89AA	# <cjk>
+3-3F47	U+8A3A	# <cjk>
+3-3F48	U+8EAB	# <cjk>
+3-3F49	U+8F9B	# <cjk>
+3-3F4A	U+9032	# <cjk>
+3-3F4B	U+91DD	# <cjk>
+3-3F4C	U+9707	# <cjk>
+3-3F4D	U+4EBA	# <cjk>
+3-3F4E	U+4EC1	# <cjk>
+3-3F4F	U+5203	# <cjk>
+3-3F50	U+5875	# <cjk>
+3-3F51	U+58EC	# <cjk>
+3-3F52	U+5C0B	# <cjk>
+3-3F53	U+751A	# <cjk>
+3-3F54	U+5C3D	# <cjk>
+3-3F55	U+814E	# <cjk>
+3-3F56	U+8A0A	# <cjk>
+3-3F57	U+8FC5	# <cjk>
+3-3F58	U+9663	# <cjk>
+3-3F59	U+976D	# <cjk>
+3-3F5A	U+7B25	# <cjk>
+3-3F5B	U+8ACF	# <cjk>
+3-3F5C	U+9808	# <cjk>
+3-3F5D	U+9162	# <cjk>
+3-3F5E	U+56F3	# <cjk>
+3-3F5F	U+53A8	# <cjk>
+3-3F60	U+9017	# <cjk>
+3-3F61	U+5439	# <cjk>
+3-3F62	U+5782	# <cjk>
+3-3F63	U+5E25	# <cjk>
+3-3F64	U+63A8	# <cjk>
+3-3F65	U+6C34	# <cjk>
+3-3F66	U+708A	# <cjk>
+3-3F67	U+7761	# <cjk>
+3-3F68	U+7C8B	# <cjk>
+3-3F69	U+7FE0	# <cjk>
+3-3F6A	U+8870	# <cjk>
+3-3F6B	U+9042	# <cjk>
+3-3F6C	U+9154	# <cjk>
+3-3F6D	U+9310	# <cjk>
+3-3F6E	U+9318	# <cjk>
+3-3F6F	U+968F	# <cjk>
+3-3F70	U+745E	# <cjk>
+3-3F71	U+9AC4	# <cjk>
+3-3F72	U+5D07	# <cjk>
+3-3F73	U+5D69	# <cjk>
+3-3F74	U+6570	# <cjk>
+3-3F75	U+67A2	# <cjk>
+3-3F76	U+8DA8	# <cjk>
+3-3F77	U+96DB	# <cjk>
+3-3F78	U+636E	# <cjk>
+3-3F79	U+6749	# <cjk>
+3-3F7A	U+6919	# <cjk>
+3-3F7B	U+83C5	# <cjk>
+3-3F7C	U+9817	# <cjk>
+3-3F7D	U+96C0	# <cjk>
+3-3F7E	U+88FE	# <cjk>
+3-4021	U+6F84	# <cjk>
+3-4022	U+647A	# <cjk>
+3-4023	U+5BF8	# <cjk>
+3-4024	U+4E16	# <cjk>
+3-4025	U+702C	# <cjk>
+3-4026	U+755D	# <cjk>
+3-4027	U+662F	# <cjk>
+3-4028	U+51C4	# <cjk>
+3-4029	U+5236	# <cjk>
+3-402A	U+52E2	# <cjk>
+3-402B	U+59D3	# <cjk>
+3-402C	U+5F81	# <cjk>
+3-402D	U+6027	# <cjk>
+3-402E	U+6210	# <cjk>
+3-402F	U+653F	# <cjk>
+3-4030	U+6574	# <cjk>
+3-4031	U+661F	# <cjk>
+3-4032	U+6674	# <cjk>
+3-4033	U+68F2	# <cjk>
+3-4034	U+6816	# <cjk>
+3-4035	U+6B63	# <cjk>
+3-4036	U+6E05	# <cjk>
+3-4037	U+7272	# <cjk>
+3-4038	U+751F	# <cjk>
+3-4039	U+76DB	# <cjk>
+3-403A	U+7CBE	# <cjk>
+3-403B	U+8056	# <cjk>
+3-403C	U+58F0	# <cjk>
+3-403D	U+88FD	# <cjk>
+3-403E	U+897F	# <cjk>
+3-403F	U+8AA0	# <cjk>
+3-4040	U+8A93	# <cjk>
+3-4041	U+8ACB	# <cjk>
+3-4042	U+901D	# <cjk>
+3-4043	U+9192	# <cjk>
+3-4044	U+9752	# <cjk>
+3-4045	U+9759	# <cjk>
+3-4046	U+6589	# <cjk>
+3-4047	U+7A0E	# <cjk>
+3-4048	U+8106	# <cjk>
+3-4049	U+96BB	# <cjk>
+3-404A	U+5E2D	# <cjk>
+3-404B	U+60DC	# <cjk>
+3-404C	U+621A	# <cjk>
+3-404D	U+65A5	# <cjk>
+3-404E	U+6614	# <cjk>
+3-404F	U+6790	# <cjk>
+3-4050	U+77F3	# <cjk>
+3-4051	U+7A4D	# <cjk>
+3-4052	U+7C4D	# <cjk>
+3-4053	U+7E3E	# <cjk>
+3-4054	U+810A	# <cjk>
+3-4055	U+8CAC	# <cjk>
+3-4056	U+8D64	# <cjk>
+3-4057	U+8DE1	# <cjk>
+3-4058	U+8E5F	# <cjk>
+3-4059	U+78A9	# <cjk>
+3-405A	U+5207	# <cjk>
+3-405B	U+62D9	# <cjk>
+3-405C	U+63A5	# <cjk>
+3-405D	U+6442	# <cjk>
+3-405E	U+6298	# <cjk>
+3-405F	U+8A2D	# <cjk>
+3-4060	U+7A83	# <cjk>
+3-4061	U+7BC0	# <cjk>
+3-4062	U+8AAC	# <cjk>
+3-4063	U+96EA	# <cjk>
+3-4064	U+7D76	# <cjk>
+3-4065	U+820C	# <cjk>
+3-4066	U+8749	# <cjk>
+3-4067	U+4ED9	# <cjk>
+3-4068	U+5148	# <cjk>
+3-4069	U+5343	# <cjk>
+3-406A	U+5360	# <cjk>
+3-406B	U+5BA3	# <cjk>
+3-406C	U+5C02	# <cjk>
+3-406D	U+5C16	# <cjk>
+3-406E	U+5DDD	# <cjk>
+3-406F	U+6226	# <cjk>
+3-4070	U+6247	# <cjk>
+3-4071	U+64B0	# <cjk>
+3-4072	U+6813	# <cjk>
+3-4073	U+6834	# <cjk>
+3-4074	U+6CC9	# <cjk>
+3-4075	U+6D45	# <cjk>
+3-4076	U+6D17	# <cjk>
+3-4077	U+67D3	# <cjk>
+3-4078	U+6F5C	# <cjk>
+3-4079	U+714E	# <cjk>
+3-407A	U+717D	# <cjk>
+3-407B	U+65CB	# <cjk>
+3-407C	U+7A7F	# <cjk>
+3-407D	U+7BAD	# <cjk>
+3-407E	U+7DDA	# <cjk>
+3-4121	U+7E4A	# <cjk>
+3-4122	U+7FA8	# <cjk>
+3-4123	U+817A	# <cjk>
+3-4124	U+821B	# <cjk>
+3-4125	U+8239	# <cjk>
+3-4126	U+85A6	# <cjk>
+3-4127	U+8A6E	# <cjk>
+3-4128	U+8CCE	# <cjk>
+3-4129	U+8DF5	# <cjk>
+3-412A	U+9078	# <cjk>
+3-412B	U+9077	# <cjk>
+3-412C	U+92AD	# <cjk>
+3-412D	U+9291	# <cjk>
+3-412E	U+9583	# <cjk>
+3-412F	U+9BAE	# <cjk>
+3-4130	U+524D	# <cjk>
+3-4131	U+5584	# <cjk>
+3-4132	U+6F38	# <cjk>
+3-4133	U+7136	# <cjk>
+3-4134	U+5168	# <cjk>
+3-4135	U+7985	# <cjk>
+3-4136	U+7E55	# <cjk>
+3-4137	U+81B3	# <cjk>
+3-4138	U+7CCE	# <cjk>
+3-4139	U+564C	# <cjk>
+3-413A	U+5851	# <cjk>
+3-413B	U+5CA8	# <cjk>
+3-413C	U+63AA	# <cjk>
+3-413D	U+66FE	# <cjk>
+3-413E	U+66FD	# <cjk>
+3-413F	U+695A	# <cjk>
+3-4140	U+72D9	# <cjk>
+3-4141	U+758F	# <cjk>
+3-4142	U+758E	# <cjk>
+3-4143	U+790E	# <cjk>
+3-4144	U+7956	# <cjk>
+3-4145	U+79DF	# <cjk>
+3-4146	U+7C97	# <cjk>
+3-4147	U+7D20	# <cjk>
+3-4148	U+7D44	# <cjk>
+3-4149	U+8607	# <cjk>
+3-414A	U+8A34	# <cjk>
+3-414B	U+963B	# <cjk>
+3-414C	U+9061	# <cjk>
+3-414D	U+9F20	# <cjk>
+3-414E	U+50E7	# <cjk>
+3-414F	U+5275	# <cjk>
+3-4150	U+53CC	# <cjk>
+3-4151	U+53E2	# <cjk>
+3-4152	U+5009	# <cjk>
+3-4153	U+55AA	# <cjk>
+3-4154	U+58EE	# <cjk>
+3-4155	U+594F	# <cjk>
+3-4156	U+723D	# <cjk>
+3-4157	U+5B8B	# <cjk>
+3-4158	U+5C64	# <cjk>
+3-4159	U+531D	# <cjk>
+3-415A	U+60E3	# <cjk>
+3-415B	U+60F3	# <cjk>
+3-415C	U+635C	# <cjk>
+3-415D	U+6383	# <cjk>
+3-415E	U+633F	# <cjk>
+3-415F	U+63BB	# <cjk>
+3-4160	U+64CD	# <cjk>
+3-4161	U+65E9	# <cjk>
+3-4162	U+66F9	# <cjk>
+3-4163	U+5DE3	# <cjk>
+3-4164	U+69CD	# <cjk>
+3-4165	U+69FD	# <cjk>
+3-4166	U+6F15	# <cjk>
+3-4167	U+71E5	# <cjk>
+3-4168	U+4E89	# <cjk>
+3-4169	U+75E9	# <cjk>
+3-416A	U+76F8	# <cjk>
+3-416B	U+7A93	# <cjk>
+3-416C	U+7CDF	# <cjk>
+3-416D	U+7DCF	# <cjk>
+3-416E	U+7D9C	# <cjk>
+3-416F	U+8061	# <cjk>
+3-4170	U+8349	# <cjk>
+3-4171	U+8358	# <cjk>
+3-4172	U+846C	# <cjk>
+3-4173	U+84BC	# <cjk>
+3-4174	U+85FB	# <cjk>
+3-4175	U+88C5	# <cjk>
+3-4176	U+8D70	# <cjk>
+3-4177	U+9001	# <cjk>
+3-4178	U+906D	# <cjk>
+3-4179	U+9397	# <cjk>
+3-417A	U+971C	# <cjk>
+3-417B	U+9A12	# <cjk>
+3-417C	U+50CF	# <cjk>
+3-417D	U+5897	# <cjk>
+3-417E	U+618E	# <cjk>
+3-4221	U+81D3	# <cjk>
+3-4222	U+8535	# <cjk>
+3-4223	U+8D08	# <cjk>
+3-4224	U+9020	# <cjk>
+3-4225	U+4FC3	# <cjk>
+3-4226	U+5074	# <cjk>
+3-4227	U+5247	# <cjk>
+3-4228	U+5373	# <cjk>
+3-4229	U+606F	# <cjk>
+3-422A	U+6349	# <cjk>
+3-422B	U+675F	# <cjk>
+3-422C	U+6E2C	# <cjk>
+3-422D	U+8DB3	# <cjk>
+3-422E	U+901F	# <cjk>
+3-422F	U+4FD7	# <cjk>
+3-4230	U+5C5E	# <cjk>
+3-4231	U+8CCA	# <cjk>
+3-4232	U+65CF	# <cjk>
+3-4233	U+7D9A	# <cjk>
+3-4234	U+5352	# <cjk>
+3-4235	U+8896	# <cjk>
+3-4236	U+5176	# <cjk>
+3-4237	U+63C3	# <cjk>
+3-4238	U+5B58	# <cjk>
+3-4239	U+5B6B	# <cjk>
+3-423A	U+5C0A	# <cjk>
+3-423B	U+640D	# <cjk>
+3-423C	U+6751	# <cjk>
+3-423D	U+905C	# <cjk>
+3-423E	U+4ED6	# <cjk>
+3-423F	U+591A	# <cjk>
+3-4240	U+592A	# <cjk>
+3-4241	U+6C70	# <cjk>
+3-4242	U+8A51	# <cjk>
+3-4243	U+553E	# <cjk>
+3-4244	U+5815	# <cjk>
+3-4245	U+59A5	# <cjk>
+3-4246	U+60F0	# <cjk>
+3-4247	U+6253	# <cjk>
+3-4248	U+67C1	# <cjk>
+3-4249	U+8235	# <cjk>
+3-424A	U+6955	# <cjk>
+3-424B	U+9640	# <cjk>
+3-424C	U+99C4	# <cjk>
+3-424D	U+9A28	# <cjk>
+3-424E	U+4F53	# <cjk>
+3-424F	U+5806	# <cjk>
+3-4250	U+5BFE	# <cjk>
+3-4251	U+8010	# <cjk>
+3-4252	U+5CB1	# <cjk>
+3-4253	U+5E2F	# <cjk>
+3-4254	U+5F85	# <cjk>
+3-4255	U+6020	# <cjk>
+3-4256	U+614B	# <cjk>
+3-4257	U+6234	# <cjk>
+3-4258	U+66FF	# <cjk>
+3-4259	U+6CF0	# <cjk>
+3-425A	U+6EDE	# <cjk>
+3-425B	U+80CE	# <cjk>
+3-425C	U+817F	# <cjk>
+3-425D	U+82D4	# <cjk>
+3-425E	U+888B	# <cjk>
+3-425F	U+8CB8	# <cjk>
+3-4260	U+9000	# <cjk>
+3-4261	U+902E	# <cjk>
+3-4262	U+968A	# <cjk>
+3-4263	U+9EDB	# <cjk>
+3-4264	U+9BDB	# <cjk>
+3-4265	U+4EE3	# <cjk>
+3-4266	U+53F0	# <cjk>
+3-4267	U+5927	# <cjk>
+3-4268	U+7B2C	# <cjk>
+3-4269	U+918D	# <cjk>
+3-426A	U+984C	# <cjk>
+3-426B	U+9DF9	# <cjk>
+3-426C	U+6EDD	# <cjk>
+3-426D	U+7027	# <cjk>
+3-426E	U+5353	# <cjk>
+3-426F	U+5544	# <cjk>
+3-4270	U+5B85	# <cjk>
+3-4271	U+6258	# <cjk>
+3-4272	U+629E	# <cjk>
+3-4273	U+62D3	# <cjk>
+3-4274	U+6CA2	# <cjk>
+3-4275	U+6FEF	# <cjk>
+3-4276	U+7422	# <cjk>
+3-4277	U+8A17	# <cjk>
+3-4278	U+9438	# <cjk>
+3-4279	U+6FC1	# <cjk>
+3-427A	U+8AFE	# <cjk>
+3-427B	U+8338	# <cjk>
+3-427C	U+51E7	# <cjk>
+3-427D	U+86F8	# <cjk>
+3-427E	U+53EA	# <cjk>
+3-4321	U+53E9	# <cjk>
+3-4322	U+4F46	# <cjk>
+3-4323	U+9054	# <cjk>
+3-4324	U+8FB0	# <cjk>
+3-4325	U+596A	# <cjk>
+3-4326	U+8131	# <cjk>
+3-4327	U+5DFD	# <cjk>
+3-4328	U+7AEA	# <cjk>
+3-4329	U+8FBF	# <cjk>
+3-432A	U+68DA	# <cjk>
+3-432B	U+8C37	# <cjk>
+3-432C	U+72F8	# <cjk>
+3-432D	U+9C48	# <cjk>
+3-432E	U+6A3D	# <cjk>
+3-432F	U+8AB0	# <cjk>
+3-4330	U+4E39	# <cjk>
+3-4331	U+5358	# <cjk>
+3-4332	U+5606	# <cjk>
+3-4333	U+5766	# <cjk>
+3-4334	U+62C5	# <cjk>
+3-4335	U+63A2	# <cjk>
+3-4336	U+65E6	# <cjk>
+3-4337	U+6B4E	# <cjk>
+3-4338	U+6DE1	# <cjk>
+3-4339	U+6E5B	# <cjk>
+3-433A	U+70AD	# <cjk>
+3-433B	U+77ED	# <cjk>
+3-433C	U+7AEF	# <cjk>
+3-433D	U+7BAA	# <cjk>
+3-433E	U+7DBB	# <cjk>
+3-433F	U+803D	# <cjk>
+3-4340	U+80C6	# <cjk>
+3-4341	U+86CB	# <cjk>
+3-4342	U+8A95	# <cjk>
+3-4343	U+935B	# <cjk>
+3-4344	U+56E3	# <cjk>
+3-4345	U+58C7	# <cjk>
+3-4346	U+5F3E	# <cjk>
+3-4347	U+65AD	# <cjk>
+3-4348	U+6696	# <cjk>
+3-4349	U+6A80	# <cjk>
+3-434A	U+6BB5	# <cjk>
+3-434B	U+7537	# <cjk>
+3-434C	U+8AC7	# <cjk>
+3-434D	U+5024	# <cjk>
+3-434E	U+77E5	# <cjk>
+3-434F	U+5730	# <cjk>
+3-4350	U+5F1B	# <cjk>
+3-4351	U+6065	# <cjk>
+3-4352	U+667A	# <cjk>
+3-4353	U+6C60	# <cjk>
+3-4354	U+75F4	# <cjk>
+3-4355	U+7A1A	# <cjk>
+3-4356	U+7F6E	# <cjk>
+3-4357	U+81F4	# <cjk>
+3-4358	U+8718	# <cjk>
+3-4359	U+9045	# <cjk>
+3-435A	U+99B3	# <cjk>
+3-435B	U+7BC9	# <cjk>
+3-435C	U+755C	# <cjk>
+3-435D	U+7AF9	# <cjk>
+3-435E	U+7B51	# <cjk>
+3-435F	U+84C4	# <cjk>
+3-4360	U+9010	# <cjk>
+3-4361	U+79E9	# <cjk>
+3-4362	U+7A92	# <cjk>
+3-4363	U+8336	# <cjk>
+3-4364	U+5AE1	# <cjk>
+3-4365	U+7740	# <cjk>
+3-4366	U+4E2D	# <cjk>
+3-4367	U+4EF2	# <cjk>
+3-4368	U+5B99	# <cjk>
+3-4369	U+5FE0	# <cjk>
+3-436A	U+62BD	# <cjk>
+3-436B	U+663C	# <cjk>
+3-436C	U+67F1	# <cjk>
+3-436D	U+6CE8	# <cjk>
+3-436E	U+866B	# <cjk>
+3-436F	U+8877	# <cjk>
+3-4370	U+8A3B	# <cjk>
+3-4371	U+914E	# <cjk>
+3-4372	U+92F3	# <cjk>
+3-4373	U+99D0	# <cjk>
+3-4374	U+6A17	# <cjk>
+3-4375	U+7026	# <cjk>
+3-4376	U+732A	# <cjk>
+3-4377	U+82E7	# <cjk>
+3-4378	U+8457	# <cjk>
+3-4379	U+8CAF	# <cjk>
+3-437A	U+4E01	# <cjk>
+3-437B	U+5146	# <cjk>
+3-437C	U+51CB	# <cjk>
+3-437D	U+558B	# <cjk>
+3-437E	U+5BF5	# <cjk>
+3-4421	U+5E16	# <cjk>
+3-4422	U+5E33	# <cjk>
+3-4423	U+5E81	# <cjk>
+3-4424	U+5F14	# <cjk>
+3-4425	U+5F35	# <cjk>
+3-4426	U+5F6B	# <cjk>
+3-4427	U+5FB4	# <cjk>
+3-4428	U+61F2	# <cjk>
+3-4429	U+6311	# <cjk>
+3-442A	U+66A2	# <cjk>
+3-442B	U+671D	# <cjk>
+3-442C	U+6F6E	# <cjk>
+3-442D	U+7252	# <cjk>
+3-442E	U+753A	# <cjk>
+3-442F	U+773A	# <cjk>
+3-4430	U+8074	# <cjk>
+3-4431	U+8139	# <cjk>
+3-4432	U+8178	# <cjk>
+3-4433	U+8776	# <cjk>
+3-4434	U+8ABF	# <cjk>
+3-4435	U+8ADC	# <cjk>
+3-4436	U+8D85	# <cjk>
+3-4437	U+8DF3	# <cjk>
+3-4438	U+929A	# <cjk>
+3-4439	U+9577	# <cjk>
+3-443A	U+9802	# <cjk>
+3-443B	U+9CE5	# <cjk>
+3-443C	U+52C5	# <cjk>
+3-443D	U+6357	# <cjk>
+3-443E	U+76F4	# <cjk>
+3-443F	U+6715	# <cjk>
+3-4440	U+6C88	# <cjk>
+3-4441	U+73CD	# <cjk>
+3-4442	U+8CC3	# <cjk>
+3-4443	U+93AE	# <cjk>
+3-4444	U+9673	# <cjk>
+3-4445	U+6D25	# <cjk>
+3-4446	U+589C	# <cjk>
+3-4447	U+690E	# <cjk>
+3-4448	U+69CC	# <cjk>
+3-4449	U+8FFD	# <cjk>
+3-444A	U+939A	# <cjk>
+3-444B	U+75DB	# <cjk>
+3-444C	U+901A	# <cjk>
+3-444D	U+585A	# <cjk>
+3-444E	U+6802	# <cjk>
+3-444F	U+63B4	# <cjk>
+3-4450	U+69FB	# <cjk>
+3-4451	U+4F43	# <cjk>
+3-4452	U+6F2C	# <cjk>
+3-4453	U+67D8	# <cjk>
+3-4454	U+8FBB	# <cjk>
+3-4455	U+8526	# <cjk>
+3-4456	U+7DB4	# <cjk>
+3-4457	U+9354	# <cjk>
+3-4458	U+693F	# <cjk>
+3-4459	U+6F70	# <cjk>
+3-445A	U+576A	# <cjk>
+3-445B	U+58F7	# <cjk>
+3-445C	U+5B2C	# <cjk>
+3-445D	U+7D2C	# <cjk>
+3-445E	U+722A	# <cjk>
+3-445F	U+540A	# <cjk>
+3-4460	U+91E3	# <cjk>
+3-4461	U+9DB4	# <cjk>
+3-4462	U+4EAD	# <cjk>
+3-4463	U+4F4E	# <cjk>
+3-4464	U+505C	# <cjk>
+3-4465	U+5075	# <cjk>
+3-4466	U+5243	# <cjk>
+3-4467	U+8C9E	# <cjk>
+3-4468	U+5448	# <cjk>
+3-4469	U+5824	# <cjk>
+3-446A	U+5B9A	# <cjk>
+3-446B	U+5E1D	# <cjk>
+3-446C	U+5E95	# <cjk>
+3-446D	U+5EAD	# <cjk>
+3-446E	U+5EF7	# <cjk>
+3-446F	U+5F1F	# <cjk>
+3-4470	U+608C	# <cjk>
+3-4471	U+62B5	# <cjk>
+3-4472	U+633A	# <cjk>
+3-4473	U+63D0	# <cjk>
+3-4474	U+68AF	# <cjk>
+3-4475	U+6C40	# <cjk>
+3-4476	U+7887	# <cjk>
+3-4477	U+798E	# <cjk>
+3-4478	U+7A0B	# <cjk>
+3-4479	U+7DE0	# <cjk>
+3-447A	U+8247	# <cjk>
+3-447B	U+8A02	# <cjk>
+3-447C	U+8AE6	# <cjk>
+3-447D	U+8E44	# <cjk>
+3-447E	U+9013	# <cjk>
+3-4521	U+90B8	# <cjk>
+3-4522	U+912D	# <cjk>
+3-4523	U+91D8	# <cjk>
+3-4524	U+9F0E	# <cjk>
+3-4525	U+6CE5	# <cjk>
+3-4526	U+6458	# <cjk>
+3-4527	U+64E2	# <cjk>
+3-4528	U+6575	# <cjk>
+3-4529	U+6EF4	# <cjk>
+3-452A	U+7684	# <cjk>
+3-452B	U+7B1B	# <cjk>
+3-452C	U+9069	# <cjk>
+3-452D	U+93D1	# <cjk>
+3-452E	U+6EBA	# <cjk>
+3-452F	U+54F2	# <cjk>
+3-4530	U+5FB9	# <cjk>
+3-4531	U+64A4	# <cjk>
+3-4532	U+8F4D	# <cjk>
+3-4533	U+8FED	# <cjk>
+3-4534	U+9244	# <cjk>
+3-4535	U+5178	# <cjk>
+3-4536	U+586B	# <cjk>
+3-4537	U+5929	# <cjk>
+3-4538	U+5C55	# <cjk>
+3-4539	U+5E97	# <cjk>
+3-453A	U+6DFB	# <cjk>
+3-453B	U+7E8F	# <cjk>
+3-453C	U+751C	# <cjk>
+3-453D	U+8CBC	# <cjk>
+3-453E	U+8EE2	# <cjk>
+3-453F	U+985B	# <cjk>
+3-4540	U+70B9	# <cjk>
+3-4541	U+4F1D	# <cjk>
+3-4542	U+6BBF	# <cjk>
+3-4543	U+6FB1	# <cjk>
+3-4544	U+7530	# <cjk>
+3-4545	U+96FB	# <cjk>
+3-4546	U+514E	# <cjk>
+3-4547	U+5410	# <cjk>
+3-4548	U+5835	# <cjk>
+3-4549	U+5857	# <cjk>
+3-454A	U+59AC	# <cjk>
+3-454B	U+5C60	# <cjk>
+3-454C	U+5F92	# <cjk>
+3-454D	U+6597	# <cjk>
+3-454E	U+675C	# <cjk>
+3-454F	U+6E21	# <cjk>
+3-4550	U+767B	# <cjk>
+3-4551	U+83DF	# <cjk>
+3-4552	U+8CED	# <cjk>
+3-4553	U+9014	# <cjk>
+3-4554	U+90FD	# <cjk>
+3-4555	U+934D	# <cjk>
+3-4556	U+7825	# <cjk>
+3-4557	U+783A	# <cjk>
+3-4558	U+52AA	# <cjk>
+3-4559	U+5EA6	# <cjk>
+3-455A	U+571F	# <cjk>
+3-455B	U+5974	# <cjk>
+3-455C	U+6012	# <cjk>
+3-455D	U+5012	# <cjk>
+3-455E	U+515A	# <cjk>
+3-455F	U+51AC	# <cjk>
+3-4560	U+51CD	# <cjk>
+3-4561	U+5200	# <cjk>
+3-4562	U+5510	# <cjk>
+3-4563	U+5854	# <cjk>
+3-4564	U+5858	# <cjk>
+3-4565	U+5957	# <cjk>
+3-4566	U+5B95	# <cjk>
+3-4567	U+5CF6	# <cjk>
+3-4568	U+5D8B	# <cjk>
+3-4569	U+60BC	# <cjk>
+3-456A	U+6295	# <cjk>
+3-456B	U+642D	# <cjk>
+3-456C	U+6771	# <cjk>
+3-456D	U+6843	# <cjk>
+3-456E	U+68BC	# <cjk>
+3-456F	U+68DF	# <cjk>
+3-4570	U+76D7	# <cjk>
+3-4571	U+6DD8	# <cjk>
+3-4572	U+6E6F	# <cjk>
+3-4573	U+6D9B	# <cjk>
+3-4574	U+706F	# <cjk>
+3-4575	U+71C8	# <cjk>
+3-4576	U+5F53	# <cjk>
+3-4577	U+75D8	# <cjk>
+3-4578	U+7977	# <cjk>
+3-4579	U+7B49	# <cjk>
+3-457A	U+7B54	# <cjk>
+3-457B	U+7B52	# <cjk>
+3-457C	U+7CD6	# <cjk>
+3-457D	U+7D71	# <cjk>
+3-457E	U+5230	# <cjk>
+3-4621	U+8463	# <cjk>
+3-4622	U+8569	# <cjk>
+3-4623	U+85E4	# <cjk>
+3-4624	U+8A0E	# <cjk>
+3-4625	U+8B04	# <cjk>
+3-4626	U+8C46	# <cjk>
+3-4627	U+8E0F	# <cjk>
+3-4628	U+9003	# <cjk>
+3-4629	U+900F	# <cjk>
+3-462A	U+9419	# <cjk>
+3-462B	U+9676	# <cjk>
+3-462C	U+982D	# <cjk>
+3-462D	U+9A30	# <cjk>
+3-462E	U+95D8	# <cjk>
+3-462F	U+50CD	# <cjk>
+3-4630	U+52D5	# <cjk>
+3-4631	U+540C	# <cjk>
+3-4632	U+5802	# <cjk>
+3-4633	U+5C0E	# <cjk>
+3-4634	U+61A7	# <cjk>
+3-4635	U+649E	# <cjk>
+3-4636	U+6D1E	# <cjk>
+3-4637	U+77B3	# <cjk>
+3-4638	U+7AE5	# <cjk>
+3-4639	U+80F4	# <cjk>
+3-463A	U+8404	# <cjk>
+3-463B	U+9053	# <cjk>
+3-463C	U+9285	# <cjk>
+3-463D	U+5CE0	# <cjk>
+3-463E	U+9D07	# <cjk>
+3-463F	U+533F	# <cjk>
+3-4640	U+5F97	# <cjk>
+3-4641	U+5FB3	# <cjk>
+3-4642	U+6D9C	# <cjk>
+3-4643	U+7279	# <cjk>
+3-4644	U+7763	# <cjk>
+3-4645	U+79BF	# <cjk>
+3-4646	U+7BE4	# <cjk>
+3-4647	U+6BD2	# <cjk>
+3-4648	U+72EC	# <cjk>
+3-4649	U+8AAD	# <cjk>
+3-464A	U+6803	# <cjk>
+3-464B	U+6A61	# <cjk>
+3-464C	U+51F8	# <cjk>
+3-464D	U+7A81	# <cjk>
+3-464E	U+6934	# <cjk>
+3-464F	U+5C4A	# <cjk>
+3-4650	U+9CF6	# <cjk>
+3-4651	U+82EB	# <cjk>
+3-4652	U+5BC5	# <cjk>
+3-4653	U+9149	# <cjk>
+3-4654	U+701E	# <cjk>
+3-4655	U+5678	# <cjk>
+3-4656	U+5C6F	# <cjk>
+3-4657	U+60C7	# <cjk>
+3-4658	U+6566	# <cjk>
+3-4659	U+6C8C	# <cjk>
+3-465A	U+8C5A	# <cjk>
+3-465B	U+9041	# <cjk>
+3-465C	U+9813	# <cjk>
+3-465D	U+5451	# <cjk>
+3-465E	U+66C7	# <cjk>
+3-465F	U+920D	# <cjk>
+3-4660	U+5948	# <cjk>
+3-4661	U+90A3	# <cjk>
+3-4662	U+5185	# <cjk>
+3-4663	U+4E4D	# <cjk>
+3-4664	U+51EA	# <cjk>
+3-4665	U+8599	# <cjk>
+3-4666	U+8B0E	# <cjk>
+3-4667	U+7058	# <cjk>
+3-4668	U+637A	# <cjk>
+3-4669	U+934B	# <cjk>
+3-466A	U+6962	# <cjk>
+3-466B	U+99B4	# <cjk>
+3-466C	U+7E04	# <cjk>
+3-466D	U+7577	# <cjk>
+3-466E	U+5357	# <cjk>
+3-466F	U+6960	# <cjk>
+3-4670	U+8EDF	# <cjk>
+3-4671	U+96E3	# <cjk>
+3-4672	U+6C5D	# <cjk>
+3-4673	U+4E8C	# <cjk>
+3-4674	U+5C3C	# <cjk>
+3-4675	U+5F10	# <cjk>
+3-4676	U+8FE9	# <cjk>
+3-4677	U+5302	# <cjk>
+3-4678	U+8CD1	# <cjk>
+3-4679	U+8089	# <cjk>
+3-467A	U+8679	# <cjk>
+3-467B	U+5EFF	# <cjk>
+3-467C	U+65E5	# <cjk>
+3-467D	U+4E73	# <cjk>
+3-467E	U+5165	# <cjk>
+3-4721	U+5982	# <cjk>
+3-4722	U+5C3F	# <cjk>
+3-4723	U+97EE	# <cjk>
+3-4724	U+4EFB	# <cjk>
+3-4725	U+598A	# <cjk>
+3-4726	U+5FCD	# <cjk>
+3-4727	U+8A8D	# <cjk>
+3-4728	U+6FE1	# <cjk>
+3-4729	U+79B0	# <cjk>
+3-472A	U+7962	# <cjk>
+3-472B	U+5BE7	# <cjk>
+3-472C	U+8471	# <cjk>
+3-472D	U+732B	# <cjk>
+3-472E	U+71B1	# <cjk>
+3-472F	U+5E74	# <cjk>
+3-4730	U+5FF5	# <cjk>
+3-4731	U+637B	# <cjk>
+3-4732	U+649A	# <cjk>
+3-4733	U+71C3	# <cjk>
+3-4734	U+7C98	# <cjk>
+3-4735	U+4E43	# <cjk>
+3-4736	U+5EFC	# <cjk>
+3-4737	U+4E4B	# <cjk>
+3-4738	U+57DC	# <cjk>
+3-4739	U+56A2	# <cjk>
+3-473A	U+60A9	# <cjk>
+3-473B	U+6FC3	# <cjk>
+3-473C	U+7D0D	# <cjk>
+3-473D	U+80FD	# <cjk>
+3-473E	U+8133	# <cjk>
+3-473F	U+81BF	# <cjk>
+3-4740	U+8FB2	# <cjk>
+3-4741	U+8997	# <cjk>
+3-4742	U+86A4	# <cjk>
+3-4743	U+5DF4	# <cjk>
+3-4744	U+628A	# <cjk>
+3-4745	U+64AD	# <cjk>
+3-4746	U+8987	# <cjk>
+3-4747	U+6777	# <cjk>
+3-4748	U+6CE2	# <cjk>
+3-4749	U+6D3E	# <cjk>
+3-474A	U+7436	# <cjk>
+3-474B	U+7834	# <cjk>
+3-474C	U+5A46	# <cjk>
+3-474D	U+7F75	# <cjk>
+3-474E	U+82AD	# <cjk>
+3-474F	U+99AC	# <cjk>
+3-4750	U+4FF3	# <cjk>
+3-4751	U+5EC3	# <cjk>
+3-4752	U+62DD	# <cjk>
+3-4753	U+6392	# <cjk>
+3-4754	U+6557	# <cjk>
+3-4755	U+676F	# <cjk>
+3-4756	U+76C3	# <cjk>
+3-4757	U+724C	# <cjk>
+3-4758	U+80CC	# <cjk>
+3-4759	U+80BA	# <cjk>
+3-475A	U+8F29	# <cjk>
+3-475B	U+914D	# <cjk>
+3-475C	U+500D	# <cjk>
+3-475D	U+57F9	# <cjk>
+3-475E	U+5A92	# <cjk>
+3-475F	U+6885	# <cjk>
+3-4760	U+6973	# <cjk>
+3-4761	U+7164	# <cjk>
+3-4762	U+72FD	# <cjk>
+3-4763	U+8CB7	# <cjk>
+3-4764	U+58F2	# <cjk>
+3-4765	U+8CE0	# <cjk>
+3-4766	U+966A	# <cjk>
+3-4767	U+9019	# <cjk>
+3-4768	U+877F	# <cjk>
+3-4769	U+79E4	# <cjk>
+3-476A	U+77E7	# <cjk>
+3-476B	U+8429	# <cjk>
+3-476C	U+4F2F	# <cjk>
+3-476D	U+5265	# <cjk>
+3-476E	U+535A	# <cjk>
+3-476F	U+62CD	# <cjk>
+3-4770	U+67CF	# <cjk>
+3-4771	U+6CCA	# <cjk>
+3-4772	U+767D	# <cjk>
+3-4773	U+7B94	# <cjk>
+3-4774	U+7C95	# <cjk>
+3-4775	U+8236	# <cjk>
+3-4776	U+8584	# <cjk>
+3-4777	U+8FEB	# <cjk>
+3-4778	U+66DD	# <cjk>
+3-4779	U+6F20	# <cjk>
+3-477A	U+7206	# <cjk>
+3-477B	U+7E1B	# <cjk>
+3-477C	U+83AB	# <cjk>
+3-477D	U+99C1	# <cjk>
+3-477E	U+9EA6	# <cjk>
+3-4821	U+51FD	# <cjk>
+3-4822	U+7BB1	# <cjk>
+3-4823	U+7872	# <cjk>
+3-4824	U+7BB8	# <cjk>
+3-4825	U+8087	# <cjk>
+3-4826	U+7B48	# <cjk>
+3-4827	U+6AE8	# <cjk>
+3-4828	U+5E61	# <cjk>
+3-4829	U+808C	# <cjk>
+3-482A	U+7551	# <cjk>
+3-482B	U+7560	# <cjk>
+3-482C	U+516B	# <cjk>
+3-482D	U+9262	# <cjk>
+3-482E	U+6E8C	# <cjk>
+3-482F	U+767A	# <cjk>
+3-4830	U+9197	# <cjk>
+3-4831	U+9AEA	# <cjk>
+3-4832	U+4F10	# <cjk>
+3-4833	U+7F70	# <cjk>
+3-4834	U+629C	# <cjk>
+3-4835	U+7B4F	# <cjk>
+3-4836	U+95A5	# <cjk>
+3-4837	U+9CE9	# <cjk>
+3-4838	U+567A	# <cjk>
+3-4839	U+5859	# <cjk>
+3-483A	U+86E4	# <cjk>
+3-483B	U+96BC	# <cjk>
+3-483C	U+4F34	# <cjk>
+3-483D	U+5224	# <cjk>
+3-483E	U+534A	# <cjk>
+3-483F	U+53CD	# <cjk>
+3-4840	U+53DB	# <cjk>
+3-4841	U+5E06	# <cjk>
+3-4842	U+642C	# <cjk>
+3-4843	U+6591	# <cjk>
+3-4844	U+677F	# <cjk>
+3-4845	U+6C3E	# <cjk>
+3-4846	U+6C4E	# <cjk>
+3-4847	U+7248	# <cjk>
+3-4848	U+72AF	# <cjk>
+3-4849	U+73ED	# <cjk>
+3-484A	U+7554	# <cjk>
+3-484B	U+7E41	# <cjk>
+3-484C	U+822C	# <cjk>
+3-484D	U+85E9	# <cjk>
+3-484E	U+8CA9	# <cjk>
+3-484F	U+7BC4	# <cjk>
+3-4850	U+91C6	# <cjk>
+3-4851	U+7169	# <cjk>
+3-4852	U+9812	# <cjk>
+3-4853	U+98EF	# <cjk>
+3-4854	U+633D	# <cjk>
+3-4855	U+6669	# <cjk>
+3-4856	U+756A	# <cjk>
+3-4857	U+76E4	# <cjk>
+3-4858	U+78D0	# <cjk>
+3-4859	U+8543	# <cjk>
+3-485A	U+86EE	# <cjk>
+3-485B	U+532A	# <cjk>
+3-485C	U+5351	# <cjk>
+3-485D	U+5426	# <cjk>
+3-485E	U+5983	# <cjk>
+3-485F	U+5E87	# <cjk>
+3-4860	U+5F7C	# <cjk>
+3-4861	U+60B2	# <cjk>
+3-4862	U+6249	# <cjk>
+3-4863	U+6279	# <cjk>
+3-4864	U+62AB	# <cjk>
+3-4865	U+6590	# <cjk>
+3-4866	U+6BD4	# <cjk>
+3-4867	U+6CCC	# <cjk>
+3-4868	U+75B2	# <cjk>
+3-4869	U+76AE	# <cjk>
+3-486A	U+7891	# <cjk>
+3-486B	U+79D8	# <cjk>
+3-486C	U+7DCB	# <cjk>
+3-486D	U+7F77	# <cjk>
+3-486E	U+80A5	# <cjk>
+3-486F	U+88AB	# <cjk>
+3-4870	U+8AB9	# <cjk>
+3-4871	U+8CBB	# <cjk>
+3-4872	U+907F	# <cjk>
+3-4873	U+975E	# <cjk>
+3-4874	U+98DB	# <cjk>
+3-4875	U+6A0B	# <cjk>
+3-4876	U+7C38	# <cjk>
+3-4877	U+5099	# <cjk>
+3-4878	U+5C3E	# <cjk>
+3-4879	U+5FAE	# <cjk>
+3-487A	U+6787	# <cjk>
+3-487B	U+6BD8	# <cjk>
+3-487C	U+7435	# <cjk>
+3-487D	U+7709	# <cjk>
+3-487E	U+7F8E	# <cjk>
+3-4921	U+9F3B	# <cjk>
+3-4922	U+67CA	# <cjk>
+3-4923	U+7A17	# <cjk>
+3-4924	U+5339	# <cjk>
+3-4925	U+758B	# <cjk>
+3-4926	U+9AED	# <cjk>
+3-4927	U+5F66	# <cjk>
+3-4928	U+819D	# <cjk>
+3-4929	U+83F1	# <cjk>
+3-492A	U+8098	# <cjk>
+3-492B	U+5F3C	# <cjk>
+3-492C	U+5FC5	# <cjk>
+3-492D	U+7562	# <cjk>
+3-492E	U+7B46	# <cjk>
+3-492F	U+903C	# <cjk>
+3-4930	U+6867	# <cjk>
+3-4931	U+59EB	# <cjk>
+3-4932	U+5A9B	# <cjk>
+3-4933	U+7D10	# <cjk>
+3-4934	U+767E	# <cjk>
+3-4935	U+8B2C	# <cjk>
+3-4936	U+4FF5	# <cjk>
+3-4937	U+5F6A	# <cjk>
+3-4938	U+6A19	# <cjk>
+3-4939	U+6C37	# <cjk>
+3-493A	U+6F02	# <cjk>
+3-493B	U+74E2	# <cjk>
+3-493C	U+7968	# <cjk>
+3-493D	U+8868	# <cjk>
+3-493E	U+8A55	# <cjk>
+3-493F	U+8C79	# <cjk>
+3-4940	U+5EDF	# <cjk>
+3-4941	U+63CF	# <cjk>
+3-4942	U+75C5	# <cjk>
+3-4943	U+79D2	# <cjk>
+3-4944	U+82D7	# <cjk>
+3-4945	U+9328	# <cjk>
+3-4946	U+92F2	# <cjk>
+3-4947	U+849C	# <cjk>
+3-4948	U+86ED	# <cjk>
+3-4949	U+9C2D	# <cjk>
+3-494A	U+54C1	# <cjk>
+3-494B	U+5F6C	# <cjk>
+3-494C	U+658C	# <cjk>
+3-494D	U+6D5C	# <cjk>
+3-494E	U+7015	# <cjk>
+3-494F	U+8CA7	# <cjk>
+3-4950	U+8CD3	# <cjk>
+3-4951	U+983B	# <cjk>
+3-4952	U+654F	# <cjk>
+3-4953	U+74F6	# <cjk>
+3-4954	U+4E0D	# <cjk>
+3-4955	U+4ED8	# <cjk>
+3-4956	U+57E0	# <cjk>
+3-4957	U+592B	# <cjk>
+3-4958	U+5A66	# <cjk>
+3-4959	U+5BCC	# <cjk>
+3-495A	U+51A8	# <cjk>
+3-495B	U+5E03	# <cjk>
+3-495C	U+5E9C	# <cjk>
+3-495D	U+6016	# <cjk>
+3-495E	U+6276	# <cjk>
+3-495F	U+6577	# <cjk>
+3-4960	U+65A7	# <cjk>
+3-4961	U+666E	# <cjk>
+3-4962	U+6D6E	# <cjk>
+3-4963	U+7236	# <cjk>
+3-4964	U+7B26	# <cjk>
+3-4965	U+8150	# <cjk>
+3-4966	U+819A	# <cjk>
+3-4967	U+8299	# <cjk>
+3-4968	U+8B5C	# <cjk>
+3-4969	U+8CA0	# <cjk>
+3-496A	U+8CE6	# <cjk>
+3-496B	U+8D74	# <cjk>
+3-496C	U+961C	# <cjk>
+3-496D	U+9644	# <cjk>
+3-496E	U+4FAE	# <cjk>
+3-496F	U+64AB	# <cjk>
+3-4970	U+6B66	# <cjk>
+3-4971	U+821E	# <cjk>
+3-4972	U+8461	# <cjk>
+3-4973	U+856A	# <cjk>
+3-4974	U+90E8	# <cjk>
+3-4975	U+5C01	# <cjk>
+3-4976	U+6953	# <cjk>
+3-4977	U+98A8	# <cjk>
+3-4978	U+847A	# <cjk>
+3-4979	U+8557	# <cjk>
+3-497A	U+4F0F	# <cjk>
+3-497B	U+526F	# <cjk>
+3-497C	U+5FA9	# <cjk>
+3-497D	U+5E45	# <cjk>
+3-497E	U+670D	# <cjk>
+3-4A21	U+798F	# <cjk>
+3-4A22	U+8179	# <cjk>
+3-4A23	U+8907	# <cjk>
+3-4A24	U+8986	# <cjk>
+3-4A25	U+6DF5	# <cjk>
+3-4A26	U+5F17	# <cjk>
+3-4A27	U+6255	# <cjk>
+3-4A28	U+6CB8	# <cjk>
+3-4A29	U+4ECF	# <cjk>
+3-4A2A	U+7269	# <cjk>
+3-4A2B	U+9B92	# <cjk>
+3-4A2C	U+5206	# <cjk>
+3-4A2D	U+543B	# <cjk>
+3-4A2E	U+5674	# <cjk>
+3-4A2F	U+58B3	# <cjk>
+3-4A30	U+61A4	# <cjk>
+3-4A31	U+626E	# <cjk>
+3-4A32	U+711A	# <cjk>
+3-4A33	U+596E	# <cjk>
+3-4A34	U+7C89	# <cjk>
+3-4A35	U+7CDE	# <cjk>
+3-4A36	U+7D1B	# <cjk>
+3-4A37	U+96F0	# <cjk>
+3-4A38	U+6587	# <cjk>
+3-4A39	U+805E	# <cjk>
+3-4A3A	U+4E19	# <cjk>
+3-4A3B	U+4F75	# <cjk>
+3-4A3C	U+5175	# <cjk>
+3-4A3D	U+5840	# <cjk>
+3-4A3E	U+5E63	# <cjk>
+3-4A3F	U+5E73	# <cjk>
+3-4A40	U+5F0A	# <cjk>
+3-4A41	U+67C4	# <cjk>
+3-4A42	U+4E26	# <cjk>
+3-4A43	U+853D	# <cjk>
+3-4A44	U+9589	# <cjk>
+3-4A45	U+965B	# <cjk>
+3-4A46	U+7C73	# <cjk>
+3-4A47	U+9801	# <cjk>
+3-4A48	U+50FB	# <cjk>
+3-4A49	U+58C1	# <cjk>
+3-4A4A	U+7656	# <cjk>
+3-4A4B	U+78A7	# <cjk>
+3-4A4C	U+5225	# <cjk>
+3-4A4D	U+77A5	# <cjk>
+3-4A4E	U+8511	# <cjk>
+3-4A4F	U+7B86	# <cjk>
+3-4A50	U+504F	# <cjk>
+3-4A51	U+5909	# <cjk>
+3-4A52	U+7247	# <cjk>
+3-4A53	U+7BC7	# <cjk>
+3-4A54	U+7DE8	# <cjk>
+3-4A55	U+8FBA	# <cjk>
+3-4A56	U+8FD4	# <cjk>
+3-4A57	U+904D	# <cjk>
+3-4A58	U+4FBF	# <cjk>
+3-4A59	U+52C9	# <cjk>
+3-4A5A	U+5A29	# <cjk>
+3-4A5B	U+5F01	# <cjk>
+3-4A5C	U+97AD	# <cjk>
+3-4A5D	U+4FDD	# <cjk>
+3-4A5E	U+8217	# <cjk>
+3-4A5F	U+92EA	# <cjk>
+3-4A60	U+5703	# <cjk>
+3-4A61	U+6355	# <cjk>
+3-4A62	U+6B69	# <cjk>
+3-4A63	U+752B	# <cjk>
+3-4A64	U+88DC	# <cjk>
+3-4A65	U+8F14	# <cjk>
+3-4A66	U+7A42	# <cjk>
+3-4A67	U+52DF	# <cjk>
+3-4A68	U+5893	# <cjk>
+3-4A69	U+6155	# <cjk>
+3-4A6A	U+620A	# <cjk>
+3-4A6B	U+66AE	# <cjk>
+3-4A6C	U+6BCD	# <cjk>
+3-4A6D	U+7C3F	# <cjk>
+3-4A6E	U+83E9	# <cjk>
+3-4A6F	U+5023	# <cjk>
+3-4A70	U+4FF8	# <cjk>
+3-4A71	U+5305	# <cjk>
+3-4A72	U+5446	# <cjk>
+3-4A73	U+5831	# <cjk>
+3-4A74	U+5949	# <cjk>
+3-4A75	U+5B9D	# <cjk>
+3-4A76	U+5CF0	# <cjk>
+3-4A77	U+5CEF	# <cjk>
+3-4A78	U+5D29	# <cjk>
+3-4A79	U+5E96	# <cjk>
+3-4A7A	U+62B1	# <cjk>
+3-4A7B	U+6367	# <cjk>
+3-4A7C	U+653E	# <cjk>
+3-4A7D	U+65B9	# <cjk>
+3-4A7E	U+670B	# <cjk>
+3-4B21	U+6CD5	# <cjk>
+3-4B22	U+6CE1	# <cjk>
+3-4B23	U+70F9	# <cjk>
+3-4B24	U+7832	# <cjk>
+3-4B25	U+7E2B	# <cjk>
+3-4B26	U+80DE	# <cjk>
+3-4B27	U+82B3	# <cjk>
+3-4B28	U+840C	# <cjk>
+3-4B29	U+84EC	# <cjk>
+3-4B2A	U+8702	# <cjk>
+3-4B2B	U+8912	# <cjk>
+3-4B2C	U+8A2A	# <cjk>
+3-4B2D	U+8C4A	# <cjk>
+3-4B2E	U+90A6	# <cjk>
+3-4B2F	U+92D2	# <cjk>
+3-4B30	U+98FD	# <cjk>
+3-4B31	U+9CF3	# <cjk>
+3-4B32	U+9D6C	# <cjk>
+3-4B33	U+4E4F	# <cjk>
+3-4B34	U+4EA1	# <cjk>
+3-4B35	U+508D	# <cjk>
+3-4B36	U+5256	# <cjk>
+3-4B37	U+574A	# <cjk>
+3-4B38	U+59A8	# <cjk>
+3-4B39	U+5E3D	# <cjk>
+3-4B3A	U+5FD8	# <cjk>
+3-4B3B	U+5FD9	# <cjk>
+3-4B3C	U+623F	# <cjk>
+3-4B3D	U+66B4	# <cjk>
+3-4B3E	U+671B	# <cjk>
+3-4B3F	U+67D0	# <cjk>
+3-4B40	U+68D2	# <cjk>
+3-4B41	U+5192	# <cjk>
+3-4B42	U+7D21	# <cjk>
+3-4B43	U+80AA	# <cjk>
+3-4B44	U+81A8	# <cjk>
+3-4B45	U+8B00	# <cjk>
+3-4B46	U+8C8C	# <cjk>
+3-4B47	U+8CBF	# <cjk>
+3-4B48	U+927E	# <cjk>
+3-4B49	U+9632	# <cjk>
+3-4B4A	U+5420	# <cjk>
+3-4B4B	U+982C	# <cjk>
+3-4B4C	U+5317	# <cjk>
+3-4B4D	U+50D5	# <cjk>
+3-4B4E	U+535C	# <cjk>
+3-4B4F	U+58A8	# <cjk>
+3-4B50	U+64B2	# <cjk>
+3-4B51	U+6734	# <cjk>
+3-4B52	U+7267	# <cjk>
+3-4B53	U+7766	# <cjk>
+3-4B54	U+7A46	# <cjk>
+3-4B55	U+91E6	# <cjk>
+3-4B56	U+52C3	# <cjk>
+3-4B57	U+6CA1	# <cjk>
+3-4B58	U+6B86	# <cjk>
+3-4B59	U+5800	# <cjk>
+3-4B5A	U+5E4C	# <cjk>
+3-4B5B	U+5954	# <cjk>
+3-4B5C	U+672C	# <cjk>
+3-4B5D	U+7FFB	# <cjk>
+3-4B5E	U+51E1	# <cjk>
+3-4B5F	U+76C6	# <cjk>
+3-4B60	U+6469	# <cjk>
+3-4B61	U+78E8	# <cjk>
+3-4B62	U+9B54	# <cjk>
+3-4B63	U+9EBB	# <cjk>
+3-4B64	U+57CB	# <cjk>
+3-4B65	U+59B9	# <cjk>
+3-4B66	U+6627	# <cjk>
+3-4B67	U+679A	# <cjk>
+3-4B68	U+6BCE	# <cjk>
+3-4B69	U+54E9	# <cjk>
+3-4B6A	U+69D9	# <cjk>
+3-4B6B	U+5E55	# <cjk>
+3-4B6C	U+819C	# <cjk>
+3-4B6D	U+6795	# <cjk>
+3-4B6E	U+9BAA	# <cjk>
+3-4B6F	U+67FE	# <cjk>
+3-4B70	U+9C52	# <cjk>
+3-4B71	U+685D	# <cjk>
+3-4B72	U+4EA6	# <cjk>
+3-4B73	U+4FE3	# <cjk>
+3-4B74	U+53C8	# <cjk>
+3-4B75	U+62B9	# <cjk>
+3-4B76	U+672B	# <cjk>
+3-4B77	U+6CAB	# <cjk>
+3-4B78	U+8FC4	# <cjk>
+3-4B79	U+4FAD	# <cjk>
+3-4B7A	U+7E6D	# <cjk>
+3-4B7B	U+9EBF	# <cjk>
+3-4B7C	U+4E07	# <cjk>
+3-4B7D	U+6162	# <cjk>
+3-4B7E	U+6E80	# <cjk>
+3-4C21	U+6F2B	# <cjk>
+3-4C22	U+8513	# <cjk>
+3-4C23	U+5473	# <cjk>
+3-4C24	U+672A	# <cjk>
+3-4C25	U+9B45	# <cjk>
+3-4C26	U+5DF3	# <cjk>
+3-4C27	U+7B95	# <cjk>
+3-4C28	U+5CAC	# <cjk>
+3-4C29	U+5BC6	# <cjk>
+3-4C2A	U+871C	# <cjk>
+3-4C2B	U+6E4A	# <cjk>
+3-4C2C	U+84D1	# <cjk>
+3-4C2D	U+7A14	# <cjk>
+3-4C2E	U+8108	# <cjk>
+3-4C2F	U+5999	# <cjk>
+3-4C30	U+7C8D	# <cjk>
+3-4C31	U+6C11	# <cjk>
+3-4C32	U+7720	# <cjk>
+3-4C33	U+52D9	# <cjk>
+3-4C34	U+5922	# <cjk>
+3-4C35	U+7121	# <cjk>
+3-4C36	U+725F	# <cjk>
+3-4C37	U+77DB	# <cjk>
+3-4C38	U+9727	# <cjk>
+3-4C39	U+9D61	# <cjk>
+3-4C3A	U+690B	# <cjk>
+3-4C3B	U+5A7F	# <cjk>
+3-4C3C	U+5A18	# <cjk>
+3-4C3D	U+51A5	# <cjk>
+3-4C3E	U+540D	# <cjk>
+3-4C3F	U+547D	# <cjk>
+3-4C40	U+660E	# <cjk>
+3-4C41	U+76DF	# <cjk>
+3-4C42	U+8FF7	# <cjk>
+3-4C43	U+9298	# <cjk>
+3-4C44	U+9CF4	# <cjk>
+3-4C45	U+59EA	# <cjk>
+3-4C46	U+725D	# <cjk>
+3-4C47	U+6EC5	# <cjk>
+3-4C48	U+514D	# <cjk>
+3-4C49	U+68C9	# <cjk>
+3-4C4A	U+7DBF	# <cjk>
+3-4C4B	U+7DEC	# <cjk>
+3-4C4C	U+9762	# <cjk>
+3-4C4D	U+9EBA	# <cjk>
+3-4C4E	U+6478	# <cjk>
+3-4C4F	U+6A21	# <cjk>
+3-4C50	U+8302	# <cjk>
+3-4C51	U+5984	# <cjk>
+3-4C52	U+5B5F	# <cjk>
+3-4C53	U+6BDB	# <cjk>
+3-4C54	U+731B	# <cjk>
+3-4C55	U+76F2	# <cjk>
+3-4C56	U+7DB2	# <cjk>
+3-4C57	U+8017	# <cjk>
+3-4C58	U+8499	# <cjk>
+3-4C59	U+5132	# <cjk>
+3-4C5A	U+6728	# <cjk>
+3-4C5B	U+9ED9	# <cjk>
+3-4C5C	U+76EE	# <cjk>
+3-4C5D	U+6762	# <cjk>
+3-4C5E	U+52FF	# <cjk>
+3-4C5F	U+9905	# <cjk>
+3-4C60	U+5C24	# <cjk>
+3-4C61	U+623B	# <cjk>
+3-4C62	U+7C7E	# <cjk>
+3-4C63	U+8CB0	# <cjk>
+3-4C64	U+554F	# <cjk>
+3-4C65	U+60B6	# <cjk>
+3-4C66	U+7D0B	# <cjk>
+3-4C67	U+9580	# <cjk>
+3-4C68	U+5301	# <cjk>
+3-4C69	U+4E5F	# <cjk>
+3-4C6A	U+51B6	# <cjk>
+3-4C6B	U+591C	# <cjk>
+3-4C6C	U+723A	# <cjk>
+3-4C6D	U+8036	# <cjk>
+3-4C6E	U+91CE	# <cjk>
+3-4C6F	U+5F25	# <cjk>
+3-4C70	U+77E2	# <cjk>
+3-4C71	U+5384	# <cjk>
+3-4C72	U+5F79	# <cjk>
+3-4C73	U+7D04	# <cjk>
+3-4C74	U+85AC	# <cjk>
+3-4C75	U+8A33	# <cjk>
+3-4C76	U+8E8D	# <cjk>
+3-4C77	U+9756	# <cjk>
+3-4C78	U+67F3	# <cjk>
+3-4C79	U+85AE	# <cjk>
+3-4C7A	U+9453	# <cjk>
+3-4C7B	U+6109	# <cjk>
+3-4C7C	U+6108	# <cjk>
+3-4C7D	U+6CB9	# <cjk>
+3-4C7E	U+7652	# <cjk>
+3-4D21	U+8AED	# <cjk>
+3-4D22	U+8F38	# <cjk>
+3-4D23	U+552F	# <cjk>
+3-4D24	U+4F51	# <cjk>
+3-4D25	U+512A	# <cjk>
+3-4D26	U+52C7	# <cjk>
+3-4D27	U+53CB	# <cjk>
+3-4D28	U+5BA5	# <cjk>
+3-4D29	U+5E7D	# <cjk>
+3-4D2A	U+60A0	# <cjk>
+3-4D2B	U+6182	# <cjk>
+3-4D2C	U+63D6	# <cjk>
+3-4D2D	U+6709	# <cjk>
+3-4D2E	U+67DA	# <cjk>
+3-4D2F	U+6E67	# <cjk>
+3-4D30	U+6D8C	# <cjk>
+3-4D31	U+7336	# <cjk>
+3-4D32	U+7337	# <cjk>
+3-4D33	U+7531	# <cjk>
+3-4D34	U+7950	# <cjk>
+3-4D35	U+88D5	# <cjk>
+3-4D36	U+8A98	# <cjk>
+3-4D37	U+904A	# <cjk>
+3-4D38	U+9091	# <cjk>
+3-4D39	U+90F5	# <cjk>
+3-4D3A	U+96C4	# <cjk>
+3-4D3B	U+878D	# <cjk>
+3-4D3C	U+5915	# <cjk>
+3-4D3D	U+4E88	# <cjk>
+3-4D3E	U+4F59	# <cjk>
+3-4D3F	U+4E0E	# <cjk>
+3-4D40	U+8A89	# <cjk>
+3-4D41	U+8F3F	# <cjk>
+3-4D42	U+9810	# <cjk>
+3-4D43	U+50AD	# <cjk>
+3-4D44	U+5E7C	# <cjk>
+3-4D45	U+5996	# <cjk>
+3-4D46	U+5BB9	# <cjk>
+3-4D47	U+5EB8	# <cjk>
+3-4D48	U+63DA	# <cjk>
+3-4D49	U+63FA	# <cjk>
+3-4D4A	U+64C1	# <cjk>
+3-4D4B	U+66DC	# <cjk>
+3-4D4C	U+694A	# <cjk>
+3-4D4D	U+69D8	# <cjk>
+3-4D4E	U+6D0B	# <cjk>
+3-4D4F	U+6EB6	# <cjk>
+3-4D50	U+7194	# <cjk>
+3-4D51	U+7528	# <cjk>
+3-4D52	U+7AAF	# <cjk>
+3-4D53	U+7F8A	# <cjk>
+3-4D54	U+8000	# <cjk>
+3-4D55	U+8449	# <cjk>
+3-4D56	U+84C9	# <cjk>
+3-4D57	U+8981	# <cjk>
+3-4D58	U+8B21	# <cjk>
+3-4D59	U+8E0A	# <cjk>
+3-4D5A	U+9065	# <cjk>
+3-4D5B	U+967D	# <cjk>
+3-4D5C	U+990A	# <cjk>
+3-4D5D	U+617E	# <cjk>
+3-4D5E	U+6291	# <cjk>
+3-4D5F	U+6B32	# <cjk>
+3-4D60	U+6C83	# <cjk>
+3-4D61	U+6D74	# <cjk>
+3-4D62	U+7FCC	# <cjk>
+3-4D63	U+7FFC	# <cjk>
+3-4D64	U+6DC0	# <cjk>
+3-4D65	U+7F85	# <cjk>
+3-4D66	U+87BA	# <cjk>
+3-4D67	U+88F8	# <cjk>
+3-4D68	U+6765	# <cjk>
+3-4D69	U+83B1	# <cjk>
+3-4D6A	U+983C	# <cjk>
+3-4D6B	U+96F7	# <cjk>
+3-4D6C	U+6D1B	# <cjk>
+3-4D6D	U+7D61	# <cjk>
+3-4D6E	U+843D	# <cjk>
+3-4D6F	U+916A	# <cjk>
+3-4D70	U+4E71	# <cjk>
+3-4D71	U+5375	# <cjk>
+3-4D72	U+5D50	# <cjk>
+3-4D73	U+6B04	# <cjk>
+3-4D74	U+6FEB	# <cjk>
+3-4D75	U+85CD	# <cjk>
+3-4D76	U+862D	# <cjk>
+3-4D77	U+89A7	# <cjk>
+3-4D78	U+5229	# <cjk>
+3-4D79	U+540F	# <cjk>
+3-4D7A	U+5C65	# <cjk>
+3-4D7B	U+674E	# <cjk>
+3-4D7C	U+68A8	# <cjk>
+3-4D7D	U+7406	# <cjk>
+3-4D7E	U+7483	# <cjk>
+3-4E21	U+75E2	# <cjk>
+3-4E22	U+88CF	# <cjk>
+3-4E23	U+88E1	# <cjk>
+3-4E24	U+91CC	# <cjk>
+3-4E25	U+96E2	# <cjk>
+3-4E26	U+9678	# <cjk>
+3-4E27	U+5F8B	# <cjk>
+3-4E28	U+7387	# <cjk>
+3-4E29	U+7ACB	# <cjk>
+3-4E2A	U+844E	# <cjk>
+3-4E2B	U+63A0	# <cjk>
+3-4E2C	U+7565	# <cjk>
+3-4E2D	U+5289	# <cjk>
+3-4E2E	U+6D41	# <cjk>
+3-4E2F	U+6E9C	# <cjk>
+3-4E30	U+7409	# <cjk>
+3-4E31	U+7559	# <cjk>
+3-4E32	U+786B	# <cjk>
+3-4E33	U+7C92	# <cjk>
+3-4E34	U+9686	# <cjk>
+3-4E35	U+7ADC	# <cjk>
+3-4E36	U+9F8D	# <cjk>
+3-4E37	U+4FB6	# <cjk>
+3-4E38	U+616E	# <cjk>
+3-4E39	U+65C5	# <cjk>
+3-4E3A	U+865C	# <cjk>
+3-4E3B	U+4E86	# <cjk>
+3-4E3C	U+4EAE	# <cjk>
+3-4E3D	U+50DA	# <cjk>
+3-4E3E	U+4E21	# <cjk>
+3-4E3F	U+51CC	# <cjk>
+3-4E40	U+5BEE	# <cjk>
+3-4E41	U+6599	# <cjk>
+3-4E42	U+6881	# <cjk>
+3-4E43	U+6DBC	# <cjk>
+3-4E44	U+731F	# <cjk>
+3-4E45	U+7642	# <cjk>
+3-4E46	U+77AD	# <cjk>
+3-4E47	U+7A1C	# <cjk>
+3-4E48	U+7CE7	# <cjk>
+3-4E49	U+826F	# <cjk>
+3-4E4A	U+8AD2	# <cjk>
+3-4E4B	U+907C	# <cjk>
+3-4E4C	U+91CF	# <cjk>
+3-4E4D	U+9675	# <cjk>
+3-4E4E	U+9818	# <cjk>
+3-4E4F	U+529B	# <cjk>
+3-4E50	U+7DD1	# <cjk>
+3-4E51	U+502B	# <cjk>
+3-4E52	U+5398	# <cjk>
+3-4E53	U+6797	# <cjk>
+3-4E54	U+6DCB	# <cjk>
+3-4E55	U+71D0	# <cjk>
+3-4E56	U+7433	# <cjk>
+3-4E57	U+81E8	# <cjk>
+3-4E58	U+8F2A	# <cjk>
+3-4E59	U+96A3	# <cjk>
+3-4E5A	U+9C57	# <cjk>
+3-4E5B	U+9E9F	# <cjk>
+3-4E5C	U+7460	# <cjk>
+3-4E5D	U+5841	# <cjk>
+3-4E5E	U+6D99	# <cjk>
+3-4E5F	U+7D2F	# <cjk>
+3-4E60	U+985E	# <cjk>
+3-4E61	U+4EE4	# <cjk>
+3-4E62	U+4F36	# <cjk>
+3-4E63	U+4F8B	# <cjk>
+3-4E64	U+51B7	# <cjk>
+3-4E65	U+52B1	# <cjk>
+3-4E66	U+5DBA	# <cjk>
+3-4E67	U+601C	# <cjk>
+3-4E68	U+73B2	# <cjk>
+3-4E69	U+793C	# <cjk>
+3-4E6A	U+82D3	# <cjk>
+3-4E6B	U+9234	# <cjk>
+3-4E6C	U+96B7	# <cjk>
+3-4E6D	U+96F6	# <cjk>
+3-4E6E	U+970A	# <cjk>
+3-4E6F	U+9E97	# <cjk>
+3-4E70	U+9F62	# <cjk>
+3-4E71	U+66A6	# <cjk>
+3-4E72	U+6B74	# <cjk>
+3-4E73	U+5217	# <cjk>
+3-4E74	U+52A3	# <cjk>
+3-4E75	U+70C8	# <cjk>
+3-4E76	U+88C2	# <cjk>
+3-4E77	U+5EC9	# <cjk>
+3-4E78	U+604B	# <cjk>
+3-4E79	U+6190	# <cjk>
+3-4E7A	U+6F23	# <cjk>
+3-4E7B	U+7149	# <cjk>
+3-4E7C	U+7C3E	# <cjk>
+3-4E7D	U+7DF4	# <cjk>
+3-4E7E	U+806F	# <cjk>
+3-4F21	U+84EE	# <cjk>
+3-4F22	U+9023	# <cjk>
+3-4F23	U+932C	# <cjk>
+3-4F24	U+5442	# <cjk>
+3-4F25	U+9B6F	# <cjk>
+3-4F26	U+6AD3	# <cjk>
+3-4F27	U+7089	# <cjk>
+3-4F28	U+8CC2	# <cjk>
+3-4F29	U+8DEF	# <cjk>
+3-4F2A	U+9732	# <cjk>
+3-4F2B	U+52B4	# <cjk>
+3-4F2C	U+5A41	# <cjk>
+3-4F2D	U+5ECA	# <cjk>
+3-4F2E	U+5F04	# <cjk>
+3-4F2F	U+6717	# <cjk>
+3-4F30	U+697C	# <cjk>
+3-4F31	U+6994	# <cjk>
+3-4F32	U+6D6A	# <cjk>
+3-4F33	U+6F0F	# <cjk>
+3-4F34	U+7262	# <cjk>
+3-4F35	U+72FC	# <cjk>
+3-4F36	U+7BED	# <cjk>
+3-4F37	U+8001	# <cjk>
+3-4F38	U+807E	# <cjk>
+3-4F39	U+874B	# <cjk>
+3-4F3A	U+90CE	# <cjk>
+3-4F3B	U+516D	# <cjk>
+3-4F3C	U+9E93	# <cjk>
+3-4F3D	U+7984	# <cjk>
+3-4F3E	U+808B	# <cjk>
+3-4F3F	U+9332	# <cjk>
+3-4F40	U+8AD6	# <cjk>
+3-4F41	U+502D	# <cjk>
+3-4F42	U+548C	# <cjk>
+3-4F43	U+8A71	# <cjk>
+3-4F44	U+6B6A	# <cjk>
+3-4F45	U+8CC4	# <cjk>
+3-4F46	U+8107	# <cjk>
+3-4F47	U+60D1	# <cjk>
+3-4F48	U+67A0	# <cjk>
+3-4F49	U+9DF2	# <cjk>
+3-4F4A	U+4E99	# <cjk>
+3-4F4B	U+4E98	# <cjk>
+3-4F4C	U+9C10	# <cjk>
+3-4F4D	U+8A6B	# <cjk>
+3-4F4E	U+85C1	# <cjk>
+3-4F4F	U+8568	# <cjk>
+3-4F50	U+6900	# <cjk>
+3-4F51	U+6E7E	# <cjk>
+3-4F52	U+7897	# <cjk>
+3-4F53	U+8155	# <cjk>
+3-4F54	U+20B9F	# <cjk> [2004]
+3-4F55	U+5B41	# <cjk>	[2000]
+3-4F56	U+5B56	# <cjk>	[2000]
+3-4F57	U+5B7D	# <cjk>	[2000]
+3-4F58	U+5B93	# <cjk>	[2000]
+3-4F59	U+5BD8	# <cjk>	[2000]
+3-4F5A	U+5BEC	# <cjk>	[2000]
+3-4F5B	U+5C12	# <cjk>	[2000]
+3-4F5C	U+5C1E	# <cjk>	[2000]
+3-4F5D	U+5C23	# <cjk>	[2000]
+3-4F5E	U+5C2B	# <cjk>	[2000]
+3-4F5F	U+378D	# <cjk>	[2000]
+3-4F60	U+5C62	# <cjk>	[2000]
+3-4F61	U+FA3B	# CJK COMPATIBILITY IDEOGRAPH-FA3B	[2000]	[Unicode3.2]
+3-4F62	U+FA3C	# CJK COMPATIBILITY IDEOGRAPH-FA3C	[2000]	[Unicode3.2]
+3-4F63	U+216B4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F792
+3-4F64	U+5C7A	# <cjk>	[2000]
+3-4F65	U+5C8F	# <cjk>	[2000]
+3-4F66	U+5C9F	# <cjk>	[2000]
+3-4F67	U+5CA3	# <cjk>	[2000]
+3-4F68	U+5CAA	# <cjk>	[2000]
+3-4F69	U+5CBA	# <cjk>	[2000]
+3-4F6A	U+5CCB	# <cjk>	[2000]
+3-4F6B	U+5CD0	# <cjk>	[2000]
+3-4F6C	U+5CD2	# <cjk>	[2000]
+3-4F6D	U+5CF4	# <cjk>	[2000]
+3-4F6E	U+21E34	# <cjk>	[2000]	[Unicode3.1]	Private: U+F793
+3-4F6F	U+37E2	# <cjk>	[2000]
+3-4F70	U+5D0D	# <cjk>	[2000]
+3-4F71	U+5D27	# <cjk>	[2000]
+3-4F72	U+FA11	# CJK COMPATIBILITY IDEOGRAPH-FA11	[2000]
+3-4F73	U+5D46	# <cjk>	[2000]
+3-4F74	U+5D47	# <cjk>	[2000]
+3-4F75	U+5D53	# <cjk>	[2000]
+3-4F76	U+5D4A	# <cjk>	[2000]
+3-4F77	U+5D6D	# <cjk>	[2000]
+3-4F78	U+5D81	# <cjk>	[2000]
+3-4F79	U+5DA0	# <cjk>	[2000]
+3-4F7A	U+5DA4	# <cjk>	[2000]
+3-4F7B	U+5DA7	# <cjk>	[2000]
+3-4F7C	U+5DB8	# <cjk>	[2000]
+3-4F7D	U+5DCB	# <cjk>	[2000]
+3-4F7E	U+541E	# <cjk> [2004]
+3-5021	U+5F0C	# <cjk>
+3-5022	U+4E10	# <cjk>
+3-5023	U+4E15	# <cjk>
+3-5024	U+4E2A	# <cjk>
+3-5025	U+4E31	# <cjk>
+3-5026	U+4E36	# <cjk>
+3-5027	U+4E3C	# <cjk>
+3-5028	U+4E3F	# <cjk>
+3-5029	U+4E42	# <cjk>
+3-502A	U+4E56	# <cjk>
+3-502B	U+4E58	# <cjk>
+3-502C	U+4E82	# <cjk>
+3-502D	U+4E85	# <cjk>
+3-502E	U+8C6B	# <cjk>
+3-502F	U+4E8A	# <cjk>
+3-5030	U+8212	# <cjk>
+3-5031	U+5F0D	# <cjk>
+3-5032	U+4E8E	# <cjk>
+3-5033	U+4E9E	# <cjk>
+3-5034	U+4E9F	# <cjk>
+3-5035	U+4EA0	# <cjk>
+3-5036	U+4EA2	# <cjk>
+3-5037	U+4EB0	# <cjk>
+3-5038	U+4EB3	# <cjk>
+3-5039	U+4EB6	# <cjk>
+3-503A	U+4ECE	# <cjk>
+3-503B	U+4ECD	# <cjk>
+3-503C	U+4EC4	# <cjk>
+3-503D	U+4EC6	# <cjk>
+3-503E	U+4EC2	# <cjk>
+3-503F	U+4ED7	# <cjk>
+3-5040	U+4EDE	# <cjk>
+3-5041	U+4EED	# <cjk>
+3-5042	U+4EDF	# <cjk>
+3-5043	U+4EF7	# <cjk>
+3-5044	U+4F09	# <cjk>
+3-5045	U+4F5A	# <cjk>
+3-5046	U+4F30	# <cjk>
+3-5047	U+4F5B	# <cjk>
+3-5048	U+4F5D	# <cjk>
+3-5049	U+4F57	# <cjk>
+3-504A	U+4F47	# <cjk>
+3-504B	U+4F76	# <cjk>
+3-504C	U+4F88	# <cjk>
+3-504D	U+4F8F	# <cjk>
+3-504E	U+4F98	# <cjk>
+3-504F	U+4F7B	# <cjk>
+3-5050	U+4F69	# <cjk>
+3-5051	U+4F70	# <cjk>
+3-5052	U+4F91	# <cjk>
+3-5053	U+4F6F	# <cjk>
+3-5054	U+4F86	# <cjk>
+3-5055	U+4F96	# <cjk>
+3-5056	U+5118	# <cjk>
+3-5057	U+4FD4	# <cjk>
+3-5058	U+4FDF	# <cjk>
+3-5059	U+4FCE	# <cjk>
+3-505A	U+4FD8	# <cjk>
+3-505B	U+4FDB	# <cjk>
+3-505C	U+4FD1	# <cjk>
+3-505D	U+4FDA	# <cjk>
+3-505E	U+4FD0	# <cjk>
+3-505F	U+4FE4	# <cjk>
+3-5060	U+4FE5	# <cjk>
+3-5061	U+501A	# <cjk>
+3-5062	U+5028	# <cjk>
+3-5063	U+5014	# <cjk>
+3-5064	U+502A	# <cjk>
+3-5065	U+5025	# <cjk>
+3-5066	U+5005	# <cjk>
+3-5067	U+4F1C	# <cjk>
+3-5068	U+4FF6	# <cjk>
+3-5069	U+5021	# <cjk>
+3-506A	U+5029	# <cjk>
+3-506B	U+502C	# <cjk>
+3-506C	U+4FFE	# <cjk>
+3-506D	U+4FEF	# <cjk>
+3-506E	U+5011	# <cjk>
+3-506F	U+5006	# <cjk>
+3-5070	U+5043	# <cjk>
+3-5071	U+5047	# <cjk>
+3-5072	U+6703	# <cjk>
+3-5073	U+5055	# <cjk>
+3-5074	U+5050	# <cjk>
+3-5075	U+5048	# <cjk>
+3-5076	U+505A	# <cjk>
+3-5077	U+5056	# <cjk>
+3-5078	U+506C	# <cjk>
+3-5079	U+5078	# <cjk>
+3-507A	U+5080	# <cjk>
+3-507B	U+509A	# <cjk>
+3-507C	U+5085	# <cjk>
+3-507D	U+50B4	# <cjk>
+3-507E	U+50B2	# <cjk>
+3-5121	U+50C9	# <cjk>
+3-5122	U+50CA	# <cjk>
+3-5123	U+50B3	# <cjk>
+3-5124	U+50C2	# <cjk>
+3-5125	U+50D6	# <cjk>
+3-5126	U+50DE	# <cjk>
+3-5127	U+50E5	# <cjk>
+3-5128	U+50ED	# <cjk>
+3-5129	U+50E3	# <cjk>
+3-512A	U+50EE	# <cjk>
+3-512B	U+50F9	# <cjk>
+3-512C	U+50F5	# <cjk>
+3-512D	U+5109	# <cjk>
+3-512E	U+5101	# <cjk>
+3-512F	U+5102	# <cjk>
+3-5130	U+5116	# <cjk>
+3-5131	U+5115	# <cjk>
+3-5132	U+5114	# <cjk>
+3-5133	U+511A	# <cjk>
+3-5134	U+5121	# <cjk>
+3-5135	U+513A	# <cjk>
+3-5136	U+5137	# <cjk>
+3-5137	U+513C	# <cjk>
+3-5138	U+513B	# <cjk>
+3-5139	U+513F	# <cjk>
+3-513A	U+5140	# <cjk>
+3-513B	U+5152	# <cjk>
+3-513C	U+514C	# <cjk>
+3-513D	U+5154	# <cjk>
+3-513E	U+5162	# <cjk>
+3-513F	U+7AF8	# <cjk>
+3-5140	U+5169	# <cjk>
+3-5141	U+516A	# <cjk>
+3-5142	U+516E	# <cjk>
+3-5143	U+5180	# <cjk>
+3-5144	U+5182	# <cjk>
+3-5145	U+56D8	# <cjk>
+3-5146	U+518C	# <cjk>
+3-5147	U+5189	# <cjk>
+3-5148	U+518F	# <cjk>
+3-5149	U+5191	# <cjk>
+3-514A	U+5193	# <cjk>
+3-514B	U+5195	# <cjk>
+3-514C	U+5196	# <cjk>
+3-514D	U+51A4	# <cjk>
+3-514E	U+51A6	# <cjk>
+3-514F	U+51A2	# <cjk>
+3-5150	U+51A9	# <cjk>
+3-5151	U+51AA	# <cjk>
+3-5152	U+51AB	# <cjk>
+3-5153	U+51B3	# <cjk>
+3-5154	U+51B1	# <cjk>
+3-5155	U+51B2	# <cjk>
+3-5156	U+51B0	# <cjk>
+3-5157	U+51B5	# <cjk>
+3-5158	U+51BD	# <cjk>
+3-5159	U+51C5	# <cjk>
+3-515A	U+51C9	# <cjk>
+3-515B	U+51DB	# <cjk>
+3-515C	U+51E0	# <cjk>
+3-515D	U+8655	# <cjk>
+3-515E	U+51E9	# <cjk>
+3-515F	U+51ED	# <cjk>
+3-5160	U+51F0	# <cjk>
+3-5161	U+51F5	# <cjk>
+3-5162	U+51FE	# <cjk>
+3-5163	U+5204	# <cjk>
+3-5164	U+520B	# <cjk>
+3-5165	U+5214	# <cjk>
+3-5166	U+520E	# <cjk>
+3-5167	U+5227	# <cjk>
+3-5168	U+522A	# <cjk>
+3-5169	U+522E	# <cjk>
+3-516A	U+5233	# <cjk>
+3-516B	U+5239	# <cjk>
+3-516C	U+524F	# <cjk>
+3-516D	U+5244	# <cjk>
+3-516E	U+524B	# <cjk>
+3-516F	U+524C	# <cjk>
+3-5170	U+525E	# <cjk>
+3-5171	U+5254	# <cjk>
+3-5172	U+526A	# <cjk>
+3-5173	U+5274	# <cjk>
+3-5174	U+5269	# <cjk>
+3-5175	U+5273	# <cjk>
+3-5176	U+527F	# <cjk>
+3-5177	U+527D	# <cjk>
+3-5178	U+528D	# <cjk>
+3-5179	U+5294	# <cjk>
+3-517A	U+5292	# <cjk>
+3-517B	U+5271	# <cjk>
+3-517C	U+5288	# <cjk>
+3-517D	U+5291	# <cjk>
+3-517E	U+8FA8	# <cjk>
+3-5221	U+8FA7	# <cjk>
+3-5222	U+52AC	# <cjk>
+3-5223	U+52AD	# <cjk>
+3-5224	U+52BC	# <cjk>
+3-5225	U+52B5	# <cjk>
+3-5226	U+52C1	# <cjk>
+3-5227	U+52CD	# <cjk>
+3-5228	U+52D7	# <cjk>
+3-5229	U+52DE	# <cjk>
+3-522A	U+52E3	# <cjk>
+3-522B	U+52E6	# <cjk>
+3-522C	U+98ED	# <cjk>
+3-522D	U+52E0	# <cjk>
+3-522E	U+52F3	# <cjk>
+3-522F	U+52F5	# <cjk>
+3-5230	U+52F8	# <cjk>
+3-5231	U+52F9	# <cjk>
+3-5232	U+5306	# <cjk>
+3-5233	U+5308	# <cjk>
+3-5234	U+7538	# <cjk>
+3-5235	U+530D	# <cjk>
+3-5236	U+5310	# <cjk>
+3-5237	U+530F	# <cjk>
+3-5238	U+5315	# <cjk>
+3-5239	U+531A	# <cjk>
+3-523A	U+5323	# <cjk>
+3-523B	U+532F	# <cjk>
+3-523C	U+5331	# <cjk>
+3-523D	U+5333	# <cjk>
+3-523E	U+5338	# <cjk>
+3-523F	U+5340	# <cjk>
+3-5240	U+5346	# <cjk>
+3-5241	U+5345	# <cjk>
+3-5242	U+4E17	# <cjk>
+3-5243	U+5349	# <cjk>
+3-5244	U+534D	# <cjk>
+3-5245	U+51D6	# <cjk>
+3-5246	U+535E	# <cjk>
+3-5247	U+5369	# <cjk>
+3-5248	U+536E	# <cjk>
+3-5249	U+5918	# <cjk>
+3-524A	U+537B	# <cjk>
+3-524B	U+5377	# <cjk>
+3-524C	U+5382	# <cjk>
+3-524D	U+5396	# <cjk>
+3-524E	U+53A0	# <cjk>
+3-524F	U+53A6	# <cjk>
+3-5250	U+53A5	# <cjk>
+3-5251	U+53AE	# <cjk>
+3-5252	U+53B0	# <cjk>
+3-5253	U+53B6	# <cjk>
+3-5254	U+53C3	# <cjk>
+3-5255	U+7C12	# <cjk>
+3-5256	U+96D9	# <cjk>
+3-5257	U+53DF	# <cjk>
+3-5258	U+66FC	# <cjk>
+3-5259	U+71EE	# <cjk>
+3-525A	U+53EE	# <cjk>
+3-525B	U+53E8	# <cjk>
+3-525C	U+53ED	# <cjk>
+3-525D	U+53FA	# <cjk>
+3-525E	U+5401	# <cjk>
+3-525F	U+543D	# <cjk>
+3-5260	U+5440	# <cjk>
+3-5261	U+542C	# <cjk>
+3-5262	U+542D	# <cjk>
+3-5263	U+543C	# <cjk>
+3-5264	U+542E	# <cjk>
+3-5265	U+5436	# <cjk>
+3-5266	U+5429	# <cjk>
+3-5267	U+541D	# <cjk>
+3-5268	U+544E	# <cjk>
+3-5269	U+548F	# <cjk>
+3-526A	U+5475	# <cjk>
+3-526B	U+548E	# <cjk>
+3-526C	U+545F	# <cjk>
+3-526D	U+5471	# <cjk>
+3-526E	U+5477	# <cjk>
+3-526F	U+5470	# <cjk>
+3-5270	U+5492	# <cjk>
+3-5271	U+547B	# <cjk>
+3-5272	U+5480	# <cjk>
+3-5273	U+5476	# <cjk>
+3-5274	U+5484	# <cjk>
+3-5275	U+5490	# <cjk>
+3-5276	U+5486	# <cjk>
+3-5277	U+54C7	# <cjk>
+3-5278	U+54A2	# <cjk>
+3-5279	U+54B8	# <cjk>
+3-527A	U+54A5	# <cjk>
+3-527B	U+54AC	# <cjk>
+3-527C	U+54C4	# <cjk>
+3-527D	U+54C8	# <cjk>
+3-527E	U+54A8	# <cjk>
+3-5321	U+54AB	# <cjk>
+3-5322	U+54C2	# <cjk>
+3-5323	U+54A4	# <cjk>
+3-5324	U+54BE	# <cjk>
+3-5325	U+54BC	# <cjk>
+3-5326	U+54D8	# <cjk>
+3-5327	U+54E5	# <cjk>
+3-5328	U+54E6	# <cjk>
+3-5329	U+550F	# <cjk>
+3-532A	U+5514	# <cjk>
+3-532B	U+54FD	# <cjk>
+3-532C	U+54EE	# <cjk>
+3-532D	U+54ED	# <cjk>
+3-532E	U+54FA	# <cjk>
+3-532F	U+54E2	# <cjk>
+3-5330	U+5539	# <cjk>
+3-5331	U+5540	# <cjk>
+3-5332	U+5563	# <cjk>
+3-5333	U+554C	# <cjk>
+3-5334	U+552E	# <cjk>
+3-5335	U+555C	# <cjk>
+3-5336	U+5545	# <cjk>
+3-5337	U+5556	# <cjk>
+3-5338	U+5557	# <cjk>
+3-5339	U+5538	# <cjk>
+3-533A	U+5533	# <cjk>
+3-533B	U+555D	# <cjk>
+3-533C	U+5599	# <cjk>
+3-533D	U+5580	# <cjk>
+3-533E	U+54AF	# <cjk>
+3-533F	U+558A	# <cjk>
+3-5340	U+559F	# <cjk>
+3-5341	U+557B	# <cjk>
+3-5342	U+557E	# <cjk>
+3-5343	U+5598	# <cjk>
+3-5344	U+559E	# <cjk>
+3-5345	U+55AE	# <cjk>
+3-5346	U+557C	# <cjk>
+3-5347	U+5583	# <cjk>
+3-5348	U+55A9	# <cjk>
+3-5349	U+5587	# <cjk>
+3-534A	U+55A8	# <cjk>
+3-534B	U+55DA	# <cjk>
+3-534C	U+55C5	# <cjk>
+3-534D	U+55DF	# <cjk>
+3-534E	U+55C4	# <cjk>
+3-534F	U+55DC	# <cjk>
+3-5350	U+55E4	# <cjk>
+3-5351	U+55D4	# <cjk>
+3-5352	U+5614	# <cjk>
+3-5353	U+55F7	# <cjk>
+3-5354	U+5616	# <cjk>
+3-5355	U+55FE	# <cjk>
+3-5356	U+55FD	# <cjk>
+3-5357	U+561B	# <cjk>
+3-5358	U+55F9	# <cjk>
+3-5359	U+564E	# <cjk>
+3-535A	U+5650	# <cjk>
+3-535B	U+71DF	# <cjk>
+3-535C	U+5634	# <cjk>
+3-535D	U+5636	# <cjk>
+3-535E	U+5632	# <cjk>
+3-535F	U+5638	# <cjk>
+3-5360	U+566B	# <cjk>
+3-5361	U+5664	# <cjk>
+3-5362	U+562F	# <cjk>
+3-5363	U+566C	# <cjk>
+3-5364	U+566A	# <cjk>
+3-5365	U+5686	# <cjk>
+3-5366	U+5680	# <cjk>
+3-5367	U+568A	# <cjk>
+3-5368	U+56A0	# <cjk>
+3-5369	U+5694	# <cjk>
+3-536A	U+568F	# <cjk>
+3-536B	U+56A5	# <cjk>
+3-536C	U+56AE	# <cjk>
+3-536D	U+56B6	# <cjk>
+3-536E	U+56B4	# <cjk>
+3-536F	U+56C2	# <cjk>
+3-5370	U+56BC	# <cjk>
+3-5371	U+56C1	# <cjk>
+3-5372	U+56C3	# <cjk>
+3-5373	U+56C0	# <cjk>
+3-5374	U+56C8	# <cjk>
+3-5375	U+56CE	# <cjk>
+3-5376	U+56D1	# <cjk>
+3-5377	U+56D3	# <cjk>
+3-5378	U+56D7	# <cjk>
+3-5379	U+56EE	# <cjk>
+3-537A	U+56F9	# <cjk>
+3-537B	U+5700	# <cjk>
+3-537C	U+56FF	# <cjk>
+3-537D	U+5704	# <cjk>
+3-537E	U+5709	# <cjk>
+3-5421	U+5708	# <cjk>
+3-5422	U+570B	# <cjk>
+3-5423	U+570D	# <cjk>
+3-5424	U+5713	# <cjk>
+3-5425	U+5718	# <cjk>
+3-5426	U+5716	# <cjk>
+3-5427	U+55C7	# <cjk>
+3-5428	U+571C	# <cjk>
+3-5429	U+5726	# <cjk>
+3-542A	U+5737	# <cjk>
+3-542B	U+5738	# <cjk>
+3-542C	U+574E	# <cjk>
+3-542D	U+573B	# <cjk>
+3-542E	U+5740	# <cjk>
+3-542F	U+574F	# <cjk>
+3-5430	U+5769	# <cjk>
+3-5431	U+57C0	# <cjk>
+3-5432	U+5788	# <cjk>
+3-5433	U+5761	# <cjk>
+3-5434	U+577F	# <cjk>
+3-5435	U+5789	# <cjk>
+3-5436	U+5793	# <cjk>
+3-5437	U+57A0	# <cjk>
+3-5438	U+57B3	# <cjk>
+3-5439	U+57A4	# <cjk>
+3-543A	U+57AA	# <cjk>
+3-543B	U+57B0	# <cjk>
+3-543C	U+57C3	# <cjk>
+3-543D	U+57C6	# <cjk>
+3-543E	U+57D4	# <cjk>
+3-543F	U+57D2	# <cjk>
+3-5440	U+57D3	# <cjk>
+3-5441	U+580A	# <cjk>
+3-5442	U+57D6	# <cjk>
+3-5443	U+57E3	# <cjk>
+3-5444	U+580B	# <cjk>
+3-5445	U+5819	# <cjk>
+3-5446	U+581D	# <cjk>
+3-5447	U+5872	# <cjk>
+3-5448	U+5821	# <cjk>
+3-5449	U+5862	# <cjk>
+3-544A	U+584B	# <cjk>
+3-544B	U+5870	# <cjk>
+3-544C	U+6BC0	# <cjk>
+3-544D	U+5852	# <cjk>
+3-544E	U+583D	# <cjk>
+3-544F	U+5879	# <cjk>
+3-5450	U+5885	# <cjk>
+3-5451	U+58B9	# <cjk>
+3-5452	U+589F	# <cjk>
+3-5453	U+58AB	# <cjk>
+3-5454	U+58BA	# <cjk>
+3-5455	U+58DE	# <cjk>
+3-5456	U+58BB	# <cjk>
+3-5457	U+58B8	# <cjk>
+3-5458	U+58AE	# <cjk>
+3-5459	U+58C5	# <cjk>
+3-545A	U+58D3	# <cjk>
+3-545B	U+58D1	# <cjk>
+3-545C	U+58D7	# <cjk>
+3-545D	U+58D9	# <cjk>
+3-545E	U+58D8	# <cjk>
+3-545F	U+58E5	# <cjk>
+3-5460	U+58DC	# <cjk>
+3-5461	U+58E4	# <cjk>
+3-5462	U+58DF	# <cjk>
+3-5463	U+58EF	# <cjk>
+3-5464	U+58FA	# <cjk>
+3-5465	U+58F9	# <cjk>
+3-5466	U+58FB	# <cjk>
+3-5467	U+58FC	# <cjk>
+3-5468	U+58FD	# <cjk>
+3-5469	U+5902	# <cjk>
+3-546A	U+590A	# <cjk>
+3-546B	U+5910	# <cjk>
+3-546C	U+591B	# <cjk>
+3-546D	U+68A6	# <cjk>
+3-546E	U+5925	# <cjk>
+3-546F	U+592C	# <cjk>
+3-5470	U+592D	# <cjk>
+3-5471	U+5932	# <cjk>
+3-5472	U+5938	# <cjk>
+3-5473	U+593E	# <cjk>
+3-5474	U+7AD2	# <cjk>
+3-5475	U+5955	# <cjk>
+3-5476	U+5950	# <cjk>
+3-5477	U+594E	# <cjk>
+3-5478	U+595A	# <cjk>
+3-5479	U+5958	# <cjk>
+3-547A	U+5962	# <cjk>
+3-547B	U+5960	# <cjk>
+3-547C	U+5967	# <cjk>
+3-547D	U+596C	# <cjk>
+3-547E	U+5969	# <cjk>
+3-5521	U+5978	# <cjk>
+3-5522	U+5981	# <cjk>
+3-5523	U+599D	# <cjk>
+3-5524	U+4F5E	# <cjk>
+3-5525	U+4FAB	# <cjk>
+3-5526	U+59A3	# <cjk>
+3-5527	U+59B2	# <cjk>
+3-5528	U+59C6	# <cjk>
+3-5529	U+59E8	# <cjk>
+3-552A	U+59DC	# <cjk>
+3-552B	U+598D	# <cjk>
+3-552C	U+59D9	# <cjk>
+3-552D	U+59DA	# <cjk>
+3-552E	U+5A25	# <cjk>
+3-552F	U+5A1F	# <cjk>
+3-5530	U+5A11	# <cjk>
+3-5531	U+5A1C	# <cjk>
+3-5532	U+5A09	# <cjk>
+3-5533	U+5A1A	# <cjk>
+3-5534	U+5A40	# <cjk>
+3-5535	U+5A6C	# <cjk>
+3-5536	U+5A49	# <cjk>
+3-5537	U+5A35	# <cjk>
+3-5538	U+5A36	# <cjk>
+3-5539	U+5A62	# <cjk>
+3-553A	U+5A6A	# <cjk>
+3-553B	U+5A9A	# <cjk>
+3-553C	U+5ABC	# <cjk>
+3-553D	U+5ABE	# <cjk>
+3-553E	U+5ACB	# <cjk>
+3-553F	U+5AC2	# <cjk>
+3-5540	U+5ABD	# <cjk>
+3-5541	U+5AE3	# <cjk>
+3-5542	U+5AD7	# <cjk>
+3-5543	U+5AE6	# <cjk>
+3-5544	U+5AE9	# <cjk>
+3-5545	U+5AD6	# <cjk>
+3-5546	U+5AFA	# <cjk>
+3-5547	U+5AFB	# <cjk>
+3-5548	U+5B0C	# <cjk>
+3-5549	U+5B0B	# <cjk>
+3-554A	U+5B16	# <cjk>
+3-554B	U+5B32	# <cjk>
+3-554C	U+5AD0	# <cjk>
+3-554D	U+5B2A	# <cjk>
+3-554E	U+5B36	# <cjk>
+3-554F	U+5B3E	# <cjk>
+3-5550	U+5B43	# <cjk>
+3-5551	U+5B45	# <cjk>
+3-5552	U+5B40	# <cjk>
+3-5553	U+5B51	# <cjk>
+3-5554	U+5B55	# <cjk>
+3-5555	U+5B5A	# <cjk>
+3-5556	U+5B5B	# <cjk>
+3-5557	U+5B65	# <cjk>
+3-5558	U+5B69	# <cjk>
+3-5559	U+5B70	# <cjk>
+3-555A	U+5B73	# <cjk>
+3-555B	U+5B75	# <cjk>
+3-555C	U+5B78	# <cjk>
+3-555D	U+6588	# <cjk>
+3-555E	U+5B7A	# <cjk>
+3-555F	U+5B80	# <cjk>
+3-5560	U+5B83	# <cjk>
+3-5561	U+5BA6	# <cjk>
+3-5562	U+5BB8	# <cjk>
+3-5563	U+5BC3	# <cjk>
+3-5564	U+5BC7	# <cjk>
+3-5565	U+5BC9	# <cjk>
+3-5566	U+5BD4	# <cjk>
+3-5567	U+5BD0	# <cjk>
+3-5568	U+5BE4	# <cjk>
+3-5569	U+5BE6	# <cjk>
+3-556A	U+5BE2	# <cjk>
+3-556B	U+5BDE	# <cjk>
+3-556C	U+5BE5	# <cjk>
+3-556D	U+5BEB	# <cjk>
+3-556E	U+5BF0	# <cjk>
+3-556F	U+5BF6	# <cjk>
+3-5570	U+5BF3	# <cjk>
+3-5571	U+5C05	# <cjk>
+3-5572	U+5C07	# <cjk>
+3-5573	U+5C08	# <cjk>
+3-5574	U+5C0D	# <cjk>
+3-5575	U+5C13	# <cjk>
+3-5576	U+5C20	# <cjk>
+3-5577	U+5C22	# <cjk>
+3-5578	U+5C28	# <cjk>
+3-5579	U+5C38	# <cjk>
+3-557A	U+5C39	# <cjk>
+3-557B	U+5C41	# <cjk>
+3-557C	U+5C46	# <cjk>
+3-557D	U+5C4E	# <cjk>
+3-557E	U+5C53	# <cjk>
+3-5621	U+5C50	# <cjk>
+3-5622	U+5C4F	# <cjk>
+3-5623	U+5B71	# <cjk>
+3-5624	U+5C6C	# <cjk>
+3-5625	U+5C6E	# <cjk>
+3-5626	U+4E62	# <cjk>
+3-5627	U+5C76	# <cjk>
+3-5628	U+5C79	# <cjk>
+3-5629	U+5C8C	# <cjk>
+3-562A	U+5C91	# <cjk>
+3-562B	U+5C94	# <cjk>
+3-562C	U+599B	# <cjk>
+3-562D	U+5CAB	# <cjk>
+3-562E	U+5CBB	# <cjk>
+3-562F	U+5CB6	# <cjk>
+3-5630	U+5CBC	# <cjk>
+3-5631	U+5CB7	# <cjk>
+3-5632	U+5CC5	# <cjk>
+3-5633	U+5CBE	# <cjk>
+3-5634	U+5CC7	# <cjk>
+3-5635	U+5CD9	# <cjk>
+3-5636	U+5CE9	# <cjk>
+3-5637	U+5CFD	# <cjk>
+3-5638	U+5CFA	# <cjk>
+3-5639	U+5CED	# <cjk>
+3-563A	U+5D8C	# <cjk>
+3-563B	U+5CEA	# <cjk>
+3-563C	U+5D0B	# <cjk>
+3-563D	U+5D15	# <cjk>
+3-563E	U+5D17	# <cjk>
+3-563F	U+5D5C	# <cjk>
+3-5640	U+5D1F	# <cjk>
+3-5641	U+5D1B	# <cjk>
+3-5642	U+5D11	# <cjk>
+3-5643	U+5D14	# <cjk>
+3-5644	U+5D22	# <cjk>
+3-5645	U+5D1A	# <cjk>
+3-5646	U+5D19	# <cjk>
+3-5647	U+5D18	# <cjk>
+3-5648	U+5D4C	# <cjk>
+3-5649	U+5D52	# <cjk>
+3-564A	U+5D4E	# <cjk>
+3-564B	U+5D4B	# <cjk>
+3-564C	U+5D6C	# <cjk>
+3-564D	U+5D73	# <cjk>
+3-564E	U+5D76	# <cjk>
+3-564F	U+5D87	# <cjk>
+3-5650	U+5D84	# <cjk>
+3-5651	U+5D82	# <cjk>
+3-5652	U+5DA2	# <cjk>
+3-5653	U+5D9D	# <cjk>
+3-5654	U+5DAC	# <cjk>
+3-5655	U+5DAE	# <cjk>
+3-5656	U+5DBD	# <cjk>
+3-5657	U+5D90	# <cjk>
+3-5658	U+5DB7	# <cjk>
+3-5659	U+5DBC	# <cjk>
+3-565A	U+5DC9	# <cjk>
+3-565B	U+5DCD	# <cjk>
+3-565C	U+5DD3	# <cjk>
+3-565D	U+5DD2	# <cjk>
+3-565E	U+5DD6	# <cjk>
+3-565F	U+5DDB	# <cjk>
+3-5660	U+5DEB	# <cjk>
+3-5661	U+5DF2	# <cjk>
+3-5662	U+5DF5	# <cjk>
+3-5663	U+5E0B	# <cjk>
+3-5664	U+5E1A	# <cjk>
+3-5665	U+5E19	# <cjk>
+3-5666	U+5E11	# <cjk>
+3-5667	U+5E1B	# <cjk>
+3-5668	U+5E36	# <cjk>
+3-5669	U+5E37	# <cjk>
+3-566A	U+5E44	# <cjk>
+3-566B	U+5E43	# <cjk>
+3-566C	U+5E40	# <cjk>
+3-566D	U+5E4E	# <cjk>
+3-566E	U+5E57	# <cjk>
+3-566F	U+5E54	# <cjk>
+3-5670	U+5E5F	# <cjk>
+3-5671	U+5E62	# <cjk>
+3-5672	U+5E64	# <cjk>
+3-5673	U+5E47	# <cjk>
+3-5674	U+5E75	# <cjk>
+3-5675	U+5E76	# <cjk>
+3-5676	U+5E7A	# <cjk>
+3-5677	U+9EBC	# <cjk>
+3-5678	U+5E7F	# <cjk>
+3-5679	U+5EA0	# <cjk>
+3-567A	U+5EC1	# <cjk>
+3-567B	U+5EC2	# <cjk>
+3-567C	U+5EC8	# <cjk>
+3-567D	U+5ED0	# <cjk>
+3-567E	U+5ECF	# <cjk>
+3-5721	U+5ED6	# <cjk>
+3-5722	U+5EE3	# <cjk>
+3-5723	U+5EDD	# <cjk>
+3-5724	U+5EDA	# <cjk>
+3-5725	U+5EDB	# <cjk>
+3-5726	U+5EE2	# <cjk>
+3-5727	U+5EE1	# <cjk>
+3-5728	U+5EE8	# <cjk>
+3-5729	U+5EE9	# <cjk>
+3-572A	U+5EEC	# <cjk>
+3-572B	U+5EF1	# <cjk>
+3-572C	U+5EF3	# <cjk>
+3-572D	U+5EF0	# <cjk>
+3-572E	U+5EF4	# <cjk>
+3-572F	U+5EF8	# <cjk>
+3-5730	U+5EFE	# <cjk>
+3-5731	U+5F03	# <cjk>
+3-5732	U+5F09	# <cjk>
+3-5733	U+5F5D	# <cjk>
+3-5734	U+5F5C	# <cjk>
+3-5735	U+5F0B	# <cjk>
+3-5736	U+5F11	# <cjk>
+3-5737	U+5F16	# <cjk>
+3-5738	U+5F29	# <cjk>
+3-5739	U+5F2D	# <cjk>
+3-573A	U+5F38	# <cjk>
+3-573B	U+5F41	# <cjk>
+3-573C	U+5F48	# <cjk>
+3-573D	U+5F4C	# <cjk>
+3-573E	U+5F4E	# <cjk>
+3-573F	U+5F2F	# <cjk>
+3-5740	U+5F51	# <cjk>
+3-5741	U+5F56	# <cjk>
+3-5742	U+5F57	# <cjk>
+3-5743	U+5F59	# <cjk>
+3-5744	U+5F61	# <cjk>
+3-5745	U+5F6D	# <cjk>
+3-5746	U+5F73	# <cjk>
+3-5747	U+5F77	# <cjk>
+3-5748	U+5F83	# <cjk>
+3-5749	U+5F82	# <cjk>
+3-574A	U+5F7F	# <cjk>
+3-574B	U+5F8A	# <cjk>
+3-574C	U+5F88	# <cjk>
+3-574D	U+5F91	# <cjk>
+3-574E	U+5F87	# <cjk>
+3-574F	U+5F9E	# <cjk>
+3-5750	U+5F99	# <cjk>
+3-5751	U+5F98	# <cjk>
+3-5752	U+5FA0	# <cjk>
+3-5753	U+5FA8	# <cjk>
+3-5754	U+5FAD	# <cjk>
+3-5755	U+5FBC	# <cjk>
+3-5756	U+5FD6	# <cjk>
+3-5757	U+5FFB	# <cjk>
+3-5758	U+5FE4	# <cjk>
+3-5759	U+5FF8	# <cjk>
+3-575A	U+5FF1	# <cjk>
+3-575B	U+5FDD	# <cjk>
+3-575C	U+60B3	# <cjk>
+3-575D	U+5FFF	# <cjk>
+3-575E	U+6021	# <cjk>
+3-575F	U+6060	# <cjk>
+3-5760	U+6019	# <cjk>
+3-5761	U+6010	# <cjk>
+3-5762	U+6029	# <cjk>
+3-5763	U+600E	# <cjk>
+3-5764	U+6031	# <cjk>
+3-5765	U+601B	# <cjk>
+3-5766	U+6015	# <cjk>
+3-5767	U+602B	# <cjk>
+3-5768	U+6026	# <cjk>
+3-5769	U+600F	# <cjk>
+3-576A	U+603A	# <cjk>
+3-576B	U+605A	# <cjk>
+3-576C	U+6041	# <cjk>
+3-576D	U+606A	# <cjk>
+3-576E	U+6077	# <cjk>
+3-576F	U+605F	# <cjk>
+3-5770	U+604A	# <cjk>
+3-5771	U+6046	# <cjk>
+3-5772	U+604D	# <cjk>
+3-5773	U+6063	# <cjk>
+3-5774	U+6043	# <cjk>
+3-5775	U+6064	# <cjk>
+3-5776	U+6042	# <cjk>
+3-5777	U+606C	# <cjk>
+3-5778	U+606B	# <cjk>
+3-5779	U+6059	# <cjk>
+3-577A	U+6081	# <cjk>
+3-577B	U+608D	# <cjk>
+3-577C	U+60E7	# <cjk>
+3-577D	U+6083	# <cjk>
+3-577E	U+609A	# <cjk>
+3-5821	U+6084	# <cjk>
+3-5822	U+609B	# <cjk>
+3-5823	U+6096	# <cjk>
+3-5824	U+6097	# <cjk>
+3-5825	U+6092	# <cjk>
+3-5826	U+60A7	# <cjk>
+3-5827	U+608B	# <cjk>
+3-5828	U+60E1	# <cjk>
+3-5829	U+60B8	# <cjk>
+3-582A	U+60E0	# <cjk>
+3-582B	U+60D3	# <cjk>
+3-582C	U+60B4	# <cjk>
+3-582D	U+5FF0	# <cjk>
+3-582E	U+60BD	# <cjk>
+3-582F	U+60C6	# <cjk>
+3-5830	U+60B5	# <cjk>
+3-5831	U+60D8	# <cjk>
+3-5832	U+614D	# <cjk>
+3-5833	U+6115	# <cjk>
+3-5834	U+6106	# <cjk>
+3-5835	U+60F6	# <cjk>
+3-5836	U+60F7	# <cjk>
+3-5837	U+6100	# <cjk>
+3-5838	U+60F4	# <cjk>
+3-5839	U+60FA	# <cjk>
+3-583A	U+6103	# <cjk>
+3-583B	U+6121	# <cjk>
+3-583C	U+60FB	# <cjk>
+3-583D	U+60F1	# <cjk>
+3-583E	U+610D	# <cjk>
+3-583F	U+610E	# <cjk>
+3-5840	U+6147	# <cjk>
+3-5841	U+613E	# <cjk>
+3-5842	U+6128	# <cjk>
+3-5843	U+6127	# <cjk>
+3-5844	U+614A	# <cjk>
+3-5845	U+613F	# <cjk>
+3-5846	U+613C	# <cjk>
+3-5847	U+612C	# <cjk>
+3-5848	U+6134	# <cjk>
+3-5849	U+613D	# <cjk>
+3-584A	U+6142	# <cjk>
+3-584B	U+6144	# <cjk>
+3-584C	U+6173	# <cjk>
+3-584D	U+6177	# <cjk>
+3-584E	U+6158	# <cjk>
+3-584F	U+6159	# <cjk>
+3-5850	U+615A	# <cjk>
+3-5851	U+616B	# <cjk>
+3-5852	U+6174	# <cjk>
+3-5853	U+616F	# <cjk>
+3-5854	U+6165	# <cjk>
+3-5855	U+6171	# <cjk>
+3-5856	U+615F	# <cjk>
+3-5857	U+615D	# <cjk>
+3-5858	U+6153	# <cjk>
+3-5859	U+6175	# <cjk>
+3-585A	U+6199	# <cjk>
+3-585B	U+6196	# <cjk>
+3-585C	U+6187	# <cjk>
+3-585D	U+61AC	# <cjk>
+3-585E	U+6194	# <cjk>
+3-585F	U+619A	# <cjk>
+3-5860	U+618A	# <cjk>
+3-5861	U+6191	# <cjk>
+3-5862	U+61AB	# <cjk>
+3-5863	U+61AE	# <cjk>
+3-5864	U+61CC	# <cjk>
+3-5865	U+61CA	# <cjk>
+3-5866	U+61C9	# <cjk>
+3-5867	U+61F7	# <cjk>
+3-5868	U+61C8	# <cjk>
+3-5869	U+61C3	# <cjk>
+3-586A	U+61C6	# <cjk>
+3-586B	U+61BA	# <cjk>
+3-586C	U+61CB	# <cjk>
+3-586D	U+7F79	# <cjk>
+3-586E	U+61CD	# <cjk>
+3-586F	U+61E6	# <cjk>
+3-5870	U+61E3	# <cjk>
+3-5871	U+61F6	# <cjk>
+3-5872	U+61FA	# <cjk>
+3-5873	U+61F4	# <cjk>
+3-5874	U+61FF	# <cjk>
+3-5875	U+61FD	# <cjk>
+3-5876	U+61FC	# <cjk>
+3-5877	U+61FE	# <cjk>
+3-5878	U+6200	# <cjk>
+3-5879	U+6208	# <cjk>
+3-587A	U+6209	# <cjk>
+3-587B	U+620D	# <cjk>
+3-587C	U+620C	# <cjk>
+3-587D	U+6214	# <cjk>
+3-587E	U+621B	# <cjk>
+3-5921	U+621E	# <cjk>
+3-5922	U+6221	# <cjk>
+3-5923	U+622A	# <cjk>
+3-5924	U+622E	# <cjk>
+3-5925	U+6230	# <cjk>
+3-5926	U+6232	# <cjk>
+3-5927	U+6233	# <cjk>
+3-5928	U+6241	# <cjk>
+3-5929	U+624E	# <cjk>
+3-592A	U+625E	# <cjk>
+3-592B	U+6263	# <cjk>
+3-592C	U+625B	# <cjk>
+3-592D	U+6260	# <cjk>
+3-592E	U+6268	# <cjk>
+3-592F	U+627C	# <cjk>
+3-5930	U+6282	# <cjk>
+3-5931	U+6289	# <cjk>
+3-5932	U+627E	# <cjk>
+3-5933	U+6292	# <cjk>
+3-5934	U+6293	# <cjk>
+3-5935	U+6296	# <cjk>
+3-5936	U+62D4	# <cjk>
+3-5937	U+6283	# <cjk>
+3-5938	U+6294	# <cjk>
+3-5939	U+62D7	# <cjk>
+3-593A	U+62D1	# <cjk>
+3-593B	U+62BB	# <cjk>
+3-593C	U+62CF	# <cjk>
+3-593D	U+62FF	# <cjk>
+3-593E	U+62C6	# <cjk>
+3-593F	U+64D4	# <cjk>
+3-5940	U+62C8	# <cjk>
+3-5941	U+62DC	# <cjk>
+3-5942	U+62CC	# <cjk>
+3-5943	U+62CA	# <cjk>
+3-5944	U+62C2	# <cjk>
+3-5945	U+62C7	# <cjk>
+3-5946	U+629B	# <cjk>
+3-5947	U+62C9	# <cjk>
+3-5948	U+630C	# <cjk>
+3-5949	U+62EE	# <cjk>
+3-594A	U+62F1	# <cjk>
+3-594B	U+6327	# <cjk>
+3-594C	U+6302	# <cjk>
+3-594D	U+6308	# <cjk>
+3-594E	U+62EF	# <cjk>
+3-594F	U+62F5	# <cjk>
+3-5950	U+6350	# <cjk>
+3-5951	U+633E	# <cjk>
+3-5952	U+634D	# <cjk>
+3-5953	U+641C	# <cjk>
+3-5954	U+634F	# <cjk>
+3-5955	U+6396	# <cjk>
+3-5956	U+638E	# <cjk>
+3-5957	U+6380	# <cjk>
+3-5958	U+63AB	# <cjk>
+3-5959	U+6376	# <cjk>
+3-595A	U+63A3	# <cjk>
+3-595B	U+638F	# <cjk>
+3-595C	U+6389	# <cjk>
+3-595D	U+639F	# <cjk>
+3-595E	U+63B5	# <cjk>
+3-595F	U+636B	# <cjk>
+3-5960	U+6369	# <cjk>
+3-5961	U+63BE	# <cjk>
+3-5962	U+63E9	# <cjk>
+3-5963	U+63C0	# <cjk>
+3-5964	U+63C6	# <cjk>
+3-5965	U+63E3	# <cjk>
+3-5966	U+63C9	# <cjk>
+3-5967	U+63D2	# <cjk>
+3-5968	U+63F6	# <cjk>
+3-5969	U+63C4	# <cjk>
+3-596A	U+6416	# <cjk>
+3-596B	U+6434	# <cjk>
+3-596C	U+6406	# <cjk>
+3-596D	U+6413	# <cjk>
+3-596E	U+6426	# <cjk>
+3-596F	U+6436	# <cjk>
+3-5970	U+651D	# <cjk>
+3-5971	U+6417	# <cjk>
+3-5972	U+6428	# <cjk>
+3-5973	U+640F	# <cjk>
+3-5974	U+6467	# <cjk>
+3-5975	U+646F	# <cjk>
+3-5976	U+6476	# <cjk>
+3-5977	U+644E	# <cjk>
+3-5978	U+652A	# <cjk>
+3-5979	U+6495	# <cjk>
+3-597A	U+6493	# <cjk>
+3-597B	U+64A5	# <cjk>
+3-597C	U+64A9	# <cjk>
+3-597D	U+6488	# <cjk>
+3-597E	U+64BC	# <cjk>
+3-5A21	U+64DA	# <cjk>
+3-5A22	U+64D2	# <cjk>
+3-5A23	U+64C5	# <cjk>
+3-5A24	U+64C7	# <cjk>
+3-5A25	U+64BB	# <cjk>
+3-5A26	U+64D8	# <cjk>
+3-5A27	U+64C2	# <cjk>
+3-5A28	U+64F1	# <cjk>
+3-5A29	U+64E7	# <cjk>
+3-5A2A	U+8209	# <cjk>
+3-5A2B	U+64E0	# <cjk>
+3-5A2C	U+64E1	# <cjk>
+3-5A2D	U+62AC	# <cjk>
+3-5A2E	U+64E3	# <cjk>
+3-5A2F	U+64EF	# <cjk>
+3-5A30	U+652C	# <cjk>
+3-5A31	U+64F6	# <cjk>
+3-5A32	U+64F4	# <cjk>
+3-5A33	U+64F2	# <cjk>
+3-5A34	U+64FA	# <cjk>
+3-5A35	U+6500	# <cjk>
+3-5A36	U+64FD	# <cjk>
+3-5A37	U+6518	# <cjk>
+3-5A38	U+651C	# <cjk>
+3-5A39	U+6505	# <cjk>
+3-5A3A	U+6524	# <cjk>
+3-5A3B	U+6523	# <cjk>
+3-5A3C	U+652B	# <cjk>
+3-5A3D	U+6534	# <cjk>
+3-5A3E	U+6535	# <cjk>
+3-5A3F	U+6537	# <cjk>
+3-5A40	U+6536	# <cjk>
+3-5A41	U+6538	# <cjk>
+3-5A42	U+754B	# <cjk>
+3-5A43	U+6548	# <cjk>
+3-5A44	U+6556	# <cjk>
+3-5A45	U+6555	# <cjk>
+3-5A46	U+654D	# <cjk>
+3-5A47	U+6558	# <cjk>
+3-5A48	U+655E	# <cjk>
+3-5A49	U+655D	# <cjk>
+3-5A4A	U+6572	# <cjk>
+3-5A4B	U+6578	# <cjk>
+3-5A4C	U+6582	# <cjk>
+3-5A4D	U+6583	# <cjk>
+3-5A4E	U+8B8A	# <cjk>
+3-5A4F	U+659B	# <cjk>
+3-5A50	U+659F	# <cjk>
+3-5A51	U+65AB	# <cjk>
+3-5A52	U+65B7	# <cjk>
+3-5A53	U+65C3	# <cjk>
+3-5A54	U+65C6	# <cjk>
+3-5A55	U+65C1	# <cjk>
+3-5A56	U+65C4	# <cjk>
+3-5A57	U+65CC	# <cjk>
+3-5A58	U+65D2	# <cjk>
+3-5A59	U+65DB	# <cjk>
+3-5A5A	U+65D9	# <cjk>
+3-5A5B	U+65E0	# <cjk>
+3-5A5C	U+65E1	# <cjk>
+3-5A5D	U+65F1	# <cjk>
+3-5A5E	U+6772	# <cjk>
+3-5A5F	U+660A	# <cjk>
+3-5A60	U+6603	# <cjk>
+3-5A61	U+65FB	# <cjk>
+3-5A62	U+6773	# <cjk>
+3-5A63	U+6635	# <cjk>
+3-5A64	U+6636	# <cjk>
+3-5A65	U+6634	# <cjk>
+3-5A66	U+661C	# <cjk>
+3-5A67	U+664F	# <cjk>
+3-5A68	U+6644	# <cjk>
+3-5A69	U+6649	# <cjk>
+3-5A6A	U+6641	# <cjk>
+3-5A6B	U+665E	# <cjk>
+3-5A6C	U+665D	# <cjk>
+3-5A6D	U+6664	# <cjk>
+3-5A6E	U+6667	# <cjk>
+3-5A6F	U+6668	# <cjk>
+3-5A70	U+665F	# <cjk>
+3-5A71	U+6662	# <cjk>
+3-5A72	U+6670	# <cjk>
+3-5A73	U+6683	# <cjk>
+3-5A74	U+6688	# <cjk>
+3-5A75	U+668E	# <cjk>
+3-5A76	U+6689	# <cjk>
+3-5A77	U+6684	# <cjk>
+3-5A78	U+6698	# <cjk>
+3-5A79	U+669D	# <cjk>
+3-5A7A	U+66C1	# <cjk>
+3-5A7B	U+66B9	# <cjk>
+3-5A7C	U+66C9	# <cjk>
+3-5A7D	U+66BE	# <cjk>
+3-5A7E	U+66BC	# <cjk>
+3-5B21	U+66C4	# <cjk>
+3-5B22	U+66B8	# <cjk>
+3-5B23	U+66D6	# <cjk>
+3-5B24	U+66DA	# <cjk>
+3-5B25	U+66E0	# <cjk>
+3-5B26	U+663F	# <cjk>
+3-5B27	U+66E6	# <cjk>
+3-5B28	U+66E9	# <cjk>
+3-5B29	U+66F0	# <cjk>
+3-5B2A	U+66F5	# <cjk>
+3-5B2B	U+66F7	# <cjk>
+3-5B2C	U+670F	# <cjk>
+3-5B2D	U+6716	# <cjk>
+3-5B2E	U+671E	# <cjk>
+3-5B2F	U+6726	# <cjk>
+3-5B30	U+6727	# <cjk>
+3-5B31	U+9738	# <cjk>
+3-5B32	U+672E	# <cjk>
+3-5B33	U+673F	# <cjk>
+3-5B34	U+6736	# <cjk>
+3-5B35	U+6741	# <cjk>
+3-5B36	U+6738	# <cjk>
+3-5B37	U+6737	# <cjk>
+3-5B38	U+6746	# <cjk>
+3-5B39	U+675E	# <cjk>
+3-5B3A	U+6760	# <cjk>
+3-5B3B	U+6759	# <cjk>
+3-5B3C	U+6763	# <cjk>
+3-5B3D	U+6764	# <cjk>
+3-5B3E	U+6789	# <cjk>
+3-5B3F	U+6770	# <cjk>
+3-5B40	U+67A9	# <cjk>
+3-5B41	U+677C	# <cjk>
+3-5B42	U+676A	# <cjk>
+3-5B43	U+678C	# <cjk>
+3-5B44	U+678B	# <cjk>
+3-5B45	U+67A6	# <cjk>
+3-5B46	U+67A1	# <cjk>
+3-5B47	U+6785	# <cjk>
+3-5B48	U+67B7	# <cjk>
+3-5B49	U+67EF	# <cjk>
+3-5B4A	U+67B4	# <cjk>
+3-5B4B	U+67EC	# <cjk>
+3-5B4C	U+67B3	# <cjk>
+3-5B4D	U+67E9	# <cjk>
+3-5B4E	U+67B8	# <cjk>
+3-5B4F	U+67E4	# <cjk>
+3-5B50	U+67DE	# <cjk>
+3-5B51	U+67DD	# <cjk>
+3-5B52	U+67E2	# <cjk>
+3-5B53	U+67EE	# <cjk>
+3-5B54	U+67B9	# <cjk>
+3-5B55	U+67CE	# <cjk>
+3-5B56	U+67C6	# <cjk>
+3-5B57	U+67E7	# <cjk>
+3-5B58	U+6A9C	# <cjk>
+3-5B59	U+681E	# <cjk>
+3-5B5A	U+6846	# <cjk>
+3-5B5B	U+6829	# <cjk>
+3-5B5C	U+6840	# <cjk>
+3-5B5D	U+684D	# <cjk>
+3-5B5E	U+6832	# <cjk>
+3-5B5F	U+684E	# <cjk>
+3-5B60	U+68B3	# <cjk>
+3-5B61	U+682B	# <cjk>
+3-5B62	U+6859	# <cjk>
+3-5B63	U+6863	# <cjk>
+3-5B64	U+6877	# <cjk>
+3-5B65	U+687F	# <cjk>
+3-5B66	U+689F	# <cjk>
+3-5B67	U+688F	# <cjk>
+3-5B68	U+68AD	# <cjk>
+3-5B69	U+6894	# <cjk>
+3-5B6A	U+689D	# <cjk>
+3-5B6B	U+689B	# <cjk>
+3-5B6C	U+6883	# <cjk>
+3-5B6D	U+6AAE	# <cjk>
+3-5B6E	U+68B9	# <cjk>
+3-5B6F	U+6874	# <cjk>
+3-5B70	U+68B5	# <cjk>
+3-5B71	U+68A0	# <cjk>
+3-5B72	U+68BA	# <cjk>
+3-5B73	U+690F	# <cjk>
+3-5B74	U+688D	# <cjk>
+3-5B75	U+687E	# <cjk>
+3-5B76	U+6901	# <cjk>
+3-5B77	U+68CA	# <cjk>
+3-5B78	U+6908	# <cjk>
+3-5B79	U+68D8	# <cjk>
+3-5B7A	U+6922	# <cjk>
+3-5B7B	U+6926	# <cjk>
+3-5B7C	U+68E1	# <cjk>
+3-5B7D	U+690C	# <cjk>
+3-5B7E	U+68CD	# <cjk>
+3-5C21	U+68D4	# <cjk>
+3-5C22	U+68E7	# <cjk>
+3-5C23	U+68D5	# <cjk>
+3-5C24	U+6936	# <cjk>
+3-5C25	U+6912	# <cjk>
+3-5C26	U+6904	# <cjk>
+3-5C27	U+68D7	# <cjk>
+3-5C28	U+68E3	# <cjk>
+3-5C29	U+6925	# <cjk>
+3-5C2A	U+68F9	# <cjk>
+3-5C2B	U+68E0	# <cjk>
+3-5C2C	U+68EF	# <cjk>
+3-5C2D	U+6928	# <cjk>
+3-5C2E	U+692A	# <cjk>
+3-5C2F	U+691A	# <cjk>
+3-5C30	U+6923	# <cjk>
+3-5C31	U+6921	# <cjk>
+3-5C32	U+68C6	# <cjk>
+3-5C33	U+6979	# <cjk>
+3-5C34	U+6977	# <cjk>
+3-5C35	U+695C	# <cjk>
+3-5C36	U+6978	# <cjk>
+3-5C37	U+696B	# <cjk>
+3-5C38	U+6954	# <cjk>
+3-5C39	U+697E	# <cjk>
+3-5C3A	U+696E	# <cjk>
+3-5C3B	U+6939	# <cjk>
+3-5C3C	U+6974	# <cjk>
+3-5C3D	U+693D	# <cjk>
+3-5C3E	U+6959	# <cjk>
+3-5C3F	U+6930	# <cjk>
+3-5C40	U+6961	# <cjk>
+3-5C41	U+695E	# <cjk>
+3-5C42	U+695D	# <cjk>
+3-5C43	U+6981	# <cjk>
+3-5C44	U+696A	# <cjk>
+3-5C45	U+69B2	# <cjk>
+3-5C46	U+69AE	# <cjk>
+3-5C47	U+69D0	# <cjk>
+3-5C48	U+69BF	# <cjk>
+3-5C49	U+69C1	# <cjk>
+3-5C4A	U+69D3	# <cjk>
+3-5C4B	U+69BE	# <cjk>
+3-5C4C	U+69CE	# <cjk>
+3-5C4D	U+5BE8	# <cjk>
+3-5C4E	U+69CA	# <cjk>
+3-5C4F	U+69DD	# <cjk>
+3-5C50	U+69BB	# <cjk>
+3-5C51	U+69C3	# <cjk>
+3-5C52	U+69A7	# <cjk>
+3-5C53	U+6A2E	# <cjk>
+3-5C54	U+6991	# <cjk>
+3-5C55	U+69A0	# <cjk>
+3-5C56	U+699C	# <cjk>
+3-5C57	U+6995	# <cjk>
+3-5C58	U+69B4	# <cjk>
+3-5C59	U+69DE	# <cjk>
+3-5C5A	U+69E8	# <cjk>
+3-5C5B	U+6A02	# <cjk>
+3-5C5C	U+6A1B	# <cjk>
+3-5C5D	U+69FF	# <cjk>
+3-5C5E	U+6B0A	# <cjk>
+3-5C5F	U+69F9	# <cjk>
+3-5C60	U+69F2	# <cjk>
+3-5C61	U+69E7	# <cjk>
+3-5C62	U+6A05	# <cjk>
+3-5C63	U+69B1	# <cjk>
+3-5C64	U+6A1E	# <cjk>
+3-5C65	U+69ED	# <cjk>
+3-5C66	U+6A14	# <cjk>
+3-5C67	U+69EB	# <cjk>
+3-5C68	U+6A0A	# <cjk>
+3-5C69	U+6A12	# <cjk>
+3-5C6A	U+6AC1	# <cjk>
+3-5C6B	U+6A23	# <cjk>
+3-5C6C	U+6A13	# <cjk>
+3-5C6D	U+6A44	# <cjk>
+3-5C6E	U+6A0C	# <cjk>
+3-5C6F	U+6A72	# <cjk>
+3-5C70	U+6A36	# <cjk>
+3-5C71	U+6A78	# <cjk>
+3-5C72	U+6A47	# <cjk>
+3-5C73	U+6A62	# <cjk>
+3-5C74	U+6A59	# <cjk>
+3-5C75	U+6A66	# <cjk>
+3-5C76	U+6A48	# <cjk>
+3-5C77	U+6A38	# <cjk>
+3-5C78	U+6A22	# <cjk>
+3-5C79	U+6A90	# <cjk>
+3-5C7A	U+6A8D	# <cjk>
+3-5C7B	U+6AA0	# <cjk>
+3-5C7C	U+6A84	# <cjk>
+3-5C7D	U+6AA2	# <cjk>
+3-5C7E	U+6AA3	# <cjk>
+3-5D21	U+6A97	# <cjk>
+3-5D22	U+8617	# <cjk>
+3-5D23	U+6ABB	# <cjk>
+3-5D24	U+6AC3	# <cjk>
+3-5D25	U+6AC2	# <cjk>
+3-5D26	U+6AB8	# <cjk>
+3-5D27	U+6AB3	# <cjk>
+3-5D28	U+6AAC	# <cjk>
+3-5D29	U+6ADE	# <cjk>
+3-5D2A	U+6AD1	# <cjk>
+3-5D2B	U+6ADF	# <cjk>
+3-5D2C	U+6AAA	# <cjk>
+3-5D2D	U+6ADA	# <cjk>
+3-5D2E	U+6AEA	# <cjk>
+3-5D2F	U+6AFB	# <cjk>
+3-5D30	U+6B05	# <cjk>
+3-5D31	U+8616	# <cjk>
+3-5D32	U+6AFA	# <cjk>
+3-5D33	U+6B12	# <cjk>
+3-5D34	U+6B16	# <cjk>
+3-5D35	U+9B31	# <cjk>
+3-5D36	U+6B1F	# <cjk>
+3-5D37	U+6B38	# <cjk>
+3-5D38	U+6B37	# <cjk>
+3-5D39	U+76DC	# <cjk>
+3-5D3A	U+6B39	# <cjk>
+3-5D3B	U+98EE	# <cjk>
+3-5D3C	U+6B47	# <cjk>
+3-5D3D	U+6B43	# <cjk>
+3-5D3E	U+6B49	# <cjk>
+3-5D3F	U+6B50	# <cjk>
+3-5D40	U+6B59	# <cjk>
+3-5D41	U+6B54	# <cjk>
+3-5D42	U+6B5B	# <cjk>
+3-5D43	U+6B5F	# <cjk>
+3-5D44	U+6B61	# <cjk>
+3-5D45	U+6B78	# <cjk>
+3-5D46	U+6B79	# <cjk>
+3-5D47	U+6B7F	# <cjk>
+3-5D48	U+6B80	# <cjk>
+3-5D49	U+6B84	# <cjk>
+3-5D4A	U+6B83	# <cjk>
+3-5D4B	U+6B8D	# <cjk>
+3-5D4C	U+6B98	# <cjk>
+3-5D4D	U+6B95	# <cjk>
+3-5D4E	U+6B9E	# <cjk>
+3-5D4F	U+6BA4	# <cjk>
+3-5D50	U+6BAA	# <cjk>
+3-5D51	U+6BAB	# <cjk>
+3-5D52	U+6BAF	# <cjk>
+3-5D53	U+6BB2	# <cjk>
+3-5D54	U+6BB1	# <cjk>
+3-5D55	U+6BB3	# <cjk>
+3-5D56	U+6BB7	# <cjk>
+3-5D57	U+6BBC	# <cjk>
+3-5D58	U+6BC6	# <cjk>
+3-5D59	U+6BCB	# <cjk>
+3-5D5A	U+6BD3	# <cjk>
+3-5D5B	U+6BDF	# <cjk>
+3-5D5C	U+6BEC	# <cjk>
+3-5D5D	U+6BEB	# <cjk>
+3-5D5E	U+6BF3	# <cjk>
+3-5D5F	U+6BEF	# <cjk>
+3-5D60	U+9EBE	# <cjk>
+3-5D61	U+6C08	# <cjk>
+3-5D62	U+6C13	# <cjk>
+3-5D63	U+6C14	# <cjk>
+3-5D64	U+6C1B	# <cjk>
+3-5D65	U+6C24	# <cjk>
+3-5D66	U+6C23	# <cjk>
+3-5D67	U+6C5E	# <cjk>
+3-5D68	U+6C55	# <cjk>
+3-5D69	U+6C62	# <cjk>
+3-5D6A	U+6C6A	# <cjk>
+3-5D6B	U+6C82	# <cjk>
+3-5D6C	U+6C8D	# <cjk>
+3-5D6D	U+6C9A	# <cjk>
+3-5D6E	U+6C81	# <cjk>
+3-5D6F	U+6C9B	# <cjk>
+3-5D70	U+6C7E	# <cjk>
+3-5D71	U+6C68	# <cjk>
+3-5D72	U+6C73	# <cjk>
+3-5D73	U+6C92	# <cjk>
+3-5D74	U+6C90	# <cjk>
+3-5D75	U+6CC4	# <cjk>
+3-5D76	U+6CF1	# <cjk>
+3-5D77	U+6CD3	# <cjk>
+3-5D78	U+6CBD	# <cjk>
+3-5D79	U+6CD7	# <cjk>
+3-5D7A	U+6CC5	# <cjk>
+3-5D7B	U+6CDD	# <cjk>
+3-5D7C	U+6CAE	# <cjk>
+3-5D7D	U+6CB1	# <cjk>
+3-5D7E	U+6CBE	# <cjk>
+3-5E21	U+6CBA	# <cjk>
+3-5E22	U+6CDB	# <cjk>
+3-5E23	U+6CEF	# <cjk>
+3-5E24	U+6CD9	# <cjk>
+3-5E25	U+6CEA	# <cjk>
+3-5E26	U+6D1F	# <cjk>
+3-5E27	U+884D	# <cjk>
+3-5E28	U+6D36	# <cjk>
+3-5E29	U+6D2B	# <cjk>
+3-5E2A	U+6D3D	# <cjk>
+3-5E2B	U+6D38	# <cjk>
+3-5E2C	U+6D19	# <cjk>
+3-5E2D	U+6D35	# <cjk>
+3-5E2E	U+6D33	# <cjk>
+3-5E2F	U+6D12	# <cjk>
+3-5E30	U+6D0C	# <cjk>
+3-5E31	U+6D63	# <cjk>
+3-5E32	U+6D93	# <cjk>
+3-5E33	U+6D64	# <cjk>
+3-5E34	U+6D5A	# <cjk>
+3-5E35	U+6D79	# <cjk>
+3-5E36	U+6D59	# <cjk>
+3-5E37	U+6D8E	# <cjk>
+3-5E38	U+6D95	# <cjk>
+3-5E39	U+6FE4	# <cjk>
+3-5E3A	U+6D85	# <cjk>
+3-5E3B	U+6DF9	# <cjk>
+3-5E3C	U+6E15	# <cjk>
+3-5E3D	U+6E0A	# <cjk>
+3-5E3E	U+6DB5	# <cjk>
+3-5E3F	U+6DC7	# <cjk>
+3-5E40	U+6DE6	# <cjk>
+3-5E41	U+6DB8	# <cjk>
+3-5E42	U+6DC6	# <cjk>
+3-5E43	U+6DEC	# <cjk>
+3-5E44	U+6DDE	# <cjk>
+3-5E45	U+6DCC	# <cjk>
+3-5E46	U+6DE8	# <cjk>
+3-5E47	U+6DD2	# <cjk>
+3-5E48	U+6DC5	# <cjk>
+3-5E49	U+6DFA	# <cjk>
+3-5E4A	U+6DD9	# <cjk>
+3-5E4B	U+6DE4	# <cjk>
+3-5E4C	U+6DD5	# <cjk>
+3-5E4D	U+6DEA	# <cjk>
+3-5E4E	U+6DEE	# <cjk>
+3-5E4F	U+6E2D	# <cjk>
+3-5E50	U+6E6E	# <cjk>
+3-5E51	U+6E2E	# <cjk>
+3-5E52	U+6E19	# <cjk>
+3-5E53	U+6E72	# <cjk>
+3-5E54	U+6E5F	# <cjk>
+3-5E55	U+6E3E	# <cjk>
+3-5E56	U+6E23	# <cjk>
+3-5E57	U+6E6B	# <cjk>
+3-5E58	U+6E2B	# <cjk>
+3-5E59	U+6E76	# <cjk>
+3-5E5A	U+6E4D	# <cjk>
+3-5E5B	U+6E1F	# <cjk>
+3-5E5C	U+6E43	# <cjk>
+3-5E5D	U+6E3A	# <cjk>
+3-5E5E	U+6E4E	# <cjk>
+3-5E5F	U+6E24	# <cjk>
+3-5E60	U+6EFF	# <cjk>
+3-5E61	U+6E1D	# <cjk>
+3-5E62	U+6E38	# <cjk>
+3-5E63	U+6E82	# <cjk>
+3-5E64	U+6EAA	# <cjk>
+3-5E65	U+6E98	# <cjk>
+3-5E66	U+6EC9	# <cjk>
+3-5E67	U+6EB7	# <cjk>
+3-5E68	U+6ED3	# <cjk>
+3-5E69	U+6EBD	# <cjk>
+3-5E6A	U+6EAF	# <cjk>
+3-5E6B	U+6EC4	# <cjk>
+3-5E6C	U+6EB2	# <cjk>
+3-5E6D	U+6ED4	# <cjk>
+3-5E6E	U+6ED5	# <cjk>
+3-5E6F	U+6E8F	# <cjk>
+3-5E70	U+6EA5	# <cjk>
+3-5E71	U+6EC2	# <cjk>
+3-5E72	U+6E9F	# <cjk>
+3-5E73	U+6F41	# <cjk>
+3-5E74	U+6F11	# <cjk>
+3-5E75	U+704C	# <cjk>
+3-5E76	U+6EEC	# <cjk>
+3-5E77	U+6EF8	# <cjk>
+3-5E78	U+6EFE	# <cjk>
+3-5E79	U+6F3F	# <cjk>
+3-5E7A	U+6EF2	# <cjk>
+3-5E7B	U+6F31	# <cjk>
+3-5E7C	U+6EEF	# <cjk>
+3-5E7D	U+6F32	# <cjk>
+3-5E7E	U+6ECC	# <cjk>
+3-5F21	U+6F3E	# <cjk>
+3-5F22	U+6F13	# <cjk>
+3-5F23	U+6EF7	# <cjk>
+3-5F24	U+6F86	# <cjk>
+3-5F25	U+6F7A	# <cjk>
+3-5F26	U+6F78	# <cjk>
+3-5F27	U+6F81	# <cjk>
+3-5F28	U+6F80	# <cjk>
+3-5F29	U+6F6F	# <cjk>
+3-5F2A	U+6F5B	# <cjk>
+3-5F2B	U+6FF3	# <cjk>
+3-5F2C	U+6F6D	# <cjk>
+3-5F2D	U+6F82	# <cjk>
+3-5F2E	U+6F7C	# <cjk>
+3-5F2F	U+6F58	# <cjk>
+3-5F30	U+6F8E	# <cjk>
+3-5F31	U+6F91	# <cjk>
+3-5F32	U+6FC2	# <cjk>
+3-5F33	U+6F66	# <cjk>
+3-5F34	U+6FB3	# <cjk>
+3-5F35	U+6FA3	# <cjk>
+3-5F36	U+6FA1	# <cjk>
+3-5F37	U+6FA4	# <cjk>
+3-5F38	U+6FB9	# <cjk>
+3-5F39	U+6FC6	# <cjk>
+3-5F3A	U+6FAA	# <cjk>
+3-5F3B	U+6FDF	# <cjk>
+3-5F3C	U+6FD5	# <cjk>
+3-5F3D	U+6FEC	# <cjk>
+3-5F3E	U+6FD4	# <cjk>
+3-5F3F	U+6FD8	# <cjk>
+3-5F40	U+6FF1	# <cjk>
+3-5F41	U+6FEE	# <cjk>
+3-5F42	U+6FDB	# <cjk>
+3-5F43	U+7009	# <cjk>
+3-5F44	U+700B	# <cjk>
+3-5F45	U+6FFA	# <cjk>
+3-5F46	U+7011	# <cjk>
+3-5F47	U+7001	# <cjk>
+3-5F48	U+700F	# <cjk>
+3-5F49	U+6FFE	# <cjk>
+3-5F4A	U+701B	# <cjk>
+3-5F4B	U+701A	# <cjk>
+3-5F4C	U+6F74	# <cjk>
+3-5F4D	U+701D	# <cjk>
+3-5F4E	U+7018	# <cjk>
+3-5F4F	U+701F	# <cjk>
+3-5F50	U+7030	# <cjk>
+3-5F51	U+703E	# <cjk>
+3-5F52	U+7032	# <cjk>
+3-5F53	U+7051	# <cjk>
+3-5F54	U+7063	# <cjk>
+3-5F55	U+7099	# <cjk>
+3-5F56	U+7092	# <cjk>
+3-5F57	U+70AF	# <cjk>
+3-5F58	U+70F1	# <cjk>
+3-5F59	U+70AC	# <cjk>
+3-5F5A	U+70B8	# <cjk>
+3-5F5B	U+70B3	# <cjk>
+3-5F5C	U+70AE	# <cjk>
+3-5F5D	U+70DF	# <cjk>
+3-5F5E	U+70CB	# <cjk>
+3-5F5F	U+70DD	# <cjk>
+3-5F60	U+70D9	# <cjk>
+3-5F61	U+7109	# <cjk>
+3-5F62	U+70FD	# <cjk>
+3-5F63	U+711C	# <cjk>
+3-5F64	U+7119	# <cjk>
+3-5F65	U+7165	# <cjk>
+3-5F66	U+7155	# <cjk>
+3-5F67	U+7188	# <cjk>
+3-5F68	U+7166	# <cjk>
+3-5F69	U+7162	# <cjk>
+3-5F6A	U+714C	# <cjk>
+3-5F6B	U+7156	# <cjk>
+3-5F6C	U+716C	# <cjk>
+3-5F6D	U+718F	# <cjk>
+3-5F6E	U+71FB	# <cjk>
+3-5F6F	U+7184	# <cjk>
+3-5F70	U+7195	# <cjk>
+3-5F71	U+71A8	# <cjk>
+3-5F72	U+71AC	# <cjk>
+3-5F73	U+71D7	# <cjk>
+3-5F74	U+71B9	# <cjk>
+3-5F75	U+71BE	# <cjk>
+3-5F76	U+71D2	# <cjk>
+3-5F77	U+71C9	# <cjk>
+3-5F78	U+71D4	# <cjk>
+3-5F79	U+71CE	# <cjk>
+3-5F7A	U+71E0	# <cjk>
+3-5F7B	U+71EC	# <cjk>
+3-5F7C	U+71E7	# <cjk>
+3-5F7D	U+71F5	# <cjk>
+3-5F7E	U+71FC	# <cjk>
+3-6021	U+71F9	# <cjk>
+3-6022	U+71FF	# <cjk>
+3-6023	U+720D	# <cjk>
+3-6024	U+7210	# <cjk>
+3-6025	U+721B	# <cjk>
+3-6026	U+7228	# <cjk>
+3-6027	U+722D	# <cjk>
+3-6028	U+722C	# <cjk>
+3-6029	U+7230	# <cjk>
+3-602A	U+7232	# <cjk>
+3-602B	U+723B	# <cjk>
+3-602C	U+723C	# <cjk>
+3-602D	U+723F	# <cjk>
+3-602E	U+7240	# <cjk>
+3-602F	U+7246	# <cjk>
+3-6030	U+724B	# <cjk>
+3-6031	U+7258	# <cjk>
+3-6032	U+7274	# <cjk>
+3-6033	U+727E	# <cjk>
+3-6034	U+7282	# <cjk>
+3-6035	U+7281	# <cjk>
+3-6036	U+7287	# <cjk>
+3-6037	U+7292	# <cjk>
+3-6038	U+7296	# <cjk>
+3-6039	U+72A2	# <cjk>
+3-603A	U+72A7	# <cjk>
+3-603B	U+72B9	# <cjk>
+3-603C	U+72B2	# <cjk>
+3-603D	U+72C3	# <cjk>
+3-603E	U+72C6	# <cjk>
+3-603F	U+72C4	# <cjk>
+3-6040	U+72CE	# <cjk>
+3-6041	U+72D2	# <cjk>
+3-6042	U+72E2	# <cjk>
+3-6043	U+72E0	# <cjk>
+3-6044	U+72E1	# <cjk>
+3-6045	U+72F9	# <cjk>
+3-6046	U+72F7	# <cjk>
+3-6047	U+500F	# <cjk>
+3-6048	U+7317	# <cjk>
+3-6049	U+730A	# <cjk>
+3-604A	U+731C	# <cjk>
+3-604B	U+7316	# <cjk>
+3-604C	U+731D	# <cjk>
+3-604D	U+7334	# <cjk>
+3-604E	U+732F	# <cjk>
+3-604F	U+7329	# <cjk>
+3-6050	U+7325	# <cjk>
+3-6051	U+733E	# <cjk>
+3-6052	U+734E	# <cjk>
+3-6053	U+734F	# <cjk>
+3-6054	U+9ED8	# <cjk>
+3-6055	U+7357	# <cjk>
+3-6056	U+736A	# <cjk>
+3-6057	U+7368	# <cjk>
+3-6058	U+7370	# <cjk>
+3-6059	U+7378	# <cjk>
+3-605A	U+7375	# <cjk>
+3-605B	U+737B	# <cjk>
+3-605C	U+737A	# <cjk>
+3-605D	U+73C8	# <cjk>
+3-605E	U+73B3	# <cjk>
+3-605F	U+73CE	# <cjk>
+3-6060	U+73BB	# <cjk>
+3-6061	U+73C0	# <cjk>
+3-6062	U+73E5	# <cjk>
+3-6063	U+73EE	# <cjk>
+3-6064	U+73DE	# <cjk>
+3-6065	U+74A2	# <cjk>
+3-6066	U+7405	# <cjk>
+3-6067	U+746F	# <cjk>
+3-6068	U+7425	# <cjk>
+3-6069	U+73F8	# <cjk>
+3-606A	U+7432	# <cjk>
+3-606B	U+743A	# <cjk>
+3-606C	U+7455	# <cjk>
+3-606D	U+743F	# <cjk>
+3-606E	U+745F	# <cjk>
+3-606F	U+7459	# <cjk>
+3-6070	U+7441	# <cjk>
+3-6071	U+745C	# <cjk>
+3-6072	U+7469	# <cjk>
+3-6073	U+7470	# <cjk>
+3-6074	U+7463	# <cjk>
+3-6075	U+746A	# <cjk>
+3-6076	U+7476	# <cjk>
+3-6077	U+747E	# <cjk>
+3-6078	U+748B	# <cjk>
+3-6079	U+749E	# <cjk>
+3-607A	U+74A7	# <cjk>
+3-607B	U+74CA	# <cjk>
+3-607C	U+74CF	# <cjk>
+3-607D	U+74D4	# <cjk>
+3-607E	U+73F1	# <cjk>
+3-6121	U+74E0	# <cjk>
+3-6122	U+74E3	# <cjk>
+3-6123	U+74E7	# <cjk>
+3-6124	U+74E9	# <cjk>
+3-6125	U+74EE	# <cjk>
+3-6126	U+74F2	# <cjk>
+3-6127	U+74F0	# <cjk>
+3-6128	U+74F1	# <cjk>
+3-6129	U+74F8	# <cjk>
+3-612A	U+74F7	# <cjk>
+3-612B	U+7504	# <cjk>
+3-612C	U+7503	# <cjk>
+3-612D	U+7505	# <cjk>
+3-612E	U+750C	# <cjk>
+3-612F	U+750E	# <cjk>
+3-6130	U+750D	# <cjk>
+3-6131	U+7515	# <cjk>
+3-6132	U+7513	# <cjk>
+3-6133	U+751E	# <cjk>
+3-6134	U+7526	# <cjk>
+3-6135	U+752C	# <cjk>
+3-6136	U+753C	# <cjk>
+3-6137	U+7544	# <cjk>
+3-6138	U+754D	# <cjk>
+3-6139	U+754A	# <cjk>
+3-613A	U+7549	# <cjk>
+3-613B	U+755B	# <cjk>
+3-613C	U+7546	# <cjk>
+3-613D	U+755A	# <cjk>
+3-613E	U+7569	# <cjk>
+3-613F	U+7564	# <cjk>
+3-6140	U+7567	# <cjk>
+3-6141	U+756B	# <cjk>
+3-6142	U+756D	# <cjk>
+3-6143	U+7578	# <cjk>
+3-6144	U+7576	# <cjk>
+3-6145	U+7586	# <cjk>
+3-6146	U+7587	# <cjk>
+3-6147	U+7574	# <cjk>
+3-6148	U+758A	# <cjk>
+3-6149	U+7589	# <cjk>
+3-614A	U+7582	# <cjk>
+3-614B	U+7594	# <cjk>
+3-614C	U+759A	# <cjk>
+3-614D	U+759D	# <cjk>
+3-614E	U+75A5	# <cjk>
+3-614F	U+75A3	# <cjk>
+3-6150	U+75C2	# <cjk>
+3-6151	U+75B3	# <cjk>
+3-6152	U+75C3	# <cjk>
+3-6153	U+75B5	# <cjk>
+3-6154	U+75BD	# <cjk>
+3-6155	U+75B8	# <cjk>
+3-6156	U+75BC	# <cjk>
+3-6157	U+75B1	# <cjk>
+3-6158	U+75CD	# <cjk>
+3-6159	U+75CA	# <cjk>
+3-615A	U+75D2	# <cjk>
+3-615B	U+75D9	# <cjk>
+3-615C	U+75E3	# <cjk>
+3-615D	U+75DE	# <cjk>
+3-615E	U+75FE	# <cjk>
+3-615F	U+75FF	# <cjk>
+3-6160	U+75FC	# <cjk>
+3-6161	U+7601	# <cjk>
+3-6162	U+75F0	# <cjk>
+3-6163	U+75FA	# <cjk>
+3-6164	U+75F2	# <cjk>
+3-6165	U+75F3	# <cjk>
+3-6166	U+760B	# <cjk>
+3-6167	U+760D	# <cjk>
+3-6168	U+7609	# <cjk>
+3-6169	U+761F	# <cjk>
+3-616A	U+7627	# <cjk>
+3-616B	U+7620	# <cjk>
+3-616C	U+7621	# <cjk>
+3-616D	U+7622	# <cjk>
+3-616E	U+7624	# <cjk>
+3-616F	U+7634	# <cjk>
+3-6170	U+7630	# <cjk>
+3-6171	U+763B	# <cjk>
+3-6172	U+7647	# <cjk>
+3-6173	U+7648	# <cjk>
+3-6174	U+7646	# <cjk>
+3-6175	U+765C	# <cjk>
+3-6176	U+7658	# <cjk>
+3-6177	U+7661	# <cjk>
+3-6178	U+7662	# <cjk>
+3-6179	U+7668	# <cjk>
+3-617A	U+7669	# <cjk>
+3-617B	U+766A	# <cjk>
+3-617C	U+7667	# <cjk>
+3-617D	U+766C	# <cjk>
+3-617E	U+7670	# <cjk>
+3-6221	U+7672	# <cjk>
+3-6222	U+7676	# <cjk>
+3-6223	U+7678	# <cjk>
+3-6224	U+767C	# <cjk>
+3-6225	U+7680	# <cjk>
+3-6226	U+7683	# <cjk>
+3-6227	U+7688	# <cjk>
+3-6228	U+768B	# <cjk>
+3-6229	U+768E	# <cjk>
+3-622A	U+7696	# <cjk>
+3-622B	U+7693	# <cjk>
+3-622C	U+7699	# <cjk>
+3-622D	U+769A	# <cjk>
+3-622E	U+76B0	# <cjk>
+3-622F	U+76B4	# <cjk>
+3-6230	U+76B8	# <cjk>
+3-6231	U+76B9	# <cjk>
+3-6232	U+76BA	# <cjk>
+3-6233	U+76C2	# <cjk>
+3-6234	U+76CD	# <cjk>
+3-6235	U+76D6	# <cjk>
+3-6236	U+76D2	# <cjk>
+3-6237	U+76DE	# <cjk>
+3-6238	U+76E1	# <cjk>
+3-6239	U+76E5	# <cjk>
+3-623A	U+76E7	# <cjk>
+3-623B	U+76EA	# <cjk>
+3-623C	U+862F	# <cjk>
+3-623D	U+76FB	# <cjk>
+3-623E	U+7708	# <cjk>
+3-623F	U+7707	# <cjk>
+3-6240	U+7704	# <cjk>
+3-6241	U+7729	# <cjk>
+3-6242	U+7724	# <cjk>
+3-6243	U+771E	# <cjk>
+3-6244	U+7725	# <cjk>
+3-6245	U+7726	# <cjk>
+3-6246	U+771B	# <cjk>
+3-6247	U+7737	# <cjk>
+3-6248	U+7738	# <cjk>
+3-6249	U+7747	# <cjk>
+3-624A	U+775A	# <cjk>
+3-624B	U+7768	# <cjk>
+3-624C	U+776B	# <cjk>
+3-624D	U+775B	# <cjk>
+3-624E	U+7765	# <cjk>
+3-624F	U+777F	# <cjk>
+3-6250	U+777E	# <cjk>
+3-6251	U+7779	# <cjk>
+3-6252	U+778E	# <cjk>
+3-6253	U+778B	# <cjk>
+3-6254	U+7791	# <cjk>
+3-6255	U+77A0	# <cjk>
+3-6256	U+779E	# <cjk>
+3-6257	U+77B0	# <cjk>
+3-6258	U+77B6	# <cjk>
+3-6259	U+77B9	# <cjk>
+3-625A	U+77BF	# <cjk>
+3-625B	U+77BC	# <cjk>
+3-625C	U+77BD	# <cjk>
+3-625D	U+77BB	# <cjk>
+3-625E	U+77C7	# <cjk>
+3-625F	U+77CD	# <cjk>
+3-6260	U+77D7	# <cjk>
+3-6261	U+77DA	# <cjk>
+3-6262	U+77DC	# <cjk>
+3-6263	U+77E3	# <cjk>
+3-6264	U+77EE	# <cjk>
+3-6265	U+77FC	# <cjk>
+3-6266	U+780C	# <cjk>
+3-6267	U+7812	# <cjk>
+3-6268	U+7926	# <cjk>
+3-6269	U+7820	# <cjk>
+3-626A	U+792A	# <cjk>
+3-626B	U+7845	# <cjk>
+3-626C	U+788E	# <cjk>
+3-626D	U+7874	# <cjk>
+3-626E	U+7886	# <cjk>
+3-626F	U+787C	# <cjk>
+3-6270	U+789A	# <cjk>
+3-6271	U+788C	# <cjk>
+3-6272	U+78A3	# <cjk>
+3-6273	U+78B5	# <cjk>
+3-6274	U+78AA	# <cjk>
+3-6275	U+78AF	# <cjk>
+3-6276	U+78D1	# <cjk>
+3-6277	U+78C6	# <cjk>
+3-6278	U+78CB	# <cjk>
+3-6279	U+78D4	# <cjk>
+3-627A	U+78BE	# <cjk>
+3-627B	U+78BC	# <cjk>
+3-627C	U+78C5	# <cjk>
+3-627D	U+78CA	# <cjk>
+3-627E	U+78EC	# <cjk>
+3-6321	U+78E7	# <cjk>
+3-6322	U+78DA	# <cjk>
+3-6323	U+78FD	# <cjk>
+3-6324	U+78F4	# <cjk>
+3-6325	U+7907	# <cjk>
+3-6326	U+7912	# <cjk>
+3-6327	U+7911	# <cjk>
+3-6328	U+7919	# <cjk>
+3-6329	U+792C	# <cjk>
+3-632A	U+792B	# <cjk>
+3-632B	U+7940	# <cjk>
+3-632C	U+7960	# <cjk>
+3-632D	U+7957	# <cjk>
+3-632E	U+795F	# <cjk>
+3-632F	U+795A	# <cjk>
+3-6330	U+7955	# <cjk>
+3-6331	U+7953	# <cjk>
+3-6332	U+797A	# <cjk>
+3-6333	U+797F	# <cjk>
+3-6334	U+798A	# <cjk>
+3-6335	U+799D	# <cjk>
+3-6336	U+79A7	# <cjk>
+3-6337	U+9F4B	# <cjk>
+3-6338	U+79AA	# <cjk>
+3-6339	U+79AE	# <cjk>
+3-633A	U+79B3	# <cjk>
+3-633B	U+79B9	# <cjk>
+3-633C	U+79BA	# <cjk>
+3-633D	U+79C9	# <cjk>
+3-633E	U+79D5	# <cjk>
+3-633F	U+79E7	# <cjk>
+3-6340	U+79EC	# <cjk>
+3-6341	U+79E1	# <cjk>
+3-6342	U+79E3	# <cjk>
+3-6343	U+7A08	# <cjk>
+3-6344	U+7A0D	# <cjk>
+3-6345	U+7A18	# <cjk>
+3-6346	U+7A19	# <cjk>
+3-6347	U+7A20	# <cjk>
+3-6348	U+7A1F	# <cjk>
+3-6349	U+7980	# <cjk>
+3-634A	U+7A31	# <cjk>
+3-634B	U+7A3B	# <cjk>
+3-634C	U+7A3E	# <cjk>
+3-634D	U+7A37	# <cjk>
+3-634E	U+7A43	# <cjk>
+3-634F	U+7A57	# <cjk>
+3-6350	U+7A49	# <cjk>
+3-6351	U+7A61	# <cjk>
+3-6352	U+7A62	# <cjk>
+3-6353	U+7A69	# <cjk>
+3-6354	U+9F9D	# <cjk>
+3-6355	U+7A70	# <cjk>
+3-6356	U+7A79	# <cjk>
+3-6357	U+7A7D	# <cjk>
+3-6358	U+7A88	# <cjk>
+3-6359	U+7A97	# <cjk>
+3-635A	U+7A95	# <cjk>
+3-635B	U+7A98	# <cjk>
+3-635C	U+7A96	# <cjk>
+3-635D	U+7AA9	# <cjk>
+3-635E	U+7AC8	# <cjk>
+3-635F	U+7AB0	# <cjk>
+3-6360	U+7AB6	# <cjk>
+3-6361	U+7AC5	# <cjk>
+3-6362	U+7AC4	# <cjk>
+3-6363	U+7ABF	# <cjk>
+3-6364	U+9083	# <cjk>
+3-6365	U+7AC7	# <cjk>
+3-6366	U+7ACA	# <cjk>
+3-6367	U+7ACD	# <cjk>
+3-6368	U+7ACF	# <cjk>
+3-6369	U+7AD5	# <cjk>
+3-636A	U+7AD3	# <cjk>
+3-636B	U+7AD9	# <cjk>
+3-636C	U+7ADA	# <cjk>
+3-636D	U+7ADD	# <cjk>
+3-636E	U+7AE1	# <cjk>
+3-636F	U+7AE2	# <cjk>
+3-6370	U+7AE6	# <cjk>
+3-6371	U+7AED	# <cjk>
+3-6372	U+7AF0	# <cjk>
+3-6373	U+7B02	# <cjk>
+3-6374	U+7B0F	# <cjk>
+3-6375	U+7B0A	# <cjk>
+3-6376	U+7B06	# <cjk>
+3-6377	U+7B33	# <cjk>
+3-6378	U+7B18	# <cjk>
+3-6379	U+7B19	# <cjk>
+3-637A	U+7B1E	# <cjk>
+3-637B	U+7B35	# <cjk>
+3-637C	U+7B28	# <cjk>
+3-637D	U+7B36	# <cjk>
+3-637E	U+7B50	# <cjk>
+3-6421	U+7B7A	# <cjk>
+3-6422	U+7B04	# <cjk>
+3-6423	U+7B4D	# <cjk>
+3-6424	U+7B0B	# <cjk>
+3-6425	U+7B4C	# <cjk>
+3-6426	U+7B45	# <cjk>
+3-6427	U+7B75	# <cjk>
+3-6428	U+7B65	# <cjk>
+3-6429	U+7B74	# <cjk>
+3-642A	U+7B67	# <cjk>
+3-642B	U+7B70	# <cjk>
+3-642C	U+7B71	# <cjk>
+3-642D	U+7B6C	# <cjk>
+3-642E	U+7B6E	# <cjk>
+3-642F	U+7B9D	# <cjk>
+3-6430	U+7B98	# <cjk>
+3-6431	U+7B9F	# <cjk>
+3-6432	U+7B8D	# <cjk>
+3-6433	U+7B9C	# <cjk>
+3-6434	U+7B9A	# <cjk>
+3-6435	U+7B8B	# <cjk>
+3-6436	U+7B92	# <cjk>
+3-6437	U+7B8F	# <cjk>
+3-6438	U+7B5D	# <cjk>
+3-6439	U+7B99	# <cjk>
+3-643A	U+7BCB	# <cjk>
+3-643B	U+7BC1	# <cjk>
+3-643C	U+7BCC	# <cjk>
+3-643D	U+7BCF	# <cjk>
+3-643E	U+7BB4	# <cjk>
+3-643F	U+7BC6	# <cjk>
+3-6440	U+7BDD	# <cjk>
+3-6441	U+7BE9	# <cjk>
+3-6442	U+7C11	# <cjk>
+3-6443	U+7C14	# <cjk>
+3-6444	U+7BE6	# <cjk>
+3-6445	U+7BE5	# <cjk>
+3-6446	U+7C60	# <cjk>
+3-6447	U+7C00	# <cjk>
+3-6448	U+7C07	# <cjk>
+3-6449	U+7C13	# <cjk>
+3-644A	U+7BF3	# <cjk>
+3-644B	U+7BF7	# <cjk>
+3-644C	U+7C17	# <cjk>
+3-644D	U+7C0D	# <cjk>
+3-644E	U+7BF6	# <cjk>
+3-644F	U+7C23	# <cjk>
+3-6450	U+7C27	# <cjk>
+3-6451	U+7C2A	# <cjk>
+3-6452	U+7C1F	# <cjk>
+3-6453	U+7C37	# <cjk>
+3-6454	U+7C2B	# <cjk>
+3-6455	U+7C3D	# <cjk>
+3-6456	U+7C4C	# <cjk>
+3-6457	U+7C43	# <cjk>
+3-6458	U+7C54	# <cjk>
+3-6459	U+7C4F	# <cjk>
+3-645A	U+7C40	# <cjk>
+3-645B	U+7C50	# <cjk>
+3-645C	U+7C58	# <cjk>
+3-645D	U+7C5F	# <cjk>
+3-645E	U+7C64	# <cjk>
+3-645F	U+7C56	# <cjk>
+3-6460	U+7C65	# <cjk>
+3-6461	U+7C6C	# <cjk>
+3-6462	U+7C75	# <cjk>
+3-6463	U+7C83	# <cjk>
+3-6464	U+7C90	# <cjk>
+3-6465	U+7CA4	# <cjk>
+3-6466	U+7CAD	# <cjk>
+3-6467	U+7CA2	# <cjk>
+3-6468	U+7CAB	# <cjk>
+3-6469	U+7CA1	# <cjk>
+3-646A	U+7CA8	# <cjk>
+3-646B	U+7CB3	# <cjk>
+3-646C	U+7CB2	# <cjk>
+3-646D	U+7CB1	# <cjk>
+3-646E	U+7CAE	# <cjk>
+3-646F	U+7CB9	# <cjk>
+3-6470	U+7CBD	# <cjk>
+3-6471	U+7CC0	# <cjk>
+3-6472	U+7CC5	# <cjk>
+3-6473	U+7CC2	# <cjk>
+3-6474	U+7CD8	# <cjk>
+3-6475	U+7CD2	# <cjk>
+3-6476	U+7CDC	# <cjk>
+3-6477	U+7CE2	# <cjk>
+3-6478	U+9B3B	# <cjk>
+3-6479	U+7CEF	# <cjk>
+3-647A	U+7CF2	# <cjk>
+3-647B	U+7CF4	# <cjk>
+3-647C	U+7CF6	# <cjk>
+3-647D	U+7CFA	# <cjk>
+3-647E	U+7D06	# <cjk>
+3-6521	U+7D02	# <cjk>
+3-6522	U+7D1C	# <cjk>
+3-6523	U+7D15	# <cjk>
+3-6524	U+7D0A	# <cjk>
+3-6525	U+7D45	# <cjk>
+3-6526	U+7D4B	# <cjk>
+3-6527	U+7D2E	# <cjk>
+3-6528	U+7D32	# <cjk>
+3-6529	U+7D3F	# <cjk>
+3-652A	U+7D35	# <cjk>
+3-652B	U+7D46	# <cjk>
+3-652C	U+7D73	# <cjk>
+3-652D	U+7D56	# <cjk>
+3-652E	U+7D4E	# <cjk>
+3-652F	U+7D72	# <cjk>
+3-6530	U+7D68	# <cjk>
+3-6531	U+7D6E	# <cjk>
+3-6532	U+7D4F	# <cjk>
+3-6533	U+7D63	# <cjk>
+3-6534	U+7D93	# <cjk>
+3-6535	U+7D89	# <cjk>
+3-6536	U+7D5B	# <cjk>
+3-6537	U+7D8F	# <cjk>
+3-6538	U+7D7D	# <cjk>
+3-6539	U+7D9B	# <cjk>
+3-653A	U+7DBA	# <cjk>
+3-653B	U+7DAE	# <cjk>
+3-653C	U+7DA3	# <cjk>
+3-653D	U+7DB5	# <cjk>
+3-653E	U+7DC7	# <cjk>
+3-653F	U+7DBD	# <cjk>
+3-6540	U+7DAB	# <cjk>
+3-6541	U+7E3D	# <cjk>
+3-6542	U+7DA2	# <cjk>
+3-6543	U+7DAF	# <cjk>
+3-6544	U+7DDC	# <cjk>
+3-6545	U+7DB8	# <cjk>
+3-6546	U+7D9F	# <cjk>
+3-6547	U+7DB0	# <cjk>
+3-6548	U+7DD8	# <cjk>
+3-6549	U+7DDD	# <cjk>
+3-654A	U+7DE4	# <cjk>
+3-654B	U+7DDE	# <cjk>
+3-654C	U+7DFB	# <cjk>
+3-654D	U+7DF2	# <cjk>
+3-654E	U+7DE1	# <cjk>
+3-654F	U+7E05	# <cjk>
+3-6550	U+7E0A	# <cjk>
+3-6551	U+7E23	# <cjk>
+3-6552	U+7E21	# <cjk>
+3-6553	U+7E12	# <cjk>
+3-6554	U+7E31	# <cjk>
+3-6555	U+7E1F	# <cjk>
+3-6556	U+7E09	# <cjk>
+3-6557	U+7E0B	# <cjk>
+3-6558	U+7E22	# <cjk>
+3-6559	U+7E46	# <cjk>
+3-655A	U+7E66	# <cjk>
+3-655B	U+7E3B	# <cjk>
+3-655C	U+7E35	# <cjk>
+3-655D	U+7E39	# <cjk>
+3-655E	U+7E43	# <cjk>
+3-655F	U+7E37	# <cjk>
+3-6560	U+7E32	# <cjk>
+3-6561	U+7E3A	# <cjk>
+3-6562	U+7E67	# <cjk>
+3-6563	U+7E5D	# <cjk>
+3-6564	U+7E56	# <cjk>
+3-6565	U+7E5E	# <cjk>
+3-6566	U+7E59	# <cjk>
+3-6567	U+7E5A	# <cjk>
+3-6568	U+7E79	# <cjk>
+3-6569	U+7E6A	# <cjk>
+3-656A	U+7E69	# <cjk>
+3-656B	U+7E7C	# <cjk>
+3-656C	U+7E7B	# <cjk>
+3-656D	U+7E83	# <cjk>
+3-656E	U+7DD5	# <cjk>
+3-656F	U+7E7D	# <cjk>
+3-6570	U+8FAE	# <cjk>
+3-6571	U+7E7F	# <cjk>
+3-6572	U+7E88	# <cjk>
+3-6573	U+7E89	# <cjk>
+3-6574	U+7E8C	# <cjk>
+3-6575	U+7E92	# <cjk>
+3-6576	U+7E90	# <cjk>
+3-6577	U+7E93	# <cjk>
+3-6578	U+7E94	# <cjk>
+3-6579	U+7E96	# <cjk>
+3-657A	U+7E8E	# <cjk>
+3-657B	U+7E9B	# <cjk>
+3-657C	U+7E9C	# <cjk>
+3-657D	U+7F38	# <cjk>
+3-657E	U+7F3A	# <cjk>
+3-6621	U+7F45	# <cjk>
+3-6622	U+7F4C	# <cjk>
+3-6623	U+7F4D	# <cjk>
+3-6624	U+7F4E	# <cjk>
+3-6625	U+7F50	# <cjk>
+3-6626	U+7F51	# <cjk>
+3-6627	U+7F55	# <cjk>
+3-6628	U+7F54	# <cjk>
+3-6629	U+7F58	# <cjk>
+3-662A	U+7F5F	# <cjk>
+3-662B	U+7F60	# <cjk>
+3-662C	U+7F68	# <cjk>
+3-662D	U+7F69	# <cjk>
+3-662E	U+7F67	# <cjk>
+3-662F	U+7F78	# <cjk>
+3-6630	U+7F82	# <cjk>
+3-6631	U+7F86	# <cjk>
+3-6632	U+7F83	# <cjk>
+3-6633	U+7F88	# <cjk>
+3-6634	U+7F87	# <cjk>
+3-6635	U+7F8C	# <cjk>
+3-6636	U+7F94	# <cjk>
+3-6637	U+7F9E	# <cjk>
+3-6638	U+7F9D	# <cjk>
+3-6639	U+7F9A	# <cjk>
+3-663A	U+7FA3	# <cjk>
+3-663B	U+7FAF	# <cjk>
+3-663C	U+7FB2	# <cjk>
+3-663D	U+7FB9	# <cjk>
+3-663E	U+7FAE	# <cjk>
+3-663F	U+7FB6	# <cjk>
+3-6640	U+7FB8	# <cjk>
+3-6641	U+8B71	# <cjk>
+3-6642	U+7FC5	# <cjk>
+3-6643	U+7FC6	# <cjk>
+3-6644	U+7FCA	# <cjk>
+3-6645	U+7FD5	# <cjk>
+3-6646	U+7FD4	# <cjk>
+3-6647	U+7FE1	# <cjk>
+3-6648	U+7FE6	# <cjk>
+3-6649	U+7FE9	# <cjk>
+3-664A	U+7FF3	# <cjk>
+3-664B	U+7FF9	# <cjk>
+3-664C	U+98DC	# <cjk>
+3-664D	U+8006	# <cjk>
+3-664E	U+8004	# <cjk>
+3-664F	U+800B	# <cjk>
+3-6650	U+8012	# <cjk>
+3-6651	U+8018	# <cjk>
+3-6652	U+8019	# <cjk>
+3-6653	U+801C	# <cjk>
+3-6654	U+8021	# <cjk>
+3-6655	U+8028	# <cjk>
+3-6656	U+803F	# <cjk>
+3-6657	U+803B	# <cjk>
+3-6658	U+804A	# <cjk>
+3-6659	U+8046	# <cjk>
+3-665A	U+8052	# <cjk>
+3-665B	U+8058	# <cjk>
+3-665C	U+805A	# <cjk>
+3-665D	U+805F	# <cjk>
+3-665E	U+8062	# <cjk>
+3-665F	U+8068	# <cjk>
+3-6660	U+8073	# <cjk>
+3-6661	U+8072	# <cjk>
+3-6662	U+8070	# <cjk>
+3-6663	U+8076	# <cjk>
+3-6664	U+8079	# <cjk>
+3-6665	U+807D	# <cjk>
+3-6666	U+807F	# <cjk>
+3-6667	U+8084	# <cjk>
+3-6668	U+8086	# <cjk>
+3-6669	U+8085	# <cjk>
+3-666A	U+809B	# <cjk>
+3-666B	U+8093	# <cjk>
+3-666C	U+809A	# <cjk>
+3-666D	U+80AD	# <cjk>
+3-666E	U+5190	# <cjk>
+3-666F	U+80AC	# <cjk>
+3-6670	U+80DB	# <cjk>
+3-6671	U+80E5	# <cjk>
+3-6672	U+80D9	# <cjk>
+3-6673	U+80DD	# <cjk>
+3-6674	U+80C4	# <cjk>
+3-6675	U+80DA	# <cjk>
+3-6676	U+80D6	# <cjk>
+3-6677	U+8109	# <cjk>
+3-6678	U+80EF	# <cjk>
+3-6679	U+80F1	# <cjk>
+3-667A	U+811B	# <cjk>
+3-667B	U+8129	# <cjk>
+3-667C	U+8123	# <cjk>
+3-667D	U+812F	# <cjk>
+3-667E	U+814B	# <cjk>
+3-6721	U+968B	# <cjk>
+3-6722	U+8146	# <cjk>
+3-6723	U+813E	# <cjk>
+3-6724	U+8153	# <cjk>
+3-6725	U+8151	# <cjk>
+3-6726	U+80FC	# <cjk>
+3-6727	U+8171	# <cjk>
+3-6728	U+816E	# <cjk>
+3-6729	U+8165	# <cjk>
+3-672A	U+8166	# <cjk>
+3-672B	U+8174	# <cjk>
+3-672C	U+8183	# <cjk>
+3-672D	U+8188	# <cjk>
+3-672E	U+818A	# <cjk>
+3-672F	U+8180	# <cjk>
+3-6730	U+8182	# <cjk>
+3-6731	U+81A0	# <cjk>
+3-6732	U+8195	# <cjk>
+3-6733	U+81A4	# <cjk>
+3-6734	U+81A3	# <cjk>
+3-6735	U+815F	# <cjk>
+3-6736	U+8193	# <cjk>
+3-6737	U+81A9	# <cjk>
+3-6738	U+81B0	# <cjk>
+3-6739	U+81B5	# <cjk>
+3-673A	U+81BE	# <cjk>
+3-673B	U+81B8	# <cjk>
+3-673C	U+81BD	# <cjk>
+3-673D	U+81C0	# <cjk>
+3-673E	U+81C2	# <cjk>
+3-673F	U+81BA	# <cjk>
+3-6740	U+81C9	# <cjk>
+3-6741	U+81CD	# <cjk>
+3-6742	U+81D1	# <cjk>
+3-6743	U+81D9	# <cjk>
+3-6744	U+81D8	# <cjk>
+3-6745	U+81C8	# <cjk>
+3-6746	U+81DA	# <cjk>
+3-6747	U+81DF	# <cjk>
+3-6748	U+81E0	# <cjk>
+3-6749	U+81E7	# <cjk>
+3-674A	U+81FA	# <cjk>
+3-674B	U+81FB	# <cjk>
+3-674C	U+81FE	# <cjk>
+3-674D	U+8201	# <cjk>
+3-674E	U+8202	# <cjk>
+3-674F	U+8205	# <cjk>
+3-6750	U+8207	# <cjk>
+3-6751	U+820A	# <cjk>
+3-6752	U+820D	# <cjk>
+3-6753	U+8210	# <cjk>
+3-6754	U+8216	# <cjk>
+3-6755	U+8229	# <cjk>
+3-6756	U+822B	# <cjk>
+3-6757	U+8238	# <cjk>
+3-6758	U+8233	# <cjk>
+3-6759	U+8240	# <cjk>
+3-675A	U+8259	# <cjk>
+3-675B	U+8258	# <cjk>
+3-675C	U+825D	# <cjk>
+3-675D	U+825A	# <cjk>
+3-675E	U+825F	# <cjk>
+3-675F	U+8264	# <cjk>
+3-6760	U+8262	# <cjk>
+3-6761	U+8268	# <cjk>
+3-6762	U+826A	# <cjk>
+3-6763	U+826B	# <cjk>
+3-6764	U+822E	# <cjk>
+3-6765	U+8271	# <cjk>
+3-6766	U+8277	# <cjk>
+3-6767	U+8278	# <cjk>
+3-6768	U+827E	# <cjk>
+3-6769	U+828D	# <cjk>
+3-676A	U+8292	# <cjk>
+3-676B	U+82AB	# <cjk>
+3-676C	U+829F	# <cjk>
+3-676D	U+82BB	# <cjk>
+3-676E	U+82AC	# <cjk>
+3-676F	U+82E1	# <cjk>
+3-6770	U+82E3	# <cjk>
+3-6771	U+82DF	# <cjk>
+3-6772	U+82D2	# <cjk>
+3-6773	U+82F4	# <cjk>
+3-6774	U+82F3	# <cjk>
+3-6775	U+82FA	# <cjk>
+3-6776	U+8393	# <cjk>
+3-6777	U+8303	# <cjk>
+3-6778	U+82FB	# <cjk>
+3-6779	U+82F9	# <cjk>
+3-677A	U+82DE	# <cjk>
+3-677B	U+8306	# <cjk>
+3-677C	U+82DC	# <cjk>
+3-677D	U+8309	# <cjk>
+3-677E	U+82D9	# <cjk>
+3-6821	U+8335	# <cjk>
+3-6822	U+8334	# <cjk>
+3-6823	U+8316	# <cjk>
+3-6824	U+8332	# <cjk>
+3-6825	U+8331	# <cjk>
+3-6826	U+8340	# <cjk>
+3-6827	U+8339	# <cjk>
+3-6828	U+8350	# <cjk>
+3-6829	U+8345	# <cjk>
+3-682A	U+832F	# <cjk>
+3-682B	U+832B	# <cjk>
+3-682C	U+8317	# <cjk>
+3-682D	U+8318	# <cjk>
+3-682E	U+8385	# <cjk>
+3-682F	U+839A	# <cjk>
+3-6830	U+83AA	# <cjk>
+3-6831	U+839F	# <cjk>
+3-6832	U+83A2	# <cjk>
+3-6833	U+8396	# <cjk>
+3-6834	U+8323	# <cjk>
+3-6835	U+838E	# <cjk>
+3-6836	U+8387	# <cjk>
+3-6837	U+838A	# <cjk>
+3-6838	U+837C	# <cjk>
+3-6839	U+83B5	# <cjk>
+3-683A	U+8373	# <cjk>
+3-683B	U+8375	# <cjk>
+3-683C	U+83A0	# <cjk>
+3-683D	U+8389	# <cjk>
+3-683E	U+83A8	# <cjk>
+3-683F	U+83F4	# <cjk>
+3-6840	U+8413	# <cjk>
+3-6841	U+83EB	# <cjk>
+3-6842	U+83CE	# <cjk>
+3-6843	U+83FD	# <cjk>
+3-6844	U+8403	# <cjk>
+3-6845	U+83D8	# <cjk>
+3-6846	U+840B	# <cjk>
+3-6847	U+83C1	# <cjk>
+3-6848	U+83F7	# <cjk>
+3-6849	U+8407	# <cjk>
+3-684A	U+83E0	# <cjk>
+3-684B	U+83F2	# <cjk>
+3-684C	U+840D	# <cjk>
+3-684D	U+8422	# <cjk>
+3-684E	U+8420	# <cjk>
+3-684F	U+83BD	# <cjk>
+3-6850	U+8438	# <cjk>
+3-6851	U+8506	# <cjk>
+3-6852	U+83FB	# <cjk>
+3-6853	U+846D	# <cjk>
+3-6854	U+842A	# <cjk>
+3-6855	U+843C	# <cjk>
+3-6856	U+855A	# <cjk>
+3-6857	U+8484	# <cjk>
+3-6858	U+8477	# <cjk>
+3-6859	U+846B	# <cjk>
+3-685A	U+84AD	# <cjk>
+3-685B	U+846E	# <cjk>
+3-685C	U+8482	# <cjk>
+3-685D	U+8469	# <cjk>
+3-685E	U+8446	# <cjk>
+3-685F	U+842C	# <cjk>
+3-6860	U+846F	# <cjk>
+3-6861	U+8479	# <cjk>
+3-6862	U+8435	# <cjk>
+3-6863	U+84CA	# <cjk>
+3-6864	U+8462	# <cjk>
+3-6865	U+84B9	# <cjk>
+3-6866	U+84BF	# <cjk>
+3-6867	U+849F	# <cjk>
+3-6868	U+84D9	# <cjk>
+3-6869	U+84CD	# <cjk>
+3-686A	U+84BB	# <cjk>
+3-686B	U+84DA	# <cjk>
+3-686C	U+84D0	# <cjk>
+3-686D	U+84C1	# <cjk>
+3-686E	U+84C6	# <cjk>
+3-686F	U+84D6	# <cjk>
+3-6870	U+84A1	# <cjk>
+3-6871	U+8521	# <cjk>
+3-6872	U+84FF	# <cjk>
+3-6873	U+84F4	# <cjk>
+3-6874	U+8517	# <cjk>
+3-6875	U+8518	# <cjk>
+3-6876	U+852C	# <cjk>
+3-6877	U+851F	# <cjk>
+3-6878	U+8515	# <cjk>
+3-6879	U+8514	# <cjk>
+3-687A	U+84FC	# <cjk>
+3-687B	U+8540	# <cjk>
+3-687C	U+8563	# <cjk>
+3-687D	U+8558	# <cjk>
+3-687E	U+8548	# <cjk>
+3-6921	U+8541	# <cjk>
+3-6922	U+8602	# <cjk>
+3-6923	U+854B	# <cjk>
+3-6924	U+8555	# <cjk>
+3-6925	U+8580	# <cjk>
+3-6926	U+85A4	# <cjk>
+3-6927	U+8588	# <cjk>
+3-6928	U+8591	# <cjk>
+3-6929	U+858A	# <cjk>
+3-692A	U+85A8	# <cjk>
+3-692B	U+856D	# <cjk>
+3-692C	U+8594	# <cjk>
+3-692D	U+859B	# <cjk>
+3-692E	U+85EA	# <cjk>
+3-692F	U+8587	# <cjk>
+3-6930	U+859C	# <cjk>
+3-6931	U+8577	# <cjk>
+3-6932	U+857E	# <cjk>
+3-6933	U+8590	# <cjk>
+3-6934	U+85C9	# <cjk>
+3-6935	U+85BA	# <cjk>
+3-6936	U+85CF	# <cjk>
+3-6937	U+85B9	# <cjk>
+3-6938	U+85D0	# <cjk>
+3-6939	U+85D5	# <cjk>
+3-693A	U+85DD	# <cjk>
+3-693B	U+85E5	# <cjk>
+3-693C	U+85DC	# <cjk>
+3-693D	U+85F9	# <cjk>
+3-693E	U+860A	# <cjk>
+3-693F	U+8613	# <cjk>
+3-6940	U+860B	# <cjk>
+3-6941	U+85FE	# <cjk>
+3-6942	U+85FA	# <cjk>
+3-6943	U+8606	# <cjk>
+3-6944	U+8622	# <cjk>
+3-6945	U+861A	# <cjk>
+3-6946	U+8630	# <cjk>
+3-6947	U+863F	# <cjk>
+3-6948	U+864D	# <cjk>
+3-6949	U+4E55	# <cjk>
+3-694A	U+8654	# <cjk>
+3-694B	U+865F	# <cjk>
+3-694C	U+8667	# <cjk>
+3-694D	U+8671	# <cjk>
+3-694E	U+8693	# <cjk>
+3-694F	U+86A3	# <cjk>
+3-6950	U+86A9	# <cjk>
+3-6951	U+86AA	# <cjk>
+3-6952	U+868B	# <cjk>
+3-6953	U+868C	# <cjk>
+3-6954	U+86B6	# <cjk>
+3-6955	U+86AF	# <cjk>
+3-6956	U+86C4	# <cjk>
+3-6957	U+86C6	# <cjk>
+3-6958	U+86B0	# <cjk>
+3-6959	U+86C9	# <cjk>
+3-695A	U+8823	# <cjk>
+3-695B	U+86AB	# <cjk>
+3-695C	U+86D4	# <cjk>
+3-695D	U+86DE	# <cjk>
+3-695E	U+86E9	# <cjk>
+3-695F	U+86EC	# <cjk>
+3-6960	U+86DF	# <cjk>
+3-6961	U+86DB	# <cjk>
+3-6962	U+86EF	# <cjk>
+3-6963	U+8712	# <cjk>
+3-6964	U+8706	# <cjk>
+3-6965	U+8708	# <cjk>
+3-6966	U+8700	# <cjk>
+3-6967	U+8703	# <cjk>
+3-6968	U+86FB	# <cjk>
+3-6969	U+8711	# <cjk>
+3-696A	U+8709	# <cjk>
+3-696B	U+870D	# <cjk>
+3-696C	U+86F9	# <cjk>
+3-696D	U+870A	# <cjk>
+3-696E	U+8734	# <cjk>
+3-696F	U+873F	# <cjk>
+3-6970	U+8737	# <cjk>
+3-6971	U+873B	# <cjk>
+3-6972	U+8725	# <cjk>
+3-6973	U+8729	# <cjk>
+3-6974	U+871A	# <cjk>
+3-6975	U+8760	# <cjk>
+3-6976	U+875F	# <cjk>
+3-6977	U+8778	# <cjk>
+3-6978	U+874C	# <cjk>
+3-6979	U+874E	# <cjk>
+3-697A	U+8774	# <cjk>
+3-697B	U+8757	# <cjk>
+3-697C	U+8768	# <cjk>
+3-697D	U+876E	# <cjk>
+3-697E	U+8759	# <cjk>
+3-6A21	U+8753	# <cjk>
+3-6A22	U+8763	# <cjk>
+3-6A23	U+876A	# <cjk>
+3-6A24	U+8805	# <cjk>
+3-6A25	U+87A2	# <cjk>
+3-6A26	U+879F	# <cjk>
+3-6A27	U+8782	# <cjk>
+3-6A28	U+87AF	# <cjk>
+3-6A29	U+87CB	# <cjk>
+3-6A2A	U+87BD	# <cjk>
+3-6A2B	U+87C0	# <cjk>
+3-6A2C	U+87D0	# <cjk>
+3-6A2D	U+96D6	# <cjk>
+3-6A2E	U+87AB	# <cjk>
+3-6A2F	U+87C4	# <cjk>
+3-6A30	U+87B3	# <cjk>
+3-6A31	U+87C7	# <cjk>
+3-6A32	U+87C6	# <cjk>
+3-6A33	U+87BB	# <cjk>
+3-6A34	U+87EF	# <cjk>
+3-6A35	U+87F2	# <cjk>
+3-6A36	U+87E0	# <cjk>
+3-6A37	U+880F	# <cjk>
+3-6A38	U+880D	# <cjk>
+3-6A39	U+87FE	# <cjk>
+3-6A3A	U+87F6	# <cjk>
+3-6A3B	U+87F7	# <cjk>
+3-6A3C	U+880E	# <cjk>
+3-6A3D	U+87D2	# <cjk>
+3-6A3E	U+8811	# <cjk>
+3-6A3F	U+8816	# <cjk>
+3-6A40	U+8815	# <cjk>
+3-6A41	U+8822	# <cjk>
+3-6A42	U+8821	# <cjk>
+3-6A43	U+8831	# <cjk>
+3-6A44	U+8836	# <cjk>
+3-6A45	U+8839	# <cjk>
+3-6A46	U+8827	# <cjk>
+3-6A47	U+883B	# <cjk>
+3-6A48	U+8844	# <cjk>
+3-6A49	U+8842	# <cjk>
+3-6A4A	U+8852	# <cjk>
+3-6A4B	U+8859	# <cjk>
+3-6A4C	U+885E	# <cjk>
+3-6A4D	U+8862	# <cjk>
+3-6A4E	U+886B	# <cjk>
+3-6A4F	U+8881	# <cjk>
+3-6A50	U+887E	# <cjk>
+3-6A51	U+889E	# <cjk>
+3-6A52	U+8875	# <cjk>
+3-6A53	U+887D	# <cjk>
+3-6A54	U+88B5	# <cjk>
+3-6A55	U+8872	# <cjk>
+3-6A56	U+8882	# <cjk>
+3-6A57	U+8897	# <cjk>
+3-6A58	U+8892	# <cjk>
+3-6A59	U+88AE	# <cjk>
+3-6A5A	U+8899	# <cjk>
+3-6A5B	U+88A2	# <cjk>
+3-6A5C	U+888D	# <cjk>
+3-6A5D	U+88A4	# <cjk>
+3-6A5E	U+88B0	# <cjk>
+3-6A5F	U+88BF	# <cjk>
+3-6A60	U+88B1	# <cjk>
+3-6A61	U+88C3	# <cjk>
+3-6A62	U+88C4	# <cjk>
+3-6A63	U+88D4	# <cjk>
+3-6A64	U+88D8	# <cjk>
+3-6A65	U+88D9	# <cjk>
+3-6A66	U+88DD	# <cjk>
+3-6A67	U+88F9	# <cjk>
+3-6A68	U+8902	# <cjk>
+3-6A69	U+88FC	# <cjk>
+3-6A6A	U+88F4	# <cjk>
+3-6A6B	U+88E8	# <cjk>
+3-6A6C	U+88F2	# <cjk>
+3-6A6D	U+8904	# <cjk>
+3-6A6E	U+890C	# <cjk>
+3-6A6F	U+890A	# <cjk>
+3-6A70	U+8913	# <cjk>
+3-6A71	U+8943	# <cjk>
+3-6A72	U+891E	# <cjk>
+3-6A73	U+8925	# <cjk>
+3-6A74	U+892A	# <cjk>
+3-6A75	U+892B	# <cjk>
+3-6A76	U+8941	# <cjk>
+3-6A77	U+8944	# <cjk>
+3-6A78	U+893B	# <cjk>
+3-6A79	U+8936	# <cjk>
+3-6A7A	U+8938	# <cjk>
+3-6A7B	U+894C	# <cjk>
+3-6A7C	U+891D	# <cjk>
+3-6A7D	U+8960	# <cjk>
+3-6A7E	U+895E	# <cjk>
+3-6B21	U+8966	# <cjk>
+3-6B22	U+8964	# <cjk>
+3-6B23	U+896D	# <cjk>
+3-6B24	U+896A	# <cjk>
+3-6B25	U+896F	# <cjk>
+3-6B26	U+8974	# <cjk>
+3-6B27	U+8977	# <cjk>
+3-6B28	U+897E	# <cjk>
+3-6B29	U+8983	# <cjk>
+3-6B2A	U+8988	# <cjk>
+3-6B2B	U+898A	# <cjk>
+3-6B2C	U+8993	# <cjk>
+3-6B2D	U+8998	# <cjk>
+3-6B2E	U+89A1	# <cjk>
+3-6B2F	U+89A9	# <cjk>
+3-6B30	U+89A6	# <cjk>
+3-6B31	U+89AC	# <cjk>
+3-6B32	U+89AF	# <cjk>
+3-6B33	U+89B2	# <cjk>
+3-6B34	U+89BA	# <cjk>
+3-6B35	U+89BD	# <cjk>
+3-6B36	U+89BF	# <cjk>
+3-6B37	U+89C0	# <cjk>
+3-6B38	U+89DA	# <cjk>
+3-6B39	U+89DC	# <cjk>
+3-6B3A	U+89DD	# <cjk>
+3-6B3B	U+89E7	# <cjk>
+3-6B3C	U+89F4	# <cjk>
+3-6B3D	U+89F8	# <cjk>
+3-6B3E	U+8A03	# <cjk>
+3-6B3F	U+8A16	# <cjk>
+3-6B40	U+8A10	# <cjk>
+3-6B41	U+8A0C	# <cjk>
+3-6B42	U+8A1B	# <cjk>
+3-6B43	U+8A1D	# <cjk>
+3-6B44	U+8A25	# <cjk>
+3-6B45	U+8A36	# <cjk>
+3-6B46	U+8A41	# <cjk>
+3-6B47	U+8A5B	# <cjk>
+3-6B48	U+8A52	# <cjk>
+3-6B49	U+8A46	# <cjk>
+3-6B4A	U+8A48	# <cjk>
+3-6B4B	U+8A7C	# <cjk>
+3-6B4C	U+8A6D	# <cjk>
+3-6B4D	U+8A6C	# <cjk>
+3-6B4E	U+8A62	# <cjk>
+3-6B4F	U+8A85	# <cjk>
+3-6B50	U+8A82	# <cjk>
+3-6B51	U+8A84	# <cjk>
+3-6B52	U+8AA8	# <cjk>
+3-6B53	U+8AA1	# <cjk>
+3-6B54	U+8A91	# <cjk>
+3-6B55	U+8AA5	# <cjk>
+3-6B56	U+8AA6	# <cjk>
+3-6B57	U+8A9A	# <cjk>
+3-6B58	U+8AA3	# <cjk>
+3-6B59	U+8AC4	# <cjk>
+3-6B5A	U+8ACD	# <cjk>
+3-6B5B	U+8AC2	# <cjk>
+3-6B5C	U+8ADA	# <cjk>
+3-6B5D	U+8AEB	# <cjk>
+3-6B5E	U+8AF3	# <cjk>
+3-6B5F	U+8AE7	# <cjk>
+3-6B60	U+8AE4	# <cjk>
+3-6B61	U+8AF1	# <cjk>
+3-6B62	U+8B14	# <cjk>
+3-6B63	U+8AE0	# <cjk>
+3-6B64	U+8AE2	# <cjk>
+3-6B65	U+8AF7	# <cjk>
+3-6B66	U+8ADE	# <cjk>
+3-6B67	U+8ADB	# <cjk>
+3-6B68	U+8B0C	# <cjk>
+3-6B69	U+8B07	# <cjk>
+3-6B6A	U+8B1A	# <cjk>
+3-6B6B	U+8AE1	# <cjk>
+3-6B6C	U+8B16	# <cjk>
+3-6B6D	U+8B10	# <cjk>
+3-6B6E	U+8B17	# <cjk>
+3-6B6F	U+8B20	# <cjk>
+3-6B70	U+8B33	# <cjk>
+3-6B71	U+97AB	# <cjk>
+3-6B72	U+8B26	# <cjk>
+3-6B73	U+8B2B	# <cjk>
+3-6B74	U+8B3E	# <cjk>
+3-6B75	U+8B28	# <cjk>
+3-6B76	U+8B41	# <cjk>
+3-6B77	U+8B4C	# <cjk>
+3-6B78	U+8B4F	# <cjk>
+3-6B79	U+8B4E	# <cjk>
+3-6B7A	U+8B49	# <cjk>
+3-6B7B	U+8B56	# <cjk>
+3-6B7C	U+8B5B	# <cjk>
+3-6B7D	U+8B5A	# <cjk>
+3-6B7E	U+8B6B	# <cjk>
+3-6C21	U+8B5F	# <cjk>
+3-6C22	U+8B6C	# <cjk>
+3-6C23	U+8B6F	# <cjk>
+3-6C24	U+8B74	# <cjk>
+3-6C25	U+8B7D	# <cjk>
+3-6C26	U+8B80	# <cjk>
+3-6C27	U+8B8C	# <cjk>
+3-6C28	U+8B8E	# <cjk>
+3-6C29	U+8B92	# <cjk>
+3-6C2A	U+8B93	# <cjk>
+3-6C2B	U+8B96	# <cjk>
+3-6C2C	U+8B99	# <cjk>
+3-6C2D	U+8B9A	# <cjk>
+3-6C2E	U+8C3A	# <cjk>
+3-6C2F	U+8C41	# <cjk>
+3-6C30	U+8C3F	# <cjk>
+3-6C31	U+8C48	# <cjk>
+3-6C32	U+8C4C	# <cjk>
+3-6C33	U+8C4E	# <cjk>
+3-6C34	U+8C50	# <cjk>
+3-6C35	U+8C55	# <cjk>
+3-6C36	U+8C62	# <cjk>
+3-6C37	U+8C6C	# <cjk>
+3-6C38	U+8C78	# <cjk>
+3-6C39	U+8C7A	# <cjk>
+3-6C3A	U+8C82	# <cjk>
+3-6C3B	U+8C89	# <cjk>
+3-6C3C	U+8C85	# <cjk>
+3-6C3D	U+8C8A	# <cjk>
+3-6C3E	U+8C8D	# <cjk>
+3-6C3F	U+8C8E	# <cjk>
+3-6C40	U+8C94	# <cjk>
+3-6C41	U+8C7C	# <cjk>
+3-6C42	U+8C98	# <cjk>
+3-6C43	U+621D	# <cjk>
+3-6C44	U+8CAD	# <cjk>
+3-6C45	U+8CAA	# <cjk>
+3-6C46	U+8CBD	# <cjk>
+3-6C47	U+8CB2	# <cjk>
+3-6C48	U+8CB3	# <cjk>
+3-6C49	U+8CAE	# <cjk>
+3-6C4A	U+8CB6	# <cjk>
+3-6C4B	U+8CC8	# <cjk>
+3-6C4C	U+8CC1	# <cjk>
+3-6C4D	U+8CE4	# <cjk>
+3-6C4E	U+8CE3	# <cjk>
+3-6C4F	U+8CDA	# <cjk>
+3-6C50	U+8CFD	# <cjk>
+3-6C51	U+8CFA	# <cjk>
+3-6C52	U+8CFB	# <cjk>
+3-6C53	U+8D04	# <cjk>
+3-6C54	U+8D05	# <cjk>
+3-6C55	U+8D0A	# <cjk>
+3-6C56	U+8D07	# <cjk>
+3-6C57	U+8D0F	# <cjk>
+3-6C58	U+8D0D	# <cjk>
+3-6C59	U+8D10	# <cjk>
+3-6C5A	U+9F4E	# <cjk>
+3-6C5B	U+8D13	# <cjk>
+3-6C5C	U+8CCD	# <cjk>
+3-6C5D	U+8D14	# <cjk>
+3-6C5E	U+8D16	# <cjk>
+3-6C5F	U+8D67	# <cjk>
+3-6C60	U+8D6D	# <cjk>
+3-6C61	U+8D71	# <cjk>
+3-6C62	U+8D73	# <cjk>
+3-6C63	U+8D81	# <cjk>
+3-6C64	U+8D99	# <cjk>
+3-6C65	U+8DC2	# <cjk>
+3-6C66	U+8DBE	# <cjk>
+3-6C67	U+8DBA	# <cjk>
+3-6C68	U+8DCF	# <cjk>
+3-6C69	U+8DDA	# <cjk>
+3-6C6A	U+8DD6	# <cjk>
+3-6C6B	U+8DCC	# <cjk>
+3-6C6C	U+8DDB	# <cjk>
+3-6C6D	U+8DCB	# <cjk>
+3-6C6E	U+8DEA	# <cjk>
+3-6C6F	U+8DEB	# <cjk>
+3-6C70	U+8DDF	# <cjk>
+3-6C71	U+8DE3	# <cjk>
+3-6C72	U+8DFC	# <cjk>
+3-6C73	U+8E08	# <cjk>
+3-6C74	U+8E09	# <cjk>
+3-6C75	U+8DFF	# <cjk>
+3-6C76	U+8E1D	# <cjk>
+3-6C77	U+8E1E	# <cjk>
+3-6C78	U+8E10	# <cjk>
+3-6C79	U+8E1F	# <cjk>
+3-6C7A	U+8E42	# <cjk>
+3-6C7B	U+8E35	# <cjk>
+3-6C7C	U+8E30	# <cjk>
+3-6C7D	U+8E34	# <cjk>
+3-6C7E	U+8E4A	# <cjk>
+3-6D21	U+8E47	# <cjk>
+3-6D22	U+8E49	# <cjk>
+3-6D23	U+8E4C	# <cjk>
+3-6D24	U+8E50	# <cjk>
+3-6D25	U+8E48	# <cjk>
+3-6D26	U+8E59	# <cjk>
+3-6D27	U+8E64	# <cjk>
+3-6D28	U+8E60	# <cjk>
+3-6D29	U+8E2A	# <cjk>
+3-6D2A	U+8E63	# <cjk>
+3-6D2B	U+8E55	# <cjk>
+3-6D2C	U+8E76	# <cjk>
+3-6D2D	U+8E72	# <cjk>
+3-6D2E	U+8E7C	# <cjk>
+3-6D2F	U+8E81	# <cjk>
+3-6D30	U+8E87	# <cjk>
+3-6D31	U+8E85	# <cjk>
+3-6D32	U+8E84	# <cjk>
+3-6D33	U+8E8B	# <cjk>
+3-6D34	U+8E8A	# <cjk>
+3-6D35	U+8E93	# <cjk>
+3-6D36	U+8E91	# <cjk>
+3-6D37	U+8E94	# <cjk>
+3-6D38	U+8E99	# <cjk>
+3-6D39	U+8EAA	# <cjk>
+3-6D3A	U+8EA1	# <cjk>
+3-6D3B	U+8EAC	# <cjk>
+3-6D3C	U+8EB0	# <cjk>
+3-6D3D	U+8EC6	# <cjk>
+3-6D3E	U+8EB1	# <cjk>
+3-6D3F	U+8EBE	# <cjk>
+3-6D40	U+8EC5	# <cjk>
+3-6D41	U+8EC8	# <cjk>
+3-6D42	U+8ECB	# <cjk>
+3-6D43	U+8EDB	# <cjk>
+3-6D44	U+8EE3	# <cjk>
+3-6D45	U+8EFC	# <cjk>
+3-6D46	U+8EFB	# <cjk>
+3-6D47	U+8EEB	# <cjk>
+3-6D48	U+8EFE	# <cjk>
+3-6D49	U+8F0A	# <cjk>
+3-6D4A	U+8F05	# <cjk>
+3-6D4B	U+8F15	# <cjk>
+3-6D4C	U+8F12	# <cjk>
+3-6D4D	U+8F19	# <cjk>
+3-6D4E	U+8F13	# <cjk>
+3-6D4F	U+8F1C	# <cjk>
+3-6D50	U+8F1F	# <cjk>
+3-6D51	U+8F1B	# <cjk>
+3-6D52	U+8F0C	# <cjk>
+3-6D53	U+8F26	# <cjk>
+3-6D54	U+8F33	# <cjk>
+3-6D55	U+8F3B	# <cjk>
+3-6D56	U+8F39	# <cjk>
+3-6D57	U+8F45	# <cjk>
+3-6D58	U+8F42	# <cjk>
+3-6D59	U+8F3E	# <cjk>
+3-6D5A	U+8F4C	# <cjk>
+3-6D5B	U+8F49	# <cjk>
+3-6D5C	U+8F46	# <cjk>
+3-6D5D	U+8F4E	# <cjk>
+3-6D5E	U+8F57	# <cjk>
+3-6D5F	U+8F5C	# <cjk>
+3-6D60	U+8F62	# <cjk>
+3-6D61	U+8F63	# <cjk>
+3-6D62	U+8F64	# <cjk>
+3-6D63	U+8F9C	# <cjk>
+3-6D64	U+8F9F	# <cjk>
+3-6D65	U+8FA3	# <cjk>
+3-6D66	U+8FAD	# <cjk>
+3-6D67	U+8FAF	# <cjk>
+3-6D68	U+8FB7	# <cjk>
+3-6D69	U+8FDA	# <cjk>
+3-6D6A	U+8FE5	# <cjk>
+3-6D6B	U+8FE2	# <cjk>
+3-6D6C	U+8FEA	# <cjk>
+3-6D6D	U+8FEF	# <cjk>
+3-6D6E	U+9087	# <cjk>
+3-6D6F	U+8FF4	# <cjk>
+3-6D70	U+9005	# <cjk>
+3-6D71	U+8FF9	# <cjk>
+3-6D72	U+8FFA	# <cjk>
+3-6D73	U+9011	# <cjk>
+3-6D74	U+9015	# <cjk>
+3-6D75	U+9021	# <cjk>
+3-6D76	U+900D	# <cjk>
+3-6D77	U+901E	# <cjk>
+3-6D78	U+9016	# <cjk>
+3-6D79	U+900B	# <cjk>
+3-6D7A	U+9027	# <cjk>
+3-6D7B	U+9036	# <cjk>
+3-6D7C	U+9035	# <cjk>
+3-6D7D	U+9039	# <cjk>
+3-6D7E	U+8FF8	# <cjk>
+3-6E21	U+904F	# <cjk>
+3-6E22	U+9050	# <cjk>
+3-6E23	U+9051	# <cjk>
+3-6E24	U+9052	# <cjk>
+3-6E25	U+900E	# <cjk>
+3-6E26	U+9049	# <cjk>
+3-6E27	U+903E	# <cjk>
+3-6E28	U+9056	# <cjk>
+3-6E29	U+9058	# <cjk>
+3-6E2A	U+905E	# <cjk>
+3-6E2B	U+9068	# <cjk>
+3-6E2C	U+906F	# <cjk>
+3-6E2D	U+9076	# <cjk>
+3-6E2E	U+96A8	# <cjk>
+3-6E2F	U+9072	# <cjk>
+3-6E30	U+9082	# <cjk>
+3-6E31	U+907D	# <cjk>
+3-6E32	U+9081	# <cjk>
+3-6E33	U+9080	# <cjk>
+3-6E34	U+908A	# <cjk>
+3-6E35	U+9089	# <cjk>
+3-6E36	U+908F	# <cjk>
+3-6E37	U+90A8	# <cjk>
+3-6E38	U+90AF	# <cjk>
+3-6E39	U+90B1	# <cjk>
+3-6E3A	U+90B5	# <cjk>
+3-6E3B	U+90E2	# <cjk>
+3-6E3C	U+90E4	# <cjk>
+3-6E3D	U+6248	# <cjk>
+3-6E3E	U+90DB	# <cjk>
+3-6E3F	U+9102	# <cjk>
+3-6E40	U+9112	# <cjk>
+3-6E41	U+9119	# <cjk>
+3-6E42	U+9132	# <cjk>
+3-6E43	U+9130	# <cjk>
+3-6E44	U+914A	# <cjk>
+3-6E45	U+9156	# <cjk>
+3-6E46	U+9158	# <cjk>
+3-6E47	U+9163	# <cjk>
+3-6E48	U+9165	# <cjk>
+3-6E49	U+9169	# <cjk>
+3-6E4A	U+9173	# <cjk>
+3-6E4B	U+9172	# <cjk>
+3-6E4C	U+918B	# <cjk>
+3-6E4D	U+9189	# <cjk>
+3-6E4E	U+9182	# <cjk>
+3-6E4F	U+91A2	# <cjk>
+3-6E50	U+91AB	# <cjk>
+3-6E51	U+91AF	# <cjk>
+3-6E52	U+91AA	# <cjk>
+3-6E53	U+91B5	# <cjk>
+3-6E54	U+91B4	# <cjk>
+3-6E55	U+91BA	# <cjk>
+3-6E56	U+91C0	# <cjk>
+3-6E57	U+91C1	# <cjk>
+3-6E58	U+91C9	# <cjk>
+3-6E59	U+91CB	# <cjk>
+3-6E5A	U+91D0	# <cjk>
+3-6E5B	U+91D6	# <cjk>
+3-6E5C	U+91DF	# <cjk>
+3-6E5D	U+91E1	# <cjk>
+3-6E5E	U+91DB	# <cjk>
+3-6E5F	U+91FC	# <cjk>
+3-6E60	U+91F5	# <cjk>
+3-6E61	U+91F6	# <cjk>
+3-6E62	U+921E	# <cjk>
+3-6E63	U+91FF	# <cjk>
+3-6E64	U+9214	# <cjk>
+3-6E65	U+922C	# <cjk>
+3-6E66	U+9215	# <cjk>
+3-6E67	U+9211	# <cjk>
+3-6E68	U+925E	# <cjk>
+3-6E69	U+9257	# <cjk>
+3-6E6A	U+9245	# <cjk>
+3-6E6B	U+9249	# <cjk>
+3-6E6C	U+9264	# <cjk>
+3-6E6D	U+9248	# <cjk>
+3-6E6E	U+9295	# <cjk>
+3-6E6F	U+923F	# <cjk>
+3-6E70	U+924B	# <cjk>
+3-6E71	U+9250	# <cjk>
+3-6E72	U+929C	# <cjk>
+3-6E73	U+9296	# <cjk>
+3-6E74	U+9293	# <cjk>
+3-6E75	U+929B	# <cjk>
+3-6E76	U+925A	# <cjk>
+3-6E77	U+92CF	# <cjk>
+3-6E78	U+92B9	# <cjk>
+3-6E79	U+92B7	# <cjk>
+3-6E7A	U+92E9	# <cjk>
+3-6E7B	U+930F	# <cjk>
+3-6E7C	U+92FA	# <cjk>
+3-6E7D	U+9344	# <cjk>
+3-6E7E	U+932E	# <cjk>
+3-6F21	U+9319	# <cjk>
+3-6F22	U+9322	# <cjk>
+3-6F23	U+931A	# <cjk>
+3-6F24	U+9323	# <cjk>
+3-6F25	U+933A	# <cjk>
+3-6F26	U+9335	# <cjk>
+3-6F27	U+933B	# <cjk>
+3-6F28	U+935C	# <cjk>
+3-6F29	U+9360	# <cjk>
+3-6F2A	U+937C	# <cjk>
+3-6F2B	U+936E	# <cjk>
+3-6F2C	U+9356	# <cjk>
+3-6F2D	U+93B0	# <cjk>
+3-6F2E	U+93AC	# <cjk>
+3-6F2F	U+93AD	# <cjk>
+3-6F30	U+9394	# <cjk>
+3-6F31	U+93B9	# <cjk>
+3-6F32	U+93D6	# <cjk>
+3-6F33	U+93D7	# <cjk>
+3-6F34	U+93E8	# <cjk>
+3-6F35	U+93E5	# <cjk>
+3-6F36	U+93D8	# <cjk>
+3-6F37	U+93C3	# <cjk>
+3-6F38	U+93DD	# <cjk>
+3-6F39	U+93D0	# <cjk>
+3-6F3A	U+93C8	# <cjk>
+3-6F3B	U+93E4	# <cjk>
+3-6F3C	U+941A	# <cjk>
+3-6F3D	U+9414	# <cjk>
+3-6F3E	U+9413	# <cjk>
+3-6F3F	U+9403	# <cjk>
+3-6F40	U+9407	# <cjk>
+3-6F41	U+9410	# <cjk>
+3-6F42	U+9436	# <cjk>
+3-6F43	U+942B	# <cjk>
+3-6F44	U+9435	# <cjk>
+3-6F45	U+9421	# <cjk>
+3-6F46	U+943A	# <cjk>
+3-6F47	U+9441	# <cjk>
+3-6F48	U+9452	# <cjk>
+3-6F49	U+9444	# <cjk>
+3-6F4A	U+945B	# <cjk>
+3-6F4B	U+9460	# <cjk>
+3-6F4C	U+9462	# <cjk>
+3-6F4D	U+945E	# <cjk>
+3-6F4E	U+946A	# <cjk>
+3-6F4F	U+9229	# <cjk>
+3-6F50	U+9470	# <cjk>
+3-6F51	U+9475	# <cjk>
+3-6F52	U+9477	# <cjk>
+3-6F53	U+947D	# <cjk>
+3-6F54	U+945A	# <cjk>
+3-6F55	U+947C	# <cjk>
+3-6F56	U+947E	# <cjk>
+3-6F57	U+9481	# <cjk>
+3-6F58	U+947F	# <cjk>
+3-6F59	U+9582	# <cjk>
+3-6F5A	U+9587	# <cjk>
+3-6F5B	U+958A	# <cjk>
+3-6F5C	U+9594	# <cjk>
+3-6F5D	U+9596	# <cjk>
+3-6F5E	U+9598	# <cjk>
+3-6F5F	U+9599	# <cjk>
+3-6F60	U+95A0	# <cjk>
+3-6F61	U+95A8	# <cjk>
+3-6F62	U+95A7	# <cjk>
+3-6F63	U+95AD	# <cjk>
+3-6F64	U+95BC	# <cjk>
+3-6F65	U+95BB	# <cjk>
+3-6F66	U+95B9	# <cjk>
+3-6F67	U+95BE	# <cjk>
+3-6F68	U+95CA	# <cjk>
+3-6F69	U+6FF6	# <cjk>
+3-6F6A	U+95C3	# <cjk>
+3-6F6B	U+95CD	# <cjk>
+3-6F6C	U+95CC	# <cjk>
+3-6F6D	U+95D5	# <cjk>
+3-6F6E	U+95D4	# <cjk>
+3-6F6F	U+95D6	# <cjk>
+3-6F70	U+95DC	# <cjk>
+3-6F71	U+95E1	# <cjk>
+3-6F72	U+95E5	# <cjk>
+3-6F73	U+95E2	# <cjk>
+3-6F74	U+9621	# <cjk>
+3-6F75	U+9628	# <cjk>
+3-6F76	U+962E	# <cjk>
+3-6F77	U+962F	# <cjk>
+3-6F78	U+9642	# <cjk>
+3-6F79	U+964C	# <cjk>
+3-6F7A	U+964F	# <cjk>
+3-6F7B	U+964B	# <cjk>
+3-6F7C	U+9677	# <cjk>
+3-6F7D	U+965C	# <cjk>
+3-6F7E	U+965E	# <cjk>
+3-7021	U+965D	# <cjk>
+3-7022	U+965F	# <cjk>
+3-7023	U+9666	# <cjk>
+3-7024	U+9672	# <cjk>
+3-7025	U+966C	# <cjk>
+3-7026	U+968D	# <cjk>
+3-7027	U+9698	# <cjk>
+3-7028	U+9695	# <cjk>
+3-7029	U+9697	# <cjk>
+3-702A	U+96AA	# <cjk>
+3-702B	U+96A7	# <cjk>
+3-702C	U+96B1	# <cjk>
+3-702D	U+96B2	# <cjk>
+3-702E	U+96B0	# <cjk>
+3-702F	U+96B4	# <cjk>
+3-7030	U+96B6	# <cjk>
+3-7031	U+96B8	# <cjk>
+3-7032	U+96B9	# <cjk>
+3-7033	U+96CE	# <cjk>
+3-7034	U+96CB	# <cjk>
+3-7035	U+96C9	# <cjk>
+3-7036	U+96CD	# <cjk>
+3-7037	U+894D	# <cjk>
+3-7038	U+96DC	# <cjk>
+3-7039	U+970D	# <cjk>
+3-703A	U+96D5	# <cjk>
+3-703B	U+96F9	# <cjk>
+3-703C	U+9704	# <cjk>
+3-703D	U+9706	# <cjk>
+3-703E	U+9708	# <cjk>
+3-703F	U+9713	# <cjk>
+3-7040	U+970E	# <cjk>
+3-7041	U+9711	# <cjk>
+3-7042	U+970F	# <cjk>
+3-7043	U+9716	# <cjk>
+3-7044	U+9719	# <cjk>
+3-7045	U+9724	# <cjk>
+3-7046	U+972A	# <cjk>
+3-7047	U+9730	# <cjk>
+3-7048	U+9739	# <cjk>
+3-7049	U+973D	# <cjk>
+3-704A	U+973E	# <cjk>
+3-704B	U+9744	# <cjk>
+3-704C	U+9746	# <cjk>
+3-704D	U+9748	# <cjk>
+3-704E	U+9742	# <cjk>
+3-704F	U+9749	# <cjk>
+3-7050	U+975C	# <cjk>
+3-7051	U+9760	# <cjk>
+3-7052	U+9764	# <cjk>
+3-7053	U+9766	# <cjk>
+3-7054	U+9768	# <cjk>
+3-7055	U+52D2	# <cjk>
+3-7056	U+976B	# <cjk>
+3-7057	U+9771	# <cjk>
+3-7058	U+9779	# <cjk>
+3-7059	U+9785	# <cjk>
+3-705A	U+977C	# <cjk>
+3-705B	U+9781	# <cjk>
+3-705C	U+977A	# <cjk>
+3-705D	U+9786	# <cjk>
+3-705E	U+978B	# <cjk>
+3-705F	U+978F	# <cjk>
+3-7060	U+9790	# <cjk>
+3-7061	U+979C	# <cjk>
+3-7062	U+97A8	# <cjk>
+3-7063	U+97A6	# <cjk>
+3-7064	U+97A3	# <cjk>
+3-7065	U+97B3	# <cjk>
+3-7066	U+97B4	# <cjk>
+3-7067	U+97C3	# <cjk>
+3-7068	U+97C6	# <cjk>
+3-7069	U+97C8	# <cjk>
+3-706A	U+97CB	# <cjk>
+3-706B	U+97DC	# <cjk>
+3-706C	U+97ED	# <cjk>
+3-706D	U+9F4F	# <cjk>
+3-706E	U+97F2	# <cjk>
+3-706F	U+7ADF	# <cjk>
+3-7070	U+97F6	# <cjk>
+3-7071	U+97F5	# <cjk>
+3-7072	U+980F	# <cjk>
+3-7073	U+980C	# <cjk>
+3-7074	U+9838	# <cjk>
+3-7075	U+9824	# <cjk>
+3-7076	U+9821	# <cjk>
+3-7077	U+9837	# <cjk>
+3-7078	U+983D	# <cjk>
+3-7079	U+9846	# <cjk>
+3-707A	U+984F	# <cjk>
+3-707B	U+984B	# <cjk>
+3-707C	U+986B	# <cjk>
+3-707D	U+986F	# <cjk>
+3-707E	U+9870	# <cjk>
+3-7121	U+9871	# <cjk>
+3-7122	U+9874	# <cjk>
+3-7123	U+9873	# <cjk>
+3-7124	U+98AA	# <cjk>
+3-7125	U+98AF	# <cjk>
+3-7126	U+98B1	# <cjk>
+3-7127	U+98B6	# <cjk>
+3-7128	U+98C4	# <cjk>
+3-7129	U+98C3	# <cjk>
+3-712A	U+98C6	# <cjk>
+3-712B	U+98E9	# <cjk>
+3-712C	U+98EB	# <cjk>
+3-712D	U+9903	# <cjk>
+3-712E	U+9909	# <cjk>
+3-712F	U+9912	# <cjk>
+3-7130	U+9914	# <cjk>
+3-7131	U+9918	# <cjk>
+3-7132	U+9921	# <cjk>
+3-7133	U+991D	# <cjk>
+3-7134	U+991E	# <cjk>
+3-7135	U+9924	# <cjk>
+3-7136	U+9920	# <cjk>
+3-7137	U+992C	# <cjk>
+3-7138	U+992E	# <cjk>
+3-7139	U+993D	# <cjk>
+3-713A	U+993E	# <cjk>
+3-713B	U+9942	# <cjk>
+3-713C	U+9949	# <cjk>
+3-713D	U+9945	# <cjk>
+3-713E	U+9950	# <cjk>
+3-713F	U+994B	# <cjk>
+3-7140	U+9951	# <cjk>
+3-7141	U+9952	# <cjk>
+3-7142	U+994C	# <cjk>
+3-7143	U+9955	# <cjk>
+3-7144	U+9997	# <cjk>
+3-7145	U+9998	# <cjk>
+3-7146	U+99A5	# <cjk>
+3-7147	U+99AD	# <cjk>
+3-7148	U+99AE	# <cjk>
+3-7149	U+99BC	# <cjk>
+3-714A	U+99DF	# <cjk>
+3-714B	U+99DB	# <cjk>
+3-714C	U+99DD	# <cjk>
+3-714D	U+99D8	# <cjk>
+3-714E	U+99D1	# <cjk>
+3-714F	U+99ED	# <cjk>
+3-7150	U+99EE	# <cjk>
+3-7151	U+99F1	# <cjk>
+3-7152	U+99F2	# <cjk>
+3-7153	U+99FB	# <cjk>
+3-7154	U+99F8	# <cjk>
+3-7155	U+9A01	# <cjk>
+3-7156	U+9A0F	# <cjk>
+3-7157	U+9A05	# <cjk>
+3-7158	U+99E2	# <cjk>
+3-7159	U+9A19	# <cjk>
+3-715A	U+9A2B	# <cjk>
+3-715B	U+9A37	# <cjk>
+3-715C	U+9A45	# <cjk>
+3-715D	U+9A42	# <cjk>
+3-715E	U+9A40	# <cjk>
+3-715F	U+9A43	# <cjk>
+3-7160	U+9A3E	# <cjk>
+3-7161	U+9A55	# <cjk>
+3-7162	U+9A4D	# <cjk>
+3-7163	U+9A5B	# <cjk>
+3-7164	U+9A57	# <cjk>
+3-7165	U+9A5F	# <cjk>
+3-7166	U+9A62	# <cjk>
+3-7167	U+9A65	# <cjk>
+3-7168	U+9A64	# <cjk>
+3-7169	U+9A69	# <cjk>
+3-716A	U+9A6B	# <cjk>
+3-716B	U+9A6A	# <cjk>
+3-716C	U+9AAD	# <cjk>
+3-716D	U+9AB0	# <cjk>
+3-716E	U+9ABC	# <cjk>
+3-716F	U+9AC0	# <cjk>
+3-7170	U+9ACF	# <cjk>
+3-7171	U+9AD1	# <cjk>
+3-7172	U+9AD3	# <cjk>
+3-7173	U+9AD4	# <cjk>
+3-7174	U+9ADE	# <cjk>
+3-7175	U+9ADF	# <cjk>
+3-7176	U+9AE2	# <cjk>
+3-7177	U+9AE3	# <cjk>
+3-7178	U+9AE6	# <cjk>
+3-7179	U+9AEF	# <cjk>
+3-717A	U+9AEB	# <cjk>
+3-717B	U+9AEE	# <cjk>
+3-717C	U+9AF4	# <cjk>
+3-717D	U+9AF1	# <cjk>
+3-717E	U+9AF7	# <cjk>
+3-7221	U+9AFB	# <cjk>
+3-7222	U+9B06	# <cjk>
+3-7223	U+9B18	# <cjk>
+3-7224	U+9B1A	# <cjk>
+3-7225	U+9B1F	# <cjk>
+3-7226	U+9B22	# <cjk>
+3-7227	U+9B23	# <cjk>
+3-7228	U+9B25	# <cjk>
+3-7229	U+9B27	# <cjk>
+3-722A	U+9B28	# <cjk>
+3-722B	U+9B29	# <cjk>
+3-722C	U+9B2A	# <cjk>
+3-722D	U+9B2E	# <cjk>
+3-722E	U+9B2F	# <cjk>
+3-722F	U+9B32	# <cjk>
+3-7230	U+9B44	# <cjk>
+3-7231	U+9B43	# <cjk>
+3-7232	U+9B4F	# <cjk>
+3-7233	U+9B4D	# <cjk>
+3-7234	U+9B4E	# <cjk>
+3-7235	U+9B51	# <cjk>
+3-7236	U+9B58	# <cjk>
+3-7237	U+9B74	# <cjk>
+3-7238	U+9B93	# <cjk>
+3-7239	U+9B83	# <cjk>
+3-723A	U+9B91	# <cjk>
+3-723B	U+9B96	# <cjk>
+3-723C	U+9B97	# <cjk>
+3-723D	U+9B9F	# <cjk>
+3-723E	U+9BA0	# <cjk>
+3-723F	U+9BA8	# <cjk>
+3-7240	U+9BB4	# <cjk>
+3-7241	U+9BC0	# <cjk>
+3-7242	U+9BCA	# <cjk>
+3-7243	U+9BB9	# <cjk>
+3-7244	U+9BC6	# <cjk>
+3-7245	U+9BCF	# <cjk>
+3-7246	U+9BD1	# <cjk>
+3-7247	U+9BD2	# <cjk>
+3-7248	U+9BE3	# <cjk>
+3-7249	U+9BE2	# <cjk>
+3-724A	U+9BE4	# <cjk>
+3-724B	U+9BD4	# <cjk>
+3-724C	U+9BE1	# <cjk>
+3-724D	U+9C3A	# <cjk>
+3-724E	U+9BF2	# <cjk>
+3-724F	U+9BF1	# <cjk>
+3-7250	U+9BF0	# <cjk>
+3-7251	U+9C15	# <cjk>
+3-7252	U+9C14	# <cjk>
+3-7253	U+9C09	# <cjk>
+3-7254	U+9C13	# <cjk>
+3-7255	U+9C0C	# <cjk>
+3-7256	U+9C06	# <cjk>
+3-7257	U+9C08	# <cjk>
+3-7258	U+9C12	# <cjk>
+3-7259	U+9C0A	# <cjk>
+3-725A	U+9C04	# <cjk>
+3-725B	U+9C2E	# <cjk>
+3-725C	U+9C1B	# <cjk>
+3-725D	U+9C25	# <cjk>
+3-725E	U+9C24	# <cjk>
+3-725F	U+9C21	# <cjk>
+3-7260	U+9C30	# <cjk>
+3-7261	U+9C47	# <cjk>
+3-7262	U+9C32	# <cjk>
+3-7263	U+9C46	# <cjk>
+3-7264	U+9C3E	# <cjk>
+3-7265	U+9C5A	# <cjk>
+3-7266	U+9C60	# <cjk>
+3-7267	U+9C67	# <cjk>
+3-7268	U+9C76	# <cjk>
+3-7269	U+9C78	# <cjk>
+3-726A	U+9CE7	# <cjk>
+3-726B	U+9CEC	# <cjk>
+3-726C	U+9CF0	# <cjk>
+3-726D	U+9D09	# <cjk>
+3-726E	U+9D08	# <cjk>
+3-726F	U+9CEB	# <cjk>
+3-7270	U+9D03	# <cjk>
+3-7271	U+9D06	# <cjk>
+3-7272	U+9D2A	# <cjk>
+3-7273	U+9D26	# <cjk>
+3-7274	U+9DAF	# <cjk>
+3-7275	U+9D23	# <cjk>
+3-7276	U+9D1F	# <cjk>
+3-7277	U+9D44	# <cjk>
+3-7278	U+9D15	# <cjk>
+3-7279	U+9D12	# <cjk>
+3-727A	U+9D41	# <cjk>
+3-727B	U+9D3F	# <cjk>
+3-727C	U+9D3E	# <cjk>
+3-727D	U+9D46	# <cjk>
+3-727E	U+9D48	# <cjk>
+3-7321	U+9D5D	# <cjk>
+3-7322	U+9D5E	# <cjk>
+3-7323	U+9D64	# <cjk>
+3-7324	U+9D51	# <cjk>
+3-7325	U+9D50	# <cjk>
+3-7326	U+9D59	# <cjk>
+3-7327	U+9D72	# <cjk>
+3-7328	U+9D89	# <cjk>
+3-7329	U+9D87	# <cjk>
+3-732A	U+9DAB	# <cjk>
+3-732B	U+9D6F	# <cjk>
+3-732C	U+9D7A	# <cjk>
+3-732D	U+9D9A	# <cjk>
+3-732E	U+9DA4	# <cjk>
+3-732F	U+9DA9	# <cjk>
+3-7330	U+9DB2	# <cjk>
+3-7331	U+9DC4	# <cjk>
+3-7332	U+9DC1	# <cjk>
+3-7333	U+9DBB	# <cjk>
+3-7334	U+9DB8	# <cjk>
+3-7335	U+9DBA	# <cjk>
+3-7336	U+9DC6	# <cjk>
+3-7337	U+9DCF	# <cjk>
+3-7338	U+9DC2	# <cjk>
+3-7339	U+9DD9	# <cjk>
+3-733A	U+9DD3	# <cjk>
+3-733B	U+9DF8	# <cjk>
+3-733C	U+9DE6	# <cjk>
+3-733D	U+9DED	# <cjk>
+3-733E	U+9DEF	# <cjk>
+3-733F	U+9DFD	# <cjk>
+3-7340	U+9E1A	# <cjk>
+3-7341	U+9E1B	# <cjk>
+3-7342	U+9E1E	# <cjk>
+3-7343	U+9E75	# <cjk>
+3-7344	U+9E79	# <cjk>
+3-7345	U+9E7D	# <cjk>
+3-7346	U+9E81	# <cjk>
+3-7347	U+9E88	# <cjk>
+3-7348	U+9E8B	# <cjk>
+3-7349	U+9E8C	# <cjk>
+3-734A	U+9E92	# <cjk>
+3-734B	U+9E95	# <cjk>
+3-734C	U+9E91	# <cjk>
+3-734D	U+9E9D	# <cjk>
+3-734E	U+9EA5	# <cjk>
+3-734F	U+9EA9	# <cjk>
+3-7350	U+9EB8	# <cjk>
+3-7351	U+9EAA	# <cjk>
+3-7352	U+9EAD	# <cjk>
+3-7353	U+9761	# <cjk>
+3-7354	U+9ECC	# <cjk>
+3-7355	U+9ECE	# <cjk>
+3-7356	U+9ECF	# <cjk>
+3-7357	U+9ED0	# <cjk>
+3-7358	U+9ED4	# <cjk>
+3-7359	U+9EDC	# <cjk>
+3-735A	U+9EDE	# <cjk>
+3-735B	U+9EDD	# <cjk>
+3-735C	U+9EE0	# <cjk>
+3-735D	U+9EE5	# <cjk>
+3-735E	U+9EE8	# <cjk>
+3-735F	U+9EEF	# <cjk>
+3-7360	U+9EF4	# <cjk>
+3-7361	U+9EF6	# <cjk>
+3-7362	U+9EF7	# <cjk>
+3-7363	U+9EF9	# <cjk>
+3-7364	U+9EFB	# <cjk>
+3-7365	U+9EFC	# <cjk>
+3-7366	U+9EFD	# <cjk>
+3-7367	U+9F07	# <cjk>
+3-7368	U+9F08	# <cjk>
+3-7369	U+76B7	# <cjk>
+3-736A	U+9F15	# <cjk>
+3-736B	U+9F21	# <cjk>
+3-736C	U+9F2C	# <cjk>
+3-736D	U+9F3E	# <cjk>
+3-736E	U+9F4A	# <cjk>
+3-736F	U+9F52	# <cjk>
+3-7370	U+9F54	# <cjk>
+3-7371	U+9F63	# <cjk>
+3-7372	U+9F5F	# <cjk>
+3-7373	U+9F60	# <cjk>
+3-7374	U+9F61	# <cjk>
+3-7375	U+9F66	# <cjk>
+3-7376	U+9F67	# <cjk>
+3-7377	U+9F6C	# <cjk>
+3-7378	U+9F6A	# <cjk>
+3-7379	U+9F77	# <cjk>
+3-737A	U+9F72	# <cjk>
+3-737B	U+9F76	# <cjk>
+3-737C	U+9F95	# <cjk>
+3-737D	U+9F9C	# <cjk>
+3-737E	U+9FA0	# <cjk>
+3-7421	U+582F	# <cjk>	[1983]
+3-7422	U+69C7	# <cjk>	[1983]
+3-7423	U+9059	# <cjk>	[1983]
+3-7424	U+7464	# <cjk>	[1983]
+3-7425	U+51DC	# <cjk>	[1990]
+3-7426	U+7199	# <cjk>	[1990]
+3-7427	U+5653	# <cjk> [2004]
+3-7428	U+5DE2	# <cjk>	[2000]
+3-7429	U+5E14	# <cjk>	[2000]
+3-742A	U+5E18	# <cjk>	[2000]
+3-742B	U+5E58	# <cjk>	[2000]
+3-742C	U+5E5E	# <cjk>	[2000]
+3-742D	U+5EBE	# <cjk>	[2000]
+3-742E	U+F928	# CJK COMPATIBILITY IDEOGRAPH-F928	[2000]
+3-742F	U+5ECB	# <cjk>	[2000]
+3-7430	U+5EF9	# <cjk>	[2000]
+3-7431	U+5F00	# <cjk>	[2000]
+3-7432	U+5F02	# <cjk>	[2000]
+3-7433	U+5F07	# <cjk>	[2000]
+3-7434	U+5F1D	# <cjk>	[2000]
+3-7435	U+5F23	# <cjk>	[2000]
+3-7436	U+5F34	# <cjk>	[2000]
+3-7437	U+5F36	# <cjk>	[2000]
+3-7438	U+5F3D	# <cjk>	[2000]
+3-7439	U+5F40	# <cjk>	[2000]
+3-743A	U+5F45	# <cjk>	[2000]
+3-743B	U+5F54	# <cjk>	[2000]
+3-743C	U+5F58	# <cjk>	[2000]
+3-743D	U+5F64	# <cjk>	[2000]
+3-743E	U+5F67	# <cjk>	[2000]
+3-743F	U+5F7D	# <cjk>	[2000]
+3-7440	U+5F89	# <cjk>	[2000]
+3-7441	U+5F9C	# <cjk>	[2000]
+3-7442	U+5FA7	# <cjk>	[2000]
+3-7443	U+5FAF	# <cjk>	[2000]
+3-7444	U+5FB5	# <cjk>	[2000]
+3-7445	U+5FB7	# <cjk>	[2000]
+3-7446	U+5FC9	# <cjk>	[2000]
+3-7447	U+5FDE	# <cjk>	[2000]
+3-7448	U+5FE1	# <cjk>	[2000]
+3-7449	U+5FE9	# <cjk>	[2000]
+3-744A	U+600D	# <cjk>	[2000]
+3-744B	U+6014	# <cjk>	[2000]
+3-744C	U+6018	# <cjk>	[2000]
+3-744D	U+6033	# <cjk>	[2000]
+3-744E	U+6035	# <cjk>	[2000]
+3-744F	U+6047	# <cjk>	[2000]
+3-7450	U+FA3D	# CJK COMPATIBILITY IDEOGRAPH-FA3D	[2000]	[Unicode3.2]
+3-7451	U+609D	# <cjk>	[2000]
+3-7452	U+609E	# <cjk>	[2000]
+3-7453	U+60CB	# <cjk>	[2000]
+3-7454	U+60D4	# <cjk>	[2000]
+3-7455	U+60D5	# <cjk>	[2000]
+3-7456	U+60DD	# <cjk>	[2000]
+3-7457	U+60F8	# <cjk>	[2000]
+3-7458	U+611C	# <cjk>	[2000]
+3-7459	U+612B	# <cjk>	[2000]
+3-745A	U+6130	# <cjk>	[2000]
+3-745B	U+6137	# <cjk>	[2000]
+3-745C	U+FA3E	# CJK COMPATIBILITY IDEOGRAPH-FA3E	[2000]	[Unicode3.2]
+3-745D	U+618D	# <cjk>	[2000]
+3-745E	U+FA3F	# CJK COMPATIBILITY IDEOGRAPH-FA3F	[2000]	[Unicode3.2]
+3-745F	U+61BC	# <cjk>	[2000]
+3-7460	U+61B9	# <cjk>	[2000]
+3-7461	U+FA40	# CJK COMPATIBILITY IDEOGRAPH-FA40	[2000]	[Unicode3.2]
+3-7462	U+6222	# <cjk>	[2000]
+3-7463	U+623E	# <cjk>	[2000]
+3-7464	U+6243	# <cjk>	[2000]
+3-7465	U+6256	# <cjk>	[2000]
+3-7466	U+625A	# <cjk>	[2000]
+3-7467	U+626F	# <cjk>	[2000]
+3-7468	U+6285	# <cjk>	[2000]
+3-7469	U+62C4	# <cjk>	[2000]
+3-746A	U+62D6	# <cjk>	[2000]
+3-746B	U+62FC	# <cjk>	[2000]
+3-746C	U+630A	# <cjk>	[2000]
+3-746D	U+6318	# <cjk>	[2000]
+3-746E	U+6339	# <cjk>	[2000]
+3-746F	U+6343	# <cjk>	[2000]
+3-7470	U+6365	# <cjk>	[2000]
+3-7471	U+637C	# <cjk>	[2000]
+3-7472	U+63E5	# <cjk>	[2000]
+3-7473	U+63ED	# <cjk>	[2000]
+3-7474	U+63F5	# <cjk>	[2000]
+3-7475	U+6410	# <cjk>	[2000]
+3-7476	U+6414	# <cjk>	[2000]
+3-7477	U+6422	# <cjk>	[2000]
+3-7478	U+6479	# <cjk>	[2000]
+3-7479	U+6451	# <cjk>	[2000]
+3-747A	U+6460	# <cjk>	[2000]
+3-747B	U+646D	# <cjk>	[2000]
+3-747C	U+64CE	# <cjk>	[2000]
+3-747D	U+64BE	# <cjk>	[2000]
+3-747E	U+64BF	# <cjk>	[2000]
+3-7521	U+64C4	# <cjk>	[2000]
+3-7522	U+64CA	# <cjk>	[2000]
+3-7523	U+64D0	# <cjk>	[2000]
+3-7524	U+64F7	# <cjk>	[2000]
+3-7525	U+64FB	# <cjk>	[2000]
+3-7526	U+6522	# <cjk>	[2000]
+3-7527	U+6529	# <cjk>	[2000]
+3-7528	U+FA41	# CJK COMPATIBILITY IDEOGRAPH-FA41	[2000]	[Unicode3.2]
+3-7529	U+6567	# <cjk>	[2000]
+3-752A	U+659D	# <cjk>	[2000]
+3-752B	U+FA42	# CJK COMPATIBILITY IDEOGRAPH-FA42	[2000]	[Unicode3.2]
+3-752C	U+6600	# <cjk>	[2000]
+3-752D	U+6609	# <cjk>	[2000]
+3-752E	U+6615	# <cjk>	[2000]
+3-752F	U+661E	# <cjk>	[2000]
+3-7530	U+663A	# <cjk>	[2000]
+3-7531	U+6622	# <cjk>	[2000]
+3-7532	U+6624	# <cjk>	[2000]
+3-7533	U+662B	# <cjk>	[2000]
+3-7534	U+6630	# <cjk>	[2000]
+3-7535	U+6631	# <cjk>	[2000]
+3-7536	U+6633	# <cjk>	[2000]
+3-7537	U+66FB	# <cjk>	[2000]
+3-7538	U+6648	# <cjk>	[2000]
+3-7539	U+664C	# <cjk>	[2000]
+3-753A	U+231C4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F79A
+3-753B	U+6659	# <cjk>	[2000]
+3-753C	U+665A	# <cjk>	[2000]
+3-753D	U+6661	# <cjk>	[2000]
+3-753E	U+6665	# <cjk>	[2000]
+3-753F	U+6673	# <cjk>	[2000]
+3-7540	U+6677	# <cjk>	[2000]
+3-7541	U+6678	# <cjk>	[2000]
+3-7542	U+668D	# <cjk>	[2000]
+3-7543	U+FA43	# CJK COMPATIBILITY IDEOGRAPH-FA43	[2000]	[Unicode3.2]
+3-7544	U+66A0	# <cjk>	[2000]
+3-7545	U+66B2	# <cjk>	[2000]
+3-7546	U+66BB	# <cjk>	[2000]
+3-7547	U+66C6	# <cjk>	[2000]
+3-7548	U+66C8	# <cjk>	[2000]
+3-7549	U+3B22	# <cjk>	[2000]
+3-754A	U+66DB	# <cjk>	[2000]
+3-754B	U+66E8	# <cjk>	[2000]
+3-754C	U+66FA	# <cjk>	[2000]
+3-754D	U+6713	# <cjk>	[2000]
+3-754E	U+F929	# CJK COMPATIBILITY IDEOGRAPH-F929	[2000]
+3-754F	U+6733	# <cjk>	[2000]
+3-7550	U+6766	# <cjk>	[2000]
+3-7551	U+6747	# <cjk>	[2000]
+3-7552	U+6748	# <cjk>	[2000]
+3-7553	U+677B	# <cjk>	[2000]
+3-7554	U+6781	# <cjk>	[2000]
+3-7555	U+6793	# <cjk>	[2000]
+3-7556	U+6798	# <cjk>	[2000]
+3-7557	U+679B	# <cjk>	[2000]
+3-7558	U+67BB	# <cjk>	[2000]
+3-7559	U+67F9	# <cjk>	[2000]
+3-755A	U+67C0	# <cjk>	[2000]
+3-755B	U+67D7	# <cjk>	[2000]
+3-755C	U+67FC	# <cjk>	[2000]
+3-755D	U+6801	# <cjk>	[2000]
+3-755E	U+6852	# <cjk>	[2000]
+3-755F	U+681D	# <cjk>	[2000]
+3-7560	U+682C	# <cjk>	[2000]
+3-7561	U+6831	# <cjk>	[2000]
+3-7562	U+685B	# <cjk>	[2000]
+3-7563	U+6872	# <cjk>	[2000]
+3-7564	U+6875	# <cjk>	[2000]
+3-7565	U+FA44	# CJK COMPATIBILITY IDEOGRAPH-FA44	[2000]	[Unicode3.2]
+3-7566	U+68A3	# <cjk>	[2000]
+3-7567	U+68A5	# <cjk>	[2000]
+3-7568	U+68B2	# <cjk>	[2000]
+3-7569	U+68C8	# <cjk>	[2000]
+3-756A	U+68D0	# <cjk>	[2000]
+3-756B	U+68E8	# <cjk>	[2000]
+3-756C	U+68ED	# <cjk>	[2000]
+3-756D	U+68F0	# <cjk>	[2000]
+3-756E	U+68F1	# <cjk>	[2000]
+3-756F	U+68FC	# <cjk>	[2000]
+3-7570	U+690A	# <cjk>	[2000]
+3-7571	U+6949	# <cjk>	[2000]
+3-7572	U+235C4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F79D
+3-7573	U+6935	# <cjk>	[2000]
+3-7574	U+6942	# <cjk>	[2000]
+3-7575	U+6957	# <cjk>	[2000]
+3-7576	U+6963	# <cjk>	[2000]
+3-7577	U+6964	# <cjk>	[2000]
+3-7578	U+6968	# <cjk>	[2000]
+3-7579	U+6980	# <cjk>	[2000]
+3-757A	U+FA14	# CJK COMPATIBILITY IDEOGRAPH-FA14	[2000]
+3-757B	U+69A5	# <cjk>	[2000]
+3-757C	U+69AD	# <cjk>	[2000]
+3-757D	U+69CF	# <cjk>	[2000]
+3-757E	U+3BB6	# <cjk>	[2000]
+3-7621	U+3BC3	# <cjk>	[2000]
+3-7622	U+69E2	# <cjk>	[2000]
+3-7623	U+69E9	# <cjk>	[2000]
+3-7624	U+69EA	# <cjk>	[2000]
+3-7625	U+69F5	# <cjk>	[2000]
+3-7626	U+69F6	# <cjk>	[2000]
+3-7627	U+6A0F	# <cjk>	[2000]
+3-7628	U+6A15	# <cjk>	[2000]
+3-7629	U+2373F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F79F
+3-762A	U+6A3B	# <cjk>	[2000]
+3-762B	U+6A3E	# <cjk>	[2000]
+3-762C	U+6A45	# <cjk>	[2000]
+3-762D	U+6A50	# <cjk>	[2000]
+3-762E	U+6A56	# <cjk>	[2000]
+3-762F	U+6A5B	# <cjk>	[2000]
+3-7630	U+6A6B	# <cjk>	[2000]
+3-7631	U+6A73	# <cjk>	[2000]
+3-7632	U+23763	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7A0
+3-7633	U+6A89	# <cjk>	[2000]
+3-7634	U+6A94	# <cjk>	[2000]
+3-7635	U+6A9D	# <cjk>	[2000]
+3-7636	U+6A9E	# <cjk>	[2000]
+3-7637	U+6AA5	# <cjk>	[2000]
+3-7638	U+6AE4	# <cjk>	[2000]
+3-7639	U+6AE7	# <cjk>	[2000]
+3-763A	U+3C0F	# <cjk>	[2000]
+3-763B	U+F91D	# CJK COMPATIBILITY IDEOGRAPH-F91D	[2000]
+3-763C	U+6B1B	# <cjk>	[2000]
+3-763D	U+6B1E	# <cjk>	[2000]
+3-763E	U+6B2C	# <cjk>	[2000]
+3-763F	U+6B35	# <cjk>	[2000]
+3-7640	U+6B46	# <cjk>	[2000]
+3-7641	U+6B56	# <cjk>	[2000]
+3-7642	U+6B60	# <cjk>	[2000]
+3-7643	U+6B65	# <cjk>	[2000]
+3-7644	U+6B67	# <cjk>	[2000]
+3-7645	U+6B77	# <cjk>	[2000]
+3-7646	U+6B82	# <cjk>	[2000]
+3-7647	U+6BA9	# <cjk>	[2000]
+3-7648	U+6BAD	# <cjk>	[2000]
+3-7649	U+F970	# CJK COMPATIBILITY IDEOGRAPH-F970	[2000]
+3-764A	U+6BCF	# <cjk>	[2000]
+3-764B	U+6BD6	# <cjk>	[2000]
+3-764C	U+6BD7	# <cjk>	[2000]
+3-764D	U+6BFF	# <cjk>	[2000]
+3-764E	U+6C05	# <cjk>	[2000]
+3-764F	U+6C10	# <cjk>	[2000]
+3-7650	U+6C33	# <cjk>	[2000]
+3-7651	U+6C59	# <cjk>	[2000]
+3-7652	U+6C5C	# <cjk>	[2000]
+3-7653	U+6CAA	# <cjk>	[2000]
+3-7654	U+6C74	# <cjk>	[2000]
+3-7655	U+6C76	# <cjk>	[2000]
+3-7656	U+6C85	# <cjk>	[2000]
+3-7657	U+6C86	# <cjk>	[2000]
+3-7658	U+6C98	# <cjk>	[2000]
+3-7659	U+6C9C	# <cjk>	[2000]
+3-765A	U+6CFB	# <cjk>	[2000]
+3-765B	U+6CC6	# <cjk>	[2000]
+3-765C	U+6CD4	# <cjk>	[2000]
+3-765D	U+6CE0	# <cjk>	[2000]
+3-765E	U+6CEB	# <cjk>	[2000]
+3-765F	U+6CEE	# <cjk>	[2000]
+3-7660	U+23CFE	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7A1
+3-7661	U+6D04	# <cjk>	[2000]
+3-7662	U+6D0E	# <cjk>	[2000]
+3-7663	U+6D2E	# <cjk>	[2000]
+3-7664	U+6D31	# <cjk>	[2000]
+3-7665	U+6D39	# <cjk>	[2000]
+3-7666	U+6D3F	# <cjk>	[2000]
+3-7667	U+6D58	# <cjk>	[2000]
+3-7668	U+6D65	# <cjk>	[2000]
+3-7669	U+FA45	# CJK COMPATIBILITY IDEOGRAPH-FA45	[2000]	[Unicode3.2]
+3-766A	U+6D82	# <cjk>	[2000]
+3-766B	U+6D87	# <cjk>	[2000]
+3-766C	U+6D89	# <cjk>	[2000]
+3-766D	U+6D94	# <cjk>	[2000]
+3-766E	U+6DAA	# <cjk>	[2000]
+3-766F	U+6DAC	# <cjk>	[2000]
+3-7670	U+6DBF	# <cjk>	[2000]
+3-7671	U+6DC4	# <cjk>	[2000]
+3-7672	U+6DD6	# <cjk>	[2000]
+3-7673	U+6DDA	# <cjk>	[2000]
+3-7674	U+6DDB	# <cjk>	[2000]
+3-7675	U+6DDD	# <cjk>	[2000]
+3-7676	U+6DFC	# <cjk>	[2000]
+3-7677	U+FA46	# CJK COMPATIBILITY IDEOGRAPH-FA46	[2000]	[Unicode3.2]
+3-7678	U+6E34	# <cjk>	[2000]
+3-7679	U+6E44	# <cjk>	[2000]
+3-767A	U+6E5C	# <cjk>	[2000]
+3-767B	U+6E5E	# <cjk>	[2000]
+3-767C	U+6EAB	# <cjk>	[2000]
+3-767D	U+6EB1	# <cjk>	[2000]
+3-767E	U+6EC1	# <cjk>	[2000]
+3-7721	U+6EC7	# <cjk>	[2000]
+3-7722	U+6ECE	# <cjk>	[2000]
+3-7723	U+6F10	# <cjk>	[2000]
+3-7724	U+6F1A	# <cjk>	[2000]
+3-7725	U+FA47	# CJK COMPATIBILITY IDEOGRAPH-FA47	[2000]	[Unicode3.2]
+3-7726	U+6F2A	# <cjk>	[2000]
+3-7727	U+6F2F	# <cjk>	[2000]
+3-7728	U+6F33	# <cjk>	[2000]
+3-7729	U+6F51	# <cjk>	[2000]
+3-772A	U+6F59	# <cjk>	[2000]
+3-772B	U+6F5E	# <cjk>	[2000]
+3-772C	U+6F61	# <cjk>	[2000]
+3-772D	U+6F62	# <cjk>	[2000]
+3-772E	U+6F7E	# <cjk>	[2000]
+3-772F	U+6F88	# <cjk>	[2000]
+3-7730	U+6F8C	# <cjk>	[2000]
+3-7731	U+6F8D	# <cjk>	[2000]
+3-7732	U+6F94	# <cjk>	[2000]
+3-7733	U+6FA0	# <cjk>	[2000]
+3-7734	U+6FA7	# <cjk>	[2000]
+3-7735	U+6FB6	# <cjk>	[2000]
+3-7736	U+6FBC	# <cjk>	[2000]
+3-7737	U+6FC7	# <cjk>	[2000]
+3-7738	U+6FCA	# <cjk>	[2000]
+3-7739	U+6FF9	# <cjk>	[2000]
+3-773A	U+6FF0	# <cjk>	[2000]
+3-773B	U+6FF5	# <cjk>	[2000]
+3-773C	U+7005	# <cjk>	[2000]
+3-773D	U+7006	# <cjk>	[2000]
+3-773E	U+7028	# <cjk>	[2000]
+3-773F	U+704A	# <cjk>	[2000]
+3-7740	U+705D	# <cjk>	[2000]
+3-7741	U+705E	# <cjk>	[2000]
+3-7742	U+704E	# <cjk>	[2000]
+3-7743	U+7064	# <cjk>	[2000]
+3-7744	U+7075	# <cjk>	[2000]
+3-7745	U+7085	# <cjk>	[2000]
+3-7746	U+70A4	# <cjk>	[2000]
+3-7747	U+70AB	# <cjk>	[2000]
+3-7748	U+70B7	# <cjk>	[2000]
+3-7749	U+70D4	# <cjk>	[2000]
+3-774A	U+70D8	# <cjk>	[2000]
+3-774B	U+70E4	# <cjk>	[2000]
+3-774C	U+710F	# <cjk>	[2000]
+3-774D	U+712B	# <cjk>	[2000]
+3-774E	U+711E	# <cjk>	[2000]
+3-774F	U+7120	# <cjk>	[2000]
+3-7750	U+712E	# <cjk>	[2000]
+3-7751	U+7130	# <cjk>	[2000]
+3-7752	U+7146	# <cjk>	[2000]
+3-7753	U+7147	# <cjk>	[2000]
+3-7754	U+7151	# <cjk>	[2000]
+3-7755	U+FA48	# CJK COMPATIBILITY IDEOGRAPH-FA48	[2000]	[Unicode3.2]
+3-7756	U+7152	# <cjk>	[2000]
+3-7757	U+715C	# <cjk>	[2000]
+3-7758	U+7160	# <cjk>	[2000]
+3-7759	U+7168	# <cjk>	[2000]
+3-775A	U+FA15	# CJK COMPATIBILITY IDEOGRAPH-FA15	[2000]
+3-775B	U+7185	# <cjk>	[2000]
+3-775C	U+7187	# <cjk>	[2000]
+3-775D	U+7192	# <cjk>	[2000]
+3-775E	U+71C1	# <cjk>	[2000]
+3-775F	U+71BA	# <cjk>	[2000]
+3-7760	U+71C4	# <cjk>	[2000]
+3-7761	U+71FE	# <cjk>	[2000]
+3-7762	U+7200	# <cjk>	[2000]
+3-7763	U+7215	# <cjk>	[2000]
+3-7764	U+7255	# <cjk>	[2000]
+3-7765	U+7256	# <cjk>	[2000]
+3-7766	U+3E3F	# <cjk>	[2000]
+3-7767	U+728D	# <cjk>	[2000]
+3-7768	U+729B	# <cjk>	[2000]
+3-7769	U+72BE	# <cjk>	[2000]
+3-776A	U+72C0	# <cjk>	[2000]
+3-776B	U+72FB	# <cjk>	[2000]
+3-776C	U+247F1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7A6
+3-776D	U+7327	# <cjk>	[2000]
+3-776E	U+7328	# <cjk>	[2000]
+3-776F	U+FA16	# CJK COMPATIBILITY IDEOGRAPH-FA16	[2000]
+3-7770	U+7350	# <cjk>	[2000]
+3-7771	U+7366	# <cjk>	[2000]
+3-7772	U+737C	# <cjk>	[2000]
+3-7773	U+7395	# <cjk>	[2000]
+3-7774	U+739F	# <cjk>	[2000]
+3-7775	U+73A0	# <cjk>	[2000]
+3-7776	U+73A2	# <cjk>	[2000]
+3-7777	U+73A6	# <cjk>	[2000]
+3-7778	U+73AB	# <cjk>	[2000]
+3-7779	U+73C9	# <cjk>	[2000]
+3-777A	U+73CF	# <cjk>	[2000]
+3-777B	U+73D6	# <cjk>	[2000]
+3-777C	U+73D9	# <cjk>	[2000]
+3-777D	U+73E3	# <cjk>	[2000]
+3-777E	U+73E9	# <cjk>	[2000]
+3-7821	U+7407	# <cjk>	[2000]
+3-7822	U+740A	# <cjk>	[2000]
+3-7823	U+741A	# <cjk>	[2000]
+3-7824	U+741B	# <cjk>	[2000]
+3-7825	U+FA4A	# CJK COMPATIBILITY IDEOGRAPH-FA4A	[2000]	[Unicode3.2]
+3-7826	U+7426	# <cjk>	[2000]
+3-7827	U+7428	# <cjk>	[2000]
+3-7828	U+742A	# <cjk>	[2000]
+3-7829	U+742B	# <cjk>	[2000]
+3-782A	U+742C	# <cjk>	[2000]
+3-782B	U+742E	# <cjk>	[2000]
+3-782C	U+742F	# <cjk>	[2000]
+3-782D	U+7430	# <cjk>	[2000]
+3-782E	U+7444	# <cjk>	[2000]
+3-782F	U+7446	# <cjk>	[2000]
+3-7830	U+7447	# <cjk>	[2000]
+3-7831	U+744B	# <cjk>	[2000]
+3-7832	U+7457	# <cjk>	[2000]
+3-7833	U+7462	# <cjk>	[2000]
+3-7834	U+746B	# <cjk>	[2000]
+3-7835	U+746D	# <cjk>	[2000]
+3-7836	U+7486	# <cjk>	[2000]
+3-7837	U+7487	# <cjk>	[2000]
+3-7838	U+7489	# <cjk>	[2000]
+3-7839	U+7498	# <cjk>	[2000]
+3-783A	U+749C	# <cjk>	[2000]
+3-783B	U+749F	# <cjk>	[2000]
+3-783C	U+74A3	# <cjk>	[2000]
+3-783D	U+7490	# <cjk>	[2000]
+3-783E	U+74A6	# <cjk>	[2000]
+3-783F	U+74A8	# <cjk>	[2000]
+3-7840	U+74A9	# <cjk>	[2000]
+3-7841	U+74B5	# <cjk>	[2000]
+3-7842	U+74BF	# <cjk>	[2000]
+3-7843	U+74C8	# <cjk>	[2000]
+3-7844	U+74C9	# <cjk>	[2000]
+3-7845	U+74DA	# <cjk>	[2000]
+3-7846	U+74FF	# <cjk>	[2000]
+3-7847	U+7501	# <cjk>	[2000]
+3-7848	U+7517	# <cjk>	[2000]
+3-7849	U+752F	# <cjk>	[2000]
+3-784A	U+756F	# <cjk>	[2000]
+3-784B	U+7579	# <cjk>	[2000]
+3-784C	U+7592	# <cjk>	[2000]
+3-784D	U+3F72	# <cjk>	[2000]
+3-784E	U+75CE	# <cjk>	[2000]
+3-784F	U+75E4	# <cjk>	[2000]
+3-7850	U+7600	# <cjk>	[2000]
+3-7851	U+7602	# <cjk>	[2000]
+3-7852	U+7608	# <cjk>	[2000]
+3-7853	U+7615	# <cjk>	[2000]
+3-7854	U+7616	# <cjk>	[2000]
+3-7855	U+7619	# <cjk>	[2000]
+3-7856	U+761E	# <cjk>	[2000]
+3-7857	U+762D	# <cjk>	[2000]
+3-7858	U+7635	# <cjk>	[2000]
+3-7859	U+7643	# <cjk>	[2000]
+3-785A	U+764B	# <cjk>	[2000]
+3-785B	U+7664	# <cjk>	[2000]
+3-785C	U+7665	# <cjk>	[2000]
+3-785D	U+766D	# <cjk>	[2000]
+3-785E	U+766F	# <cjk>	[2000]
+3-785F	U+7671	# <cjk>	[2000]
+3-7860	U+7681	# <cjk>	[2000]
+3-7861	U+769B	# <cjk>	[2000]
+3-7862	U+769D	# <cjk>	[2000]
+3-7863	U+769E	# <cjk>	[2000]
+3-7864	U+76A6	# <cjk>	[2000]
+3-7865	U+76AA	# <cjk>	[2000]
+3-7866	U+76B6	# <cjk>	[2000]
+3-7867	U+76C5	# <cjk>	[2000]
+3-7868	U+76CC	# <cjk>	[2000]
+3-7869	U+76CE	# <cjk>	[2000]
+3-786A	U+76D4	# <cjk>	[2000]
+3-786B	U+76E6	# <cjk>	[2000]
+3-786C	U+76F1	# <cjk>	[2000]
+3-786D	U+76FC	# <cjk>	[2000]
+3-786E	U+770A	# <cjk>	[2000]
+3-786F	U+7719	# <cjk>	[2000]
+3-7870	U+7734	# <cjk>	[2000]
+3-7871	U+7736	# <cjk>	[2000]
+3-7872	U+7746	# <cjk>	[2000]
+3-7873	U+774D	# <cjk>	[2000]
+3-7874	U+774E	# <cjk>	[2000]
+3-7875	U+775C	# <cjk>	[2000]
+3-7876	U+775F	# <cjk>	[2000]
+3-7877	U+7762	# <cjk>	[2000]
+3-7878	U+777A	# <cjk>	[2000]
+3-7879	U+7780	# <cjk>	[2000]
+3-787A	U+7794	# <cjk>	[2000]
+3-787B	U+77AA	# <cjk>	[2000]
+3-787C	U+77E0	# <cjk>	[2000]
+3-787D	U+782D	# <cjk>	[2000]
+3-787E	U+2548E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7A8
+3-7921	U+7843	# <cjk>	[2000]
+3-7922	U+784E	# <cjk>	[2000]
+3-7923	U+784F	# <cjk>	[2000]
+3-7924	U+7851	# <cjk>	[2000]
+3-7925	U+7868	# <cjk>	[2000]
+3-7926	U+786E	# <cjk>	[2000]
+3-7927	U+FA4B	# CJK COMPATIBILITY IDEOGRAPH-FA4B	[2000]	[Unicode3.2]
+3-7928	U+78B0	# <cjk>	[2000]
+3-7929	U+2550E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7AA
+3-792A	U+78AD	# <cjk>	[2000]
+3-792B	U+78E4	# <cjk>	[2000]
+3-792C	U+78F2	# <cjk>	[2000]
+3-792D	U+7900	# <cjk>	[2000]
+3-792E	U+78F7	# <cjk>	[2000]
+3-792F	U+791C	# <cjk>	[2000]
+3-7930	U+792E	# <cjk>	[2000]
+3-7931	U+7931	# <cjk>	[2000]
+3-7932	U+7934	# <cjk>	[2000]
+3-7933	U+FA4C	# CJK COMPATIBILITY IDEOGRAPH-FA4C	[2000]	[Unicode3.2]
+3-7934	U+FA4D	# CJK COMPATIBILITY IDEOGRAPH-FA4D	[2000]	[Unicode3.2]
+3-7935	U+7945	# <cjk>	[2000]
+3-7936	U+7946	# <cjk>	[2000]
+3-7937	U+FA4E	# CJK COMPATIBILITY IDEOGRAPH-FA4E	[2000]	[Unicode3.2]
+3-7938	U+FA4F	# CJK COMPATIBILITY IDEOGRAPH-FA4F	[2000]	[Unicode3.2]
+3-7939	U+FA50	# CJK COMPATIBILITY IDEOGRAPH-FA50	[2000]	[Unicode3.2]
+3-793A	U+795C	# <cjk>	[2000]
+3-793B	U+FA51	# CJK COMPATIBILITY IDEOGRAPH-FA51	[2000]	[Unicode3.2]
+3-793C	U+FA19	# CJK COMPATIBILITY IDEOGRAPH-FA19	[2000]
+3-793D	U+FA1A	# CJK COMPATIBILITY IDEOGRAPH-FA1A	[2000]
+3-793E	U+7979	# <cjk>	[2000]
+3-793F	U+FA52	# CJK COMPATIBILITY IDEOGRAPH-FA52	[2000]	[Unicode3.2]
+3-7940	U+FA53	# CJK COMPATIBILITY IDEOGRAPH-FA53	[2000]	[Unicode3.2]
+3-7941	U+FA1B	# CJK COMPATIBILITY IDEOGRAPH-FA1B	[2000]
+3-7942	U+7998	# <cjk>	[2000]
+3-7943	U+79B1	# <cjk>	[2000]
+3-7944	U+79B8	# <cjk>	[2000]
+3-7945	U+79C8	# <cjk>	[2000]
+3-7946	U+79CA	# <cjk>	[2000]
+3-7947	U+25771	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7B3
+3-7948	U+79D4	# <cjk>	[2000]
+3-7949	U+79DE	# <cjk>	[2000]
+3-794A	U+79EB	# <cjk>	[2000]
+3-794B	U+79ED	# <cjk>	[2000]
+3-794C	U+7A03	# <cjk>	[2000]
+3-794D	U+FA54	# CJK COMPATIBILITY IDEOGRAPH-FA54	[2000]	[Unicode3.2]
+3-794E	U+7A39	# <cjk>	[2000]
+3-794F	U+7A5D	# <cjk>	[2000]
+3-7950	U+7A6D	# <cjk>	[2000]
+3-7951	U+FA55	# CJK COMPATIBILITY IDEOGRAPH-FA55	[2000]	[Unicode3.2]
+3-7952	U+7A85	# <cjk>	[2000]
+3-7953	U+7AA0	# <cjk>	[2000]
+3-7954	U+259C4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7B6
+3-7955	U+7AB3	# <cjk>	[2000]
+3-7956	U+7ABB	# <cjk>	[2000]
+3-7957	U+7ACE	# <cjk>	[2000]
+3-7958	U+7AEB	# <cjk>	[2000]
+3-7959	U+7AFD	# <cjk>	[2000]
+3-795A	U+7B12	# <cjk>	[2000]
+3-795B	U+7B2D	# <cjk>	[2000]
+3-795C	U+7B3B	# <cjk>	[2000]
+3-795D	U+7B47	# <cjk>	[2000]
+3-795E	U+7B4E	# <cjk>	[2000]
+3-795F	U+7B60	# <cjk>	[2000]
+3-7960	U+7B6D	# <cjk>	[2000]
+3-7961	U+7B6F	# <cjk>	[2000]
+3-7962	U+7B72	# <cjk>	[2000]
+3-7963	U+7B9E	# <cjk>	[2000]
+3-7964	U+FA56	# CJK COMPATIBILITY IDEOGRAPH-FA56	[2000]	[Unicode3.2]
+3-7965	U+7BD7	# <cjk>	[2000]
+3-7966	U+7BD9	# <cjk>	[2000]
+3-7967	U+7C01	# <cjk>	[2000]
+3-7968	U+7C31	# <cjk>	[2000]
+3-7969	U+7C1E	# <cjk>	[2000]
+3-796A	U+7C20	# <cjk>	[2000]
+3-796B	U+7C33	# <cjk>	[2000]
+3-796C	U+7C36	# <cjk>	[2000]
+3-796D	U+4264	# <cjk>	[2000]
+3-796E	U+25DA1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7B8
+3-796F	U+7C59	# <cjk>	[2000]
+3-7970	U+7C6D	# <cjk>	[2000]
+3-7971	U+7C79	# <cjk>	[2000]
+3-7972	U+7C8F	# <cjk>	[2000]
+3-7973	U+7C94	# <cjk>	[2000]
+3-7974	U+7CA0	# <cjk>	[2000]
+3-7975	U+7CBC	# <cjk>	[2000]
+3-7976	U+7CD5	# <cjk>	[2000]
+3-7977	U+7CD9	# <cjk>	[2000]
+3-7978	U+7CDD	# <cjk>	[2000]
+3-7979	U+7D07	# <cjk>	[2000]
+3-797A	U+7D08	# <cjk>	[2000]
+3-797B	U+7D13	# <cjk>	[2000]
+3-797C	U+7D1D	# <cjk>	[2000]
+3-797D	U+7D23	# <cjk>	[2000]
+3-797E	U+7D31	# <cjk>	[2000]
+3-7A21	U+7D41	# <cjk>	[2000]
+3-7A22	U+7D48	# <cjk>	[2000]
+3-7A23	U+7D53	# <cjk>	[2000]
+3-7A24	U+7D5C	# <cjk>	[2000]
+3-7A25	U+7D7A	# <cjk>	[2000]
+3-7A26	U+7D83	# <cjk>	[2000]
+3-7A27	U+7D8B	# <cjk>	[2000]
+3-7A28	U+7DA0	# <cjk>	[2000]
+3-7A29	U+7DA6	# <cjk>	[2000]
+3-7A2A	U+7DC2	# <cjk>	[2000]
+3-7A2B	U+7DCC	# <cjk>	[2000]
+3-7A2C	U+7DD6	# <cjk>	[2000]
+3-7A2D	U+7DE3	# <cjk>	[2000]
+3-7A2E	U+FA57	# CJK COMPATIBILITY IDEOGRAPH-FA57	[2000]	[Unicode3.2]
+3-7A2F	U+7E28	# <cjk>	[2000]
+3-7A30	U+7E08	# <cjk>	[2000]
+3-7A31	U+7E11	# <cjk>	[2000]
+3-7A32	U+7E15	# <cjk>	[2000]
+3-7A33	U+FA59	# CJK COMPATIBILITY IDEOGRAPH-FA59	[2000]	[Unicode3.2]
+3-7A34	U+7E47	# <cjk>	[2000]
+3-7A35	U+7E52	# <cjk>	[2000]
+3-7A36	U+7E61	# <cjk>	[2000]
+3-7A37	U+7E8A	# <cjk>	[2000]
+3-7A38	U+7E8D	# <cjk>	[2000]
+3-7A39	U+7F47	# <cjk>	[2000]
+3-7A3A	U+FA5A	# CJK COMPATIBILITY IDEOGRAPH-FA5A	[2000]	[Unicode3.2]
+3-7A3B	U+7F91	# <cjk>	[2000]
+3-7A3C	U+7F97	# <cjk>	[2000]
+3-7A3D	U+7FBF	# <cjk>	[2000]
+3-7A3E	U+7FCE	# <cjk>	[2000]
+3-7A3F	U+7FDB	# <cjk>	[2000]
+3-7A40	U+7FDF	# <cjk>	[2000]
+3-7A41	U+7FEC	# <cjk>	[2000]
+3-7A42	U+7FEE	# <cjk>	[2000]
+3-7A43	U+7FFA	# <cjk>	[2000]
+3-7A44	U+FA5B	# CJK COMPATIBILITY IDEOGRAPH-FA5B	[2000]	[Unicode3.2]
+3-7A45	U+8014	# <cjk>	[2000]
+3-7A46	U+8026	# <cjk>	[2000]
+3-7A47	U+8035	# <cjk>	[2000]
+3-7A48	U+8037	# <cjk>	[2000]
+3-7A49	U+803C	# <cjk>	[2000]
+3-7A4A	U+80CA	# <cjk>	[2000]
+3-7A4B	U+80D7	# <cjk>	[2000]
+3-7A4C	U+80E0	# <cjk>	[2000]
+3-7A4D	U+80F3	# <cjk>	[2000]
+3-7A4E	U+8118	# <cjk>	[2000]
+3-7A4F	U+814A	# <cjk>	[2000]
+3-7A50	U+8160	# <cjk>	[2000]
+3-7A51	U+8167	# <cjk>	[2000]
+3-7A52	U+8168	# <cjk>	[2000]
+3-7A53	U+816D	# <cjk>	[2000]
+3-7A54	U+81BB	# <cjk>	[2000]
+3-7A55	U+81CA	# <cjk>	[2000]
+3-7A56	U+81CF	# <cjk>	[2000]
+3-7A57	U+81D7	# <cjk>	[2000]
+3-7A58	U+FA5C	# CJK COMPATIBILITY IDEOGRAPH-FA5C	[2000]	[Unicode3.2]
+3-7A59	U+4453	# <cjk>	[2000]
+3-7A5A	U+445B	# <cjk>	[2000]
+3-7A5B	U+8260	# <cjk>	[2000]
+3-7A5C	U+8274	# <cjk>	[2000]
+3-7A5D	U+26AFF	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7BE
+3-7A5E	U+828E	# <cjk>	[2000]
+3-7A5F	U+82A1	# <cjk>	[2000]
+3-7A60	U+82A3	# <cjk>	[2000]
+3-7A61	U+82A4	# <cjk>	[2000]
+3-7A62	U+82A9	# <cjk>	[2000]
+3-7A63	U+82AE	# <cjk>	[2000]
+3-7A64	U+82B7	# <cjk>	[2000]
+3-7A65	U+82BE	# <cjk>	[2000]
+3-7A66	U+82BF	# <cjk>	[2000]
+3-7A67	U+82C6	# <cjk>	[2000]
+3-7A68	U+82D5	# <cjk>	[2000]
+3-7A69	U+82FD	# <cjk>	[2000]
+3-7A6A	U+82FE	# <cjk>	[2000]
+3-7A6B	U+8300	# <cjk>	[2000]
+3-7A6C	U+8301	# <cjk>	[2000]
+3-7A6D	U+8362	# <cjk>	[2000]
+3-7A6E	U+8322	# <cjk>	[2000]
+3-7A6F	U+832D	# <cjk>	[2000]
+3-7A70	U+833A	# <cjk>	[2000]
+3-7A71	U+8343	# <cjk>	[2000]
+3-7A72	U+8347	# <cjk>	[2000]
+3-7A73	U+8351	# <cjk>	[2000]
+3-7A74	U+8355	# <cjk>	[2000]
+3-7A75	U+837D	# <cjk>	[2000]
+3-7A76	U+8386	# <cjk>	[2000]
+3-7A77	U+8392	# <cjk>	[2000]
+3-7A78	U+8398	# <cjk>	[2000]
+3-7A79	U+83A7	# <cjk>	[2000]
+3-7A7A	U+83A9	# <cjk>	[2000]
+3-7A7B	U+83BF	# <cjk>	[2000]
+3-7A7C	U+83C0	# <cjk>	[2000]
+3-7A7D	U+83C7	# <cjk>	[2000]
+3-7A7E	U+83CF	# <cjk>	[2000]
+3-7B21	U+83D1	# <cjk>	[2000]
+3-7B22	U+83E1	# <cjk>	[2000]
+3-7B23	U+83EA	# <cjk>	[2000]
+3-7B24	U+8401	# <cjk>	[2000]
+3-7B25	U+8406	# <cjk>	[2000]
+3-7B26	U+840A	# <cjk>	[2000]
+3-7B27	U+FA5F	# CJK COMPATIBILITY IDEOGRAPH-FA5F	[2000]	[Unicode3.2]
+3-7B28	U+8448	# <cjk>	[2000]
+3-7B29	U+845F	# <cjk>	[2000]
+3-7B2A	U+8470	# <cjk>	[2000]
+3-7B2B	U+8473	# <cjk>	[2000]
+3-7B2C	U+8485	# <cjk>	[2000]
+3-7B2D	U+849E	# <cjk>	[2000]
+3-7B2E	U+84AF	# <cjk>	[2000]
+3-7B2F	U+84B4	# <cjk>	[2000]
+3-7B30	U+84BA	# <cjk>	[2000]
+3-7B31	U+84C0	# <cjk>	[2000]
+3-7B32	U+84C2	# <cjk>	[2000]
+3-7B33	U+26E40	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7C0
+3-7B34	U+8532	# <cjk>	[2000]
+3-7B35	U+851E	# <cjk>	[2000]
+3-7B36	U+8523	# <cjk>	[2000]
+3-7B37	U+852F	# <cjk>	[2000]
+3-7B38	U+8559	# <cjk>	[2000]
+3-7B39	U+8564	# <cjk>	[2000]
+3-7B3A	U+FA1F	# CJK COMPATIBILITY IDEOGRAPH-FA1F 	[2000]
+3-7B3B	U+85AD	# <cjk>	[2000]
+3-7B3C	U+857A	# <cjk>	[2000]
+3-7B3D	U+858C	# <cjk>	[2000]
+3-7B3E	U+858F	# <cjk>	[2000]
+3-7B3F	U+85A2	# <cjk>	[2000]
+3-7B40	U+85B0	# <cjk>	[2000]
+3-7B41	U+85CB	# <cjk>	[2000]
+3-7B42	U+85CE	# <cjk>	[2000]
+3-7B43	U+85ED	# <cjk>	[2000]
+3-7B44	U+8612	# <cjk>	[2000]
+3-7B45	U+85FF	# <cjk>	[2000]
+3-7B46	U+8604	# <cjk>	[2000]
+3-7B47	U+8605	# <cjk>	[2000]
+3-7B48	U+8610	# <cjk>	[2000]
+3-7B49	U+270F4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7C1
+3-7B4A	U+8618	# <cjk>	[2000]
+3-7B4B	U+8629	# <cjk>	[2000]
+3-7B4C	U+8638	# <cjk>	[2000]
+3-7B4D	U+8657	# <cjk>	[2000]
+3-7B4E	U+865B	# <cjk>	[2000]
+3-7B4F	U+F936	# CJK COMPATIBILITY IDEOGRAPH-F936	[2000]
+3-7B50	U+8662	# <cjk>	[2000]
+3-7B51	U+459D	# <cjk>	[2000]
+3-7B52	U+866C	# <cjk>	[2000]
+3-7B53	U+8675	# <cjk>	[2000]
+3-7B54	U+8698	# <cjk>	[2000]
+3-7B55	U+86B8	# <cjk>	[2000]
+3-7B56	U+86FA	# <cjk>	[2000]
+3-7B57	U+86FC	# <cjk>	[2000]
+3-7B58	U+86FD	# <cjk>	[2000]
+3-7B59	U+870B	# <cjk>	[2000]
+3-7B5A	U+8771	# <cjk>	[2000]
+3-7B5B	U+8787	# <cjk>	[2000]
+3-7B5C	U+8788	# <cjk>	[2000]
+3-7B5D	U+87AC	# <cjk>	[2000]
+3-7B5E	U+87AD	# <cjk>	[2000]
+3-7B5F	U+87B5	# <cjk>	[2000]
+3-7B60	U+45EA	# <cjk>	[2000]
+3-7B61	U+87D6	# <cjk>	[2000]
+3-7B62	U+87EC	# <cjk>	[2000]
+3-7B63	U+8806	# <cjk>	[2000]
+3-7B64	U+880A	# <cjk>	[2000]
+3-7B65	U+8810	# <cjk>	[2000]
+3-7B66	U+8814	# <cjk>	[2000]
+3-7B67	U+881F	# <cjk>	[2000]
+3-7B68	U+8898	# <cjk>	[2000]
+3-7B69	U+88AA	# <cjk>	[2000]
+3-7B6A	U+88CA	# <cjk>	[2000]
+3-7B6B	U+88CE	# <cjk>	[2000]
+3-7B6C	U+27684	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7C2
+3-7B6D	U+88F5	# <cjk>	[2000]
+3-7B6E	U+891C	# <cjk>	[2000]
+3-7B6F	U+FA60	# CJK COMPATIBILITY IDEOGRAPH-FA60	[2000]	[Unicode3.2]
+3-7B70	U+8918	# <cjk>	[2000]
+3-7B71	U+8919	# <cjk>	[2000]
+3-7B72	U+891A	# <cjk>	[2000]
+3-7B73	U+8927	# <cjk>	[2000]
+3-7B74	U+8930	# <cjk>	[2000]
+3-7B75	U+8932	# <cjk>	[2000]
+3-7B76	U+8939	# <cjk>	[2000]
+3-7B77	U+8940	# <cjk>	[2000]
+3-7B78	U+8994	# <cjk>	[2000]
+3-7B79	U+FA61	# CJK COMPATIBILITY IDEOGRAPH-FA61	[2000]	[Unicode3.2]
+3-7B7A	U+89D4	# <cjk>	[2000]
+3-7B7B	U+89E5	# <cjk>	[2000]
+3-7B7C	U+89F6	# <cjk>	[2000]
+3-7B7D	U+8A12	# <cjk>	[2000]
+3-7B7E	U+8A15	# <cjk>	[2000]
+3-7C21	U+8A22	# <cjk>	[2000]
+3-7C22	U+8A37	# <cjk>	[2000]
+3-7C23	U+8A47	# <cjk>	[2000]
+3-7C24	U+8A4E	# <cjk>	[2000]
+3-7C25	U+8A5D	# <cjk>	[2000]
+3-7C26	U+8A61	# <cjk>	[2000]
+3-7C27	U+8A75	# <cjk>	[2000]
+3-7C28	U+8A79	# <cjk>	[2000]
+3-7C29	U+8AA7	# <cjk>	[2000]
+3-7C2A	U+8AD0	# <cjk>	[2000]
+3-7C2B	U+8ADF	# <cjk>	[2000]
+3-7C2C	U+8AF4	# <cjk>	[2000]
+3-7C2D	U+8AF6	# <cjk>	[2000]
+3-7C2E	U+FA22	# CJK COMPATIBILITY IDEOGRAPH-FA22	[2000]
+3-7C2F	U+FA62	# CJK COMPATIBILITY IDEOGRAPH-FA62	[2000]	[Unicode3.2]
+3-7C30	U+FA63	# CJK COMPATIBILITY IDEOGRAPH-FA63	[2000]	[Unicode3.2]
+3-7C31	U+8B46	# <cjk>	[2000]
+3-7C32	U+8B54	# <cjk>	[2000]
+3-7C33	U+8B59	# <cjk>	[2000]
+3-7C34	U+8B69	# <cjk>	[2000]
+3-7C35	U+8B9D	# <cjk>	[2000]
+3-7C36	U+8C49	# <cjk>	[2000]
+3-7C37	U+8C68	# <cjk>	[2000]
+3-7C38	U+FA64	# CJK COMPATIBILITY IDEOGRAPH-FA64	[2000]	[Unicode3.2]
+3-7C39	U+8CE1	# <cjk>	[2000]
+3-7C3A	U+8CF4	# <cjk>	[2000]
+3-7C3B	U+8CF8	# <cjk>	[2000]
+3-7C3C	U+8CFE	# <cjk>	[2000]
+3-7C3D	U+FA65	# CJK COMPATIBILITY IDEOGRAPH-FA65	[2000]	[Unicode3.2]
+3-7C3E	U+8D12	# <cjk>	[2000]
+3-7C3F	U+8D1B	# <cjk>	[2000]
+3-7C40	U+8DAF	# <cjk>	[2000]
+3-7C41	U+8DCE	# <cjk>	[2000]
+3-7C42	U+8DD1	# <cjk>	[2000]
+3-7C43	U+8DD7	# <cjk>	[2000]
+3-7C44	U+8E20	# <cjk>	[2000]
+3-7C45	U+8E23	# <cjk>	[2000]
+3-7C46	U+8E3D	# <cjk>	[2000]
+3-7C47	U+8E70	# <cjk>	[2000]
+3-7C48	U+8E7B	# <cjk>	[2000]
+3-7C49	U+28277	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7C9
+3-7C4A	U+8EC0	# <cjk>	[2000]
+3-7C4B	U+4844	# <cjk>	[2000]
+3-7C4C	U+8EFA	# <cjk>	[2000]
+3-7C4D	U+8F1E	# <cjk>	[2000]
+3-7C4E	U+8F2D	# <cjk>	[2000]
+3-7C4F	U+8F36	# <cjk>	[2000]
+3-7C50	U+8F54	# <cjk>	[2000]
+3-7C51	U+283CD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7CA
+3-7C52	U+8FA6	# <cjk>	[2000]
+3-7C53	U+8FB5	# <cjk>	[2000]
+3-7C54	U+8FE4	# <cjk>	[2000]
+3-7C55	U+8FE8	# <cjk>	[2000]
+3-7C56	U+8FEE	# <cjk>	[2000]
+3-7C57	U+9008	# <cjk>	[2000]
+3-7C58	U+902D	# <cjk>	[2000]
+3-7C59	U+FA67	# CJK COMPATIBILITY IDEOGRAPH-FA67	[2000]	[Unicode3.2]
+3-7C5A	U+9088	# <cjk>	[2000]
+3-7C5B	U+9095	# <cjk>	[2000]
+3-7C5C	U+9097	# <cjk>	[2000]
+3-7C5D	U+9099	# <cjk>	[2000]
+3-7C5E	U+909B	# <cjk>	[2000]
+3-7C5F	U+90A2	# <cjk>	[2000]
+3-7C60	U+90B3	# <cjk>	[2000]
+3-7C61	U+90BE	# <cjk>	[2000]
+3-7C62	U+90C4	# <cjk>	[2000]
+3-7C63	U+90C5	# <cjk>	[2000]
+3-7C64	U+90C7	# <cjk>	[2000]
+3-7C65	U+90D7	# <cjk>	[2000]
+3-7C66	U+90DD	# <cjk>	[2000]
+3-7C67	U+90DE	# <cjk>	[2000]
+3-7C68	U+90EF	# <cjk>	[2000]
+3-7C69	U+90F4	# <cjk>	[2000]
+3-7C6A	U+FA26	# CJK COMPATIBILITY IDEOGRAPH-FA26	[2000]
+3-7C6B	U+9114	# <cjk>	[2000]
+3-7C6C	U+9115	# <cjk>	[2000]
+3-7C6D	U+9116	# <cjk>	[2000]
+3-7C6E	U+9122	# <cjk>	[2000]
+3-7C6F	U+9123	# <cjk>	[2000]
+3-7C70	U+9127	# <cjk>	[2000]
+3-7C71	U+912F	# <cjk>	[2000]
+3-7C72	U+9131	# <cjk>	[2000]
+3-7C73	U+9134	# <cjk>	[2000]
+3-7C74	U+913D	# <cjk>	[2000]
+3-7C75	U+9148	# <cjk>	[2000]
+3-7C76	U+915B	# <cjk>	[2000]
+3-7C77	U+9183	# <cjk>	[2000]
+3-7C78	U+919E	# <cjk>	[2000]
+3-7C79	U+91AC	# <cjk>	[2000]
+3-7C7A	U+91B1	# <cjk>	[2000]
+3-7C7B	U+91BC	# <cjk>	[2000]
+3-7C7C	U+91D7	# <cjk>	[2000]
+3-7C7D	U+91FB	# <cjk>	[2000]
+3-7C7E	U+91E4	# <cjk>	[2000]
+3-7D21	U+91E5	# <cjk>	[2000]
+3-7D22	U+91ED	# <cjk>	[2000]
+3-7D23	U+91F1	# <cjk>	[2000]
+3-7D24	U+9207	# <cjk>	[2000]
+3-7D25	U+9210	# <cjk>	[2000]
+3-7D26	U+9238	# <cjk>	[2000]
+3-7D27	U+9239	# <cjk>	[2000]
+3-7D28	U+923A	# <cjk>	[2000]
+3-7D29	U+923C	# <cjk>	[2000]
+3-7D2A	U+9240	# <cjk>	[2000]
+3-7D2B	U+9243	# <cjk>	[2000]
+3-7D2C	U+924F	# <cjk>	[2000]
+3-7D2D	U+9278	# <cjk>	[2000]
+3-7D2E	U+9288	# <cjk>	[2000]
+3-7D2F	U+92C2	# <cjk>	[2000]
+3-7D30	U+92CB	# <cjk>	[2000]
+3-7D31	U+92CC	# <cjk>	[2000]
+3-7D32	U+92D3	# <cjk>	[2000]
+3-7D33	U+92E0	# <cjk>	[2000]
+3-7D34	U+92FF	# <cjk>	[2000]
+3-7D35	U+9304	# <cjk>	[2000]
+3-7D36	U+931F	# <cjk>	[2000]
+3-7D37	U+9321	# <cjk>	[2000]
+3-7D38	U+9325	# <cjk>	[2000]
+3-7D39	U+9348	# <cjk>	[2000]
+3-7D3A	U+9349	# <cjk>	[2000]
+3-7D3B	U+934A	# <cjk>	[2000]
+3-7D3C	U+9364	# <cjk>	[2000]
+3-7D3D	U+9365	# <cjk>	[2000]
+3-7D3E	U+936A	# <cjk>	[2000]
+3-7D3F	U+9370	# <cjk>	[2000]
+3-7D40	U+939B	# <cjk>	[2000]
+3-7D41	U+93A3	# <cjk>	[2000]
+3-7D42	U+93BA	# <cjk>	[2000]
+3-7D43	U+93C6	# <cjk>	[2000]
+3-7D44	U+93DE	# <cjk>	[2000]
+3-7D45	U+93DF	# <cjk>	[2000]
+3-7D46	U+9404	# <cjk>	[2000]
+3-7D47	U+93FD	# <cjk>	[2000]
+3-7D48	U+9433	# <cjk>	[2000]
+3-7D49	U+944A	# <cjk>	[2000]
+3-7D4A	U+9463	# <cjk>	[2000]
+3-7D4B	U+946B	# <cjk>	[2000]
+3-7D4C	U+9471	# <cjk>	[2000]
+3-7D4D	U+9472	# <cjk>	[2000]
+3-7D4E	U+958E	# <cjk>	[2000]
+3-7D4F	U+959F	# <cjk>	[2000]
+3-7D50	U+95A6	# <cjk>	[2000]
+3-7D51	U+95A9	# <cjk>	[2000]
+3-7D52	U+95AC	# <cjk>	[2000]
+3-7D53	U+95B6	# <cjk>	[2000]
+3-7D54	U+95BD	# <cjk>	[2000]
+3-7D55	U+95CB	# <cjk>	[2000]
+3-7D56	U+95D0	# <cjk>	[2000]
+3-7D57	U+95D3	# <cjk>	[2000]
+3-7D58	U+49B0	# <cjk>	[2000]
+3-7D59	U+95DA	# <cjk>	[2000]
+3-7D5A	U+95DE	# <cjk>	[2000]
+3-7D5B	U+9658	# <cjk>	[2000]
+3-7D5C	U+9684	# <cjk>	[2000]
+3-7D5D	U+F9DC	# CJK COMPATIBILITY IDEOGRAPH-F9DC	[2000]
+3-7D5E	U+969D	# <cjk>	[2000]
+3-7D5F	U+96A4	# <cjk>	[2000]
+3-7D60	U+96A5	# <cjk>	[2000]
+3-7D61	U+96D2	# <cjk>	[2000]
+3-7D62	U+96DE	# <cjk>	[2000]
+3-7D63	U+FA68	# CJK COMPATIBILITY IDEOGRAPH-FA68	[2000]	[Unicode3.2]
+3-7D64	U+96E9	# <cjk>	[2000]
+3-7D65	U+96EF	# <cjk>	[2000]
+3-7D66	U+9733	# <cjk>	[2000]
+3-7D67	U+973B	# <cjk>	[2000]
+3-7D68	U+974D	# <cjk>	[2000]
+3-7D69	U+974E	# <cjk>	[2000]
+3-7D6A	U+974F	# <cjk>	[2000]
+3-7D6B	U+975A	# <cjk>	[2000]
+3-7D6C	U+976E	# <cjk>	[2000]
+3-7D6D	U+9773	# <cjk>	[2000]
+3-7D6E	U+9795	# <cjk>	[2000]
+3-7D6F	U+97AE	# <cjk>	[2000]
+3-7D70	U+97BA	# <cjk>	[2000]
+3-7D71	U+97C1	# <cjk>	[2000]
+3-7D72	U+97C9	# <cjk>	[2000]
+3-7D73	U+97DE	# <cjk>	[2000]
+3-7D74	U+97DB	# <cjk>	[2000]
+3-7D75	U+97F4	# <cjk>	[2000]
+3-7D76	U+FA69	# CJK COMPATIBILITY IDEOGRAPH-FA69	[2000]	[Unicode3.2]
+3-7D77	U+980A	# <cjk>	[2000]
+3-7D78	U+981E	# <cjk>	[2000]
+3-7D79	U+982B	# <cjk>	[2000]
+3-7D7A	U+9830	# <cjk>	[2000]
+3-7D7B	U+FA6A	# CJK COMPATIBILITY IDEOGRAPH-FA6A	[2000]	[Unicode3.2]
+3-7D7C	U+9852	# <cjk>	[2000]
+3-7D7D	U+9853	# <cjk>	[2000]
+3-7D7E	U+9856	# <cjk>	[2000]
+3-7E21	U+9857	# <cjk>	[2000]
+3-7E22	U+9859	# <cjk>	[2000]
+3-7E23	U+985A	# <cjk>	[2000]
+3-7E24	U+F9D0	# CJK COMPATIBILITY IDEOGRAPH-F9D0	[2000]
+3-7E25	U+9865	# <cjk>	[2000]
+3-7E26	U+986C	# <cjk>	[2000]
+3-7E27	U+98BA	# <cjk>	[2000]
+3-7E28	U+98C8	# <cjk>	[2000]
+3-7E29	U+98E7	# <cjk>	[2000]
+3-7E2A	U+9958	# <cjk>	[2000]
+3-7E2B	U+999E	# <cjk>	[2000]
+3-7E2C	U+9A02	# <cjk>	[2000]
+3-7E2D	U+9A03	# <cjk>	[2000]
+3-7E2E	U+9A24	# <cjk>	[2000]
+3-7E2F	U+9A2D	# <cjk>	[2000]
+3-7E30	U+9A2E	# <cjk>	[2000]
+3-7E31	U+9A38	# <cjk>	[2000]
+3-7E32	U+9A4A	# <cjk>	[2000]
+3-7E33	U+9A4E	# <cjk>	[2000]
+3-7E34	U+9A52	# <cjk>	[2000]
+3-7E35	U+9AB6	# <cjk>	[2000]
+3-7E36	U+9AC1	# <cjk>	[2000]
+3-7E37	U+9AC3	# <cjk>	[2000]
+3-7E38	U+9ACE	# <cjk>	[2000]
+3-7E39	U+9AD6	# <cjk>	[2000]
+3-7E3A	U+9AF9	# <cjk>	[2000]
+3-7E3B	U+9B02	# <cjk>	[2000]
+3-7E3C	U+9B08	# <cjk>	[2000]
+3-7E3D	U+9B20	# <cjk>	[2000]
+3-7E3E	U+4C17	# <cjk>	[2000]
+3-7E3F	U+9B2D	# <cjk>	[2000]
+3-7E40	U+9B5E	# <cjk>	[2000]
+3-7E41	U+9B79	# <cjk>	[2000]
+3-7E42	U+9B66	# <cjk>	[2000]
+3-7E43	U+9B72	# <cjk>	[2000]
+3-7E44	U+9B75	# <cjk>	[2000]
+3-7E45	U+9B84	# <cjk>	[2000]
+3-7E46	U+9B8A	# <cjk>	[2000]
+3-7E47	U+9B8F	# <cjk>	[2000]
+3-7E48	U+9B9E	# <cjk>	[2000]
+3-7E49	U+9BA7	# <cjk>	[2000]
+3-7E4A	U+9BC1	# <cjk>	[2000]
+3-7E4B	U+9BCE	# <cjk>	[2000]
+3-7E4C	U+9BE5	# <cjk>	[2000]
+3-7E4D	U+9BF8	# <cjk>	[2000]
+3-7E4E	U+9BFD	# <cjk>	[2000]
+3-7E4F	U+9C00	# <cjk>	[2000]
+3-7E50	U+9C23	# <cjk>	[2000]
+3-7E51	U+9C41	# <cjk>	[2000]
+3-7E52	U+9C4F	# <cjk>	[2000]
+3-7E53	U+9C50	# <cjk>	[2000]
+3-7E54	U+9C53	# <cjk>	[2000]
+3-7E55	U+9C63	# <cjk>	[2000]
+3-7E56	U+9C65	# <cjk>	[2000]
+3-7E57	U+9C77	# <cjk>	[2000]
+3-7E58	U+9D1D	# <cjk>	[2000]
+3-7E59	U+9D1E	# <cjk>	[2000]
+3-7E5A	U+9D43	# <cjk>	[2000]
+3-7E5B	U+9D47	# <cjk>	[2000]
+3-7E5C	U+9D52	# <cjk>	[2000]
+3-7E5D	U+9D63	# <cjk>	[2000]
+3-7E5E	U+9D70	# <cjk>	[2000]
+3-7E5F	U+9D7C	# <cjk>	[2000]
+3-7E60	U+9D8A	# <cjk>	[2000]
+3-7E61	U+9D96	# <cjk>	[2000]
+3-7E62	U+9DC0	# <cjk>	[2000]
+3-7E63	U+9DAC	# <cjk>	[2000]
+3-7E64	U+9DBC	# <cjk>	[2000]
+3-7E65	U+9DD7	# <cjk>	[2000]
+3-7E66	U+2A190	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D0
+3-7E67	U+9DE7	# <cjk>	[2000]
+3-7E68	U+9E07	# <cjk>	[2000]
+3-7E69	U+9E15	# <cjk>	[2000]
+3-7E6A	U+9E7C	# <cjk>	[2000]
+3-7E6B	U+9E9E	# <cjk>	[2000]
+3-7E6C	U+9EA4	# <cjk>	[2000]
+3-7E6D	U+9EAC	# <cjk>	[2000]
+3-7E6E	U+9EAF	# <cjk>	[2000]
+3-7E6F	U+9EB4	# <cjk>	[2000]
+3-7E70	U+9EB5	# <cjk>	[2000]
+3-7E71	U+9EC3	# <cjk>	[2000]
+3-7E72	U+9ED1	# <cjk>	[2000]
+3-7E73	U+9F10	# <cjk>	[2000]
+3-7E74	U+9F39	# <cjk>	[2000]
+3-7E75	U+9F57	# <cjk>	[2000]
+3-7E76	U+9F90	# <cjk>	[2000]
+3-7E77	U+9F94	# <cjk>	[2000]
+3-7E78	U+9F97	# <cjk>	[2000]
+3-7E79	U+9FA2	# <cjk>	[2000]
+3-7E7A	U+59F8	# <cjk> [2004]
+3-7E7B	U+5C5B	# <cjk> [2004]
+3-7E7C	U+5E77	# <cjk> [2004]
+3-7E7D	U+7626	# <cjk> [2004]
+3-7E7E	U+7E6B	# <cjk> [2004]
+4-2121	U+20089	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D1
+4-2122	U+4E02	# <cjk>	[2000]
+4-2123	U+4E0F	# <cjk>	[2000]
+4-2124	U+4E12	# <cjk>	[2000]
+4-2125	U+4E29	# <cjk>	[2000]
+4-2126	U+4E2B	# <cjk>	[2000]
+4-2127	U+4E2E	# <cjk>	[2000]
+4-2128	U+4E40	# <cjk>	[2000]
+4-2129	U+4E47	# <cjk>	[2000]
+4-212A	U+4E48	# <cjk>	[2000]
+4-212B	U+200A2	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D2
+4-212C	U+4E51	# <cjk>	[2000]
+4-212D	U+3406	# <cjk>	[2000]
+4-212E	U+200A4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D3
+4-212F	U+4E5A	# <cjk>	[2000]
+4-2130	U+4E69	# <cjk>	[2000]
+4-2131	U+4E9D	# <cjk>	[2000]
+4-2132	U+342C	# <cjk>	[2000]
+4-2133	U+342E	# <cjk>	[2000]
+4-2134	U+4EB9	# <cjk>	[2000]
+4-2135	U+4EBB	# <cjk>	[2000]
+4-2136	U+201A2	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D4
+4-2137	U+4EBC	# <cjk>	[2000]
+4-2138	U+4EC3	# <cjk>	[2000]
+4-2139	U+4EC8	# <cjk>	[2000]
+4-213A	U+4ED0	# <cjk>	[2000]
+4-213B	U+4EEB	# <cjk>	[2000]
+4-213C	U+4EDA	# <cjk>	[2000]
+4-213D	U+4EF1	# <cjk>	[2000]
+4-213E	U+4EF5	# <cjk>	[2000]
+4-213F	U+4F00	# <cjk>	[2000]
+4-2140	U+4F16	# <cjk>	[2000]
+4-2141	U+4F64	# <cjk>	[2000]
+4-2142	U+4F37	# <cjk>	[2000]
+4-2143	U+4F3E	# <cjk>	[2000]
+4-2144	U+4F54	# <cjk>	[2000]
+4-2145	U+4F58	# <cjk>	[2000]
+4-2146	U+20213	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D5
+4-2147	U+4F77	# <cjk>	[2000]
+4-2148	U+4F78	# <cjk>	[2000]
+4-2149	U+4F7A	# <cjk>	[2000]
+4-214A	U+4F7D	# <cjk>	[2000]
+4-214B	U+4F82	# <cjk>	[2000]
+4-214C	U+4F85	# <cjk>	[2000]
+4-214D	U+4F92	# <cjk>	[2000]
+4-214E	U+4F9A	# <cjk>	[2000]
+4-214F	U+4FE6	# <cjk>	[2000]
+4-2150	U+4FB2	# <cjk>	[2000]
+4-2151	U+4FBE	# <cjk>	[2000]
+4-2152	U+4FC5	# <cjk>	[2000]
+4-2153	U+4FCB	# <cjk>	[2000]
+4-2154	U+4FCF	# <cjk>	[2000]
+4-2155	U+4FD2	# <cjk>	[2000]
+4-2156	U+346A	# <cjk>	[2000]
+4-2157	U+4FF2	# <cjk>	[2000]
+4-2158	U+5000	# <cjk>	[2000]
+4-2159	U+5010	# <cjk>	[2000]
+4-215A	U+5013	# <cjk>	[2000]
+4-215B	U+501C	# <cjk>	[2000]
+4-215C	U+501E	# <cjk>	[2000]
+4-215D	U+5022	# <cjk>	[2000]
+4-215E	U+3468	# <cjk>	[2000]
+4-215F	U+5042	# <cjk>	[2000]
+4-2160	U+5046	# <cjk>	[2000]
+4-2161	U+504E	# <cjk>	[2000]
+4-2162	U+5053	# <cjk>	[2000]
+4-2163	U+5057	# <cjk>	[2000]
+4-2164	U+5063	# <cjk>	[2000]
+4-2165	U+5066	# <cjk>	[2000]
+4-2166	U+506A	# <cjk>	[2000]
+4-2167	U+5070	# <cjk>	[2000]
+4-2168	U+50A3	# <cjk>	[2000]
+4-2169	U+5088	# <cjk>	[2000]
+4-216A	U+5092	# <cjk>	[2000]
+4-216B	U+5093	# <cjk>	[2000]
+4-216C	U+5095	# <cjk>	[2000]
+4-216D	U+5096	# <cjk>	[2000]
+4-216E	U+509C	# <cjk>	[2000]
+4-216F	U+50AA	# <cjk>	[2000]
+4-2170	U+2032B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D6
+4-2171	U+50B1	# <cjk>	[2000]
+4-2172	U+50BA	# <cjk>	[2000]
+4-2173	U+50BB	# <cjk>	[2000]
+4-2174	U+50C4	# <cjk>	[2000]
+4-2175	U+50C7	# <cjk>	[2000]
+4-2176	U+50F3	# <cjk>	[2000]
+4-2177	U+20381	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D7
+4-2178	U+50CE	# <cjk>	[2000]
+4-2179	U+20371	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D8
+4-217A	U+50D4	# <cjk>	[2000]
+4-217B	U+50D9	# <cjk>	[2000]
+4-217C	U+50E1	# <cjk>	[2000]
+4-217D	U+50E9	# <cjk>	[2000]
+4-217E	U+3492	# <cjk>	[2000]
+4-2321	U+5108	# <cjk>	[2000]
+4-2322	U+203F9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7D9
+4-2323	U+5117	# <cjk>	[2000]
+4-2324	U+511B	# <cjk>	[2000]
+4-2325	U+2044A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7DA
+4-2326	U+5160	# <cjk>	[2000]
+4-2327	U+20509	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7DB
+4-2328	U+5173	# <cjk>	[2000]
+4-2329	U+5183	# <cjk>	[2000]
+4-232A	U+518B	# <cjk>	[2000]
+4-232B	U+34BC	# <cjk>	[2000]
+4-232C	U+5198	# <cjk>	[2000]
+4-232D	U+51A3	# <cjk>	[2000]
+4-232E	U+51AD	# <cjk>	[2000]
+4-232F	U+34C7	# <cjk>	[2000]
+4-2330	U+51BC	# <cjk>	[2000]
+4-2331	U+205D6	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7DC
+4-2332	U+20628	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7DD
+4-2333	U+51F3	# <cjk>	[2000]
+4-2334	U+51F4	# <cjk>	[2000]
+4-2335	U+5202	# <cjk>	[2000]
+4-2336	U+5212	# <cjk>	[2000]
+4-2337	U+5216	# <cjk>	[2000]
+4-2338	U+2074F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7DE
+4-2339	U+5255	# <cjk>	[2000]
+4-233A	U+525C	# <cjk>	[2000]
+4-233B	U+526C	# <cjk>	[2000]
+4-233C	U+5277	# <cjk>	[2000]
+4-233D	U+5284	# <cjk>	[2000]
+4-233E	U+5282	# <cjk>	[2000]
+4-233F	U+20807	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7DF
+4-2340	U+5298	# <cjk>	[2000]
+4-2341	U+2083A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E0
+4-2342	U+52A4	# <cjk>	[2000]
+4-2343	U+52A6	# <cjk>	[2000]
+4-2344	U+52AF	# <cjk>	[2000]
+4-2345	U+52BA	# <cjk>	[2000]
+4-2346	U+52BB	# <cjk>	[2000]
+4-2347	U+52CA	# <cjk>	[2000]
+4-2348	U+351F	# <cjk>	[2000]
+4-2349	U+52D1	# <cjk>	[2000]
+4-234A	U+208B9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E1
+4-234B	U+52F7	# <cjk>	[2000]
+4-234C	U+530A	# <cjk>	[2000]
+4-234D	U+530B	# <cjk>	[2000]
+4-234E	U+5324	# <cjk>	[2000]
+4-234F	U+5335	# <cjk>	[2000]
+4-2350	U+533E	# <cjk>	[2000]
+4-2351	U+5342	# <cjk>	[2000]
+4-2352	U+2097C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E2
+4-2353	U+2099D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E3
+4-2354	U+5367	# <cjk>	[2000]
+4-2355	U+536C	# <cjk>	[2000]
+4-2356	U+537A	# <cjk>	[2000]
+4-2357	U+53A4	# <cjk>	[2000]
+4-2358	U+53B4	# <cjk>	[2000]
+4-2359	U+20AD3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E4
+4-235A	U+53B7	# <cjk>	[2000]
+4-235B	U+53C0	# <cjk>	[2000]
+4-235C	U+20B1D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E5
+4-235D	U+355D	# <cjk>	[2000]
+4-235E	U+355E	# <cjk>	[2000]
+4-235F	U+53D5	# <cjk>	[2000]
+4-2360	U+53DA	# <cjk>	[2000]
+4-2361	U+3563	# <cjk>	[2000]
+4-2362	U+53F4	# <cjk>	[2000]
+4-2363	U+53F5	# <cjk>	[2000]
+4-2364	U+5455	# <cjk>	[2000]
+4-2365	U+5424	# <cjk>	[2000]
+4-2366	U+5428	# <cjk>	[2000]
+4-2367	U+356E	# <cjk>	[2000]
+4-2368	U+5443	# <cjk>	[2000]
+4-2369	U+5462	# <cjk>	[2000]
+4-236A	U+5466	# <cjk>	[2000]
+4-236B	U+546C	# <cjk>	[2000]
+4-236C	U+548A	# <cjk>	[2000]
+4-236D	U+548D	# <cjk>	[2000]
+4-236E	U+5495	# <cjk>	[2000]
+4-236F	U+54A0	# <cjk>	[2000]
+4-2370	U+54A6	# <cjk>	[2000]
+4-2371	U+54AD	# <cjk>	[2000]
+4-2372	U+54AE	# <cjk>	[2000]
+4-2373	U+54B7	# <cjk>	[2000]
+4-2374	U+54BA	# <cjk>	[2000]
+4-2375	U+54BF	# <cjk>	[2000]
+4-2376	U+54C3	# <cjk>	[2000]
+4-2377	U+20D45	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E6
+4-2378	U+54EC	# <cjk>	[2000]
+4-2379	U+54EF	# <cjk>	[2000]
+4-237A	U+54F1	# <cjk>	[2000]
+4-237B	U+54F3	# <cjk>	[2000]
+4-237C	U+5500	# <cjk>	[2000]
+4-237D	U+5501	# <cjk>	[2000]
+4-237E	U+5509	# <cjk>	[2000]
+4-2421	U+553C	# <cjk>	[2000]
+4-2422	U+5541	# <cjk>	[2000]
+4-2423	U+35A6	# <cjk>	[2000]
+4-2424	U+5547	# <cjk>	[2000]
+4-2425	U+554A	# <cjk>	[2000]
+4-2426	U+35A8	# <cjk>	[2000]
+4-2427	U+5560	# <cjk>	[2000]
+4-2428	U+5561	# <cjk>	[2000]
+4-2429	U+5564	# <cjk>	[2000]
+4-242A	U+20DE1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E7
+4-242B	U+557D	# <cjk>	[2000]
+4-242C	U+5582	# <cjk>	[2000]
+4-242D	U+5588	# <cjk>	[2000]
+4-242E	U+5591	# <cjk>	[2000]
+4-242F	U+35C5	# <cjk>	[2000]
+4-2430	U+55D2	# <cjk>	[2000]
+4-2431	U+20E95	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E8
+4-2432	U+20E6D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7E9
+4-2433	U+55BF	# <cjk>	[2000]
+4-2434	U+55C9	# <cjk>	[2000]
+4-2435	U+55CC	# <cjk>	[2000]
+4-2436	U+55D1	# <cjk>	[2000]
+4-2437	U+55DD	# <cjk>	[2000]
+4-2438	U+35DA	# <cjk>	[2000]
+4-2439	U+55E2	# <cjk>	[2000]
+4-243A	U+20E64	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7EA
+4-243B	U+55E9	# <cjk>	[2000]
+4-243C	U+5628	# <cjk>	[2000]
+4-243D	U+20F5F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7EB
+4-243E	U+5607	# <cjk>	[2000]
+4-243F	U+5610	# <cjk>	[2000]
+4-2440	U+5630	# <cjk>	[2000]
+4-2441	U+5637	# <cjk>	[2000]
+4-2442	U+35F4	# <cjk>	[2000]
+4-2443	U+563D	# <cjk>	[2000]
+4-2444	U+563F	# <cjk>	[2000]
+4-2445	U+5640	# <cjk>	[2000]
+4-2446	U+5647	# <cjk>	[2000]
+4-2447	U+565E	# <cjk>	[2000]
+4-2448	U+5660	# <cjk>	[2000]
+4-2449	U+566D	# <cjk>	[2000]
+4-244A	U+3605	# <cjk>	[2000]
+4-244B	U+5688	# <cjk>	[2000]
+4-244C	U+568C	# <cjk>	[2000]
+4-244D	U+5695	# <cjk>	[2000]
+4-244E	U+569A	# <cjk>	[2000]
+4-244F	U+569D	# <cjk>	[2000]
+4-2450	U+56A8	# <cjk>	[2000]
+4-2451	U+56AD	# <cjk>	[2000]
+4-2452	U+56B2	# <cjk>	[2000]
+4-2453	U+56C5	# <cjk>	[2000]
+4-2454	U+56CD	# <cjk>	[2000]
+4-2455	U+56DF	# <cjk>	[2000]
+4-2456	U+56E8	# <cjk>	[2000]
+4-2457	U+56F6	# <cjk>	[2000]
+4-2458	U+56F7	# <cjk>	[2000]
+4-2459	U+21201	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7EC
+4-245A	U+5715	# <cjk>	[2000]
+4-245B	U+5723	# <cjk>	[2000]
+4-245C	U+21255	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7ED
+4-245D	U+5729	# <cjk>	[2000]
+4-245E	U+2127B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7EE
+4-245F	U+5745	# <cjk>	[2000]
+4-2460	U+5746	# <cjk>	[2000]
+4-2461	U+574C	# <cjk>	[2000]
+4-2462	U+574D	# <cjk>	[2000]
+4-2463	U+21274	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7EF
+4-2464	U+5768	# <cjk>	[2000]
+4-2465	U+576F	# <cjk>	[2000]
+4-2466	U+5773	# <cjk>	[2000]
+4-2467	U+5774	# <cjk>	[2000]
+4-2468	U+5775	# <cjk>	[2000]
+4-2469	U+577B	# <cjk>	[2000]
+4-246A	U+212E4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F0
+4-246B	U+212D7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F1
+4-246C	U+57AC	# <cjk>	[2000]
+4-246D	U+579A	# <cjk>	[2000]
+4-246E	U+579D	# <cjk>	[2000]
+4-246F	U+579E	# <cjk>	[2000]
+4-2470	U+57A8	# <cjk>	[2000]
+4-2471	U+57D7	# <cjk>	[2000]
+4-2472	U+212FD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F2
+4-2473	U+57CC	# <cjk>	[2000]
+4-2474	U+21336	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F3
+4-2475	U+21344	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F4
+4-2476	U+57DE	# <cjk>	[2000]
+4-2477	U+57E6	# <cjk>	[2000]
+4-2478	U+57F0	# <cjk>	[2000]
+4-2479	U+364A	# <cjk>	[2000]
+4-247A	U+57F8	# <cjk>	[2000]
+4-247B	U+57FB	# <cjk>	[2000]
+4-247C	U+57FD	# <cjk>	[2000]
+4-247D	U+5804	# <cjk>	[2000]
+4-247E	U+581E	# <cjk>	[2000]
+4-2521	U+5820	# <cjk>	[2000]
+4-2522	U+5827	# <cjk>	[2000]
+4-2523	U+5832	# <cjk>	[2000]
+4-2524	U+5839	# <cjk>	[2000]
+4-2525	U+213C4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F5
+4-2526	U+5849	# <cjk>	[2000]
+4-2527	U+584C	# <cjk>	[2000]
+4-2528	U+5867	# <cjk>	[2000]
+4-2529	U+588A	# <cjk>	[2000]
+4-252A	U+588B	# <cjk>	[2000]
+4-252B	U+588D	# <cjk>	[2000]
+4-252C	U+588F	# <cjk>	[2000]
+4-252D	U+5890	# <cjk>	[2000]
+4-252E	U+5894	# <cjk>	[2000]
+4-252F	U+589D	# <cjk>	[2000]
+4-2530	U+58AA	# <cjk>	[2000]
+4-2531	U+58B1	# <cjk>	[2000]
+4-2532	U+2146D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F6
+4-2533	U+58C3	# <cjk>	[2000]
+4-2534	U+58CD	# <cjk>	[2000]
+4-2535	U+58E2	# <cjk>	[2000]
+4-2536	U+58F3	# <cjk>	[2000]
+4-2537	U+58F4	# <cjk>	[2000]
+4-2538	U+5905	# <cjk>	[2000]
+4-2539	U+5906	# <cjk>	[2000]
+4-253A	U+590B	# <cjk>	[2000]
+4-253B	U+590D	# <cjk>	[2000]
+4-253C	U+5914	# <cjk>	[2000]
+4-253D	U+5924	# <cjk>	[2000]
+4-253E	U+215D7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F7
+4-253F	U+3691	# <cjk>	[2000]
+4-2540	U+593D	# <cjk>	[2000]
+4-2541	U+3699	# <cjk>	[2000]
+4-2542	U+5946	# <cjk>	[2000]
+4-2543	U+3696	# <cjk>	[2000]
+4-2544	U+26C29	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F8
+4-2545	U+595B	# <cjk>	[2000]
+4-2546	U+595F	# <cjk>	[2000]
+4-2547	U+21647	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7F9
+4-2548	U+5975	# <cjk>	[2000]
+4-2549	U+5976	# <cjk>	[2000]
+4-254A	U+597C	# <cjk>	[2000]
+4-254B	U+599F	# <cjk>	[2000]
+4-254C	U+59AE	# <cjk>	[2000]
+4-254D	U+59BC	# <cjk>	[2000]
+4-254E	U+59C8	# <cjk>	[2000]
+4-254F	U+59CD	# <cjk>	[2000]
+4-2550	U+59DE	# <cjk>	[2000]
+4-2551	U+59E3	# <cjk>	[2000]
+4-2552	U+59E4	# <cjk>	[2000]
+4-2553	U+59E7	# <cjk>	[2000]
+4-2554	U+59EE	# <cjk>	[2000]
+4-2555	U+21706	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7FA
+4-2556	U+21742	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7FB
+4-2557	U+36CF	# <cjk>	[2000]
+4-2558	U+5A0C	# <cjk>	[2000]
+4-2559	U+5A0D	# <cjk>	[2000]
+4-255A	U+5A17	# <cjk>	[2000]
+4-255B	U+5A27	# <cjk>	[2000]
+4-255C	U+5A2D	# <cjk>	[2000]
+4-255D	U+5A55	# <cjk>	[2000]
+4-255E	U+5A65	# <cjk>	[2000]
+4-255F	U+5A7A	# <cjk>	[2000]
+4-2560	U+5A8B	# <cjk>	[2000]
+4-2561	U+5A9C	# <cjk>	[2000]
+4-2562	U+5A9F	# <cjk>	[2000]
+4-2563	U+5AA0	# <cjk>	[2000]
+4-2564	U+5AA2	# <cjk>	[2000]
+4-2565	U+5AB1	# <cjk>	[2000]
+4-2566	U+5AB3	# <cjk>	[2000]
+4-2567	U+5AB5	# <cjk>	[2000]
+4-2568	U+5ABA	# <cjk>	[2000]
+4-2569	U+5ABF	# <cjk>	[2000]
+4-256A	U+5ADA	# <cjk>	[2000]
+4-256B	U+5ADC	# <cjk>	[2000]
+4-256C	U+5AE0	# <cjk>	[2000]
+4-256D	U+5AE5	# <cjk>	[2000]
+4-256E	U+5AF0	# <cjk>	[2000]
+4-256F	U+5AEE	# <cjk>	[2000]
+4-2570	U+5AF5	# <cjk>	[2000]
+4-2571	U+5B00	# <cjk>	[2000]
+4-2572	U+5B08	# <cjk>	[2000]
+4-2573	U+5B17	# <cjk>	[2000]
+4-2574	U+5B34	# <cjk>	[2000]
+4-2575	U+5B2D	# <cjk>	[2000]
+4-2576	U+5B4C	# <cjk>	[2000]
+4-2577	U+5B52	# <cjk>	[2000]
+4-2578	U+5B68	# <cjk>	[2000]
+4-2579	U+5B6F	# <cjk>	[2000]
+4-257A	U+5B7C	# <cjk>	[2000]
+4-257B	U+5B7F	# <cjk>	[2000]
+4-257C	U+5B81	# <cjk>	[2000]
+4-257D	U+5B84	# <cjk>	[2000]
+4-257E	U+219C3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7FC
+4-2821	U+5B96	# <cjk>	[2000]
+4-2822	U+5BAC	# <cjk>	[2000]
+4-2823	U+3761	# <cjk>	[2000]
+4-2824	U+5BC0	# <cjk>	[2000]
+4-2825	U+3762	# <cjk>	[2000]
+4-2826	U+5BCE	# <cjk>	[2000]
+4-2827	U+5BD6	# <cjk>	[2000]
+4-2828	U+376C	# <cjk>	[2000]
+4-2829	U+376B	# <cjk>	[2000]
+4-282A	U+5BF1	# <cjk>	[2000]
+4-282B	U+5BFD	# <cjk>	[2000]
+4-282C	U+3775	# <cjk>	[2000]
+4-282D	U+5C03	# <cjk>	[2000]
+4-282E	U+5C29	# <cjk>	[2000]
+4-282F	U+5C30	# <cjk>	[2000]
+4-2830	U+21C56	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7FD
+4-2831	U+5C5F	# <cjk>	[2000]
+4-2832	U+5C63	# <cjk>	[2000]
+4-2833	U+5C67	# <cjk>	[2000]
+4-2834	U+5C68	# <cjk>	[2000]
+4-2835	U+5C69	# <cjk>	[2000]
+4-2836	U+5C70	# <cjk>	[2000]
+4-2837	U+21D2D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7FE
+4-2838	U+21D45	# <cjk>	[2000]	[Unicode3.1]	Private: U+F7FF
+4-2839	U+5C7C	# <cjk>	[2000]
+4-283A	U+21D78	# <cjk>	[2000]	[Unicode3.1]	Private: U+F800
+4-283B	U+21D62	# <cjk>	[2000]	[Unicode3.1]	Private: U+F801
+4-283C	U+5C88	# <cjk>	[2000]
+4-283D	U+5C8A	# <cjk>	[2000]
+4-283E	U+37C1	# <cjk>	[2000]
+4-283F	U+21DA1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F802
+4-2840	U+21D9C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F803
+4-2841	U+5CA0	# <cjk>	[2000]
+4-2842	U+5CA2	# <cjk>	[2000]
+4-2843	U+5CA6	# <cjk>	[2000]
+4-2844	U+5CA7	# <cjk>	[2000]
+4-2845	U+21D92	# <cjk>	[2000]	[Unicode3.1]	Private: U+F804
+4-2846	U+5CAD	# <cjk>	[2000]
+4-2847	U+5CB5	# <cjk>	[2000]
+4-2848	U+21DB7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F805
+4-2849	U+5CC9	# <cjk>	[2000]
+4-284A	U+21DE0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F806
+4-284B	U+21E33	# <cjk>	[2000]	[Unicode3.1]	Private: U+F807
+4-284C	U+5D06	# <cjk>	[2000]
+4-284D	U+5D10	# <cjk>	[2000]
+4-284E	U+5D2B	# <cjk>	[2000]
+4-284F	U+5D1D	# <cjk>	[2000]
+4-2850	U+5D20	# <cjk>	[2000]
+4-2851	U+5D24	# <cjk>	[2000]
+4-2852	U+5D26	# <cjk>	[2000]
+4-2853	U+5D31	# <cjk>	[2000]
+4-2854	U+5D39	# <cjk>	[2000]
+4-2855	U+5D42	# <cjk>	[2000]
+4-2856	U+37E8	# <cjk>	[2000]
+4-2857	U+5D61	# <cjk>	[2000]
+4-2858	U+5D6A	# <cjk>	[2000]
+4-2859	U+37F4	# <cjk>	[2000]
+4-285A	U+5D70	# <cjk>	[2000]
+4-285B	U+21F1E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F808
+4-285C	U+37FD	# <cjk>	[2000]
+4-285D	U+5D88	# <cjk>	[2000]
+4-285E	U+3800	# <cjk>	[2000]
+4-285F	U+5D92	# <cjk>	[2000]
+4-2860	U+5D94	# <cjk>	[2000]
+4-2861	U+5D97	# <cjk>	[2000]
+4-2862	U+5D99	# <cjk>	[2000]
+4-2863	U+5DB0	# <cjk>	[2000]
+4-2864	U+5DB2	# <cjk>	[2000]
+4-2865	U+5DB4	# <cjk>	[2000]
+4-2866	U+21F76	# <cjk>	[2000]	[Unicode3.1]	Private: U+F809
+4-2867	U+5DB9	# <cjk>	[2000]
+4-2868	U+5DD1	# <cjk>	[2000]
+4-2869	U+5DD7	# <cjk>	[2000]
+4-286A	U+5DD8	# <cjk>	[2000]
+4-286B	U+5DE0	# <cjk>	[2000]
+4-286C	U+21FFA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F80A
+4-286D	U+5DE4	# <cjk>	[2000]
+4-286E	U+5DE9	# <cjk>	[2000]
+4-286F	U+382F	# <cjk>	[2000]
+4-2870	U+5E00	# <cjk>	[2000]
+4-2871	U+3836	# <cjk>	[2000]
+4-2872	U+5E12	# <cjk>	[2000]
+4-2873	U+5E15	# <cjk>	[2000]
+4-2874	U+3840	# <cjk>	[2000]
+4-2875	U+5E1F	# <cjk>	[2000]
+4-2876	U+5E2E	# <cjk>	[2000]
+4-2877	U+5E3E	# <cjk>	[2000]
+4-2878	U+5E49	# <cjk>	[2000]
+4-2879	U+385C	# <cjk>	[2000]
+4-287A	U+5E56	# <cjk>	[2000]
+4-287B	U+3861	# <cjk>	[2000]
+4-287C	U+5E6B	# <cjk>	[2000]
+4-287D	U+5E6C	# <cjk>	[2000]
+4-287E	U+5E6D	# <cjk>	[2000]
+4-2C21	U+5E6E	# <cjk>	[2000]
+4-2C22	U+2217B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F80B
+4-2C23	U+5EA5	# <cjk>	[2000]
+4-2C24	U+5EAA	# <cjk>	[2000]
+4-2C25	U+5EAC	# <cjk>	[2000]
+4-2C26	U+5EB9	# <cjk>	[2000]
+4-2C27	U+5EBF	# <cjk>	[2000]
+4-2C28	U+5EC6	# <cjk>	[2000]
+4-2C29	U+5ED2	# <cjk>	[2000]
+4-2C2A	U+5ED9	# <cjk>	[2000]
+4-2C2B	U+2231E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F80C
+4-2C2C	U+5EFD	# <cjk>	[2000]
+4-2C2D	U+5F08	# <cjk>	[2000]
+4-2C2E	U+5F0E	# <cjk>	[2000]
+4-2C2F	U+5F1C	# <cjk>	[2000]
+4-2C30	U+223AD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F80D
+4-2C31	U+5F1E	# <cjk>	[2000]
+4-2C32	U+5F47	# <cjk>	[2000]
+4-2C33	U+5F63	# <cjk>	[2000]
+4-2C34	U+5F72	# <cjk>	[2000]
+4-2C35	U+5F7E	# <cjk>	[2000]
+4-2C36	U+5F8F	# <cjk>	[2000]
+4-2C37	U+5FA2	# <cjk>	[2000]
+4-2C38	U+5FA4	# <cjk>	[2000]
+4-2C39	U+5FB8	# <cjk>	[2000]
+4-2C3A	U+5FC4	# <cjk>	[2000]
+4-2C3B	U+38FA	# <cjk>	[2000]
+4-2C3C	U+5FC7	# <cjk>	[2000]
+4-2C3D	U+5FCB	# <cjk>	[2000]
+4-2C3E	U+5FD2	# <cjk>	[2000]
+4-2C3F	U+5FD3	# <cjk>	[2000]
+4-2C40	U+5FD4	# <cjk>	[2000]
+4-2C41	U+5FE2	# <cjk>	[2000]
+4-2C42	U+5FEE	# <cjk>	[2000]
+4-2C43	U+5FEF	# <cjk>	[2000]
+4-2C44	U+5FF3	# <cjk>	[2000]
+4-2C45	U+5FFC	# <cjk>	[2000]
+4-2C46	U+3917	# <cjk>	[2000]
+4-2C47	U+6017	# <cjk>	[2000]
+4-2C48	U+6022	# <cjk>	[2000]
+4-2C49	U+6024	# <cjk>	[2000]
+4-2C4A	U+391A	# <cjk>	[2000]
+4-2C4B	U+604C	# <cjk>	[2000]
+4-2C4C	U+607F	# <cjk>	[2000]
+4-2C4D	U+608A	# <cjk>	[2000]
+4-2C4E	U+6095	# <cjk>	[2000]
+4-2C4F	U+60A8	# <cjk>	[2000]
+4-2C50	U+226F3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F80E
+4-2C51	U+60B0	# <cjk>	[2000]
+4-2C52	U+60B1	# <cjk>	[2000]
+4-2C53	U+60BE	# <cjk>	[2000]
+4-2C54	U+60C8	# <cjk>	[2000]
+4-2C55	U+60D9	# <cjk>	[2000]
+4-2C56	U+60DB	# <cjk>	[2000]
+4-2C57	U+60EE	# <cjk>	[2000]
+4-2C58	U+60F2	# <cjk>	[2000]
+4-2C59	U+60F5	# <cjk>	[2000]
+4-2C5A	U+6110	# <cjk>	[2000]
+4-2C5B	U+6112	# <cjk>	[2000]
+4-2C5C	U+6113	# <cjk>	[2000]
+4-2C5D	U+6119	# <cjk>	[2000]
+4-2C5E	U+611E	# <cjk>	[2000]
+4-2C5F	U+613A	# <cjk>	[2000]
+4-2C60	U+396F	# <cjk>	[2000]
+4-2C61	U+6141	# <cjk>	[2000]
+4-2C62	U+6146	# <cjk>	[2000]
+4-2C63	U+6160	# <cjk>	[2000]
+4-2C64	U+617C	# <cjk>	[2000]
+4-2C65	U+2285B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F80F
+4-2C66	U+6192	# <cjk>	[2000]
+4-2C67	U+6193	# <cjk>	[2000]
+4-2C68	U+6197	# <cjk>	[2000]
+4-2C69	U+6198	# <cjk>	[2000]
+4-2C6A	U+61A5	# <cjk>	[2000]
+4-2C6B	U+61A8	# <cjk>	[2000]
+4-2C6C	U+61AD	# <cjk>	[2000]
+4-2C6D	U+228AB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F810
+4-2C6E	U+61D5	# <cjk>	[2000]
+4-2C6F	U+61DD	# <cjk>	[2000]
+4-2C70	U+61DF	# <cjk>	[2000]
+4-2C71	U+61F5	# <cjk>	[2000]
+4-2C72	U+2298F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F811
+4-2C73	U+6215	# <cjk>	[2000]
+4-2C74	U+6223	# <cjk>	[2000]
+4-2C75	U+6229	# <cjk>	[2000]
+4-2C76	U+6246	# <cjk>	[2000]
+4-2C77	U+624C	# <cjk>	[2000]
+4-2C78	U+6251	# <cjk>	[2000]
+4-2C79	U+6252	# <cjk>	[2000]
+4-2C7A	U+6261	# <cjk>	[2000]
+4-2C7B	U+6264	# <cjk>	[2000]
+4-2C7C	U+627B	# <cjk>	[2000]
+4-2C7D	U+626D	# <cjk>	[2000]
+4-2C7E	U+6273	# <cjk>	[2000]
+4-2D21	U+6299	# <cjk>	[2000]
+4-2D22	U+62A6	# <cjk>	[2000]
+4-2D23	U+62D5	# <cjk>	[2000]
+4-2D24	U+22AB8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F812
+4-2D25	U+62FD	# <cjk>	[2000]
+4-2D26	U+6303	# <cjk>	[2000]
+4-2D27	U+630D	# <cjk>	[2000]
+4-2D28	U+6310	# <cjk>	[2000]
+4-2D29	U+22B4F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F813
+4-2D2A	U+22B50	# <cjk>	[2000]	[Unicode3.1]	Private: U+F814
+4-2D2B	U+6332	# <cjk>	[2000]
+4-2D2C	U+6335	# <cjk>	[2000]
+4-2D2D	U+633B	# <cjk>	[2000]
+4-2D2E	U+633C	# <cjk>	[2000]
+4-2D2F	U+6341	# <cjk>	[2000]
+4-2D30	U+6344	# <cjk>	[2000]
+4-2D31	U+634E	# <cjk>	[2000]
+4-2D32	U+22B46	# <cjk>	[2000]	[Unicode3.1]	Private: U+F815
+4-2D33	U+6359	# <cjk>	[2000]
+4-2D34	U+22C1D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F816
+4-2D35	U+22BA6	# <cjk>	[2000]	[Unicode3.1]	Private: U+F817
+4-2D36	U+636C	# <cjk>	[2000]
+4-2D37	U+6384	# <cjk>	[2000]
+4-2D38	U+6399	# <cjk>	[2000]
+4-2D39	U+22C24	# <cjk>	[2000]	[Unicode3.1]	Private: U+F818
+4-2D3A	U+6394	# <cjk>	[2000]
+4-2D3B	U+63BD	# <cjk>	[2000]
+4-2D3C	U+63F7	# <cjk>	[2000]
+4-2D3D	U+63D4	# <cjk>	[2000]
+4-2D3E	U+63D5	# <cjk>	[2000]
+4-2D3F	U+63DC	# <cjk>	[2000]
+4-2D40	U+63E0	# <cjk>	[2000]
+4-2D41	U+63EB	# <cjk>	[2000]
+4-2D42	U+63EC	# <cjk>	[2000]
+4-2D43	U+63F2	# <cjk>	[2000]
+4-2D44	U+6409	# <cjk>	[2000]
+4-2D45	U+641E	# <cjk>	[2000]
+4-2D46	U+6425	# <cjk>	[2000]
+4-2D47	U+6429	# <cjk>	[2000]
+4-2D48	U+642F	# <cjk>	[2000]
+4-2D49	U+645A	# <cjk>	[2000]
+4-2D4A	U+645B	# <cjk>	[2000]
+4-2D4B	U+645D	# <cjk>	[2000]
+4-2D4C	U+6473	# <cjk>	[2000]
+4-2D4D	U+647D	# <cjk>	[2000]
+4-2D4E	U+6487	# <cjk>	[2000]
+4-2D4F	U+6491	# <cjk>	[2000]
+4-2D50	U+649D	# <cjk>	[2000]
+4-2D51	U+649F	# <cjk>	[2000]
+4-2D52	U+64CB	# <cjk>	[2000]
+4-2D53	U+64CC	# <cjk>	[2000]
+4-2D54	U+64D5	# <cjk>	[2000]
+4-2D55	U+64D7	# <cjk>	[2000]
+4-2D56	U+22DE1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F819
+4-2D57	U+64E4	# <cjk>	[2000]
+4-2D58	U+64E5	# <cjk>	[2000]
+4-2D59	U+64FF	# <cjk>	[2000]
+4-2D5A	U+6504	# <cjk>	[2000]
+4-2D5B	U+3A6E	# <cjk>	[2000]
+4-2D5C	U+650F	# <cjk>	[2000]
+4-2D5D	U+6514	# <cjk>	[2000]
+4-2D5E	U+6516	# <cjk>	[2000]
+4-2D5F	U+3A73	# <cjk>	[2000]
+4-2D60	U+651E	# <cjk>	[2000]
+4-2D61	U+6532	# <cjk>	[2000]
+4-2D62	U+6544	# <cjk>	[2000]
+4-2D63	U+6554	# <cjk>	[2000]
+4-2D64	U+656B	# <cjk>	[2000]
+4-2D65	U+657A	# <cjk>	[2000]
+4-2D66	U+6581	# <cjk>	[2000]
+4-2D67	U+6584	# <cjk>	[2000]
+4-2D68	U+6585	# <cjk>	[2000]
+4-2D69	U+658A	# <cjk>	[2000]
+4-2D6A	U+65B2	# <cjk>	[2000]
+4-2D6B	U+65B5	# <cjk>	[2000]
+4-2D6C	U+65B8	# <cjk>	[2000]
+4-2D6D	U+65BF	# <cjk>	[2000]
+4-2D6E	U+65C2	# <cjk>	[2000]
+4-2D6F	U+65C9	# <cjk>	[2000]
+4-2D70	U+65D4	# <cjk>	[2000]
+4-2D71	U+3AD6	# <cjk>	[2000]
+4-2D72	U+65F2	# <cjk>	[2000]
+4-2D73	U+65F9	# <cjk>	[2000]
+4-2D74	U+65FC	# <cjk>	[2000]
+4-2D75	U+6604	# <cjk>	[2000]
+4-2D76	U+6608	# <cjk>	[2000]
+4-2D77	U+6621	# <cjk>	[2000]
+4-2D78	U+662A	# <cjk>	[2000]
+4-2D79	U+6645	# <cjk>	[2000]
+4-2D7A	U+6651	# <cjk>	[2000]
+4-2D7B	U+664E	# <cjk>	[2000]
+4-2D7C	U+3AEA	# <cjk>	[2000]
+4-2D7D	U+231C3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F81A
+4-2D7E	U+6657	# <cjk>	[2000]
+4-2E21	U+665B	# <cjk>	[2000]
+4-2E22	U+6663	# <cjk>	[2000]
+4-2E23	U+231F5	# <cjk>	[2000]	[Unicode3.1]	Private: U+F81B
+4-2E24	U+231B6	# <cjk>	[2000]	[Unicode3.1]	Private: U+F81C
+4-2E25	U+666A	# <cjk>	[2000]
+4-2E26	U+666B	# <cjk>	[2000]
+4-2E27	U+666C	# <cjk>	[2000]
+4-2E28	U+666D	# <cjk>	[2000]
+4-2E29	U+667B	# <cjk>	[2000]
+4-2E2A	U+6680	# <cjk>	[2000]
+4-2E2B	U+6690	# <cjk>	[2000]
+4-2E2C	U+6692	# <cjk>	[2000]
+4-2E2D	U+6699	# <cjk>	[2000]
+4-2E2E	U+3B0E	# <cjk>	[2000]
+4-2E2F	U+66AD	# <cjk>	[2000]
+4-2E30	U+66B1	# <cjk>	[2000]
+4-2E31	U+66B5	# <cjk>	[2000]
+4-2E32	U+3B1A	# <cjk>	[2000]
+4-2E33	U+66BF	# <cjk>	[2000]
+4-2E34	U+3B1C	# <cjk>	[2000]
+4-2E35	U+66EC	# <cjk>	[2000]
+4-2E36	U+3AD7	# <cjk>	[2000]
+4-2E37	U+6701	# <cjk>	[2000]
+4-2E38	U+6705	# <cjk>	[2000]
+4-2E39	U+6712	# <cjk>	[2000]
+4-2E3A	U+23372	# <cjk>	[2000]	[Unicode3.1]	Private: U+F81D
+4-2E3B	U+6719	# <cjk>	[2000]
+4-2E3C	U+233D3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F81E
+4-2E3D	U+233D2	# <cjk>	[2000]	[Unicode3.1]	Private: U+F81F
+4-2E3E	U+674C	# <cjk>	[2000]
+4-2E3F	U+674D	# <cjk>	[2000]
+4-2E40	U+6754	# <cjk>	[2000]
+4-2E41	U+675D	# <cjk>	[2000]
+4-2E42	U+233D0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F820
+4-2E43	U+233E4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F821
+4-2E44	U+233D5	# <cjk>	[2000]	[Unicode3.1]	Private: U+F822
+4-2E45	U+6774	# <cjk>	[2000]
+4-2E46	U+6776	# <cjk>	[2000]
+4-2E47	U+233DA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F823
+4-2E48	U+6792	# <cjk>	[2000]
+4-2E49	U+233DF	# <cjk>	[2000]	[Unicode3.1]	Private: U+F824
+4-2E4A	U+8363	# <cjk>	[2000]
+4-2E4B	U+6810	# <cjk>	[2000]
+4-2E4C	U+67B0	# <cjk>	[2000]
+4-2E4D	U+67B2	# <cjk>	[2000]
+4-2E4E	U+67C3	# <cjk>	[2000]
+4-2E4F	U+67C8	# <cjk>	[2000]
+4-2E50	U+67D2	# <cjk>	[2000]
+4-2E51	U+67D9	# <cjk>	[2000]
+4-2E52	U+67DB	# <cjk>	[2000]
+4-2E53	U+67F0	# <cjk>	[2000]
+4-2E54	U+67F7	# <cjk>	[2000]
+4-2E55	U+2344A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F825
+4-2E56	U+23451	# <cjk>	[2000]	[Unicode3.1]	Private: U+F826
+4-2E57	U+2344B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F827
+4-2E58	U+6818	# <cjk>	[2000]
+4-2E59	U+681F	# <cjk>	[2000]
+4-2E5A	U+682D	# <cjk>	[2000]
+4-2E5B	U+23465	# <cjk>	[2000]	[Unicode3.1]	Private: U+F828
+4-2E5C	U+6833	# <cjk>	[2000]
+4-2E5D	U+683B	# <cjk>	[2000]
+4-2E5E	U+683E	# <cjk>	[2000]
+4-2E5F	U+6844	# <cjk>	[2000]
+4-2E60	U+6845	# <cjk>	[2000]
+4-2E61	U+6849	# <cjk>	[2000]
+4-2E62	U+684C	# <cjk>	[2000]
+4-2E63	U+6855	# <cjk>	[2000]
+4-2E64	U+6857	# <cjk>	[2000]
+4-2E65	U+3B77	# <cjk>	[2000]
+4-2E66	U+686B	# <cjk>	[2000]
+4-2E67	U+686E	# <cjk>	[2000]
+4-2E68	U+687A	# <cjk>	[2000]
+4-2E69	U+687C	# <cjk>	[2000]
+4-2E6A	U+6882	# <cjk>	[2000]
+4-2E6B	U+6890	# <cjk>	[2000]
+4-2E6C	U+6896	# <cjk>	[2000]
+4-2E6D	U+3B6D	# <cjk>	[2000]
+4-2E6E	U+6898	# <cjk>	[2000]
+4-2E6F	U+6899	# <cjk>	[2000]
+4-2E70	U+689A	# <cjk>	[2000]
+4-2E71	U+689C	# <cjk>	[2000]
+4-2E72	U+68AA	# <cjk>	[2000]
+4-2E73	U+68AB	# <cjk>	[2000]
+4-2E74	U+68B4	# <cjk>	[2000]
+4-2E75	U+68BB	# <cjk>	[2000]
+4-2E76	U+68FB	# <cjk>	[2000]
+4-2E77	U+234E4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F829
+4-2E78	U+2355A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F82A
+4-2E79	U+FA13	# CJK COMPATIBILITY IDEOGRAPH-FA13	[2000]
+4-2E7A	U+68C3	# <cjk>	[2000]
+4-2E7B	U+68C5	# <cjk>	[2000]
+4-2E7C	U+68CC	# <cjk>	[2000]
+4-2E7D	U+68CF	# <cjk>	[2000]
+4-2E7E	U+68D6	# <cjk>	[2000]
+4-2F21	U+68D9	# <cjk>	[2000]
+4-2F22	U+68E4	# <cjk>	[2000]
+4-2F23	U+68E5	# <cjk>	[2000]
+4-2F24	U+68EC	# <cjk>	[2000]
+4-2F25	U+68F7	# <cjk>	[2000]
+4-2F26	U+6903	# <cjk>	[2000]
+4-2F27	U+6907	# <cjk>	[2000]
+4-2F28	U+3B87	# <cjk>	[2000]
+4-2F29	U+3B88	# <cjk>	[2000]
+4-2F2A	U+23594	# <cjk>	[2000]	[Unicode3.1]	Private: U+F82B
+4-2F2B	U+693B	# <cjk>	[2000]
+4-2F2C	U+3B8D	# <cjk>	[2000]
+4-2F2D	U+6946	# <cjk>	[2000]
+4-2F2E	U+6969	# <cjk>	[2000]
+4-2F2F	U+696C	# <cjk>	[2000]
+4-2F30	U+6972	# <cjk>	[2000]
+4-2F31	U+697A	# <cjk>	[2000]
+4-2F32	U+697F	# <cjk>	[2000]
+4-2F33	U+6992	# <cjk>	[2000]
+4-2F34	U+3BA4	# <cjk>	[2000]
+4-2F35	U+6996	# <cjk>	[2000]
+4-2F36	U+6998	# <cjk>	[2000]
+4-2F37	U+69A6	# <cjk>	[2000]
+4-2F38	U+69B0	# <cjk>	[2000]
+4-2F39	U+69B7	# <cjk>	[2000]
+4-2F3A	U+69BA	# <cjk>	[2000]
+4-2F3B	U+69BC	# <cjk>	[2000]
+4-2F3C	U+69C0	# <cjk>	[2000]
+4-2F3D	U+69D1	# <cjk>	[2000]
+4-2F3E	U+69D6	# <cjk>	[2000]
+4-2F3F	U+23639	# <cjk>	[2000]	[Unicode3.1]	Private: U+F82C
+4-2F40	U+23647	# <cjk>	[2000]	[Unicode3.1]	Private: U+F82D
+4-2F41	U+6A30	# <cjk>	[2000]
+4-2F42	U+23638	# <cjk>	[2000]	[Unicode3.1]	Private: U+F82E
+4-2F43	U+2363A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F82F
+4-2F44	U+69E3	# <cjk>	[2000]
+4-2F45	U+69EE	# <cjk>	[2000]
+4-2F46	U+69EF	# <cjk>	[2000]
+4-2F47	U+69F3	# <cjk>	[2000]
+4-2F48	U+3BCD	# <cjk>	[2000]
+4-2F49	U+69F4	# <cjk>	[2000]
+4-2F4A	U+69FE	# <cjk>	[2000]
+4-2F4B	U+6A11	# <cjk>	[2000]
+4-2F4C	U+6A1A	# <cjk>	[2000]
+4-2F4D	U+6A1D	# <cjk>	[2000]
+4-2F4E	U+2371C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F830
+4-2F4F	U+6A32	# <cjk>	[2000]
+4-2F50	U+6A33	# <cjk>	[2000]
+4-2F51	U+6A34	# <cjk>	[2000]
+4-2F52	U+6A3F	# <cjk>	[2000]
+4-2F53	U+6A46	# <cjk>	[2000]
+4-2F54	U+6A49	# <cjk>	[2000]
+4-2F55	U+6A7A	# <cjk>	[2000]
+4-2F56	U+6A4E	# <cjk>	[2000]
+4-2F57	U+6A52	# <cjk>	[2000]
+4-2F58	U+6A64	# <cjk>	[2000]
+4-2F59	U+2370C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F831
+4-2F5A	U+6A7E	# <cjk>	[2000]
+4-2F5B	U+6A83	# <cjk>	[2000]
+4-2F5C	U+6A8B	# <cjk>	[2000]
+4-2F5D	U+3BF0	# <cjk>	[2000]
+4-2F5E	U+6A91	# <cjk>	[2000]
+4-2F5F	U+6A9F	# <cjk>	[2000]
+4-2F60	U+6AA1	# <cjk>	[2000]
+4-2F61	U+23764	# <cjk>	[2000]	[Unicode3.1]	Private: U+F832
+4-2F62	U+6AAB	# <cjk>	[2000]
+4-2F63	U+6ABD	# <cjk>	[2000]
+4-2F64	U+6AC6	# <cjk>	[2000]
+4-2F65	U+6AD4	# <cjk>	[2000]
+4-2F66	U+6AD0	# <cjk>	[2000]
+4-2F67	U+6ADC	# <cjk>	[2000]
+4-2F68	U+6ADD	# <cjk>	[2000]
+4-2F69	U+237FF	# <cjk>	[2000]	[Unicode3.1]	Private: U+F833
+4-2F6A	U+237E7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F834
+4-2F6B	U+6AEC	# <cjk>	[2000]
+4-2F6C	U+6AF1	# <cjk>	[2000]
+4-2F6D	U+6AF2	# <cjk>	[2000]
+4-2F6E	U+6AF3	# <cjk>	[2000]
+4-2F6F	U+6AFD	# <cjk>	[2000]
+4-2F70	U+23824	# <cjk>	[2000]	[Unicode3.1]	Private: U+F835
+4-2F71	U+6B0B	# <cjk>	[2000]
+4-2F72	U+6B0F	# <cjk>	[2000]
+4-2F73	U+6B10	# <cjk>	[2000]
+4-2F74	U+6B11	# <cjk>	[2000]
+4-2F75	U+2383D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F836
+4-2F76	U+6B17	# <cjk>	[2000]
+4-2F77	U+3C26	# <cjk>	[2000]
+4-2F78	U+6B2F	# <cjk>	[2000]
+4-2F79	U+6B4A	# <cjk>	[2000]
+4-2F7A	U+6B58	# <cjk>	[2000]
+4-2F7B	U+6B6C	# <cjk>	[2000]
+4-2F7C	U+6B75	# <cjk>	[2000]
+4-2F7D	U+6B7A	# <cjk>	[2000]
+4-2F7E	U+6B81	# <cjk>	[2000]
+4-6E21	U+6B9B	# <cjk>	[2000]
+4-6E22	U+6BAE	# <cjk>	[2000]
+4-6E23	U+23A98	# <cjk>	[2000]	[Unicode3.1]	Private: U+F837
+4-6E24	U+6BBD	# <cjk>	[2000]
+4-6E25	U+6BBE	# <cjk>	[2000]
+4-6E26	U+6BC7	# <cjk>	[2000]
+4-6E27	U+6BC8	# <cjk>	[2000]
+4-6E28	U+6BC9	# <cjk>	[2000]
+4-6E29	U+6BDA	# <cjk>	[2000]
+4-6E2A	U+6BE6	# <cjk>	[2000]
+4-6E2B	U+6BE7	# <cjk>	[2000]
+4-6E2C	U+6BEE	# <cjk>	[2000]
+4-6E2D	U+6BF1	# <cjk>	[2000]
+4-6E2E	U+6C02	# <cjk>	[2000]
+4-6E2F	U+6C0A	# <cjk>	[2000]
+4-6E30	U+6C0E	# <cjk>	[2000]
+4-6E31	U+6C35	# <cjk>	[2000]
+4-6E32	U+6C36	# <cjk>	[2000]
+4-6E33	U+6C3A	# <cjk>	[2000]
+4-6E34	U+23C7F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F838
+4-6E35	U+6C3F	# <cjk>	[2000]
+4-6E36	U+6C4D	# <cjk>	[2000]
+4-6E37	U+6C5B	# <cjk>	[2000]
+4-6E38	U+6C6D	# <cjk>	[2000]
+4-6E39	U+6C84	# <cjk>	[2000]
+4-6E3A	U+6C89	# <cjk>	[2000]
+4-6E3B	U+3CC3	# <cjk>	[2000]
+4-6E3C	U+6C94	# <cjk>	[2000]
+4-6E3D	U+6C95	# <cjk>	[2000]
+4-6E3E	U+6C97	# <cjk>	[2000]
+4-6E3F	U+6CAD	# <cjk>	[2000]
+4-6E40	U+6CC2	# <cjk>	[2000]
+4-6E41	U+6CD0	# <cjk>	[2000]
+4-6E42	U+3CD2	# <cjk>	[2000]
+4-6E43	U+6CD6	# <cjk>	[2000]
+4-6E44	U+6CDA	# <cjk>	[2000]
+4-6E45	U+6CDC	# <cjk>	[2000]
+4-6E46	U+6CE9	# <cjk>	[2000]
+4-6E47	U+6CEC	# <cjk>	[2000]
+4-6E48	U+6CED	# <cjk>	[2000]
+4-6E49	U+23D00	# <cjk>	[2000]	[Unicode3.1]	Private: U+F839
+4-6E4A	U+6D00	# <cjk>	[2000]
+4-6E4B	U+6D0A	# <cjk>	[2000]
+4-6E4C	U+6D24	# <cjk>	[2000]
+4-6E4D	U+6D26	# <cjk>	[2000]
+4-6E4E	U+6D27	# <cjk>	[2000]
+4-6E4F	U+6C67	# <cjk>	[2000]
+4-6E50	U+6D2F	# <cjk>	[2000]
+4-6E51	U+6D3C	# <cjk>	[2000]
+4-6E52	U+6D5B	# <cjk>	[2000]
+4-6E53	U+6D5E	# <cjk>	[2000]
+4-6E54	U+6D60	# <cjk>	[2000]
+4-6E55	U+6D70	# <cjk>	[2000]
+4-6E56	U+6D80	# <cjk>	[2000]
+4-6E57	U+6D81	# <cjk>	[2000]
+4-6E58	U+6D8A	# <cjk>	[2000]
+4-6E59	U+6D8D	# <cjk>	[2000]
+4-6E5A	U+6D91	# <cjk>	[2000]
+4-6E5B	U+6D98	# <cjk>	[2000]
+4-6E5C	U+23D40	# <cjk>	[2000]	[Unicode3.1]	Private: U+F83A
+4-6E5D	U+6E17	# <cjk>	[2000]
+4-6E5E	U+23DFA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F83B
+4-6E5F	U+23DF9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F83C
+4-6E60	U+23DD3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F83D
+4-6E61	U+6DAB	# <cjk>	[2000]
+4-6E62	U+6DAE	# <cjk>	[2000]
+4-6E63	U+6DB4	# <cjk>	[2000]
+4-6E64	U+6DC2	# <cjk>	[2000]
+4-6E65	U+6D34	# <cjk>	[2000]
+4-6E66	U+6DC8	# <cjk>	[2000]
+4-6E67	U+6DCE	# <cjk>	[2000]
+4-6E68	U+6DCF	# <cjk>	[2000]
+4-6E69	U+6DD0	# <cjk>	[2000]
+4-6E6A	U+6DDF	# <cjk>	[2000]
+4-6E6B	U+6DE9	# <cjk>	[2000]
+4-6E6C	U+6DF6	# <cjk>	[2000]
+4-6E6D	U+6E36	# <cjk>	[2000]
+4-6E6E	U+6E1E	# <cjk>	[2000]
+4-6E6F	U+6E22	# <cjk>	[2000]
+4-6E70	U+6E27	# <cjk>	[2000]
+4-6E71	U+3D11	# <cjk>	[2000]
+4-6E72	U+6E32	# <cjk>	[2000]
+4-6E73	U+6E3C	# <cjk>	[2000]
+4-6E74	U+6E48	# <cjk>	[2000]
+4-6E75	U+6E49	# <cjk>	[2000]
+4-6E76	U+6E4B	# <cjk>	[2000]
+4-6E77	U+6E4C	# <cjk>	[2000]
+4-6E78	U+6E4F	# <cjk>	[2000]
+4-6E79	U+6E51	# <cjk>	[2000]
+4-6E7A	U+6E53	# <cjk>	[2000]
+4-6E7B	U+6E54	# <cjk>	[2000]
+4-6E7C	U+6E57	# <cjk>	[2000]
+4-6E7D	U+6E63	# <cjk>	[2000]
+4-6E7E	U+3D1E	# <cjk>	[2000]
+4-6F21	U+6E93	# <cjk>	[2000]
+4-6F22	U+6EA7	# <cjk>	[2000]
+4-6F23	U+6EB4	# <cjk>	[2000]
+4-6F24	U+6EBF	# <cjk>	[2000]
+4-6F25	U+6EC3	# <cjk>	[2000]
+4-6F26	U+6ECA	# <cjk>	[2000]
+4-6F27	U+6ED9	# <cjk>	[2000]
+4-6F28	U+6F35	# <cjk>	[2000]
+4-6F29	U+6EEB	# <cjk>	[2000]
+4-6F2A	U+6EF9	# <cjk>	[2000]
+4-6F2B	U+6EFB	# <cjk>	[2000]
+4-6F2C	U+6F0A	# <cjk>	[2000]
+4-6F2D	U+6F0C	# <cjk>	[2000]
+4-6F2E	U+6F18	# <cjk>	[2000]
+4-6F2F	U+6F25	# <cjk>	[2000]
+4-6F30	U+6F36	# <cjk>	[2000]
+4-6F31	U+6F3C	# <cjk>	[2000]
+4-6F32	U+23F7E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F83E
+4-6F33	U+6F52	# <cjk>	[2000]
+4-6F34	U+6F57	# <cjk>	[2000]
+4-6F35	U+6F5A	# <cjk>	[2000]
+4-6F36	U+6F60	# <cjk>	[2000]
+4-6F37	U+6F68	# <cjk>	[2000]
+4-6F38	U+6F98	# <cjk>	[2000]
+4-6F39	U+6F7D	# <cjk>	[2000]
+4-6F3A	U+6F90	# <cjk>	[2000]
+4-6F3B	U+6F96	# <cjk>	[2000]
+4-6F3C	U+6FBE	# <cjk>	[2000]
+4-6F3D	U+6F9F	# <cjk>	[2000]
+4-6F3E	U+6FA5	# <cjk>	[2000]
+4-6F3F	U+6FAF	# <cjk>	[2000]
+4-6F40	U+3D64	# <cjk>	[2000]
+4-6F41	U+6FB5	# <cjk>	[2000]
+4-6F42	U+6FC8	# <cjk>	[2000]
+4-6F43	U+6FC9	# <cjk>	[2000]
+4-6F44	U+6FDA	# <cjk>	[2000]
+4-6F45	U+6FDE	# <cjk>	[2000]
+4-6F46	U+6FE9	# <cjk>	[2000]
+4-6F47	U+24096	# <cjk>	[2000]	[Unicode3.1]	Private: U+F83F
+4-6F48	U+6FFC	# <cjk>	[2000]
+4-6F49	U+7000	# <cjk>	[2000]
+4-6F4A	U+7007	# <cjk>	[2000]
+4-6F4B	U+700A	# <cjk>	[2000]
+4-6F4C	U+7023	# <cjk>	[2000]
+4-6F4D	U+24103	# <cjk>	[2000]	[Unicode3.1]	Private: U+F840
+4-6F4E	U+7039	# <cjk>	[2000]
+4-6F4F	U+703A	# <cjk>	[2000]
+4-6F50	U+703C	# <cjk>	[2000]
+4-6F51	U+7043	# <cjk>	[2000]
+4-6F52	U+7047	# <cjk>	[2000]
+4-6F53	U+704B	# <cjk>	[2000]
+4-6F54	U+3D9A	# <cjk>	[2000]
+4-6F55	U+7054	# <cjk>	[2000]
+4-6F56	U+7065	# <cjk>	[2000]
+4-6F57	U+7069	# <cjk>	[2000]
+4-6F58	U+706C	# <cjk>	[2000]
+4-6F59	U+706E	# <cjk>	[2000]
+4-6F5A	U+7076	# <cjk>	[2000]
+4-6F5B	U+707E	# <cjk>	[2000]
+4-6F5C	U+7081	# <cjk>	[2000]
+4-6F5D	U+7086	# <cjk>	[2000]
+4-6F5E	U+7095	# <cjk>	[2000]
+4-6F5F	U+7097	# <cjk>	[2000]
+4-6F60	U+70BB	# <cjk>	[2000]
+4-6F61	U+241C6	# <cjk>	[2000]	[Unicode3.1]	Private: U+F841
+4-6F62	U+709F	# <cjk>	[2000]
+4-6F63	U+70B1	# <cjk>	[2000]
+4-6F64	U+241FE	# <cjk>	[2000]	[Unicode3.1]	Private: U+F842
+4-6F65	U+70EC	# <cjk>	[2000]
+4-6F66	U+70CA	# <cjk>	[2000]
+4-6F67	U+70D1	# <cjk>	[2000]
+4-6F68	U+70D3	# <cjk>	[2000]
+4-6F69	U+70DC	# <cjk>	[2000]
+4-6F6A	U+7103	# <cjk>	[2000]
+4-6F6B	U+7104	# <cjk>	[2000]
+4-6F6C	U+7106	# <cjk>	[2000]
+4-6F6D	U+7107	# <cjk>	[2000]
+4-6F6E	U+7108	# <cjk>	[2000]
+4-6F6F	U+710C	# <cjk>	[2000]
+4-6F70	U+3DC0	# <cjk>	[2000]
+4-6F71	U+712F	# <cjk>	[2000]
+4-6F72	U+7131	# <cjk>	[2000]
+4-6F73	U+7150	# <cjk>	[2000]
+4-6F74	U+714A	# <cjk>	[2000]
+4-6F75	U+7153	# <cjk>	[2000]
+4-6F76	U+715E	# <cjk>	[2000]
+4-6F77	U+3DD4	# <cjk>	[2000]
+4-6F78	U+7196	# <cjk>	[2000]
+4-6F79	U+7180	# <cjk>	[2000]
+4-6F7A	U+719B	# <cjk>	[2000]
+4-6F7B	U+71A0	# <cjk>	[2000]
+4-6F7C	U+71A2	# <cjk>	[2000]
+4-6F7D	U+71AE	# <cjk>	[2000]
+4-6F7E	U+71AF	# <cjk>	[2000]
+4-7021	U+71B3	# <cjk>	[2000]
+4-7022	U+243BC	# <cjk>	[2000]	[Unicode3.1]	Private: U+F843
+4-7023	U+71CB	# <cjk>	[2000]
+4-7024	U+71D3	# <cjk>	[2000]
+4-7025	U+71D9	# <cjk>	[2000]
+4-7026	U+71DC	# <cjk>	[2000]
+4-7027	U+7207	# <cjk>	[2000]
+4-7028	U+3E05	# <cjk>	[2000]
+4-7029	U+FA49	# CJK COMPATIBILITY IDEOGRAPH-FA49	[2000]	[Unicode3.2]
+4-702A	U+722B	# <cjk>	[2000]
+4-702B	U+7234	# <cjk>	[2000]
+4-702C	U+7238	# <cjk>	[2000]
+4-702D	U+7239	# <cjk>	[2000]
+4-702E	U+4E2C	# <cjk>	[2000]
+4-702F	U+7242	# <cjk>	[2000]
+4-7030	U+7253	# <cjk>	[2000]
+4-7031	U+7257	# <cjk>	[2000]
+4-7032	U+7263	# <cjk>	[2000]
+4-7033	U+24629	# <cjk>	[2000]	[Unicode3.1]	Private: U+F845
+4-7034	U+726E	# <cjk>	[2000]
+4-7035	U+726F	# <cjk>	[2000]
+4-7036	U+7278	# <cjk>	[2000]
+4-7037	U+727F	# <cjk>	[2000]
+4-7038	U+728E	# <cjk>	[2000]
+4-7039	U+246A5	# <cjk>	[2000]	[Unicode3.1]	Private: U+F846
+4-703A	U+72AD	# <cjk>	[2000]
+4-703B	U+72AE	# <cjk>	[2000]
+4-703C	U+72B0	# <cjk>	[2000]
+4-703D	U+72B1	# <cjk>	[2000]
+4-703E	U+72C1	# <cjk>	[2000]
+4-703F	U+3E60	# <cjk>	[2000]
+4-7040	U+72CC	# <cjk>	[2000]
+4-7041	U+3E66	# <cjk>	[2000]
+4-7042	U+3E68	# <cjk>	[2000]
+4-7043	U+72F3	# <cjk>	[2000]
+4-7044	U+72FA	# <cjk>	[2000]
+4-7045	U+7307	# <cjk>	[2000]
+4-7046	U+7312	# <cjk>	[2000]
+4-7047	U+7318	# <cjk>	[2000]
+4-7048	U+7319	# <cjk>	[2000]
+4-7049	U+3E83	# <cjk>	[2000]
+4-704A	U+7339	# <cjk>	[2000]
+4-704B	U+732C	# <cjk>	[2000]
+4-704C	U+7331	# <cjk>	[2000]
+4-704D	U+7333	# <cjk>	[2000]
+4-704E	U+733D	# <cjk>	[2000]
+4-704F	U+7352	# <cjk>	[2000]
+4-7050	U+3E94	# <cjk>	[2000]
+4-7051	U+736B	# <cjk>	[2000]
+4-7052	U+736C	# <cjk>	[2000]
+4-7053	U+24896	# <cjk>	[2000]	[Unicode3.1]	Private: U+F847
+4-7054	U+736E	# <cjk>	[2000]
+4-7055	U+736F	# <cjk>	[2000]
+4-7056	U+7371	# <cjk>	[2000]
+4-7057	U+7377	# <cjk>	[2000]
+4-7058	U+7381	# <cjk>	[2000]
+4-7059	U+7385	# <cjk>	[2000]
+4-705A	U+738A	# <cjk>	[2000]
+4-705B	U+7394	# <cjk>	[2000]
+4-705C	U+7398	# <cjk>	[2000]
+4-705D	U+739C	# <cjk>	[2000]
+4-705E	U+739E	# <cjk>	[2000]
+4-705F	U+73A5	# <cjk>	[2000]
+4-7060	U+73A8	# <cjk>	[2000]
+4-7061	U+73B5	# <cjk>	[2000]
+4-7062	U+73B7	# <cjk>	[2000]
+4-7063	U+73B9	# <cjk>	[2000]
+4-7064	U+73BC	# <cjk>	[2000]
+4-7065	U+73BF	# <cjk>	[2000]
+4-7066	U+73C5	# <cjk>	[2000]
+4-7067	U+73CB	# <cjk>	[2000]
+4-7068	U+73E1	# <cjk>	[2000]
+4-7069	U+73E7	# <cjk>	[2000]
+4-706A	U+73F9	# <cjk>	[2000]
+4-706B	U+7413	# <cjk>	[2000]
+4-706C	U+73FA	# <cjk>	[2000]
+4-706D	U+7401	# <cjk>	[2000]
+4-706E	U+7424	# <cjk>	[2000]
+4-706F	U+7431	# <cjk>	[2000]
+4-7070	U+7439	# <cjk>	[2000]
+4-7071	U+7453	# <cjk>	[2000]
+4-7072	U+7440	# <cjk>	[2000]
+4-7073	U+7443	# <cjk>	[2000]
+4-7074	U+744D	# <cjk>	[2000]
+4-7075	U+7452	# <cjk>	[2000]
+4-7076	U+745D	# <cjk>	[2000]
+4-7077	U+7471	# <cjk>	[2000]
+4-7078	U+7481	# <cjk>	[2000]
+4-7079	U+7485	# <cjk>	[2000]
+4-707A	U+7488	# <cjk>	[2000]
+4-707B	U+24A4D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F848
+4-707C	U+7492	# <cjk>	[2000]
+4-707D	U+7497	# <cjk>	[2000]
+4-707E	U+7499	# <cjk>	[2000]
+4-7121	U+74A0	# <cjk>	[2000]
+4-7122	U+74A1	# <cjk>	[2000]
+4-7123	U+74A5	# <cjk>	[2000]
+4-7124	U+74AA	# <cjk>	[2000]
+4-7125	U+74AB	# <cjk>	[2000]
+4-7126	U+74B9	# <cjk>	[2000]
+4-7127	U+74BB	# <cjk>	[2000]
+4-7128	U+74BA	# <cjk>	[2000]
+4-7129	U+74D6	# <cjk>	[2000]
+4-712A	U+74D8	# <cjk>	[2000]
+4-712B	U+74DE	# <cjk>	[2000]
+4-712C	U+74EF	# <cjk>	[2000]
+4-712D	U+74EB	# <cjk>	[2000]
+4-712E	U+24B56	# <cjk>	[2000]	[Unicode3.1]	Private: U+F849
+4-712F	U+74FA	# <cjk>	[2000]
+4-7130	U+24B6F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F84A
+4-7131	U+7520	# <cjk>	[2000]
+4-7132	U+7524	# <cjk>	[2000]
+4-7133	U+752A	# <cjk>	[2000]
+4-7134	U+3F57	# <cjk>	[2000]
+4-7135	U+24C16	# <cjk>	[2000]	[Unicode3.1]	Private: U+F84B
+4-7136	U+753D	# <cjk>	[2000]
+4-7137	U+753E	# <cjk>	[2000]
+4-7138	U+7540	# <cjk>	[2000]
+4-7139	U+7548	# <cjk>	[2000]
+4-713A	U+754E	# <cjk>	[2000]
+4-713B	U+7550	# <cjk>	[2000]
+4-713C	U+7552	# <cjk>	[2000]
+4-713D	U+756C	# <cjk>	[2000]
+4-713E	U+7572	# <cjk>	[2000]
+4-713F	U+7571	# <cjk>	[2000]
+4-7140	U+757A	# <cjk>	[2000]
+4-7141	U+757D	# <cjk>	[2000]
+4-7142	U+757E	# <cjk>	[2000]
+4-7143	U+7581	# <cjk>	[2000]
+4-7144	U+24D14	# <cjk>	[2000]	[Unicode3.1]	Private: U+F84C
+4-7145	U+758C	# <cjk>	[2000]
+4-7146	U+3F75	# <cjk>	[2000]
+4-7147	U+75A2	# <cjk>	[2000]
+4-7148	U+3F77	# <cjk>	[2000]
+4-7149	U+75B0	# <cjk>	[2000]
+4-714A	U+75B7	# <cjk>	[2000]
+4-714B	U+75BF	# <cjk>	[2000]
+4-714C	U+75C0	# <cjk>	[2000]
+4-714D	U+75C6	# <cjk>	[2000]
+4-714E	U+75CF	# <cjk>	[2000]
+4-714F	U+75D3	# <cjk>	[2000]
+4-7150	U+75DD	# <cjk>	[2000]
+4-7151	U+75DF	# <cjk>	[2000]
+4-7152	U+75E0	# <cjk>	[2000]
+4-7153	U+75E7	# <cjk>	[2000]
+4-7154	U+75EC	# <cjk>	[2000]
+4-7155	U+75EE	# <cjk>	[2000]
+4-7156	U+75F1	# <cjk>	[2000]
+4-7157	U+75F9	# <cjk>	[2000]
+4-7158	U+7603	# <cjk>	[2000]
+4-7159	U+7618	# <cjk>	[2000]
+4-715A	U+7607	# <cjk>	[2000]
+4-715B	U+760F	# <cjk>	[2000]
+4-715C	U+3FAE	# <cjk>	[2000]
+4-715D	U+24E0E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F84D
+4-715E	U+7613	# <cjk>	[2000]
+4-715F	U+761B	# <cjk>	[2000]
+4-7160	U+761C	# <cjk>	[2000]
+4-7161	U+24E37	# <cjk>	[2000]	[Unicode3.1]	Private: U+F84E
+4-7162	U+7625	# <cjk>	[2000]
+4-7163	U+7628	# <cjk>	[2000]
+4-7164	U+763C	# <cjk>	[2000]
+4-7165	U+7633	# <cjk>	[2000]
+4-7166	U+24E6A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F84F
+4-7167	U+3FC9	# <cjk>	[2000]
+4-7168	U+7641	# <cjk>	[2000]
+4-7169	U+24E8B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F850
+4-716A	U+7649	# <cjk>	[2000]
+4-716B	U+7655	# <cjk>	[2000]
+4-716C	U+3FD7	# <cjk>	[2000]
+4-716D	U+766E	# <cjk>	[2000]
+4-716E	U+7695	# <cjk>	[2000]
+4-716F	U+769C	# <cjk>	[2000]
+4-7170	U+76A1	# <cjk>	[2000]
+4-7171	U+76A0	# <cjk>	[2000]
+4-7172	U+76A7	# <cjk>	[2000]
+4-7173	U+76A8	# <cjk>	[2000]
+4-7174	U+76AF	# <cjk>	[2000]
+4-7175	U+2504A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F851
+4-7176	U+76C9	# <cjk>	[2000]
+4-7177	U+25055	# <cjk>	[2000]	[Unicode3.1]	Private: U+F852
+4-7178	U+76E8	# <cjk>	[2000]
+4-7179	U+76EC	# <cjk>	[2000]
+4-717A	U+25122	# <cjk>	[2000]	[Unicode3.1]	Private: U+F853
+4-717B	U+7717	# <cjk>	[2000]
+4-717C	U+771A	# <cjk>	[2000]
+4-717D	U+772D	# <cjk>	[2000]
+4-717E	U+7735	# <cjk>	[2000]
+4-7221	U+251A9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F854
+4-7222	U+4039	# <cjk>	[2000]
+4-7223	U+251E5	# <cjk>	[2000]	[Unicode3.1]	Private: U+F855
+4-7224	U+251CD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F856
+4-7225	U+7758	# <cjk>	[2000]
+4-7226	U+7760	# <cjk>	[2000]
+4-7227	U+776A	# <cjk>	[2000]
+4-7228	U+2521E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F857
+4-7229	U+7772	# <cjk>	[2000]
+4-722A	U+777C	# <cjk>	[2000]
+4-722B	U+777D	# <cjk>	[2000]
+4-722C	U+2524C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F858
+4-722D	U+4058	# <cjk>	[2000]
+4-722E	U+779A	# <cjk>	[2000]
+4-722F	U+779F	# <cjk>	[2000]
+4-7230	U+77A2	# <cjk>	[2000]
+4-7231	U+77A4	# <cjk>	[2000]
+4-7232	U+77A9	# <cjk>	[2000]
+4-7233	U+77DE	# <cjk>	[2000]
+4-7234	U+77DF	# <cjk>	[2000]
+4-7235	U+77E4	# <cjk>	[2000]
+4-7236	U+77E6	# <cjk>	[2000]
+4-7237	U+77EA	# <cjk>	[2000]
+4-7238	U+77EC	# <cjk>	[2000]
+4-7239	U+4093	# <cjk>	[2000]
+4-723A	U+77F0	# <cjk>	[2000]
+4-723B	U+77F4	# <cjk>	[2000]
+4-723C	U+77FB	# <cjk>	[2000]
+4-723D	U+2542E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F859
+4-723E	U+7805	# <cjk>	[2000]
+4-723F	U+7806	# <cjk>	[2000]
+4-7240	U+7809	# <cjk>	[2000]
+4-7241	U+780D	# <cjk>	[2000]
+4-7242	U+7819	# <cjk>	[2000]
+4-7243	U+7821	# <cjk>	[2000]
+4-7244	U+782C	# <cjk>	[2000]
+4-7245	U+7847	# <cjk>	[2000]
+4-7246	U+7864	# <cjk>	[2000]
+4-7247	U+786A	# <cjk>	[2000]
+4-7248	U+254D9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F85A
+4-7249	U+788A	# <cjk>	[2000]
+4-724A	U+7894	# <cjk>	[2000]
+4-724B	U+78A4	# <cjk>	[2000]
+4-724C	U+789D	# <cjk>	[2000]
+4-724D	U+789E	# <cjk>	[2000]
+4-724E	U+789F	# <cjk>	[2000]
+4-724F	U+78BB	# <cjk>	[2000]
+4-7250	U+78C8	# <cjk>	[2000]
+4-7251	U+78CC	# <cjk>	[2000]
+4-7252	U+78CE	# <cjk>	[2000]
+4-7253	U+78D5	# <cjk>	[2000]
+4-7254	U+78E0	# <cjk>	[2000]
+4-7255	U+78E1	# <cjk>	[2000]
+4-7256	U+78E6	# <cjk>	[2000]
+4-7257	U+78F9	# <cjk>	[2000]
+4-7258	U+78FA	# <cjk>	[2000]
+4-7259	U+78FB	# <cjk>	[2000]
+4-725A	U+78FE	# <cjk>	[2000]
+4-725B	U+255A7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F85B
+4-725C	U+7910	# <cjk>	[2000]
+4-725D	U+791B	# <cjk>	[2000]
+4-725E	U+7930	# <cjk>	[2000]
+4-725F	U+7925	# <cjk>	[2000]
+4-7260	U+793B	# <cjk>	[2000]
+4-7261	U+794A	# <cjk>	[2000]
+4-7262	U+7958	# <cjk>	[2000]
+4-7263	U+795B	# <cjk>	[2000]
+4-7264	U+4105	# <cjk>	[2000]
+4-7265	U+7967	# <cjk>	[2000]
+4-7266	U+7972	# <cjk>	[2000]
+4-7267	U+7994	# <cjk>	[2000]
+4-7268	U+7995	# <cjk>	[2000]
+4-7269	U+7996	# <cjk>	[2000]
+4-726A	U+799B	# <cjk>	[2000]
+4-726B	U+79A1	# <cjk>	[2000]
+4-726C	U+79A9	# <cjk>	[2000]
+4-726D	U+79B4	# <cjk>	[2000]
+4-726E	U+79BB	# <cjk>	[2000]
+4-726F	U+79C2	# <cjk>	[2000]
+4-7270	U+79C7	# <cjk>	[2000]
+4-7271	U+79CC	# <cjk>	[2000]
+4-7272	U+79CD	# <cjk>	[2000]
+4-7273	U+79D6	# <cjk>	[2000]
+4-7274	U+4148	# <cjk>	[2000]
+4-7275	U+257A9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F85C
+4-7276	U+257B4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F85D
+4-7277	U+414F	# <cjk>	[2000]
+4-7278	U+7A0A	# <cjk>	[2000]
+4-7279	U+7A11	# <cjk>	[2000]
+4-727A	U+7A15	# <cjk>	[2000]
+4-727B	U+7A1B	# <cjk>	[2000]
+4-727C	U+7A1E	# <cjk>	[2000]
+4-727D	U+4163	# <cjk>	[2000]
+4-727E	U+7A2D	# <cjk>	[2000]
+4-7321	U+7A38	# <cjk>	[2000]
+4-7322	U+7A47	# <cjk>	[2000]
+4-7323	U+7A4C	# <cjk>	[2000]
+4-7324	U+7A56	# <cjk>	[2000]
+4-7325	U+7A59	# <cjk>	[2000]
+4-7326	U+7A5C	# <cjk>	[2000]
+4-7327	U+7A5F	# <cjk>	[2000]
+4-7328	U+7A60	# <cjk>	[2000]
+4-7329	U+7A67	# <cjk>	[2000]
+4-732A	U+7A6A	# <cjk>	[2000]
+4-732B	U+7A75	# <cjk>	[2000]
+4-732C	U+7A78	# <cjk>	[2000]
+4-732D	U+7A82	# <cjk>	[2000]
+4-732E	U+7A8A	# <cjk>	[2000]
+4-732F	U+7A90	# <cjk>	[2000]
+4-7330	U+7AA3	# <cjk>	[2000]
+4-7331	U+7AAC	# <cjk>	[2000]
+4-7332	U+259D4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F85E
+4-7333	U+41B4	# <cjk>	[2000]
+4-7334	U+7AB9	# <cjk>	[2000]
+4-7335	U+7ABC	# <cjk>	[2000]
+4-7336	U+7ABE	# <cjk>	[2000]
+4-7337	U+41BF	# <cjk>	[2000]
+4-7338	U+7ACC	# <cjk>	[2000]
+4-7339	U+7AD1	# <cjk>	[2000]
+4-733A	U+7AE7	# <cjk>	[2000]
+4-733B	U+7AE8	# <cjk>	[2000]
+4-733C	U+7AF4	# <cjk>	[2000]
+4-733D	U+25AE4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F85F
+4-733E	U+25AE3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F860
+4-733F	U+7B07	# <cjk>	[2000]
+4-7340	U+25AF1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F861
+4-7341	U+7B3D	# <cjk>	[2000]
+4-7342	U+7B27	# <cjk>	[2000]
+4-7343	U+7B2A	# <cjk>	[2000]
+4-7344	U+7B2E	# <cjk>	[2000]
+4-7345	U+7B2F	# <cjk>	[2000]
+4-7346	U+7B31	# <cjk>	[2000]
+4-7347	U+41E6	# <cjk>	[2000]
+4-7348	U+41F3	# <cjk>	[2000]
+4-7349	U+7B7F	# <cjk>	[2000]
+4-734A	U+7B41	# <cjk>	[2000]
+4-734B	U+41EE	# <cjk>	[2000]
+4-734C	U+7B55	# <cjk>	[2000]
+4-734D	U+7B79	# <cjk>	[2000]
+4-734E	U+7B64	# <cjk>	[2000]
+4-734F	U+7B66	# <cjk>	[2000]
+4-7350	U+7B69	# <cjk>	[2000]
+4-7351	U+7B73	# <cjk>	[2000]
+4-7352	U+25BB2	# <cjk>	[2000]	[Unicode3.1]	Private: U+F862
+4-7353	U+4207	# <cjk>	[2000]
+4-7354	U+7B90	# <cjk>	[2000]
+4-7355	U+7B91	# <cjk>	[2000]
+4-7356	U+7B9B	# <cjk>	[2000]
+4-7357	U+420E	# <cjk>	[2000]
+4-7358	U+7BAF	# <cjk>	[2000]
+4-7359	U+7BB5	# <cjk>	[2000]
+4-735A	U+7BBC	# <cjk>	[2000]
+4-735B	U+7BC5	# <cjk>	[2000]
+4-735C	U+7BCA	# <cjk>	[2000]
+4-735D	U+25C4B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F863
+4-735E	U+25C64	# <cjk>	[2000]	[Unicode3.1]	Private: U+F864
+4-735F	U+7BD4	# <cjk>	[2000]
+4-7360	U+7BD6	# <cjk>	[2000]
+4-7361	U+7BDA	# <cjk>	[2000]
+4-7362	U+7BEA	# <cjk>	[2000]
+4-7363	U+7BF0	# <cjk>	[2000]
+4-7364	U+7C03	# <cjk>	[2000]
+4-7365	U+7C0B	# <cjk>	[2000]
+4-7366	U+7C0E	# <cjk>	[2000]
+4-7367	U+7C0F	# <cjk>	[2000]
+4-7368	U+7C26	# <cjk>	[2000]
+4-7369	U+7C45	# <cjk>	[2000]
+4-736A	U+7C4A	# <cjk>	[2000]
+4-736B	U+7C51	# <cjk>	[2000]
+4-736C	U+7C57	# <cjk>	[2000]
+4-736D	U+7C5E	# <cjk>	[2000]
+4-736E	U+7C61	# <cjk>	[2000]
+4-736F	U+7C69	# <cjk>	[2000]
+4-7370	U+7C6E	# <cjk>	[2000]
+4-7371	U+7C6F	# <cjk>	[2000]
+4-7372	U+7C70	# <cjk>	[2000]
+4-7373	U+25E2E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F865
+4-7374	U+25E56	# <cjk>	[2000]	[Unicode3.1]	Private: U+F866
+4-7375	U+25E65	# <cjk>	[2000]	[Unicode3.1]	Private: U+F867
+4-7376	U+7CA6	# <cjk>	[2000]
+4-7377	U+25E62	# <cjk>	[2000]	[Unicode3.1]	Private: U+F868
+4-7378	U+7CB6	# <cjk>	[2000]
+4-7379	U+7CB7	# <cjk>	[2000]
+4-737A	U+7CBF	# <cjk>	[2000]
+4-737B	U+25ED8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F869
+4-737C	U+7CC4	# <cjk>	[2000]
+4-737D	U+25EC2	# <cjk>	[2000]	[Unicode3.1]	Private: U+F86A
+4-737E	U+7CC8	# <cjk>	[2000]
+4-7421	U+7CCD	# <cjk>	[2000]
+4-7422	U+25EE8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F86B
+4-7423	U+7CD7	# <cjk>	[2000]
+4-7424	U+25F23	# <cjk>	[2000]	[Unicode3.1]	Private: U+F86C
+4-7425	U+7CE6	# <cjk>	[2000]
+4-7426	U+7CEB	# <cjk>	[2000]
+4-7427	U+25F5C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F86D
+4-7428	U+7CF5	# <cjk>	[2000]
+4-7429	U+7D03	# <cjk>	[2000]
+4-742A	U+7D09	# <cjk>	[2000]
+4-742B	U+42C6	# <cjk>	[2000]
+4-742C	U+7D12	# <cjk>	[2000]
+4-742D	U+7D1E	# <cjk>	[2000]
+4-742E	U+25FE0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F86E
+4-742F	U+25FD4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F86F
+4-7430	U+7D3D	# <cjk>	[2000]
+4-7431	U+7D3E	# <cjk>	[2000]
+4-7432	U+7D40	# <cjk>	[2000]
+4-7433	U+7D47	# <cjk>	[2000]
+4-7434	U+2600C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F870
+4-7435	U+25FFB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F871
+4-7436	U+42D6	# <cjk>	[2000]
+4-7437	U+7D59	# <cjk>	[2000]
+4-7438	U+7D5A	# <cjk>	[2000]
+4-7439	U+7D6A	# <cjk>	[2000]
+4-743A	U+7D70	# <cjk>	[2000]
+4-743B	U+42DD	# <cjk>	[2000]
+4-743C	U+7D7F	# <cjk>	[2000]
+4-743D	U+26017	# <cjk>	[2000]	[Unicode3.1]	Private: U+F872
+4-743E	U+7D86	# <cjk>	[2000]
+4-743F	U+7D88	# <cjk>	[2000]
+4-7440	U+7D8C	# <cjk>	[2000]
+4-7441	U+7D97	# <cjk>	[2000]
+4-7442	U+26060	# <cjk>	[2000]	[Unicode3.1]	Private: U+F873
+4-7443	U+7D9D	# <cjk>	[2000]
+4-7444	U+7DA7	# <cjk>	[2000]
+4-7445	U+7DAA	# <cjk>	[2000]
+4-7446	U+7DB6	# <cjk>	[2000]
+4-7447	U+7DB7	# <cjk>	[2000]
+4-7448	U+7DC0	# <cjk>	[2000]
+4-7449	U+7DD7	# <cjk>	[2000]
+4-744A	U+7DD9	# <cjk>	[2000]
+4-744B	U+7DE6	# <cjk>	[2000]
+4-744C	U+7DF1	# <cjk>	[2000]
+4-744D	U+7DF9	# <cjk>	[2000]
+4-744E	U+4302	# <cjk>	[2000]
+4-744F	U+260ED	# <cjk>	[2000]	[Unicode3.1]	Private: U+F874
+4-7450	U+FA58	# CJK COMPATIBILITY IDEOGRAPH-FA58	[2000]	[Unicode3.2]
+4-7451	U+7E10	# <cjk>	[2000]
+4-7452	U+7E17	# <cjk>	[2000]
+4-7453	U+7E1D	# <cjk>	[2000]
+4-7454	U+7E20	# <cjk>	[2000]
+4-7455	U+7E27	# <cjk>	[2000]
+4-7456	U+7E2C	# <cjk>	[2000]
+4-7457	U+7E45	# <cjk>	[2000]
+4-7458	U+7E73	# <cjk>	[2000]
+4-7459	U+7E75	# <cjk>	[2000]
+4-745A	U+7E7E	# <cjk>	[2000]
+4-745B	U+7E86	# <cjk>	[2000]
+4-745C	U+7E87	# <cjk>	[2000]
+4-745D	U+432B	# <cjk>	[2000]
+4-745E	U+7E91	# <cjk>	[2000]
+4-745F	U+7E98	# <cjk>	[2000]
+4-7460	U+7E9A	# <cjk>	[2000]
+4-7461	U+4343	# <cjk>	[2000]
+4-7462	U+7F3C	# <cjk>	[2000]
+4-7463	U+7F3B	# <cjk>	[2000]
+4-7464	U+7F3E	# <cjk>	[2000]
+4-7465	U+7F43	# <cjk>	[2000]
+4-7466	U+7F44	# <cjk>	[2000]
+4-7467	U+7F4F	# <cjk>	[2000]
+4-7468	U+34C1	# <cjk>	[2000]
+4-7469	U+26270	# <cjk>	[2000]	[Unicode3.1]	Private: U+F876
+4-746A	U+7F52	# <cjk>	[2000]
+4-746B	U+26286	# <cjk>	[2000]	[Unicode3.1]	Private: U+F877
+4-746C	U+7F61	# <cjk>	[2000]
+4-746D	U+7F63	# <cjk>	[2000]
+4-746E	U+7F64	# <cjk>	[2000]
+4-746F	U+7F6D	# <cjk>	[2000]
+4-7470	U+7F7D	# <cjk>	[2000]
+4-7471	U+7F7E	# <cjk>	[2000]
+4-7472	U+2634C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F878
+4-7473	U+7F90	# <cjk>	[2000]
+4-7474	U+517B	# <cjk>	[2000]
+4-7475	U+23D0E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F879
+4-7476	U+7F96	# <cjk>	[2000]
+4-7477	U+7F9C	# <cjk>	[2000]
+4-7478	U+7FAD	# <cjk>	[2000]
+4-7479	U+26402	# <cjk>	[2000]	[Unicode3.1]	Private: U+F87A
+4-747A	U+7FC3	# <cjk>	[2000]
+4-747B	U+7FCF	# <cjk>	[2000]
+4-747C	U+7FE3	# <cjk>	[2000]
+4-747D	U+7FE5	# <cjk>	[2000]
+4-747E	U+7FEF	# <cjk>	[2000]
+4-7521	U+7FF2	# <cjk>	[2000]
+4-7522	U+8002	# <cjk>	[2000]
+4-7523	U+800A	# <cjk>	[2000]
+4-7524	U+8008	# <cjk>	[2000]
+4-7525	U+800E	# <cjk>	[2000]
+4-7526	U+8011	# <cjk>	[2000]
+4-7527	U+8016	# <cjk>	[2000]
+4-7528	U+8024	# <cjk>	[2000]
+4-7529	U+802C	# <cjk>	[2000]
+4-752A	U+8030	# <cjk>	[2000]
+4-752B	U+8043	# <cjk>	[2000]
+4-752C	U+8066	# <cjk>	[2000]
+4-752D	U+8071	# <cjk>	[2000]
+4-752E	U+8075	# <cjk>	[2000]
+4-752F	U+807B	# <cjk>	[2000]
+4-7530	U+8099	# <cjk>	[2000]
+4-7531	U+809C	# <cjk>	[2000]
+4-7532	U+80A4	# <cjk>	[2000]
+4-7533	U+80A7	# <cjk>	[2000]
+4-7534	U+80B8	# <cjk>	[2000]
+4-7535	U+2667E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F87B
+4-7536	U+80C5	# <cjk>	[2000]
+4-7537	U+80D5	# <cjk>	[2000]
+4-7538	U+80D8	# <cjk>	[2000]
+4-7539	U+80E6	# <cjk>	[2000]
+4-753A	U+266B0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F87C
+4-753B	U+810D	# <cjk>	[2000]
+4-753C	U+80F5	# <cjk>	[2000]
+4-753D	U+80FB	# <cjk>	[2000]
+4-753E	U+43EE	# <cjk>	[2000]
+4-753F	U+8135	# <cjk>	[2000]
+4-7540	U+8116	# <cjk>	[2000]
+4-7541	U+811E	# <cjk>	[2000]
+4-7542	U+43F0	# <cjk>	[2000]
+4-7543	U+8124	# <cjk>	[2000]
+4-7544	U+8127	# <cjk>	[2000]
+4-7545	U+812C	# <cjk>	[2000]
+4-7546	U+2671D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F87D
+4-7547	U+813D	# <cjk>	[2000]
+4-7548	U+4408	# <cjk>	[2000]
+4-7549	U+8169	# <cjk>	[2000]
+4-754A	U+4417	# <cjk>	[2000]
+4-754B	U+8181	# <cjk>	[2000]
+4-754C	U+441C	# <cjk>	[2000]
+4-754D	U+8184	# <cjk>	[2000]
+4-754E	U+8185	# <cjk>	[2000]
+4-754F	U+4422	# <cjk>	[2000]
+4-7550	U+8198	# <cjk>	[2000]
+4-7551	U+81B2	# <cjk>	[2000]
+4-7552	U+81C1	# <cjk>	[2000]
+4-7553	U+81C3	# <cjk>	[2000]
+4-7554	U+81D6	# <cjk>	[2000]
+4-7555	U+81DB	# <cjk>	[2000]
+4-7556	U+268DD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F87E
+4-7557	U+81E4	# <cjk>	[2000]
+4-7558	U+268EA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F87F
+4-7559	U+81EC	# <cjk>	[2000]
+4-755A	U+26951	# <cjk>	[2000]	[Unicode3.1]	Private: U+F880
+4-755B	U+81FD	# <cjk>	[2000]
+4-755C	U+81FF	# <cjk>	[2000]
+4-755D	U+2696F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F881
+4-755E	U+8204	# <cjk>	[2000]
+4-755F	U+269DD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F882
+4-7560	U+8219	# <cjk>	[2000]
+4-7561	U+8221	# <cjk>	[2000]
+4-7562	U+8222	# <cjk>	[2000]
+4-7563	U+26A1E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F883
+4-7564	U+8232	# <cjk>	[2000]
+4-7565	U+8234	# <cjk>	[2000]
+4-7566	U+823C	# <cjk>	[2000]
+4-7567	U+8246	# <cjk>	[2000]
+4-7568	U+8249	# <cjk>	[2000]
+4-7569	U+8245	# <cjk>	[2000]
+4-756A	U+26A58	# <cjk>	[2000]	[Unicode3.1]	Private: U+F884
+4-756B	U+824B	# <cjk>	[2000]
+4-756C	U+4476	# <cjk>	[2000]
+4-756D	U+824F	# <cjk>	[2000]
+4-756E	U+447A	# <cjk>	[2000]
+4-756F	U+8257	# <cjk>	[2000]
+4-7570	U+26A8C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F885
+4-7571	U+825C	# <cjk>	[2000]
+4-7572	U+8263	# <cjk>	[2000]
+4-7573	U+26AB7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F886
+4-7574	U+FA5D	# CJK COMPATIBILITY IDEOGRAPH-FA5D	[2000]	[Unicode3.2]
+4-7575	U+FA5E	# CJK COMPATIBILITY IDEOGRAPH-FA5E	[2000]	[Unicode3.2]
+4-7576	U+8279	# <cjk>	[2000]
+4-7577	U+4491	# <cjk>	[2000]
+4-7578	U+827D	# <cjk>	[2000]
+4-7579	U+827F	# <cjk>	[2000]
+4-757A	U+8283	# <cjk>	[2000]
+4-757B	U+828A	# <cjk>	[2000]
+4-757C	U+8293	# <cjk>	[2000]
+4-757D	U+82A7	# <cjk>	[2000]
+4-757E	U+82A8	# <cjk>	[2000]
+4-7621	U+82B2	# <cjk>	[2000]
+4-7622	U+82B4	# <cjk>	[2000]
+4-7623	U+82BA	# <cjk>	[2000]
+4-7624	U+82BC	# <cjk>	[2000]
+4-7625	U+82E2	# <cjk>	[2000]
+4-7626	U+82E8	# <cjk>	[2000]
+4-7627	U+82F7	# <cjk>	[2000]
+4-7628	U+8307	# <cjk>	[2000]
+4-7629	U+8308	# <cjk>	[2000]
+4-762A	U+830C	# <cjk>	[2000]
+4-762B	U+8354	# <cjk>	[2000]
+4-762C	U+831B	# <cjk>	[2000]
+4-762D	U+831D	# <cjk>	[2000]
+4-762E	U+8330	# <cjk>	[2000]
+4-762F	U+833C	# <cjk>	[2000]
+4-7630	U+8344	# <cjk>	[2000]
+4-7631	U+8357	# <cjk>	[2000]
+4-7632	U+44BE	# <cjk>	[2000]
+4-7633	U+837F	# <cjk>	[2000]
+4-7634	U+44D4	# <cjk>	[2000]
+4-7635	U+44B3	# <cjk>	[2000]
+4-7636	U+838D	# <cjk>	[2000]
+4-7637	U+8394	# <cjk>	[2000]
+4-7638	U+8395	# <cjk>	[2000]
+4-7639	U+839B	# <cjk>	[2000]
+4-763A	U+839D	# <cjk>	[2000]
+4-763B	U+83C9	# <cjk>	[2000]
+4-763C	U+83D0	# <cjk>	[2000]
+4-763D	U+83D4	# <cjk>	[2000]
+4-763E	U+83DD	# <cjk>	[2000]
+4-763F	U+83E5	# <cjk>	[2000]
+4-7640	U+83F9	# <cjk>	[2000]
+4-7641	U+840F	# <cjk>	[2000]
+4-7642	U+8411	# <cjk>	[2000]
+4-7643	U+8415	# <cjk>	[2000]
+4-7644	U+26C73	# <cjk>	[2000]	[Unicode3.1]	Private: U+F889
+4-7645	U+8417	# <cjk>	[2000]
+4-7646	U+8439	# <cjk>	[2000]
+4-7647	U+844A	# <cjk>	[2000]
+4-7648	U+844F	# <cjk>	[2000]
+4-7649	U+8451	# <cjk>	[2000]
+4-764A	U+8452	# <cjk>	[2000]
+4-764B	U+8459	# <cjk>	[2000]
+4-764C	U+845A	# <cjk>	[2000]
+4-764D	U+845C	# <cjk>	[2000]
+4-764E	U+26CDD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F88A
+4-764F	U+8465	# <cjk>	[2000]
+4-7650	U+8476	# <cjk>	[2000]
+4-7651	U+8478	# <cjk>	[2000]
+4-7652	U+847C	# <cjk>	[2000]
+4-7653	U+8481	# <cjk>	[2000]
+4-7654	U+450D	# <cjk>	[2000]
+4-7655	U+84DC	# <cjk>	[2000]
+4-7656	U+8497	# <cjk>	[2000]
+4-7657	U+84A6	# <cjk>	[2000]
+4-7658	U+84BE	# <cjk>	[2000]
+4-7659	U+4508	# <cjk>	[2000]
+4-765A	U+84CE	# <cjk>	[2000]
+4-765B	U+84CF	# <cjk>	[2000]
+4-765C	U+84D3	# <cjk>	[2000]
+4-765D	U+26E65	# <cjk>	[2000]	[Unicode3.1]	Private: U+F88B
+4-765E	U+84E7	# <cjk>	[2000]
+4-765F	U+84EA	# <cjk>	[2000]
+4-7660	U+84EF	# <cjk>	[2000]
+4-7661	U+84F0	# <cjk>	[2000]
+4-7662	U+84F1	# <cjk>	[2000]
+4-7663	U+84FA	# <cjk>	[2000]
+4-7664	U+84FD	# <cjk>	[2000]
+4-7665	U+850C	# <cjk>	[2000]
+4-7666	U+851B	# <cjk>	[2000]
+4-7667	U+8524	# <cjk>	[2000]
+4-7668	U+8525	# <cjk>	[2000]
+4-7669	U+852B	# <cjk>	[2000]
+4-766A	U+8534	# <cjk>	[2000]
+4-766B	U+854F	# <cjk>	[2000]
+4-766C	U+856F	# <cjk>	[2000]
+4-766D	U+4525	# <cjk>	[2000]
+4-766E	U+4543	# <cjk>	[2000]
+4-766F	U+853E	# <cjk>	[2000]
+4-7670	U+8551	# <cjk>	[2000]
+4-7671	U+8553	# <cjk>	[2000]
+4-7672	U+855E	# <cjk>	[2000]
+4-7673	U+8561	# <cjk>	[2000]
+4-7674	U+8562	# <cjk>	[2000]
+4-7675	U+26F94	# <cjk>	[2000]	[Unicode3.1]	Private: U+F88C
+4-7676	U+857B	# <cjk>	[2000]
+4-7677	U+857D	# <cjk>	[2000]
+4-7678	U+857F	# <cjk>	[2000]
+4-7679	U+8581	# <cjk>	[2000]
+4-767A	U+8586	# <cjk>	[2000]
+4-767B	U+8593	# <cjk>	[2000]
+4-767C	U+859D	# <cjk>	[2000]
+4-767D	U+859F	# <cjk>	[2000]
+4-767E	U+26FF8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F88D
+4-7721	U+26FF6	# <cjk>	[2000]	[Unicode3.1]	Private: U+F88E
+4-7722	U+26FF7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F88F
+4-7723	U+85B7	# <cjk>	[2000]
+4-7724	U+85BC	# <cjk>	[2000]
+4-7725	U+85C7	# <cjk>	[2000]
+4-7726	U+85CA	# <cjk>	[2000]
+4-7727	U+85D8	# <cjk>	[2000]
+4-7728	U+85D9	# <cjk>	[2000]
+4-7729	U+85DF	# <cjk>	[2000]
+4-772A	U+85E1	# <cjk>	[2000]
+4-772B	U+85E6	# <cjk>	[2000]
+4-772C	U+85F6	# <cjk>	[2000]
+4-772D	U+8600	# <cjk>	[2000]
+4-772E	U+8611	# <cjk>	[2000]
+4-772F	U+861E	# <cjk>	[2000]
+4-7730	U+8621	# <cjk>	[2000]
+4-7731	U+8624	# <cjk>	[2000]
+4-7732	U+8627	# <cjk>	[2000]
+4-7733	U+2710D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F890
+4-7734	U+8639	# <cjk>	[2000]
+4-7735	U+863C	# <cjk>	[2000]
+4-7736	U+27139	# <cjk>	[2000]	[Unicode3.1]	Private: U+F891
+4-7737	U+8640	# <cjk>	[2000]
+4-7738	U+FA20	# CJK COMPATIBILITY IDEOGRAPH-FA20	[2000]
+4-7739	U+8653	# <cjk>	[2000]
+4-773A	U+8656	# <cjk>	[2000]
+4-773B	U+866F	# <cjk>	[2000]
+4-773C	U+8677	# <cjk>	[2000]
+4-773D	U+867A	# <cjk>	[2000]
+4-773E	U+8687	# <cjk>	[2000]
+4-773F	U+8689	# <cjk>	[2000]
+4-7740	U+868D	# <cjk>	[2000]
+4-7741	U+8691	# <cjk>	[2000]
+4-7742	U+869C	# <cjk>	[2000]
+4-7743	U+869D	# <cjk>	[2000]
+4-7744	U+86A8	# <cjk>	[2000]
+4-7745	U+FA21	# CJK COMPATIBILITY IDEOGRAPH-FA21	[2000]
+4-7746	U+86B1	# <cjk>	[2000]
+4-7747	U+86B3	# <cjk>	[2000]
+4-7748	U+86C1	# <cjk>	[2000]
+4-7749	U+86C3	# <cjk>	[2000]
+4-774A	U+86D1	# <cjk>	[2000]
+4-774B	U+86D5	# <cjk>	[2000]
+4-774C	U+86D7	# <cjk>	[2000]
+4-774D	U+86E3	# <cjk>	[2000]
+4-774E	U+86E6	# <cjk>	[2000]
+4-774F	U+45B8	# <cjk>	[2000]
+4-7750	U+8705	# <cjk>	[2000]
+4-7751	U+8707	# <cjk>	[2000]
+4-7752	U+870E	# <cjk>	[2000]
+4-7753	U+8710	# <cjk>	[2000]
+4-7754	U+8713	# <cjk>	[2000]
+4-7755	U+8719	# <cjk>	[2000]
+4-7756	U+871F	# <cjk>	[2000]
+4-7757	U+8721	# <cjk>	[2000]
+4-7758	U+8723	# <cjk>	[2000]
+4-7759	U+8731	# <cjk>	[2000]
+4-775A	U+873A	# <cjk>	[2000]
+4-775B	U+873E	# <cjk>	[2000]
+4-775C	U+8740	# <cjk>	[2000]
+4-775D	U+8743	# <cjk>	[2000]
+4-775E	U+8751	# <cjk>	[2000]
+4-775F	U+8758	# <cjk>	[2000]
+4-7760	U+8764	# <cjk>	[2000]
+4-7761	U+8765	# <cjk>	[2000]
+4-7762	U+8772	# <cjk>	[2000]
+4-7763	U+877C	# <cjk>	[2000]
+4-7764	U+273DB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F892
+4-7765	U+273DA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F893
+4-7766	U+87A7	# <cjk>	[2000]
+4-7767	U+8789	# <cjk>	[2000]
+4-7768	U+878B	# <cjk>	[2000]
+4-7769	U+8793	# <cjk>	[2000]
+4-776A	U+87A0	# <cjk>	[2000]
+4-776B	U+273FE	# <cjk>	[2000]	[Unicode3.1]	Private: U+F894
+4-776C	U+45E5	# <cjk>	[2000]
+4-776D	U+87BE	# <cjk>	[2000]
+4-776E	U+27410	# <cjk>	[2000]	[Unicode3.1]	Private: U+F895
+4-776F	U+87C1	# <cjk>	[2000]
+4-7770	U+87CE	# <cjk>	[2000]
+4-7771	U+87F5	# <cjk>	[2000]
+4-7772	U+87DF	# <cjk>	[2000]
+4-7773	U+27449	# <cjk>	[2000]	[Unicode3.1]	Private: U+F896
+4-7774	U+87E3	# <cjk>	[2000]
+4-7775	U+87E5	# <cjk>	[2000]
+4-7776	U+87E6	# <cjk>	[2000]
+4-7777	U+87EA	# <cjk>	[2000]
+4-7778	U+87EB	# <cjk>	[2000]
+4-7779	U+87ED	# <cjk>	[2000]
+4-777A	U+8801	# <cjk>	[2000]
+4-777B	U+8803	# <cjk>	[2000]
+4-777C	U+880B	# <cjk>	[2000]
+4-777D	U+8813	# <cjk>	[2000]
+4-777E	U+8828	# <cjk>	[2000]
+4-7821	U+882E	# <cjk>	[2000]
+4-7822	U+8832	# <cjk>	[2000]
+4-7823	U+883C	# <cjk>	[2000]
+4-7824	U+460F	# <cjk>	[2000]
+4-7825	U+884A	# <cjk>	[2000]
+4-7826	U+8858	# <cjk>	[2000]
+4-7827	U+885F	# <cjk>	[2000]
+4-7828	U+8864	# <cjk>	[2000]
+4-7829	U+27615	# <cjk>	[2000]	[Unicode3.1]	Private: U+F897
+4-782A	U+27614	# <cjk>	[2000]	[Unicode3.1]	Private: U+F898
+4-782B	U+8869	# <cjk>	[2000]
+4-782C	U+27631	# <cjk>	[2000]	[Unicode3.1]	Private: U+F899
+4-782D	U+886F	# <cjk>	[2000]
+4-782E	U+88A0	# <cjk>	[2000]
+4-782F	U+88BC	# <cjk>	[2000]
+4-7830	U+88BD	# <cjk>	[2000]
+4-7831	U+88BE	# <cjk>	[2000]
+4-7832	U+88C0	# <cjk>	[2000]
+4-7833	U+88D2	# <cjk>	[2000]
+4-7834	U+27693	# <cjk>	[2000]	[Unicode3.1]	Private: U+F89A
+4-7835	U+88D1	# <cjk>	[2000]
+4-7836	U+88D3	# <cjk>	[2000]
+4-7837	U+88DB	# <cjk>	[2000]
+4-7838	U+88F0	# <cjk>	[2000]
+4-7839	U+88F1	# <cjk>	[2000]
+4-783A	U+4641	# <cjk>	[2000]
+4-783B	U+8901	# <cjk>	[2000]
+4-783C	U+2770E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F89B
+4-783D	U+8937	# <cjk>	[2000]
+4-783E	U+27723	# <cjk>	[2000]	[Unicode3.1]	Private: U+F89C
+4-783F	U+8942	# <cjk>	[2000]
+4-7840	U+8945	# <cjk>	[2000]
+4-7841	U+8949	# <cjk>	[2000]
+4-7842	U+27752	# <cjk>	[2000]	[Unicode3.1]	Private: U+F89D
+4-7843	U+4665	# <cjk>	[2000]
+4-7844	U+8962	# <cjk>	[2000]
+4-7845	U+8980	# <cjk>	[2000]
+4-7846	U+8989	# <cjk>	[2000]
+4-7847	U+8990	# <cjk>	[2000]
+4-7848	U+899F	# <cjk>	[2000]
+4-7849	U+89B0	# <cjk>	[2000]
+4-784A	U+89B7	# <cjk>	[2000]
+4-784B	U+89D6	# <cjk>	[2000]
+4-784C	U+89D8	# <cjk>	[2000]
+4-784D	U+89EB	# <cjk>	[2000]
+4-784E	U+46A1	# <cjk>	[2000]
+4-784F	U+89F1	# <cjk>	[2000]
+4-7850	U+89F3	# <cjk>	[2000]
+4-7851	U+89FD	# <cjk>	[2000]
+4-7852	U+89FF	# <cjk>	[2000]
+4-7853	U+46AF	# <cjk>	[2000]
+4-7854	U+8A11	# <cjk>	[2000]
+4-7855	U+8A14	# <cjk>	[2000]
+4-7856	U+27985	# <cjk>	[2000]	[Unicode3.1]	Private: U+F89E
+4-7857	U+8A21	# <cjk>	[2000]
+4-7858	U+8A35	# <cjk>	[2000]
+4-7859	U+8A3E	# <cjk>	[2000]
+4-785A	U+8A45	# <cjk>	[2000]
+4-785B	U+8A4D	# <cjk>	[2000]
+4-785C	U+8A58	# <cjk>	[2000]
+4-785D	U+8AAE	# <cjk>	[2000]
+4-785E	U+8A90	# <cjk>	[2000]
+4-785F	U+8AB7	# <cjk>	[2000]
+4-7860	U+8ABE	# <cjk>	[2000]
+4-7861	U+8AD7	# <cjk>	[2000]
+4-7862	U+8AFC	# <cjk>	[2000]
+4-7863	U+27A84	# <cjk>	[2000]	[Unicode3.1]	Private: U+F89F
+4-7864	U+8B0A	# <cjk>	[2000]
+4-7865	U+8B05	# <cjk>	[2000]
+4-7866	U+8B0D	# <cjk>	[2000]
+4-7867	U+8B1C	# <cjk>	[2000]
+4-7868	U+8B1F	# <cjk>	[2000]
+4-7869	U+8B2D	# <cjk>	[2000]
+4-786A	U+8B43	# <cjk>	[2000]
+4-786B	U+470C	# <cjk>	[2000]
+4-786C	U+8B51	# <cjk>	[2000]
+4-786D	U+8B5E	# <cjk>	[2000]
+4-786E	U+8B76	# <cjk>	[2000]
+4-786F	U+8B7F	# <cjk>	[2000]
+4-7870	U+8B81	# <cjk>	[2000]
+4-7871	U+8B8B	# <cjk>	[2000]
+4-7872	U+8B94	# <cjk>	[2000]
+4-7873	U+8B95	# <cjk>	[2000]
+4-7874	U+8B9C	# <cjk>	[2000]
+4-7875	U+8B9E	# <cjk>	[2000]
+4-7876	U+8C39	# <cjk>	[2000]
+4-7877	U+27BB3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A0
+4-7878	U+8C3D	# <cjk>	[2000]
+4-7879	U+27BBE	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A1
+4-787A	U+27BC7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A2
+4-787B	U+8C45	# <cjk>	[2000]
+4-787C	U+8C47	# <cjk>	[2000]
+4-787D	U+8C4F	# <cjk>	[2000]
+4-787E	U+8C54	# <cjk>	[2000]
+4-7921	U+8C57	# <cjk>	[2000]
+4-7922	U+8C69	# <cjk>	[2000]
+4-7923	U+8C6D	# <cjk>	[2000]
+4-7924	U+8C73	# <cjk>	[2000]
+4-7925	U+27CB8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A3
+4-7926	U+8C93	# <cjk>	[2000]
+4-7927	U+8C92	# <cjk>	[2000]
+4-7928	U+8C99	# <cjk>	[2000]
+4-7929	U+4764	# <cjk>	[2000]
+4-792A	U+8C9B	# <cjk>	[2000]
+4-792B	U+8CA4	# <cjk>	[2000]
+4-792C	U+8CD6	# <cjk>	[2000]
+4-792D	U+8CD5	# <cjk>	[2000]
+4-792E	U+8CD9	# <cjk>	[2000]
+4-792F	U+27DA0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A4
+4-7930	U+8CF0	# <cjk>	[2000]
+4-7931	U+8CF1	# <cjk>	[2000]
+4-7932	U+27E10	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A5
+4-7933	U+8D09	# <cjk>	[2000]
+4-7934	U+8D0E	# <cjk>	[2000]
+4-7935	U+8D6C	# <cjk>	[2000]
+4-7936	U+8D84	# <cjk>	[2000]
+4-7937	U+8D95	# <cjk>	[2000]
+4-7938	U+8DA6	# <cjk>	[2000]
+4-7939	U+27FB7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A6
+4-793A	U+8DC6	# <cjk>	[2000]
+4-793B	U+8DC8	# <cjk>	[2000]
+4-793C	U+8DD9	# <cjk>	[2000]
+4-793D	U+8DEC	# <cjk>	[2000]
+4-793E	U+8E0C	# <cjk>	[2000]
+4-793F	U+47FD	# <cjk>	[2000]
+4-7940	U+8DFD	# <cjk>	[2000]
+4-7941	U+8E06	# <cjk>	[2000]
+4-7942	U+2808A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A7
+4-7943	U+8E14	# <cjk>	[2000]
+4-7944	U+8E16	# <cjk>	[2000]
+4-7945	U+8E21	# <cjk>	[2000]
+4-7946	U+8E22	# <cjk>	[2000]
+4-7947	U+8E27	# <cjk>	[2000]
+4-7948	U+280BB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A8
+4-7949	U+4816	# <cjk>	[2000]
+4-794A	U+8E36	# <cjk>	[2000]
+4-794B	U+8E39	# <cjk>	[2000]
+4-794C	U+8E4B	# <cjk>	[2000]
+4-794D	U+8E54	# <cjk>	[2000]
+4-794E	U+8E62	# <cjk>	[2000]
+4-794F	U+8E6C	# <cjk>	[2000]
+4-7950	U+8E6D	# <cjk>	[2000]
+4-7951	U+8E6F	# <cjk>	[2000]
+4-7952	U+8E98	# <cjk>	[2000]
+4-7953	U+8E9E	# <cjk>	[2000]
+4-7954	U+8EAE	# <cjk>	[2000]
+4-7955	U+8EB3	# <cjk>	[2000]
+4-7956	U+8EB5	# <cjk>	[2000]
+4-7957	U+8EB6	# <cjk>	[2000]
+4-7958	U+8EBB	# <cjk>	[2000]
+4-7959	U+28282	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8A9
+4-795A	U+8ED1	# <cjk>	[2000]
+4-795B	U+8ED4	# <cjk>	[2000]
+4-795C	U+484E	# <cjk>	[2000]
+4-795D	U+8EF9	# <cjk>	[2000]
+4-795E	U+282F3	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8AA
+4-795F	U+8F00	# <cjk>	[2000]
+4-7960	U+8F08	# <cjk>	[2000]
+4-7961	U+8F17	# <cjk>	[2000]
+4-7962	U+8F2B	# <cjk>	[2000]
+4-7963	U+8F40	# <cjk>	[2000]
+4-7964	U+8F4A	# <cjk>	[2000]
+4-7965	U+8F58	# <cjk>	[2000]
+4-7966	U+2840C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8AB
+4-7967	U+8FA4	# <cjk>	[2000]
+4-7968	U+8FB4	# <cjk>	[2000]
+4-7969	U+FA66	# CJK COMPATIBILITY IDEOGRAPH-FA66	[2000]	[Unicode3.2]
+4-796A	U+8FB6	# <cjk>	[2000]
+4-796B	U+28455	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8AD
+4-796C	U+8FC1	# <cjk>	[2000]
+4-796D	U+8FC6	# <cjk>	[2000]
+4-796E	U+FA24	# CJK COMPATIBILITY IDEOGRAPH-FA24	[2000]
+4-796F	U+8FCA	# <cjk>	[2000]
+4-7970	U+8FCD	# <cjk>	[2000]
+4-7971	U+8FD3	# <cjk>	[2000]
+4-7972	U+8FD5	# <cjk>	[2000]
+4-7973	U+8FE0	# <cjk>	[2000]
+4-7974	U+8FF1	# <cjk>	[2000]
+4-7975	U+8FF5	# <cjk>	[2000]
+4-7976	U+8FFB	# <cjk>	[2000]
+4-7977	U+9002	# <cjk>	[2000]
+4-7978	U+900C	# <cjk>	[2000]
+4-7979	U+9037	# <cjk>	[2000]
+4-797A	U+2856B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8AE
+4-797B	U+9043	# <cjk>	[2000]
+4-797C	U+9044	# <cjk>	[2000]
+4-797D	U+905D	# <cjk>	[2000]
+4-797E	U+285C8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8AF
+4-7A21	U+285C9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B0
+4-7A22	U+9085	# <cjk>	[2000]
+4-7A23	U+908C	# <cjk>	[2000]
+4-7A24	U+9090	# <cjk>	[2000]
+4-7A25	U+961D	# <cjk>	[2000]
+4-7A26	U+90A1	# <cjk>	[2000]
+4-7A27	U+48B5	# <cjk>	[2000]
+4-7A28	U+90B0	# <cjk>	[2000]
+4-7A29	U+90B6	# <cjk>	[2000]
+4-7A2A	U+90C3	# <cjk>	[2000]
+4-7A2B	U+90C8	# <cjk>	[2000]
+4-7A2C	U+286D7	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B1
+4-7A2D	U+90DC	# <cjk>	[2000]
+4-7A2E	U+90DF	# <cjk>	[2000]
+4-7A2F	U+286FA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B2
+4-7A30	U+90F6	# <cjk>	[2000]
+4-7A31	U+90F2	# <cjk>	[2000]
+4-7A32	U+9100	# <cjk>	[2000]
+4-7A33	U+90EB	# <cjk>	[2000]
+4-7A34	U+90FE	# <cjk>	[2000]
+4-7A35	U+90FF	# <cjk>	[2000]
+4-7A36	U+9104	# <cjk>	[2000]
+4-7A37	U+9106	# <cjk>	[2000]
+4-7A38	U+9118	# <cjk>	[2000]
+4-7A39	U+911C	# <cjk>	[2000]
+4-7A3A	U+911E	# <cjk>	[2000]
+4-7A3B	U+9137	# <cjk>	[2000]
+4-7A3C	U+9139	# <cjk>	[2000]
+4-7A3D	U+913A	# <cjk>	[2000]
+4-7A3E	U+9146	# <cjk>	[2000]
+4-7A3F	U+9147	# <cjk>	[2000]
+4-7A40	U+9157	# <cjk>	[2000]
+4-7A41	U+9159	# <cjk>	[2000]
+4-7A42	U+9161	# <cjk>	[2000]
+4-7A43	U+9164	# <cjk>	[2000]
+4-7A44	U+9174	# <cjk>	[2000]
+4-7A45	U+9179	# <cjk>	[2000]
+4-7A46	U+9185	# <cjk>	[2000]
+4-7A47	U+918E	# <cjk>	[2000]
+4-7A48	U+91A8	# <cjk>	[2000]
+4-7A49	U+91AE	# <cjk>	[2000]
+4-7A4A	U+91B3	# <cjk>	[2000]
+4-7A4B	U+91B6	# <cjk>	[2000]
+4-7A4C	U+91C3	# <cjk>	[2000]
+4-7A4D	U+91C4	# <cjk>	[2000]
+4-7A4E	U+91DA	# <cjk>	[2000]
+4-7A4F	U+28949	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B3
+4-7A50	U+28946	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B4
+4-7A51	U+91EC	# <cjk>	[2000]
+4-7A52	U+91EE	# <cjk>	[2000]
+4-7A53	U+9201	# <cjk>	[2000]
+4-7A54	U+920A	# <cjk>	[2000]
+4-7A55	U+9216	# <cjk>	[2000]
+4-7A56	U+9217	# <cjk>	[2000]
+4-7A57	U+2896B	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B5
+4-7A58	U+9233	# <cjk>	[2000]
+4-7A59	U+9242	# <cjk>	[2000]
+4-7A5A	U+9247	# <cjk>	[2000]
+4-7A5B	U+924A	# <cjk>	[2000]
+4-7A5C	U+924E	# <cjk>	[2000]
+4-7A5D	U+9251	# <cjk>	[2000]
+4-7A5E	U+9256	# <cjk>	[2000]
+4-7A5F	U+9259	# <cjk>	[2000]
+4-7A60	U+9260	# <cjk>	[2000]
+4-7A61	U+9261	# <cjk>	[2000]
+4-7A62	U+9265	# <cjk>	[2000]
+4-7A63	U+9267	# <cjk>	[2000]
+4-7A64	U+9268	# <cjk>	[2000]
+4-7A65	U+28987	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B6
+4-7A66	U+28988	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B7
+4-7A67	U+927C	# <cjk>	[2000]
+4-7A68	U+927D	# <cjk>	[2000]
+4-7A69	U+927F	# <cjk>	[2000]
+4-7A6A	U+9289	# <cjk>	[2000]
+4-7A6B	U+928D	# <cjk>	[2000]
+4-7A6C	U+9297	# <cjk>	[2000]
+4-7A6D	U+9299	# <cjk>	[2000]
+4-7A6E	U+929F	# <cjk>	[2000]
+4-7A6F	U+92A7	# <cjk>	[2000]
+4-7A70	U+92AB	# <cjk>	[2000]
+4-7A71	U+289BA	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B8
+4-7A72	U+289BB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8B9
+4-7A73	U+92B2	# <cjk>	[2000]
+4-7A74	U+92BF	# <cjk>	[2000]
+4-7A75	U+92C0	# <cjk>	[2000]
+4-7A76	U+92C6	# <cjk>	[2000]
+4-7A77	U+92CE	# <cjk>	[2000]
+4-7A78	U+92D0	# <cjk>	[2000]
+4-7A79	U+92D7	# <cjk>	[2000]
+4-7A7A	U+92D9	# <cjk>	[2000]
+4-7A7B	U+92E5	# <cjk>	[2000]
+4-7A7C	U+92E7	# <cjk>	[2000]
+4-7A7D	U+9311	# <cjk>	[2000]
+4-7A7E	U+28A1E	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8BA
+4-7B21	U+28A29	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8BB
+4-7B22	U+92F7	# <cjk>	[2000]
+4-7B23	U+92F9	# <cjk>	[2000]
+4-7B24	U+92FB	# <cjk>	[2000]
+4-7B25	U+9302	# <cjk>	[2000]
+4-7B26	U+930D	# <cjk>	[2000]
+4-7B27	U+9315	# <cjk>	[2000]
+4-7B28	U+931D	# <cjk>	[2000]
+4-7B29	U+931E	# <cjk>	[2000]
+4-7B2A	U+9327	# <cjk>	[2000]
+4-7B2B	U+9329	# <cjk>	[2000]
+4-7B2C	U+28A71	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8BC
+4-7B2D	U+28A43	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8BD
+4-7B2E	U+9347	# <cjk>	[2000]
+4-7B2F	U+9351	# <cjk>	[2000]
+4-7B30	U+9357	# <cjk>	[2000]
+4-7B31	U+935A	# <cjk>	[2000]
+4-7B32	U+936B	# <cjk>	[2000]
+4-7B33	U+9371	# <cjk>	[2000]
+4-7B34	U+9373	# <cjk>	[2000]
+4-7B35	U+93A1	# <cjk>	[2000]
+4-7B36	U+28A99	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8BE
+4-7B37	U+28ACD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8BF
+4-7B38	U+9388	# <cjk>	[2000]
+4-7B39	U+938B	# <cjk>	[2000]
+4-7B3A	U+938F	# <cjk>	[2000]
+4-7B3B	U+939E	# <cjk>	[2000]
+4-7B3C	U+93F5	# <cjk>	[2000]
+4-7B3D	U+28AE4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C0
+4-7B3E	U+28ADD	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C1
+4-7B3F	U+93F1	# <cjk>	[2000]
+4-7B40	U+93C1	# <cjk>	[2000]
+4-7B41	U+93C7	# <cjk>	[2000]
+4-7B42	U+93DC	# <cjk>	[2000]
+4-7B43	U+93E2	# <cjk>	[2000]
+4-7B44	U+93E7	# <cjk>	[2000]
+4-7B45	U+9409	# <cjk>	[2000]
+4-7B46	U+940F	# <cjk>	[2000]
+4-7B47	U+9416	# <cjk>	[2000]
+4-7B48	U+9417	# <cjk>	[2000]
+4-7B49	U+93FB	# <cjk>	[2000]
+4-7B4A	U+9432	# <cjk>	[2000]
+4-7B4B	U+9434	# <cjk>	[2000]
+4-7B4C	U+943B	# <cjk>	[2000]
+4-7B4D	U+9445	# <cjk>	[2000]
+4-7B4E	U+28BC1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C2
+4-7B4F	U+28BEF	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C3
+4-7B50	U+946D	# <cjk>	[2000]
+4-7B51	U+946F	# <cjk>	[2000]
+4-7B52	U+9578	# <cjk>	[2000]
+4-7B53	U+9579	# <cjk>	[2000]
+4-7B54	U+9586	# <cjk>	[2000]
+4-7B55	U+958C	# <cjk>	[2000]
+4-7B56	U+958D	# <cjk>	[2000]
+4-7B57	U+28D10	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C4
+4-7B58	U+95AB	# <cjk>	[2000]
+4-7B59	U+95B4	# <cjk>	[2000]
+4-7B5A	U+28D71	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C5
+4-7B5B	U+95C8	# <cjk>	[2000]
+4-7B5C	U+28DFB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C6
+4-7B5D	U+28E1F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C7
+4-7B5E	U+962C	# <cjk>	[2000]
+4-7B5F	U+9633	# <cjk>	[2000]
+4-7B60	U+9634	# <cjk>	[2000]
+4-7B61	U+28E36	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C8
+4-7B62	U+963C	# <cjk>	[2000]
+4-7B63	U+9641	# <cjk>	[2000]
+4-7B64	U+9661	# <cjk>	[2000]
+4-7B65	U+28E89	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8C9
+4-7B66	U+9682	# <cjk>	[2000]
+4-7B67	U+28EEB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8CA
+4-7B68	U+969A	# <cjk>	[2000]
+4-7B69	U+28F32	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8CB
+4-7B6A	U+49E7	# <cjk>	[2000]
+4-7B6B	U+96A9	# <cjk>	[2000]
+4-7B6C	U+96AF	# <cjk>	[2000]
+4-7B6D	U+96B3	# <cjk>	[2000]
+4-7B6E	U+96BA	# <cjk>	[2000]
+4-7B6F	U+96BD	# <cjk>	[2000]
+4-7B70	U+49FA	# <cjk>	[2000]
+4-7B71	U+28FF8	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8CC
+4-7B72	U+96D8	# <cjk>	[2000]
+4-7B73	U+96DA	# <cjk>	[2000]
+4-7B74	U+96DD	# <cjk>	[2000]
+4-7B75	U+4A04	# <cjk>	[2000]
+4-7B76	U+9714	# <cjk>	[2000]
+4-7B77	U+9723	# <cjk>	[2000]
+4-7B78	U+4A29	# <cjk>	[2000]
+4-7B79	U+9736	# <cjk>	[2000]
+4-7B7A	U+9741	# <cjk>	[2000]
+4-7B7B	U+9747	# <cjk>	[2000]
+4-7B7C	U+9755	# <cjk>	[2000]
+4-7B7D	U+9757	# <cjk>	[2000]
+4-7B7E	U+975B	# <cjk>	[2000]
+4-7C21	U+976A	# <cjk>	[2000]
+4-7C22	U+292A0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8CD
+4-7C23	U+292B1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8CE
+4-7C24	U+9796	# <cjk>	[2000]
+4-7C25	U+979A	# <cjk>	[2000]
+4-7C26	U+979E	# <cjk>	[2000]
+4-7C27	U+97A2	# <cjk>	[2000]
+4-7C28	U+97B1	# <cjk>	[2000]
+4-7C29	U+97B2	# <cjk>	[2000]
+4-7C2A	U+97BE	# <cjk>	[2000]
+4-7C2B	U+97CC	# <cjk>	[2000]
+4-7C2C	U+97D1	# <cjk>	[2000]
+4-7C2D	U+97D4	# <cjk>	[2000]
+4-7C2E	U+97D8	# <cjk>	[2000]
+4-7C2F	U+97D9	# <cjk>	[2000]
+4-7C30	U+97E1	# <cjk>	[2000]
+4-7C31	U+97F1	# <cjk>	[2000]
+4-7C32	U+9804	# <cjk>	[2000]
+4-7C33	U+980D	# <cjk>	[2000]
+4-7C34	U+980E	# <cjk>	[2000]
+4-7C35	U+9814	# <cjk>	[2000]
+4-7C36	U+9816	# <cjk>	[2000]
+4-7C37	U+4ABC	# <cjk>	[2000]
+4-7C38	U+29490	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8CF
+4-7C39	U+9823	# <cjk>	[2000]
+4-7C3A	U+9832	# <cjk>	[2000]
+4-7C3B	U+9833	# <cjk>	[2000]
+4-7C3C	U+9825	# <cjk>	[2000]
+4-7C3D	U+9847	# <cjk>	[2000]
+4-7C3E	U+9866	# <cjk>	[2000]
+4-7C3F	U+98AB	# <cjk>	[2000]
+4-7C40	U+98AD	# <cjk>	[2000]
+4-7C41	U+98B0	# <cjk>	[2000]
+4-7C42	U+295CF	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D0
+4-7C43	U+98B7	# <cjk>	[2000]
+4-7C44	U+98B8	# <cjk>	[2000]
+4-7C45	U+98BB	# <cjk>	[2000]
+4-7C46	U+98BC	# <cjk>	[2000]
+4-7C47	U+98BF	# <cjk>	[2000]
+4-7C48	U+98C2	# <cjk>	[2000]
+4-7C49	U+98C7	# <cjk>	[2000]
+4-7C4A	U+98CB	# <cjk>	[2000]
+4-7C4B	U+98E0	# <cjk>	[2000]
+4-7C4C	U+2967F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D1
+4-7C4D	U+98E1	# <cjk>	[2000]
+4-7C4E	U+98E3	# <cjk>	[2000]
+4-7C4F	U+98E5	# <cjk>	[2000]
+4-7C50	U+98EA	# <cjk>	[2000]
+4-7C51	U+98F0	# <cjk>	[2000]
+4-7C52	U+98F1	# <cjk>	[2000]
+4-7C53	U+98F3	# <cjk>	[2000]
+4-7C54	U+9908	# <cjk>	[2000]
+4-7C55	U+4B3B	# <cjk>	[2000]
+4-7C56	U+296F0	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D2
+4-7C57	U+9916	# <cjk>	[2000]
+4-7C58	U+9917	# <cjk>	[2000]
+4-7C59	U+29719	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D3
+4-7C5A	U+991A	# <cjk>	[2000]
+4-7C5B	U+991B	# <cjk>	[2000]
+4-7C5C	U+991C	# <cjk>	[2000]
+4-7C5D	U+29750	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D4
+4-7C5E	U+9931	# <cjk>	[2000]
+4-7C5F	U+9932	# <cjk>	[2000]
+4-7C60	U+9933	# <cjk>	[2000]
+4-7C61	U+993A	# <cjk>	[2000]
+4-7C62	U+993B	# <cjk>	[2000]
+4-7C63	U+993C	# <cjk>	[2000]
+4-7C64	U+9940	# <cjk>	[2000]
+4-7C65	U+9941	# <cjk>	[2000]
+4-7C66	U+9946	# <cjk>	[2000]
+4-7C67	U+994D	# <cjk>	[2000]
+4-7C68	U+994E	# <cjk>	[2000]
+4-7C69	U+995C	# <cjk>	[2000]
+4-7C6A	U+995F	# <cjk>	[2000]
+4-7C6B	U+9960	# <cjk>	[2000]
+4-7C6C	U+99A3	# <cjk>	[2000]
+4-7C6D	U+99A6	# <cjk>	[2000]
+4-7C6E	U+99B9	# <cjk>	[2000]
+4-7C6F	U+99BD	# <cjk>	[2000]
+4-7C70	U+99BF	# <cjk>	[2000]
+4-7C71	U+99C3	# <cjk>	[2000]
+4-7C72	U+99C9	# <cjk>	[2000]
+4-7C73	U+99D4	# <cjk>	[2000]
+4-7C74	U+99D9	# <cjk>	[2000]
+4-7C75	U+99DE	# <cjk>	[2000]
+4-7C76	U+298C6	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D5
+4-7C77	U+99F0	# <cjk>	[2000]
+4-7C78	U+99F9	# <cjk>	[2000]
+4-7C79	U+99FC	# <cjk>	[2000]
+4-7C7A	U+9A0A	# <cjk>	[2000]
+4-7C7B	U+9A11	# <cjk>	[2000]
+4-7C7C	U+9A16	# <cjk>	[2000]
+4-7C7D	U+9A1A	# <cjk>	[2000]
+4-7C7E	U+9A20	# <cjk>	[2000]
+4-7D21	U+9A31	# <cjk>	[2000]
+4-7D22	U+9A36	# <cjk>	[2000]
+4-7D23	U+9A44	# <cjk>	[2000]
+4-7D24	U+9A4C	# <cjk>	[2000]
+4-7D25	U+9A58	# <cjk>	[2000]
+4-7D26	U+4BC2	# <cjk>	[2000]
+4-7D27	U+9AAF	# <cjk>	[2000]
+4-7D28	U+4BCA	# <cjk>	[2000]
+4-7D29	U+9AB7	# <cjk>	[2000]
+4-7D2A	U+4BD2	# <cjk>	[2000]
+4-7D2B	U+9AB9	# <cjk>	[2000]
+4-7D2C	U+29A72	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D6
+4-7D2D	U+9AC6	# <cjk>	[2000]
+4-7D2E	U+9AD0	# <cjk>	[2000]
+4-7D2F	U+9AD2	# <cjk>	[2000]
+4-7D30	U+9AD5	# <cjk>	[2000]
+4-7D31	U+4BE8	# <cjk>	[2000]
+4-7D32	U+9ADC	# <cjk>	[2000]
+4-7D33	U+9AE0	# <cjk>	[2000]
+4-7D34	U+9AE5	# <cjk>	[2000]
+4-7D35	U+9AE9	# <cjk>	[2000]
+4-7D36	U+9B03	# <cjk>	[2000]
+4-7D37	U+9B0C	# <cjk>	[2000]
+4-7D38	U+9B10	# <cjk>	[2000]
+4-7D39	U+9B12	# <cjk>	[2000]
+4-7D3A	U+9B16	# <cjk>	[2000]
+4-7D3B	U+9B1C	# <cjk>	[2000]
+4-7D3C	U+9B2B	# <cjk>	[2000]
+4-7D3D	U+9B33	# <cjk>	[2000]
+4-7D3E	U+9B3D	# <cjk>	[2000]
+4-7D3F	U+4C20	# <cjk>	[2000]
+4-7D40	U+9B4B	# <cjk>	[2000]
+4-7D41	U+9B63	# <cjk>	[2000]
+4-7D42	U+9B65	# <cjk>	[2000]
+4-7D43	U+9B6B	# <cjk>	[2000]
+4-7D44	U+9B6C	# <cjk>	[2000]
+4-7D45	U+9B73	# <cjk>	[2000]
+4-7D46	U+9B76	# <cjk>	[2000]
+4-7D47	U+9B77	# <cjk>	[2000]
+4-7D48	U+9BA6	# <cjk>	[2000]
+4-7D49	U+9BAC	# <cjk>	[2000]
+4-7D4A	U+9BB1	# <cjk>	[2000]
+4-7D4B	U+29DDB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D7
+4-7D4C	U+29E3D	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D8
+4-7D4D	U+9BB2	# <cjk>	[2000]
+4-7D4E	U+9BB8	# <cjk>	[2000]
+4-7D4F	U+9BBE	# <cjk>	[2000]
+4-7D50	U+9BC7	# <cjk>	[2000]
+4-7D51	U+9BF3	# <cjk>	[2000]
+4-7D52	U+9BD8	# <cjk>	[2000]
+4-7D53	U+9BDD	# <cjk>	[2000]
+4-7D54	U+9BE7	# <cjk>	[2000]
+4-7D55	U+9BEA	# <cjk>	[2000]
+4-7D56	U+9BEB	# <cjk>	[2000]
+4-7D57	U+9BEF	# <cjk>	[2000]
+4-7D58	U+9BEE	# <cjk>	[2000]
+4-7D59	U+29E15	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8D9
+4-7D5A	U+9BFA	# <cjk>	[2000]
+4-7D5B	U+29E8A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8DA
+4-7D5C	U+9BF7	# <cjk>	[2000]
+4-7D5D	U+29E49	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8DB
+4-7D5E	U+9C16	# <cjk>	[2000]
+4-7D5F	U+9C18	# <cjk>	[2000]
+4-7D60	U+9C19	# <cjk>	[2000]
+4-7D61	U+9C1A	# <cjk>	[2000]
+4-7D62	U+9C1D	# <cjk>	[2000]
+4-7D63	U+9C22	# <cjk>	[2000]
+4-7D64	U+9C27	# <cjk>	[2000]
+4-7D65	U+9C29	# <cjk>	[2000]
+4-7D66	U+9C2A	# <cjk>	[2000]
+4-7D67	U+29EC4	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8DC
+4-7D68	U+9C31	# <cjk>	[2000]
+4-7D69	U+9C36	# <cjk>	[2000]
+4-7D6A	U+9C37	# <cjk>	[2000]
+4-7D6B	U+9C45	# <cjk>	[2000]
+4-7D6C	U+9C5C	# <cjk>	[2000]
+4-7D6D	U+29EE9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8DD
+4-7D6E	U+9C49	# <cjk>	[2000]
+4-7D6F	U+9C4A	# <cjk>	[2000]
+4-7D70	U+29EDB	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8DE
+4-7D71	U+9C54	# <cjk>	[2000]
+4-7D72	U+9C58	# <cjk>	[2000]
+4-7D73	U+9C5B	# <cjk>	[2000]
+4-7D74	U+9C5D	# <cjk>	[2000]
+4-7D75	U+9C5F	# <cjk>	[2000]
+4-7D76	U+9C69	# <cjk>	[2000]
+4-7D77	U+9C6A	# <cjk>	[2000]
+4-7D78	U+9C6B	# <cjk>	[2000]
+4-7D79	U+9C6D	# <cjk>	[2000]
+4-7D7A	U+9C6E	# <cjk>	[2000]
+4-7D7B	U+9C70	# <cjk>	[2000]
+4-7D7C	U+9C72	# <cjk>	[2000]
+4-7D7D	U+9C75	# <cjk>	[2000]
+4-7D7E	U+9C7A	# <cjk>	[2000]
+4-7E21	U+9CE6	# <cjk>	[2000]
+4-7E22	U+9CF2	# <cjk>	[2000]
+4-7E23	U+9D0B	# <cjk>	[2000]
+4-7E24	U+9D02	# <cjk>	[2000]
+4-7E25	U+29FCE	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8DF
+4-7E26	U+9D11	# <cjk>	[2000]
+4-7E27	U+9D17	# <cjk>	[2000]
+4-7E28	U+9D18	# <cjk>	[2000]
+4-7E29	U+2A02F	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E0
+4-7E2A	U+4CC4	# <cjk>	[2000]
+4-7E2B	U+2A01A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E1
+4-7E2C	U+9D32	# <cjk>	[2000]
+4-7E2D	U+4CD1	# <cjk>	[2000]
+4-7E2E	U+9D42	# <cjk>	[2000]
+4-7E2F	U+9D4A	# <cjk>	[2000]
+4-7E30	U+9D5F	# <cjk>	[2000]
+4-7E31	U+9D62	# <cjk>	[2000]
+4-7E32	U+2A0F9	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E2
+4-7E33	U+9D69	# <cjk>	[2000]
+4-7E34	U+9D6B	# <cjk>	[2000]
+4-7E35	U+2A082	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E3
+4-7E36	U+9D73	# <cjk>	[2000]
+4-7E37	U+9D76	# <cjk>	[2000]
+4-7E38	U+9D77	# <cjk>	[2000]
+4-7E39	U+9D7E	# <cjk>	[2000]
+4-7E3A	U+9D84	# <cjk>	[2000]
+4-7E3B	U+9D8D	# <cjk>	[2000]
+4-7E3C	U+9D99	# <cjk>	[2000]
+4-7E3D	U+9DA1	# <cjk>	[2000]
+4-7E3E	U+9DBF	# <cjk>	[2000]
+4-7E3F	U+9DB5	# <cjk>	[2000]
+4-7E40	U+9DB9	# <cjk>	[2000]
+4-7E41	U+9DBD	# <cjk>	[2000]
+4-7E42	U+9DC3	# <cjk>	[2000]
+4-7E43	U+9DC7	# <cjk>	[2000]
+4-7E44	U+9DC9	# <cjk>	[2000]
+4-7E45	U+9DD6	# <cjk>	[2000]
+4-7E46	U+9DDA	# <cjk>	[2000]
+4-7E47	U+9DDF	# <cjk>	[2000]
+4-7E48	U+9DE0	# <cjk>	[2000]
+4-7E49	U+9DE3	# <cjk>	[2000]
+4-7E4A	U+9DF4	# <cjk>	[2000]
+4-7E4B	U+4D07	# <cjk>	[2000]
+4-7E4C	U+9E0A	# <cjk>	[2000]
+4-7E4D	U+9E02	# <cjk>	[2000]
+4-7E4E	U+9E0D	# <cjk>	[2000]
+4-7E4F	U+9E19	# <cjk>	[2000]
+4-7E50	U+9E1C	# <cjk>	[2000]
+4-7E51	U+9E1D	# <cjk>	[2000]
+4-7E52	U+9E7B	# <cjk>	[2000]
+4-7E53	U+22218	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E4
+4-7E54	U+9E80	# <cjk>	[2000]
+4-7E55	U+9E85	# <cjk>	[2000]
+4-7E56	U+9E9B	# <cjk>	[2000]
+4-7E57	U+9EA8	# <cjk>	[2000]
+4-7E58	U+2A38C	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E5
+4-7E59	U+9EBD	# <cjk>	[2000]
+4-7E5A	U+2A437	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E6
+4-7E5B	U+9EDF	# <cjk>	[2000]
+4-7E5C	U+9EE7	# <cjk>	[2000]
+4-7E5D	U+9EEE	# <cjk>	[2000]
+4-7E5E	U+9EFF	# <cjk>	[2000]
+4-7E5F	U+9F02	# <cjk>	[2000]
+4-7E60	U+4D77	# <cjk>	[2000]
+4-7E61	U+9F03	# <cjk>	[2000]
+4-7E62	U+9F17	# <cjk>	[2000]
+4-7E63	U+9F19	# <cjk>	[2000]
+4-7E64	U+9F2F	# <cjk>	[2000]
+4-7E65	U+9F37	# <cjk>	[2000]
+4-7E66	U+9F3A	# <cjk>	[2000]
+4-7E67	U+9F3D	# <cjk>	[2000]
+4-7E68	U+9F41	# <cjk>	[2000]
+4-7E69	U+9F45	# <cjk>	[2000]
+4-7E6A	U+9F46	# <cjk>	[2000]
+4-7E6B	U+9F53	# <cjk>	[2000]
+4-7E6C	U+9F55	# <cjk>	[2000]
+4-7E6D	U+9F58	# <cjk>	[2000]
+4-7E6E	U+2A5F1	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E7
+4-7E6F	U+9F5D	# <cjk>	[2000]
+4-7E70	U+2A602	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E8
+4-7E71	U+9F69	# <cjk>	[2000]
+4-7E72	U+2A61A	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8E9
+4-7E73	U+9F6D	# <cjk>	[2000]
+4-7E74	U+9F70	# <cjk>	[2000]
+4-7E75	U+9F75	# <cjk>	[2000]
+4-7E76	U+2A6B2	# <cjk>	[2000]	[Unicode3.1]	Private: U+F8EA
diff --git a/aclocal.m4 b/aclocal.m4
index f98db73..b5f9cb0 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.2 -*- Autoconf -*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -12,9 +12,9 @@
 # PARTICULAR PURPOSE.
 
 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
-dnl serial 11 (pkg-config-0.29.1)
-dnl
+# pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+# serial 11 (pkg-config-0.29.1)
+
 dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
 dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
 dnl
@@ -288,5 +288,73 @@
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
 ])dnl PKG_CHECK_VAR
 
+dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl   [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
+dnl   [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------
+dnl
+dnl Prepare a "--with-" configure option using the lowercase
+dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
+dnl PKG_CHECK_MODULES in a single macro.
+AC_DEFUN([PKG_WITH_MODULES],
+[
+m4_pushdef([with_arg], m4_tolower([$1]))
+
+m4_pushdef([description],
+           [m4_default([$5], [build with ]with_arg[ support])])
+
+m4_pushdef([def_arg], [m4_default([$6], [auto])])
+m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
+m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
+
+m4_case(def_arg,
+            [yes],[m4_pushdef([with_without], [--without-]with_arg)],
+            [m4_pushdef([with_without],[--with-]with_arg)])
+
+AC_ARG_WITH(with_arg,
+     AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
+    [AS_TR_SH([with_]with_arg)=def_arg])
+
+AS_CASE([$AS_TR_SH([with_]with_arg)],
+            [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
+            [auto],[PKG_CHECK_MODULES([$1],[$2],
+                                        [m4_n([def_action_if_found]) $3],
+                                        [m4_n([def_action_if_not_found]) $4])])
+
+m4_popdef([with_arg])
+m4_popdef([description])
+m4_popdef([def_arg])
+
+])dnl PKG_WITH_MODULES
+
+dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl   [DESCRIPTION], [DEFAULT])
+dnl -----------------------------------------------
+dnl
+dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
+dnl check._[VARIABLE-PREFIX] is exported as make variable.
+AC_DEFUN([PKG_HAVE_WITH_MODULES],
+[
+PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
+
+AM_CONDITIONAL([HAVE_][$1],
+               [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
+])dnl PKG_HAVE_WITH_MODULES
+
+dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl   [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------------------
+dnl
+dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
+dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
+dnl and preprocessor variable.
+AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
+[
+PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
+
+AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
+        [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
+])dnl PKG_HAVE_DEFINE_WITH_MODULES
+
 m4_include([m4/ax_c_float_words_bigendian.m4])
 m4_include([m4/ax_check_openssl.m4])
diff --git a/android/Setup.local b/android/Setup.local
index f44afaa..f374c50 100644
--- a/android/Setup.local
+++ b/android/Setup.local
@@ -6,6 +6,7 @@
 _contextvars _contextvarsmodule.c
 time timemodule.c
 _datetime _datetimemodule.c
+_zoneinfo _zoneinfo.c
 _random _randommodule.c
 _bisect _bisectmodule.c
 _heapq _heapqmodule.c
diff --git a/android/bionic/config.c b/android/bionic/config.c
index 7e1705a..393913d 100644
--- a/android/bionic/config.c
+++ b/android/bionic/config.c
@@ -29,6 +29,7 @@
 extern PyObject* PyInit__contextvars(void);
 extern PyObject* PyInit_time(void);
 extern PyObject* PyInit__datetime(void);
+extern PyObject* PyInit__zoneinfo(void);
 extern PyObject* PyInit__random(void);
 extern PyObject* PyInit__bisect(void);
 extern PyObject* PyInit__heapq(void);
@@ -94,6 +95,7 @@
 extern PyObject* PyInit__io(void);
 extern PyObject* PyInit_faulthandler(void);
 extern PyObject* PyInit__tracemalloc(void);
+extern PyObject* PyInit__peg_parser(void);
 extern PyObject* PyInit__symtable(void);
 extern PyObject* PyInit_xxsubtype(void);
 
@@ -114,6 +116,7 @@
     {"_contextvars", PyInit__contextvars},
     {"time", PyInit_time},
     {"_datetime", PyInit__datetime},
+    {"_zoneinfo", PyInit__zoneinfo},
     {"_random", PyInit__random},
     {"_bisect", PyInit__bisect},
     {"_heapq", PyInit__heapq},
@@ -179,6 +182,7 @@
     {"_io", PyInit__io},
     {"faulthandler", PyInit_faulthandler},
     {"_tracemalloc", PyInit__tracemalloc},
+    {"_peg_parser", PyInit__peg_parser},
     {"_symtable", PyInit__symtable},
     {"xxsubtype", PyInit_xxsubtype},
 
diff --git a/android/bionic/pyconfig/pyconfig.h b/android/bionic/pyconfig/pyconfig.h
index 40b3386..8974547 100644
--- a/android/bionic/pyconfig/pyconfig.h
+++ b/android/bionic/pyconfig/pyconfig.h
@@ -9,6 +9,10 @@
 /* Define if building universal (internal helper macro) */
 /* #undef AC_APPLE_UNIVERSAL_BUILD */
 
+/* BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the PEP425 tag of the
+   build system. */
+/* #undef AIX_BUILDDATE */
+
 /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want
    support for AIX C++ shared extension modules. */
 /* #undef AIX_GENUINE_CPLUSPLUS */
@@ -45,10 +49,6 @@
 /* Define if getpgrp() must be called as getpgrp(0). */
 /* #undef GETPGRP_HAVE_ARG */
 
-/* Define if gettimeofday() does not have second (timezone) argument This is
-   the case on Motorola V4 (R40V4.2) */
-/* #undef GETTIMEOFDAY_NO_TZ */
-
 /* Define to 1 if you have the `accept4' function. */
 #define HAVE_ACCEPT4 1
 
@@ -516,9 +516,6 @@
 /* Define to 1 if you have the `getspnam' function. */
 #define HAVE_GETSPNAM 1
 
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
 /* Define to 1 if you have the `getwd' function. */
 #define HAVE_GETWD 1
 
@@ -628,12 +625,18 @@
 /* Define to 1 if you have the <linux/can.h> header file. */
 #define HAVE_LINUX_CAN_H 1
 
+/* Define to 1 if you have the <linux/can/j1939.h> header file. */
+/* #undef HAVE_LINUX_CAN_J1939_H */
+
 /* Define if compiling using Linux 3.6 or later. */
 #define HAVE_LINUX_CAN_RAW_FD_FRAMES 1
 
 /* Define to 1 if you have the <linux/can/raw.h> header file. */
 #define HAVE_LINUX_CAN_RAW_H 1
 
+/* Define if compiling using Linux 4.1 or later. */
+/* #undef HAVE_LINUX_CAN_RAW_JOIN_FILTERS */
+
 /* Define to 1 if you have the <linux/memfd.h> header file. */
 /* #undef HAVE_LINUX_MEMFD_H */
 
@@ -652,6 +655,9 @@
 /* Define to 1 if you have the <linux/vm_sockets.h> header file. */
 /* #undef HAVE_LINUX_VM_SOCKETS_H */
 
+/* Define to 1 if you have the <linux/wait.h> header file. */
+#define HAVE_LINUX_WAIT_H 1
+
 /* Define to 1 if you have the `lockf' function. */
 #define HAVE_LOCKF 1
 
@@ -775,6 +781,9 @@
 /* Define if you have the 'prlimit' functions. */
 #define HAVE_PRLIMIT 1
 
+/* Define if you have the '_dyld_shared_cache_contains_path' function. */
+/* #undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH */
+
 /* Define to 1 if you have the <process.h> header file. */
 /* #undef HAVE_PROCESS_H */
 
@@ -805,9 +814,6 @@
 /* Define to 1 if you have the <pty.h> header file. */
 #define HAVE_PTY_H 1
 
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
 /* Define to 1 if you have the `pwrite' function. */
 #define HAVE_PWRITE 1
 
@@ -1266,9 +1272,6 @@
 /* Define to 1 if you have the `unlinkat' function. */
 #define HAVE_UNLINKAT 1
 
-/* Define to 1 if you have the `unsetenv' function. */
-#define HAVE_UNSETENV 1
-
 /* Define if you have a useable wchar_t type defined in wchar.h; useable means
    wchar_t must be an unsigned type with at least 16 bits. (see
    Include/unicodeobject.h). */
@@ -1385,6 +1388,9 @@
 /* Define as the preferred size in bits of long digits */
 /* #undef PYLONG_BITS_IN_DIGIT */
 
+/* enabled builtin hash modules */
+#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha256,sha512,sha3,blake2"
+
 /* Define if you want to coerce the C locale to a UTF-8 based locale */
 #define PY_COERCE_C_LOCALE 1
 
@@ -1525,6 +1531,10 @@
 /* Define if WINDOW in curses.h offers a field _flags. */
 #define WINDOW_HAS_FLAGS 1
 
+/* Define if you want build the _decimal module using a coroutine-local rather
+   than a thread-local context */
+#define WITH_DECIMAL_CONTEXTVAR 1
+
 /* Define if you want documentation strings in extension modules */
 #define WITH_DOC_STRINGS 1
 
diff --git a/android/darwin_x86_64/Setup.local b/android/darwin_x86_64/Setup.local
index 85c8752..336dc03 100644
--- a/android/darwin_x86_64/Setup.local
+++ b/android/darwin_x86_64/Setup.local
@@ -1,2 +1,4 @@
 _posixshmem _multiprocessing/posixshmem.c
 _scproxy _scproxy.c
+_ssl _ssl.c
+_hashlib _hashopenssl.c
diff --git a/android/darwin_x86_64/config.c b/android/darwin_x86_64/config.c
index 1d4b0d9..5badcb8 100644
--- a/android/darwin_x86_64/config.c
+++ b/android/darwin_x86_64/config.c
@@ -25,12 +25,15 @@
 
 extern PyObject* PyInit__posixshmem(void);
 extern PyObject* PyInit__scproxy(void);
+extern PyObject* PyInit__ssl(void);
+extern PyObject* PyInit__hashlib(void);
 extern PyObject* PyInit_array(void);
 extern PyObject* PyInit_cmath(void);
 extern PyObject* PyInit_math(void);
 extern PyObject* PyInit__contextvars(void);
 extern PyObject* PyInit_time(void);
 extern PyObject* PyInit__datetime(void);
+extern PyObject* PyInit__zoneinfo(void);
 extern PyObject* PyInit__random(void);
 extern PyObject* PyInit__bisect(void);
 extern PyObject* PyInit__heapq(void);
@@ -96,8 +99,10 @@
 extern PyObject* PyInit__io(void);
 extern PyObject* PyInit_faulthandler(void);
 extern PyObject* PyInit__tracemalloc(void);
+extern PyObject* PyInit__peg_parser(void);
 extern PyObject* PyInit__symtable(void);
 extern PyObject* PyInit_xxsubtype(void);
+
 /* -- ADDMODULE MARKER 1 -- */
 
 extern PyObject* PyMarshal_Init(void);
@@ -109,81 +114,86 @@
 
 struct _inittab _PyImport_Inittab[] = {
 
-{"_posixshmem", PyInit__posixshmem},
-{"_scproxy", PyInit__scproxy},
-{"array", PyInit_array},
-{"cmath", PyInit_cmath},
-{"math", PyInit_math},
-{"_contextvars", PyInit__contextvars},
-{"time", PyInit_time},
-{"_datetime", PyInit__datetime},
-{"_random", PyInit__random},
-{"_bisect", PyInit__bisect},
-{"_heapq", PyInit__heapq},
-{"_pickle", PyInit__pickle},
-{"atexit", PyInit_atexit},
-{"_json", PyInit__json},
-{"_lsprof", PyInit__lsprof},
-{"unicodedata", PyInit_unicodedata},
-{"_opcode", PyInit__opcode},
-{"_asyncio", PyInit__asyncio},
-{"_abc", PyInit__abc},
-{"_queue", PyInit__queue},
-{"_statistics", PyInit__statistics},
-{"fcntl", PyInit_fcntl},
-{"pwd", PyInit_pwd},
-{"grp", PyInit_grp},
-{"select", PyInit_select},
-{"parser", PyInit_parser},
-{"mmap", PyInit_mmap},
-{"syslog", PyInit_syslog},
-{"_xxsubinterpreters", PyInit__xxsubinterpreters},
-{"_csv", PyInit__csv},
-{"_posixsubprocess", PyInit__posixsubprocess},
-{"_socket", PyInit__socket},
-{"termios", PyInit_termios},
-{"resource", PyInit_resource},
-{"zlib", PyInit_zlib},
-{"binascii", PyInit_binascii},
-{"pyexpat", PyInit_pyexpat},
-{"_multibytecodec", PyInit__multibytecodec},
-{"_codecs_kr", PyInit__codecs_kr},
-{"_codecs_jp", PyInit__codecs_jp},
-{"_codecs_cn", PyInit__codecs_cn},
-{"_codecs_tw", PyInit__codecs_tw},
-{"_codecs_hk", PyInit__codecs_hk},
-{"_codecs_iso2022", PyInit__codecs_iso2022},
-{"_multiprocessing", PyInit__multiprocessing},
-{"_ctypes", PyInit__ctypes},
-{"_blake2", PyInit__blake2},
-{"_md5", PyInit__md5},
-{"_sha1", PyInit__sha1},
-{"_sha256", PyInit__sha256},
-{"_sha512", PyInit__sha512},
-{"_sha3", PyInit__sha3},
-{"_struct", PyInit__struct},
-{"posix", PyInit_posix},
-{"errno", PyInit_errno},
-{"pwd", PyInit_pwd},
-{"_sre", PyInit__sre},
-{"_codecs", PyInit__codecs},
-{"_weakref", PyInit__weakref},
-{"_functools", PyInit__functools},
-{"_operator", PyInit__operator},
-{"_collections", PyInit__collections},
-{"_abc", PyInit__abc},
-{"itertools", PyInit_itertools},
-{"atexit", PyInit_atexit},
-{"_signal", PyInit__signal},
-{"_stat", PyInit__stat},
-{"time", PyInit_time},
-{"_thread", PyInit__thread},
-{"_locale", PyInit__locale},
-{"_io", PyInit__io},
-{"faulthandler", PyInit_faulthandler},
-{"_tracemalloc", PyInit__tracemalloc},
-{"_symtable", PyInit__symtable},
-{"xxsubtype", PyInit_xxsubtype},
+    {"_posixshmem", PyInit__posixshmem},
+    {"_scproxy", PyInit__scproxy},
+    {"_ssl", PyInit__ssl},
+    {"_hashlib", PyInit__hashlib},
+    {"array", PyInit_array},
+    {"cmath", PyInit_cmath},
+    {"math", PyInit_math},
+    {"_contextvars", PyInit__contextvars},
+    {"time", PyInit_time},
+    {"_datetime", PyInit__datetime},
+    {"_zoneinfo", PyInit__zoneinfo},
+    {"_random", PyInit__random},
+    {"_bisect", PyInit__bisect},
+    {"_heapq", PyInit__heapq},
+    {"_pickle", PyInit__pickle},
+    {"atexit", PyInit_atexit},
+    {"_json", PyInit__json},
+    {"_lsprof", PyInit__lsprof},
+    {"unicodedata", PyInit_unicodedata},
+    {"_opcode", PyInit__opcode},
+    {"_asyncio", PyInit__asyncio},
+    {"_abc", PyInit__abc},
+    {"_queue", PyInit__queue},
+    {"_statistics", PyInit__statistics},
+    {"fcntl", PyInit_fcntl},
+    {"pwd", PyInit_pwd},
+    {"grp", PyInit_grp},
+    {"select", PyInit_select},
+    {"parser", PyInit_parser},
+    {"mmap", PyInit_mmap},
+    {"syslog", PyInit_syslog},
+    {"_xxsubinterpreters", PyInit__xxsubinterpreters},
+    {"_csv", PyInit__csv},
+    {"_posixsubprocess", PyInit__posixsubprocess},
+    {"_socket", PyInit__socket},
+    {"termios", PyInit_termios},
+    {"resource", PyInit_resource},
+    {"zlib", PyInit_zlib},
+    {"binascii", PyInit_binascii},
+    {"pyexpat", PyInit_pyexpat},
+    {"_multibytecodec", PyInit__multibytecodec},
+    {"_codecs_kr", PyInit__codecs_kr},
+    {"_codecs_jp", PyInit__codecs_jp},
+    {"_codecs_cn", PyInit__codecs_cn},
+    {"_codecs_tw", PyInit__codecs_tw},
+    {"_codecs_hk", PyInit__codecs_hk},
+    {"_codecs_iso2022", PyInit__codecs_iso2022},
+    {"_multiprocessing", PyInit__multiprocessing},
+    {"_ctypes", PyInit__ctypes},
+    {"_blake2", PyInit__blake2},
+    {"_md5", PyInit__md5},
+    {"_sha1", PyInit__sha1},
+    {"_sha256", PyInit__sha256},
+    {"_sha512", PyInit__sha512},
+    {"_sha3", PyInit__sha3},
+    {"_struct", PyInit__struct},
+    {"posix", PyInit_posix},
+    {"errno", PyInit_errno},
+    {"pwd", PyInit_pwd},
+    {"_sre", PyInit__sre},
+    {"_codecs", PyInit__codecs},
+    {"_weakref", PyInit__weakref},
+    {"_functools", PyInit__functools},
+    {"_operator", PyInit__operator},
+    {"_collections", PyInit__collections},
+    {"_abc", PyInit__abc},
+    {"itertools", PyInit_itertools},
+    {"atexit", PyInit_atexit},
+    {"_signal", PyInit__signal},
+    {"_stat", PyInit__stat},
+    {"time", PyInit_time},
+    {"_thread", PyInit__thread},
+    {"_locale", PyInit__locale},
+    {"_io", PyInit__io},
+    {"faulthandler", PyInit_faulthandler},
+    {"_tracemalloc", PyInit__tracemalloc},
+    {"_peg_parser", PyInit__peg_parser},
+    {"_symtable", PyInit__symtable},
+    {"xxsubtype", PyInit_xxsubtype},
+
 /* -- ADDMODULE MARKER 2 -- */
 
     /* This module lives in marshal.c */
diff --git a/android/darwin_x86_64/pyconfig/pyconfig.h b/android/darwin_x86_64/pyconfig/pyconfig.h
index 8f8877b..4deb9a0 100644
--- a/android/darwin_x86_64/pyconfig/pyconfig.h
+++ b/android/darwin_x86_64/pyconfig/pyconfig.h
@@ -9,6 +9,10 @@
 /* Define if building universal (internal helper macro) */
 /* #undef AC_APPLE_UNIVERSAL_BUILD */
 
+/* BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the PEP425 tag of the
+   build system. */
+/* #undef AIX_BUILDDATE */
+
 /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want
    support for AIX C++ shared extension modules. */
 /* #undef AIX_GENUINE_CPLUSPLUS */
@@ -45,10 +49,6 @@
 /* Define if getpgrp() must be called as getpgrp(0). */
 /* #undef GETPGRP_HAVE_ARG */
 
-/* Define if gettimeofday() does not have second (timezone) argument This is
-   the case on Motorola V4 (R40V4.2) */
-/* #undef GETTIMEOFDAY_NO_TZ */
-
 /* Define to 1 if you have the `accept4' function. */
 /* #undef HAVE_ACCEPT4 */
 
@@ -425,7 +425,7 @@
 #define HAVE_GETC_UNLOCKED 1
 
 /* Define to 1 if you have the `getentropy' function. */
-#define HAVE_GETENTROPY 1
+/* #undef HAVE_GETENTROPY */
 
 /* Define to 1 if you have the `getgrgid_r' function. */
 #define HAVE_GETGRGID_R 1
@@ -514,9 +514,6 @@
 /* Define to 1 if you have the `getspnam' function. */
 /* #undef HAVE_GETSPNAM */
 
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
 /* Define to 1 if you have the `getwd' function. */
 #define HAVE_GETWD 1
 
@@ -626,12 +623,18 @@
 /* Define to 1 if you have the <linux/can.h> header file. */
 /* #undef HAVE_LINUX_CAN_H */
 
+/* Define to 1 if you have the <linux/can/j1939.h> header file. */
+/* #undef HAVE_LINUX_CAN_J1939_H */
+
 /* Define if compiling using Linux 3.6 or later. */
 /* #undef HAVE_LINUX_CAN_RAW_FD_FRAMES */
 
 /* Define to 1 if you have the <linux/can/raw.h> header file. */
 /* #undef HAVE_LINUX_CAN_RAW_H */
 
+/* Define if compiling using Linux 4.1 or later. */
+/* #undef HAVE_LINUX_CAN_RAW_JOIN_FILTERS */
+
 /* Define to 1 if you have the <linux/memfd.h> header file. */
 /* #undef HAVE_LINUX_MEMFD_H */
 
@@ -650,6 +653,9 @@
 /* Define to 1 if you have the <linux/vm_sockets.h> header file. */
 /* #undef HAVE_LINUX_VM_SOCKETS_H */
 
+/* Define to 1 if you have the <linux/wait.h> header file. */
+/* #undef HAVE_LINUX_WAIT_H */
+
 /* Define to 1 if you have the `lockf' function. */
 #define HAVE_LOCKF 1
 
@@ -773,6 +779,9 @@
 /* Define if you have the 'prlimit' functions. */
 /* #undef HAVE_PRLIMIT */
 
+/* Define if you have the '_dyld_shared_cache_contains_path' function. */
+/* #undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH */
+
 /* Define to 1 if you have the <process.h> header file. */
 /* #undef HAVE_PROCESS_H */
 
@@ -803,9 +812,6 @@
 /* Define to 1 if you have the <pty.h> header file. */
 /* #undef HAVE_PTY_H */
 
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
 /* Define to 1 if you have the `pwrite' function. */
 #define HAVE_PWRITE 1
 
@@ -1264,13 +1270,10 @@
 /* Define to 1 if you have the `unlinkat' function. */
 #define HAVE_UNLINKAT 1
 
-/* Define to 1 if you have the `unsetenv' function. */
-#define HAVE_UNSETENV 1
-
 /* Define if you have a useable wchar_t type defined in wchar.h; useable means
    wchar_t must be an unsigned type with at least 16 bits. (see
    Include/unicodeobject.h). */
-/* #undef HAVE_USABLE_WCHAR_T */
+#define HAVE_USABLE_WCHAR_T 1
 
 /* Define to 1 if you have the <util.h> header file. */
 #define HAVE_UTIL_H 1
@@ -1334,7 +1337,7 @@
 #define HAVE_WRITEV 1
 
 /* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */
-#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1
+/* #undef HAVE_X509_VERIFY_PARAM_SET1_HOST */
 
 /* Define if the zlib library has inflateCopy */
 #define HAVE_ZLIB_COPY 1
@@ -1378,11 +1381,14 @@
 /* #undef PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT */
 
 /* Defined if PTHREAD_SCOPE_SYSTEM supported. */
-#define PTHREAD_SYSTEM_SCHED_SUPPORTED 1
+/* #undef PTHREAD_SYSTEM_SCHED_SUPPORTED */
 
 /* Define as the preferred size in bits of long digits */
 /* #undef PYLONG_BITS_IN_DIGIT */
 
+/* enabled builtin hash modules */
+#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha256,sha512,sha3,blake2"
+
 /* Define if you want to coerce the C locale to a UTF-8 based locale */
 #define PY_COERCE_C_LOCALE 1
 
@@ -1419,7 +1425,7 @@
 /* #undef SHM_NEEDS_LIBRT */
 
 /* Define if i>>j for signed int i does not extend the sign bit when i < 0 */
-/* #undef SIGNED_RIGHT_SHIFT_ZERO_FILLS */
+#define SIGNED_RIGHT_SHIFT_ZERO_FILLS 1
 
 /* The size of `double', as computed by sizeof. */
 #define SIZEOF_DOUBLE 8
@@ -1519,6 +1525,10 @@
 /* Define if WINDOW in curses.h offers a field _flags. */
 #define WINDOW_HAS_FLAGS 1
 
+/* Define if you want build the _decimal module using a coroutine-local rather
+   than a thread-local context */
+#define WITH_DECIMAL_CONTEXTVAR 1
+
 /* Define if you want documentation strings in extension modules */
 #define WITH_DOC_STRINGS 1
 
diff --git a/android/linux_x86_64/Setup.local b/android/linux_x86_64/Setup.local
index 9482e3c..3f8e068 100644
--- a/android/linux_x86_64/Setup.local
+++ b/android/linux_x86_64/Setup.local
@@ -1 +1,3 @@
 _posixshmem _multiprocessing/posixshmem.c
+_ssl _ssl.c
+_hashlib _hashopenssl.c
diff --git a/android/linux_x86_64/config.c b/android/linux_x86_64/config.c
index edaa899..be62f9a 100644
--- a/android/linux_x86_64/config.c
+++ b/android/linux_x86_64/config.c
@@ -24,12 +24,15 @@
 
 
 extern PyObject* PyInit__posixshmem(void);
+extern PyObject* PyInit__ssl(void);
+extern PyObject* PyInit__hashlib(void);
 extern PyObject* PyInit_array(void);
 extern PyObject* PyInit_cmath(void);
 extern PyObject* PyInit_math(void);
 extern PyObject* PyInit__contextvars(void);
 extern PyObject* PyInit_time(void);
 extern PyObject* PyInit__datetime(void);
+extern PyObject* PyInit__zoneinfo(void);
 extern PyObject* PyInit__random(void);
 extern PyObject* PyInit__bisect(void);
 extern PyObject* PyInit__heapq(void);
@@ -95,6 +98,7 @@
 extern PyObject* PyInit__io(void);
 extern PyObject* PyInit_faulthandler(void);
 extern PyObject* PyInit__tracemalloc(void);
+extern PyObject* PyInit__peg_parser(void);
 extern PyObject* PyInit__symtable(void);
 extern PyObject* PyInit_xxsubtype(void);
 
@@ -110,12 +114,15 @@
 struct _inittab _PyImport_Inittab[] = {
 
     {"_posixshmem", PyInit__posixshmem},
+    {"_ssl", PyInit__ssl},
+    {"_hashlib", PyInit__hashlib},
     {"array", PyInit_array},
     {"cmath", PyInit_cmath},
     {"math", PyInit_math},
     {"_contextvars", PyInit__contextvars},
     {"time", PyInit_time},
     {"_datetime", PyInit__datetime},
+    {"_zoneinfo", PyInit__zoneinfo},
     {"_random", PyInit__random},
     {"_bisect", PyInit__bisect},
     {"_heapq", PyInit__heapq},
@@ -181,6 +188,7 @@
     {"_io", PyInit__io},
     {"faulthandler", PyInit_faulthandler},
     {"_tracemalloc", PyInit__tracemalloc},
+    {"_peg_parser", PyInit__peg_parser},
     {"_symtable", PyInit__symtable},
     {"xxsubtype", PyInit_xxsubtype},
 
diff --git a/android/linux_x86_64/pyconfig/pyconfig.h b/android/linux_x86_64/pyconfig/pyconfig.h
index 54e1ed0..b98d9bb 100644
--- a/android/linux_x86_64/pyconfig/pyconfig.h
+++ b/android/linux_x86_64/pyconfig/pyconfig.h
@@ -9,6 +9,10 @@
 /* Define if building universal (internal helper macro) */
 /* #undef AC_APPLE_UNIVERSAL_BUILD */
 
+/* BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the PEP425 tag of the
+   build system. */
+/* #undef AIX_BUILDDATE */
+
 /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want
    support for AIX C++ shared extension modules. */
 /* #undef AIX_GENUINE_CPLUSPLUS */
@@ -45,10 +49,6 @@
 /* Define if getpgrp() must be called as getpgrp(0). */
 /* #undef GETPGRP_HAVE_ARG */
 
-/* Define if gettimeofday() does not have second (timezone) argument This is
-   the case on Motorola V4 (R40V4.2) */
-/* #undef GETTIMEOFDAY_NO_TZ */
-
 /* Define to 1 if you have the `accept4' function. */
 #define HAVE_ACCEPT4 1
 
@@ -514,9 +514,6 @@
 /* Define to 1 if you have the `getspnam' function. */
 #define HAVE_GETSPNAM 1
 
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
 /* Define to 1 if you have the `getwd' function. */
 #define HAVE_GETWD 1
 
@@ -626,12 +623,18 @@
 /* Define to 1 if you have the <linux/can.h> header file. */
 #define HAVE_LINUX_CAN_H 1
 
+/* Define to 1 if you have the <linux/can/j1939.h> header file. */
+/* #undef HAVE_LINUX_CAN_J1939_H */
+
 /* Define if compiling using Linux 3.6 or later. */
 #define HAVE_LINUX_CAN_RAW_FD_FRAMES 1
 
 /* Define to 1 if you have the <linux/can/raw.h> header file. */
 #define HAVE_LINUX_CAN_RAW_H 1
 
+/* Define if compiling using Linux 4.1 or later. */
+/* #undef HAVE_LINUX_CAN_RAW_JOIN_FILTERS */
+
 /* Define to 1 if you have the <linux/memfd.h> header file. */
 /* #undef HAVE_LINUX_MEMFD_H */
 
@@ -650,6 +653,9 @@
 /* Define to 1 if you have the <linux/vm_sockets.h> header file. */
 /* #undef HAVE_LINUX_VM_SOCKETS_H */
 
+/* Define to 1 if you have the <linux/wait.h> header file. */
+#define HAVE_LINUX_WAIT_H 1
+
 /* Define to 1 if you have the `lockf' function. */
 #define HAVE_LOCKF 1
 
@@ -773,6 +779,9 @@
 /* Define if you have the 'prlimit' functions. */
 #define HAVE_PRLIMIT 1
 
+/* Define if you have the '_dyld_shared_cache_contains_path' function. */
+/* #undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH */
+
 /* Define to 1 if you have the <process.h> header file. */
 /* #undef HAVE_PROCESS_H */
 
@@ -803,9 +812,6 @@
 /* Define to 1 if you have the <pty.h> header file. */
 #define HAVE_PTY_H 1
 
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
 /* Define to 1 if you have the `pwrite' function. */
 #define HAVE_PWRITE 1
 
@@ -1264,9 +1270,6 @@
 /* Define to 1 if you have the `unlinkat' function. */
 #define HAVE_UNLINKAT 1
 
-/* Define to 1 if you have the `unsetenv' function. */
-#define HAVE_UNSETENV 1
-
 /* Define if you have a useable wchar_t type defined in wchar.h; useable means
    wchar_t must be an unsigned type with at least 16 bits. (see
    Include/unicodeobject.h). */
@@ -1383,6 +1386,9 @@
 /* Define as the preferred size in bits of long digits */
 /* #undef PYLONG_BITS_IN_DIGIT */
 
+/* enabled builtin hash modules */
+#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha256,sha512,sha3,blake2"
+
 /* Define if you want to coerce the C locale to a UTF-8 based locale */
 #define PY_COERCE_C_LOCALE 1
 
@@ -1519,6 +1525,10 @@
 /* Define if WINDOW in curses.h offers a field _flags. */
 #define WINDOW_HAS_FLAGS 1
 
+/* Define if you want build the _decimal module using a coroutine-local rather
+   than a thread-local context */
+#define WITH_DECIMAL_CONTEXTVAR 1
+
 /* Define if you want documentation strings in extension modules */
 #define WITH_DOC_STRINGS 1
 
diff --git a/android/regen.sh b/android/regen.sh
index 524d7f3..1c0e235 100755
--- a/android/regen.sh
+++ b/android/regen.sh
@@ -25,7 +25,7 @@
 cd $DIR
 
 if [ $DIR == "linux_x86_64" ]; then
-  export CC="$ANDROID_BUILD_TOP/prebuilts/clang/host/linux-x86/clang-r365631c/bin/clang"
+  export CC="$ANDROID_BUILD_TOP/prebuilts/clang/host/linux-x86/clang-r399163b/bin/clang"
   export CFLAGS="--sysroot=$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot"
   export LDFLAGS="--sysroot=$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot -B$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/lib/gcc/x86_64-linux/4.8.3 -L$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/lib/gcc/x86_64-linux/4.8.3 -L$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/x86_64-linux/lib64"
 fi
@@ -39,9 +39,16 @@
 ../../../configure
 
 if [ $DIR == "darwin_x86_64" ]; then
+  # getentropy is not safe on <10.12, which we still target
+  sed -ibak "s%#define HAVE_GETENTROPY 1%/* #undef HAVE_GETENTROPY */%" pyconfig.h
   # utimensat and futimens are not safe on <10.13, which we still target
   sed -ibak "s%#define HAVE_UTIMENSAT 1%/* #undef HAVE_UTIMENSAT */%" pyconfig.h
   sed -ibak "s%#define HAVE_FUTIMENS 1%/* #undef HAVE_FUTIMENS */%" pyconfig.h
+  # preadv and pwritev are not safe on <11, which we still target
+  sed -ibak "s%#define HAVE_PREADV 1%/* #undef HAVE_PREADV */%" pyconfig.h
+  sed -ibak "s%#define HAVE_PWRITEV 1%/* #undef HAVE_PWRITEV */%" pyconfig.h
+  # _dyld_shared_cache_contains_path is not safe on <11, which we still target
+  sed -ibak "s%#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1%/* #undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH */%" pyconfig.h
 fi
 
 cp pyconfig.h ../pyconfig/
diff --git a/configure b/configure
index 96dcd0d..2d379fe 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for python 3.8.
+# Generated by GNU Autoconf 2.69 for python 3.9.
 #
 # Report bugs to <https://bugs.python.org/>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='python'
 PACKAGE_TARNAME='python'
-PACKAGE_VERSION='3.8'
-PACKAGE_STRING='python 3.8'
+PACKAGE_VERSION='3.9'
+PACKAGE_STRING='python 3.9'
 PACKAGE_BUGREPORT='https://bugs.python.org/'
 PACKAGE_URL=''
 
@@ -631,6 +631,8 @@
 THREADHEADERS
 LIBPL
 PY_ENABLE_SHARED
+PLATLIBDIR
+BINLIBDEST
 LIBPYTHON
 EXT_SUFFIX
 ALT_SOABI
@@ -657,6 +659,7 @@
 PKG_CONFIG_LIBDIR
 PKG_CONFIG_PATH
 PKG_CONFIG
+TZPATH
 SHLIBS
 CFLAGSFORSHARED
 LINKFORSHARED
@@ -697,6 +700,8 @@
 ac_ct_AR
 AR
 GNULD
+EXPORTSFROM
+EXPORTSYMS
 LINKCC
 LDVERSION
 RUNSHARED
@@ -782,7 +787,6 @@
 docdir
 oldincludedir
 includedir
-runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -819,6 +823,7 @@
 enable_optimizations
 with_lto
 with_hash_algorithm
+with_tzpath
 with_address_sanitizer
 with_memory_sanitizer
 with_undefined_behavior_sanitizer
@@ -840,10 +845,12 @@
 with_libm
 with_libc
 enable_big_digits
+with_platlibdir
 with_computed_gotos
 with_ensurepip
 with_openssl
 with_ssl_default_suites
+with_builtin_hashlib_hashes
 '
       ac_precious_vars='build_alias
 host_alias
@@ -897,7 +904,6 @@
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
-runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1150,15 +1156,6 @@
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
-  -runstatedir | --runstatedir | --runstatedi | --runstated \
-  | --runstate | --runstat | --runsta | --runst | --runs \
-  | --run | --ru | --r)
-    ac_prev=runstatedir ;;
-  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
-  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
-  | --run=* | --ru=* | --r=*)
-    runstatedir=$ac_optarg ;;
-
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1296,7 +1293,7 @@
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir runstatedir
+		libdir localedir mandir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1409,7 +1406,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures python 3.8 to adapt to many kinds of systems.
+\`configure' configures python 3.9 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1449,7 +1446,6 @@
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1475,7 +1471,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of python 3.8:";;
+     short | recursive ) echo "Configuration of python 3.9:";;
    esac
   cat <<\_ACEOF
 
@@ -1484,52 +1480,74 @@
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-universalsdk[=SDKDIR]
-                          Build fat binary against Mac OS X SDK
+                          create a universal binary build. SDKDIR specifies
+                          which macOS SDK should be used to perform the build,
+                          see Mac/README.rst. (default is no)
   --enable-framework[=INSTALLDIR]
-                          Build (MacOSX|Darwin) framework
-  --enable-shared         disable/enable building shared python library
-  --enable-profiling      enable C-level code profiling
-  --enable-optimizations  Enable expensive, stable optimizations (PGO, etc).
-                          Disabled by default.
+                          create a Python.framework rather than a traditional
+                          Unix install. optional INSTALLDIR specifies the
+                          installation path. see Mac/README.rst (default is
+                          no)
+  --enable-shared         enable building a shared Python library (default is
+                          no)
+  --enable-profiling      enable C-level code profiling with gprof (default is
+                          no)
+  --enable-optimizations  enable expensive, stable optimizations (PGO, etc.)
+                          (default is no)
   --enable-loadable-sqlite-extensions
-                          support loadable extensions in _sqlite module
-  --enable-ipv6           Enable ipv6 (with ipv4) support
-  --disable-ipv6          Disable ipv6 support
-  --enable-big-digits[=BITS]
-                          use big digits for Python longs [[BITS=30]]
+                          support loadable extensions in _sqlite module, see
+                          Doc/library/sqlite3.rst (default is no)
+  --enable-ipv6           enable ipv6 (with ipv4) support, see
+                          Doc/library/socket.rst (default is yes if supported)
+  --enable-big-digits[=15|30]
+                          use big digits (30 or 15 bits) for Python longs
+                          (default is system-dependent)]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-universal-archs=ARCH
-                          select architectures for universal build ("32-bit",
-                          "64-bit", "3-way", "intel", "intel-32", "intel-64",
-                          or "all")
+                          specify the kind of universal binary that should be
+                          created. this option is only valid when
+                          --enable-universalsdk is set; options are:
+                          ("universal2", "32-bit", "64-bit", "3-way", "intel",
+                          "intel-32", "intel-64", or "all") see Mac/README.rst
   --with-framework-name=FRAMEWORK
-                          specify an alternate name of the framework built
-                          with --enable-framework
-  --with-cxx-main=<compiler>
-                          compile main() and link python executable with C++
-                          compiler
-  --with-suffix=.exe      set executable suffix
-  --with-pydebug          build with Py_DEBUG defined
+                          specify the name for the python framework on macOS
+                          only valid when --enable-framework is set. see
+                          Mac/README.rst (default is 'Python')
+  --with-cxx-main[=COMPILER]
+                          compile main() and link Python executable with C++
+                          compiler specified in COMPILER (default is $CXX)
+  --with-suffix=SUFFIX    set executable suffix to SUFFIX (default is '.exe')
+  --with-pydebug          build with Py_DEBUG defined (default is no)
   --with-trace-refs       enable tracing references for debugging purpose
-  --with-assertions       build with C assertions enabled
-  --with-lto              Enable Link Time Optimization in any build. Disabled
-                          by default.
+                          (default is no)
+  --with-assertions       build with C assertions enabled (default is no)
+  --with-lto              enable Link-Time-Optimization in any build (default
+                          is no)
   --with-hash-algorithm=[fnv|siphash24]
-                          select hash algorithm
+                          select hash algorithm for use in Python/pyhash.c
+                          (default is SipHash24)
+  --with-tzpath=<list of absolute paths separated by pathsep>
+                           Select the default time zone search path for zoneinfo.TZPATH
+
   --with-address-sanitizer
-                          enable AddressSanitizer (asan)
-  --with-memory-sanitizer enable MemorySanitizer (msan)
+                          enable AddressSanitizer memory error detector,
+                          'asan' (default is no)
+  --with-memory-sanitizer enable MemorySanitizer allocation error detector,
+                          'msan' (default is no)
   --with-undefined-behavior-sanitizer
-                          enable UndefinedBehaviorSanitizer (ubsan)
-  --with-libs='lib1 ...'  link against additional libs
+                          enable UndefinedBehaviorSanitizer undefined
+                          behaviour detector, 'ubsan' (default is no)
+  --with-libs='lib1 ...'  link against additional libs (default is no)
   --with-system-expat     build pyexpat module using an installed expat
-                          library
-  --with-system-ffi       build _ctypes module using an installed ffi library
+                          library, see Doc/library/pyexpat.rst (default is no)
+  --with-system-ffi       build _ctypes module using an installed ffi library,
+                          see Doc/library/ctypes.rst (default is
+                          system-dependent)
   --with-system-libmpdec  build _decimal module using an installed libmpdec
-                          library
+                          library, see Doc/library/decimal.rst (default is no)
   --with-decimal-contextvar
                           build _decimal module using a coroutine-local rather
                           than a thread-local context (default is yes)
@@ -1538,29 +1556,37 @@
   --with-tcltk-libs='-L...'
                           override search for Tcl and Tk libs
   --with-dbmliborder=db1:db2:...
-                          order to check db backends for dbm. Valid value is a
-                          colon separated string with the backend names
-                          `ndbm', `gdbm' and `bdb'.
-  --with(out)-doc-strings disable/enable documentation strings
-  --with(out)-pymalloc    disable/enable specialized mallocs
-  --with(out)-c-locale-coercion
-                          disable/enable C locale coercion to a UTF-8 based
-                          locale
-  --with-valgrind         Enable Valgrind support
-  --with(out)-dtrace      disable/enable DTrace support
-  --with-libm=STRING      math library
-  --with-libc=STRING      C library
-  --with(out)-computed-gotos
-                          Use computed gotos in evaluation loop (enabled by
+                          override order to check db backends for dbm; a valid
+                          value is a colon separated string with the backend
+                          names `ndbm', `gdbm' and `bdb'.
+  --with-doc-strings      enable documentation strings (default is yes)
+  --with-pymalloc         enable specialized mallocs (default is yes)
+  --with-c-locale-coercion
+                          enable C locale coercion to a UTF-8 based locale
+                          (default is yes)
+  --with-valgrind         enable Valgrind support (default is no)
+  --with-dtrace           enable DTrace support (default is no)
+  --with-libm=STRING      override libm math library to STRING (default is
+                          system-dependent)
+  --with-libc=STRING      override libc C library to STRING (default is
+                          system-dependent)
+  --with-platlibdir=DIRNAME
+                          Python library directory name (default is "lib")
+  --with-computed-gotos   enable computed gotos in evaluation loop (enabled by
                           default on supported compilers)
-  --with(out)-ensurepip=[=upgrade]
-                          "install" or "upgrade" using bundled pip
-  --with-openssl=DIR      root of the OpenSSL directory
+  --with-ensurepip[=install|upgrade|no]
+                          "install" or "upgrade" using bundled pip (default is
+                          upgrade)
+  --with-openssl=DIR      override root of the OpenSSL directory to DIR
   --with-ssl-default-suites=[python|openssl|STRING]
-                          Override default cipher suites string, python: use
+                          override default cipher suites string, python: use
                           Python's preferred selection (default), openssl:
                           leave OpenSSL's defaults untouched, STRING: use a
-                          custom string, PROTOCOL_SSLv2 ignores the setting
+                          custom string, PROTOCOL_SSLv2 ignores the setting,
+                          see Doc/library/ssl.rst
+  --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2
+                          builtin hash modules, md5, sha1, sha256, sha512,
+                          sha3 (with shake), blake2
 
 Some influential environment variables:
   MACHDEP     name for machine-dependent library files
@@ -1646,7 +1672,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-python configure 3.8
+python configure 3.9
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2355,7 +2381,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by python $as_me 3.8, which was
+It was created by python $as_me 3.9, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2975,7 +3001,7 @@
 mv confdefs.h.new confdefs.h
 
 
-VERSION=3.8
+VERSION=3.9
 
 # Version number of Python's own shared library file.
 
@@ -3252,7 +3278,7 @@
 
 ##AC_ARG_WITH(dyld,
 ##            AS_HELP_STRING([--with-dyld],
-##                           [Use (OpenStep|Rhapsody) dynamic linker]))
+##                           [use (OpenStep|Rhapsody) dynamic linker]))
 ##
 # Set name for machine-dependent library files
 
@@ -5771,8 +5797,6 @@
 # If CXX is set, and if it is needed to link a main function that was
 # compiled with CXX, LINKCC is CXX instead. Always using CXX is undesirable:
 # python might then depend on the C++ runtime
-# This is altered for AIX in order to build the export list before
-# linking.
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking LINKCC" >&5
 $as_echo_n "checking LINKCC... " >&6; }
@@ -5780,13 +5804,6 @@
 then
 	LINKCC='$(PURIFY) $(MAINCC)'
 	case $ac_sys_system in
-	AIX*)
-	   exp_extra="\"\""
-	   if test $ac_sys_release -ge 5 -o \
-		   $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
-	       exp_extra="."
-	   fi
-	   LINKCC="\$(srcdir)/Modules/makexp_aix Modules/python.exp $exp_extra \$(LIBRARY); $LINKCC";;
 	QNX*)
 	   # qcc must be used because the other compilers do not
 	   # support -N.
@@ -5796,6 +5813,26 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINKCC" >&5
 $as_echo "$LINKCC" >&6; }
 
+# EXPORTSYMS holds the list of exported symbols for AIX.
+# EXPORTSFROM holds the module name exporting symbols on AIX.
+EXPORTSYMS=
+EXPORTSFROM=
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking EXPORTSYMS" >&5
+$as_echo_n "checking EXPORTSYMS... " >&6; }
+case $ac_sys_system in
+AIX*)
+	EXPORTSYMS="Modules/python.exp"
+	if test $ac_sys_release -ge 5 -o \
+		$ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
+	    EXPORTSFROM=. # the main executable
+	fi
+	;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPORTSYMS" >&5
+$as_echo "$EXPORTSYMS" >&6; }
+
 # GNULD is set to "yes" if the GNU linker is used.  If this goes wrong
 # make sure we default having it set to "no": this is used by
 # distutils.unixccompiler to know if it should add --enable-new-dtags
@@ -6917,7 +6954,7 @@
 
 
 
-# The -arch flags for universal builds on OSX
+# The -arch flags for universal builds on macOS
 UNIVERSAL_ARCH_FLAGS=
 
 
@@ -7351,6 +7388,47 @@
       CFLAGS_NODIST="$CFLAGS_NODIST -Werror=implicit-function-declaration"
     fi
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can use visibility in $CC" >&5
+$as_echo_n "checking if we can use visibility in $CC... " >&6; }
+     ac_save_cc="$CC"
+     CC="$CC -fvisibility=hidden"
+     if ${ac_cv_enable_visibility+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+           ac_cv_enable_visibility=yes
+
+else
+
+           ac_cv_enable_visibility=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+     CC="$ac_save_cc"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_visibility" >&5
+$as_echo "$ac_cv_enable_visibility" >&6; }
+
+    if test $ac_cv_enable_visibility = yes
+    then
+      CFLAGS_NODIST="$CFLAGS_NODIST -fvisibility=hidden"
+    fi
+
     # if using gcc on alpha, use -mieee to get (near) full IEEE 754
     # support.  Without this, treatment of subnormals doesn't follow
     # the standard.
@@ -7403,6 +7481,11 @@
                LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
                ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
                ;;
+            universal2)
+               UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT="true"
+		;;
             intel)
                UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
                LIPO_32BIT_FLAGS="-extract i386"
@@ -7424,7 +7507,7 @@
                ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
                ;;
             *)
-               as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5
+               as_fn_error $? "proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way" "$LINENO" 5
                ;;
             esac
 
@@ -7493,6 +7576,31 @@
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACOSX_DEPLOYMENT_TARGET" >&5
 $as_echo "$MACOSX_DEPLOYMENT_TARGET" >&6; }
 
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if specified universal architectures work" >&5
+$as_echo_n "checking if specified universal architectures work... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+printf("%d", 42);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+             as_fn_error $? "check config.log and use the '--with-universal-archs' option" "$LINENO" 5
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
         # end of Darwin* tests
         ;;
     esac
@@ -7510,11 +7618,14 @@
     ;;
 esac
 
-# ICC needs -fp-model strict or floats behave badly
 case "$CC" in
 *icc*)
+    # ICC needs -fp-model strict or floats behave badly
     CFLAGS_NODIST="$CFLAGS_NODIST -fp-model strict"
     ;;
+*xlc*)
+    CFLAGS_NODIST="$CFLAGS_NODIST -qalias=noansi -qmaxmem=-1"
+    ;;
 esac
 
 if test "$assertions" = 'true'; then
@@ -7898,7 +8009,7 @@
 sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \
 libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
 linux/tipc.h linux/random.h spawn.h util.h alloca.h endian.h \
-sys/endian.h sys/sysmacros.h linux/memfd.h sys/memfd.h sys/mman.h
+sys/endian.h sys/sysmacros.h linux/memfd.h linux/wait.h sys/memfd.h sys/mman.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -8227,8 +8338,8 @@
 done
 
 
-# On Linux, can.h and can/raw.h require sys/socket.h
-for ac_header in linux/can.h linux/can/raw.h linux/can/bcm.h
+# On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h
+for ac_header in linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
@@ -9253,7 +9364,7 @@
     		MACOSX_DEFAULT_ARCH="ppc"
     		;;
     	*)
-    		as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5
+    		as_fn_error $? "Unexpected output of 'arch' on macOS" "$LINENO" 5
     		;;
     	esac
     else
@@ -9263,9 +9374,12 @@
     		;;
     	ppc)
     		MACOSX_DEFAULT_ARCH="ppc64"
+		;;
+    	arm64)
+    		MACOSX_DEFAULT_ARCH="arm64"
     		;;
     	*)
-    		as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5
+    		as_fn_error $? "Unexpected output of 'arch' on macOS" "$LINENO" 5
     		;;
     	esac
 
@@ -9997,7 +10111,21 @@
 
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext;;
+    conftest$ac_exeext conftest.$ac_ext
+# BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the platform_tag
+# of the AIX system used to build/package Python executable. This tag serves
+# as a baseline for bdist module packages
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the system builddate" >&5
+$as_echo_n "checking for the system builddate... " >&6; }
+               AIX_BUILDDATE=$(lslpp -Lcq bos.mp64 | awk -F:  '{ print $NF }')
+
+cat >>confdefs.h <<_ACEOF
+#define AIX_BUILDDATE $AIX_BUILDDATE
+_ACEOF
+
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AIX_BUILDDATE" >&5
+$as_echo "$AIX_BUILDDATE" >&6; }
+               ;;
 	*) ;;
 esac
 
@@ -10077,6 +10205,47 @@
 fi
 
 
+validate_tzpath() {
+    # Checks that each element of hte path is an absolute path
+    if test -z "$1"; then
+        # Empty string is allowed: it indicates no system TZPATH
+        return 0
+    fi
+
+    # Bad paths are those that don't start with /
+        if ( echo $1 | grep -qE '(^|:)([^/]|$)' ); then
+        as_fn_error $? "--with-tzpath must contain only absolute paths, not $1" "$LINENO" 5
+        return 1;
+    fi
+}
+
+TZPATH="/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tzpath" >&5
+$as_echo_n "checking for --with-tzpath... " >&6; }
+
+# Check whether --with-tzpath was given.
+if test "${with_tzpath+set}" = set; then :
+  withval=$with_tzpath;
+case "$withval" in
+    yes)
+        as_fn_error $? "--with-tzpath requires a value" "$LINENO" 5
+        ;;
+    *)
+        validate_tzpath "$withval"
+        TZPATH="$withval"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$withval\"" >&5
+$as_echo "\"$withval\"" >&6; }
+        ;;
+esac
+
+else
+  validate_tzpath "$TZPATH"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$TZPATH\"" >&5
+$as_echo "\"$TZPATH\"" >&6; }
+fi
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-address-sanitizer" >&5
 $as_echo_n "checking for --with-address-sanitizer... " >&6; }
 
@@ -11238,6 +11407,36 @@
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAN_RAW_JOIN_FILTERS" >&5
+$as_echo_n "checking for CAN_RAW_JOIN_FILTERS... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <linux/can/raw.h>
+int
+main ()
+{
+int can_raw_join_filters = CAN_RAW_JOIN_FILTERS;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+
+$as_echo "#define HAVE_LINUX_CAN_RAW_JOIN_FILTERS 1" >>confdefs.h
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 # Check for --with-doc-strings
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-doc-strings" >&5
 $as_echo_n "checking for --with-doc-strings... " >&6; }
@@ -11353,7 +11552,6 @@
 
 
 DTRACE=
-DFLAGS=
 DTRACE_HEADERS=
 DTRACE_OBJS=
 
@@ -11419,7 +11617,7 @@
 else
               ac_cv_dtrace_link=no
             echo 'BEGIN{}' > conftest.d
-            "$DTRACE" -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
+            "$DTRACE" $DFLAGS -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
                 ac_cv_dtrace_link=yes
 
 fi
@@ -11515,7 +11713,7 @@
  memrchr mbrtowc mkdirat mkfifo \
  madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \
  posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \
- pthread_condattr_setclock pthread_init pthread_kill putenv pwrite pwritev pwritev2 \
+ pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \
  readlink readlinkat readv realpath renameat \
  sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \
  setgid sethostname \
@@ -11525,7 +11723,7 @@
  sigaction sigaltstack sigfillset siginterrupt sigpending sigrelse \
  sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy strsignal symlinkat sync \
  sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
- truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
+ truncate uname unlinkat utimensat utimes waitid waitpid wait3 wait4 \
  wcscoll wcsftime wcsxfrm wmemcmp writev _getpty rtpSpawn
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -11824,6 +12022,31 @@
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _dyld_shared_cache_contains_path" >&5
+$as_echo_n "checking for _dyld_shared_cache_contains_path... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <mach-o/dyld.h>
+int
+main ()
+{
+void *x=_dyld_shared_cache_contains_path
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1" >>confdefs.h
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memfd_create" >&5
 $as_echo_n "checking for memfd_create... " >&6; }
@@ -12746,37 +12969,6 @@
 fi
 done
 
-for ac_func in gettimeofday
-do :
-  ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
-if test "x$ac_cv_func_gettimeofday" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETTIMEOFDAY 1
-_ACEOF
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/time.h>
-int
-main ()
-{
-gettimeofday((struct timeval*)0,(struct timezone*)0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-
-$as_echo "#define GETTIMEOFDAY_NO_TZ 1" >>confdefs.h
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-done
-
 
 # We search for both crypt and crypt_r as one or the other may be defined
 # This gets us our -lcrypt in LIBS when required on the target platform.
@@ -15213,10 +15405,46 @@
 fi
 
 
-if test x$PLATFORM_TRIPLET = x; then
-  LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
+
+BINLIBDEST='$(LIBDIR)/python$(VERSION)'
+
+
+# Check for --with-platlibdir
+# /usr/$LIDIRNAME/python$VERSION
+
+PLATLIBDIR="lib"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-platlibdir" >&5
+$as_echo_n "checking for --with-platlibdir... " >&6; }
+
+# Check whether --with-platlibdir was given.
+if test "${with_platlibdir+set}" = set; then :
+  withval=$with_platlibdir;
+# ignore 3 options:
+#   --with-platlibdir
+#   --with-platlibdir=
+#   --without-platlibdir
+if test -n "$withval" -a "$withval" != yes -a "$withval" != no
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  PLATLIBDIR="$withval"
+  BINLIBDEST='${exec_prefix}/${PLATLIBDIR}/python$(VERSION)'
 else
-  LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+if test x$PLATFORM_TRIPLET = x; then
+  LIBPL='$(prefix)'"/${PLATLIBDIR}/python${VERSION}/config-${LDVERSION}"
+else
+  LIBPL='$(prefix)'"/${PLATLIBDIR}/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
 fi
 
 
@@ -16648,7 +16876,7 @@
 done
 
 
-SRCDIRS="Parser Objects Python Modules Modules/_io Programs"
+SRCDIRS="Parser Parser/pegen Objects Python Modules Modules/_io Programs"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build directories" >&5
 $as_echo_n "checking for build directories... " >&6; }
 for dir in $SRCDIRS; do
@@ -17391,6 +17619,43 @@
 fi
 
 
+# builtin hash modules
+default_hashlib_hashes="md5,sha1,sha256,sha512,sha3,blake2"
+
+$as_echo "#define PY_BUILTIN_HASHLIB_HASHES /**/" >>confdefs.h
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-builtin-hashlib-hashes" >&5
+$as_echo_n "checking for --with-builtin-hashlib-hashes... " >&6; }
+
+# Check whether --with-builtin-hashlib-hashes was given.
+if test "${with_builtin_hashlib_hashes+set}" = set; then :
+  withval=$with_builtin_hashlib_hashes;
+case "$withval" in
+    yes)
+        withval=$default_hashlib_hashes
+        ;;
+    no)
+        withval=""
+        ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5
+$as_echo "$withval" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define PY_BUILTIN_HASHLIB_HASHES "$withval"
+_ACEOF
+
+
+else
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $default_hashlib_hashes" >&5
+$as_echo "$default_hashlib_hashes" >&6; };
+cat >>confdefs.h <<_ACEOF
+#define PY_BUILTIN_HASHLIB_HASHES "$default_hashlib_hashes"
+_ACEOF
+
+
+fi
+
 
 # generate output files
 ac_config_files="$ac_config_files Makefile.pre Misc/python.pc Misc/python-embed.pc Misc/python-config.sh"
@@ -17904,7 +18169,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by python $as_me 3.8, which was
+This file was extended by python $as_me 3.9, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17966,7 +18231,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-python config.status 3.8
+python config.status 3.9
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 18a0446..c968d14 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
 dnl ***********************************************
 
 # Set VERSION so we only need to edit in one place (i.e., here)
-m4_define(PYTHON_VERSION, 3.8)
+m4_define(PYTHON_VERSION, 3.9)
 
 AC_PREREQ([2.69])
 
@@ -149,7 +149,10 @@
 
 AC_MSG_CHECKING([for --enable-universalsdk])
 AC_ARG_ENABLE(universalsdk,
-	AS_HELP_STRING([--enable-universalsdk@<:@=SDKDIR@:>@], [Build fat binary against Mac OS X SDK]),
+	AS_HELP_STRING([--enable-universalsdk@<:@=SDKDIR@:>@],
+	               [create a universal binary build.
+	                SDKDIR specifies which macOS SDK should be used to perform the build,
+	                see Mac/README.rst. (default is no)]),
 [
 	case $enableval in
 	yes)
@@ -212,7 +215,11 @@
 AC_SUBST(LIPO_32BIT_FLAGS)
 AC_MSG_CHECKING(for --with-universal-archs)
 AC_ARG_WITH(universal-archs,
-    AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")]),
+    AS_HELP_STRING([--with-universal-archs=ARCH],
+                   [specify the kind of universal binary that should be created. this option is
+                    only valid when --enable-universalsdk is set; options are:
+                    ("universal2", "32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")
+                    see Mac/README.rst]),
 [
 	UNIVERSAL_ARCHS="$withval"
 ],
@@ -226,7 +233,9 @@
 
 AC_ARG_WITH(framework-name,
               AS_HELP_STRING([--with-framework-name=FRAMEWORK],
-                             [specify an alternate name of the framework built with --enable-framework]),
+                             [specify the name for the python framework on macOS
+                              only valid when --enable-framework is set. see Mac/README.rst
+                              (default is 'Python')]),
 [
     PYTHONFRAMEWORK=${withval}
     PYTHONFRAMEWORKDIR=${withval}.framework
@@ -238,7 +247,10 @@
 ])
 dnl quadrigraphs "@<:@" and "@:>@" produce "[" and "]" in the output
 AC_ARG_ENABLE(framework,
-              AS_HELP_STRING([--enable-framework@<:@=INSTALLDIR@:>@], [Build (MacOSX|Darwin) framework]),
+              AS_HELP_STRING([--enable-framework@<:@=INSTALLDIR@:>@],
+                             [create a Python.framework rather than a traditional Unix install.
+                              optional INSTALLDIR specifies the installation path. see Mac/README.rst
+                              (default is no)]),
 [
 	case $enableval in
 	yes)
@@ -357,7 +369,7 @@
 
 ##AC_ARG_WITH(dyld,
 ##            AS_HELP_STRING([--with-dyld],
-##                           [Use (OpenStep|Rhapsody) dynamic linker]))
+##                           [use (OpenStep|Rhapsody) dynamic linker]))
 ##
 # Set name for machine-dependent library files
 AC_ARG_VAR([MACHDEP], [name for machine-dependent library files])
@@ -653,8 +665,8 @@
 AC_SUBST(MAINCC)
 AC_MSG_CHECKING(for --with-cxx-main=<compiler>)
 AC_ARG_WITH(cxx_main,
-            AS_HELP_STRING([--with-cxx-main=<compiler>],
-                           [compile main() and link python executable with C++ compiler]),
+            AS_HELP_STRING([--with-cxx-main@<:@=COMPILER@:>@],
+                           [compile main() and link Python executable with C++ compiler specified in COMPILER (default is $CXX)]),
 [
 
 	case $withval in
@@ -934,7 +946,7 @@
 AC_EXEEXT
 AC_MSG_CHECKING(for --with-suffix)
 AC_ARG_WITH(suffix,
-            AS_HELP_STRING([--with-suffix=.exe], [set executable suffix]),
+            AS_HELP_STRING([--with-suffix=SUFFIX], [set executable suffix to SUFFIX (default is '.exe')]),
 [
 	case $withval in
 	no)	EXEEXT=;;
@@ -1012,21 +1024,12 @@
 # If CXX is set, and if it is needed to link a main function that was
 # compiled with CXX, LINKCC is CXX instead. Always using CXX is undesirable:
 # python might then depend on the C++ runtime
-# This is altered for AIX in order to build the export list before
-# linking.
 AC_SUBST(LINKCC)
 AC_MSG_CHECKING(LINKCC)
 if test -z "$LINKCC"
 then
 	LINKCC='$(PURIFY) $(MAINCC)'
 	case $ac_sys_system in
-	AIX*)
-	   exp_extra="\"\""
-	   if test $ac_sys_release -ge 5 -o \
-		   $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
-	       exp_extra="."
-	   fi
-	   LINKCC="\$(srcdir)/Modules/makexp_aix Modules/python.exp $exp_extra \$(LIBRARY); $LINKCC";;
 	QNX*)
 	   # qcc must be used because the other compilers do not
 	   # support -N.
@@ -1035,6 +1038,24 @@
 fi
 AC_MSG_RESULT($LINKCC)
 
+# EXPORTSYMS holds the list of exported symbols for AIX.
+# EXPORTSFROM holds the module name exporting symbols on AIX.
+EXPORTSYMS=
+EXPORTSFROM=
+AC_SUBST(EXPORTSYMS)
+AC_SUBST(EXPORTSFROM)
+AC_MSG_CHECKING(EXPORTSYMS)
+case $ac_sys_system in
+AIX*)
+	EXPORTSYMS="Modules/python.exp"
+	if test $ac_sys_release -ge 5 -o \
+		$ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
+	    EXPORTSFROM=. # the main executable
+	fi
+	;;
+esac
+AC_MSG_RESULT($EXPORTSYMS)
+
 # GNULD is set to "yes" if the GNU linker is used.  If this goes wrong
 # make sure we default having it set to "no": this is used by
 # distutils.unixccompiler to know if it should add --enable-new-dtags
@@ -1056,7 +1077,7 @@
 
 AC_MSG_CHECKING(for --enable-shared)
 AC_ARG_ENABLE(shared,
-              AS_HELP_STRING([--enable-shared], [disable/enable building shared python library]))
+              AS_HELP_STRING([--enable-shared], [enable building a shared Python library (default is no)]))
 
 if test -z "$enable_shared"
 then
@@ -1071,7 +1092,7 @@
 
 AC_MSG_CHECKING(for --enable-profiling)
 AC_ARG_ENABLE(profiling,
-              AS_HELP_STRING([--enable-profiling], [enable C-level code profiling]))
+              AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)]))
 if test "x$enable_profiling" = xyes; then
   ac_save_cc="$CC"
   CC="$CC -pg"
@@ -1222,7 +1243,7 @@
 # Check for --with-pydebug
 AC_MSG_CHECKING(for --with-pydebug)
 AC_ARG_WITH(pydebug,
-            AS_HELP_STRING([--with-pydebug], [build with Py_DEBUG defined]),
+            AS_HELP_STRING([--with-pydebug], [build with Py_DEBUG defined (default is no)]),
 [
 if test "$withval" != no
 then
@@ -1239,7 +1260,9 @@
 # --with-trace-refs
 AC_MSG_CHECKING(for --with-trace-refs)
 AC_ARG_WITH(trace-refs,
-  AS_HELP_STRING([--with-trace-refs],[enable tracing references for debugging purpose]),,
+  AS_HELP_STRING(
+    [--with-trace-refs],
+    [enable tracing references for debugging purpose (default is no)]),,
   with_trace_refs=no)
 AC_MSG_RESULT($with_trace_refs)
 
@@ -1253,7 +1276,7 @@
 assertions='false'
 AC_MSG_CHECKING(for --with-assertions)
 AC_ARG_WITH(assertions,
-            AS_HELP_STRING([--with-assertions],[build with C assertions enabled]),
+            AS_HELP_STRING([--with-assertions],[build with C assertions enabled (default is no)]),
 [
 if test "$withval" != no
 then
@@ -1274,7 +1297,9 @@
 AC_SUBST(DEF_MAKE_RULE)
 Py_OPT='false'
 AC_MSG_CHECKING(for --enable-optimizations)
-AC_ARG_ENABLE(optimizations, AS_HELP_STRING([--enable-optimizations], [Enable expensive, stable optimizations (PGO, etc).  Disabled by default.]),
+AC_ARG_ENABLE(optimizations, AS_HELP_STRING(
+                [--enable-optimizations],
+                [enable expensive, stable optimizations (PGO, etc.) (default is no)]),
 [
 if test "$enableval" != no
 then
@@ -1329,7 +1354,7 @@
 
 # Enable LTO flags
 AC_MSG_CHECKING(for --with-lto)
-AC_ARG_WITH(lto, AS_HELP_STRING([--with-lto], [Enable Link Time Optimization in any build. Disabled by default.]),
+AC_ARG_WITH(lto, AS_HELP_STRING([--with-lto], [enable Link-Time-Optimization in any build (default is no)]),
 [
 if test "$withval" != no
 then
@@ -1562,7 +1587,7 @@
 AC_SUBST(CFLAGS_NODIST)
 AC_SUBST(LDFLAGS_NODIST)
 
-# The -arch flags for universal builds on OSX
+# The -arch flags for universal builds on macOS
 UNIVERSAL_ARCH_FLAGS=
 AC_SUBST(UNIVERSAL_ARCH_FLAGS)
 
@@ -1793,6 +1818,26 @@
       CFLAGS_NODIST="$CFLAGS_NODIST -Werror=implicit-function-declaration"
     fi
 
+    AC_MSG_CHECKING(if we can use visibility in $CC)
+     ac_save_cc="$CC"
+     CC="$CC -fvisibility=hidden"
+     AC_CACHE_VAL(ac_cv_enable_visibility,
+       AC_COMPILE_IFELSE(
+         [
+	   AC_LANG_PROGRAM([[]], [[]])
+	 ],[
+           ac_cv_enable_visibility=yes
+	 ],[
+           ac_cv_enable_visibility=no
+	 ]))
+     CC="$ac_save_cc"
+    AC_MSG_RESULT($ac_cv_enable_visibility)
+
+    if test $ac_cv_enable_visibility = yes
+    then
+      CFLAGS_NODIST="$CFLAGS_NODIST -fvisibility=hidden"
+    fi
+
     # if using gcc on alpha, use -mieee to get (near) full IEEE 754
     # support.  Without this, treatment of subnormals doesn't follow
     # the standard.
@@ -1843,6 +1888,11 @@
                LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386"
                ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
                ;;
+            universal2)
+               UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64"
+               LIPO_32BIT_FLAGS=""
+               ARCH_RUN_32BIT="true"
+		;;
             intel)
                UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64"
                LIPO_32BIT_FLAGS="-extract i386"
@@ -1864,7 +1914,7 @@
                ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc"
                ;;
             *)
-               AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way])
+               AC_MSG_ERROR([proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way])
                ;;
             esac
 
@@ -1931,6 +1981,13 @@
         EXPORT_MACOSX_DEPLOYMENT_TARGET=''
         AC_MSG_RESULT($MACOSX_DEPLOYMENT_TARGET)
 
+        AC_MSG_CHECKING(if specified universal architectures work)
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[printf("%d", 42);]])],
+            [AC_MSG_RESULT(yes)],
+            [AC_MSG_RESULT(no)
+             AC_MSG_ERROR(check config.log and use the '--with-universal-archs' option)
+        ])
+
         # end of Darwin* tests
         ;;
     esac
@@ -1948,11 +2005,14 @@
     ;;
 esac
 
-# ICC needs -fp-model strict or floats behave badly
 case "$CC" in
 *icc*)
+    # ICC needs -fp-model strict or floats behave badly
     CFLAGS_NODIST="$CFLAGS_NODIST -fp-model strict"
     ;;
+*xlc*)
+    CFLAGS_NODIST="$CFLAGS_NODIST -qalias=noansi -qmaxmem=-1"
+    ;;
 esac
 
 if test "$assertions" = 'true'; then
@@ -2147,7 +2207,7 @@
 sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \
 libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
 linux/tipc.h linux/random.h spawn.h util.h alloca.h endian.h \
-sys/endian.h sys/sysmacros.h linux/memfd.h sys/memfd.h sys/mman.h)
+sys/endian.h sys/sysmacros.h linux/memfd.h linux/wait.h sys/memfd.h sys/mman.h)
 AC_HEADER_DIRENT
 AC_HEADER_MAJOR
 
@@ -2200,8 +2260,8 @@
 #endif
 ])
 
-# On Linux, can.h and can/raw.h require sys/socket.h
-AC_CHECK_HEADERS(linux/can.h linux/can/raw.h linux/can/bcm.h,,,[
+# On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h
+AC_CHECK_HEADERS(linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h,,,[
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif
@@ -2431,7 +2491,7 @@
     		MACOSX_DEFAULT_ARCH="ppc"
     		;;
     	*)
-    		AC_MSG_ERROR([Unexpected output of 'arch' on OSX])
+    		AC_MSG_ERROR([Unexpected output of 'arch' on macOS])
     		;;
     	esac
     else
@@ -2441,9 +2501,12 @@
     		;;
     	ppc)
     		MACOSX_DEFAULT_ARCH="ppc64"
+		;;
+    	arm64)
+    		MACOSX_DEFAULT_ARCH="arm64"
     		;;
     	*)
-    		AC_MSG_ERROR([Unexpected output of 'arch' on OSX])
+    		AC_MSG_ERROR([Unexpected output of 'arch' on macOS])
     		;;
     	esac
 
@@ -2844,7 +2907,17 @@
 		  AC_MSG_RESULT(yes)
 		],[
 		  AC_MSG_RESULT(no)
-		]);;
+		])
+dnl The AIX_BUILDDATE is obtained from the kernel fileset - bos.mp64
+# BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the platform_tag
+# of the AIX system used to build/package Python executable. This tag serves
+# as a baseline for bdist module packages
+               AC_MSG_CHECKING(for the system builddate)
+               AIX_BUILDDATE=$(lslpp -Lcq bos.mp64 | awk -F:  '{ print $NF }')
+               AC_DEFINE_UNQUOTED([AIX_BUILDDATE], [$AIX_BUILDDATE],
+                   [BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the PEP425 tag of the build system.])
+               AC_MSG_RESULT($AIX_BUILDDATE)
+               ;;
 	*) ;;
 esac
 
@@ -2883,7 +2956,7 @@
 dnl quadrigraphs "@<:@" and "@:>@" produce "[" and "]" in the output
 AC_ARG_WITH(hash_algorithm,
             AS_HELP_STRING([--with-hash-algorithm=@<:@fnv|siphash24@:>@],
-                           [select hash algorithm]),
+                           [select hash algorithm for use in Python/pyhash.c (default is SipHash24)]),
 [
 AC_MSG_RESULT($withval)
 case "$withval" in
@@ -2900,10 +2973,46 @@
 ],
 [AC_MSG_RESULT(default)])
 
+validate_tzpath() {
+    # Checks that each element of hte path is an absolute path
+    if test -z "$1"; then
+        # Empty string is allowed: it indicates no system TZPATH
+        return 0
+    fi
+
+    # Bad paths are those that don't start with /
+    dnl quadrigraphs "@<:@" and "@:>@" produce "[" and "]" in the output
+    if ( echo $1 | grep -qE '(^|:)(@<:@^/@:>@|$)' ); then
+        AC_MSG_ERROR([--with-tzpath must contain only absolute paths, not $1])
+        return 1;
+    fi
+}
+
+TZPATH="/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
+AC_MSG_CHECKING(for --with-tzpath)
+AC_ARG_WITH(tzpath,
+            AS_HELP_STRING([--with-tzpath=<list of absolute paths separated by pathsep>]
+                           [Select the default time zone search path for zoneinfo.TZPATH]),
+[
+case "$withval" in
+    yes)
+        AC_MSG_ERROR([--with-tzpath requires a value])
+        ;;
+    *)
+        validate_tzpath "$withval"
+        TZPATH="$withval"
+        AC_MSG_RESULT("$withval")
+        ;;
+esac
+],
+[validate_tzpath "$TZPATH"
+ AC_MSG_RESULT("$TZPATH")])
+AC_SUBST(TZPATH)
+
 AC_MSG_CHECKING(for --with-address-sanitizer)
 AC_ARG_WITH(address_sanitizer,
             AS_HELP_STRING([--with-address-sanitizer],
-                           [enable AddressSanitizer (asan)]),
+                           [enable AddressSanitizer memory error detector, 'asan' (default is no)]),
 [
 AC_MSG_RESULT($withval)
 BASECFLAGS="-fsanitize=address -fno-omit-frame-pointer $BASECFLAGS"
@@ -2916,7 +3025,7 @@
 AC_MSG_CHECKING(for --with-memory-sanitizer)
 AC_ARG_WITH(memory_sanitizer,
             AS_HELP_STRING([--with-memory-sanitizer],
-                           [enable MemorySanitizer (msan)]),
+                           [enable MemorySanitizer allocation error detector, 'msan' (default is no)]),
 [
 AC_MSG_RESULT($withval)
 BASECFLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer $BASECFLAGS"
@@ -2929,7 +3038,7 @@
 AC_MSG_CHECKING(for --with-undefined-behavior-sanitizer)
 AC_ARG_WITH(undefined_behavior_sanitizer,
             AS_HELP_STRING([--with-undefined-behavior-sanitizer],
-                           [enable UndefinedBehaviorSanitizer (ubsan)]),
+                           [enable UndefinedBehaviorSanitizer undefined behaviour detector, 'ubsan' (default is no)]),
 [
 AC_MSG_RESULT($withval)
 BASECFLAGS="-fsanitize=undefined $BASECFLAGS"
@@ -2943,7 +3052,7 @@
 
 AC_MSG_CHECKING(for --with-libs)
 AC_ARG_WITH(libs,
-            AS_HELP_STRING([--with-libs='lib1 ...'], [link against additional libs]),
+            AS_HELP_STRING([--with-libs='lib1 ...'], [link against additional libs (default is no)]),
 [
 AC_MSG_RESULT($withval)
 LIBS="$withval $LIBS"
@@ -2955,7 +3064,7 @@
 # Check for use of the system expat library
 AC_MSG_CHECKING(for --with-system-expat)
 AC_ARG_WITH(system_expat,
-            AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library]),
+            AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library, see Doc/library/pyexpat.rst (default is no)]),
             [],
             [with_system_expat="no"])
 
@@ -2964,7 +3073,7 @@
 # Check for use of the system libffi library
 AC_MSG_CHECKING(for --with-system-ffi)
 AC_ARG_WITH(system_ffi,
-            AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]),,,)
+            AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library, see Doc/library/ctypes.rst (default is system-dependent)]),,,)
 
 if test "$ac_sys_system" = "Darwin"
 then
@@ -2998,7 +3107,7 @@
 # Check for use of the system libmpdec library
 AC_MSG_CHECKING(for --with-system-libmpdec)
 AC_ARG_WITH(system_libmpdec,
-            AS_HELP_STRING([--with-system-libmpdec], [build _decimal module using an installed libmpdec library]),
+            AS_HELP_STRING([--with-system-libmpdec], [build _decimal module using an installed libmpdec library, see Doc/library/decimal.rst (default is no)]),
             [],
             [with_system_libmpdec="no"])
 
@@ -3022,7 +3131,8 @@
 # Check for support for loadable sqlite extensions
 AC_MSG_CHECKING(for --enable-loadable-sqlite-extensions)
 AC_ARG_ENABLE(loadable-sqlite-extensions,
-              AS_HELP_STRING([--enable-loadable-sqlite-extensions], [support loadable extensions in _sqlite module]),
+              AS_HELP_STRING([--enable-loadable-sqlite-extensions],
+                             [support loadable extensions in _sqlite module, see Doc/library/sqlite3.rst (default is no)]),
               [],
               [enable_loadable_sqlite_extensions="no"])
 
@@ -3059,7 +3169,7 @@
 # Check for --with-dbmliborder
 AC_MSG_CHECKING(for --with-dbmliborder)
 AC_ARG_WITH(dbmliborder,
-            AS_HELP_STRING([--with-dbmliborder=db1:db2:...], [order to check db backends for dbm. Valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
+            AS_HELP_STRING([--with-dbmliborder=db1:db2:...], [override order to check db backends for dbm; a valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
 [
 if test x$with_dbmliborder = xyes
 then
@@ -3231,8 +3341,8 @@
 AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified])
 AC_MSG_CHECKING([if --enable-ipv6 is specified])
 AC_ARG_ENABLE(ipv6,
-[  --enable-ipv6           Enable ipv6 (with ipv4) support
-  --disable-ipv6          Disable ipv6 support],
+    AS_HELP_STRING([--enable-ipv6],
+               [enable ipv6 (with ipv4) support, see Doc/library/socket.rst (default is yes if supported)]),
 [ case "$enableval" in
   no)
        AC_MSG_RESULT(no)
@@ -3400,10 +3510,20 @@
   AC_MSG_RESULT(no)
 ])
 
+AC_MSG_CHECKING(for CAN_RAW_JOIN_FILTERS)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <linux/can/raw.h>]],
+[[int can_raw_join_filters = CAN_RAW_JOIN_FILTERS;]])],[
+  AC_DEFINE(HAVE_LINUX_CAN_RAW_JOIN_FILTERS, 1, [Define if compiling using Linux 4.1 or later.])
+  AC_MSG_RESULT(yes)
+],[
+  AC_MSG_RESULT(no)
+])
+
 # Check for --with-doc-strings
 AC_MSG_CHECKING(for --with-doc-strings)
 AC_ARG_WITH(doc-strings,
-            AS_HELP_STRING([--with(out)-doc-strings], [disable/enable documentation strings]))
+            AS_HELP_STRING([--with-doc-strings], [enable documentation strings (default is yes)]))
 
 if test -z "$with_doc_strings"
 then with_doc_strings="yes"
@@ -3418,7 +3538,7 @@
 # Check for Python-specific malloc support
 AC_MSG_CHECKING(for --with-pymalloc)
 AC_ARG_WITH(pymalloc,
-            AS_HELP_STRING([--with(out)-pymalloc], [disable/enable specialized mallocs]))
+            AS_HELP_STRING([--with-pymalloc], [enable specialized mallocs (default is yes)]))
 
 if test -z "$with_pymalloc"
 then
@@ -3434,8 +3554,8 @@
 # Check for --with-c-locale-coercion
 AC_MSG_CHECKING(for --with-c-locale-coercion)
 AC_ARG_WITH(c-locale-coercion,
-            AS_HELP_STRING([--with(out)-c-locale-coercion],
-              [disable/enable C locale coercion to a UTF-8 based locale]))
+            AS_HELP_STRING([--with-c-locale-coercion],
+              [enable C locale coercion to a UTF-8 based locale (default is yes)]))
 
 if test -z "$with_c_locale_coercion"
 then
@@ -3451,7 +3571,7 @@
 # Check for Valgrind support
 AC_MSG_CHECKING([for --with-valgrind])
 AC_ARG_WITH([valgrind],
-  AS_HELP_STRING([--with-valgrind], [Enable Valgrind support]),,
+  AS_HELP_STRING([--with-valgrind], [enable Valgrind support (default is no)]),,
   with_valgrind=no)
 AC_MSG_RESULT([$with_valgrind])
 if test "$with_valgrind" != no; then
@@ -3465,7 +3585,7 @@
 # Check for DTrace support
 AC_MSG_CHECKING(for --with-dtrace)
 AC_ARG_WITH(dtrace,
-  AS_HELP_STRING([--with(out)-dtrace],[disable/enable DTrace support]),,
+  AS_HELP_STRING([--with-dtrace],[enable DTrace support (default is no)]),,
   with_dtrace=no)
 AC_MSG_RESULT($with_dtrace)
 
@@ -3474,7 +3594,6 @@
 AC_SUBST(DTRACE_HEADERS)
 AC_SUBST(DTRACE_OBJS)
 DTRACE=
-DFLAGS=
 DTRACE_HEADERS=
 DTRACE_OBJS=
 
@@ -3495,7 +3614,7 @@
         [ac_cv_dtrace_link], [dnl
             ac_cv_dtrace_link=no
             echo 'BEGIN{}' > conftest.d
-            "$DTRACE" -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
+            "$DTRACE" $DFLAGS -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
                 ac_cv_dtrace_link=yes
       ])
     if test "$ac_cv_dtrace_link" = "yes"; then
@@ -3572,7 +3691,7 @@
  memrchr mbrtowc mkdirat mkfifo \
  madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \
  posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \
- pthread_condattr_setclock pthread_init pthread_kill putenv pwrite pwritev pwritev2 \
+ pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \
  readlink readlinkat readv realpath renameat \
  sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \
  setgid sethostname \
@@ -3582,7 +3701,7 @@
  sigaction sigaltstack sigfillset siginterrupt sigpending sigrelse \
  sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy strsignal symlinkat sync \
  sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
- truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
+ truncate uname unlinkat utimensat utimes waitid waitpid wait3 wait4 \
  wcscoll wcsftime wcsxfrm wmemcmp writev _getpty rtpSpawn)
 
 # Force lchmod off for Linux. Linux disallows changing the mode of symbolic
@@ -3666,6 +3785,12 @@
    AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)
 ])
+AC_MSG_CHECKING(for _dyld_shared_cache_contains_path)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mach-o/dyld.h>]], [[void *x=_dyld_shared_cache_contains_path]])],
+  [AC_DEFINE(HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH, 1, Define if you have the '_dyld_shared_cache_contains_path' function.)
+   AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)
+])
 
 AC_MSG_CHECKING(for memfd_create)
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
@@ -3889,15 +4014,6 @@
     [AC_DEFINE(SETPGRP_HAVE_ARG, 1, [Define if setpgrp() must be called as setpgrp(0, 0).])],
     [])
 )
-AC_CHECK_FUNCS(gettimeofday,
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/time.h>]],
-  				     [[gettimeofday((struct timeval*)0,(struct timezone*)0);]])],
-    [],
-    [AC_DEFINE(GETTIMEOFDAY_NO_TZ, 1,
-      [Define if gettimeofday() does not have second (timezone) argument
-       This is the case on Motorola V4 (R40V4.2)])
-    ])
-)
 
 # We search for both crypt and crypt_r as one or the other may be defined
 # This gets us our -lcrypt in LIBS when required on the target platform.
@@ -4321,7 +4437,7 @@
 esac
 AC_MSG_CHECKING(for --with-libm=STRING)
 AC_ARG_WITH(libm,
-            AS_HELP_STRING([--with-libm=STRING], [math library]),
+            AS_HELP_STRING([--with-libm=STRING], [override libm math library to STRING (default is system-dependent)]),
 [
 if test "$withval" = no
 then LIBM=
@@ -4337,7 +4453,7 @@
 AC_SUBST(LIBC)
 AC_MSG_CHECKING(for --with-libc=STRING)
 AC_ARG_WITH(libc,
-            AS_HELP_STRING([--with-libc=STRING], [C library]),
+            AS_HELP_STRING([--with-libc=STRING], [override libc C library to STRING (default is system-dependent)]),
 [
 if test "$withval" = no
 then LIBC=
@@ -4555,7 +4671,7 @@
 # determine what size digit to use for Python's longs
 AC_MSG_CHECKING([digit size for Python's longs])
 AC_ARG_ENABLE(big-digits,
-AS_HELP_STRING([--enable-big-digits@<:@=BITS@:>@],[use big digits for Python longs [[BITS=30]]]),
+AS_HELP_STRING([--enable-big-digits@<:@=15|30@:>@],[use big digits (30 or 15 bits) for Python longs (default is system-dependent)]]),
 [case $enable_big_digits in
 yes)
   enable_big_digits=30 ;;
@@ -4686,12 +4802,41 @@
   LIBPYTHON=''
 fi
 
+
+AC_SUBST(BINLIBDEST)
+BINLIBDEST='$(LIBDIR)/python$(VERSION)'
+
+
+# Check for --with-platlibdir
+# /usr/$LIDIRNAME/python$VERSION
+AC_SUBST(PLATLIBDIR)
+PLATLIBDIR="lib"
+AC_MSG_CHECKING(for --with-platlibdir)
+AC_ARG_WITH(platlibdir,
+            AS_HELP_STRING([--with-platlibdir=DIRNAME],
+            [Python library directory name (default is "lib")]),
+[
+# ignore 3 options:
+#   --with-platlibdir
+#   --with-platlibdir=
+#   --without-platlibdir
+if test -n "$withval" -a "$withval" != yes -a "$withval" != no
+then
+  AC_MSG_RESULT(yes)
+  PLATLIBDIR="$withval"
+  BINLIBDEST='${exec_prefix}/${PLATLIBDIR}/python$(VERSION)'
+else
+  AC_MSG_RESULT(no)
+fi],
+[AC_MSG_RESULT(no)])
+
+
 dnl define LIBPL after ABIFLAGS and LDVERSION is defined.
 AC_SUBST(PY_ENABLE_SHARED)
 if test x$PLATFORM_TRIPLET = x; then
-  LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
+  LIBPL='$(prefix)'"/${PLATLIBDIR}/python${VERSION}/config-${LDVERSION}"
 else
-  LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
+  LIBPL='$(prefix)'"/${PLATLIBDIR}/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
 fi
 AC_SUBST(LIBPL)
 
@@ -5267,8 +5412,8 @@
 # Check for --with-computed-gotos
 AC_MSG_CHECKING(for --with-computed-gotos)
 AC_ARG_WITH(computed-gotos,
-            AS_HELP_STRING([--with(out)-computed-gotos],
-                           [Use computed gotos in evaluation loop (enabled by default on supported compilers)]),
+            AS_HELP_STRING([--with-computed-gotos],
+                           [enable computed gotos in evaluation loop (enabled by default on supported compilers)]),
 [
 if test "$withval" = yes
 then
@@ -5326,7 +5471,7 @@
 done
 
 AC_SUBST(SRCDIRS)
-SRCDIRS="Parser Objects Python Modules Modules/_io Programs"
+SRCDIRS="Parser Parser/pegen Objects Python Modules Modules/_io Programs"
 AC_MSG_CHECKING(for build directories)
 for dir in $SRCDIRS; do
     if test ! -d $dir; then
@@ -5464,8 +5609,8 @@
 # ensurepip option
 AC_MSG_CHECKING(for ensurepip)
 AC_ARG_WITH(ensurepip,
-    [AS_HELP_STRING([--with(out)-ensurepip=@<:@=upgrade@:>@],
-        ["install" or "upgrade" using bundled pip])],
+    [AS_HELP_STRING([--with-ensurepip@<:@=install|upgrade|no@:>@],
+        ["install" or "upgrade" using bundled pip (default is upgrade)])],
     [],
     [with_ensurepip=upgrade])
 AS_CASE($with_ensurepip,
@@ -5621,11 +5766,11 @@
 AC_MSG_CHECKING(for --with-ssl-default-suites)
 AC_ARG_WITH(ssl-default-suites,
             AS_HELP_STRING([--with-ssl-default-suites=@<:@python|openssl|STRING@:>@],
-                           [Override default cipher suites string,
+                           [override default cipher suites string,
                             python: use Python's preferred selection (default),
                             openssl: leave OpenSSL's defaults untouched,
                             STRING: use a custom string,
-                            PROTOCOL_SSLv2 ignores the setting]),
+                            PROTOCOL_SSLv2 ignores the setting, see Doc/library/ssl.rst]),
 [
 AC_MSG_RESULT($withval)
 case "$withval" in
@@ -5646,6 +5791,31 @@
 AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 1)
 ])
 
+# builtin hash modules
+default_hashlib_hashes="md5,sha1,sha256,sha512,sha3,blake2"
+AC_DEFINE([PY_BUILTIN_HASHLIB_HASHES], [], [enabled builtin hash modules]
+)
+AC_MSG_CHECKING(for --with-builtin-hashlib-hashes)
+AC_ARG_WITH(builtin-hashlib-hashes,
+            AS_HELP_STRING([--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2],
+                           [builtin hash modules,
+                            md5, sha1, sha256, sha512, sha3 (with shake), blake2]),
+[
+case "$withval" in
+    yes)
+        withval=$default_hashlib_hashes
+        ;;
+    no)
+        withval=""
+        ;;
+esac
+AC_MSG_RESULT($withval)
+AC_DEFINE_UNQUOTED(PY_BUILTIN_HASHLIB_HASHES, "$withval")
+],
+[
+AC_MSG_RESULT($default_hashlib_hashes);
+AC_DEFINE_UNQUOTED(PY_BUILTIN_HASHLIB_HASHES, "$default_hashlib_hashes")
+])
 
 # generate output files
 AC_CONFIG_FILES(Makefile.pre Misc/python.pc Misc/python-embed.pc Misc/python-config.sh)
diff --git a/kokoro/0001-Enable-arm64-builds.patch b/kokoro/0001-Enable-arm64-builds.patch
new file mode 100644
index 0000000..5d7f81b
--- /dev/null
+++ b/kokoro/0001-Enable-arm64-builds.patch
@@ -0,0 +1,34 @@
+From 422cda3fba39e9a99397fbd8e10ee1f7e85ef241 Mon Sep 17 00:00:00 2001
+From: Haibo Huang <hhb@google.com>
+Date: Thu, 4 Feb 2021 16:29:09 -0800
+Subject: [PATCH] Enable arm64 builds
+
+Kokoro build server has 10.15 and XCode 12.2. It is able to build arm64.
+
+Change-Id: I8dcf6a909b9075c4f9d40516a0ab28f421cdcb8d
+---
+ Lib/_osx_support.py | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py
+index 37975fe..47d88af 100644
+--- a/Lib/_osx_support.py
++++ b/Lib/_osx_support.py
+@@ -187,13 +187,7 @@ def _supports_universal_builds():
+ 
+ def _supports_arm64_builds():
+     """Returns True if arm64 builds are supported on this system"""
+-    # There are two sets of systems supporting macOS/arm64 builds:
+-    # 1. macOS 11 and later, unconditionally
+-    # 2. macOS 10.15 with Xcode 12.2 or later
+-    # For now the second category is ignored.
+-    osx_version = _get_system_version_tuple()
+-    return osx_version >= (11, 0) if osx_version else False
+-
++    return True
+ 
+ def _find_appropriate_compiler(_config_vars):
+     """Find appropriate C compiler for extension module builds"""
+-- 
+2.30.0.365.g02bc693789-goog
+
diff --git a/kokoro/build.py b/kokoro/build.py
index 23b16ca..263ab75 100755
--- a/kokoro/build.py
+++ b/kokoro/build.py
@@ -5,6 +5,7 @@
 import os
 import subprocess
 import sys
+import tarfile
 
 @enum.unique
 class Host(enum.Enum):
@@ -23,14 +24,13 @@
         raise RuntimeError('Unsupported host: {}'.format(sys.platform))
 
 
-def build_autoconf_target(host, python_src, out_dir):
+def build_autoconf_target(host, python_src, build_dir, install_dir):
     print('## Building Python ##')
-    print('## Out Dir     : {}'.format(out_dir))
+    print('## Build Dir   : {}'.format(build_dir))
+    print('## Install Dir : {}'.format(install_dir))
     print('## Python Src  : {}'.format(python_src))
     sys.stdout.flush()
 
-    build_dir = os.path.join(out_dir, 'build')
-    install_dir = os.path.join(out_dir, 'install')
     os.makedirs(build_dir, exist_ok=True)
     os.makedirs(install_dir, exist_ok=True)
 
@@ -41,10 +41,22 @@
         '--prefix={}'.format(install_dir),
         '--enable-shared',
     ]
+    env = dict(os.environ)
     if host == Host.Darwin:
+        sdkroot = env.get('SDKROOT')
+        if sdkroot:
+            print("Using SDK {}".format(sdkroot))
+            config_cmd.append('--enable-universalsdk={}'.format(sdkroot))
+        else:
+            config_cmd.append('--enable-universalsdk')
+        config_cmd.append('--with-universal-archs=universal2')
+
         MAC_MIN_VERSION = '10.9'
         cflags.append('-mmacosx-version-min={}'.format(MAC_MIN_VERSION))
         cflags.append('-DMACOSX_DEPLOYMENT_TARGET={}'.format(MAC_MIN_VERSION))
+        cflags.extend(['-arch', 'arm64'])
+        cflags.extend(['-arch', 'x86_64'])
+        env['MACOSX_DEPLOYMENT_TARGET'] = MAC_MIN_VERSION
         ldflags.append("-Wl,-rpath,'@loader_path/../lib'")
 
         # Disable functions to support old macOS. See https://bugs.python.org/issue31359
@@ -64,11 +76,8 @@
     elif host == Host.Linux:
         ldflags.append("-Wl,-rpath,'$$ORIGIN/../lib'")
 
-    env = dict(os.environ)
-    env.update({
-        'CC': ' '.join(['cc'] + cflags + ldflags),
-        'CXX': ' '.join(['c++'] + cflags + ldflags),
-    })
+    config_cmd.append('CFLAGS={}'.format(' '.join(cflags)))
+    config_cmd.append('LDFLAGS={}'.format(' '.join(cflags + ldflags)))
 
     subprocess.check_call(config_cmd, cwd=build_dir, env=env)
 
@@ -77,7 +86,7 @@
         # Linker will embed this path to all binaries linking this library.
         # Since configure does not give us a chance to set -install_name, we have
         # to edit the library afterwards.
-        libpython = 'libpython3.8.dylib'
+        libpython = 'libpython3.9.dylib'
         subprocess.check_call(['make',
                                '-j{}'.format(multiprocessing.cpu_count()),
                                libpython],
@@ -89,7 +98,7 @@
                            '-j{}'.format(multiprocessing.cpu_count()),
                            'install'],
                           cwd=build_dir)
-    return install_dir
+    return (build_dir, install_dir)
 
 
 def package_target(host, install_dir, dest_dir, build_id):
@@ -129,6 +138,14 @@
     subprocess.check_call(tar_cmd, cwd=install_dir)
 
 
+def package_logs(out_dir, dest_dir):
+    os.makedirs(dest_dir, exist_ok=True)
+    print('## Packaging Logs ##')
+    sys.stdout.flush()
+    with tarfile.open(os.path.join(dest_dir, "logs.tar.bz2"), "w:bz2") as tar:
+        tar.add(os.path.join(out_dir, 'config.log'), arcname='config.log')
+
+
 def main(argv):
     python_src = argv[1]
     out_dir = argv[2]
@@ -136,8 +153,16 @@
     build_id = argv[4]
     host = get_default_host()
 
-    install_dir = build_autoconf_target(host, python_src, out_dir)
-    package_target(host, install_dir, dest_dir, build_id)
+    build_dir = os.path.join(out_dir, 'build')
+    install_dir = os.path.join(out_dir, 'install')
+
+    try:
+        build_autoconf_target(host, python_src, build_dir, install_dir)
+        package_target(host, install_dir, dest_dir, build_id)
+    except:
+        # Keep logs before exit.
+        package_logs(build_dir, dest_dir)
+        raise
 
 
 if __name__ == '__main__':
diff --git a/kokoro/kokoro_build.sh b/kokoro/kokoro_build.sh
index 5173d01..38ff116 100755
--- a/kokoro/kokoro_build.sh
+++ b/kokoro/kokoro_build.sh
@@ -7,7 +7,13 @@
 OUT="${KOKORO_ARTIFACTS_DIR}/out"
 PYTHON_SRC=${KOKORO_ARTIFACTS_DIR}/git/cpython3
 
-BASEDIR=$(dirname "$0")
+BASEDIR="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+if [ "$(uname)" == "Darwin" ]; then
+    # http://g3doc/devtools/kokoro/g3doc/userdocs/macos/selecting_xcode
+    sudo xcode-select -s /Applications/Xcode_12.2.app/Contents/Developer
+    export SDKROOT=/Applications/Xcode_12.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
+    (cd "${PYTHON_SRC}"; git apply "${BASEDIR}/0001-Enable-arm64-builds.patch")
+fi
 
 python3 --version
 python3 ${BASEDIR}/build.py "${PYTHON_SRC}" "${OUT}" "${DEST}" "${KOKORO_BUILD_ID}"
diff --git a/m4/ax_check_openssl.m4 b/m4/ax_check_openssl.m4
index 28e48cb..2846fd1 100644
--- a/m4/ax_check_openssl.m4
+++ b/m4/ax_check_openssl.m4
@@ -39,7 +39,7 @@
     found=false
     AC_ARG_WITH([openssl],
         [AS_HELP_STRING([--with-openssl=DIR],
-            [root of the OpenSSL directory])],
+            [override root of the OpenSSL directory to DIR])],
         [
             case "$withval" in
             "" | y | ye | yes | n | no)
diff --git a/netlify.toml b/netlify.toml
new file mode 100644
index 0000000..387c8f9
--- /dev/null
+++ b/netlify.toml
@@ -0,0 +1,4 @@
+[build]
+    base = "Doc/"
+    command = "make html"
+    publish = "Doc/build/html"
\ No newline at end of file
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 4263a71..f39858d 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -8,6 +8,10 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
+/* BUILD_GNU_TYPE + AIX_BUILDDATE are used to construct the PEP425 tag of the
+   build system. */
+#undef AIX_BUILDDATE
+
 /* Define for AIX if your compiler is a genuine IBM xlC/xlC_r and you want
    support for AIX C++ shared extension modules. */
 #undef AIX_GENUINE_CPLUSPLUS
@@ -44,10 +48,6 @@
 /* Define if getpgrp() must be called as getpgrp(0). */
 #undef GETPGRP_HAVE_ARG
 
-/* Define if gettimeofday() does not have second (timezone) argument This is
-   the case on Motorola V4 (R40V4.2) */
-#undef GETTIMEOFDAY_NO_TZ
-
 /* Define to 1 if you have the `accept4' function. */
 #undef HAVE_ACCEPT4
 
@@ -513,9 +513,6 @@
 /* Define to 1 if you have the `getspnam' function. */
 #undef HAVE_GETSPNAM
 
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
 /* Define to 1 if you have the `getwd' function. */
 #undef HAVE_GETWD
 
@@ -625,12 +622,18 @@
 /* Define to 1 if you have the <linux/can.h> header file. */
 #undef HAVE_LINUX_CAN_H
 
+/* Define to 1 if you have the <linux/can/j1939.h> header file. */
+#undef HAVE_LINUX_CAN_J1939_H
+
 /* Define if compiling using Linux 3.6 or later. */
 #undef HAVE_LINUX_CAN_RAW_FD_FRAMES
 
 /* Define to 1 if you have the <linux/can/raw.h> header file. */
 #undef HAVE_LINUX_CAN_RAW_H
 
+/* Define if compiling using Linux 4.1 or later. */
+#undef HAVE_LINUX_CAN_RAW_JOIN_FILTERS
+
 /* Define to 1 if you have the <linux/memfd.h> header file. */
 #undef HAVE_LINUX_MEMFD_H
 
@@ -649,6 +652,9 @@
 /* Define to 1 if you have the <linux/vm_sockets.h> header file. */
 #undef HAVE_LINUX_VM_SOCKETS_H
 
+/* Define to 1 if you have the <linux/wait.h> header file. */
+#undef HAVE_LINUX_WAIT_H
+
 /* Define to 1 if you have the `lockf' function. */
 #undef HAVE_LOCKF
 
@@ -772,6 +778,9 @@
 /* Define if you have the 'prlimit' functions. */
 #undef HAVE_PRLIMIT
 
+/* Define if you have the '_dyld_shared_cache_contains_path' function. */
+#undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
+
 /* Define to 1 if you have the <process.h> header file. */
 #undef HAVE_PROCESS_H
 
@@ -802,9 +811,6 @@
 /* Define to 1 if you have the <pty.h> header file. */
 #undef HAVE_PTY_H
 
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
 /* Define to 1 if you have the `pwrite' function. */
 #undef HAVE_PWRITE
 
@@ -1263,9 +1269,6 @@
 /* Define to 1 if you have the `unlinkat' function. */
 #undef HAVE_UNLINKAT
 
-/* Define to 1 if you have the `unsetenv' function. */
-#undef HAVE_UNSETENV
-
 /* Define if you have a useable wchar_t type defined in wchar.h; useable means
    wchar_t must be an unsigned type with at least 16 bits. (see
    Include/unicodeobject.h). */
@@ -1382,6 +1385,9 @@
 /* Define as the preferred size in bits of long digits */
 #undef PYLONG_BITS_IN_DIGIT
 
+/* enabled builtin hash modules */
+#undef PY_BUILTIN_HASHLIB_HASHES
+
 /* Define if you want to coerce the C locale to a UTF-8 based locale */
 #undef PY_COERCE_C_LOCALE
 
diff --git a/setup.py b/setup.py
index 6340669..bd5f736 100644
--- a/setup.py
+++ b/setup.py
@@ -9,6 +9,26 @@
 import sys
 import sysconfig
 from glob import glob, escape
+import _osx_support
+
+
+try:
+    import subprocess
+    del subprocess
+    SUBPROCESS_BOOTSTRAP = False
+except ImportError:
+    # Bootstrap Python: distutils.spawn uses subprocess to build C extensions,
+    # subprocess requires C extensions built by setup.py like _posixsubprocess.
+    #
+    # Use _bootsubprocess which only uses the os module.
+    #
+    # It is dropped from sys.modules as soon as all C extension modules
+    # are built.
+    import _bootsubprocess
+    sys.modules['subprocess'] = _bootsubprocess
+    del _bootsubprocess
+    SUBPROCESS_BOOTSTRAP = True
+
 
 from distutils import log
 from distutils.command.build_ext import build_ext
@@ -76,6 +96,11 @@
 """
 
 
+def run_command(cmd):
+    status = os.system(cmd)
+    return os.waitstatus_to_exitcode(status)
+
+
 # Set common compiler and linker flags derived from the Makefile,
 # reserved for building the interpreter and the stdlib modules.
 # See bpo-21121 and bpo-35257
@@ -126,7 +151,9 @@
                 break
     return dirs
 
+
 MACOS_SDK_ROOT = None
+MACOS_SDK_SPECIFIED = None
 
 def macosx_sdk_root():
     """Return the directory of the current macOS SDK.
@@ -138,8 +165,9 @@
     (The SDK may be supplied via Xcode or via the Command Line Tools).
     The SDK paths used by Apple-supplied tool chains depend on the
     setting of various variables; see the xcrun man page for more info.
+    Also sets MACOS_SDK_SPECIFIED for use by macosx_sdk_specified().
     """
-    global MACOS_SDK_ROOT
+    global MACOS_SDK_ROOT, MACOS_SDK_SPECIFIED
 
     # If already called, return cached result.
     if MACOS_SDK_ROOT:
@@ -149,36 +177,37 @@
     m = re.search(r'-isysroot\s*(\S+)', cflags)
     if m is not None:
         MACOS_SDK_ROOT = m.group(1)
+        MACOS_SDK_SPECIFIED = MACOS_SDK_ROOT != '/'
     else:
-        MACOS_SDK_ROOT = '/'
-        cc = sysconfig.get_config_var('CC')
-        tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid()
-        try:
-            os.unlink(tmpfile)
-        except:
-            pass
-        ret = os.system('%s -E -v - </dev/null 2>%s 1>/dev/null' % (cc, tmpfile))
-        in_incdirs = False
-        try:
-            if ret >> 8 == 0:
-                with open(tmpfile) as fp:
-                    for line in fp.readlines():
-                        if line.startswith("#include <...>"):
-                            in_incdirs = True
-                        elif line.startswith("End of search list"):
-                            in_incdirs = False
-                        elif in_incdirs:
-                            line = line.strip()
-                            if line == '/usr/include':
-                                MACOS_SDK_ROOT = '/'
-                            elif line.endswith(".sdk/usr/include"):
-                                MACOS_SDK_ROOT = line[:-12]
-        finally:
-            os.unlink(tmpfile)
+        MACOS_SDK_ROOT = _osx_support._default_sysroot(
+            sysconfig.get_config_var('CC'))
+        MACOS_SDK_SPECIFIED = False
 
     return MACOS_SDK_ROOT
 
 
+def macosx_sdk_specified():
+    """Returns true if an SDK was explicitly configured.
+
+    True if an SDK was selected at configure time, either by specifying
+    --enable-universalsdk=(something other than no or /) or by adding a
+    -isysroot option to CFLAGS.  In some cases, like when making
+    decisions about macOS Tk framework paths, we need to be able to
+    know whether the user explicitly asked to build with an SDK versus
+    the implicit use of an SDK when header files are no longer
+    installed on a running system by the Command Line Tools.
+    """
+    global MACOS_SDK_SPECIFIED
+
+    # If already called, return cached result.
+    if MACOS_SDK_SPECIFIED:
+        return MACOS_SDK_SPECIFIED
+
+    # Find the sdk root and set MACOS_SDK_SPECIFIED
+    macosx_sdk_root()
+    return MACOS_SDK_SPECIFIED
+
+
 def is_macosx_sdk_path(path):
     """
     Returns True if 'path' can be located in an OSX SDK
@@ -188,6 +217,13 @@
                 or path.startswith('/Library/') )
 
 
+def grep_headers_for(function, headers):
+    for header in headers:
+        with open(header, 'r', errors='surrogateescape') as f:
+            if function in f.read():
+                return True
+    return False
+
 def find_file(filename, std_dirs, paths):
     """Searches for the directory where a given file is located,
     and returns a possibly-empty list of additional directories, or None
@@ -280,6 +316,17 @@
     else:
         assert False, "Internal error: Path not found in std_dirs or paths"
 
+def validate_tzpath():
+    base_tzpath = sysconfig.get_config_var('TZPATH')
+    if not base_tzpath:
+        return
+
+    tzpaths = base_tzpath.split(os.pathsep)
+    bad_paths = [tzpath for tzpath in tzpaths if not os.path.isabs(tzpath)]
+    if bad_paths:
+        raise ValueError('TZPATH must contain only absolute paths, '
+                         + f'found:\n{tzpaths!r}\nwith invalid paths:\n'
+                         + f'{bad_paths!r}')
 
 def find_module_file(module, dirlist):
     """Find a module in a set of possible folders. If it is not found
@@ -303,22 +350,21 @@
         self.failed = []
         self.failed_on_import = []
         self.missing = []
+        self.disabled_configure = []
         if '-j' in os.environ.get('MAKEFLAGS', ''):
             self.parallel = True
 
     def add(self, ext):
         self.extensions.append(ext)
 
-    def build_extensions(self):
+    def set_srcdir(self):
         self.srcdir = sysconfig.get_config_var('srcdir')
         if not self.srcdir:
             # Maybe running on Windows but not using CYGWIN?
             raise ValueError("No source directory; cannot proceed.")
         self.srcdir = os.path.abspath(self.srcdir)
 
-        # Detect which modules should be compiled
-        self.detect_modules()
-
+    def remove_disabled(self):
         # Remove modules that are present on the disabled list
         extensions = [ext for ext in self.extensions
                       if ext.name not in DISABLED_MODULE_LIST]
@@ -329,6 +375,7 @@
             extensions.append(ctypes)
         self.extensions = extensions
 
+    def update_sources_depends(self):
         # Fix up the autodetected modules, prefixing all the source files
         # with Modules/.
         moddirlist = [os.path.join(self.srcdir, 'Modules')]
@@ -341,14 +388,6 @@
         headers = [sysconfig.get_config_h_filename()]
         headers += glob(os.path.join(escape(sysconfig.get_path('include')), "*.h"))
 
-        # The sysconfig variables built by makesetup that list the already
-        # built modules and the disabled modules as configured by the Setup
-        # files.
-        sysconf_built = sysconfig.get_config_var('MODBUILT_NAMES').split()
-        sysconf_dis = sysconfig.get_config_var('MODDISABLED_NAMES').split()
-
-        mods_built = []
-        mods_disabled = []
         for ext in self.extensions:
             ext.sources = [ find_module_file(filename, moddirlist)
                             for filename in ext.sources ]
@@ -360,6 +399,16 @@
             # re-compile extensions if a header file has been changed
             ext.depends.extend(headers)
 
+    def remove_configured_extensions(self):
+        # The sysconfig variables built by makesetup that list the already
+        # built modules and the disabled modules as configured by the Setup
+        # files.
+        sysconf_built = sysconfig.get_config_var('MODBUILT_NAMES').split()
+        sysconf_dis = sysconfig.get_config_var('MODDISABLED_NAMES').split()
+
+        mods_built = []
+        mods_disabled = []
+        for ext in self.extensions:
             # If a module has already been built or has been disabled in the
             # Setup files, don't build it here.
             if ext.name in sysconf_built:
@@ -377,6 +426,9 @@
                 if os.path.exists(fullpath):
                     os.unlink(fullpath)
 
+        return (mods_built, mods_disabled)
+
+    def set_compiler_executables(self):
         # When you run "make CC=altcc" or something similar, you really want
         # those environment variables passed into the setup.py phase.  Here's
         # a small set of useful ones.
@@ -389,11 +441,31 @@
             args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
         self.compiler.set_executables(**args)
 
+    def build_extensions(self):
+        self.set_srcdir()
+
+        # Detect which modules should be compiled
+        self.detect_modules()
+
+        self.remove_disabled()
+
+        self.update_sources_depends()
+        mods_built, mods_disabled = self.remove_configured_extensions()
+        self.set_compiler_executables()
+
         build_ext.build_extensions(self)
 
+        if SUBPROCESS_BOOTSTRAP:
+            # Drop our custom subprocess module:
+            # use the newly built subprocess module
+            del sys.modules['subprocess']
+
         for ext in self.extensions:
             self.check_extension_import(ext)
 
+        self.summary(mods_built, mods_disabled)
+
+    def summary(self, mods_built, mods_disabled):
         longest = max([len(e.name) for e in self.extensions], default=0)
         if self.failed or self.failed_on_import:
             all_failed = self.failed + self.failed_on_import
@@ -435,6 +507,14 @@
             print_three_column([ext.name for ext in mods_disabled])
             print()
 
+        if self.disabled_configure:
+            print()
+            print("The following modules found by detect_modules() in"
+            " setup.py have not")
+            print("been built, they are *disabled* by configure:")
+            print_three_column(self.disabled_configure)
+            print()
+
         if self.failed:
             failed = self.failed[:]
             print()
@@ -552,11 +632,11 @@
         tmpfile = os.path.join(self.build_temp, 'multiarch')
         if not os.path.exists(self.build_temp):
             os.makedirs(self.build_temp)
-        ret = os.system(
+        ret = run_command(
             '%s -print-multiarch > %s 2> /dev/null' % (cc, tmpfile))
         multiarch_path_component = ''
         try:
-            if ret >> 8 == 0:
+            if ret == 0:
                 with open(tmpfile) as fp:
                     multiarch_path_component = fp.readline().strip()
         finally:
@@ -577,11 +657,11 @@
         tmpfile = os.path.join(self.build_temp, 'multiarch')
         if not os.path.exists(self.build_temp):
             os.makedirs(self.build_temp)
-        ret = os.system(
+        ret = run_command(
             'dpkg-architecture %s -qDEB_HOST_MULTIARCH > %s 2> /dev/null' %
             (opt, tmpfile))
         try:
-            if ret >> 8 == 0:
+            if ret == 0:
                 with open(tmpfile) as fp:
                     multiarch_path_component = fp.readline().strip()
                 add_dir_to_list(self.compiler.library_dirs,
@@ -596,12 +676,12 @@
         tmpfile = os.path.join(self.build_temp, 'ccpaths')
         if not os.path.exists(self.build_temp):
             os.makedirs(self.build_temp)
-        ret = os.system('%s -E -v - </dev/null 2>%s 1>/dev/null' % (cc, tmpfile))
+        ret = run_command('%s -E -v - </dev/null 2>%s 1>/dev/null' % (cc, tmpfile))
         is_gcc = False
         is_clang = False
         in_incdirs = False
         try:
-            if ret >> 8 == 0:
+            if ret == 0:
                 with open(tmpfile) as fp:
                     for line in fp.readlines():
                         if line.startswith("gcc version"):
@@ -734,12 +814,14 @@
 
         # math library functions, e.g. sin()
         self.add(Extension('math',  ['mathmodule.c'],
+                           extra_compile_args=['-DPy_BUILD_CORE_MODULE'],
                            extra_objects=[shared_math],
                            depends=['_math.h', shared_math],
                            libraries=['m']))
 
         # complex math library functions
         self.add(Extension('cmath', ['cmathmodule.c'],
+                           extra_compile_args=['-DPy_BUILD_CORE_MODULE'],
                            extra_objects=[shared_math],
                            depends=['_math.h', shared_math],
                            libraries=['m']))
@@ -757,8 +839,11 @@
         # uses modf().
         self.add(Extension('_datetime', ['_datetimemodule.c'],
                            libraries=['m']))
+        # zoneinfo module
+        self.add(Extension('_zoneinfo', ['_zoneinfo.c'])),
         # random number generator implemented in C
-        self.add(Extension("_random", ["_randommodule.c"]))
+        self.add(Extension("_random", ["_randommodule.c"],
+                           extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
         # bisect
         self.add(Extension("_bisect", ["_bisectmodule.c"]))
         # heapq
@@ -780,7 +865,8 @@
         # _opcode module
         self.add(Extension('_opcode', ['_opcode.c']))
         # asyncio speedups
-        self.add(Extension("_asyncio", ["_asynciomodule.c"]))
+        self.add(Extension("_asyncio", ["_asynciomodule.c"],
+                           extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
         # _abc speedups
         self.add(Extension("_abc", ["_abc.c"]))
         # _queue module
@@ -887,14 +973,14 @@
         # Determine if readline is already linked against curses or tinfo.
         if do_readline:
             if CROSS_COMPILING:
-                ret = os.system("%s -d %s | grep '(NEEDED)' > %s" \
+                ret = run_command("%s -d %s | grep '(NEEDED)' > %s"
                                 % (sysconfig.get_config_var('READELF'),
                                    do_readline, tmpfile))
             elif find_executable('ldd'):
-                ret = os.system("ldd %s > %s" % (do_readline, tmpfile))
+                ret = run_command("ldd %s > %s" % (do_readline, tmpfile))
             else:
-                ret = 256
-            if ret >> 8 == 0:
+                ret = 1
+            if ret == 0:
                 with open(tmpfile) as fp:
                     for ln in fp:
                         if 'curses' in ln:
@@ -927,7 +1013,7 @@
             os_release = int(os.uname()[2].split('.')[0])
             dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET')
             if (dep_target and
-                    (tuple(int(n) for n in dep_target.split('.')[0:2])
+                    (tuple(int(n) for n in str(dep_target).split('.')[0:2])
                         < (10, 5) ) ):
                 os_release = 8
             if os_release < 9:
@@ -1018,9 +1104,9 @@
         if (curses_enabled and not skip_curses_panel and
                 self.compiler.find_library_file(self.lib_dirs, panel_library)):
             self.add(Extension('_curses_panel', ['_curses_panel.c'],
-                               include_dirs=curses_includes,
-                               define_macros=curses_defines,
-                               libraries=[panel_library, *curses_libs]))
+                           include_dirs=curses_includes,
+                           define_macros=curses_defines,
+                           libraries=[panel_library, *curses_libs]))
         elif not skip_curses_panel:
             self.missing.append('_curses_panel')
 
@@ -1043,8 +1129,12 @@
     def detect_socket(self):
         # socket(2)
         if not VXWORKS:
-            self.add(Extension('_socket', ['socketmodule.c'],
-                               depends=['socketmodule.h']))
+            kwargs = {'depends': ['socketmodule.h']}
+            if MACOS:
+                # Issue #35569: Expose RFC 3542 socket options.
+                kwargs['extra_compile_args'] = ['-D__APPLE_USE_RFC_3542']
+
+            self.add(Extension('_socket', ['socketmodule.c'], **kwargs))
         elif self.compiler.find_library_file(self.lib_dirs, 'net'):
             libs = ['net']
             self.add(Extension('_socket', ['socketmodule.c'],
@@ -1609,9 +1699,9 @@
                              ]
 
             cc = sysconfig.get_config_var('CC').split()[0]
-            ret = os.system(
+            ret = run_command(
                       '"%s" -Werror -Wno-unreachable-code -E -xc /dev/null >/dev/null 2>&1' % cc)
-            if ret >> 8 == 0:
+            if ret == 0:
                 extra_compile_args.append('-Wno-unreachable-code')
 
         self.add(Extension('pyexpat',
@@ -1752,33 +1842,75 @@
         return True
 
     def detect_tkinter_darwin(self):
-        # The _tkinter module, using frameworks. Since frameworks are quite
-        # different the UNIX search logic is not sharable.
+        # Build default _tkinter on macOS using Tcl and Tk frameworks.
+        #
+        # The macOS native Tk (AKA Aqua Tk) and Tcl are most commonly
+        # built and installed as macOS framework bundles.  However,
+        # for several reasons, we cannot take full advantage of the
+        # Apple-supplied compiler chain's -framework options here.
+        # Instead, we need to find and pass to the compiler the
+        # absolute paths of the Tcl and Tk headers files we want to use
+        # and the absolute path to the directory containing the Tcl
+        # and Tk frameworks for linking.
+        #
+        # We want to handle here two common use cases on macOS:
+        # 1. Build and link with system-wide third-party or user-built
+        #    Tcl and Tk frameworks installed in /Library/Frameworks.
+        # 2. Build and link using a user-specified macOS SDK so that the
+        #    built Python can be exported to other systems.  In this case,
+        #    search only the SDK's /Library/Frameworks (normally empty)
+        #    and /System/Library/Frameworks.
+        #
+        # Any other use case should be able to be handled explicitly by
+        # using the options described above in detect_tkinter_explicitly().
+        # In particular it would be good to handle here the case where
+        # you want to build and link with a framework build of Tcl and Tk
+        # that is not in /Library/Frameworks, say, in your private
+        # $HOME/Library/Frameworks directory or elsewhere. It turns
+        # out to be difficult to make that work automatically here
+        # without bringing into play more tools and magic. That case
+        # can be handled using a recipe with the right arguments
+        # to detect_tkinter_explicitly().
+        #
+        # Note also that the fallback case here is to try to use the
+        # Apple-supplied Tcl and Tk frameworks in /System/Library but
+        # be forewarned that they are deprecated by Apple and typically
+        # out-of-date and buggy; their use should be avoided if at
+        # all possible by installing a newer version of Tcl and Tk in
+        # /Library/Frameworks before building Python without
+        # an explicit SDK or by configuring build arguments explicitly.
+
         from os.path import join, exists
-        framework_dirs = [
-            '/Library/Frameworks',
-            '/System/Library/Frameworks/',
-            join(os.getenv('HOME'), '/Library/Frameworks')
-        ]
 
-        sysroot = macosx_sdk_root()
+        sysroot = macosx_sdk_root() # path to the SDK or '/'
 
-        # Find the directory that contains the Tcl.framework and Tk.framework
-        # bundles.
-        # XXX distutils should support -F!
+        if macosx_sdk_specified():
+            # Use case #2: an SDK other than '/' was specified.
+            # Only search there.
+            framework_dirs = [
+                join(sysroot, 'Library', 'Frameworks'),
+                join(sysroot, 'System', 'Library', 'Frameworks'),
+            ]
+        else:
+            # Use case #1: no explicit SDK selected.
+            # Search the local system-wide /Library/Frameworks,
+            # not the one in the default SDK, otherwise fall back to
+            # /System/Library/Frameworks whose header files may be in
+            # the default SDK or, on older systems, actually installed.
+            framework_dirs = [
+                join('/', 'Library', 'Frameworks'),
+                join(sysroot, 'System', 'Library', 'Frameworks'),
+            ]
+
+        # Find the directory that contains the Tcl.framework and
+        # Tk.framework bundles.
         for F in framework_dirs:
             # both Tcl.framework and Tk.framework should be present
-
-
             for fw in 'Tcl', 'Tk':
-                if is_macosx_sdk_path(F):
-                    if not exists(join(sysroot, F[1:], fw + '.framework')):
-                        break
-                else:
-                    if not exists(join(F, fw + '.framework')):
-                        break
+                if not exists(join(F, fw + '.framework')):
+                    break
             else:
-                # ok, F is now directory with both frameworks. Continure
+                # ok, F is now directory with both frameworks. Continue
                 # building
                 break
         else:
@@ -1786,24 +1918,16 @@
             # will now resume.
             return False
 
-        # For 8.4a2, we must add -I options that point inside the Tcl and Tk
-        # frameworks. In later release we should hopefully be able to pass
-        # the -F option to gcc, which specifies a framework lookup path.
-        #
         include_dirs = [
             join(F, fw + '.framework', H)
             for fw in ('Tcl', 'Tk')
-            for H in ('Headers', 'Versions/Current/PrivateHeaders')
+            for H in ('Headers',)
         ]
 
-        # For 8.4a2, the X11 headers are not included. Rather than include a
-        # complicated search, this is a hard-coded path. It could bail out
-        # if X11 libs are not found...
-        include_dirs.append('/usr/X11R6/include')
-        frameworks = ['-framework', 'Tcl', '-framework', 'Tk']
+        # Add the base framework directory as well
+        compile_args = ['-F', F]
 
-        # All existing framework builds of Tcl/Tk don't support 64-bit
-        # architectures.
+        # Do not build tkinter for archs that this Tk was not built with.
         cflags = sysconfig.get_config_vars('CFLAGS')[0]
         archs = re.findall(r'-arch\s+(\w+)', cflags)
 
@@ -1811,13 +1935,9 @@
         if not os.path.exists(self.build_temp):
             os.makedirs(self.build_temp)
 
-        # Note: cannot use os.popen or subprocess here, that
-        # requires extensions that are not available here.
-        if is_macosx_sdk_path(F):
-            os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(os.path.join(sysroot, F[1:]), tmpfile))
-        else:
-            os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(F, tmpfile))
-
+        run_command(
+            "file {}/Tk.framework/Tk | grep 'for architecture' > {}".format(F, tmpfile)
+        )
         with open(tmpfile) as fp:
             detected_archs = []
             for ln in fp:
@@ -1826,16 +1946,26 @@
                     detected_archs.append(ln.split()[-1])
         os.unlink(tmpfile)
 
+        arch_args = []
         for a in detected_archs:
-            frameworks.append('-arch')
-            frameworks.append(a)
+            arch_args.append('-arch')
+            arch_args.append(a)
+
+        compile_args += arch_args
+        link_args = [','.join(['-Wl', '-F', F, '-framework', 'Tcl', '-framework', 'Tk']), *arch_args]
+
+        # The X11/xlib.h file bundled in the Tk sources can cause function
+        # prototype warnings from the compiler. Since we cannot easily fix
+        # that, suppress the warnings here instead.
+        if '-Wstrict-prototypes' in cflags.split():
+            compile_args.append('-Wno-strict-prototypes')
 
         self.add(Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
                            define_macros=[('WITH_APPINIT', 1)],
                            include_dirs=include_dirs,
                            libraries=[],
-                           extra_compile_args=frameworks[2:],
-                           extra_link_args=frameworks))
+                           extra_compile_args=compile_args,
+                           extra_link_args=link_args))
         return True
 
     def detect_tkinter(self):
@@ -1956,45 +2086,19 @@
                            library_dirs=added_lib_dirs))
         return True
 
-    def configure_ctypes_darwin(self, ext):
-        # Darwin (OS X) uses preconfigured files, in
-        # the Modules/_ctypes/libffi_osx directory.
-        ffi_srcdir = os.path.abspath(os.path.join(self.srcdir, 'Modules',
-                                                  '_ctypes', 'libffi_osx'))
-        sources = [os.path.join(ffi_srcdir, p)
-                   for p in ['ffi.c',
-                             'x86/darwin64.S',
-                             'x86/x86-darwin.S',
-                             'x86/x86-ffi_darwin.c',
-                             'x86/x86-ffi64.c',
-                             'powerpc/ppc-darwin.S',
-                             'powerpc/ppc-darwin_closure.S',
-                             'powerpc/ppc-ffi_darwin.c',
-                             'powerpc/ppc64-darwin_closure.S',
-                             ]]
-
-        # Add .S (preprocessed assembly) to C compiler source extensions.
-        self.compiler.src_extensions.append('.S')
-
-        include_dirs = [os.path.join(ffi_srcdir, 'include'),
-                        os.path.join(ffi_srcdir, 'powerpc')]
-        ext.include_dirs.extend(include_dirs)
-        ext.sources.extend(sources)
-        return True
-
     def configure_ctypes(self, ext):
-        if not self.use_system_libffi:
-            if MACOS:
-                return self.configure_ctypes_darwin(ext)
-            print('INFO: Could not locate ffi libs and/or headers')
-            return False
         return True
 
     def detect_ctypes(self):
         # Thomas Heller's _ctypes module
-        self.use_system_libffi = False
+
+        if (not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and MACOS):
+            self.use_system_libffi = True
+        else:
+            self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS")
+
         include_dirs = []
-        extra_compile_args = []
+        extra_compile_args = ['-DPy_BUILD_CORE_MODULE']
         extra_link_args = []
         sources = ['_ctypes/_ctypes.c',
                    '_ctypes/callbacks.c',
@@ -2005,11 +2109,9 @@
 
         if MACOS:
             sources.append('_ctypes/malloc_closure.c')
-            sources.append('_ctypes/darwin/dlfcn_simple.c')
+            extra_compile_args.append('-DUSING_MALLOC_CLOSURE_DOT_C=1')
             extra_compile_args.append('-DMACOSX')
             include_dirs.append('_ctypes/darwin')
-            # XXX Is this still needed?
-            # extra_link_args.extend(['-read_only_relocs', 'warning'])
 
         elif HOST_PLATFORM == 'sunos5':
             # XXX This shouldn't be necessary; it appears that some
@@ -2039,31 +2141,48 @@
                                sources=['_ctypes/_ctypes_test.c'],
                                libraries=['m']))
 
+        ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR")
+        ffi_lib = None
+
         ffi_inc_dirs = self.inc_dirs.copy()
         if MACOS:
-            if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"):
-                return
-            # OS X 10.5 comes with libffi.dylib; the include files are
-            # in /usr/include/ffi
-            ffi_inc_dirs.append('/usr/include/ffi')
+            ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi")
 
-        ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
-        if not ffi_inc or ffi_inc[0] == '':
-            ffi_inc = find_file('ffi.h', [], ffi_inc_dirs)
-        if ffi_inc is not None:
-            ffi_h = ffi_inc[0] + '/ffi.h'
+            if not ffi_inc:
+                if os.path.exists(ffi_in_sdk):
+                    ext.extra_compile_args.append("-DUSING_APPLE_OS_LIBFFI=1")
+                    ffi_inc = ffi_in_sdk
+                    ffi_lib = 'ffi'
+                else:
+                    # OS X 10.5 comes with libffi.dylib; the include files are
+                    # in /usr/include/ffi
+                    ffi_inc_dirs.append('/usr/include/ffi')
+
+        if not ffi_inc:
+            found = find_file('ffi.h', [], ffi_inc_dirs)
+            if found:
+                ffi_inc = found[0]
+        if ffi_inc:
+            ffi_h = ffi_inc + '/ffi.h'
             if not os.path.exists(ffi_h):
                 ffi_inc = None
                 print('Header file {} does not exist'.format(ffi_h))
-        ffi_lib = None
-        if ffi_inc is not None:
+        if ffi_lib is None and ffi_inc:
             for lib_name in ('ffi', 'ffi_pic'):
                 if (self.compiler.find_library_file(self.lib_dirs, lib_name)):
                     ffi_lib = lib_name
                     break
 
         if ffi_inc and ffi_lib:
-            ext.include_dirs.extend(ffi_inc)
+            ffi_headers = glob(os.path.join(ffi_inc, '*.h'))
+            if grep_headers_for('ffi_prep_cif_var', ffi_headers):
+                ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1")
+            if grep_headers_for('ffi_prep_closure_loc', ffi_headers):
+                ext.extra_compile_args.append("-DHAVE_FFI_PREP_CLOSURE_LOC=1")
+            if grep_headers_for('ffi_closure_alloc', ffi_headers):
+                ext.extra_compile_args.append("-DHAVE_FFI_CLOSURE_ALLOC=1")
+
+            ext.include_dirs.append(ffi_inc)
             ext.libraries.append(ffi_lib)
             self.use_system_libffi = True
 
@@ -2097,7 +2216,7 @@
               '_decimal/libmpdec/fnt.c',
               '_decimal/libmpdec/fourstep.c',
               '_decimal/libmpdec/io.c',
-              '_decimal/libmpdec/memory.c',
+              '_decimal/libmpdec/mpalloc.c',
               '_decimal/libmpdec/mpdecimal.c',
               '_decimal/libmpdec/numbertheory.c',
               '_decimal/libmpdec/sixstep.c',
@@ -2244,34 +2363,73 @@
                            libraries=openssl_libs))
 
     def detect_hash_builtins(self):
-        # We always compile these even when OpenSSL is available (issue #14693).
-        # It's harmless and the object code is tiny (40-50 KiB per module,
-        # only loaded when actually used).
-        self.add(Extension('_sha256', ['sha256module.c'],
-                           depends=['hashlib.h']))
-        self.add(Extension('_sha512', ['sha512module.c'],
-                           depends=['hashlib.h']))
-        self.add(Extension('_md5', ['md5module.c'],
-                           depends=['hashlib.h']))
-        self.add(Extension('_sha1', ['sha1module.c'],
-                           depends=['hashlib.h']))
+        # By default we always compile these even when OpenSSL is available
+        # (issue #14693). It's harmless and the object code is tiny
+        # (40-50 KiB per module, only loaded when actually used).  Modules can
+        # be disabled via the --with-builtin-hashlib-hashes configure flag.
+        supported = {"md5", "sha1", "sha256", "sha512", "sha3", "blake2"}
 
-        blake2_deps = glob(os.path.join(escape(self.srcdir),
-                                        'Modules/_blake2/impl/*'))
-        blake2_deps.append('hashlib.h')
+        configured = sysconfig.get_config_var("PY_BUILTIN_HASHLIB_HASHES")
+        configured = configured.strip('"').lower()
+        configured = {
+            m.strip() for m in configured.split(",")
+        }
 
-        self.add(Extension('_blake2',
-                           ['_blake2/blake2module.c',
-                            '_blake2/blake2b_impl.c',
-                            '_blake2/blake2s_impl.c'],
-                           depends=blake2_deps))
+        self.disabled_configure.extend(
+            sorted(supported.difference(configured))
+        )
 
-        sha3_deps = glob(os.path.join(escape(self.srcdir),
-                                      'Modules/_sha3/kcp/*'))
-        sha3_deps.append('hashlib.h')
-        self.add(Extension('_sha3',
-                           ['_sha3/sha3module.c'],
-                           depends=sha3_deps))
+        if "sha256" in configured:
+            self.add(Extension(
+                '_sha256', ['sha256module.c'],
+                extra_compile_args=['-DPy_BUILD_CORE_MODULE'],
+                depends=['hashlib.h']
+            ))
+
+        if "sha512" in configured:
+            self.add(Extension(
+                '_sha512', ['sha512module.c'],
+                extra_compile_args=['-DPy_BUILD_CORE_MODULE'],
+                depends=['hashlib.h']
+            ))
+
+        if "md5" in configured:
+            self.add(Extension(
+                '_md5', ['md5module.c'],
+                depends=['hashlib.h']
+            ))
+
+        if "sha1" in configured:
+            self.add(Extension(
+                '_sha1', ['sha1module.c'],
+                depends=['hashlib.h']
+            ))
+
+        if "blake2" in configured:
+            blake2_deps = glob(
+                os.path.join(escape(self.srcdir), 'Modules/_blake2/impl/*')
+            )
+            blake2_deps.append('hashlib.h')
+            self.add(Extension(
+                '_blake2',
+                [
+                    '_blake2/blake2module.c',
+                    '_blake2/blake2b_impl.c',
+                    '_blake2/blake2s_impl.c'
+                ],
+                depends=blake2_deps
+            ))
+
+        if "sha3" in configured:
+            sha3_deps = glob(
+                os.path.join(escape(self.srcdir), 'Modules/_sha3/kcp/*')
+            )
+            sha3_deps.append('hashlib.h')
+            self.add(Extension(
+                '_sha3',
+                ['_sha3/sha3module.c'],
+                depends=sha3_deps
+            ))
 
     def detect_nis(self):
         if MS_WINDOWS or CYGWIN or HOST_PLATFORM == 'qnx6':
@@ -2396,6 +2554,7 @@
         ProcessPoolExecutor = None
 
     sys.modules['concurrent.futures.process'] = DummyProcess
+    validate_tzpath()
 
     # turn off warnings when deprecated modules are imported
     import warnings